From 0e0a1e70b7ed0eb8d552d2c27dc9d1a43aa33233 Mon Sep 17 00:00:00 2001 From: Lluis Gifre <lluis.gifre@cttc.es> Date: Tue, 8 Mar 2022 13:43:40 +0000 Subject: [PATCH] Extended WebUI, OpenConfig Driver support and functional test for OFC'22 --- configure_dashboards.sh | 6 +- open_dashboard.sh | 4 +- open_webui.sh | 23 ++- scripts/run_tests_locally-compute.sh | 28 +++ scripts/run_tests_locally-device.sh | 28 +++ scripts/run_tests_locally-service.sh | 28 +++ .../nbi_plugins/ietf_l2vpn/Constants.py | 15 +- .../ietf_l2vpn/L2VPN_SiteNetworkAccesses.py | 79 ++++++-- src/compute/tests/Constants.py | 18 +- src/device/service/MonitoringLoops.py | 6 +- src/device/service/driver_api/_Driver.py | 1 + .../drivers/openconfig/OpenConfigDriver.py | 137 ++++++++++---- .../drivers/openconfig/RetryDecorator.py | 46 +++++ .../drivers/openconfig/templates/EndPoints.py | 2 +- .../openconfig/templates/Interfaces.py | 6 +- .../drivers/openconfig/templates/Namespace.py | 8 + .../openconfig/templates/NetworkInstances.py | 81 +++++++- .../openconfig/templates/RoutingPolicy.py | 85 +++++++++ .../drivers/openconfig/templates/__init__.py | 7 +- .../templates/interface/edit_config.xml | 8 +- .../network_instance/edit_config.xml | 2 +- .../inter_instance_policies/edit_config.xml | 15 ++ .../protocols/edit_config.xml | 27 +++ .../table_connections/edit_config.xml | 19 +- .../bgp_defined_set/edit_config.xml | 14 ++ .../templates/routing_policy/get.xml | 8 + .../policy_definition/edit_config.xml | 12 ++ .../statement/edit_config.xml | 30 +++ src/device/tests/test_unitary.py | 22 ++- src/monitoring/service/__main__.py | 4 +- .../L3NMEmulatedServiceHandler.py | 173 ++++++++++++++++-- .../L3NMOpenConfigServiceHandler.py | 173 ++++++++++++++++-- src/service/tests/ServiceHandler_L3NM_EMU.py | 14 +- src/service/tests/ServiceHandler_L3NM_OC.py | 19 +- src/start_webui_dev_mode.sh | 6 +- src/tests/ofc22/.gitignore | 2 + src/tests/ofc22/descriptors_emulated.json | 108 +++++++++++ src/tests/ofc22/redeploy_webui.sh | 59 ++++++ src/tests/ofc22/run_test_01_bootstrap.sh | 4 +- src/tests/ofc22/run_test_02_create_service.sh | 3 +- src/tests/ofc22/run_test_03_delete_service.sh | 3 +- src/tests/ofc22/run_test_04_cleanup.sh | 3 +- src/tests/ofc22/tests/BuildDescriptors.py | 35 ++++ src/tests/ofc22/tests/LoadDescriptors.py | 40 ++++ src/tests/ofc22/tests/Objects.py | 36 ++-- src/webui/Config.py | 1 + src/webui/Dockerfile | 2 +- src/webui/grafana_dashboard.json | 34 ++-- src/webui/service/__init__.py | 13 +- src/webui/service/__main__.py | 7 +- src/webui/service/device/routes.py | 30 ++- src/webui/service/link/__init__.py | 0 src/webui/service/link/routes.py | 37 ++++ src/webui/service/main/forms.py | 23 ++- src/webui/service/main/routes.py | 90 ++++++++- src/webui/service/service/routes.py | 36 +++- src/webui/service/static/partners.png | Bin 76488 -> 200855 bytes src/webui/service/static/topology.js | 148 +++++++++++++++ .../topology_icons/Acknowledgements.txt | 12 ++ .../service/static/topology_icons/cloud.png | Bin 0 -> 8988 bytes .../emu-optical-line-system.png | Bin 0 -> 12869 bytes .../topology_icons/emu-packet-router.png | Bin 0 -> 14197 bytes .../topology_icons/emu-packet-switch.png | Bin 0 -> 11859 bytes .../topology_icons/optical-line-system.png | Bin 0 -> 13777 bytes .../static/topology_icons/packet-router.png | Bin 0 -> 16162 bytes .../static/topology_icons/packet-switch.png | Bin 0 -> 9777 bytes src/webui/service/templates/base.html | 52 ++++-- src/webui/service/templates/device/add.html | 13 +- .../service/templates/device/detail.html | 46 +++-- src/webui/service/templates/device/home.html | 8 +- src/webui/service/templates/link/home.html | 96 ++++++++++ src/webui/service/templates/main/about.html | 2 +- src/webui/service/templates/main/home.html | 69 +++++-- .../service/templates/service/detail.html | 99 ++++++++++ src/webui/service/templates/service/home.html | 24 +-- 75 files changed, 1994 insertions(+), 295 deletions(-) create mode 100755 scripts/run_tests_locally-compute.sh create mode 100755 scripts/run_tests_locally-device.sh create mode 100755 scripts/run_tests_locally-service.sh create mode 100644 src/device/service/drivers/openconfig/RetryDecorator.py create mode 100644 src/device/service/drivers/openconfig/templates/RoutingPolicy.py create mode 100644 src/device/service/drivers/openconfig/templates/network_instance/inter_instance_policies/edit_config.xml create mode 100644 src/device/service/drivers/openconfig/templates/network_instance/protocols/edit_config.xml create mode 100644 src/device/service/drivers/openconfig/templates/routing_policy/bgp_defined_set/edit_config.xml create mode 100644 src/device/service/drivers/openconfig/templates/routing_policy/get.xml create mode 100644 src/device/service/drivers/openconfig/templates/routing_policy/policy_definition/edit_config.xml create mode 100644 src/device/service/drivers/openconfig/templates/routing_policy/policy_definition/statement/edit_config.xml create mode 100644 src/tests/ofc22/.gitignore create mode 100644 src/tests/ofc22/descriptors_emulated.json create mode 100755 src/tests/ofc22/redeploy_webui.sh create mode 100644 src/tests/ofc22/tests/BuildDescriptors.py create mode 100644 src/tests/ofc22/tests/LoadDescriptors.py create mode 100644 src/webui/service/link/__init__.py create mode 100644 src/webui/service/link/routes.py create mode 100644 src/webui/service/static/topology.js create mode 100644 src/webui/service/static/topology_icons/Acknowledgements.txt create mode 100644 src/webui/service/static/topology_icons/cloud.png create mode 100644 src/webui/service/static/topology_icons/emu-optical-line-system.png create mode 100644 src/webui/service/static/topology_icons/emu-packet-router.png create mode 100644 src/webui/service/static/topology_icons/emu-packet-switch.png create mode 100644 src/webui/service/static/topology_icons/optical-line-system.png create mode 100644 src/webui/service/static/topology_icons/packet-router.png create mode 100644 src/webui/service/static/topology_icons/packet-switch.png create mode 100644 src/webui/service/templates/link/home.html create mode 100644 src/webui/service/templates/service/detail.html diff --git a/configure_dashboards.sh b/configure_dashboards.sh index e05d53b2a..4a32d76de 100755 --- a/configure_dashboards.sh +++ b/configure_dashboards.sh @@ -22,11 +22,15 @@ INFLUXDB_USER=$(kubectl --namespace $K8S_NAMESPACE get secrets influxdb-secrets INFLUXDB_PASSWORD=$(kubectl --namespace $K8S_NAMESPACE get secrets influxdb-secrets -o jsonpath='{.data.INFLUXDB_ADMIN_PASSWORD}' | base64 --decode) INFLUXDB_DATABASE=$(kubectl --namespace $K8S_NAMESPACE get secrets influxdb-secrets -o jsonpath='{.data.INFLUXDB_DB}' | base64 --decode) -GRAFANA_HOSTNAME=$(kubectl get node $K8S_HOSTNAME -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}') +# GRAFANA_HOSTNAME=$(kubectl get node $K8S_HOSTNAME -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}') +# GRAFANA_HOSTNAME=`kubectl get service/webuiservice-public -n ${K8S_NAMESPACE} -o jsonpath='{.spec.clusterIP}'` +GRAFANA_HOSTNAME=`kubectl get nodes --selector=node-role.kubernetes.io/master -o jsonpath='{$.items[*].status.addresses[?(@.type=="InternalIP")].address}'` GRAFANA_PORT=$(kubectl get service webuiservice-public --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==3000)].nodePort}') +#GRAFANA_PORT=`kubectl get service/webuiservice-public -n ${K8S_NAMESPACE} -o jsonpath='{.spec.ports[1].nodePort}'` GRAFANA_USERNAME="admin" GRAFANA_PASSWORD=${GRAFANA_PASSWORD:-"admin123+"} GRAFANA_URL="http://${GRAFANA_USERNAME}:${GRAFANA_PASSWORD}@${GRAFANA_HOSTNAME}:${GRAFANA_PORT}" +echo "Connecting to grafana at URL: ${GRAFANA_URL}..." # Configure Grafana Admin Password # Ref: https://grafana.com/docs/grafana/latest/http_api/user/#change-password diff --git a/open_dashboard.sh b/open_dashboard.sh index 6f87b207c..8291a22c7 100755 --- a/open_dashboard.sh +++ b/open_dashboard.sh @@ -18,8 +18,8 @@ K8S_NAMESPACE=${K8S_NAMESPACE:-'tf-dev'} -GRAFANA_IP=`kubectl get service/webuiservice -n ${K8S_NAMESPACE} -o jsonpath='{.spec.clusterIP}'` -GRAFANA_PORT=`kubectl get service/webuiservice -n ${K8S_NAMESPACE} -o jsonpath='{.spec.ports[1].port}'` +GRAFANA_IP=$(kubectl get service/webuiservice -n ${K8S_NAMESPACE} -o jsonpath='{.spec.clusterIP}') +GRAFANA_PORT=$(kubectl get service webuiservice-public --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==3000)].nodePort}') URL=http://${GRAFANA_IP}:${GRAFANA_PORT} echo Opening Dashboard on URL ${URL} diff --git a/open_webui.sh b/open_webui.sh index bcb45ac17..e4dfdb709 100755 --- a/open_webui.sh +++ b/open_webui.sh @@ -14,13 +14,24 @@ # this script opens the webui -WEBUI_PROTO=`kubectl get service/webuiservice -n tf-dev -o jsonpath='{.spec.ports[0].name}'` -WEBUI_IP=`kubectl get service/webuiservice -n tf-dev -o jsonpath='{.spec.clusterIP}'` -WEBUI_PORT=`kubectl get service/webuiservice -n tf-dev -o jsonpath='{.spec.ports[0].port}'` -URL=${WEBUI_PROTO}://${WEBUI_IP}:${WEBUI_PORT} +K8S_NAMESPACE=${K8S_NAMESPACE:-'tf-dev'} -echo Opening web UI on URL ${URL} +WEBUI_SERVICE_NAME="webuiservice-public" +WEBUI_PROTO=`kubectl get service ${WEBUI_SERVICE_NAME} -n ${K8S_NAMESPACE} -o jsonpath='{.spec.ports[0].name}'` +WEBUI_IP=`kubectl get service ${WEBUI_SERVICE_NAME} -n ${K8S_NAMESPACE} -o jsonpath='{.spec.clusterIP}'` +# WEBUI_PORT=$(kubectl get service ${WEBUI_SERVICE_NAME} --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==8004)].nodePort}') +WEBUI_PORT=8004 +# GRAFANA_PORT=$(kubectl get service ${WEBUI_SERVICE_NAME} --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==3000)].nodePort}') +GRAFANA_PORT=3000 +# Open WebUI +URL=${WEBUI_PROTO}://${WEBUI_IP}:${WEBUI_PORT} +echo Opening web UI on URL ${URL} # curl -kL ${URL} +python3 -m webbrowser ${URL} -python3 -m webbrowser ${URL} \ No newline at end of file +# Open Dashboard +URL=${WEBUI_PROTO}://${WEBUI_IP}:${GRAFANA_PORT} +echo Opening Dashboard on URL ${URL} +# curl -kL ${URL} +python3 -m webbrowser ${URL} diff --git a/scripts/run_tests_locally-compute.sh b/scripts/run_tests_locally-compute.sh new file mode 100755 index 000000000..48ce6e232 --- /dev/null +++ b/scripts/run_tests_locally-compute.sh @@ -0,0 +1,28 @@ +#!/bin/bash +# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +PROJECTDIR=`pwd` + +cd $PROJECTDIR/src +RCFILE=$PROJECTDIR/coverage/.coveragerc + +# Run unitary tests and analyze coverage of code at same time + +# Useful flags for pytest: +#-o log_cli=true -o log_file=service.log -o log_file_level=DEBUG + +coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ + compute/tests/test_unitary.py diff --git a/scripts/run_tests_locally-device.sh b/scripts/run_tests_locally-device.sh new file mode 100755 index 000000000..ba6c0b6a5 --- /dev/null +++ b/scripts/run_tests_locally-device.sh @@ -0,0 +1,28 @@ +#!/bin/bash +# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +PROJECTDIR=`pwd` + +cd $PROJECTDIR/src +RCFILE=$PROJECTDIR/coverage/.coveragerc + +# Run unitary tests and analyze coverage of code at same time + +# Useful flags for pytest: +#-o log_cli=true -o log_file=device.log -o log_file_level=DEBUG + +coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ + device/tests/test_unitary.py diff --git a/scripts/run_tests_locally-service.sh b/scripts/run_tests_locally-service.sh new file mode 100755 index 000000000..853eb9767 --- /dev/null +++ b/scripts/run_tests_locally-service.sh @@ -0,0 +1,28 @@ +#!/bin/bash +# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +PROJECTDIR=`pwd` + +cd $PROJECTDIR/src +RCFILE=$PROJECTDIR/coverage/.coveragerc + +# Run unitary tests and analyze coverage of code at same time + +# Useful flags for pytest: +#-o log_cli=true -o log_file=service.log -o log_file_level=DEBUG + +coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ + service/tests/test_unitary.py diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py index 838dd664c..9420517e1 100644 --- a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py +++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py @@ -12,6 +12,17 @@ # See the License for the specific language governing permissions and # limitations under the License. -DEFAULT_MTU = 1512 +DEFAULT_MTU = 1512 DEFAULT_ADDRESS_FAMILIES = ['IPV4'] -DEFAULT_SUB_INTERFACE_INDEX = 0 +DEFAULT_BGP_AS = 65000 +DEFAULT_BGP_ROUTE_TARGET = '{:d}:{:d}'.format(DEFAULT_BGP_AS, 333) + +# Bearer mappings: +# device_uuid:endpoint_uuid => ( +# device_uuid, endpoint_uuid, router_id, route_distinguisher, sub_if_index, address_ip, address_prefix) +BEARER_MAPPINGS = { + 'R1-INF:13/2/1': ('R1-INF', '13/2/1', '10.10.10.1', '65000:100', 400, '3.3.2.1', 24), + 'R2-EMU:13/2/1': ('R2-EMU', '13/2/1', '12.12.12.1', '65000:120', 450, '3.4.2.1', 24), + 'R3-INF:13/2/1': ('R3-INF', '13/2/1', '20.20.20.1', '65000:200', 500, '3.3.1.1', 24), + 'R4-EMU:13/2/1': ('R4-EMU', '13/2/1', '22.22.22.1', '65000:220', 550, '3.4.1.1', 24), +} diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py index 5fa0fa88e..6811dadac 100644 --- a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py +++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py @@ -29,7 +29,7 @@ from .schemas.site_network_access import SCHEMA_SITE_NETWORK_ACCESS from .tools.Authentication import HTTP_AUTH from .tools.HttpStatusCodes import HTTP_NOCONTENT, HTTP_SERVERERROR from .tools.Validator import validate_message -from .Constants import DEFAULT_ADDRESS_FAMILIES, DEFAULT_MTU, DEFAULT_SUB_INTERFACE_INDEX +from .Constants import BEARER_MAPPINGS, DEFAULT_ADDRESS_FAMILIES, DEFAULT_BGP_AS, DEFAULT_BGP_ROUTE_TARGET, DEFAULT_MTU LOGGER = logging.getLogger(__name__) @@ -38,10 +38,11 @@ def process_site_network_access(context_client : ContextClient, site_network_acc cvlan_id = site_network_access['connection']['tagged-interface']['dot1q-vlan-tagged']['cvlan-id'] bearer_reference = site_network_access['bearer']['bearer-reference'] - # Assume bearer_reference = '<device_uuid>:<endpoint_uuid>:<router_id>' - # Assume route_distinguisher = 0:<cvlan_id> - device_uuid,endpoint_uuid,router_id = bearer_reference.split(':') - route_distinguisher = '0:{:d}'.format(cvlan_id) + mapping = BEARER_MAPPINGS.get(bearer_reference) + if mapping is None: + msg = 'Specified Bearer({:s}) is not configured.' + raise Exception(msg.format(str(bearer_reference))) + device_uuid,endpoint_uuid,router_id,route_distinguisher,sub_if_index,address_ip,address_prefix = mapping # pylint: disable=no-member service_id = ServiceId() @@ -63,15 +64,9 @@ def process_site_network_access(context_client : ContextClient, site_network_acc endpoint_id.endpoint_uuid.uuid = endpoint_uuid for config_rule in service.service_config.config_rules: # pylint: disable=no-member - if config_rule.resource_key != 'settings': continue + if config_rule.resource_key != '/settings': continue json_settings = json.loads(config_rule.resource_value) - if 'route_distinguisher' not in json_settings: # missing, add it - json_settings['route_distinguisher'] = route_distinguisher - elif json_settings['route_distinguisher'] != route_distinguisher: # differs, raise exception - msg = 'Specified RouteDistinguisher({:s}) differs from Service RouteDistinguisher({:s})' - raise Exception(msg.format(str(json_settings['route_distinguisher']), str(route_distinguisher))) - if 'mtu' not in json_settings: # missing, add it json_settings['mtu'] = DEFAULT_MTU elif json_settings['mtu'] != DEFAULT_MTU: # differs, raise exception @@ -84,20 +79,33 @@ def process_site_network_access(context_client : ContextClient, site_network_acc msg = 'Specified AddressFamilies({:s}) differs from Service AddressFamilies({:s})' raise Exception(msg.format(str(json_settings['address_families']), str(DEFAULT_ADDRESS_FAMILIES))) + if 'bgp_as' not in json_settings: # missing, add it + json_settings['bgp_as'] = DEFAULT_BGP_AS + elif json_settings['bgp_as'] != DEFAULT_BGP_AS: # differs, raise exception + msg = 'Specified BgpAs({:s}) differs from Service BgpAs({:s})' + raise Exception(msg.format(str(json_settings['bgp_as']), str(DEFAULT_BGP_AS))) + + if 'bgp_route_target' not in json_settings: # missing, add it + json_settings['bgp_route_target'] = DEFAULT_BGP_ROUTE_TARGET + elif json_settings['bgp_route_target'] != DEFAULT_BGP_ROUTE_TARGET: # differs, raise exception + msg = 'Specified BgpRouteTarget({:s}) differs from Service BgpRouteTarget({:s})' + raise Exception(msg.format(str(json_settings['bgp_route_target']), str(DEFAULT_BGP_ROUTE_TARGET))) + config_rule.resource_value = json.dumps(json_settings, sort_keys=True) break else: # not found, add it config_rule = service.service_config.config_rules.add() # pylint: disable=no-member config_rule.action = ConfigActionEnum.CONFIGACTION_SET - config_rule.resource_key = 'settings' + config_rule.resource_key = '/settings' config_rule.resource_value = json.dumps({ - 'route_distinguisher': route_distinguisher, - 'mtu': DEFAULT_MTU, + 'mtu' : DEFAULT_MTU, 'address_families': DEFAULT_ADDRESS_FAMILIES, + 'bgp_as' : DEFAULT_BGP_AS, + 'bgp_route_target': DEFAULT_BGP_ROUTE_TARGET, }, sort_keys=True) - endpoint_settings_key = 'device[{:s}]/endpoint[{:s}]/settings'.format(device_uuid, endpoint_uuid) + endpoint_settings_key = '/device[{:s}]/endpoint[{:s}]/settings'.format(device_uuid, endpoint_uuid) for config_rule in service.service_config.config_rules: # pylint: disable=no-member if config_rule.resource_key != endpoint_settings_key: continue json_settings = json.loads(config_rule.resource_value) @@ -108,12 +116,39 @@ def process_site_network_access(context_client : ContextClient, site_network_acc msg = 'Specified RouterId({:s}) differs from Service RouterId({:s})' raise Exception(msg.format(str(json_settings['router_id']), str(router_id))) + if 'route_distinguisher' not in json_settings: # missing, add it + json_settings['route_distinguisher'] = route_distinguisher + elif json_settings['route_distinguisher'] != route_distinguisher: # differs, raise exception + msg = 'Specified RouteDistinguisher({:s}) differs from Service RouteDistinguisher({:s})' + raise Exception(msg.format(str(json_settings['route_distinguisher']), str(route_distinguisher))) + if 'sub_interface_index' not in json_settings: # missing, add it - json_settings['sub_interface_index'] = DEFAULT_SUB_INTERFACE_INDEX - elif json_settings['sub_interface_index'] != DEFAULT_SUB_INTERFACE_INDEX: # differs, raise exception + json_settings['sub_interface_index'] = sub_if_index + elif json_settings['sub_interface_index'] != sub_if_index: # differs, raise exception msg = 'Specified SubInterfaceIndex({:s}) differs from Service SubInterfaceIndex({:s})' raise Exception(msg.format( - str(json_settings['sub_interface_index']), str(DEFAULT_SUB_INTERFACE_INDEX))) + str(json_settings['sub_interface_index']), str(sub_if_index))) + + if 'vlan_id' not in json_settings: # missing, add it + json_settings['vlan_id'] = cvlan_id + elif json_settings['vlan_id'] != cvlan_id: # differs, raise exception + msg = 'Specified VLANId({:s}) differs from Service VLANId({:s})' + raise Exception(msg.format( + str(json_settings['vlan_id']), str(cvlan_id))) + + if 'address_ip' not in json_settings: # missing, add it + json_settings['address_ip'] = address_ip + elif json_settings['address_ip'] != address_ip: # differs, raise exception + msg = 'Specified AddressIP({:s}) differs from Service AddressIP({:s})' + raise Exception(msg.format( + str(json_settings['address_ip']), str(address_ip))) + + if 'address_prefix' not in json_settings: # missing, add it + json_settings['address_prefix'] = address_prefix + elif json_settings['address_prefix'] != address_prefix: # differs, raise exception + msg = 'Specified AddressPrefix({:s}) differs from Service AddressPrefix({:s})' + raise Exception(msg.format( + str(json_settings['address_prefix']), str(address_prefix))) config_rule.resource_value = json.dumps(json_settings, sort_keys=True) break @@ -124,7 +159,11 @@ def process_site_network_access(context_client : ContextClient, site_network_acc config_rule.resource_key = endpoint_settings_key config_rule.resource_value = json.dumps({ 'router_id': router_id, - 'sub_interface_index': DEFAULT_SUB_INTERFACE_INDEX, + 'route_distinguisher': route_distinguisher, + 'sub_interface_index': sub_if_index, + 'vlan_id': cvlan_id, + 'address_ip': address_ip, + 'address_prefix': address_prefix, }, sort_keys=True) return service diff --git a/src/compute/tests/Constants.py b/src/compute/tests/Constants.py index ebe36eabc..8d4e2ba8f 100644 --- a/src/compute/tests/Constants.py +++ b/src/compute/tests/Constants.py @@ -22,7 +22,7 @@ WIM_MAPPING = [ #'device_interface_id' : ??, # pop_switch_port 'service_endpoint_id' : 'ep-1', # wan_service_endpoint_id 'service_mapping_info': { # wan_service_mapping_info, other extra info - 'bearer': {'bearer-reference': 'dev-1:ep-1:10.0.0.1'}, + 'bearer': {'bearer-reference': 'R1-INF:13/2/1'}, 'site-id': '1', }, #'switch_dpid' : ??, # wan_switch_dpid @@ -34,7 +34,7 @@ WIM_MAPPING = [ #'device_interface_id' : ??, # pop_switch_port 'service_endpoint_id' : 'ep-2', # wan_service_endpoint_id 'service_mapping_info': { # wan_service_mapping_info, other extra info - 'bearer': {'bearer-reference': 'dev-2:ep-2:10.0.0.2'}, + 'bearer': {'bearer-reference': 'R2-EMU:13/2/1'}, 'site-id': '2', }, #'switch_dpid' : ??, # wan_switch_dpid @@ -46,13 +46,25 @@ WIM_MAPPING = [ #'device_interface_id' : ??, # pop_switch_port 'service_endpoint_id' : 'ep-3', # wan_service_endpoint_id 'service_mapping_info': { # wan_service_mapping_info, other extra info - 'bearer': {'bearer-reference': 'dev-3:ep-3:10.0.0.3'}, + 'bearer': {'bearer-reference': 'R3-INF:13/2/1'}, 'site-id': '3', }, #'switch_dpid' : ??, # wan_switch_dpid #'switch_port' : ??, # wan_switch_port #'datacenter_id' : ??, # vim_account }, + { + 'device-id' : 'dev-4', # pop_switch_dpid + #'device_interface_id' : ??, # pop_switch_port + 'service_endpoint_id' : 'ep-4', # wan_service_endpoint_id + 'service_mapping_info': { # wan_service_mapping_info, other extra info + 'bearer': {'bearer-reference': 'R4-EMU:13/2/1'}, + 'site-id': '4', + }, + #'switch_dpid' : ??, # wan_switch_dpid + #'switch_port' : ??, # wan_switch_port + #'datacenter_id' : ??, # vim_account + }, ] SERVICE_TYPE = 'ELINE' diff --git a/src/device/service/MonitoringLoops.py b/src/device/service/MonitoringLoops.py index 7cacabf23..e5b671f7f 100644 --- a/src/device/service/MonitoringLoops.py +++ b/src/device/service/MonitoringLoops.py @@ -126,9 +126,11 @@ class MonitoringLoops: LOGGER.warning('Kpi({:s}) not found'.format(str_kpi_key)) continue + # FIXME: uint32 used for intVal results in out of range issues. Temporarily changed to float + # extend the 'kpi_value' to support long integers (uint64 / int64 / ...) if isinstance(value, int): - kpi_value_field_name = 'intVal' - kpi_value_field_cast = int + kpi_value_field_name = 'floatVal' # 'intVal' + kpi_value_field_cast = float # int elif isinstance(value, float): kpi_value_field_name = 'floatVal' kpi_value_field_cast = float diff --git a/src/device/service/driver_api/_Driver.py b/src/device/service/driver_api/_Driver.py index 83462bb39..f30165a17 100644 --- a/src/device/service/driver_api/_Driver.py +++ b/src/device/service/driver_api/_Driver.py @@ -20,6 +20,7 @@ from typing import Any, Iterator, List, Optional, Tuple, Union RESOURCE_ENDPOINTS = '__endpoints__' RESOURCE_INTERFACES = '__interfaces__' RESOURCE_NETWORK_INSTANCES = '__network_instances__' +RESOURCE_ROUTING_POLICIES = '__routing_policies__' class _Driver: def __init__(self, address : str, port : int, **settings) -> None: diff --git a/src/device/service/drivers/openconfig/OpenConfigDriver.py b/src/device/service/drivers/openconfig/OpenConfigDriver.py index 861186065..7f582c488 100644 --- a/src/device/service/drivers/openconfig/OpenConfigDriver.py +++ b/src/device/service/drivers/openconfig/OpenConfigDriver.py @@ -12,22 +12,24 @@ # See the License for the specific language governing permissions and # limitations under the License. -import anytree, logging, pytz, queue, re, threading -import lxml.etree as ET +import anytree, copy, logging, pytz, queue, re, threading +#import lxml.etree as ET from datetime import datetime, timedelta from typing import Any, Dict, Iterator, List, Optional, Tuple, Union from apscheduler.executors.pool import ThreadPoolExecutor from apscheduler.job import Job from apscheduler.jobstores.memory import MemoryJobStore from apscheduler.schedulers.background import BackgroundScheduler -from netconf_client.connect import connect_ssh +from netconf_client.connect import connect_ssh, Session from netconf_client.ncclient import Manager +from common.tools.client.RetryDecorator import delay_exponential from common.type_checkers.Checkers import chk_length, chk_string, chk_type, chk_float from device.service.driver_api.Exceptions import UnsupportedResourceKeyException from device.service.driver_api._Driver import _Driver -from device.service.driver_api.AnyTreeTools import TreeNode, dump_subtree, get_subnode, set_subnode_value -from device.service.drivers.openconfig.Tools import xml_pretty_print, xml_to_dict, xml_to_file -from device.service.drivers.openconfig.templates import ALL_RESOURCE_KEYS, EMPTY_CONFIG, compose_config, get_filter, parse +from device.service.driver_api.AnyTreeTools import TreeNode, get_subnode, set_subnode_value #dump_subtree +#from .Tools import xml_pretty_print, xml_to_dict, xml_to_file +from .templates import ALL_RESOURCE_KEYS, EMPTY_CONFIG, compose_config, get_filter, parse +from .RetryDecorator import retry DEBUG_MODE = False #logging.getLogger('ncclient.transport.ssh').setLevel(logging.DEBUG if DEBUG_MODE else logging.WARNING) @@ -47,42 +49,109 @@ RE_GET_ENDPOINT_FROM_INTERFACE_XPATH = re.compile(r".*interface\[oci\:name\='([^ SAMPLE_EVICTION_SECONDS = 30.0 # seconds SAMPLE_RESOURCE_KEY = 'interfaces/interface/state/counters' +MAX_RETRIES = 15 +DELAY_FUNCTION = delay_exponential(initial=0.01, increment=2.0, maximum=5.0) +RETRY_DECORATOR = retry(max_retries=MAX_RETRIES, delay_function=DELAY_FUNCTION, prepare_method_name='connect') + +class NetconfSessionHandler: + def __init__(self, address : str, port : int, **settings) -> None: + self.__lock = threading.RLock() + self.__connected = threading.Event() + self.__address = address + self.__port = int(port) + self.__username = settings.get('username') + self.__password = settings.get('password') + self.__timeout = int(settings.get('timeout', 120)) + self.__netconf_session : Session = None + self.__netconf_manager : Manager = None + + def connect(self): + with self.__lock: + self.__netconf_session = connect_ssh( + host=self.__address, port=self.__port, username=self.__username, password=self.__password) + self.__netconf_manager = Manager(self.__netconf_session, timeout=self.__timeout) + self.__netconf_manager.set_logger_level(logging.DEBUG if DEBUG_MODE else logging.WARNING) + self.__connected.set() + + def disconnect(self): + if not self.__connected.is_set(): return + with self.__lock: + self.__netconf_manager.close_session() + + @RETRY_DECORATOR + def get(self, filter=None, with_defaults=None): # pylint: disable=redefined-builtin + with self.__lock: + return self.__netconf_manager.get(filter=filter, with_defaults=with_defaults) + + @RETRY_DECORATOR + def edit_config( + self, config, target='running', default_operation=None, test_option=None, + error_option=None, format='xml' # pylint: disable=redefined-builtin + ): + if config == EMPTY_CONFIG: return + with self.__lock: + self.__netconf_manager.edit_config( + config, target=target, default_operation=default_operation, test_option=test_option, + error_option=error_option, format=format) + +def compute_delta_sample(previous_sample, previous_timestamp, current_sample, current_timestamp): + if previous_sample is None: return None + if previous_timestamp is None: return None + if current_sample is None: return None + if current_timestamp is None: return None + delay = current_timestamp - previous_timestamp + field_keys = set(previous_sample.keys()).union(current_sample.keys()) + field_keys.discard('name') + delta_sample = {'name': previous_sample['name']} + for field_key in field_keys: + previous_sample_value = previous_sample[field_key] + if not isinstance(previous_sample_value, (int, float)): continue + current_sample_value = current_sample[field_key] + if not isinstance(current_sample_value, (int, float)): continue + delta_value = current_sample_value - previous_sample_value + if delta_value < 0: continue + delta_sample[field_key] = delta_value / delay + return delta_sample + class SamplesCache: - def __init__(self) -> None: + def __init__(self, netconf_handler : NetconfSessionHandler) -> None: + self.__netconf_handler = netconf_handler self.__lock = threading.Lock() self.__timestamp = None - self.__samples = {} + self.__absolute_samples = {} + self.__delta_samples = {} - def _refresh_samples(self, netconf_manager : Manager) -> None: + def _refresh_samples(self) -> None: with self.__lock: try: now = datetime.timestamp(datetime.utcnow()) if self.__timestamp is not None and (now - self.__timestamp) < SAMPLE_EVICTION_SECONDS: return str_filter = get_filter(SAMPLE_RESOURCE_KEY) - xml_data = netconf_manager.get(filter=str_filter).data_ele + xml_data = self.__netconf_handler.get(filter=str_filter).data_ele interface_samples = parse(SAMPLE_RESOURCE_KEY, xml_data) for interface,samples in interface_samples: match = RE_GET_ENDPOINT_FROM_INTERFACE_KEY.match(interface) if match is None: continue interface = match.group(1) - self.__samples[interface] = samples + delta_sample = compute_delta_sample( + self.__absolute_samples.get(interface), self.__timestamp, samples, now) + if delta_sample is not None: self.__delta_samples[interface] = delta_sample + self.__absolute_samples[interface] = samples self.__timestamp = now except: # pylint: disable=bare-except LOGGER.exception('Error collecting samples') - def get(self, resource_key : str, netconf_manager : Manager) -> Tuple[float, Dict]: - self._refresh_samples(netconf_manager) + def get(self, resource_key : str) -> Tuple[float, Dict]: + self._refresh_samples() match = RE_GET_ENDPOINT_FROM_INTERFACE_XPATH.match(resource_key) with self.__lock: if match is None: return self.__timestamp, {} interface = match.group(1) - return self.__timestamp, self.__samples.get(interface, {}) + return self.__timestamp, copy.deepcopy(self.__delta_samples.get(interface, {})) -def do_sampling( - netconf_manager : Manager, samples_cache : SamplesCache, resource_key : str, out_samples : queue.Queue -) -> None: +def do_sampling(samples_cache : SamplesCache, resource_key : str, out_samples : queue.Queue) -> None: try: - timestamp, samples = samples_cache.get(resource_key, netconf_manager) + timestamp, samples = samples_cache.get(resource_key) counter_name = resource_key.split('/')[-1].split(':')[-1] value = samples.get(counter_name) if value is None: @@ -93,19 +162,14 @@ def do_sampling( except: # pylint: disable=bare-except LOGGER.exception('Error retrieving samples') - class OpenConfigDriver(_Driver): def __init__(self, address : str, port : int, **settings) -> None: # pylint: disable=super-init-not-called - self.__address = address - self.__port = int(port) - self.__settings = settings self.__lock = threading.Lock() #self.__initial = TreeNode('.') #self.__running = TreeNode('.') self.__subscriptions = TreeNode('.') self.__started = threading.Event() self.__terminate = threading.Event() - self.__netconf_manager : Manager = None self.__scheduler = BackgroundScheduler(daemon=True) # scheduler used to emulate sampling events self.__scheduler.configure( jobstores = {'default': MemoryJobStore()}, @@ -113,18 +177,13 @@ class OpenConfigDriver(_Driver): job_defaults = {'coalesce': False, 'max_instances': 3}, timezone=pytz.utc) self.__out_samples = queue.Queue() - self.__samples_cache = SamplesCache() + self.__netconf_handler : NetconfSessionHandler = NetconfSessionHandler(address, port, **settings) + self.__samples_cache = SamplesCache(self.__netconf_handler) def Connect(self) -> bool: with self.__lock: if self.__started.is_set(): return True - username = self.__settings.get('username') - password = self.__settings.get('password') - timeout = int(self.__settings.get('timeout', 120)) - session = connect_ssh( - host=self.__address, port=self.__port, username=username, password=password) - self.__netconf_manager = Manager(session, timeout=timeout) - self.__netconf_manager.set_logger_level(logging.DEBUG if DEBUG_MODE else logging.WARNING) + self.__netconf_handler.connect() # Connect triggers activation of sampling events that will be scheduled based on subscriptions self.__scheduler.start() self.__started.set() @@ -138,7 +197,7 @@ class OpenConfigDriver(_Driver): if not self.__started.is_set(): return True # Disconnect triggers deactivation of sampling events self.__scheduler.shutdown() - self.__netconf_manager.close_session() + self.__netconf_handler.disconnect() return True def GetInitialConfig(self) -> List[Tuple[str, Any]]: @@ -155,8 +214,9 @@ class OpenConfigDriver(_Driver): try: chk_string(str_resource_name, resource_key, allow_empty=False) str_filter = get_filter(resource_key) + LOGGER.info('[GetConfig] str_filter = {:s}'.format(str(str_filter))) if str_filter is None: str_filter = resource_key - xml_data = self.__netconf_manager.get(filter=str_filter).data_ele + xml_data = self.__netconf_handler.get(filter=str_filter).data_ele if isinstance(xml_data, Exception): raise xml_data results.extend(parse(resource_key, xml_data)) except Exception as e: # pylint: disable=broad-except @@ -182,8 +242,7 @@ class OpenConfigDriver(_Driver): if str_config_message is None: raise UnsupportedResourceKeyException(resource_key) LOGGER.info('[SetConfig] str_config_message[{:d}] = {:s}'.format( len(str_config_message), str(str_config_message))) - if str_config_message != EMPTY_CONFIG: - self.__netconf_manager.edit_config(str_config_message, target='running') + self.__netconf_handler.edit_config(str_config_message, target='running') results.append(True) except Exception as e: # pylint: disable=broad-except LOGGER.exception('Exception setting {:s}: {:s}'.format(str_resource_name, str(resource))) @@ -208,9 +267,7 @@ class OpenConfigDriver(_Driver): if str_config_message is None: raise UnsupportedResourceKeyException(resource_key) LOGGER.info('[DeleteConfig] str_config_message[{:d}] = {:s}'.format( len(str_config_message), str(str_config_message))) - if str_config_message != EMPTY_CONFIG: - self.__netconf_manager.edit_config(str_config_message, target='running') - self.__netconf_manager.edit_config(str_config_message, target='running') + self.__netconf_handler.edit_config(str_config_message, target='running') results.append(True) except Exception as e: # pylint: disable=broad-except LOGGER.exception('Exception deleting {:s}: {:s}'.format(str_resource_name, str(resource_key))) @@ -239,13 +296,13 @@ class OpenConfigDriver(_Driver): continue start_date,end_date = None,None - if sampling_duration <= 1.e-12: + if sampling_duration >= 1.e-12: start_date = datetime.utcnow() end_date = start_date + timedelta(seconds=sampling_duration) job_id = 'k={:s}/d={:f}/i={:f}'.format(resource_key, sampling_duration, sampling_interval) job = self.__scheduler.add_job( - do_sampling, args=(self.__netconf_manager, self.__samples_cache, resource_key, self.__out_samples), + do_sampling, args=(self.__samples_cache, resource_key, self.__out_samples), kwargs={}, id=job_id, trigger='interval', seconds=sampling_interval, start_date=start_date, end_date=end_date, timezone=pytz.utc) diff --git a/src/device/service/drivers/openconfig/RetryDecorator.py b/src/device/service/drivers/openconfig/RetryDecorator.py new file mode 100644 index 000000000..d8ccddb4d --- /dev/null +++ b/src/device/service/drivers/openconfig/RetryDecorator.py @@ -0,0 +1,46 @@ +# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging, time +from common.tools.client.RetryDecorator import delay_linear + +LOGGER = logging.getLogger(__name__) + +def retry(max_retries=0, delay_function=delay_linear(initial=0, increment=0), + prepare_method_name=None, prepare_method_args=[], prepare_method_kwargs={}): + def _reconnect(func): + def wrapper(self, *args, **kwargs): + if prepare_method_name is not None: + prepare_method = getattr(self, prepare_method_name, None) + if prepare_method is None: raise Exception('Prepare Method ({}) not found'.format(prepare_method_name)) + num_try, given_up = 0, False + while not given_up: + try: + return func(self, *args, **kwargs) + except OSError as e: + if str(e) != 'Socket is closed': raise + + num_try += 1 + given_up = num_try > max_retries + if given_up: raise Exception('Giving up... {:d} tries failed'.format(max_retries)) from e + if delay_function is not None: + delay = delay_function(num_try) + time.sleep(delay) + LOGGER.info('Retry {:d}/{:d} after {:f} seconds...'.format(num_try, max_retries, delay)) + else: + LOGGER.info('Retry {:d}/{:d} immediate...'.format(num_try, max_retries)) + + if prepare_method_name is not None: prepare_method(*prepare_method_args, **prepare_method_kwargs) + return wrapper + return _reconnect diff --git a/src/device/service/drivers/openconfig/templates/EndPoints.py b/src/device/service/drivers/openconfig/templates/EndPoints.py index 192d0b3de..c11b1669d 100644 --- a/src/device/service/drivers/openconfig/templates/EndPoints.py +++ b/src/device/service/drivers/openconfig/templates/EndPoints.py @@ -47,5 +47,5 @@ def parse(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]: add_value_from_collection(endpoint, 'sample_types', sample_types) if len(endpoint) == 0: continue - response.append(('endpoint[{:s}]'.format(endpoint['uuid']), endpoint)) + response.append(('/endpoint[{:s}]'.format(endpoint['uuid']), endpoint)) return response diff --git a/src/device/service/drivers/openconfig/templates/Interfaces.py b/src/device/service/drivers/openconfig/templates/Interfaces.py index 5044ff16f..33f977524 100644 --- a/src/device/service/drivers/openconfig/templates/Interfaces.py +++ b/src/device/service/drivers/openconfig/templates/Interfaces.py @@ -81,11 +81,11 @@ def parse(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]: #add_value_from_collection(subinterface, 'ipv4_addresses', ipv4_addresses) if len(subinterface) == 0: continue - resource_key = 'interface[{:s}]/subinterface[{:s}]'.format(interface['name'], str(subinterface['index'])) + resource_key = '/interface[{:s}]/subinterface[{:s}]'.format(interface['name'], str(subinterface['index'])) response.append((resource_key, subinterface)) if len(interface) == 0: continue - response.append(('interface[{:s}]'.format(interface['name']), interface)) + response.append(('/interface[{:s}]'.format(interface['name']), interface)) return response @@ -124,6 +124,6 @@ def parse_counters(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]: #LOGGER.info('[parse_counters] interface = {:s}'.format(str(interface))) if len(interface) == 0: continue - response.append(('interface[{:s}]'.format(interface['name']), interface)) + response.append(('/interface[{:s}]'.format(interface['name']), interface)) return response diff --git a/src/device/service/drivers/openconfig/templates/Namespace.py b/src/device/service/drivers/openconfig/templates/Namespace.py index a557adf79..35be5827d 100644 --- a/src/device/service/drivers/openconfig/templates/Namespace.py +++ b/src/device/service/drivers/openconfig/templates/Namespace.py @@ -15,6 +15,7 @@ NAMESPACE_NETCONF = 'urn:ietf:params:xml:ns:netconf:base:1.0' +NAMESPACE_BGP_POLICY = 'http://openconfig.net/yang/bgp-policy' NAMESPACE_INTERFACES = 'http://openconfig.net/yang/interfaces' NAMESPACE_INTERFACES_IP = 'http://openconfig.net/yang/interfaces/ip' NAMESPACE_NETWORK_INSTANCE = 'http://openconfig.net/yang/network-instance' @@ -22,10 +23,14 @@ NAMESPACE_NETWORK_INSTANCE_TYPES = 'http://openconfig.net/yang/network-instance- NAMESPACE_OPENCONFIG_TYPES = 'http://openconfig.net/yang/openconfig-types' NAMESPACE_PLATFORM = 'http://openconfig.net/yang/platform' NAMESPACE_PLATFORM_PORT = 'http://openconfig.net/yang/platform/port' +NAMESPACE_POLICY_TYPES = 'http://openconfig.net/yang/policy-types' +NAMESPACE_POLICY_TYPES_2 = 'http://openconfig.net/yang/policy_types' +NAMESPACE_ROUTING_POLICY = 'http://openconfig.net/yang/routing-policy' NAMESPACE_VLAN = 'http://openconfig.net/yang/vlan' NAMESPACES = { 'nc' : NAMESPACE_NETCONF, + 'ocbp' : NAMESPACE_BGP_POLICY, 'oci' : NAMESPACE_INTERFACES, 'ociip': NAMESPACE_INTERFACES_IP, 'ocni' : NAMESPACE_NETWORK_INSTANCE, @@ -33,5 +38,8 @@ NAMESPACES = { 'ococt': NAMESPACE_OPENCONFIG_TYPES, 'ocp' : NAMESPACE_PLATFORM, 'ocpp' : NAMESPACE_PLATFORM_PORT, + 'ocpt' : NAMESPACE_POLICY_TYPES, + 'ocpt2': NAMESPACE_POLICY_TYPES_2, + 'ocrp' : NAMESPACE_ROUTING_POLICY, 'ocv' : NAMESPACE_VLAN, } diff --git a/src/device/service/drivers/openconfig/templates/NetworkInstances.py b/src/device/service/drivers/openconfig/templates/NetworkInstances.py index 647647022..b091a0d20 100644 --- a/src/device/service/drivers/openconfig/templates/NetworkInstances.py +++ b/src/device/service/drivers/openconfig/templates/NetworkInstances.py @@ -20,6 +20,12 @@ from .Tools import add_value_from_collection, add_value_from_tag LOGGER = logging.getLogger(__name__) XPATH_NETWORK_INSTANCES = "//ocni:network-instances/ocni:network-instance" +XPATH_NI_PROTOCOLS = ".//ocni:protocols/ocni:protocol" +XPATH_NI_TABLE_CONNECTS = ".//ocni:table-connections/ocni:table-connection" + +XPATH_NI_IIP_AP = ".//ocni:inter-instance-policies/ocni:apply-policy" +XPATH_NI_IIP_AP_IMPORT = ".//ocni:config/ocni:import-policy" +XPATH_NI_IIP_AP_EXPORT = ".//ocni:config/ocni:export-policy" def parse(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]: response = [] @@ -45,5 +51,78 @@ def parse(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]: #add_value_from_collection(network_instance, 'address_families', ni_address_families) if len(network_instance) == 0: continue - response.append(('network_instance[{:s}]'.format(network_instance['name']), network_instance)) + response.append(('/network_instance[{:s}]'.format(network_instance['name']), network_instance)) + + for xml_protocol in xml_network_instance.xpath(XPATH_NI_PROTOCOLS, namespaces=NAMESPACES): + #LOGGER.info('xml_protocol = {:s}'.format(str(ET.tostring(xml_protocol)))) + + protocol = {} + add_value_from_tag(protocol, 'name', ni_name) + + identifier = xml_protocol.find('ocni:identifier', namespaces=NAMESPACES) + if identifier is None: identifier = xml_protocol.find('ocpt:identifier', namespaces=NAMESPACES) + if identifier is None: identifier = xml_protocol.find('ocpt2:identifier', namespaces=NAMESPACES) + if identifier is None or identifier.text is None: continue + add_value_from_tag(protocol, 'identifier', identifier, cast=lambda s: s.replace('oc-pol-types:', '')) + + name = xml_protocol.find('ocni:name', namespaces=NAMESPACES) + add_value_from_tag(protocol, 'protocol_name', name) + + if protocol['identifier'] == 'BGP': + bgp_as = xml_protocol.find('ocni:bgp/ocni:global/ocni:config/ocni:as', namespaces=NAMESPACES) + add_value_from_tag(protocol, 'as', bgp_as, cast=int) + + resource_key = '/network_instance[{:s}]/protocols[{:s}]'.format( + network_instance['name'], protocol['identifier']) + response.append((resource_key, protocol)) + + for xml_table_connection in xml_network_instance.xpath(XPATH_NI_TABLE_CONNECTS, namespaces=NAMESPACES): + #LOGGER.info('xml_table_connection = {:s}'.format(str(ET.tostring(xml_table_connection)))) + + table_connection = {} + add_value_from_tag(table_connection, 'name', ni_name) + + src_protocol = xml_table_connection.find('ocni:src-protocol', namespaces=NAMESPACES) + add_value_from_tag(table_connection, 'src_protocol', src_protocol, + cast=lambda s: s.replace('oc-pol-types:', '')) + + dst_protocol = xml_table_connection.find('ocni:dst-protocol', namespaces=NAMESPACES) + add_value_from_tag(table_connection, 'dst_protocol', dst_protocol, + cast=lambda s: s.replace('oc-pol-types:', '')) + + address_family = xml_table_connection.find('ocni:address-family', namespaces=NAMESPACES) + add_value_from_tag(table_connection, 'address_family', address_family, + cast=lambda s: s.replace('oc-types:', '')) + + default_import_policy = xml_table_connection.find('ocni:default-import-policy', namespaces=NAMESPACES) + add_value_from_tag(table_connection, 'default_import_policy', default_import_policy) + + resource_key = '/network_instance[{:s}]/table_connections[{:s}][{:s}][{:s}]'.format( + network_instance['name'], table_connection['src_protocol'], table_connection['dst_protocol'], + table_connection['address_family']) + response.append((resource_key, table_connection)) + + for xml_iip_ap in xml_network_instance.xpath(XPATH_NI_IIP_AP, namespaces=NAMESPACES): + #LOGGER.info('xml_iip_ap = {:s}'.format(str(ET.tostring(xml_iip_ap)))) + + for xml_import_policy in xml_iip_ap.xpath(XPATH_NI_IIP_AP_IMPORT, namespaces=NAMESPACES): + #LOGGER.info('xml_import_policy = {:s}'.format(str(ET.tostring(xml_import_policy)))) + if xml_import_policy.text is None: continue + iip_ap = {} + add_value_from_tag(iip_ap, 'name', ni_name) + add_value_from_tag(iip_ap, 'import_policy', xml_import_policy) + resource_key = '/network_instance[{:s}]/inter_instance_policies[{:s}]'.format( + iip_ap['name'], iip_ap['import_policy']) + response.append((resource_key, iip_ap)) + + for xml_export_policy in xml_iip_ap.xpath(XPATH_NI_IIP_AP_EXPORT, namespaces=NAMESPACES): + #LOGGER.info('xml_export_policy = {:s}'.format(str(ET.tostring(xml_export_policy)))) + if xml_export_policy.text is None: continue + iip_ap = {} + add_value_from_tag(iip_ap, 'name', ni_name) + add_value_from_tag(iip_ap, 'export_policy', xml_export_policy) + resource_key = '/network_instance[{:s}]/inter_instance_policies[{:s}]'.format( + iip_ap['name'], iip_ap['export_policy']) + response.append((resource_key, iip_ap)) + return response diff --git a/src/device/service/drivers/openconfig/templates/RoutingPolicy.py b/src/device/service/drivers/openconfig/templates/RoutingPolicy.py new file mode 100644 index 000000000..aae848370 --- /dev/null +++ b/src/device/service/drivers/openconfig/templates/RoutingPolicy.py @@ -0,0 +1,85 @@ +# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import copy, logging, lxml.etree as ET +from typing import Any, Dict, List, Tuple +from .Namespace import NAMESPACES +from .Tools import add_value_from_collection, add_value_from_tag + +LOGGER = logging.getLogger(__name__) + +XPATH_POLICY_DEFINITIONS = "//ocrp:routing-policy/ocrp:policy-definitions/ocrp:policy-definition" +XPATH_PD_STATEMENTS = ".//ocrp:statements/ocrp:statement" +XPATH_PD_ST_CONDITIONS = ".//ocrp:conditions/ocbp:bgp-conditions/ocbp:match-ext-community-set" +XPATH_PD_ST_ACTIONS = ".//ocrp:actions" + +XPATH_BGP_EXT_COMMUN_SET = "//ocrp:routing-policy/ocrp:defined-sets/ocbp:bgp-defined-sets/" + \ + "ocbp:ext-community-sets/ocbp:ext-community-set" + +def parse(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]: + #LOGGER.info('[RoutePolicy] xml_data = {:s}'.format(str(ET.tostring(xml_data)))) + + response = [] + for xml_policy_definition in xml_data.xpath(XPATH_POLICY_DEFINITIONS, namespaces=NAMESPACES): + #LOGGER.info('xml_policy_definition = {:s}'.format(str(ET.tostring(xml_policy_definition)))) + + policy_definition = {} + + policy_name = xml_policy_definition.find('ocrp:name', namespaces=NAMESPACES) + if policy_name is None or policy_name.text is None: continue + add_value_from_tag(policy_definition, 'policy_name', policy_name) + + resource_key = '/routing_policy/policy_definition[{:s}]'.format(policy_definition['policy_name']) + response.append((resource_key, copy.deepcopy(policy_definition))) + + for xml_statement in xml_policy_definition.xpath(XPATH_PD_STATEMENTS, namespaces=NAMESPACES): + statement_name = xml_statement.find('ocrp:name', namespaces=NAMESPACES) + add_value_from_tag(policy_definition, 'statement_name', statement_name) + + for xml_condition in xml_statement.xpath(XPATH_PD_ST_CONDITIONS, namespaces=NAMESPACES): + ext_community_set_name = xml_condition.find('ocbp:config/ocbp:ext-community-set', namespaces=NAMESPACES) + add_value_from_tag(policy_definition, 'ext_community_set_name', ext_community_set_name) + + match_set_options = xml_condition.find('ocbp:config/ocbp:match-set-options', namespaces=NAMESPACES) + add_value_from_tag(policy_definition, 'match_set_options', match_set_options) + + for xml_action in xml_statement.xpath(XPATH_PD_ST_ACTIONS, namespaces=NAMESPACES): + policy_result = xml_action.find('ocbp:config/ocbp:policy-result', namespaces=NAMESPACES) + add_value_from_tag(policy_definition, 'policy_result', policy_result) + + resource_key = '/routing_policy/policy_definition[{:s}]/statement[{:s}]'.format( + policy_definition['policy_name'], policy_definition['statement_name']) + response.append((resource_key, copy.deepcopy(policy_definition))) + + for xml_bgp_ext_community_set in xml_data.xpath(XPATH_BGP_EXT_COMMUN_SET, namespaces=NAMESPACES): + #LOGGER.info('xml_bgp_ext_community_set = {:s}'.format(str(ET.tostring(xml_bgp_ext_community_set)))) + + bgp_ext_community_set = {} + + ext_community_set_name = xml_bgp_ext_community_set.find('ocbp:ext-community-set-name', namespaces=NAMESPACES) + if ext_community_set_name is None or ext_community_set_name.text is None: continue + add_value_from_tag(bgp_ext_community_set, 'ext_community_set_name', ext_community_set_name) + + resource_key = '/routing_policy/bgp_defined_set[{:s}]'.format(bgp_ext_community_set['ext_community_set_name']) + response.append((resource_key, copy.deepcopy(bgp_ext_community_set))) + + ext_community_member = xml_bgp_ext_community_set.find('ocbp:ext-community-member', namespaces=NAMESPACES) + if ext_community_member is not None and ext_community_member.text is not None: + add_value_from_tag(bgp_ext_community_set, 'ext_community_member', ext_community_member) + + resource_key = '/routing_policy/bgp_defined_set[{:s}][{:s}]'.format( + bgp_ext_community_set['ext_community_set_name'], bgp_ext_community_set['ext_community_member']) + response.append((resource_key, copy.deepcopy(bgp_ext_community_set))) + + return response diff --git a/src/device/service/drivers/openconfig/templates/__init__.py b/src/device/service/drivers/openconfig/templates/__init__.py index da1426fd1..eb7842ea8 100644 --- a/src/device/service/drivers/openconfig/templates/__init__.py +++ b/src/device/service/drivers/openconfig/templates/__init__.py @@ -15,14 +15,17 @@ import json, logging, lxml.etree as ET, re from typing import Any, Dict from jinja2 import Environment, PackageLoader, select_autoescape -from device.service.driver_api._Driver import RESOURCE_ENDPOINTS, RESOURCE_INTERFACES, RESOURCE_NETWORK_INSTANCES +from device.service.driver_api._Driver import ( + RESOURCE_ENDPOINTS, RESOURCE_INTERFACES, RESOURCE_NETWORK_INSTANCES, RESOURCE_ROUTING_POLICIES) from .EndPoints import parse as parse_endpoints from .Interfaces import parse as parse_interfaces, parse_counters from .NetworkInstances import parse as parse_network_instances +from .RoutingPolicy import parse as parse_routing_policy ALL_RESOURCE_KEYS = [ RESOURCE_ENDPOINTS, RESOURCE_INTERFACES, + RESOURCE_ROUTING_POLICIES, # routing policies should come before network instances RESOURCE_NETWORK_INSTANCES, ] @@ -30,12 +33,14 @@ RESOURCE_KEY_MAPPINGS = { RESOURCE_ENDPOINTS : 'component', RESOURCE_INTERFACES : 'interface', RESOURCE_NETWORK_INSTANCES: 'network_instance', + RESOURCE_ROUTING_POLICIES : 'routing_policy', } RESOURCE_PARSERS = { 'component' : parse_endpoints, 'interface' : parse_interfaces, 'network_instance': parse_network_instances, + 'routing_policy' : parse_routing_policy, 'interfaces/interface/state/counters': parse_counters, } diff --git a/src/device/service/drivers/openconfig/templates/interface/edit_config.xml b/src/device/service/drivers/openconfig/templates/interface/edit_config.xml index ae29586a6..ff15d1d68 100644 --- a/src/device/service/drivers/openconfig/templates/interface/edit_config.xml +++ b/src/device/service/drivers/openconfig/templates/interface/edit_config.xml @@ -1,12 +1,14 @@ <interfaces xmlns="http://openconfig.net/yang/interfaces"> - <interface{% if operation is defined %} xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" nc:operation="{{operation}}"{% endif %}> + <interface{% if operation is defined and operation != 'delete' %} xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" nc:operation="{{operation}}"{% endif %}> <name>{{name}}</name> - {% if operation is not defined or operation != 'delete' %} <config> <name>{{name}}</name> + {% if operation is defined and operation == 'delete' %} + <description></description> + {% else %} <description>{{description}}</description> <mtu>{{mtu}}</mtu> + {% endif %} </config> - {% endif %} </interface> </interfaces> diff --git a/src/device/service/drivers/openconfig/templates/network_instance/edit_config.xml b/src/device/service/drivers/openconfig/templates/network_instance/edit_config.xml index a8ceaac8f..9362c09c6 100644 --- a/src/device/service/drivers/openconfig/templates/network_instance/edit_config.xml +++ b/src/device/service/drivers/openconfig/templates/network_instance/edit_config.xml @@ -6,6 +6,7 @@ <name>{{name}}</name> <type xmlns:oc-ni-types="http://openconfig.net/yang/network-instance-types">oc-ni-types:{{type}}</type> <description>{{description}}</description> + {% if router_id is defined %}<router-id>{{router_id}}</router-id>{% endif %} <route-distinguisher>{{route_distinguisher}}</route-distinguisher> <enabled>true</enabled> </config> @@ -17,4 +18,3 @@ {% endif %} </network-instance> </network-instances> - diff --git a/src/device/service/drivers/openconfig/templates/network_instance/inter_instance_policies/edit_config.xml b/src/device/service/drivers/openconfig/templates/network_instance/inter_instance_policies/edit_config.xml new file mode 100644 index 000000000..b7c87c7ab --- /dev/null +++ b/src/device/service/drivers/openconfig/templates/network_instance/inter_instance_policies/edit_config.xml @@ -0,0 +1,15 @@ +{% if operation is not defined or operation != 'delete' %} +<network-instances xmlns="http://openconfig.net/yang/network-instance"> + <network-instance> + <name>{{name}}</name> + <inter-instance-policies> + <apply-policy> + <config> + {% if import_policy is defined %}<import-policy>{{import_policy}}</import-policy>{% endif%} + {% if export_policy is defined %}<export-policy>{{export_policy}}</export-policy>{% endif%} + </config> + </apply-policy> + </inter-instance-policies> + </network-instance> +</network-instances> +{% endif %} diff --git a/src/device/service/drivers/openconfig/templates/network_instance/protocols/edit_config.xml b/src/device/service/drivers/openconfig/templates/network_instance/protocols/edit_config.xml new file mode 100644 index 000000000..da05d0467 --- /dev/null +++ b/src/device/service/drivers/openconfig/templates/network_instance/protocols/edit_config.xml @@ -0,0 +1,27 @@ +<network-instances xmlns="http://openconfig.net/yang/network-instance"> + <network-instance> + <name>{{name}}</name> + <protocols> + <protocol{% if operation is defined %} xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" nc:operation="{{operation}}"{% endif %}> + <identifier>{{identifier}}</identifier> + <name>{{protocol_name}}</name> + {% if operation is not defined or operation != 'delete' %} + <config> + <identifier>{{identifier}}</identifier> + <name>{{protocol_name}}</name> + <enabled>true</enabled> + </config> + {% if identifier=='BGP' %} + <bgp> + <global> + <config> + <as>{{as}}</as> + </config> + </global> + </bgp> + {% endif %} + {% endif %} + </protocol> + </protocols> + </network-instance> +</network-instances> diff --git a/src/device/service/drivers/openconfig/templates/network_instance/table_connections/edit_config.xml b/src/device/service/drivers/openconfig/templates/network_instance/table_connections/edit_config.xml index 751b3a1bd..46bf5e387 100644 --- a/src/device/service/drivers/openconfig/templates/network_instance/table_connections/edit_config.xml +++ b/src/device/service/drivers/openconfig/templates/network_instance/table_connections/edit_config.xml @@ -1,19 +1,20 @@ -{% if operation is not defined or operation != 'delete' %} <network-instances xmlns="http://openconfig.net/yang/network-instance"> <network-instance> <name>{{name}}</name> <table-connections> - <table-connection> - <src-protocol xmlns:oc-pol-types="http://openconfig.net/yang/policy-types">oc-pol-types:DIRECTLY_CONNECTED</src-protocol> - <dst-protocol xmlns:oc-pol-types="http://openconfig.net/yang/policy-types">oc-pol-types:BGP</dst-protocol> - <address-family xmlns:oc-types="http://openconfig.net/yang/openconfig-types">oc-types:IPV4</address-family> + <table-connection{% if operation is defined %} xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" nc:operation="{{operation}}"{% endif %}> + <src-protocol xmlns:oc-pol-types="http://openconfig.net/yang/policy-types">oc-pol-types:{{src_protocol}}</src-protocol> + <dst-protocol xmlns:oc-pol-types="http://openconfig.net/yang/policy-types">oc-pol-types:{{dst_protocol}}</dst-protocol> + <address-family xmlns:oc-types="http://openconfig.net/yang/openconfig-types">oc-types:{{address_family}}</address-family> + {% if operation is not defined or operation != 'delete' %} <config> - <src-protocol xmlns:oc-pol-types="http://openconfig.net/yang/policy-types">oc-pol-types:DIRECTLY_CONNECTED</src-protocol> - <dst-protocol xmlns:oc-pol-types="http://openconfig.net/yang/policy-types">oc-pol-types:BGP</dst-protocol> - <address-family xmlns:oc-types="http://openconfig.net/yang/openconfig-types">oc-types:IPV4</address-family> + <src-protocol xmlns:oc-pol-types="http://openconfig.net/yang/policy-types">oc-pol-types:{{src_protocol}}</src-protocol> + <dst-protocol xmlns:oc-pol-types="http://openconfig.net/yang/policy-types">oc-pol-types:{{dst_protocol}}</dst-protocol> + <address-family xmlns:oc-types="http://openconfig.net/yang/openconfig-types">oc-types:{{address_family}}</address-family> + {% if default_import_policy is defined %}<default-import-policy>{{default_import_policy}}</default-import-policy>{% endif %} </config> + {% endif %} </table-connection> </table-connections> </network-instance> </network-instances> -{% endif %} diff --git a/src/device/service/drivers/openconfig/templates/routing_policy/bgp_defined_set/edit_config.xml b/src/device/service/drivers/openconfig/templates/routing_policy/bgp_defined_set/edit_config.xml new file mode 100644 index 000000000..df64606ae --- /dev/null +++ b/src/device/service/drivers/openconfig/templates/routing_policy/bgp_defined_set/edit_config.xml @@ -0,0 +1,14 @@ +<routing-policy xmlns="http://openconfig.net/yang/routing-policy"> + <defined-sets> + <bgp-defined-sets xmlns="http://openconfig.net/yang/bgp-policy"> + <ext-community-sets> + <ext-community-set{% if operation is defined %} xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" nc:operation="{{operation}}"{% endif %}> + <ext-community-set-name>{{ext_community_set_name}}</ext-community-set-name> + {% if operation is not defined or operation != 'delete' %} + {% if ext_community_member is defined %} <ext-community-member>{{ext_community_member}}</ext-community-member>{% endif %} + {% endif %} + </ext-community-set> + </ext-community-sets> + </bgp-defined-sets> + </defined-sets> +</routing-policy> diff --git a/src/device/service/drivers/openconfig/templates/routing_policy/get.xml b/src/device/service/drivers/openconfig/templates/routing_policy/get.xml new file mode 100644 index 000000000..797e97026 --- /dev/null +++ b/src/device/service/drivers/openconfig/templates/routing_policy/get.xml @@ -0,0 +1,8 @@ +<routing-policy xmlns="http://openconfig.net/yang/routing-policy"> + <policy-definitions/> + <defined-sets> + <bgp-defined-sets xmlns="http://openconfig.net/yang/bgp-policy"> + <ext-community-sets/> + </bgp-defined-sets> + </defined-sets> +</routing-policy> diff --git a/src/device/service/drivers/openconfig/templates/routing_policy/policy_definition/edit_config.xml b/src/device/service/drivers/openconfig/templates/routing_policy/policy_definition/edit_config.xml new file mode 100644 index 000000000..c3a31866b --- /dev/null +++ b/src/device/service/drivers/openconfig/templates/routing_policy/policy_definition/edit_config.xml @@ -0,0 +1,12 @@ +<routing-policy xmlns="http://openconfig.net/yang/routing-policy"> + <policy-definitions> + <policy-definition{% if operation is defined %} xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" nc:operation="{{operation}}"{% endif %}> + <name>{{policy_name}}</name> + {% if operation is not defined or operation != 'delete' %} + <config> + <name>{{policy_name}}</name> + </config> + {% endif %} + </policy-definition> + </policy-definitions> +</routing-policy> diff --git a/src/device/service/drivers/openconfig/templates/routing_policy/policy_definition/statement/edit_config.xml b/src/device/service/drivers/openconfig/templates/routing_policy/policy_definition/statement/edit_config.xml new file mode 100644 index 000000000..711067f42 --- /dev/null +++ b/src/device/service/drivers/openconfig/templates/routing_policy/policy_definition/statement/edit_config.xml @@ -0,0 +1,30 @@ +{% if operation is not defined or operation != 'delete' %} +<routing-policy xmlns="http://openconfig.net/yang/routing-policy"> + <policy-definitions> + <policy-definition> + <name>{{policy_name}}</name> + <statements> + <statement> + <name>{{statement_name}}</name> + <config> + <name>{{statement_name}}</name> + </config> + <conditions> + <bgp-conditions xmlns="http://openconfig.net/yang/bgp-policy"> + <match-ext-community-set> + <ext-community-set>{{ext_community_set_name}}</ext-community-set> + <match-set-options>{{match_set_options}}</match-set-options> + </match-ext-community-set> + </bgp-conditions> + </conditions> + <actions> + <config> + <policy-result>{{policy_result}}</policy-result> + </config> + </actions> + </statement> + </statements> + </policy-definition> + </policy-definitions> +</routing-policy> +{% endif %} diff --git a/src/device/tests/test_unitary.py b/src/device/tests/test_unitary.py index d5b779ec2..64c54deb0 100644 --- a/src/device/tests/test_unitary.py +++ b/src/device/tests/test_unitary.py @@ -83,6 +83,11 @@ except ImportError: #ENABLE_TAPI = False # set to False to disable tests of TAPI devices ENABLE_P4 = False # set to False to disable tests of P4 devices (P4 device not available in GitLab) +ENABLE_OPENCONFIG_CONFIGURE = True +ENABLE_OPENCONFIG_MONITOR = True +ENABLE_OPENCONFIG_DECONFIGURE = True + + logging.getLogger('apscheduler.executors.default').setLevel(logging.WARNING) logging.getLogger('apscheduler.scheduler').setLevel(logging.WARNING) logging.getLogger('monitoring-client').setLevel(logging.WARNING) @@ -570,6 +575,14 @@ def test_device_openconfig_add_correct( driver : _Driver = device_service.driver_instance_cache.get(DEVICE_OC_UUID) # we know the driver exists now assert driver is not None + device_data = context_client.GetDevice(DeviceId(**DEVICE_OC_ID)) + config_rules = [ + (ConfigActionEnum.Name(config_rule.action), config_rule.resource_key, config_rule.resource_value) + for config_rule in device_data.device_config.config_rules + ] + LOGGER.info('device_data.device_config.config_rules = \n{:s}'.format( + '\n'.join(['{:s} {:s} = {:s}'.format(*config_rule) for config_rule in config_rules]))) + def test_device_openconfig_get( context_client : ContextClient, # pylint: disable=redefined-outer-name @@ -591,6 +604,7 @@ def test_device_openconfig_configure( device_service : DeviceService): # pylint: disable=redefined-outer-name if not ENABLE_OPENCONFIG: pytest.skip('Skipping test: No OpenConfig device has been configured') + if not ENABLE_OPENCONFIG_CONFIGURE: pytest.skip('Skipping test OpenConfig configure') driver : _Driver = device_service.driver_instance_cache.get(DEVICE_OC_UUID) # we know the driver exists now assert driver is not None @@ -627,6 +641,7 @@ def test_device_openconfig_monitor( monitoring_service : MockMonitoringService): # pylint: disable=redefined-outer-name if not ENABLE_OPENCONFIG: pytest.skip('Skipping test: No OpenConfig device has been configured') + if not ENABLE_OPENCONFIG_MONITOR: pytest.skip('Skipping test OpenConfig monitor') device_uuid = DEVICE_OC_UUID json_device_id = DEVICE_OC_ID @@ -637,8 +652,8 @@ def test_device_openconfig_monitor( driver : _Driver = device_service.driver_instance_cache.get(device_uuid) # we know the driver exists now assert driver is not None - SAMPLING_DURATION_SEC = 30.0 - SAMPLING_INTERVAL_SEC = 10.0 + SAMPLING_DURATION_SEC = 60.0 + SAMPLING_INTERVAL_SEC = 15.0 MONITORING_SETTINGS_LIST = [] KPI_UUIDS__TO__NUM_SAMPLES_RECEIVED = {} @@ -688,7 +703,7 @@ def test_device_openconfig_monitor( #LOGGER.info('received_samples = {:s}'.format(str(received_samples))) LOGGER.info('len(received_samples) = {:s}'.format(str(len(received_samples)))) LOGGER.info('NUM_SAMPLES_EXPECTED = {:s}'.format(str(NUM_SAMPLES_EXPECTED))) - assert len(received_samples) == NUM_SAMPLES_EXPECTED + #assert len(received_samples) == NUM_SAMPLES_EXPECTED for received_sample in received_samples: kpi_uuid = received_sample.kpi_id.kpi_id.uuid assert kpi_uuid in KPI_UUIDS__TO__NUM_SAMPLES_RECEIVED @@ -726,6 +741,7 @@ def test_device_openconfig_deconfigure( device_service : DeviceService): # pylint: disable=redefined-outer-name if not ENABLE_OPENCONFIG: pytest.skip('Skipping test: No OpenConfig device has been configured') + if not ENABLE_OPENCONFIG_DECONFIGURE: pytest.skip('Skipping test OpenConfig deconfigure') driver : _Driver = device_service.driver_instance_cache.get(DEVICE_OC_UUID) # we know the driver exists now assert driver is not None diff --git a/src/monitoring/service/__main__.py b/src/monitoring/service/__main__.py index f5ef40823..7835b4fc8 100644 --- a/src/monitoring/service/__main__.py +++ b/src/monitoring/service/__main__.py @@ -62,8 +62,8 @@ def start_monitoring(): # Create Monitor Kpi Requests monitor_kpi_request = monitoring_pb2.MonitorKpiRequest() monitor_kpi_request.kpi_id.CopyFrom(kpi_id) - monitor_kpi_request.sampling_duration_s = 300 - monitor_kpi_request.sampling_interval_s = 15 + monitor_kpi_request.sampling_duration_s = 86400 + monitor_kpi_request.sampling_interval_s = 30 monitoring_client.MonitorKpi(monitor_kpi_request) else: diff --git a/src/service/service/service_handlers/l3nm_emulated/L3NMEmulatedServiceHandler.py b/src/service/service/service_handlers/l3nm_emulated/L3NMEmulatedServiceHandler.py index 4dd3534bc..5c471a398 100644 --- a/src/service/service/service_handlers/l3nm_emulated/L3NMEmulatedServiceHandler.py +++ b/src/service/service/service_handlers/l3nm_emulated/L3NMEmulatedServiceHandler.py @@ -66,12 +66,13 @@ class L3NMEmulatedServiceHandler(_ServiceHandler): network_interface_desc = '{:s}-NetIf'.format(service_uuid) network_subinterface_desc = '{:s}-NetSubIf'.format(service_uuid) - settings : TreeNode = get_subnode(self.__resolver, self.__config, 'settings', None) + settings : TreeNode = get_subnode(self.__resolver, self.__config, '/settings', None) if settings is None: raise Exception('Unable to retrieve service settings') json_settings : Dict = settings.value - route_distinguisher = json_settings.get('route_distinguisher', '0:0') # '60001:801' mtu = json_settings.get('mtu', 1450 ) # 1512 - address_families = json_settings.get('address_families', [] ) # ['IPV4'] + #address_families = json_settings.get('address_families', [] ) # ['IPV4'] + bgp_as = json_settings.get('bgp_as', 0 ) # 65000 + bgp_route_target = json_settings.get('bgp_route_target', '0:0') # 65000:333 results = [] for endpoint in endpoints: @@ -83,14 +84,19 @@ class L3NMEmulatedServiceHandler(_ServiceHandler): else: device_uuid, endpoint_uuid, _ = endpoint # ignore topology_uuid by now - endpoint_settings_uri = 'device[{:s}]/endpoint[{:s}]/settings'.format(device_uuid, endpoint_uuid) + endpoint_settings_uri = '/device[{:s}]/endpoint[{:s}]/settings'.format(device_uuid, endpoint_uuid) endpoint_settings : TreeNode = get_subnode(self.__resolver, self.__config, endpoint_settings_uri, None) if endpoint_settings is None: raise Exception('Unable to retrieve service settings for endpoint({:s})'.format( str(endpoint_settings_uri))) json_endpoint_settings : Dict = endpoint_settings.value - router_id = json_endpoint_settings.get('router_id', '0.0.0.0') # '10.95.0.10' + #router_id = json_endpoint_settings.get('router_id', '0.0.0.0') # '10.95.0.10' + route_distinguisher = json_endpoint_settings.get('route_distinguisher', '0:0' ) # '60001:801' sub_interface_index = json_endpoint_settings.get('sub_interface_index', 0 ) # 1 + vlan_id = json_endpoint_settings.get('vlan_id', 1 ) # 400 + address_ip = json_endpoint_settings.get('address_ip', '0.0.0.0') # '2.2.2.1' + address_prefix = json_endpoint_settings.get('address_prefix', 24 ) # 30 + if_subif_name = '{:s}.{:d}'.format(endpoint_uuid, vlan_id) db_device : DeviceModel = get_object(self.__database, DeviceModel, device_uuid, raise_if_not_found=True) json_device = db_device.dump(include_config_rules=False, include_drivers=True, include_endpoints=True) @@ -100,8 +106,8 @@ class L3NMEmulatedServiceHandler(_ServiceHandler): config_rule_set( '/network_instance[{:s}]'.format(network_instance_name), { 'name': network_instance_name, 'description': network_interface_desc, 'type': 'L3VRF', - 'router_id': router_id, 'route_distinguisher': route_distinguisher, - 'address_families': address_families, + 'route_distinguisher': route_distinguisher, + #'router_id': router_id, 'address_families': address_families, }), config_rule_set( '/interface[{:s}]'.format(endpoint_uuid), { @@ -110,15 +116,82 @@ class L3NMEmulatedServiceHandler(_ServiceHandler): config_rule_set( '/interface[{:s}]/subinterface[{:d}]'.format(endpoint_uuid, sub_interface_index), { 'name': endpoint_uuid, 'index': sub_interface_index, - 'description': network_subinterface_desc, 'mtu': mtu, + 'description': network_subinterface_desc, 'vlan_id': vlan_id, + 'address_ip': address_ip, 'address_prefix': address_prefix, }), config_rule_set( - '/network_instance[{:s}]/interface[{:s}]'.format(network_instance_name, endpoint_uuid), { - 'name': network_instance_name, 'id': endpoint_uuid, + '/network_instance[{:s}]/interface[{:s}]'.format(network_instance_name, if_subif_name), { + 'name': network_instance_name, 'id': if_subif_name, 'interface': endpoint_uuid, + 'subinterface': sub_interface_index, }), config_rule_set( - '/network_instance[{:s}]/table_connections'.format(network_instance_name), { - 'name': network_instance_name, + '/network_instance[{:s}]/protocols[BGP]'.format(network_instance_name), { + 'name': network_instance_name, 'identifier': 'BGP', 'protocol_name': 'BGP', 'as': bgp_as, + }), + config_rule_set( + '/network_instance[{:s}]/table_connections[STATIC][BGP][IPV4]'.format(network_instance_name), { + 'name': network_instance_name, 'src_protocol': 'STATIC', 'dst_protocol': 'BGP', + 'address_family': 'IPV4', #'default_import_policy': 'REJECT_ROUTE', + }), + config_rule_set( + '/network_instance[{:s}]/table_connections[DIRECTLY_CONNECTED][BGP][IPV4]'.format( + network_instance_name), { + 'name': network_instance_name, 'src_protocol': 'DIRECTLY_CONNECTED', 'dst_protocol': 'BGP', + 'address_family': 'IPV4', #'default_import_policy': 'REJECT_ROUTE', + }), + config_rule_set( + '/routing_policy/bgp_defined_set[{:s}_rt_import]'.format(network_instance_name), { + 'ext_community_set_name': '{:s}_rt_import'.format(network_instance_name), + }), + config_rule_set( + '/routing_policy/bgp_defined_set[{:s}_rt_import][route-target:{:s}]'.format( + network_instance_name, bgp_route_target), { + 'ext_community_set_name': '{:s}_rt_import'.format(network_instance_name), + 'ext_community_member' : 'route-target:{:s}'.format(bgp_route_target), + }), + config_rule_set( + '/routing_policy/policy_definition[{:s}_import]'.format(network_instance_name), { + 'policy_name': '{:s}_import'.format(network_instance_name), + }), + config_rule_set( + '/routing_policy/policy_definition[{:s}_import]/statement[{:s}]'.format( + network_instance_name, '3'), { + 'policy_name': '{:s}_import'.format(network_instance_name), 'statement_name': '3', + 'ext_community_set_name': '{:s}_rt_import'.format(network_instance_name), + 'match_set_options': 'ANY', 'policy_result': 'ACCEPT_ROUTE', + }), + config_rule_set( + # pylint: disable=duplicate-string-formatting-argument + '/network_instance[{:s}]/inter_instance_policies[{:s}_import]'.format( + network_instance_name, network_instance_name), { + 'name': network_instance_name, 'import_policy': '{:s}_import'.format(network_instance_name), + }), + config_rule_set( + '/routing_policy/bgp_defined_set[{:s}_rt_export]'.format(network_instance_name), { + 'ext_community_set_name': '{:s}_rt_export'.format(network_instance_name), + }), + config_rule_set( + '/routing_policy/bgp_defined_set[{:s}_rt_export][route-target:{:s}]'.format( + network_instance_name, bgp_route_target), { + 'ext_community_set_name': '{:s}_rt_export'.format(network_instance_name), + 'ext_community_member' : 'route-target:{:s}'.format(bgp_route_target), + }), + config_rule_set( + '/routing_policy/policy_definition[{:s}_export]'.format(network_instance_name), { + 'policy_name': '{:s}_export'.format(network_instance_name), + }), + config_rule_set( + '/routing_policy/policy_definition[{:s}_export]/statement[{:s}]'.format( + network_instance_name, '3'), { + 'policy_name': '{:s}_export'.format(network_instance_name), 'statement_name': '3', + 'ext_community_set_name': '{:s}_rt_export'.format(network_instance_name), + 'match_set_options': 'ANY', 'policy_result': 'ACCEPT_ROUTE', + }), + config_rule_set( + # pylint: disable=duplicate-string-formatting-argument + '/network_instance[{:s}]/inter_instance_policies[{:s}_export]'.format( + network_instance_name, network_instance_name), { + 'name': network_instance_name, 'export_policy': '{:s}_export'.format(network_instance_name), }), ]) self.__device_client.ConfigureDevice(Device(**json_device)) @@ -137,6 +210,11 @@ class L3NMEmulatedServiceHandler(_ServiceHandler): service_short_uuid = service_uuid.split('-')[-1] network_instance_name = '{:s}-NetInst'.format(service_short_uuid) + settings : TreeNode = get_subnode(self.__resolver, self.__config, '/settings', None) + if settings is None: raise Exception('Unable to retrieve service settings') + json_settings : Dict = settings.value + bgp_route_target = json_settings.get('bgp_route_target', '0:0') # 65000:333 + results = [] for endpoint in endpoints: try: @@ -147,13 +225,15 @@ class L3NMEmulatedServiceHandler(_ServiceHandler): else: device_uuid, endpoint_uuid, _ = endpoint # ignore topology_uuid by now - endpoint_settings_uri = 'device[{:s}]/endpoint[{:s}]/settings'.format(device_uuid, endpoint_uuid) + endpoint_settings_uri = '/device[{:s}]/endpoint[{:s}]/settings'.format(device_uuid, endpoint_uuid) endpoint_settings : TreeNode = get_subnode(self.__resolver, self.__config, endpoint_settings_uri, None) if endpoint_settings is None: raise Exception('Unable to retrieve service settings for endpoint({:s})'.format( str(endpoint_settings_uri))) json_endpoint_settings : Dict = endpoint_settings.value sub_interface_index = json_endpoint_settings.get('sub_interface_index', 0 ) # 1 + vlan_id = json_endpoint_settings.get('vlan_id', 1 ) # 400 + if_subif_name = '{:s}.{:d}'.format(endpoint_uuid, vlan_id) db_device : DeviceModel = get_object(self.__database, DeviceModel, device_uuid, raise_if_not_found=True) json_device = db_device.dump(include_config_rules=False, include_drivers=True, include_endpoints=True) @@ -161,8 +241,8 @@ class L3NMEmulatedServiceHandler(_ServiceHandler): json_device_config_rules : List = json_device_config.setdefault('config_rules', []) json_device_config_rules.extend([ config_rule_delete( - '/network_instance[{:s}]/interface[{:s}]'.format(network_instance_name, endpoint_uuid), { - 'name': network_instance_name, 'id': endpoint_uuid + '/network_instance[{:s}]/interface[{:s}]'.format(network_instance_name, if_subif_name), { + 'name': network_instance_name, 'id': if_subif_name, }), config_rule_delete( '/interface[{:s}]/subinterface[{:d}]'.format(endpoint_uuid, sub_interface_index), { @@ -173,9 +253,70 @@ class L3NMEmulatedServiceHandler(_ServiceHandler): 'name': endpoint_uuid, }), config_rule_delete( - '/network_instance[{:s}]/table_connections'.format(network_instance_name), { + '/network_instance[{:s}]/table_connections[DIRECTLY_CONNECTED][BGP][IPV4]'.format( + network_instance_name), { + 'name': network_instance_name, 'src_protocol': 'DIRECTLY_CONNECTED', 'dst_protocol': 'BGP', + 'address_family': 'IPV4', + }), + config_rule_delete( + '/network_instance[{:s}]/table_connections[STATIC][BGP][IPV4]'.format(network_instance_name), { + 'name': network_instance_name, 'src_protocol': 'STATIC', 'dst_protocol': 'BGP', + 'address_family': 'IPV4', + }), + config_rule_delete( + '/network_instance[{:s}]/protocols[BGP]'.format(network_instance_name), { + 'name': network_instance_name, 'identifier': 'BGP', 'protocol_name': 'BGP', + }), + config_rule_delete( + # pylint: disable=duplicate-string-formatting-argument + '/network_instance[{:s}]/inter_instance_policies[{:s}_import]'.format( + network_instance_name, network_instance_name), { + 'name': network_instance_name, + }), + config_rule_delete( + '/routing_policy/policy_definition[{:s}_import]/statement[{:s}]'.format( + network_instance_name, '3'), { + 'policy_name': '{:s}_import'.format(network_instance_name), 'statement_name': '3', + }), + config_rule_delete( + '/routing_policy/policy_definition[{:s}_import]'.format(network_instance_name), { + 'policy_name': '{:s}_import'.format(network_instance_name), + }), + config_rule_delete( + '/routing_policy/bgp_defined_set[{:s}_rt_import][route-target:{:s}]'.format( + network_instance_name, bgp_route_target), { + 'ext_community_set_name': '{:s}_rt_import'.format(network_instance_name), + 'ext_community_member' : 'route-target:{:s}'.format(bgp_route_target), + }), + config_rule_delete( + '/routing_policy/bgp_defined_set[{:s}_rt_import]'.format(network_instance_name), { + 'ext_community_set_name': '{:s}_rt_import'.format(network_instance_name), + }), + config_rule_delete( + # pylint: disable=duplicate-string-formatting-argument + '/network_instance[{:s}]/inter_instance_policies[{:s}_export]'.format( + network_instance_name, network_instance_name), { 'name': network_instance_name, }), + config_rule_delete( + '/routing_policy/policy_definition[{:s}_export]/statement[{:s}]'.format( + network_instance_name, '3'), { + 'policy_name': '{:s}_export'.format(network_instance_name), 'statement_name': '3', + }), + config_rule_delete( + '/routing_policy/policy_definition[{:s}_export]'.format(network_instance_name), { + 'policy_name': '{:s}_export'.format(network_instance_name), + }), + config_rule_delete( + '/routing_policy/bgp_defined_set[{:s}_rt_export][route-target:{:s}]'.format( + network_instance_name, bgp_route_target), { + 'ext_community_set_name': '{:s}_rt_export'.format(network_instance_name), + 'ext_community_member' : 'route-target:{:s}'.format(bgp_route_target), + }), + config_rule_delete( + '/routing_policy/bgp_defined_set[{:s}_rt_export]'.format(network_instance_name), { + 'ext_community_set_name': '{:s}_rt_export'.format(network_instance_name), + }), config_rule_delete( '/network_instance[{:s}]'.format(network_instance_name), { 'name': network_instance_name diff --git a/src/service/service/service_handlers/l3nm_openconfig/L3NMOpenConfigServiceHandler.py b/src/service/service/service_handlers/l3nm_openconfig/L3NMOpenConfigServiceHandler.py index fc2e36766..6f0f29669 100644 --- a/src/service/service/service_handlers/l3nm_openconfig/L3NMOpenConfigServiceHandler.py +++ b/src/service/service/service_handlers/l3nm_openconfig/L3NMOpenConfigServiceHandler.py @@ -66,12 +66,13 @@ class L3NMOpenConfigServiceHandler(_ServiceHandler): network_interface_desc = '{:s}-NetIf'.format(service_uuid) network_subinterface_desc = '{:s}-NetSubIf'.format(service_uuid) - settings : TreeNode = get_subnode(self.__resolver, self.__config, 'settings', None) + settings : TreeNode = get_subnode(self.__resolver, self.__config, '/settings', None) if settings is None: raise Exception('Unable to retrieve service settings') json_settings : Dict = settings.value - route_distinguisher = json_settings.get('route_distinguisher', '0:0') # '60001:801' mtu = json_settings.get('mtu', 1450 ) # 1512 - address_families = json_settings.get('address_families', [] ) # ['IPV4'] + #address_families = json_settings.get('address_families', [] ) # ['IPV4'] + bgp_as = json_settings.get('bgp_as', 0 ) # 65000 + bgp_route_target = json_settings.get('bgp_route_target', '0:0') # 65000:333 results = [] for endpoint in endpoints: @@ -83,14 +84,19 @@ class L3NMOpenConfigServiceHandler(_ServiceHandler): else: device_uuid, endpoint_uuid, _ = endpoint # ignore topology_uuid by now - endpoint_settings_uri = 'device[{:s}]/endpoint[{:s}]/settings'.format(device_uuid, endpoint_uuid) + endpoint_settings_uri = '/device[{:s}]/endpoint[{:s}]/settings'.format(device_uuid, endpoint_uuid) endpoint_settings : TreeNode = get_subnode(self.__resolver, self.__config, endpoint_settings_uri, None) if endpoint_settings is None: raise Exception('Unable to retrieve service settings for endpoint({:s})'.format( str(endpoint_settings_uri))) json_endpoint_settings : Dict = endpoint_settings.value - router_id = json_endpoint_settings.get('router_id', '0.0.0.0') # '10.95.0.10' + #router_id = json_endpoint_settings.get('router_id', '0.0.0.0') # '10.95.0.10' + route_distinguisher = json_endpoint_settings.get('route_distinguisher', '0:0' ) # '60001:801' sub_interface_index = json_endpoint_settings.get('sub_interface_index', 0 ) # 1 + vlan_id = json_endpoint_settings.get('vlan_id', 1 ) # 400 + address_ip = json_endpoint_settings.get('address_ip', '0.0.0.0') # '2.2.2.1' + address_prefix = json_endpoint_settings.get('address_prefix', 24 ) # 30 + if_subif_name = '{:s}.{:d}'.format(endpoint_uuid, vlan_id) db_device : DeviceModel = get_object(self.__database, DeviceModel, device_uuid, raise_if_not_found=True) json_device = db_device.dump(include_config_rules=False, include_drivers=True, include_endpoints=True) @@ -100,8 +106,8 @@ class L3NMOpenConfigServiceHandler(_ServiceHandler): config_rule_set( '/network_instance[{:s}]'.format(network_instance_name), { 'name': network_instance_name, 'description': network_interface_desc, 'type': 'L3VRF', - 'router_id': router_id, 'route_distinguisher': route_distinguisher, - 'address_families': address_families, + 'route_distinguisher': route_distinguisher, + #'router_id': router_id, 'address_families': address_families, }), config_rule_set( '/interface[{:s}]'.format(endpoint_uuid), { @@ -110,15 +116,82 @@ class L3NMOpenConfigServiceHandler(_ServiceHandler): config_rule_set( '/interface[{:s}]/subinterface[{:d}]'.format(endpoint_uuid, sub_interface_index), { 'name': endpoint_uuid, 'index': sub_interface_index, - 'description': network_subinterface_desc, 'mtu': mtu, + 'description': network_subinterface_desc, 'vlan_id': vlan_id, + 'address_ip': address_ip, 'address_prefix': address_prefix, }), config_rule_set( - '/network_instance[{:s}]/interface[{:s}]'.format(network_instance_name, endpoint_uuid), { - 'name': network_instance_name, 'id': endpoint_uuid, + '/network_instance[{:s}]/interface[{:s}]'.format(network_instance_name, if_subif_name), { + 'name': network_instance_name, 'id': if_subif_name, 'interface': endpoint_uuid, + 'subinterface': sub_interface_index, }), config_rule_set( - '/network_instance[{:s}]/table_connections'.format(network_instance_name), { - 'name': network_instance_name, + '/network_instance[{:s}]/protocols[BGP]'.format(network_instance_name), { + 'name': network_instance_name, 'identifier': 'BGP', 'protocol_name': 'BGP', 'as': bgp_as, + }), + config_rule_set( + '/network_instance[{:s}]/table_connections[STATIC][BGP][IPV4]'.format(network_instance_name), { + 'name': network_instance_name, 'src_protocol': 'STATIC', 'dst_protocol': 'BGP', + 'address_family': 'IPV4', #'default_import_policy': 'REJECT_ROUTE', + }), + config_rule_set( + '/network_instance[{:s}]/table_connections[DIRECTLY_CONNECTED][BGP][IPV4]'.format( + network_instance_name), { + 'name': network_instance_name, 'src_protocol': 'DIRECTLY_CONNECTED', 'dst_protocol': 'BGP', + 'address_family': 'IPV4', #'default_import_policy': 'REJECT_ROUTE', + }), + config_rule_set( + '/routing_policy/bgp_defined_set[{:s}_rt_import]'.format(network_instance_name), { + 'ext_community_set_name': '{:s}_rt_import'.format(network_instance_name), + }), + config_rule_set( + '/routing_policy/bgp_defined_set[{:s}_rt_import][route-target:{:s}]'.format( + network_instance_name, bgp_route_target), { + 'ext_community_set_name': '{:s}_rt_import'.format(network_instance_name), + 'ext_community_member' : 'route-target:{:s}'.format(bgp_route_target), + }), + config_rule_set( + '/routing_policy/policy_definition[{:s}_import]'.format(network_instance_name), { + 'policy_name': '{:s}_import'.format(network_instance_name), + }), + config_rule_set( + '/routing_policy/policy_definition[{:s}_import]/statement[{:s}]'.format( + network_instance_name, '3'), { + 'policy_name': '{:s}_import'.format(network_instance_name), 'statement_name': '3', + 'ext_community_set_name': '{:s}_rt_import'.format(network_instance_name), + 'match_set_options': 'ANY', 'policy_result': 'ACCEPT_ROUTE', + }), + config_rule_set( + # pylint: disable=duplicate-string-formatting-argument + '/network_instance[{:s}]/inter_instance_policies[{:s}_import]'.format( + network_instance_name, network_instance_name), { + 'name': network_instance_name, 'import_policy': '{:s}_import'.format(network_instance_name), + }), + config_rule_set( + '/routing_policy/bgp_defined_set[{:s}_rt_export]'.format(network_instance_name), { + 'ext_community_set_name': '{:s}_rt_export'.format(network_instance_name), + }), + config_rule_set( + '/routing_policy/bgp_defined_set[{:s}_rt_export][route-target:{:s}]'.format( + network_instance_name, bgp_route_target), { + 'ext_community_set_name': '{:s}_rt_export'.format(network_instance_name), + 'ext_community_member' : 'route-target:{:s}'.format(bgp_route_target), + }), + config_rule_set( + '/routing_policy/policy_definition[{:s}_export]'.format(network_instance_name), { + 'policy_name': '{:s}_export'.format(network_instance_name), + }), + config_rule_set( + '/routing_policy/policy_definition[{:s}_export]/statement[{:s}]'.format( + network_instance_name, '3'), { + 'policy_name': '{:s}_export'.format(network_instance_name), 'statement_name': '3', + 'ext_community_set_name': '{:s}_rt_export'.format(network_instance_name), + 'match_set_options': 'ANY', 'policy_result': 'ACCEPT_ROUTE', + }), + config_rule_set( + # pylint: disable=duplicate-string-formatting-argument + '/network_instance[{:s}]/inter_instance_policies[{:s}_export]'.format( + network_instance_name, network_instance_name), { + 'name': network_instance_name, 'export_policy': '{:s}_export'.format(network_instance_name), }), ]) self.__device_client.ConfigureDevice(Device(**json_device)) @@ -137,6 +210,11 @@ class L3NMOpenConfigServiceHandler(_ServiceHandler): service_short_uuid = service_uuid.split('-')[-1] network_instance_name = '{:s}-NetInst'.format(service_short_uuid) + settings : TreeNode = get_subnode(self.__resolver, self.__config, '/settings', None) + if settings is None: raise Exception('Unable to retrieve service settings') + json_settings : Dict = settings.value + bgp_route_target = json_settings.get('bgp_route_target', '0:0') # 65000:333 + results = [] for endpoint in endpoints: try: @@ -147,13 +225,15 @@ class L3NMOpenConfigServiceHandler(_ServiceHandler): else: device_uuid, endpoint_uuid, _ = endpoint # ignore topology_uuid by now - endpoint_settings_uri = 'device[{:s}]/endpoint[{:s}]/settings'.format(device_uuid, endpoint_uuid) + endpoint_settings_uri = '/device[{:s}]/endpoint[{:s}]/settings'.format(device_uuid, endpoint_uuid) endpoint_settings : TreeNode = get_subnode(self.__resolver, self.__config, endpoint_settings_uri, None) if endpoint_settings is None: raise Exception('Unable to retrieve service settings for endpoint({:s})'.format( str(endpoint_settings_uri))) json_endpoint_settings : Dict = endpoint_settings.value sub_interface_index = json_endpoint_settings.get('sub_interface_index', 0 ) # 1 + vlan_id = json_endpoint_settings.get('vlan_id', 1 ) # 400 + if_subif_name = '{:s}.{:d}'.format(endpoint_uuid, vlan_id) db_device : DeviceModel = get_object(self.__database, DeviceModel, device_uuid, raise_if_not_found=True) json_device = db_device.dump(include_config_rules=False, include_drivers=True, include_endpoints=True) @@ -161,8 +241,8 @@ class L3NMOpenConfigServiceHandler(_ServiceHandler): json_device_config_rules : List = json_device_config.setdefault('config_rules', []) json_device_config_rules.extend([ config_rule_delete( - '/network_instance[{:s}]/interface[{:s}]'.format(network_instance_name, endpoint_uuid), { - 'name': network_instance_name, 'id': endpoint_uuid + '/network_instance[{:s}]/interface[{:s}]'.format(network_instance_name, if_subif_name), { + 'name': network_instance_name, 'id': if_subif_name, }), config_rule_delete( '/interface[{:s}]/subinterface[{:d}]'.format(endpoint_uuid, sub_interface_index), { @@ -173,9 +253,70 @@ class L3NMOpenConfigServiceHandler(_ServiceHandler): 'name': endpoint_uuid, }), config_rule_delete( - '/network_instance[{:s}]/table_connections'.format(network_instance_name), { + '/network_instance[{:s}]/table_connections[DIRECTLY_CONNECTED][BGP][IPV4]'.format( + network_instance_name), { + 'name': network_instance_name, 'src_protocol': 'DIRECTLY_CONNECTED', 'dst_protocol': 'BGP', + 'address_family': 'IPV4', + }), + config_rule_delete( + '/network_instance[{:s}]/table_connections[STATIC][BGP][IPV4]'.format(network_instance_name), { + 'name': network_instance_name, 'src_protocol': 'STATIC', 'dst_protocol': 'BGP', + 'address_family': 'IPV4', + }), + config_rule_delete( + '/network_instance[{:s}]/protocols[BGP]'.format(network_instance_name), { + 'name': network_instance_name, 'identifier': 'BGP', 'protocol_name': 'BGP', + }), + config_rule_delete( + # pylint: disable=duplicate-string-formatting-argument + '/network_instance[{:s}]/inter_instance_policies[{:s}_import]'.format( + network_instance_name, network_instance_name), { + 'name': network_instance_name, + }), + config_rule_delete( + '/routing_policy/policy_definition[{:s}_import]/statement[{:s}]'.format( + network_instance_name, '3'), { + 'policy_name': '{:s}_import'.format(network_instance_name), 'statement_name': '3', + }), + config_rule_delete( + '/routing_policy/policy_definition[{:s}_import]'.format(network_instance_name), { + 'policy_name': '{:s}_import'.format(network_instance_name), + }), + config_rule_delete( + '/routing_policy/bgp_defined_set[{:s}_rt_import][route-target:{:s}]'.format( + network_instance_name, bgp_route_target), { + 'ext_community_set_name': '{:s}_rt_import'.format(network_instance_name), + 'ext_community_member' : 'route-target:{:s}'.format(bgp_route_target), + }), + config_rule_delete( + '/routing_policy/bgp_defined_set[{:s}_rt_import]'.format(network_instance_name), { + 'ext_community_set_name': '{:s}_rt_import'.format(network_instance_name), + }), + config_rule_delete( + # pylint: disable=duplicate-string-formatting-argument + '/network_instance[{:s}]/inter_instance_policies[{:s}_export]'.format( + network_instance_name, network_instance_name), { 'name': network_instance_name, }), + config_rule_delete( + '/routing_policy/policy_definition[{:s}_export]/statement[{:s}]'.format( + network_instance_name, '3'), { + 'policy_name': '{:s}_export'.format(network_instance_name), 'statement_name': '3', + }), + config_rule_delete( + '/routing_policy/policy_definition[{:s}_export]'.format(network_instance_name), { + 'policy_name': '{:s}_export'.format(network_instance_name), + }), + config_rule_delete( + '/routing_policy/bgp_defined_set[{:s}_rt_export][route-target:{:s}]'.format( + network_instance_name, bgp_route_target), { + 'ext_community_set_name': '{:s}_rt_export'.format(network_instance_name), + 'ext_community_member' : 'route-target:{:s}'.format(bgp_route_target), + }), + config_rule_delete( + '/routing_policy/bgp_defined_set[{:s}_rt_export]'.format(network_instance_name), { + 'ext_community_set_name': '{:s}_rt_export'.format(network_instance_name), + }), config_rule_delete( '/network_instance[{:s}]'.format(network_instance_name), { 'name': network_instance_name diff --git a/src/service/tests/ServiceHandler_L3NM_EMU.py b/src/service/tests/ServiceHandler_L3NM_EMU.py index c6d4ae229..0ac5fbf24 100644 --- a/src/service/tests/ServiceHandler_L3NM_EMU.py +++ b/src/service/tests/ServiceHandler_L3NM_EMU.py @@ -106,14 +106,16 @@ SERVICE_R1_R3_CONSTRAINTS = [ ] SERVICE_R1_R3_CONFIG_RULES = [ json_config_rule_set( - 'settings', - {'route_distinguisher': '60001:801', 'mtu': 1512, 'address_families': ['IPV4']}), + '/settings', + {'mtu': 1512, 'address_families': ['IPV4'], 'bgp_as': 65000, 'bgp_route_target': '65000:333'}), json_config_rule_set( - 'device[{:s}]/endpoint[{:s}]/settings'.format(DEVICE_R1_UUID, ENDPOINT_ID_R1_EP100['endpoint_uuid']['uuid']), - {'router_id': '10.0.0.1', 'sub_interface_index': 1}), + '/device[{:s}]/endpoint[{:s}]/settings'.format(DEVICE_R1_UUID, ENDPOINT_ID_R1_EP100['endpoint_uuid']['uuid']), + {'router_id': '10.10.10.1', 'route_distinguisher': '65000:123', 'sub_interface_index': 400, 'vlan_id': 400, + 'address_ip': '3.3.2.1', 'address_prefix': 24}), json_config_rule_set( - 'device[{:s}]/endpoint[{:s}]/settings'.format(DEVICE_R3_UUID, ENDPOINT_ID_R3_EP100['endpoint_uuid']['uuid']), - {'router_id': '10.0.0.3', 'sub_interface_index': 1}), + '/device[{:s}]/endpoint[{:s}]/settings'.format(DEVICE_R3_UUID, ENDPOINT_ID_R3_EP100['endpoint_uuid']['uuid']), + {'router_id': '20.20.20.1', 'route_distinguisher': '65000:321', 'sub_interface_index': 400, 'vlan_id': 500, + 'address_ip': '3.3.1.1', 'address_prefix': 24}), ] SERVICE_R1_R3_ID = json_service_id(SERVICE_R1_R3_UUID, context_id=CONTEXT_ID) SERVICE_R1_R3_DESCRIPTOR = json_service_l3nm_planned(SERVICE_R1_R3_UUID) diff --git a/src/service/tests/ServiceHandler_L3NM_OC.py b/src/service/tests/ServiceHandler_L3NM_OC.py index c67323485..0797a4af5 100644 --- a/src/service/tests/ServiceHandler_L3NM_OC.py +++ b/src/service/tests/ServiceHandler_L3NM_OC.py @@ -28,13 +28,13 @@ SERVICE_HANDLER_NAME = 'l3nm_openconfig' def json_endpoint_ids(device_id : Dict, endpoint_descriptors : List[Tuple[str, str]]): return [ - json_endpoint_id(device_id, ep_uuid, topology_id=TOPOLOGY_ID) + json_endpoint_id(device_id, ep_uuid) for ep_uuid, _ in endpoint_descriptors ] def json_endpoints(device_id : Dict, endpoint_descriptors : List[Tuple[str, str]]): return [ - json_endpoint(device_id, ep_uuid, ep_type, topology_id=TOPOLOGY_ID, kpi_sample_types=PACKET_PORT_SAMPLE_TYPES) + json_endpoint(device_id, ep_uuid, ep_type, kpi_sample_types=PACKET_PORT_SAMPLE_TYPES) for ep_uuid, ep_type in endpoint_descriptors ] @@ -102,7 +102,6 @@ LINK_R1_O1_UUID = '{:s}/{:s}-{:s}/{:s}'.format( LINK_R1_O1_ID = json_link_id(LINK_R1_O1_UUID) LINK_R1_O1 = json_link(LINK_R1_O1_UUID, [ENDPOINT_ID_R1_EP1, ENDPOINT_ID_O1_EP1]) - LINK_R2_O1_UUID = '{:s}/{:s}-{:s}/{:s}'.format( DEVICE_R2_UUID, ENDPOINT_ID_R2_EP1['endpoint_uuid']['uuid'], DEVICE_O1_UUID, ENDPOINT_ID_O1_EP2['endpoint_uuid']['uuid']) @@ -121,14 +120,16 @@ SERVICE_R1_R2_CONSTRAINTS = [ ] SERVICE_R1_R2_CONFIG_RULES = [ json_config_rule_set( - 'settings', - {'route_distinguisher': '60001:801', 'mtu': 1512, 'address_families': ['IPV4']}), + '/settings', + {'mtu': 1512, 'address_families': ['IPV4'], 'bgp_as': 65000, 'bgp_route_target': '65000:333'}), json_config_rule_set( - 'device[{:s}]/endpoint[{:s}]/settings'.format(DEVICE_R1_UUID, ENDPOINT_ID_R1_EP100['endpoint_uuid']['uuid']), - {'router_id': '10.0.0.1', 'sub_interface_index': 1}), + '/device[{:s}]/endpoint[{:s}]/settings'.format(DEVICE_R1_UUID, ENDPOINT_ID_R1_EP100['endpoint_uuid']['uuid']), + {'router_id': '10.10.10.1', 'route_distinguisher': '65000:123', 'sub_interface_index': 400, 'vlan_id': 400, + 'address_ip': '3.3.2.1', 'address_prefix': 24}), json_config_rule_set( - 'device[{:s}]/endpoint[{:s}]/settings'.format(DEVICE_R2_UUID, ENDPOINT_ID_R2_EP100['endpoint_uuid']['uuid']), - {'router_id': '10.0.0.3', 'sub_interface_index': 1}), + '/device[{:s}]/endpoint[{:s}]/settings'.format(DEVICE_R2_UUID, ENDPOINT_ID_R2_EP100['endpoint_uuid']['uuid']), + {'router_id': '20.20.20.1', 'route_distinguisher': '65000:321', 'sub_interface_index': 400, 'vlan_id': 500, + 'address_ip': '3.3.1.1', 'address_prefix': 24}), ] SERVICE_R1_R2_ID = json_service_id(SERVICE_R1_R2_UUID, context_id=CONTEXT_ID) SERVICE_R1_R2_DESCRIPTOR = json_service_l3nm_planned(SERVICE_R1_R2_UUID) diff --git a/src/start_webui_dev_mode.sh b/src/start_webui_dev_mode.sh index d9e143b48..74540bcb3 100755 --- a/src/start_webui_dev_mode.sh +++ b/src/start_webui_dev_mode.sh @@ -14,11 +14,13 @@ # for development purposes only -export CONTEXTSERVICE_SERVICE_HOST=`kubectl get service/contextservice -n tf-dev -o jsonpath='{.spec.clusterIP}'` +K8S_NAMESPACE=${K8S_NAMESPACE:-'tf-dev'} + +export CONTEXTSERVICE_SERVICE_HOST=`kubectl get service/contextservice -n ${K8S_NAMESPACE} -o jsonpath='{.spec.clusterIP}'` echo Context IP: $CONTEXTSERVICE_SERVICE_HOST -export DEVICESERVICE_SERVICE_HOST=`kubectl get service/deviceservice -n tf-dev -o jsonpath='{.spec.clusterIP}'` +export DEVICESERVICE_SERVICE_HOST=`kubectl get service/deviceservice -n ${K8S_NAMESPACE} -o jsonpath='{.spec.clusterIP}'` echo Device IP: $DEVICESERVICE_SERVICE_HOST diff --git a/src/tests/ofc22/.gitignore b/src/tests/ofc22/.gitignore new file mode 100644 index 000000000..0a3f4400d --- /dev/null +++ b/src/tests/ofc22/.gitignore @@ -0,0 +1,2 @@ +# Add here your files containing confidential testbed details such as IP addresses, ports, usernames, passwords, etc. +descriptors_real.json diff --git a/src/tests/ofc22/descriptors_emulated.json b/src/tests/ofc22/descriptors_emulated.json new file mode 100644 index 000000000..3905fbc59 --- /dev/null +++ b/src/tests/ofc22/descriptors_emulated.json @@ -0,0 +1,108 @@ +{ + "contexts": [ + { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "topology_ids": [], + "service_ids": [] + } + ], + "topologies": [ + { + "topology_id": {"topology_uuid": {"uuid": "admin"}, "context_id": {"context_uuid": {"uuid": "admin"}}}, + "device_ids": [], + "link_ids": [] + } + ], + "devices": [ + { + "device_id": {"device_uuid": {"uuid": "R1-INF"}}, + "device_type": "emu-packet-router", + "device_config": {"config_rules": [ + {"action": 1, "resource_key": "_connect/address", "resource_value": "127.0.0.1"}, + {"action": 1, "resource_key": "_connect/port", "resource_value": "0"}, + {"action": 1, "resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"13/0/0\"}, {\"sample_types\": [101, 102, 201, 202], \"type\": \"copper\", \"uuid\": \"13/1/2\"}]}"} + ]}, + "device_operational_status": 1, + "device_drivers": [0], + "device_endpoints": [] + }, + { + "device_id": {"device_uuid": {"uuid": "R2-EMU"}}, + "device_type": "emu-packet-router", + "device_config": {"config_rules": [ + {"action": 1, "resource_key": "_connect/address", "resource_value": "127.0.0.1"}, + {"action": 1, "resource_key": "_connect/port", "resource_value": "0"}, + {"action": 1, "resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"13/0/0\"}, {\"sample_types\": [101, 102, 201, 202], \"type\": \"copper\", \"uuid\": \"13/1/2\"}]}"} + ]}, + "device_operational_status": 1, + "device_drivers": [0], + "device_endpoints": [] + }, + { + "device_id": {"device_uuid": {"uuid": "R3-INF"}}, + "device_type": "emu-packet-router", + "device_config": {"config_rules": [ + {"action": 1, "resource_key": "_connect/address", "resource_value": "127.0.0.1"}, + {"action": 1, "resource_key": "_connect/port", "resource_value": "0"}, + {"action": 1, "resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"13/0/0\"}, {\"sample_types\": [101, 102, 201, 202], \"type\": \"copper\", \"uuid\": \"13/1/2\"}]}"} + ]}, + "device_operational_status": 1, + "device_drivers": [0], + "device_endpoints": [] + }, + { + "device_id": {"device_uuid": {"uuid": "R4-EMU"}}, + "device_type": "emu-packet-router", + "device_config": {"config_rules": [ + {"action": 1, "resource_key": "_connect/address", "resource_value": "127.0.0.1"}, + {"action": 1, "resource_key": "_connect/port", "resource_value": "0"}, + {"action": 1, "resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"13/0/0\"}, {\"sample_types\": [101, 102, 201, 202], \"type\": \"copper\", \"uuid\": \"13/1/2\"}]}"} + ]}, + "device_operational_status": 1, + "device_drivers": [0], + "device_endpoints": [] + }, + { + "device_id": {"device_uuid": {"uuid": "O1-OLS"}}, + "device_type": "emu-optical-line-system", + "device_config": {"config_rules": [ + {"action": 1, "resource_key": "_connect/address", "resource_value": "127.0.0.1"}, + {"action": 1, "resource_key": "_connect/port", "resource_value": "0"}, + {"action": 1, "resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"aade6001-f00b-5e2f-a357-6a0a9d3de870\"}, {\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"eb287d83-f05e-53ec-ab5a-adf6bd2b5418\"}, {\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"0ef74f99-1acc-57bd-ab9d-4b958b06c513\"}, {\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"50296d99-58cc-5ce7-82f5-fc8ee4eec2ec\"}]}"} + ]}, + "device_operational_status": 1, + "device_drivers": [0], + "device_endpoints": [] + } + ], + "links": [ + { + "link_id": {"link_uuid": {"uuid": "R1-INF/13/0/0==O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870"}}, + "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "R1-INF"}}, "endpoint_uuid": {"uuid": "13/0/0"}}, + {"device_id": {"device_uuid": {"uuid": "O1-OLS"}}, "endpoint_uuid": {"uuid": "aade6001-f00b-5e2f-a357-6a0a9d3de870"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "R2-EMU/13/0/0==O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418"}}, + "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "R2-EMU"}}, "endpoint_uuid": {"uuid": "13/0/0"}}, + {"device_id": {"device_uuid": {"uuid": "O1-OLS"}}, "endpoint_uuid": {"uuid": "eb287d83-f05e-53ec-ab5a-adf6bd2b5418"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "R3-INF/13/0/0==O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513"}}, + "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "R3-INF"}}, "endpoint_uuid": {"uuid": "13/0/0"}}, + {"device_id": {"device_uuid": {"uuid": "O1-OLS"}}, "endpoint_uuid": {"uuid": "0ef74f99-1acc-57bd-ab9d-4b958b06c513"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "R4-EMU/13/0/0==O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec"}}, + "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "R4-EMU"}}, "endpoint_uuid": {"uuid": "13/0/0"}}, + {"device_id": {"device_uuid": {"uuid": "O1-OLS"}}, "endpoint_uuid": {"uuid": "50296d99-58cc-5ce7-82f5-fc8ee4eec2ec"}} + ] + } + ] +} diff --git a/src/tests/ofc22/redeploy_webui.sh b/src/tests/ofc22/redeploy_webui.sh new file mode 100755 index 000000000..975f84a9d --- /dev/null +++ b/src/tests/ofc22/redeploy_webui.sh @@ -0,0 +1,59 @@ +#!/bin/bash +# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +export COMPONENT="webui" +export IMAGE_TAG="ofc22" +export K8S_NAMESPACE="ofc22" +export K8S_HOSTNAME="kubernetes-master" +export GRAFANA_PASSWORD="admin123+" + +# Constants +TMP_FOLDER="./tmp" + +# Create a tmp folder for files modified during the deployment +TMP_MANIFESTS_FOLDER="$TMP_FOLDER/manifests" +mkdir -p $TMP_MANIFESTS_FOLDER +TMP_LOGS_FOLDER="$TMP_FOLDER/logs" +mkdir -p $TMP_LOGS_FOLDER + +echo "Processing '$COMPONENT' component..." +IMAGE_NAME="$COMPONENT:$IMAGE_TAG" + +echo " Building Docker image..." +BUILD_LOG="$TMP_LOGS_FOLDER/build_${COMPONENT}.log" +docker build -t "$IMAGE_NAME" -f ./src/"$COMPONENT"/Dockerfile ./src/ > "$BUILD_LOG" + +sleep 1 + +echo " Deploying '$COMPONENT' component to Kubernetes..." +kubectl --namespace $K8S_NAMESPACE scale deployment --replicas=0 ${COMPONENT}service +kubectl --namespace $K8S_NAMESPACE scale deployment --replicas=1 ${COMPONENT}service +printf "\n" + +sleep 1 + +echo "Waiting for '$COMPONENT' component..." +kubectl wait --namespace $K8S_NAMESPACE --for='condition=available' --timeout=300s deployment/${COMPONENT}service +printf "\n" + +echo "Configuring DataStores and Dashboards..." +./configure_dashboards.sh +printf "\n\n" + +echo "Reporting Deployment..." +kubectl --namespace $K8S_NAMESPACE get all +printf "\n" + +echo "Done!" diff --git a/src/tests/ofc22/run_test_01_bootstrap.sh b/src/tests/ofc22/run_test_01_bootstrap.sh index 042e0a0a2..634fed02d 100755 --- a/src/tests/ofc22/run_test_01_bootstrap.sh +++ b/src/tests/ofc22/run_test_01_bootstrap.sh @@ -28,7 +28,9 @@ rm -f $COVERAGEFILE # Set the name of the Kubernetes namespace and hostname to use. K8S_NAMESPACE="ofc22" -K8S_HOSTNAME="kubernetes-master" +# K8S_HOSTNAME="kubernetes-master" +# dynamically gets the name of the K8s master node +K8S_HOSTNAME=`kubectl get nodes --selector=node-role.kubernetes.io/master | tr -s " " | cut -f1 -d" " | sed -n '2 p'` # Flush Context database kubectl --namespace $K8S_NAMESPACE exec -it deployment/contextservice --container redis -- redis-cli FLUSHALL diff --git a/src/tests/ofc22/run_test_02_create_service.sh b/src/tests/ofc22/run_test_02_create_service.sh index b212b687c..5498f91f2 100755 --- a/src/tests/ofc22/run_test_02_create_service.sh +++ b/src/tests/ofc22/run_test_02_create_service.sh @@ -22,7 +22,8 @@ COVERAGEFILE=$PROJECTDIR/coverage/.coverage # Set the name of the Kubernetes namespace and hostname to use. K8S_NAMESPACE="ofc22" -K8S_HOSTNAME="kubernetes-master" +# dynamically gets the name of the K8s master node +K8S_HOSTNAME=`kubectl get nodes --selector=node-role.kubernetes.io/master | tr -s " " | cut -f1 -d" " | sed -n '2 p'` export CONTEXTSERVICE_SERVICE_HOST=$(kubectl get node $K8S_HOSTNAME -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}') export CONTEXTSERVICE_SERVICE_PORT_GRPC=$(kubectl get service contextservice-public --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==1010)].nodePort}') diff --git a/src/tests/ofc22/run_test_03_delete_service.sh b/src/tests/ofc22/run_test_03_delete_service.sh index d0c3127ad..7a8e3a662 100755 --- a/src/tests/ofc22/run_test_03_delete_service.sh +++ b/src/tests/ofc22/run_test_03_delete_service.sh @@ -22,7 +22,8 @@ COVERAGEFILE=$PROJECTDIR/coverage/.coverage # Set the name of the Kubernetes namespace and hostname to use. K8S_NAMESPACE="ofc22" -K8S_HOSTNAME="kubernetes-master" +# dynamically gets the name of the K8s master node +K8S_HOSTNAME=`kubectl get nodes --selector=node-role.kubernetes.io/master | tr -s " " | cut -f1 -d" " | sed -n '2 p'` export CONTEXTSERVICE_SERVICE_HOST=$(kubectl get node $K8S_HOSTNAME -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}') export CONTEXTSERVICE_SERVICE_PORT_GRPC=$(kubectl get service contextservice-public --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==1010)].nodePort}') diff --git a/src/tests/ofc22/run_test_04_cleanup.sh b/src/tests/ofc22/run_test_04_cleanup.sh index c31774523..5995a804f 100755 --- a/src/tests/ofc22/run_test_04_cleanup.sh +++ b/src/tests/ofc22/run_test_04_cleanup.sh @@ -22,7 +22,8 @@ COVERAGEFILE=$PROJECTDIR/coverage/.coverage # Set the name of the Kubernetes namespace and hostname to use. K8S_NAMESPACE="ofc22" -K8S_HOSTNAME="kubernetes-master" +# dynamically gets the name of the K8s master node +K8S_HOSTNAME=`kubectl get nodes --selector=node-role.kubernetes.io/master | tr -s " " | cut -f1 -d" " | sed -n '2 p'` export CONTEXTSERVICE_SERVICE_HOST=$(kubectl get node $K8S_HOSTNAME -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}') export CONTEXTSERVICE_SERVICE_PORT_GRPC=$(kubectl get service contextservice-public --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==1010)].nodePort}') diff --git a/src/tests/ofc22/tests/BuildDescriptors.py b/src/tests/ofc22/tests/BuildDescriptors.py new file mode 100644 index 000000000..5c5419190 --- /dev/null +++ b/src/tests/ofc22/tests/BuildDescriptors.py @@ -0,0 +1,35 @@ +# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import copy, json, sys +from .Objects import CONTEXTS, DEVICES, LINKS, TOPOLOGIES + +def main(): + with open('tests/ofc22/descriptors_emulated.json', 'w', encoding='UTF-8') as f: + devices = [] + for device,connect_rules in DEVICES: + device = copy.deepcopy(device) + device['device_config']['config_rules'].extend(connect_rules) + devices.append(device) + + f.write(json.dumps({ + 'contexts': CONTEXTS, + 'topologies': TOPOLOGIES, + 'devices': devices, + 'links': LINKS + })) + return 0 + +if __name__ == '__main__': + sys.exit(main()) diff --git a/src/tests/ofc22/tests/LoadDescriptors.py b/src/tests/ofc22/tests/LoadDescriptors.py new file mode 100644 index 000000000..4d3af78f5 --- /dev/null +++ b/src/tests/ofc22/tests/LoadDescriptors.py @@ -0,0 +1,40 @@ +# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import json, logging, sys +from common.Settings import get_setting +from context.client.ContextClient import ContextClient +from context.proto.context_pb2 import Context, Device, Link, Topology +from device.client.DeviceClient import DeviceClient + +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +def main(): + context_client = ContextClient( + get_setting('CONTEXTSERVICE_SERVICE_HOST'), get_setting('CONTEXTSERVICE_SERVICE_PORT_GRPC')) + device_client = DeviceClient( + get_setting('DEVICESERVICE_SERVICE_HOST'), get_setting('DEVICESERVICE_SERVICE_PORT_GRPC')) + + with open('tests/ofc22/descriptors.json', 'r', encoding='UTF-8') as f: + descriptors = json.loads(f.read()) + + for context in descriptors['contexts' ]: context_client.SetContext (Context (**context )) + for topology in descriptors['topologies']: context_client.SetTopology(Topology(**topology)) + for device in descriptors['devices' ]: device_client .AddDevice (Device (**device )) + for link in descriptors['links' ]: context_client.SetLink (Link (**link )) + return 0 + +if __name__ == '__main__': + sys.exit(main()) diff --git a/src/tests/ofc22/tests/Objects.py b/src/tests/ofc22/tests/Objects.py index 6205b5e4a..fd48210fa 100644 --- a/src/tests/ofc22/tests/Objects.py +++ b/src/tests/ofc22/tests/Objects.py @@ -181,20 +181,29 @@ LINK_R4_O1 = json_link(LINK_R4_O1_UUID, [ENDPOINT_ID_R4_13_0_0, ENDPOINT_ID # ----- WIM Service Settings ------------------------------------------------------------------------------------------- -def endpoint_id__to__sep_id(endpoint_id): +def compose_service_endpoint_id(endpoint_id): device_uuid = endpoint_id['device_id']['device_uuid']['uuid'] endpoint_uuid = endpoint_id['endpoint_uuid']['uuid'] - return '{:s}:{:s}'.format(device_uuid, endpoint_uuid) + return ':'.join([device_uuid, endpoint_uuid]) -WIM_SEP_R1_ID = endpoint_id__to__sep_id(ENDPOINT_ID_R1_13_1_2) -WIM_SEP_R1_IP = '10.0.0.1' -WIM_SEP_R1_SITE_ID = '1' -WIM_SEP_R1_BEARER = '{:s}:{:s}'.format(WIM_SEP_R1_ID, WIM_SEP_R1_IP) - -WIM_SEP_R3_ID = endpoint_id__to__sep_id(ENDPOINT_ID_R3_13_1_2) -WIM_SEP_R3_IP = '10.0.0.2' -WIM_SEP_R3_SITE_ID = '2' -WIM_SEP_R3_BEARER = '{:s}:{:s}'.format(WIM_SEP_R3_ID, WIM_SEP_R3_IP) +def compose_bearer(endpoint_id, router_id, route_distinguisher): + device_uuid = endpoint_id['device_id']['device_uuid']['uuid'] + endpoint_uuid = endpoint_id['endpoint_uuid']['uuid'] + return '#'.join([device_uuid, endpoint_uuid, router_id, route_distinguisher]) + +WIM_SEP_R1_ID = compose_service_endpoint_id(ENDPOINT_ID_R1_13_1_2) +WIM_SEP_R1_ROUTER_ID = '10.10.10.1' +WIM_SEP_R1_ROUTER_DIST = '65000:111' +WIM_SEP_R1_SITE_ID = '1' +WIM_SEP_R1_BEARER = compose_bearer(ENDPOINT_ID_R1_13_1_2, WIM_SEP_R1_ROUTER_ID, WIM_SEP_R1_ROUTER_DIST) +WIM_SRV_R1_VLAN_ID = 400 + +WIM_SEP_R3_ID = compose_service_endpoint_id(ENDPOINT_ID_R3_13_1_2) +WIM_SEP_R3_ROUTER_ID = '20.20.20.1' +WIM_SEP_R3_ROUTER_DIST = '65000:222' +WIM_SEP_R3_SITE_ID = '2' +WIM_SEP_R3_BEARER = compose_bearer(ENDPOINT_ID_R3_13_1_2, WIM_SEP_R3_ROUTER_ID, WIM_SEP_R3_ROUTER_DIST) +WIM_SRV_R3_VLAN_ID = 500 WIM_USERNAME = 'admin' WIM_PASSWORD = 'admin' @@ -206,14 +215,13 @@ WIM_MAPPING = [ 'service_mapping_info': {'bearer': {'bearer-reference': WIM_SEP_R3_BEARER}, 'site-id': WIM_SEP_R3_SITE_ID}}, ] WIM_SERVICE_TYPE = 'ELINE' -WIM_SERVICE_VLAN_ID = 1234 WIM_SERVICE_CONNECTION_POINTS = [ {'service_endpoint_id': WIM_SEP_R1_ID, 'service_endpoint_encapsulation_type': 'dot1q', - 'service_endpoint_encapsulation_info': {'vlan': WIM_SERVICE_VLAN_ID}}, + 'service_endpoint_encapsulation_info': {'vlan': WIM_SRV_R1_VLAN_ID}}, {'service_endpoint_id': WIM_SEP_R3_ID, 'service_endpoint_encapsulation_type': 'dot1q', - 'service_endpoint_encapsulation_info': {'vlan': WIM_SERVICE_VLAN_ID}}, + 'service_endpoint_encapsulation_info': {'vlan': WIM_SRV_R3_VLAN_ID}}, ] # ----- Object Collections --------------------------------------------------------------------------------------------- diff --git a/src/webui/Config.py b/src/webui/Config.py index f6fc9125f..e7720a405 100644 --- a/src/webui/Config.py +++ b/src/webui/Config.py @@ -25,6 +25,7 @@ WEBUI_SERVICE_PORT = 8004 METRICS_PORT = 9192 SECRET_KEY = '>s&}24@{]]#k3&^5$f3#?6?h3{W@[}/7z}2pa]>{3&5%RP<)[(' +MAX_CONTENT_LENGTH = 1024*1024 HOST = '0.0.0.0' # accepts connections coming from any ADDRESS diff --git a/src/webui/Dockerfile b/src/webui/Dockerfile index 734abf5b5..c22ba2e8b 100644 --- a/src/webui/Dockerfile +++ b/src/webui/Dockerfile @@ -43,7 +43,7 @@ ENV VIRTUAL_ENV=/home/webui/venv RUN python3 -m venv ${VIRTUAL_ENV} ENV PATH="${VIRTUAL_ENV}/bin:${PATH}" COPY --chown=webui:webui webui/requirements.in /home/webui/teraflow/webui/requirements.in -RUN pip install --upgrade "pip<22" setuptools wheel pip-tools && pip-compile --output-file=webui/requirements.txt webui/requirements.in +RUN pip install --upgrade pip setuptools wheel pip-tools && pip-compile --output-file=webui/requirements.txt webui/requirements.in RUN pip install -r webui/requirements.txt # Add files into working directory diff --git a/src/webui/grafana_dashboard.json b/src/webui/grafana_dashboard.json index c9092aca5..afe3ea126 100644 --- a/src/webui/grafana_dashboard.json +++ b/src/webui/grafana_dashboard.json @@ -24,7 +24,7 @@ "fiscalYearStartMonth": 0, "gnetId": null, "graphTooltip": 0, - "iteration": 1643919736138, + "iteration": 1646406031197, "links": [], "liveNow": false, "panels": [ @@ -53,7 +53,7 @@ "scaleDistribution": { "type": "linear" }, - "showPoints": "always", + "showPoints": "never", "spanNulls": false, "stacking": { "group": "A", @@ -91,11 +91,15 @@ }, { "id": "unit", - "value": "short" + "value": "pps" }, { "id": "custom.axisLabel", - "value": "Packets" + "value": "Packets / sec" + }, + { + "id": "custom.axisSoftMin", + "value": 0 } ] }, @@ -111,11 +115,15 @@ }, { "id": "unit", - "value": "decbytes" + "value": "Bps" }, { "id": "custom.axisLabel", - "value": "Bytes" + "value": "Bytes / sec" + }, + { + "id": "custom.axisSoftMin", + "value": 0 } ] } @@ -219,10 +227,12 @@ "current": { "selected": true, "text": [ - "R1-INF" + "R1-INF", + "R3-INF" ], "value": [ - "R1-INF" + "R1-INF", + "R3-INF" ] }, "datasource": null, @@ -247,10 +257,12 @@ "current": { "selected": true, "text": [ - "EP100" + "13/2/0", + "13/2/1" ], "value": [ - "EP100" + "13/2/0", + "13/2/1" ] }, "datasource": null, @@ -301,7 +313,7 @@ ] }, "time": { - "from": "now-5m", + "from": "now-15m", "to": "now" }, "timepicker": {}, diff --git a/src/webui/service/__init__.py b/src/webui/service/__init__.py index 24579b3d7..d9755563a 100644 --- a/src/webui/service/__init__.py +++ b/src/webui/service/__init__.py @@ -13,7 +13,9 @@ # limitations under the License. import os -from flask import Flask, session +import json + +from flask import Flask, request, session from flask_healthz import healthz, HealthError from webui.proto.context_pb2 import Empty @@ -46,6 +48,10 @@ def readiness(): raise HealthError('Can\'t connect with the service: ' + e.details()) +def from_json(json_str): + return json.loads(json_str) + + def create_app(use_config=None): app = Flask(__name__) if use_config: @@ -67,6 +73,11 @@ def create_app(use_config=None): from webui.service.device.routes import device app.register_blueprint(device) + from webui.service.link.routes import link + app.register_blueprint(link) + + app.jinja_env.filters['from_json'] = from_json + app.jinja_env.globals.update(get_working_context=get_working_context) return app diff --git a/src/webui/service/__main__.py b/src/webui/service/__main__.py index 38bc0f790..5dd20aab7 100644 --- a/src/webui/service/__main__.py +++ b/src/webui/service/__main__.py @@ -16,7 +16,7 @@ import os, sys, logging from prometheus_client import start_http_server from common.Settings import wait_for_environment_variables from webui.service import create_app -from webui.Config import WEBUI_SERVICE_PORT, LOG_LEVEL, METRICS_PORT, HOST, SECRET_KEY, DEBUG +from webui.Config import MAX_CONTENT_LENGTH, WEBUI_SERVICE_PORT, LOG_LEVEL, METRICS_PORT, HOST, SECRET_KEY, DEBUG def main(): service_port = os.environ.get('WEBUISERVICE_SERVICE_PORT', WEBUI_SERVICE_PORT) @@ -37,7 +37,10 @@ def main(): start_http_server(metrics_port) - app = create_app(use_config={'SECRET_KEY': SECRET_KEY}) + app = create_app(use_config={ + 'SECRET_KEY': SECRET_KEY, + 'MAX_CONTENT_LENGTH': MAX_CONTENT_LENGTH, + }) app.run(host=host, port=service_port, debug=debug) logger.info('Bye') diff --git a/src/webui/service/device/routes.py b/src/webui/service/device/routes.py index 8a0e1cc0a..1f9a6783c 100644 --- a/src/webui/service/device/routes.py +++ b/src/webui/service/device/routes.py @@ -12,12 +12,12 @@ # See the License for the specific language governing permissions and # limitations under the License. -from flask import render_template, Blueprint, flash, session, redirect +from flask import render_template, Blueprint, flash, session, redirect, url_for from device.client.DeviceClient import DeviceClient from context.client.ContextClient import ContextClient from webui.Config import (CONTEXT_SERVICE_ADDRESS, CONTEXT_SERVICE_PORT, DEVICE_SERVICE_ADDRESS, DEVICE_SERVICE_PORT) -from webui.proto.context_pb2 import (ContextId, DeviceList, DeviceId, +from webui.proto.context_pb2 import (ContextId, DeviceList, DeviceId, Empty, Device, DeviceDriverEnum, DeviceOperationalStatusEnum, ConfigActionEnum, ConfigRule, TopologyIdList, TopologyList) from webui.service.device.forms import AddDeviceForm @@ -28,10 +28,12 @@ device_client: DeviceClient = DeviceClient(DEVICE_SERVICE_ADDRESS, DEVICE_SERVIC @device.get('/') def home(): - request: ContextId = ContextId() - request.context_uuid.uuid = session.get('context_uuid', '-') + context_uuid = session.get('context_uuid', '-') + if context_uuid == "-": + flash("Please select a context!", "warning") + return redirect(url_for("main.home")) context_client.connect() - response: DeviceList = context_client.ListDevices(request) + response: DeviceList = context_client.ListDevices(Empty()) context_client.close() return render_template('device/home.html', devices=response.devices, dde=DeviceDriverEnum, @@ -41,12 +43,6 @@ def home(): def add(): form = AddDeviceForm() - request: ContextId = ContextId() - request.context_uuid.uuid = session.get('context_uuid', '-') - context_client.connect() - response: TopologyIdList = context_client.ListTopologyIds(request) - context_client.close() - # listing enum values form.operational_status.choices = [(-1, 'Select...')] for key, value in DeviceOperationalStatusEnum.DESCRIPTOR.values_by_name.items(): @@ -94,7 +90,7 @@ def add(): device_client.close() flash(f'New device was created with ID "{response.device_uuid.uuid}".', 'success') - return redirect('/device/') + return redirect(url_for('device.home')) except Exception as e: flash(f'Problem adding the device. {e.details()}', 'danger') @@ -102,16 +98,18 @@ def add(): submit_text='Add New Device', device_driver_ids=device_driver_ids) -@device.route('detail/<device_uuid>', methods=['GET', 'POST']) +@device.route('detail/<path:device_uuid>', methods=['GET', 'POST']) def detail(device_uuid: str): request: DeviceId = DeviceId() request.device_uuid.uuid = device_uuid context_client.connect() response: Device = context_client.GetDevice(request) context_client.close() - return render_template('device/detail.html', device=response) + return render_template('device/detail.html', device=response, + dde=DeviceDriverEnum, + dose=DeviceOperationalStatusEnum) -@device.get('<device_uuid>/delete') +@device.get('<path:device_uuid>/delete') def delete(device_uuid): try: @@ -132,4 +130,4 @@ def delete(device_uuid): except Exception as e: flash(f'Problem deleting the device. {e.details()}', 'danger') - return redirect('/device/') + return redirect(url_for('device.home')) diff --git a/src/webui/service/link/__init__.py b/src/webui/service/link/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/webui/service/link/routes.py b/src/webui/service/link/routes.py new file mode 100644 index 000000000..91157a0b9 --- /dev/null +++ b/src/webui/service/link/routes.py @@ -0,0 +1,37 @@ +# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from flask import render_template, Blueprint, flash, session, redirect, url_for +from device.client.DeviceClient import DeviceClient +from context.client.ContextClient import ContextClient +from webui.Config import (CONTEXT_SERVICE_ADDRESS, CONTEXT_SERVICE_PORT) +from webui.proto.context_pb2 import (Empty, LinkList) + +link = Blueprint('link', __name__, url_prefix='/link') +context_client: ContextClient = ContextClient(CONTEXT_SERVICE_ADDRESS, CONTEXT_SERVICE_PORT) + +@link.get('/') +def home(): + context_uuid = session.get('context_uuid', '-') + if context_uuid == "-": + flash("Please select a context!", "warning") + return redirect(url_for("main.home")) + request: Empty = Empty() + context_client.connect() + response: LinkList = context_client.ListLinks(request) + context_client.close() + return render_template( + "link/home.html", + links=response.links, + ) \ No newline at end of file diff --git a/src/webui/service/main/forms.py b/src/webui/service/main/forms.py index 0dc80c7a2..abef11e06 100644 --- a/src/webui/service/main/forms.py +++ b/src/webui/service/main/forms.py @@ -14,12 +14,25 @@ # external imports from flask_wtf import FlaskForm -from wtforms import SelectField, SubmitField +from flask_wtf.file import FileAllowed +from wtforms import SelectField, FileField, SubmitField from wtforms.validators import DataRequired, Length class ContextForm(FlaskForm): - context = SelectField('Context', - choices=[], - validators=[DataRequired(), Length(min=1)]) - submit = SubmitField('Select') + context = SelectField( 'Context', + choices=[], + validators=[ + DataRequired(), + Length(min=1) + ]) + + submit = SubmitField('Submit') + + +class DescriptorForm(FlaskForm): + descriptors = FileField('Descriptors', + validators=[ + FileAllowed(['json'], 'JSON Descriptors only!') + ]) + submit = SubmitField('Submit') diff --git a/src/webui/service/main/routes.py b/src/webui/service/main/routes.py index 78247b3ca..54004220a 100644 --- a/src/webui/service/main/routes.py +++ b/src/webui/service/main/routes.py @@ -12,27 +12,61 @@ # See the License for the specific language governing permissions and # limitations under the License. +import json import logging import sys -from flask import render_template, Blueprint, flash, session -from webui.Config import CONTEXT_SERVICE_ADDRESS, CONTEXT_SERVICE_PORT +from flask import jsonify, redirect, render_template, Blueprint, flash, session, url_for, request +from webui.Config import (CONTEXT_SERVICE_ADDRESS, CONTEXT_SERVICE_PORT, + DEVICE_SERVICE_ADDRESS, DEVICE_SERVICE_PORT) from context.client.ContextClient import ContextClient -from webui.proto.context_pb2 import Empty -from webui.service.main.forms import ContextForm +from device.client.DeviceClient import DeviceClient +from webui.proto.context_pb2 import Context, Device, Empty, Link, Topology +from webui.service.main.forms import ContextForm, DescriptorForm main = Blueprint('main', __name__) context_client: ContextClient = ContextClient(CONTEXT_SERVICE_ADDRESS, CONTEXT_SERVICE_PORT) +device_client: DeviceClient = DeviceClient(DEVICE_SERVICE_ADDRESS, DEVICE_SERVICE_PORT) logger = logging.getLogger(__name__) +def process_descriptor(item_name_singluar, item_name_plural, grpc_method, grpc_class, items): + num_ok, num_err = 0, 0 + for item in items: + try: + grpc_method(grpc_class(**item)) + num_ok += 1 + except Exception as e: # pylint: disable=broad-except + flash(f'Unable to add {item_name_singluar} {str(item)}: {str(e)}', 'error') + num_err += 1 + if num_ok : flash(f'{str(num_ok)} {item_name_plural} added', 'success') + if num_err: flash(f'{str(num_err)} {item_name_plural} failed', 'danger') + +def process_descriptors(descriptors): + logger.warning(str(descriptors.data)) + logger.warning(str(descriptors.name)) + try: + logger.warning(str(request.files)) + descriptors_file = request.files[descriptors.name] + logger.warning(str(descriptors_file)) + descriptors_data = descriptors_file.read() + logger.warning(str(descriptors_data)) + descriptors = json.loads(descriptors_data) + logger.warning(str(descriptors)) + except Exception as e: # pylint: disable=broad-except + flash(f'Unable to load descriptor file: {str(e)}', 'danger') + return + + process_descriptor('Context', 'Contexts', context_client.SetContext, Context, descriptors['contexts' ]) + process_descriptor('Topology', 'Topologies', context_client.SetTopology, Topology, descriptors['topologies']) + process_descriptor('Device', 'Devices', device_client .AddDevice, Device, descriptors['devices' ]) + process_descriptor('Link', 'Links', context_client.SetLink, Link, descriptors['links' ]) + @main.route('/', methods=['GET', 'POST']) def home(): - # flash('This is an info message', 'info') - # flash('This is a danger message', 'danger') context_client.connect() + device_client.connect() response = context_client.ListContextIds(Empty()) - context_client.close() context_form: ContextForm = ContextForm() context_form.context.choices.append(('', 'Select...')) for context in response.context_ids: @@ -40,12 +74,52 @@ def home(): if context_form.validate_on_submit(): session['context_uuid'] = context_form.context.data flash(f'The context was successfully set to `{context_form.context.data}`.', 'success') + return redirect(url_for("main.home")) if 'context_uuid' in session: context_form.context.data = session['context_uuid'] + descriptor_form: DescriptorForm = DescriptorForm() + try: + if descriptor_form.validate_on_submit(): + process_descriptors(descriptor_form.descriptors) + return redirect(url_for("main.home")) + except Exception as e: + logger.exception('Descriptor load failed') + flash(f'Descriptor load failed: `{str(e)}`', 'danger') + finally: + context_client.close() + device_client.close() + return render_template('main/home.html', context_form=context_form, descriptor_form=descriptor_form) - return render_template('main/home.html', context_form=context_form) +@main.route('/topology', methods=['GET']) +def topology(): + context_client.connect() + try: + response = context_client.ListDevices(Empty()) + devices = [{ + 'id': device.device_id.device_uuid.uuid, + 'name': device.device_id.device_uuid.uuid, + 'type': device.device_type, + } for device in response.devices] + response = context_client.ListLinks(Empty()) + links = [{ + 'id': link.link_id.link_uuid.uuid, + 'source': link.link_endpoint_ids[0].device_id.device_uuid.uuid, + 'target': link.link_endpoint_ids[1].device_id.device_uuid.uuid, + } for link in response.links] + + return jsonify({'devices': devices, 'links': links}) + except: + logger.exception('Error retrieving topology') + finally: + context_client.close() @main.get('/about') def about(): return render_template('main/about.html') + + +@main.get('/resetsession') +def reset_session(): + session.clear() + return redirect(url_for("main.home")) diff --git a/src/webui/service/service/routes.py b/src/webui/service/service/routes.py index e41be7c4c..17efe1c09 100644 --- a/src/webui/service/service/routes.py +++ b/src/webui/service/service/routes.py @@ -13,7 +13,8 @@ # limitations under the License. import grpc -from flask import render_template, Blueprint, flash, session +from flask import current_app, redirect, render_template, Blueprint, flash, session, url_for +from context.proto.context_pb2 import Service, ServiceId from webui.Config import CONTEXT_SERVICE_ADDRESS, CONTEXT_SERVICE_PORT from context.client.ContextClient import ContextClient from webui.proto.context_pb2 import ContextId, ServiceList, ServiceTypeEnum, ServiceStatusEnum, ConfigActionEnum @@ -29,6 +30,9 @@ def home(): # flash('This is a danger message', 'danger') context_uuid = session.get('context_uuid', '-') + if context_uuid == "-": + flash("Please select a context!", "warning") + return redirect(url_for("main.home")) request: ContextId = ContextId() request.context_uuid.uuid = context_uuid context_client.connect() @@ -44,7 +48,8 @@ def home(): context_not_found = True context_client.close() - return render_template('service/home.html', services=services, context_not_found=context_not_found, + return render_template('service/home.html', services=services, + context_not_found=context_not_found, ste=ServiceTypeEnum, sse=ServiceStatusEnum) @@ -56,8 +61,27 @@ def add(): return render_template('service/home.html') -@service.get('detail/<service_uuid>') +@service.get('detail/<path:service_uuid>') def detail(service_uuid: str): - flash('Detail service route called', 'danger') - raise NotImplementedError() - return render_template('service/home.html') + context_uuid = session.get('context_uuid', '-') + if context_uuid == "-": + flash("Please select a context!", "warning") + return redirect(url_for("main.home")) + + request: ServiceId = ServiceId() + request.service_uuid.uuid = service_uuid + request.context_id.context_uuid.uuid = context_uuid + try: + context_client.connect() + response: Service = context_client.GetService(request) + context_client.close() + except Exception as e: + flash('The system encountered an error and cannot show the details of this service.', 'warning') + current_app.logger.exception(e) + return redirect(url_for('service.home')) + return render_template('service/detail.html', service=response) + + +@service.get('delete/<path:service_uuid>') +def delete(service_uuid: str): + pass diff --git a/src/webui/service/static/partners.png b/src/webui/service/static/partners.png index f88680212f68cdb4c17ad0de55b9d22ef9276a23..0c2b89eb9321caf8d1f1d63e0e20fd3e4b6ddeb7 100644 GIT binary patch literal 200855 zcmeFZg;!Vk7d4DMpojqmA!E>jN+SZI0}9d|0wU7VC2gZ1q9C0D(jk(P7NB&4NFyj+ z((!%v9mi)qf5ZF!SZmhE2;Y0}=bW?mKKq<Ij}_!DQBu%Skdcv5N?ra(iHz*8CuC%s ztN+@J|8gXbz7hZ0WT$lL0$D~K{RqC<YAh}*PDYmHw{uN@8@?yEzN~3SM#kVp{Ikh# zXvUC?jPy$CA90miy5rr8>eOFWN$abgE0ZZjh30kFB^4FVaC!?}YvYSaN@6vt*<^Rs z?&+b^i8K;5*U$eWGxlS>dHs4uLVoDsisuq%&M{W<Bo-E?6c#34)Oo=(M_Q-CC4YbE z(FgGU`7_zjZ7JG6-`uu+cY^ZIH|K?}`EUR8O$_~MsV#rLQP>?4zv<66tUF|y{`{Hj z#TI7M|NBkVrvF{$e~0$}+e~8>eoIwn+_kh+Hs&`wH``O<#Qty5c*y)N7{ebITt03T zeIOkaUYQ>4)~xUKuuk!Gwanluy)@_~=Fs+UA&EZxw>)FU-3Cth&RO+EeHnW*TlOWC z_IIJh{Q6yrRdOTDrf#H8rii+e)?v$z|5fX&%75!w!Exi`3Ez#}D}~e3bgSnmf7hjg z%YQdg>FGbblw4fAc8zpIx2(`&xU{aE;@}2d$?~1%mi#-v@qtz3-z(mJGbkn%;L)nN zx2s6|2Q$^Lpx##NzJBGmb)8oK)%*Yb+#mZ{Ouu)3iJS0N{mQp$9hJ>>|L&#G9rYF= zp0|F6xJ!_BCuW>;8h5EHx~>-z<is*q;ap!<v%@NqPxmcVv0<I@xzA2&pI6tuwL7Js zi@I9y_=!xlYk0uOi<-+^J<BhBPSIFNlZw+Hdj?Og3A4@jci$T~(3Ve>vvV@*T?(zt zpHK^3lzXmpE86MDY-_9z>x#h4&nAb1a?6Yv{_dkkDMl?OBcJU2c7Ty#YT`@IAYGnr zZSms7`jNdj`P-zYe-3`-L@i15hSj0T^f#&fYhzOp4)4#s&Ej;9?k$$f@|;;!a_X&i z8b0!2HU0{Dw};c%h0&jXFOyu|^w-Kl8P|U}?O7|zS-GG;S)?7TCVw($YVnlg?8uzF zs7(s<R8Q8c9h=LPGdjxdtopZi-`Z$=C^o-m`Ad=0HIHXj`Ewg%=Z2T=(3StlCbGe8 z>QA)Um`yi=oy-#Qt1=$$KXuMYZJDhgdw%*-0=@S}E}i?@S~e9)-+%by$B&nGP*>-; zMRP~RlY5pe)QB#9HXS}rF*z=Jwq+{y`-L?hvDZhBe{ZkBfvmK9tp!wmoci*UPg7$5 zP2!5Bp8w@YB5wdMsi?3;+fe=Eoe}X;?y-xL%Pk`1-tNEj*7^;oq=lsHMlZO$`*m-_ zJxD5SMry|e_tUI>z2Ccq<gPHWm1oVaU+K}A-PMqIB=*?U-Ge*lt==_-zZ8`wn6OXy z!+&`y%_B9pu;ykJ7!w`OR#3>>l6LXO^VNsDXX;O`3E2Ae?h?Nh!0WpG$uF)#l4$h_ z*}k$5-G@sOzlVm4&}Dcny_R}hnbQ4CM51hKc49o$<O{(qzmmN^Q(u**TsR!|fgvYq ztJRJA(Vg!-&i;k#zH{>WFUT*9{D%k2q~<2SH^%TB7!1}e7+rtAOl37^rPq5}=+iIB zkO1Bd(sn^Rx;tgwj6Ez4-fTAhMkclu$=}{a>CJkQCUx5~-oE#^ZQS+NOYX3zxL<3- z+aDRCtfCV${S$LLe|VE3o~#R7_ldtg9HYb#>!rQ8d@$VoC{O+pRo{0b#t??nsVW2N zJp@85W&Ez*7m@PO@#GOI)6qX}x!UFSo_xCDd(I=}lU^g~ndkDapZh$v4h1lqo|Ql6 zKI#~y%v``79?!O%S|R$~c&mp&M--*{J=s@Vh18CERt#VC7^Wpj#W?b0ZeL#BXrhn3 ztw%@eG^s!BM@F;c8J0r2v&Apc0T(ALHTVNh$}FanIw9j?;kHW}GmNi2OIOd&Y%ZdG zDpNMPye6YCWofu|UGmK|i|O{0C5J0cbp+R*sJ$JidDQd4(8rJ68)e$fuCjUAO~<DL zI2cKr!vEIuJ8*M*60g_KkvoseQ%{zRq><aNb}3kW*(eG!a$EaJ=!>PcGyhWNi^$U~ zracG0_g0GrIsVPxH^)`7?#a9HKI4ps;RVt$pRtc088&4L_sci!5{o?CMlT*J(?l;a zpCyz?a{p^dso?(3O})1cSf@#EsO4Pm>Cw<y^Zgll;Pe)iu#42ErS?xtI3DqnOFvig ze$J|Ws3BUP&}`EpzXcDg@Ox3K8FJEQv19wEH~Bce+-T6d+V@GaBY^j!fS9$K`#+j8 zP51LJg_^I4PVGCr370Wq+-(;%__6g>Ir{;*cY>+jFNXJ&P%iDu7P%sSfD}QEPruDb z_b=?8|GIoCfcLmx6vfh)m9>vv>)z?5)8xH(=dH6z?Vb;Wq_S7uWDgruUGq0ud+O(L zT=S(9i=T@*-?(RA$A05LazV9?Z5Nhqbt8$K68%=)uY_+<%GL=w2rqWC6#L>rWTo1F zYBmRV{6n{3|2Rk4W>Hbwr4|-<^0p!SGO4@M%%&emtt;Fi@u9_wajI^jZC`F1<XSn- zoZ5rROz6GY7Dd?}X~ghK_#Z~w-6x#Qoj1y-q@p}0JLWGfTZLv2dFpZX|H+i?lcDEG zUCRLP(M@Y*56!O?lG?2wEG&JvWi@ZjV)`MPg8iOUSnI(E8pfF{(|sg^`QDA?#grDW zq`u+N#vX6+jq<0$g%j5n?2OF+JuRyLPK$g=c_Z%$-H&@4MQeS|J(oPW#I6nK4?Or$ z7dBm75;dBBWb%aUyZVwBKfNO3$w_<Gr#z<^8N!QBO}o}_CizBr_RAen=EFz6qq_fJ zv9AS-4egklVa%bL`10yY&nTj~o_UhRv?gHOVC?DBr;Ggi#(UqnUy&a^tBPOze_&Tr zzUfBBue=1$%1n=@9h^sAOpeu+21tc%GFYJG94d=Tj1sIpTQwf(4m?=MO0NvK<f1*d znr}QZBEK?nl=!S(_Wx*9xh;UV-ieX5r>|5eKT@^-meZ`s%xLc%9wuw$6M1?=)k-9% z$~5cTwTf{Y*Sl`}JKudwToNSY`Sg}QiE6l!xHgvPdeGduy`h#WLX~lG!ObkIaAlD} zzG-dB)@A1FQ~B_Ql}Ghwqy}C5bIli`1}41hP7u*^oBP8hp(Hla$J*8{C6tq9g3~{j zHyaOK>Jk;`)NWjya*c|2b~P}aG2mO-&zvKgK<)L@UED)AYO%Lyu`cXy(eLyjKP^1f zKQ6cT3XKuZ=a&EHW50U#3|uq{BN?9rJ}l3O^?H65dZv;Vw7wd}V!ByOh`J~Ep-8W1 z%ankrlHWEJj`E|kq#N}aU%f7_H`RP(C@;&fAfo(lbJENC=hPNJL#w?de=|M`Ene15 zat@<fRu5j0pXey77m?auk)P#WDi!uO;}Nr9`+ogL^_idV?F{(1oTkLKTd}A0Yk3NF zUD3IdGsd=?jY9mneq)W>;(xbX_ah{Jx%XR5pt#Z1hjk^^ET=l6*P^>R`WDMIqdW~o zq~@-*AF?Xfp}dr!xBeNIs*?&M(OlIT_e|^b74;aEYIuy>5vXITJjjve`M&H#I<FV& zR0pqB;0MnwN|`@)I5z{E<EdD6-z<jRG-kqa-JUx52Ng~dPp0?2w)J>P?Z&FrubSo^ za$SPa{i{yXS4Y2#c<5yfEoP>%n2KK28BPDWda%rDVW62#t&o%<YEKbfe^yF)AZwN( zY22%>{^Pl-b2j=HXG{OCOo^u|dNH|2M{Gi1KGt*MA-zV)YDFYVTR@@{mtHr&ot`o2 z`l@5MT_+K|X$FITTRv9dXj6a5&1HccPdo#h^fa{2CE~&xi<7@*8k#R`N_QWYqGfB% zVqX)OU0OC~a%0qFqf(rf7l#(m5EI^tPwM;jM|q0&p78A|+OyPs_2`DLZooR%HOcrI z;={^{m3c}WwvgOsq-dS39URG{Mc7C5iW-^f8!nGfDZXzFd@uS&dA96BZzJ2=<HYTi zvit#@Y`Lb(JtbT0J}&uquHB(L{I--r@0$OxC&`ucQzJ<?u=0d&v8RjZ#QAsakG7En zL?<fdV#KruSLD5ZuFo|mR(c7%=NFwYdd-+ll)|+8^*@j8>YvcywI<wtZ{1s}zpU;! zRi<c2Bx%a+<H68)wqH<~X<In_o-$^$#25_mN*UNPMrb+N|Jq|EQD3&?o~^E1RYNHv zHaOQy)wo(*b1%`@Z-#$hS-`sf`>TT)qU3Qb|31d?-;dFo0DTdCt{}{2uz0;_gSG6o z*i3NR-&6hbu?B`-9HjK@(Ved0(VnMPd!w#;OrOhqr}?i~+VSy!P5S>VhyVFBL@oXM z_5U5$snmkB=t=q!@11zj+UJ30=?TX4jLkjVjGR+L>WgK6B}OV))n%$Be*<bQZTih# zWJ}`9vMgI8wWh0gX))iI=R9Q@czP^F<JuSh(Uqaqlmo*BkN0$OTYebQ`K3LtSX!}` zdf)Q9ay8VpTkdb-Ba2b!zk26~)%qRJ#YGMUUFlItspZ+^<(JE?>|LXYIm$}Q{<FB` zpVok^RCTiV*Oiq)4?)jg`P?oJJBx%SW5W+vbq)oOaBb%tPmC|r?WwWue4%u+@Md7k zt-}k9pakvTlt9+EN<EOdCa%70Sm@KU=HH~tG;~GEVuiDi+^TcmfNb#5-nObYL;hME z-_j9Yx90zDa?QHS`R)hj#{;H=Iz!A|IUTVx+Am@Z*K9=tbN{Zh?bw{EAv|z$b%`_R z!nJU&YAVIPovYG?xb6Qu%|0&!&p4{JEAIXDcm1-j7ROupW>?AHA5pIMI$&ge)Z0|G zuXE4P$AdYBV)~Y>HP><NUao&-2mTOfz43;z@JU<Ywqm9$(!n@CFDY3~bIWiKA0>?e z1MOWp%+?lC4@#Ig`?<Ccap<On^u|&LvGzPF`k7&Cchyqv5uqgYX#V>=u?W)K4D*ws zpUh7LCMr2cf^6($u65>@J_|q0%bCX-<jBLRzjojrg%)#-qiCncqs=74B3-7y<x>ts z7`FfB4>Avh$>^zzHJe`KRB3Fo3A#sK(srx*zVb%gW;(V2qb=@PMq&;ZqmvDAWka9e zE)Ln<B{3?N>dI4<I`%x>5e>zLcY_wIcO}+xzoc}}vcRXW_5F9=ZgY3#*zfav?c=;= zI+aQuHpNxg<u(}Xc(8>0N>OIew5{FE^ck-08GJ<emUYE(<wlN(-K-2b8dA&pv#I7j zJvF2zK{B%Qhkw&6+4LX<$#0(haIAHMYS2gqg<|(m`o35<LD|4h>8bw+PTW_npfT!~ zH``A*0u{eWu5X8`;HCc1tk?H7N(HMWHrt7&#xR`jk+|a18=D%xc3wZ|7sqh^p}T?9 zQ?akgtzg~sUHW5UKj7JF`Jv;wCR_4*?p}q^RY%v|Ap7~>8i#E9q8$reF}Z=yfb43P z|G>!|<_ae#YR^<XrxML;vpw0*q4YU?w=!GGR;A3I64%AHN*9xe*68NouW<a&FaLQY zotX_Av0scUJB{hwihX+AW`<pxEkDqN9KR#vq0;x!i^{5}*m-`mwa97eZV**tnp0p? zk3_IuY50PXcczN|Q>K3y@K?Ih(p8@x?>~4_!<w|=KCe)m&BtXWamvc0-^i^iM=!xC zt3}!@UWRrD85!$;-5sJ|Ds|_&XF<NiR4UUGPVa2`w2WZA!&9;Qrf|RWqpG^PJ-O!X zL7duoCXKOU?U~=!yaH{ON4Hs3zM>BwcivcAzPE#Fvb$*U*GTi-yLV$K9}Wkp4-8cY zKYsieznGz0vT~n%f8Np!V`I`>y_k5os?oJlJ-G&M<dYclpG>9?XR&tX;pEKwS*fY+ zmL8z`sW#_+mTHFQ#`2Gu!AkSCG|e0n#j97Z2C}P;wx;G=^_IT#A25%3mQDYpt<+<E zWoc&c%a<=7A5!}G`9<@ZHsOx+if_&If83F%aI2WkWpT1Ql*jn`_3IuhBZ<+T8*gog zsz%MErKRzFiTpdEq0j%Rhm-u|GmS!2EUMoFs$372j8HL(7JHIJ#l*x|Sd5ovhibzG ztZ+Z~wo{I_XO`hqD*YIRhwic^%Q`PkM$$$IJ6YbmIUX++(3Y;9Z&)3qnQb&b(#&$^ z%nWXdy-ywKw>kM^rfx}Ru6b~w7Vd;gr;yjIB?&)^11qun@l;J{$oqbC!hOwM$i$+` z6SeJf$JK+kSKf(m5S3%V$&oGHd9a^e^KgE=fPR<EVrzk^Qy|CbUfU-_#jcB!6~1&l zMm2{{UppUp*5RzfC^aLaUanbdNJz+!`si;?j}CK81y7f{3=I!+T`f@Xz1dwjk6`0D z-G2RSL^yXdoNYm}vMDDd*_8XSAJ%AprOK498a`O*m#Lj^S>iIko$5%}8^da|))a^F z4x8>mhtA{XU;VzlVA`y=CGZ7_(LKQkC{VREfLD)?l8H~U{n_IDSi7^cGp*wem*v@4 zZKdw3YE1W@KEY3sk=>!TK5VrT*Y%;4pFYT-t2}18K3XiA$5;+mGHcK1PSecBy?_4v znU>FN*O7A_!-{Fve_Lg9RV$|d`t{4QyKv%L{wZN$*O`IxI7wexA=~dy4)fsAtVdgt zake+Vz8P9yT~zBfbKd_l`N=5z0{%)rT`N~B-*UZ@(NiT=EnVrAwDi>?M_KVyW!^(h z93Z-3jSDAxZyj7$dys6Oi<>Mx!E9Q}^}wJh_VM8__4Q>)poNKV%F4<t@=@pN3~oMu zyq~2GsWCTPd-(8SKSnWRWiGoJnZ-TVL>=NO&)XdEbZ#EVXU+R*w9<BvqtDR1yvaq? zB;incOw79tr*1rjD+2IZ|6_(u(ZWb`q9<vCLD*47TDs7>|3j*JrpmiWX&ainvB8rE z6Bl}mowFS$I*(p_*j4CYULC}FT=Gdn?7$}+)A#S+kp)aAPOvI7{MGn$MtgN_dG1Ou z7lW9`)!Kx_#HsEg0e1Ej-4d6H&fHX;BFCYsz}#EEekwYg@BXXPdGOmf%guJ0!UKf2 zd0Q$h(`S1Ot$>)v+S2zg0at=fHeS|BkO}qo_kV-rS4~xW_3G7#s_77`p7|xeBk5U7 zG2-{O@1_^LHQkr2oQUYmugs6tM~O6_58ca&bGXf@rn&7OOJVW-Os^*95g5NCBAr<V zl|YLlqHYCvR6JI$W%pTjc6L6#T)i@nnVA_RZhdX7>Y-cTKR?HTyRmLCke90M6sj&y zp7uF-YPcqp$8}*mEiFwkPST>QV5TF>;J^{HnWk4)C{7ePj3r$6;JhML8&(~BY7qx( z+MM7p)@A`vm64Ib<u{fF{R#>M%U@Dl&OL}4bVr#3P&2N+wVmvGd-v{U3nu$)57Fe) z#ECq_iQIkonzS}okC^bri{e3X9X^d-M6NOJ5)Tg#pJaV~z32MMeE2cx)am9#c`K9% zk`XAH<ff$LU(rk3TRq+Xk?(vjF5^olz}wbty{vrc3y~+&k>m{fzjn&|hF=KwTwR!0 zp8F9O7l+J>^7n6gZ(I{{1}XL}$25Q&dE1FXda(20!c=dW&0vLAU_gL@GMi;}&;4+I zEtUR*r*vz=_{{4fguZ_Lio%W(w29Sqn(Rt8vFR$X!QWoZHj)kI(&>^4d*}G+RONx4 z6cp4}8w=m8YQy-(fC>Nn^UsYN-vO>(lyq%zm;5j@E`MoiYPvYp>xnZ$0chu%@!9`W zD4Vj#-d=8{c(ZY~yq0`I`O0>RL@u0G@cR?B>iq=Zx-Mo^G;pY;b-dQUC@EQiLkUd2 z6Iacq_36ue<Fxw49|+z>uicz_rRR<w6(4k6?JJh7r+peN?8J5IRQ<z2;%LZrCPX|K z@af6Pq945B%pEy2Ktt027}G7ZH$~+Ha;RtENDzkD*x2p64k-W)9zFW&mFMb2K438E zUElkA1_lO5l;qo7Vq(3K{jU>>Pd4kMs?(rY9kjGMAMHJE*;7oA1Ij2q{=@?>Ha0fg zYJFXuoQ%v9KR+k2!GX$l>!Vhk09v^jQ-q+!=<3yo>oN{+ko{)qC@PeM1)dTF!7LME zjnqVr=bN|7xfU8$ACM^M+{>_)Z-9U7TbL)wSD?8gR<L?gL~D7fARASgjGphlZ?Ha= zW<%oHjA^rnhlV20IoqNhcI>AATvOvVGw`6|ee_vt6@9)}-ty6+K*&*`g?~T*UxPZ? zX_JN+(B&!Zyz%j`*_}bY{{Q0Z(ObvgSjX~|&2HPaZFO;KsxAH7R2fM(S?N_$Qqs$d zUhHR;V^KFiM6-q%ad1Y(lf&89-fv#zx{or^DYXAGAfC@4ptFx=2}%3@-VR~=pVlZu z<ZfNGm>#8>opPd_$W$|OQ7VAB#FNyMyq`Zeja8`@jOSGDO*86@CkW>==QpT$^5Vsd z&z~>9DzYDGDt4Zei#+=(Az=YOCmqOc(V3&T<0*si!pgjP;!%YA1<=RVAZ`K`fAd?O z1wc-~swaok_C0MOi@WYZhl<3-eqpD{ab)V+(#)3ayMDH3>XA0qE1xoi2L&a#m9B$8 z$;d9uNf?mif(kNqd+4ulbh=FUi6aBSX2$hV-32y-z?=2i>Qgp0Hss{w3}@|4T9Tgc z!(%7oK(dW$fppZF5|WaDGCri@DUF?7v5KY8U?6_=<B`Hnc~&K*c${*dgQShsDTB(V zl(f8;Qy)?>W(YQFUvaD5+IzoIYyJoDokBfV59hnGzSv77C9`Z8WYZ<#ju`PR6V*t* zoJ1E@BM3dDsAi&E<d*=JAK$;5_^EVHiS6{TFT%5k?PfNu^4*?{3IsB`ySTV`cx)i3 zC4(wg%z4KdV!Y&4TQ&%^5Opuq|M(F6&~eUJ@&}3+KoukT!!4fJ$9U&gLudBZ^vcgx zzoItTRmIW|0uQe3Jjf*@E2|oFaR2`OG&Fp+-#=Fca^#yfGoLw=1;_*pgT(XooI^$3 zS0FTxA3t8?IN>t;T}n0IG3|YW8-tB>$^b&SW7naWm`s#`nX-=;6=Rf`rw1N}dOJJ& z6JOt4y`mZOULBPS`pL1MA>_2=Pd2||wFTe=Fw2fMC;GX!e}ytqR#GBF8^FS%P(4$( zb0*K?o0(rBRBoai15JVZ>Ox(lu$`S<q}sV~yXHG<ZH1;~ZZjEg?k~N%q6LR*n(vx_ z0=<dC67C0iY6(u59jcZlG$`#>j_1+QnP=8<CcMu|Q2MW~1fz(80t4s!-ftQDF*IcQ zDeXh4xRJ*3D}1TXb7({P%-b4XUgWbp;M+*Z>#?@<clDD*YLUr==m#s_3=9u1x-~O^ z`}U&~keh)n+~@@PiES*!;oy#6dWv#1F7sHAjf>+@Nos&}LK#5QAix|e+4T+gJ0ebP z-Bqf#OtI3Ip(Bhk86O`n+gQ0$YgU9~M_MBNl?9V!S$CbY8?O15Zxv~_si({{lhpy5 z7kLOYeq~XYuj#cd-TPRym}f>U<)PE(!yBTw^h%3C{a~NQD3G#sQ@j*vdIJ0i(r*oD zX=ypYsWsl2%kgV>;RiPK^V1^wI5?1-SbK&JK{MN{_y=Pft>xtEKs3C!qfl`8ZNA%i z<TQ#dpC0W6JnErJAb;Mxc{3h-B63(%k|{S3wS}u(++xDlktoktzMVFc@vQw%kngU$ z1SqZbQ6E^AkQBFzP$4V7>NM4(%6pK3LFbipAd(jMPKXFaMa9+>RiDR?6<@RiD;_<1 zlpq^kQC`l*dqqY@B`r8AD&tvgcTiKFNp0a~yQ}P()<mC#CZ)c*+7)SOYdec`r*UA{ zQBa5}1y6to?SMqk-nJ<;iIO>HU*8yd9{_Gg1_e2y;c+UR(zTPOb_T&h<>y0#K=kx~ z^fEt4omx>*(V3r5i6aC9Lrsr@>Tle*0fKG~^`_yF3*#LDQ{PG7Mv;|>=j&yHT+I2e zN}+!6r*@5HKmgT|bAqTWD2Dy}_VFr3pLIy7Xr}F|hGgZnW;}EK{`OL%&(DssgT)?Z z8`qmfq_=&bA5PKm@bHk7d`PP<yf9%5UTZqty&g!L`0rwjn;-SzK;9kKQa@QKp1ibn zphUOKqXgZAmgw{6&%HZo`EPa<I*g%*+W^W*Ln;}6xKEB8Q@sA}_NFa6c0YOgRE;bo zG&FhCOl@!Iu}=^N=iFCRM*R7yFDt&hUWhFHMm2wsni`#gs*RqU+*4YWO?>miwc&Uk z7AB@-o7AC8&qt8(gph)sWD`|gq;}OUzNJW$Zs3xuE8_C&@=-I?H@kX9nog=#Zc1!5 z9#7(*e^}Gi%U?qrnYX3{F1QSQdaSjE{;cKAX8mnZbqmsaHgpM#NdO}iTi&i0Xg(%- z%SfO&+CDQfcQl_!Ne~7<6O+Wf;U`a?&<R+Y++TlJS^7)HV94TIUTw&kkId>T0NFB6 z&sBxDZDs{GIfcW?rRZwG=vS^ZhiFgyn(P)971jOdl)Hb}?ce=2x44s*v!!7lZdX-m zF0ip(iZGN{e*5<A&I2b+!0SLIq6xzJf<3_r<>lpkCJpEN!v`{vp&cC^MzvwBsp?aJ z_)NvP3N$a{MU-Hu;D7)^utOju6CogkLcy!pg>Lmh+0;oqM};3_riPNKkn6(D>(>X6 ze}QV7Xw*7xjWoT&S+V_{tL1?LTUnSW0_P({sEA?YAaYgt2U3+lOXw$X=*Y(UDjMY0 zPE@AT&xV&59#EidPSGnXT~M)kbwR5<&&8rSp%$Un%Db7&pqFnMshg^rnh@!WN_%Fm zn3zvO0*eVEf$1rI_?kp)20o!3<jtwAu3jC>ECU|~ap}0A+XC?X`0>Mh*ZRh~YoNWU z;)7i2Z4k|G+?H*p<f~26GP7pqe$=bhe3iM(f7Wwh{40(DgpeU9zQu+z2KnFA+??w$ z{O`7(TjgCjDvjYw#=BMie*NS+Yq`1iYv3tS_~=Jfl9eR(su6-W$FvzoDr7f|xDh7- zWP6OrdwVNM4N=kYpA-;KSL^`)0r-%_zxE!NME}Rc$EVuggQ(CHy;Y{Y^Nlahp;cN& zCTD8D@=a)(iw=E&G;gN#kQ9#Hswa~R<U@N3<V_t6kYT8ktOF_<;U0KiP)_R?w8i%0 z9a%sPZ(Sa4Zt5?kZp%u~O<_(zEhCj%waWuL7q?T==2-Q50FT&v)3pUS&HP|K&<a>~ z#Y*^~jg1iV>>2jGz-lTFFf3J<X>vQtZ!hXR`@Pqbl&+XeX~y?N)a6&wEZ=6ws=%7< zRZwo~8CRv`<c<hh$2|Oi)`E`Lqygxb{pQUF66+Ih(3n=7oo`6%WyW6lmR*dZYY@9t z`QmStiM;_b4>Iw4f0xN{ZXYfNb#}eABUH#xupU(M9tH-`>__AyGP%66l7j$@kPCUh z3wFmbP>s(4PFh}**EmKzv!;pTaLwVsP%+Qab<fg7`DnRNZbJkG4X@)xi89%uk*=;T z$U$FvAzQd4>^I9>KI3xelUoaD0wN+JP`s&{;l(!E3Qyiz^@=*Q4qK&dQ|zTK1ZcSf zpi#B5moJA1*(Eqy1FNglIp_5hEqrPD*wxYw(b0VaX+wc>WL+=!K7-hx;%C2qIs4a{ zGiQ)21T#Srqs$D&yyF%u#s*|P)k?eBzn>&vgaI(J@1}itXsGkbFH^c|F0Gu)7pKR^ zZw|S7J?^ppJ6%Z`eUvAH4za;Ioy&Hh#B7gM^dl$lhc_lniZdG5U}aIW6wL9018b_Q zo3#>IiNkff<aSj3Sx9yGR6<E+&;8)dsUofmFriMIJxdTI$O5|h&WBWpUBVKB;DFTh zZa<4o3`zh=4pr-hGsO2<LIiOFwhYjC60CU3<ozHT#C`kr;WXoZ)=b<JI9lpUnnF(o zVbJ*tz}_Xp7kk?Vh3>tlyH8FQdK%B~042Y?yxjI#yVvO)YY;v6jYnsbV_H}F%wy}| z4}iw5wInGnWQCy1*=aBz_Wb$F2=qKCwH(WCtyR`hzbaIk<f<@~6N-)XdTV2nW_AL% zdYZ<|m<~Ey7XjFa(_60l4_|2@QyJ9qje;11v5=2zLnVqKmC^Rlwwt*Ti3m>CE3g(f z=mMkZzO`lI;1~m0YNZx>Y*FK6SHAcIJ`SV-6}{kVAQ$bt*&ffOX?;2iVTp@MSvZ}f z=bt|P6F#mejOcFwf*@|qHr@N3+NF92R)4k*ac!?{PgN|8iMa+!hMM#NsohqCK*bG> z<ig*fLGy_&2PSEfVjQ&vTbYE<fgMywRCtXUpDWG-P)};*pnnoatL(jJXMTS;2|Rrn z)O|{)@CMJZ*wYH87ILa5l{u66B<#$Vk!htzXqr-RM-`twb(OfbcRyoC{>34}Rq8v< zWK)sM0q8=m!@E#tLEo9H6POcKkZ!7YH06TaM8e&#!Kd`tFL5S)hr!DTibP2Fv&bc} zNd%*lS%Lr?92g+%N{DbApB@d&Aw@_R3L5rbW9{;)Y3f`~+FV1oc(%a4{LPX3cs)ei zmZs5?5b7T~4~E0{;bF6Xa3tSqYGf#1`~a^YqNpHq!PLg(&(DuTnHR#x`}NCSRZ%MO z<p8hT`s!4fs`@=Fo4Ud*F-Btz0qrq2?5lii7kk9>=Vv_DZk6w9dsLX^JZB^-kII5w zJ{V5R$}e!u$Af$({gevy7VAyuBv8Ke<;#bFCz}h=f%97RT+PhN%0eTjJPcDHImQa@ zF;GR7+Nd$8Q&Hs>Djv3J>b6DC>M!thf==mWXhAxu>nqj)I0F3r;UziE3`m403OUc- zK%Xb<Fls+HENkA7cJ(dyv11n)?8;_j=+1g>6t6VDx^nP=Yf8qRT$B`Q2unF~Qc~d8 zwCk;)g_<alReah)tFfB8w)!%nM4E5cqc{{05J2P2UZ-j$!E{QmG_8l<v?(431asl3 zj}IN6nF_GTtS#+plHzd(`Ms0q3t$6f?1rIoF<rB|qWf9q6zPbzQ==>q6;D9UIImGF znYzJG03%9bsv~QV5HPGnXSX$N?*dwCuU&^@pIf@Qtr4ns*P({qMFSq_GI}HhoV(`c zX1<4N!g4+myq8-W_<tLnDIG;lR;nuJUYoabm6Pl5*5~U~Gv?;zu6W8|-s{Rd+61Xw z%;<|ECA*zj`(x>2iC%bKlDbuCc=F|mmSkl(Vd`Xj#&z^eg(wi<KOTxT%)BvH;zwO1 zihM6vAx)EKXv_gxk>Y*Ywry9<^zm2lv@OvXz$*c>=T;@$08}Q_pu<2~_rRK`;e1NV zC*2rLs~!>>7?=wu1vkQe7jpb@ruhSl6l>7nKmXj<Z7m(*h()fxjFk&)fB2MMh})oI zm$~#NQ`k|v8Aa35Irt;^Ejj^&kPUG$t-|5gIa9?b3=VQ#P5Mxk<+d%If@Q2FxfuWo z%Qx5Jn<D_Qa}j|WQ59+2dq~Wq_^xdFS?j*rdA0+e$erG>ZxvR+Vf3D1HWfWZ$vQVT zw>a@_5qFGwHC1t+>JbUol#-HaeBD~Q?1UBs&~VP>*H2{Ffm6C^if^{}f^?ftt7mE< z(sAzb%+~i;AbWCy!oo&_+LLtRbceizB2=?!>0w#P9d}i2FVLJwGSJSunbmi+#u1ms zKFdDd4)R@hPgWKPdA~)&!7#C(k+HYb-L?F>YKls-M%Hz&-3&M&=rW-%iSTeK#=yJ{ zXo9zylc?RVN@n%Lu7T1kF=;#|aTop3rKj{+^$Dzvsp_Y4p_Gh<&UtRYKRb#_sP*nt z3~xeT3z5WjM5WJ^LAf7=j3)5)Z&&B7C#iJk+c2|yRGOtd+(|Gm{z7#X8b<jZ7z%B- z>ZS=5IXO97TU*$GKxlyTgzv@l=P=q%Ffpye#*o%F5*NR7w+*_bL@ixw^gB`s^M}OU z`0WzFEvmgL7+9aGjvjFocJuCbc)co(S_^}gSvP;r2{v{jCdYkA-=T|X4~Rhk;}$>y zyIkPP`Kl3$ac@dfre0awo~v=%aXA!VX;Qryi5?RUsGSv#m->qVEb_d4j#{T;_hxew z4(yY>=pe;q6k4>1t6I9y15rueBsw5X>$Ofa2fn)wbKgKVoBd-RX-kA=TGf`cG0FVI z=}bh9dIPsK>pw~{1W@8p2u}xmqWqa3IvBF<A4y5MaDGl^W`bs=WkR`M;bXzY>~X4y z7_8%0DI9fG)z#mSCU*;Ps1{$}lqYDz62FB*hR{zDe_*iS%1^P6CX?+ll;q$;N;(yY zf_W$xOr*53u1kdTTc9Ljx!VMoAdy?gAsUOzRO3|NU?8H}1)mK?MIGDOZX+Lgmha3N zMVm1I%LM5lJA1@A=Qj(N*M&UR3RcD+#*VH5MRUwY{fZRRYrlLEf+F^3x)KI)l4Gho z&xx;N#|DD+JWP>=XdoP7(4(J*!vMQt?7V8amTD+SD(`@s1u6Wm@0<oV6(fcQFoc4S zb_;JEkyT;wEc*HOOms)U*w(&Pa6P=M#&;_~Rt)55$Jtq6w2Dp*2%OD1x(cGh$4z<^ zO58K>HDo+@D~4T8h$>LbX)+=#*O|7&j00!hprMI)U3l{{@8Rmjhr4XV<ar#&HGDts z{ID_mZ@at1{DOLLX@JKoKsDk5%Y)0w$;m{2gX#e?!|pynM@P4JuYTFv*p77BaQ+1z z9&U6+$UzonX3NeTsjQdRdAB`8%LKkx1n3gKf{yq4r$<m{h`9}{O{71kRt`S09LF_I znurwh)P1jIWRx%q!im?a5`aAjUibokv%5fEe;AJoP1prYb})cvp*1vFhcrKS{J5&k zGe15W28Q%@2nF_@bM`-<efWa9NUlZ1>cjXr*x99@o2sb=Ep&!8rMmyRBpl11ZdhIa z<%^=ng$s8bZ$RBb+k$=Co+}!IcarVFdJaFs1gr?b>@W*g%d#F#1o1|Qn<Pw(=10nd zowykjh1I1Q1EvF9R|OGuRIG`KWt;|6&#H$_WAbpE>MXDi4F8l)piZ<qHft8}(Go*U z9$7DiEBB-2oS$FMk%4KI(+L0dzSwuw<NQ3lx2CUID7Jit5Jod(93UkpM3m1G7i-Oo z<k=nxE3K30=q<goVIj{!sCAyIg?@+w7@+x57fi6nXcUbnp-u45Sy40)YNtcs#{Eo- zi6NRWv<|XTQlYqi$RV1$-MGW_sa2X6g6Q+`K>)Cf%L;pk5VIE@5R-6C#`AUkMQ&d7 zrth9iwgL>OT{dAH2<0{P7k(SNSyNLJenhJzO_0`3=_j;&DbvC&*RM-HrT<#@1KrcY zOk_?D??f0y(v{JVpv0Yi<)n>#yB~6fohN)1SM!`YYr%J~5)+X+V1hif+-JEdjB>k? zZ-7iG8i%e}H)!T~$uz6BN8xZ*m&8v?%^eo;+_-vi6z#DUd`IMlkdP1^L=coLtVZ5l zG`@bAIu#NIMYzD2>Il(-6g9I;o9s!`Pkoq2+XA^JAS&vCOoINL3vb!$YY2HgQF(&z z7&P`GB!kmL=d0}>8HY<fNxCIr=$7~sCI2DcMim+wN^vOS0uhvH-<`BfZ$s~xcSpcy zjRG*hl7$LZnN~$h0+)jAM)Mf#ZwyPue;B8zrXJY4w-MhXFzla|wk9sgIS}w-R1<>Q z@k0Z~#wI1pR;rw1IFVX|4qL?oY5`1%`C1$50HHhr<CuX#1f9=n;c1wrLC10n3JTy1 z9-v--<3o#vCTgGn(km&RKYq_F9&(aYnBAK<0(om|`zD`(Q!eDRc(@55Q%g%rS2t?& z7arrfwdEhtpt-j;gAZf1R;w&?6MEn%i}LfUrN3=V?NqNPS`u0FK!=;iIcyz_-rHUG z?C3>As0CsLf@*}-RM9KR?nfO8XEp78!fFM|#Vr!b>?-e`Vg%dBXc(}}Z`G3~J_q3A z%Y(n2Bbfp9hknKHK(`f7b7~XqhsoYDJp+4HCog|m#?)y@XVo-xXtcBNA=()pxF%O& zqQGaZZqEKS-%9Vn4m_0lxxTywMcNyw^(iL4k185~RG8UNmJ#m;ku7zVy4{cEEOnV@ z=i<tMP!c1p+1cCY>?<Q}xPm-i;JH1ybc;3agxf+8EMrm)-Nu69*qKOn?|}kzaZw_! zDboM|tUC02MCP`Qs`iHvgSHE0NHg|5*@yQ^VZb>XB4~3R&kotPTKLnvQiT|cBKK5v zwmpQCsHEWpfwb*qTj|-?U?G@VU`^q4YQ;eupIRVVc0A>Xs?ccs*-Rr<#cqXs3GxSp zP_j;*<hj<pZqUwz>iVpbrjdmq&RIbum$#o^`yDg1wD5B~^R2|J`_3~25p8=mt^jg- zvr#mmp;Zjy=k^p0DCEIIf7*gx<Q{$onN?R+<${6EhX*^I#yg&eho`=`G&388vfxe1 zJxtq-;~j#-;fBdl%1;k9$>TbdK7m3e4S&-pANDPuNOfJWNYiTBvkc$C>?#vTIsF6n zAzmxyD*rTSdGzozq+LtH*Y?a0PfeR)<*&w54G{r3@4PJY+$T)cS{*%+p2zYlY;K^H z!U~HE%$?tS@zMknMlGQ626_cy$MHjZ_ntwzZ@WDy^JJg*ewr>Fn4V|iRyQ5Y&&Lvj z`kl2kw{3df;}F@z^lzKJ%le?77$K0B>O?o8pNV~UnxCIvM5KFt6NzYaVJXMgzL!BA zY*WkBP2ZmGZZU%f5VJWnQm-9rAi^#^IrLH%Jg;P^3+t&}&(rsa$XOm9<>$#sh87a5 zg!}d&t2se7o9cZ*Q9^n(<bu71{hpj|gtpgXRo2T8wl`t_rW0)-2cn#TK^GDQSfjcG z*lqJXWnQbvnojE3Oy;KVxVS~SQpk6j61{#l%(8piCqd$Ej~2l7;C;|oG^S15hW#HN z(1sHu2DsM{Z`Nrq-SFkvdob)Pi+a#W%~-8T-Y5I8WuhV#n57v2EOHjpnpAT3E#sre z_m6FJ9Pc1DWTt<ZswiEY#xSj@HzI*E#cM&xKEs)aPjBeykMuOke-q4sjKi2L6)YtU z3P^wg<1=d^dS;r7Z1!g0aCmXBxYRPPj(B*Nrx0Tw!V*pGJwWpSGRq7dsCOUXVxs?q zDj{rA^f1!BC9Yucx6)YYaK_(Y_`6WP%bTNnDnV^0{+nV)(k<n05U1u^T45LJK7IOx zRMKEg<o4!8E+m=QKa}sEYC6FJGprP}1IYi3Nd#%5B(DRf93LM~XavZ8C@l(hJ6qcp zJJsHNtLUoKukS)s=$a%~;hdlagt)`Bf&Jx{eKa(!h#vWVW|?sQbRhOwlTIM2AjA2I zaj?~TCxC3p285$&@-97V9KVgG<<?+@FR<9`1W`h;HPW>6<&GOsz6j>jUVtY}7`7p) zFD+bL3b%jNGUVZ){hAv8FooZ`J@sJ=i(G{D&L@Y?3;=1wNgtm}=6C)CDf4mXEz>-p zfHTtX=aT*$g4|5Oa!#`C>2<2yo45yjxfxSaJPtpdSEZ_;a2it+bo;*$AjAoba}z`c z3xYT!GU-q>0!^`Mn50a@`tnZSOh+Ey$94Sp#XC_SGVb5s+G>H7AJjVLr=l2?)YQ~~ zN2y=|+k7RQkPM9Lhd{^dy$NnDS@>}K$*yHArkK^XFOqNt4K$ES%E}Oz*N(pQX8T)J zxa!5Wod-^^u%te5WQRK}JM{hgC)k|ZbLuBq1yzGvvJe}fu(U-AL;34FJiL<OnC2?s zLJl{Mxvwlv=>f!`H%8BMYQFi$l`y2y1(?JE1T0&U8o`a-^52Pps%7{25y8a0rQ#4` z2WSJ$UN{3>uytX^iv6(-Fbo{spC~U{zbdr+Xh8XP<<1lmdj$WMy1o;%7Vq^V+&4a> z$$Me7MX$u{JlZ+8RePU@Z=rSa^fI%2T}p1vT!-h6&&^v71iK{<6&If~b~x0Mws1^D zL}$<=e0*;?IesGhy?et1@k-h|fm*teB?%F&ldP<_kQ0DKqH~5GMS#@NcOpm>VHg9d z<Xh?teWR9xj8>6R)VOxsgIsY1!yjM;c=fTLA2FV~@ZslAlX814c<xtA-JCHN1lLfL zFO0Tc(I<Qa#55nbSpJxz0W=*I7Dnv$5GU-h-Whw@8CxUpm0H7GFfNry_lNqjxa|An zh=|t2C!~B$4(VCqZu3jPqgV8~M$r!sV<SixcHtHMG?&zca;x?yv~SVos;IP(Ry|3X z7;SVu+x!LBln>{ZHJumY;<5xQu*dY}6H-lKG{iyB<R0@Ub`XsfZ2+&Kyul@3f8d-e z?gO49>aiw5NckS2z?k5%K0P9`GF(gNE6#VTw!XeSl~Q0nMSl^}=%(!}FgNTuge${W zZ3yO-VmPhTw@ySLQq=wIw83mFGPMRXu$5so7jr>TG!k$~gi}AlzsSb?xPuhC&qBo= z+9uqo;omV+ugC)(bh5<S5IiqH7$C!9n>1i61<Zqb!5m!yIRV3uRnJBbA<Z>|zNd(c zSlQGP6MQ%G#S7|O9*jJZiR`CafJvRu0xYs&)CUhb^}V|TM~j1gtf!=?>M~m0*2DAC zauI@<82Lf0aa5?hW^PN{M<GO`UI&u}UY&FYsY2OW00@QA*4O+bi{4Tl9n}~Ybf}nP zUwlBwtlf|Hjow?q-3m-R*P7$EBsUIrqxMB!n^e7EgB?LEIjLtx<)vn@TV(U$zSOR! zz2oQReuESv)NXC<y!lqNDvrwA{%}gdlM$DOXTKl@Azdf2s!&gBf8?zF<&O%K$$@n+ z*$2@40*mAHv!oADQzvCqv;l`u4wLPf(Y23mb`>b5c2%e<4jQEUWAJ4jbMvA#N1u|E z?`s;dUD(55!a=4szIG2`er^31t*7~=1o>!7ZC+aW)Q_}Zg&z>u)#sXcZ35KeJ+g2A ze(YLd7)f*RAkna4*29{nd=?J?0~yap@#{OZ(?axI#7a4vUSm)&1s1rhFjGf^843~Z zelV11U0^W7q_HS-O(C1`!{LE_T799I%3#I7<_6PX6>kmNA}482li#uTXwF#gpL1J! zO&BogSlLLbMcF~(J3vA$#POwMlql1ugtUCkvl;_i!9tAlW@~ZKIvM*;nWn_^(3=<y z?P8ljNvLL!6ZBPzEa0mMxoMV&UK8}8a8(l$0{A)Bz?R~`4$pS&7FLW5X#LFYhebts zU}3nVGm{wy{}WdRLQBI6Gtr1^MJ||znDd;WO-F6GpmO+gTCEqr3A8Kl&(u?S2ijS? z9v0^jSw7j~v%L)lokD^|cRdK4Po`aM-0n2(4s)5zh7Xzy+btA_S_M`o4a|)(c&1G- zZ_iPSh$SL0U27XhXZ2)I7AIr|{*raWjqKUKzZtQ|td#JqFt!4}5u3LUC}=P`NxRL( z!csXPY_+q(mO2bWkCeiJPs^gjI5gsw2?sZ~Ek-ZI{_r72rhl|eVc>3l2f|)jT7qpu zXa^iMduRl7)a-Y`XzVSSo=LiY|32)@42`S{o01EIU%ZIdd94K*k4-)Yaq;&9<vvIb zniarfRUVhL(?}B&JG<F*-+OQQ$YK8gh{hEDz`s^}xI1MHd*0ez@{+J{L^zT9&?fM} zHK4&;`*7vl5x8YKtEpTi04c0WM^k5Pez#b;*hMD&<+spEc;XJFh3Pt|7Gk(*3?+Mz zQ!Bn5BVBBm)QLuyVmZOr(&Ax4{*>@1kW{9PBN%;j)LZE=U8H%SG*paoZD(LYJH&=5 zeHy!(4fL4@$>vKSnr-ns$vOVFv7cZ(@vb?jd0pbfyygbx6{CK+2H$e!Cq0{fz!uZ< zi=o;br^;wp{^8_F52kJjrZu(4LtBS;%m%R~7wa7syAv8T$f0{PaOhEy$>W#{nKXJ= z$^|*jIh2G}sJ}kltTQycL|&6GA;4qZDC@&X>(r>W>7CO@SD(54yn6bbu(pXMsA!Ls zWLUV^biIk`i;|KO%r;_41{>5kD~?7ORprv?hgQ%I7290xXBK%J5kbFt;q(JyCyW?K z=dH5#a}{P*WOfiM*Ehdj7kZHDeluMVuYG6Zgn`M-%*@306NW>;eGEmOU{GJ;nqQcr z@C$6%*w{#Mx|>~1XLC_}dZtcM9)K8}=Ztwv14%Hc+jDKn2F7fm{Yb2}(vEbrYQX3w zH85vvT=27J4bX!_(HN3JG@<s0{buFEWFD6v)YHY}L^S`^`!`m$LLR=PeW{D>R@C6g z$Or^lTOZcK6KO|q>~o;RDta7%XY|t2ElNTweZx<nSCS<fftC-jJqU{&i<U#?>7$~q z3pFK8yf<4l+;C$2db2ngQMaYjKW{wlY`pA*%wbRX(1~S={UC>thZOos!f@vpglyvx z-B#TjMn*xujvgU&fxtVC@3KDWGy)dO6;@}qrqX@ZoY)_-|1;+`@-p?Q*sL0*o!uAu zw0ik{47UgEwK8hhZ1~wikG#y{fyS@E^<suCx0{wvIVD<;u1tD9z^pqP*#?=aidGQR z3^q{YCG--o^;>2NJlA-j5iGe#ZbNA`wYIldb!QaIcr@bh&Z;SiuY~<GmdU<AA)znI z&?}1y4o>v1SmeCETRX?irnxk5cQtuck=mW_D4B^$>0DtTEmGz^)&X)%B_0vh;gNKm zB7OmZb~ER(1C|w)Ix5cdZWwbOpy`xzUf%tURD!khZQyzAVSy)AV4yJ+qAP-axP)C4 ziae^HCzzR`z0nX=S@|=+)+8EKyhLs&6ZZ{9Dst%j@mZiXGLKV4WF2G*l0bi$E7_05 z=n>e`kncwIQ6-SC0Kjho;fV32P+|x`vcht1Tw`|aBa?Ta0o6sjUfNpY8#kUX2)DJt zLiz<mp(-a=m$uRDe)=e?Q=RfICSRF%Y#XE^{gW6d2hx9l9-AO4@MYY!i>!BlcdPHK zZu(wnFM-OY3adsMjhfmlywaq8t(4P+r`uk?F*Y~I+WDY`g#shz^v8kMWJ}M#iYR0r z*n<GgpcfzpUgj-HXJGN*hS8A`U<E511tA;88+yjz;q`aG-SUbGy!~;ElXC)k(Nfrh z`jerdA*!^xR94H!@(k0b4W~$^lM{<(UG%{My{ze%c}|@=B_!kw)eq66gZ+|Y4G>rs zi_pqgqJbR|yN}{rH~Rv68%NycQ42G(lw)f1W$_9vW+SR}gtH2y%zX?{7_lZ+!Eg%@ zP&d)iqHSw^!JR8;(aG!ZPV2AtTH9|=`A;p7zwo!C?Wg;6LiTVo>jLr~eJLUBYHF^c z*~3j^Ph$fsZBTsJaWv`shHW59A7Y9CZw>|ru&2XI1*<iwXG&~&UD_@?0WA61P;U*; z*(t9rE|^1j3EK_Jgr97DhXNlG_cT#Fn7F+GW<_58Skh~)E8xp_>g)Ct4=xR%>XJ)d zJO1++{WS)=Ep%6~<3aARIPsw|f~E36x#oh+o6Yw%=A}yCF^i^Hi}?s@lJv(cg@g9s zov1rLTti!py!AX9xQEL!DZ<n?lX<XCrpqgaY%W1`zP8&TcxN!_!%`+nP3wt|4_5dW z-rd<kW08x6e2_l70^kzlfsHMVofWRasuyh9e(w-KN6mfzvR^=^ncbpMG+XH*ayKw2 z=l~-lFm49>6ywmNvx}IxX-omluw?X_{?xWW%jh8}E~tVqZo?|1&BTWKh0G5kzp^B9 zlRNkkX+RFP700kuO!PRgH^%nx-R!W&=n#f%+g@VhYbD0I!wkLRnjmz?721bp&xp-Y zO6`1%?y!o80N*e)gp88<=)}Y;iCw{@iWqdWuV?agVSPf&T8Sz0KvcuWOWy1InOLKP z<6~%+mg%Tc)9qc+hK9I3rKeOrM<(*@JP;?Z&9AczYj3OBB>o{g1T^N}$ex@=m@FoV zYoandux%_l89cYVO0ZL9@n_w;JO4G)345)~zoHil-1leJnckP*yHa49uD7XrukqK) z+N@8Bv#CGLo66X%p61^c;1qA}x&MlI!>(LCPeb3Skw)(6t<<sBr8er>1Yf;P<R_IW zJZiN%SIx)=b?lohpK35~#Q8t{o_M6+FE8%CUT92e*Zr-v`S%z3o(c47H#S*5EeO5S zrP_1f%J-wruXIv=yhdk!Q$N>A8!0^R{?bs9=}dx7&<Mw&_#mb(`YCfMH^ZHpo!m2e z1(n$?7gXBWDTSyta<OiTQpN)E66`}{r|6B(&oJ7>dNLDSMkLVQy?X&ird<VDvO+mG zzs^F>_I&2B-e08{5f~bJn32(n6j`@^jW9EfYr|dzVe8<`wRdC^54bql^<L~LcVTbF zu+iAzGNuxviDqnnVJpmabs>H8SqVqNRJ<pxafU|WQ=$&uL3-kHU8G%Hfr@C_W0Z;x z4A9XQyQYXJt*sKvak?di$SAml$SUvMiul8eL!xfCz^%k!2Adm9SAtl_9mcjF;UZg_ z9BJF}BJ95^*L-s(RWcPW3JRHo%mnn``ccQ=n+Ne35*eAUPH7C!5?i0w)Sv3Aj=?Uc z?KQtCa<k)fdhYuS$<d(XJH%!vEJPFSEOyWJ`C!?8>{M8x)xo<vNE~VS0cI!`_5|^~ zD)XEYx8>QGXep}q{3(sga4B0Dd+BBM%|~(2bkw&@(v_)MX(9~<PTm*c%JT0o3#*UZ z*lps}C9=ZY6m&lHwZRxg*x{%C>_IJIfdX=Bd#i2KH9u6VSM?9yn&WI1)O;_<bRlSO z{`qSIaTi{+un(SGy=8Zj)5AwMZ*<Ov|6b<#B`dEIr+o!KOIMg=q)Z3%+YWFZ^)SV2 zKw0!<s+OJmN(1FS=unrbGBI`KXmr-v9PFka<SI<P%iJXqY+D?fcZl^Td+M<|?oz=Y zl+(r8K~qXkV^c7CXirwIG&00eW*5X3#4i*+mexc?MN5%GnA}24WBYalstUou&}3x2 zZIj-|a;-di!kfnKe=nR0tkJLyH^p+}g`@y%<XR-#NO%&%bEWTCjeuUY!mi<+EjwNi zZ%n~tNYgFRG99|bb~5+A+GBRJQ!t9+6^K{XC<d@FnuSD#IWpDtw%K(3^WO4AiYtUk z8W$I+Ag`iSqSOz=K;o`(U4&vnHr>&$%(ixRx%Y^d-LRJdQ4c|gd5sQ(%!CB)J<tTI zf0kygQ2!L!TFCfYvKLSPBv8|9J{}%Immp&r4iT$2_|+naMUV$yO55LpXU-6>$Uyur z);%}raDgHN*)JkTpt$flB7BTj+!!q<$oMJ;W;S|afT#Ta(x3ySb*>t(Suft~OA#D9 z_afP1;%jzgq^9CBrXD6Q=yTjmu*pYTlp0`m>7z?rWK)J|Z{&sZ$+s9;f+U@@oHmIS zybCybx{`QJwfvNRnM4-%K>neYOFIkJwCtMujaL*sLdqjlY)U&Hq)M|-OLetv>@+_? zZ`uD&t2AiZv}@4l@hQ(kJ9~xdB};sQtnJ2gsk;uyJaW8{Ih&DNe*TVmiBONKhpBeX z{pz;Dh^vfNPkY&e^KZZE{zri+ol<dIbhzvEde62pi3f71S#u1pFlNVFP(y?~fZoN@ z9e7{6!20EfEUf=>G=vM;8KK9)rV>UJa4l*PpEB0u_(iP=4i7A4di(n7<lPK)7a_J2 zhLI2pz2oDT%xka^_5)mmEMh-jjafOQ<K`R;dsv%PSi|~X$|w%N%FuGfM?<Y6Cx#Fg z{`uJRsuOyJ_IPP}5N<9U8ceN=u8Wjso9UIe%wbBI2Af<sY5h%MPd9m(+K19>oFFGG zZl1M-o;UrLm%dvLnM`amf+;b;9DBqjZGpEv7A_QxwBKbS>)Y{i^@xHQu-|GARNn}C zcG~^sm)+6i0ZTCe@<az*)p%<ih9hR03~;BmPXdRUAGIY97LiJC%^W*=^u4H7>5VV` z5b!CtCDBdG6HdkUG|aLapLM!snKpX#R19C?y_$FDO?Kg<6jmM%j%rcI<7ToWSi<rx z6N5N>VuOUkX5M@iUao4Oq~kXkpQPR_En$58-<zA>dL&Efdx4Mi)`V`n=@qnJ<<aII zH-U*@(~}mV6}19EyTe9U><>FNs*m>OgrDxIInR_nJM3lhNr%Qhee1AxzaPcPk>RB< z@z5FJ_{r-H7j>Fu)Ju!1!cTjc1_unWU3<L8N4H0nOMA$c=ZXuTbWv!~^lS!2mAA8I zLT@TSW=5O3dWL4rDNwHyP!!~-x4z^}&2h>jwfN+IJ^#hm+MTPT%+yM3kIWGv^y>t~ zpf!V$ruKVE<UK{L&(=UE=HZ4FvEMU$6mB;{!a*_Tv)X0kd+ZG&pN4l_kOMFu@!M)T zsw&or(^aJze~XEcAeX&&s1D<NDfl6>;;)_N;*!(v#wtEqNa`2mpFZt^|Bm4^-o8*V z{>6UWyCVe?Hs$B01aIV+#$C31e|H;1gWuDqZ3*c55{xFk)&D94{^cf@vZWtV=vMfY zB4NRc0X=2P0QQVvJ?uZ5l;eF?6#YB_Erltv9L%jRm4(mR<0-r!J!;@eB~^VbcIL5R zf-#T(w}NsI@Ag`}wuR*m^m@PxM=X~TZqKEA?GUJVDcbz+BIEiaW%5}j3aKxriM`XN z*1uPw=4eAwZdVYmuH^M+&bHolT3W^E2SU|kDMQs3%aMy5Eo-dG$5+u#rC)ukG=y|a zKmGUd<8jo{?!=m)%d3)aeJ`KqeAqsbsr(oCDQQXiR_{|QR$qA~?|TO{nCzeSYH9CE zn_YHOTD-8cQ3dQHYT6vlZm-TcF?>j%w<*Z_t@#%9qr8g^50Y#AUOT)S!b{mjtc<ma zA7qP)g*>)xKDfS5*CX_0^;VrRio|5@mq8_6^xEckhXs?5sZ|JSZt{(zu39^deV3br z35NiqBY>$1V@DZ-M-0^ADZyN`MTNqhS^=rRU?IF|bcTK#nS$kN-Xmey0xQ2HTML`^ z{WYw|U>lkG0{bK7!x9!0R7jalSb=zp1$j_eQNeH0&<AM&0qzXr^hI2VjgQ~v5@_E9 z;vLnO(JqF{Y*m_&78oH>I}kHG@4n&s=*+0pXmkmriTvJU$ByB30lfWo7ia`EthemV z$a#`RqJY96x0-m>1=z<<thntEXHYnlw7HIJTLb$l=@Gonwtn0m@mdJF6c`w%&D%~+ ze8!tVDXM5fi1id40^lQca9qSh+Dq{N@bu>KP_KR5c&kc#(V|eN6eHR!8Al}{`!@EF zBs*b-n$V(^&|;|=G4`<~Ta6_tluEWigv!AfTlSFr-rxIqe$VT5|8wrM#LRVlmiKnu zTJUQw2i1oB|5qE0&4GMB<$^f<C^dQFLhS^#zam5*p3Ft+IjmHYh1k%tv*Bsu>Hl1N z7H%3y+9C9wB>dB`krd&n#gcg4bo8!;(b~BiE#!4;h@PU5vcCNL_CunU)WiP$!q<Y; zoZ81Gj@NCJl261mt(dmJq*=txS?a<@Yu&7rXVOZRHl==PO?grY=NaK)CSN=0_hiKh zLC2!8_8U<)p;9yae?MB;|JkIHTaHmA(a%X(X)x~AI`SF<PRBh%t;CXaIpxl#2&efm z^08w!ViO%-uYBHQ)Al#R{@BnascZEkBA@nG%8@$qS}Z&x{fiYMBg_0=-}v3M*(*{> z;o9|0;%QiXzB6q?N6uSp?K*e!O`1MMEat{XuW_Evmd+V{+KBA064SpPAzsuridi8n zub3c>vrb<^R|Y(by%nE*KYj`*)(9LO3+*#=^Z(Hlq3uqLJxEsw`iLS!prh!>yMJTd z-y<g0M*~QJyM<0?4`(3I7tU`&r2?cdL4B<lG?m2eH~Ym8OTIZUoa-Qzup8lTqby;F zm;x1wl~vLFq*FIxM#L<E8NuMgtD|82HPacuhEj<c2;L>^($23j-^MQjv<Gf)5(_5& zJWOIKz<sr2ju^CW6eIL0C<Vl>svcv-AGa&cA*WyzvRqTF=s<;9KmX4@wq-CuZU)$L zbE<(IHZVd2Wt`pw$dr1YQGHaobLC!R(tHkifuB2DXJJxLjM{HLl%&cSmvUcYvwygv z${Ek2a+!Cc(|DDisnhs+KS*6OO1<-FrJrn!(bz_X2!Brd$vb`{$tBe!(e4u-%gX=5 zdHP@Q$EJ#CIegoM=?!dU)4V*G!;2HV2&M1E8H+2e@^1JVjE;?gwadfgKofEC-&cY! z3n!#)Uh6r@MCpE}tZrmj=UGRSc6)__>h7#V0ZYHBdX%>?qdM-Ob3!EEjj^2=<_Nkl zNec!7Lc83C(N6&oh)tej9gsAd3_hj;uxq%i7}s_I5&o-kw_&F0Nc21T_m@`sdoUl7 zG>a7CH%3nG@pFl}vA@VH)Ds6fsYD_2z_n@3m;2O<okp@Ik}HZFS9pZxY>$fW%ktU? zFeUwY^6luZtks`#@@9F0j|2B7{~8<_k+wK7^$9B^H|G#YPJG~)mrH?>YjWijp|Zj+ zixQU(lndXTD|k#$E7TO)wj3Pcj+s)Oc$h=cD(VO6A0CR~s9Iv;b^lJ_^Sf}82ye$6 ziwpJuEetY)q?A|@Z+bfl9O~hV+}w$M;=kr%?ui6L)kH6L=Ah;gAs0}g(o}o{l%#26 zrt`+yYi<6g3&2PVFfRYgH#A&8H#+{0QAja>L5L0s8<FpTfgc(YE|-hX5FF6k^S2s5 zV1!G1gv|~ml3z(9VQ6loN))9n3#85(Qw-QRwC=C96S^iF^o}{{Mbx%p17fWW_+R|o zu|<gU@Dt?Ubw-p(b6`i__xe(}r1Ze$&Fj|m-WMD>Pj9g9&`u(P3-F-<ai9L%?9qoW zbr?7az!=}B(i>WC$CW&UP#S;cE$#<QSx{ek4DV?Sk9uSo(@DaJvp;fIjhCl;X~cR< z0S}8mO`2yywW^3E5Sts!ATY4vx+VK~1A8d=2r6M)zuk(G(5X67L|x8P2z!7Q4)`uF zaQ*6qZ4Z^URXu?7vdGG}KXO+<@bA=Y-i23;kv+x53LT3gCtrM8=Q20yR=5AK{+Vm# zw=`3`dn~u+AXBAO469Z4shtjA-+o?ox<B3Eef^LN_r{1c$?cn}R^0YWo$I@LxW-c- zpf2uP@e+3yNE0sk-b05*Q=SDNIpmppF3J@)NG)C6Asld=n+T_4SBKr+wJ<?4N-HUq z;8U6maexQ`2j0}kxd2Ta;9PZ`KT&S0iRb|0T)cQOzFb^fyq2))923ali|~d68d?K< zGX+i!=P~Wj&w=DP2hj&Fn(R?HgJU6O#ik5~Z9S|u*l)mePyI~Hs{XSBp|Jw69&CX( z<m_4IWD=q0tp}jlxY3{jbvEsp=4m!n;$4(Xss{vZpd_+UFi}eJv1bIK$2}#0z3TZZ z^TYGBp>O7wEzsma$)$S)WTw5<<zEo6s#KAzulaxb-GWm7nz2Og-3_`kMz3g6JMCi& z-ueCt8jkMh{?*AXdx$2EZ&mNaiSlPhF}>&9xY%H=JVw+R;6_ugJ7?V9H&>mgd4Ve8 z?mmS13<kR4JZ^&9tLW$hw&l=r{`q@5+h*6#HeK8EXUcV=%T(>0JkFm9{kXr%vT{Q} zaOCgrvpH-iB)D;(pBz?KhgQ$CAo^K#XqYvMdAf=WP{#b}$wAAu$hu7-xu?Us_I<Zp zH!ijE)2e;D;y((=8H9HglEfwV*Stts`dWK$cbDYo{=J1q92j9}mqDG(k&iitr1#1n z|4w?n-DdEL_n%E6U{5aJv<^N*so!>P#WD5@;9TNzaz2<>upXr01INX~dJ@;>1U(Ll z{rI^&j}wouYGICUbF1D^X<>9ieiA`D`0_#V97c=>iVbX@C_YaxUV;OL9tPzDlNHMc z|HPvwPo^OQoqbwcTwDyM-hE__^}5hAiSwbckupJO%y}JXLllB<#;Q{D;X|E;o38v7 zw;}X2O@iHo$d4|bYJLfECWi>gZZn|V!C^?XA<9#LSqjdaw$C_hY9~*oUM9pB(Q>B$ zjmO=Y0J4dbkQYX;=Dz2eiHV7EaQAQ%oF_39Iip8nF`%9T7?q|y@gJ6cq4O8FO;b87 zl3V~2e*cJsr83j_1Gg4yepCoq$2YuQvOWIt;OxX1--pSKxYr<hULcyoL*B2%`-r*f zqQlRQT@g8=(PjTghA1YaB^z5ZqB2J%k<GO4ve&y0{Ng?PmORg|{4nbIBIwZA=qT`u z*H9`%$8J^h$xz&E?Ch)zEqqLD>|aO#+EU$W<lOeb`*}m^PvE5JT8~;@hqhL~?16^v zLT;6nWy?v=$o=lE(N4wb_o55@h>hr=ZscwBQ=8<Z_U5orV=w$v0P09K%C{eNZ=~1# zCN2F?Wm?g(YwB}-x`-KKG=Q19fUrfTM;!ndz;uln=0<DZ0dJW{7`j(CpjN9V_+~wi zX>1G^^7}tu5hQ^}@c-egpdM?<PlHC5HhX>s7%DxWySKOhe~uEIerHL1882$EV^mdD z6*|@t<0mh|H}pSf7YJ=;K>+Si2@2sTx&jH!A&;m6Z$OL6dUX6NCf1FK*ja~0>{hqa zWY5m8-36h!G0IJz(_jVab6%HGvNmR`S3=mJ0L+e{Z(#<C1j|8EKBkdSnOVrxfjhYG z0u7S_kVj~B8m~cm{xJ4C*+i~c_DtE;|Nc8Sm|T!r^OCmkySm+!UL5uR@@42FF}*AF zNvIXSTGp?ee>oj7KD%3|?`6Yc6tpp2<_)g#cNX%!NBGGaU4^qd3%L9#+WJXZT>C5W zZLho?;Qa<rNBtJlzEXmEu=9tnHVoQ;v^(ZsxwcPg-SJQ=pO6*J(;IwjbEz{{Atpm_ zJu|YXdjI;ophJN@vnx`x`+nzdr?0okJka?PN+i^V1Z=N_MiT-P(0tA|Ka%p?6HzZ~ zOY$(=2$Cp{sD+q1H|;ZvyB%(%aMc0<S{xKWV<N8#J1lhd8d_TL1=!K)Gm8;$RKuM> z6~#EQUDi2#XkMXI^p(Ndd}j#g2&%iCJpt)VW4Np&ku`&B-S`X_AH9IExq^8n3@<lW zU~W%_4Fgz9jclLfJe7-I{WVl_46{?Kj*{j4On)~1Q}`ATYazaW|1c^l-HfnTVC8bw zQ5r_$fdU?b$TyyKb&hrkG6ihJ0Ejk&qQVbPOfncN>o=aByEj=k1f32W`~uFY8OTr& zVy^W_K>xn%&F<A#v#&4pO8TC;O;_m0Y@?lJsMC!v3eKuA-!>e%`EU3%Di|gX$a~{| zt^K3=?bw{<&xDL~sO^}Fzx6H5(J}kSv9%v0{5Q3IJ4@yMY+L(uSSMJ1(Cg#N6|bpr z>(cKT1M2-tkmvggj7qz#E{+f6?;dK6tKg3oe~4-L!Gj+G?N8hqb?(S-oHux^{z5yn zph&7Pzij({--zg6_VdwpPOnXk%>LP7w6C)}sw;BECtpL6(idwi8`I}}FZ<SYOVd~O zb2eDJCyU)HA|3eAU5IL1c=Sl&)#&G#0Cm2v{H54xG2ZhsnEVyq;%`vx;KKevRt`R( z7oubMisuOJ9t<IX%e#qB9y=|RJU!SJfNa`^Y;jS~#!dK$5<8X-LYBUUw+031C)j4F zMn|wXVx6_fJs)C$9Hfiq&nJu6f<EIghd6Xz+BVo<On%^6CnqLC*K8UB2eGwVYepqb zBy6=AHR9@G6YG#rV_L{*1$O`J-%E!ehMV|>LOtYWBRFW;*jR|;0~kUbQ6^B$bmJ$^ zEG6*CR^%n*ie`R=_!0dB`vVd06|b^PDPA}B-)SC4vOiE%Hr)qEEd}TqOzvnM(fv;m zbcRU-KIC<qH>WInw1Jp>_2W-aC=?$bpW0;2vsIfGl&)o`{J+&BaCqZXvgnhN*-aNn zFN`S?{3lB~1Pp%j)a#t|gZ?d{$a8%a{f-U=yeit*a>YKtP&-&OvPNu*bFo1z=MZ@@ zZsETKjHgO`#+bfwIa+Pz{c{)GEOy#2e+4%bL$}}Lz?1y_?p6B$uD^0=&sH33OD)=R zM8mE)<l<(l>X8@QEwRJuXgraYui9|UH6q(}XZty*J<oP}+1+lwI8{i^Sb7<km<O(s zHue1I9l60$`ZW2bNA#=-d&RM5;ZEQ3x-Y*1AQnNYYziWD4~w*Bq@I?a5dFAW3qaXA z--wT&eH*gk6at<^?xG*x=Af`8WzEsO!=8V+2d7G;ZrYDm!qp&8CbL0sLhC)NcWjOV zi6NBo80b+d0#INqI5<mSg)xKVVe~?&XjG|odt;_p-F!F?h&ymA$ffNd_yO{~`p0-# z^@k7UFV1NIXyOolYqU3j`Hk5&$F%xiomoog3HF}BuN5%ey}A8UM4EBy4eN>1CRGD( z#p&nf;o~CazJD)1Z#7uSYQroA?9K5)`XZ)|!};?TT{wnr?d*J?lWV!)yIJd%67s8O zp1}zUM-)Eu|9X3m`Tf3780Moq+kr*~B%m!J@mJZUHH>0-<12uvP-`LQ6xq5pZE>op z5~LOxsl6A8!-G<S{~}b$nILQ+n>DG*$Z9*Kan#~?vHd<_U8x1)o7u|$?*J|Sp8ow` zy`wjc8s3fyhLRprs8I}tKZbk)QhQ9HK+2<`8V&LRMx0@+_@E^BFHH^F0vP}G`OiYC z@A;n#4xxWu#7u+D9Ho>f!k9_~&PztZGCP9?k@6ePHUd#o&R%q?Ewym*v%5ciZoY&p z?iE-dco_&k;$I>M59gg%kOA%$YAA?<JugpmJ?{#;aO3FNAq%ZL-P=CqJPCy9)@o4? zxF)t?aqe<k!wB$muWVk3h8I<5-`n)|kB(6L#*AWPnVkh&o|1&*=TP9VB=@&ADye6q z(Ot$`573GB2I@%*(=4lpChZ?tMNV2TDOyrcf!RUhQS(<|Bs$S^bHqAf<E_1RP9F;o zU88zqF=q;knVz}w>+=Z1W<EBx(qyYgXi~+dkVoAFHMD4>duv#xmw9MWwayZhI;nx4 zq7_}1!<|p%8}<+OymU3z__oNz?3?QU&>8EG?6t)cbIts-D#g<B?WZE1=UKOxi`(q% zSYBc;Bm<#(3CJB#xY#v+;y4Qk3MM(!;v|3!j*mf^#5zKpWK=q6U+6`QYE`NJlBN)U ze5hE0fYZWieMgN&k90~Tv=K^&DBAWiq3xjQp{fEroQ%gg{ukc}LvSnvOdHj@$}mY1 zU`jv2aR`Vv2eX9IU5bI8!-VoQ6vL*0&N|u7${di##&ejc=>Jgrn{=XU$4v8VgyvXT zn$D>iC0ih9y%kR9h_}`l)3l4cfvZlazdaN3NH)f#cjCTrSF3q`T1gX^;!wmNJowU} z9Sb9ruIUiBfMV6x5Y9r)!-4PyeuM^(jtT9cF+n}0y=9ID5OH^YosSdW$bWxS$t{h$ zdT_3=s^ew7!FX!wC@OJ~hu{MuvH+Y4V9lpU4Zr~$RJ=||pTXO{Q4NnI;<<!HMd6?* zTc{eo$=*UE=OLCxqvvFZF7sc3rgZ!Gw~@K#_u%zIA-R7##hawW#X*vXmiM6X!-8P* zBd2_rQ1QugHV*dTJ8`uUNX79b)N>*CKgQ&G9Mx?yE$dix<L&UBS56;&m-f7jDeRoG zl|`JT6{?GF`MQP$KeLR>qeUQE#I5@F<enbr)5BKF@zHniN$u3sgRXRsQw)EF@1KMi zX2sg48;0^d`mj#$-0j9*(usvUtAWsgBZ(1{$(8vzU$}d!iw19~+~ka+(t^7ASMJQD zR#8v8QPiOcHONuz2sv7yc)Y6YA@^@bQuIAp%teU67!gTY=U26$bHnB4Z>Aq=YMOFY zQn;fV93w=;=;LOWM)JqA%eFI)VI`&VZo3gf@%=tc1$=st;~<kUBZQZAwmDcU+Gv)P z>&zjgocDBoCsM7uRMe(wzWcnziD-l%h^M_Fbjd^bS4^6};A6~JO>sOxzDf|q(teWJ zO7&vctoJCrlRa7I?%q}~2rdGOlWHh=13T6W=7#=o=_-|_i^2^>2;2xO34lHvj9d+& zkkYeub|_aF6*%a$zIxTA<7Xf!vH$)gBUc7HKduOl5AJ<@HFqTCuq|$g&~@i^v(-}} zwxiffW`8^(bTRqp0XU0IOPPL*Q|!zAK@BT19AY*IZAISYI1Ul)Wr#VuCQ=PiEuF(9 zj1>?Qy~dA$2{7W~-#@Q(U6UqK4fjqwuHBm6P=6~F!DHwT)D@17{@mJ~-CXU0lvrt% zSxQL33k+VkY)%xyE0qte{YE$4z+Tu8A`EO_8(GkhkI;x-3@{9)i`2*dJ2bxR7<^ek zm?wcO@eYt|ZlCIAJjGo&#<$1mms{=e&dQm9T><+GkKZ};+xhFZy?~hmGz6CQ^!8%g zpo|ddRDvYPOAFC>=&KVidO^)hgd~9H50@|!h^xlNQqnDGOFEmE@9d3Y&TrG4X_>Oz z#1czW(23J-25l4lv0nF1I4&*Y?_mheU$Zd!mac<CX1<d>lYQh54k7<5!Nuv@MnS6J zb7VaW^5R?(#J`?273N~EHEWN5uIHTpQa^{)<=skW<HKSzCnOV8qjUq&py9DNaN(bw z`n8vq)`|55=mn3stM-9^VI1*1VfoeO8@eq*1XNrJ0|xsdeve+t@*Yq+XgAHFzkQ^S z(B4YBS<z9X^z`%!J9x$l_{zPHW&WcX?0yJ$itPn%6sMDgy2fpa-!xF}*(%kl<M5_x z(*%)pi*tGVcg%f9@7ACpQ$W(h;0D<G|LhDA&_9IU-M~I3Zj_F>zK0^IJ4F_}*oz*a zcxHusm3{iUJ&I>-MdS+~7n*3$N~Xmk)@OnpUI{ciAH7(_<m8u=d%NQ|?z(Wj!C$r` zuf~lrs2t5-EtU2T=bR(T;L*znozC7&i?QgJ#(D!syD}vsO(rlhpxeK=u-88W0u`Tc z#y$!}`H3#@`NMrt|5@2SgZYsJS)a9_R;zh;FdLk@+mu@TZ9<>bP+y<t%Wij~g8w(P z@}*n%Z;Fq<N&7?>?~o}?EH8X@BQV?7W^FJoCoE>F>gwvMs&kmIQ8*i-0iKKzcML5E zAQV2fh*609&TZVL+x?G_D6buJZb{9usqxz9nkg|B`q5;KZ<mA^lk98#>{QrIk<&=D zbYs-qMjguvEVvLAOq^5j8F*ZCrTqs@`fH2vmo*Fvbg9~n`prc(E%<@^55{|2ul<a1 zfpt$uj8_-Om%lSwvffA*ws2%Z0kb0?qiw8JBXVz6)2vI3vm2Kw8Oydpc*;dc3d`&^ z=Z=UE`4CRDzDvPt>F(5g=)@CH6NH@leF!ZKeh;VN@KnR3ARm3w3}%u(FX_IJGT;Y$ zN^YIMSu#+WYRRlQXSIlJeSOnghi>0bfu&2IrLFpv*&s1Es+6bopJ^HEWlYZkQ6k5w zXou|fgF_X48Gk#R^xUS9$h)KC`ohkg692Bzji3MIdlFHqzkObM#B{bfOe^>OS9jIg zvkNQdEzF=Oo>*cDwRblEJgAAZJHB8}aciJC{RLYKe%}eutTz`DhPNF=*cMQww5uG$ zmHg&{0q7ZKE`qATCr*y&-24xcwBpG*Ztzs2tY-f=lM1ZA>4ztMZKqz>MuxUFZbB_d zykPO*`6R4027ri+3L~;5-@ET({!KM)O@oBMNgY6H$|zvK=Z+}?1J9S0I$M(WkYfR? z<N86Oy;+N7E}gyn(Hhg*uAZLTXO@0@NavWx8xd(?WJ%Yc^1nkKd8vQm((l>RkA3*j z7Wx{^2PvsqrjhwQf_dgqP2_IPGe!~!^=Jw`vTfxV(<eS-s5d+w@^Ih<WNA-K0<%Vg zp{y*BYD=wScAK5p2D!Wf@|xWDm^53vZPff-*NX0kXe3oep3fqu2sy^nr>x*Q_m#T# zdbyLVChBY}&{LXP#!@Y?XKjCzdrSlhv!XJ~<*P2u`xyz-9l=V0_Se=cSvUUfD^mD$ zO$(PIgVWa4z~MWZc=2a;Uzoer(sLLPiQr!!T9QixX4H|R71RKdy6H2clp{(b6HA&y z$|Zyc1_b4er20pAJ}u-kI(O;JZJ`zo-c8xU#-OmC#(wM=y_RP(%aqhDTwYX9`wx*) z;|n+{r@!>$%gr*+RV#XRwt|0l%YCfgswK?RH!iLmH|YU$P%{k{0HB^xvjO&(0H6jy zk+^knZ8U5!1YM2E8pBfm>50p!<`!Mz?OvdFY5$}tcXMToaseMSDHwsKMMP_U@<J9X z{i=1o544p)ClnFV!j~#k%^To+g+4L4!P@RMW*Ee(DhJcIw_G`0yEWC*4rAxfpFio7 z15OF2XH5<&-31Dgn5(;XKO=x8-8utUlPc0W73D0GzFo<NVpZVY&U*8l&di-cgQPpB z&O4u$;$}3FeAOGhfQ>~sHHT`=W*wrhg5SI9-Mc(zj^;8JoJh{<i+hL-1>_Fz)h0Kx zGtgn5X~l^V&V|nK3muGg_Ia9bNsJFc#R3U^8AUJ%b&7Q*`9(>wp9BQ&`E!VTn8tQ) zkbeE+z92!7WgS)O%WE<p8T9sTP!gKt6{ecLRxO#4;&D6-vIBzYOH0?1pAFW;ZMz<8 zA~ev~6PFS%GJ;dmkZZWsJ*x7N++>4}p6`YT$|cT=q7WeiqtiPs9Ml;5+DAXk7Lxtm z)G`I>3?`+V`NL-e7j#j6=_gy|(C3Ezwn-#Ly48)&?{YE9_!8h65#)6GFY+!!{z4rq zb36*dO8fKYd9g`>-{ra~lGpMl4RoFSjAG=oxr5#fk?TB4xi{*(b#s0KS96W5I4YL# zo$yE!Q^-r3sK<(#XTKa%{5;Mg(kUgE2qU)y6skZGD@Y{WN3L~Gc}nHP0+Z#LYf`rb zg%Ao;tq$|KzQ$$7%^e}4$E@3pqWRl#fYTga7jz4Z>R(doq3NV0uBiYFO?ch?eNC?L z4|^8mX)V)f&c1%d?Zjo)_iyF~CoV~3``!31BBOOD$zM{qL)$lEgF6E8dt*h2z`^>v zKW1~U9Ay8Cj(V7YH7mpajXvc0^CTk&=~x|+A>CY!2M-^fZ4eBI*`wJLKK9E+-CqmA zfT2gC_vu<Tr&>4!K%PAF<o^9Q$#ym?ST}6+!<*93Phmwn^PeND8arhFq`l?%piPd| zrf%*`JMJot<0N(*G0*NRC+GDz7PZOunn)tgHH1=LRADtI)WPkZnwuRy2j$-LxILTo zRZ*P&2_Ye>y%8RyodQbK@dKPPPFkN`=F)nSQtqEUPTJfL_l}c1L{;h{n92z{UXB~- z#=QjblBaB3Hvz;}>hei;$!OPkmV{C{RpH2lQe$aB0G63;YcEFEGqX-xJ!U({)QcHK zQKuTZokCLc3F$mE?65<IaOIdfh`u76iBM(XKC<1Gcb9kAc(h*J9MNPsjado7Wpm>V zdIVgJg9u7%E?1923D3$vGhPi<KZaJUadZcogO5X>pWEj8h!=KMYa$4Bmab_x*Ldf{ z8aE~F6rE@jkhw%f*iCTfsIYk^@(xPWp^lRD!>0>JFq-zeHZM1El0Ae~66-jwAPYPp zy1Wq+i!&zZhO+?GkdPBj#N%Str4F_l3j?LR<?osVC5+HVr(o!X8WK)^c>`WTsV=-$ zMKikLy@_2PMjL1K#$}8ob|vSj5O~gz8n@T$)2g{op;60U7USg_6(YTG_1XN{poJWH z!G<wPR6N-RSu9H1Y35Fy96ftpPQTlm>@-8k0sF186T5QXa_yfK$So;M<R(^s`qcO& zd85YOTQzR8`cWmrXN`}Fx}9jNSI7vav~jw6U}cxHOI-h;a4{)CJ-+5rdp&L5)YfL% zvCC_Z$+rdX|MXR^bYFXn?4<qy!Kb&>*xLsxhZ^@uS)FF*F?@nwUa5M1NYl}~hP_{R zSz=;YRoF~gd)+SW5>BpJSPEt~dk2R$Q90SjhQ(AYhX^{WEi*ot&4(0`5A*_EsYBok zww8J@t)HK{7TZ3lV5(G#sI@a!1c<1wXGi^6I^fI0LNuO!d7sq_u%w^WKui5-tYR6W zF8dr?Uol?-`z$TOc_7`zaOzH3QT(m_;0l@?k8|b~S6>3lpE&!#J(RsU+%^}56j{tU z4NhyfO*zKp()vwqt`nMasgm^*9ZdM8qP|N)!U>(22#MiV{r&VGMOt?mq>!rn<pM}| zn@D^nKgt5{X2+Dc*w$ZSjw!E|Q>DtOBy90OpMz}<8*;|n2g5H4jBBJmFVgIyK=k2H z3`NtrG#-g*a?-gjxzOx4HI^_oIICyg%^E>5N?%;V(@Q*>db?H8YL8ss22s)MWv|q9 zOXrq%sC4&RG}P7VN?dIgGdKKTNC5WOa0ga)=jF0p8G<$odu2{+`L?TP&!3CUK{lZ_ zC)Vy)T1q{<cBXkAu58zlIqBe7Uv{tJtA*4LT;;g+xtHtN+hoCx(r?{z{P9{p_u3<w zrqzS(n4f49=JTpnN|#0xm0rjiHkbCl>X8xP6Bf&ldoY9bO!nQ{8SZA9nhQ<Eo3%8- zE=&D+`^y+-u?7=rbiHgp@i}$6o9p&%STabe*5~fpP90QFe@QjGtCkqF4UqspKJEV9 zl6Tu$%69w|N5Kb?4jiwi;x!%{#dPY!pOWuGMSDBHZ6Sln3yZyHff8G*>lEH!lAICQ z!fas*QF8g?jm4h7bv|v7r`AL2p^O=*TDd@Iz|MRnygcVMDIq$rvaRV#3GXNo0I8&* z>Z_{yo4*Dc>QqL(f92PE9xA&0-K1Y3wb7}LNf^hD&5avj4%h|oZxQjt0x%P#>acSp z(QaOVMWD-YEimClyHBuXigo(-5wYB^t{FA!ER#0Q;sas(32Z9>8j3-Xe1-5{?J)2? z&)7-UqfVI|$j3s8X)rDE)=iuV1VLRbu*9E%9aKCAjSQuQrHQy)wLp|69c}GmR5cM> zY$%kd#&F#;s@A;3*!}#S0;_nWew1V&h{kGe&SBIa{X8=;TDSa23EpO1dUYGs+lP>r z4u25#qs%^z(py10*44>!zOtG%v!RJi&Z3-T5jXZa!mm7%8G8%Xz!`|h;DSvEBD>Sy zv)&>^q_H2`4$4QjHyeJ_TcUrK%03$x>0{*2#_R58NLe)AO?+guH@cE!(=*tlHs<&2 ze$&=;aUyE7-9P;CQGd4L3quF$569)KkI0iG@7bf4lB0Ug<oI=;mi=SV;(@~v?#1ZA z){x9Qe?UE*242|T`p5C)F9R$-g!s0Bx<15D=C5bAu-JH+1@vpVGb`(Bcvrd4&Gb$* zl)_?uT3%duyHbNGBqx|UY#>Q$QZf2+vVGI|fID0_sHhXvhPM=pi)NuFX~zNZ<9jo< zwp*dZrG4qcIukqVJdN$MX3vP79YP{%?eye@+uNz#7|<+C8GH>w8XvL#E?X^>Xj;dt zCxoyU%mX)A&3E*caHW$ypYxkd&!6&ttaP~`ghey0cdM8g6Ls1w@C)EGnK7Bu-dsT4 zY_uxlkkA~LPvF$FP;$BlyFub{PRfbzFO?O9W+W~2?=a7fMuja}TVfGv@&S!xtB+sN zc*nG-$wlr!eFYH#$2eT7@Sv3ZD5Bs)d0GE^t<}6g1f_&XXxA6Y14~Rwjkp`r&ieRF zf**C-NaB40Z!;dA?|yOWpHF$bRtLw%IO%m(!t79)Bft1ob&RShX2l2cyEG3RtB`E4 z-1CR3A#lWrD%(1x#fQ;$jrY00?2uXOq7}!6EPU(sS2-H&CBB-8b1TRyyRde08U~>h zBiOuyPvUvl`q9rDG=|z*UvGPnC$jn(?V(zf*>`^x1q?-XX-93#m$WIDfRFh)=gpGN ztDn#`&U+m+CKz+kw<)PN&RvuIT=(VzXJz>;lu7f6xR8rZHdH%<1>YN|P~J|z!c^LB z`;9Lo+h?c4wB5Gy=E_TLelo0YId-={Yv1`S7JhOm#S4=+**j+DsBY0w_fTsH52+^0 z<oct!q;EAW40$&AR(x`5k(=t~c7lsMSa`3k2D3rbKJ&BByu4?7yu1f2T3%myE#%p2 z@vgNlJ(hT2VwK;mpwAy$7gE#1Pr7ifs4kSt;P}w);=K^D#?n#M6$Yhl?~4>VD@Q(5 z^J>i%OADFzlW1#PTk|CT`KLUfvlO!inmmLNPt{z6?hyIa*oqok3F<V5h%mF~Eh(64 zPF-Iz3^f%ZKbw@k=`K)ONws!rOleTN_6Z-c;3%lFzu4f&-A&*DAp8c1Pufk%1cUA* z$@UP1?-J5pXeihrQ`|Zg1t|OUU7T%bobW}T&|bI_Fe*AQT7X&>W;JAF?29ms<~^>A zq)R*Qm+^6f0TC4hfWtTfdK@KzKo~~lrFxsiH-XSI9sy*6c6>@#*F;0rnw74^*_3ZY zho9sHiPSkOvwrX|n4J6yysJTTf<=jZny}DZG{cw#g@Z3H9tIT%@9UHmVP6#qZ8a*P zhixmBqhC=S&aaWL*ul;Y(mkMchsjq*QrtVp=NO(~MDewl+F#(T*>~^Ws?|9Ie@0%o zMeKB=yftOm0pP25`U--tN0o?vj(<?Nmc1LxdS-tOzjy#uF)cac-ii{(>yZ*sK7Tfi z2seDTS-c@yYq@e*?zPhS{wJ_^q}-LZO!=GAka=9*C#C%#e!h~8G3-0zOZwnRC+bRk z?ZP_SoY*BV+QMTW(zQWi(}2(L+f97pK`zMSO>^LuZI`5~)V|gFLU;O^u-C%TM4O^Y zQ=JkOz5!VQPlW3#a!d}1fGd^8TvG|sG5SO8`-@mLgbHHumyrDtrj6&8yB06alUtVH z5`eFs?RM!|RL~L`3(iY(yRY+ExY)p8<TMi2zn0@={Pt)ZAb`WgM;McJ{?ph@3CUgW z;M&h}VjIKTLivF+S{0sHJ@BV;HQRu6zXiG~FxC@vjL@np`E>=P1~5lp?PFhdj<A+3 zw)-?9RbRAePskRkP}p{bdfiOynxxDzWe0{4^BnoX_#Y$JjIq!1$_=JbvC`W4X~w$o zdWn33Z(6kzg&GC@;U`|Lh<CtF_}>RXv^0mkJ>#~|SJrLa_%jr(_F5^`n}hQrLAhC! z0pXF$99?9(>PNK!gQ5Ap&{-li-EA|X@hz}Ni5~DIAUmskgX(lp3GE}N&-u#G)Zxl0 zyS@B@G_Rr7e625v4yp&xia8OE@>lG(ZAdys)<|$uNc-7$A=Uh~UcF;5xs4|Ab?uLr zs}Td|j-+w=mTB_uEA&tVtnjs;K9g({D#ub!<eP&=q0yEqclu<QlM+9`O-B8~#*M<3 zR$;nJ*U~;|ToN~`YGNdg^nb$P(wqqnOiv`1vb+nSvDJQgW{(Gtq%o<sMWyN~x=svA z&Gr)yY)e0E@r(@qqJ-&f3X0sx1zy|6_ar{2btdR<4lc~fnFPd>TJ=aPDwlpXDy)gV zSF4y}>c+d9Q0ZpLo*6IW#I;KNh*xVo<Kt5>@tH1oYL>au0k{-vLyKj8hRe6VEcfpA z<Zy3z_lK(-Pq!`&QHfc)Hb1)^k6b;lI^7gL#ep+IHOaubxT+K8yUJtay>@5Mf|@h~ z`i3D8dZw0)yBi3I(byXX5R4@ASb`uXhyOZb)-OjbFEw}s@ecYCNMLFIHL;`i5vA@k zxcB_W{j&?NSV{0F3y4f2v<`)a;KqOu<2GQ&$__zUGTl1{!3?xs#A^_M^d)l6eb^xD z7_IM^?D^tn24tB?8{sk=_KcrI_AZeJL96GjPk!T##iucu-oaE|>886huMe|{Jdy}8 z3_;adm(@qM0*IX@lv#g=viS~O5Q*8SUdA~k4LkhM%JBnuADc6I`SvJz9xFhcd;c8` zkR*abY38e=Ie-HKY37i*=%nYRv<6L7UH*2ox=5ibDxsq6koeN61El!6VBK4&7!qDN zuRXX{k1%UVWZHfLB1$`oWFt#^Y8S^$cj^M8gDuG$pT&AHNI58!lp0iBq_@2-NUZvP zE9Hxz40H_AhYr;%s_Yut9pYw@-70LQj>Yc9L;mprUIQsAf_l@8(&|yCF@588YF;Pv z(dcxdYWA1*&<(#wsh9BDkxkg%=)KG1u@qvq3We%HKe_7K)Y(6~>H45%DxLD)qeoGf zUGNxiKK&*60^PVL&p>#c@TUH|QIn>^M)Nd96u>8HzVz?B$EiVULXD2?j=s9yc!ly( zN<E8f=JYEqgv=--R-zXvD=pUsSaI;-HB@9PKfm=|DBH0%!!M+GqOmz5`$pwI{Ci|S zA+mgnjN|=sg(RCzb2CitiF^&A&eN4wl4=~U65$$dbj+A?Q(YOeYa0h3Yi+;lNVCov zf3QovaymfborHj#vBB}I^{-DXAFe&^w7Sprp_<F!nV_J)J5K$O1lE&;%h2-<Ec(5v z&uZnP4u7l7>~pSbRO;FZ2jceDi)0xqI=_Hyv59K5Pz>yp*OxKQ=-$->aw4nP=JxPB zCen`A!+skEuTQ!|Be2-N^KEi4<(emEWZj9{)y{)Zk*yK=mm3iI-rRuHQTTQ^(_rn& zd7GHwS?Bi5aLV76DI*#KaZ8n`*Ph(G-BM*PO-g7m_O+S{-1Ae1dp^q{L}`>7p~F8} zB-=4cKhd|OVD;9v`%4&!p8bE-u>;XHJ5cvQ=>=Fe#=2uJ4LeWM(8FzLS~_I#IAe@H zvmX!yYOc?$m)vml90ER0YvkITeIx@X;RTZ4J)!3Nb`a0-F6>y!H|cxML-bpoSaG(v zBsq5I8tp4-B>5PLYMaUNw_F=l))(@lG+P$$4VlzF*}xbB<xIYmvEElQQm!Di|3vRY zqtAAahxb||a4dd(b~7%t%$bJwI(oLNBN+8ZS^q?eK#ip%@by;SW?mTC)un`@8g)x# zWGH{2-)iSDGiwM?0*~Lz#k}0{c)GQdq{&Ct7U3J9H&fFCjPp{Ps5@u7w<%tAu66s| z9Ce~VJRn&5V^wd@cK5XoH^Uxv+Xd5^PM^|lw_?5|jIO^$&-%aqdk9fi_&A(pQZ0RN z3@6AzPKNSONu-Ys@#-a5DJi-G$S%S7!FWW(ubD$mHH825)#IH<kdX|EkQr+PFDuDr zjRuKBDxdNuK1*V??8G_9oD)bS8${bcYWWH>h*{BEazFJDFgT;IZ6Opi(=FiZB@LpR z#<cVtLJqg(yQG-r6VgtUJnS#0>mo()cA9L%Mt!B`bh(uCM8M1qk$1dX%zq;cz6f6F z({H&($5M~JN|U-c&*zYr`qHc_5i1&b2Z{;AO`cE!!^Ankx@fLK@9w_?;uCt%B!ECX z9w>mh);G;%x@STR;jqgtoWT7+uT=!Quv1j^ALi_Hv3*7^s`4Euh^fVkF0~69tF2%R z3b}t(QBG+91ygL(>>8ar7`fAm$SfYjLXx#F`f=UOj64Fv?TyXaKlRl35>2ByN>`VW zgN=~W^5ySoyQL@XzcrVsb`@ga@jN`YDWsFR!lLr?xTQ=-J}hlk0Z;6W`E0CzKayeI z4$Znl&^qK=duz75u3dSV##3nLv;7{bDW+TZ^_`zzXc|?#=BBTlm`p@t*9%N>beaAI zyy-S5aFoa^=f9K=TZWHoo1S-dbtMY;%QX+G(+{)CcdtIJT_3L0?kk{8>S>I~Hgk_2 zmOnA5JQNPtmXBX3!SPI{i`ko8wF8?zekeSmk)UjeD|@}(P(I61*)9R%o0q;93|bk9 z2Jhp!Cj$3&bJemH)8tqSnf?#)P@PA3NB#jPne2_)d!OqHTFC|tiO>Ta4lQ9!v*j?d zCR(s0`NL?2H-9e=ead-qzW1^9TmiF!K!BVL6`SJd`EbM8^9_dOC%fON53tX3T%TX= z<l+W_BHCE9#!$HU6CTTcB!6Z^Wn|7%ch`+K3g=Y6#l*R&80jMe^$&EBUq4-o(zR0( zf@aROH_^QnKQiUR!}BKL$AH4FZlVb(W?o*RTc27S^{C&#Fkr_-HIxJ)bDi^jYB><c z-MA{+S|{?g)6&>%t<m6vTxMRLdMjIGoPF1+YEWujbm9}(e2k>8l0cXsq_-nY|BsGL z$9Azs!WoFSn&JvwF@HjN33c=&_y|a&@f^-CneUsAoOa*!JIv4H)P2bsf7&!&WL%e; zc&H;!Yb^u&G_S6YaW_ZfCMvYFWr22}xYG8;y-qUHu%m?BveZ>sIM~LtCLB}!6=^-T zkB+l1jIW}7_12GiXwkI5(4h;L_qwiED!ayK^*(_4%^-XGUy0^DS8HdJXsl&Q%bAb< zfUIIaSrYI|bv0`SQ*Fr=<qK^F9#}uNjIT>0QVs!dCa%m)T%0PGDI8_9HlO=>#4>pQ zu9&x3hwzpry-1eYc*X;W8>~yNJ+t<IaU=<%0@|dYJ}AAS0JVY_FT`|#9x~d|5mF=G ze&5(MoBa<2fS%|LN+#p$8p}LDx(Mk(EpDE2UzfzNBiqqJ?x@{rjbTvOu9%6aJd({) z%BR1f87)SPMm1G?fwVLaQgX^IzOo>4eg&Wk9lS&bsc5x<)mC^|YJNb1mD&x|7`))y z0!OLzZ9@Id-h{k`aZ;&q@%y<eP0SJEH9l;2E`iPt$NV=lvWSRcnf)^sTZF}w+GVPV zR~(T_fyV}ZgM);!K-{Y_Kdl*h8)x~6Z~ObwZg?fin>u(vp;E(vIG}$?!&ZCIID_R0 zmUH;hzI_!^(Ek=7TA@kjF!@^qLY;}%FBA4FCVX=<XS((YaEz1Fznpipm<f<PVVWf^ z&lqGowY_5rnus<gff0m_%W|6cYVImCQ&xGlFKU_-iHDO*7JcN3_fhKV4qL3USZ{N+ z{GifuYC+rS6Gx~;O^a3SNV8q>4f-vbPZKYhj2k^AZ>5^})$i89S2SU^ZzH=y_8jL? zGu?$6#OsMuZ^MW}!NZ@|a|a)OjfspcMoDivOwl{2BnlxYo;vG5qrt|bDX(TX*1&e) z4HW`aZ@-DyO4f1hk?hz&A>EewJBx@MFLnV<tA3)Vrq=BF=ATazjfIM1kwV`M$VCQm z>Z|o#Bc2+*{H?IZ35Q?5=aJ0h0nh{Sd~?-Qlc*i<lJhk=oI5`+_})m2oZI6>wQRmK z55!tiaz}Gn&D`z~eoHAo73$wRx%x7Vx!T9zv=KTk$!bhvnuZM17PS~}YQ+{yyCwe1 zNHv{^U|hL~v0-7JW<K6hOj}kkHSe=E*pQk<YNT#!oUk+uBxSGE_k3Bo<l12sa$CE? z?*1R3l-y?nKDS9+d-&BU@W9O@XMO&)a!-yvK>k3h<OQTZNYb4xzZCe7Tu!`p$N;U= zM8ml8L-z91H#4<&aOziNtH<hGYw5Wsm$ElaBm;||kbKejNwg^oL}=SAE6yXLiw&+B z?cE}q{wA-;23M@M;pAKU*IR`QegG?UwmG@^1^Ii1c+I4$9W~<F0oxOIhMo`vLiofx zU*FS%uvr;gPRYO4zRsR?8>4)ku(rnyS_h9^{6sU=^QIa*36HR9P01u&ejw5b-JbU_ z)BO?{sS*XGiQKnn9p=1LsNBEzLc~aNpw~*Sa%5zrT=i7of0cU_##v)Vb(gWkNSk>q ztZRi2qCagMSEIJA-ok2tEX8;#;;d|XP2`(y-A{_a-q_eg$nJBbk+o?-kx6eczNu<@ zdobAMU_!rDZ|-G-JGo+_j9&i7w58@&9xH`zq(8Ih2bL?S#cf?NBkRIKpO31?x$42r zRWCo))toW3nDpJcy;5k(uFY%Hul)Kx){%;2vOwTI>*AMa(1<~=6{KJ|M?E4O6DaAR zzY*%71F#d1)%D*xEL~FPjD=CHx1b3RR`%6o#3z@R;UO&OV2F1wyN)xoq^&fWI>=aR zS#q}^brbceQ>L}Cbud}0tE-D(_dJtp$V!H^2?;}^+ccs5$k`O5l}Os`GBh5jPYSM< zj4%6zMeF&q6?L-p`7WkyXMYs<Q*zMk-TV<07w3H$qhaextB0)&pkHadtwDns!>6VH zeUcxKnZYsU4?@Ba1v^coj_Ai<4}C~8vusqxn^%$OhffLBwYs*Ffy=c7o6ZL-wQ9?s zH7?R*zD@Pk^Pob89lMV{HKE(5)0{3Ao-lH+n)@ccp$jSmavF65l*9FZkEfNnLCiY2 zVq3_nhy=fqE*6t_b2zV;F`E1_DAt5sOT9bY<M^~cqoHpOk4;$}s`N;<acbM&9o+f( z&*h)Kd4VE-4t(U^0XJ~cBdfBI{SiByssnzI--`ww$&lOJtaoZ7kg4z6t6a6yL!HNC zddl_dcZVz@Gq#c9ny6LFuRK&^)Y+%^Iz2JN({HghWYx^VvvUUFDas7@H8m#3)ELc+ zJ<+uxdSz#(v4?iE-*OMK9G<m{%t0n3lgtr}Pl&He7<$BVv|)0``3U@_`msA%=(^*# zwAt^3rL?=vO<bm3fSQR*P1tSO?`5qGr0jV^$!*L-oTs9zeN+=H9nQafiwOCD@z}v* z!|`YtT)~;f^N<^3=kN~NgqMSNj;!w7ye^#xVGEZ@Pu!FdbbaAqa#EnX7Uc{sj&tpr z2SUDkon&gDm1}Pn@ZgH1L_ZzM#hSQ=VW#RQIUtogC7p*M0=ZcxDNNl{RxTYH>kB1b z=cRsvU53aWSL{EBb)69CCiR;5_AMeFO|8y0&&4yA2GK^f={L@9@VFGx1wo60XEOJx z;iXx7i75W`$61O>uZZV$Yo?wou3&1W`)3Ne>DrH9L<wd|ix%;z9(;@LL(OMBBbUg= z)~>dNqfTfU@C)Dn<4H9QU9?U1r|XwORV!g<eI;;jh$<!0=LA;vy_8T-kMUCN6wB1N z35-DFciD*EXQb*tt2@|epK5#K>|U#$pahwRzuar8#p6qAD^jI+;%Ukg`YH!$Uf3OR zNMEE@T6WAhNu@txdvP>`#SH!=D@V&Y%nLSFU+(AA+2!X`dqPyH5U;pr|9(AwqZQnW z&d!!}0}CpLyP7kb^^lc5Wg*XdcwY82Tl)GMLs|j1AUjuen`|VU=B2t;MH#0%YIg75 z&0W>p_11YShZg+;4;a4Ym!Ku+TX`s!`U??{!nR+a>hg}peRM|RXU8FFdtE?hda1-F zl9t$1T=9qHXs`z!JwRN-(rq?0;-b*cU0ykxWDiFs`<UZ!#u$@5$=l1dfVF&ch;Lo} z@<+mX>rO=F<d;Tnj}%1$UDvtkmkMnD@#WjB|9Feg-yyf(8Q>`UB~|JVh&{IJ%K1(G zU6ETM-gSRJl)pXPq^~ENXY$dWlkY@}d#>`vqL!0cNh|tQb3tITtg87_EfV7_&tz{J zrw@HoP^}9nvZH?J-_RuJ9MYy%v5Am{rXS%h2`k8|N{_wUu`I^1t{^p-GW#=Jninr! zNyxo~8r_K3hS($qN0p)$-N4CgdzwEmS-k<m>^8mqmN&nAzMQH>9*E2~Wvmj?;UHM2 zG~Z^plmZF_MHE>&IPi$fZFFRzLXkGEUq903@fvpUSG!bPK0BUEjnAlYTTPSM(I^(j z7cJw&YzDN^x0AVydCO3!uP>3-cWJYrAR)6-lBD_cNgVj1zDv40y_nBQ=qc-P(7kcT zhPx@tf)*Ku3{m-D=(F6LsTR%N6rQ~>Q7xKmU~Hfl14xS%>AsvtJSnia&|UN$rBtl~ zoH@rGV<x3b-tE-hS1gzQg6N?d9<OOf0oFHoOU97tmGzeS7JHo3VDco9i4J=(EXhq3 zNyc!#7;3Ecr72J6clnO%TT@$Go(W7O_uupK3T}u_GG_Ky)EsYrM6>QQNjqHI<0LcM ztdL<4qkG<J2U#y8fB&!2ey1d@IBZKmYTsc5cH7PkFT0XZXt?YWW+ow1$3Jo3J@NCh z4IC4HgqKCZ+xO$j`HCbGaI6Luoi7qaC*CGbkuN+{TPqvV{mqB!O_V~t?Xz>sA;Yvu zyG-9h@6wsjEZn8)GdXs+#ze&#YEje~gxPw+0+mwQdAXrPS6)e0jQ#A!8T)tc56=oR zI=)v`?$$A{pGXciO5iOl-M_La;gspqLk!N&z88&Wtn!f*N4zhre2?e+GR`v-&v{qO z)P28re^_22Mj_-MA!k5q`gmDJg#Wbc!-B9BysxVDne>j<B)Fn3V`w1g4E~n09Nr{U zk*1k_v5Q!d;okT{?FT#9X_&gJ!QW)$D*mjBzAdOLMim3UQ$0DOv+TnOMYdq4u#@Lk zW8aH75cY4W2>s)tOJh=*-ex(eHS3lZLUh)|%v`P98<wTR*i8;;msn@Di0n=Md*o(N zY!rJ4YT|^C`g_MPUkJ*#s_xX3yx(N*a5LX2M2=cv9>@-WgwNy3hZl?JKb`lTy)tHO z6m&{(g{A1eLxqpcH`f4y=7_ch<tHy{RX1MG$>;Iz8gCX0cj|ndsFsHSn`lC}Oio+p zkB^r3&^b+55KgAw;6bGLHwfP+xRjs5c!=)v#k6~aaZT)^xbw!^>MA-;{m%d84XdBc zyjsUx^HfbPXfS_s6CSuWb@2iD%il|t`8LYCmF2#AtDDfLzxO7P8q~T*sNEVPOs~k7 zT0e(%<v+K-xEk2gV^(gu`$#6oIL_A(UFzmxzJ(jtk}av{c{8K2TKwhmt}Wlg#jiQ{ z?aS9U|K^@b*C%vU-a08kM#rw|o?@IIa<bXb7O8767%uWtOg7c6&)N8rl?$>z>(lx( z#C17R-<!J=QaFGwDF$COUnl&RL;_WV$tZH-<n1Y-x+{-O(wxaPt#6=Kvw9t1wez-f zn!96DX-=MX$&;TwZOjqNlfU`HJVsP_J!TfYcRNbqRKfG*8uDg0GXM-2TA1E1H@JN2 z)y)to_8+f|d*Yc5#&7qwJ58Ki8N;caPH4-J+u6$0b#l0Q+Zm&oxTBwY^twz;biIj2 zRVrT=DJ`UJW#60=x8dZ^wzByZIYABF5reuf!|BhZ|HK_*CaB-7%xN`O;%~1EalRXx znf0zLGgV^sU5>_Zom^|G@NtgetnN*whET=WWQ?Ke>IKwg-X@n*AG6xZI-F!y1+*W3 zT>h`Sdrny7)Fyok4<ff2d)prf0f|^bJUiv#36{wj-y23oB!x55$v;5Mvpyjvf|Ypv zY1v109b(RL=z<6jN<&a`MCg8qAAyA9p{sntOoF|&s-mLrPhEuzb%PJySy4IJeo#Qo zDO2q<`LgUMyi#_v$ytSLHxX0M!g7eGCQs@~x@k2oWTXZ?%!^0CMM?Smmzj89|8gDD z>O#Ka5sK`Th#F(1?_{3=$AqJ8c^ibJoxMvpUU}?8IH;>B2QxW#?kMp>+Pn|l1My)6 z>3_LzSTz)+UZLg*4M+%Y-TDNPz-;yz*>!Nur3jZHxhS=lt?Rbsd!FHF+kd8&c*#BA zH4_PJc}vQ}pFQ)KxBMo|2_7Akm0_%6b0qiGAC~@gezt<^#Jo(TGy~*~%2Z2XZ;#>p z{z7$c=}n>*Hl|u<3nlYR5)49&7TNx?vb29&I+P&*49bGPSFp=6?nmD5gUWlI1Z<uD z^vE&C{)24Gc2cuK=2S!ACtjqKZ2Co=oaiAw`YMI!eNU>9@MpMIM>w*|e&ll5v%vos ze<rN1w`27KJTZ3!C=GbpBa-EDD=inhgxr%I#e-i>%hfU^jCS$0AEHK&B`hpaD`dCL zoR|5VbUC%M+M+*vOkYuG)FPK1vBb@!&G^gWXya@dL(^Qju>tkZygici8P;Rs=!vV3 zyhR`rb#v~)Co^$3)GmU^Xy{p#?iiO{tEwk3^;`TuAN(p_Ep_0}3R>%!Y6~#v@q63N z^!$$9V_T<~RZH<?NJDs=EU}4Z60Ys=5!wW#mBz0;xi?xo{=S(*HbY9Sg8J3jOo0&f zeQ14$5l!F}-aM#DJ}AH-WpGw_Y<^%OQPtX*{!@GSy~@(Rc+QIm7JSN?&W`g3!-__O z=cMySL1h^C(te!As>j$0&6BLX%U<or&yfU#=>dn5K=50$YJMTi<)tO%Qa7>j%^46D zh0L?;0AmB&F$f3J7O4dH+&H;w1+DDX`qmNRab-LRURCS!IrUk!?`<J+BMcerU44$J zkNLl#y6<vrQ%-mo)SGWZ-=DW4KW-2YRP_P><i&2{WU%_TwA%1ftV=)uK1aq@BZ;Om z`xqoFi9E_WtA4!jB^I$(;jRRjrfn~*F<-y8@Xn)c_l(L-)%M=)*w5gUepqycylmh~ zsikV&Y?hIg@rf_Sj+wfA(XqbHw-R;s0oaQ6<}Iu3#!IWRZmntG?JloBrDw~?+i3v} zWbW(yzJ;t_%;P2kDJA+RSt^Ng`3mhDiIhOww|v4`IbwbjPeSiHL-=dsY;K&l!p#vd zF-i32g{=_=Eyx0P$FS(x_t1dWmgiBZNx8VsFUFq8kNHr3rAI_h>m}8lTbXJ^*$Xl& z7%s=8ZE5cQbUgo5x9j*+y;iBs>kH5JS$9-gb!<<fiSX7Z$oY>gov#nn@IABo6ZKW! zjrCSK>^8|x34@agWRC1l!>uk2-O|n+OytxoGVNa(5}qXq($$sh8+Fmt(;LiId#;=R zv#}gF3)MY6u^=g>1JOl)&g<MeG!gS+TDR>+2`f^>IH)YY`C2|evn1om`(Ei#cXJl5 ziYa}u*ioKbqR6zp<+Jm-XWdA1f|2|`F3|rijy(RmSpAbu)U++cJh_s4_VnOUmO1Ev zT<OH?g@n*~8cB)ELc&4A7{L~U|8|-gd<RtTroJB#Xbf6(RpL|S_GB;YMUS0Gtc^3+ z`@DSXY96%}G2^PH&xZKax>{hlDRCA^anMJjpgP|@BpYt{IJv>N_mzk-p{e0yuI~c! z<=V({sD^EfTF;|2Z`547#_fb{4+ewAOZjm}9Tz0~S$$+nIE|;~71&2NiNz^#etqJ* z0TAA_Q1*^-OOo-GKO?u*uChbF%^&F=NF2V?C!JVQ`=frL!7j{znRrE-m0tYRFd7v$ z1oLdyJ{VbXb%IvY%+s=D?K5OOTFpW~e$L4c_%o_Sy0vb+spZPHX2o>X&NqLfx-Z(4 ztY8GO(!C8gKal44jj*-~2!0l*Q-4xb_0nD^*H4oP5`Lyf7q{OLP<CmF+gWl;o}Jk@ zomxArSvH*4^|AIrvs4Kc#qi@vc^-&uiBp~yf3_$kYR<3^7t!wUss6a~u#%CO!?xFQ z$PgOFZ*}Cb4729tvXgs@8~F9r{ue#l2g{aDAO)qavEa-hZFaG-Ro8D6Am{LG$ELrj ziHZh4a;2||&>8~g#)G|N-kXST%VXNN_FS)Tp<@jZN>KbPXpo&}BuD#CKuT9CeV#qm z>e!ZMa<as5`GY4<`h3b};wk`$rN3o$3rI1gNcU?G)bOV#GS>_@Go1D%-546sOg9C_ zNI6C5Bc~q8{4NlPRr^u*K_Bm?_A<*&S2#RWa|ph53tG;G4-(`~fvvnhb;jp=6Rl}) zKt5}y+?PI%x$Z|Zo&@$RE=V#mRUq%B(fVU3E~IQO9b=<UdB1T;KdU({)tGtYKlo24 z6}A~1%TFco-y%Tq<dX(DUKG{U#HL{Til&#I_X?$od!nf$&6JcpW+R37W^^*0GRxZm z6_IR;;zU}PdAddvByD?;wftr$Q7S`aU8cmWQiMeM426ahj&k+Q7S<)<DS<2%+spBh zvd>NKd$@3}hknuO^wn=sHtNk+C+j<(+-68q1p>}FI7lfNHa(ZGNLNC@;ry2l^GVYO zuKu%%?Qa+IHGkJVv3%2Vp)*Sy?%VR6y1=(~!@rKTtA>Ww$-FH3`2N*1(=QQ!eR&l2 zRL9rjTfQHqm2jcfLE%r=YHE!rQF(TTpfeEx_ISd&YTRD<E#<n>Di!PWg~l&gR~%J8 zS5%6sg&z4;l(GC+bNT)|*Oy$hf&H@n5}y%Y@z|ngh(SKkHGVhcn&~A_<FIMY8&dVx zXQhVS;OFP3sJc~bS-h$z?BB#356{}K756ULnh4BkojbqKdtrBgvgi9k{{{a&k$C(x zIyyM*n!4QmFE{M-4;H=dp{=^SMDT$vua5Tat%dXW>B)wz|D12#q0hXxOQiA9y1`90 zgrj)hKt|iAr=R{o!1K$8Do2snBF%Z0_?V}8)gb9cZKkR9@9eV(AuF%1-m{c^c*nKi zito15oa<q`7kl7`-Pfb0eL-siYJ&s!k{V=eHwb|3T75G>I2hq#-xnU5(h*dN&ths1 zoEvA+?5=7YSkGO!k0SN7E7CT5<K|s_i3bA*_121Ym)XG$Eu`gYyV&aUiv*EKzj%9* zBTt|P-O>}hNx4D07pLXay`Gi{Ol!g;+~tp8^gExu;!OPy{ES`xIYrX7AxZV=7jG5+ zghU(`k&Rzc&_NMGQRV@{hV*wstRYm~aO*vM^ay;T`qQ*GcP1n)59GC|ud~~iGy8p) zZ3pUR%f1C+cRt~r6Pa9(a*P3cv>(?3|8xE!i^QH3Ks=D7ONQVjRmQK|3;A%Rb}vf_ z?!KuMy!t1ESMR%w58WGC>)BQt=36zWG(3NS>v92nNab$?fkT2<M;=?5^8b-^-SJd5 z?B5=B?7jCU$H?A$W^dU$ibBYC?7a_VWRrA6rIJnduF#XLBq@|6^LL%!`|tbtJiWzz zU-xx=XI5ix^XmUX1TCwOp(8*%&K`gzmFciO1^L|yUcvpX>E?Q=>l2+Ww?Q8K2yAAs z+CtRdF=RhHvTTIin<9eZcf(krScWb(Fa!2q+x;zKX}wf^Eu)VM{|p3m(UA`wR=wrd zVuJ=5*R_dtLMmB8Zb<4Q?HdyBG$7UG5frS#?_<<UjjX6rB(%=lC{9g0Vq5=?o_v)x z(jVG`rDr-D^FXk>%M;(qC#x=~-S*7{7g<|I4=Q%-R?kVCqXRyf1m~ILlwPUYednF4 z>bH>9QKS@p;a>F6B1yMdwo}99&uPKtBkMupQH7#^M`0-&(ZOdyHaJ~ff0!YRs?R^0 z)vuok>9n4A<E_<s80R4A8Ou%(p2Or*N&k3HD^Hj4GuFl)Mvi*m_)V>-a<Afs+&R;M zF|*F=nBl#0C=^A#$soh4(5*l3THZqPa<k8F?b=bfJV4^9?%bF5tD<#9h}&W~&ttTK zvK7#|`b;HPIqTx~e_Y1CedoHIAE4ANs+e!(^+3|MOr>l1KgI7e!N257c9g^t7g_Wn zywEECZ(Kf?$=+hW*7l@@gqz^K=e$l^+U7z%>G~hn7U#z#+fQ>^ZBJ&kP1B94N~3en z)ybbhsh_C+(xBKh*91)X6k=r309-7v%^A$eMG}bpyf1yh=hNi~MF1co>xddP%SFE6 z#d(p(nXg{EKf(*nW&V7<+8%W83v6w<c1CC&PA^hL<ewZRLU=pRMD0;GTXjghQ&q5} znVyh(UCG^}Mo6d|86Gwj%IyK2;YKIu9=^-&URH*Hg`TjHIf9!a5*Y96tGN_rveipc zk0}XkSwZS25C<<P@+e$zm+EqiM}_V6qP8Pe)#wLF4TBrpDzdtww&_*_r0~GkhP2OY z0e+Zi-y}uz&1!p8m^+Zy>XOzDIDWXCf6P(@cgYi1DHvDMd~mECH*UuBKoUJ_5B%nl zer?W#nOi^ofa2%tWvV9h`S?w{HNop!R<5(7vS?Nd=3!R^atX`3bB~7i12x6inn5ta z66j6(5!RJNL`Y&&?9CE!NGI@C@^L}GS0)_fq)FV&8ETLubzx4T@I~l|1yCW|QY+Jf z*sb~cDW^3hvKMadXfnSx`vn;PAW!9IY22Ni9nAPm=gCK&HUsuWgzvdgjVV06=RRXB zJNEp>@m*LCAIK>o6n==nBWXJUhsk9pHPouFM%~vlzAUsL<wN2iMv5r}%)nmZ9w#gB zr2M%xgdPP0Fam>`iKUcbhNOKgkWbQ^B+-O?VRAvv|1Q-83<fPZPEt^$=i9aLvBnAw zt!2|}*<dPthj?$^H~J-la%p}_s5_5?@W1z0ogzr3O=wN_7N+8x?`H1CJ{QlnF5~5W zF^Sj`?r{9M<TvFbwJNRmlI#Hm^SUVXSZzDoy;w_sYC3(r%hZexRWjDhGOVXUv_C9| zhrZTELzGXW7i)7~@sV1c@h`#~8=?%l7tbVMtfN3A=s8;8JKsRn_6+u!@%Jz;uR;qw z7_~vp1&JQ1r`#+D$XATWFfIS^8c!md!)NeKSfipM2-%v(EmNp*C6RaqkJyls=Utaa zZa&zqQUQT#U5*D-X-{h~iZs(fhMQoE#O5bXRhY;X-M>F3S5Ml*=1HYy%OTb32^HAs zo59qO7^Im7aSgp2Wsn?0ll-+$r2n^4$Tsav%bV6;!5!(A&KqYjY|52!KizIMK^qcq z#%A#r5b;KK+yp2htb?_Mfc3&-_!34d?KgoL(AUI$i9TDKc5FupN)Kyde}m8WJ$M-8 zxi!#gl@DFly$5m2#^qcW_HIv=Dc0kfko)Q=-lswa9c0q)mK`C-VX%wgx-1F^Y9>+j z{T#~iN|DS<WkyqF80j?rt2Xcc!ELHNj|HWlOYvWW$U1Ugbf4(_{8i&qIPwnXT4SK< z&4s=8$VQrZflOcO4;nLzLn5UguJ#N3@uO0bB8w#GHc{q<o@VbNGYNlh9D*>XS8Ux` z#>t;dW6FB`dc>~r+^>%G0$CP;EiuON`ReGeV@zgN)oatfu58zx`e1&OdIk@Xn(tc# zN)DoLxy+LBN$CaQl*hys#zom>Cn%Ye6&JsCe@Y+p<?)PaN3Z$TQSxdTwcE$HTtMi! zZeWRCxNf7ZjSldgcL>K7+gt}Zm$)+D1S794bT0qR(FrjuhLp3RJFuag4!Oni8EKw+ z@BIC)$Xc7GSR-VNrC2HA7o+UZ29BM5n4cI=$yLMVlUlaf6+{_)!|QvWn6h@>IZG@S zzfPc&m-;#>yM<%`2?lN^DKAVT5B`?7@dqw42bC*?ISY`WxlGC|$jwj8s=IMU#Oh2D zF|%JiqS4`_5|cqxE|Os3{0-?%8un_w5QiC!L9mY?&r7t1z6>UNNmFaDr~X`QOEwyj zQpqj2))%6~bIJ1^VCO-uClTGeNgp0nAgkzYhQ#KylGO-WhTU=KMs%sI)X-_N*$(2r z_fRC|U<@(UyTjP1`t^eb?v^W2qx`@@wREgVv%7nvC&<9R%|ea`srz1^#4k|zD^W=# z5MZ`ne2#Xf%CSedTr~|@;){zBe{vlUCAcs$T6wMKmLl}O6U1gMfj~RJRV->)Z1s}G z{Vol5i*IW0C0-f+8lLvu7^9A7vbMZROL308JrMWVQ@hNII*Cy`{)N$ab6XKo^axh@ z7_$SK(?qfGhz>~vw9}8LA8J?kpk0s5uG1yf*HPXXD~#fryfurq*GV9o%XcZ1n|neZ zpKD|}wP7A&jZ>#IdbYNfGc`oJ{L3fNF1ErY%L<QDK&tpEac<1_vpSk3pHIap6bBZG z3<YIn#;5(unZ2bqoQP?KWo`I&+RKnOuJvp|Zm(u|8A&trorrfm!CBXFXNKH&*d|w{ z0dmm4Dlau5>bM>n@ef0*(hn(o{I(>!aqBgky(Z)#<5#LLt?C?^|7Hh!h5g-k{>{?+ zOQ60$kbzD&%2<Pzc{?hObBK%VahvzzKC-B7aI3l&xg)+4dmxo3SpTRoD{rsbbs1e1 zQ-W`PrNc8H@>r|~syW#YK~o<`4!yiY6pu{S@Q@;Zx)&qObQ`Pgeto0Kq3FC&5*nRK zfU+wAy!|7rU4HD4FaUKkW{~>_#=b!uNWL8U4k7bFz$8P~u04dkMqV4z@6aZ~Z{a7W zxN{1j@8g_@Z^2s97TiXPMQ&iX>ihiwHpmmaYdm-IAL`LSo_>aM!TJ@LHWIS34Ec;d z{3qmIgr%Z1YTnd~KCpu=^5;x7F)l5ONM>FtQjurwG2F2m7G<Q`j{!h-SIy*3wJ*=z zA0MsmuLsn&)q`t<NcZ|pJDP?0z4w7`scI#84YPBNA(fXNnZiE+<N{d&po9mo_im@I z7rlyrG4kr{>@2pByUoj3A@gh0uZ`55b}Jz^GKZcT_jzHnhdj&(2olatn%dzBZ9Kcu z0ORjJ*XX?jvr${Oz~}oe!V)#lL>jqmWEkGxAyor&4VWtW3?4cE{tiE4fT)<-Gdx;I zkm6`{P*+TUmJZ82L6VJl+jEtm(F;#K4cTUMrt9DN;Ylrs?z}RZg1=h6IPQ|?_{Vhl zz5zEQ8d97-|DUMqMjTb_H)pbQpXS%Qa8sr~v<u3A(jcd#Vo`YH1DoymC=fxFb`&DY z|4H6m2!i`*@4)oS2T}4dLYhn+<+&wH#vb*zOA4d!N9cIInahY4amH&QdSnnTg)Zf@ zF9g*QTM{1;epJ2tT1r=MkbAWyVXjd-{+_jC(wk<P5e<&?gH}HuaV3vEAMjfM^1iPc z9u-tRhx6qAV$kBrZ1)p|OU<XNn#}J{#rJZE%9;(0X2XtgnY?gccfQe=XRS@g4m?}A zg&zm|H;(2?<XoS>m0Im?*JLg)_Ng%b1cMIG<v$_qF<eZ(_Jh!U9K0O;T#wiZY=V4q zDhQ@fR~*5^O?He&wv3;n68?*~&-~}nHgb3J-q*yfLwA=AQCm#U11luDr2h7kcLe)5 zSMXFGk+U!k4InyxW!UO)CZzRJbPP9e=U0J~ho+J_v8E)CRze+{2LdXaI}2()aqHJa zr0>EH69Q4z{&VkvLxQdyKPdg0T@7Ub!S*GLnVuN;9m^R?KT_vE#)|I}K}Xld%!#81 zYht<)K}t_hjR)z9!V~*vX?xKR{$^*9*8C|RuDgzRkG)9O`VV|rThW*rQ>{768v1|1 zLU`!p7!zkR0zvhcXD^lTw1PS|!`u%LbK!tfFeV@sV4_ZfVYeI)H|nXH&;-0l6o$0* z@&;^wUg{4FwYa%#j8~{$*zB^fqXOdFZ-&40C+>9o9ZlBhQ-|-qF#Hj1^xz0AI3-Me zBo5SHxibGbe$>h4mv#hTbj9X!?}JZ2&!}2ANY9yCl^UHLSy4RaUGkZ;lw*eNX$LqV z`+NsG!3@_Y@bkVI4v;lrv&WXH0%j@*_Bv_%gxPze57kr`1_W;pP<(1Amp&W0;o0qS zwlNwO2D=5oV0N#<Ef61&qhHfR3JVJd<DZo91<a`7NJvW&9e9$r7{roaTX?*~NfUlZ z_<ng$p9tAtyYZ(nb3-33ZIMA1KQVSw8}s5<@bQVA74AE{+Lw~WP@yL+dhp1NTS{u~ z+!PUR-x>Uk+GN!*3|&_u=|6XSkjiV}x1&<Xg3`%Lyy*w$^PK;2DbapMJK~X!A!STA z?FZ^B@A#zDYUVZZ^}WcVSjUeLpHz9_sV8Lz)tb3QMIbVH3F8qWqSAvkG&ErF&CSi( zZD2#8-b92XIf7~i@~D^udQz&Yo($d($}qA%0-4+@+bZ6wpQI~kC`tT6cHlN7*_y<^ z6#vi)DS;axtG_=o3kNo&?wvXeaWze6pMa`Qwyy;Qb(qe|2SREpq|Kg<>KRud@Cc%F z5W`-}Pqy*T*;(i#Kr4m~^aCjqJuy)X)PUMWqCGQ0H++A>eXLgn3)UOjZwOyNjFcMB zf9d2~ezIC<TUP3GVb3{N$GWco>Zv7tl_Fxnl7J272U#PG?%V_kr@yq^%0!<c?9<<n ztJ3w+CVrW)BGo<J$}p{83EdT9>k#hkac9KvuP3kEXkE@D%`jrqDeb4$skY;d+eXNQ zQj+3GVkPxKB-M$mI?ZW_4FEb5!|PLYWMWy7{Nx6B&)_~aE%U6Xw-9q#kh=Mf6^UL< zxjIkSC-=h02__nRmc752fU(NKRZ+<8Tcwo5xQ!)iX=MfJXLLkege`>(h>ytcgVsxr z?p`ic7#^Sx$U~aM)|(g)5FZP@B{~D8ShGyCMuXc+mw0T`xOHUe7S?kPibfb0om$7J ztI1h?vYeaR4()G)Pw`O{zF{-|3Oj_&t43)@CI;vT%a?0WFBgqkkmFtEsx>pZ#2ncH zGA}a5K@DE1S{|dP$?+5qgE;=fmSqx)onC>8I$;+Rcpny*msAOldY$LF$gU{fq?e3N zTyqh=7uo)5zh@nj)s2a!q__P-s+YnYtbq@_>G;&t1;+bsq*K@p?!X&IE0K<xr(ShL zEvh^vtHyfcDew5nAncV{F;w)QQ}Z#TcG0)+S}^{NS1azI6}Sg%tdW9MIM}k!V-0_S z6bFRhOe{*Z1JnTM&K7G6_MP-raOQKL!h!GYPUQNy%F%Zn+j7>c-Ti<l3`x+=s757m z2Y4apT}A00TAtxt8;_p-HC(#Y?;<1~=4F)jbhSn1oEn=CG4!}gXW!~8GH{Yy#gfd} zaH}piTM5~`N+i{zdXt75%q&6uPwfM=8sY{-aQ{*ARm*$S$&q2BDLvXgm{5$wYgY16 zD_p9Qb!(Q%%0}IMv42PTw3)lW{j11?9G4F-r>GK{AbAPGg(zWztZ7)$Qvu1y*h)3! ztM$Lw{;RYBrqrC1n#@C7eO*Osf)%ZAT8^fQ7q=d^i-t|mpYvT+--T$g$ka8?smSp4 zsArSy+|xZfb@L2l>epo~pjx5G`AvkCuA4-JsEh(;^_y)xN%<mQxYJ|9A(^WJMp<RI zW}P0czcJg5BiDc!%DnscA7zU{4LkTNZ{9wL!&*CDf|V*O6{k~9z4UR~H}|BXC$C5p ziE*C`<9*{=excCWMtTt#Pr%X(&JA0X@28#&o@6nvhChQ;7MGQ6^=z}ey2&ml&4CW^ z*>$4naH8~1-hMCq5)z{dl~1;hUJ=o=$`BfR^jf;Lxr=*gl8(8L045bKDBVxC8{>r< zY%na|X8rKNf#4X>Z&~k2R=-3M$;S(WVL{sp`0_ybVNQDIzsv+CwGQ0sF<aWYe)-NL zZp^JhqEFE{^IxvhNLV$PK7@Qt_=Fi68yg><E2%0gmmzZ?XyI9j&&G<l#0~h|1%g-m z9%78hdL3?)BF_g_NyIP4wUV%PP^N^isjIW3LiUu5-+aoC*v8B;z^SEV_@k_|WY(HX zmMID(HelULJHduG&YpbcLfi^|dXp1d5CrJi>Wx+*<a!u^7jCHJ(oBMvH9LDU8M(<b z7)03DRY{5J4({KK+zhFV#jOELgxB#(A_O|-b|A>?OHtuE<@OZ=&)^t^W7^2!6=62* zF4g^+soA&ISysGws$4$xy<KGW0XyT2zN?=V*KmllSJiPQZ~S@vL~i&<h~j3h$BtQg zS=P56p95*SSLSj`2-01e=!=}BxF+*T1)j{HYmMXr9bhr4gC&wA-?~oyg(DPH!T!hi z!&25gk1qlclntpSDrAURq6SgD&*v^>_u1ud21+&Ra)EjYw-=c((@CKr*Y1EL`L#U0 zLil0ma`*FJ-?ifTDb?sE**~!?PvRv@>%}XW$`dtm_q}tLU!h)U!H{dwl2>no?8Tj9 zL+rQdK^`aDJ`>vo0@kHvp>);nVp7Z$`3wwSFUEB<Bz!AIb$QP<nLjo$ViH)DBMP>U z8TS%;Lp+3#GC67jN&hAa2+oqklc}xl%Bc|k%&C)h)$E&i=Ug!6ejXg@n=CCF3VC+^ z+c1?V7uw8Y#+OBRg>jbqLC^Vz#m5bZ&>0o=z{u4j@n@E<yqL3f=TZwAHk_3Rb6(u| zaWHX8ZVL7Ns4GYv5AzzJ=As#0>jjxy@s`F<ev1<bVj*}zQcVdVhgT{XaiuM4p4(o6 z&dkRqy?b#fx6H22o~ZVFFyp7_Fut1A(H51^RdIxDuJMe+B_T__z?R?FcK=;^<W6zv zPpoY`2)e^tfX;2Gg2iA{NZYTt-M5(F4u>pZqSEExDQcfAYkYlWWPba27{peV`3`G- zQzmMOxTHX@Y@X<ze5YEQnkinoieEu@iE?;yvW_&ZhO7J$PxO`qi>fTOEACAuoX(#< z-b5LJM9c8K;bUzexAYeEjJOb7ctR7e51E$IL`lv9qYnJ}R3}}@(oHO}zJocN4^RCD z)%Bg6*w;T7AD&-{8&Lsr+PO+jX$gkUfo@71{mU;e0h-)NPg+@QMUh)-w+OnbczJpf zj;GJWQK_>}n|zfT+@UatO)^R!#r2GjaqgTq<Bn^=PpaxV8FpZVGXU0%gGE6_tR`ol z9gCOc0l;|(&A3FiNxG|4nZ&+zM7__g-K%AA{)rBQ%EZeLt%-*(pF!-kpG(>Nj<JU` z)izy>=wlecRo8xnZjhmz1op+ckC&RbWS}Lcl30oUfi((Kl-cvdn)Pg-z%9Cr+sbyV z4Rs?|3f$-uJP5D+!RI}iLFoZlk|OE*cd>Y7A6PMtaJqtn!WaOo9Ms=aY$3Ug98viq zInBy8W|;eB<;8{|*?dLl+fpqpyxP`8o<4(UAfJ~*U>Sf`CX1<RSkaG=oj3Ty{QUeJ zcI)HNlNnAr%x2W&=%DDDWYjD_S37_3&H`0p_r<v)3)A;dP~d>7JrGiGqPmiBMF}&U zf@cAqztqe8JH>@^1WKPl`j+SQ#d|<<Y5xF}ASNm;{PfojIXQTO#J{jYsko^p_(LEM z=+gHvN`Aa_6W~{$(_Wb5JY8I2I<Fw^6+UBAwm^t82S{h;!v7mq-2wm-ngJFtBNG#W zJMgI##S1Qw;TMuvkdJHM+f6t4@d)W_;qg^&E&1-~FoJ`KAj15G6EQ=%&zfZGvDtp> zA4Ol$wwW${_olfta$kS@Fy~0u|0K&H2v7P0<MmBW^?E|l6A(CSCwObGI`tHA2@l-z zxWdWlda&aB*tRtuL$XkeRj}T=)cgZxz{x(-cAO?Nmm<?LtT`(ZFY{y~)J%G%BR9@y zgq+L13eQo%735Bc{H3q2uf%Vm6BDA#y*K|KM3nJiY&2GKh#K$|O8bxyVb1nKx;N5; zVea{`hsXKT2-CDipPnVS3^B1j&i#lYl7jCGMx(i|Ax~A)??#5gN!PW)aW(97&CCrq zUTg%vP1*ywDc|Y-c?XOO?&W*!FIe|;k{;fqK-77hey-`2aTC#~$@Tyx+PII{<)?8Y zV=7y+7S!W-MI`U9D988j3k4=i*OEd^2&;DlP+GTpRoR?ZxUjK7Cx5<wwZZg!h8hor z-tpuT+PdkfUtNNG0D1H;Ps!3mw>hqjQY!6{)V|AEuh4ozhv$2Th37E=!R*d!uo1c( zg>#%U^yv-7cy1u`a$S@8e|nBKSbine>h^zw5bF%+oPt!%kqWhP5fx$@$6v7;k!Rk^ zpDFx~k(Vu{J%%YA9duM^h*guAQ1{dACkW&Ez!VPLU`v0Y{gKE9e)J(QROoE;l(NI! z417tseJ$E1MR@VYdGfz<M^AGYGEZwh(5%_`cE!KA<5PQjIK0I<_QBifL3P}ZGQH?m zo>s^O#k)Av&hrJoHLND)b<xzc#fEqn@srX>&V1cq!R@<^kjhRSONo{@*|(76WDRmx znE3fh&0a9zw)7;(c*a*;)skFuuqm1qoVqC4a|r9?XYOBqLWB1OAsj`pV)Gm6h1NPv zmd=x{?ClYA5N_#a7e4iYiQdmxa75SnEYUOuj`Nx0xW%_xG8{6E^f`6JaG_wUL0gGU z<y`wvJvY<Y-`9dB#=^rs<9%?dX)e3_OP4wLeAhV@ea<6(ArsxQezt#aT0=KDLr{l5 zArfLRVbOHE>gDSF8MaV~u_v>lO$e?bMomKf4MO+WKk|F>jW309n;*?*hS}rzOEVMs z-^tK?D9wY?mJ2NB8g_(z^`y+M$2eVyK~e80M~9dTxJZSLOp>Lr4Iug50|r8S&t+|h zmOR~NOODSo$s)q&4W1FU4epsn+fi*Gzvq%Z;!D2j3i=BPg`BKkuf$RmD4CSg!?~&F z?IB;{A6kW|?iO2+Mt0-exK&tUB05-3HP)FjkKhZAuZ*OU!Xd+^`?YK2Ena?p!pr38 zsy{6NrP=q(%gX~;G7lhLHNORnD=bYVyGOpWrra6%fIH3RFnd09q5T21fgtt<CU(%m zyi3Ksigd}dZY#kHgdk}kCR+ImsU9VSxQe9jPoHw{`2v5G+B;yn^U`QYGnss~txWk| z5upK<H4s!F4DQ?V^fj+WdkZMtiz=Anb!(VY_~{lMt<u6t?gS7qU}zHrjZlIuHtP=G zVX&_Gmq>apjQW<@H=R47brNs#c<CgV>pnn|!}O@fsUK+3jJ-P=J#eWT7Oc6!7)0zU z?S76<ZPR1}3CAqdV?Dp|A!{Ocf8>3Ci@_<tx#A}Sc%Y$6si>ZdV0ms+=Xd+|(*ee` zLs{{}9R`k2y#zi>@F_^q1i~|=q+-*j5G66l@M}7|e8iphU>5#P=oxA?IxC<W)a6n) z03QK(2zdh-3@?OchPP`}&hMS?X}9(I*J(B+8?o?sz(*OGyN5!{ggT?WI0bvhU?d#h zen^`By(8)*beYFNz=c#r)sUdB^qc_oN511gPDOF`)-009Hf?_^Y;61sY=W)b81H|B zd~w2O4V+mww2JxHxXAAOOQ7(rge^{pgDfH6^;VI%ze`-zol_YDJQlR+p?`>+0oz?Y zi&D%eW%?oDCKVk6I6FN5Zk_OFl4aM$qJG4{Ar(f{;iG2HL4JHY>&YdjM<oA6BM^p3 z1X6t`d)<`$!|b~i7lyHH3W|!aZ|&bgZK+mD7GvFVdzIZ1xk{u})}4VPH=Hn5`BMdN zySem+?%D`t$yva+ND6)#pp+%CQQ|eyFkeDb*=mGk;5JlUvY3igF{B!js<#}tDk753 z<ky7nD@Itb=0}4gc=Yf}uZ(;-mkI&z(Od-m09x|+oJ>1-49rzwfoVRaTZzLDjI0Kd z`x9i%=73TjpP_nZrs1DpFKp1GmNl6(ZZR$2ZfMEx+R}*^!D3<D-Rd}vIz#VQx~``X zcaJHZHm@Cd((~stOdvPeBp&yjLK;hk&RI##M*mi=l*%7puYr6bN$4w)=kK<sEf2eR zT05Z0Om;7U-6Aku--vAI;dPcK5ec|SGWEN&{<caQV~sv;u1M1UoP816uQ1^OR`cfD zuT58D@d5^tA3EfswruuxB7dGSSig^hKoh&~HupG;#HbmO&;$Tzm~Vo0`b-X)f!s1f z2pf_YsyBM@?%NFjaBN3s_c3aQo6@V>rC%eKYt_)(%e*-5?da}U;)=553b^Yg9J~zO z{t9XPl=&2~p^`ABVtDxxpio2zJ5K_X>doZd<wJs~b6`yKe;r-6wnq!|+QoT}^3S7i zq|nwBTxcg%^o;$Jf7S*spZ!Lteu&@PWBK#2?a8DjTZ5E<bNd0Zd*i3<rYnNPb}fbD z)s_G5@k`}Umg|wC1`GNNt?Xl>%S%hKjXyxJu8ysaujor|zK)RoUsMFFn^@5yNbI3J z(}>P1XNHEwW8p4iPR&c$Sdgf|tH5e@LM{89y%EtB`X?D@#h)(SnoD9m`-e;o6v`QS z9`E%Z($U(B;J)1C0&GAj-q^`v5_Wvx8+rYX+M`hI0b;Ivq3oECHTpE=Z{WFvFrxbO zEfEER?p!DC+?<@)I|~3ifvzTR<f&I(l9?fvhCN{><8h~U3gwDpeLZZ(y<-jfNp~f5 zKgAc_9UY>K^O`)m!XF5mQ3O|uLJjHZe@s~w23BS7;P|P|&xVC^`So227E?ULHGYy7 zhFY<-Nnh;DDo^aK)4uM`G0Uj02@lOZChu}0a$gLWkWi}nWSct<#o(2Z!ik?Cc17Gf zd64AEi*0(dAUag^;`m1mU7S_`WR>J8@oOKDx*)lPSy;=w+Ff}a?w`ra5x}35S?(&e zCbYo)F0LKWV6pN7)Q_Kd0j`Je&qJoRXf7<^pw;P=0@&Y6$3@fg@kY^QO&K5MBuP|j zGLs_ZN**@%?{k#EwqH<O4zu2m11+iM^&naLxzz=Z66Z-So{_%`V!aT0Za#@$A?2?o zzyF7X{B3;?+iU^9zyHyfun{mUA^dOEP8Nsi_20~Vfy!`xD7WdZ=)8od_$5vobrYdV zQX*Ohsf^GoqPe=7L7aOCI)!~MBN2}G_*qkgyN~9%kkh+{E8UVw`%N+6?S<V#N>9); zhR<?HedZr-j+ZIbwRLY3G;$T9wvN+ne0kzDH0<s)ROc{qFeK{1mteesJFef@NJF#? zvW|cTK2T36rOya_V80~!Y<k>fsIgGP&7JK!XY5B53+;4IXTRRKPDauJ+1+=1qBHVo zO*9lz>NO?AHj!>i+Amco>uDc>_S$1IvtyR-_$7|X-|kdm+Hng4_-I|d$mGY_T&4YW z<d-O{B>Ks-9M2GlN~}cpph3(7J@!<~U~S-kA}mpqvm>g)L5ZUR+xFXOAybO1?u<d3 z^w6LDF&kxOH%@hF0G9D;bU%C3P3qVuPc%z?1n7bHuK7oo#{RZ@-^CvioQ#rnsO&(Y zamSgW_Ek;eU_r)v=_SxrB-=kB<d~DDK`t#)FKsb#`;{Vp#j|eGzP<n-1@xP1GyDrt zp<U{`#xHl$s3B@vts&pHA-I}C^QU|j$VLd)Ui~v67_Xd2wx&MQ?Mm5oaB(jFNWmdh z%%n6*>{R}VzSOn7M4v>eVTGw@v|K&pr)wqD<Hun3!JtoW(<6{Yi7&LfoqTL8OW9n3 z^6>Hc`0G2ZH+ZM8Vc-OobonkitSXV{%ms#LmDgoFLr+1wrA4bIR@;6hKw~t>4iI3r ziSlgh=Cb)Zsl9eHm`vbOI@>-~>t~~-Nl`J|G}1tbiZI0npVNulJ_Ah>ED8=l%hP)g zQM5s?ZD`olal15VoP&7!e%KHm?44f>+$%vL6(`|hT$o{0Ju;ND*$}J<hO;N|cQBDA z>)$TZ%N&woVwuLPz}OwRAkJYimRQ{9{ZmFNWf6Jb?NC_Tzw|&8+xZp&HM`9a(h2nk z0dJf={N6V+vAt_B<B1#wy!xgcuI*2sK^wCNi~)oFy4H6Wl<pm7AaP&dn($+yiE`%h zDk{1m3kI)hZn<0Dj4Gmox)9!15(36(;V)@KO-L7BobgI*s<2J&kN14~N_{(e!pAXE zyy)0X3#vO-l=F}(@-5>chv-@CWDii7-*a^EdfJef)J{yAx%1@QxWC)S?dga3lGNAq z^<DcVV;;pRU154?C$j6j1f-ZZ!Ch)3XR6Hed+h2<9Z#88B9}5tHJN=i#l{FHN_3}x zn-h+=eJoQ`AzOT6A~;dVeP}oL8;pI;TneF2zpz!LQ&ae&jYXG0|F8{~05N)&0t|)Z z>;43(bIsDD?8F5v74}lNgW{s}`d{@Petls^oe`igSAI^e+qh2dYmg72F5qsvbhn6c zr@yY{g*<&<6V*M#lUZ_K+m*eZDz;hp4C+*jAJ5VYV(~GUSI>3uVkXHw2_pc8!vJ3i zQj%||Bm(BZY;Kv=BjLTIQ)0I|1nnfpZjlI2D8y#U%^_TRJ_9Hx^fQHbe;1lzhHHi& zP$KrupPfTeFq8Z3W<Es6E+lfQ_YCJxPD~6EYv;N8Uvx4y9q9HByn!ch@Y$c8Uu1KI z{3KGrNxY_dVdLAqdPDe?ua?}LE?^7TBK29JBDs#nkWfmFxM*t)UEBJ8c9)f(q&8M! z+`8Zqtwg6ZH+|Yh732i4omgpc3kVRGHKo%eP3TC~!Y1!wj?%~7^5Z5J%|)8Lf?9@y zlR>9qYK9W_96kt6$Zimm!IJa39dkP$0~<Mi@2|gwM2FN+CAH}>K{BHUDbR0-dc!{? zfsfA~Kroc|S4^<WH1Gzw@2MXb2#~B~ZPZIwC+4$)^!hcpZaL8v#=`1AWux2N@S9>t zb<Xh|=a*ALqRSz?LADZ+-`1Q1d%f`P9h>$w`84JCFw)Cb{e(m?YNBd^QnF}a{*--M zA9v-}Oz9uY1-mI6-RsTe9^E}`+?*)9Y%s(8cNqOsRCKCvap1L%PM;bxnS!OJT3F$! z19buS(6D$2+|sl&bRIcvsixawcHlS26`tvIYu5e<Uq|lubO&^2o62rnb=)@F=CqHm z&p(|H<oof}9`kYALSBg0>2l)z4+7h2%baYU*1QkfUtW4LKqX!`hex`asx@>aQ;Z46 zn_o(*Ene5njr)c#kWergMvKG@ufcKR@XRmKz5n>Zg9navMob1&kDwY<r1MP3O38(B zOod(ahRO+*Q-z~Y0kUsV1Tq|q&S6R}j;SEFuh_RYfUU-n>4Ly|=W>Q^c@=<7@a30c zLA|^*)uXZFKs~(v>)S`E<2G1}zXRY)Q<2k?a|%LB7&(?ei@}bggcm24%|ljRchMk; zX5~ZO#4o|^t8M+lCgCCoM(W!Do&Nf}r61zeVJP$lJXP0x7~PKzB}Xn3=_{$;_2QUC zrZTD?TdKPe6-bGL2-dADHa-vlr$36gGJt_p$=}iAIUuPTxHUT+ymDWf#M{FISt$4` zF-=YWx+_Z$wR%UI74^!@LM+CBn7xOmEm!-r06$>d;#f>bh*ZA`N@^%O7Jm?R>1&qC zQlH1x?zL))n>FYi+0lEru{bH4c#!+<jfb;!q1NxfVsIjdlJ(@6B{{5vk-fF@U$F?O zlWZyA3=LBXk=hlTIYf!$KeJKw?(r^<iKIjjSxk>|KI`ZsXMk*@nW%^Rf)IOOQ0~I7 zJu4*5xHM6yQ>2)LhW!IUu{KBQ@ypyJ7y}FU!C*3BziT5%&i{?Z!}%3S#)f_>LEz$v zPT%>6UV<a;e_ikgnBN6r8_@mfyFMyAjcm^3tFn5N_ug2O-tqLIx+BRmp4tb~AEYZr zUA+6$dvuIHgx_%r;P7vUnH>-^>*u)yLrM=-wnaTdd>ka@hZD&t0C{N`(p|aL8D|<N zuPww}V@%pEF$YK^lx%ZWQyQjd(h|)n;3mkcRrx&q`{dB_dW7j%jr&hd9c`LZXoA4D zdK+;xYWItGpSn#du0qLc+vAuMIEF7^YzfJ!<L7Ce_%VFklK!nOZxR9Fb0EBK;O6Ai zbv9<{;G+>Bvg*VmZ9^`3<#a$^qF9gnFP#)k-aV%<@lh&<=wiCnuMz(?nfHr6r12;M zB)3<8G3t7ZF-9ga3Ab|Hh88Qs9r3x!d{cFN9ijzN&WRf2=bBtHTtL_RENx1Ar;svV zSzVO@rhMj3VeuDcih|#z7cH#(mrMVoCN$yr@(X1r1;p8_k^cjmjm*R%!GQ~%$y<el z-G|l8NQKK{g5@%TGzE3^b&?$TG<J^(OuuKzNtD&0Dl71Fe8&VIKN2@%Ei~xS(as}v zA+VH?$@{xaNcvqOkKfEb%=lje7oY!dZcS4`N_{n@#dT6nF<kv53A~jL`=(jbkEyca zcz<jszDm1U7&?%uFj2{xznglR9GJzWV}>Im`5#@;G}d(p(+22Du{RgE%S~1yvsj~& z%@g*Uu3lbV5Of2VKYWf$N=pq?KAfILHl3tZ@wj(9O$04%R+t}_i-uDZ%<a#43n+=7 z-TcJ-m(;lhoZJv615BVmd129CpOvN6U{`&BQ{g?!g|J^a17;b2y-h6Y{C=Sl8dVkn z5-@OumwuqU-KSa7hL50*JAq+>J^2@e;y#14P0$KTD?o}1j0IVcoxv38s62`WAmIE% z_jzGXPLIX#$<?NeB{g!i(e=a;i4uc^C>FgizKh)80emMWT&gazb=20!gBpVgF-r87 zqAVOtZsRPf29lINa)yQjJ>{sF^>85G3PcI96sb*pGHD5YfXrf}!TSU~bWr`5*k+Lq ze24qV(pmv9C+gIWG!bz$j7L}7Ky-`NWR5_S<bJC*x0HxNicjAoQgS`jQ6`@w3kc3d zX|LoY@!`dYm-97fWk?*Tg@($=z<<GNcvtUtE-m?h`5OGBL|;--_(qaaEc5iIV&bEE zi$zkw8d#a8`~~h%<~{B;t_k1;?W7NwE+bRHa!2`<i|pQ8_z(ZgeAc}UZyRA!j~3_i z9}so%*+?Jru&ueoM5@c<)OF+NQV<plO`n7{U{7(;2MTxl@HQ9*aA{IM(bf|)K+JP0 z_Wt^H;`#s6!iPLRaDTt$Q~^Th{y20+$~%Pg2)EDphEcB)t5cK!pRcX+Y}^X-e0C(5 zHk#<%QM#Yi`SSTaF+S;bpfjubi8y<IfK+R|WxU9r<5iB!p6<a(WBl(-@7N48y;8Z7 zFr0A5uh?a9(h8N)bv6FGJ1bQja%F%O5{L@^Ot3T|z{d%b!zfb7BR-$B;AvB(F~^@v z9$1OYjrXEy=wBUjX}3nabt+4~@jN40a88VaPqCRcMHY@ap$LV_CG8Y3$BrCfr?Jm% zv|C5InZifCwH890;Sd;Bp8F~fclLnsy0L97I}NN24OI=(Bva94bpHmIW%Ehw+f6&g zv3o-D=Ns1DiE~cjtwuuuz`_JEtP5~=1`%z;Be)+M@{CJ2$1C8&ev-4)CBRvp#bgiL za_imKWCoe%Nsf*cUd{;S^UFK+XO7GDwiogv(_F?K3Uok08PN<c{2~f|`Vfn+&doj9 z9Q+D2*|-J31<D(@mfBP0*9>)unY^xu;J?ulIS_jTIGOEIrjLm<W!<H8^tJe?A6eN+ zla?{11U$Ij-yrP{>R+H6S^;|6T6r9vG*SF(t_@R^Ip)t4Uwvrr$QJ`$XwLKTMoVND zyxLlfRWk>UVCT4%)4Q7<5jb{7yWqlQTIcIZal{+*l+S3wl5xC<tN$6!<k+7)(XF+! zX-qrf^f2d5o@1n$5w67d<tt@hmXj)e6}SD$N=0yvN;Uc|U5w)9dw#dglRmwkN3QtC zoA+;>e~me>hpIbRH3!euOF>}<lLnB8Zv<}uu!PHIe0aD4a5HFEIQU^C!#|X|SdNlD zk!45F@w2h>D+C=5WiYh?HrJ^Y)jkj5lacbzEuU+YO;e_?IzEO!sEqjD1bF>l(j|7Q zVj$bF*3j<oUYKbV45OV-m+3|IOiaEO>B`+Z6ut5jP8m$huZ@xRv1>3qr2o_Y?b=Ef znm6*Q9j*qDXI!!Z`SfZyG@4^~47fNfb1OwKG?zyp@52jph8^$jN=9C<JqTs3AaRlw zd6?xC7W8Y{(o)VzImgu>N;0V>l0??OM$g=;);Gs2>zq_b<AoFHtmF)xH&)^7Xh8@m zXJrnC+?O#kI*1B8Jak+vq^3;)gI2w_Vn_=zTU~t|%H<cgD&B{WED-%(F}m`5Wiv-d zQi<)H@iK|FSm#ARKdZ;CS2Ql$jTQssI=XK&$Oo)7zu`LsE}8)*453?sl@jMv-+ym! zo6gCgbql_d`*zu`o$`|*k$d~l`_3e_AM+L@D~V)T)@WVkp^UVYWN89sFXD%fkGl2e zfHgxkPIkC;Mj<*zpOcAFfxq$az7Xjqm8&ST<)_sn+78XqS=8fnW%dt66Sv^Xo{>38 z!90-oxWBY`1QAgvS<2VP3}JfiD%L~2zaG)`YEt!MHI^$Qt)Br`VVRi!rJc^1T;>i3 zEH%-F@paBjiA!{r1kokBEARIct7S>fqgb`_1@g^;AZ)N#`!mVvXam1d;df40I5JH9 zCxsc4#}$(rl&fML{&UvABeO*DsX|FA9>w!e4|L}-eVG9aF~z9kV5Jp|j2h!dlDnCm zYWS`cml_l6uUXzI<&hKUb8R=oSIAv#btk?-ICVAVJkpWg_)6N|Nvm<lOX?~2)bW+H zTgF;ib2|SZGcj12?**cNCv+yM*QxCy-2q5D<|4U5ZkgaMQ?bj`l(z6l(KOHEX7IL3 z$;uY<QxZ85l>WFv=tTUpIDGtXU(DaEqrH0*{r?G5by#V9gH;$#%GU?2(W~_*T*EKY zgGB%g)f!`f7-5&E3z`~3BsV9xjBT@Tk8@>iSj{9Eg;v2YVf&@!OcHBUC4I}J9)IV| zZnwT9;vbAV&vWV)pO-k}Uh=bC#+BSJ7CK?6Dma-yVZ_Xq=IoE|$-!K3@r2Ff6C~E5 zPo(2C5<ctjhDB}w>&RSv{Vj1NLk$5km0sLQ3BIVG(_F4Wp*z-!uVWrKW^Zq5ij^Y{ zr1%r|r)sl=JGYQ*gx>{va~O#V`-3Y9*TK`LeRKgCWTHDH7K2ax<8J#y(o<;w@-;pU zSJf%8W{)bMtFT)%aJ7V{zalKRSMA@j5h0zQ{Tkfdbh4e6r3BvP1QC{2{E?08KCiW$ z-l@MkW1+aY7z$eg%VYd{qmsTW+3ejKv^9%Vs&UaL^HIYr9{1dIAi1(DLl??|ura#; zH-Ot@4euRfB+AP(Ik!Ll+r7VkXIPzRD*sujT~d9`OAZ+;dB<Fj=}>rR;Rok$1z^7C zfuuE7+Y)^m77S-eigB8?&pt#?5?I3uT#dy7kNo|VKjCMmzf1U({H8DfE28ZvJMvPF zIB@BJC$bYpgApI=bI@qHu=sB5PcR-Dh2IXm?0eb7yiF}^lOb9&7+_$mSq-O7Y+^<X zn!3>wZEaT|7q|)j>Pm`Ne89Xr-0b-Bwx8cNfG9gYlQ!F~pPOiR+POG6jT9bGz9REb zFhKD!Jn@2`2-Y*hIyy)l%ugu?S>)xpY7Oz|vzf<aZZJ@Eik)|S-5c8Q&6`XvpfQjs zpE=ISVz9Ch{=E`CN>LZ`HT&u5DPejvJjW?V#>|M{>2D^mg%NQ;a&%{WV8A&c<>FzV z#j!}$mD${<Jsxr>7DNs%wfiQZH+)O!dSt`{^)&Yy!sd3r<f**_8S);59cA?KH-S2t zH>)qM6KpQZz<e<8jftsMfAG16D&s3ioYxwVdr;NAW|KndhFAw9lX>pL!Gnx2y@Z%Q z8=Bqv2@CMQ8GV|?V_8UC6g=}Xh*!_LG0OYrdra?9|L{KD8h{%#{Qn?>(QbF|CIHV+ zBcs{PNp2go7q*bMe{FAY|EBwHnKO91_DI6MYLO_#gMsTdGNS>#6353POCp|jeHGH> zwJ@}ak8<R_#u?Wro$m$z$9xcje@j+qpz91HU0r}%CuiY}b2JB#<KRdU8qn(dQRv=7 z2z=81_)Xw(sy@#6(TAWcH76S5Utu5rGoV{J$2K2VY%d`jnJzkbGJe1wdt(EiE{-J5 zoOX@O`Bkv*Knj&GAu2U6qu&^hBZV%On3uO_Kaa^4`m8Lt1MK<=|8;mzu~%{O^sst| z<k=H!#Q~M##)xNRq~W<n@S0Y&-2Uk{eA>0HN(<vEpa!?&{$8{wzdoOHSGugsFQG;k z70*Y#{$o!L_%Y1{qe8?~d<BZ=jV|fiiqL`VZ?gF*aRgy6$2qNc`b-W!=kM*uj<nM7 z2Qb3Z3z83~u$U8Zi(aWwfj~VTzRK-bqC0vtRJ4-MNmXC~F%C(|Oyh%2!xCF@h46Yk zgX2?<bnSx-pUL^X^2$AYJnKR;vo8JqcJ3;2SsQMjI(mw+G_5HY#>Wd~)%;a)Wy3eh z_OB`!&?ywfwZjcZgt*0oHkFG8w3*^mf+w$2*ZKo|`&+jSY)$V1JAWLVD*mH)G&K)| zC+`EFOBFeCK9v3d)X1#`Oz-)rVWmLjr4-d-F$Wzwi%)Yl=$<h?=dUSs+?u6f(Lk8y zN&Iq|9nFpt>$lj$gr$0^E$I-=`j;Iendgg4$rpSx>hZ(X-W5`>1Z}C6+q=zj79=n{ zy!D#-o>53X5{U~bKD{*-*I5*DP66kP>S4VbY2LRhk#RN~R~!a{HL$qU)YpTuvlRqe z@VbjabRG~Yz}iC5UhN%b>ksfoKl5Lte$oseNdb@~MKAvY?2;b$<jJqhXcu#Ax%z#= zmg`W94Qai!E|R%S8i1rd`~=}ht9&q(0sym+yDcg?JWZ)WN7p!LI$%~qTc56Ppc3>R zeg$?qK6tX(0eInFtkzU<Ee<cppZJgD@omg0_|^>p-Lh!Zh|NWo^c_SS2n3F~y@Qk# z6pFxJy%JO~5CQDc@OuTqW^^3D_aHdfIzLqjGw2eFt^S@^Nnh!=S>Kk>wS4m<#;l{t z*No9H;+vC!Ll}_iyt~VOxjK|UhxS&!AW?<0fHXG4CW$XnjD0Kh(3n~Owx<i`<^Nwz zpc^&NzRG|j1wmfMVSKK%Lvl4UHddT#T$$dLCcwpfY~5)5h5~SPmF^#|ReVRr<TuL$ z#apoB)Q<D7Y2DGoha8#}yDD{|BdC7$tw9cPW#*c3yF6azXP3MtDnd&0z;oi(RaAiH zN)CV3?YF9_@ccd6&t~p~42jtzYWhy0A&Psr60`|YlXsY(t8UV^{mJ@!i-buYrlXQm zC(rsRC;f%2FML|Ji|7S;72FlE+s%;tYsRUq4<KN}{eJ<Qwz~r)d@7}LzOGjBNcGm7 zHP;gzZArZwe<R)E=KCipk#Wh=v|MW6kFG>NTXSK#aR#P1SSe8^GO$Y=?(XrBXpn1A z9nXFEdDKnL^S<(<n%61j%ewNqh}3-o%?LQOP|vzh#AXfhgR5!v8mEo&BGU<PjS%`f zO;b%ZWI5jDYcYD|K5@C?R<XkI-oFWH<9N%bfkQAG+~Y@iof?*>jh{g{ykQ>WIuN`m zjkF})(6E8gji7C>CJ>KHGID&_PvKSKC-D-`M67ts$NI$<MOEClqWpaKF2Q~+ez&hP zf_(`OMKFs>Je8_aQojLEX(E4`saD4AKy7s}1wnH;>U6ER-+6~<E?6X}A@af6bRRb? zVVH`c?sWmle?-*rvSVA^NH6<L!T7t(0y8N5f2$6gB;?BOCSJqBNZ(D%oeD*Fgw&HC zF7GN?Ta-S5(=bfB`&tTspOTY2L`3tRYZx@TEhlA<)3&eW?%|Hz<}fh$6L<6QDp4yB z=z7rgNvN04e&b6LIWawdm^KmI{FlWin#HWrH_HF5=09Opj^wj00&zm`TM!19LEMu& zM@lv(_W@|%bzQ1npa!$q;s{Ilm?f-3)JsEdSNt{U#6MmPf;C}i#r2V}lC9um4wq&_ zG*pKkQdy;vStPlj%~n6Wn3ll*J$Yye)oLSc(`n+gq)bCrsXnG@mnYoW6@rKTpC0B5 zyQ;+|SJ|}E_eY9p6D(=CfQSq9RbOx$MFPqrF5XQWcKHN_Nwep?=vSz;uZtKU5I+DW zt(`8~_BOT!6Yz1^UY71m%!foW23H=NlDdBVsQrrW@UhU<5`F=h;o-r)3Zeh$EvTuf z;q)8UgYq1*`+Bgn0fjqG3+^}pyfAeTV8P&gWL|rzr9ioQqHr8ua7mxvzkio>`alA} zJHX^eyoV%S1rjcD!03vb8+2;aWbh)Jy92<X(JCMt)7&hq&sWKwsz9GIp?AgvN&bN= zlQx60-n5|nhPzl_SSsW^!hH;3UIKyNm!65>GSk3OfAjF}Ohbx53D^|Cj8KlPpAQQL ztk%TH2)f_`K*Sb~&AOAl@jjykbc#exBt&r~%Wz%%ca1&&)2JYAC^KFyWe1_dP|c4= z)N#^V@2Lb3QuLak+=t>x95=4wuV8`Sdk75~NjI8bu7Cm@hR41F%y<N3A=M<8<8VaR z0Vp|L<3?YFS9|+-kW1wgS0=ekU$XR$)@DxK9s&Q&FppCH>AB#dK8h25vUjcd^_<Jn zA-%VRsJl=n{1e4*@3GC|+^V3`An3j4@yPAr;iEwU2_0s2Vix*-wCf53?S5{u^tje$ z0gMX9{?ddAW2MufssyHS$3tsjod=)D-@e82E;RhYmx=S~@8*XD!qw>?w=c?PbesMu zWSg#%(R8*J>U^9h1JN0o*xKi2=WceEz1GuGdXKgDn7MV<%E!>F^q)>ajr{XWc*mHZ zTr-wCr>K50{*M0v4aLqgxif^6PO-~;01%#meot?HQXqOrPTE1f*JaT+@1C>1q!P9l zTcQ_ij2Lko`sVGY$ATQ5a6ZCw9f1!<iJY(}At!2@*j7!bbsv(`NK;{Q1E3|`3O7P? zo{|^kGruJ~zx`VDurMJnMc73M(Qng1QFo$MncNlEXO1|z|A6)kr+n9^`xz=m&*sNX z-Gt|)^h#ss2?-dFzZ(|L3W!P;%yK(XNl^dVzM@|G$DktAwI3!^NgEiNhi*qC5N0|_ zelnD0R}4j5{-z&MC{QI9VOy4j^J8;!v(!7>xl?`Ph>|<BQd0dzC&Q3{du*{{Ujhm< zhnrDDO{Dmio@UdUG#;DQj$s&PbkCzcI)-1j6)n>;mvP2plo7v>i7aF|`MhO>^Qi;m zQ~o3(T*-Dhg@ttM=(k9Ka>3s&?(iJZkDQwN<1dp6t7h~bKRea?Di9!7%bdnOC+jKr z@HRYpg0j}<T?~F=e{I9t0vF-dhNs7^8j>xLWIZCLnSQq&GKJv7-^ze2>iBg9?w-pg zUZTSf3!W{B7S4_{4#l{qyViOpQuK#nfOC@Jv1%p#ic^C6nK8T9n%r~L_P#q;P*9K& z8f@XI+wxl}dcMHTlzh++BX1ECc7=&XW_Cj`=*uYG;rj(5oU@)5hV$6$q%f)-W5!t9 z1)1j2u`&0{Z6ZmJ@jU$|YKk+OVy}UEKjL0XqnlP)*57y)L~!*>E2=FS?&q<yl^=bO z(SdObO?$;qR66?lnxP@qHUz=>u%o=IR8N4NGMi2DIV?IG!4P8!aKM?gkWeF_tQ*j5 zpP5!V-=(u_NCfC;Uqu1W+aGWuG^Vc)$c;}<dab_(m*yPGys3>v@&N|rI~ku{yZ{#} z%r(sXRyHD#!H!_B3z_|C^wf_DL%;>?Vy(D|peNHXx+(ngibdXFa-DC=Sr%a$$%pS~ z4WGY23!~E_;VJ|Fnn|e$R9Dp*gKlLJvM@q9W;+s_g@F(LwyfH%4<-UVy~?64L*9Uh zNJX+x1?DDhJbC`dkq=q_KM~`nTf^S$ME8SL14m87ps8!l7Ah%HN0gmVbN(Q(@==JM zdzUHokDR1u*YSE*z!0w=M#ez$Hb&3=nmS}mRDPyZsc{{cEppz8I;S~*DWx!wv5li7 zcSdv0pK0Jsd%;g;5{IKRgr9B%5Q81-PF=VVN1$H6CYR3E+nV>d2%C&v4DicGKkQt1 zYyJAzW+Q#Ka)wmMR|8-V!qp*9co3EO3Dvs}=WnTtEA&AUCL}9QPKn`(e|HB|XoN58 zBL&XA=l+ZF&w`@8Q(F2ny~|69gX9btfZQ2H+AQ9Mro>5wl;qJ%i63sVenxKKw-Dt; zDTClW;5?6;$axbkpw1&@*ZwtvuLvZL)W+G-65GXxnb*%hho$;b$F=u}VX}>aHF~x@ z`OW=ML6_lU)ReEmMh(tAju$5Yq|s7Ut_6Hg5bJZ<25NC$aNseQMFh@NIp%>pH*V>W z>iddpI$B!FR}knNhWgtkU=(=D`=2$plYN2GQp4md*GHf403B2}U+5=jbjATAZOR~p zWC;LHTO*tO68b*DRG2D>MJ~1|&v-!`1C2U=Hff2KI}`_g`~8Kdl0c*G^A?j^5-`zJ z<TG?NtxOg77sYTZxpsPycxd1xzCTH7YionkzY}1XI}QDX(udOu`|{u5y{7&Iq5b6{ z=6C}L!Brtl&0eNXM0YE+ubS1Xa|X~1yXLUU1-gJmIFVzcSU65I9*KAf>=9LaawZBu zFquOxW9jMfNxJm{&x5TQqZev8;vRHo)pKvDIf!waYq`qD=w*C=LHTRKcaHsVLtZyA zdR&E^e~F2He9Tzz#*IkkGez5gt10nqy5L<fZ3f;3BXMu~W>I1U91t)Sr^d%wEwqkM zNxkEvBa?k$I@tyIWBdvE0qJDvbPI}jB=NVO%UH~G>2wn6gj~Cp6@01Dyp#&ww;|Xr z^vkc~++XCk6dqYvaI0A)E@6=J8ee#JgTdiG(Zd|8R#&0v-8QDgP2mDBs<{v5XMWm9 zb>R4iXh|%kNjJ&qT1TI_gxF{aeyQCnsxD)Zn1ck%O7iy9-{EYyJJCF1rzd~8ObsJ? zy0h`_<aA^R#r{qe7}?;Xb;C$B!JFv}5DQ?Uk-`re0K=7mjFyMXFyledWetK{z`ntF z&0Y8L^<D8B&z{Vj+=v*Mu0)eFZpfKs^uzcL-dzTk_s8uL0^d(nD85APB(Adi_o3c1 zsLv>k@l69nZ&SY85BY;j)3=eZ-Q;^SXln04$tGCm5Yf-Yq6FxE{r+t>##^W~x*sy~ z4OAHCu8<E07)Q_#Y}zB3f}$eQ@BR1R$-*o6S%JGJSOYdAkif%q(Y<h~XaA282j+!q z3F9-t2=Q=T#C!=LknW!s0i4hB2&Su9Y)Y{Urrff*9MVDV%N?Ds!#S0c9;V0h3^%d) z6(9SoDOP~!;Xlr0e3@cXQbA%|{0az%tcr1<PJKpx=}!ONN^owMK7O2LDeQJn^R|2l ze2PP2&*GJ3+0kv%nfkLt0}-O?L(zv<H~mwyBvf!d#RoKLdqXW{Imu1XNsr&{ZskU1 z(<SiF*Z$1eG}KI%?qt4r@UZ6AEQuGB(<op=wzEw5`wv_>`$s>+aCDSxI(n&%ELPpj zNqRSQ)LKh&Y4JnX#rX-Qm&zAf??mW|q;d^EF(%_fFpf~amM3@!ppM28N?L)ucyarS zL8M#2Mpq8uzicQ?esPoS9=o9cm0Xwh&UFjyg`-xjM3vpM-WK++@H4UBJ_+^<3(k(6 z=d4-C47H>QxXhVa6xea<TnD;e_5B}B*8z_89=7c*UZap~GBXph$;zyxsElNkqKqin zdxr{<EgD8eCD|)!7!^|XNXm%F{O<RB-*>Ka&ULQSIeFjz|Mz>w{oMEcNS{PJD@-1b zq0cijU9e6|Mt^KC!`dcSVsSSmMbMDZ!oe;->4@Ge;57oX@4QmOTIU^#fwXTZhW!@D zX%DK%R#hZPbV<uw%RYEU5QoUes!b~S$Jgi5zvqD7lo*T$&h&~6iU?I`neSnW)7L!l zljP=0e=jd1s!F9nm0hGfw_7?Sl`u3XE`L;3(M}v_@#Psu-A%(>+;?AJXj+pYzs>w` zoYsp&AIf)}s`iTZw@Gf(BIZNiJ(40}_JEdd%BCJ!LD8dnGw!m#iULPi_JsYFM%q@X z6k<&H`%;_3=wfhR<K>WK1e_V;XCFI8Wnwk9lBm)qF%UcFw*D!m$(X<N<JGYZx|RmT zth0o_7Z?{Vv_?vqd5aJR{6EbZHlHDr+-ofolVHF55MqLJ!dG5PCH08Le`EGTPbB5P z?}Ny+pd;3)Vf^)Q7n&Ci)|*)D_WeEH8RwsFa=pE~&7sK*-OII_zGnRS7-3Q|iAiz{ z*g^hj+e4SrBxiT|ma{-4L@`-$bhTw6Sal8L&bTS!wjO~qRa7_DB20~wEsdf))M;}* z6Iol_H$GW>EE6}>Fd#2yM_-T<xi}HiL>KDk^kMm@uD%=%aQnMgr!I)?xF~g^Jm|5l zB{y&Miu#R>N6bDq4X^LtN;xhNa4h`lyB7|0)7$SrAPc?#klgFNEV|(s55miqkss(? zL0dNzJc{gwsV!!?+I3-0fg8;fgLQ#{SFS8#ahXAinZzRw{AW#xK&Nh>q-%G!v=4Vy zKOc4F5PPMj%B>QAzFh9({Qie--;kH?9Fvjg_fOyT!r9o^(y^q0v;D(|JBIaxb4V@l z)H?sA^cz@CVBz3L-|@@J$av5+3CEzp!9k+u%^Y-nI}J;f;!i<|+;r+i;I_I{cPZO| z=+p9p0>T0gv0@iXjW|-tw_cB_jXYlXJ?{_5AlR4sOYDAmAEu|5s6i~Fj!NEenA;=U zjh>@ReRup+5|x+1+3i729fgP?usQh3FyaZdo!t~;I2yVq{)nSyq{8?*OUp>ZkHUHW zc%$e<U%fru^E9b)tUst#RC!!dA0DFx?c~o1O{0xpM-_&b<jgGT<)?)=7i@J8w>!4T z486n%*Om({5P8ihs&V8?XtCbEjsNpXM4=aY$@#>Ba3)tGlhTHrys8%sSfs`WF?QHN zDxB+Jo6HzGVaWI9w^Oaf)CE)(w5Tf9WGwn8qurv}0ZE1)j<GeJ_C*aksj)>@xVrO^ zIac+lURx5aU5Cl@O(B}*`wg#UB&--}J9W4;gYGw-Jv%Y;bMtm;S)S06)<vxQJ|VE| zDRJq|dRb$@H={NUk~pCzrbOm1w=0hM$_;A?JsKLg&0xUuVHk;gcEvcIl$=WDls8|n zYRXj*4UMV&^4dfH`6-mHmME2V3x;=|YW)Qn%>2{zWn%%?-5?AMK%5n{{=QdpckO#r zD`G8*@qUMf&l?OF$bU<tchRAhGp@&Tkb5jM21LW&j{z$T)RM1JH1f2_=usv0zrKFp z`^#%ixXL~!-goPACy(6dIrO(@I*K4jQ|_lwBd`%r3OlG)hT~EcCp=!vB!(c}>lo<e z(=i#8=UAK`kYQLy9=wLMwcluaOzw!$UXtWi_Y}3!8$AguxvzT91_wO-Lw>5(KfSBn z=Cl64QyM|O;#{08MxN(#E=jCOPc(9LrgibhhcQlmRxglc*K$qCZ!r5<YE6|-z1zoc z+r?-R|CELbbj|p9C0~X;)xpRm2<5RY<AYGL=_^`K#=#6@a^=Rll`GTr$g9O=vwGoI zAoBk}F{QO}J|VF+fSzh@f=%1Ev-%wmVJs{{;PxQaOFx1OM2l@~0pm5uAi}fXFn{9= zF~0HmsC;`FE2Ry|KTzX%m$uAR7|y#|@UjZ}0~NXC+71S?5PI*oc5gp?aQ1tNTaqHN z;UX(jB(8P3YS!hm_Ok#!Mx}AIl>>Ew8fK)y6z2&^LaY1p1vyJ=r0-cgpr9*Ek>Dpu z2z#KU&hzK|>{Z9_;g>WB)6OLFW@t%1!A}5p9ZL->K@G&$!HSN<FbhE~fuTdnty}w% z9Y8T7`U{O$p?LwL1Zf|JvKNrx?%h=<xus1d9>At9E~gaVd}A=A_S3t^LWHI-4nIUv zDDLjLJ*){b*dm%?CHKV_ePbN)#s@}wAcE&>Rlz{~Q+B|bn6z}FFwOmh^r!-BXC`f% zYuBzpmvb%YzAIOY@5S&8{h;TA1%@d&ZJ;adymN~h1eQjgnPk*Mdl;H};6Xzu<>Qf* zQzd*0`Pt59$J)kHB0g(W=3RJpJgnkes<|~Sp<Nm-$3<f|a({A!#Sw)G^48B<lk0oz z3WfW+_-+=I<b~Op6CU?zT-8(3JXH6hI2sV?(V!SWq!mksOs+z_;1Z<iWJLMMg?bqX zj^I~sn|H+I9vKkkrr%(Cx)SnBWZu(xfx8=HB$x;>og**PJFMHhS0MXiTIG8*BI*9~ z=nYyY9zD6#_V4kooq_Z2k{B8b^*wNV=%CqSY_lm9^5Bkuu}Tpwxq4o|ecum`aa8Y) zM_lOtu){7T_+Y_5AsLIyV)HD3l|O%2SF<hkt;c}9{;N|waU==^lsKsyZNJx+7tNda zu!D>+C6ovW&rs0Nwrr$Ae}Dgru0F|+Z`dm@^K{c>?&Znmqp(!XS!%AoFmo{D1lEDc z>bTW4j6_lWNr+;TJ}F4Y5x^ks9~-4}$JpmH@NJ@xNxL8NQ>S@eY*eYtKi^Dz+^1e^ zl!wg2jYnCH`l}X>UtU8klW?%nUxAs2^-aG1q^v#pnX=~ghF9O<Q3N=w(hC&nRm_qm zdu(JDY2<$p8)QM|*W7^iC|)aeJ_0|BMYU(&@Xx*kO4_C31CAQ8pMW7m3)c*QQ39c@ zD*n8!R2p_dRa=wc#77UhitNH5b^i8>x=o!BN@qZUlG1V!Q~L|&VtE<}duJ+KPCGj% zJ6RLX&$xFk2iG!^r`eY~zQL3u^IQvm+xuRrzUK^95$4#%R<@7j+1vWh!wc`k8@anz z^Z4}=dEPlS3$C)~<&-oC5N%Q($id4ELV0=J&5YyDN5XD)s;f}=?YZ8U#46ik=J&WW zV}Gol{m)(DCVJOS%9cMAy#d!?*{<#79py^pj<@<wqaE6Q_{W5-Q`EuI(QmvE6zLcH zm1lPWesW4bw>kBxSfG!Nv;NU@$;K`jcKUa8_A$oVuE($crLjFkW39jxveieW8zz3N zdDW#yJV?&uW)?|mbNTU)w@c3PMf%S;Bx-h>`4#6$UnCr-6iEqF`S|6?DXD)!?|j&E zzeaWJ>B@O!oY?Q0%Pr$N5vZ!iUY5-00Q?pmKA_9rlQ(bO`h=PU)xc*&J#=SS(M$vs zAy&6}=F$++SX<>eW!k8-cv<r3ks}_jOKs~esrMb40?6Z$2j%<;YG(M*64TX5Mh@-s zyZYo#=s**41BOmi>^xi&%5+3|vs~k?PR!vk%L&ceC7bscL)HBBUsM+^@3H73G9cb5 zwFRM^%MF`kc6tbhd7<@X_#iEFs#MWFH~_|?vhqtb8K6r3MkDf@+w54O5qr%bcv|MV zIacU~fEE3){V}|}|9r0tK6#OputQMX{G3jjKs4<HjmE<$%>+m8h2g6w32~$m&7jal z)uoX!Xk7YbPI>I@DMpoof92T+>5Ey2*hEu%D#z1gzF61MUArP9P-=AUxPH{!G0an# zR1-p&v%BLqJ13&HQzDL>&$S(@NFj-()hc$nvD)BAd2FQL#FI3g0~P>!6qZXuukY({ zN#dXvZ>h=(xSTc7k@PSa+hx-()TYtd#@$UaM<gz~=`kEqj8!s|YsAUmU_viLM4nY{ zL{IZIrP{aIbIaN6AD};wn^@0a@XWpstC0Hy#x(BR2Rip?_^-+we56{<w0mSyOZ`#x z*ftLunWGKdXC*+v-T7Yj>8{8Zb!|ZcsZMvB54XR4+w)~2Ei+&<*-i?}=~YUfKI3$W zO8V~hXO8~ooWNY*p|zQq`uCV#<tm!e6UHvjlfYv}4b+_nKNEj1cX^CBPw^Bi-#l=) z88si%9+d(O0Z)nEK>ix9_18cDzP9U?{o%pKVZmkhqASkE|ANUr+xH>Hb~eI7zCX0I zcL$!hcSK+uKI`cxF&AO=Q7dHJ9jDmHG^WQvI_l^YHc2+70TVFUMd7od0GuG88Z}bM zv)2@9RN7Q{pdTd?!C+6WC3o~ncY$H=;#*bboPB?pUmv!7@w0cQ9L-1CYn@SQk{3m_ zjQ^&bZ8k8EE$5Y&p_)1qI9JlW(!zTnK`H9<S&^ZA6Y=wBVD(eNw7{rhJ-mkPQY>2) zSLbhQkoY@P)nP|xNjz0(*lITE*j-DCt`@{uZ-b-0Bu5-?S(Pv=HUq+!`O93DEkSa~ zIG)Jgj}-|xM=vL4ZLt(MNq1e`h`0MQra3^S^Upqx8gOHlk%MbIMho^&R%cYhosO)Y zJQU{X5F~R=Mp95vFv1c^ST%4<m36ReQdCW#R%_=6<N>(5yMc-2wFUj(JT0Z`m3EA` zf8ezAQzqSEIsGflgzss&sSr%`G+k51*w^}$7lhO)7eu!Us3>Tjv0uvIPT}0=?JqEU z=|HN(wtg>@;}e|<;R=&p&;ztWseE(65otL4=vWDhGR6(>RI9Jmc@ujRv<kRGQCT4h z|6p-ga_03K&f7S>;a=Jr$zNik#)gIsC%Yq0-Qy3xJ^1?iuD#-FYNsoNtOo6F?@%=1 zf{hx_bvmQsaHpzSxE7J^Gd|?3txc8;6s?s+Qn%a1$$Oyo#=*OkcO^@g(I#Nz6CI$O zrx2r^XHoT7-133fOfT&pWd2B-w}M1Y7`Opp)i9{UCUud-=qto^=ie&M>Sua(WASOy zX0<rMKwrq(b=JCKVZf_7{M%`ieFiczVG&6;*!8~GbHw@>oE_)9qEgUxe_N#>H}7%3 z=10OpQmgd7QN$OwC&4;gnFs1#D5Vh=?kaFh9`@De>ZB35LxIM@C#kTF(8s$a!g$;; zLjP==^A7_fqhw8>rl6{N09lDLQ`;^xA|cscGSt;N7C-SUf%*c)Y!#osf#+K=(b)Jo z2}_w+%uDZWpmX}nJ8)(<Mn~I+vtt5wGorVV9$6iPB~hCB0&h1-XeMPK)?at-`b%&7 z_PU(kqT?^y+9U4UbR0X$2hRPK?FDpln7FGkH(q~LruYKyiUT`=S^nm|=xw%`HwQt- z`g_B;k*7#ep8gq2D+#HgT;RzinTVN3c5<x?wh5>up2_@5-!N7l{0Y80+-UX$?zzf6 z#J2bDKWx;txXm%?8Fx`mpt!}V)^|Zby_8WI;kME$b0wruE0BKd;U6}-%|g`+G16Sr zeL>WJRu|6RuE8JR;+%7IWB}Qwd?oP&>iC361*qUaKD3v=ApEm8GX2+T9jUvm=$;Rs zA{Lsag#|Wir}>grJ+N=qSkrcN%x-=xbhJeNCarj%`DVxqdyQ86ckkbSrezGE+Mzb` zOm9nr%3_UlF1sGw+2qJYPYvp42^Sg{8&!g2yFyBR?NpUU+vX}qMTbsNhW-VLpxdso zOJl=4gM%T`#`ejxg(db{+t3>ikMP9@6tS?14^#v%zWYI0>Hk(W%^VHTS*u$fX>i>a zm|vVYY`K&nrTdAoLlwkoP=9~PGYG$+^O;9JlnE6$|B=0Km8QzC7+3INp2azt=RUQy zN*_Y_vaDs(1ceGt{)^BwJwcLcX!X<|%P+ewB|N)9U*qy!<XuVWn4qkCm@Y|*nY+CD z<>y4#F5EH{BPen_TU-%I_x?^%udrk<n+aqQ9^F66TFW@Dslb^c6Xwa6$r`%CLRHqF zy|HePDry%c%ISPM>cqDNPT4ZS)`!uz-J|Y1xCy7q-2^a)${72R=&MMo7)r4=dHmR; z6BVf7K{ERXQzw}AWZb?T;YjqpSe$iOW81%f|E*8;#(qD>cUs-vLu8aI#f#q}`2y$> zCbUn}kX(|M!}e!B4ikCu<jH*4@~88b_U;*2uLye%lk)5%mxt?v*Mg#pD)!Dtv&+HC z5fp|~>_s<qBnC&_=HO+9LI^2)@@07)4vNr=iOWkXEuxZErQA&KOX;Be-@Ez^O$;4v zfa_t#=*Fq&?&l&yrfCZB-A=cgl6XuZIz-r8)MMP3li6orY&965D(rc@>&f)gd({SQ zPAdLTA1LuyNT?nt7sx&^7WfP1Lhk`rOu>85>w8y5gKxE-6j9QU<dk%nWXaRHYxLl3 zBKQ*xq1Z5zuwRQz!6bt-{&0|uf%l_xR3oa`2@;#$zT{jj`vcyRyLJ=-Sl^{y&=63j zArMNn(T9lfaOW4iJK3Qh#$1K249p5`8RdR|oESc8ae;*;&A6w#FH&Oex<QksgX$0# z*P^9z6X5-OE(5*5bJXk(^{XthxfXi6bSiA?0^A-k5C`zsogKA*gdG0A@<+nLg->yQ zF#d~3EEl*ba#&lWi$5()P0|Hu(<|8B9i2s&4c@-}&f!-2ZdK_&;TJPXn!VHk8I-EO zC$9YjBjg%dN$=RPI&RS1-`F?G|2x^+N8f*0%Z7{gO1&iGTzIe1(|EaGm2<B(rM#QY zk2Lijp)4+Kn`&5i-S-U+T7`_?y~rGRKQbk3%TNFEtgP@fG9D8tJ^8fNKb}gTm-^;r zBI(~V*Z8b6V1c>p<WW)g{K+|odNw5#%4LV@TJ`LVm)?7Q9NupGc(lD`JM!+1v(;=v z;bGb9Tk~|>*<?i@z|}#a{VOoWHWQ{%k8!uJI@gh<?5NxIs=c1W?o3?tKlxLF`U$-n z{d#A(C`?$}s5+lA@q9G&4Fp&s-)m{%THdqT(_AmxnG;o|cxf;y`(163^${8)iImB{ zNtzg$gBvd4&Vnsw`Y#Us0gm@;I-|w@<;sOfsBG$Ur|i?kf`4@j=??D%xBK86?li4y z?`_xK0#ZR*na(LeP4Cl;!8ZD;eQIwkeTBoPZ%4O21cK=M3jMehnevr!zVHdHADRi~ z1GQWNPOTz&GU=DaqmMq)ZM<e|nj`8E@ZuVS15I20)a!vOsdP(zIbUy)Pacovpcpq9 z$jS6jPc!~of;T@F0+X#`7<AlNTk5)F0N{K@gJ;MW8Mg?!3tVB}P?YJu5vT{6Lw{i% zFdW`0d#NV_IE+q?fO7!<dTsCH42nhAo%k9mPOyg%yo`aDc*I>+7ygHZa|{>+alNIt z;81=fQ-IO;H=HbZZ9hB|>Ut<=3U?IrNL7G$pZcD98R$rWDK<A$S68c{0Iu!5Jn+5I zBusLO6|&-kHrzUGynaWf;}dflY;9c$?}Ig+lz!dX^_Fexb-n`4)sjmlMK9Uo`p_(o zwW$}3bTG#Q&JQMG=voc@EjbE?8&{04LDQ)}!ZjKtFRi+_3o00${<f^Xl-DGh6~R)? zDM2j<*&fX5OaNg(+hB8nwYdr4rxn?Qiz$3NIXQ&qT74Cx!^YrAg|z!Ga_Tn!-YuaN zZLk8oEY_OOx|@dCqml6Q`|DRyKfuIRXdEiA_o?~9A8!`}?pO4Sh=!dX+*2v-ip$4j zs{OscYlJGJi1vJtzT$nvcArQTf83@qx0CFj(NO+b2Z1!dNc-kX!2Cp%9Lx%$l}z#^ zWTNdqI6Cq=i=`>JvfRA_?{ZX#ci6SKR)TJ%?2lJ>R9yb`_0G%C6iv_0-%yUXv$O>& z|4wRM;ItD{c$nM7uOMD;+D3a_d{}`f9^FN;EBoC&QNow(*VzKLrBN;>&FN*61~qp| zj`6Ev4e-8oSuMGS8AwPx8fZ2AqXT!UHSP-ek{`ahGRHL6NZ1>2CtT&-dy5Q-F1hcH ztApCSzY|xsKKMUtS5)-z42v~p+&q7hW1x{_03;Z<dN;CVbU#jP+jkVh_cDD}rZ|tG zlwIVK5JUC3+1I`cAyK>T_m@g|(N`bh50*{Yl~qA4RoJYdTP|r*#giny-Ma3sAW5?( zMq9VIy;YWA>FXmz3{6lR;JOY1|3#y}=5MmveKRLDXa-Ykif&ZDKCz^tjRv2M#g^9I zJZ~<z<<Xp|Voq@-wdncw-vA?gdpcWZ?m));8O0;Q8<I>tNi2<~p+>>gr#4S9o#Q(8 zK;n6@SrWN7<M>^HLjEKspCXy(MZNE3UCZCmPtmi}#%vrDl`>XIlAbkAQB-amyf#6Q zIb`JfBs`6~?YjLnX;bw_DPykTKRRnmYzcN27-<)SpG!1csd6){&ZBl!{R9a282U&s z15pkG41-RJBV8#Hz|{s;0fELp_3m!lOuRN#`9P)3iksNR*ANJ4_Fo$G1wP_-z^x7a zu--ON!gc!9=c<b~iu*S$Nw0qfjzz`9Q-jG*RXH$(2l<?gD8TQ*IOfKj{^P>Wn(q(K zl`SLYhVxX_VNoU)mPOx(gM0(1<K>)L(ciBI&A-M>t-Ghkm96jOyl=@OmbF!oRy3sR z@b$ZwDxP_n?RuZFgJN4fOza7(h}3@oy3WFSSEKZNxx3~0P}W;_?tH<{29c=As7(_t zyH(k(^c`!{yd18FxB9mY$wBV$lDog*@G~jmev<KOQY+Q^yAN3wEkHwB;FY5WDB!Gi zS7~purqt);ejxcsjR1CP(fP<RaI#?T_rg<>(&rTzh1W)v3vyMm{9ul^?iERqrI&vq zfiy^XNhaQb<F%A5oS|&F@Z+eOsL}f7t7vFse~Z7vGsPLf?{5IXb*$k#gQs=Ve?HVV zJ7<1P30L?k`j)0a`ql0~Kgr+c)n^KI9X9r`FEU&;d^1kDkl}xjd;8l99j?fxg+uj4 zqMeUf1bozYt0oKs%2->O`>;bl>L9k$fYp@ZYPAv9{uSx_xuno}VgHsD;h{So{@mBz zCMZSsxsGsazW`lccf-S0`9(S6PTZa!hng<^#>=FbQE*hC=1cJ<?r9Hh&vZqGE5RIU z?FtVm<DhAVLUh0LR>YUG*?!IUfU&S)X1@1bbQGjXG;x>#pa(=7_tJM^6ffOlf!5kw z*q~>x!d3YDqN+5$r^;CwFkz6B<h=LZfwt2wSi35FflF4SFo;S(;B!2h$bF|?cwlye zxbDa}La7Go5muXWhMaL&9{ZH3>X)2=yS$J6@U!4E)z_BK`*J9$bEwD*h&vQB^Zdz( z>VSLjbr8e!4`~=k$(pNVo|SpP(F!S4LG>bKp|F7A<S;O(M$dF^ff+Pb{5jlVt_h@0 z<8LgwoVC8ueD~aFV_8gR<M^=r$9j5|y4?1%YS}t32a9COtR&Dy$#Rr%+rMAUfsWf! ziF!tI44d3}VSMxa(d$_Pg1E7X$sQRyk}n|d_F`-e0TMVdJ%L*q$afd!vMb2RzeZ$* z#M=R}A<6<tb1g2pE`aYpD>l8oxiWN;JFR^73%>thGqX9+@8AzW749a0SCPMOpq+Gb zd2@Ybxyc9($D580T-ZJYV%I}M8q+ALp(eOo)vw@J42&pgt6}{>k}BDC#>Ywhudce^ z+Y!kv-xuN49eSmbMPtTHIF-CZLAR4loFxFtrM87L#Vft>IScuDE(Y~cvT~f+dxri5 zc1vQ<YT$hVQo%R3_Q-%=E7i0gf9IC5>1N*MkEb9RQ6f4LO(*G<zuAYO-H(VM9u2O^ zun0r_SEN?|$T6sPu{(Q?@~lPPB?kERQ%sxPAYmkqo%7k4Tsb(5ch-Cc?Lf9Jqh*tk zg9bybffwiU?PKlT9mZ?!G$so98<1bqba;qI{2^UF@>_bFV_0CheJ{(_4I%U2J6yS` zt{RMaDAm&R5i~ezHh@wLbF*@@FpiqD<k!vzsK0H_%-+=rG@%vjK->?FE8_<KWSeuv zE|WK0|JkblC((aqdK4ynRxKY!+=GJ>7&+bmgLx7eUsfFDkr4kNXmkd14TGl{GHKkK zv0{|3L-?SyxV!ps#9A>;<@@>&2@UJE{BjTl={W9=Un`1!Sy@3v@Ek@R9UZZo`78(m zIB3GBUZRKwr}4$))YMY}Dcf5AwWS}$jM)jRMrxI((B*=tu-?7ircCxHfm=CmM>I{P zuQU{E9UUD45%;AO=7aor3Ouh|!5Z|#N(E<mjvl79zf{2t)`awl%`ao3!p3*5&3%rP z{ZLenABPfxl^VA(Rrcw*w>zm=+_gN7Dj7Pu*h$IWVhAHqGk)855tY#7n3RtFyFBiL z_QSXRbRB(%>q(1hvVUq3l*i@UG2}L|j<Darr9`S|*1VN=^MI>X&N`Gx=l`u_lk5z` zWLe&pEUQ(@lg@b<C6-S>y*AC1QtcVvyW8{hjL(a0^!Vgs#onmC_81|PxQHAx^ZD`J zj0|jg{t8`+B_1^@9Z)t*jE#voXWs57Dn0~U{K(^&@OA@B2W7qjj}8NwuhrfX*N|S@ z6db3>QhS&m%TS)6)>IbiH2eN@cQ(y1i@bAgPEODbBkF27OYi+Rf+!l@h%J{bN<Cn; ztSl@L7r)sLci3+aKuR0Bv9jm()469DRpEr-@L=if1<Z(;$Er}C;<KK|(gGw*Q7&BX zL}Tv<op%o;nhgFF;<Z+wO{ub|m3b~smU6r{{xn?&o5<cI4}X#~iCfef2h=$-mFy-T zX-6tJuC?5|Lgfr;KQUE`IM`qV0@$Pu+}#{;0W6@F$`}{cvw;ATkNtKu&=KHY9TS)R z*m)W>hi?wni8N*%M`hId7tP;GRxJZLIYCkW_~WCr9O{Sj72c-#GxkJfz{+nmk6}&E zv~gnX*B9!mg#=Y2*i~e*JCB4aO?u&;%oo5)+9ZuTTP4p*m)FU$FgE6466WeZAj4Hb z5$FrHQk-z>T{gM$V6DQ-l(P{L^%r%I9X3exBGVy~iv9{!HW*AQ?GRco3b2}ApR03z z-yL}@Rc#s)(vm>3Kli2%1Y|*6dDL}!7OpL*@;4{<5EE5K+3wG5$C(M2Z(LT|a<^l0 zPZ7ygc)y0MgbFNZcg#@q(c++<+k|YDi+nxfDfMZH%`6{(g9*_74|8ST@1&e}w%VVK zy^iX0ca)R6d?H=T187*fyfc=p=KHTd4QTJ|bZq61P_3+qZ{JRBvvRI<nEFclz<iJG zHmWl8_wpv1N+#wvz&{){OTVx8Qn*@#OJUJR+f~>%3G1yNJ$eLg5$<Jz5>d4Y@}j^{ z=_Q&enhDRso#r>j+iy-+@V6bma4g)N^e~S`fZJyZ-=%4SPsY6iX)&4u93*g>F7#n1 zm^ZRl3<a$J!dJT%dhH--D(~Z7!p+93C&RLIG~ghRtrna06MgJl&Gymu_uiA8oC10d zu9t*ci$5wIpv{R|2m}a8HgM;A;C^xuvJ?Y$ODoo+9*0G!(l#1Z4&}s)dZFZ08LO~= zE<m(#>*Qk4Vew<YkZB%$rI5665x<Ng(U`-zS$u;2WTWNc<W3>GJJ+m3&o?+au+S48 zPk$aK_vwCk%KNA5qPMs{omRStEiJo!CpD|ta-v(Keg1oft0iv^92(JOFiMRUt!J)= zdy4?m?dh<vFi1^^R~4NRa8kb9Y^|{>3?FbKdjeAL-K#~81K<5fSYO@Na+w?tG8?Q6 z=;esl+SC-Q3#FbWt6>54*R`*d?&CX6sZEZ!D{VV-{Ji~g&XC<noRq~b`3d7lPF~8J zgo`M#E+S!qpMlZIDcr{1-d@a4X;Wk>D^^%Hz}ReHm~G}H%6Soo#U_qxT+)+zVCRF6 zSDc{u7n;fA;+4}^k6O(2TM^zL_);%rHFAsMoN=Cco|0?~x2))F&q`aFTf=A#78$ns zA527KW8hXwGOp{p5VfF+-ya`Tu%4Y$ghr0QF5nNvK<hmMkq950YkP{~C{^}eDJhfl zoa3mH3rcNgN784Rm;_$%2CR}^3_o6VA@b(5qc$gJx3BqXF<_c)5Tf60B=dN-Y$3qR z56k7C2=ClP$uJ;ilrsV}4AB@KqyeBcz>DI-x9a_|Bww&T?g8xHvN-SDxpQ@M%{%KO z#ZtL#&+Urr^r*_dN8KFlB!ldk@x--%StX|Vtt4@|yTw#|=Z7<uJ$;$)(HJDT)&~7t zoh`3|U!5ZWqm&rF*Qm$Wjh9}3?5l4<@2zm1)ID2y;$gyjWV7X~2DP^Z3gVU9?G7SE zUb^%fQh$7~51*CM5<4vgk&<(4qkj3f(8dc7+x71}Zu``<WqK{?jBUn)t5K3TPd-sY zc^B6gDH@%WRFWG#`_+Q`WH<@y&L->`Xwa6$IJ5OHI8ZL9HI&=q>{P&K6NXjeQbKBt zVD2z!vYgnbf6R;jIVa@=8-`Va23B9O^3`YKD%kI}4kwgOyggylPxdl-hqT|0wl5)y z2BnH4nJzM`7dHl_8HQd+e^Mm`W(QiZCGfXJI;bRlqljeZwYF_Pfe!iJw6sMnjkW=b zQU}8$6VS2*>TVx$58Zq+--~GS3S0UVK$=&de|XN`<uZI;C)WkSUd-Mw79Djy^|d_9 zUS@Y9uUgJohB`iq<kZ&uKcTtNc(2aR&bF|sDa)%HAMMcjHTaVC5A*yX4Ne783e&aY zVRwxRWBu+2CkT%pL~21P2#$cZ^*Y)7OnMN}2w47RKlTF^V&*LW6nv$|AfnF*ruLWr z;+~=A7P~_85{JOVJaQiO&ocXwfziKsS42y{C*}vxNW9cjzep^P4fQh(mr;36U)VRT zJA&i;jz3;Dt%@UFA-)0gMUbXTM=kSQGLDzWR{}J3y@bmJrezyR1S@NbUsg)WQ?xc{ z)MijGu+f)<1aP$sBe841DmY8?J(1ZC|4OM0EWC;|oYs|31|{E#ZcPl;w>Xu|RTqOu zh2A`Ju|lRFjA12L;MJ!RZ(ZO@FJByP%0p*p-OM6XF@s8DN%dRfDa|;WTLZ62McUqn z)juA~)-S8SE+5eNc1P`_`insvhXgV-m9k0w02U*5KL?Bpxd_zqCBSO%2R=5YvFHo? zY=Lfl0YCw-9%O3o**+pFi$_OXgbA((Dm~k#d{pQv_d%nuu5dU67}CJ1*ql_DD7d}k zghd4MW0~pgHMJfiA&UB<{?_zY(&{kNcN&m0NxRjXx9@1Q$<(X4+Ot-u0X7pgw)!9_ zg8IY~yR}g+Kt7fu73bDnKr1(nC&_!T-;hX7K?@vb@BZtjETS?h7OWR193-w=#IXlV zFZjsz<-#w~9p5JItFvA^m$1?}_X_ruH)Y5sJL=C)BTmL=k@cmW$eu9d;+!OWWsOxN zJ9X3kZuu_fl;I9Lr(;j|aM=53?hLevkO<9YKXZL&a(nq?e$VZZ^L7GHIV%qGF-?E5 z`y2b3_2gfpszcZ}vDUN;7T(Xi$66ULdenbzdUhz(mOI4McWXmAC3TMvW-q=qoyUua zD}J%#qn{U~Hk~@kPDS$$`R?84f1_k_(YbGXilw;4jwdqWL<rK`fs9s?PP@X!E0ym@ zbtH3+PupBevuwA*SZ6woXg{YE8L|YyZkk+eGj#)vv)iy1WvV`TcFN9t#$$_|w^3#6 zr8~(zPBqs2gl4#LM2F0jE8movma2Ya>Fo|~J0miko4K)6gRXjFbSHJv7L7%pDmCjx zEEGuY@$Fj8UcEg%1X?h-Jo8uJMyG*j4cIV_SL0rNde%+Gt{tNWDNT>C%TP1Iu=$>W z)Xb>0yxPLq1-G-3WC`2igZ%Hl&`D7Cq>04`CicYHBp$GPRVTvlm!e2Z5#?4wX1$Nx zKq;qfWL4KCO_`fFLL-iQfiNw*%s+e$bV-h>?yKVY!#B!pXE%a^;)^@|8+S8Sjt*_q zZLh%P5i?Z(<F;?t=if@#4G+(d+h)!pN7?(-KVYI#I}yI33bOz%aj8nh;uhO%bg-90 z)RRe6BHQ?V)4(0N@1j6rVyEZiBvMNe9JzTOtAh^A-|%gzxg27gcd+`~zE5A#F(@Z+ z@(iGez}rGcOJq;w*<OMqaEZ7I57n3MRf^28eo>)}O>~m!M@9J;oA(L{AOH~i`ej<S z06`0t1*u@+#t!|d-E(FB;O0;f+2g^LY0tp9Z8QjR-Xrn@LqVO4YSCtckdfu@ysK{w z7O^7ljSdRw#9@CVcZIO<7g@T)Y=kV9fU_FPz1sIA&J)H6=-cZb*UIZ&?b?^j)<wZ| z*rs?Qx7=tuNhkYN7k9d<G(FdcD5}&RcduR7qDtS~%vz(`{gx*9b;3o_yu&|y$lM1; z3s?7ytd4dGk$FC(=mXaJ&!F+$<#S%LZRrnymF}Cez*QC|9#>Rs?sc0)surAodb2-Y zxd>`AB(IR#q4({@g(J#ki;9ky9GS4)UbE8H4hi`B6c-o+Nj(fgE@2?3%k*^!ekSRB zvwK8y>2$1nQhqqO37YIkIaeP<>ZS>e^mlBRW9R(C$;pXYRR7|YD{_TU(RW(~y8Ofr zx1V?*Xv-_&cUs)LcTfF0x&5NIxdN^}x`;nP=8vuSm!_$~<wInTeCo?ql~B@|bP|I6 zMb$ssJrxmA>Gq=p4<+s$ZM$MWpI0Q1A9T~*aG?LR%zlf?C7-`Wx9XUWANSc)r#6gL zzXA#w-W)X>jrls<ksO^JHx?swU7$<CyQ_YZV{Eo#!8QuBPHX-G3|>nIm+$~Ywcbn2 z4Uw0hPqG`h+p~-1O2SE+Anx1j0^fbUOVhKq9VwtBWBzz0f`?0+o%YgZ6?VO7j>vc` zsj~%gD38|9J;^iu<6iT%FH%8Jb>pr;s_PEd0)49#nn5lvgFhFh^<OuJeXV42?aQ5y zei{GR$jHsozEVI?@GNi_-)?X@igbLdgB+j5D7G6&O2#dC5qY<8(|q&(!U|Ku76vwF zxs}p4T*ycrqU?#SIoRo2z3cb)v@+=b$V=F-CTTW{;Dbyj6R2?i2n1J0;AHJS9>4Oz zE~$%;dh!c`K(RrFy(d5=q88Dv_|T3KUeBcZ#5~ox3kSHYmAsKTg+<19w#^aeS!%#5 zn;v2~C2x^us{UgCUk(>9AnQa9CQs_v0b<@;S;TrFm4b#|oRH)<+y%KIAt6XIynkvV zw3oqF*uW~cClrFf=JmxMo8MG0CtUEOThpaBP@O}(gC2*daAHW|G}g0ziNxpxq>8wE zSJl8i&@XW0Z4-oOM=1X!74Sds5VoEqUFJ<bIS4GaIqtYrqw7G6^?-0nHO<>Eg~SoP zYvZ%utKuK;T52oX-M^SOp)Zsp<MH!;UK2Oez(aN0;HhKsi6OvOIb=r(tAw8ihWvH% z@>U8{@StbxhzpN&ol$5KD{1)Y;j5;kq<C}acrOAS3}SeWN=-MS6Hn$Txm+l*GRK8U zO-+Rs#~2n0M3sP1ghEf4Ut78JH%<P>AECZnPFtR(oK?a#6uDiHi=KnHDn)@T%^Hhn zo%AtqiQ4H$@c{aZENY^F>hR(GT=e)EyuL(h?~Ic7XW~ptpS_<wD($B>b@fiSqU_=? zUCpBMgvdbKuq&OGv?=*v-A1?%kz)^ae)^Hr&GzWnxRp`)8;EX5RtgFIu<{IKo}(E- zEqFYtbfF#CWn53($_9dM?_--?iKm>OQWO$LMu}+l+3n>=6fUdVZzJnM#zQ36DwwJ! zl0V*Fc;PXkJvfa9l{J;+kLO{9!-pJxxblGCpd<A#+D7ZYpWk|>^_HSCI&pz}bV*h2 z-UfeWK1m#-6?-O|E<#W$sPG=>Xfi*)!?or!9hBi7BaH|}5sGFej%vXIg}=CaVP#f& zqC%TjY7^zMP#-56H;H%2&!W>f8N>8}?Z5`4YHa@bmf;^=2v2A}77}dYK6C#Qmm}*S zi0E5ov6$RbJ;__k%3tiAJ|YU;mQ~VL&-!Es(%x*g{fLyzca+q@Z7nib5eypgnd=&2 z5hUsyTi@{_UmhZA{Vw+@P>Oc*$Jbh>K>Y$%+NWe|JuXX+@#0#PdK()XkktG}m;xIB zUVS&<pZ2#eQV+%qg2K4Ht+UvU@#C#Ts$A?z1@r5@<e@h;uKvz!tx_(~V!v%i@+tiR zh!QQnmnP0*#W1B>od1$wr?xH^rx>XSeGl_p*9CZoEs+<^klt+LNS&AL%`45cEd9&R zcriElhcTh`qdNj{Arrurw`1maO7ml8Rj-Uk?Qj+9v=n`3nfA<THT%fvLwtK4w=*YQ zZjN4)3KGMkAx+ugIPhGNv_iAd{Dg+kn_F6x42n)h=!KCCtU-;->Y1*4pDJy;_0_#j z_&!R;wHOAA-SXF9+JJ!~I($={OH)%lIp`2M^+om7pZCH6b??DrXfi+6*foTxc+Z%> z1`mu)SV%~QGEFef|8FYXHuee&^UL_o+dZ=<zs|_sWee06w%)x*ERGv~z^Efi7z@*g zzPzV9cPqG<qjq(DjjPxGQH2V~6@iiCA8~lG1N+(A&jhml6#gd8Yh09dys?!=SCZYw zf<ac);#Skhf2qK^0UX-L!!O44#wJ)9#^_ixSwFF6v4oG>A8_r~Rag7&=j4PA-~h5t ztOuYC99x@Q?QpaU76j_7;vCFRfsKohS-EN6!qI1~KUx9WQ+s=EHkLx$tL}L29^7Q{ zfLSuS{&5q5iAyoTH>&USOe<7r3wE`JV-I7)20mFfZ<}PuV6gFu<$OOKOmkR&tt))D zI5a-SNUpN%F7@ufVTuplSf-??#nZEkk)ZQZOh9W0p!@oCSN`n%Bc-J>Nll^U7oMUT zSI^pcSYiE!)(Faf?1#M4zdprlzni--VdcSQ!0|PFdW;Cvv9UM*CsQKkD+qn)c9-E` zW#{XGvGW!<HL_e{n?38F<`Cv*mcqYcwm6PR+Hp9Qw^)ZOhNB6!&5g0m1kP(Nv4rsV zPrsYB!U$~&`PwBvSL*xR@?D*bc{UOKNQHKfx0ci##}u&8BMv=RJ~P^}#utqYH`EWa zz9>48cT>;%7zm)ZszBff?PmkMhvs29qv3<2ge*k2M#3k-dgKFQC3GtjC{?!#Et><2 zk(Wal`NpdivvUSXoazO+EA0zB59gC2YFpfl^K^<0sPj@vCv!2Ye*w8}H;a$|KNp#_ zup1Iy>!ki3rz<Zs^*Mbxd+AATJ!+bM0yxi#-Rn$_=;da6?lZ;y0V4++W>R2>xUnB} zr)C4pcC>6AOYourPqyp6z}hR~oI$$avheS-)NWt}18t6;L??21x-Fue215s;F_3qv zwxfPdq>L1CH3GAl#yJ>b=Ae%uhzmp{1N&s;lnc{~=B!))eNd7=zMf-lI}$g154kyn z-*$1FP|aasN&336{p8J}x*-D3-^X7#)qN6JMD%G#ZtWT!x}(eRW~CcQJmP25f*GuI z5T$t*dLLRo)FUyTM_F(<WFBvdFfw*xEEQ|>DDPAQK#C&NjvA&I$|PlFJwD4JhiRh~ z7OG}?J2;L0x$@nN2@To3JZSz#+VZi|YmaRv#qWb_mtWnW=T10s$Red_!5+>%1nLo< zqdQQl%y}#3;ALlz<oB3`=b$U?+S<!V#evc4HyE=Q%mWe!T?Z{gy3%EV^EYKJ;pRGh zK^PFbHE^x#L!baHQ!j_BjrN<d2C{AL_4)g*v$Hd5=yEhwa(g1Q0qB>|bAn5tI1qOQ zJIJ?t)^)egi4y4*4**Hd@LD*`T(A6jzed5^&jjgt_f`}1nM=3mdrHSr@&XjCa{i!c zsl$WEXZabJ4vWF0+*tA=i_OV*yStIn92vl@pMW@l;U13ukGBUHEU1JEm4a91hV;MU z2H+qS_Yk^~HD34}b2LaHwy&)+KTv=qo5i-fSHZ;>gdjb7yFMHxR2Kz0Tq1kuWaA>R zfx>_KBR`Lk?FnpIt?AmiL+E**9?{hJ?Si!*on1dsR;S#TbDU#)=?%Wp%SB01wBGc4 zmVbXcNP#wirst5#q8}J+xT7ayi^F9u@}nr6K67R1l$RWxAEl@+`OZaiWH&A4ZwUpP zCK)TE<PVgL2(PwH)^6C+Ep|O<E)$Pn$%(RmBjc0<X`mOT9|&c0z)=9*(e!lqroyNX zRXYN}1*{+=wFaZ3`s$pi(s301RiWs5Sl@{m=NqBlhjZo|GZPb{b2uKFs$G2$YTk|2 zu|(rHnAKqF7He}XHzmmfc&-cVJSmm`*B;av87G?CkX8AKEztoS699^61tY@q0WFt2 z;3R#aEOEK6WM*-?b~vz-a>g?pOk4J;)!LE&h35omW>AYNwfp+P-QF03!V6dAa%@Vx zt!Y&3+!@4Sa5+YQ|CHG8JGDB!+5^=B-)aF(V1{PKi9OpqS2H~@{H??LeKFQt+|1BT z?ov;wFDWJl2<Y(Sm`vo@QFD&20Oqb4s>RoObh1CX-(B_Jx3rU+H*Ren4++Z^cn@4U zrKhJ?L`{3wBOwhYNqEV92MZqS_6{DMyR(Ke<L8A6^Pi+-hmhU_IM=SOxE&$Vrs!?3 zw*{dDGbS}KT0s5VA`*bvB8@fe@Q7v$j&<2C9Ok#;uhb;sDnuu@-KU|Hcr7$x|Bh@T zRX`qIsMuHrU2{G6hgB|}uvp?^V+;^ZLkBX$p$wbM>bC)+BL`e_{m(X`o}WH{!#4QR zfy5uH)Hx47eH9_CA){(SYMQSFPV58jr5;h6_3owM)95?3sMHbFfm}{Pvx!o5?AzwV zCK-nuGHH`UzRJGL_j@_^s#NDpBVULX>`eObv9JS_oif`xQ+2v79~e%y$~Q7RMKPa@ zGU>G3?ki|DO6t09E(kF@@pVxY4m!x26e}y_N9rH-cA5sBC7Zlg%HQ`x6)>-K@hlFr z_b8eCC?-5w>}>X$J-94!)Q>Jh@5tYr%r}KcD%+*VUbF#v5{wkc$iHqO(NxZSFn#e@ zE{&{_Y^cPCR|sn;r;8s7&#g9&n1tKjmTRc3{KLo+6(wzPO2mVnaE?q_k<Hc5nMd|6 zF)q(i(bCdV*seLt==uTd-h&Y?07-z|nfLCQPE*6G9oSzk-QBm4lu|Qr)PD}rMDz3N z3?9cT@1I50NKC6>HYR<M7A_BFVPg6G3C`77;0#~<m_r)OV`8qWJ~D#3WGDJ@Y^e6h z#Fu;8Z;@4<`gd+9`&V)ms-;_5S)jc*q%QsXdH|mJdbIL4wa&<!CT>>_*RlWKasPm2 z?Px0R&0-aGfa*S_1bo=Xm#2w2!hf@%Kq&JELZTb46nZP)K8ojnha0Z9{;Fbfg?a@8 zrL){O9J-JwiH^Uhhnkyos}RpiVfITP+qVjTuLS*spJlcrD^eaxM(p8+F+XRg_hl-6 zVc{qFyuZ`-yL+yOWux6COGmpSt6~x+quZ+2x?RE!cH~@Q$hSJnDz*K3KJupEjx_av zjx{zz+B1Vl>L<5(U++EEMa8d1mCs4`?sDNv9MT(_o|;lKc@4*lDV$`yFtWd~y|oGA z4$%w`K?q1E@7T@s^f$M@VitriSup`E#yBE$;KoAafmAwPt!oU`pKeve6j;<Ei>D^; zK46;BpYU3*HK}P|=6~w)1spyBGpQM)#ACGIVl;QSrWfeRCYuJ#4>xem+13I-&D2j* zx;%<H=u>qPsUy}W`F*ePo1N<ms_Z3}-)bUR=i3!_)$Vtt8C3aBzs$3`(z2d@wc#zL zd>UmLQD}mq$XravdQ5*+`#T~0dy(8bcJtzxYId3wom$TLYPy4rQ0Vefk(PWSc{=g3 zP^z@xmw)%<XH)u1B@R4VpBP#GinAXU-E+|X5@iNT{%Yu3iryfoq(1<FX$yQ56IbJW zdq%2>(C*0xm;teQ)JS(#Z)X2E-&6fkoWN+5K89)yqq*zo8lt=SP(>SD#1{m02oDo- zC*Nz=);?%#Zy>aoqGEzxK_`L%W+w5bN0U=hq8AO0-kgt*0j|%N-A7dN3+l!F-xQ}y zZ$|~c95UXgUAD!s8-QC^o0v4pPkIO|7Cb{CFBHY;T8wagOlS>faQ7lOZCal|nV@Bg zR&!msV;jI9gJ`b!9I&jW$iahmzxAK->};Ytc=7DwEzw7;g}1v!+V;gnNIiP?Mz*;9 zzgjzT?9YEy3ce1cI#th}J)>ge8s;AJ82gBec9(|8rN9wrv!deujVD8_gHT+dQ|Ng2 zPIy?K1&2N*J3CP@f$Eas*m>mVZSXL{dVKq^e}msTiAU9Y(Cg*5TFM=5&LLW>?o5ow zke)Qs2w|_>RnJ_nxwahhV?Hm6h+*R1fZ=#5+gEj;cJ@E@CA%jazpoFzx@z|2)uBPL z_rC-#`H5bZ7dfELSo@b*j=}MMLm&wgRz8>bIhK+CUjH_dd*(=D@K9(X@593lUUF7z zgL5~S&QQ;vS@KzW;(H<Fj_8u<wz$gV$f4^5Fa9kWk5sCn!{k=x+1FDfcj~ns3l0+J zlS<ujs*u#6t#*I3X0>@`WERyWPK`Lx*4^aE3;syRI478NguiLDbBdB9<8&jn6d{m1 z7N3)-L&6TH-vxS9+bsp<>HBQy<t5DTqobsBs^=?SGxev-i8{x~GNxBuQ>bzWj>AHg z^rqSId%q%wno;uy>SLE_y!U(|DLOVyNjvf9GrEYk^o&dvA1?+){YyTu`jSVaO(^Wr zMFFRQVu96_odLmCj(dR>*gMlr(0|J?E>k^W1rmgbKoV8Am-K~3B#1B9-M-hPM;mYN zel!2cl;lU$Y72kft$}m`C3lzk)&4IZC?B`Ek{o0!B|=E}@Rk^i6J=maqDPB5fubA* zRRB{3{7#;m6L)MyjMHR1hU<|s;oC_x>Lfl1ED3Bljq`!sX5A>tfFAKFJ2Xcjq}77V zpzDKQ>e=3Tu`90yq*i29t6G1*W*VyHsjEN|j}b-c5H?sIfP=qZi2kN?52PPQt9wH| zk|Uyop;isAY>qQfT;BTf1N=wiOQ%4!_koQ94&!V-w=KC|P)-B|^3vYQc!=s-bWg?q zA7}di?Hx~zQrpgNU7SU|{xUgWYV&L$*;@qR$?<VXOahTz5sQR)=hDkrsn_7F@KudC zlo}80ST{+lscGDPT8;h}<2;S!0CTeM*8*FJBeP>S6Q_QuTDRQ~?GiSS-vGbL2WJ8p z0W$h;<ZJ{`5Np~2MR3F*8-Bwx!N(>l9*aL~&^awZJ%@#vm53f9{^yQ0;c;`kZobWM zws9bwr}GZf@)$I~!|#PVg~H|iV%kZHE@CZk-{h{IuF(nlI(AtEWJ4ZSHK3;0%r_Rp zVH36)`AbuXdvE^X#yhcLLnjDp7p{$bJ#dNpbBEi<qtnqr_s2N>&hT(glja<#pUX&> z|77LGb(-2s@MHGU3>nkf$?`4H@+tOt0pC3mYQ6^_S(T$7LGWMr?0XfH-ErYXalc&f z*hbzx(OZZ)*#H5<yWK<RQIV86ND%IwWXe-3KBn7`#q;U^V6C{Ge{QYBpqOrTg<p7~ z;H-JEg!-E!BfOV>hyD|f+b9!|xk4r_YTlt9mEyGH!RDZVae|dtahn-CFzz^A1(A$! zS;<6wv$z>5$6@KYy3px4+B0<lk3(fKzv(Wq?jZcVnA5(%WVco`-@^7<aKgVrrZsJt zp$5-uhF%sp<2rGR4vrg+GnSG8c(_TSjHCPjnHS{v`J!qFA(E0lqIA84SET0FR}OUU z$R5(gH$qxJkY3)nBfMdT1<s`*s2R-RzFvU3XFw`LvcNqdN~jSe@m{+rq+rDoUyX|6 zlLg~6@26*O{Z}x4!>PGX=WU3=G4(e0b4Few@Y)<VY2#Hig;mYi2fGx)AWrFdp_Hm@ z@WX*(nvLs;^^eVq#Ka$s<=XsziA{<Un?2OIgg4|PZ>~i0-fW3~j<wfUOfQQheY7p| zWG{%PGSZ?AQ!A^SXO22zlQ;m(nv%;qq~R~l3l7*lbQVP9`08(=9jB1gV9bE68*+hL z8vq5ct(I^esmUZ#G^Hjq1+Bugr~}lQD#h)hDt|dF!!{GS?R052vwz`cNRW1QH@6Pn zjtUzy40YEP>fBDJ$q77YpRZp<%RSOJbs)!-^{?2DX+CPN7(uVwf?j##J+bo%-gN1f zx~ndc2V6|A+5w$b88}(vTVZ;2Ha`omWomK~$SE;EAVCg5(}gvNhf_38or>GsqEIpU zM)UV^H|a5<4avjmNi@T6^pa?ucXqJ1y-#I8J#azHeyUH@7Hdc}{|RK0cUTb8j1TU4 zUlD!VwbY2_8`s9E!<~-e`f1$j55f#1qfgJQvK4<|6xr(_CfdX1cf_J6JHdl>TQlF5 z<_z`rl>IN8gBm>Ft-cd>&spl;*d-g|aQ3bK!}VH~rr{5>Fe{dpCaz@y6!B={CLGl< zzs7O0EIA?!<KsYvFErGT(8mI8cnHQD__8+FiPE(=ec%$JCT3=BtWD<{FE%|SQmSAI zZ7$*NiT`^w1v3+OAXnDbT(l2hs6!%*8QEjhgc(>#ZQgPbuM7e64hUlKG#&r)*d}s? z618`e6YJh9g{*GAq8byqZQ%XJ1O*;F#??-NP2hwV;pGgXZERwsMgJcQpZ-S~7(X?z zN?F)J?Xndlz9X_Vj*2OGXz06H`VWT1_!WAmwTeebzdx@&d!a6+t?^8F>8Fk2n&rN^ zFE0g#H~p<-H$s%=CE!cKQYBjmHV?UNsZeL=U9XMRO^yRw2SpnLq^aZ>YYsNi&pA)) z@?FfgDjPB+ZzU%W)ynG<P>A8a%o3P*=;wFMBDhQDTOO-rAy|~`JrngNPD``?nCw5G zCku8D(k_ssa3)1dNeX<w!rr0Kr)+dLv%Ea&aWnJd>Req?eT8Y2<$Ej@|ANHrXJhWw zHrfb}3T14pPwETi`Sbm`;mu{-QXb)95qDf*=S@zjp;L!+W!p3&`~<brbDm|nUh&#Z zUUtN>Let`eWF{*K>A%;3o6EcQ9R<GwK?07{kzaMzB6$Pa7q(=Lm6<l{EB`ez!dOLX z=p`Vg4oIVm%(B134}Tn0|0~#NfB;9l)~Inf(Ivvp0)-uM@QsBUEI8h1$pTPY<5i+V zU(QOKopsAFFfefGe<JMq4BI+Xq@<+e<ynQ--cc#rJsHe#Cj5PD)KEa4-Z(fwyRInE zW%O%9vvE*`h$4-6_`4GMW9(z^zH;1u`Ajp{;;m)#rH~^GDJR?viNC(_$K^6r;VoCz zeT;j_C>CE<dZt#%n~;qf?lxkJN{PBQ8)itq{yB9Z-EQcbfL5xz(XX&>Sr!2Y>u7Cd zrgI@L_tU2MY{>Uzl|3}{?XQq&RP3nu^D8r|kaQ!&{AQLbwl>e&6gCV-$d5I*w-s|# zw7-uNwe#;{qN=2VwwlGW#;8J)fre(HxE+S!rhnF+FmJ10E7N<+#A@-RoRMjJYfO{L zp2$-8?z=4=?>mFW6G!<g6jC6WfhZMdi4h^}@StG<ag1nYiR8Z@Bpy6Tuw9)$=4cTE z#lfqWVA+krI`j7J&&aVD(m-52jp7tA5DE&E9D9_n2&H2(Lrk<7QVu|hPHgmX*HB%i z>JjNh2y>W}yA3>hvo3%4K5<Fu^_6|mKrm$Q``f53%{Gpw`KQo~z1h<5tBq-NU|Ls9 zQnVUj-ziaPA-1}5^UD9e5+!wMkasUk;PhZP*Ed=5DKu=W!OivM-D#q0$9c$eqIU*0 z<HOT%I4Ecdl>@^CcLjEYO2Zuoxn*g%XT>hEN)3&WFf!?HG*2rW9rwOyKk(i{K=I7$ z9LG#=4f?8!#BJ0XG?vor!aj}6I-bn}HkP`izC-@{ZZ-E3;-oD$UW?k#Q_#!5v!vaf zQbHm6i(Ric56*nyGKC`c-8nW**O7{+(_%*8@2E{?cVDZJ*I0pZ#J_BRo%aNXu|;&V z^pA2{uZ(I7h?3=kJ3ky!b>h>UhhzYv`yAr#r{z@;ydi%;Q%<z;LH&Q`l~4RMlBPXI zOquu#ufsSGUk)jD23Q0-AC!n*eL9-@TNuvC%gf`Xd<9Ynb#E_J4S2=GmjUy!i~Um> ztyC#hwBvWu_N68WkQeoi-{sDICKtYli||jty5v$r-PQka)R9#(qIy6AtrBqu1<uE^ z<yAg4Opj{jyH&WfKHw%=#QqFK#f26QCFLvpm%8+Ues$`zZ`r4i!$1SYxE^nc!y%xw z$%2LMHlIJnhz0b8bp_AHp5|B$N2PTCdZuJ~%OQ4~<H^hNr|OXl*?C>QUe^+B80zX5 zv{th?8rcpRV_CCiI!2K~PV=6J1p?l5kMg=KWCx0x=VuqXQh)p-TpOZk!C<J9+if;) zTG;cM`%*Yj%fzjGB`j$M=msq0R+qon;&?#yafnDri6;`C(T1Ww$H3Lp*qDg_pp%GV zCJH(MY~j!3_BU_3H1?rE5+g$eau}iH@Zq05_dlSGhD`&J3?R?};vLbq6=SVWANYeR zJ_@Pk#|XQn()w^2m%QYvS!};H`%Fd|CQD<{Y!3^)f?VXPz5nm=))3>%Ez~WjUy0V< zYr+mSzW}wNDGS6W#G(|`5ugd)-ueog=I4M2i9#|UWS3VUc!>}UfWZ$Dcj<pJf#&bU z91SK9`pJ0QFL1Y%G2@a#Pl0NrE5g%EUHt}TH_+VSipKM9&-TkpYRv+Z19r@plrsu~ zon8WWiD-xmKk_bK+Ou$~u_cH-o>%18mhF4o{3RSNA527~dv&EtRxUW~rMSI0{&_C+ zv_u}&xt-^wjePrCWD1QW2=PHdm*{`$m$}3=M*BvckVxV*=XepX*IZ4A=4ag(^VB;s zm?t($Y(H%wIqhz<@)NaJ>g%KvY<GsUP;w`f5w6cm<Z|0j(I4cU^->^{tCs3Lk~;rH zaGbtuUZb#@3zCyC>-jIXfrM0oAHncPU1JS+o@k>n7CVnR0Qo;d@gi{}o`8CuszWL2 zhN7Y(5h0-sV2;4w*Cx(8sCA=_az|FUc@}-a&3?p4T&Osz2MTbq0KG%k6WFhSP(e$O zEY-IN`S6#FdyTErxDO6FQgv%T4>sOirYD)MSxfNwzZW_CU!pkW!@YpgefR{FKhCf$ zM|KBCMv2D<MFpBSY!D5WPB@UAo^EK0KK=!GpKKKnBsVuVgR50oP{2o&UkrgP1E?9; zgv<AumqM5OiON7Q==XGgWH!O{CAf;XmJ%HfzBEB9sUKG8sl(GL)8AgL;9tT*nb_uo zCd{2aSG!({YulSA6^8R<nmMcyO2m=3E*ovAHm(mh-mwty*lj=q{&=~k@xVAm)J^wY z|HIyU{{y}M{o{#@kWJZ=6$+uOWRqF4m61YGlw`{&N=5c8M9RoWMuS8o8b-2`kSL0> z=lA|n=Q`*5eE)^({BYf__c_Ju^?W@a>;AYu?vJEW#+mn3EU!u@sjozApwtfb=MbkY zezE@fC9nM&`z~3<+%7dTP=CJukxUY1p!oHwbZ`O<Y#L+lMXZ_C=17GPyV4)XXe1z* z@G@Xq#t7r!?#e(+L_uK@FaxDgDUx|4atz)ALPBT@*6%$T1i0lWax!&S9E)X@-#i=| zuHZC&2%(sSKaZh2JzZV?L)cPqF`2ab41?#LRuY#j0xnN{Fp<YP`Bju+$@gyxU&uqG z@V{q21>z{n{}fe+i)?F9Nq~Qk$n+GVG$<n=ymA!l*1Wz|j1I;8fCEEN1o2=O=FpL} zmpQfALkR*?+%+$VstdPhD$ERA{O4K?)i!A2qrHi8XBTR7d@ulxoN3@_z~4Avs34pc z2j2|{6wnc%*?jov*j67E6%|yiAP^#OsR+uWY3r;cDS3koDv0&?E>&*NdHm|;gzK1D z0*){m>%p{iF0*7?&sj_|+_i6gMe(s)y}9(VxRJdx4T&+c8u52l@+M66c@!G5;^?=p zU)?KDlH`@EUU#y9K09u{hF%BU%>Ep3mr<Hwsv#jQ%^&Dh^%I*+L0QO1oW~s(e%;gr zZm0$C*uV_@3Qj?23SNBEFF=nC@P_gj^MP^L1k4}9v!kOLFgdVc<FdQ}!&{~o^X=g; zL`3>@JO2V&)D7q!zvwrIh_YdrG=dbTq`f+^xa82?sHiCLksjhITmxDGS4a3<1A_ou z5x76d45+e%!XzUV-ngRN!|p|hfog8kar1|V0~#03eFdO}8P;u~9lrC(lL`>2aNGBy zEr9giITPc|$O2Uj;WR-;i;amf2FS|($ZIll#pfhEH$J0^EvEFrS=+|_PPwecWtC*D zQz#d{dX`=%SVvU(LSv-hx+CM5_!rjZ727h|@rEXAyvM1IpH=_aP#BY}!**r+dwiLC zcCU>J+zi(7_rG6>EK1vPW0nz4;QHH$^6m|0;>R{BH$8XI6k`e6x+tr8qsF0|Dx*ij z)48;+dUg3Hpvm6|&HxXcAqfUlyzv0T2ezF@II*V!U3CKOy|?*-U+!JjCB&*ak2-?g z#cz&snJcNvNvDo~%K^<KYtrnXf2!40ZV(F1uKH{5f}{srJE6&gdV5b7>ZTOsz!e-8 z#HuoFw(JE9%+%BrSr-gS2Jk+nTF#Gmv(Qx`8bEyrw;%;Q$;&{HRuB^~os5LAU?nvd z?OjrGnthJ=cF5<7(WymB?I8%uRq~DJ#OMPjF|irCaX9KYQbn{@viN9fqtWvx8oI4> zt5QwG-N?Samx&=DKCDtk!*i>BRm~eVLE}Wd>^S-$tIwC&@_yuG=6qs%F9X-!Nb)hb z^5HH%zmtPsSsQjnWWBcin&QE0cYl9)xU&KSDL?%IbGgrcF!eb`i9F-a3nrnB2UI)D zZys{qagrxrV#QK>rDu_67j#O9*iDyq@6nZT`ltMf{i`I?S$>iNddb_#oYF1RGoP8L z>%~wGrC2GrN+bmV%M!Zk@GL8ivUht%DI@t~Ve4;yo5__#4kTI8g1bZT_Hf03z*QmB zf&XqVv<U=kftCr5Y$z2+C?oR_E(a|_4Ek8W+5pUg#!Qf}XTH5BG=stFyN}Wa*BQ#x z@v*V(SYACuSZ88l_z+fiVav}RmrjZ27ZB+Yw9+e4pW=fhfk06}{EZF{?^Q}Iq1}jN zL#1G?p-BVTdS;S(qc4bw*&59=JkS2vBjN1#)A`TsSjsniyI3|YS#}`7i^$`b5Fsj9 z_c}6cmoc+D<1)77WX52Sl1KS9C6Ce5pfrzih&pCRECyM}mpVJ6gGz}X1TXLS$Gp?3 zfyjZ;54N+i`#>FhHLg|ijT@41HfT1V`c#$HifiPHIt-nSRdkA8_Tt~;kH_7verkzW zh;cZyh9*#F1B$p|I1SFU5m(MFzg9HBb2`wM!>%Q?GGzg2!UZ9+vytRF96$aBeLbv{ zfSZEK#URQL_^)L6G}t%bu=|z|zX6EfBJUxr`E7BoYI?1NTZ_+=?&?dahi_Gf1oB+& z%oeaWTh%t<iIlt$`mW%bRISF%3Y)CZ@Efw_Ex&5(gx4E?8x>YBmkm&HAM?9Rbv7?^ zvv%{J1O0>8+fRtBB9kC4f!Cy}GS5;2PoN?k5xyvToqWrue{y^eT$%q0WDIAaFKB=0 z^8&z7R62YUM3?>L5~BPN>LO;H`&rXMmRUD4VyE!tK>cxM{@=d&PU4LABhdsMA4iK= z`9fUk;PofnK4^9TrEI@)`q7_HLPWe+?u)l7s^2>P_$grh?MdN7a^n^t*8G_Vv2vi6 zrIBH{!+NkLkKLq`xeLB1{I2u>sBYK8_rHe3!rvpZ*+>k^e<qv`ZWX{<OeCC#8^$2* z+1Ve5XAf`r6Iuys#ar9JVeZM=+3+OtIL(;i--8LEo67~c4C;6<U2-ZXKLciw1X@T} ziq?^}&WMi?Ui92aq0Eo$FR2{Kg%9kj6B+(%S9HKgIC(bh{Q+sJdAPp>?uF;q&iZlv z^W7Q}ba*W#k$xt+iO6{#pX)HRa2DA3C6kF>G=CTZM50n;Qo6BxTnFm!s0W3Ip7hpd zIoWM!K_>N-{bFbN{)o+Tp3g<+4WIx0c5CqTG;#L$N-d{jZ_J#H`290*brJ81^!@R1 z__k{VyTbc-J=-s@#ToIW^jiwQ&noi(viN|T>`jyk{#TWVZwtP|yWayZsAmuJ{ChNC z{LFufx&O@wPuC+BP7^C#(Pl$`=XGNv-}qNnt!mv4MA17a@=E7G&I3hhoZ34TLcVas z@FA$rZ^z$SocBUt1eoge2&H&nb9JdV;vgJz%L9bP*+Tcf#W3gf)uUtvYy)yGbL|w2 zt*dqgMxyo_3cKtrsqPDYKE`IBQ^O<@Pug;3Y{^aDvS3|Ma}jq;{|Uw;o_wC{`<X8k z(S*ME-*q(tK)~-|eWWS@0V}9-Pzyn-ZW`Do5xj84@$k6znOI{<_i7qB5M%}ry-*kl zgP4S}0Uct(ZjlpZeg+b|u=NdW|Ddrkm}zbx8X%L(BvC>MtMZj6a4Cq}3&x97z-a)^ zz~Nv-Gpx#<CP`Xd@Hm#9kHKAH0+jbFqSf6;NTT2koRH|A?>)ExzWL2yzgB!pZ_IDg z-ax0BeLOQJ6@O&r`v(HyYgbL&I`;XBw>0hDgKe-r4b7RTM*gVFs#h~I0Qtkc!aP5A zsIjzCzU0pT;)9){)7x@yDhFN{fMXe80Q{|geRcgmM~y6(^g!fZzujg6G_Od`=GAH0 ze<wS8l2MQrn;SSDx7(hHrQgmt`Dy!Wlg=a(m!Nfm%DlE;sblV)lwO}*e43A&1cV*7 zmj4IGz~@EU10d`?s1cz55mZ2c7nrJZLp()Z%rA#SO~K?A;>OB&S{qU8;H*$u2vtM= z0cs`ieQyxzW{*RuOv-0!1l?|=p;`EI@RZdchvJ8$k#R|JJ?hw&$$B_q?3U_y;AkiX zH@%3{x2GD%?DV>{(ug7Sr0AQPnmG2j^#gpX`kg3sY~v`bgYbCfC8%+M!HL0l!(Q>_ z|1#9OiyVROyu9rSb`DUv#9fY?M)A9mfcT-hQk2r?zc7geCBwO{or?L!WhKRPSPA<u zN}Vshx5__dMa2c_3X-~Ks?tUP@(Q8wK#anoy^7SZLDgmW#x5x-i7{M0Jo?u%z)iwh zLa*m{{u}1}bQ0h8j?;a@)}y`lhdF-nv)-_n3v<y>kDaHG7-zM#=p~07VN*1Pg6l+` zZd8!dye!F<bFnL>n+~0D&`vBZiij<`oak(PcgL0g;o6X)ig<Wt<Q+jGCNvs>qHP1~ zbT7&SkmN8qhTx3$*c}w*cvrBSh>gc?YF|iJVb(b5dqx?m7^%C?qud7s2Q|#G<HwN# z5L8hV8i3xzHaSD<9rkp8XYW-`xf0~CPJ(A~6qsrp^uz>!HA)2(7EdtTD9DX6zW~t^ znz2WY^ue$o=NuwgYVzQ?KI7fY9qUn;5PjjVUvC8xlq}2USFa!$wcaq4Ml-s<G6038 zP2h6ec4RHk2j$T~a3$#El6R2%A%G)}tK-gt>;ye+^<@4)U^$&_2-Cnou>6nnwa12; zD9yLv3Bgkm_~BJTfFQ~liW%soffJ@J@^%pobEAu=YF?s;HCn@vUWj(K$IwfL)eV0< zBE0_fx7TK={P<S<89t}3V>sD$w>`eNt<E$MPY1_KboJ1NBl?>-H;iB5wk@Ls6c%s) zp<xHFD`ao2vlypzX#WM)V&*KKs2c`S+3{rM4#@|Pk(0Gc3%b)v2ho&E^N~iWT(J73 zf5+&Yf{MsF{d2!A?x#H%o>&}a^$S65zfH?gcmw~D<&xl0$t`z6i8RM6TyV9@=O0%n zLqLqjz&-;{24fnEXx?Cx8S-BwDp&ED0Gq~n;3NPuYa_qo5$Y@)^sa}&6&Pi#pGVK` zo_Vo73>gO5ioQfB0mwKsGIAxQLj6%vvKUp6HAA|1`<tX)LO`P%2?}+E8=>?6@-%oW zsE!=2bL`%vtROC40HS5M9o?|IFNOl~HNbgyf=v-k5z~Th3=E*r7W5n|nTNi9&B@AY zzkk>lkpqvZLU#_EvZ5%s$8jYzr9?$fqHh_yGEqx+2=uWwz(siSNUQ48pY|pXSJKzM zK?`(?FKD90$Tw0`Q<2KQV_h%Y&JWlB72MD%HPp4};azcs%Mv1XmI7L^+x8wHTQ7>{ zM|rqOy{)|%)mysn@jqYuR?73piHL~@iXI%|tNeVqKKQ^8@(?sg)gIE2&`_^^h#OhG z^ou%!g0B;DO3QfIBPfrc;8ne{Ao{r(9$<NaTNu4F15Hix>^ciL{7Gs>VK@jehIhdK z!)@N_L=1hu+>a`eS206QdJN==vO@=Wp)J>hzsBgzV3^?m=n@=1)q?$%=;i$YPgpu= z9R>|X(fAJZUVZI>bk@l<An^~+f>_B!c1%4z;FSB_z3^f7?-8|pW>$92Fa=&iTNy>b zw_<e9=!5Kg5TT0WxqrLtR5#&`Dl6VKE<M7!<V&X@WHj_Q&G9Cr%thto<Zzi#vevhy z?LK{k7P>D>M3uz3hd`(uy1#COL`!Jn775#ZxcqMK5KNtUS`Xbjc(I27gCd(zKtQ|e zFsirSA2_pRST9`Vu)M=ddaf(|?*`A_jyJNyrzh}W@THPKWdsjF&R_{{6o2q~(|tAe zcJ4iH7cND$^U)?D$wQ)Zr)tcer*&ksNLE=HOxHWO(@hWYU9~+ykgfIN+{y{}5j6_0 z1z4*Y{^b-DjunG9IfFi=vvcw)${ghLwAmQWkUu+2qamMF3H?(~!rh=GO4JucgCM}{ zZ#QMl{+Ej%7wyvMm(`;Qa%+K0ng%g<K+rxFAA-q>gesVq5!dVl{0hL69~d;juf`R? zAm)`;lw06Sy)gS6bQ44?rVt|maq)4Se?So1!xl1kS{CqKt%BKtAL3bUuYLx#6HYPn zfV6|7W6A^ieWV}YYBS?)i8aleHN7;fXUdV-HbVAYdy;MazM`|pun=zt0hf|FIguv| zN^Ojaj#f>bhO<SZmiNL%5}j7_>%%~f7?0TXAZe|H>qk&J8p$x6D^2ndMuOeQ_AbWj z$D~K%^BT*U1YM1;r}0FI<p0A<UX!&KCD^)h0EiY)x<Os;AVLCoUr(MWrk?h*Zbd_d z2&>rHySLb;;p{9Jco!TM(HB5rf9^+b5<O9SA@<@}Y)Tv&5t}Eo+~2`rD}bVaNqJNe zZxba+=ZV9Gm7@eb*;^rbqaK$&j!=pJO!RaxjB{BNLKr=04G_(qn@TCt?<e~ibocM? zMhZY+q4zq=VA4o6%AH!)^Xt5O2NWGV3k)B)a(bvTuP2?tZX9#v^N3K2xtI<J-7cIV zzF+c^rMxv-bDaBuqT;taz_iQFJov575IZuV&2p%0rzWnps%g>k>`gWGxc|VemYh*} zX`&XUI<oO<-R6au9p3=3qhOL`{Gxd8Q`|r0K-ge}3QvXB;?Uvw{!dn+zi(d_0eVNh zb(3l?F@v<z=B9R7_;J*SWFjaHfhbAMqc_X}--}!njC!@D=i<dWDk?$J;YfQ@5~;oS zV-(5ldxv;+|LU@`{{|r$ndv|*@~)a6=3r*brB6xZXZ89$Osn#$dS!a27+-2}$lggv zaJJiL#1ev0?{sV`GUSQMfT({v7}gCC9LP~>dAu!Qedsn{9wtVc3ipsjDt4nB^s3*; zvYoea7hxX(?$rV6CS)g_>J{zt(2Bqk2PTqJl7kre<<H%^vbDolBAn5ZusQ2E*S}}5 zYO>ZZz&#%5zT-_#H#OFE7Qq0H+@{RM0#5-c4!~hyZTYA37tcLWBNlm0kF=0daM^eR zNt)}W989CzA~l4(9y}ZlnG?)6r(`058-aip|BN(kIPez}DZK>f6eVymofiZaC>HD1 z5gcjk!|TJFlox+Rv73s-ViYkelLzvad%jSn`yprvf0*@pStkOyT#?I2DO)%GLX7GK z+XJayQr))DEyUb}H-^TrcAO9^Mb^qKcZTd_%Pw4Pa3*+(6-BUIy)^l_&6k~m!Zd!v z4Wr`HC+JErtjzmrbacUA%(aD8J0)<{;nZ3+w0}JT(t|y((j+X)A+nha3k^T_|67q= z{G4V}CvQLRMY%6L5-!FJjtcZ51~rB_1oc#>ixWW-q5G~n1q)yDJFAUwe$dD$U5#=Q zQ3x72*nM#bxEx1t8bV?mnwL0EVj-$k*%$(k(cQD`Q;?3Xka>R*V@ZL;;&jHvcUM+O znvqeRYoCIc%o$qFR#3Fayth{2^TRR|Bx2UlYOf>V-S6eV)oOb)p!Qif!x6%nBRX_` z0%!Hgh(PA{d<>IrDM<eeC<J-&zIj-ow|Vd$RoTaZG)D?C?%<2YA=w#^?^K!rKU;qN zEt&UH6M4&qpG$z*E2igO@2LT{SjSPH4S6-0;u`do4AbN_Hr-dgc^{5NbFzsceWM2D zpd`N^tOm(zbVwnQuj6+bhsr)*H`Ra8_zRrF+(2oBuKwe8K*5~9Ua9|rA5a%V{n5~4 zdU$}|+I2m-rHT*>v5sW4Rlv`ktO696ZUvf0nu2?k<hH>-X*KU-$-S+fv`r#X`+{aM z1*y|T&RAnEe&jkTOjD%MB@|ye`I{I9Z?yb|bmEBvA4Y1nU;VuQtS}acY@K?yBii~v zz}$pgsmTBOww056!&bxgx|vx4{#tmXhkoZ}W=er2`<<HnG<;=SfA9|QlB2P6nn;b~ z#i0k%1oLDV-5h>ZxWK$P(_fo3)GW*D;fZN{DCF`GnkoeZApHT62fnq9Qx@`twEMv? zh%?8|plE3or#7r`X_v+P22#CGe!unSq6C58r(dPu8`)))mPolg^gW7@kVNsxpUfYf ziH%fLbx_C(UqLQR@5tayEMrMS#haq&Ek(;9)M_S7G9dHF;CMsiqo(RfqMOG3=waa{ z)dPR7@b#VR*3_l`DM7CnMu*=jqd3!CAY>JuMkQ$6>CEwqm?=fUjn`ZGZnL^|65|s7 z^R<+2iwP8$k+*z{8csP~C4%|{pY}UjSgKUt>Dygl(qKv)DY8}hvsQc$pgWX}OXw3w z=ky>uZrNx{Wj`EMkL7UtE0fidk$FOPO@xn+Bu#mFstq6%B4s3w!ERjvGO|jf>f0(X zj|;h1paFBZ&w;|3z&60ktvht{4QH!uAnFTj?@-RBY(-Oe=;#sT8pT7%ZIA>#-`xJ~ zu>yo$wDt7V`RZ@UpS#kalH(fa@?<Y$#n%sSf5Q0Bfl&WH2g0&gJ9}`Rd2c48)av-M z@+van5r<=#DHvidJ8XSKZUV<~Ry)KGY0(KQLJbXt7}Tdv0E54W$9I5l*}Z!=(Qrfm z09>_AM4ASs^ScD+zEDi0J)Gy!#VRaRW#}tl&a)id3>h?gVz3uZ(!P#zxnTv-dK0%| zC*JV^g!nWZBuX?H2(@PegN~nNNowpa{jb^%T%j>>3im`zb?reFXV-)1ObBeSx2}>w zhxLpG9b-7&-wBlEsSB>kWH%|BT`PpII;>CJdiI}Y@mi0Odub3o8dTQ3D}%SgjTYdk z_M%pXmEk;V^Ezz2=3l(vTLp|W%>Mf93;&!0vAn~Ma{t_*O%2MrpS6BY`XBlEsZPb* zoISi!^XlfwosoDRlTTTb0*YH+SmR@6kHGcFXNe3he_aKB^QIW9raUqEAxFp6YLxZ} zzP$ajK5}`?w*LP03q>g+&lFcIC<xHR)s7Dh{Lx&`*=lqi7_hL4csW`@&2QfpB5_7Y z#z9*e89jrHn?72#1kQ`fszt+A;yrvw?a}TqX#`NB3yzE(QX6+K%Ib|H69k*!*k*Dj zS$jsV=cFi)P5}%B`hha*IgPZ@Nwix%9og>^Z3Cgy)6}B0k61o){=GGCFJh438{axC zk^6v>eG}&%+rUO8nw3f9`xCkD;qG;8;+BLGigNxZBia6fs+pDY*Z8wj5w!s-3`0QY zWKlm6VijNCJpTJRklo*+9$>h*?Q>p+(eqbSvGt@TE6YCvnG8n*TeI%mVLXDg<IT>Q z6`|M2wN3NQaa+RiQXt@g!EUu0BZ$EpxYAIA{^ipN39uCyj+4gsz*Yi=#Ww~t^Yg|k zjQ4N%3=OUO;VoO|2^BIdpF2+9+ogQI-nIWSW}|@GqFz%6q%}j7P4hTYYor4JelF8C z(k=CFF$G?6Fhc10p<0B^^{X-DJ=z%6{{j3iG|H(>Z5r%xWZLo#16R2BPoED!K1gWp z)*J^r(Ep<1jDv%NdW6z)yKmLQ3lqNY|GAMuYo(3Xqq=o_9s|Bg#=to$0?5NfREyGW z=Ha>;*%Y?~xaJ(7ZNMJ1?9%(VZ32O8?0Ln^H$O9Om21TI5NdR9Z)urV@6mJKCti-! z%op$oysmqp$kv$j;5?nE%iQ~RnLSh$%$EL4wGbVf$tu|zK1%XGIB^)i>}R@xS~)?6 zee-r>TVrG|!+pbAOH*f!ZDE{%D+f?8094Qyn*nzhb5po<(00oJ2T5H|K1*effIxP7 z`aX8DjCTl~aD*<KoQ<%A_R&IL^%WI4cFJCwAzsX<y+HjBME4hhqI?#gBdRU*gz9Ki z80^^OhNFg&&chdiZ7Esad1?FhJ2^R^tZzs;%Gt_00lEeEYjOpuUP7z}8ZJpPCt2-1 z7+QLPb2#7lR+j=sn+gpIio?2Rg`1n2Zfi&jmu3;`(9db_!o_H>_uBbS7HGD1?7v1Q zFA=bw*<qX)0T}{wLW;KMJ8FYHkC9R0GKgQ7>eq|mH{)R2a(+urC43(~e?3b*gO(wx z>2p-v;A`!*drr1|j$qePZZ;yyk#<60Q=3#dWiA8KHppaQx>{7|7bmdZz_86C`j*bY zMP!n>BZj3=4T?@nyY|7L^8$^^a}cHx(~E(5JNK2ja-4d!8u~xkdo2Ucg4?Y;mHD5# zms!r;H-bY(+P;L4bpmCo-5~=5kgw0;NR2T_EhTD_D-A+7_LWp42s5CYyS&{?FLe)t zccuhs1_tckJ2Bg-Zf}0~HZ4xviuDWTJhmJmD}ImS%*bhzGyL%!5K6cy=~KO%y<;KC z?vAQSJ$Ph(b?oW94Xaki?5eVoMYB{=^U%#khvPq*^^X6@kI|EoynOj&y^Q<ilf45~ zKNmN>x^sbE<AA!#KKeQq^&5v7G+r+!eqCIsD%`7|Jx)#UMl$t#C4<-)nS1~KkNfiP zzkaI<R!L3?dYiWVA#j;ZYm%5Ek)=`9g+?j#gYe%jT_XQ3?^)`<=xLhF`Qg*bOgS2= z5p)NX&y}1a#tDxeJqpPC<q3BjMc~TsTU`o19VsnoKcy*Ex~MdToz+D{bedRHDfvQ2 zsD!oKtmN?7QL?U1gegCntmi1KUXfo}h!)VDh{NGUrhqm1bAUc@?sJ$|=j+$6k$Bf= zH4HXzHRRpDf4}~~@tUaESZsd~@tX`>{%&&`wGW$(UyWy7I0GiuXTA${(2RY-y~c>D z&-a3I!ofYL_xkyCR=DD5!zSuhIEM7{gk?Z>2DD-{0|Nu*_xpQe>OMoKr+l*A!nr@$ znB`hVn)FUNIq1_~PCSr$Lh?>}fU-a+{n{%~)?5sk9s3Aj1!+E#t(rkux5fP_O<{r7 z7MO83nVO&!fX8|;G(UbiaPeDSVaWx1uDay!(C>hy9F?n=qEPythSZw;yW=%aME%u; z!qu&_58m#rC0KB)%b!;DqvOon-6!>b@>6V*7JJ;urke}%H8U|Ou&KWJv69><ZZe^I zX+sErD_BoLx4GvrN5==-9k%Sj{uMD1jlr(8<wRohdiBElLi1R-S(;t(VPfRPBqtXA znPUl2<9qk){2LCe{y1NaY?5WVvjrrrlzbSras1OrPPt#GWu=b;P0SZ)S!a=NC-PD% zeu!svt^r0{qCNFyAKCY<5?!%;sy=U@oYU1R4T@u2JDVfSS)&DDFE{mh8|vsJVY&F5 zNqkuI?fpNi@TDasCDDb_oJT`zx3qMB8>lqHd4*LzGhL38A1uWCCwI%rcD#T8S?}wY zFP}dRN;lNk59}V?0XC5`aFdH{M{G52#Kfpsc$OpbAyNe5lZ|=62$_p{^?iKgPs#T$ zKyWJ|?fPa(d!PsvKR1K*>4c~&jO#=ZE4JDE3>x0S4^?2C!p{v*hiSi-jvLm;(7kD~ z<wT@0?kMq<yX%!soR9pNMxH4{zn{IpvTS1>%VJ9pVjo&cXX91HZg=A3&jT;WkIc=> zvj|4RBO<OH<(kDtBwRo6|J1y?Hw5rmEdAv%R}%{hcsQMl+sa+KTA8PLc8PsLb-xQ) zIehnn-n`sg=#@SXuw+JhqTn^bOOC}#>9VXBX3TD*H?ap)#E6}-sCMq(yO%*bCM+Uy znMI&Ury0E<VuKXYo^s0vDzsvJ7RO7DXDM;6e@rc#=#Q{=Wurx}UFxk{Z?8KM&hzog zucn=!yuWh!ToqTsme{PhIj>E(4jYHqP0wB4r(BWM!+vCV=bmd{f(2>>(s+rJXc;FA zwyVPZwuZ_?mis{9?Bh@3$Rml%1vajY|FnrIC2Xrtd3F9RP|^XVK_;_9hx~rO-u-s( zqL_iiFSuR=$VJdPh_5LcxG<X2KJfv6InL~e_xQsP!0J=e(w19wclyKP^F=#199g`z zG9~0IPR?OHgQV0viu{8jW2X1wI5PA8+pEL7tKC(SBlj+Z59}F;eV&3w0GY3P8C_wQ zs7$`(-LS(*C%(T`{7sX`&Z;Qgsci7)lZHBx&ffi~<hJ`7f0iT%<*V`j<|nPyFU8E0 zQ&K=oG&M6jk3<iJ<O7YePqjBr&Y%zhhxmkxi-YgiH(a9Mx2s?y^0_NfzD<jH1`fKK zJHuTf4;_1WV3$TS_kEwlt0Wd~&;)R7{&AN?z*k)-{vm|`?VZ?%LEGv(wuj|)6|H7v zR6GpZrdm`pMoqfCE>XPFv&i$p^z^ieiAh{soXfabNXKR~wW0_;3DrhZs_xQbpKkc9 z-9~PqjjdCr7^Yb!&TV(~{Odo+>T>ezEonr@05p3)c@5IWVtN{9$TRcfV}#Y!>WJ@p zKVV%8UzJyh8FWJVU*j139mcaRtiS{tR%WYLl}wHuJND)4R{+{go9pW9kwL5>N<~RP z$%StD{dy%@h$S#--D27g0#{e)fO|y-E)4>x2B$MDX@j#<Bj6Q3ApMwVu!thp;!GhN znh!2OBeCQY>2;s~?8k&7KF+XH+?V&e-YTlq!e~NvRINEwdezb^N^W$gLK@R;z2;{d z${|Y-eaX4AB*0np1A{BQK7}hyj6M~ge(5@uEy1#a3fCC+Uvhd#S!(jCi=tReqRTn+ zqN%g!ZcCo_#NL3{gdd`hq}|}`BZ?%AN6DwuU$ArU*(V^-WoBjqII5oMJ_%2z+~+lT z&2aDhHh%s=#9h;@iV81u2!{54pUhESc1Gq5%nA(V@$cNgP3KXN&Li;4@7hHy9pdqu zsDX&i5{M!MC<^C&lx>wb&iS{2TM0EF0BJZS9zxp`%Wr_g7>Ua~ff=x7b)lT%S(%_< z-=_eHo!^f?Ex)NcYHDt-eGl1?k>RORr_fSI4PxUrsd0j+SX&GeC4vr%YV-ezKNUNF z$SsB_yX9P>C>*L%tb1B&6ZeI^YWq9gJEy51I7dWXYcv=QrN6T~m_6opaW8McrLe+{ zW5p)To0q1ZJ|@@QNSK4iPU1$L^5)rNuz&x4<T0;b6Z=&fLFs^aW=?iC=(z$rcHB=- z?*}-yqrauM*AG_+Gk&OZp!XqzW55-_70J)d&Gd3{83VS4)h`nJ)RuvtqaJlQAY}5Q zp#lA!p`oF4IgoDP>X0RbFB8~pnt~RqQQeuQSFfa`q^@%-b$51p!I=VngP;;vU#(@} z1rei!E64@Def#FbSTFtlgkZuD`1(UTsQ*~>j|g$j;HI#bw`ZR{@G7VMZ1K_fRl@qx zTo;zY65o-EUsdM!UY@e7?ed7fALldDTfVFk;wcs)%lE+OAaO@Bb251Kf7b8)$l;;J z@D3YYnyM6BUhxje?%sWr-p^`7*BGtwRwLy^M$+;^-s5`lO)}SF(rj0Cey4m|8ZIdB zL+>)1Hl9OqV>mPG+NDzsU$koqdndciBQ$-|U$@w+()+hy(-u~#-HPvuTwPqGl@j|x z!RnnV+xWQS*Q(_4(Us*FD~#myFV6)|1#e+53O3~^G0~1bmMn9*<ha@{BYWGp2O9P3 zgjMgqH&lA_th+v5OxoeV0}<Cq&U;^?r3I|qeASQV2)+yI*yTX-qQHABJZpTDK)T1Y z)u-U;KsOFO_B&)TJ*`DDna9fiq+g!QS>Ed>72i?@EF4*SvT5-)SNW5ja6!ns5U(pe zMx!tKEz$fr-p~=nvQqcCZeOZzuW6P%dgeR}Ec&1&EhOX!SO)11q5}VOe9bNlS4^Sh zhRd^4OiU3>Q8erDQ6IT<NwKPAXJ?Co9tN@z%2=Xu#(&2@$;rvUHi?`Iv&{rpm6rwl z_BBYqXkVlD7Q^k!&4qYV2WAI>*Dt-^{pspv$>463S@(t@mE`X34%c@-KR@e6e!-P1 zR|HYVK+^)ub_|eFGv5NQO(9w8*naE`jbS?vb;HdFrN~ZsPVB3MyamDE+Kxc#U(D~R z1m?nt9XogC+(d+Nqm;gMXKUc>$Mb+xwDt9~mBt_&N-*Y7mkmGDY4y5-JNj<3JTVvQ z;9ew6WbGh_@Rh?odQit<-XTcsw$+|c5NKp}?_Ny%&hX9ir{Y{_^lY}jZ=nxyxZ$TX zRoExzo>^4;FP8b9uK%!Rl$3nx2}N4t{W(@nCR7EM3$0JRSW0ic@9o75%go2~pAaPc zfx_dw?&cBAt=?O!OJ9*~pj}U7j+>VjKdqJ-(QXqI#NjWX41)`KLBwT126xbB?dUjo z0*8wc)Md0(F>Y~y$YGFyZYIc_=)1trd1JroFCfLp;#X~rt*x86i$?)uAbO`fnLWhL z&Q72L$D0%Ja{h4fz?hm|z9f?CyN-ySa&mIJpPWC1!Dg+aD{zNc4&`|4*n!V@IzmoN z30t3F;?|{3Ehu{Ij~*?~(m}>!1!gh@kDt+j1I573m6tx#jh#oE<WR7ZLNa_JdOJ>3 z4Jio;T7z;!fMZygnIS~t0!R|!ZUm@<ogLq64m2V4^qS$5x<10k%ekdf;7&NDe5x#% ze&YPhkYZw&{PCYBm7cm@B!Z65`i-rBQ@zlUxC*WD!vVwGhbOAef%vpbM&=y)YWSo{ zPzwQ}0RBgtSly1(Rwi-_=-a@j5%c!AhRDiRrrHdNX<lGjmo8l*xQak$@3i9&Xy1d# z8SAbx(2x~S5SyBI;Ao3@kdoq7dV9;2Jf+x$@&+|1KMEF#mC49JKYU>VNkL>mOg)Px zFfoDDTQP}Ta_q)Nu)z^d4}ViR{VBPuwhN^#adI{`fhfKHFjyVH0B7Y{z!#2)hyWb5 zU*TTZVZW&sEzTA~)6p_IHg>AR>hv;EoxBZP*@XpimKdvA{*I62@%;QJ|8msA-KW_t z;}R3KIZ#cT96b1|QRvpY%|5mu*8vI39771p&CTr`B;wc*N8ju~{^`f-8jh7FGZT(* zWM256U`0Q0IWx_1swUs5lAmriC5711L(B`6mP(hQK0_7&3hw}@>wUgIpW?te?YWV1 z=)ks*9O=WGO`y7LXlQ_ZX&$f;fClp5dT3}|yy$sp6W0Qc+2GdRrwFjnuMftPEg-)| zP7kTpc|%~nNK8t3U&HOt-z94zYDL_hhipax3!_4WXJHkW1N8`Ryc?U4y6XeLR5dj= zKDw$?n-R3ZxrophK$W`YY%mQh4~<GK9)I=dr$XDd#m2{%M8F2dLFz=g`~+|fs31=7 z;rLd5B~*ife31*Oju|Sn<64}D^z?wNZVKaJV>=Jt`U!$0dGH{k&y}{T#2^m9B{Wbu z$6&Fj1Ufg&z#E@;-L+?{P$=bgHS!}=HcYQJwi?6}7gzm!2Jf}MX;Zimi7y#Xujb&C z3h5AURT(W&58&0&@&S|C0aXu*4glkaF-eaoZ*7g1*Wj;TzaXYZaIWBP-*<F?&*2EU zcHDM!GvDAsqti<`YcOI=%*?QGjG%4+vxMybVI7@D+*08cxMG;XY8P4y$Bqd!rlzJs zrxB6)AlYXy_cM7H@OgbnE|L?fv$$1gVPq>YD|?QagP#WpP~XqbH#i=}v@BaleSJNS z2p^Hl8x;joi|62(#4%$6We(ULNL>wAx15D+TCRp|BxNTXGxNJSbh8c}It0c9$09C# zM$HQ0==`TyT+QJ|z*+(wS#xy?440#xT49|Z-dC+GoRmh0>wKp%75Cv@b*Y4KNYlBV z^#1UUeF`&cfm?}UgY%!{ie7c<)JpjV<&X1Uf7J}AY{{Hf_TE{@%*IAYR$tdTckZ0O z|1#e6oitYB$;yKE(P+Qj{0N9taHTJW-+Ci=L5##_ykgzFefxGe%p#Q{Gpi`ceMP5} z?M$t#BKDEKRK<F0lap8N>fsN^sFlPsw#TY)q%-?`<BO0@oh_<g_jrehh+X8%_WA>z zK}A|*%}(3JAsF&G>fR6<`x+V=PEnv(dE*#2(fUS@h3B`n9-JyA@%6bhgmKA&J&)4` zrs6)82&;;-5%1@9@IaL2UvH=WvtH?)mP8j7U+_Y@ij`Do^raVaVx~bPRxu%oeRkPm z3-;_`c@3FtcRXH%1b>e1*xY7r@$Edht*i^JbfO%|(W0jzEW72{9giF7yzI*pJDBqR z=NWOT<Nea6c17No&g)gRI`GGaMqLx2)g_-6T+7s^q?xlA)(#r=q$t(ii@QmlQ2d%z zyiND{j9O_f4deFj(FTJ~GEE}l&Y?7_Iz7p@#k6gm9idM8+84qP^yo;?&W(0l2`v-c z94{@lr8}9vy~3eXaNF7|DR%wqY%)Kzb%iauCT*C0S&*D0mB<mxCqGISqh`fKqf1UD zl4hYT5$sdjC|FTI#kWO_YR8sC?Bh<E57uSZI;#dVv~%!fQ(gBg;T(6MB7(Gs!oM-X z%f6Umipx*$=hcw)UP*SU7JPDvSL?SVuDcUvTf+5}p*_Xc%e0z#w?IV}Qz{MqBU#%% zZCUG9k;ARdoOj5CDB}7p=4Cb;{0!yY(G=Zp@$ohd)eaHj&b2)K&-0hJ)@Y3vBxgu3 zm1+r7wIowC^th5Ke+({kJsP>ADKzYbT49mD{Nu+jZ}=v<>~||k*uob})>eA)^tQDh zRq*eR8feTapqS+Im)LSRi%UOmgT9kc)4olD*P;Zw>!Zg{(>l}|YJGWBP%FTYNyWa; z$T^rnFS$SZdiq|Ule`=O-Td-fTGg3K-Amfm4*7o_MP_&a*-xd^RSjnyH=P`5eaeI{ zWqdVm`+Ji6r8TuZ8>9LXEFH>af~886FVe@V1%FN|wWm|*VkmXi^-N?8))7jvC5utv zh|%||P|Q5B7LFfX2$uePLHKTJJ~7`X#NAPT)Wzb6e|0C>7gMUP@(_!?d+5r`cr#A$ z3|zNXGIfmF^i54?EtlfH_@BQlEdNWr%GhxH=Sfbg^`)+ZCEX>H`@<esz7LJ9$%;|R z3wK$c*vC*nBbYX3@i3D@$X9T-n2PaW*@;NolD1McEf>x-skLn0OYz^s%skKJH+S7- zZj?1s#&&-Ki%3Usn-!yCjLp?+>3d_pjD%mS?FtnO(Rn+RAg{l!O-;gCRr{!-dY8cM z4g85$&C8D;_n{Qjm(UMSukzRZ^UM+dKC_SLD#tT3jg}MfA|E@*ZkrsV&!OwW3GrDv zmnO3uOm<Pl-eu92BMdo2xv59Vu$|@Jn_9#2JCecdLSdmZx+FR|RL8a)Ux&(ASDqH< zRaqEBgowI96%}^k*Ad_FY2tN7*T^zSTC1?p8pHDblS-<|wyk6dp=Htq10|UoYNKlk zs5CuV6V`{i1d~l0%rpny(7%wrSN&x(Rm+0YG2u~N?s#gIF3K&vY`cCOVpw|(tt<a| z4FS3p;439`c9kt;XG6|Jr3X=QZFAtc_w*Wj=7UUeHQ9`;mRzauEf;i?`zeRnRjxH& za=vORQ`N3osxQr#V#KJ5*O^*-*pK1={kbh~yVU4DsWtNQ`Ijb{mA)?F;&a-v-AQMn zjhjzjn5~&t-Eo?}`OKNT8DUywu5_-aJ2yxiYZ%WE_YdEcd~w85<j=DP{pV+j&XlGV zFeyGX6dtAg)>9JX*(}!B;l^GoqVJgu3#ELeqG-iq!y+MD(=@fga5;ir-zvUl>&tkL z{W(;2`x8!D36aGZTuSdNGni<vrlgPU;dAH+5INJcd+o5jT>f)+*p3?Z+`d(Le$aUC z-F+STYg8)uL^H*~n!?^T`Q&aoOx>B{q=nbD<Ed;H-n8BeuHj0uWv6`ApEOrmC}}}_ zx=i1H{dXOcs)Au(h(#a&g0_^fms|mpE0YN8#kTTeOsxuXcWGc{@5Qpl!u9DBSV~nq z&86<rHLAdkruS~=3vpVseb`cI>l0Q;I}%cI+a&wXEz$b-mKbh2>^0Z-hSWcSW}^YQ zF8O6sJn#+s*^WUn3Asd;I%mBJy?|o({pB)SHN|z9^hgbu#MMibf=gQBueI@#$;5|_ zh~<#vcvvy5UAvpM|9XDnBj9aD$p7zO{ohHfS^59`pZ~iPYf<+9tmAL2`aeJM*IEAm zJZ8(|`A_H&_IJ3QsoR>qJM(N>J*A+U#XEx?jW>0QT$L)*=x*c;Nf1d@OWuE?M$84J z8;;+(Uu#ioYDE{s(^_2O{V>rs5OlziK%NFJ|0e`IWud-u;nt7s8SI%ceAoEzo^H@v zyPe^t|NcDnop+WiUi#k_BpPxoYY*F^^l!`?&`CEgj!!RUyW{-S#lzGp{^Roy={rrw zd=JsB{irFxkpC70?k($?dOIf01n^lhWxcmHew3e1TOtr*r6sZD)kam*#mcI7_VKSX zJ0AIo86FfOe!##zjekSdQ^wh=dxh0Stps8@^fYrPqE!SE`--wgxpw4<cQ?9LkKGoY z>l~qS{d1PZ|2}2r`N0<=OWGG=^e@az^DRAD7od44zVKRZSL`3h<U#h|sxUa?Mil2( z%b(Hl#}exq3Osb0&ZwXKb6=hQSNYgYb<IQW1f$qy@$xw842QQF1(zNMs*iITc+~LD zig&V(v-w3?+x%&l>ip+v$_H*f@qPQ1zl7>~di|~^4Xx7s4m*DbqF*Mq2c-1jB8 z%_C@rx-5pH%l$D9#pIE7Eh($t(&8Gl>y`SSpJm4Av+?K6QH2`g)lBy@^lb`$uGCd! z8`>&(uZeKoAyZx+YF&}^%%!+_>BriG{I56g*;>p%7o*0WBb{NA&7>z=LwQ^-RWSDC zTDDEeCm;NuJW4XarLI;W#KM5mo}4~9M8}Pt>Dj2hgc!ATYp7H3@fMFtUXKhH1&trN z2~9JZ!D|N_N%G%w?KSoy!%uiM;~w9#;r18PvkaU&x^k-utexKXQMrCue+G%CxJ7@? zTAiRC`QMC|F+x7np6-amR#l@*M)5?+viS}Ls-?ElWa>Mm*0m6YH16*B9J`5l|Jc5X z-->=F)COB#Nh$5=n(B`}bu!pa$E{?vMgVDdZ8ZKxk7=t)t3;P;h>nog37)o)TWgiT zi0Qw#b#hz3vJai&J-SBvR*oH`C8|BVd=Jvsy^NPu`C}wA{~8HWHHm|abyNL0J@rX) zgX#5DN8apAP9Kwg8oQ&s`aH|n84JR4!o&Vs3+&Et{9z#LPoH!CIsfx-bS)N7TMSM) z7>*Awv@VaF5uiKv6KCp@U?oaiy_UoO`R3=DeCD|IwsHhK8n?Fj<)-sCcY14qJvrVI z_4uvsbbgD1ZjXXD_f;-FWmiyH`w}1j`<q2kdd>`Sp-EIp|BBYm;?&8~Y{_7$(30*N z7Xpdw88kf|BHQMruyHkN?cS>=82t+?6gF(2>E6h(hm=2&rqMv6lAk?BEtr(hC;Z!9 zH8v)&OmLdmSXj8geFprD)hB_ciP?p&uC9w0FA^fgZa@U(N`a}KNd$fu6WCdBZbNCe za#i~dF0oDn*ByBwzH1Pp7tOzKK0x(3&}yR1wV&f*zqCq?gV3HX$`iq7D4VdKQWMQ6 zNH*Bp51?ZT*jf_J2L^skn(trSC^2x9gozk{kBp3r&@I|&UGc8H-9c;o{95%C>csY+ zd%E9x+q2B|Dye;Bl-olR8Q1D_gTbycXU=BVQ>Va70f%q|pf>b_0ch5tSy*qs3&7X% zTP6|;`xf?1uE4i|S9ezV`+9nMnwYSJonE%}-@0~^mjBD0MUd=Ct^bnTFQGpro9Gd& zt6JLJ;g-w`oS4{!ihe2q!Q*#;T(~HCE$0Hr;rh_E23Z6A^eUg}+?7XbXiug;ac{%9 z>xj_;-=cI^Cnxj`M0f5~{^|aPlxUKSNZNjhJa+c%0~_--w<=Prv~b>T9TIqHF=sLv z1JB^bf)lCzUzRf6e*sS=H1R=h1m_(SMV<f+F_iJUmd%iM<`ivMH5eHnRH7~MPW=Au zXN`hn4}#UdUXm_gRd-&nJ!Qnyc&Z?s@WJZk=>&r5!69avlAH`-KT{KvbKo%o2V`Yq z`|1Tv+&Rqu01*Y}_VO&?Y7YQ_G}nEYnVDk~5<o7nuJY?zDU_LWELgk6hNQ5WA0khv zY|o(ORhCO)ET1YU-&BE3h3C#qgTOvMo+LD!a{O>eZ4P=Ti5Jv3mKKuu+poD!fAe>) zzUdkL@{cuKCmh?Pc_nyG#>O#E1<nGB#H0ivhXb^akB?7QR<@p)LO@ga%IP4n9(iqh z+ZhaN?AsTEmQY-riMhEsh}||epU}?4WH#XDd4)e{LgwVH#}qf8r}VYtwmRw3nQnxg zRfv_%9R?2zG8OMJ6?f~`gdY8);7uUyX}G&f9(E{fpQ0bz_CNhvqM+{w%!tO16S_2_ zqQufc;JSW(PhOaL{^;Gp#^z|32v$r^P7aTvmxO}C<Mec1sHYbd6%k$7#uyE5%6+VH z;6H)uDY&*t@L=kG>!C}zfPD8&f|68X+)*pN?{w$dZD_3Je)zb6YEuHu=(ThyOHTqt zyY#H-QNXef8paqdB!*5joK%Ts47y`5Z9u%6xu%5&q+Qe4Zx>kqjQ#WMy9gYuj=wHG z5R{4?J9hM8a1t$|^Il#%o9jS10O=4*0TW_lv5B*|tc+OK7trWi?6ai4E*6YXxP-jB zclSX29vHfB*Ta(u?@uf2*Vcad_N`EPadC0MACiO*Ki?<8L}}o9DqT({NB0YnNoIe} zQxsU)%uS3r!8U$02&glAY&xv2RXOWyO`&-dVTE*V3!M>trp%uku!bZ}-gR<uQAA5X zQ}fcId>4$G9)t?)gDD0#&-$s)`#yI-<<}QAGHm9KfFSa!scBiA`u+R&IMH@v3yaac zr^pXknVQC@q%>WB67_DAuZ1Is&eC^EOPNWl*N!B-@9Mn4u=*B*)1}E|LJCiD$Q)_M z_K-d)Oikrnrh4sPTzxm=_C)At>82_}rf;i8C0z3MTjVbOdCF^R_jKZ3LBZ>{Zw+;I zb)DvOlIG^-K%Qh_VS&1Qc5(3}+V;4#_}|3bx&<yKnosTRLkXve33pmrT0Aeh1Nq1O zU8%vbgPYXR(E-fg?)E%nW7i9eu>fIiypAr<U9>fq!Mn}c;^M4>*FAM=hlOP_@fw-s zM^~=SzWjLJC77L3M4U>ck}LCdF#D2ZZxLjiPGKZ8Kuoo?2_1mZ`w)#!HSsC&oqU@~ zuf)CML;s>9UgoC6nu`k40kD4L$PqNf{QUetCV*EE3qFH*;S&jB6o$ySlmnjJy-V!V z*apr3i~wSnkkQb0uihGob+kN6ptT%4cn|^<B2LtnXS&djsIRNDeFr-P)cy^v91rXl zLL@kRm`k?eS0~tK)|mQHR{rEqb8VQ9V2OYnQd!y6ld|Tcc9Nc_?0ulCE8ko{VIux2 z-32&#Qc$D8;4w|k0=PM}ZB%UJzB5DdDiMvO!))^I25w#-Ip3TM=C>pr?^JlnnAz~0 z_6&$ahws9vNU!-kMKW|~4&xsqBU_R<G{Ir4@GcdQhy?@eq6uso+&g$Yw3jf=m<?yz z?@jc+uq97MCN3D`BDJ00Tuz-bFf=Ux8CL@%!noQ!Cf~ek1MRF#OlPsILUjGLYu9Fi z9xg5US$;YBG~3zOxDAc=D-jWN*w-2rwJ)tSX1S!z^wZ#420k+1KeR`cT~|J}mC9gK zYkZ%Z#U9HFPmp@KWKP6Zo#_x6*&z?Y$2pI5rI1r`o(Aex3vcWngFI35VpKJe&*S4p zzB;DMYd3NqI23thWo21e4!APl`oTCcQi<qJ_)M(#YBKor=JvgNqaZZHg+9NNpWpn! zM>$&FXG-`*3p)Qd9n{p++}(>W9^_;e6BZ`q5y)e41s5=#-o^j;fzJiZ9E#;;D%Gss zbUt;eDqvZj7PguXR$L8K2hnA#Yn@4ni8<=dUwz@vcjWt3@pMCibWPK&q<@rY-0X|} zpQEwi4qW^<k&594svlZ{D(-aTwW#0X%25e_L)&U_swlrvb!s0Jz}M#~T9M+Sdu?4y z>K+*w8yjnAyg&<VjK>DNJ2a+hz<Kdh<@)mF3tqI7NA65r<wrLVSwO7Yj!pA~UOebk zxO&#ssXVtP(+}Z_gV~9uz3>?{Q=y`U>Br2>tytW54g|e=^puafx{5!3Rss1pbkQ*9 zft95P!4QMVqKO3;gQ2+F<U0>CIV+Qod~A|ma|us3^(OLGb=*#K5T@2^%jG^z`}G94 z!wc^$5;DGz?0a<M&C+P!&zlyl6Wsdc2~z@*rf1dOKiZ~lkVCJ;^7G70p`*~EH(`%r zYxa2mnSJY#h+;}DYinyuOG|I>dD_U~;p2WzpQetmb8tZE25D3=MlRCz(TqYYT4-+8 zJ6i>hahWzwYhV{QzV55W#!A2W690z$qM|4ev1bwHz0avzo<oBY-Sf^)^O-YEgCJC* zYp$YZ47G$aXV0PoTVGaE67Azea0y}1d&o}oRGt-5AV#OPGGx|1s?T1&$n1hFDwnkW zvX=Ed>FbW%xm9=ZF$Tua`UAman1WM1A)RzoQ=UnvV}UjJBlq)?VDgzxd2J8(92K{c zo982r1Rc)%apqyxF*JI-qSw+`dD^CzU<|<aHb>&OF|)E_kKrIZ4JZkaAFx5|5>%JT zjMqt<+(DUu@#3BOejN#y#FiKkG&Efi`R`=7K-3c6OM;k%wSY?nhs-m;`^XV)A5TY~ zeYZ{Eb`M27U39TLb}XCiQx^j|!pQ4zxOtTs8J|G{aB>O}IQ)$2=!x_*iwmLSx<n|> zq!{pHA&UuN?_s}lwH|Go&&O7xzdJnpQkzC_rI(CCyw;7>;~M?eruF4s_A1&XTE~A; zS3bG_OW4>+(!^-1K}_R`&Gr_qbM4uF!=5|95_#CqwOVR~bI&V0`AlCU9y<!5_5eN< zm!cOv?E>BrgfHY}WshbM0632$Zi6K=YqC1K3K6I}u)FTuIe2B;22oK_ixTugMRxCI zTf`v48uvz_r}q>Mf+wMU5gJMsi+K;k;Nv+_$l;8QLoCopMQ$cOLb!Q_Amx{Q<z;2@ zO3637;UiyH;o#Y*M!h8Y*a!Ps{&=e5{>IWPO;R-vXivI)pOE_5vPX<s=o?-PoJ}4{ z`%oT7db)KVwH;ftJ@TjBr0@UcQqdPKAJlQ+<KFrsbK}NmCnB=rT`S+vI>bj|r<qs< zA)K!oslmxxWU1bmOFxg($7Qtpl6d2WJLu)6-mtm+Zs;@H2VOYwI9;{ph6#7Cf_ZCr z2R;hHWCtUUYlGneNGCIN(#Qj~4Gf5h2K0xUS&qAQb#^*^Qi_O-EdOAEG|jDQ`ImVA zK^z%&$VKGpwSiIxsR?NaW{$mx9j+KW@!`V<5TftgzrSghr(@+9u}KzA)a3wLy-aL8 z0#**)A-}IJ8tfA5Rqe@7SNVZypO=UrJ6E1Mce0(qlrR@>Wj+PQ+($jPua$?SmlZvp z%-*|er;}4&&=y)G7UmpmMH)y&aT=9SK$ME2gvW7Yn)eGoy@<T=@-o{1i5nZEl~r(( zZ3z_(yLBI>*a*BY@-K@!EUc{EHc<#T36J|j==RQmYP13#D5)LF0F*U}m>4C<qF_#r zzBjX3etkONcRj~xwBZBsdBJl|!r%mq9sFnTw~Qg{W?`Z85dVmM>7-t?kF0s>d+k@D zr*SaRZ~W(I5s&AQte^~FefBK7o<q~Qui)#f=2CxMox0x-aKw<tf<O=r-H_bE!t(uB z5idERIa<HyXMvFfeSO+SA|+yG4pkK)zdjA8d$-rn_i-%)!5Ds>K87S``Rck(5FUFJ zB$3*=74w9kVbAVl=jW$LEAa(G#1?Yzp1>=>6H`yT(|!_o_4S|9>T7?cZMEVFnpc;c z6-95^w(hDF`XF&k;sX^f)|?qwWTopuyxbu8r;*TF+)=yf!`A{tmc<Prwjy<;jF-K7 zsT1OREWIvG+rqD)0zHoDB`9`)sD*VitAxVS$-<|E=#t|t|C!3KH+_eb9O+#m7>%~B z^3Y8Y6eEJz3$_b?ltve*&`$8jre9IgRYro~VJ=jX|KKU<NgbxGW`0dFr`cnGo=lOg z`S!)y%t@rfJAMTJv@$abtN!j-ej!Kq2YegYIUrm>;n6)7GJA0_0=R0czVb53TH~E4 z#V%hio;^fRyNI>8;}=<6#;zqHPx$;A$yCv?^Vc=$rZ$_Onrf2Yr-Zaq+7>|{M5goH zl`0(A1FX$~6b)BNU*{oW25SrW6t7Ur4h#<73mOM`^zQ5CwOZJRa`<x*n#b3ZsQ5_v zw{h@wMGNkk2!}ph_USYw^%1>CQ(!`Q6rQU%PwtlyqT?h)tr`#bC45Kio?1&9dUI~} zmzRzeKOr`3A`1ze&a+Ya-Ms6qH?R3r_5*YE2G<&USr;4M@rOi33vP>;Mwh}#`I$Ez zJA8{wlb&@blf&aGts`pxfxYITg5b2F?!&ZIY3USZ&-OeX4y1T$6^-M7djJ8J;Qru6 z0+uGVq+zb`AQ{o!-Q95MXRrqln<RBjz?HmLSXhm8#v*?n+*h-M2ctn}+wo$T(k3#@ zvGOiJ+X<ECQP8x#Sxb=&<KS|10u(GOF#ZINmy;}c>FW<Z(z3D#Q=ST|?O@-8tA8A? z$I1VC@UHV_-<oGzl{l#vH@;sZ3Adb;Xt?TXv@YR`n@{af`W<n%T4Ib9ItI$mdAT>s z$Lx6V;+!L&wsu>*id)Zihl^+Q`RhWSMNh=f8Y`OWTzJNK^_ZomW<C6KTWhPio_><l z7Yz6XcKGVnN0utCGo`cg-9SOBQ)EQD1ePD17Tid20ljk^o7|P9s(0*E9bUvCuHmAY zN^T{Xw*-6rDF{aG?d=dm!u;<8Bsfo=EWsz>o*=<>IdMYj=+faQZn67Bu0ja`Q|(1W z77Dl8_24TqMyI=<QPZ?r+t?URg731}Yk?6?YirJUO&1rj4J~!P+e$B7LegJnyD$1+ zKFQsn86$5swOYa%Q#Xhd-o1-K-E9d<$qH{?)jT&C3*HZs<cXhMI8zi0C0d(;>OXXJ z*hiKW6}=mf9=pzM%Vt`+mP1B9SMof+o|hu#x>NQ84-1u=X9~|nAw<wlh&@q;c-f9L z6Bl`4z@fD^z($#MY-!^puNz+%-5kBS5O|kYxfEtFAhFnk!6}SJu8bN6`h1Bq<2DT? zzxzrh&E?kbz9tgto+v*IL!hKiLCpR3?F9Srij*d@>S<(UKIB9Jt^U2gQdUL=>146} z)#(-6RaiTqfC^kcWTZ$(L-y7$I#?VyaKrx|O<)4SPc%Px@XUC(%y0jDL_&@X6%%$( zu})?IUK4c{cJ;zPS_l*&OJ$4J`30S544?E9OzsB{&MJXcdNU>_<WjKox)gZaD@IWR z($U)%U%h>s6W|FfNT1zvppGhjqja<k>8tK;OKGsanN>c$d$&&kt_0*mapptj=HcYZ zecgt%U;%R`JdD{o{9S87do8CCvg^||a!Z#45Hja2zDHk}+Ux|(F~CJd@z98Q>X2u! zbW6@?&E-^IKJIn*x9;ff=?i;dE`&Fpj4|BnjT5~2yGrADF_ZG6Us37Lwf*XA8&$F| zo;U*1E2b3Oz_~<PK69V$8d<kqNKN-n<WXU3WmxI@BQ9sp{sw*~K6m5h&FklV@n?a4 zu(Gh2cwtW_29w!BP*0<TI{OY1TG!5>`cX(I?O`Yu(@6*TdhoHK1lQ76aCx%tQpP1* zIviy2W6U<Ova*&Wv~l&P&bpR@7l(4?3Xvp<vm6vZ*IEV}H#0LEj5RYgJ$M$|9QIpo zW@BsM1{UfZIX^;7BkAa5cmW?Qnj}v~X@NxfCG}nfPoqYZaKc|4*XUFpqCcD!f@=kC zPv4OwQS}iD5g^$TNxAzpq+$aOtsUN@56cEGA3ZgBvWuz4kiyAiw5T^-KZ_OT*rA?Z zhRPX}eVBM%#Js{s`)w2NYIkkgzPrYLm!Oq7rPGCR_MjOE3$(ACjrCmbs@ZYS09TNG z?Fx$aSA*u*p(=t*uI#+gJ78X2XWn$2gC_+0^2+7QI=Z^G>l}B(Ti(C_#)WePL^zlk zcBot^z9>%*AK;IjCpgA<pSj|M9d<IzEG#YENVkCkb?*R%RT;P%U<on5*Wi*vmV+2J z#t=tgLBT_{bnlm)wt7cVe-ymt8>7!x<AwGKQm=rUYgW4ZbLx(>F1(gAzx-<i`0QIO z@8?{nk4BAh81z+8H0KU%m^8{bififq{BRh>qO!X1?rr698(Jz=H|L*!c7Nk}SF#Of z7&<NQ4ql%<Expac@ypN<sH4M#<9jpMrL`r4#LQbln<?702XPrUOk(feD%3VI{Q6(^ zjkP)U*`b&i5n0O$?Iy|~haS0;gNZ5T#tl1$WX$iPbgi$~{CbbH&lLd>38B5cy|c4O zBRnEf?Bu~sV#849B=$`%KH1Cy3;lteF!~1$Fi;<eUtliX*A${=a!C6jNa?n0(k@}M zHd36rC^nEX?4eI4d$UvP&6_vZBO)+oeHv)a#E7b`PPuvNC3%$n``*qG)m<q4$Dqm` zXb8ky8*vDCI;MS8hw}-pB#84}k=w(=Hgf6CCbMzL8H$HS^K~~0<Sm!j$`0JSc=E!r z8;7YVPhB1&JAWfF+b%-n{`*Idh=KZ|d??DdU@lNA;)dckN_|Ifa9%MNv>Q-6vZprN zWc|T&lhl0bhH6B^u7aZ1)Owuw+;w$h0HyImGBP0Dj_d+54Sc8`a(Z`9KO@w9CnqNz zKL3Pf@7J$iF%)R8*#+au>>_|Sgao7~H*dZfc(8_S)<xzivWr>PUPnBDXruE@|3l*Z z{Ix3<VeyDFzyDx=!|(PS+2560VKOl|-e8}2Acbp_7PjV|`?Pj0nT{7e+0Qvg8cAtW zh{Jgi6ObU>&;PkIsCUN_Rw8Lv+ppxXJf<<PD{d{G)g8;-Crj$KpR9<N!YbZZj8sTJ z8OplV)gV@*2AI6PRp~17wjaa{3$o!|koy7g-XgTIh!h=+7N)hLGl1mQLxetrMnENC zcp_1#Q7O#L-M(|@+vaBVB;YkzmzL!HtsX30!g{)W1D{k>RJ<YOQ&RHBI4KeiaHYW) z2J~uv;6Mv*!`1__4I3UGos7bcz5Zt;$#y>{-!X2wmc3zo8?`<_w#Cn^sdET0*Guo+ zyR1ftCt;%w?xKnciPks=?l4ltbz373lfotMPDF;=wkHFLIEoQ8OeSw{q>IaVy0N;2 zjzyj|@I9yQPntP(p=;?h@g6;<F`7oKhP!?|w>_ysol|__n&X!g68?4jsatKIl?cnp z&Eukk@z9LkQ(PQ-FvC!WioKYoG%lYjp9`IV@SAHSz)1p01;+6}8@-##%He#L$(N1b zUb_K{05}MHU>6O34aPhn_6>tdJy!<BnC3TcunnO!G6jnCQKiZ^i=XL~?;{1#+5Yr< zjH5=76X-H#K0zvW;47a#Eq#F^@(Un_J*?M>jovUA&kG*yxLtk<!~uji=nl0wH{I40 zQlNz}^;KJ)Fy~&`@PwbD42VBLxA%a|ubewE@&EDl-r-#LZTxVuLrB@1XxJ3lq>$Cl z-m|QbjO>*VQD%q=74<bT%9fRpQ6iF1smu}z^}IgU{rf%7f6skf_i=X}*L8Q~`+dL9 z_j$h7xrX-~Fplh#H1$(1qz}t6)VM+eokJg2TeG3z>eu>0W%S4|v(z*0`3@b<m1ndj zRkdomWn%V&NoFTbG(9Bj7;y7>;G7&%;~fz4N1N~b@hAFw%vZr+bO7OU$4LaEu(<qJ zSXA+yclGv;KfQ1cUzv@KjkmX~Wp(bC-=EMlVvNTz8U}dyPP=8#C3u&CoZ7?_OTktI zw+rvy&7<H6KHx*MutlgN*c4b}_rO+*kS$@p=_B0l^cjE%%ZZ7IMBnY`>S{5lY8=2P zqM$wvwxE)j)zlQ!mDf<2k!<7zM4JGG6-+!4bCb+1;&yk(p+7j-KW&N~E1&uQbOe-l z=FA&Jn*w_D_V(r&#bg1ra%yUdWB9Tk|8SuUq9Tc|*%gh(b(Q;j0)f<irVF$^^0dyD zmE`NS)_s}#2q1r!|F}Dt2f=v}VTK3_#m5GF*e~lu0hs9jM?U~%$X53M0Y5(CQL3C? z@j6c9Nr$UbRxR4{@vcNZr4o^9H=4rubSnDrKh`@0eZ%gB6}Hzc!bI@rL{v;Wr2EzR zi~9m8<!(`}8-)1vmHIq6G(7ZAV|Hg~Cqaf%CmY&@>xHN7&9SVeGX6vsQPbnxVMxoG ze33J`JE%A>U4ig#)WR@{`~UT~MkaDja(wF-o9Vipf!lF2x95Mi!c)3)+rSw0XK{gN z@gW?s<69o@8~4S*#_{&`CDKoUZ{v-N_`+;eSzn*?#;$nv+y=TQ;kgf1v$t*{umAWJ z;K2Co^>uX*1#eXI@w%kpdxnMcRAo_7QFZn3+W>sCS9!$ongEJKNP{kb(Y9C5*)la4 zTsM72`%JIP9Xd3k+S>LJR2mUujAJ%~?}(0$&cz6IAkLn3pIB>&6A3;AwdV?#=grYB zL0S(Q<bnrXp7z}fmNWv~IYOR%w@v!$#cRahRXKew`@ke8Cnx1DJB6+V)jjb<5Z-aL z@D>Q6C}T}`*V($Y6Tb=YlpR^HffcW+gA7%2$e05A<T*PmT@a6vo}hr9J<Ie@;;D%- zpODXws@z^!a@fy!r6N-I+Shnq>&N;=M#!9+!c-uNHG_y@K_B-IZiLdt?j(W3V#=}| zE%xe(WR9%mzk!Y6A=3ELw+pK_ZQMUCf^eMG$hj*tcRBK=@DaAf=aQj=SxkaO@`tJ! zwuNrYgcAz@rgwZAciAN&UTNN$I;$|pR$;EaheI%3?|(PE9oOZnrTgw@ocZlZl{3}5 zDH3jMmhaCwR=s7G)4D6lO_xGKGpj#c3BZZ*x>Qf;Sz8W7C{@Cg5d<3z@jMWAQev*> zU?lE*o___4^CDK67|&cxH~%+8n=fi7v}^5a;L=ai0&(p<U!B{FH#woFupX%Pkg0Y% z;4&u9F;;oFW1@b=tzYlEhGf9r|C+NGk_gu=t0P0laboTULfX-Zr+Q2`-F`bfT#dde zZV=zf0-i%)efZ4mY;DCfTecC~(ph)9#GG7slZsvdhM~+dObVz3P3m2U(HW-ORki~w zw-+&Wqfz+!<*7P35D}mZ$kEu5J<4iaCK)$)@7_Ig*e`JP08-E12)3s5!hn#v$Jac) z71=&0z1h6#uTpakA(~QCGn_}}5!=~?V0l`B7pIKuZ@e~;QstuWTFHt4aw268H?}Y6 zX<XmGFf(KFM|e>!B~YgGVZt@&l`Jb=Gmf|)7eo$Vba><Gs2w&4ufh@)yFb>8PQDoP z^bHIgR`4V^p0raedic<`L4W@ceS^t+G8WeCM%UirD&%Pb!!UwR7oicX@uelLc8$|v z;tKwuF|-BJQfmkfMlj<jR`nJmae?>FBSeHW@$zjHZFcGSL?3UU43xR~X1j*olkmXg zL<yZ1i%yHdx>Y^uyc_?gcvQ=~Y^YqKRXWAfZur<wF;@SC<>@w7)eijO?aR`kI>0Hy zmV@R?s@RT#tsnmYr>&A~T2x{9RYMthQv2gto#IqDpY_Ki2)nWggG<-ZK<2Y=LteE< z?}hSNVkC9^sv*^Zekg%5??b}UA6&-68=}&YcTdvaM>&@J*q>zW_LTqcZ{M9=KDqN= z4Wn-!UH^fNE}dmR_}b7f+0}*^*LZ&1s+)RM7^!@)ro8EUAl&&)8f(W69;_shm~#KZ z@eFS8hEWTafIL7W2K0BWDaki)4S)#3T%|k71pt$*X_Nz!lt7FiE<P^O#$=o%aEDih z*%}X4cf10QfgfCJ1k)-eZqu{cch+#eX5ZvuE%HMdr}ve|Ei5n|kgcRAC3#}9WQ!2! zssuNQ1H>%@u({k;o}B1mDI<RJEWF7eP+!$6=^XZ$dyqY!iKl^R%7MRFyE>M(<G7{; zO5G|3xsC&bEC@S2!de8&s7R+PC2QUY$%Z@=<yL5PEjK;AgCa9Ixp}(dHO{>YSr$$= zGEYS4;^x;4t}Gji!tG;G>vw}TJHrRqKR$rUG)JVj?1=63lV*>5ZtO*hVF|wzAL(E! zC~x_?jdA$SZyccq{(xCgn(wFK_xtw!dxjj}7Xi9EEeS~*{E_Epc4=@flzIoICvaRQ zd$}^rZ{W0KRN|NaG2h{&RMT0x+X1J_7H#6XGp}dF-PnLr@8^D;3P67UzMX5(^jm6W z%l$R3q2c+Ycdef>k@qiW!pBKD7%?ruBT;`J3gT88uCwmcNsG<VuunQKaIbVah?X;p zUZ4g(dsVGHk4|;+XP0PS6{V+inU4rrrR(2K917P(Ei}JnDBD2)L5af92+0TNo#dpP zoM43IvE@oB)PQVz5$|As<Ot<KiQ_kNbNS-SDi~9NF5G{O*98CD^DuOmWZ5SOI@()X z^N1KCj8cDA7hd@S?LoJ-QrQD=iAY%Zcpq;8Hfp08|5YrZIKJguUM0|m^VU{SUbG+h zV%<Nui@?;Vfg9^m@g0Qgsw|G+7!G+;WsH0GKR|O*4uW9m_{>!$=A}b_S3@|8I3h2c zKhK`e@eCm^MEEt45RWg;HNya7?{n*>@F-r^Jd?>%XjUA?t9pk`Z#x2dkdSIAu7GN! zfQ#!}Ml`+1)ea995M4+Gq7sJha#+%vWpEOw7?$;PeNa^hZ_)jHtl-@0sZZCrPqW=I z{pKWzHmuvc+a0yb(H%?5)7P^&Na}QEo}4KLTR`BnY?Tdly~xQ{LN<$mSrJ>w6qEMe z^0tZDxO)AZ^0u)~83DifBtE00wv}DNMX|jH_FQ<Y_REtF&myy0$%`ov;P{a~^V(k} z-FYy#N9)l`XQ}URG&1{ajvAKuZJQ`_%80POd~8vMAI)H=%(v{z<G%@WC(<=cl!Z9e zCi_SI3MjXK#8kp7ZA;OmA3#1s{U_3<>C)A=X8G%-gEn7UcSod~TurJMFPE5_8;P-B zRNeN8Dpq1fkC*Xe;*>_RM$YR1Ee{Qi%=N}I5?X0Xl0y9vkjxz1KMcquJv|-n*gt;) z%sv1#g;5XBv=dqYf;kcs)0#?KLOpJ#=VDDkr@GVV*s*<k_RRQ&QWW{(k|I-<2y#Wz zr%84%{F&%~@e<**>>)TZ$efTCLytx7Fz3Q4h_R&|A{4}t6Re>jm<7#?u8>A8!6XCM z>Msl|d1{p|e4OT|Pru-OkPzI_)8pXQ{Z48B{<vuzzBxT--`D1E;OxwIBZg`{E}gR3 zs>B={E3kFjobfabc24<_r`O<5?+e#vL1@BwLy11J`w@7@nuBbcHcXeqP6Q-Nz;<Vr z6kQYj)ehxz<$!EppkokSM{0$5Ipe7vgIa(o57#wypwL{6{>sRd&Onw?)1vdsI$s&f z?M?}&fFveTE3^1|KBP;Vo%jbl(OEWz?}~>bQCPHWCB>K6)rKdTv*nT^!Z@_2KV_z_ zdJTVtm$K`1x4o%_g_}_mw-+;?ME~YjIhts_OlyjA#f~Z30gBR1swn>9(YsFb4^Yv# z_2yrqE)t8zF&%t(Dun}hl-#$e$8ep%E6ntmuT=I8o`)$VKP&R{4JwyR)4wSNXYxl` z4B(6!DxHjtdDJX^QenaTw{Xqf8tnb}md^BVz2V<FI12Bk__Iq9ymhQf73ZviZk@;n zJ2Ssi@kO}Y&>=&n_j>Kxg-H&D(NBBlTiqhU`wh$9gy-D@WnIJ{Dc7$n%GFeCxI5bw zfACvAWz5~*P7ib*mFlX@Ps@i~Z1MpzVE$7qIb!g@ch+pRDqHJhiCGc%2x1`qRVb)n zkY8IW4$JtxXhrN>0{8=!(aEvqeJkO5OmZt+Z4g={ksbSH|8zFU)o}^$ZQFI8xOQbo zWRR9jYIA%_LS(_vo8reNE{vRV&M4nB@T)8TH+_!bL`tQrh5W_0PU1i^9yE~;!p?67 z`H=?EIF&1@z2^kSImEbR2|H|076vA0*dXuHTnT)U^~0p?_1m}Q3Nb)Uz%3J-5nt|o zj-dsmEakfy9U38h&-*WiXgd2Teu)HDGT)x1D7Xg{2uX#}n>c|);v%;5tbB{7d)2*S zjHD@+ggWUKU%Y-aO$%9WP}=~ZWQ`}{ML?d8Y$bo55|)=^l1O{?{m3#K7nlD>nfFt0 zMBD4Jo?`zwg;yAfV;!fH0S7{2w>)#AARfS+%zo)0sr&DqA6QAE5o{mx-{UvB{+;KW z{liaJ6;==<&%mQ7x0WVrsUQ+hd3sCOy-uo3>&K(d7UQGr8xh*_C(ydPySKPU>(vV| z7iZqNXuo6LXkp=LS$LZI{O%cpN7Z6Z90?p-e&B49F0Do}>nn1E#chj87`>*HW|p&` z&x0u%t06wIQ7{-w%(ahB_ktEvK3DLl?|MJ;F-210gT!Tn%!wsUGjW$&>zvwr1%8ts zwMLJ$vi6al(l}t?MB3Ef<w7+RdMsg8HBy%<;89Tb`;vVbt!evY6(Emb5<i3S<=7nc zs(3@S4_)tBH)d0t2910~Tx2LxL=Ly(zfvwT6)AEY?{qWi=Y$QSeUn8FE9s`>W#8-U zGaRsom5;TKnc#<vB*Fjq^hW_m4@ku4IPtIV^_w@)D&4;1it!xTlK^L6^AF(ugRl8H zjRC@4d?Kk(vS5QxOHCz)0yGn4X{ebP?2@odGsasP+0;XwFvoLZA;#vvMe7B-y=ZRl z(sTkZ8M&Ja+6pU_>apR9e-+XyXbjN(9_9rV074*!o<jz&CD3Acs<Wd{sKp$8gyqyX zOrDj`+~1t9>h7;rFhDi>ff*UP1=ohsvd2<7re8>{p)I9}Idkuy18nm}!CoeJ=z%CS z$5b%x-k$J3m9F8DuIyoR?G4>l0DI$qqM%!r+D66oNM#WbcNw(dx?y`A>)Y}1o9j5D z2<o%0Y-Jcs3QTCT{)U(WrKuW9yV(SeK$qxP7aY_M{3&fF?c%(UAmN&E86#k0e52T5 z=7JrLxj;&BF#x|N9Z@nk+PTw_Mex)&AQ4~>(TCeGb}1ZHvai%2)0DCHuxP5)55%Lc zghB70-;>@($U(G3!gE)wZGYY0bLeWTg}%t!&gf4^i5y%jPN`6l5v!Nz<w|SjBn_e# z8PE8nA1^eKSG+Q}xmcnSI2!GDPa_l5)OB;NP>y=m`aM;<s!BFbIuT+v3m)sW#g7Ql zWgw@_8AVnahmoS6!&b*cMV+aIucZ^Yrb{~;kGRL}%+ehx+iKfJ5ITZSI{iYF2?BC> zDA7eZkJwCbxncc1_T&sbu`&`h_8`6C>Gvjie}ubP<9EGQn%n+ZPt>?SfBv9}m^6W$ zk1`{+Q-bkmuq<7a8+TKH>vtNF(a!MeqBo-aejHEwthz=X%4E^p5U-U;aqeze83E0# zh{e9yd!6ROdm=I`O+k`^c*Fn(pa7z|^5Wv+>c?`bvSK$iO>+Aa=YhAOF?JlGy?G2C z|ISX}3Tr5LXmOkKUk5KD8~OthK!g%G51h|ijUj`Imi>^|H1LhTBTl(!q8BhP<tSd- zx8HbO)QS7TddFW(=p+uLieS0~TG3?*766+%#;dCplsz~}5N5w4VR-|3Opq)M7f%3< zGLAV;f*>qs_Ytd3XV16DlzCwZrQPs*Jd9uEj*WE5q1e|yVA51B@w={05jfvDL?N{2 z1KWN&Xhh3eWrfheU2y8jY`xcLj;w9_N-84t8SFvB@Ol@=!l)yixMmCMEDz`URSu~G zhzoaseA!H;kKb%ylAx~We|4K5%q9!4|4diOj<%&;^@8IKuEyc4rQnJV2B}w$(9JqI z$tEPfXe?m-%<OodpfMmFh&ym_VT>&xqGk;bLWK>|H@dS{BHx8eOBL-tI2Gk8_~bPO zEtTEv`+G;CrONq(*Y5AOW})v?pH|5X%-fME4|FAf|Bp-cWp^Qpl)nzbypq1#8jZAV zG&q$dBnuX$XzO(cRfjzb5kfHa{v+9>{GT&Ev6$bDvJNJ!&k)*^t1I<=;H$Mfgk>rN zhWWd%yx95;S$Td))mvZw`V%9AS&_)jJVFi|poYbNKcFpGLH?I)hS&OYiL&_}@2_%Y z=T~XuMNrHgb~xOLyIt1SZUZimf86x!S=L}vbVR|NY_WCZZVMJs-zc7Y>2GHqpiY^y zZwgA$FlbNF;CObM{$<}M`{U6PqS>zDGYJG*>37TpLfX%pC3=u_0tiHfgybeps5$>F z?;VnsJ?;7LZy=G*hGquRn__Ddc5IZrg5m?t7wW3ZO3a*h4t}$j1Z|94@CmIU0$E$j zQZF5tH$<2P7N-%>{AX#15IXRi+VSkA2=*ajrdGxaO%R)o_RzSD;0vI=$2>ZQylId* zJ&G#`^D+T^LChp8bL%+6K^Uh_73k+xB2ofHFfEz@&u~642el@jgdbrX@E|^Pm*fxC zduBgn5y5%lz|c~^2Z#6@pF^}x4)TU}?{>g=gR>-7xHLMGy1eYOzH|v7Z4uyYWjC#} zdW_^*iR^xm1+=jD&SGP{a&x-JLXUCe=k<k#+;2^_)=zq^sc7`~BQObb9Y10!9qHHm zGLBdk<<`WC%cQUkhV7lB<UAT|oeHMSZt(;5;tU!fO60r0h|-;?Zc3;U&=1*ab}n`F z_7)V^nYEnfV=4;cF_~_&EVFU^$PQ+`nWD$sE^$k~01>BIRCIOZS};3e^#=vLt)yN~ zwwhnjQ4G(V5wqGBdA^oOUu!$9RAXG<@DK%cd5s%Sfz$lwoBgiq99m}7&TDBmW|W(@ z$Io|KyI-wbj^2f|6``P%wz>V0U!^Cg@)(AvCRD6JbCYSmuCMNLi&A2%l`(Upr%F7e z!}82TG0XLl9)nlwAo*KzsYIy-so4gArLR<0&2vRJS)59mPk7IAuPp?xDh<W<hvbSp z%U)^Ulg2d$RK69uCvb~+HbNt)*B2;r8PLpJWplDRg$7M|1)(Pnf167&mQ-3Cc|G{; z?LhqT(Qw`A;{$2RnuJM7Q<wbE&E?&UdWsH@{{Md2pG8PNm*m1%J(nhr1YWQQRpYk{ zG|gVbQ<ap|P1Sw3u(Gl;HcrpZwm5sXE#TH6##c{kYq`IWTM6SOMeQS$u1ZT&Ty8Db z<Rv8BF+AYuX2)`G>}NuOEyJcHFk-`^z0d#|uy)x+g2Q>d`nSj*Zw)p;8{_{Elm+MN zIeOD+z*bX-PtnS7in&F_OJ8yyDT_K*|K}UAt>U6H8UaY4Zo56Wb_}VCS3Y-hG?=)B zmOK1&Q-3v)(J#QQ^u9H$JjceskO5?qQeEyjB)#>!V4`euX*qN^WLQ!q!cLp|Pmnmc z@)WJJ7UFgum`pHev3qf>aCFaQIc`tZ=cfM!35RH!t_}1-#xhpJk7V_fiJSSNso2J& z^Nv&g2vWj?R?vv1tBN_YY*d@zgqjuXqw=NT+_J|l&%NOZg*_UBy(V?CO2ZyfWGdyf zRIC%FGu!#oMO0L>O(Hm6f??V7Q^ecH&Q3^HW^+RE#pIc8CAqA-yx=U#3**9#N%l!> z?iZi*8YhbzKMvc$m6APfqIvuvdDSJ-sVXaElMd~pd8wYfH|wuc<)`U){jt=A**Wx% zM<j$8AqOUjNgXP>s64=*P^U{i+ff;PYVyuOIXTZSlM5<-ej*g-M5bsB`GcRl59l|} z?Mv6@xo5*xvZ7{uj>6l(uHsbRRf(%dl^KRPoDQ`N6I+fjKHy_8+DPkp*Hk|T;TE4V zMXFcjw#qCWAEkqeN1`86^A?1k;V2OqA#jg^g3l0-__^nl4=G9nNBpB2h5=%fP9B3u zsnPutj4Z76+}_*Xp7Aub(XNzap&!)t;F%MR@{=K0!zH=qAChWnYHjPe8$d%L*CdiY zDMd}HnLBX*Q9Ma}%v0wljFY1FA2&0*AeosIB^iF7Z_GIj?<v8cg58XhtY6#s`HHBS z?(Y@3Gf_1OI25oe1apD<j*PE|DStqi=Bk89*>2>o5gF15V=Km{o&Uf!>BiC=toJ;^ zDrPJNHtgEnd%b{0-l>g{KHzRv{oHQAwEf!dXPeQ_kj+$&)~)<sf0O88TA!_%D60M9 z5Xza1C*J+q7#~mXH8nZ8jgIcqAzA?~Hd3JuFl12V#GAYh@WzIfv>0C}Z}+5^9bg(> zi)TTT@fo%ld{)wA^(jbLnoal3!<7JmSI+i80Gxig(x2b;{j)bzo?QRtS~I7o?T-eV zUE@NltiLCeh)P@8p${9w*5OgvbP$G8x9-?Hwy(d-d!EqMcO;aew>>|_4iQ|Gx&)=P zs^8+Bx~nZ4UE6ZUtyvu(+XUG1B1CqQNIFJW6tb&vl23}X+c3iV276`64%!9^DFfl* zNt<JfgLAgew|}H`2yWu+Oci_g4>E+l6WyfD{d~6#RjOlqFLA>92=gI&PR_uTHs75L zCKzGIx`-B2HOFc;&-Te{PtkV`vXzwL{`4B0Ax^y6$D(OISDttIa!z?<xaRZLYV1A! z&M8veu<=Rq24k>FkYpc)f7?_mo7D!`4<r!H7LvPeTC%*4u_)bcHF~C)3XstO4(ZK? ze{2nOuNXq&`>VT-bIUWTF<H%{S;LHtQZvQ*=)nWH%{UEtp8p&#jkR8<d>iddmXvTd zh3Tfi%{LE#F-Mju-hz_+_}Rkb`f28u=SBAh2oXF)&Qa`1C5;9qz+psbB)5M*-Q~!= z37-(?m7|gyj_$Kk?ChM;S<k&hOV~pGWeUb5);HCXfO*k_5_8O3UW6%QgR|r<ApC9h zVN_^@3AE}UU|!qz7yccMa1FbSkT;{-3jM0K5$Z$u9XgQ|r`Y8(`@ku7wV{uzt|7P7 zHyBGVSy}THI2#V|Y|%asi6wU+Xf}v0EPMdy1lEZhJh*~;=tC37{U_4!5j3P$W`lu1 z7mgViw9>ySE-mf<?h1uCXQ{(UYBs%e=^~k7oc~{l$`iW)z^OS@4Uz2~>oR0w`&c6P zhJJ0dyc32^fTd5*Ii;Hq3qlSMT;49SAnBAIH2f~9cbIo!^Nkv3+Z8JBh0WBRj=GMA zy*OUYJ!Pi~sYDB|bY)FShRDvUtiW!o+>t>IiJx0d^q+|RlD@+qsG)0OzmMXfZM1`` z!z6ZB-jRl!FJCSwdR4jt%?+eD{k+$MU`YUwYG+wayZyHwBVAZyXrR@D(muM;iRTB7 z9^Y<rKwawV`R&ZK9Tm|}MRkNTm*1SLV9hw6G3f2(HCs~~!gDo7o7$t!dC$yCDu*c` zK(hv%qYomo%j)2Y!&`tc8u0FB--kR}88lyQ9M_o(<=0xi@XP%;K@HABg?;GKYO7M| zByCLG(8M=e$KMbcZQhJ=;wBP#EtWvkW&Ae%c_Oj-sA$!JCYqP4yPp;7WztJ@rtZFi zJ1N0^cPSz?k@_|Hn9sbZ!dhgt@0!{QS05-RNX#DBnTda>dD<2^DX&p0qP;k%sjRU_ z$D42C`9E69S6rTd!le6yi>|hLTMMrF=076(6Pt-_KG;n~M6kPn7=NIywjz6Vr@o#y zQ9xBS7>B)j=giWH#eIaK<M$5-_XHT(Ql7W0tA}8rs8YxgmaTfTBV95JEOHlAKEKNS z2R#rFaxdU#s7*vjE>1(g2bRCVB$F<Vm6QyQG}GvFxypgGNgzK>x2p<u(<I^(0T{i= zk%uDDov5?>U1lL9st02-b|*P`2M+075=lxxAk6X|&VDb81+lOWwRCXT3Y~U9avZlx zDj~a)fCKAjLEH`&mXW)cs?k_RrHeA<i>pkDUN{|nN<_qQTl73;Q-sFaoa}leOQinR zsoPl{%mR8!5F{-vf^z6DjcdGi%WiGW(1MB=dHE!VdUZQK`M87x2Ww(G3stwn#qkfX zwgkju_PZW^P*_wHIyRZlvds7H-<KBsb73AxQbvzY<2@<>wB1>i(~i%C;RA>>7s&=& zuzrUl<?1eb8Orr}j;(=Y$>V=ieuy<{9@tZ2Gy7g_j+%x0E6}(4waGZ7M9)I-P$k}Z z_V5Ag8#^RBb~HuV>sw!FZY)YnKN6pBc}K%;SNM}3Bw@2E?NKF)PyDQfHhS5&t^Qmy zc_Tr;&>YKj^GN%WyGX-#)49W^Dl>N(JaWX>GHn`kTZ8j%US8O`Ek4NlUqaCrqs^X| zSkorV?$XHIK8bN%tK~?SV3Y&h1@!{@b;(qxoJq#)Lo+cLNNSe{^z@%EC#vjO4K!F* zHsvYPJZxg-rClAkDls?)<w&=5pilK$0^PW$$E0y8{sUXXxpP*)^=d*#hjLDOnQV=* z8=bglvO`lBc4Qf!LmW5rx;pRBTNqL~knYVO_6z5B|7L7NUJ05pMDc@U13f4PU*|$o zs2`}7^##eJP9IEtcKwstp+f(du+3nW!RKE(qXLNmWQsq3{#@Dt3H8!(NC<0`X6YRr z9C)yysys83lis%W1JBf9pM#&t*0^zSa!@4xmvz_;UXzHKB<3oTbrWXY8?eY?x=F-8 zz!Z&`MN@2P!w63}Jnff(Zi-&O>E5$f#$`ZwkP(6lsQ8F*QKbF7^bK9zdn=C@wRxYI z*sPy&rv~$%u<>EIcHCL)wvL|!9TlAXyz=5Fj6HBia%|M>cKB)(K)c$-t4#2}R~cg6 zr8yW(#FRKhFV>}Bs06s>+%M=DgWOB0+7`S?Hx8rC^J{Bfp%Ko|7Ly_;ZW9<KI6ts4 z!~O=ly~s`?Y*ji+`kt9iwE48~!l;8Q$DGR+s=ed6FGzlljZSenHOZf)mk^UL8z;Rh zU&B$nM`nCH&jypx`GpTgCUGx^le7FIKUHZ+{3@4RP|5J|weM#eJRW%-p05$19=q$6 ztHHyWM6YrEW~^67l0dglE+x@Ht@|4<l8bRqMxD4KCOqZI%t;bX=YIXXq-pv5DAR0L znkij3#jPRb2;p1Ax)gc&w>fdY&qc>T`avx+oYBuSdiI=luLhk)0;LOfCAw)u#ppcJ z;9QA|&h|R|QDySS@1ewWIMyfBbCfRk@+Q>qlEgV#lN051rdDQrza>xn=L8Z;chF3- ze(ZN_!pFORYq>bv3c{(!P+b7gj5D6P`tN5*Fof{ZEnZ!+9AO_WPCkgVX{fGd7ftG4 zTMDh>*qV5QYQmcrdjigtqecRNgZLCpD&$h#%$IA80yY}p`N0mDbzIdzkN0cCCusWh zP5^sKXI!<nR`c?3b_V^gdE&$g2zKuB+VRoZooy{HA`6qg5heEsZ*`(9=MeH|x8=4y zIpRY_9BA6d#71hUul8df)m}cyd#KDKsuj%#m6Wo+elX;#0TnwYGo~=cykd=2lr?nB zoDo^u8T|-OweFw4V>ZdQb=&%mcXu=*>NkGqtzVL&0`r^!4G`9XxEiS1cO-#Ev2FWt z3A8Ud2$2gY*#Ny?)Z>65$`|*+5U2sM8Y(344!4wbBgnPQpv$~e*G}UA5#BAs>}Cfi zH<nt`oT$rk@@|vT!4trsKz?F3JoWwFTs0395RVlf4{a@pFl+7Tyz|m0qWvkh0~V0C zZQzHd{*Xf^5{FCGy_`PZw8r;BP;TXSnZbBrclz0M4faTmx)FCkySQ32bGvs91Gtbm z=2&s_=FX5<th)yc)0Q43&GG?)>~zu=@@q+5uQSrp+E4qzHgq%oCyYY{8vJkn21g6N zw!S}n@)mhe?W)BA-{~lq0k>;;H)x`F-Sa2%aXqYlR4jyJ*Zj4^LY*hTmZj2Shf1)O zU+%J8lE4p51OC$y8ElqIcO|!r7+7tia22CHD|~hDgC42-xr?Nr8n@$~#*es%49{Cu zdkW-Gy^RP7@*|#B_T_Z565|0IDjs3y59dePH$)h8&wBcuil<6k-tW{8VOD(BcKJlA zKKcvkqXVapiho%C2v}=F*CVDxQcaw0!)J?HOUt>Z6(bZeF7!}Win8^}h;9PL6Pv_N z!@pk+F{&vF)Jo>m;hiAjTbK4gJe1Ghb85SM7X*=*{+TW^Jl_>Jq#nKcR8CoUy@#pS z33v+}mY8Qi0d*WPv$A^iBJ6@2ODe-`a9_c0*Qtb6RRIGt)Z>x5U;I}skzlvlB(XHE z_k#8pWQwnxNkxVbF>Bbw_6pYU%%<$5zlw8UtI_QD<=j3+Lb8=ZQLa$cxP8IM0rXd& zX91+V(9381%9!P<RVyTuST8G+c^p!(0n#5|<uUZNU<Ae(ZGCbe2uF7~BHGIY?6&~~ z2~c=Lywe~w0eCy;j$unyBqsS%equ`|&?%DkKV+?ve6vxzfyWxN<7e_i*MTtB_c-^e z*hS&$%zNt!kUk<d7xAym$Gyte*XNa?7z6fDZlySAQS8R9U(6L@Yy}sobn}F4|04`n zJK>{ev-n2nJ)N7HWeI(hG8PU0fzg7aZtlKrC4_c1u1=Zh)0^ZBR0#biZ>g`7m;FCN z9P{d=Ir9aJZcz8GON5HcJEl%|YCJ2J;YvGw-<GWbpv!l7{!X8w4`htqEp29RuAw){ z^iGh&DEX4iey8{hqq#Jd;tYl?ed)&ZaCV40WLfS9dVEQ;x9Z+r(Zku8de7jAzI<r1 zOMe}C1vVK1_K@X*vLwDF=pV}r!{--d<WyJse~`(w1l|=1r_>Zv4CkPyujOVDHf5pz zsFg1*PTBM@{0@C3+o%Q2h3HX5bLH5*Ia8OOEMDuK{3AYD=TC7<!~8L`c;N5VJ>p+0 z<#`uE29mToTh*{1?Zf;<X`h+n(L&pYq8Ke=j2}6ZJpL?#Hp+HY`bP8k%pB9VH%zbj zb6gd=%*lxz1DIJ*7oR-29pyJP1!}z@1nBj2aIomJ8xwuY6D>F2Onjpi8KFuML6`n< zR+@9wUM!M@ejH}C4a_d+K?wtlv$JQzfvTzSjy$UCikT~JnlE!)Bg6=C*BJFb&V{E^ z`#ye_(UEp69dJD4_K|}m)g9E76OJkX!*}rg{1)O$>PmSdop^SvMpjg`ee-z7{LbpB zx<hdurbvhe{132wkT5Cpihg9evl_u}VGH`DSQ8z+3Mh8ugh-l{*`pi{)-~`!rNr4= z`suN8Y53D6!9={q@mLF<GXkcOY+W}+<izcJbxyLL6YBIh%nRXiD_gFPH8*R9v|Hpu z&?6)y1Rbg2-S0Epm)**rru_ul1R@^VRMsz>DH@1y-fWS*uk)^t`KtpatY<b-_NfmZ zJ+kBIG?&7XIlOpMp{qat(&qM$hBF9bIfdS`J~bK>TT5%!wY(^B2jUQ%l~OkY0GIdw zr!u8V*Jf^gf`cwqHeg{<mFIJ~bhU5Cw2X84i>G~Yn@{2o1s7ksxG@27fml%gmK@=q zBAjtAq_|FA`&3HlmA*Aex^mTHET$K2^;{2o9F_Ee<Gb9{)fs1Rq`Hn)Ca^whq#xww z$2>}KTL*V}-6NRd>j6-ux_;dj5Ut8R5p}+n-GE{tA=Aq8!P3^<%u?kY*N#|)3XeAN z7D(%urgpmOhQG1qR}yo1P6`TxEr(xbe;|d!1>yVYOJAio7<$qzL|$LA_^x}5k}i6m zfQ!e#g!>WAZH&9-=V$mCo=>%L1KF_)PH1avd2s+Po|7|G0sjqM#Z`RFd4`oK`*W-n zx{6KGlaZyZa>Uv66M<_ZqdlV!vd0Ze78QD~Cyl$2=}Dhw-(DIXpHw`*q|2TVsJd24 zWmzQj<57NmJl@60zR#aN?P6ntAHN<NM)c47Z}$_qBfg}+&ku_Gy`NYmH`7+?)Cubq z4(b&8zhHpYlcO4$qO7-F#{T?gE!s*YnfgL3!eqx~vTZUpSdaLU+b4utb6GPz@nRpe zht)!W2^xRJN8jg{r<<pta?PmBXeN{#4v7qDLFf~SV3i49;4G1R^)vgRcdf`hEP>+* zZ5aUrDP5MhFo8Z?uzd1quFexIFaMu{#I!EpKr@~YW^0_|?{$)m-K&k`f4ig0(1R?z z{V|t@tsP~Ev;YS=rM|&)dDnSTyFdH~%ez$CUe-dD0vEFRpFuC^l)v&RZgW6jgaorn zC8o4!{%gkn2%<i&M*#-M_>B19*aP_un#u-j!bzN`>}e;$%VUG8lf#HP9MqeA5oAgt zLjTZ_qy}L1aQaACQ)))k60|YCc=+|X<2za1ZN?lWglga~g0TPf>(fJ}V&*1IA^{(M z+cUe9-D*MWzVvq^Hym3*obk?Z{5x@S+x<E|yD$#YeaV`gg@!9fqFkjtt&g7hI_`Ao zK^Rrv4xJzMk<rq3s@N_-Ci8+DNQKPyYlo-y(0^8vTj^yAuhYkS!X0?u5i{>H?cfKD zV(Dw?f5rMJ^Nut4mF`eGZFiB4ErK>&q)6`2j?@~qN7Uv|^TZLrv>;Gyv%Om(2{Uq* zydbY&UMpQ^l8BCvyHsqv(2M48rFFV3Cm)+x-o5B~Z|of~z9HW46r8_@$M0QK`LIvo z(V24R1fld#yLK6Eci;ImMK8Its-l9}WDYm$L%y3#t3SrPUv0u6hfE0PMMpN3q;}8q z!<1cD#+r5L@1;$J%U9R0-LEcIs9I_6K?{KF6_{qsk#W)2M}&PqblSG<C_T-Jx0Ih< z<TU!3|Chbryf<@ykIql~<{p1szG&W~yU#XQ7JbsV=v~>sC=eh3Q2*m~lm~4vUa~|& z15B$#r?sy0mS-U(3s4&27l$UBmto>A{7P+pxf=nEZ=FMfu(TpKY6fHz=8~3ofta9H zettoIIyj^;UNvGBG3XsW9A`YPa|sz(s0bqUr5q^!GQP8;hxZ3Qa>PJ^vn0r7XMe{r z<O!oXx=%+(kr=)&LEjRB?c}UoONZm@tY2)cFDmNz`!ewi(`I+7xsH+1+roq>CL@7y z)4f||zSjX*kcyP4lvN;>ED?(^)Kr*M|I7%DLT2ACp<_235^wX5s0zP7rQxPKN+7!= zHA?#IV<??DBJ<J(0zkfj?7gf@<;0cWpAw&#=rl$wh*_~rcJ!<)DKQ->@Xu{A(A6!? z<vZFeHm)r^o5I$eQ|#4G!gu}joPCmbTSSh3(|PN}*|>nBG4)sVeG^6lRCls*+RItN zR<v5~u)qzCv3t@bhRX~b#Px<ack652g^^T~#MtB#N|yqEsm&m4G}<(^)GJef%T%4l zxWhg)Cd#-`P+DZT@{IB*O;g#~UB}Da4jb!G>2E(DDq`|8=^}ll`}=ErlM-D07d2HJ zb)N|FnHrg%Nfg(aQW5z>8}i0BslMON34-6Ti>#^@(PTe_7zRkw74K`ZqgQzKsV<t7 za8{eg?4H}WCQ4=a$Zc+;%wehd_AerD5g<h|aXK|${f7(mEZ@46d8xop(I!&OYntZn zQc6OUr>E_qVc5K&<3NT47F9lmda|G(I<P6&<-Ftwg$754rgH6eIwb+766Sm%V*0OL zf1K8I{3KMbuh;8GTCVjSPo#9|e#^}Bg5dH6l#~L~R_E67+dwW0*%0xnx2?amoll$i zGJ&<Dr_9W{RscS+zWsO<evO~xY>ev2;^=w@0tuhA1ODm|YiNL@l<<enjlTVBNaYW^ zK8~LwA(ueKDLr7^w0-ff`0qg@wWl$cLpOeZ$vwpyb`nrJmU0Lj09!cl;d{izjkSwI z2Yq&C6Pw3xv#)-6WirlY&B&uTUHf}-()KpjQGx3>gYUMWJ9Hr?qGjuxEp|fJIeyZ8 zZ$ycfu_bo-@%a(^k6d**S2z=*&eI>g6qB%`&qSaI=wzY8dhWMmOV=$m5KieB+8HG- z%NF5zZB=c<-X;lQIDP9%8K{J^Tr%z{mjFH>CW*?Q*o&qcH)-8C+{<eGJl{sUDTzLA zltS`!?tGMgsJXpwLXNmeH|Z=_kCgMRr|tEwpC|RVCj<Mk_A;N4M#F>EWU_Z5;OmeJ zbxftMVJ##?efo(|i{|KhqJnoP``kQo!Mun{jC<e%T@kx}^>QKI0J|_$HqDVrSoA`) zDcYyRgL-{jWo0;*k@wa*Tc5`{Y9~zaN7uCyw%*Cb;&E>Yw)me%Uqo21-uWmeqBUrk zN}kouaZjKIsD*oc-xjt*=Yj!~%#~JVEb2tat%xMdN$l}SGTgNcL2%i`>*wXKUSf#d zug?wE#ujZl;TH;8Dn65gg)OW(;O`0sXH**YAGzG}b@6^X&1HspE8*))J4vs|MOkN~ zxN057-ouHiNcLe3a0*DK2QZ41l(?Ng->mz5@JEz@n)6`zFH8HeSiyT9Y8>}YQCjTK z_&;j#*i}Jxnb}WTX0&Qz#$Vw48K4sCzeq@h*{dZXazeud#|rqJjKqvs^pV#b(avJ} zSm~uUQ$9T}r2HE1;INQX!6GnDI#XpDVn|0?1lUh1zf#t~NPA|sX;lC7D1pT%Om<LT zWQ-2|L<j<;3r;V7%%)wTNfg8coi6W@)9{x1E>Me*D8oBxn7*wLBeJ0B0SEWw16;W4 z5_k>n4zh=XO1kKPwOrSt1$`7!hf4oDkw#aC;oaRWEG$(?oJL}09oE)&4GGFcA91D! z`%-zZSzG%8`v$QH4Q2zWXENi+?I{R+(mGLsMOGNta^6cjjR>ZU0iln!El@t2rSG4V zlF~AC<p}G2R(EO<)qNVV)=lhYPfz;aUX|Ex(lP$<;1Bm6Ts<PCDfgimyB*c(vcOgM zf_QxKHZ9y5J3z=4Q6$tUmV13V7HHR|I`Mh)tN!!>&cI7l9kzm5b72$whXD2ArTaV4 zbOmsiTr$lJ)T#=IeiJ$7czE@fEJ=aE_;@63RRi0prUBqjfl>x;752En+)CP7YJH-O zrBer8$7?ejW%EYwjTuI^`PysJT!__Z8J5f*>g(g@E4vW+rzhFf>`fNa%W&(*ZV}3r z{0!T7@xHyX@c#RJRF@aANb$<h!9Nrq0rA($dcLBSX>!q*s@))6Jih%resN`qqIvhr z)KgawcO_xb=2q|?&d0}78kvPsNi71z${ft1c5fVc_Fy2|@@pdE*8c{g=ww!piDQi( z@qU3u@;A0zXKOB<V2Gd{N0x~O+8qGP1_s1V<MeWbNY-3r_Z$;C^|new^Syh8-B;%W zBi9+qh<L>V?|0M%R~8P0uoS$qWaqHQBt$Mw-R7esk~toz*SX0U6q8=`PO>H*J`j znZbQ`BQ4FzCK_H#caCJ}1xkvGE3B^bkJb98eE%@1=(kV5E%<eQi&QqT0tKxkY*ere zv|y<?Vfgd^F%5jj?1ckH_mzk-2qSMS3(D9v{FLG#Pc2S8fTfL<!*=>NfIuZvI)@4a z3!x`AoXmbgD_{kz6x3>}q}6p2`uIw@P7m{#kBwh%XOEj{FVoj|;J5y&F5#t^wDggn zr=A3L+!CJG3kp)<q#KwR>g)WQ0gGZG`B9zquiaqTskU>kHBs{!N4AB_vF4DiPiC~b z{Qbo2A6pP*lpij)NW_T%57dX{xYw46$f`t|(p@=T{{5W_j9vgZ-TX6ha@?h<%q(T- z?&$039sVjP;Vh%fgaD=v%`J3|QnUn2*R*cRnUnWBqocsd{fKoJNOTVY4o4%`J>fD# z>-IB_i6Ay)L}fTiK#`$Z=^J$$=-(uHVoM1fD?gfFg`(284vldg8=+DchQ#PP*`Xr9 zT(IvHZ@Lt4WyfwH(2VR-U<pFEG~rP1iDHrSTeP0dP|T1!#H#oclQJCg)wn4Z7TK46 zU0RSFNvFt|>LY@~+`s4?+U6?{%<p(o8)NHO+}vB*iFb!(71STzV*DMdRlCS4<`N)u zlYa8nqPGE!8=qNHK}`+EE0)W>ujbEI6D5qjub9Po+RiVfV9NMWzKb5;R@o(C8~J{5 z#>czQN*BiyxdLdNhBPHz4V<ZE4_<k5s?qzEN=&;g0x1GdEwj6l&R^=-wwKS-_&NMV z@Nk+RKOV|5<A1feoqLMEddRQWFMg$&;Vy$WG8}ea&;O9cdz)Ek&tX_Gbgh2SIK)~a z*l)F|VIYtkZ<CFf!n+^ObtG$ls2`{8GHl}+DiSlW&^PwsCcx7zbiA`a#$#=$z#SY4 zTyb@CEBQ1T`%bB381w-4X3M-sXwXlH4O!o6n4CUs&m3piG>xHg0Jn(%0!vgfysUg| zE)e7M2&cw<8>=r?70x$y&v9*ra*Ns4%w$LNjLhq+%U=3++H14z64mxxLsFr~@+f3n zL<9_5>0g0Prm)5XA^4^-Sxsdls_gBXHvqd%M5-2pNqx+UBT5mCM)_#%1I%0lwz3Nq z)=&B)RWCa-XC|7eUS^FST5IBvRJI!hi!Li8`_zB_=(NkusYQT2u<2t>JFzbC9~F&u z?Z1`wCw7)CdiI%iyF0J6FTb#F-$Pi1T#aqE2E?Bb5f(PqqAqfRI46D@{cGXX&Gz`P zSD2}eex}5L@*DvdbZz)o_ONqtb#cF#we#i}%r`Km(hbaYe7tHTyTT*8Ud+*b;WssB z+)I53>teex!T`&s>A|TJ_2+Mlq-B}4Q7mk%JIS)`O<xL{^=3zmEs(F>_r|ls#mSl8 z8m<--Po>gJUKm>5U97!2@D7%R6QgkUiSgQ9%shMdz>W0yn7F<z0p};gNEbrn^T~$~ z{pdYIAsU#m+QHasM>jw!o~k5r_j2Etc*?`knN>(FSEfzr!plUUqm<8MXCG;a>9a~& zZeXu47FFJkfg*WJTh-#?86z^E?W+e;ID=+Z3ubJTqXoLg?;X1IZRdP0TNcx5Q~rU_ z{Z~&V{I`FK`_Qxgg;N5G@!@ht+rg9pGPi%Y8WbzhvX#r&g`Ccd^{3xKu~P?(;>Ner z>CJCnw-14cna$UwtGy>4J<i1?tmG2iy;}eY4YaRvYKBxlg<w!p-bHuLXWQqm(1Ut> z6J99|t_%(sEPxalm$q-3aD0NzAMg4qCRYCC(pN5L?qFZvgBE0X&59mBme{xNVR7;D z^Cwa8b-jK4+PHmkaxi7M{lyDdUvB)B<LYOjsad;GxRY1pd5o4drxQ!*^?l>28g@^v zuTNxEPFz@cv;I)x<GKFuCv)nXbM}<dvf7W1Nd+ZUE(>&b_dndB&vy@Nnq|E!9`57` z`($EiISw7jho6Krd^~vFtrCfqj}c~y#j@B!7Bo+vA0hW|MSTX-Jyy1%nfPYNu(e9O z#g!<RZba6bu5N75m1Oa*RzML2_wRpvOX$AOj;QsK9@<}Z^zU4B|H#qN-EGf1hR9z{ z&8?5`nE4Bi`nhXx7M!*oADb)%q#!BC5*CC}(;ZLjo{YntPbIUOAX3B^?3%|Wa$tJ5 zUMh()+48t!eXEOO@9j?3k?}0)1WHG|LXH9%56JWpE3h-J2MX*P;y~wuvEU0B8RzWg ziG;e7c6pr1key@O+zfbM_416bz^lVcIY{$v)UtPJR6;O(L5|_8V&B1Z{$TyH)evWT zH4zs69Wv)*@yO`k`MX`q>8h$je<uIjm!lCXbQ10v?M(MRo;QE)D}MPI&S*TZiXxI0 zS`D4;8R-XxX=TFQyMsyrL<t+m4o7yRZ@?bE0>LveazcwCKJx=QXwp;X1itL6&9ck> z0hR@MaqQmECb#iSU%v0RuLkU@1Vf9ep*3P}6<aX35JY-ytR{<r)Yl%(RRB(Rry%2d z{J&>^)^y>w6a}_{NeTLCq*8|;QD`}a*5T5n1AiI1dJSu81g`?G=iL(b4Zb9TIxQ?j z#!n7_t$X)gWD7}nEt~%X%QW--`}dk3&_uJ;h8%IkqCuz9YrO-X_!;*91YBQJ)&aCc zjsupCn6TU#ddNgGFx`Eq?mdodL}O#;+%in-rThk9zJjkTo~&YSv8PG`L}kNBpz10f z0sVD;5rf29W$e7c22qMn&hK8i#a&OkCf6!-Q%;}5K*>a)n0IlI%=8Q=PgUaSxsQe9 z6%XYU-T5B8Ya#MmTzrNsD;T|dK*xd3--PWatAuXA*i~dl{!%2;zh+ueJ+f=wI)@ua zQi*AjLzev;-+13QZ~ddzZ8l|yG()l|p19e-Tb~6B0{Eo8`BYjyA^HJ%sX}j6W21Y( zCC@QrS@5oC#_vUR8q$=IqJ(`mm2NBFx}o`SYt(L;cKD}Q4lMq@c!*R4sXI`5r$3hD z>f5v4qP1P<8BXglKixKdD?{<pH)v&<W*s==+Cu|9sFK8$WnnW~_nc8kgp!ch_=y_A zGqK5ayG|clCO2aK9Lk4Y!K-XmUUxY!<nKGIsQSL%v9A9*<<_m%FwzqogWz3$2_o!; zrPlh7`lPOD|D)1W_Q`*B*T#wEwrjXsO-;4c|0PfN=$txprnOFr2)lZ2#sOh#Rjv1L zXL~?IQ}hF*Q{O{IsY=CSp13vbMQr_wOe+gb)c}z1jP>-xgjyO-xjKx@#C(9BX~R{| zuZ=XJHGS8StdGL2u{+0gR!41pR+fsdDw9Pep<UMVeO(}%8in=^GKlvri-WB<o^4&@ zn48R^qN$&I&pNy|#It3}aD-fS1#*yZ`5Qe7Oxer#hY0c1{Zz4jtoDI`|6IVUHttVA z4|L-1r|>DZs2)0$;c)0KVbi|ofGco8P1q-nqTc~ymyf)8H>^dh_dXih+`!ZBLy&<T zW2&(5LqfD)T)efgiY3Mg`ygEc6C4{>`_<yk_@rK^b~%XT3Q&`)EA&6)KU^sf_;p^d z>^LU!1!gH@qyT_z0(=GMoh^)#7IXvZ2nMvHeBYtDNl47sIjI=TDh4}!GB>??{w$&e z09>}jJ2E#6sS0`A<%3%CQ_%%?m?#ps{$<Z{{5?q#?j?7lnHQVHOj!&%3d93tWv{%s z`=lYlhjcR|EO%atN6f)-qEJcy?Xg&A%ri@n)inGXGW+*a?cYx**Xrk(w+(FIc=(_q z*Ht;uODawgkf*%M1ilt?NdAGV&DlStyepl;$zqOrj4hz<yn`8L*@Ci5y94f&^6ANR z;E|GE#jNFqne?-9J{b!{-?j}FcXoP{wJ6EP8F))rw<x#LJ2bJ!^@-t?%9jMNnHYIN zIbn08n^C+QVMo`gw{~Y9pt~Q}6MDp9_*t5xNC0B1$0F)f>_X;PfB&pvt%p+_eZJR8 z$a<wfAH7502Q<=paHwSx%H8FI?FwL%7ItMGY`FB<GMjAS2q#}=5CSIA$YsCi4bOFU zQ>TOJQX2N7h~45kKlhB^`<QuIgVQ(WZY$-hGt*9&_k#w1tKc<6E0<j074v6=kr9JH zMmgR0Z9>A-DSg52OkLYJhJWv>+kSc8I4He)AVU00+KFtlOR$1S)-4YZdpfD!;FQbS zlvZ*g1!Rz{e397sDUT)C9wF<a#E3wk*yhs*ztVHc&EW5!M|mU0f^e>oHq|WosS{dd zc||RUi*B9szx~7J>9uV{nZZf=iE(H-@9oq4(V6kQuP7u?Z-OFs{b#^g+YZSJI?l-- zlnwS=zr~)f+W6kh7T)SGGVk^~PV0`TyX8;e?A=<|o(gw1Z?W20H6;1D^%CGn-P92+ zy8{zFe<)2O>IT_48}F3jyv}kcc6-nBuZ{M<QqdHx=;}1wwUaPn<xqHPqX*+i7Ce#W zYZK;XM%`k73@ub;7?itCf0?9N5^g&71CRpiJxtSbsxd+9QT{|aASO&!SCZ&~MwQk- zOocD5c_#YInK|_>@iPRs0kij{6f-PG69=;KPU)-6Qb+3}Vd`#Twii{q<4ZP8IckIm z8O_gU%QdnHQW4*?ht#-B=6w`P2=qo98yje~-@JYeWMVtPXQ=4Q%cPUk%hEi+jS~D| zE@Qvl1b2<}2YY8LzIT<!USM&<-81B;eDAqdB)HsGeYZvPpj((m$LIPZjU(xO!8gV& z8)j(GENntV=c2(mh2)Z8tSQEm5VXGK9X0Q8XkbR$n!;j@teO@J%>cqTb2SdE+5J4r zcPyXc=oDNGGGbPUD@02Rx4yP=IudFL0r`o{-`7XB%?`3chXli#zC6O0Dvb{q554m_ zEa4?wo049Q9|iXfEKB&q4%?Dmt+r$7HB_vDd~)OkvUHu@7{S7*!|@9Q9=dF2B9R5g zID&3ORj(|f=Z8-7M#*Y}>}su?okusjo!O$M?2Y00rG$2XKuIHC0f@U*mR&F7^)|a3 zRC6Y<G0HlaNRxn9<Go>0+ed0AQ}%<d#sFgo)l8dVLhd55^oGfed%B;}rFzyPiK^PB zCOS|j$r0!-T*ME5{e5|(vcChe?NUR(om#o47L?=0W0WqNCsirC{%Wek3|w8E{@~jF zYlr6Hnu}jSH6udOJIbzqqCd4`|IYQft%H0K2dRqBqBcpR$vSJ(-7HzVs5w2iV<FCo zwQ`A^Q)LU=z0!$mda5+s6G{uU5s%c<Og~(kZ|1uFjyqekMxe{LOp(ZE&6tJL`*m<q zbRe}TQv;nxPq>_4gr(ez!ffHP-AnUS44f6fgc?phd4~%+Mf&(q{Aa#QQ#h5X@F`)# z2b*Kui{~yL1LPP^?y@q@dqwBuuFERx&1xQ^Gn!F;<p6qGIM$K0K!^d%O)^m}wp?)y zc(rg$KoPOrb-d9Q+&3^-V-fpWSXyOiNT!XBZKL?UePxaG!K9$jQIV;~2~(QO_Qtw! zI2pgVkJY7@Bz5O$YJG1Ov?r>;1Z3%gt7KvV#lTw}-M+(?=Nc|iDQxo44>aP#yLi!4 zC<zR>0u%$lK|UHKy$EVz)-Z-n7HwZ8LKk$x46-~87Ec(9n*FHP&y=IR-0op6x>sEM ze#qG9krg`Tqx8`?AR7FBRK2msHp+XDTyKB#R^1jo#xRzTy;0cD<7>aV*wIPTuaM<i z{Ul82-N4+lsaq9?)4q$o<*0CQ`E%U;UV2Qfd&C_Bv$g`pPe-r$uYEm8^RB|d^-rbO zk#*$6d?cLkL})GE7Sp7*x})UdadHa;63ALed(^qHS$3k`$&|$3gK>@Bl*3x6khELM z8mn`-s{Mzp@UtLK0<0s#57ppIDChO&i#y|Z__LO|*4aF3jZ928q$9b=M2@5pHaRG} zAaxk8PD1~9^kum?R&l_jf6LA}>Bz`Szelxf&zEsE;VSo98BaxS6GwzeH(nc`g$T!J zN=Gqa^7%TB)dR9El#Z~H$-bL1V`LGNnxb^B7l`FJ)1M3tJ}K4F-L|djc*2K^Zq_Pa zMd#ZwLLg=7P(@P&brokJ8Qm+2sy5sngAaewZuo7PHD8O}&LXzMA_BLiVxy?JMQG=} zy^@k&yng+BmPLrmu46TT@u>4O7?HkCp4ztxLfFdqi1KbvcxH$Ht~w5`#yJ<N!;0m@ zuq~!@!cYn=b=M1wY4!r}Iy)9<Mj}vbC_>CeC%G%N%-qj>xY#z`X#|3@_|7<vFGP4n z`MCDLUn73GfjMLAHcf47hQp*W3H6Z=oAZ~8<xIrB*UudCd0R7au<69CP7+lW65PN) z2A0r~;_$X22X6gVC521%FI>kHW@g_<DT|&wL8hnmS<`Ayn`6hW-D-|)z1Z5W6!fRU z<1&%L0F6txj2op(QPXznsyXl*2h=uTda%}>qqwB$sjzI;{>rqYtgFy$b(SRpxJ%fD zx|j&1@RX*|9kk6_Hn}o(`Zm(UF8bQqS_mbj2R?>RJUBk|<cKooe_a@uvMEc@h1Bwt zDT*m_X7gKb6LDKaa&}NLHH)kv)#^?Y)=Q0g){0eoj<C&~PI3h0EJlTnpbAV!@=k;v zO+XQRQ9;BYGg2>%1nU|wqp@%~6tF+z<aOtoHVH8s0<AXMF7ZCwuc|uUECp@)q@a^> z6Hn<EA6!cM1Kcv%(HhWA&+{CaIpamQZJROW??NpfK6f84B%^CMJd%lA7I^n^+di`c zGyImnEF^=ic#SqE3i%EO&n5m~($Zd=Eq_I<YX3LI_s>&<bColp)n(#tqN**|wt?ZY zz9nq_9tKF>_&O;&J3;8n!UOW*-AgH}whV`*2giU*d(v@~W{}O@(x!XHPrg+*q8JB% zBu-|2x1nPZoSU*7;;X8PHYYgZ+PkylUo}es``mWaHa<h#_%zilC1)}XKD4Ke@h!Hp z{U0+XxMZzAa)=xw`E?iVk-DRB#$d@>yTS?ZYc(0PvDkbNeDyNJnG*s(`Q0kj3Z(@l zd$sU9)T(vaC^`4>k8NoXTsrRZWvBLh66=*)+ETHu8k`ccL{b}mv{B}_(|3pU-qKLH zI14C$<7ZIvA}O&HJH5-#9$RPKS-11E#&dpRJ4UxT99q`T><vd?uRB-lAiXqFbJWp( zd#a|(5|{nitNL!;{SANKJV}rLrkuV9;d}ouG^ilct}<$#;SK5XyG4-LCP{7eZ7UFn znx#4o>?&fRo<gm>T>GRgmN(9#J9skKXH1589cqMN2Ups0&qjivv(kG0ecz!_vF6$j zom>T)(ZS#k5{)<)-6{YT-Cf73x{AnhSrTu4?W}svcKs2YW{DR89?Ui$JA^Esk-gU^ zp~=0re;kSRx24S$KC1?nj8#47TQ)|l7Z1%)hNjOpN|yi?zg<|k1l0rmNe%XU?EG*9 zX-aszm8`}Tl^k{0xEAT>)znhCrx`DE*47U-j$J%2w1UB!v$p6L0o#1~<Z90O-|d0P zaEk=T=l{e}wzi0AI6}ofH3I`Wg{U2@lOULRvC0QObvuAz<a7ZE$|NDE2U!_H(8BVJ zNRE+tI()wL%i9T)bmpyFQSwyi)9<d%+=fk<ihF$vXST~`?5Rt*gnGQ}eJOt8VyPRa z1fMZ-{T^+0XK0c1l$6*ntTmNU6`mU;8EiSa<|{6~{M2nhCDMZ@Di@2uwA!vxH=c1Y zvkFubR9d-OQG7s*PS4SMUNuI=-1(^(=aYFF5$#cS0X?hzyrHY(fs#A##a@}3ty|SG z#U!os6Rc$!e}(uJ?zJHf>`t@M$Rx1Nx4#3wN!>PS(LA6KQ+>5N2tTO(rDuho7M!|M z>|a`Q+HR?O>&(8w(Rtz>mn>_Z%^ZSEPo};=fR*)+OtlbI7FPb@_8w4LO+KtwE)k6q z>n*alm&UdBa1pTP32^vd5Lq0LmmU{l&!Vl9XNm8LUuH+ZJ?%_sVRGkq!@J=j>jvUk zY3=oS73t7WxU&Ae=}vA2Hh{2<Jm<?_3YV)q@aO4<I99i+8#Dw11p2bLY5F3f$z&0R z9T^=Z6AfOcr0BTHFIVQ{&2pGqME)PDzB`)g|Bv6^d%HFnWpnMlqRf(!l@+eNLX_-H zq-?UIkjTuq*Djl~x*u7gNTd*@-}8RY@BGgB{oVPTI-mP~y<X4fW0JMvf~#P!P|n%A z9o*E-Hj<ESOq&yz38lvnL`Gn-m=DXvL~%Du5X3sTNw64?HI9)PU4gF%`#dCY(V0>8 zm*$M!MNh}nY8W7{e5-F;{<?ku_z(DE`!4C1o&&zN*Vg;Dp0(o3#KV%CaU>35tHevm zjxXPL9Sm_?03KNHQ^TPdd8qOW$MF7e>z|rk0XqR<Uv}efpTpwbt~qi)7P${HJ99b> zI)x8cfs)Iv6l<&Z3zp=(0q~@+>(4^ug#*7tYK{ckjL~t&7)BiI>nR}WidDx2WCm@f z@gvJeMGR(lz}aL2@`_l*D9Uoa?iD+$b>~y?U;@Ls(Ujm`By)@CkF&O_+{)eDCr|F; z=Z<L9X8x4jBOZ>C<I6F6(f$mpZ+SsM;rNEtzf2NkhDs2Hje{8d+typOOc;<naC?BT zVy^N^HZU_u>wSG6BFCqDAN+$4KRZ4Uer`6~S{fMuUGLHK1{5dKj7?4svqN~U(_kN& zP9T8Tu**})VdxX8=+&<Hy0}yjqu44yKey|ix|fhWsI*pa+~;{5HDlTA=5|C^pe6P; z-Q|~}o#3{P9w#=zjVkY2^3!P&OgC@)o4nfe4=uMl{ub=EMyZJ>`x@08jI>JVncmF# zY`5y8<@-8%)_>8Qyk$CjWJ1w~tk1-!sde*aA?B^66J%!t*x!zyzr$YIKALyH-qKE5 zuh@>5GOO>6&9QH{>vs)D%e`IlbJH5L4$g#5fYJ}V#`_iSAUrAi%QxPu%vkC4Yvk^C z?Mxvu_w3Z@H?gt~AP|R0XpOf&9`XIxQ|k5oU89K`mHU@b<$JKCgP7DBN+b@+WV2GI zcqJj@1ZSo<2Eo_ia!vk2T(lPiW{ejp&GyNPt!MQfH<|$!x_gJ6GG8}F780G<KmB+h z+ZrF@EDN0T>u*UBe7S4yFaK=~{i@%3LMMYjO!7%tOuxc9+aDF_9KF~11juwIJ61g$ zz*G-0Rl<?H0H#Rhau@5##M4g~i<il#^YT}b)3$CDzKjy8l$TU>?I4&bestg$&Ug;+ z(yDr2qHFmplg9kdu!(HD9?huFJu0Oec#Ns@h+xDPiG*_%sW`H@3{HcK2C5NE$LiZJ zgM?h<?b@X~!b=eOV96=f|8Ollay?za;YZk9glYVh6k?iwMQ-{#fg0yWZM}M?4Loz( zG<KOJ4tGB@cM<O)GKz@>ilb)Qb}oe2!7b27NOkmRTS7b6>rA!WJOn(s4a6w0zPT3+ zjK}}z;ZzPL+Y;}P^_yV>R=(Xo%y+@u6DAQ@3EY!)NAIUbXnkL<Bp<ThkEo54&wH4T zZ!yjNqSbuLo|J~u@zgT&axgn2gz30?>@G?XNwGBMw5|jJHbjGL5MM9$n-)MFsgsSO zzdd_uhMS8-VJ>pnbN?C--lu@j75AWZ<bP*h#D9jZdgDJVil8`y$Olk~YG_Ui;!X|# zPcRT~0kql(p}shd0EB#?QNcYPK>Fj<3gZPWju?W7rC&JX6=2+;6HpX{8L2PP8m=}t zv(nbhZq!$LXXMfU-OW@$mDbdVsH>Mulv#lt>C4luF4bN}LjS+AEMWc!DijtHa(+k) z0sL!lm}1RcOoBk}wd{_B8zS^p1x<!ane_Nq2pgba?YJd_cSvt#AQJ4}=v94*YD`R4 zHv8(IE*86sL}<L>`4rwpM4Q;&92RSbTvoS@<~PdXyg2ITdl#|$9A2DTI7-B-h(y+I zLF*fMe&H*|n%NV6e|nYey7eUpKt5SI%Yw`~`*j2=jEgQhR$Nqc-M^;jT1@mHhPM$& zfH}61yq}Fvs-A=K?Rm?o5<kr$+%h>{CoTWJ|ASpkN;j{n<&%xJ<<yMpG(CV%`?L?? z4SV^4H~p`$v4{b{WsKGmByD0`_L)QQ6PGY$W8Rwh5#(_jg&-O%8aRFLS$1KWu!=@8 zV^Ky|#w5Xh33&0V-lF{Pe^+tw^7)~8W{|C7$dLCuZxr`l<uI%8%KE%&QE;QG=F8i~ z=#m%(wYJn4(H-BEb?e_=pc3^IV9IlP;#)fW$kQj(cfR%3Je6j(&+EHy9|?|G8u_Hr z2B-eIu3}Aknk+I>&fsf{03ZWG(X>um?(K}NFr8T>(X5z6hssB0{nu(9=SdcmP?mQy zcIVy0ORB2vf5Z%2RMsLl9M)xyn%^+{D%{hkHrQcA{8o%bI(*VUtrRa0Lh;#JNiCuM zJIWQDdyS*PAT5)?^UHBt{`Sa@4o$fJ<J<lj3*h+xT~hnB!~I_$a49A?zni;}LGS<; z!Uo>J01FbeCu?^5AdZgMsc-94Fj(hD&ZPko1f1Nu^4gbx-LWM=17iG^*z0V*ZiMMj zx=!2cUao1?e`e-8(o|eW<6LF^WgRUg)J8m-Vi}8ke7imrS`1l|kBMosIU3Ei3g9<9 z`?mo3wChQ0kT+9(-Sc2=@FW80IGhM8){VyIgJ&jq7RhO+&f^l4JoF9UKck$o7xT^+ z6*rijxch~P_67H}s99$9d=SVuyO()pAfRNWbYb#xyI;hQdPB;a`?5@sz^3STB}t!X zLfKqsR$S^fuB8V;wPEovTJ4D+hM5f1y1Vq^+{xWyF>m}K(N05oT5#WF?mtO`W(XVt z)8K-@rM*;m<3K1y7U~YND1aP3LVBY3s|REYP~=d*Fr3ET?E03W=n*^^ON`Qv`W!s> zGdCe=v|R>C{$LxvB+wjT$PZNx9JY;EsL0^3wM~vs=jRA^(iiet7p$@9tD~5RgWdu2 z+d)6Ja8>K|7+!|paqcadsPU_SEl8d5?sh^FC82D;;bsGsB{z|pI3}ua+VisiwEEl_ z@GJp0eJ~D+HE<XyqucL)n41es>|C>}fvlodl|9AHT4wv(pbx$=gT;<<j^E$%`mPT# zr1v%cE6`W@wx7R<%aY(yeht-@7B4IV*3XFd2FqK6Ro=+E<JDw(jz<ZsNp(ou|Mg83 z41KK@PwJ&{b#kBEa5?}&rf`Tt4<Oe##^59O(NkpW|M0nwv}%B-KIrJJa(d#?zMppR zodx?~#{W7uKeiCGl4A*2XFG$mk4F{w)f{eumVF7`g8i@M<^|YFpmg=#cksJQj`N!O zCTHcL2S_80h5!%XWGQj_OqJE<M(_!F*e}Cvl(8b*MO%C=bIJP_Np@-5A=$_@0)dkQ z>=6%9Z;D+`ra6*z$L8)m!T(p}0C{GaJeddE^FPXD8_{E|+(M!Tv-bWy_i9_TXvba1 zW^^SG-*Y8S67AkbhP3rjkL00G9DORX9?BZb(qqXzpM*4_-=%O<ZY3EuScsX#>YTxM z+RQDzl_<zfbBTc12Txy~x>TAynwe*mv3i~rCc4F%2L)P(xxIhlJ!|RKfqlfOe1(Zn z9{n)K{exVZ^|~edw|@<+AU^ib>3r{zu?pcG9AOAo{U?|QnoE3Bxb;GdGvJ7JKp65M zy-T3&YvxKV2Y5F?jKkmivV%wQPFT2IcVrb8*$f*t4+7Coit2o=2dAj!B-@)JLzp;k z{CqIeNK?gB!gem-z<PFj+~cOb<J02@jM%ifL@vJI$T#;o?|f93hRHBUS|J8MBbuZw z%C^{v>?t#yK><YkO930BMIF6S(W8W-ooXaqq?c>l2m|CbAY75+mgqo5w1vd1yhOWF z({FB^7bAoc^h9ca`Cqw0u8{lpgbU1cQzz5O5}2md9xa5+U<xxJ3P2bC0d>ze4C9rv zbk!1FXfZJ%`~k{!*zuKN)Paa|NMuO<AodYR$gIy+?<LqEqwkZSofW3AObvn_MgX)# z$r<#EXiY-l7D0Y}_q_^UW7DW<4z`FlES2QG>|?Js!uJhHz`4?FQMu9GxU<ch{*;wi zrCgBhHKKAgW6v=&L7ee+NJwkEQ(ZeTN{lu9MrHz`!nQ<?2-X*S)?@!>%KIx^0aOzB z7A?$`2VQ<kz1FRWN@>D2IjvwimIj>2*w(K*zW=b~*a~?>L%q;80ejOmN|rKwNzFsb ze@70b<bXQCIZzZRs^$$T&~759drUps`0LLbmG^Ju`fDcA-&T2r{$JXAOqVcAqv&RP zrjiHDen!_1RpCo>d#=A>MJOJCD10ttTEhAJT^^|nLP&*j5~s?*&W};C=1FS<uYGf- zT!!QdX~%*Yt(<wUo->-ri!eM}9MypwYsnE<+wYLf`+_B<iY=ZC0RP*>i7d#4ByG<# zhxn!G9&?Gn=CFC|@)~~Qd1w=Pv7j|we*D72hk^#NW4lAQzvD<4-jl%A86w2uYz&e% z=0S+wWRz^*6Ss$CY+>X1C`u||#fE3TSoNMV>nND#Eq-kA{FUd}bepen59BO6(06bj zGZyb2Q-(MjW|c7PGEQ0Hm$~={GQ+6`13B3UTkvoH+vz>usmgU|Y6~)GwYZct=(un_ zR+KC&+!o>X_S2tD1#Hyk&!0K7ln7sE=I=nplaz~9*^^Gm2dA@7^Y*?NeZ^N{EqCwx zLZT6%q3p}P25d~)VOZg}E~8n?%mhOZc!jrb_68H>2xD@sl-Vks9)k5}FxvIQW!Xme zo5NhI?)n(5_~pu1a$*WJCW;mK4iaxJlZz$RhQRppn#gJj5prw$1-OV1ZudoWS>f?{ zwvzsup3Rb~D;heFz@!gUd6DW}hRHmR^LA2gC#O{qBabv`R5~FcV>sr+%KQmg=?}1# zKp$x9>#6w=?#n*d;s<}$c>u3Fxzb~qq~8xbDOj4pB9f<g;0!9DZ>s`vd#rmh4Oi^^ z<G3KMm3yBSg*RC(u$nzWngFyWyhY3ZK<)(48n_*M!OgxRy5cW(tEXtF4r0$BaR*m9 z1VTBuGOROK9y?+&`)L>gw>`o?!s*c(y18rZQ`cZ_t(f&z`gUA#jK;OfLXNuK3y8jj z>blOy(>jq40F0j2i9urXu#X}gn0AwL9H%h6)XWJ|Ri6Vr#-7<VSa#L(8iTT{=Nznh zyDiL#sZNSUs1B`m(J%Qh0@N>Y)LqxsLY#umCGF#I$rF{DxJ_xHI@>lHzC1&<I+1<G z1r>`Hp2~wxK7t&;e<oh$6CY3}(Vz#9{x3PIsLE1y7x?qV9+>l3%3gWk(rdmApm^Dy zefiX@F<-BiOOA=W|HYw$OYuz61($*};Fdq`)0fu&c!0PWGSA?F23x~|L$y|`0&4fL zP_|2>Op7EUpF}W-<&cT!R`G$ebe3NMevIDju6eh;yM9BF=Ij(>QN(VJFqPw;A#EA5 zvE*ueBvYANh_TCpfUPj(r%4O3vE`);)|2UD$^vdp31dg$hoJqBY5A^icYkpjI^E8} z!Q`WuHsdKaAKo!|8i+}PuT^?ZU#aWo!nlgO;3^V?GImWU|3M7-cbV<6;+CtUEkww? zM*6+?S_qK1n`H>OF7^Z<Ep>xciYVKRRuHlZ2`@6(Q+_u<k4Sm>8q7360~=jev{6(| zn;A>S5udV<Isw=w*FU<5F2%z61%lhx3aCcxy3@WI)$X0S{o7g&OCVPA9!*ON8j*WD zlkj;1lI(oxnI;>VyV%Bq{JIVj)G9Bd^T7Xg#nze-_FaBt^@S^fpbU_C(hE`lH%t=! z6*;Tz`!D35i+F`ugoqf#N=N)2y>*Uj_<Cy2w{VkAjm~e%U>+rlhxhO26<w_x;hYt7 zIOK1amPZ}i!aEMs!q!-RfBKx(AB5Tx(B9Y>LDU5W74-``7>Kj+zZ!d_Wk?tyBm+!W z0@pVHonZ)5Tvg1k%QN!xvc=jo?Hgu4dSvtf&L({65zh={Q@8mkW`2^jC+0h|j~3YU z$OM2;70l1OpL(CJM!kx468-D|c%hGCbE3HiGzPwnyQ&sh^$_opsgcniK!n+z+1&p* zr=@tk%byrEuwDkid=3>C#l$w2L`6iPMSR_%f7Q*);mvpjoOhTw#MFI(o+C!>TS6VN zxXiR%d)CJX*=`lXHs6E(9o0YJi~;<ICK2yD&b|e-AkInrA_m80Sn5~%goy(-R?1|^ zgqFmA@$O}t+(<Df#A8WOfc9f}HD&!r+T#O4ttF@POLQ2%TyYIA41nt1r|Qs@vb6qp zn0B3cNA&yaB;WoCdaKCcSfr0nZ6&DY+BX)yVDLBv5?#&+h#v15(f}R6M&$hg!%G+E zm1jGnCu7avZyMltx`+>jPBj;pDlsK*S}Y=BNg%3q_63rb&H!@5s1i7y<~SCCoS1Ep zPpW5;Ee3z6i2ens4fTxmU#-R)nVV%gTVO)^0}K;p)rpd&^3`PV&7y?*vo&^*<nG7H zaz7<H&mqB?)P<6!{xU18e0wSusMP!3AE2}ex$_0^ceksyzixm2EwKDxOws5{bJs)v zrBS5Obt8T-u3z@c$}`X$B3#twa-61dD>CpON`1$MK~uFaq!GKJ2i?Rj5elev`5VPK zakD&>HY<qY&cC`q{HE2~@WKW|*tH=@+wJ$eZ>UR3O)xyjC;PVPNFCZdE8^6YsgC?@ zyM4l2;j}&*2C&K_nmv&xzvGw|C1u;>n*4!RIcdieBnIT3+8xtFE02Y6((q7`bLQjH zr~lpecb8tV{#bX{n+KIS)bUu$dmfD7_ddmhMC!HmccArLM=ugS>j*pGUuF&Zgi{;b z`uo)iPUR!;>mu;sWEz2$0S5yPJrJq@3Ty4Ft~NC{_Uc$Lc;4I&wAJj|#^{aO-|Nsv z{2GWCwKE`GJn9=5*G_PH8g8v8BVab*y%f^~Pyuv`Z?Zr#Sj~My>OZ^kj`Iuc;s|*B zV^W0!D#wJ3u)*~D?h2Im_4LQ{r2Eq_A5a!8#2uDIlSJPUFVPkvovahuKa>AoEL_z@ z|LsZVr_A~n&ZiJ%yy<7OY_67!if&m?m$9^V>R4@-fXFHzQdIj0eC!=O;-`H%T(6Gd zp<63mYXOr1D1zpj+Vyw6crMgCjbI<O7ehtBQsQ;!2>ZKT@o@hQmO~cF3#kXu1b+9X zO0^`yf^PXUExrsT+52)7@~Fh8aO=hYr*eA`ELA7fv9>8QCnedWy?O2)3{9iUvrg7G zns4itCalaHl<9aKcrS<V)Wh;R?RM)UqQspUWBQ4*U(}(Ua^_?y;$Sr5<T=d>>$WES zr@iUm$NgY2YID{?aFP*4xV`%@$^=z!{b_IJ&z@1-3zZ;oyYIFKLd+nYYmj1>Q~TdT z!{8@Ju}D{VTd7_WNV<a1P)yw4+&jM$u$d)JMn)aO{R?#dmQj{`FKt@B!X<hR3e|lM zDQ*y8NzjZY!2X!k@+#eo`V{oE=FOkl8?J+NP79GBHdF*}(!k)LwCCz$|Ipbj@9EjM zFhyg@MmC%$Ewu``3ASqf@*3-3mJ*7eAVJmS*ptR0nYP{?G*_TYA{Yr-leIiV4f=`S zx~9xPWC@AF87#Hd`Gxpz`oC@RSK5#fqdcVMFTJUVXWIIDJBz2Xr{^4ucu-^0W-tVb zI%sz?gBt+c5ISn`pdXFBhnE_;Fn*Pji@NkKWR1L9iyEuBE%|4<jml%J%$ps<)}u&t zr1v1u&XV?HE2LXTJIdhR>&IG!rM$`n^LX>PwmtDn{c{JV4{24EIVzn#g0bJk{O8{f z^oq&IG|{5M_)#H<xiFt(o6zm&d<DQl%W~o`kbSB`2`J3lAUxuTt|Ug~X^Ck=?irku z{~U4yq(+T?_DIRUC0s0*p`)6N5}y#r%C9+w^Y60Cp4t<3EsrdVZoK=1-Qjh@^M%@Y zSI%mDFIt3`r&)+w4$*9*+|(3DFpa<k9XbUWg|Ol8WF{;UNXE9*@piIwMotjreQy0_ zm@?t$ej)thMY}9ZuLyXKi5{Jp*e&$vg`&lWd<ygPuSC@O2u-!>gZ5#Ou1=H}^y><` zQld*@HjGM(<?iUkSBZo|Ql`>sua<xR2XIPPqMnCXr{gLqD*+!WE3IugJasyv;W!s% zR|WhNAOYV&unqUX7@KT_&S0wfNoiYD`WJetYJ1fyZ@l;0t$zWdG!WuST=Dzw_XoW` zALVWB*FvYc(<+YHV(j`q`Vbxcz*+RZcO6bZC+gK7xWX-1yvMbs#pg7}Hbd}bd9qxu zH^<P`&2F@!SAc`~2B6_LsrrB4f|GnJ|2Av-PVu^8Em>HNetxaCkRr6>>eAig&9M>7 zrE<;P_^}MJc0j~y`+;~6=>{iNlKoFW#Gltz;-ZMXH8YTPctTY>n?J_32-h443+R~n z2`Y`*uG^#+2nbb$y_>UmYG#&}2^C3iMkQ(zi=AU{{e_TvWkFt0$FEha<%8=1ubBq2 zwn!iB{-@kkd^mHF+fuFEs+8Bb4O2h3a^2Q80$e9x;X12*85>a6Y>k1p+^nqQ<h+EN zJFN>WRRLOvTM?3+tZ&?0UxJO^kX}Ook90y4J5h+d(HHg(Z+IZ8a2ey2^j9WVDx{gg zcWb|X%bwEKCo1d_tcSBlz)e8+Gtl~8UcE5JLkJ95>_RbMWwZm4cQfdOQ=}Bmw310n z|MI4*(G#Az(c_{3KRmYp2)Y0~ZYH$H1^0h?!-k<K=#b~8(lY}1Pk`P3LM_9;zxtZe zvfTEtX8dKhocHvaLc<G)vz1+%(xb9t$y>E_#%Lb%&t}Whuwh53SZkL*5v<N!G?@Li zkn}G9YYs1U<Bs<CPw&U-%(W1^^z9b)ca4upP!MtHZRi|09wi=&E6x@1kgr2pI~E$- z`ptw@*+xIdjWs?ydx|7<G{ch_F?D8{LjOZ>cjxwLlxMt4cR|-`zcQdL1}hcT+-)Td zC3^<5d8L|>&joSHviiwl_67#Aj}$X`>CH@Bi6-lnQ!m8+sh_M6ezz|eX`2A{y1!hG zr7Sw6Pd0%V1^SyqpeLkr7ahDqS6qp*jiuV1#N}fv!oWQ#5!R3htB7=c``aY*$>3(R zOWARmtfs%@RAaH67mJro#GN6hvH}QMF#5S%=rkJa(lqD>rbw?>?8jfn+Qf-mWTpE0 zX}hqrl17Zlvt~sFi^aq@V%i<4Y_n0qwqATOT94|PljDL_jf5yOm98sC2fg!o0xg{V znovL-{PNd5TmO$TC%|E@4!aU8oFRi*V=Hf6SEa&|cYe?BlmwS7;Ru+t)-QeLKThXX z!KS5=7^y`Ts(LI`(9E1fgo~X#vjpj>RqN&cDyQepkDQxMKrpbK$Ys+f?45-Z&R&17 zFfh_&o#f6<-iZcGU~nL1WmyJ4`&ICe=FOibC}x?Hb=$z=ynhMqqo)Uw4}MeLY@Mb1 zUkO=>a1IlOdPS(bHZo+map=$Fzdy90?4nwpVNfSH4d=h|_3QVYBNFzmJ8HhyRpUmS z!mQPn%di>-haiPh0&VjUj~lX4c`%!ZbqsF*{ZnU^A=t)YhlEOax88ZovC9tRhha6a zU1pgixLm+DT(QI#V>NQa8*TnbtM<bt+tb4>84P9BWK6pK5Wn{+^7T8JsX>?aM=;?g zzj*7zMlrJ@5orD~qp@sPpXdHhIKgY{Wzr*qqk@!^_s~)Jpqk?%pTRX>#dG`eMZ8vL zEvE!biCQXB+FHs9AexwuVK0y0${c6ba5Y{rHvYWn&M^M=trJ@lz*M8NqJKy(U->#L z?mv4Jt0`C~eluytF=0^S&nhj9%r19t+1ZULe^T4SSfOLfEZTpFNd`3COlf}JHtc{L z8pAV8n1+-H9VwO0d%tDO`{2Uz#-CgYgDk+^q=Sij^cCgh&VbwA$k4z<D*ew_pr2r$ z0-bQgJU8%V&Z+|EK8)d8%j`9m=({nL%bQ$njLaEEp2KSLI`em0mE0lzU%yFRUBBpA zo9owMZkSkyRT46H^WYncwKX$ClS3pKGB>khTG+J2^@{%<Rw*Jr{`Uz!P^9g{9Z}sU zBY$5d_O_E@d4Z0`fqTb&uqLyFKOod(K_D(4LhL^TZ8|nA0|4u@uO7T<6`<jNwY?F{ zN6g`qF%nphU{(byAVdFi-m7l@*a0PB4tkDu*E6g2F>k*v^QMo7d*fsjlD<tkxOrd$ zh6_=zMwJHZ5Z8!-g&3qO09br4KJ>R;>)SJjJMXG24U2TXeH)@OfTVtpSkR|*$Ad$! zZWkU0_N;A@Q_fg3Em49ww%pX}Vi@SP2uI<qCz0>DpiEUfv^}ia_u~ok3b^_F0uaYf zWQkbIFle$tlsXE~c_91XNhj8M1S2sCiJdHx&?RW2oved$_rV}r4rrG>bGN~`-Jy-= z1W(6_YE;_#uw8#RGo5vMa|^3S8fw{Uf*+q+GEW+F*2~_wkQP15eAjEJKi<7-%1BY3 z&|$wyt*hOLNaLHH#{yTxGinF4AVIxM=35!Tm~7#2>zRwjrQD)BT$V(S-MmRS70qR{ zWsbjq+xd&bp1SYd-cM?~x?%I$7YuYJ!NmPO-o1#9h`L!rZE_bytT!Cc?Gq-v%6iX- zsZ2~Z<YWmC5MV+(^0YB5FBs?(1#Z*3zK|kKzma)am7@K%;u&0@V^@uGCtLPG?b7^< zpC(I+>I#v@2pu|x(fgH?*KGklO4C-hv{7fTs;MrBasuY04_9A4XY2QOQ=vEDSN0$i zYMwkJU+$sdPtc0V%2^-qJ`RWUeCvW$Cm8|9hoqqHDaCCMzM<dflvMqC*~}*a@bTxX z`39(aMLce|2nf%gt!3Grxg97SZBjA3yN&I!i}#5ZB>e$ZOhJW(v{cKrbZSiBozqsH zeNSxGb!3ixc5pZGH*CA=ztF$EDev9DHg5A84`UvJLfX+o@}yHIfhw711_(-0_qw%z z?%$36l`FS)|I;WQP?{caF<Mg+k{0fezE&}G_s9cjqL{jt#=E9UJWyKBCR}7j#O}&4 z$SYF1A{PEgb+Y^Tii7H><zD04&2LZ~109i)N6)}ZVG&f{68>v1B$5gL9e~`)&no=> zt#GG&0~68;-n)^Fh0_@1&m8qxBJmlDgtlG(#f9?23#oE6YCm|XGcFvWvnmM-f+$lh z(Ilu6o_77IyLJwC5&)$YITg9y_huqDD}oLZ;C=0M@&*^)DaO_KBuVI-7eUYy0L@`( zrY}9R&~j}cPm!pFzY-_&{r6`};}vuJf9=WvCxfvLP|@>s{^cjQ@CI%tW?zgPi;s(o zvz_qjxXzF#X1&_OORZ-F?KOfWxPI?fnHzO|b1$qUkpmDj+|`c*42}lWYHDkL!)@7q z8DgY#6s2XP8r6SqFe09a3r2oD2Nr;AxTnkt*XIcReYnIyZ?OUwUO>Sgg^HiUoWqOj zwGY#WN&Gi_J9HVj=iAc)($-xJ?V;bf-J`i;0zZ$Gc7azgFDGXxTTloGb->!}=I#!% zWbPJ<fAAt)FV;v0ebvG&DN0I(pL_=04Bo&o8Zj!)8~3U6)w;lom0{uRyax3ZbI`D< z3C`D*IIX8X7#=RJ?#RF4R#VwhP+fNf7tb@ODTOjLBl^Vh(o(z%Ql01J<uTVY<l8ti zh_au8W93VKQ}k2RmP6qD&>C^Ht;w-C<p$yjH^8DYFn>f$+9f!liE+7P<bk3QQJnTm zn80>aw-zGL7BKnF9P3+|2_>aoycCKvHHN!k8D(r9G*uTzx#J#WU*_76S&gHbsX?|= z2>gP*CL`mTAY0(3MHW$K$zgd4=iLUf2BC$n`n=%MH{5LH8+p9xJ?9VU%UQZL?Gwmn z*j|O(=#o{ZD!KAB$#%SuPH8NL>~PVNJRVoVmotjwj(xHOLOHB#N-^siBvDTWZ;QT( zw;VI)9cLfD2JuuYC#7do0Y!2lDobXcDzM!u`)%&tE=Yr}!(7?AHx4_lFPnDESYU0` zmj(}TK`^BLgUwkg4&<)}j!{nRk4RFB+AOG;o?zTrnDP#W+{_$eB;{S!BvLSVw^+h1 zUdW8vfaNDlK(vzhh668phOOgT0r#bGMv`nfCPI4Rl&P+$I6OihX=YANH)cixwGpnq z*AesDQAzTZlh&=^e0!8kNsz@p$una%a0AJ@+Db-i+){`dL$tr&<l{bMDtaU|rT==@ zm6&;njxQFu%gIDd>Iv|$#HS!4l^nv1@-6iMm5nG9^(|g%+3(dQ_^+E-BsuGdNyyI; z84J)i@EdH_BX4l!tQl6m4)NqXcg#=#92c9#p9NA)PE2?yXsTW)6~$k^yH$(>ye28L zA4ORETwAI#WPLAqe-@*=)pU66G5nE)Ofg9z-Zc+@D#yo?iMf|R6ao=&>8b_-@;1X# zXbC;C9F8wg49IgQmiPs2%=W`h*HcS#^Fs)BCL&o!lM!7_B&vEnc)^8;-;&_h>#$d3 z%@p<4yw4j=_njLR5-z9l(KIUAb0C=-uT3-MX>u-W@S~s7Fv-yyWez>r#(OnRj1n>_ zvWB6;zm%8ae)PrEsuWrg`4sSkIrdLfzDEwL!pDOeBtlV5r&;NV!|=1}$vyU36yM;i z$@iVs#?6_Yy28MfQJb!mMhJdFD-rk*K2}~jg^2;KoSFxY>gD15peuX?HN?kz_7kd> zGRHK$>C<TfTQYLmGFdo}1d#LUf#-~CC{5dKZ;4`%zXuT??=CWuGLUkA;?}tJbRCWU z9M2a|S@z(h)LzwM#;m6A!`uB;U0(BO=DjmhL=w>DoX|2N{PbRv?|+?eePJHbZ3qhs zy97a{+%fLns9zHvuS!0I>a7#FgC0RG!lvgC!%}y|G0w~lLG5A}`X`x9+g8D6dH^@Y zHb>u=Er53!cz8ZRl{QmspUs*n1Oke=g#Y^X1csAW{+qH*WUIacsjQ@}M5I~}*2$KV zZJ!1DMLBd%byEKwAo{OLV<1p@>aVxq$s%6ZU|kq5{{a)YLGL+dCa9%3MRVXfry#@( z{L;AQCJ^m#GR{chN=YC+sIW+*(CJOn$7jZc3F%GPyR2bA@T<<(-6V`9k|%vGaP;L< zB|ax<w|892u+rKDMsfWH)XqE0AE*Lt2vU=L3%4lq*i`}zrahuiA2A2IV7Y^V@%4gV zT5Sr3LYw=VWWyAZZGi%G1Y?QD5}^XY4C$@TeyY+2goIbeJ=!*7keu!la<&suDn%|0 zt$0PdMvrTs>$6o#->epd&xiE6)OEki1jYiW;KpBlM4#!#fR#5Y_<EiG{(xR(iin+E z@M*O#naQ(1boNwHuTEl+u;>?Q$$cdj?K@!NkkUdV%lUt{(IqiP%#JLr{s+&M6Y3rW zl>uTMbe??~g3m}PQl{|k=@I@;Au&mF+lOke#gCg6MmF>ds@CeSt*xwvk3=tB(%uPp zx9~?qWla7E&z7>ZkSWc{C6jK1WVtk8rAxKh?qy(kB?KKumq3~=Ir+9BSC{~DoAoh0 z`Qg_zXIXUeMEhz!+E%t?fePLFvv0sLPSa?J@yP)J3h7E9{56WPnjCFNM9HC}Xhsz8 zu-(W&@~+b;{R2LVdRFxVQYN3`Ju;W@FipO$rUw0I%Kp+Ds8o62&OBC#BuN<;G0<V@ zp2Y8p{Htt%^>LlP<S%kBnQXP_86NhYx#ojvEyVq!=QL!ls4SKI?6n_il8yH4)jgh! z*ca|xm1X3&Dl{Lj@cYTPGqGLur}wv-UlYU|#awKM;htL;*K>ZIVTnS8f(r>DGypoZ z9d_X}GMu*MLD@;q=dK`~a`(xSr;(=@Ct(YEaf89p3{e7A$)(lO`4AxnfgE1(AvfaO z9y?e0?ea*3G=%G3d(P4wmE;V?<B8ce*nc%H!S6uUz@cu<pC@tW+Y<9P%bPcoiPDy# z=%7@<|79L$vR)6mQVV~(7zVkkAG&?iUfHwdajL2;qN4=-CI>0?S9~dKh;^>@sXn2L zY4&}0P`JN#pvX_8qNJc;l_-5dv1}oeP5Z>|xJaXdnwE)lbBbp|@(KRmry33H6d5ji z6n6%MK&xd$LW+WJ2|2ehwz``p_>VRI{mJGs6ox9HaXw}a4z^r>c<u9wDQ0T;-0;pQ z#G9ebprDj*LWY#ZuyBWX$FQF8>cI~wOX+FYZaJJX6Rx25t6h*A#UXS;hD*73%xU;1 zA00ih=_-d?%$+8Kf|Zoj`OckRFf4aJWzi$Z>!1gdERXzoO}yy*?_!X`+0F5q<!+j7 z*||%#olbd@VW0iP&+UPK5CnXolbp=3;R{5M19`rL08_FOdBX}HB@x;%0?rH&lYZ$J zd+r#2wp@ww@X*|aTPtR3lG$%tDyR(XIk*(hJVmOT!NjPaRqw$?FWc>D^#{hDFQB7` z&aV5_9CWmtiu)i+UejBbe=$i`mXzQ@qYxY56gN%%7A~os_qB|kc-cvC_qAn7W*bnk zyd*NpOrS;wR(!dw>6id_L+-bM35@k>(rWyVjYfah6@B*XJ8Sfmkj|0?OhddCh4 z2_d(IUFgu0L+ePVEXlyg<EQ*-$-slkUs4Y;G8zN$6hbd2GX`7H@;0xWiHpd{dFW#D zZG0GTfdlX1FL{-z_`{C)_wV0D^llFs2Y$-5!5M!{kfIoncgs4=NNm3JjXaAaP4ve_ zd{!F+GZ5VlGREWOejq#|Of-CMrYr%|EpPO31OHKpf&n3&!JH~_+t_bGg|C76hG9Wk zh$keW-1q6#4c6<m3$nsvkx{eHW%me$S-%tb+1<&yqH#cXBlQwU$#qswH_l386vnN) zwEkB*)h)hCXgsBmTZ_shQF6#<$%?(pn0KXN7#Jz%ArYweMrvvyN;K&a81kt<#0t8z zY?bWl_Y}jUxkP_22zzsM-FnSk&;aq4Dk>brm69Z{x}nru+HK)RxHM&R${k@$BuSm( zxs(kqMf-q;DNjqS>><+=E&PKx0yCYH4JuOV!CA`JW585`tTCQLYz2?-p1oSYAhWY{ z0IMKXS5=I{i|cW`#*$Ma?_wB!R#Wp5gn#}iVK$KM%~nHUro4X&|Lr9L<SMbA5WXy9 zUzc<n2qiZ{Izg}~+SiG<`2aGGVGfd6WmhBK29;-p^3rVRg7^}P)26(?om$mZjueKv z3DCZQny;)>n<GYGNPT+n#WVDmhT2*uzs7&|bMCZt#wP3y?3atbq$y}wJq35&=Z1t5 z+SffSl7v{n0JQvU&U*4$0uRozD;h$8CDSn%8JWiXRzsHX+}p=bVGbq#o0<*ZtmFq` zDN%f3nSUU0D4m~51B2MKtt1^j0UX8DHUl2BCRJ#uF)-}}=_j@jS)*jst~t+DN}y;A zg(l_O$p;K!bfb(P@%|gv(uAj+RWWVb3#on|uYl*5K6y#r90ViXb!JpY)3V9r;5Bd( zpx#HW9mqt<-7zm)5v88=#^XrkQ1W+OU_Rkx%jS!AiEn;L9#@tm8vTxp@JPzkH|&CF z0e_KNL{8yT>hBceBe>3)M0ziAMFU0-j?|0ssCTWb2e?hlBQMko&y%tl*CUlQ_~o$Y zO8-qLKXD5Tlu>)ehZt-ctQqR8_Iv$;#w_KSiJ5tjnBjLJQt`=Y3yE=y>}M7h@dWA_ zRh@0uz?=SFD**w%zogCLrt}T5^bj^hnQOSOv=svF6B?iYeD`95Zh;L*qPCVded&eD z;-LODS(S|1yUwNT`wwUBpmyyc^G1s&Upxe$JMdt2L36cpnBtfi1t|&%-=~3S7~0vn zbn|^bnDE;L4}bj71%?u5?*%5A3B$mZDRJ@Qm;c@zLl{RMf0LB|lm5D$kDtAWn7TZ| zlkf)y#rb=J;rF4BdCL%ZF77}M&$sJh93}#<v1-xH`w8eah*65I-c-UDro(j^Dpx%k z$BmTL)w$ORb8(5AyB{IE=plzfhFJ9wKpZ$VK6RX6++Z(6y3af(BY65+?aL$zN@GCp zYtt5Fia#bdL8h;wppg3;`Bdb<Rp@|`Mp;8NH$T62{jGQ$wR<d5lGd7O*TDOeBeaOy zE2xgzn47O(FC^erO2qEl6-u;R%$)S$xp!B6me)88X4dduVll{=8H`rJCa!000fHNE z9N=E&6eGPZ#GYWWjFxxLGg><KR7nFyKJUzG9}JQ6ML8t0(Fs`K_8E{pCsD_a6B=yG zAu!a_ic)ZvsP~1ZiE%sSWFui#T1&s1%SV6V^*!i<eUu&FmP|jgym|T`1S+5EMYFeB zLI_`LQRKDkVxyO4)W9>ji#Fj;se>RImwc$3;-5@>sGh#Ysd_~c_2&U%P-9b>9&yi6 z(-{;`DdTx76lMrTCsvJuii%%&<QI5DAju~MlWFE|WN=w+^<pN;l+${xm|4NIHBn7z zws==vd^6n}G5nH15V)i~jxwk)8U+XotRVTWECf}_f$m?J%MP5u7z@Ww>$_|sX4N`X zo^<vjmMSs-?gs)fI`#j4Zv7IXj_Q*hzPC0KL}a(;PG!Q*VJ&$les@NedM50b{ROf; zr#Lgc&~$MJ0-}&YLWNHTT8jagke#`2KBT^Jd}Myzzbqq2ak`G&OJAYFfYLPXTZ+pJ z+yUMEgoI-Z#7qxiB?<-bJQgMrQ6mDqD$q-osIRTCQGkae%pLX-sA5Z1OC~mGTeOE3 z9Kc?p^DloX8J(wk?+ngMMY0>ZWJ82AQ}mFFetF(Yp7*LEFGeg&L_)$X%GA4$w8h}q zUp4>>3ru5rzQnU)y7Q(%4&o!`HxiPPl5{a-#74$lQe6ph^mrUHmoB9c6_{LOgyDVH z!fHF25mpxOFfk<d%IV4vB`w7B(MH{*<Q_=P<l!{R?!J2{^p!k4nHj-Z8J*;GnGqT1 zlH`=8m;Sr^-tWL!(yQ<YWZ`j*Qk!0S#0$>zqi-XTQrJFzD(}oq@|Cm}gowOEDl{^r z5n^TcUh0VB|KYro=Hknu+o7$dsRpS@#WbfK&5r*6O_3sf4V1EUFl>yK0ksobW{R%> z6uJvBbd46q|2h_5nY3@V8<n9S!t&G648f2vRRn2~9%qY<gDPYlTzhLm%&$sIOCjHO zq_)1k%7vd|{}Yg+5Sg%X>UMsy`_2xF!%r~nSEMeJo^+T>x9(?ud6blQ(HfPOT5dU6 z_$FP<fzv3HL~k@@V{;S4!sIHp)y<<D_<Gy(@>DbaB0rO@<Iu(Ed%qz#;#Uq8i)^Hf z{5T+F@Cy~><>6xKnm9?lnI=YI54`f`i2(YK{HZB|hIiQnPDRKQ=rD+X%l<5B5lBCt z`H705fBw!gul(SDlpwz7ApMG2<K26X^8x+Pqe0CraeXe!hj5y5q0#qF#tIYyy{z?O zi1H~_`Q+0=|NaLFYAQI36tyBe4PL$v*9tb%$3|k2S1TI(h)^pB7G*Ubz(eOcOJ@!t zE!$_Enx)dDS5vo%b%%Z+wGdw{lOGwSTE;37vB?5}35!#5M#g41E-XiLYpap@(Se>v zl(TF!t9y}#OgxV%gLu?%Qh_EJM|)EfLw5*-noSVgY?XGW7#tqjeD_4Te||91(8Odj zI9mv_H-pmCdG*)X#pP~!Xjp@7TZY(#=e>KXsFDC0Gc}JQNcF*G0SimfBZN2T(J&2M zb5caBKG8HS>td=5&=w!pmS$Vo<XElXrHHQy^&lcPz@`xjhchHSuCeM-Oy{MD^0-iw zbZsAbGvy}}TnoHAv3>HIA5g`2ZCgB<n=$3Ma`H4n!JpJrZYUT<>Kt`+V%2<oXg)no z$X`WYyi@v`uYf2FmXO26nkAVP`O917&lc>9$lCg32}#o@{9i~dtW4k~1^>z?L20*s z<m?)&uc`Uf62@M72j7ir@y|kfo-G(itaQsd6ys8GdDE)lMUOi>l{+E~c*nUu*4rwu zIeKmV+3FP-i!VF${{H6zf=N&rmw-FW1D$iLH=O7B=xph4ryyH)h+AL)D9Fq#rA6Y+ zz2Ba$(77CZ&x}VC!Xz69f;k-NoKq@Jr{^KPzUjpsP3*-Wp>(k!@oIt(S%h|F^ikJj zuTMdF85OM<(bz6nC0;yq&?d^z6|j30D|PeMwNy=ed5+E~uMVYcQLPhaQ=*J5xE@~# zFAk*?kcm^zINmL<gjRtyahWW(C=1x2y^SQPreO!B=$xY4@`8-7zr|1G`m31jF~Snm zb&4CAA*a8H;BW*gO^Ip+o#>t@3cTFbc_C`k<&9e*h>?N{1oITjO~3I(0?j@{)`H@4 zic`CGVT@2Cvx&mLAa@djb+^^iemk^Lz)l<IdpW-u|F+H>iRy4agDRTyjNC9L<1T&` zB*MS1xdxBv@KO{{EV(H5Scp1z30&Rj{Vyj+?m5bI%)RQA>KJ&~$|mKAcU*leD;F*1 zb`?4R4mN=480AX$(Vx5h1MeK*mog4$8U##}pTF7~o*|jy-q}X0<rkF1C_onav%MjR ziz68s!7yvC>fnFbI{5zc51_md?z!U92(?dRG)I>b+MA&D70t4U19tBoE|fzK#h}9~ z(kJjdQV5>^(EFfjHu)w@sKl8sPYycwcI$gu2pSdHw0c6=SG(HcsAsxvteC93t=oBf z$Eg=s6?{uPiYC=z5zQGF>SW#Zq`Do4PIi#G6Me<SA!v*A(^J5fL;N?i5Sry3Aj?pD z&e$^2!D!%uTvtuPpW+{W+I{txFbOJZhG3nVy^`KtiVd|tS?mL^r6C<%yz^}tRD6o( z$c@U!v9X00UXgr#B3VzwJ8m8GU{B1I^yinZ(T%&=mjlzRvm29$mhYMu2+Namyeuu{ z1+YR{IsDO~uplTR{(`ulz;B$2bDMI~F(21x;l*>Ol;@<+-pIgUg(|RO&7nzQLg`;i z^*+^#u4BL1JC-%F?8_Bj$g{o;*zDvU;~73=O+mvl7oj6V_r!irQzQKH>}U~>n!tFr zm@;L(?n^Ym))OWM)qsbusIJ+nK0%WX)ykI@Xd<iW`8(N3)wyp=e}%ZOgcM!AOEKlb zH>(KwScSLOs#4o)=$)nRa4l;Rpe3gsD17)yj0i}n;d}A;*^1P;#aH70+<2{fA&uDe zVl;!<$`*^bq~vi)z&Fm+xw0z8?e$Pg^n);JYatVMTV=ZI9_Ie-W}bFkp6^K;X#TD- z8V7M=l_&AY++PG$ZO1yc{k|+ks9L76!<$~f_`Zg9eEgB)Re?G-Ypc{;LK~Wry2t1V z(i2vXw>bRazcDZ5luGdS6x;&7H?Rs^f)>No&ueS7oG^|Ad^fJyM6(O<nQfMKAFffF zCfRoevn%*=Qn0?EK>-Cg;I^~W@?tiS(Lm^9J2*+_oQ7;R&-Dq)MFM{p;D7jH3euWu z+wTXhA<U4$vkIzQMh4V}<;{8M8j@%14&ulj+TbSz#;cRRu1WrIV~XVz@p&SwBk01X zo1Cdz6mHAL#C%5A3S;lb&wsbh<trtlW^sdu=_|_5dWEfAPD-+4m06D722qK*Tnx$W ztrGWxC{<6ut#Cl?guXt=Ld{dTdgYD3^PQl6$DC|AJqq=MN)40Vk|=nLSNz_0)DF#l zb&Fw<{vn3CHD|1}e_Px^Z-IAQ7T-Pg#TEd_(+cdi_!2STv?`CaPcDn<>4J(<b;lGU ztl|PR0b|KIcPxt?>WTm)gL;+iz`790b|Xqk%3m%tuB+~L)~gsTgg1fj5GY;~5=cHU zbE}14Xd~(uRWyh#-jL-QS?;_u$_mPUZlyq1$b^K4`%myAK7YBh7$nYG-6_KIk{@J_ zzAI#zxTz+BJR-L{9HOGSEd)%W2?^}A3T9eQObf<xh=3;n+`d)0*Rd7M3SdDHhd6XF zM7b`0^}dz_Su!|t_vNjKW40ZfZ?os#U2Sdc(numrnw)eXN$|2`KlJHJYZ`N1CYNU+ z-GcBPz&d|q+#muYYf(uFO)uOBRGP&8$AJ<*le<{G>jAT<h+0`azmYj4ei&u{oYy$W zFNIfM3-ReMl^K2yuklFX%~B4#zMr~(qSA-oTGUD!^wVsl1=U>RCqM;Loc3`%TRkxh z0N>m5prhD|a|fyAOn?ezEVNK1Y424u#>n-fEIp8HoYZ@w7P?TBCHUNuS?QOD|LJbh zKf`lI3=Smtk0XrUGpm2+{-p(>uvjEZeZrh5n>Q+h<YUQyqteOg>7QGNuVVB+NXA}7 zL?<dicXLYn2IR^vlGM>VNQ7SeXdxVvKAr&?XiOmjo|L6O!uCK9AZ%zFV^8XlBrr*0 z-R8?>bMb9-@H>#6!H|A4IA{UXmk(KuhXH)4MN_G|TGiVS59)d}F0v@TEQ8T1@tHzG z8JbE5uabQp@;BIW89u3);gKlv<@rbDrxehE`i5Ef{D;+)-c7=O5~GXc`26<7&Qj#j z3GZ{lj4YXMcRP}Vk+3E=4BoChWkcY?0)=0UJ^o5Vb*_p1?=p*cbm+47gwq8^udv7a zZ(Xa}^=_Jp-{y#kb$eXxCyOVt&D0Q_AzL3Lf%WvEm_QV=9P6tEeDsYg%ZysR37H%c zc@DQStH)P43RvdXZsQsDXY27rH@v@^r8&I1wDZ&+yP$0@G89z+$*n1ue*F0lAC;zq z%vB(%U?VZr(vF%@Wqw5${&PE;Wny$xhY8)NOBnKHM$e+Fl)rf3em1=x4}9cty>qaB z!R>PCDxgIKRY{<l$$1WM9mi-r$lO6q{STCt{&+z_K}uXn#07$-wd;{92I0fo6zNn* zpRbP`Tcye0Q_sc?9_p_6dY*^;V7}XI(k*mT;e*Xe2(dO@8SlFJWg3!4UXF6KV^Vg8 zCROD^ryBoqNKg=Y^YaU-=ZLt+01V@ALk6{nxchs;oii_^xrZ*D9ewnJ5>-s=@lmB- zd)Ps_niz{IEk`9P!e6F?61;VazwPMi@o0`D)Bou(Zd&RoeCm!+0L4l@3x0dRPZsWC zDuE8Asd9KSg*$Hy3!y8|fn8FE{&ldi{;nc9{jmZ(#n6AxrfB})=+<!nCVPRiqaxVz z`2Cv1mA<bkIX?Jg-|2vriAnc|5H+jxe?vLi+IhU=YFowyz%)V9k+rU0W;Jur?Sn^X zA{5kaUd`zq4s>Bh!p^H;eT&Hxg{ocD^JX3+;B=(Q*y60j2%(o?IAvI%gQLw$EvT%F zP>CIY9P0y3N1FEmiom*b0nU26pU^F1teI@aKU2C9{&ZL^HuS=G<wm^pnz}lii*dD0 zs~{J@j>d2(aGUTZ5Ad#e3Md=;%GK+GSoar11OgNP25OYr6v;S00&B<-$;7T=rU%cy za6xmO;m0VNQqje*gmm+VpD1ll6i_jkuzn&`jMilLVgI$yT~fjmi6oJ{i4wK^<geL0 z4VdxI39VS}yXdYZ6YWRDBE<wzB5Z8x{%-j^&2#bwvqDqh<U-W;<RW9LZsdj8Ep96H z5b6DPo~OT&NTui#GZyN%UJOZmu7m@YPNMh8=sigSY0Hz65|b=^-8ld9#kd8(C}f{f z?*)&npTM4fK6sA$1r?GGFDL5kI%MSKS?cj0I?K~xVDkwmIf(w8EqbEG5=(7CjC;Os zlSwrgh^p!oY#mQ%%xaPod8+nCyOqmDx2I>%F>+se*Hu}D-jPaWxoGXIPQNdt%PMR- z!;gqe(j2>_-E=jYe$Ben*dasuCeIB7i4ocQ;Lkw@7B<#PB^E=w8zz|n&hq5E_4cmQ z{2oU}OJ-5I+j>%hs*0^eT1S<P<{pNCi_G3)eO>cx+k;fhdQAL?c`HeF%`(!nQCO)2 zXgKh7@ciy{Dm^z#Ils@Mg%Ha5a(_+>!9%d)c@U^+#gnS7jXL@R5n$6-fo?M+!?14g zisF*!VclMtPk(2A#H>#ut^`S<jG@u&HJwe51X7~&a6>??xo|`HE`MAs)L}uAPiyG; z!VqZzP6Yz$p&H2-m@!nJ>{<;#fEHQ>D+xp`zhFhED89|&%nk9PHq%^JBYu62mrJTj z@xLH&>y3hxInC4=FtJskc@5hmcpB8T9gr&NtW;X&UzNpa&5^3W0J(I+zVo0n<~p2x zNVT=qC)FmU7%+FKgb2%jU%>bpV_B6JLd;@<teRCJ)^;jM<NPG{Fyl!oJ*Ds*>!q_~ zEd&)R50EQ)C^r&Adb`}?m(;o7n35-=Tza>;(L)X}qjZd5pI(&ErknKBv)5!I^G!py zoCD(J34aP6zlRAKTaXpKLwo<>w~rKeQso?BnP?+h&^%d%W`T2vos~W~V2{C!kKP~N zNa7JyJuxl-66GsQ8PCWPvGsFIV4{Ld2-XLwk$ZIw4H+uRe+rR5r+Tg&o??hlVV#wi z8;_xjZ&YZ*uGI31YWUA2u0Hm=d_XCARwK#1Q$eA@mHtmbM;;oO1^{l6HinRXV|pfY zX;r4mn{PtuaUuo<gMRYP`)Be(2-)P{pVOzz1}+>92vxi%K{+rqYVQ8qVyq;eyS<wT z_*DfzHALzc&R)HtpVX6qW?4%PAMCS)_cyz^m`mnejDLvOR|{_g&5IsE>e2=}q*QEv zBfROhoJ5a{;f>Z@IZmb~x$pQMYv}eP-?X!yHOj8q%&a!+;rS0@6nq38%OeLdDPyMo z@bLS_$qKS$Y0J8m#F+oE%8_$^AoH<^K%P(7B=pYp>yMW2FTyE3HL!jB*&Lm)1ysXD z;z}g~Z(4aOy?sInSI=wjCNOS{^wAW=W$Jj(@~;1x3ES#*CpgIewR2^7Xz0g#$&#{! zuuBF4a&ePg1Nh0?+uNXgT`v;7N>4U1R>H;19B-V2At{nF#>=w?z1$h*uBm}MHwr%` zMjCyVEPGS&;$U&fR#&x-s4BBAzRA7HE3SG~<)Y#u7hLj)nelI1jFQ?A34J57E4Y_B zLOC8)5_3hCnM!~Cdferw9uS<HPRX~SH9K3bw{NmEYwGAIh**UL`~HTxm{vY*64bp? zrYX{&|G|c;q~-hh8Hq5fU_5i;=5^biEBi6(r4OL$Vb9W6<+X$XWA%&GRk6B3Ln3hs z(<3(WZ%8IA<N?0WjOV8_sa$_4Lb(lnA<rqSXzH)tX_amhjf%OW00KJ;(&vKYcoe2O z(l;@+^k^XY3gL=-ka^3&0V)&eh&qjEZnObbX?Ftl(rEJvykG$UXGeP>rs<SfuFb?; zQ-2c*I~u)FRp7{_zrT+mrNi(02a0Q_XHHTg2814culq6sBBtLXoz{?WL^Vloum%HA z2r?@USvRVj*kc!-)LeX<P=&(_x)bdGJFTtn!0oCtgi<VID-wALkqz>d&V1r}hOx+n z2F}a7I%4i^rS!pUtPjnjl=~kK;(19J=rH=aOh^_wX}C}Xo<jJ6RLHJ%-7OJ-u4Ba? zc~EEfGp#Pq<jDH4u+%34_>Mn8yg=Zu0C|ktMWYoNoHsDz5IH^LZqYEXiEpZ-LuiAo z=VAAV=V*i$rm9UzM_jztrZFP-Yo6B0C6OPXy>2i`iHQ!`N_pSDGEAYMg&<b~MG$V? zwvm>UdWQ8hj;8DX9+7=nH`+T0#Nx^l*`)gspDO96kA;kPR{p0KV64;{#2sH+sBg)B z`t+sgOOOODlE8Z!_b;9Z)rHFw8^V}uaUryLiaOZ0S~$Y6Mgt&Oz2>`BLa@wB{S2(c zkFIPcV8mA+lS2$_o~0e7(JydJ?oJkWtFDANe<%?$XqH=hszTXAUWNs}PXNUvcrN=U z{{C8E82Yar$k3M<gx}Bz<W)Ss{#g5h7Gk0OV>(?yhN=PKb|X6M=?`PXAG#BIy;|3T zxRvpo$B!FX#wu$Y)-PYv45!;x`fFw1q&j^I;M##wqEcTt=U1tzdi5?$1?N9odHm-I z^TH)-brD|qOJ`<nw}Bs-1fj*HHG*pqPlyF64NAKdE3L)6{VX#h@@!lO``KMDzFIUu zC(Jqi?=ilwXY+<~oFJYErsU!n=?ig?IC%AJ`&<6@w#V*kfXy;3Yuq3v0R*xA)FA@Q z6Q&Vg+Lrude+}rqA4Q(_jpK5zSt>@8r`w%4FuGm_=DPOXn(OJ+Vf~lhQMle+n<?Zc zl*Ze}i@w@Em@Z>{&5_OcR>8rH7O&-c^urOVJfgqzagN8}I?KX;<aSkQ6oi~d-0p%! z-}dKQUnOxCC}RpOP#a;+%$zlhlLy8HnNf+pjsXE1N>4cX{i2%nR_dg4fcUCl?}%B* zrVoi~m~pbY`Z0P!s@ub-t;#H^GEqF{&1)7(YHKFTd?M2{mY++BJdrguvE&+LeoDL$ z67=96bx1}n*}^15lR}8i`~O4Jdk0e8zyISLd+)vXUXeYHy;nwd_6i-VkYsO}$x6q_ zR%C>bJ+cl`lw^fa5p|c8?{(gv-|vt6kM5PudA**`>w3()Pl$tbhH%3_SbMM%3Lrw* zjCr6SHwMHrzb*@3Z<+zN<(6->1Yzo<{vV*6>A0RLgD%IpX9sG$7h#_fKA{yQ;1$jG zNcsd_AF*aW7OYZ%K+>k+#V?Gj4tpcfi6^fkWPZn7{JoXA4N3x{v6WxXm7nYtBD1bM zSgYjvoaxXSu|XVAuh+#-<o2w;vTzeXsuBHR=cq`?u@sZ`aNES`A;?<iE_m?3il$0| zhX?ZRVI6hTtCu>}%IGq%i^7JvK<2D@(`8jDasPlDM$Y}-1KXZnUQ2J^KHoGgIWlHZ zDi5iUaN%6$Hg$|Q#=W2UZijy=_a6IE=vzSA)?VDAQhGAdvd->~4&~|L<s}RZo`=-$ z#NSOq{9TbVrE*0(l1snY(;dHK?@(E0BFT=(f$ZFk+xf{opnx8JPxYI{UYa*LUr&?u znbSB>3o;*H{zSyo{Dn_HmS?+E?&qu9;T7Bzj1v2c0!lt96iqjhT<y?#pyBcN_h0Ti z8vbqd9`tsVP#o<V5T;%iF58?GFBcs6H`K>Y0~T9;MJWOT0${n5vewNKveG_zawwv3 zV%Vx9H(W39zPc1@KbrV+)RZ8HBc%-5avjrU{zI;>K9O(Z{wb9U1@Y9#lTOuHE3O#p z1rK}!P?8I~+VH-b$Ke4gBx({F(EgaImzR8j8S`}!-|y(XpV`N&#CWnE)6&|*+7{t8 z1yhM)1U{3|pEc=pe?n3@JF;Ci<rw1I@{qX-1_{DXR0MS%y9}@x=0L8kw6VyqXX=U> zEWh&9-+za@CcyhJ2b$*!=-1^c?k`gXTs0F2GpcaC-%2H7YHnU@t;sriqmDo*WA@2< zOFs00T~SRIJrpR13<A)+TcEdQ_On=MJ>M!{7~-MVW1vHlA105)e_6=^?Rctg1pF3~ zp%1ThE!~z?rI>JcFFqoV<=y-*OXCh<0h->j{RK37IM_q`1f9$8gFt3l>c}BNovSp| z^QE@<x~fQBWZ2_TKQu3)0HGQ|?TCQ?dRys`g$aVJ*v%{qqEY0;hAuCxe(*h(J2Lf~ zV2RmmA9juC^@|htC(zE#;vg1j7g4+xK>p#2Kbi1#+8VY>v>+zUm*pnw`+$(GrvyE; zrEw9iJDA{C7Iy(+&NO!C!!=#BQ9d*ZP(jH`_l1p-pC}>Q{ExrK>dq&>HPh~Z0>}di zB2tYAI)E&`Ew}R3kd^IOm`L%jzqDeiqI{_9_u}T4^)PMfT+Q#MCHpWh52Oy+efoE? zoo_z<G$$=fNDXc~Dpf`Gc1k(?J4FM2y0;-5?L`aj{*{b-^*2;=kCv`ptN2@A4rRZ` z=T9%ro`MBw{~`eD(#Z-GdpLg!vOgX~2t;hIg)ne8gjdO15I4Z}%x-w{i8F%<A^4H( z0V}S<$SV84^Aq!Eu}-fdZVEOwqDPChoSpQ)yq06IAd>t^+T&O&Yz#Po9~jRv#~a#q z7$KA<Z}j1y(RMY~mR?2wXhIr=w76;K4*vzRig_;63l1La>n!Js0W*Dzb!*J$%&FJp zD4t*gC6S-Iv*P8Puxfd)FIUC>ND%G9G!H;T<Y{ZJ*s&p6_iGb4{kncQ5|@D0=(;67 zVg~@4z12KS_o1gv3ekUjwp~&N3E46*hBT!U4_kxi5bbbOhb?4+MSA^sh-w(R81(M3 zr_J+K0(``IMBvxri%ZlDI^5a<8$GUT-5~^7k})?CWr57qgNMHP+*$uMm)LHx^cg0Y z>UBbuW#WJux_&2uk%1w28(_8KEAWQ03?z*`9{(`aZE-Y5M*b0~lf8zf`udGd1x<wO zuazZ1gM>xlN~Q@C$TKtMX3wxan;^->|0hbQYXJ>xt-5N#w?pSbV<_-Q8Y05+Z%?yT zYZ6%!%xn_S(^bsNf=~G#PxVZK9J#GUq1)M7_2AjA4$4I<9@3m+9y&DK^L!>Ar(mX6 zl0o+Ep~nP0ZppgVR&*d(^$9AK?y>pg#GzjTlAg?>ZcruQ?JI9^a$Yer+}=iHC#Y&D z&%C?2KA153a_-RUH%djxe)Vwx-oQ^VrCmu!hsH2eY{ce!&ns1QRmC>H02wo-6p5;1 zI?&uG_X^(=oWM@FVE4yoP`1Y@hGbBTHn3*pq+=fT>Tv9>ufbkl@#k`onLpQ(ifhR{ zsq%@hykvKWpT4((-tRQWD$Q}$(5?4Wf1Z^f(U*X;!wlj2;d4DN+C?*tDCe>+@_f_s z4H->b>8*cW`p8s6<{XL<H!Yr5xO799)6cRxj7egY`NONUjB}JF+l6M~>(uhin^W%F zDAAQC4sYZW6%49&=>`SnZfb=FJENx*s{@phG=!2!myp}5z~1zfb-+m0E|FCkWRj6- znI;`u>@WwV=$)_Wb5AAs<He#xswG@#eU&0gC?+X=s_wB~CLMPI|6v(%R-{%n@u<+Z zgmi;-U$kMXC}_$;m)C<6sA%ve2}v8nK<?IOf9+bfKU$Z-q1PD!JiyG%%;WHIr1pAr z?qiRxGD!Hdh#(|Ut$$)bl?JzFm0N4StM>28OPGJZ?3csaQ{RjUj%;$MMak(?olwQG zid#7H7vY*&fWHokOq(q62^T|P>Zen?C*a5WEFuWABSXU7gKpwUp6g^a__dX-VIdRY z7-1M7!9`!~_R&4Q@WF#EjZTDJOHn+$icR9=TK5vBuG*)W>pL<x{t~Z~rqqH=HpVJP zC;Le7FhR%~L@Dv%64I02W4o7U6#THu1QQFAXB^%S>qS+DFaLa1F%#pCv&lq05TP$B zBYxQ&<aVqB*KaBA(hrc=Q+EFD5(=?MYP$oCny0t6ABdEp!4t?Jfe4ERvgppeUfmw1 zO9sQs!74y6%{+{__;=?4EB+$2H@;asyu@!`Wu>8}>vs-uZd^45hx`fKU&$rh6(Eg7 z44^?poAI^)4^IXBa<#mDkL?mUXaJx(mE^5Ve|oClPYpj8GB~r$pTV69Dzbo>LlW|9 z&knhQNu~G=5>_Z~%DDrYZIo*E=2IxQvW})sJ~7oYqomV>Jxb+2de;!pyhW0QX4MgA zCn^0O1Vy|qI8w31>5&1)rhE7Pmyjo3hu)oKZq!r;A^*DRc~H-ql7n!P7<Rwv-h1Cd zwA%CX?@zXyvU;73`Rq0mHABR2Zgm*sFgTO@+LfG$8ePlLqm2d<HfLS53%JX6Jx2n+ zUXRln%bPHx4?G<>{kR#sZ^SI^cZ&N%lt)$OKg)uqRL76Fv^WO{j>nnN`z1(9Q>2ur zsCzO?21wkfh68-h+8C;F%Sabe>EhreKgFmX)ay*h9nBN`q{<l8Y9VU3{PEo$xC-M; zm#qlV%vbUQr3??VaGiPBe~Lb)c1uV}nEV+_yc{F0U{4#Mx^TdHQ79-W83ebL7)KLS zKDBSkd19l5=15}J`Sn#a?j)0CeW|V^{Ja8VH2C82c)2TF$zv{|iO<)2ZTN&$WkYvN zJU8)V^-jrZM8?x+=14|Af^kIdZ|!Y3D$tff$+U=eGp^N4p+@K$G$3=wtM02{dhnD6 zP75M(YR>X%!&F~xWpf@-TU3~qs}>u&j@k7Km7KYyi#w3+G862`PB#%UDcwg{yt619 zLY}?d1^iMv&0wJaN_#S2!sZs`HOP5F>@LZC@$Xa~Co-qFANT3z-?MPKQWDOpNK!L5 zI$n~~Z*61?+)mBJ{`6guR0I)iq69`6#9CK+?K2+Wj~z*q;S(4WF1-OMx312=H@`~A zET|EWI9||ys35cL`gVRPk0eg9B84&5A*uw&1fD8Oo3dx8r>D@WLQFaYDuo-gkPK>K zVlwjI2#$8b0r5%oRaK>mGR1vtkxBYpd|nN+aM*#lpv`m}kiX?DU(eYa!NIMRB3lhl zo_N#dK-JJa2sUtWDK7!Nf;1Wr^7{LV8{cSFdF$9wIz_cVP8KhhZ7+^9yq!ifl>0gg z#j`b`z*IdrHSpbSD)_d?Nju^!*YR2oVJRbD`iFa+;lI6SN8HQ6b4!GOgYpH_)~mO| z(@-WmR50o@g2Sm1)B7Oq$~0Ew$GaLRLXS#irmwlAPuna9mAWKh8QO7^KyhwVzgO`4 z|8HxPO7%|~&xy~b>p<MVarnxg#A2!0mmVXjr&@!<sGWFA!GY`11uXE!1_qG3z1v?n zo9tp`Ri*Jx8H(^g2vEVtnB(i~8_SY_XGLPREq!%055##J$_aH;c`aIb`S~=nU()2J zX&R=CYk8KrdGX`+O@P_eBTC9(cz^FY){NBdm6+cT_I>5pf2g-pVmO&tBnl7GR0O?; z^WiHvbRpu`iou^Wt1{3m0k%!->JwqXdH;2i8+R98o=E{Y1x;iyj-H8=|0%Ei$Be`F za4Y#vW<~7XcuT~4@S(^DEaQ}_A1x6Ds=9>=$m1oh*FB#sm1E{LsV7-brGZ8Sc<u5A zWZvRE=Zz60+6F*d)ihqHHnx<JQ_^RlD~Xz7B=p;w+7pW>`azZv*4qRfU1eD=+9e7! zdxIDMr2bP?P^yu>J-K93ffN~V(f??8&47M=>?b(0h=cHEFTd@_YUnL*;0_-X`Y8qj zwjdKhhx2!jY$0(RT&jCKi|#t}EMpVF??0Uf-Jg1^8pbft^bOg9gd>F(G;z1Qw@Za6 zE;CirB<P9_yiU>&4NzBpUmgzfbIf(OWg+-d7rglG#HWR5k^e<=tLGPX`pj|anltoP z_%@!1`LqmXYgN#Dr#Ah9PkUYkiXP5z<#3XOdi=n3V9XZRxuD<Y3YAd8^hvx&a|}J$ zZs2pb03}+|$s_*eWpeYRKm(k;*Oh+CnYs;lb(Yr&!|<20%2rQL!+uJ$TD**_p^QaV zKR*7zB(O)0zRHVuCWzbD&5Or8y%-z7{d0ky{G;jRezmIhA#3uR&@n?U4f&kQE|>W_ zB3h3m6KQuuisVR6x6+vYK9U<m7sjsPu3oIN1t?j|kJmnVLfJR{iORA8x2~{(j3-4r z=Q2I5^|q_}3+}8;>P6n88qFeJ%tAW9IDnTO1=7aDbnc+T0-S0s=-ix@PLZcEmS`ud zN#&=!eyr%S*#(5nk+-o$r!qHG3eoze+F}swysu>_-+|LW1HvKUO22jRCX1ID8{o@S zFKa-Ae`a1N#Ibc6EZTYsRYM;}BV~v&_@52)1>HWmTgp<iBbA@dAwB;y;?|mQKc$2a z?4-H_gd*LJ8NIpxMku%xZ=b$mF}jX?IsiLoYVKj+=w@X661|BniR)f}t<?4M<}t3j z=Yu~%HBQV@joU?a){$w8CwreGqiWYEY|U3wys%<wo>&oAk`0@8IPXJNS&H8&Q_9Gr zYFNq}C*IMETd{){RP-et%nzxbiJctWY8xM^G<AhI974&bfboaqbyGUvpN0Y3lcv^A z56jLf_s-Oi1VK2%7-}?$;6F;|zYy914!ly(D}>$%x$S;t#Zj8j3MDeP!Qb440nf^Y zC=s+au7TE(@D{|cGK;(+3~90C{<*(&9i+#Tlam;)yXzY37<US6HOgvvcXv13?VuO0 zy$=d<@d_v%cI&T`1>Kg;h{mAdKbUpKv$@RYXzu;Uhjj-$+hdt<_NLZ+j-?^Uh9RHO zRj6gqVzSOoUX(1I6IwdAM}Bu^4cr`}h`s10@B>fZU~)<d<9~{GacA=7h@%nDZ`}ZQ zL^+NlhfhT52_fDH{jN|@-Do}?Q83Wgz-3c#)vm1Eyf7R#X&9y<bY8E0Z_)(65eh|( z^GAc+mAb8zDn1d1B&^<)ha_I{PV9uCxTNG5qdu2g=)q?^oq%hScSVez3bR`h_#w`k zXc{(?gq;Xhe`l9{6toQ|@U!ONq_+i;y4rl$MuOZx{f6zJ^nmAXM7jpQd{j*Ey|&CN za3<he^WUNoA|?!uy3T^!=3FnBH!RUZc#v>a(~L}>!|<cs2KA{#R^#l-p{qu9%I1s( zfw9R$4TEx<Iul|5d@C3w3LVUv<@acQv`pknPt&FOnYpmXR4(1pA9vOJ%~PM@mem7x zSj4q9>W|1%v$C9@c}~Iwb+yT^!goe%SAXnu3-qGG+-~m7MOT)sRT*k=?PAwc#-95~ zPaB8@;Axn;ehVgPv1H*Mem&5KIZ`@2Lf^qOkdwCM+!Ha=UKD&)$xUGqt!rQIsY|0( zV`J$@NZ?#W_L`hPD%)L_+$orKfZVreT0&54m-6;A-9LjsH3w!1nLTwoQooPm%PVeZ z`zA}YodW<%I`VBWl^za|i>gKkc;=n}PO_$Fc)LwPi$8qS<M<Nyb_jB$WYc9-;p)-4 z1d-7#NQ4K8<5|VkqK-LBVc`d650%r}oEu}lX4bx|B+-HH^*~7bw7XMg6;KTsZXoZk zw3`ouutGPWtSn5PJ;bMz+%zn)%&`cMVxyx2!}hh21%>_1D{k?Cc%ol<HC<x&qrl@o z0{TTSe}Pf2X%9)KtJS=|4|_xdLzO(L=1Vgi5?o3lI>}E)Ply^xdi~Z-$p*;>S8QQ= z|L4l}?0qTO0?v6?ZHm|w-g9pHay!wk-`riJG~8M-P7`NmQMX=+i<eVkw`Jt*iXgrV zbt%Q|-l=%j!rdKGe;x?SoPPS{IsN_s&`Eo-^IzQtB(iPdPBh?whdLs1PSpr_-!e;h z8$9f|>E5#@Y+>y>8?F#11eHuM&UrvEUh4H`w;_|~pfAt>CJt)U+_kwGHwxUZ3_yN$ z3#7YJfc_qG-Kzb_-jjX%4>rlJJ+o{7J_02|BX)PJHYNu?<-cGYS}!a;$Ril4S?Rx{ z(x=5bR3Eee%rM$d*;Pkm$J)YzdUD#Xw_RGZ1njykU4VxHqD}5`{U3-#0TY{(Fld7$ zl*|B1deyTULXzn_=h%P|$P$A5lRRjXPs`3uVNupoEsN#6B>e2`XPCeLKByw!HailP zCK4r7LV@hS*3GXXsGo=SQ3iLn>1D2V;rHk75$t62Pr8FboL!u5-Fqvli9{<fP{L<h zV|K1!gEvGbgft!k#|Pasi5sb2I(CCl{E4(gLpT@z1_UWPb=qC5Nhzbt6?^Ua4kb%0 zLamR}D}!QUuvOe;Zn4{tC41KND<u~NSnA<nfYn3izrfwOh6glAmwo>pV#dBp&o3l& zefM@G{_q_BvoE6;Iw*tBqDH1#vD?z9Ac>v)!Ac*$Ti3U4*pRF;ynalafvp4U*{n0x zjgIiX^1U0k$W5-FPX%YuN70X!Fj!DPV7^RnwQ|Wd>OK3R`8^>$Yp9J<VSGU>F<>)I zFxAi+zrbCILwktqOxZj;%0c~?b>irQaP$Q@T)1Qj$dF^5KUgYSP|&*@Z@L-qa#vg2 zzi(KO70_U2Y)M_d>_<ASqjWKPX%W}EA`K(#iyI8-Z4=dv0e*djyOd9ZwM*J*3CXYB zqIBfoNIcdX-<up7yC|1=h}+IfI)}6nAja6x6SpZ=)Z|Qy{uq)t((&zeJ&cWXZ83q8 zxCfuxRARaDv*!njNisV1e|`Q@NZ6+7c3H;H&PkyGbJN!{M^LNN)nfj2xITkFoxDB~ zCKn5d26<#z+>M<S#qB+Ht)uVyU4xnucX9W9jM~GP0%6+ErtO=_i^G1?y5e_UR;R+w zDl~H`E8cCYw4+2_*CVvCq%(qj_Qjsj>m2bbvEPSY4RvVJc<9(%y?U{O!^zG0<Jz=p zD><%T)8&8<(4QV}hQ;^AVX2@V-H69kYKRv$q((!v6}I@!uE<kF3%zK-UBS|I_d=c2 z`NPfeMJ<a~xHf<^mqk2$+!C?oYWhQtnnPHklKK*x>mC0V+@rrM8*!*aU8}M%)Xp?Z zw8<YwAI3lgs6b@V^cm^ty<F02G>~aFJ3S3uGWWU-9dX5J6S-e8ybEDhxhejgOD%!u z#RiOJ&~f6~Ydu0Nt$RrkjCxQT4icf@a@d$BZEb9RuifIINIHP>%4&#^Oiy0JU@Tl* zV!!|g#Jmtcf53;H`({Hmb8k$ASQI%1lu5pJE89Cbq_fjXE>-ZAiGs)-QuehKO<O#F z%?-LWfL=E$1}54^sEn&*kf3q%;Yz@utCicYXFLqmB9fB*-!s7^t-U%AI5HOJl#mDn zOHukW6lxD=H&yN-wjPCic0B0MPvxhp`&08cv-CumEdZAcq+ih-$YbaYN}=sS<>QxC zt93AqMbL!BCX5{qszAD}xPD$~oZ(hFw9tQ|#=Xb$mM`UA91a#PUpK?+ivHzXbl-)J z&Nbe{7vh)LIKPI<zn9#7|DSqGL6eHs{=or+c13Fy%uY@oySyVb`y**dvJJ6B!#f+R z&ZvQoYw*&~+)!_lu`yx&Esb`6qI^Lzxk!{68;5R)S4r3gEq+6zq+bw@Bq>+v<dwu% zddICx9q(5*^ln957n$kuWnvgclUp-IEXIo0rp=;X^W#T&El}&4C?f1t3JtG)bDvbS zJx%BR#%yRoATWX9e<UKnaYen1-BFp_EIGLimxfSt+Q?3ac!v4NyU!2LlKg|4-<1!h zm*bm9m9Zu~*`a-pOBEc74Nl*kekfOa&ePWsmU}{mqwp1O{eU`#KE0}2z5{^F!)+ZW ziVGe<Y*Ie>X&y*8>J6R0VX<3I1@|zVts*Tl?<2EyG)s!Jp3d*>&Ytd*$0AM|Y#J@N z%7VYL+-$m4s!QBpK|_|swgq+2<fNla5Z3k)VaYV7A`@En=rUcdoO%A^VI#%)LM3t? zl64&y1nPuRC%97DH0GlT4+~n(V|UUZazW-R<H!0;>doiAmwOkPRUZw~<JGQRqaLL{ zj<(cf4d-Sa411KgBZ|02W3O$=Dohq_Uoh21xe(!aS`+tdJ<UF!x`3d+X>^L@P3qsw zR{%yTEA*~a9}}8^;vNI3txyUOQO!D%9m6i?YoW5M@ai<*9q{#ATU5E4%{dlg)nNO$ z_p&PaHRA`qDf{*9JOPTMDB<v*S6vfCD4cB~L@C&e;KZnalqFp{xB5-7;2MjAP3x9% z$A|b~qMQ66G+>r3t+9Ev$iF_As68d?+#FM^CyPz15ZCrx=&>Ey>>jjV5Tu?j&?~2) z;wm*yr3F*|)8HJvwMHg#dHxn93LtBbM?p}L!ZFJ*!qTeAnjs%YvCz(fdGJZ%_w6F> zS#tr1|En-{rfEi;si>&@K^d>DAIFuWwjfY4^rGa2B6(LVv-tkCqy2ye*|LuhUslrW zaoV$pN#^4zR&?=}#GnLw%!%oXIV7$4*mNFw;_~Vae#uKpMUJ??IjZK_#wUxT%?mpA zAB0S~ZZ6e`SeBW}HlmhmlkOv-<kzoXZ%u<zSF}@ii0(&qz0cr?n!%>tjzaj)sUStx zlhB;9GLr+?r45aY-hDbJlhalGPZ^!sinOdFB-E>o#kQC*DK5AB<-ganIt+NB;5Xd_ zQQO5z)&qpd!8prPCe##kmj}NYF~5MSsnw3w2u+OcD~dF)Nh1P0sbe6XT7Y4%R=jKc zHF~$7WV!FZZy$G+lk#nDUY95MDMmE2`hJbfDb{_!%lJXqjROZl&kC!3Th#hggKY#i zza8aKrx=pN8!wqsLydl2=(-U>$_E1bV_8PEKIwwkCcOcwOm-{>>W0rM@p-AO;UFpX z-XYFwpS{8FBA5Rjo9Uv4c(vpdoLzck>rI!VS8^;Q3ez6%^1FcMrLK<HF$ks^VS+Fs z<b5<>S6O!i!)yw+ZJB<=c6ZJ%Voc>iE#a#HU_Ax~Fv<Xi3T}T1=N>s_<r1L=(i~(0 zwjwk#L-6SPD|VsI3QX$4V(C9kFx^@)lokU-0q>_D0Y{uz#yhW%{-xd8{ycJc0dL{l z2c%z3LxXE+cyI3~TwaKZ>M@sNIb61KBOG0O69lNYKaq?v6KczFvk}kACHusxd@q(Q z=GrN{H$QBfJzr@`J$bJ3LS#gS{sUR+YL9Q94^6c_jPuYu-D1{i{iF3MtsqC{`jvbN z$?sZ^;~#9A;(5hQmf&|j`e)r8xIwYNoM=x&-A}LDS~)sJE@9h!lJc7adO>u&*@dxz z4G(}{0szIblft~=XnJbu&$!0Fjc3ZS*EBOga`|s2Z4haV<W+U8Vmyb}i$fu(Og(G# z$`!|&6hWRkV&TB@_y7qxML`9BvIp1@=AxMh!?T?_lS{OSecB@YJHKG71TFD&W1X2* zTwH!~+;#k{xtz<!>GHb7Gvv&dJc-q};D_M1HO1$XF5fYhD5ouPab0k6Pek#nF$8_= zpZT{P67v^ZPCyro4Vz7oftL$X9zd9KeH)yiFmS?S2|SUpjm`ZSVZ@JdrO|tzPJ>q! zxlQIlwCM**-v7IfQHn~f`j1YDCI+ITlB{OxZyr2ntV12<O(baZXx;^<ci*ELd%Ipv zWJ0Ao!&n3)Ie?0~Uuc%DuN3kf+{e^+wt>pV-e!>E)KFIk^|#-kBv#S33qRekowe?K zXYKk5<WYaEb6Wi}YcBMeY!+}CkdmB6!qrK-aHK=*jLn{a=s81-qcVxPzkdUQA5su& zec_CUDdTY^yn5|6Ip8T0n`Ul?cRWWte@wbtyXZ;)tM`3zJt|e{9IqV;jsMEA9%}kM z%EHMdT+`sgWf=m$hQ`K~+dFrSdR^O!xhaUon?J|BE>rgjE)6RqRil`<h<No|rzX=` zN;-Z;7f^#9xApw&X?Q+2$=N0`hIq7_GDlu~`V;BAC7|U<#QE!%nf{`SpDLPR(x2Ff zjdXZK$!Efil{78qT<=-AkzKE~tEHl10NWFHa;@2iT9<t(<jCHt-;(lA!XIb+(h_;% zosOfg0^zJs$3mCoVh6OSKT$Q$*x1+;yH;LhWo1D@AmrN_SUu+}b*T-ZMf4+yqmIa- z%!^}F)=^OdlUq1=w7$loHvj3p58|&5M&)D%Y5kC1fY{)@J}x2QEne#4V`Lno!s7B> z8iK4@eqjP5JTKgYAA%8=ELY<c2{K=QsT?&X{76YY%bKo0VG#O8nqy_d%%nnM@ZUz= zt0%W7E4rjOZoXK%>FQqWB52?CB}sTzxr-!)J=RbqDW)efsx7|4u6G;x0vgPoKt2mx zNH=zSSxyS^7Sy6nkuz?;TMC|KAOUIuP)C@v$gRqqX!og?i9B^`Dz{kzemUyOe^~D= z=z8WaKQq7$>~JTuBr~SsIELP9q7PYF=~PMId!Y0@?;#DoiMv2Ay1)Sle{4<?c2SKq zIHF`9h#i1UDMHA|BMrY{=-gEcJ&}`b^8BNw#o|wDH9qOqco>~^m<lfI+<2q<h_>wM z19^jlSJY*<oDt|o91SMnuYkXX{yUE}vxjbUH#awU8vXqIV70jE2mQE2q>r9=b{10H z{qr;Ma1u-fH~a6EDy79u{xI3$%98e*mk=+f{U4`0QhB|bfHH|<0e@2#3cLYl27iX^ zH?`enyyt{WudE3DaNe>!r+uC+_I7A9d=N0C)(?vd3)Q!j#G_a~!Ey;tnmS<6dV0xW zs<mjq^!`B<oRt@>SHRrmgL@E6>2Tx%RS=nSGB=0%8iL(X`F9`T88oH}eW<xw$|233 zsyHdVE-`E(GN$(L3pkNnQSW_8nRn(My@Yb>=b_C6i$ih?EZ$V5geu8tUJc#%u+o+Q z*60Kv-cXm7G#nXznX=We#*|ZcNHR*1E~tQ5skRZP1WbcisfTMb<pK(Qs$?up{WVEg zn7jHjfmQL4yP&D#@*BXx=tk>LAL#ol>i(w{=0x_BXNW@9{HN%>)-pHk*NeIDMi{TY zBTF3&a7hi~Hj{e!tg=Wv<#AnIs+D&tA#Md_f!Fuo9TwIOoo&Msdo6?y#=us@9^JlY zlu8k?LauW)HxlBRWc^$sL~^V9eD6u3P|I`TYK($kh5ad)T0Z>dD)A)Z#~`9Y5|t*P z^iTT(`cg!mo>(z)*1r^QNRk6uMq1-mr|V$60OhG*)(`_}93;s)wz3dNPYm@!^&Z4| z!X_(8XN^~CTT1FHzE(@?l3s2UArd9(wqT&Aev49wLx^2%7U#3l2c$%aK_)H2nITCC z{eCvK1mAm_P8x}16b>91z@-r2=a*gsAwUcJevz`@vHN^w5@rZD|0nG{hp#!Kvu2V! z{+o4hE7Wwd!_%Bl8g&od2pmNSyld<1GJR*8Xr|d$T?fMHOzM@Bg!_s|w0EczMvd>i zdSxWJ0qw}WpU$&hB1lNf+Cl9El}`X7`XZY}_Hi1Yg5F=+g48wW?UN5gT+tYSBf;Gb zQLD4O2nD%$@*H#`$q95HU%*O=OE%eBZ&Imiv5kjr!<n7OBHyD|*d?v32AV4B8P^V= z{AYG$ydcTF$^O`twDJW|aQw{mEXEOaMqob-2@UQ3%D?ypTmwmhA5&a=vRB5@3$=q- zpq6mU`wfxc9B$BS0dd4Uvk)hw_OcvGc8YaAT8n~m)t6B}8h-x>k8XtLZr#|OC-hWN zU0I6!%bcFHUOsX1&fw7IZ%A!>N4^@%9<HkW<i569*%-<AuVAQ+3Zi?G*|`vD0Lh`p zAZ}hIbRbhMeDo;$?!l{$mI!Ci6JtBXyy+v&%qY*;Lb*D!W@C=l<2-mS9Ijpah{2%X zt^t+C6))hM(+yQA;MoTDBUZcLdxjM(f8Rd7{GgeRr#wK{31T(qNXPb5f#3+}Seqz# z8+Ygwwr{L<<*q?Fv=?lbpxWTC5R7ky=c@L?yaWp+kIrlBrF2(C?nrJ@;_o={#g)#S zZfc+=!Rus<kf469Hnlrqbq+d&$K;@zc&jF3knmx;^-7icdJ_CzSJg#9vJXI#;{hZc zfX;Lyz=%t8JnzlRhF|h*f6_nL+1Tisw;%gbzAQ+$-tax47t&`V5Yn)vH9+CHZaye1 zbbryPY<^Q*fpEt1L-bgBbd*8iAKcX9&LXa!bgf!z_qYa}{Kp#mq7o%f5Xsuw)LACw zsn`}q7Z*-HLyH$tN_uJ)#F#H2A&92^W-dCI=`-|KP@YC4shASu)+3=zGDiHkvJ%m{ zSxu69O6vV4Nj!|fz8z80w~HsyNGr~MJ2?xA>?Q>DZyA)LeJx~+_L^Dy?4U3y>NI|> z0jsf&IS5F?qo@81xXAd(h_EUi<N}43-HpcGQDdOTz}QKxCAP}X?l^mC{8d@aE{=CB z<H{t+dv_SMlrEX*4N~uwe{Mj?T9#jv=4-|=;pSc>w(Koh`8AgL?8t&?(qtXrye_(F z5n19kuK3UHoe@FA<u|29tMB7PpjP{uUa;A;_*zM~n%qF;5c=vOL+u6PdF0o3N-s4| zYzh!D@^yZ~+Q6w178BKw6$GM}Ly!x53#q#A5RP^2Ls<#07?}DQRiXO$3_?~{puZ5@ z=D>=~+~35%y}G9(Jm5+@1m2XwhYwA~0ytT<Uf_1HDOK}%Hn>$kRJ(l>o?W}JJQ62$ zqPW0!#M*-)!xV>$wR7MB$QkIX=Ea>+3E#IKqui6Fdu)kcdBr^4Sfm}BY2nTrLVM?7 zYeYFFT}ABMkTJQ{_SE-iR;(AF7z|hJf{*F6{fzN9CCXFDW<RqKv6F`3`cRBxbgoIa zD!w~3xv3aKT27xrT$PbUsz^{q5a2pc|JsstT9*$P{|EsrA3|cLeie_2=;|~88&tRd zO+S)jJ%y1DC_w10UuBhku~beuvB9b(Zn{_1`X<h7(=2plWol~kG86^>`T6BV)DO`V zT`uNsFVl^>?*saeSY}_Yep_kVg;DyYDo2Za3E4sbB&0)|XQ_N(2~-)t6m5XS_GbgB zNJmS1^Xuy5<-DRIW{4SKpag&#su=!LflPNnvi0nY3`clU0bH(Ehf?i@GiFKVi8775 z{~)>$%og<HLk}^5W4$tsCLbU&|8!CXRl5|-(B(;A-5tD@Y}^qMoU=*HRUJpf_Y1;` zF!v$+k(9u>3#D11LVf_eDIm121yy<=K-L!d5Ib8q?2=NskD0eU<r;qI5icCE?n&f6 zvM6k;Lf9AcCte~wdKIU=&9eX0sa3D(uF(>;4m%EfFy=P3skdY6(Iot!!yF*Yb)LZq z=5ejD=D^Flfh<fnp_y*?ih0MzyLNA&PD#DNK;$Z;P)1^d?A2fVVYHlQCXOMh=sgLf zr~j`bt3<h;YF`U9(JYmr>{XC^wA;A2P|E63v+$iXQA!Id7Au$3G#Utti&y)lb@*}= z_1VTQ$(VC#(I(~SHvNEMdbz#nl8~|H9XH^2>c}~E!zm%dF+(0A=P8U*Y7HTf-soj` zjbc_B28R~TGN*Q5no|ZbTkb@*gb%ZEpTf434o3QrkZ-bICowYsqd5x=Ud3+u8)5ma z5nrudwPD$#5)%*AG2{q~tT%TYiDn~j*;ak%Zs%Wq)!ap(HE0GDoOyhnGFY+N5fZJ* zji(<J{QaiKApVZtM0`=~@y}KCr_Kn!!N9cp@fm|0kUsoK>??0CP=Xwg^fn0b@aVAW zThfI<HVV&zhW`%)Ik0NPsJhUWGd;Nb)TK{ZMQX7tIIYD36OTWKl^d~wndUVq2VRhr zBckC%2eCEOH9Dm|x6dX^Ox`VInj5)^3igD2ztocaJ_^f$WiW9(8j{^1k@I7{$~-V< z_*%yLfN_q?q@Rkn<cgZ<kZMBP#)iiU2`<F^*#X6Di6+43mB<<>rKZ0%=y7G0;I{ZU zZa<+Jk$bRq3;OiTI6V9^A;05U+=>2BK)_F)@kGAiu^P7cD1!KFcP$@Lj0CtHlMce| z#_7Zhuash)6Vl0i)pphNj5^VHJeqnjd3|;W54emXb=K>bAtmsNlhgU_MJabXyWV|^ z90(0pgYQY&<&onX`m!pB^>d?hl`ImqBTqMJr(718Niu=^Od52|Fl25?!^ss2UJa0= zw!eUq<Z>8JjSLM}T0Qh3bm1{<9h*5{p&kcXRjGeLEf-9po{ME4)fWFK032E>?KT9H z0yxVUB^-1zf_5FqB-4S@jso}UjcI=yo28B6l>e|u)Hj!O>0Z=hxkgYzor0g0oOEis zm)z|bE}JMyNSi@aF0aDlo37yL<8$yRec51nZ_nuAAP5z>ubsm*@jXb?zxC5PM1OUG zcbUy(1HVA3T-HVGj<$HnNVeyQXn*BacEw!?ON_=-%oXJA)AfRE5FSQ-gdb)@r(%)C zsGEYG#xgwO$V603?3j054)yMw>}XL;PW*4R@oR$2J;+XIHxnaI48_guQ8mrcvrpEm z`Xyn#p;xJ-hx^bigtl1uhkjr#`ox4!U1N(jH;#{5zQ`|QG9@c1A(bg?Ym7qMGm~7N zkFTnwB?p(4gt0lHjpO`?F)}iKk!OXxq>;>|@Uj=piq;{iZQ1B2>q-?2Qyt!@ABGsI z5yr^I1_z@*UFrOk9P;Ju<PcnNv@tR<>4z84zg54TOgCfZq0v^nV$g1U5Iak}PivtJ z(V`N<96KU8j0N)aGdL-yFdHmyun&X(37v;YbMi`GL9_II!;AEgcP-rgz`EC>tFJFh zVy#bA`Bt&K%*&xd;&Pw^RoV`7beNZfL%KoD>`|iUPnt<qQj)J%zS?zW#gj4yk_mPK zTy7{YD;3c;d!<X7KHuV<v85L36`r)c)cocr{OkNl@r-OT?jw$~8a2IN&eI<ts6ZpW z!I`Y7k}?7pI7r+~>o@7Zs{R|0k$E_B=G6a?M}b<X0?D+B(UC<WD00_-!+U+8a#xP$ za_!d+cc#y`$-|gEzQ4cmax_KDfj?y3lE|P8jKNSskEHNhSAG1wB~Amv<h_&UKO63{ zq^3C>zut@2oFC`9o9S6H@LC7`t|Q_faX^z^QB!shhFydEuN=&=qvKCd@s~_-XtMK6 zC!VO>{iphddySNn^!%4p)PDp-)o*@}Gp*7&@jy*I<yL`6*QTyCP5KzZq$DwE^nmDp z#?))*1(ZebG6ZIhdWFH-r>Y&q`}E{ZGFoYSE8@kYtPV!l)OM2LkNE_<%5~s4p23q< zUtbSQ{jTdPK?@rF@9<KvF8~Who&kfVyU73&@*)7j4IqONToiJliZ6M+0;Cl1KPsU7 zv#KGuE+;QfOSh*L0Jn0`2|$Ey*&;X`EMWcp3aFB%j}!mI&`U_rhloMYtNDYI$A5^3 zA3E<e)YaF%I9-p^?1YrP_I5czqeo7Q0yP<&->Z!ySh0EI?w994n-KSCt+22#<XW2V zapihZ2QCrSbJ*g@v|!;RS!n5yzp*ymi60;x*B&od#;v$Q6*N;rOjjLuk06_@`K>0D zl5uZ3KGTMunke^V!YqHmbIx_KEdxN6Ph#J(L5`~7;o+cX0MtFA8ujc`T@1W1{9Cf% zdEzi<mhUC#ok5=5TdTf+IU<wB(mG`#AJ6zj>SN^|$L1|RoG5~q>Z<X}7z|EQO}AZ_ z0D9msiIsQozSe^-$0F(;&0V(|p)xQ2^`7ldpLk4Z_wW{&lL81+<@D!1<Fx5Kg-{;C z)H3y&q+I1dLiOyL_n?iWt|v}Xw^o$8f}*=5kv={!HYCEShe#o<e8+1{w9ICbR4hrt zq|+L~h&d%R4+&l5RN^3Yz0+|c9HSWJt0w95nus)BduIMkq`u7O53IDFx+y#&B59>% zjpc!JxSl>C@zR<rqC2vD&nF+yhGoypiFj}-?yz$~@O11y-TeK#QQ(aR*eXGg03?QX zt?@q4VHi53IxzWnED-(C;dRnc9@TkAO7X=G<Ip&DOrJ0XUMICfg6Zb}?nd@@IM`(- zzlJGnrX4J>^VaW)zZf;9=)@lgVgXXXarWZ^_TK>5C60OO{S9dDtxU5s3i2q5bPv08 z_PLfm99CY?y{D^LOr1AUgfrwv@V-u@1(u&Ditaba$SzK-sT}cbgyIrUcITv^>Y4K3 zwyL`{2HkFqSGv^ZZ27{vR?>)6Z1%D8B^joVk-Hpv4YRUWPqAVCq)sHP&eC<40k4=g zShPhw6)&fX7W-<<_DguJiMCRe0+cIM(JW2+=iC88s$?eI@+2+^>R(2zw#XqD;RpuH z<wV7(L+wuCKV^SC&@Q-FgFK}5NG!F697l&Xe?T5wFXj5|Cg+I1Wz#1=Y=|XfLMSWL z_7O?A(5=F-4b{gQN-ral=VO!NB7;HGySeE;y$Rz>j#|ulgoDF7nEz3|GJ*hF&<8-W z?1=A81YPq8I1At^>%aJS`}`cF_g`VC$7cNVNlH@2L}{_QM@1={M-7Dn5RMVSCYDX7 zV}$Jx+`K5rnt`7nc_pw)1U*-(kS(}6+d+z5&7PqBdJ8~*58I(kA9G-l@3N1oVQ4<a zvF55VcZ~A1b%y&fV(`bk`_t-kb8|i^e^6t;|I-~60tEv!bWGc0yiejK-h%mvS`q9t ztFKIRA3UgCP6L%K^H)+`97Uil+=dIrzs^leP;)q5d!srXAWG@y=EmbvclMN;%-QP} z13f(^C-qP{)#u?go~jggJ#`_PV)novM4OO~qx6qB&g$t923L+d0IVq9b;^Ir{NiTw z+j}W*s{22v;o1LFDt)^mH*fu21&^}%c%7E>9&v@_C7uvTi%kQZGH!?Q7dw*iDf{~j z%{V*hJQEx9>=3rsfgUiSp%|=j&FmQ*Or#*qqtVq}-qToO;d>kg8Id))a%G1U-m!kc zgc}GyTHoV+t&9mm*XEA1GRm6-*oer)tXB)yFYsu~+*1!7nOzfp!`x==IsQx*&$09K z?5)zsw2hmuaUc4KD$)dm2T=v7&N>4cm+)zpWW+logGI$BeR43MuAyPGNiE_icH@A# zC;qTIf@J+kqK|~h8-CuzU!`~lvq39B*8G2~-dQ_GQHRCQ3%P!;OXPwZITw{;Y?(-c zj0c>!rdzAeK{WOolJHd&rN(<d^^z?>ULahzRSlk(2E`N7oncGiClGz7a^bQFmTg@@ zlOA~StZyOcOkLgCko2_v*mqIU_X@k}k^*h>dt+;ze0Mwdv&vX%FM6>YlX5*poeo`u znE)6RA!{h!Qvbn-HjUo5+u!=e2QJ^-af6^C;Y+;}*ra~ejN~0W57<CXAa30vgVsQd zIPBf?h&AG-JJh{lkMEQXuGEeLY+v6@Fr9o+b^LY=U+CRtN&{Ko5(`<zTQ<;Xmc$y< zjnfW)f&$ezSK~&cbF7qq6FdAv9KaZ-r>D;+abtb}D=zb?)v7h^y1zfL2o%GBrNE{I z!)4>sHIL6<Z^hVU?t<3k!=6qfauF<zC>@C9WME=~Bo?O#Kutl#(j>KCQ(LQDi^mV~ zNd|}SIx^(`+PAuof@1T{(`$36(_!EBSP)=9ng>*A_5r~1JdXP?Yz;De0gTiFlyznv z^5ul!7MXg;6+6VY5D*%E4&Q^5KHR3`pSb@55}Xn={1TRM$Uw*d+erLngl`rAvGRAN z(Ni*8leyh=q-PT1+pbLtLc4IVv?H?L{Xi(+PTnG9TVj~P4PbT{>G=6Z0JpUNkpM3@ zF4gYy_Vxm8QIaqcKZA8c5&H)12X@H#rp2V#8`C?9zV9|Cb3WhaY3SL}1ThHj0@pl` z7VhSMg0VfKW)5<J^DKmq_jwVf8QFA|Rw~kx?|vA?5^FTBzow+Nd03lFWl)D#;%}o* z=`O+>$IfR}W-a8#kE0)r6ST&QNGy{yt)e!eDXF@>;YB=r=pjp;#Ncy(MdKaSq4K~2 z8T7X^Ch;<F7hi8=X0}A;T~q4nyP?d6*wy8x;3(RFytvp0A4`Ao&~j$%xC#P7Aozt| zPx-Nn_v5%{Nc*28$twW$eIsNPe@6_Ot}!R_ejlx&7rZn>M}I_>^Tf*)!ansBb6f1= zjqL)$(tGjyDfb8r_g)1<Rq3kTPo6?VrXzlW)}=43ciAKqDX7w3UhbD$1cep631H3t z!`onO?l4Y}ACJ0~jaNG*LFlYIyg8V~EQ5HPCSHX>l1JNf?GbuBf-w##_SXW(*ZQKu ze;sYa4JzI#SHBZwW5b}!90BM$RJ|pA#rHaQHG|Nz)G0x_d7R>)T8VPL_Kq@%ogw2> znZ(KO(MH0no5Ykzo&1)T7GG_^&aNY#Ou#q<WEO{dv|VeV?G~&yR9bxj*WHfOH{rVn zS7@BYn7Ib9tdQQ}+MyBsi~8i@mCiGG*8fwHsz);AE`|YuX!Ae$2K~#3!s6m?=*&_u zSfGc@o^pj7F458F@dRW5K^QthZ`4XpxL8=GM>GzBUtV4wq%aT+gTFJ=tq-O)kkJ9m zJCI*imdS1eqgNlC2t`Fjpm}X}eqsAPA&&Z8<&*c_g$eb-A|e%Rr=74h)PtyZco5}% zCbcd!5DBbQSsZBHj)BK&>FIg*sU;#9)pVUnvi^&!r#jh&i-GzsQ|({i43)c+|D7Ja z;%RQ8RZpzeuD)TE>b}k(T=ajxjE?&*!HXX%+!gwkKACeG>8$X>0Xdu&ZE=J3ZYVNd zcbm9e28(?W+k4`Sj=MfH!i#<aNdX>V-5UfMwS@UB;Ok#$5}Q|fUlL6%*eG{Y6ZhQO zZ+#}}GvgdZ)3eeLq%G>i6!$MI-@|-tz-+7`{66;gAtV6(0<}uhZ&FJ0QBm|c=-FU2 z{<_j8WCNLXqA?2%@8L{=iP4x<`o`RzP2SyqCy$_s%nafXC;m0dMDQsEyat&~$*&u` z*CqYiyUW=Inm7?AwqD1E#}!9AP-mR!BdU~(7lRxHL;_swXh0p^xhpr%OB6Uifuzs) zk;b1x*=Rje8uBo8dHGH_WLQh6NbNVC$;j2_zC_PDsw(*2NpMS#Cb`BSmAkuG)x2$I zXO{?`_g?h@Y7sFpm8jD?mkhtlppgs*Gf(>q>`c!<q`w6WWBu%0V6L>Dkgh71T2$EP z2#FE&?Y7>xA>g(Dr3p&7$jENCDqkhQkKswV1l@E%y@@-t!`JNxj{~(#Jw#R+%7f*% zk)tsR#(Ym6I4rS+ZcvI~T`dfPp%-`ys&3lv;I%c^ouo>Rmoq;Rq@arcI;ux=92-|f z_P{WINBhnlH4hki)NR&%;4@K;gnI1f%bTM-uH7oA6LX5E!uhtmUH5nPBoIqk?D<FD zk7!+#2K}UZPjkrK)*G)cxI}#BVHp~@`nJ07XhHiDzP61xZ`|4d&a!nKn|F5Yg6hSM zEjBiObSkmjTqVA?s!@s?S#o`ygBf4$rr)p23_*g3-k9^Xm803aM@?EZ1^0zB3^1LG zUOOLE38Wr3G+-;<etMP2<L9%`(OKEse>UmlT1z_OF`-GV<|WBsB9>HBSW;ad<byRb zan0A#<kN>+ADuh=mq17k8q3u91d98j-qFgoKLJDqmjbvW{C3g6S-j>whKEY~e5dpV z<e&b*me-v;x;TVa9oQzUgF9h}fgdfLt{vY4>AF>$8vl;7Vdmv2v#svGf3xSazUyrz zw#<9Qa^`nBQXRmxgnb~HM`19UBz31NGpcxA=df#UZ4E*3(yKO#9BsTfs`fpvT;Zu| z11NA{jD8Tw;H2bzMcYG=LQaWXUP{V*h~T+e#xAALF&?Ow!la_ZZpd4#48cPKVwYZZ z<Tv*!SGlemBkhdLq|4)%IK;(Ws34rv{H{~B&HkM)cvHUs2gS&^-1yKVAX^}G3g8ow zmYl}l0-zy(fA<p7nrBU<T7U%12oN7)xdmgYTgn##`TOU`{r}E2L_|nB;Zp;89}3mx zlKa8Lka`61=oa{M5Mf+nQhW(QMtf<PwGc7yj7&_zRNjWH<49jUg-+ZANJKbmt<M?z z2+9Z`Z-SNJchJ63JPE1A&w^S<GZGHN2L;qPdPCkB?a&=Jv0eIZn5b#MseQ^wV8yG6 z#25>H<PAXwL)r;APNf@9<7i$bshmLO;+@kyno~eeVF-UsZM1)J{^$aatz@G38#PiP z_yDwd73DDRcA3d6fiO4LQyjT)_QOp0EHLWxGdOk^R)OfmUOv%YA|Xi*y(6gSxw=zs z-sU79J)_#H@BdIs*znlFakqlt>!mDdJJrk5?lMJQ!X=SE1!Eu7g&i#plnOLADQpzr zb7K`8VeFhMF!`t`UbHNLbOX?32z6rRqM-N%eN?5y_$0q7a_$$7+&+VDqj#4fHwMaA z#o+L$uEw9Sb9T;>)cX$9D=78GKzi>7(3I;RNY4WHRR;b7%2o5x<?FUuT0?+VLkGpp z{nsM=Dz}9&mF4@jR1344{Kik$@%Ni!Oi$r<`sM2zC`_Lwt2K}vy}fSce#3%Esj})A zw)d$VxXQ9r{I-X)bE!EvK0pVGZf_CG7@0u=JlY3T^lpUy6Prn~0(e1Vp$WJQB<kr3 zjfoY)xMf3-%k_ynni1cMcZ5zrpIA&t)xmjw(<>JH{H+UDeuHHWeNA=ox=ix`@CiT{ zCQ@u*sj(k%apmRZ|MKZF2YH!j4%#|98LQae_x1KV=}APujs?$EeI*7_OQN!tW!cUS z)M1dMK^xq2Fa_%C>Ndj;3)*8*`BN-l56@iAjv>(q`NOSl0RKh<Ca#duN56wOT{t<9 zZ@@*sscs+(ha%wmJrA!db+OAyz)Xi_A^|$la$#CNRm6cUy^8_{0&)sSul^v>8Bu|> zXYQ)5O}J{tTpYMmrddjMs`))KIVD@xV$sTY#T69d$myDNt3RVt&r|Wq7{!sJo}Qj4 zzbdkr(0`~@F*qgOD+H|~FQbbrWL9_KqNz-Me+e=L9-eW#ZV3nph5j`PWME)`Kx+UJ zf=Q}gb_L9pDTN+y>b_=)!j%|Pn|@5;<Lu1wo#x)1iKQ8v0Cm|Y!vUx6`iUda@576{ zt((tNsRLC!^h(<3afQiDO0=!*>=Zr5$p2*c1R`pJ&rUxtXPpWER?@!i57_6de~<*a z3KtyRRaI3l!VhXNSW+k%p-c75r!Iq5E|;od?|}GM81;NNkRfMK_XKv^6R14i^x44C z8oyg1NrEG5e$G03*<}g*Iv^pdm9j%W1xFcY18@s_`ugox{m7J2QLG5jBrfl8hP~Tt zp71Wo2fl0X>QdY`b`Xm#gKNo^iW_&sBEsETItT7!SyU#4X)4YI{O>^SwgUB#@Qrqc zuF3FX6Fu`>3nB6qQJU!3i)=v;9xdGe8BFLS0S6hF(`K#{1Z@CmyXVEK>*RnN9nqBk zk@bRbb!hYQ0355bva(hWuc<;@`-8p^AmOX@v*BsRCb}iENE_b${prE^dGvJDY<$DI zoO`pfW;!DuKsRSFj-Ec3g9(2eNd$<n6R5X9F6IFRg_6$cGcZ|E>Ut@bzm6B;;fdo# z>fVQa<qrJdkh#h%<F51Tk;?571;1BQQ`je;n}ROBd+r28C0$}AYFJstkP}p*1Pqe{ zm4pgeb<bcT9e2OAkylRXVyRxd7BJCH+wVXV@35BMf4HcPAh^cJ%qbANN2p%;OuftN zX;XB@(YgZ&Ouxf11p-1~Patz^39j+bzN$L_Fu-SRZDT_K4_AsxFBI=NDyyixZ)V4T zy$EX$MDD=~Z)xuI18%G>!sPfFY|@DG)YMc$7lg#oUi_ZB+jZNL9lWPT5Rh#6Vs)76 z@Pg98E-|V5xZuc}0H7aA4*i9HoA#xyAi-uHu*)`SQklximx@?a$A42}^SH(UuGo7! zZ{nSgKhBDYM1%t7_!SO7fc7C<4TjdsPQ4dfNEIUa;{y`(`lkvO^D;#&k*><*q^hII zlz>AZPownCcN(bcO2-OqnT3MKJmqr!&$u!3+^H1VlhP;nM`Ah!d3l%oUxNqolJI`C z*udamr0S=0Vm9|k-r`v%CMKxLJ1xD@Kgg!rrAMTpTSRompeWb|GcgQSXOQiHy_$S6 z+-93_%9OI@j)vkHqirm-ENH;q+G}6F)|8Yq+DHHz=MS-OAd>uU$pgQ-jNxpV4Wo8A zxdvnUQ5*5Rl2LwycztNJD{QF%k=j*Sz=dJ~UM*|uFz6AD#yNDh5)cz>TmopQ4p<2> zz0F}@tl-^~Nrg`s>X_qU+XUc+-I&8X9G)Nx$c2}M_7q`NIGZ$J$zK4_m0vArwF_Q~ zAtkpV{Aa2@(?xL)GO%eoJrwwE0BgfS3sz5*%3H1VR_HCuQ!+F*egS!*g<Q7kVRwEw zTA6ObF=XNah{a=&V|XDn!81Xb7a{H<ZpSC(wBHtYH3p@OiRRO}A>!aHqg8i<+w%?4 z^J%O7o#C4cQ)oF0_|>66{tX&J>}h%P3oBi!)&`+^@Fu>3(A$_hckToReu1qZvNAJ0 zBjb7CdvN{!0FD|RwE9Z(*Q1Nyk3c7MAF$qz%9lXfBz_<A)(&uXb_QBXLG>rw{vrIC z0b{Of0e<N1>({98s$}e}d7yFeJ6oL-u3)=fH{$N!cyFCf!tfsK$BO%W0U-j=4((El zs%p~i08|xSF%38Hedic=#PAUMwM5X=S_Umwgry30;Jy6_um;T264(0K?~~>RCLCBo zJ5GZ@Gm`kcy54|swDuQ%>})>oagKZ|izdR*!YJ1Tjcb<4H&Am$3a-vtDt9Dt6qmEf z1w&f(eKv(4j8CupsUrPztwsz6GoTv=?U|D#a-Zci9f59U1A(L<ZehY_e!Riu*fp5% z;IqFAo?||}%+&OB<vV9#fR_DZCEtV^FwC3p6-rUe1|{&YiQ!@&wgHLEa&_2YHszXe z7+}1Y5p+spWPGaLV%6BtKrb;dH+L7PdibDL_UmWwHqz76uY1GOezAE@r=Hy3UmOnb zyoqDOK>dO(H=JZqPEHWujBUvThE5T3D&Yc#v$YTcG3G$-0};sqEqLh#kPfR@cnUTo zL6agRE7>1dWww+c<r7RP5I`CXvuqHa=JMzBRTgrf+){x8|J(Bprru(9rz$vnT~D_n zj$T`bUKHHFFEa_(*)KvT!PzFFe-x>_$9BDT6D~|n3!y0`wp{r0*BpLDF|Yb?LHy~1 zcdF5<gB{WIUKCFLCr8KlZ@*g>Tt?M1N+ib1U2H`oL)Qo5;E;R!=8Y&ehaf*E2L+S( z*D+A<p2M{1)UdkX2LI;Yj~9LJqv>$mhmP}#Dk&9<!W9nRlWNE|F|CCF0Q_<((K@+m zAV+v`0*4XC-IraC_11T|_t%4y`iUbH?kjv??^Rt33qATCu{bk0wPmV6B$fTYzbV)Z z!CFy~;^l;HI~bMW{=~?rdG;i}G`BV=4F$u?+L&KCAr{_{TS|HBo!m#QtBceD<%ZM` z!7?q4QB?^SMbsNi5L4+Oh-Qz(VeZ5fT~kJ~?RQw8zQgw2&Xn9QD8RCLbnY|;2_NrX zaQrT_M-~bN7>PCh=P**myPvmS-(R0Et<BTO`;3>=0*AgFI-$fqc<6x4D#9FSbojHf zyDY=S_DOht7jD;_$8!P#0$&v!iFKU&qggy$VX%hpACvn3$a)WGsvAFk+`O*6x%QqJ z*UCut%+AP&t`V+;vL)GMi?a6~iO5Q2M@C#K%2tw8M3Kb*eV^~|{Qu{7{+;uj=XC1n ziTnAy$LswXn+3&G6bY=BZcu6jJrl8&6b}r6Wb?gp&rF_cNAwHiM^aQ1Wl3<awC@UH zZYue^PXC@tBNA>PK?f|)<S4vmMP4DZUo2_A=jyzBZvZskihd4d#TEl7smWv+d~S+u zPsGY)Fgf%D%o=V`0AqH6ZK20UI7wAP?}3LHeT1jNpO^e<b5^DLA(8SCb>7>5Yx4kq zxBDz^#Tpz#r+f+2FBo`j9yvYqq$b}E#HrpNuD;Ugw+b9J$XPyzFN}Cs15e206a=y| zRF%qLA3xLbiVCQXkkF0*TyKj1dmj+$0U0NO%mCY+q|S`t94S%JUKvaiQH0^TeuNv3 zdW5l9*4@{BE4_q=c>`NpUhAvyy!vrQ7GNn=tJ>PXjmyQ!`JXI>-36|yLsCZIGaUf8 zBy~r+oyu_<cF8rd<T!wK{20q`K#c}Zs!RL_r~d;P5~fMHo}K|dF$^1yF~jK(7E)Xn zA71Xd_jSLK7%Wh~!UhD-DTs(9#KnPpG6P<*b@&4$G$;!9!HdaH4`4KcE&<{_RqPn^ zR%BCm-N+Pwgokjxx1{15W0l^2`9C|D7_QQjj|Y&xE)Z2i_}ZAWWc=nnpG6n0%h?34 zsW<v>g~vn0uq2CwA}Z&;FpDSOK2zb)pEG9?87{kR0+CSk0x-fMH_=lbZjemU_=#>1 zY9@H8r7c@HI3)AL{*Aeyi!HwhwC81LLIAov1@u!%Q}i;8@CR}~gNf(-gpPg8xP!tM zZ**?qF@lm$u&*56K9nXnD~_w`#RfB2$uMO-;M6XA@G(no1dblN+t4l)Ate?p;F{r_ zIQin|i$&0OcoXZXK-qy`D}QCN_H#oX_aJ({w_IZ#O56;iN~sT;Gc3CMW$IAo;N5|} ztL(c%G6u~ouoo=@DhRHeNfKFCfarDI1|&tCIG#&kBvA7@g$K(g`l6#(<jrk%EPCvO zsC3C!n9h!Ni;=Ci^5!z|6^kls*($G2ZzVxy5`<eQka#gz5}!{MR+|N}*E#Py-^bSi zN#1V3SN~fH97Nv3zN#buU0(K+wwJ7guY~<GV}GE#8;2@7O*4Q~n!<tC7<_g>I`0Nr zbuqBDc)zlQ5ZnL)g8?Ylbb;uA9ng!m50Rkj@Scx0ECO;7E9<+3<Z}dw9<G$Y4u45a zz@iyPtk8T)X93F_dae$|Yx1JOOyT^%ZX{1-O^xfnr=%>>?At;Ar-A!p0Z(TJ+vVqB zzqX(*H66H1UG6l$bjf3>a#c%@4DL{e@Y${Rf6N13X<pu!@JYtrJDlcBO0|;-nhiD& z#UTI<5l=&W^c7_FP%~$Rit_X8PpJ`5WkiwB<OQ&znjv^GUSXjG`E0q>F^e=GWaZHl z+RHntxqCb=s1*Sdbp;l}tWP92@|%<0Ckwv}b4u7J0u9G6_{(G5etc~338}PD=PYly zE@9FTC0TJlJ}8QWklz+aK3+_>$s9sMm5WIWKF83ic`iTy2QR~7nKs$^7ht8;!#pb_ zPCKHV$sH?dok$szH25c9>BbuDcQl+zeo$?ovVsP5>t1Anqo$-LLpZt2j!t7DQh%|+ zA+s5-A>c)I{O-=bcktEK!0hKXk^u#C<{4BIXwa;WBqb$N)mF5D3up5pY*7U*r*zkr zNk&HIs7o%js3uyTU;qPNhN?0I`@hsw`?k0L1AV^CBs4AgIjNU_fa8OkkE^Sz;}`l! z8dytOwO7I@qH~(s(&dz{IscDe<K%$ZF27CNar_$VcPPW|oiV(oK>T(KC<`rj@4$(4 zZEY<+J{}eXmlxebG{o@=WHk_TF2H<?>lKj4KoVuZTnuI0Z=HF9;E!$ZXD$fAw9xT# zJ~?|JJFzziUrBQ%a1tY6hJ>YMN;{Al`f**y1YtxI>9eHRyQhb{t{dRakd~*zKEv!y zB%5dDytV(#x4x4U5-C}H5r8M$fakc4pxy(<O3@;aOAHSVmR|L`c1`j6dmXKkGQYSJ zu+Y9d3u_wQmc$f1K;oGwe&?=VB~znKN>4v{{^AfyJ&f6(Ha5f!TEX!j&>RIvE353n zLT@IvC%}d28lAqnunJh@==k`odYfU0zeYAbn-n3Cdxc3T61O3SN}?+~Yu0BTyV4d) z5zkLjGhvBl;!^_UN*QvZDh`u0WJJm`(xJDSlOj+px(%rv%z@3G^qsH@Jso~hokvUT z{=r0-$~x3#s8`Fr$Fp=BNJ}?6+00{qYAHi*IRPv2=~|YV+6^a@(7#2&OHh%_U>$-< zW&u`RC?)xicymQwnciRz_yjL~wQ13Nc(LHc-(3JnwLL?yJA8{<T3SG=&04cBz*W&5 zs-<WrB*@d7?lUntX=-e&qqaB)s{gc$Fylr{;f*fUu~O&HbCn>KQ;2lUo_<F<kXDnD zw>`!55pC!%u9MH+8IH!|E~#SCIJm8rCOscJhv|)kfL&2hQr?^QWx_vp;sgkAbPabO zdpe*S@@-)yjD8%CQv3g&uF?X4d2hi7I9tOJahGay8;oH?)qC2TL#QM3q7@nwDL1yy ze>S6+S(9<vr9jWahjSZjSO6&N=>etdr1RL)i#sLuxsd))Hw!mpiqm8d&O(@y`g`C5 zg++PbvaKz=aKrF4=I3CF)i)W^$i9=EAIybqRF-A{zIP}lDUyw+-S0V960!_SkASe8 zCqE%>8CwW{z^ZI0wI)u9YKpnC4njDOg2yD_#}bv_0r0(e<Wk1WrMbXL9i{yh=qj6~ z<KxCw=}KL4U6;B{L6|W3+N2;WE2dpmlRYCd)8f*l8hM<#Gw>xrfiWwT`V$Bt_j&=m z{91F(xq{-lGhO*4T?ioP@4*vMT1;&Es#H|8;#Y&8IS9)ItG#1Hd~NJX)nCl!1*B6q zZG6-J?<Z57i)%yt<K2l;2)cWor5DpspOF<epafV}8{ZJ1WueD!zkr7hVup3x*cD28 z#~*Ik(UFRNyUm{4D5k(vDuGvHI3c4yUrFvaMH0)Dz6bKf3{Y5~ouB!ii0kCvk2`?9 zbJ>~l>t8H93`?_8Ox+kNf+O(^@LPf5Pz2BO8e5qj(7Vg_l9L82=;h47qKdp%a1(9D z&LDCxGbRFD^gh9^G_^6JbK8<41APACp{~)g%WuNJe%=)vM253Z=>!C{EmdY}sBC1D zL|kVM_Js&r6mzv?N(Nk_<gka4m0vzX&q$l_gYBGan1!%~w>g&OHNpQY?6L!@A3Fr* zykisfzPt;sOGQBxV|1u2{HXu-Lf^Kh8fx(%Xse(Yo7>s_ff@kliEBD!QhkA44O+<d zF>JK1uP|j>V<tCyew|Ff`q1)Xu~t`<mzq5HOJcu@$hA$>b12k{fW8Egonvol4HfNV zKuDDkUn(SvH}wZf!;teK<Z0HzdaaWq@8-S&3V(AQsu(Dou+~&oSKrhPkxqa?Wt~C8 zt>>pR@6V4v;ZZY>ji0YDIR3B3(QvDP^^rzR?pKQ_#@k-nT7??A=mv_aO##t*(Tu9{ zGV_1IpI@Yv5!C1Y&5JER=d#}Z=+UDWfnOhxXoapEQx~8Bck&H6P{#JTO<0om5?b_| zlRTbazVR63rg(&Mx#ljNG1E+(-S=mo<nx5N3W2^RL*Az^PoBj>H6#e;QTB>^_0f6` zt?njJbC$!tKBSqXEyA;7;0##_m|XlaA&34O0!i{Ykp0*}XYMZ>P~L(NKxp4aM=)0? z#lupx47#<5)WcAIk~kxx68g`RBbCG#N<D;Fa>z=qfiV#1hC;%jD+RDq^*kl!Ag{N) zuna?&{^znbmu=_Bn<X-?h$YU6Ox@0W-m%2r-xmuqGBkLsC_aHea$FnMMi@Z;k)<#t z<V=2b2=1l#-i<DMLI9h<?+*ZE*jcvbjN=!A&&2QhrLLwgf=pUxgr==qUGko`*oM62 z;LP87U6h}OQn9gwUT4a6@q6wPNNixo0C7v3(HS5WR+d<3vpk}MaVroZQuw#3yPMr4 zeD2R;t3l+SeiK1SaJb7S{A*3013b0a>xPEpLCWn<WCW<dF)QV(=$qoqOwIf74TFCD zHr1X)(|5Huo;hu(Br6MIL5YIU?SH{U3edW4AUR67Izz11SFQ|DivrPG09(BDqGXp) zr3$qGkl?zZZaDL$%K~fb>t$abDF8D~8Ac@-N`YF?AP4iei$v}^bV88ULbhA=CZ7eU z_+jObkG~ISa;Oip3B4S&h9`hW__=Dl9vhp{k0tOgk+6mxYv5lDX`T509z1jviH}ho zN{DK3!-QafwkL3iPJ%kgkl2?!Wd5T+`(dnp;)9<KwyGZT9lF%#o4=gL3ia&JKbzN> zFt1W=5!`KuI=vtot80t40H_Hzz=p0wC*HPfme*_-ohJGmImrC-Z)*{C5S>=R#0Y<( zYd?Db%(r&@N|%OFwRttg06AW%T(TA5S3w;jah;wSNxoyevuFVeKZZ)_8f^KSP_ z)bc%vBNn=%r-QvH<i{YE4}CF%PaAT5<7RZU{pz!Wc2h>yJgC{_Yr$&~?ufTQ%_8WT z`!GIJgQz4~&Kev8pYq>}G}Q(&F|?A9>MdrjjfLCbFa(n@hI>S-=Cz-Vjg8OyHu4|$ zeFm^Q`;JdM6>`JnPA?GSyf;8c4_U&nNF*yzxFaXkc$!0%BH{SGs)UzHzubw7#Dc!z z4!|1F?S3pi{d}>2jByC7d)HsmJhLK-#Pke4f*0-qsue9$ukbfsU?DbDLxsqQm^5<V zW$1^!)!%Q#;u#?GBd=bq&GAtDRim!j@%v&qv_!-5NXQ)LxeR&C<jI`RZoy;;RX$c; zW0wO&)KX48iJ$Td3X-F9Qg4013B^hE^eU;XV4#yCAJx_>@$BnM+ltRlyng+;)R_dN zBmixZ`8q?)mEgYM8Dm)OAiy5@ZC74IJX5sN&hJKBCdHix7bW;8PIm@qffzloSjCS; zgPR|&+1Ue(UkHDc!=?W1gmiP}<mBYAT;FIEk3&*ly(nr!fjz9rH*}11FnhJTG<*Km z{$}P$7@;x{AMxX8Q!a%!jUeXenhjv(5=)$ZitL}tV?)LHLRy#P&FytoOm402oLFBX zpTf1VnhCtDG(<jc)HL7^ar^^boUvE9mVc7gXg_daht&bKPPR@>X;Owv#-No^wIC%M z44AEX6D{1T94meMf)b_YZckYrZ5K(QaPMz4w83P70jDs?kX(xRd;OXA-dhLXXW;rl zPEH<X$izKrK}SRz7o+SoD{8t4<FB(T&)VV&+XOIBflLo<Qs$Gf)4+aZFQhr^E11ri zKN1+kr@1i{1`AR_V*}SK`wkz+t5>TIL;EX8bizlkjy(V$%ox)qr)T;0*$CP{cS|Xd z0S)x8WG{C2`R!|^jD3rgARhFeH9CuSb9YbUQRjBQd?^fB+VJ5p7+TIyx+{Xofx(fw zi$StjT7EAo&Nmk98H!xFZk+CRKG6`rsAc}v`A!68!0&9=>K7+x=Q3YyH8Zp%9Eahg zkd~VI@X@2-x`~*swMg%!o<D$}Rg^z(jex^A9>9hB0r|_mtJf`S9i=j4T!)XrN2_+| z^9wH)X$~lWsRWnCVahTewnc?i>G84ghyr6}7KW?^FM$5InwimN2ix;m#l>m!ucmvm zgU9lT!az%=j~Kce4<Kx;7LBbgg(HenJ%V!`HPhZlNKVC+#-Z0WwyFsX6sY6vH-R1C zBc}xPW0M)W8d;zhK6wT_6J1Y;nt){}x(oo2D3Dhv4N+NL!V(mzO;NC11g9VJ*T^|D zwCi<M&{jk9fI0&FT`IPkGXC?<!|=f*7*id<Dg+%@PO{$G-u_ia8C-$<THpqTA(t_( zhn9S=D(T5t{PU;b_e+;Zo_?pA)Pf{umMVXp{`^gIQpx$tjyy8CFY8z%3+`a2%0Cgr zcbN>AD--&h82WV$M7+d1?8HyZly*swYuc@t#H?JD;FlN%i+NH(iRc!;Rjm~5fA#l- zC&08qn_TLqB~5f|JYG>R>BOrgMZ$Ezy&vmUSlf4MkslLJD+?eEUVaF53tmNNy&Yk{ zw_$*~P+0nO^7OfRjt7u=E?juEJ>SYIVH<g%PoFjpa1>xPDf-pR=l{YzY<I)&`pV0@ z6@mHYGkDw46Pl*fq|&MLNtmXlCa@0p_u}N&BY2x<k}eFfY<3L9{D^;d7LX2TML-zQ zSdOa_4H+?u4K}5kU4uafl_p5Jv*-2z@M&fqo-0r~#U9SQfgx_xm$`;M`3#wel=!0i zY>JiuL;4YBSGBBaTKM=))VylQ=Kqwz8wb827rm68M4K}O%u@W+VP`_Mz0xb4DW%M+ zLh|hlAOs&s=p+&7h&m~cynxvqFAMwjeu$9oOw_~^O2L=C0dpfY6wGA;B;`kll_(<G zDh-!1jhgI1I2O%+1CXsVbg%j_)!3SE!nTz7aQXtg!-bYj^!2^Nwg$9pvaui5VUj}= zd)4uq`$x7Rkh6@_gsJsb%wnYON@#R1jPc(ozDv~?*t<M1UfvlJXjxko`(s|pVVZo2 z9=L(kkuk5Pfw&`ni6H5Z`P3N&*nfvrx`4p_dHErrj4EruPng?;g;SHheE4!b*`_MZ z7~DRZ(V&dPZ?sliL6Q&5;SMY^ba2kyz{uEG75Ey!Cwg?bON&UOvinxI>fx7~5~awH z8qN;r(%{@dI7wVo+3<e|RYBTTR<i&U!ekW;ch@TmLMYg>OYdi3E`#l&F{ue!YP$#i zkKE^i#vgtGO*Y@6`${(6>E_HS2unmv3wt*`#A}Vj>{NwNn_ke_;9k3EW1OtkIpYNi z?%nuR_@gfu5Mjf=BuuLBzdFM>B@JNO!A%PD(u&HJKJ<Wc0A>CfbTbAdtq-?JCuxUo zgYs-%eucVeOhhdcAKtwH-cD)h&l`^*CpOUXorp3DJw<rzAV<frpX#$N6ZW#9g}0Dp zRJJ!`KygYCO{cibv`>K@A!DdAiy(bp&fov$JX}tkEJ)<Yb7qk`GJZNT<hDbqSW@yS zN1B9$lY~OXK*NbTBcCWso#aH9X`z>tZZ5uPYyiqs+>6z&O)}R@@l7H+ySG0!`jM5L zMt+sArzcz^t~~L&zmycD&FHI|n*<jHAeOJez+b2){Ho|lsSq+th)eBjHRoYcf3|&3 z8z!%lgYcdE3bDawZQI9!bGjiOFoAI>`C(wrf>!YjzEKBTZ<34JVYCB+^P1mk=?yBl zs+@y<*ux#b=`#i-)M~R5Q!(y|NJ3&Y;B|xD7}OjCr317X??0ob-7R85WyR*NuBPDz zQ~Uq*NzeS1A)=Cx6~=Sq;Ih7X5!g<6B}b3skpv<*gnnQ=hBY9@X*vt`e*VI?97dry z{Rj8%^&1$j_u=8%-8GByba{>99ZSlH083+Is^=U<v#2N?Wyj_aLX64RuV3eDMVZ>e z07pk4jD``eRY31ZdeTeOa&eO@{5L#Qk6!^+ko}k#4*M}3lau;1Pi$@ez16*Zc>#b{ zWv<R|xtx58g2&#H;o-k&$t2I6y9GnlzB9}eZKjHIx}B%yrQk1Mf0F>e9)|!Y{4bc4 zlNC^0^Mc_d1*{pu;NI3|^xC<4&-Pp)FU<zDR5o6&2hqKpuSQ4l1{c<Vq?`PLM#p#I z+yfESZNK*}N{|s)E|QXCNzR2Rrof4=5vgCF7A2OE#Wr+z+v^t)_Zxr_&C$URbvWI_ zFm%@xh;#{0qdDRo;<#@b!QsiAl5hV(AXHC^dwJCE=aiL0L4bT&dO;l!cvCy}!@3A~ zn-EYw+`C^9O}9xnr#Ut4HAps=itZ<@%1MqhJ6>H{@t|1^V0oE3+CnGsGGE~uY8_B4 zF!lf&E>9$7EQetsL?A+oq>iSM3ufe2V%2na7tYC7lh|<ig!WgwA>b$7$qXBrK1RFw zv&FMH(b}M#ErP%_yGYVVgaRK~BVm$~5@+7*?Ci>&>OP8jz+_%-!G;4dl)MvB;!;vg zHzQB<XnLJB&I_<j!l1WO?Q%p=9~=HnFEUHd;x&wF%k9@Wj?TG-ARMB&`IDv%CCJ;( zy;ngk5EO=`oSjuxO<^6S8od7oiHQCaHyz1LByz<42W9ByJdE5S%8L6-5<^9aIFrzI z?^|ux6JU;p%w(()kVXv?ZZi4kS`l;Cak@wD4gVug2hp6KU1>9V$z1#Ld$^VV+$Cso zx%~_gRg3VN<`2N0`R<lYIWgKzNv@o6m}Lbh0b`TE_cN2+&$J$njOy6&+DYQb!q&K0 zBUhot>Ho-J;lg@S%nDsFFA1$v9*#~<=I+~wO*}VI*t?zhhrETon%-1#r>W}6vq(aB z@$&1L#8YbHh^*@P&9g=NANq&4M_UvzrlREuf|u_R3scCIHa1dO7!&2+fVpV@f%UDa zLwzC_*PEO1?jI<HlQ!C(durJ9Q6=y*2~n_q(B?S}Eeox_1cRcR@Qp8v*WIRBF!764 zBvVO|D~)(iFA-^bB}j>E3#>Q}fl~)_#kQXKlEEfxSYFcLpw9O*w~<$?jV#G}?5e1H zn67jO+6m!JqFE&9-c@`L{qCeeM6pt>d$+Qx3a>7~?{`yW0{|HRgM8!LKSxF2+=`Da zgRMq02)IN5Xj|$0#ZQl4AH6sMb#j>>8jtru7BQ-G9B8mz$A*5F{K@@4w_d_(@dV>I z8D`lcO$kqLJnxI7v0gS;0TKVE%d98#3h0b~e|^<|)C)k(+;R7xx~8%x$f%<CO#9Rj z2Ss_|GFMF2r1=Gh6r|*Emi+Htm>|BOy6;Imi(@-$XtM}M)!x^MR&Fb8zPmkr<F2QT zunoXb7hZY}1uv$jiMPkfzousc>iEj*v2C;SIg?y;)OFwv@4#5lH%?P1dzHf5me-rX z3ofl-Hj+}FnOaI=!*ee7;<A=NJJ^GK;2?)3uUP2@|1lDukqt`-&>;q$E+)(CA4~=3 zHjb>)O~AnoC}hy-Fg4Tr@RQPBG5Bkta>|+7o`>wZY)(&4%fHN8HILQ!IABcw?PuY+ zU@2mK-rJVioHFb<TY|;J<m5Bb(lw5zQPJ{YS@9CG(55cT_<1p)-UF-;O0d_?pGU*N zT(=T@DVJ{_a8W@SM2h_T*0Bs&cJA{c)zF*Z`^hBJVl2%RKU~{lRd?-ZlyT@~o9p&8 zjG1(6;J$>S|K?>*mB3+mFbo@QnfLN@F2-zeU@^SuwxmofVF7{<o0{wDMgCM01u|l@ zBVc%i<Ba<OqF9V;3n6umk@w~Ae5W)wCx1u_g@3)j9;iS=+fR!mC7jetDffQ<#E-Ei z>0Uao%SNUraw}oR_4FL4xnR+etGVfjsvX*cAXsI{mIIedIBOXh8JSe-tWr!)!=<b) zt$jmdnxvYX=#02H`W0x!fp{BDpZ;nvMM^?KN0y2~>poy*+O%x92@NV#hUu&?-y;hU zK6B<PQ1Lvkee8{SQ?6kF4*dySEuyz1<dnb|d&B@+v`!l*CBsLx0}l>NLqS3+r7YjP zMrsOqv<B(ihBG4lP#Jd}hftwJ?gSi(8=k?Bh`T=;<DGkl3XlsTmt_lu!Z8{yfGBl( z!Q8Z}a(^i9VlVBW*wC)gek3K2qqdm$LW8J8q1)~IxKDl=+1Z0aDe*_}xpeN(KX)5t zkf+h@3=dg{>&L=yXCfc9YNFNP7hPE{{1|0UBHH)y<Hy6p5YdItJEb-|58m+iKU-&@ zzaGtYw>a8IWwdjX$}WJgTTgN=8Q3s>AclhGuJsp9EB^{3l(59VaLza^njPd!Igb%3 zX??Q3a3t<4yNZ~y>s(_pyyp595`=u=R5s3$76yJ!!H8VCq?Ln7Dso}YsQgsur#M9w z4UgQ^loYCP*Bdzgn0~fu+ULy9<+eyvMtt$rp*%)ODa#I+>gzF*Qw~R8zA<1wx~gMt zl^Rc^*tH?^FD?&u*Xfa1QW*ylYkQ~p6h}IGFf>Y2CWQ{m6sq0s?q~KD2By-m=2VT* zk>{LZo)&s~yoNw~Bq_RM^Dd-K+_&!;$7nwBClE=NHz%TahlM^2(8e6Vy1!|bd<M_` z=#c|%QK5hpEvsyIHN1*I0*>oHe+uAbKVHB9xNgMm5bF^quo%<<!Z?6A62EY)X{4|G znj&jYvj03v{hIL(Mc^=@zMVgI-LzbDirs)4$Yp>TVkt+Fu<WUZ*@S6Mbw=X&iRcAL z2K0r$Z5iFHEYry0Oyl^@v9$pxdbVs(0G+rrI@sjJ{jY7uFFNtAF5qaTc)WBmnU&Or z(8v{P<3jnij0D?nk*AdY$@j0innAg-b}h4e0_CO!TZVD>TfTS=M0SPAuseKZmNFI_ z=X=xd1M5d$Qp`6fxw?-VO*)*({^R)pcj+T<-nGJN(B{OEhzgGrWL_s80QhKAvIs6l zQF-3QdrM|MKHuSJ<BS43O+8i<n2WNU_!7>K{wa4I`SR`&+`m8(XDt1G$SrymR_Ovc z4;pNWURZPn449Zqm(H7O@bZxn2T&(`o1oW|eE?gVkpBG};E#J5p9YB<q2W@=R&%v> zd5q&c-e+k|b)|`GL1T?Gm-Jkc4CHj%w0zm<akW~P;K{qoneq`<csOj*Q;g{(xAlj7 zQMHUEaW5`NXp+_V$Xj9$rnE@D<QpN-_n@6==n&Q1CwG>lD_@n9gL{LA&iL8m@jF<o z7{>~Xb6#<w!y|6fU2jKlq3rx)hQX}3HD-L8dRcEXfvk_)bwB#QP44(pt>_q7@w@8r zoC~5_tm`CNat#aX?uYfHunU$UmdFG1QcWN>UF5=WIQkq<%aLL;?(!$RfF|tEwocFj zCTg98ev>8YJjo>2xX<MA3tqCeb~eM98HHF_&~IGQ+&f*OB`yk(Gl?470gvNXaVt6{ zs-X-HB!A;gfv(6!Mm$FBn8pQjl2BAhWM3O_8m*KH1LA!!mtY6(V&F2z%eAOjXk*m| z1U7b9NnK|z73VQ}by-0YPqHHI<-eVw3mpr!A!Q*pU{wl0h?3Pp#wN0925|b-pR0Fn z4xA~a5m`CWxw83cXbf0(KT_D_;M*J}IzViGzH@M=cXToB<Mj{iWi%^YAh8dlek2Rt zeMv6<x85QpG_pw_R`8k&U0!LP=6t4gr;I2=`yt>A6|DwF5=+AC(IqsAwZ5Ei8KF13 zCnHOjWbQyl!>OTEPlg>Kq^72(gPN0+r1@})QybHaEPDm4J9rIKz1~_y0?T7|9~e~k znRD?{(~5o#KsxsBTCTid8H5+}fhN|o^Lgh&$YCu;c%k8i-xaaw5<`|u5n}x)oU;{v zqXYc|V|2%Oc=<atK}PA8XQ+EYlla0~&=?`(P{6bb(HB+5=owRAvFI!vFgHJ=^>xF6 zm*{w(f-$;%PTVG{oyPs{ZKR=Z+B^Y5I$fGF|BN;JLDIv1de_&j)W8Q)xcVwv@#DjM z!^!jl88;fSYK70y>+2yUcjC;(b)GOiY?|XN)NKt3?PCuOPQ$b_vi<`3DGW1>y(vpI zgg?N&9vVkigN6Jiy}Ugj5|CDU#^-Qwa1f7$CT&KhrA|3W<0q!sx*1^q4#%Z9VGhb& zI-3k<`16w|Qp9zF@yuB8OanG6i7Ds%*oIrcBL*KO8IwEv)A~TPs*&_2_<l$Jc^Kt_ z#d(EI21Tk@tjw<kmG)N8YKpMk1i>r33tv#KFI6?@Er*)LAe!NLzZK?yIV$$*5Aj3E z#6~fizd&_yBgaL3<Y(ptp!VL9L1J%_-tfBRN}(ik{c^Lxi;7q^rihpNE#Aj-zP1p# zwKm=A9P(J37Y@1%9?Kn@Z9dWRD9HeV(Y842m~k+_#!TQ;u1{~mj1TCH0~JT3W_unv z4%1WiH=c&;6*-(|<MV>(pMrATqC(FixqB`GE}szp#_N$V-4`jO_cR4rKzD8nmT{|( zy#A$had`=`khX@~%!eu=OGhO>JR(!cKkx@y;T%r>{CH?qyw4QdCI*HJH!Nu$6bWsj zo1nDL=r!y^x%U7&YXC9uVBOHZkKr(nuu`UBKQ^d^p^FnOi;bI<(?x2^&h$&j@X@hx zO*o(R??g#6CejV|M{-&TGS!2zJcDV8+Jva6iK%I|5miY%FHZDKF@8A(x9uA0-g%G1 zdmwSqzJx_Sp-g|8!SaX~SOxw4YpKNT3hk8d&!0d44?YMKo&$H75i)H{P<wIPG3O1T zI|Xl4*zmaSF0r@W5Eclicw_PW{Cs#V1h&9tORvuLsiM3*qy)NNpMCqbKZQOLq5JM4 zr4d&g#khzXp6{A_0qISTM#9-kTK?o0B~i<*QnVC%Kfh+^437%fOC(oK8hqi<87JMQ z`W1EK&(d_J?dRLM&&KcjYULBRR+@c6Q3j<42mE&&Vc&T^MS1z}M(g3JlDcYYYl45n z>)V|XT}eO!>r8dd>Xs>`=s186pwlXIc!+ykz;C(yMd!y=LF%}q!&*23hrA1ji8odx zdGiWx=jx&gZ*GniUJNs$T@0@fj|JXXKjZ_~4*29%+y<ld5!;>DSXPShkmAGf5&iob zv1^pLTB*`Rnwikt8}Fa#s`VN=08`(-8AF)#w``B`bSHrd=M57Hj51Txks-gT2LdAC zgFReoq#-I39gn#)iA%H$D2`-_5(Txfs{cl6Qv7$)K`1og8?ehT@blZ05H(-iv{|NV z7NVe_FrR^l1rPQ`qU6t%EL#8N=?GUvD^A$#GZQ9KyaAW#l&q2V&~NMVRA8b$zkLi} zxwvXYo!{r7sB{Kd%50Vv<wI0qSlO8)(LO2`X*r^=>}}Bty`Dma`20vSdiE*6lR<J0 zy!nf2Tx2`&G}k`F2Q{2i783gO;^gZKK$t5-06Tzj>N_AXOjjXR*)@RhLhPOckYmd= zzu-fNVk9Jo)xauAq|gd9{<RUmHepKv0;S$hk&^Ix85xlSaYqln``=oq#%u?quda8p zU8N??xH_`GI%B4;+W?O)1X4}Va;ut)Mb6}zD!z?tNbJUor_8;MilZv+fX}aDo5Cn! z%BdC}Vr9kjPOLpv%M%jZ2GT6mfs6vLb2IromAy@n#M^feCI{(SXIv=m6@&U2c&u}^ zuryYdM+j0|6jHj5=ZZY#8U;I^>-P5S@07mbR9+^WXw;}oXb$2A_Ah$Jv_Z0Bk=)f+ zOt?a|v@$`<s-`BXGiNBTB@7IGznYBe0KENXr|8w?o7EAAs}Q^Wcy`S&Fio(0ZagIb z&gB6G@u=!}Vzk0bIHD%N0y1&(xmVo4|JRnav0A?Q0+XY}38<jiX7Y>uqk0D_%PK}M zI(qPov3<>)#2nnra0a6sFwSfw%?8GL_h9T4S+&6);u%QKH}ujt4IM-^KMFjEn|jyU znQcponz}#Ea2;GhC0+Q%w}ARuu}U1DetV>nk1fh-8{BbXa0#mD9Y6#<95Y;F<R7X0 z@3l7}aeoOzT8mC-xfry@sGGW<|ES5V-kqH3C^2w--Wx-zp}P%)4}Na}2`X>WeNhDC z8#pb*^hL>gv+gV2v&e#zo#$;T*15^z^96Z%bx4YPEirX*ZcKZiTq>k9q|_ku%(37l z<821z<GQed!u_;qGaPPt&dl?6qfpzqC(XKO%}rWs_~=us)-D9Nfo?2w(!9uGD%3-* zn9BPJ4DDWD{=SoX(~qxGI(`}PB&<IH)58lZ5UW3Fc`6APmO>tG7Ck^<V?Rv37M8g3 zyzs+P0C9Km<@chL3$9Y(Dgxbfwc8q4ZOyBq2J2j`r4a2QFC~gzw_bA<0AtK=w1qGB z;SaL#=qJNsv?t15<jTv}so6xTL(u8uBEUIK(rU+my_;t%&7q0+Wp$T$sU52Vh3V3d zGWTBg@T~@{K2pR^1#kFM^KzF4fF&EhBR=;aEv=ewoEA)uACM0dn<}X=Q8$URye7=Q z11H=W1m9gXlD%f^d<Lgtnz9Iy(cNz^gFcy?6`cJB5J&FMq!>OlUHm{PkX&Ca4bOh` zlW{{#?kLbk{kg89ywvyziMmi~-yj~XG2#ArDRyWK(ViORn_B95MXXO(#dk^d-&;EX z1iJ#2T@GDp3BEgQ^$!a{r5OkRmCak^NmG$<gSN<&2po;rn^1%vy6|mNtWECSxqgdK zm@`k|a)H-(eFwqF5$M^ilRZF4X47<e)JLDZ{3>+!y=i@(FV_g$OlPh??UUyuR=&}e z_MZRS)!s4={Hq`M4F>UZcTRdX^Hq+9cR~13wsMpT)IPXp1{5@Ykt+;~*Z+_<-A}+s z6XOhF7w{&21BFmCCpyDcma($$r}LvUzZC_6`Bb<`0biPXn*<A`aPAazjqpUD0-BpK z%$V^F#(y&(-`_DG>WO2U+3;jvVCuo|ztC7tS)rF&j%B;ms20R^mK%rm`O*yUbk*SV za$iwWrBpYMcO;RqfEwQvoG(X}zt5t|+M0764kDtWc1X)InDN8ujI0vq={Tl1(QE)u zCIn*oToH22E_AKDCtoIwRAIH+BgLZ9qUG_}s4LVVc@&ydW^RQC_|=qzG2O2Su(x~m z(q-``RZ<r-5X7|H7eZx~Q+Ah6PZWoX6%8z}TzTz1RenU!npwvN_ABql#m}pU?Ta!E zMBV{IMxu|v3~Zp`sB8fokTHrr145;3lV`=_k#8SP$89<Wh$q2&#jmKys?Eb+h3bQ0 zqJkfYH6)W~gCvt!{0SRKXHJ3hQfrJ;Z7~SpRtYdLGv*vJBJg?++Bt--0=gMk3=X@( z)EY!@$6wR<(T+spF-^y*>*E3lqh!?XoXXKOvp0<jfgBexNG?(=a44FX_v^>{^1~TF zf{zC(z<VhQu6DSj*R!qvp_MDtxJ~{~ql<~@9pK0q#}A@{vyU&*5tv5F)1ZSNlj9Nz zJ2`2XD*Lo)*uX{s9C|kQr3jQ}W@c_6;l7^8Q0Ysdj9il;*HCfGK&X^MEN-b?k0$%* z=h4Js6gc0JL+23?&<)LGDe}PwspSl-*Z6{mzGk0hjpPExHv>_+FxtO;o6*3}-tVs% zyz;lR5V_3swB!L&j=%=H&kswV{I5r;zIFA;bA)3g){~WGrPglKUg#>HdNKJAz~C=! zwEQkSZb{zf7E{t^$1^9w`2gOA#h%bC>br)cNkE$`pziv_OtR>%-s;GP9B?)-3_#Sb z_X-|v@Cgp(5YSxWy_Oj7vLZ=QqJZslsH_<>LOzIh6g+$|%5<aXW)(Pp!SZ<w$LqBd zAe;5QSxa(f>?fyvC*j?x3`pb(ZV9kLr~`9N^p(?|@cd}$3knI9>6_<snt55Uu2uq{ z<7@CzsJ`?BEadCpLVWHnJo;LiL{%_}XwgscA02=dRW3k(i&J9e2_IOZG8KpIl>+1w z_!%=VhG|8g%rp=ZBOszhRuVe&MusdcQ(y0KhI=`hYU(y}9w=gfrd5WEDKJXq5l)+w zy`|n(4r9T%*cIWISPu{XnUlZEr|z__$C!9%JlAS!M`8bK;cN>c@TcMar%%aIK&=dQ z2#2RA_yEPOw)o>mx8LdrW}_dD`Zx+4?;l7kNSoEj*nlAc1{OU0==36p=^t3TkriAA z=G=2$7-MM)4SKufh8aq4<vOEV$xSj4>vSp(lt%Zq3g2Fd_(SUcE1|tvkX|A5r&~NH zGxHGD6x~1l&S0gKoECxk9>bVIK%U~wJj@;35eDd>dYBwgpMIg&6tT_B%)}tdBC^|9 z?%^;=s2eGTPWlL_A5eUJV#yH2Anr`8Qa7gGgGah~km&|@*ZlZS9*g~~$2p|O7uYS$ zPV;1TcifQpwIcw;IBx(w#PeeL%}Y>tdDrGIs8yw_l?sb%rw6C(?Ci}1=7qJ__rHQ3 z^{O$(zoJa+o@V5m=+tPFbY~rYloiQ^E8PKxGF0A)DJdy%b9TOtiI`?F>sh!hc_#~j z4-)|~J~_cT@(Pj$B;y5lG80}l%#!mHjIJi1ro$HVV#OYnCeGk1?JeME8L?bTpU1fO zWHC}*$kR5V^dWew9TI_G#@}&61GDqdW!TJwySQpE7=7(S5j%P-8LY%w7uiI9`Dt2f zLYl_nc%d?*@6=dKM~X&EU;5vKgmIz9ZmU6|4fdKYlY+C;P0oldJ}OaR&VJA$taG}1 zcvP@q`@b4du8C+qHKW4irjwiJc&hYR&emp2xN6cK0o97jJr^G@KagSJmlVDd?WL2A zTV3I$R{ISbH{V;hyQt4xZ!377+SgXWC<Zli<NbU4{NdD>MKs*cqh@kmELCcb#$Ton z39-4gRC&XTEFzDLtiUGM-^P;NrZoF|k@_8Ou6%HFPYa@yC??FkuE<PLE#K@;1Njtf zij>ASy1fNwF%7L|1b;c3sR=|zav)qZyzpTYO1a-^)^=_+g{D*cI>qvMY++%>&J8`M z>4Xh&M7PT>h1OUwkY54P^{-lf8k}x|j7zQOf4r@?d8k%$`!}0?<gF9@sQ~EC_&Y(3 z8PDeBlO@W9Z6_gfwoUzK9(Ya*X#~Z@UWX!_ueCVJug(40JcqjyzDs(-8Wy$XBV9r$ zFLe~pf`_k6X8g5lK2WiF_=D0T&G&$^dIa8*=^<#;w!$HCwJRWwZ9_drd*gb>Bjxsc z=iX!tQIdSU1!8X1;2<RgZQ38?=Tp~ae$!&rI$rAJf`Wnu^<FargI?VFS@+ZBo>0bf z{$RXJfy2CSS-{g9fZoSZOg+Hz>F!7TSbEB(-1ziEGx1|#gDfEbZzuPTs;nM&zkhN1 z&zG&`eFA)j=<&Hg156H1sNOQJb+~ix7RZ?+^-m2ec&X3PMde1r7{LSgiGkSpl*CDa zAQ)yrWJJ-;TgV6WkjPbx)4ky|BHQ*tr17<nm>f{qJKIgC0%8Yfv7gFd`i&6q7jf74 zjT$rnza2-&XO9+hVFr@`n21y^R8eFe!_q(v#&h!!syFqz=*DNbIHV;<cg4LV!J>Px zLx24}3NN#;H$SH0agTqED5W(9cc+2|s;F_k)*ASu=J--r@u`sYpi9CNP5?l&h^V7! zmNWM)A0q+3)nPTV>~c>TXE|BfW^%XZ@7}$u*cO9hqxO0}@+G4MMAUOdx=g-)tqx-q zD6^Uco8948;i{1oxc2i237B~dRhE7b#fC+{h%)ZJz~~$)`Tgxdqz~qnGlz_PSe(Y7 ztVli`8w;N%{qZ=0InTP0v!fS3=b8+`1?I+wozyO)F5MeyyU+dNVF66nZm7K*E#K(` zxTq+*d~&2axzgaIhmhx)rmH<O0E_`Dq2V2Jzw=RNes>jp1Z;wvo11{b(9?1rGy-2T zwIat925l3v!MYlT$mch{J+f<!@9r!DIhfAw>fjp5#kjXIe_|j<*nJCl{8Q9hYo_Zt zIH?oKehaDkNn7Z`^rWF1P&{<V$y_k9H(c<6HMG`_Rh5v2h7MO5@UHNKqlTZS7_LAb zew);J6FI5eX-~QqirOK0S<c?Z^7o|;2C(uvgHuId;}kttWNLRCH!EvGM5XR~T(E*C ztBEA-mBN1D^i54tQLl86A>60!(IxoC{HAw;tWPoswZGrb^oO@R6im&dO|zmNtGO7& ze#B-aZ3+7AamQA2BwdKY$4vzgYg>q+?SS^)JE0io@b+F(c`Y*JE<*fqNMPUfaM;8C zT~)cH_@Us|{rjKpwi9`hHGPEu+;Bj$HkJ12JFeN-yafk(P)7^?&`apQKZi^tC{h5b zNC*2gD7Ju~BWk(_hrzGf)=v(BS0aTs|EQo(vHT;Up-n{rwxxUct=1REnepIK$FvQK z0}$|i>d9-9JP#{YfJl|s0Mst@F>nuIp5P!RNSGB>>!41~!JAwS`mlj6^fgpwmN4*c z0|f03kS0U35ZaX5agGziFk_3pC4I2EyZ#c$MpOeZ4Z}!f<95F;S^n*LX=&P9#FW>8 znQD%<ndf`{M&v6sF0r5cnngx@(0m9m%#J}PFIwdbEsiR7D}c%sH6sek&QKMPM*%F$ zu>OM*T|?K~DugaB^%d3BE8u5;;c(B5*A|(71Ml@q`;D`h&vF+bdHtWBHvU+_Ge&Ki z=fDJJO3~QC5Z3_6u{I6PRm5T-g*T5;3q^xa52h?ywJ+s>L0|H#*3;Z*z8HC93s~sb z*0o#@-Rz_{l3LK=8%e8jd<*UYG1jG*%u!6NG)AM>hd-J(z{&IfdR2QYFl0rxV{o&m zx>lAYDlXptJnAHi4BQ7=Lp5VROTRcS@6Kg{x8_ntg)UgtK(yrG2=4?VqZa^gQ6=JI zBO1TTeFSuF-n^-$rRC!zb(ZXAGc())DuwN1VdDlKB!&)iy!rs6jph(+Mx!M*C5IU| zc+DnadV8FmF#KqaPLd4)@&CYWwpRCv{vZ8iYwk8Hg_JDsXb$eSslBzxK#&EF-V<WV zM4*9sTF}6ZC_YTRJl0v1RFOzF+UcJpGxY%8=giJcPr}HCyCvitIdYfU=0e1sHCX-t z9^KEFmYiHc9t%h;p4a($D)>Vd4Nqkm@^%}TTEHcD<&i9%TRH#k>QKCvCKhM7C!8AT zruPc{Op{$2Qz|E_uWBtXt5*L7MSi@5hAa+-#R`sbgb8l~b{S@@<9v<!iUVxE*wv;s z`Oa6Kp~p_8uiH0UlOlYnaOOje$i(z?{k(eOW-)_-?2ARrnl#+!j`8k4KkE9|Q+NsD z)A2adV<%(!SF@7MA@mq*4_e34P4q%RtfBh(0Af}8K1n@W`opb!Zw!hin;CkqhTY19 zICVDZQlla@9O|PU_ZIxBCcQ#$ZiAi|VX^DMVLFyy+~IMIx%Y;wbm6xrof!RvE?n0$ zV7Z?SKlJnQ4qz0g{nlIb=s<Xtknez4%bWyy*FOh=eE}?-^3M`w+N>Y9cI0cfmg<3g zAblV)%}=*YVH4d={3AsZPx;iGCQIBeDel#X-iEQ)JZMuav0f|3fS~(T%IbVsj_&kM zRDN@aVeh@w^wx^u6t)5PzXvZ)&j)SWHnImPeOLd$K;e#{OnMXhO94E05@A+1cL69= z)eszQT*I6d{sC1JY#kyAmGLkYw7)OV(ct*D;IU2k81z3ifp}k>b?*#~3_Ztu)zF_% z>E=}FWGEpX3_;Bv`(<SEqoB*9$8s_OVju<-j?at8pteYAG*<yyO<^G?%{tVJmam(i z0j<kO*HFnSDmo7m@i|O21@nE(ht|Nrg}GG_1)pbTqp|Fh=rbdtOxk_i(4t<KxSBw3 zz?=r;H73=OsOvy%udEv?iZrQ>!n~BFGgi1QHTaE>4?Gm~i2M`V07~0oBGzeCd%VM& zDk4y2B#2_lq53yCdAS+W2TD{nCb{7SuThLEyNn6FZgQKE*}e^3`*(oR>5=JdYK}wq zDjTe7D1M7mYI+PJVnV?E+Tc#E(8G$M2IT+tS^p?8KOp>&x`OO5@<~#>o&qrDl?VPb zprp~@vW|Xh%}Q!#V-wG3`U?`fRX^W%5}BhHgR-kbMi)m94rj{tvt*&**t%s6Dr7wr z`y%BYmqY!O$}_FZ85O2RP7;@>tM2aI*LA4u2ZJ=(X%HK%ERhnl-LbzkECBO6@AhDm z!E#Us%T2JSm$Qjh1<`M=fKL?uEY6Vv1cyoZ2X5jU{^1MFzz=|20`@y7bqW<4=I58e z3QkI<wyrMoC9*TA>t<J8=J29V$j<nU+n=V0NN!r_>+3%P37(`zh0y~Ei(c-InL*<H zeIg2z6-9oE;OujE0GruoJh%xAsLssnuxqeEJv_tCXU_HcfgYACAsmJ!xR3?dK9|uN zWKlDS;m!j#h2^RwQ8sQMDT%^OHt${jNo&gmeBTu@mbDAFKhkS|{P^A^_%6;Ii%`F@ zW6FmWGAox)7N3v$-B06bc6rfiCG=hv)`UD}XGwzO@{$RQmmykiS^(?ZjfKZb&Nm>E zZJ0cVQ*)fEWZu0D93|4~b<4<x-FGizShRNB?;|89y6eo%u?EEk;_XBe)>PW8#`Xc2 z#Embyk#C|Dui+*@kGI61brxBTbaMA)7yVX6kVV~W-@~#J{mInEQ%41_)e@Xi5}g4k z2=9>|0}nmmMQX@N$OZuek>PlKWEYQMLJ}lcnR{>e-ucV%1%$fdXV2R3T&xHW<&XLd z%~#kYKlak5rSo;96_pp>N##5zQ1#+h(Z=_2WW@m-XNaB>)i4C=F;klteI%!SvgtNr z;n1UsIdEac=g)wd6om-pQgbyJdc#Bwyakk;gs9P|&meCe-1F5MMWR-t{zR2Ui-{KO z;kC&>VYJ2Hww~gf@mxtE>7D|+G+nZvv2aQW=oRaU(@^nrI^!ZKJZwhDQ*erIu>eNB zG2?#hp20)tCcinTQ1&3+hCWg5+J-;<cXoF6^r!|2Gt4!hn)dhLz411BVoFcdEViYg zJDmJ0(eSPYD&+CEy2l~AYXDyJKM>L5Wy*8j2L~-I$OBNfY-7ynCVQNh(>N4qPT=%D zZRjSxKt#-Zp!7mAr7pe*k-5sNGtB4O$F9#_Lu<s1m|>(kTMv?gUx3WHR&|oBycE6K zjp9unAz)M6C~>E<2)k84<8OeC+iFYxW5U=rHnsnZKi=#TjPaAlQ`R<vdBu@;lZPOS zMAJLaCM!t9I5#6VH<7dH+=F7xyEALnaJB|>x}NFY=H8$_f_^VJC3ZJDq}&HZj-t{G za+?-^+p*S}sTiAXTspuu8x>~g>u7|Iv1m@X#$iMt#()n}^+0dC={~DWZWVI%>L;Ml zR$jx>Q{3LT`ytZteqNqo4q6SoItwHIsmt%f^s{)DpBUHtv!w(!Uc8i%iuZ1R3iSK9 z@1}ib>M|F5cmWW4n!$ZB69>#14)s3#d`(RTBj;auj+m~zZ2k0j$YK3`wl<R1E(Fl9 zuF<mfU~(4%LF0^gN@YP>jRHUA^~UlPx;Q-tpyh9of5W_IsF_h<El2g<4bP@5{s^&p zH+Uh;^Or@=sy=mGXqG$diK4Qq{<sv%Cy8nbZwOVQx!dIpwCNW$CM<Sglyc${?B(IC z)btfM5O~B*(a;R`du{hsy%?dlpHG%6$;c=*)0pK6OXi@$AHW?<1KG<*NU%XamZ(W1 zqQtX_AlwE2)EeuChW-J1$mSBPA5&f9_vc7tEOUlj?59?6Ls3z7svMs0wfh?rrTKE( zHhbwN<lMB7quaU${Ag<uZ5d<<DKOtfuQRCSUc5@p`MajRwvE9l5jC!@wZrfXt;0i0 z-dCxsxC4DTY3d;u#B9KzcSEj1Y~<Cma%4LB^7Y(3$G>1GRz}mgXF+{=sMf0IY{>W< z$tXmU2Sg&?`S<G`T#f&JSU&j;TQN8UJclz#h@L0e1?x<aW7Qk4@CJz+x*M%?mrP?$ zV}ektJp`KCp4wtesaoEiLXBxai?8@%d|*HzW7{K+5u3+(+Z$)Y)e*3lF=QXZ(=W$q zXKoe$iX-|5qxTx##JkGPx%Wgf`mCTsev&sfh4J<al7<*LesZ5Inh~N{Bcdld30d;- zX99ld=;TL!E8eRy_cj>BC1o1JJc^zwNA$DBre4%we!O!=&6z!#P-Wa*2dSBjWvZ2P zSK6nb*w^@RdT=L?@WMnTVTrLq{V1Vet(JP7R=$mAn!Gm^HR3T^w87rggLtfRRA2ZW zI47A@1jLgZ=MQVh(PS3$CeX+k)zie-P(-<uHss3`XXC7at0fdmKD~p@(VV9ECTrp4 z_&*Bke^*(AN@HcE8}tf%Y(2E2DX-e|#Xul8Ff&_j^`H$X2Dub#{>jT9Fz-f3r9H1y zDMa&DHaG8pEh>Gy7hZkzTbC(G8B*HLo(-yq0no;I0UzBi`U4Jmcv{DDMNdy*nsYSF zm>)lXe(irEO1sW+-<Zt&_0*ddm@=P;8d%!c1VM=f4Iwa(ax4mdc$WTU<E>EhTOr8e zMUTUUCV$4N7jDX?11}@dZ)5&zplR^84O><s4{=ZBE;2l05JN#%P{zUSIJEE@ilEjt z6gTf#!r-)ma2SwbXqUrU4FIJc9^)WzY*9{<y5d$!vE>b;637P*Bev8vXiVL6dGSWP z(_%YQ*7gb12e`3eTkx)&YKKL_laq<(TRG2e#4{pND>Hx1eBET0vVy_*eq69o-h;|Y zLB>kL!(pH(?(--=e=9aIF+oj()6kT}(J|c!BcyjU%$Zt|kn+C?oJo6QL&MAtX_R|> zdiVvqukg&vsEa@LWX!EYEVZpTBF{f#stSFqC(L!c&!5Y0poLzksqMN*cX{hNKR6Y1 z8eGq7D{aJx3a`eMk>rGltuhKrhKLDY7e!Q$P-@Fm#k*jVdeBTj2`is+Hx24lNEYTF zdqU;N^98i8<dTugv3fI?{&xND+L~}cHkF#M^qUzOfg#bszP5)dSVl4c#>r)>Tl)73 zHX|?ZZn4U{!<?H<+3mz8kl#*YOS7N4{b-Vdp|@5tah!M&Y-?50Dlb^O?Y`0+`yBIs z`wQSfj{wYbm`*S6=Hd;=mjSr~TRCeR8}9RAOksL@!_ckw_V$?b2yA<S4iono-m^o3 zjle7*NJG@vag@QDJQ(ID>TUpE2d3K+P`VYuckJ6-OAJj4Xy^enKMFkpYyxmOCm!Wh z3?x|JgcFbfL<7e`UX!T{+{md&IL^z+>;fspYwfPa`_U{B_|L}B&wflr0)`@^H#}5I zw40~5{h=e>6l4?yhL~+wT<Pj2dnb;e;n>=S#K@=Ba1#BRd|mV>THeWT<}6sOyhM;; zdv*}m&Ll!FPcS??GGuuSkJaG|z+%g3HYSTWczApxrnPoRv6t&-2uZP<f>?QEKG9Gc zq?sSR79HH6#3hRM#&nlWYkgLS-xC9l5qLAf!9kcchA#<f>?5$HJ33k5+HrqLmZe38 z*7F%4yA{^J|FNj`-Dl%xH0WTfIHYE()SRdboM=}xSSM~s$H%o4@KSqkPJpil;ICWx z!i7Z)&Dtvosn{;iC#CIGR0Brwc1KDFZCuBofvrIkWCc+aOqFnrM<tOst5onyYx}8$ z2U>1jwR~^1+ka`RVRPcBlz(7lC*FWeTQ|OM^<T1`UGgPX&IIUr{w?d&Eu{;u=>jjE z!X@v}W}zEcOgZ9%{-K9EeByy{02R#tK%n9xO1~ch;VS!QJYbdj4Hx@<(loySHmc?_ zsZgT#uma7&>$$@tM%2{UPW*5sXjP>A@_s&1DIcOLcAwrZB$rN%J!#>H<q?zZISfN| zQY0>ZZQ|#?JKlLua*j6@>VoddhbO?HGYmX&+yI(v=8c&7RIzZ#^@X((7Qf{lH7)vM z^>e3s_(VhF@a>yk&by}{2eBZ)OEX#_(d;j)tp$79FR*|d5pt5h0IfhogqkG&5)tw7 zxSWzIOc{|}*p7Yzp5PEOliI4u<GByD(028RjdRYAn{Kn6p2bQ>i3>45KYze}>hm)4 zh9g{@mB~pwIHwBLA}g58N_%?30g$os`2CT)wjBP_adG6hQWK&JLQD|yrC3;UZk_*= z*BeXnQeJ8tWHzl>Wbz_D9&a6sq>|$_V)uZk2(1~8Wo<4>&oqb*l#jQ{R;NFy`!4lJ zPM+3<{ry3W3;ALt<BK!kO-iX|m9!6lY&pg(Pb}PxwO!5SyC?p<w4z?n;EGpw%ZNXb zwr!3S@{1+aFoT_^3r9F}HCo;PPf>xdi_IPguN&qXR;H$=BfP0UK2MU=6luJM{a=)+ ztO)EyE<Lojwy<z^Pk-3Ycmk9<ykCMV@g4y<1-R|HIKMU6sUlV6A?fIRf-&l>YexEr z_9yjuHoabb$$+XSR{Wu9P|oU%>VHSw_O6~q6P+$FzIH$Mfmy!1fI!SG>y9>t&a)vh zAr8MLOHv6<$?OSE<0wl=?21?o8FgaWgrHXa0($+kZ>7NT1Dm>1mU}}L*Dhnj<=<;L z<oyupTziik(UDmdT)TyndAy%tBkzPt5w8&mvo?t0q!%K|`0Xy~<nGxL?wQ7oxaSVi zs0$FP2W3lwC|>%vN_!yWt2!~#bA9~{T<;eOCtl(<Gzb}%Q_v*?MX3iW7VP*omo90) zlx>1tjbt<1<zK>`l6V&2O^5tXK)<RE6!F_Y&OseOUsbw&B(DVwC7Jyj2q=L%W+|B_ zW<W~TcnSOlkjqX3bOt%>fpF8B)mr(4jPOm>liB_CfQlMCxkf6cYN<WbEVctrd=Zn- zF4s?|p1qvpp^|mdZQtCZ{><uXH3s8nKM^FTOc%(*<#}UC?^o%S?`Naiv`B>w2A)x; zJ8ZAO!f}*4%37J}CqD$948XWgJe$eSxER?D>k3rcjzVdQUIK&5U``GkBj{;>bi5<e zKrEbQl3)cX?lW<4oGG8PXRp*`>IUhiPhT`CY{|yLau`2gu95U3?m&NpgUziNdB1W( zctR9z{r3K+PWVmh^Pinn?OB;)WA?E!Ukm}mxHdp$>FOs2ift_R=Zbe`RETbCvX`=^ z*a}y(ng&`&o&rv70Mj<!D$VO1WM#c3Fzzg%Abpr<7#o{2lYrKhj1F=?GqshJIdHC* zg}VKX+<L=YVId|=P_o~3_d?85dB7?c!G1DsP5VaaV&~GdPssU&IZg^D7BdYj&~)E{ z@gEm+*Bf2dIok3a5~VO`G^b!^3k(Fj@1d%2Qf-|4`?&c!rqUJK>dMMe;g65&T(2YT zHLq>HFu?W?CWUx;Qdt)1lL-k63kwR8AXaud`6ZkbNSZ{*{_`pOF_ZI)`I+dU%GB0L z+kHqG$l*L|;0mlwdV=3R@Z<k!?<>5bT)(!hqoSbFB~n95%18@{)X=GffRr$FNhqO| zv@moC0s{!5G)gPd2*`kx0)m7{hje`V`Ng;1?_c=Vd)8S;&JviJ=f3ZK?|og@zBXtR zLCYfWgYvn|;ldrxwU`FD1mKSPOTzOH?-z|At?<7-kh2^<rpX2S1<=BVM+BYZlY?K- zaJqTw#M6IwR>)?{vOwShsT|~Dd3+f}k6;h(G_R_{f`S$pN127u&}hpvTV&?-;(4+c zG7M#<DE3q@IQp2dwrISf2es<cPZBDK{Edo<o7)z)ph((LG_AYH%ui@ZfXx&g9X$?i zD?kH#Jcd!=MgE6~uW>jQY($`G?&9oiw|`iO8V~at^Nx>~#&-Sn{=VE<JI3@Csy?#K zS5<kV!>AK(;n4Oca<k7j-7u+mG{C+rY%%n<0fnVn0FPO$o`>wy5+^f~Gt3vxtNQOX zxQ-{iXmg9ZQm_@?kRhGkW-XoRwp`z_?<QR>0)mJsMNi@$jfV<QH#Y|nks~b}nF^vn zjlrI217J-PYHIx|d)h{Zoo;QI2+8laxN*IBV6z4`T=GbwDK+`4q1ReDboBK7XOhJl z*|5C^a0peNDARZhmzb4e;u`4>=)!N2`K{nd!TH+!OlP&clP^`{Iqa8``^bbn+C(FY z@~L)OY(IF9AFz{Hhec&0&9-aOM9P#SOW=GuwM{n!WB5J*79pUw+=?hxp#KMQ9JhBn zR-R(}nP_M$1R%m@k`!<O@%kO(jxd@iF2Uy%90J#`xj0h1py-p8qkCosfSYgj#cN#A z2hn_bukFg(O4PWHN2uwPb5r7@<h+;eF=~`(bL+HwuuR<WuMd{HtD|h$!lrdi8-tQ9 zR1S+ND-d9ly*t59m{0DdB4aKKbr+v455}Pi-Blu<<2XEwjmMygy;I{sqA*Xi6f`6H z@u&AT^hX-{y>%uoD&J{oE9UTPiJ3VkA)StCHl-0@XT$H(9!Vc>NcT!^5I6p_^Rngg zoK1&dkIFBaM6w=HkhLkWtLO<=@~eKQe0ZE1KcRVGXkFd*t;Lkg88SwT^{bd(=&yt6 z2Wx4Zdx>XpDBsFz3@e81OeJh4)`Pe2-htzSUC>V=vt_V6LY$O*_dT*Fp~C3Sl+NTK zbuN&nx&xyspb%_K@};FC(LW(DfHcIUp^OKIhd+RRyr(S70?k>uoVv6B1AM)D(nR># z!L8C|kmLRi958Ts{Zv`9#c8a%<w1bIhib+PP`|qjV4IQ`voA9Vg?F_IaTCik`-&tK z8;E`24c`URz=Qj0PVsW5@D{9Q0L?m>HYU)5UJzySWa*}#O+Sw?cXr7Gh~;bZ3Vzqu zYT2c<X(g_@u=v#>w*n}Ub~T1kkze3}vI;x{iNt0XF&KscT#CeN4(Y~oDr&_!7js;U z4-|gZDCdr_lQiA}AMMts*ofe>_nDSbhCzFra$@XWk-nh!`ZNeDXXj`kbp$ZETw;Id zP^&4o&u?+KH22~W&uq2b5FedTFX#jy26iV4vMviN&h|pjw!_Vq>K)!zuH<icOk6g1 z_p>ahh01Neare-OOoNZS-%P^2Wa(gH8Yizld$_(-E731hC7pkCz+$Yw>W`c#xzFXs z)Wvm*{5z0Xz#Sv@KmgY#Dwh+jMu<vf8tUkLew4sH@Q=gg@xN_?$}t3knf!SrcYK}8 zuAsXvj%=PrTw_k<!suJ&;Fm**5rsa1>LJ<qjZy8wTQA+eEZFFq*!gR;McZzKq3qs) z4@vY|Ezasv1plDKf%dDQxzjtJ=rxE_V;|;jZT4$G`?7QcKeJz0^9n<%eA?jPT|YI+ z-RU@<SFdw}EQIyvFE(>d(&!z;fCN;$(GgK=vo<$3a1x*QGlS|O>dlk++@z_EBEjpO zyKg`JU6%+pHRF*71Zowgm!>2btJ0Y6#G^2#XGO56d7b83FcZoI*H0LQ!NQpzbLAM6 zHsY`t(4|x5G;z&;uLflE0Gv32_X6mhEyH}Vs+5AaAVz&~o#}+d0v{~|o#df}thW^M z2>W9EDTqWVK0Z%Fu&_@)WMxg-Z?*7%Drkm#98Q105yIn5G-l2yf3I&hBl(z1Iu!>t zSFS$cp)Ple^ka`?^l_*HmUXAw3N;7G6lMPmC<H1ob;c4<=fguU6YZXlkyR#FBqeX9 z&mpSk%u4?tXjs(}K}#T}^gpi=cwR!~QFY>OQ;(o*>K(I+ptEwGf*tN!!5H?)6Cr!k zdu^ly$yhqMUss~aRh-Cw^~W~Z#EdEiYz-(_$nE>E%;PT@FD4g96**!hqb2>ll))R5 zIb-;z!38p{i-lfim&fb(bCXP9FzgEO3g9i!GCBugy6?tctE|nq%mYg#;zoRqZSqo9 z4BV-Gu2jDK<nOn8u<a8wT63|!SzdZ&2R_hO3C_}gf4KF=Mn};mdX>(hq5t@<b<zCM zdQu}X^#1Faq%te#DB&8Ke&A#A8l*nZZD<1s01)T}Z{OYm|5auQLB75NP#+<>N97xa zFiYMXz=u-n&ySy8K~Qrr+(&LXfc^{|ghfR9{UDD6(Qpo%#SK|s-$O{#9H#<riad8~ zNlJKYQeTso7m|W3B{Vb7&{cE(`^2Gzg>QU=$sKe&`Xvt_*>{Qh=gi&@5?k;&uVxu7 z7kCh+U6_c%)U=Q;y^5dz>EH{_c`hL86>=T#h+&$JSlPaQvpyQPQ>SaoNK^+#C35iV zjU~X+3OX5~C5N_hBqmpGutZIH?u{sWq(ZVX-V-XCrp6)%`a<ObTA@UKQ}sY}hx;?R z$ErA+7-2!figTrmYXWh2YEmZF{83qzD@x?n1ku*Z#N%JT#yF)DeyBQPvwXEb?C#nN zuk{YhQrd2e#774?K9b}WTYtKaX6<(4%21De5T+=`DF(Y1u1+wM?{fQ4SonwEfA=DP zivHEoSHEt8Gsh=DK95$POHa47%ko#5&<NEiil0T@Cc21t9<E-^iy2MsrH+pERzup^ z|Bilzwoi*4gHKb@)P3Nmn*0&GS^l=tJ2k7^bUf9j?T;bc%Sc1xHfh025T>IE+!i~@ zr^VkV(C2MWNbhM_x!&xF^8rI+C^R8o{hqq$zth{v17-?HH~JlXkF4kC5Ryn?n94L- z{(J0$i^XDuk2hn{NUbM7Irt$ff?u@H;}9Ki^?e5#^DqFeqUF!KJ$R|gGDyZFq+iNo zT!Vg>s`9Xd^d4Qi0{x&+UkG{i9aap^@zHMbbNAY8?wiO+&dIOeQ>4MJ9JH6)E4@B* z5)<CPvz~+Nq`{8O`S#W$#Z9_fkKJK2oFk@@c?{7Sc3R%aHdENU6Z_-aG~ujw4ks`B zdx1XSIqYR%WRYnd5M=OwY9|htU-%#VLgpnm-3~lk51qssQoGZqFH5fSAFuNdY=K6v zAU^|IYrjI`J=dMqwgdUwet+f>#peLb7C0E}l)!WgboD|~>s2^@dd9{tyVsVGb(-do zo`mVYuZQs`1LNKn7Cwe^$LPDMb@t5M3=eqAg|*)2;k8(mL19)?NDj7;wV42i<Hr55 z6_&2<=|n<a+;b+3!}?`q4u%cAnQqR$A%)44QTcWhu8};&5dg7*eC>0crPu9SJ3j+8 zB-fg+7uVf@Jq+T67%zyrUcPIVQlLp)U?1%laoC87`iG)dKT#H?Ke%S756Z-(dJMT} z7ub^P|E`B2OGV-s7@L&P;e3YQmK`G$EmhApKRCr6g`y<g2ixdmC11!#ffPgbD4-=8 z5b(hqQ9GjXFv|6AN$Ex@m{HBnKAiHpo2=jHcWcZbT~S5WGO^&yGEbMq8}`TFhKAbi zc2idxkv|cN#0(sLI>!jZMnoH&qJBZ8srU^Nh0veSLhu0`p26C<d6O*LJFnY30|T)> zB~7!i-I)?$h8gJY{!Nd_QhtO(VJHcG^syq_XRZFov&d2HqP56BF@L%S*4C>zjEBDg zzV-l3k7Mmp74&ItWIeyeQo|Y_PAWqk4RE$vJzOY9P>_&i#pVgnkv9U;v|vO_2H$zf zWekX$&`;;t!7^vPe#Q4ix$_0vuuV>sDqF>O2yws!fShV&!ljMDbL`PQcoJYylF5!i zOlZB>y|>3a+fcN}v5ME2(=C)o&PXS)?}F%h34|s2(uebeMbjcyc3LO$_t3%(vPCrd z;Lp8Aa~asezHnlZ?zPq#*1%{j70tshLcN=C14|Wrq@}GIc&+2Y(I_+WtDso=nq7tk z5<toxLwhMW`uUlhhnHn6zL-&8XZv`2*|+!B_UZ+eeZcQG+z-KU$~!~R^lUZQH~M;4 z$6C3_owgsX2>XZn`X|x8B#tLdezP28)-NJhR9H-}V`^qTK*qTA;4MrFr~!i&B%uVS zxu7x9R1WAH0A5KwQ<OQt6pDZ-fXXq{veWGu;*Y|aGQN2ctDqZg`m&+FsLk_LsXCuS zm5;jn8CJNBE#L_k4TIFVYbPCC;2s0TfL#YbckS|VfqB)8i{!!*_yON2g&u)vX|_At zd3kxMsdOP$&hG*)@_)nNP<ofvRD;mF7TWFOnzp7iyqPmJQ^tMZ2MLguE4%<)7As3B zwaYaNB8|HwF89#wIjAeux4=3C+-*Yb2U^)l#u&YRJ_FZ;V+i+|_mB4vAvYuo1bsmc z03D?*vR@RKU$fb>9;JhN=n%dSSxR;_aR!oc@DR!ecZ}+}jD_)f3D&3Ob(;j0P4ghp zCuH@U(g3M*7*@Ml#WV3q6TU>1JLi^SHkO?Hf!XQ^3e}3B;hmNUNZtT~5j?S-xlBEB z2);cNtC}XbA&f%<w{$}Tv)706dtbf*!dIS7E9QzSjyFA+qOS8}e6lEL!UVn_Pqs#^ z_pSBO#+_d?=H}W)j$etxl>q#scLxwO^;ucZ*k~4bObU5kPMsFX6*|1rJU=x<&W6Jq zr9zM&xRh-Yuns1Wy<JB+UyuW*nepPO!7?uDXY$QIP$$n?0zdOQT=-dXLqkJ`>sfsG zU*U_R;OF1+kjPly)h)5626p~n>9t|#t61<*r+y-^WFFMos$f_qWeUsyWMjX`1tMFM zVV*NjKE#6VCW)hu+z({~c)ExTp?@{gfO3$mXjSZHpg>9m=1u?`^nCNOx=|582X%0c zUlxVIH4q2K<mK>$T^YGD0)2ajvm%X%Ieq5w!JL!tf>G%|>+neT{|=cVK*GC+MogsW zS<)BC0wX7YD|7c};ALd*g9ky>wOgql1cOtxRDSOSG9EnrB-RC~WDWdQ&dX;~&iMK7 zd}dsR21?VzKlg$na>ExFAtZal3~+inx(uInObyc35cxT5+;`iU<y+I{R3rri!5!+x z9eJMv@xmB_TtZNA<KdE1KYKTX?iL#@qv+@Ye$Uw!YSXLGy<O9)tM@K$RK3vo^Qh<_ z`he$YbM#(+%07w#P{q$eWd+-9Cigu!ID;Cf<V=nvgZHy$)BH8<8F@6UD#+PjKGTc* z$3AL|#g|OFkib`;PDnvv_70E)>=J@~#@sr}?}B{{eLZ&$j0?NO9{tfh7@`f>uXrDO zr5F-LGmv7R+2*k_s4Wv<8g#;9nW5C%g5LGkqfV$TM5(W@j*gCkt&TJJmSK!91!~ej zZEb^jvKK&RYk~dL9@!g)6fZEmJMZNnF^{^Tk&%e~@JGtNjFjnn`5<(%wYRtY0uG8T zcgX`an=Ea5xwfp2?b`l%3vcu>Qz6$GVJ$+ePnuF448TI3`1vh3R|9b7kbqqE-4QC% z?~TX%ji6^_KdQ*Rub74g3*A*%smFjV507;q{0TUBc|)MBsKuO~ssYu_(a&?zJAaG) z88Y!i#7GM*wTagx6iR2FU6$Hm3T#F(KK`8rO<oEz`ZAkdPzbkOdlG5Tl0e0mZW8p; zcm$6bV|_M^_lEnJH9|Ld;09%$+z_RL4Rz&S-eed9J@-{of3I_7u`^-au3^?UE|wyh z1UUDZac!ne9Dpa0)akRtUciw8Z_)^Mw>yF0e81I~94(cD!uWGQAyXg(`n3rtAVG-_ zcVszWzA!jac1znh<fgZeJk9kvh^bWBZe@`rAc;+Eh9gsfwY4>;m7!D|Ji#+I{|IKj z$sT}qrJOkW#g}rLPzRc3D)rE)tG3v3xE_IACoF)Iz#6|>GQ9;$gP{Y+QNRo^SYyI% z9FWdt4yQj03&4D|H&jHOgzWCxMSF3$M#VgAl6N7|{*e`n!o07b=!jA3R2h}OqNhC5 z%&ul<w*ZwDR9b`Z?hu2Oszv{bgO%eWNUfgC>y4M@sHG}i^R{dXB8t2_9{gbOx%7b< zM;aO~QwK-Kqi@B22@`m;tDVTD35G0WjAUcrvEjS&WWplkOB_aO`-j`P^4^GkQAgRU zTw?COHAnGbO}Y`_VC`OpA@45p%k)s4R~N>z#Fp7CBzA@9YQGM*7gu0OkYgdtzjjJJ z=w}MMIRM*Ne`R%g?&k3DaJy?HH5Y%q$hcP^8yUZmi5xmQiE=?SWA$oB>r)(R42=|( zXU{hvbK)&Ka64!sl_}U?0_JNV5(0dqEd&{c&4sdkVG^3V4pswj_<xr{_lrX4!(6JN z(oU<=&a#w;k=_6<KnadyLH`KnkHh0xCMHq_2V9vYfIG0>e0PcuOfJslhI_k;&$b?@ zP!5&;2{q*7aF{G%GRuYOqp5j$>;Qj3y8La#vy9iUB2=gRRM;}4Fs7tjo1JYBymws* zB44s4jg+k}=#^sbFe#o;@Y;f>IR0qJc+J-wx!ORau3jXsSMd1}g9AZw?{`j6bn~O! z>~wlZ!WFX{QHb5(*84`b`#cFI$0!nV35YbTjAE|SaOpH|^hj9X;6C#Q{nMm*b7|;B zRGJhf?t+-YDdKMl8iaVyGu`65D7D+(dJXsp2G%jhFvn9GFT9$XOLbGRwbcgRq4ouQ zZ=#xBtF1e%kBTSVytL$jS^7mo6kk{z(c~kvs(g}&u6gjH9XjI;Vl`7KPuZ0_+(Z=r z_34?w=H%FD)-s(+3>zn<u_ESA0zW1=mJ=Vx*^y-ZR@odnNxpTy2<GH}u!NyZy8AmC z&E7`PA0hrl<8Woh#?H6iS63cWV2B$KMAowvlw=i1gSiz*tCrzT0**<Y=?R=O$Q}j< z2l<SuiXbH)5dYkiAUpt6`7POTh#H6}48o12O4K_GAC_NGjJTqd9kEz5Ht4)HXhrS4 z5Jt6^_2ehs^l)<%QdIxM;t%M|CY##Tt5ITOu*_iFp$XajaZR~Q;^+?DdkA|j9)ry8 z9Ag6m&71o5NDOOG0eCH%)JEqI4+giH5L<t8r={++zLc)icP)oeJhMtg72H739wd4= zk;Hhs)7GrpthM&gYLjJbnVrOUe{=qhK&xnO_JWgVcAQ!&numjh&-YJ3KFC`s^j=9i z5MtOBV0@t-oXCDu$|{g2VP{nsZd816B2YLhv@$z8c*cc{qL=EDIYO}))6g$f7%Yb4 z>$7Z9Mw2}8a>i{8zdAaUpMBHZdUkA^k%%+|9g=OwS+@Z8tS=V?=~mf1f4$Ae&d_|D zf<5s;9vB-V>aj>el5NHG1R%VOXX&p8(EGMFB|GMp8LPW|cyC*nXeLMhHPU)Mq4%gw zvm_LOtsw4YkAN?)zUtZ{ubw|uZw(wD@az<)3j_<zD6DVuj;hqnpRW3+Z@7tTcX7Ky zb}8s>VzW!+W(^hgHR={!gJ?mD_et(_e;#ZZ4+?q_H`yRweG+zPI?X2E@g$6c(rO%s zv1n4OvIo%8T4{=10HC=lTnpIzs@YDcY-o@=JFPYQOht&}lWr1^0U59N(+|V1r=((X zZ_PXy1x8JM!2qMpf!wBiW*xWP)z4@Mh(k9Tls4qf<-|-VE4C8IcYHRzf#?QioHUp` zxs{QZtgH2$4yUS?z3iDrz_%bdCSP2J@xx!!^#m_o&NgEi(_ePAyww{X`sn72+$8$+ z^)uPFdkS?K*>ji6SNL)ykG54Q*m;POFIUQK-9LZbJDTU-2bQ}xD70@v&(*BP`Q=Md z$mPiz5YALMW`WYigu2@kn!ne^`+y-sJW~D6!=>r)e#`@M)8oCNM)uTj8-azP!J;v> zRKQ-fWd#P8FSU_~U}Z!{2L|L06e?)h9#m9d$l2gh$^?<PCzP1U)3>&NY(RB!<u{e^ z^9yNc!Cjfe>wj$G*uxSFRIYw9R!&0$w5`ec<zB+VYl~3(+wqF0ACY<@1BPJN%sqRU z`%x%H{)$Ewg7;=h)kDt6c3L9~w6i7gG{W}7&{AfAUoGlciPh{fw}wj?gf8n~hGbD+ zZqvt-kquQeYuYWTOewTvj@LE9Q|m6kJz(h@z@!1P)N+<5zoJA$wH_DtCv!|gw(war zJt+%Jmt?C73&TyIYCylD6|(%c0djcl28h^v&mI;%rin7U_~zPZ+l?r@bn!>F2O@NL z^(|8bx&-M;W(~_9l5otp>YMbvf+PA#?52*Do)?__#Bg}eNT)S*0~iUlMy^#0sXon8 zcyWz^--s`<LqKq^Ou%QUa>(oCy3i!h*G>()vmn|RCCzDBrYN>?oCV7p{cP7~!+>o; z0WOPCQzJ1p_od^7!pI=}#;t2yJ?)3qA3tQnxXPDqE=Ho%V<{YC9qWM+27>2$Bw)~& zcwWkeP|&^%^ZNkBnCD@3Stt7~^c~L+wO9hi(eZ-L??-Ml4j+w_WSOT=a+dO(bX+vM z5=!o2`laE8XuyLeowA^zp#3vNSBW%UTor3FjMq%?O1gPAVvdIQh2BXEvPCilMT}ex z0P(0R)~c->ni)6ksJhQb<dB^AHdxYBqI~np=c|Ujnpk=66FT9qMY*|FkoFA#Y%lsy z$+DMH@KQ2&oY^<6KTH^$dj#uMWl}9>bU61Zywdc=(|R+NSNl1z*@>)^{cgRtJfZIV zk-;noX}jA<<~Qs5?~u3kdju>f%Zowk#r3F1j!21G7|Y3gIH04Ed$}K~-j~8>Ds-)= zhp4XSLCo{h{YSPtx?#C!V5&xz$RM=^>M!HkQT3Ds`uPLFiksXL@>~fW*5y^11$xwL z4@zsGTAGH<<K@`gz}o9WB_a74;AI(JHnauN9r|k%0QAI*&wULU1?=4$JXiWM?zI8w z0kdRG_4F#CbkeR}u=(5$3Em_HaCLxyU(@&rS;h_8yOwK35|C8e2NeMxSy`EY(<f1b zVjnP7G`kA3hGE8^;`*&oB+hBOcu*N^f>!1T+RdlPxrvriXzq!CliSX3Vz#SDHROtg z5k~2cfrGw3598`OBE*-8q)#TFcC(Ozp`5=c(o_3M7{n`}UE*s0#Y`RN(*@=@NF9aF zg-o%3jc}O?RCeb;`qO~e7?^E%EB>(E7dS7Q_^(#b4R)XZvNHOF9{NGX+T}+yQ4x^u z@Sn~AVQp+mFPzvEB37YW*XXX@HVokE^8yFpAH&1>TqJw%8wKg?I>1D-&0$h7`{Z`` zUnfbHA0&L4Di&I_*RB2&9(y^Od|4i5YiDmjY|Ib63R06%u$p{haQ9N5sFa$9eGNE? z$(l9&&^M;IA|hm1^j<}t_AdYCXtf&$w#jky3pfnO4V<MC24g*Rgfv@(ELo}dXGsG^ z!8oYJI>Flk)oERSn?_Bu=Yl125lH2@FyGfLs6=51Z;N^FcF8Npws(ohNYP{EsA7Bk z#|+}HxG#;A&xLVh{DxQvc4mH19{@2F_$s3P&*<O!I1dqQ3|;(!Wn7+HqyYeMaX-qe zRN&I271+WaElnIbfY1|*yV}pL=FasXh~5vE$NJ-41xAOvFlI4UH)%B#8B_?*38`h- zrj}i%y<0ArgEJP7xS^q;mnv9+LN++oqDH3)BHw?Fh^9k_R%)A($ObmS?=-s&VHS^= zT4<U(@>n9?ny%CBo8L}d<%itG<(ERIssG`lyUs-kHmz&``2+@QfB#Kucw+-83%1BU zB#KP<#4W?66SY#D7sHxw=jfPs2<E%+sGtMy0edFh(<cb?+6FcG;G#sS_a~s>UdU5X zLxt)*DkM5{e-ZFnh#r_!F=wZ0CmsQfm*VoLl|QJGg{q}O!8a{}<+OH0s!AL@s*g*# z_atpqr5p&(kgr9MYjxG!6vleoKUN|aiDA50;RE*Gq7oV>uH9GfOeX#S@q4fYZBg|@ zn{L%2ypJ>Mwy@0i{=iQ;a<~B^BtzR^Zbk{P@o}KoKE8bEix2skAd|^`Y6Oa;(ikQh zwJ0KQgNWAmXZ!s?Efy@AkeorPKi+K0o1iSTmTP$xLw=$EERR4o6)}))g0ml$YfJFV zau3a9wgDItc&3dF`JGNw9>e}A2-{l5{mu%Gl`dr>Cz4B_4wiZIbkrwMRy=-v$gWES zD@umr1<nT+3!6C$EngfI_;ka7&j+wZM7jyuR*qn2`0AZcTnIT7)TMcOvkm*p5twmc z+z>n!o;cB^oZEA0==)t0jTrKg0|uE%b_&}@ed2d~;;^D{51hSx?W#r?C+bsR0~BVU zsa1o)NgTqLC)Df-UnADefqA}JQ_yC0j7&`lhWvL^XYg)Glldhm8?96`g5r}5Eqwv= zY%f`R`5;pDbZV(+c(1=)THS9NeM_W8^3B8CL`LBeDEQz)Rg9$hBwM5#KPis}-UTSx z7xW_0Lkw(nh^g*lNPwZ^mR$h4TW0Tw73YAOpqZUSr3sKYH~Gkpmi6^%zg7_z=dEG< zB(9(DJg2pT*JriVI@quU=-SJ$w|FM-lV*ms9=z}Qwy??iJ{frs^S;weoF-)q%4Xeu zw$}gDTZ<F(Clv4`ccJs42E-*EY;_qgeGP+WK0zXWe#XFq%#2!C?7S+`r<^s|f)}); zwD_-kpPJceR=q|l94o>qGz&O-SQqOR4j%RkbMDPw<vs(w&~^Ox?yDfz(f){J328QV znJ;SFz{-`McyRZ@CCC?x&e&j4ynqj>vs7_`2+Rr-)XtKrP}qH}k*cfy>Jey4?wR`j zTd@SFLgS$a8K`(PzM~j?ad}K6p?r=6=RewiYGAL+c)Pi6K<Nw#U=IqqlRN+`g1C!5 zT72o!@KG(bsR)vxmz<61{C6d7|6HJAkbDkaa9`F@{tMu-(^Osx0UB~yP%}zg9)UGR z061cG#X;7BD|m@fyxH1%=k?-Mx@io!SzKxLfgFvCzp}k#+#5+DGBz%lOQol77V5px z79#WB)e(vV<n0oTzyrYdbQ6?|bAt3}wu1zr3{}phE!3xPoz?WQ<PgSseJgndBO4z< z9t8yH-0~7=?!es^C3=&e0Ho&!s^zmn)`fK@Gy=j{{STDzpXL_Ei?~CaFm{JohW~ES zno9}*{p+EcEeE^Itr|GkP_AP4ogOcW-gsXp8i6WcbtEVex>*g`DA>c<2H2%CM4Yav z{1dSAYw57umyX=B-yXO+IIIc8rLG|CVNj7D5*#fuC_nE*8<U)|Y)Si^tZ542`VGp0 zh^~B1S}Ag->cndBw_-9I&0a(Kdukb!y`(R7jEsy_R>zhr*ns9C3YK~OYHU>2tP^*> zKp>jg6gPp-LLneE=_t&`Uf5~m2de}C#BYUdLpGumG`P!7LZV!-z#$7r(QYeVNB9wx zK61QzlQ86I1fC_ih9s%!<5m<S@KzA#nkVRU)#wZrie)FFk2usqAI2&f#N-)F#-S%e zMzjkr@=A0n(8cNv!EFLh+1xExH}w{|zRl*+cTdm_Afj5a!9I4i&8guIb`m|{Oq7F} z#`@Sv7G6PcSIv|<1o$mIS`f~Ts&|3>EMVNaaNt9&=!zxSg~4hcHgOx*@Am6<;QFeX zVF5Fu*!oC8j=f?T7eWfY0yGY=qIK6)a%t&c9;)U|^X5<_g(pix7oEejVX9LAF|fEz zeay~rG#))<Y-e|UJ8Jny_>K=53E^qc7<U=wb6B#`o+Js(p-bdNP;Os#I%jgPon-GH zuM-og{DcWSC4VBzm2lz+lXF<FZ%<xAb|L?5DsZT$T<%uQmGd7*Jq#*r-Y$9)=DtyS zGt>_F<Ik~K%JM10Ln)9a>P5yiEZak*R#Q_u^9jJ3qPK66h7Th4k1RpLa$7u!ztxL+ z2>}f}O8Q%x>P+e#(CMw8>#Puxy$>+~D%a+C^AX4#H@hiTR6H1rFPM5J-tRgx+5z`) z|IHl67AhrRY2XO=fBh<xo;ZQW%<-zeis7BW&%d@fDa7T23)$)m=5CU28UnYBeJl=P z$j;y7;<qONrvApxGmd?9no=Cs4jVzQR@-5)xIFQn-PRcf=^;&JuYnMt{9q;El(=8U ztWKN4a2IHA0ngpXfU#xhf_`-cs-Ac!LJ48yy%S?F^Z-7PCl7w+4m%7`B1@?vJN-M5 z^}Sq%mO-V6;*U3$67HEyMgk)$0c;QY7n!+OD-%zw{uL4sO08kjS9;z&Z2*K&ADT{h zRdR<iWv`~VnGJD#O-`a@fM_$elb==h0B8_;J9HV(h`!Jb@@2AnS^&&+pK|-@m?`Fl z*hhg!@UOq^Pw^?l*FPLko3@30;Cmbk)jc~5q53taJtTtFj{+bho;=pd9E7=(a~L3H ztBt|+)10A`{3-ZDH-}NUGEO}|!J9&?LFCv3>elM<|9jG@pOz%-WF&B(6g-LU6EYJa zO00x9%M(Uqf^`Nfg28E?o-oJ$=<}ugD(+2ocP}+JXwe``8IUfJdb?c#Ep0c*(>fU$ zDYIx|YO3)=m0sb&Go-f_!fspU(^BG}1I=yjmK_zKk_lM+XXLo$BvF&i?60jz6o#zq zJ(~)P5vN>3y2UQLTEoTIVQ~C9n$J8cKscDVJ`jDu)|IV&=QCyydJ=B&>?-oU*jJ@v z#S$uj^+>^t1t9KMfZ4Lf9Ut@_OG45^M?T`Q`N%p_b#r)m=%p6roWs2V*IM&9_VL}Q zEv<w~TgBQ+ErO$-NrNz<0RJ|>W)>O}c*IToc4xpH@TQ1J+t@EsNnkdS)ZFbMP*W9I zC<g*`|4Qr;l3l58NLqW%He1U91xl`QVm1CJElijD3BGS<!%UtD7iF|s0!L20^yzUp z4kClV$(qFusoz2{*X=+h@b3_CBeaP+8`E_V**IoKq~LV`e<Coc-=0M5iB8Rl@O~^v zq5KRTVaw)Qjb@zF?e^8fa6}WecnUsnfEL`z)>fHB-z<tzI%7zR{GnsKz;!AYRi?@; zXd861=y9rBJ1b44|7p$D2&mUeaDRhx=7TNOW6;y)TGhpTpG}Gqf>JXv$bsQ#<rqLu z>NND)Wwo4>)D3_@vtKos{W$g;iiYchzmpAtC%ddRik~cmf#|ePbhVmhO5|ot1l^qd zKhUQKoO6W4Se1W?rY{#9sAc)GR+E)+oruKD6vZ+yTxb9zhYpIV1DpnhKq>(I4X2C1 zr){|P#qxY(q1J9bXAa;rm-U$|W;#9D0k=a3EI!Hbc2C8jgNEX-oQz|l$XkKM2|FU1 zAu5J^xp_zKOM2{vtB1MWLs`=%mq9X^lx4p5(I7OV+&~FX-li#sPkc3I7If3!<%IF} zx-*T-#Jk*N%@%Mjybspe8vnj^8cPJgZGWZFA3E^BG?W6=DJ-L&EpUMcy<s@eNJUAF zd`_PKj0P*r(3Oxs2mXYLeN3wMqkJ0(NCmIF@B{La&ae)Q;2+uh8dP7a1LmJ(A4Bv8 z*nREyMsi-Ugq^)To<tv4asnIx+95l`G;WRB!NpDw_Ag@vxvUy1n-f-qUt~mQe?a+^ zAFA>3>q|aKF_@H_+yO|Q#ay6lqAnaDkk)V(Un+Y$;$H=1;VL8;{c(-e)hXYubVK`O z^QISFKdv0+zS)4(VfS*u8M<a_A3+gz4U0i5o&vC#>v$Yq4TXz~hK-C60sX)c*&Ioq zD-7cM&hlJ_oZnw?zv?qhN=LI4$q;24nujc96|f7))>=isq-0Xokzp0~!72bspjdJj za(zm|(-Bu*cjj)J$S+LTxDZ(ZBZUWFc8V@L?1XKC#h>f(eAn13{8EFZUV6Z??%L^a zo@9YHhJ3v0Cm+g+Z((g{)6f-`9b(|~lLx~k(aWc$_iPl>k_F}$v)M2Vu5k*u28uKN za_`Sn@+g^m2C*{Vush3QVQV0K<!|eA<MW{~#iSDQWzY|k50;+@)tJ8G237m5DOYpz zrsZJT#52K-8`+6BPvp2*S{jzw&)$#xSa6%d1Y~l_MV2&~!nqkpZD6|g&YU{8HMV`5 zjX`;Lp>jSBtwoc~_Rea8LqQ2)Jb>!XJ>Hjnur+M);t>#(#oFBY*VE8_r2^01FxV6D z1+A!sKYx}RkB^d3*4{gl&*60JZe$)y9zU{X7WV*vt&+3ysEAV|4XqXWn+#EiT5hz- zh-27d&(G-1zwV9LZ{4#300Kx6xE^Rkoqs}3?@d$^6DG3uf<Zzdu@EsJKT5mkAd~IC zb!`8d0e5)s07?oMRT7%#W)?Aoj<S9RX}<#)wv@%cL>t4`mk}*Fp+B%H8Oe8bzDNA} zXg|A@U^#q{;akexUX{T3cmr9pJKqg`FOVPXayU1=3H(QQQATcm$mB^>3tbnV!mpXn z=D=6Kvss126;VWeLCv1s)9zt&z7Jj9Y=Sq!hHX;NSh6mW5U`S@P!Vp;XFKgW4m`EB zMa9d|dp}@=PW7{afT6!|??Z|#%R84U>_8XnGWYA!8A9FQ6h|wZW^anABSreb1eb3- z^eNuDElasRfTG~BFd6DKP<46Ozz%0);62QKoKv6|bG59|io9!N)RjG~Mu(|kMv6)m zxkbOt-&%=RgYqF0Wj(`D0w~rX<Pbz(!xF+A4FuX8Nl1n5o`OQrd<{vWGFYBys$A){ zf%K8>wn~8Uh1)_3OnKH>P08>me%;49g}CY6yXRH|6!!K*fEtFbJ=0;<dRJG-JKiZL zo?w}fImluP3ADCYHuwEnk0_+QsVymE@?GsR@Qcrnen}s(!r$)4zfwW1cZy(ZhGUzW z*h!XhR2qH-FPatu=yPiey9|N>;2#%341!5R8{`YevY%m#K7@gg6M*=icKy<NRAKQd zh#p=j8&w#?&lUe%TPm(sftQ6L*ycSdGXaGu6#dudr?~!6{{lF{h3YLs*7+;&X4X>X z=Pwz?Mn<*vBV~}#!*W-H3V?D2k@P6}!w!Wc<5znbEku$dV1MBRqH-Y9wT9GX(-0V6 z`{P$=$A_Sf141^BZOK5X%@Rm>3Kk_50NU{Gh01Kq!q_Q|zZdm7Di^PZWIX;;0P5@s zkM9m^-l^xVc`+U3HAK`LVNwI$SY_h58ZUfBR31QGS1-J)O}2!rPE@Pdq<%dU-{Fa> zij3&ovKbY|f?i`v3bo`RXHS4evm5N`#TRyQvJM=2J9P{gi069gh$iiF6JZ<rWY%Jn zT3cHovH14T+|5e;AvDs!>ZeKj`>C<hP0NcFzIlU9Ja$)K?BoGbEfxwV=pXqaz6+y- z(nWZmLXpu>>bTS3V;du_z=F3&Y3`uZ1`8SFtl$oLJRPg}(yZ3<#EC0UFmktbr`)(b zf4H=P_6yp2%d{U+yIaNO8PBAlZ9EHAaa^EYxy}yAfM+Wd%zNdYfo9NVf3#TM3;z%4 zF<dqyqoZ_{GwasV9=8Bm2kVy?_6-+y?Z5AirrF+e&vmK**0qoaSxm+y!>yKyBK6*v z5<>)nD_p31dwbwq3kB6fpc_D74;BSsE7#MY*K_pgNo=Q}v`(7u(L=aR;7-Nb*bG;@ zSwkTUOj3J06#q2<UC;YKn5#MR^X1ZEH#HhB${B@_G%~<LMl{Lj02c?v@%GHDFc#SK zT~9{>{>5msJ?V(d5?sv4od7)hjgDwx?5WSd4|@RA1)$nK!ZHA!TesSD@yz?&JS*j~ zGNli|tpVWwqsB)M-zCqhElk#)loVkYzn-aA7zfP71!oB8+&myMfof2n64KdONIl^t zAcX<UMCs~fQ))KR#4NU@`5i!HgihUeR>t9-J{%aW&SYtMV{m`>b>s1cqEyNPu#*tY zA9M`R$z}h9D-v)VgbhQ^6hJtNOK~=uIyxI5?_g>OE?Skw;wsLOXWzajg}FoJ-Uc@? z5Ny&nI*`b`n~1VOh@8Sg?pgBky<W&0fu7GxREpZbB0{7H6@8%9beX?}_y}hzSh{?+ zR}N~=j`{ED1Mv~YRK(buwc+4!uU*00q>yCjozwHW-Ptsx8j<QbGV_aP`o;pjcIz`h z3;kUjL70hXwNxL6SEz|wDF6&3X1uK)?Y(|m<?9**_W?m+Ea(=3>HWrNIUC*Q34qf= z)q0zK7sQ1XImHsE^K)i2{MO0y+yUJ5*{+=c4Pgx^2|(<mos8KuXD9AKCx6k=xCJBR z3SM`<Fu0<}aPxN^mB=C|6kB>fq27bHJx`ytI_TpqoG{&QBN722>=-!WLr&<B5OIgk z4TFP0`2Q9jENCYl94+*$TO{TPH)1y0Szp-y_z>%QcCn5Xh`T-TKm%akEf{j}wo{{U zHFyJVi4e*N6$x3q%Aa8Z0j92r@;wim1gTvrNLWCTjLdC1kRq7}QDqPjoT^-aPr#n| zH*^4Sap}#4kZ2{#VG6@7l;(@d^fRJ&?UmTzQB%(S=glw7yVa9s)<2nG&;8B|*)u>7 zV*y_-^4G1x#p?stTkIi7e!zz$W+IdG155ygsU1)UA!242H8a=7|7r%BLcr{*N>m8) zb?6Lp@0HyAdIzej2*khzbjZ{_N>!DWHxJ7{LyHeGF9s>VR9%6e0<k8kgSfba9&$cF zd}Se$tNZv+U4caz6rypE$*N{Z?joz2Jnq@B@e&k=ivD~3nIJzDfa<8Hg%~;nb&ZWd z`r`D0MsNyz#E%wCk85nd6~a@WnY+rG6W@!OVfdD)of7Y`5Z6IXC3hNw!-u=U0fMF5 zjM6z$_iaGsvObH4r}zR$4FSLhps^Qnzt=#312(`K0RaQ57Z7gVG^|>HBLWx&q6h@n z@O#|0y|7oxz+nPP9FlGrO81oSnEy_|hJu)o7{JJrk?B)#c_Zl|2r>yTF$x}V7r=P* zVA!^FklkSI?R_SLsUb7G%Uu(l7~J|J20+CxX(B7%0B!@(c&67>7-&Nf9jf&HNbfcO zgEd(8gQM+6e>kH^-vq$pAmba(=y*Ynm8*KCJ9PV3JSTOxW~YCZi!LJRLxMegSiF(; z<l8Ne3Gc?R_rJc6H}%Hni<yAi9=yN&VuXX?0+0`)o&FJ{!G+iLFt$cVryoL>io94P z;~30wU2BW%*g-}UucafGfBPD!;6eDJZd@if3Z2W~9M1OeAG#!MXsb1`-H7Va>MBt! zgHWbBAV}x-4O!~<GjMq!+y->C!iNG?)n^yjOYs8Mv!5v`)nC4Q&mvlj!f3Z3r4GF3 znwdv4x3&lJ##)1A%L-7Yl=JJjAp6@5G45tb+3_{+az@{|t2%VrNyv6-c3PXimIYQo zhRff$V6%K?*M1;7zV{ndXKb&6gAyAT>AVl5i_k}8wE@jT7|QAY?El30aqE@eB-^rq zJrha!Ro83AZ%ljMZO|2w?3<8|>wU7+aj%@!0iGXs4<t(PlZ3a0n;uV=Nw(wF!uZ0s zCY<N*;^}c@%%&N|$|F83Z@Ablj7Tcu+Vj?ZKrgEu7~dW)&HKW>y6O`Auqg?Efbb{I z5i?J+eeivm>!qH@-=!U&UrMZHocKFjnQx-j1EM?oFqGme!`>5o%7N}T9w^Ra#YHn< zmM${XimHF#ZTKLh{6E)KZ`WvP7Z)EbSF1<F7JQZqA#u1EW<q(CJP#vUvV95OZ9WcJ ztgpMNJ<z(}DZ28EGx+Yk?zY~TkLjhdWsQ&(ryyj-+2dn1SWW4%)8)Iauv;!5RRg?H zca=T!3G3eRk52Rg40pUSuTYc<;&Q^B7tMd+a}3?JgZXnTZrhGHCcRVrnI}=Tpt7VS z3(Xu;!1}{aqkI|g@5flRyr`uz*%(HeO7CZ_QRi;-i5KwdQcCgl|BbfP!JxFM46I6h zxe`<qv)^Lhp>pp?r4bC?Xisq7&cfGmlg08$v+wfEx6hIrsHJg2E6cxbcw{Z!<N3FI zx6p=LXZ_OJvn9tIdBZyQ6niG$IM@5<FW!dBvQPk$0pwfvzL=;m)3ea8kE|C4cwCeq z>`G_M%PAfQ<=t2OT-DuB#GO!Klm?%t_nV+8Jh8MlYI?CT|Kqhx-If|yGwUrT%)GU^ z>)+|7a#30-%lk97R?pWbHu}f0R~XR;zx1@f_s5Ie_jA&KU>ZCC?V0~<<-OG3)7{$# zMjOF$;<JymWwYyqxdvvp)oaRL;6^LHe~2R$XG}MIm@tZW7apk^X%*xzyfUwg)AL)7 zh7Vnor}nR%fiex|l;fIkagd7Dqf#Mg{f`GdhP&X@Fh@Ba%HJE(9<W)d8lNxMes3l> zI#x}bzayVEE2r=)#v!W^nw0*OdopE)x*sLu?Q6r7^5yVd<gw~(N^AuJ3361>=`?bM zZAPy^GCEd?Ef%`%{-3=@n0uUA|25gZ0S`hd<6>Ek5hYfF){gwH`MEE7yD2AYMg6?n z_-x->G~nxmcX8rpmEr0C-=ia9yj#2VvN0^Pn0ICPU5}l_&~8bt?vv5C_4C-D?0X7H zX;Sk^o(gpT%~9cJ@gT{9X3BM&rydvM)NOUXNo!9=zO=scoyTnkHhFtKX=S^0R~PJE z+t}X3r04Nbg;&`A{oxAL*g|=<#XFG{mF2(tkz{5f`i19QY#BJe;r)N$luwOB7s_%} z&amzJUnYl=@&d_)N^dQkdY@KXz(9r^4jvw|A7gFoMorq3@H`jvg5_$1{}oS^gJjK= z@$L{^m@znAm;WAZZ-)B0jL!1+Gtz2`EXA71y^yR_RK<77RlU743l|7iny~shyvovD zw%}3ODhOnnM&m!}`If_A!&v=y!zlbd@ZD{q-=3LQx4pwm->I^Gp>p>{qx*R2tDN3$ zpTEBE_BUG0o&V=`c9VLgoq9ZJg;V8UT7B`tsP(VQ&mZE_#&zcLta=4i2l(L87=l*x zJL?UsJ6i<wUw$wXPKdvkpq;XA&)tzvYJfcOQ~x<KrfxGUU7p&6Ek3^|7b;`r@i_uv z46*C3_--=yfwhoq)~NpTOCCIonK)e<2qlU49+?;^KgzOT28o?`N7bX+0++H7hC$dr zzLbcx0y%|`_wKK>Td&N$=jzR~P-0`g5R3G8YQC0jKrw8L_?+5Bi(|ulK(9R^m8lMo z8_n`kxvW#8f1V~RUIE{w!a}+}qQn8!jQDhUtb%21Z=Soj!v737$g32d_|GSRuW{TT z{~foHukrs%o#6}Q--1*B*%SZ!Bmeuv{&&Ot`%wJ<bzY7pkG9?)Urrs)`KMRAN9hFo OgOOL4dnfxK;Qs*KL9tE% literal 76488 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 AtpET3 diff --git a/src/webui/service/static/topology.js b/src/webui/service/static/topology.js new file mode 100644 index 000000000..dd58388cd --- /dev/null +++ b/src/webui/service/static/topology.js @@ -0,0 +1,148 @@ +// Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/) +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Based on: +// https://www.d3-graph-gallery.com/graph/network_basic.html +// https://bl.ocks.org/steveharoz/8c3e2524079a8c440df60c1ab72b5d03 + +// set the dimensions and margins of the graph +const margin = {top: 5, right: 5, bottom: 5, left: 5}; + +const icon_width = 40; +const icon_height = 40; + +width = 800 - margin.left - margin.right; +height = 500 - margin.top - margin.bottom; + +// append the svg object to the body of the page +const svg = d3.select('#topology') + .append('svg') + .attr('width', width + margin.left + margin.right) + .attr('height', height + margin.top + margin.bottom) + .append('g') + .attr('transform', `translate(${margin.left}, ${margin.top})`); + +// svg objects +var link, node; + +// values for all forces +forceProperties = { + center: {x: 0.5, y: 0.5}, + charge: {enabled: true, strength: -500, distanceMin: 10, distanceMax: 2000}, + collide: {enabled: true, strength: 0.7, iterations: 1, radius: 5}, + forceX: {enabled: false, strength: 0.1, x: 0.5}, + forceY: {enabled: false, strength: 0.1, y: 0.5}, + link: {enabled: true, distance: 100, iterations: 1} +} + +/**************** FORCE SIMULATION *****************/ + +var simulation = d3.forceSimulation(); + +// load the data +d3.json('/topology', function(data) { + // set the data and properties of link lines and node circles + link = svg.append("g").attr("class", "links").style('stroke', '#aaa') + .selectAll("line") + .data(data.links) + .enter() + .append("line"); + node = svg.append("g").attr("class", "devices").attr('r', 20).style('fill', '#69b3a2') + .selectAll("circle") + .data(data.devices) + .enter() + .append("image") + .attr('xlink:href', function(d) {return '/static/topology_icons/' + d.type + '.png';}) + .attr('width', icon_width) + .attr('height', icon_height) + .call(d3.drag().on("start", dragstarted).on("drag", dragged).on("end", dragended)); + + // node tooltip + node.append("title").text(function(d) { return d.id; }); + + // link style + link + .attr("stroke-width", forceProperties.link.enabled ? 2 : 1) + .attr("opacity", forceProperties.link.enabled ? 1 : 0); + + // set up the simulation and event to update locations after each tick + simulation.nodes(data.devices); + + // add forces, associate each with a name, and set their properties + simulation + .force("link", d3.forceLink() + .id(function(d) {return d.id;}) + .distance(forceProperties.link.distance) + .iterations(forceProperties.link.iterations) + .links(forceProperties.link.enabled ? data.links : [])) + .force("charge", d3.forceManyBody() + .strength(forceProperties.charge.strength * forceProperties.charge.enabled) + .distanceMin(forceProperties.charge.distanceMin) + .distanceMax(forceProperties.charge.distanceMax)) + .force("collide", d3.forceCollide() + .strength(forceProperties.collide.strength * forceProperties.collide.enabled) + .radius(forceProperties.collide.radius) + .iterations(forceProperties.collide.iterations)) + .force("center", d3.forceCenter() + .x(width * forceProperties.center.x) + .y(height * forceProperties.center.y)) + .force("forceX", d3.forceX() + .strength(forceProperties.forceX.strength * forceProperties.forceX.enabled) + .x(width * forceProperties.forceX.x)) + .force("forceY", d3.forceY() + .strength(forceProperties.forceY.strength * forceProperties.forceY.enabled) + .y(height * forceProperties.forceY.y)); + + // after each simulation tick, update the display positions + simulation.on("tick", ticked); +}); + +// update the display positions +function ticked() { + link + .attr('x1', function(d) { return d.source.x; }) + .attr('y1', function(d) { return d.source.y; }) + .attr('x2', function(d) { return d.target.x; }) + .attr('y2', function(d) { return d.target.y; }); + + node + .attr('x', function(d) { return d.x-icon_width/2; }) + .attr('y', function(d) { return d.y-icon_height/2; }); +} + +/******************** UI EVENTS ********************/ + +function dragstarted(d) { + if (!d3.event.active) simulation.alphaTarget(0.3).restart(); + d.fx = d.x; + d.fy = d.y; +} + +function dragged(d) { + d.fx = d3.event.x; + d.fy = d3.event.y; +} + +function dragended(d) { + if (!d3.event.active) simulation.alphaTarget(0.0001); + d.fx = null; + d.fy = null; +} + +// update size-related forces +d3.select(window).on("resize", function(){ + width = +svg.node().getBoundingClientRect().width; + height = +svg.node().getBoundingClientRect().height; + simulation.alpha(1).restart(); +}); diff --git a/src/webui/service/static/topology_icons/Acknowledgements.txt b/src/webui/service/static/topology_icons/Acknowledgements.txt new file mode 100644 index 000000000..c646efdec --- /dev/null +++ b/src/webui/service/static/topology_icons/Acknowledgements.txt @@ -0,0 +1,12 @@ +Network Topology Icons taken from https://vecta.io/symbols + +https://symbols.getvecta.com/stencil_240/51_cloud.4d0a827676.png => cloud.png + +https://symbols.getvecta.com/stencil_240/15_atm-switch.1bbf9a7cca.png => packet-switch.png +https://symbols.getvecta.com/stencil_241/45_atm-switch.6a7362c1df.png => emu-packet-switch.png + +https://symbols.getvecta.com/stencil_240/204_router.7b208c1133.png => packet-router.png +https://symbols.getvecta.com/stencil_241/224_router.be30fb87e7.png => emu-packet-router.png + +https://symbols.getvecta.com/stencil_240/269_virtual-layer-switch.ed10fdede6.png => optical-line-system.png +https://symbols.getvecta.com/stencil_241/281_virtual-layer-switch.29420aff2f.png => emu-optical-line-system.png diff --git a/src/webui/service/static/topology_icons/cloud.png b/src/webui/service/static/topology_icons/cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..0f8e9c9714edd1c11904367ef1e9c60ef7ed3295 GIT binary patch literal 8988 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 O0V&C;%T`KbasLBlgSHX? literal 0 HcmV?d00001 diff --git a/src/webui/service/static/topology_icons/emu-optical-line-system.png b/src/webui/service/static/topology_icons/emu-optical-line-system.png new file mode 100644 index 0000000000000000000000000000000000000000..a5c30d679170c6e080dee3cc5239bf7ecaefe743 GIT binary patch literal 12869 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 Xyi~U~2mVO}4^Kl?SEW`N750As2d5jB literal 0 HcmV?d00001 diff --git a/src/webui/service/static/topology_icons/emu-packet-router.png b/src/webui/service/static/topology_icons/emu-packet-router.png new file mode 100644 index 0000000000000000000000000000000000000000..95fc8b9f35a0cda9440a07ac0df3d0d417cdd0f2 GIT binary patch literal 14197 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 literal 0 HcmV?d00001 diff --git a/src/webui/service/static/topology_icons/emu-packet-switch.png b/src/webui/service/static/topology_icons/emu-packet-switch.png new file mode 100644 index 0000000000000000000000000000000000000000..f9d431cd29b9eebc7eb6ec503ba8ed777082fa21 GIT binary patch literal 11859 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 J)T3Qu{twBB(<lG{ literal 0 HcmV?d00001 diff --git a/src/webui/service/static/topology_icons/optical-line-system.png b/src/webui/service/static/topology_icons/optical-line-system.png new file mode 100644 index 0000000000000000000000000000000000000000..b51f094216755ed9fc5c7a7e8957bab88090c954 GIT binary patch literal 13777 zcmbVz^;=Zk_x4bNbPOOOq6pHU2qN85(l89&jYu~`Ne-dJph!2v07FZUguxKfC88kR z-SD1yKHtCK{b9Jc=A6CHK6|ZouY28VPn@=<G6m^fQV<A4p{k;&3j*Qs;XWj{fNugq zl6*j*2Ow2NIemZgt!&~ndV|IjKN=!AYHjT}HO<6$1?qSI9+b<4zaPf)es#x^@JQoH zTWLYZFwMQw`;i3?UWg}Q9`MVhJ$N8T#9<R@tN8AL%I4#-Cg0(4h~Z?r4{}|<<;23J z#{Ea!jo0ALcIvSXNiG^6iJW*?AQ7uVlk_%B`@syUY4&6(oOU=!u|6sm!WF;o0fr}r zb58Lfk(3V$I%##dzi^S<B3dZJ7%Gm*>7>!=@JWW*jRKb;4+~Tk4>!1;Kj<SQV&_4J z#~LfrLrk?mys9o0$Ut72b|u9OwN0=JDXF4CxO9BMB_}e908Lw;fJEBGI`Yv_JR$!0 z*_)0cw>BYZB`eOewZK&yqZ|J1joVAX-!l>5-Vw-J6<6OTmpU;Sc1#?JY-B44rO}~S zlwlEvWp00LduLxc%d~W?IGraePn5F_laiWi4`73ONP>6;u9OYN7ZimfV()VnuzmF$ znnT04VL^B-FJR&V<8os8vUo(-r7IMNwoMykmz@OPw1(~MNH-t)B(87gnY%-wibY80 z5VrHM*vva7hl+ztfz~sgcROt#wa9>DEAb(S@q&S%wH>mFk<eT7)+j?!C7or(<^m@Q zJ_Cd1>txztbw&M=DQ#ZAOBKJiBktES{(OB~F|~5xMWpNz22D?&mFrz0(~jIlZGvCj zE}Y5LH)t1nQ;E#3NpKj-EoF2F)esysQd$|T(BYTvBO-F8M@NjeX|$G4PKl)j9ZUMW zHf6!o8a&0v+fU+c(@@N~1Fze{3}qTLIIo10q|qvc;cwHc5LV>eyrJAn777I+f<g%5 z%8@(-&i81pCbIrA!$lo83^=`pZs{`E;uBr!$`V3A2#a-fHA92(#sED`MS|+J|7Kbv z!Re2$b19zkLfQ``i4?7fETbl0s(L{T8WevQoIg4EasAQ7&(WcRGWUC&<C+d1*Mq7s zIw&4=q2(5XuEF@%fN%77?>t-5Tkn>Js=X1sc#f`p@QCYADgMxLTln>_qZa%a`GD}b z&-QkMtS(SkV{Bx-fx%K_Zt@Zfp&c3TjY)?O>y=xV<c!bh=SVOOm{idaPZS*yMgRV| zU!v+sRID*G+<W;~K%m>QT42DosJD5qM^vmZWBgwoye2e0T9Q=oQ410oY!pCFlm4uv zY3bV|?{BACPDeQkLbY;twI9%u`iIkp(Oc6Yk$qvAvWiVi@GsG0Q$rKOxh2(kqYi^n zP<dMlqJKQQ^3@i@bY@jP_4ZLBe9f=_@Q4@~NYD<qD)uBD?{|hMYmH#y4xFrxPpU?g z*tw_;h-@*W3=m9Z1#(?U@lc3H%38YW$<?RV-t!W<!^3*bcp0SAa(JQi?}&Io*m+-` zcY(h>h>jD!C(Hi}mB}3}mT9{YyE=dm;2~}q$%R{j-`(Z~@rFIeN>uGCvjrkzr$P;` zzkQ=WPriA3d|!%5R`nebm;{2y3mq_TN<B~b^eI&Ir&F9eCAQp}va14VEVbjT5xz(o zym9#vCFnHPCi0@{kE|A9Vluwq{6xzAtt=hO@N6re+0V&R0bo3I@Hzn!`CCIVl(V4r zE8p|0UAnow<<ffCj#aMb%UbORrbL$!^d)bl>no5*Et=tM#h&|eWWiz%L&Js=u){;L zMTPh8*}?BhF!W1mdUJhCWJR3awIg(Iqc|$dg`0ZKVq-0Kx&By~Su+3t(W4fgJh7cO zd;M@n&K{&Lf3U)0ct=Swl7l^lJx^AR>xs>P@4AFr)mV$SlYX|nv@S+T=zhL?0UC)E zr3SD|e^yoUZ4`camF%ox$!PrRi(<$D;^p{SVFae@5!f6IG4NreF<2BnmBReCd32Q* zlYwLt0CVMG=HI+gplWc~QDN-(bbb7gf3`&nsrG?ZEnUy#8$O!dCH~(+J}As?PV+r% znG6&E?T<Y75--RS54s;julp8Xnj81Ov=2W!8PUK0ukWjZ#tlQ))W><!JXq#m_lPpQ z88cn^!&`=VE63s_i*3pOv7fBO?6`WN9z4K`!AG0=p$CTMRU3HdcU>37`8jDUK6N5; zKD6|!rqz>>S^jXc&+^VFw1M&Hh`k`SRCR+U|G<OZC+de&TK*WO!Sv~Y7!W=&_~?J+ z!XWjeBoISbdOar|)brNeFb-v95U&=VFX#SR$y|y-VyNdwrUtG;=iZ+@5lSaNi#SbT z3_qn&B7ETm4^>D=LC}Y>IT;*b9C=b<91nEw65*k{TwFowvO&P7NSG8KfQl&)BJ9`- zkF53W6vr5S*tcOaH4qf|4u6<5!c1OlD;)SEZk_Q&EBq$7E)nO-`UbV=r&?|^e@wWZ z71}#CVA7rluUT2esjyC@y~8#hVRQf#rqeKOi~}HthTBaonp+1&GWWZUa&EryVMAMs zXPFNnx+|4cPabcpn-F2%_N#7XO=jM;SQOz}#9;!X=JIhSY+kPQJd|yX7S6MiLh3IU zsOXboNUNDZe0W=hAU>O?opUF2?H&G)+UwXpCFS(dm&vt7phbLK>MGVc8Y$LFS`1%S z?Sdfw8u*sC9a$OB&v#_x8+gp*d*KW<d`soe9Gv?4Di6<75)YSro0DBhzq3ij#)_nS z9pBrM@{}LtKv7{x)dMzZNx3bm)dF~Q>dUmDAHyl{%P2VvW|s!d2p0vtL1~Gkl8-b5 zQ9Atz+<^~xORgmJTc2h^YS@&@hJ21Ez}-QYE1w+q_us75))trbaTJH}8`k!8%6LX} zT<n!qpLMe$8rsn4;4R;MT0?NbCuaS^i&>GPZ4GB?D({M9tE1}-lhqrB%F?5GR)itw z2lsfHHe&nrY}mH5nasoBsmz7!kv*qIw{N-xfX)6rWHk58$lx!o+_}8|dP`p_j&rQq z_p*$C<mRGcC$==%DwKRWhe>3u<2gl{SEO?fb>n#>>*dGam%()HXJ=pQ=a`7lAQbvr z#o;BKi*)a=O!OpwB2sUdZG!Mm)LCfN_mUd;b84;1h-*a@cg{Ji-j}$>WR++-Xykg6 zDU8UHNJ^7nU<bL+INJXD?$4cB;XGcfS=N)C;`ysQBQw3u-)h17UDe5df4EsHR+cwq zgs98hmsm3Nu+9(wM)y{Yws1d*EKnXL8?E}p40+Vph3Zh?)Exb{G~FX%E=iPn^z=ml zvM&^A?o2W0wPKK22P<ui9SmJ$54Ac1c$@mfhXf7raRL59mX@{(9|B~sDmT{i86Sgv zXf?lU=;uI*Y^j}J>((m1PWon%wv%5)Xf-wbZoIP|^Iahx3(P6DjYbRB;Nt?WaWRsy zHAtjF^`z;wBFnm2x_eE~%}{AQuWVaVk9*BUma(3f=q6iZ)$a6vm~!0CP9eV=uHM*k zs{xt2i^K*P6l*=-p1_C%T@B*D`^)s$M8|hxtRq*8wpu;Wq#kb~4Gtp$fJvZ5WBujd z(Swkx*63}Q*|3>$)!-|;AuUeFt`QAkAQz2Qs#3hRk{Raq$}u0Dtv4|l%Wd{8tyr^L z=h;Tt18ZGEeJj#&?4Ui+zIb`q%5YTH)yu&$Y1&ls+q5>$_rCP<3u!jXVY7OwKSix& zx=z$pwlxJ~JLfK|e<>5o0}`>XUD{kXr0-r#2WB20J%{QwI*XBk$jBHFb@x-F^Cd*f zkSy|B)AjaUWRowAPSKn@eEZ<ty3L(Y?WZ?La^MxNkE-sJ_UmE7E7x7%t3JFLTF_LR zQm^t&B@Wu_3&fT3YT}Tn6WNxsW=VCSoRJwGfRVOG#c3*~ud{iDUDg|2svqZ&8iy!r zF8yrfeLngjYC~kGG_e{fOEow4;e1{@rq5jem(bwavz2<i!{91-X~OBR|4@B9P?NNm zwxI;^X1281E~mx0VySp-gd={Kg@1kI3UI-OaY6O6pV93xA{nB=$$L|4r=Q#6<WqrQ zfq>7gxa{1mHJ(}mi8Iw*EWqRXx{+d4biie_m!q<>icZX7H8OqPY1g>nAk2Mc?H)C- z>=EQm2Co6z5UF#S#u9Ca#g2F$e`e=NFN2nVqkp`=1H9!>cJ`(G+0_P?-&;sDI73ut z3k=wZe!PRb!Ia<GV8R@+HhFoM$Dr+l-OT2{<nS*HLz#2L#mhr+dlk>yq`xY&)29Dj z8EwAH{!PGm=X*h_`Bdy<5@45UwlaUim&P)!V_<Thb(TH%DA~1`HVm7Et&|L1XRD0@ zBwyPK7M}j`5Y}PEd>OuzoRr|4?&uivShbS-DnEXhZ1T)nBd%|<<d{A)XvMZQMJBs{ z*c>0Q`>of8LfJA<C>pI>aFfApl;zf$-}rp1Rp19D%Y|3y;sIH*uHqUudcRnGWUg|0 z-C3nUP%s0n!SH6f!mPtScRN^CWKJ3c<X)d#2bcA50DYS}kqYGe6@qR<u$l^H^Nsa6 z6r?Nlh&U;?peX}Z(cb+*^8^e;ELH@4?T_`*&-Y%?`&~uX7<by6MBweTM%y@%c1_42 z@fDsT!hs~~T<yQFrX(eYW*oPb$SpW)p=k14!OLuSE1g}H-;>9m$fZ|0v&hGf29vlz z@w;M<-th>^a*9Xg#A{jBRP)0$VoKpsnU7(83CRk(f5*`sV3^8LC%saD0H2xCJ`tKw zpOg#=QF<oL6?m$+{(E|{v>yQ3ciS}qeXsJ)iimF$Kwn#Y)NK32bFi3!kPa;R^i&mu zg=3J&ZMFjEtgk2^iSm;vG4m8J7ExDArd&+s&DQ<NqgWfooa?zRt&h{EaH?9ja(vWM zXv@InOUIT1t|p@L;?XustJ_=*3}}C;^`+){$NSW~gbYrCigiINe?>*rTe<UJk-=Fh zj85jS$~FI*&G^I@2-Dx8%?HvrVG$J>w0gioUF((EW9_a(QlY)7Bp~{I6e_&$FidEK zUTDXkkeOd#VcV2Q-KzR@m=sv)BYh?spNRm9&xQwli0;^S<s}K{afB`Ddmc}GK`+#~ z-|pCsFX;EpbbI#~j}Nb*8=pb27S`g_Bzt?5m!y*`Tc^R=F+Hg;s`rilzVPlsimIO> z9-m-4DSX>}Ou@7h9LtOrszS=D-;9<1r1?1BN~K%poSq=$qX*{5%I5#_H6n`Rfj*Q0 zAv;XXPDr#si1KZy&eMvvV+c&VIO=7t&ptuLklk|$i&`p{`O>vtaDU;vSk^Rbyik=Q z^Vrgm$683;JhLu7=f`<`%kwILFKx1~QKHH%-V}PkC$MS493$s885^t1(FO_?>i5D# z&~|2lUfRk+TKV^3Z)n<UY*R~E!Z@1AiY3tQs4p!FRvAyuWG`$oT$~hl7^3ixLPG>J zOxmSxZgA;Tp9lox6hqm=dlS4N#>0i#&qzs1X>}yv6;dF?*k3h5GBRT2$`&vm-$wXz zm~2o>h0hiKjla3U+RTbfULpe(97m+|i7c(YbkR1T{hN~UY%fnKowG~li+4iBt+?64 zID9_8{MHp%JA2eq`Zn^K;mujN{hf(>5rZ<wvzqSCl85*2C1%Q?s;@^TgLBk^@XGrZ z-*AR}B*CQo>Mj)GNHgVUCk84{YL7pLs4{t%+-)r%9!77GfsEw}$*1oJa~8)ddRW8k zX2}QfLD0cN`PDHU3?(!;E&v-V5qA~M)Y-1Ashud(`G}n`jDtPZ{{cwdl=tl`exejS zxS86Uz~iPUfv43M*VJaB*70a+5CW}ljfcngG@F{|2&_WL*U{5<9eU2VPu%$ABIx|c zg;k6eALGfM5n>6#nm>B0qCtcT^Wiz+<3Fo5Av3dv?O+Fl9T)Jw$%CLt9P0P+Fe!Xo zDey#mdrK*4JEp4!tqS>!58q&oIoG>8LuTV-7*7t91r-p&R_?v2EBFZk7Wrogc1WN2 zp}o&18^kv`Vx&xnW+#jPXI&V^g5J(<3wz8zzgaE~LU5juDnks8z%*t(H=e7fPR5-l z=zsU#-2=y#-~;fbY?$6TRqNiAl&$cLL-HSvh6foKq~->vX0fJ3;_E=dVidj^I{aKQ zIZ@?)9LAya)q)o9e^08AtyS-L;~g*7@yRsWeK=kfUl6?cy#2v~(wveIAL>CM-hONw zz71nlp-eDZ-&u^`92TwRCrD~DJO>YqWp*I4r&`k#6&<@TH7TtV3e{Xs;LfLOAnd{i zV)CJi8V|_QNYrJl^lfXb%EiaOjM9P0iHBs0++yz9<?i4QPs#`=9F3?L5UMZ`Z`O6J zX}+v3(Po>-_jgo!@=QE;M=)vHwRtK6&jIrPf%a=jT|u5U2*_MdNb_V}!61O%O?gAW zVBji<;Uyk8HW5d6=syj{N66y=5Z=WVhF_zD8(=+Zq@&G+tDWu;X+OYC2ZFeY^OBO{ zqJpdtMB4KbHy~caK}im%zW^@>%Z5+=H=t$>#l?kt7GDBB7d10(055HJL-1OP_di=r z_P&(9sMyv)+;h)Q|H%ozfocW9CU`Py0)tkURLAjc^(%_jeg%vv*V~_bfkNnj#mH}c z7DovoAq9_0J<A65cD{`4mn%V}r!%~>7fJbnW$ZioPjR}uO}`)bHFIms@0aPtcapy< z;SPbqrKPQ+L&@DTlpb#xfK`gEpVs1=d{NVC-P!PZDw4(_OtYu&zGQLEp!PKBCqA&| zI0Xg1a$EEQ_=yO3R7W^Xn!cWtRn!p=h-Jsl42CNE-dg=a>*>qGWeRK&!2O4JxjWnb zv>yC?I^(hWp<Z%S<l(i)_cG(Bo#&4(=2SE)AVq_PwdAASzoz)QaLi-X=B!`l*60F% zQ2FS0i(5LYQEJ2Z{j52vTkEE(y{z{bv3K!tx3Mr{NULsx_<}0;1oGQoCdm_C2|U!| zt#9DSrSv_g;LC~l>J<0`{tuR&y3Y)SozUY_xU1EV>|IQS-)N>3vD5H!`%G@H3GCgi zC({^f*}eLek`~76ck=odKm1;AFr|aY>CGKl@{Xuxyp0$zwgm8tm#yN4|6B%E+A=#| z7#If(yv7F{Kz`ACJoTzx&i3+-r40kBP!(GjHKGDmVL-n;cF_PTP*T2Cubfmv+fk`h zhCm*hckc%rN`yC#^(pNtr~fwJuMHC^GmyGFQWNJ(J$}j}m9Cy1t+lHm0N9Oo-IP4? zA<HKQ60Af}_Dj2f#(G;kc&Y9|jGb<?E(dAa!S5erQVIqt?5g2YJpZ!wo{>OZsu2i2 z%No00<4>VIcaR}pL-<tVx_;omR(oZA9L1m!lBXVyPS!AcS-4V7AD_$jj?dELK4d~Q zyYzSB_+5s{NRg+oS~t*le1?nxQdI4^V!`!)?}-_ntmzN8g9_G$*%6Ir$0YYUU#U$R z62o=gFd1X<5wQ0y!R2JkLgy<h=kzOhxUIn~02M*+d=dThq4WI2*<KqZI}=8T@`1T> zfNP&_V8eW34?;C-qS{+$TKC>e4fou$fQRiOXoYLx$&CgM;MVT=N~9eBhLcMStjYop z8W)3PlZ;m&xpP=^t3AH$r?|}k<?Dg?n~Q;PmLgd!FM8^HR%n58By{UYZh!#pN4~gP z8;u=gtu|tsTy8Tj-XrCEhB{>Bb&Jer`SjE4nc=xO8!iEP&V6Z<g-iI4R`57)JaE<6 z9eX`eYvIcrpdPw)664BvIB-JSZX8tAyDL_p<5KF!e-=v|SrS}MD_rIyh1AJM-9kJn z6)^qr*M^SGf(;tilTLpN2u#T%4$hy}E)KHTz)T<eHuVoEP_Vc4*L9Y|!FX3})IoV< zt9EsQu`#WOM8_Zf)BNnrWvyN#MqjGb)hB{C)VnnVX3VW^{_Bzf0gb-iUF&ds)Dw=L zw4YV1WLK>$_5QnP!N*(Fr7_9GV+VDR<w*FX@2y5;Y4PfbZ%d4|dgA#+9;GmPDN5XA z>t5~G>SGtP)!;P8ho>WACKlwOS8!4kE{E5%&PLZoFjV{P>5x?C3E2;h=6@^Y8@<lx zh<>~w`QbIkBU;So$nVrEQ32O?^xL!r7Z<t3w5qX7&D9f=#N9cbHfoM@El_X2;f;Zx z;va($Y8hP1Y#e)BZI7TA<$kXxTYB^oU@8as1Nl3G`O6{#Lru@^#{W#MJ)3DLspWvX zs76!p;-b^`XzS9u|7S{0_`@%N=uvir9hJ(xKCVlE6%TBL^X6_EuIhJMoGIZ!0CePN z4?U>9DRBr@Pwz8jmwH`6n5b7EE0m!9xUI2%v(v4Zwm1IVn5Qvq_G+tJ<?@N8S}b?| z*r1y!Nk*o7N>9Q52CII^Q7}sL_`=|pdBRG$-xMo=fT|mja+D8j@&m%BR`(5!qu8?E zouOT+m5u`Y%wIC$%IKFeBO@xuQ{nZmXxV!(*6zhv2cI9aJ1xq8V{o-w(V<txrwd(L zhF9#Qk*esjoX99Ev$ZJ7i~p`lQa#YL{GT>dl2-rgvFEf6-ROe9!aIqY<wlZ==Xk&p znwJ#9{fS@x&JI0;sznIUs%G^1Ejsxz3I)W|9xq4$cLc0s?uiX!yK?A!KgdpXUQ@z1 z#83SmZG$`DYvQTwG*`y~>8O5SlMH0>%vqU6@^9N!&OHp?{_4*?nT*Gl`PhQQ?Yc{U z_7C|~LIn@QXF&(%AEltS<8PVp7R+CQLX(%j*7TfuQhc0$)VgdvC2I>RSsKAXd`TE3 z67W(-Jqb>Dh1DjM<E}9q)!TJuLI`6>Z#3#e`zzVs;Cz#@Wc{g6%%)zPOG~?(JFhxF ztsXUtfOrSO?QW%?<lpH8M-XQ44bkuEopoVlh6YTRe#`*X;~l7EdQi*7QNAET*>3mg z=c&2s)x&<(=776>ZpC(iRqiRFX<fAqy)oKzlKo_s#ZS@RO^ur=J(t3eG;x1wJF9A{ zLPk{aFxf=&T@^OFe~TnqCyrGCm#-$1eeC^SxP^j2DB)WOb01#!y(DIndu$eP<Mg#j zii$YGBPsIg>Zy>;Eq%WTM#8fGrKgc_GcY`7WU_SE*XQtHzH_Q0S9<!h$qO>y-`{hO zsW<;c<-n+MsoMhY(dW~ruZHEoQBjsvgcAF$*HPS!1aVj_vDsB)*(Pa0BwR`}R-nZz zb6J#ZYybV#jwa(ARnlcUXGI?r2B17o5hxNaGb|FV_=chHK9}!WTu!&Au}o`l`?UnC zfqQKb!*L~k>9@PkH^Uvar5u3$r;ljzL#cwOJsuYR(U4W)OAha9%j{O7I^cMX%l0pV z1r%{tnG^>tRm)w!$GvqLj=oBHj&pBj*nGRYgQJ9H!Kj>5I)zyN`zvF*+y_+WWF`*4 z*p!KtZsXvU?2cu@S0440?3E)AIeH)r^W5a;FVsGa$|3IJT%5A`$wY0|wy|oZdu-g? zT#I!3)4UK%j@Yi*WL#u6bjR#rZ_XDe4!?IIR4SFn=y;74^G|jzM2_5i|Bi1w=y=jD zym~|c(22E>tA^RxpWR!`>RO^k5kN*7uNp7vHY|YB1fJx4B8Z}Q!QPFz!uj5q^mno^ zZ4d5!&7k~g4IS_=<MnZ)-W<S}w!MJ<hR<5n^YfwpAs3e%7~4lqdl&`ZhSqI>8mj%$ z;c35=RqY(jOl$Apa$g==+|QgN2e$u>bANgy#fM}}gSWdYB5J8*9vs`f0g-&?twl&) zp;=ffOdMvFHKeBG_!PBFz9v^$Ri0Acu5ZAh^!^|St9<8L`VGHETg4-hN@E>tMmD?e z{UaU6|45P+X2FF+kJv9i0hwO!eJah`-FM2{UuE!^eDmG>+MMloVuqcM_3wl}O|bjI zZBB}5>lLkhj(-Jg4Vvd}RP7x;h=n~g?VSHEqcVESFW=XvYRq;;eJ{j3mv{61L{(+h zB@P6{)&z;VgkqN|Ha_lXVYi=mFrV;1euJl~^;={sg4bx%j<iKhu<=&op_iP(K%T5j zoSL!ILW|ofGJmW@t~gWyWXwMJG9r8Lh(*-!G@{M%+V?Nu(b%fwe>W0>C0fQcVxh>B zCRpWx)zUvg;Yc^fZ;yK>K8}Z3yTnT=@%?Vgc+5Z4$Y&ug3%5F2EBrWynjzW{8P4!p zzBhL^QF?|Jind97_G!GpoJmB4cPjX2S|~MiL&@aW*+t)XL(l%^>RiduZPcMfl=FE1 z?+P(M7`m?1C5+5k2orNUH7|}PWJ;S(2AFDF)2jVg@)!g)=mf}!UjddhZv+qA9Wf(; zw0|AUKbzmC8F9PbeYK_Bg=J21<?fu>`5JusbXDln_!zA1vSa8rj*76%tv4`K|9*6o zzy#gwsT%#xmtT8_pqQ=x4umZFq#)3sZ`K&1Y1tdMhS?`&Xe?W%!t&YHhy}Fuc-SmD zYs&xl=UVsKi6;C7PS#-CdNBBZvIc%l8&S>7R_fAVFBw{QV1zbmd~ei2*iXCwk^cL< zHmrBes9kyOM1⁣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 NsVZqIR>@mN{6A11CyD?7 literal 0 HcmV?d00001 diff --git a/src/webui/service/static/topology_icons/packet-router.png b/src/webui/service/static/topology_icons/packet-router.png new file mode 100644 index 0000000000000000000000000000000000000000..5d2ad4dabe730f78206afddb21886c6678e88a26 GIT binary patch literal 16162 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 Wi5x2LQ^4GJfP{$b&k7-Z|NjB9bjKh7 literal 0 HcmV?d00001 diff --git a/src/webui/service/static/topology_icons/packet-switch.png b/src/webui/service/static/topology_icons/packet-switch.png new file mode 100644 index 0000000000000000000000000000000000000000..14f81111f9fbb4236f60f92cac1147365112bc41 GIT binary patch literal 9777 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 literal 0 HcmV?d00001 diff --git a/src/webui/service/templates/base.html b/src/webui/service/templates/base.html index fcc8c0a8d..d5f748eae 100644 --- a/src/webui/service/templates/base.html +++ b/src/webui/service/templates/base.html @@ -38,7 +38,7 @@ <nav class="navbar navbar-expand-lg navbar-dark bg-primary" style="margin-bottom: 10px;"> <div class="container-fluid"> - <a class="navbar-brand" href="#"> + <a class="navbar-brand" href="{{ url_for('main.home') }}"> <img src="https://teraflow-h2020.eu/sites/teraflow/files/public/favicon.png" alt="" width="30" height="24" class="d-inline-block align-text-top"/> TeraFlow </a> @@ -55,25 +55,31 @@ {% endif %} </li> <li class="nav-item"> - {% if '/service/' in request.path %} - <a class="nav-link active" aria-current="page" href="{{ url_for('service.home') }}">Service</a> + {% if '/device/' in request.path %} + <a class="nav-link active" aria-current="page" href="{{ url_for('device.home') }}">Device</a> {% else %} - <a class="nav-link" href="{{ url_for('service.home') }}">Service</a> + <a class="nav-link" href="{{ url_for('device.home') }}">Device</a> {% endif %} - <!-- <a class="nav-link" href="{{ url_for('service.home') }}">Service</a> --> </li> <li class="nav-item"> - {% if '/device/' in request.path %} - <a class="nav-link active" aria-current="page" href="{{ url_for('device.home') }}">Device</a> + {% if '/link/' in request.path %} + <a class="nav-link active" aria-current="page" href="{{ url_for('link.home') }}">Link</a> {% else %} - <a class="nav-link" href="{{ url_for('device.home') }}">Device</a> + <a class="nav-link" href="{{ url_for('link.home') }}">Link</a> {% endif %} - <!-- <a class="nav-link" href="{{ url_for('service.home') }}">Service</a> --> </li> - <!-- <li class="nav-item"> - <a class="nav-link" href="#">Compute</a> + <li class="nav-item"> + {% if '/service/' in request.path %} + <a class="nav-link active" aria-current="page" href="{{ url_for('service.home') }}">Service</a> + {% else %} + <a class="nav-link" href="{{ url_for('service.home') }}">Service</a> + {% endif %} </li> + <li class="nav-item"> + <a class="nav-link" href="#" id="grafana_link" target="grafana">Grafana</a> + </li> + <!-- <li class="nav-item"> <a class="nav-link" href="#">Context</a> </li> @@ -110,14 +116,24 @@ <div class="row"> <div class="col-xxl-12"> {% block content %}{% endblock %} - </div> + </div> </div> </main> - <footer class="footer" style="background-color: darkgrey;"> - <div class="row"> - <div class="col-md-12"> - <p class="text-muted text-center" style="color: white;">© 2021-2023</p> + <footer class="footer" style="background-color: darkgrey; margin-top: 30px; padding-top: 20px;"> + <div class="container"> + <div class="row"> + <div class="col-md-12"> + <p class="text-center" style="color: white;">© 2021-2023</p> + </div> + </div> + <div class="row"> + <div class="col-md-6"> + <p>This project has received funding from the European Union's Horizon 2020 research and innovation programme under grant agreement No 101015857.</p> + </div> + <div class="col-md-6"> + <img src="https://teraflow-h2020.eu/sites/teraflow/files/public/content-images/media/2021/logo%205G-ppp%20eu.png" width="310" alt="5g ppp EU logo" loading="lazy" typeof="foaf:Image"> + </div> </div> </div> </footer> @@ -127,7 +143,9 @@ <!-- Option 1: Bootstrap Bundle with Popper --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-kQtW33rZJAHjgefvhyyzcGF3C5TFyBQBA13V1RKPf4uH+bwyzQxZ6CmMZHmNBEfJ" crossorigin="anonymous"></script> <!-- <script src="{{ url_for('static', filename='site.js') }}"/> --> - + <script> + document.getElementById("grafana_link").href = window.location.protocol + "//" + window.location.hostname + ":30300" + </script> <!-- Option 2: Separate Popper and Bootstrap JS --> <!-- <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js" integrity="sha384-7+zCNj/IqJ95wo16oMtfsKbZ9ccEh31eOz1HGyDuCQ6wgnyJNSYdrPa03rtR1zdB" crossorigin="anonymous"></script> diff --git a/src/webui/service/templates/device/add.html b/src/webui/service/templates/device/add.html index aada90f38..fe1ba31f2 100644 --- a/src/webui/service/templates/device/add.html +++ b/src/webui/service/templates/device/add.html @@ -101,9 +101,16 @@ List the device drivers by their numerical ID, separated by commas, without spaces between them. Numerical IDs: {{ device_driver_ids }}. </div> </div> - <div class="row mb-3"> - <button type="submit" class="btn btn-primary">{{ submit_text }}</button> - </div> + <div class="d-grid gap-2 d-md-flex justify-content-md-start"> + <button type="submit" class="btn btn-primary"> + <i class="bi bi-plus-circle-fill"></i> + {{ submit_text }} + </button> + <button type="button" class="btn btn-block btn-secondary" onclick="javascript: history.back()"> + <i class="bi bi-box-arrow-in-left"></i> + Cancel + </button> + </div> </fieldset> </form> {% endblock %} \ No newline at end of file diff --git a/src/webui/service/templates/device/detail.html b/src/webui/service/templates/device/detail.html index a8c635808..143bbeed7 100644 --- a/src/webui/service/templates/device/detail.html +++ b/src/webui/service/templates/device/detail.html @@ -21,10 +21,16 @@ <div class="row mb-3"> <div class="col-sm-3"> - <button type="button" class="btn btn-success" onclick="window.location.href = '/device/'"><i class="bi bi-box-arrow-in-left"></i>Back to device list</button> + <button type="button" class="btn btn-success" onclick="window.location.href = '/device/'"> + <i class="bi bi-box-arrow-in-left"></i> + Back to device list + </button> </div> <div class="col-sm-3"> - <a id="update" class="btn btn-secondary" href="#"><i class="bi bi-pencil-square"></i>Update</a> + <a id="update" class="btn btn-secondary" href="#"> + <i class="bi bi-pencil-square"></i> + Update + </a> </div> <div class="col-sm-3"> <!-- <button type="button" class="btn btn-danger"><i class="bi bi-x-square"></i>Delete device</button> --> @@ -35,24 +41,22 @@ </div> <div class="row mb-3"> - <b>UUID:</b> - <div class="col-sm-10"> + <div class="col-sm-1"><b>UUID:</b></div> + <div class="col-sm-5"> {{ device.device_id.device_uuid.uuid }} </div> - </div> - <div class="row mb-3"> - <b>Type:</b> - <div class="col-sm-10"> + <div class="col-sm-1"><b>Type:</b></div> + <div class="col-sm-5"> {{ device.device_type }} </div> </div> <div class="row mb-3"> - <b>Configurations:</b> - <div class="col-sm-10"> + <div class="col-sm-1"><b>Drivers:</b></div> + <div class="col-sm-11"> <ul> - {% for config in device.device_config.config_rules %} - <li>{{ config.resource_key }}: {{ config.resource_value }}</li> - {% endfor %} + {% for driver in device.device_drivers %} + <li>{{ dde.Name(driver).replace('DEVICEDRIVER_', '').replace('UNDEFINED', 'EMULATED') }}</li> + {% endfor %} </ul> </div> </div> @@ -66,6 +70,22 @@ </ul> </div> </div> + <div class="row mb-3"> + <b>Configurations:</b> + <div class="col-sm-10"> + <ul> + {% for config in device.device_config.config_rules %} + <li>{{ config.resource_key }}: + <ul> + {% for key, value in (config.resource_value | from_json).items() %} + <li><b>{{ key }}:</b> {{ value }}</li> + {% endfor %} + </ul> + </li> + {% endfor %} + </ul> + </div> + </div> <!-- Modal --> <div class="modal fade" id="deleteModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true"> diff --git a/src/webui/service/templates/device/home.html b/src/webui/service/templates/device/home.html index 9f3190669..2c108add9 100644 --- a/src/webui/service/templates/device/home.html +++ b/src/webui/service/templates/device/home.html @@ -47,7 +47,7 @@ <th scope="col">Endpoints</th> <th scope="col">Drivers</th> <th scope="col">Status</th> - <th scope="col">Configuration</th> + <!-- <th scope="col">Configuration</th> --> <th scope="col"></th> </tr> </thead> @@ -73,12 +73,12 @@ <td> <ul> {% for driver in device.device_drivers %} - <li>{{ dde.Name(driver).replace('DEVICEDRIVER_', '') }}</li> + <li>{{ dde.Name(driver).replace('DEVICEDRIVER_', '').replace('UNDEFINED', 'EMULATED') }}</li> {% endfor %} </ul> </td> <td>{{ dose.Name(device.device_operational_status).replace('DEVICEOPERATIONALSTATUS_', '') }}</td> - <td> + <!-- <td> <ul> {% for config in device.device_config.config_rules %} <li> @@ -87,7 +87,7 @@ </li> {% endfor %} </ul> - </td> + </td> --> <td> <a href="{{ url_for('device.detail', device_uuid=device.device_id.device_uuid.uuid) }}"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16"> diff --git a/src/webui/service/templates/link/home.html b/src/webui/service/templates/link/home.html new file mode 100644 index 000000000..d0c122f6a --- /dev/null +++ b/src/webui/service/templates/link/home.html @@ -0,0 +1,96 @@ +<!-- + Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/) + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +{% extends 'base.html' %} + +{% block content %} + <h1>Links</h1> + + <div class="row"> + <div class="col"> + <!-- <a href="#" class="btn btn-primary" style="margin-bottom: 10px;"> + <i class="bi bi-plus"></i> + Add New Link + </a> --> + </div> + <div class="col"> + {{ links | length }} links found</i> + </div> + <!-- <div class="col"> + <form> + <div class="input-group"> + <input type="text" aria-label="Search" placeholder="Search..." class="form-control"/> + <button type="submit" class="btn btn-primary">Search</button> + </div> + </form> + </div> --> + </div> + + <table class="table table-striped table-hover"> + <thead> + <tr> + <th scope="col">#</th> + <th scope="col">Endpoints</th> + <th scope="col"></th> + </tr> + </thead> + <tbody> + {% if links %} + {% for link in links %} + <tr> + <td> + <!-- <a href="#"> --> + {{ link.link_id.link_uuid.uuid }} + <!-- </a> --> + </td> + + <td> + <ul> + {% for end_point in link.link_endpoint_ids %} + <li> + {{ end_point.endpoint_uuid.uuid }} / + Device: + <a href="{{ url_for('device.detail', device_uuid=end_point.device_id.device_uuid.uuid) }}"> + {{ end_point.device_id.device_uuid.uuid }} + <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16"> + <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/> + <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/> + </svg> + </a> + </li> + {% endfor %} + </ul> + </td> + + <td> + <!-- <a href="#"> + <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16"> + <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/> + <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/> + </svg> + </a> --> + </td> + </tr> + {% endfor %} + {% else %} + <tr> + <td colspan="7">No links found</td> + </tr> + {% endif %} + </tbody> + </table> + +{% endblock %} \ No newline at end of file diff --git a/src/webui/service/templates/main/about.html b/src/webui/service/templates/main/about.html index 8bb77b63e..4ba3a5845 100644 --- a/src/webui/service/templates/main/about.html +++ b/src/webui/service/templates/main/about.html @@ -20,6 +20,6 @@ <p>For more information, visit the <a href="https://teraflow-h2020.eu/" target="_newtf">TeraFlow H2020 webpage</a>.</p> - <img alt="Consortium" src="{{ url_for('static', filename='partners.png') }}"/> + <img alt="Consortium" class="img-fluid" src="{{ url_for('static', filename='partners.png') }}"/> {% endblock %} \ No newline at end of file diff --git a/src/webui/service/templates/main/home.html b/src/webui/service/templates/main/home.html index e7633bbdb..2134a3a87 100644 --- a/src/webui/service/templates/main/home.html +++ b/src/webui/service/templates/main/home.html @@ -17,8 +17,7 @@ {% extends 'base.html' %} {% block content %} - <h1>This is the home page</h1> - <p>Here we have have several things.</p> + <h1>TeraFlow OS SDN Controller</h1> {% for field, message in context_form.errors.items() %} <div class="alert alert-dismissible fade show" role="alert"> @@ -28,26 +27,58 @@ {% endfor %} - <h2>Select the working context</h2> - <form id="select_context" method="POST"> + <form id="select_context" method="POST" enctype="multipart/form-data"> {{ context_form.hidden_tag() }} <fieldset class="form-group"> - <div class="input-group mb-3"> - - {% if context_form.context.errors %} - {{ context_form.context(class="form-select is-invalid") }} - <div class="invalid-feedback"> - {% for error in context_form.context.errors %} - <span>{{ error }}</span> - {% endfor %} - </div> - {% else %} - {{ context_form.context(class="form-select") }} - {% endif %} - - {{ context_form.submit(class='btn btn-primary') }} + <legend>Select the working context, or upload a JSON descriptors file</legend> + <div class="row mb-3"> + {{ context_form.context.label(class="col-sm-1 col-form-label") }} + <div class="col-sm-5"> + {% if context_form.context.errors %} + {{ context_form.context(class="form-select is-invalid") }} + <div class="invalid-feedback"> + {% for error in context_form.context.errors %} + <span>{{ error }}</span> + {% endfor %} + </div> + {% else %} + {{ context_form.context(class="form-select") }} + {% endif %} + </div> + <div class="col-sm-2"> + {{ context_form.submit(class='btn btn-primary') }} + </div> </div> </fieldset> </form> -{% endblock %} \ No newline at end of file + <form id="select_context" method="POST" enctype="multipart/form-data"> + {{ context_form.hidden_tag() }} + <fieldset class="form-group"> + <legend>Upload a JSON descriptors file</legend> + <div class="row mb-3"> + {{ descriptor_form.descriptors.label(class="col-sm-1 col-form-label") }} + <div class="col-sm-5"> + {% if descriptor_form.descriptors.errors %} + {{ descriptor_form.descriptors(class="form-control is-invalid") }} + <div class="invalid-feedback"> + {% for error in descriptor_form.descriptors.errors %} + <span>{{ error }}</span> + {% endfor %} + </div> + {% else %} + {{ descriptor_form.descriptors(class="form-control") }} + {% endif %} + </div> + <div class="col-sm-2"> + {{ descriptor_form.submit(class='btn btn-primary') }} + </div> + </div> + </fieldset> + </form> + + <script src="https://d3js.org/d3.v4.min.js"></script> + <div id="topology"></div> + <script src="{{ url_for('static', filename='topology.js') }}"></script> + +{% endblock %} diff --git a/src/webui/service/templates/service/detail.html b/src/webui/service/templates/service/detail.html new file mode 100644 index 000000000..77988c74c --- /dev/null +++ b/src/webui/service/templates/service/detail.html @@ -0,0 +1,99 @@ +<!-- + Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/) + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +{% extends 'base.html' %} + +{% block content %} + <h1>Service {{ service.service_id.service_uuid.uuid }}</h1> + + <div class="row mb-3"> + <div class="col-sm-3"> + <button type="button" class="btn btn-success" onclick="window.location.href = '/service/'"> + <i class="bi bi-box-arrow-in-left"></i> + Back to service list + </button> + </div> + <div class="col-sm-3"> + <a id="update" class="btn btn-secondary" href="#"> + <i class="bi bi-pencil-square"></i> + Update + </a> + </div> + <div class="col-sm-3"> + <!-- <button type="button" class="btn btn-danger"><i class="bi bi-x-square"></i>Delete service</button> --> + <button type="button" class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#deleteModal"> + <i class="bi bi-x-square"></i>Delete service + </button> + </div> + </div> + + <div class="row mb-3"> + <div class="col-sm-1"><b>UUID:</b></div> + <div class="col-sm-5"> + {{ service.service_id.service_uuid.uuid }} + </div> + <div class="col-sm-1"><b>Type:</b></div> + <div class="col-sm-5"> + {{ service.service_type }} + </div> + </div> + <div class="row mb-3"> + <b>Endpoints:</b> + <div class="col-sm-10"> + <ul> + {% for endpoint in service.service_endpoint_ids %} + <li>{{ endpoint.endpoint_uuid.uuid }}: {{ endpoint.endpoint_type }}</li> + {% endfor %} + </ul> + </div> + </div> + <div class="row mb-3"> + <b>Configurations:</b> + <div class="col-sm-10"> + <ul> + {% for config in service.service_config.config_rules %} + <li>{{ config.resource_key }}: + <ul> + {% for key, value in (config.resource_value | from_json).items() %} + <li><b>{{ key }}:</b> {{ value }}</li> + {% endfor %} + </ul> + </li> + {% endfor %} + </ul> + </div> + </div> + + <!-- Modal --> +<div class="modal fade" id="deleteModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <h5 class="modal-title" id="staticBackdropLabel">Delete service?</h5> + <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> + </div> + <div class="modal-body"> + Are you sure you want to delete the service "{{ service.service_id.service_uuid.uuid }}"? + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">No</button> + <a type="button" class="btn btn-danger" href="{{ url_for('service.delete', service_uuid=service.service_id.service_uuid.uuid) }}"><i class="bi bi-exclamation-diamond"></i>Yes</a> + </div> + </div> + </div> + </div> + +{% endblock %} \ No newline at end of file diff --git a/src/webui/service/templates/service/home.html b/src/webui/service/templates/service/home.html index 8f6a99dc3..0e152006c 100644 --- a/src/webui/service/templates/service/home.html +++ b/src/webui/service/templates/service/home.html @@ -20,7 +20,6 @@ <h1>Services</h1> <div class="row"> - {% if context_found %} <!-- <div class="col"> <a href="{{ url_for('service.add') }}" class="btn btn-primary" style="margin-bottom: 10px;"> <i class="bi bi-plus"></i> @@ -38,11 +37,6 @@ </div> </form> </div> --> - {% else %} - <div class="col"> - Context <i>{{ session['context_uuid'] }}</i> not found. - </div> - {% endif %} </div> @@ -54,8 +48,7 @@ <th scope="col">End points</th> <th scope="col">Constraints</th> <th scope="col">Status</th> - <th scope="col">Configuration</th> - <!-- <th scope="col"></th> --> + <th scope="col"></th> </tr> </thead> <tbody> @@ -86,24 +79,13 @@ </td> <td>{{ sse.Name(service.service_status.service_status).replace('SERVICESTATUS_', '') }}</td> <td> - <ul> - {% for rule in service.service_config.config_rules %} - <li> - Key: {{ rule.resource_key }} - <br/> - Value: {{ rule.resource_value }} - </li> - {% endfor %} - </ul> - </td> - <!-- <td> - <a href="{{ url_for('service.detail', service_uuid=service.service_id.service_uuid.uuid.replace('/', '_')) }}"> + <a href="{{ url_for('service.detail', service_uuid=service.service_id.service_uuid.uuid) }}"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16"> <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/> <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/> </svg> </a> - </td> --> + </td> </tr> {% endfor %} {% else %} -- GitLab