From b5e04a4cb3312a24687d626d72348275fbb81645 Mon Sep 17 00:00:00 2001 From: jessicamack Date: Wed, 4 Jan 2023 13:54:53 -0500 Subject: [PATCH 01/52] AWX code changes for rsyslog decoupling (#13222) * add management command and logging for new daemon * switch tasks over to calling pg_notify * add daemon to docker-compose and supervisor * renamed handle_setting_changes and moved notify call * removed initial rsyslog configure from dispatcher * add logging and clear cache before reconfigure * add notify to delete * moved pg_notify to own function * update tests impacted by rsyslog change * changed over to new pg_notify method Signed-off-by: Jessica Mack --- Makefile | 6 +++ awx/conf/tests/functional/test_api.py | 18 ++++----- awx/conf/views.py | 13 +++++-- .../commands/run_rsyslog_configurer.py | 38 +++++++++++++++++++ awx/main/tasks/system.py | 9 +---- .../tests/functional/api/test_settings.py | 8 +++- awx/main/utils/external_logging.py | 6 +++ awx/settings/defaults.py | 2 + tools/docker-compose/supervisor.conf | 10 +++++ 9 files changed, 86 insertions(+), 24 deletions(-) create mode 100644 awx/main/management/commands/run_rsyslog_configurer.py diff --git a/Makefile b/Makefile index 2c9798b8a7..5165ad577b 100644 --- a/Makefile +++ b/Makefile @@ -238,6 +238,12 @@ receiver: fi; \ $(PYTHON) manage.py run_callback_receiver +rsyslog-configurer: + @if [ "$(VENV_BASE)" ]; then \ + . $(VENV_BASE)/awx/bin/activate; \ + fi; \ + $(PYTHON) manage.py run_rsyslog_configurer + nginx: nginx -g "daemon off;" diff --git a/awx/conf/tests/functional/test_api.py b/awx/conf/tests/functional/test_api.py index 2d09423386..b600c3766d 100644 --- a/awx/conf/tests/functional/test_api.py +++ b/awx/conf/tests/functional/test_api.py @@ -94,9 +94,7 @@ def test_setting_singleton_retrieve_readonly(api_request, dummy_setting): @pytest.mark.django_db def test_setting_singleton_update(api_request, dummy_setting): - with dummy_setting('FOO_BAR', field_class=fields.IntegerField, category='FooBar', category_slug='foobar'), mock.patch( - 'awx.conf.views.handle_setting_changes' - ): + with dummy_setting('FOO_BAR', field_class=fields.IntegerField, category='FooBar', category_slug='foobar'), mock.patch('awx.conf.views.clear_setting_cache'): api_request('patch', reverse('api:setting_singleton_detail', kwargs={'category_slug': 'foobar'}), data={'FOO_BAR': 3}) response = api_request('get', reverse('api:setting_singleton_detail', kwargs={'category_slug': 'foobar'})) assert response.data['FOO_BAR'] == 3 @@ -112,7 +110,7 @@ def test_setting_singleton_update_hybriddictfield_with_forbidden(api_request, du # sure that the _Forbidden validator doesn't get used for the # fields. See also https://github.com/ansible/awx/issues/4099. with dummy_setting('FOO_BAR', field_class=sso_fields.SAMLOrgAttrField, category='FooBar', category_slug='foobar'), mock.patch( - 'awx.conf.views.handle_setting_changes' + 'awx.conf.views.clear_setting_cache' ): api_request( 'patch', @@ -126,7 +124,7 @@ def test_setting_singleton_update_hybriddictfield_with_forbidden(api_request, du @pytest.mark.django_db def test_setting_singleton_update_dont_change_readonly_fields(api_request, dummy_setting): with dummy_setting('FOO_BAR', field_class=fields.IntegerField, read_only=True, default=4, category='FooBar', category_slug='foobar'), mock.patch( - 'awx.conf.views.handle_setting_changes' + 'awx.conf.views.clear_setting_cache' ): api_request('patch', reverse('api:setting_singleton_detail', kwargs={'category_slug': 'foobar'}), data={'FOO_BAR': 5}) response = api_request('get', reverse('api:setting_singleton_detail', kwargs={'category_slug': 'foobar'})) @@ -136,7 +134,7 @@ def test_setting_singleton_update_dont_change_readonly_fields(api_request, dummy @pytest.mark.django_db def test_setting_singleton_update_dont_change_encrypted_mark(api_request, dummy_setting): with dummy_setting('FOO_BAR', field_class=fields.CharField, encrypted=True, category='FooBar', category_slug='foobar'), mock.patch( - 'awx.conf.views.handle_setting_changes' + 'awx.conf.views.clear_setting_cache' ): api_request('patch', reverse('api:setting_singleton_detail', kwargs={'category_slug': 'foobar'}), data={'FOO_BAR': 'password'}) assert Setting.objects.get(key='FOO_BAR').value.startswith('$encrypted$') @@ -155,16 +153,14 @@ def test_setting_singleton_update_runs_custom_validate(api_request, dummy_settin with dummy_setting('FOO_BAR', field_class=fields.IntegerField, category='FooBar', category_slug='foobar'), dummy_validate( 'foobar', func_raising_exception - ), mock.patch('awx.conf.views.handle_setting_changes'): + ), mock.patch('awx.conf.views.clear_setting_cache'): response = api_request('patch', reverse('api:setting_singleton_detail', kwargs={'category_slug': 'foobar'}), data={'FOO_BAR': 23}) assert response.status_code == 400 @pytest.mark.django_db def test_setting_singleton_delete(api_request, dummy_setting): - with dummy_setting('FOO_BAR', field_class=fields.IntegerField, category='FooBar', category_slug='foobar'), mock.patch( - 'awx.conf.views.handle_setting_changes' - ): + with dummy_setting('FOO_BAR', field_class=fields.IntegerField, category='FooBar', category_slug='foobar'), mock.patch('awx.conf.views.clear_setting_cache'): api_request('delete', reverse('api:setting_singleton_detail', kwargs={'category_slug': 'foobar'})) response = api_request('get', reverse('api:setting_singleton_detail', kwargs={'category_slug': 'foobar'})) assert not response.data['FOO_BAR'] @@ -173,7 +169,7 @@ def test_setting_singleton_delete(api_request, dummy_setting): @pytest.mark.django_db def test_setting_singleton_delete_no_read_only_fields(api_request, dummy_setting): with dummy_setting('FOO_BAR', field_class=fields.IntegerField, read_only=True, default=23, category='FooBar', category_slug='foobar'), mock.patch( - 'awx.conf.views.handle_setting_changes' + 'awx.conf.views.clear_setting_cache' ): api_request('delete', reverse('api:setting_singleton_detail', kwargs={'category_slug': 'foobar'})) response = api_request('get', reverse('api:setting_singleton_detail', kwargs={'category_slug': 'foobar'})) diff --git a/awx/conf/views.py b/awx/conf/views.py index 5231cd86bd..e4a8375122 100644 --- a/awx/conf/views.py +++ b/awx/conf/views.py @@ -26,10 +26,11 @@ from awx.api.generics import APIView, GenericAPIView, ListAPIView, RetrieveUpdat from awx.api.permissions import IsSystemAdminOrAuditor from awx.api.versioning import reverse from awx.main.utils import camelcase_to_underscore -from awx.main.tasks.system import handle_setting_changes +from awx.main.tasks.system import clear_setting_cache from awx.conf.models import Setting from awx.conf.serializers import SettingCategorySerializer, SettingSingletonSerializer from awx.conf import settings_registry +from awx.main.utils.external_logging import send_pg_notify SettingCategory = collections.namedtuple('SettingCategory', ('url', 'slug', 'name')) @@ -118,7 +119,10 @@ class SettingSingletonDetail(RetrieveUpdateDestroyAPIView): setting.save(update_fields=['value']) settings_change_list.append(key) if settings_change_list: - connection.on_commit(lambda: handle_setting_changes.delay(settings_change_list)) + connection.on_commit(lambda: clear_setting_cache.delay(settings_change_list)) + if any([setting.startswith('LOG_AGGREGATOR') for setting in settings_change_list]): + # call notify to rsyslog. no data is need so payload is empty + send_pg_notify('rsyslog_configurer', "") def destroy(self, request, *args, **kwargs): instance = self.get_object() @@ -133,7 +137,10 @@ class SettingSingletonDetail(RetrieveUpdateDestroyAPIView): setting.delete() settings_change_list.append(setting.key) if settings_change_list: - connection.on_commit(lambda: handle_setting_changes.delay(settings_change_list)) + connection.on_commit(lambda: clear_setting_cache.delay(settings_change_list)) + if any([setting.startswith('LOG_AGGREGATOR') for setting in settings_change_list]): + # call notify to rsyslog. no data is need so payload is empty + send_pg_notify('rsyslog_configurer', "") # When TOWER_URL_BASE is deleted from the API, reset it to the hostname # used to make the request as a default. diff --git a/awx/main/management/commands/run_rsyslog_configurer.py b/awx/main/management/commands/run_rsyslog_configurer.py new file mode 100644 index 0000000000..5cc214ced9 --- /dev/null +++ b/awx/main/management/commands/run_rsyslog_configurer.py @@ -0,0 +1,38 @@ +import logging + +from django.core.management.base import BaseCommand +from django.conf import settings +from django.core.cache import cache +from awx.main.dispatch import pg_bus_conn +from awx.main.utils.external_logging import reconfigure_rsyslog + +logger = logging.getLogger('awx.main.rsyslog_configurer') + + +class Command(BaseCommand): + """ + Rsyslog Configurer + Runs as a management command and starts rsyslog configurer daemon. Daemon listens + for pg_notify then calls reconfigure_rsyslog + """ + + help = 'Launch the rsyslog_configurer daemon' + + def handle(self, *arg, **options): + try: + with pg_bus_conn(new_connection=True) as conn: + conn.listen("rsyslog_configurer") + # reconfigure rsyslog on start up + reconfigure_rsyslog() + for e in conn.events(yield_timeouts=True): + if e is not None: + logger.info("Change in logging settings found. Restarting rsyslogd") + # clear the cache of relevant settings then restart + setting_keys = [k for k in dir(settings) if k.startswith('LOG_AGGREGATOR')] + cache.delete_many(setting_keys) + settings._awx_conf_memoizedcache.clear() + reconfigure_rsyslog() + except Exception: + # Log unanticipated exception in addition to writing to stderr to get timestamps and other metadata + logger.exception('Encountered unhandled error in rsyslog_configurer main loop') + raise diff --git a/awx/main/tasks/system.py b/awx/main/tasks/system.py index ddff6b4ec4..ac0e0c32bf 100644 --- a/awx/main/tasks/system.py +++ b/awx/main/tasks/system.py @@ -59,7 +59,6 @@ from awx.main.utils.common import ( ScheduleTaskManager, ) -from awx.main.utils.external_logging import reconfigure_rsyslog from awx.main.utils.reload import stop_local_services from awx.main.utils.pglock import advisory_lock from awx.main.tasks.receptor import get_receptor_ctl, worker_info, worker_cleanup, administrative_workunit_reaper, write_receptor_config @@ -115,9 +114,6 @@ def dispatch_startup(): m = Metrics() m.reset_values() - # Update Tower's rsyslog.conf file based on loggins settings in the db - reconfigure_rsyslog() - def inform_cluster_of_shutdown(): try: @@ -245,7 +241,7 @@ def apply_cluster_membership_policies(): @task(queue='tower_broadcast_all') -def handle_setting_changes(setting_keys): +def clear_setting_cache(setting_keys): orig_len = len(setting_keys) for i in range(orig_len): for dependent_key in settings_registry.get_dependent_settings(setting_keys[i]): @@ -254,9 +250,6 @@ def handle_setting_changes(setting_keys): logger.debug('cache delete_many(%r)', cache_keys) cache.delete_many(cache_keys) - if any([setting.startswith('LOG_AGGREGATOR') for setting in setting_keys]): - reconfigure_rsyslog() - @task(queue='tower_broadcast_all') def delete_project_files(project_path): diff --git a/awx/main/tests/functional/api/test_settings.py b/awx/main/tests/functional/api/test_settings.py index a1ae7398a5..bcfa499af3 100644 --- a/awx/main/tests/functional/api/test_settings.py +++ b/awx/main/tests/functional/api/test_settings.py @@ -279,7 +279,7 @@ def test_logging_aggregator_missing_settings(put, post, admin, key, value, error ], ) @pytest.mark.django_db -def test_logging_aggregator_valid_settings(put, post, admin, type, host, port, username, password): +def test_logging_aggregator_valid_settings(put, post, admin, type, host, port, username, password, mocker): _, mock_settings = _mock_logging_defaults() # type = 'splunk' # host = 'https://yoursplunk:8088/services/collector/event' @@ -292,6 +292,8 @@ def test_logging_aggregator_valid_settings(put, post, admin, type, host, port, u mock_settings['LOG_AGGREGATOR_USERNAME'] = username if password: mock_settings['LOG_AGGREGATOR_PASSWORD'] = password + # mock testing pg_notify + mocker.patch("awx.conf.views.send_pg_notify", return_value=None) url = reverse('api:setting_singleton_detail', kwargs={'category_slug': 'logging'}) response = put(url, data=mock_settings, user=admin, expect=200) assert type in response.data.get('LOG_AGGREGATOR_TYPE') @@ -305,13 +307,15 @@ def test_logging_aggregator_valid_settings(put, post, admin, type, host, port, u @pytest.mark.django_db -def test_logging_aggregator_connection_test_valid(put, post, admin): +def test_logging_aggregator_connection_test_valid(put, post, admin, mocker): _, mock_settings = _mock_logging_defaults() type = 'other' host = 'https://localhost' mock_settings['LOG_AGGREGATOR_ENABLED'] = True mock_settings['LOG_AGGREGATOR_TYPE'] = type mock_settings['LOG_AGGREGATOR_HOST'] = host + # mock testing pg_notify + mocker.patch("awx.conf.views.send_pg_notify", return_value=None) # POST to save these mock settings url = reverse('api:setting_singleton_detail', kwargs={'category_slug': 'logging'}) put(url, data=mock_settings, user=admin, expect=200) diff --git a/awx/main/utils/external_logging.py b/awx/main/utils/external_logging.py index 26f434a4e4..e3e0a3d1c8 100644 --- a/awx/main/utils/external_logging.py +++ b/awx/main/utils/external_logging.py @@ -6,6 +6,7 @@ import urllib.parse as urlparse from django.conf import settings from awx.main.utils.reload import supervisor_service_command +from awx.main.dispatch import pg_bus_conn def construct_rsyslog_conf_template(settings=settings): @@ -124,3 +125,8 @@ def reconfigure_rsyslog(): f.write(tmpl + '\n') shutil.move(path, '/var/lib/awx/rsyslog/rsyslog.conf') supervisor_service_command(command='restart', service='awx-rsyslogd') + + +def send_pg_notify(channel: str, payload: str) -> None: + with pg_bus_conn() as conn: + conn.notify(channel, payload) diff --git a/awx/settings/defaults.py b/awx/settings/defaults.py index e7720e150b..6c1c765a27 100644 --- a/awx/settings/defaults.py +++ b/awx/settings/defaults.py @@ -867,6 +867,7 @@ LOGGING = { 'awx.main.dispatch': {'handlers': ['dispatcher']}, 'awx.main.consumers': {'handlers': ['console', 'file', 'tower_warnings'], 'level': 'INFO'}, 'awx.main.wsbroadcast': {'handlers': ['wsbroadcast']}, + 'awx.main.rsyslog_configurer': {'handlers': ['rsyslog_configurer']}, 'awx.main.commands.inventory_import': {'handlers': ['inventory_import'], 'propagate': False}, 'awx.main.tasks': {'handlers': ['task_system', 'external_logger'], 'propagate': False}, 'awx.main.analytics': {'handlers': ['task_system', 'external_logger'], 'level': 'INFO', 'propagate': False}, @@ -897,6 +898,7 @@ handler_config = { 'task_system': {'filename': 'task_system.log'}, 'rbac_migrations': {'filename': 'tower_rbac_migrations.log'}, 'job_lifecycle': {'filename': 'job_lifecycle.log', 'formatter': 'job_lifecycle'}, + 'rsyslog_configurer': {'filename': 'rsyslog_configurer.log'}, } # If running on a VM, we log to files. When running in a container, we log to stdout. diff --git a/tools/docker-compose/supervisor.conf b/tools/docker-compose/supervisor.conf index 0e2441a47e..5107b463de 100644 --- a/tools/docker-compose/supervisor.conf +++ b/tools/docker-compose/supervisor.conf @@ -34,6 +34,16 @@ stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 +[program:awx-rsyslog-configurer] +command = make rsyslog-configurer +autorestart = true +stopasgroup=true +killasgroup=true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 + [program:awx-uwsgi] command = make uwsgi autorestart = true From 65b3e0226d1d4bd725f4752218b9170634d381a6 Mon Sep 17 00:00:00 2001 From: Lila Yasin Date: Wed, 4 Jan 2023 14:29:40 -0500 Subject: [PATCH 02/52] Created new rsyslog launch file. (#13327) * Created new rsyslog launch file. * Rsyslog conf work. * Refining how we're calling rsyslog conf. * Removed rsyslog so it no longer launches in the web container. * Added the new launch_awx_rsyslog.sh to the /usr/bin --- .../dockerfile/files/launch_awx_rsyslog.sh | 28 +++++++++ tools/ansible/roles/dockerfile/tasks/main.yml | 1 + .../roles/dockerfile/templates/Dockerfile.j2 | 4 +- .../dockerfile/templates/supervisor.conf.j2 | 13 +--- .../templates/supervisor_rsyslog.conf.j2 | 59 +++++++++++++++++++ 5 files changed, 91 insertions(+), 14 deletions(-) create mode 100644 tools/ansible/roles/dockerfile/files/launch_awx_rsyslog.sh create mode 100644 tools/ansible/roles/dockerfile/templates/supervisor_rsyslog.conf.j2 diff --git a/tools/ansible/roles/dockerfile/files/launch_awx_rsyslog.sh b/tools/ansible/roles/dockerfile/files/launch_awx_rsyslog.sh new file mode 100644 index 0000000000..53ef60f544 --- /dev/null +++ b/tools/ansible/roles/dockerfile/files/launch_awx_rsyslog.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +if [ `id -u` -ge 500 ]; then + echo "awx:x:`id -u`:`id -g`:,,,:/var/lib/awx:/bin/bash" >> /tmp/passwd + cat /tmp/passwd > /etc/passwd + rm /tmp/passwd +fi + +if [ -n "${AWX_KUBE_DEVEL}" ]; then + pushd /awx_devel + make awx-link + popd + + export SDB_NOTIFY_HOST=$MY_POD_IP +fi + +set -e + +wait-for-migrations + +# This file will be re-written when the dispatcher calls reconfigure_rsyslog(), +# but it needs to exist when supervisor initially starts rsyslog to prevent the +# container from crashing. This was the most minimal config I could get working. +cat << EOF > /var/lib/awx/rsyslog/rsyslog.conf +action(type="omfile" file="/dev/null") +EOF + +exec supervisord -c /etc/supervisor_rsyslog.conf + diff --git a/tools/ansible/roles/dockerfile/tasks/main.yml b/tools/ansible/roles/dockerfile/tasks/main.yml index 1f2a2bac73..7a3953e7ed 100644 --- a/tools/ansible/roles/dockerfile/tasks/main.yml +++ b/tools/ansible/roles/dockerfile/tasks/main.yml @@ -11,6 +11,7 @@ with_items: - "supervisor.conf" - "supervisor_task.conf" + - "supervisor_rsyslog.conf" - name: Render Dockerfile template: diff --git a/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 b/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 index 2477153678..a74129905b 100644 --- a/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 +++ b/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 @@ -194,8 +194,6 @@ ENV _CONTAINERS_USERNS_CONFIGURED="" RUN mkdir -p /etc/containers/registries.conf.d/ && echo "unqualified-search-registries = []" >> /etc/containers/registries.conf.d/force-fully-qualified-images.conf && chmod 644 /etc/containers/registries.conf.d/force-fully-qualified-images.conf {% endif %} -# Create default awx rsyslog config -ADD tools/ansible/roles/dockerfile/files/rsyslog.conf /var/lib/awx/rsyslog/rsyslog.conf ADD tools/ansible/roles/dockerfile/files/wait-for-migrations /usr/local/bin/wait-for-migrations ADD tools/ansible/roles/dockerfile/files/stop-supervisor /usr/local/bin/stop-supervisor @@ -213,8 +211,10 @@ ADD tools/docker-compose/podman-containers.conf /var/lib/awx/.config/containers/ {% else %} ADD tools/ansible/roles/dockerfile/files/launch_awx.sh /usr/bin/launch_awx.sh ADD tools/ansible/roles/dockerfile/files/launch_awx_task.sh /usr/bin/launch_awx_task.sh +ADD tools/ansible/roles/dockerfile/files/launch_awx_rsyslog.sh /usr/bin/launch_awx_rsyslog.sh ADD {{ template_dest }}/supervisor.conf /etc/supervisord.conf ADD {{ template_dest }}/supervisor_task.conf /etc/supervisord_task.conf +ADD {{ template_dest }}/supervisor_rsyslog.conf /etc/supervisor_rsyslog.conf {% endif %} {% if (build_dev|bool) or (kube_dev|bool) %} ADD tools/docker-compose/awx.egg-link /tmp/awx.egg-link diff --git a/tools/ansible/roles/dockerfile/templates/supervisor.conf.j2 b/tools/ansible/roles/dockerfile/templates/supervisor.conf.j2 index 6cd821b9d0..f72b4a6c26 100644 --- a/tools/ansible/roles/dockerfile/templates/supervisor.conf.j2 +++ b/tools/ansible/roles/dockerfile/templates/supervisor.conf.j2 @@ -75,19 +75,8 @@ stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 -[program:awx-rsyslogd] -command = rsyslogd -n -i /var/run/awx-rsyslog/rsyslog.pid -f /var/lib/awx/rsyslog/rsyslog.conf -autorestart = true -startsecs = 30 -stopasgroup=true -killasgroup=true -stdout_logfile=/dev/stdout -stdout_logfile_maxbytes=0 -stderr_logfile=/dev/stderr -stderr_logfile_maxbytes=0 - [group:tower-processes] -programs=nginx,uwsgi,daphne,wsbroadcast,awx-rsyslogd +programs=nginx,uwsgi,daphne,wsbroadcast priority=5 [eventlistener:superwatcher] diff --git a/tools/ansible/roles/dockerfile/templates/supervisor_rsyslog.conf.j2 b/tools/ansible/roles/dockerfile/templates/supervisor_rsyslog.conf.j2 new file mode 100644 index 0000000000..8f689e91a0 --- /dev/null +++ b/tools/ansible/roles/dockerfile/templates/supervisor_rsyslog.conf.j2 @@ -0,0 +1,59 @@ +; needs to launch rsyslog +; needs to launch rsyslog-configurer + +[supervisord] +nodaemon = True +umask = 022 +logfile = /dev/stdout +logfile_maxbytes = 0 +pidfile = /var/run/supervisor/supervisor.rsyslog.pid + +[program:awx-rsyslogd] +command = rsyslogd -n -i /var/run/awx-rsyslog/rsyslog.pid -f /var/lib/awx/rsyslog/rsyslog.conf +autorestart = true +startsecs = 30 +stopasgroup=true +killasgroup=true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 + +[program:awx-rsyslog-configurer] +{% if kube_dev | bool %} +command = make rsyslog-configurer +directory = /awx_devel +{% else %} +command = awx-manage run_rsyslog_configurer +directory = /var/lib/awx +{% endif %} +autorestart = true +startsecs = 30 +stopasgroup=true +killasgroup=true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 + +[group:tower-processes] +programs=awx-rsyslog-configurer,awx-rsyslogd +priority=5 + +[eventlistener:superwatcher] +command=stop-supervisor +events=PROCESS_STATE_FATAL +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 + +[unix_http_server] +file=/var/run/supervisor/supervisor.rsyslog.sock + +[supervisorctl] +serverurl=unix:///var/run/supervisor/supervisor.rsyslog.sock ; use a unix:// URL for a unix socket + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface From 38cc193aea8ae6347430b3d00e4d78d3ab85296e Mon Sep 17 00:00:00 2001 From: Hao Liu <44379968+TheRealHaoLiu@users.noreply.github.com> Date: Thu, 5 Jan 2023 10:08:31 -0500 Subject: [PATCH 03/52] update permission to launch_awx_rsyslog.sh permission to +x (#13399) Signed-off-by: Hao Liu --- tools/ansible/roles/dockerfile/files/launch_awx_rsyslog.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 tools/ansible/roles/dockerfile/files/launch_awx_rsyslog.sh diff --git a/tools/ansible/roles/dockerfile/files/launch_awx_rsyslog.sh b/tools/ansible/roles/dockerfile/files/launch_awx_rsyslog.sh old mode 100644 new mode 100755 From d8e591cd6946a0b34b015497d2605e04dd9bd846 Mon Sep 17 00:00:00 2001 From: Jessica Mack Date: Tue, 17 Jan 2023 12:00:21 -0500 Subject: [PATCH 04/52] added cache-clear service. update dispatcher queues Signed-off-by: Jessica Mack --- Makefile | 6 +++ .../management/commands/run_cache_clear.py | 39 +++++++++++++++++++ .../management/commands/run_dispatcher.py | 2 +- awx/main/tasks/system.py | 13 ++----- awx/settings/defaults.py | 2 + tools/docker-compose/supervisor.conf | 10 +++++ 6 files changed, 62 insertions(+), 10 deletions(-) create mode 100644 awx/main/management/commands/run_cache_clear.py diff --git a/Makefile b/Makefile index 5165ad577b..addcca9243 100644 --- a/Makefile +++ b/Makefile @@ -70,6 +70,12 @@ I18N_FLAG_FILE = .i18n_built VERSION PYTHON_VERSION docker-compose-sources \ .git/hooks/pre-commit github_ci_setup github_ci_runner +cache-clear: + @if [ "$(VENV_BASE)" ]; then \ + . $(VENV_BASE)/awx/bin/activate; \ + fi; \ + $(PYTHON) manage.py run_cache_clear + clean-tmp: rm -rf tmp/ diff --git a/awx/main/management/commands/run_cache_clear.py b/awx/main/management/commands/run_cache_clear.py new file mode 100644 index 0000000000..5e27172d38 --- /dev/null +++ b/awx/main/management/commands/run_cache_clear.py @@ -0,0 +1,39 @@ +import logging + +from django.core.management.base import BaseCommand +from django.conf import settings +from django.core.cache import cache +from awx.main.dispatch import pg_bus_conn +from awx.conf import settings_registry + +logger = logging.getLogger('awx.main.cache_clear') + + +class Command(BaseCommand): + """ + Cache Clear + Runs as a management command and starts a daemon that listens for a pg_notify message to clear the cache. + """ + + help = 'Launch the cache clear daemon' + + def handle(self, *arg, **options): + try: + with pg_bus_conn(new_connection=True) as conn: + conn.listen("tower_settings_change") + for e in conn.events(yield_timeouts=True): + if e is not None: + logger.info("Cache clear request received. Clearing now") + # clear the cache of the keys in the payload + setting_keys = e.payload + orig_len = len(setting_keys) + for i in range(orig_len): + for dependent_key in settings_registry.get_dependent_settings(setting_keys[i]): + setting_keys.append(dependent_key) + cache_keys = set(setting_keys) + logger.info('cache delete_many(%r)', cache_keys) + cache.delete_many(cache_keys) + except Exception: + # Log unanticipated exception in addition to writing to stderr to get timestamps and other metadata + logger.exception('Encountered unhandled error in cache clear main loop') + raise diff --git a/awx/main/management/commands/run_dispatcher.py b/awx/main/management/commands/run_dispatcher.py index 74a8ac3f94..72fbfbedba 100644 --- a/awx/main/management/commands/run_dispatcher.py +++ b/awx/main/management/commands/run_dispatcher.py @@ -76,7 +76,7 @@ class Command(BaseCommand): consumer = None try: - queues = ['tower_broadcast_all', get_local_queuename()] + queues = ['tower_broadcast_all', 'tower_settings_change', 'rsyslog_configurer', get_local_queuename()] consumer = AWXConsumerPG('dispatcher', TaskWorker(), queues, AutoscalePool(min_workers=4)) consumer.run() except KeyboardInterrupt: diff --git a/awx/main/tasks/system.py b/awx/main/tasks/system.py index ac0e0c32bf..069ac745cd 100644 --- a/awx/main/tasks/system.py +++ b/awx/main/tasks/system.py @@ -61,10 +61,10 @@ from awx.main.utils.common import ( from awx.main.utils.reload import stop_local_services from awx.main.utils.pglock import advisory_lock +from awx.main.utils.external_logging import send_pg_notify from awx.main.tasks.receptor import get_receptor_ctl, worker_info, worker_cleanup, administrative_workunit_reaper, write_receptor_config from awx.main.consumers import emit_channel_notification from awx.main import analytics -from awx.conf import settings_registry from awx.main.analytics.subsystem_metrics import Metrics from rest_framework.exceptions import PermissionDenied @@ -240,15 +240,10 @@ def apply_cluster_membership_policies(): logger.debug('Cluster policy computation finished in {} seconds'.format(time.time() - started_compute)) -@task(queue='tower_broadcast_all') +@task(queue='tower_settings_change') def clear_setting_cache(setting_keys): - orig_len = len(setting_keys) - for i in range(orig_len): - for dependent_key in settings_registry.get_dependent_settings(setting_keys[i]): - setting_keys.append(dependent_key) - cache_keys = set(setting_keys) - logger.debug('cache delete_many(%r)', cache_keys) - cache.delete_many(cache_keys) + # notify the service to clear the cache + send_pg_notify('tower_settings_change', setting_keys) @task(queue='tower_broadcast_all') diff --git a/awx/settings/defaults.py b/awx/settings/defaults.py index 6c1c765a27..33c6eda725 100644 --- a/awx/settings/defaults.py +++ b/awx/settings/defaults.py @@ -868,6 +868,7 @@ LOGGING = { 'awx.main.consumers': {'handlers': ['console', 'file', 'tower_warnings'], 'level': 'INFO'}, 'awx.main.wsbroadcast': {'handlers': ['wsbroadcast']}, 'awx.main.rsyslog_configurer': {'handlers': ['rsyslog_configurer']}, + 'awx.main.cache_clear': {'handlers': ['cache_clear']}, 'awx.main.commands.inventory_import': {'handlers': ['inventory_import'], 'propagate': False}, 'awx.main.tasks': {'handlers': ['task_system', 'external_logger'], 'propagate': False}, 'awx.main.analytics': {'handlers': ['task_system', 'external_logger'], 'level': 'INFO', 'propagate': False}, @@ -899,6 +900,7 @@ handler_config = { 'rbac_migrations': {'filename': 'tower_rbac_migrations.log'}, 'job_lifecycle': {'filename': 'job_lifecycle.log', 'formatter': 'job_lifecycle'}, 'rsyslog_configurer': {'filename': 'rsyslog_configurer.log'}, + 'cache_clear': {'filename': 'cache_clear.log'}, } # If running on a VM, we log to files. When running in a container, we log to stdout. diff --git a/tools/docker-compose/supervisor.conf b/tools/docker-compose/supervisor.conf index 5107b463de..234f1b69f4 100644 --- a/tools/docker-compose/supervisor.conf +++ b/tools/docker-compose/supervisor.conf @@ -44,6 +44,16 @@ stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 +[program:awx-cache-clear] +command = make cache-clear +autorestart = true +stopasgroup=true +killasgroup=true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 + [program:awx-uwsgi] command = make uwsgi autorestart = true From 026b8f05d79a144a18d08eabf682938c0bc690d0 Mon Sep 17 00:00:00 2001 From: Jessica Mack Date: Thu, 19 Jan 2023 13:44:29 -0500 Subject: [PATCH 05/52] added launch file, docker, and supervisor changes Signed-off-by: Jessica Mack --- .../files/launch_awx_cache_clear.sh | 22 +++++++++++++++++++ .../roles/dockerfile/templates/Dockerfile.j2 | 1 + .../dockerfile/templates/supervisor.conf.j2 | 13 ++++++++++- 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 tools/ansible/roles/dockerfile/files/launch_awx_cache_clear.sh diff --git a/tools/ansible/roles/dockerfile/files/launch_awx_cache_clear.sh b/tools/ansible/roles/dockerfile/files/launch_awx_cache_clear.sh new file mode 100644 index 0000000000..8a1a3e87fd --- /dev/null +++ b/tools/ansible/roles/dockerfile/files/launch_awx_cache_clear.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +if [ `id -u` -ge 500 ]; then + echo "awx:x:`id -u`:`id -g`:,,,:/var/lib/awx:/bin/bash" >> /tmp/passwd + cat /tmp/passwd > /etc/passwd + rm /tmp/passwd +fi + +if [ -n "${AWX_KUBE_DEVEL}" ]; then + pushd /awx_devel + make awx-link + popd + + export SDB_NOTIFY_HOST=$MY_POD_IP +fi + +set -e + +wait-for-migrations + +awx-manage provision_instance + +exec supervisord -c /etc/supervisord_task.conf \ No newline at end of file diff --git a/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 b/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 index a74129905b..c6fd7bf044 100644 --- a/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 +++ b/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 @@ -212,6 +212,7 @@ ADD tools/docker-compose/podman-containers.conf /var/lib/awx/.config/containers/ ADD tools/ansible/roles/dockerfile/files/launch_awx.sh /usr/bin/launch_awx.sh ADD tools/ansible/roles/dockerfile/files/launch_awx_task.sh /usr/bin/launch_awx_task.sh ADD tools/ansible/roles/dockerfile/files/launch_awx_rsyslog.sh /usr/bin/launch_awx_rsyslog.sh +ADD tools/ansible/roles/dockerfile/files/launch_awx_rsyslog.sh /usr/bin/launch_awx_cache_clear.sh ADD {{ template_dest }}/supervisor.conf /etc/supervisord.conf ADD {{ template_dest }}/supervisor_task.conf /etc/supervisord_task.conf ADD {{ template_dest }}/supervisor_rsyslog.conf /etc/supervisor_rsyslog.conf diff --git a/tools/ansible/roles/dockerfile/templates/supervisor.conf.j2 b/tools/ansible/roles/dockerfile/templates/supervisor.conf.j2 index f72b4a6c26..d1d902a16c 100644 --- a/tools/ansible/roles/dockerfile/templates/supervisor.conf.j2 +++ b/tools/ansible/roles/dockerfile/templates/supervisor.conf.j2 @@ -75,8 +75,19 @@ stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 +[program:awx-cache-clear] +command = awx-manage run_cache_clear +autorestart = true +startsecs = 30 +stopasgroup=true +killasgroup=true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 + [group:tower-processes] -programs=nginx,uwsgi,daphne,wsbroadcast +programs=nginx,uwsgi,daphne,wsbroadcast,awx-cache-clear priority=5 [eventlistener:superwatcher] From 8b70fef74367c7bceeec3b2d3d4eceaaade44fe3 Mon Sep 17 00:00:00 2001 From: Jessica Mack Date: Thu, 19 Jan 2023 13:44:50 -0500 Subject: [PATCH 06/52] removed unused import Signed-off-by: Jessica Mack --- awx/main/management/commands/run_cache_clear.py | 1 - 1 file changed, 1 deletion(-) diff --git a/awx/main/management/commands/run_cache_clear.py b/awx/main/management/commands/run_cache_clear.py index 5e27172d38..8ae2615086 100644 --- a/awx/main/management/commands/run_cache_clear.py +++ b/awx/main/management/commands/run_cache_clear.py @@ -1,7 +1,6 @@ import logging from django.core.management.base import BaseCommand -from django.conf import settings from django.core.cache import cache from awx.main.dispatch import pg_bus_conn from awx.conf import settings_registry From 454d6d28e72d8399b3150dd5c7e4000a0eae1794 Mon Sep 17 00:00:00 2001 From: Jessica Mack Date: Thu, 19 Jan 2023 13:53:27 -0500 Subject: [PATCH 07/52] mock additional pg_notify use in test Signed-off-by: Jessica Mack --- awx/main/tests/functional/api/test_settings.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/awx/main/tests/functional/api/test_settings.py b/awx/main/tests/functional/api/test_settings.py index bcfa499af3..eb57f27e14 100644 --- a/awx/main/tests/functional/api/test_settings.py +++ b/awx/main/tests/functional/api/test_settings.py @@ -294,6 +294,7 @@ def test_logging_aggregator_valid_settings(put, post, admin, type, host, port, u mock_settings['LOG_AGGREGATOR_PASSWORD'] = password # mock testing pg_notify mocker.patch("awx.conf.views.send_pg_notify", return_value=None) + mocker.patch("awx.main.tasks.system.send_pg_notify", return_value=None) url = reverse('api:setting_singleton_detail', kwargs={'category_slug': 'logging'}) response = put(url, data=mock_settings, user=admin, expect=200) assert type in response.data.get('LOG_AGGREGATOR_TYPE') @@ -316,6 +317,7 @@ def test_logging_aggregator_connection_test_valid(put, post, admin, mocker): mock_settings['LOG_AGGREGATOR_HOST'] = host # mock testing pg_notify mocker.patch("awx.conf.views.send_pg_notify", return_value=None) + mocker.patch("awx.main.tasks.system.send_pg_notify", return_value=None) # POST to save these mock settings url = reverse('api:setting_singleton_detail', kwargs={'category_slug': 'logging'}) put(url, data=mock_settings, user=admin, expect=200) From 9f959ca3d428469e9af5e65c8823c6df4f93fda8 Mon Sep 17 00:00:00 2001 From: Jessica Mack Date: Thu, 26 Jan 2023 11:12:50 -0500 Subject: [PATCH 08/52] removed unneeded launch file and Dockerfile change Signed-off-by: Jessica Mack --- .../files/launch_awx_cache_clear.sh | 22 ------------------- 1 file changed, 22 deletions(-) delete mode 100644 tools/ansible/roles/dockerfile/files/launch_awx_cache_clear.sh diff --git a/tools/ansible/roles/dockerfile/files/launch_awx_cache_clear.sh b/tools/ansible/roles/dockerfile/files/launch_awx_cache_clear.sh deleted file mode 100644 index 8a1a3e87fd..0000000000 --- a/tools/ansible/roles/dockerfile/files/launch_awx_cache_clear.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash -if [ `id -u` -ge 500 ]; then - echo "awx:x:`id -u`:`id -g`:,,,:/var/lib/awx:/bin/bash" >> /tmp/passwd - cat /tmp/passwd > /etc/passwd - rm /tmp/passwd -fi - -if [ -n "${AWX_KUBE_DEVEL}" ]; then - pushd /awx_devel - make awx-link - popd - - export SDB_NOTIFY_HOST=$MY_POD_IP -fi - -set -e - -wait-for-migrations - -awx-manage provision_instance - -exec supervisord -c /etc/supervisord_task.conf \ No newline at end of file From cb31973d59de20aab45c8b44d3340dacd7777ac7 Mon Sep 17 00:00:00 2001 From: Jessica Mack Date: Mon, 30 Jan 2023 10:37:28 -0500 Subject: [PATCH 09/52] switched to using the built in task processing Signed-off-by: Jessica Mack --- .../management/commands/run_cache_clear.py | 20 ++++++++----------- awx/main/tasks/system.py | 4 ++-- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/awx/main/management/commands/run_cache_clear.py b/awx/main/management/commands/run_cache_clear.py index 8ae2615086..d058b8bd6e 100644 --- a/awx/main/management/commands/run_cache_clear.py +++ b/awx/main/management/commands/run_cache_clear.py @@ -1,9 +1,9 @@ import logging +import json from django.core.management.base import BaseCommand -from django.core.cache import cache from awx.main.dispatch import pg_bus_conn -from awx.conf import settings_registry +from awx.main.dispatch.worker.task import TaskWorker logger = logging.getLogger('awx.main.cache_clear') @@ -22,16 +22,12 @@ class Command(BaseCommand): conn.listen("tower_settings_change") for e in conn.events(yield_timeouts=True): if e is not None: - logger.info("Cache clear request received. Clearing now") - # clear the cache of the keys in the payload - setting_keys = e.payload - orig_len = len(setting_keys) - for i in range(orig_len): - for dependent_key in settings_registry.get_dependent_settings(setting_keys[i]): - setting_keys.append(dependent_key) - cache_keys = set(setting_keys) - logger.info('cache delete_many(%r)', cache_keys) - cache.delete_many(cache_keys) + body = json.loads(e.payload) + logger.warning(f"Cache clear request received. Clearing now, payload: {e.payload}") + TaskWorker.run_callable(body) + else: + logger.info('run_clear_cache got timeout') + except Exception: # Log unanticipated exception in addition to writing to stderr to get timestamps and other metadata logger.exception('Encountered unhandled error in cache clear main loop') diff --git a/awx/main/tasks/system.py b/awx/main/tasks/system.py index 069ac745cd..30f5ae785f 100644 --- a/awx/main/tasks/system.py +++ b/awx/main/tasks/system.py @@ -242,8 +242,8 @@ def apply_cluster_membership_policies(): @task(queue='tower_settings_change') def clear_setting_cache(setting_keys): - # notify the service to clear the cache - send_pg_notify('tower_settings_change', setting_keys) + # log that cache is being cleared + logger.info(f"clear_setting_cache of keys {setting_keys}") @task(queue='tower_broadcast_all') From 43f4872fec8df6a1d267312c58d7bb40aa085fb4 Mon Sep 17 00:00:00 2001 From: Jessica Mack Date: Mon, 30 Jan 2023 10:38:28 -0500 Subject: [PATCH 10/52] these methods don't need to be class methods Signed-off-by: Jessica Mack --- awx/main/dispatch/worker/task.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/awx/main/dispatch/worker/task.py b/awx/main/dispatch/worker/task.py index 04f63002c5..6726aaeae3 100644 --- a/awx/main/dispatch/worker/task.py +++ b/awx/main/dispatch/worker/task.py @@ -26,8 +26,8 @@ class TaskWorker(BaseWorker): `awx.main.dispatch.publish`. """ - @classmethod - def resolve_callable(cls, task): + @staticmethod + def resolve_callable(task): """ Transform a dotted notation task into an imported, callable function, e.g., @@ -46,7 +46,8 @@ class TaskWorker(BaseWorker): return _call - def run_callable(self, body): + @staticmethod + def run_callable(body): """ Given some AMQP message, import the correct Python code and run it. """ From c4ce5d0afa5b25e481f96f5c92ded9a25fb3dd5c Mon Sep 17 00:00:00 2001 From: Jessica Mack Date: Mon, 30 Jan 2023 10:38:49 -0500 Subject: [PATCH 11/52] updated supervisor to include cache-clear Signed-off-by: Jessica Mack --- tools/docker-compose/supervisor.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/docker-compose/supervisor.conf b/tools/docker-compose/supervisor.conf index 234f1b69f4..76d7d0dba4 100644 --- a/tools/docker-compose/supervisor.conf +++ b/tools/docker-compose/supervisor.conf @@ -106,7 +106,7 @@ stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 [group:tower-processes] -programs=awx-dispatcher,awx-receiver,awx-uwsgi,awx-daphne,awx-nginx,awx-wsbroadcast,awx-rsyslogd +programs=awx-dispatcher,awx-receiver,awx-uwsgi,awx-daphne,awx-nginx,awx-wsbroadcast,awx-rsyslogd, awx-cache-clear priority=5 [program:awx-autoreload] From ab6d56c24ee0feab7acf0825bf3f309217e4d7bd Mon Sep 17 00:00:00 2001 From: Shane McDonald Date: Tue, 6 Sep 2022 17:19:15 -0400 Subject: [PATCH 12/52] initial PoC for wsrelay Checkpoint --- Makefile | 4 +- awx/conf/settings.py | 23 ++- awx/main/analytics/broadcast_websocket.py | 6 +- awx/main/analytics/subsystem_metrics.py | 9 +- awx/main/consumers.py | 44 ++++-- awx/main/db/profiled_pg/base.py | 2 +- .../{run_wsbroadcast.py => run_wsrelay.py} | 25 ++-- awx/main/routing.py | 4 +- awx/main/{wsbroadcast.py => wsrelay.py} | 134 +++++++++++------- awx/settings/defaults.py | 4 +- docs/websockets.md | 12 +- .../dockerfile/templates/supervisor.conf.j2 | 11 +- .../templates/supervisor_task.conf.j2 | 17 +++ tools/docker-compose/README.md | 2 +- .../roles/sources/templates/haproxy.cfg.j2 | 4 +- tools/docker-compose/supervisor.conf | 55 +++---- 16 files changed, 207 insertions(+), 149 deletions(-) rename awx/main/management/commands/{run_wsbroadcast.py => run_wsrelay.py} (87%) rename awx/main/{wsbroadcast.py => wsrelay.py} (62%) diff --git a/Makefile b/Makefile index addcca9243..ee434fc0b7 100644 --- a/Makefile +++ b/Makefile @@ -223,11 +223,11 @@ daphne: fi; \ daphne -b 127.0.0.1 -p 8051 awx.asgi:channel_layer -wsbroadcast: +wsrelay: @if [ "$(VENV_BASE)" ]; then \ . $(VENV_BASE)/awx/bin/activate; \ fi; \ - $(PYTHON) manage.py run_wsbroadcast + $(PYTHON) manage.py run_wsrelay ## Run to start the background task dispatcher for development. dispatcher: diff --git a/awx/conf/settings.py b/awx/conf/settings.py index 3f364dc058..27b7847ae9 100644 --- a/awx/conf/settings.py +++ b/awx/conf/settings.py @@ -5,6 +5,8 @@ import threading import time import os +from concurrent.futures import ThreadPoolExecutor + # Django from django.conf import LazySettings from django.conf import settings, UserSettingsHolder @@ -157,7 +159,7 @@ class EncryptedCacheProxy(object): obj_id = self.cache.get(Setting.get_cache_id_key(key), default=empty) if obj_id is empty: logger.info('Efficiency notice: Corresponding id not stored in cache %s', Setting.get_cache_id_key(key)) - obj_id = getattr(self._get_setting_from_db(key), 'pk', None) + obj_id = getattr(_get_setting_from_db(self.registry, key), 'pk', None) elif obj_id == SETTING_CACHE_NONE: obj_id = None return method(TransientSetting(pk=obj_id, value=value), 'value') @@ -166,11 +168,6 @@ class EncryptedCacheProxy(object): # a no-op; it just returns the provided value return value - def _get_setting_from_db(self, key): - field = self.registry.get_setting_field(key) - if not field.read_only: - return Setting.objects.filter(key=key, user__isnull=True).order_by('pk').first() - def __getattr__(self, name): return getattr(self.cache, name) @@ -186,6 +183,18 @@ def get_settings_to_cache(registry): return dict([(key, SETTING_CACHE_NOTSET) for key in get_writeable_settings(registry)]) +# HACK: runs in thread in order to work in an asyncio context +def _get_setting_from_db(registry, key): + def wrapped(registry, key): + field = registry.get_setting_field(key) + if not field.read_only: + return Setting.objects.filter(key=key, user__isnull=True).order_by('pk').first() + + with ThreadPoolExecutor(max_workers=1) as executor: + future = executor.submit(wrapped, registry, key) + return future.result() + + def get_cache_value(value): """Returns the proper special cache setting for a value based on instance type. @@ -345,7 +354,7 @@ class SettingsWrapper(UserSettingsHolder): setting_id = None # this value is read-only, however we *do* want to fetch its value from the database if not field.read_only or name == 'INSTALL_UUID': - setting = Setting.objects.filter(key=name, user__isnull=True).order_by('pk').first() + setting = _get_setting_from_db(self.registry, name) if setting: if getattr(field, 'encrypted', False): value = decrypt_field(setting, 'value') diff --git a/awx/main/analytics/broadcast_websocket.py b/awx/main/analytics/broadcast_websocket.py index 37b64361d3..21567402f3 100644 --- a/awx/main/analytics/broadcast_websocket.py +++ b/awx/main/analytics/broadcast_websocket.py @@ -65,7 +65,7 @@ class FixedSlidingWindow: return sum(self.buckets.values()) or 0 -class BroadcastWebsocketStatsManager: +class RelayWebsocketStatsManager: def __init__(self, event_loop, local_hostname): self._local_hostname = local_hostname @@ -74,7 +74,7 @@ class BroadcastWebsocketStatsManager: self._redis_key = BROADCAST_WEBSOCKET_REDIS_KEY_NAME def new_remote_host_stats(self, remote_hostname): - self._stats[remote_hostname] = BroadcastWebsocketStats(self._local_hostname, remote_hostname) + self._stats[remote_hostname] = RelayWebsocketStats(self._local_hostname, remote_hostname) return self._stats[remote_hostname] def delete_remote_host_stats(self, remote_hostname): @@ -107,7 +107,7 @@ class BroadcastWebsocketStatsManager: return parser.text_string_to_metric_families(stats_str.decode('UTF-8')) -class BroadcastWebsocketStats: +class RelayWebsocketStats: def __init__(self, local_hostname, remote_hostname): self._local_hostname = local_hostname self._remote_hostname = remote_hostname diff --git a/awx/main/analytics/subsystem_metrics.py b/awx/main/analytics/subsystem_metrics.py index 4b023db315..439f084c5b 100644 --- a/awx/main/analytics/subsystem_metrics.py +++ b/awx/main/analytics/subsystem_metrics.py @@ -311,7 +311,14 @@ class Metrics: } # store a local copy as well self.store_metrics(json.dumps(payload)) - emit_channel_notification("metrics", payload) + + # 🚨🚨🚨🚨🚨🚨🚨🚨 + # TODO: rework how metrics are emitted and recorded. we used to exploit wsbroadcast's behavior of + # sending the same data out to every other node. + # Should we increment this data in redis but ultimately just store it in the database? + # emit_channel_notification("metrics", payload) + # 🚨🚨🚨🚨🚨🚨🚨🚨 + self.previous_send_metrics.set(current_time) self.previous_send_metrics.store_value(self.conn) finally: diff --git a/awx/main/consumers.py b/awx/main/consumers.py index ad1740c362..433ffe6e2b 100644 --- a/awx/main/consumers.py +++ b/awx/main/consumers.py @@ -80,7 +80,7 @@ class WebsocketSecretAuthHelper: WebsocketSecretAuthHelper.verify_secret(secret) -class BroadcastConsumer(AsyncJsonWebsocketConsumer): +class RelayConsumer(AsyncJsonWebsocketConsumer): async def connect(self): try: WebsocketSecretAuthHelper.is_authorized(self.scope) @@ -100,6 +100,16 @@ class BroadcastConsumer(AsyncJsonWebsocketConsumer): async def internal_message(self, event): await self.send(event['text']) + async def receive_json(self, data): + (group, message) = unwrap_broadcast_msg(data) + await self.channel_layer.group_send(group, message) + + async def consumer_subscribe(self, event): + await self.send_json(event) + + async def consumer_unsubscribe(self, event): + await self.send_json(event) + class EventConsumer(AsyncJsonWebsocketConsumer): async def connect(self): @@ -128,6 +138,11 @@ class EventConsumer(AsyncJsonWebsocketConsumer): self.channel_name, ) + await self.channel_layer.group_send( + settings.BROADCAST_WEBSOCKET_GROUP_NAME, + {"type": "consumer.unsubscribe", "groups": list(current_groups), "origin_channel": self.channel_name}, + ) + @database_sync_to_async def user_can_see_object_id(self, user_access, oid): # At this point user is a channels.auth.UserLazyObject object @@ -176,9 +191,20 @@ class EventConsumer(AsyncJsonWebsocketConsumer): self.channel_name, ) + if len(old_groups): + await self.channel_layer.group_send( + settings.BROADCAST_WEBSOCKET_GROUP_NAME, + {"type": "consumer.unsubscribe", "groups": list(old_groups), "origin_channel": self.channel_name}, + ) + new_groups_exclusive = new_groups - current_groups for group_name in new_groups_exclusive: await self.channel_layer.group_add(group_name, self.channel_name) + + await self.channel_layer.group_send( + settings.BROADCAST_WEBSOCKET_GROUP_NAME, + {"type": "consumer.subscribe", "groups": list(new_groups), "origin_channel": self.channel_name}, + ) self.scope['session']['groups'] = new_groups await self.send_json({"groups_current": list(new_groups), "groups_left": list(old_groups), "groups_joined": list(new_groups_exclusive)}) @@ -200,9 +226,11 @@ def _dump_payload(payload): return None -def emit_channel_notification(group, payload): - from awx.main.wsbroadcast import wrap_broadcast_msg # noqa +def unwrap_broadcast_msg(payload: dict): + return (payload['group'], payload['message']) + +def emit_channel_notification(group, payload): payload_dumped = _dump_payload(payload) if payload_dumped is None: return @@ -215,13 +243,3 @@ def emit_channel_notification(group, payload): {"type": "internal.message", "text": payload_dumped}, ) ) - - run_sync( - channel_layer.group_send( - settings.BROADCAST_WEBSOCKET_GROUP_NAME, - { - "type": "internal.message", - "text": wrap_broadcast_msg(group, payload_dumped), - }, - ) - ) diff --git a/awx/main/db/profiled_pg/base.py b/awx/main/db/profiled_pg/base.py index 5df1341428..583c12ff53 100644 --- a/awx/main/db/profiled_pg/base.py +++ b/awx/main/db/profiled_pg/base.py @@ -63,7 +63,7 @@ class RecordedQueryLog(object): if not os.path.isdir(self.dest): os.makedirs(self.dest) progname = ' '.join(sys.argv) - for match in ('uwsgi', 'dispatcher', 'callback_receiver', 'wsbroadcast'): + for match in ('uwsgi', 'dispatcher', 'callback_receiver', 'wsrelay'): if match in progname: progname = match break diff --git a/awx/main/management/commands/run_wsbroadcast.py b/awx/main/management/commands/run_wsrelay.py similarity index 87% rename from awx/main/management/commands/run_wsbroadcast.py rename to awx/main/management/commands/run_wsrelay.py index cb2b7efcdb..ce778b8356 100644 --- a/awx/main/management/commands/run_wsbroadcast.py +++ b/awx/main/management/commands/run_wsrelay.py @@ -13,13 +13,13 @@ from django.db import connection from django.db.migrations.executor import MigrationExecutor from awx.main.analytics.broadcast_websocket import ( - BroadcastWebsocketStatsManager, + RelayWebsocketStatsManager, safe_name, ) -from awx.main.wsbroadcast import BroadcastWebsocketManager +from awx.main.wsrelay import WebSocketRelayManager -logger = logging.getLogger('awx.main.wsbroadcast') +logger = logging.getLogger('awx.main.wsrelay') class Command(BaseCommand): @@ -99,7 +99,7 @@ class Command(BaseCommand): executor = MigrationExecutor(connection) migrating = bool(executor.migration_plan(executor.loader.graph.leaf_nodes())) except Exception as exc: - logger.info(f'Error on startup of run_wsbroadcast (error: {exc}), retry in 10s...') + logger.info(f'Error on startup of run_wsrelay (error: {exc}), retry in 10s...') time.sleep(10) return @@ -130,9 +130,9 @@ class Command(BaseCommand): if options.get('status'): try: - stats_all = BroadcastWebsocketStatsManager.get_stats_sync() + stats_all = RelayWebsocketStatsManager.get_stats_sync() except redis.exceptions.ConnectionError as e: - print(f"Unable to get Broadcast Websocket Status. Failed to connect to redis {e}") + print(f"Unable to get Relay Websocket Status. Failed to connect to redis {e}") return data = {} @@ -151,22 +151,19 @@ class Command(BaseCommand): host_stats = Command.get_connection_status(hostnames, data) lines = Command._format_lines(host_stats) - print(f'Broadcast websocket connection status from "{my_hostname}" to:') + print(f'Relay websocket connection status from "{my_hostname}" to:') print('\n'.join(lines)) host_stats = Command.get_connection_stats(hostnames, data) lines = Command._format_lines(host_stats) - print(f'\nBroadcast websocket connection stats from "{my_hostname}" to:') + print(f'\nRelay websocket connection stats from "{my_hostname}" to:') print('\n'.join(lines)) return try: - broadcast_websocket_mgr = BroadcastWebsocketManager() - task = broadcast_websocket_mgr.start() - - loop = asyncio.get_event_loop() - loop.run_until_complete(task) + websocket_relay_manager = WebSocketRelayManager() + asyncio.run(websocket_relay_manager.run()) except KeyboardInterrupt: - logger.debug('Terminating Websocket Broadcaster') + logger.debug('Terminating Websocket Relayer') diff --git a/awx/main/routing.py b/awx/main/routing.py index 100347f64e..e45bf0a537 100644 --- a/awx/main/routing.py +++ b/awx/main/routing.py @@ -27,8 +27,8 @@ class AWXProtocolTypeRouter(ProtocolTypeRouter): websocket_urlpatterns = [ - re_path(r'websocket/$', consumers.EventConsumer.as_asgi()), - re_path(r'websocket/broadcast/$', consumers.BroadcastConsumer.as_asgi()), + re_path(r'websocket/$', consumers.EventConsumer), + re_path(r'websocket/relay/$', consumers.RelayConsumer), ] application = AWXProtocolTypeRouter( diff --git a/awx/main/wsbroadcast.py b/awx/main/wsrelay.py similarity index 62% rename from awx/main/wsbroadcast.py rename to awx/main/wsrelay.py index 2c1f228785..4794ee9ea2 100644 --- a/awx/main/wsbroadcast.py +++ b/awx/main/wsrelay.py @@ -7,28 +7,24 @@ from aiohttp import client_exceptions from asgiref.sync import sync_to_async from channels.layers import get_channel_layer +from channels.db import database_sync_to_async from django.conf import settings from django.apps import apps -from django.core.serializers.json import DjangoJSONEncoder from awx.main.analytics.broadcast_websocket import ( - BroadcastWebsocketStats, - BroadcastWebsocketStatsManager, + RelayWebsocketStats, + RelayWebsocketStatsManager, ) import awx.main.analytics.subsystem_metrics as s_metrics -logger = logging.getLogger('awx.main.wsbroadcast') +logger = logging.getLogger('awx.main.wsrelay') def wrap_broadcast_msg(group, message: str): # TODO: Maybe wrap as "group","message" so that we don't need to # encode/decode as json. - return json.dumps(dict(group=group, message=message), cls=DjangoJSONEncoder) - - -def unwrap_broadcast_msg(payload: dict): - return (payload['group'], payload['message']) + return dict(group=group, message=message) @sync_to_async @@ -50,28 +46,26 @@ def get_local_host(): return Instance.objects.my_hostname() -class WebsocketTask: +class WebsocketRelayConnection: def __init__( self, name, - event_loop, - stats: BroadcastWebsocketStats, + stats: RelayWebsocketStats, remote_host: str, remote_port: int = settings.BROADCAST_WEBSOCKET_PORT, protocol: str = settings.BROADCAST_WEBSOCKET_PROTOCOL, verify_ssl: bool = settings.BROADCAST_WEBSOCKET_VERIFY_CERT, - endpoint: str = 'broadcast', ): self.name = name - self.event_loop = event_loop + self.event_loop = asyncio.get_event_loop() self.stats = stats self.remote_host = remote_host self.remote_port = remote_port - self.endpoint = endpoint self.protocol = protocol self.verify_ssl = verify_ssl self.channel_layer = None self.subsystem_metrics = s_metrics.Metrics(instance_name=name) + self.producers = dict() async def run_loop(self, websocket: aiohttp.ClientWebSocketResponse): raise RuntimeError("Implement me") @@ -95,7 +89,7 @@ class WebsocketTask: logger.warning(f"Connection from {self.name} to {self.remote_host} cancelled") raise - uri = f"{self.protocol}://{self.remote_host}:{self.remote_port}/websocket/{self.endpoint}/" + uri = f"{self.protocol}://{self.remote_host}:{self.remote_port}/websocket/relay/" timeout = aiohttp.ClientTimeout(total=10) secret_val = WebsocketSecretAuthHelper.construct_secret() @@ -105,7 +99,7 @@ class WebsocketTask: logger.info(f"Connection from {self.name} to {self.remote_host} established.") self.stats.record_connection_established() attempt = 0 - await self.run_loop(websocket) + await self.run_connection(websocket) except asyncio.CancelledError: # TODO: Check if connected and disconnect # Possibly use run_until_complete() if disconnect is async @@ -128,12 +122,12 @@ class WebsocketTask: def start(self, attempt=0): self.async_task = self.event_loop.create_task(self.connect(attempt=attempt)) + return self.async_task + def cancel(self): self.async_task.cancel() - -class BroadcastWebsocketTask(WebsocketTask): - async def run_loop(self, websocket: aiohttp.ClientWebSocketResponse): + async def run_connection(self, websocket: aiohttp.ClientWebSocketResponse): async for msg in websocket: self.stats.record_message_received() @@ -148,38 +142,79 @@ class BroadcastWebsocketTask(WebsocketTask): logmsg = "{} {}".format(logmsg, payload) logger.warning(logmsg) continue - (group, message) = unwrap_broadcast_msg(payload) - if group == "metrics": - self.subsystem_metrics.store_metrics(message) + + from remote_pdb import RemotePdb + + RemotePdb('127.0.0.1', 4444).set_trace() + + if payload.get("type") == "consumer.subscribe": + for group in payload['groups']: + name = f"{self.remote_host}-{group}" + origin_channel = payload['origin_channel'] + if not self.producers.get(name): + producer = self.event_loop.create_task(self.run_producer(name, websocket, group)) + + self.producers[name] = {"task": producer, "subscriptions": {origin_channel}} + else: + self.producers[name]["subscriptions"].add(origin_channel) + + if payload.get("type") == "consumer.unsubscribe": + for group in payload['groups']: + name = f"{self.remote_host}-{group}" + origin_channel = payload['origin_channel'] + self.producers[name]["subscriptions"].remove(origin_channel) + + async def run_producer(self, name, websocket, group): + try: + logger.info(f"Starting producer for {name}") + + consumer_channel = await self.channel_layer.new_channel() + await self.channel_layer.group_add(group, consumer_channel) + + while True: + try: + msg = await asyncio.wait_for(self.channel_layer.receive(consumer_channel), timeout=10) + except asyncio.TimeoutError: + current_subscriptions = self.producers[name]["subscriptions"] + if len(current_subscriptions) == 0: + logger.info(f"Producer {name} has no subscribers, shutting down.") + return + continue - await self.channel_layer.group_send(group, {"type": "internal.message", "text": message}) + + await websocket.send_json(wrap_broadcast_msg(group, msg)) + except Exception: + # Note, this is very intentional and important since we do not otherwise + # ever check the result of this future. Without this line you will not see an error if + # something goes wrong in here. + logger.exception(f"Event relay producer {name} crashed") + finally: + await self.channel_layer.group_discard(group, consumer_channel) + del self.producers[name] -class BroadcastWebsocketManager(object): +class WebSocketRelayManager(object): def __init__(self): - self.event_loop = asyncio.get_event_loop() - ''' - { - 'hostname1': BroadcastWebsocketTask(), - 'hostname2': BroadcastWebsocketTask(), - 'hostname3': BroadcastWebsocketTask(), - } - ''' - self.broadcast_tasks = dict() - self.local_hostname = get_local_host() - self.stats_mgr = BroadcastWebsocketStatsManager(self.event_loop, self.local_hostname) - async def run_per_host_websocket(self): + self.relay_connections = dict() + self.local_hostname = get_local_host() + self.event_loop = asyncio.get_event_loop() + self.stats_mgr = RelayWebsocketStatsManager(self.event_loop, self.local_hostname) + + async def run(self): + self.stats_mgr.start() + + # Establishes a websocket connection to /websocket/relay on all API servers while True: known_hosts = await get_broadcast_hosts() future_remote_hosts = known_hosts.keys() - current_remote_hosts = self.broadcast_tasks.keys() + current_remote_hosts = self.relay_connections.keys() deleted_remote_hosts = set(current_remote_hosts) - set(future_remote_hosts) new_remote_hosts = set(future_remote_hosts) - set(current_remote_hosts) - remote_addresses = {k: v.remote_host for k, v in self.broadcast_tasks.items()} + remote_addresses = {k: v.remote_host for k, v in self.relay_connections.items()} for hostname, address in known_hosts.items(): - if hostname in self.broadcast_tasks and address != remote_addresses[hostname]: + if hostname in self.relay_connections and address != remote_addresses[hostname]: deleted_remote_hosts.add(hostname) new_remote_hosts.add(hostname) @@ -189,20 +224,17 @@ class BroadcastWebsocketManager(object): logger.warning(f"Adding {new_remote_hosts} to websocket broadcast list") for h in deleted_remote_hosts: - self.broadcast_tasks[h].cancel() - del self.broadcast_tasks[h] + self.relay_connections[h].cancel() + del self.relay_connections[h] self.stats_mgr.delete_remote_host_stats(h) for h in new_remote_hosts: stats = self.stats_mgr.new_remote_host_stats(h) - broadcast_task = BroadcastWebsocketTask(name=self.local_hostname, event_loop=self.event_loop, stats=stats, remote_host=known_hosts[h]) - broadcast_task.start() - self.broadcast_tasks[h] = broadcast_task + relay_connection = WebsocketRelayConnection(name=self.local_hostname, stats=stats, remote_host=known_hosts[h]) + relay_connection.start() + self.relay_connections[h] = relay_connection + + # for host, conn in self.relay_connections.items(): + # logger.info(f"Current producers for {host}: {conn.producers}") await asyncio.sleep(settings.BROADCAST_WEBSOCKET_NEW_INSTANCE_POLL_RATE_SECONDS) - - def start(self): - self.stats_mgr.start() - - self.async_task = self.event_loop.create_task(self.run_per_host_websocket()) - return self.async_task diff --git a/awx/settings/defaults.py b/awx/settings/defaults.py index 33c6eda725..de00503978 100644 --- a/awx/settings/defaults.py +++ b/awx/settings/defaults.py @@ -866,9 +866,9 @@ LOGGING = { 'awx.main.commands.run_callback_receiver': {'handlers': ['callback_receiver']}, # level handled by dynamic_level_filter 'awx.main.dispatch': {'handlers': ['dispatcher']}, 'awx.main.consumers': {'handlers': ['console', 'file', 'tower_warnings'], 'level': 'INFO'}, - 'awx.main.wsbroadcast': {'handlers': ['wsbroadcast']}, 'awx.main.rsyslog_configurer': {'handlers': ['rsyslog_configurer']}, 'awx.main.cache_clear': {'handlers': ['cache_clear']}, + 'awx.main.wsrelay': {'handlers': ['wsrelay']}, 'awx.main.commands.inventory_import': {'handlers': ['inventory_import'], 'propagate': False}, 'awx.main.tasks': {'handlers': ['task_system', 'external_logger'], 'propagate': False}, 'awx.main.analytics': {'handlers': ['task_system', 'external_logger'], 'level': 'INFO', 'propagate': False}, @@ -895,7 +895,7 @@ handler_config = { 'tower_warnings': {'filename': 'tower.log'}, 'callback_receiver': {'filename': 'callback_receiver.log'}, 'dispatcher': {'filename': 'dispatcher.log', 'formatter': 'dispatcher'}, - 'wsbroadcast': {'filename': 'wsbroadcast.log'}, + 'wsrelay': {'filename': 'wsrelay.log'}, 'task_system': {'filename': 'task_system.log'}, 'rbac_migrations': {'filename': 'tower_rbac_migrations.log'}, 'job_lifecycle': {'filename': 'job_lifecycle.log', 'formatter': 'job_lifecycle'}, diff --git a/docs/websockets.md b/docs/websockets.md index a9fcd43926..84e1226594 100644 --- a/docs/websockets.md +++ b/docs/websockets.md @@ -10,13 +10,13 @@ To communicate between our different services we use websockets. Every AWX node Inside AWX we use the `emit_channel_notification` function which places messages onto the queue. The messages are given an explicit event group and event type which we later use in our wire protocol to control message delivery to the client. -### Broadcast Backplane +### Relay Backplane -Previously, AWX leveraged RabbitMQ to deliver Ansible events that emanated from one AWX node to all other AWX nodes so that any client listening and subscribed to the Websockets could get events from any running playbook. We are since moved off of RabbitMQ and onto a per-node local Redis instance. To maintain the requirement that any Websocket connection can receive events from any playbook running on any AWX node we still need to deliver every event to every AWX node. AWX does this via a fully connected Websocket backplane. +Previously, AWX leveraged RabbitMQ to deliver Ansible events that emanated from one AWX node to all other AWX nodes so that any client listening and subscribed to the Websockets could get events from any running playbook. We are since moved off of RabbitMQ and onto a per-node local Redis instance. To maintain the requirement that any Websocket connection can receive events from any playbook running on any AWX node we still need to deliver every event to every AWX node. AWX does this via a fully connected Websocket backplane. -#### Broadcast Backplane Token +#### Relay Backplane Token -AWX node(s) connect to every other node via the Websocket backplane. The backplane websockets initiate from the `wsbroadcast` process and connect to other nodes via the same nginx process that serves webpage websocket connections and marshalls incoming web/API requests. If you have configured AWX to run with an ssl terminated connection in front of nginx then you likely will have nginx configured to handle http traffic and thus the websocket connection will flow unencrypted over http. If you have nginx configured with ssl enabled, then the websocket traffic will flow encrypted. +AWX node(s) connect to every other node via the Websocket backplane. The backplane websockets initiate from the `wsrelay` process and connect to other nodes via the same nginx process that serves webpage websocket connections and marshalls incoming web/API requests. If you have configured AWX to run with an ssl terminated connection in front of nginx then you likely will have nginx configured to handle http traffic and thus the websocket connection will flow unencrypted over http. If you have nginx configured with ssl enabled, then the websocket traffic will flow encrypted. Authentication is accomplished via a shared secret that is generated and set at playbook install time. The shared secret is used to derive a payload that is exchanged via the http(s) header `secret`. The shared secret payload consists of a a `secret`, containing the shared secret, and a `nonce` which is used to mitigate replay attack windows. @@ -65,14 +65,14 @@ This section will specifically discuss deployment in the context of websockets a | `nginx` | listens on ports 80/443, handles HTTPS proxying, serves static assets, routes requests for `daphne` and `uwsgi` | | `uwsgi` | listens on port 8050, handles API requests | | `daphne` | listens on port 8051, handles websocket requests | -| `wsbroadcast` | no listening port, forwards all group messages to all cluster nodes | +| `wsrelay` | no listening port, forwards all group messages to all cluster nodes | | `supervisord` | (production-only) handles the process management of all the services except `nginx` | When a request comes in to `nginx` and has the `Upgrade` header and is for the path `/websocket`, then `nginx` knows that it should be routing that request to our `daphne` service. `daphne` handles websocket connections proxied by nginx. -`wsbroadcast` fully connects all cluster nodes via the `/websocket/broadcast/` endpoint to every other cluster nodes. Sends a copy of all group websocket messages to all other cluster nodes (i.e. job event type messages). +`wsrelay` fully connects all cluster nodes via the `/websocket/broadcast/` endpoint to every other cluster nodes. Sends a copy of all group websocket messages to all other cluster nodes (i.e. job event type messages). ### Development - `nginx` listens on 8013/8043 instead of 80/443 diff --git a/tools/ansible/roles/dockerfile/templates/supervisor.conf.j2 b/tools/ansible/roles/dockerfile/templates/supervisor.conf.j2 index d1d902a16c..c622d15645 100644 --- a/tools/ansible/roles/dockerfile/templates/supervisor.conf.j2 +++ b/tools/ansible/roles/dockerfile/templates/supervisor.conf.j2 @@ -22,12 +22,11 @@ stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 [program:uwsgi] - {% if kube_dev | bool %} command = make uwsgi directory = /awx_devel environment = - DEV_RELOAD_COMMAND='supervisorctl -c /etc/supervisord_task.conf restart all; supervisorctl restart tower-processes:daphne tower-processes:wsbroadcast' + DEV_RELOAD_COMMAND='supervisorctl -c /etc/supervisord_task.conf restart all; supervisorctl restart tower-processes:daphne' {% else %} command = /var/lib/awx/venv/awx/bin/uwsgi /etc/tower/uwsgi.ini {% endif %} @@ -58,12 +57,12 @@ stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 -[program:wsbroadcast] +[program:heartbeet] {% if kube_dev | bool %} -command = make wsbroadcast +command = make heartbeet directory = /awx_devel {% else %} -command = awx-manage run_wsbroadcast +command = awx-manage run_heartbeet directory = /var/lib/awx {% endif %} autorestart = true @@ -87,7 +86,7 @@ stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 [group:tower-processes] -programs=nginx,uwsgi,daphne,wsbroadcast,awx-cache-clear +programs=nginx,uwsgi,daphne,awx-cache-clear,heartbeet priority=5 [eventlistener:superwatcher] diff --git a/tools/ansible/roles/dockerfile/templates/supervisor_task.conf.j2 b/tools/ansible/roles/dockerfile/templates/supervisor_task.conf.j2 index a2f2bd5298..9abd6b49b4 100644 --- a/tools/ansible/roles/dockerfile/templates/supervisor_task.conf.j2 +++ b/tools/ansible/roles/dockerfile/templates/supervisor_task.conf.j2 @@ -22,6 +22,23 @@ stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 +[program:wsrelay] +{% if kube_dev | bool %} +command = make wsrelay +directory = /awx_devel +{% else %} +command = awx-manage run_wsrelay +directory = /var/lib/awx +{% endif %} +autorestart = true +startsecs = 30 +stopasgroup=true +killasgroup=true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 + [program:callback-receiver] {% if kube_dev | bool %} command = make receiver diff --git a/tools/docker-compose/README.md b/tools/docker-compose/README.md index e2018b9adc..b450398ee0 100644 --- a/tools/docker-compose/README.md +++ b/tools/docker-compose/README.md @@ -293,7 +293,7 @@ Certain features or bugs are only applicable when running a cluster of AWX nodes `CONTROL_PLANE_NODE_COUNT` is configurable and defaults to 1, effectively a non-clustered AWX. -Note that you may see multiple messages of the form `2021-03-04 20:11:47,666 WARNING [-] awx.main.wsbroadcast Connection from awx_2 to awx_5 failed: 'Cannot connect to host awx_5:8013 ssl:False [Name or service not known]'.`. This can happen when you bring up a cluster of many nodes, say 10, then you bring up a cluster of less nodes, say 3. In this example, there will be 7 `Instance` records in the database that represent AWX instances. The AWX development environment mimics the VM deployment (vs. kubernetes) and expects the missing nodes to be brought back to healthy by the admin. The warning message you are seeing is all of the AWX nodes trying to connect the websocket backplane. You can manually delete the `Instance` records from the database i.e. `Instance.objects.get(hostname='awx_9').delete()` to stop the warnings. +Note that you may see multiple messages of the form `2021-03-04 20:11:47,666 WARNING [-] awx.main.wsrelay Connection from awx_2 to awx_5 failed: 'Cannot connect to host awx_5:8013 ssl:False [Name or service not known]'.`. This can happen when you bring up a cluster of many nodes, say 10, then you bring up a cluster of less nodes, say 3. In this example, there will be 7 `Instance` records in the database that represent AWX instances. The AWX development environment mimics the VM deployment (vs. kubernetes) and expects the missing nodes to be brought back to healthy by the admin. The warning message you are seeing is all of the AWX nodes trying to connect the websocket backplane. You can manually delete the `Instance` records from the database i.e. `Instance.objects.get(hostname='awx_9').delete()` to stop the warnings. ### Start with Minikube diff --git a/tools/docker-compose/ansible/roles/sources/templates/haproxy.cfg.j2 b/tools/docker-compose/ansible/roles/sources/templates/haproxy.cfg.j2 index fab09ffc8e..f2aa3b4ec2 100644 --- a/tools/docker-compose/ansible/roles/sources/templates/haproxy.cfg.j2 +++ b/tools/docker-compose/ansible/roles/sources/templates/haproxy.cfg.j2 @@ -32,7 +32,7 @@ backend nodes option httpchk HEAD / HTTP/1.1\r\nHost:localhost {% for i in range(control_plane_node_count|int) %} {% set container_postfix = loop.index %} - server tools_awx_{{ container_postfix }} tools_awx_{{ container_postfix }}:8013 check + server tools_awx_{{ container_postfix }} tools_awx_{{ container_postfix }}:8013 check inter 10s {% endfor %} backend nodes_ssl @@ -40,7 +40,7 @@ backend nodes_ssl balance roundrobin {% for i in range(control_plane_node_count|int) %} {% set container_postfix = loop.index %} - server tools_awx_{{ container_postfix }} tools_awx_{{ container_postfix }}:8043 check + server tools_awx_{{ container_postfix }} tools_awx_{{ container_postfix }}:8043 check inter 10s {% endfor %} listen stats diff --git a/tools/docker-compose/supervisor.conf b/tools/docker-compose/supervisor.conf index 76d7d0dba4..367a2cef53 100644 --- a/tools/docker-compose/supervisor.conf +++ b/tools/docker-compose/supervisor.conf @@ -8,31 +8,25 @@ command = make dispatcher autorestart = true stopasgroup=true killasgroup=true -stdout_logfile=/dev/stdout -stdout_logfile_maxbytes=0 -stderr_logfile=/dev/stderr -stderr_logfile_maxbytes=0 +stdout_events_enabled = true +stderr_events_enabled = true [program:awx-receiver] command = make receiver autorestart = true stopasgroup=true killasgroup=true -stdout_logfile=/dev/stdout -stdout_logfile_maxbytes=0 -stderr_logfile=/dev/stderr -stderr_logfile_maxbytes=0 +stdout_events_enabled = true +stderr_events_enabled = true -[program:awx-wsbroadcast] -command = make wsbroadcast +[program:awx-wsrelay] +command = make wsrelay autorestart = true autorestart = true stopasgroup=true killasgroup=true -stdout_logfile=/dev/stdout -stdout_logfile_maxbytes=0 -stderr_logfile=/dev/stderr -stderr_logfile_maxbytes=0 +stdout_events_enabled = true +stderr_events_enabled = true [program:awx-rsyslog-configurer] command = make rsyslog-configurer @@ -61,30 +55,24 @@ stopwaitsecs = 1 stopsignal=KILL stopasgroup=true killasgroup=true -stdout_logfile=/dev/stdout -stdout_logfile_maxbytes=0 -stderr_logfile=/dev/stderr -stderr_logfile_maxbytes=0 +stdout_events_enabled = true +stderr_events_enabled = true [program:awx-daphne] command = make daphne autorestart = true stopasgroup=true killasgroup=true -stdout_logfile=/dev/stdout -stdout_logfile_maxbytes=0 -stderr_logfile=/dev/stderr -stderr_logfile_maxbytes=0 +stdout_events_enabled = true +stderr_events_enabled = true [program:awx-nginx] command = make nginx autorestart = true stopasgroup=true killasgroup=true -stdout_logfile=/dev/stdout -stdout_logfile_maxbytes=0 -stderr_logfile=/dev/stderr -stderr_logfile_maxbytes=0 +stdout_events_enabled = true +stderr_events_enabled = true [program:awx-rsyslogd] command = rsyslogd -n -i /var/run/awx-rsyslog/rsyslog.pid -f /var/lib/awx/rsyslog/rsyslog.conf @@ -100,13 +88,11 @@ command = receptor --config /etc/receptor/receptor.conf autorestart = true stopasgroup=true killasgroup=true -stdout_logfile=/dev/stdout -stdout_logfile_maxbytes=0 -stderr_logfile=/dev/stderr -stderr_logfile_maxbytes=0 +stdout_events_enabled = true +stderr_events_enabled = true [group:tower-processes] -programs=awx-dispatcher,awx-receiver,awx-uwsgi,awx-daphne,awx-nginx,awx-wsbroadcast,awx-rsyslogd, awx-cache-clear +programs=awx-dispatcher,awx-receiver,awx-uwsgi,awx-daphne,awx-nginx,awx-wsrelay,awx-rsyslogd,awx-cache-clear priority=5 [program:awx-autoreload] @@ -115,10 +101,6 @@ autostart = true autorestart = true stopasgroup=true killasgroup=true -stdout_logfile=/dev/stdout -stdout_logfile_maxbytes=0 -stderr_logfile=/dev/stderr -stderr_logfile_maxbytes=0 stdout_events_enabled = true stderr_events_enabled = true @@ -127,9 +109,6 @@ command=stop-supervisor events=PROCESS_STATE_FATAL autorestart = true stderr_logfile=/dev/stdout -stderr_logfile_maxbytes=0 -stdout_logfile=/dev/stdout -stdout_logfile_maxbytes=0 [unix_http_server] file=/var/run/supervisor/supervisor.sock From a987249ca65411243d13d5ab9c6da8eab21a7e1e Mon Sep 17 00:00:00 2001 From: Rick Elrod Date: Wed, 30 Nov 2022 13:41:46 -0600 Subject: [PATCH 13/52] dedent a block that was clearly meant to be de-dented Signed-off-by: Rick Elrod --- awx/main/consumers.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/awx/main/consumers.py b/awx/main/consumers.py index 433ffe6e2b..d830c03a52 100644 --- a/awx/main/consumers.py +++ b/awx/main/consumers.py @@ -201,10 +201,10 @@ class EventConsumer(AsyncJsonWebsocketConsumer): for group_name in new_groups_exclusive: await self.channel_layer.group_add(group_name, self.channel_name) - await self.channel_layer.group_send( - settings.BROADCAST_WEBSOCKET_GROUP_NAME, - {"type": "consumer.subscribe", "groups": list(new_groups), "origin_channel": self.channel_name}, - ) + await self.channel_layer.group_send( + settings.BROADCAST_WEBSOCKET_GROUP_NAME, + {"type": "consumer.subscribe", "groups": list(new_groups), "origin_channel": self.channel_name}, + ) self.scope['session']['groups'] = new_groups await self.send_json({"groups_current": list(new_groups), "groups_left": list(old_groups), "groups_joined": list(new_groups_exclusive)}) From 1c2eb229566693e82239c87ad6ec5e351834edf9 Mon Sep 17 00:00:00 2001 From: Rick Elrod Date: Tue, 6 Dec 2022 19:16:59 -0600 Subject: [PATCH 14/52] Remove some debug code and modify logging a bit Signed-off-by: Rick Elrod --- awx/main/wsrelay.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/awx/main/wsrelay.py b/awx/main/wsrelay.py index 4794ee9ea2..1f97690c6d 100644 --- a/awx/main/wsrelay.py +++ b/awx/main/wsrelay.py @@ -107,12 +107,12 @@ class WebsocketRelayConnection: self.stats.record_connection_lost() raise except client_exceptions.ClientConnectorError as e: - logger.warning(f"Connection from {self.name} to {self.remote_host} failed: '{e}'.") + logger.warning(f"Connection from {self.name} to {self.remote_host} failed: '{e}'.", exc_info=True) except asyncio.TimeoutError: logger.warning(f"Connection from {self.name} to {self.remote_host} timed out.") except Exception as e: # Early on, this is our canary. I'm not sure what exceptions we can really encounter. - logger.exception(f"Connection from {self.name} to {self.remote_host} failed for unknown reason: '{e}'.") + logger.warning(f"Connection from {self.name} to {self.remote_host} failed for unknown reason: '{e}'.", exc_info=True) else: logger.warning(f"Connection from {self.name} to {self.remote_host} list.") @@ -143,10 +143,6 @@ class WebsocketRelayConnection: logger.warning(logmsg) continue - from remote_pdb import RemotePdb - - RemotePdb('127.0.0.1', 4444).set_trace() - if payload.get("type") == "consumer.subscribe": for group in payload['groups']: name = f"{self.remote_host}-{group}" @@ -155,14 +151,20 @@ class WebsocketRelayConnection: producer = self.event_loop.create_task(self.run_producer(name, websocket, group)) self.producers[name] = {"task": producer, "subscriptions": {origin_channel}} + logger.debug(f"Producer {name} started.") else: self.producers[name]["subscriptions"].add(origin_channel) + logger.debug(f"Connection from {self.name} to {self.remote_host} added subscription to {group}.") if payload.get("type") == "consumer.unsubscribe": for group in payload['groups']: name = f"{self.remote_host}-{group}" origin_channel = payload['origin_channel'] - self.producers[name]["subscriptions"].remove(origin_channel) + try: + self.producers[name]["subscriptions"].remove(origin_channel) + logger.debug(f"Unsubscribed {origin_channel} from {name}") + except KeyError: + logger.warning(f"Producer {name} not found.") async def run_producer(self, name, websocket, group): try: From a9e7508e92e182dde921b207e951ed7c4624d70a Mon Sep 17 00:00:00 2001 From: Rick Elrod Date: Thu, 8 Dec 2022 03:22:20 -0600 Subject: [PATCH 15/52] WIP: Make wsrelay listen for pg_notify heartbeat Signed-off-by: Rick Elrod --- awx/main/wsrelay.py | 89 ++++++++++++++++++++++++----------- requirements/requirements.in | 1 + requirements/requirements.txt | 4 +- 3 files changed, 66 insertions(+), 28 deletions(-) diff --git a/awx/main/wsrelay.py b/awx/main/wsrelay.py index 1f97690c6d..735386a48a 100644 --- a/awx/main/wsrelay.py +++ b/awx/main/wsrelay.py @@ -12,6 +12,8 @@ from channels.db import database_sync_to_async from django.conf import settings from django.apps import apps +import psycopg + from awx.main.analytics.broadcast_websocket import ( RelayWebsocketStats, RelayWebsocketStatsManager, @@ -20,27 +22,12 @@ import awx.main.analytics.subsystem_metrics as s_metrics logger = logging.getLogger('awx.main.wsrelay') - def wrap_broadcast_msg(group, message: str): # TODO: Maybe wrap as "group","message" so that we don't need to # encode/decode as json. return dict(group=group, message=message) -@sync_to_async -def get_broadcast_hosts(): - Instance = apps.get_model('main', 'Instance') - instances = ( - Instance.objects.exclude(hostname=Instance.objects.my_hostname()) - .exclude(node_type='execution') - .exclude(node_type='hop') - .order_by('hostname') - .values('hostname', 'ip_address') - .distinct() - ) - return {i['hostname']: i['ip_address'] or i['hostname'] for i in instances} - - def get_local_host(): Instance = apps.get_model('main', 'Instance') return Instance.objects.my_hostname() @@ -198,41 +185,89 @@ class WebsocketRelayConnection: class WebSocketRelayManager(object): def __init__(self): - self.relay_connections = dict() self.local_hostname = get_local_host() - self.event_loop = asyncio.get_event_loop() - self.stats_mgr = RelayWebsocketStatsManager(self.event_loop, self.local_hostname) + self.relay_connections = dict() + # hostname -> ip + self.known_hosts: Dict[str, str] = dict() + + async def pg_consumer(self, conn): + try: + await conn.execute("LISTEN wsrelay_rx_from_web") + async for notif in conn.notifies(): + if notif is not None and notif.channel == "wsrelay_rx_from_web": + try: + payload = json.loads(notif.payload) + except json.JSONDecodeError: + logmsg = "Failed to decode message from pg_notify channel `wsrelay_rx_from_web`" + if logger.isEnabledFor(logging.DEBUG): + logmsg = "{} {}".format(logmsg, payload) + logger.warning(logmsg) + continue + + if payload.get("action") == "online": + hostname = payload["hostname"] + ip = payload["ip"] + self.known_hosts[hostname] = ip + logger.info(f"Web host {hostname} ({ip}) is online.") + elif payload.get("action") == "offline": + hostname = payload["hostname"] + del self.known_hosts[hostname] + logger.info(f"Web host {host} ({ip}) is offline.") + except Exception as e: + # This catch-all is the same as the one above. asyncio will NOT log exceptions anywhere, so we need to do so ourselves. + logger.exception(f"pg_consumer exception") async def run(self): - self.stats_mgr.start() + event_loop = asyncio.get_running_loop() + + stats_mgr = RelayWebsocketStatsManager(event_loop, self.local_hostname) + stats_mgr.start() + + # Set up a pg_notify consumer for allowing web nodes to "provision" and "deprovision" themselves gracefully. + database_conf = settings.DATABASES['default'] + async_conn = await psycopg.AsyncConnection.connect( + dbname=database_conf['NAME'], + host=database_conf['HOST'], + user=database_conf['USER'], + password=database_conf['PASSWORD'], + port=database_conf['PORT'], + **database_conf.get("OPTIONS", {}), + ) + await async_conn.set_autocommit(True) + event_loop.create_task(self.pg_consumer(async_conn)) # Establishes a websocket connection to /websocket/relay on all API servers while True: - known_hosts = await get_broadcast_hosts() - future_remote_hosts = known_hosts.keys() + logger.info("Current known hosts: {}".format(self.known_hosts)) + future_remote_hosts = self.known_hosts.keys() current_remote_hosts = self.relay_connections.keys() deleted_remote_hosts = set(current_remote_hosts) - set(future_remote_hosts) new_remote_hosts = set(future_remote_hosts) - set(current_remote_hosts) remote_addresses = {k: v.remote_host for k, v in self.relay_connections.items()} - for hostname, address in known_hosts.items(): + for hostname, address in self.known_hosts.items(): if hostname in self.relay_connections and address != remote_addresses[hostname]: deleted_remote_hosts.add(hostname) new_remote_hosts.add(hostname) if deleted_remote_hosts: - logger.warning(f"Removing {deleted_remote_hosts} from websocket broadcast list") + logger.info(f"Removing {deleted_remote_hosts} from websocket broadcast list") + if new_remote_hosts: - logger.warning(f"Adding {new_remote_hosts} to websocket broadcast list") + logger.info(f"Adding {new_remote_hosts} to websocket broadcast list") for h in deleted_remote_hosts: self.relay_connections[h].cancel() del self.relay_connections[h] - self.stats_mgr.delete_remote_host_stats(h) + stats_mgr.delete_remote_host_stats(h) + logger.error(f"New remote hosts: {new_remote_hosts}") for h in new_remote_hosts: - stats = self.stats_mgr.new_remote_host_stats(h) - relay_connection = WebsocketRelayConnection(name=self.local_hostname, stats=stats, remote_host=known_hosts[h]) + logger.error("we are here once") + stats = stats_mgr.new_remote_host_stats(h) + logger.error("but now we are not?") + logger.info(f"Starting relay connection to {h}") + relay_connection = WebsocketRelayConnection(name=self.local_hostname, stats=stats, remote_host=self.known_hosts[h]) relay_connection.start() self.relay_connections[h] = relay_connection diff --git a/requirements/requirements.in b/requirements/requirements.in index e66ce702cc..e7d7722f28 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -36,6 +36,7 @@ openshift pexpect==4.7.0 # see library notes prometheus_client psycopg2 +psycopg psutil pygerduty pyparsing==2.4.6 # Upgrading to v3 of pyparsing introduce errors on smart host filtering: Expected 'or' term, found 'or' (at char 15), (line:1, col:16) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index a8bd03a801..f45e0acb87 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -265,6 +265,8 @@ prometheus-client==0.15.0 # via -r /awx_devel/requirements/requirements.in psutil==5.9.4 # via -r /awx_devel/requirements/requirements.in +psycopg==3.1.4 + # via -r /awx_devel/requirements/requirements.in psycopg2==2.9.5 # via -r /awx_devel/requirements/requirements.in ptyprocess==0.7.0 @@ -425,7 +427,7 @@ txaio==22.2.1 typing-extensions==4.4.0 # via # azure-core - # pydantic + # psycopg # setuptools-rust # setuptools-scm # twisted From 4f5bc992a0d3d59a89911e4b64bbeb3b90fe1327 Mon Sep 17 00:00:00 2001 From: Rick Elrod Date: Fri, 9 Dec 2022 00:54:40 -0600 Subject: [PATCH 16/52] fix merge from devel - wsbroadcast -> wsrelay Signed-off-by: Rick Elrod --- awx/settings/defaults.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awx/settings/defaults.py b/awx/settings/defaults.py index de00503978..a9d9a13925 100644 --- a/awx/settings/defaults.py +++ b/awx/settings/defaults.py @@ -877,7 +877,7 @@ LOGGING = { 'awx.main.signals': {'level': 'INFO'}, # very verbose debug-level logs 'awx.api.permissions': {'level': 'INFO'}, # very verbose debug-level logs 'awx.analytics': {'handlers': ['external_logger'], 'level': 'INFO', 'propagate': False}, - 'awx.analytics.broadcast_websocket': {'handlers': ['console', 'file', 'wsbroadcast', 'external_logger'], 'level': 'INFO', 'propagate': False}, + 'awx.analytics.broadcast_websocket': {'handlers': ['console', 'file', 'wsrelay', 'external_logger'], 'level': 'INFO', 'propagate': False}, 'awx.analytics.performance': {'handlers': ['console', 'file', 'tower_warnings', 'external_logger'], 'level': 'DEBUG', 'propagate': False}, 'awx.analytics.job_lifecycle': {'handlers': ['console', 'job_lifecycle'], 'level': 'DEBUG', 'propagate': False}, 'django_auth_ldap': {'handlers': ['console', 'file', 'tower_warnings'], 'level': 'DEBUG'}, From 2e0f25150c09f6cf6c653b20b8df2917d772f337 Mon Sep 17 00:00:00 2001 From: Rick Elrod Date: Fri, 9 Dec 2022 00:17:31 -0600 Subject: [PATCH 17/52] Start of heartbeet daemon Signed-off-by: Rick Elrod --- Makefile | 6 ++ awx/main/management/commands/run_heartbeet.py | 70 +++++++++++++++++++ awx/main/wsrelay.py | 24 ++++--- awx/settings/defaults.py | 3 + tools/docker-compose/supervisor.conf | 11 ++- 5 files changed, 104 insertions(+), 10 deletions(-) create mode 100644 awx/main/management/commands/run_heartbeet.py diff --git a/Makefile b/Makefile index ee434fc0b7..97071b8f0b 100644 --- a/Makefile +++ b/Makefile @@ -229,6 +229,12 @@ wsrelay: fi; \ $(PYTHON) manage.py run_wsrelay +heartbeet: + @if [ "$(VENV_BASE)" ]; then \ + . $(VENV_BASE)/awx/bin/activate; \ + fi; \ + $(PYTHON) manage.py run_heartbeet + ## Run to start the background task dispatcher for development. dispatcher: @if [ "$(VENV_BASE)" ]; then \ diff --git a/awx/main/management/commands/run_heartbeet.py b/awx/main/management/commands/run_heartbeet.py new file mode 100644 index 0000000000..3d6d4aaa82 --- /dev/null +++ b/awx/main/management/commands/run_heartbeet.py @@ -0,0 +1,70 @@ +import json +import logging +import os +import time + +from django.core.management.base import BaseCommand +from django.conf import settings + +from awx.main.dispatch import pg_bus_conn + +logger = logging.getLogger('awx.main.commands.run_heartbeet') + + +class Command(BaseCommand): + help = 'Launch the web server beacon (heartbeet)' + + # def add_arguments(self, parser): + # parser.add_argument('--status', dest='status', action='store_true', help='print the internal state of any running broadcast websocket') + + def print_banner(self): + heartbeet = """ + ********** ********** + ************* ************* +***************************** + ***********HEART*********** + ************************* + ******************* + *************** _._ + *********** /`._ `'. __ + ******* \ .\| \ _'` `) + *** (``_) \| ).'` /`- / + * `\ `;\_ `\\//`-'` / + \ `'.'.| / __/` + `'--v_|/`'` + __||-._ + /'` `-`` `'\\ + / .'` ) + \ BEET ' ) + \. / + '. /'` + `) | + // + '(. + `\`. + ``""" + print(heartbeet) + + def construct_payload(self, action='online'): + payload = { + 'hostname': settings.CLUSTER_HOST_ID, + 'ip': os.environ.get('MY_POD_IP'), + 'action': action, + } + return json.dumps(payload) + + def do_hearbeat_loop(self): + with pg_bus_conn(new_connection=True) as conn: + while True: + logger.debug('Sending heartbeat') + conn.notify('web_heartbeet', self.construct_payload()) + time.sleep(settings.BROADCAST_WEBSOCKET_BEACON_FROM_WEB_RATE_SECONDS) + + # TODO: Send a message with action=offline if we notice a SIGTERM or SIGINT + # (wsrelay can use this to remove the node quicker) + def handle(self, *arg, **options): + self.print_banner() + + # Note: We don't really try any reconnect logic to pg_notify here, + # just let supervisor restart if we fail. + self.do_hearbeat_loop() diff --git a/awx/main/wsrelay.py b/awx/main/wsrelay.py index 735386a48a..a1abc3ec3d 100644 --- a/awx/main/wsrelay.py +++ b/awx/main/wsrelay.py @@ -22,6 +22,7 @@ import awx.main.analytics.subsystem_metrics as s_metrics logger = logging.getLogger('awx.main.wsrelay') + def wrap_broadcast_msg(group, message: str): # TODO: Maybe wrap as "group","message" so that we don't need to # encode/decode as json. @@ -192,27 +193,35 @@ class WebSocketRelayManager(object): async def pg_consumer(self, conn): try: - await conn.execute("LISTEN wsrelay_rx_from_web") + await conn.execute("LISTEN web_heartbeet") async for notif in conn.notifies(): - if notif is not None and notif.channel == "wsrelay_rx_from_web": + if notif is not None and notif.channel == "web_heartbeet": try: payload = json.loads(notif.payload) except json.JSONDecodeError: - logmsg = "Failed to decode message from pg_notify channel `wsrelay_rx_from_web`" + logmsg = "Failed to decode message from pg_notify channel `web_heartbeet`" if logger.isEnabledFor(logging.DEBUG): logmsg = "{} {}".format(logmsg, payload) logger.warning(logmsg) continue + # Skip if the message comes from the same host we are running on + # In this case, we'll be sharing a redis, no need to relay. + if payload.get("hostname") == self.local_hostname: + continue + if payload.get("action") == "online": hostname = payload["hostname"] ip = payload["ip"] + if ip is None: + # If we don't get an IP, just try the hostname, maybe it resolves + ip = hostname self.known_hosts[hostname] = ip - logger.info(f"Web host {hostname} ({ip}) is online.") + logger.debug(f"Web host {hostname} ({ip}) online heartbeat received.") elif payload.get("action") == "offline": hostname = payload["hostname"] del self.known_hosts[hostname] - logger.info(f"Web host {host} ({ip}) is offline.") + logger.debug(f"Web host {hostname} ({ip}) offline heartbeat received.") except Exception as e: # This catch-all is the same as the one above. asyncio will NOT log exceptions anywhere, so we need to do so ourselves. logger.exception(f"pg_consumer exception") @@ -261,12 +270,9 @@ class WebSocketRelayManager(object): del self.relay_connections[h] stats_mgr.delete_remote_host_stats(h) - logger.error(f"New remote hosts: {new_remote_hosts}") for h in new_remote_hosts: - logger.error("we are here once") stats = stats_mgr.new_remote_host_stats(h) - logger.error("but now we are not?") - logger.info(f"Starting relay connection to {h}") + logger.debug(f"Starting relay connection to {h}") relay_connection = WebsocketRelayConnection(name=self.local_hostname, stats=stats, remote_host=self.known_hosts[h]) relay_connection.start() self.relay_connections[h] = relay_connection diff --git a/awx/settings/defaults.py b/awx/settings/defaults.py index a9d9a13925..085309de13 100644 --- a/awx/settings/defaults.py +++ b/awx/settings/defaults.py @@ -1011,6 +1011,9 @@ BROADCAST_WEBSOCKET_NEW_INSTANCE_POLL_RATE_SECONDS = 10 # How often websocket process will generate stats BROADCAST_WEBSOCKET_STATS_POLL_RATE_SECONDS = 5 +# How often should web instances advertise themselves? +BROADCAST_WEBSOCKET_BEACON_FROM_WEB_RATE_SECONDS = 15 + DJANGO_GUID = {'GUID_HEADER_NAME': 'X-API-Request-Id'} # Name of the default task queue diff --git a/tools/docker-compose/supervisor.conf b/tools/docker-compose/supervisor.conf index 367a2cef53..a843edf342 100644 --- a/tools/docker-compose/supervisor.conf +++ b/tools/docker-compose/supervisor.conf @@ -28,6 +28,15 @@ killasgroup=true stdout_events_enabled = true stderr_events_enabled = true +[program:awx-heartbeet] +command = make heartbeet +autorestart = true +autorestart = true +stopasgroup=true +killasgroup=true +stdout_events_enabled = true +stderr_events_enabled = true + [program:awx-rsyslog-configurer] command = make rsyslog-configurer autorestart = true @@ -92,7 +101,7 @@ stdout_events_enabled = true stderr_events_enabled = true [group:tower-processes] -programs=awx-dispatcher,awx-receiver,awx-uwsgi,awx-daphne,awx-nginx,awx-wsrelay,awx-rsyslogd,awx-cache-clear +programs=awx-dispatcher,awx-receiver,awx-uwsgi,awx-daphne,awx-nginx,awx-wsrelay,awx-rsyslogd,awx-heartbeet priority=5 [program:awx-autoreload] From 5f41003fb111791d54170a2e20e6f3aef91d2251 Mon Sep 17 00:00:00 2001 From: Rick Elrod Date: Sat, 10 Dec 2022 02:40:48 -0600 Subject: [PATCH 18/52] Prevent looping issue when task/web share a Redis Signed-off-by: Rick Elrod --- awx/main/consumers.py | 2 +- awx/main/wsrelay.py | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/awx/main/consumers.py b/awx/main/consumers.py index d830c03a52..e2d47a96fb 100644 --- a/awx/main/consumers.py +++ b/awx/main/consumers.py @@ -240,6 +240,6 @@ def emit_channel_notification(group, payload): run_sync( channel_layer.group_send( group, - {"type": "internal.message", "text": payload_dumped}, + {"type": "internal.message", "text": payload_dumped, "needs_relay": True}, ) ) diff --git a/awx/main/wsrelay.py b/awx/main/wsrelay.py index a1abc3ec3d..e935850514 100644 --- a/awx/main/wsrelay.py +++ b/awx/main/wsrelay.py @@ -164,6 +164,14 @@ class WebsocketRelayConnection: while True: try: msg = await asyncio.wait_for(self.channel_layer.receive(consumer_channel), timeout=10) + if not msg.get("needs_relay"): + # This is added in by emit_channel_notification(). It prevents us from looping + # in the event that we are sharing a redis with a web instance. We'll see the + # message once (it'll have needs_relay=True), we'll delete that, and then forward + # the message along. The web instance will add it back to the same channels group, + # but it won't have needs_relay=True, so we'll ignore it. + continue + del msg["needs_relay"] except asyncio.TimeoutError: current_subscriptions = self.producers[name]["subscriptions"] if len(current_subscriptions) == 0: From 513f433f17af2813304edc886a73a3f914f07e7b Mon Sep 17 00:00:00 2001 From: Rick Elrod Date: Sat, 10 Dec 2022 03:47:11 -0600 Subject: [PATCH 19/52] Add comment for new psycopg dep Signed-off-by: Rick Elrod --- requirements/requirements.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.in b/requirements/requirements.in index e7d7722f28..72bdfd6db0 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -36,7 +36,7 @@ openshift pexpect==4.7.0 # see library notes prometheus_client psycopg2 -psycopg +psycopg # psycopg3 is used to listen for pg_notify messages from web servers in awx.main.wsrelay where asyncio is used psutil pygerduty pyparsing==2.4.6 # Upgrading to v3 of pyparsing introduce errors on smart host filtering: Expected 'or' term, found 'or' (at char 15), (line:1, col:16) From 704759d29a5e86e61815e1e3f2beec99eff2b27a Mon Sep 17 00:00:00 2001 From: Rick Elrod Date: Sun, 11 Dec 2022 01:29:24 -0600 Subject: [PATCH 20/52] add wsrelay to tower-processes Signed-off-by: Rick Elrod --- .../ansible/roles/dockerfile/templates/supervisor_task.conf.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/ansible/roles/dockerfile/templates/supervisor_task.conf.j2 b/tools/ansible/roles/dockerfile/templates/supervisor_task.conf.j2 index 9abd6b49b4..8c3a46342e 100644 --- a/tools/ansible/roles/dockerfile/templates/supervisor_task.conf.j2 +++ b/tools/ansible/roles/dockerfile/templates/supervisor_task.conf.j2 @@ -57,7 +57,7 @@ stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 [group:tower-processes] -programs=dispatcher,callback-receiver +programs=dispatcher,callback-receiver,wsrelay priority=5 [eventlistener:superwatcher] From 91bf49cdb3db48046435b43de765eb1e14f7a58d Mon Sep 17 00:00:00 2001 From: Rick Elrod Date: Sun, 11 Dec 2022 01:34:12 -0600 Subject: [PATCH 21/52] Remove auto-reconnect logic from wsrelay We no longer need to do this from wsrelay, as it will automatically try to reconnect when it hears the next beacon from heartbeet. This also cleans up the logic for what we do when we want to delete a node we previously knew about. Signed-off-by: Rick Elrod --- awx/main/wsrelay.py | 55 ++++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/awx/main/wsrelay.py b/awx/main/wsrelay.py index e935850514..29d6218a93 100644 --- a/awx/main/wsrelay.py +++ b/awx/main/wsrelay.py @@ -54,11 +54,12 @@ class WebsocketRelayConnection: self.channel_layer = None self.subsystem_metrics = s_metrics.Metrics(instance_name=name) self.producers = dict() + self.connected = False async def run_loop(self, websocket: aiohttp.ClientWebSocketResponse): raise RuntimeError("Implement me") - async def connect(self, attempt): + async def connect(self): from awx.main.consumers import WebsocketSecretAuthHelper # noqa logger.debug(f"Connection from {self.name} to {self.remote_host} attempt number {attempt}.") @@ -70,13 +71,6 @@ class WebsocketRelayConnection: if not self.channel_layer: self.channel_layer = get_channel_layer() - try: - if attempt > 0: - await asyncio.sleep(settings.BROADCAST_WEBSOCKET_RECONNECT_RETRY_RATE_SECONDS) - except asyncio.CancelledError: - logger.warning(f"Connection from {self.name} to {self.remote_host} cancelled") - raise - uri = f"{self.protocol}://{self.remote_host}:{self.remote_port}/websocket/relay/" timeout = aiohttp.ClientTimeout(total=10) @@ -86,14 +80,12 @@ class WebsocketRelayConnection: async with session.ws_connect(uri, ssl=self.verify_ssl, heartbeat=20) as websocket: logger.info(f"Connection from {self.name} to {self.remote_host} established.") self.stats.record_connection_established() - attempt = 0 + self.connected = True await self.run_connection(websocket) except asyncio.CancelledError: # TODO: Check if connected and disconnect # Possibly use run_until_complete() if disconnect is async logger.warning(f"Connection from {self.name} to {self.remote_host} cancelled.") - self.stats.record_connection_lost() - raise except client_exceptions.ClientConnectorError as e: logger.warning(f"Connection from {self.name} to {self.remote_host} failed: '{e}'.", exc_info=True) except asyncio.TimeoutError: @@ -102,14 +94,13 @@ class WebsocketRelayConnection: # Early on, this is our canary. I'm not sure what exceptions we can really encounter. logger.warning(f"Connection from {self.name} to {self.remote_host} failed for unknown reason: '{e}'.", exc_info=True) else: - logger.warning(f"Connection from {self.name} to {self.remote_host} list.") - - self.stats.record_connection_lost() - self.start(attempt=attempt + 1) - - def start(self, attempt=0): - self.async_task = self.event_loop.create_task(self.connect(attempt=attempt)) + logger.info(f"Connection from {self.name} to {self.remote_host} lost, but no exception was raised.") + finally: + self.connected = False + self.stats.record_connection_lost() + def start(self): + self.async_task = self.event_loop.create_task(self.connect()) return self.async_task def cancel(self): @@ -137,7 +128,6 @@ class WebsocketRelayConnection: origin_channel = payload['origin_channel'] if not self.producers.get(name): producer = self.event_loop.create_task(self.run_producer(name, websocket, group)) - self.producers[name] = {"task": producer, "subscriptions": {origin_channel}} logger.debug(f"Producer {name} started.") else: @@ -181,6 +171,12 @@ class WebsocketRelayConnection: continue await websocket.send_json(wrap_broadcast_msg(group, msg)) + except ConnectionResetError: + # This can be hit when a web node is scaling down and we try to write to it. + # There's really nothing to do in this case and it's a fairly typical thing to happen. + # We'll log it as debug, but it's not really a problem. + logger.debug(f"Producer {name} connection reset.") + pass except Exception: # Note, this is very intentional and important since we do not otherwise # ever check the result of this future. Without this line you will not see an error if @@ -231,7 +227,8 @@ class WebSocketRelayManager(object): del self.known_hosts[hostname] logger.debug(f"Web host {hostname} ({ip}) offline heartbeat received.") except Exception as e: - # This catch-all is the same as the one above. asyncio will NOT log exceptions anywhere, so we need to do so ourselves. + # This catch-all is the same as the one above. asyncio will eat the exception + # but we want to know about it. logger.exception(f"pg_consumer exception") async def run(self): @@ -261,12 +258,22 @@ class WebSocketRelayManager(object): deleted_remote_hosts = set(current_remote_hosts) - set(future_remote_hosts) new_remote_hosts = set(future_remote_hosts) - set(current_remote_hosts) - remote_addresses = {k: v.remote_host for k, v in self.relay_connections.items()} + # This loop handles if we get an advertisement from a host we already know about but + # the advertisement has a different IP than we are currently connected to. for hostname, address in self.known_hosts.items(): - if hostname in self.relay_connections and address != remote_addresses[hostname]: + if hostname not in self.relay_connections: + # We've picked up a new hostname that we don't know about yet. + continue + + if address != self.relay_connections[hostname].remote_host: deleted_remote_hosts.add(hostname) new_remote_hosts.add(hostname) + # Delete any hosts with closed connections + for hostname, relay_conn in self.relay_connections.items(): + if not relay_conn.connected: + deleted_remote_hosts.add(hostname) + if deleted_remote_hosts: logger.info(f"Removing {deleted_remote_hosts} from websocket broadcast list") @@ -276,6 +283,7 @@ class WebSocketRelayManager(object): for h in deleted_remote_hosts: self.relay_connections[h].cancel() del self.relay_connections[h] + del self.known_hosts[h] stats_mgr.delete_remote_host_stats(h) for h in new_remote_hosts: @@ -285,7 +293,4 @@ class WebSocketRelayManager(object): relay_connection.start() self.relay_connections[h] = relay_connection - # for host, conn in self.relay_connections.items(): - # logger.info(f"Current producers for {host}: {conn.producers}") - await asyncio.sleep(settings.BROADCAST_WEBSOCKET_NEW_INSTANCE_POLL_RATE_SECONDS) From 93c2c5661210fb91434cd1e27f4bb6a28168f693 Mon Sep 17 00:00:00 2001 From: Rick Elrod Date: Sun, 11 Dec 2022 01:36:34 -0600 Subject: [PATCH 22/52] [wsrelay] Copy the message payload before we relay We internally manipulate the message payload a bit (to know whether we are originating it on the task side or the web system is originating it). But when we get the message, we actually get a reference to the dict containing the payload. Other producers in wsrelay might still be acting on the message and deciding whether or not to relay it. So we need to manipulate and send a *copy* of the message, and leave the original alone. Signed-off-by: Rick Elrod --- awx/main/wsrelay.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/awx/main/wsrelay.py b/awx/main/wsrelay.py index 29d6218a93..38f5f6ddbf 100644 --- a/awx/main/wsrelay.py +++ b/awx/main/wsrelay.py @@ -161,6 +161,11 @@ class WebsocketRelayConnection: # the message along. The web instance will add it back to the same channels group, # but it won't have needs_relay=True, so we'll ignore it. continue + + # We need to copy the message because we're going to delete the needs_relay key + # and we don't want to modify the original message because other producers may + # still need to act on it. It seems weird, but it's necessary. + msg = dict(msg) del msg["needs_relay"] except asyncio.TimeoutError: current_subscriptions = self.producers[name]["subscriptions"] From 44463402a84ff1a21072b2c71c619d402999e954 Mon Sep 17 00:00:00 2001 From: Rick Elrod Date: Sun, 11 Dec 2022 01:38:44 -0600 Subject: [PATCH 23/52] [wsrelay] attempt to standardize logging levels This needs some work, but it's a start. Signed-off-by: Rick Elrod --- awx/main/wsrelay.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/awx/main/wsrelay.py b/awx/main/wsrelay.py index 38f5f6ddbf..43840e1691 100644 --- a/awx/main/wsrelay.py +++ b/awx/main/wsrelay.py @@ -62,7 +62,7 @@ class WebsocketRelayConnection: async def connect(self): from awx.main.consumers import WebsocketSecretAuthHelper # noqa - logger.debug(f"Connection from {self.name} to {self.remote_host} attempt number {attempt}.") + logger.debug(f"Connection attempt from {self.name} to {self.remote_host}") ''' Can not put get_channel_layer() in the init code because it is in the init @@ -116,7 +116,7 @@ class WebsocketRelayConnection: try: payload = json.loads(msg.data) except json.JSONDecodeError: - logmsg = "Failed to decode broadcast message" + logmsg = "Failed to decode message from web node" if logger.isEnabledFor(logging.DEBUG): logmsg = "{} {}".format(logmsg, payload) logger.warning(logmsg) @@ -150,6 +150,7 @@ class WebsocketRelayConnection: consumer_channel = await self.channel_layer.new_channel() await self.channel_layer.group_add(group, consumer_channel) + logger.debug(f"Producer {name} added to group {group} and is now awaiting messages.") while True: try: @@ -257,7 +258,7 @@ class WebSocketRelayManager(object): # Establishes a websocket connection to /websocket/relay on all API servers while True: - logger.info("Current known hosts: {}".format(self.known_hosts)) + # logger.info("Current known hosts: {}".format(self.known_hosts)) future_remote_hosts = self.known_hosts.keys() current_remote_hosts = self.relay_connections.keys() deleted_remote_hosts = set(current_remote_hosts) - set(future_remote_hosts) @@ -293,7 +294,6 @@ class WebSocketRelayManager(object): for h in new_remote_hosts: stats = stats_mgr.new_remote_host_stats(h) - logger.debug(f"Starting relay connection to {h}") relay_connection = WebsocketRelayConnection(name=self.local_hostname, stats=stats, remote_host=self.known_hosts[h]) relay_connection.start() self.relay_connections[h] = relay_connection From 33f070081cb3963beb80df6b07e3c9b2fa3213ad Mon Sep 17 00:00:00 2001 From: Seth Foster Date: Wed, 14 Dec 2022 12:33:54 -0500 Subject: [PATCH 24/52] Send subsystem metrics via wsrelay (#13333) Works by adding a dedicated producer in wsrelay that looks for local django channels message with group "metrics". The producer sends this to the consumer running in the web container. The consumer running in the web container handles the message by pushing it into the local redis instance. The django view that handles a request at the /api/v2/metrics endpoint will load this data from redis, format it, and return the response. --- awx/main/analytics/subsystem_metrics.py | 18 ++---------------- awx/main/consumers.py | 8 +++++++- awx/main/wsrelay.py | 6 ++++++ awx/settings/defaults.py | 3 +++ 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/awx/main/analytics/subsystem_metrics.py b/awx/main/analytics/subsystem_metrics.py index 439f084c5b..d8836b332f 100644 --- a/awx/main/analytics/subsystem_metrics.py +++ b/awx/main/analytics/subsystem_metrics.py @@ -9,7 +9,7 @@ from django.apps import apps from awx.main.consumers import emit_channel_notification from awx.main.utils import is_testing -root_key = 'awx_metrics' +root_key = settings.SUBSYSTEM_METRICS_REDIS_KEY_PREFIX logger = logging.getLogger('awx.main.analytics') @@ -264,13 +264,6 @@ class Metrics: data[field] = self.METRICS[field].decode(self.conn) return data - def store_metrics(self, data_json): - # called when receiving metrics from other instances - data = json.loads(data_json) - if self.instance_name != data['instance']: - logger.debug(f"{self.instance_name} received subsystem metrics from {data['instance']}") - self.conn.set(root_key + "_instance_" + data['instance'], data['metrics']) - def should_pipe_execute(self): if self.metrics_have_changed is False: return False @@ -309,15 +302,8 @@ class Metrics: 'instance': self.instance_name, 'metrics': self.serialize_local_metrics(), } - # store a local copy as well - self.store_metrics(json.dumps(payload)) - # 🚨🚨🚨🚨🚨🚨🚨🚨 - # TODO: rework how metrics are emitted and recorded. we used to exploit wsbroadcast's behavior of - # sending the same data out to every other node. - # Should we increment this data in redis but ultimately just store it in the database? - # emit_channel_notification("metrics", payload) - # 🚨🚨🚨🚨🚨🚨🚨🚨 + emit_channel_notification("metrics", payload) self.previous_send_metrics.set(current_time) self.previous_send_metrics.store_value(self.conn) diff --git a/awx/main/consumers.py b/awx/main/consumers.py index e2d47a96fb..f856ca915e 100644 --- a/awx/main/consumers.py +++ b/awx/main/consumers.py @@ -3,6 +3,7 @@ import logging import time import hmac import asyncio +import redis from django.core.serializers.json import DjangoJSONEncoder from django.conf import settings @@ -102,7 +103,12 @@ class RelayConsumer(AsyncJsonWebsocketConsumer): async def receive_json(self, data): (group, message) = unwrap_broadcast_msg(data) - await self.channel_layer.group_send(group, message) + if group == "metrics": + message = json.loads(message['text']) + conn = redis.Redis.from_url(settings.BROKER_URL) + conn.set(settings.SUBSYSTEM_METRICS_REDIS_KEY_PREFIX + "_instance_" + message['instance'], message['metrics']) + else: + await self.channel_layer.group_send(group, message) async def consumer_subscribe(self, event): await self.send_json(event) diff --git a/awx/main/wsrelay.py b/awx/main/wsrelay.py index 43840e1691..be0ea04162 100644 --- a/awx/main/wsrelay.py +++ b/awx/main/wsrelay.py @@ -107,6 +107,12 @@ class WebsocketRelayConnection: self.async_task.cancel() async def run_connection(self, websocket: aiohttp.ClientWebSocketResponse): + # create a dedicated subsystem metric producer to handle local subsystem + # metrics messages + # the "metrics" group is not subscribed to in the typical fashion, so we + # just explicitly create it + producer = self.event_loop.create_task(self.run_producer("metrics", websocket, "metrics")) + self.producers["metrics"] = {"task": producer, "subscriptions": {"metrics"}} async for msg in websocket: self.stats.record_message_received() diff --git a/awx/settings/defaults.py b/awx/settings/defaults.py index 085309de13..61fb2df764 100644 --- a/awx/settings/defaults.py +++ b/awx/settings/defaults.py @@ -228,6 +228,9 @@ JOB_EVENT_MAX_QUEUE_SIZE = 10000 # The number of job events to migrate per-transaction when moving from int -> bigint JOB_EVENT_MIGRATION_CHUNK_SIZE = 1000000 +# The prefix of the redis key that stores metrics +SUBSYSTEM_METRICS_REDIS_KEY_PREFIX = "awx_metrics" + # Histogram buckets for the callback_receiver_batch_events_insert_db metric SUBSYSTEM_METRICS_BATCH_INSERT_BUCKETS = [10, 50, 150, 350, 650, 2000] From e7fa730f81cec163340cfbd86ecba099f257ef35 Mon Sep 17 00:00:00 2001 From: Lila Yasin Date: Tue, 24 Jan 2023 19:16:17 -0500 Subject: [PATCH 25/52] Removed some commented out code and adjusted a few loggers to make more sense contextually. (#13424) --- awx/main/management/commands/run_heartbeet.py | 3 --- awx/main/management/commands/run_wsrelay.py | 4 ++-- awx/main/wsrelay.py | 2 +- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/awx/main/management/commands/run_heartbeet.py b/awx/main/management/commands/run_heartbeet.py index 3d6d4aaa82..199412dfab 100644 --- a/awx/main/management/commands/run_heartbeet.py +++ b/awx/main/management/commands/run_heartbeet.py @@ -14,9 +14,6 @@ logger = logging.getLogger('awx.main.commands.run_heartbeet') class Command(BaseCommand): help = 'Launch the web server beacon (heartbeet)' - # def add_arguments(self, parser): - # parser.add_argument('--status', dest='status', action='store_true', help='print the internal state of any running broadcast websocket') - def print_banner(self): heartbeet = """ ********** ********** diff --git a/awx/main/management/commands/run_wsrelay.py b/awx/main/management/commands/run_wsrelay.py index ce778b8356..8bdf6ea0a3 100644 --- a/awx/main/management/commands/run_wsrelay.py +++ b/awx/main/management/commands/run_wsrelay.py @@ -99,7 +99,7 @@ class Command(BaseCommand): executor = MigrationExecutor(connection) migrating = bool(executor.migration_plan(executor.loader.graph.leaf_nodes())) except Exception as exc: - logger.info(f'Error on startup of run_wsrelay (error: {exc}), retry in 10s...') + logger.warning(f'Error on startup of run_wsrelay (error: {exc}), retry in 10s...') time.sleep(10) return @@ -166,4 +166,4 @@ class Command(BaseCommand): websocket_relay_manager = WebSocketRelayManager() asyncio.run(websocket_relay_manager.run()) except KeyboardInterrupt: - logger.debug('Terminating Websocket Relayer') + logger.info('Terminating Websocket Relayer') diff --git a/awx/main/wsrelay.py b/awx/main/wsrelay.py index be0ea04162..77b2c8a393 100644 --- a/awx/main/wsrelay.py +++ b/awx/main/wsrelay.py @@ -94,7 +94,7 @@ class WebsocketRelayConnection: # Early on, this is our canary. I'm not sure what exceptions we can really encounter. logger.warning(f"Connection from {self.name} to {self.remote_host} failed for unknown reason: '{e}'.", exc_info=True) else: - logger.info(f"Connection from {self.name} to {self.remote_host} lost, but no exception was raised.") + logger.debug(f"Connection from {self.name} to {self.remote_host} lost, but no exception was raised.") finally: self.connected = False self.stats.record_connection_lost() From 29d222be83b99a951b24b87bd366c610a2b22f19 Mon Sep 17 00:00:00 2001 From: Jessica Mack Date: Wed, 1 Feb 2023 15:47:27 -0500 Subject: [PATCH 26/52] removed rsyslog queue, updated logger level Signed-off-by: Jessica Mack --- awx/main/management/commands/run_cache_clear.py | 2 +- awx/main/management/commands/run_dispatcher.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/awx/main/management/commands/run_cache_clear.py b/awx/main/management/commands/run_cache_clear.py index d058b8bd6e..dcb5c08aa9 100644 --- a/awx/main/management/commands/run_cache_clear.py +++ b/awx/main/management/commands/run_cache_clear.py @@ -23,7 +23,7 @@ class Command(BaseCommand): for e in conn.events(yield_timeouts=True): if e is not None: body = json.loads(e.payload) - logger.warning(f"Cache clear request received. Clearing now, payload: {e.payload}") + logger.info(f"Cache clear request received. Clearing now, payload: {e.payload}") TaskWorker.run_callable(body) else: logger.info('run_clear_cache got timeout') diff --git a/awx/main/management/commands/run_dispatcher.py b/awx/main/management/commands/run_dispatcher.py index 72fbfbedba..f7079c6a3c 100644 --- a/awx/main/management/commands/run_dispatcher.py +++ b/awx/main/management/commands/run_dispatcher.py @@ -76,7 +76,7 @@ class Command(BaseCommand): consumer = None try: - queues = ['tower_broadcast_all', 'tower_settings_change', 'rsyslog_configurer', get_local_queuename()] + queues = ['tower_broadcast_all', 'tower_settings_change', get_local_queuename()] consumer = AWXConsumerPG('dispatcher', TaskWorker(), queues, AutoscalePool(min_workers=4)) consumer.run() except KeyboardInterrupt: From 78652bdd7116a8ae82a44b6728cfc85fc213740d Mon Sep 17 00:00:00 2001 From: Jessica Mack Date: Wed, 1 Feb 2023 16:10:41 -0500 Subject: [PATCH 27/52] add functionality back to cache clear method Signed-off-by: Jessica Mack --- awx/main/tasks/system.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/awx/main/tasks/system.py b/awx/main/tasks/system.py index 30f5ae785f..1a3d1fa591 100644 --- a/awx/main/tasks/system.py +++ b/awx/main/tasks/system.py @@ -65,6 +65,7 @@ from awx.main.utils.external_logging import send_pg_notify from awx.main.tasks.receptor import get_receptor_ctl, worker_info, worker_cleanup, administrative_workunit_reaper, write_receptor_config from awx.main.consumers import emit_channel_notification from awx.main import analytics +from awx.conf import settings_registry from awx.main.analytics.subsystem_metrics import Metrics from rest_framework.exceptions import PermissionDenied @@ -244,6 +245,13 @@ def apply_cluster_membership_policies(): def clear_setting_cache(setting_keys): # log that cache is being cleared logger.info(f"clear_setting_cache of keys {setting_keys}") + orig_len = len(setting_keys) + for i in range(orig_len): + for dependent_key in settings_registry.get_dependent_settings(setting_keys[i]): + setting_keys.append(dependent_key) + cache_keys = set(setting_keys) + logger.debug('cache delete_many(%r)', cache_keys) + cache.delete_many(cache_keys) @task(queue='tower_broadcast_all') From 7cb890b603ef36aeb8d03377fc00b73f0005245b Mon Sep 17 00:00:00 2001 From: Hao Liu Date: Mon, 6 Feb 2023 15:49:57 -0500 Subject: [PATCH 28/52] minor fix-up due to merge conflict --- awx/main/routing.py | 4 ++-- awx_collection/plugins/modules/project_update.py | 3 +-- tools/ansible/roles/dockerfile/templates/Dockerfile.j2 | 1 - 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/awx/main/routing.py b/awx/main/routing.py index e45bf0a537..9625b23176 100644 --- a/awx/main/routing.py +++ b/awx/main/routing.py @@ -27,8 +27,8 @@ class AWXProtocolTypeRouter(ProtocolTypeRouter): websocket_urlpatterns = [ - re_path(r'websocket/$', consumers.EventConsumer), - re_path(r'websocket/relay/$', consumers.RelayConsumer), + re_path(r'websocket/$', consumers.EventConsumer.as_asgi()), + re_path(r'websocket/relay/$', consumers.RelayConsumer.as_asgi()), ] application = AWXProtocolTypeRouter( diff --git a/awx_collection/plugins/modules/project_update.py b/awx_collection/plugins/modules/project_update.py index 6cbcd39b6d..9d5a8841a7 100644 --- a/awx_collection/plugins/modules/project_update.py +++ b/awx_collection/plugins/modules/project_update.py @@ -116,8 +116,7 @@ def main(): if result['status_code'] == 405: module.fail_json( - msg="Unable to trigger a project update because the project scm_type ({0}) does not support it.".format(project['scm_type']), - response=result + msg="Unable to trigger a project update because the project scm_type ({0}) does not support it.".format(project['scm_type']), response=result ) elif result['status_code'] != 202: module.fail_json(msg="Failed to update project, see response for details", response=result) diff --git a/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 b/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 index c6fd7bf044..a74129905b 100644 --- a/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 +++ b/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 @@ -212,7 +212,6 @@ ADD tools/docker-compose/podman-containers.conf /var/lib/awx/.config/containers/ ADD tools/ansible/roles/dockerfile/files/launch_awx.sh /usr/bin/launch_awx.sh ADD tools/ansible/roles/dockerfile/files/launch_awx_task.sh /usr/bin/launch_awx_task.sh ADD tools/ansible/roles/dockerfile/files/launch_awx_rsyslog.sh /usr/bin/launch_awx_rsyslog.sh -ADD tools/ansible/roles/dockerfile/files/launch_awx_rsyslog.sh /usr/bin/launch_awx_cache_clear.sh ADD {{ template_dest }}/supervisor.conf /etc/supervisord.conf ADD {{ template_dest }}/supervisor_task.conf /etc/supervisord_task.conf ADD {{ template_dest }}/supervisor_rsyslog.conf /etc/supervisor_rsyslog.conf From 52a8a90c0ef99c910faab392a2c9b4c1bdb2777c Mon Sep 17 00:00:00 2001 From: jessicamack Date: Thu, 9 Feb 2023 14:30:44 -0500 Subject: [PATCH 29/52] remove changes used for dev testing Signed-off-by: jessicamack --- awx/main/management/commands/run_cache_clear.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/awx/main/management/commands/run_cache_clear.py b/awx/main/management/commands/run_cache_clear.py index dcb5c08aa9..61e4b03c49 100644 --- a/awx/main/management/commands/run_cache_clear.py +++ b/awx/main/management/commands/run_cache_clear.py @@ -25,8 +25,6 @@ class Command(BaseCommand): body = json.loads(e.payload) logger.info(f"Cache clear request received. Clearing now, payload: {e.payload}") TaskWorker.run_callable(body) - else: - logger.info('run_clear_cache got timeout') except Exception: # Log unanticipated exception in addition to writing to stderr to get timestamps and other metadata From b29f2f88d0f07310c67ec1afce3e47248d11ac63 Mon Sep 17 00:00:00 2001 From: jessicamack Date: Thu, 9 Feb 2023 14:32:16 -0500 Subject: [PATCH 30/52] updated tests to be in line with clear_setting_cache changes Signed-off-by: jessicamack --- awx/main/tests/functional/api/test_settings.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/awx/main/tests/functional/api/test_settings.py b/awx/main/tests/functional/api/test_settings.py index eb57f27e14..bcfa499af3 100644 --- a/awx/main/tests/functional/api/test_settings.py +++ b/awx/main/tests/functional/api/test_settings.py @@ -294,7 +294,6 @@ def test_logging_aggregator_valid_settings(put, post, admin, type, host, port, u mock_settings['LOG_AGGREGATOR_PASSWORD'] = password # mock testing pg_notify mocker.patch("awx.conf.views.send_pg_notify", return_value=None) - mocker.patch("awx.main.tasks.system.send_pg_notify", return_value=None) url = reverse('api:setting_singleton_detail', kwargs={'category_slug': 'logging'}) response = put(url, data=mock_settings, user=admin, expect=200) assert type in response.data.get('LOG_AGGREGATOR_TYPE') @@ -317,7 +316,6 @@ def test_logging_aggregator_connection_test_valid(put, post, admin, mocker): mock_settings['LOG_AGGREGATOR_HOST'] = host # mock testing pg_notify mocker.patch("awx.conf.views.send_pg_notify", return_value=None) - mocker.patch("awx.main.tasks.system.send_pg_notify", return_value=None) # POST to save these mock settings url = reverse('api:setting_singleton_detail', kwargs={'category_slug': 'logging'}) put(url, data=mock_settings, user=admin, expect=200) From da004da68a11a910ade1da880a614f3019474862 Mon Sep 17 00:00:00 2001 From: jessicamack Date: Thu, 9 Feb 2023 16:18:43 -0500 Subject: [PATCH 31/52] make reconfigure_rsyslog a task Signed-off-by: jessicamack --- awx/conf/views.py | 6 +++--- awx/main/management/commands/run_rsyslog_configurer.py | 5 ++++- awx/main/utils/external_logging.py | 2 ++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/awx/conf/views.py b/awx/conf/views.py index e4a8375122..f12075148b 100644 --- a/awx/conf/views.py +++ b/awx/conf/views.py @@ -30,7 +30,7 @@ from awx.main.tasks.system import clear_setting_cache from awx.conf.models import Setting from awx.conf.serializers import SettingCategorySerializer, SettingSingletonSerializer from awx.conf import settings_registry -from awx.main.utils.external_logging import send_pg_notify +from awx.main.utils.external_logging import reconfigure_rsyslog SettingCategory = collections.namedtuple('SettingCategory', ('url', 'slug', 'name')) @@ -122,7 +122,7 @@ class SettingSingletonDetail(RetrieveUpdateDestroyAPIView): connection.on_commit(lambda: clear_setting_cache.delay(settings_change_list)) if any([setting.startswith('LOG_AGGREGATOR') for setting in settings_change_list]): # call notify to rsyslog. no data is need so payload is empty - send_pg_notify('rsyslog_configurer', "") + reconfigure_rsyslog.delay() def destroy(self, request, *args, **kwargs): instance = self.get_object() @@ -140,7 +140,7 @@ class SettingSingletonDetail(RetrieveUpdateDestroyAPIView): connection.on_commit(lambda: clear_setting_cache.delay(settings_change_list)) if any([setting.startswith('LOG_AGGREGATOR') for setting in settings_change_list]): # call notify to rsyslog. no data is need so payload is empty - send_pg_notify('rsyslog_configurer', "") + reconfigure_rsyslog.delay() # When TOWER_URL_BASE is deleted from the API, reset it to the hostname # used to make the request as a default. diff --git a/awx/main/management/commands/run_rsyslog_configurer.py b/awx/main/management/commands/run_rsyslog_configurer.py index 5cc214ced9..61e7aa14a6 100644 --- a/awx/main/management/commands/run_rsyslog_configurer.py +++ b/awx/main/management/commands/run_rsyslog_configurer.py @@ -1,9 +1,11 @@ import logging +import json from django.core.management.base import BaseCommand from django.conf import settings from django.core.cache import cache from awx.main.dispatch import pg_bus_conn +from awx.main.dispatch.worker.task import TaskWorker from awx.main.utils.external_logging import reconfigure_rsyslog logger = logging.getLogger('awx.main.rsyslog_configurer') @@ -31,7 +33,8 @@ class Command(BaseCommand): setting_keys = [k for k in dir(settings) if k.startswith('LOG_AGGREGATOR')] cache.delete_many(setting_keys) settings._awx_conf_memoizedcache.clear() - reconfigure_rsyslog() + body = json.loads(e.payload) + TaskWorker.run_callable(body) except Exception: # Log unanticipated exception in addition to writing to stderr to get timestamps and other metadata logger.exception('Encountered unhandled error in rsyslog_configurer main loop') diff --git a/awx/main/utils/external_logging.py b/awx/main/utils/external_logging.py index e3e0a3d1c8..635887ec14 100644 --- a/awx/main/utils/external_logging.py +++ b/awx/main/utils/external_logging.py @@ -6,6 +6,7 @@ import urllib.parse as urlparse from django.conf import settings from awx.main.utils.reload import supervisor_service_command +from awx.main.dispatch.publish import task from awx.main.dispatch import pg_bus_conn @@ -115,6 +116,7 @@ def construct_rsyslog_conf_template(settings=settings): return tmpl +@task(queue='rsyslog_configurer') def reconfigure_rsyslog(): tmpl = construct_rsyslog_conf_template() # Write config to a temp file then move it to preserve atomicity From 7cef4e6db7bac6b7442c791dbfa5fb5610a5b64c Mon Sep 17 00:00:00 2001 From: Hao Liu Date: Mon, 6 Mar 2023 14:26:31 -0500 Subject: [PATCH 32/52] clear settings cache after changing DISABLE_LOCAL_AUTH --- awx/main/management/commands/enable_local_authentication.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/awx/main/management/commands/enable_local_authentication.py b/awx/main/management/commands/enable_local_authentication.py index a9db33709c..1811ccd898 100644 --- a/awx/main/management/commands/enable_local_authentication.py +++ b/awx/main/management/commands/enable_local_authentication.py @@ -1,5 +1,6 @@ -from django.core.management.base import BaseCommand, CommandError +from awx.main.tasks.system import clear_setting_cache from django.conf import settings +from django.core.management.base import BaseCommand, CommandError class Command(BaseCommand): @@ -31,5 +32,7 @@ class Command(BaseCommand): else: raise CommandError('Please pass --enable flag to allow local auth or --disable flag to disable local auth') + clear_setting_cache.delay(['DISABLE_LOCAL_AUTH']) + def handle(self, **options): self._enable_disable_auth(options.get('enable'), options.get('disable')) From 049fb4eff554e9e9fbb12f0622bdec62a29cdf48 Mon Sep 17 00:00:00 2001 From: Hao Liu Date: Tue, 7 Mar 2023 19:03:40 -0500 Subject: [PATCH 33/52] fix job relaunch error AttributeError: 'Settings' object has no attribute 'INSTALL_UUID' --- awx/conf/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awx/conf/settings.py b/awx/conf/settings.py index 27b7847ae9..cedea3a3e7 100644 --- a/awx/conf/settings.py +++ b/awx/conf/settings.py @@ -187,7 +187,7 @@ def get_settings_to_cache(registry): def _get_setting_from_db(registry, key): def wrapped(registry, key): field = registry.get_setting_field(key) - if not field.read_only: + if not field.read_only or key == 'INSTALL_UUID': return Setting.objects.filter(key=key, user__isnull=True).order_by('pk').first() with ThreadPoolExecutor(max_workers=1) as executor: From cd3f7666be13090136457b8a21ac07642ed153a4 Mon Sep 17 00:00:00 2001 From: Hao Liu Date: Wed, 22 Mar 2023 15:31:08 -0400 Subject: [PATCH 34/52] add get_task_queuename get_local_queuename will return the pod name of the instance now that web and task are in different pods when web container queue a task it will be put into a queue without as task worker to execute the task --- awx/main/analytics/analytics_tasks.py | 4 +-- awx/main/dispatch/__init__.py | 10 ++++++ awx/main/dispatch/control.py | 4 +-- .../management/commands/run_dispatcher.py | 4 +-- awx/main/models/unified_jobs.py | 4 +-- awx/main/scheduler/tasks.py | 8 ++--- awx/main/tasks/jobs.py | 12 +++---- awx/main/tasks/receptor.py | 4 +-- awx/main/tasks/system.py | 36 +++++++++---------- awx/main/wsrelay.py | 1 - 10 files changed, 48 insertions(+), 39 deletions(-) diff --git a/awx/main/analytics/analytics_tasks.py b/awx/main/analytics/analytics_tasks.py index 990cacfafb..3072577466 100644 --- a/awx/main/analytics/analytics_tasks.py +++ b/awx/main/analytics/analytics_tasks.py @@ -4,11 +4,11 @@ import logging # AWX from awx.main.analytics.subsystem_metrics import Metrics from awx.main.dispatch.publish import task -from awx.main.dispatch import get_local_queuename +from awx.main.dispatch import get_task_queuename logger = logging.getLogger('awx.main.scheduler') -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) def send_subsystem_metrics(): Metrics().send_metrics() diff --git a/awx/main/dispatch/__init__.py b/awx/main/dispatch/__init__.py index bbfd38b404..642405c2dd 100644 --- a/awx/main/dispatch/__init__.py +++ b/awx/main/dispatch/__init__.py @@ -5,6 +5,7 @@ from contextlib import contextmanager from django.conf import settings from django.db import connection as pg_connection +import os NOT_READY = ([], [], []) @@ -14,6 +15,15 @@ def get_local_queuename(): return settings.CLUSTER_HOST_ID +def get_task_queuename(): + if os.getenv('AWX_COMPONENT') == 'web': + from awx.main.models.ha import Instance + + return Instance.objects.filter(node_type__in=['control', 'hybrid']).order_by('?').first().hostname + else: + return settings.CLUSTER_HOST_ID + + class PubSub(object): def __init__(self, conn): self.conn = conn diff --git a/awx/main/dispatch/control.py b/awx/main/dispatch/control.py index d62444149b..e2b8c8f200 100644 --- a/awx/main/dispatch/control.py +++ b/awx/main/dispatch/control.py @@ -6,7 +6,7 @@ from django.conf import settings from django.db import connection import redis -from awx.main.dispatch import get_local_queuename +from awx.main.dispatch import get_task_queuename from . import pg_bus_conn @@ -21,7 +21,7 @@ class Control(object): if service not in self.services: raise RuntimeError('{} must be in {}'.format(service, self.services)) self.service = service - self.queuename = host or get_local_queuename() + self.queuename = host or get_task_queuename() def status(self, *args, **kwargs): r = redis.Redis.from_url(settings.BROKER_URL) diff --git a/awx/main/management/commands/run_dispatcher.py b/awx/main/management/commands/run_dispatcher.py index f7079c6a3c..07cc4d87b9 100644 --- a/awx/main/management/commands/run_dispatcher.py +++ b/awx/main/management/commands/run_dispatcher.py @@ -8,7 +8,7 @@ from django.core.cache import cache as django_cache from django.core.management.base import BaseCommand from django.db import connection as django_connection -from awx.main.dispatch import get_local_queuename +from awx.main.dispatch import get_task_queuename from awx.main.dispatch.control import Control from awx.main.dispatch.pool import AutoscalePool from awx.main.dispatch.worker import AWXConsumerPG, TaskWorker @@ -76,7 +76,7 @@ class Command(BaseCommand): consumer = None try: - queues = ['tower_broadcast_all', 'tower_settings_change', get_local_queuename()] + queues = ['tower_broadcast_all', 'tower_settings_change', 'rsyslog_configurer', get_task_queuename()] consumer = AWXConsumerPG('dispatcher', TaskWorker(), queues, AutoscalePool(min_workers=4)) consumer.run() except KeyboardInterrupt: diff --git a/awx/main/models/unified_jobs.py b/awx/main/models/unified_jobs.py index 3f938f44ef..d5885a2b0b 100644 --- a/awx/main/models/unified_jobs.py +++ b/awx/main/models/unified_jobs.py @@ -32,7 +32,7 @@ from polymorphic.models import PolymorphicModel # AWX from awx.main.models.base import CommonModelNameNotUnique, PasswordFieldsModel, NotificationFieldsModel, prevent_search -from awx.main.dispatch import get_local_queuename +from awx.main.dispatch import get_task_queuename from awx.main.dispatch.control import Control as ControlDispatcher from awx.main.registrar import activity_stream_registrar from awx.main.models.mixins import ResourceMixin, TaskManagerUnifiedJobMixin, ExecutionEnvironmentMixin @@ -1567,7 +1567,7 @@ class UnifiedJob( return r def get_queue_name(self): - return self.controller_node or self.execution_node or get_local_queuename() + return self.controller_node or self.execution_node or get_task_queuename() @property def is_container_group_task(self): diff --git a/awx/main/scheduler/tasks.py b/awx/main/scheduler/tasks.py index b762e1c429..9cdbea3a9d 100644 --- a/awx/main/scheduler/tasks.py +++ b/awx/main/scheduler/tasks.py @@ -8,7 +8,7 @@ from django.conf import settings from awx import MODE from awx.main.scheduler import TaskManager, DependencyManager, WorkflowManager from awx.main.dispatch.publish import task -from awx.main.dispatch import get_local_queuename +from awx.main.dispatch import get_task_queuename logger = logging.getLogger('awx.main.scheduler') @@ -20,16 +20,16 @@ def run_manager(manager, prefix): manager().schedule() -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) def task_manager(): run_manager(TaskManager, "task") -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) def dependency_manager(): run_manager(DependencyManager, "dependency") -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) def workflow_manager(): run_manager(WorkflowManager, "workflow") diff --git a/awx/main/tasks/jobs.py b/awx/main/tasks/jobs.py index 74286faa20..c52e8c7fff 100644 --- a/awx/main/tasks/jobs.py +++ b/awx/main/tasks/jobs.py @@ -29,7 +29,7 @@ from gitdb.exc import BadName as BadGitName # AWX from awx.main.dispatch.publish import task -from awx.main.dispatch import get_local_queuename +from awx.main.dispatch import get_task_queuename from awx.main.constants import ( PRIVILEGE_ESCALATION_METHODS, STANDARD_INVENTORY_UPDATE_ENV, @@ -806,7 +806,7 @@ class SourceControlMixin(BaseTask): self.release_lock(project) -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) class RunJob(SourceControlMixin, BaseTask): """ Run a job using ansible-playbook. @@ -1121,7 +1121,7 @@ class RunJob(SourceControlMixin, BaseTask): update_inventory_computed_fields.delay(inventory.id) -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) class RunProjectUpdate(BaseTask): model = ProjectUpdate event_model = ProjectUpdateEvent @@ -1443,7 +1443,7 @@ class RunProjectUpdate(BaseTask): return params -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) class RunInventoryUpdate(SourceControlMixin, BaseTask): model = InventoryUpdate event_model = InventoryUpdateEvent @@ -1706,7 +1706,7 @@ class RunInventoryUpdate(SourceControlMixin, BaseTask): raise PostRunError('Error occured while saving inventory data, see traceback or server logs', status='error', tb=traceback.format_exc()) -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) class RunAdHocCommand(BaseTask): """ Run an ad hoc command using ansible. @@ -1859,7 +1859,7 @@ class RunAdHocCommand(BaseTask): return d -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) class RunSystemJob(BaseTask): model = SystemJob event_model = SystemJobEvent diff --git a/awx/main/tasks/receptor.py b/awx/main/tasks/receptor.py index b1d9e0cfa8..1fb8b98aa5 100644 --- a/awx/main/tasks/receptor.py +++ b/awx/main/tasks/receptor.py @@ -28,7 +28,7 @@ from awx.main.utils.common import ( from awx.main.constants import MAX_ISOLATED_PATH_COLON_DELIMITER from awx.main.tasks.signals import signal_state, signal_callback, SignalExit from awx.main.models import Instance, InstanceLink, UnifiedJob -from awx.main.dispatch import get_local_queuename +from awx.main.dispatch import get_task_queuename from awx.main.dispatch.publish import task # Receptorctl @@ -713,7 +713,7 @@ def write_receptor_config(): links.update(link_state=InstanceLink.States.ESTABLISHED) -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) def remove_deprovisioned_node(hostname): InstanceLink.objects.filter(source__hostname=hostname).update(link_state=InstanceLink.States.REMOVING) InstanceLink.objects.filter(target__hostname=hostname).update(link_state=InstanceLink.States.REMOVING) diff --git a/awx/main/tasks/system.py b/awx/main/tasks/system.py index 1a3d1fa591..6edf78ff8d 100644 --- a/awx/main/tasks/system.py +++ b/awx/main/tasks/system.py @@ -50,7 +50,7 @@ from awx.main.models import ( ) from awx.main.constants import ACTIVE_STATES from awx.main.dispatch.publish import task -from awx.main.dispatch import get_local_queuename, reaper +from awx.main.dispatch import get_task_queuename, reaper from awx.main.utils.common import ( get_type_for_model, ignore_inventory_computed_fields, @@ -129,7 +129,7 @@ def inform_cluster_of_shutdown(): logger.exception('Encountered problem with normal shutdown signal.') -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) def apply_cluster_membership_policies(): from awx.main.signals import disable_activity_stream @@ -282,7 +282,7 @@ def profile_sql(threshold=1, minutes=1): logger.error('SQL QUERIES >={}s ENABLED FOR {} MINUTE(S)'.format(threshold, minutes)) -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) def send_notifications(notification_list, job_id=None): if not isinstance(notification_list, list): raise TypeError("notification_list should be of type list") @@ -313,7 +313,7 @@ def send_notifications(notification_list, job_id=None): logger.exception('Error saving notification {} result.'.format(notification.id)) -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) def gather_analytics(): from awx.conf.models import Setting from rest_framework.fields import DateTimeField @@ -326,7 +326,7 @@ def gather_analytics(): analytics.gather() -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) def purge_old_stdout_files(): nowtime = time.time() for f in os.listdir(settings.JOBOUTPUT_ROOT): @@ -374,12 +374,12 @@ def handle_removed_image(remove_images=None): _cleanup_images_and_files(remove_images=remove_images, file_pattern='') -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) def cleanup_images_and_files(): _cleanup_images_and_files() -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) def cluster_node_health_check(node): """ Used for the health check endpoint, refreshes the status of the instance, but must be ran on target node @@ -398,7 +398,7 @@ def cluster_node_health_check(node): this_inst.local_health_check() -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) def execution_node_health_check(node): if node == '': logger.warning('Remote health check incorrectly called with blank string') @@ -492,7 +492,7 @@ def inspect_execution_nodes(instance_list): execution_node_health_check.apply_async([hostname]) -@task(queue=get_local_queuename, bind_kwargs=['dispatch_time', 'worker_tasks']) +@task(queue=get_task_queuename, bind_kwargs=['dispatch_time', 'worker_tasks']) def cluster_node_heartbeat(dispatch_time=None, worker_tasks=None): logger.debug("Cluster node heartbeat task.") nowtime = now() @@ -582,7 +582,7 @@ def cluster_node_heartbeat(dispatch_time=None, worker_tasks=None): reaper.reap_waiting(instance=this_inst, excluded_uuids=active_task_ids, ref_time=datetime.fromisoformat(dispatch_time)) -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) def awx_receptor_workunit_reaper(): """ When an AWX job is launched via receptor, files such as status, stdin, and stdout are created @@ -618,7 +618,7 @@ def awx_receptor_workunit_reaper(): administrative_workunit_reaper(receptor_work_list) -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) def awx_k8s_reaper(): if not settings.RECEPTOR_RELEASE_WORK: return @@ -638,7 +638,7 @@ def awx_k8s_reaper(): logger.exception("Failed to delete orphaned pod {} from {}".format(job.log_format, group)) -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) def awx_periodic_scheduler(): with advisory_lock('awx_periodic_scheduler_lock', wait=False) as acquired: if acquired is False: @@ -704,7 +704,7 @@ def schedule_manager_success_or_error(instance): ScheduleWorkflowManager().schedule() -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) def handle_work_success(task_actual): try: instance = UnifiedJob.get_instance_by_type(task_actual['type'], task_actual['id']) @@ -716,7 +716,7 @@ def handle_work_success(task_actual): schedule_manager_success_or_error(instance) -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) def handle_work_error(task_actual): try: instance = UnifiedJob.get_instance_by_type(task_actual['type'], task_actual['id']) @@ -756,7 +756,7 @@ def handle_work_error(task_actual): schedule_manager_success_or_error(instance) -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) def update_inventory_computed_fields(inventory_id): """ Signal handler and wrapper around inventory.update_computed_fields to @@ -797,7 +797,7 @@ def update_smart_memberships_for_inventory(smart_inventory): return False -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) def update_host_smart_inventory_memberships(): smart_inventories = Inventory.objects.filter(kind='smart', host_filter__isnull=False, pending_deletion=False) changed_inventories = set([]) @@ -813,7 +813,7 @@ def update_host_smart_inventory_memberships(): smart_inventory.update_computed_fields() -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) def delete_inventory(inventory_id, user_id, retries=5): # Delete inventory as user if user_id is None: @@ -878,7 +878,7 @@ def _reconstruct_relationships(copy_mapping): new_obj.save() -@task(queue=get_local_queuename) +@task(queue=get_task_queuename) def deep_copy_model_obj(model_module, model_name, obj_pk, new_obj_pk, user_pk, uuid, permission_check_func=None): sub_obj_list = cache.get(uuid) if sub_obj_list is None: diff --git a/awx/main/wsrelay.py b/awx/main/wsrelay.py index 77b2c8a393..3260182b7c 100644 --- a/awx/main/wsrelay.py +++ b/awx/main/wsrelay.py @@ -201,7 +201,6 @@ class WebsocketRelayConnection: class WebSocketRelayManager(object): def __init__(self): - self.local_hostname = get_local_host() self.relay_connections = dict() # hostname -> ip From 680e2bcc0a4a0e96d4d2bc142a1da336d4843685 Mon Sep 17 00:00:00 2001 From: jessicamack Date: Mon, 13 Mar 2023 09:45:30 -0400 Subject: [PATCH 35/52] remove out of date test code Signed-off-by: jessicamack --- awx/main/tests/functional/api/test_settings.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/awx/main/tests/functional/api/test_settings.py b/awx/main/tests/functional/api/test_settings.py index bcfa499af3..a1ae7398a5 100644 --- a/awx/main/tests/functional/api/test_settings.py +++ b/awx/main/tests/functional/api/test_settings.py @@ -279,7 +279,7 @@ def test_logging_aggregator_missing_settings(put, post, admin, key, value, error ], ) @pytest.mark.django_db -def test_logging_aggregator_valid_settings(put, post, admin, type, host, port, username, password, mocker): +def test_logging_aggregator_valid_settings(put, post, admin, type, host, port, username, password): _, mock_settings = _mock_logging_defaults() # type = 'splunk' # host = 'https://yoursplunk:8088/services/collector/event' @@ -292,8 +292,6 @@ def test_logging_aggregator_valid_settings(put, post, admin, type, host, port, u mock_settings['LOG_AGGREGATOR_USERNAME'] = username if password: mock_settings['LOG_AGGREGATOR_PASSWORD'] = password - # mock testing pg_notify - mocker.patch("awx.conf.views.send_pg_notify", return_value=None) url = reverse('api:setting_singleton_detail', kwargs={'category_slug': 'logging'}) response = put(url, data=mock_settings, user=admin, expect=200) assert type in response.data.get('LOG_AGGREGATOR_TYPE') @@ -307,15 +305,13 @@ def test_logging_aggregator_valid_settings(put, post, admin, type, host, port, u @pytest.mark.django_db -def test_logging_aggregator_connection_test_valid(put, post, admin, mocker): +def test_logging_aggregator_connection_test_valid(put, post, admin): _, mock_settings = _mock_logging_defaults() type = 'other' host = 'https://localhost' mock_settings['LOG_AGGREGATOR_ENABLED'] = True mock_settings['LOG_AGGREGATOR_TYPE'] = type mock_settings['LOG_AGGREGATOR_HOST'] = host - # mock testing pg_notify - mocker.patch("awx.conf.views.send_pg_notify", return_value=None) # POST to save these mock settings url = reverse('api:setting_singleton_detail', kwargs={'category_slug': 'logging'}) put(url, data=mock_settings, user=admin, expect=200) From 95f1ef70a79cc20df8f118520e36776cf408c36c Mon Sep 17 00:00:00 2001 From: jessicamack Date: Mon, 27 Mar 2023 11:10:49 -0400 Subject: [PATCH 36/52] update licenses to include new requirement Signed-off-by: jessicamack --- licenses/psycopg-3.1.4.tar.gz | Bin 0 -> 469317 bytes licenses/psycopg.txt | 165 ++++++++++++++++++++++++++++++++++ 2 files changed, 165 insertions(+) create mode 100644 licenses/psycopg-3.1.4.tar.gz create mode 100644 licenses/psycopg.txt diff --git a/licenses/psycopg-3.1.4.tar.gz b/licenses/psycopg-3.1.4.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..97bc461e512ebb0725e3bea31284d247c9d0fa30 GIT binary patch literal 469317 zcmV(RXN5v`^hb zgtUNap;fdJm^%LMXJ%It5*LGQVkarvr!i=EXJ=<;XMVF6;p*4zp3OSC-R@J}q~15{ zPX$QTYE}G&H2oJc%in0_Qn6Yn77GOpo@?a_c1wkFRink)u3?t-ooZ1llneThqgyFg%DS0(Zk{)3eaYox zgSkDWq-tt8|7qI5`B1A>7SDh9JT?DIT21?=@@d#fr+@kUPmjN9Fq3kZ+O}t`uMKJc z%L~U}D{Ir^Uny5XU)IOM;`A>c|3Bjq|0`ql9OhAF#5|KLw#9wYAiB-`obK>kN6&Rx z&ZilEWx0@HGK1&aoxrlqoa(ddoH`i0aVt#0i96QpJ1k1+4CZeWT1*9uy3YW$0ZVyU#T|4)z{eL(Bv4Z?VY^Z~8}>AuCB zOoln=0NjB0@h>4APj>*^bNP*sEppMfIN^O3K;?n%8-3#UDLFXZFSXyC@15-bM25N@ zP+~bEBhs}I?QqMd+8z^#)PH#bD;ryA)e zxxG~qk3HILV~5}|R5O5GYAcqbxE||yl=C|Ay?|yif3uG01uD1fjTbmvfew?P6F7dL z*t$=-FS39oH}11Sq`)pbtJkBRpg=?r6c!*P;2k_? z^?Inq6-K~(J^lu~#Kr58$nsO7OO&P%YWa#kc4=I?q~MaCksOGBA@aR zYyUvrTK-Q#hwK^Xfw-`)>RjIgVacnkV0J>T{&bE5XT_b4W1i=bjzO1w%R_IBD;D^# zhouE2IQ0WpamRk2Ij@K1DGzk$fa2OVi1|9U^S}%^0m}u4JDnL-I}aSvv327rT?q;j zg{E?nHM%yq>Yce&Qd!A5xEwgQMj|6BzmLKoVi^)tXKt-{opOO3PzfxLB7Whhdp+t< z4+cXhQJNwTOh$CqS9;WsMWu{kR69M&xMI@bT>jGdXdaWIt>>Q7_e#s`zY7YX_b69f z#_R_=f+hC9R4mk{?SHXQ-q`=ANJ;#ULrkIpkK93|3hfBG;zJJB%M5HPjhjLY4^7~9 zafejNEBKEG&UR!iu{hLS$zI}w?TsUo+0`vu=|W6UhmSUoP%lIpo^?Gz%$8%=fk~4P zS|K-KKVnea#@^*fmw8aXE?LSEYv9^YMA+Eddl4A*DYd5w+|TUa%kIy{39^JTq#n0W zq9t`VGi|p#iY5?Uwdn9&g03WTep`+oIYwy4l5?3dyd-X~NTqO84$X2ia-M2JhV$QEgsdV%H3vIg@-Orxwv2 zlc3h8eAbHn6wJL^kf}y-;-5(VuW7z6u+14=m_iR@!I?53+Ya*yN34YW;uqoS$J<1K z_|j$`87D@EI>V%Hp0)niKRtWfK0H1X~ zPs8cqH6SMT5sPJ$Ro|ZNwOa2^&kulcopao|Tr{f!*Jiq@=$>zN;n@Us&6!v_dY0MLk?4|c*34WzvYv+7!Tp?FSP7jMs-t@a%LV=kEI^R!W`fRn7_Kk?Ho z(gFwG$CgSkRDb@D?}-xNg>REz;Qgav;v=(?^^>3){a!>=6V!#0$8hjS(xc-N~_|($E*R|jsLV-p;n#7 zf0|Y(Zt&j|q!j*p9Q3O#hJI+MZf`7RDSzq>_9`dfahizkCA2&dH1EfDwAdN!a0=*DA zYg7v#_D zooc&U1_xQ)spg358r8B*b417NYI!of-7$DEC~vr>T8_ZKJL2D6@vl~pf3!q-=qOrZ zs4~!Z1s+B1*N4n9iRG)QiY-d#b-*3Fdfu=^hlQuhTbu`!=e1&`kRT9FZl5_|6)dY~ z+1@)kifX0xLX2ly zaNq7w;DWXR0I9q`P3XLNws&~me)m(edDPxNJqBqUOt~*IMH@`JsS$R<>LL_$M zdhBm%__uld%I}ZN!nT?xza5^Ro*Xw%E(Gd`#vyGcro7}GL}vI+LcYe-EKBA`IIpoS zVP37MYPDIMx1FvWBfZ89P{Jg8A(Xs*cHaE)@b^X@$=_izf#}}FPmS!0*}7=j>n|`n zn{MR*r1s`~@BEMU;=0gUc5%nw?ScFgwHk}e^-3f_)~Dwei)pM63k&V8fkr4Xd z1&kJg2%&)2E5e53z5P>gl~O(K019Ebc|bw5cQ;V@5*_mze5%<&by?&^@AO339~wj} zujac##}ifglzt{@14ou)ve5!77-p`=4jx;*z7HP5@kK;wnn=D>M1zOasY!IXmNsCx zC^!izu@Ig`WR`sFBc(IOs?4~K_xtCNq3A$W1tYYh$3AaAL! zw8CoHiA#T#RE<`mjI5}h;7LS9Fc7#GW0zt?66p3!6RIfl-OG(JT@sPqWkuf|o*bOM z1IxB|d;oD5SkncjRD#pE__lf}M0F{8cq#3v(Cx^ciVU@*``gnL=LKIA%2T$>r1p?5 z4yaOP6~$rTM4TQ#fh+)M%V5q>DXOMze-B@QJ=gCe+)^}rmi?TfvFrk)pItQ?TO`1x z#$SXW`}NDqGd%CB56F*}O*wpxXaD7;R=&K1y5G-XDEbC#);?coB`o{S2=%iieUXLP@#qV=210P8;{D0<6*2e6w8HYtTqbE#b&HH z0Ht{nTTXA`2+Y;sc?3;|udA=3thJn+#q;6cG)X}-5nQc!?Bsz*PUapr3A6qXwDt}T zPR}j?%FjaoEz)#^9|HdZwvfp9A>ffq8d#1s2nNw^Ioc|dy3{ej-di-@Jl`T`hi4F_ zoU|^^_YQH%Xv%tXh)2cYFVO&m!VX$j%KF7R*_U*D#hd8{rzCkHBd z{ZaYwfdsCpr`{>xegGYTvBN^*NCiT`kyM`wHVs_69FzQMzC|64Ifq}PwrBAX~`e1^0NLtRsQ~h^MRpt z2u@L;<7}juY~=Jj9e9srnI`>6$u7HXJXP;JHqhUN2V2pB(D)YZ%S8hr{ERq=DXPtm zgSc^PMC*ij`F0hfnBZss-mDlYF1Cnx6QZPsKpP#9>>%@e{1TrbRY9j9hX)?aO=tU=&$_MbwD&qvjLN?&jqLtk=0FnI9;}T8y+r#^E8e*VTxDAVj9EacT z&-Fbv_>OJDnWYKjTB|s`mV$~JmsRd%0 z4l7p*8CMGjZ|C=5Cd~WP(UFuanc8rU(Bl?4){WCvI1Mqc6L<_7z;7`Qvu5JC(D_J?;+-BzC;EnO2${Fl|4cDk8UiJ@gqd6nlmnP{Bpr{A zVqi2e_OG?_BR84_;mDgvE1aPJtbyhR8{WaiVodftCo{feul1#Sn`iMg3;oNf6X{iG z^ohwRN7sQK24m+jAU@X}t7OmS5P6a=n4r*rizSt$=lFUI{+D?I=<~Dt;Z@tu)cS9Q zXPET#HR5RZZ=cX>pE{{~S6k$;o49xk!6E9fNik4|kSG@}0f=eAC061L2Gj(3h+{1b zLiw21cO3|7AjTRAwB}QBH`y}!fG+4ubxLZISIJoV2J<}}Q%Y0O)ST(SVuRojnDhyl z!~qzsjK^OtzmF?qXVfQgEXbI9Wja|SdBHb6;FKuvZFcfF8y$RlpIXYg_hF}W_1E9w z?A-5zL=Sy1bTRLj$nm8(>+*7N3h3R^15Z&(=qm19fw*`RJ98uiv z-S%U8Fi~;XBVz)_Q6>Ky;KgDzsT9qw-$#=fZaK?e>57CV=E$^mL^Bf2s<&n|^Krr8 z#bcgdb~fzWEY!=!6{p2NIc5}zeo}P{^zk~BHmItQ8GK1@{TTQPT)uYA-XibtwSFRy zqAu0ttWHHypcm*cAu4M+K`<<$qp3LIrdbpyDjWx71 zNHsjO^E@y0kS%8=ePviIs$w5@YM)o4tE{nf?|Pb?rWUg^o2Vf*`SgkQP0@igiq&GJ z7A_JnbTJabnY611wr|GQqwd-?eINvSIv9aKV4oRR9@CBf!JC*`bVJ$4BS=zpZ8j9! zzCz1GG$!@`Fr1@+SkaTil!0Qn4w@i`7DM-XJUo~bUYiz%65p4NM$@(&sxG#BVGTTU z1XV(o%}zf4Tu*cuRV#h{EYYB%cmsTa2)HnWdZMi25;5R)Iqd0en^l{WD*_6dM4N(t z1iPUqU~;Je2IEWIBL13oPCx&R)6Ei2RO)Nq-fQ{HoojPNW1*S4Lad8cWpm#9D^9cL zzvZt0uCt9L?|&{-inG7}s8wp4^WRU9Ua7R#1Ax$F`3(MyW9F6Wf<$}{ANa`4B!1N~ z({8(C@u}U;XYz?3fXqYTzCW-t`Si6dAUWjt;`WUALCB110D$xGRasaXzGO1kJkMw3 zE7TG% zh!A7r+6vx8+}3;BlNa3Bj9pcV9THU z(AVTw0)tO`Tp89S-#CI@#I0=J)eU>G}U=Z~y1!d26k+f9d?M z;k$lk{C{!d|DPf$iUJPu4;J9+v|JB_IGAvkIh=VMFXyLz|5K`qh`OUPd2-R$ohveC z!T)43V(G|}aYhuTLmYzk#KK$q5PHC8eW-)j>oINlorm`ik%GY-AKwRnua*n)8Yo7k zRxA8>*ud2%Nj^Tlede()#5oYv@)0t>32a&g-&SM#conj2XrTOkyzR4i8wH)J-d{(MjsZuSar3>U$ zi_POr=H&ky_ya(O16K#2)rhpAZ@J%MhFnf*gbGs>&j!@AfpXdZWAF53Due;k52hh9B?W|nH{ zaT9dO&z|lsU`e*Dnp65d!2K}SdbFz7ihx0?rL;D^X*TB?K}x$GrT@>~pRTu&9_ga! z`s=)k6w7`@ssV_j23D!MDT=CMTOw(aa@ng~o0$ZXWVS#g3JHj!r)S;5`G3xH?rmSe zzJwibM0`^YAgQ5jcMEH^O9V3Go8pUkU|b3&Gfnfe*@qwyDLpHzm0L#7#LqK6{K|fu z(zm^Q8jd|oyO-(YLk55JXywV;a>xOmPm2EA_~j(e29vyh5f1e}ot%HbKu^~nuZH`( zHO$_}2gBKUI+-;xZ~3W?h65rkr^N?d)z#I<8^I)A7+6hMCj-^*=_Eb7OwUJUw|tw8 z)9zrBr5~~-kJr~9uRjep<&gF}oebjdD#G~vS+14%3UK1AuX^_r7@l=O*D*(jO#U z5X@$0VCKW zq3sA)Ws>F7>_bT3>hi|&`f^APf>9c8L~ftx4YJCaq^H?=Ho5o^(zNk-ZGClpEhLbq z7kPP+y(LD#V5ieG9PccfjI+MZ_O2s7diwP7^74~l#Fsw6+Vb6SObPzc8tj+P$9zKj z&#T?-oxP(S#Lj-gG3MKUR!F^Aui1Z=*S_@s{3Skd{qx=4oA}kv(b3Lf{N2vp&f(Up z_~6ZRLXB9_BWidF9}R1W*E;d))A&DUB+JuzK8~VzoAihY7lK^eUg9rFtjx0bs5qNm zrIUzK!A?#6%*tE-&M8Ho45FQwg9$nL-YFgd1s+pU$Qk zLRd}-;3a;{5g5n;z4YcV?`NYjv*v3FAR=*Vbk5P1Qxnk3;cwZX$Nq0FgyfZ!K*$Vl zR8|s6jlbh=!^8Msc1rN$S2_l%B*ldEH-wi(60tbBEP1L#g$KE`fauW$UfaQ|o8Ywo;)yOC(=)H~(@8qH_Ti*4 zyBKK+9A0sbKSpMk+)_GGL4zQOlw@D6%AEHZ|KegoP`0_+5xw{Wz@#PIBmB49$*obm z;Jvp1v`I(TGB5$2axV?uP%Mf@;SAR^BrK3D{VpG5gGf(LS0bn=(cg-MJkP6~U`QsO zrkv>uy+}?Fi4_R==nvD9@rm|<|7oWkj050$3cKA=o5Y zzpS3#8_fFhp45%v;F$>=LvLl2$lr3CPG|*y6s{Di!p8~P56kdnF}0wT*Z#dEFEz& zWz_VJ4OR|b>crW5gty9OT${SA>?_9$9Al)kp}sO;R|gcNq|*Vi=X7diF;oId1T_k< z#oOzS&AG9dgpDw?+wDWR7XP%iX_7bXL~)AZp1d9m_>dm2*Ao_-(otSq7X0j7cV_W@`V0)8Pnw%qAEHSIlib-a5K25r8g8g(UK(P3N6i z>BT$m`x&RYgWMd699$vW2e0^HI8_k5jjV+1x=NZP+^ftqnRkuPW!-WqB~*;z$a+7` zFxykGN!+S(-oUFpnmWeBE3b<|ewMov7DB&!2J<@ZetsrXBMur~F2)p`3Z9(Eqq>PG z^A{0?kc085@7ZkBH&hfSsL{I2v2q~@A-Rp1QX<-z$F@KheF6=_iqKu=*BsWHanWJM zU^kH*HBa6Zgw9JHiHN_hAAwuvrS42*!j(BpE?qK_cs{>yq>$$;aNi=<_`E0vi0van zl%1U+?MI3d(QDjAiLa`raAfZ={|diB?m#R7d-UzKshL>a$xgUG63kK%uZL_Qx0?Py z+Zhf&yrOZDL&8K9D@N6%@r;BKVkMIdaj_-eSHh9A*|0;y@bXXH@-0$nzV`^Cm+oDQ zxKW$|hQD)hDofRZUA%iZ1jfR(Uc4`a0yG7JpGr%NxavNTYiu~z_gRYBaT13mRz9`i zZcM^&{apqYc+yyW=|hiFj>9FmXZcXhjAcySx{xzfu5~#>suoWm;tA;Xv7lF+$>r%^ z6dbA^U=g8(!1m@fi0s5v02t;Z=Zcs+BK)5qe*`llMV%g`ljmzjV(+X!MTqw>r4gqh zW2SwCe-?NO1o#qByq9TzQj|bRL}^$wE44-A<(P9JqQz;(sCUMl$M7gFS1dstbiHr` z26VUSnwl*-D&Gnr22pL6)Skz zO}H!sfW%lT;0{>s6*5u5dWFGfBYJ(1Pk?eNH^G?bRrwV~`=-TLRz6sYUlg&&St^); z&+?MWGyK3j0o~(W_99_$1F5Eq&X;n5J}Gk)1E8GcQ|4v#r9knoEuWWICOZBOnYU^4 zwR5tQ=v@A*6^%n~w}En*a@Cn~ob}~tPpW)WJw%{Q z--wh3Lel~C?4hkJ#cxW^(=uCDUZl8OLq)yI3^td%ykzJ`Gc>B8J2As|w;Uw*D&ZAy zhc|u^q8kLs)E2$5U>YS{qD)+k3iTin8DLZ*oZ5Zdx6AQt>I%D*tR~2*FA_Dl@+2^9 zKmCg+am)D`Ae9*yQN!xoU8XS89Lx07Vpdi|Gn;I6wuDe32o)xYN6=_@B#o!7%ELJ* zN|7a-&YBjOx@D$I)j+X{VKQ0I9js7ov4|3>*^q@r><^Eod3GFPI+dl?;K|(_We`+& zLkgR31UN$1vgQk6Mh=OlZ+tKpPR$Q;<&=Ek&D&kPCOtV`+~o_2?PLp&=!ENoWx4rn zhk>56Q!bLujKuJ*xkL>c(MqUf0|r^o=ybtsRzy;Q_!1wqlg`fB()(Lq!L@tUbYW# zLZc#DGg&|afWQa)YX^jwz=#ntF{c0a;v--qK{IBLQWzPmG^A?6*h-hC9OsjKYACqjkNSo%6q;)! z?E&z@Ae%~cIG6^|$$%$JCrpeCc)+xwpH0;Mv;&deP*^(2bHWE)RXA|yEM~L;I1=-O zlzZ-J-4%P)Njk+PAu6BcsHH$NHss3O-~!&a=uzTA7Hthzt4dtV$i5eA#zWueZCE^%*Msx z#zp?dIWrXRAoSC4_wV58v1Yf60_G;nyw!Eq0wfmW)vZ^kM$P&n=VOPIp+e~UfPNWd zNI~P%IGe$mVsG5-U4A6x4u^~!*Bw1jjB&q|#q^P&KV|0~A8H@gWE3bjN9-;|1Wh7k z`k2n97sVw1b80)nV`cDs$`125=1tY{BI~W0=l>1;|A#wUFJABTCgrDe|KF7Vv9Y$X zQT6|?KYIMd|Nl#T4m81j4XNW^tut5^!B>f#r(+NuV3p+fN6+s5i6S=;Gj4btC)IKR z;<@x@Q6C)M_&|8=dY>rz-7N3FH8){XO$dGwgKl>==KARTZTR^r_J0E_o5rY0F^yN3 zduugN3#KQYB)fKy1^Uy10cD=j28@0SiYS7y=WI4%O5>kLRGeq#fuKNLekj&{xCqRgkoay}iN8AQwl|Kk!HN^i-&(p6C0HRCjod!1H-=VG z1c>;`)y1{y3a$c9l9>8yNg{d8>QR?>rKl90ROA{wsrnDhLhGq6zmO!l1Og+*zuIia z;FIH~>K|gW@<0TW;40#5CrEK{ETr07a&6GfVo^tB_Eu!-=z(gtvePWYF1DvDdev5U z(r;cL5NwRfmCAXEYRzDnnIQBCnlepj`{A}wrr5tSQXeiCS0M}7d_kmk=73IgSd3W+ z;2xrzdd&$OlF>nUl2@n;63_y=>*k)|B3omw$lfAYe zQab^jENR+NTtSVpClOWj|KE}TBzER9gI{avFl1^9s->U8i9 zWM%LWvs3zK5+M81IX9K6Eb+U1GM%NvZ1hgt1+HGwM2MWdPzm9Jf2`ndwD3;F+Ccxx zC&BrP+l{rJD7b=#dCAS{q7W-hLkcM{brUMVUpyo(^AN?l-kEYl0nZ~H#&vL|!8=^3 zZ$TK9!6N4NTE$0~)db0_@mS@aHqyn_%+wn*9}v!=5l{t_YJ83$_RwY+*@)TbVae9v zht^$z-%oVJhhOPGy4gUi$WgRMm~}xbjnk|2`kqaKg#k^<@Wk)ZVLmXeltGW1L<&Yvo5lhJ%d=zr)Z z)c=@1e)2Im$^Y?2YyA)WyQ=@Ktgig8jZZ$4hR^?S{jcHtU#D*~-0@E~#tr)aN>lx( zjYnVf|6k(sm32K`>ajETJsMx+qxYez8GRLbr6N$vQHb%obdrOimNwursHZ8Gcm#pa z+x7{f@A;${F?}}d{w$xM{P9)Mi;fPy-`)EIs+od={rfZhg1e&g7jelm?6RC49qqq4 z+}?Syd&mOBv$z-WljaNhMhaC$2Y)>Net*wM8U#kft2M0bKNyH{GSU` zN~zODBmH_&c5102c>b#Q&6_W;?WnjK=`U^qS+L8!=r@~g zADWKs*Z*2!vBAP&z$o&8g#!bKW>a0`2X_S zN{#+I$`Ek48J`xz!Pn8>qKJk-kiU-015?ESRMzih_C>}-l*{?QxxFZ#K~{V(60f7}@J@Bhl<)z!!K`~PU; z%l-caKHt#k#_unOqw?8;S7zgCjSZ)C9Lo>siG>*bvY!|4pDirM%kk>!lXzwQ$-=ka zNIMR?($5yYIy>t>S$njAT!i9nMqkj&=CAHmKA2uSTX@`CU)flHy0#Dxo-MpySzqm~ z#g88M9`$>Vy6ZjqwY$+5ZV4Crhja7S2lW&;+2i=8eUjg>8*6vmjR6bXN~@66|f)UKaaYP zdQUF8y_J3!gA!=^&tv-XahC_$h?l!hK=SbRMoia+_G7ubwhBP2-L++m^r-iUhQ|Lr zrQg@-`KR>t8kV-!dxGi4k7-&@=x_7il^#Qlm$5;#bG&aW^xG=^hX0|5=t25lflljQ#d3!9BW*YBLGNk2LIbVvuupqW=wCEB zo)QLMq3`JLc$NN56X5-S5^vC3^nZK~v;pg&8~DeQ?&@-HW#M5JBbN1`modE!+RT(@ z5##@8F)Ql?ak-CWVLdDOzN^3U2+LjmS69FPGvJ>a;A?A-9zR_%ICy)cd$K|6c|vpV zcWHO9b(k9VhW>c;{S%x#zFeh4$G}f`JJ#sbFtL^HV|sW4kKl1ydv_HZ@Hkd%<9`Tp z0PP6(aPWkKSRl|257GY++QmRSI$NM!474MxTaAJLJ%A^i<3R}J;wN345+k#sT)egl zAav5p7==z6=t?-(eG2@h7YOHo@i?O=m@A>m2C%{WH+@Rr@qfTAdJ|{xi1EWiIp7&x zLxKe4BTyTJ3#+)Ryk|Hw!ulBhLl5CW`u|V({AkTM%yq`%M}3@d7pOx+tzbDc(I<4# zFug9%ijjc6B?KmXqCXyYAM*h`=>q3~dn?4s2cq_vAEU3<%j%)@?WsKFg*@d;&;^z5f}Y@iAN8IN zyS)34_{weIW)t;ZB8jHPsh&|CI}9zk^&t3f_t5x{;wh* zna2ZaVqT&tJ$}5hx^8G0k&h>R<^Vw76`(QEC~UWoDq z!m-g4n!Q4M`g&!B`O_NhcgZ*e4B7w&J*JIY6BJSe+NdJX8X?ZA`S0teAm=M z;xrk_9y141zRi2GBEvtCt)Pp>VgaxZ7p@EPEKF%F7WVKsX5?YkwTkV11W90n(VxB{ z-qr>F#>^DKdwGSc%lHFOSDs)N*gX3$OG8>PV?IvseR@ip2a$zuQfdKp0F6O0@}Bt|G-q4p3@Q@f!?g}d3JT}5R90}u3~{t40hrF>bH2FL}`}N zd$PLmc=?H03Cnh%vi)V?IWJkwgiN|kOHb^Wa0tEqF$ljx_GTKK* zPW&ep!8h!GMFd}C5&Wr&;E(Snf^V=0zIGQ8oP}z}7;t>x%X*Jrf866cN=&yRfcK36 z{*;&Tl*P>$mn{Za!T*Bg^6s-@#SFL0G!qQ=fYF)%k?7 z6fJRsXH&|7;5as7mUw_?I1fFIjp}KTK*hI&|NDAnm9}OXge}HpSivhG@T)9Ru-HHX zy)1n--e9IGoAQJO(WfN3GGYQJH-wTAY=ZlgHt-3w#TCe=kkp>wei_~1X)H3>ldg&x z%_Yw2(HIRK`1RIQ`t6j)aOqRMV!aP-Jk&p*}tTUh|m`|L8p~A%!t2uV52aVqG}Y zN+yTkj5@bqDd?lLNGh!h2sjv>ckKsP*(&dTpf$ueBrAV}R#J-pj-uS1tw z1%es`6l(}e$IxSAP!KUX2v74wsktW8Pa^j99xbn}FRwhcAEUSeB{xnDqn3(+zCrqYLoS zcf>uu#~1b2jp&T>Ni}O_vxY&4|K#zLr%!7qxWYt)=?qp0nucv6t!sm&ycMQ4Yy7`N z#^2E;{(fa;{r8VnzJE$QH3i<{|Jbf127$G$RmhC|KlqyT^(V`HA*jNEAF-Wg{en2i zJ1~!wupEyvC#3(o02A-8u{G=wQ{|`pUwY^F8|$o>tudbwGoJjkk**O6TM{=T_7q5&&LY@~(#B4-^r9gLP?cK^M5jj};*4Q4UU#BER ztg?K#%#z7+pY4pgtS5F^Pk3A3ft_3s(|gi~@U|Rpu%xFCF^;Y&u0F=^m=F_8V~~5q zMjbr8*0A_y+z1!{1tI3%m;Xk%!AyQ0LHlow371gvXyB)P_6rGj<^NS*668?)-Iedw ztp8|@nTUM9EX-JaOl#Js)JEa|yWkINM{tU`z3VmY-n#ByqxX$>Z_VzWdgN{+J;+u< z?cI0^U&`Zmv@~Mb^|x7?E#IAg`;T^u|Bv}J#edi;fS)J?@B`xi9<6RX`V#;53w-9E ze-BOCK6;Fs;{O`X|1tf)FY!OWz^CE-ZGPmZ8sh`*|Hh+7U+(`e@tJr2oN@OFih<0( z|En8>9JTwuvAX`{{{I4>UN7#?CP9mT=oGadB(N%hF5|*WM zZ^>oZxER?)YbJZ;0=Qs!8vi`Yq(H2e%a#&b(M56PKm0Bo&ax(W;dl&FAWpJ!Hk2tu zlWaOe-w7$rfvOLi(g<6syk6wz7u_N3{~T9oiVMj=woKABGF(ry=~YH!=(w0E;CM3~ zhnc*alk99W;VE@pndqb!zp?o76LI59bOCTP-LO?mb#WnBFS_F8RB~z|($@p=_gN)%$5r>%o+XDb-B-WRAiX z7`P3j1XY=)1*sn$&I>ZNM!Z+HZSr|Spy(Ozr`e<|CJC>So6>Lv1OjWOHOMAha*EU4 z(vj58GtcBB`U{nZ@qcDT5h}8d$EaR{3(38gB}Lpo@w4F-L?uc7KA;3!&BYO(+i?4i z_i$-Sr=YaHP6AVKDSGF_;*|3O(Tx+y=v`pfHdoLIyw zZN*4F6v1D`2ssj^074e3@2W|wrS66yP5z;SW=fLiSDzFAlo89bw9#8BA7M9^Z7Ji$HZsw&jfOldncCn!<&@guD3dE>tV+H0!UnuT z`eU44qqsho@5qQogW}j4)98bN@|i?k3#N7V+npwDmAe9tQ`R6nvPDHF` z@IcBfFblKA9kpwQR&=ywC-`s}lIsK@^-9ZlbNusWa_~FU;61?gDd}b)F&3kk9K|@fAQP)B+zv0y7N_&;gaQQ(2<&6+^ zka^5?Pb)~xDb~71Tn-^7)12ujT8m_yg^i{ww9?~AIx3m#P7MF#IaTE%t+`wmUMx|t z^p*u{;(D9%&35xm+C0J1UORMSI&|0j=}aW# z33oP#|BD8Xkk5C?{mIZvfUt>{J{V$lct1B1CXs%Jg@Rj*>*+*=?!-e{S|tyP!c@#t z=!;%9MO*A0xo5}p?@#2#WbI6N&21?`Bd{%D;5sp0eOx8Gt)D9+QkV9?H;WBVvy z^cX4|*b=~cMMo_$rG|HI`_U@ppkmgM60XdNQ#pYfS4mf7%3I>%I= zz(@ECt)PdQ3)5NTXZ@KTD&Oa6DWYi2HjAOsh)!j9H&wb@R(9+e`Qb!hEH2QNE_B>V zfS;^1{D=TiZ7Jd~-@l*tg$I^XV}A_H{ZUPWR12`Rf}ZHCXVs^vX96 z%^%-9{eq8=3c!2--MsYB{52*K{4KBZbe0Fxa zv9Yqgnw>3wEBbexS#^wDh3%`TxPcPg36wXqFBG<33XiW`XCq8`*I9ZZlIlWAt5o|p zC=T+v89~=%(roHUy5HM`wH~J6UHr}H7FSPRjq3MDeprCxoc z7jP?4`tek1f{+3o03a!aj0z-Z|z7)Csh;Oud4z^#6@!#6xhOHdkFw^de~^CIvkS^GKRA zM`Oz3d$O3vdmCntJ`l;DdVgwM8h*5=?lYk#3FwUI`IN5Wj{Lpp3%lCL%(JKQ)AJ>w zs(iGEO@b!j0p29WzL_ZaT&U>$$vwLo06fp8ridTxrHl04X=WG4m>rd9bUa~YJ^cAHe-CU)?(sB|Dtz5v zezr8bnoTAJ>F=~oZAgO6Ko?rq-eFw8K7=NB!$SJi+MVPf@D|I8c0Ww1`nD4`quZ&v z3c&_p8@A21cSr&Qh}G~QlIS}Obv^mhL+{TgX8d0K+zH)2KH|m^HHpxtlv^k`dk3(J zp@@j9mH12i@6vq8jkNNSUz{7l3l_vv64Sigs?B+tP~)lHH)G%5 z+{EC)`SGjAleC|mqWbFMB~5|bG>oR)qdBHaI91uk6NKP*+5vIdl=VQP9imKFyvU}5 z_&Q4`@yhaVmo~leqiBDWDesonsaK}-DD4=b$i!5=ymzGS^DRN6ix-_&lFZ5`m!SQtLS}zM8ce5t#8zFVc~jvoUKpNzhcnvo(VI_#Z+egC-+o#634uc;l-B z(?Mo(@jLu)Ulx~Hkfh;$Sakn%NKqAsNk;U3#3yIhQ2gv!Y|b+L-IJD2-Bk%5$%a)R z`DhN1ZX1*`YkjMnVTDVg!(b5&+n_4F`)6evnpJvlAJ{rXYw*_DIw7-J^^I^)y0-OYb&JL zIEuH_I?!HA%f_+m_qfg-u!aW>t!K`VXxk1dL`i4>9_rds-hGMHsc-DXOgYD?puyI_a9KB^xjMKcJ;&jEi0r4Um zcn+>I^hg#)h>!um)Ln~(d%=3OM{Hnf2z`Op{hZu0n+R9$#jG@5Z{|)?gj7!k~_nCOyU$47|;1$qy9^Y z^_F5YbkjU-oy9K%+As==NaW*!ngg>@F+0D&9!pa(8zys_(fhu7C@xMWRf|CwN>z`< zgVG#Hq&h$w(&V+KerdEA>*$=?rX1*tA{{7<-D;#-G-7(r3Gc)mH_>lT^K<$ksY2E! za47jm0{K$RDp#iBU}=}=TJzdo_or3Mmzr(Qv+2p(>>Ar{!kQYN)22*#E_b@Qirbfv z-?gn<-x{M0^{M+b<2Pf3oz42N*do3OG?I>`qXZK%Tru|m(yno!$3eiz_~+iick*DB zF2E#gyz}NdDsgTh1|ccHIQP^P(Tlf~2q;mudL7>m3}ukDkpx7sQ8YXv(2Wl>$U?BB zh&f9FIuwb4QG_qPTY55qyHG+?F4b+oZ$dWU2^g~nPpcsiY^xNB%mqButf_|C07XE$ zznET)(gd|M`Z>LWd(Jx<$%M@%oQNLYMPXtluNTrQ`PU z5-b6{lFjU)ml%yFJ*nyaGqktN&uYGTKoHGZ9IiP#YdxwSc_e7jsD#p#JwPg>o zp+-&ou?fmf|Gk(LB<_@srj~6X;4Y*k`MW1-Yb>Km+Cr}S#SGDuX!wkHFCM7!N@Tv) z_e$79C&oFO=!6sLLv)rh`{OXQtjy1CAKElnf)Sod_#>v%>-cik_js<6!s(R=u|S(p zAZ^Dtqi?#7Z_K`=A7T-geeOb}!f<+(<_JqA`R9rtL=vkb3~SPE+2`qMPi{c4hPKKM zS(|@gY%z_a&@c+qojfz)Fbhje`SF&s&-jC}kyorJi~8(r5}I;kLaA?esF`{ecK42U z4v*vAz2klEixn@DT&ZTO`1f0{-s~L3i@zz=QCoX|abv3r=$S8|$ardnL-#Fbfu@Oan2DoKQ-qvaU6+Geo^MNDm3H}rAPknkR%#7Tw` zPcX@oaWTyM*U6vaki6K(b=zulJ+SY&3k&)P+Kd>a0YT%{Tm?Z<8=DgOx3l0)p&}K04V%#u_N5K*ZLUg>!Px+MRTa zBvohdO}rpv1q`Cb18P*wr@Sx{*dM<#mNqz1VeA}oT+9r*IN{^FAag_mj^v#wH0HE# z@`lh@3cXhcovPj^Af>f(z}5Y&&EcqfkPhK-d>~=ww1f8th}5BHI>TxMM%h2qEod zacz5j$;BstD#Lic={_aV1L@1F?863CNs#_EM@L97Kq}2tC8(xUrBYvekd7jgM#JB$ z55y>n4lDxkxGiu!4%jpjrf(y$+K9!QcSX~^xPvqNdVx9Vl7pgPm}HkY{Uf=@8_vWO zMs^M&H}>WxtzR(}n~PZ`_dM~!ZR93DXJjU!&G{%o5Co~vAZ ze+f2|Qxt)~#BmNZ@uZl6amo183kitY3)*7W1r2kTY>tXyg^=`R>)dbAVvdMRvA({rpX~PggCKueV*K9 zV5qz7QWDfAd<`Y}#lW@}NeBYmdD{d%c;IYC61TdKIbJMA&l!>y*!vUQ6v)T#*mx$` zs`HBiYC9>0L%5wJbuTcI!Itah4|ZDN;T^YrGc$Dd8(v4eP5o@_Syts`$RXMgS~pVs zWETaYwu(4GJMbvGoDC%gC!N}W38Hi3F;M|onGw*#+!GJ`A|vA5N80G%1bS>bJP~q@ z>mlu?#oU?r_lHjd)U}PKXkdoX^1ZKQkdL7}A>qN+^%`a`fA)@cza!nSqp}9id&v{V zO<0vDl0*LP$y!(*Uwf$i;2-L0x-2{LxZL5~$cZg839hbqy3%~I8T-bLuVbQEa5$*J z!#(wC_vmBF8Me%;aDtj&KUMdGkK;1!1iWQsuV(!f$=Dn8tQ_3HW7_HV!DFMilM+}qvzZZo!K zez3hjIvvT?r={>4=KVY8ArZNPzp*R6>h7>OM z?{^M&kN?5sQnBRV)x+^QaOeKv*6z{HeIdVaTO*ZgF@*zz z>k~vA87!QA=MURE2gkendmV{)ywW-hF;THeF`lpwD|w;$I2@^G9jcL_!IGqjNa+JL zrx`SKE;lD5O+nb9DA=I&{xF9oc$tq*%!@SRQqnSdci!vqaC}ZbbR}rHOZaDRp=|ia zot@0qJG$@QYI=x+tkfkh)yZ_l z2qytdJ{Bro*gL65YVlXin9xnEc8=I&YfQ6Gy4#dZh?=3?TE|PvD8;8s3mjxfIqAFF z7&Ta>7p|s+z#|bx0W4u8YH3eJiU)JZ4cJWXL(NmKY;htfOca=#SS3(oWVu9g18kaVNvGo} zci?GfX&;g42#hP(9$TsYV3ttEf0bqb^@Pviud>X)o)|+FQR_2tMpfd6fTx7%GNY0__mk|*$j656ZrU-jAb0DPP@G&A^5;!E^C%n({@7wcD@L)urWFyOV z&FX67$oDdi{QGX>$mwf_w@KVlf{hd@dqU zl?wD%M^Tdq9nDSEB@(eXj?82~K~Y8-rf@Foz21k1&Pl|dLX3$ zaz3c8{nH48<+LDOStY?JNsRR|393{u3HW2(##3`3J2PjnfK6v#03@rDC;qz{_e+1$ zR=i7x`9NLE5>|}oO&$^pNz8sKM~3T*B}wrO1S&eICK4Aheom4`Vd@4o-iQrsl5b|= z3k#jNk&TD^Sgvt=c@3AOGG#g%!?(@xsRb2uMJ^XmlAd#Fzp!BW(JAzV<$4*%={2I& zkY2EWg;x>_2v$!|JaXU`SP1CEy9PTTyC@2iATAnVKr`g3RMbCn;X{cGnxIhy%0iiqip!> zzKn9e6YDNN(*@8M`QX{pM=MWO*OqSm=Jf}?#|x~#SUo{v$wMN#BeqZ=pTpN)LXxRs z=GnEcx-exj8cS3YwmNECoTI$>_td|1oyd#0R~xB@=gBG1Z(qCEkJC(I4^uB;ob^{n zN^Ra$-OXfb@%8mJ{Xlq^BLx*lQwPl zFugn-(1vYVrQ@6n<>b&dMt?(ehC1>tvvfoo&k2WovrJ0gSM%@8SN1ZvOW&L%8f2}Q zv=uj<55?=R5bm)QTJr~a={tZ~3<~7b6AobTXR~&Vnh6JEkm@JC6&Fj}7IMlufnP_75{0j=kh)&@8=# z;2^ZsoIwH|^uY^o-UkAIlR-;au=qh)JczWC)md6za3IL@tjq_{d}Ph}C_5umXS>DX zY{bJEFD>e64NXQkvRKs?)Kv}9i3}(TIm*fJh~-5U2ovpJWTa-Y2{ytH zgG{WmkUQBC#KFSGxssFqk(O_lI3*c#EDSlbQ`ltc6Y0w$CTS2jDfCdE-XT>N*0dp< z4R2{ys%!5b^*G_%da6jQumdj{_e>`@-yIU_PQ zDqQsoI}lgdvdjlDMR*sFci~SmYA=hYc5^|3`z-KdL1tSAx~tJ5j@i~vw7k|*uX$+z?;34r#?-U~5Xnt&S>(dc(qD+Ckn zc(3gIerNCa%HG49Xoc~8!;90Q zhWVKfTnMBTvNdvX;VNUU5F;MTu!?(? zD8}--q?P2;#g!$wY<@^>^@@4az{QFk69q`Dbx0gL9tM(h_+Y;tRt zC4ZN_L(GRl;=nIOMt0b`pU#7bGVd90WDzvXZSN3l1fr=((}b@zbkN9B9TR_?5P@4H zK=?OcG9p*8!)~Bpdjn?tQy{y>gnVL@|88bkzECeMb80>i9RJZF^Z%_r^YTA52=Svc zK<4Lvpw~mS{{QOo%G#Iwk6+?*yZjH~=tQYeu|_g3MDY<6>2f+4k!tx#vcsb0+z&7e z36qM6PYu`rxuBS~pz67VC4+|9lzj0}a}I1IYWHad&SCu>kej)h3voz^wl(SjDHvTH zKr%<dTtro0Xs^f|q2@aT8 zHH$UYjjM|Q9%!(cguuFZvvd%YH(>F6QREa8o2%lMTb(mL$Q~oL6)`ePY#PqX+IhK} zxU^GjBvRj>+ipL0M-t&t?wt2YVxYrq3U<{bf3oud1*~`@f;wf9*RaA?H8vG7WaBS0 z(q&OuV#-__dOUU=J})!h!`zdTyaX%?&x znGVB@4IUvzENUzuR~16=2{OM}MMlL?nj_NGm#lAJ--0`!G}-yGHr9=b;ed;Im4%ui zSQ9R1`IHZagf`l%v?Tb5Ix1nbGxH{dEE_zTEmY$)=MsQ*!l6Gj6A<(3JVN3Kic2FR zS=J>H9kX7Ty~~SP3Dcl$`%$BnmJEHHsceC__~>sSoDpGiDdEf zmcJ&|c8n-mQBV|ueL*q{laAJFd~@((>v$*WsEzUkfulb`j-?Myaxd6Amt?g@cyN*8 zo=mJIUy4kq#)@!#6_HkxXi*psFTpb!`S(eWeMze*Xz@8`-Uacp;?b(nu1mEere!Yo z$WG9YP$~_@PS}$rGF+rJN(sx(*^D@e&xWMUYyG=QrIE^s#X|HrWp7#(ok&U?imQ{j z?b6q-Xej`Rw^yowbhyqyh?91~%yPKwfeirhBBV|6+v@AJ-Z#!A1Yv+~Le!9VbE3&K z3CA+xrV6WoKiM<};O;vn#3gdg2X3gMH#W(5Vt>$ybz*;BbAJil9jjb`|y%hgADwHSv6#uyU;?>SiT(yghJI}`Xq*yZLzz0tsKTfmNCr?lg zyb>d1YZ#I!(=E=<;sz#VBq%lITZehm5pf8y%g(G|2G_VlxSp5(Ws(G7Jk?4{cdc_u z8|?34({{0OXQ?UVt4SW0U;<4rSB9x|Fgz+L&2W&d#elSG%Qx~M%6_KbCSHJZ2##1Y zfyxFRVPh!Ym>;_Chi_F)ndW0ZQ0-JR`S?~g&>y=TPH)!`Y9&8XN0UK0Ld1fvPk1_U z#+7zhz{e<#RHbjFP|83uOEnm*l~uaM^t?zrb5b5DGkgW3F+F5=PTmg|D1~7JBcw)+ z6!$7nzt}vfyv}lC|LAmwI-Y#dJq`_d90U^0ocgH1Gv>?w zK;D1AwO1EQ>#^hrbEteYlLup->w_h&0hYShH!lHHs@-+ML><4DK5@OslmD%rzv-(v zm&{KP;%+JlO$crJnbi=bCk+dn*AZ9cCQ1jJ=e|0->bfNBL#=5)>`Ds+V56f-K_oN0^~qgURV-hX(#_Bz3XM3MAn?I>gdoA< z+D6V^Vv|Bd?O_`OUoq8;gr1co2T3U=Uy!ebK;kzIqbuv^=GB2SH9Ql+O63KSvr7cu zv#29h4Qp7?I*F&(0qb~xtN0*tZQk_Mnv-&kLb@n=oh#ymDvD8Z&&qcln?Mr#mJPHk z!hkkW`+;UQxKP50Dz}-dS&pXFgRZT ze-}-hqnwJ|8IwsGX@sY({32RFC{me)UChosvNYlH#7vyb<%}FHQ6j}ez05LDSHtNW zh`IDPFy%uD3&gxCh4+H%r1#LUCA&`JJ$$jV{c7uQ=cE(A+&SL)xgBs*HcQvvs@^zkIW|jdV7e#2F?;%-~E5smF&q$8Qez zj$->&ymb`+`q%vW^PTT@_pDcP|6pe?{`E@ya{n+^|7V}5t}Qq8wS7`x(zEi_&fW|8 z$FF}KzuMaS?#nQSLa6ElXuBcC|{+j zUyVWBl&;k10X92&pFn|6-d{p!t{Aoj9nJDw)%-e_(EA-$wjD7ag!z6z!ZycX_e~lY zUu0vXCo26mm;R|D2((}_zuvyQnjY@fqzd_{2udTkSZG%O3KbRbC^WO6&{W6$jplrd zOC~Z>KnI~7Og9DQr}Kf&^Z&A<^4aVEEiZ3uG}QlFTm9ny{RKYKq(ly!F2QTaKjv>D z3*)@sT+a_}HMFV=Q+Jb#&GvefdO|+}mxnG^4#UNy29j4X@EiW-Td!*m#4(9MeQR68 zOVd2-T`HC6S=)e_cQlg(Ua^uCee`EkeS7mVeLo;&_F^+$l`s0~SOOBarE7J$=@mN= zE5P;G1XN9oWnf$sLqi`}q2^am{8mGi*=i&I&c_)s{_LMKZe`y6H#7fO5-|V%udNdS zsKtM*uC0H$|G&WJhWL*Yg9BZprP0+m(7$6&Q&S^mbH&fOzQ_k-AJ7A1NAQy#)kQTP z4{h?pv=BX4o#PSc3#Tt?39&-l_s*{4LSn7!lM5k8#zTC}cFTw{ehR~+dEB2|hug7= zlM)Ug4t(QCa^uIdN#;2U23^v)Iea3jeLgf=pGjroLIE~)1LB>S`AF}ZatkN!6*rya z<6dRI0m1eG=GrVA^*yq6I#}vHEfC(R1`u!mde!4YYxhE|#_&biqyn`GAo)1w^5mU3 z?`6G?ogi|CNB!$)@&Eom|KG6*e*eG!&;O5$S6}4k7sixIdWo0|I0k`r@=Em&4dbyb zMQJ}K={O&lvLI3~(qwxZBMfix7)bIi8{jaH^pF1Hmg_txT)ao3dcHfU+m z1tM$QJ9aprOD;W=eaCZkl+KK(Dv2r-b~_^p7h-+iPv}?Q>NzSv@fgktq*e(9X!&Q5 zNS*} z4d~8wRs-G?+HdY+JD3#6gB_w{>6Mg-Iyl@v-rwGT)qVMD|A+3*AC9}fd$V)+$H;}{ zgyordgXf3k_^xi+XyS@f?v;~qQD{!Tuksyk1c&w=nMoxVp*Z49*hwH8CpE@dnWMph z9vU)nj9n#=up?B`(X_k_ydb91g@)u6zVX;}4bZeOb*0$t>DU?9=KX8 zMMM{yEf=Qct}fauZR0kanK&_*vvg9UDuzru%eO^E6ZRB%eq7-hw*))&sA=klh?RR; zOt?eD11wKd!2Fm+Sp=x@h)!3;mI$VFlWqCZm0{>q=DO(YV%D$U9+wcBVEhu>m)8=_ zu~;pz&0UZeI1PB=r=`fo0xHdQne3>%c}}!pT>9H0Q(@Rfu}X&|jcgKQKAXy{{;hHc zs(;_*^KT6Cuki~u`GAnf-&*M^zWe8|GRKO@TK)SjA2UY{8#Ut)Sw29G<2XtDlR>WJ zBA-Y6>y@P>i5J;g1%dD^oa0}sGskY*a>BuVwNV7kVFODR;$Of0YXGquKZhMRNi;K@ z=5wcgtk1CNX`kb^NP%{m_Vz5tEAz1PudTN*Ali4HHj7-TE9q zmh9F^+845W_f3>#t#!i|REtsB`hpXVirFO6E|a$5-7q^>V@#+Q zdNEf{9V5V}c)}F<_snd>0Zd*{c$y*Ik;QUYkv0dC*d5Q9 zYmK;2@~^V2mUvNhu7BaecjLly)v4Aw&f&rzto;0Ia^ZhIX{HYGpKl-Q5Lud8EN!SS z==ajCA%2l&48(s0CGwwdAL|hR`J}=+#Lq1i-u^m%7O4>BYYD$0=!t0a=HFH~wwL+) zZ>!%we{}bF$C}R~s<`Vp1g7S%=Wkn*KQuN+UHWB%KjK}UYBd2DPUxgF6I5?Xy_<}0 z+nUOB$Js=pOlE5-+U9D~I`CRDYY;7}pp(dy&e}4mEf#hp~j7-oqiO4E8Ms<<9W9k|;23~edJqAAtQCgaY-%Chf z(wYE=;^yswvMC9Fv#>l@N;Y6_=mBRQ;}QK1oc@3ub=*AWRWTV3s$*7w@qW}Ez$X|5 z)y<@=Loi6=i$5+d(CIF8mOAm`0_iLIFX&_RPYC&MMqIuvHw8O2CdAwqTaVLLi9pt^*-;TiB)!;*e&LDq(GPv^EotoW#bZd|)$$`@-> zmy|2-NrIqX5JK98z%!=V-Uja_d{+--pniSsH>FX#7o^T23L;b-d9A1<5d~|kX_qvC zuiZq>OvhYFnlky=>AN)Nq8Xh?u5oSx65zdw-(F8TA?yph2K>WPh1@8k0=wW|&LIB{9MPxqQ?g&Ok$Kh|2cXZ zr-~F3>=ud?L7#)331czYWNfVhb2Q~_E)f7xW@>;6K`kO*^}mW!O_);)Pci0%V2e0+hy2=#PSXX4Xw5$ZxYeLXG9ri6E$tKlNEQ^o0ax~(4q_Z zh`UCZbgS$Py(Bnw+Pz@~ENS`U$1w9;I*w(b{#AO;(27d*4xX$=8r4F47!_|8if-xx z74~|pOG{3k;zG5ZTj~5i4Y)qboLT~!g|&1is99NFNQ9SzMOQ|+5|D|POM$+Hrrev(P%q<7QvRWVUD?Gl%=LYv6(Wa z9gkz^W0P;-DV`F^Xk+o+Njh=Um z&1X|M79^N}QB8}>yw62Oc#N?B;y?i!%<*)uYEezR9hU8A71BH~+&q5DbvFz^4h9A^ zX@Dvn$32|lGzM&IcoI_J1q2J?HtB!{#jR9sQxq%?X()1}ji3OX)#QfGz0HVHOU&UZ zk<^uQ62Q>tW9F=;rK?jH)Me5@ewi~eN^;k63YC0Vzv*9hfY@|-2=FgtCt3KcWnfK4IprJVzmb!S61Wg9`T%2%i&BNY%Hr+rqTw1i`1em_Ii~K2}HKULGmJ~(%ugg$N* zp%|P^dY_2wXbP_s6Wtu$=EhhIoRn3J*^qGU>5xwI^;~kA64!}{$aaDpeE){zTF}*$ zVl|c2(wLJURL8VXqm^~s4&+{C6W3&d+a_6cC@)X!jI>*lyX8pQH90#MdiGMUPaA4~ zsl5K*@H036w&Hl`BmgKzVRdVh zv*|2GY=^n>+aTGB-$QLT$6<0EuAj!mdAzy6m?QOAGA=NushRbT$9E89CNuTF3b18*fAKo1K`@@IXLZ&xg0!;1qz!V z@vGpT$m*mNZisE#vk$*NtNg^(SJ8&L6F+$HmW1K+($vziI|iyebsfWy+U(MQduFn1 z*OO&x>0>*?-r&^sL$%XE|Mbi26SF0LNU7Mk!0{ZCFIJ3Njpm$QuZJE<1L;n8tzA2f z7A1!EzlR%OdYL9pQ*#=1WH1J0Q#o5Weo2_B^$pZ;ZvoV;7p6OtsMW|{oUl#$G#zYu zHc0iRvO~Z{uX49HRZmJ$VI)bqoRW-6BCsu`uBE*YNb%NWJKiTHZdi=Rrf;WT9WPGk z=-%g3TiJD5L|i$>Ta1=gY+X~&7A!W~o4zaZfgp?7AlYd{18wcmbZXE6oI#Wo10`_X zdj%7uB>~rz@LG|2m9qG#OiN<0h-WWJ*JKL{>szKURSf~~tQYmsf*n?o^}0P;eQu)S zdC$1)qBGRKr>y<~QR1vAC2rt1h6>$8HQY}76og;>4?4acaao?!;(|_A z8&cu=<6S0O{^cLLGie5+YxUspAvFUsor91LSirF1q;1*8hhNEm zyE^l(8Ja{c;GGIf!a#VR*e9r5<6Sz*#YHPNHQ}_Q0or0-<0fu0J&(-Ed*~cSVgRyn zjo2c)t{8y3WKsB@xo%t!S*l+$9!f_aPE|0i7d+{T{YFtxl3w34vIF12hgXwa(FlKb z)mLM|NG3Q_d$#zbESfY#ph;N*73%n+;=~3_)J*;1Yb0VsHc|~wfqZ$T${C_KPd4iX z;%{V)%y4dIjO;9--yDujW}_2A&qaJ|TkQIx2J+2iMH&X=|A;kr>^Ju%{rz04KM?KU z1|GmYK@44Qe5G+2Ql-akZ%8`0e%VQ_}x_8fa8rgtTJ8XLG|ONjWKJ?tjo z5h>S?aah0=;aR^}6N=U~^s?Z%=`_#z;#e1DRX zI(3mwgkONHbxa@9l9Wl{lIl-Bx56OIu{y@YU+qY0QfbC1+{)7>o`jZxXy>KUP0^s0 zZjg_>O3h#o73ql)5wD5ove|Gf0TVX9$6g@#t{IrjR_w=dcv4kkvXSY;^^QhMS1tq< z$gW*qrG>DkT$gin4y$??s@HUtmAVINbsrubug#XLgilh8AwiH~l0=A*k!KQ5p+Dj3 z)=9!HLkT>o>YI^A20GGfom+p}L+8NC%`&|lZzg}Kg8tj$U(8(o)`=cG_>0WtZ%YZP zxA(J3$7)+sUdz`o2XJ%4A@KC&b}ud^i4~3*d6nY~O#dylF-u*Anbo*>pNXVJ4z#Tf z=3VPtZUmNEsP{@cY`q;7+@RG+xr0I?E+mA~El4hGiLfSFMhVKBzCQs%08tV&Qj==> zLP%YydS-zL8=VwroXq|j^XwU;hp-2(5M3i3==E&dw2d74GQN|RKQ4@g+QlFU$6yOf z(4~4h%`V4g^CE|zz;dY%?qjC44)6lz2H6LAuZA2`0ol}_se!hY*$g43bF@B@DL1Vy z#@eJPehySi=&#>sTlHyTuqYB|OEUg##`U zAhEa;REi7GgFAT3e+`1!pjZ=3WvHxCkrhp0+&8+Vh94n*coI5ZmD({UmTjezyF$Ms z!U@4dl>xpDL;`7ZRKofPxj<_^t+pDd2W0ni=ucNEryWw7pIB-@96%@|aFh8~UMEcfd zd%S}6TXNEc?_m|0FSh~IkqvNSs(?^85Cizul#QD?vY$LRUUDqovNrU(Z=Q;Q5S)FT zLK){Aad$W(%>_SdLmU2~DDL;jY#~Lnu!ol4s{|uAGJleYDD63X)Kg-`|{3;2EvcK0_pDLgR zY@GG}eint)fin>X*Q4|@?<=$$NeVY7JtZO*nKomN`uUW@c9k)xK9vrSY5(ULnoasZ zBcFVmNF<*>afrF)V7~d*+f4}T-1ZFQ&OB?|#--3;3v{!BNMTYE#IsLSdxW+RJSa-L zqjTj5WB3jXlRB=T%T6Q$X-dG~=a(}sRtDtLIi09dAR#Uj1dBuHS1r(X)h?X|DESyp zy7pj6oJ)YyfvDtP2oVrrO^oKt0-mmxw z;jFNb;7EE3-**!DB9;qeYJ4#a7iZ4hrqhNz+r>{zxdbJxPuM+yx2Q)-=QO+$Ra#Mn zpANYVgV)$5l$DGuFGVkvEGoqyiN&vg=|FRzA|sg^?Y*p>iq>g$v8AS79v58_7rOsBgKe*OIZ&N|iQ73h-IW3w zKC+5!0Y}8CooJcB6hy<=xS=7Fr`hFcHi@bZRs`9=+^C(6SSi?KfimNMR#L0Bx>X}= zR^$v3g6#QVh}*-j+{k~ynSP)Pao>+KVQyeh8E^di{KhDzJ<9W((+o;Mq#rH{C|Os2 z-&gDQ;6xT}E`)zTR?9EpgU*Z(HL8@JXMBh~e31S^Fh`-$P5EK?z+T}kI9|Kp(A^_p z$^wRkFK-6a=YsX`K zSyMi&oj_}D;=GK9#z+gScb{e&T199wg#nJS!pqR8PMJtE0rQfGH49}l8xFf-{*3l! z!$6XexPun?rKR-vk!@KQIO^!&-|31kid;OhGTUOpIAgLj-0+bzzPId>-C4f`ckK7a z5uXy<*R3x~V!TA65nmTO*R%1kxRyCA2=*Ev3r*uh;(j8u$p-j}TU@1_8pPUcKnK3Y zAK0zTI57D-N>VG&D$*udIwP4)&07XSt*Ovva%IQ#2*QO*2gKHf_i^ zVOTSThDJKQ&E!TbC6N_sq|9$cv*tqXCZ%Q|R?=|k0a8Varp>Q2VX^5=QEe%fESlWA zjLenMl?uAXg?8bMZ0fJ|_PTZPmW)%<^O`W%D6?TS1>GteQIVtJ9HL`{s3*9v)y-r* zyC>l<(g4=P8cOWAiM|xUgfV^Sb^q~VUe#Nk+^Y=H2{NFJ&_24ZYj+o%Jt>LOQB|H1 zeU;?7(NL=oLsX;x^KB{4tfx{>N1HjSea-W1@OprgZ?kb|O=R;NwCNbs&hz3-O^3LU z!0=@qaa^pd)hD}Z10#v=9KEsy7X&`)k8_Hbu!Gh1H1Wfpuko8TyXP};81$edzF zbDdw?ZD>vcj^c8j8Z?qr|=$Tmo%eA%E3G#d=rOXP$= z#(@hB-?!!-v6?_M)C@xt7Qv20XEWh+!qEQ;LE8lM*-9LX=tE)dq#W;(%Bs!!Mm6ZK z6X*_VXRNCO<21MFF`+{9b%SPR-CK5^aCQu}y@w298fp6e>cG`Q%Sq9ny+NYUe9WMU zXE0sb01>w}e|E0%jU^YO9|jMqzhEE*;+;Hi40R zN=SwfdYJ3y+?iBDKWTt7X-PfR;3JyL=p3zcxf=oyTJo)Jj8xQM)}uWdqSXSoBq=mK z2#)l??V6YN=5gw25XPbG-CT69A2M<3%#^LCQA$Z(_SIy2)}}RZ$E&^XL7EoBY@$h~ z{`FFv@hlI~Y&3=@g$)FIGJzIP^Itk^xvbsqT{8XL4v4Y9D4xRTgI)G&sfa82g6rzpy2MrS5HZOov?Hm zCSBDnMWo>pP@3Yq41EHTKOHZcuHz&F!jO->^fiaN=3;_-pa65;9AjqXdE4Qo>Z6lX zFtm9ku`knj0!#i`_TcleOw!xa25d2Ar2yG!GxI**?@kmT<5(6bMKFA4DWnC&AsE3V z0LQJZr`&LskHE%=m_%}QK`^>sLW1Jm-4-}u6Gm;=q5i&<4t*cG6#Cs6RlVc6VZ^kT zM*13iyzr_nq-qRRDR+|f^D&cp2}vGsT#7k@q=Q02H1*oS;?&G}tAP+WrD{J81Vjc- zp?6?3Vhfh&dFxa09$>A9)QdhFHf{K$F%`4*xYd2EihPh?FTG5O{1SQyk`&UMDUiM$ zneT`OW2^>jY!&}?&AIKC-fTP-zwmgN_O(|t6U8&y$P0$+LQ5gjai%O%i=$xs&HhrYL!V4HbSzPTnlB#Mx1eWC=K|z z!Gu=HI^_q(#n?VTl0Y%FeP@kSWN$O;O{I$h8*;v+mf#RFZz>nDG%XX&q>i4v?6;1S zkQ2SsEZJPseqLJh$aj-;e34JH6U_Ty!jvnUl_zSaG(UUhO8tgIUMJ@d`7!sRdvI*O z>*d8mO?9{9X`Ci!_jaQgpdtw+4NPp;KErKy{y zn#GKhW8>du*Xa3%2o+IR3B#l1@(3fji;06KM#ZVdSEhTSsTXC<;mu zQ)1+L6H~%SJHblp;Z9`2^witn>de}< z!7SvAa|0zTV+}FbN-6fM>;x8N2J;FP9E8sOESgOx4R^-W(HZG<*C9PhUq^Z$ScGy5vR{ZhZB8}^Gi4#oo-NbF>ux{YvsTt zz@iC}5qD3(M36Ej-;U;|nVNwf+E}x-lu(9ZiM4H8kAJ6O+M316k!<(8xiV5n&aK-G zEfl5|o+sHk0_U^R-j9)GtAceQ(#lE)*;$GdH( zJ<*Jt*iSz)eP0I}LWMIV;Jx6K^HOZx7d9Kafyz|x4351N2S6m1k8ZkpB!)PClHl+mm%Il3wf2U;1z>of`ces&63$1|4h(-hp<%T zX9Upul1nffPM3UGQ)~LNYeX(-=}>o%NX|@Ks0;^**1}{u)^Ac=j_K@9wM>FkJg6T~ zCkR&&UZ(YW-Ec6e2%_4mXd&msHRtp}m|oem%oDrJ2SgmMQn8OSad%06l3cC#uz69__~K_Kz03{%Jn* z%Z#{BsnO#`suTVxj%qfwm$O`?1yqYNa*6StUrH>LI0gEI4m8YzV7(7a(wY=5G4+Ic zxF3mfiPDOX!K<3>JGHS{8~_@*0MI>=M)JcyG? z48uVAX1^=}KW54jn5W&Npz!gtTCL|7M|&MC>_irJ{mi_%6u#;*;YhNi7vuZ?SzL_b z7e#g-%NV7oyt1~&^2&L(u;djsXE=Ykk4Nrrdhd1O`}8P%wYK&*6N2c?BnbsYS8&l3 z{B0JBA}=hu{+QOJb{&mgambsPU6F7T%pgJ+&k1P=LF^P4B-`~;k*y=cFFP6e94uIt zrxpa?TYlyju)NaPl50gE|MY1!bfSDZy0GSh^q&9h$9N-V;{5?%ZpKf4ZrILMnkhURH;F;R(u6yp`B_{rc#>X8 zf%HYzZ*6h!;!NG*OFnD~#6S@f7>uN2oG^?@F|>{{ZyB0vPB(7M(+pabaNPx$z$@l9 z&$Q@lEwCm|P{V2pes2SNO~aRgYsCPCKzhGeY4SEcm!Xm{Lc%5^^HWQv0-!TJnZ1i_ z8RYEjEbrS!&?y&D8FSbrLS|K)3+ap4+JK2x9wN1Pc4@N05E&_PKV^#gU0fbXtAnYv z6m~dQa;jXCMiU(W%Ftm$@#;g;lo0YT3Yc?1#t4O9S~kZ!RsEUKKCxOnqIQzM`>&Y+ zRTT95_eiP^?svEoZJjSf-n<@5?Lnp{TO(T8k)ok}Mki@&J@L6Q2%&&4h{d`&+R_0i zB6f0u;%Fx)i$qV(I(p=r3gSl^?x&@o@*p1Tok@qpXYr5y9uAOK)8}}k8p{0?g~I_k z>~M04HtmXJz_|M@3x+=ueePh%KLt}zPKPHJ|D2B(y(t-pL^M%VL1M{=saLPHZLcvo zBZ(MVyx6oGn4H0bAH!L?X@2+yfeJD8|0G*e-<9w|Ga6H=k|V=#EnF=VSUX&%JyF(B z5}cf~IS!TSlSV1G6ZSeXVl7Jvp(UkV4z==TYZuBEoxx|T;S~^O=rQ7I|8+K1p9njp zD`fr&>6?3NjG2#?T8&Ts0<77j%5kMv-Pyul| zdG;S6ejjfEns5JES$njyQnUX&UR(cS|M>+zH`sqT#xd`A1r;{MpO*LIWB$8p<*_}4 z*$F54gq%A~QlGf&{L*8a<7~W{EU!OVPq->%e37%qkZUtWCdl6fYnn1m>L!8M^7?vw zeFDOsB;78`PxleYq22j*8;ktKAz(n@%nhS8`8^nPJ(1L`q$vk|yJ#sB2#(>yPUdmx z4lKl)D4s}#A7jSSxJ*n$d%CT(i9h2=4Jh2@ys_k9Eo_5?kG%*ZO z^J&GX$2r&|Wb%(9&NSB!CR3#OxbAB#M|$2an|EvLKG|yXm@Z8_vR-bl&eD&^81zS$ z@JRRk=_j*;O=cknItoF@9%zwTYG8Y&&koK4$~my`T#h0dlLUS$0o9yq;%cvsA&$fM zZ*#=uQn7o}IKuo~Se96H5%)Y1sVYYhUI45YZMtHy}4~J<6D_URauX0ceDwzfY~u`_DFh%`6-A> z{QPd0P65@e;Cw>m8A@REZA+;PA3?=fRPPsCSKyLJc&j*GMg7ukm_N9M1RK~%ztUIc z+=~~XZldGd-W03P4uVT$#-^WI?onk}&XYlI0@uxwNyx1l)P?1*-v-D@Ej^%!Go*aAR?ras7=BS|C$0jMR3tk3{%$>tyRgI&WmjcX!4_oF^TCju}*)@Nfmn<8xUQ|=r?InZOV^89roN_|$Ok1ltYSLpxW-`vC|FLm1A zM~nLZOh^3U56GyZf9$<^^=hf{m8E#=NX^^xSJeFa58v+`?x2b2v-mdzV5$7NZ7-W= z{FjA%ut110_*?z=`iR7M>jswEQ(w^~ewU@g6Y!8ldS}Vz+_QXt-{Pwv$xruVWXje7 zp$-JfpPc?z9ewZ-iu2p-dIzLt@oYhDK!2g-@SB_^y6_=Wl$o_n%=!701cA`8HT*}y zo>k8tIHvuoTtm05D5BWI4Gsoy#;TsfhQDze%F}{#8soq4YrX3%o&0UV!9(@*W>~fw znq5{)5(yqc9IU67qGs+4OStwy7`w_e&HxSjp4lwCs)tCaea6prJf_+B;0BW zAs4@K*-<)yNG1U4l8?sdpx9tkc=UK9(V&n@rG8;J8g7QNdqT|9%KB`&FW8P0UXho@^La)x|XJ4N>d*`pO!(@DE>86!=+P@wfoAw1Av@WjgB&BP% z+8p9WkAC;c7KQe24d+z#(=kFe&$wt7&yqVdz!4$NKJAg>*QgT#jlgm=y4W+k`X7~> zF&Du&lUa|Tyy*;hek|1RG0<_iW038578~4Rz>5!-*Sg&%fmE$fpelZ=Y7%X^>gAsi zT4lBaq|_Ku<3&~-A`_x*A0p+9>!u!DPqGt^;Fjp?#5~FMc6`}0zRvKAKTU%qBX^jh$cPVEQU&K0?G&tLBkV)gddi0@s~a2Zb6!Ep z`e{+TrFSP;muGEWeYEz-sBn|aSKrKoV&nY>+5emTKjZx2Cmn->d>?PL#sBiZEB>GL zM~_$k*TyHEMa$=Zxc{f+{L|C^r-=NP&rSKCk5_8v|7d07OZ@jQ@k#E{Q73V?YyDU0 zY00rau?GFMdn@1{|&k4UCnh_A2{;VD&Ss+ttg~Vh+Z~Y5hO>h}0ZZ0IkGv z+1h+QIIfiC45QHhs&&$`5s7eGDc4KhVdthyI#|D1YO*y*$J1^3lY^99Am$dtN^WUj z1p!%lp)JR3^3|e!fQ^$V->6-{*jCEW5}X3s5Cy$$*nwz~0dwie@q0N}zzrLPRkdgDV`1-7I?@tDlv&~B)}Dj!lpeCx!aXukbs|F^N{?S8t@2LE33u^O=q@ali2_Wgs((8PqZx~?d4P}A_lY36s|5RgY^6ryKz|GzU0WuG8>gz zI|E297oz-HoiQ9Ai7E*x7cp~Ijj3cuo)WT7uJtXc7|%q25#RVU%l-rf_*BbIClZuI zdv3w$FK@G6{DP|nO*5ntw8CtPNY09X1(*CAMmA}(SAcj z?k^bqZ{pJ8Ty_*PLy}v@&BF|wYBjm=s?ZT8e~Oc&mn46(uQ+Uy>$Ig$zD~zIb~(b` zeU9GVydP(|x(2a}gafCu90gGvf?Zs8{lyo_in>F?Mz~S40ESJnDyFJTYS_aP&0s>lgr% z#Po4leo?h@FkiU*{-JO+q6VKKKgVr@H3-F5d5Ix>+RBzN~o2 zB)rl8bXO(Obe}?9n}&%eCmqA3P$kf3Lq=-xcvOeW0Fqm!6hBw14O1s zts7@IwZM9+{rK*&LY=2H1Cw#8b#Kli4FMetiQUT?|QAj1BPk}-r@BC|^P`K=76k_$QibRpL@bDOtH14$Y?G~Qy z8qyqGdpqFCgN?GIs9n4-pITP*M8&A#fJNWRCMTl9%zZ@2t_9;^gG8sBA&=dDt9nyN zQ?=Px*gUf?zfkj{SB8hQtMS;gF8Hib^A;JS^MP&O>C_?J0Z%nn%xuy_%R^N*lg6z9 zv1s2F_v^{&^$E-kEf1Mps~-HZ(f7ce+O3zjR2nlEJu&8X4bAFUKxhKp?0-<|)0fZx zYSsU|DD}^s|FyodzPw(~|JqpjqW}E@pLzLTE}UVGFG$tBTI$hOc|Gd;-x|>+RhlI& z;3w!oF)4+iMHMAYn{-HQl{Ic^zfP$g??u0)L@cGG&t@_%e;y`LX~VMiM>bo@WK^I^ zBu5%gL{Y1}EP5q(JMkA6%}QyOivC)|tlDWkDAKv9vXxGwv=%qhS1005$ENWl^hDUo z(cc+LANSq1o!WW19m!{)z2X9kVE=hPpAN5k(XrRH6suv8!JC@qLx>(~(jin;uN_mH zpi|>s?#)GC43^+$FKC1|@x}A4gWWF2ZR9CuEo-U&BDn=QnJHMXXpO)lF87jG>}PB zV02zcSvl7x(@*ZHV?7M6H1M2?fKCZUd*E?4F7ZFz<<<4455IDBxNB?~49E>pN>9X0 zW42i^5W_UdnefN(2BGKjwBx5y%C2~*>qXWm#x2suXn9oFNLTuAk%|$(_ykrB<_bwS0a5O=Ux5=DlEU z$Eew4Rk5jQauf7VmTKkLjU=hfgfAnX*d{k`yvG%1)&3*x&V3>f5~y%4&iYd)8L6)o8X^Ef!*HKEc>8Nnk#_)`YOOl}Jv5 zTg)zE7P!92&}$=*gpYaU5rWa{t;-fsa0iu7)oMoa)>3T_wGx)C(`YGnX;I!5y}a#A z?CY<=V6+E&{%6jU&NiFwr>GKJmgq>gImx2Rb=Jo1XpN>~SoWt1Rort6pK{LB9H(TW zc_?fH#RLOrY7*o-tX}JmX!2Z*1PuU&+Qd%L&6Mr)CEk{6QB}ZAEo;Y5%{zCj{5s4} z$3J%svEkaU{tUi)wfp?wcirv%y}hI3!`;2_n*H~t(j1*zsw=iWFPGaH&azVc*L=EC ziQAA(4zc9=PGLs{NA`#wHvmYo(Yt(7j4q{_j1~$4?M_Js>rcbhQQ;ImdJA>e4z>=r zUjKIIk3Z}mzBu~$5okr}q}2Mn9;DXV&Gt&74Y@0^?cH1zn5(2E@%yc}a8Iz-U>bg7 zSo86M0;)gZbC(n_H&QREk#9_kkR(5 zG(EE~yZw_qwg(-x1=5pfcJeId`sbbaPyW0DR%a8LTvZ!Wm5w95wFp$pfHs@26W?y^ zTMu4+uk1sBlPGli8U}JNV3UQ{_!Hn&9I;;gUV?rpfbN z%;OFMABuY0tqr8uuu>JfdR*Aw~Yi?Ybh`UpBrePks~ z{qkm+{8mIz{eJ!ig{r8!GyOBxLMts&rDA1`BQuxT^cvG}=q5kwQ6D}WeKfg8G7hQ` z-aEaX(!4t^gOM?j|Jvp($jsAVjW&$`)u4UPz=B$+AY^_XE!R;`N7vPP7!XIcbnGO4 z9r_h3y7wmPv(tl%%D9*C3R+U2lm@<));LQ+JE02Mw$tjxULCAOZ9cK&O1TEMm=+U8 zLsPA~6{tbr@F<^;cg+GwFm51>e5}-Q7f~a)eX7**J-Jpc7gQH^S=LQy<^G~fU0>~M z*$Ju!=TmQBH%oq}>nXV6q0kKp@1C{<^KeS#+?ESA&d1p>A7zaTmeR_hA$QYH2Il&{ z`BZG%Rp#j!rx`?8=eW)|1E#4Np_!{$$9xgxnPJhsASFKkbE=JI@{x3KG94VX7nhIz zo(kydx|p~#tr&Bjyp(J(WaP5luWOxcJ~23!~5+7RCv64+dzW(12x zliBGc@0*~3)O6wjj6 zuYqfCl1suqXZ+DM^ewI(?vv8x3?!zrc)-nLgi_2^5||_@n)#CMk^H^lcI%PCdEzGJ zNfwe(v-lV0e}7x5`sa>=s#!46WqxsYQ{+zlwOk>6l9$B6xrW^+yQ+HC%GQGnUvE0l zhK(5jTv#uGWiCedEI|-dZZG zE5mffm{YfW)90)2-fVYY?7ZB1^Xj;Je7LoDw6%S_yT8}nJ=%Y@g@3hc7Id&Dz^PBP zPZr+4)IJ^VY`y62@4fnC>pl(8rftFj37=-89Ke66oucn{4iC4UzuIYFxwa6JmZ9af zG?V?DA zKH-I3pGdUUqzQ>w*67M}bJ(yK2Yp$*%NhZguWID!Jj7OVw3_HFmx(63Hlx-HBY~7tewP;aO^rvdv`jlXfFF1)u#4!`So(t3FuY9JkY-V zlFi7l_Ej6M=07VFHEI6b^E8hm{;9Y7;?+*#8}K#631qROMR$>Sz$IR-?r<-h+dXe` z7LaQ1SkLjnw!b5rLJ_#z5*Lz94zx8RZ4g&@bWl)BI?c<#_{@AVp;JQbf7(VmgDht& zudDrDHD2LyFFA&zPYpcjS)=97^Z;1FVYI(29cUd0 zI(Kg-TBgwN*Q~OKMQ}Ewgo_RFh?no-xf)@dNXa*?&3X>B_^Wn=jy*Z=uR&956?sA+ zjjy4M7|Jeyu=(Al{f81C%1OfmcMu7s{#tw~FthU!7 z&DninNM9!us?4VQ6F@j-{3~r(c)_D65qzXPc$G=MsEuX_|SZh_TuE0;TGtGh!b)=n0 z+~M+|UA>zRUrXGUwmE&8TjQje+gupFC`}XkM_ic0{a3G^Z*BkfPFJS>Qti^z9tp2a z?dK1=I0g%Ee|2ONt08ZtpIkt9B5_?VIVFX*kwrq!Al%_@5n)w zb1x9G!Cw?tqikaTGEznokBjka$P2Iewlu~7R&y8W*ktB)lm$=xb$otet#j{bgG-_; zQduNM{gDbusXy(Jl%)1+NKI-#-jZ0=Z@xQno6oELxJJjUzF76t1(vBTu_~f z@!RbBs+in5U9BzhKkzwh1(AnP2ZrxZ@SihawUmJgOkgFb7w%SuFMil&#}svQ(QYRLd08apjb6t3J6lr`*XkTu6@e^XK<%u;L zYCkNw;BMIkLJa;}q!{p0ZkuQDVZp=>m;O~kikqToy)*ytIN(;m9~!GWH+J;qxVM%A zg~k^K1vN(iRZsTDn780$KP2p_SwXl%+|!3H?d}0etuDT%AH#r|)<>%GCvDHU$cwfo zsxb%iY}#$V&zWps?r42LmAZd)4UT{0XHNYW_~$=K3D6trf3B>ouGQ+ltgfwossHi| zd{_(el0UiVLKL}@1E>sonT~Q%^Xl~sZqpwiC>8^!lhgv$Lh8_0&a$hR+vk0qA8PF=q%L8}+Z&A}C zP_6yMt#aN9cnQJtiwiRFv%#rM6l(}4-HGA+f3`uF)Abp;UwI8ry65iyk0z)8a-UZE zKfeBC4Pb7d|BqHTR%`X2*O$N4fBq#tbL)TYAN;X9$;7;8$`8%y{{nM{NjFa!Xzw}fp^TXGu{DX=hY%ISvAqyOpp_#VvAQv-jrJ_D9K+02bDY8LUPIC=s zvURFqnNK6@qLqdZGwlHAtS)@{UgpE>2f&+fIF1V!!>_d{$Jf|QY_dJ4+tlvDlAYO2 zBV~A=x}AYBIZ<;=WiMOQ4c-gxm>k6E@X@N@o0A{Cx>H=I)fgSM$o4=J$5mH$O>WE9 zvMlps=XhStN?w-w%|awG047E`q2wMO0P>jdOYXda8apE!b&I31Wr{5tRwONt2dx z*JxY4Hf@@A_7r?p;N?9_L}tiasYbT1{xYj;|PR%KWGZ)!?ssYy5q&H`4y0%iXs zfSZBYdTt&OT2wP|M}GxAxj%S*OE=>CFO7AMz?w4e1{&?l&8TM=`k@H;rsQ@aX&L*l zxW<^)B1Dql8ZKo~AGi7GZqOqUU>fg}8o8?4=fBI>eJjN!x>Nay32;f_{{j)*hK+!7ma z(yI|BnXBhDlR(zSE(N74v@X%_+^z6UWZT znr&AwTde>Ub4FR<+3D3mJ1p@aD@f-iW8ffrL7KA-)5j%9oM;xSPbRErgFIB#WI0Vg z(ei(Zq&l1M38{o&Yy!q7DLpRe7Qz7t5eKrMwrFEH3-RqLNa0dIR^@KBq>e6eP>*0F z1JgQiF6_NUQ)a6xt!lKmK)S(sHtk}R9`bj_*Q66KT%9hk4fZTF!SZ{|`v}cDx|`43 zPA{GIB>F&6OEWEolTJSKIp=kgM3BP z5hX(NA{))sBa*?PRvp(@DNJ@0DN0*IX^2)CndE#fQ!5nQPEuPLdEbNqLVfeYkmLw9 z`$o||F%Dspo}HR`)%GE6ZDo-S6*^7uC~Z$P1pk3=xtMTFjj0asy|GewQlx(ZJ~(49 zjx^WZ?GLNon#ywN*L^LW!G}#HI-^+oO-0(9Bc5Jm>076x`zXYm8?`QmJtNZ7yt-cX z^-VQf_yyTHPRyO@jSW`I@B z;}dJ2XzpnvkivyTuE43;Y&*HlTJQO0RAOSxwM(*xE)tC^sMEYo*;%52X5Bzewq+0` z;}bYAD6*0}rV<{R_-TLVR#%Ds$NP}qxT&ZYXcV;Z+}_&T-gy=O?#<5OACnVPJt1C% zg3Y^}+FgK{;BEla=B^rSyef8GEk%{^j$Wa`tJ0oK8`3h=+EmwiZHwldH>DIOV+5X} z{TU#+P{k@tnyGBSUO_iOEr3$ZOIHueok@Z}*nPnWlT9vR;ZyNRl3TyVQv@zK`hNch z^Ce66=TY6OrUz#2Gy!Vd%Xmw&MZ3$!QKN|8tZk z*QxeesDMwXd#~d)jcFCB7uEAHyf$`9^mMIvTQ_rHXs}kAS%6z&5<$k4ozGIwv)9;G z=r&x2r5RV3k*l+qeRa~4)5>f4Uye2aU7z0jmE?mOUxv$ahPdH6}8sp#V$%i-c z{=iS0{YNXrei9SV4gKF%*H`NO-&WSX^nd#$K6B$gw8D5}?>E!;O{=k111ehjz4?wc zzdJz029mk$-;NQF5d?dffDDcGa0K*z8I(b>5&xcp=8dzPm=fk*NwN`2nz%aHo|z;i z)y|KV2Z2oLA@oM0t5~2Wpjt$OO($R^@DKr1yN3%6p$TqPa->iowbHRh?x^InFi(Kr z2ab{aG82_VN*P2hcm^4a64_!@BTiT#$|+sR=@j}GW`>AQC-!_9FB-*^+p^I^+FVqm zkA@C9MowLFHH3Ax##98uo*&4m6@-1&Q9Tl>A)9$)U5Nc~eE)tKksxoomWeCYwzl)J z@m8I}H4UZeF!{h{b|xWG8`k-UT0=_{nbE8Dk#mnm;%IURX-qKT<!@9?Eb_`|5gRgp^EXKd6ZrNL<3NtHr7Lb9}>X3tA&W!sazNCH|sjpA-9o|LvXn z<4I2r+Z#_r9!0fVH^y@}Li)(qbs2ZLb8$A+Q0>Lr^qSgyy^`DXnD|4jIVVikhQ-7n zcnlxw`GqHL`*}k3oHwl=Sk-`x{OjvzjKeZ57DsDR{b%SW^p8ojYAK;ULt(X>n+KVn zYvuN8%&KwozLd@Xmo1xrLDL17lnX1s$iqID+mpuskSU4&u zbypZJ9l~cXps&~M=1gnm`8=`<1+w{e2(cyf2KhT;+r}#nr5h%u;cEcOl>Y3?J)^hf z_71K|Tol~v7$*|DM$8ors$k$#iJ-2KJKiy3Xq(BS#~Zf^U{%^dl<4{{wC3}Xnv*j7 z`Bvnnk;=&1j?$djf0rKFDXT-v_22@1uIWWb`?*M+6OpV{m^2k#P4T(PTs&~J6-6;j zDpejiYl(?;uIOSh5ZzM9Jj?Td6e(L$&eQ4Y$RoHm3iw z4Ih>8D(1Rg4A`hL5m^ZMd3?BY{N`|PckjDIWE^?mXy?_=_Hkkh{KNg1v72ey_>7aUgX1;SD}6^-hReg`Ud<+-PBJ5q>dm5*@!E8Qs*QrwzGoqs0;KT{ z)Q)^KrlWQGB2Qw>wM?bAoMM7Z67u$@`UT~ajEF1Hx7?^iH+c@uI%<2CPY^9P%Kmvs zZa3c2&X)F|0$rNd$JK*v9~NF@uL9*jZW5~J3<%H1UBvmw2;M@PHt z?}zlZ$2-cvjfm`0T;NfGRKr3CBd!;DdJ9zb2NOK?TXl=Ayag-7y<1@esseCytxG;o zREYnLgY#_;QS9m`b49hGUqGEnt&Aa2C8nghO%(DdT3~SJN;Wi43(A@%#Kr?{s3iP* zjaXRe;v6T(Tf48g@owl_aU{uig`WhOO_fT!I?ax4sJ3;mYnI7HEeRJnJces_W$)?E z7Dt^3?Glk8e1^DmMX%tNHKC}QZ5J26|=PqpVpNZy9f6vki8$+{q6+N zV4t2049{Y>Q-i}hwZV8IQCxfNt14S;C(vUPLt>1dZek79shMp^UxPcbN?TR~zQFyBV^Wj+XgH?c7bq-|n- zroul7`;ajfS320X@C#S5qVgJv_h zqSa>M9Zy)70_UCT@dxD+@j2xLEWI>9+}TK~6!t_dsc&i(W&q9}U~+GFkE=#&LG|6e zox{WZLz?3tGgT!yv$Sfk2*I(r(>40QV}kld3Uf6XwP8xUHS*gz`OvC#K&FX$@qSo} zVv28H6Bb_KB4QFTQDU5&*3e%N0;$)wM9|68-lXm#jDoDAsMf&eTC<)fe%du4D4fS?Y>9{(RSmGh&>#bMEJBRTxS_^r0=&HU%#qPTr_im}Ry9$d?gc&sX}Ru7P`xv2bXbg@06#L;No_6C$7tmv_ZWDuDg!nP_#@wuI>r1FE;%L=Na z>Wr1?R94J-OrZ^~I86Hvy{&3wa<`_j8V1*TVFno;P(F5EyryV7md{m&uG=P!Enr6f zOgW7gVMppOgS(uzW>ZsMHj^#NmF@d`QU7qiiH&hMky<*DDm$ous~EXQ`5B%TC0+V=c4EYKOvMuD!cIS-}CPCk#m z44a*W`kazzpMdg~yBJUQJ}N?I{d6YD@K%t+WL5eeWT&(902CbvA^BzLJet_}*+|32 z>HX1eEw(~c4B7MB%QP6)QW!N+37I%@<*%ny3I$9d(&;MNNYAbS?5u8ui&%8ykB-f zAM3=s@%bz(tB-5o_7yw*IOZ1J-)1?x0EfBMA2;N|aAG8w@a#f$Qk_HR+AFcZRU#&S zC9yeErHgd=^K+c7?Hy}&qQ=~VR@GY^b~(KW8?rjFFf^&&b3@G_cnIwPemecEDwqy!)4@`QC`FQbP zoOn#{{dxt>8R);O?)_f43NdjaDA#i$RhHyY0+>&kWHb)k(J9?IjWegd(Hj0z{X((S2bhdX@yxbVz6mUorGKsYB1xm60cVoDe7c}Mc z2hVcLP$adBMgXmKDPEy)R1LfG#`l7+Y=EJO;3q5tc}r1&$=T!r@_}+EaQ+j{@+)#J ziQIK;v=lw1tiTgdeABSHa9n`5sMjbdz|bzU$+`3!xU?0Dcm?7<%D9Ope&pzL)J0e5 zh+38*U#aF?;Lx>UzEGh0Z1)^ImSyQ~STIl=3>h1sx~&BjGA%R%^rWtHFf z33+;I-+CNJX>49eO!#j$CWNp@^=1Q6@yu7Z`H51|n&^;;tAAv%_g zICRdK92Tv#YC>X6SsBe@u-{t?>ynLw^}8OJs5v8Z%sBo-;*JH7IrXr8cw>ko|MHsF zJz`06HbetbJSK8R%soK#8O#zG?k~%+f z>%TjHtc>>GJ;-v~B!=i>Yy>!Aq%>RTD2QCT=RDsX@bPI7 zrwtD(AMRCpT}p%iCS)q61~VhY2KLMcp6S-IQ(vQy2!DJ(v{eR7Wo*9)p*Zv0^n@yM zlwN_|k)#P5S#H|v*bsBi5ro=bVED*I8D%cVmQ@WL<}E@qn|}WkwqM`$>N;cFRPvWQ z$J^hZaQL9(gTBkgt6E|~8C$>Y(q-}9nEg4MGi*!>X2_%6jTQ1jD$y15Y zS)HQ6l~!Wol8dDJY3Lw)XEiP)2365=8T6!>jRt6FSGG%A2C!S^o&{r;#@2DT`OJFQ zOc)fMb*B@CFAQAonU&?`wxBD|Qz1z1dQ{s6f3Np{zte!?m&H3vi~^*!&~jgN@r5WO z#xRW#@06EN?@=nBMA&-Nezga<+IbD!N0dZ3+O%tH2xW^e3EPgVN&ocbWJQflbt1Y% zz$nx_A`z{NsEU}C)F;9IP?#vG(ji6TWRbqRVQwd z9Qe=Qd(Yp1Pt|u%VET*sh@N}5%6+TkNPfnYwzdvpzi{iYnj$ghw^l(S40irxk-z>H zeL(#0O~JRHc%Dt662>UR!ud@{`%8KCE1vu69t09n1M;@7_J+WaX-(h~P>Q`ahCd{% zcX1)iBeKn|0425B+wz{|Ap6EcTl(FfhZ91att^b^MKP=qo7|dv>@}IcgLU7{5Zu1* zxpv)Ku^6q09j-*}h9)BkVGL!nDM=ijc)wvurYHqXgd=j*H=K9Ys_Ky61($bADuhspzeI;l>p4;%x&kb_pvFxEWnVr%?vx|(G zL_)c|)LXyQvbambs3d<560haPi_~OrHshQphE|Cqt`fd>82G*hJdZKlh83p5tZbG zSa1JrdY<*v_RoLBxfeL3s^nCx%F>`V;9eZhU}_r6P$W`G0ELmk?Yp85rlT2Nt@T|% z)qg{qe~qk8^J2VU=Ny0gEMD!cEI0?8{mEGa>{mS)18LEqW4*k1C{+o)I-jPOc{zEv zC_W5rQ?xZ6)8dW}f6w<|SQKw(W2}`UE5r!5dH8aBGg*E7WYq|V4gQo$YH%ftL!1oO z4)1K?fA`CPbK})ow@K3kDRjUj_wb|0c$)%x6G4)*@qi^X(_X_%-f)xCWpIa%cW^wR z^Q6CI5!+;}9~bcJ!cQc?G0;U0678BunSmy8>$T*q)NRzbe+Hi0AOLXMR})661+j=oDP8Vqui zYQ{$88QP+lGa-SSurLM^deOzavyc*vi?sD9M8=ZyU@r*lfHr=3A|0XVc{=1p7`7P> zVJ{*r5DVyazp4d(dUbOH3Tv)k$_2}-x~#suKk_P&sF_lH8U)cMxP_!Bm(n~M7-k@~ zl%3^pk%0>R^PcUU5dNLG`*I=}=G;^jIaK`a0oOzRnZ}ezEzV%x!P}zT9ZlYC7w4n= z&!mL7nJm^PSGP<22SbpVRevL_iCb3F9};OYG^P_jcmP}VdD(3D&^z`FX}%e$c5PeK z0Br5zVIg5Nz33CV$UP zjMce!GVPChgVUZ_L@_yESenOhPFPt9*0#xCDL%0xU9o2*{;qJcaa2`aZjHh1H@Efb z2K}sjUkvBlx{ypFE+WWilC#&fd0NkQtcT@$vRwFlFMgfA%`{K75O0aOzsWsC$E1=0 zZ=jk~WIG#;^I>zA`rS+aHaFg-kG@2o>h^pU4+@v)>R6ec?wm`~iZfN)%^bwJ3&po+ z({dSblZekvZn_a#6GXLqPcSQ-L{VyKLKO$#v-d;-$8Jbeon#z~R4EMsqG5}R_{>J* zEod*0b;B{j*AT-yCeXr(Z*BYOH+7M8(j9DP{B`UC9T6vak<0sDtDK~4Kz@{?R7SFCXvIV*lszC!fj%FyH?FcpbL>s{Q}*`r|M5 z|6kyf$VsyY;6UxcwpPYXw*O|kzd+>Qa>RuxTa*GQn=y+tU&q^QvkBY-lCxU+O#&vF z5ho#9Kz&EuKbw=OXd2Dy0Ny?kyUefS7tgy}2fNZ|O44`SCJazG?}&Mzns4M>T4=b}VCx45=bkmi9zN$JJzPzu-@)|cF~OA>?dpZ-cx zT=Ij6KmJ#hP(Ar_*LXl0e|@2QUimS6p!LU^NZarX#y_9r)9blUOy+?&kO~JdB(y%W zS4@vglN^00l2~fLV};G1F6bCd61C!~3FHS!u)1HOzq)iid(fMT^ovXFB_Q(jyzMs< zhdItQthxaoiqV6$SXF*zs;~_l25HhiFgh*G7I;d?o{+X>?TBGjy)(b6A_qB!MRa~^C7hK&l`UROM zFaXen<9It#;jTbdt|kSl0h|@C5{6ZuxwV;%Ua7Yx>p_q%PmnZ&_{Ff8RMYcNl>Eod zwlo)AZOgZ9EZ=g|`%Orxgn`hq;m42~G(Qv2g!V_~{9L6A?Q?OIVa|N#gQ-%7=BH}( z0oOL#XA6Pxdn$|jzZyRCSdnFoQG=rgNH<6)gV-<|ezxQJTHyjRzH`^E_bl&6sFu)7 zc$|)MoL^?eY}&FlT2goGl-JEmz75~>%8^98Sxm`B^ljd6WRjJ*w-@$lLmZDU{I+`m zRSK`6(C*%!s$cam10noj!fo!=T@W)fv1CN)TbZpr++bP`uVI#8T$X@z0yd!SCb(^VDDF*>DiFZ01#X>?rl9a%r;EOjGEWzU@zf zB)Qf&U7YHE0B1m$znGF&^3=h1CogulzB@VE`Tfq}?(rWJ<}SVXprJ=H;DolKN~dIr z-Ag4j;>?OYHDY%heCeO`B=d5a9kH_{u3rpim!p%wb_z4sl;o+=wDvu+1D!RW=n+hs z;ZwO1kCTR!5&b2sV6TOkP9#Ua_VqN~-)Co)_6-Ij40TWOc6R(u9T4k~$lZHjn_ z|J*BY>{3eujL_1F0S%Cb(6CA}ZIrS!dI?0%aY({rDDLreM6UDhp;sGS;ekqcUwenZ zfk&n%wrObIAOI2K(ycf;Mp>+R+5$-7jtojVgS8ZY=nk_fJK*HJaNQ$~oVW8|3@T6y@pbgNXI39JJmr03 zp!dsW%IqG84cc;4)&2Y+Uy(v>H9k8r#*B{daEz`d*q?lmi$PD9#gv(qCkV@F9}%MJ zp|l-?X|se6mzt@BlpI~JISf&{07N`D;OHE0BsXC?@zNVm{njL*F1*^`{;iZui!ZPF z0>!&~@z(bC&e2i4^M~zMZ;p0uv!}gB402_o7ws?vjcS*TcCmSw>p(jmu$0csXCka`!5$Vrw}7UZ5g(M#g_4t# zj@KoY4ttv(9&Y0xrLL$WRI97YE32I-Ne215oEvGMUZ4Cqn-obBRCcQ*)^>u3?7Ur2kv1p4gD-~m4oFgV`N9nH_w0}PYUl89 zn=tvP%NQT&K|4IO2^?PN08tFM8&r{1#WIwHBM0G|s%_@m1df}TmnG07B)Z^ES!+|P zfZn>uZrmimJ12V86sQgA@G~kmbP^W_q7a512{+jU&qER@Q(wMbk_5*>3o3TV4MmmU zpNITFY18nHpLwd43IQJhWq~OvNadSHs%qrw(~+!pvL#!xxbSB0#m>v!y`2{)41b~G z&oC{Am5ALA=Elas@>&&Ag&Hz?SFQw+^j8`h`F4c-ACFr%sdb{-)iYI$1Ywv{*K~VQ z#yS*@!=se!mlHyQs$S<(4Z{jh%=|gO$2(s3r+T(Qhk2HwbBWN&G;$`}_~yXv>ZkD) zC($_7FTVBXIooN?d!J!;4<4{7IbL3U@Bm$)3${7Li&GPv!qzPttu16{tOZCkiJZyJ z(hW&lAMhc@vb?&yyiD8#;x8ta+P9;xO&=km30$E)CQ zzoQK%h@WROUR6$02fJ}Anm6OsLAV(V%@US*K-)LtAlQt`^Gcj?s{GuT{=dy4yfJTw?M;VE&{lZ_$8|9e3rd{e5(Qw4Mt<}P`5zySh#7$VQ&|(q6>h@j#GzX%W^-@I#%2| z?3lOX@^jZAY6A>8VuPmktb(gsL^+IzF% z@b@s>?iIVELC&Q7zyz*0L2H1trjRa46Yevx{TWG_hcM&JS!M&I_3E6aThQunmKQOqB*?@hbj0O_$$73o**H>D-s?*{3K!2$sR@5ep~>1VXUJ3@LI$Rh;o ze;1?dMP71BCDzH?R|DDr>ACDv*-yvW_C<>9?rcKh{@D;21$UX#wm+vgWww7-f!YkM z0n!T}k^tE!05=_81EiM>3FhBd9A0ndA{VF)U<0J@7!sml3{yP59%rxfl8bG%&a45_ z_i}@^LhE;?=isaSGM|DvAPBqxUIV08YH^rujs9>se4)nn8+NG?(rbUmZx5>h(q0A9 zHXOYlbnlL8kS;&)1|L@-9iXZz8#Q;~ou2iZDQ6whN+2QC>1Fe+YlNh9e0D0HS~ZB@ z_-TN&ssc~o?D!x^YyRpE5VHoi-2UXHF|8hPeal-wTK6GsX-*%}%)Mzo%wDQh{#KAS z6cX(&0s9D=x$>xWP8WP`Ez@d%^u&i`Ns0g|CM0e(BWVMqr*%qq1G#L2^gNK=vvV{V z-Fc5F-STGHJ%F^+vQMvy^K?Su?qxHu21qYkARQ1#pWF!xzH5Q>Lq3>ZJfD$pK5c^6 z0O^NN$GO@@4XWJ{Q(uw{XJxa*(g5iX&5*>}yMK08W{m*rkXD5j*n=m64lrmQROE9^ zZ4HoCbxul{ZgW#wAceHxCIUAPlF))TxWOcc!zZ#mpZm5#+Nj?a!$$8or$-ejTBL&y z;O48woS9$VmV~!Kl6$u`nWWcX3)}(W7BCwi1-IoGHtLccp1`R<dx0?^__5E7$_7 z4rxs_pxJl`)Xe^~EJphrANSkrdJa}KKw4>`1xG&*0o97v6?)JBY1M~>caO98H;YeA zkb>Ky6S0Tb4zU5!y2_c8?D!%b?T<2rwmZ#Q2yYvt4V4aW2VfqgM+#}AD&8$2Hb8o8 zAiWvobaCnIOVZ99GPHnefFwNlh+|);wApS-hZ?id2&)0oQ{yrL0KR^=GL|$z+VUa2 z&QPTLHlP|HJ@+9=x$h5zwCzKZP5wYgqLm#N#p`r*ZTD(Nt6#PPYk;&2pwV_Z8Wq#$8N|8cLdqXOdJdKY`t+O|c-#h710$|2lz+LUvn_b#N9@*8?|^)YO$oklFu)jCdrm#5-Dq{{e#V7t zwEJ^!SWRsq0!_|Vd_crOJa}_ArUjbZvgZV(f8l}J8ls5ewT#jLw*{J^{9bz^@m;+x z2B6)waguq^*6YxAOU2|@Xz$$&u?3ouP@8tHeQIsc9x1U)2m7Pp^{vmL1)4~zN1O|? zHG2hIlqS2?!M2l#M*)ebM8hHL<+IR;M->_o1j2FKu=ahK<8*vni7R6F z@T$0C323Arbx5q=)cdiT{e`-&csf{ zn+H#$5`)-u-JhGivd~14YXor1>;9ruA~;t2;b+687wvL^H+IvC+L!av#_%3W$Dq$0 zZ1BiSJfspkggE~8Ki^w-vPE|+7{T?4sgwcY+mH2=%?dT*DZo~Ic|j6 z4shM_{yWTX9zYRIj16%|vM>gFg+y@M$yVXcqXBD;0{drUVQbCu`h4bPR?*JF)`Z~i zycc}`h0uD<(s?uRt#P~gjMr>5_qG(j7reOz&ddRL^F7&VvM;v-ywyFa!)yn5(>-aN z-wkN}v>71?>k8q#pBp!xw%~@FK^vB|Y}C_AgzJ%})HbDW+!kPKWK+wQ-vH2XUKQrT z==Tqqq0s}5CTF(?HXop1?+yxf-esC|kxk^Nqx4-ihGF${qn4GI?1;CG-)q^H=T+1) zaBmE?ox3fe)U-{vdRUx)M&42tm2|{gFqgT!tP`kO+L#q)|Z`T=aOo4#Q6(pMp6LO@T6>#qqIeO+svPKfUDIR-pv z%z>w{KamMw{C3U13B>_$!xFG^c18p%_m#+byVVBpkwG>$!y7mK27rO%>^ArL27oI8 z&EDoZH!qMnoX_V3tpGJp2U9yPidV%=!7w)gd~C4S#8=21ZwA^9P-eKr1rLf@`SAeP z)IXy+*B=jXJp?#6g5Wj)S1K_o9}jRf1h_TK({}gvEdXj%mIc@zLw8$%8{sK`EWjsv z%HK_j+4v4&t#bg%DZkMAP&bBX-3(CTJ$^ueK{?^NSN~1`*8&;Bxidd_57#y4mIDyB zi)=DKyzORyPbydMqfdET_V7DX}N9I-lD|gv6Mg8y@u7?0k2HH&^+W~Hb01qbUDV7adtzS0+d=vr{dHZ9Q z{5S;o@u&PGq=z4W%1=XpAIky`!W0ByqKBC_P@V(09bhQiFcyA{Y;&*@NM8mEZwA>8 zFo<3<#Oq@K2I&bkv~Gpm4lsyJ7PS7jJq(f+7_DyuZw|m9i%t06$IZ|rK@2h**ln2f zoC(eW80116W@s^dyXc}8fU9y-e#l1yPF}gKEYc3p7>tLaGTl}dX$QDk-$M(14%E5U z2k|oeuzUP{y#4*o_HX0;gX7)(z0a*^T5kg~qB&}6pUq@92RhAL&4!7_bGl}XdLbx? zcT+R>4_nBF7lr2rwPVgZ>t@r!#@dR_NiW~NoDGNbVB8AessiLJ+t=A;F}YFLoDXo# z7?30+*HwGDiB+`$Tz9p1&WQ2J6E|fzwgI%rAgHa_5;M5i!23MNV6j>Uz0DHl?##N& z;8t!!doH%C_w)C<6`(S3dv=frZYN^208}kg0h$bpn?cS!JBjoY#>15lc1LuQ85daO zBC4M+;BUhQ{Mq>T-H|_bd(>ac9@%I!0k}JQbF-K|AE41Mw$bF0V{#5>Bc!pg1Ud(H zJ3u+bYHiXFIz<6!>@8(_mhEL%JEPep`?B7kjB-2Nxo9B)QSv}Bk!ta97=122wPC}c z%$WX=b2q1DV;-Aq*WaNM^)`xp4{u>Mo&(S*uUiA+h({N*>7d=5eM^9fT$8lC_%s05 z0uu$Zi@lrk4CerJW**iSCdGJsn_X-NxM2ekZ;Cy<5unA^Cu+_wiFB(ue=);L0CDJsX?Mv%+1kYk{h#>q>QO4}e_rI44cw(28h}$0~sE|A{SC}s9!`C}6KF=-v z{`a;Z-r(wPx2k!c0C2?syqgNp4sg`~)S9JX#`j)(QIa-*>jt1_2fBr!y&d3&0VonK zOvJZKWNZWYsAYy;AZ!!hc7Ts70Nq6AF1j7ylV*UN4mt;9JHV$EfSf0Xm?X|pYz5j5 zaH|4PGU{(k32X=WyaG^4s?FWM`2e>o0L3Z+lgnIvs~zBrMt~o2%KvHavW4_uWz}7^8mgw08PQ$?MX(QSE6Fu#pZT^ubTn#eCN!x9pGLSpe=a2-B6GB7617i5?*`GY0p@oY4b-Nip zU8yoDyIL-Vw2P#R{4B4M?s)>yfe4ESuO5!ip`v^~5%Iu^hzG;*dHM73_To>o&HTWM zh}@g~F0~Zf0h+94@c-M_$eaT(FrOV3SGOY_a{vmOZk1&=nclMgb{jy01b_I0O><|h z_46UYAO7H{wc8w-lUuByA?FCtR;;ODyO>O7&AB4ChUR=Q@9zSx2JO>#P-y5Sk&Om^ zrxdT1r1nX1ogi*k%%aoUNQJ?nnaV%974rYcPfP!A?)&(O+JE2B{~Nz;)cSvKtgn9Q z|NRSmO#ijD7@d~tbm4@sVN=_5m+GsN7ETir3=(wG8_!4@?%NjLK?AKUsx?dIo|UO| zGbK?AG-XCyVxZCo=!>4bshIVN~e*uiaJfpyw8nywRcoHcn8b)Adwb1)1p6} zWTtuK=4JYRKto(?#;fv0Ka~!sv6c@lwezG*kN@c!Sd{WNN3Q6|6hjLY{XwNK=YXamU7mA z^Jxgc4flU-?eS{u{y$!M^yU8l0-s}U09(11QInYP%r$Gw;YMa(t+ZP^;0|N99d!KS zIjBjz+FQ1L7DZb+IqAh)B{!;!@~O0DGMyh8l8oOSqC$naRP>hXk7v4l`e4hJ4t6{% z>0Xz;dpORe$nVcYfh3otkYW$75DIJU4ZOQv$+-<=8Z(8qwnOv^0(Hq$|~B zMiUssiPvXXUrsiO`eyL*07|{-uJobR4sg5DZ4TYZd7$!o)W4V%qhc2H2A$DKC0qEh zVLZS=FX1d5XuH$N>~xa%H~s$4(h$wI>q{za%lPE{?!~9Y^unBA9qB;C&5vQXH^(k8 z-Y`Y$(hzyVcGzwPo%k{xkG1Eg-_le2vvIm*886c2M(thgmp%Z&zVaH%;pK5Up)KeR zbDDcP+*Cfpm6}wy7W_3im+kk9Ebq{!F!I zRPz&)c_8YlWBr+ic0IhOI7~uFW}g}Qs>jkqc#xf?v*FbK03?VrW2pl+TohNaQZ1mJ z=SXD^46KcWOKTTVy7q;%p)Js_ujg(vVAFqQragCzbZKOr##a~Fh;HGPFGBEr=(81a z(2+KffMgL~A4N0qcz5cz(B;MSwsc9a({Ycd>bKtoVPRD}Z==ayrY0Q?zO&IGA*Xj;1X2VK(x1pBQOznV0exUnmGzDwLVWk|l%r z^!fJNZ{uKfv@V(Pj|;Tl>kB`bC%?f8V0PQYL9EA%MNUfU>RN}kbCO=i{O8K@^5dm% z8TuxmY|h)fOVU*x}E;Dctd($%*v%ItGz z(rGac<*{bz5b~kdbkQR$E!I9ODzWUdx#_iR#7$pZ5;_5TE&~gdl|JSZt&jkL!55b> zY~uRh0=y-UG{m6v`ry* zfM_u*-5gYYnnE%oQSCG{-H_9G#O_!8oBN%Yz4-g$3e>qn&(Ic3uL}Cnb@jc-NU8yM zDbaA7NI9CqGpKeEaEt~OgW1IEBu+H*=N@+Sh^N)t|E;Lk)$gBgy&x8~6`vQhMIK0z zvn)6(Z(V59Y+Y?~j{x`LeeSe0$%oe+%#*)0k6fWf)g-$lR%OAF$cJ#nVJIUHNd}|? z>ky+NrcblEyqt}UauA=1B|E-E2O|qVzj#e{E~~c=z{sQ5MdP+qtp&7?M?1 zmN$dg-8(+q+B+f`7!syh+C{02;H@m?hSDB15&&8O?i?QOABF(WxbB}1(Lxf)y*6-f z_I|s!|HB@)WS?Xr2coAoYfcsqEHrxRl++fuGIVeJ_xSR#XqLu5Bb1U+^Awi`Rf?+! zEd5RS3J|r3ud^w(nOoBi+7V)$kF#Mu$^vX?cn+l#veDpVoDbR_c}Kq&6NgWGpgo|0 zIa9>M$!W>g`0kSAAwsf2e#Z8>DK<(s3AXujA(T3J4BCA^Ft3E5mLHzZE!YZmi(prN7oBH)LNWZ;R?dT0*$%rCP)6XOeJgC6$Wy}s|` z6F$%zfYHqDd-i4j5q!bFqF)({6K}KYXZLqzbd1@BW6-o0OvAV}y=9A=MlJw>; zAFFa(fI7EvY9jj$I zTP3_x98TM>G}%cjR4u^S_IojQK7i__vKOkx{deTrgEY8X$6{KNgfufrJU*QmquL4K z3@#R(-ichJk`9l?KgzOrbNusWa_~C~SlA^*S9- zrlUT4yy=d4EMX|T))VEDWarKH$?*?#$n@{mZ(i-3kkGYrxVQBxNtVQ}S#gOA9?)MW zTSwcwyGddvbWp) z@b;-Rx7Y0$jQrtCO{P-;QT{v>^C|2Ox?2w~NiNS%ucuk>VtP4@#K`P>1QS!zMfAd( zqDdMQO}uUt%&n2pFJ+8V>?CAqJj5&=k=#txQm4*{`ap*X*+AY?>Z~SgwuRGPu*5)A zy3Zzm`Ztm2*=WpteuXmwh z48+!>q27d`N{+IjyM1Dkq>EP(jv-AMFOa+wL*~55`xpG>$XgMMqUe{HzYDaFfQ?-b zi*#_~xGE&#-L!w<$hJRR%LsW5I-Ow%{b2WnS(K_cVrwW%U74s__3@$u)ttJdai^@W zsnx0ddNV6z;%3yY?j<2*mAX|<-wb3lj4|#cF$z@cV z4m;xRFsG{H?v@iHYU`i240c(42x5yeHssn;!$t%=*Ud}m$+YS2qKF#a zRb)w%C0KS5`c^*!@MI{h4bU`#v`b^L;W7atlsMK^ccP{Nmr?Z1NJYl}7fzISYIDNl z$&a3)#Lma@!aMRn4_cR?8BSQ)Nbe{Y+vWMvl>R)KN6S4sN;7WWZm=dW))Pv<+X|Ho zV0UV?9Ce?`*Ig2PCafyh@{-ABJfVLxHQ{q9jC+#)BHiPHb$*F0WKt>{sYIz}#S+o2 z7?Ea0NXCInn(d#S!MV(Y3lH|%W<>W4PI*voK@n!=r^UO>ys?QEhMU#b{xW_4x20e; z>F9dSYRn3N@?o!&Wcr?j!bP7dq~g%#o)rkPz?^g%xHt-nMdYb}oOlis+Z0=`(HM9K zNVd<)sb0N&#ImXaGJD1vsNGGsgE~dCkY6pEz|Mb9qH!My`Z1*d--falJ zJMtLq0Fkn+9Nj0?oBJor*IPC&qhpN(r&)yvI$)Mv`&VT#H-ZQoBoezr>Jm8pnJ9B& zU^}e^Ez&ZMnrPV%e$g#O8t}xwqc1;Zm&aOQ$rDBLOSt_n$1qPgk;-2qBr5YF>uqA{U7#e@&6-E^;3m^-{AjWTUlOtT#Nr) zd;G=!|4V#q7~TnvJc+wq&kxVx$}ZYdmFl~voiN+xlmZRJ9uzYo1HQ}uYvM}9ura2R zXBI_Uf#aGd#&MLYv$Ft6I;_N2F@J*R7=ccR8b>`PNSK#so({jcrwMrBSskKFgIV9W zrQloO*i(^!)U;#79vZDUl>wrwV)7Pmd2>`rifh8LReo}s6Rn$E$3x`Bcn*F&&Y zO=~n@wYFMqflh->g|cOE`VGB+;BHMtmifSTnvP-{#v7M}8gwAy@~=G25d}0c@tbfI zMPASbYH%-mm4_*#3k$jIQZzq`ACs3?28*lAE8##}WG(2tktpA|jkWoakbf$n!+b&p zZA;Pf+!_f};FW}sGnz`61dP^ivurHLN!s;@H`RAhjrb+jDB!|z0``a|*cEzFSN@Gm zKVuhGnfZs&v@&bVhAMTMU8L`FLTRUOOEZ(EgK@?HewU9YT(p7Egb8Ao@O_>YQfQE$ zwjMq>k&y;;!{9!dW+c$CQCQs9qNut27JYeBqO4(*dKx z^}zJGL&OXYTt>?W>9CkS;20`XoX$`L2_s1olgE>&N|apYBerDYi;3u4L=grlGf^aC|dX=T{BjCnONYCSNFq11G$G^$W zKAUf}X%=cWPJQ#tFye+!(_VT}%Aslq&)4#`yLul#a$8FE7#Oa^X? zlVuh2q8JW*^F#1)kEPtL6cKX7YMn$-4aCmR;p^eE>%nHF@BPh6-?wg7*|=M~XN{8* z4V?*323?$Qvp3UD1sE>;`J}jtJ-@Q|DK7|#-eNS7ZCGU;wLt_HGqAjIax9wE-meAG zJFzUC`dqK}VIj^QoJ>_MZ`M+ky(h^m7y|dO2^t5ADYLYKl$k9Z76RUAwh|ZQUkP`T zwG-Fl@X!72742h*WE)J(kq0^_1S*KM;wKC25hD{r!BldL8Yce$!KDaLwE!O&&0Y@1 z(Z7!B_lYs-dsE3>cPG`zS-h1L<7~8vdw?E9GrnTmT}*&>yd4ke!He zuvEb^fPp7Yq#C5U55?CjyuFoeN$#DB@aADY?@|R9xVRi$lr3I_nEVU(L&*8%63e#2 z8rFybZ#ZYA!&5XuKqmwWS=VNvsCBg&SQy4-6wk?QWPRBjSeir3pdV zBm!QE*NQmfWhm&ncizG?@_@hJUpE@z< z(NDp#kfxbUt4G3LLMzlk^f2bBl2`}>0ehd=!s!|E<>-mhvrTvuMJcIRRYy=#VBvM36!~oHIXVW-u0Qdm2 zcp$UrxF9zT;wAl}pH2pl+3YFlhTr~#;N9EgaF(&8?MZ9_?bkWULq@C@Dl}`k54DNs z;+K$UV_EjFIA`g}aXzpWW0Api=;3D)8EVipLz7N%oP+-o8As`-X>KNKoK}gbGb?^j zoI7a#Z51*_Htl;`COc4cwY~i7)#+$LMa+T)wr2u;i6N?d2 zB&!zko-A^bpXHP6Z%dlMK?yvk1<`Z##8Sx8;ZPSMT#8YNtxqI;PVzys)I;Mx(1kxR zi}v=)?n!d*Y*?g$JhHZIcB3kaVk>AhoAK+KB&zb5ZlD@!=&RYBJ1ZYSNg*8~bwF0P z@K|g^@<1nsFSQ!c=VOMcg`}^NShUQ#6yg(QE@BC+h-G$FHOXwbx&g!dEW_4?^0@g{ zGIv57io0}8bU{BxT=cYG*;d)3rY&8D9yyz4Wyq;@ekb;h&)Z*L%@eJ5t}Ja0?A|W0xD*Oy z(lmNLB;4tiDY!+5&3Qf`EUVOPY8IH@j|t_4tw2;M&d&J6+w^_+QH(!J*#;CMy{<`w zL%L*~!#y9Ic}2;WkT}Q_l@qcG;|=Q!g${+zw&7EW!d1MU55}K>BxSK|V+Ff>^sabY zkwt1K)qsv0^RZEe+Kjg=<3LzQ-D*4^4v5#>rT9#jP0&@1ykV#30}BusDRcX|u%2IAv1L#o(qmA-XpeXt;#w2LI83H@ z+b^@-i<-^RWKx<7>n!7_4~QZ@HWfdr=FL^Srze6?oWsNt}rSfrtYnaT34`=w%;XqAK5@)}OS$#!PA&Z_p15Ldq zyPVcJLw2kgK*+g4R*B)n{)r-0g>NUoxw#M+b%J8w5>rRd6tqDOuJ}2T;b}cZi&^iy z=kr@UE7t_h7t3B!bs4a=<1!tkBvUQ%!!r6+D%qc+q+CbtB-lSG>)Gri;HfD+m%~#`Jn7k4rvZRarz1$@eN&a%=aZ zapE`}Z^}){pN;E-HY!OSs4$!X91r;Zr=J(Lh{60jcH>&)ie2uL8<&PcaK?>G(R+DSu_Rg zSJMR4*EPk;jNMD}4>1(|+2?p^Th24o#_7cXas6o+GT!#Himv{|G;qQCaU}3U#7#Ww zPr3&?Tnuvx{Q$F~rKWQ2C0&;U{)zM?YQA9ddLt?#&b#RcB)x*rmrXy8i?RNwld1Sr z`M1PUF?w&3_gyr;oun<0W$Id|L&CbO6cR&X1e_=+%GJ0k)%+VLIFp~E2$<;A*Q)we z>p2eeytbp!Fxev$FhIxRjM?>CPfd`v`96Ilpo)rqS7_>HZVc_X(bue-)bctH$-vT<3f!$jgp*rP=P2hkiun%Zd$DB{#393T;#LkSm&0YdsoFHA9z(2rzU$VM88C!2^c;2 zb`e80FNHiuYV#hK6Pqw>&!`p}f~4l7ak$hSZbD25kGZ;*3iqs)pEFF2_MtIE>(-HA zhiio8MawkB_7KvEs|LHNt{HX5-7=nL&(x9$ncprW78~<5IKo6iOr&yJWw5x-e8ki1 z7|+6aZd}Ee6=pt!O^TEI#6&)7;Gybgq>1V1od%}kygtrVTnFXO=xi3qGk10+JFmm; z`H0pCj|s6p5H6-xdeHEaXI!SNRwcdqDf20BZOS&bPfLiE9JWRn=Vix`1XE|OQ2{Vi zG7960t1-!qgttZ9Z6PReNc{3L;9FG+*F0Sp2^r8nukP2#LA_!tww9@2g511_e{?#^ zm(MT!Y0Llm`IBXT-B|y1ZDnJ*mjAW9zWycu>lgT-E`d>G$3K%ql#GAoEHJ6=b)^kV z=k*0>OY(vg4;I3Z8Z*0k_}(@ZD5cJ{vIq$^!mB5pO4hRBne;2tsWenIqIn`g87}#9 zYH0N+o5DL%tqCd>2F2bYMIfc15A*!(NaQ=xwoPjRp2+RXH}K3qlY8Xiuh7x;bi=C7iK1$9}dv`T+7|N!7_GiMWM7mm8u&h zgu}F!1!$%(<48tB0nVeMP^47?mBsbqZM73u;iM=&iv*!WR7q4-NJ(3oWL^29@s=#1iqJe-c4G%pDqFnJh7N7^P362z=}bBxY(E(Dc#h7Fp6KqYR$)(H1 z@M^@bEG_AqsfJJD%m-OIWEh?J45bYn8ZZH2X;n;*1~}r({LP!fnuDSO6^i9;y4GtI z2aQXSXQwmkWoRaVBkje1)K*Al68SXPU9&;D#W-tkliRjf-qL*rEfMT;#IEmZh^f{d zBC)G-XKO+Fweomwe|My-cX9#%CnrgyM2Z#abOg85788hKGSyHe*PhA`4l-`tQyf=i zHg@dDrhFjyKzv{$Ehr?pb7nhfbNd1ifH{QEwi2m8C&~;W?F!dsqj&MUbP{jUKj^=k z$-&VdxAzaeJK24G@QP4XR%3{wA@;$v3~ov?OJzW|IC>d>##s34*dORwUk!0_w;wO) z4(gUKh{7=;D$I7vMP`o(T;=dqnh5C_(-8iSWtX9_-vt&~LUK??h3)36qr~_7 z_bYRU9&Y&1h^t84HyMTf`^2|i+tWwqt*FY2RGrcu9|mch`qaNDa!qZmZJBk1GI3Xu z#K(;M&8a;Pz-m4@bFjUrsijX)=Gd>6$cL$AIq9%}FVAtFoW32^R|c_XV9J1EiS+?1 zg?*!a6%CkYU^T)*oZP|$$_g8IZMZ2@7+e;kTqkh6|6*U3dzO##@*+(AsJjcllQ8D? zS}o^z;AA`v>ahk6+diCN!!`h5)8)xcMO#6U+(V5+WuyM&dOWQ>70)+va}8p8Gk$hM z!BKqv0!4}p{|(tnmZs1%jq{`lVpHBV3PA8j9Qz3v`;ztvscc=YS_ z<)@D}ag7_-I|U_Z{Dp4D3IBR>HcZc(E8WgU^1k`8Wru8uW?d@3w1|MWaylSn?wt|m z9u8~(fdKWLOK8^3MF0Zb3m!Ec5*5j4+&6U;7l}Eit>ra-~ zHvVmS^}fHbwT6Wq?Y!FAK8{yzxwda?HXj#Njek6TbMR{C=w$!5KgB<4SA?J9MU$ZQ z%;ts^Y&bfqA9$`}1m@Ln2BrD(Vl>Kzf z)tl>tnaS#+V7ym%G1?gsL7y}zijAX6t?4Qd{OOcP@s~*Z5?g5?qhUnpk`#K|V1(Ok zmcN!-zaP2D=CZ96Zd8%d`cslAPEa2(Ia;7>hpgPHYq`tCO_Fvi7NqzNhdrc9*e z7bo-e8rZzD_|g{Kb_McL*&QqHH5_*_9MTNhx2|anohsfP4QOkBFG${gpsufBz*uzW)b@4i5tU z%RV5~XpvO7>kq2}*zEP;#^`KGRO?V!UXJ6|^S);^B=z8>Oe3k8dd2tS*M;N2M&gy( zyUgp|Fs+m?)t2*s_TIOfz-S(^aS^TMr6~i*rPL5dc!k6_(IUFCH+iNcu-;7dLh`iL zUfEO=-LvuVP$vYp;Wt!FY59pwYxCY^3eUf(crGod*{tXvu?Xd)09>%pZ4Mr(-S#1v z%o)m&B*}9 zeS&ftmSlnXwdE(SAV+#g{LIBP$w;(`^kuDUuzO%OG1ey8+{NZYlF2T4VXyRf%}8?p zKZ}deeZ&B{g>>TkN0<5Zg1@$FSXk=uArmG8)>_e;1J*?DCdm{+{ke#ezW3ltl@=QBOfNljhwzTPygF*@QY z{je3_4I94Iz2|Fn9*)V-a zH|2}e|1a=qk^d3Z^2q|gZixR{S=p%9|6W~N{v!YX0-uCVnq__N=Ek)^St>3{_Wa!> z=C@Y%hJ%7&eI0LeccWc^BHaa&*$fol8%Pl073lHu-OUZ3z6_oJG4w!3$G<(a+>MMgQ`ntI~M6` zPr^QanN7|S4vq$sCQ-4v9$JPAt5Qt^K{X_f-D!E2-?y%l7mAg}zww~D42B>5B_lBe zvOJw}ZHh>)>h~EdY!(0=vef($uRg<;G36w#a6p`kk;qU*VnpgH2VY3>cZmd-`f2tk zGkAb(_*D>qW1K@hdFI4j20~nOn1L#U05?&DoMY)9f8ul2;Ral4#|F*j17)z2M~R>- zt~oX6UKITvYFyw%r1%SdCDAf1ISvs^jciJtM2GcEmDJRhUL1lEk~%*Q(AIH zMmbz0NJ0|QB*6ek%L=FCp}(ektzN4?pdas_^q2G=&j5gwJmzFoR#*ZK&bZH>2aK#j z{9xSr)nkof1Nj|gT<3_bF-8q#0AW201s+_fI$+o3fQDPiT7UicV6cXc1M2Lt4e32bQEXr_9MW_V96QwzgGGIv&3&Za5WGSwh z#^L^ucb%sTPUkcs|Eo!wQ11bzzn;aphLb79DEQG@$5|qFLT5OOo)8h74Aw(3<+Dsd zg=1u|CFeWG2E`agLhs&0S)v7XO^G;Lf-5j06a#<_7OT2sdc%kwuDlq?n88GS)c@{% z3HAF$aoenzs^izT(p25v#76ZsQ6DWT4pFcPzYyR+c|*_+?0cpX1!fn*wB)!eBscRO za3Cv|wY6mr0x3)V?)_l!ODkWT`|#oOr;o#Tbj0t&pMKnbz8}7u zzmCt}!#CgMsH@=~tpW_c+pPc-yuQ~QAfY}>4H20rMA^1DVyS5|zSa;B+(PyEWY)hC?Ooh408vmlC=b(`H>$*oPJ**P{Se+|FW8{`%8jY8LQE6Q8(EIJ?NK5a685fSM>{XPI!P8HjGCBPD z;BWo@V8H0RM`e|m<;`aaFvZC5|*(%P>xhh*#t9Al;`spw^SxUhx%-3N$V|~M5aIL$svC-P-!2hoGdSig3 z!Jw>Uc7SvR48$uOn`KL003U-Q<{D@4Dl-cTudK0QKXn@7$%{wq4fJ6D;ogf!M?COA zFt1~(J4VsMZib}8|E3WBhx=Kf|D{;E&!qvrK>yp_+1W1Xf8qCU`rohcgD(6Wzg1Gq z5)4Rqsrv|BM6PhKB`S`O@HgN00exwulEw#Ai>y`;%PfvOIbKFDlqaM(Qbj?o-PU0> z=u6Ay4siAdSih^uzvs{66D;<2PK5_h1sG4}$dyPjMF5v{ny7}3md-Xss;_p3mQA~G zckn$<2VRackol|PXDz!B4M*)qX@raj`$Btf9xSJGcoT%yj*TW}Ow=<9UE06{>$zv%@XWr1C<2TZz1BZmwrE45^U3-UOcV#GUU??RYm zM56=Xp3_y6a)KV*eNSM*2KGh|oQo%JZ+Zv>nX=&)>k#W$#LP4; z3{&OdDx%9gy95odic>zJawG0o8tJZbXXsc}xL)Wo)eLLXbNo!ys0#!9^jhRCyw;fE zJfoO@Ke$XZ7~BgZ4^m>l13a*r4Yv)iN++WA6UPOb{=r#70UYlG*vBc;$8e z$LV?;9}}F_^LTRHB-GIG{nD^c+E?AN z!mRU(h!_tDT#qCd2FQA32JO+u(s0#>(Zyeyr<5nr`FobK9o>r8e`1}Yq>@mC&PX>J zSJE}Psisq#TD4bQ|$oxYxoA-6~I1H0gK8yyIxttZJdhAVNBxG97VC!8R}(^pXo0n=D{NH{4ly2w93Z zN|J4Wag*PSeh!MMYe^4_+lQYTk}l|+`6^D1F3EwtT0hhk=G71rnL2t6u24GD0o4jz zuy=&(ALn|>Qa^zBI00$_{Y6FmSE*XiTVDlfsOvDmMu|$vyl5eSst@t^;z?jJj626@ zRXy;mq-Yzo%`s@#ej2((frU7kq(ih`6=BQF|Ebhad+9L&dx-Y#a~sDW@wtpyNxPjy z_hfQpHp6mD$K)gEdiGLVIKoMqzQ&RfylWQbdOk;)*p6*}LBxjimqot)H%25(rsu{p2j|Jrf2Z$lYoGb@{uZ*6=N2fv@Q>KP82%+%-;{d7| z?WSmBox3A;2I0ogpzM10FFbBsrlP>;NP-2f*YHN|`}!Npi6#EnkzG`hEVQ69_1x^S z`E^Ba7#`ckP+WT7Mp?Uvv2ux2ouF?vXB;ZXu9o=1!e16)(ABHJoJid@jIj?fmrB zy6HQ)w3um>dzL$5=m+2%RpMUpxglO`!xmm=JR?X64S96C_(*IHDz(|r+oqpEM`q?N z4L%wC5)KA3-io}&{XSen0Nbf%O$jfN)1nXUkf&z5Je4Pq!`o)M;~G zzVcl%aOEpUAD;I`>XP(sf6dcb%gB;J@Lz{dpI8-JK`mm-S5S)~W3`RBBvROtUH@a@KD90T>?H*apQ zivOhF3;O@m*Z;3Pf2N_I#R9b6{4xgvWt`;KC%u}qOL;9BEfT}&bqBIU=1h3cyWfw zYGfWbm_zT#Z8`vPq?I1GppVutee2a+(4>;MCM^KNg<;e!*^TxJeB+d3mU3J)7g%9F zV$m{Ml(o1*pxkrk1HPB0Si-P;ddy@Dshme3tt2>dh2;jB6xor%kTS1}yCm@a*)kRr zm{kAMtUS2amRjS+z(?q0J8*V%$ivg_5Bh!8dQe6tH*P|djqEI2Yld|kw;9ri;%0Z% z83RYvZx+<@7+cnO1NxWG3yh$Fb8E>&B}MSXH|=|=&zXDg4?u)DiL;fL?jcraU412i zQ<+ASRVOL~_OM_H{kHy0ee(eCdn%2&FC~u<(AUWn8ws#4J-R$g^5uFEN0*tO2`q_Q|gdUl6<|Ki)@PQ zEmd3y?fO_1=XVD}G?iKAjiW^)raPHLW7HRou-IHYZiL4DAGMq`;y67+i1O#6)i~X< zQm5?o?eDDdI&GS%QbOIx-*MONj;knBG>zm@?ag2yks;1%eU^DM0|Wzcujs z_E?QEa zw?!}R4!D*(7c*X>eGAu%-T>!B`?#VUXV^w+x{Btp%i?OL=EW>Q%|Pirf4wj1K)**u zqrZ1}|KPyIuWZbN(~(g=6}_5RnvX-U2D6%e9Nel`f=n*!z+YmV^7GjudfO~AJUlVg zxH7b%a)c>9|NRF2m7~%yTCz@OLe`(&DkJgQ^cbGqu{z=m(9$xjCjjNJHCQdJ6j^D# zIXlg;c0c>S|IcY0-pl^)|9A3#|6iEDE!=9~zWx9EfBe5|jfz2)m!QtY%!wm%ghqmS zVmn?Ujh7p&`MS1xpleti)N^V}3KnVFG%8k2 z&eWg-`z^*F&QX9dP591ndt#e#l0LGrcb;<$C|nmgnp46$q7 zwnO7yvttW~UhXfmbRKiCE*F59P}PH6I*G&+2ipM>nhw)Rh;Uvb*#k0KW<+QRS1M;jyPgYK zrdcd!%q9cGX)jur#bAbZ@WLs^U}!#;x8v#$W_(6d0HsFL1=azzM@c zEEBLdp)9---)xvjiozg!06P`hn?rI`szLOC94L7@w%iy4;OR_~sn6rSx#@mezfCR$5LJE!EhWsg&v(Y(F*9eT- z504!F7H4VhYIM*95e43IDH^SUt5v?0nyut&X=~QLCHvaS7Sni|X6J8`_-tj9d%PC) zXLHm@^a2%0++rP1Y}itkqzsNEwIP45YP`B!jV9j_nm_(wr#ff^1%~rn>q(ZNiQ^61 z;XT`gpiaanEP)bu_wovl&gLjQI?8g5>GZI21IlnZVd@7D8%L6X!n$(I+DJ+-;Y zOtCmm!-WXsjR3Qp+d3)y9ozkJITVj+Ri6P1wk|W}&WCdWpyBN#4F}8}#gco0xXDFC zMbC*u-+%TZVCG=PzRuNsMG|eFtQ3D>H++7 zgJve`;I$gcON(7&zuS)%yRaYZrc$HzyLn4tVg)~tb(#oj-(J}j{&K1AjAD#*2n&$5 z2UJlS0OmY&V*;>L`fmw4?Zk_Q)t8wM7r&t}e%0Qn~s(8c-W%js0TM5}rtW)jb^OJ~^O zGyL!MhbSX(Wz%;5*q(QG-xzFRE7w^%fwk*@ym;=bwFBdvd>M7NGRQYAgL zH9lFMpBL?-Zl*V9mj~GW4RR9-*wc+vS88XaG$5|UlYCgoeu|De#`=H}PoKb6;P}E+ z++%Z$sfk&b{>Y|LGetybYwDQ38Kn&jQD_FhIswy{izUM{5EMVoCL3}Da@?A9ont4R z^t9158*3^zA{z)z&|`@m3>lxRHxuB0nvq07iPKXrh!YZk24yF(_J8FiC&cf)tJ<1__S_p&yOvRX6T>b`nkA&7d~S`HC$l(dxkjykVXzYR=g zb70-?hnI9AgixixNdSVSf57Ol`b32(204g zB;e#iA=m9)jV1*bxYONiZ*9Mat5>Npe0Pl+UNe3O^=tgawZ?lRCvz>{nVUdSA%V70 zFOH+n$7?bIt_M{nno6h6F-D{wGIzmKR2yX;l`STBpGN6^M1gfAH8;&vXI_OJ2RGIr zPV07R)p`N>=%95H#0|;|^M-QJM3flIcQCzD?V3~k4xD|>q`UnUrS9wyLn z?M}V`%zC$m>@5%-5V+t-?yxthEsCfZkPV>iLvj$1;==4Lz_wAe0>FP~ag>F%|8VL! zVi~Tm(+e+N-hXsT$l~Ik|DkW_KR=1F*qrD%Rj(IH5@73353cQodry9@H?C>wOLU=> z3ozHpAjVHAcOvNOTz-WQwEYR^$ukg^*E>_{ll)-FxR0p|Ir8ugtP4%5k_Z`ZB*PaF zS`fI;X@*Vq6+`tkz%TVx$5Jkm%E6>P{y34=Fn?6VJ<1Y5f_X`-4X-BSR;Rt)zSZ8` zXm@rzOom7hE&`(E^|GhnF>K$))+>>jD|%A5;znxl*=nVTsH0BeSwDl;>9mi-VPV+{ z<_G((U%P$tcw;=?>9#h9<8Etf`*z&Ab$fWL6>Z0xJ8`r*>gMWA9VGK; zJjRP?)BLW{8xLe2fqWFImVq(}4SqMhwGW=X+1ityo254gnk8|CW;h5{<5p4(0?GvH zN-?xy$yLy8!Wbk#2fQ&ku#jlS2DMPN5)t6L%Q zqhKC-ZAt1J)SemL-2H z6O%581T|zug*(ElqWnot2$}*-QCTcj4w6?{s66Hr2HaK23HCT)pGerArw0#AjxWAg zrPOlblW%Vh=LGSuqxs5Y#cB+yE|YVS>J=B-;DBFXmuzx7<`ULk{f6AYeOj_f3_^9t z2=d7HBzYT;0UVkx(7-WqN+J55lh2z;7I7CWK~9Av;z$z2IUg_q$30_I$%T_w7nZA7 zy(GM_2r-eQYm6AZG?D)H4=@jpL~w|maT1|7EJCGcphTUhR#l}^4$Ux@Tzg!}g66Pd zn06u0icL0Qjr}n2FrMT_jNLm%(7CWjs-a@)J#jz__Jdam7#frINOZGR^tp02__jEg zA`Fp%93yeYGz*T)a$NQt-!kn=BpBnywWG?@fee$urDs5}_ui6Ep6Nq9-d1 zD07Z-GJ+R3M|P4J8^A}vAIwuK$)zhRKx{~gt{Gyim?)a7Ylb@%&M+mUTf9*grh7uU7EMF5?D-DC<*dNyFh?qrtBMGtWce zZ`AR%M$PFH*(?}J7wcy!G~J4`E`HzxdO{n-&2=Z7-l+ybJWduVmWvf9eZ)>QrK)E1 z?2dLN4SQkt?uu>jHcpjU^AigCPLJ!~)w$b74ibs|Ljr8{yLUByQR}%=d2ia31)pnX zYhYiirn~CcD(AcR{Q2I`FFE+(_YxQ>rR%w2cGNh zD>8^VSV`j?iZ_lu-he3wexTFqgmphr*sJ%L3XQLW9)^Q@QZG$$YWu`v-OIvB?dARl+DgCvu2X4Oq5@ihN1#d&(a` zez9ggz9cxnMT_5HE+2HqYG3BYxL7Y54&(C@+Pin}=@BBk!~4$< z?(O4mkDosI&2T~qq)`^%@xfUn?O5W$|V}&N^6Z*D`|$h z#J!`Do7`^`ziQIvyua4#*;QjwsR~s~C0=1BrV0~&$SW5mtzE%)!1hYst7iBTFOk`e zYNhi_3m85)z({*+lpQT6RC-PB7UjQ4Bu7U98_H#7Oo;EU^QFEHS2>6zeDs$Vb1w*7 zlu?7kX6}}3?ejFx6UnbkeqWTPi=6hctmk0xZrTf`Z4N?5R67ktQhh%dP~mTeGtX{7 zOv$74EY3z$G8#A&n2gAx)$B|KVl2uo+-wS9l#wUb5ldc`?b0PG#FZ*yt1kGuaI zwN6&%f5O^lpQ!-I1@%96wl}s)^*?TQw!Y}Seop!#lB+atK3 zHI_IzY=g0c$aB%}Xu4jXw@EejCX=l=ONcLp>t{keY9)+8zu#6}Iy^_&G(fIZL}t=_ z#>dCWDB;q+=eg0LNvxHIE^B;uojAo5?T5gs2FXG!N5sX^x>58^-Xx3jk8m`hKyJKR ztc1T0zYK8X#ipfmHs|`>g?`#HPPx2Z#JbG~OWMG3{%v%ijJbLi- z#nFIs0#LBEGUK)`;{fOB28UoyMcfq(X`G~^*DGUAY3oMLLTWU&QxF))!lZ+^ebQ|> zv#m9dfHGKx@^h5~*EGZvH|ZL-xTZ7X%{$8ythsiB{sjbnhBErkCjE$(Y@~^pVy$ik zaa0p>S82h*92hrPrIK&9o@r8v$}OVY@U%t7EMB!q z*bMdv|Isa4TklQxkNimJ7#wF~QgoYYnZz8SU)JyClBdSBup*_ZZkY=#b>9WXft^PO zj}MU7Y&iSZ4C|ZCM#a|f_DH&;S?Wkoi_>W*r{3{vf_0o1vxrTiJT5CO%t?;h~S$ydam9?oG4tsAJ*z) zjcZXWz!8brj&LhhFbt1UO?AY!7P}VA&K0f0xlFzasN5DbM#S275Y-@%y3^&NxMi$M zE+g^V#3Ui4rv!F(hMFk=D^X#gh4D&srByX{!v@Odk3SP^G1n zOo;{KCemcO;e01%dUvoV@&?elOj^u|_SFdNu*Lv=h8>?yzU7nio~d)s34rX~M=o=O zh+OXw>}NuU94s;4hoksxDjSXE;x)kY1e2<16@pS32V8_*d2sZUEX#cPaeJH?V72Ei zXB45qShHzM0#UdRr?d!4NqKm{m2m-;6jwv3IveO(v@omdW3*bsCAX_CFn~DK_%TQ1 z-{3h+dr^ls4dz+MVc%O`FRWkdY@mXnyRo&?>U3M^m1F@dnZoHXU<@@9CEnH=l4X({jWvxXGGuLP}Ibe&kykrHOn*|5cVN6`QC{K+K%0R@LGB8K8U}zjH%B+S!jHSe69cG8` z^~Vq6%<6bN5gt>b!LSE zVY~A-C4vql&OBmtgw?a*Wr5X^w$@@VMNGP9<+s$r2Tup-6cYd7!@$EY z&I?~-0!Uv_H|}HA@v1q@Imf^p3~Bz&(Ti_^oBqb5C@!nsG$H=%xb7E}F!+VIJTbUx zzf{rHap?HoWm^Ie7=i1+hKWrH#CMods>n2ySpJ~|y;c(V3FBdWm&@{Gm zVDR5)S+y)?k!xXk#WF{E@|$FH5dMzMON9C~JzU$@mQZX%lwnOcmex6KrRNq~=2WDh zReDT)X(AR!1BY{VU>?K}w1^1@%fKjF&SKflH5r(Wml@fb$#}yay>iAz5O!~@)GrLE z6yRx=&bZe7{9Lc*>gbKaM}}mub-YR!O2+j$S;=P{Ml}Q+Dh{=QO>_XA4bg>*(E>tE zp;93T3J)EAgDB46$}zj$Y2JUG0%Q23OV)*a^=C+tTd7RJsc{UO_o6S1S$|j4Gg=x|)au@hnn_;=$@N`Al$g&q< z-6P)(3)`Inhpe4;D?5d$I5%WypDq+m)*b^K8^qr8wU=&TRx78h+V2zcY zlp*1|<=wBd^koQfV$&0vTT#l}PeB4&N88WU52ygZOq`A>mcWe~NmXY(&>gW-N1*yu zjzkd848lmxMR!=mqQ3g5KqWMm+==f*I_@A0Lo)8rpLdB(q#KM$N6dU?-Zyly?^ptO z7nrKQw+;7GepcH55sCEYC*9BB1F+uy-`(kUwoCP&wzj|3fBG6fl{S6>ithK}152OR z6%Ayz5J9G;-vUJk|!nuu3- z12^<>YRl!46D1oS5Vx~ffRgOV3E)k@Q8XM0AS5>!RR+sxvL9U{0-LHLFiFS6E6zdT zhJ{73;{?kyi~F{61NH?;V1lOov5VuX48S}~3#}@Mk&*GhS{C+cC{I_^e=?_=$G8c& zDXeo>*3dUEI}%zRg7jcpImKWTZ4V(HS8nVZFatVA$Zy z`XXWj+)^f1r(?>uaE2FSe|hoj!QRpSpcxng%|86uFyvk3N4wJw{Mz0NqDoNtrB3*W z+&i2{Po5qfJp6fZK_W*@`v}YzCkCj!IJ&RO=1XP+(WLI5l;gwZ_wZ+RK{k*7S+zP| zzAf?fvW6CNPAK>HTb<16KY)4uk8ah%U_A(Ql8-|)P~?%F_^`M7T-A?r@7|+*0PPeD znV{M`e6as;@5Q5|P?Cjwrj2+p6Nm9M(;IWGNf1xv=^E~JUf-3Srzvn_FHCK#OFevaiWl-3w#i+tK78@y z{?WnHCxUM`%gl z(Gu0~an+ZKEQ#bErpozZ+?zB~Wizy`u2X2e#4frj@7_183ofmJK}FeDWuPCCHB6>kb~ zZx->)2{DRA#&j}Q^D_F!(P)uk@dn^0PQ@o;Y9kqK1UF{ZD}6302Qc6u0?xxQFo8G+ zP>+<%U-YmfjiSvHZnj~f+D_#N%?D6ik>z~svPg1Q3pGQkI5X9w*HL(#26RhDoTQY1 zne)T^x`Z+F>y2XR2^}g!&9>Dlp|&k&MU{im%#|_eudY-%LtYlxugYfP?$P|jwGO## za|iSM4E=!Y1imNOrH@cY#=t?zLFkkGv%-iPS zoeCcPE}2W?naf_Itibst*y`?LN(2(wS(EnITToyYG`M2@Jc)T|DyweTa!F&C$J1n# zPB23HQjsZc0!73XPNLuM!!<7pk(%Pv*7)q~pCqqfC$Vs<2QLotxn^6QXSf~cM5Y^v zHS3Y(G5J*NlZ?s$L`7e$!iy$EYhl4&BU`sCQ-$n4R#!y<&yeGhz( zX|po%Ixh)XoH}ATm}3)b5Q{4F+5n$l2sSm<)M^>VqYYq*#kV9svgVg@>=Mv&?0Yzp4DA094CfKYF#KI z=cQH=EdD0Sl4zWa+??mmkxYrFK|cocETx1!PVr5LHMM@Ao zTqcuopArXoQXZz;2O$r$?SB@1z`<;cv}KBRp!k6#9_xvo5)V&b$4<>_EXV8W2^fq; zOh$r;ZeqNdj^6`rhE|alw}<#G*7r=%6!s>GkfgzcKW2kCe7R`?nX5L7At;%(;D}lj zjnFgxskl;d@gGpe-NC@i;d@!W55L9&g4~~~4BVc`37ENjvxDTjcjjug@r%IKzF)W{ z5^RIyp`1Iou6bq~e^*W6x`}>J7U2I00+aPu#QH*}UrF?f*~aor1= z!SN)1n+y}6zUNI-pk2x*aPbhap&K2DNvz1GAV7|A$c(aW4i;v5&rHT_dd|LZ!5zZL zEjv%F%kCyqcdOb+-dkEW=Ii7D2hK->f(X)A6P&7rN?;_|HA*~4V|h6$Cu#ax1MGO3 zz%>Nr6S?C}u)5%%gv%AyGcXjHOy+jW+TLfy4=C=CuF!~l++vp%X-Ocp1_sYka>9n= zMDKTYi&#rMFj)#8)819E>wXDeX+m|&E$6_alp*+mm~ zLi`z~k#$@nUsDzh0JU@VMGTw}+ZN@cBgLDI0F0bkx~?31W-}d|n9^cYw81GkFo2VY zf^^)SU{~}$!e+K$5C70XUBJ-BajOtOJx~!|@{^*YA6XG>RVDPf;y_~oS@z1M6w4-# zjsE1co`!=CC=s9WR-xM)&&XBBn*rOG#Zn+%YC|XG>k_U5K`z19i(1d5mBTAENS!6q#fVcVw4DtnqM;ND_Q`PFR17kP^U& z%WR${G(0YF9;e6(Eyev>^&>1XO6;d*Xr+oP90AQvRalWrwA%>MIR^t6*`nzw+DdD~ z2QB;H?m*J=k#j*I0Jt3PJGeqyuQ7>JE~HB3<#lVFLoqXE9C8eoX_7=)A$mayrn|wt zR6G`k$i2V?3TSr}-OeZFt0kEk$jK6z_l&Y7X6b}{xdUrPW2R}w9u4j!Rzs@OswHV^ zE5nf)LBd2ZE{_0L|IpF|Cs;IbC1O-BTKkbQAqf)WDV3Dxdn(SoR5<}r${cwb!0{lf zM(AKCF(-=dFz9ZHVlhnG!I~8I$hnkVr9Oofj+YsMUJNp)aUnMR3Myc@Y?K5fRs_@g z4gkmr8Ve%@Y;Y23C+oxBqepgZw~6JioPB0(l@`|K?e^=1U%2P8@g}*)66k%jkR%Jn zt;cxm6zim8oF*1WS4lAqUd$5u+a$-uJ#s+!fHN4%^uolqc2Hz40=>4dhCE4X9yyi7 zBiFr_oOj$rbrpNzw6?;m8;{R1`ho*&(f7#35yNv-@yx_(r>5m%rFO^EjF55<_`kDL z31Y{f#{V?3DR~Z@o6?b3av?QLp1!8oz}(=SOGu|)En8fhDZfp6ViIi-A7!-S^jJn9 z%Z`@zB=zA;3Usu?pU7QZu(dSLM4@BDYR*9x%uNBw4)u5&euBE00UPs3Op8#dWo(yT z1Y~=f%(P%#;YIWooplODo^$3lX(IRTJL{QiEqa_<(AoH7JABAq=!B&U`$UA^ZdQIi z9i|hkXGZ^ zTQkPBKA^Z@&B-&s)WZaspyUnaRAh=;N9S}|Z_e{*S{T!l!cgALj-+cYrINJA-%tm< z#Hn60XIFXbk0e;GLsJ~{glxK5K-oPs_5T%fxGXP$I7(I0F;xeJ<6%&-Ot$G}-N0zQ zV<3Jd#sJw2-fta|dqF^;rE)L&J?@3np$l{%o8Fs+7EGOD3!DBXsoc#5dmbytlbsH8t(A4FrwW6R1N^Pt5K951JNGB-HC)mqL^vIzNWcxr#HhVFAT4=ga3 z8AvzXjrL}#o0@>~OJ6x4VWCV zdOE;hAQkxg#!s2-IU0hGFn15H6{#&@#`t2u|<-HqCM$XuN!_JW=TaWSt97M ze~xyy*}jQ0hCAMo3REl-Z?<<_^DF1aG6Wwpf4ar03Y~T+F-K<`+B`k%g^!Zi@-1qx zM^6u%;ZMLmre~5%6X!}>2A^v6ha#}#;@A`pegG=E9Fo%q3e8-OGn$=q9=CYC|>VME$9IOJ?hVT4?Ni`WNVRP-iFCY;)G78duXO;HZ!GGZ3B z;^tyB3V8&xrxBN$7T>U@7X?FcD}ha26P+6u2zF;rve@KarebAgT@BKzoW<&_aj=}ST6Js{>Z-sw)~Q_^p}+IwxFyApkT%@$w7?E3xW;Vjh-rQV>yA8@%eM zR1vE`rBg8za|1!Od|;j|mYjuxik3_A9Xx1kcKtf4D=9@bdBMSw(&fpifz1pi8ZC%# zFS&g<7@CX|>IS3i`6!wM?(v6r=vk{EA~;UCR0B@#s0TQA@J)+TT@=2rwERCn-J*pS z+1m8=e}+GxzVC`LAE1qTid%@5g4FRjAZCjCl6u5!_AQVcvXIA7HX|V?;XReAT;U(% zc#i#QdJl1UK9}fNHi&2obD6AJ>KP;qB(NvYTz^5DgtXg=E z)sPzlTj)qR^Iuzt?*@9m%SQ)W{Rkgkbj7g@NUhwmW|BXW@2W_L?2d%_%oDnGggp6* zos(KQkU#XQ5@}#OH-~+L%M;!=C8TF#r05!86=VE0&nJTc z8re9tCwfn_+lk&z5R~ob)o91aun&q$_ zw@=z^10V2(+-yO+!9XFY(e}6xH4a|X7j1t z7!QEbtfhn_B!YC+SK(Ut`q?T3z1rL;%O_L3Sx?nWOiBtQuZXn<1DMo+2n75plzM=^ zQHv~cDyDMgFuWjkc7e~V+56_@$wNYV&erPT@#F-b zY-PoT=_FIvDfgS<1QmoPLV+BJscm0|y%O_TuegFd#oUWN`9$ zv7EQ(=gjWR&!yA$BAw!vx_u)L6!@$@;R-V=r)m!aJ3AeAT3Cb5dAt`fRW!;Tk1gAyxt>~*pa7gJPXkY#2%#)6aFK{*S`UA||Mb}p z{e#EP9szQjy-BikMvJ0ov>|4`WbQ)Af&f}zvg)d&Ss32dAWaJDDK}N075x6*D(-JT zYkpSRf7nX+SsVZ^$p5$5+1V-Cf4bdo_W!T(^TGB1{)A@r??aR9iSq*X$=cqs4pJ!O zNkVTwksGq+68n3BM*&%!D)Q%*v)35`L`!*0legh8;T$FyM(2265fPWbG%O&Jj9H{$ z4$KawyuOnom*o`AzLa9YY)W#PbNC%qCg&8wP81%7JWAMmG6qEa>oS_;Waj_R@R{;J z{sJPeT$K?Q(1idg6wqSi1P24_2|h5vbu04~uR4#2PQ;ce(9m%pvBnu)O&h_W?1OGg zt_m9zz?>4X$BLZ`hEnw;)cCKH8jN)sD7xiDFZZG^9KhcYcnj~9sFA-$1pb3&)d zgixL2*h@!LtC?s~H#vfHr1fOn)LcP*%-w@wt>i;*la$#!3Qb8o*ZAJNgfW`tkII59 zSZ}M-f&ahNXoj_?*Ph1!66aX#F91q=JwuK9^Yog`@*1qv2`u$8Xo)>UBA8(uRANxxEu%;!^wINEa0P`t zCAqWUQYy$EdC!!R;iyaIAn?OUo-r5`MRr1D;7&@OaIIdT&y5k4__u zox{@ul*N*3o&TXAqM4so07uMAMyodZ9k0xyTz=XYOG>jX?PtTt|`C)w@7j$w}?YFq>M6m5N zMklo-pCa9irxdxE#V4o}RZOfI$=vj*O)=P$r8~fY)O(`&)<-LAg(nox!s_Q?HUQrSjO7b^8 z9zrk5R0XTbt9pm;-tyUUI>c@C$ycKWpk?y^tOldY^we}Za)F7aiV`($L^As;YY_W* zh-is)!sk?IHJkwfbWp!K# z(=xFHgrQO3M@(!>#@dU!zJogV(D=j-nsnxRQXkmG zOUaPp9X4M~hkW|?kaGILO}uE!iZFKVyZjnY`$sBO+WdH6Ep}5eeG7->g*ae$UD#m@ za=szn{aBM@QF+(z#)E-q+o;?^&UgR2V|jc$Nux#HAkQ2W2oOI}J^?3qM?=2RLc|e{ z*qZVRaYVGo!boU&U^9$sY9^qH-wg-sd=0-YfIyN(Yk~E0)qs)3lgNhWp&nE6`M6Zn z<<7jiLy4~fBReRr=Yyf(yK%#%S)T#`wh!m*pJLd$n|IT3Djaf>rzDbKEut4aGW<~+ z^voEV=yakelyjCnx-u3bh0$>N;Zn9v&6(f{(V=G>^fma7;+aRII&KkV5kp4F#)N4& zcvuS2F+#GiER_||FFLO8O1pebb|0jO&c-@y6@K84kF@Zol>6`9dv7)-ajui>(@d|? z@TE3Q`6-%_@DOI1QN$qm_9+b$r%;!yVKNzX>d$(GrfbY@*w6%vMjBZ$HJQOV=~a?* z7TjWfwgu(s5c(yoklz~zyJP4V`g*7=ors#m%N|Q&1@m*g0DdQ--fN&7u&qmLnBH;B zVZ0dqE|Hw+42#mtL4cu_PJw3mR#MNYzeSvnqIpc|2w;g3%}2RBnnobgkYq-a_;?X6 zXY!e;qa%IiW=fp-mpnLRA;3i5lf-!%#$s60Cf5{3O_cDhP0tO=o=V{FG%P%V>-T^E zKW_wCM}YK&Z96xNGUwV%m`_%^z=nweOO55c0Ts-IrzT4f8Vcu(|F2^$YcBC45xgc% z93I@RpCK|@Lf_~}Ly}m5w8D*gvj6A(=i!5=;n9x=hiucvb?ySSbR@Ax>F(lC-%(qn z$@p>j)4`)h;lsUyN8#fGn84n>M?XtC;LBwJlhGu#w@Z+Pqf^maQU*vm!9q>O5&ADl zjrjm@VYbYG8CEmC={VZ=O{9yoy9|PplVQF`Nbj{y^a7xu2&nDSi@Mv zw8MMsPmafu%$Brjab}?6#36?f&!dx=V$l(Rf$dJkeTEPKbPRJLlP8S*S}bth+^sb( zp0&@C*Kh&GNklQl_}2|++_$K@ zRYA{I_#ovJOtYm`wb^8Bu+O4yJ0+0K9ng-GlNs0C%g%-D@$}%>U$dNP+|-tu-U5Be zSiMKdefYSN{B>>;b40Se^Uc^H;0}Ky@OVSd_`lnU%E(rfzBW+1yF)I9M&Wc%v za6eC$=Q;EA_%n=v-=9QpBAz4(0?ZnSH!#iRI7`MSK+VR`&1-T?XUD*p@=4Bg?&Rgb zuNG-C!9sMXf?Uq+s^s}Rnv)kX?fO}klGlG?I1gPW$|vN+=orE;0$jeFmS@Eu!>5|m zW<{IST{qFqksFl2+d!!tEj=M$K-ZHj$=!@sq<9F5#)%3GiO2&VOnpfOgTxn|R8=i?<}H)fg9 zk6mz^n@*lObnqWZEK?L;0bGRXVqm6T;ooA+!r8lG*W(Lqd_eOnOy1#9)Pym4jZ&R#r!LwxKbu z4w}dYxx=sb>hsd~P^uTNtfU}oa4ONN52Pw&GqA4M)1vv8C<-~9P`8)>igASv-q8~638zU5Vv5=l;}NG@bP2si z(2?g5f67_TV&u@x0b+ilcqT>Q2qguHTk>0QlY=2NaaYMM%Ef_(Xl&;3oCQk{(_s;3!P)!(^w3r0d)=CBqMfkPzh@r6M`6oRrDszEzb3^hPJkQ3TdD zt?Gk}5?>=@ikYuNQ69OPF8Yu)NrC&kP*BO+xb}+7XO53jHtw!uJP2cSh-c zIBkHF9`1}$t4SJ`YAQjQGHpE;e%A`-;)Kd|(Q_GJN?^;-zIP*~TH@Z?;XdUKqJ43{ zwB{+%bP4LAsy(u?bp<>CNn&)ph)&2@KDFB>w;xBm!_KbZm7 zdm~*g=1ayelxopzmvxvJ$G~u9MrlT!4F;5A2R=1ARd~Ri4F>8;QWtzFx&tg4$nM@m zQP+=89iqJJ4uGk+;ZDLMi7kM6QDtSO)$#nxrSK`ALiRiBc;Y z^$FfAPEF_y*W{-(Q`iYgu!Fm5F;Y8pUA~>$M+GE2bY^Oru-S%g4Oiz7 zCzev#r@=31ALd?mu}nmR?Qw#P0((ug2M<|QeclfD$VC;WM@K@TAyhi~qyXWp*BN1K zAl#rCrrkv49NIw*N~fAr`W@|8;wuBJCMlU>h+dVp)|%eMEKE)Nw#qzz>UuVDDtK;} zj9)3B@+w^}6~{S_7l6oSfV^LBy!z%6`VaH7+W(Ui!hHGsADi8st*vtYkFAYw{-0mr z=L7sdSaO#u1DFJy8?#+#oe+fqGo%IqHcw zQvB0ahZccMGx)Nuj53U9vIdrd`2rYWLHeQm(JE}Qphp1(miU_}C04T74DV$@@4o2! zW8E9OPfjaxCMaz!zat;Aas%2}&djJbg_zRHd*e}clr;%oeMyN^MfxFjUT<~LYHLYF zqtp8v7c&Zuetx$9x4u!Ru;8!4hm?_(U=p=hX1I^gdxN$W`F7x_)fhtS299~~JMg{} z&5~-jgafsl+RDpBtgZyE4$sP*>w`{{d!rprK($k&_3W_+KjF(9ls{+fPor3E5slT5>KEf(ln65h=w5NXHqes>C2gfvrSY_N7F&5JEIztXjeH= zAob&@mS|H=zTRmC01zq(f_=8*ud1F{gaECk=v}&IxB@QLR2&C9NM;W7BCV@0@}fy- zH{>E(P9h5MzIDW6vNyz2i0Z zbPn&m&Ki!`L@(;sun{`mUoa=fxtBaJdp#Nl^Rkog(uWr#qfr?5GP}1Yid$!X-b^w{#IB0{5^F-O+jK^Qz>!*a&C(A%$3W`un2NvRGiPISGQH$oIH%FS#dny2!~XQ@ijJ2}>0;Zx9pstSWZV zo3imV2LN}A*ZB@OVoxm;UM-B7i%TCS>gQ85e1JOAahY(wwbn$Cr%l!Z8ed#O7&s3~ zJVTFFZF)@psg5RE3@kJg-(i%tjJ%1A|FN|k3|?ZqA3=(%GyZ@ZAhM6G%E#bC8ULT} zJ^5k3_4L{P^Sz^|&ktKid-opg^C+dwp=2kpa#nUK1wWdWi=rLcH%p7kICZZ%H zNG3H**JP0h3ar9-)6BR8#ksl^O2SFu^=us8C~k-QRQXW$FGgS{h)iMf52HyQbHOp# zzH|~(QEe)7)Rgm>ap6S7D}|3yn>uK(*au_KF&Q(gFrrDI<@&lpN|MuXt6oD-aklE^ z5|tlozw9To(b})qHP9Z8FY4i#?Q{hc?gEI`)bxC~dhCl|+{wU%gA|IvD8M&G`X+vV z>{xkOHGoYs?(yltgC_ZJA-PDGSzggbLxn7YC;kL$)bPY!V&hi>YrGYa$y7eHbi%X2 zt|1U4DhIyp-ECx;8u}AOQ$)pio{kd5tbF{>Qd+sDGq`p^ z@7G>N&EH;K>-FrEE4t$$uSF%UDfB_n1)1ZuJP{SpKF|e-<7{-3+MYdy=EPifwQ-|7)_`>nmI3 z6Sv;Z!{@wFwiL%5vyQP12>Ed4+XapS2TonF0`Ai|a9)BgmaeS3rLt{iFBhZF&tpG+ z@#yGaEu&qv5iG^~HkN2O0!XIYawwODeNOb)7wLj9hb*|q8$!oR*}xV6DO4wr_=L#R z3|G#q9X?7}d8|awY;;+mmFNfMMOZtKWQwBl)Od|kb$52oAtyEo`Q?ZQclpABF<)~& zKUdZKl&jYy%%CFgwaBDy^%!{{*eK@U9soN5U`9+FE`>1XI%MLYQs@3vaI`@+M_WER z8{};GUEIFbv$lqn+slwsyM%Z-Mt*TXU>odJ+5qS*cSV&ngu4m z95k6aXJk0y@bh!TE0-j^adDmhoDA~%lejFa>~b*7FaP4{)9qe0Lx0~KKDt12F3pvH zDc0McXo>%})2(8{9cZrP#ItyW4q6{%&X{Io%-~-nPm8vHSDR+Fo-^mV$HxC!Yl!et zuT2bJ|K786xN~#ae7lruUXu`{kh{YC6Jv?GwtNhhUI>iqs zD&iJL8Bo{ZId)B11mNErJOr)`<%a+bD~ORbZOgqQjJ?vnh}Fk@Wfb1LoFz!-F#wHu z6ZDsm<&<0{_&Iw?$S!>-1H+$*AmF;86r%73SMZ1iZZw`@gU$RnW)k_>c0i&0CUr}q zu~!lqOuL00IP}Y@Br~}31i*BlHE9FdZ|9%!`l05JrIv@p%w^J z)$HDdgUhb3{gZFJc3S#i(w!ketUQWa(hSdtXoW2@iITD*q4AZbO z7MfKQGReL%B;_o=VF*Z*vVLO*8jbH{P$Qpo(>^Tttb1cSZk7S(r}QV&E`&jo@GlfY zRUZ<);wK7c6OkN)&Gg-K@{dW}g-!LY`N9!dqEF;lQ&hQK`+2&n=0|EDDKL|;$3&J8 z3(f`JxK!6L)=Hp$fF&jj0GgsPl8kk;{91S%$74iGqI?q=a8gzy;Z5@PEMDB87JBH_ zO^7gS6Q;!!fiHktRYC0tvrS+|lp6}VlnDiYx9w%i+n7xNR)xd(Nwhfzn6(z#*vx|- zc$!jJBa!5p3+z^O)i1^L{r4ni6n&j6E=kHtGM3#qL9OxtQ`J=yGioq!t|oR{+!hTT zbI4p!Y{N02hU9U-w%d!TU(vOPVRR+!TeVci@z2#kRiI2f@i-GdSFacS89OqPGosDH zpebU>;xCF73Cz^=SArMyj>%OrSkf?@9Qn_Vg)*6Im>w#ctMIx@*^++3&ymxCjxf(Uz!=ng67Vr7@frZ3<1NV`cCzDJHWGI!&| zU0n~%YzO-uIz0&-aAyUea2$-W69o{;cqJ^hO}pgyB8MlFbSNlabfa$gx(gUe1`Y5T zCHV0%uFELaCR`3wbWWVH&Gg1;gIMo4I!z{H5K$^UUuk)ilGqkgEUln0C$pO3+;mRy z+l2k|wIf?*CBLkn=ZA2Ca>Gh&px!+1(;`~dub!cK>5?p?ep|&fDrWlxu92ov@3gzk zaI?L&!i1=ESjjv}a$MAL$UuijedO34!ZyIa|8@BEN&VV8UvYvHsr70!gMyNzHcE+h z1Gwe2-pkh3t#)^FYkQ~J-Dr34w^#44HOv<rvp81%hk9@skaS z26jQ0eb4B1ZfqpW83Vtq9Hl3L9-0cL(o6mR(M{n-Wae)wRIk}D^!arCW>&-dU4_IS+Wf; zs@kt(HX$u+=6+$Ck5RhPg0m79m^XR30ot*g$=ZdsP4++8M0_(zbL$D?Obe$0ti~)2 z?>~L~_~6J*=Ok=&U?-;TAZJ{Rk8*0#J{C@?9o~;Kiqe`UV}NTa+)a4{F_Yc1lY1#h z7;)B+pq)vcnvNp3d>&<~^zQ_h%3u$JkZC{Fg@qu2*SNym86Sq`4P<%k@uuYE4;V=!@(2t*V>My)nQ5nru}7} zQkK<7su6HQr#>7N#>r75Mdk7^`x+e~3F%3$Kvukxuj6cT+XDZHx)lch8(UQ?d7~w@iZ`35yu4NhRB#xB&r^UBb^5W%CtSe42iL3x;swZ za&#$A0y9}5K0$aLT;W|aWn9cj=~w6oYM)pL(-*p1p>W~Zc1Lo56)!n*ynf2+v`S}1^k8EOl~r!W3*3O^7QVY zXsMwiy=MdhuI3PN6>>E$Fr*KB-q`8ArB7763iyUHkp*< z2R(j*$=N@$I^x|^9g3|)YCCd>iYGtgaH&p5=mT3 zSPsXdMe@bdIueLx*x&c}YPqmjmxC^U>Kd0RKcaU6Y}YpDgGqcUZ|a%~g@~8f@TVMr zTZ~stA4}qD4WV8IAI(7EP)Ma=BE;Q=QYuzA9@(Aj}4LMJKJQJp}k=xAb`D`h!z z5ip%0OjbmAB?5s^7!Uq!YBn#$%!9q7y?c9y`@k3R^FQz1fAQimtVx>fJ$gi5&jYfh zQ#I{TJVyT}bd8r|Dxf_$-wzMTc#A!Y6V^|1ZK^RaV=87~T~^3mK9kdK_BnYWI~&eC z_xEFskdL9rjcOk0vK$d79Vu!AGR=wd*;pZUW@aX)$QUWxFvdVzOsS7m7K>5N${rp0 z)ZVINRB7mGW)rt?z00hgJ zG*lWmm<3i%A2O?M8TvfCJ* zO_K|UWmb$JAy~vg2%NeoS41Pbdw81y7dm-C!MsFk4-0IdRa1E{2Xz+jld5m?yyAi8twACc}9QLUW_xiA5i zBx&5mkoq|-gy!SzkEK&Q27m7$*&-AQ2nODFpGuR~_QA>DwG*JU^+u!CD9ju7Cg-f( z4%4wzfFYqcv38BJoX@?KY0N4z)?Rxq7$t_{8FS(hmilRbEWt#4Xsau`7l1>IN<%5qjYy9ij9WKNw4DWoR0tyv&I(2$tdmTGt()lab zV!MOs@BMlI*;7CbpUx8p#VMXediAA3y$@kHwRA>GWiv$rQ9w0zx1YoQf&}MG)DBZ3 z=-fs7b6G78j;m;(zyHWP6r_xVl!poXT+eiEf!sXQNl=Lv&(?ha8ie%L3(~T>TI3*b%uaV!9QT12~&l z0U`Q4A8J$_JR(QI+QNhlHgGr29Y2D0xHp08zC7VM6?#{lVZtgUG_GF5$^gjDSbqP( zy}f4#EIXsfMV{nyKr&ozkZR$u!cJVo@hNMS#_)WSQuayWM@{)J=7EYtq9?p+2_KOVP@oDnP!JxnmVF3cInZ*_*R;Sny`jAwSi-mECGgH8JVM$fZl71(towNx&Er7V_U(G7)RY8Yd0CS#+d zIi=|Km;`;Qt&&oSH!CEv)4FvRQIC6O|Jk)SLUS_Scvtn4o7-q^unA}D6-8nVsY5#@ z%;I~OCpwcI^g~IoJFeGS7&Tu~T}3iavW^V>>OWiyhRK=@$06FVYMQ?S94SA^+m0oP zFx`Io8W?~L^9YsmmSys!bDu%SXbtbdg#&lX?eS+h(;9<)GnRPfn!kM>o53yISEwuZ zJ4sJYVkE@UqJCU^XF7W?3hV;s9!~%aNqBV}6*alB0AS?8XtErO%EF!jwxfqO_EJ8G$l9D6$1Yo;goC13dt)!>a5*Fk z%5omSrSb*po{~XRes{s*1Kb$=-mC9I8HzP`Fv9&LP3IC8%a@mjrmIWUvy2toI@pHw z<&2e4gvDu1xkgsuBPtuEraHcG8E0u7$E-&(S=-6*&b~+N)P@%ZGX@bS5tJ|+m3Tp1 zW%83h7rVp2?pJa9YJXi$=XosQ5kPGX+Bg(CF1M`ej6%BDfW7CfFMU1VfR?n z8L@gJHU>^KTslU;g*P`GFb_B`hS-joY<$(yaeTW?ayDw%(A?I6WcyrTVHd7$<9Qk= zpdiO}dOpWPB*_c&rXzx%+-IH1ARynz1ptVw74Hf|IpzL@rkot#K)jlr5M8QfvKeSh zGfIP5Ou>JmO~L|z?NzwY4KOgN66CNi#FhlW{l(j!haZja-pnY5it39sebU)@ed*(Ot8yy3V^%YApNTm)><0BY+^vvUkBK;5aWlDW#DCk50(0 zM+u_lY-vw&fiHF365F5xH-GFyHPLEO5;*s+O6__YA>jt14syyUFREYtx9h@GEk?oA zW1cG5CRRf8m1gSq7&bz9;v^I>SwRhumJ5e853@_ZF}2U*M{??76q_+*jpTI66yPXqAbD z>GoG%qNQq*^KcPVvJNG8+_oB5@+0lf#P25`Wn< zA$$Y|2=swTD}cbl)Wk&u2M@$H$|h^!k1=PEt=|B<-{NBOSa9*+0a|Njtyz4+wY4_8 z;gB-gPS zh`_Q?-lOsaywHcU)LEaA^-O#W6~vY75OCx`i75dF*HzUA<}*~8olu=Cr{FTLA~35! zuLk!h%z^u7R@Aw|t~s@DjJHf?P7@ASBc_Hw~i- z2hQb~9n50!efh9Z+LQai(nEJ+!}9PsU6{7A+1G&e`Aae$c*zG$I$=&@@Rz+-zBr#0 zIB(qKx^kJyPzMT^ih-_ppxB^Axt0D3r)@r;p)EfTYZ^ z6xUQYNmF!3%}|z}+5EMkh`9d+#Dkedk@$ls6yQ6jZ!11!VGoa5@|xlYCo|+Mn8P)A zEIsyxA0RN}l)`M0T1 zyE6Wp%Hw^G>aQ2Ye|L7aH_G*2H@0@Z#eaW=p9|u@`~0*;&;Xp>J%kNSTSX5mqOzqj z2Q^h@ncAu&8mn2AWwPm!G~I;D8*$-iIE4+WuXOKy|1lHHEGy6)ow6= zo1HA;O{(2JQ0Z*YWVRC{xu;uBIm>Pj~jbU#?c>~J6_kHr?r zCeAZ!60t8|zMN^tVMDb!|MvF?X>752ZTWRfJuua=g15 zKBXja8ZL|uO_Kb*B4nzxxoWwNy2+*@Q zFH7f~qrcFdSpk=yf#lx6qn8Jx0l@{|jl8owV zhb^Q;bAliJ4Ru4D15y;b2H10Br-(g-Idu^;C23^NmXlRV+;@=06RF-6M?i?k#!5;N zl1|h~&yy-02N@rOl)}5XHXfgdHgbe+n~$#@4vHFMC#os53p9^+z*qY{m(Or52*P2q-}+c~oML zQ^^m`(koU8QJvlD3MeC>KN<0KDHVJ-kG zjwzS5ClGMyNfT1nSc zG}`EvbOS@+OTOS`Mgbi)E4$e&cjJE}D16oI4LuoL$>YiKKto+^NU~ByxT6%z9&xoJ z%S1OXxc`F723MTHacg@Yv`PN5__6R0yG1T({a0%_4`{b`pS>a7&MU?*4di`L8r9%E zEbo32Bkw?ob>*IrdD4dEourI&T)1^3@dC|dVsn;6lAIi`Nyc>AmHc?x%ybonum^`v z8YQlkLUD@84%KhHyRp@6ZQN{ix?$&5ue06jY_xA~>}=h>`G<{8Z)0PXbZl?!_Xex8 zj9kbZ)1zRtLYkHeG1*$}HhrXFv!OfX4;%`!QYyYEFN<@kun}bk0~Lu2ZU+N; zhzF!tL!)5{9GsgTe|Yo^zVuvRS8g$Lh~%+)4`x~6wMw|sGI9Kc=Z)%%3Us3}Fm!TW zY$5?0flWz_?+B4v4;{@qjyTn&nP~PQKT!9fvKf5J)Ey=Y!Qn$0F1!ORd(2}PqmY|- z#Q|@`B2MlP6S-<*j2&lrrwq8~u2fjhsd)Jh(V79{qGv0bp3vlLj8~@Rj2c#`JBrygp~JobuENW|?F7eBPO?cA?|=z-C?O;|XU^l4eAdZYvP5QgFtXy2 zTHz=N7mdt(`xZzY*^ARiV6(8coV6rcx8?;&h?{P}26&G0F-cA|GS)q0}4U%5yD^5ABFNA!i0fxVFqzjAK>cP+>Vji7H=W*Yf){Q(Z8B@92ZP3zy^#B zhBTmS80DmxW0TyW73*P_#eT|(@i1?{+;~4V7{_fMJRu)6uG48;qD5vZ-lOj?H?itj zWsWO><|#KA2-T5E6;J%O{ac`Uf*Rc%7LGX z!R!ws2Q8Q;p(Lu^5z^LlW=E3kC{EZ@c?p!$nHhT|o%8Z}iW%(lF~ECDkzjY=&zAY~ zqN$-CRW{!#L*)8}nA*=%j99^IPR<-w+lt9pOpFcBh;3a|{beczckdKcBX_Chgf7cu zuatr+v^*aBj{8mfpW0WT!v2p-ZqLs@-x%xd{~J5oJKIJ3|Mu4A);IhASNI{DEJ3(< z?|*UdK^e)`_U2bv$R5g{Lo!%W{#zlLlce%GSh@cjE*tpJ{g9g#NIAG%LLIu>{WN z=XraMGv`P&Nqug<<)VTUcCQr|wyT9hL+EWX)69LfqhU^cY9=I%RT<{#WQm!!s8TT! z;u()gXDufEG`GLQ%-|25UmH$7&KC8JW^t7Iwe~eMqdK3lt{mP?lA);_1Am%E#&rOZ zQXf_u?oxw#zmEWi;VGQZDKO(x0OJ@Pfa~U?8(|GbAS1580M}&m${Bqm3`lu5m{?6_ zTMOX7=bR}Do_067uo({`;0oc2{5i_9=(pdvJ}L4<%Dx=M(X@s+R8CV|Wv%!@4Q+}s znt-f6q~8}~dB3kKqjKn!JJG$-9|_%i<1u-Q3Jx%k?z({FlKh%7f{-VrL}W2P2E8~J zL~^dteUMJ;*vUA&#@D%xnH;WPYoMsdj6LxL&2CiZ;y4O!m! zZ~tvyzM-l?m_8ym?|+@3k8Z4gFOt#gc;P*opKSIK%Jgr5viYz2hfrAIh&)&vpx!>$^X18tp&TE=xnvPN!-K`> z>$tD8=Oq%I!5Yy=r_1RuZ;yxgNBhBH|B%Xd;vXPyy}=z|_d3oT4w67Y;ZvrwSDhIaG$Xi7E#NVvHP4Z;v|`2B8i7^ z^J1r?zA#zvimP1J+~cnGywg{-2SU>@%KE49Zy%2sno++7$HAfYCn@Yr&(OSf{^mrH z;5f=&uY1oOAbh=vGRn-5L(6vtW^2(H_(Muo-8u$b*}`mm*jFcur_#y$X7K(3^vaYY zWXvNd&cq||A?K%YyvQ4jf1$TE7+9i=NyRhA@B>@3LC?`03422v$b2!AxSBvTT_Q;t z1@xP98v0b zhE)JW4GE@R02I^VU*Q@!6tu76vjMC5IUG>Eru;e8a&>%SHvv;)7<0qW&92v;TxbPS zOeCTG298>(H0R0hb4V}DZFtTXfbOXmLo>=Xa*q;E;RPY`Y}~Jqz6F+ID=&q;cDAU$ zpR`aVXPJX{J!S%Ww8MdL1j}rKA63-Bl{J}vlRRGnuKzBt{Ua$1D&&7M$9^8qfBv~Z z{_k#Yc1rU9&7I9}^8Z)(Sy5AM-H&5RM{%mG4>jdY5x=l1Z&mHKwc|JgCF1LdrBY*w zpR^3A`Hy4vY0b_td-U09O6E(% zvBAK&sSNs*QXccEkZ>el~B3fAam5!#gO!Iv?x-c`0-f4wVSE_@^_!%R$RcLtEPf%)84VYJY+NOq~Q1=|mcb9vx$yg}hAL&uABw8&z0 zjOb0Hx8r!eIPHa9HkWbS8BrgWPR4K0CwS~WnkVvC@LV(^=xb3(JF|W?NhSu!BsahG z5q8NBe4LEL;=naeDt(Er%ORh{Gn&o7Ji#JT{N(SA*f050LH_|tZ+zA*9h`8TKkE6(4t#-G6wbV2-QXR}+f|J>Z%>3-w?zQPX%p@}wj zK3Se5R$%gImZ#0Y

bH2nU1S{MX)KKr&I&t#n{Ii3((|8OH6CcBrnV^!>9xL7P9b z42J$!Tmx5n(3Y3YK10K`rb*6qYr?CK4(>hsQ|sBE;NL&*KR=|@P`K^@jbEy*uitNk zsID(5=8Zuj&Gk3TafzX+@+ZiEFlHM|0-;O6O3MblplzVAf9)(=_D9hO6RT2UHkfjo z@)~5?0+me9=t;nB@H7^Q?P3Oe3Rca@hhWfZwuaj9HLxzlMt@sj8(!4aQ z=hSq4%8IgxPGl3{wYLigg;K3}yruYhaB2#>t$m-xx6(nLIv`f~H}u59IeyiMbY;Gd+;c5#j(mY3%3E9jCQ10tj@P`Ouk z_S}1pE!}nHX!2sWx+R)l;+xBCl z6$iVxvsu_I1_ zGV=SHPmG?&(Kybu^n#|nLtj*>U2H=Dg?Ok|EN(l$_z{kx{SV zIGj;Y7|)#5RNv*bW^tfuM&aFi^H>!gfkV*5ca8)>_MIMRThiu6-QG zJ-38u70E2T$)G_8%Sq=y=#tzw;;I?IzBF zoOcBntG87<@^cHY-#so@-veIChLtOK;M5qJ^?5nHyEjGMm5ZmzXbG+dLcTv&8QW*Y z+wdpN-~UkOcbRiOt6uJLn@o2uRsKI*9%XTEj@x!tJaD;dN|ReJW7kMZ&Q)lIPl13PH4id*@iVKgQ?#n3dLkH_g$W zEBgl51LZ{cMM8RfF5=j*%^?xw_m(fg9pQ`nPUfI+OE=llJ-ZY0Z0L-PHFhR36%wnP z!!^IaEE`3bdkG!9YKAZ2-75{LRHsszfA5? z7sEQTWEas{!<&ws#)|%qU@z;`v|#|9x02saDC@(dUPBKn`2XvsANc*cT&V```761U zVJ1`ZhzDNevKd0gWi|e8=JqA z_^uOjCuW83C#g%hl2wJ`l>Y&EW2L27hvnsiWF)%O5r&$Gqi!bqb`O><@%DZ*7#5|i-6jQI<>0x z`&9j%Lm>Noz*_I#Th4*eEvq@)OaWKJ2f%OX`yR=AHJg^l&@(eJo4AhsL|L;8sX5=9 zXKTLa!>{aS6rNj9=?uqxbQdmmb+lTGILZXsY)ACg&k7E8hnakUJ*Sg;J z$1{|F%--Sm@NRW> z4TsNTOiLow0yuYtCZIS=v)55ZOd#x5FRcBv_x#DhlOK9mLkAf|OtLh2LyXoLCIzr1 z4wIR7cRpvIYq>ehFJ8hNFn6r`hra(a4C`Dt-I`m- zXs1qAJi<=#Y&m7033hhn0MUjpl2bFL=kRf!( zrW_@t!AC56P1`15=;a1q6(n)Tlr;M+n!MH%sN?5lmG1GZ%{5bT$GMG_o6@n>+t@LY z!#br)8xPHrWL@jpu#Fq*yRe7uMsYLplIk>SjUhspPFNWW#aJ||8V5)&Htm=$Q#qo^FhpX5N6p5b zUQ7FsuR;p!84}FCh(?pX1uNUOU3_c5#S35cam9!i^&&Fhf}=~SI&fN8E$MOc7Ivs= z4HepF(mAo~A|6EJHCtkUMt7gs-jGsJn?xuR?Yvxlq zb>~dPxPWe{`p8*>o4@!uV>L_ys${}=r~rIGgTEG%C%4<-{JdxAO3%&qbpV&A&8eP? zm$)bS$^Del&d-sXD$@;5^6FF-d(D_x>%o+0M|%U9{lK=v%mSZj0X!0P|Am*vJdDjF zE6GWwb1c7W%6CK>o2_-d7w1kN?%7se=qk`CT7{g7iq8FNn(?Y_;HDG!8wP;?B9bPA zoXq+py8$)&CBLp`S8rc$sBwUUc9J)7n-k19bAlB#v7hSh+P}0f(T7;}X;PH`7rI-& zipn0_^K@Rv^%d<`#dZ=cNiVw|ZZ>o)nD_ye)Z~YpN!W#^o!* zYyk@J90nzTN9mB{;{xXZyjH>sKw5$fIi=pNyGz2KDRXtyiNA0U%BPjY2S%7ySSjSK zovv)Nz@84D!DO>|nu;_)F>4%`#*9xSdnkqw@(~0)OXlmr@2neYKb3MYgI``cC>xOU z;8obV8|v$q2~tB5y)okvN)jT^%GE%bmUA3ZN*9c8hM91RH&hWsT*uhoXJLx-#pGaGDgO+|TdjkLWxwy@+R+P(_j_tf~Hu@~cvI3&5UvQ-VE_ zE6>~bLEWv}OM)N1q*gwVqdmPH&&Dk0)!Os(TB9sVoF_5tAz)h^^Zku?$K;Gc#(hVG zah#2?${b5Lzb@HssW!oOO-wgACY>^7AR#jJopZ^k`sAO{ltQ+wP@uS z>Ov*9D0WvcHg>NjAnFy#59Z;k%lM2~cC9+L&A+Lp0y}uw>PS{sPOn&)9%5QdPT_a& zP&YdTZ0gwF6LcZVNqI{1V3)DN&g%?S&FZ!^4a;r@7cC5qp#9f0nb8Uh)-d|^U*D3n z!v3TAFTR5PXQQ)mvt<9d2_Jm3|9pj?t6}SU3)75Z>dtVvIBwm-CxM}OzfLR#`(1uS zn>h0b3Heh{*ft;FrYkPb98~*}2z1{m`yddux84Vz8Sgun<8z??(Xs1%r_>S6l?zfS#IrY!SEb4b@KxK%K~ggK ze~3$;q&FkE!z4T%_rf`cSlb+^?tql<9TSCq9k;&h4H7)pg$?DOKZLcg))4=>^mRNd znXT$q|MQpe9~yrH8U2^>RW@5$vPx+pXi@60M-hoks4twps`%?lv;EOAGyHB?^bsrxth%})XF-n}t|Ott9(cVJ zmXW=2{Ry3yW%)}isO;amx{ozJiP@VE_A|7bD@lalEHF)6!~2HW8E%UZVXyS+c6qVk z-y3;z3x>xFnNoH4mEHjSOkHq!6&qAUW=^?<9hmFErJs&l9q|47q<*c zz(n~dNgN*{b}aG6-?8IUC@EDNJl4{UJS@|!F;?>&;o#_k2i*(?-+hPG{?Lu+{sapz zNXbQ*fjh?S+jb07e`UO!Q;~S+_TK&v2T$CjK{1z0!j4T=Aj}2i_q(;x;kthA8FtHO zSX|l&Xd)&lOlCl_64=B97@6NN$8Crf3JQZ_hAGFib3efyOet55yQZ5RyQVxo;naWW z2=6jw**&H5#~4~gdoiyfjQAUye!botD9~vg?)`cH+0%n3N6fm9xlb~-QNfAT zHF>y{RDgw2%=SqkvKiI(rcxztVGeIDTXrrU6aae_8|C)c%@0)q0Kdaq+~I>HS2&zT zqo;>qludWG!usAED*-+3G)ni^?PY7LeAu1xVgHn7uS0Q!9A?N!hCim$c$i_GN3@1d zCdTq^(`!&&Hm_z9I+GQSd_lF)CGQCtfd|6#9%S`mDRGt6q3 zp%*9Gd8m8?rnU42+bJzK@bEF?NJ+fqUXoJ&EVo}hT>I^a&dp2d)sk8k-j|(?j{OvX zZ}d7#qtWSud*K~7pm?M&Cebjbc-*^KHC}N!LW;>}n~jG>RMFWi&hO|fZ9O|h8g`#5 z*o1c$@MMlpT3pixR;b;(EA1A0qQq}4w9R@8>$-a~7?=u@Ks^nJQ;E&$TCP%{nG3m6 zEzls8>N*|(cXni$RsBeT?ucA+r+|Upa7`}0xkEBf)A^FzPbJX&&FgG!+l4r{)15oY z@Z`7YZVaWQ`w8PIGd~Mmi-IgODj7nwkUWUTDb-~8$_ZD-@> zzqX(KK$YA8F^#y?71h(45YC~8PWn)9XK%U(C<*8KSj#2HYUrhd^vg9T9@qc_>~_XC zq0hxr&M)lAd`LFJ_WT4F#0xQx7&Zo$Dtn9RZVB8X=aD6&g~7q>lxr;Uk66QeNH%*a z3x*}hdh>YR8|>WNE?%szbFoadDsuQ9MO;ZrioIB4Hu_CsVgMP*zck8tQOHCkr?%sx zuZ?!+rjM=-aaQ_C-J_9J6tT0@Es_YB-1dseoxv47VMb2apyiCxa#KLU=rm$7PN<*` zln^VQQX#xinxRt^AsbiY2+(2KX#=s!D|=N?VSi~9W}ta5unMLUNwZ;weWvcn;y!o~ zEh4%)UbUvdQvlNANqQ!)G=5z;2%0DWG;(d}a?whUTNxIpFR&ql0V3ZC0$F#Xvjx{1 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

6Jb=knV`xNzGEjrId- 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�mI(BE%stx1neK*XkWi}w?*Rq--Xj!(J9wBXc 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
<)JKd%MQ$ zT8&{{Q?6OQ>J!h5NLS3v@jD^|OH7noBL*eH)yg!XMF%FWL8u>jC9ke&Q#T<=YyiCt zxQ_}5+x0bJp=b=9P&+~H8MEhX>Mx0H%f*?#O9YgW-@&uIOLi=l#_`vAXxx_TY7~KY zW?)##s{4h{w5HmFDy>Sp-R;YW3~jl< zA#MjtFk^rlIyU0%Pw?gQb{&m}N8y2$95-A(u^T$q3t8Vk3f?iHj>@=H0hQvrMU9h# zdR|yq``MDMJ}|-z9*|l**i5zEhv6LHoMa_<4fkuO(&J=Qb!R9civntY+MSGO*l*FU zYl!kO=N?D8(%G*Zuat{b8YR1}tKzeDPHHxuTmPn4f!9ncD?jhjS((By%W_8rfxh3J z9Gx7~h;$b5o;PGUzuw8{*O?>ef{O=X z*i-Z4wEtl-{x)F)RN?=>+Z*&W`=3Ft-|v65|G9$?E=8s&AQUa^Z6+}hIjNNmdKIN< zX^XRnGLW{N)

-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

4FUEY<2LHg-<{->_Jv;nq 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 + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file From 24cbf39a933474d920c2ae805ccf5dddd3b54998 Mon Sep 17 00:00:00 2001 From: jessicamack Date: Mon, 27 Mar 2023 11:15:13 -0400 Subject: [PATCH 37/52] fix heartbeet ascii lint issue Signed-off-by: jessicamack --- awx/main/management/commands/run_heartbeet.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awx/main/management/commands/run_heartbeet.py b/awx/main/management/commands/run_heartbeet.py index 199412dfab..ce9e531074 100644 --- a/awx/main/management/commands/run_heartbeet.py +++ b/awx/main/management/commands/run_heartbeet.py @@ -15,7 +15,7 @@ class Command(BaseCommand): help = 'Launch the web server beacon (heartbeet)' def print_banner(self): - heartbeet = """ + heartbeet = r""" ********** ********** ************* ************* ***************************** From 57d009199dc864d25d5896e3597ca8f3525ead86 Mon Sep 17 00:00:00 2001 From: jessicamack Date: Mon, 27 Mar 2023 11:20:20 -0400 Subject: [PATCH 38/52] removed unused imports. fix exception message Signed-off-by: jessicamack --- awx/main/tasks/system.py | 1 - awx/main/wsrelay.py | 4 +--- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/awx/main/tasks/system.py b/awx/main/tasks/system.py index 6edf78ff8d..a83dad5ccc 100644 --- a/awx/main/tasks/system.py +++ b/awx/main/tasks/system.py @@ -61,7 +61,6 @@ from awx.main.utils.common import ( from awx.main.utils.reload import stop_local_services from awx.main.utils.pglock import advisory_lock -from awx.main.utils.external_logging import send_pg_notify from awx.main.tasks.receptor import get_receptor_ctl, worker_info, worker_cleanup, administrative_workunit_reaper, write_receptor_config from awx.main.consumers import emit_channel_notification from awx.main import analytics diff --git a/awx/main/wsrelay.py b/awx/main/wsrelay.py index 3260182b7c..6baa2954b2 100644 --- a/awx/main/wsrelay.py +++ b/awx/main/wsrelay.py @@ -4,10 +4,8 @@ import asyncio import aiohttp from aiohttp import client_exceptions -from asgiref.sync import sync_to_async from channels.layers import get_channel_layer -from channels.db import database_sync_to_async from django.conf import settings from django.apps import apps @@ -240,7 +238,7 @@ class WebSocketRelayManager(object): except Exception as e: # This catch-all is the same as the one above. asyncio will eat the exception # but we want to know about it. - logger.exception(f"pg_consumer exception") + logger.exception(f"pg_consumer exception: {e}") async def run(self): event_loop = asyncio.get_running_loop() From 8c5e2237f48e10c9f9d52a4be81af23d3af5031f Mon Sep 17 00:00:00 2001 From: jessicamack Date: Mon, 27 Mar 2023 11:38:01 -0400 Subject: [PATCH 39/52] import typing to fix lint issue Signed-off-by: jessicamack --- awx/main/wsrelay.py | 1 + 1 file changed, 1 insertion(+) diff --git a/awx/main/wsrelay.py b/awx/main/wsrelay.py index 6baa2954b2..93e7527dfa 100644 --- a/awx/main/wsrelay.py +++ b/awx/main/wsrelay.py @@ -1,6 +1,7 @@ import json import logging import asyncio +from typing import Dict import aiohttp from aiohttp import client_exceptions From 25303ee6258860d2be75ccad329b4e97b5973193 Mon Sep 17 00:00:00 2001 From: Hao Liu Date: Mon, 27 Mar 2023 14:41:48 -0400 Subject: [PATCH 40/52] Only select task instance that are ready and enabled When select a queue for task instance to run task only select task instance that are ready and enabled --- awx/main/dispatch/__init__.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/awx/main/dispatch/__init__.py b/awx/main/dispatch/__init__.py index 642405c2dd..009438307a 100644 --- a/awx/main/dispatch/__init__.py +++ b/awx/main/dispatch/__init__.py @@ -19,7 +19,18 @@ def get_task_queuename(): if os.getenv('AWX_COMPONENT') == 'web': from awx.main.models.ha import Instance - return Instance.objects.filter(node_type__in=['control', 'hybrid']).order_by('?').first().hostname + return ( + Instance.objects.filter( + node_type__in=[Instance.Types.CONTROL, Instance.Types.HYBRID], + node_state=Instance.States.READY, + enabled=True, + ) + .only('hostname') + .order_by('?') + .first() + .hostname + ) + else: return settings.CLUSTER_HOST_ID From 968267287b9898f6ff5b50e6ecf6c82fc2b39a2d Mon Sep 17 00:00:00 2001 From: Hao Liu Date: Mon, 27 Mar 2023 16:23:33 -0400 Subject: [PATCH 41/52] Catch SynchronousOnlyOperation and get setting async If trying to get setting from async context (in daphne) catch SynchronousOnlyOperation error and retry in a thread --- awx/conf/settings.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/awx/conf/settings.py b/awx/conf/settings.py index cedea3a3e7..8e063ec862 100644 --- a/awx/conf/settings.py +++ b/awx/conf/settings.py @@ -11,7 +11,7 @@ from concurrent.futures import ThreadPoolExecutor from django.conf import LazySettings from django.conf import settings, UserSettingsHolder from django.core.cache import cache as django_cache -from django.core.exceptions import ImproperlyConfigured +from django.core.exceptions import ImproperlyConfigured, SynchronousOnlyOperation from django.db import transaction, connection from django.db.utils import Error as DBError, ProgrammingError from django.utils.functional import cached_property @@ -183,16 +183,20 @@ def get_settings_to_cache(registry): return dict([(key, SETTING_CACHE_NOTSET) for key in get_writeable_settings(registry)]) -# HACK: runs in thread in order to work in an asyncio context +# Will first attempt to get the setting from the database in synchronous mode. +# If call from async context, it will attempt to get the setting from the database in a thread. def _get_setting_from_db(registry, key): - def wrapped(registry, key): + def get_settings_from_db_sync(registry, key): field = registry.get_setting_field(key) if not field.read_only or key == 'INSTALL_UUID': return Setting.objects.filter(key=key, user__isnull=True).order_by('pk').first() - with ThreadPoolExecutor(max_workers=1) as executor: - future = executor.submit(wrapped, registry, key) - return future.result() + try: + return get_settings_from_db_sync(registry, key) + except SynchronousOnlyOperation: + with ThreadPoolExecutor(max_workers=1) as executor: + future = executor.submit(get_settings_from_db_sync, registry, key) + return future.result() def get_cache_value(value): From 4b0acaf7a1279e1d2a33b379cafb9969bbec7a15 Mon Sep 17 00:00:00 2001 From: Hao Liu Date: Mon, 27 Mar 2023 17:16:29 -0400 Subject: [PATCH 42/52] Add back missing rsyslog.conf file --- tools/ansible/roles/dockerfile/templates/Dockerfile.j2 | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 b/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 index a74129905b..e7218ce80b 100644 --- a/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 +++ b/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 @@ -194,6 +194,7 @@ ENV _CONTAINERS_USERNS_CONFIGURED="" RUN mkdir -p /etc/containers/registries.conf.d/ && echo "unqualified-search-registries = []" >> /etc/containers/registries.conf.d/force-fully-qualified-images.conf && chmod 644 /etc/containers/registries.conf.d/force-fully-qualified-images.conf {% endif %} +ADD tools/ansible/roles/dockerfile/files/rsyslog.conf /var/lib/awx/rsyslog/rsyslog.conf ADD tools/ansible/roles/dockerfile/files/wait-for-migrations /usr/local/bin/wait-for-migrations ADD tools/ansible/roles/dockerfile/files/stop-supervisor /usr/local/bin/stop-supervisor From a1e39f71fcaca8461a1fe10c16f84b67badc2a71 Mon Sep 17 00:00:00 2001 From: Lila Date: Tue, 28 Mar 2023 16:42:07 -0400 Subject: [PATCH 43/52] Removed errant comments. --- .../roles/dockerfile/templates/supervisor_rsyslog.conf.j2 | 3 --- 1 file changed, 3 deletions(-) diff --git a/tools/ansible/roles/dockerfile/templates/supervisor_rsyslog.conf.j2 b/tools/ansible/roles/dockerfile/templates/supervisor_rsyslog.conf.j2 index 8f689e91a0..2f2842f01e 100644 --- a/tools/ansible/roles/dockerfile/templates/supervisor_rsyslog.conf.j2 +++ b/tools/ansible/roles/dockerfile/templates/supervisor_rsyslog.conf.j2 @@ -1,6 +1,3 @@ -; needs to launch rsyslog -; needs to launch rsyslog-configurer - [supervisord] nodaemon = True umask = 022 From 626746970900407b620acfacb3dd6d85981fa63d Mon Sep 17 00:00:00 2001 From: thedoubl3j Date: Wed, 29 Mar 2023 11:51:01 -0400 Subject: [PATCH 44/52] remove rsyslog_configurer from dispatcher as it is already being handled, add rsyslog_configurer to tower_processes --- awx/main/management/commands/run_dispatcher.py | 2 +- tools/docker-compose/supervisor.conf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/awx/main/management/commands/run_dispatcher.py b/awx/main/management/commands/run_dispatcher.py index 07cc4d87b9..934836e9d6 100644 --- a/awx/main/management/commands/run_dispatcher.py +++ b/awx/main/management/commands/run_dispatcher.py @@ -76,7 +76,7 @@ class Command(BaseCommand): consumer = None try: - queues = ['tower_broadcast_all', 'tower_settings_change', 'rsyslog_configurer', get_task_queuename()] + queues = ['tower_broadcast_all', 'tower_settings_change', get_task_queuename()] consumer = AWXConsumerPG('dispatcher', TaskWorker(), queues, AutoscalePool(min_workers=4)) consumer.run() except KeyboardInterrupt: diff --git a/tools/docker-compose/supervisor.conf b/tools/docker-compose/supervisor.conf index a843edf342..768715c62f 100644 --- a/tools/docker-compose/supervisor.conf +++ b/tools/docker-compose/supervisor.conf @@ -101,7 +101,7 @@ stdout_events_enabled = true stderr_events_enabled = true [group:tower-processes] -programs=awx-dispatcher,awx-receiver,awx-uwsgi,awx-daphne,awx-nginx,awx-wsrelay,awx-rsyslogd,awx-heartbeet +programs=awx-dispatcher,awx-receiver,awx-uwsgi,awx-daphne,awx-nginx,awx-wsrelay,awx-rsyslogd,awx-heartbeet, awx-rsyslog-configurer priority=5 [program:awx-autoreload] From c8c8ed1775560f78beb6dab2e57031247cb0d341 Mon Sep 17 00:00:00 2001 From: Hao Liu Date: Wed, 29 Mar 2023 16:57:04 -0400 Subject: [PATCH 45/52] Raise ValueError when no ready and enabled task instance --- awx/main/dispatch/__init__.py | 38 ++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/awx/main/dispatch/__init__.py b/awx/main/dispatch/__init__.py index 009438307a..2029f540c2 100644 --- a/awx/main/dispatch/__init__.py +++ b/awx/main/dispatch/__init__.py @@ -1,3 +1,4 @@ +import os import psycopg2 import select @@ -5,8 +6,6 @@ from contextlib import contextmanager from django.conf import settings from django.db import connection as pg_connection -import os - NOT_READY = ([], [], []) @@ -16,24 +15,27 @@ def get_local_queuename(): def get_task_queuename(): - if os.getenv('AWX_COMPONENT') == 'web': - from awx.main.models.ha import Instance - - return ( - Instance.objects.filter( - node_type__in=[Instance.Types.CONTROL, Instance.Types.HYBRID], - node_state=Instance.States.READY, - enabled=True, - ) - .only('hostname') - .order_by('?') - .first() - .hostname - ) - - else: + if os.getenv('AWX_COMPONENT') != 'web': return settings.CLUSTER_HOST_ID + from awx.main.models.ha import Instance + + random_task_instance = ( + Instance.objects.filter( + node_type__in=(Instance.Types.CONTROL, Instance.Types.HYBRID), + node_state=Instance.States.READY, + enabled=True, + ) + .only('hostname') + .order_by('?') + .first() + ) + + if random_task_instance is None: + raise ValueError('No task instances are READY and Enabled.') + + return random_task_instance.hostname + class PubSub(object): def __init__(self, conn): From ac2f2039f5082ef095cbfd4242282cc9f98621c3 Mon Sep 17 00:00:00 2001 From: Lila Date: Wed, 29 Mar 2023 15:05:58 -0400 Subject: [PATCH 46/52] Fix cache-clear for kube dev env Missing conditional for when running in kube development environment --- tools/ansible/roles/dockerfile/templates/supervisor.conf.j2 | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tools/ansible/roles/dockerfile/templates/supervisor.conf.j2 b/tools/ansible/roles/dockerfile/templates/supervisor.conf.j2 index c622d15645..1ae7dbeec5 100644 --- a/tools/ansible/roles/dockerfile/templates/supervisor.conf.j2 +++ b/tools/ansible/roles/dockerfile/templates/supervisor.conf.j2 @@ -75,7 +75,13 @@ stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 [program:awx-cache-clear] +{% if kube_dev | bool %} +command = make cache_clear +directory = /awx_devel +{% else %} command = awx-manage run_cache_clear +directory = /var/lib/awx +{% endif %} autorestart = true startsecs = 30 stopasgroup=true From 13b9a6c5e30b33dabb602ba575f1f24b869b7b32 Mon Sep 17 00:00:00 2001 From: jessicamack Date: Wed, 29 Mar 2023 16:20:54 -0400 Subject: [PATCH 47/52] Remove unused import Signed-off-by: jessicamack --- awx/main/utils/external_logging.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/awx/main/utils/external_logging.py b/awx/main/utils/external_logging.py index 635887ec14..75cc9d4971 100644 --- a/awx/main/utils/external_logging.py +++ b/awx/main/utils/external_logging.py @@ -7,7 +7,6 @@ from django.conf import settings from awx.main.utils.reload import supervisor_service_command from awx.main.dispatch.publish import task -from awx.main.dispatch import pg_bus_conn def construct_rsyslog_conf_template(settings=settings): @@ -127,8 +126,3 @@ def reconfigure_rsyslog(): f.write(tmpl + '\n') shutil.move(path, '/var/lib/awx/rsyslog/rsyslog.conf') supervisor_service_command(command='restart', service='awx-rsyslogd') - - -def send_pg_notify(channel: str, payload: str) -> None: - with pg_bus_conn() as conn: - conn.notify(channel, payload) From 0cc02d311f196bb6f01ebe19382ed99e300d7644 Mon Sep 17 00:00:00 2001 From: Hao Liu Date: Wed, 29 Mar 2023 19:14:12 -0400 Subject: [PATCH 48/52] Rename supervisor.conf.j2 to be descriptive supervisor.conf.j2 file is the template for supervisor.conf file for the web container rename to supervisor_web.conf make it more clear that it is use for the web container --- tools/ansible/roles/dockerfile/tasks/main.yml | 2 +- tools/ansible/roles/dockerfile/templates/Dockerfile.j2 | 2 +- .../templates/{supervisor.conf.j2 => supervisor_web.conf.j2} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename tools/ansible/roles/dockerfile/templates/{supervisor.conf.j2 => supervisor_web.conf.j2} (100%) diff --git a/tools/ansible/roles/dockerfile/tasks/main.yml b/tools/ansible/roles/dockerfile/tasks/main.yml index 7a3953e7ed..3b4b215b5c 100644 --- a/tools/ansible/roles/dockerfile/tasks/main.yml +++ b/tools/ansible/roles/dockerfile/tasks/main.yml @@ -9,7 +9,7 @@ src: "{{ item }}.j2" dest: "{{ dockerfile_dest }}/{{ template_dest }}/{{ item }}" with_items: - - "supervisor.conf" + - "supervisor_web.conf" - "supervisor_task.conf" - "supervisor_rsyslog.conf" diff --git a/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 b/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 index e7218ce80b..e63b2baa65 100644 --- a/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 +++ b/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 @@ -213,7 +213,7 @@ ADD tools/docker-compose/podman-containers.conf /var/lib/awx/.config/containers/ ADD tools/ansible/roles/dockerfile/files/launch_awx.sh /usr/bin/launch_awx.sh ADD tools/ansible/roles/dockerfile/files/launch_awx_task.sh /usr/bin/launch_awx_task.sh ADD tools/ansible/roles/dockerfile/files/launch_awx_rsyslog.sh /usr/bin/launch_awx_rsyslog.sh -ADD {{ template_dest }}/supervisor.conf /etc/supervisord.conf +ADD {{ template_dest }}/supervisor_web.conf /etc/supervisord_web.conf ADD {{ template_dest }}/supervisor_task.conf /etc/supervisord_task.conf ADD {{ template_dest }}/supervisor_rsyslog.conf /etc/supervisor_rsyslog.conf {% endif %} diff --git a/tools/ansible/roles/dockerfile/templates/supervisor.conf.j2 b/tools/ansible/roles/dockerfile/templates/supervisor_web.conf.j2 similarity index 100% rename from tools/ansible/roles/dockerfile/templates/supervisor.conf.j2 rename to tools/ansible/roles/dockerfile/templates/supervisor_web.conf.j2 From 6c0c1f68532eb876459c1cd693a9811ebe6bb5de Mon Sep 17 00:00:00 2001 From: Hao Liu Date: Wed, 29 Mar 2023 19:41:35 -0400 Subject: [PATCH 49/52] Rename launch script for launch awx web launch_awx.sh that this PR rename is also now only use for launching awx web container renaming to reflect it's purpose also remove the no longer needed creation of rsyslog conf as rsyslog is no longer in the web container Update Dockerfile.j2 --- .../roles/dockerfile/files/launch_awx.sh | 27 ------------------- .../roles/dockerfile/files/launch_awx_web.sh | 20 ++++++++++++++ .../roles/dockerfile/templates/Dockerfile.j2 | 3 +-- 3 files changed, 21 insertions(+), 29 deletions(-) delete mode 100755 tools/ansible/roles/dockerfile/files/launch_awx.sh create mode 100755 tools/ansible/roles/dockerfile/files/launch_awx_web.sh diff --git a/tools/ansible/roles/dockerfile/files/launch_awx.sh b/tools/ansible/roles/dockerfile/files/launch_awx.sh deleted file mode 100755 index edababb445..0000000000 --- a/tools/ansible/roles/dockerfile/files/launch_awx.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -if [ `id -u` -ge 500 ]; then - echo "awx:x:`id -u`:`id -g`:,,,:/var/lib/awx:/bin/bash" >> /tmp/passwd - cat /tmp/passwd > /etc/passwd - rm /tmp/passwd -fi - -if [ -n "${AWX_KUBE_DEVEL}" ]; then - pushd /awx_devel - make awx-link - popd - - export SDB_NOTIFY_HOST=$MY_POD_IP -fi - -set -e - -wait-for-migrations - -# This file will be re-written when the dispatcher calls reconfigure_rsyslog(), -# but it needs to exist when supervisor initially starts rsyslog to prevent the -# container from crashing. This was the most minimal config I could get working. -cat << EOF > /var/lib/awx/rsyslog/rsyslog.conf -action(type="omfile" file="/dev/null") -EOF - -exec supervisord -c /etc/supervisord.conf diff --git a/tools/ansible/roles/dockerfile/files/launch_awx_web.sh b/tools/ansible/roles/dockerfile/files/launch_awx_web.sh new file mode 100755 index 0000000000..d12750eead --- /dev/null +++ b/tools/ansible/roles/dockerfile/files/launch_awx_web.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +if [ `id -u` -ge 500 ]; then + echo "awx:x:`id -u`:`id -g`:,,,:/var/lib/awx:/bin/bash" >> /tmp/passwd + cat /tmp/passwd > /etc/passwd + rm /tmp/passwd +fi + +if [ -n "${AWX_KUBE_DEVEL}" ]; then + pushd /awx_devel + make awx-link + popd + + export SDB_NOTIFY_HOST=$MY_POD_IP +fi + +set -e + +wait-for-migrations + +exec supervisord -c /etc/supervisord_web.conf diff --git a/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 b/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 index e63b2baa65..999ce24056 100644 --- a/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 +++ b/tools/ansible/roles/dockerfile/templates/Dockerfile.j2 @@ -210,7 +210,7 @@ ADD tools/scripts/config-watcher /usr/bin/config-watcher ADD tools/docker-compose/containers.conf /etc/containers/containers.conf ADD tools/docker-compose/podman-containers.conf /var/lib/awx/.config/containers/containers.conf {% else %} -ADD tools/ansible/roles/dockerfile/files/launch_awx.sh /usr/bin/launch_awx.sh +ADD tools/ansible/roles/dockerfile/files/launch_awx_web.sh /usr/bin/launch_awx_web.sh ADD tools/ansible/roles/dockerfile/files/launch_awx_task.sh /usr/bin/launch_awx_task.sh ADD tools/ansible/roles/dockerfile/files/launch_awx_rsyslog.sh /usr/bin/launch_awx_rsyslog.sh ADD {{ template_dest }}/supervisor_web.conf /etc/supervisord_web.conf @@ -297,7 +297,6 @@ USER 1000 EXPOSE 8052 ENTRYPOINT ["dumb-init", "--"] -CMD /usr/bin/launch_awx.sh VOLUME /var/lib/nginx VOLUME /var/lib/awx/.local/share/containers {% endif %} From bc55bcf3a2aa3547cfa11aa6e3097b47b8abd0b0 Mon Sep 17 00:00:00 2001 From: Hao Liu Date: Wed, 29 Mar 2023 20:05:30 -0400 Subject: [PATCH 50/52] Rename SUPERVISOR_CONFIG_PATH previously this is used so that task running in the task container can reach into the web container to restart rsyslog now that the web container and task container are split there's no longer a way to do that so i renamed this env var to reference where it will now do which is pointing to the supervisor conf file of the current running container --- awx/main/constants.py | 2 +- awx/main/utils/reload.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/awx/main/constants.py b/awx/main/constants.py index 32d8a2184c..66666f875f 100644 --- a/awx/main/constants.py +++ b/awx/main/constants.py @@ -65,7 +65,7 @@ ENV_BLOCKLIST = frozenset( 'INVENTORY_HOSTVARS', 'AWX_HOST', 'PROJECT_REVISION', - 'SUPERVISOR_WEB_CONFIG_PATH', + 'SUPERVISOR_CONFIG_PATH', ) ) diff --git a/awx/main/utils/reload.py b/awx/main/utils/reload.py index a7c2a1ed99..29d0784f12 100644 --- a/awx/main/utils/reload.py +++ b/awx/main/utils/reload.py @@ -17,7 +17,7 @@ def supervisor_service_command(command, service='*', communicate=True): """ args = ['supervisorctl'] - supervisor_config_path = os.getenv('SUPERVISOR_WEB_CONFIG_PATH', None) + supervisor_config_path = os.getenv('SUPERVISOR_CONFIG_PATH', None) if supervisor_config_path: args.extend(['-c', supervisor_config_path]) From 17f5c4b8e6677a20f91732356809944e1337a7e5 Mon Sep 17 00:00:00 2001 From: Hao Liu Date: Wed, 29 Mar 2023 19:06:48 -0400 Subject: [PATCH 51/52] Modify dev make target name to clarify intention these make targets are for starting the different daemons within the kube/docker development environment updating the name to make it better reflect their intention also added comments above the make target to describe what they do note: these comments show up when run `make help` --- Makefile | 53 ++++++++++--------- .../templates/supervisor_rsyslog.conf.j2 | 2 +- .../templates/supervisor_task.conf.j2 | 2 +- .../templates/supervisor_web.conf.j2 | 2 +- tools/docker-compose/supervisor.conf | 8 +-- 5 files changed, 35 insertions(+), 32 deletions(-) diff --git a/Makefile b/Makefile index 97071b8f0b..2a7d9b9e03 100644 --- a/Makefile +++ b/Makefile @@ -70,12 +70,6 @@ I18N_FLAG_FILE = .i18n_built VERSION PYTHON_VERSION docker-compose-sources \ .git/hooks/pre-commit github_ci_setup github_ci_runner -cache-clear: - @if [ "$(VENV_BASE)" ]; then \ - . $(VENV_BASE)/awx/bin/activate; \ - fi; \ - $(PYTHON) manage.py run_cache_clear - clean-tmp: rm -rf tmp/ @@ -223,18 +217,6 @@ daphne: fi; \ daphne -b 127.0.0.1 -p 8051 awx.asgi:channel_layer -wsrelay: - @if [ "$(VENV_BASE)" ]; then \ - . $(VENV_BASE)/awx/bin/activate; \ - fi; \ - $(PYTHON) manage.py run_wsrelay - -heartbeet: - @if [ "$(VENV_BASE)" ]; then \ - . $(VENV_BASE)/awx/bin/activate; \ - fi; \ - $(PYTHON) manage.py run_heartbeet - ## Run to start the background task dispatcher for development. dispatcher: @if [ "$(VENV_BASE)" ]; then \ @@ -242,7 +224,6 @@ dispatcher: fi; \ $(PYTHON) manage.py run_dispatcher - ## Run to start the zeromq callback receiver receiver: @if [ "$(VENV_BASE)" ]; then \ @@ -250,12 +231,6 @@ receiver: fi; \ $(PYTHON) manage.py run_callback_receiver -rsyslog-configurer: - @if [ "$(VENV_BASE)" ]; then \ - . $(VENV_BASE)/awx/bin/activate; \ - fi; \ - $(PYTHON) manage.py run_rsyslog_configurer - nginx: nginx -g "daemon off;" @@ -265,6 +240,34 @@ jupyter: fi; \ $(MANAGEMENT_COMMAND) shell_plus --notebook +## Start the rsyslog configurer process in background in development environment. +run-rsyslog-configurer: + @if [ "$(VENV_BASE)" ]; then \ + . $(VENV_BASE)/awx/bin/activate; \ + fi; \ + $(PYTHON) manage.py run_rsyslog_configurer + +## Start cache_clear process in background in development environment. +run-cache-clear: + @if [ "$(VENV_BASE)" ]; then \ + . $(VENV_BASE)/awx/bin/activate; \ + fi; \ + $(PYTHON) manage.py run_cache_clear + +## Start the wsrelay process in background in development environment. +run-wsrelay: + @if [ "$(VENV_BASE)" ]; then \ + . $(VENV_BASE)/awx/bin/activate; \ + fi; \ + $(PYTHON) manage.py run_wsrelay + +## Start the heartbeat process in background in development environment. +run-heartbeet: + @if [ "$(VENV_BASE)" ]; then \ + . $(VENV_BASE)/awx/bin/activate; \ + fi; \ + $(PYTHON) manage.py run_heartbeet + reports: mkdir -p $@ diff --git a/tools/ansible/roles/dockerfile/templates/supervisor_rsyslog.conf.j2 b/tools/ansible/roles/dockerfile/templates/supervisor_rsyslog.conf.j2 index 2f2842f01e..f225b935c5 100644 --- a/tools/ansible/roles/dockerfile/templates/supervisor_rsyslog.conf.j2 +++ b/tools/ansible/roles/dockerfile/templates/supervisor_rsyslog.conf.j2 @@ -18,7 +18,7 @@ stderr_logfile_maxbytes=0 [program:awx-rsyslog-configurer] {% if kube_dev | bool %} -command = make rsyslog-configurer +command = make run-rsyslog-configurer directory = /awx_devel {% else %} command = awx-manage run_rsyslog_configurer diff --git a/tools/ansible/roles/dockerfile/templates/supervisor_task.conf.j2 b/tools/ansible/roles/dockerfile/templates/supervisor_task.conf.j2 index 8c3a46342e..6826611e8b 100644 --- a/tools/ansible/roles/dockerfile/templates/supervisor_task.conf.j2 +++ b/tools/ansible/roles/dockerfile/templates/supervisor_task.conf.j2 @@ -24,7 +24,7 @@ stderr_logfile_maxbytes=0 [program:wsrelay] {% if kube_dev | bool %} -command = make wsrelay +command = make run-wsrelay directory = /awx_devel {% else %} command = awx-manage run_wsrelay diff --git a/tools/ansible/roles/dockerfile/templates/supervisor_web.conf.j2 b/tools/ansible/roles/dockerfile/templates/supervisor_web.conf.j2 index 1ae7dbeec5..75b536cd3f 100644 --- a/tools/ansible/roles/dockerfile/templates/supervisor_web.conf.j2 +++ b/tools/ansible/roles/dockerfile/templates/supervisor_web.conf.j2 @@ -59,7 +59,7 @@ stderr_logfile_maxbytes=0 [program:heartbeet] {% if kube_dev | bool %} -command = make heartbeet +command = make run-heartbeet directory = /awx_devel {% else %} command = awx-manage run_heartbeet diff --git a/tools/docker-compose/supervisor.conf b/tools/docker-compose/supervisor.conf index 768715c62f..e8bb858910 100644 --- a/tools/docker-compose/supervisor.conf +++ b/tools/docker-compose/supervisor.conf @@ -20,7 +20,7 @@ stdout_events_enabled = true stderr_events_enabled = true [program:awx-wsrelay] -command = make wsrelay +command = make run-wsrelay autorestart = true autorestart = true stopasgroup=true @@ -29,7 +29,7 @@ stdout_events_enabled = true stderr_events_enabled = true [program:awx-heartbeet] -command = make heartbeet +command = make run-heartbeet autorestart = true autorestart = true stopasgroup=true @@ -38,7 +38,7 @@ stdout_events_enabled = true stderr_events_enabled = true [program:awx-rsyslog-configurer] -command = make rsyslog-configurer +command = make run-rsyslog-configurer autorestart = true stopasgroup=true killasgroup=true @@ -48,7 +48,7 @@ stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 [program:awx-cache-clear] -command = make cache-clear +command = make run-cache-clear autorestart = true stopasgroup=true killasgroup=true From 4f99a170bef0000cb15feaa84eed29e513f9b6e2 Mon Sep 17 00:00:00 2001 From: Rick Elrod Date: Wed, 29 Mar 2023 16:54:37 -0500 Subject: [PATCH 52/52] Nix websocket docs for now Signed-off-by: Rick Elrod --- docs/websockets.md | 71 +--------------------------------------------- 1 file changed, 1 insertion(+), 70 deletions(-) diff --git a/docs/websockets.md b/docs/websockets.md index 84e1226594..90381f0b12 100644 --- a/docs/websockets.md +++ b/docs/websockets.md @@ -6,73 +6,4 @@ Our channels/websocket implementation handles the communication between AWX API AWX enlists the help of the `django-channels` library to create our communications layer. `django-channels` provides us with per-client messaging integration in our application by implementing the Asynchronous Server Gateway Interface (ASGI). -To communicate between our different services we use websockets. Every AWX node is fully connected via a special websocket endpoint that forwards any local websocket data to all other nodes. Local websockets are backed by Redis, the channels2 default service. - -Inside AWX we use the `emit_channel_notification` function which places messages onto the queue. The messages are given an explicit event group and event type which we later use in our wire protocol to control message delivery to the client. - -### Relay Backplane - -Previously, AWX leveraged RabbitMQ to deliver Ansible events that emanated from one AWX node to all other AWX nodes so that any client listening and subscribed to the Websockets could get events from any running playbook. We are since moved off of RabbitMQ and onto a per-node local Redis instance. To maintain the requirement that any Websocket connection can receive events from any playbook running on any AWX node we still need to deliver every event to every AWX node. AWX does this via a fully connected Websocket backplane. - -#### Relay Backplane Token - -AWX node(s) connect to every other node via the Websocket backplane. The backplane websockets initiate from the `wsrelay` process and connect to other nodes via the same nginx process that serves webpage websocket connections and marshalls incoming web/API requests. If you have configured AWX to run with an ssl terminated connection in front of nginx then you likely will have nginx configured to handle http traffic and thus the websocket connection will flow unencrypted over http. If you have nginx configured with ssl enabled, then the websocket traffic will flow encrypted. - -Authentication is accomplished via a shared secret that is generated and set at playbook install time. The shared secret is used to derive a payload that is exchanged via the http(s) header `secret`. The shared secret payload consists of a a `secret`, containing the shared secret, and a `nonce` which is used to mitigate replay attack windows. - -Note that the nonce timestamp is considered valid if it is within `300` second threshold. This is to allow for machine clock skews. -``` -{ - "secret": settings.BROADCAST_WEBSOCKET_SECRET, - "nonce": time.now() -} -``` - -The payload is encrypted using `HMAC-SHA256` with `settings.BROADCAST_WEBSOCKET_SECRET` as the key. The final payload that is sent, including the http header, is of the form: `secret: nonce_plaintext:HMAC_SHA256({"secret": settings.BROADCAST_WEBSOCKET_SECRET, "nonce": nonce_plaintext})`. - -Upon receiving the payload, AWX decrypts the `secret` header using the known shared secret and ensures the `secret` value of the decrypted payload matches the known shared secret, `settings.BROADCAST_WEBSOCKET_SECRET`. If it does not match, the connection is closed. If it does match, the `nonce` is compared to the current time. If the nonce is off by more than `300` seconds, the connection is closed. If both tests pass, the connection is accepted. - -## Protocol - -You can connect to the AWX channels implementation using any standard websocket library by pointing it to `/websocket/`. You must -provide a valid Auth Token in the request URL. - -Once you've connected, you are not subscribed to any event groups. You subscribe by sending a `json` request that looks like the following: - - 'groups': { - 'jobs': ['status_changed', 'summary'], - 'schedules': ['changed'], - 'ad_hoc_command_events': [ids...], - 'job_events': [ids...], - 'workflow_events': [ids...], - 'project_update_events': [ids...], - 'inventory_update_events': [ids...], - 'system_job_events': [ids...], - 'control': ['limit_reached_'], - } - -These map to the event group and event type that the user is interested in. Sending in a new groups dictionary will clear all previously-subscribed groups before subscribing to the newly requested ones. This is intentional, and makes the single page navigation much easier since users only need to care about current subscriptions. - -## Deployment - -This section will specifically discuss deployment in the context of websockets and the path those requests take through the system. - -**Note:** The deployment of AWX changes slightly with the introduction of `django-channels` and websockets. There are some minor differences between production and development deployments that will be pointed out in this document, but the actual services that run the code and handle the requests are identical between the two environments. - -### Services -| Name | Details | -|:-----------:|:-----------------------------------------------------------------------------------------------------------:| -| `nginx` | listens on ports 80/443, handles HTTPS proxying, serves static assets, routes requests for `daphne` and `uwsgi` | -| `uwsgi` | listens on port 8050, handles API requests | -| `daphne` | listens on port 8051, handles websocket requests | -| `wsrelay` | no listening port, forwards all group messages to all cluster nodes | -| `supervisord` | (production-only) handles the process management of all the services except `nginx` | - -When a request comes in to `nginx` and has the `Upgrade` header and is for the path `/websocket`, then `nginx` knows that it should be routing that request to our `daphne` service. - -`daphne` handles websocket connections proxied by nginx. - -`wsrelay` fully connects all cluster nodes via the `/websocket/broadcast/` endpoint to every other cluster nodes. Sends a copy of all group websocket messages to all other cluster nodes (i.e. job event type messages). - -### Development - - `nginx` listens on 8013/8043 instead of 80/443 +**TODO: The information previously contained within this document has become outdated. This document will be rewritten in the near future.**