From d72a573b5278c18f0c300d00b3df153443f7cb6d Mon Sep 17 00:00:00 2001 From: Maksim Kotlyar Date: Fri, 30 Dec 2016 11:29:42 +0200 Subject: [PATCH 01/23] add bin/release script. to simplify releasing of new versions. --- bin/release | 31 +++++++++++++++++++++++++++++++ bin/subtree-split | 5 +---- 2 files changed, 32 insertions(+), 4 deletions(-) create mode 100755 bin/release diff --git a/bin/release b/bin/release new file mode 100755 index 000000000..9890f5927 --- /dev/null +++ b/bin/release @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +set -e +set -x + +if (( "$#" != 1 )) +then + echo "Tag has to be provided" + exit 1 +fi + +./bin/subtree-split + +CURRENT_BRANCH=`git rev-parse --abbrev-ref HEAD` + +for REMOTE in amqp-ext enqueue enqueue-bundle job-queue psr-queue stomp test +do + TMP_DIR="/tmp/enqueue-repo" + REMOTE_URL=`git remote get-url $REMOTE` + + rm -rf $TMP_DIR; + mkdir $TMP_DIR; + + ( + cd $TMP_DIR; + git clone $REMOTE_URL . --depth=10 + git checkout $CURRENT_BRANCH; + git tag $1 -m "Release $1" + git push origin --tags + ) +done diff --git a/bin/subtree-split b/bin/subtree-split index 021177f8c..0d030e9e3 100755 --- a/bin/subtree-split +++ b/bin/subtree-split @@ -3,13 +3,12 @@ set -e set -x -CURRENT_BRANCH=`git name-rev --name-only HEAD` +CURRENT_BRANCH=`git rev-parse --abbrev-ref HEAD` function split() { # split_new_repo $1 $2 - CURRENT_BRANCH=`git name-rev --name-only HEAD` SHA1=`./bin/splitsh-lite --prefix=$1` git push $2 "$SHA1:$CURRENT_BRANCH" @@ -33,8 +32,6 @@ function split_new_repo() git push origin master; ); - CURRENT_BRANCH=`git name-rev --name-only HEAD` - SHA1=`./bin/splitsh-lite --prefix=$1` git fetch $2 git push $2 "$SHA1:$CURRENT_BRANCH" -f From 69058b69639fcd27f1f35e2ab9d583153cb612d1 Mon Sep 17 00:00:00 2001 From: Maksim Kotlyar Date: Fri, 30 Dec 2016 11:29:58 +0200 Subject: [PATCH 02/23] [amqp] require stable versions. --- pkg/amqp-ext/composer.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/amqp-ext/composer.json b/pkg/amqp-ext/composer.json index 72f06288a..7edd3d84c 100644 --- a/pkg/amqp-ext/composer.json +++ b/pkg/amqp-ext/composer.json @@ -12,14 +12,14 @@ ], "require": { "php": ">=5.6", - "ext-amqp": "*", - "enqueue/psr-queue": "dev-master", + "ext-amqp": "^1.6", + "enqueue/psr-queue": "^0.1", "psr/log": "^1" }, "require-dev": { "phpunit/phpunit": "~5.4.0", - "enqueue/test": "dev-master", - "enqueue/enqueue": "dev-master", + "enqueue/test": "^0.1", + "enqueue/enqueue": "^0.1", "symfony/dependency-injection": "^2.8|^3", "symfony/config": "^2.8|^3" }, From 5671bf411fbb31eba50a73ee2fb2224663d47b2a Mon Sep 17 00:00:00 2001 From: Maksim Kotlyar Date: Fri, 30 Dec 2016 11:39:03 +0200 Subject: [PATCH 03/23] require stable versions, not dev-master --- pkg/enqueue-bundle/composer.json | 10 +++++----- pkg/enqueue/composer.json | 4 ++-- pkg/job-queue/composer.json | 4 ++-- pkg/psr-queue/composer.json | 2 +- pkg/stomp/composer.json | 6 +++--- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/pkg/enqueue-bundle/composer.json b/pkg/enqueue-bundle/composer.json index 95e2e9c18..0dc4e0e1d 100644 --- a/pkg/enqueue-bundle/composer.json +++ b/pkg/enqueue-bundle/composer.json @@ -13,14 +13,14 @@ "require": { "php": ">=5.6", "symfony/framework-bundle": "^2.8|^3", - "enqueue/enqueue": "dev-master" + "enqueue/enqueue": "^0.1" }, "require-dev": { "phpunit/phpunit": "~5.5", - "enqueue/stomp": "dev-master", - "enqueue/amqp-ext": "dev-master", - "enqueue/job-queue": "dev-master", - "enqueue/test": "dev-master", + "enqueue/stomp": "^0.1", + "enqueue/amqp-ext": "^0.1", + "enqueue/job-queue": "^0.1", + "enqueue/test": "^0.1", "doctrine/doctrine-bundle": "~1.2", "symfony/monolog-bundle": "^2.8|^3", "symfony/browser-kit": "^2.8|^3", diff --git a/pkg/enqueue/composer.json b/pkg/enqueue/composer.json index 2a54ba547..32a928a22 100644 --- a/pkg/enqueue/composer.json +++ b/pkg/enqueue/composer.json @@ -12,7 +12,7 @@ ], "require": { "php": ">=5.6", - "enqueue/psr-queue": "dev-master", + "enqueue/psr-queue": "^0.1", "ramsey/uuid": "^2|^3.5" }, "require-dev": { @@ -20,7 +20,7 @@ "symfony/console": "^2.8|^3", "symfony/dependency-injection": "^2.8|^3", "symfony/config": "^2.8|^3", - "enqueue/test": "dev-master" + "enqueue/test": "^0.1" }, "suggest": { "symfony/console": "^2.8|^3 If you want to use li commands", diff --git a/pkg/job-queue/composer.json b/pkg/job-queue/composer.json index 2a040e1b9..758110d19 100644 --- a/pkg/job-queue/composer.json +++ b/pkg/job-queue/composer.json @@ -13,12 +13,12 @@ "require": { "php": ">=5.6", "symfony/framework-bundle": "^2.8|^3", - "enqueue/enqueue": "dev-master", + "enqueue/enqueue": "^0.1", "doctrine/orm": "~2.4" }, "require-dev": { "phpunit/phpunit": "~5.5", - "enqueue/test": "dev-master", + "enqueue/test": "^0.1", "doctrine/doctrine-bundle": "~1.2", "symfony/browser-kit": "^2.8|^3", "symfony/expression-language": "^2.8|^3" diff --git a/pkg/psr-queue/composer.json b/pkg/psr-queue/composer.json index 1d5dd6577..5b5f05dcb 100644 --- a/pkg/psr-queue/composer.json +++ b/pkg/psr-queue/composer.json @@ -15,7 +15,7 @@ }, "require-dev": { "phpunit/phpunit": "~5.5", - "enqueue/test": "dev-master" + "enqueue/test": "^0.1" }, "autoload": { "psr-4": { "Enqueue\\Psr\\": "" }, diff --git a/pkg/stomp/composer.json b/pkg/stomp/composer.json index 56a2d4924..b8c0a169e 100644 --- a/pkg/stomp/composer.json +++ b/pkg/stomp/composer.json @@ -13,15 +13,15 @@ "require": { "php": ">=5.6", "stomp-php/stomp-php": "^4", - "enqueue/psr-queue": "dev-master", + "enqueue/psr-queue": "^0.1", "php-http/guzzle6-adapter": "^1.1", "richardfullmer/rabbitmq-management-api": "^2.0", "psr/log": "^1" }, "require-dev": { "phpunit/phpunit": "~5.4.0", - "enqueue/test": "dev-master", - "enqueue/enqueue": "dev-master", + "enqueue/test": "^0.1", + "enqueue/enqueue": "^0.1", "symfony/dependency-injection": "^2.8|^3", "symfony/config": "^2.8|^3" }, From 12dc8cd854d337de6aa2f805009d4f7d5e9498ef Mon Sep 17 00:00:00 2001 From: Maksym Kotliar Date: Fri, 30 Dec 2016 13:54:38 +0200 Subject: [PATCH 04/23] [docs][bundle] add cli commands description and configuration descritpino --- docs/bundle/cli_commands.md | 160 ++++++++++++++++++++++++++++++++ docs/bundle/config_reference.md | 105 +++++++++++++++++++++ docs/bundle/quick_tour.md | 2 +- docs/index.md | 4 +- 4 files changed, 269 insertions(+), 2 deletions(-) create mode 100644 docs/bundle/cli_commands.md create mode 100644 docs/bundle/config_reference.md diff --git a/docs/bundle/cli_commands.md b/docs/bundle/cli_commands.md new file mode 100644 index 000000000..96b708178 --- /dev/null +++ b/docs/bundle/cli_commands.md @@ -0,0 +1,160 @@ +# Cli commands + +## enqueue:consume + +``` +./bin/console enqueue:consume --help +Usage: + enqueue:consume [options] [--] []... + enq:c + +Arguments: + client-queue-names Queues to consume messages from + +Options: + --message-limit=MESSAGE-LIMIT Consume n messages and exit + --time-limit=TIME-LIMIT Consume messages during this time + --memory-limit=MEMORY-LIMIT Consume messages until process reaches this memory limit in MB + --setup-broker Creates queues, topics, exchanges, binding etc on broker side. + -h, --help Display this help message + -q, --quiet Do not output any message + -V, --version Display this application version + --ansi Force ANSI output + --no-ansi Disable ANSI output + -n, --no-interaction Do not ask any interactive question + -e, --env=ENV The environment name [default: "dev"] + --no-debug Switches off debug mode + -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +Help: + A client's worker that processes messages. By default it connects to default queue. It select an appropriate message processor based on a message headers +``` + +## enqueue:produce + +``` +./bin/console enqueue:produce --help +Usage: + enqueue:produce + enq:p + +Arguments: + topic A topic to send message to + message A message to send + +Options: + -h, --help Display this help message + -q, --quiet Do not output any message + -V, --version Display this application version + --ansi Force ANSI output + --no-ansi Disable ANSI output + -n, --no-interaction Do not ask any interactive question + -e, --env=ENV The environment name [default: "dev"] + --no-debug Switches off debug mode + -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +Help: + A command to send a message to topic +``` + +## enqueue:setup-broker + +``` +./bin/console enqueue:setup-broker --help +Usage: + enqueue:setup-broker + enq:sb + +Options: + -h, --help Display this help message + -q, --quiet Do not output any message + -V, --version Display this application version + --ansi Force ANSI output + --no-ansi Disable ANSI output + -n, --no-interaction Do not ask any interactive question + -e, --env=ENV The environment name [default: "dev"] + --no-debug Switches off debug mode + -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +Help: + Creates all required queues +``` + +## enqueue:queues + +``` +/bin/console enqueue:queues --help +Usage: + enqueue:queues + enq:m:q + debug:enqueue:queues + +Options: + -h, --help Display this help message + -q, --quiet Do not output any message + -V, --version Display this application version + --ansi Force ANSI output + --no-ansi Disable ANSI output + -n, --no-interaction Do not ask any interactive question + -e, --env=ENV The environment name [default: "dev"] + --no-debug Switches off debug mode + -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +Help: + A command shows all available queues and some information about them. +``` + +## enqueue:topics + +``` +./bin/console enqueue:topics --help +Usage: + enqueue:topics + enq:m:t + debug:enqueue:topics + +Options: + -h, --help Display this help message + -q, --quiet Do not output any message + -V, --version Display this application version + --ansi Force ANSI output + --no-ansi Disable ANSI output + -n, --no-interaction Do not ask any interactive question + -e, --env=ENV The environment name [default: "dev"] + --no-debug Switches off debug mode + -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +Help: + A command shows all available topics and some information about them. +``` + +## enqueue:transport:consume + +``` +./bin/console enqueue:transport:consume --help +Usage: + enqueue:transport:consume [options] [--] + +Arguments: + queue Queues to consume from + processor-service A message processor service + +Options: + --message-limit=MESSAGE-LIMIT Consume n messages and exit + --time-limit=TIME-LIMIT Consume messages during this time + --memory-limit=MEMORY-LIMIT Consume messages until process reaches this memory limit in MB + -h, --help Display this help message + -q, --quiet Do not output any message + -V, --version Display this application version + --ansi Force ANSI output + --no-ansi Disable ANSI output + -n, --no-interaction Do not ask any interactive question + -e, --env=ENV The environment name [default: "dev"] + --no-debug Switches off debug mode + -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +Help: + A worker that consumes message from a broker. To use this broker you have to explicitly set a queue to consume from and a message processor service +``` + +[back to index](../index.md) \ No newline at end of file diff --git a/docs/bundle/config_reference.md b/docs/bundle/config_reference.md new file mode 100644 index 000000000..e98af73ed --- /dev/null +++ b/docs/bundle/config_reference.md @@ -0,0 +1,105 @@ +# Config reference + +```yaml +# Default configuration for extension with alias: "enqueue" +enqueue: + transport: # Required + default: + alias: ~ # Required + null: [] + stomp: + host: localhost + port: 61613 + login: guest + password: guest + vhost: / + sync: true + connection_timeout: 1 + buffer_size: 1000 + rabbitmq_stomp: + host: localhost + port: 61613 + login: guest + password: guest + vhost: / + sync: true + connection_timeout: 1 + buffer_size: 1000 + + # The option tells whether RabbitMQ broker has management plugin installed or not + management_plugin_installed: false + management_plugin_port: 15672 + + # The option tells whether RabbitMQ broker has delay plugin installed or not + delay_plugin_installed: false + amqp: + + # The host to connect too. Note: Max 1024 characters + host: localhost + + # Port on the host. + port: 5672 + + # The login name to use. Note: Max 128 characters. + login: guest + + # Password. Note: Max 128 characters. + password: guest + + # The virtual host on the host. Note: Max 128 characters. + vhost: / + + # Connection timeout. Note: 0 or greater seconds. May be fractional. + connect_timeout: ~ + + # Timeout in for income activity. Note: 0 or greater seconds. May be fractional. + read_timeout: ~ + + # Timeout in for outcome activity. Note: 0 or greater seconds. May be fractional. + write_timeout: ~ + persisted: false + rabbitmq: + + # The host to connect too. Note: Max 1024 characters + host: localhost + + # Port on the host. + port: 5672 + + # The login name to use. Note: Max 128 characters. + login: guest + + # Password. Note: Max 128 characters. + password: guest + + # The virtual host on the host. Note: Max 128 characters. + vhost: / + + # Connection timeout. Note: 0 or greater seconds. May be fractional. + connect_timeout: ~ + + # Timeout in for income activity. Note: 0 or greater seconds. May be fractional. + read_timeout: ~ + + # Timeout in for outcome activity. Note: 0 or greater seconds. May be fractional. + write_timeout: ~ + persisted: false + + # The option tells whether RabbitMQ broker has delay plugin installed or not + delay_plugin_installed: false + client: + traceable_producer: false + prefix: enqueue + app_name: app + router_topic: router + router_queue: default + router_processor: enqueue.client.router_processor + default_processor_queue: default + redelivered_delay_time: 0 + job: false + extensions: + doctrine_ping_connection_extension: false + doctrine_clear_identity_map_extension: false +``` + +[back to index](../index.md) \ No newline at end of file diff --git a/docs/bundle/quick_tour.md b/docs/bundle/quick_tour.md index f0649c566..c0fecf206 100644 --- a/docs/bundle/quick_tour.md +++ b/docs/bundle/quick_tour.md @@ -80,7 +80,7 @@ foo_message_processor: Now you can start consuming messages: ```bash -$ ./app/console enqueue:consume +$ ./app/console enqueue:consume --setup-broker ``` _**Note**: Add -vvv to find out what is going while you are consuming messages. There is a lot of valuable debug info there._ diff --git a/docs/index.md b/docs/index.md index 2ad4fc6ba..6f45223d4 100644 --- a/docs/index.md +++ b/docs/index.md @@ -7,8 +7,10 @@ - [NULL](null_transport.md) * Consumption - [Extensions](consumption/extensions.md) -* Symfony bundle +* [Symfony] EnqueueBundle. - [Quick tour](bundle/quick_tour.md) + - [Config reference](config_reference.md) + - [Cli commands](cli_commands.md) - [Job queue](bundle/job_queue.md) - [Production settings](bundle/production_settings.md) - [Debuging](bundle/debuging.md) From ed8997a717739243aa04a64728471001c6defb3e Mon Sep 17 00:00:00 2001 From: Maksym Kotliar Date: Fri, 30 Dec 2016 13:56:20 +0200 Subject: [PATCH 05/23] [docs] fix links --- docs/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/index.md b/docs/index.md index 6f45223d4..4c00f474d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -7,10 +7,10 @@ - [NULL](null_transport.md) * Consumption - [Extensions](consumption/extensions.md) -* [Symfony] EnqueueBundle. +* EnqueueBundle (Symfony). - [Quick tour](bundle/quick_tour.md) - - [Config reference](config_reference.md) - - [Cli commands](cli_commands.md) + - [Config reference](bundle/config_reference.md) + - [Cli commands](bundle/cli_commands.md) - [Job queue](bundle/job_queue.md) - [Production settings](bundle/production_settings.md) - [Debuging](bundle/debuging.md) From 390b3e214ec4a5442409683169dca0ab64b3ae4a Mon Sep 17 00:00:00 2001 From: Maksym Kotliar Date: Fri, 30 Dec 2016 14:00:03 +0200 Subject: [PATCH 06/23] [docs] add links --- docs/bundle/cli_commands.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/bundle/cli_commands.md b/docs/bundle/cli_commands.md index 96b708178..5f636128a 100644 --- a/docs/bundle/cli_commands.md +++ b/docs/bundle/cli_commands.md @@ -1,5 +1,12 @@ # Cli commands +* [enqueue:consume](#enqueueconsume) +* [enqueue:produce](#enqueueproduce) +* [enqueue:setup-broker](#enqueuesetup-broker) +* [enqueue:queues](#enqueuequeues) +* [enqueue:topics](#enqueuetopics) +* [enqueue:transport:consume](#enqueuetransportconsume) + ## enqueue:consume ``` From 8faf6a1d5184f9a078347a3f3e9a220ae732587a Mon Sep 17 00:00:00 2001 From: Maksym Kotliar Date: Fri, 30 Dec 2016 14:37:35 +0200 Subject: [PATCH 07/23] [docs] Add docs about the bundle's profiler --- docs/bundle/debuging.md | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/docs/bundle/debuging.md b/docs/bundle/debuging.md index 52c951ae2..f8f4d3e9e 100644 --- a/docs/bundle/debuging.md +++ b/docs/bundle/debuging.md @@ -1,3 +1,53 @@ # Debugging +## Profiler + +It may be useful to see what messages were sent during a http request. +The bundle provides a collector for Symfony [profiler](http://symfony.com/doc/current/profiler.html). +The extension collects all sent messages + +To enable profiler + +```yaml +# app/config/config_dev.yml + +enqueue: + client: + traceable_producer: true +``` + +Now suppose you have this code in an action: + +```php +get('enqueue.message_producer'); + + $producer->send('foo_topic', 'Hello world'); + + $producer->send('bar_topic', ['bar' => 'val']); + + $message = new Message(); + $message->setBody('baz'); + $producer->send('baz_topic', $message); + + // ... + } + +``` + +For this action you may see something like this in the profiler: + [back to index](../index.md) \ No newline at end of file From bca222c7c5df8dec7bf1202299ea150e43264eec Mon Sep 17 00:00:00 2001 From: Maksym Kotliar Date: Fri, 30 Dec 2016 14:41:32 +0200 Subject: [PATCH 08/23] [docs] add symfony profiler img. --- docs/bundle/debuging.md | 2 ++ docs/images/symfony_profiler.png | Bin 0 -> 142429 bytes 2 files changed, 2 insertions(+) create mode 100644 docs/images/symfony_profiler.png diff --git a/docs/bundle/debuging.md b/docs/bundle/debuging.md index f8f4d3e9e..c1363199b 100644 --- a/docs/bundle/debuging.md +++ b/docs/bundle/debuging.md @@ -18,6 +18,8 @@ enqueue: Now suppose you have this code in an action: +![Symfony profiler](../images/symfony_profiler.png) + ```php 8QhwZQFJ_w$-tXj@hwocWm3}*tT};oc*5fod4n<{q}!xZqFD` zZuS^itDdS^bJePvPq?DI1R~s5I1msJL@7y8We^Z36c7;b6&NVsFV|8A{U9I+UoAyM z6s1H&h!h>|%q)MHf`CYdC#ge!SCPWXR#%3Br9%Ow%Ht67Oxld}cm9nU50W?V3+4Mj z2rYFB=6BKB{0gFoYRF%WM!kK+%dbO$5q0#KzjJRC&;*y>$DgmbZV$cOE<0~GUd=Ys zKm}Lg$WZoksX_K{ZiAV6eJ2X{zmQ9Tl?o!x_%kUQ){22`9UsGhm==DvBdmjjHFR6i zMc+>YKB>#`s>2XL&=4KIN(@W|KcRrMuxk@dK>N?Y-ix!`LMp!@8M%BTg#n499mH|0 zBpI}H{6SM69tjBL1OZ`A8bmV#$t8`RrZq6{;gkjovw6lNAl$7&@v3Ff#0w)si5;KJ z0Q4}hQOI5a}u9K zMME>4{7eeZV*eBr*jluKto-xkYr`$*;Ixl85_VySsKk1vfvdS-Atpy$Sr&EHcr3Gi zv(dx3pk)dH7JAXkNHPa8DO3_X&UJr5F6gNKgJEQ+{_WG7NSp^cjD1n$HRFs{u3n}a zZsS)m$Xb#v^_v~Age6d~#6h^oZSOP5-6YwR!lh zeG(ym$RHwc`+)o3W&irpJ5GNzF=x z_ahCp1HdT2>IO*!ok76vuuFm{m?(u*72ie#3ox1oh6{ofKq8u_Kp8(oEpHe9YDB*b z^%DO0#WU5@7{GQ3!vYxWG_;jheB~1XP&V5&zB%wyon77HEYfIFb0OAC;=VI~6sQS^ z13s(8@s>kBEyC$~k&JAXsm{S%zgUCGo)gqXoMO2`8PG7Wfke>wx6Qb?~} z&>4uBK$UI076|TM7kjMgXxnSFy8uweFd`V(yl>8;@Us%KC^Q2E4q_d@1WCcdh2rDB zlY;M%7!|^31|^bUj6j*-Du=#B;0eip!}>+P&whh)BD6`Aqli$He_Bd!6%iw$tEA70 z7cEkfk7Gfg6_%VkK1Hcx znttlqua%(I0b4KBy4TUw|**qafKnWLxnvFUJdo*KaisTG!iE0UNiFJ=( z7W0-pr-+l(BBhC^po$nEK1h(3I+OB}q>xmX+$cmg5v${0$;K0v|8_e%xG#NUd*g6} zal>+x8yFE79@s9N2qt0J)CU)g4@U==g3*QnMOFTVC4z!1CSFWavMirfaZ348X_K0o z`YUxCmAvvk6}@7m@_LQC9w2X5qWtSZ{Ha2gFosHsikp&xvYpD-oCT{&Ix<~wvVyjJ zML||EU#^d0KFtbcFttPCA&n{x8?~;IXHjMDkNoorUb$AqR^{j18`A?l3`h(W3_pzI zG2SGrBob;4)fd&1a@TUD^49Y4?`{=(iayoi$}Fnz-}g$BN^R76svc5fW}}ZkoY{R) zeW2fIJGHY)ZHo!Yvy1eqyVN^HIu%6Z`jtq8jFZJ1hnNsy!HrXyg>kr|FrvVtaHABA zorj-dc49QSiw!4|n6B7{tzIk~*~VEPE%lb(3J2%m=EoMbiWUl8^l_J(=Ccd=RJ`gR zG%q%5PmTG8>V}h}`4}H!kjjnA&e@RdzEYJ&in_p52Do$F|rK(@M=k&CYc? z)9lhF+g#7scQVjo$12XIb~OJFTBCE_L_=j$$B$qwE^R<1yQWJtNt6@rFrhljWii{r z>QY-z+vZCiVn2Cb@pAF#;ez`ffND=Y+79<~VR4jw*fsP*mxryLvE8U0vz_B1`QgW_ z)vGlUYba6ZGtwkd4Sp3~YfJ{d9oK9YIX9iFmCMWS`7W)qt^K6~ldF`=%CX}g)eW{) zm$Wkvj=+qZHSgvETf&X3joS_6md^vji@1y0wY_JEdf0VX9&+9X);kjq+uKBUrcUL~ zCQqpj#173(w#``YC~r=F9-r)IttYeROMuUT`5DC>&-vr#)`nm8=O_p*5oa!KE{P%? zBfq`K_D`bz+^F1_+%AKXZLVGl5twf~-ztP{Lrz2LM9zd?`*ivaL$Y8?LWV=^VEn!q z;(Uv;NDGrk$Y}B0?UYQA^fgiW5(XEoh3_J;O3Tgg(kwL~HJeaQ!53W{NflukSu`vk zyMfPxa)i}Pd}-U^(ZSipCd6eZEv(!3I^aJLAu2WZRM;w&65p8MF*-?Am>86pMfIKl zPEnJ!&NpZ&eUgZ)GFd#8?rE6*(2!|4Tuh^2E+>#GEh#6vk@b>>F<5SRUlLqwBYS52 zTEA4Q@952G&B>>uU<>)E*=Fu3_Hv6b9kqbNm$sRfl-9}Xw+Xd*R{5)vPV=h1pw7({ z`GEBBe4Om4_>f?y0#N^KZgxDG%2ps_Kt_ond9!}Icz6%nAIu{bW>H?srH@bGvO0LU zn=^n6-vL(+&p#oX>S3RJO8Zgyu##M#GUcm={rzbi&l|~0-a1Zbwl6=_$>+#6BXmM0 zV~Kmq!guuT60#TG3QHN&jNz?wxv3@pX(N9?jE=003|^Yx^UIrxPnmMr@4G{z*g@^& zZ5ekN?qqIS-R?VUoRV{+RvQn~=Ofc|Q!Kxx*Vfacyn~Z*9yQLI<&OB4`0kq_>MPYo zjB<=%j97IAosE`|*5V(N?Tvqy^h%v8*Xv^Hd*=+Z@<*HqyCk8%JBp9k}j31YRh(k)B(;4&JA(`+F>L_T&uvE47> zLiZsz5IFNK+mGze4E5jjn?_6Soey;tPmoJFIXW%H{U)iRBcKcQtADmxQuvtFU z8cc$v%fPPd*fqa=Iq&=ARp3TPS7L} z;p6cK$fw9@m&u;XR^$KUr}nu1@jRQIn>~e1xpTp@{VZ#*eevV?0~)*){O8p;zlBff`|(Tdh01P;`A-&s1b%g& z+NZf2wzsp+y!E_qpfV%z_>hdtGk4A)o9AHu$q3U(*8~zu@mt*{fg@K@%n%>w$y>7~ zU<&l@-XLN6Ac7FQ1wTS2A&jWci-xZ_3H`Y_qnZp+i+GmDjg@xjLaq%hj;rWF3Nb;t zU_wKnI1mwiRzOELp|(x3-!>^Qhvi|YAKDb z2w_Rh=PWD*^Gols-JHGtN3u;>;aiQZ+2Nv-9}5rc(YhB>k0=-6`WJ0l-_wHgrxs}e|p%!#Fxt1CbU9AsMw3hLD7i*`IO3mu@cRb>psZ+A8bTS z^p^lnYUhuXOOd*NzEouY?+XVE$>u7xeiTP+GT~|G#~i-FBm8i!hBcDk@@-a zXS+Cf9}Z`d&+n;*eH_?dApiXl6d^TGV36$(Y|D^a@He>1D~&~V7m07=zbTOY$6og- zfYCOUm#cw_)<3ffV(z(4htt0lu)kDFJuhSZ_gz6?SzW*y^PZMo=VPPe z9aI$kamyW!(!p}9whdMOyGKCLEUqESjUgzluj}0y1By@kMlj=7nK9?px|np2 z(h%hZZ%bS&b32Qo-JYL_56j;XVVVeF)a{I1R@=Ct&f@;zB@kFn3Pnwys)`U$?f16T z#nySmLU9#lqUE-o7+V$7GoDi!hKgwZ`z{aCf50T5STL76!rO~mOZ}zc$C>mylpjNS zAZYJR@oKwa^?a?Zb`txd&vp8LMb97OxvnaVKwA*2 zH+9s{R=$edl&@{-bx%&Hr{{RWnW!TMNgtF?d#>Kf7Z5mpP8htzUaBqMTLz*+pE3htUg|t zUC@;LeteWvRnxo|_kZ$MCC1y_YFx}>TbGNj#KEFzQbGghf-Uub-t+2sr&e|8CYhV2 zxzgH0Z^1R$=Q{JB>w)}M+ifrRTUcAEu&dFT#(MD79`6wMPymKes5>p0WAVjIYq6HL zKIN*EVf^7?3jf}^2Ju$vA4HQ&h5q~dvbx%Ed2{1}JOg@D^1;*%-5LAX>m1N~iyXS$ zaf=*FFROZdeEI^b)+H%C+-fCN1-_c%|6-cxVE^ionh5>{O>L^?g&LQx%~-~TGwnk* z%tegDS>VDilMNlU+z{h+V~1SjH7Q)&t6$fYe3Ji_1cEB0L~Zk{ii_H~ut8P)F-0GX zZP``a(KlVJrr?1G;6(qonb`&2R0$>(3@WgG@&C-I@5%l&-0Hfub}P-MJZFxb6Uhdoh&+S4fg(d5(=l_w^9#7#Sy+EPw<2YX;>GPveWhI(|4H7&M8(#Rb?W|f#BowKW z{M)y0qtnw02(bTRzyGAdHd;VOM@Od5>%)a+hdW@Hq5JK|ynI$Fd33dM5++`6i|UTC^kFvN+`EDMRt`{}yk%vliWpP(U~IfiA0+;A%3 zAQ~7RreJ%aNJ9S?pMj#4s({G}J+2=k!XTvTlx*Srdwsb;L6sRk4o`651b1aFsejQm z@U$&8{LhifsOT#3FQ5ZM5gp(!VVnwaq}U9BgwGw6pP$c-Ge15K@8IB&^tGaEyhNdx z{$PH1KMo=tETFuDBOMHD>c6lCwTwSh&={Ka?)~HW3b?+$eo$!W5^Q)!2k-etJ63pj zIDNGG*1;bNhwUEF!oor#Mn=WyUEo@|AuuN9=Eh6ax{3i&R;3cIB7e78E&)Urn{Dz{ zuSheJxx2Cwftph?X;r-_E=pBPD`I_Jr)2W1-TMVXbSgKO=qs`_5pTR8B05TcruVRp zhu!@3%z4b;>FFy5=vS1l3m26eqj+475U8lAjXYt|o2C;560xh4WvQw_tBd$t&#~j< zJ3l}~Q7?uuJ z3s+ai+i|$-{@GxSq;3Kn)8Y?egq`E7HT;5tklrQ5){k=p<0*dcC;O~HK1O6K2Vy2H zBtm(0nn!dx$LY*Pw`XUm*g`^~Vfj-WBVr)bT)^t!4Q~%8B_$rzv2NoywiOv76g6JOQ%uA z%i)=J+G0x5uy1bi@lNBYy@B||%F|vIomn6@47hs#6p@!iMc}`@W==Ok%XA$d?wC8! z$Zmp)ZEAs5(yP8VHx7f-MEfbIHkC83dduu8B~|;9*duZoE>?bZbCMsC$=}6)eRnrs z?+(n@QZcX_-CF>l_Ia~(&~SzA?`0V4SFpPRBOjWDDe&&*E#cH!1Sq$nQhFBZV867J zf+;eEvBH>}Xv2+{bL+-i!6<0dJV<*d^%fabKTN{W1m-gEm7;A@j6@8pp`Yu&(TZl= zLY3}KzdKqIy3l(llS4t3X``35RlNRTi2yulpPV{jpA1J%5{FyokF|)x!NZGqdbYK8 z`YHo)dGKXLH{6HlGQG)eD<+h{69ya#K~P#6POH(XC`;h&x?d}8-VhiidwC)*u9ZWt zeh-<&zgFX=mS7%UYR2=WwW;n`GL-f9N%SRle6BP@F<*-?C62i8Tt6A~jqd0a@|W{F z`=QFOFZ>h+CB`4QD~23#A*ksOnw0WJO{tp2z7>%vj;|-p0$)2hV)e%9-ae!>>Dr^5 zJ|xyYO0ty>4mmMY4+ojmIEb6lD~NOwv1=b^y@9*6oE~i`9q!`o?PDZ%1eX4Lr-y|& zc$nl|DCt5hHro2U(y8RexG@7$k}9Btvi$bu1_cjKr-&fAYPz>X08c{5Fr56bLH)+z z{@4tAjshDxyDJ8dDRK?W^w3A&MODz_XfeJr>3hTZF7&Q{C(Y5ZF|h5jS~P#*-}}Yx)v}oT1SK zimH0+bFHo%P*6}9M8v9E{uR`}z=icYn5o#abax}}lb1jfpF72BaN1&X`@#8OXb!Dt zb-IS$M;hcv)1hX(7mT)Bso0Q_U}%4#h%uduA1&iRs2I2|y3G?ZqI2;5J3 zkjF4?51=LAwr@h`a)EBaqkszXUw0vI7OOiGe6PVl9(zr2+6db|v=r<#y)C zkyt?Qr8EUwSag(YV+Ef`m16oFTy*_dvEojQ7%XKRuj2Y~zScbbw)s1At@kJNY=?)_ zc;#1t>Cw?%;IW_C1#abS;41kSzPyk3w+!u7zg^m$9ra;_<#>Mrha=hB&hRqJ1N2Tt z0(LlP;u6$@a?Pk(PLi!raWrPxT6(Kc^rzjyE%`6(r&URaY&KtaDNJZcM2(I>Q$6oF z-CL7-`^TXP_{mkD=IrrCbhDG_+wvLFZ#H@?%0l zCKWAI&AgmPM%5vx_$e3S{wJtEntgIZe0|Tb382)X?0xOhP|MTOq zn{6*(K>C;UiY^gNiOZf)2D=TT`4paPIxB32T2!%&ATav)Evm0>QJZkC9b_?#^Y(eMydM^>=(fWXJ@~%Ceow9-}fYePenHa~l zp}P>jWgvSW*aO%b{+8o14GJ0cE@cn*`gfzA=c zo#h|QHMsXl6?U!45`52#es@4EuEE4|(3MxTO0BlJq3jyU-Q7gL--jzf$>O>tI%ghe z?)h^I#OQ<0*nXWYYgXKo}VQa)n6EbtoS=7_cppqM>q=43%b~wkP91b(W;bNQC z)d-L9{_W!H3rU`kis8oo?$4Tx(>}z0=z-lV1@+wpSY0W6`<_%X|a{0_KKCcIZ%?^*_Qdi_K zAt40Bx|fgQ4BI(ZiZE26Rq1sI?XstR-!~5;+(^u>Q2xomX>9@4SeW5q z1n=E-6(inS)NqcE$bCla3X7h|$5R>hTs`FC$2FuGy-r@`$mOx~rdX=ufyF&9wu42# z!jtDX>_8HJ@3eJu9|h$Xw~bFmBR&?ulhYrYF~_|pLvy(*uTQ3@BLRj#Hzo1}G3=v0 zzi(;^us6zON8fQ?TqF8o$JLFGF&>R%KRLZWE}dz&euHQGezY9dm0>S5V>lw&a?3n4 z5wzDD92nl6tejLb#hz<~e#(7fa|N49p0I;_wwy@2m)UK_U-9?OzA2t>H6TEb?E+5y zE(1d~rc?uLpNBNMQnVHpM&0mD%$-3U~PwAOX|4yinZJw zu1(s|Drgly%+n(tWW&ZA%lgdd#*&f!;Y!nB8dZu|tur!>L9^-TdeLycIq>x0(?6Be zHK!WxhK?FUI~RPRiSqGMAqjSk;7#_Ul_aFF>^-*Gq7>Y)Q_rC`D$ zMC_fNNL}Q_?Fs*+ECM@`H=>{vV=ZHaZHWrYup-Z*5)wQZPJ5OqC|FU>T2g3da$YVS{=${E8u zoeL5u8F(RATUjBNpBb;HW07(QuZ@minPM5k| zbu{zb;`R=Y?SPE_XSJ(o;r3FnK9%*&J0nEUO48uw`knWcKM_PJ7iL)t5qaxpG!KCv zq>!N!48l#XUx{qb{HJe_S(R2l&lL(eBCdap+C?K(`^e*JiPdZ7rpGhDWR)7>*x}oQ z3GNIp_ZLC|9~RrEM}#Wpg*uOx`$H)Wze2@Yt707K%JkbhD3~yK1}1{AUO@!tHh|zw z;Y1SYme{kr7P$jDxoylTW2hXv+D)Cu>8Eo6Dt{_+DKS4)|^VGIs#%>L+) zox$x3o4e1dF6C+~636;Gt+X?KjTrJJXyaLUk5MU<- z8glxj`HH%POSr7^GgdajkcnNrb|EB zI~ZDpSBzFea*{v@S+xMjiG=}oA}=&Bc@JaR8yF{FQ-y&A@$cWi7o|T3zw~pou*u_d z$9NZ!vXp)Xt$R5o$rRLOQI1Uy;O1QU_p&HHgFgnv=3uSfTLy0za>_l!3Z~sI#>J5ZkrH5dWl$Y=}vrX5Obd^@e-%ZXhhr#O_^A<$S|JpF=nL=kFW0Z$Ub+xB&9+8bI3ilmQu z4saWXe;u1%>Ak2Mvn22V|M|GxA9hDO#MayyPIKjlVaMy8wJ4Di1fugY;pP6+G~Q_4 z97gc;kr9hpybd9Ej2m>hG&y8h(CwqypoZaRVpeF_ysM;@_|q+?lkjyODZHA>>QOQ7 z1ScIZDXcTYjaNj`w3EI^Ga6UCMb`CpnZ7Gn_NI@|<*K3E9q&hHYS z#bVQ}haBpNa8W1M4D6ec7|kyF{rL3*6Y_i-Qel-x>4-6^;uV@gy`fH-bj`(aqc?9L9JkTY`m1H(Q(|CK8@^lr?V$Wq_I%Nhg$6 zovNqKH)hIYCraTTu&!|-x)JU-wc+Au@-voefTY*yfB880pUc1MlI9JQ``#?(W6x($ zs4{U%pWJ;xE4*^uXzTv}P^nb@wxb&so8>`#6Oo=A9cdR%A2+4I!C13<+A0|ldyLyr zcHf#)qLL5}G6KP+#R?VDJ3S%D7G~|i(9f}GvM~;&a&>Y_OWiSwdQ`~n3Z}0n{K{_U z%e7keCgCnb9=qw3WMpDLNroU`GiisQ`1k{9=Gze35#ZI{!{6JRcK;j^4s5!>Gda#j zkEq(V(RZF&Woj@X`w`IeG}j**^k5jrVJq6Ivo;82U`kWf#HYl<9i9`GW>Yc2f=+@9 zH|%K&NY^`1UOZ?5_#ra%4Q!+bc=tGJ5=-Oc7_Q3W=oQg*E^jnnBoYhN8 zYDo{&dp&KV3a;lNULz%X6-AQ2-~uTEgrxY<1_r{<7VB$c&%+sDz!zyrxk{dIbrZtE z!qVTXEZv05B<}By=A~M9)5&p z@_o5snT(dMu&cw$9CdO$Jlu)>Z4W-zgs*I8pP*BMe5J;q=cb~83Vrd8H)^zS8S-kj zeIP+!KStNx@M}##14l3_)PaaZeejm?op?1a4%Y2w%|(+du+WC5&<$1i;E}^QxdV>v zJT#-q%x^WUA!s)+M~QZ)O6%HD(9qEVp{u6k662&yXmxdUD0n|^JS;TT5{}R+Td8?E ztdyZ1#QxHAIEwJsA0wi}%!^{MjmpkxoFk1;Zb>A9p8AiP&$=xiE%fKAyR;Qt$6G zXImL(8rdn3O-$n?7*J&!2tOy-JcxnK=HHKaVF3nDF#Dwn(WFc$q)}q*LyMAbMno;V zX0-G*c^}SsCZ=Ah8`gSi8tMQ#QZ6ECkTdy;0+_3taIMg<30`ON(Ol zS_?E_OiO}BXr-S!=3CfNJ9*fz3a+!h>*l#lS{!U-Tjoyhtst zc!K!&_(-o6HX>&H>u_(Ge0%4h#whY71K#HyY~tuaK1zBC0~O=vs*CauySt$@JB!Re zyOrhAg06%?75LbyQU?# z)bDppE-MXZTJZ{M*d@iqZM+56)ve+zAz{`StPU7z?T5p(4I5QPr($~|K;f*|}jq6qz{ zgxBRb`sBb|MydmDVm5de8dKU=CLA&!pc-r#>ymMy1UjCdd9L|CNLESN zC8ocr7xa%vTwj%;H(XYlrd<5ER=p{0#hGWIN~>=ZjHR*b|GeZuRuO-c_%7@8=C(-a z{x-$4T}42QqvFfOv_KE)!LZ?ZR;5Mc;6oZ7PUMl~V@^g!VOiaC=X+OhM98wmgWUh|_nC3-D#Vn_9Rn=Hfd$P4(ieT zEF~K{YC-2hjxk=Wpe1N1!FDFiuXGpr znrFL_*iM6$a8BxeUORj}#X~Jw>v+}Ra;8T25rF+objAI4k|X11&8hC#Wu)K7ZI1gJ zV0bdZr*q;(Ls=(mLiQkHd^;e_3^m!IIj+$hqs@gNpxJLLG*WA6J>ob&UpTS6ioC0< zy8TZ%o#ud`lA=awwg|Ylk8`)kVq&I#O7fSy-=$x=e0|LdLT}Y7l?Y+qo{w@+n#C3Y zdZZd2rr;y$roOxMQbUg_(`bJy_kRiYljZ89a#-QFS2mjxgGT#9995l5>&ZBa8>clv zZQw&%5GVzu9)eN=t{K~D&`A0;7c+07m=~JLrFNlP>frOL_bbjX!PA;6-Tn6CBp5Ab zh%$LS(BQG?=ciayuXp~_QjZMCy`9zNK*VK7Ko)rWt+E%;aC?0xp2&^ z*zli$(f^X%`c2^IPE%Kvktk7rz0*&c^D>#l1y>Epyqm?ILdp(9H11F9%FS4OMdGzx-V@qKFRh_5J}4 zR1{0RnveWNdU;hXy_H<RA9T}l14Ea?X>Y58u{Bx(Fl!@MTLbBkdTn8 zZtYD&2Hk(PrBNogwwiyER7$}dI^z845-W3h&du2U6ztc4k(-s{(_eP94a$I?C$OoUG@C_ z9l<1shK9zvC*h}B8gn~F3Hel@8+N!D3t>gd8Z5k*f z1C9+t#97eg3#B0j#6m0mZ4jjG(nJglh#Vaq%LnqgqfI6bCo?$UVitCKnn-76U`D(| zqF`?5P5usMps|v`k$VJh`uai~iNw@O#QUm0J}PR!-f--a_!81fr*47<92$;C^`^c`Q}rjgO5HMcBc@1CvgRh>s8d=HtI)-GB5_7I$B#|CA_j{22c5R{nc* z|6ifcDOo^nZmxKhaS42Z=ku}><=-RqztWqt8Cd;rHotLk|K08XOTsrV^Pkv`uLjgatJO0u*?nzBh12#-2pwlpUQ4 zf(R4+beLUHhR^K`)7#rCDJK`)!I<`6H_k0X`32c15rY?SJOV^+`d97 zA@D^atRCWQXrYUUiLs4R*~|Q|*7TTy<&&W6;-JH_ngD&qy5FvjY??x+<*fZ3*$zSM zzv58^3@CGmLe?r7;L@-`$py`0FRfGfKZMU>8vF@Y>v`kJ1FfJ~x;t#UAiks>ya)G<=zSQlw`y@aG5^`Q%-t~29W;uu72XE%f z8%rWa>R}P`&bh@kK>Ru>VcQEJX|AeEKRrFYbo%o0(zYIgaTX$YkX_yuSGE~lXS>1u zAAt%fX`#Fc4IN!@$FKcy{R}BR>2|lPA>d%6(J-COIwYA+Tg`n%GHriJJll9M zCa)Eka>t^i5udg0sK27DP3XpHEbF1+~9P=2DJ(7hUJ5xaBD?jD}$ z@EEpS$bRLea+REDyk;NxPQTheNs=kYDGhNqp9GG8^H(?^okOZl-l8V zpSF_c+31`*k;jYC{un(Nef=E#={pZk1nJPt2KLmcR!R=A+Q|1yj3s4C$K!FG;Ozzq zc&v_qdLFITWBLP?1o-wr_v??>E9>|1SiMfqv}q4VcHn_BWo9%r8x5T=TSK!KfI!cK z9Ff$=%)_IdP*fZZqwo7n#%{A31pM3XxSbNw(aB_=3IK;D3V}>}?DBbS$O3(dl&Me@ z5$O7OvGxYmc#_i6efy&cvu!TcHd98HiCBO@Nci8tI*|8nMxUd9nH6{%n_E~L-< zJckbB(EOzdTfgI$*vy+9i{eJ+*J>BdrQbf2vs47LD)so#o*Q4-1k077)801w`}O<< z`s5OZLe!J*p>xOcC9TQ+J_&y#Jb~W>m$N)$=Qi~sT{rbq@7eSRy#8AY(z7X)^9dK+ z^yiU2%%jtX>Uy&SfnH`Uh);;Z&_G=`CokuP zmiPNdJEuX|aQ~xjET46X;bGr>%U<3q>Lp&DZtHDKvEk^d4L0wM(Nm5o3FXi*1ApYN zOA#ht$t^e^PNQbyJ%*>tVbc*B>cK)kS&<4xhW#wwh@7My+ebZ9)yHdb$BGAR=Uxy9 z&nz~JUY~gCfJZBJ|p~K%i+oM<*zq9%P;Jzv@i|0q?yV{_8aUne@!oUk!#KKX6 z6RRJak)0Y&Q~ZYhGvV!eww-0h=41NF`qr}{`a7J9F_rwd%yOT9?&h?{^=yd+d)sm~ z=uSP>Rj=w}M-V(iJ8FRh>CTy(p2X57&2MQN^RoWcc}j!%oT$gp0zEEz@1pg)M-tR z3v}QMeAeRIc*r7bChE326iZBI^nTw`a)Ak`^;9DyR~5D47BN|7+wVwv>X(V zFHDrDJlJT3BOkp*&5S^h4m}y}r5`LexIo*sUzkCtHs79xhorYDEPVMn`IovScML+U zQX>FZ0$E%fbg(195PxSMV0Pf5L=1pc2_oHcDz63H&6l`Us#A2P`HqJS^0Y zR^4+WzXO3(s~E9Hyy9VC!#gvam@)%o>HG1od=ZdJ>zJcc;4*sw*k4T4`zF#@8UgVM z2}~}h-#hN+WS$OE^cn591z#N#O$;=oIrd#!LF@!rU{naTv}$cns5)N9XmwnNt)Jc+ zc^c}<(1&wXl?A+6{YbLgtGk)mgSH1_1xHv(n?3&j<|4#X7iS&#U%I zlwb1--vS%yqwTuVw-KR{$9Q^E z))~+8bl8P$_>LY<^FsJhqcAv2p z(a1FVP&_dnr#niK?InygX0U<4AIzrRd@wwf>4L)f2OAWvE-&InC%2-m=I-(?Mh4u_ zx!B%~ajaU0+UxmfFf$zRIESa)RnXnwpu=Ka%2(t|Az^8W`i-&{M&wYWqW*pkkl9&s zy~FTQ^w9IM2!~S>a(OIpd^GI>O?L?I`3%=i<}X>4*F8ZQ#koG2qkQV^m~p9qd$hL? zb?%qO*x3+D8u~s%Qy&Jk?ywB8A)=nv7p>=IlI_Cgx3RiGl* ziuFJ}YTcr=17nYB`l^3Y%vJ?=|9K_(xrVkpW5jd1IRD zM`&lO7QbE0{wSXZ9!?3|HZDrw$Tdi&S_Pgrc;L>-Wk^TnAODh?v>eG4r3UEcMNfs`+FzQ_HDTcsHZqEH|(WH-}GBE;h9749LZDYyYB(+ zFG62RujK4SS!~o}HW{S9Xjd>v&%b_a{teL^V7|%pFvQlj+*O>TfA$Rc-##SC-9bS) zX!O4GA9C#SxHbEa%qC+%UEc>%layxc-QOR?rl=!Rode`|Q@!9jOMPJrL|R(fVHVVG zmFPP9X!*Ov{S~Wb7La6}`vZ!DY669~yd}myEv?z%mRs4Aadx&!u%gDCqL zP!(uGk?`kSl}9>Erjo@WxKenj&~=O5CE~c2OyWOInnqmm+mZ+FF{3-oe3%H1Q?2L1 zh(IF;>nLm^e~>W|NKX7*wbv%y8-1Y15n0F7)IuV&zbQ)5(-IDQ=Ks`-4CGg{2rxP>t9@bt{3pIwGjI86BrmD zR}9bDTFS5Xo?I_eToGYF@!NJ@5g!elQ#7J{-qoD6-wP=P6k02(gyplTv^q=b(1RJ;XP6MKR;W#Q5p$6(nzd%9B{hN8_&$&*D<{-iOQdH< z$Gl5WHw*AJoI%!a_Fd{QBxdu&7I_WK(AY{uOfz`{7Th@VzRVTx$82In4_xh2(69H*?Y@yzq8CRInh{6{tTbJkd-K?l-EF>!6fgnGN5kMB zL+Op(Ent}I<@;#L!HYNYvw3Jpq+X`vo@6&FGH>MjjQ5nveTB3_6x{~stse;^2EpVC z?`gXGUy}4%-g_-M)3QJzhVorn0fN-5c7HItGy)s=)>y%XU#6m;&d*v$sA%bO;(4HA zx@2)ew5*qgk$((UG8_`g937m*&Z1WfHqW~w;JAT9wRu<$ftS%T;WiW|f1WwHIs4&7 zS2f2*+Y|?WO^f1|evSE-q8I*wAKz$*SIYsb+?o?}cpAZrt3J{1CbN_VZL`tH^YB9> zR!Ds_rmKqN_w{YFq3n4{wt}f>;`j7m4t-Ay-B9^~8Q(I>DgKygfsEh=63t@A`}*7G z0{clFGDeroqpQPU?t{1s<7Ce?AF z-FkbwOQXj1=fRgUhA8RD-8O?UIpf9+YNS_&$w3aF>Xz;`CjCWOz*zgCr!hgIZ(J#@ zyxCz;XF|7);E-a50wP7g7bb z@jM+f%Sw6aTPC-~5{>Rxdyjxs%lR_0MVrlvd+TMIAAZV5e;Swy=REIyHGZ>;w6bOF zCJvACO|326-CDDW=>2aW->?#a8L_7F`*06nb!UTtgEww>y;!+8^zyk~>eRnFlwo0D z1Z&%MsAOfL%GQ2}LII5n){>;xI1~DKv{#X(_66 zAMOVAGi#B!ibFCuZ=hCg8})0*`a%Uz9yh-IM=xo-k=jkgfijx8xLiGn6e=hx3gH}h zs|y4bO?!s?c@)gx^oAp+9-FGmSQuI%(93q8XzW(V#Cit;{*tXNdLW}yYHN2Ao zsh_tk%JKA7`nTnVR?wh}=&{effD- zljeU6;Mzbe$ z`{2W5xKH%O>~c6o-#dIofOa73|6=SN!z=05@XwBI+ji1PI<{@Q)3NQOW7{@6ww;b` z8y)W0v)}*BIWy-yxaM1Z*w?DsRkhZ7aNoaLj@G!4Wlebj-#?>CL?$$UAw1N?m5NZP z++=n#RE_xf!<6a&!&jXC?TF4=nUiYEm|5anSjBUv`_n2w!@v_Nn-M!!h)+3>L%Ub! zB23VhTmB%KbZ(klCg-J4bV8F#;ixQEyh^hko6u;q^}AqkcWs(wfr05r^@3PdV)SoDb^-EoY(z3xHG=VzJ!~6EkrgD; zQd!6L)gb^c3x%9cFh8KPL9>bHv|ff$c=c4|>1=#8!)R3RorP2?hpfB9E`MXy^|=*LC%DYcDq5+~d-Gdlf(b#tVKy7LE9PVEwL# zgT%_b2f&-Dw83|+(uvW!Ro}Vt0Ygr?58bS1RPxZQ_2$!d#S5#$x|g^ab)Ha$45S$M z6FM7ITDcxaophgZy2ggT+ypu0;n=OTJ1U2H$|zHF-C8>cV5m$r9}c|4it3-~&bGH- zhg`ghJ@S>a-WOvxng&9x2eQPh4iW=Hnjw@0I z282TK=zcLQJyj#X=gV?W;~yfwHx$5ZmxZbu)X$~zm(m#OIn&gDlP`y4AjuT!{@{2i zz zkeNF!oE8D4jD#cmb8vN410hv6RWo&uM8p@mp8JX!+kFq&KBTVtk@>t6bN$ju51iDxk@D1g7lO zQ8E{$uupVT`xB*ZINdy=t3UCZsNGPDZDXrU{N-n-QHTGN*>eHnT74f!gmjCyr z1paR`-{T}3m=m%#TF}zRG@0#JD9lkXU=0pKEG7>3Rq51Vs)VjryCX|R}m zeaGzcl#gSwcdDblK5uP+_(&5NfT)K&uvNzr~j=b8AW!w4y zYbrP=^95MMyIJu>0t<;2R}B+*6ET_Tae`{{*vFQqnbk9`xhG?hkk4(t9Tl(hl+??v zI&bew&lld)OeA)E`99n3@h!@h@Pz${DpiZh_qFUm%AeQ{jzTqd#nsc=UtY^!_f&g3&8R|s~Is7 zW%4_v_lA$L*Ce*Q_XbAja9!9YwT}uHsqD)wngr5Zw}`&bWE}D~d>fbX7Wl*ET0rlU zeCtzZ_1I)073%t9FL9HOq=H)Z<0Zj53i2``nOdIfX^ZKIKK4TCudQG6CTb&#Jk<-g zm7IV15dYDB`0F4~2@N@WfxvAeU@Du(iU(ovy}5hNfRgbzfeILKk-1p)yAwyQiE1$l z1wLMF*Fd19xP#Qg3aGcSU2 z*GC`q!!a#Xc{EYvV1pmP?NN`aQ>-qLxtPMm7XKlVxUfzRH&sq}!g2cXgj~5TbeO8Y zN3o!q@Jlyg(3tizJd0vAqqxOEeK{H6V$c)KvMe`n{kq+2!WrAJO71hDk@j)%gZJ^Y zLlJK8q6FJc0NZK)s|K$=ChVHX`jDwK^IK;X9^THMQtw)`+^$H&{cy0e!xI$-u%E?w z7JoF1cQYnW3ej&xUY+OErLR`+;P|s|(R|@yR2VhewbfhvY!BB)e23U5l*Zf*<#R|Z zp#lV0#}FhEt}aXf%S^|>{$qh2XC!w69cYDIBv9%$N3Bz#N}J7_U3`{1j5jUdq~1|= zE-adI?D?7#FH}#zPxSpq#`lN_^&bE6#6C{wkEIqBrm8`fGBGG!E`F?AOva&>2D9>% zOY`}6-XMJa&<*B97OUyp9;1&0j4`{O(Ul)(Ti^YE^BTPza(~WqvTR#!oJXNqTE&LH z=X6TK$xTZNeiHeCq-v5*d#_XK#tw1T_y$+3WzN5}#8K74Lgzc*bbF}sWz}bpKHtn~&8Ft-t?mUHHen#+rq}+@?(F!PKHv0AN8QGU z(r3+XS2#e#V4113ZymsgT3tut7G<{Dm>xo)hOK8HYqVIP(6gtc@QjlUDgI)Cks|Wv z4_ezmRxQng6#*A++vi*38Yr`AyM|h}$02>9zk?3Uy}<|Je%~(}#40Qz-k6R9CoVGi zRscCL&-K{*`I=!>UEVgT^EObXIfN4j;m(?J0&WUYKM0CE@Y5X!CGaQpwyDO?;{Gn> z{xUIdF=?pw&j7DQQjWuZ^GVA(al`GN%iz$~uP-jq%_lC~jjytd(MfP*pC9jeOOWcL z!SUE&gZBy8PzThW@+=X*jra3x(h1#X!+`*oeJf zFIrYQ+?WVG4p1cY)GK6lQAZ!>a6ZTAYMfWpH`w2S{~nv!(0{78yp$s#!p{P zzR0WG9yyhY+|6e6SpEm{0v&@YSE4)ajup~Un`LzD*sfqx9X95YcbuVvf-3^;JLra+3_1((+C{;%a<6D&;o#F#a21m${DBI`vz zRtjAadP}(&={X4{4WzQCMP8e%;^Ix$&W@x%xkB|K{R~$%gmSdYt2VIGm09ZLF?)HW zdz!0Yz{?B}&on^lZY08PanL-auHsgCf8f~ z>PH%;hBP%Y5(7ZhNZnMGr9M`NJ3yP-cV)Sq68XH}8?Q`8J_?y@OJAyU%fS`wSWXTs zxx^rz&7`Nky3u~7i>vWCz0j9s%kNWe2cfi4#g{Y(*}glGsWWC2{`?ub|He3Zk<#?_ zd?>c(EdbF6s<5YZQhB?45srTdvu=`xl%$XUTasx;2ct)wXXxo@xvu9BtOU~G`aE8G z8z#M)hi|YK8G>}2K~;C;k)E!ZKM&sj9pjxp{~~5&`j?%=A3OscWY%O<+HZC|{6=uk zOB%I>J3#|4M_9CtaSV`_hJ8T|>#U_q50WId%1C!-%HDl~P@MCdcsPWX>Ts`R=jvC< z5dg`M-8UbAS#Tk?T#Z1jdg#a?ltkfQ?>-mjnJl;0E~!x8tFqT5~6^j|4HE z$rD;>w!s6|vyI%il__0{Y~?6dcV~P2{OC1nzj*S3pKhxoo9;5|q=q07>D!E^mDx?lbm)8lCBB0E_fByf@$<+<6w;%%>SQ%!Ho^NS)UKTBwH8C|-;XNXzj(zQ(P&Ut zufso{y8`7`#pXTqdLhQohXr$6(N?trE$A$>4khrFxkfjWB!4`Yt95McvRQWIT7`o4%cp?%jgsCGiS5-SmlJDK^`M4)*1 z`GaJ>*+65btT<;?U4rr8VzU*Nsrw0Z=`Fk3w~Y=<;u5k-s}s3Rnrf}vL?Q|E(2D;> z$K@it=*c{Yy7=sYuf&UX6OJj~X1t^aS(U$MPu7%IyAeB-!L=D39g|q%*G>zDN$=LX z14nbisaix=s6a?G{;%gabb*AF+}T2LQsrOmZZ6di2N6~!DOst6BQ<~AQZ#6W=ZbqY z)j0RAyG4G;zka+lY|!U@KmuSSyu&zM&)?u64`XCj6f&c~ zKzNcOaY6+ihBbtoE8<4v*A;1%1BX~+8!3t*H zD-cX0HtK$ST8Xl3MY`2`rL*y|gCP0p1GCp9zgx(3l>Znc;V^zkVAEWOIr#FZH8C-%Q&u&?@QoBTEI?o-RXa#1Q!60}!=3L$PeKW3^iD0+xms(~D z$9fv;^oG&9YzzbUy?E&M=U_b-ka_ij?7Q^p`Kl;#eG-_~ zS`AptD!pKh*mI?^bLDgHq-db0O*g#=95vnfxyV8~l`!o69*I7O53FOoF<57c<(%Ig zpN5Y~xC6ThqJ9BkQpCIVtwW*CPli;Uh$pOob)HW91x0@V(s>YxE|q50m5lYb|7OPn zi6DeDAsQuHl4?})t?!_a>2;XZwwOm03fg4)_p1;0_Cs#`S6L*psk^q(SsbtNc1ue0 zO5=%dvNofX2dejv5m4cHtR<7d)qfJm3Ab` z5Pw#Dm_>9pY|lo}M8x3-LL0hA@M^j$;JM>hYSaP8q{v-rSxBv3`99;+Z`~hMoi5Hu z8*r>~@!58lThCpz!_(V-p@9&zQ)0&tVTyiuqpdIaMP%bnP9uj@Q!mrJm&JRzZz0)d zu~q6)EGrF8coAJcXG>h*-0{cjbTIX;6}K@CFV8QQ6@lf94MQ;P}|e^XqK! zsPyM-p@bDOurXUibA2d$wjlZjb}EB@mLSSmcEyY=63|MW;NaXMP;i%G1#F?%I1hC! z3E6xgL-Z8-HFD$V=%&a>%gHT9k=DZr9g##vo8}~ZXWU!THRhG{aabqMQM06F33EJ@ ztZ;96+B5lq#K0;@liI-)R0I~-3n zS*)V~n$4!mwgVwGLd%uc{#)l2d<0(J=kY=5Z6Q7WjBF zxzL73Ad`q`Tnygi4V+_#;E?IdgY)bk|6ZkPm&JVDM-Epv_T6M(4=uWu(q38Je{GH3gHH_#oquxT3(sN9r0i!s1 zQS(TvLn<-jT@>rghW;o8)6og$s5z#k^6&DKR?V+hW{qdAAgCrkn<|VilCj$EM<#b- z`m3DZnoXe?dv1P!<4Eu38;g>+oCe7ZM+NnmwH<2yYK@Ju2snYhDYccJ4Y!Fe+Cyk< z^Xgp|fVSaz>|ap|+_ib}f#D3ybnHMaYuf6uu~RobObEc2QEXhlavB zuUA`{fxmjv9e=aEMzRRe2MaNlta(^7Y<|&hu|(-KQJJM+uhS*X^Qe>$gSpqJwoF3m z-hqZEWXEM714F6)&UwqS+}tNWhOXeosW8|gD{gMs=4kNTa#iq?+Y2Yjug|!6SA*`R z%t!@&_4_1M)&SptP7P5^6B6R(;Rm*j? z8(c2c`*OGgL?R3@9q+_N|!&?CU(|T@x z?u^P`URpwg_t_^4#cbZm9e79>Q9P{G6ymxIaDSFQ!_{d8?Q~m-NcVNhU(ZW*r96m< z$w5UJ34?=}1@8GIh0Wub$ZZ8fIl`qSU6?R(pVTjyFB4eIG0k6mTP&9eePL@utxeU0 zG9+T#p?$kQBxR+4@>a$iq&{H<^mRkW+C_7~%&t97-*uMNfyuEjEszD})k+Sgj@UAn zg>Fs`U`dTiLEqimulN~?!gH52BhM!Pk>(tvDBeq`GeIuaMdqTtRlRC+{e?zs;^Fa} z=TifxN(?{;4`CPaZj4aM8@?*o+P-0#4b!-aybX;K>~urnxZ>p~sCi?%wL4+V*?>xS%UW*rgaKjZBpCD4j~>yBHJM z4KlgGGQpUz?sJ%t5Il^Lk&zkP4l$M2Ln@+lHWmaBI(sXP$v${O5?PYC(33sHp42*( z+y+bb%$e)1fU+NUofJDEaw={ z*bKP36wgi)?!e`!6OR^e_#Sb^@w_)CBT4UN{9Y+v1;GN@Xtg{=^Ub49iatn<_9;RW z`w)V9e>_qXC^6w+E^(3|e%!(AWZs9;^?Q6b&)-8sH@oO(tC?z~QS2c>n`NWLtC`4( zl=^i4@(WkGSILyzLx9~|AVT4Cn61V;0tM|#utpVT zW?WSZG&6N_poOl*aG}U*=9eiwAj#+~l1X4B|6K6xPj}`-h@#FrqT3C+njAM;hd>A#D1dMQAyma1mam$T2$i?*wDrN@oe zZl`#rZTB}2W%lCL6wTer@&@2!;STlP92jlK51Y4)#tO!X60Qaei!ITguq9h z9nF(z7(f(i59(?imQyEfE~L%ot}J1sL)CJlw1^diHg3rgL!$7FzE!z7pR4PG^bZV> zT+UjNj$+rBX(xayVeX5$Bslh{b|F@dX0i<|_ zb(+HT3v7fK81^dVz)))?bIr%n5}1y125A7?wBE(FVFhl0E8nZ(`%-q=>uE-P=n&|xqfo0+o8SwGSAW}RL~=fbf%QzGWFZ3TM`3WVciV=jijcu4CjZpVZ_2xC^#Z;(0xrDDDkQlK=;3zuLx5>G5)^<;Y(}?5R1gTrgdXd$1AM+H}SFg z2{>&7SbqL=Q~B650kquxl+)Hfn=jC6E|r zqmp6Q{6dCGLGrIl!9SJh!~xt?#FrtW8pEQX2yBMpDg)I91L@qqe!>cz2-w!7XD-qz5sfcYOzaN7D zJvK4T`mVo;$L;~mie)eIg07^$L&N_y0sH^f&i^W(8=>aG6^3|hQ~wu$+CN{O1zMm0 z*Ajz?=YKOEi338UfL4e9pCiUVcl&LBcoIX1{l8D+KR%^^5V780M&UXh7Kw?8 z(aCm0nE!Gg|D7DYlP0LGtzEcOHy<3o|2nPwUvA((PG+6}bSFIdJzRoyM$p=UJ$cQ0 zU3F0jLX!xdWGh0T3`S@!y9g{_wp+dGzAd=utylc1-qThTOe!HJ?vkV;Cy7H=mb5E+ z^zC7DlDPzaX9pzddg_+k?T37N`t}An=dr+X79ODawtz+u1Xj@>6g}??1ogiiZo)D9 z&vYTF{Lde87JUJO<~*=D7E}3ed@rIB<^S~~TS*W|WZU2CQ;{YA>3aTg zmCj6t3qGtWUZjTB)=|B^g6>{k1Cx^oh=_=eb@lbE=$M$KJUn=(r>Eu?7N=4!6C(fP zKcYV^LSPG?>@(EX*7gFmk1SS8^gw>dz|>UrddArJxWn6%gY|kdLWk>xu#b;V%X7Nq z{~V1S0=?&`uV$zY3=}j;1MrQ5gQFF=Pt-Y|D!aS8-<6*Mk&{)rZK&Hmj|3H!m9MH$ za7zFEmh{%p#l^?7|EWz*pZrm>hnrZ5>WBB?l2Y^4Cr4DOe0#|Jqu8U_4I zLjU8^mgW6Hf~?GZ)MA_|K%s$_9{1f~Ec+1xx89kVYhZ$JWktvTb}ix!^oE*STXzydA|etM7w=zKXk7OOV^OlqjEs#El%lKT{1w=M@k@yvf$n*Rc_GT`125!fvAd# z$`!4#?Z2P+3o0@aC}LjaZn5G{3k5MQHtk0_R=D_4*CCa^#5nJy=8zx0$&!t@sSkVr(!Oo>OoXIyhxxX2m|Pq zcRx(lu%DOX6gu1dD>rOxZ2T=090-Lp7U~IfiZWX+l+ih8{?8|le$oJ(n%Og}D=UW2 zfJ2S%{Ra^dupTjiz&Qe>tXhTACLq#XBx2H}<>BlrWuWc;YT5eP)YOzUZ1<0u_Meu9 z00R+!5p0)&ZtGRn*0wg6gt=F}zkqP@xw%YOy0wM@`Vg`FFVq{Gn<$u=Awa6CO~%)J zKmvu#HPBgV^?3h%Xp{#!GL>;aE^)YTcmvz!7X$Tg>AtDWj#{HdNY#g;gvu@5~N+?(W~# z^0|-U)j!;!Rg8@djS2*nH;ld?Y4lFaqRkJ(gK3}D?H_lUpEiqA{`Y0*L?8I15&1DO zG5?ykJm+1`4Q*{WG&D57M@Qq)x;i@#VB%ezjt&ov7Aw>MjKRVI*t0v89pAXPc6URG zmNtv^dVqDjx*wCc3(Lz^k1j2&mZOPJ*3U#nrWG^eNBhU2vx#QAr=>alxkMj)%{lGu z2%DZzSGBwB?uZ=LZ_r0)DtBT4I|2W^+CGBEO(?GcM67wE+mE-eo$r02lB3ioadV$? z!CjnNPwSbrY${?b6?0Lwj!vkT-aEd}olDJ_kze|yfNl9cpT{kzMl~{ZaO8*=Kl7!3 zTi*ZikT-fk;fbAFpV`c&I<2n)H#^++FIu*TpKp&z5ZuV`NvWx+1w}={^?jdBZR~z3 z2)wJ}eTfU92Hf2x#V#!^g?zpp3&eTiO5Tzx?0Q0Bgq1&yQC}yC5RpCm|ip zj8EWJbPxUvbaw!K+*iL3i}YbiN=nwe+v$L7=7rLi-6^ldzQ79J4bl)P>8Wz_8u70S zeoo7gPY<7j{{0&uZa}kDs({{ljxWP9dPR$l%MV_C_dkVJ9tU)eRRlWSeJ=#1jOA8q z1b)3_ktO}Ta~Lf1RJ)Z#j|K^)0z6R*T|`Mu9#027+rnu5?tlPOX4Il4c7*rx9Mk{4 zfjiUoe))+QSy#tWP*~{lpxgceT+haVtEU(&xnv)hMSKXE=g0H$VR%BW`yNair?87l zQx>I9WJJVVbu2DBYpRDuX;Er$m4;0cuuza;I zK`BuW+(6bOGW&$sxy#_*x|tB}1@-O%Nfuvju|`+_5}eGD?9X^ffsb+dM$IRqjcdb& zl#>0>Y>QTtRpHh(o$%6~^|)+rd^|Tov_l4Fzft3-HlAL=q{?5^{V6V1O4I_;b^)um zKttOZHPJ}#Z}i*a?WlqzQG9{ieEw!2a?y)~6f$&ReiKp+!sDB(Gg0?ur^MC9o3O;_ zv9cC+Z0^IM(QY=}?jLKYFq5TaRm1h8``L8Res9RR%`S)&$2kQOu7O3*itN(4*2 z;PJDCN(LFB^QUdlgs31gEKtHrZQ$rB28>~bBuBDouuM!))VMl|YFdomNcpvm?|ifb zIHQ~*ykExcj%9*8qhwk5EhCn zI+3}ai)$U71A+9w&zAttU!B$6FyGprNE`aNntf^ejfZD^07vSU)Ox#HZ;I?*pZV*#r@ar&HxyLVpFnEc+2W#u2%BTH%8KH* z@WF%_oWX}zyUq|~ESaPde5~k;Blo>xja`d;!Iz^NmfO*uv*a}XPun+}wy&HbbUE!V zMAjqQkv;tEP#EbBns1#2eI8*lh^V?~gz`%H)GSkhaSBmj#%jfWM=2~b%`+L5??-8C_ zHf$4)bs;OjaK(y03u}!a+A!+NMj)pp(3TS_>ndIpZE}me3|PF22}YfD|Cj~B?<^4 z7HbYkSWfwg0?UiB;^LCP) zY-|HS^fDlnHZvw$;$bh@%r6!P ztssA0*L!D#{pq}6y7p$rV%CWmtI{_jaU6Ui3xVnM#wXkK?9Bt9?sBB`hMkHu`TNDy zci?bG2oP`M{zlxcYFZg$Qihq(QAp=Pc}|YL-yQ` zhXZ^J1Lz$Xt!j-@PudJm1E)278K97~@&00AZx0!y_Jl0rHRo%+`8B)Kif9*kFcu9B`?ccpnp;$fHDiBN)ED5&cPqI+KffOA z2)Rfhs{3`J=K9s4N}$e(!hl7EYyFhCQbH(ha$8sUhF%IwOp{4l=P@sCz3QY|t;2R7 zpuBodBx>cx!Z`pqbiB@Mt43X4s_8ppw~EiuU_>^42}_m>~Qr)hEuR-5A?8D**&}>iO=&lh^{@Vc61T=ms_Vg%#?v4W&Am8!unZ2Q}3u7a`nl zp0VP~3AZffhZ)>GpF6PGe&cX%c7t0XbyaZbEn4aD@qdn3tq@kW5xtCV{4Gbj{sYrU zN=AcXq4jKzs-Uj5+Cl8N!aNJttIA*eQsJ1zDcLc&ETtI$=FzIa6b?*zGcVx7u3_Xu`#53pSShBI52IN^Gond;y9v#3hODqPEB(Y-Ak~M>2qXa2S>J zv|nc3)EkDfTL8J3kmw5eOo0F$iyKs=VrKZ~1isw692$8gEI+(o1T5b55CzGOowJZZ4apx}URXLE7Uu(K%`$~5YATF$4^wD-ZczD@ z3prIA1okimSwUZ=bZoIc=*t{mY*ZHLA9E(Pa!r!ovct0aBNZb;uXXvnnaRD&u=lXa z=q4qMEg7>mb>kA_X|vXMjtGJTk>IkVWW|$PB_8CfvAL~VvkZy{u6!^QSK9mJH<8dkFkUXIgk|1G9*U z54$naWginvhAR^VD48*{2yZJL0=iOKd`Pa_N072hhpa(O>LIW$04v$!*;WQIG0F1@ zRs(l;J%BVYTlbD-C?f->?|maC*#|!9c)r3iS@Fj0cp%wzv1P5P88&=BPS5UfjLhc5 zsQ-CFSM&obd?&cVKR=%9O?bfJb3kFY(5~6|Ho|S!s?t-G^tIPDt80bWOqbQ8;sJWz zOg^OPE>!pH$!F(<*@dr#n3jhB;{q_I=3!z%J8QP{ZaVS;W;)WyGTLim&x=dH-bIo- zMLw23nll@|$8=I%t;BNofvHXL8FU9mond;IEQKjmWS?D)g@AUJAP|4 z*gIYyD(r`XScDu`_3*mqA(2#**(0pB>1#6DAxvtEKML8X+9C|A{ub3eYmm zjvg5eBL9k)HZVRw;DRyq&Ew!py|mgu75dQ+GMZiVggM9AxeC!tXu@-pdsED?7u`*x z67%6_HY$|Nq~b2=a-)UwoLe#VA9zigBmr3}TpuIRD*w`@q9+Soz(P+Yw#3+p*$!q|~7}DS- zH$}SV*<4-fNp>iHvGUSb$q3&~ou=9|uR6(QTBCgkYfOsLUE%Tyd&Xgi&rXTb>v$Y{ z?9rbPqlxbE13Wo=jR=K7(Ebyjf*zUcMu4u)z|5{p`YKE-A7%)e`T<8xC!<7Fa?yBC z5KaMiWTfeiT{S62Udj*mi7aB_*Q&gDiHysK_sEn3WoBh^aEvuDMTQKQx)pmO==My0 zMBfHSMg~=QX&e9zpFF@vjo-56g@r$)o2ahdO#1tn>c}Mv3JJ;zJ1m@&FI2Yw-E9Kv zJ{?$^#Tr&eOmn@p!A9Au=%yBl!sZn3)T32eHV(@Rqu${4ar|UTV^`dP#F%+T@Ck&y z+o{+1r5y|;kng0M<-~^)yZ|}52fJZsXJ-dC8qyFOSr; zG}MpwZXflNd+3Kki^BIQiGfByHrtHA{JsjI2uOtvoU2al2%TJay(|%mC7&LI-A^aD zpJLa2Xm-R3=h@uHn9pw!3U(t*9_*gSYq~0=$Ft|EOX`JExaAVy_!Y2D>>XY=XJJA) z6&^^Wj?QbNKYJ zIpqe~`IO&GLA^9s235qHIQX&$FfABbh5scDd}{`$9TN*|k7pl_A^>x``AiN?WRRyc zEvV>5csAQp+_nsYG1gQ^;*ptUH~1grKoWNooheRu;Wg;_+=J!H=bIy%?W)w^G zm@Vj&{Pel3^sboSk8M(-5E>hZFee7)8~rrm7UrI39agh|)``O7w-SXvYmT#fMlrDB z0bz91O6{?^H-lIdmTyxzbTR@M@Brwa>aa~^$p-|KBa}osB_8P#a!^CB`@Z1Ngqtz{ zcFW){B^j2B4M^?6I2*sco}Ut-u1o@jesMxsN(vVYc+y~_=Yz5oezm) z&jL_{=4F2*%vCX&#llaEjyH5Y0AhUE&n%#GzU5sty^Kt760Ks!8mAUVb>=7@c|v2L zxd>kBZ`hXFjr%2-G*3x;9lWQn5QX59?ux%%B`wk@zzIK@y4*JCGmZtDeNaN)iN^_4 zLTrYDuL0Wj%xu5&XJ};To}yB1D>0_LqCvE8wa3_&a`?5~s9SggdNE(Sc;|uv`YjK5cxCTn7urC28(Rutm?Fr7_&-a!NpUIjpCr-?Y93~gX zbaBeMAUs$3?&lvm%wMUY!_P{h2SqY#9a^x5@m$^Cm}2{emKF5S45$SIwqTk4^Tl6fUHHHuiIPhfFB%*bPSC);f+9t<{vbwtcr2bLHe1A|24O=+H8=Eh95uPYV)a4o?NE#2RKR!Wh{tjA$RFpb9_iVkiw-b( z(xY_C$g>Yh$JUq7rp;_mQ>_fK@)c zv)=6sX6dCI&OQCHiC618Qm&tbtc7u=z;vdZQec(+LqX&h?U!PW{CWsI-Fp4z9P5<` zr11* z_AzND8%Yi~KwKcy+@e}axW}ca9fSZ8jXN7e&31Q)R>&O7RO|H zDGZ`RVnBk9XjKp+*yH?xa^?MIHlTK8~gsAWq@-w~ug00_p z3>Sj5u3el_ZRFC8%}v3+Cb1J+j!goXfuXXEIVPWX)zCDqBCzoNA$r-x>^5uMy3W(5 z)tOtYMCP3Ov;xlMPF!+}$)_+_D|U!=uoI9}N=k)d@C#i)0t0K8OZ9A#m~c&2Ru!uT zc_5j_$fUy8sq7ID42piz25ir8t7~a#aqCp5S8Edfla=Ji2e2-M1 zAxMczGPu5vm}Y*dnGTzVZ@#`~9c)X&)Ro;188}r-!#58cN-QOtuRv*@qY68c237|v zMHq}#qMrT4uuM@Ztk!qTO}@~XEJ~!t-0NtS`}T20AZfqIOizhvIY0^!N{{fVfU?-_ ze)rBX3K#TvDiFU(5}OWXN{HPg!OrvJ=UcC+LJpvgSL60l@hB@s3_x@8N-OuH)p6dk zvlc&_403pg6nluY;=lYp%#9o zN6_EX-ToUB@Z@2`{WJv{LOzLiJtmQF_PIZ7g@gO?5fRmyF+N>~2{*#;eoA9U4vXsO z@VK{fld!9t#cp>~qjP`eN`ESbe+EZ?RWJ*eV}qj$V-CP}>*|snVb4CVAiqbHVVk`d zG*f!dWC)R-TU~azPiPl~bfU7GNTUrwn))rSFGP~S6v2do4g*aT7$4}fb9@}F$zrXd zuN95GS1igKa0SCDtLVSkUm6Xj-K)dCNs(jgmOjz4ECKQ3vD3w%O6=#;wH+~jwhp4ADLZLRM^iT(&t@qGB_Ua*RZ^_cAMh-di*Ar zyN$(1@S#=>-)p{VNp^N zx*X;+J1eWQT}KOEc6OpIfrZE6nYgiuY}!{mukL3lPOT1G%K}8>up3YrSoR+0068m8 z69AkWne&nLhIRf6d3>`88Y?Z2cgD<;Gld4NlJX+70885fJ`2gzw!n6QMq9rXYQejx zAA4PvJmZ4QpUL4AqHYY3AgoWs~OTtV0HK? z1E)#-C@e}{78PIPh{)->sYA$MZxjEZU_{2CCmS38z?-efcaw4OZ9macj5R78F)5I1|_x5u0mv?&n#O3wwGD6Lbg0m=9Bnx2z zz~4%YgwTL-`Ok-(Rd}*M6`$qz4-W9et5*o7nfs?)N;qhdbrPsrVhyD|E7OIx#XASC z5xt$?p|;*ez^-(77>N!-r!51p2HSIEe~<1T^HGCB>t$Ou@IIENr+v|b9g*sCLvIdnfAF&% z8G7oHJohDzt)@Nng;mVM18FO-&%DE9ebi}bKooV?VOK@Whtpy>LTJ}?A$gMaDh1#GwalSsqX$6;f|ZWOS7<>U<4hpGtO zm7Sc}CBrRS&!DwGf3jFuSc-&kMRPd#P6`-Gd=lStU@b=}(wZ>SR91@iW|^3+3t|J@ zFD)**uEF(=Pb)+f%|)r~!ThO@kS?Mml#ut}v(Co%I{yA0$qvg(72`WGBL!3w`=Vqx zPXOxd`qupCocP_i+7@w$mi)A&@J9OAui;yN?v2U8Z>loVw)=z`EsghK-0;wnBHB=k zNV2_sit~+M+H}LMn45u}CI(uWG0`VccolL_X-OHtDA-E74HT^y6snyaQGCH*`U)DU zq9V!Vu0_@~LugwdnKz&Jpq{lz|ENi;rhYIh%Z;;e!mVb-#Xnd8?s4(~-kg+)d!E7T&*LgzN_=EwOnA^dE5^M|T`hpJ6Tv<%j!FoH)6S=4mND2lM zI^J-@(YT}`lc-%V3w&_&gF&m^-M(Qtyhw?MJ6WLeQ~KF)>O0QLgi%!+wI@gE(9rNh zzi!PUNG77L6Eu(v1VjQ!W2)hS$d{ETRxbEWVmS zI)(0N7b}B+@^XSLgJ&>(6g1pizFbmI$_z5<@5r4S=ZjP`5pD*)O0u~d-PCZ1CSJNA zwgkJ3SJuBKdLMG{a#ii7eGZqqb#9n=Tfbw1X47A%HsLY9&iLYoO%66bbCU4(%JJ_g z&1#L@!&+K{@+YhR735%_$Fz`qP#%r(&+{On&FgQ)4bXMBhp?X6rNod2dmIj|(m z8(V1IZ}zF>Ar> z?V@ea*tTukZfx7OZQE&V+qT-+X>2=boW1()v)}jsJo~ig+sU_;-(2gyC&riq*SLnr z_|_3l$Y_ECaiNJ}>L?ivtHEP#>6KhArQ}A+xEX4&f(DxIc?YvZ7&-^4G8h~o%XZkK z!g;g(wZPsqzBTT8JN`*R#Y~xQ;tUx(i28~%K4Gp`b9VAQ{ll#pD?ucE=2(L?5vt@Am+@3 z(2slSY>i*T%cBa|D2Ls)s(G0@A?0tgu1_9Z9Rla-t&58O<%C`@6P(m-=O)5Y=>*-YP%6kK25)d&`#4;z zUQnT2m;F}~Y~ggu*^yE@9(Vo$5y zBh{&0*@WdaUxJcYHFpKkLq!!7T*__ z1-yZa8*y`qI;uJ|djuWN!y5F9OQ15S6_D$q4&<;4|I3~yU$qw1p3tBq)1U3mgnn0P znQy(t3*?J5aGTa(mdm=*W&&j@+vyLvs{Ao;H2Ajt_AIzeTfltGPR3hx_#~=R^2tOU`}v;$#-P@X#!TySz6emJiXK;D(!| z&4B%|eq5t9JR6cU!o(mCvlTXZOYc9k7J}u+o}{m`p}6`M}p9I_;SgL=nh^V5i8c6Scb&9bJa8~e$Lb}M>PGgo+AhXX)SGKe*mR2K2wb$yO85zmuJ&$ zPGDjOFCxt8*Up>Jl}8gXjZ4Z_%(mz%2A_U4_MZUzU`NPSL;}G;78`B-qk6b6ivH`J z-IX08Ui%<=-aZLv7!M-U!j`J)u3Kf|KVtd0{Fk5r;v0x-U$0B3`XH6usysvrw43=@I2D2v4@39SY+WPFwe|kGwfoxdt^`xTa3P57wB;NLV@S8e0 z9e`ANVey(t)%969-ST((O0oZiUj?b;H!;cE*zvcR6N&%8t)D~6+HvNyKKlBkFMbDEz(tMU97+rPTI83P+K zMd7fVwIFcEJr3@Tm=4uWRec#o=X4?jyMy%mi0)g>)Z_eHjUAbr z_`l(@t*k)9u)GFlBsrFjwHw$)9R%qfig368g?a2{K>+}M#9H)36k7B~YVd1*Zwc?*60Ck83%?~HAv;}ss z{S&ThFhchnCTBXaES^5V1J8GTmEQ>=#eQ@?$*`Bx)xY-3dv&_Frmm#_5qk(wYUhB3 zYt%fd!r}A5#`C^I$OZt-&foj{1+7-9i2Qm;SvAw|&xnUm+=3{qb?YSEmiqH<3ko z2ascXmCnYH{bzFQKcV-%w%UHT>#mNWm{?fXJCSq-10gUDv`kD)oj2oDH?LqUEG%jO z!u5lxoLB&exAW=X+vCgT2P}oGZVI5A(pVqZahle@EU16Nc6ypWdE#pwz%sM2Yy+r0 z1p#dea6Qi$)&LabX`IfKfR-0~5XqNqhq!>A1P|{0M&^^i=F5cU-N6S32j4Sc692q# zfaffU0-&?F?2=tTzmeqFJRZolUH7P7US0rj?jUZ`8E+)>+05+}pRe=*_tCpl8bECR z`F8(#)lCBm1_U+>epUgh+VucU5!LFAATGLo>A1POJAdn`7zC6Gc|Gl?0xDv8EG#WM z#)sej^V|QmsQy?o_(VjzAsr?<^q@YHK(m3306=C>kz#xCVgL3}4FwyV3l2DWb)e(f z62%t~5b_sg0kmKMCpUxjD)WylE;IlWd`MT9HyVd>N0B??!{ufypz+f-fIR=^N^Bif zkMN&Cf&ZROb)6scji`~)9t?(XTmTrL<DfWF_Ro(}FG=J{VIEtd`; zzjq?h#(zC`z*>N#@!2QP-Tf~U;rH+Ujo(LON%>d&@1N=e+73`9^5qfcVE-?b6Q4kz z341>Y>dvc${9CX8=Zn(!0sz10TWo2mV*j(C|9srxRqNGmt*HN4R(b?wg@#psb|Ju$^+ZLtuGJhTAOxydZ-`NM) z{rRu5Q$e8T#6sDnbDGKOL5nRNZO3`ft^f(?dz*@Y&HPzNtJ0qJjaVU))?&(aueR)} zmbveEPiU07X6E8>yoNyU3z;TU<04ybXW4c{wqH{hS}`o7n4vVU53l!g#Nx#Ge@e|i z1q6`tyTw(bKUR6vz!Y4On=bg&KZr1=Z)y?ccwEN`^Jo$lo(`}xm!UioL4(=d9V(JmWcYwBLV{NR1HTz@J+TW7T*&1^=((oF27KkPI*->jZ6Rd zP9zP17m?MZ*r8ovC8R%JsdDuO26o@%`-_Rx3ot6ob?Q>b$6}PP&pV=mMe@1{7M~aI zMH(km_Tr)(e|Sg;B{pvtn5FB7-%jzxcMD1vyQ}{7xr_eRS^;_{WUCAA^x;^{JMZ+JRRTB$e~SE zm$)!Am)gJ7|EZ!m#R3>yq2PAC;WDHO9s6YN=2o=|%&%#V93*nf9}wvfQ-EwVMWZ(h z0>>qnQ%&(ND0=RK^Aa2(99-05o^BCntkJC}M`nHe-bF{aIwA0_Scx)E4!w7s26>A2 zkelLD7!Q|+(eZ*V<8rc8#`^@94)bg=|(4l9y&8uwooOH9n>Jn9)OjG!~6Vfk8k5|PM$@z69s&TI9CfzfyNBTaj>SIpf#Q^lq3oC5O5E%b6J zH_b)s9Hj=uIm}%x3{=%y|18}6Ie?WrV#+d8MU6hqqUnMWc2XJHe-H_U33j?wn8Fci zlQ{^>t-D#AX(hU;sL+HL)aHRd!ihK@7!KbOSo%K50M*nNhy?NT`aHX8wA5;F5aIUf zh2vJ=+$g|U61R88RY#yxTotti4D-%HIm6(6&%GA4Y76aFhM=g`62UWdTMe@c5*Jx3 zY-FTEg`l7k0*Q>a?{Y-iui#Le`WrI@9yWWfYgi0ci>$9W3b!1q{%#6g9lS@hRTZukQ(aK(_A6Sp*6>rI9a0uBIdqPl;SOig^-gU7tlblzRWVM6;~?V(xKU5u$(QPn;VGX#T5ko`2}g&6u&-J3^*DV zxhAFktCK?PWMulEMfmQwalZZP$QX=S zxtPX<`fDb->sb1udvNdYGI$fpkT@OPj3ge9)cxI4-`zvqWf3mO+!xRYFKhA9u+-bl zmMe%T`-T~+p9{l};>rM{q0hdv&OVy;XW#O@T-x$hnYyB$$$6x>F4q~)2h?QFlF5u_ zn|EI#0FPYP3}55@60hSYL|3q!MtzVKhxsFUBH7Jy_hqzF0o2%MqYjARLO<=`G6-U3 zu2v8P{)7uv#g@t{RPO+u&;9i3+P04IA+9sqg8=s9U7zON`9lbhsT)iR(^vCW*w3f+ z82g^+`l^1R>>weC##z!~C1J=k#>sI-RmpBd zLvm5)sknisoM0kZ0k>usWe8e*E!rtc2630_N3TRHjYaG7QiSZHSJ>Ifq^G$Vq%`<- zqN?LutVJMLMkCUg7{GcZMb~`NYfZ#~O?C45fza1YpO~|1JCN6En6YzXslN!ZH@`tQ zWz8^5_geosXqV!eybg5$HGF7w9EHG!aCC0M;gUvn{BuUej@#PpwI^XoJojsyQeknG zM30d*lE%E}>R_#C1_>J#Y+bSOO>zGyQ#k0#XVa7uc4|5;`_5+WfjBJ|QsxFV<>cFTO$FvXb9m6=F|S zWmjt$RIAjYuad!VuVi31AttZ2S=`1#wYeO2ZwnV6x5aj7X6_|UMJuXz`WpT893p3n z;qf-$D|ds9^9zPEgYfKQ-@xAUEtAX%k2fw3vxbcuujfPQgZbNp=X>PD31(M+@$LXu zO4CwJi%G~piO;Y*lw&5MKuk?RFFkFk-WgC^XBjUnBO#DcZ?Psw4RVYj8hw-PN-7vxRC8 zw|Kqca{}@Zm_$DH!Iw~@cu zXJa-~H8kWkr2==ZC)Oh2pAw2b%cW2qq#l_#Sab=l{lBm6@BdCq`d|D^@>E~pAInZ? z6~p3=tCmntkJ))fWhjhBh=TDDaxpiwlhnrTUI2lc*W0{Y32-O$)2pQS?*U9y$viW& z{%~2vIpzT^SQ&oUV>z;9%F>>bL;joIB@4FyBB_}r`CxdXB-U;dhG!ii4~y?hBZ(Tf zLnU`+Vto@VUZwWTapo6DEV?zEs*GOuk8K!(<=l%<+7mZS=?R>W7X*wX5<+}@Lh$DN zx=u1lQ)lu0auHd$JBJwmY;4(aM?xPmrM!X%#4le=%w{q2M}N%M^T=1Gt8)x|?Q}ss zoBqB$B&uZAnCYf3-$V{nd`Wo=z4&$9Fu z2DSuToi#bWcA-^IL{EO+y}fvnr$TIHh56#c#2_Ue7n{xQJAfEARnHzL?#W&92z%><4r-41jMc zs3wejCY)RRY{0lvu?j4nl?mzkXElD5`de+>G_hH^W~{|#eaYgMuaR5s?N>{VQ`cQF zK8I99i@HYGeFPj=SrWXZg9dn{OIR0rG)K6k?d27y)weEfd9~J^WKUiGu&j9~!EmB$ zuB-bC81hn^qvrBagv4zN!Yp5`hoP1n)t2BwqNF{`P;$sRgrx=jYgbn#S<jY{3%ho>k4{Fb<-45S&S~dtR!EOk3@(RA4~12{&z+vYy1=8bZC*gx zQW7}iVJn0#ft*j2!dlfkn$}yV%&mnOhBq}I{=DVpQLeMPum(u?^bNeu@+XDoom^0T zJDL7z7b2)13Zc)t)2KQ0idIs6aNO{J6GQy>MQ~I5WOP*G*JVb1VRdXJj$=sW%S})5 z^_#ZG$%iYGO+1*mg(ankmxkvj{p~2v>(SSjTD#VA0&k~Y;kLE-Af(ls+3_oVqWyE8 zdN(HAbQ#hz@sR z%3Acc#TV$M6g;f@892T*?ZR`jQwnPiZhB%~gh8gZ#Aa>;dN@aPCH82AD#_M1oS1*? z%qxyoS*AFyaqOG4R$yHeW#h<#^O;YA8%v@*khSFKnjYr!xY4PYL}?Ol7I2M7Crf70 zNy{gzq#2IA8hi8+{&q*P3))lBpcEUI=H~|5;4nY4DS~2-&)KzBp89>2JvHS0b6{Z| z!VbLP!ihFfV)Uj?UbclWuoKk)z}riq5tjO7z?;BjGdcQ$@vWj@JuhbI$jqM4W(-ejOgL zzOl};>WI;o5vT%&3)WJ~h>_yN^4`AfT|NR<4{lL*jqPH0I=$s9C1e&%{8>71gHm7S zCEdZ*z>cQ-RZh^YhcT%A^YMPSLY+!K1@&;a7Tb|;kp~0g_T(F$J2_!fUjt)D@LM%C zN8Nwn=tQ2KJa7PWa-p3Ic+@c(94Vc%RB?2o9h<`LjJCF+pKkk&_RZDqtmv~R+oQ6w z>Y$%teKHJhtwPYX+FXk)D6JO-6a7v#GI{5fR;q&+^cTfi3d$Z7KdC8DHqT6NspE_| zl=*4aAlD~(ku5Ad_~&3n|0sw}%tdXZQrPerWhIxp@Yj&Ka8Pa>ZG9TsvThX9907fA zq_uS*2Jc6;-)^BLpd*{^?ws0NHfX!)Hbyz-L1{HL@Q713FCGRa2-6I?b{a}#0O>j+ zCzx_gvsumMEVHKMT(&Gym1A0;3~jl?IH^&1$jt?svq08u9OlPI(*d41O$DL|%GCpS zpSZ8`Rc>?pC*QYcp1t`KY`GC#Jxe&(_d8B6hpSH+L$r!ano+Pgd62l|KkXjpO}uIk z(X4eA#)}ST34m9fPA*Ttiq@4JX<;5m%Gv5ptvbDmQ&eKo&>0{GUX}U+Lsk(x--fW* zHA=B4XF2M@hs`WzyLc%^gzamJ+(~y7I6nMi&{h8w==853&h^-PrBr^`EOptY`rde6 zr@HH}cqEcGbP40oYXE2t(WTzU$R-eGSQzq@nK*0?u zgNkZqUOf`-ST|a8=5b?WT?Fh!;&8?O$i*3k9}NWP(8QkUmcKOcy8N@<@JBAVT3T9e zQyYZo)CgfyBr z&el7iX6!aQV@gAsKdbxdI(}862Cdz>t?fU%{J+E6k2DZ~XlC?9h#=3*6$>Xe++UfJ z0C#36{Rx`x6x7I&t%#*R&v-;4pwA}9A7=W$gM>W^zhlwhye#+h3W_x|eQxM~R!PXY z{Cofjk>~rYp7|$x|F=y_5C1!8ALg381gQM|ciQ5=Zv^C{62PP1K#c7FGA6f|9~qG4 zz~4~TLHdi}%H`$&+`c=cxS_vJ7FZr&IQhG&x=a6ga{yQYA3&AFv@AdBUjypU!oRZ| zJKFm!f3{)(i}6eW$a4JuykPX0VQ34fmh~>M!#D-Q`~+w=L&fWsa%-hQ{qvuHN#}qW zy7wT0#eVqhC7js6ZSQP-A!@|$sT7_!4JTn>>-!pH;S;_dahpo<(|YJ+P+!PYKPeR{ z!eOWG>BmYoa{QFxZ0Q&}3OW!Jkx*kJGXc*pZdhVmQGucpj}X}GaQTgxtVPw#R6mCb z{Ge40mkij(?cCPxc`7?^ZR}5p!!)94S)h=cIv2H_$Y;ag6lBWtj`ADF_BdloTz=qnwx@wD<`DolodlVhKnUgGqaoG-uM@ zPj${$VGW>^XMxu4XYdp+e5XO;^TkLXV^2el9oE6+qqHKXq%$GxY80l$I79jZH6XdE zY+ZFP{$n!k*6DC*WqVy)aLdv%te|YnV=NGeaNEMz-$Xwv(;3y6bI}81Xn4y{-wx3o z>$C!p9H2hoGC8U}KW9UxEfuvgF$qnoXu!Z=K%3EN?~z3|vnlUOzf)wl&$~R_IzjeR zH!SX5SwkKxf$N>+!?Zc*XSCs(Tu9rFIjY+^Z27!t^P;0=eVGC}ci|UVMj(^95*d{F zx`A?Gda>mvpN5V-Z%$Ju@j}Oe$Ke~t*Npv&J9O{SQ%hSWq;C@$@3Z6DQy1R~=FIL$ z@L8FY4}JYD%92u14M6@fNa4}Lhq6<0A*jOmkSRHB)L~GAngSbk1r?GW|7f|YMYgeP z@6qE+_v^i-&RHlZl}silS|oW=Jzag72+(%SWXH6CmQhy zj@bP2uhNKxo~%-9OorF)C5^c6O%7?8~ z^}3c{K{XXnKTbR!;9C2aab2f6u<~3~N-Jo@zWRK|#_od0W!7T$1JNH!`5^3R{~RNu zbLHwP;BD9?;~3(^2uWUEsi$`iO*Z34M^j9SO3$E_o0o?=k#8-~nAf|yEG*NZvDrDu z;mMUTPZpj#&td7u`^>Y&}BXfgR z2mRnQ(AP$zW=XDs-gWTJF{NLJnbQIl3CR%}3ee&f%(Ju08L2-Y-)`wh!pxGokIIsF z&gk^U`Tfq5UR=vmVNIq|BJ7-TGx@6;^R6p8Ev82iDWN@<|2C4{RWIh*=%~ov=#v^Y zukbfkCJRCpYwhq`<9$2V=)p^qsgOEy;#3?Cl+f5$K2Ounq^j=s*B_M~9UU(wyBD|# z{6X-7}BiDwDiwmyJwqG&TCWdhn?m4C= z)t%2Bmt9Pblb(|+A;8Bgt`(MViv``P`?d7>&C)-%i|u16q1w3I2nSanKDb@v+|5R1 zJv;2EF}RS9mtsnh!5zt{3G(X2MJqZpk!6<5sk57L z?XzPrE6H{Sys_leDp02-l+pE`Dofz^Er5rThVR1AUw@rOmmZ7tkt87?=fz5=!4({w zy%h7;);k1r1O^(+pTOa@d}__`iPmOQSO5#HW3e44x?)MqW-$o~v8#1~uZc~s!}#GL zRd~ow0S}^l*eiSTj)i;>l^74L-iDf#2VlAWAh~=kO>Vn-y+=+K%Ub8bL`fK39#u2c zU2SA_ExtshTZWH_5NH$=HGy^WnMtf=m=}UuFYRyeFu5c4YWyXHJm=_J>#0>C&ja-+ z_tDO|I=x0)hAm+rE zlmPpna`3SncAU0%8k3PAT(}4+OWxZ*3pzFDnwRcR+a6vApcLHUK5FwZ+VtZ&tHFiK zDSMpUtJ`r6mut9kLf_2__`qGC6T@IIz0r`mvsaD=uA8&Fo|QS1{O%Vh`AJ18eZAtG zRmoZ$&+ftfDY{=!!2$2o93Qk_y6)_Jey&1(;UZJQl0LqbVuXds1BiF+rS1`{Zyct%8F6E?J>^al^*vAW1>$LwK_ODzPo&5h6Cbp z^VqQ5<#H$_Ia;!33g1{0qd0KwkTH7GCIxk~6{v4)5~aSH+jwbc>iyuLv{b$D70|U! z0CQFPZ0PC2%AzpCSMm7e^({*`U#5a|Lmx=W4}$(PX)j3HCnUY!AE0IYP{4t&uIucF z-39#hwij$+(|N0kZ=nLpx_MWBX2c0r++lLTY>7}ck;oT7!`_9q=c;$@to1Gf?F#Ya zQY99Yk|(MVES8@%H#vxbLzIFtIH{UaRW(b^YgixeickU3P){#XS862%5tR1}Sq+Lv zqb7r4tUxTgiN1yMFnjQ-h=}TW$f2{6Xr)-hx9s?8zJI=N7nm5|y>2paJsG@D+dlNe zd3g_R9NxYcYZ&fmU)PH0LW5OIc3|gt(QizxQSd_A#!0nq^Kmw$r*n2^)?}+He0A<C#T*&o3ok#ZB6%aL&MAH$ZI}{|GE;U!u8LqK*0-0G#7Ssi zzJwtX1`X-!=Z8}!;Sl0g2c)mfl)d~~PdZCF6t%Ld8b_~5BvFVwnp2gPXI~4Hmm9NW zr=Gl`5500G?;W?M%cNVCmVZH5Nl=~Kb4idG=mD!z2@$VzM+I~;kyqfo=8FbPAtr;R zBDxydI$(+p&3Zw=jR;@rd8KRe9Pw<({)+S2WmdN!i6{xW>?=}CnPDP^XDT493#@L4 z3tBkXuFh`U>4s_}VQZ?y337}#YAUP|^7?u^N?FkYNcExdrh?4yu)FV2VSk?*7-W#7 zCu2uv5+bzEz@-hivC4hobAK%`k~oB=s+T){)8?S?_)G!kXDG%yFt$TUopsG_ur`3O zZ-===*|;DLykr9~uI1s-wDZ`YI$OG_qaW#J3(8ZnSjg0`BVDICB| z^=7{}TU_z{xyk^&E8#Aun&BTCbLm(0i@6eu?@J_+=x)zpjsDXz!_l!>FW3v8Sj7*> zDO$B?4#mTr)zln=ubEC0F?dhdXciiyH#ZVNp)vvr8jNQ|rV-5KBJQXzCihKFLb;Fv!Wq?~ zggiANiQEz^76O|nBFSw#4HD1R5cR`nzA@j>G2@go7$zn>&La2%r>9rolfc3y!0K*K zSO#YT{Duno(-09u*2~xitJM^ByKqMPRue2z-qNY#H9nv5tj{hmk?cdag(J4}rx2A32aJLsLW5JN zji}}E#}QQ=m0N(8GhXr^X7LyxtBah+s z8n!J7aDLrH4>_!>%&QF&E)S!dH&XiCHc{ER!VN;!o58E}ewf^bg2QHsT(lS{-zt{c ziz-oXY<5Egm>oQ!)Fecr@e~r{4yG>EP+%tUu1!=9MN^rVNPHIUM{xjDRnCRUKalP{ z_hI$-zYvX?O7uz!1|J9$E60>L`qApIpO%7IP|IX4g?2O$8Nz4SU}Bjf?pNbhSM+6mzG~>I=1+M=Rhj-o z(#OOEF{b^*3OZv%6-TIXO8B5C<-)aNVk&&yDR?t2 zZ#PX3@%w2O)Ec2}>TlHJXOH~e4)z1g{7MdSf^w3FrZ&2`EHM) zbp70j4id8HWh04#`PUFUbg7eS5SqZpQ8}CJKg_KHr1^<6&GJ>0jdx5M9>BA30EEvsk2d@Gh`1^q6P2VsFKG zTIh{9j^(eNN|*!IaKjBVpI5@>twS(9@&Sj&_JXCfOpXVt?7184bf&+w3CSzNxI5bT z;4I2e`=a-KvL%i)3{haSH);)aVGErCF35?94lGi_KbLBbplAaB7rO+EB*<;Oj)W=) zD<>^k@bKhqD8lP9XAr1xI3$Sa2>1?jXqx2i(Xq|Q_JF2+b!QN=(1jYCXHjWweEE6b zQzVz&Rxz=gGV8v9t;jElvQlpNn5>SBD2zh>T4sizSo2Rf7;f)uP4l^p`AF8y8+MF} zo5qakIQ=}<@>#AZ*LPhfA}U^~qruYVbu^G>xc4%^i-ueL{dPFWB_xC;Du_P16FvUm zOJ(%Tglr;=p08(Pm;5^4!ef!lwTSIxMmqyE`e5WdX~#9W^sCc^Q;HjBbGlm~PgnI# z0BOez1;p8Mvg^nSA3>Xu^6OPJyu5H~KFVV+LrW?MFPx@!E+rm~bQCUsf5WTCWr^kb zQ|mRQA9%iGeAk|PQseeBZ#vq;5Xf_`;gP1F)}XNTg&Ya5$2pLf78Ggj*;5q*Rz6Q& zHQ0;9C8A_d+HMKg6~4D7`9OT$E$&O~u6Z3>P*k;~=$1*TjEPzAj3RGw2QNJQxxYj8 z=6qR=O+_FAj-eG{&fJF4n2QHPLqj4io{C)6Z(Cyu_IR#b`P2|*0pJ;fP;Z=OO36kv zow62f0p-ywmPHIcRep@oRaGyzCp9+m35fv1~ZRS!_0bdHQ2U!sqNO?+wg8~5-n+#OW9>dCdt=8oM@;Qs@ z?Epc`QoHjN<)LIR()k+ef7{gmV_?If`P=fpzR-ZJ&4m=x3Z-eb_X(Q7x>6}V?`p=v z0!!Wm(%yTYER*ElpMe}8Y)Sc)DIlNb+tZpYS|tjb?VwWrT}R+0Y^5UUtTFObJwTK+@O zy#=&t)p`tP! zD@5hYe34|tJmSsn7I&EKX#KM9;e0Ls8nNrbIw9UO4jldG7{DorOlIa3UoJ?G_(~<< z;Hn{Q83wwGHX9k#h1`K(K#r9Nw_wV2vS7D?sLwa$ul6b@2}Tn$4Y@K zQ@wrV+9=v;OWwT64rS?JPXPWZDd`BGlNjkYs#Ygav?ES2oA?k-|7{ZL?fZC7OjHEw zj|ePaB!^JMgTrVh^)}+l1(akA4@l!slMmYitzj}{b#j`-;eGKs{{FKcGYdNYw7{C< zlw#J-G3DaMC=y@K$9}aSwKe7!u(2Gta#YnKCm=j&f^~le4bXGn!uzcH41JT51`!~d z(9y>qy7+CDhmh#YTev9|WkcPQFe?bCf-PtOJNeMhyH-&8h4VqvL)b{MFS}&ns0&5= zX2X3<2{2QU6#?71_CK8y4TQwMhz5XbFiO)SuNlbuo{O_@lx_!VHGVa(5fg1-M%pVZ zCMN=otqD(73qAPO+4be8>;-agMtAmmxqD^$p^oioVn+k|hq(L`EA6P5RrNOmZt|jg zMr{S$xSNugBNh0Hg_e;KZoz6Vjf^n zQNY`Ueh3(M7#1875=ymUXHiF-G}IlhxnDO@P{7SfeDWcp!+K8HRzTPvkWd$>nPM{K z8^Yi;F+Gj3$9)eY433oA2;bY$Qj44R%=Ofou1LDe9_%_nb=jvWBDX&COAV*^ac6z? z_``krvV3GQ(Nk{8IAEkW{=TUas|)939FV~6 zSo`Uqio;6@FCz`DhEi=R8|%PIa%KIO^pEhR7^3)R7U!Eefc{p!U!ETRJlxN7i0+qD z9fo=d%JFpFlj((w_EIN@S&Hi}_L(BOJNK}&kUjZW)1a}X(9Oo2^gDt>j~3Cop#5_9rTAu6;5}GQN9q!D3dvHHpq6be$Y^E0EyxM=LlZ;L zKE(-GRrR9gYl3+pU;0-2K@V)Y34c-}a#JZHP~-=bC1v?jQA0b+X{J?i2ZxknI!$Lc zx$7=zl}r6{6EZPiJF=~5iPciL?`5*%?$`1jdi$>Gx^1Td?9*tHU&>utJwDu2&ME}~ z8JuNF&r>ryLtDw7C#=gMJ|X3o?Tim}M!mI%0NkM*geRD??SqHejpghd#t7lY3ynVSlJN!&-rdWp(=4cownav5#8@+ zRpA9IP?9N#F0oyhP4YSycU&L`yh^-932j8G)jCh#zbX|&NTtD|G3 z&*J$C%o37dq#sgso{+Z#_36-40+7EJaaN}fhRa^+lT!q( zmz7kWp&1aCql6g+IR9KjH9o6bekp$`)%W5300RYlGiM=7v060waXhavnAkG;&yZhl z8XsggSgbV|2*%^9@ zxgI826NaHAiiYIGzaGh{mS`MN9JF29KBtNJyt61u>tog*WiyuO<#3JegQxGTHCqg< zl7bXahzjtwO^#J227L>>M$)=ivlyqI6f(79K9JV>ygP4He+BLryJaat8@A#>65o~4 zVW(nLqhqyR(aY9RVS6Gdz@y#BY0tAuc}{hy$?<^mj*KQrHQMyuKwfTbPCXJvtT}S3 zgSCwpHR#JgV0JQI)=M06rJ{sCzL1VQ=j_<8XQ`?T78h#nZJV#FieHCz8rm^PoF}g8 zSb}RJ$?o4J*jDxsFk?2#>=75AFEwb!%6W5A| zRwjpEItkmYFH%Q1{6(yPls}Dpomh*Fz`xLm=$B_KoKDu_N;9p3P$K_os1}m?4CQ@e zKKGI08jPm}Woi;PtBwvhcua6;Ixpm`?2dszx0=u4vCx(4QAJ}}83p2cE<|&pCtUQwNlo_hj&e#GeuFodRSYoA zigGDr*|1m9!}+bpwS<;~ca@T1bd{*FzU{7ok7XW-82F^*UsArz{%Wo&H7XLT42Edu z60b|M1BzbfOv7e^nb~fT(^B`71WjIcd1O*X3ABb*j%}xIQ+F!vonqF;`B8OT3+=L) zeN})*ASmaCK;?~4W{O8qyBd6{VTfYiwgo8{&l$uhsDOPkJH6A?>>Al1DRbFx9&J!q zV1{H!7H-^=*OKSs$st(95AJx6=9w;OkL5yEG|LFSq$=v;(vD^iKa8 zL(T1hSWu+~D?v#}k%V*9LfmFKT1$i3ATu$BJyhP!p|1d$x*a_4y=MvmD%dy`SYc4;?f;Y^pWC>8py_RR3Cv){n-W-QsiV~7<-Xc%n(sS&B#LIh1jc?Wn?yAK<#3hOOhB+Apx6M;{&{8 z!VPn55|{#F&|Ts3tlP#yqFhvFLcH8Mdh^bTrZ-Y&rldqzIKoyDZApo(xC-3tN`!{F zNKct-q7k%N)6}dTY?SrQ5Lel1TxMZ~7ciz-24?B36lMd}l-NM^4{bw=<;CNoa z!^?djd4YfNtPrA>1K+KZrWqm(*wj}hT!MovLy*y4j-(CHYE-PTR!~*4SGqcmnd%YMCNWbh z3wj>N>b|d|j%4JTDF^OEQ_GBG(3KHY7cJWU{BQ9JsE@FJ8`GTnUoji;(U%mI)yE&aBIL zZs_QU;Y>Ae%GUfWK_}7}A+MV43kwng`X>cXRB=E(-$fB2TwUY&JerVToav;bsP(0kr3Pd-X%+ET9@n0r&+K1AfZ^dyY@ zE^B;1t6)Im27jJ7uo%7J7kI8DuKBK65evk9R_B}1s`y{*y<>Q0%homA9dxXYZM$RJ zww-iryJOq7ZQJSCw$riw-FrW0Kj%GX?|shS_xi5)Z*s3%RkLQzs+x1GF%(qOi|xHQ z01Tm_mm@uAO>-&dI3uB>$w2Px(OoH!@};e@8r1j@lnn)U>rINtDMk(@Tf&e6lnzv6mcBwj(UF!U)SM3Uq%F^*b*vV&39RV&YZu zUra;PkWn4WCB=CvXueS~+9hgkV2ev3uG%*~5JPdf=PSO@s`{H9*m)AcqSLm9O6IMNl*YvF=!Z+MJs!RE4NQ@o_St4nu8om$3dhB2Tu| z^L0^PTGzXmIDw$bdAm59O;yyE!U^jUtTM4_2FpyCncRsGz&dDr5JqYYMo9YtDQ#>V zER?{1R*55p`D3HO?Bb_ndX3Z0oJLs?6-Oug9TP;*zKs(^KhXzXdS^YRk#Bbz5>w&5 zUj6nbV`Fn9K$(37d}HrtXJg_I+L~Wg_sDtY)qW*y-97ay;H6y zxvTne2>;Q}pypDONbkaiR`?4+xtFt3ZJ`Svqj72e1)5OI%QK+#P<0}F$2melMs$kd zjE2S$U7(F59Zy*$!_tWR`soP?WMgCmF%fCCAg2@_7XJhk6BuSRNnZdhroXeE0*(pe zMq_wW5Q7-ZuFFVzwU?!F%SzOR873()NrdQDjQ)0_u&I9lP8fynak*9`S|aoweiK~I z)n@lV&BJq_YK2|uDvwnAYif}T=FAPv?jXGd;8?XX!WRNEEts~vhSB2(N7_x5thw<3X%pX zK@S=fdw#mEyG|mLPoN1u9dwZdgFM-P2?`XS`ArVV_vBt$q)N+wGrmNX-zQ6|DpLTo zf~KjuzHhFWJlCC&nhQ)wC^9r($+UyQ)Vj1AROrW!c9HP;IrR~V9Yw7e8L=j=eS7sU zusw$MFNrAk)r_%L73C{H!;-|GizPR)%1j!{wpztSh4-{6=v;sX6+UU=mjE$RPPDxU z>Wgb|Rq&$ba|~WWW%wGOjRe&aLU1O8=u=7NpArvqnUf{ zE|zu%3l`yxy~ZB@0|9>N%vSjojBp)(GlD^B%@AF4Y>TxzAqn16C5W?RH8wr{8-#u2<|#MgEh^1QY}7*BarEj#{f++@D_`Ec2@bv zUmsZSt>R=qa^D{H2H<4(D~-zm`VX|mTSjYzmzf-DvMM=P=p4zdm99rV|DT!X{yS< zL}psK5RrVnYT3U8$C9e_zm-i%iejvtK|jJ#QExI)66Q!W+-GFde1`p2XCsIOk+W}T zWOpR|Ros1Sn!k2_T5mT-M=gvb6t3E1hF{*R3E%bf3sOuP>g11_V1lr??DSLJb+kn$TPR9+nWt>Tr;6cj3wBb4TQZs+fSzp-@ z+D&vhUA(fb75kblYbT5I+jlB8Wko&pUxMnv(>}MpSVoKIFNd;S9gN6L$7(~elsdtz zG8}^bl6_C%)Wt-oQulic7Cm!Jw`~=volxyU0s0=j8{9W74_p4ctCZiV0w6M2y-ZQ1 z^VjD_W0likbRYp=XY?|LmN^3N4tHc``ldGRh#!Nb z{9KtgZ~~H~h=Nj?%(qGCOCW2d8xVPIXzTILXMmus99hcDHI`EUsS{<-mx{x-d422k zPj{zJK)235alF|YM&dHxcd(6++On}X_PC2%Dpg+@isOkNWIOw=+H|dIk@%bpnYPG7 zRxr)%tM7KuV@Zy4la=FI(q=}v?5y`PV_>njyV%~I5IsJJiE-jtj*cuo91wC;I~{yY z#!M!d8dv0$Q;G>WgBX&N02Cy39{OW#Ac@RKnsf0`;rD_z`iFxx6Uj~#yl%;u^GlU3 zh+9yv0&3_J2O|gDYi<;WG)9<2<-M?bu`BWo^t*29xZPqYqU`coNE9@D@D2(POigj) zTQ0_n_T*AnDTb(-^KwfMB!=c)pD%X14-=qAjQXg!QQ(uA8i_j(^ywPe1L??>a;zhWIqC0}B4@s&E?iwUPL+*NH$DZBEFPdAWK9he5}; zU*& zGA8OxDy1IA-)C$@8Xr{lmXAmbyq#AvL#DgQ+A$E|w6IvGK9nxJ=4JTMr1bxI&SP?Z zzL!yRwr-NY{~qfo1fgbYQrPoE+}pE)Fv08_hiXb(Qd>@E&ZGsqZ>%$6l* z(_h{1aXLL7&vuX)*1oc#Ie7VYke%(M^q(8fNDPIxg3+8wS(jR39L2!~l#lU^sxRwN zPv#^ompnZvLBX{@gCPn$wn>coeTO7yJ06o8HJLhOqrH9C9eVJ_yhab%ap1u z(M6k;{()o?!+7Uy{$8uKxoQge1Qn~>(xFV{z0(;sgId)TtDSmXI19J<;@}}df}%AwXb&9m z7R6!p%}>6^--t1N9JBNT66q3UP4RcdQBx1XQWUU-k8)!%@Z}k&#F?cPl0(z^hF6hG zPOoGOlc`dR7XWE`5qIFuW(WB-Zd)VTS1e@%hhIS8xu$Gt<~Ur9X_Xu{S0{3hY&<^I zTP3$&Yag~|64rrCLiwLe^l z+}jb?5&}ad1v9;}_Twb+JNQlCVo!_*>LOkjZWA0yp)wJXLyik*t70MKu~9)sS^JqM zK3RQK9%TiIWzU_jMTMI`8!`n*enCs7Li(5M=7D2a@a7hfZlCz53ZyFhih9GT)L+=` z+rp4V2Z3J=ry!SN;={>?EwaOc@EZ6f6v)3_*m!JMy(4umMEeG+?0&Cu?~Cx?W=0C` zsE*YSWR#$Z|MK1Rhi=s;wCF8qRmZGXn9A&hUwK;^AMTWyBBS%ztZ^xMuHrS8Kj1Gu zp~Vzvx=RRTU6l2lUwKhrUPoVYUN<-s%Y8=$b(C3jqZz&(hu_=zq9#M?+B26Dcz$3HeZ@g>8ufl(#2o+cn91ev^BEJu8imVvfo@s5F@v9muh-pgp&Q}gE0 z4W!4noH~qR*ex%KgR4ULe0Kt{)qlAN{rr05oR-qbeR3KWqoKv&a<7+pN2=|cmX{l< z8EQ;Kc4S3Le(ss7gNzJHW)>ZM zZ~8j9F5tidp1c4n*Vmy@1O0!4RQ(Qoy|g5xn?VNec+>P)eYE%fU&r_11J5tg z>D9R1>HlA7>>sP)cbqJpPn#6)@ydtQ;?Fz!f6KZ26HWWiN8so_D+8dYs8MYbf79SU z8`;uE&;{-7AozLr?Vo@AH=OPtExY`Hs0P~p-08CB_^&qlt4=(G0t#Q}$ZC~I{|fs3 zqp|-P+3)Y{29^W>f#EI(b}RoqrS#{Pn^izmeQc_R?K=MbMD^#EadZLsX_p_gIL;aW zy%QY--H`t7LW!qFe>Hjk(veF5fElzG*yF1C^uKrF92qbhYm~K`wEtck{L`~OV95ZZ z;cSHsX&L|5PS{j|AFY>#c2VCoGBtW>wD!LJA13_=!usD$a@h^93*`@XAa5&@@;5*E z=RntZfNEbB=U8UtEiB4k(@aw|jDX;9eQpjXc|80M5dMCuIO{>6VPHh+!!xMiaaKyk zf&cqp=zeoq=&``bfA8@>yYt6?TugrR!kms!+X)>t1+?=y#^|uD zoR^SL|D)^vhLnW@84&WEN&xGn1KAIvi_{QNOK8$YitJ8 z1)tbAqO5E%|3j-=Ie36~2km^j!At1|mge0E^!~UeZg0D>$nsHCP9VHf=j8tQMJTCR zjpP0N7NuuSb{co#g=JDo#V7BCpKTCclSi2C&V#Yf{GSHM^?P^*Nh|||=dE*urTa;p z(s;1Q4L;TPrEmQpFWH@q7%U2vyTh65!(}G@%br&qqbxn;=ObkM6Tif*9od4*kxb4gP zov#K)=#O@C+>7=uoiP-4R~Y8E7Zti0)fFD^4gL1p*E$!sH-%;oF0jRi53ob+cUTga zWLTv;EuN~pPzpjnvzyAMUgZC<@%p?7{4mmd2x4furY6W1kk) z?ebJ>3Hu4LTza;Fd5t5F!o-qO(NXtMf`7knVs4dFOCA05WpX7?9y8kN9yYUbJpPyn2j#`#*;Z)w|u`?z4sH#oa|tH+d62zRu-(;p^t|6oIi~80?ujOV1fTrUqjmf(& zmUB|Oc5gP{wrORPY|wNvIy{CPxxkU*4^fL-P4yWs34fBl3yWe4|glf-KlOgIT&f-@F=0T9sQaw)lJriyLt_>46$Go>^S^%6ttKFiQr0 zFM`>)bvYtYO8@B@jmMKFvBC`qibTky0sq{gL3h^Odbh8lO-`FqtK~?{{%Wj_mQUFZ zCup(=&uQf=C%bXE^72Y-n#+UE$3UjQ(9|43#L&VtDwJ}0xBcm2_ljy?cz`&p^Q(Hq z73|*yQDHJ4p8{J#hweV?#K=e*f8=8tyq`SlRX{yG%ZS=Ja>2LGBI+>- zrDYp2vzJRdVkX5D{Ek87g<~2(lm@yF$L=|T*)=EA$zs{u=}2@=kRYmGqL(myxN zbfhFDb*-(V0t3J7?d?s8+nF-itEeO$br#pvA$E3l+SuCiX=`hL%ww$T?WZnJSyJ?E z2%t`{5DO4R@OX^A8rAX<&GeO>YhC~1#J{0w5*ZAtPjlE)&OOfV+h&GHr zFN+`l!lP4%VH|5s5f+>^-jJ~Le1$8wToCo()rrA{E!9kRpkn+}lmHZNfZqfa8uUwx zCJZrgv&a57i!zLwgCnqE8dG@{{=4({9c&~+;~ac*+*lc#)3U_1mOl_O zAE$Mc3~umFGX`5J03z4BuUA|=F}CeJ;;WDzY0n<7KU!m{}b!B3LV3s99Dk;4+i~B~zB+BI_8| ze|IU;-TR6rSk7bz=D8^R-7E}!&-<6TW%lG&(ieht2sY5zIwfx z)Vpd&ucl8BHrm|^6;b91z-_+;=6o1a2We)#)p*y2kqman%MT5OOt|K)t9X8Pt8ZxN z0npmli%)SDtu@--{7A`!zJfrFNp`?CB_Da*3F9(3J@=_g$$zY=b?zbjnb{9T%NfNK zMHN`)=N91N4IR)*N~;-3j!3$7b+sRmsqWpyhsJ;RF!>b-j8H$tY-if$F+xN8%4cL6mj4bI%2AnpY-m+v1;D_N@c=jw^E-pThPp=?D`e19TSsfnnCWc72 zjw&O-9~uxR->mykryRy^H%_Z4;=!I(Z+2*Hera-6YKIK1cDX_*V>b*F?fa}K^Opl< zzy!ElA&a@{?&AbIGylR1%Vi`YCE23wausS<8Lg|@eW~g!N#*FniJC*|`n#)>ZvSuB z6>QBN^g5g#e>uHkiZOmMB@SV!-f z0xXYHE)*TcR!L0C_x(IP;WQIK+2Hi#&IaBC#3u^eLi&~J>&ohCPE{4Hdgkq7QtG#B zDH-`w2!#V(d~y+jJ^@`HyY{;mmYUr)WHePay|-Bz!v0BE*OZo>JDn~sY%FR+wBVd6 zX<1#mLdmSp&KmY7el*J5EwHu-?_{InyiGYw2edi?@L&=(fXc02^}Mx!s}u`C@WozD z%$uX5A=YeDZ=3fEM?2P7{*}Yrc6TMU%iCg=?tOhoFkwKi1kW?u`^^Yyv5Cnk!$H)? zOQ*{PS~H0LZs8<7NxwjPh42BhDxX!5SDp6P{;Z7-P~J-+)7 zi?HhQ(RjaKPnhqpxfQ3~=aBfBZ;`!TmkjkYpOns3 z7OhZP>+WVs>|6y*cKPUddQ)p!jOiKbM?RJ5bc=jEHn>zite!`G__YhS^1)+MQfb>eUALZ)8a_~=M zSiRK^0ap8S))Q05%9={<@(fE}z}TS`4bbCX6y;0h+ab&f@u z*HVf4fxWC>rR51K3iA2Pc7r`M~zHq?)U+Ggjwq=x`?>vO~BqCGzQQ9Q{ZUp zs#)#jMb|sbP$)ZsXzx+J0$8=dB%jCSG7V#cQ{T)y-`I+%{gDo?Rc|A8nyknQG%9Am zmO3CE|Kbpq64?u8e5wtTD8Pof@yizg!)LRv?Rm)3E}ke~f=uba zQW&`w<8a(rdVkx=VT-CLG?vx@ohT=!#9M}Fhz1pmOm=SGowka5_`ACvogIV?v_D64 zBWTNj>Nj@`FD_H=3Y!E$mjOi`wx@;3Vhdi`TOv0pL3>Y_%5?6}Vh&vGU-tK;MO4o! zOOBrkUpG}$komtO`{90EFYaxKU|37I3T1s>PQetIoCD!`oUiJ)|B8t&S-~-KjR(A& z>s!6S0*-At-t77Ysh&FDJIbA~z7HG`(Q9VgJux92?w1|zlWj3LHU>R7I0z3!XO!3r#3e?9f%%@#Iv~0YDk+QA6 zy#wb>!LBD>hd@b6`)yU!wqP?#S2ISh-{S~F zUH5AAZbxEcHX^oNGQGtHN3Dd#_Hv6)G0ev3B3hlkp+<%2@M1+nwUWJH zrFs2oBAo%|!b4D;qV%|fMSB3u+Z!>CL{doA1iWxE+2@lrYJ!sQ)RN6j+!q)xKA$5i zYyO=8gJwG>X%mncZ{65^M)^8hsnK%dJ0K0=prm_^j3&K5C z!c25SP$rG@${5kyXEq0h`ifI|-nZ%Bp&UGmcG)1Io~&&B+VKxwqEBu=LO?n!fa!W# zP_K6$(Yv5&sYIZlt8Mg2FUJj~JkQwDQqar!RbOqlxLyh-0(&9ks08{-LM62HNg2Lk zK48iIHI~eQv7y$lDUAy-<92rty%cT`$A?vKUv#|RxxKCyM0Va^vMhU7TC8(A#Lm7RUdPbd zs&R5$rfC}Nzje2qkD~+Ir8yQII}M$pabsqAUdp^4Usw}zQ{!etII?=#Bt1SKu6qB- zb4Sy5xdT(BcaL2f*gimo%vigl_j+mT%55*Wu>U!_0O>d{PHOoz;DAO9LHE09Zb5tW z1jU9sxu)An8nQA}cLZh7aX~`cWMnOA6GJ9A?Adn}FUo$W<5)8*TRl^hzo z=a!;<*^=-HnLzJ1=)oVV1Eu}yb9GDv3ya|3NG1066Adhi5ve#%V_zDTdJ}2x$jhMQ%azU;?QV%bBtLMMuHmU>e}Wh$UvLs3q%H>oJ4p zAL$nqMC^nm-CHjdhJb5b>vuXsi5 zshzTZ6_wXUa=aq-KUKcx>`167$w+`YX^Z#Pn${py-y7%ZHu}bs!ro^R<%bD~i{Tg| z7+mflM(v(OIrWY^!W?kELm$Y3US~?DzdhS4qM+iv3x6IIj_i{mui6SNX=(jbGIDIQ za3!DMeN*)z$Ly}c0~+9?>xid{WoTp+QW;uKKIjjB!^^q=$TpUiQqTuq>%yqWj|CZ^ za?v?LgATo0WmA}Y3US}3vqsFQ=}9q`f(>P^%{j==s8Kb^Od2;d%JH#HdBOVe;6Bl3SbQ z{9tN2s>^NNg8}EqOs50e9nzJ#UtuqLqr9KZkNZg%Httxdnb8E~fk`sTgsz^6auij_&K7(+$aKKIIexcsyemBA zDw84K-Y6lX5(e{BUt$YB4C2W2qSzPsyCgMQ44`I6*Kb5U+3d@*fi?^`Xu5U@=MN!A zH6|gF7YXX|t3pPX}`(o2Y z;8fAx5n{vhMGNGMJ0G0Zu!IEZuh**gyv> zX@srh8Ymt%XnA^tXmwaq&~qZ!h>+*S&(-87e)au;mLV-3g~D__gxgsMfHT?HvI`PD z29hKkJudIl)Suig%riW;oE^5Y5k=@|c2*YMZLR{0=@;s(;k8YZ&saUL!kbOEP@y$i zX^rl^&<;(40aUq5&bpM^s<&>q1f~ui%Te#5Lw8pL$1Z{^n0F&L*;rF;6;~(QNt6d$ z7LIV4?;}HxSI@R5+p%TE%`HFaJuixu?5Gf7sC^w}7wK+*srP0iMW+!-?&WYktuJ|= z=eua%SdNj&Pk0LMyr)XAx|D$b928B28|6e7aRTV7!Z+{{9xv<7nUL-cCGA{p06#w6 zgk@Kh;=vh|h|n25{nXE4X-XfwCOg%O63G+#6V=Hdg>Jy{BAX#s#2NQXQj*wbUa@T2 z(V;ZV=s1-h3$Qucu!b9we0K7&;;wj(MZm3CLBm~9J zDayIx?a>VXLfvWU7X8BuYAd(SGWA-W^BH?ASxL z>`!`JObTk4Le}Pp#Qk`(yh`5m9|&$1*!Q9M2CBw1$I@il;OOmSW!&y|NoLiTu1dg6K7h#}P;^!7Rty*&Ueq^@-SmBZGW_wmDsX zWx-|o4&0s&KI&r|m3Bul_1jc!Iu#u3R>Gn;X~MKylHU9%=>TB^8|me#x0l!ngk$MM zTO_L2wfohNj0@GVu(6tOTQ0;ml{C&fjksfllY+d}?^P{rM$%2W+{>Jd{)sfoELZ^#$R-V#e}~d#I9z!))nu2P9>x7LE8ge z=56yddCxpxv-66B^JYy(PGs?|#fV`W_iNz6H9*zNPs@9{$7LgQ}i7 zci1hzxRIrstVJ8!$)x0O+|XJuMoZ3@@vJCzRsoCemte_cibs9eQQ$s*!e0Hc*8)D| z0l)-;wg_(EM_?dZ&|9@6fDazV5mj$9Hud{>yx?@4^#)j{6g5H=NTYVPws!#zN&WQk z@jm$;T-Evb2_>~uj?4b_^k(wPZ|ESzC~O9id=e$$x|_ueqw`T8u~&;~;AST6dAfK} z2VMu;5!lV`r2QVDuExruSP^tUh@6%j!GPXGam~06Q{HvlZ7yZb5vsD$jWoqal9MQ@ z^!;U$W$U}t6)y(m)!lu?Z}=1q=;FR zLMEXDW6a?*@H5L0h-Ce<^e*uO$Or?OY4hg538>vj#Bw zJR^S>W-Sv3WKK$b+k5^7e&d56%^UkAVv7%OrKI4}hh`s5VK9bud*@?!y*--7Z+pRu zbk2`79}aU2LbnQ7#b(Z-@OpoBoxkr`j?VMni69~&!SAXUx9DBzL8Pyt2gsVE&-iBN zv?3W#Y7r$FVAD0!im0k0wQGWfme{-ynv|CaQ-TsR(=!C6*jm%RHtAg0NWeO`ub)YY zwj)Kghkj#ZYU-Qn$Dyb1Uug1f>>J-)kPTqy@5*U_l0MfCjsy=1$uZ2tzpxN+vij@* zBe{KW4*907jG19+X<}*~6zPLMCY8^M+~s0N;Y1Q|uy60(Z>{5%50}{(XqL|54y&|h zFws2+l!G60iEEe%u#G3i9su+6SD2h`0g>*hDI39`OCq;h{>!6~{_huR%6PYvMnpK+ zYJd{AOMr{y8-fXWSLEiqQ66Abl~ob0jHps-I16xpmr4zqfo1c0>cQuv9}zg^ya1dc zFF$^*gQ_Yo;(}dXNI3i9kwGp&kfAMgET4ssvt_W`J2_i?6xdH>vIB(Q+p0Ng5c#O` z+gv{mH&C^C5w2BxWd7g+s7B~KblrI9usv@%^rC6E^?peIGwHPpE)Xc!kLZ%ku!o)z z&wnsX+o4VY=pK5oSMgw4u%dN?h6U!8sHeHog$9FRf$E3vj>p6dEfR$z z?2ucEv0F42sMKRc{;1vFg7{ZV*3lUNnrl-EF)^{Jg@uWUqdavIY!U65A*Xg%uF7^S zjvK&>af7;zcfA5~);-2_8e!oCa14eTz2}gf$#w(1fWfjAW+_gL(*LH*Z2+d&eAkUu zM<}Dw_@`n&@EIYeW7g|f?!sNqgx%*QAVOC*737RyR12A<*6T+$dM}48_Dv(dvEE|3P3l4T!UJxWmP=JtfPEOBDCDbtazFvC{uMZqR4Ir%xAAtqH z?#}K11BnwH7WN&!?ST6)oP(?%NLg7K8V_mbW>R31qFYv78Eyjbswcr8)Nt1$A-YU| zjv)b(KNg7~mmvg5o zyP_gura(eKLIMgh0DxfR7PPUkN#sobk4nKvAb@at?Sc{!5kYUaC%Uw~m-N6W*GPNI_o!nnwvB;d& z;%7JF;^OvcBJw$7VqzZ8nl>-Ddi>Ivx7i_)RDG~HoZ1@McI) z;Hv8C{30Txv}!3qKr>PYpwAc_U~*m~xGmtEdl;P2%n5@6qB0~TBqocMTF+EEf8mw? z41c&4yo2)>QTOm0QUh6B?tx<9_047M#VOZ>*oTR;>DkA^Q z{i9>!p$h_mQVHJE;?sdFZ5MfcU_rY?cFj>`@Y#=zQpHt~9Qnw>%2-OL^U{)RM=tQo zLz}y28*VWZ1|k4001;$M_6N)!M(5{17@0w)|5Wj72sw$YF75_vw)>!G9C+!JUlnb) zR@`#;`pkC53H|$?;DYR9_?XTfa-6FJ#Hzt zIZN$%qvEyy@Tfwv`{g&425v}zkJPeB&G3#)OiX}7Li%Q8WTXo~V!U1r;YI^N9h zS9fMpA91=+V8kyB&Gi_-Kd$viJ$i9tNit?>K<1N>Y&|znE_K+0or7|E>T#hW;rYai z-dfMY2Ew#ucPIfBR&Ip4VmjsICRlxDABJ-zBY$*17fgo~_cR4ncl3qum+NsyXSy5dc z$%WYk+_i-g$ODN(`1=NEh#(r$>%2Qu#zVk;XJTmhQ4l~Z z2@RuX5`9%&O#!s%7D4Z}KsD#k=&jM_UbPRM)&_#fTrR})vi43?A-kD}#h44E4UQv< z%#6&Ph=M{lv1eeSOLcBY6Y3U`s<%*nY(ryquN@V^;ob$b-I-)dD;E;FZ??0uelyir z8aV@v(_Rpl?Nh2fK3%THP;WAgL}FU7lHh=FGrqUK{}ai3*Ap3#>Vw5*&u-L6V4(>E z1&k9^gx7JJ5A#dzcF(%|;XK%Z`$MdWDap85Sdec8+}yYSIZ65Sl0*L6uYA|)PZU-h3ymFz{E_PN5|6*Npm(eI*_lnFQb;}EBn;Ak)7Hg_nB^= z%$wvdJ6=8+X>GjrI`!DN#pTIn-)zO0g68AB_IjlwT?pZ5W7E|;GdT8;-dhhIcsuW& zWPnYvFb1^+k#b+$FognykBF5?HziE7}kc;1o-yk#ru8p$V@_;*;US zhKo%EheDA}k8g9Z35FlxZ~}#T$JTJ>1*hs&ie$3WR?~#tK6?~=0)-6cjb)9MNIJ(C zYBwVZ+Sv&x5{(50pGggOF#Aw0UvI{a66k*k)Pi6%+kn*KuAl@%iw~Jzsx~2a!sZFT z1ff>tKoaRFq@M0j0(SLuh~`0|Rtq&Sw&s^$Kp&83%P~ruFxgTQ-sm}-4XXB9g0LOR|PuS>dp!uu`Tu=W)2{rBSaY9u-@TV2P^k@TW*B@T(kmy{!)CT4!q9& zA?~rD7E1Cyoy_Bm)2o1Na28|(`!5Tz1>+|m`eV7MutT42vi5E9YESOmW zV#_kT!1ntbU0iW{0|92xS7pG6hLURh;8Skf68b!J_B6`zS1`8|nt=b|FbcJU*G zJxXH!8SPOCRTbkDpZObzMpG6-1+C_`w-YIfHCJerh>U>kuFET(DQxddW2tr(^$N>P z|M~b&+sAf_>YW{JxQ;ewK{*M;{LnCO)JdGa0~qs5B7P%Nm0YA&uPbCtEv)PkNxrGs zPZpYuSVPtueckj5ay<*O@s&PS0^fUVZp5)T?G?0!#t;)I+&|~y?nx9eoO6z~1N6?H z%tLMUqHGV2h?||t;J`>{Z!Lz$MfI#mBg-gH6rBSi3%}?S_}W@bl9WGRBx?$1S(A1P zqX*l|$WM3HpoTlv!{1)QqEKlCa&$(`zm%-!bF?~}LPG(2(l-iYO=PkAI(k=$-q80n zqZ>p&Z&6s0rsjy9nN6W$D+Y4i59rHHjMv-QeUsdb(db}4n!Z9*O+CWLXT~s&I`1!J z;+Q+6;nLyrkOFTHd>0TYhO=BwA1OVC0;BUx!Cx3dFVr3iX`;-Q9Cv}^?677cnNXv- z=;nQ$3WjzM^mA|A{?(wN+HebpMk=J2)dYSW9On7*@w0eH;3J^TNhNAer6UkF$#UyaO77E6ROwf{@V`@=Ie`P?vXV=)OBG z@9Hp?5q7xk{)$k|I{}g#^U=l>LYxS6UqKK8T@wunP?~MC%SpCNdf4@_WjHTAlPyEDGXe>x+ z6YC1|G9nsU@AXgKxzesm05R}SfbRc(^s~mxhOPQJjwo+?SAIf*XMN1kB04`X@Vd0s zw$$VeXHjZuaAcgd)pP9m_&xWePEy08NJJ210&B&O;jmJFxzvcvG~Ivp<>4pGnXCIn z+)r|KCS{MPuDo{~9j!%p_eh<@#n0PIR~HC#&yC3UxJ$H&THUBx8ok16ST4iv4DE26 z!hMlO=$xXnJ5YeY@AFD>`Rcgvs@w%9pVizPUfibmxrE6l=ZKlCEx)QNYG)wKSdG}x z^|sRwl6gSU(Z%U7Q4@9bs}jBWJ(Y`+EuXImF#>j0C}hLQsMce=Efv9`Ey5e7G%gQ3 zEHlb)nV`xN?9P)}gaXZUxzQ2jiCxWBM)3qYAGtz8#wI7T^!`63w{GWVQp$ z_}V66e>6e@rJwMQY4ts0=)1av3zTEnbVkq6b5uG&Jy9OpFLWSIkp*-PCrHhxb^a{{ zOt%e65!B=TTXSw-CPhT|)`LkI=Bl>+mq=M`=tZBG-_1&r4d`9{z#e+{7u(Tb(Am(( zPZtE`73r)tI^lp3WKEV0z}=WCX_Dj$J%pMUEJ8ca(gX-;zUtA7RXdmXr_37X*0M5_ zH(YQ43A{A=1mM`b9WV(Jn`M80LrLaxhPAj8oP`P?7f+-BeIPlTI-C76h3rgBLSo*{ z7tdh(OICC{at*rRjq!{P$)M{P*4>=YKlmowh|Cwkl4ocRLLi6Mh-^!2vGAKyNOt0! zk5C4)=Tw;hFul&$Lk=Te6?ZlF`l1htLJ z2ZSvuGC+w;wizULDz|X1gP&?b+cVVsPzjZU^Hh0ES5|oU0vU7viN>!`H|oJk^0767 zv+L=?J33o(@GdNA?@3w5Bkbd?5!&F3SD@K^DL(!)f;<84XbP^BhcYz~CDvZ>FwMw8y`=*50*tZx>-$9gZ%YUA*YP1N<5|4V1+}|#lKCeX8&bwbzE;5H?`Y>8vnUq)%ZXiF%V2b(CLpi=!_;e(EWc z1-QMv(rou_E{%43@YdGW?Q+v=Deu_<_BLALf;hhnF7l|75Sy)W*BqAj?#Ar(JNv^i zn8I|^P>gqy?)zpb2N3re7j#xraR4`Un(pmI+H{=^=@lq{h-Db*Zq*yXWwvnuppxC& zVB$7;;9A@o^EfkIN6aX{TVpa~h}FDH%KWWo3ZhP~Ol%jPdOhQYrm^Kp+QRg+wd|X?C^&3Sea~*zD7tBAa=I!VYrLo3&Opm9XVr5PA+pHXy zT~Y~1kfv~`e^P$nmUa^F7kC5-8U7)<&U5i;I{FI=@w!}>ms0sU@i_|0u0pm~Mt!NO z{&13|&?UUd%fP2{Rd0}(onPy&U-6lwWl4=Z&|YUpe?6*UPJb0eq;`+;H%{x!z4)3z z#p64NY3mDwL^cIPgJadbV%h9{$H<>0#v+}Z6Y4qWToXS`+KgE7oau0Iq|MplA$yCK zf1)gpe&YACJwjKH^yJ51ZS+oLp=JU8V3t`-;`@TlZTcx9IVf5j3K8{|^!5~1KtaM~ z?y{E@J2lVC5v-;V^*{r;4^W??x8E_*>~f-xbB4sxR%yt!m??z|O$}>fUdPN8tHV}p zI?PSKxEjYaeIl%JUMIjp+8oH_R9Z)~Jsu@wqZ^f}kjzj2J;~{#f^x}LkI9|V_^rks zX|u!KP#wtOoF3>bHEdEb=Ko{w9iuDVvT)(pwp}r+l8SBHPAax-+o;&KjfzpRDrUvD zzg_3_Io+rGbbo*Exa0oWV~=FNYpr*#xh9`Emvw|r_#71r%wiSTNPV{VI;_YHxKD(E zsd6{HH%2cgp^t8DRThWG{nqT%>Y7ZJ?7LBVmqM=G8f7TjJeDvFJ`J-Opj)p8{nqv& zX^F`fKT(4hj=sFClC3M4MdBHk9@XD{a0ZYUuXy&k# zZdFnl^|Nkg02(qM<(UdPOvnnQVQEZYPI}p7_ESMq7Tr{CcFFs+dnZ@A}=&nFhv?>ljd zOw{EmVRqUPcSU0hg6|RC+vM}+>vtqeYsId+9_HIpu9`XXR$S;NjjvpurxdE`FqTQ@m#Or$Oezg z5iZV-iH+gOEtw$YJkVfa3gN-~jJe{`1QsFd3V97PIJ9c%Es0QH5u^9RBS`Rs2HE+y zT1(}*GHp=KJ3Oh4!h_Ertv-Hum6mZQ9EXZ3Ta4iN5T;TsKB|^qPcHbx?RUloUPjjrfCiz;V~^bHjnX8V(J=#K>smq^j5V zhA~lW!g_lG($2_9HaC8HS?S}&1W+iGXx(qX__*vYuOd!$t3rvA$Xe3BS&rxGfEzzk zd{Y>7b?~{wCP`SVQV0}iz)Ej>uf+ug9ifH;*u%(aUng`_k0B*s=3y`1w}g`Y2>Q^)V&n@3)(N zUil960?(|0VpEZE5gU>tDh>vh!3G#_)9;KVtm>``c#2jxnJ*nP<8dh`>dMeSb$3qG5vO5YZgU!QqNp2E?JGgmW8iAUQ<)}v%_w1$8 zs6%_YIRq`H)+y0-pm2sr{b?S^#{1IZ&N=A#3}(%8Jcek8B76_ddbz({*ka4dr|c<( zbynon8;?Or$ipAGR2s=1K9&(J_=dm1Hus_#%|; zvck718q1XlQ;>ApT}a{sH?CoxYe#I|qlXvqlF zi`zt9`Po9s0Lb&hRr9o^9-WipI9Dw;2lT4Seh&cyF#7CHYCzH1FmXQlD3Vs&EgbyV z%I5T=VM{g!mu<~Qp`Y(y(uOOMA1Bv@AC1v%9nLl2&?=LeCFTaR_CDpn(0oDrP6Z>E z;|ohUzIkLEp{>e5O2!1;Xi>^zF&m>X+aq=M#vnj@u`>BPOB|gaercG+6eN5%?%l2Lb}G~NNe?mJt_!xf9L5{ zFQeTSOF!J>s_LluIAkQCorHW-stCxRyaKPEQ(q5ACSx`1%xa93Y7TKI`pc@8fw2X# zO*JD+-$AK^-iJ1~c84=8`X}ySKV|Wz3JKo0UvUtC0k()isrUo6ky@>5{Vt8%)_!VW zHUzrGj^ER}wHa-XZ2Lxdo-J^o|Nd50=7=*yNL6AUC$C|eYZalB$T~+cNvT@>Rh2#- z_qUi{&oinX(AI~AMIncq)YMeVA)aA+*I1qL+vCNpqoeS<)0MvEWgI{O9i@C8Siuzr zy;f*qVq~b#)930ZoVRhrd%`b)udkl3dLPnWync+p3*Sf&Sb-4R$Bnj_sI?ftqG7Z4 zjEpJnki@1MkjvtJEvM%yUgXzgxR#B5J=Prc8Yiaoj#h^D*156vLk9%LptlX@gsc)9w8O+^U`qU#8mGijyb~*l>2CS#WP;7c(a`; z!|%^R*w)*Z#as#B)PW)8n88#BC)KP!!z90RVaHU>^*@rf?|w8_E*;j^V|M{`-g1Z|PpA!!i9+4C||A~WWzn)4LlYRl#mh}J_ z0`Uc+v5Z6iyqk0H9GT8NQef<c80r|vg zk~Jy_&ufEMR(T;>C3Zo9r!y+=TL&I!h&ME;wBekU5^D21H*t)viCmlCfr$F;GutHi zr{4qL9jbo&^mN^eUi-(H;1Cc7Z!eExgmUaeM6-yqQY`n^*Ql6b%9!~sXRB0C2pv&v zPRHK{2Su!dHcw9A%;3O9MMYcM+XXc>IcFDaY(Dbvv;6c|LN(e16(S4sSQJhX*kYaR zdG>97X|ZRJZ%{f2smgW_Ylr@}OSm@ZTqrjuW?q#eQI*6sL$SB0G`)+A(^m6QdeV?Y zL%pTsnhP%R>>M=(;*{2w+=_SR4aG5Is@jIvRf#&v_*B$jtZ9ubdSfRH(8q)w$7bJCyZJ zqX`Q18R6Tk>xYJ@alK5H4uK5;N92N|k7621mBEnx-vgoCY;k43z3gh~G?tH6AIhF3 zm5n9bzkZv=+2a;(NHeo$IeresNX z@T=#$Q(54l^@5g0khI4qF&YjsK2EHlwR$BUTnRQD#Vec>@5ndT)wf(y!FlvQTh>6K zDPLGd$%Ar?9zOzZ21i5iyU}DUxDP&39xK3a_`FKP8GcS}rfcR@FrA5Zz-rIIQ^}wa zB?7j+QK`AN>6c)E@5yQeg~ss{i_?uOTmz@)d>Ok!rxRx1`Z;VN+#2iE$tE?WGz9vU zGn_clZ}z!a|90be_jK*JQJ@;3aat!bLRrf4x&NMA<*gA1LZ*t6+$SY`V9QWdc+qc- z(P?SFhIvLL@*r=xqXCjSiH?3z)tt9%imC5}y?*m-m#Eo%H4THSgksPc`${;XVduA4 z5PJfXJ-N6R>I`P8NJuM-R5m1o+%EeBz2P5?z)s??)A>Vs=S`BL zda}4<9H}C82M%b5m&wETduc9XKYP7-bkusOx3GocJ|IP}tvD0&I~{^a<1QwR$)Et= z1sg;*G^~w{J^X&9`lBq-4l3#U{As|Vm^nA2DjYR!Q~;5a=FNB3jSjiuouL>*K>E@? zmWY`dO|e)e2~t-^N-DAaV|aMDe{nGdpoU_X-chAO%`bsMwo7gzojz0?Dk-AI0qy=9 zO}4>U@9e?s9BKf$RPPfVXAYY5-HOv01UDW0$vqFS(G)md_nnmI!;0Sc1=Et#5!cPh zSdMnUm3o=|EH9RfanpmrFxHZGOR#;?al~U}M35{!e$Q85>kG=CfnnQKFWeOLJ#vY& zmC~qo(2N9tl39Ve`k)8xbH8ZrClY=`)NiP07Ztj?>yrr{-es>Nm(bux%r-Go+@iLN z?_bT`mL0w?&&T0m`_`)}SJKo~jPFQkwHz6E*$GZN`Cd6ziSWPGilOO7uJW7)66lAu z;9x~>lk|{8J;q{Pp?M#@n(rLj8S3Aj6W9&RLS*thD^L1HpQ;#0S71ZuOZGKtmG zpcx=7U++6$vkG|85}pT2zMfrRAX2fYRkjJf?r^8Yn#SP4Ze7!?^CSh5N>W`j$$cJ#85NUu!Ay8u^Wo@ACLtEXI%7CKX9o0r}QVto#`d&NOa z3kF1ZNTLF&VU687o)!!e<_l<(VYY`d^CfMNcRFs@Y%#=z zi?t%v>$+utMxS3|taT$gi(hshvyCTv4(xWeH0tAC zVlgCm%8kDVWi!78d_%!e=oF5nwov#^qnKcOD`y=n@nW;!7>UDzVcm#3hFDrru*684 z@d*=He=;T0Nj4+DX9Z)5^`o%e(GBwTW>vf4@)8Z0@Rl~kR-oIwyGZYWs zzPoYvq2FfFJ{kLX-Bxrp1LPOitjF=WcQc=tJRs^?0wn0hO46*sK)5~t=>e!S8UUc& zgbR4Y;2Et~+1zLY0ho`??)NuE2A@S#VM%4-$L+k4oEDF>^?90>cd2;=;%o1*Hn+Tz zR^q$>f~`0i=ohXw#1~nc{t`mgvbw{s;b*|3f~utGT`tz!W}#&(dE-W6v&!7ZJ)>%v z;$gKd_FE(Z`8#!A>`Im3WehHiO-+f(Pne>!FGuRumrLO+9f5eeHACeGzSLFtsD5h2 zR$pn&Q4ppG9mJI*@829R-3b*d-?*1t%xl?ZYD35j;vf+tX$0xCyG0>@;5oMp)wt!- z&npgSQDZ7O8Bl~mU90IZAN`Ir6=IT!!?=K4Nw%H0<**G`$E#W0w%@Ur^47JX60dO? z7}((*k*%pY&ttC{c6r?&;%1%Wz<{Y2#l?7L9kbZbzxy)tBrBF zxx`gEo#7ka&vY9ve!RNKL+0Nvy7xh$CQY_GH2CoO4)Ss2)I0NHWf**0?6-==3(#d?($YLgyu@*K@~3eBxZ=l9yu=WPiZm<;N3gpF+V8+Af^BwgGunc z$&3yA?K^-_`(RjHt_Xqkzy5XA48SVdT)u!oLhd}DcZ)_~(CyZuXf#=t(sL6N1COOJ zqzp;RF^q?xPQFwb4veBhwK{PVF3`U#n;oYmF-~}W34T$vTL}Hf*uNX*fN}rCsqxVR z62rS7H)Z9oFE6&2+rlj^Ekq@{^1Oe7M7EmeH8&FU{CL}7l|Ge4DnWGo? z2VH;jUH@fafUg&E066DGw2YReC2avDAj|T5_V4eW*fd1joMIu|Q8&!|p9raQwOBQ2qbV!F(5n)XWyX0;1nsAkop$LHl}c1%E>kPdQ*8pLfJIpR){*M`>R= zq^lKdeXsvPK>&)84?r7FTNE|$-;d&7H{%c5^LYcp3&h=-$O|F=m8k$v#v=YwwvZHl z%Kyr3|1sn)>o3IL|6AJcg5Vd`8m{>9dD^J4u(5LuhoUKUySUI`g0y@NZvl9=r5b(E z?d@%zHbaA;|H;5#e@Ui_xS_*^O3i%Z?`aIXRm$ZUD5$8l&Zo$|N-QG`~J61AC~GwR+jR>~l{-Oocv(uy-jvsUjDo#A_X!Sc6-lR{4Sa%?WDF z0{yuKF}M)`nEg+FvLWiBkJJI392pT`mnc;t0l>$gp`l}o3U@a*iMp=Ef-V<@)~X8;xA(9oGE=9?oZ*n1p5mQhE-&=7}spsiSA$2PYxcmzukW_LZ+i z^p;kYxz!^v!!9A?@qhFF4_JU4;ug!qOt#M(m5VkS21c@x1uQHqpp^ED`XDyIGkb+* zn>X_lq`=*r(&aU9Ie1>N(O;ciGZc;cqKWCl@QBUv11ON!BNS3rAlE_6m>QaL>jbV}q;F~&XZb6v zn?5Q1-yRmiUx4*$yY+$vh^(wEO7%K2K&Q_=l)U`>EdZ=+wpg}XBy2ShKv`T67%MNd z+Ubxif0yWP_{ozoG5&6dGqwvN2_0>jworP7h;>vZ9|IdAb`*zh{KyZS(Y>Ww;9zU* z5cMc$4`y2eE$rb$7Q2dYgmajj(Ym5P!qGQ9ZgC`(ECP8kCIq1!xLYeyxP>3_hlan7 z*`4Ju*jfN*Y5jmMoenUGkU3baZSD9Gt-N8l+91r>fKE3MAAm&c5B#b79rzTt&0vXw zfbD_}e7;O|ptU|__vLP)Dz#n@*t~sd_?kEJ%x{m=bN7%PS2nLc-MqDdX!lIqlShxt z`hh11Am~<&G8;V4l4lQ;1|-tH{Fb-=cWnkP0T5uSY?(zxMF*>`pURXGfWpZbQQrwDmlQcP!|!SnpNQSUui!bm7T{f_5$@@Ru6Shb@vbYSr1R zC$N4rv%onuUhE_8)ao}`R&PjlN=iB?thLdy-s#ds zt!@Jo_Oo05*K$%6lB_(NY67f}wspgtgpxm_2i`oWmh3N>%g~wyc6U||=C41&r9FT) zz4I`M>T*ZS94r-n`u6ITL#Yj`%{d3DprC)OrM`Z4`Qx2Y2n@07D-U5`d$TXe2Lws- z`=Ju=KKZQ^9@;yeaCajMQu+}zkC?0gb#tO%MC@SxSJAD9^(00lyJG0;&xSAWS-Coo z8tNM4Kz3O7-=X@k(fZaC+BYq&Lf_w>fcuK+f)(cc{;)s(LRB=O-w@d<5rDhU-d>;k z0QYHX7lk0;`)6eln9r3ErxcWyh8@k9M_7N#V6s`~;&Qtpi}4udPH#;DH0)*`(5}8j zT0EY)D+aZKb#Of6gqo0Pda#}jUWFYc9!k+|2&nBMCwN@rS929YU~dfvXtfFu;|1YZ z19h;ePricFdFpKxZH||4X-;QUkcec2+KQUv*c+Hm?URD81~By5Tz>SOKgW7O%{s-W zXRrY7x;t%aG#FKP!^H>jm3{#1fVr>MiI-@glmv&xGV#OyNIs^XQWV(05Jjmbmm&QeDNvrbOYlI zp2shurNxO=gC)lydGx1|h&!_-9UkcQj!OkgYGEAi;j2&!vXw$EOhRTfC^PEuC>3n4@!lcm4^2zC ztcYP)X6}1b4AIxEMJQ_t?Nv<@Z?V5)Q=!!gyV0+##Lt+n*Y#;>M?<|wE+%={!mrS6 zLm9Gp9vwm?#RXI)qTh0@<`jwvKPdWGKAXUI$Zp72?q7>i z%io2`bk)wgsnt$wIiNS_gv;Dhu-BdMKJd|WEr;YRYa^l+RyD_YwszPJEHILkvC*Mt zJz^gjc@{+0CUfYCZbd#+!Y}3_&vDQK|8T_2G!=n%!X`%`3V^EgewMKWR3~U!4Yn6{}Mq|IlJNE ziH&^eFqaawv43Z}ir!JATPp1!pXnqM(nlGj;=eg!l#IWe7<=l%s)*IKHHVSgt9ff{ z>zd}~p?uL8ovcInMM~O;J|WdM*3aTMtW|+s($M2yxfQ{{9g)!Q;Es+nQ+;UDz@c_OK}uOlFpzIhL!Pz@5yNS-wWUQ6B;|H(I0``KP7fmz zBC%d=L2%#{O{`W&tfyA(?`I;leOITIXh{@-PN<_iu7W8F3_If;uaGDk#e5bEj}dW| z`dD!)VK5hYzMCI~=>knrX#Q=z6@)wzFR&U?28laTQ-62&kkUFYs%8jr6EhA7a~fUg zTEO#az7T}F5~oF$?tYHm4IJG#{*w&5-t~~HSO^qZ!V#= zUQMu~8^}DQgh-2?3Cph&Fv08}IRw^v@$Hsc*s#j<0p-cQId! z*EJQS7`?x;W14t@_Scc9b)2!L_Hzk!R}U0&lXBAH{6K>-BEgWti4k-m7+$$0;K8Re zPZqv+&Nld&7iDHdWqbRg|59rU>@S3$=KP|fLvVRPLN1jRVUpLC@UxQdgC^)h7H6Q@ z1_Kf>=%;b*7u*aX#(e)yh^(d7k=_7NKwr2AMA+R^I!QPE-U{LpxzfDUjr1l4Wa==O z{@oEpyK{M{j54SGjOk4Ik;aci{%}^DH*tXXiGB-d?XFC2J|sF5IGY(p%_2CfnWLeB zLAG{zcJp}@uzSXvp$C(J&xzjI{e^nTlNrDQ5a@)W$*YG+5sac;#d zhfttz#hJRp_$NNV@6WHYwW~-hLaew77GT+*Fy#yF(b;WA18|{a%@95fQ4edSgK91m zgCh!k4vNlD#Sv1HkU=l+(Ngux!39(gfto!IT0Ku`fgwpG+s7Fzi(`jKcSmgYI_xl< z{BTi2AQ1a%{QwaLK9XD~n+ zE%qBH^G;xp>56Y|bQOFBP|1tPC#?$m+p>MWp-!_*`?o6UnH0oSi%R=u>Wf@#wZiLg zSm=GZnQ_wk+nPL>c!1;5n(=)fQf7j_of$$vODls5!JnDjzshL5d!0|R6BF@tY;^zBDz#zjM{M~?aKwV7X=2%rR|SM`4o-3=NIMlOm1}q# z3zQ59H2V?mhz6u{>HLl%iA1AwN%Sh=JFF~7&0rM5+xl`99J2j89!m{}SzH@4a!%gM z-j{UCWex?hp*?<3#*Bb`#knRCIB5DpPc7ek&Je>HH?*$oMySoQSY@0J1GXl5uWxVO z%4c>n{*Y|nYRHkwe-$_X2%=CjgLHVtkCi5afG|iNf>KhDlN+qI*x7%^$H!;3T1KPO zXpplZ2gh31Q6T9#|L953@q*yy7G;WDBLOFcLjwY*u3!(66$WlpM?3CK&MvHMS8TV9+F}M&UZ@*9b9VsOn7;B#+qtDZ31@>NR zN>Vy)8wN7A(4zd;bLj%ZfN?4=F0D?U>noR!m2iBvt|a5MC_qh-fAj*lLBjNg zUB@IGYnN9`>7B_g;$s~oTn~xaH(R{V5(ynUAz6}}g)O3KB7V*Ck)3XgbA05PQe`0* z$buOYBu}y5+ttEVeF@e!IUAeZJ974Jga96;a795u{De!IcufoOJ_~Hmp5?Txrxydk z)@qGS03i~}pH0`lIk9!YW6M)%yzpRl7(-cx8!!eLT|l=3!2VzGfTL}9Ubi++-nV+3 zMF9MlVUX>?@IBsfQ8A6!y5}4l`8md&XN}eRmDKnBZfam|(MY^ycEguM&odOySF*QN zXQ`?}yAkSxjn+d+3r~Z06+B)a%;ZAtOQZHdhVMh@{}$Vu0YrAhQd~!lPgk0^PEKCp z8~N_f*5VQq6OB5Xnw*m#pYN41`|4>uLq4s%vxn;Ieil6EN6oFbMnxgg5NYbgl?|UhiY8f1y#m(VT$5J&CR5^M+c7e)hpO zBRWC0bI^~z*QH}r>Sm4;rbA3-I-_I{?gGC##c!93bu6Z<9=6Fq{tdNi5urWlY7Rdk zy3m0GBQFHbgnfqb43;q2xx3t9_Nzp9vG`)6XZ9mmUxaxeka%|0ce?&Ha&&PC1?U(s z*2>}Y#+Alu6P?la(Va&xwpEO(#r9~fbUZ@GLt`F2zU7|x!#;`3i4MfG!QjDE0fzhi zX?C)Dm?p)&{z%#DRR>AsK7mp4n?OGi_{^1*Ha*?5-DjzxNa3$#SyhHml(e-3v}g^scXA8!5m5!bz#vwK z@?)_QG3Z#M99i_$i^xTyO2f+2y?a}&ez-7vjZgFq9mZ-|Fbk7WrQZsXRJZY#KaWKH zx3iOlD)z2^ySnZFX{E((r$RMN_j0PBhkv8XYwPUnEnKs#4p20W0dPsZDy=pgNz?NR z;ksqi*=-E{mv75^`BtUx zAKsj_uDxKq9B`HFsr*d5T{bb%lCOV$U07af&CxRRC@3P^T26|9iV7WTz+h~qg1H~v z+iS-ZBv=cW{Qj)I;P7)E-1%hb@(8!{3#^%CTx={78%KDz{_hDg${P^HCuYAo10N~E zb^fLYGjrZR9M*5+$lCobnQSkg&5^u+xI-1vw35u-quiXX^+y3q%JuRnswPtPnyR%y zcyqa-SAG5}DyeWO0Sq?zrr9rzIac4m*W&yIGB^r5riTnv>@vI^@!Pc5oRrk@2Jui; z^c_R0U$u`GG3L5OzfJ1L3)F%@Eq=3@rmMQAH3+@S0|G3b5(a0y?&vynnx6Y3mc)_; zC?DF45R{+psh@MeRZctM^I@E(yTr&;+;roc0T&zsB})-f$x6y90O|We5#edGD|Sky zvDLUS4azi4REvzxYCmdbECKcD^u_vom4X;yYJ(@44co5ru~5hzA&_ zHoU_LoU7@r*P&l5(g!U=G|M%bfuc=I59}pSOcgGA0-j8=QfOcvbUybdkgSTZt59-U zL?azfPc-vuq%r32Y96Ve#w!?aE$H)@;H$QTm3nN;U(L(wP=)ne$i+|AnKTlt`nUEP zvE+c}90c!ZSv+3htq%Kn4*L_f4h~~>Qh|VP`oE&ak&)wuhvOpu43Ea9^9>w1O_!$} z)QJ@gdx#=uHTfkcBZMp2idGYF$1-)ynoP0Ox#w^CDRl@a;^?p=GeIj*lDw8Xz-;HC z=qH+KQBc`9kCZD*27Z5quvh>j12jONC-DW#F1_ZgI0PrEaw`J@TW(0@laLaq1t3R8 z%<@G`ld;v)OZ_2#obDEmDdb8?1!L_=tbI_-qrCqPxYu+ITlKGrRB$=IC*l4?QQ*=K z-{L<=GFmLq0t!2D0X9QG1FaNXpv(Q4_Q`6iq7FrrThAsxf&AB~KO=g(fX)ulf?t%t z4Dtk#Q(^;KQcZ8|q>Q>>9BO*IIRc)wY|c4aZc8>hG!UiXHWt~b;zNumCV zT0QM`8ydFlXmlh>^jDaXL!g%EKS}Y6sFZUcht2Zn z=7Fm0u4Yn!zP><@m((jv4FAl6^&CT==suFZaT0=LyaVI7Loi-yhbTYWM0}IUlWC7O z-LPXc=5`PMA=qwczDyskTH&|u)fIoB3z_^!EXu4-yzW#F$HLYZ49&F|O zp{G0#mY%gd{Gj-Q+_Kay%S*ky0}=rX@J_dN%nfl|dc!-8L(vU#C6fPil??m?g#;)O zC=1tng6e9;fT;BR<@B zeEEC{VLbEzVcEAs-Py))b4vm4ihF zr{;#A7fp>6@B|DM^vsOO+GxUs1;RndMV{21jo~V$#}S);=8D>00hU8XQy6qK4TU@r>-;kd=tkXZsr{TK zA0qzR&gv>3Xozn(#w5t;Z?ji_=r~V3K+1*Z0($f8Uk%ki((iwg_E8>??0RukQKR_7 zoclvt{c8@f2NDBN3;>!9be8oOUjEnL0EUbu{FN~Ne@pv^aR0x8Y7JM0g;x%lXfVQA zWyMO=*NHJ-|Bgfc%229oGz$w0fIH3vt@**IT#*O}qH}U`R4Fsn|2H#=`f6kCU22({ zn}3^|V_pQPybLtGVaXign0DjO|C2#IFacdJwT3@6f1a8e_UI5^roV1FnW4lq{dW!h zuP4CI^8-L#BNX@j0{1%+8M*Ob{pzqXH#djbM6X^~z)>9$0XqW>qV z9-w;48Q$pk8Jfcz8IU|8VR@up5GahBiW0Sn`phIn%b~4I06;oRZJIav8V#LaNiGmo zK9<@azAy~!Fjhjq{p#)h$3-xZxEPTindko5_xAI%@skr1{`K+tPXRz6P(;3b@EAnC za)aM%ef^{bl{D%M=`@>G&*esl0`7BMbcKY#EJ$4CT}6R_!I1d==A+~i1Plq`3d0Q) z6jJ>qC;Z1ju&=N0$FZV<0;B>;#Sl=y6u-^$A0J7`fO+{V=gU=TK7Vd{^)#KA8a_lwrN=-KE#(KLqTPWapDe_K)sj9;BcetF&}y{sTo%3`rf8PFFETl7a1-x^BIt%%s)FU$4;9EwP3W)%b!P<^zQOl@Vi zXAi4%*_)F?#A3N5r?0PX{oT#YZMn;<-BKyA@ZiAI#S2n%iJhE$5Zn7EbEEy*kOXNcyvs z^VPb#&QXVlhvw@Yt(r0T^(phyIsBlky!>D(euRHdC11WuG{D}Cto%If;6;g`^hh@c z_V-ehk%?ZYP~UMr18kZIu4@3+XO!No?dXUI2T@4Zv1PF^-nWN7d?&qL5S!&1{Qz9N znimYX8jGg3Q@qd1Jq!L&@bFFnP#BDql$298-LF3}nqQmF1ciizf{Hz^vQk|Bo&ouQ z{L)B&(dGUd#~xxslb=(G2Pk|}MVG*j${nALr_Nb&w_<|2TbvFvK!36`Q!rSRL_BUl zIBFLHvE%V%O@v@+7(^0-vF6KO=Zf=cJh)uPe#1bz6`6pDNbqx=p8tJn`q%$P2q2I~ z8DBs@5Sy>k;9nF$PFMWSD+f6i$~|C6(<8o5)Y{a=LEhC(c-Vw=v&K|P>j8tM`wyo} z9Pi#kK+(#oFCNg@_{CeTG_~fVS;B*PsMk5z{HQbP-VAKUJO3}V2LfTy&3T#kweWt9 zQG@NwynXJ{1lr=mKMz?xs4J4Cc3bzlUZMn+Y?9$uCdVD9vEP%hT5cH0Bp3lf|2*0& zLUyteT*k%V^f!$5`;1D}K%_|2hnlEGjMU{L7<@Gdp14MO`M{R=V3O;l5hpECj5RFC zWh6h?Y2{+$wIj>+MiFi$L+^NuE$M{=#~KY;J-*azMMN4B)*c}P8uti{Jz_Q*D~dD>NyR~ zo~0u6x@n+f%U&Z`BG&|`r^}9&QQqhNQTb8f36#Y8OP@ z+}ce&AOC+Q+U&fJW~(_V1c#F#sMbrGPy6lxHtaw!t~o*gCDD!J*@|M_hBMbW^Bb zO6RZ2z?KXw^;-$vZGXSehYuf;67si0Xo>g*fc%covEFZ_ao&!!Zl7ntpLTZcZw5Jc zZhj=jpy8ekGbbC0JMT^QFMGE1PbkgngjIA)Aq)>+-`3>T18DvXwX`dB`6W!c&SQ% zt`8PhUMtG-qE~2k84{b=jPA&wEj0OAq9arQ@*)9Y#YLvW>-;TmcFsB*JWf z=gHf=K7ONQv@bb5Ek8QCRC>}O;Igvvc`Pv@vs4>gKJDg*qcF$gon(;Plh=Sm;l6lf zhCIyZxSZPS6AY#LhepbcTblADm0(y;? zwHWKSqD$@D{!}IomR!H*$FI-T3+akJ_RZO;Eqnnol*=}p@hS{cfD5ry#}+M>_4IP= z9Zru5DR`e$Qk`VqrL<;MUlB5nm~(n`@{EaRzcXG3{z{M8b@8}=L@5WTv4y)(P`|4#C2CBw*wgi8q6ML z8bKxp(VAz9MZ)PB%r8OW8l9G1X&fsah}6R~H7n=xDyE;jYBwS2bnhZWcpd9C2Ni4D zYo5dYMvd{UA?tw&thJ_SL4!c0`cg>d+dS46RZJ{AjO?KG`s|hMO%5cfu2rw&r?oq6 zFrH9-Pn}ZV7}qSc#%x$f4BNTcp!$?qe6z<@sO$K&`of)g(&habgIL0*IY<>eE#>8!lh^UWH~y+8W~O~)zF>uH%oILG^|fa7cc>Fv?O z?9J>lGyd$4NqlgolU7Xh4YF}6+{%>f*W$LDP8Ax|`uRq`#(|-)+9R@W&w+?sX1EQu zx1ZPU&x8h8Lv1HLdK>RYHy9K$mxa#e5qSPx+yIV)ldvx`l+&J!Jw6oCrqpP+BBHii zqs|-8z+nbKu{E8cTq(I<$F~!17R;YCk_3-v52ovZi_G5BA}(KgulBkv1`yvJ1i%Z) zvh@Z;(7+KT*frkhd3_$A&Iqw#ZZ73@MA|qj`341eg+?X>m46i$49nvcsA?VV=XaLl6y2_5C5BktMKdK-V9D#f*~!b_T-y{XcgN{ ztlqtQ?jjFh6de>I-yigSEx-Rhyf26}JTjsbTt9W;ql=dtHv7}!`f1~K$%^$TC6X<3 ztvYjN_EYAv7aGn3Iv*@m!Hiq9#i&4pjrPeC8SU2(;4qR`K zR|{I6kX_bt)Hh!9vN63&aYLe&9AC^h$m!LZdg@n-tX7hKf(bQIkhf*K6q$@rbd)|h zMJyhZh8(Tz;bt@@%-)P>P9FCgE+6k?XB-p%jhb_k(>tfiI^G1oJ6@brgk*@26vz>Q zk;>#~99=eoog@G7q10#$rb=Hfw!|CX!_?|*-Di)`)ve5$r`;>5@z}KbU?9YL+5y%0 zc!|E)bS$Pm>4+R0DDoQ8?7BIj(cB|?J?$~S z%k#w`>UmThtW}8P9#BRVfw-<@Ap4k}?(-y}y1}J%j5?bc>36jD&b77;M(s}4Z}#?1 zevnO?HPcp!(G;6Tkx?L;<*iZdVqc_b{}y>;wkW90&@SXqEIT`q!G-T4p&R9TBkyF2 zQ(1^QbnvbFeT7c-YKX~1yK++3OGusSnC0Xw_sLOa8f095I?8dc^8Vlrm)^Npgjzk= z>aV)qZ<(sb`_+A5aFAp6isSk!9;w8aPfkuQ^USb%7SrTD1xNt=EinPyj~az74>*vz z4Wg{H#kV+zPhEz>Q%tNT<43?9nXKQ(8J7_TqJDOa8WSI7Yd5aZi3xc=z1Wu*iL6!j zFo(BHPAh&B-T4T(jrufx{ko?HZuR_b?c52wXIVd`>7Pc%UrMGFOJZxF9+{%6^DK7- z|6*^L2LUWX4ZC!6CDLPepsh_0IrBNIJf`1_gb>Z1A$2%*<~auU3)x-3xscu1Vcve?bYVOqM$aN}3nV~Azy7Stm zee9Vg)(04IIo|(2jTlF$DKC4+Rg)?dfbm$e1>)`Qwk&{-k-R3Q`>r6unV9L7P0GV@ zKIw8+9~1K*j{}6#9yAgkrEG}d@2@W1QzT^nCMy6S76Q@cbcHO%(S9R#+gZ~wdT;X& zP**#wzu2g3uE5DYT&|oFB!3!Lc*cI`6kU0^XE;UYs&8fET$B1doW*~oel$IB)(?)h zGgj4zKd3Wj?)QO4^{A!3dR~)(SE;-@V373BF@MR@Mt*?sY}}%s7WpT;sS+hq=Ap<5smnT8|=VQp|7tm0u5f6rm=`?^oLWI*zw)X#A zE#TXxDIok{+pua@h582_O9nuQ;g=7$D6$smQf}w`ZMsVbR0U>{|FnexUX9=KFJJR+ zl}6)FQH^&C;?3V14Xmpl^TZ1U^v@S1^6k+_zTl-bDGi{wyu6f`lZ$k)f z87BmVi;YqU=C2YO{a0v!pHf#>m&I(RAD+Oqn5xb!QlbcOPqjJ^EF&`@VBzy}8DjY_ zo1b$8mezP$U~E-h#bf@@*Z7U@l-dCQ;p63ky(J~1`*pvnme8@u$E%f{~y z2vSVZ~|KMX#=h?FP{a$1(dvcM8RtW1_iZ}vRQ@~ z1Il3WXhHY>Kla`;s>y8&8&#@+h)UaZL=ovKy`v~7z4xLU=>!xAy@-GX1f)v|p@-gU zsEUe!)BvFdke<*XKnUf&?0vT4KF9CgUw4c<#{Cx{*47D+l%cJD(cB-eV64RZvlcq9IYlmy<*s=1GVFtZ9*iWckhh__(QuH!B6Z;{<$A#>omq z6XelnMRCp0Opo?K>He--dV2b2jRR)@bpR#Im0h|xq@JwZZcf)*nis$9&1b~^X%vLG zX;kh2>P-u5$h-j{3QeW#&$EYz4R?oue$*2nig-^YTf;-q{gzF`@+Ii9r?z&q)Lcwl zSszn;VdKyRDJZ8@b5(1%P5Tg})KVX2wCckuMlJW-<;*vI&iz*TN>zjt=0;7oy^oP* zOEmGBLY;~Fn=ZP#v14^0$TEsOXs!Z$si9qRqDW|bh^zF%Q;eb9z^vJ)x=L@y%3x0C z=PlJM4MVaNbWff-o4`L@z?9a^3~e|g?XU6_W==- z5}2Pof=muAIkDjBR7<<}6x4=3m>ZXK?XI-@GkINPV_S0{GHGd*y4=+xuNkJ}bKk$_@EtdJtW0qsl>}X;UzO+AC4(a4^ zz@-A?esqsY`v`}sqs`s@3womYI|8CGu?X1kF`Ks%?E}Wa@flGqXw*IzF^JrtPPv~ zt1Ty;?0N%|`%S*048P5X^>g^35I)h$)GpaxvN zTFPKzIPROf_x7M5cD%L5cB&{cHu{y>DLJt}y+*vVO~lr&KhW!H0;>W$nb=ep`An%v zNJxCvm^WEys3Dv{jaAysxc8fwW0-4Tn4+x-0GQ+%iP=Mm5Om}tBzHiwf#7nJdPkz? zoOnl2^-io~j7+<;pp^9;5*4}wam{iE-o)jK@bl|KTAPOLAm@eSCgfvKIeS=~AVcoD z`c*5iXVA?d{mcJou&3fg1al=XZ%uDvx1uyuuZH-rwLU}HsIhPzi`wKFz%u&c^d?y4 z7Nj&BgT!(B;#w5YKRyQ=%o%ttNF^Yq_960DEJs2%kP~uIQ zIic?1pwJ^rpEp)-d2PWc>J(0tBHx-i+gBaVRLObE=;(tMy0%d zmYO#GZ7j&R!as(w+7b4$Z`z5LKUs3&@Ty7_Ws2R6Rz{vep5_nuki7d>*+gESe};BW zAAkL_K6ynee~UewvT~j3oYpl1Dj-S!W9>05Sp`nY3C*w|51_zU^g8OW$g5zoXE+2j| zx5Glt{u41vgrXs7jSR#&jNb?Pwg$G^=s?LFAsXv(fr5E>lrY|r@jAtI!!sXpu9f#u zqqq+EA5B3ne2o}mBoW0%fyYf)cATvEMizpDiE0Yf^k&ucU-65B+H(}k<%0*EuU=X< zG-_wcExj$;-@?SVF3{hw_Vr~s`mx*(sf!b-*H2v*>3FN<=KER^HIOELW=dvv`;CUf z@_I;lS>m0(F6{c(Hj&)pywz!&wOUm{4g4K76E54f(LrVLId8w)PPNNrVR@F&fyq?A zu@Uk?hyuydXL^)N=bkV+b8gFA=lK@*(c3ULl~y<0{hA@y$YZ@LsKuaUoy{j)=$-_N zA~rEA%u)iX?>TFi2V34(ljp^Fye-SvHC=vzI{o^LNLPv#V<9E3R4l!RRKuLn{zh07 zd@4Am%AD0>k^<@nb4|XEsWi87a4^p`7CDE2hmT>`RoE7jT;Y1NpPW*|O5he+EKIzG zc{9l@I@2ys?)~E{o;aedfFnB14gncoHMzO>;2OmRPw3R-?m_ip8A}ZpzQ}S?)}-|6 z?c4o+78Tav^|@vIx{iq3Be_KNbQG+H5Y+QP{y!a&3oKPrW-3?s`9UQ*qc7S;$v+UB ziEoQ0=2x!nAt2Ll7JKl>%WKUSsuD#FSNh}cDS4)8}usoxL4Hv5`B7XoJBzotwI$C zP8R%{%xy@|^8uj%K4ui^^5!4#%rcXr%2qD}z|LHQMQyVyLYp}3rdpafH84)})=r29 z3xC&|g#f$`C*e8mk}XoWm1X_5K(SO|m)-vSp_b%I2OdBSqq@($`NK~V4+2Xbk{nJ} z;?PKeQ3jXkk^mW8KHP0Br*ulbQS`g|;clh|FRlDyzm0sKgyrrYo!AS?)8T^ncfe1M z*yGRjC2R;|PtfltAOr*rp7MdQmunFNvLYU8cZROy1u!K}vE)6BsGW-g7Q6^&*G zT)%L}mBdcu3kuZd#Kwi{OMjqR0#_<7QKF=)L4b-fW?hp!k1BU>n(s=kceoyF>ippa zDW{Tz=hhnD{Pu&gwOg`3EaoenDdmNS`zV&s)Pv^7!#YW~(kq%0Ym_GhY>T+5+m@Pj ztR*K)W_^)7_Igf7t9tJtkxi>K@3g#U8g~a}MTfh3VMnRhnhS0${;@a!)aKICMoDAlke`5-1qG|P-AXj4x9j#fe)Ed z50bax%-zpreHHn8lWq<1Qhf#v{>Y!e<#iH{Hh zMw%Zazk`J3+p8$~_8zg|Ppw{arnW{H zl|BYiW1l}4nE}b%I5m?eU_+@w-}a@j<-MkMy6S5BAHifUH-T5kh)JmUny8lBz>LM){$#-kl)D4mAy(jte${k2R{@9Ve&xq&Y(d!!&IlXod*Z zv4cYdnwQkYj`wFD9c~RB(F*vay=|jvFy%VJb56Llf;vDW76IrbGmCW1dhH6`60i5t zIIsQHf+a>=_q`Q+&zJqTQ;4CE`w6bMg(?vvsOpKK>5l%0PuE8Bzum%GRv{S?r1nH@ zzu4;6WP7Y-LdbIJgcR+z)U28%Pi5ICXT;HPr&LiyV*;N}r@-#>t|~Cqk34-#pTJG` zSxvu9zw%MGF=LGjjf#!ytv>`0-!Tqk>MBe+45!` zy4Z^Q)erx63I|BeMhbC=@N)GeUcYVVBjYg5t*N*#fFlkTZ%esCGWbq9r2Dnef=P)5 zSbB7=9kH__rPus;d37ml$5cL5sGOa*MjjwHY;F~8H5)J2J+1yvD3#VtUTD#5URGA- zbZic3d>~M$Oq?P+BYAlLJ@;FljW(;vC11X$rE4_uw29@g%do;SBTyHSPt?yyER@JM zg;edX!r{)s`i73@y-!E@f~S#@2rr9{#De+rvS;n5h^UlR&fd8~J}ktSUdgw78lVa^ z=4+u*tlFFJb31*menvtkpYm0Js1@97afk*h8yo6a!E32QQJTa)~ z%K&g;RzC0p2>VxX420zTCsdg*XI8b}(qZJ&;6wm}B!Lh6+aQ}=GYlY^417;k`W0IG zWn{Sm0Hig@snU4b>Hl?J1AhXK{303v)B37x3Zpmoydy+cByKE_h&k;toF$5=1+?>3 ze+t`wlnMY*1rm{0#9%QW8Q^mrTf#nF-Go*P;=f8#p7tD&^d`8M|5NU{=7FWwT#Lu3 zYf7h=gv#$q6HtJ7m_tU`> zCL?;7tbgn+Y<3Iz18n7$=z>;HU7KHb;J>{+)+>F>ObdI)W{UzS8O=}fa7c91t z8>JDc?+c?I%ztcqKlB~xFMCsd>LRd#na`AJWhydCdzOw?gG|!Xo)a_amzWpTO!}Kh zxi5>$uQ30Va_;Nr7KVlUse?5fM(uyo&VKAb&HDtj0fkMW>W0brWsh2_kmd!J5fWcm z0;d3^ld#b->u$aK%JzcX@ko~gcsT5b=lQF^0Wr&iE(4iN36IVfXNyc~1cY9x>FEv) zC<5dctp^WYJJqj<&dtpM4!(u1zrTMX_}MR_`BfDpop4Cbcw`nqYQZKG$n^_MP!8^@OgN8J-@C zc26NV%reUx6FF=pOWGSe`0j0)^ciE%rLiCy9tVXKOIWDJIb#IKC*Z0j{x=7^kQHm$ zjBf2`1|!eu`I}ek`!+vVd&^W1&Yk+*d-#-?eqD#$dO!r|{zgjYLM|oQoT0ME%41Dh z&9K>g&|L>J_f9kWAr8gN$$ix*HR|n8GgoO?zLykk)6fQgS$t98>_Y2a>_L(xel}RZ zuXxZbfMt=0-ra7n17KJ*RKa&v3-r70Vv(eZNX}cu#J^1W)PT~?1M0=9CAMa)txf6K zvu7u4KQyvLFyJ`pgXa)&0{lY|rQEl^AdQAxz6B1(N@;Tq8Jq^hWydN>6w3>4-Xjt7 zEPXPhav8F6^AHn~Fj$6tgTB0w$wti( zqWShS$uFn;r@q%zBDPoT@!_#G8W_aWud*tn>CBb`Y^ z!1XQ{xh=xqyi-2SiQ=NX_*XoBy_JfWpI=Q&OUrvP{gwSEVMQFVI!#NP#g%DU?Juck z?ldmm+~pC{LEaGSxe9&GeqYk3zX8e0oFfl=aJ1Uf&SZcIlycJcZKHNG^>qMa`czhC zlF=!h&V%uC{)p{0Q7@Ivf2Eav5q|>}1liYFklMNFDXpxgrsw2Tj5jwlG?d}We^OLX zBYEX4^de+n=F??PrhKJWirtm>>qe{Hv$b!#%uzGLs3k?XyAd;$C~`2tIn?&{u*ddl za*y4X;3Njo9<$wBS}(F%0fn^6l81p-yT1IumVOT5?@#h9bdQKW-WfMFxhHY^cDX0f z$H!)bAH-B^AHq? z$8OW?FNxXvOc=qREh>Z_EDD8)*k-%#W2>{NLlJQPC3`PN>Is=`x~@I%bZTMSLfOVq zi8dK!R6~w98`DpN_ODN1gXd>Ho?R^>rchRilsl?*ymr^9O@-Gr7wx;WxR5X)c`N`wfWU0N{1xv;_CPJ7gj!F%l`+z=Wivc=>Zt3SXXC|eFhja zl&6*~nmx}W=vn%>l_VrMxc2PJ+1V!^@JwyqyhZgMk_pebG{X7RjSmIJn_V`NWjabY z3CPhK6QsjN4{um!)$*{K)bZYZk4aqdN6hCNTp~t!*a$>GsvWFw+)-@uf(;}{YOPjB zMnm?_^qsRVLt#VCa))WaHL5ho*54iM=kgOLK4te|)g_X(hOLO=x_QPb`$1*e#QfZ} zG@(1|TthMp>98sh6jsi|m zte-MS&`n?L9i8C8GmWTa;jZI(j0|+-x5)(Ye86L6o^p3aH5g?ohPxo8ZAUAY&bp`= z85wo7xA#3iOE}Qz;{hb0Fcm$rQjh9d#=;}OL*fW|(xPCm>rd+mqI z^^5KkKRD5{%@Q{E&IBr-s|2nEzFgP-KO6w&hBH*RSsPe5F*(njCmQ&Q$$$BoQ|1g9 z$A$aA(M(^|qWkSLfq!w!BT$9{6u*B);Ur~#!#no=kE#9onv3#j5hwK6OtJXR-)=Yg zDb17p7RqY%FX#M}Fmp3coPfpfx$;y0{MWn0X#gwzDnrTWf6MXYX>=~Ic#__hb$q{n z=KoF6>>>Lw-+?Jj-Jl(=bu5!Tv~Hr&wFn|H%O5U%o~fJRE#PyMz~+F89+aF*aX8_# zq9xid6<4ua)k(TD<&sV&W*2yi%6%-F-ae&!2mAwZLR=20?|Q2tZs-vULT``aL;BAE zUEmCX(i6gh%BM& zK2qHRV$LMsep5i$X+vZ{@_K0EHsjkf1Xg5j5?BJiTX>$&Vqtpfo8(yOCFw5HYK0(m zTTT5-I|kZmHqfwvm5E#0fw2iO+1uZk2g6?LK8GGEPN}hi#%k}FT#lJzW6r*?Vv;x8 z_w6mDqq}q0I=;j?ErX*qOpeX=s+UcM^jOD*N3+YygKG{)n(5T%UPo$ZK6nQ;v9k8g zFNYu$m6W(UK?>>hX5}D>k;GBGi`fsMY6e*`&ds{-VUq@hy56Y+JhJA$Hj`*t8ph1v>Mq@FHKWa0i8?CO`w z=$lYY#SYOTqvnT{Ce=E+r6ulG3mq_a6Ne#?-dIE%uh*e+_B?5x3h9E>#wtMaO$T@H zKJ6TnKKf%Y^85y?c8_d;i+O)Vz5b0VPr<+KFF?ULa~D*rQVD>sJl8G`*2XoMHDMBt z3RPjcTeYR+ahy7HL^&G1#+I)Hb&GZQZounUS#h-_Sh>NX*%2uLL?^;u6EQ?KTIODL zS-s92`j*LjyYu0l^6n+ya#8!Ws4E%)wes{H{Bpf9O-`w+e#>h7N8aI;E^n*(4oyS4 z8S0^~iB3)1j=SSJldRc~BM+b-8LOf;J#KW7kw}Z88O+9E1*?*~PrAlU)10`#ec#vo z-L}NS*Ydf(yzR>)yT9N+e^h{-AApWqYN(o)8mx2MVF?a#Lq1i$UHZVaDLi7xVsr1! zOlPpsg1ATWY2qp~S)f&nc^~nyXP*Q(mmsd>%mOm)TZ`iUI)WSBUz@r$;R#D+_J)}! zOB#S8R?=9SkMnc&xzHm97K3E`mcroWnEkN|=lZ!d=GzYho7Urf7-Ylu7xRlvM4U!% z?{1~C1$J8(A4z`ap9s)%&MrzSLM@ny}bE{?3dID4$S? zKaSBcGV-vou__eZ)y}^=#ZE--wzUKScVk-zunh%+nZ##mO_e zt=8>%Qr3fC(>c4R8oFphKPU)$eR1^L>AR=Kc3c?G@2SHZ9VR(8$NjF2OWif0s6P}+ zw-`KQoQo?na|3#k5~d1?=RgD+ecxRky;rcZAp`!b7bLP5%Ik(EGn*(+Zcfg)qP{)_ zza(gP)WBeTGazu4wO4z0!na00XVz}nz;)mo14UFEeV*Vv-%!Sg&LEGpg2%WE^fv$H z>8xo%)qb?qmR0lo@}b2RA7%X^t5t|7f}X;^chjobc3VNL-b$Ldo}wPQcgp{2nWkTS ziZf#bW9C9_QFo!=Omf+pAh6Y_rTx925hqJoR(z~E-X;8t?_Qj>uju_rffN{BU^}DB zSaa;m>>r+Z1>>?u(G_udZ=eAs8;JQuSV)D4`@o9#Y<8rZ;#G?Y(M_|iWZ}`GHIaqA zb&Q~U6TRS5xmTk0C0yoSO0G6N1KWZ&i_s`bY~R4{gyq3sMk9CPB%J+p=r94VQkPm0 zK5?*`kM;{>57t}1_XA}T@THvOSb$uUt&(8BI$j3^d_Eh`L;*$plx%NlM5Ae-#zJH8 za91YZVBb7{?8xn4S`w$_n#v0#=o+PH_;32QmcoQB@7nkYImf}xdX06i1AZawn_FtX zN9w~-7O}5glN0T$Y_K(zwYH3i+==!0E~J~gU{fr1$ggoXpcP1Q!ugXUA|g1N3QH3i>& z%$&_}o`7G;V8#tvT;f2yL5aDH*|hZB zXqAHjuI@NZ*9+N|YC?(lpCrj+Xv zxW2fL_SpbS+H{zV){ed$y)2(=KYPOI)}x!}?M#gR3Tsi?y55kp5he=P;DZblzu9yz z){iVE+?fSS&d+f83VW_U;`II#dxT%(ZuhcpUwa=jaPxNVy(SmY!vhGIdgpk7x0m5; zd_vT!dciCNRK<==g_X;{EUMF_$@=dqVEgE-*Cz7C523P*Z6$iA>=G>HQ2@eYoAN1RufH_UTxn*P~mX^IOsATujuB)dk zx;U+vIn1X}hC23VDBHuLIsQsWiBnJ>?|#0NBo1m4Ejc!eoN&+dZ-0##IUJQZhEyuO z^F2j3UloXskB+s+2uSe?!qAdjo~6S4s+Q*d506ILy)CyJlMa21`^b3Kh031^@$Wx= z)9-F&Key{D{QU!|u-%tGA(EvD(kAnmrl{jSb*=~R65&Rz&P_^oeH&HS6AV8 zDw^>3PWki$N*)&;^fmAVBl!*XEazE#P>r&-nni{^L%aBQdG>@k}#9N zu|m9!1G*r4)kj+!j&pPLwp;n1;k$VTGy&*D`&sF>n7Gs&kW|WARjT8zRH+|T_ctEz zKe)IYU|W#k%z@a6$t8&NQn$ww6{8U#-~#(A4KHauc=UYJ#lvpCZDxD*6_lG-NQI#u z^YwvRU&N=Z@1mR%ST4>L>C3t)f00+yq6vI7HcZ<;R$cLF_CHkq@|kz=2?fD<7D-)z z9q9(+^v18$43<7tfcUJ|*$;h7B*ljb3R`|TKXNYQio(kqZ8*~X`n4uR#{IB?GD{^h z*Deuqa`OIQGHPMh`ESaQ1?ox&IIEx6nmZrx=?qS0c^R7u*bge z%C~mJGuZavYb7?lS2=yglF!}>9N?RGrMCX>2=*wM>c`C)%cp{nsnT&QWF zhw4@D9hTkkT^R|Z8dLYe>u6eH~*=#gHW*w^yaS|S7&D)q4D0LUYFvr+(r+{tCD#5+G9n5;wGrD@8iXK1n!3Hta1Yv)t07*Kx~GP46E$ooVaTc4O1HGO_dK=*-Run@gt zosq=rpP06M_~jd4JNpD|bf1@4Jpb6*Kpmj3M(vs+a%GF0oR)6YmvnN0*LyG}(D1rmaVn)Tz>`SF=2Jg%^RWUStzrVABDYkfopo0KaN|G~gg<=6}uTh1y9dJ*} zNwu=n$ClJ+RsekkvK<%_hS5s9%;v)tXP{|&Y!g5(hCKa91~eH@kOklx?QY!-v({8! zbN-Bu2!C%Egs|_|$vEu|p7uBL5bAT}7xZGRi7s4d3&%bi3MQlEpL=$NO)f-> z0Z{T7;_^My>iXZ+8;L%Xgnw6W)W`IkioSo~P;)?z^af#@zK%5KiruMa3$r44)Jj(wj^rJL2eJFx)m0;2dkOgZyXWGe+4Nzt3G>Vres zuGC~o(>0bp>9wzv`83=Yr%;6% z(GWBBFH8EYn9nY!#H4?eD>mtG(Cn1XUf|Vh;l}61)MNEOQ9_Xf^tI*oCV+x z31qGTOcBpw^Ow8!&-wt*W6!NGdNLIA>KDE%0+m{KF`g7BNJto&)Hs2I$j+X%5+t|B zunqs&QD9J_@9hl-n#iSds>GjweolT?DaG3LGFDyd(*v7r@xoQ=uMK)Cdh}G^7;8vj zq(4jHV}uYi{b_Njf8c`mchGzq>TqqL^1&Phs)@rrOSFfoLyfMkDHB(Ki5VEdg6`!| zm(oGd($N+Ok(%c@bff3r!e8s@-s_W|y3>6(<5^#sJt{j=aU5J>JV=F1(u=TAY#Mc6 z$$oW&Z7~ON_wkATgHHt#Qix9)0z6jOn!c0FQ*)OeYyS5>&`mrcEvFsqV@f7IN6WBA z0&#@`u(IuD&1qVhn^5lxEfTs%dy~gUFu|t1kNg#mBe&HclGt}ca>EE!i;2T!DRncS z9nYHU4I;)d%_*5yCQh1dUnl|8wIRn3U+>E?Gk7@sQoWSj$fD;!iykGR9nL|3ZC%#D ze(GGS{X7QsX;d`zs4lKO^7X^DP@s6?%D{O?*j~%g_usW5!;bRP4R*jeZuUhUM~5$O zQ)mOMr{dm>_BBk%Lj)Gar1X_TduGztoXxN9Q_)N{sYNdX#5m7kfg}ls*!k`~^26rw z@bp&n+(+-M{*fo&(b=x;Z5@HWe~+i7WcKdj?{FGH+3de?8Y7yUGEDbkUPjcu9R7li|WfLv+3?icHU;3@fd9m>%@16uh+g^9~F8$ufil}DsoPl zU))5CU#h_BO(@L&C%;4hKk^nQa21w` z78>Q<>N$^i6?J8_X+;z1|FmHKpH0vFnE=5hTU6Fc&x5>mF4U>`m6B}nox`xE1R0+; zt8QZ+xm-I8(TZWcF&WIXMB@u(f|QW)e-IYQ$tTJ=Fgeq-uzJxObzz`WkpO^r23`it zl=36pC$1acKT85yn3jdb%--F^RzeKvUsP1An~P*)$XKh6YwTZ4A)Z9PEWq=ox8;TU zTQ#V!PITJ6RkDycON9G$gYT>N5uw|J-|=X3l+Uqwk=a8ZMary|Z!Q5VI~3X6UV~LmsSSna`BSiU=Eps+I(VvRepLSihLSm|bq)-3R}5sTWuaJQ zOk15;GDKaQv}&$DMhkhq-lqa((mlJRY=o=YH@&6H8@;CU>b?AegJz(#?6V|1aD?YL z?bhQG9A0rL!m7iHhTpV@{L~%5C+2Km+B{w}Krxb4Nx61sJSTKgkQbT0vP;I(+`wg* zH!nDu)5OAlX*y^z2UngZJrv_ zEY?$prrq^ic0sAWQ|co22(1apYq^#+t7tdX25+d)1E3TQDAwfXg9*R-2W$@9Bra}1 z`(syo$GhBq6WTYy+P&Uq=BADxOi-Ebwb^|ai=mByW)+k$7GC?j)aWs((|Xgx_b!fW z?#3^c>?sXJ>1!8G=OeEL2&}a9W=*V`-jk~r0OlvGp&?@_NYZUF4Y&Z?pnOQ#deUP* zLpxOP!1`tVZgfG3&TH3%1$Ewiz8(_J9LZ)qJP|K1IJ+qc7l#KDVQO$RoC$mwM@Z$J z)gq&D2>lZ2qwqL6V9*BYpTWh(m}7uC{035rS?^bJjO}-G|3MJQCZDCXUK_D^zvgSR zaVjddKd6*2ZaVNN+M5mt9gRVZY-*VXM-~GX>`kg+p3?v_`283N)-OP6axaF5nKfdPH33Rd-$W_2U7*lq(=0z|3r|^)&>YHZp zi28y*Ln1L5{rNjjFj%dt+dfH3a(<2SZ;%#q2j!+c4Asyg9EA-%^q@kcX~+yo)oZcp zsTnvUryD^qc%0FxEBMu7%ZA2G)+r2LBdcCBA)^~({ViI< zu(Dgc!q)t|9=AzH-W!E~thxLMfrLb2$Jg$GS$d^hzZiCix2Zy-gv7U(ol3$s!r3WC6H*#lzVif|Sc*n9?pra#QLaMAE+FOLQ@dW#9V98NT<;eYDK6$sbi_^DGF5nAAkf zW8K<~WUvXzP9tVfO1$*ndL5htmi%`%tOd*7RTgDFYS%Fo9{uxk|DbXYHuqUuF}%_| zeU%v-FUcxq+UB-WT%Tf~wYi9|Lx|uC*gOK}e^3H)Q(A_j6tL~P?I&@ax67hP`G;67 zfQj)R4rW!|L65zdSB`*q#p0bvp>DP;cgpysoIn`5C{Yeg)Eu|JgskdTpzg1;*}fs` z1%1>+PH$Oy3O@wYKrBaT57A!sZ0=lriq=_F@wx&$x*9ZwF0NnYxxoGw04r4D`9=!5 zfy;g{z_kX?c7dKDOMOagap9`Dd3kqYs?lzyDq-hrJIgJ$G4V1K*9|JW9{1g{AFM3X z76lE=#|py?U&FD|5Bnb9iHL)W9`9868#mTv3`Uj2Q~Xs#Ufe==wWe9=m8Dq}kApDn zUnfPk{;$Gl2`_RovLSO75eW)To2<2H3;EZsd}*U&AAs83f3jleoRi3lmWjz^l`$8* z)lrupM0<{$JRjk=EbXorD8~TwmVz&4goOr?p4dDMxx-3}hsoWGu{!EnG1t|`k9)TP z1pxKauOw;lPjqOBSV;~*By?jm`-@|r9HJX`viSH@kGoPMe^zGb-I$tLfc5rj)5-0e zuq^M+kP>qC@X@u+g?DU~OvL*U%vCxBh`t`QgK7gk;T! z?zTEaaqbs(erT+J4(t!>p*cYS_6{U%Ey%wg3t}OnV2-7izTs8Dlid8osQOZF5dmL@ zsmU7i%6|`s`q3q;BW7Lw=l5fIdG(dH=;`S6(H+1Swc}zKexC`or+Y-6X-|^l{j1?V z{RR8X6Go#a(pKmf{r^j{dXNv`BPIprv7Y|oFUuAft4zHl9vtl2p9cHnf#X*%dXi4nBRPc_vnB8-v1sH5Ml!Sv>CI^uHOs=7^7|l zFz^3gH2;?F$x{746^%lz1E3-{H#Q`K8E^cL-2Z=mTfU2Cy(FpKs1HC6^ffi4OFOW@)z z?~NM|0N(g#&eo3~pWF#)WA#x5%CkS?Rh&)&C2veoO>9(@mW$ZfId;vL&!JE#aBbx5 zhG)mu4^IDmsM73-0jR?7GC-QRaYEA$3AoJnT65@JFaSoF?@k6ZoBLt)KtKmO@*ZWq za|3E;@%6exlQ6i~XVag_>eB~EL?vw-=Weghgi&<>YO-^KgM%eqWlaA^bE^NGu?bp$ zcm=SViX1d=vve@q0>Ee=aD%UkzCqp!)A223uIk(x3kD7UR8hX;`$9Pyi0_kP%N`9p z9&WNLjuY;K_md7#fB4DbVflqg@c$Ozf0oMrT??vlMkM#K5}dob_=5=2G}AIt#=S&h z7$mzB01#xdMSCLRL@j)PUVAxe$vHqgc{d~^Bs;$7Yj^I~KR$oCcSDfNgqSlYgzEfx z?eV4XfhrHda8_AW3jaynC^S#3O$(<2xOGlO_y}vW-A5lr!_1fubTJHh`BFDmI`Q}8 zf&qtGd({N!G7Sb+F5eE3gJ
Y4zGo=RIjH14A6CsS64iHSFxl=%&pAR*qXD9rXm z_2t0VQ-4f&?LNh>j+)Y^0!?xo)*oj(@E1I9J2ox#jB9XC9RXEkm%9TP3#EjWk& zt@1%XKN$jW>og3aZ@-=vTll%&(LU2A)l0GZUAdUi)FU8qmvr;-3lD?120YPc?SkGs%$&wi3Aw+=U zp-Mr2=u6>BnY^0f=0#Kf{mED6G@5^L05+Fz=i-4o1dA=jH z1k{cP7-X2cBxHceP{DIca@?z9;7-~(a@c=@+WcOS0%So}@DeYYaB`s&!Lb8F@7ciR(+pijRr*w}u3 zccq*=Dql#%7WJ{nAMeaNu^SvCFk~4yku9obS?Q0x4N_M%z|43rZbV%L|5@tRfenu%l&Kg)ZEKmv{}_Mr0|JRIaN$dNvE z1fdA46{n-ZO^oa*7mi+L!n}q2QB`q_vBDUkbHuz=-ugJ6S_iP%E z?*$a6EacV27sW|1L89;+7nQtIt*Z8=Nn z!4_XK3246c^+qcl=gBqHeE_W%Vwwsu-NtDS#gZCpsNDjA`t@bPU5xxl7ks)r2D@$9 zJYaFW5iy_Q^|*dczY*84iti&_t?CKD;w3@uO`EW{ND_;nZVS%_U+f$l(=AnHXOrhb z{$(k7cRX`oSRpXXop=5Ft_oNU+|ikk zW=Y3|2{_e!Ls2FJXj$RwhC0SXI@o?A=I{d{@A|mKQFl5Z=sXWxaMk(9cISo}eu*ho!Y)bOLfoQc^n$j{F|fM#BjKIbU7UR&&6f=7HL4`JHL{g9aUPQ^cmZ-3p#AKAR8r%F)wVaUpdyL$L&v%UU-k5YP&%j7@6Vi1wtZ^A4Xi#`1U4g}?WT zSA;1pdNkw9P(}uY+ffMcR)W)DI5I$aiA>A;Fi~lHJlSNN$J~GQ60QCKH+b044?U`} zH0y=fJ{k>Qt+KXxcwL39(9eLfyYgkb`kCqFNVS?hh2#O3j6u2n57J$-$~A#hdnH6Q6PAV(FE&t3@bLt)rve z=C#SS7Ez6+nFy(f4u4XmQRKr44NY_J@`?|xMMH(g*%>lcpnTQdff1cJ8tT00E=;AJ zN2lt`7FD|?2FBF5Jir#@7iLJVYa`o&Zo6$Rzsctv$qDb?4$J+Cp7pjyMTa`d}LWgu-1(um5;R%BAt`HN$Plm z0=>>jps|k866*+zi~E+}TPOGug?%y4P|fO5^^ha~(Ckc4U)%g_hk-#x91)fGM`ecp z_Tm28-&46Ke17z&Hg`giG1NeqGo(OhKD=+@c#B#@Oi5fw?Az?~)V(Xxs?>XaevJTH1_L5dcy?z;$3SmyZ%|T1I0x0ix%zt*1p^m_Kwfy2)#T?zE;mch-&!1um~P4sI>Zvtq5JO{M_f*iA)DLp8WtAVDPa}#;gCi4gOM%+i*Y< z=3KBlzgb6MF+W-WORy(*)%#Q~_TL8g{~ye6MEw83Wy)x64x2`{0?o&|5`~n6Y`S&L z%~O44q3)~Wc|bn49!f}hA=m=8bm=$e0`LSTF0w!GrR3{OijL0c@!zRn6tY$=h_T{~iRAyV)%Ad_{!ZgM505eh z9pAazHEx^jT%?d1E{0c>J$N`e@FkC6mvSqe#ruW{7+l^GD9(ePw^Y-Jiu&LRbbxf{4Y)ZWzEqyP zoz2v(W2~JeT68Gy%;%@#!(%Vf@Tk1$0J^)Bb<696uB-0WC$8%qFSy>k;rEeG@#+J4 z1IQeBnxTzt&^?d&cc21$<;g4iE8uWrpw1Gg3w^4|xwAGYhz}OXUW|5CkMgD5-v}7b z%VzRmE|k23oODm7>q*Y(EH*4euHw`dla}wO6`&4kR#7`q?(|Mz6+Fj<+Q~~%mt=Co zIev4B&Jg$k6}?v;;P&^u{kHp*04{*PCZ~RpaW-&UZrUbE95;vFM%ks!!DX^@tcLBz zGDkH5n1PWP8W!kc2@kiBhJo1;cNfGfg(E3hw*gdjw6jRblh@C$ivJ5FpYg;jz^D)zB4B}=gs zvL&A@DzF_0!NqS5#rn#wZ&m}=+0@f4(~q#rmZ9AyS+4Zz&pHJp7hLATWgjxMA_hx6 zikfh(uMQ5srb=4Wm>!YoIU41x9n6y*dtEralYV%KCyvs-I{Ti8*M4#2W5niGk6cMo zQj!4P(ks<(XGCBN%p2s~d_i1rOX(UV(#)dHh^s3(FaG|Eto(52MW6w3dd~!wx~3!e zTNM0wY!_q6r5;n_-`r7v*1c($>U22dXDsX#o6P0$&DRg#RN`>gKYnKgl^(sx7@l-f zV;6M@?NAHXv_3KnXBE;{(7w=B`#?IIAI0(7NP#F)0ev;O{F z>)##8z)UUx7GHxrz3^3^UUJnK zqIbr_Sr2B|wvYX{{ru)fc}0Ze+ALOZ2@|=Gxyy`k9h2Cl9#o-;bKOG^DIr3dO9h=J za>y=^K3IvCZ|pW20sK*eN*4^6R%~o=e8oZCFXGef7GU;)S$EASQ_A@;qj-NAX>1j+ z6NtwyBAn|MQvH_`_ICsWN|2~g^p54wMg`TpTA$rk8(c+*->-nvxj^|ear(#6{VQPV zi0 zHCpszmm`AWHh#_Do>J3KV~K|euRNG~{rVilebi2JA;neLwm0p9N>{3k3H5c=UTO{L zbbxK0UsqSx+8|S>S?ia5wEoVo(CtMIo179Xwc3!vI=qh|VInO++AlKtyJPG3Kg@jE z0$5PNLLpcF^vsD)**N$Ts!eRy=SKMc4K9?(NxnZNcVhMX2%e zx3^E@|4h1dES{IA?A(ZR*Wk%K|2v!7qILNZStk1<4H@h}S`caAAmrH>hSkE57FQXW z;$r6!kLg<6R_sW1^njy>9HB{dF8t3|JMm)Ti1Xj|Oq$dMo43pHIAp#Vd~=k^?T|~Z zIO#if)L=p9iA(kTd5`$plJC_ekG=hla(WzgVhOlfrk017v-V;YkPE8LM(&G`c31=W z{Z{nEzCIh}63~mN@YR~m&mPr%c0;poCY1ZPp5evYfkP!}uL?&4b+n9)lVmsEXl(Dj zbZpN&X&<1crzca~O76ec;b81Ba-T8bSxOVOV$H6dq9hLv*MGxpWb8J?k^NcGwnwS6 z^2`6#-g`zxm2GXK2oe-YqM#zdKu#)>vjIeM4n-0q7dca8P(cKgC>bP4MnaK_EFd63 zG87a@&N)NDx9D@;KHaCS{_Ys}&wIyheigNM?Y;KebImowGoN`qz-u-wAbygL|C*Ut8;E)zfEL1dJ|MDhZ! zvrCItua7K^+3kH73rt@d9UZ_mp=7U&R2H1uj-2=4OAcadTy-; zt*%kh90p5V3UT(u=5j=vKsFx^sLt1~xyvJ;dyMQ(77J`_yT*PfX$r+7yG?evd{)w(D1p)-NIPu*-Mn?wbXnd`_fr*7P-A)D~g`pz-Sp-t()6Q$wyVA ztNm74$)};!indap6d|0Y{+cCuQ6kswum5<3y)peZYVA|uSqzJaXWWYJ`7O&{K>Qkx#e^2RO|S|vXA~L zzT^#|^^<5|T_7IUkX!Uf#fB{24(aFHZ=kix1rX8bd^&Ywikg9F%^ev*JKw;+h4@>#KQM;JA&RCYnZ z;L%!b!C6w%2{TQv7~Lp{v^cE$b5w6Dogu_m`xL^^dMqoUy9tozE3Utjt$SbO3q8}r~P;0nmj&nK?A z$B%iv%;SKSvXYEU#D_yabO;qrh#MKDgT!lPHKp&0hl09#W^C+@;V=EyuU_q!3yQ~F z#7&1dGnO`l*j#K*(R)?m{&Yo0#Tx4qDA*d;{Q_aep~w6_+Sv?LiBMT^u_&G zJ823*pW@{YnODY6d)G{DpmUC@YZ_U|+MT83IKib}=fz|G#+|LI+Rr3TN4^}Ae;}Rz z^N!@>19ZWy0F%+t(PfUOSIEi9pR7LC%#HU55u#_Jr&ndx-6B(b8yMn{y_5Cjr?dVQ-i$zbVjv)x-rh_bW+EPKUlXh^!Gzo*Nt-Tw>KbcuvYs(q#anb>LmM zabd68d1XO>A~btaGro&Vhv`h9&hxT;*T^iJq&1t#77^_Q!fLm@n-r zoae7Z3LId3RSlXzm%o>1e9(j1x0aHXm0cCTCw;@!wYn(fU^nW)W=(<=f!UP98uegy zg?rq|60FuPF2=s?Rpt73ewLF7ZuImQlQDb7M90WZezUMdbnof&1474dgBX?(NgTRF2+78l8K!<~}E=vl?X6CA{~!vQi*GErczoAoodD1#a7ogw#O46Lng( zgNIXnuWkr4D5n+~Y+EpTD=a;<-Hf5_onO{aT^Y^z!6@53-Rk;WKG+7EAnR~Zc+YJ2 z+b#3l0@Z^Pw}g^;a`pssRDq~~B#4-~##ULO06ZqAx~_3BK`h{QLrI#wBZ zcm~ERajzh@Ry>dlZ9ZI-$GD+w;xSPLs2Q23&$>TeCy%GVvl#h!sVx25^iA1TnTW6! zi_yZn{ZY`qww?hP&39dgd@7;OLq(7D5QjHBer8bZ=#g-~F!4{_%>8@?!$=6cfV}@a zedoLSb8!#lv?a&F)IAZ{`>=2LW`%=Zx;=-Mp^4m&uh$JDCxkY*t!o@L67FQmI(DJa z!zLwb6aA%KLTQe$MdJ4M3xAgQ|J?64*?)m0Jax5QRHd5hi~jMutXL7_66hQM%+r%J zXwdXRxE;6CHrw2{Oy|K|zU6#L;|%_}SXIPKquL-#&J8W}@3`haxN-kdg>_$UiD7|@ zn~c|h{(6NH7aA`<^y+!IAofZ`d$Y)C)mmw_oIjSQSgfW}7$C@28&@k4DJXu*l=8Gb zwLycaVTRPJ1fm$M79YbWfSUpf*1c8(*Lo}SV|!sZd+3WAG9fQqJ%1?Wb3JZs{M7=T zoan6F1Q@Dn82&88rmbUJuj6}CW?*A{HTmxhk$*8HTH>(^qDcxRYoKU5oy@73<)hrI z)_HbotEoHI^9W^$%9etB8|+IfX}l-scO3jn?E(wOOX>bsEIDQSCgtPPH6Zv|JD%+; z5wlk?ErdF;vt*f<`zOT?{FZGJ+F?$e>PJnb@FgF4sxtU_Qnmb{+123WS*<)hr~MOr zi9(ZhC6BE)p`Q^0nc);(O6t0zv0jBVzXAg zC(w@lwEWz8zzWaJy^si7RebrfC7h2DI;X5}b-eyjCiJF0%AEnyXc? z)lBO=?91d9Vt!OL$fj;P?i4zJ@p;|Ov>*Ni53J7kW?E)uPDX|V*j7&BbpgL(<%m~) zDo%S`WaJDU?F}lbvAV~Su1A~4J?eUW6||zVshQvV7!$$Tz( zq~HVj3)!kaI)&X}3$>~$BaX>wYu4U0e_1;JBa{A0XU`K0@RpwiA^L3*%r_pID&SZ6 z3R-eq9VpN%kfd>)4)7zZFCFUDo^ji#FmcoR2)fPx$rSm|zc|m%u0~Q^Q=>~Fy#2oF z-G{Q5iujsULY7=Nd^J};x4->{;g{eVVw`7Lc&u%E=Mr}blZwYqTgaAq4vvYAN zgRTC|{k?0_a^|wC0I*M3*kx{BUg!7^tQe*UtW*CFKvLysUgMG|DJcoG{@6$drtlt6 zXP;_AfQ1}FXoHb35XsQL znDtpw{Nf~BRB{=vR;a|D z)6xqR3Y2e*(h%Qx_!$z%gw#KrsP`Ky;=us~<+?hOcI^~Gg`v1a2z`Ic?VIG}ca{vz z%(9%;P#$+>OISer9VpPt@(AbFNg!WyxalVMN;y;S?DN z915UX2@oSd_R!PY%k40)uvZ22KaqxiQFZ>RM@tBG3N!>WnzBLc?8+qdsO+w9-)zQL z_fY$5cVSi0(Dku6AJS~GM-$#P9X3qN%(f=ChU}z4my}&L&^fx2i@?CpaBRG^w3LN| zV;7%xIjuvxP!kW;^Nhl~FgY-?w300y)OZeBzHS6ma-->CAnQ2VkwQpFIJPvvNO*TB zOqSw%;Yvn zX&&#@ezLZiSEFq>C!i|1YUOK7OO=UbwpJM2AN?Ig{&p<>DKnK1h+cCz8D0_@V|23yU4E2Ha4P_vJTI5LPz>6%eas31#9Q zgx7|Ik*~jj7~E>}cZ&7G;R_V;g+e|wy4MSIkBDV>xEe+Z>-;;Oe`{~Ir)CSqHD>Ep z(A3NVoT`;gxq1VlagksbQ3%5{*ktSTLkGJ|K5YcskWBx=3voSOyc zfB1cT6jcoyGbAJ(YS|nTtHmW@)3j*>JpU02hK8xI{Ay7iSUqbm%2Cin93Qk$*fciO zu(@;Zo}mvm;q##uY`TG(LC!KdFAR1rNY=>!8;-ggsSjVFpI{g56Nfv=BR9p>P$Ign zIqjabc`tF+qS)vr*cqoSOO{K`2HCpx2dj+&M)3HcyZ&V)KG7|#YaaM`tO$F{TAZa) zrxjGSr|URsQ_8Y^^G}q;e;h*c+F1x<^U|`cyY%jB1d$sOxmAC+-NfPqnOs4X2#aIF zSB7W0LSyKpcj2{^p9^_UaKgv@JlL=%I_{amr7YQ5b1iR78K?I#2 zJLUAu7xd-jDcmbiT5M$Z5HhZ=?bQQK?>d=W*`wWE!NPIF=6AMv(1Sa_H=6lx<3?=! z;x<$TVSO}ek%vScK7K>&h>t?nbkIT>p?JPTVaOAll#6$V=xWuYi4Y+65d~E?uogoZ z3lDt{1Z~*MESG966`-xVoQ3tUcI$Tb;A{6Efy!m839t$WOd!qQ@xUg4oQXe0XHgZj7WCwW%CL0p5-(n)Y;JCjRug0I-6(WNQJuj3-{Vq1@%)HpAw_4^ z(my?s4yANDBKnBjp{z4;whZiSQNBA( zzBl0RipZB-SD{&V;`;Ud_EBQBGsRnQ@#4s>D1LKDO=fMLE@7cYQ8g99DAG-fcIHr5 zAJijwj9+m3_AHH;+kjBNag7M(Ln5+NrJYpZuP*>CEhS{)@d_&mS zl3^cRZSMXJQ{p_~Sq$tmITitSAR9*E!Ff(+CpJdJi}}V_*tbA27U^XP7R=xieSKg( zU(@Icuflu|-CbbHKWcbJk8vynm)O9Nah6=|crl;j51jc&&#q;i|4(S*zdrf+0K~=% zePQ`ky#G4#pMQPc11<%E3wI(hEh+-KdxhX_U&@_p9m9MM>18nBTQAZsV^Ub>&f`S^ zqt9nYsDcXfIgf6Gjpgn;72p4H=KgZWx;kL~-78FFbjJLm#GZix`}==*{zv8fr;H2f zH4X3%@CLS~tuUWM5C{hR{+<$O*8G=Y{Cj*jpdCU(om=845$1FL9|_G9l3e7%SXE$P zprVr#9BHbk_yM@vuri#IUnPG2wHnUy(RhzY^zYoheFenK&v2RJJ}n_UX|4Zk9J@|uzXg(`+-ei*iKT70kp5w83>3W;2{4S>*4Ih%h5#Oo`VkG=5$fe z(<=b%{oFh}a7f$SR)x=bV971}m6!8*k-j+EUCA?MDuIYoG7?_A_)_{VE`vqyp;3Jh z`e+YdcX5+XRCIi03e*pUlw0fYNMHoM`FPUTU6x1?;y~UTMzReX(}13rIgJzI`rPmj zMKe254~qn#Q!{sDe{%wOZr`~x7TRwq%?99K6~)w*y|4RU?6{r_TaBQ{*qNiQj=~fz za8y?_Xf>8Vl#Ne(h%961-Khad!l3B>}r zo`f$os#Z$pO51rcEl#n0P@88uH$0?Y%UfK>fuyVErK-nUv-C#!;-k3tCMIa9O3LV8 zA!6`&=B>`1m*%On<{}pudHhrVs_-F5SvxP4(Y>NSIJty8i(c?#Oqj$L+NCp1B ztdx}cyq-gSoD-g{Iy|)HaN6Xg!Cq_v)q|G-Rk=#~w9xnC*mzOcTSEu=VYo7&-tQba z=RLA(i1}=xL5#kCgR-}5MB`S4LzOye8H?3a-2dy>C(a7v#?nLY2#$s>OGGVe=@%Kj zM!amHxCERy3h#LqS4Z5=hlSViuU@^Xb9F`lPS-ZqNYJ@}iibiIfk0?fsh<*+>Qo+#nfelVp)-8O}JP~IAocm0qSbYNd&oAt z*{!ybGFO*Yi<}kct2!ZFUCdea!%(q7i@xn7*ab6rc7h3_Y@~iUuNdu6K=qEEg2IF+ z;yRYkpk)`1HQm_aCN`mu>myre90d}E7sdAM#W_-{p)!5%QnR^b!{YPMP`^6#&D?j9 zdtn`kh5Fw8WY@&jR~r{gjyA(6NiS@F+4ONmApXW&r9Ed1jJjOt`sl#M9^R~_)E(sG zI;wkR20ZJlM7c;?eeXIRX*qfMy+K`F-PNS)6QaY7IE2_Pen)Vjuu`MeD9s|HFg8sX z&rv;(BdW@|fJ&wiR){5rL|@1ifxP{;_#G&g_UNdn%5e&Z!sLcC1#joH%no^ZJ+~t_ zm(96%0aT+8e&dND{ywGl6*CCN6PPtA;Vnjf>+m-|xEGcU{pLa667#E1Obg1176D_; zz8@jD!*#5b=YViDFS}@%2&id`(%MJ1wqJm+a{gOq=k8n?tjOCpn$1*yrn=52p{x>d z0`OtwaU3nc;}^%SvTDDpNsBNF0dxqncq~u~Uyo%3E=}$wj7D*?7f>ei(-p&YwM5A< zoOQU&2g~PBoMlu-n@>}9It)7N!^>5l51~fA^Qk)?6V|Qu^yq#HB^~E+kdu*#*g<+C zFI_~Ej!1)0j4esEQDE*V#Z7`y(&3Oiowye-4wfs~t*7a$vvCoy` zCZ+W61t54?roEa&*zp1Y9KLe2w+|Rwjci$N8mwA0-?>jQ8pg0a;DvoTHj=*)%tn#O|pvGLxX zxp4otsR1sW|3?*!cxCT8G2lkuQ%JnKhp`shTZ{mN()>xovoXupH74vII5QIEB{8t8QD-<&}toX|{aw z&w_!LS7`We8$=4+m1XYyq-^F#X}UepQkvC~ydPgd7%9Nlzhdof@W^Gmiqg%tb%)pD z$0)OvbR;aO)M(C%=y{ilxGsE_P2;l^dGn%I&8g^!rWTU0It3FpL0=y@^YhVN_jS39 zzxQN#fyn34eo8F={hXP-``bn6eOJozdK^9F;6>UboqV$Hg2)Tbc725Gxg9t;GDQ zefP1W+ED7vNsP-QSs4gP!lwWD({UfXgHMKz$B5QLX&|Bv-xr<-hJf&`A4uas9EBLY ziZ~9Yn^?ZdDfjxg<>{ak6Cp)U1fR2vx@X0>R<0jQKlIpSdiwNPq!GQ_%v$I|QacZx zqt5dm4TPNo4HaCGVb=;~Gw>`A^&?MqLrqHaY}V>)zAk+a;`otepUKSAlbJ_bQ?Sz% zc_Seyosrf<>}e#sV(38-=Kz0Zhq9e}gn16j&Tc#Bd~39>wWFwyXs1mSd(rlY-bpu$ zi~ihOxJUBo-cpOhp5-8ubF;f_+kTvRQRe)ny$q}`?~oJZ{++iyCe=+#Z1i)T#rU>dtS{Yq?+}bm}}Uz zduVSiARSk5Gg*b1)nI#SOtv-|6nbu@RtMWn_!eg9s~;Xn8NMO1v#L@nU?=(*O!hv{ zWlSlL)i#RbZGdv;{Lj?~3U?$!R8SKok1KBDG1uxxNCeaL+jYitY@`=>$(qEwAPnM` zRMm9zzLQNk?9A0<1kHvxZC$!9@*Mn5$=t3zOws89KfP>fe5GXYH;1j4)3QB-YsZx# zNqkB>s;b%fduF4{u7`(%tKIXXDONNmnDoO>7NFH_JRVT*us(RShNw|W<@{J+#x-ZU zBHbCcx)BpQ!=~4#QSsQ?GFPSkZh_5PzygWgB(cBU^`<71G0Mt`Q`>WjTEKGPT7u`M z5PBz7AXp|y{a}~ZVX#aKRYNPdr#ep zit@m#aTpKfzJCXDaGh*~Yx#TvpRgp+)mMkR=y7F5%{+;Bnx6%&YQHZ)r1jp&@`=+5 zdgd;&zTH8ud30rEY6V_*J#5x-Ht*TUG(YU^S`ePo)_;C8EbZFd6MM%P_@E=gsyC#; zPWGFOg3P0$CXGrNMvfDI2IGv+>waZB=%iCQZn;3jeUo_$XYI659rssJ2oLLMM~&C= z?wc(1EfR|>UP9U9pr13u_=i!_4|+nArSQz8Pe-1ogUO4x$T4_#-ITyOI(&o<7NVRj3A$xLp~t(?&x6br z3?GFUceN^*n`ak=PmS9Bkn`7fN4?aH*Ix+Y1WK@~&||9I&1CF$0$+_0LtTWF{ix6q z;M8x8Iq1Zynb}-ubbKXXCXr~D@vawks`Y{q%`8ygfUlEj3W?65GVA=FWwol>`9S&( zN$f!^Jg0oqdsE5o;R_AY9r||zeZIHs)^|?cz>aqX2QAgY$;GaT41W>=kjD*;Zx~31 zs?YeTqU#_3&~Adyj1=y%1h*%oNOeAVqMU%`O9U@)aenowh2|n%TKe5`zs>tu6_q=1 zPTBznf3CO`r@@QpohDvKRD)}5>BPgmsV#ns9cy>J(Bq$7BP0Dg4N6UE@A_2L+0hOo>eCG*3Mvond|~{wVGm4pYYhl#nH8oLs6O+ zR!Qc%lEu%(3Gl_TUYgMN>CX09K9}PINQwhL~fQfDr-WKnH+cWjrv~&4~o7n-w z>C8f=*Q4R10aLRdq}0*Z*Bm}+(OM1V<}S1xZ0(a=#%InC4#s_{d%Ts(VqW}E$)DJC zE8lo#pO99IocTU8owwb(r@JF;XML)R+IU=LT(P`S?>;6puUOKVf2n+u$XjDDW3Kb_ zJSj!I?Q4UCnIN_5Ex6X}1(N;>3rH4ME@xA^v1xCWwdr1c{rZ=dqzp(wwTd9hRV&ym z)p2TOZsDL-2sFJsEJL}W$K94W3lSXw;Zd3|d5I#{IrkPv2CYy9miW5LCA+n8QB>HGb5NkXcJXvwcf(g45I*TSokM2J(H&(=Ru)Gd8IEq%xum@5 z`Qp;g*%HK|@R}->r!yi%mR4q*mg_0{&3&56qgapH-7jRB%BOFJ^*SWyH!QSg`&niz zty|CpzoZl&n*DZTOFo{3B{CdSI(JVYf^y8o}Rn>H^OIp2cYxZcNQjWCNuJyAn zVO{5O#{~1T+8o|!SI46uTTDLPZ|o$6u2;sEo^`BV9Vx6*n<~B>@7tlZfvS3=I+3H1 zm(EJ)xcKg-$H72c>GXK}m4x@{_M95IOeQMmof%qFlPLgymsm8Utrfev)A_n3k|_3` zeInGQ+I>%Lg$*^nu%lzdjx*KBko4&l;&0YHvcBH!o&6?xKN9JOOp6@TR zImfd|)F`Q)yqqRy=1wxgP2`kzCth^c5IHX;@aj4G63l2-o96*TX5zcuGdnx(rF8W~ z$98L!<}93VaoXPD0L2jbl;}r{Nz$zD)``&Rr0B!BX8FbM?fHs^-^W!(CVF#wDOg*E z2Vb;r@|Fy?YE(83zjxEE>EvI#d|<#85ydN!+1a|6ZBrw?O~P1id%(=)I0l$P#uGiH zYCb+ma9llj8}zo%qJWd+Tl*~x+Xks8_O9Kow;U)0I9xkt>qpiquobU-6{(O#-&H$_ zQhFluIz#?u%Ii(b!<{M4$~lRUggoY{;!>;9V)=%F+j+XRa{T-)X4|%g4=oQb$;Jq& z-6zA}UgSE>q%ZJFi|wHfE55(J{{=Tz$ntfFs3-j5=IbnYu0ri`N8?Cof6V>v)}6_Y zrO1cS_=^(LrbWf)d-|BeBhpyd^{Ss%49DEyHp@k!w`g|;Ms5cuJy0}kzBvbF5)$9& zbPrr<;(jh2JZNWPQ)}w{YCwRBLEe$)9*wXQ!ub2g{NtaR*;z~jU7ja|S5*f}POmNH zY!8h(3TI&EtTJ+X+<$VTskw=N&j}%Ns2{V-hjV&Cvn7j;S2{JG zD2(wPZTg~)g$j9G{{AdFWF;q?Z6w%R9b%ioJ@Sm{m0>| z>ZS5IYPnABAxT2AAA%!CD$C@0n?w6*EFmSLw zL3ii=#s@o7+b77fexprMI&30nJE=>L_mXFPqfJ-fMKNx>G zXa9-?%tOwCTubsxzm&q?Y} zi2r4S@tLo&Jee=kRa0}?rb+=dHh&53{X5!)_YsSW6mJM;#tGvoqy(?PIge7FVFug~ zT)GEx2A2x)+g337R0MRS7s2~VQAi{H+tHl!2do_x)R@nC1PUW=U3uGwIc8LcMGoRh zbu>(6e*+C*I)es0`XGS$v9IZa#r1!k8ZieZ7XGNEXV0H20T*L(Y6|ei=K(IG{=UA? zxw$e#L_{qQi1siFS9d6g4sEahdsh*ie`ut7g zaQm#dOk5}pB;Y{wni-I#fGqAvnYCV3y&qiF=;h0Ab6Z&m1Y(8$?{e@1XKKVn2++eR z0i2a+bjQ6yZ!u&H{>ddv;@8B~fDVm?n$IS=t zIY6ddN9Y!kfS;LJYGY&LEEOtNXcSx-4qfwCNK;IeXpK@>WE%D)1U$=jdlt{+<<+I6 zS{0FAFV09DXJP=5ti^GN@TKp;cdZI5vyT=cqGs;Rz5lKmFiN)z3BtmX3bcPjP$KCyc)dqNiM(v%(e6gdJ zPuQ{a=b+XENAQ>8c!c>HMall9M$*EX3JqbnG;H?_cU-vcvthlM!Hk;z$q3>?PKkj; zVP(-!PQNo4tlt`sjaBglwgRGfq<&>IbjyIszpUPt3Q8gaa{n`4A$Ny8&#%xg$-^8W zg>^ju-8WOcB5M5on)7uATzH}sJN&4epB#Ep&dMh>F#Xr_5Id)u32-DAj)=etQ%m4qU+kup@Jh36{#^7 zKt|Q>$N*g=0_kof4AY>kw&QtxTTl?0a7%wrMN#oq)mmL2N_hB$IEu~XCoU5-!w;7j zaaab}FX4vu7r6>U)uZ>QhlpD+?$REtKt!p%sQ5_S8&SsOLv)A)iz>v2z1?bniuA%d81QG(_TryEQkB@0F}XvnRZqWBY7SPuXrl#S0N@(3TW9;&9=*C6JS3 zfpK=KL4j=wjy=S)1yxs8Z$;(3$Ma~Ft_n5+K-9s0mUJk*??^l{=zupnQD0oE@42XD z-LoD1#)wK;jI0K?5`_L2W z51o)kEeq7+MEiB z#n8{fSCl8JcgEoy7QFXd+b?R?Ld|Z+k?F&@UD~e?&vv0MKLw4>trT;R*w|5s^f1IQ zu9_r((yP6~mC5BGgb%Ud6Q*etS)ht!dG6F3i@Nww@cM1FV3WZ8FJn}sbnakFci3P< z`0R2N9dIJ`5xAECyalh*^4=IWS&ByGH;c4lZ;1&Any1^^5}8O0a=sz}$@|)J7utSh zc-e1f2{6pyua4{QO#;<-JdnQTNDR!u#YqV1hN=P3H7C=uDE&jOTwI>ME1S#Z zk8Juc&JlxIyd1S0PicDLd%NxF6^){oQm4y&)hDMbW3KU6`xBVf^@=%(9@5cGHn0$X z+P@S;XJ!4)m%;cG`IL!)fy}1Vr|_n`oVI}s;Y|TGY+PHd`_0#6Wo~}&{qcjT-u1pB z`4s|vsLB(vrdLl%Nz=?sV^`JZc*-gsj!%(Am0!z2hK zH}@~o@$YfpoWRB=IN}pyW_mwM@GSg}^U4UffYb8FxMSW9!uK^t;|`vn4nU0?!>w(^ zE)vi!w-lyb2vg6~Dy5bD4Dd_8e$EVUe$tWI@&)c+9ws0)RXumkUu~wJ57Y5DFj7nV z(e2n@-+-Vb8$@n%HqGNP9hU_+fb(0q$zm9ymMTzls;=B}7>Vna{?h;a zA&&*j`M&U{J#_l>Jj6z)5>bA!F-*F$Vl$QlA0P3V7%YhBP2gk zE?eg_!*FjKx(h&XUpy3WT)eX8u?Cw0O;`d!4MuY;FcI&AhQlBE?Tta5-SnpNSaFw# zAcJh|m9Z-4u9@`Y#^zuu!`CSTO}qSF^lERWyu<1!|DM{TGOIB=N8m`>8y!@diB?xAC@PXIa7i|4 z6H^QEy(XffsBWvGDAu&Z^i1n`4Z0`i7iPWOwvuh6>R&~SJDBBLy-08v)vI(^^U`o% zrWK(eZ=ogE5m*j5?Hg?BakZahbUwbVt5vhgDcr=-61_unCE8;)=>E_0M#HHh+>MR} z`$?*3&xaJFFxc^Sz38&ip4iZJmt`p;bk&;ZWF{A_Fll8P;DP(aQZfz4Mu{;^7N%o~ zyR|2S8lzx~SjH3$=>ng|$q|c!;9iE{z|I}+FY|$}_hG1pp~7^Y*TG3w20hj)uZet? z{~{M{VKTaZ;r_;cy<(NCA!2>9XTGljvb~~Ac6Ek`{3+$mOY77xTwOidZ zQt8v1y`Bz+2!vZ>h_3qAxq|Wsasr;u+<#8dzU9=0DU;=Aqy&lxrT%!t6rB0>Ux@Yp6jozogTRf$_)OhqJ5l|fFyo9 zWDe-QA-&ef&=e@S7y3CT#OvTk?aO+<4%|#vF01O5{AI4kdO_zTLqfK##8lzL{B}z2 zvtfi&>*t0c7j{ZF7Q+}PXOqUrI1z{k&dX+Vx|dB5Ci+4Tratf;AV`{Td9)iMqh#+} zG@l0Rjf%3$2_2E!HcLrz_X(rd4A$#>Y}->gTi%Fl*J$joTTh}yd1NSrjW_vie;g=( zQZEbnVl^Xuf9r#Z!Sc|Djh5@qUzam^zs`(T3c0Bi1mt9*A^CaR_HFo_fy`5QO=D%p z_hvcsf>~?qUB9x*HxnZ9zxK6G8Pt2BA6OwyQ?7Z9^zGLjb-sOkw9}TK!l72X>;C;4 ziq9o&^A#Vv#T5E<>!WsDW|D{acGql5d8%Eb6Wge)v;7i7V2^mDB9HJ z#Vs6_r=29Y+rwH*jc*MhBjFsrIhV-K-&VXdgs^%lbK07>F*KQ8A>jE-fmpX92YRMG zAhQg=$0Q&&ZcCr@4MnNT^bh#K8qZ|FHK$=k&}PFv*VEqql7NdC zVl6c(G%_dZ=^GS!Dj7wTguOWIEOtpK&1-wHnqMN6hB_`WCR%VX&0dr`TF1t1b@pV0 z7Zu>s*!C6$)={}QcVr<#>wYZDpEea)B^9(Z&mo#YPsaHJZViGevgl*<2K8_fFQPY2CtRU4lAq$-U#;bZ7u)?D-5+rFA~idlu@~K{o%F4xrfs?DDRaEOYxbr3(0(I} zBGvtI=L^kV-r>c0zBHN`! z?N4BC$LmqBVwJA_k&?BRp_Hrl-THoRj3nt=<=zqhwblsomWtSW(6d0~Z#A503mhD( z!IINK-OZmt*}N9JZi_{Y5=|4R1j8jN=^K9d3&}C32l^@|B)xmI0tV4M#v(5A94_x4 zP>LRD=PxHO?~f`)k(__{{eJiR;dR*8&xWbanME4arfT3MyTJk%=GCgT9}VV5@%aUw z)%RWA6CX|`hz8QSpL(@~cUiuhDwg_`DZ?)qLTzW7UtQ!Rh|L#_MxqOZ9JW8sk5#Y@ zuqF0i6MBX}?s#fl-2HqvFq5p&-g3qhZXF%9W!^I&@O*d4feB$zSy( z_-4erPH*r2ArF>aveTE0*$(YNJYsh1FF~~X>*JD{m2w-K*^VEqG7Ge{DlEpz2AXG~ zoj>!(SPX0orF3|#>pK~jb9i{qGYRZ24r!#OKRHF2!CwU!$=6m&M`p*CRxPhB$$41H zu6Fpjqvgf~zK-i{5A%J}3w0mxv^-LMc-~D{t9k`0I8_nrG}Wu1^FsVUH+BTG2spDMn1YXMtgF?JI@@3AeC;>o*e6{(GM zh~LT|Pf5mZf3eU$-gx-J?yL0HZ1X32i%$$y&LaBL{(NcfbHN)w$eW*(L7f}3DdTRQ z?mDR#hOKk~V&rnWC%I+Twu2_nM85HcSNW9G+N^Y0TBZ=u864ZG_lg@;EwfF#rnHRl0`#wmm#>z_ z4K~Sp?j$Lm4rI9S#qIBXzaaUQd%XO?YWdpF`My-^c<1_Yqrqs|T=!F)rxl%%k)bWe zk+gwdaNaaK*PQh4d+bKlDH_TL+rHTy9ri@GX?$_A-=RAAEd$@9X*p$(FhbLi;51=aRH&QHJJ9 zRg2Vn4>xC(YeQWNJnuHs^4zWQ>{p+x8Si?Vh))!}RVekE*F*jt0G}PH$GTa)fT& z2@UG<*eHK(KAeM9Oj9mw-08{erNM=K-F4EpvVSb!$L*fMv`Dq7jCGrR#SXbxZZ=Yu zdSb8l*4D7Osimm2#tOow1Hb#4Xn43xZ`4KdxR*OAAhjhiB5#;60_0u}+9;>K-G5ws zC^*v2v*S3Nb1}Gm$#%=@n4#u)qj;*%UW6vo_+SSK|Jq1`zAwj*PIKuBG-+10rwM6m zBK(xG>VGW(m(;BfK_Tkt&=^8-W2AZpe>_MxT952bXdJ2D_kohW!Tzr}WwJpndZ>+C zpH)h8Q#|t@)vxAzv_+5na>XWZ<2recXFMs`+3uAe-|1Wz(KP`P)k)BfEi_S>Ffqg0 zZW$yACf~B=2joG@nu&NvNrl}?godrN?Pns@0RvN`iC65y((x+8X1TZLs*9w21xtc> zqd0>Z6Lm+RRFa{>_lcK~cg!tvrea(=a3N5{tC^|rRQk3z0?L5`H1y4ocZ;sR1L$1M;c^%wPATeLwY7rEZXtP0SHxVDN) zxQ=D)|0q4ZQkiRy24i+i)RVo+mNSt+Dc>po!JgNe#n5uFEZ&wt)tt znVw8TBk|_LQj6PpFf9t9-EWC+BY*7~iIIc&1q0oyss*z}OC-Dr5L4d-C6~cZ<9Mw@ zKpWX+9FpaD=?Ty-^(`^Az}KNKhN-#G!Q|eC<?KKjihk_h@h6e5n zapR%wMO|c(r55G8l4~{miCRZ+-4mwkG?b5irF(qfY=uh+t8jOE_HFcvXT#^hif#VX zhGa1h9$GQC$0-%*z=^F8dsLGPhx1VSKWm9td@#LFZn*iG>__n@7}VWfRY;wm^JKe^ zHQlWu-+}~NKcec;@T)s>y#*|X;!2H(%{q{|=1_);~h4m5t zRhEAHhUpe~KbLRFME`R3{u#hOGw{D-1{5|yf7%fM&U#_?=GRM!;I2rpW^;{SU zorut!`rK@CsiN4E@BMrAg!wMrq_g{-LYOAY|fAvi~Els z2x1Cw8W0?BM%NyX$?}eE>)#&{c#oX7p>xiE<^icS{qf0b3{Wr;o;8z8g_Hru+F`!C z`kAH0>t8<+3K!d~({H)>X^z)!aT2;V&bsD+cbL9_bElnyb%*eKzO@n@-Zj86JaPx3 zyq;_b&p>SBH75>Chqn=y$@ZGnrgO8lMXs2|wQWk9XD;+;>-Gxl{xY!IO@X@@x3HbK zxoOm4sfj4f_V z5DiymCX3gwjg?!+a$LGHjYIg#^&k%2F=NzGdQIk;(JSeiga(AWo4nD10Q{F~ijNd` zllLTU2_kKDaGZhclW1erj%$~mIS>=CvGNq9z4vXfb*-#KR@~2BQy?QP+F2Uw7LmbE z+B>437mVFcLO=AFO>9YDB%R*dT2Nt3?+t6~@wB&Kk(V|XjLf9B+&VIgi*na&M0KLw zUF{t&wr{o!|JvqYzxdF(w%APfr>Dr+D9_A_rR<*LmZOqDZIV3YDsNsir}TkYt2Nc` z^Yy(kQn7C&FFgz6kh4qEWd{NW=1X^`cdx zx}+CMrk8k@59op3{!RD((NPgYl9{^I78lORwrh=a%~4t@S5~0iJx3_;urBt#a@=Lq z8FI!H7XH=s{(6UhzWL*P|1%r^%*HQu(LdAj&$Rrb9R67a|C?6Z#n5{73q}{|Cy_NEZMA literal 0 HcmV?d00001 From eb8d80baf064e976dcaf14e9cbc3cf8ef14e5b91 Mon Sep 17 00:00:00 2001 From: Maksym Kotliar Date: Fri, 30 Dec 2016 14:53:47 +0200 Subject: [PATCH 09/23] [docs] add docs --- docs/bundle/debuging.md | 22 +++++++++++++++++++--- docs/images/cli_debug_commands.png | Bin 0 -> 151910 bytes docs/images/consume_command_verbosity.png | Bin 0 -> 149463 bytes 3 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 docs/images/cli_debug_commands.png create mode 100644 docs/images/consume_command_verbosity.png diff --git a/docs/bundle/debuging.md b/docs/bundle/debuging.md index c1363199b..c853bb3fc 100644 --- a/docs/bundle/debuging.md +++ b/docs/bundle/debuging.md @@ -18,8 +18,6 @@ enqueue: Now suppose you have this code in an action: -![Symfony profiler](../images/symfony_profiler.png) - ```php 29XRyJlJAW{)28qjL0(pWhfDloA0D4^8&oWg*V?I?ejTGT|4{K0q>wZTw2npR9T zvATi^qR48<_$K4Nev;Mq;lRjx2F%*LJ4H01mCuRSYwr6aFZZji`>l8L?F>+%wFGjM zgFG6LgS-0>=04xaq62gaX|OUO#94o4C8IiVu$_|=7!b3f?+%1bknqMHYxlS2D z0!sYTP+;rO2D1w;R&R`UphGgg5=c2j9HWyPmXQJGE#W4JQ(oN4!hW8^2v%iH= zgw+d{3_gc|-Q$n~Q8ZN!ttz>X3=w3q2#gQ{D}+R}NP{wYieB9QrVC~^B;E%9?T z?AtPez7NURc9r@9%nkiFnA`=#a&(i)NRfvNIbT9maKf6g>1Msr&+YIS+b-L<%VWRE zXB&dpz&yXo>Wv2$s8~t!j}?O0C>xa3`neN{ZKzx8&aA8j6YcN-t;UOpcf{6 zAnPK4^#(+M2qidx3I#f`k4^JYE*@TM214ABm&RG1J!J#7pE07P1vr)j z+Tp2r6LU0;P+LJ91*NmHC$4IN-D2;|{?x_@lOPSly3BrbaI$^#%)}hXv;#DCxRs#4 z19skMDEa_(aa^dSK)Fra>KPP10t=w$3!gVmH)zce-Yx6PuMgtwFhBBH7#;}PKwjeH zc(GBUNwQ=#8dzS~Fj$Md?NbT_ln61Xx#$zHXLAc~No!z3B$b7?OrN+}Jgts-Po@p^%^oS$L}#P?%E2QqhdcaC=$cdU1Lfsug` zfgK{rV3J17{cs`paP)9#80{EP)aB@`k(A`IiQ-yPe+$@@rd6(#w`pi-aB1496;uwW z8I&qjHfuceZ}ayh%W;{WN>E!kB6Ak&AWD(Way6lRz3=lLiV z(5_L1&^RU^(f*=kr_oae6j$ci6kJsB$+s!Bsl4XhnH}n5Kw_w3_+g}u^QBm)kkWAe zdi!-+?pCf`-c~-L=3b$%ecY1b-7)4X2L&Q zKav{5&-4_FRBrP3M^lUb!c>nYRfW4xk5R& zuKQLDNCE@^c`4v1swpxk&gItSwln`^Q2b%wux0VFE3v|~R<~5QcbmyFzp~A-&^Pg& z3bfp_POz;TD_B5la;cwetZeSI3DM@(xvk{Ta*ZL4cE%ea)L^|TVP9HbY42^{e#=K3 zpy)4IEg3sn@&Mja12tmo@xGUq$2dmZ!Y=iA**lmzj5{zpIG<9VY~HQkeB6lXhJ@aa#Db#lG&Eaqh_(n3=ob z-BM^rxRt$izlGfTeQ0!}#`W#xEQ$FxsJa6x8`Bi_9fzT0g<Y}J4t)hxY6ymnZurvCtp{ya5iS&fv?Dq6@3rprjl%WY-9Wnc`I8$FhWl-SCho4hxy)EPK=bN%Mx z*HyHGeAa5W0EoZcBg{lE;qYf{XQX6w@%e2-ZJ$@hSJG=;Hx$;pn;{>P9bHV2AD0{v z>{Z-0yjqx_Or^6I${LbWVMyI=-Y*|L!VZM+iica4mvI~56S%Gq9qs21BExsWmBR~6 z%B6ccq@K}zRX(kyHl$7as$;9YO#Jjl@>2MnAUxM!5a#T2Y?m1}DVw>%vt#Ky_HhN- z2XBp~f@#k9(Y4y#TJW+}Fepw>-cAlLL-39Mq3ZKj1tWc2o|)foCnyUj zb30^n=5y2q7W~woH@{xza`JMfv62j2deA$6UeJH4KF-9{Od8<7O&r%ebr*GCt@N*m z+NX9c0XojJfgQ_VCtuLuZQw!I69Se#WuGT+b(gC9r4~V~f=L1zK6NkickCbMUHO~& z#GtaHiTIFAtFsR-AlnyU{;3EvNH+wM%85HYrh%i^(JT;OKT>z*Ou-ZxI=n%`4M2n- z_zG=8ryz`JE{aF4xd{DvxT2elP>Xq2Crp(0=tFOeEKjN!K#DLyx?#dXp*Rr{ebzw7 zwxM=Sb3V2yF-Z7;_Du-|(^neeyU?##Ni(*Wi?Sk7ARs~@(qh7D9-tR`(1vP5%U>L8 z7bVYNu;eZ<^vScRMV!KsFp=Tm#^SkO0y_((0$w$SqM#`ZdXW!E^TZFhL?L8FEn8E| z-;E$%H`x=)rI6m|#zue3x?F|)3A1R{ z587VqwzDx;N!QeWVW&bBm8 zwD&6X$8nWV&odY5%jv3ZT{F~0yLEio-ZWW>?kgKao&fkz0;Y?O>3$_|s9+?TA>E zytFSTHr?2+wMO#!jSW_Sw$#~Mg}6x2Zr!x@N4ES=zrN+tDlg{&Cdi=H=xZt7npXvj zUPKRGNsD$hp0YxrHC%CFH@p0GSum;Kh=<|_?YzdzPtV1N?!Y9<(`hb^qUsy1Q>tG4 z5t@hT)u`GYY*1yHX}I1i*m11~d_p(Uryta+SK2O*^?D(qDIi_~)1Q)P7Nwmg6D}4VLQHVGZr1qLJq3OI? zFw53^Si8;e(S?@RW$cF&b26xgyO565>qz_}PAEQfZ_XXR7!oNEdfmZC3le}6Tq8Y$EqNtO*3N6xBc1k_C zn0R(F=GN_g_I3psPwoBH8q@oCL^;$n@Gm&UBciignltx1%B}I$`5@Gyzdj zBtWGjA-w9>G=;P|Ej5tIlnYHq^;gl~(ZHC!DM01q<^7OjBJ0Th*ewOIXR*QWRv)F9 zj}(Yys$vUcuPwdNI(Em5<$#JTeylm9#rY}>nNml(S!VszJ(d8`;L0d|!cx8ip?3(R zPP@~pDpvA71WoSJD|FWaJj&y}<=_ty!Dg5vql>BtGwp7gu@fpGq$H}-G%yc<4u}a+ z$Og3M!;Ta#Z;38ryM>MQS*s;?{$yE+T=@2%WWDkvJiM4J|A@xthIeZoJVxXPCx(o` zP8!s%ipHnLU#rWSiWzvamd74UpQHFhQ$A!N;ju$&6MMeDi7Z45d1S54D2G;e*2ea% zF0agL=z{)Pyi=r$D)7O1?I95%S+>k5TX04YR^x=Dk=+mK%m#DX}c9^7`_Vt{cu?5-cNPt4Rfy7oa0v3*R71@%X;{ z;fR(o{WXrJX?3ySBv@z?yPrYlW`+;p?3C=H(I;|MYQ{q_GoKU|RR=im%BY!)pK~A( z>;0?;;nc`TV?}d!oIc48VJ4V#{3N$;@-H(7>iRPF1W`c z>nvDKxea_NT3TF3ZOm|Ax4&qdEsUPfOmVdmy$u{wOfFQV+ma3)b>PjU+S63qQ>lie z_%7PUscEa7?6kt=v;umld>xjI?_D3 zI>sOFmJ&+w33+SeY`b_UoWe_Vv|N_3SBMk&GFn*il73R&I#7znnrK{&n&2Ig3p+*M zSCE2x&D9$mnfwr`JYdSGm<-$6ct7-L=b=a_)Q!KleCJwYG&p>?IHQ{s=&m;yPp^t$ zp30)4ROXgF<(o{JLELQm&A3dc$y-$LI0s{j90R{#d;4dUZMD(Aw&=Bd&>!vJPGP1Hwr>Cdl zLqkL5q>^#sHmmjUuDBe51v|CM88zRZulvhYI-KMpVF&x_|JmCA@Rfsl^Yk>_=6pO2 z4Fv^NT3o#J_7Y{k_jytjkpzW|yVyS&yNIIjzcj|_57NLa880g>-8SEByKyqV4@Q-k zl*DSiQjPBg{vn3;KV1LkTdRrezCE6=e0+QuH)+!+@9pg+>~|i^yoBTZuMD&bL!5{P zC5VfQhsVZ-CU%RJmB)gv7cBJETK)J)iUVu&OgtHdv0QHsQvCi>dU;!x!jDph2c|UL zFbaT#2!xe3l@;W{UO||BC{ZQ*vhSC&Th;NI(7UDJ3pESxV*!7JKT0MSK!UXgu_sp?wZHYqapueoLe0s(x=ue+4?6Y z;3I#pRL=oBy)4GY0%lfNQEV0mWTlZmoZui0DI|tuFc1_4!Nt{*y(E@3qn>!wN(F^9 z4RLV(kOzUqk@#X3;y@OI&QgAW!}Xk4-%c!=0h^MMmC-7Lu<%{AQ{wx0ic%cL6vT=A^Q8dCO5VnW#5TPLYL2x;Q2sf$@4v5DmjD^$Z5$tg< zf;+lkvbGv+2+x*df^yeO zRT!!bxI?0}$Qwsh_Bz4A5*FKkiTmRjd^O3gc0a>BP{5OzoaalfOyB%cXN%9OIIcZ6 zWI-^8G(Kk+S(&~x!m~q#@%rod-U}l>41!Qu-`Rw(3ZQ*aes~hsR=TAzwA_O}KoY&2z>Ie*MNtlwa*} z<&QOxl3aM|nxp-@W;?c=+vftT&&?~#4*uHG-cD|n9~{xGAcbn@3THg2ATT9*@zQ>Y@-#m(|jeWtk0mbFfU{fEzvC;^8_2i zf5dip!qE9XgiN*YPC_FW^0~2WxKroia=H$>&9>DJaG~7J7J!fRmx2JKncS~8ab>`| z*zFW05{nunhA{TLKzJb&N-A|dS>j^#n_=nkhq~{)f_d^_SPww}5Bj!NYwuCecwL1- z4p)q+2Gg#+p%(1|ic;m3XnB6}ruv1gO}HmGav`;MR%muuV|4cK&$h-MBZB5U@Hd}x zdUOAVRU>8&Zo%o`tQzi96+c;TV&~lT>K`D@6LT>8mY{nDvb?z|Rt77(&Tk{cbQ57* z&!oo@e7+O+mKuZZnR~R$>UbQ&2)y5Fkde8H1K$u)2+po!KVoBf8-ec0)aUuX7S0%5 zxF%+W_Y2z~y|Zq+e+*nWz8j2pl=?~-WW^{7yuoNVvxUbX^>w>eI6l-9Wb?AuG%CT! za{GRr(b}vvVQDuJ@-$oPUmCmZTxZsvZ79~c+$#?*Mg(ak1ufBP6iDGjEXVAZ(~F|O z{r4-jTO*cNS&7is*QW&F@f~QjA|*it_+NXQ59^t4rDQKDZp;KmP()d#h=z?NDAbfx z{I+V5!x@^JuUpcTBa}RdwO27QGEFyU!x1~*a!6JcaN3QGW~YLkN8>aLxy`sWjD2AW zVqG;xbW7pCXy z(9M(b0v15j_Tur7hsrXod`&5|-x%=&Ocd3oWg@ALntn8Bdq1Q%&yXb`NjU4__Sb8# zlu3RD*I)0-4os^6_0qx+T?0W5GRI??tEr+CF5YkU^ zz;>zY&Q3mT>Fe29rZOKI#!9?Lo&yZ@ex1J(njY9QX+y>$T3XaBPAvIzmU*hLBJz)* zE_|!cxxRsXH87obPded<6}?=HpJ3+SEXW2^^T45zPzMu<{ALJS9^`>w)NER_=}_7b z9(vX&f*wY_0G_J%-Juc5fHgYkoh``go>v@>>yB_@Jv>8NoR&;-#C}#}WT0!Fk2gZM zZYzeC892&0<8eYX{=LNjnlf^ekBa9&q8TBN159W*MCZqys?v{FesI8k_R3EG*TM=@ zrRdM`yBgBm2Rz6?;oC%6&AV0KX-1>GDCrlyHsZ`LS#;D;sq4OJkI6wgi>c zc37z*dDhCcbBCIKGHCiBWHg*<8#+a)V<|ba>`KDnQ~rTN+HD;}XbZ&$@GJx}7C*k} ziDz~=>hZ3WxrkO%??fsRf%Tix+`7glt*j=urYe^i2XQv3z_%NN_mEbo9YcV%X-9Xw z1&w%7-_vh~2}rPiozI_%a5y@}n8yn11G}N5BX~I)W+eMNzuB9srp15L9rtezdRi(e z3(t7|bw!rN5Bf5|!V#Xkf{seCaSRfu@S?`s2GCMi+6Xj-vI`Ym?r}!38oqj>OeFUA z=0RseH$(2DE1O$z7=${RnSe#B_6V;%Az(t3y2(LZ5s@M^vr@;5qxwoWCaLW|F@Pex=u@)seLd(5%iS;%MbkQXwr`%Bs;Lyzm#;<}v1w{c7CD!UsLtgIqK-y>%j`Noq+CEVP; zp@kIgqqLY=I6}r3EPVfE?;7;eefP8@qE3;q7n{S8hvefdxRQn?n5kH#wO<}6&zX|# zyJUg?VspC+V!e|*u8{N;+9Po1Av?|{tkkwmmv@dssn8^*$j{~g{+&5J?rvn~qZ!F= ziO7iG%SeiX0}@vdJGTjeLeN_g}VOp(oLQ1u(Gu|bPXm0v2 zx~&q`WbK@ynvfroyzU99z-i0!s{&NrPBz4m45me^9g?SW9`mkO$v`Poobv)mBpwv{ zo5dGyH@NY)Js!=(-e~KLw%u3%s6=XfzoK0_RcXgMz2UWCmJ$q9>{LqVhC||Hc%E?V z3L~8B!tYFH1vT23%aCJX2ZRv<5b%E#wN1Aj2-X_*f$4Nbl<5)12|lucMJenpDf%8s zcYE9uhTE;-*YGnVSv=c_L@q;rza6XPQQ=2nRt9Ip7KB%+!jJnq@VzerJ+7;sYXys0 zc}Bt#glk~V(n0>Iz(hrdZ)a;AI!t)vswbimwmczu8gUjew@o387YM(@JphQE9Mf6+ z(ZbolxuzZLmnCZvcyM!$Pm)3-qFly|%XO)8A?qkP0M+qip$*bkr)BLA3wBcO7v4I1 zT(Go8_!?_>-)%((A49tx_{*uYa_MCkw!0!_t6iE3zGAnCq|x94k_;G+;3t{+2NU6% z8Ps;TXu;WTghh_{+4P~N2NNM-5C2qo52~Qw7t|!;o5^??(#y@azPMTxfXh|F+M*7z zoh084ljFK;(iJYEI_P+;EVbSh=g4k#YCymE{R*6*e-)How^=#lZ~A?#-5NHfqTa#j zBJrHZL&hg}`#0rUs$(D~Op!w8 zaV@lELMiQI;ZXYL){0cO$JDUXP3su;d>1~V>OW{GUbRc}xPZ#}6z_4kN!;1=PI;hR zXSHO(RuX+Ng%zv2zs`oRAovN=o;U3Ax)!1IhwbI<^Eof(G%$@I3A5W~y#2Nnk8+Ew zBY;ZrGaBdk@3&0~7nG4No13y%wDlUQt##Gl8tK@g#q&PP1pGp+%@`(v@2+F|!k19F zUe6ee!h()4v;4XZc!NdK`)0c)Fc^wpUXU=!rj86*?}Z!cVW8N9hS*c1nQXc@nbGK(E)SKx z-gP}B81@`WK?%7tnI4Pr`)NNvVT-zsv-X76Eu9n>IN6<{Q!zdw-$Y?M_PN-izDZKVEyXC%Pv|NDUVRpvl{b3HF4*;_AeP1J6)ddLrkq+G*7>O;g=y8O} z12+=LGokl3=FRiW;#{WFjfUEKFZi8_YPnN~!I0e=tnm0lIXP2$#Ez~+9H|2Ir*G?X ze#A-AB3jA(dG$mk<|Xd4D$z3lcP!>OFMS-|kvL@Hyan7>GU4KR zEX^uk=c->;nGEahXH<^FkS-xEzHC!?KLDFEh&0?5W9f>+$6ka0+%8_WzT$xmW}ho# zHmiArtv_ObS*()<3yAJdD}rvyu0rrG2bXWV#tU~sYv_2#VYv?ft$m}uS5-;JT?Ztn z=$|6I7ZuttkB~TAItOuckECP>W!<%$uwSps&@j#D`xP^SBX5EVz;As&tfmk7^w*)| zRX-bKv`oa2YIa(Ok9N?czp*WU@nXBq)Am*n)0D$9mZ!ASF6&*plxT>|Uj%}dO<&B- znta~fPDnHN3NMXY~7Oe)}e85v@GJ);lSt z#yb>~`ke?~e>fy(f?--(6+AuIw!e2JZMJrB@~66tZK@RJzDLu zVx3>P>~FMMh_Cl!KdR;nADf{hO1RGBXuEvQha2e{xbE+K-6_04!!Ipj9IW=SaNIeN z?j-D5vOS~NLm&HhFK`zfl!KvOFpf9x^<#n>o-%+9ZoHyF!MHf@PjvFqo`xtS|JkvM zBP#K~`aXV;V5TF5rB-V{X|0q_2Z9o(G}ejf*Syy53Ege-OgdIC^p@L9Mq6Ht2Xj{MhW)A&yyV&}=nWP_$-CKDWw#5O+Ckh7g>z%&dnQuP6NRzT*QsZvhTlP?YO$ zRG%#FF-@mR^ZHE{(aAE#v0se4FwHF`ZQ?0zKuSK_iMlc4rsx} z6>+Q7*Q7(mW^U!QY+%o>%7_6{dtyHw{0K)-bFR-vjvo5b5F8BoEgnuUT>|*wUn=ob zN=jAsAo|vrk)SmDWyhjx{wHX>e3%)!;|U!Sv5S zOhQD5MJ`f$$B{-YGXDs~`@Y&8u_;D|GOc=frc?JC!`IHSPZSW+yz^zAYa{klk2ZBy zvKZ)KzcXDF72&2V`!?p0xEejmF z$W=@0gxB_$IwOpyDUnbA(KLO2FPW=-dWjaWhvDk?=j44XZ zVUysdr^BjRB^%cbj%vyKV?&NBSFD5VFQXAc`vYZ`y9^hetTSKZabYLFAh#RJ5|(vC ze$(w>1EcWohyC{YyKcZ9Q;EG`#JYRT@SqXDW^rgKU}C=MdKOxKpTsjKYl*(N2Mg>3 zkEgOH4>V}PWK_dZ{Z9k*bAGHn+F8?e1XdCNH3LVOzJ0gNT$-w+g`%D%>f|NCVc%UC za4tz4!>ce6zM{C&%Iu>>@W=HmfWh|6DP`T|GS1EKqCaGTa<)ldwx!jrYzMAzROx%7 zrXi1E#c(pYhcru{*>TdW+7kIo~bUkDRW?WGs_%r5iZ0*%~9`iA_+d+TB^*<%hvRUgl8% zo}wj8*tyReCvb=D$7cQ^rcn=(Vs#?4(nYXr8@F_s)GvI0`dbU(3m*p+Nici2pSA##2nx`u1Fg zDe*)tN7#!KMxy+cSd!~01>P3s2fS=~7Lr~wypPVpBoc2^AeGbEl@w@0>KxWVFQu;# zOWBD(`?-r!$0gX{y+zLR#er1Oo*r<^Hk%=k27aK3r|XUKXawGdKf#ovwOG4{P9M%; z;_~BKUuhC19@AXR+MJ_=tE5<7SZT(V;G_DjScE39gA*MU#OqiH68Zv6YbW=Rk1yz! z!qeNc)MYMX@=l1*t*VtZy@J^-!=~j=!2!oIbEOuE_}Ra(aYpAy)3dcnjx~_noyo;T z&YH!6Qe&EKx0H9?oq10fcr;9xQEX-_*s->9t}ThxV*_5gwCH)K{O|3*Owj zu>`f;PbSMr@KvuH{4CiCaWx;p7PI95H|+sVT**_-;HWnJ2j)RvOXY9$Sgc=*W+k)J zzXW%mgFG9-?QzfUvez-!@%@m_EiKIEUnuh#sq^Bz|Kt^GT(gIWQ_p*x^CHZ{NV)5n_hQR60i2f3l5H-;aimAXf9P>sbIpZiUlqVb!l~PHr@pdMedcEj-+p6mGK?iK$pQtX^O?Ek}4H*XDqV=^4ua+40#l zt1M&dm3~rKZ)4Bste*9I?U~$KY$e5^TEVONWvRdfg=RgBkbbZ(NR*2pxo}Z-q^*eO zBIpExwEbSq9w(*W?qe6>r*FYo%kU3Ia-s}@gEoLYoWVtYx#o~3^irS6j}gP;>d%*b z6P`11{BVUX=>0EZ_xyu1YHwaIg8C+kK`}8QX^T%Cy7|{FUDf#&Pn@<9`Drf?2iw@7 zqGYfDmuYu~CNsrW?K8+iy*Pn~{LbvzL9#s62~A!B3@y6i7Jdf(PO&IWmGlt6EWwc- z!H9I*gX}#`Y0d7%@NsF_-`^xV`1%>+o`M6>Bf@N^*o`g^D8Gr+HHMqT!-i(vNn~mb z54G78&-|&12_QqDEF)4S(9qFq#RCkjV)uUtMTysO$xGh7NQTZE*Sae7z5at|h~$)Y zPrGJvUn7EZsq1{s)X>fQ6R*y5ftaa(#H1y+ZeVUn|1H+>qJvshYaxQWz{>v&LSEpW zxF8KaSf9(7nXkiJ&Z^4*|I9#?NN&tu;k|^iq!llgjqrmG#%mT9=4DBD&FhDu$0>T1 znsPIqMZ%Ogk1*h5zbt3D@=t4dBn?(4Wy2b$Xuc5Co01^KuKI*1NHpG;_?KdTB?Yk> zt9`WUO!ICM%MUm1`_FLE`0YhNPOiHwFVbZ;=cPW$0x<>uC!h6PTkNExD7)U8R#Y@M z&>oL5oqPi@<5pFyH=ZAdG!HT^8X&9nSImYzP|1V)5-nu`w{aO#1@4*dSz-ZTbRw!+ zwXUX{jzrv)Y1DrJ@rBwD9X0k(Q6F{r&QpLhz0c;ubV_L7t$3XMHmCFb>hXDPUneKq z-Z9`mywTXuhJ>wK+&IrnHu;huPiRk@&*+x0712TW=KqKAJ)ZO*A?9r#AOSaKMI=5? zJHEmSkE*33lPkeH{*=v{ryebc`Q47>m&vl(XDIZVt;F7g!R>yTG!dezq@Q78v?*)B z+93Hlq1KJqU&NaG2+2)VRJ$tmX6;OkvvyKBlZ6J3vsg4gGd)@msfj177DuNYLCCAB zm0I}pED6vC#ciq#3csVH`?6&PEIy7je?sSn%Zr(x;aqULpo!*o#VOEI^%ju-o;|wS zv&6xgR09&an&^I7VqJvz@NOk%;EX(df|BD$+@1hGJ+z-d2T$!6!eBRcOcsuBmN8s{ zC(Zb7Uf9+HEcmqp%bXV&?jR%a;d_RVsM)`}T92T!I#)65XC=|#ohIU$hyun%`X^*D z{COJBpFMI+vy2X>@kbWUIMYnlR(AGfGSFuD-_iT6D%zqE-&gfeE}wkA?2$Ld(|iVF zDO@;kHQwsucIqHgFk#hNJoi9B_x_RmC!(U)ZNdy6Z{pG2?qo*{O|uk)CvHh?KD3@R zt4%#Wa=LB}Q)Y}ablt8+2^%LAIv`}Re&d%qN7U#}i+yTRcU8D?7r3+XaK5qpnVtUa z86bIz7dZE&V+`z?kYCA|H$R`Muy*G)C;eQM($&peKP)- zbln!qhqWvxd#hsg>xI8bIY;woiYecZEPO&ma&P*m-0)`3(;W~ z%pX$aMLMn;sq*qU1)B}O%FRwz>qr%@S0PyOr|!NMVQ&icE?=>pcdKgL9ojni(#5dM z4v;wic7yy~JEr!;tJr=pQrCu1r6dCkrWEhUkI-clSQF>HAS_=9M0$BC@jzqAceLad z^o+-DTi!4Uu-arq*~y%q)(poQ?Z=P)5(LLR6b1G>aFgSt=EQi=MCFHXql}7ybuAgr zqZ9GR0SY?xJU)9Fc&m?Zhw~Ra?iW^2MeObIx0})6TW0HUkOcygI@FDME<=5fGD=V7 zEVWCDNrN{Z-(N4%Q*XE$%P@>9R3CNN4(nwm%C2J`nv!Tc|6jL|71i(_{OR}=Cbr{R zf;ih~RDY_8UUehXE(Be|G2}tWnnL?L)qJHb7GJ1F<5JWV+XpcMC%j6+GRNQUa7OVs z<)v@a#$VERpa9x%WXWeX7_TiqqYKUKyUohn+gvrqpM*VhiLf^Yp*rOU^M8}G5n>?; zd_Y@nPdKSxcswH3ztm)L$`o8C+>G^9DBZtTF^tg?ZzOc3&k-QopuAbs8{n)NMT3ay$7y!Q@lVg zmICi02Z7vhe$kU9`dJ9Zed=vrDo!i^SXV}))AmIT=9cT*%htOkyCK`v-U|vBG z5}$FekhrJhrxkbG4g23ZpI2}61MZVW&MMKBK}qJ*y0BXF35JiH5{Vw>xZTxi#PrvD85bO8*oZot@5Y>HDau+N z$)KCC5n?f`-gWMK<$_2d?@PmEU1tsRM%i~27LKfq2mNOCSx8l%AxR5{GLur{S5h=AqVNGL6@w#gIpw}{PmDKi%}fjJLW zD+dn7v#oX{MICaXunQB8W!&Cuz>l&mqt>eJ+K6J^Fc4CX$!{oL)p;hszM3UGi({LA z#DfSv4-!QkcvJD^eXX~TD8j`Y68CZ9?LA{p!E-RyiQGxM-6LXnWsFi{(?J@BhsVCs zTWc|x8c?JqSq34c31teUsu>IS z-nh4Q+-WCnFKE*6&pEf6lr2UYYB?B7E%@z6+^TN3=0h4yIMIOXQlDVZx2a!Lvz@NL z=`=eKH(-ySj4M#Ip`B~ z8TPKKcuB$yy1>Y3(wrU}_>=&(FY|4}wHEPm>1GzEIJ}x4WTYu?kLrCGr`CcX~l+5sZv&bjr>a|SR3Y^O;fP67YOMA*caNR$R ziLw!Q{_1IXH#s0SH(Ev$*y5V-`uKB7Vu_6?u=|q;MIZ~l_-hv}DGRn4z1rv&BBKiO z0ARYP``2?p{~k9mU(Hdz+TAcz<@PHI(hst~fjMD!-GXRWI;~uLWt4r+>d49Z?Sy!p zh<3pRL1kjjE6b(|iOtSQcKS@*4gLD}2&6j|n9W!J7au{N@CKLC#|gUOavV%?Hnlfp z;|CAxl*-!lz6gLlW&wrX(KXkM5hD_p4|?K|5f!I0#Z6>FIy^UIdTpHkNtAic|DRe_ zl~&Dz-3@oU>j`6Acd?;Y>EFKe>tyucsREw=AS zHyutfA9BpkPWBY^SVu2~vHhPWVMasi>>g%7mdIbEbqgpDzjd%^OsLkgyMsL!$oX|# zPokL~F}kNG?=LZfV$-Ft>9pzsqeo~_Ftrk?5txj*~ZfG{+I} zeg}!Oko*%($nJkEyGIz|o2_GbX)g#o2x0JetgEwJ@d0ro_(0g1)DDyeh5>I&Y2Cow ztT*OM+SFFOPYMlw+zcr8><4ig03AV%=F)F&$i_Rc`mI`uI#|y6Z4g-QEKH`c60aJ` zv4NC|!rs{LL!<>XYCbF9aK3LKD;!q_$;yHLKdKS+m^ENiTE+GpH?}uJGxKsr;w=Y;zH7Uz>pC$-N?{&S&M!NYiu z7a!f|%xG`13lHm`Y2hc68sJ*n18YiL->x!}ZJ@2gO?|FL;%&q)-_+-#?q?#-3Y3Ym z*oM@VJTr^N@KR@8Ey3Lqy)$@K$7So6)H4VshZ{}pWUYV}eZP^z>0OO8=2xB2Eaa{Dw?*i&Pu#~pHnCH0GBN|4ewzP$+w9=5&c83F zy`=#BkWRsBO-~=b>>&0yMH-}V6Jc6gJ?N}$)j8#P>W1dV5pSG*=2u4nLeX~=cvgv& zAO`h|dLa!0RZDh9a?_N&zBn~1q|eE8e2(lD(X69qwn!=WRnD+XD{~^!3;=!dUF61L z04LVh80&RN(Zp)QM@EA{Z5Z|hCItLDr0K+C zSN}I7II|_~;qC6|P2lhu6wcobmjN8@qP528E^sve022ZU=rhXAeHlreDgExB@;uw3 z9lNJO&rm*dfNN#C66B_@&%e+%_B<$}E7Jp9r#yQxgXw%vQMb}v%siBc6Gt=s_V?1E zJm@Brg3+2R0<3h&DR1)qS=-o8C2@Ix1!ZQmCmDp?J8X^Eodw6ANd$$*)=ny&@4kdF zNlZp+4C+;Skv%NewVeb~%a6mLzs;WqIf7ea zIZx?R&(Ej*AI9D}zVaYg^qfqRi8Zk`v3+7rY}>YTVq24mZ5tEYnb@{*;+#0yx$nJu z_wMdz-|qiERCRSVs_R?bysWz&@%~~m$|Cbt&`CCY~vo>96{$~9fQ<(05ZGT%( z0{N;T{snkuiM<*$R`64$euO&qUF2sLJP~?do99nZ6IwBfh7jXwXK}9)Rxjh97_Dc< zIG9qD2eRQJG0!O>&?e)Jou?X^wB!2wUkK2_@JI&_%QEp8_l~&hmlL|Q{2QLCvk`fj z*8h}q;hglP-5U|FH@Jwyb0y5mR=Wo#5LOqa8VO1Kbsi{Ig^$BSFzMSv6IzrsibAD~4$rW9pX7?JLEI^#%xc zM@=cvTUUpLyAIVa6)tB*M2RnYjw>vDQ4%4}H0~gS3_3YMfwA34#r2I)D9kr8M07on zLIowcuB@F?pMSgjV@5GEZw^uX7X_kbO&#f}0gk4UYD-lx8TnzJ96wGCcN_Wy8};Nz z4_Da8nt{JiU^@+E%*mk=vl`lIc{ERb7Ii=t#u9H(Fe222^dzHA(gV)T87S=>-{nc6aZ`#y1`Q3Bl z-GYX`Xy+zlb5+g>9v)>dJ#&nEpF(HB0f9Lh?f>X>m#$Dj zCx}1QxIsik;h+qF`4`nhh*`Z)rYn7CiG5j0F73NU>q%x-NWAyeJHxQAM;8MZ&#j5x zY*rw%mDj_~>bRG>mN063#)qck-4hF(x)DcnNf$NNt&8d(&T-D3B)D=(KF2iPY8#j^ z^3SE8lC3kyoYc8V9cUJR?6>Pl{a>tm$l=6fUBEbE>xYcfo2Iz!uP?^SUn5D=KeDXt|7lQ+zJ zYg#>%&4)+JJuq(hYTj~QYa&8uXf&Fp?2{F}EPu~5>#XYzh#Z%je zjhV9JNYm;>Q+2IUV7|5vzg(n+z`&Z3P#sc(>;Ix$dO>0V{P;BTxdOfx{12N`1PELI z=SFh~)>0Z?NjjG!qNH{mf$E%MBN5hHYr%{)S0ZQ6|58coo>KkSkYSw6SF*a4DmKN^ngWz z{;!-(Z?!lH6BCNt`BLcKLb*!+7vIWR%(wq}R;}cP;Gy$x;08 zIiA1_^4_gm6aW4%dM+1Y@c)&=_`gGd9D{rRkuayh!_w3!!~z##vSRz?wv^%6N7-J?Q^pZAcKERSw$(s0Yxw!V~F+p$?Gd99=lM?nT@`<_pc);Rg+UuXhe zm+}l68*#9O;l0IZnN|(%ALvt>)I1LD)M4w#}O zW3EZ23+IZOno!wWniP6UTW+SNM=Nt_F6YXN7(zg~ zyY?Lf(QwO+HKbHMPt&7Qa$|KkRs!k2?JKD`%-kDY`ZNA^blrpRsJuTx$+WGX4kU{D z+94AgA~{-P2G>0aH)lt`U;GotOdmD6ZU)Mh_q4^o!AEhZQOvexx-md{LeFKD&_cBG zjU<%ns>H;^*ibvOQW|vl5RH{Gt-i5Uoh zVr2-v;a-B{tG{Ilx_re}Y5a(}*hoT@@nmto;5Yvt0zO}`=yp>+U~|ZMAJ6JI+FmhY zq%@{bzJ6x$cpe)$*|6{VV!gvc-dFeCVL7qvUnJ;JbEFw^TGpLk9H|Fh68PK? zX*}&^Dlj|Dva*_&uANQi2F~V^4y5E;drz!1`k}$Q+CCH?UH-G~jWalQ}YsLm0z~z+H!tkocDbB-K8bSVYJFe>Y-(kbT8Yo^rgIFfPSE%hb zA(L?rL1R!@_C2a~o!Q<*+yn5c>+#~FTev*@61*0=|MW7B!eRsF^LZJQ&}=zQi_NXM z#`Al!|K^v)hGO6kX2GgiMUrqYMYi3$bv(eHg zC-C6zv_?!7nG4J0rGriBg-Uj5i6JYJExkDTaJ#?5_dLaTw_)26Y`w;C;N`8EK5iw@ zX8(vZO=ZJF)yd!1s-_DXQT6_;-eY=tV)w;<2C_2=D6>wVT_Mq>Jd!gjreW^^KReO!!R zX%SDCarcJ>qdM9>hBF1}QwtTdoW7cbp$xCU5arTxDg9?HfWBWH?Yog&<^{JAC~pE+ zqKpp1?JCW#Iw{j)xl@}r_iPGz62~3PzPnyJ8#jM?3}-^9ZpJqzeX``Y+6jWa+=d|I z1%fWKuZAZMGwqsc_%7#KQ|$Ww5^oEa+I#HIj_uDDPm@%wq+Cdg9Xk4QzEH)9+fUjq zC3~vgT~3yh*Y7TX*6$zZGyMk=nYyDGVB*wO3VY%vG&2IN96rCGsI3$SRi;k#pAFzL z?teCt#iTu4HcB#?XVRPYnAp5c|D83cVOU*EvyyvGr4xa_#$;q-N<;KYv;1DGUP)VS zHlt#s(iyKTbz=@pG|;bBrpCxhxl;u8c_B28!FKh*5+`SzfGnx2T_wy>*Shu(5A71o zemsjOLR%aBi5GWM10$jvHmt@n6g-qX44P$j)%eVBhz-;r8yR4 zzOkUyY;A4LShFWd7}O-{mj?D#1@!b7guWC-ix-AspMu734+mM^(z`qP#%dR>cdKuM z*TN6yzmkJQl-CYdP1(N-QqVWeA<}X+>x@+?_QyXp5-MnCL->7sG~c?D&EX9KGhtOI zmNn!n!G&*%TWM@Fw6{6@5;HYA-xoy zlZ$}G7Od#Oj0?3X%c0)AvLMzMzR`GDv1jK8d4VZ5FIdcZxaqL9H0-o+>60}4`!~`X zYjvs^)rJDjzWi}>2n{{6;(mjCw>vx?RahEWo~~8aNgV*4Bh|LJ`}jhZ2`K-ZO-fc) zQB_)%v{S1gru^G8J8|o<>@Ep$+?j6PQjw+g$h2%Yyu8)+Yq#lAZD(|?Hh!&ES#apZ z2nm#RfA>)RLyp!4x+x?&bS>Oub3tXD6E&{8+pm+qv3pVsKvNA;*-{&OK~{*1Md~zY za&Kn^gMI6$h(6nHuuiPr?r*{QHL};R*v8X{PTl)&0%r8_|Ebk z=dJB=*9+SC={Zemo4&Iyh;L_)pb<$ejpI8=guiZwJ_I%FGfpW<3TNSN>_lvSw|oKT z!Vgjs`&{@6s`n#q1uT+AT>1@!a<)|+YH{(?SS5)>w&=ffj|tD)<%mGy40I+Y1$f=+ zvJB>s@?pM zunaaZMvqgV>v)^^u>tRX#owV?Z2p67V7mlV{6Wt%c;$MleJimMu{sW_v2>1=dUO0s zyayZ}ia`>lL+Wn5Is_@g@2En)H_7+xP1fs>kM~wEOfuZfpWRp>7`}*{NTgq$FC^v+ z+hK!Clc=K)?sK&rGKG!|>%5O-e(PR%j{>*s+C!nce{Tet9VV^Wv%pY6Nth4w-%_$m zf6zfjg*m|%)kt3IRIqW)o;E20X*|7Il=Tu{Ia7W4aNC)RlM0Vlgc!5`U@|Nk2?|Nie1=zThtq3xQ>q!Bm35rKD=MDyqeo|E?76ok&#AIk74JOL9Xo2vcz`WlMbF*8j`LY{x57J8a1)#owQAF4i96~=GI>JiUB2bbGo5*hIfu_Q@nBH z-_9(aH^OpK4_2eeV#naNw`O=d~s~CRh8R;bCN4hhK>B1fkE{!M(rK zXPSq{wZCfu0K9+=+v3G^5DD1)q9b-tsJv`j)en)+@v|ES`U~-@K%#dXk z=vj$|vm*hO$szAfTP$Z2--0XNv-W$VB;G0ma5jHBvB2{%zm2Tit zdgoA-sJg9>BUBw3FW0YssV;RdF0e83gIIv*^Pyk(<-;&}(?1~UDQL)P?Q|f-n&Sn+ zjyX}?rfi`WM4`kJ91sbzdk-B{7ko9+7j@RwcK-I(&b4c;Bgpq?0U{VWHrp z1hJ~B3fm;26-d1!t1&gZmZAzF413!GCQhm&W0=>QKHlMrc`5CD6DfNOM#CV9-K$xv zb&1`Kua+NQwiOc=M(aF%W>3p`NH<}9MpzzprnMmyDMxmiPgJ8`pEOXn7nigoVJlqC zI?zz`JXU_a{s|ab=N%CUA2WKd*}!gSOH6;EmGI8tkC*nN0;)xQ#&_i(Kl2Lz3*&O_ zd$oOUpZlIxt^~a(CA4i{ZRyClPXN-D>juWs*1{Vl%#Jd$8%@mQw7Q>BH!z@`%xGIr z#Qa-7#aR*($5q`&0~~i?U2PX-2_x+FE=97_gqSm~vG~!5g^@CdR5=;+LW_0_(d4st ziqT)4R@%`yn16irc({xe`lDCf2q~?R6$674nQqcZ5K~pbQis z3wfpo#-!@a7Re*dNi84TpVwLb%ODoo0pZ68_`c44DHb|fbXn;UOs}>77CyUUY#2L! zCTq6RXhzO@7ey@;xg@1GQy@&gQW^dVz7W#R!J=jI`T|!Ktl!l^_IM^m0LY9b4SpHu z;6piIz7R6*AuYqV7cBpkzTLa18>V&TkE|vJRg;<|tPor4vK|J=kmXGql_c6KgQ1MS zioJcqcK{IPH0vmDr3>!3^#7>aw$?D6s4mGI+>wwNZf$1H6U-MiB7)M%n$ ziFr|HjP92M-VH$zF?%na5q)7A|5)I?UNY0(uVxTM;c`sc6{3C;Ljha84T-Y7j1TXNtNzyh#iGX4WoSR+ zu{UJ4%PvtL%aSF<2(%_=xm3)QF({eHDR28eo9HBQT4!iX?9cWQy>O&nvj*i(Eouq^ z1~4#dZx*wKSER^{i?jF95B#M-aN;RMRW*imTJsk0LdS5b}x;H$4Nklj;GwlyIf13_%yX00lTMDQXHwE zh=KRhd;h-Jr=qg>gvFHItHq)3TmmcEeQJ?Tm52xG->*Z$FGcgBUdXUJ893-I&h#q) zY!8GIVEdoewb=N{ICms+EBhjfS-xlpSo3@E zgdO?tQDQ%0=S@rN+kEj;_U_XW-nxy99X153U^>gE1)JP3m#+As4KgNxV&)LMj6#t-^?mnH4E%X4V`k9H^;W*{@HC&&+a#`+vj|SR z9}CkKM#q=IGc%AOIh4arlk539nUsK=5p`2KW9B>^{DXuzUU}VJlk(d4fj@WjYIOG( zaj`4FTQXVKtk8BRUOs;Ny7~4kYFgA{ZW_&}b8C!Q(eStoOI;T@zUHYb- zy`b8J6!za|t}<`+p5)elK=DS|_(tc=NHggeuzAp3?UUYx@yl4Yn@&)L-zfX?7(}UY zt7|RHlsj%EWMz}&t_Idq_Z~MbP9ZX{^PPbA!6^AT?NI3%jxnH>C_z~$@g<2n$_K~Y z11(k|s(h_VWJ`RdT&6lt7?szOaJX2IBoaC&y+L?b*Oj>BDz}$U15blcT>>|A48N+9 z6EuwI&*&5Si-|a-6|V?T18+1P4NV%S8^(VezCCDj8Wu%V=!E-u+`tI4;f`d-+6gqx zoY5kkKrAL-1fAnXSZ>7N=cZRZae|aQ-qrtQ!%Bp=ciWGQ${efAF(sh`2i06rR&|mKlK$`AFsMGRziq)R$!^JL+aqbV0=Rf*oc8TeZ4xHcjbjMW<)uY(O$Dz9~vdYPDwmuy}mA>_5dbupK1JF-{d2dTg;nT+IPK+WzIY^|d}o}?Gp zr!g%*WXOlI@`#Vg;=}gixet~JXIpxx(D)hr!P9VA(J2(L#8FV7gsA#V)|HayNulSH zlc<<2f&4_h$7dx#vh>RzQy4khZuy0_65+g-G@qx3f=C9r*Bv|lE59uK^_!b8IMnp5 z`HG$hM-U6bU0gK%F;*N5$`@&z?e*x66Za4 zG3`}{d+psZ2?|ASAtdBONL~mcO;-pMwrHmA?fdfyP5XJialdYys)R`3WN`{ z`VVxlaglS{>fr>d;MrpYP=tK$5$iQGjg+UG2I`J zm{>D6bNNl6nJ3W~)DO3CwHl9~i#xzLa3!(VVPJGOs~Y2g9m2KshVxG32jRg{o7Umf zci-s!s_!cI>j-r9ZpVjwQ1&Y~C&-wm!Sv}V6432LbBn|t4_h1WiGZD_o(J8y?Mal& zv^6%~^|NCN0F)08KJN)sPK-V#^28WhEjG0n6V@G}d3qkVx(`7zolij1*Xtk;vv;q} zjP~z-L+i&I+>y@57I=5W+Pm{Gyie_LGTirg(_-^{cIE3~hs->Fhcw~+RZZP3z^FSN zu8tc5_vk**kc@AcoQHF>Sz`S0IKA_JOgz}!Bx39BN8rB22A$i*{GADX7+>Ce7N{R| z;^oV7H==-gs5AH+I+Jzmtc^=J`8$?M|CK-mX1LHGKHh}wO^rGo} z6iPd$IUl5Xk3=iO##p|>*`fyH*9w%jDL15R@ykO&=7;p6&D&hGKuurDHPw3H)G^>U zdWeGlr%p1kG5U5_J%6x_|N^??VQ&XSPA>6)vw_|}O{QW@Vs>;xki%xojJ=~}F?^fFj% z@7ohwTcGSq`QM~+w^u9eo7w4)N0az|cSmwx{^$?q{Q=WsG3gG4YS3<2%ad{Sz!y>( z1R63~Tx@rKvjE`0Q}Nh6XmsQGtZ3I|_aEP9!C|;R?Jn$Yu5^=Qqa}v@eUd-JqIap? z*$FUk|Gs`l#}XLaK+F;9?w}dE;XA_IqXk!}UZ z)`-aVM(JzgA?BZZ(dFB1{2^r(GW#yE2Zk84Eiy1ZzQNOamZ=gRkY=5w!l!urV4+yt2YsECR) zp3j#Cv_1++D+9m{1Y|H&yHDNx5t3424Zre_QXJ?nOY+(rm$iMG46!ePC!`_XfA;S@ zw)*;loDpNVtgg#0Tz8=Ss!;_r0E#ECGQcJcli92x9N?iHP8QKnY|!MB8wb zL|q6>ot!B1{vJIG%{+xH7Da09wng8LTPrU`v_)`kTWb4$Z^9IP(O!_#*rw)lIq*1AmbUr z{X$0g6Oc^q<7`n^&>4e=m9&-F=5G7sPN{x~)n6+Cuy23H%3ABf(Q( zr%1~?rW&1Ka+x@a6Chvd#%m$mQdGEGd#%!@`W%(#O`*>dw*{jYi2FQj@eg$MJ&`b$lEoEu-U)Nxzy4A_-hJLyZP9L3= zlyDe9*X*qR()0FE7_s}+>aKxXv(=S?sM8aVGL9$0%z#N;t$~*|%X^QW#_3T4|Ac{y9M_e=rD!(1z$eRURScyA|jW!Add%^^Z`{xEd!lT)z^BJ?e6Jjh{X1m=K=dfgGLl9dj8i!BoZC{oP}F(DCAz)J&KEh&p2HEi$4){9uAFui~O&*g=vi6oY=yKE)qN#GC%D z!jXh5&Mba|?v+UE-4HDH&XTL>7m2Iq#Hp#I~;q$ zq_{-(@>>?rPvmp&;B4;9Kz{7&GM+B%ahK^mtT?24h=cVv1;_s07XI^P&C+C%d$nk6 zWg+G-JsIp!v6!VS`&}qXGgLCl#@tl*MMeI7b3b9HaN>BmnJO7q;!(^Q_ulC1MPL6+ z{4K^cC^s9I+w7pRy>+r0#wP9z&z6`rG;JuId`^^JMq%r2ZmeyXs#S!i_N%#^0ausV zK8}D|wy2LC?v5vm!G#$*W`#1(|B4dZOcM;R1)H_rEb*dAZrN(H6K6JG4h`-W*ryMx zuqc;ZDqdnGwLtAndDk4TXa{?`n44_x>W@leAcV$UQZGy4rs@TML}KI+ZieG!lnZyj z7nx~N;3&h>-s!rMuNStT=YDmXpci|N=etQ(IxA|TzHZbQ zE=E|hn$hOVKJZXM!|+H3#mGWRVZ&eUtNzn|qoX8FythLuw8IA&0bBzrtDzo_M%fNA zG8rag^1$EdhuKez|3oGpu})eD*{d|e|3z>Vsp0QUoZ{btBzie1qWTI)uh)&;A}cMy z&vnmb#~W~+Al*ua}TXHpS^lGC3bJ@Z`j=ApJ^cK|yz-8#CE_|oqT ztA^WQ@GE#6rn!1(MdBk&h;slAg+ExdsJ`Dn3Zn`kC$>vuQ^;np(*FrTc|<=R76ryf zu2Fjg-`iwhNz1XEsSm`p9Z`!FH&U(g+qU14cgTE=LFooi?+XFO)*$1EVNK7jtZS@6 zf|T}*O1|q3QhDx_5GnNi5y95l1>=(7w*4N)WSty-YzRKiHJQ%(+=)9r+L<5H#fSO& zsOw9S0uqQF=kwV8;}B1GNOTz5lGBNxL-_V19{$m;e<@6|O8W*Y>uhT050}M`tsOpD z7eT#!@jvH`fS2z9?y_wNas*S=b&EJ1I>q2~;j&Ek#9X0d50n)N`Ly_v4=Z#l&`w0O zFMpQ6T#qpg?`}`?1$g4i)SEuzHRWywma7m+2tT|(4P+YRi7iz-m~Cb}uI1LnKNwH` zW!l+SjFq^0qSyjD2;}%$7FCVoqF?p-JLCr0v6nj^$J9DKJ~$Zmr>WXs+KLQ=OzNC= zJtPUaKFHv50}J#JuGf}FnD;x9aZnGVTXNbF)`dfn+a0z%2Y9L%iawX`{C~!0WnMoM zUy6ZFvs+Ks*6WVjt-eq7CD|ULb*mpj2 z>vGDEH8#IXLuKT4%8lQQ=H`g%&vGO7Txw*X&R167GH@$Jj$iqF_t52nOMc!q*=xdf zO0iQ*(veH#HD}O|Q+)ik;XlBU)^*8Dgohr`qx|Hve0Q}UH||pBJhcuynAVYlyQv-} zO{RkXh<)kTYYlxLSx!|LRy?-je97ujZZqWmxVhg}WL-k|d8zfZ9Gi`h8yW&e!he&7 zS7jfWjCg?%u+;-tPJaH&rnyQgAddWk2OH06Ip-KIIGQTMkx@-;VTMq+BvaSYe-YB; zdZFh%YG0B8)DmH!vNf}aEBxKC(R}2^t}K(DanGseiRO{YeMBtSq>#iN-~OjCs9$Oq z8T3N*bHO%wiXxynqoJ(gDju|bHT2Co9t`_EXijsrFH~H7pV?0Fk|%Lwi0Dxs5Kvho z0mR`e7XO3(RrG85$8_QBVrSLF9lQVWU{6;K z{jUuzDrPDY*Cmhg5PmtF(u!Am)|JzVperhNt_(L(h{@Xw0G+Y>57&I%+Y8~^bF5bD zD$MhY#fjvT)2_*>vhq;>JQ}IM2W+%^csRmo-cl>m*+G5M=!!m|!r2!$~c3+o&MT(|wS~XYcqGnTRK( z34*K4a)yrLCp9~1L>+PyoeA<+qS#I&4+G28ox^9yzKt7LLXgZ7X0ol2N^w>AyJq0(I6 z(6mu%Qxt-4^@f|ex)a}a;y5s1$3!gfiY=r}vZMf4J7?iK_B|?68m}_>C*2#g@DxOc zN;Rv%R|9_w>ObaJitZCX7dRQc1T+8qQp-0XoGti%#aAB^x%~dMkEmcu*{J&hkrw)j z#s`a$#rsQvdUe7T(y?u-49i{8l11mPYY>%v=c_Q>ytdAS+^;w{nZcI7!6evAnUY2L zA=3{Qch`#r54V!Myu?M$kaR;m-!U1Ta3psd9hGpoff@b}6cV;e_%w{$EkVB%csi}wh8DN;d(e6ZXas( z8ucf7HnSU(O2+5aGViY&q;*uvUdp0jj4Y%C(9iT2occBWAIDW!|(-J z_LtpU>|JaQ|A3;t?$nU00^->`jLbh44KT9Y3M&X#`Jsw^XtJK~!_8Ul$C)etVQaHW zxFNX zC9H2uuoQ%ui5XfL#N+@7T#hDtyFvA3v@Kcu6kQXHXJ?*T6Q{B{V=Vc8bbSe}{?G`)Oj5LDmql|84}(&?=E6>X%utYe+^Nt>G*4( z1_Q#?D{Mvbu#+axs!EVz8#K8p7SiyKp)^#fnU&3gYPgxd#0bhPrx5#HM8~Hc1Gr^a zV&;_W_AR-dq^u?gkGlKIVpK7g!uPM(Yadl^!qbX~AvYD&G5^nzzgAv_sN*SFW{4TP zyPeG;nazxEbIk^kVs|d(!^>s*T{~3McO4{Tlv$t*5i8z1s^p?*f$ra_je?nz)v(|j zS5l{P96`V;WsivGkJsZfX)EV^jWgyPW6VGE_}qNiE$3P98!1_azGUZM&{}_e0+s98 zy3*2c{d^p+4($>~%}Rq6zX^?r4fmg?!8PX_u4qq7MVjcmGAR2m#m;;Wg{VN9is(I5 ztYLJz$gBibX=RZg$d{{OknA#AQ-4BoJp7$0mjIygR)o4L`y z34GmrdTkXftg0t~>1OIB{_qN3U__4jJKQ=RX8bt}*;>Mcsg$OdU~;;aIfIczzf3<= zOwkGo>@fstqg-s%X}cmg<~>g?z5KhB40OV4$S1zx1x*6;BR%eE@$lB*3S&2(od&T=m*^1|H?9Cb5~ik>b#rf!eIehZ!lB9@V;+cf0SPB z*U*iS3e03fWjeTwLP@?$Fl|L2T4Y_XmOjelTnYjM_A^kf+<;OUPf&8@2RCBhZ4$m3 zLl4`prKj%J2;}aC(beo^2*P_SXpoTdBx%`&7fJvGo(>Qo^`pa?qw5pQS@e(JW_H42 ziBX)=DC0^)2@4Z{eMci1r{ffW!mL_;b+6l?O8fhs0z)*&+w-9*0^@9Vq1Q>|vBjJH z*K4))C8eYIS_|ruUsm{$KPrzm{Wgiqz>nZ3?+8ieQEyEatE_sI4ba$i%tMBylWJL! zZfXZ42wyC2Cc^L6Z`sXDO4CI3+w*KI_YO~N*o9L$(wg>1U-*#)yPM5tWH65ZgUUw4 z_d;os%a0-8o7uBpcl-e{^YiWa0h>3*$m^rC8C{S0nwtIm>1%i&Qy<5{)O0s}bCcV3m#lZym@6$e7#m$4`^Crcbv(_A zHmzU75on8@3!2}xe-m(7{vhhCh5hu|n=usQn!EcsTwr*p@xSkQNjBWUd4670|hBks$s_-%#1evEKsYZPnkpRqt95vj$cCZCRezUVC|BsL1U&RMMKg zJcBr4R-Rogf6#X4s|@ViL0J_9_#XUIOtW?FGd$eoD=jSr)$+nET*|*dXdjVS9$b|C zU{fBmXQ9pP=>PzD&t9UeVucRv%b4#(VAww+?}B`2kqHHVs+zgDCpxLrL16ontBPkW ziqn_*u3x<23}-m1>hDXFqFs@K-VR)cZcwsab$^KlFK8mox;?lN`(I721EC`0KMxqT z*wIopQ}j$3w@UjpngAG2Gy9X&MBzKiYCvnHBGMl9X-LR~n6;I|U>*VTi$i+8Do$_LJ zMMK2xv2x;VO6{H-n=nsCV#VussV=-{+rI}vY6${}l5-gLMd-fhUmBA=?>iU7rpKaV z9WHFvE3S+tG}Bez$9D_l!=gN9`1gL6oqRrE&0Q z>fe3WacpNt3swPE7!J9|A<@7hfQy?os-K~$v6>M02=A!Q63dy46IprOCcfwI)ykLkhJJ?T zS5)E2Z5aC79El(jutD8yKsnl1m`c&rXm}wL$xMlO{$%Kc^fo+isGT`5!V90i9evF5 zJa>ZrBQ#i&=@{O<9W#d~&{8{`V8^$mttpgzg4sj|z+kDND07Y<(wiS1ZC>RSKvwH~ zvbq{$jge;ARa4gR^Qbk5K$6ICTDNQIm&hJv8MW@Q|I+kLMZVfR(~1hlWJaxpq$35C zX|50y^mcQ&UP~H+zXsOj7;#>t4`azGu^$^tV-fO9Fsn@GvKnF2d3Okr;OE$+Iq6p4 zz3GMHB4gZVk0am-nmh+u?UV=d35%;Zu4-wrdGo%2Ekit%zl(%O*XBoAo#%izgZLU1 zyG+0Pe@OAvdux11l_@pZ(hV%rfbqV9Lvd4;?5tRPX)B6l8|#-`g2e zLMv+Ss6qHVIxhYH>ZnG1Zx@7%9(Ar%bZ9juV^xAXd}=SvtgnQ(Ksec-()F?Yqb z;129{`VyPd(`J|mawqkIC;EIndALxgRPR};W#P>6f_@+$j`)2H5)z10-7#JoC|h#b z6kZ%J=%i*?N@%odZ(aRMwZ;thkW@epPqKC6qi@k9UA6r?QuVO!d2Oq6~nMC%Z1Y5xO z6m0>zOhkWYG~*d~QT}+nr$cPiWCZFs>mhcwL#lc^L#oOiVsW3gZ?f}-CPnthuRT^u zdP454IwnpG8rl_wDST>n(rg7m5fM22yNmC5`HC+ZWocrmTudZnVqMYW_Ue?9GE|Y4%I{LC-C}ybZC{kDm7yril|q(#~3pj397E9e|{96XHF(QLzTZLngp zd{k=+_~)X@XO^r{jnyaryDof5ES1s}y@XzR<(nL#O<{jbTITwt3#>?+Zg#+~)TD6+ zgEZGhqVbQxG4w~-+$k47>FFck`Rt0uVJ41?(pQWPERz8W_q`Q!`%8P+bRkS8n^oVZ z5ZRlBn_z&JsUB>>ZwwqMoq^|4#}{2Bdas zyiWF8AJ_H_eSw9gfO@-uNOBlUZBfVt@9LZxz z8_(vK_eD{W0_=G64Yev%sI1e+!k0Ba#o(A)0#nG~AlYZ7JF`PvjKRn#)?DV1+0a^Z z{qN{R=|KYQ_(}=_3s(Os6%GKQ_OuZZJPs48xSKToIlg|R-iRd~w*_o``oT;b4wYnq zACD(FF9)*A@$`P21y8$MLHyUJ2f7sUTuvmlInH@G#nLd3lj6+6UN|$6 zTjS7j0c1zLC5Um*;(iD~#Es%wD~bsUjg(6hA$moCj}~z?g^jyf9hy?m>66UI6tFr~ z-}VJKEy3p&3o^wc#K(w1&7WQ{v9fNo!u>Gh*FyQKEkAQGA#l`)>D_F*ho&7m5B^KR zO8eEjrB(#@&qn4M-OVa*t;qvpJ-g{cvvN!OAY?y$W?8~;r`WCWcP^kJFB@!Wea^^_ zp^(?7I5*%&EYpr{>6WBO`%|OEt8t@ho~OYUK?} z*P8Tz`X-yOb|<$N2^lFWU8)jf3Zw%rX#Q%uHYpL$WpmGMA;U`a=Z&!S`uqa&x}=!0 z0@1c$03>whm(WyETg~>E=EE`UIMwxKdNDae2VHJbe3>KPSg&ZQz}|BOBD`~BVBN)I zHt_bq)i0+>LB|aYWmkz=`NQ>Pqtl4{=oSdt`;+MzRD{n~ zKaz#v_NB>#eH<9;XA9z+Lb1xc-{h+Ed4yY?=E@cb(eu7dumzwgk9iY>*llKwHCbVw zQZS*}ADQye(%~;}J7TiV&;82D5htx-`a|JO{yP=T3-~?5;NpncIwlCF8L5#w9 zRMi^HZu2mCM&7!YVY72O7`;;Vlk(^W{Nkp={C_a^&f%RsO`q^&V%tt8$;7seiEZ1q zZA@%y;^Z6Kwrv~V7(4f~d++|9ckjKf_pfuEKBv3uoUZDsuCA`n)dW$$7*2IBJ^XK`EemyM7g8PSxkK_RMB9 zy3_HlbRtD)G(k`Rb|>c+_4@-%oN$&A$WirX=tEMMSjX`_iF?O1gBa^#iqT7KXT4ox zR7E0ZW>gsB@aohtYyl#onb%_5ND=Xh5F0M=_ zqB1D7rsH?~r$)rrPH3!OT%l90rc$jAo^(CIXN8qKm{`7*lN#NwZEqiU|vxOS036g#@TNsGAnNTsJ{fh zO};57smb^HQ^3zN)jst|Rkyws@LvJHie=86$wp0uj|voxn##}r{DJ(FdZKk-7&LI zbZ-!TK2`*w(wzw1FPDkok5xsNdt7O-ZRfXRsB(Muw3AyrJow#tB|fvQLJ@`HYe;a; zYcUjG_hcoqElc4~-nw9Mn0_x*vPpN2WA*dyhZUk()Fvz9gQ&M^GFZVBxt=gV+zC;P~Q%n zA{*yv>;5|Lw^VQ`B2B;HtRI|Q^X9QU!Pj7SuCT}SuKTT<+V0@?Ck8r(A(nv|KN;z` zx^01u9-Oa*#OH0NBfjG(YaVXJ)b32a_dtp9j7_}Yc?E=ryDWVZb8Ml908jn)@{4qi^A3$*a(06ILUAwttbDVx+Q92UWKqNJVybf zmh4Z{k_o5kZ>NGzsOL?##|p#O9*p6T^$?GTbx3YMZm^1KYk<4~1qEI(Al0|12+V|dwVv3E|} zM!W3y#(>(gA8W-iz2$}6@>@qy(B9$z!W0_q$d2DXbrB5al;gi0e-t{S#fE0vCZHxZ z)hhb#aVH+3nfmb}`mHm?CBC3#+!D>sm783IC#Y@vcVIK$01GCumzKay(qGRnoM0O%m|FE^or?rRS+Axo!Q6;F8 zpL>M^4vM}ah7-6GWr%o&bj_5|PUXV=>$3yvcS z*H|Xd|9yCR5(7f|rhgU9ZoF4+QOO+YEA^`o>ftgyRJU5|W^}`)!}<~efrx~VC#7G~ zk~sv9?(DKn8hqp9&(wPCv6}a<^k{l=xy-SB)utC5y#9!(BY5|hWEtfKTOr3KECSK{ zf?6+@NEowyc!FXSIzEqYp<)gS%K{)lf>Cv(xyB2>zWT>;$mbzeo42R>L&^^Af5&7!Kv9{cV41VkXt7JzPX#?H%Jy-u8#vtc zHL7VxXl&E&4fu9d5~e!s9UF%6Z9$rZs#V1Wa$L4QKLVe6!zRLzzCg=N= zZF6C@)j>5ob~gWaqPV{{+pOg2Pp>4YY-)0AHW;ju99s9F3Eg{&N}q-vPeO@YY{(1jBaq^*HT@|-mz%uSvVeZ(A6*k& zLA4f}VzR!7H|xnwFHY{2+o0?0H+vZ?eBscKVf>gOznW}z2SXEgZ1#V||Bcolgt=9D zg*wK!?W~T{j!Sn(Kl0^-^z(B7?RH8Mcd(~S|{+Wt|fX{++?bCm2 zHKy_mB<u7JOMAS;p4lbRPtIVx|WmD%R&<^Y-pyOh;Kf1r(DzwiY>k zs-rbfz?J3(f?ae~AfAM78ikoWzTDv)dMtoRy^4bZvvG7k&TLaF)VuA6HGS z#c89{b`5?mSc02fV&WL(_m7uC)+k~gz(>A`UyZLG?3? z(s$OXPPI3L#Rw8nY>`=`TIP`Lc)YJr>1pj(n1`*g#B?;V`;q7v;(g{1scF4)AwItU z6gZ=jsw zn#V`Vin~px7vc73yEkN7$zw`?)R@x?jm3RHqv{Q;U}4UmF1$xbZA#lE@vEt|Lg^t)8qQrR=?GP6dNK zUH9JR*8u%Zxy)$HoRzrl4R1~YilLKWLHE-bag!*&izmO~eMG*{-VY7eo8GE8{E>PQ-SOvs;Y9nVOT@jlZGHqj-K1vy#itFxk!B1ooZpU*oRH*bx|B^H zFYp-ic4yx2r~~NXA-IL6JLGC2i;&lHN^s=J>EpZkMQ88S*JlvCSn>Bxpa z?3RAYYri!oTnHJonk*VamQQccE;5kQR!@gbl z?w59UlBgs$i^n&M6JLF$)5%y^Cb~6^ri@_3fe)_z&>;B&AYr_YlnFsKhop2KHduU3iXU;Zm(MZ(^wm;9k_C>?`(1efje(*fq zB)dmm=L;e~f8=h*-xTm6V)Lg^L^tW*nT$s2anBb!F-51FUPJW$Nwn6xXw~6~(VR-% zeq}(odV?>CB_P=iyGgnw?fy}98L3$mDfjp!g~GIT*zt6(r&l%bfLStj9R)=F&4=wr zvYn&vg={;AKHr0@de|QwD<$QwtT;`CK$onFFiVO+oYS*OxPthOCJ?E8gQ z&*%I5`;7w>rVz{N#C%dIk!ZXY)aP?E|86=zZ^%=wojA^MDKucadMZjJVOTt;zZT@8 z{giz3OI$k#eF#tM+DQtLrgz&s&KKkOgt9kQo$DB{wjf(hQ*}lUgsPfDTHSe-*}4xrnccaZ_G$`x})h~ zEu7R|Nbck1ojh!crRS9-PK5rsr!Hys;6k(mc~hH8_=k9f26J#hdima2kO#>*J}eeZ z%<>4^+P~@aJlZ9y%bSpZGLeyqH@dwtYeBOKmAl0++_5PobhExb*?{{6iAZW4`Othz zFGo$Y$vpnE<6G=U6!Wj1}KaAjz@L$ury zEF+&*tOrWi$$guGgj8EW?gHFENwB+jtazuoKuZ2`VhZx5sCS*(@*oybQAWx=ba}og zLAeJNUp?l1YNbG?8$$u*iA|oEwecDjoGdJRp>mR*un}rS5bTD|=Cy)t}L7GlGiV7_ovI3#Z|#|ol5JQ8q{fZV)|CBx_$=awqKY1j*K?6 zk-Yq~bXw&a=L_x_^b^{XQI_rzwIDt9UphB~+$WqD*b|7HT~zO#EbsLb-B?<0z;mRSy*DfK}#asD7tj!9$-n{ zssHTmDP4CL-0(2Y4>6&Zt!h~y5awT#+G;x4-uSJMHG)Y&kkwCJc$w?xL&kLNfvaW) zOWd`WYz6xO9*(zutoQ>F;2V&Dyhhl+)@>Id?@?-4+U+#DVDO=FWo5?%7>-ZWEc zzM*|6Fc14#efZN3z(_M2pox->yVD+^lQ~t6AKjaK`NWdNR{Q8_`fAM8`n)~bR%uNS zLp%iW=gYXy^Vsl4NH6E1(R8_FP9e@v6&nl1vL5-2ISH(-xZw49_|@#LD%TMqc7P}_Z%*7 zyIWBIDMMvDOBfM1la=n_iW_XrZGaTJhgyV^)vTzfINY0$!faHh*QrA`+^U1-y0~3b z)v7(**68vLxA%HM{w<_+NWu==Cb$EBD==fAz-}_NK-KKv~kT7xtsfIp_)D(C<|364#MGs@dM$?ka%5QjAUa_xJayy#UfN z3^r_f)I}G-d7jNaw1s|k zpXyBT(slS|+@yD>r`DjD)(|p;vH7?_7)23g_ogeJoUIohs;QMf=kG^+3UNT1xxt(P zjHuU5hfmv4Qa{R%W=bAV`Oi3P9%edL&N5jQq-)rYvx4~pboHOycGKgsS)W&wa>iXyip8lT7e0*5& z(zu}Tm4SO#k|KGC+~B=<+jpo8C&vn%3*NybH`kPE%Hw<}abW}1uSKXsQJ{@>d@+`o zq%-g^q(|7>u6MN8y1d=>qt8q*6m?l*P1{PcLA(Nq+;wyI%-?JIOmNvD!!RSYW{>`r zwAuF2FS{2i-M_KEVfi?%>|*L)Kg#WA9Y%9ICK45gNK_HkyqqBDnr4YhcP>BVfGnV_ zWC?KT``NneROTdb+#{C`%8vnmlFNkXvgU$tf_K6NS#(4UuC0m)>Wn|>F}!eWeLTs9 zUyF)qIQ)yGE+I%<~@deN7`G;Q(!C4LT z)%*Eor$0_&($VVs`+aX|{|R2p2_6#n?2^keou?v~P&OzRr1Re{XE^izi;@)3FRMvm zpQ*>hDlV?we?QX?0-a*PeC&2UizxphgZEtHf}|sd{1o@%#AJr$qWkZS`2UNxf7kq1 ztN$o?W_0jhM*F!0?<*~G3ix-o|9Ihl((!*4^h}3=wn02hm(l>U{{Pn65$^*zL=iG` zNDsRDKcDD76%aKJ;^W=f^1e`a`oF&WZ+{LNzyCjP4F?b!Z%SbUg47UeN`@kb*t)p5 zI7Ya)%g`?cNRT!lqt{!-)o3x?5|1v79q2^K9S3eR3HUr-&j~7*Q+V;0~d^Pr(hPz=0t7OJ? zxz^k9Rr|irU>IsKY~Ef|8BL{zR_|RS zOn&9=>7Ly!-`y#uE>2U@Yj$aLeWBg0CO=kIA?iffjY0z3t!hIT01boAZx-tL^z0G)M+nrp+>pV z|H&FXa=D;uoJYkOk>>Nybq*K9(pqjFK&P=^Zuh=?w<^9a&07`rk8{fV&X~=SN+D|9 z^uT#d&p_AH8hGVx$`n;S8<@OySpX|r`H78DU2r|P!DM$uZIjZna9bY;?KQ2(7P`Ba z1EA${uwC6??ZNlVqi#5n(2B3U|Nd&AaX5-lDJ_G-=EXUe4-^9(8`)g9J-QkcKAYr} zMJRRt(+_(#de@ZDb=84bTg{+7CqqZ^p@)zZ5)e{>@f?>Rn@#@jLHZZl?wE~&Tq+-! zr3>;ZaY0tv?!PQ(S$b#nM+oYcH4Iri~Mc(tMW1LB1A`- z?rbC)@0s)V{WuBJ2t>o<EHhokdHw40;i{dn0uy zcJ5>!iI#idW=u6<^LUtAY0}*1-cQGNT!CG<=~tn;^f3zJMf8n$y^vN~EPy z_f?+;JceSh6FPC%Q@*}T8@}2*lX@p);nYf`jzw2kj=5w(4`usX}0O{1n(~w%zPH*o5nQ@BIzxYxe>}V@<4K)ELqk%G_o6mbMq%_f}0x!Cx7> z+&D?IMJ{OUvi-mGdpD^%2&1WZiT}xU|9g7<)Uy}Rh>!NsSN78WQkU=AxVpHy*f~DD zJ~+65)8#OCr2gz&dp78bWvuLiLp1u)K-M6dw_18i`jDgk(8WFx+;?-tS_}C%=Xc0a zBGCQ@D6&njxMK))kBc6>)g2`iCmC=z&D~oF+QAxEJG`IpD21oe84#SF9^RJKXBq_i zB8tV+pS6p25nH+Vfy6f@4$s6_m=h~}wk`>Ub7=Jd+r|g8O88^sx_0|PY^`FT#^tlf z#{nnnv6b|{+gMn9^`xKkhO8267wUBIsU6QZXO~C$lWFKLqpzMS@S(L0yo572&Zn9}Z-(}d(^v8Aao+SNXnfq&B!{A!! z8s;AbhhOqjg{hDo4IlCExgssD5(_hsE=e1VB`#F(Ncapo(un7jR!R(m44o17zR-yC zK{bEEZWi80k&Mcar?A9B+Rf!?KlqE?K)<+dcKh!04A~4(4(ClM#^#i*VbUUJAC$Mz z?qc+Y{&IkpoRLVEGnuT~-g@7?(%tfrQiq=O8m+_m_CM#oe<-=X0pBt-XHn^ce`tc_eBT#8%jYaV`vo3TzSUlseI z50iv+#ML+Bx5*h}CgW6a0aM{#Kfa6GZ3Qr&pV`}rlfKG7t36y|KRHlhH` zZi4{(ecxZBflgu*QvuaC(T<{r>>)onjs6&s1WvwV=f4=z@?u{F_eg%)JGcn|kEj;V zGgvCX`ICJMqTX4GDAoY{=dkK}R2q62EWkmGskv#GRj1mmE$m8*`U`7gKZus#7Giyl zakl0Rn~9>pYIRZl9~w0H<3q^+F!Qw%kZkyz@_c_a{-!W^a^Q4dAD}Un#^#kl&ai5c#LTMq`x3)AOz|vFfvz#ECSLWOI#47r8b*TJz zv)bE1Pi17;1B6gCu8L*0_!Xcj%-8is@k9feZKLhV9XpdAZZAeWWBq5re>XJ$ZAS)t zF+#T3)|GFaVO_zk&gi zMb<1NKSn7y6UlrJw1pD?64ijpk)}OWQ;Y|?+6faiW|nuZYnDJUSgNWNOs4k5z$L2I zL&MH!Rzbloy6C(&+;RXn>JWyXE1FbD;vXW{alN)sqC>Nj75^^o26?c z*ijPRo7HzWdn15`RxzVRVQ$?5aIanbp3#URYi>RXH|FM$Sc}5NO5Ro$5iBzW;Q>h< z%}JC(TNx@Up&gljk;3M`&$vmlk&tHq+80>{n4`U`(v-r*f@&AcB#>TdFQN|ofMR|r zazpKs67ICr;Bz)QN zH5%&U@2ufS2qQ(iMa!ka@iqIdBKm8Cf@aV2O>HT#z~>W2|ES$X8~_*^<(m-U~e`bJ#KH%0xIU!NyDGGx+?SeUnY7pZwkd( zV8(0Ok4{0!k7ojcUXPJ9?l^ZRWOvO97DklY#`#aqeT>qK%RApn0RqPKWAbb50b+vI zCl4GC+1X%UjDjQDOOQUQrc#f}_SBN4KT){oL7L0sE?^bAQ4jS4?=w+iLC!}rZ$B?6gg8~fupIvU(Bea{+s zm`%28Kx_M+7h^OL5-1AhGRatSmpdCn@6G%^pHy>3Q84OBzmKJe?90@1V*?}xX-Ar- zx{;ev%G4XpBNQc2{zDU?@KL4s2SW4v>HkyxAv*|+C{%HeiQ@}zDmZ)zUg#0CxU`NT z!{XDk7j(Ko1&J8{6+X#7!_Sq;8yD}?>%+ajc*lUIdJ_-7> z(%fPwNAE%y2qLi>%)q}B_d={EHjbPXv)?uvOvnE2=!=^31Tzenv5s%83wR`1T&2@lj2*ni`+tGLhQ zw&7|N-2ZeH^puA5;6(wkK6JtGn%T`k8hwh6HShGh?_(eFLTtAHheP~De`E;`?XwxI z@mP70y!SQM`3P3i@y#eLAZ1fbGpS>k@0SuW$u+d)7Nz%gp?PW3CH3$WWxIUmQl6}Z zSP^r9AAV$^n)#goGx=p>%nGLiVkjD%*eHKofukjj_ufy0VJ$-vj0V4KSJN-g42Mw({Az)vp-6LEFDG8OICS}5_)(HInZ`e>ef zsFm}JnLxLD`S&XexY6@C{7!b_gBRl+4%XxHMZeuCu4%BXJ+*uL_j#tSR>P5q04Q7^ zoWTl9g-;;1^`YLue&_DK`5&#{7+Noh0ei!qp3pU=dG8J0c)kh%!I=3QrBjL#$mCpc z4M>gLKN#ryWdXVU_oH%;^e)Ql7Y1eYFDXFLOD}TkRNw^h0oog;g4p0sR1T9A5sE?n z!|nhg3YZSm_@^0Nv(7y9*WJ;k7hM#Qbu@d~dK=RM z37gCVjbu%Vj!s6Qg8+G85wjp5jB#Cl>~Ux6k-=Vusz{8=Z!JR0yu6~ivv_hwRoW*& z!;>&qR0rDtEDIX$k~R{eA&>bqduznYoiGw}u^#cZV1@@?G&d$uhEH7(dEQm-wOa9g`zsw=1zFvyEV80zIy;ACp)xe>!sx8nXi+^GPHZ|mo zTR?P+2X82m%ypAr>3K|eSnF?2BIga62AcOwB1Tn{u1ahp)IOR*^x&5rdy;It%5fPi zk*suO%vtSp`YS+cZ>i?$#M9v!HnslgEBdzz|LaZqQbJH)^jF1HtTH=O_!%-?G`n+} zvIBn{O8)n(yYD5-FZr%cWL=)MtDGL#@7UzQ@l2IP1jkJZM59J)Vx=T%yw8^?JAp?^ zXiVZ91$*ka+8_8c3unQPp7~@K{&%f|>bQ-_nM`b?ezNFux}_-%3-6>1xt|LXu^vtDZ5!cE>jvbR+%%yeEqy>6pUhs*paK!AFdbU zm0ikActTw`Qg52RYNl% z|99+|9I-b>^=6Np+?|pQZR6h!UN6AA@lHB>l(Elg_e4im%cJQw>6pX=J&IY-g&vsf zDVQOsBP%>v4?Mwv#|7-@$m$m1$1z1i3}fCBV#K~}+C^O1#S2n+XSVRiJk8$>6w;zb?o>VjCZ1c+N2P2(U}mQ!#1jgGa5s#! zk>0#fAZ*XWx_BaXP7Fr~_eaa3bz5Ug1=5UGMQ_(*E>-6wU%^PvR@J1qz%6en@NzM7 z-(8bW2Rq7c8gc`2b0P>#?T3PY5Clk2hNWRD#Wxszo7lyZ?{kdv&d_}O#XNK0CErp8 zJznbHd~a4X2PZM=KM~BTu2kz{4;l@JmM))V0<-k4!oRQd&EjT64%^(5d5G1^paq6H zC$tYR1VdJk@4X0ztxr}KnM#PFo5%cKF1T0zN-2p=LM>umNXZBvT$b^;bi%YZzt`m6 zEMWb90b{MUhlT9AE4sHI$0R#~3EH3JMpgqszn6I19-v0qPxoylf@E$X`#-vgxFCI{ z@M^0-CbdVv%O+y#H;}t+gyQ!^e6)Q5I2gr34eA|Z4C496C83Q<=PQ4rwStoES!wN| zT|z)_J;@c3Bp4&E7kTBmG6QK7%7&o5YO9;ya67&DQp3ZEZ5OC`gZ`*2LUqRWDGjOh zWH{`_4JXidmE+@ccH%Gg={70MO6OsuTgk1} z#+;JLIHOfs3*OkvS+_fs0=~Rlk0c*neb8)hy{y2-s7hkxt_AbM4LrG7Pe;{ls#dry zssFIxOlz8hm`Roj$JZ2@yv4LjM1e|~NwLRoLtCq<6 z+-XThI@hg2v*r#LYTmVEQ_?4NLEx>1D|&R}AbH;4nJsd#rRMdrPu@<-zs&7KVwoWf zh>+#rSvQVagTQv}To3uNrS6to_IOr}kxr}mog$dzb5vr_X5S=bbYZIG<3;M>aqPS#(E9A#%FO zQ?S&X+07D9soRo(u6trm2?=*M&26w;&KFx(^z%`t33c%pPGN!oP3lf-HjvC_43>RA z%_t=s3cXdeF0$17IBw7EK|%NjKcc)-+gP5#SnoGd0+LGC zaSiKeO0!l-q6e`@R5dXD^MjxabywYpo`M4|k)^qL;+fd6K04Nb*mCv$3Lvu(lw8Eb zi4m!a*aC?@P4U#v97P68aK(Xyw81zLVwR)9sNNt%@Stdup1fzQ`9#4Id*L!L<+ZTy zrVq_R;^OpCEL>vGz201fTBBXb@9RbJSnct=hX;XyYGP&v8YL#o(6}Jq<02Gs6P)e- zqkGL6;k|}4k0$&gLXrgyXIUM=d{r%ooM0Fcd!LrHWyp(|Xg#KHTZ-knLNpOnMl_l= z7^v9yN39$al!{~Xd-fu0=0h2uI^s5*T2_`u$C2{6il&0le5(U;$ESKc5-;>Pqh!$UwJzKa>f>!Z` zjtZ1bv0D+m&DZ@onNRs=_Nb9toFNU=?iza7^sNq?Vg?2IsK@EM zaSwi>Mo;iwlXHbz#Er_hNG~EuDsWU;WZ9P{@G!Lf60qs}mO&W3&B6RnBIu1HR`97g zl+c{S&u2RbYa>&PzEDz5BBS2-Obt?5y$v3A@EJNANL=db;fLUfMxZ-1Y-AJKuu{jV zJ3EAOb9j*`a$s&bIW8P|*x-6e#1^JZV`iB3vbt%g9!Nkg>&iHh1JknQMd~(^l_uF= zqr;{4rXH-aJbq|zzHYx$w^a<^f^{~L__&ELQskN8y#%$*c3B?-zzcFuemj|qVxNx_FJZC^`&b-_x)wx7e?;X+ z2m81+`pH{mD=-KP#s!%hwZ??Ica)+XVDFD%q6bcnJW$>C=J(pJE8pdVFd0i*AXY;$ z0w4)j38Y(Xf0~CDHj^|y5gb7NO{qgU<*P@ugV%vR+VmulvAFw~|6P*Hjh%Rp(biQ$ zTrUCplF$uWsHOavga{5B{oUHtp}5mjE@IeBnrOXBfT)%$uWm+wg1^(LjFz^E+9aO1 zb2vQ*Mdf~>hf%&*Nk7>~#}>8EgGv}w|8~mps|`*3(>vpk?sXLb+Wh_bkHe#3Btzo- zz`~ux8{NDLQFQIy;IoO)@~GAm@q#n7MM8 zw3}OmW(DHEsWr=r&-S)Ld6&}xX44bAe?1mO^3QY8B|a+V1!VBe=Hd&v*1``J4}@1C zY~tb>Fy)0e>~cq{#-zYRs}FxRod>c%zKiWWl3pM&?gDp?S`H zl3%oAkg>$~{n8?M)nVfFh*>Xg1XG6^;ruak^bwkW{ni=Zo4<)auof+MG=I-b&#@1? z=J%JrqcIafWSQ>>Y40XwJGx*98rNl)_l0etoky@=T#x=hBoIH6)}?Vxb2aty$~)M8 zDH3gUXE<6^7KxU>*NxIy&a`6TE_o&S=q~3_ZUzmBQn@GXfV|t1KRRU@Y}avSs*&Ni z2}2!8ON{wxOAbh#;}K7cfL4&BApV;t8i(4vkaHZDLXXYjYwg!GK~~PWSN3VPtzr_H=E-Ix5nQz4J4e4FX z0af2eEqJvgNxMbz_iL^(UbS7{DJQwQ7Z2);E@&WwxiC~#|EB%pN8-}GzF;?{N`EH# zhOVc03E?~c;})1y!#)*iN2{5MsfvkevZX>fASq=|k!-ZydbA1b%7K}|+RPtfV&XKX zU%J7_6avRu9|wU~+6%8u4Mrg1NHZ#M-Knrd;Z`idV8_O(j{w zAEx82@D^nDy}|X*uW6O1?DsFXeY)+=ThWfEFZ#Q~UoFSm+cDF$xq-jLYkD)PKyO0W zeW2r#G~6LxItX7j?f{4LIk0o-hbaakUAVqi2rG}VjA@)cixa6qrd{!bhFwmC8($86 zSwoBk_v7R4zLE^Lx2T9bZ%A2hQKUB)-5mN{fNOC*|4qVn+^vV7_(u2cG>^Ueh<_1< zY>yInuh<=3IVsT^FmnUCj}fl|*fWh#3E6|Qi32B42K_Z-C3a7c4ojH(9qHsn;u|ay^&bp~G`= z`!6RZ(acKocTaP1*CAfM*Rt+6=WKn+7L};`1b*l9T?3z9Oa0Z`o%oMB9o9MP))=tI zbyIpgU{BuP2|WU)PjX9#&*ZahC1U+ve|#D(>(qwaDP*U`Nk4eL4D0qdo#>2E9QAKQ z#uCx%xsNB3=SDMs6mnUBBQ&S_zJs@f?P+J5;%ymzeLsB7?cB_wFumnrbhzfgdtFTR zrX_E=If60iES-h5?(Mvn5&B(n%RXz2lor2&d0@(5pNg)5cs6v8zgDI3Uxi@5|YpZ?zx* zTl_!NZ*z}gHdta|^?dA)ZY}Y99H6YQ!=grjCVvJI0wvoYV;-vq z=i`jF=ckAUZeo$sc#*a{J0E*p+{K?f(p=mko6G$UhFEJ&QTc}7#+P?y3lV!ToB2YY za@K4vKdcPwFTY9e8y+M#0Mf1>IQW>~#_p2`6&_ADad!f?H$mb$S$Tv8dtJNw{k&TP zj_4-O`wbUsAshrPd$UjxrF$My_dR5s+9H{$Tpp^SvG7|huXd^^JC`qC7- z?L43!PkgW8G$C@#<;0XG%H`m{ja_p$qMsW=b>4&L(7U1Awcx?1-U%$?{EEkw@p15_ zH2jTf=Y3VslzfVHPM8*UTH42Giin-r{Zr|Jr_#$E<@I(2;83qhHS!)`xbk|#IcmgE zkDS{XJ={+!PT)^(;|2G{No9-0=gIzvsODAb5Wv;^;_cp{-4E{6up8k%sdKJx{|Pg+ z>tJ=~=*UI=WRUHi!}5_CJ4KAf@4e43(Iqv^&D)yois1%!j<>lI=As+YOwfUt)3WRE zj#=%h6?AW||4AjyKaFE%-|pfL*?f4&bL8YwFgdUr>0Yjt8DZU@;r(%%9 zNq9_c6*3V4i5*|yJYJ@VIgDIR+cs?gwoNr~h_OSu&}l25K$c%k z?>MV5mehkFlff)1eVGq%{B@%s`F{yRQb36Dw;HE+p?+@Pi%X|_r~CWdkL@o@TVuzf zuh4T_931??uiin}8FeT+_Dt|&Q`i}-c-`kTYgtN@_0bjX&W^LJa6HAV3b=JI?B3>R zuMHs;L50vY($13r zjBcP-ss22FCqeAzgOfcJp;Mjmy5k>{a*i7h52ga4@TKU|lt8+<0aW@4jdF1?kUkPG z`}O6ZDO=iUWwe7G!QYc63X%0s;X&TxOUe_M`0`jG&Aar*UD4g~b+9wqbq}MX&`sz5 zoHD4$M`2qxA(@M~qkt$oI{K>vp<*EE`p=HT8K0Yl$Ken9*zci}$ZMSC7Tu0@o%4$- zvqcojF~he}%{*!(e-kT!s)n<+-5lAQ^HiC~V&Q3VcN9^q;#5_otD*fk@u-Q6gqbc`J4pFSU849_r{|T3;sjNs5|MB)8@_;FE{jV>^#%SE|5V ztX}kPyfVV=9OoJjk`lOcPpGy+1zM@Cyb3d>3=0MgrMKqSIqctJ& zJpVZZ|F8L2l?D`mHn)Rd?(FEM)2dbX4sPC-(#Hx|My1rt!GN3YdI@|S<) zkSz*A-89^LbsCQ7b(qz<)4QJMI^`AE$Sn8NK=MnL89@yTU}ljGkF6B+4ydK~H;kR3 z&;{xuu8E3y6q`J3=rYB}jA^&h&5a_j(`G->WMucf3=>6st)tG#Q^8WNeObMlX1Byb z+YN2Fr3`WCP_N$S{ss>Z2IR&~S?%L(B&uiHCGR%&j*uoc!4%UtMIJHYiRbI25{se$ zv5=zBMB=PL3vUN3ClNbmq1M?bv$c{YwsoT7ADz6FVD-&}`S5ThqCmAB~0usbT;(ge4u!1yKAZ^LV3v@5%l}72KR0@ z{z|!h-jz~JOamEjOZ`LQRup)|VB6GVuyFatmL=iA7uA*x;JFCB`b2*bD#kYNy3LbXO>h0MKF*(mP7kZHA6oum)1LWIxRyG zgy6^r9c)wsaM~_cu_q+v_5iGHyq6nTZ=91x1ZsT=Bn&7B%L7n?0-^_g=;T@iX(k+k}t9thTb_?Ab|3^44)x`HvD2Xj+)z8*e>OPRu+g= z$YcIYd2l~L|9N@H3bi0M`C_NrzQJP1PpgWZ5*A(|rD!S;f$1^6iy9uCMd&_Vdakywxi2g%1(T zQJ@?N63Ssa>b4El5Zkw|S?QJ6AohM6en9bp$601gP}Me{h9y0gcDcpiMf2dn`j||& z*;l#Uu6N}v9o0`z*nWXSWnt2f6`fnG%Y!`Xhd%NhyrF3LdrV@c8i$51xByzWSpAqy zT%XD@0A7mZM9ZK=4RJ5KqX$(CxxXTr5Ycja+JQa6P#)6Bo`d+`pi5Wk%<9^d!_*#X%%u};H11?dv|H0NtT}4bs2ULyvewH2gH60m*dTUXymqwk zbs6&MTpFtcu4CJCvA4u}k7+>8hT+Ws*@>#5&*yWJZy8?VQqIm&&|hS(^X!2}7%*us z%A#+(5g?tHY=qsOZS@h66|{t@)}g(q5-93Y#rUdyswFYIlO7RB@ci21jiIQ!fYPjUQ^Y&1Tn=%xnO%1>zz zy7~p5Z?{tE-F3k<*$4l;X6`T{D9mZr6A7^)4rpFr?4FFW&_5j~<-R>ku$@ysSq4KT zFx$3AS9X1hp{$WqVd$rTJ5s(-v#GrUzZeM4=#G$4xQnN&%k9u zVzOF99l`$I7%+Ce;KU^1Pb7bpCuv1?7}!wH6v1k^4Y9%nvs&CtmOgr zXWd(jP>a=~@<-qth+Ta=hSmhN!|v(Z8^YRsRuJMtd9% zj$!e)!A)tR$S>JJ#VSDevA@vng^l4FGr{w5pmIc`_&HnfsJD@ovq-`6y|y4dl2>m4 zwc|iWCWZF%D!ZtbS|(qJ{!6bWf!q6#>k&NF!+iiOX%8^8f+@iV@PT!T<|mt zo5r}a(*LkK7;$WYluh_JMEFlB3yj<5Y}$DnDhxVBlk)4qHp|lsK1b-8o`^sPMY>Ae zd7r`Ci(nxz%=JfuXRrMFCyU0rUW@m24W&sapL@!tr%^L*8*D4d&CUHaxJoZQp-J@9 zGx>JNiua0Ry&3Xjy{)Mz+unQG?(Ud&QPBWn98 znZ$|mJQr&EmT|ZLQ4T=rjm1cs)~){jT5|p>f5AMPHAVm8IHiy5+?k z{Z~4g;B@Q?#9WXUKDeMnWSqB*TF@M>m==|I8wLZX5n44#9b38ZUR^!+vD(8tHGV9^ zMG6|aUZ~gwel!}GAK*bDW2^Kh1QEPF9wq&`Nw9_*u5NV5SeZ;%{2zc^3#dysKUDe$ z=4Z*zPxDdo$cV_uOFkmsyf1IVqE=qWxw>~;tUj_3pF3{;d%$PAIVb3|$0*H>Ae$%j zw!0IfgVr;Mw%b2kJp=F8)R`-M7Vq@VjE04LX=ZE>#X`^fl6vbQG2Jf@+@7zc_q{kv zjB?Rkr{`c zzI;ONpWANo<$L4a*^vVHC^yP=+knXL&-u2SU%H&m+mMl8mqsrB+7L&4t#-Q5ZHK!C z?&%q9ptoK4iN?L&QFv>?qRi%~-C>=Inn+>1)a>FyZ4{WnH{*d86rg?6G$3 z1zZfxSik7>wbpwvfQ6JI@X5t0k315!@GF&IADVzB7W&r2w}9;9Vvg0j8WKX zriz)$i#?gddSm1*#Ko3U*;gSQs{-P~Fllq74_FPl%X5dI#Y?zJ>ijXApJ5kQ2`8*G zWyP#BKjk@o{l8fNgo&%e!RoHg=9G(EvK@#ixJgV=(6D+!=C$;Mi}FXjaTq5BxTMZW z)1N&^dl)&jD2!lmQ|-&_rCAcDW;cTTNNv=VkH1hftCas6cA$nD!=-MOK!ron3Ur~L z_a3Ws3cYNxn4^jy>W-u2i;CF*zdu)gU9T5xa{fe&??;Ez+Zf%uF+`C`edF>5gb{@oQx@eZR zz2QRc#uuyyaBlXzOvw`l<#&3`uB0KWZH0r_eu>JwpoEbJ|_-Q^t23q z9I*%sj<%vaxv;`u-Wf#kTX~4u-j*;*Kq!o%5j~z!bfG>gub>5 zcB@9@j$q569jZ)@rsYjDTtC-PueBUSGUZ}Tu19Mm(Skw}vr@B5wKT97Qupaf$cQ2DM&Of)F5I!Rea5ZpY&8Gl z;w>7J3|Cjc$_)d?MPI&r(6LP#8GK8y3yo4o8{5%-MR%>u`)6(!R`@=IB4Qy(ACF!$ z@D1UIgX+E2hesg@ga0k+s>0$7=G=(%OKtZ3v>fmJ@@v%l@oCkmmBmKaIZ;rp4-b-N zhe?U34D)4;kCapS2clJh1asXzku!-j9kR~ zb4FAynZ}AI6Wt?hi9|X>K1pQ{y#?-WqPc1;K$;YuWL?ateToD-YfPk~TioR3QaY+Q zf;ibQQ%vL>*D+3d7EVxGxU6%(C9EWRHDfQ2Jo7Nyy+kWJ}u z%p2XJcp<{RFrkA@+QSm{t@mq-E*Wgz6txY#qEou+f86fa@sJ(v$4IHNhKeGeJfRDcjeJlC-kZK=xq8ZNB0U<&jM8Pi6y|b_6wih8M4k=8;EuUU7?rwgPWsjm0inkGpEyf zJDW&oTCZ*5^kbSZYFRe%Ex@ zUARqSc{M^lRUm#r6my`iuD9B&n#L%#1o-@6EGTEkZi@)F-cH~Z$8aEZt%H+2{4VLS zAJ#gG&c+kSP{Lvkos%v7J-c9$Q5!vzeOaI5{!AksTX+X=528V)tTko@A6)mNfFb1Sgh*93|u`UQHf77|2u@w%|~biSb<<#$0g zzVv~QUYkWpxmz}|;2Im8^wk=<%;>u0BO74C+@rk%LE8o#KI7cInm3$x#HfgP3zv`~ zP^j>gI*GHPQku6~JK|B*viBEf^vc>9o=LD$HZ*o$jf*u?4DTcq;#E}u=BCU~Lm}l` zfadx`Y}s;*4Wwc_*c`M!Ks|*OL`Gks3}8LSDXGH!uu<%C)mqbOjz4>BGdEYetg~ z17bP8?_tqIFP2uQT;t|xFLQ$z=0_z0`J~44C=SH_P~eHQ&W;Syj7u5Z9{go1mf(3} zanC)P5Www?VS5+^;PzG{b2y+WktH`hdLn`hlMqIg!d^^u&O9CN_#5>r9(BDe{8lbZ zA$Sq9lsqP8;Wy5YoCLmMQVYXTO73Rv=zW20_RHPWq?Y}Ty7Ezc z(kDL{amr#%71>`LdrK#ajD|^YbFwvFmW^u)GUFcx2eRq(&aGDd5O$){n0#2LHx+{ zBv_ayX7|_E4kuqx;`;W9GEBaYN68@HuiLJUiIS7&PjdMIKKe!=@zj3BLAm4Ay2(j& znuUuqK@Fzbv0CFIJBaZTJ`X3=(UZ~EK8;?ujn0b*iu!(!Ku)eXDj3`vQsHPp2#i40 zOaiiCaljSk7WY|iubQ$iyduMeNLku(RNhwFYox@Jc@9%A7zSkbCYtT`U0=^tR|v(l#;Pk zO^kSm-mTZYf4dy#SS|pPhekFwCZbM}e892>!ire+gs4-0W=3|BCDtZSk0??m+UpFj!S|up0Pd2;a>@>mfcEq(>S{P5bxO1i#J8_ z0mhI^dKYBuP(M`cDVA0QtSlIgQ9`cPR=;WgM0^}`Kt73zA@?%F#4RxS4T`Gfm3GQ* z0mt%|%yVpYGdR`_f3K}pb^o(imV*ZNuwK@2!eJVls^H5Gw z)SXIPV&v(shFpup+(EgTXae?yj9QLKm7tWuaoiGLyxC1{Z1iO+I}t{;Bc=Ju7WL@T zYw2sVRspD?`uq%y${v!Onu)xUCTGrs-`d}_sXX@;m}g438^OO#&D0T~*d5il{sS#3 zz+wmZ>1dZYhAX*8&C%!u*O6hGXR?C*qe;lx`w(GEod`GHVJLuE!yI+PS($_oXFsT~ zHpZ3}hRQeNRvq@Uc+w-|LYSea)*z#-FeW0pn~ECx*a7{N8QQ5k_Yg_Y+>t}sX12&m zAI@}w6(Za>Vu%_`z4Z~dP!!l#vg1-X?7SYoHMh6$x6%wr^YNYO`)|oowf5BGPU%{9 zDDAeV)8G(7XN*V+0um!C=H@rfpD~qTX!^rJfhu@`yfBHB2%DTC4t!B`bwT8VKZ*6J zq5H#mCvZ{>j>!yOO0dayxvT6>6oY;kTj0^Xc$%~;d^$4_Go5Gg55v>ApQ}K0{AK9l znIgcq#g8Yb*FN{mg`qVN%N@u7VF=-pGd24?p(r&{iq@RM|L^~wd;DJ}lHLc_K1H*^ zTp!Kgmt+ti-#-sEUTNnC`_~$~X4Ai{=atKU`G@Gh3ie2?5qLXCTqc)RK98o*jjYmg z){x)`${q(8Otj|C zC=L(z!xlxInSS;YsF66DL`;AsCHzI-ffRU7Wc zadwkbQNQ*Ykq0pAg&{sH-&6wlLs67F=;e=OG2OQyUK!NN{6e@y%2Pd4&DqIhahAMU z4W2TlrDKC;I4c3T6uN32oc_IVr}1E^0K-odlx}Qz+jWZ}mQ$bV{4O{#BO`5UAo6#1 zb~X&R@nOd~Ktlx*XoMPMc}THh5n3KI2hbfVGBv0X)%tqkKmudLsPZzMJ`QXK)ks~$ zJ7;p+(;bt+rDdL3x-z{Y>5JU}|CQl0S6p}>btt523Ot_ZD`TvGsz4+o?o>u8Sop-JXSv{EYQqId93}gT1KrPP zr?p+J)9X$b{r1JlJtu8^2k$@espkG~-0$J(G8V z>H3B^;A;vOmL#Z9+th6t-LZkWUUjGJF1@7@IBPpFS7tRv)ml}97yiPdhkwU-&Wm*w zMK@xHx_8Kp*oxysxD`mOAi=KbtvTi64ZlO8^u%Upn*miD-@j%`eHu!i5>Kax?JUBE zt#t-D*{p4ynHxhlQ>nRy2gF z_-bU2HUx=wiB5*20%~?0n5k~2AA+c=-v zV8iKd%&ThSw4Vz8k7@%o)JQ61TS>K0#lU3lan=bou1K%$k6r&Z7A+fGF2wuva3==9 zq5Wf`&No&vvNTV*O)4>5L+jQnPPzvR{lm~27YFy|Z=-I*RMV0;ru9Oq$LK5-&B>hg zt)=Erl#mDrW|s6HezhKFU$j(d2o)rVk6aHB|6&dzI8W&R7Cbq={{%iZ_=Wvxl{}|d zzZzjzia7DK%2vnBknl8${7hVO)j#aUKD)Zaau3Zoew-bH&~KO}w7YrNAECOKng?}p zj-Htf@l+NlDl|MH=e=);DRGdo{iN+#v1&hp;n2>BEr7+;k^zu5?n%X(i>Ld zxmYwT*za_zoE4CVKE!k+dNd@*BXDd#jFW2Be!>J|X($!t9D^2Z=P7I&4;L7;&vaop z?sT#Jw19a7oo3D>dlCP`TsHr=jn4S)s7D26`A*+3cj4CvbS^|~*Sr2Z{%G=7uV9l{ zPtW|X>$tT&^*mqP_byi4_&L&8HE84#3(RMN!l&m7{u91*v4S8fT~FkT>8wTobS=Vp z<+gE#Se6ZP!>wH5l1@!djGV)r^YVGshi%}rWpT;<2#z?LU-MeNpPj1z#MDbO9iu%l zFp?8Wh#Np7sEb=ptMijLTdVVwmt{EHL8hB?-g0-}{K_N$?o6CLH6z?~YzMN6PWKHf zq`_K_?6=ySj#Cd>ATC0yZw6Y!g%jwW{kzgJ&y!Cv#1E7+ZGhVP3Gqqn{_gNPZe0 z6Y0cripV$GlJH~AZO)WVi7@W``vXh^vyscn_o%k`qm9#QoWWpPxhAVc8Xu|H67Y>q z6%Vi`T~0kZ@td*u^W!TVH)-9j2s@<+6a#-oZOrne_GAO1>Jll_e)x-dVGxYvt+gUg z0srUcw5Q@YY;#8*DA4ggRriy|ecRR?)V?=4{5a4G^JmN-O4N}{6Rt#TjQQI+8`ItH zppdY0?cTlAj2qM}wZaH%K4~x-%RVm7(1CqtJ1ncA!vuq3nFN+$mymDy#D5gICgJ?5 zqvgvfy8rk4nScF?RB(`tK?U%87`&lDzp*F*GA0&|%7|^SS-VXcLAMt$#7lb zOZiWB8}!nEm-m@XAH1_QjI1 z_Z6D-VYXF+RPRzE5jQodRcPJM-Fgm;LOWp&&Vb*!T= zN?@;N`GEY`+iP|vIWv);{=|F z#SHFyCZtlY^P*nI@=tT%&F6q^K8QrP#&{xpQeB6E3bF3TG0_ikFD{ehT%iu2FiXDC z?s1@3mCd8m37u~K%(^d1O?n5>gauv17_CB=y5PsgR$r%mtK#}~cDs<#Y$?(NSt=K= zI!qp~HhyVV=$VNulxNxer_cS0V+`utQtnGE%Qv)O&VPUkuB)shOeF>MaArP-)cz?k z>eH=FT|`=(s=G8nOdNf?bM+^LlNFy@0WLz%K$4 zTD+S~fDDx=SuHuYCTT*z-=?B5{Yf%~D^ z8xULCUh4DYv;!Wo$sU_YBB6Pny?_BW z>qWhYFl>{=7&QHdKn7KZP#ZOPLHQ)5f#gyi`)gz!X5$$I8^v#K0W4KZk?KSt*mo&% zpMqzTp$-)i9hl=%95y%xhg9c_Va7f;{EZ7akXhDm&!ULPxA!_5Zt6EnZ{!E+4E6Ei z19L`OMSMf9M7oXY>5BJ_wX#qJ!&la)FLLq23FNJT#K&c2`jIO*wF4XjmCn)n)#45i zK2oKu!IAYcx>-8q|CHz0z+U_u)TY$Wx^thv{4`u-Iz8;J4SoMEYzLe6cLyVlGO*Z)mHT=D8mTG)|an6^M%TNLgQ1^hXRyV`i~o**H}jJ&#yV zjxNT_1kFq~S0yMw61Mf*4SE!fFwSpjf_-($+p3zNf~3VfqN_|}o>wyT`_b&<;gE(P zed=6TnhKGI$q-6Pm)?xb4>j|Btd1Va>ObW#<~X@@L>-8Ko&RdHY7m>NGrb!^nNvc1 zX9Gw}L1C>$<^%!HRYyUwV_&XC*5pYf4Sp7fTz+cd(IeYPwDVL{3 zs~>Q5V629r6R_FM3w-%h7xE2o9qjyx0rksq7ZQYF$V{C5<_XzY**2m##S*Q5Gi_)< z>w1VMd@`3Ssa;ng%OdYg5T}M0%Vf|VB1H>kWnKw-Ac7P02Px^Fp4!rnekmcNv4Iyz zT>A60HL6moAr`FSmhw0GhRgiwLHzG;+Bz~DlUpZj6~zI24t>c-s3{-k0^)G3R{l=D z#f!w)Bz7L&r391-60?hHo!EI++^lMhm6#0*;Xs@d)ho)6FLG39^$+1!l^M#l97CH+ zF~j@f@2Ga>VpbC+I++u{wW`jPIDZxiIpZn3n4Mp9t!8uN`4TZrJ4iCHm+w6{1@a0pj2C7wRgTBX>I zuK%~CQOvN!u^wl9bL`5Mt2}lDa|8xmE%vnCd5&z zE;2>HN#{g&hv_|UM9+B{@@BDJ=4V2W<@PYNh=~TmXU7@ZHAq?0hKk~x%s$L6q?Hsb zYpt3_;Sso>rl@)%h!G1rdLYjNpcX{qR8k-MH$NT5fU9quzICDcBub?%$+d{bH(_F68GktXi6e;yO z`9E2>N=fa7vQ<-zYmOkuUG1luH{kw$ggGTAP0{K>$ZH~n0|)6 zT97a1019q>AAF3UUk_^I@wvq`lO>;a9kus+z19#Vc!r5;&+g}bAuW|eMe=|-A>f|n z*+X6Ix2F^+h}2oZoD>woT|9#f(39C@z~PM-$@>dqYVUFI*w{7W;*HG6As47!BZNdA z>aU<+qyW!II%%u`tyR#-7`4u$3j5Hy7^$G+&@7%;pRgPw%J;InGxoAOko!H0Am>^e zZd5CqHmmGc$vkajP|dA-wwF2?`KD$2@bB+Dwz1J{B(Rr_vfCrxT4`04IIMsjGnv%e_ypomD(?TKP zD90Sb879@Dg-x1! zUgIQQQ1(K%xLi0_#)(wHeqVy51?HApXqY1IXo3@(*zBYY;`=Lh@rFeU z{J#!$e~CWnDX8Ib_eP*SoM?MhU2fml$X8%?ImA_}VxxS-s<%9KT=(dcqthsB3OZl` zJyn+-AU>-$IU4??UWpE;fxc~MS<7SSvr{3_JH+Cd{-K=!pLzT}JmFdcA&aMIsn2fV zFCdz}5Y6nWotcp{0JYsFbGcMAYXV;x%~y#AAsX+G$!s>4i$B+WjDP*VhK37XlP)hn zvM$v~2TtdB+Vt6dFl4rQmMmNJnH7VRsccP+{0h@_9;{29s+rYz0+2}?VsQDVhiBw?wgwMxveRsbX5NQRRpRuuqvbyyPrR}3S`ZBDv2QA(pFdzZ{ zyfOJa?7TF1`nEBaT^Mk_3|zePG^KjdC%E#S)SpI;6lg(nt{u}m3n0(2PmQtkZx#Ah z5BB`L9>bYpLtxQNRfA>0612J8EtB;piZxQdV>Qp`^P03*S4YCw{VKcu2OzhMucd4l zc`np{w;}L-)bOR;o`g;~w$zLm=y&kuuq(f|#Em*7$KPB-nQ@!6eonZSHnec}HVe>5 zvO%--5L*ZA&-Yh((PoaEbL8+?6Cf^7$@Y4`CB;k`+;$T*5-*}SJUlYrQNCop-9nu? zJo#q`v?%>s6VuT`oLLsRrL%T_T@cO*Ee%veuP{FokjjLq788Yd_QIT%(b4|hbZo}D zY}2_uz1=er%`;+5`xIarM`r%OAIE9F(QN8D^Kdenmd1nmyoxmPN}ZvZ@@)GNu|h6! zCv#$QAO(1!mF}Y<^)R!>O}n426x+1%dY`5m-q!4@V%iS^q?754EsD2)TN6PuC(i= z=g=rq`)_fNpsZnM?oqUeD(H2=IBOuF5Pwa6FN1eRuB7u9b!#D06?LG&?{A+2@Xo+WpS#1tVe@Dm! zM9oxlCMT~hhRI!KWDXq@M;+FgMsGCaSY=WM0Z^);;`_n+tb2r?RX-iUp)iMIkM*k@3Pj%R* zoS1DV$_K@M7Go{gKPL_6jw1fO{4t-Tnf&b z6uFQIp)7J)NpL3JD2LQ(Su!1^Xl?f^DT}HP#4tIes#0`LOUrhDN!ACWlwK!~Hj zBiuQ8czx|n&OW#Cez&qcSbdffD)PuyfK2+AR=H$Cs6#byofSaBYAu$YhC=SU!=jT8 z;0J6n4b*LjT)U*(!rw}s5r$pUBy5y}prI_)jHv#zJeY$&Q%Is8gR5@=lV}EoXo|bQ zaE~?!S(9(i+jPus`8%dPYkPmb`Hze@5eZ<^hZO)0qJM5T;Q%J>#Fu`2B#0`*zC!)3 zzX~$Wc2csTlx$G8gJwaCbzVV_>tu|US=o}8K7h6gvU<9uvpfm$*z|wPu>IE9NIE-` zhZR+|Ixp9|vq-J^FyXNwP5&zwO=qqGhbVXwaQ&(Bi}`#jf+==9(G(ZGwx`h7-VT)x z%)PY3AMqG*8M~v_E~38HUK5x-`tQfbBGz#ys5HB001e}fC^8TZ83g_?sU~HUJteZ| zB;JV@(so8vuXQM5{o?#Lq^+ljTdeiabG~*r_2*ZC)cZzZ{0BQ$r`M%*)NpY=FsHlZ z3^o1LlEp?b;gu?oa7RkyAU^Z_OK-tTuGKb0II6*?$)-iuc7KO@{`~Z+i{!gpyR4() z|H7}r=Qz0u@qB6UQ`;F1$uUDKb|3v@SQg`!3O5AmVS z4l5-u_B&XduADKh+%|3YyU|4mM7VJnu9L`aYpo3J-EHx|gHTkcLzjiRG5WYQ&m!3l zsM>bmbInS7mnx!>-Y!d(x}@0aocYi1USfpH6mTM|%P^+U$Ps;4j0a5$3A&j2(B+NAb>-zG;gZ-H!L7jUf z1IDW=?1Ethj`x#Jh}@Hm=me`)h(0aLBdXEy1x~jn+sCr{EWjs|3Rg@R88K1<&9o!Z zTFc&lUBbTmY{>@%K5jt*fYxV#QjEHk`^GL7245hwlcu~KD(a>_w*a$dgP z(w=PBE8uUeP2{^FYadiEU>D56ym3&ksdnG}oe6SN-44%lJHXdrMkPSAfZ^py#F3sQ z1BbV3`*P0NE-GhgO(r#qx=A3&9vbrPZ@k!ZKIT=>e}Roq^8H(`Vm{*y3^6sSj?a(di7VFRC>}V-oK$+Ry6Wp<4Qs>`!%ubMyRQ92A31v!u z8Qa*p-Fvc`9=@O&A8^Dm6uZ7`loYJ^R_I{F60;l4JNCQ4WVgqgg@H{!r>o2Y)32pzS^D&j>9+ z06Xnr8HtJz_Vtg-!EaYIsm%l=NK*Y-9^JJ-^ypp}8(#+>@4PAQvSzbS^J}atb_HBq7D^T%5PDu0*{Gws89n;1%f(Jqtuop zb_;FRAR9eL3K89QPISaLJN4kK-4@1dNA4}{oP9s&25g+=*@-o0%XmoEM=$6`_xeG* zhej6;qLA+T0Ol4eXo*Td@^;j=Ut=eaqU*Ny8+(Z04&FDqsY{L0_Z+uJMvn|iCQUYMP7+6sl7{cjBqlQ@Z7-K`v;!?vd
    wVE!)?A=q9VD>rqig-!I)Tgz zFYJPxwx4uSCA4MY7HwJBeDXraDKE}Dm^4)|C@Ifh$9Wf557k1$WgogLsnquGsv^G- zuPN})vqY|qH7sK`4A^x7C)4vKazfHh2^@mkMz?a`t!WX6y>0up$R^CR#Ob}w$^Ax* z(t8--K-LW*v%-%!qni;V8za**m%wJbS9-_jWS_^op!9BB*)z-(!dED1tsbDI8{Ew> zbc?<7#4^GGmGO3}18}Ha*m$|#*T2hb9|8AeH9=ckoZZE-_%1+GVe)ydQp>CfAhU%q zb}f2saXL^}I;0NVJt-0_yQxcqBDUSp1{P2WSK9k1N1G$6&lU~0u5yE@evGr zxN|=R8g{oOt9Q5M<{?viI`eS)*3-1QnjJ62aF$E9i!G7S4U)>+l8*$H^?!^@Xr6tU zrMA80oBF&JZ^JGqi=dyAerd>cq!wk7UxClhZ|#7;|5wui?Ur|-?7ohueRP%G#G$i} zYgIYJKoLv!avEG{H|Fv4rZ1DxDqZ_2xRvZ%D~{9f2`v*el*)EH>LaGo|KwD9X1KZX zHg0E3&+JSy88JTaliywPTz@)R0H%3K&g#A`K*onw0Hxi^P*h@6x`e&GjrQ93;I7_I z!-lqUr$;4uXudnUx5%buzsVhEVosc&)^f!Z>-t(p!&sbYqU3uunVMne(8PL3t!_p+ ztu#Det{&^}3oU*MIJQH3Vhh>qmnXPJ2Dw=Jdc37%Y_4FK=)FAK^a*jSp)kE)(ttX5 zeOd^EE5~|Xb}ekJ#!y!-81Og3a+XajGdkSpwC*Q=z998*ue4YQXnAfyw>=P}a_Rby zgbY0LaKAp*R-G<$^{)B2%r1QGnf>@#zTS#8zL^K^6G*UqRg>>wBVLNR!aR8lJ7xAV z#GYT{Ml9-dhadPDejc~kZu?*}4tc9T!L)*C(rNi@3;TRAO(ib@u16|qt+_)FWIua? z2VYBbbstu02UOoS&2r77$iH{736DI@b}p|qV~rcU&)dHXHmyUfKM8GTosQmuQCA+U z@HeE--G;&Q9Y%na*WTrgQ4AA(qH|AT-F1{_A<$sx*1+K2MvpX54~`hc{&ksZ^UuB4 zSYNr1A^ys3ujVEuqg3Uq30Kc!Cm$@+8*xY!67A8-!`SkL+#@_rZgo4x;N1v!Lnm-A z5@x7qC)l1!x-r9Y3&uBD{*Kle}`8@CWaFR*?7YEEgDN!Fy8LwA#G7v`60t zo%y0q6Ra&u2P(~1B%LFBS37M#j}o?rb~3jhEMGF=WP46T6o!B7S94_5#S-&BN1|B9 zFh(B^y2vN!)GGIhkk^Oez2rgzC9K~%)Ag-3)5oZ{qo8P5d8B7GMl)+-srHrgw!tzQ z6lj2QXDmB?Mc!Wpy1ZOV%o2h9q~i*(D!@TK!8L&8q2>A(fGGtBJI_N|^!Tqfg%;{y zhJA7gC8Nmw|1oP_R|dXth=9&vzqa5?SVpEe*G3O*lf45lJfwU~F&b<~%%9Bv`Y~EHyt`o1cL>@I&*I>92Qt zwlvYzl+s#ih~6jSgOuO07!hiQnIEPiyFuz2&uPO&e%S-qo&bOsa{Kic!Ru{=(Xab6 zwwna#(Oh?OLf)f{-(sSBGkk1-WnYIP9(b>ab^LhRemPsci-Ye&1`#r!(b;+~Cpuso z+dZfvJ^6Kf1wUr_Z$><@ini-BwB6=6_Tn%KXYds;>H3+hy^`@iggtNW5O*T%6D>hn zG%9icHyUzU;B{Vyu5E7sz-pB3iw&Do|NJIli>KJ(&Rp6ymS!7s=y9I|9@jVc79|18 z*-oFXl*MA7&VbjC&Xui%>_e}&>%ooR@|!(8_OHq7>oBgOwbfQHk{KIdDwM8;H;|oT z)>d@>sR{vGn+Z12OTcQC(S#y*gA37_>w+`*KHFrYkFM!OfCs_m?Z6uRkcMG@4!Mlx;fTd(|-|8oXOfVs7B@I?ih@D9y@Qr8uz(_IC*{uD_D8^`(IlwdCA#K5qs}w`KvIC>3hUBsE|4=a(lcUHr~%6WItoG6S#Mu*clEaqXe83|lTb8VHidN- zTQhda*i|>qL!+6v-FYzuw0*NXgG;;L$hzVbclxqn4rMTEm8PrpJ=q6IRxX5AU>Dx+ zal%<%p|vk_})-le!veURMsyxZi${RGkvrurn&t z#%w=*=IUz6dUyyKYig2N6^7bva`$^P+f-?Cb|b3T$ftdp(C&XX`=)r~8b=DgglgNlZ<;Nfd`ft^3;9`qq7Xe}x|E{Hwobc@gH=8OS(AP(L=*;Ik(L`T6A zUX37+vB=XTq9`jWwjZjC(rJ>h%o=k0(oP*|Y>qFACq`Tiu3G#K!w2@)qmf?DD}#0` z&w5u4`mUF~bq}Mrxu%@Fz(iunO9FmBhYJp&&m)#|^^?^af}cm2wX0h+yAd&?C;fYz z8C6D{c|8OOPZI5lnICP@!4uTt0pcjy3W4h9+p)t*P6T^0`fBEIj1mSyu$X%Y2^Z$H zWOz`2V>8DW>0|~(mt-HC&uI&eA!0!3XQJ32EkkirJ>281E%?!+UYZ8U^7tsX-{Mty!2HL{ zn;-kJmGp3hREF=|-#Ooy@7zO0!GGo>8q)3CZkl_dp4*)U;4YA_SAVHC!z1rVBjV!> zBp$rml-iFFdPU6Sv++`&sF*EG5&O1$qS=sAJ@6STiX`y z6RY8j$Y0dQ`O~<76B?(tfM74#UoGJpn*GXdfY9xiOhAk>Bb|}m4F!hW0+bO`!6 zt0JJt{?99wMq*f096G)TQ{Sv~-Elj(S1?&LP=d@|JOGy?vq;pSi&~IYpt?^Mp>bP` z$H6VL^I0&ikj=#@L0Y9OKs{djN`SgN$HKf1lJEcYUK>u`5MG=Y`x5l1;@W$p-C2qlI+#CPlotCNqvqZr_3Fu*lI@!-@ydfdSB5pZ8@Z;0 zzG>n{G1kl>M|FDUsqsz9#>t49{)meWM+>VO>i{Pne<`jGpB@PGIX|CE$nnbqAeJYU z#}-eHI6dT2mNVOP;Z)=E;M)rh!RrVHGnXKOD_g@VtqtC9K`lS4b+2{@9az5giKgV~ zw|;Aiatqt5bNQ|g9~WqehM8WT6N$RYPMdNwL~EjeTfWP)+oJK_IW@)&CR$ki5&W|A zi(3$Lvjb{jj%kO~1nBq&$J*|I^J_Z=NHeSjaj>CgZ4G~6xVjx{@NW1z>0=s00M5M? z_gN!yvt5qgjBYcu=KC=rZX~5v1dl7!nj)cqV4zmP>rpovbnw45G>~!-Fd=N zn&@#^3St0hO<%WP^d=x?`+0k*-YO77sO(%=($iv=QH`}-Vk`hbt^Spt< zgbh3$HAh`cq!hAyGXpaa&+TyIBYkY66vL*fwW5J_s6YfRDr^0szfbIzYw3hWdo;Ft zLjM{L2>xdUQAwPxk&4(WwZo70|6xbEj-&lr&VP>yJuWNkThr3QU%D985Ju$g!cV)r z86bMd_D)uY2*l{$uDzYQ*2nBx?>;K5r+2g*f_OqM`N?6gGhSQFI_IXgYCUhMtjrSZ zeSC=Da#}Cq8bT?fjCy%So`cDyq8>O9IeYXKEXRx%mm6cwG#4C>ujlEF!*1mKPt`Tuz zf)CR%KK=a^eBoFM`#F37uGcLF+jFY~W_}L1iPwu6Theae89a_4+Qy8e-t{YA``g2M zb|9bkgQ^y4CqivycF3YMcyP?u=SV&mo>`n{j*fT@;PU#y=(_C%{_J_vH?$=95JK!V zzs(5zRpyhj0{WHD+fR0P`+jOwb?c{}nwA|9mbGpBfKe&-(Y3h(Ve=9tJ1NA0X!8Hj z^;ThVMPZg`0s(@1a7b`>*Ce>Ry9X((a3}~NSa5d;?(Xg`MexG43U}8_cTdku&-dNO zdOfwy-v3$ul9w&^3_*K}k@F`ue{}cPr`787M4LCmEXcw2AK=JGrsRBnz$^67&R#m-7KzW{5CYRuez&Y`KDK0Q$Q4!z6_BXXv=mt zDt0>Quwf=!rg~~ltTm`RdwTs8{m8*_QuQ=HR(&Ya)ED?_B{H7T`sUYq*bJlanitm3 zipmojaORGH{bGAb5sBI%CGE0AgKaGMzTa&;&_nx*T(O%XdR+TSu63@}Ds0Ae)CGrV ztTnOT*x{P3$y;k$M{7>+nk|hpqkMMKO$uGlar@s3pe4?)*+ctu zGW*u`ABql7vixqQ%s5%9A=J=GYn;qq1UUe%3Y|~$8lO5ORO{v5u@^lv)bMFbx4h+! za3dWo)TuS_s-tvkCUlWB3E+SH`*t_c-e2@%+B&3vp0wt6KDIQWZV z=zL@>s9nOkPIYrK(&_kL8zZ82|0XbV6cytdeq;y7@A7@0tN!#2NRx0d7`hum-S5R> z`Q2LF^qJh3dtilBL5vST?(|u>{l}x75Ur&Pdo#w$r$7&i^$rZ}2iRt>yyq>m$e+dg z-QsgWykNe_?mf4=_T4I_Hvbr%r^t*6Y za342j?cUi1SEj)}NHcGn>lZpu1dctj^%TTEh5xYvk*@K>*;SGRqk^fjgRs*2zcKXx zb;Vf_2VWc2)lf`sv;*4QcpEbY=JhnGe3Fir$2Wzg9=+Tbs@5=z#5xI-x_B}3`hZUE zRYL5S$Y#g=SPHAWhy<7hzf#AWqt`j!2i`R&h5LXv*|N5#8d8Dpy&|?rNsVTrfoE_A zsZn5EP2S=Xnn`lK#FU;2^Dvkt-zB9YIW(-^iMGU!k!~)m5DV4hsi4k8M?z8)q)HS? zmRI~Bg>Y*>aL2aN>GVl;$5$ylk2)Ns<*}+XW14oAUp?n*&Y>dxf(LCAq)I3 zgUz@Q>&$;=0ia2s&4L^xCTqWR8q2!zxwLj$+3NokZXB%MTUDH3qM7%9N&ht_)uGU( z=H0S#5TOe@IC}m!ivnctpb`L(IKEUa?4&rYYhL0z(U^i4R$P=hJD@+JU&S5CDfsMN z@vQ8nKCVZ@XFN_Dj4P#iJ!0P5vsWTg(U!oZ=%gQt=IsfI$;k)1-ZZ=qh~pQIkp$^| z{i2WK0x!EsT!_)9V2CtV4D(PhNZ~flzJ5#0#|6SKy6~>x3(iT^aU1JU6Ct)pwyr~1)=Ufl=5>!AhE;^ zlQh?I5jX@|+AVPt$s43h(aVhNN;*x}XxYuQKcDSZT%cMxP=ip(P38FJ!rie}GzU*{ z^^7W9g|KxghiU1-a9_i~PRxJvfC=ozAhgriH;*($QiOmydMQ7r`R?8i$0vDFk`AgR zqJ=}PUmFj*c0;G=|FjlPhjmH**Y{Qx0pb%3(VhQ(=L}CK`>zFy6itBaOvo&5Gzg>$A=uH27r6_u2=A(FkcYXD#S7b(g50G9Ja163tRq180&H&r(h#8CAe zLE^15kvdGrv;u(*SX=D!MwQWez-G;+zt?f?v!fF~Uzn_~ZrB>z7Uk4E9b0chTvusy z5m!(e1w1aaRXvWYDGLi(lCIRbGAYQc83 zMo{|th6XjA(6iO{wQxs32LcSk;jW)DbLVAf3YHQ{{SL^( zI->s0;vzvK{u~QA`29;Vf)8uO-KR?a$OS7>SwZJl?nFYs%KNyP0_R$mq0jT`W6>Gh ziNmf~FvX7IlJZI4L2p21p+<5eu-L}X?Xr0?YwVwtHD(U)_B^5?C^2BS=j%vGp~{LG zIdV(dCrW=-Ob_2L7aTVSD?+?9CBgj#R&l6$2ZCC#V!NvU-U$aR;KD0b+Kk=p(Ke#R zU!ex+C)TO!dv{Q5pLy_32P1tAm26pDt+!AZZ2w$JyUrj~QijaxL2smPFBv3*djh2W zVBIYlqat!p{S9*Tkg$4tdzcl%^y3xb=LIHus68}lIpJawm-m&;Nxwu>5n>}s zwQ0ObTZ9i2iE?aMR_xYu{)Vc|@Z|m?VJuhHwbF}-{9N;`vsmG((PsS|nY2E_4vwhH zc5RBZtX3M|#DeniQfc;W79qQh_vdb>H+^PIFzDq{7!t3Y6Un>KdFhppdyfhj0YfkzVhyDQ!+pocdWfgSgmq2eSX}Tq3BcmgHF)=N>ZOA zc}3QL6GZnPEgZiZstZHmL_E1NG)`s_EUc-jCm z+Ga$m1c1lwbixc=eoJf@riN^`+Zp?v01<;zvm?t2=HxkjP0ULf(GuoudTBZXE-Shk z&aVGrEXuhN?^fCuVO>h#1*S;j3hn=+^wL6scMq!Qafv)sIpZE<-K^;B+dE7emjm4k z>6HYs51%@_IlH;*waX{PN)(<*>e^vXR5syX5A!%f8E)ZP^>l61%3JV(AJ9#Cpr7SP z*@@+4Yh(CiBJkC6@QCN_mmDglA!-Ct+#XzYHGf@E=BWh3K-_HXgTb4vsFwJ4L9_W4 z-o6#eJyrITIigFRv8?As83xhG034F6Ziy6;AG54q#jc+8H}-|Zkdo7A^L`DyL)bEZ zw``LmFUV**&Q7U9l=PJ$6xqIq9Ir<`>xT{$bQVoREPSykn=pDb!QXBTYE?cb_ui~H zyQ&--=O5Nd^2*+F(%*_@TX<8J6}1W~{4ve0?YR1qdKklbxRZ61X>aLPoyA@-E+7kb zaZtW#jokVXf2YZDB<;f>k2bHpxnp08Dd3ZOGU3@SMiu385`P8W&o{KR+_)b83aM!& z914H()xlUvc2?EaSFaT8u|85Vn`u2{=hr4qwp%cDR!B5X_l+p>u{5FKP~m+w#sqei zpSnDGkBGD z`F!q4=S>BB@(8`2G$&RE?_5D^{Vn~`-WvF9hk&@k3e44ywoR^%4V|LAj~~8aQ#&%F zOon~3IpjU;je0L4g~=DM8-XxYlf6hek!HRekD>lE?WhyR73{t2j1yb>UiTjY-{{bI&+mq#Wf(C95zv5 z8R!^}JNX|iYNGwU_{fuqJdW*y#TuG@%!Tf-L$B&z(b7$2J&=Hab#!{NlCnV z%~Efe8BDA4%#9=7`5j>y^OJzV%H9}JYM{`nwrM^ugrGO}c(!S=Q5yL+ z=ZALW+owDhyl=#OP3!~9cn!Yj>cPQ&fyl9b(_+V9{53OmR88q(xla)h3hyId# z(F&`z!|20oA=Jo(`FMB`GWLM$gCE_%n^B-MR&m)@4u?2i5w(@ovpwhD)+wiiAw9?@o^Ni$kOo57llG`hM> zC9!ZwuAt*)^YpBwI0pTBEh{=H(0P%7OL9UT@?^yPpBZjl14s+Vf$(O;ghtfX

    YbT6zF9drbD zwHFxg1OuP!rFX%xa|(QH6ZOL!$Gqx^T^D#aBnISV{34GZr6rv6Z|sU5g$I3E6(<}+ z0xzHN<9wXQd!l~NbBI(ePXtaj-VZR_g{8=tu*s((jL-M^-cjbv5a=Se z1L2VAg0f@CJ=3K-si-sN`1Ng%Drv~V%Q}#@9Gx6N#n6U)a{V~#QG(x+6JmjGfchv; za^DCc47^dJji{e!7FMzVj~r}RFsjJN8hD}wrg?b7_1zd7G808x1JCvdRG-~1K`q#a|# zc6(n?w3#m{cYDxOqIFPanxldm5bvl&z~0NR-&O9RMa15|gS2d?he{4d;5V`4_`5sE zvuc=__(=MYH6Q;nbqL(@`=4uygCQ<~roxeMqs=#nUZ6yAK5D8=V7mHrf$he8<-eFz zXflxpO8wt_-t-JiW|HK+R=%djk#`Q+kOF=iA>3&$&Hq2S?^ZADP426>RU^&U(?QWX zK;XOqV(Zyd&bnw6p;!vDSL1uw==OPwiBitw4dl2Prd@nCebbpLXYm4hSK|95v}=!F z*v(p-#ZSc*aHSg~tJ5z8mV5f$qpMX}q;mzuDQ@D?5A!Exf8GBepK{-WXY2bX)`)s) z(e|kASdVD#L(?x(i+%DYB`!{U7P6#G+K0aZn`}u4MWjfJx(zPQt7LQw-}%*M1~U!c z2CNHyyyUuM4}K%87BG7f{eF(IL6CAIaM}8aeof~%?ZH=>WLhf#Bo&CMmb-Wymrb@K z=-ypFPf=uYvy@)08F$Uyn!a|e*$pOPU~GAVLmV4GUonY2Mj#FcZO10FT^vX2hF$LQ zL&7@`(kU9@o8x3MNIQ3?E96`!gnvlp7+{c&-gyAaZ)G>$k|3#taXXG=mkey$NciO+ zZ??zrND6F^#mMZ9UDEEoS%P7V#zU58h9D(8O&iC6Xc0U85i>{Z% z9236I&f~CM&`k9!)uXB3Cjn1f@>2@YA5aL5SGzUzLr=m4LBnozUShXAf8p_YRu;G! z^JXyu>~`I##8I|oMv__QOW`zmiVfrwb=YoR49=F`;-a(WDiS7NTM$9pl8h;;i5(H+erru%X_4G`dI;_d`|^z6gBKi24tM-nu?_957kCn z#Re9icNunT2>%(xoAE^(5Gv~`^F1fSx|T#c7CrayR%o6j9XeLmYEKw_NSLEF zKry*toGG>0Tu7jUAt8{Mu;H=W$7qB^^f%eugN}yygk~-?Y~arLA%ZRfK*7$q#tzen zEuEp7Lj73*rn?oZ{dBiA`a=g+p%h6m=))jiBzQ6-HC0^ek?gj)--d>|@H7WTF=+kO zU(^rrYUhn!5<>i`%3Vz0+~a*izZNXXQeV;Ku>x_b!2={m8(lZbQXn~vEKc+1=7I-w z^Mh%JLpOTGs!QYX6Tc z-t-zp{&ZsZ?Wl2eifX0F1u-7Dcz!7mo-}Xiz%^#5GB`Cd?gUBPI$2)Byk31fRdhMQduwo9- zxGm@~W#z~grYpwGQbrj(o^WkH{gZufBtTaRMP1tSYyyr%37yN5n3hhkV`m;F{UQ)u zvsse__C{7@w%rJC!sNAi1*7(kRzKA-MuB%*L^U9Hi}w2Rp?Sc}jD^ih`mD=KPromf zW%p>XY^RSb+_(?>ep|-im!1YRSNXKgEoPpyS>0j3 zPOXef(R*5tsH<;SsRT^eK=O{wT3+&0R0u(=KD~pX)R@6k!DzP6%{d zDMUHC`&-oIm!tYuMn8H2-`fTnJtFC7fC`DUj$1dw!rOHf`?Smp%A&8X+%!2{8P0O! z8O;siz64s;M2N#;DAd4_N>NwJ6%clAVPUie)G59$M>xvQg_(P>n^FKF1e+TPq@t=AF_{3^2nvS z?uQ>AfqkYgrCQV1{Ygl@Z#$Q^GtFJQya{7~uGd$ky2>sfFc}pN3jx)!r3;yZZpLg8 zq2&;uh-cKm^5VN$@~#F*;4Pkv{`P1^jSo7O6I{A>UE9g4XW*m})5ge_Zz41NSW0^# zxzTO+%sU|V(45VAta|jS#ap9^lQ0xY&z2H4*LpycHfy^;@>CkA?;mr>sdhpmt}4da z-Qz$&d%k0z^a1rjpOkUl{fwN!rb9H{C*M`0I_gbt^ZQG@`>LZ{TM`1ys*M{g4t+eFRPqUZ8#XO zAnW9B*z&#u}d3yTsDwgd){b^okB1&vEy#_ zHnl}eekZZ~_dP9(`Rf?mfdwQ-a9!!h5;qSIRhM4PyaR~Doo#YtkstQM`1$$SsPM;) zIoi^UorA;VQGw9|8=Y{aK*e0G`pYB;e9bgB;!c!1Zv3XEuFbMD^Ao6=t#fo>yNokz zEEumT-*%trC=ao#SmI(GQWZ*0cXLs$^>r@4GWBg7X&kL$L);;a7h#)`&))rf+3uh> z=5nIF+{t|mRPWjySDX=TH+mLK6%t%Kx8MKWN0?)1$8cYDXqVa{JE7>i#4$&5S}S^u z*l|nWu~j46B{ZQKvdZ9q%X{cjL}0q&` z>|nXeAEXIeIVf8e6?}|7h7KS<0jL7M^+u4D)ZSbZ2P#-FCpfwk$n~p!w==+!Oz*@E5sM_#aQLk@JT4?0VMe%r@N++8%RpiSK$*7NGOR@GO>AJytE~NX-%M zI(c1`J%C6c>G{5v&b(sUTES8t~|%rxy0F+vq~uohasBe?f4Rm~Uo zOpLXmtNgN@NvcnOV&%19yN1I@fXJFQn+or9m$DU<>YkpmCg+M`4jYF7AYdl z%~+RUy`MjR1Eug5%gE%Sp_Azh%%|4UgMTU|ZkQfpXki~gE~&#$KR}twAIVUN0)!8C z%IsAqc#4WHtA&&@)9V$=3pKLPIN(C6f7CHcILs!pMf(;qeUNk8-%DkKSQ9tUije(l zNwKmEvoOih#fdd`SB}13hsZxzM6(7s?|06RKaaP=bXchPUq701&EqG91>iK~(S7Gf zJ18#2?=5BGnPzAVns)xNEgNJu6#i~=2$O6jxk7`wh0{|$l@oN)BRY0fph%RR56sqY zWYTYA158L859$qcRai%tE&i#+4p92`_sDOC;e3#v5)M0HQu6Z&U8WGT2>-3hV1qJ{j<<2!;mXF&Cgdd2SfV#n*huMF8>T(IVH!ey zsVv&9VZJPejZ4gXb^Gw0ATy-|yiIIX`)wXq3&kEq);f8v#SH}?hoN>y&5*;Y)joE@ zzfEOR7O2F?8ERo4KZ5peHqkvUhes*@qIO!@RtA^Lzm46ko^QNwUTndbd#L3pHKx-TnGv zDa;vlAHjl0FvOpI?u=Fg5QEF{O1GU*F0`*A(5vcgW=CU4xAy#MCBWse57asIrlpIzKchgTTmOn^-I2lN3;+*KI5z8-iIN-PZOLIggzN>K~ zi6@a{rJ22gn@L3dCaW%#hvXX*sFbHApir{Wa4;>zVaYOx6KP{WLh~)-SWX+R-?j4m zqojOzje}miE7B^f z1BRo*hn$=B7{Gp^gCGZxi<;J`#{O9I=w3@T%D@-k-%j5eG5z5EnhtmDziAuSZ854b z4IMF;Dbb4r^62A8?wMP4O3y=H+3S#W$ET{fw37H+Uro6(+kAydH{XUa2cdIT+&Zv7 zQAFtyn|WQTr*Es|mDLtwE!jOP(tAPi%{m6{*|hAe`W?wyT&{3Bx42Gf-RWb}xMgl> zUu6mFZw9ZrWy1^|^yG;s5Ju-3ye8Jf7=|WtwV6PRI2o>4s5-A(sGbEI zY2-D}VJ2AOGhn!QTW&a2lBI9RQ8!DEokX1;FCwYPD@XoW;YV7$+5i@??*lzjmNJc` zw}f`13~iX)qWp0l+I8ZO@8kWo$zDI6T~Yb^C!iAN|h7xMg|H@b4OA;&$gPFFu@g}{!G|AtIXiUuRSa%rP+DeR{mJL<1zcL*6Z*RXHMiz(d$%vA}jS;}5wVLM1HCop+yWtmT=iz3oTVwpt zT8dE{*6q*6n(T4TWA~Vl7(q=JbCLa_0F{^cHQV{%Tqb`=x~ ztb)WrUA}Hxj9&RXk`CtuK9N$&=5x{Izsi&igUhrJ?hb-^s&wDSV;Tmh#vSyvCHJ)Y zHxWxYkp4XPQHjnqHAIn@wyw908UCUB47}TLA@u1{Bkc5gt7fDpfQQgUqoD07-wJ$a zD=^#nl^~oxpV7gpbKS>esy8kUym8GZrE21QDFyv0f|NOs9;NI55x+TZ&ZmGh?fy7| zdh{JEl$UEP1nMl1ygU;Vb~j@a+8d)mwL%q>7Rbl3Yz8P)ZO+lYQ!7-`F-=bh@+O2{xR?fv zD}Ca2lR@cih=y^;1ua{ZxangU(ndq%hpl=u#JkQ@c{patG))P28T2)CDZ5H1Z$0kglx`?q!%!UTD6i498%GY~WoM@B zNPikYHVRrivTKTy!t+t6AGQ0rRu@lcRO0YU_Pa*pX~?|g&ywpa{8X<(p2FG`cO=8?j&v zlW;nF_(lk6LUZr*Z;R^TtiEy6-w4juu_Lq`FD^E$N=+q-VM~s%`*ydJ&vMYV>uoAD z*%y<7)U;BLoxYyc!jJaO7Q^7YngRMR<*`!hqD2|-PqJ~(EWH-Y4UrSQ-jDNzEEqh} zRfexK884uhAHqNmn6BHOc&Zhv5HEU?ue1x-yBa7EZ0 z=`PG4&DX8uy^edY9a!+x>7xX(0wx?=$fa)4w4%yi5tpc>P3cZ%G~_RcRUTn3i}wNP za>tvNw%VgI#+Q&}4(Bc<;qpVVSCoi;i2c%A?BUoj#}JK;<>SO& z(zP?oFh|siyWAuxW<&V-*3&0*hXr3HojR$xX+mTPuDy|z{S`)rf}eQWWA33t$wyoO z480anOGU0sn@WyLdWDl@+lKEqqGUjDOw4obJBuX<8ukq%y9iPvLlECRWlKNZKMgUP zlB%|VB#SHgeLa-%nF@>n99es7cNr~+8ow&RkZgt(F|r|Dsbz#8rJ|Y4g1csP1P%>{ z-J|<3eVc`p4TFyY<>A|Ew?N#hHSQ)p%K1)#`%&^kpp^N&%O2qca&}%$;E#uBi#;^} zr%4*Le%JbZ_`MOEkdAaN?3v2Mn*m{G$=>vpp!SG#ALK*E%NTm2`lY!7ZUEG+%_WuNl*~ef@9cF6CX&u0HNSIX)gS9*z&QN}9NThn z2%~+DW$O%fAP>&6gm``!@{KjPEiFeBkb;IRZ7$cgB0fpOry_BEvN1PV#wyQk%}NW# z^$&D=wg&ekQfpnT)}g?liA*L(LdgY};#XguW^Hccj*`jx+K}+G{Yt*NJ@>PTeZ6=S zq&aQQQCi6o@M*xPpH9ruLJwbASLlmCRPvIR@o}{-o;iIsmhw`fOJ`>S+rct#zHcbq zZn5LolDU58=whSfb}7MfaVfzr0U?|Yv6UOvx2|SHjc00ZsA`!^3hVx5cr8q{K`vCU zeOAWWw1N@1eLq+Ik7P2Oy!OAcsv z`!i7P^SS)!lGIz>hP3`$@tZvPQE4Y_eh8RfBU_~~(DWr5 z{f%NW&}D?=^8!Pk;+aLT^Y^7HUs}K%dObj+#Hc>ab_^`L%?w11R@`c)aOmie7(o%zt~wPVp;gb+(#g3ygf z$_)kDg_X)Cb0=ryJNvsglJLI5P4=Bqa6)?s*5e4OeuMmL;iVjmQS_ZKf*lRv>|Xm2 zQv|%RS%vvA%KY7#j=aF1gk5dBp?rW~7RS{ObZdSeIr{o~wHHv2h#*`i! zFpH?$7&`h4DVA0~F3`9=_tH4+nA2%wv{pL)KG}58x!qpq8P$K-TzvJ>3vx!Czvf=x zf%+|j9yc`N+M?=^csrfRNI`sat)0b2^Diq}IsKO~U9UGZuMQB<4$4Se>wsyYJ!q{4V3Z&)Q_`2~CCh@I2Y9%&1*q0Tvxua4qoj zu@7LpSmjqT-R6MByRiUIc3)h%s*=&EBQumNuA1@1zrHh>tlxO2ojO~*QgmQxme+aB z-%o^8_5gB~=cRFIVBK&0B2HrRI^^EN?6=$J=GaLtHSg9_0?y{rB+FaPZpXJX6G1B< zGH!2o7b*8S|490L1(d6;0T8X6FSMDAjA``{KUogi3a^O1yihsex8zkBon9|=k-_#T zoTDmFL&%>7ax`3tR`*H23mZkYg@k)YPA-#q6P6^b*9~mIr;BnivU}#Bp zNs1_(Hp3pp$dbwXRmS8aJ|g;I8y1H3gAnhof-OoSN(NC?y}N7|84R4q(O6akq$r3@dYx#2&P$7MoBfaATvdxb^CxJp)E$~X6w;cSppmfub zH!C{XLEy1t2L^19$?4(+nQ&161^fyV8JT{s^K4$W327q_p%Zml!OserM{g5tCL@2W zy6yc3Hc|mT_ByV>Nxz&mr|EYq!!jSstT+GN=1y#ydhTyNf6Y!Mr5N;2M=}0ED0Ti~VLZ?`(zYF1&jx$Y-Wzo!!oCB2!k;B+{dT z=x1G(57x<}&x56j3;tc(W|PMjsmN|hp3_O0-)z@{mls0KPd21U%Ygd!Y$p{eP-jbQ0Zr-ks5sG`rhD3gz}8n6_Ivp|I3@g-54avLYnY*yRRV`k=Kx{#Q;k@Uq>s!c_7=-Op+(*Xeu z2ASUU{ktz!L#>vNW>SkKpBWf5%qbrDS!<~FmWbtTw9Wb_r+M9C-PMvHBlqkO+a1>( zYTD5~Zd34GUwn3_7z7%mIS&-#DDQ(bAWS ze$}e{#a-NC4c|FFvt>w%B(qi|k$=UsH-=j!pq<;~5+Lz+f~%Zf=hGnY<9X-jah&9F z^lQRV94@Zy!P~^*@twf~Cs_+N`Nz<-_dMKw%#SDd)%NRHSC0L8Un0|c7T|AoO}u1E z+9Wiq`tsT1zi&(odhCt)x|>FaDRHlLr>wL3SiBxUY_7ZzD!0Bo?t~%l`JJF_AeH3! z!#=uZW^06i@fJRi7h3^;hlqDwGp{_1q?-)b&G*zOlZTj7@Z0)c#JXN2XDtIxSJ3tS z$O7_Pj*kO!j-UCPaOIvT{VwzjlPkB1LT%zR2jF4Ydl>z3w|xm_{`J4PC%w%|#KPAt zIJk4Y8t>*)W&H6<)`ZcyZa3+22NcUz+ zzamX}26=|X)v2Z&lT6-kFB#tJJz3n*jW3DZq?$WjvXuu8oxk&*=rTl=7CkFA71GZB zBlON3DR`rEfu@U^ox3+sg*pEX`=2Lcv^_AcZAEvAPJ^-cQd87Iz|?%`H^<0Ov!q1SPR^lRIMI4H zkciw-#tPYn@6fJ8As9G~rzz&TAunz_Li}9yQBTXGLD-IOby}iOv|2d?{1GwJ`=HPI z&+kFcSi4NA83#i|J@0p*Yfkc%piWJ1DC5fObXCuN+-rL_{Mua^UvDeHRo|u<|9jZ$ zCQi8@i=Q!KASEo=M(!VBHG_2eh-F8=Z|zp|=OgrCUah2ccb|g|9N@4!TI9#5s;F&j zYm+Ee-}?_wr|3ndG=6lKt^RHAc{gq){O@;fmrI~S{7ttVJ4}htn*#~{PuC(uUdm}W z7t(Z{E}R9CFeU z6*}=}W)=cPBneWV6P}`LF}~*mcO8G2Nn9U-j=aEdc$`e-$@{Xi@4{NOdbnIO#>MX7 zXEAWk(WAr9nq_HIdmldG3*;x1Y#f51#l4bF)DSb|T@}7b6GooH8S8k_RArx!pkyJC z2%_OCXnw`EcAM^Ci*EA1)~>f<{Ld2tj6TLkP`YZc<77R>Co@_b4|R8UG~hB4@PA?9 zKcTU)B>pb@wXW$MD(`cPcQhHCOb1t@wMj60KzZsze9P0lf!JLzgFdsRO9(=aO=#07 zkH{g4!ckMPCQkLu|LPM_Sm+-2;cSWV&1`pxJ#N*CKX&ES7Db`=7r#;Ls)F?vQtt=C z4rhL!+Yk1hGgA5$PQu2XpfKz6?0?a&49wCPtU(Uo zSV38)FJt=aDOxJN;X~qXXCYh~v$eje`W7MglI|(s3!8LmIdj3Od;(Yzw73dWtLrE1 zqE7p#+Qg>h172eAiah4%cL3h1J|MGwr(=6?+jg_q;eZF=Zby}@lZM?C5 zF73Z|60ak@G#(o((*z1-Oh;9fS&f-swn(lDyD(k;Bx)1uI?^tmC&;=#V${=!bBeB< zTO?m-{$z1wTXp3=anI?^gbSbId3$YE8W3-@mA61&Oz&l@hB?F%o)Kx^@~Yqg6Zd9= zu08opuSW2)X+Mf_zTy_VF2c+Kyn}zza_~4d3a}Qtd8;Vy%XEU`O8*oKOh?>4+Mx4! z-KQ*n-LFupq=g>R;JOdtOy($Mqz?I3`GQ&ixu!r zFPD&&R(p29Rl%6%f+j9A)pB*$6lvnf+qgT^*})1%9iq&Odj1~=$^SZ6ro2DgX;9ZO zuaBr^54pAz`q}8tn|AcO$PGsE>#IRilMzgrXq>A*Hwhph1z4^ERFxhUS1ZzYnffGk zsl>>~rVMUE!LBUn_s}|{43-Duj=L${Cf9eXK~?3)Y9Qiewz#r~INn7}Jtcs7$cr`` z3QilKOL(Zk?OCa(&(RCz=ILIvIjYlT^9oNvdHVO>VQjYV$D5b^2`8*qnYBduI(GJ@ zpKRm`ou{cmoX$MSSNmt?*@DPIr%Ue-*PRdw$@wwW3C_x>d3j8prkF`z#~GT>SNVEc zU+qw6DcXJ;pZ*NaN3UI;fk!$K`v`lzpP4n#;7Zz-DG_E!qLh5LTPqy*vIZ=MVxe^4;Qj#>Zkeb zlx581_VnbJqq0GOwP?=kBI&;9MLcG2me?x1N4qP&f?>u#ppVZ@=8(N{LrI$x^U#^e zUg7O=FMPLbiYF-ElXB$0y=MWCe6Hq`c*Zp&>u~iO)QR zAdswux;<|Qr1V#HkjWf8EEcif-k$t&tIGa8Lha!;oKc$ht@IG-z$Qk zgU=OaR8QkVRe2w#*@H1Hc=4PiP)X8(}QY8=_dnt zerb5ysLI}Ocwg*TUQ=lC^?sWUP1*- zR>aoDJn4(BX5i*R(cMa};s*MsgnlTPA+Gcd%bV}2kG+#stMt&@4LY`&1g7|nd+Lcb zxxw}a5wWsVc?1~xh5XIP-vf)j`raT^4Me-~|AFg!e(zBiK7BmwXMih?Uj7Jt>swc! zAh2dn+Gt;ho{1PIRRy_kFSVtD4snB%K<=C3k_oy~^XoACo4gdK6LOgg*sA zhm(EYP|%*M<10`fV&u5mNSE}3=S?E;U$f8uhC_%!jWS_QHzT zyZ}nVzbVKD!fVZ|i{+DZiO3|C{1wPjf0s~=^tj2nxyA)LAz5R{@FQI*;^B#h|8c&U z;#VN2jEBDyClCQ&4*1meStfVMdl+90I&U(;aD?gSU8WRFnbos&XekE0v`g9|@1GP! zeRGn?C6C6~!t3;yzu?hgZtAJFzyP0iv1)}t7ATXO;j~{IAw{}Xlivk4#P9+}Lcl^W z%Kp5Mpi8U^SgGMdUx=NN0Akt8Dx&8DjN)v*5)&U^{sA@F*YI)6b)Z+&K;UlsD8TaW znyu2yexnMN?Vq+;2Ez+Nj$?(BLgF%T#tBMszOP~|>d<9B&c7?BSUxY#96 z%frG%G2@`JyDeU81$b!u`!6ZS|M;KSJwE1J8v|i30p2bhb*%A!kTw%C7A-F?zAF6N zvk#uc-7AQ)jq4=;!E9HJ%?nC%c3u<2odLT_)(ncsl-B zJ#HCrywmq{z%3U0X`NbRj79GEXzuiIc;f%XB&^9phjLON^Y+GS`P;nBs_5@qq}Bkp z9{>+5J&uI`=YsW;`YKxM9qrT};f2u|zasy6TPWZL91+%Z6XJG2Nu?e;C(CucFQzyP z5)AzR2>YtAI-8|ST!Iq_4#9(4a0?KEySux)Zy>n4TY%v1&c@x{-F@S1Y&hq9XJ-Cq zF6QFB@2C5%?p3Q+ts2vn{0*z9qiBAi2tQ)JD4CnW{o`7Uo}O(<5V8TbW(Kq|KI8+ zg#WA{YMAwJOqlmc=${O9jo?y{x$A4~CzOHRdDwG^1&VIJhbG1&rkv-Z@cgnZu8N<6 zA6Y4Xb43Kh+|p-xDV{kwV|&965{gb6*gjsRY3){X6Z5$(S@+xjKbh12Sj-4nY_>zP zN^|f&a{19%vOw(_SM$8D8xv$WsvDj5v4YcdTE4*oZt4cJKrMH~CNOU07h-r^{n1jI zmQsyRKCCOmIrJi5jadob{NJVO6Y$gu_zJHGF~l2vyrQD%YA|xCXOhBH9>@P`<(rvH z=gClXN0P%*<0vUc!53PnigKcXKhh}6fYGDs*Pt0)D{jUCZtZUkUv?w^Bm9Ak^7Fa0 zfn_wgoGS(k{?`k@?)+*!{4qZ&DD1~_E8WP1T1rK&-kvYxlWS!J%b@Cx#jeRJ2S{ng zUEQ3JYn7ILuu|MIOOy&!B4X~cmI?DSB=h7dlTSf+Z2`IYx8^qFZFfix+QY>oW~3VP z3b6uAkiCQMko;XNQ+T4HUkOLnOCRDkVxj8&a7TQeL>-gsf&Oyd1q(r}wvF}sYg4xf zr*DTnaXl)rHr_?MpaIx+|%CQE=&TVuxToU9YEW*}nSZ zptmK%{ma4U)g#`2?)3vSe|O&u!Lurp$@9uK*VW6wmbNdB*3=VJ0Piblv!FGz%lp*h zIm{TB$4rH5o!44N0UciAk)K((g+wW)UgkmYQxfLqAl(t#y!bJfndXMr5&`i_+3R&O zAxpkJLWe`CSC^fCS$(@N`H^E~~4vSUj;X6qws-XO`evt%>*@!LoY zP3&ON#n|*1|FItfl*hD;0s6=XxKMJ48aq6+RpF=!Q5`groioffLQ@4YOV!6 z6OUJ7ZG00hcmn#!fAyEapcV&*X%)n6%zc*($tp_SItmxKyVril>F|KVE>kG`=lK$$ zMS8aL&XQhUg*hw+wb`WmRVLzfZrwCy25K=|%{9LT-+WIqiczgG#xrz&^?B4OMCI6z z%Uau|`)MNPh>$62L1!4**YzOf`N!wP68@+#*Mcw_DGaNFxB+6`2v|rRGpp(e)0&Ca z>Iqxc6YH8iyqi#jKy>DZ!C2#)cGbs|ITtM|P7x}izgY*6+0;m#$d1k*o9Y-h%Ig94 z&L|FKcPey*Fj-Q;XRv4$0oVI-F64^NvWY}cau z?Vo)N%YmoG`2U~}q8LAcg6>eq>1-?jqG@SXHl zwgpC+<`z64_(4mQ?qHt~Q-juN+)f`vzUPd|uJ6R&x`4CV5vL$jc}1brv5u~o+HSFihLM{ zUQHHoZxp^_f*!wQIF92!s6wvm%A&2uqRA4_Ru-MXpbkMzl@a%SCH3|a^&~AXH124$ zo6Q`D!qZY)cCb;7q&t)F25(r((fXb80C|U-ZqeP*I&RPnSY!7SxjCDkj(6 z+b$O+L<&icyaVbQx9Nu)mZz9t5ceOHaHpc{qH$sc4(<^8FFe5lo;U+f7U6aNp5`}1 zWXWzysNfXTkxfDn0wr&9K3Ve6=s~fDb|oJR>LB0&rfbex(TsZQ69C5Z1teka>@q&i zSByXBlAN(hrmL7EDOXOevKUu%I5`0Oz}8A@B;(o4g~PkxX*a&G#8N8Mg7%5eW<$1n zmc95AGGIY~$;0{b>iEgsaviYcUTZ5h_qzSb_RVsg$9KD=knin^?1!7I$Fz?58xvj< z7Dc0z{7%S>u6d~e~lrx``85Gue(}l@LSTi2*r#E(Lub{B- zF#KVI{4}R4mVVM2%UsN`x`IIw!KvPN9WOC1N znwx+Y#x|Sj{YJ;F9*p+qrqw;BMgV)9)%$A9yRkujb>M1byJWa7f$j0zW)RvT3_mgd zF)`ID*W(q@Bhi!|2hhv?Ur3n<>IZ`-rvn~ZId#nTV8O8^Mht2}a++?%}s@F7++mo6OGR zt|b8*!_az6S?B2x-D| zFz!B%b`9qn0#zTdJH%+STMwrMVxA9)Z4%D*9z2FcG6n!TSz-c5D_#!*?H_HQ_)4ZDYT${s78eSUF!Z5ZuN_+v|@VQMpHsD z7#Wbf>C9sbO?^*;0TXQ?Npt4Qu8{y=Lk9F068I4fZEG{Zy~=dKd}CpFI+&jCS;Y zj_P23Zd`a@`NH)iCAZ6WG^tyMjd?f|>k}4{-2a#)L6kupheT)ZHV#fXA`sXhxgZC`89Gs z;=6a^x3##4o7}@2Z@zxd#^}{(26mF&la?g~Du@sMVr3dTs`s=~e6@SPwP?9 zMG0w+r&$H2Bn4*H?J(|ea3!lyw|(XsRijETz9ycaSr)5|Ocnw5=jDXt`rrX{UoyS7 zJq1e+*Z=$+>`{Ijf^{9q-9wjUW4Wr1usXmD?7$@#(m$6vjL{MaXu4EI?sJihT55G` zJKPKzyo2brb*=kiu?s6`UUt!RId^Nxn#oAN6G->(8&Zo!n;Q&mK1x=)n%N!B8`OWB z1#V4x5B+Vwzg zc}$6xZIbhp$h}EY%pEL?a>_a(-aC=0c3E*Ce5>^A(9no4l|uzCu;_pJY05szI=;!IuJAnX1bnb*$XQ zD_z|4P1Y=vCW$_*5rw}#2KoKH>7k?9h*aN5dbSTIp2O)Cwd%@|B95ZvZgTcHhW!%S zAZc6?@3Qy{@3g*t{YEUXdrKZx@SJ(M#^ZBE5m4P8s=1Jk|H>W)`MjNPc)jQcjp4>flvr95tr zNh8&3i0$nY?(f#yegl&JBOr9HxrW8)`AJReox|%qC-gsHRQWm68ZJ*4vV{;`!DHTO?Ss$PxYzJYM{ znysY=xEK0PLXnXD8qZYy8WCqshb^* z4>j>8=4Tqo$#vt2l5uuYx&9T|i)871(BXvA-4Y?bQz*)OEGRRZ{OGZCtggI{tb^6% z^hYrt;!T;Ng=@RYPJ%}Y8Z&)bnYNhCR3ZpFaxr(*)Ah7=HvGlfyFl-tq{zE7OC0i| z%)4x?RMq&|@~55ka&}Qge3b!jjhg7@XW>+OY61E*2T_#f1Fp|l{JG@CPmKKuwp8CG zL=g^UeoFpx7tzzhm=~$>0$Sg9o44L5o}8KDcWakNz35lBp40b|8aPQDk@g_c%~DAf z3HgXQVqYrB>zJP}B#U#{Yq<9p3^a3^VgiZjKVh)DO!!>xmpiX!q;C{*Uun0b{Hi` z?C(Km*V1k*0H?Ir7ZpB+JT=f`HYrAJN17d3Se`kTHVXJA@L7xqd${e$#jw$5)hK10 zm6ee{W5D%H`)sB9PS~iC#w7E5E8CJ+j-sgt{}@w7@a{5xJEBERCHtP-(rCRi1Aewb7l*lEh ziKw;sHmR*eoVdTREZgpjpbHKyu{zT4Q+BA5?2c@9U`k1hoe-O>%jtC1HXr3OB$)S$ zXqc|nXGEnRlS27F8H`rq3NJP9Eq`g4F-!AUzT&Xs}~6i=!-dySH*_;P|1B{x#zaSRcY|^!7Vw7VcpT2#3?n~Ni^l}@gT#> z_H>g84`gQw6DNIci`k5bfNn62RA1VRrR(4G@10P51*mP~&I;Tu%lfHn{pmHQq3lKk z|7>prBxEP2y%r^Pj%<<_{CdcetfyQlW*^^>Ymkp?Zz+ie%4_cqk+ynnzczqEa%`p- zp8u;llc+w%yr!p36m9oF@DOoPj2jOwxvp^YP&1tEefyu?>@#BYCS=tPQ`mCPbKFNj0%yG)9zD>--hlE;egpa+&cnBHMTf9+ ztm&V33AWlY+AsEToVk~16`gX=uhaag7yZ%Rv41^q3j(rYbd(Zh5n-d)pYAnkk3BT( z&KgVkWgSQ3M&XUh3XP&m@Raa466>BMiIR?DZI29BN%5$e^qYo?W{ELr4o6b3#Vj_H zb@70aNo5TAKy+j6#}aQV7`xTlL1V?`ftIbtQi27irb7037A7xi$Nf-c8y~OoJ&nqC zi-xAsN2F6AkF4v+NKEK>8Z=eje&8R7-Xij!jyfsPtDdqAto}x5=hT(%LvfKbr)KIU8uOadS4eN z#;ycpo37d4J&?5DTiKWL<6dVV(Xn%W-+q0vh(=aLg1aupdHya9fUbm#uShkO-#0o9 zLIKubA9lNqB^Bfe!1nj{`3o5lH<5)-_2NVfHZ~wcz7C%1-}vHNRZOoecy714+5O&j z`L(^!*tmrK+;}JQeqpfWzWD3thN5i`+o<|FNs52%WKXs2>8FPzPCmwF2u8u}SLD*r{$_~kNkuN6(XboRXyKBtp}m-V1kf;U~Y zxZ*>G^CTlt#YEI@z6WR^X}~xgG-~FECHOq#IQm#|loXba4WL~%ue4sPoG~Nk)G~-F z$GY6gq!nt)W!N5oaP|x4x=D` z0+gsJPNBv(^d++;#HM{~P^WOkNR>JYQ6lEf59KlkNpBd2W@{^coHt|b852EjS-{ep z4ZoIZvlU_mO$q_Sk z+mzpA(#vWNZ<2YLY7{8>o1i>z_5DM8`ypG*d<^Jic35#UYskM0j$0RDc5(co+JP@9 z(^5`Am7OIS1m-~P8cB%}vb#iT`ysB5)MVOkzYDEQP3g|#s#Q~ibk(1othUxjh@=jL@OK27Aar^= znA=NmJXKMJHqCLg)4JtqeFqhBeXSKW{tgpu2!6_k57{2+-DP$kMbPFhtSPkjRDI}P z0^$dCSNJgdc;Z*;PE@OIdjeuN!Y_&YJ(|OBV#jUXqeP~fc~E>fqrc@OY!bs;IGDdH zistmF!`XIw2o|22d@Bhn``mgTTtXFX*06V@rZ$W)8mdw)|3ty*1Kb4)A$8ZoU5~jg$AC`!@)-NzN}n zI+-lCRi^awUIwah(!Xab;I?=mm`=*|CLwu7Q(XXI4uQ;wR(e1v+0IK`V>$$O)h+yX z2lPrlPsHr!O`NULRJGcpjMXVkno^wF)6Oq|b6RbxLIYeum(INd$mSPw$9#Fj#ZfsU zQKvRSo1LP$`88AC&*RfeZcHH;7AuprE)t#{mND9>BK2a~-TaQ)r_(8TG#!_DuXQAq zg?t^^;L2VfsD~lq73#iMxs5W_w=LWYrgi4GvA?J_S7vDC&n@%z_q}2UYfd?ZURrPQ zR%`u}R)ODU(i5GYlQAn!PvLP=_*;Q(M>lf2htW?lf#e8A{h;JDH5!87dZWkG#3Iz+ zEryhC#tl-evmEHOAfY>V?n?t}8i%+*_lug+0?=^&UmrNY5ohaDWSZ9hmF$l2OWXLqa%U{OSRuk@tZo; zLn|+;=1yeO?0Z=coFF$l&Ai||@dG*n*4>3bkhd9}$~=Cy)>?3r?`2uldnR-SD4mFU zuf25Jea|rv9X@(*Cn(kLM!fp2mT(+zFC4fUi?BrkzOs}KTY9!3$IlZzqI?vvxPAd> z#C}Sbe1B107CH>*tRHh(aN8{qe(43;fkDvuMV6u~;kg{ja?g)$LiDd-NA=IqnEZE11oPdE zsy1ObJ8c*SSdmUE)NR3S8M&Y-*m6XkBO<>HU@OrCP;C(J`XdC#h6r5@7|x&iOmX|b zTA*4==HREyr`OM=l_@V>noCb18K4wuwra2$XP4p&4s_8wD329A++<$P?)Us=4DPPb z{tOOdkPu&}z^h!VtH@K3AxnNGPacmH>K}f1jmCcY%m{;x=SH;N31BDUuf}`fhjan; zXS?KHPz+^+yuW{luV5Xf?CXKU5a1l5darFjf0U^*q=rNX61q-pYb=GSXllNnUYV)H zL5y0N38}!fB$?wS=aK!VRhz*vT6y5S8*0xmaPA?x^{M6Xo;&F4`1E*A3uG%kTlGoQ z={&&ofXY=9cV-VXzf|mYKe>2c~5L4a%dGy%W*Fm~OvPL~XKpS#H>dw_#)4+N^d`?e^s?3aR+$5o5H00Aqs~_ws;JmY3>hIESHz*h z_p>_izyWulTKA7EL)ijtQF*n|*>J#>aHA8P1c#WiQ(O^QzxVDwmO-A4sz*~8J-rro z5uGXx#dBi7DW%C6z+FH_!)q?G(x%L4fQ!jh_dfNLsH|S}Cd+W&kAF&Lf3OjnQC-sp zY_J8dJ4v5O2^6Eje91mJZy%Haj&D%_lOYL_TzcCAa@X?vHTv5719-dvljtHu2iSp4 z40u}H-g|uv_P%4YKjeqk?+=OTb&8QaiAkO`9xSb!eRR0#8)O4se;dy8b-J0?D(NWeD#QH zCG08zoYqejGWL5iFW*;UX5#gW*UfsRgv&#w|xME%dccCx` znhw-Zada5K^4)cy8PX@vCa>qL#}5c+EuTS$SqdOBfa~?A^mO=5R&Su+%BNBetB9i{eK2IY^uD3>N{evA- zTnp_$>dhjw&iaSnFMKubWOn2&UnfMFF9|MJKBc_BXt?h%atrpyX1|Xr*^_jtzJ4FC zs$5ZYI_-{(u6n&wM2{)b{i1wM##rQg$V>=U`j;BK1MR#=MX6T} z=a{N*gS&JH^F@F()F>VJi&TgD`<}~1fZsjv6MU-x8!1mqwQ2}y)L(Ll*=P9=6dJSdvy=le7o=P$F5S=h_vB%h>mA) zJX*p@E-h&+tyi`vKG74cSNT_xuGCh*cT#YNozoM~ovK5~`fkCTJr0?w z-TDM-6$r&VRC z9nS1`i)}{g{lX!W&JOg!HmGA?gI{T;TRnqGoTj+gVa58l(H*>sD?w#OM^|Z;8s(=> zZhHRyI6G=1eCdSp+(rsJ*(Ci>EruXmD{^i^YMW3buMK$pVFsV8xyfrGBf3B3AsThr zI(N0PmMNANCs?n%_^nhRrGBO6dpL+A2>hy(rzqY-RVEduXmh8zXN{_rN!gBfm^1K^ zDQ-Xibz*~oLV-9(eVGbWJZ> z{TXTh7mlF#(e&EeckkJbs7s-9WRZAL3R<+>4CiE2~DoYdZLrQTI&o~6Tm)NPWmm(dwASOv;~l&jmu$R37d=A8!sUs<-&4D#jj6%5~bn{f0c_|8h$(Fpn*PngEBjvHY5G zBRoB+>+6kfBZ~wViHQR#o#fN{Mh5t)dz7sBLJ`@Qhq1?HRz55$DBX3RWfD&3V{@9P z&m_2K@cC(F_U}?a)I(4X@oACzO?Pgl&T+tPLqa+AV@Wr~m)Ck>Y8c^f#~%)UQh02# z{PEta+5<|p?pxA`r#U=^K9A)V>B6ECuHurXlQTd#>LrLuUVtly4^sVmuwLxjBi%*F4JEMEzkFOePgfPn1D{ZewUT@;Ek{3~eU{ z3-w-N9rVpB`yF4pkBI9zqDP)goFY12f}Tf>>T|*_h0VBE$bp@&gpnPVc#$1&K+Ev^ zA+=-vc=ydEfGQ}N-0tClDWEM*>;VY35a;n;#{qAZie`C1QyGE_SW0^~KbXw#@t36X z-5rD7@1dtw{$bB=93Kw8bA+FlpmVedih|-g3_a(1?B|boK=DOKDztr(OU z;yoccF)jAbdDo*tZmdSohc{J<=E3EhjXuMDc(w5zBs(|D!4;tNcJrZ?yMfLl4n|&a zAO-8-tbk5ojx#_T+~mvC5G3C!K^?BQGwdVcX=;9QH~N4JTMxD(05n+bwisT8pKJsM zu;Pr#@$&NP6{1Y}udagt*dSobj8LZ%F2sT9c{y2qJ9ycQ`YA+4p`Lcd&1! z-v$Ak3aJvysTxlCV-5CH$O)beA>*1LN|~=|#h;q?Xk0Oxn3wpAq-SS(I#kqR(3Dh4 zsru5z9LCGseYLK5Kod$?z>jgH=d!XQo3`s-xj1TTO z#`j&1qy)iazn=_7WUbhwXv;5qQp9kYToulJi@Q|{GvR=*$`3AQJx&BESGV4MCT(S-O;3cXackRY1RL=k z7w+}R*wF0#2(sLW`=P_FCr)oq*H>Fic~OS~obyeV`2I(zjkt zyN7URUKb|a=TY(w^h@&9d2OJ2Ic7b4)r+7*Y?eXfYYC1Q@wfxGojGlVV2Pfrm%!gg z{g(2}77Z=J@t&^O{H#&cPNP&Qpwm`a&zsDh!agl#%A|eG!1> zsh8yxiP1-@^@Wib8xJpOeCfK?_J)bP`u)#S(Jfu&MOz!buiw_dppI&AHWG8Y8zP~{ zhs@xB=C!CT+80b=?K>%}{tT8#^?qR;+oG15MaqGm@BtxfzaJA-`))cO=`A8XoIS%$ zJ>&_1mC$;}N!DSTfbNvqEup?xmL53X$M<$*VyA6J5)3%5L*Zau6VJm#58~{<1+La0AirC5{cCAD%u09@r$E=)LeUngTY$6AQTK zl%A6Dt=AYUjH^_Alf@ep&U_HD17J4#*b|&R7nv}B_^wPS;H*9Lz()#lajnjxv~@Zl zMZUjExF3z*65TDBFx+~kT4Z#3l3o~At#_{uY$Z=tbpcsE)WC1IT$vuiz7=Tu7rJQM z4IYml3h)ZxVYXI!K0(Fn8G)r>Mo_~7vB#N@TuB?sdE>yF#|=86@8&EPu`W+?mTx=J zz>Lqwm?j@Z>rT}y^Ny!yJWpuZ7FYFV8_1Cm$k}z5#bo)s>CmpoAJv{efrzk*oVKMJ`idZ_ESy;IIpkrOGB+ZSOYH98lbicMTy zZa#JoS4=_e2tA5Fa*QCQ>DEPaWDZ^D6A%0M8z6!iF?NyfxG~EL65Tyo?|ukV?_=B< zgugWEnKo31JH97q^_CyQdz(S$9j$`^Y~bDtq5ZP*bZf;Y9&Y<0g|<^<#&R9;kQqYv z2#<8vwtL1wO$=>Aert-F$WZ4^ReM(4rab&_Du5yY&)No4X86 zvEbsWg53UC>q72=LE*;F*ZFEA!W~_QQ7pW`my*i}@6TmPo-pDON-Q(%j-X(PZ!; zM$&0^jVc$DZbL31Ecwpb>f&A3F|&RaJP2fA$nn}EEqvRk2Hm(fB%rNS+OX69`nNAx z=#L`Ot_Nz%^F?GpQoc;WwP;J=1!Z4CRps7TyymhQ-tlO3*v?;H2|lR`FwPa3ts+JC z_paBoaRw!2DdYNn+PORr7YJT9=9SF`Z~OA5sw%WkXn*v)4_uqy?|uDeD|q}kddAQk zC;4DlBZdWLf0oTi>BswEPK$5J1yfAVqG`NTC&_%1`zn`hEx{f|Q=?Q8H=@dC%j*vD zN>9w(PQmNPSa85fZx=vZ%l6!KC424ymj2vEQPJG#PE0EAmsy z`i(j+)2`_cLHt870Dg+80syg|`2e}}PVt8Mw*5eJz^ukm@~5%`p789>3wIkKr<@XE3_jjabp%!F1Veg_=}{81)rbn1zH84 zUnSuHltOWBa@i1gM$h|nKIOPUw8_edbgV9N8K)|7c>J5d5%#&Y&}(LQ3+d7&ys)lM zbFA$AnsB2qi!=V@M4P2DZJ9Pv;4^<_3QKQY5J0o&is*-*47P4VO^8midt`d|R9UhOD1en=MA zw1Co=JW$E?y$NP*X5aOl)G^5|l7yIU8Ad9sj#=|YQTT>wMd zcxkawrgtKZl=qM}^?2X+pB+Jy2TSsy}gKY;OHqR$94 zNPy{|g}a@q##qNds2EBzm27|U1;DVJpp)K6H52c|)5qGh-ad-W%QGDO-j#Mq(#1eu zYSi401@S^yfsT7C7UQifEbS*>FovdnC9K9Lsz9g|Lz?MtSQzR{2#I=DNW7ExVk9dO zE0-PY#FCe3x79QFDG@WDwvWm}(5nz4XKs{?#ji3N()O2gy(IpqYNfP6IOn>7YS7Iv z>!#?meN*#V{-*c0M7y0QY$(r9GZuXwq3feF|6;x)(#B8y*d5;53myYeL1fa-$QKq>FD*!ce0FhVYZV5#SA_>ezmk7%jNlTCMl zA$p5U#TLpB(VK!kCziw+%~atm=0l{TD{U-PZhM1g8Q8n~sA=@g&QOh>j*KTzZz3In2^{O=0zj%E- z&=xa%`)z2OH_NH(a-sIHp~*J2;<7Q<(X`RQz-Q+H5$;%K$#j|9kyyCvlo^v)qwy=4 zjnkOuP2ILrlUzUyo#VstRI)hPI(rgsRa5-Dhue=szF<9!WG0L>r`cpvent_{NOOie z-M8Amg^m>eMF|A+*#?p=FsU^y86c*`hI?wdezvx%5O`f@a%i}Q2wGyP$G>UmV%h7R zV4~2P-6*wLoOL8J2 zERdbYx9?}Z{H~4EDRpp?0GiRN9%ye|9r?lc604qFvk}{~1J;e%g(yshWFK2($@Zrn z_{&fj7yq}-dIF{5lPcEtS2=SQOOu7N=WNm%bE-u$LdwnkgeOK_HV4u52~oepb|-Rc z9b=73lLgDumtRunB40CR@1KgzG&UvZHUv&vYU?Seayzs~G^i|*$GtK(t7z2b6|9UZ zPdcFY4#67VL5De$3r32r(W4_RWVicDNf)*2$MrqXM*(PpBp2%-O5B_j>Brpk%vthA zfKi@^g53HqWzP&5@qr)w`2@B5a5KJzLj4DH(bBY=bXtEITYMfaLhLSI3*CrM`VwNQ zQ-$mPY@A|6G^z-1N>@lscXR5^Mek#1bWLK%<6ZOmb(j9tVl9 zHki1_m4)y+amaCnqbv$JA(x~-OdTYTNy8)a1bFI+!O=6oN zqm$q_^4;2XiGLkBv$Rue_=Z^n`PmJ8j?JVcYY8i8M$jhgC3SCxhXc-IxsXP}nvpkG z*k!oQe0)XRL7d0mUgv^0QMD7Z*1I=DFY9O7m`t2CzS&C2mpB7p-?)}0r!!^mG}BMw z-N|A1U5!VyW70EWKKOb{@$-!_$w1~DveeFU#?7d7`v;KmQ(&YzNOMDz7I`&BAjUNA71A%n!MrRAnbeYHu01IJ4s1HC^f zC*n(OO{~ZNzkPvkvwW?(=xuN(;Z6+dnrjrlESGXd8q?(yMO3#VA?-aNGsMPD9h#XR zsY9ww|5U88*IEr)_O&YC{`#HQPQ%hRbs)txy>9W-IXVZ}K<0}O9bY`k%1b&hY(9)C z(T>O~h-Ww|?&J*2SsAoU*E-So0&<1WzWi^u1CF_GRl78rjxezelWJ781xh{X2yVWyfc5 zMW>*BB`M#@-ngqzYcBU6d`r==M{g<5vYX^a6BkcVaUBVavu0zbF`3EpM)Sy;7NzDM zbA2l|@3**#G8O5KR;T_-;TeZ%xt@h+ObJTHF_MBFyppt0>+M*Yjg{fQ4K8N(fU{-W za23NzG0wF(v7Uuy!iT>wY99pQOwG=r(RX8Hk_rNOl_qPRdqEx&Z5F3V+|Sp{(gJzG+00v@*?0<`9E8X>rx z_LnYNWZ{lH8l?$8pXe@7Ks2zJZ&WP`$EPs)4h)v*#R=VechaVxa5<>ynwUo*em;b} z?K4W*I({HZ4?6y3^mtEsb!I03J?nnu@l-Qvi5a3>k9pr|X2p{mvhl`6_|$ite2rSf zVPQ><+N|qaG89!-rXxnCJXL~7d$+6aIv`* zZ@uAu_4e<^iM#ISkH!i8LEb8<9PH?I7lde^lX6z!_Kb}dA%eb~!3$4(k7V5*e$Pdv zBc|C^P-WE6GO4)XMxZG#2}=0$!~CJWzT7T48sBe&Zl zyOyr8{}G$#;mPP1K8<0FoYpn6d_8tlxcPA-M$l*%?ajx1nagf-UEZ-pWXNPc7YK-$ z>mq#d5(;&@)w$Q~=BF6eSx{_^o@p>V9p?WVD)x+bG0c<){(cv|4fu6Y2Ijq&s1I|} zFcHkxlzgz-pl*Mf-jGb$7~KcRSRw0_MKF&Z_#i)ATg#!2i@l@^!vvve5)gA^3D>J0dPu1H{EB*1EKGnOCu; ziNy`1-B%xF2y*eq-Q~9h^p0OXIAO@mdNpYBY>SqI#!0H304hesJbLtYn`q}=M1yQ* z6)sgKz!t7Fg*ug|Sv$@-;-br?NC}yQ#Zdfpw6%uw^n9`p6-CZ!5QMpr`~KD3-tsUW zeJ*1;wQx}cF^vDU(Qi2l z4uXGodz{$4fW}Bb$qMvp4bKiza-eUrFUqI;gN*u_vzqe#X-j?1!<%~`i#xw{-1CtA z=U{Y%m916-Of>H>F}1~OKxB~PAenH710T%R+N^paPy=@`0OFvVHQY)5G?x}c6)j6y zbDJx(vn>y*mudO)uNCVa5fVL)RG!%AOs3n+F5xYq3A;kyF8Fr&ucBCXl*UPn`|=CM!tuuk zRafXv>-JixyrO&)du8tGld6D9g|_(VL_sE&c(;UuGF_`y;>WJZ<1B?eAjNvr^7jHm zCAp_txD|bcM>r)Xn#h!WB}?g(@hc5Kw^;MQJp%EBLZ|LGkB1j_EK@A0uEKGt2cge$ z4LG6dM=5UY94Z}Wc;W{`bE5}3a^k2d^}4k!l*8q4^WU-_T(58WV&Qv`A5QbZ#PZZ% z8t_%Jj$O*`p-K_!OH8Hb{_K>r%s-p4`4SQv2U)DA25!}%nFmZ`lR^{_c zEo#{MD%=dFny_Qk51%HVeD-&&Sk<~%j@ewlcqf2dF>1)EaF309sAk>p5%9TXa9lEz7yjCXgP$d5>!Erjkm1s(%4Qze|ajHh)Fu4V~UlC zA#pAkH9aD3=qv^=%1z2$SCsbmlM^s&HcJqeoNQybZQHZ93UW}+pUl#pEOl7QFe@<3 z*&5EmMRE(foqBd})vf{CH;2x1!+r6Sv@VDBPjmAD1f3x@9Gy_TPc7q@S+G>JHK%jX zr}Cp8_P=TMlixdD<|nnKU9<1Giu_=ba~sQ$z{ zNu-o|HphWW)+?BJHV%0o+|c*m=UwK$i`U&X8=aj3-}wACuJ3KG&V0R~;+xJ&0$kl* zC{GTLqShlLF{VOnkB89nhI1pR!&Vtz>K*cPsppefkP~su&t!yf#uNW|EV9^nuYTdW zUnq+7m@){ts;+Q(Q!hHrF0!27UCV`Hq>Ry=rc&*DNUe}K@Te@gP}p4?T@Z)n=(J%Y zeD5y;i6oVuvgm|lrYbuLXBhgU=sGo~#@LRk^w*c`tjcZU);Q;CunY9Y3>K2k?g-I% z)Ap&1=zfETnU5;h8$M(ctBMWTj-t}Ei5ITu1_QfPf*ETE2r9f|) zn!$xy(Q2VC1LhjhONVQXkZPFCff3qa6LmgjZ@9A_=i1^%eNxN}khXvm6Qes|nphI! zhvbG+(HX+MP=Al)Hh%D++O$SENW4BT{8g>W-%N=f&E=_aNfWaE$M6Jc2h&3Jx-`S8 zL$w!)&dtrK#QHMQhH?P1W2=42MxnX^FgBTvQE&rDa&C@p5~@7=boT18aqA({Yo zCkP!5v3R3pQ4fgqTkD1I^3`^UwdrR!n#pcHAygl{9aU2&v^i@x52}+aCQh;ONo?dd z%GGJ=W!0~{%i=0gYtwcur z(hP*w`7Q&*^r!u1aPkYmE9`t|#H0i!H5~czM4wxJrrb8KyTX=B5RFkDoKV?^HZC2aooRP9e$Cm0% za2W3Jc+W+;+Co~a3Vr;?YD~n4ysQ8pPt!#y`PPb{cKt~*PWG=^m$T*1zukEjK4&Gl zZ(RTV17}mHSi`1=&}=y@YGvZ>V)@&pcwa3E+MJi#>+FLEK1=aIXLzy>G1_zO6o5Q` zK{ZEp6wvZqs`ApFF6I1m+nH|;O&5S6Q~P{9%|9c#_CBef^ksMscH+D-za)@>v76p( zjHJmg^5AzfvOq=pi{eqsZ~B5I;aqOdt-~h^LxbTvW4pO{HMC4*_*GX1FLkkr<+}?+ z>~`hqT*Dtv+On`5p*p^$@na=4bqBP6v%_m`tog-@^4_AeZ?FiYdBWDJFn5O35025& zgL~*kmAtH8hnY?XVv*(vs?MFWk;fO1wYlr`uI2Z%MjU_sV!(qgU8Z78Cl~}Xgx4U( zWK~GUKsIm8sTcqi*h3^`D!~&2ROne{2R=KM;QQgiTYS-rsNsza2b9FL6Zth#-E@(& zdP0Bni)fpQ{kK&s^oZ<}4YzmYjA)IP$U*it-zGO<#|5n*&Q%t|xuqNA*C*Ve)bW{e zER^kOX_QfBNnY3TB4bET8Lq=|IwHKR-+t*$@ei+gsV#8Dx-EKtcXv}-&E{!sa|VOt zE|;Lqe z^c`1yT}-{~tX?xc4Q^{#VZ4s9qJ*Vx`-)2Pg(yyQr{E+atq9Kr^=0p$wE%>i*VTbT za1VP!QD4$+=1AL5&04={QI+Jg5_)s~+U~6hH15w6Pw*VHbG8n`u025^?UDOYXur_- zBeg8nv*1~fbW9{(G-J$*jlicwfs)pT1vvrs<)Du8}pMq zDvuALrrnL>yA!t4y7WcrEwkUqHR8@RM>_L1ZDz#4y-z5_E)0Ns9JZ|Awj?XPY1P}t zEdo53M#}VVhAI;ROZF36~Ejp2MCp(qbxdJ9-h?D z!@T7*+g}AQ)V}7^xHlgzV{;xg-n|x_p~bbLPo6Y_2Cs!U>_Vdp6Z=>8Tiq+d#xF*# zO8UHG7%g~#mJE+(8kRbaC3i9_xB1?up;fP$6X^$2&w#d-3zs>~h%4>;7Mq>ovBQ1( z@sIgH)NDjpZXFY>-~>kGF9!+L^jM0shC>lEgesrb%T=;UettTSFBs;2v87`^bW5Q* z8)u|8MAPZ;TIM#*x_4*4KS6y5bYG;Z?8b4aJBqG1jva;3Uk|Pl39%QnE`f{IB7SjuRx55XBB1>}IfaAD*;2y zg>7(F766!yIyI)E#ddziRly&N?oRKmlwjlIof$yO#PayCLkPgG-XuXwnPq;{Rh z-GT6qbfj+wEs>?VKtlP#-1;&ctMZ1VQ!d_Q?Gam49}G-DJ+IZSb0)D#_x2q#45w6E zGWZtGL7)dA$lpbEvnJ%hjmgEr-v*<$t5rJ#d&qW*J*WjB#yhgnI@;uXyU zrlsL8^6n^>vzp`Oq5AWA;$>eK6ODG+RVU3bP)R4QZmd&X$3Wy$1qPm$^;GJ?dK(m! zN6TiVA54Q;F8pdgdWz)u>N&_v?DrIMu5jod-k8jT?w_Vnqz{)8JZ5g&R@_61jY~(D z5Va1hPXk_4s8J+&3~p8}!?Fk&TAl{KIi4R)EE&|u5-1GB`mMb={y52~7m9wAjZQ3lGj%qb6)*A#0HpBA62Uxnhxk- zaflFWozmE}mlPNZwP|ND1<1*e<*&M`sKy! zjQ0&0cS%jhA`@>*jr*<3?ZtsZyOL0|(i_}GzmE&XAI3QljPZ>Eg@cHV0;8D)5fH0{ zJ7Zz+(MUdh>}RPKCdqLVc5TjZT*$b5I#Y3VR=afqUmcHId(odb&5oRvmNcDk*0HDJ zId?R_8Dq2);^T;UX6=bF@2kgS>nQo;+%N~5Ns41xb6lL@yfnm>raS33(@7=9qwPDS zbrhx>d9i1BMTF;MeJFMxLc`Y9PK0SS%v99?$b}znP{}zraV~0VLW1D*>mP+-f!!F_ zb)(@KD=FI~dwIlufTII3Y3)i2)eq&@l)r&KxLMD(7QsY!D5NK~hz}ANtiRSm(fJ(h zs+{fW>k&hQ?|vwq-w_c#YyM21reyV*P0ZUeDqw1(?>LbB2OTNBs$R&$@^6TsK-d!Y zj8UsI8ZdBsywC(Uv4#nnGW!d<(D`1>!)*>;Z|LYyzKJTtA9->w+oJCbyn|V76a6+; z^v+y)MLn`PGx175A*Sms6vxPdNbmtsY5M8PGp8EF`d$twA5*w;YP`3Y@QxOR_3K7i zEE;vz_~C$t-F?c&>BCrP-LHu@V_u)@tj%5NW-|jW3syrRv=ltJE6u^KbRWQ=Fu9EK zGSyYuyblCBs1_%PsqQ@lwDI`VbnLsnC)a)Xb^4w?G%!@Ta$nz;CsD0!BPnL2wXkSi z*pvZjFJsn*|JGSg-0sGix2PBI`!vUBOVYOI46)L>b!kfK#ztnSZ)mjd$l2ZWveNuY z6|AzJY$BPY;cotJpOXUpd?V4rJ^-h!n@wx25jGJdOwe-sdq8+MI(p%ce=yf$QzVsz zLsQ7@aoBLL)Z}op-H$sf zh3Di)`@Khj$TXJs$Idk&2IjEG(FvbnY%_B+qsT< z-26ag3|i{GkkIL>5jHF#HSyn-z5%&nF)rQ;BuH3=UB6mUc*?@oC zd-JoZmo4e=nmyY7GmvssCd7U2%520>C%N#L7-9G9KnngAyOi2>z#QH?qbri(^)jd5 z(Pxqf^_Bp=KvBk`&RODX{nv_x6UlybQ(XY z_;v>!(DHk}ijoz4fft4|LJS-4#hCGvB=}~eqxU{wx`XUta0(NS!87?wkGso+r(-v)c}E>g$CGu^Q5Q6v z(fMHGG1Od(HS0D!UR=`~hhkK1{YgK`;zcz_RU<(g{vcif%QxB zY{DbM66T@qET`Y|HwhDP~YS`40w~esu-v2r+Ty367AE^mub< zPCtH8V+CH~h~&g`rVCj;`J@zYo*l8UZzX;F`Bt#ECZ4l8&&5=KBoKJbeHZ*c6( z@})i(09OGN3MiXTKsD(fmm+?>_Z(izQSj8yxnkIU1o&N1xlJkU4^ zti^2A)kd~CziDgRY>8*rRX9DxX-YZQCM3o$bXN~_lZomt>|s_>){BV9H-S7n!`JE( zU2G5}0f5rcB)(W3@0}S-L=owa+bNqT?T*V--A+mPVm;2IDvLYscKzA->IBVJ-tI}I zjMZ1_3gLe?e-0G0YO^%DX)}f?2Q5#{r^wNj;};}CahysKS)bK>0N+xwZafCr$AEX!zu~{b^~&B|n%Nq5a}KOa0f~9ylRM8XiViKZ&&S z%>UkvF;f!9!Dl_@k6lPL?yp|!9tx7+fOvvq7N{1$;!UgCpB|ONO^rH$fw`T$IR`Xm}N&MPT62V})(F%A1@Wh=j}DFk>(T zEMK_XGwP)lwio^MTL0LH)8nN9e|uJWWkE4y&O0O6^E?k1n46u3^MuU#N%i?eG6TAS zIMeQ4*G9jZW}qYIoU^BPXn&r5V(#uuh;S?4MQ?(Mf&H4}W!a$iMkQYz8m=OA%jD9w z<##k_3j$1LF_)As!w(-Ffv(%@ARa}8D#Wb_HUR!`BiF(+v8y9zK^g9M{fa@k5jbKM zD73_FFVo?mL-wLY?Qcz5ZWuNtJ#)m?{gdk}k&%KISovI|1#0ZTBQ0#E39H1iQkOY{ z==Wts`JzIP~>|G3pmMsdoqCa8BK#i0ySt2fhBNI10s>(0d?2v~WQ34+T zd!?GM2fw6vNZeteJ@8!TCIsH?g8bd5NG;Iu>I3qXcD}mhvAV4XY+a>Bh>GuG)NgqE zDCZgdP0vULWjN~&UwW6ei(iy4;Z9FRdDasvnh&m4MR)6w)gNcoFP3bNA9Rj-Vh^<} zs}32lO5J!mys$!F&fo`ZG<|%f@7wOOd-lbCbyPbiE?itkHuG2m7SngCvteKU$*WbroSX z8Q;H$4G_YBLps;R>pM#rlHOX6;*K3t{@4xIuU~IeX&J`R-duiWP{k^Ek{TE!!yivf zL2T+vG5xxgTV)!Hxc$dDiF=)15l1iHa2y&>tm6m+Ng9j!!u*;`hpqtg!R&!2qey&G4^#HGsE2v2?zdUtcuYw=Bdx*62C$z zC!>S)vhKTmhA*HH2TCd_&Ea1j{WR^dCw2o_$)}>=9vzsD1#F{(Oc}1{>Ow-jZKEr+ zHO?S@#--5AeV2`4{(*_>t=%6LKS)$Q4IH*$ZEjowz90F2A>)|a=m%IUHrgXZSK9Oj z$7Xg8c}_-tT z@o|G0c)fn-x5SEz1ODfr>o)@zP$Hi77MRuBB@mx&A1n=#Zu2djOGYD1i<)3a0cyF( z@ps;FuQe^N1|}w5QtuBqQMlXQsi0>X%*RgyF-liL;s71;D%Y z%_R^xN@vvQ{}F7tpZ9Djyq&@_x8Qq|8#cEvCO3ii_}e#{dq^`nB}d$<#ymV{UiJ=t z3^Dhka*~NQ>T3naA&t9f?-`F+iLO6p{r92~H9Z#tjj0|qa!QOOva(|3x5*P8FR89= zfX5AmsN3ji&xMqFYoMW>!B|$`kdT(tYdn(#sGvkSYrBBO&?Q=KNbT>JAs+ zV>2J?xJ3Dp$ zQUBEcu57h|u-5US@TzA%_oW6eT>yj^3ysiWqR^y2$*x$;`fiAOVokp7fkN=GY6jYR zJ5m+kLg5N+#U$0K9Z8LGV5$s0)AT>rv1z=^W~ffqUlp(Dnp|Hir9jR!?W_^2JHSkD z?|^SZ)$5jgda;8z`= zEn;InZ}&MVOAxf#yxsu5ZR1XPaAMil_cCR#2zv3v7y%!v`v45x{S2ED%H7^U1jIzyZ~Bbv&*QOwoT=I2O($?cwq>FXf0f#M&FR}ZEc9k(gFv0gD#*kT2Wsu?0`2ny0I8{D#O z+uHup+dDTFy3>;c%x-9*UW#T>UMcn&Z`CZc zAt(=?!Q-o5*6%UbmD(&nEMhyl8IL}tPKoHP3=r4%9zR{(fnI*WG8 zd87(=ZG{0b6&Czu>v}T*DlV(dW*QrKQWJPbIiw1(jJgBG`fU;HwH(Bx{M`}EQVJ-= zM6~b5DcfZ$-_^_L-9WTZkL7kt`UiY!1SM@5`#OQVtyZG=EC^uNMU*p6J%8-? z?0Gc28;%JcSg#&|^W-nObsw>lj0ObPX`+%DkJq52nc4FcP+YU#{y>ujkHwEoopV^W zYlFNO?UHtWYZ+|ImUZhAP*P?d40n&`(X?tr2qg)A$;j7`SP1BB743A#S9`e`*TNyQ z7ZyT8gWDs39e;ex7?J**Huk<~e}pbR9+1e2nKSkzqfuisJR0KC4_ga;+8rY8yI#)4 zi8v^bYU;D+QS+;i<|9YDU=iy}|Gmd$Xk42Sfs@a?bp8|pZ{DVdov7U>%hTgDb~eu) zWK!GXzBz{YklQ5%d5~aC)6+ToBV;nJ?t65_#Yj!f4xNSrUES*6A1_ zliBOM%a*48XIC(?$l6xH*9ocF7%VzZ`_CRHMzU?V(%3K8cFs+8KSs{r1qvUk?si6v2JTtp?2F z&mHI`Zh7t*8HvP43hC|I3VOh|%6vd-eN6ki**-rl{#c#v9w|+Wx2x=`wAc&lu>(xDLcN}?^Os4sG#9)z-57EVhFTiGf-WR z6Kb)~H+^JI2`y>Cn)Z+|ASKk07lrRyNKXQux^ZURqYF?_>=>GWP41Z`q@Kh2A(ug^ z%<&7T(c|yeYv#(WFEctZASE?aV0M{pVx#&-iHTw-Fk<9r?P3cP<+yasu z7+Lk~x!8#pWCnz^#6G+An03*N*WG)OM8L08=P_~B#=&`L`jJn7_9Bx?kgcwf0t0!H zMyx2855v+C!NL(FyN*b^8C5P#^|>kUc{qS{&feqsp$jGDs*L&KK`GU;t>_*X2f|kd zs=~p0Jvux`Kzro2r}0%kD-PqOaF2>sUP@SnZ4cMgr^Uzxwfr{JqAj#dt|~Y{m!|&> zs=?J8g)d`Y;AV_xX+2SP$&3FHYW~#-J)><@$MLa>b+a15@C(~ ziDA%6{l0p`lHsZJPD~av_(EFi+@o?iOXRKkc{iM_Zw_YZTJ;+>q7!kb=Eg*emv4Za zn5FAfav0&M;c$8g7IwMV&9#0WTMRre&CgwI@1k}f3b}IY zEDN0+r6TZ}H+j<-=o52SyBoOj`bkcY?*4=p!p9V#_2QTb z93W=M=&1Z?)lo%sf~uX(OlI?}hx-NG?3R6+R+!@AK07STOISb zfZ)i{ZmLC0WBy^Y^-i%*Xcn)(sj|*s6`L~~>cfkbtM}Y6ebpDGg5!DkxnknHaUQyD z$afvkCP}&^#jNR5h)B5Jp660`$R+@n$v_LnNf69JUk5!k)kBaOeCHxX?Q&`&)(x>|Y>0avA>LnA zBa-&jN^ZmNO2}UOxlr=0EriWln2hg9f@D> zx+JA4p;Nq9n@%po!oJit%VLzp{(yPX$t@Dw{)R&a95#Kq`DHmr?lw(V_$c!kw(I`r zZ7wbLPD|8U{A?qYoYRL6UDTj!`0nO}0dQa)KN#X&6=vEV z*Hs|WMsGQS5Ny-SL_#04v4~M`(>`wQzHj zjYN3luU1*dNd|J=wJR+=bULex5mV$r++simYQ6`a^9GZI5+7V+aw6Ir|BMPMvd^KI zOr~RRO%)CTR_C7;mEm-5)~?kDJ)H7FrXB}BA!~Vp^zOPv%bsdX3GQ!4Q1)oPE+?gR zxZtSz%dxsqQkV$om`JvLn1134J8B1gq`zquxZMPrH=G;GKzlyEEH(ZBm3c_9qP*Z| z29E~Z%nFH5XWU(VnR%Z2?DSIBv%AP`-jwZ$==NVn(-?WqQnsGc@@>fHbXzG*{vxZ&up}QmrYEU)HfrUYM_Ag?g3D=LDXt+!?PBMf zA-UPJAbw=f(nR#3%)NDn&vPctOzq_wW9ez2>ra%)uMgQ*UQNM!Bc1sQ3DaKg$03xn zF)l>6!LG_~Ym_q?oL4eh1fF*$G$4#?C|O5!*KK>~asa}5C5`uA>{2*??wB{T_M^Eq z6_b!|#UPeg7xi914H2Tz4EDlAV3z_;6%tCA_dxBF8u zy=afK#Fdi2$wq*}o2_G(^Dsg^4Dr4#I1j+_-WiXwnuHYhoUaG{=UP@KF>w#47szLn zmmc?YWMw@$-e<_;TVA5wZSq#N#S1bTO+$!V>-wSqXQ4RGE1c9B~x== zbZS3UZDR4UIkE?oYs0Vz+e0Mr;i_Lv8Z|&HQKt_Q;5CLQg)d9K`3hn3D?%Xa;yiVa z6?N;r5`0UlTl?-le$J&@Ts_T@%^GDiwhuMqOoX49cNXbwEQ1?HARkUI#CQfC4-{5> z?#1}lo|vu%5LK3~3RaMTq?0c@Yb|#EX%1E1pK&fp}-yaZzm267W5yvWRC9p|VcHj7{fL+En zyOR!uQ&lT~r@JQh+0pFSvOGfFVP=76bt ztDYm~$5*kgCRjRu7q8&u^s7uC-c?#4@^G;vY(u0{v<-;7``ysd7`m&;m)^;|cLQ)H7n6zx* zMGei{@3caNO&MK5Xur4&BlGR69jZJKqSH{Ga%y6oSkLLE7xjQkOx+`vGj^;I6?&BM z@ob)md}qVaZq)|{OA@JtBVmQsI+$4PjVLl5ZE*YRO~m`Y)?SU-Mw6~CayDj9Q9oy# zIFAdW0ec|&8k+?wEv@ii#$xg5GkH4S-N?RQkux&_UlHYMe)X#vl|J&&p|i?tw`3aO z-5`K58nB8&6&q!{{xr<@zmePLHW-i!Ovd`j})=UPb;;~&>4;IVv^Pa#_D6flo;8tV)K{BkBMiG zDP-JrBA$Wp79AqC#Fue^jLblpnZmVex(djaqb9*kQU0Wkc$PhR_4R$^2r8YA!-oQy zhu*M`NmQ{*Fop-@-mo$@&%_&%{(;2Wp#A2^@W^DK?$8ml-~`89^~8;?=7gQ1aVA+%4w% z?WJB$6D1IL|H;&fCX&Q}8RFG#sNjUmJ_6TfT9a>M+VXDkd_dUSZ1jn*!@Ea!qe7eB zZt%V^5X+!>d;ZJPN5W8xP<7R0U2mt3hp59NK4)2i4BMj?lm$TYBIh#MS!+0}&f+Ha z(Fk2#6XGg8YfgzO&edTgrE=FOb3_a^vE_{M1YJb#cF-}KG$|{PkQ_CJ4Jjsgc#xRX zzw(F0)i-z&m%oHurtq+b=gV$>V{^CUn99Z|x%V^5$-AS(ZAb0}gk8d2!zhq!n9(1X z*d(<~)6w?@LnW4dKhEA)c)@MEi z6;5~X$(n8m&K<0dI*HwOiO7zjZ;2aA+IkG~(lH6Q5c5fTzb*1T@YEGhN4z6NYtbUG zo|gHzx<5KUW)6<(vX1{9++kUyVYoQd*O+g0aIY)FiiZja+g84W@|fx!AxyH_4WDAb zfr;Clj#ceE^a864mZT#lW98*XeQ*zu|37v3UpD;@L+AdArfiOqyKC+;7Zys?rQodO zUFP6ktQDW*h@g39=iJU#RfUTMyiasC_atfQh_GQV>ZtqNcaFp3I}=h7_+WL0gl|yf zOrx*7CLaqIGWp>2ko=X$FAbp^i6xjW#C-W!tAV?qN`2G~YLjn=%Pf;>D81iSHfOT# zJSqK&J(ed;AV+=lqTz%gIUUoS0T0DT3;~6HLf#Km#cPb*Zg=zoa*n?8u6XbNhaMQfE%rraJlj{M01b^t>l1ZAtbKQQy;7{Nm2SoWUG4LULm&5ze<214^h*d{$j82iLE8A4I)> z%lm-tco0BO+8XcH`Qy5+eYTO54c`o$wqZyJl*mIX*>jrnh|A^RF|q@rAQ9pW@Hpj0 zOUP5Gzm<46MAWLBW~Jh6M1*goeI;KHQ>2zYudA<0Dv zF|ls1iK-)F)@HVZU$i$4#48A}qW-}`JH}>$#Jb96Go0#FZgjy;4{$YEcTqIgyN}Yc zM*J(glg5SBRRZ~8W8oABS>O~Due3 zpz_=ver5l)q8+~J=#6two3%mPKsMP@DR+=m{wlZ6!Xz-1e%l>Zto1D%Q_`2!Rg2uY z`0V7>f?cfe;J_I>urXfTg2Ed$S@D(bd3EmxJj6|k`*-O`TsEt6NrQ^P@de2PLo`?Y zmK0S-COZz_RP;DM6h&wEr@l4Q$3`#r!JL+8L$)VN z!U%NcD}l-I=gXenY6=|-CEP>XVqr`3538}xMnyf*Uk38-<@g^lC0u;pg>i?5k_{;sS&o3&f-;4{s>3zOP&^pN_#;yw%w}%&med5An6NzC7?`+ zJp8x1yM;Tm&ZhX!D%I)C5rxO$;9;S&*vgH?4go2xjFGByrTL8sWI*>UG?2^*rQx)V z=%Ze9R6S6nQFziP$-%IjP-kq`C|(tRDmVY`uzvi>eTcLKFr1s~+k zjjx5R8z1r`&H2BHUZ2}*KP(_-$Om6?+48oa(>G-H=L4>R+bzlGTu{3E(z+rV2N?&e z)k2OO=(^nIL@3xDcgD(x5ECfq@qtnR-322|fy_Qfre=GQBtv*y!5G&Q2Ir`=$A!lr zn#!lPB8mOUQgx<<;}aDi4!0;yHX|%L98$GU!v7)!H5GfYqA) zFcnF3!v2qlME2-PkyxY>y1~bAlMEN}R8Uf{l zVHBsy{!ehciZwP(J<$b+Bd#<}FcuN{4#Lqr8-3?tfp88*#d(D2+_Sj%y@OcPWVzymm z{mGQ(-(GzVmAu)x9ye$xjO`dSPwHbuy2}(hYEfvsSdvMT8v7|at+kY$H0#}wxA%Bp zDj4x$#O!x^lrJmRDu;LQ;#~FOX+b&3qV*FAp&VQS5Kf8zYw&?|`gV67sp?5<8iZtbvM+!pLRN#_qNH-2=J$ zQ#HcVR`8>BO<9jaaBCDnRDq_#P7?AYE-8~U*C>ery-|J!GcNrhHWHAQJ3e(NlzQK_ z(|hk-AGno?=kjj2zag(ot;4#Y@u|8XGux%&!kTpS<-0X}A4V{Tnz!hX_g9vt4NQ*q z#is{v=^0rLLDt|iuxmjtx&6P~{C}66rQzhWjjY*{HK=T_gvR7X;B;v) z`MyILa`$6di}36I^_WjJ0rI!cNz}{wDLRDJ=#>WZIn=J2ERF_CiNBNn3QhfEn{^U= z@1#pjvyq)$SDWPoGMHS9)gvkmb3Lmq8*4z7l$Gc;dvF^x6|xyunL;|55JQy<#n-C4ffez(z3&~f*+;3F!mVWaSHj>#V5O6q1~b^B?k z2gl{qOe|6;BNc2HtBvz*|NiQmd&Gs+3n1nfi`fT}gzfJ!PY~~BTBhPPe)Jx?iG>6- z_g%<6J9B9N(ul48w^N6UU;GGhe+eu8>!E`%Ni84d@L=CV*{`wt4-kzw6_~)*Kb2;a zj(O`0()jS|z*NrLMQhXTBca@3i+k$keT*dWg=x^?hJd0hwX_%~rTEvsw3dG)!Y~2Q z{v@Q1^-%CdHAN5hx(b19w7=D~TQkk-L$@w{#L4tJTMBlHbt$i~xXPw?Bi4(?(gHMW*mg}4vE3Y$zyj(=h-P4)_tY~@@)aB`L{gtHKz2u6* zUY5o2UMWsWjKAW)|4Xy-Lt{F!wq526HxlS1gNIN7t+7bP>gSyIV-?D;+3I$B&xCy_ zZO4#g2W0AXE^V#4_kbxA?NC|kRVs?8Y#mx*mmzgB&kD>^%sh>d!J%L-EdO>H7)hpP|M4yWal z&+4~LkN$@qf@i|3sETvhRPu@K84H75$N>>)c~4 zc&(fbR1%u{{GUb!3)d){XkW9lLTijE15;MB5Ny}!y{eIs62$NyyZ;_mDMly>)(Gn+ zAvFD6=<5`}4Kw`qA6EPC+NeJhT<%;Va5(rrHQb3>2;8d>m-5dw`!5^(cNJA%m2`ue zqHslb*c^NaM~c7*4+#?rPx%i%`2V}&dm)md_k`a^LMspIzraHdh+xkDo*4Vz@X)`< z{`atss4(lYX0E7LD^l!AVy{CAig}@>X7v#<5fkag_z$!AY9{{oQGS)MCr1yoagGSo z)I$3_35r4En9On5|M`0`Zc^hGCjIJoCbIgfER@wLhh$HVUA(RZJZVka;8-hp(*S2Q zn#*`B4n5U5EdjL_zH<2;f#4Xlo z1+5zyAIqEiI0pojObaqbKw~bUM)XVZJter7klZ zVo6x9;74mifV3eZz310yyfp)L-UMBC8w>9ZwF=o{k!y51r`tS3d?}y~(zny5pK>j792j`!*$UA9(g0^zm3sGu zfc<>?{>XGfl&^}^gDYcnzL;P2(&w@kJ9Nc9X6>gH4Q=--s~f-HyTaVay!2okmCuUq zJ`b`h@}VDJkA}_sKnic>;_!0BSFB}(cDI@Ryzh#s#o2@J>X3INEJE}n+h&59Fbx=H z8%<38Ro|=s{D??L-bd5{K6_gQKH4KzVxGf4zcbePOEaEina|Q~N&u}kF!jEM z>~-{QO2j+?mj8GFvg z+%nMF?AJ8Hb+_jX0~$Yi$|$)1Jx^eYJg0<5`Sb8B)?*!6z@U|KxwY2W^A;EUNEsWi z{TG(-x?wwOzv^TBTGas~Fw=2iZC-2>G#dU*p4H!<;5s>_&pl+_7TT3Vj!{>jbD7Q| zbTfq-;V{LQQ;V+7A?as?E2jvoh2}`r>ZDa3>?xeDgy+vip(_iWk*^i0@YK5(Gt(Z! zOyTDdC~Gtoz}0ER|A^KCu7EihHC1?$EdE&w;6C46+znbUxnGTKFlW- z8#x#;kelk3M19QXfP7Qt-5cpl(bm)twBYox(gnA-w{gty z){7b9a$yU5%*gjFOfD3>tmqgV?6Yu9qQL|T#bdOtLuu4gLubTxb z?Fo~%k<(p6)7ZkBJr;%=t>F#N$IMGsn1divXrW+}+8> zfDY;&CREV$_0pI~_PvC=#0+1 zw)&ZSXI1R%;sxnsj}$fl)mZ)SlwHQj3yI`v>Vpr+tOZ8^jhKn3_k!=u2-PXFlHwkp zgh{Lgf+qJ-S$-Fj$g9H{M`L2?f&O>wy?hHp!(i4@`~6pu^Kh_9mo=;CiAVieQqc9` zf;}EZLzPYG8=J?C-hwY7-KIFkI^=l0gVIv#?*SURjp#z1f*jA!aMBUO1foLVkCy`C zN{O|9>Gob9>fexdl1F*zHs6(<#n|Zi&mT6gl_xE`ULnm;ZPK?Mk3U7aU?xaV{ko)P z$M-9iW%gsw&k3)217|D`EA;6%3Dem7lq1Cse^X?Mqq|-9%xf9l3a2@+%0Pk{^q_gP zwWd!#EXDC0e2)1w#M&MCFA$>tV$2&sse^q+pbgtJi!?1&d{6=RfZKxRQq10Cw1!iX zgALrNQ2qC(L-zwEn5AZ?s%C&{q6-ddYusCP?y&JcdB|v4x;RU zP2es9JB>v<2{r_5NG`O#%`T}0KHfu1_ zX2Oq^Ro|+Uj0CWAt}`QttY@2!FY_^@-TP5TQf~M?V*H;tGho@o(=K)i(o3i=0LgD# z8S~%B)o=~@SzmlZf~5~D$h3GbgDW%5;=o7%OL3aonqp*lm~tikFgha2k^cYa`pU4l zwk&Oe6A11eG`PD5O>l?c?(QDk-Q5d!_u%gC?ydzC^3l`NJ-6r1_dMsvu3xp!*=w(N zt#?^PvFC%?0G_h!o*zm|6ca*}NHNQ&Pkcm%k>df=G1z}QFx@2LKjb>kzy839S|o9e z>Dy8m$kZ%j&b&%JpV&=O@oNN{&`t8{mvBeNjqdRxwZ}=xD0~yUwK$o6@-M?a8NI0R zbR#dVqN+n>>>C7$O+70$38kvBv@~LdE+MZVB8jjgCv5fs#0`_T{k#Y9@n@A{BAiI| zytwc!vOjvY!ONji-fuHG@~%WpgH6i3$&d;TkuCFkR!YImKcuh(#9N%o5#ouR>TL#G ze=A5Gm4I!)0Tk|r?!+54WX$B-xw1v}BAwe!wKM8SExs`ii`2yb5QxC)Z(8^g|0NHL zTAM(!(uF`)uDoR>?W3A_kSkay0658&?2v`F)AIF{W-=#?>;E{gkI^wBHh(4#!GGLN%W0PK&thshbmus22?TAqk z`u+54!P*{}#-sX?X%=bfc1^N&H;*UR)ks3eEIvOai#7wPG0jKqs9V&7Py%YuD3@`BelNMR84(Yc2z0e8t^cy(Y!-YQje*ne@d?TBT(Et_E z5k;8LZQ}@EZWH!6EJ2rJC(?{ed6>gSe$<85dm(4ScwkgDw?bk>+Bpiie^TWMnp0<8 zD54Vd`~ekdB@k&vFfw9hNpxuoO{|?Q_!I{@GGsS@LN;LP30kG|S!k{s4{u)K-#a=A zVoNS%bghJ09~^HHdE*Aj&u9jgCULG1nbkQ57kw(Gd%8H_d{h%!XJ!$2M))%pZOjly zgL=fn76R3@pclZzqpLU2sDy||6pXMRAp;6n9l2Gu=((w!oQTWabptgX5MJXpDzpJSA}x)9bss(`kAI&xCVHX9K!Fbs|arlTKgf6}&e zV73W({=BAcn$w*xOOsa+?jM3-*qZW6rt`o1)yNt;eyI~)Bl(JLO4P5v@}mu;C7z+# zV_zLK!KAn(riKhqrR&ABaauh9wL&X9=pQ|A-X48;->m#igolJ@g7#Vjjc@nnj^}v~ zcpu#iKt;AMZ)N7S%A4)T>6e;*h&zQlN+0aZz%h(QqE_JHrX?9K2zHW*)|+bAP2yTV zytMiiVln4@4m+-XxTQG{*5l0;shL%?r7&usIB=jiV&I53a$0nxH_T>ym1AltD*xS; zVP~|gW-p5V>}`t4sP39va;m)!x4-6Rxt5OqhE@gVi;;zll2u86sVYN(z8g;K+bKSx zSES{N>Ujlx&9Q89-gynX(tG!3$M-W-M6d1gol3V==)S?ASX|s*S5f>?pAHn+4JWm- zpbfS(+CNrr*Hv%_*ZU&_TYD~f(FfKTNxWU~9&g*ts9|*F15QMD`i-D3Z5YN4A3X^G z0_ytvSD+32ktDL3ew<)=S~oK^=XEE!Cz;B!!A4+}7-ghRA>k@a`E}Xyv|prQyjzJY zRouXm@!oo4%EEzuJzAEsk6;b2`MZN&VQ19|gm$|B)hAuIvAYhBzPxe*?EyLT=VR ztDw?AdUy_pZ6Fxrr@>C1-`B6B7FZ25X_FQOCqGwas=uARL(fV4;anVs&5c~9%@oV2 zHaIPrpx2wt&>h?Muzm7_T77|{`qm+R`f9Vnluw*T+pNgxlw)$IPq_V-D~dp8)ek_I zZ0kmJ-so9?Av-(Sqgo}%hG9yOPUbeQQ9SfKrH=pl%XT{4Xgm$U$)U>FjC106$O~O{f|xlRAQx{X6aC z8v)BHx)Y&rELCB$k(f}*r#AodzS$T9O%tM&UKayKEt$bfwM_}5+ihD+sPYcnQD_aU z&{0Zg_^Mjj)0imJ-&BA(;D#>o4;THKyl=H6Q6^JFltJ&w5wzSV?w6lA*3wjn8|#?# z-|+<=Z~|GFUXhL#nvG^s&?hft5~XHCqoVb>OZ5W6`ZWJknbP;ya#Z%t2mt6~!+wUz z3yEvp5n}fx+Gq_dbQQ9+X0Ha&AT{mG02z9}^ZP!t!QsES+A?Jm6mmn`Sw}ZLjyXEn zS$@6#!fC)G@-d7zk`5zBn8At?Y*%50p!@(8EBi^o!E7o^vYiO;h|k~_+6;?TZ->Jm zbx|ha=anQRiVFVG%wU48xBtUh!;Pd9!WKT(*|GFjW1khneMUo!?B(B-!Pw)ckcghN zTf$%-mdUeA^eltUX82x{aUC`~14+Ot5s1ihBiz-|cOe4{N}?gsMZ3U5VgfGfqtLxOgqxibh;2*)^ zws%3!m0t-@t>?wpFWbmRqV)fVA@@PZy9+X9$wwR{h<%+n-~c}{TcXdKFeWPpXXM+J zwf&kZYRbM{fm+-ngv*QREY(={xfQ#DtOIi<;Z`uE7Tht+WfHUhNJ&F58(Bls+}h&a zSaB>E+@#~k(`+Si%=y*UL^;y|oV-|FJqjLa1>~u?%lX*IcLdO?@wRkF((cZ$G868t zxHo;<4^(rtpv%f3rFQ*%^RheMm8+Vd2d4nY{PRp5Wn!OG*mFshCWxPJLZ2x0=Rm{( z4oTWBY}B&`@^Lr=LQnJ^>uJoii3)cW!e&*}z(RiP*2mS-=Q^FW(NWChmSAD&WLF&A z?UGvx%6))kbOm9^w*yF+({g9dm;9?b%&qJL@QgK^h#Vu6g}9WSqcH2gYq@w=f^j1RvNVU&s28OV`>x?)A6s^B5-L{g*Mm)G@Xp0&&uRS>+Ac) z^VSs#=Wzi0xr#i3Oph5CP41pjrih1E2vfIZeFnFvJ8(%o-#&frFhla6?$5SQC&d2 z2i&P_)YNj_&cwYvY;<_Kayq^PTPiW{iF<`lR@D<_yl~#`?u;b;>)UHmVoJ@?i)T@l z!-#&9b6KK}9ol};L8TUfGlIOor6~(F3^v!5`xgG3dyd_b`0iDh5ukDXpoXAlXOWi4 zb)}SIdTAz>Ex5}S(J1`s3g!0ZT4Fvda1juB*z@^UIya^wM|s5|>XXBPLduy`UR!es zl1|3-^?>P*X&MgK3CM9gQAKcVqxD(Z&fCI^v&8hY63&J2Bo+yEY_quU|Bj~p%Y*ZM z@&#MmEqLS=82D9-AoLrv+foanlu(Ebik?iIiXxpHPI7RduR7PNrhHX}pa?woEM?$( z&N!Cah_fI>FXvVF?9y}Ry_#(v*09CLIOK-eqvisjFa*ZwsogFmo}8vm&;yZ{2uRe6 zEI78ZiqYXLJKCVPZE*`AyQo`jfDqbB!s~Tdhs~x$;vJ)FYH0SXKSW}MkzNaxYc&I~ zX2Y{|`^Zanj&}Asl@(W+#(JrsrqBECjrY(FBqmxctNfUE9U*{!QhY+)o_d=AR<1z|Y^^2+y(b!;f4WA z;lRIax(_5BnapS#!3;Kd-nkd#YLB+hVPKHbHaN7M9@$=^jMneuE-@<()qtCxlt5Vp#ol-i5z#e|t-GY(Thwq;$ zUI6$O5!Av^43g-M7cwINqiB2%FY;Sh;ptt-)>Hu1bX39%&;ce9LJiW$fo~kf@v0PB z-3M*%KSh>pD_jp{0jBGWBod(^e~WC4=|h%}=Uh1S(#nW_$AYAY1jEYBN4KLqFa8b9 z`8L+?NUxMW=wh1BqlFNvP>9RGVI{#fE_}=1;(9jBXAWgI$)Ch{o_3z@K=MSsQ zUvR7UzOVMSw<7;}v=sH0&xf6xmjQ+SdaL!e7vG5&*sueY12=1s2G(K#$D9uVuX;<>_X_s~^(vE?pIJAd&O^v{~ zfN&EPaXs*WLx4{!Vg-;u^f1w`PjX;N+Jp>LjAw=)g}WPLJOCYbl+N!?H@=?F>Y{k;pgNw8P$#w@Bl52P z4Db6J-xdF-8UAyWW0{*(fN$xS`ET?;a)H>9bV8*w`N?}H)O|EZ!f@1<9s@}U@fOr5 z3`hrG)xVp_D$<&KOJc{9-MqO{QK&Gb9yb0V`bU%5e_WMk20Mr|J;FL<7)SIWT3O9j ze!u6=ge-Hx3aeuE)ax>vg?Rx7SBd`AKxQHrhnpVtKT-+Qk%u&kNAhSbg>(@~7>%Gz z-Gg>WN;}6IOdHt*l08_x>R>a&?`@YOqTRz%>AMr=njJ3aT?Wk%=J@0_RFqV;b#S8x zkEIZH?e!c&YxL1%lKHn)E@8Pn2N_ZtgJghTn`Y_?*IoKR{jNeSDc-f$((3cZfsPro zeH6kW(^TkYb~yYjmVdrDtvck4zLE9O%y^82C-;*3oE2Td679!gMv`J~FoIKjt>cg| z;4wu-AnmOX-pbCPPm?_NG!&gJ>tvQ>=(ziepd(~f+rclnc3bNBT9abuUeJ-bk^j|Un1=mHTkd;{ z+P-Jr660+YNwy@yQv%!WSkbz=In8QoW}(?fS^r;xME~G6zJaqm*^#rF>iy$K7V=i+ zv)kY--6os1zgiyN4WlCfPCa+In{+=oGZzA!O=V`HfF`QkYiB*~u{C z7bZpH*Db@2@}zGV-i#=7&<<#xk5N6XEuLrm^r;;lD|q5t))e_GJL>BeBv_vrcZ-1j z!{v>HF>!MAqu0OnGTUO_a@LUU9-s<5H6;Dz*cCp;9bMty37#R!tSSgd&P(F9YB=2D zwsI~}yh$f(be0`I+}sYF^(MRF8dHLkx^mM}liCHPX~l@zVc%PAk`k) z$DPQH8|SzGC#WI5M9PxdD{x=+Xw3nqUeoZ_R|}cq4cpJ~W}Bxp^7}Kx-4e|H(coeN zliMsxI?kx2IlM}pS^a0cvX-FFr$5U7liolF`?Nu3g4z9f>$}uva2B*r9*b6AC5c&B zu9tBVJ)l|n0swr$02E`PxQDTDLT*X1lu99JHafp&T0wgEkiaojgO6-?yAY{FDl071 zXew#4yt*8wu;Mh;np9MA?fA6s2J%5kG9o^ozoyu$Mnn>!MJ8wSV|1HsDsD@9 ze#qrtL>3+T(=#9Q7WPs^XYKomnFRKDgqR7Q!^A7SB{}QiOzq)(!liYV^sQSGLaX9$ znQ)FsM#(9paGot`#c=3qdP(kl|y^oIrYgfTgLkh{c60SDrO2cbly?V zN?Pl!6L9EgLK@%hOxS|4A7B6VBwk!_K<@?{bL~6eJ}Ff7>Q7&{<5$L9Cp=cwl%&wC zP!6r(!&Mt>=%)wLhyUEuO*EJ)@oZ_#lM5-P2^=^pR&$Dlrw9`%gz9Y4ZoQAOVT>ZC z(v+}C%x$r~P^+S>gR@|r1%~^t7l*4%$wSUvg><`5(ytL?d$EI7KZ(;&DN~s-vOe&2 zFXDIkYQ|SIsK0p~DMYYSyK&Ut6}8B{@J{Xox6u3d0-QIIRk(0IThkf!ePWnRGB=s+lm zMb{%346?Bn4tprnX$B(D3oOOznCR1?f5HitGY$9(JN6O%S;sUreaw~ws``O*q163V zTK-FR824eN9KNoUj+GDtc<8SU@g9{8%ccyg4FoL__opKTAaSg0cU^f5S8wqN)T z8GoS*zt?!*OZ~FbAZ=Xpiezy%dEdsSU$eoGG{LO$-O)Vma}(=du6)KnROzqFs-N^c z`nLb49XqaxP4|?q48KEh3}l>sLTRJ%`#f7s+Dh_rE;wrI<+U&08u#+jittD9HFWg- z&K;i#BY(#Cn*rPm(4$#|+$Z*2jNy&Z!q7PHf#MZF?w=d(Iy0BCOglzCRSrzE?x~hyyG9yKXNr|@B!AxfptSVv zh}CodR*LdxOyswBm2CeV12AwM&B|@M6BaR_i={iYvN$iwU#q>rW){P$()+(^c>fV3 zE>!OWT~T@SWBn>bp$Y4^=B|gBEcZcx0PLqJ%vt5f=MJV01s?MwXyu*HcuI3z7Nbbg z^|vSw!iCi(@8CE59Asx;GY;evO2_Ue*C_Sf7_4%ZZIa!XO}9+AQ_t&{TO-M=MdQw$u|ZHk zA1bc^ONB-{WfLz6aTo0YiWJlTPRbYqgX9gAk`=f59*L{>obM;ZlqP>Z?#ksiLW?sP zu|8_dV@^2jl(1WDd`nq0!01Js8i(5iU%W5~zw4O95kH95U?l3ae_wd*ieC!GCjw>a zM^_EjvC~Uq_ohYp$Qrfm;%0m8s6-#O(}~S0x!^+>Im>{IN+VDUZL;a+=&YY@7-p>Kr!Ufx8i3^o_-i^nYcOjOjq$IXHEqq>N4? zl_H*jn_$L_JCjM2xSszSDag$*M*W5_8)@|Xo0Py4>m^jW8(Z6j3XTYw)5`M>V4ZWyxdoA2lr!-@@OrSCU(Ei<#f3yY;F@uCS- z=Aoy%v0Q^L*0;I<^F}t-T%cyyq-CEIj(IIH0$bxT#8|>NDAPlPBR@!vb+P-Lg57)) z17}!^6Ou(Hv3t(*PvT#c_KeBFTgJpw!|Uur$d9-p1S>7#_8ru39k987NdL_hM}V~V zYGhO@Ooae%LC-dMs#{&7|FFpq6iL#ehfxiMyO>gVrFZ+JT2qUu3}*aST85yHVWxX_ zKF39V57%edbQ8HQF_>(!v2w`+YU(51pcD|Xi7RrH%6yCr%S*j}w3-Nbd|?{D^QPc+ zI>S{}RGF=hSj#76ls~J_;zFG62rKxTTk)Y#{)l{#{hp0Pa|eHJ)6jD$nSa>NQ{9Qc z)e?!^4qA;Ikp$=jfl^(CZsg4@7bCuwX6evl;dw7>I^3Ru42I{jBdjUfC>Vb72Syl> zG`@1n+cP?3NvvM7#DD3soO^t6PxX{az+y`x2FdS^_KPc} z0krv7jn7*83{Li02y6bgl>bxXIl+$A?XW=5KplOTW$>}<-pnq4_rxIMtn^$SA*X!c z!jXDuee1-Ll=J?@A7XN1&K1v&w#q$G?a8V$cyVdrUI}FMX<5;8i=xVYcwvIv#}_f^ z$l=WE!!n*E8Z`v1$jW8tH8#j#Z^|y-EPI-Ab$RDLujn*3*Za^_fo9#ZO=$tzbM5&D z!w*s*`FjzWza8xdWD&za=6P=CyxOt{XH9=(_4T5s))(9CJhqxO&xd7~rbs)G-se*s^Ug{QUS{8!H|#3?in=xz zCbX6j8H>`$fzmet|B-1IDY#&wq(NMk!OqEZ zA)4AtJK(p-noG;&P*>?C1VN3NXe>keTf5q3W1}dT9kMvt6U6ak=yA zNV+!F@*kp+gm*=(O({GnrB{8{SQhW-l&PLk)S9tH7owJKw#2@zroDAdeF;(G}cODYr3D*6_Bq7?Q*W88U-Vq#S>r* zZQAst;-tt|0mN)Lko0mG++m~94vo?XE(SHyQC1OmCQb8pra$XhDQ;95-1wcPdsbM? zNM%!KHTgfLB}oT8{$f3SFA41v{oS4TCUuJGOWCO=u@95WLN%%)&I!! zoQ(!s#Ag=Mb6|lts%KP8RsTFysP>+EFF`*-!XCLy=L4jkv!lv0}wP};`>0Yn^mR@Z9= z{j5=jzMcj(8UX3c#xu5o)w;b$+yp!(Wf8b>uI1=>0!4#DG=R}xfFacA#9Lwe(s7`a zz%TL9Q}5?>s)Bf-B5D5i_gI3?dfBq%ePvMXyQAbXX_?M#hPR{SyC*`F$PNL@* zflj5?$+l`OyNO zt+O5_vP-k9-*-hp$>sqwDlVNy{+GttNI(N8|8vRGuSh^LTfw=pvCnvw=I@hvxah!z zD(yelz^v{i33qSRE_=ek4F}wOif9V3MFrQ!zGR9y>;0AUjT8cyPw}GCbzrUey^(gi z3~L`P=Fa6|k6aD;GQspnM3LcCXc-fC!%)-d;;nEz@|3yDx4(HT@ovw`z%c6948*}g zS0o%P`z6n0yeD!;SJbj$d@JlCE^cWclxDCF8M}qGAH3>cpE14xo~~ra!_~>v<{*q$ znTpL;vE`I^Z=gt7l$*nktF9t$x<>Y&vklk{SQtET|9me4%fbHAwGv|dYY`*-h!jtU zccjK!FY8rtMJb2^Lz1)u%hiSQc10=WwbnN^N^v#M!ydj1%hl;iZP!n%?bSHo-KF)&NehgS?EZ1jIj- zRl#JQ2eimycmT11^0Q|E0es1(FL#;>VAz-bW;IJ(eLs&jeJSSFm5eNwIC!u?m_rUB zzTXiS%}rBtoJLX8E)~-o)?1P$%L!oNH2*_ph)Ka;Jj!0i2oabO56DsivmoMO&)=JX zgjsii(q^9UMhP?aeszN?I7X=TGn@1Lb znh@g$#A(|fgmjO(bbP=8h?!znFY*d6Tbzd1%EX^t^(ntPJ^Z3JyqH>g!6HYR#sTv# zbOi@G9E$x|NmKj56VtwvSqRnGFtJP3a2RuTLk8`_Cs>ukr2Y}5n|$%Wdrfnn?a!B| zKQ|V~??zyvhn5-MH*mv}28tbAC^5>v6}nwo7h&<+GM3Q7W}38Xh_quTcDZ3zw0L}K z;GZ5@Ol*F$KbnJ(*8DM+AL+9s!BFWL$4!6z4xNNGGeF5cRr$py&%1L#B&!9&ON4KS zd!$H|s65|fvso1o+eP+s@lBuZOU6-N7C8M= z+2yQ>!fz(;@yv`w;yWe66P*Uj} z3uV&g_3_tDMq8$2V@9w2`SNXOe4gvR3(O#o_WWzC`rU%;QxLU zfB$}duTa#bPU#^d)4k~W0eTwF7$VaQC!;cH2jko2V{?3~M031p)7)o{TFBPPA$TE; zZdGWtlZC*r`}BNLNN@h!rFBzsJmJAG9nqwscsZeBF2G~zdUfIa@&Hco%8j+0C*OK~ z_X~BBM0=l-J=x0!F7t7S(A={=-2MQ4)`_7KFhHbLU|l(0=p=Gmvc0-E^|p9XaL~c0 zDN2)r2eisPA=1uCBJJ>{?`K1H=Xug%%q4&Xpkh7uhgwKosQjE#%qTr*+dqsX^X@|_ zp~+2u(3TX{{M|_n9Ta>Fu7gDBO;TF&RR21LS-R>SM9;rYK#SJMA8f))FIXpD>SaTh z30kq^ej@;JEApqc9rutDct*}E4t8KY;+Ab&lyiAU+GU-0neCm1ybJa&PD`7xFD;@> z&)8HHj0*7o2)?X8DAuG{onqPOZFxCm;=b0p7AFFBv6>od?}!t6GPsU+Iw|!*9hEs} zHP}=YOiNPhSsZVV3DOg5L=A^;Hw}(im+I>; z96h)#I&--Fy`f2(T~*7qDUIGg4*1Itu7nH_qdY$K9Wshi@DSAnu-&OCnn7gyVdNS!IYU`0O1t@i@fCSvg}~{4SYAi&U7bf{bkx^1I`+ zc@4!{-jEL-0k3MJNA*HMB83l>c$i|_w6iE>1n0( zi_-Sz5mea#?f7R<-aNt$7M7y34H4Vr_D-F|ivmMK=ald?-edOgX>eKsKLrBspw`dw z-pg%WQ47o-!Pg~e;q|)Hz8c(8n#rBy=bFgK%A!#?o^O;!D7RzNHujB~MbdFXCRPbH z{K;L`&~(jSpXk~Q5HBqnVCcm8#&@2S?e3=cRV#03u;)1NZy*LgF^>*_ns98?=&9v* zIVNW_eAK?D6LlpWc)2E>KDS+6L6yG$kvguvcy)4&3QvBHwIvvS+E?6v{>FAq6jiQ; z^DeEKP~UrEo$(N8lNH}$>F!A|{u=X#h8k6mcep7RVu-)tw zjC*lRzP_tDFdQuY4#}4|f6xrLQq^-_Rfy%Aj_; zDong+f4HAt4;0$VCI!#*a&nR*)Ff)frOCo~XDVXUTmd zmrg3##>6WE(!K|G3MsE zh~^dto?1B1%wnvOi=`;zq*2wV1=*1424X!+h-2cVU(eADkQ&T+&Z{NUnadw7SjuM~JJ!flcbREo zOzTb0qc&+N*J#KQ7;} z1=+)>lt&jY2>NuMCX3!f7Nv=axM zIlvau4%O4d{LdJZqW3n;zm(8_X`>mEEzh1Gqqt(kF=pTkgPfq-;%|SX6DH+``E@Ab zO>pNpA6ZKEQb%-Sei3$x1ixJ)V3^8!s8})-4P0jD4`gfQZO?#@Ow7X}O+CF^78VL@ zxv&d3`aX+i{6uQFJSkLfn)q=-Wh!t|>-)O?f?z>Ezi!EQoZR*8r}F9Nl3loL{T6G> zrv72-v(&D0RywFt5~h__s~2kKgajA149ACGYt^l(bF)o?)ZXJyb~=b9Bw2Bk85l0v zZtz}qAu!V&i0j#ORZH4G4le|R4}C^t&yz6}KC}x?KRtBP=8%u6UfbESsM0W~@D`{k z*RTt#9&ulLh+bPRF`^Xo!VFys8g(Dp4K}E#PU@q{lInl>!74G{Wu6D|ZX4Iv=DRxx zmI+dar}O!(Q*ter-#(y3n@f6A{f5?*qsGv{yZ)n&zg2>Kn_qI?a-uHk7Jb3mPHMmB z5@x|6)}dLJaaZ;53RGOD^{(W1`(g%92SPb~%1JCrlE)nM9%3 zx!H)fv}o4v!8T~n{{rRCYZY1VSpi@JE}LKI%Rwp#C=9PKfckOis2U%9>#)u`3`YaB zid!VR_`8%W?PLz8&Xrg1&=#6%fisIn2Gf`ha&~u5#Y}b!NOe`CQ_!D~!T$aDPJakW zkodJ*J#z2m5S-fT+;Tao3oH^T#n!dv?vUri)0#r5j}yv$1CqjUnm+ff@>`q`sQGbJ zvi`+_#&m)5x#Ut1=HBH-fG|5F+>Iq?>z=rtJ;#zaC}9Yg5fxcg zhXAKwMA{SPR-MU~i5&kEkhe#TS!C^9nx7rAfSxCQ zhzj&KFKPq??AmA~fqFh>w>&T19rX`~7RS$cCUQP55jUfxcSX_+w$J5#?-)MJAy*x` zyWX7}?;voUOUm&MP^(foy3P6mk#YZcWlp}FR?%pF`*q~NCp>T z^xw(ZE$tfa6dx;Y6^y+Xv*SRSfeZo~RUbCefVt-64;znuSqfk+9PaHdx*-J4zYy&M z+WxRo{NA}`)qeTG;&jbKN%6K{S8TI|?E)Ta>QvuV)e%ke=LM;~!UI+S!>WNKwrA)e zDYD+?6w#cgRGT}N_YjqyeLuliaWP8<*VJWoe==M_UMpZF>-49sQgvQjWrq*qd9$^P zpCuVYVfyGd9vZRCwyG)Jrq%ehpcUge(21F-nck%;mr9nT@*<`paNGKXk7!5zT#o1h z{s_=`Y6=8U9^c4!9TKm%6wToc-?O8x=8*X}AJrOOJ87|G(MukPkGK)6xDl{lapTV} z2muWSw!A-Gp7ylTZY;j2Vw|f1gXtWvCm`mWlitDNCUx$b!Z%f|4`YdUfx_wH*R7~0 z?)~SAN00qzwQ+2P38RZTMeT2EI(zEXwQ=m8KA&FA!mop|^-}h}btb)HiWOTdV!ZiB zX)H6y%0tQy^=J7^;eSqY$P$oXkaaP>&^}JGADLjkfcmkpaJ|*wGs63^d&kXHr`- zr`}ky74${6F@0wZYAtTtCl+yxWgE?5|B2%<2eNBFdtZdVV2Ifgw7M{}aKm%R z#>Zp_Gw_`zv?=B5$t{L9_%(Whw%MB7&rRs?43X%AD=@{%uZkc>fV=62Y8K3?$m9MD ziu~=|y|j^lha$sJa7lVOgTC=hb_f=0G;ykGB{c^F5BY7aqCrrUCJecviLm&WGKWj5 zH-kR2`Pqq{C?9tu+gKUAq;cZZiqj8^F;BZQ3Uz0h%lTqQygE|2{VnfeTv_SXciHh~ zp<}__{aV4fkzpR=ure9-^(PnTdUSTUzc+gkAN9r&btw17sy}O0Y%RYPcuPb5YpvgT zP|3paY>#1p zIyK5>(^uqj87x`fLeFGlHd;f9i_PHalA$=7azL7ar|@j(DB4gN(b>c&XUFyfbj{!d<=tjVl$WZ z17J}ug>_9ydJZov%M#^CMqBismV&2&YPe`6S+PWW>U6j;OTjWtGY3Lest-EY=cUie z1O!2E?nF-75pGV zcg=lqBE0iP8i3b30;o%wesx*~{Y~iKe%;4H_XHXHSUk8y7@Q@Q7qYLiKlsnJb`@FG z79-&{-lgSiBm*!NXj~^^m%8E7;ny2=&PE|>hjnZW*Jk)G2|chx%KfS9HSU7{`X;%O zfls!6FzNRqcPT=3R+z|@y2;Vtm<{g|OToXXiH}8mhG0(_6vdNg%-bC?BX!mG)}-_^ z59ytSu#IGoE0p++s;yLXMTmM7&!>*9?c|6lq3Pb}i91}R6^7#rw6ltmn&9dvMFRpR z`2RRxapEI~rM^*29A7Y4DPr)K=pH-605I!5oNidkfByZh1lYR6+^ojo5k;cS(jyyu1=oi?A6gexe7Ba@k3=l+-rPkD8%x1~S3dzno zVYgurxfQ@QnTYX|yJAy)(rh9nKU#t)^aua)mv8b1QFba?=ojSu zB6TG1Fd4D)mNJD8u(NNrF1p?^IQi>| z|8pH5^xNc9D^QIi^KBp%`->RKv^2TnTb2WB3Px_(VC6_ChE>%EE6HF>;dU^wJNG!X z5BIHXhZk$$_T`32HS3EG7IRsc(}AQofx6PzC0;mwo1zYStx5^bI=}zIM%_{k&wW3s zW0uj5g!qC-xnwn9`wd%^BXPQ=O?DOxE62l?S1UVy;{pqJ(#9~#2^p(g*cj-9Y%v7j zu>f|=d%a6ZC!Muoczh8Lg4;sk!-4+n^1t7K@g7bjZ+`l%^PyAE`-PQ8->Z-+S)f8C zAbLEwaVpD*r$pRDK1&j#EIefCCvT&BBK(3E){~u?os`IOOyY_%{mFwCem(cEET%WX z^f#Zm+q@|@!vHjtU#$=q8I!V%3#sB{sClK ztTkCT1jZZsuFZc%GR&Nhw$L#XKF^TL`}?7+_g5{Cf~bhJu`hJ5$6o5T&Itk5nzGa; zkBdE3+QKF_JZTwDDIVScMdi1iz6r+Usf)OMz(Gu(-jUPP>rsvH!1VYuJ8TMqQ)iI* zK&v|fi}!$^l&-k>TfF0inN|~;D;I^OdAy^Klv%K{MA5wrm87b5eLILL+y(e*KAFVuo&W6k9iN>X46MeDLrFb|UJ5xGXec~( z*#&$0->K83#yhj>xqP%16ONtpDo)dCLuXXEDAL16RFBKv)H0Pdt9UyGl(fGCEa%lq z4`Ww~a2W`^5)F{y*Q;h02k)GjTPoAdHJ%XD%dV;{6(SQWI|&&Qd3*OtLF~8iajC8D z0$M!l!5a&&h1@>tNGpHc@_(;mC_bU*%tCTh8oLX1GoVy`_piRi1>)Y`rVra;aEy7j z@1!}eaReu%A{4?aTNWZaE}T2^eXv0$^(#V8;q88V`HAs2r~Umj*^W2p-t8}COF||L zJXJNsM5#$`cJfR;SHntgdM^>Is%%x)yuo^^qAf9ZbO;!NVgj28(^GLGp+ivif(Z+3iA(a z9_DH1n{{*|Ju>c-r%!W4CH7SUfs9Cm3W$z$>!~rPURsl*3l>sMIA$6jvm(q2-V_^D zpU7(J7Uak(5O&b62&H$X&}o{UU3mjAR4z~5wHsS`i!-At%yyHLbu?$SkDnrGo+KuX zvq-YI0E3LTOrX}vV@e6tCdmfAIL=n9+Lod;th@if<9}i^G33W578Z{FSyU}TuL`K-kCjGL&$NvuuGHrF$-yj%bI4HSzT`L zsqOPL1yZt3MgCJ$8XQDg?Q+EFfJQf!B$B%|KvG($6mGD!^Yb1X0Hol)l7fp0P|+Z| zMnvPlYPFM$Y_!L8$x+%J=%z~)t5(TVYMNb9VbS|jy|}kRaZAW1rL3w0!FIsS!!x5_ za9Sp4E_JWPTI(m%r3wxr6qWra`vrfAdv8X)YX6Mtv?0izrh`s3U`s#^IVS;LYeP; zwJ}BFF|gwLZ)%g-Dmro21$!!>K zi8B7|u6fCs5xI8w$wOgueN{X}9*HQ<0LHZVLHa`-SB_=_F%Av0fKShj`Vb(3+Av1sl23EC9%OD>vXqf*Dx01 zgKpf~TG55ai1ubr9W=$9v=;l~nNF&+<(cY`E%iGdG`&^5hWeT6a`p#-;qWDnR!|k~ zE?oOh)x|G$xTT=mpG0OSz4uMD1s42D*{$2()aLBy!v#2*?BUq>y7;y@Dl-P+sJ``2 zb5n*-0%h&i7mBXBl)d{`erU!djrJ9Tn?ZdRw|L#c`X77lzhf4<+-MSSW?oBf$9>-% zMgTjB@=>wEEF0YZ)a-59DP!r1f*;&)?hRXDC2w9?7*!LmHq$q2Wd3r}s>O(aP%UY5-!Tc|J`J|WcWKvPAnWv;y;$bpJ&Z*6=k*!73%BdS0zp>=Pc z{KK=lv1OH3%!k8u$28K_(}y(kg96Q-fuM?sO*siFv{30=F_HDb#8A;n)8dWxh^qD; z*Lxbt$nL9peQSdGo4(i!m7YeKs~6Y&jrZifH`ArOQ-~Mc*_`|ua&l;m=0+Ry21yiU zd;@c1C5%x&f5WLz#6dAH*0RS2vjc)AXqtQ!P|BgANH>{lnlz*WYcTf`@8GysM`>m& zsP@a?Bta`ylDsUuq_B z@konbPcpo#i;lFxZi^!pzp^bh&OA#!Oz1Xs!ZZOwr!lIk67roc=*ulBKrEBU2tFb7 zu0?eqR_EgKk!E+KOgGzDppE4IDs{<$v~m!u_oTw@EJoj}B5#THgzQn@H=52y7B?#+ z`j_ys)Mb{N;sYzT8^RI=bQ8NhrCUP7BsL!v(I@4J+sh=WGg)m7aX^F`wF8ryq#bRi z7@N=61&J4%-vr8a$)DQ2OF%_daXF|1;(pV6cvl&K!>zq^Jm&wP1pmt%PRW3*y$!p0 z(<^of5y%pIlzTr|HWwvniFIol&y#%jPI706zMxzh>S11aKHXQcN5g8drY}l!QJF2g zWSv2FsBk@{ZG8|(mM`~7Iq)>k^&F|#2da`?-%ncRb$6W4xs^wQpz8PkxSPM7;NWg) zzfxjOl{YCXY|ng4+>{dvd_guICE_X2x(=dVx!U}aFs_(++ajtI!y}lS{r?Jk52z-$ zZEaXkR6syQKtYNWkq**(6Y0Izi1fZ8^b$~!-lX?V=m{O^B25SoI?|o3>B+{> zWKbrfDeD~N1VZN=S&Ds8#kR_bdJQcnaodm8oON@0!rYznu&mINRAL|OxS!jY?BjH=9T&yRI;UY%2MyE&FCpWllsKkvi+q02Q~qk}Y`33sI33a8W0>ZH4; zb(%;`2LQn99Rq&=f{&=is#?BP&u`y(-j$kY$4d0l_v`hDb+bE?#Yg;p3r8%pfc?65 zTr3TFi$%0YBO`g7-M~mCBYU2Xu*c`*Gv6iD-iMfiy6L=N6r(-_2Ht#cawtGRGo)b> z9bsEHz5--N0R8lwWrrziKRoRSjB21{M|YAB*{18h*QYv$ z8dT@ZpV=<~)3<}!Tz)yUyp|aXtlPsg+6cC`G#56#nbXyI3E9l(ageny*%U=G!m;d# zJR(T|(>@o_#n^HIkZqeHAt2@e{WPRq(NzRBLS>%d4 zjGYC01~%;pmX{ps@=slTj;yBW0P3x;Fz!|FQ-PX3tOwc(+~Cl~TDMw|54BbYQwC15 ztFB>a>XBzgexRj>J;NlIj3Jb9KPqyxb&f*Y)l`6g4#j5B>u}i@UGvQmQu%Y*m}ZrK zDj~F#C>Fn@P6f8~v zC+6s@Hj2|5H!UWZgKquZb&-A!dPTX64Yya}A0U4D7e6N1oDN+~p7rdU%*b+I<49*O z*bC&Zl;H1mBXFbt-1K?IpHVDM7^J8BXX6oIIq@<}e}IiFRJyk4D{WUaR^xoL=tAj9Pt0eAwPq zvlVf=OLOMFtyeubgvG;%Ukiwfqjl)Z=0CSB#Du%JuHI}3-U@9Rv%xE7S!oiX3CJrT zF4`Ut&d{50jEeEMq}VSa9!S&v7m}ZKvy8XZJ{Zx}HF2HsR>W73!m&WJd2{D3tEHqk zwoM>U;@yDB+KKO%B7wpb3O98ju)55gur5DeZ-vvZT^6m(l{aDD%5AIl1iH%l;6c#J zw5&iS#%mbWm5FrO5d$oX(f$%E%BrgZHLc6n9UHT49>uDU<%ym+{FtI>qP!RwN8B_k zh@x#yE0s$bl^F{dGb7(wuhXZ7n|SZ(gMisF^Hw~5C+KL#Y~}U=NgK())c4}u*O0MJ zXr?Z4LQWb$K(g9D4Z69ol}_%165+$ly`R0AMV?=Oe`HUv(JOAe@fc_){QZn-n5oyH z#4Tm}9ej0Ak{WD&iRJW^+awW)5*ZZ0cC_XJ_QEMHuAJ)L^ML1Svvu81k#2{3tL_-d zH>1Ki&O#kY_Ki7UaB4rvGTRl?UTG)i@5(;*>I0zhQzg z9oBl#ka7Mf#se5CqT0K2+R+_`O~N{Lj5*DoZsx(U%aQt<6|6c;gb(%h&ZGfR<+3i3 zJhjl{I^caWRbvMNZaXRm(3sOp&M1T;tvZ9eW{C%JW$YN6(vO_Z? z%%pDJ0c~^}_q^oh zqlf#3Y}t*34H>j>?I%rg*_t46RWCMu_mfXnhXp~b)ADxH9O0ke%FAz-*D_R5y`N`7 z^?wFbj$TzHDI-CCoC~spgVzP|(?+S)xEJ`-e8|MclHeLYAL`TD!*t(L-Fd)yxQAg7 zd1-BSeQ|}N0h=wJ*0`391K+#o9dVxd?lX$E^BvD$*`Hsw_$rD$;);=I#<&TRu`heM zh2iqix`8@?6m=-bBh>0;@vHNQf;8mW$5a3dJT^yRk#4GC)POc`!;GOCbOEw!MT%A4 zOujAy`H7qQZ_x7}b?9lTcZk+_eYH~K^b?|}PKKCxM_Djdd{OAxANeZ8`hL)1UXz=$ zbf;7YLunqro*1*Q_&XPet8q^9D za$1AW;{tJiFxsAxUBGs#U4So8aFS<2hVv1_mK9t$_WVa(2jBQpGF~3Rp0Uhg%IVt~ zBK?+1ORy9ts?~u*2$h#c=uhPrv3X{m?2Ash7&g&KeJbOV&-2drdQmmC0e#-^%k^h` zk}*_|C~~tScgKbM`x>&${`hp|z5aMjlCI;|yL6rNhdg`$9?*c;`$d48VP~00Ed*TA zq-0CkbPw`nOc!~_<}@h9gbK!4wg2h83dXyTl8Sr1&v(YhRgPy!A!dW{-d-0l+A(Q3 zOZC_?fUN`Cfu$8lMq0Pkr+c77gJ~k z>DE^1t}VVTp<{f`O#vZmtx2=qj@T`W5o*G4kN7qqN}6U(!mxGQhN^Dax(lW#sLZYJi;$fP~3k zeC@|d{(=3>(Dj7>sG^u9Xh!EO9151tc6{t_IdJOMPam-jk zKUs6Frvtut2jb6@z7@eYMMz42+wTe_>-do!n<*@((*y}?zJ9lGPh1Bv@(pAGimXHT zcsu2+)L*@VR)&?*VzNnXh*@c`*gfu*qV-kXf5jv)E|Ts^Jhtj=s;W=>G?zCy4&GqypM-*m<6fO%snX_u)Pzwh86|Q9?w==i0%NB_(QIKvsKo`Dt#OqYI zv5cq#IpHCuk)sfPILxb`27Q2Ie{Of%smb;3i5HQ!v`?_7qc4kdnM7`%d_^+)!-6`z zj&KV*zBo(@fpwPa^KYI*t4AXwwK_!lxP7)SO1r0azXqIt^0OO)Pmi5om#WR@CzKc~ zcetbXi{assMwyfG5AdvfeoT)WiuhEcq9``xTzN(3(cTJIhV7=H-soWLVY|eXsw`%U zmUqDWY%$;P8{FbuPnSR9^k(B0%TYn@cg3Xs_vqXsBX82V*=vs=LAqQnadR(Y_SlYTzXz~-5||s_$P8NwzIawwOvd%^NiiBx@9sP7uhuZ%$hvRO&7GIpmXn1)dE3zFSQudJr7@>@f*a+U z9^k{NYf4pA9tzP?x9DIC|A=5p$)C%*0E z^oZDm%3|T)X)^-SmUm{4$aJhUFJYgK%hpwo=c9_x(eJk7E=77TFXGPHPa{(xSz$)4 zkl<#s(e^tN!*T-=$!C5n`qO8py4) zYU&fn0^aLdIAS^a8U$5w4a7IN$DD#B1uA-heElcQ{tbAC+`QBK25?3zjfi$6B?SO3&>!AteqCNJSe zFSP&TdVbJ-Q243;#G3o1$p@*I_q$tj6sXc1t{>PXX>tf&oa8kYO>lnoy_Xo%Do1KJ z!J7Kgk}<@ht7}U;UxY)>tvsG41 z%;f!)dW#hnHPo-ea!h)3J4}&ae)smo#ii%C(WxJaFU4S@n`Fmu?oI2(5huTWmT2}W z*DgW*BVdVt1{yxdLHpi$MS{Kk-LP2qrB%zBmlmMBMap6;9DDe+v(S{;RD!=FuBzCA z$HvdiHpx$V;Im`hEpZM$g0+`pJdAVGpu@3xQp0nyoT42BvFpIbvS6sC^aa(W0>+!# zwB_UeJu?BueXd1ltwOK%ys`g2SKe8$N8so*08zU4qHM{pDzf#4F^^Ad7zafeD)IFY z&X)ay!#B>lI73%IpT`3zZ7o?Mf0~$3lS7|!6KnDbT_#!d6OM!|7))!b6iQB%q3#~7OU*df^Gzyg#IaFtU zbuEL(b?a$H&7Je>nqR9Z|2?iL@xsGtBPq%xfGea+dlTb%0~n- zrNWz4wT}@tNZzmGRh6dSt7!5B-{Wq%;I8{d{p5MB!ixL;YSN6Gv~Q6+JeLGFjUi~8 z4amNX|KFYnjE^IRleH(KjwD&mKS1hYv{%h)=!Q3|RQTU&`2Tpxi~|i=sEb+@pI{Wh2f!N$fzCn^HxL)BG@+7YjdEH1-K|1k?KATDUD->{jO<(xp+n%-gqG z72HEu)b+L=QC1op5dLE><+i#X?2XrVe9_IamAWcu5%av^Y5DQTcwG^*xk>eP?4KF3 zs;iG^yP5138D6Vxi5C!fD%#|S+9|3iEgR#eT5t3SNH!pRIEcdW=o zG{TF1zKbGYJ+ejLm@ya%F8ZaX(>N#(JBSIK+Eyt@Xe)PRLYLADQ!P5Nt_pr2^5Ez8 z0Uh-A&1F#UewL!iy^d6KWL!+P@ID_(%+hbhY>2IJ%Rl>zYlt>H|WjvcW^3glW1xBB-K* z7Eq#npd!?U{6?4Fo~QZDK|6bUv`vf-H=z`$>~KguZ*0Dnfg7pr*) zel2o#GS2s{!Y{_l=r9-#b&%+A>|3qVjws%Fll`999A(+^)(<2{g92L8NKmJRni>se zn$RX)-6A z3U^98%iBc313>boxZOK(c)Oyb)Kp#u3}6#UQ5ob4i=4(Bi(R=L)@TD2^w(30XIp$Z zr7z|BA5VRNhE|Du6ypa-@7+Be@F|Id;HJcs_!pFmG{7?pd4vY|1>> z6QBp-R5P`feAIMufCaNRd5Il(p0mJ_-Vyab4ER%|F z5R+C*tY6uYc3P+msNALC%8>@%k6@lse@>r0kD96<0~SX5CQCNa8;J4V4f2miXcuQ$7nXg^H!`qp%r|@TftfiJIfU7^h=#C~3>DEoy+s z0l8|SCK@etC|mP1ycDZj;zzMi9GVpTp&pT4L!+U6fZjXEmE#2^gUM3b8sBN0972M1K@y-MA@NZZo{ zw8G1?4DFgskEWx%UY#6^$nDde-MwuALnY3pb=b2rN?@?Jxbi|?~%V*E4DUl>MNV$-reJn38dOv3mjmC5b4JHg;-)%dh^JU5ttK3y#pY-LSV zyvmR_Ac6~6CMD+VZE_7cOfMnrmg&c=2(8k{ZFDQFNZVfiL3#aIY@zY>I6TIL_QB|s zjGrB>1A@0{>q>eGPU&K_7zUsQQ=j)8LVMgJYA;eF%r6wC^gX3*phD6Y(yw`Q=oUs3 zeTMoS1_!5inEN$L{F+qXCpZ7(3Zo<$5LF;g3_qeSBxU5?9RkI1SpF|h%H4yXdrQ2B z!ka*yK_B7u9>;`!l4n{e+V9c06*y}wR$qNm zVSU)wf4n^22Vpg!131^XxJW(Xurym$avm6L-!pEgOw#BYhz2zr*u~U=A;>yv;mZbU zQ9Q%E!nF_5)GpaXh8SIt7{AzE{s22J9UWpB@GK1&n-=&@Tba1VD0r!f1DQDi?Vyrh zAt?7S=Sv`%G5$Wr)~c+yU!u|cW%JGEE73|9{(2m2 zpslxRG}>XSdbMEwi0o_KF|iBjHn-~JR|xwo&FXNR{VTv*01@-~A9t*|bJ`Ee=TZY` zc^`cG`xEl7vWhG&CQUOyEUDJZV@1qA#IO_axG|fO1ItA)k*}7^#Eo2+B_j!FjDt!6 z>C?g4TiZR4x)=*g$+*(A^N=YCDcJA<8G~tB&6!B#+0KFXiW!U1a$T;`I866@Y9$vz z&DJ0E;V&NXaVqVwF_eNc?LIL$ZB?Imeq53=|Jab3K%tSxVzT*qynbrBRgzFPD>0r_{LaRD(__msklk3UP*>+amK8Y<3FnfWc*!Tf$|j)N){sW3^B%yOheKXYP#j(Gr#J3pQeA<x~}kYfbJwjJ^BcE*krM7RpQAY&<*rR%bF-yj$XrD0H64 zVgyzU$do?1jijLw1+kYya%Tw@)B-t{ptpvc;4<|EGEQ4!$^yy#3*MBpMW4cRL0_-; zjrGDz%6vG{g!#T8p|lit1Pf!j^ZlQAqzXT8b#DFdsq-%*`Syl6?tIZ5BKec)euq+U z`SaJK%&9VTHI?ulnBqrirQ7it1{;>>;x&&u z1M5$QKnBx!NYaN=6lvQ~*!T52;=l3HBlpii?);LUBJ{iMJwd8Pyps|&Y9+YtomkyC zA7wHkv#p}u96nKpFCA5JtOChLjjTrJerH}|Nw>vg#7Z;|d!OkvmjyxgYzx*UJw(dn z90p3Zw2a|BEr7ew;?prkjOY|t7Qj@FoSiT1Yl63*Vat3F)~vk?7)eBqT%pHdc0 zpTeon`CS%4w^Ljg~jS8YF@ojJ8p=?m+=Eu)1=xvsl*&f=gYn)KAA=Ho4zu)nLez;KQEKC9z zOPQD!I)J{WueTQsYL@#1Qj<*~v`(XNjV>qNrlXs+G3T98H;2dN|SH0R#ojn^`^A=9jO;Defs88Dh z=zpht&vvN(Ev5|1nq+-1`lYxk18pR#-cSl+#)dtM#`-Gel1Iu~$ittk@t_hSOFvvz z=RM`PS~kiSg?ADoGe3ic!58f5mxn!xfJDnkp^GxC3UD5buSsI?CGZBsgCLtdbWfX^ zTJRh2)*w@AbB9IPGC(y2U<4Fo3U_(xHE_fBv>OHIlwyf0ZhjIBf1QLjH$|+s7l()n z*TtV{58o2}9OG&55@Wochd&68gEf_=ZaK0V1t9bh$UQb=Ro1K8$|BpG-PG3*4(;XO z?4@O9-aa|N)kgb7s?X{8XkS9TM@~9~K98s$tR>i|y|t~TGq+tKO6GQ@Fc#awJEaHE zU&yiVBSKuqUusk|qDTQ)^KV0~j;{EQ)$6z0s|afeht&$K^I3fg>=#b8fpxp)MRf~j zF_^Zvzwf;J-&@B~45hr?Iv$T2+fOTzqd_k&Foaqw(6yOWR&!HruM| zl-cY^N$E^MY=&k-qSn$EHT$Jq5bLyhGM0)Vho#sAp_3sj;7%~8*|$1pW_{$yZ+(1G zu=P#bZa(ga%+)89-SCaEEc0H+n{IUpuMYpT)0-iDxW|vu{(_?+lhoa3g~@$$PFc^5 z4yx1Kcdod`dx{}i+psqG-LquP)f*o*i7)YXL&NB=&RgRAJ5V}T@C%KL` zBpR9RcxJbff1jaEQ4@*~ znHoj+RrJ|dapp*LH`R@m0(yX(R@sD-0+Gb+`*`-g%^B%{ts>PkjsjGy7#q^LSQ;^% zG@3*`TkuusTPFh0WUuZsWElYBe{FfJIjmb}S0RWYuju=TCngtED z9-!Oi5j348(1XWgch7D83+(e*#5Rm&O7IP}=v?W3jW_3fcA>4VTdN@XIIvNmsTWv2 zvbf@e3b?iG>QoD>`wuoS%Uyhf!ltF6D)fa;`06i zVIuN|v%$G8&tU!a2+TZ?`oy22JJ( zh39PrG+xhKgk?s#LlaJtqUG5)VJ`Dz?hi!P#omfqrg}?@$bf4J$H;)@rpi5fDqvdc z>+hl2pK1*R}O^JA^>$ zpVBqy#@5;k8L(2!P<`Dom9p(32mcu4+(UN)^@dc=ntVK@SYRZiZ+i4swr82IcG9Xo zpPT&z@95!jnb-6yLq~bG!g_HCdUK(ZT=Unp}>n#o?x$=2$+%rR>Sz$>OkOS?X{3a_1X3rb@yC<#loRRSF?u*3~qxm=d z89Bd(3zC+M)L*-fMtYAjs+ty{MXg4E8K|ziOezX3Y%dp8_%q z+V{*^IGP|40#}|495?HaXOBapC%)nB76AZqwM*uen%J|n+cqhPbkOO~>h{7_>%yls z#fmv0Sv7(~`IT_TL{xczy!a%_L9c>=rfF}Xwq!RCH38#yIGM1T$*>-qvJpJkR$(m- z+1*++VY2EH7OwjMd5MLJt+yp<}7+hOS_Co8m-j z+3%ytuNT-IqT7cYj;+iXME|8KvYoy7Mpsa8tSkpwi~tzWp(ua`pe0J9vtPbOXgHzW zusp>`ue`por*Kmy>?LbyLvgpdzRQY9e$Sgfd4N>0js-om<;B8{rm}N6CaO)fk#^%y zy_tbomKYhTV_Q~n5=|x90W7ziOlqd2T_}>Lqe~r(DFMc{jrC8=a7}r~mZODc2 z1@3Lb{cC0d?+4+-#b8r4HQzoFlP1#zxTSgy&c zfVQeODq=H(p{ye1wc@YtOvUN}>o^J{F07(U7uO^%C2@vGT&yR_H7-Mm$J&`iR%@fy z$0J-ga%G``U((M`9#3W#IJHb`Pu^CYm{qv0DZqkEf1|Mg3}z(q2?l6#+b7Pa8RTR4(I;(MYrp-1lkh&QH{2}LgUSLN* zX^e)(jOuO`tuMKcU;@o#s`t%uzcXR3tw6DE&f*m2XT3{E6%2jI?3wN;+W5>!;@s{DFu$9b~24ra>;H0%9B+-sb0 z_-o4-S&#inaBa@46N$|@0p~gm`UfXg^5c`+dg2HXm#H!`(ECGkWvHi<_}rdeL#^Oh zxN+>*lz7G_*fR-M+u+Q_f7P5t4l);(YX@c%ocGT?2c5a^4W7@3lGKe7V!C~h+L$}; z-(!aJnrKUl3tW8EE=ZTVFB?N!E;oy&ck_2C8peBCVl|P*>!|T>nh|m>wwuWHkwvPU zB)|N3a#$``F+Z#7f7Cy+2t7gT;j340Z!xAM&zk|yRuJS<&YSiFg?p3jmDwWuZBq3v zm3fOc8KqZ)bV=;XVl5XNJ=1&nROv$SmKe>x9C-1VoZL=+67kJ0O~etUQ+v+z##^Uo zZ-Ah`AI~oG#Bq`B)B|VXs|%qnN~G>N;(CO;{-*g$%sloap@QSBT9X6oSp6)MtrAoV zg)p;dO6{i!&^~_iANz*Q%Y)>;pw4lfKqNr~HL`eepH$t4O8z_LQ@6>J=4uwhW+Zp@ z)yhS5M$@adTmz-PI_l_agI>yLOcJ~bb+DQ}D3NA@__Ae)CQ3-jiHRunFTGZPr=1Fp z`M)FiXF$62{&_%@2U&hklmXAnz!};%pO>Fpscc=|sr$t}F(HdQUg3>JaKvai1OAkY zP)hOLIEoa1(w4`k@lt2fob!#d91T(Sv;6op%;%uKkXKN4nJZaCzCk=Q*Sf1C+$+~% z-nxQiVG(pBTip@ONn$OcIx{CX+iT9m$hS`gEq|w8FI1u`$B6hC%jp{~`WPV%n(VFe zPx@qKbp^RO#-#)`C2@*blg;#ucfmTE!(uR3k4m{6#c%DT@?m^AJR}$11ircv-$n1( z8KDk*2VzCuU&cONf3SLFNWaK7^jy7dk0CaKd~F;{)yQ{hX&6hE*VEKJ(V+8vq8KA*EnJ{_%!0*5UnOw97DwBM3|0j@jaL z{y97GHT~ceMMXg6vB(*!g*TW89_Sr+7SEQFHl_k+DozIwb+MNgrO^8?=qz+YYwVsC zZunoz2KoGK*J0NdD+>^B0L-aKZKkdEUks>aC2acje{xh!n>jlYeAK72D2>!PB0eHz zRAzb`2YDvDxwUFPD7GzP=A;ccN!ax5?|Dl6n{DfT`nZD`9`kS2dU7@%o_9QD6N@Y8 zlP;VH!9Q85u)5GZd+BZ}Psp1-GPi$IrJnIg&Y(*hI}suAAlC5Y=rB&rB0p;J1TtW{ zQFGQBFxesetzEdM#x?Gt+r8~nn7R;GTL3xH!DV0u$UQs+t+;T`BUOBTDAaZwvf#dR zO*{~d)uU?k#o?0NY^{%3ZxdF!ya_##ur=2|S)>FNyKr)#mnmm2j;zb2EN6=*OwCm7~U?>E0MDH=Tq-jvsoT(SkmVMgpK)cDcW_zQ`yE}hP zzl$ypz?8*`yCW1Nvu^h6>_Pci?<+BU9Mhj+Xyx7RFCBDBK8Qz@zosL@j><1$<4PMu zR=1TDjW|)!}?xIy5Pvm_}{= z4!}&bhR_`HAWu1(*3p8zTC|rBhOKds2#$UbRXbvnHc$^kGxvp0gYCA5r0uWC<^p1N zldH0{r6_ZOl1_P6Bo&1)5&^9a%4t4gZQk*ks_}S}h zS0ue96Rg90HDih|0A9U9L|)Y)7v$|0;QHD_dukC7&b(gHSnWBMLy@}#iTG%Q&8+Qc z7tHQzmS6x1FEDigD7c+?xzd1DkUDUwgfrIJ=EfWH?&q9Y+;BIApz;{?|D&^viz_>sOxEf zP~&OWq{MCFs{+@%kSD<>Xao_uVtumn$$%07Uo{A;796 zni(DszTCd*CXzH&#ry6Y>eN^q?b$9j7#MWw#_16F1djMFPEWDTPfpmeNQaad1jh0M zic*%Uxy+udrW&#-*_{MdfUg$d+N*)a(A$r+Q-`3+KsCnT%`4@U{_o>K?Cel9 z!WSgyMbcw*VXL7R%z^UBF;+VflrQaY`ctuEWE0w*Ba|})UHf{j8iRafw@5t@v$WgV zkf^rstdVpJd&cw{*LitC7s=E8u+sypHZEDxAFcHgH-_)dM2W{PLZ`H@AZn~;+A=mB z-odku+09@_s#8#t4vNBq=4SXsnfIjQmiH|5NA@r3+y4s^`CF=ALQ;^KC?W5?JeP^| z@2RTfSqgO`vrE&9eO&j}DISLPc{B<1JI$;pwMs&cOv;)Cl=MkVi?VyYJN4AW6nY7K zc+qWrwFD*GpNY{I_stWu^%Y?4wZQ}twXeQIk2lVDaw$T!U(*CflX4}yO_1~41y)0VjIfEd%Uqf*v(DPAebQ-nd-a71W6SGUC4Gv+dC}7S z{Hq#^KrMV>G*O}x3sN`iu>5r@VW44w*!h}&3;0V!98$-XljuFQNam zVy)YIZ|bsg@+)f$a)=}Mnzv1@+C(MK(n9!zdQ}G0BG29TVKlCcr->L(_mO>|Pn?;D z9j~}PN?t2a?IGS;>zL!#{CI!+s!y`xFK_ud9~D&TXL3(rrkRNz&)ex)Bb)}Bid3Mg zpzAs`(~x(tYLi!FX+}=XzPQWI_O0o(LB!2wK!Qu*4eNP5^a1W~T>4WETxq8K(Fptw zx;T8?Bk55Up|OBJ9u2V;9OX`tPlvba?a-HxQ`pm3=_O_88r8A|S!Zd*ikdmKoZ5s? zbXA{U#>si5V$&+{5NJcP&q+-_n5p1n!V&B4@cFY3j9Lv?d@@t|y(DJ>foI+f3jr!u zw=!jH@Mh&ejh!J$qqEg3|UGA=;-K)q4VT z+*5aSz6ch$HjN;jAp?8+{o{D72&0`AdC_Z#Ts zU+8A)<2WdCNP)~zWt^t+oj0yg96zm-*NN^XU;CY5(*9lvx9cPGs6LM9WVhWS7g(l& zl77?3rP-;B`n0C!R>hp{Zeq@QGEXLZ(%HnYb$0(nsZXfD?{4<(K7I+anEb}wbvo|# zJG}^e+w39~U)=&Z=`@s~ywIAgQzzykbwp6v^1Y)8FrwUVkF-@IQy)e}3WazyCv~*88gR^q|~v1X@OebRoC%W zTUc3n*^v2iPm7^F_e-_9ob4@^0-`fTX(2{7!^gm9>}T z3Yz5K!Ws{@1@9R~5#N7K=f*=YeuzQ{()2RB|Hh&H&t)IrhiN5i+mlXOfmRGBo}5g( zl(<){)aqi=2bj2@xSLvxQAxh-D^BjBtJpi2Emc z@Tb9G-`^}5-%(@@O;p}9ZaM(lyXc(=Lj*oMIJ}bTOPOg&8dxdL-=^k3+iE?X=0F>H@VaHNTjp9 z<3}|*S-ZSj)Q=12iN`I}4c>sqO=S0QO8%~U@IM{)SGP&M#@+i~i=mMjvb-Q$sHvMN z!2ic~`Craw*<`ck)~!1kif^QKus7z!{StQF4OR{&z8@r|h0Ehc15ztwXk2PWgQfrD$nHFWt;5Mt*C~LxLC{*=VW%^I^D!JN_Z)nv&R| z-NY=JZ2f)@?zLv84!g`M{zfh}ZPl}ngLGKcl7I7h{;QB`c4q~^XFD|4l8Rkjuh?8v zN#polRPb99{Jy<^R)bsbPJA22C;dsDW)N}H@>M^h4v zXgkUA(Egv*!PYL7?#=;Ia4Bc-^^@acw5(iNV*K{@^8~w3z}GUaJ_e9?lr|ycznirF zwDyumQaHYhwrvpsuXfO+Co2djbqZr`#@=AUVR%ARqkG2YFqax0$3q3RThnT8Z%6*C zH~#fC`WqjsRAiYnWm1FAkVfW61BIXmjkDsquf-z<;EbA>`f4Xvw6g2U2idpdAEic4 z@+^PC$KSKPi~r{kZ9YnUi)ZU1l@H>!ufMIEc|aVk`S57~u02W2>`QeZ0V|Ym$Xwv< zor(6t7R{~gSMDe6N}6bmD>?ueQu8dfcG?7UbdZsdBhmXC4x`lLUnJjoE^phi=EyQX zYqJ9c5u0)8kbOi)X>56zs}|x;+%Fb{tiLp#ytm|Pnyg4+vP<>l>*8s8SkAn|yaT(+ z1L#*$E0sa~>FGCyL~A(zJ>aCFLFW}4XTshqmcnIemeFNrr7QC@jA~u8Liy!Hs!5wM z7h)g3vON0=ZhR1tljHHaDTn$u^#pT#FnFMDtTNZr*DXzV8!Mipb}!%XIsfJ6d9W%y z&L66lkNM&WpgQiK-pky@rF+O6w9Pt<%kdi%slv~_6zDtt!4FXkX;95%W=N z|5-9`rQZ4+iXSzudo$Ju-MLU-5iU}Zvxv;NFVMs?y~J0~YFAZA719SEBs;f+1k^f8Y!x8F47 zKdZwLLC_E#aU}<*LtaooS~+xxCZYXjVIL(}?;%w_kc?f4$zVVd=!S5dDoKZ|oNQHQB9l78Hnma4_R>BCWg`uzGHXPH)uh8wX#3h$HUt597~;`X~*;^%7E zw`Bx`UAA$T$9|L3 zxaLI3KKAi5*(r=$C||4)4I!P;linqaAEeG1`QFV_TqRvq*{mS*-yI*%x2eSM_N38K zJ1(A-pboS_7`q#^hX7Efa3UDkd}0?d_&G^A6xu-oNAb>hAu_NC;luVCWc%isi8+vI2WaYWD?xt; z?7Y!X^a1MPxKK-ha+|o-Gbnrn7C_GzK5v|E(3&B^Xe&n+-JP@>jyu``z zVxvTpWXWhWu)MHguoipUrxXY%5n@nt(I;Tf<}A!nTw$%ztr4wp9*L{s-f|a|2~yf* zw273|k%J_MNix#s(q2-OQW{cQMaZV&^#W@-KgAS?@5hD?WbW+l9PcphSnu)zBLgD> zJ4BMfB#oN;;X?4?=;6{Z+A*N0%h6dQDam6K#kHjV7O*Kzt6V8>)6mf1(zH`6s2or; zC{?O#)_CaO=I=|E<1QthDQ1gcsHUm9D=VtltM1HOvZ?+-rVmL~)KRD?%r4>2^HD0G zU84%2aZEm<{YA@8qo)iguFSJ3xTxThZ&PYhdCj{sJJiR3#8AcX!$=+HOR-KNrQ!Vb z_Up9Vtz5aht$aewy+U8fr&>aV^%uMvuq>s_R)e?dDLr;B=H$zT!w1y|`jf6pC%eq9 zgrGd9Siibkqf4|)QB;0FnN-*$RibH_84(uTB%MVBhdUZ08ax^=TG7O1^ zXflQQntjCj&C-c|g6-K#f90cSXc2C4d|A7AsmRp;Z>4!Lr-)zGtKmuOa=Y%#gnzhx zBsGSg=_wYe+~n_%LRLwO4uuYdp6VRC+G-*9t}Cl8eg4p#IQ`UZ+%6!1|INjR(I@8% z_w&aaV>+&!fjLq`q-W@wMV<+YF%ieA`K%F>rKLHxy{1j;%uP4y(C8A?mSv1`g>r6P z_pKO^1PB1~QovDEQ)Ez_%dN|8Xa32c_`|?q%i?2KVufj~ZmDkXHj`z3Wt(H6Z{j-@ zXt`&dU|Tm9`q>tniEqz6mrcP#?`G}#wtult=VIq@<;d(N?Yeg2wD4<-ecd(V+>S=eM?7`fn($x%*?nLa=+GgL5 z^N#lB65#d8dDVU~f4#c(IkY&ZeBix!-rm{rtNtDXp(EnTqst>zqGu9t5Zw(T8pw;z zd&}!KEZybqqZEZ9-XpFMu?sy5trtBPdGFWlKMKu;Ee#zBwTJOTH^L!~w#*1uK*($b z>~~2eN%@+pqKCu9XydyIuG8@_zO_gXO3x*gQ}V~uMNvmuMHP=I#BJg8q8wwjkX+ey zdUkSkvkP+@$%yFnzYqEkMv6(#zZA7erzJKed5%p{7bOQLXH$PBfm7CGZ}JaW$($zR zsZNzl{{a~Nd1}nE8Y!Vww2&7}mywc}+sb~+z!)kwdMphov6VYFd2d*$GjQ_e`pw0! zt7r%LtkrG-5P!Qzn2BD(;m_F4NXh8p^V^2nKCg_gq}RG`D6DrkLp~%sx|kq8E;%CD ztGI1=wJ<-KN@p*WH6*9PkhSLNMYq6m_>+ zL)%JhraGDyR`knUDmUw6>lHc`R4|m6I=4MO#~*V!P3>CsFEzUC3#W&R@pkO@ZQASC zESv{0x9AUb1Z)p&yPD`dbWCEbOl5^71S=n3e<{2E?uSCoSamqyrPtGE=n^_{#=#P%Y- zk^+;uN?8>6?XtH4&o1+)zbz=TPr2}XpFZ01oJ%*nHx#m-`TQON-$O{T^cXqxoVpiR zuNHk@+)H=GpVlUofs|ORJ%D`Q7Os){D;*RyynkcUoPY$K}W9 zr>l-zob7tLRUIsDt^&P+z096}U1?; zcF5+;=co%T_^Cf{e!b4+F6zEo>0c4G zPwiR)bev}cJC?srzM#R|z=N(Q1T1~ZK2P52E>-tSErM7DlLRz;>R#sW*gwv@@;CE| zL1jl1@gbR3XCGWZwlBc^QxRs6ZU`im6L)${14pl;Ss=cCr0&d_f+;d|c!Pu+fCxeG z721SOK^W6q6pvhU5&H9RMK>Fv7W1x7m?-bjhu#=jo>Vb_6k&pN!-R!GaUvr6tbvYg zL+zU8d~8!FA-&IyjsBK(xeECcX3?x4 zw7u4CXJf9CuD{9J5_VC{{+4AdjT4iW8xp^oX4CdpOpWJcB#B}2YQ@ggtBu^8ZE2in z?^WoJ<0_$^XD-y2(^cELW~hsH>-e(E8z8=wb35VpyE^0hKo3&UoE=xGFKZ9a59M%& zjJ9yp{M`MCMoW8~;3rbX`>N~g4x#=@BSquQuBz96BB8n>w;ZF|!60q%r=z6X5wR$F zX|3rsk65Vagm_ix@ql?Z26yleaod)Ud{tdkU_1{*HXMSuL>5u zh#tI>7VT<0Wrad(xZ=WYcKPeFU{b*m55*7Kd5xE!o{JCNfk~97(_9)w)i+wFRK55k zG!N6OQMEnTpvp4SaJ^Ts<5~~+gl?oyKd4o&v|S$S^+H5bK)eK|Nohsw%|0u4$JuLp zTq%chrWIV_aejNUVBNYE9k@!U{h}%@$3++#EY+{aMu0ldo9Ta?WJ^v-?KNdW(|NOC zmaX@&cAMd&3oWn9*bgV>WKa!vAswmLk@!WNP<-g#oI8HYmpG9iw!K(`kOxnpf^^{m z9vKN=`c$b>#!4UM@3e2!p8Av0-~Zw zfJ#R~c-60I3Tbm%Y9Ny-7n+XhucE)BfiZhifXd0s`yt0f){*_OTMA;&VuRnUK1wkk zDG*P+5EG)1 z4QS7Y9VuMi5?#i23mfaRR!i>u$+8l;@a;dzdgV!YcrjW25sl9c@76qcjK~j83>kr) zG^kw_jZclgR+lvuGw@_Bk3E<^NAZcKe8@t=V~5rz_I!U6S%?<$$Xc6G4z2F2jqO=o zUYXU<1^rvRQ>2S3@WFZQArT>2w#+D7a7GYTz%*0)+S9jp-n{sExJsI`~rsnm&sJy3oxrJdLdQWv)FF+&|}IFmayb)t@CPo&bw ziLYaPTDVlk>JTi^lj(?~7zdoYF0*12s+BK8L16;?RC1ars>R*OTr-`ur@`gP#fir& zXOi)p*x+)2OuM={h-bQ=%=#^5Xk0@lm|dZ} zM9Y}|8b{N#x>#@$EHsJT&!BTN!-sHoN_Nrc6S*oi;~|)tPYR2w0~~l|)J(?DIS`2T ze%6C1fQ9OIl2(qgDZo#VHXN++&e- z7A&XS2EG(6Ev}J5%eeuz{aFlAIshHY)UA9}R&P$U%U#@}1MbFDEN96nr}(M<|;*BgwdSH&<- zWl>QobIYFcO(y6wKy!D_*J@>iY-P*YBJQ^=Gr8?eA0>d(=#g8Ch!OmtN(BxCVi#YA zdA%?Vt@GN~s4LX>?4J#ppzG`36bPosg!tzfiVY8v&`>}L2nZ$GnuSyEq zoXp0@#~TV3tNe|Ro>HIQCqY4hfq{Sk0|O247ZM^O`k%JY5b4b8rYu@Ava(I5r>EjW zLqp|-BeCL@JDu>ZxE!GcJGIIgHQ%4F`^!~2oa7>52m9*(v$y{vRu1aT)6;O9^YJt^ z6ckixaq-gIOO*ZI=SfjS5)?A-V*h09B8tNQr87={kOpSScv)%bw)tk;jg$F(5vs(b zBv$K{YJ4y74>7d=BlQ1#YBiDFx5x99kB<-ICT;rUy}iAJ{mx^VmvFrQD+jH@5GSHR z3F6}7;jyuyiQQsl<*}ga1q*$(RzE(H;=tNG6Hi8AEZ3WZ6u-ZeUf!0a@S~LBfhkQl zi~=Ab0%4_1Wd(V#R}f|&N>s_d?E9tcR&{(P^lmBmLe0YaSim14IiT50GExi{&RVo91xL@6s9_h4~`yh^$b4sEAZxG!eJ;)cgQ~u(}5&RAv{}-3CdkB zRbi+$;0}q>B5xd3+3N%cOIU3GCGL-B@YN){+WidkKmku;a-J`_GJW$)oh?4A;<)zQ zkOjdU()gTRWM%r&2+J1eeL0C!go&P~4qOh8OI;_3q8pp)UDkWgTfoaliV>+H*h0n3 zYcA&X@)rE!a`;)kE`PH-yNzx)+$Q=SpOpv|l7@`ibRPH=Q|@<`N$ImNjo%mW1IwuB zLu_bS@|i(eX~S&v2LZ>Bo(FDTT} zx1a+xebSpU`59%Sq>2c*!1v!~6k)3WjS&GoC;^p~bbzP7@Yh)S9(y}i54Fi@qK~f@ zFzlI@vnIoOPnPzdh4AqAP3cBlE-=FkdZ6YYZa_K-{6)$g5s&cH`FYWVjP%-TLTxRY z&aU0#-@yVtg3-$EbLyPWyqk>__+P%a^vR)#j#+LaTG)cLjBaM?Ze2C7UM$b~2CI4x zd51ZRz#_K8! za=2nlHJEno4Yg<&P?RdKM9cG&H`Om}ZNfdlkqfE4vqH1O8l$s+f3`LD7!fq*fxr2j z)0_J@tQs+Ma0^ZcXVq|@s`$xz6FcXwSN{NMo|uE#w*=iQkmb!yu`*cMb$%Nmrke=k zdL})N;Paihx6~MP&)lP3R>$KIM&SKcgN)2o9QcNaLU48+`w<(<+X!?|rasUAwQ$Dh z!Zk4~ykFP`>78}k{bS(5@!ep&qtsWzAS*^u;0;E@nJqj9sju6$!ttS=Ae)!Hrcnt- zmfQF1jMiqY2}`?)kf+&N|I*lP=Q^|YY(ufmJv11Vxl(ifGtaf)n`MM=dIYP;USbG%{Bhz$qHXO0@Er(=P0jJ%_Xm%>tc{EP5klTz~!`K(5 zAU0MPR$K|*?kh`bg^&M)?)8HJ1K^UfRqC{~46JT77;empaW;G1C94M0PZPIDbYXhF z4&6K{FJJ*gZ7&`Vd8jPY%GZ=a`;8Glz(i4PS|*a}sOd+8w)aDN^9)%6l7zD!ZhyV@ zN}1$maQ*eJ?7*}NP%kYE(KQg{AagvHxtc0U;o|*fPyU@?pou`}3eqnEZu@Gwc=!h` zN3zL}NF)f{2BADiSW8(zW?~8k33l&%)Mjplqtwv10rmCul?hekp$payq6wC0e?QRM z(n?ZG$bky%vq-NIz;iWGa1*-T&blfBrIWo4(uD7e!Dlx;;)yq@W~V<|S~!&a)dvGx z1Z40aXPKw^DkA>~ z>cY4Boa-CNR|C^|_oNe!SkcSH_z7nI&4O$&H4hvb33V`$$Zv+Q)Gxb6ri*26QT#c9bTN9<=sMh3d(`FJCA z>$YNOnSrC6Gae^I0DAdDX3!^t?H4&+- zTOP752$L^dzqfE9Y_L0fr6+a5f~_czJ&yBesYht<*M+hYIg+OzKLkz?Q#rq7kXU1y zXC=zQrc9~A@C<)gOhvauOhnugFjmA7TTylpUt zq0k;U;cp+O6@~=`0#QS6R(|&8=%}(#mRbYpQaYaS&&d3VgdUcn@iX+A#!Jn|5@^ zThNFX^*#M&n1BTP*ZKUJ2#2FnjCriEKCl}~I)ay@VMemQ^P9c7YFhj^-Esfspr@sh zvha-OUsq&V{GcxbEF9svE9j^M8^<7l3NLEBZ2&EWrHw#SD7#S65nF(05YLD>R69Ohgshb?s6%i>yGb?q>II6F7W0I;*?CCaD z1%WaAc*`U!KO;5ty-`s?1y1HF3AVp{L6LONBB~JwY>ne=4T1_iF&AqzqO`;HJ{y!< zpIXnKr~cSn@MJ{hBYzP>xyKyKorQb`4|yR2yT7DuGW59q%L6xWVQyaOf67kvKEES5oc-0~A+F15d>gmKuClv9!OAK!^gVKhk#9VCRKm^e z8(K)=K1z$3g(GBq!NT`n_O3xc-FHtrBI*C(5byd0G49!jTS&nl*uh(?(JsH*ZH$y^E1!x6C0Y0@ znUUp}>&4Pe-cpQ#zWPSM&J9 zMz>X>nyj5uR1@+;lGi;U6*z5KepP^~+sTGFlEJiSwL|iB&ST#7Dj6t+igR87iNu3K zf3x_)?FKjgw#TEH*c)w~(YE{QAC*Xr?^m=-rz-7Or#HMd%u<4Zik(Uc-Ec^p49^pe zU15ZCUHF~pte{34a~X0h?0_&r00RDxqPFR_1HoFuJ}{lGh%!CGIKf9YuqcJSB}LyO z>28mE!f?Aa{2G2{B#UPok;rA}@3&*MJSzMs%*x=5*n;pXRrqm#2fp`3pvQI9bFE-8 zE6+$+f^ZGYSvttS3QSaV_;$9|p~Hknu6iOGVapSerx9lnbK4Zcc!BUc+yj8v$uXV9 zA1#~>oNL;_ep#{>fd@C|_#`PbBFbgVxLlVyo5Npq>qJpC_=JA?c)?964oRb&!1j9V z(A83~(!#k%fh(k4%ZRKdXg>Vjc>W5h#oW3%0+KQv^@Yun)dj>zDiK|laGbw%1-^XL z8Bt?at_`I-t{BaJrgJqy;{fRi9)FdeB621&&X{1hJcJGv?E3^{bhGXg#6fX6IzY$j zQT6)(LkH3h2j&u#1uqw^8UYSuX?^R1zkImn8M2O&15h1L7TO?vbz0W`uwW;eL+nkzL|`dA-&vu>x-*J0k~WxtS#yg z+ez}>FgdQfCSBnos)LTl%2MlHagOX(rv~(k-><+4`d2~eb(@t#{-)o@+O1(zD(W4a zE)vgqJY*cB=y}6^=X8TCY`?(BlN8(6*ywz*a%3~_U9J#x91gQcW|5u`lJ;sw^E4F$ zbeujTH=ZWnfgy`IvRY9f_&N&^s($d~r z2-BK~N2RzWe-7L}VcCGx)_k5zW36J>xt`iot~v%{!W1cV z9@j!!CX~`X77nFG-L#Hj&v)S?s{TVm@v2>##|2c*r+AOUP2$d`cgh3p zI;$lMwvyG{l}7&1BQP$&5zNba|-k z^{(q7!La903QEYG$@Ex^-%tDb30u^4oYluiz_pcaVcjxh_34}djPvI_i+6~Fob7>_ z8PO|0h|i8@aapAqpsW`VHA>% zrH0LY4(aV~dWUkV52_%eW=Pa&h!o7q-t4Q$Cg-iE%QZ^eApL5FD5G&#S5)2 z1ZdSpkAn~mD^y;vF!$;K#tC0xo1oznRyVjLnzjWF9+b#DUqvZk&53@5a?+jt{7UwdZZZy=^d%^EaRLh+@42JC1V1>sY%E_71BX)Ep;z$*sKYd%D z^CM1@7ST%P&#NaYF)wkSRf(PfxMMNLdFkWuj>IX`2;_x7Gcnoi#6zi_eoC@vGU~J; zD!cw!cUxn5^PE^Avbv#aBqM#%kI*il^qbf7sl6U-d3l-0u*4w@X`qbj=PlsAk_i{j zV`*0TI#>O&%4Aq~KcjLahI9#W@nxIB`vKUTL8Rff7)w_iKK3F6;CAt{^%W0nF#B8? zvsuj}Z2b`f%wnA^SU_}tS`l4$F1;Z|xiPy{bw&?m8er zMgJ7xy{OQJd4$B_(m9Bmdn6@8DC@4}g#CJ5hK6ZI->;Yv9C;H|0DkNHVKsfor@syz zulm^_qh%tFRI}4Me6)im{f%w;ix=BAwn5G<-u{@=nc3JP*r9?wy{vr^xZ2Dqu z*5vcb>f?L?F0v!w^FbvvhCdC3x_G~gtCd;) zGMb4r&~2V8;@Qq}@1{Vz_I@Gre(+5HI@DP0GT|+WK8>TupKv(YRc0d)8@Zb^9=I(W ziC=wJ*2d27PG1Std2aYUB@@efF1x-6JMc9%QD?b@v1m2$<^!HOlL>6+&%F2a`?+oh z@+DvtznIhW3KgYMGr$(gzp@;-IWcmx6s;9r3Yira_AGRj(Pei|f6nU+7kT?2`z`W$ zqNM$^j0dVXmoE^q!dH}s-i4aP(r5va;X|uJ1lOF=@pnn{;LWq6B5*ORl2Yk6m-=(rUYX8h&XJ<6yOqh2zeF zbSGiglI?LisF#}K7oT9Lm?VaD|-Sa{0~dzL)jYcX>5v;_+_4o`&Y~>0jKX21Wd(`pCsDCw=`zaX?1$3cp7nQ!;9AN}!&j%!7mP(=R&iib)a4Vvsv?l;B>MqkP&47F7syc?}LFfk$ zu83Quz9tUFuAGAt}z$@4d6s_xXl-{Qg^z$RE2 zN|ScNOMN~?dpqXJ^Ovw)AuXua%)-XiK!5G2n|<0stF(54bF8VsNQ0w7s|G((4yJzt zF$obJ7P(029Y-3q$owM^@B3&JHXkYG28OXrER75dlt6QdJYCi;P>aAEO@TjkxGGpD>ByA3%J?`eiLOg zh7~_~gr<*mO|Y0IAaWYAPOo$Kv{ep`U)L84@^=Zwac)r_7bnoB%0G2f4vvQ=@X?y$ z*_N%D`gqHJkO-n4KkLkrEKwi&RLI%-)pDhpewjSC{{%E!IrUF;l<6R0#$qShFs3Lq zhfRW;o(`*Om26x$II1P@j}1AlT(J(azl=r*?GKb$?lN3>vd(;s$Az8zg4}K>OIX$o z`AxTj4UEFSANJep@45kdOeOY$5$ose^|eG<={tR?#59xSjE zJf6y)JkX#ClTi&v^*;^J&-tQKj#R znua`v6~oEo9?~p*W{1IiHcE^RWLf(kQm;rNxdB@V$41_%%;kUdV;!9lWBYpTE?-pa zf6-8Wk~{`M@tBXxNsg|b*E|$+`ofT6rsj0wc`0B5GyM3$?c3ddjtF0)%ljVTcnkXQ ze0>hXKVXWY5O`crH%1^g-7U6VKZ8$>PUIo#yFe&8T2XhpR@#EMc@Cwxl>Z?_{jU!8 zPlo{II5zSla2Luv^%k97bG}=yA30r($yg@kN;hy~vo%J>6Put^wY#&r%MXKtyv(Bj zJVi^Guyda`PT&sPkInoercn=(Vs#?4(nYXr8@F_s)GvI0`dbU(3m*p+Nici ziFy%2mUFTy20t&_vab#tUS*0lsm8A|as}n?tL8A;nCI7~F=cVo>2pSA##2nx`u1Fg zDe*)tN7#!KMxy+cSd!~01>P3s2fS=~7Lr~wypPVpBoc2^AeGbEl@w@0>KxWVFQu;# zOWBD(`?-r!$0gX{y+zLR#er1Oo*r<^Hk%=k27aK3r|XUKXawGdKf#ovwOG4{P9M%; z;_~BKUuhC19@AXR+MJ_=tE5<7SZT(V;G_DjScE39gA*MU#OqiH68Zv6YbW=Rk1yz! z!qeNc)MYMX@=l1*t*VtZy@J^-!=~j=!2!oIbEOuE_}Ra(aYpAy)3dcnjx~_noyo;T z&YH!6Qe&EKx0H9?oq10fcr;9xQEX-_*s->9t}ThxV*_5gwCH)K{O|3*Owj zu>`f;PbSMr@KvuH{4CiCaWx;p7PI95H|+sVT**_-;HWnJ2j)RvOXY9$Sgc=*W+k)J zzXW%mgFG9-?QzfUvez-!@%@m_EiKIEUnuh#sq^Bz|Kt^GT(gIWQ_p*x^CHZ{NV)5n_hQR60i2f3l5H-;aimAXf9P>sbIpZiUlqVb!l~PHr@pdMedcEj-+p6mGK?iK$pQtX^O?Ek}4H*XDqV=^4ua+40#l zt1M&dm3~rKZ)4Bste*9I?U~$KY$e5^TEVONWvRdfg=RgBkbbZ(NR*2pxo}Z-q^*eO zBIpExwEbSq9w(*W?qe6>r*FYo%kU3Ia-s}@gEoLYoWVtYx#o~3^irS6j}gP;>d%*b z6P`11{BVUX=>0EZ_xyu1YHwaIg8C+kK`}8QX^T%Cy7|{FUDf#&Pn@<9`Drf?2iw@7 zqGYfDmuYu~CNsrW?K8+iy*Pn~{LbvzL9#s62~A!B3@y6i7Jdf(PO&IWmGlt6EWwc- z!H9I*gX}#`Y0d7%@NsF_-`^xV`1%>+o`M6>Bf@N^*o`g^D8Gr+HHMqT!-i(vNn~mb z54G78&-|&12_QqDEF)4S(9qFq#RCkjV)uUtMTysO$xGh7NQTZE*Sae7z5c^9L~_cy zr(H9-uMxqy)O9{*YUt+uiC5>jK+M!XV$zaZH!!!P{}tZ2~-c?xi*_t|`yP6_S16_2yu=5)SaJwC7P>*QqH zI|lrRHyRt-kg#=&8|RtHCSMZd3GHd~8Ql`LB0A{a{QnTX$CLgOV&3)v5^!TyMB?+b z<14K2s9HKQxe~nNPuZ+_>d}Ij-|a|#nJk-qhC;8|O6)xt-0qi26CtWf`WYrho3a+H z4U(@DYTbzaMXb4xkla*7wX0HZ*3Q&8YbTX6S!m!mi$(J@)1w8Ens~x$adg@dguJR+ zsfAC^k^pT`+@{K)@H;xXFI!f?;^Rp3Cv<+eyqNhJ&IPv%nrLoUoB}OXZvpx5*`upH zOB}38H6Wp@iSDN*)$_?FsPHL;DGI@YH@G40dD3Wa0Q`8N(%b z(v0usg>5~+f?qqZ%z1&~4l)uSzGn!Dn*F=0^$0qva}~pWRuT=~X(FD9C}3Qqe?k_+ zpQrKs*(1j^%jj?#e`Mi|GtFdeWoKU|18s)?9lhVGqAeQneN_+T^2zth9(iLt&1W!{ z!i57@vk!qDFUG>{FAvtHO=Dz@3$c^Nr=t?DTKX z0LfFlz`19|JV92t2G*PV8RuHhd-cY2CN#u#SFzFkM=rNFGW;H+UU*eBav#&|lkvx- z>$X@vtYtabTNSHcFZ@l)IhsdPO!~F$ z_aaKEKcKSsw*?x@RADW6SoUaeUe8dcA3*V*FWaJ#%4bc9I;7$NE&_tikZUVSV!U}k zU^;4MjwfIqmAeiwsojaPVNx(#p(py4Akp%eDlFVd^Kej^{o#=>Kd)!GlwW#Yhz_%0 z{*Wp!(s9*Dm6y*c*lhS!Zg#R-N2+kW3c-p$b@#OhdsC=)`HJ@`g!()g~j#PUiHqW;oVpKYsL=AUN)!D6rpwn;a)KC&q&&DnEQ1WmF8TYsqjP zorpgUP|&I8@!8A3TYY>xoWJ04zp#QTVsDSX-HZm`GFyj(ED(^?p>E7`8R~nKQFKMTRQPrdC+#cAaq>&j?!+P;%qs{& z;xq0Q68Dt+wBl~NVgFm_^XiShpgH|;;CJ92A-r*9qH zu}6*0f1E2)2l1Y=E!(c_{UF2y_JxJ^s(C>6RBuR0^ya`6X>6~}!O`?zj_xJFTyOpi z`0BPyoyGmlStYtMD9L#SkkDEqF$!jZKRAsr_ta&PHpqt5}21>eaWtj}#> z25|bO_^7w$MeB$bNzO$|V>CE|Du-DY)~0j>5wKhv38m%LHhF^n7P0v*W#*zLFz3N) z<-oysw$+ZLs6#Fkc45M?jN6+H_))fH)LOM&8&Rwq213d)`3=RZI?n{ySF?m?acuLC zco4zoL87PwZz{gLul4p3MYxzl;yzBiy=Uwxcn-!okvnO(dqfPcj8RH#I!MFt@Yq*+ zYb^$oe6|^mkozI=6i0&32Xr(&#=YRz^B+@V_*xD@!vQgwW6z>~818bB;GRHswh41C z=IFcnyHGcjBzLMGU{0@NviEkmibEL15mQ*_Jj7SDfCu&%o+h1iSg-eI%rMvY2o3Ej zjmeCEvy)L@w1fmyl_D-U5tBp;POUK_XzbVQYpv}D=Wt*~1B$dH%OIpQp-iDvHDlr4 z8~3)3JMF~n1x*_MIpTh;B>d`P1SCmL{F>Jtq5HuZ~Yw$t@D zon{B(2JG>Zyh*L|ly1>nCaNp7V3~whEUbPgWW$l+{@}YI_4ol$$g<(f1aPjYSe|62Zjjw}ZsE53nbBi1IY=3wtdvQ3J>Z}|2YrGr z!`@XDFG;vT7Z^EBn$u$gpAw+U zWi{5q25S}U3QEi8!J{g4o$0$H-^*l$k{Nz)7Wu?ny_N}Efpd8UkS``_X;1kFuKTAk zQ8wbvUp)=)CI`gkM$2ddTU--fAAe3sEU^&Wharq>SzY|%ccP5f*_3u~Hw z0^_X#D`w43m_PxGyenlOnr&0rBgNMMCz?7=VYt#$_U5YR*`dCqig#YCm!Djl1Cu$a z#kI56p`yiwP`3x%r;G_%R)cP&PksUw7bC7{c`8As!w1Lbz2klNWlc7n7x-hk#r7TP zro$=bLyq~`$)189>*%F0w*S*4%xGwx-NOvX68Vd?ZUN=tw+vD#NK%p9T}-l%y8Obe8U>s18s5_ z?C`xV-n$pKuF%3VC0WAyH-ZW3Wk#+*1UlqG=^{cLI={f--08S0@zyy9U&S2`&GrwC zM%!0+F|JpopBBDBf=`Fm^w!bXoRDVD$GaUfg1fq;*6e*nBZRvn61}w8aq>ow<~Rc0 z?;vp&l7FHJ+5L}Y_Xs0=vvmwF?FE4cAq*amb#<02J|J!c9|${>+JVx*FyL(|ts9t| z^~QWjo7#%^Nuj}yn*qh1{UA;Qpd+Z!T>8xo*?0$5zg0_72g^CX4Fb!Zg~>El;#DI# zHjq+L*ceoKWB2;(U_nr1n|Ke=hVYco^^T z;-ed#8SO20;bHwVE&OCs16*r+U`>hZ+f_!g4YYN*sn69&yp8zfoBCYT{Y=DJfih7R z+mO1FXJ*kDUh1r?CAeFncLuNOxNQBBdIrJdaHFZ6tQF9r?-x>`+~dg`jZL-0jXB$7 zf@dS>4T`_vW{wyyy{mD?{Hhb0g}fF2wg^4;iTn7+CU)vgMrMH1PxIfm%?=Lh{QF|s zTMEDr=@hKi^z`A&4q}f}q(KTd5vH}(gU;Gkol~BtZfI^C@y6L_esvTe6n#g5XO&0^ zVo<-R7t$b5wPbfBH%-awi&LXQ`kYM1=g3|W%{qE!ikDKBL^+myy(&((nE$&$BJs zv3n}?4CONixK^esL2ml`{0nVk&x0bmGCja`%Ci?Un9lbUbt~P)%tMJdaWvC!e=i-% zgKk187_G@7z)F{#@+RM(wT=B$5|;;9P-aGZl0nG5!`6u1S#bQBL{NBa?WEHA?n@Yx z#AKw#pkAdH>GO~;eFSzgTJcWk8Q&8@n#LH1^8b^5MgK{^yj0WKypjVJ>_4;D%2vDa zi7gcRXmjQN5jK2+$O24yqtmTSC{sXFGsSdK5Qzz?i0jC%?Ie&|ejEnvS5!@2X zc}kypem<>v<^N&qt>fwnf<(;_+}$05dvKQ!Ah^4`yK8Xg26uOYySux~#ogt?#ceb1 zy_uce{q5WR|43C=o$l(c`s(OzN4&q7jIznR6?9U}Y9+%p%K&Hon!i~mV2d*RukCLO zYM?+B#J>ZcIa2R>ja9RoO`V zEbC3>+;}H_X<#GL^?DZx1n&4b*(&$Ic;c$UR3j0|ap!?zRfIS!S9fZV#bJqa5Q|PP z*E~gC3o5&F`<`O*aV|Q=uGpcBOD27WQrGuCSC!M{YHCg<{NmWAF{WBxc01W~}0^8}RV@?j0pgo{27%d+@!nA){SkAm)r2zd{&EbeOB&W4HI;A@nEv{$! z2^UBTR3GB}$W&*TqUd3RSDyU{LGKliPb--X#i8LFQSdoYIF%?vqnwLWilM#Ay+WQ}kc{zNJVPetGrqzN+H6B%C|{nHAwb zLb}=w&tgp+pxNt8t4^k+S>A1qK6oUQ_Wj{W>q8~9|6J=n8Nc%K@|J1T=yS&H{2@2S z-1>NrR|t?N_SvkWj&qOAn`WJTJjyPuAQ$HJyRvizv&OjhDRdSb5SgRX{|~3Ta)k;y zLHeo2dr49hewo2z{zWwrVovXq=R9p7(vDA*+*vIsR)$m_MO&;TQ@;d{MW*EgKaqcWO<5Y6a`0{-+!8SXPXdqNHq(9Yg%}4m}TI zLH}3IrngFhjD-c&?R+_OZ?RmZ|BK(>IqbLpZz3nK_mlN&Jp}Mh67Dlx6hjO5e{vN6 zdyXeCgR*z))+C_+i=NAcIKqF`F#hilAjja|enB~0*t zS;H~*3!zS7VWA#o1m1rW)H>t~yU6y{vHHWV=)KTCH}+y0_44wGp0c} zFqR4;k)HqUk^fDU|MHXnsazTPSJS|f&ws=9V->3Hzv=Z~QvTm=K!a2MZgkhkyo7HLgTevU&E z@w=2~(Ah{lSQvsWM$5FS@tdGe=~DAJwNrN~4NwwC zw~#6FR+1=MYC}q!AGgUmKD$kE5GTzWHVy7yv>V2L7xar+y1i7SrODAU(~GB6YT%eaGJR{xb$a?cXWXt?r3~IFO%t8KOM*v z^|eDLH^g$Z#td$H;z4Ie2`>SOW2TQ9U7&%ol|5|<7=$QJHLAJROgAP-FX;KK5_*VM zfsy!9U6q)a7#mvW@6-kzz9eI%ENd^a!PPMfIQ;o;)PT@7nSJ@@=Az#d^GO=ScY0&S zyEqxbZ}?XafGU_QVVAGCDh(eo7aK`PGG1)%7lP*hL%`etUKKCfdVCmW7EKb&_sNN`o(9gY**{zbeVEoYh`mu2nw4gMRqnoC19TF*!K zG0WHjh|63nAaLFuvo)hLJkYD8B?Nouwnr^V)0 z-w^me*~9o}v7;IUJh0(ZuOUmim!jD2-MVLWn#*`xt&;eH=4doKJ;{ZhPuOkwJ%KnL zmk0i`xeaKq54nf?Hp9;*X`nU9G(iXEIsd@Tk?A!{J+FWM!?Yf>@3XQ$01zJP^lGs5 z%?UiXJFOO1Md8LVdFfzRdZCeBUS`UQWKS`b{_=;#T!nXp1BNoM17dBUu?aJ{rafUJBO|c`F2i=chh}vmbA4Tm zU+IxfSMc|Tg`+y!J%%%d8B+@tvz)$~grN?v!jf=~3x)q@FMz&39qqf3+~x(h5vXrM z*FTsYhTBz|U3F4s#B--NL11=;Jjvq@R=-_uoefY^kKt?x4QOIx$~Q}XtDPv=+ieIE zAQW_!eLXyRm}%EoEpRp8nqt>CPP#2xYVWZ-H?}`lJVREwnsOm6e(31O^+FRTVLxTN zob07~cQsW`S+~1*xek6@$P5@rWa*A#f{jyGDeQ@x)XWI9a`^m$s>X~wmtXM&tW$HBIPQr#dbUM~rsr=VS zEmATw28LOq_(4>y59h>{&yztd=@UUuOU$ng1!ue=!<5Z}JezT_cOnd45QVaRan>gqK~WB#(qU&)Y2bsdysJ@1C>xSQMj z@5=L#SA4d@Igt^cImX{hdJN&7fCtmUmMxZj0tg&dB7XH{8{A0IwF*Fd9 z;pHOWaD^*+u;W5)%5rFTuPsRRML`-btM(j%m);Lln-^^6e7p>}S{im*_>4&!0sR~4 z4K+HI%xXiw&%QLdIfRCuS@FI>zS|w1jw&n!c1`o+H<^xcmA+mI*2UoJ&ep zR#8=2ld@B*CZ!(lnVYh-AdSqEK9A4RK`?K44rM5E)tN{RPl!b?0 zjF2z0z<2jm-{k0Rpc_M?LxJHYn~N&zTxfCK-Ts||4c$}XJako;DqCt}FDMFevB;eU zjqdH=A0GT_X-GcXKsYB>Z{XX9e2`S%2sxL~s7bXhWCc4;hLz((J>mI5o#wCv0id(I z$9Zde!u5h4Ff*@7Ytwhu1p#yRcsU}arEz=*i8$_d=u1@1G3%6)q;MAQ#zDgFe=G3& zT=f2z@1)xMSZhxImm zX*+Cic?xax-hIBNL#EJ?X`TO(!hhYH;8Ez7LwhK6cN`?l>M&)^k@Wx-l!Sf10F#nk z`i%iHD$EJ4s9Neur-Ge(?zBRfIXa37cujNLbiv zdH@LT7O!f-aFi{9VB-6i-ND3-;ZmB<8`%rb?o1_JD_dasWlocUQmGGcM6}pa%Zo?) zsyn%M;QDHZ{Sy{*VVO7OTe)Q2t>K+x+cbY1 zCCr({^F~-s>cLtxWo+cIwhlk_(*YmL4CyBM_?G6JlAe;zvHbTcB?EaEyYhh4W1$PL z(pF2duF31 zdjL*YGk&N<{JgF~rVBi(5STS%`wl9lDgZhEgWhtK?EQRlhRwf!K(p47WG_gKM<*#d z{8JEC0XZdiw{ypV8+krCIWHzhA^1m?Hy*;x!+DL#j>+|YXm}U}_u&^30%7R$_J`g- z>T^%K=QU`+2O&mZ5Bf%}Qdav(Puq@beWW6uqo@Ux-2nhs!LJ3+3=R-kJI>BIxA{)F zLdsrW;FRMtzzk35oTP4?v59g?%t^Q7oYu!Lik=N8qqh-=*Td)5OBPGvH;zR%9o5@oI-d^7;7p zWb2+={B@kEHv=|YX8F|Q<_riEzi8I*Oo~sO$G{vC4@Q8$-S4Q2mUauV;hEZ}KQm;T z^Yr?Qj<+NEfLBqdP6$s}7=?gfs8oSYfTc(ti?rGCn7lWJA1^SeSS@N)jzg~MpekL@ zt@O^RC|P-17e}l*GEuHy_fl2rUR+>f_y zC2q`#>Na%?tuQJzf$)G>kllOepu*672!K@V>w84bQCp?l`r0t~@DSXohOCn;mtmpc zqy(|1stVUArWHuLBdakz2TW0g5QV#Kc_2-yrC?gnn>pSQhyeFD1jkDvKP{~hCU z?|Zjlw9jLtl`BCn{Sw)>ud;OH+9$fymFxD5rLRFSik};0<}jL^&1rQ%qpfE`Kbh6G zo{aeyKgC%Rlg3qoqj?;6;9PB&WQil}^{&LS(?nP^Zg2$ANkx$}NL0C)^g@ev3(@7X zcZxAzomSg1Ia$Ab^|-%^6=~9|YJim1$O^seco-1L&TB5hgC}m!S1aTjmF@_Eghd@F zKoRju4~$9Gn=6t>n*X(O06wp^{8vFNvU5ooBjoow|D{;uXvt-@M>xI49wvNl$Jj7- z;!M_TwZV+?`&|^RNaXS_z1ad$#?`;!uMZa@+BrD%EZ$$>D}(jBIw&5`ei89x#*zoW z40H&fp08Yp826Bu5!wrv|4HBOUD6HHx(+~56Njo!O%hdzt#MfoXLQW$>QxA0vFY^`xnrV0$jKW6p#z;Gr0_@XVY$?7pjpTzL4l#m)t z5-hp!!x^jl<$!-f_>z>Pm%)g!I}Ek^1zVw;0~uC*dN^6xAqo2+K~oUudJz=UAgL&E zc!`M?CrPa!Q41XEHD@y(iSpu6$?F~bg&FVl!Ma?jj|z!D>N+HiMC65dE6k|aS7p#iqKaagH-e4-y38StIHVCAiMOSI|C>7mh7Q*cyvSNS#JYo0 z(tmp$zRhySN5RJepY@X2_I@>kC@Pm@@~#l|lNc(vs%=Qr?G-`M>5&;(xF(!d>8~;iTW8%~Fb_Cp>PDyd3 zf+7~dPoI5ov2VrS;uAJg4(}F+zH>>OWcTSM22~P1sDG~x3BUT07xhAc+sVYqXmO@r z!NYz}Ecsyn)4H5RLh0Sjwc7MVZ&46=;<{fh0$ePb;$DMGn2dKvCbzmTrkLf2j)=3c zhd|tsj}RsPEq1}Qw64vMFl7&%j`-GXWbCjZTnXD*J|o=dhP`|(2yKut=~*7cy7vK# zZZh7>EnGbuF_J6NAVtdfvCA*+eggP-i00y&P8PKAu<3x!s!uOn62y%Tupy&CqE*@V#Vu;0Uyp!F0 zo0<-E%%Y=qzD!bD+JKIhYjJZ3erAzKzPdgz6q8^c+n5>jN}ZJ-0s`Hq^fsC6)f}SJ z?#JSch0*a<@a!yPNDlR|)6{ytP9`-EXhhwV!I(8qhwvaij$dAP*QC7WeW2-%QH=q7 z5f{7ac}pSdnibma#4jLdU%Sx0MN5xX%uA>FbZ(6`_ai*+2zjalrMIj*yVmJcSC_GI zXD_HGK7}LU%vI*C&WqBz=@MX+O=xu9j69o;1(yfi)js7@2w1_f-E@K~grV-sWBNgh zUsYparrdEWDJz>KcRjG4y7#zgaSD-nlkemS4o1z-X@^SBaE!TJjS`lHl313!qrP|C zJ<$3tLX)rc7sZlLDVL?z3s&W|Bpg2WQVJQ9i_suFtm|4rYK_<1x1O(Fq&A+HHAYZX z$q5?v$Is{!#*4`~G7;zdW7JdGy1 zFwv^pBGPqOc1RaUb}(PT2bY@eMQAhf1d3H&>%+w^j&bhy**f0|kN;(^(u5*4pBZAC zR-($L&e5>8h*0J6LPd&G?(V9HBR9SZGO^+m9{+irWhd`H%wp+ojxr8%84e}pXNVskDfg<3TEC?rL!z@U*}ZCPX6 zXWq9_BOIp;=pU|rQ~P3n|1@rD&+7wyw5R;Neb!ja5Q-!R3@28G>CPQseD3oGTLi4XFT@k;`mrp z9sznRXwl#@p=t6t5~DC?jo~T`c{+M;XAVCxEb5-la%HVqm z$jJ_%;IWl8Ou#;>dYhO{lx*H0Bj&Zhcd?djJ91PK2C2XZ0VmrrZ950-SP*0HNqK~w2-HVibMgq*Bv|YC%-KG6~;~UA=LD( z`I?agPZ$TnUE)XjW2`Q>-@A~IZU><^-!w(uF<#~8k%8vZvoL7uVjG|rW_H3z#&&9Wkutoxa(7>>fr>|r! zZ>Pc~bwugyZaEBwXgczf|+CSV``zM>#?aiY_squc`oj|o*&j@JWVx}K} zlvq7Kdj%uZ%$MkQ*$=;Xy#^r6#UEfExR%`OFfh8CQ;l)J4dLE;!+R(3hw$L6N$YUx z12_1*>buJQIl8=lw-Z1)DEpI}6J*R+Z~F8U$!t#=Rr4Ydy(X_ zY>iEH{p^_L@stk_KJN)sPK-V#@xmHgD>k(l6V)A|dwQO*0*4@*F2tkj>vd3u*}K`7f>S%34EH_WwAj6#T?KkLATy8OAx-%IRMB<|G3(BR ztK)~jKe`XpClgvG=iz}iON>7rXLjC?Ne7!7#cX~2iQKo?p>w-fF<3B%3FXb_JoST4 zy#3hjMikHvbq1e9XS0r-weg9k5@KoeUx`#;hYJk=@lWP=5RGx5VCGk-gcrf+CDVl{ z)OKuh0Z8*6$yTO~v3!NIB@O1U6{u~~Zpb$hSBJu^_vtHt)THbpZ~1rXG(ez6r{>1m z6V~_75<`_RZvT%%nzZi`AEzr$LUQ%L1VA+kAn-e6nLl6iHaESerXMv>wa#<;m?r@< zL_z;kC)u+h`gTcoGy0c`LGinMmMkWRW zJ`?JN4nH_^3POv9O+MpNhf&KCU`Kv$O!#E)9ZEgsdMJ3#f9fc?IEZeY_KCcIUg$v^ z5{)c<$WKnzuNsdfr1P4GxBY@d=0=hOQWqB?H|=u7Lb_*i9Hf11HZkWnpO{P$H4J1j zf9gr^>RRXD%>MQx<6yhat%LvOsEhmUXev|0x+_N1#*VIAr#1+&2B~!=OGMuvTSB3m zD1VE2wZjQp-h~xQ-W7OOYNQCt;K5rHfmm{Fx=l`oyTcjV@ z2hsBe)qJF3{1w(Lz#8FFx8lW9t0~VBU+wz z-1BC*{K7dWW70HUtbq}U320FLbqhHc7e=v<$G&VLH*=3IQQKV1JwuAo%9bzqIyq8h z1fkCF5u#P~nDSf0V<@JOOj42r-nzp#`}5pki5KW*(yG2-RN>*NxkS(7+y&mPNmu;+MMQu-{o z^=^(I)NkVg8ojp|Dr^YVs5P2MCkIKf0d@QSJHoD|uiA1-b9^nSlTs>h6 zlnwcr?qd`kfP)=m=!D*!sU-Ax@i`?|Og4Xc#Nf}tS`qo)$RZ5PF0Vh>lj^@r&IhVH@VoW~Wc>nDZ~{lZ+B1VQJu$-`qZ6K}B)1zHI;~8UOnBI)Fbq zF)gN0y8mP^1L6OCE{Q$@JwHs|)-)&$tNpD;~~hzdmcvk6=%>uu@l7oi}Pnj*BM z(w|(_!{u)nAr>R7RhQ4ALxEjo){p&W8nNMjXMOdmivf2552-&!06$!R!=hZS{?hq)QvloN!`^{#j0AwXsdzXF+&Cr6NCoZl-V8yS04X%M|;^^omC z6d46I+mdRv4|lbQs1I6+G8*NElQkNt&BIU^){%o|8~QVwHcVA?y#^+G!006y=B z6roESR;Ou9M#RFsTG``hQji-2O_N57=WLVVbIToiIuI5@H~CuE#>W=ZFQy%((nYFrT=TgTmL7#@5B@~*rJCKa33|!mzHg$=Waz)Si z;B@6IpWv_|*0k~o(~9qS@LOxP%VXUf+_UG7G!r$PFSxF_q!`x-MuG}xfs>T6j>kBP z-3$j%FuCyfbXQNUQ`e(voGts++aEIJ0{UTu1zzBeSvS6A--CMUjO|F6iHl=CcOTLF65W^D9phZpSOqmt z_7Koe@1VcGe#~k*AuMcvawB*jOUYIqhv+APXAC;g^4A8OV2{m~pnX8QF`-$x#jch; z%SF0bpk(dljm56$erkgibKj5M*H!-~4v7-4wQS*X&v({+8~#`N^*4ml-+RYrD7Kq1 z;}2gp+$WHoKe!yOh^&Px7U>D~##6nrwR~R4)UR1akXtqa$!^UD`n^_by|}4SaNQ;Z za-!nJ++c6Hc5P+Qu3BID;;J~)_{JzyQ8Vz2zPKrtz4T|qIYb8HP|k7BsofbY0w_wS0`ChXJAuRF~h z)xrFsCk9jLkldJls+C5h?4Wj=c)Y!#ZclV|ht-g$i4o)d_T-zmvA!ls=eg0?Enb7^ zzQ89>BqBiwcHvJf{s#%;&yssQuCo_JYF`{(w1y4|8sRseQ&}+50BSvc$pk$(2wPkO}#eICr0%$M}kVdhRZ5Z$%ex+xPwPaYkG4CyGwJ8lFn5 zSDZn9N7i{DcP^S|xhFBk`NI5m;&x#L7;0FH>K`1gF*h{vi#2eGG#&iWH!8G2?|zuG>Jb8kub4I1C1=0{Q~ zguz_p^4xHaW{VfK?zxQPx*Ye;1oXbsM3QQURcp2}_jO8|IMFsAsZTURJi2K5#@P`BkZ)Hsx?}-UI)oO%{BwJ zx%lR}$Nu}%HOugB?#u?D?R=uv@|33Kjn9+usYyf zXZ?J9!>PJIw;mALvXvWdK}tk-?))&=0m@x3F+`NB*kF5S*l^p_Nn@oB&g3Wjh~zeK@v9q~9XXa>TduVF_LK)1CKaUXg4Btg z`@V~^m;;O>tZBpUsP2+2VaL-3)zDn^Cx}_d<_Zx9+V|$_zY!*sYy_u28bt49Z|{a> z<_u8nV`Vg5YJ8o2BU-P;Lj64DC1T(U-d*{S#x(YC(&(ldVQ@MnR@i&6p~?UL=_A{D z@iVEuD$4n<)ot(Obqd8sA;hCz0H=8sZv^ZJ)Lspi(Dw5iZ0q}cpr+8Pp1|Aj)KScn zy6NanWKcjswwlSCzT?8_|PC}00>IU}Jsa&D~+u~mX`LcVAvqDyW zUUtL|4N^xbRZJF{vcr(7H?Weba?1L$ESzY`W0?vMkS0 zxfPPXTN0g9r`QF#sH%jh;tbaC{IR1h4p>OuC#Fci!ryvxqDfSQJWgB+aH<>W!bI7r zK#Yv}ow``&E}^K2w)E-6(Vmg|*cwim-fyv6fSG_^Z_|Z`Z$qSSDuU5h5>kBgR;Lx#g9Be$EFh?I!w8P~T2V;+Wrn|oh zx;;o#2u#9<@uB;q*#SnXyKxmubNE7GEVy$jEl|dJ70&0yNW~`vU#!Dze7ZMec@$5Z zKUUrTkfE{|ClpcCoeF}pPXMDtNAw1@G2BpHGLMKq_STB>CggT4G~7VL9y$dl)_wLu zm_GFALkAauUGrx{3`;nnLdp9Lc&Bm1WAoYx)`Qm`4%wAd4g+Cx+i|xB+qw@p=sU;Q z5pqM%!;%&l zFVtS|eon!(vQhUN2R-yP zoi7eERg18(dS${jvc*NJ44c*Xh2WMaUmqg(#{F;E1#O*4xj%7kGJ`E+!G;>knU<#b zp)>czBR7ZrO}A3~{G_IikPL!(7}(YDcp|$Ej%;g?Adb&78I-juZe?AGRyuTl=ii8M zpl}PZPG8hWILU$buPQd9M65(xw@95V5(gzlo2SYgS)h7E{<@AsBpC=-N8j%fD5Oz` z4A??41(p66OH={;ZVKPHq3%VzQLRU3i@!-0kmZJM4o|3gLK)5nzZZoSIanghHyE1{ z-CGQfLWntiWe%Lf$^nam<|s%8SR{-k`1XR5mgKiZ2Wk(d9QwQ{yphu*AYZoz3e+y2 zu$y3Q>1J#-zvD{AaJ>Q7T0ZuGPS)<9*E!goU@Gc5?pLz8BZ2tjRY+J~MqcN*VKJZ6 zY2`xP%j(qz7uZ6)RZ_>qI^~!Eea#;0t}%Bb5uVo)@Hej_7u=C0U_EVIZoE`P^q;Xk zW4b57PTUdg!6Eni8;~-T1%-jmU2q(DNOKk!3sY{lAyu58j+1!3XH6EFl%%B)Mm85> ztX{6&rF*VW5^5SJ_t3Z<7Uo~BX^3!{EMeb9EU8EK?}sYxp~*y`FE3ZQzkBX9gsn{* z@!s$^>R-DJQW~y<@_MCcJx`j@)cO^T#13;pWlCzJPi<`7L0#spi(9s!$UMjK-_mhR z!IJW#Gg72k0@6(U&G>B9jZV7gSuv3_BJ+9rqbK-rIQI4m0oQsLJi1Y$bonRA*Z^XV z%lMUzNw$J8v%x`Te>_1a9`l*(I6<9#B{lU3GE$iwIKB|Bt1PNl$Ia{(C*4Cf%dPv` zKZxxz)!jPQ6Nv0qF#C9OKt~*#*3+D$)g%FV_&f|Jw5yk>4bd zW!#+E+ADj89ZpZVHUS8EoUxXDAG)LveBNu|7-;inEz>AYP*4$zb{tUX6^iOV9>nF< z3(^wu70d~^Q6KV;BXW3ZdkDDYaa=0B@~HY=FjC8^0TVO~Q3Y-e*fB_S;QocCJDsH`qgokTw1Wvhi(^FD z1+rFB92b_84S){}ftLQv%TEM}Nl*b^IosGuPVu%YSknAy!sWDjH=yLstou_&`=7Od zQbd{2-lsk*_h;;B$~9pP4T(g=U-$!_QEH3wq(}#+ox~PIDmuyASH_BGhZPZ!~Xb&q7FE=diVcJYwcYnl%!z9@WdE^9CfyU^@1tx`wb_2(O>$17*clWz6rV5BJ z{od5ho#6O1i-)V|rcW)2M96zu{;>tL!l6^M2Qz?tMC3Sh<(N(_f%D1w3xh{>^9GuPc{*e%LfsIB`V&7j zW4JB+gV3t8wJQ*BT2@N-BQ=gj6Ita21i#U&#%!v(AuI^J5Ks>5hn|-r4Y~(-_}+}c zw%$cKNg>^m^{1>8eTOvuoQr-mJhig;SH|dZf6YE$-($6^ToiXH@c=w}_ zkjr0S&?o~c2gf~1?x(kE9%IeZAggMv{`K0hbFLxt2J=S zL=v7_kmCx=@IH&ohjCH8^{R8>R&RHEF&}`UUAW0~EyLFd}*xp)1|K0QG{bEqrHrZ~E6 zWYhRv;S{Lhs)!U!QAfYUCB4_#Mg_y{O8g5o2we{4M!oh8ZuQ>Vu2;B~ctbJJ=K^8~ zC4?@1*7nKg{@Cnhxb`KOz%>Xx-p)@r@Ng*u=Zk$8(qRCdYyxVz=+cVkt$Pz&04)xYH?$T5!2`&;0!W3Y@j2wM-Ddw2xDN>sFn6K@1S8L}Epr-(GuVa;V7eIM&jd zqdbFju5Ow`Eq~B<=c^3d{6SgeuZzR|@UjT0;!i-#0hFq$w0w2>AtpWY&`q#l#1~AW z%%F)N%7fVIpQR|qpSvn)(sISfSm3rW8pq#}BK%XlSxj~qWJM}=>d~ml1@647QTCc{ zjo5Y{WT1YD`ZK)YsLJt|#&TdpZhJ4Ldm9wPx^}2sjXN-%ZN)V>n%nz+JOwfyVQEXH zR*#X|ju%mzt5RoZmXdW;!tZe$zK-V9;NeB9=wqVM*B8LVuQ9n zJipPCz@m^8JO{>V_IL@Cv|q!B7g_Y*cc{_Q3WdI#>EmVM*oPIGCB?Rz#98{^Ax9LZ zhni>(L(i&FdS`xZ6tFjohwsSHbI!_}%wZ!YiR2xX{v}Rm#Vn+6BVW;{bTFqXml`{}O~ltfshMDhOgqie`=`&ie|n5+LXSGx@jZv6?|huOe_9$ql@<^a!}ue6X}g<{=+jRlg2YNdWEK%iO5?EcK1unV%(%a5l)x1S zhGhL=ZZ+QB`EFpf&V=XJX_modqt^k8If?|$f+9WBUx3u~qxxUxMm=UMN5zu@J}um( zH@ih9^ciYYf@tyMf}lWtn(ZJQv#%Q{qyY%p)}d%}t2V|Ql#w{^@pMhf67^dV%+in= z5_JVKa?A3_{7aF|^f;dt?BQuf9z9uVmcul!HQaWOZ=f^=H|*M3i|hxJ=tT=!n5DJ9Z^oH?~2#EZ~%t= z%j=&!tsa>2$;F0_d*ICg#OV3{iw_k|onM9!JRnLb{R)KAUn#ig5>-YR(dj>c z9Bv9=(TeGe+H?k8!OIsdvBD{HlJu)&xqmbzqp5DDaHUUkLAhrH2ZiqHoO*V1^*Tag zv>a#s(VG4MKVC#7`z2KcpBy(nP@i{i;xC)kuAbj-Vgt$Lc}!0M8AtHM})0A8P8n zC|u!7A*DE_Q}b5otMTjUCdAq+MRxnHdz_~VOkS9^i$Wg`i-_o1u;x@)$y3oG#~x^AckiT~3Mp*jO5!h*!MX-*j%P5q6(eVrVxEv#8&9j9F$e)s2^GgSUQJFLhL;eIei}|}BeCKY&7np&g;)E~ zoT1VZcqbC$9E&I^dL%oda2Ku;P_%sSDqH7gzxsadX!>O^_0{5s4pii~xM55t5^Y_o z9?tB*+P}7FL4`K;tA;{xXgi>#i>W!L9Daic#_nkQ+E z9!JU_*U2>DIp2&+4UQcwby3e>*%1=RCWOMJe@W9Qku@g?`i68k!sfS!f|8in82y@x zwZR0WedWDhE~W;~VOOU-`jp*khVEi6Lk7b#+`%r*Y%TP9mtEp6dIEiiVw5(>i};)Z zLel^dZdg8pC`Qw^9mGWOw)-1^S18BBECc8rHBzIS_|K>%{E`g3MdB`Fb)Q7=?88!UOK0%+uN-WRIx7ArD8y zTYWzpMIS&PZwo%NE#?*d4_7ou2wDI95UQqQ*z3%Lh>TQf{j8spDv3mtyaGcsXd$Tx z$O$uZK~!d!*)U~c3p4~}6+VcvVfzXD3{dS5X+qLKXc3!8o8m}0-GnY!HRR$(-nw_R;x>ua) z7)TUY9=0i#Xk9+)Ku}o!TLj2Ncs$+~-RdUR^k@8{5L3svFnU4mc@h6D+RZfFH~>R(JNPvwR* z^XU4R$D%Yer-%McfIz>Czx2$}uZ8T2h9MTti_%xD4IGn!pYD6B=K5RmaOoo0EH-Oi zH?5PPgSmGeB~u-^f&wfoIh}!L8mBW^WI{>I2m7@u7|<;l%~f^MsEo^*7hUh^cZ92x z4d1VAQu#;5dWikyPA6i7+Tm6KT8osBEEaThv`N@qA&8uA*SxfRSZy_yOve+8K1!@4)f**=d01@3_qj-CP1kTI{`oPZEiMo9_J1SJ7eiLd)E6Etl zZ%V@1et$CKfAiiQIghX-Zt~4ZLc9UZWa1Sv!zyG7)&kFK+K_0}XGV_vXso#DF+{6I zYW*kly~q!{?F6_sa3Z9bxdsm-^%sdM4A-n-A+S??mA~jsWGXGZB8fX2Gs@?Vx4_HE|6vo%}2VKEwB4T%6*uwIM#Q4jrt)UxD&cWB8$GA=$ONsmjzQjsUtrnBq^hwT_13XiLHQ87*<`Hs9$yB77iv!=GUV1GP!Qxs`{-Y z4>5=_LpOCa^0KtA1wYuyUtC&H*twQA%EiswqI@1P;a~7wOhUqE~ z*?zI@3borI=LDR)wDOd3W5hFmTmaj#ETkm;+~}4ME`K<}L3^MW=4$ZTIATQSgdBLr z0-l%jNgmE}c#D@Z6KM((f@^)@ISqMlQWk{Xx4NWx%h^_ZTf(&2?aFAk6zqI5fJTIo z(wBYvudlT=zj5w%cz|hDtXT_rgr~Bx|`hwTHpThdE9CNhv9q4|waWyj$ z>> z3ipzU1>OG0RDhZWcSSFN%G=DGf`K7XOjp=i=0Ti;g%S)#$$J;eU}8`n*JvEUw3X@3 z`NwZKzFIAxohOGoJ}+quOr+!1{U3b2V|Zp!uqN8EZL4G3Nyp9?+v((s*&W-qZFFqg zwr$(KnK}2&%$YlLe{QV3>Zw{)Ywf~Yis7>3djt<>kF#8(ZKeNyd_51Hu^Ac>pF`s> zx8qXIfQ6#aNkAFz$9|aBVRKA3onXk#8P!J9@{NTjp4Pa1S}5~<`=APQ+Hl4W#|KU* z7~ygFA;D_h9op5OPY67i0H9H_QPdsJqrVhleU83zHEdKF_7p^&tbuN&U%O6@* zW_98Nd9xWq1o+}ERL}C1^M7tVj@J0z@e(?!W$Nl=wl7Z#S6kg^wWyWQagUBQWgU6q zjDoJY$wQ-LTVG)V@cR47iRro#cpI$`AOTC1eS-bZr)Hl8xBI=(Rg)nhEK^Uy{w+8T zAkT%nZ^o`1s>y~QuLus-4u|`SR>R8Rgx?v$L%DmS_!M+(=)tZ9U2#tyY>OE^MH|7g z$GkW5BO}H`C9+FFej-rj{gU=O=*lxm5+2Vg;XEINHx~ zds73^WA*|<6MslB1_&0U;t@L z47%fkQdgEcY`K@#J*T6ckvzXH`0$yszGHxciklAuuGl=k;Tw~$^lir^Q&YAX& zs5m`)lvl1gUy-bMN{6+_mv0(_O}=$P%Uj|~Gru;$Ve7BoT^elr+qt0Jj5Fg4uD2(U zAxO3Zv+Ly|KIEaS;9{3Y1Ge?-W)uyuYd}A-$#)O!B_#Kj#~O$#E_sLyZ?_pr`Sk!% zB;Py;{-mP^9^Lh}tBTLKcaU&Ud_9^B$E`l<1RqAZTb02C4G?%hhm_0mGbp2u2mZo# zaHx%)aQzGP);xj1bTx@QC4Xs@Y)q!{xPEe$-T8LQQg@v*!?-*YKAH7aKm-Oa?xIe9 z+{$wf*NarWVQhL`Xj-`*0iOTNIB_rz0@v2+FNp!fh~m=qScj9ZsDCeXu|#0sPW>ei z*>;LNYt%dcTKTVV@7YfT#Fh*T605x9x8^j%-#(XdQiSb?`S^0;g9YKejPb-tr>Iay>BGC+%$EG1twyPFRuWmCYck{&6cqI z^l=lsJ*sqqb^ah65B_82vLhzCIa%RS*7L~^oEVl5729Ff8$?U!g+Pk#u(JW$Ey`Z^ zbAGvk56-FxF)uRe5~pI}5iy<{4?EZ7*iY$;t*O+RxsMTn%o`*zaX}*za>aaS<{Ld> z;$lAC3w?)ClxDMJtq)bVYGIyeILH;x%YzLHC53j$)y8w35c0%z7b&>&&9f z7wa#WWw6GVC)^CGv-V2qcJ6;Qp79&tQbX+4w=dRKFj~Y^8wGeg z<#7jU>Q4-8aZDWi7RWT^3#tEOfx~OKue!9ie1Gz6u_GQ)>^U;!in9HBaOYB!%Luh2 zHA_(-87CLne6WT{{BcVM0q$LR8>Yy^z}|I$;z+LXVPl(1ZwJe>ZXQjiM_8k9`xq(N zqq0i#=JBX=zm4#uu5S-vI>T_OWlz`337xF#Rp@ZWA58?LgxK4%?dp|*CK6|oS|T)v zJ2=_*|0Huap1g1ReTb7<&N}EN9i9(;e-<11vq|pxDucb<>cS0?*bk9#Z0Bb~sxYMb zgOlzd=%tq`(OTG1vZqLD1QCTkN8(V$`5il36k2BF+4U_gUWw^OKz#-?U)Z6X;gcCU z#$>NHpES9Sk(M`n38P(RpJqC}5_ z%kmC~kyF96bVHEx zi($XtE32F++2K1~=7-=WlnID>MKmb)MceZu-1R`0R50>af6;fX!)N)P70sjB)42_I zxNPgmclb}A*Lt-zE8I)YoDwnumlG!Ynx!~dUjs^T6$NQuJiBz0SBZpSPr>2*?_-;l1!kDEy1nm!z2EbYVoK4Zdn-St(jHBPI^?3Q&LDzF<5CLtrbpHJ zkC2<=@zjSDK|n&vw8wGipSHAo257{mp`->lZu!>kc(^HnkDwcHKiZ*EClB6arjm&T zf2VXYIn>F`_g~ZMI;KU8Sbk(jHNP#hC11@gQo$ zca6y@w(={6fnf@jl_KdygTVpl+418`;|(Dg6DeYMm!5f9CdU`yY%wQoiXBeiAp3qd zuua|YwgkQaJcyR?o&T>36uhGSx+uo;o55|!$Ma!d6O%SwPTG15|8G#YaGA>Eg2#w+ zm1iMG=rXLz*w1WF13gK-ze8m0dwot_msE1%DzzK!EvkNFLk~T@U!CDq8|&LW_D`#0 zmB|#Mt1UuC+{rOiBSaON@H@E|NEL7H4{MYx=`Q#^=O?goskJ{>%$S7wbU$Mw8 zqCBoo&NHwrV)g9p=5enRs}HXBM+jl_|Eec}P{+tRze=S0NvG||fn%2?C=jce!m>+s zXlI4YP^Zp_TDWaQq&|~WIe0#0T1#*5B`TzIRg+AbhJ|p0TpeJ{Pl;}QH8us@Da2A6 zb9KI~W`^GFZws&%F4Uyp3np?uu(b8SxKKzh4qb{m1oX>9^a;*CTSV(0b!QQY#kGc^ zo-f<~Ft5+{PIET;P6p_IFk}H>UkYn$FmTG58_@%QL}7XO157=-50Cv5ux-k5YQ7Po z2RLPtjaM%b)|Vraht3Du7irmWjDr)5R+5Rv=J-F^q}UyFY&nFS?+Mq5!jmQrsI`cr zDAea`*bA3_C1iaf5&^sc!qHOW;@Qydpc+^KPtZO80<(RA_B$71b2j-DJ*@p;Co|gD zGr<8nC&52gylMaHKT2^dZu)h`i*2PH%j8psyES|n%;sGG&|Bpt8pE3JUK0d2E=G)d zMj#Z(I-3-GHo(QIx09HRktyJRU8vW@OW{E;RctSJ8b|fp&ayhAxFbVfQfASvML*fhS`Ot8>9-xmFj4oY~*5`KH zEp)k^YRap>HhJIak!n6`gtEK1A_^vA98K@qb+^%StQbTH61?uD%q`d#F67wBdc6yG z**+0;+ECfX_((uy@_^p20Wu#x|2ai&LrW>i@a59ZC6l4NvHK$PMrM zg)>R*d9$sr*EbC=2InytJh!~{ z=K`46##7d3he7Y{wKrJ!kec!(tvYN_6koTtn*bk$oF50U|3bu4aM895HI;9M+?RH4 z^r_h7+Rv4yz2XY;fn5S6&&NyHY#uzW%0q4Ggagn?L!7oAwynnsDMrWaR2WnIe;~4U zzaj9^y}pi`e!D4V2S*T%p^2w6y~ME%RAs)*a^nrjhCAmQENC_|KCV~lQP3aB*t$Z$ zJ-tIJOCZIb1YalI^mYBLya>}OfCW50Nn^5X7Pdc~MKUJu#bOnWUco(}C9&gplWt`h zxTDz29whs6mXA8OHM88u7VGyIKM6#Te3)L-{!r(C#diywJ1vk|L|Sc#Q72MQA&v;Cp;4j=8&u zNB4;qDL~GX0;U%8K~Vdx_gxQleZWk;pHO>Td+@Sw3(6IJIQ`Z88OF!_3Lo?U+>+xw z=@i_Z&45<2YMY{7Yl8O9=YLJj$S)4&F}yi1yScsRcKO^a`|Tzn`1pK4H36U=ul9Ix zXh8TfyRiWlGs^36&24Tb%Q)|(QSTaI?6~mhmUOiZmvzzI9FfZ6+hVlMj4G6YhiA&! z>qrxD)rSUPvc#wGz*whLJgJ=?@WPPfQGofD#R!E#7^r7?Gj5UtaC7~ z#?%)I&W*3NGS*T&WN;b<1TM+rnbTs85Aj@n0)J9YLu%qN3fc8le5Yk7$01fG4snRK z@S5K`_p7^F1>H1AxPmL}Fh(W*3DSoG_xgb(aj$^TW79%aWZEh}=X&#NTZoWH5xX=M zSPil|RK>bT|Go?6QUn+rE{DFXbx^Y0kjL--BpF>%BSahwzD@jdjlV`X*zv30g@tzj~<(8X|2T2G}VD`eruSrQ50@kL5mj2u&nm`0WLEGQJ7XhDwKrDVJDliFq^NC?XxUdPK@Hm}U{?aWTX|tIqi$`AP7+sNA+!8$gWKveFMp&Kq3XFg8Gvc!y4l9p!?FH)Kck&KyL7f!twi3X zl~1K)@9UfEQ$bpWWxhDkH*Pv2ZhsiRu$aGdYn)bzjoC5+-&tKI=J>6{TTgC@J<55-WZ(f*ceXiP*5F!^pEuDzyTyPJ z^PV5S*-{fUK&p-_N;O9pBRg}U-^U<#EFVj{Gn4R)Vvnfw)YtLS+^haZ545S!o*IC> z2jkP-zTC0D`R%qSnmN^!!WKqqW6R#XlqYh~ZARa$$cpM;gy5Tlyt}Hc0d1Ha`IDv} z5s-d80Nx}bJ46Udsa-vx z|21h>gJA=g)K^;zA^OanBLco=$$ONL{KIU?p2eaJ{$fxa4Bl=|c2Kl~mEhO_UA-xs z8A0W)lL_EkX9t;(K?Sg078={+GGXO83#?$S(q@YAAt*+9Nf~g|(!npD z8*FdBiaKqrVE$!b+<`+7n-S<9&*}=p{9%TMaPm*32t0YMBMBfixD91_W2ktfQI(fh{ z0^+*{TTYvAEurd>&!lfQ6O>lkzz8#E7Uc65G6|dITFHX7r^Bwde`MC#R3g~Mf{y@} z0N?d=pHkg=(vL5l?Gy7qh&pzNA(>`tt(I7Pv;;YmApdQ`KZwWQbmTa0Q;zw5H5}#& z0N+N`2ng)|^I3Ht2v!>0n?BD&|NIv!6u)gI7*-tESAItZoRlA;%r`Ore#@2YVFk%qn+^I;r z`m6X;k1Owwq#y!fNJnV)?twR`t@dTHWH>!f`A7N5N6W0aoU?jYn_6_Fj$=O`oVd2f zAB;peY=D2s;R31uo%l^Vh(=DnH`n1W^=9j;k_r-Mh@`)`AKL$4zWq|?nqJ^GS2y@e zJ{fIoV=4C)jnGwjtrBT07k+Ac^`cy~Kq$9ybH&hAZpgd4_0qd|ctAyD-G1lV6l~jO z2U>k=w&%{fwYCn%pJCLutGltmziq^596L>D;BMZ!x1~CmL5rvxxJ8ihB{`tJwBc3s(aTM#RXBl?VD3Vj+6 zF%aR~WNIt?>2lon*={65)J_h{x0-K`+UAz73jPq~B8JtVKhK69)ZeIhvfz<${b%0_ryW>Yq~68&IH%?X>U>g# zpt41sq^5rXo6{CmPtQ@heIZgKZ^9Tz|5aJk@C~mri-Bn7YCCaPS>TK=0k@{u4u?@R zaaAlIPL}nqadM70)rPi&!ssPyNF%p;dm`W^PDR56I^FJsqXUJ{12JnJz;N{O#gYfn zM=yY1yXVndS#;rMgQz$I<{g1QjajL+Ehx_SH{(Cm=D)2%-)wTIdga(`a$g=r9w;lj zZKK7vaF{hnYOMJ(*7bDUQ{P683dnlN*+f-Y=e<8cVZu%9DiWpmfw~F|r`@vn&)hff zN21}SK347T-nny-Cs-3Q*YmAar}Cz&^@|7j2xrjoxoOa8>SZO5!s9KPLrlRMzO#ai z@KE*ew(5d(EeswF0v2>{&>BP2MI6PoL6(Ruzib=pI(~IC{=l~6$fO;fJZ@Kb$zb&Q zvgDh@@aF$7%l&_-k{}qO8J7H^GiTb?_4Tz+U3&5wkrtlT+R&$40*SqW-_G)(2ZJHH z<#ZUi89h=&8Q#tD`BcJq%HX~A*FZ-xR-R3y4-CfXCy6uf=+#xI%Z~G)J<2?Z9@Y=)px1xRpk58%L{Dl~D3`5)ZjX~)w;hpvAhUqb5wEbn-$1QXk zGn@tlv7(fJD6d+`TU>Dx@C4n#JMeqWBPx>r(*ac-X{+wp0R>5F7DD7v+dkb~EdO1E zSJZ$pwXW*~-+|0l$~6C3X3X#p$rzhVdyw6W8uBgCMq9Mu2DoE>3W4!VBm1%PQted9 zrzA5Q_CR5KlNV@>LM(`FL8oCaBr?Rp5lkC1j;zvbO0;Hc!FO|BJ4f-#-07SeBTwoi zu1z`OUA=9Cv56Fvm=*iK+Oq#4wl7Am96HItO~HTsx%zxm`ZmrtcFfQ2P+Yui%|2L& zX&bfPm293GmBtZejC+0PBSs@u7-l!-pU_>rg#1^bO#V!ru1L^Ak84t90*Xlf*;ub0 zS%~V!DPJW9_wTy!!W0lAg4w^P5KpXKMftKq#??_vP7!`i9S5e!P+M`dR_lv))AmA4 z<`NETu3*LPc`Ojmu^yg)|87qY+g9|V=-NIrig`1veUEyU1N`oke%8YJwca%r!1}?5 zx*E#SiL!TNEH8{J!n@N~P{Ye<^w{I3 zDOtcw2id3!$+Q}7wz#mja7AzY@=g1W?$TKb`uL#P6I>oftltD=V=98W{O$}s#Oy^d z;ZF8808lA7`XRI+K0zT<^S_E0ClUhu)slqM4X8aFD0M&b+H^q2J5t7wM=F zxdW6%JO7Z&tM9J)-zncN%~EeN{=8hQe)!%s|5xkxKQ_(xdG4Gh)_xYoT43u&>nKdaNODk?3bDltF%5`itR_2{J1|vQS$32j zUHC-xSvJDfHPgKX2A2~q=UL4d2pFK*ENo5vWQUVX_#Zjo7wv*IHfuQN9}9}cpGind zOq|b1_wi|?2QoAfz6_EsT(H5mt3h*?r*@{=WNymO>h}{A(7H!^00O4(u6}=n?<;nw z^pvc3gWLh${qhe3sTBoseR+gWV!O*%NIUb%KszHnc5&;`{+XdDA-it=5x7qg|Lyg4 zzgaQh$sEHSD$arBttHCK25J=PVKEQZEHdAEHtw8i3D0_oo3kviUs)8nc^}W7TTDkB z+uod5P<1t2%KfDg@}A@(P<&N&`%~myv87Y#quxWwlG7oMljEyM_U6gS*ExZ8HDi5y ze$;{1QsP*_HenL$4{rWFj1M3KZgQO7-#v=cqU583M@WBK!MmQbG4J%vf-UR2%0cT0 zC~L;5>qGnQ)|_X-d6qQe3Vg{qQQ=QZM?k#!qaqHPpdA4Ps#%4Hq^3P@`ShEyK5?;+ zeGy9_w33UpN{3ooqFIGX>rMd2%ZeAc9d`;6tX+= zk{Nktr5I)qvbhek7dco8q~f-&G$!@aeU&YJF`^a3xs1q>0rHeR$Vw`S-%k@>)32rGtz?0GY;3-t*Zy5WK{vi zKU8$j^R6Yi|gbJPg(>?Y+%8qv?(cezF`;#Ccq{$ zU471meBj?%_Lh59yJ@zf>6=3>Y&n0f)2EVYR;Pdc5PRIj1eF_KO8z0u_Ov&Ki9pW8W!}CyMH~n{ zoJimDC86@Alk5YUhgC_DRd>zd)Kvd_;2!da0pBabxPmbLHmbcdXwU^wL;+Oa%pRu{ zb}bzk!_4L}C*=n8!#iQ43k5Mndw1hQ8B@Q&9Gd4>y2WU}vkS4(mZZ=ka7D6R)!f}8 zNB4Ce+GBMTkn#hkxlR!EGBgjF6CAVmq<3sIxu5lzbrH%8j)5%t|8>fJ-~nl=6; z;THWsz~_N{UPGUh{eiq2ob`u!He8DR;2+Y8RW}G&k7TXxuqwco0sJzt0VK&@y3YN4 zJ+rcOst%k8bgVy+c1w1ZbWx4k=(DX6?16h3*WyD(N;*X=jAOe(1i-> z_JqeBc}=AiW_M!-`qOucg&Crwj5Q%{Oo*O`#p%88#iDs%TC-dNJ{SD>JIaXy!qe&8O<2OgRP{2rN%4@c zZwN4?5jq8(iT$5~SgH87ae8vbU#P@8ZclK+UkDv0nZwU&3HmAbSWInaKM^i3>5_Gx zYmiX3 z<-^+OAEXxLY}eoa_qX?dQ}%1JU7wizRi}h#o z6gDC&myp=Ku*@#*48j6Dk+s79s2qlP(&n7Y$Z9?$yl!Os#z6#D{iR2Uxsjl9`bRwY z&+fU*`e5y-e2Sjsm?K}Z1F`xS!lZ%T^z)!jc}Zz@6{^A-R{wP;if6J+~)1UvTan}S5zmq7lo3A&Qau=MVQ@n7XLL4 zT2SZQZneocM|{^oI2>t;zAv>Pka}Iv?Moh=q1;y{f-%TyQhdi-TESgh)f%<@Dg@Zs z9oU<1D6Zp_W~XQt?VVI441O^}bAjG@rBtuH_Lwp7NX@Izv05T;?ppw7$j=PWjRk#SPP!zQ$S>$>Owqm;qcg#KbpQ=$*c72r z#i~*D1X%8E9c#sKg6+F~C4CkwR`d#a2-F%#gbTAf{%e!q;%>ZeFV?Mh^aHEi8Ghg@ zvp2^0qq^b|@M{gnEn^sfAghvHDw&5JWc zxE@J5GwAkgG+ji8?y2&xo;fw@BRFJ&=w*?CZ-rwE5NMW8nptO+-l0&?D0f>fU4bSb zfK6g%@Xu{Gm2R~!g`UdT{o24CyP5_}i7Zj@B7nYrUUg}6*3^pju(O-AD_TZTeUgnd zlN)DMI|6sSpY^X60N>pVDGY0|7U`yFnh#Cvi(Z0$4rZyb36z)7xT|GwIT;S{PnfbJ zHE0wNy*DjWzCZyeqn;?cL#&HvFF3Edf-Er7DU^^aY~^ z@vzSNpZu+w2lO9}$J3@9A-A#5LKs&xXXEKoAu7*3s((fOy_9-(^|+;16lD7Jf=PYd zk(yMP2fzXV=*b|Ut!5)guSa0NLkV0TB|+#(L9FpeirLZ#`e6%>#KPggv;6m)g=8}f*teF4#(B%-D1#lP5 z9X628+{vA)1deG>Cpb<#6-^U+@FG;*FY`6~fA&&!BlUo!<4&KZ{d@Ss4_kPhT7u2L z5%0M@JN+|os<$fB6lT)KI)F1;-2LaB->)DTk^*?z(xFs(bV)?z`p2I_G0X8GpbGT5s`vHE9?4su>L z*RpmJ?=m>(`$)gOs%Cfg4?(lhk*rzpT>R29`b{3p%h`A1N_!5v>D?6?lj{XB!J@lO z10Nwt4w(HbG<0F=2pd29 zLF7DMtK8M8iresa?5qyA(gsZRjZ;C6U>fNk^a|3|UKu|0GF>!mjl4V7xCQ*|9v-OpHKtX*b(M00?gXqcl zEMm8+7wk8X!iBh(TWq$4W$A_`+eyv=B^aPf_ve|6phc3!S-3Xfkv}g&^o!JxWB607 zJ3;;j2dMg;0_ggVRMt>eOpvekTkcjnTO%{jr7m*hXAu!A_DYw6592I(wKXD3gB*D# zYW%LGCM9&Yr2n<^)U~f8`$*q)3zY5b}@hq0c(NVmWtA&Uk@<+rUVYEd8 zLi@@PZvhOj#(OcMEKxfL_Sqp97MgtZ${lKCCAv1M)O9ovPd){n@B_+Dc5j=(P94~6 zF@Zs^O=WGbb?^j(`CHZ^M#C2|LAeWe3-qUEPS8q=AXF4~B5@8+xD5E1i^b{D&q56P z!br2i6+~(-a?d>cT|L>MZtIVkB@Hh<>MU4z7zzLOAmpkY671@h>=VY*G-BnnIsIhf zjO5L*W5aWiFabj%BXDCx)|5VQqGM@McOVan>ODUT!Bzuyhzq7X_$YQ*)q6tKAt!nN zYx0hT)(zV%4dJ4nyE+}IecWsjyo zDKAUIRo5m^t5>!iBT8NMKDi%l*QAEhwFdwwaoT#^4tAHnkXnId35LKLf?zm}*17+S zJ_AC*9@%rG0yX$(T$6Oh3hohN0}%IpG?uo%QLlxI84@2%Y7(y zwB_J*`Zf%Rb*j)|L8&Qj+GxN{{uzjdQg{dQYc#DT7_ao^4>?kY;O@#-%+8f)DMnsf zQu7sdfwticeYv2&?53~I%tY7cYb}>y`X*RC!{?>?Q41_H^F5Ocg`@}&i4Mc zh;4buL0D`4X`YvF;0h-k>~1)QuvYl7HH$+TbN`0D%JDb@ouDd7kS*Zfi!$`yXn7l7 zv#M3&K5wdG&X(0sD#l~UhtT7Nnq0wo9^)i6W||>d2f^U?NEYV=y-I{xj|Wkrwau|< zd>JuViWI#HU30M@-NP|4y!w|NkGeXVTco0g*uq)026wL$3vv?-1yI@ehtdvWqa~?01$<*w;s$T7m^&gd!awI{dBnj32qp zX!vZ`-JE7GhCN$-9e>ED20Zerm)^+atNMqU!MqL4z-x0IUDvOGt?oxJS7HvpW|cvK zsOn6TSMS)d^&NGe)K+JWcEYVPaq8?pM%;5b=2K_Yy=}B$&Cf9Pz8xNA!iB92p*2ew zXdL8zfqobX(>Z}g=0fUn?;LpEaV7{Eiw;)Zv$IfWT;!1M-<0@Ss)o|VrscgTTNLd9 z#rqv25|K6!zeVYP1kwBzze&I|Q={%L4k056CxQ_+8xP0Iha!Rn#~Fhbx?w(`^dH|D zR7jmJz^U-zEV>%)qlvEk*&=B#d%x^k6=Un~#d{MOk(3){Kud{*-poP>H^#%*rnwA* zY&V{=8d~6f_TM8)|J%{}JH+HY0b(MwFDaYX6GKa2VsG+mEDM)Skq(7pP(s{J=3d;O zk~gp`(QH#WoB~WvEP_3VoZ4`Kc0L>gBjr+vq3EIVx^z^+avw9u(bM&5y$yz~#(_Mn6aSL5-_g7p|yYO1IMP z_Cj_SNp;?7h*S^BO@ozWcz1lU{CAD;ywx1(A0kJt*{W0mL;jDvjO6tNJeQdq;cRz5 z&h_`qX)0N^KfCRb%S*s?Ls{!*!Cp;>*w2~ zF3Imlge7^Ht`#@4tmI_C06mOVA-omxNur)qd8$;PrYT1(s~g8vrBGcNZ!eU)3{h8& zuN_J{DrO~w$(?ldS2U#=qF5-UAMezZ6Hg8fM0PUSUvb>YNt)l8e1eo_$PYY5Tszzr41RKZ#ykxtFc5n#pzB)iYIPB8p zWv9?PVFN~_Kar4c?{(SwV53Wm(-clR!Tt2&UO{*-C#L6cqJlHz5^~E9i^*W+jF*G2 zv*Tl@qByCqSjIRoZNWc&vChTq%3mygh-*;q%s&?_8AV@QNBx0@J;Bzzyq=OR^ z`W=C2d4zkW!GG>C`pv$YWsnEu_|;>3Ma{@2D=WnMMZ&Cs5NSSUKHGou_u1FLI_AAP z-N@x0sT7~ltAGDdZam}@dr91x&Ia7niWhdF$Kt|4T=+rS{J=F=@S!4>y`nH|yQcJX zl?(BZy^pmB+BH9^CpqP%Nmm$&C&aK!>o2p*!gNtx~IhQGOLWB06is(_(Efsw`!NDp2O4#h-X=5fzXl z$GEv*Ys{nUU>p-s_5P<@O^!im8J4{V{l(%d!b;Dq-?4F7MyGUT-vQu)G)~una*$*p)akt?L$e5}_>8yj) zTiK-YIH976rUs5XhgVP4{!Vdbw1DjT1CBAs1X5tMq4{${P9%H%SF=PbDWfx-MRHQl zi!*nLmyw{n^;JpX+TETWwA5b_xQ1ID{?+O;t-8na6YfIEHwm6V#tE}k@z$ZsoH+N#gQ$W+f#HblMH`sGbjbHBb@t=6=AMlj6 z0Zrp|BzQeLUmZTmMV%g<2 z=1^289on^p?tr2PF>zHw@VPwMFF%~ARqxZNRv$ODC#1e|+DkP@`xI_I^MX_%YSf z<1XJ_3D^lAh}ssY+rVkI`;r~gW&*s}G1+pu+fwW(yRV@#+cWdhRUugIdyy*(-mMLaZz+i(EXx(%RS4&WJ@@^?A6tt>ZPja<6p%!I9N!*Jo(g-Jm{JMuCB+eRUV>BEb!6LWlUDT`=Hl- z#@|+kJNa>8Pl#lK_34VNkJ$#HRfAZ5sRCshLS&VMICdyBopb!mA8hz`)YKc9=T-iZ zmFwNoD~lcx#>A(H%-0`^#gq-u4VYZoPR`QDS0FWwbi)#q(+}Yg`oem~%8dh*r7(Kj zg2q31b_Uc)Kx)t6pvASI$)6i2&qwUC4+7Ho2Amc=(2ztL9Lm&Ef3 z(F{$9aGbzIF$YDZ+^>sHixh4?h`FQZb6D@iUO>V^uGMR)6glhSPvKfJh=pg)n`>au$%> zqVQK$DUuApn=Y>jQ3I->)XAT)2hZYT)-)lMn^E19DoXCC=;~6w`~HgTj_nK*N$A{@ zUik#;eOAjDq9VYI7vdHnTQ;^vbApZ$J9|b|#Nm5EpIuhKw@OyZ3GGC5xbZrR5UT%) z77;2(XDp^EJ!6S6@Aqsc()3w-d+cG<@(!{Dyu_}>`@2-4QrNLL*d$QgK@hD0A2nRs znRsjEZOei^vo+uZ-HU*v($9K}F!~;v0MF#t2Up|8>X15_IJm*_%dy^mGN-O00fIoB z!nDn_z&{pQ72EW2Zi@EQH??oKG2Knj@_aml6fP?6j zZCGz`m8e9T7`?)*Wx#$<~6#j3@d3ikb{R?9|*qDNFnj zF_5Z~Au^bNP>B7h6|NzS6S)L>O>~v;^7#(%cm4Kp3%0$uBEtf%x~QuVSZOSz#mj9u;w^@Od{Uq=3yF)7!^I7Nm`x{o;6l|NEAMGD0Pt+}N;QB@L> zXbdHMq^_i{uVIw;#0$4ZnB^>Ku{*1f|rZ)to^`-a6a5 z7YOBg+CYG|;>RtzQhM$5>n@L(hY9a}#{+RjpEX0}ygmDYLm`uby$Mh>NXUU1kzOEc zpoTZ=vW|j?A6xz>HT!SP1OHJYhG>%l^9mvK=z)%B^Fl+sQq-vtB5i8o*dXm2xKxR2 zIGo2fM0OmrQ}7wWtvpbx6bj;H!Pjmx+hI*uQ zZ&#UtTB<^dgqmC9daS*Z=s4OUPxGm7;p8FLp~3u<0;*96JOCN?S-f4?Q$rbE_%&Wl z;SGshXZ64n#B?18YwAmXeS_pN8p8EGv^%K-QWuuY?ykpObY)8OxlgQS_q7{RVSnft;d`6wx|ga{8dr5tHuXHpJ(>a}bw*00ZW`L7wB4X)xUMB;dYGE)%e5qg?_n$@ zcPMAcNDeEI&r)fzJrxvb@~35S&B*hOZswVvCyw0mWxUGR^C#pnOsKgP!IUeR4uuVB zVo-u8{`NcM{#7BnXkpT(c`ea*$2lDGs~yaHry`T?z_kPf3mZdm>_Ae)P@jjG@+{M^`PO1FH{GaGO^)7&!U{l7({w<%0(Y5>oVF( zILyL{DhlDo7zv|=l;G2-w!Fj+9ezHoCG!}D?lsc;Rp|Uj?4Uvn@IO%_)r-H;kuF?Da>s_!STg>`QW8kSIGePLyRTafwrCxp~TYQ^;NV58*I|%~+$R7NPO{pZFyc@k8J!#2oT5U{4z) zvzMNWR8LqEiSM06QgI)O$j>ucczBzSL=kq=!7lP9Q$ANBfNH)drCT157?!H*#a$Tm zBP5v!1)8tH;6;$uQFKL$i}v=0Jm^9 z%j6z*loJ4%J4;MRODE)Jji{Bi_2XsY8MJblbR7OVx!~n5f<$sUdLrUK_ZpRQHzt!2 z%_vTSiqAzijdm^sxLbrcEfo&chC;~GMqsX+Cq?bYsFO!3g3@xbRt@8VRS%ZnZX)s9 ztn}P)`BeUvTZ!IxJ^Y^XIj(l;6!BZo5xaK3tk+H*sAX zZrm8Qq^r&Tn=~t7P%_^u4lwj)=T)*E7mtL=^VEV{w5=R*U<@+4k+By*YA;)rSmbL( z+HLH=(Cu!9(1XSq#7L|e2(eXdfYm&(T&<(VIp{cI7wlrJeXUs`?=FGPyuqH>*}RER zo?3A$7O4H*B_~fwrWBm;6G<^snJC9)QA~7{yVIw#WmyPqGtlhDBz70QnkO%_B1OTy zrE17-gw~6m%>@>N=w*FPC?cJ?8?jS*Ftu8lw`U>?iP&H%klSOh@as!!q9*v7{P&t9 zrCras&61c@v9VA{Ji2b^l<36YKmYiX;DhZij4Sfu#T`^y(d^xDf?WdBu^CVS|E|?R zVEauav8+}h&Y8ntF?TAo=<(OHkBf?}e)6DUs#&7*dkYn`F%ygU0DBt8gUZC8C8g3< zRKQ1rqZ)HQ)CWC`N0iB@pMD-BGunmp+SUqO)6y~kcy$ozMgSJZr6dXoxMj9n1vy8R z?xL23R-$m&_7oL~iD(!|bd@CNeSHK*?Tr$KPg^flaPm5s>dw@CrKpP57vz^x!Y(<& z`IRH*R7#YBd@QcEoP|OBnvARdaI zTx_#lfLR#`#bCQVwvOKJp<$71gLe?5+e%np0qNX|YEvenmkf}GUsBhF50=jL}U0vOK?_O6XGFkWvrx+52= zR5a=M{hZ=&vVM&T3Z-o#sTWd)TZ!h~ZcE|K4mGUJV(gq^w458gy;^;qjbt;&&A=fJ z=OX_4cmQc=c9NoA+bHo(1kSS=lcd6X0{eV}gk{=Mp2Tk4a4Bx!m$IWwZUalBh$gAs z+B$ca7;UCv>)DjCwyZaFEST7#<*_?OZnueWGo|F*;*OkH1n$m%_YVKN195`U!+@L< z4SOpxS>yz;MIB=l&JPf0zbtBC`Wi;^wT&ND-jDFIZfZs);gtn31REhZ?FusJCIy$Q zpAu~)h{W!oJ(!ckzt3ozceO7M3;aFj@uE4hLG$9u3+D;Pz~^*deF+$ z3w~iL)Daaztp#5123}{+D79GF9i2sZ6@5GDlC5OamY`V52`MpK7G%!y-)P}gZa!^^ zOk~mqSwlzsOI!1+h-InJRcl#>EZNpq5+?iYor?1%MVIr=#!qv1%hFD5rBka z9ah06IaW0-g!WKRYiOp8QvL|b%3BCQeRQOMjZw&WU5LcEk{`M=@CwsnQbGeM+q!(h z=UU*{Z_V&|4Wca2h-9yY4@mHrwbKOUyYhnm<$Z`-xn)!<0JJCe26>n`@M_R~tOkLl zAmB62Ac(ByOrgk$eqI(Zl4Z$Q^2Z4{QTE+)%&oNgj9GFesEj}dVUsV|d41kR#0cmq zdqAbm!BpI*1bvs4{RaT5D|X(Uk78XZ{;a@C^NA#MlI6W^7Q+q)DJ{t_s?GZmH+$IC z@BBe7bh|*Xxa>QvR(6t|xWqvo5BsLWrVFaJFk5F3%(s2cU7T;xnlN|X9xC+f4kY{2 zS%7vsPJ!0y2O01%BjMzUDarYE6l2gSe zu2aP@^^aro)ttIp#G_W{dz`vXc;~N_R_6IAO_dP|)a>8!01ir%{#koj)e=7eYc7R0Wu9WFSkGaX-6 z8QfFr_`5>ZrS6R{D-Yx-QA@7}y<*pi(c3(8sr&@I+8UWFCaJc$l|y(k$MSeELXX?E z#}9$_K6+rte%1L&OB^D8c8OC8p9gtJPHB{flx6fGKA#p=whR#^)F0(s%N*tfr5L435bkj&kkJ zy5)h_v>A)C&54w{r2>kjEz9xzEMkusl%*L}sqtmYv+n>x8CzMcr6>PAsE4VK)za1~ zOy|i3WP8YVeX=GT?5nZSV7v_p zx(s-C0+@&Vz1rwwoU|Sj!tTw$9Ht|Y;<0}?p3KbusywQGgc$|TJJjfsn?g6NJGfY- zux~JXJO?{NQDEL|$pT$RU%Rva(6jMB--Iw<3q$z~f7@=gSFDvFGgmQMXn~F9mGT*1 z)h&U3y9sOQKXwBM8$kTtjy&`s7`c6VC7jaqE-<#L4e5!O#Hkho< zW>B?i_B{rKUHLF0!Lv*1V?X`i_UWx<2%f8TAnE5~#dV!F!)9Qg%hEGoeU`Pk2l==a zVYW{E+u1jtDgu0!th4HRiln}JaqU)|t!BL1@AEFUA|JXJ=*<0>uAVqU@fqc4ZQ<`% zZo@($17L^p0B^XRfl;Q&Vh65C@{DjZd^Y7UFAuzLBv7LezTYNzg*7&#T}xAcg<#Jm znAImDK9ZqtH3AD+@KbdlWF&&jyxj_J|CC1mn2GE2wabXFWsW!& zD;=hifB^EYwRIqMr5RW!3ukK$iWP~+%NDw1293~7oM%E44$HRN3EhM<)l5A{$K7Tm z?|_4w&}f6l(8go+1LG{u6CpOl%W2ksogdCOYlN1!4nAd3Y|$<5##4c zo4)Sq(5{fX3Z`mM440(5chPQ?;jyl_X|HWPY>)nB+6d>O%?*#>jJvWv23-S3fx0T@ zQdIjeH4kl_QcupP-NP^biMmU#0bWd1&?oJZOC7^HDpSjy2i8!}RF-5d?EJRXkX|{g z9o#w$-t`J|zzcE`W!>QH?4~E;qV6P)ecLB#M561n4)3IZz2M^ZgO=ylO(a{A`SGQ_9CX@jM z)#QW%R!$5uVFM@?wY~BG2SNY4kWps>ImHT*r5QuE?N=yo+18&tlQ0y>-IgNXr^K(` z&PQgdP^#PEz}^|t%JJ`40+*<*4CwZ24G_&!QP8o|L?{)wN4@9c1y7mQXxkag%KP#X zW~5S;(S1MF;2g%^PqH7xaN8lh_c-1XAW_AG;=l~8?kQyXblC<}0zMZUj(rdb_RlKy zPwM%P{o>^$^4rdXymQ{3B_(^cX@%NlGz=C-|BM4qv-g{BGF$YC{0knk)2@sQ2=z_bM^E zqAb_4!F8((Ox*3R%+%Ebt$+~Jf7&Nz#EY3jm9Lz@q*b@jqX>J{J2L~Tgp6M>3R z|0aTMA5%u0nR0KBUpr9el}$*}m-r%pl>+?AQnq62?}a^xQ$ACa;~(*MeH=IgoaWv( zs2QJIu>1NOZcypCr~VK~i$4yqYkG@7M+(bth`tJ{48{m^>bk%lu%8V zou@riZ}dWgO+%0ZbKO`}8|-1NgTQm}AFJ?M`8lsxzep<`5Z4VN>QtYm$+}8+pI;)3 zc5^Hz>hSjY-j5dK|A;*G%FaG@8~7rO2ILjcgQE~|f`t+6=($E}LCPs}MAXnpYht9y zdU$(9rmmxfD33(edB4FBCwR9ec}Wp3oQS3Y8>lbl1W36aYHeW z3f{`kjzs$_uG0XJyJyM1Vcc$6y{T&Gnk<*PU0MBYh~FSvuUNdZQh(3T)#eHlSgIX@ ze8s&K*TF3K(|sMp9PzrB>NI6} zx^-&o1-`H!+T9;stf`ofNzc-z$lpr>@P*D@j}PQ3lnb7$^J{2<8wgRsO-1~2ii?a$ zNn|D~=Hm4DVp>i!TuieU&F7_mcLvJTn;nXb0oVoWW)~%m4v@;8%?yIn^yLn=!5H1G z+La&Ol8C95y5D5)hwLSinUt_c=)p2!s~O#W4y@BrV=&WZV};h=a5kN@x4`wI)$~9~ zpo6zcQ_j0pzrtaNd^mso?yvXPD{bUNN43|2??NvEpgbSIK!puI_|xPZFnM5`IIFLK z+O4y3K5qOp0_Z)D=IHZWO8HXXdl*LRaIz5FGqotkw^4##21Gh&K)wn^z`Mxexcq1@ zd2wmV@ey1Mpc(q(68tL(uPx+9EK1Nm%H*P)IASAg%`rNmAz@DRhLHbZOqxBxm$MU@ z^ZO;l>f0P%-I?6V-3@H3sDY>X;F=FH{Ir)nv7-A<4yDJ1?!<1gv;jK3A^ngRt7HBx zYs|{}jY+m)R}Rj;=YGVsoj%YSatE4VimkGi$_P_H`F*t>>D8Hp3p0Zedg=L zcmA0*&G~0D+-8VGeoMtBnAftRbofqE_LL z@bgvv?!$b6(WBFO(E8<5JfwNC`w&;ZwdbmGd00#BR=)o@Q-nu=-%Ov%-HHsK6g`OkGpPXuz`y9W%Jo1ehK2@FlvP?Y=gA$~QWBQ0WF^{3LjptyWb zRFe*P7Aj0)L0U05=X>g?L+&(V`{4q$kVm{URL=7Dywlcc2%ldIu&ZrtNPq2bLzAeZ_@q)aD2P~VJc#w_Fz0CD|HsDq8j zR)E8sdi4x_mN?Qr0q*^bG^tl(msPuSH)@}4tgqrs`?aFFALTBb1|*`oqeBQoGj@y~ z_CWZaFN`&})gdKE%|Fko*{&yB37$M*siggGr#g@h(FPx~`rEQg`EQOEDNaRl^A657 z_@zc(&Ggq5EzN7myqz5HT4~((J(9)GM-m_INiN6m{%hs@v-Lab`~w|2g`LS=`BJmByiV6ZMd^L`lW} zTHCotiYq)X0^32kWELW-=>o#eO*@|6GZMb%Fk)|Pj`WHGer=)AvnWU`VH+Db zfuKCnm&!;xpR8De@Gey(E@ji89nmoc4J$cKf{ZBRYY!XHSs5mu4`Ggh%XU5!=Gu3-T49)<(~nb! zDl2b#TY?~)`!Sx_MuzXTM&>ALk^;j`6rS&pwU=hcQy62r~aKnhl+iolS(KS{;)pA^apI><81CUpt@hh`k+ zP!nb)rhP`ueia5wn&e~zlFstxkr#PB;wXmZ#damB)0@3XgQwgwYjjTfsE^iqGVn{h zpUA%3kw$w18EErwsC4gS@_l<`GkbhPteju2G&O7UP7AXxPo9|1X?OOwcSrh;hESFq zI5eyoE(r)3{toOLdr|N9E-Uwes~j#PYGH&|TZfU+UBAOQ^H^MWAfKYEeMI zt!CIv#&`zZpS@3jK(b3-PZUjO99(@*=kjSM)v{aEQa>~mw5#!)Snj2XjYvZtyP;A0 zYHxNsk?6k!Eqx1a;48~SB>S@hzKS=QkGn0(lqIh6Pw>jbRSch2wH7F`(nS zs46$Y4urB#Pqx^F)T3hXKYuBaM^$zbA-SvXj0La+>4GPQ5IgYtZTtC)V?`9fpwD|~1 z(gbAT9k5#1_A&ad2%PgesZ_VuLpM9i0-P~JtNlDrg?TdC9FmS8Jzj-5%^%K7C9h8Z z-4cLT3V*kSn^2{jeyAl3+oxAgxuF+V$AJ-@xxpIs3t{)|(u-Glt-hFBQC4quu7YPh zq*K3Wgt1q8oc`8`68Bw)~bN@CPT1?>+^)P`uJ<3Wj~c%+d>1le2o+LBMOw!-JQMZ zN_EeTfEGL>j2Gu3x4(Y-6@h(MJw7<$>Tv+k7VuL{VI^orNnTlidzQWokhMamhMGJ7 z3)LhSp|=E_zOA=@0DLss#&5U(0Dy?GAw*FD4-5UO50(?dzPq9TU0Vq5iuW+@G6cVQ zx&GzO!nzA)Z|cLQ{eFvud6}hTn@;e~Zh!REibHL9N?*!eywbcd(nDF;;Uypm7I+5+~Xt6j? zHX}^ZhmM&CLXjB0LVGTq*tJP`Se#Egg`B!^*vuQthOWRAcFpHthwW_Cazo?C{InEr zgL+{ki*8%ZP>+8X!J^#bq?dck)IaF`R*AByx16*lRuDGRsUL_~N=yp-sZ(p7||jVgx`C3w?(Byyw)npImYtCgegBu8tBA^DzX|v{_J3Rvmf!y>;krK!p1kOXj3Ep z-Y;F)pZZYfpD&WiJe@scNox0J&y4Dym%T$Z!;4bQZ6={TYwe8h?X`_ory`|js=<{H zfvkgSO4cc!xM;jf-s8%Q@#$tT!g~ocqj+A2sF8F#MK>NIwEk?cL;U4^M@*{462BE6 zbjeX2FnZ|?Mlc~QP+{M|kx}g*K`{cN*O0m%>QdInjf)fJA%~Y3)1*e;gL;NIA%y_7 zgwu#9r`ESW$HYFDC({U3c2*OZ(Wu18(sx#FEE-;>9e75lmClo@BN3YanPM&Rt;h;_ zCDKm8UUMl17f||(+!pC`J48CQ1D5Hb?z4=FNEfmxB4N7COlKdl^F+Q#aZF}jD3&Wx z$Ik@&7A*6a*1W3Mc3#k-jY+>MKmqbf5yFO$kuy%RCZqOP>~JpaI*l~x;!<}uO?Q2_ z!gt`(KT(qV6FjKgQK3!7$Zu|?I3HUAeKG_q{|bA9#QpxdNM$thH`}w;mnfzHr>z}n z&}(zm)vdO2tQf>5x2?~XE#~Jf6J|&Fm7?^nx_$CvJsW(X?}FGz5rOmyBT3>~i(*st zQ^!M@rl>0(+qTsC;NlS|JSc{eRNHLP_H#c}=YP^YKE&llv(jcc zD5-See!v`qv^{SjzrYm^CDL5{Ye+}4V}g%->bGU+Gd)&T=^f3C?7Xq^17?rGbMj9m(^hR9Qx9j)K$)$G38x#jsPP( z8+IGq1pYxUddbKozPfTzo+&%$E}#>v!CKpMsO^ z2BPF0a4Pszn1?j~x7@|KqiatKJaHW^Fc7bq6zNgX|LE(3iMBuVRw{24gby)OvyzSQ z;1n0t?a!4ku|;2~!NtlH6*>)}`Q`XSFAOZ8^s2={-H{2txQN=g5>rUgp&~F%GgauK&F3RCrM?FT$ z$kv16x!i&Z8Koas9p@TzKFUMVOMLu>!Upcgkd57ze!kt|Tt5L|X7Boy3~}Jlihm$s z{;9hmw+WwuPCuXgC4NAe$fOM0P$ffGR0Yz0!$j#zi{+S0k<}&MizVWgLy)B|FS%=)I5$|HKj@@BjrwvX?pSj z=Ro=u?g@)Np`|$6A?4wNN8j}esMl^c4Lhc@a(i3=*=S$f^{0WrU!@}=qj6OVPbw^K zyno+){DrrBi9m{Z=~F-^4?LYU1bcjy_J5e>O;xq(2}-N{MeEN^(onc-5=1pKHy}y?zePP({HH0alSIm~NOXdrsK-$6=63 znSj)_m2zB@3L4tZoq^OuMcOe6)j10IISS}1#p1*sWd=i#^l07%c&2Sl$aj`g+w&w1 z&zvXQfl&C0KrcA79DF~REzwSFDHe#rie7Sbzx>*&NX6r${P08SQG}-am@2Zjr9}5wP%yMM6~>+jq^#Yqb`3 zq>x$O*KF%ZF*C1>D6Ogs)zS0kO~4o|6ea0!Qh!QFnB@OfZ;|??UD>xJmE)f?3}xQ_ z05QY0kOjmn-rOuW3Jd@qw$1q4*xCJp2{_Wl&LG=~D)gJ((=*FPGJa~&YzQJtjUVK)Ln z^@PR{Qp2V4derBoca_!}8!hAq_F4W&B#}w}2M#0On^UZ=JuTAUpE#RrVJa%=)Az#5BxX+d9+5Pu%cJ*4KDkAE6!AIQT8v3{o#799 zW8H^%N>M2xY}@a}@LObZnx*Agr4$vBa3=$!bO>rq+bW^F*M;BZJ3^6PN-CWk1qN_7}NG8mc~`-t&-+iFW6ZH%`@52k)Ye9vqAjIOg*vq1R3t(Xu|YTX_rY zqIJ#4Y82yrp+P!Fipf~Klcg;Dsa;tp=Grd;tgs#7o>sdPZVw-k;RH^18<5E^B}OE} z@uOb@xcc%)9K2mbOk;hsW3Z}%HHhv9)GT7*8yUzeRi`yO7rr9;7B~{E$9ggvwdM_D zxkVgXb)L24eq2n0*3U&rGxRcYR%IoIRf_krT1mPQ)hDCUdept9xGbTPS=?zssu!i< z@nyv01?>faJ;4%MDIj>_(x9?6QY8o&#+15a80m_(zC_rnTnxYFmzOa%^oisoHpXl^ z>yWvrcjudu4LsBakfqmVvYoACPx|Nn-3{?i-zss=QDPT)aHi=HH1!aXIn z=$YUIHKr7IkDBmNF_j+vl*CM-C!ai~9k@$|*OCbf)ydqxgC>CC_Q=o)Inyd$F9Rx$ zsQX%-U2ZIXoR>*>fx<%CZeEVd3@@f-y$*p)m^d}~;i)Pp^TFa!Axs5O~Nkh~zTdzM@VX$H7OE z@rTd)(LzlN0;fgnn@ih%j!uVkoDjty`Zh5f1bM9(3YJH!ubmIhPer-5K2TER5Y*zh ziE)22r-k@Y1JE%OactdeB#im?U)ILfOsJ6LFUX;|CkMAB6(b8~q|#mt2^3D{gfleE z_&@KYi1niVPNPBQ$=UJFNzG@VK4H5}3g|Mtz5=_GN8sed#p*vOeZ3F}2#5*@sple-~z8R|{M^ ziL}d>9H(8IFnuG356MY!RK-M6LWz1(ctLYAo=C|GackL-`J>;(1~jhwo=#gsF^;H0 zohA=XNsRenSd{ba#EFs4tSdnyL;7b471SQWV}BoFO(c8lw>pY8c1oy=4dzcOXY{*F zFE0I(F8I>ARlcJyyqGUnWYV#;^+O}89D8ZLsTDf(w<6MW3lmMczX7&_t#+iRWv1ACTTH=LRzSdI5b5Q2H{FfWqsJ8KJ?dqLYeGOUupEz z!$X7P1PA^dfD8>`=Qk-sVU~Z>qM1&R8Iln64(>GmD&sE~i@-9xDm`MUZ;8W4rTDGx zIwT5kx=jkBFt7x=kk38Gq}Qs*xA%n>iyKGVV3HtSmL_3Aw5tiV*1`?-<2I~@ms=#w zHx)yHGD^}RW2p0V&DlAfT$jBM$w6)aW zI{!QChvrtY%u=dvU-*M@-{NUMlX}Vo+G$+S#fl8}3)act@`ZzV0=g2&bJ)wS#5aAvw`30Nv!TnJ;i^#w%NHF*%g5zSkN11}; zqd3BpB1p~;CmWUg$%gVRmo>#geTsnn{^9a>$l6)vn-FH6Zj_I9f+PEWs5DFkwx>qY z{G(T>5);_FV&_XFw&N#&Cm@V$7W_d1&A2G|)g!7rzkN6SrJc}e2BltELeyPmmLx)1 zMi@XSOTsojm98zx2a^>k;iYp;aDuEhYC`t0^W@Kr+$ao|c(9!UP|TQ_svlQJ$KwL7 zu4B<5Vd*S{Snh2C-{tJ*di?8Tzd!jQW%Pl=E^L_(B;5#8r=H^9%uo|1e#IB7r4Q89 zV@@FPky|K`wAJK}f1%yctjw;y7x&khL63V$UOx85?W zk(}&LS1-6G0_;#w0?t9>`bS)AuN7=e{&t|HW~Q>T$o>E|f?$p0!-+?DP9_D@uB)qPDByusHrPL``n)q|3mfU?#sFngg}SlkHlE&WO=s}7NKV6v@)#yIOO3$ z8bb>y@~>XVVzpmr=?QQD&*Jvq>W=@qT>%4mMjZM&vFGvrJ%!jamVOfRQ>V{sQ*$8L{F@j2W*QAB(# zZHvR9O+YNd(q7ZF3ES)ojP+pZmMMwD!hbFouFv<~%Hzay%!}iu58`(pS_4H77g)VB z+s1SIw0sDC>GjpV0B-1Mw`|?sL-qBL7Q*ZRn{Sa)-A#@wr^6L6=1|J8{5rxLe+L}) zrx6eY;8bN?Xq~%WIe|oHoSEw3W5GhA#}n?n%MTLv;~FIUWy6CqJY?x3R{%UisS%Ozvxs9_wfEGs*%a)V>|Zq5X;w_7RaD12K(m_WDB*llVJd69qxfAAblN z@eGH5p}MZd%N0-ieT0kiqgUaO?}s}S=ESv4N)@Ko(0~jue9s=|`OCmB%#RU;^fnJT z<<_F~u=+1-|IwS;mttk{IHh}z7si%14tIJEU)REk;tw)e`^zNGh!4HCL|nB92L4UR z4+LVJfgL!dK*$vvN8>$d1*qLoOu7gI?k{Hkv3SxH@AKY7k&|>s zPOj1Z5rkhTvG0>@7#cb5$0Xgg?FJR%$%uSIN*F~A;ep{xypf>#4Ul_U)jpe3<%Xo7 z019Y_IiMDRZ|jeD7)^FxHk=;xy)#ri2sTfQpv(EnuncE*k%ep6=o-se46Q=2w881f zIb>A|WLF|$EhSK|O+xuNd1Njfv?AsT!N<<~Fc8qWB>ql~6#*Y^-;a9gf1M$KvKkvq zW-WVlf%ng-+BT}ZegL-_KVGh^ZD z3Aar-YL}%3Pu6q6q?Ir9t0R1z0kL-Pa<4vI%Fc$;RG{!*4dua#rdA22>N`N2ts=D! zXNaZ~WDR17(o4WGBZk!!?$2`3re$n`?6({d>ShJv*7)b*6g}+9wUU%I2f0s{yZPq= zspgrLQvd>_3}h@w0lIvl!LJY|GwNRJh6C=72Rv zmhe*79RHI#H7DmsdYquhUhX)xszo`COh$DA`;%AQnm@C&{?4pj0m;NEFIH0xq_?_Iy49^ei^JO8#UEzfgvlpXa-^V9(T$pHWT^9Swj3eY?S9kS^~4D9$_j%0}Y2xQ8$f&Zkl1k~4XT}Kz~Lmh9g z`L@tISy}X*Zl24_sfk7j%ZDs3w!hx{GK&477HIt6zd-9>6-sa77>c=F5O@ZTC%J#d z0u?AG)9f8D*L~#QvQ<}aYHTq-)~GgKgR05Im*OcQ)(PoWI(}l`$~hHM?JVu_&PEO2 zV?GB;n0P!=Rrwo?pf|yi0QPm}Z)rUe5{et1tg$^zlzVW)kVXl861thGCj}H!o74cv z&%t8p`WlEF;bxqU#tLBjzklUKVKatMUQlK{{?aVAu*_O2t?`Da)T20>`zK>cFiBr- zApLM7;$6AG5Xu&{7_=jq$1Sez%`NHVeX9)1@AXJLdo|0{Gyu^=IZF1Th+;~(K6Ez8 z3wIWx6eapX?o|eucM3l1)i;NTVxuCzpaF#vH_r|yxI7f~Y&6aw2wovk?aXt@$H#)O zxw1*-gr*(l{AUY!|9aR5!J*pf&GkXfz^!_u*a4!5n1mHoi0F*;W z5Z{N3k%u*I-RoNN;gpW63^i$sSDZgzw&vOkIDw^gPmflDe4)g@$PzDeu)JoaDk#A2 zVPG7vH%VJBX~khe>!UN9TA~$HsiG#6p!SYJfd-&OxlmGf*hb@wANROJ_Fg_zEX}@y zR_vfH5z~R4x6Nb}Wa?=JF?iMO&da%4xpC_Hw1G>!?HQxgI+m&o>!berQ;mV>X#AhP z04JC=*l~Y#w18$pl`5r`-1$wM&yO5Qt7gOsTod6HLSbC3bLJ(wb;FQK6W4$XVA=8O z6N&dB5IxaYu&mjFieqQ2VgZ>1RWtM^0QAfDp)~{23DgHOhWep6aP0eo#j5L-Y1vgq zptBhotoL{F!_znhBs4`?6_v%Az+|Y^XEnWfF9}>o0=Psg`Obc4+(32(O5bWfQro56 z^5D#O*S@GSpycQ7e{siq-N)$sp-XY;(goyHI$~hU4N-oGDWiv|5tSss{L0G;eFmEw zHb$|qBGxhHQOZ9L`q%C(@a(EKAR`}qY*DT6vlC(0bpbgoX4W3rK?C4`rO>8+trfDY zX6>KqBbkmjnnp&P^P$IAJ>UJ@_rv+4-_!h=t!nGVVuKu9G#F-@b0MG65M+`;ZJSys ztFi7U%Hl>cbR--GA|S@CMUd{7H^U75w-+Anh~FD^=F?oHgJou(riD16fC+AXRtHXT zL|6}^9Xn_8hDdm_M=SQik3lD5F{QeBLI_EWzu*kHH2V?O(Zt=vn2KBXJAYT^A?b5ovc+>OY>d%Ivie_Ah9D;#P8)5+#%ekE5V4 zau}@echke%6mzA=dr7=C+`QeDi!dfXD3YCjEdKKD-%nzkpImpIuH+DIKu|OFTkw4; z-1-eCW=+$0d^qErAI3=8e2H`7I zv8`cjLuwZvnnRw^DUo{+E422sBxNCU?MedkzAW5IoYO*?umT`Z8L3M&) zN=%e;nL@C$HTn%~#6P}DbHxQx7f^i4Imn2qU~W^TB8U+(#Po-1BZv#0!X;Prl<(jq`GAi@5x{cHbE_PpS1Liiv~ADDNPZ4Nl`| ze3)TgvZLB>nI%IQc%f=o6OeVu*>X5(tP~l**gPhnJa)c<3G7g-sdAemNKOcIqf4hT zLtqpSgt;OxJS;4jRI)167n3Hj6DxNqOhu3|3EfS<>|w&fM)NM);TXTJz|$}9 zZ1wx2s}XL++s1+>K*)j^*xHh5G1-_P2jgO;lpIFr=&+OI-JIY<{dkRKk3CUi3a+C{ z%X6SwD*hm9?w|M3&gMR)U*rb=@nuj;qYA7FIdrVpexRC9;FRzgMvsml+2hYW_xT+> z=^GREQ@TUJEVs81Me2~u^cp7Q0Cy9UpFm0wSz10_JNOWTL-2K<*SMo`wvGoLa+7_V z<$0wVwBq`A$cd zahSD?n=EE1KI4f&LbA$z7B|%fPmf4urWYV1ucrNi1YCrS+&>^m)z`XcexgMy% zQyA^3Vh!x#^Rb?_UoeSE3}&R85gaC04SEW#Q)#qfywh;B);vznsHEszdW@-Rha8mW z=X?u`E0$Mq4TuakfR=1Vw>@Y^M?LRgRGGXhvw<S2gO>e|%#PE6vo>>${b?#ggfA zBpsy9P8L-&GDQNYddL&X%p3n~T^;^0HcFUN@YFu8m5Rnx1)EruQ^0!t`@ty1H*%L( z7e3L6LJUlldH^Gg#Tk~Z)jZuESpYn)T3FSQNW}z8=sHE1BvB$K*WJ2bh)g$CcYm<< z0$(~YA1(um!I407XtF4e3NOD1ZB|o9{#eovXD2CjD$fH5z-tfHV#-E}jL%YT7)d5q z5h^2O?kqWHMH-{#3;$3B7I_V6M6Ap8G99PPTuJM3$Td(|USeL`>v)k;NI2lkuG5#s zEk;X$(137|5i6WR3>L~q(oHF$BrMl3!Ckw^PrX`vkB9aoHO~9c9NF+edzd1{N_=^H ztCgc7f~{8hgNFKw=X5h5xcOD%&^Goe(3I1o?-sSV*@YbMPmoMNgGw+JT%iIM4bfSC zGb{x}`9ZcK@i(ZWHl6a1z&qQwqy9`CAgf&B_iRj#Kl429PR=Y*(WVpaUC?N6=z4fZ znzXjr27J@y8{|IUy)#ItQJ~8)Kg8{{m5i;V#=enpl9<61I=w`j1sEg*3}m+r?J3?R z)k_VGHBraJRxatFhNvha6?=rw8g5f%j9(TY}s09R8`Q4 zwWJ-T%61>gBKZPAc>&gEOx?EP{;3d58gW0PF^0r49H1Im{=<}9x`hEr#4;R*=UeC~ zgHssE>`$j!Ol(+u^y5F-!9F7UX2PEUrpHDkM{j`a&>mLfxH+*63H^P2NJ8RTaH1!< z3YH#}4UR4`5jmlYI(-9T9sv>btXQkM^o>l#o&u*gI=fE>CM7?`YU%DD1yZdn5^?<+ z4`6nPUkaZ#lk-wHKiP6HR6GC0Mno}?fTicQCivz1G91N@I>?%KMx*NL2}!4?z6+-fc{rFtC;J;OP_oM#{PQYHD>&mU3kfYnBf+}E zrAfBhuu6`}rSa%fOPxE;FNCO_9-&+DaB-`XZyy4BeHwrX-10`Zq0Z z8#EH-<5w=thu<*a7tMnQ+CW=$G9ow=u(bOsCseSIKeTBUejppAB>5bH=qIWors=8qD+#sPT*LX^54m*3xA1bD>jMEp;vV^3iUQaY;&*!8)g-IlKr7y0!J zRo;i{(A{99&=O$egp_X=d=)_O=xkY7aqQT*44k{Vy&285w-X0B1qkiG?C(N0bYar+ zPEMe#e-ocxY(3{Rk3Ag<;|PY2-G^Pm9mu7~lv}dh^JnOj{5$gBS%e{OWZDaBUBLoJ z0>iT#RqF2k;sikC8*338dq>ngh0i~mC@+QbI(Orbg2Y8fs@*js|9O&pX65r%DU>uf zw&X{P7GQFW&pwHtT4tAGH*YDSNE z<4*t7^Mp`Ki9(`BakKbQk5&MyH$5lm-$t2ezx^2ddP+JnWTRFAoKZ~BOC3Jk-P11& zA}!138Z+JF#)jDs(Ke@!9{>yz3tbAzfj)pzE5gwT&?GSs9B$DTog42hC^Kmprtz>R zT)}?FhTB*&6M3nM*6`vy%BcBWXQzFXlR(z`qsL~f{a*t)R{A4YO}t43H`K@YK43jOo8q692jU=f zduG<`S!?>vTE#JWSW&i!QqZb@2~MDEVri#@^oR}mCxW)r$wY9|gO61GNa3Dbt%m6a zq_mqhpYK7hH=$M|ypB~I(baVptar?i=baf!{LxOD=fDfGG=QKUl$Wh#hmFtw61iF~ z%(thm81iGGx)xzwHN=2h=4Rw(EjD1F7c_#81tF-m2JQ3*F-gaL{5xYS8Cdv#S0W>j zO|RzLl=ZQ$X^X0qt`e^`^^@_@5aA^htG*}N(N)FA{}$=L+uPm@Mh(m9nf&B=z*%B=C&vntgr zJ->;)4m8;M>yy^H|B?TIpR@2fV%7UfWeX&@Olk9gd@l9S;cqJ2dCqSokp8D)jIuO! z*86HHE6$Dz$XL^K-xc(>ffPH6p_{+!pgurE2DbgDU@Kd))| z7Qo`tSTjHKuCvVv42p^;aXb>#Ah>@dJ4cYugSw6zp&4(Z-7^N zl;wPa@IrU)zI*7_nxK+R&K6kyqeth+mqQ+jCx zo{&PE#~rpTytriqXP=mUZUm}!I-208H5uy~eqxSKedE@o@-ZN>{K!N^ITsIIEY7+AEDPznL}Xko!e|imwm`skHqJFyp>gCUhw9ucewq_}T( z(OvYy(KYjiUb#?*Z4HLOT;sz(|5oTUWgUFp;@?1w7m$R}BxK-%Ow0WfC2&S;SJEl_ zsHGfip`!yLxNCgX<`C+vsS|(I`DX*oeKODGa(|PXnb)&=iT-<#&pOfhU?eY+vDmxi zQOu(SGS}f5kVE5UgJIZgyxrEWPSnl-8^{CqtEazIEr-)m>Aek%vj!m`58*$K?<0Xt z4iy;VlZXIk*VlaVyj{7woR<-9wr&fkhIKhac&@i|Z_4Y0Mb*-C-F(yJ@!A})A^-0m z@_AF3u)Qk}ZJVe5NhW)8e9#|H5+qp-xiocGcb^G84*;u8(@e6YHJm;&x-F{x04w5&?h~6MCqP+S?YFBC$=TWdD zX_UU3R$N9+712D)vT*voWSm5*bbvj~PU3MB_x&(yxM0Ok0%|(g;`9I2S5;_0K_30T zEGVUWV}$|JvP7JG&3DE!52aG=iF?iS&)w@qCEF{*F=oDsT1&60!W*N&AJ>$+N{WF) zjoWf@No7j1P3Vh1exe0X8qdYnqspiZ-pn^9Uc2HFtME&*EpVj!!_(RLlh}CULfVPg z8f(Fyy}#1t%0vIhur=ZJ1b@NL3UqZqc<^e$q1`gP*u&fuHMlx8+1`7!`{PCl{n}Ln zrvC6C@R>i`0-90{np8WkG>=DT=I@Zrjqr{r&0oR$m$Nt!@?`j9+ek4!^_4yWZe~vL z?7g4z=f^ho()-Lh{ayCE?Tf=W>Y^TGwYRQ_g!IxER-Ir;K@AhUX`W`$(x_2gE zH3XmP7iWREw~_?h0UJ~IfF0%=s-mqUl@~SI8-sVAb^4D0CfhSfusEYka{P;s-Aw@W zu_FujE^K-(Ord*ZO<@@fstqNDHYY^-#j&r!r7I|;yDfyf6}I)u5Z<(}#~DIaV*JBs zqzK&S73dr8=aO7@fQh#!iQ;?T@sTFI_99i<){zGN#)#Taz3dkJ*FekUtES4p3%06& zSps($cY-W`R|RzI79W&5FPqT&l#p2hjEi72Wb_f2v(~VoikX&;a zk~230oHL(W5ZJyFUd#=0YK$(yqsE=t4oFN#y;6qA!&6GeBK%Ztr#Orv{Z~whIz~Zb zr92;@i6zI8s`6Ztq4gUF<_t{3XYUU5-qahcT?4{i!q_YIz+@o}y0w0CN|rK-r9-_| zxP3XKqtZD?&;aZ~NURcb#)&5~otZzWl|MDp4U!XDlXcCXh}Icfm9Er*nsgQNf`51> z4mXCrhRV^FCm4?2t5xwH@SD|~&@@NwFOX0~0RfJZRYDkXLWv_Wpw8HtTi zGtXyyY2I0e04gzzJ!$aT?}k^Tx)$Eeuq!?x1;7jCia?;uOA7aJ^G*t0rpfM-e8rdi zArqoyK@WnE>hFbQDT8P=&*yHKuIBi4nUt6xdVasYDS&hOr;i+HpkR-i0~z8CQ10C; zP^aDmDwkcYC=Z`Xh~t?lL4~;1^|eh1Z5P^5B%3^lv-9F9oWb!2sG*HrU*bn2hH%Re zeRx~YL|s6mJOLXQLRf?hZt9jwjP<@$W0Dt8<3ViN`tTRaJU}++RDs_rHylA`&<{;L z9#>Xwr~^1Y^Q*$p=PKrcv|6iaH`~S7l_%n1rzP?t`oF8Scz~`%=a=&l2c&JTe#Pq! z*N0O?st!D9q)g%d)@U?rfBprX%q%~|O%xL|@rac_ku9WrmADEO zaJql!UX9j0I6ufx-Gyds)Aqw%sTvYN8Ni5#-2|yt6i-z_i#+53Dc4qB|L4X&URBsR z=%*gPrh*RSS6QkMw7tQ-RH7NWFm7s+w3t9D%r^YGl*rLAR3!l}y^1eg3tx+dg$EGo zRbWbRi%`xscGPQs?%W#<)>4BxcHa2bEqeKm7Mi4r3(rS0GC1+1rsnap6$u7biuH&8 zQP%wQ<0Ml!N#`!;v{Y-lNtBAFK_d|cS&8~T*%cWD@QPK)g&B<|8w^EcY{+Lv-$4x< zZStObmzm7|#LJ~TRO4yQQvh8{RE-(Dz>hUVu-GnIF_WguFYyorcQr@cuWY2hXTGmqIp z>Ac}oUa@RJ@!LVEFh{OtC>ifhSf(CERQ;1Q+uDou+}{sczjH=Prt&kY$x0BDX%#RzxPIj@7HN+ zCRt#lnbg+mVmTG7%6ZY(A?Sr^*Lz;F2pI94PB<{kKD4d}HB^pd? zPLV-ne~hlshACYsqW*W)I9wQlJx%)1A5sxXfX}8$oxi6VZ^@R@&GWrl!r;|&tlv0X zAr)o3(G-WoS@>>kC+I+lV>Le~ZNcB1^~olLe>yXm|Lbo0m)IztD4ifSY^H6c{MrLZ z{y0NbdfBC+GLdk5$7f;@BfDcmyCA?l|E{P_n$_%t}ykBwiJHd2_Cx zUfCoAq0==@-n;I*`6Tr5KZSqc0K3~5HkqJ1dVfP6Hd-bE>0 zRzNEBnw&mUbS0_;sW3kCv($x=x>5_BgQaoSIl-@v)E<$N&3OM@0tEigDU%#;2T+|n z8y!n2+^asWE_o^Lp*=-r$|uky=%I zol;qm0IoV9Ea%ZDr(xWq(sX2AGzk94pMVUZJot}_aLNJNwu15rB6Qb03`vRY$fq(B zzNE@rNPsxY?)~nk$<&yp@{UP@ctVBn<9_K#dlonB=`{CGT^J**DP-zs(OOUL*!j+m z6s?A}-FYcBOzhOt59|YG0I!tOz}pzsSbPNr%Ep4WwQFio^zwu1#wqUZPb!&VK;B%T z!yXY@Kti5jk#{X2h&}HwTCf^*4V9qdtQipA(FMwZkSQ}tI4wl;!g*Xix*^v~ece~L zYBm+;losBrh9fY6$5~a~RmkZ3tWT6b681}r8O3-aPHd;uqY-8jSRjmZLl#fW)`S&wi#{ zY-J6Yt>e~-?s@q0=E7Y1rZ2|}-!nWP=ZajA=c9 z6mSeH$Dx-E5MQqJ@%P%Heh8Cmm(ldp4Q)QJHduXFv0Ab{Z_wrHj(96R^|0!Xg}ToAAayup+i%G->XSQKZcBG<((G~+fMF0dl#0tvjsNSgu;kBV;h0OOa+7VUYkd^Kzm+^`Z~bW??X5Th;FtT5()- zoo(!6QUJCZ$l6aj>Hll^NJa#4@MJT)|I|+S{q#wfigtWln@O>^G$?;>W~=SJZkh4n z^RNLvTG#LcWt}aUOL#4XiI~a0WIS|uxMFm)f~dTJA0|fGqjA(iGyF%8_PZy-9VmLJ z)C!~Xqx#C7dea}NAHU1bLY@Kzvwq7Y=TN9p$nvAH$S2-r#9}#!4sv(APxU=d+1jjO zI%G$%n|yjaJ$!UKO!`c|@9woW=IdA5TBr~aDfRhs$0G|)s3mVH#+E*WV$GI&xH>iq z<7HTE%y9FuMb)>(l=oeS;N3o9*2UPj%3t`2T?W>7J7HUI8SdT1q);2rKzO=1)UrUu zlUG!a#(%L)(7&{->O(AJllj$?=h<01s@_rw{ri~|lh5z+IZ>(h7t$u_T20*-1xx*O zrQT%7md98F+k^M1-tXQ5gc=VW&-8oMQGnEL%wSI&B=uK~+)F%JYeb!A)D1|AhU~>OdDq7FO)Wm5uOPHCnowq1%Y5HA{2%Q$B9xHrmA%j{3>#UT1 zXm^Ch6SOfEn0+cX!J!_qlumXqroIs!UQ-OYrDeE6X-}uS+o!U47<4BosSMR%C|)0M zpe9Q_AIxj*=2(jjohwv8zYT}KOy}-3qZ15Ay=y6Jm46-HVgYZ$a#tUDYq9h$$|gI~ zIo(9S1Q79N4BSr*)vSs)Dvn7u+ErAwe57(#)&fp`I(bF&LC(JD7Dk2E9!m5(1faTO z&In2o+4I*AvPkYRAb{Gir(v$$D}~pw>S#6U37jE0(A1MrL^5(DI%Vob5f#0?TWfL0 z*9s}q=?s&Ko18Go$N9_!cOvm6i9bxAmaJE>rc3vNfd3w>Yx!nuHKV6q6E0BLSR52? zvS?=~DD|UII#7~%kW^}>ygw=3HBaRS=mWJ8cy9$`|&(e}HJ=Co-WC#cd%4q(Y5pl8fP;k$VnEMLO&MoLJ3f_%_YC?{BL!Yr5EAEqSCaKRT}%Zt6&@h0>V&g z!IZ~@7S>yghhiWX{1yJxJ=xev4dJTB+l1o!%q|cr@-JX=e4G6l_3BftU$aSoN%N&xp zdh^H*NWDg*Ag~D8AUO3;93W+Xysm$tG;WsCLhGJMqFN-)-CrEkgh(c)FqHwUeiRXN zUmYR2Vt*2T%ZgirfwL^)wJcI^>g`(XWx3g&j)=YHi8V-LX&87hXQ%0Jt11?7baI$i zeEkT=`(9-te;_U^z3Q^l+uJ#-3L~V(f$3`x;}4OTdK@Ym!crD!sH@O?og63kU5KJw zOO!%+wUO{bmihuq@d&$G{-`p9E=`~i0UD+V)y%mFAu~o7;b6Pa$-j=7n59KPS_HaF z+~|8?>xkkQX#E9q{XI+E__5!pZ-bh61MBy|T`QT$M6@^v4W}X#T`d`?=q*)_Gj}XS z&NQ9;0DgGjW)VV$`uzgdh3{{j$o_od3-VxRXPi6WGW$cuAQ%2w9*vWL$ZOHfF_u^608)g1C zO%|=&`X@|knWdpWd8Un?U$xvlCrpv}lq>eF!bZYW(VFTZ4k2#bCw_DNCevB^&ttp&dRFfEni!96OAQAZlv@~gv{55KJc|hPw z>1M>@8-U>|7UA@zqfN=>ZULmCXi^pwacCr$i3?N=T7Z%cwhuWmv8n$H13%n1uykJ# zmWUxMA<`QLyhG8qTCD~oalat{<`~))_)7Q%5DkD- zM*n5OynSEH;(5wUSi_d1C6-A}p}*AxxFZ)Yh}P&Gcmtc{DIh#p60@m4n)zhahCEKi zNZG#zARL&fMKTg-tqrwdMgbWoHu)_rtN}!1dGMe)vHDsTdj%N`_+~M^zL>J|841hS z&D3&g>r^ub*s(i&DESjiTSeEt5{u_qo+epQ)`3214ma(TsEC?23bxg(3Huc zbA``TO4psl=gnYJvW9dliCKt77B=*&QW*anE3qZ^-thX`?9tZWKU#uZ(zF&lFNIV3 zJ?9#LoJJNMYl-hvB3%w)ZLhJiipI#n(JnJI6tv=AZjUz<<7c|jr+tQm$e zFLvz?vj1n2*iS4dqaY6buYGp(k<`<6ws!6T(#U_U+s|K#bv0x)-_$H&+-kLq-`pDU zXiz2XzADgo0pQ#TYWG{I5l|e2u2o}z2x%O#CF9io-4_|X^p^DfcfDda9>>U^%U{QR zE~1Xn^b-=n&_}^5&c6#A5$N8wn)I8U7!~M~r4&4Dd;C#;hSE6M5z+dt%Ofd!tyEa5 zBO$efsM)nIM)b${|2=n3dcN?Y57UEC6#GRRRU!ixeptk@`?W4XZKkzu6MpvX$6tm@@UnmA`xEY;Tt?L!@RV$%dFV>#YxgS$x!*-#b`{v`X*9*w>;4Ux1sLU zZjS7q$6vyPTx!8(Gp=qT4sL%R@;cMo8|x!==(t_Y_M68iN0ot7?ByQ?cjP&9RpRna zB?Qcc;m~`Hyc4${^f*(@PxKALE~I;t9NOL$(BPQ{O}?h-nc3r4`M801m(ZQ`arQJ= zZc*JO<(%6xc@Jv)%~VJB=Gh}gHjNJM{>D^UxU|UP@<1V*9I>PpO31IKW?8Lcf(iiMCXF;0yoqQi2+3%Qh zj=%}&cV7PH+ydHFT%i<^>>;MBvID-vVUU>-dKVmtb@Omj&>BKW+=lI2AP{&aap)wT zkZgMAp5w{mRDg9@3=>)}<|~`)sbo1kv{;I%L$KKN{?6S*L(40mW9C};0bM#G40H~E zeMAKl*x8R@4EaO-17^m>U7aWz;`GP_=yTcM*q9s>Z#7|tvb;ZWNwr|mGZCl-EP&6gqEVsQv?bJ`uw zyR;cCyc-Dbmq#HN$-9QnS^n1tEc#zIS%Gs}aeX`H(46(UK9rAqxK14Ri52gK5^^;l zlfVBBDGNa$m*^oZ^OtRV#orSd2x(_%l2(5PpLS~%hCIdq_Hw2 z30|(6@Kk~eOeuyl(MG#C6MRLIGJJ5a@&I#SCqUgh?<^E_C@-1!jKqT zD9k)}lB!~52L)#unGQl9T-%h8hl1R+r|0ZXvXz4?<7ApS3SFJ$^9 z)Y`6}<_5mCA+6Kw5a(4JyzC&0sg{934!$m-YebDTCAlYN+x6~Iu;rc|m4doyCQ(ok zf{!@CkcU@;h~F5q2ALE8NQgsL{5r615vlSEo&`7;uA8OIh^lWXq`xeBu~G_r{;wqg ztVaA=bn{70v&p+{);c7Lni-eMv#YpsdCu8XL8W)|+6GD;y{ojV^H<$k9Luz?O@F)# zWcZ=Jjft)1eCB3OPbYrb$0tc*xkjW@WF# zT7iiSvuwxDcdtR&I^cJG=Ax`EJm}J`eH3Y9zCU0#yscT$-!FaZcp5f}#6d!yGG|Jq z4%U3EF{;EvT!##(J`X(IO!Hmm>rC%94m`$_5hJ4h6~eWB1cdZhEVSBFjNT6~ zl;M&~2A;=nBwHq08&|8}FAj>IRG&9vJvE+QpK4oqi7!#BkUrU|O6Wi*ZOSYtvlHPQ z|8+QokPBHLtO!Gq`=doo-YlgCu9`WB4G=4hClWtQhJ(&gnr%>xnyUX;4OOmBF-xm{ zT78}m4^^%dmyzX=e;8qA0XDS|?*+;~kr6%PTu;)4Y)``3DK#vElf56DO$D8oHS(rB z_e4xNyTC3!61A@0UHB~6>CknrtUR{nJhFqgnH*v)=z8C?IbpPPu!7|-J7>8mE<%l7 zmPnK^pV~BiKeEq*F*a|RBQnxMc0O2J9-Ci(@gTt!mW24Z;Q8JXe1d4cKQPZdCTxGm z;QHs%MfXmK?;Gg;%lvh%Fk=F8SkTq;upm)}`Ws6lWVIld5_>k-s+?XMl^sa$4A|1x zy0au6l;zJvAIsysm%7BgvR`;O)5{zNxOQ>95)%V6fJ4kN#OpM zrLHgn22EL;R##<%r&aO)1nD=Y(U$5wIMI((|KVLkF8{NZKA+9LT;XASep+S@%2`>F zez1jWV{dqiT*}>uL7m4w8&;4{}h`bBfna3{S z*)yr*(90?INv@d=h&3;j4i>Q-DtM-5uyP!5+ks}0-HjAfv10n5k2Is?Td6_>W4$%s zG@P&;GLBrP^BMY%ijVpn~yJMpy(-4mIN;hVnhFS4BHm|{_$HO3k98%|XXDXBx-IP7yL z4qY9GP-2}EoKwdL#pB4{KQO55_zJ=h$3^fp{wTYapld^VR$?YpbJQ=R$Q`~i(lXL3 zObd(vmj%)j|S|v#V0I)`m}WQBn}3 z{~}Zk5nPR(rnll20ayaA3S8u?-FQqEFyk>F@%;pi#Ma%tBJ;k>A?IJNDfZTy*jYA9 z34lD}*cgX@-Y_=3wDBz^Cl4agsbAU~c%)YtH?8fWvfCbKre@yDeU*N&|K@wsX*C@~ zk2Y0)P_CB3-ubl?@v^tdR>WSw)JVJGZ;Y%#f@|50UR?=wry&2A_WjGP|C(_w$!{9G zuF}B%kBwD15%b^As~7IORC_QOvATz0IHp|B*~9E0J5-#;wuG6X!0i=Kt{2h8d&_yr z?tm--fw}K~Dl_D|Jbavj%x-^8d<7MzzC0vx)u#Xo(#MWYn)YyO`f?4dFFGqk!G|LP z|JHUVnzk<%aRZ?f+?wCaRNt7H0Nuba`5pQJ$-#OxuTM>Apw@1$v%-W3zQq#u$$H zi32P{Hi?EO-(m9n{W~iMum%E4|JHCOdaj6QYRRkKD&z+E2L4U1#~vm`A4Fqn`U8E$ zic!=*(CMWuHTBRil^iMDb_ziQ)*_Xo9iTK~>bbNbz@GXONb0&pzIKGsSeso7yR{Ml zU|4SE1cTlU%@vK(YhlPwt$m4uZRHRpkyG%bxkm4H`M<;xh)(~jDE#*r;7^)@8db4! zi+HEUXZu-T{soQRDhznMJQxUhhs9p{=cvZUP7JtLX{)z-n+6_$f{>;44B1n=9(2gb zBA8yD$eccoP}J}1g0`S5@Xcc6J~zuvVQneKK{C0+oW``3y<_|62YosfiUV(Tn$+S0$OTMZNGm3Rpit zls@JLyde!Tif$tF4UqKI^CiP~L9`N;-xFV0DmYYp7wr^8KUbv|7ZeBkH%WP-Z~fxK z_l8Q7`>%$jXaIz&)9RvRIg5FV*OHY)=@t&P7RoX?q=vtL4A3VuuBhcMFdbC%u)KS} zTZ+e86jM!aq7YNT5J$ENYl-`dN&e5;f8S6a^XE&&7O1#Qa013SVQ$4#WklZm!!=RQJ>;hc$deCZswR&2KD3o{@H>aFi677 z3eC)VvlNc6+^DM|4#W2AK3B*oyMV`r(zzqGO@3$Esxomslt z1U?}gxJv6^kn&_Xr+P!>E7xNWUy7vHe2*oc27F^7ytHQ^cR#5&rf?Y?AP^kbJyxB4 zpr|u41CR9{$PO(f*S?I{7}_OnMqY;SDvG`tVZN)&!_RmQc+pJT`7rGzCF>mwPy&ZE zbDp5)n_*jq5Rdl_hc6rG=fosS?-_x*sr_~!;`!_6@WJdI_X3F0&bY)2cafy~`f?7` znRG9cs9S&BPx)gV)@!$xaeywCH?don&6Ce-!6Vu^ec!(}5OkvoGjW9x8mMiGtKYlz z+F7wnvHP%l`HnlEY_6{+rS6GqU3u?JP`_X}^nE^lo({UNc|gy&a(yVD^`C zcc{$&X{k=hp<%E+WdNd){r`_f>Ujszyf$W_+^iczP@c6-@ESoot2d#nyhJ4XgxLm} zPK-0Ar`3FS{LtC2#-I%0?Xs%6?n7L9Yd6nAM9-9IH@^hY&VVgab z76XMJES!b!#DDYHw7|PjlD77*xR(uMz=}fZ>&Dab4>_T6`NJ2UH2<~*a#X?0*tQy{ zS~!rf5EDPFC$lQ5$|Tso0wr989@sPSiuc$z**gh_R_r9>XlR3v%OfRw;g%J3cA9cA zHHvpEwSFplt2GnB>6jQSvub32Uu8%aQNFiMaxX#n=b`*8;YzMoH;Y7GKgu%ElMPic zfj_UPsO{4EYQc2!)>hxdW}s72R5=Dj!pzQ=|FFhjR+gRnGV>D5I-)bEN1(gWNSfs! zbWHFAw_|r6thx(E#<7vADBs&b*FwHk&8{D-$wezPc`MG?8S^(u1)q3iyLQkZEu*FD zI)ve5oLo;aD&}+Zy@z8HvaL4)9Y4}`NGkbI<2Vg3JKaZ_d%*tZA$P`SuTsn1kx|Rb z61z*Kja8t0F&EZ^#&algGPl)j$bMu>%Nf(UVLnWdCX%^P&`l<3P~#uBk5={dHkG?ZGChJ|C9IPmwKxO7;UDQC$h^-R z4N%W?27Cmj%{+uvh~r@di-^twi;^ouo7j&~SWr=Hch6h*)iuri(a$aK_$rc(9f~*@ z=dqQgAvYjR)z?0Pgly+xS3V@Fl4}epijpgKcthmnM5XBE)W~6eEG7WWi8n>FW{)nP z#`6a5Yc%C_JFnf2k6Ihrs{P9sXR^47)AhDrlcF%C^0_C~jGmH#wYs zeadr%_dZk)Vdj79A3%>-qrB_H(lXy)dUl!3_%pYleW5af5)d_p$05Du)9T;aCv)@XJ1h{vhu$Mtk>LTkzw|R>97WQ z-1)4-kC~9^o-le$h#^J!ynKz27++Ai@Z;L3#W^@|pntLeo92`S2KLznDgkU=wgopl z^7wPkNr}+39c9V|LN0+{BoulBfPx_+F|B{>+?>f9HZ!28& zi_^f5PYXoHPgBGM`qkljwpIe6BR5lmJKiOj0WVThuHg7R8Y=pmgc^(omOib|+pp52 zhkiVbou@-w+b4VxS4$T@?Xc>XrhZihMy74$cn=+I5LK$rPDEL{H!K3HT9vYOH;p_? zur8h51j^{wBex-s0+K3t5!`NlLZPfcO>UQuQIHa<1KmTJi(ovcTif$=6ge@O`dz1k zl%?A%{H52IO!}8rsv2MKAzt_BdYjAm*QDj8Yx}8Bz%GQ#6s@OVR~R1MR5+irBF{1yTIXwB!gmMrk{2+9o~EU0aMcdLKNp5I+L)?LEeZcYDwj8Vd`v;_DoFG z&Kc?4y^|T?g5K-q@`3dq*A<)p(qn$O3L3DUT4ia-)bT%K4i9OAoubHnQ!g6%2`qji z>bLH%^92qYyrpPl+m=j_{j*(V3g&T6g}F;HR4hp+cH4;bR3VnD_8>1hoA7j9uauY^ zY=}Yc>>&4CV2n-pkQ+{4CVk$ZZ11nJN-in;-m@_SbE_kOP%+l$2^M1;H(PU}?|KS9 zAj_k=cly!zDSpPe^R3hz-QVQs;?n?1^Ce%w_C8(VOD3tR+sO~jS7k@W#MW|cQ7)36 zg6&a)te`iIhhD924~&S9-ESG6F=#iEDfhe4y5zOf{R$U$Z+FpPI|tqClm*?%bYw9wFEoL^YTQf7&^ zV#`TfviFP|o@fDaYHx{6)efLv8<5z-?m!<@%S}3Zt~IV>L5>;7Or|tfx}dTwTJ7?s z)ZNcnv0JV1R->%DH5_O%D2pvGofyp@jR=r)ruwc{!Tx3YM_3pYb8FdzQDs4Q?r6O| z;MR3S@KBOM%s-0An1%=>Sn7Xhm&F)>b8QjPmAX}T=UA>&8uya2#)g)9)|mQ0K3}JX z`STgM*EID^eB%Y{?S?1A(|8P*m!qwqn+s9LW_tb0>jwK*4{zv5SK)oC@E>D8?wm@Y9}Mg< zDMU^6E`@QJ_L5hK(GD)=>?|h}HzA6b|t`B;8*n>#1t!c@drB!)yFyPK)oiUvxAB zfI~08;8mXmTRa7&FJ4jVJb=60#A%zDb{EehXEX8Wus5x+`!#X1!eX3{m?&01U>Xj8 z*hT7aq`7wlnj)?0;GPp-#WJS%=)@gvE6qQ6B`%_1>~G6kk@2O(nVqKw-Pq4e3xSMjig zI!POUQ=)H+rNXI#(nCq3{h;hi2VwEgslhbPZ1f0)Jx_E*qNS|1PqN?ts?(uF)%(%B1Ykxg~ZZj1e9;0S2xO%|8`CSgc0OEWA&wEx z?8Z+!)f_tU*j_6f<~$xcgK73J(r^c(V%o8;h8gX2_Ewe�ofEg zqZv4{0lSY}j=Ow*_Fi&oK%#x0_$tNA0j5>m@8VQUEqS}t4gS>PHKs>06fUl8l_4-p zTX?^HaJ#szVS^b|mE0`!*u4zhuDt=X`FT_*g$hIbOK(@*a*Qw$Cb|{`t?KL6E#E(}xbVct5H}iGn*g+2xco z>Lid|RJxhstQopuU%W3H-zbpB{O@?+1A7?b?u@UI3PbkxuhNnnIz-q9$bUD3Z!vMC zw=|SRkV~Mk!>VA#d`mXtD8bbsnl^)FG6)Ee~hbHG#ex~fXZG|1A-I7nC*71r9)%=9?kEp5e65|9BQlsP#x zi?tafauIxA2X$5}^euekv;%5()Ij0BD{ux9a})cK@l|I__|xRJHdTt+9^Hm+^TvAb z>iyH6!>gZY%X9zt$4nfxKuz(4*$5rRP(@L4wHocEYvs~8dI z`Gsd>X$XWVFy)-3aGi9v_OGyKU|&8a5$FVl*4;2ahV(MdvVy8sZ|OZoy*BBlN>FZ+ zs@OL5(dgWv@~6fDRoNSTL&nZ=oaD_>71CF?*Io%0zL`Vm9J*c2SSznMTZ1Uam-fb& zariH*L@h7#daBm6?5{*soJlshxnFo(+J*vevIo30FxHxLcSS_DX-gR=2@R9~yb#7D z>F(i>*xp3b3F$>Y$BF2bhh!0)2K(Q7MUT9Pm(y1MO`T}FeC&7tCgaQOv9@r7i~98M zyVyE0D404CpOq9!tWk;wUQ{<~ue_3z&w~d9MhlMKsgugC#+&Qr>1~y+!A2~2%Vq`L zbSoix&z^V|=>t{_CfZS*A|?m>ZZMG*>q~{GCn%EU0Vz2x;GETXWb}c-)oQe@nBr#R z%3}0HBe6jg1R{_>5=IG&wp=-+6o@I$zN!33-N?&%b0Qr#O-z$VaM3PDqZ2{J$r@w{ zbDHm6#}tgaseP$ZBzi1!3Z*-d5Z&UfNW!KmqN6C~9kenEA|tav%G0i$#18QG6Gk&o zjET|&7O(y*Z7rmM;12Bb6nX*jJ^ zufrnY)hBq%pk+x-rt=yvI16GYDHm;N%!pC(FXnbMgsgQ-$-pwyxI_N%2F2FJm-c*t z!F}FBIvQ9M-LoF=i@TrjG2wMbzHt2{#O*EzL%+)17R1`(vhh+@QSYV8e!n z=`J>#wrqUgg?RlfA42biN`kJpewYk@_Uk429Ti%Uc1F-ZF?mgK3XV==&1E8K%7Toe zM(Q1P!^|&kHV~)}3xYM4C4}cFch`$wGPf8J8L#UK^iSDP+aH@&0m}^IVLEG1dm34G zUCgmc6og6>kZjWO&lgG0S^Lii+s~WqP-2@tT#lKk{_;9lRqx9jnB8SrAyGmGn$f+v zZ18}|5DdMKHB{>Hy(=YLj+E9UMHGA#c1n+-kgJrI(4qc74=GKVrRFzRw@tz|6Fj=; zvE9OzmZyyYRoBJ1*P2&8I6&1dL`u54zr7EW=Es^ERE1s+8bW6$qV&{M-+py^*hj$! z$CrxSY+s40LUrx3NQ1(G`{-q<^$t>%ks)1q8aP5vO|XKSQjP|T<={H53{vNqXexJG zaYxc!YK~uCwoH>Z4)ugBp zrlRf*q4R27d1q_tG$au7;)?itRKRNp7fSN>ByKpmxH+n9*G3c4UU9(J4GFN7+u6S< z2i$J+W)kFvwu&W`(+u}(%wrnSkZN}y2~V{7zZS%`RU#|TGi5TJGW3Ail0M#+#i<~V zb7_iydH&n|0W2l+LfXu1!ibYLa3SDqs!!86j)9T{?>pY~Z8Quz(N^$SgF!sNxp zVGfV-SGkGZzOAuOo(NV+Z_w=;3=59#OSD4accM&wESRARPQF{`b^}B2Tzo#b&g?0CLmq4k-uYl;uAl}axDzmnnfrPWa6p=D zJiBq@T zdl(lV=W&u1_uM+^bzyXP?u#C=FM-!%nCKd_KaW9K0eYp^_?~zocBjHsGMAdZFXN(& zT>%cG0SbI1k5G_kwwtW9yIq}xn@;B-wY!D*pWz2{l#jrE!^wcDHK`LJw{Ne$GWIf= zgXCRy#49>!Q0doN+j^5bFNX$8=LPCz`-Lm)$|~}oXKi>K+n7@2qz^5F;PY33Wh|jb zT8g)tx#XOh5U17mzqMu%{Ty>h|6P~871B;>6UqLyC1k!jgzn1GcscuBZOa9pfwgC1n8r|wXN!V5N|qM z&Chl!`ZKSY6hM^D>X3a#a+&OMKEu83UHp*l$Lpfr%^Gn6LXzH)7OCq4A0HGG3Y9GH z0z$h_2kht6CvwK~5|(Z?NtDL8iEymQ;U9kt%35T?_3QW`at?Bw&b_?UuNVjSSU!z}^C7I8XO=gVI~{s1yVJe)S@VR7Fb9q3B3< z7+IZ^l9sjWu&#nLmrvGMd>`Q#M$#R;$l0~QCZhC3RT>Fz5ci9-42`V4(ybnGB6CC4 zF;mQVKm*lLVFJN>+!o#+s~hNO%YgeRgRLcqVANII%L}h>k^iz%gvzpVBdtsi(z)^u zctu)5oWG;HA>z$MiS6n&Jm8lthQUWpV&tj3Dk-?M@2&xyrRu*JmD0$m;QcWpf&L!? zRATyu+fA}adu+skgG72wVsW(+>(O>rcvG8Qsmk~%2ynENb0&2tG^Zf16z+jSX01$g zB||2?HV6Du!P~XJKZ94*Y5^z8vka8E}J)4GQJixfe2^e zMQ3i~2H7uwbPTDms0-Sb*1q(U29466To7rKh<0a+8o(D(M7Rl#m zwR48RtRhgt@ta}a%(6I`J((%G}r#>77Iu>=%zsqU@|LsT+ zbDW0}+*Lf!dBjkx1cI{pxP+v>?rhC$jJW~Eeg7h|P3f~eE`k&>NTEp zEzRGi$tW1o3U`ov4;-aee-ru;^C*m>~yGUI7%vA6%O{s~!f}ktEiwci0 zOZk7NoO3xKP(c`~E{JB}&swn>uiRb{Fr8DiDZP~WHo zrc2F9#gY+m`U9T4YRpaYXyssQWr-6{O`53<`>$>XdyB9g5y(`OeKgTYe0qHzl^_@B~9zXxbkO@kiNCsZEK6KX`>=jjik4_Wr?C z^M;X2cD+;g=%pgYU99B^ZKP2UCSkElx|{x^KTRWg!9xmCa%$AIOMbmmj0ESyia|A0 z5ThJ(hMGG~XvT1!_Jzq>RDZ=4Yqp_Z`+iK5x;Pqxz5DQ0ql%cNix^5P<(s2|pD^m^ zHyWy*dGO^pLJXGU*xp77V)l;VZ9{u(XFbZg55lY+lhk_x4r(p3nUlJ2c2>vo3}xpY zdz!ySQH2VMAJVWM+~uX~{@$VU14prjb_xquY5kdnp(mEufl_Fx^N=jaWYkH^umG{4 zfY*n>Fhax*kZ?#p99r?x%k^Fb9RE41W6nVDZb>QG z?MZ4i?U+d>WFgu0O1% z?a`17@v2;NAxLrW7^2p$1V1cS}ci%#OUltHVh+j;DAt#_Skn~#3UW<>cN>x z0vy!NNnc6V-x2v7^?xO}I(aH(rD2wADP^!0B>d>A@h%Xa<&HW6|Cr#%y&F7FVNPrXM zWJnQ-%fen1$1*(&?u(U*!X#!&q9pP8d*TB+{549A5@WCyBA2#bgvXa989esjMNG}QMhm=)Nc}BtIBwl< zq&@Zi=}7fL2XEumpMj_ScCr#Y<@2LYBDubTwXT!a6Eg0=RwESnE!YOi+xdFh!Y(6o z9^H7puga!!4R$;#Y=*Os`o4LJ(nWsM{b&$Bisqnx_?%C4<7NGAVNhNIz0bal5?oqi zH!*;}HK@xj9=Zrao%PS4nxO{-pUtkXnxlN@Uj1hXw#g=NsNME>=*r+DgF|KM zWIj}kN$cRyT=dy^RCHKfN9ayeF$$&YY!(|PLJXja?Y`NWe&cZ$Pyn!3qd2h*tf|rY zjK?@A^cj^3_E%Sc?eY}sdl)-A8qC*sOF2J>!+qzcCG?WPTurI6*Z_7cQ~3~z!ZJz2 z7Fe_|79xqWH7NMj4tSD0;utI>^W^nsTS_^I^b@1~wRN#F{|tKhaH_?hFXy`MFJH#2 zUgHOa-9}wu0kWC+y_y;+T)F`av9Ew`@rcJb+D>cUItlui@2{}t=60U-jvRjd!4C?6 zAJ?Q%$MG~~fqsn-f*!i)7(7=QFztnBevF51=4HjQ=E)hGiy_eVBPp`FK|04&HX<-WN7;eAXz1ZQ zj#9QszcJWtrXYV^AE6p&<%plUmcinV2CJjp3Z3hvq@tkv6F14Ab_;W?c@;M>)B)DB zR}4#-?ecb}OROJEHo!^vN39o)@ln4gq0hRKW&+_=_WyYRAcK&2quJFfr?(I!eslHX|_ z5N@hfBSB-KfOM|<#0?puBZIWivBglvyhb=rJQun~8(=s0rgyB#@FTKL%`#O6D)r=+ z+xAvPQgxg%C4L(aOiEQ8w0F3J*M9pNW0XjGQ2W-xq=wl8i($p0lhgMg$b(O;w| z^@T-XjcqDbD1585LPs6qF*df|?icjXru-a6lglTYOlJNWgqxI0$-RVAN#hzB0XEQs z?5vRN9J2$?t8;VmU&W^!p zviQ^{oab}$Bt!faiAaIGl?al_#N+lCN<1%9i-k1Wi`QnpralBC1RQPn$`A^RW-tHhIRn5F>6nt@%kqIkt?mEM2vg7(?zZDUfWh zre5`uw^aN`e={vob!&L{_ck7{S_1IzC5SSAsH8tY1`kWDaT`)fkC;6=q4}0JbjCR| zk$&P(5c$OT?;A@ASw?c3JyOJDqc_@$wHSrK>rnvvBZm!O@$@@F#$0;+&!q%|VKD?F zV-hbg9^Y^L%TRB~XMw>0UK#Hv*0#&$PiO3x6TPvz=^;r=6zUchfk5kd&<(E(8k>!` zx<t?p840Uw7!x7Ty)Yi(?#J z40=08$A9cQ@j2lmv;ok?I@m#5Ki+KK(^1#LAo9$s(a#^dyqm82AU?mn@~1v#z}xLd z81nYej1I<%ea{xy8nddkk-kMOk^S@gzXl-~5unhCP&`QCq9jc0ztx*`{!k8rv9jWg zuyWVb@#Xxm(jndk8soTwbWV$> zn#2V(MS7n#fq;QGD8m^)NS1FVKCi%c_ouCmNXjsc2Q2=v`9nV? zeqZ9N1oO+R=z+$}Hs*{vVIa)ouAhJHd>NRqqmzjd-KsgN{NWhV1u@_REX zjWi?290mxLbvN}`ELD~|a0y$aR+2`TauAn`ypqTlaf(TaNgj*C2){TAHpV9emV1}v zj5UTZTj>l_P5SXPo+@s)ozpN(6s0Q#Wuo~~IQ<`a~hUjxVMV?`L1`PsdRMdq1Ohj$e z*^DOM4eEY9Bq=?R*#IiVE=R`04DHLR=V>M1qaGPjhwXTx7?66XSNQ1bga(hAVV_}1~c`C z55J((WtF5bxZ53pTDyINFj}Dpahh_5Nu#w<)`Y1oRReR0TV-BznR6?U_9B*YrJ1H* zTwzqV%Pk}H7;*?8<--t8g?*KqsJU%4=8G1JHv5c-)zaK39B`UAsSJ2K0N>ME7~4PT>hyxfgg*<2%GIV87bYwE^3tg(aeM|s0?+e z?(>HGqwR$eR`wOuc{rF&?axV2P9#n9Y)3`s{`2b2xHxNSg$DMZdIj-6+yg*e7-!)V zrdOtQy!qY*#1?M>Im%?Eghieuf47M&#enULA!J8i~YG_@#duma!d$KxZ>PqhD{vNo$Pe7`FMTQF*AK$z_!ZI@=zgR3wUfN=@m&5C|YBZg|-4W zZyQgf4bQl;1VdzgOopG@m5Cmk(_gkuZL@;$4~q2MsXt3=nU6qxIFLCJSotsgL5t}( zN+Sz*T`}_-Ix+vzV9_55YCBUCx-;>`irb#JEwh^XfvRu)T<>mJ#t6j?U{3;nb}xBr zzm!HjbDW@vP}n)xiI!v;-#CxqPkDoLi_;hpjYkXOd0og^dsnJ(1G7^wN2bp za=m^tyC&VYq?XH(i9?vE6$xxh$4yFxWo#&pyv%na*R?zti!Qi1vj-~%9(k1ovrDOy z2fx=r+hGb~ne#DAXM~T4A!7to>@LVtNdmnx@{{8choC zr1U6X0<-bc{hB{X8-~$RGOk6LQfZ?jt(L-9$+~eP`tAKnB>U5B1Gig4f?HYTcN=3u zC{h1iUHzMNw;N^a;#V|Ey^H15$Ps8VBW*X~t-=y%Q*NQarPQ0FRd%G7{*~dPH!Vj7 zN7Z>C<3UjzJ+L5DkU&=*Duin$jqt7i>j?UkhKWkq2tGcBPj()~x>?rbFjd$F8K^m^ zmVsHMgjmd(YPsN!Xpml{3%sVJBrvLLrGt9=7iaA`#5!=ctjN{dmIlK(1h$Eo0_6Yql=j-}YGKdGJNxL~1f@Okh!q)#F#y2m_l#xaYQCBu~-0r&qr z?f;4?!VP z4(+1eizB2CD0@nNuF)bqzW9{Q$~xQdg43W+-Bs_XoIM(QfGAVhblp-s_4~@L-A%oP zbKty~-h1!w7M{J!sdIe+{oN})9F3`d(@tR~uo@UcRn>L4Fk@N0AC*^K1Hqia%Gq)-+UUv*dw$Pn7vk(Xc6bEhJy+f4ttd)3 zBVza;DtnY%_gjK`WYT$!_H#kW?hy*dwm|_bhJup-9<^O-qLoKi&rfT=mMB2}&kOqZ z286%9{ACE#Wbg!2lDB%uu=P%laH)iU>(Mz0EW%nXn;8##iHZt)5aome(=Hz*71Sk= z*!NUwzEl6=BrtWpm~ICKsIe+?%y?M}EY}Ec)zTY8cKzB>h^iS~FBB%Lp7(OghHiHs zQ`LjU@7<1;hQx6t!+Hp^R<#71@^SkI+{J8qJ){7FyEv|uf52VSf~$U#BDxD~FMWs6 zZj;pKg)+PSDls>NUgOTE2~vy)j88FdCj7F5VB!bkbHantJbHrxgj4mxvy4e9gd;f#d7%b>76w;fEr=Ar;)0BjS*G zd+P^3{c9fLQ~%18df^WCb7a=(Q~Ni%Q-&+Uj?YtIYfKjqADv`Y?)=7TXFPS$kU?t{ zhwd8qvrO9`q>mF22tHn`ZqMB3I5IqxVjVy@nYfvB5X@De+A$%E4$`F(VY7L75_7@y zq@g^`l>Nx6RK$lgykbH2S1OJ=C)C)TijHa4S<9SY*#EaWfi>0lf3vx`Mz4t!x^HCs zepk+hHW$4>v&BP9Q-_k5yf?eu@m75|8fXuq^)U3RJG;A^p5h}rs#V~y`)a}E)cuX$ z%tF0OO)GTxQDbqD;e4ideO7L-uiX%J* znWEFsiz2m?Yg`w$hf>Lr%enEuv}J1HPjTnoc(P|fg9ScrfQwx;2dmVCzAI05`k8=w`fH&cr$fjR=wKtRCZ z^y~NKb86v*8rILmmH~WKHbG?{B$R!kAAR+;Ob@*E$nL~e0o(k^Rftmb8^2SLzbxNx z+Hl=>@T+TR`{^KG1SD7T;J94}SF+0;KE@F>q34iP{4c9(f3DfN<9yFj1AX7&O%>@K zeI@|nv#}oX;*xlw<@*yjg6Gmnq)NOv_itV21To%q|LASa76xRvh(j{$NsEUB~5ipt=D1N8Qlo6XHtK-a_qT|u|wSg$N4A<*4wP2sfHg;?u@`sg1O1h-mWmEcdgrP{9kCIVN9E_d=9w$9c zsaK&cz%%0~M@onPj+S~iEM4dJq$)KY*`e`&Z$S;jwG-GVLw=z{><`v1t@#!sy_+}6 z99zMFo%?aOcDdb};~(dEqp-LEM2aVTZ%aY~E>@8b1m3}$uFuTP4jF-~KO#fr z9g!V;x{_T;wcSKqv)ksA@4Z~&_L3=)T2j8~_KINAmEZwV8tDDv3kb+2*qcYXKB(s( zbsl=V5eItL6kOb$@Hr?<6O{LPCv#u)4&kvkPjzEN{0!NL-wZ#(H~w$ z`8{wRzVOd=iarLaL_(VKUxR&Ks{=oGGiBm^IyWVRN{H@$H0<#U{R}*6YBCAerBbFh zY!X@Y^ygo@fmw3P^!fO6t`rQ-+H8m7*++I^^NfBQk0&8A>?SpgeC}M7+Tpho4QGMj z!Nzttr{FPf&)wYPno}&Y~s7dYSez!R2Y^&@kgh(z`6Wb@S#-& z&DpKUNjpfG9CJg;A<&uGpb4$wJTwn%wkJel7&->-UUmDkdo`l2wP|cSB`VCA zh*EAsr~|ur)eelOEmYACiz-Mf2GDZ}A2Btf>l^3OBdKEP`>kqSkM&bRmJeh{w*!K095R(ZOdeE=gjT=@ zZ-jQ;J#uvh>#FpOH}e&T|B4>`j3v8!LOT`PD_zUqI5X9#*@=gNS>m@I4!y){d;C!| z6y5`eU~dm^4uZ)!-Hs!(ivg0@QrP1t46f@ir3Zj^gW4=DY5k-bwv{9Lr#3`5u?2i zL7dvqa_R?}R@?3iEnkn$?YyKiz8?U0RQ9-GJ$%U)k36Z@#Bg`Y$Y#Rp{XExS;X*%D zgAG!OK1^3WV>ksLW1U_{HE$e&8}Hs{Wo~+bb#k7}pms{tA-8P&{e!eJ&BgRJ&fBI0BZ144#5o}t7(3PCE)nHx*4|wXp|_s+AoWDRar^j4S(SVN4bYS8F#J~ z(=(4f?%_n11Fk_5?Q4b7c3W6xcj0pqP~hs)HI$PRk~g?^VBZT)@mn(o@H63BW#ws0 zgX=C1-tNN`NtliHsvjuWeeTfQ1tO|X$P?X_AC8>6j10ZIhIMUN@QN6rCztuG5_ARQ z?mGZe#IKJ;HYQkIyouO5^72rdA|{p5?WuvX4dI0y(^8DidE?nR7a=<0_**j@kzKn9 zY*Tk5fY^)zt@OcVw9SAQ)lcLEOmhP?hf)A@ucoJ0=f`<`vAmPL$Ms#MfQh+iNR}?iK|KRvgG&in1S@)QgT#GHcD<9h)}9fE>65Q8f~`lM zpQ`3gz7g4<4XbJ;m&+|J+AZUP5cn)@&XuAOLc@jzL?}v2(imlCPl&d6tk>EFjpk(r zL&U674YIe-$4|jKSlBRtwK1Ik&wEwJ00q0y~>f zBd{f&y7(ztwQC{Z@NecbrLwD8pdF#^aX;$5m!1X|Vt?r9Y8@b4}B}5r{H&r)ft;hl@FYF}8 zzyQ8V6+|+^VDOrW1A8Yz)L^L|(j=aPV223&Li`uePsoZEl^BSo@@8MQHTcaPrji5? zbsLaV<=*PfD6=LgJV-tEtq>TM$+CZCG-_*8F;A7;zvebAN169g*h>zA5P~})OtC18 zv!FDUC;TN|`8n%&+}D@nGl?Mi8^r_yhpuYS^qU#% zaF6pLgBup>SDG#D;O8&u*t4z}dZ)HkU5hGL@6jhQQ9a$9$X_4icSJ6e%ugDKKo%|| z;Gl_*gYH>8b$V7=cU`f!uBqgE`hBwdA|GMHquQ+Wb1D;WjA|I{GZ|~?FZ=BWlElBz%%GRXmKxu! zbp9JGT?)bgNiPK$x<|DH!<-K2qE0r5$@h26!r-t2%FQmHvw+sU=Ihgp?EQlxmqjIi z0z}dP|2bHbok0K=Jz3aEuWx%!pjFj)E^!GZ*DhS42qFZm$`Bm`C6)~K5%10DS_2eu zkcqr-Mw?Lh;Fw;wzsk79D2C<)NOxHmW`rVU>5n-RW~pM5rEg5SRsjeK@`4e?VTA#Z zl%JD@{CKqRaS*@%w%IT1#fXS3TY+tkDZLW()cON|nz$d7wdwcQ? zXdwx{A5&*OMd%M*&P>NVpnkdy8d#R)w1@uesWNA;eslOfnD))b-N6{0% zFF*bG7)6}o2LhD`#rh_x_Sk2#-+J$@*%Em`2XZQetrLhjf=?&o2xESdTK6(MtxGmHStY7g3~VSAyLREVGd7^4C8O+VRzub0W-7h&4% zR?SkArU}lGBcFg@vm1Wh_y7(EfAG)$>V~L)Hv*VsUHWBR$s+oTdLG=C@#IaZBEt*U zF~8o~U-i|V|N3fAsl%sqnq30SNQ|AaeE`g1(XuR@Mh>yxDvl^z+ST;~lGyrf4Zpg$Je zpYv~;)iS@fxC1F?1rLJ z%vYB-M!{?BcLv4$9dgaqt{fm&Oqtgp^!;8oqhBlqr?n6uLP+#qAn2chwiFj;-TlXd z#WT`?1E3G#P55F2j8!il9vJ(|xxt^sbm4g@7E+T6Hu%w}+O!@O>GeU-31IvYi1RDd z6|ca=5JF*NY3WTYMIELs21Uw)cxKh|*t{C43eNB%LnlOy4 z8Ov}HPX;wjG6-&LMtoY$@4hOO0%AvyoTL&*tCo!rA_cW&829tpfvQQ=S!SbVkc{YM z?LWJmwfw&%bjlQWIbVkgX$5YooUtd#D=@@~K+z#%n}aQrrKkTx!~#E1dcR)s|NTN~ zNJ-zuPLq1`^05QkK)o_n5&;9fr}+bEo_`$@-F-nKU@A}-K#~8WrNZ{n=UYGUxnQdT;YEQ9}M?lH~C~#+i zx`^#`ZQ5{nOn=jj1#LzT0K__YMDEKml?R)ELprZ5v~clkSH@x4P|r@+WKi+LGN4se zGktTKsFCU-*u69FOB|eI0o>6<)&l8=f94ZiE(Rp$0BLV8_4=|n*s~INbD%n>=g6YR zFFaJ0aiENBrILY+^)GE)A>`?AM~xe#FXI7c3gsCgao9b&{QF#5QU9x2i+7YvHr2}Q z=T2z_0(y;4Z&@R~t?4&yhnNGmQb6yMbKmR|Qp*K@KGkvRZ?`>e3-e`-E6)lq{P7G- z?Xm%?-6Lxfh~6lKZ_8#R#AOPz1LUrPd`vxas&l_kLRvGDB#s)5KVb@~sqjPo$+OFB zT@%J1!3sGWn(8k+)WWHLQ}6oOLd2#jM2sdzu3{LKoxf|no}vQ1R;deo$hl!`0zyi- z4AIg{vN!4vi=(DH{WEab#m5xR;Jjd2{O6^AR8HuIrOJKrP^C4LePMWKrBa&*mB zcoqh;M=2J~xKhW>3gs~;YVf_4FI$|v(D3~|3i@YWs?GrZ1DwqJv%*Bjf}y5$%emRUd)wZx+L$Za2hTkYlsT9z7B2Z6LoP-m^J`w zhW!UnGb`)VSb}f@ItF_EK&gCxGB!K3b^;YS{7XA>yBs#vW=hEs891wR&QzxkJOXw6zLYs$Zk()@<}? z>adB>6$zjkilCyG%(6xx7#f#|hQdvKK(X~ok&#Ww+KtZs$a`?8YjZ4WBe!PebcZML=FYTxrH z!8WGbLzN^SPL-s=S)4-@QYSwtIN50#VoYQVNu!t}p$RnB8r>adiWmZ@}8$wsHe3*v-sWj-q1Mp3m;@c z%D#fR1Fi1ev{FNXR+L*SNpnL^uIs`5?(SpDbWe!hiOGq)5icv=;OXb0IH(4ji#9~M8m)i zcuEnB!&+H`JqvhdFT+fie1@a)sPXb%;`C;IF0K@CXY!T0A%EP6C-HJa{xvr&(b$l>c6u4|T5AAAW`IG7>Xo_WsI zmwrK^BvFuG0BxJ@^Y~SF?YpUR_Q*dA$khkzWHl$>!XAQrdoshn6{ttYTfSy~+8e#> zIS8&_==y>z>}^h@YLcQ?T8e7ZTO8W?vaY<^@nUKlaPJ4Un|^I~neqZ+Gtrws%+qac zjeOrjXnPzqZ5tyvI=Kb~Otak)G1~J@>2PcMqkaAA0VmX9r|xC~2ps_Q;7%ZArrW9& z8AoG^2ye|Z3ktL$1Cilp0UhtGMjrU+ys>+p6kj7qI~i7YgjkDm)NIKMlK4#XCy?T^ zd@X)1+DNm)E**`CJ0lEHU7Hm$=&W@M`t*%~vNVghVW1mwQ}S(W5lf)b7EzNPolewv zw^m6iLxK!W)mw;a9x#z?O-xn*?UH?`E8lZN;%ED6MMJ3KA+GI4I%-AmV_+y6#bqZb z&!HB0?hs`TVg^qIof%2qeR?HR!+!=XoAX9rH}GHu+53&y~${Jq+`~4W_zuT@dz~(mYV{l}Fon+(*fL-iG=5w|j%Htv=L!@*x|s8)*9Z z66ix)9d@?oLmg$cy05V93OLoq3()5iPE8{6vtc)xN{G?6@%X`X> z%a|GJE5Sf<1bNS4xH7m`IM@L^+ zhQH2Do;ReXyD^fUaVL2c;TwFp;+4`r=-5>QhE;cQZc55(0{0+g`M6o%+8>d2r-v7z zZrF6Te3OoMKyFMBR@V^}`>i-4Eu_5!;HAFgA}{vP(_vDQlQuYPs%na~U;W+lw?r@n zGKHt{;5sL8E2*xKtBi)4F0$;)HS=BhsUsAI$L8?1jVJ5rxperQWN4J{CGj^NFSd@1rQNM1JUJM$|I%&W}=3{-Z{XTWJ!Tn;uU zt$xMd(pz?NH$iOb|yJIG(o!#m`tu3l1mKvSsmUefTN6Dqrz z5cOglb0_4F3dBYPHnk+ww^E)eV-*17oNl0`>XOMeDFJ^5CMuJz^W?U|p5}Y+@RLK$ zEhD z<1hK%S9j^+B^te4ZW*DiRlj^2tMDf>up^Y9TC(F{w8kNn@To67YNxr*zq5Q(k*6LQ zKL(O_!#ra~6m@-ismd99Rz4g4g-Cihbe-J>M5l}qOamqhFfk`NN})+N8Axb#Rx$rQ*%%h!lVwsF6STK!tZR**U_i$twpVjXzBA3Yj5MqYljTY zX~yTmI{29hK*3q{v_r|Eg6!Djc|hbS9+5w}4jg!}BUuefV-i@rS#;W-Y-DM({neOk z>Lh#D#LhUumyH#Kvo}QMpbHHwc$ZW!0}O$-mq@S=HR?pw;9mhQ>z*NWlDQJFXCnaEWUltvuyz!r&e&nO_1Vi!j@x$sP0atpj&q7Vx6sEoFa>(0-m- zS!yDpoQZ#IAb9JGX|mGV4-I`km9~DwUMW#0q(~Sg@v2bvexEnURQq)X(}n3?kRDf| zoRhK6Vr;{OZ8{f#phYF8v%_bcOlt6qQZV5!!T+yP8EAYL!HVKam49nR=biNJOFl+^ zdj;Y1aqMY2n(^n_1F}Wz&ZSNzn#g#;iJx|=g4tfq>{U8Wq~NLZfE5*q_EWZvMU!~T zE|48{dNBj*#(q99TGX_*`y!o$tbqCYzSE)0lu#R@?2jl%yW6)$;e|9B>bs<^WuQj) zsB&-inekDQ`dNQyK9oSJVEu0K>Nv~p5c}aPIKQmdp=)&SP{G00tgeoDmmAlUc*<7v z-&U7%xCu8vt4p@#GN94rbBJs2_=R@BfzJord~84+@fX;T4NjQBi{rqcG|ZtC$IG=w zjf*-LR43`VB1}-fhaT5iwoOnXhDf8bJqgl3#UK;ZD~s@*95URPAZKC{;AF_RJtEQy zXzQSn9faw@j!P9-;dB-EDS|sVQRPE}(^SPje|}|1a%TTEN* zr2$r5$SBel{6i1oLp%-`u@=!2*seZ43@6HuZdiR}Kn-6u@WLI>2VT=1(iLZKWyiDJ zDyAo*71l))kzT z#$GmO5Y4eliMEGB5x}581AGO$Nc2z^Jz>;edRx$3o63Jk$-}=2@a0sCW4I$Z36zEc zGEN-uX6dKOzc%DjcYEG5W4M%SZdT`ZvnqOP?ff(wyXnTrwEu*59P_9f>fjrlSqy3r zF&^jmy(fvYeijdP+B&=R5X%SCTBEG6j+{_bjJqXMcUPKxEp=i%YGQfSby?^e*AA*^u}Sx3BED5nK8+X^`=NIFiS*oBT8yJiHwCdT|E|;}`=JVXnrX zr)0WY;$~d^aYF8yA;Y{Q!TKo7FgOr@J*uu?p{@swuZg~iybKI)-{q}CdN<>oS{7IZ~D7J;WINO!q6pw-q!9bM<+h@tutPT*nsSQP%4DwJu5PW3MouWQJ#)Cn<^=+Um&(Yi`h%E*(knt4gHj z#SLq4uFHMDcU>0jl=#?_VSTuH-@#8M+~DxhH?HZm7X-wHaZ)I_da#Rm^F)e5vwgy* z)sCsM%I9ZgUW1SS=G)AAwEJ9qH0aU`Yg1MiC@`R$DMN(cSbvCBcBxY&_j?{SkN{U) zFt2H9dK2rGbg_JI2!l=-5BU2RAi%bX^4DYNqt`rMko0Y^IVewr4-F|aktXv!mFqqp zMHAwK_?l#L*_%vK<;PVPA!;#Hblu6*LhiiFz5uj-wU6&YNYdvO?C2j-T8y&9+ejRb zI+bIvn4)#rBo~~DYakoU47m^K$qG7*OfvfpqEO%;F@2?rwGR0$PN|@aK9tK30O-c0 z#{};WfBvtf(*%WDO=PG(xrDA1NEDoW#I(J;bb#9MN>Z`=sSrc!>G7MHyi}NC$pz`{ z?6v`_3F92t7h#L;bckHyU_Yo|T{U-(c~to6f%&wzv((|2v=oF^{?Fr2E^!)WOO8XV zwM`WIiKdWFf`xPOV9>Zn=u$GDyB)FJRb=5|9cbyUGI!b*MGXXWGmBg5;_K`dl$=Rf z05PZw_d6%a>B>356&1IBrQEVw0a_;v#38}Pz}Lyj6Cx9ymt5`SJwJ!{`JS&^`iIj( z`ll9is(n~u`l}KfiQpR~Jxp$HVJzO#Pw&d-(M3MuZ4zb#6?yKl{wN>e5}z=sB1c~( zN^eVf)g6*I%c{cBeP-P2W3w^8Hg)ux%C=Jw)SB^oVoQ@UTB)y-N-y1Kg0DL8_0Qh- zx(RK@M(2}W1)`PCl+l^S81M(9b2YiLQqUzwM_|zUVI&LD!i^A2H5L8$n{V>9>)|RO zd(x@nZL_QO=V)l*ae~5-bx%zVqIJGgXd*PaAZ;XAdy9ug?o#+H+{8>3NJIXRS}RMG z32u=}DfN|o1M~vrP*zf6e1=dmp3U5uh)*Wa1ArF3d>W~DB1|JmAF}?;HURar=P`^X zT^yX8QUfB3LBf(3vYm|13y!^CEDz5w$CM7X%H;ToSbixjjlu!;dSL9dYak`LK=*z# zWc607ffZorU0H-FA){X>BOfHvS^_;|5V4TVb9SlGktL>35uO?OWjb)(H-}RRp|1QG zxBg?r{KrpzBrD=~)?t-QP5L|V5FL@^VsKye{o1RAeJ(c{GK|r;CbfIwZhob5kD<^?Y)DN% z;4=5=Xow0nC$URxO;Jlsv~`jr^x7<7}zm`gkS;zOeb9` zp}x*J)J3Lc-U9TLxCJL93a9Fomjf4Y#hiD^2?fLy*C@bY?PU|NG0E}BBA>h`1Zo15hyiO zWaE=NvjL^yoYKNLUB!E=xe0udpjR(twe5q2?=?_^eQp{x0#)FaF0={XKD8e+MsK8I z8eTXIW~5JI-t)j7Y$fPsjg>|Kvr#iz_ zBJJC_ef^r~XA*2%>3kR0@XB2ZgbyQ}8$2FRe#wvudO4dau{8$VB)oIWS{4hC}-4@bg%k3kmUrc2Dpv78f5M2k{QF2ngxu+L(jWq{dO z&ylRF(#`Dv#TBHu@L_C~(21AhyEO6W>yvdkDuXUZ|8`ew{Pf;wqo`eI$PZWOjcnBXEaTH1Vfwu${_4Pz8^b5Jt{*EpkzQmK_WLiwNNmV+ z_s3^A9-E&rb5*p}lS#otu6Zonmt1B=Or~zy1*@j)5Wq4p{7ljp<~~=+r@3XhLhSL$ zs@$%(wh^doOqGTBZah|-`4f{T;kkd$R=j0)@~S92p2-L&(tulPmF*Bdj?Wf?qeJc; z#Qlw`rL;5+5plw!WNu-JD*T9DC3CJ2iIsj!n<)W3uQBHwX7qbuVp7{{O68TdlWSjF zw6Fc~>0xKs6OLPprCvd^cQ4RrekVa%Fa6&&)t|)~F4FaOTELfqc{D1n!#hKb%mH^) z(7~;)CQQr$JwrK)Nv8152cR=7T?_#p=6J*!I@K-EIbF;Ntc9kB0IhiT*WiOJ_M*BQ zna7oaEX3{r4j?>l%#L@3;`{|xb%^Xq;qM4Ds!y+RM;#&#z=-CrqlN$ zV%ksp#v_95`Gn~{%$PZHr3t83KFZKy??=4P?++l9*|>wd+;P&zvKUuR6#J&hr>i(j zzcqta7fErl*2OGyUMN{^cOkG$)3WUd%H&BrEcwvbM}fvnLKIinCYkTb%>>SY(#{@e zsMi7l3`S9bqo=>g)Mfe<8<~PupET&r->Q|TVX&&s0Z`XYWi1O*0(?0yN*R!J7>9R^APT`O-vRh^$2SgY%)6(=7r{`zJkr{@ZCBBnpD*MMZZDfuM6kl=Ce3@Y7uX@& zf>HkE1+X*IiLjFF+_~hh!&D~xAup!r<;b`EQDtrBY0nmqVf}bSbAs*!A^S1NQNOB) zsH$Gh_buSt9cyq*Y-aT0{bwXk2c}<*B8n=+;-e9DhaYjF-EdRv9=}Tj62-0+u(Z6{ z0!BY*?eqcsI{H?hHyQ}7C(8s4Jm4A@=13&3g3Et2Oj`Cj6CZY6_pmOX7tQ@d#Khs@ z?LO=Ie(YU`3%w42#|(qf{N4f?rNg5AG^d^lo5J3ql!dNUb2i6-(~%QJyh*f@VQv-j zw5VjyW7Lsoft_fz{|u%5@GfU`Z(MzIu4>f6W>&-^BLLYk~{IV zTrA%L*08w04Jmx^QU7h_CN99tLy!*-$t1RgF`|O0e1O7owby|L6SypToP=PAfGaJc&7ZMJc66)t21UQ83!CKae(lf48nr znxY7~J}Zl9bm+Ub*J4!FbJs?pW>9-nxfKTAWfS8suiaN*HjrTYOR39ZYfVISa? z2yAc?I~+es)V9iMF+^lQL)Tq$tad-5XKl=SZ0tug1oLzKZeP?_Est?3RPdg^kLDDcT} zYF$pHIEGNCJNLFX>dEY70IN0TY1B@dwxlMHLi@lx#pYUuVtt9jO?t={hG6CLQNAQy za@6DJ8$DN4?gfvJMu#m#V8>e6l}0i9MhYkfPw;v2vPb0B>xO&66JY$Z>T~Mo{9aWT z9-?!%Gut?9OdN6G=@Er}FXc;i@lC4`!@*W^-3bA}TVe4f))?ty6pdCYb7i8bcJ0Yw z9%rR#fZgFMDLIxKcLl4jmfrO@^jS6+jE}>JUNk6GBB4RQOcoZKQXa1<6?q=izTag5 zNUpRXd2trM`BtUMvjlfP)|~~$hsUD9YBCPk>`qsE0{yG|^bL?p^&aPFEQNI%Mi4^3 zTs!3X{#xz{YAtsKPRpkr(BU?G7VPb<%kTcAL7JpH@Ysb^g~UX~Qb?Z(W*V2`8Qtoz z2YuJ6$h}a{^sVXdeq9p{CitG*72{nvlY{1KDY)-vs$HDoyv5R_2C~fh@IBZLHJs(m zmGnhf*^gh*x*DFVDnJPZWXgpx0mjO_XrLddN?7vo8J1H}hwSCMAwO8+GI z!1$AHB72`7v4Wc`>Nt}9qnD(xQefbTF5ZNLHZvkLe*s(6Iv~9#ANu#=BUx+JyB0qC z%Z4dcc%dhj%jb-Uib*cXNW*&v865{$zR-Uu7kzLfm+z0z@*~ zlBaJul(E01E(uf1>HTi4Dhm*t+SFEBXowUPYRpGT2ZU@h8AMI!@9yHs*98pAX4clM zR8LX>jbbd~UD`O3J3E96uF{#w3MdFLGMBOeuoH03!+bg~h!XV>n1zd+*@c2tRh%K|%Ai!8_2I^k6Jsyug)T$1^SQi4Kfs9?Ww1;1D{sL@rKRedAW6 zOBDGzRfw4x(m2gA^m2R;HZUAjs6#t;eay2MensqX2XsQa4@Zv2rUQ;3-4BU(L?;~7 zqhzXYB?Rn=Y%Otk(u7JQ0UUGe1t|Toa+>qG>b3)7U5UPs;e{?#C0fN16Q#j*={2%I;Bn-7OX_B=I9tb!w5CSZuE2A zAviPDYCuJ&wszkYACIrCd4DaLM*atl2%m-F5M%r7_jid^s1z0HqL^bQsukUM{3BRUyQ z-R5A{t;_ihuCJh-$B7F*VHu{;CCb}U%+Zp|q+aZ>Z{XcBRIdemdc34wvNf5NqO?E9 zPOXDb@mTJUkhNU~;%b4BxA25Dim|D%Pd6)%ax!p~XPdyD+V)L5e_tU`4SI!%16xC2p0;FCSBnn=YqgoW0yb87- zRehx=`{w=)XN;kaX=g zxMPEYb)##tI~M|&6o!<9r`)5J2dCvc6lf^V7=Z|9VXgdbNR5xUXo+V^W055ZUu(|f zBzeC8LBzH?zp#8>?6L~Pa^^B`%lTS}k5`+2txoRT(5=eb(i&)mCV8-L6GmfWzleTn zC=Sy7d>VbO#`XP~(XXS8jx0^r(FWFGVbH`p5{%LjkmYHOz*P8?x)>wW4fU$u5&TvI z;z!_Xm{O}=dhgH-lgZm!c_cC%_00jt5@PZfE{WwF_R%dh3R&(Y-0m#{^kRWgDbtDI z`uv!)qHWb$4m4ozK;b*|YaQPmQG)4SBPSAL#`DX<1&@Rl30ZT8aQxh^_>oHk-@dB%!@K@Q9$(gQr(%kZJk1T9rbw=_Z z{rGRK)(6r5gIf}ud)6|)ONt@_xDQO(I9h=gC(>9i$?GbA*=lnUGXIjj*LH;jhP3m%FJMjvdTX*Ap_KI;p$iHy~*NVSD2c9y>o=CtF8=ytS3vlDGwPk^>c0h3a3vuOsHQ| zNRrx#6ZW2yP{Q^hF^uj#lJTa=A) z5^EB_21Kf++diSsBNyajKNnOCVN9zi>HU}!AQof#xwA`y`&qQ)W5!&Q&yPn)y)Q=I z?!0huSi91c0ecvqD%tI_$92-Nye_7zY39&o`&xz?$de}1Ff1_2#Jr$3^LAysKeqVi zE40O*_tyQZEmvW}_$#5#6ThYOk?(Q%w8xY>?nih?1&%<%^7E&Mfl==1icUuyt*(+Q zIhgvvsH^q#OkZpL4;uv%gQV~|UCVl>&X+?Dt$R`Yx%9fuz2ts|^5@f6P8Tz9_z6sa zX3&{!YB0_3a@ydFF`^dcsNoxZ9ZjF_7*;PMU(#IO6|mbuX{>HL+I_UhTeo}&MDr;^ zQlcy^>&=KV>v!zsG1M<&PKGEFD!SJcBU201r?e>C0#^gEct&i4l6#FUZ z*O(^YZ$0&R!l1L>e#FxJWyA!VBJO$Y4h64YPBfFfa8-T=a+PZb?K<6=Heu3 zGQwR33Y04aevG#JeV?q{bonA*u#CA^4a~V}gR}m$nJZq|XH~q0EvBB+l&`}xb=#?M zQ|BaW=>xOkUSqyb2f*xxzYjmE+Ip`FH}fVbeh%|^X}06t?#)9kJi<529v%t4g$WBH zmb=aKcXj1%vX|vz#j=oE^(}+-W+7G|574RAN)c2rMF~Hhz~izjh}k!@&Hs4H1T=D~ zcc@xklb-M~bw(n{yqyK{8wd66p`0au`M*OEQS-)CRf%1U;*<5ZHWN zQHm-opDSdxkM6l6lBbLeD@OH4t>xkyO+x_uETmHD_V$B0nazsdv+eEq;N!9N-1B}mn>-<_JZ-8mB%4ve zi|=)3$?co!g7u^kb-bkt>le}!SIjkp2@2Jk3R5gRO+rjHZ%j?mec2X+!h58AP__~g zof(+S9F~2R@i$oD(On`yH9st40ljhJi6As%5y<=K8{svt7i!5GvEy<`IMH z7Ymmlrg3nJH64Q~%3+KD<6ielOJ7BS2{zU=^uO5|P+%MPY${+Qo*6b&H*ADgNMFUo zXVhK_#eB&GLpkFtFq|C+X(q>%XB4WIQX`wxpQ?|%I~zXDo99YbFKuyg^BFEO(+Gks zQ`9~|sWE92hbC~Hpq3W%S9oFi@!|WdqV%Twxq1Yy*K)I|Hj>p#d9mkkHV7ec692{r zd{ZP8(%^O1Y(^JWn5o5O-7?=XYWZ!;(*A@wh-85FsAL&IY4N!B5#i|IPGY)hgE(4x$ddky4a1n+Yi;i|DXkyxd%s7LhB&nH9`9CD3@ zaeYa|L`!T~qJTvu(kv0&h^WC-98=V|$bJtM?9wwicp@2HwAGjr=8K_knxCNIEM~xA zVwyb5**)M+ly#k@vRL4TM3rEJ3A!3+>Z7H5qdu`l_C*vESFbS<2Uk)g2mWiBXu>>n z1h^cNBqV4gcRmI?5qXZE;CvqKiC3AOs9>R42_2wd@)jz- zG;|lP)gX;6ii-nQI5}2hA3Bb-vGsW8CpA@C_~C4!7u;n%6^jYoiNz~M5dQwdRwtT^vXj0u1pNP)?VZ4dQQ;6%h(e9s{ zCr3-CJkwuKW6}6~XEb_VlHAmE(`i1PohInI_Igjvx=dOzCoNEbQc_2>pFVyKw*1~T zqxrg{(!?av1@pMq`x{Np7x1UfM8;$pCrf3HZRmWnz5GxP2_yRD#3N-mb7&o^oJ>b+ zh%{%kNp^KXhc8fH-n58S6dd-m^POlX_tADti9m$TTT2cgkK7F-M5El zklA<4O()NifLlD0UegzXa$K47kJ;>~YH}Hy@jYE2g|R?Un@0YmX%(fe%Hc7nxoB zj*|mZGvUTnS6Yd7p3rqu{kF)Cgi&Vg><)41R$@rO!H%eLfGPZiyk7^EC|=rSSeY9u z%^&L}9yNMlmokXqJWMoeG8@%Z+wyVFaN>)o7~}Y^?$TTIlfF z;b+KD0V3T<%smo*j=B%{mX!l`gdJe*_q+k?&?3xOAv_e!on<~iZS9`h7+8ciXU!Ou zoT~|HO7g4WShS>$EH5za7OpTMVI;x9*Um0k+q{@!EtaBA(un?Q7X)tR!$*BaspQXB z4PR^G$lNvw--fI5FGOOOw>vEf%q6lN8>Zk#Ky&}!lD z{w_8(yT`YnugKf6{{1xWM7x?5xZ>jDgHWSsW(-8Lp9ET~RE}0eHG;v>6&vo)hEJsC z?tg?GR3#Z*4W~7QCiELCc*4gd%!w0vd#L7x{D#7zkD?dH@GX; zr;maQa&8(BDb|&?wl~a76nIb0Y#yXvsHjD6$l+~`4DgD9pY1y=vGk{Xr|X!Eyng01 z(4?zM;4P)r96Gx}r<@NFH?ve=!;)^1ghqmbajmC98%d)Ni@GZs*{@Dj8F|xj0Q;jK z`D)#Fk&jShUSKkMP{8;5<+ke#tnZ|h>u{jXlhwHBfQXmQp0O z0{7dNRG>G{g)-ko7se#Zdo#=LilqK(fR0GTw}?pOi!P>%qx|q3_RD-felpyI z#_u7#BH_Ir?m$l-5rV|}IY4y*WXT2ftScUZV9n{_$#?E1M+ZLzgzTB=JF|`=t=nGR%Dv)7f%e2s05qM6Okp# z@3GG(7>6M+u3-%B4fC7qa{&8KWt;7iO5 zu-~_Y@j5#m>mL}MVi?LhQr;#N0Y?73J z*5(3TEEk<*a03Z(zTXj^cJ%?CZMUhgn#(S+z%~2RR8(KfaWB?G&Ns>jH+u~huS03v zQ&Gp~HxP=~?iTOg(y_ht5sLX%Bd;zp2al`~)s|fu(!AQT6Q=+q_SFQG&Z0Cev@Bl!I`eCKq?pySOsYZTFS$0HQABx%bS{B)JwmG zIu%HQp9mrDdt+nDn7DcwmG;Z7ihCfBj&CCQV@1(9ZADX%58o7o9XNI#TPD~2RvBi< zryKX7n_+26@qvq>(LI84mLJeOyeuU8>}E{sHki(VbUo;2CQ#np|3n^7w@@U1Io>yQRq`#(c|i^#GgVOE7?bU#5^22LEBDix z^+resAfszfv_N)AGXj@yCg3e7kb&j=2}QtV_!qMb1CdN;lpa{g8-+{Lm^wh%2E9Yz zS|*{TWiVIo&wg7P@S*kL(6>&yL$1R2BzEoB{0X^?g+ton6O@Y+S%Yh7;tbo;4;`B6X)|^%(N(MkO7hS)ha{;}(nfEI3odT8V{UhISx!i25b10c|1b zKnw>XPwrIqL|ba~UzLhV$h#dCs$IN%@{Yy$ynCvbURB2~cKi6a${Nh|d>5S-C`mKp z*#oqrdCvK+j8O50e590mtDrc$2VL%~tv=f;q}shK9#ks)kAlB5iAg|0b`YIoNgMbS z*etyX-m^#{Z9PI|F=hy)eyXS4WegWbXCdCwY~3^NM(>fhIJ zFZfHYtXos?3C@ZtW4hIbe7khZ^*Gx4jQuG`H*(ecdGXm5dH3lj6pmjpXwnODDayg; z(Bc1L7ys&nvtD5Q+ZW>bmg~>t+%E1d+P+jx*;iOLNnWs#fp94kLbBuL=jIO@N^I~S@|Md;ZuZtz(Lo4GA4@OF<(`#Wci!{(Cgt%^O6z4mG z@>B2;%|@!N(1NXcq%qFu`>E=~DEuy^72b5VK>K7W>B22~PKbGPbpOy?^7T452U*zz zHP=@unkM0y31zcA9tn`kCWwwlSn;5_nSmV1YFFGS;ESF;=H8MU=+;1OAs7>1%C<$z zEx*;Q2FD`WU5QSU*v zN5OUg-1bWB+;g#V6Zc$A8X?S>8m~V})M-AHnf=sR3_oA6%-{Y6xt7@iCWxFN2ypr+ zP8t-e(-G`JxEw`e(Hb3shq<3Du{8u#QVW34X(5=2Lfl+D=*J=kdOo28+bZGNv{iy0 zmyG(DP`Mo|YclI4y_<8qe%+(7XcgBK7$nKtlxVMI+^d(>66Q0YB<@_7}SbOunHiFHCQ684;eUq{(FYr!Y|5tzC ze)Jv_j4T{Wt^f9J0yg=d(h1a;p1tQmqEhTq>s__p{c;Y9LuLKX0#HmJITC=kJ)XZaU|K5~md3 zL=$mh>5Uxrbta?dDyOPlLTP6hje<|fuPjA*GK#T<->Ss!T**R>iYP}JeTn78`jweJ zA?_!|<#){8%FU`d@}^a35GVB9w90WUx5&&ef~ql`5P$Q)wZ>2>SLXge8>6ra+fS=U z6s_b{9JZio9?l~6xC%Y>iB{a+o=y8Z0L-14TGSQh)f_eZK0%-pXQ;&j$w4V7U5DUL z>jZko_>)np;J&x8xyIhOWg7gLC;s%z6A9Bn4#4ENaBGM>=k^-4jnQ#pGS{SfT^%#9 zN8F{w>bkC=yoU&q!2o1EgW*)0wt>)fV1+jB)#s5X!@-D5ulmTgfX|q zcM|p$m#vzmH=HpbJPQX5&=r3_3F+i(T--v4@j!gSj~b$L)cW7@X%u->#u5vA@_Qw9 zB?(dcjuR3nijS+<&42nOR>(NF00FaeiS|tvvI03z$TT0@qHEFSC!Wu@6>kj6ZcXbu zG}~Nis%+Z&P1fC!k%GlM41Yl5zX=!`$g+DuM}6y*h3l1_`qg`L^Xb&}k3>~D7?WVU zY ztb3e!7z~L#QrE~` zt8$bL_&}_r#5Nm-H&*8W?KG%7Fna9UQqGG517Hs~RvH9~6PK5t8ID2}`r&X(JhLNJe>E%<)m-}hjA^X@nfSQzq zLa(~8jx1kfF;Cg4gNBxWt>?;7`x z@Qy|*=9^g;556ohNFvjgoMKE}u|DN=^H8w*F}%cX;=M4~Kd}kFrpiAhE^0>v9vGUO zSm-`IV2eabnY$FU)`}_a(%WlZKGw_7xu=DGrhXqYteWjmS7e)_pTfcledCx=cs7gv zf)gcGIeHrq4bh1mQ}9A<_&JOXk4^wH@1V^T(rj^Jjn~pgIFEWPkY;T4T7Q{gp$UsA z_tQ$ONn1J6XqZG24^K!o85xA&!HGgvHfd4y{);54T}J;{l%uoZ{R_eZt=7naF;lAF zFVBQ?3H5KSC2~$gesC#3w5UkkQ#=oiLJn$3xXhTnB+-wK|9e6HnPjS>h1q?UO}ogA zi95KdrA;@;e1!M}uUn~*Vgzp-tlum_2g}xjVo^w-vHq=mvQdxN$ z!-RR%){bBOp?GBdDFwgCQl_K~VNY!q@Pp7lKg;X^avG7cQH<$SZM>2e1thbPF@aGm1pI9)AeH08&bcjiH}4Hh3$5bZ4Jjqx;> z>073z_X{zSn<|R}LY>t0jp~45=f^jYL}LF(BH@*y5?>+_` z?0Y>Xo3W#u0UvjOu!pmf(0BcpE+p0{!tey|QSYc^iO%v|f|{(;b!o8U2rc3@8zuL3 z>h?Fa<*;5YN4E_j86VFE-X|DAj zwLD*e=)UEF{tF|srvkI*#PLj$ze~R)fodO>TM`ev2Uj6rc{xaUkT})P_(W3Jo271l}OuTj@ z1lR$a212TIsPkx6WvMVHUY+6Ds248?Es@*Ie2Ha`$=Qz_+Zmb64fX!;zu>W5SCcaZ znfZdEVcOr!kY;sXOb11d0_j}dBnmCwdK59#-wk+Z`B;r^DlC21x(|sPrS(*c?px@2 zNSOX#YYFO$>^U;d9x$;ItxUUSo}oPLwnVK%C}NeUN*ksMzE8=WT7mKrev;QG1w{Ba}(1KKqt0-YmP`@-h0HJ2@EuPruT- z?{L%cuS7}^?Ro^Ila8-SDr~jxHMk9LC+=$fN z8L_Ky3ccnYgr7{mSoB-eM;f&YQ~e=QeY1DxeColo+HlU6I`vqhOt~ygEZF}@BZItE z{5+xIX}Wn<-3Y5Oz#$nBnwEon%Zb}P&*qT*=5}BU6eSs2T@7#dQVb%o=AAhEtUVvN zzhV;RCkB`9R+HqZk3!b*?I~tiA;|Ce!Q&lI+Djok^Aw^8In0qzsJiM2hbb*Ryj9{9fv^^Km?ZUMGl7yt_%@056+xXfSr*Sgx1Kf^P{zK#(xQYxsMdrhBvig z`v=$9p8k@4H-=*|K)gv!CxkK%L1v87d*42X$41g1qV;1o1D)^rD0B-*+ zGExO}Pj73aZV_A1!-V?kOR;omZ~UR_pmf^vSZ&ko5OYZiW7A%3t8H?qfx^zVJg##U zvhjO7#y5key^Bi0QADgMFXwr6;`7adijwuGl?e8CwnCdD6~(j)3B98sBkfbWx={(O zhiSFG^*RVP&$o{V({O(zH*kT6GbT%N=At&IINccK@b>5x5RelrS%{9G-t%=EjrHtgcI)tz- zrHkX01utKgSQb6ETc$B=a77NP*~W&J6}}yqE{o*h3VPfuz7DXaJsdJru}q9TT`x@N zx-{U=VJIBBY{E5SXj4r+PG~WE4%#LURMv2e4_3Yhk?6meuw3l+mLV&i8hSi@zVks? zqJurwnf0dHI2OFPPt#$A$^6iJD*j};l|;h@RV#$oda>rKaNz|fXuOXy{LSX(06A+* z=Oe?aXsMIwNR@M8xpSl1Ro&bJy8jlD!PNw0n<6RYquFc!hsQ&iicN;6Eoj^zx=D7~ z?D#vG7g&feV$X+{I$x{T^l!Z9iKd<+$EKuLAl5otzi!O*8nqqSLJ)TU=2JxPrwBnQ zLpU&9F|m{~l_I+_twI&J7>zodRFw#WTU`~~O#ebo`7U*z9y^S?KL zAkhlw(>x2Hy6$!4_=J3|WM<{VQJ&Z9BOL+iTuf2OTRz}#WQgn`cs%~WTp1R)f`nUh zuyW5Rau$J4Ru-=YpQfQSzT;99HV!h})fH_{L=Kk|{Bmy%05QFK#UJn;$FxVX1CV>0^f`)HkgGhWblpM4@kbxCIBQp5ALhJBV`cM5W96ZkH!+i ziCU_nA>5~v+IdKPvb_X}d`2$F-zG+{YwHZx@iw+601a5hJ-`JgjvW=XkXayhK}L4D zqL|0ArnF)A6Th$oL9BLQ2a`7h;c@_IbcFu0_6vf$wKrCq(K&HR_~1mH+d~6$$-XIV zx}IH#vQ5;4UL9G`Y&HT$R{!ylY3Lv_X@)NP6Qw@G*&bAA53m8X%N0MmXrDuE*8VH1 zb&hRTIYXVLOxbO-sB3jfQv1-pG2+Lw$Ki(bEp_gJy1w;ezcjRI?XNxR^2F@lDn_jO6m`Zc*OAijy7zQaL7y}s$3?n6!>~HMAh|_b^vH}}{@-2IU&|wcfAWC3F++!I zlLWi8yUHx;qI(-E*!>Q1hNx=z&#Gu=mrxOs1&eaYfI;%**MwBe7yOhicOyW4SnAw2csvHL7tf!}U2D!yk~8nek@I{gZj(%1p*1VUz}< zI-iS-U#K0ZQqD#);1vK!+cEEUkavIh+@5cL_*}Aex(1b)WkwH|j~G=X7^sTB?bO06 z!<8?wC4>46J+NLI8LPt8Mztj@x#D8{X?lBWwtXLAOP&gI>$>4zxBKMkiyIakviA5f zXkT@)(PSpFdYZ$y*c!>5z$A=p&#m;PZ4)Qu z_4dU8a{dDiBb;E>+msQyS<8SXZQ?ok8sGGw)saPPx1I&D`6Qd#_$L5uUnG>pF02P4 zS9aK+fIFnmO;3pBI0T&50s$&~LIpwpN|OJc;<}bex_EamujTS&+v_j7M~D-aE9K9W z6UwVuVai~^E2O?&4{EYA1!yXvk3%p0(8_u$P*+?wI>iZ3*XCbYv-F8Ht1R8B`NQ(w z8hOOlMbU8m48oL+K|jj7pYz6CUlu(`b<(>eq}w`Opw$iS$fIu+1tl?#NRnqCNo?zP zjp=`!oZ=QH$|)Lc54@XJRWu*^)0lHbAIlP(w12vc<8uJ3Qe zKTQi^8TgXZtKzTrmSSLBRtccJJWLBSu^5C@?SbVRIXxuvxKAOAo~64|lA zO(p64vh#H0w-k-?gj{h@?1PO1iEd&f{KZcsvQBr{XTCZ@%UiPN7?2`qY7XI&)?5kw zyuJ~UT3Oo5eHMrMUu-Ug$UkiE$u{<5H)*&gXw2Lm;RVEXTOSI|P+>j*Q70M*Bw2mW zTN{ZaguC*aNhzC1C-0L9ZeQ(Zff~{|clB$F*KJ>a8H9;7^xHgjW?s_qw^CXO?-ir# zd^EugICnF-J6oH*Ul$((RP~rZ*3LJywplCg@m==&CAnCj40bHiwMeklJ+(G$CTvv0 zz3tdJ-_lt0n;@iLtOu+=OY1+4P)oll5dzy2J6^760J;;)?S?PO45u$cw0Or8#DC~s zYv<4l33nhrg$bU#Lew^e4ho zj5)Qz>1@@xge8%E+v}Z!stb?SDI3SnAzBm&yfy^67Si}R8QFF*L;HcNao zU~gp=SMt+>2~tiYuRh&3ROoliKhiENCAZZ5=xb_ml_XUX8Ysym-B71+pXV=ZcUjQs zdKMB>Q-gKTsUYTmQoDAcy_BoB@q+A9I*M$r;(Z%$1MR`u1@R5<^xmrGpX%}F4qXpe z@j6ayO>|@nov+ByV2*W4cm(?w;GVAQY{~B&yx7ukGmN9No5)0p2u;796cf3GUm9N8 zfwkMHn^iX~#1-^3EO_ga zuDr>#pF8cL3Z$j51=|`;;9rs5#-*Ys&v%q0isC4)ao`+;A_gCu;N2FEQmCjgUMra|~9tYYCeIudg&@SEj_mx{#*?I>Lc8k2KK1Juvcd?8kC zxx})l0eyyDHL!N?Ezv=__iYjCx0^O)?~Ieo?zDQ81-gI`W8Y3^iwdWadzq7iqM`DH zjDQWJF&Vnt$Gvf}+X<2-rHFx((#u&lAzQk2Jki&)+k6K;e99`>vY)uCokvWHHY!Rt z(_1e4On|$Y`EUM(5BMKu5+KfuDU2$(&i<|$L_Xt_8)4vxn(Cb(m3SDP+G>ygv>Pbn{diy}ulgMW<>D z+>CyXInBqoQS`6utbiMQ)3Lrvz6*QYUa_RwoIswQC%et9x)z{!sZlLcVdXn;w;4{& z%hwGB1Q08gWt@Q9gZRqq)rJDge`vV>^w*jzFjWAw>s}jJu?G(zqC+pD0E<7pj`ZU$ zls`S?A6wxOb*L76nbs+h?-v6BTAj>g`d#pxqHK)gA8d9?xg2xHOvyoFNMRNCXs$&Z zbk~Ys`nxe*ILUJO5gYM#V(9I87rZntRhC+z$2#{=DRT_^%q$Wi)9+Dt_WUCqL_{zW zFPbbaf8pOiA+PWFASLCXa%?X>v&75ol>GOP+OB|~vi!dV^8Fvxs;qNW2_XA+$-A&x zU5~1ybGB~GWQbEQ<<#904u8I-U7Mq4xbYUPW+;DZty0ay$RoGy zZI!UR^=rCN_0o0?YC^1cR0GQwYKM3H%ug6%hhdU1s+0C-P=xNx4K zG4>%#r$|<@sO)LGS$?(Pj@rfgcg}$Aog+gW9I7)f90i7of9vai9kNFJ`6q7*wVbMU zR8y=VuChkzXN{HB{7?YV6R~-PlgGiQV%h#B7Zd#e`pn2<0Kk*QnU{g5smRvjR;fB0 z5gdwy=p-Zno4lpwk{VFj?KkLjAkr4nNqF(uUxroSIB!JE z|K3ruK0q!q*)AFfgKI*TqF=}4qTsXil#rHw{L3E#O^fXQ;}IN!f_*rAj^I6?p;U5? z9_#C{E^OA@oz4I82TF9F8)~cuRt_a#?(>SKYr?lOcLCp{FjqSt9GA_XIB=eFICYOf z=D=bi1f}Rd45&j#jyxt~d*jFCee!k**>{r@RG^VhP4w?|l`wmS{Cc<)B30F{E;^C& zraV#%4pDRTG~C+j&I64%!!Io#qKePezcNI9dFziaF-}em-?dUu$r}po9rSQYft2tM zV?3W$92c#2IQ8GAJ`?3#H}}B#X6%CR%wZ)d)~g%}BOhW~xJ_%Z!Ybd}8x3wpiw17) zu$DlvrpxAe1KoIX{!bRbsAy_&vf3WR7-uaUUWdcPv_ISb79pEZ=n3gHz2llqdE4S~ zWOuAczR03xNTR1(TZ%UD1UP#bc~k!XIss67S1Qf)!PtSq2kdPRnkw0wrk<) z^^Gi9kHF8!Uik=xZDZUtB=es|b9f@Otk(mRO1;(IGu5l^oIXc;NVC*5D(0R)g=1u# zt8eqA@A9>y%sot>9cIx@C?Gpl+P%{^?-sWp(d0h@>Ko^Buh>dxqQ?B{V%B|^`;0wQ zJSk6d#m;}^zS3|((#rpQj_a^*H33P;Z1Y*^`w~0&iYOZbOe(eU&E!jJ6)D;RN$qt$ z@J%6e5QDyQ2{pIH85qI?m@V^E)>Lp*M5#J|OoD|$N2qhwc+-xK%6W%YMFlF`@%4RyM30vy8UxF?XB4+=!wg2w2Wg)?hUdFU!6-${n=jY6Mt%^-?AuF^Y zL1AG9k#zq>Wex;EmStaBM*pQJ&7fJxRneuCBThIC zlLncaTIIwybckXMc}&++eidUHpF%R-Q5kD+g|WyqO8<1|>-I{lDqeE`?H*o1ROI&Q zlv-U|US#51nl6+)@2k113;a{Zdf3edA&|YeEQELty|=GZXJ9fIWC6%#fRa9_BPMc6 zNc|+u(MdXGmCxkkN-X{({G++|Gid<1uB~6OvmJV+-kX(gWfW;$v=Qz@bda`o*`Uk0 zVYz^OaskKXa*}B^mn7Pumua2Eml5-W#h0H&!xNm0ITcj#i19=*Pdh|RUuuFt9zY$Z zDo*EO1Nxobz_B2yh$qL0O8cmQuo7$JDVTaZcc=fAF&P6JtvlQpIUzg~Lysf7Q0kDC z&gW)$5JD|{6F?C?^Po(o?O;wCNRgq*#rHak?V6b)I3rQxvt!k43y#X-;*3p(EVGlq zRnv6qRLC%WV2D<`lW!VcViKYSoa< zF3XiZD;~^7KJQuF$rbCgf);r{!jtwe9|G3A-r*g9g`~LRaQre=>3E%#DOK;80Fj zyST#0tT|(ZT>MTU#!_!vYG;eP%xKE91f{~Alk)&mA{{*0k9J$)ZS3QyA#;DlHFKXkoQU}f93 zwp~dj728h5wl!nh72CFric=Nawr!(g+qRv5u66d==X`6Q|7u*!c`-&GZS>aq^EQwW zyPaefb^Fo^bt!W`nMybQRJI07D1nUr7*U{$TkJF5_u#P5MzEqQP?EZXNu}&R;#zs> z<-+~w$J*EoNotrL^+l?HNI4>4Hc$qB;sUjjTEfe`?_-D{)GW#0U$&QP5u(uYZiK~}w*mQv{t)}LmA z@fiMpSUe`yYuhm~ZT|r>)Sy5gzUC3070&azdd}W!#6zpHT8Ai1XI%$PmmV0W>k2{c zX;P>ZKC60xaG{6|m8IG3Xp1q-r3rbN(%O6|7qK$^|A-f|K=EP}@Bb1n5`h>G{n4VV zwCTfzc;XY-&Ey3Qt?1NDW#_ZR#rBD>C7ue~9)E6W#s_6%_$ zR+~=)c12~s!iN2HG5WVH$WnIxTpXPSIOndWsIf!Op%TJ1q5FC8^p`!#wJU&&VfH17 zOIHot5Wqtkl~>|+2Pj#X|4Xv)8%Pi%<=SXL0nV7jO(H0`wyYeK@m&x0;q*bZz1j9j z|6oHyDnV%Sj=I-R`TU)I5q#f#Q^9xVGx=;Bct^!(xt&Z|wvS?e*69i(+wn;Wo0+51 zw+v?U{01`jY4=44!_3)UoJT<@QE#{|64S-yl**dO_%pG@w@K-9DTMJXi7<&~+yb&L zjxRZ*j-hPNv2(R2(#Kap0b^*+dvd2AC636Nx&yL8&$M>rHG2DL*I>VHJpH}EueAI< z0pw4Czip-%eOL5O^YbM_?*0_%-K;LC*2@VN&17{=Mj_8FMy7GQ_M?mbj@aS!EnG|L z#_ub}mGI0*ynRD3?7Y8Ir4ir^ieps8A;v93e)PfMOv|}v-lw3H`}!<$Up}7kM0Y*{ zA7>B_^TmaJ&~`ogWC6@Qe}77KbAXpb_A$2ih3+u>uvJ^&lf>oJ!DP14j~&F=rAjIl zht~`Ys%W`NZRKgwwi|M?=@LE;1u>uwU?4o@ic$82g;2uje?4@UZ6P< z-J%7-rt(FZYpNR(78C~s4D*B();GJUxegGjE5P`@rL{+Ke7K`n!Z~ za?|bq2JZTm$s<%)07*0 z0piD-l4EuhiP>AJ*;{M1NVKjosp6_3ix1JG`ElsIf4KjQ&k^@mj;kE)VZJV?uK=9h zgiE-oMYvl2vjHwlTHl{WK<)a^A%mO7lTM+vil~Q!_{;;r5lUH65e2@h{y^Sk5G?PU zoqjkIToYf+P%^Vs<@n2W*Nd>{pQZzD4h}YFkS9J2I!%-gHo6^I6Z&Kh8zkq`PM9m{* zC%%gqvdod+1s>dYyH;*(g}UZkfXg%s>MDBdx2g4~+ljccV-%tPZ15A&7y$rMg}|-% zYs=qihgw28ydmzj@dxg_N#EnH7jDM~xr@6T=$7IPcv05%Y62NF?^%|k*e7k1o|{K- z?n=qy0blw?Go_yAqyCZ0)mb%7Rz7Ay$hr>Ea}%EIpf z76mTH72ougZ3y5zp;M7gZ}GQ= z0@M+N?SDO_;{%uiff@?Th0c;U&4POH{u;9N?AAN72)-Xy9f7lfg7Mo^Tg=LCQF!m~ zR4z6@F&|${=lUjx*@)C>4>34=&nlXgF`9d3>MKzyAjgyx{D9A^l?8{679aI!p2#lzm{ZG;?6wH%qOc`7}K&)MxDABoocxuC$DmRe) zDxgP8&wtlnX5_Btf87mtnt8S0j}Sl4yZzI~@D!6|_h5;^Afl_7yiRPe3T;dlKXn&u za~EY*kF8p{3J;@Vk=YPxG4&Zp{cp`ApIa8ha9lZHZl}$x>SS|bXQYWQ@PvDHYHFa7 zVJb$Q^8d~Ez>vdF#>aH&%8!(Ua>`?AYB9` zj>W({HOG$TXe#poFKaQ>+0c7h9^p)Z4xkp!@HPjlp<6Rgi@4~S4^3Oim|9(_8RH*X z^YeQu3a_u{FW-`U)KKk9Me-x7O`%lb%_7w)S08|;!e>COmUSm<)n5D!3}^%39Rc2 zgpG(oMIJD27wrG1vkCm|o!Yhiip=&jJAigT{Gy`oPnHco>A5%eO`sHJ3(bNG{Qu}D zX0JcZjWrSUwhoDpIz3@(`)<{9>ANFrWwK)$6OLYwi_e?Vg-Qv%=C4bkfI>-6jq#7`fYj3JZ~Dy6q~} zBZpSS{G?YPhRAyz(;cR!LLQ#@7SHQ(q>S9gD2=1@^?OGMWC|01yN zhG_nh$1e7LTi6e6aKgU(hAgHkU|r`!%!hhh}w8weVOpNVIeDK;99>d z{~A3DeIP6YW=Q_dURb;#SC)KS$ozN9l!tPj`KJjMs+eAyX z?ZPVDUh|jS)@doCj|cV(k-Hm2+0VW&1{GFlMt`?V3BB}4_bt)gb|XQY>q13a0hXdl zuQdI*~=VQkcrM(Yoq7H zHvs0PVw+d(n3A8Jqvh9o_|j5QB{IzS4aSfYi@c4`*sn|ey2!tlQqenML7Of)8iv;# z8VzPX$Jn4GL=kaug?2nFVr1s1l6KLYCZh4?643-UiRldKWUL8by zS$i0yeBZTEF!$M>^}^@ni}2z5u<^CCwyYIHM{Qq6LaoD+MP}wsXAPz>2>Y-D@l0M( zm(M4jKlLk!^cc*sJE8^hSO0df&M)xrUL@baq>&9Hts{9e4~{#;^ETS5|@=Z=w zw4)~IQ$5`|O$3i`cznYpVo&7^Et`}sGC4x)gkFZCRs@xjyUM_P z@Q4xeBVgD~T3|8;BKyU-f#E$vqUsCp1|#$?-t}N01cX8GZjt$E@D*dU$OQvI*H0@W z^pneq(A?QL`SwCsizbZjkH=w^vXU26P z+xAJ^4->#R>vYX6Id&L@o3zT`{Oisrf%>q|yyL z>*aH}&SLDTmO5Ynl>+t0J@BcAcG#apJ2y#0o4N!00VbyKon=i4Zsdk1`3N(xa>(P) z$*f3hhKxSGyN2KWms5qp-m3VMvL=LxsBjhB=Xz9AnKY_;kKf-2irK19Ddj=$g_ovU zz@L{AdwBiRVyLG|f|TUbVf6z`{-S$ z37~Rsopl6iKP=Ew3cT&IZVr0$SK&2r?{b2?ZpS=A8zse+spZXDt8F(wE@ zx+qeGk&G0p$mX++^}-oE`7xTzP@{}k{WVo+5X%PI7TGNd_l+(+{LIG5XL{}V5WT%F zlKj?+755(2c}1G(e|>>}J>DWUXzRh&J;J9)^!ry0%2dD-oIXzwrzon-_%h)NoFf*9 zC?N!x!NobIi)yIT>w%)*L@l`30!O)B0U~5{{o(?gFE?z@KnHC<-K4TGV_7C8rPVGv zZaqxsTN3d_SfzJdCfBg?tYbSgH%}Nnk^J-U3%oUo;6#A?u->+t{o7Me5CYH0l0r?r zHAiaV_@%{bK5rVWSiLw@{o3F)xPk*rnuDn1N|kf}99*y;z*bOOm&kE1wFv8Zh;2hB z=g=Hd-{gPqDt|o_I~(XhjJpsf&rjwe!-;Q>Hxr}4_ryRCmTNQqjFDH1nthw|kSRIb zmnH{KDQRay>=v1oOfB}a0 zGlLgmlc&?S1g&}T?oUB%caAN0P>$?i0(RmvGQnF{XG8KMw@OeX7EU`-@B z8y6=o@?K{5 zhF{gXOfU2Pq_ugQiyUFIM|UMh7jU`$67Fe(WHe0q&!tsE^G^oH;vAauRcxd0JfY<@ zB`6;TE_nnbh_{lVB)mJR&1w612Tf4prj`F_BC@#3;ZSkzgl!W)ljuop+GaB{l}5Ps zg7NHg10{tyWhiS`16L95o8R<%S$iFl%lk1lML!++?`L`CxSK!KD)yFebDOI8JGz`9 zxW`6@(BT?V`uE(aIa3_uKR`=$mcNXBh`}juD2H_I%eT~xo4EyXn+FksI9L6Euc#_P zx|Q&_rKx4dB^CaYiy$SBkn+oGGuRBO z12^H+*8{wMT@z>9__(_Ee*0w8R|wB)sl-EC(G?L#1 z>`2b^-4gQ8RvCC`jUEm9Gp^mNBVp8>NElqlnyPz66XzKd5-gdA@$Vwz|9{qpvYag0e}AaF~7e0<*?HW zd*VYgW<(Ccwu|Zk?Js{X-%W^09~9V{2)#jgfcn7`#~oTz)|dGH{5- zhqS^xxt#?zu1`Ivf-Yd^fJl7j=0b5#?op=KEaqJ5d$jKUf+8k2BW&Qr6KPUXH_d$x z{_9kHjQ3F>r71GHYGJkkb0uA7vcJF3R|ZBxwN?yeR6%>|@38O1Up+jA1^{C5rED?_ zdFz8r$sFvk??dMnMp(9By9olVNQWyZF5pkYA3hv)zOW}c`#ZT}lpkF6MHtZ+Si$SA z%H0FL98evHEM`9=j%wM-%#Kf|F&0j35uxeXnt0oGu7cUNAP3vr>L-43GLimW9NX7X44 zBT%&BaJ|Pvb^(N!^nTTWh*bSsTl&DT5il#aN$g@X>HvEhRroYo0cb)hxowVJ%9YCI z2HX>NG@;8(pJeP?DZ>4>vYd0ZB%$}Q(;Q5NV?IALZD*rV$M?`C{@IAq91|(Zc&oCY zgQWPL0WnVzq{fqh`)VY$y#tJWfp^Q)>_%Fsq)gmwBn2UbFJl*F{u5QYzjw3okM^6P z+w}BMJwR6jNMeEU(kG|8db5P4*kuv z)@f9ACN|PawR9t9Nr>>MZSLmHjEW&^pr9PRnTlW&6w*eW;~@owYFpxGOivg1Aa*ST zHePhL@NMaBOHu$s-@mpPF=C3`2&5X8(eioUSpJnM3^;zNu=UHnD_hRGgNn=1Z-3sa-*fJ#9vfWj0p;&gWa>V)c$MSy zepIb7jTpP$B!KafE?aPxbrpCKYRUd3^xY+wvYG~7IHj7$b7lOUT989z^dY%u0m_L2 znMG;$^70u0gGp+;UO5O-UzpY}Q(j`PKibNm8auks zOo~i$jz7@kRpTJmJ->;xH^0h3Ce2A~awgXk;Z6KL84)DI3H$W|Vf+1dOZ|V&B!35d z-MNB<54HwxFkCk=McGa;n2tf!2{23dZad$V&>2qoAMB1 zKCbjmS($!wrO-?7HEjE&1PgByR2;V@LUz~YS`r#+(CpqOc=f(b5FrpoZxf-DJ(M)< zJ042S$Dixp;JE4dhcX#!m{$HQYOAcjF*n#f*v9k?klS;bsX&dNS%*d!8R?r>9v|lV zemE8pKA%$SA8wxcRbIMwA9n#DP%IdYKT))=a6i~K7D4y@;iQ=k!pgcJvd;W=WAs2O zDd3ub37A_uDmAt3k6m;<%%Ag=_*d@p#&)Nsi-IFVfn^g=fCjo1SW^B!lk|b5i*zXK zsXVM-CcU>vN@aS&Vlw@#eQUq9P7;JV+gb+@``SUe>L!Z4Cdu}kEm=^E;e_lW7-~80 z360rS1vqALg5m-2{k?FzGO{cJr3~KWp?2YUy`g0J0;v0H5ZFI?55mTg)-Fp<22`e= zhut~e={@F~Ws&v1TzlaA;^;I%kFNRlhbvY;WQ=X?1-|B-l2k@k(gbMxc0gHlErM$w zUgtrq`EuhTbXT6Tg@r;Qtru>M+&?IjJSbCaC?#$61I9kq1K#uC3@LPg_t-mbhHFBN zRF^j;>xi!wieiGdd7j{iPyOMp(hT|%7rH&{=&{dS5cuobF$=7cjo^c9^kFHtJ$B~L z774r5=cAti;`;r)qaF5T-VgB}8Ql$7I8Ay%h>xr<^`)LB_25G;V9`Dmfm-`^My<9* zTT594ff>G?@P{)b<)8N^9Cxn}^ID@u>=CPZ<^DaFS;2<7$I$!ypX9=8@3P*>QO81O z@1c(7>)dJEORo=MEnpl;HtuFHb6!m_t&`j1F)g1CDN;FmRg{5b!Ja7Yv;C9fDS%Et zP2l9dtNj4v)Bgx3{_B9fjFjvMlB&vj5VM0ZqJNzdeLcI&VBM+205xzQT>bXPGUxeI z;CpA!A=;jhhX`~C!Z7rOI-tV5&`|J={$_-Xrq2L`YnIW)9(2@x!1^#pg2GZpVA0oj zVRDa}eVHWvt!&rs!*XEiCUL%cf8F}(Of1@z^-tpA6;=b@$P!B>{v(XoKD)~H=!Jp! zywZqL5_Xs{Vuwc@v5@`bB3<`%)fiDNMRIZJM*o05$4!gu(%aAzNOw_8-_{RPYSeWU z7P|<)yBvN6Z$6f;7P!RsRB@q5U3+F5lu4O13Ks7Se zWiQ%D%p*T}<;^^?4ED_x7by52bBbilByb_+>~r3iXc>N_O1BWlyYJuwI7yt*qi*WN z=+^}R_d+kD%|NZD^QqQZr}=tBLmq76ohaFn52zs@>4D$yrciaD{y$I*L^q$4L$l7} zw;IueAV?4DnzhH>RlFXM_`AG!B|~(V#PRXKf8k%Z8r|q>kb;E(WlThI+Jz4O;pF$`Uh~FvsA?j=1E$GYJ-mExnJ6}=4n=dOx zQgP${;l=-Tlvh829B=u;E2F76wSZ_pbjE_~v#5h9Pn{`bF(KvcqtJfrvNiJ?FA zX%k$LMxFDTB^!}YICw>cjG~=q_he`~Zn1AwMtYcbSo=BuEh-IWtGCHhPw$dqZcQo2 zgOpmja8G&(+;4_S!Gvka0LB;E;#SYa0R1<0gs?rc$6QcBSW@@s(=XTa2m-)OkiE2) zMego4M(b9J?oqJC+F|pxY)EH?lvZdXA*(&k8u31s zUx?^#qjDnpq7RN7wQEf!t)S^r%&{6Od)!eCdGr_kvi;1zKl6z_ z=p>eB_-2R8mUm+dt)}t~TMa_3;aGHc>Ybxnnj)qoPjmwH4?=I&rGmk9% za2IK`bNQzFDKw6rlJ7m&+??QWkF1J9xJQyAHEN`a7%35Jiu%~C1eYPZzMJsDW8noE zcG(@`C>Fo$ZuTG}cj*}Jx$W-h8ey>QH+K@fFukHXgQf>(>zVQ*IDX27CWclHPffY0 z>H9Nj%w_cO9i^@OO5RQ<9}lA6okHYFjmrNPKocMAOv?Nu>d!ZxqwkA*P%u$a@g~+)1mU4MGc0f|~ps1fl3Cg0fgRdZmwB=eRo~ z2p-I`j*d(@_F4R!1|8x&+n%>-y)_5%A~Sy%S>~s)+rxhyk}HgP&b>Em6dVxc2QL5&HWm>7GS}_q10ce z@uuFdusA+sOk;L_x~&KS3>ulB>*OTIUChTNk?LGmI0?c6kAiz=Msy!5U@k)!ni_w; z>hJVY*g)jg#V-Dao3B1ax#2tcjER^ET%9}0`_u!Jf4rkFRSrJ*VQbRHv<_}INvPj$ zpmW^Yr%NRbZe0ycb|*e=Yk7pGOI^DVHrD+3%xti`)m71rH6;`hoB57e-#pZ;kiEw zs>7-X{~vJCaqwXC{~@jaHZ>rA-5UKKE52ArKKNQ)DwXz~M40vKqJ|{ZFACYUmn##F zdkk_tM3_8cyheuPUbJzMeW)VloM!sr- z;PyBPtoth(Mt3E>O)$!nh_g3_@f(`$=9l2}^(SNdj94q0L9}e+>I47%>cdXcfuxsX zj^!#5#KkUT8a+~}TRpQ)KZ<1I#{|wv4o_`9Nw)l)X6$R8{LV<(a|OZ>Vak#1Yu=Gu zsLXu?Xt?j@j_^sP(3VQ_ilMpzkD$Owi0G2$Z#Q;t(Qv)>0BI1Jb!qLi!*}7TAHASreb>aQqeVo1M>?!OjK4h0XGW{j2E87gX;~qfx-5W zqs$FZbq2vdszX8Rk~!(U6cugALHz@WS_z;{$o(JaTwd$0=^KSE)uILD4rx%u*2MDD z$_L(4EbT7u`?hP~g6>mOE;QvBr-qG^bRr&ED-ZDbxCr^;X9}ku+Y%@05IB-b7q+yx z*ux!1(Dy4AMP$SLUBtMPyaJg+tqx9zlQ`7G#C)=yoxSSR{^KPM`}t9U2D4t_5udOU zmk;9t|In;}__IU}(KE4=L>AvEqvz4fp0-qaUjPkNXoXItzcWp=#R@H)2iygQgNPGx){xH0S7!1Qi$@uAGBcfATua zTa@yF&o?CqP8zP~5Ls{t#-eO?A!&(VX=@<7Or4LrTU0ck3Padf&usJTnHPg1yb(sM z_~b}9fZ@Q%+fWxvoQGA~UsK<|I~HEwvO1^Ms^i5QTSnjlbp$orgzVq&2eLj|I<=LM zrM3h1pO-et!v54_lqO$R)p5?%k4^i}_}9`GWkE9_VXN~<`SJQ*1#mOJ;8+YCfNhBN zAeX6Tbnj3D)rsV>=C)4eWjKQSCWvX5zZQGuEnSSjjPATer)j-<$*9Pz_hdO%`&Gl7 z<^#40jR`mD{|;-KeGrFhK{aUmIu_n(se(d0OTYif3>8^nJn|@C^qO93ko^+@h~atX zqG;ShXq~Uuhs19j{~p0!8Wf132yGC!v8P@J%7Y4v?&-cmQa1L%CBGsCusc>#^84|6#TjnyQqucU0y-7&w*-`DXZwX zrLnux&;wyG0D#X_$!1u0>&E!^fXW~jk~oqYP&AU*pF18&R#ap`-+68a*3><)=uKFv z6l@F-9q}YgnYi;u)|wfEkZ92Znl{yGhkSlLV^i$tp-x3>*o?&&u?g{JWY!9Q=$EMRe}KeyuE*78!XyiZrt< zpcvy6K!OOn&vr!W30fI^DnW9=xWlB&^G2F@u>)cwVVY}F&HXFzeVXZ-X6pxXQ0VIa z5i$LJf7J|-MwI-ALg%~*v7y0{IeCE$4jY?FY#oir;WuR2uUBg>QglDG;pf>4^jm$A zxw=*poG%ZQQGBMiUXW=@Cw4Nscz@h$A1P9Y=UgmM`5j|n@-l+0Pl{cNovvt6b9KO9 z_iKB5Mn`^A>{hI&AUh8KjfSFINhAy!G1YoSV?L9|( zv}hHPj<}a1z}Wh0d>M5t(ICyldmDB3CB%nUgecQiY+7Wu3UCWo|3t=`o-k!BA$G1r zi@Pka4CWa!{(t1Ne{bsO=>F~F+t4}Z?3&rN1z?Kv&)?_6H7&D08gCE*#Ci2#jUOW# zgtjGxy^*CF$+~F)zY`tQZ#B!lm!xoNjk&OPPXIO{N04cH$zb%JKQ-Wt_e(9}0^bG8 zl-CsD?wgWI_WP2H#OGU1f`nOD9*Dn}%~BKyHXKlMTUdCva&_%D&GE0FbNIm16GwfV z>ePX1_yUKt{NAPljYy}cQt!%*1JUlQyAZ;zl)@QM54nYPhg2U?*MK31t$%kJOFu~a zlSnD5r;nKZoO*nBbmoOHHugUzWLnnQ%X__q^ zZpUD9^68)g0T!VbI=(7S7VeDWcToZYLX`1r=z^CB=g>2AwFVUHS|HC#aZ~To0IsZi zRc7*2Ady$X9-KrF`mA9L>>lpq<7lvj#n#bAt4mxg<`Vv1?y1L_{sy4uAClXH-mKH* zJsbwv*)cx(%1KcyEjXVD#F5D%JwkyDj107IiF!FcwT`G{p?fQxPL@!xS=~!O3aywH z8WE=yn~W8TbmsBr0QtzLRBj21=M-uZ{^;2LTAJU&9cuh8M&SGQviz40z)4(km@g%= z{G2jqLD}!AE?dZORn#8kNs7py^hJHRb_vzvU`>a1AI8(W>~BU8cMs8?pGQC4yz?C1 zC^k?!Od@}?Qc~#XfKlFQG!~*3w$;#kE9D|MQI$&z?4#p$0llG{{@N7?z=lFQBOpg< zSKd*LRQfSeXj7m8nRj~_2$$c6az4Q+scj@+c#06^PQ+RZFt77dIH>K9vHf=%&|-TL zFuA}JYvY3FlTDcq!l-*iGCSfJPPR1s+*Pe<2Y5pDw%W&0kdU9zt7rpfUc8RHy--bx zs;)3NxqdQ?Kx(0bPP}{l@L5X!kB!%c1FZj4_>3DI+Q66{S9wkUFV7|jxkoPbn;;#( zPZB4QqDEXI2Fqgw5*V#W({y#gbK!TIg~y^cdAYLIzn?f11922;UjA!$wS?*a&0>SS z_S06gLDbgB%Hrf3J5ft()R#Z9cm-AM)ljTFeW}M~{|L^$Q)icxA+$ciVt1)O1Q%=J zg2&Ko=)h55PzC2@@j)a3cz$DXJEBI|bUwnB*qPxM2P3ByvM*Zqt zqA>$75#it!C%c-8fU7g)T7D3MxS9hoJ0(2S_gA~LX+f4muB z!!an@pI3GWK#f_C4{|GUWFiNr4qOC0Y^Qg}i>JC2I0N%DjLr?-7w6K_|7ME}pSh0V zC$(h^U?z%niDm6$|K6{S{cD1<+{eB?5J1Cl`xHSvyj_6cv`~PbZY;wNZ8RaY%I<{E zjS@BQ=g`Urz6!Z!IjVta##t%*K&#;zYV+2*CDZDJ@XfX7qjP;6)1<#(oat_5cO+|% z-$QHEh}|xcoOxa%H6K%RXTScMWw3)mU&e{pBD(v!-Et_VJ>}=7YQ}T_l>iT(cO8nn z%U{H+|MsBE5?t$w`pT-c37zh3owE6fq!P1|E@ZhQX=`TI!nkHQ>SKFq*Cr0HTix@z z>BCvQe$b68o>1QV=~&8c2kA}EZ|D7811Uyw!$imuVp8zMfXai>~^Q_xoQ6{kIT*yQ|Vd2qfzp zpSwrrPtCvoH;&=&j+R{qj>DJNsEe64IGVh(S!?zbw9Dl0p@!(3wz z6SI-GD<7~*;*=FfonPS+jcS9pqY{W$r?oS1pL2_oq&F6-Dl{K)vW4s;uwG!R9Uw8} zip$9>U2sL2jGq=f(g`(;lN|7)m*~JQ>p9PqG&8IQD;v9Y#MRutEjrf^jn)DDDURyK8nWZ?9h z?{fl46a`V{TvOMUZQsV=+Ad*#03skYt;d;fHS>LP8=lfn4-pw;Ydm4npA6zZUc0md zDhSl!HQ7}7Cy7mSc846sU;u>2CwS4`BMBA?L0~>Jc6aNqdVZ=r5kiOb`L!kos4)f6 zrQzl(#wGL$ZqT-(o2v6>18vZ`e~8DN;t!GNy4z2t9(;ZX z^KL8uX9NLFM5vSWhr7-N*T76*f%?b9y^I0h^Z_=ptxDP&2e@<(%Y#xaqD^vd zXu-xA_e4htevX*034%Q~EI_LU{!#jTflSP8(701E>vfw%B?%|Z*ia{XNNRk6 zqFB`+3qYMq0=8=ciR8Jo0R-qWrATFtZqJqIC)0=vuA7AEAIrYgj*DDhN1ih(Me-wp zyh=k#8gZxbtc17x$JbSjiiB9Ty20J#l{L{qf2$Q=kauJ`ag8ftT~-zSQ{pdA43F6S zhOF5LE!MA!xPAVeY%3VR1E;ys1!5r!FJLbPtU($zKeAjr%{dIc`vu^HP2+2Z2R0Xh zFSNgmQ5FHgeIEun;^X0Ka+4)U>?nc5b}i8JGQ*bCoVD97E0T7|hNJUfnD|$Cwo3VKZ7hu~y zY>?+InD^=vAs|^wmAoeP4&CtKKNItQQ6krS_gvLGY@|xY9gyK1z1dpcbn9t_eyRb@ z7i2OZ$v(a2GxL_Bp8J@j1kMBrU-frWm9NdgcJax@zA06l`doK8>Ym5X}@)KRTG13Dqtl&Ne)@OAS@$+vG>~!{+26?_7iG_^CLF1bu z-T5p1J8J)L3-zat_Vf7;iGc#FN^NXJ{WYc;WQdMJ94G1pW{p;bgc7|Bd|TBNNaFdH zvnadXyXq@ad)uMfPBFX4IufLI&&L%AwjoNs_MqS75PHOiR4RuP&;{pHkuka1q4TsK z#vtON2IQwTzFFd{!+TzMqUW-u4hPu`EI^BIg>(Yb7yqCW2m;7-$aG1lwKbuGn`hjQ zz$#M*1nWKXRdcLNkVED=|5Vb1FCeH~{~QXz1nm(H=krz$BuYevfpCcZ(gko>J!J1L zLBJ32p=#ezYI&}(mS5Tk)Kx$75y<^)ZoJN|9f?XRALxj;RAO*2W4I%YF-`-DKesfn z1Ox$;rk5yqYDR`~Kfa=W&jeS;#h-Z%r;fPyZG?O2biwuDHqD{ngnJj;*O^_=2c?+Y zX(fRrz`hy6OE9~%(n#TT!hIzqi|?nLmj@kjCIcgpDBz6F@cB?eaPMTj6|7SbHjyo@!-cS8RV z+cHfCS|Is7F7w(_7oLZ{RsW79@GtLFeFfRSR@9%_pi3zBC*=pvk%n^0Xc<){oitgT z`oOr`|IQa3Dbw}CPYv4O-L_^|yr(SgtU&d^KZQr*VJ@r+dVlTZ3#K5`VapN{d#}LP zdbg*U<91e4V*#WNMt+b^tI+g>yrwLdvUn6`%yCy#_)umHTcfsZuO zPQbPkam6wa->&)~?T^q7sfN{GAtM{wI9r{Z$i|JqD&as`*yr;XW|b%H*U`h=qb%br zgq06on_F*xdl(rHH0Jan|J}mc4;`N=$+!k{PHS`;W-ti;92{HyEQ1Z7V18sEV)j%Ffrn?T9L|3+ zc4nyQf(ThDicDNp0x$TrFF34Ge`hf3(7{!GuoLTy>EA-6N3Ii{*fQ?q3x9azCNQ_= zX(IsYfcOu`xWy&Xt!n$`3O36mjQiypx`#cyn#=)pc34@k5D!JQ6LcA}R%SF2!w`F9 z!X!b74=J;5xrJ=m!OodJG*e2JOO~$1_%Is0_K`-fn&=iZVXQrq*t4rigV2hEG+Tu0f&&Pbg>=f$Kjfrw zIFM^9J-JMK*wxuzaF4;g7;Uzw`m}q)1jhNN7;~_r<+`sY#2sUeQgM}5n$(5p)Sx_y z5za=HdO9~`aGWGAbl^ucnsz~NOuMDu`GpPuqu^p0Cia(+V7y-5Xov2ROwWNn!^1j8 zLd-!JV@&b2jOSXA36ZYXhNd@EMgqaGookU^tJx@Gvq+rzd0TM{wsb3<=kqq;p?q{3 zJ7YX_N(Z|5pc9dH;@fd6CPZ#gV=(S2xTSxQjNIMoLr(xGpwUH+{%bFUDimS?( zJGq_CL8Olv2{SKk+VNAQUshle{qC$2x{#p9@-6S;ho}=5o zWLkbL9`Cr(IVg{7;t)SKQf`LH#d-eu4CC0NEa>|-)TS-7_Ns5;r?-q4FGPIKZMy|G z^9}N!D;8(3^^2}p)UTW^ba3}o6rnlq+kB#$Wg8qBGx?8*$Z#>lYX!pXOqj@q1P{gr zgG-^j*f5t_6g!Dqn5-X)c+m=sk;RP2D~z2Dkk%!~_5gJan{VNO2yaX5=uz+-*Rusno2Q4pd2w|^!&^8#ZpsI!q%gTE~=2dk&4 zJT`=qBQLt}I6OSJoy2Ut@v>2nPOi6QIYhZRhl1&Mwv*DaCG%vcNyx@RLQP^>8HLaH ziYg}kIa2p%KAto`-_6jY9b8!?PO$f~#&O+3yb7XM%+dK%;(~+zNS8ebq?c)JA~~-$ zKgcI;$fKJzD**+8+~#Ty0)$~rGj;6ETI_}P21eAzyF`tpmt(eM4rXZgeNteqHcpPb zc|uq7w}p0F@VU-bjkm%Yv*fYqyS9qz=RDdwZ|~}dh*iD)NxhmMc=xszK|6z>!)4R~ z=bsHYsX97^A_uKI@3hs&whKakBF5mV4i442qr0@JSE4R;zNP^}KGySU!Cc;7O@_sE z6f8%@9l}iG!{qx^J_ki9EV}(msY7TtH^bZ$u^UQX)AUylSB2ZQwJWNx4a@Rjt#R

    #h`8%IP~3z~*30s069C$}50!cXdGB$m`7gu7?-b<;bzT2)!+KAy^Hmba!Vh z_wt5ogwfj-I?b`0@odNG-~hCk?pXc?@KqXurGrGLa{El;8S7RpSbu>H!^Xt3o@HBXfU&zcF zqGT^g$}HzAno|2(?#x`#+GGTx05du3eIe&5rh3BNc`g=Mj&2Nwu@;)7LvuYbYgk{kpgK@!F4!$f;&S!=-xK@8?xG^j8*>%)3vVY57ppoz#kYjQ>s zUckWppbP+q0W)#+^EtZ$H)pSKEA{kf6?%<#KL_IHqCj5Af9?Z z!#wNV*$lSjg{xn9p7Vsq!BBd4pL!dEv%79<^etgUtG?M_I(mkB_~Wil@9T+@?sY|x z?%516;bn-Z^LA&#aosIJ2&QOFDsOMfx+f8%|)gz$e6nWMPRz@w>b5+1b1}7jl2BuTiNkjT}C-v zG1th}P9aC*!M>ma8`6o>u&ck?WLF)5 z;lu>0(Jr^lVtY=$$O?PZ@$aZM@R4>qjkYb#H7jIt0>jpFz4-C~T*YEa=KKWO6Zc(A zmqA?7Zo=%OH0%&E2EoYv#3=CE4Q6B2c!EUHGM| zQ0fLOqu=vg#+)o0notRkY~3$%<$)@;B^WLR%^ibBd3dqvs?hAbE+}hv9T^M_O$Zh~ zt%Fabx!F2ZVU1_0i|jqLn;Y=XRXr**1gl@TKTM*K(fRo*3p08J$?=3fIlnOPtAnkF zQ|o+%SQnlZa*2RLZu$_QPJbV^ukj8kv20?pSK%}W8Y>Y{{PB)$HvUMrVB8(om{bP+qP}nw(WFm zbc{~Nwr$%sx|2-qXXeZFd;Y<$s4SC!a_SKJ5gw?;Z+?o&R0HZfQwf+Kp4ThWdcZhOtD|p+1yN$Px zE5#yQ_00}Adw*Yw#qJ^)Yl9UicmX{tg6ooyzzk23{Uq|kBV_k}GiGoe{4MCxr~8VG zUi7Js?iRdxvqnYlh-nx2%TNB}H?2&I#&MUUo0@R78%s2k-=7OMMqMo8X?1!KExVny zZ9l(l5O(}T4M%~j^R-4-e`T{_bReNF^x#k(zO}PWYnCzLK3OVzB22T}(*o)uC3v8t zy*oY7BC_GY+WX6+rSB@iJ~;T8b@OosAjaX$bA~+OIyHrAqbC71T2c2!A9nZ=)L)){r{x=ufo z;#LDU?#OXwyGHT8*@O|qq?OwPNc{`gKK)LS2d#!C;;$(POm=;2_sq9ULRB4LM-%=e z;3iNWa$H{t5#252wtt{Y@riu^V{ptPKQQ}c6U^g(%&6&bI$AMsM!upz6ylN>{A_R{e3`7-=zglfu$YxGaliZs_8qwO9AHdW(Ot& z0U+@#lXH_-lqh+y+Es_G z?|H^D>t+ZS&7sym_0=_omT6;P0EsE!4I5~ z8FJc)@$!lvPziXSmKQnmPCKc39=O6}oJpwSbs}(*eC(fV!TXN$3kUUn1$}AHJ)u5F zeTQK$KP-*Cg--d!{4k#9QLil#n)!w=&>i~-6M~z-HCG&cS8K@Bf-T7tM%TX+jK|7| zA^D}c)^hZ>Ybvv!Yc7s|#D~gI0slAJlc8ptQ+^>x-h}PFgwJjmCnnXqudh3UWLkr}r8$|6B^%o~ z^-{Z}#Hz~oZ|D8msE90+$x@6ek2x4QD)@yelYOr1YM~1|l0;mix_V%!iBRboSMSCO z8JDW}+e^IA&8l4@Q%iwap^BUmO(!l;mS$J&drc(u`O=JOagQMLc=UIBlnAKQe?Z+U5pTm273bTN|LWf{w)M1D^?jIgwVoD~&)sMMG+BiI z8;~m=ZiE_QbzsrBRK{g~(3(?6a7JwQb_YyZ{zZ7qS7FR0c>U*$_TK3YE^4=hq#lo` z^FvE>|0p8&F62@|U(ic_2;EmFp0d>j$vYU;0v;efJ#>Fb%JQu-&T*rWV?b_a707GM zSMmT8YaLW$q1%FN^7<_3`DVTu1C0R~(A|dZau!N)o)?J8?}^Or=SPE9DwP~K(Blo& zZjcd}w)j$Mwd4_y=J93XXB^h@Sk?uS+6D7M!_NogM?tPeN|k+`-T#ax3qRF+NcNYQ zPuECpwuC)R_;WXul3!)I7*dHG(?A84o8J#POQ0UZ{yo929=8R)FadotL+Nh+GEzZe zgkz)d4)aKV|2yLjeE6Cr$}Nh$A5@@rRO2~bi)wouHIR-yE3=r^x z1UqtBlFoj-ckS}yHMN1|5lyY7R9WI+Zn-9X_W@N2l36V8(_*05$a&K`%UCWir82^w37 zW(*IcG#X`=`{Dbip7+r(|!;e*OGfHvH^@V-M z^5`v&Da`PAQfN;{>=Y2?g@r)v5rcL%HDbfs`@w2GKijxZ-+#($$j$l*;Cv(Gs9XF9 zhsP7DL&|uf9o4LO9=}$QST_x>R%QDu5b+{Z2K$!grh3?5LuNL*yk#700@VccU}m;H zIvXmyO!!jSFe4f0bYt>?$kPv&(W}-Cy&Z9;0|H>qujzvg@b#XKap@HK~1-}_M+>k!B_7t1AFe)teGbla^qUu)&ld{ zc7-Tw*m??>5r(Z5uI;XpJxtEX4P_zVhqgE+z}tH1(iDV8sC<(cM*4=OPdR=%B*ZN4 zD-d%LUqiXkrkwPmYicL+B7YQ)L&e-b+2##LBHQzKirgP-BaoD7(ar zgTEY>6`!ZY&AwloweF13+79xyPAsDfe{QG?P2CZ#zFgdcA{1izB!8L=Q6txoVF*vC zbVAGg-~?fPdyJfEqA}l}Ub>||XBf_@HTGEhm*eh;j*R30yG;}F>BBSP0o4)9E%Kwt zI>`A*MVB>~D}Gd5HNVCuw{W+$+ZL=!mMMg2HlGa^22W*#y}a}x**{qM3iRz>f@L!8 z5*7H8H@^h?WZ830)E75b&|O1Y#Guq6o1)1tGd_i5v+e5J*Ci`IuMz1T<% zM;R7yoZv9}toB%!{53%^^m_BYnOShIwVcROJQ^JTI&7wCZGvf&!3#bwD-8OEvg13f zUaNsUp02ksSWGk!MbD|d8X=$RwmyVO#8vvn9OjGOYd=@(?YDAF!U^#xLu_}{^5>^B zmS+iG_)t17NUCj3C>?=Aa97<9;xo+`(0k7oxI)h%*Xm0Zq~Q(&ZeS1zs^eW@T?%aTvgM9A#MxinET++z*GNhiv?WPP7`sz7|6q*U$ek66y%O8 z)UX?HDyxsUku@#i_+1RpnPhWnblL$k=AhtdGAXbff%R~=M=#WK?rc)eo8p&CQ(#AO zc{??Fr&CO_8oFX57b15L7vcIdD*t>6cR$TE?!Cy!Vh~Y=G_mELY?_rP;Qysv+QZ-bvxwJ6(_$lD|&xfGMy+{OGelV=TkZyOq&}BAX z6v+J9-+8Xn*KMSnkAnlpTR#iK{WpKl=QJOXA&dJ`|1=Q}1;9WYg;h%6sJJ&%t{QK* z?oX)lfW^j-jXXL3+@gUkoOK6))CKPG?wks`*P*d2Cc( z{?_MLt6oiF@!lgCHzVcO=c_Lk6&BkmadEx^9(EyAFagpAs~yO(1W(g)%zLtWZv1&& z<8!Or?6nT*?CpD;%?aA#e2M%uvM&og>z{)shkppW>K*PwbUSCY^vTFRVDeHUS@N-h z2toYGI0?}aLx2$LWm{gJB#cfpT7*6xLK3&tAuvB5IUnX z)Do?w`}6Pw!V7QQgg!%f40nS<9NiN(k9*-et_hk&rrt?q6=sBu=4daw0`iet1e~GS z{asO61sH)3AR!GwJmx92Ga-vD%ng@D*uT4WrAF)wh~`dp+kABbMwjdXUL+-z_l7G6 zEil`MpZuQZ0l1+R-OzVc=oSj}61MBqd6Fn(+9UoY1_K zpnHo!RBn3wA+Gmlk@_bBj)9t&#ePzIfRGoT*9Lx4|8T%6&{!py?Vp>i{o1@u0U!ad zE96wUKG+^FoMvAmSXMl|Fyc*#j)%Hw!33O$G=eQ4xmInR7rz^T{5)#^-|Uo@3S4%7 zClXvdFZ`E0^*@5eE99HR2lE!wQRv&mLADfgD^i?~g^l$`dsp>;8Ly|dxPTWxP~JGL z{T<<1yJ+DLx>OX~yU?aThMW$X&T8)NvIukmzep0CCl0_|cOlVgZmJ{V8Nm6=kr3@s zg;DyL`kMVUrNf{(Z^KRMKdN+`^bz+u>BF7{1Q7fvtn@pwL=Wn2C4Rg5p222J@SGQZ zOt>%cOI6)ag)HRrfTX?bMgS$eymd?Vok)gzs7r@i@D!2Vn}AQGzqQ+$Ob)sQ0mae9 zcLzW}O-=%dgsNuz4-@wPtL0aSK=#oEyC6?r#NV{53=rU6n0**NT2Ck=el?Stbo^e5 zyAR}jGg$&7b0brEk!aS9aws89`drlMq7H zo0E+ZB-+l-$Fwa0AUV)hdJBT6u~Q@P4E@=~R6`q@rDui3#R^i42?D+<%j}w{`y({@ zm>BE*E|AISyhk5Wtkf&9w+0d7vkMR5Ys?F^)|bOSiqJlH<4-8v4{IZ9H5_Ri z)Y(6aiRPI$YuC(_z05v0D&7eeBv~9vin*b`?8sJMjIbQ?b6Nx5nZTuwBd>~CRWA9!M|Q0m4_gKp7?qUG2TJ^(wUqR_R*;_ zIIF((03k)!|_8+k|`X=%lbm zewk&%(H*tz4I7L0A{hR-WR^u*nTP8p(mi7eca8(5!v)C9Q7k@l+38>DqGtbqdLeZdw{wY z1GP)u#{KMVKRTHQt%XhY&(@Pi+AQV8fn-^=k^i9U~h8uOMcrwf1BP&1{I zw}!UqDz;&Ple%t4JBuOI{2G*@e}nLAcj+yq3Y>K#W@?K>t_RH)NuHK5R_yn%Ah~c!uG&hqa0!pZTiEdAwE1e(`G|1=UE^+*Wy32qND zz1`B41R1j1x^t`>SF1dI;?k^xpe>-14MjdJn`kx6F5hQ!r;M=~rs*K5`zI9lX*Z)- z;qo=rG2+v8aIH?<8863<63Zf~Q=G)K!ZnXc;7mtC`ICz3w$gCoJ7l8NWSb%D?G9YyeOn=E)ScXW5r zfz;w((hVWVAG~JQ+&_MBu`}D%BtB7pNC{lyI$Ajwk(jxS!mQu}bCtV{4rB^6sK>ZK z{Lj@qJmXI@Tf@oKnDtW4A49>Qvo zl|0dQh3hoSxSA3((i)P>Py>EFOsL2`_-S%2m+@~X@b$~&NRc2RXSn``6({LYjf49f zBpE7ZF$FX?;D_Szf-nh^Z=l3b{sPvN6c;tlLoE-OW%3d8Ty00ZOT<5u>~GAV5K^QM zV%&j>a%Cm0zM5@VCYZ3fz7ZUe4~nI<`6XA1d)c8e-Y^tnJnA@6P4|k#1Ua?xjz*Gp zQgl0k>yW{_Qct)dTq)6o;Nqyap&&X7v#Yv~x*-@dNiX>6nkf%vm1`Fg@u-s zc$(v#)DGk}l=X*sGsW0by^kPnZ?NO@RSMv(v&VvE4PUfSdxs}hB;NlFBL9vVkD4m4_FNkNb^3z3 zH6jms5gMuuK^4cac0TZ;(b{+S^4LG>(5ME6c44#ZBB?f*i*BX}*v`o2V0djf(&Y5m z&KxGywj%T*a2!wzE8rm3%i!es8>$PEe2|j;5Bu#{-q&FN#$OzA0Y^+IXN8ATdiE?@U)SAdhGp-CakL;pfT@iltjm!OOYQ|;9)2?Elhr2{7 zAal&C6SAenp8$j%hoVlQq?ng89v8(akPpP{2;9oeAH2CNmRYcyPgpZ=*h*xsI6 zbiNqL%T)vNO9SBpsK7s?1OMp|kx7ae;cTfHFG<~LiH-qt-07lnq+TygQP!%MiEzo2 zp*GZVWqh?w+W&B}M%F!E_OD1O$e+6!pF;a#ie3%59d&TWeN7q}sdQzj;dS`Dzj zW5+Xq4U7F4E+Z%!ljwiu;NN(npf@5x2kd(?5mjnY6*an3a5l|GC@|!U3sJuiu>Cl( zH&{yR%*J}!>#dQNMSi*!KZoW`!qUszqMbWC-afRyvRfo*uIoZK=^GepYbxp@SqRFt0myfKdO(2Y zUK~n1hqfjt5vF-Q%*fuiM`Kv->jbw)+lflT>K}(@_TwxuH|tF9uw~~isf*AhLqc?j z7KYJYLm@?uK*DYtAenc%PE>}T8J?uF1mvaR_>tS|f_>xb6vhFVXxCi-c)b@&R|w4Y z4qI;@RuX~D^39xBU;Qr!hIj7L%_C`2g!cv+w$?ZSU8+NGNfF#>5iOdLwz`I7_eTj&hn@MT3!WUlJK|W!jwt@I36l`y5`(K;#YxES@Bj@UpIQn$~)loJ7gla$K| zx5q}taVndsX)+agk2V4OJirZoXbc`5JwZ{P(U(BNJhWTTX2}yB&zp5YNvV8Z;oB8+ zkF+OQ54VHlGz~5g@}r^A-(`;7T$a`htdlFfjiiM7GxFdp37hiAzuhMeG?4wT#yo?B zyRG1DCKS!UoT2mT&G?Y$M%Bf|m9|!QeRZ^on5jdtu1`WTP#rs&Gv@FCCg@Rat5ne{ zN^E^sU2K*6Qa(4$6Jj(s$tzLaEsz=tq_!CRf)vJQ;$*m=lbzwQ=<4?(oOC-`VB}t5 zKk3VKGA|q5QJxF_h-=U-@h-8r%;~?5Ls@=XrY1=fPNO|!2(J#>uk;X24)Y{Yj(36} z6-#(l*&hBEpJMg#kz!wY+j~}>Ud|WI6$6&U+Y9}3;k6Yko&Z75kyT8%fO_|4W8CeP zjmyQm5aB{~tH1XcpV2>cDOONbM4)F?q+gSuP-v_^58Z|pv@&LH1*6oEn%ZV8+-;@sgsf<_)R~x=M$5DKIOTX?cR*0$xisP$uSEv)|+=?*;^c zt;Qe<@kI3Qwk^PxKk+xPto(&2h@b8)Z>^%>2K;5lwN9)92|E~-@__doZhQ0q zdf4S}<=69y@S#a9XQJI&x!l*6xX{B9`ujXtg=l zQV&g~648FY{L=a$>3ZAs77ZCGox6Y#72c#@2MUbU%}7-#=wcIkdLqS@i_J_$#x{8k zBErKl(WRcAOv-FfI2e5`6e~3aHKU$TXJFWwY;IqUhl)(qRY&m}7L%LAzhxOO`x;D> zk&*smc!_5~Db0XE2@*~ou<_dRF=z4gWQZ1ouNs7@TPh9iaUems>$J{|CMB+i=SaB7CM&DinLQ>)zNd?(>kUM5xWC1-!ugS1JMoC zuSO->4?;Fo%I3FPOb~rbi1gp*#B))L#B)6?_b#!(d<58@?0fRF%Zt}~)g#tUGL1#S zy+^Y!Gr{fIz%;vJ)F4kiBW8=%vf_;AY_m6RIdp{TXf#&EXFfn`{F{-UWFq!glo=P!YaA6U|4bp1-x#A)~+cnRnrjB5_&&OF*D? zTu7uxP2v+}1Pgwp&5bNyv)5UkVX0)B(h7rCdT_iu9@6aOO}|rUqL)ON;;=_j6^wdz zp18svQnkSFj1vbG*TQ3=M;AcjR>zV0E8`P4b)}Kjmim8Ba{HSqh?GzHT{FNRP8G)_ggX%A~AiZ0LH1KEGGH%#C={sIG-&|aI? z%DLa`*__&xZSM^33KD1}4H!Xtu1qSa*}3dzkYD4Nc0TvI(GcS$agLPhaI ze$3az) zl^H?NwS{ZI8#0CsrJ68u*fa2hUCJSG6jNF_s1I>q6! z`zXl{AhkubnP+i5E4W%UJjxu)CJx2PpygmU8mNB6jOYEoJO@g!PRRU~)*_@i6Q)bN zw%0t`3kcGm&3|4(Y=rPHjkLoRnazs)kU7eYyELhlC0MpttEEWE)Y1x@CFCMvf0L9| zp&pH-jc`N1j+J<{{VK;Dv(U{8c2Fq1b#f;XGv8$V?{QE)(0%M;|}PJ@sTH>ZyLLneT46#2~j;LYd}zYN6L!duxohwHjPWwX*TSqOJ|h zyD)eBs560s+w;0zV5C!^Xc6!2v4&{X(w&ma&Ix12h(+R%(bc#-+)Wf8Xk`yYJ`yib zIpP@adfxNGgik15I(CXfluuSnoruT7V^G;SnX8B;*ROsR7bi%MfQ3jCz&0^OkN!40 z6zbcIFXe!xN6bAoNo+hP-9VNDE6%ln7>HZ9l$2}wC zy=7MW)byY(uh!BN_fEn5btkSs;CGUMkdW<0La=qPQCnt=3vFHh>BuS=Ako`SGJ5At6@1O*{fvb&u-c)Q*nG-M%X zjZVuLbHyPU=+R^io!$@a_pRM$swFkrb0F<~(qY6sO?(`K()orb(SQENhc{K_~)~tr2Z5oUAC=Ae{HY8hk z9PXkpDZs=yCyk~ZXQ<#QF^Su>3|hKFt^Z4#>KHR)k=^VR`s0&@FQ&?ddikS(^lyLK zAU(jhjhx{iu{kEw(j2=;7P~bgf+gvzw*5}`gJwg3qn#k#xRQS~vDO-cd-g?;rMThR zIuyR)H|HS1~AihLVU8bsK-y?MC72&X@?GlLYNgRT96B1e=&l7XhK zkfd_Zb)iEX#}j7_hnNgUK{+)fYbx~Uf0+`kH`wFCoYy7&dk$A$m{{O(cpe2TAhVc` z{67z5h!2bn`FK`^k1VwB%VSWyISYEQeT3b7DghYbSeqzrs9i$=MXtzMl56Y^#H*z7 ze6#~66Oi(W7FUTdP-d!C$VfCoucfh%n^_$WKeavY-q_>IBu$ z>#j^yu*Zrw{~ANeE2f7=DwmSU^q{Io4^w0&E`=gZg{tnaDFCU`xnz69z|HPl4CXSd z^&aIcmK%KtFz3w^9y$egM3Ez#EI-&dsysjAf`_-M*NBgPw^?1Occ&&u*kkJq4Ktt? zg-!G1n~4Pc&nJh$Kzz!R0~0of#(rAdN(w9~(hxIB?n>utzDMU2;~ur0Ly01_ZThwP z&E3;W0&hBzOj$Pi)jf{?JqdgDc_t;YEge6^cDgg|ZS68$nB!T5&QqLA=*RJz4;4y$ z3^rAz!h=tlnjFXZ$)*wMm8g4z}LmNNqSAn@C0I2z^rce2; z6!dpM$Z$((T7_p+mhnMWcF#>*QDQ6TVmkzN=~gsm^f3)$84!c zk=00R_xwdE!XfS{lyT9OK#hqz2nxbGDG~MICSWTd=hcgghP~rWO1LquMKVywMbc|S zt!u?7RDTEGAHZ`@h2 z1P(Z^ohI`67Vce`5t9f<$#U%%(K8LvzL#jiycYIqrAfo2XO=Jqs|5#{&OJ#aMs;G* zjmbF%uoQttqo_}Xr|67?q?cs2clja6^H%(q%O95+X%ZlzR;iScR5ql% zz6LaJR$tR~5olQ_bpVe&Ttn?e^0}r#G_JXvYYRzo?tW_>b3xjNQJUnGCq77`k{u|M z42CE{iH$uC5!#knC~@QONRl|wRzhey*ISYdOK%#=elOv9t3VCxrnKH2ZJ87db9vfs zlI#^bJGx5M-{Z-|Hz^yyhyK$DebnsPMV0~XLs^tzIEnagj2pIC zVQu8$WE;QIF)d6PVSe5_t;l1KRIw>fW@yPtN>cU5j@-c81b z`yA=IEN^3`1a{wjBdDl&S0e3 zc=ZVbNJRRdWjW9yQgiwxu$&+6^3V$Tzl9#i;U(VDEvm3)=jBQXQ_a?xx&ui;b<+Eq zr38^0o>1_#4VsGFs>$|o%u&C`(w5RtrLs9DRiu<@0^{7P?l}-rs%%M18ALMh1WK-n z;b?&N#=&4%Q=P8_UeL-Lv8&e# zp5_O`?R3VM5a)|#%5mCfaDDZ5OEivnT9EWd+cKb_ir{pGQgKO!>yPa0n1$)$8uzVu zUfQe|!G&=8M=ib+(*JsrUc|fn;g2km{DY5;$6pR7+OCJ8M!R2MZXeHsPJ!UwdQZQ! zgZS_ha_hlxa&b&Wv+gta+E(@)Tr0_8BM5(Le0kw%;>X zN*qo#CVRI7KcgomIVyL`HWi<`r2ceR`k0?W<2CO12DwQ&?7_~g8Eb!wcn;7I`Q^s3 z7(6(J7`%B_UtZl{ud>{3!@cI7S*R}mnI+k8Fv+GeCib)H2u7_G*zb-yJU!ohUa;F% zZmTYje~&Vb(>AaG#y00TBVqN|s&*=dwSqy1M?u%?F8sK*`d`B%t?Kr9k za)J^Oo)O3fA3<~1ViUMPG5T1FC(ch|GVMx|G77Pc*d#>KgZ3gyJ{WdCG-fT*Jw{&O zF0nmXK^xdJ`)0KCp#7ex?{4%KP{4EiPRsdMEpw|M@?ezFVdS$ zNSa$8*Sy}z1&L#1m8sx2ShHRL6cHaFlH)s>W{G5*gbQ6++A(AOz~qdZ1%!C{kQc;| z1^nss<=JuMv=$dzg+AwAgyHU^43 zW+cFWP6Gza7;-MYXiT+}a|GsNWu~95pxJA_IJFWfL+9!448$=aI(8wY$b1|^z0Z^# z=ugO0yG&Zu3no%ai4w&1&O`%@i1ZVfBs%>5QS*4vYMV7>^Lf>ExLsD9U=&spOIZRT z>zWN7B#klQFm;iIdvQYQVk+DSO$;<_R(u*Xo2;~s5lXPbS_09ix;E4dKMMUWby6_G zOqGr*$ZeKVziefBf6YTLlwk+ByTt%E>47z?$7CTk@ z=K|&1sr(}}md~s%_c=$1n5w%5R0;+0$1LaNNb?Q+XC?M3VAjCB?JYm#4N*!T{4oD8 zdWf8r6+XME*n=o5GN0SdM1DCsopWucOW>>SS&35% z=SltVeQ%2QxkhO|r~wx(E02?STsdZ*r0*DLGshKf<`+KUCkm;Ez{_L!^yD^xtjw6z zp~Lv&;xT#qrzNSKwz279%)91Ys@LsRd6}lroFjH$_#B3{rp~E#miqt9ojw^@9p*aQ z6J9H)w7dIuEMqv8{F4WK#c7l=xppiw3B$23XCD>lu&+~i5-&osEBP7u%_@$P9f#m) zO_yZin-D)ALi(ZDF9GO40_plWcMP5F-}yit{A=Sgz Date: Fri, 30 Dec 2016 15:19:31 +0200 Subject: [PATCH 10/23] [docs] Describe consumption extensions. --- docs/consumption/extensions.md | 51 +++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/docs/consumption/extensions.md b/docs/consumption/extensions.md index 99d7f5423..affab1a9f 100644 --- a/docs/consumption/extensions.md +++ b/docs/consumption/extensions.md @@ -1,3 +1,52 @@ # Consumption extensions. -[back to index](../index.md) \ No newline at end of file + + +## [LoggerExtension](https://github.com/php-enqueue/enqueue-dev/blob/master/pkg/enqueue/Consumption/Extension/LoggerExtension.php) + +It sets logger to queue consumer context. All log messages will go to it. + +## [DoctrineClearIdentityMapExtension](https://github.com/php-enqueue/enqueue-dev/blob/master/pkg/enqueue-bundle/Consumption/Extension/DoctrineClearIdentityMapExtension.php) + +It clears Doctrine's identity map after a message is processed. It reduce memory usage. + +## [DoctrinePingConnectionExtension](https://github.com/php-enqueue/enqueue-dev/blob/master/pkg/enqueue-bundle/Consumption/Extension/DoctrinePingConnectionExtension.php) + +It test a database connection and if it is lost it does reconnect. Fixes "MySQL has gone away" errors. + +## [ReplyExtension](https://github.com/php-enqueue/enqueue-dev/blob/master/pkg/enqueue/Consumption/Extension/ReplyExtension.php) + +It comes with RPC code and simplifies reply logic. +It takes care of sending a reply message to reply queue. + +## [SetupBrokerExtension](https://github.com/php-enqueue/enqueue-dev/blob/master/pkg/enqueue/Client/ConsumptionExtension/SetupBrokerExtension.php) + +It responsible for configuring everything at a broker side. queues, topics, bindings and so on. +The extension is added at runtime when `--setup-broker` option is used. + +## [LimitConsumedMessagesExtension](https://github.com/php-enqueue/enqueue-dev/blob/master/pkg/enqueue/Consumption/Extension/LimitConsumedMessagesExtension.php) + +The extension counts processed message and once a limit is reached it interrupts consumption. +The extension is added at runtime when `--message-limit=10` option is used. + +## [LimitConsumerMemoryExtension](https://github.com/php-enqueue/enqueue-dev/blob/master/pkg/enqueue/Consumption/Extension/LimitConsumerMemoryExtension.php) + +The extension interrupts consumption once a memory limit is reached. +The extension is added at runtime when `--memory-limit=512` option is used. +The value is Mb. + +## [LimitConsumptionTimeExtension](https://github.com/php-enqueue/enqueue-dev/blob/master/pkg/enqueue/Consumption/Extension/LimitConsumptionTimeExtension.php) + +The extension interrupts consumption once time limit is reached. +The extension is added at runtime when `--time-limit="now + 2 minutes"` option is used. + +## [SignalExtension](https://github.com/php-enqueue/enqueue-dev/blob/master/pkg/enqueue/Consumption/Extension/SignalExtension.php) + +The extension catch process signals and gracefully stops consumption. Works only on NIX platforms. + +## [DelayRedeliveredMessageExtension](https://github.com/php-enqueue/enqueue-dev/blob/master/pkg/enqueue/Client/ConsumptionExtension/DelayRedeliveredMessageExtension.php) + +The extension checks whether the received message is redelivered (There was attempt to process message but it failed). +If so the extension reject the origin message and creates a copy message with a delay. + +[back to index](../index.md) From 6bed658adc39a00b0079836d654c77054efaa215 Mon Sep 17 00:00:00 2001 From: Maksym Kotliar Date: Fri, 30 Dec 2016 15:20:51 +0200 Subject: [PATCH 11/23] fix links in readme --- README.md | 2 +- pkg/amqp-ext/README.md | 2 +- pkg/enqueue-bundle/README.md | 2 +- pkg/enqueue/README.md | 2 +- pkg/job-queue/README.md | 2 +- pkg/psr-queue/README.md | 2 +- pkg/stomp/README.md | 2 +- pkg/test/README.md | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 9d78ed845..95ff0d539 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ This is where all development happens. The repository provides a friendly enviro ## Resources * [Documentation](https://github.com/php-enqueue/enqueue-dev/blob/master/docs/index.md) -* [Questions](https://gitter.im/php-enqueue/enqueue-dev) +* [Questions](https://gitter.im/php-enqueue/Lobby) * [Issue Tracker](https://github.com/php-enqueue/enqueue-dev/issues) ## License diff --git a/pkg/amqp-ext/README.md b/pkg/amqp-ext/README.md index cbed86f5e..f6ec93988 100644 --- a/pkg/amqp-ext/README.md +++ b/pkg/amqp-ext/README.md @@ -10,7 +10,7 @@ This is an implementation of PSR specification. It allows you to send and consum ## Resources * [Documentation](https://github.com/php-enqueue/enqueue-dev/blob/master/docs/index.md) -* [Questions](https://gitter.im/php-enqueue/enqueue-dev) +* [Questions](https://gitter.im/php-enqueue/Lobby) * [Issue Tracker](https://github.com/php-enqueue/enqueue-dev/issues) ## License diff --git a/pkg/enqueue-bundle/README.md b/pkg/enqueue-bundle/README.md index 13cdf6ed5..b1adcea0d 100644 --- a/pkg/enqueue-bundle/README.md +++ b/pkg/enqueue-bundle/README.md @@ -10,7 +10,7 @@ Integrates message queue components to Symfony application. ## Resources * [Documentation](https://github.com/php-enqueue/enqueue-dev/blob/master/docs/index.md) -* [Questions](https://gitter.im/php-enqueue/enqueue-dev) +* [Questions](https://gitter.im/php-enqueue/Lobby) * [Issue Tracker](https://github.com/php-enqueue/enqueue-dev/issues) ## License diff --git a/pkg/enqueue/README.md b/pkg/enqueue/README.md index 0dfa75c77..32c78d685 100644 --- a/pkg/enqueue/README.md +++ b/pkg/enqueue/README.md @@ -12,7 +12,7 @@ Read more about it in documentation. ## Resources * [Documentation](https://github.com/php-enqueue/enqueue-dev/blob/master/docs/index.md) -* [Questions](https://gitter.im/php-enqueue/enqueue-dev) +* [Questions](https://gitter.im/php-enqueue/Lobby) * [Issue Tracker](https://github.com/php-enqueue/enqueue-dev/issues) ## License diff --git a/pkg/job-queue/README.md b/pkg/job-queue/README.md index 1f8467802..53c4890ba 100644 --- a/pkg/job-queue/README.md +++ b/pkg/job-queue/README.md @@ -12,7 +12,7 @@ Read more about it in documentation ## Resources * [Documentation](https://github.com/php-enqueue/enqueue-dev/blob/master/docs/index.md) -* [Questions](https://gitter.im/php-enqueue/enqueue-dev) +* [Questions](https://gitter.im/php-enqueue/Lobby) * [Issue Tracker](https://github.com/php-enqueue/enqueue-dev/issues) ## License diff --git a/pkg/psr-queue/README.md b/pkg/psr-queue/README.md index a4886a9c9..91f95e376 100644 --- a/pkg/psr-queue/README.md +++ b/pkg/psr-queue/README.md @@ -11,7 +11,7 @@ It is a messaging component that allows applications to create, send, receive, a ## Resources * [Documentation](https://github.com/php-enqueue/enqueue-dev/blob/master/docs/index.md) -* [Questions](https://gitter.im/php-enqueue/enqueue-dev) +* [Questions](https://gitter.im/php-enqueue/Lobby) * [Issue Tracker](https://github.com/php-enqueue/enqueue-dev/issues) ## Credits diff --git a/pkg/stomp/README.md b/pkg/stomp/README.md index c32c4d2eb..f92dc6143 100644 --- a/pkg/stomp/README.md +++ b/pkg/stomp/README.md @@ -10,7 +10,7 @@ This is an implementation of PSR specification. It allows you to send and consum ## Resources * [Documentation](https://github.com/php-enqueue/enqueue-dev/blob/master/docs/index.md) -* [Questions](https://gitter.im/php-enqueue/enqueue-dev) +* [Questions](https://gitter.im/php-enqueue/Lobby) * [Issue Tracker](https://github.com/php-enqueue/enqueue-dev/issues) ## License diff --git a/pkg/test/README.md b/pkg/test/README.md index bab8a7022..af004d5df 100644 --- a/pkg/test/README.md +++ b/pkg/test/README.md @@ -7,7 +7,7 @@ Contains stuff needed in tests. Shared among different packages. ## Resources * [Documentation](https://github.com/php-enqueue/enqueue-dev/blob/master/docs/index.md) -* [Questions](https://gitter.im/php-enqueue/enqueue-dev) +* [Questions](https://gitter.im/php-enqueue/Lobby) * [Issue Tracker](https://github.com/php-enqueue/enqueue-dev/issues) ## License From 275246a8057a90e3c0de2573d643d738ed15139a Mon Sep 17 00:00:00 2001 From: Maksim Kotlyar Date: Fri, 30 Dec 2016 15:31:58 +0200 Subject: [PATCH 12/23] [docs] add docs. --- docs/bundle/consumption_extension.md | 41 ++++++++++++++++++++++++++++ docs/consumption/extensions.md | 3 +- docs/index.md | 1 + 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 docs/bundle/consumption_extension.md diff --git a/docs/bundle/consumption_extension.md b/docs/bundle/consumption_extension.md new file mode 100644 index 000000000..38657c58f --- /dev/null +++ b/docs/bundle/consumption_extension.md @@ -0,0 +1,41 @@ +# Consumption extension + +Here, I show how you can crate a custom extension and register it. +Let's first create an extension itself: + +```php +processedMessages += 1; + } +} +``` + +Now we have to register as a Symfony service with special tag: + +```yaml +services: + app.enqueue.count_processed_messages_extension: + class: 'AppBundle\Enqueue\CountProcessedMessagesExtension' + tags: + - { name: 'enqueue.consumption.extension', priority: 10 } +``` + +[back to index](../index.md) \ No newline at end of file diff --git a/docs/consumption/extensions.md b/docs/consumption/extensions.md index affab1a9f..31a47e29e 100644 --- a/docs/consumption/extensions.md +++ b/docs/consumption/extensions.md @@ -1,6 +1,7 @@ # Consumption extensions. - +You can learn how to register extensions in [quick tour](../quick_tour.md#consumption). +There's dedicated [chapter](../bundle/consumption_extension.md) for how to add extension in Symfony app. ## [LoggerExtension](https://github.com/php-enqueue/enqueue-dev/blob/master/pkg/enqueue/Consumption/Extension/LoggerExtension.php) diff --git a/docs/index.md b/docs/index.md index 4c00f474d..8d35702ac 100644 --- a/docs/index.md +++ b/docs/index.md @@ -12,6 +12,7 @@ - [Config reference](bundle/config_reference.md) - [Cli commands](bundle/cli_commands.md) - [Job queue](bundle/job_queue.md) + - [Consumption extension](bundle/consumption_extension.md) - [Production settings](bundle/production_settings.md) - [Debuging](bundle/debuging.md) - [Functional testing](bundle/functional_testing.md) \ No newline at end of file From ba651f2993f97edfa8b4b2511a703136749fc8a4 Mon Sep 17 00:00:00 2001 From: Maksim Kotlyar Date: Fri, 30 Dec 2016 15:32:42 +0200 Subject: [PATCH 13/23] [docs] fix link --- docs/quick_tour.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/quick_tour.md b/docs/quick_tour.md index 26cd1aeed..b95103c91 100644 --- a/docs/quick_tour.md +++ b/docs/quick_tour.md @@ -87,7 +87,7 @@ $queueConsumer->bind('bar_queue', function(Message $message) { $queueConsumer->consume(); ``` -There are bunch of [extensions](consumption_extensions.md) available. +There are bunch of [extensions](consumption/extensions.md) available. This is an example of how you can add them. The `SignalExtension` provides support of process signals, whenever you send SIGTERM for example it will correctly managed. The `LimitConsumptionTimeExtension` interrupts the consumption after given time. From 62819cde4d568076c3e874bec6ebf1a324f47555 Mon Sep 17 00:00:00 2001 From: Maksim Kotlyar Date: Fri, 30 Dec 2016 15:34:27 +0200 Subject: [PATCH 14/23] [doc] fix doc title --- docs/bundle/quick_tour.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/bundle/quick_tour.md b/docs/bundle/quick_tour.md index c0fecf206..b1f30aa29 100644 --- a/docs/bundle/quick_tour.md +++ b/docs/bundle/quick_tour.md @@ -1,4 +1,4 @@ -# Message queue bundle. Quick tour. +# EnqueueBundle. Quick tour. The bundle integrates MessageQueue component. It adds easy to use configuration layer, register services and tie them together, register handy cli commands. From 106fc9e636cd1e7d94017dfdd1770321e6f902c0 Mon Sep 17 00:00:00 2001 From: Maksim Kotlyar Date: Fri, 30 Dec 2016 15:35:54 +0200 Subject: [PATCH 15/23] [docs] add links --- docs/bundle/quick_tour.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/bundle/quick_tour.md b/docs/bundle/quick_tour.md index b1f30aa29..fea046af8 100644 --- a/docs/bundle/quick_tour.md +++ b/docs/bundle/quick_tour.md @@ -1,7 +1,7 @@ # EnqueueBundle. Quick tour. -The bundle integrates MessageQueue component. -It adds easy to use configuration layer, register services and tie them together, register handy cli commands. +The bundle integrates enqueue library. +It adds easy to use [configuration layer](config_reference.md), register services, adds handy [cli commands](cli_commands.md). ## Install From 0f25c3322aa99efb7406003676e59b31a8c092fe Mon Sep 17 00:00:00 2001 From: Maksim Kotlyar Date: Fri, 30 Dec 2016 19:35:18 +0200 Subject: [PATCH 16/23] [bundle] Add ability to disable signal extension. --- .../DependencyInjection/Configuration.php | 1 + .../DependencyInjection/EnqueueExtension.php | 6 ++- .../config/extensions/signal_extension.yml | 6 +++ .../Resources/config/services.yml | 6 --- .../DependencyInjection/ConfigurationTest.php | 39 +++++++++++++++++- ...nsionTest.php => EnqueueExtensionTest.php} | 40 +++++++++++++++++-- ...ueBundleTest.php => EnqueueBundleTest.php} | 6 +-- 7 files changed, 89 insertions(+), 15 deletions(-) create mode 100644 pkg/enqueue-bundle/Resources/config/extensions/signal_extension.yml rename pkg/enqueue-bundle/Tests/Unit/DependencyInjection/{FormaproMessageQueueExtensionTest.php => EnqueueExtensionTest.php} (93%) rename pkg/enqueue-bundle/Tests/Unit/{FormaproMessageQueueBundleTest.php => EnqueueBundleTest.php} (100%) diff --git a/pkg/enqueue-bundle/DependencyInjection/Configuration.php b/pkg/enqueue-bundle/DependencyInjection/Configuration.php index efb7018b5..952fb2906 100644 --- a/pkg/enqueue-bundle/DependencyInjection/Configuration.php +++ b/pkg/enqueue-bundle/DependencyInjection/Configuration.php @@ -53,6 +53,7 @@ public function getConfigTreeBuilder() ->arrayNode('extensions')->addDefaultsIfNotSet()->children() ->booleanNode('doctrine_ping_connection_extension')->defaultFalse()->end() ->booleanNode('doctrine_clear_identity_map_extension')->defaultFalse()->end() + ->booleanNode('signal_extension')->defaultValue(function_exists('pcntl_signal_dispatch'))->end() ->end()->end() ; diff --git a/pkg/enqueue-bundle/DependencyInjection/EnqueueExtension.php b/pkg/enqueue-bundle/DependencyInjection/EnqueueExtension.php index dec578ad8..558e09f39 100644 --- a/pkg/enqueue-bundle/DependencyInjection/EnqueueExtension.php +++ b/pkg/enqueue-bundle/DependencyInjection/EnqueueExtension.php @@ -1,8 +1,8 @@ load('extensions/doctrine_clear_identity_map_extension.yml'); } + + if ($config['extensions']['signal_extension']) { + $loader->load('extensions/signal_extension.yml'); + } } /** diff --git a/pkg/enqueue-bundle/Resources/config/extensions/signal_extension.yml b/pkg/enqueue-bundle/Resources/config/extensions/signal_extension.yml new file mode 100644 index 000000000..e7609eb06 --- /dev/null +++ b/pkg/enqueue-bundle/Resources/config/extensions/signal_extension.yml @@ -0,0 +1,6 @@ +services: + enqueue.consumption.signal_extension: + class: 'Enqueue\Consumption\Extension\SignalExtension' + public: false + tags: + - { name: 'enqueue.consumption.extension' } \ No newline at end of file diff --git a/pkg/enqueue-bundle/Resources/config/services.yml b/pkg/enqueue-bundle/Resources/config/services.yml index 0aa02500f..63f608f1c 100644 --- a/pkg/enqueue-bundle/Resources/config/services.yml +++ b/pkg/enqueue-bundle/Resources/config/services.yml @@ -5,12 +5,6 @@ services: arguments: - [] - enqueue.consumption.signal_extension: - class: 'Enqueue\Consumption\Extension\SignalExtension' - public: false - tags: - - { name: 'enqueue.consumption.extension' } - enqueue.consumption.queue_consumer: class: 'Enqueue\Consumption\QueueConsumer' arguments: diff --git a/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/ConfigurationTest.php b/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/ConfigurationTest.php index 5b756f9b1..5f2e87426 100644 --- a/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/ConfigurationTest.php +++ b/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/ConfigurationTest.php @@ -1,11 +1,11 @@ processConfiguration($configuration, [[ + 'transport' => [], + ]]); + + $this->assertArraySubset([ + 'extensions' => [ + 'signal_extension' => true, + ], + ], $config); + } + + public function testSignalExtensionCouldBeDisabled() + { + $configuration = new Configuration([]); + + $processor = new Processor(); + $config = $processor->processConfiguration($configuration, [[ + 'transport' => [], + 'extensions' => [ + 'signal_extension' => false, + ], + ]]); + + $this->assertArraySubset([ + 'extensions' => [ + 'signal_extension' => false, + ], + ], $config); + } } diff --git a/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/FormaproMessageQueueExtensionTest.php b/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/EnqueueExtensionTest.php similarity index 93% rename from pkg/enqueue-bundle/Tests/Unit/DependencyInjection/FormaproMessageQueueExtensionTest.php rename to pkg/enqueue-bundle/Tests/Unit/DependencyInjection/EnqueueExtensionTest.php index 9ea21b829..90ad9d05c 100644 --- a/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/FormaproMessageQueueExtensionTest.php +++ b/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/EnqueueExtensionTest.php @@ -1,15 +1,15 @@ hasDefinition('enqueue.consumption.doctrine_clear_identity_map_extension')); } + + public function testShouldLoadSignalExtensionServiceIfEnabled() + { + $container = new ContainerBuilder(); + $container->setParameter('kernel.debug', true); + + $extension = new EnqueueExtension(); + + $extension->load([[ + 'transport' => [], + 'extensions' => [ + 'signal_extension' => true, + ], + ]], $container); + + self::assertTrue($container->hasDefinition('enqueue.consumption.signal_extension')); + } + + public function testShouldNotLoadSignalExtensionServiceIfDisabled() + { + $container = new ContainerBuilder(); + $container->setParameter('kernel.debug', true); + + $extension = new EnqueueExtension(); + + $extension->load([[ + 'transport' => [], + 'extensions' => [ + 'signal_extension' => false, + ], + ]], $container); + + self::assertFalse($container->hasDefinition('enqueue.consumption.signal_extension')); + } } diff --git a/pkg/enqueue-bundle/Tests/Unit/FormaproMessageQueueBundleTest.php b/pkg/enqueue-bundle/Tests/Unit/EnqueueBundleTest.php similarity index 100% rename from pkg/enqueue-bundle/Tests/Unit/FormaproMessageQueueBundleTest.php rename to pkg/enqueue-bundle/Tests/Unit/EnqueueBundleTest.php index 04a72bea4..71b652842 100644 --- a/pkg/enqueue-bundle/Tests/Unit/FormaproMessageQueueBundleTest.php +++ b/pkg/enqueue-bundle/Tests/Unit/EnqueueBundleTest.php @@ -3,9 +3,6 @@ use Enqueue\AmqpExt\Symfony\AmqpTransportFactory; use Enqueue\AmqpExt\Symfony\RabbitMqTransportFactory; -use Enqueue\Symfony\DefaultTransportFactory; -use Enqueue\Symfony\NullTransportFactory; -use Enqueue\Test\ClassExtensionTrait; use Enqueue\Bundle\DependencyInjection\Compiler\BuildClientRoutingPass; use Enqueue\Bundle\DependencyInjection\Compiler\BuildExtensionsPass; use Enqueue\Bundle\DependencyInjection\Compiler\BuildMessageProcessorRegistryPass; @@ -15,6 +12,9 @@ use Enqueue\Bundle\EnqueueBundle; use Enqueue\Stomp\Symfony\RabbitMqStompTransportFactory; use Enqueue\Stomp\Symfony\StompTransportFactory; +use Enqueue\Symfony\DefaultTransportFactory; +use Enqueue\Symfony\NullTransportFactory; +use Enqueue\Test\ClassExtensionTrait; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Bundle\Bundle; From c15cc2c76c84d95a050dbcd60e6dc67422e12688 Mon Sep 17 00:00:00 2001 From: Maksim Kotlyar Date: Fri, 30 Dec 2016 19:49:22 +0200 Subject: [PATCH 17/23] [psr] Remove message listener class. not used --- pkg/psr-queue/MessageListener.php | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 pkg/psr-queue/MessageListener.php diff --git a/pkg/psr-queue/MessageListener.php b/pkg/psr-queue/MessageListener.php deleted file mode 100644 index a2584ac1f..000000000 --- a/pkg/psr-queue/MessageListener.php +++ /dev/null @@ -1,10 +0,0 @@ - Date: Sun, 1 Jan 2017 22:54:02 +0200 Subject: [PATCH 18/23] [doc] add docs --- docs/client/message_bus.md | 16 +++++ docs/client/message_examples.md | 78 ++++++++++++++++++++++ docs/client/supported_brokers.md | 17 +++++ docs/index.md | 7 ++ docs/job_queue/run_sub_job.md | 63 ++++++++++++++++++ docs/job_queue/run_unique_job.md | 39 +++++++++++ docs/quick_tour.md | 109 ++----------------------------- 7 files changed, 226 insertions(+), 103 deletions(-) create mode 100644 docs/client/message_bus.md create mode 100644 docs/client/message_examples.md create mode 100644 docs/client/supported_brokers.md create mode 100644 docs/job_queue/run_sub_job.md create mode 100644 docs/job_queue/run_unique_job.md diff --git a/docs/client/message_bus.md b/docs/client/message_bus.md new file mode 100644 index 000000000..24d29ccd0 --- /dev/null +++ b/docs/client/message_bus.md @@ -0,0 +1,16 @@ +# Client. Message bus + +Here's a description of message bus from [Enterprise Integration Patterns](http://www.enterpriseintegrationpatterns.com/patterns/messaging/MessageBus.html) + +> A Message Bus is a combination of a common data model, a common command set, and a messaging infrastructure to allow different systems to communicate through a shared set of interfaces. + +If all your applications built on top of Enqueue Client you have to only make sure they send message to a shared topic. +The rest is done under the hood. + +If you'd like to connect another application (written on Python for example ) you have to follow these rules: + +* An application defines its own queue that is connected to the topic as fanout. +* A message sent to message bus topic must have a header `enqueue.topic_name`. +* Once a message is received it could be routed internally. `enqueue.topic_name` header could be used for that. + +[back to index](../index.md) diff --git a/docs/client/message_examples.md b/docs/client/message_examples.md new file mode 100644 index 000000000..f39c1c027 --- /dev/null +++ b/docs/client/message_examples.md @@ -0,0 +1,78 @@ +# Client. Message examples + +## Delay + +Message sent with a delay set is processed after the delay time exceed. +Some brokers may not support it from scratch. +In order to use delay feature with [RabbitMQ](https://www.rabbitmq.com/) you have to install a [delay plugin](https://github.com/rabbitmq/rabbitmq-delayed-message-exchange). + +```php +setDelay(60); // seconds + +/** @var \Enqueue\Client\MessageProducerInterface $producer */ +$producer->send('aTopic', $message); +``` + +## Expiration (TTL) + +The message may have an expiration or TTL (time to live). +The message is removed from the queue if the expiration exceeded but the message has not been consumed. +For example it make sense to send a forgot password email within first few minutes, nobody needs it in an hour. + +```php +setExpire(60); // seconds + +/** @var \Enqueue\Client\MessageProducerInterface $producer */ +$producer->send('aTopic', $message); +``` + +## Priority + +You can set a priority If you want a message to be processed quicker than other messages in the queue. +Client defines five priority constants: `MessagePriority::VERY_LOW`, `MessagePriority::LOW`, `MessagePriority::NORMAL`, `MessagePriority::HIGH`, `MessagePriority::VERY_HIGH`. +The `MessagePriority::NORMAL` is default priority. + +```php +setPriority(MessagePriority::HIGH); + +/** @var \Enqueue\Client\MessageProducerInterface $producer */ +$producer->send('aTopic', $message); +``` + +## Timestamp, Content type, Message id + +Those are self describing things. +Usually they are set by Client so you dont have to worry about them. +If you do not like what Client set you can always set custom values: + +```php +setMessageId('aCustomMessageId'); +$message->setTimestamp(time()); +$message->setContentType('text/plain'); + +/** @var \Enqueue\Client\MessageProducerInterface $producer */ +$producer->send('aTopic', $message); +``` + +[back to index](../index.md) diff --git a/docs/client/supported_brokers.md b/docs/client/supported_brokers.md new file mode 100644 index 000000000..39c92c215 --- /dev/null +++ b/docs/client/supported_brokers.md @@ -0,0 +1,17 @@ +# Client. Supported brokers + +Here's the list of protocols and Client features supported by them + +| Protocol | Priority | Delay | Expiration | Setup broker | Message bus | +|:--------------:|:--------:|:--------:|:----------:|:------------:|:-----------:| +| AMQP | No | No | Yes | Yes | Yes | +| RabbitMQ AMQP | Yes | Yes* | Yes | Yes | Yes | +| STOMP | No | No | Yes | No | Yes** | +| RabbitMQ STOMP | Yes | Yes* | Yes | Yes*** | Yes** | + + +* \* Possible if a RabbitMQ delay plugin is installed. +* \*\* Possible if topics (exchanges) are configured on broker side manually. +* \*\*\* Possible if RabbitMQ Managment Plugin is installed. + +[back to index](../index.md) \ No newline at end of file diff --git a/docs/index.md b/docs/index.md index 8d35702ac..f9e68aad0 100644 --- a/docs/index.md +++ b/docs/index.md @@ -7,6 +7,13 @@ - [NULL](null_transport.md) * Consumption - [Extensions](consumption/extensions.md) +* Client + - [Message examples](client/message_examples.md) + - [Supported brokers](client/supported_brokers.md) + - [Message bus](client/message_bus.md) +* Job queue + - [Run unique job](job_queue/run_unique_job.md) + - [Run sub job(s)](job_queue/run_sub_job.md) * EnqueueBundle (Symfony). - [Quick tour](bundle/quick_tour.md) - [Config reference](bundle/config_reference.md) diff --git a/docs/job_queue/run_sub_job.md b/docs/job_queue/run_sub_job.md new file mode 100644 index 000000000..a1dacd817 --- /dev/null +++ b/docs/job_queue/run_sub_job.md @@ -0,0 +1,63 @@ +## Job queue. Run sub job + +It shows how you can create and run a sub job, which it is executed separately. +You can create as many sub jobs as you like. +They will be executed in parallel. + +```php +jobRunner->runUnique($message->getMessageId(), 'aJobName', function (JobRunner $runner) { + $runner->createDelayed('aSubJobName1', function (JobRunner $runner, Job $childJob) { + $this->producer->send('aJobTopic', [ + 'jobId' => $childJob->getId(), + // other data required by sub job + ]); + }); + + return true; + }); + + return $result ? Result::ACK : Result::REJECT; + } +} + +class SubJobMessageProcessor implements MessageProcessorInterface +{ + /** @var JobRunner */ + private $jobRunner; + + public function process(Message $message, Context $context) + { + $data = JSON::decode($message->getBody()); + + $result = $this->jobRunner->runDelayed($data['jobId'], function () use ($data) { + // do your job + + return true; + }); + + return $result ? Result::ACK : Result::REJECT; + } +} +``` + +[back to index](../index.md) \ No newline at end of file diff --git a/docs/job_queue/run_unique_job.md b/docs/job_queue/run_unique_job.md new file mode 100644 index 000000000..0e89d268e --- /dev/null +++ b/docs/job_queue/run_unique_job.md @@ -0,0 +1,39 @@ +## Job queue. Run unique job + +There is job queue component build on top of a transport. It provides some additional features: + +* Stores jobs to a database. So you can query that information and build a UI for it. +* Run unique job feature. If used guarantee that there is not any job with the same name running same time. +* Sub jobs. If used allow split a big job into smaller pieces and process them asynchronously and in parallel. +* Depended job. If used allow send a message when the whole job is finished (including sub jobs). + +Here's some examples. +It shows how you can run unique job using job queue (The configuration is described in a dedicated chapter). + +```php +jobRunner->runUnique($message->getMessageId(), 'aJobName', function () { + // do your job, there is no any other processes executing same job, + + return true; // if you want to ACK message or false to REJECT + }); + + return $result ? Result::ACK : Result::REJECT; + } +} +``` + +[back to index](../index.md) \ No newline at end of file diff --git a/docs/quick_tour.md b/docs/quick_tour.md index b95103c91..f2142af9f 100644 --- a/docs/quick_tour.md +++ b/docs/quick_tour.md @@ -156,11 +156,12 @@ $queueConsumer->consume(); ## Client -It provides a high level abstraction. -The goal of the component is hide as much as possible details from you so you can concentrate on things that really matters. -For example, It configure a broker for you, if needed. -It provides easy to use services for producing and processing messages. -It supports message bus so different applications can send message to each other. +It provides an easy to use high level abstraction. +The goal of the component is hide as much as possible low level details so you can concentrate on things that really matters. +For example, It configure a broker for you by creating queuest, exchanges and bind them. +It provides easy to use services for producing and processing messages. +It supports unified format for setting message expiration, delay, timestamp, correlation id. +It supports message bus so different applications can talk to each other. Here's an example of how you can send and consume messages. @@ -185,104 +186,6 @@ $client->send('foo_topic', 'Hello there!'); $client->consume(); ``` -## Job queue - -There is job queue component build on top of a transport. It provides some additional features: - -* Stores jobs to a database. So you can query that information and build a UI for it. -* Run unique job feature. If used guarantee that there is not any job with the same name running same time. -* Sub jobs. If used allow split a big job into smaller pieces and process them asynchronously and in parallel. -* Depended job. If used allow send a message when the whole job is finished (including sub jobs). - -Here's some examples. -First shows how you can run unique job using job queue (The configuration is described in a dedicated chapter). - -```php -jobRunner->runUnique($message->getMessageId(), 'aJobName', function () { - // do your job, there is no any other processes executing same job, - - return true; // if you want to ACK message or false to REJECT - }); - - return $result ? Result::ACK : Result::REJECT; - } -} -``` - -Second shows how you can create and run a sub job, which it is executed separately. -You can create as many sub jobs as you like. -They will be executed in parallel. - -```php -jobRunner->runUnique($message->getMessageId(), 'aJobName', function (JobRunner $runner) { - $runner->createDelayed('aSubJobName1', function (JobRunner $runner, Job $childJob) { - $this->producer->send('aJobTopic', [ - 'jobId' => $childJob->getId(), - // other data required by sub job - ]); - }); - - return true; - }); - - return $result ? Result::ACK : Result::REJECT; - } -} - -class SubJobMessageProcessor implements MessageProcessorInterface -{ - /** @var JobRunner */ - private $jobRunner; - - public function process(Message $message, Context $context) - { - $data = JSON::decode($message->getBody()); - - $result = $this->jobRunner->runDelayed($data['jobId'], function () use ($data) { - // do your job - - return true; - }); - - return $result ? Result::ACK : Result::REJECT; - } -} -``` - ## Cli commands The library provides handy commands out of the box. From ddf6275980b8282e6ef52b1fa5be9e6c241df991 Mon Sep 17 00:00:00 2001 From: Maksim Kotlyar Date: Sun, 1 Jan 2017 22:59:19 +0200 Subject: [PATCH 19/23] [docs] fixes --- docs/amqp_transport.md | 3 +++ docs/quick_tour.md | 3 +-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/amqp_transport.md b/docs/amqp_transport.md index a673f285f..d777edd4e 100644 --- a/docs/amqp_transport.md +++ b/docs/amqp_transport.md @@ -1,5 +1,8 @@ # AMQP transport +Implements [AMQP specifications](https://www.rabbitmq.com/specification.html). +Build on top of [php amqp extension](https://github.com/pdezwart/php-amqp). + * [Create context](#create-context) * [Declare topic](#declare-topic) * [Declare queue](#decalre-queue) diff --git a/docs/quick_tour.md b/docs/quick_tour.md index f2142af9f..2fb212a97 100644 --- a/docs/quick_tour.md +++ b/docs/quick_tour.md @@ -4,7 +4,6 @@ * [Consumption](#consumption) * [Remote Procedure Call (RPC)](#remote-procedure-call-rpc) * [Client](#client) -* [Job queue](#job-queue) * [Cli commands](#cli-commands) ## Transport @@ -221,7 +220,7 @@ $app->run(); and starts the consumption from the console: ```bash -$ app.php consume --time-limit="now + 60 sec" --message-limit=10 --memory-limit=256 +$ app.php consume ``` [back to index](index.md) From 192637a6f6e2c42abbf32bcc94642b5403edc7a6 Mon Sep 17 00:00:00 2001 From: Maksim Kotlyar Date: Tue, 3 Jan 2017 19:02:57 +0200 Subject: [PATCH 20/23] [docs] add contribution doc. --- docs/contribution.md | 29 +++++++++++++++++++++++++++++ docs/index.md | 5 ++++- 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 docs/contribution.md diff --git a/docs/contribution.md b/docs/contribution.md new file mode 100644 index 000000000..dce0a0f07 --- /dev/null +++ b/docs/contribution.md @@ -0,0 +1,29 @@ +# Contribution + +To contribute you have to fork a [enqueue-dev](https://github.com/php-enqueue/enqueue-dev) repository. +Clone it locally. + +## Setup environment + +``` +composer install +./bin/pre-commit -i +./bin/dev -b +``` + +Once you did it you can work on a feature or bug fix. + +## Testing + +To run tests simply run + +``` +./bin/dev -t +``` + +## Commit + +When you try to commit changes `php-cs-fixer` is run. It fixes all coding style issues. Dont forget to stage them and commit everything. +Once everything is done open a pull request on official repository. + +[back to index](index.md) \ No newline at end of file diff --git a/docs/index.md b/docs/index.md index f9e68aad0..6dfcaebc9 100644 --- a/docs/index.md +++ b/docs/index.md @@ -22,4 +22,7 @@ - [Consumption extension](bundle/consumption_extension.md) - [Production settings](bundle/production_settings.md) - [Debuging](bundle/debuging.md) - - [Functional testing](bundle/functional_testing.md) \ No newline at end of file + - [Functional testing](bundle/functional_testing.md) +* Development + - [Contribution](contribution.md) + \ No newline at end of file From 2bb31ae646c7b8f0b3a506c09695c2f3a6051f99 Mon Sep 17 00:00:00 2001 From: Maksim Kotlyar Date: Wed, 4 Jan 2017 17:30:55 +0200 Subject: [PATCH 21/23] [psr] Introduce MessageProcessor interface (moved from consumption). It would allow to decouple consumption code from consumption component. It must depends on psr queue only. --- docs/bundle/job_queue.md | 24 +- docs/bundle/quick_tour.md | 15 +- docs/job_queue/run_sub_job.md | 9 +- docs/job_queue/run_unique_job.md | 7 +- docs/quick_tour.md | 14 +- .../AmqpConsumptionUseCasesTest.php | 14 +- .../Compiler/BuildClientRoutingPass.php | 4 +- ...ass.php => BuildProcessorRegistryPass.php} | 8 +- .../Compiler/BuildQueueMetaRegistryPass.php | 4 +- .../BuildTopicMetaSubscribersPass.php | 4 +- ...ExtractProcessorTagSubscriptionsTrait.php} | 2 +- pkg/enqueue-bundle/EnqueueBundle.php | 8 +- .../Resources/config/client.yml | 14 +- pkg/enqueue-bundle/Resources/config/job.yml | 6 +- .../Functional/ConsumeMessagesCommandTest.php | 26 +- ...MessageProcessor.php => TestProcessor.php} | 9 +- .../Functional/app/config/amqp-config.yml | 4 +- .../DoctrineClearIdentityMapExtensionTest.php | 8 +- .../DoctrinePingConnectionExtensionTest.php | 8 +- .../Compiler/BuildClientRoutingPassTest.php | 18 +- ...php => BuildProcessorRegistryPassTest.php} | 48 ++-- .../BuildQueueMetaRegistryPassTest.php | 16 +- .../BuildTopicMetaSubscribersPassTest.php | 26 +- .../Tests/Unit/EnqueueBundleTest.php | 4 +- .../Client/ArrayMessageProcessorRegistry.php | 41 --- pkg/enqueue/Client/ArrayProcessorRegistry.php | 41 +++ ...ageProcessor.php => DelegateProcessor.php} | 10 +- ...ace.php => ProcessorRegistryInterface.php} | 6 +- pkg/enqueue/Client/RouterProcessor.php | 7 +- pkg/enqueue/Client/SimpleClient.php | 12 +- ...ageProcessor.php => CallbackProcessor.php} | 3 +- pkg/enqueue/Consumption/Context.php | 21 +- .../Consumption/Extension/LoggerExtension.php | 2 +- .../Consumption/Extension/ReplyExtension.php | 3 +- .../Consumption/MessageProcessorInterface.php | 16 -- pkg/enqueue/Consumption/QueueConsumer.php | 49 ++-- pkg/enqueue/Consumption/Result.php | 71 +++-- .../Router/RouteRecipientListProcessor.php | 7 +- .../Symfony/Client/ConsumeMessagesCommand.php | 14 +- ...hp => ContainerAwareProcessorRegistry.php} | 14 +- .../ContainerAwareConsumeMessagesCommand.php | 14 +- .../ArrayMessageProcessorRegistryTest.php | 58 ----- .../Client/ArrayProcessorRegistryTest.php | 58 +++++ pkg/enqueue/Tests/Client/ConfigTest.php | 2 +- .../DelayRedeliveredMessageExtensionTest.php | 2 +- ...ssorTest.php => DelegateProcessorTest.php} | 36 +-- ...ssorTest.php => CallbackProcessorTest.php} | 14 +- pkg/enqueue/Tests/Consumption/ContextTest.php | 28 +- .../LimitConsumedMessagesExtensionTest.php | 8 +- .../LimitConsumerMemoryExtensionTest.php | 8 +- .../LimitConsumptionTimeExtensionTest.php | 8 +- .../Extension/LoggerExtensionTest.php | 4 +- .../Extension/ReplyExtensionTest.php | 6 +- .../Tests/Consumption/QueueConsumerTest.php | 246 +++++++++--------- .../Functional/Client/SimpleClientTest.php | 2 +- .../RouteRecipientListProcessorTest.php | 8 +- .../Client/ConsumeMessagesCommandTest.php | 24 +- ...> ContainerAwareProcessorRegistryTest.php} | 36 +-- ...ntainerAwareConsumeMessagesCommandTest.php | 16 +- .../CalculateRootJobStatusProcessor.php | 8 +- ...rocessor.php => DependentJobProcessor.php} | 16 +- .../CalculateRootJobStatusProcessorTest.php | 6 +- ...Test.php => DependentJobProcessorTest.php} | 40 +-- pkg/psr-queue/DeliveryMode.php | 2 +- pkg/psr-queue/Processor.php | 35 +++ .../Tests/{Exception => }/ExceptionTest.php | 2 +- .../InvalidDeliveryModeExceptionTest.php | 2 +- .../InvalidDestinationExceptionTest.php | 6 +- .../InvalidMessageExceptionTest.php | 2 +- .../StompConsumptionUseCasesTest.php | 16 +- 70 files changed, 671 insertions(+), 659 deletions(-) rename pkg/enqueue-bundle/DependencyInjection/Compiler/{BuildMessageProcessorRegistryPass.php => BuildProcessorRegistryPass.php} (77%) rename pkg/enqueue-bundle/DependencyInjection/Compiler/{ExtractMessageProcessorTagSubscriptionsTrait.php => ExtractProcessorTagSubscriptionsTrait.php} (98%) rename pkg/enqueue-bundle/Tests/Functional/{TestMessageProcessor.php => TestProcessor.php} (68%) rename pkg/enqueue-bundle/Tests/Unit/DependencyInjection/Compiler/{BuildMessageProcessorRegistryPassTest.php => BuildProcessorRegistryPassTest.php} (73%) delete mode 100644 pkg/enqueue/Client/ArrayMessageProcessorRegistry.php create mode 100644 pkg/enqueue/Client/ArrayProcessorRegistry.php rename pkg/enqueue/Client/{DelegateMessageProcessor.php => DelegateProcessor.php} (70%) rename pkg/enqueue/Client/{MessageProcessorRegistryInterface.php => ProcessorRegistryInterface.php} (50%) rename pkg/enqueue/Consumption/{CallbackMessageProcessor.php => CallbackProcessor.php} (87%) delete mode 100644 pkg/enqueue/Consumption/MessageProcessorInterface.php rename pkg/enqueue/Symfony/Client/{ContainerAwareMessageProcessorRegistry.php => ContainerAwareProcessorRegistry.php} (71%) delete mode 100644 pkg/enqueue/Tests/Client/ArrayMessageProcessorRegistryTest.php create mode 100644 pkg/enqueue/Tests/Client/ArrayProcessorRegistryTest.php rename pkg/enqueue/Tests/Client/{DelegateMessageProcessorTest.php => DelegateProcessorTest.php} (57%) rename pkg/enqueue/Tests/Consumption/{CallbackMessageProcessorTest.php => CallbackProcessorTest.php} (58%) rename pkg/enqueue/Tests/Symfony/Client/{ContainerAwareMessageProcessorRegistryTest.php => ContainerAwareProcessorRegistryTest.php} (52%) rename pkg/job-queue/{DependentJobMessageProcessor.php => DependentJobProcessor.php} (84%) rename pkg/job-queue/Tests/{DependentJobMessageProcessorTest.php => DependentJobProcessorTest.php} (86%) create mode 100644 pkg/psr-queue/Processor.php rename pkg/psr-queue/Tests/{Exception => }/ExceptionTest.php (93%) rename pkg/psr-queue/Tests/{Exception => }/InvalidDeliveryModeExceptionTest.php (96%) rename pkg/psr-queue/Tests/{Exception => }/InvalidDestinationExceptionTest.php (90%) rename pkg/psr-queue/Tests/{Exception => }/InvalidMessageExceptionTest.php (92%) diff --git a/docs/bundle/job_queue.md b/docs/bundle/job_queue.md index 7dc92e4aa..aded0212c 100644 --- a/docs/bundle/job_queue.md +++ b/docs/bundle/job_queue.md @@ -14,15 +14,14 @@ Guaranty that there is only single job running with such name. ```php getBody(); - return Result::ACK; - // return Result::REJECT; // when the message is broken - // return Result::REQUEUE; // the message is fine but you want to postpone processing + return self::ACK; + // return self::REJECT; // when the message is broken + // return self::REQUEUE; // the message is fine but you want to postpone processing } public static function getSubscribedTopics() @@ -72,9 +71,9 @@ Register it as a container service and subscribe to the topic: ```yaml foo_message_processor: - class: 'FooMessageProcessor' + class: 'FooProcessor' tags: - - { name: 'enqueue.client.message_processor' } + - { name: 'enqueue.client.processor' } ``` Now you can start consuming messages: diff --git a/docs/job_queue/run_sub_job.md b/docs/job_queue/run_sub_job.md index a1dacd817..e0322922e 100644 --- a/docs/job_queue/run_sub_job.md +++ b/docs/job_queue/run_sub_job.md @@ -6,16 +6,15 @@ They will be executed in parallel. ```php bind('foo_queue', function(Message $message) { // process messsage - return Result::ACK; + return Processor::ACK; }); $queueConsumer->bind('bar_queue', function(Message $message) { // process messsage - return Result::ACK; + return Processor::ACK; }); $queueConsumer->consume(); @@ -167,16 +167,16 @@ Here's an example of how you can send and consume messages. ```php bind('foo_topic', function (Message $message) { // process message - return Result::ACK; + return Processor::ACK; }); $client->send('foo_topic', 'Hello there!'); diff --git a/pkg/amqp-ext/Tests/Functional/AmqpConsumptionUseCasesTest.php b/pkg/amqp-ext/Tests/Functional/AmqpConsumptionUseCasesTest.php index 15ffb2a2f..66705ae7f 100644 --- a/pkg/amqp-ext/Tests/Functional/AmqpConsumptionUseCasesTest.php +++ b/pkg/amqp-ext/Tests/Functional/AmqpConsumptionUseCasesTest.php @@ -2,15 +2,15 @@ namespace Enqueue\AmqpExt\Tests\Functional; use Enqueue\AmqpExt\AmqpContext; -use Enqueue\Psr\Context; -use Enqueue\Psr\Message; use Enqueue\Consumption\ChainExtension; use Enqueue\Consumption\Extension\LimitConsumedMessagesExtension; use Enqueue\Consumption\Extension\LimitConsumptionTimeExtension; use Enqueue\Consumption\Extension\ReplyExtension; -use Enqueue\Consumption\MessageProcessorInterface; use Enqueue\Consumption\QueueConsumer; use Enqueue\Consumption\Result; +use Enqueue\Psr\Context; +use Enqueue\Psr\Message; +use Enqueue\Psr\Processor; use Enqueue\Test\RabbitmqAmqpExtension; use Enqueue\Test\RabbitmqManagmentExtensionTrait; @@ -52,7 +52,7 @@ public function testConsumeOneMessageAndExit() new LimitConsumptionTimeExtension(new \DateTime('+3sec')), ])); - $processor = new StubMessageProcessor(); + $processor = new StubProcessor(); $queueConsumer->bind($queue, $processor); $queueConsumer->consume(); @@ -81,10 +81,10 @@ public function testConsumeOneMessageAndSendReplyExit() $replyMessage = $this->amqpContext->createMessage(__METHOD__.'.reply'); - $processor = new StubMessageProcessor(); + $processor = new StubProcessor(); $processor->result = Result::reply($replyMessage); - $replyProcessor = new StubMessageProcessor(); + $replyProcessor = new StubProcessor(); $queueConsumer->bind($queue, $processor); $queueConsumer->bind($replyQueue, $replyProcessor); @@ -98,7 +98,7 @@ public function testConsumeOneMessageAndSendReplyExit() } } -class StubMessageProcessor implements MessageProcessorInterface +class StubProcessor implements Processor { public $result = Result::ACK; diff --git a/pkg/enqueue-bundle/DependencyInjection/Compiler/BuildClientRoutingPass.php b/pkg/enqueue-bundle/DependencyInjection/Compiler/BuildClientRoutingPass.php index ccce00370..a1e95c750 100644 --- a/pkg/enqueue-bundle/DependencyInjection/Compiler/BuildClientRoutingPass.php +++ b/pkg/enqueue-bundle/DependencyInjection/Compiler/BuildClientRoutingPass.php @@ -6,14 +6,14 @@ class BuildClientRoutingPass implements CompilerPassInterface { - use ExtractMessageProcessorTagSubscriptionsTrait; + use ExtractProcessorTagSubscriptionsTrait; /** * {@inheritdoc} */ public function process(ContainerBuilder $container) { - $processorTagName = 'enqueue.client.message_processor'; + $processorTagName = 'enqueue.client.processor'; $routerId = 'enqueue.client.router_processor'; if (false == $container->hasDefinition($routerId)) { diff --git a/pkg/enqueue-bundle/DependencyInjection/Compiler/BuildMessageProcessorRegistryPass.php b/pkg/enqueue-bundle/DependencyInjection/Compiler/BuildProcessorRegistryPass.php similarity index 77% rename from pkg/enqueue-bundle/DependencyInjection/Compiler/BuildMessageProcessorRegistryPass.php rename to pkg/enqueue-bundle/DependencyInjection/Compiler/BuildProcessorRegistryPass.php index df489c716..c6835b243 100644 --- a/pkg/enqueue-bundle/DependencyInjection/Compiler/BuildMessageProcessorRegistryPass.php +++ b/pkg/enqueue-bundle/DependencyInjection/Compiler/BuildProcessorRegistryPass.php @@ -4,17 +4,17 @@ use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; -class BuildMessageProcessorRegistryPass implements CompilerPassInterface +class BuildProcessorRegistryPass implements CompilerPassInterface { - use ExtractMessageProcessorTagSubscriptionsTrait; + use ExtractProcessorTagSubscriptionsTrait; /** * {@inheritdoc} */ public function process(ContainerBuilder $container) { - $processorTagName = 'enqueue.client.message_processor'; - $processorRegistryId = 'enqueue.client.message_processor_registry'; + $processorTagName = 'enqueue.client.processor'; + $processorRegistryId = 'enqueue.client.processor_registry'; if (false == $container->hasDefinition($processorRegistryId)) { return; diff --git a/pkg/enqueue-bundle/DependencyInjection/Compiler/BuildQueueMetaRegistryPass.php b/pkg/enqueue-bundle/DependencyInjection/Compiler/BuildQueueMetaRegistryPass.php index 96d99d22d..aeaba4f47 100644 --- a/pkg/enqueue-bundle/DependencyInjection/Compiler/BuildQueueMetaRegistryPass.php +++ b/pkg/enqueue-bundle/DependencyInjection/Compiler/BuildQueueMetaRegistryPass.php @@ -6,14 +6,14 @@ class BuildQueueMetaRegistryPass implements CompilerPassInterface { - use ExtractMessageProcessorTagSubscriptionsTrait; + use ExtractProcessorTagSubscriptionsTrait; /** * {@inheritdoc} */ public function process(ContainerBuilder $container) { - $processorTagName = 'enqueue.client.message_processor'; + $processorTagName = 'enqueue.client.processor'; $queueMetaRegistryId = 'enqueue.client.meta.queue_meta_registry'; if (false == $container->hasDefinition($queueMetaRegistryId)) { return; diff --git a/pkg/enqueue-bundle/DependencyInjection/Compiler/BuildTopicMetaSubscribersPass.php b/pkg/enqueue-bundle/DependencyInjection/Compiler/BuildTopicMetaSubscribersPass.php index cf53cb388..5a9e29c6e 100644 --- a/pkg/enqueue-bundle/DependencyInjection/Compiler/BuildTopicMetaSubscribersPass.php +++ b/pkg/enqueue-bundle/DependencyInjection/Compiler/BuildTopicMetaSubscribersPass.php @@ -6,14 +6,14 @@ class BuildTopicMetaSubscribersPass implements CompilerPassInterface { - use ExtractMessageProcessorTagSubscriptionsTrait; + use ExtractProcessorTagSubscriptionsTrait; /** * {@inheritdoc} */ public function process(ContainerBuilder $container) { - $processorTagName = 'enqueue.client.message_processor'; + $processorTagName = 'enqueue.client.processor'; $topicsSubscribers = []; foreach ($container->findTaggedServiceIds($processorTagName) as $serviceId => $tagAttributes) { diff --git a/pkg/enqueue-bundle/DependencyInjection/Compiler/ExtractMessageProcessorTagSubscriptionsTrait.php b/pkg/enqueue-bundle/DependencyInjection/Compiler/ExtractProcessorTagSubscriptionsTrait.php similarity index 98% rename from pkg/enqueue-bundle/DependencyInjection/Compiler/ExtractMessageProcessorTagSubscriptionsTrait.php rename to pkg/enqueue-bundle/DependencyInjection/Compiler/ExtractProcessorTagSubscriptionsTrait.php index d0f9e2ea0..20a0ebc4b 100644 --- a/pkg/enqueue-bundle/DependencyInjection/Compiler/ExtractMessageProcessorTagSubscriptionsTrait.php +++ b/pkg/enqueue-bundle/DependencyInjection/Compiler/ExtractProcessorTagSubscriptionsTrait.php @@ -5,7 +5,7 @@ use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException; -trait ExtractMessageProcessorTagSubscriptionsTrait +trait ExtractProcessorTagSubscriptionsTrait { /** * @param ContainerBuilder $container diff --git a/pkg/enqueue-bundle/EnqueueBundle.php b/pkg/enqueue-bundle/EnqueueBundle.php index d230d3a71..29b2f725b 100644 --- a/pkg/enqueue-bundle/EnqueueBundle.php +++ b/pkg/enqueue-bundle/EnqueueBundle.php @@ -4,17 +4,17 @@ use Enqueue\AmqpExt\AmqpContext; use Enqueue\AmqpExt\Symfony\AmqpTransportFactory; use Enqueue\AmqpExt\Symfony\RabbitMqTransportFactory; -use Enqueue\Symfony\DefaultTransportFactory; -use Enqueue\Symfony\NullTransportFactory; use Enqueue\Bundle\DependencyInjection\Compiler\BuildClientRoutingPass; use Enqueue\Bundle\DependencyInjection\Compiler\BuildExtensionsPass; -use Enqueue\Bundle\DependencyInjection\Compiler\BuildMessageProcessorRegistryPass; +use Enqueue\Bundle\DependencyInjection\Compiler\BuildProcessorRegistryPass; use Enqueue\Bundle\DependencyInjection\Compiler\BuildQueueMetaRegistryPass; use Enqueue\Bundle\DependencyInjection\Compiler\BuildTopicMetaSubscribersPass; use Enqueue\Bundle\DependencyInjection\EnqueueExtension; use Enqueue\Stomp\StompContext; use Enqueue\Stomp\Symfony\RabbitMqStompTransportFactory; use Enqueue\Stomp\Symfony\StompTransportFactory; +use Enqueue\Symfony\DefaultTransportFactory; +use Enqueue\Symfony\NullTransportFactory; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Bundle\Bundle; @@ -27,7 +27,7 @@ public function build(ContainerBuilder $container) { $container->addCompilerPass(new BuildExtensionsPass()); $container->addCompilerPass(new BuildClientRoutingPass()); - $container->addCompilerPass(new BuildMessageProcessorRegistryPass()); + $container->addCompilerPass(new BuildProcessorRegistryPass()); $container->addCompilerPass(new BuildTopicMetaSubscribersPass()); $container->addCompilerPass(new BuildQueueMetaRegistryPass()); diff --git a/pkg/enqueue-bundle/Resources/config/client.yml b/pkg/enqueue-bundle/Resources/config/client.yml index 9ed2ce15e..ffcb806e0 100644 --- a/pkg/enqueue-bundle/Resources/config/client.yml +++ b/pkg/enqueue-bundle/Resources/config/client.yml @@ -18,12 +18,12 @@ services: - [] tags: - - name: 'enqueue.client.message_processor' + name: 'enqueue.client.processor' topicName: '__router__' queueName: '%enqueue.client.router_queue_name%' - enqueue.client.message_processor_registry: - class: 'Enqueue\Symfony\Client\ContainerAwareMessageProcessorRegistry' + enqueue.client.processor_registry: + class: 'Enqueue\Symfony\Client\ContainerAwareProcessorRegistry' public: false calls: - ['setContainer', ['@service_container']] @@ -38,11 +38,11 @@ services: public: true arguments: ['@enqueue.client.config', []] - enqueue.client.delegate_message_processor: - class: 'Enqueue\Client\DelegateMessageProcessor' + enqueue.client.delegate_processor: + class: 'Enqueue\Client\DelegateProcessor' public: false arguments: - - '@enqueue.client.message_processor_registry' + - '@enqueue.client.processor_registry' enqueue.client.extension.set_router_properties: class: 'Enqueue\Client\ConsumptionExtension\SetRouterPropertiesExtension' @@ -64,7 +64,7 @@ services: public: true arguments: - '@enqueue.client.queue_consumer' - - '@enqueue.client.delegate_message_processor' + - '@enqueue.client.delegate_processor' - '@enqueue.client.meta.queue_meta_registry' - '@enqueue.client.driver' tags: diff --git a/pkg/enqueue-bundle/Resources/config/job.yml b/pkg/enqueue-bundle/Resources/config/job.yml index 1dfb14638..4a05ce0c3 100644 --- a/pkg/enqueue-bundle/Resources/config/job.yml +++ b/pkg/enqueue-bundle/Resources/config/job.yml @@ -33,16 +33,16 @@ services: - '@enqueue.client.message_producer' - '@logger' tags: - - { name: 'enqueue.client.message_processor' } + - { name: 'enqueue.client.processor' } enqueue.job.dependent_job_processor: - class: 'Enqueue\JobQueue\DependentJobMessageProcessor' + class: 'Enqueue\JobQueue\DependentJobProcessor' arguments: - '@enqueue.job.storage' - '@enqueue.client.message_producer' - '@logger' tags: - - { name: 'enqueue.client.message_processor' } + - { name: 'enqueue.client.processor' } enqueue.job.dependent_job_service: class: 'Enqueue\JobQueue\DependentJobService' diff --git a/pkg/enqueue-bundle/Tests/Functional/ConsumeMessagesCommandTest.php b/pkg/enqueue-bundle/Tests/Functional/ConsumeMessagesCommandTest.php index 5dba0b292..47fcd0cbf 100644 --- a/pkg/enqueue-bundle/Tests/Functional/ConsumeMessagesCommandTest.php +++ b/pkg/enqueue-bundle/Tests/Functional/ConsumeMessagesCommandTest.php @@ -2,9 +2,9 @@ namespace Enqueue\Bundle\Tests\Functional; use Enqueue\AmqpExt\AmqpMessage; +use Enqueue\Bundle\Tests\Functional\App\AmqpAppKernel; use Enqueue\Symfony\Client\ConsumeMessagesCommand; use Enqueue\Test\RabbitmqManagmentExtensionTrait; -use Enqueue\Bundle\Tests\Functional\App\AmqpAppKernel; use Symfony\Component\Console\Tester\CommandTester; /** @@ -35,9 +35,9 @@ public function testCouldBeGetFromContainerAsService() public function testClientConsumeMessagesCommandShouldConsumeMessage() { $command = $this->container->get('enqueue.client.consume_messages_command'); - $messageProcessor = $this->container->get('test.message.processor'); + $processor = $this->container->get('test.message.processor'); - $this->getMessageProducer()->send(TestMessageProcessor::TOPIC, 'test message body'); + $this->getMessageProducer()->send(TestProcessor::TOPIC, 'test message body'); $tester = new CommandTester($command); $tester->execute([ @@ -45,16 +45,16 @@ public function testClientConsumeMessagesCommandShouldConsumeMessage() '--time-limit' => 'now +10 seconds', ]); - $this->assertInstanceOf(AmqpMessage::class, $messageProcessor->message); - $this->assertEquals('test message body', $messageProcessor->message->getBody()); + $this->assertInstanceOf(AmqpMessage::class, $processor->message); + $this->assertEquals('test message body', $processor->message->getBody()); } public function testClientConsumeMessagesFromExplicitlySetQueue() { $command = $this->container->get('enqueue.client.consume_messages_command'); - $messageProcessor = $this->container->get('test.message.processor'); + $processor = $this->container->get('test.message.processor'); - $this->getMessageProducer()->send(TestMessageProcessor::TOPIC, 'test message body'); + $this->getMessageProducer()->send(TestProcessor::TOPIC, 'test message body'); $tester = new CommandTester($command); $tester->execute([ @@ -63,17 +63,17 @@ public function testClientConsumeMessagesFromExplicitlySetQueue() 'client-queue-names' => ['test'], ]); - $this->assertInstanceOf(AmqpMessage::class, $messageProcessor->message); - $this->assertEquals('test message body', $messageProcessor->message->getBody()); + $this->assertInstanceOf(AmqpMessage::class, $processor->message); + $this->assertEquals('test message body', $processor->message->getBody()); } public function testTransportConsumeMessagesCommandShouldConsumeMessage() { $command = $this->container->get('enqueue.command.consume_messages'); $command->setContainer($this->container); - $messageProcessor = $this->container->get('test.message.processor'); + $processor = $this->container->get('test.message.processor'); - $this->getMessageProducer()->send(TestMessageProcessor::TOPIC, 'test message body'); + $this->getMessageProducer()->send(TestProcessor::TOPIC, 'test message body'); $tester = new CommandTester($command); $tester->execute([ @@ -83,8 +83,8 @@ public function testTransportConsumeMessagesCommandShouldConsumeMessage() 'processor-service' => 'test.message.processor', ]); - $this->assertInstanceOf(AmqpMessage::class, $messageProcessor->message); - $this->assertEquals('test message body', $messageProcessor->message->getBody()); + $this->assertInstanceOf(AmqpMessage::class, $processor->message); + $this->assertEquals('test message body', $processor->message->getBody()); } private function getMessageProducer() diff --git a/pkg/enqueue-bundle/Tests/Functional/TestMessageProcessor.php b/pkg/enqueue-bundle/Tests/Functional/TestProcessor.php similarity index 68% rename from pkg/enqueue-bundle/Tests/Functional/TestMessageProcessor.php rename to pkg/enqueue-bundle/Tests/Functional/TestProcessor.php index e08000d54..cea3c4e25 100644 --- a/pkg/enqueue-bundle/Tests/Functional/TestMessageProcessor.php +++ b/pkg/enqueue-bundle/Tests/Functional/TestProcessor.php @@ -1,13 +1,12 @@ message = $message; - return Result::ACK; + return self::ACK; } public static function getSubscribedTopics() diff --git a/pkg/enqueue-bundle/Tests/Functional/app/config/amqp-config.yml b/pkg/enqueue-bundle/Tests/Functional/app/config/amqp-config.yml index ad130b295..312f81f52 100644 --- a/pkg/enqueue-bundle/Tests/Functional/app/config/amqp-config.yml +++ b/pkg/enqueue-bundle/Tests/Functional/app/config/amqp-config.yml @@ -38,6 +38,6 @@ enqueue: services: test.message.processor: - class: 'Enqueue\Bundle\Tests\Functional\TestMessageProcessor' + class: 'Enqueue\Bundle\Tests\Functional\TestProcessor' tags: - - { name: 'enqueue.client.message_processor' } + - { name: 'enqueue.client.processor' } diff --git a/pkg/enqueue-bundle/Tests/Unit/Consumption/Extension/DoctrineClearIdentityMapExtensionTest.php b/pkg/enqueue-bundle/Tests/Unit/Consumption/Extension/DoctrineClearIdentityMapExtensionTest.php index 93ac073ab..c9b0c8901 100644 --- a/pkg/enqueue-bundle/Tests/Unit/Consumption/Extension/DoctrineClearIdentityMapExtensionTest.php +++ b/pkg/enqueue-bundle/Tests/Unit/Consumption/Extension/DoctrineClearIdentityMapExtensionTest.php @@ -2,11 +2,11 @@ namespace Enqueue\Bundle\Tests\Unit\Consumption\Extension; use Doctrine\Common\Persistence\ObjectManager; +use Enqueue\Bundle\Consumption\Extension\DoctrineClearIdentityMapExtension; +use Enqueue\Consumption\Context; use Enqueue\Psr\Consumer; use Enqueue\Psr\Context as PsrContext; -use Enqueue\Consumption\Context; -use Enqueue\Consumption\MessageProcessorInterface; -use Enqueue\Bundle\Consumption\Extension\DoctrineClearIdentityMapExtension; +use Enqueue\Psr\Processor; use Psr\Log\LoggerInterface; use Symfony\Bridge\Doctrine\RegistryInterface; @@ -51,7 +51,7 @@ protected function createPsrContext() $context = new Context($this->createMock(PsrContext::class)); $context->setLogger($this->createMock(LoggerInterface::class)); $context->setPsrConsumer($this->createMock(Consumer::class)); - $context->setMessageProcessor($this->createMock(MessageProcessorInterface::class)); + $context->setPsrProcessor($this->createMock(Processor::class)); return $context; } diff --git a/pkg/enqueue-bundle/Tests/Unit/Consumption/Extension/DoctrinePingConnectionExtensionTest.php b/pkg/enqueue-bundle/Tests/Unit/Consumption/Extension/DoctrinePingConnectionExtensionTest.php index 046442add..900ff2737 100644 --- a/pkg/enqueue-bundle/Tests/Unit/Consumption/Extension/DoctrinePingConnectionExtensionTest.php +++ b/pkg/enqueue-bundle/Tests/Unit/Consumption/Extension/DoctrinePingConnectionExtensionTest.php @@ -2,11 +2,11 @@ namespace Enqueue\Bundle\Tests\Unit\Consumption\Extension; use Doctrine\DBAL\Connection; +use Enqueue\Bundle\Consumption\Extension\DoctrinePingConnectionExtension; +use Enqueue\Consumption\Context; use Enqueue\Psr\Consumer; use Enqueue\Psr\Context as PsrContext; -use Enqueue\Consumption\Context; -use Enqueue\Consumption\MessageProcessorInterface; -use Enqueue\Bundle\Consumption\Extension\DoctrinePingConnectionExtension; +use Enqueue\Psr\Processor; use Psr\Log\LoggerInterface; use Symfony\Bridge\Doctrine\RegistryInterface; @@ -99,7 +99,7 @@ protected function createPsrContext() $context = new Context($this->createMock(PsrContext::class)); $context->setLogger($this->createMock(LoggerInterface::class)); $context->setPsrConsumer($this->createMock(Consumer::class)); - $context->setMessageProcessor($this->createMock(MessageProcessorInterface::class)); + $context->setPsrProcessor($this->createMock(Processor::class)); return $context; } diff --git a/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/Compiler/BuildClientRoutingPassTest.php b/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/Compiler/BuildClientRoutingPassTest.php index e55e1d813..07b0d1978 100644 --- a/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/Compiler/BuildClientRoutingPassTest.php +++ b/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/Compiler/BuildClientRoutingPassTest.php @@ -21,7 +21,7 @@ public function testShouldBuildRouteRegistry() $container = $this->createContainerBuilder(); $processor = new Definition(\stdClass::class); - $processor->addTag('enqueue.client.message_processor', [ + $processor->addTag('enqueue.client.processor', [ 'topicName' => 'topic', 'processorName' => 'processor', 'queueName' => 'queue', @@ -49,7 +49,7 @@ public function testThrowIfProcessorClassNameCouldNotBeFound() $container = $this->createContainerBuilder(); $processor = new Definition('notExistingClass'); - $processor->addTag('enqueue.client.message_processor', [ + $processor->addTag('enqueue.client.processor', [ 'processorName' => 'processor', ]); $container->setDefinition('processor', $processor); @@ -70,7 +70,7 @@ public function testShouldThrowExceptionIfTopicNameIsNotSet() $container = $this->createContainerBuilder(); $processor = new Definition(\stdClass::class); - $processor->addTag('enqueue.client.message_processor'); + $processor->addTag('enqueue.client.processor'); $container->setDefinition('processor', $processor); $router = new Definition(); @@ -89,7 +89,7 @@ public function testShouldSetServiceIdAdProcessorIdIfIsNotSetInTag() $container = $this->createContainerBuilder(); $processor = new Definition(\stdClass::class); - $processor->addTag('enqueue.client.message_processor', [ + $processor->addTag('enqueue.client.processor', [ 'topicName' => 'topic', 'queueName' => 'queue', ]); @@ -116,7 +116,7 @@ public function testShouldSetDefaultQueueIfNotSetInTag() $container = $this->createContainerBuilder(); $processor = new Definition(\stdClass::class); - $processor->addTag('enqueue.client.message_processor', [ + $processor->addTag('enqueue.client.processor', [ 'topicName' => 'topic', ]); $container->setDefinition('processor-service-id', $processor); @@ -142,7 +142,7 @@ public function testShouldBuildRouteFromSubscriberIfOnlyTopicNameSpecified() $container = $this->createContainerBuilder(); $processor = new Definition(OnlyTopicNameTopicSubscriber::class); - $processor->addTag('enqueue.client.message_processor'); + $processor->addTag('enqueue.client.processor'); $container->setDefinition('processor-service-id', $processor); $router = new Definition(); @@ -166,7 +166,7 @@ public function testShouldBuildRouteFromSubscriberIfProcessorNameSpecified() $container = $this->createContainerBuilder(); $processor = new Definition(ProcessorNameTopicSubscriber::class); - $processor->addTag('enqueue.client.message_processor'); + $processor->addTag('enqueue.client.processor'); $container->setDefinition('processor-service-id', $processor); $router = new Definition(); @@ -190,7 +190,7 @@ public function testShouldBuildRouteFromSubscriberIfQueueNameSpecified() $container = $this->createContainerBuilder(); $processor = new Definition(QueueNameTopicSubscriber::class); - $processor->addTag('enqueue.client.message_processor'); + $processor->addTag('enqueue.client.processor'); $container->setDefinition('processor-service-id', $processor); $router = new Definition(); @@ -216,7 +216,7 @@ public function testShouldThrowExceptionWhenTopicSubscriberConfigurationIsInvali $container = $this->createContainerBuilder(); $processor = new Definition(InvalidTopicSubscriber::class); - $processor->addTag('enqueue.client.message_processor'); + $processor->addTag('enqueue.client.processor'); $container->setDefinition('processor-service-id', $processor); $router = new Definition(); diff --git a/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/Compiler/BuildMessageProcessorRegistryPassTest.php b/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/Compiler/BuildProcessorRegistryPassTest.php similarity index 73% rename from pkg/enqueue-bundle/Tests/Unit/DependencyInjection/Compiler/BuildMessageProcessorRegistryPassTest.php rename to pkg/enqueue-bundle/Tests/Unit/DependencyInjection/Compiler/BuildProcessorRegistryPassTest.php index 44a1de5a7..0980f9a01 100644 --- a/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/Compiler/BuildMessageProcessorRegistryPassTest.php +++ b/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/Compiler/BuildProcessorRegistryPassTest.php @@ -1,18 +1,18 @@ createContainerBuilder(); $processor = new Definition(\stdClass::class); - $processor->addTag('enqueue.client.message_processor', [ + $processor->addTag('enqueue.client.processor', [ 'topicName' => 'topic', 'processorName' => 'processor-name', ]); @@ -28,9 +28,9 @@ public function testShouldBuildRouteRegistry() $processorRegistry = new Definition(); $processorRegistry->setArguments([]); - $container->setDefinition('enqueue.client.message_processor_registry', $processorRegistry); + $container->setDefinition('enqueue.client.processor_registry', $processorRegistry); - $pass = new BuildMessageProcessorRegistryPass(); + $pass = new BuildProcessorRegistryPass(); $pass->process($container); $expectedValue = [ @@ -45,16 +45,16 @@ public function testThrowIfProcessorClassNameCouldNotBeFound() $container = $this->createContainerBuilder(); $processor = new Definition('notExistingClass'); - $processor->addTag('enqueue.client.message_processor', [ + $processor->addTag('enqueue.client.processor', [ 'processorName' => 'processor', ]); $container->setDefinition('processor', $processor); $processorRegistry = new Definition(); $processorRegistry->setArguments([]); - $container->setDefinition('enqueue.client.message_processor_registry', $processorRegistry); + $container->setDefinition('enqueue.client.processor_registry', $processorRegistry); - $pass = new BuildMessageProcessorRegistryPass(); + $pass = new BuildProcessorRegistryPass(); $this->expectException(\LogicException::class); $this->expectExceptionMessage('The class "notExistingClass" could not be found.'); @@ -66,14 +66,14 @@ public function testShouldThrowExceptionIfTopicNameIsNotSet() $container = $this->createContainerBuilder(); $processor = new Definition(\stdClass::class); - $processor->addTag('enqueue.client.message_processor'); + $processor->addTag('enqueue.client.processor'); $container->setDefinition('processor', $processor); $processorRegistry = new Definition(); $processorRegistry->setArguments([]); - $container->setDefinition('enqueue.client.message_processor_registry', $processorRegistry); + $container->setDefinition('enqueue.client.processor_registry', $processorRegistry); - $pass = new BuildMessageProcessorRegistryPass(); + $pass = new BuildProcessorRegistryPass(); $this->expectException(\LogicException::class); $this->expectExceptionMessage('Topic name is not set on message processor tag but it is required.'); @@ -85,16 +85,16 @@ public function testShouldSetServiceIdAdProcessorIdIfIsNotSetInTag() $container = $this->createContainerBuilder(); $processor = new Definition(\stdClass::class); - $processor->addTag('enqueue.client.message_processor', [ + $processor->addTag('enqueue.client.processor', [ 'topicName' => 'topic', ]); $container->setDefinition('processor-id', $processor); $processorRegistry = new Definition(); $processorRegistry->setArguments([]); - $container->setDefinition('enqueue.client.message_processor_registry', $processorRegistry); + $container->setDefinition('enqueue.client.processor_registry', $processorRegistry); - $pass = new BuildMessageProcessorRegistryPass(); + $pass = new BuildProcessorRegistryPass(); $pass->process($container); $expectedValue = [ @@ -109,14 +109,14 @@ public function testShouldBuildRouteFromSubscriberIfOnlyTopicNameSpecified() $container = $this->createContainerBuilder(); $processor = new Definition(OnlyTopicNameTopicSubscriber::class); - $processor->addTag('enqueue.client.message_processor'); + $processor->addTag('enqueue.client.processor'); $container->setDefinition('processor-id', $processor); $processorRegistry = new Definition(); $processorRegistry->setArguments([]); - $container->setDefinition('enqueue.client.message_processor_registry', $processorRegistry); + $container->setDefinition('enqueue.client.processor_registry', $processorRegistry); - $pass = new BuildMessageProcessorRegistryPass(); + $pass = new BuildProcessorRegistryPass(); $pass->process($container); $expectedValue = [ @@ -131,14 +131,14 @@ public function testShouldBuildRouteFromSubscriberIfProcessorNameSpecified() $container = $this->createContainerBuilder(); $processor = new Definition(ProcessorNameTopicSubscriber::class); - $processor->addTag('enqueue.client.message_processor'); + $processor->addTag('enqueue.client.processor'); $container->setDefinition('processor-id', $processor); $processorRegistry = new Definition(); $processorRegistry->setArguments([]); - $container->setDefinition('enqueue.client.message_processor_registry', $processorRegistry); + $container->setDefinition('enqueue.client.processor_registry', $processorRegistry); - $pass = new BuildMessageProcessorRegistryPass(); + $pass = new BuildProcessorRegistryPass(); $pass->process($container); $expectedValue = [ @@ -155,14 +155,14 @@ public function testShouldThrowExceptionWhenTopicSubscriberConfigurationIsInvali $container = $this->createContainerBuilder(); $processor = new Definition(InvalidTopicSubscriber::class); - $processor->addTag('enqueue.client.message_processor'); + $processor->addTag('enqueue.client.processor'); $container->setDefinition('processor-id', $processor); $processorRegistry = new Definition(); $processorRegistry->setArguments([]); - $container->setDefinition('enqueue.client.message_processor_registry', $processorRegistry); + $container->setDefinition('enqueue.client.processor_registry', $processorRegistry); - $pass = new BuildMessageProcessorRegistryPass(); + $pass = new BuildProcessorRegistryPass(); $pass->process($container); } diff --git a/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/Compiler/BuildQueueMetaRegistryPassTest.php b/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/Compiler/BuildQueueMetaRegistryPassTest.php index ad1a85bf7..332e7d195 100644 --- a/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/Compiler/BuildQueueMetaRegistryPassTest.php +++ b/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/Compiler/BuildQueueMetaRegistryPassTest.php @@ -20,7 +20,7 @@ public function testShouldDoNothingIfRegistryServicesNotSetToContainer() $container = $this->createContainerBuilder(); $processor = new Definition(\stdClass::class); - $processor->addTag('enqueue.client.message_processor', [ + $processor->addTag('enqueue.client.processor', [ 'processorName' => 'processor', ]); $container->setDefinition('processor', $processor); @@ -34,7 +34,7 @@ public function testThrowIfProcessorClassNameCouldNotBeFound() $container = $this->createContainerBuilder(); $processor = new Definition('notExistingClass'); - $processor->addTag('enqueue.client.message_processor', [ + $processor->addTag('enqueue.client.processor', [ 'processorName' => 'processor', ]); $container->setDefinition('processor', $processor); @@ -55,7 +55,7 @@ public function testShouldBuildQueueMetaRegistry() $container = $this->createContainerBuilder(); $processor = new Definition(\stdClass::class); - $processor->addTag('enqueue.client.message_processor', [ + $processor->addTag('enqueue.client.processor', [ 'processorName' => 'theProcessorName', 'topicName' => 'aTopicName', ]); @@ -80,7 +80,7 @@ public function testShouldSetServiceIdAdProcessorIdIfIsNotSetInTag() $container = $this->createContainerBuilder(); $processor = new Definition(\stdClass::class); - $processor->addTag('enqueue.client.message_processor', [ + $processor->addTag('enqueue.client.processor', [ 'topicName' => 'aTopicName', ]); $container->setDefinition('processor-service-id', $processor); @@ -104,7 +104,7 @@ public function testShouldSetQueueIfSetInTag() $container = $this->createContainerBuilder(); $processor = new Definition(\stdClass::class); - $processor->addTag('enqueue.client.message_processor', [ + $processor->addTag('enqueue.client.processor', [ 'queueName' => 'theClientQueueName', 'topicName' => 'aTopicName', ]); @@ -129,7 +129,7 @@ public function testShouldBuildQueueFromSubscriberIfOnlyTopicNameSpecified() $container = $this->createContainerBuilder(); $processor = new Definition(OnlyTopicNameTopicSubscriber::class); - $processor->addTag('enqueue.client.message_processor'); + $processor->addTag('enqueue.client.processor'); $container->setDefinition('processor-service-id', $processor); $registry = new Definition(); @@ -151,7 +151,7 @@ public function testShouldBuildQueueFromSubscriberIfProcessorNameSpecified() $container = $this->createContainerBuilder(); $processor = new Definition(ProcessorNameTopicSubscriber::class); - $processor->addTag('enqueue.client.message_processor'); + $processor->addTag('enqueue.client.processor'); $container->setDefinition('processor-service-id', $processor); $registry = new Definition(); @@ -173,7 +173,7 @@ public function testShouldBuildQueueFromSubscriberIfQueueNameSpecified() $container = $this->createContainerBuilder(); $processor = new Definition(QueueNameTopicSubscriber::class); - $processor->addTag('enqueue.client.message_processor'); + $processor->addTag('enqueue.client.processor'); $container->setDefinition('processor-service-id', $processor); $registry = new Definition(); diff --git a/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/Compiler/BuildTopicMetaSubscribersPassTest.php b/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/Compiler/BuildTopicMetaSubscribersPassTest.php index 929f1fba4..1571fa25c 100644 --- a/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/Compiler/BuildTopicMetaSubscribersPassTest.php +++ b/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/Compiler/BuildTopicMetaSubscribersPassTest.php @@ -20,7 +20,7 @@ public function testShouldBuildTopicMetaSubscribersForOneTagAndEmptyRegistry() $container = $this->createContainerBuilder(); $processor = new Definition(\stdClass::class); - $processor->addTag('enqueue.client.message_processor', [ + $processor->addTag('enqueue.client.processor', [ 'topicName' => 'topic', 'processorName' => 'processor-name', ]); @@ -45,7 +45,7 @@ public function testThrowIfProcessorClassNameCouldNotBeFound() $container = $this->createContainerBuilder(); $processor = new Definition('notExistingClass'); - $processor->addTag('enqueue.client.message_processor', [ + $processor->addTag('enqueue.client.processor', [ 'processorName' => 'processor', ]); $container->setDefinition('processor', $processor); @@ -66,7 +66,7 @@ public function testShouldBuildTopicMetaSubscribersForOneTagAndSameMetaInRegistr $container = $this->createContainerBuilder(); $processor = new Definition(\stdClass::class); - $processor->addTag('enqueue.client.message_processor', [ + $processor->addTag('enqueue.client.processor', [ 'topicName' => 'topic', 'processorName' => 'barProcessorName', ]); @@ -96,7 +96,7 @@ public function testShouldBuildTopicMetaSubscribersForOneTagAndSameMetaInPlusAno $container = $this->createContainerBuilder(); $processor = new Definition(\stdClass::class); - $processor->addTag('enqueue.client.message_processor', [ + $processor->addTag('enqueue.client.processor', [ 'topicName' => 'fooTopic', 'processorName' => 'barProcessorName', ]); @@ -128,14 +128,14 @@ public function testShouldBuildTopicMetaSubscribersForTwoTagAndEmptyRegistry() $container = $this->createContainerBuilder(); $processor = new Definition(\stdClass::class); - $processor->addTag('enqueue.client.message_processor', [ + $processor->addTag('enqueue.client.processor', [ 'topicName' => 'fooTopic', 'processorName' => 'fooProcessorName', ]); $container->setDefinition('processor-id', $processor); $processor = new Definition(\stdClass::class); - $processor->addTag('enqueue.client.message_processor', [ + $processor->addTag('enqueue.client.processor', [ 'topicName' => 'fooTopic', 'processorName' => 'barProcessorName', ]); @@ -162,14 +162,14 @@ public function testShouldBuildTopicMetaSubscribersForTwoTagSameMetaRegistry() $container = $this->createContainerBuilder(); $processor = new Definition(\stdClass::class); - $processor->addTag('enqueue.client.message_processor', [ + $processor->addTag('enqueue.client.processor', [ 'topicName' => 'fooTopic', 'processorName' => 'fooProcessorName', ]); $container->setDefinition('processor-id', $processor); $processor = new Definition(\stdClass::class); - $processor->addTag('enqueue.client.message_processor', [ + $processor->addTag('enqueue.client.processor', [ 'topicName' => 'fooTopic', 'processorName' => 'barProcessorName', ]); @@ -199,7 +199,7 @@ public function testThrowIfTopicNameNotSetOnTagAsAttribute() $container = $this->createContainerBuilder(); $processor = new Definition(\stdClass::class); - $processor->addTag('enqueue.client.message_processor', []); + $processor->addTag('enqueue.client.processor', []); $container->setDefinition('processor', $processor); $topicMetaRegistry = new Definition(); @@ -218,7 +218,7 @@ public function testShouldSetServiceIdAdProcessorIdIfIsNotSetInTag() $container = $this->createContainerBuilder(); $processor = new Definition(\stdClass::class); - $processor->addTag('enqueue.client.message_processor', [ + $processor->addTag('enqueue.client.processor', [ 'topicName' => 'topic', ]); $container->setDefinition('processor-id', $processor); @@ -242,7 +242,7 @@ public function testShouldBuildMetaFromSubscriberIfOnlyTopicNameSpecified() $container = $this->createContainerBuilder(); $processor = new Definition(OnlyTopicNameTopicSubscriber::class); - $processor->addTag('enqueue.client.message_processor'); + $processor->addTag('enqueue.client.processor'); $container->setDefinition('processor-id', $processor); $topicMetaRegistry = new Definition(); @@ -264,7 +264,7 @@ public function testShouldBuildMetaFromSubscriberIfProcessorNameSpecified() $container = $this->createContainerBuilder(); $processor = new Definition(ProcessorNameTopicSubscriber::class); - $processor->addTag('enqueue.client.message_processor'); + $processor->addTag('enqueue.client.processor'); $container->setDefinition('processor-id', $processor); $topicMetaRegistry = new Definition(); @@ -288,7 +288,7 @@ public function testShouldThrowExceptionWhenTopicSubscriberConfigurationIsInvali $container = $this->createContainerBuilder(); $processor = new Definition(InvalidTopicSubscriber::class); - $processor->addTag('enqueue.client.message_processor'); + $processor->addTag('enqueue.client.processor'); $container->setDefinition('processor-id', $processor); $topicMetaRegistry = new Definition(); diff --git a/pkg/enqueue-bundle/Tests/Unit/EnqueueBundleTest.php b/pkg/enqueue-bundle/Tests/Unit/EnqueueBundleTest.php index 71b652842..14b1bfe9e 100644 --- a/pkg/enqueue-bundle/Tests/Unit/EnqueueBundleTest.php +++ b/pkg/enqueue-bundle/Tests/Unit/EnqueueBundleTest.php @@ -5,7 +5,7 @@ use Enqueue\AmqpExt\Symfony\RabbitMqTransportFactory; use Enqueue\Bundle\DependencyInjection\Compiler\BuildClientRoutingPass; use Enqueue\Bundle\DependencyInjection\Compiler\BuildExtensionsPass; -use Enqueue\Bundle\DependencyInjection\Compiler\BuildMessageProcessorRegistryPass; +use Enqueue\Bundle\DependencyInjection\Compiler\BuildProcessorRegistryPass; use Enqueue\Bundle\DependencyInjection\Compiler\BuildQueueMetaRegistryPass; use Enqueue\Bundle\DependencyInjection\Compiler\BuildTopicMetaSubscribersPass; use Enqueue\Bundle\DependencyInjection\EnqueueExtension; @@ -50,7 +50,7 @@ public function testShouldRegisterExpectedCompilerPasses() $container ->expects($this->at(2)) ->method('addCompilerPass') - ->with($this->isInstanceOf(BuildMessageProcessorRegistryPass::class)) + ->with($this->isInstanceOf(BuildProcessorRegistryPass::class)) ; $container ->expects($this->at(3)) diff --git a/pkg/enqueue/Client/ArrayMessageProcessorRegistry.php b/pkg/enqueue/Client/ArrayMessageProcessorRegistry.php deleted file mode 100644 index e48693c55..000000000 --- a/pkg/enqueue/Client/ArrayMessageProcessorRegistry.php +++ /dev/null @@ -1,41 +0,0 @@ -processors = $processors; - } - - /** - * @param string $name - * @param MessageProcessorInterface $processor - */ - public function add($name, MessageProcessorInterface $processor) - { - $this->processors[$name] = $processor; - } - - /** - * {@inheritdoc} - */ - public function get($processorName) - { - if (false == isset($this->processors[$processorName])) { - throw new \LogicException(sprintf('MessageProcessor was not found. processorName: "%s"', $processorName)); - } - - return $this->processors[$processorName]; - } -} diff --git a/pkg/enqueue/Client/ArrayProcessorRegistry.php b/pkg/enqueue/Client/ArrayProcessorRegistry.php new file mode 100644 index 000000000..fc7ec5a76 --- /dev/null +++ b/pkg/enqueue/Client/ArrayProcessorRegistry.php @@ -0,0 +1,41 @@ +processors = $processors; + } + + /** + * @param string $name + * @param Processor $processor + */ + public function add($name, Processor $processor) + { + $this->processors[$name] = $processor; + } + + /** + * {@inheritdoc} + */ + public function get($processorName) + { + if (false == isset($this->processors[$processorName])) { + throw new \LogicException(sprintf('Processor was not found. processorName: "%s"', $processorName)); + } + + return $this->processors[$processorName]; + } +} diff --git a/pkg/enqueue/Client/DelegateMessageProcessor.php b/pkg/enqueue/Client/DelegateProcessor.php similarity index 70% rename from pkg/enqueue/Client/DelegateMessageProcessor.php rename to pkg/enqueue/Client/DelegateProcessor.php index e7a2206e2..e04e9507c 100644 --- a/pkg/enqueue/Client/DelegateMessageProcessor.php +++ b/pkg/enqueue/Client/DelegateProcessor.php @@ -3,19 +3,19 @@ use Enqueue\Psr\Context; use Enqueue\Psr\Message as PsrMessage; -use Enqueue\Consumption\MessageProcessorInterface; +use Enqueue\Psr\Processor; -class DelegateMessageProcessor implements MessageProcessorInterface +class DelegateProcessor implements Processor { /** - * @var MessageProcessorRegistryInterface + * @var ProcessorRegistryInterface */ private $registry; /** - * @param MessageProcessorRegistryInterface $registry + * @param ProcessorRegistryInterface $registry */ - public function __construct(MessageProcessorRegistryInterface $registry) + public function __construct(ProcessorRegistryInterface $registry) { $this->registry = $registry; } diff --git a/pkg/enqueue/Client/MessageProcessorRegistryInterface.php b/pkg/enqueue/Client/ProcessorRegistryInterface.php similarity index 50% rename from pkg/enqueue/Client/MessageProcessorRegistryInterface.php rename to pkg/enqueue/Client/ProcessorRegistryInterface.php index 10b707f92..42aa8a884 100644 --- a/pkg/enqueue/Client/MessageProcessorRegistryInterface.php +++ b/pkg/enqueue/Client/ProcessorRegistryInterface.php @@ -1,14 +1,14 @@ queueMetaRegistry->add($this->config->getRouterQueueName()); $this->topicsMetaRegistry = new TopicMetaRegistry([]); - $this->processorsRegistry = new ArrayMessageProcessorRegistry(); + $this->processorsRegistry = new ArrayProcessorRegistry(); $this->driver = new AmqpDriver($context, $this->config, $this->queueMetaRegistry); $this->routerProcessor = new RouterProcessor($this->driver, []); @@ -80,7 +80,7 @@ public function bind($topic, callable $processor) $this->topicsMetaRegistry->addProcessor($topic, $processorName); $this->queueMetaRegistry->addProcessor($queueName, $processorName); - $this->processorsRegistry->add($processorName, new CallbackMessageProcessor($processor)); + $this->processorsRegistry->add($processorName, new CallbackProcessor($processor)); $this->routerProcessor->add($topic, $queueName, $processorName); } @@ -124,10 +124,10 @@ private function getProducer() } /** - * @return DelegateMessageProcessor + * @return DelegateProcessor */ private function getProcessor() { - return new DelegateMessageProcessor($this->processorsRegistry); + return new DelegateProcessor($this->processorsRegistry); } } diff --git a/pkg/enqueue/Consumption/CallbackMessageProcessor.php b/pkg/enqueue/Consumption/CallbackProcessor.php similarity index 87% rename from pkg/enqueue/Consumption/CallbackMessageProcessor.php rename to pkg/enqueue/Consumption/CallbackProcessor.php index eb156444b..01da5a74f 100644 --- a/pkg/enqueue/Consumption/CallbackMessageProcessor.php +++ b/pkg/enqueue/Consumption/CallbackProcessor.php @@ -3,8 +3,9 @@ use Enqueue\Psr\Context as PsrContext; use Enqueue\Psr\Message; +use Enqueue\Psr\Processor; -class CallbackMessageProcessor implements MessageProcessorInterface +class CallbackProcessor implements Processor { /** * @var callable diff --git a/pkg/enqueue/Consumption/Context.php b/pkg/enqueue/Consumption/Context.php index 0f413c0fe..08e078dc4 100644 --- a/pkg/enqueue/Consumption/Context.php +++ b/pkg/enqueue/Consumption/Context.php @@ -1,11 +1,12 @@ messageProcessor; + return $this->psrProcessor; } /** - * @param MessageProcessorInterface $messageProcessor + * @param Processor $psrProcessor */ - public function setMessageProcessor(MessageProcessorInterface $messageProcessor) + public function setPsrProcessor(Processor $psrProcessor) { - if ($this->messageProcessor) { + if ($this->psrProcessor) { throw new IllegalContextModificationException('The message processor could be set once'); } - $this->messageProcessor = $messageProcessor; + $this->psrProcessor = $psrProcessor; } /** diff --git a/pkg/enqueue/Consumption/Extension/LoggerExtension.php b/pkg/enqueue/Consumption/Extension/LoggerExtension.php index 4ddb9e0d7..3f9b616b6 100644 --- a/pkg/enqueue/Consumption/Extension/LoggerExtension.php +++ b/pkg/enqueue/Consumption/Extension/LoggerExtension.php @@ -1,11 +1,11 @@ getResult(); if (false == $result instanceof Result) { - throw new \LogicException('To send a reply an instance of Result class has to returned from a MessageProcessor.'); + throw new \LogicException('To send a reply an instance of Result class has to returned from a Processor.'); } if (false == $result->getReply()) { diff --git a/pkg/enqueue/Consumption/MessageProcessorInterface.php b/pkg/enqueue/Consumption/MessageProcessorInterface.php deleted file mode 100644 index d4135e376..000000000 --- a/pkg/enqueue/Consumption/MessageProcessorInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -extension = $extension; $this->idleMicroseconds = $idleMicroseconds; - $this->boundMessageProcessors = []; + $this->boundProcessors = []; } /** @@ -62,31 +63,31 @@ public function getPsrContext() } /** - * @param Queue|string $queue - * @param MessageProcessorInterface|callable $messageProcessor + * @param Queue|string $queue + * @param Processor|callable $processor * * @return QueueConsumer */ - public function bind($queue, $messageProcessor) + public function bind($queue, $processor) { if (is_string($queue)) { $queue = $this->psrContext->createQueue($queue); } - if (is_callable($messageProcessor)) { - $messageProcessor = new CallbackMessageProcessor($messageProcessor); + if (is_callable($processor)) { + $processor = new CallbackProcessor($processor); } InvalidArgumentException::assertInstanceOf($queue, Queue::class); - InvalidArgumentException::assertInstanceOf($messageProcessor, MessageProcessorInterface::class); + InvalidArgumentException::assertInstanceOf($processor, Processor::class); if (empty($queue->getQueueName())) { throw new LogicException('The queue name must be not empty.'); } - if (array_key_exists($queue->getQueueName(), $this->boundMessageProcessors)) { + if (array_key_exists($queue->getQueueName(), $this->boundProcessors)) { throw new LogicException(sprintf('The queue was already bound. Queue: %s', $queue->getQueueName())); } - $this->boundMessageProcessors[$queue->getQueueName()] = [$queue, $messageProcessor]; + $this->boundProcessors[$queue->getQueueName()] = [$queue, $processor]; return $this; } @@ -104,7 +105,7 @@ public function consume(ExtensionInterface $runtimeExtension = null) /** @var Consumer[] $messageConsumers */ $messageConsumers = []; /** @var \Enqueue\Psr\Queue $queue */ - foreach ($this->boundMessageProcessors as list($queue, $messageProcessor)) { + foreach ($this->boundProcessors as list($queue, $processor)) { $messageConsumers[$queue->getQueueName()] = $this->psrContext->createConsumer($queue); } @@ -122,7 +123,7 @@ public function consume(ExtensionInterface $runtimeExtension = null) while (true) { try { /** @var Queue $queue */ - foreach ($this->boundMessageProcessors as list($queue, $messageProcessor)) { + foreach ($this->boundProcessors as list($queue, $processor)) { $logger->debug(sprintf('Switch to a queue %s', $queue->getQueueName())); $messageConsumer = $messageConsumers[$queue->getQueueName()]; @@ -131,7 +132,7 @@ public function consume(ExtensionInterface $runtimeExtension = null) $context->setLogger($logger); $context->setPsrQueue($queue); $context->setPsrConsumer($messageConsumer); - $context->setMessageProcessor($messageProcessor); + $context->setPsrProcessor($processor); $this->doConsume($extension, $context); } @@ -171,8 +172,8 @@ public function consume(ExtensionInterface $runtimeExtension = null) */ protected function doConsume(ExtensionInterface $extension, Context $context) { - $messageProcessor = $context->getMessageProcessor(); - $messageConsumer = $context->getPsrConsumer(); + $processor = $context->getPsrProcessor(); + $consumer = $context->getPsrConsumer(); $logger = $context->getLogger(); $extension->onBeforeReceive($context); @@ -181,7 +182,7 @@ protected function doConsume(ExtensionInterface $extension, Context $context) throw new ConsumptionInterruptedException(); } - if ($message = $messageConsumer->receive($timeout = 1)) { + if ($message = $consumer->receive($timeout = 1)) { $logger->info('Message received'); $logger->debug('Headers: {headers}', ['headers' => new VarExport($message->getHeaders())]); $logger->debug('Properties: {properties}', ['properties' => new VarExport($message->getProperties())]); @@ -191,19 +192,19 @@ protected function doConsume(ExtensionInterface $extension, Context $context) $extension->onPreReceived($context); if (!$context->getResult()) { - $result = $messageProcessor->process($message, $this->psrContext); + $result = $processor->process($message, $this->psrContext); $context->setResult($result); } switch ($context->getResult()) { case Result::ACK: - $messageConsumer->acknowledge($message); + $consumer->acknowledge($message); break; case Result::REJECT: - $messageConsumer->reject($message, false); + $consumer->reject($message, false); break; case Result::REQUEUE: - $messageConsumer->reject($message, true); + $consumer->reject($message, true); break; default: throw new \LogicException(sprintf('Status is not supported: %s', $context->getResult())); diff --git a/pkg/enqueue/Consumption/Result.php b/pkg/enqueue/Consumption/Result.php index 3d248afce..9b4eebfbd 100644 --- a/pkg/enqueue/Consumption/Result.php +++ b/pkg/enqueue/Consumption/Result.php @@ -1,26 +1,25 @@ reply; - } - - /** - * @param Message|null $reply - */ - public function setReply(Message $reply = null) - { - $this->reply = $reply; - } - /** * @param string $status * @param string $reason @@ -79,6 +62,30 @@ public function getReason() return $this->reason; } + /** + * @return PsrMessage|null + */ + public function getReply() + { + return $this->reply; + } + + /** + * @param PsrMessage|null $reply + */ + public function setReply(PsrMessage $reply = null) + { + $this->reply = $reply; + } + + /** + * @return string + */ + public function __toString() + { + return $this->status; + } + /** * @param string $reason * @@ -110,24 +117,16 @@ public static function requeue($reason = '') } /** - * @param Message $replyMessage + * @param PsrMessage $replyMessage * @param string|null $reason * * @return Result */ - public static function reply(Message $replyMessage, $reason = '') + public static function reply(PsrMessage $replyMessage, $reason = '') { $result = static::ack($reason); $result->setReply($replyMessage); return $result; } - - /** - * @return string - */ - public function __toString() - { - return $this->status; - } } diff --git a/pkg/enqueue/Router/RouteRecipientListProcessor.php b/pkg/enqueue/Router/RouteRecipientListProcessor.php index f81d25bca..ded38e9fb 100644 --- a/pkg/enqueue/Router/RouteRecipientListProcessor.php +++ b/pkg/enqueue/Router/RouteRecipientListProcessor.php @@ -3,10 +3,9 @@ use Enqueue\Psr\Context; use Enqueue\Psr\Message; -use Enqueue\Consumption\MessageProcessorInterface; -use Enqueue\Consumption\Result; +use Enqueue\Psr\Processor; -class RouteRecipientListProcessor implements MessageProcessorInterface +class RouteRecipientListProcessor implements Processor { /** * @var RecipientListRouterInterface @@ -31,6 +30,6 @@ public function process(Message $message, Context $context) $producer->send($recipient->getDestination(), $recipient->getMessage()); } - return Result::ACK; + return self::ACK; } } diff --git a/pkg/enqueue/Symfony/Client/ConsumeMessagesCommand.php b/pkg/enqueue/Symfony/Client/ConsumeMessagesCommand.php index ba69433fb..fe5d14f0e 100644 --- a/pkg/enqueue/Symfony/Client/ConsumeMessagesCommand.php +++ b/pkg/enqueue/Symfony/Client/ConsumeMessagesCommand.php @@ -1,7 +1,7 @@ processors[$processorName])) { - throw new \LogicException(sprintf('MessageProcessor was not found. processorName: "%s"', $processorName)); + throw new \LogicException(sprintf('Processor was not found. processorName: "%s"', $processorName)); } if (null === $this->container) { @@ -47,10 +47,10 @@ public function get($processorName) $processor = $this->container->get($this->processors[$processorName]); - if (false == $processor instanceof MessageProcessorInterface) { + if (false == $processor instanceof Processor) { throw new \LogicException(sprintf( 'Invalid instance of message processor. expected: "%s", got: "%s"', - MessageProcessorInterface::class, + Processor::class, is_object($processor) ? get_class($processor) : gettype($processor) )); } diff --git a/pkg/enqueue/Symfony/Consumption/ContainerAwareConsumeMessagesCommand.php b/pkg/enqueue/Symfony/Consumption/ContainerAwareConsumeMessagesCommand.php index 56a3647f8..4d0ec9f3e 100644 --- a/pkg/enqueue/Symfony/Consumption/ContainerAwareConsumeMessagesCommand.php +++ b/pkg/enqueue/Symfony/Consumption/ContainerAwareConsumeMessagesCommand.php @@ -3,8 +3,8 @@ use Enqueue\Consumption\ChainExtension; use Enqueue\Consumption\Extension\LoggerExtension; -use Enqueue\Consumption\MessageProcessorInterface; use Enqueue\Consumption\QueueConsumer; +use Enqueue\Psr\Processor; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -59,13 +59,13 @@ protected function execute(InputInterface $input, OutputInterface $output) { $queueName = $input->getArgument('queue'); - /** @var MessageProcessorInterface $messageProcessor */ - $messageProcessor = $this->container->get($input->getArgument('processor-service')); - if (!$messageProcessor instanceof MessageProcessorInterface) { + /** @var Processor $processor */ + $processor = $this->container->get($input->getArgument('processor-service')); + if (!$processor instanceof Processor) { throw new \LogicException(sprintf( 'Invalid message processor service given. It must be an instance of %s but %s', - MessageProcessorInterface::class, - get_class($messageProcessor) + Processor::class, + get_class($processor) )); } @@ -78,7 +78,7 @@ protected function execute(InputInterface $input, OutputInterface $output) $queue = $this->consumer->getPsrContext()->createQueue($queueName); // @todo set additional queue options - $this->consumer->bind($queue, $messageProcessor); + $this->consumer->bind($queue, $processor); $this->consumer->consume($runtimeExtensions); } finally { $this->consumer->getPsrContext()->close(); diff --git a/pkg/enqueue/Tests/Client/ArrayMessageProcessorRegistryTest.php b/pkg/enqueue/Tests/Client/ArrayMessageProcessorRegistryTest.php deleted file mode 100644 index d67b6a588..000000000 --- a/pkg/enqueue/Tests/Client/ArrayMessageProcessorRegistryTest.php +++ /dev/null @@ -1,58 +0,0 @@ -assertClassImplements(MessageProcessorRegistryInterface::class, ArrayMessageProcessorRegistry::class); - } - - public function testCouldBeConstructedWithoutAnyArgument() - { - new ArrayMessageProcessorRegistry(); - } - - public function testShouldThrowExceptionIfProcessorIsNotSet() - { - $registry = new ArrayMessageProcessorRegistry(); - - $this->expectException(\LogicException::class); - $this->expectExceptionMessage('MessageProcessor was not found. processorName: "processor-name"'); - $registry->get('processor-name'); - } - - public function testShouldAllowGetProcessorAddedViaConstructor() - { - $processor = $this->createMessageProcessorMock(); - - $registry = new ArrayMessageProcessorRegistry(['aFooName' => $processor]); - - $this->assertSame($processor, $registry->get('aFooName')); - } - - public function testShouldAllowGetProcessorAddedViaAddMethod() - { - $processor = $this->createMessageProcessorMock(); - - $registry = new ArrayMessageProcessorRegistry(); - $registry->add('aFooName', $processor); - - $this->assertSame($processor, $registry->get('aFooName')); - } - - /** - * @return \PHPUnit_Framework_MockObject_MockObject|MessageProcessorInterface - */ - protected function createMessageProcessorMock() - { - return $this->createMock(MessageProcessorInterface::class); - } -} diff --git a/pkg/enqueue/Tests/Client/ArrayProcessorRegistryTest.php b/pkg/enqueue/Tests/Client/ArrayProcessorRegistryTest.php new file mode 100644 index 000000000..1c60aa44d --- /dev/null +++ b/pkg/enqueue/Tests/Client/ArrayProcessorRegistryTest.php @@ -0,0 +1,58 @@ +assertClassImplements(ProcessorRegistryInterface::class, ArrayProcessorRegistry::class); + } + + public function testCouldBeConstructedWithoutAnyArgument() + { + new ArrayProcessorRegistry(); + } + + public function testShouldThrowExceptionIfProcessorIsNotSet() + { + $registry = new ArrayProcessorRegistry(); + + $this->expectException(\LogicException::class); + $this->expectExceptionMessage('Processor was not found. processorName: "processor-name"'); + $registry->get('processor-name'); + } + + public function testShouldAllowGetProcessorAddedViaConstructor() + { + $processor = $this->createProcessorMock(); + + $registry = new ArrayProcessorRegistry(['aFooName' => $processor]); + + $this->assertSame($processor, $registry->get('aFooName')); + } + + public function testShouldAllowGetProcessorAddedViaAddMethod() + { + $processor = $this->createProcessorMock(); + + $registry = new ArrayProcessorRegistry(); + $registry->add('aFooName', $processor); + + $this->assertSame($processor, $registry->get('aFooName')); + } + + /** + * @return \PHPUnit_Framework_MockObject_MockObject|Processor + */ + protected function createProcessorMock() + { + return $this->createMock(Processor::class); + } +} diff --git a/pkg/enqueue/Tests/Client/ConfigTest.php b/pkg/enqueue/Tests/Client/ConfigTest.php index f9957c77d..3a140d226 100644 --- a/pkg/enqueue/Tests/Client/ConfigTest.php +++ b/pkg/enqueue/Tests/Client/ConfigTest.php @@ -5,7 +5,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase { - public function testShouldReturnRouterMessageProcessorNameSetInConstructor() + public function testShouldReturnRouterProcessorNameSetInConstructor() { $config = new Config( 'aPrefix', diff --git a/pkg/enqueue/Tests/Client/ConsumptionExtension/DelayRedeliveredMessageExtensionTest.php b/pkg/enqueue/Tests/Client/ConsumptionExtension/DelayRedeliveredMessageExtensionTest.php index 893d8e8e5..5c6d35a17 100644 --- a/pkg/enqueue/Tests/Client/ConsumptionExtension/DelayRedeliveredMessageExtensionTest.php +++ b/pkg/enqueue/Tests/Client/ConsumptionExtension/DelayRedeliveredMessageExtensionTest.php @@ -1,12 +1,12 @@ createMessageProcessorRegistryMock()); + new DelegateProcessor($this->createProcessorRegistryMock()); } public function testShouldThrowExceptionIfProcessorNameIsNotSet() @@ -22,7 +22,7 @@ public function testShouldThrowExceptionIfProcessorNameIsNotSet() 'Got message without required parameter: "enqueue.processor_name"' ); - $processor = new DelegateMessageProcessor($this->createMessageProcessorRegistryMock()); + $processor = new DelegateProcessor($this->createProcessorRegistryMock()); $processor->process(new NullMessage(), $this->createPsrContextMock()); } @@ -34,34 +34,34 @@ public function testShouldProcessMessage() Config::PARAMETER_PROCESSOR_NAME => 'processor-name', ]); - $messageProcessor = $this->createMessageProcessorMock(); - $messageProcessor + $processor = $this->createProcessorMock(); + $processor ->expects($this->once()) ->method('process') ->with($this->identicalTo($message), $this->identicalTo($session)) ->will($this->returnValue('return-value')) ; - $processorRegistry = $this->createMessageProcessorRegistryMock(); + $processorRegistry = $this->createProcessorRegistryMock(); $processorRegistry ->expects($this->once()) ->method('get') ->with('processor-name') - ->will($this->returnValue($messageProcessor)) + ->will($this->returnValue($processor)) ; - $processor = new DelegateMessageProcessor($processorRegistry); + $processor = new DelegateProcessor($processorRegistry); $return = $processor->process($message, $session); $this->assertEquals('return-value', $return); } /** - * @return \PHPUnit_Framework_MockObject_MockObject|MessageProcessorRegistryInterface + * @return \PHPUnit_Framework_MockObject_MockObject|ProcessorRegistryInterface */ - protected function createMessageProcessorRegistryMock() + protected function createProcessorRegistryMock() { - return $this->createMock(MessageProcessorRegistryInterface::class); + return $this->createMock(ProcessorRegistryInterface::class); } /** @@ -73,10 +73,10 @@ protected function createPsrContextMock() } /** - * @return \PHPUnit_Framework_MockObject_MockObject|MessageProcessorInterface + * @return \PHPUnit_Framework_MockObject_MockObject|Processor */ - protected function createMessageProcessorMock() + protected function createProcessorMock() { - return $this->createMock(MessageProcessorInterface::class); + return $this->createMock(Processor::class); } } diff --git a/pkg/enqueue/Tests/Consumption/CallbackMessageProcessorTest.php b/pkg/enqueue/Tests/Consumption/CallbackProcessorTest.php similarity index 58% rename from pkg/enqueue/Tests/Consumption/CallbackMessageProcessorTest.php rename to pkg/enqueue/Tests/Consumption/CallbackProcessorTest.php index 582992dcb..e37c6a048 100644 --- a/pkg/enqueue/Tests/Consumption/CallbackMessageProcessorTest.php +++ b/pkg/enqueue/Tests/Consumption/CallbackProcessorTest.php @@ -1,24 +1,24 @@ assertClassImplements(MessageProcessorInterface::class, CallbackMessageProcessor::class); + $this->assertClassImplements(Processor::class, CallbackProcessor::class); } public function testCouldBeConstructedWithCallableAsArgument() { - new CallbackMessageProcessor(function () { + new CallbackProcessor(function () { }); } @@ -27,7 +27,7 @@ public function testShouldCallCallbackAndProxyItsReturnedValue() $expectedMessage = new NullMessage(); $expectedContext = new NullContext(); - $processor = new CallbackMessageProcessor(function ($message, $context) use ($expectedMessage, $expectedContext) { + $processor = new CallbackProcessor(function ($message, $context) use ($expectedMessage, $expectedContext) { $this->assertSame($expectedMessage, $message); $this->assertSame($expectedContext, $context); diff --git a/pkg/enqueue/Tests/Consumption/ContextTest.php b/pkg/enqueue/Tests/Consumption/ContextTest.php index 5191e5976..89c2dde14 100644 --- a/pkg/enqueue/Tests/Consumption/ContextTest.php +++ b/pkg/enqueue/Tests/Consumption/ContextTest.php @@ -1,12 +1,12 @@ createMessageProcessor(); + $processorMock = $this->createProcessorMock(); $context = new Context($this->createPsrContext()); - $context->setMessageProcessor($messageProcessor); + $context->setPsrProcessor($processorMock); - $this->assertSame($messageProcessor, $context->getMessageProcessor()); + $this->assertSame($processorMock, $context->getPsrProcessor()); } - public function testThrowOnTryToChangeMessageProcessorIfAlreadySet() + public function testThrowOnTryToChangeProcessorIfAlreadySet() { - $messageProcessor = $this->createMessageProcessor(); - $anotherMessageProcessor = $this->createMessageProcessor(); + $processor = $this->createProcessorMock(); + $anotherProcessor = $this->createProcessorMock(); $context = new Context($this->createPsrContext()); - $context->setMessageProcessor($messageProcessor); + $context->setPsrProcessor($processor); $this->expectException(IllegalContextModificationException::class); - $context->setMessageProcessor($anotherMessageProcessor); + $context->setPsrProcessor($anotherProcessor); } public function testShouldAllowGetLoggerPreviouslySet() @@ -247,10 +247,10 @@ protected function createPsrConsumer() } /** - * @return \PHPUnit_Framework_MockObject_MockObject|MessageProcessorInterface + * @return \PHPUnit_Framework_MockObject_MockObject|Processor */ - protected function createMessageProcessor() + protected function createProcessorMock() { - return $this->createMock(MessageProcessorInterface::class); + return $this->createMock(Processor::class); } } diff --git a/pkg/enqueue/Tests/Consumption/Extension/LimitConsumedMessagesExtensionTest.php b/pkg/enqueue/Tests/Consumption/Extension/LimitConsumedMessagesExtensionTest.php index d8efd93dc..fcbd236ba 100644 --- a/pkg/enqueue/Tests/Consumption/Extension/LimitConsumedMessagesExtensionTest.php +++ b/pkg/enqueue/Tests/Consumption/Extension/LimitConsumedMessagesExtensionTest.php @@ -1,11 +1,11 @@ createMock(PsrContext::class)); $context->setLogger($this->createMock(LoggerInterface::class)); $context->setPsrConsumer($this->createMock(Consumer::class)); - $context->setMessageProcessor($this->createMock(MessageProcessorInterface::class)); + $context->setPsrProcessor($this->createMock(Processor::class)); return $context; } diff --git a/pkg/enqueue/Tests/Consumption/Extension/LimitConsumerMemoryExtensionTest.php b/pkg/enqueue/Tests/Consumption/Extension/LimitConsumerMemoryExtensionTest.php index 5a90eeddc..761c831a2 100644 --- a/pkg/enqueue/Tests/Consumption/Extension/LimitConsumerMemoryExtensionTest.php +++ b/pkg/enqueue/Tests/Consumption/Extension/LimitConsumerMemoryExtensionTest.php @@ -1,11 +1,11 @@ createMock(PsrContext::class)); $context->setLogger($this->createMock(LoggerInterface::class)); $context->setPsrConsumer($this->createMock(Consumer::class)); - $context->setMessageProcessor($this->createMock(MessageProcessorInterface::class)); + $context->setPsrProcessor($this->createMock(Processor::class)); return $context; } diff --git a/pkg/enqueue/Tests/Consumption/Extension/LimitConsumptionTimeExtensionTest.php b/pkg/enqueue/Tests/Consumption/Extension/LimitConsumptionTimeExtensionTest.php index 15c2b8980..5b2b12875 100644 --- a/pkg/enqueue/Tests/Consumption/Extension/LimitConsumptionTimeExtensionTest.php +++ b/pkg/enqueue/Tests/Consumption/Extension/LimitConsumptionTimeExtensionTest.php @@ -1,11 +1,11 @@ createMock(PsrContext::class)); $context->setLogger($this->createMock(LoggerInterface::class)); $context->setPsrConsumer($this->createMock(Consumer::class)); - $context->setMessageProcessor($this->createMock(MessageProcessorInterface::class)); + $context->setPsrProcessor($this->createMock(Processor::class)); return $context; } diff --git a/pkg/enqueue/Tests/Consumption/Extension/LoggerExtensionTest.php b/pkg/enqueue/Tests/Consumption/Extension/LoggerExtensionTest.php index 4bcdc09b4..e8a901325 100644 --- a/pkg/enqueue/Tests/Consumption/Extension/LoggerExtensionTest.php +++ b/pkg/enqueue/Tests/Consumption/Extension/LoggerExtensionTest.php @@ -1,12 +1,12 @@ setResult('notInstanceOfResult'); $this->expectException(\LogicException::class); - $this->expectExceptionMessage('To send a reply an instance of Result class has to returned from a MessageProcessor.'); + $this->expectExceptionMessage('To send a reply an instance of Result class has to returned from a Processor.'); $extension->onPostReceived($context); } diff --git a/pkg/enqueue/Tests/Consumption/QueueConsumerTest.php b/pkg/enqueue/Tests/Consumption/QueueConsumerTest.php index cc3154b73..e8a99a263 100644 --- a/pkg/enqueue/Tests/Consumption/QueueConsumerTest.php +++ b/pkg/enqueue/Tests/Consumption/QueueConsumerTest.php @@ -1,18 +1,18 @@ createPsrContextStub(), $this->createExtension()); } - public function testShouldSetEmptyArrayToBoundMessageProcessorsPropertyInConstructor() + public function testShouldSetEmptyArrayToBoundProcessorsPropertyInConstructor() { $consumer = new QueueConsumer($this->createPsrContextStub(), null, 0); - $this->assertAttributeSame([], 'boundMessageProcessors', $consumer); + $this->assertAttributeSame([], 'boundProcessors', $consumer); } public function testShouldAllowGetConnectionSetInConstructor() @@ -52,57 +52,57 @@ public function testShouldAllowGetConnectionSetInConstructor() public function testThrowIfQueueNameEmptyOnBind() { - $messageProcessorMock = $this->createMessageProcessorMock(); + $processorMock = $this->createProcessorMock(); $consumer = new QueueConsumer($this->createPsrContextStub(), null, 0); $this->expectException(\LogicException::class); $this->expectExceptionMessage('The queue name must be not empty.'); - $consumer->bind(new NullQueue(''), $messageProcessorMock); + $consumer->bind(new NullQueue(''), $processorMock); } - public function testThrowIfQueueAlreadyBoundToMessageProcessorOnBind() + public function testThrowIfQueueAlreadyBoundToProcessorOnBind() { - $messageProcessorMock = $this->createMessageProcessorMock(); + $processorMock = $this->createProcessorMock(); $consumer = new QueueConsumer($this->createPsrContextStub(), null, 0); - $consumer->bind(new NullQueue('theQueueName'), $messageProcessorMock); + $consumer->bind(new NullQueue('theQueueName'), $processorMock); $this->expectException(\LogicException::class); $this->expectExceptionMessage('The queue was already bound.'); - $consumer->bind(new NullQueue('theQueueName'), $messageProcessorMock); + $consumer->bind(new NullQueue('theQueueName'), $processorMock); } - public function testShouldAllowBindMessageProcessorToQueue() + public function testShouldAllowBindProcessorToQueue() { $queue = new NullQueue('theQueueName'); - $messageProcessorMock = $this->createMessageProcessorMock(); + $processorMock = $this->createProcessorMock(); $consumer = new QueueConsumer($this->createPsrContextStub(), null, 0); - $consumer->bind($queue, $messageProcessorMock); + $consumer->bind($queue, $processorMock); - $this->assertAttributeSame(['theQueueName' => [$queue, $messageProcessorMock]], 'boundMessageProcessors', $consumer); + $this->assertAttributeSame(['theQueueName' => [$queue, $processorMock]], 'boundProcessors', $consumer); } public function testThrowIfQueueNeitherInstanceOfQueueNorString() { - $messageProcessorMock = $this->createMessageProcessorMock(); + $processorMock = $this->createProcessorMock(); $consumer = new QueueConsumer($this->createPsrContextStub(), null, 0); $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage('The argument must be an instance of Enqueue\Psr\Queue but got stdClass.'); - $consumer->bind(new \stdClass(), $messageProcessorMock); + $consumer->bind(new \stdClass(), $processorMock); } - public function testThrowIfMessageProcessorNeitherInstanceOfMessageProcessorNorCallable() + public function testThrowIfProcessorNeitherInstanceOfProcessorNorCallable() { $consumer = new QueueConsumer($this->createPsrContextStub(), null, 0); $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('The argument must be an instance of Enqueue\Consumption\MessageProcessorInterface but got stdClass.'); + $this->expectExceptionMessage('The argument must be an instance of Enqueue\Psr\Processor but got stdClass.'); $consumer->bind(new NullQueue(''), new \stdClass()); } @@ -126,7 +126,7 @@ public function testShouldAllowBindCallbackToQueueName() $consumer->bind($queueName, $callback); - $boundProcessors = $this->readAttribute($consumer, 'boundMessageProcessors'); + $boundProcessors = $this->readAttribute($consumer, 'boundProcessors'); $this->assertInternalType('array', $boundProcessors); $this->assertCount(1, $boundProcessors); @@ -135,16 +135,16 @@ public function testShouldAllowBindCallbackToQueueName() $this->assertInternalType('array', $boundProcessors[$queueName]); $this->assertCount(2, $boundProcessors[$queueName]); $this->assertSame($queue, $boundProcessors[$queueName][0]); - $this->assertInstanceOf(CallbackMessageProcessor::class, $boundProcessors[$queueName][1]); + $this->assertInstanceOf(CallbackProcessor::class, $boundProcessors[$queueName][1]); } public function testShouldReturnSelfOnBind() { - $messageProcessorMock = $this->createMessageProcessorMock(); + $processorMock = $this->createProcessorMock(); $consumer = new QueueConsumer($this->createPsrContextStub(), null, 0); - $this->assertSame($consumer, $consumer->bind(new NullQueue('aQueueName'), $messageProcessorMock)); + $this->assertSame($consumer, $consumer->bind(new NullQueue('aQueueName'), $processorMock)); } public function testShouldSubscribeToGivenQueueAndQuitAfterFifthIdleCycle() @@ -166,14 +166,14 @@ public function testShouldSubscribeToGivenQueueAndQuitAfterFifthIdleCycle() ->willReturn($messageConsumerMock) ; - $messageProcessorMock = $this->createMessageProcessorMock(); - $messageProcessorMock + $processorMock = $this->createProcessorMock(); + $processorMock ->expects($this->never()) ->method('process') ; $queueConsumer = new QueueConsumer($contextMock, new BreakCycleExtension(5), 0); - $queueConsumer->bind($expectedQueue, $messageProcessorMock); + $queueConsumer->bind($expectedQueue, $processorMock); $queueConsumer->consume(); } @@ -184,20 +184,20 @@ public function testShouldProcessFiveMessagesAndQuit() $contextStub = $this->createPsrContextStub($messageConsumerStub); - $messageProcessorMock = $this->createMessageProcessorMock(); - $messageProcessorMock + $processorMock = $this->createProcessorMock(); + $processorMock ->expects($this->exactly(5)) ->method('process') ->willReturn(Result::ACK) ; $queueConsumer = new QueueConsumer($contextStub, new BreakCycleExtension(5), 0); - $queueConsumer->bind(new NullQueue('aQueueName'), $messageProcessorMock); + $queueConsumer->bind(new NullQueue('aQueueName'), $processorMock); $queueConsumer->consume(); } - public function testShouldAckMessageIfMessageProcessorReturnSuchStatus() + public function testShouldAckMessageIfProcessorReturnSuchStatus() { $messageMock = $this->createMessageMock(); $messageConsumerStub = $this->createMessageConsumerStub($messageMock); @@ -209,8 +209,8 @@ public function testShouldAckMessageIfMessageProcessorReturnSuchStatus() $contextStub = $this->createPsrContextStub($messageConsumerStub); - $messageProcessorMock = $this->createMessageProcessorMock(); - $messageProcessorMock + $processorMock = $this->createProcessorMock(); + $processorMock ->expects($this->once()) ->method('process') ->with($this->identicalTo($messageMock)) @@ -218,20 +218,20 @@ public function testShouldAckMessageIfMessageProcessorReturnSuchStatus() ; $queueConsumer = new QueueConsumer($contextStub, new BreakCycleExtension(1), 0); - $queueConsumer->bind(new NullQueue('aQueueName'), $messageProcessorMock); + $queueConsumer->bind(new NullQueue('aQueueName'), $processorMock); $queueConsumer->consume(); } - public function testThrowIfMessageProcessorReturnNull() + public function testThrowIfProcessorReturnNull() { $messageMock = $this->createMessageMock(); $messageConsumerStub = $this->createMessageConsumerStub($messageMock); $contextStub = $this->createPsrContextStub($messageConsumerStub); - $messageProcessorMock = $this->createMessageProcessorMock(); - $messageProcessorMock + $processorMock = $this->createProcessorMock(); + $processorMock ->expects($this->once()) ->method('process') ->with($this->identicalTo($messageMock)) @@ -239,14 +239,14 @@ public function testThrowIfMessageProcessorReturnNull() ; $queueConsumer = new QueueConsumer($contextStub, new BreakCycleExtension(1), 0); - $queueConsumer->bind(new NullQueue('aQueueName'), $messageProcessorMock); + $queueConsumer->bind(new NullQueue('aQueueName'), $processorMock); $this->expectException(\LogicException::class); $this->expectExceptionMessage('Status is not supported'); $queueConsumer->consume(); } - public function testShouldRejectMessageIfMessageProcessorReturnSuchStatus() + public function testShouldRejectMessageIfProcessorReturnSuchStatus() { $messageMock = $this->createMessageMock(); $messageConsumerStub = $this->createMessageConsumerStub($messageMock); @@ -258,8 +258,8 @@ public function testShouldRejectMessageIfMessageProcessorReturnSuchStatus() $contextStub = $this->createPsrContextStub($messageConsumerStub); - $messageProcessorMock = $this->createMessageProcessorMock(); - $messageProcessorMock + $processorMock = $this->createProcessorMock(); + $processorMock ->expects($this->once()) ->method('process') ->with($this->identicalTo($messageMock)) @@ -267,12 +267,12 @@ public function testShouldRejectMessageIfMessageProcessorReturnSuchStatus() ; $queueConsumer = new QueueConsumer($contextStub, new BreakCycleExtension(1), 0); - $queueConsumer->bind(new NullQueue('aQueueName'), $messageProcessorMock); + $queueConsumer->bind(new NullQueue('aQueueName'), $processorMock); $queueConsumer->consume(); } - public function testShouldRequeueMessageIfMessageProcessorReturnSuchStatus() + public function testShouldRequeueMessageIfProcessorReturnSuchStatus() { $messageMock = $this->createMessageMock(); $messageConsumerStub = $this->createMessageConsumerStub($messageMock); @@ -284,8 +284,8 @@ public function testShouldRequeueMessageIfMessageProcessorReturnSuchStatus() $contextStub = $this->createPsrContextStub($messageConsumerStub); - $messageProcessorMock = $this->createMessageProcessorMock(); - $messageProcessorMock + $processorMock = $this->createProcessorMock(); + $processorMock ->expects($this->once()) ->method('process') ->with($this->identicalTo($messageMock)) @@ -293,20 +293,20 @@ public function testShouldRequeueMessageIfMessageProcessorReturnSuchStatus() ; $queueConsumer = new QueueConsumer($contextStub, new BreakCycleExtension(1), 0); - $queueConsumer->bind(new NullQueue('aQueueName'), $messageProcessorMock); + $queueConsumer->bind(new NullQueue('aQueueName'), $processorMock); $queueConsumer->consume(); } - public function testThrowIfMessageProcessorReturnInvalidStatus() + public function testThrowIfProcessorReturnInvalidStatus() { $messageMock = $this->createMessageMock(); $messageConsumerStub = $this->createMessageConsumerStub($messageMock); $contextStub = $this->createPsrContextStub($messageConsumerStub); - $messageProcessorMock = $this->createMessageProcessorMock(); - $messageProcessorMock + $processorMock = $this->createProcessorMock(); + $processorMock ->expects($this->once()) ->method('process') ->with($this->identicalTo($messageMock)) @@ -314,14 +314,14 @@ public function testThrowIfMessageProcessorReturnInvalidStatus() ; $queueConsumer = new QueueConsumer($contextStub, new BreakCycleExtension(1), 0); - $queueConsumer->bind(new NullQueue('aQueueName'), $messageProcessorMock); + $queueConsumer->bind(new NullQueue('aQueueName'), $processorMock); $this->expectException(\LogicException::class); $this->expectExceptionMessage('Status is not supported: invalidStatus'); $queueConsumer->consume(); } - public function testShouldNotPassMessageToMessageProcessorIfItWasProcessedByExtension() + public function testShouldNotPassMessageToProcessorIfItWasProcessedByExtension() { $extension = $this->createExtension(); $extension @@ -338,15 +338,15 @@ public function testShouldNotPassMessageToMessageProcessorIfItWasProcessedByExte $contextStub = $this->createPsrContextStub($messageConsumerStub); - $messageProcessorMock = $this->createMessageProcessorMock(); - $messageProcessorMock + $processorMock = $this->createProcessorMock(); + $processorMock ->expects($this->never()) ->method('process') ; $chainExtensions = new ChainExtension([$extension, new BreakCycleExtension(1)]); $queueConsumer = new QueueConsumer($contextStub, $chainExtensions, 0); - $queueConsumer->bind(new NullQueue('aQueueName'), $messageProcessorMock); + $queueConsumer->bind(new NullQueue('aQueueName'), $processorMock); $queueConsumer->consume(); } @@ -357,7 +357,7 @@ public function testShouldCallOnStartExtensionMethod() $contextStub = $this->createPsrContextStub($messageConsumerStub); - $messageProcessorMock = $this->createMessageProcessorMock(); + $processorMock = $this->createProcessorMock(); $extension = $this->createExtension(); $extension @@ -367,11 +367,11 @@ public function testShouldCallOnStartExtensionMethod() ->willReturnCallback(function (Context $context) use ( $contextStub, $messageConsumerStub, - $messageProcessorMock + $processorMock ) { $this->assertSame($contextStub, $context->getPsrContext()); $this->assertNull($context->getPsrConsumer()); - $this->assertNull($context->getMessageProcessor()); + $this->assertNull($context->getPsrProcessor()); $this->assertNull($context->getLogger()); $this->assertNull($context->getPsrMessage()); $this->assertNull($context->getException()); @@ -383,7 +383,7 @@ public function testShouldCallOnStartExtensionMethod() $chainExtensions = new ChainExtension([$extension, new BreakCycleExtension(1)]); $queueConsumer = new QueueConsumer($contextStub, $chainExtensions, 0); - $queueConsumer->bind(new NullQueue('aQueueName'), $messageProcessorMock); + $queueConsumer->bind(new NullQueue('aQueueName'), $processorMock); $queueConsumer->consume(); } @@ -394,7 +394,7 @@ public function testShouldCallOnIdleExtensionMethod() $contextStub = $this->createPsrContextStub($messageConsumerStub); - $messageProcessorMock = $this->createMessageProcessorMock(); + $processorMock = $this->createProcessorMock(); $extension = $this->createExtension(); $extension @@ -404,11 +404,11 @@ public function testShouldCallOnIdleExtensionMethod() ->willReturnCallback(function (Context $context) use ( $contextStub, $messageConsumerStub, - $messageProcessorMock + $processorMock ) { $this->assertSame($contextStub, $context->getPsrContext()); $this->assertSame($messageConsumerStub, $context->getPsrConsumer()); - $this->assertSame($messageProcessorMock, $context->getMessageProcessor()); + $this->assertSame($processorMock, $context->getPsrProcessor()); $this->assertInstanceOf(NullLogger::class, $context->getLogger()); $this->assertNull($context->getPsrMessage()); $this->assertNull($context->getException()); @@ -419,7 +419,7 @@ public function testShouldCallOnIdleExtensionMethod() $chainExtensions = new ChainExtension([$extension, new BreakCycleExtension(1)]); $queueConsumer = new QueueConsumer($contextStub, $chainExtensions, 0); - $queueConsumer->bind(new NullQueue('aQueueName'), $messageProcessorMock); + $queueConsumer->bind(new NullQueue('aQueueName'), $processorMock); $queueConsumer->consume(); } @@ -431,7 +431,7 @@ public function testShouldCallOnBeforeReceiveExtensionMethod() $contextStub = $this->createPsrContextStub($messageConsumerStub); - $messageProcessorMock = $this->createMessageProcessorStub(); + $processorMock = $this->createProcessorStub(); $queue = new NullQueue('aQueueName'); @@ -443,13 +443,13 @@ public function testShouldCallOnBeforeReceiveExtensionMethod() ->willReturnCallback(function (Context $context) use ( $contextStub, $messageConsumerStub, - $messageProcessorMock, + $processorMock, $expectedMessage, $queue ) { $this->assertSame($contextStub, $context->getPsrContext()); $this->assertSame($messageConsumerStub, $context->getPsrConsumer()); - $this->assertSame($messageProcessorMock, $context->getMessageProcessor()); + $this->assertSame($processorMock, $context->getPsrProcessor()); $this->assertInstanceOf(NullLogger::class, $context->getLogger()); $this->assertNull($context->getPsrMessage()); $this->assertNull($context->getException()); @@ -461,7 +461,7 @@ public function testShouldCallOnBeforeReceiveExtensionMethod() $chainExtensions = new ChainExtension([$extension, new BreakCycleExtension(1)]); $queueConsumer = new QueueConsumer($contextStub, $chainExtensions, 0); - $queueConsumer->bind($queue, $messageProcessorMock); + $queueConsumer->bind($queue, $processorMock); $queueConsumer->consume(); } @@ -473,7 +473,7 @@ public function testShouldCallOnPreReceivedAndPostReceivedExtensionMethods() $contextStub = $this->createPsrContextStub($messageConsumerStub); - $messageProcessorMock = $this->createMessageProcessorStub(); + $processorMock = $this->createProcessorStub(); $extension = $this->createExtension(); $extension @@ -483,12 +483,12 @@ public function testShouldCallOnPreReceivedAndPostReceivedExtensionMethods() ->willReturnCallback(function (Context $context) use ( $contextStub, $messageConsumerStub, - $messageProcessorMock, + $processorMock, $expectedMessage ) { $this->assertSame($contextStub, $context->getPsrContext()); $this->assertSame($messageConsumerStub, $context->getPsrConsumer()); - $this->assertSame($messageProcessorMock, $context->getMessageProcessor()); + $this->assertSame($processorMock, $context->getPsrProcessor()); $this->assertSame($expectedMessage, $context->getPsrMessage()); $this->assertInstanceOf(NullLogger::class, $context->getLogger()); $this->assertNull($context->getException()); @@ -503,12 +503,12 @@ public function testShouldCallOnPreReceivedAndPostReceivedExtensionMethods() ->willReturnCallback(function (Context $context) use ( $contextStub, $messageConsumerStub, - $messageProcessorMock, + $processorMock, $expectedMessage ) { $this->assertSame($contextStub, $context->getPsrContext()); $this->assertSame($messageConsumerStub, $context->getPsrConsumer()); - $this->assertSame($messageProcessorMock, $context->getMessageProcessor()); + $this->assertSame($processorMock, $context->getPsrProcessor()); $this->assertSame($expectedMessage, $context->getPsrMessage()); $this->assertInstanceOf(NullLogger::class, $context->getLogger()); $this->assertNull($context->getException()); @@ -519,7 +519,7 @@ public function testShouldCallOnPreReceivedAndPostReceivedExtensionMethods() $chainExtensions = new ChainExtension([$extension, new BreakCycleExtension(1)]); $queueConsumer = new QueueConsumer($contextStub, $chainExtensions, 0); - $queueConsumer->bind(new NullQueue('aQueueName'), $messageProcessorMock); + $queueConsumer->bind(new NullQueue('aQueueName'), $processorMock); $queueConsumer->consume(); } @@ -530,7 +530,7 @@ public function testShouldAllowInterruptConsumingOnIdle() $contextStub = $this->createPsrContextStub($messageConsumerStub); - $messageProcessorMock = $this->createMessageProcessorMock(); + $processorMock = $this->createProcessorMock(); $extension = $this->createExtension(); $extension @@ -548,11 +548,11 @@ public function testShouldAllowInterruptConsumingOnIdle() ->willReturnCallback(function (Context $context) use ( $contextStub, $messageConsumerStub, - $messageProcessorMock + $processorMock ) { $this->assertSame($contextStub, $context->getPsrContext()); $this->assertSame($messageConsumerStub, $context->getPsrConsumer()); - $this->assertSame($messageProcessorMock, $context->getMessageProcessor()); + $this->assertSame($processorMock, $context->getPsrProcessor()); $this->assertInstanceOf(NullLogger::class, $context->getLogger()); $this->assertNull($context->getPsrMessage()); $this->assertNull($context->getException()); @@ -563,7 +563,7 @@ public function testShouldAllowInterruptConsumingOnIdle() $chainExtensions = new ChainExtension([$extension, new BreakCycleExtension(1)]); $queueConsumer = new QueueConsumer($contextStub, $chainExtensions, 0); - $queueConsumer->bind(new NullQueue('aQueueName'), $messageProcessorMock); + $queueConsumer->bind(new NullQueue('aQueueName'), $processorMock); $queueConsumer->consume(); } @@ -578,7 +578,7 @@ public function testShouldCloseSessionWhenConsumptionInterrupted() ->method('close') ; - $messageProcessorMock = $this->createMessageProcessorMock(); + $processorMock = $this->createProcessorMock(); $extension = $this->createExtension(); $extension @@ -592,7 +592,7 @@ public function testShouldCloseSessionWhenConsumptionInterrupted() $chainExtensions = new ChainExtension([$extension, new BreakCycleExtension(1)]); $queueConsumer = new QueueConsumer($contextStub, $chainExtensions, 0); - $queueConsumer->bind(new NullQueue('aQueueName'), $messageProcessorMock); + $queueConsumer->bind(new NullQueue('aQueueName'), $processorMock); $queueConsumer->consume(); } @@ -609,15 +609,15 @@ public function testShouldCloseSessionWhenConsumptionInterruptedByException() ->method('close') ; - $messageProcessorMock = $this->createMessageProcessorMock(); - $messageProcessorMock + $processorMock = $this->createProcessorMock(); + $processorMock ->expects($this->once()) ->method('process') ->willThrowException($expectedException) ; $queueConsumer = new QueueConsumer($contextStub, new BreakCycleExtension(1), 0); - $queueConsumer->bind(new NullQueue('aQueueName'), $messageProcessorMock); + $queueConsumer->bind(new NullQueue('aQueueName'), $processorMock); try { $queueConsumer->consume(); @@ -640,8 +640,8 @@ public function testShouldSetMainExceptionAsPreviousToExceptionThrownOnInterrupt $contextStub = $this->createPsrContextStub($messageConsumerStub); - $messageProcessorMock = $this->createMessageProcessorMock(); - $messageProcessorMock + $processorMock = $this->createProcessorMock(); + $processorMock ->expects($this->once()) ->method('process') ->willThrowException($mainException) @@ -656,7 +656,7 @@ public function testShouldSetMainExceptionAsPreviousToExceptionThrownOnInterrupt $chainExtensions = new ChainExtension([$extension, new BreakCycleExtension(1)]); $queueConsumer = new QueueConsumer($contextStub, $chainExtensions, 0); - $queueConsumer->bind(new NullQueue('aQueueName'), $messageProcessorMock); + $queueConsumer->bind(new NullQueue('aQueueName'), $processorMock); try { $queueConsumer->consume(); @@ -677,8 +677,8 @@ public function testShouldAllowInterruptConsumingOnPreReceiveButProcessCurrentMe $contextStub = $this->createPsrContextStub($messageConsumerStub); - $messageProcessorMock = $this->createMessageProcessorMock(); - $messageProcessorMock + $processorMock = $this->createProcessorMock(); + $processorMock ->expects($this->once()) ->method('process') ->willReturn(Result::ACK) @@ -700,12 +700,12 @@ public function testShouldAllowInterruptConsumingOnPreReceiveButProcessCurrentMe ->willReturnCallback(function (Context $context) use ( $contextStub, $messageConsumerStub, - $messageProcessorMock, + $processorMock, $expectedMessage ) { $this->assertSame($contextStub, $context->getPsrContext()); $this->assertSame($messageConsumerStub, $context->getPsrConsumer()); - $this->assertSame($messageProcessorMock, $context->getMessageProcessor()); + $this->assertSame($processorMock, $context->getPsrProcessor()); $this->assertSame($expectedMessage, $context->getPsrMessage()); $this->assertInstanceOf(NullLogger::class, $context->getLogger()); $this->assertNull($context->getException()); @@ -716,7 +716,7 @@ public function testShouldAllowInterruptConsumingOnPreReceiveButProcessCurrentMe $chainExtensions = new ChainExtension([$extension, new BreakCycleExtension(1)]); $queueConsumer = new QueueConsumer($contextStub, $chainExtensions, 0); - $queueConsumer->bind(new NullQueue('aQueueName'), $messageProcessorMock); + $queueConsumer->bind(new NullQueue('aQueueName'), $processorMock); $queueConsumer->consume(); } @@ -728,8 +728,8 @@ public function testShouldAllowInterruptConsumingOnPostReceive() $contextStub = $this->createPsrContextStub($messageConsumerStub); - $messageProcessorMock = $this->createMessageProcessorMock(); - $messageProcessorMock + $processorMock = $this->createProcessorMock(); + $processorMock ->expects($this->once()) ->method('process') ->willReturn(Result::ACK) @@ -751,12 +751,12 @@ public function testShouldAllowInterruptConsumingOnPostReceive() ->willReturnCallback(function (Context $context) use ( $contextStub, $messageConsumerStub, - $messageProcessorMock, + $processorMock, $expectedMessage ) { $this->assertSame($contextStub, $context->getPsrContext()); $this->assertSame($messageConsumerStub, $context->getPsrConsumer()); - $this->assertSame($messageProcessorMock, $context->getMessageProcessor()); + $this->assertSame($processorMock, $context->getPsrProcessor()); $this->assertSame($expectedMessage, $context->getPsrMessage()); $this->assertInstanceOf(NullLogger::class, $context->getLogger()); $this->assertNull($context->getException()); @@ -767,7 +767,7 @@ public function testShouldAllowInterruptConsumingOnPostReceive() $chainExtensions = new ChainExtension([$extension, new BreakCycleExtension(1)]); $queueConsumer = new QueueConsumer($contextStub, $chainExtensions, 0); - $queueConsumer->bind(new NullQueue('aQueueName'), $messageProcessorMock); + $queueConsumer->bind(new NullQueue('aQueueName'), $processorMock); $queueConsumer->consume(); } @@ -780,8 +780,8 @@ public function testShouldCallOnInterruptedIfExceptionThrow() $contextStub = $this->createPsrContextStub($messageConsumerStub); - $messageProcessorMock = $this->createMessageProcessorMock(); - $messageProcessorMock + $processorMock = $this->createProcessorMock(); + $processorMock ->expects($this->once()) ->method('process') ->willThrowException($expectedException) @@ -795,13 +795,13 @@ public function testShouldCallOnInterruptedIfExceptionThrow() ->willReturnCallback(function (Context $context) use ( $contextStub, $messageConsumerStub, - $messageProcessorMock, + $processorMock, $expectedMessage, $expectedException ) { $this->assertSame($contextStub, $context->getPsrContext()); $this->assertSame($messageConsumerStub, $context->getPsrConsumer()); - $this->assertSame($messageProcessorMock, $context->getMessageProcessor()); + $this->assertSame($processorMock, $context->getPsrProcessor()); $this->assertSame($expectedMessage, $context->getPsrMessage()); $this->assertSame($expectedException, $context->getException()); $this->assertInstanceOf(NullLogger::class, $context->getLogger()); @@ -812,7 +812,7 @@ public function testShouldCallOnInterruptedIfExceptionThrow() $chainExtensions = new ChainExtension([$extension, new BreakCycleExtension(1)]); $queueConsumer = new QueueConsumer($contextStub, $chainExtensions, 0); - $queueConsumer->bind(new NullQueue('aQueueName'), $messageProcessorMock); + $queueConsumer->bind(new NullQueue('aQueueName'), $processorMock); $this->expectException(\Exception::class); $this->expectExceptionMessage('Process failed'); @@ -826,8 +826,8 @@ public function testShouldCallExtensionPassedOnRuntime() $contextStub = $this->createPsrContextStub($messageConsumerStub); - $messageProcessorMock = $this->createMessageProcessorMock(); - $messageProcessorMock + $processorMock = $this->createProcessorMock(); + $processorMock ->expects($this->once()) ->method('process') ->willReturn(Result::ACK) @@ -856,7 +856,7 @@ public function testShouldCallExtensionPassedOnRuntime() ; $queueConsumer = new QueueConsumer($contextStub, new BreakCycleExtension(1), 0); - $queueConsumer->bind(new NullQueue('aQueueName'), $messageProcessorMock); + $queueConsumer->bind(new NullQueue('aQueueName'), $processorMock); $queueConsumer->consume(new ChainExtension([$runtimeExtension])); } @@ -868,8 +868,8 @@ public function testShouldChangeLoggerOnStart() $contextStub = $this->createPsrContextStub($messageConsumerStub); - $messageProcessorMock = $this->createMessageProcessorMock(); - $messageProcessorMock + $processorMock = $this->createProcessorMock(); + $processorMock ->expects($this->once()) ->method('process') ->willReturn(Result::ACK) @@ -906,7 +906,7 @@ public function testShouldChangeLoggerOnStart() $chainExtensions = new ChainExtension([$extension, new BreakCycleExtension(1)]); $queueConsumer = new QueueConsumer($contextStub, $chainExtensions, 0); - $queueConsumer->bind(new NullQueue('aQueueName'), $messageProcessorMock); + $queueConsumer->bind(new NullQueue('aQueueName'), $processorMock); $queueConsumer->consume(); } @@ -918,8 +918,8 @@ public function testShouldCallEachQueueOneByOne() $contextStub = $this->createPsrContextStub($messageConsumerStub); - $messageProcessorMock = $this->createMessageProcessorStub(); - $anotherMessageProcessorMock = $this->createMessageProcessorStub(); + $processorMock = $this->createProcessorStub(); + $anotherProcessorMock = $this->createProcessorStub(); $queue1 = new NullQueue('aQueueName'); $queue2 = new NullQueue('aAnotherQueueName'); @@ -929,8 +929,8 @@ public function testShouldCallEachQueueOneByOne() ->expects($this->at(1)) ->method('onBeforeReceive') ->with($this->isInstanceOf(Context::class)) - ->willReturnCallback(function (Context $context) use ($messageProcessorMock, $queue1) { - $this->assertSame($messageProcessorMock, $context->getMessageProcessor()); + ->willReturnCallback(function (Context $context) use ($processorMock, $queue1) { + $this->assertSame($processorMock, $context->getPsrProcessor()); $this->assertSame($queue1, $context->getPsrQueue()); }) ; @@ -938,16 +938,16 @@ public function testShouldCallEachQueueOneByOne() ->expects($this->at(4)) ->method('onBeforeReceive') ->with($this->isInstanceOf(Context::class)) - ->willReturnCallback(function (Context $context) use ($anotherMessageProcessorMock, $queue2) { - $this->assertSame($anotherMessageProcessorMock, $context->getMessageProcessor()); + ->willReturnCallback(function (Context $context) use ($anotherProcessorMock, $queue2) { + $this->assertSame($anotherProcessorMock, $context->getPsrProcessor()); $this->assertSame($queue2, $context->getPsrQueue()); }) ; $queueConsumer = new QueueConsumer($contextStub, new BreakCycleExtension(2), 0); $queueConsumer - ->bind($queue1, $messageProcessorMock) - ->bind($queue2, $anotherMessageProcessorMock) + ->bind($queue1, $processorMock) + ->bind($queue2, $anotherProcessorMock) ; $queueConsumer->consume(new ChainExtension([$extension])); @@ -993,26 +993,26 @@ protected function createPsrContextStub($messageConsumer = null) } /** - * @return \PHPUnit_Framework_MockObject_MockObject|MessageProcessorInterface + * @return \PHPUnit_Framework_MockObject_MockObject|Processor */ - protected function createMessageProcessorMock() + protected function createProcessorMock() { - return $this->createMock(MessageProcessorInterface::class); + return $this->createMock(Processor::class); } /** - * @return \PHPUnit_Framework_MockObject_MockObject|MessageProcessorInterface + * @return \PHPUnit_Framework_MockObject_MockObject|Processor */ - protected function createMessageProcessorStub() + protected function createProcessorStub() { - $messageProcessorMock = $this->createMessageProcessorMock(); - $messageProcessorMock + $processorMock = $this->createProcessorMock(); + $processorMock ->expects($this->any()) ->method('process') ->willReturn(Result::ACK) ; - return $messageProcessorMock; + return $processorMock; } /** diff --git a/pkg/enqueue/Tests/Functional/Client/SimpleClientTest.php b/pkg/enqueue/Tests/Functional/Client/SimpleClientTest.php index 1dd606b98..ef176d5a5 100644 --- a/pkg/enqueue/Tests/Functional/Client/SimpleClientTest.php +++ b/pkg/enqueue/Tests/Functional/Client/SimpleClientTest.php @@ -2,12 +2,12 @@ namespace Enqueue\Tests\Functional\Client; use Enqueue\AmqpExt\AmqpContext; -use Enqueue\Psr\Message; use Enqueue\Client\SimpleClient; use Enqueue\Consumption\ChainExtension; use Enqueue\Consumption\Extension\LimitConsumedMessagesExtension; use Enqueue\Consumption\Extension\LimitConsumptionTimeExtension; use Enqueue\Consumption\Result; +use Enqueue\Psr\Message; use Enqueue\Test\RabbitmqAmqpExtension; use Enqueue\Test\RabbitmqManagmentExtensionTrait; diff --git a/pkg/enqueue/Tests/Router/RouteRecipientListProcessorTest.php b/pkg/enqueue/Tests/Router/RouteRecipientListProcessorTest.php index d88a0f929..386440fb3 100644 --- a/pkg/enqueue/Tests/Router/RouteRecipientListProcessorTest.php +++ b/pkg/enqueue/Tests/Router/RouteRecipientListProcessorTest.php @@ -1,10 +1,10 @@ assertClassImplements(MessageProcessorInterface::class, RouteRecipientListProcessor::class); + $this->assertClassImplements(Processor::class, RouteRecipientListProcessor::class); } public function testCouldBeConstructedWithRouterAsFirstArgument() diff --git a/pkg/enqueue/Tests/Symfony/Client/ConsumeMessagesCommandTest.php b/pkg/enqueue/Tests/Symfony/Client/ConsumeMessagesCommandTest.php index 164f69ee2..cb16e5d9f 100644 --- a/pkg/enqueue/Tests/Symfony/Client/ConsumeMessagesCommandTest.php +++ b/pkg/enqueue/Tests/Symfony/Client/ConsumeMessagesCommandTest.php @@ -1,13 +1,13 @@ createQueueConsumerMock(), - $this->createDelegateMessageProcessorMock(), + $this->createDelegateProcessorMock(), $this->createQueueMetaRegistry([]), $this->createDriverMock() ); @@ -28,7 +28,7 @@ public function testShouldHaveCommandName() { $command = new ConsumeMessagesCommand( $this->createQueueConsumerMock(), - $this->createDelegateMessageProcessorMock(), + $this->createDelegateProcessorMock(), $this->createQueueMetaRegistry([]), $this->createDriverMock() ); @@ -40,7 +40,7 @@ public function testShouldHaveCommandAliases() { $command = new ConsumeMessagesCommand( $this->createQueueConsumerMock(), - $this->createDelegateMessageProcessorMock(), + $this->createDelegateProcessorMock(), $this->createQueueMetaRegistry([]), $this->createDriverMock() ); @@ -52,7 +52,7 @@ public function testShouldHaveExpectedOptions() { $command = new ConsumeMessagesCommand( $this->createQueueConsumerMock(), - $this->createDelegateMessageProcessorMock(), + $this->createDelegateProcessorMock(), $this->createQueueMetaRegistry([]), $this->createDriverMock() ); @@ -70,7 +70,7 @@ public function testShouldHaveExpectedAttributes() { $command = new ConsumeMessagesCommand( $this->createQueueConsumerMock(), - $this->createDelegateMessageProcessorMock(), + $this->createDelegateProcessorMock(), $this->createQueueMetaRegistry([]), $this->createDriverMock() ); @@ -85,7 +85,7 @@ public function testShouldExecuteConsumptionAndUseDefaultQueueName() { $queue = new NullQueue(''); - $processor = $this->createDelegateMessageProcessorMock(); + $processor = $this->createDelegateProcessorMock(); $context = $this->createPsrContextMock(); $context @@ -132,7 +132,7 @@ public function testShouldExecuteConsumptionAndUseCustomClientDestinationName() { $queue = new NullQueue(''); - $processor = $this->createDelegateMessageProcessorMock(); + $processor = $this->createDelegateProcessorMock(); $context = $this->createPsrContextMock(); $context @@ -205,11 +205,11 @@ private function createPsrContextMock() } /** - * @return \PHPUnit_Framework_MockObject_MockObject|DelegateMessageProcessor + * @return \PHPUnit_Framework_MockObject_MockObject|DelegateProcessor */ - private function createDelegateMessageProcessorMock() + private function createDelegateProcessorMock() { - return $this->createMock(DelegateMessageProcessor::class); + return $this->createMock(DelegateProcessor::class); } /** diff --git a/pkg/enqueue/Tests/Symfony/Client/ContainerAwareMessageProcessorRegistryTest.php b/pkg/enqueue/Tests/Symfony/Client/ContainerAwareProcessorRegistryTest.php similarity index 52% rename from pkg/enqueue/Tests/Symfony/Client/ContainerAwareMessageProcessorRegistryTest.php rename to pkg/enqueue/Tests/Symfony/Client/ContainerAwareProcessorRegistryTest.php index 80a3c503d..3604a89b3 100644 --- a/pkg/enqueue/Tests/Symfony/Client/ContainerAwareMessageProcessorRegistryTest.php +++ b/pkg/enqueue/Tests/Symfony/Client/ContainerAwareProcessorRegistryTest.php @@ -1,34 +1,34 @@ assertClassImplements(MessageProcessorRegistryInterface::class, ContainerAwareMessageProcessorRegistry::class); + $this->assertClassImplements(ProcessorRegistryInterface::class, ContainerAwareProcessorRegistry::class); } public function testCouldBeConstructedWithoutAnyArgument() { - new ContainerAwareMessageProcessorRegistry(); + new ContainerAwareProcessorRegistry(); } public function testShouldThrowExceptionIfProcessorIsNotSet() { $this->setExpectedException( \LogicException::class, - 'MessageProcessor was not found. processorName: "processor-name"' + 'Processor was not found. processorName: "processor-name"' ); - $registry = new ContainerAwareMessageProcessorRegistry(); + $registry = new ContainerAwareProcessorRegistry(); $registry->get('processor-name'); } @@ -36,13 +36,13 @@ public function testShouldThrowExceptionIfContainerIsNotSet() { $this->setExpectedException(\LogicException::class, 'Container was not set'); - $registry = new ContainerAwareMessageProcessorRegistry(); + $registry = new ContainerAwareProcessorRegistry(); $registry->set('processor-name', 'processor-id'); $registry->get('processor-name'); } - public function testShouldThrowExceptionIfInstanceOfMessageProcessorIsInvalid() + public function testShouldThrowExceptionIfInstanceOfProcessorIsInvalid() { $this->setExpectedException(\LogicException::class, 'Container was not set'); @@ -51,32 +51,32 @@ public function testShouldThrowExceptionIfInstanceOfMessageProcessorIsInvalid() $container = new Container(); $container->set('processor-id', $processor); - $registry = new ContainerAwareMessageProcessorRegistry(); + $registry = new ContainerAwareProcessorRegistry(); $registry->set('processor-name', 'processor-id'); $registry->get('processor-name'); } - public function testShouldReturnInstanceOfMessageProcessor() + public function testShouldReturnInstanceOfProcessor() { $this->setExpectedException(\LogicException::class, 'Container was not set'); - $processor = $this->createMessageProcessorMock(); + $processor = $this->createProcessorMock(); $container = new Container(); $container->set('processor-id', $processor); - $registry = new ContainerAwareMessageProcessorRegistry(); + $registry = new ContainerAwareProcessorRegistry(); $registry->set('processor-name', 'processor-id'); $this->assertSame($processor, $registry->get('processor-name')); } /** - * @return \PHPUnit_Framework_MockObject_MockObject|MessageProcessorInterface + * @return \PHPUnit_Framework_MockObject_MockObject|Processor */ - protected function createMessageProcessorMock() + protected function createProcessorMock() { - return $this->createMock(MessageProcessorInterface::class); + return $this->createMock(Processor::class); } } diff --git a/pkg/enqueue/Tests/Symfony/Consumption/ContainerAwareConsumeMessagesCommandTest.php b/pkg/enqueue/Tests/Symfony/Consumption/ContainerAwareConsumeMessagesCommandTest.php index 566e030e6..7ff98f81c 100644 --- a/pkg/enqueue/Tests/Symfony/Consumption/ContainerAwareConsumeMessagesCommandTest.php +++ b/pkg/enqueue/Tests/Symfony/Consumption/ContainerAwareConsumeMessagesCommandTest.php @@ -1,11 +1,11 @@ setExpectedException(\LogicException::class, 'Invalid message processor service given.'. - ' It must be an instance of Enqueue\Consumption\MessageProcessorInterface but stdClass'); + ' It must be an instance of Enqueue\Psr\Processor but stdClass'); $container = new Container(); $container->set('processor-service', new \stdClass()); @@ -67,7 +67,7 @@ public function testShouldThrowExceptionIfProcessorInstanceHasWrongClass() public function testShouldExecuteConsumption() { - $processor = $this->createMessageProcessor(); + $processor = $this->createProcessor(); $queue = $this->createQueueMock(); @@ -129,11 +129,11 @@ protected function createQueueMock() } /** - * @return \PHPUnit_Framework_MockObject_MockObject|MessageProcessorInterface + * @return \PHPUnit_Framework_MockObject_MockObject|Processor */ - protected function createMessageProcessor() + protected function createProcessor() { - return $this->createMock(MessageProcessorInterface::class); + return $this->createMock(Processor::class); } /** diff --git a/pkg/job-queue/CalculateRootJobStatusProcessor.php b/pkg/job-queue/CalculateRootJobStatusProcessor.php index a970a4399..19dd991d6 100644 --- a/pkg/job-queue/CalculateRootJobStatusProcessor.php +++ b/pkg/job-queue/CalculateRootJobStatusProcessor.php @@ -1,16 +1,16 @@ logger->critical(sprintf( - '[DependentJobMessageProcessor] Got invalid message. body: "%s"', + '[DependentJobProcessor] Got invalid message. body: "%s"', $message->getBody() )); @@ -59,7 +59,7 @@ public function process(PsrMessage $message, Context $context) $job = $this->jobStorage->findJobById($data['jobId']); if (!$job) { $this->logger->critical(sprintf( - '[DependentJobMessageProcessor] Job was not found. id: "%s"', + '[DependentJobProcessor] Job was not found. id: "%s"', $data['jobId'] )); @@ -68,7 +68,7 @@ public function process(PsrMessage $message, Context $context) if (!$job->isRoot()) { $this->logger->critical(sprintf( - '[DependentJobMessageProcessor] Expected root job but got child. id: "%s"', + '[DependentJobProcessor] Expected root job but got child. id: "%s"', $data['jobId'] )); @@ -86,7 +86,7 @@ public function process(PsrMessage $message, Context $context) foreach ($dependentJobs as $dependentJob) { if (!isset($dependentJob['topic']) || !isset($dependentJob['message'])) { $this->logger->critical(sprintf( - '[DependentJobMessageProcessor] Got invalid dependent job data. job: "%s", dependentJob: "%s"', + '[DependentJobProcessor] Got invalid dependent job data. job: "%s", dependentJob: "%s"', $job->getId(), JSON::encode($dependentJob) )); diff --git a/pkg/job-queue/Tests/CalculateRootJobStatusProcessorTest.php b/pkg/job-queue/Tests/CalculateRootJobStatusProcessorTest.php index ae7f7f163..4c38ed141 100644 --- a/pkg/job-queue/Tests/CalculateRootJobStatusProcessorTest.php +++ b/pkg/job-queue/Tests/CalculateRootJobStatusProcessorTest.php @@ -1,14 +1,14 @@ assertEquals( [Topics::ROOT_JOB_STOPPED], - DependentJobMessageProcessor::getSubscribedTopics() + DependentJobProcessor::getSubscribedTopics() ); } @@ -32,13 +32,13 @@ public function testShouldLogCriticalAndRejectMessageIfJobIdIsNotSet() $logger ->expects($this->once()) ->method('critical') - ->with('[DependentJobMessageProcessor] Got invalid message. body: "{"key":"value"}"') + ->with('[DependentJobProcessor] Got invalid message. body: "{"key":"value"}"') ; $message = new NullMessage(); $message->setBody(json_encode(['key' => 'value'])); - $processor = new DependentJobMessageProcessor($jobStorage, $producer, $logger); + $processor = new DependentJobProcessor($jobStorage, $producer, $logger); $result = $processor->process($message, $this->createContextMock()); @@ -60,13 +60,13 @@ public function testShouldLogCriticalAndRejectMessageIfJobEntityWasNotFound() $logger ->expects($this->once()) ->method('critical') - ->with('[DependentJobMessageProcessor] Job was not found. id: "12345"') + ->with('[DependentJobProcessor] Job was not found. id: "12345"') ; $message = new NullMessage(); $message->setBody(json_encode(['jobId' => 12345])); - $processor = new DependentJobMessageProcessor($jobStorage, $producer, $logger); + $processor = new DependentJobProcessor($jobStorage, $producer, $logger); $result = $processor->process($message, $this->createContextMock()); @@ -92,13 +92,13 @@ public function testShouldLogCriticalAndRejectMessageIfJobIsNotRoot() $logger ->expects($this->once()) ->method('critical') - ->with('[DependentJobMessageProcessor] Expected root job but got child. id: "12345"') + ->with('[DependentJobProcessor] Expected root job but got child. id: "12345"') ; $message = new NullMessage(); $message->setBody(json_encode(['jobId' => 12345])); - $processor = new DependentJobMessageProcessor($jobStorage, $producer, $logger); + $processor = new DependentJobProcessor($jobStorage, $producer, $logger); $result = $processor->process($message, $this->createContextMock()); @@ -128,7 +128,7 @@ public function testShouldDoNothingIfDependentJobsAreMissing() $message = new NullMessage(); $message->setBody(json_encode(['jobId' => 12345])); - $processor = new DependentJobMessageProcessor($jobStorage, $producer, $logger); + $processor = new DependentJobProcessor($jobStorage, $producer, $logger); $result = $processor->process($message, $this->createContextMock()); @@ -163,13 +163,13 @@ public function testShouldLogCriticalAndRejectMessageIfDependentJobTopicIsMissin $logger ->expects($this->once()) ->method('critical') - ->with('[DependentJobMessageProcessor] Got invalid dependent job data. job: "123", dependentJob: "[]"') + ->with('[DependentJobProcessor] Got invalid dependent job data. job: "123", dependentJob: "[]"') ; $message = new NullMessage(); $message->setBody(json_encode(['jobId' => 12345])); - $processor = new DependentJobMessageProcessor($jobStorage, $producer, $logger); + $processor = new DependentJobProcessor($jobStorage, $producer, $logger); $result = $processor->process($message, $this->createContextMock()); @@ -206,14 +206,14 @@ public function testShouldLogCriticalAndRejectMessageIfDependentJobMessageIsMiss $logger ->expects($this->once()) ->method('critical') - ->with('[DependentJobMessageProcessor] Got invalid dependent job data. '. + ->with('[DependentJobProcessor] Got invalid dependent job data. '. 'job: "123", dependentJob: "{"topic":"topic-name"}"') ; $message = new NullMessage(); $message->setBody(json_encode(['jobId' => 12345])); - $processor = new DependentJobMessageProcessor($jobStorage, $producer, $logger); + $processor = new DependentJobProcessor($jobStorage, $producer, $logger); $result = $processor->process($message, $this->createContextMock()); @@ -257,7 +257,7 @@ public function testShouldPublishDependentMessage() $message = new NullMessage(); $message->setBody(json_encode(['jobId' => 12345])); - $processor = new DependentJobMessageProcessor($jobStorage, $producer, $logger); + $processor = new DependentJobProcessor($jobStorage, $producer, $logger); $result = $processor->process($message, $this->createContextMock()); @@ -305,7 +305,7 @@ public function testShouldPublishDependentMessageWithPriority() $message = new NullMessage(); $message->setBody(json_encode(['jobId' => 12345])); - $processor = new DependentJobMessageProcessor($jobStorage, $producer, $logger); + $processor = new DependentJobProcessor($jobStorage, $producer, $logger); $result = $processor->process($message, $this->createContextMock()); diff --git a/pkg/psr-queue/DeliveryMode.php b/pkg/psr-queue/DeliveryMode.php index 99507b99d..492080a4a 100644 --- a/pkg/psr-queue/DeliveryMode.php +++ b/pkg/psr-queue/DeliveryMode.php @@ -1,7 +1,7 @@ expectException(InvalidDestinationException::class); $this->expectExceptionMessage( - 'The destination must be an instance of Enqueue\Psr\Tests\Exception\DestinationBar'. - ' but got Enqueue\Psr\Tests\Exception\DestinationFoo.' + 'The destination must be an instance of Enqueue\Psr\Tests\DestinationBar'. + ' but got Enqueue\Psr\Tests\DestinationFoo.' ); InvalidDestinationException::assertDestinationInstanceOf(new DestinationFoo(), DestinationBar::class); diff --git a/pkg/psr-queue/Tests/Exception/InvalidMessageExceptionTest.php b/pkg/psr-queue/Tests/InvalidMessageExceptionTest.php similarity index 92% rename from pkg/psr-queue/Tests/Exception/InvalidMessageExceptionTest.php rename to pkg/psr-queue/Tests/InvalidMessageExceptionTest.php index 882967ebb..9e2815638 100644 --- a/pkg/psr-queue/Tests/Exception/InvalidMessageExceptionTest.php +++ b/pkg/psr-queue/Tests/InvalidMessageExceptionTest.php @@ -1,5 +1,5 @@ bind($queue, $processor); $queueConsumer->consume(); @@ -78,10 +78,10 @@ public function testConsumeOneMessageAndSendReplyExit() $replyMessage = $this->stompContext->createMessage(__METHOD__.'.reply'); - $processor = new StubMessageProcessor(); + $processor = new StubProcessor(); $processor->result = Result::reply($replyMessage); - $replyProcessor = new StubMessageProcessor(); + $replyProcessor = new StubProcessor(); $queueConsumer->bind($queue, $processor); $queueConsumer->bind($replyQueue, $replyProcessor); @@ -95,7 +95,7 @@ public function testConsumeOneMessageAndSendReplyExit() } } -class StubMessageProcessor implements MessageProcessorInterface +class StubProcessor implements Processor { public $result = Result::ACK; From 44f298973e03ceefaae9c4caffc9086e9f0f6393 Mon Sep 17 00:00:00 2001 From: Maksim Kotlyar Date: Thu, 5 Jan 2017 14:02:16 +0200 Subject: [PATCH 22/23] Update php-cs-fixer to 2.x version. --- .gitignore | 4 +++- .php_cs | 21 --------------------- .php_cs.dist | 28 ++++++++++++++++++++++++++++ bin/dev | 5 ++++- bin/pre-commit | 2 +- composer.json | 2 +- 6 files changed, 37 insertions(+), 25 deletions(-) delete mode 100644 .php_cs create mode 100644 .php_cs.dist diff --git a/.gitignore b/.gitignore index ec60c84f8..b9809c577 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,6 @@ bin/doctrine* bin/php-cs-fixer bin/phpunit bin/sql-formatter -vendor \ No newline at end of file +vendor +.php_cs +.php_cs.cache \ No newline at end of file diff --git a/.php_cs b/.php_cs deleted file mode 100644 index d3414a1f1..000000000 --- a/.php_cs +++ /dev/null @@ -1,21 +0,0 @@ -in(__DIR__) - ->notPath('vendor') -; - -return Symfony\CS\Config::create() - ->level(Symfony\CS\FixerInterface::SYMFONY_LEVEL) - ->fixers([ - 'ordered_use', - 'no_blank_lines_before_namespace', - 'short_array_syntax', - 'unused_use', - 'phpdoc_order', - - - ]) - ->finder($finder) -; - diff --git a/.php_cs.dist b/.php_cs.dist new file mode 100644 index 000000000..99a418499 --- /dev/null +++ b/.php_cs.dist @@ -0,0 +1,28 @@ +setRiskyAllowed(true) + ->setRules(array( + '@Symfony' => true, + '@Symfony:risky' => true, + 'array_syntax' => array('syntax' => 'short'), + 'combine_consecutive_unsets' => true, + // one should use PHPUnit methods to set up expected exception instead of annotations + 'general_phpdoc_annotation_remove' => array('expectedException', 'expectedExceptionMessage', 'expectedExceptionMessageRegExp'), + 'heredoc_to_nowdoc' => true, + 'no_extra_consecutive_blank_lines' => array('break', 'continue', 'extra', 'return', 'throw', 'use', 'parenthesis_brace_block', 'square_brace_block', 'curly_brace_block'), + 'no_unreachable_default_argument_value' => true, + 'no_useless_else' => true, + 'no_useless_return' => true, + 'ordered_class_elements' => true, + 'ordered_imports' => true, + 'phpdoc_add_missing_param_annotation' => true, + 'phpdoc_order' => true, + 'psr4' => true, + 'strict_param' => true, + )) + ->setFinder( + PhpCsFixer\Finder::create() + ->in(__DIR__) + ) +; \ No newline at end of file diff --git a/bin/dev b/bin/dev index dcfa42f1e..11f87e39d 100755 --- a/bin/dev +++ b/bin/dev @@ -3,7 +3,7 @@ set -x set -e -while getopts "buste" OPTION; do +while getopts "bustef" OPTION; do case $OPTION in b) COMPOSE_PROJECT_NAME=mqdev docker-compose build @@ -17,6 +17,9 @@ while getopts "buste" OPTION; do e) docker exec -it mqdev_dev_1 /bin/bash ;; + f) + ./bin/php-cs-fixer fix + ;; t) COMPOSE_PROJECT_NAME=mqdev docker-compose run --workdir="/mqdev" --rm dev ./bin/test ;; diff --git a/bin/pre-commit b/bin/pre-commit index 9ab08b441..9e32fece8 100755 --- a/bin/pre-commit +++ b/bin/pre-commit @@ -105,7 +105,7 @@ function runPhpCsFixer() $output = ''; $returnCode = null; exec(sprintf( - '%s %s fix %s --config-file=%s', + '%s %s fix %s --config=%s', $phpBin, $phpCsFixerBin, $projectRootDir.'/'.$file, diff --git a/composer.json b/composer.json index e0fe925ad..cce8a9151 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,7 @@ "symfony/monolog-bundle": "^2.8|^3", "symfony/browser-kit": "^2.8|^3", "symfony/expression-language": "^2.8|^3", - "friendsofphp/php-cs-fixer": "^1" + "friendsofphp/php-cs-fixer": "^2" }, "config": { "bin-dir": "bin" From 3f446f1a35b0f62294f4d88d6d6815084ee25800 Mon Sep 17 00:00:00 2001 From: Maksim Kotlyar Date: Thu, 5 Jan 2017 14:06:03 +0200 Subject: [PATCH 23/23] Run php-cs-fixer fix on whole project --- bin/pre-commit | 5 +- pkg/amqp-ext/AmqpConnectionFactory.php | 1 + pkg/amqp-ext/AmqpConsumer.php | 1 + pkg/amqp-ext/AmqpContext.php | 5 +- pkg/amqp-ext/AmqpMessage.php | 1 + pkg/amqp-ext/AmqpProducer.php | 1 + pkg/amqp-ext/AmqpQueue.php | 1 + pkg/amqp-ext/AmqpTopic.php | 1 + pkg/amqp-ext/Client/AmqpDriver.php | 5 +- pkg/amqp-ext/Client/RabbitMqDriver.php | 7 +- pkg/amqp-ext/Symfony/AmqpTransportFactory.php | 1 + .../Symfony/RabbitMqTransportFactory.php | 1 + pkg/amqp-ext/Tests/AmqpContextTest.php | 1 + pkg/amqp-ext/Tests/AmqpMessageTest.php | 3 +- pkg/amqp-ext/Tests/AmqpQueueTest.php | 1 + pkg/amqp-ext/Tests/AmqpTopicTest.php | 1 + pkg/amqp-ext/Tests/Client/AmqpDriverTest.php | 3 +- .../Tests/Client/RabbitMqDriverTest.php | 4 +- .../Functional/AmqpCommonUseCasesTest.php | 3 +- .../AmqpConsumptionUseCasesTest.php | 1 + .../Tests/Functional/AmqpRpcUseCasesTest.php | 1 + .../Symfony/AmqpTransportFactoryTest.php | 1 + .../Symfony/RabbitMqTransportFactoryTest.php | 1 + .../DoctrineClearIdentityMapExtension.php | 1 + .../DoctrinePingConnectionExtension.php | 1 + .../Compiler/AddTopicMetaPass.php | 1 + .../Compiler/BuildClientRoutingPass.php | 1 + .../Compiler/BuildExtensionsPass.php | 1 + .../Compiler/BuildProcessorRegistryPass.php | 1 + .../Compiler/BuildQueueMetaRegistryPass.php | 1 + .../BuildTopicMetaSubscribersPass.php | 1 + .../ExtractProcessorTagSubscriptionsTrait.php | 1 + .../DependencyInjection/Configuration.php | 1 + .../DependencyInjection/EnqueueExtension.php | 1 + pkg/enqueue-bundle/EnqueueBundle.php | 1 + pkg/enqueue-bundle/Entity/Job.php | 1 + pkg/enqueue-bundle/Entity/JobUnique.php | 1 + .../Profiler/MessageQueueCollector.php | 1 + .../Client/ConsumeMessagesCommandTest.php | 3 +- .../Tests/Functional/Client/DriverTest.php | 3 +- .../Functional/Client/MessageProducerTest.php | 3 +- .../Client/ProduceMessageCommandTest.php | 3 +- .../Functional/ConsumeMessagesCommandTest.php | 11 +-- .../Tests/Functional/ContextTest.php | 1 + .../CalculateRootJobStatusProcessorTest.php | 3 +- .../Job/DependentJobServiceTest.php | 3 +- .../Tests/Functional/Job/JobRunnerTest.php | 3 +- .../Tests/Functional/Job/JobStorageTest.php | 3 +- .../Tests/Functional/QueueConsumerTest.php | 1 + .../Tests/Functional/QueueRegistryTest.php | 1 + .../Tests/Functional/QueuesCommandTest.php | 1 + .../Tests/Functional/TestProcessor.php | 1 + .../Tests/Functional/TopicRegistryTest.php | 1 + .../Tests/Functional/TopicsCommandTest.php | 1 + .../Tests/Functional/WebTestCase.php | 1 + .../Tests/Functional/app/AmqpAppKernel.php | 11 +-- .../Tests/Functional/app/AppKernel.php | 11 +-- .../DoctrineClearIdentityMapExtensionTest.php | 1 + .../DoctrinePingConnectionExtensionTest.php | 1 + .../Compiler/AddTopicMetaPassTest.php | 3 +- .../Compiler/BuildClientRoutingPassTest.php | 1 + .../Compiler/BuildExtensionsPassTest.php | 3 +- .../BuildProcessorRegistryPassTest.php | 1 + .../BuildQueueMetaRegistryPassTest.php | 1 + .../BuildTopicMetaSubscribersPassTest.php | 1 + .../Compiler/Mock/InvalidTopicSubscriber.php | 1 + .../Mock/OnlyTopicNameTopicSubscriber.php | 1 + .../Mock/ProcessorNameTopicSubscriber.php | 1 + .../Mock/QueueNameTopicSubscriber.php | 1 + .../DependencyInjection/ConfigurationTest.php | 1 + .../EnqueueExtensionTest.php | 1 + .../Tests/Unit/EnqueueBundleTest.php | 1 + .../Tests/Unit/Mocks/FooTransportFactory.php | 1 + .../Profiler/MessageQueueCollectorTest.php | 3 +- pkg/enqueue/Client/ArrayProcessorRegistry.php | 1 + pkg/enqueue/Client/Config.php | 1 + .../DelayRedeliveredMessageExtension.php | 1 + .../SetRouterPropertiesExtension.php | 1 + .../SetupBrokerExtension.php | 1 + pkg/enqueue/Client/DelegateProcessor.php | 1 + pkg/enqueue/Client/DriverInterface.php | 1 + pkg/enqueue/Client/Message.php | 1 + pkg/enqueue/Client/MessagePriority.php | 1 + pkg/enqueue/Client/MessageProducer.php | 1 + .../Client/MessageProducerInterface.php | 3 +- pkg/enqueue/Client/Meta/QueueMeta.php | 1 + pkg/enqueue/Client/Meta/QueueMetaRegistry.php | 1 + pkg/enqueue/Client/Meta/TopicMeta.php | 1 + pkg/enqueue/Client/Meta/TopicMetaRegistry.php | 1 + pkg/enqueue/Client/NullDriver.php | 1 + .../Client/ProcessorRegistryInterface.php | 1 + pkg/enqueue/Client/RouterProcessor.php | 1 + pkg/enqueue/Client/SimpleClient.php | 1 + .../Client/TopicSubscriberInterface.php | 1 + .../Client/TraceableMessageProducer.php | 10 +-- pkg/enqueue/Consumption/CallbackProcessor.php | 1 + pkg/enqueue/Consumption/ChainExtension.php | 1 + pkg/enqueue/Consumption/Context.php | 1 + .../Consumption/EmptyExtensionTrait.php | 1 + .../ConsumptionInterruptedException.php | 1 + .../Exception/ExceptionInterface.php | 1 + .../IllegalContextModificationException.php | 1 + .../Exception/InvalidArgumentException.php | 1 + .../Consumption/Exception/LogicException.php | 1 + .../LimitConsumedMessagesExtension.php | 1 + .../LimitConsumerMemoryExtension.php | 1 + .../LimitConsumptionTimeExtension.php | 1 + .../Consumption/Extension/LoggerExtension.php | 1 + .../Consumption/Extension/ReplyExtension.php | 1 + .../Consumption/Extension/SignalExtension.php | 1 + .../Consumption/ExtensionInterface.php | 1 + pkg/enqueue/Consumption/QueueConsumer.php | 1 + pkg/enqueue/Consumption/Result.php | 17 ++--- pkg/enqueue/Router/Recipient.php | 1 + .../Router/RecipientListRouterInterface.php | 1 + .../Router/RouteRecipientListProcessor.php | 1 + pkg/enqueue/Rpc/Promise.php | 4 +- pkg/enqueue/Rpc/RpcClient.php | 1 + .../Symfony/Client/ConsumeMessagesCommand.php | 1 + .../ContainerAwareProcessorRegistry.php | 1 + .../Symfony/Client/Meta/QueuesCommand.php | 1 + .../Symfony/Client/Meta/TopicsCommand.php | 1 + .../Symfony/Client/ProduceMessageCommand.php | 1 + .../Symfony/Client/SetupBrokerCommand.php | 1 + .../SetupBrokerExtensionCommandTrait.php | 1 + .../Consumption/ConsumeMessagesCommand.php | 1 + .../ContainerAwareConsumeMessagesCommand.php | 1 + .../LimitsExtensionsCommandTrait.php | 1 + .../Symfony/DefaultTransportFactory.php | 1 + pkg/enqueue/Symfony/NullTransportFactory.php | 1 + .../Symfony/TransportFactoryInterface.php | 1 + .../Client/ArrayProcessorRegistryTest.php | 1 + pkg/enqueue/Tests/Client/ConfigTest.php | 1 + .../DelayRedeliveredMessageExtensionTest.php | 1 + .../SetRouterPropertiesExtensionTest.php | 3 +- .../SetupBrokerExtensionTest.php | 3 +- .../Tests/Client/DelegateProcessorTest.php | 1 + .../Tests/Client/MessagePriorityTest.php | 1 + .../Tests/Client/MessageProducerTest.php | 1 + pkg/enqueue/Tests/Client/MessageTest.php | 1 + .../Client/Meta/QueueMetaRegistryTest.php | 1 + .../Tests/Client/Meta/QueueMetaTest.php | 1 + .../Client/Meta/TopicMetaRegistryTest.php | 1 + .../Tests/Client/Meta/TopicMetaTest.php | 1 + pkg/enqueue/Tests/Client/NullDriverTest.php | 1 + .../Tests/Client/RouterProcessorTest.php | 1 + .../Client/TraceableMessageProducerTest.php | 1 + .../Consumption/CallbackProcessorTest.php | 1 + pkg/enqueue/Tests/Consumption/ContextTest.php | 1 + .../ConsumptionInterruptedExceptionTest.php | 1 + ...llegalContextModificationExceptionTest.php | 1 + .../InvalidArgumentExceptionTest.php | 1 + .../Exception/LogicExceptionTest.php | 1 + .../LimitConsumedMessagesExtensionTest.php | 1 + .../LimitConsumerMemoryExtensionTest.php | 1 + .../LimitConsumptionTimeExtensionTest.php | 1 + .../Extension/LoggerExtensionTest.php | 1 + .../Extension/ReplyExtensionTest.php | 1 + .../Tests/Consumption/ExtensionsTest.php | 1 + .../Consumption/Mock/BreakCycleExtension.php | 1 + .../Tests/Consumption/QueueConsumerTest.php | 3 + pkg/enqueue/Tests/Consumption/ResultTest.php | 1 + .../Functional/Client/SimpleClientTest.php | 1 + pkg/enqueue/Tests/Router/RecipientTest.php | 1 + .../RouteRecipientListProcessorTest.php | 1 + pkg/enqueue/Tests/Rpc/PromiseTest.php | 1 + pkg/enqueue/Tests/Rpc/RpcClientTest.php | 1 + .../Client/ConsumeMessagesCommandTest.php | 1 + .../ContainerAwareProcessorRegistryTest.php | 1 + .../Symfony/Client/Meta/QueuesCommandTest.php | 2 + .../Symfony/Client/Meta/TopicsCommandTest.php | 1 + .../Mock/SetupBrokerExtensionCommand.php | 11 +-- .../Client/ProduceMessageCommandTest.php | 1 + .../Symfony/Client/SetupBrokerCommandTest.php | 1 + .../SetupBrokerExtensionCommandTraitTest.php | 1 + .../ConsumeMessagesCommandTest.php | 3 +- ...ntainerAwareConsumeMessagesCommandTest.php | 1 + .../LimitsExtensionsCommandTraitTest.php | 1 + .../Mock/LimitsExtensionsCommand.php | 11 +-- .../Symfony/DefaultTransportFactoryTest.php | 1 + .../Symfony/NullTransportFactoryTest.php | 1 + .../Null/NullConnectionFactoryTest.php | 1 + .../Tests/Transport/Null/NullConsumerTest.php | 1 + .../Tests/Transport/Null/NullContextTest.php | 3 +- .../Tests/Transport/Null/NullMessageTest.php | 3 +- .../Tests/Transport/Null/NullProducerTest.php | 1 + .../Tests/Transport/Null/NullQueueTest.php | 1 + .../Tests/Transport/Null/NullTopicTest.php | 1 + .../Util/Fixtures/JsonSerializableClass.php | 1 + .../Tests/Util/Fixtures/SimpleClass.php | 3 +- pkg/enqueue/Tests/Util/JSONTest.php | 2 + pkg/enqueue/Tests/Util/UUIDTest.php | 1 + pkg/enqueue/Tests/Util/VarExportTest.php | 3 + .../Transport/Null/NullConnectionFactory.php | 1 + pkg/enqueue/Transport/Null/NullConsumer.php | 1 + pkg/enqueue/Transport/Null/NullContext.php | 1 + pkg/enqueue/Transport/Null/NullMessage.php | 1 + pkg/enqueue/Transport/Null/NullProducer.php | 1 + pkg/enqueue/Transport/Null/NullQueue.php | 1 + pkg/enqueue/Transport/Null/NullTopic.php | 1 + pkg/enqueue/Util/JSON.php | 1 + pkg/enqueue/Util/UUID.php | 5 +- pkg/enqueue/Util/VarExport.php | 1 + .../CalculateRootJobStatusProcessor.php | 1 + .../CalculateRootJobStatusService.php | 7 +- pkg/job-queue/DependentJobContext.php | 1 + pkg/job-queue/DependentJobProcessor.php | 1 + pkg/job-queue/DependentJobService.php | 1 + pkg/job-queue/DuplicateJobException.php | 1 + pkg/job-queue/Job.php | 1 + pkg/job-queue/JobProcessor.php | 3 +- pkg/job-queue/JobRunner.php | 1 + pkg/job-queue/JobStorage.php | 1 + pkg/job-queue/Schema.php | 1 + .../Test/DbalPersistedConnection.php | 69 ++++++++++--------- pkg/job-queue/Test/JobRunner.php | 1 + .../CalculateRootJobStatusProcessorTest.php | 1 + .../CalculateRootJobStatusServiceTest.php | 3 + .../Tests/DependentJobContextTest.php | 1 + .../Tests/DependentJobProcessorTest.php | 1 + .../Tests/DependentJobServiceTest.php | 1 + pkg/job-queue/Tests/Functional/Entity/Job.php | 1 + .../Tests/Functional/Entity/JobUnique.php | 1 + .../Tests/Functional/Job/JobStorageTest.php | 1 + .../Tests/Functional/WebTestCase.php | 1 + .../Tests/Functional/app/AppKernel.php | 10 +-- pkg/job-queue/Tests/JobProcessorTest.php | 3 +- pkg/job-queue/Tests/JobRunnerTest.php | 1 + pkg/job-queue/Tests/JobStorageTest.php | 1 + pkg/job-queue/Topics.php | 1 + pkg/psr-queue/ConnectionFactory.php | 1 + pkg/psr-queue/Consumer.php | 3 +- pkg/psr-queue/Context.php | 1 + pkg/psr-queue/DeliveryMode.php | 1 + pkg/psr-queue/Destination.php | 3 +- pkg/psr-queue/Exception.php | 3 +- pkg/psr-queue/ExceptionInterface.php | 1 + .../InvalidDeliveryModeException.php | 1 + pkg/psr-queue/InvalidDestinationException.php | 1 + pkg/psr-queue/InvalidMessageException.php | 1 + pkg/psr-queue/Message.php | 3 +- pkg/psr-queue/Processor.php | 1 + pkg/psr-queue/Producer.php | 1 + pkg/psr-queue/Queue.php | 3 +- pkg/psr-queue/Tests/ExceptionTest.php | 1 + .../InvalidDeliveryModeExceptionTest.php | 1 + .../Tests/InvalidDestinationExceptionTest.php | 1 + .../Tests/InvalidMessageExceptionTest.php | 1 + pkg/psr-queue/Topic.php | 3 +- pkg/stomp/BufferedStompClient.php | 1 + pkg/stomp/Client/ManagementClient.php | 1 + pkg/stomp/Client/RabbitMqStompDriver.php | 3 +- pkg/stomp/Client/StompDriver.php | 3 +- pkg/stomp/StompConnectionFactory.php | 1 + pkg/stomp/StompConsumer.php | 3 +- pkg/stomp/StompContext.php | 1 + pkg/stomp/StompDestination.php | 3 +- pkg/stomp/StompHeadersEncoder.php | 53 +++++++------- pkg/stomp/StompMessage.php | 1 + pkg/stomp/StompProducer.php | 1 + .../Symfony/RabbitMqStompTransportFactory.php | 1 + pkg/stomp/Symfony/StompTransportFactory.php | 3 +- pkg/stomp/Tests/BufferedStompClientTest.php | 3 +- .../Tests/Client/ManagementClientTest.php | 1 + .../Tests/Client/RabbitMqStompDriverTest.php | 3 +- pkg/stomp/Tests/Client/StompDriverTest.php | 3 +- .../Functional/StompCommonUseCasesTest.php | 5 +- .../StompConsumptionUseCasesTest.php | 1 + .../Tests/Functional/StompRpcUseCasesTest.php | 5 +- pkg/stomp/Tests/StompConsumerTest.php | 3 +- pkg/stomp/Tests/StompContextTest.php | 3 +- pkg/stomp/Tests/StompDestinationTest.php | 3 +- pkg/stomp/Tests/StompHeadersEncoderTest.php | 9 +++ pkg/stomp/Tests/StompMessageTest.php | 3 +- pkg/stomp/Tests/StompProducerTest.php | 3 +- .../RabbitMqStompTransportFactoryTest.php | 5 +- .../Symfony/StompTransportFactoryTest.php | 5 +- pkg/test/ClassExtensionTrait.php | 1 + pkg/test/RabbitmqAmqpExtension.php | 1 + pkg/test/RabbitmqManagmentExtensionTrait.php | 5 +- pkg/test/RabbitmqStompExtension.php | 1 + pkg/test/WriteAttributeTrait.php | 1 + 282 files changed, 466 insertions(+), 174 deletions(-) diff --git a/bin/pre-commit b/bin/pre-commit index 9e32fece8..4537cf91a 100755 --- a/bin/pre-commit +++ b/bin/pre-commit @@ -105,11 +105,10 @@ function runPhpCsFixer() $output = ''; $returnCode = null; exec(sprintf( - '%s %s fix %s --config=%s', + '%s %s fix %s', $phpBin, $phpCsFixerBin, - $projectRootDir.'/'.$file, - $projectRootDir.'/.php_cs' + $projectRootDir.'/'.$file ), $output, $returnCode); if ($returnCode) { diff --git a/pkg/amqp-ext/AmqpConnectionFactory.php b/pkg/amqp-ext/AmqpConnectionFactory.php index dfe36a35f..ab46fe0f0 100644 --- a/pkg/amqp-ext/AmqpConnectionFactory.php +++ b/pkg/amqp-ext/AmqpConnectionFactory.php @@ -1,4 +1,5 @@ bind($destination, $queue); return new AmqpConsumer($this, $queue); - } else { - return new AmqpConsumer($this, $destination); } + + return new AmqpConsumer($this, $destination); } public function close() diff --git a/pkg/amqp-ext/AmqpMessage.php b/pkg/amqp-ext/AmqpMessage.php index 044c4f19e..d5992237b 100644 --- a/pkg/amqp-ext/AmqpMessage.php +++ b/pkg/amqp-ext/AmqpMessage.php @@ -1,4 +1,5 @@ assertSame(null, $message->getBody()); + $this->assertNull($message->getBody()); $this->assertSame([], $message->getProperties()); $this->assertSame([], $message->getHeaders()); } diff --git a/pkg/amqp-ext/Tests/AmqpQueueTest.php b/pkg/amqp-ext/Tests/AmqpQueueTest.php index 9381c1def..56e234764 100644 --- a/pkg/amqp-ext/Tests/AmqpQueueTest.php +++ b/pkg/amqp-ext/Tests/AmqpQueueTest.php @@ -1,4 +1,5 @@ true]); - $meta = new QueueMetaRegistry($config, ['default' => []]); $driver = new RabbitMqDriver($context, $config, $meta); diff --git a/pkg/amqp-ext/Tests/Functional/AmqpCommonUseCasesTest.php b/pkg/amqp-ext/Tests/Functional/AmqpCommonUseCasesTest.php index 45a884231..be0ef4fef 100644 --- a/pkg/amqp-ext/Tests/Functional/AmqpCommonUseCasesTest.php +++ b/pkg/amqp-ext/Tests/Functional/AmqpCommonUseCasesTest.php @@ -1,4 +1,5 @@ amqpContext->createConsumer($topic); //guard - $this->assertSame(null, $consumer->receive(1)); + $this->assertNull($consumer->receive(1)); $message = $this->amqpContext->createMessage(__METHOD__); diff --git a/pkg/amqp-ext/Tests/Functional/AmqpConsumptionUseCasesTest.php b/pkg/amqp-ext/Tests/Functional/AmqpConsumptionUseCasesTest.php index 66705ae7f..76abbfce9 100644 --- a/pkg/amqp-ext/Tests/Functional/AmqpConsumptionUseCasesTest.php +++ b/pkg/amqp-ext/Tests/Functional/AmqpConsumptionUseCasesTest.php @@ -1,4 +1,5 @@ assertEquals('test message body', $processor->message->getBody()); } - private function getMessageProducer() - { - return $this->container->get('enqueue.client.message_producer'); - } - /** * @return string */ @@ -101,4 +97,9 @@ public static function getKernelClass() return AmqpAppKernel::class; } + + private function getMessageProducer() + { + return $this->container->get('enqueue.client.message_producer'); + } } diff --git a/pkg/enqueue-bundle/Tests/Functional/ContextTest.php b/pkg/enqueue-bundle/Tests/Functional/ContextTest.php index 557005797..f11a9b17a 100644 --- a/pkg/enqueue-bundle/Tests/Functional/ContextTest.php +++ b/pkg/enqueue-bundle/Tests/Functional/ContextTest.php @@ -1,4 +1,5 @@ load(__DIR__.'/config/amqp-config.yml'); } + + protected function getContainerClass() + { + return parent::getContainerClass().'BundleAmqp'; + } } diff --git a/pkg/enqueue-bundle/Tests/Functional/app/AppKernel.php b/pkg/enqueue-bundle/Tests/Functional/app/AppKernel.php index 9c84fd9ee..e2ed065a3 100644 --- a/pkg/enqueue-bundle/Tests/Functional/app/AppKernel.php +++ b/pkg/enqueue-bundle/Tests/Functional/app/AppKernel.php @@ -1,4 +1,5 @@ load(__DIR__.'/config/config.yml'); } + + protected function getContainerClass() + { + return parent::getContainerClass().'BundleDefault'; + } } diff --git a/pkg/enqueue-bundle/Tests/Unit/Consumption/Extension/DoctrineClearIdentityMapExtensionTest.php b/pkg/enqueue-bundle/Tests/Unit/Consumption/Extension/DoctrineClearIdentityMapExtensionTest.php index c9b0c8901..7bf9eaa36 100644 --- a/pkg/enqueue-bundle/Tests/Unit/Consumption/Extension/DoctrineClearIdentityMapExtensionTest.php +++ b/pkg/enqueue-bundle/Tests/Unit/Consumption/Extension/DoctrineClearIdentityMapExtensionTest.php @@ -1,4 +1,5 @@ reason = (string) $reason; } + /** + * @return string + */ + public function __toString() + { + return $this->status; + } + /** * @return string */ @@ -78,14 +87,6 @@ public function setReply(PsrMessage $reply = null) $this->reply = $reply; } - /** - * @return string - */ - public function __toString() - { - return $this->status; - } - /** * @param string $reason * diff --git a/pkg/enqueue/Router/Recipient.php b/pkg/enqueue/Router/Recipient.php index 94083a2b0..892c0e511 100644 --- a/pkg/enqueue/Router/Recipient.php +++ b/pkg/enqueue/Router/Recipient.php @@ -1,4 +1,5 @@ consumer->acknowledge($message); return $message; - } else { - $this->consumer->reject($message, true); } + $this->consumer->reject($message, true); } } diff --git a/pkg/enqueue/Rpc/RpcClient.php b/pkg/enqueue/Rpc/RpcClient.php index e8b4b6268..fad0bcd69 100644 --- a/pkg/enqueue/Rpc/RpcClient.php +++ b/pkg/enqueue/Rpc/RpcClient.php @@ -1,4 +1,5 @@ extension; + } + protected function configure() { parent::configure(); @@ -26,9 +32,4 @@ protected function execute(InputInterface $input, OutputInterface $output) { $this->extension = $this->getSetupBrokerExtension($input, new NullDriver(new NullContext(), Config::create())); } - - public function getExtension() - { - return $this->extension; - } } diff --git a/pkg/enqueue/Tests/Symfony/Client/ProduceMessageCommandTest.php b/pkg/enqueue/Tests/Symfony/Client/ProduceMessageCommandTest.php index cd3bed816..6cbfbfc1d 100644 --- a/pkg/enqueue/Tests/Symfony/Client/ProduceMessageCommandTest.php +++ b/pkg/enqueue/Tests/Symfony/Client/ProduceMessageCommandTest.php @@ -1,4 +1,5 @@ extensions; + } + protected function configure() { parent::configure(); @@ -23,9 +29,4 @@ protected function execute(InputInterface $input, OutputInterface $output) { $this->extensions = $this->getLimitsExtensions($input, $output); } - - public function getExtensions() - { - return $this->extensions; - } } diff --git a/pkg/enqueue/Tests/Symfony/DefaultTransportFactoryTest.php b/pkg/enqueue/Tests/Symfony/DefaultTransportFactoryTest.php index 3fbc5c59a..917ad5d2b 100644 --- a/pkg/enqueue/Tests/Symfony/DefaultTransportFactoryTest.php +++ b/pkg/enqueue/Tests/Symfony/DefaultTransportFactoryTest.php @@ -1,4 +1,5 @@ assertInstanceOf(NullMessage::class, $message); - $this->assertSame(null, $message->getBody()); + $this->assertNull($message->getBody()); $this->assertSame([], $message->getHeaders()); $this->assertSame([], $message->getProperties()); } diff --git a/pkg/enqueue/Tests/Transport/Null/NullMessageTest.php b/pkg/enqueue/Tests/Transport/Null/NullMessageTest.php index d8d2569bc..ddf9cd2d5 100644 --- a/pkg/enqueue/Tests/Transport/Null/NullMessageTest.php +++ b/pkg/enqueue/Tests/Transport/Null/NullMessageTest.php @@ -1,4 +1,5 @@ assertSame(null, $message->getBody()); + $this->assertNull($message->getBody()); } public function testShouldNewMessageReturnEmptyProperties() diff --git a/pkg/enqueue/Tests/Transport/Null/NullProducerTest.php b/pkg/enqueue/Tests/Transport/Null/NullProducerTest.php index 39c05898f..1e90bf349 100644 --- a/pkg/enqueue/Tests/Transport/Null/NullProducerTest.php +++ b/pkg/enqueue/Tests/Transport/Null/NullProducerTest.php @@ -1,4 +1,5 @@ toString(); - } else { - return RhumsaaUuid::uuid4()->toString(); } + + return RhumsaaUuid::uuid4()->toString(); } } diff --git a/pkg/enqueue/Util/VarExport.php b/pkg/enqueue/Util/VarExport.php index 897c664f3..4a48afadd 100644 --- a/pkg/enqueue/Util/VarExport.php +++ b/pkg/enqueue/Util/VarExport.php @@ -1,4 +1,5 @@ isRoot() ? $job : $job->getRootJob(); $stopStatuses = [Job::STATUS_SUCCESS, Job::STATUS_FAILED, Job::STATUS_CANCELLED]; - if (in_array($rootJob->getStatus(), $stopStatuses)) { + if (in_array($rootJob->getStatus(), $stopStatuses, true)) { return; } $rootStopped = false; $this->jobStorage->saveJob($rootJob, function (Job $rootJob) use ($stopStatuses, &$rootStopped) { - if (in_array($rootJob->getStatus(), $stopStatuses)) { + if (in_array($rootJob->getStatus(), $stopStatuses, true)) { return; } @@ -47,7 +48,7 @@ public function calculate(Job $job) $rootJob->setStatus($status); - if (in_array($status, $stopStatuses)) { + if (in_array($status, $stopStatuses, true)) { $rootStopped = true; if (!$rootJob->getStoppedAt()) { $rootJob->setStoppedAt(new \DateTime()); diff --git a/pkg/job-queue/DependentJobContext.php b/pkg/job-queue/DependentJobContext.php index 6393eed5f..34deba656 100644 --- a/pkg/job-queue/DependentJobContext.php +++ b/pkg/job-queue/DependentJobContext.php @@ -1,4 +1,5 @@ jobStorage->findJobById($job->getId()); - if (!in_array($job->getStatus(), [Job::STATUS_NEW, Job::STATUS_RUNNING])) { + if (!in_array($job->getStatus(), [Job::STATUS_NEW, Job::STATUS_RUNNING], true)) { throw new \LogicException(sprintf( 'Can cancel only new or running jobs. id: "%s", status: "%s"', $job->getId(), diff --git a/pkg/job-queue/JobRunner.php b/pkg/job-queue/JobRunner.php index c0adb97b0..bfca429a6 100644 --- a/pkg/job-queue/JobRunner.php +++ b/pkg/job-queue/JobRunner.php @@ -1,4 +1,5 @@ wrapTransactionNestingLevel('rollBack'); } - /** - * @param int $level - */ - private function setTransactionNestingLevel($level) - { - $prop = new \ReflectionProperty('Doctrine\DBAL\Connection', '_transactionNestingLevel'); - $prop->setAccessible(true); - - return $prop->setValue($this, $level); - } - - /** - * @param string $method - * - * @throws \Exception - */ - private function wrapTransactionNestingLevel($method) - { - $e = null; - - $this->setTransactionNestingLevel($this->getPersistedTransactionNestingLevel()); - - try { - call_user_func(['parent', $method]); - } catch (\Exception $e) { - } - - $this->persistTransactionNestingLevel($this->getTransactionNestingLevel()); - - if ($e) { - throw $e; - } - } - /** * @param bool $connected */ @@ -161,4 +128,38 @@ protected function getConnectionId() { return md5(serialize($this->getParams())); } + + /** + * @param int $level + */ + private function setTransactionNestingLevel($level) + { + $prop = new \ReflectionProperty('Doctrine\DBAL\Connection', '_transactionNestingLevel'); + $prop->setAccessible(true); + + return $prop->setValue($this, $level); + } + + /** + * @param string $method + * + * @throws \Exception + */ + private function wrapTransactionNestingLevel($method) + { + $e = null; + + $this->setTransactionNestingLevel($this->getPersistedTransactionNestingLevel()); + + try { + call_user_func(['parent', $method]); + } catch (\Exception $e) { + } + + $this->persistTransactionNestingLevel($this->getTransactionNestingLevel()); + + if ($e) { + throw $e; + } + } } diff --git a/pkg/job-queue/Test/JobRunner.php b/pkg/job-queue/Test/JobRunner.php index fe2d3cb77..62d9f9a52 100644 --- a/pkg/job-queue/Test/JobRunner.php +++ b/pkg/job-queue/Test/JobRunner.php @@ -1,4 +1,5 @@ load(__DIR__.'/config/config.yml'); } + + protected function getContainerClass() + { + return parent::getContainerClass().'JobQueue'; + } } diff --git a/pkg/job-queue/Tests/JobProcessorTest.php b/pkg/job-queue/Tests/JobProcessorTest.php index 85c7f06f8..31ce0a7d8 100644 --- a/pkg/job-queue/Tests/JobProcessorTest.php +++ b/pkg/job-queue/Tests/JobProcessorTest.php @@ -1,12 +1,13 @@ $value) { + if (0 === strpos($key, self::PROPERTY_PREFIX)) { + $encodedProperties[substr($key, $prefixLength)] = $value; + } else { + $encodedHeaders[$key] = $value; + } + } + + $decodedHeaders = self::doDecode($encodedHeaders); + $decodedProperties = self::doDecode($encodedProperties); + + return [$decodedHeaders, $decodedProperties]; + } + /** * @param array $headers * @@ -72,32 +99,6 @@ private static function doEncode($headers = []) return $encoded; } - /** - * @param array $headers - * - * @return array [[headers], [properties]] - */ - public static function decode(array $headers = []) - { - $encodedHeaders = []; - $encodedProperties = []; - $prefixLength = strlen(self::PROPERTY_PREFIX); - - // separate headers/properties - foreach ($headers as $key => $value) { - if (0 === strpos($key, self::PROPERTY_PREFIX)) { - $encodedProperties[substr($key, $prefixLength)] = $value; - } else { - $encodedHeaders[$key] = $value; - } - } - - $decodedHeaders = self::doDecode($encodedHeaders); - $decodedProperties = self::doDecode($encodedProperties); - - return [$decodedHeaders, $decodedProperties]; - } - /** * @param array $headers * diff --git a/pkg/stomp/StompMessage.php b/pkg/stomp/StompMessage.php index 5eb1c0843..ed90f6317 100644 --- a/pkg/stomp/StompMessage.php +++ b/pkg/stomp/StompMessage.php @@ -1,4 +1,5 @@