From b76645c1bec97346f5735cbd26a756b59e8aad76 Mon Sep 17 00:00:00 2001 From: Tencho Tenev Date: Wed, 10 Nov 2021 10:37:16 +0200 Subject: [PATCH 01/26] wip: configure traefik self-signed TLS Exposed on port 443 and routes to front and back-ends --- packages/grid/docker-compose.override.yml | 17 +++++++++++++++++ packages/grid/traefik/.gitignore | 1 + .../traefik/dynamic-configurations/certs.yaml | 11 +++++++++++ 3 files changed, 29 insertions(+) create mode 100644 packages/grid/traefik/.gitignore create mode 100644 packages/grid/traefik/dynamic-configurations/certs.yaml diff --git a/packages/grid/docker-compose.override.yml b/packages/grid/docker-compose.override.yml index 83564b48a71..41e81fb1805 100644 --- a/packages/grid/docker-compose.override.yml +++ b/packages/grid/docker-compose.override.yml @@ -4,6 +4,8 @@ services: # ports: # - "${DOMAIN_PORT?80}:80" # - "8080" + volumes: + - ./traefik:/etc/traefik command: # Enable Docker in Traefik, so that it reads labels from Docker services - --providers.docker @@ -23,6 +25,11 @@ services: # Enable the Dashboard and API in insecure mode for local development - --api.insecure=true - --api.dashboard=true + # + - --providers.file.directory=/etc/traefik/dynamic-configurations + - --providers.file.watch=true + - --entryPoints.web.address=:80 + - --entryPoints.websecure.address=:443 labels: - traefik.enable=true - traefik.http.routers.${STACK_NAME?Variable not set}-traefik-public-http.rule=Host(`${DOMAIN?Variable not set}`) @@ -70,6 +77,9 @@ services: - traefik.enable=true - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set} - traefik.http.routers.${STACK_NAME?Variable not set}-backend-http.rule=PathPrefix(`/api`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`) # WARNING: this wont match /api/v1/syft/stream because of length + - traefik.http.routers.${STACK_NAME?Variable not set}-backend-https.rule=PathPrefix(`/api`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`) # WARNING: this wont match /api/v1/syft/stream because of length + - traefik.http.routers.${STACK_NAME?Variable not set}-backend-https.entrypoints=websecure + - traefik.http.routers.${STACK_NAME?Variable not set}-backend-https.tls=true - traefik.http.services.${STACK_NAME?Variable not set}-backend.loadbalancer.server.port=8001 network_mode: service:proxy @@ -101,6 +111,9 @@ services: - traefik.enable=true - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set} - traefik.http.routers.${STACK_NAME?Variable not set}-backend-stream-http.rule=PathPrefix(`/api`) && PathPrefix(`/api/v1/syft/stream`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`) # WARNING: this only matches /api/v1/syft/stream because of length + - traefik.http.routers.${STACK_NAME?Variable not set}-backend-stream-https.rule=PathPrefix(`/api`) && PathPrefix(`/api/v1/syft/stream`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`) # WARNING: this only matches /api/v1/syft/stream because of length + - traefik.http.routers.${STACK_NAME?Variable not set}-backend-stream-https.entrypoints=websecure + - traefik.http.routers.${STACK_NAME?Variable not set}-backend-stream-https.tls=true - traefik.http.services.${STACK_NAME?Variable not set}-backend-stream.loadbalancer.server.port=8011 network_mode: service:proxy @@ -143,6 +156,9 @@ services: - traefik.enable=true - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set} - traefik.http.routers.${STACK_NAME?Variable not set}-frontend-http.rule=PathPrefix(`/`) + - traefik.http.routers.${STACK_NAME?Variable not set}-frontend-https.rule=PathPrefix(`/`) + - traefik.http.routers.${STACK_NAME?Variable not set}-frontend-https.entrypoints=websecure + - traefik.http.routers.${STACK_NAME?Variable not set}-frontend-https.tls=true - traefik.http.services.${STACK_NAME?Variable not set}-frontend.loadbalancer.server.port=80 tailscale: @@ -164,6 +180,7 @@ services: - sys_module ports: - "${DOMAIN_PORT?80}:80" + - "443:443" - "41641/udp" - "4000" depends_on: diff --git a/packages/grid/traefik/.gitignore b/packages/grid/traefik/.gitignore new file mode 100644 index 00000000000..df9128702e3 --- /dev/null +++ b/packages/grid/traefik/.gitignore @@ -0,0 +1 @@ +certs/ diff --git a/packages/grid/traefik/dynamic-configurations/certs.yaml b/packages/grid/traefik/dynamic-configurations/certs.yaml new file mode 100644 index 00000000000..c5feaf93d17 --- /dev/null +++ b/packages/grid/traefik/dynamic-configurations/certs.yaml @@ -0,0 +1,11 @@ +--- +# Dynamic configuration for Traefik with TLS certificates +tls: + certificates: + - certFile: /etc/traefik/certs/cert.pem + keyFile: /etc/traefik/certs/key.pem + stores: + default: + defaultCertificate: + certFile: /etc/traefik/certs/cert.pem + keyFile: /etc/traefik/certs/key.pem From b98fa1e3df77a51d508d7b2a79bf234a39f40bea Mon Sep 17 00:00:00 2001 From: Tencho Tenev Date: Fri, 12 Nov 2021 11:53:24 +0200 Subject: [PATCH 02/26] refactor: split docker-compose files --- packages/grid/.env | 1 + packages/grid/docker-compose.override.yml | 17 ------ .../grid/docker-compose.self-signed-tls.yml | 53 +++++++++++++++++++ 3 files changed, 54 insertions(+), 17 deletions(-) create mode 100644 packages/grid/docker-compose.self-signed-tls.yml diff --git a/packages/grid/.env b/packages/grid/.env index 3e4f73ad1fd..ab9ef8de610 100644 --- a/packages/grid/.env +++ b/packages/grid/.env @@ -3,6 +3,7 @@ DOMAIN=localhost DOMAIN_NAME=grid.openmined.org NODE_TYPE=domain DOMAIN_PORT=80 +SECURE_DOMAIN_PORT=443 HEADSCALE_PORT=8080 NETWORK_NAME=omnet diff --git a/packages/grid/docker-compose.override.yml b/packages/grid/docker-compose.override.yml index 41e81fb1805..83564b48a71 100644 --- a/packages/grid/docker-compose.override.yml +++ b/packages/grid/docker-compose.override.yml @@ -4,8 +4,6 @@ services: # ports: # - "${DOMAIN_PORT?80}:80" # - "8080" - volumes: - - ./traefik:/etc/traefik command: # Enable Docker in Traefik, so that it reads labels from Docker services - --providers.docker @@ -25,11 +23,6 @@ services: # Enable the Dashboard and API in insecure mode for local development - --api.insecure=true - --api.dashboard=true - # - - --providers.file.directory=/etc/traefik/dynamic-configurations - - --providers.file.watch=true - - --entryPoints.web.address=:80 - - --entryPoints.websecure.address=:443 labels: - traefik.enable=true - traefik.http.routers.${STACK_NAME?Variable not set}-traefik-public-http.rule=Host(`${DOMAIN?Variable not set}`) @@ -77,9 +70,6 @@ services: - traefik.enable=true - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set} - traefik.http.routers.${STACK_NAME?Variable not set}-backend-http.rule=PathPrefix(`/api`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`) # WARNING: this wont match /api/v1/syft/stream because of length - - traefik.http.routers.${STACK_NAME?Variable not set}-backend-https.rule=PathPrefix(`/api`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`) # WARNING: this wont match /api/v1/syft/stream because of length - - traefik.http.routers.${STACK_NAME?Variable not set}-backend-https.entrypoints=websecure - - traefik.http.routers.${STACK_NAME?Variable not set}-backend-https.tls=true - traefik.http.services.${STACK_NAME?Variable not set}-backend.loadbalancer.server.port=8001 network_mode: service:proxy @@ -111,9 +101,6 @@ services: - traefik.enable=true - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set} - traefik.http.routers.${STACK_NAME?Variable not set}-backend-stream-http.rule=PathPrefix(`/api`) && PathPrefix(`/api/v1/syft/stream`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`) # WARNING: this only matches /api/v1/syft/stream because of length - - traefik.http.routers.${STACK_NAME?Variable not set}-backend-stream-https.rule=PathPrefix(`/api`) && PathPrefix(`/api/v1/syft/stream`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`) # WARNING: this only matches /api/v1/syft/stream because of length - - traefik.http.routers.${STACK_NAME?Variable not set}-backend-stream-https.entrypoints=websecure - - traefik.http.routers.${STACK_NAME?Variable not set}-backend-stream-https.tls=true - traefik.http.services.${STACK_NAME?Variable not set}-backend-stream.loadbalancer.server.port=8011 network_mode: service:proxy @@ -156,9 +143,6 @@ services: - traefik.enable=true - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set} - traefik.http.routers.${STACK_NAME?Variable not set}-frontend-http.rule=PathPrefix(`/`) - - traefik.http.routers.${STACK_NAME?Variable not set}-frontend-https.rule=PathPrefix(`/`) - - traefik.http.routers.${STACK_NAME?Variable not set}-frontend-https.entrypoints=websecure - - traefik.http.routers.${STACK_NAME?Variable not set}-frontend-https.tls=true - traefik.http.services.${STACK_NAME?Variable not set}-frontend.loadbalancer.server.port=80 tailscale: @@ -180,7 +164,6 @@ services: - sys_module ports: - "${DOMAIN_PORT?80}:80" - - "443:443" - "41641/udp" - "4000" depends_on: diff --git a/packages/grid/docker-compose.self-signed-tls.yml b/packages/grid/docker-compose.self-signed-tls.yml new file mode 100644 index 00000000000..fa0372dba5b --- /dev/null +++ b/packages/grid/docker-compose.self-signed-tls.yml @@ -0,0 +1,53 @@ +version: "3.8" +services: + # To configure Traefik for self-signed TLS + # - use volume with the TLS configuration and user-provided self-signed certificates + # - configure entrypoints for HTTPS and HTTP + # - redirect all HTTP to HTTPS permanently + proxy: + volumes: + - ./traefik:/etc/traefik + command: + - --providers.file.directory=/etc/traefik/dynamic-configurations + - --providers.file.watch=true + - --entryPoints.websecure.address=:443 + - --entryPoints.websecure.http.tls=true + - --entryPoints.web.address=:80 + - --entrypoints.web.http.redirections.entryPoint.to=websecure + - --entrypoints.web.http.redirections.entryPoint.scheme=https + - --entrypoints.web.http.redirections.entrypoint.permanent=true + # The arguments below are the same as in docker-compose.override.yml + # Enable Docker in Traefik, so that it reads labels from Docker services + - --providers.docker + # Add a constraint to only use services with the label for this stack + # from the env var TRAEFIK_TAG + - --providers.docker.constraints=Label(`traefik.constraint-label-stack`, `${TRAEFIK_TAG?Variable not set}`) + # Do not expose all Docker services, only the ones explicitly exposed + - --providers.docker.exposedbydefault=false + # Disable Docker Swarm mode for local development + # - --providers.docker.swarmmode + # Enable the access log, with HTTP requests + - --accesslog + # Enable the Traefik log, for configurations and errors + - --log + # Enable the Dashboard and API + - --api + # Enable the Dashboard and API in insecure mode for local development + - --api.insecure=true + - --api.dashboard=true + + backend: + labels: + - traefik.http.routers.${STACK_NAME?Variable not set}-backend-http.entrypoints=websecure + + backend_stream: + labels: + - traefik.http.routers.${STACK_NAME?Variable not set}-backend-stream-http.entrypoints=websecure + + frontend: + labels: + - traefik.http.routers.${STACK_NAME?Variable not set}-frontend-http.entrypoints=websecure + + tailscale: + ports: + - "${SECURE_DOMAIN_PORT?443}:443" \ No newline at end of file From 42984affda079945858b3ace86df42360cb6ed21 Mon Sep 17 00:00:00 2001 From: Tencho Tenev Date: Mon, 15 Nov 2021 09:31:57 +0200 Subject: [PATCH 03/26] refactor: simplify traefik config in compose base replace www redirect with a simple catchall remove https and LE labels which seemed unused define and use entrypoint for http --- packages/grid/docker-compose.yml | 42 ++++++++++---------------------- 1 file changed, 13 insertions(+), 29 deletions(-) diff --git a/packages/grid/docker-compose.yml b/packages/grid/docker-compose.yml index f2b195ea1c7..5c2f2a4b3e2 100644 --- a/packages/grid/docker-compose.yml +++ b/packages/grid/docker-compose.yml @@ -9,6 +9,8 @@ services: volumes: - /var/run/docker.sock:/var/run/docker.sock command: + # Entrypoint web is for HTTP + - --entryPoints.web.address=:80 # Enable Docker in Traefik, so that it reads labels from Docker services - --providers.docker # Add a constraint to only use services with the label for this stack @@ -36,37 +38,16 @@ services: # Use the custom label "traefik.constraint-label=traefik-public" # This public Traefik will only use services with this label - traefik.constraint-label=${TRAEFIK_PUBLIC_TAG?Variable not set} - # traefik-http set up only to use the middleware to redirect to https - - traefik.http.middlewares.${STACK_NAME?Variable not set}-https-redirect.redirectscheme.scheme=https - - traefik.http.middlewares.${STACK_NAME?Variable not set}-https-redirect.redirectscheme.permanent=true - # Handle host with and without "www" to redirect to only one of them - # Uses environment variable DOMAIN - # To disable www redirection remove the Host() you want to discard, here and - # below for HTTPS - - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-http.rule=Host(`${DOMAIN?Variable not set}`) || Host(`www.${DOMAIN?Variable not set}`) - - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-http.entrypoints=http - # traefik-https the actual router using HTTPS - - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.rule=Host(`${DOMAIN?Variable not set}`) || Host(`www.${DOMAIN?Variable not set}`) - - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.entrypoints=https - - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.tls=true - # Use the "le" (Let's Encrypt) resolver created below - - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.tls.certresolver=le # Define the port inside of the Docker service to use - traefik.http.services.${STACK_NAME?Variable not set}-proxy.loadbalancer.server.port=80 - # Handle domain with and without "www" to redirect to only one - # To disable www redirection remove the next line - - traefik.http.middlewares.${STACK_NAME?Variable not set}-www-redirect.redirectregex.regex=^https?://(www.)?(${DOMAIN?Variable not set})/(.*) - # Redirect a domain with www to non-www - # To disable it remove the next line - - traefik.http.middlewares.${STACK_NAME?Variable not set}-www-redirect.redirectregex.replacement=https://${DOMAIN?Variable not set}/$${3} - # Redirect a domain without www to www - # To enable it remove the previous line and uncomment the next - # - traefik.http.middlewares.${STACK_NAME}-www-redirect.redirectregex.replacement=https://www.${DOMAIN}/$${3} - # Middleware to redirect www, to disable it remove the next line - - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.middlewares=${STACK_NAME?Variable not set}-www-redirect - # Middleware to redirect www, and redirect HTTP to HTTPS - # to disable www redirection remove the section: ${STACK_NAME?Variable not set}-www-redirect, - - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-http.middlewares=${STACK_NAME?Variable not set}-www-redirect,${STACK_NAME?Variable not set}-https-redirect + # Redirect all www to non-www on web (HTTP) + - "traefik.http.routers.www-catchall.entrypoints=web" + - "traefik.http.routers.www-catchall.rule=HostRegexp(`{host:(www\\.).+}`)" + - "traefik.http.routers.www-catchall.tls=true" + - "traefik.http.routers.www-catchall.middlewares=wwwtohttp" + - "traefik.http.middlewares.wwwtohttp.redirectregex.regex=^http?://(?:www\\.)?(.+)" + - "traefik.http.middlewares.wwwtohttp.redirectregex.replacement=http://$${1}" + - "traefik.http.middlewares.wwwtohttp.redirectregex.permanent=false" db: restart: always @@ -110,6 +91,7 @@ services: - traefik.enable=true - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set} - traefik.http.routers.${STACK_NAME?Variable not set}-backend-http.rule=PathPrefix(`/api`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`) # WARNING: this wont match /api/v1/syft/stream because of length + - traefik.http.routers.${STACK_NAME?Variable not set}-backend-http.entrypoints=web - traefik.http.services.${STACK_NAME?Variable not set}-backend.loadbalancer.server.port=80 backend_stream: @@ -137,6 +119,7 @@ services: - traefik.enable=true - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set} - traefik.http.routers.${STACK_NAME?Variable not set}-backend-stream-http.rule=PathPrefix(`/api`) && PathPrefix(`/api/v1/syft/stream`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`) # WARNING: this only matches /api/v1/syft/stream because of length + - traefik.http.routers.${STACK_NAME?Variable not set}-backend-stream-http.entrypoints=web - traefik.http.services.${STACK_NAME?Variable not set}-backend-stream.loadbalancer.server.port=80 celeryworker: @@ -175,6 +158,7 @@ services: - traefik.enable=true - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set} - traefik.http.routers.${STACK_NAME?Variable not set}-frontend-http.rule=PathPrefix(`/`) + - traefik.http.routers.${STACK_NAME?Variable not set}-frontend-http.entrypoints=web - traefik.http.services.${STACK_NAME?Variable not set}-frontend.loadbalancer.server.port=80 volumes: From e56b2526abdfc4c04c32d7c1a94e5dfff62c5d86 Mon Sep 17 00:00:00 2001 From: Tencho Tenev Date: Mon, 15 Nov 2021 09:45:08 +0200 Subject: [PATCH 04/26] refactor: simplify traefik config in compose override reorder traefik arguments to be more readable remove duplicate labels from override specify traefik entrypoint for headscale service --- packages/grid/docker-compose.override.yml | 33 +++++++++-------------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/packages/grid/docker-compose.override.yml b/packages/grid/docker-compose.override.yml index 83564b48a71..53acc4b73ef 100644 --- a/packages/grid/docker-compose.override.yml +++ b/packages/grid/docker-compose.override.yml @@ -4,7 +4,18 @@ services: # ports: # - "${DOMAIN_PORT?80}:80" # - "8080" + + # note: this is the whole command, it does not merge arguments from multiple Compose files command: + # Enable the Dashboard and API in insecure mode for local development + - --api.insecure=true + - --api.dashboard=true + + # The arguments below are from docker-compose.yml, with the following exclusions: + # --providers.docker.swarmmode - docker swarm mode is not enabled + + # Entrypoint web is for HTTP + - --entryPoints.web.address=:80 # Enable Docker in Traefik, so that it reads labels from Docker services - --providers.docker # Add a constraint to only use services with the label for this stack @@ -12,21 +23,13 @@ services: - --providers.docker.constraints=Label(`traefik.constraint-label-stack`, `${TRAEFIK_TAG?Variable not set}`) # Do not expose all Docker services, only the ones explicitly exposed - --providers.docker.exposedbydefault=false - # Disable Docker Swarm mode for local development - # - --providers.docker.swarmmode # Enable the access log, with HTTP requests - --accesslog # Enable the Traefik log, for configurations and errors - --log # Enable the Dashboard and API - --api - # Enable the Dashboard and API in insecure mode for local development - - --api.insecure=true - - --api.dashboard=true - labels: - - traefik.enable=true - - traefik.http.routers.${STACK_NAME?Variable not set}-traefik-public-http.rule=Host(`${DOMAIN?Variable not set}`) - - traefik.http.services.${STACK_NAME?Variable not set}-traefik-public.loadbalancer.server.port=80 + network_mode: service:tailscale networks: - "${TRAEFIK_PUBLIC_NETWORK?Variable not set}" @@ -67,9 +70,6 @@ services: # command: bash -c "while true; do sleep 1; done" # Infinite loop to keep container live doing nothing command: /start-reload.sh labels: - - traefik.enable=true - - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set} - - traefik.http.routers.${STACK_NAME?Variable not set}-backend-http.rule=PathPrefix(`/api`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`) # WARNING: this wont match /api/v1/syft/stream because of length - traefik.http.services.${STACK_NAME?Variable not set}-backend.loadbalancer.server.port=8001 network_mode: service:proxy @@ -98,9 +98,6 @@ services: # command: bash -c "while true; do sleep 1; done" # Infinite loop to keep container live doing nothing command: "waitforit -address=http://localhost:8001/api/v1/syft/metadata -status=200 -timeout=600 -- /start-reload.sh" labels: - - traefik.enable=true - - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set} - - traefik.http.routers.${STACK_NAME?Variable not set}-backend-stream-http.rule=PathPrefix(`/api`) && PathPrefix(`/api/v1/syft/stream`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`) # WARNING: this only matches /api/v1/syft/stream because of length - traefik.http.services.${STACK_NAME?Variable not set}-backend-stream.loadbalancer.server.port=8011 network_mode: service:proxy @@ -139,11 +136,6 @@ services: TYPE: ${NODE_TYPE?Variable not set} volumes: - ./frontend/src:/app/src - labels: - - traefik.enable=true - - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set} - - traefik.http.routers.${STACK_NAME?Variable not set}-frontend-http.rule=PathPrefix(`/`) - - traefik.http.services.${STACK_NAME?Variable not set}-frontend.loadbalancer.server.port=80 tailscale: hostname: ${DOMAIN_NAME?Variable not set} @@ -190,6 +182,7 @@ services: - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set} - traefik.http.routers.${STACK_NAME?Variable not set}-vpn-http.rule=PathPrefix(`/vpn`) - "traefik.http.routers.${STACK_NAME?Variable not set}-vpn-http.middlewares=${STACK_NAME?Variable not set}-vpn-http-stripprefix" + - traefik.http.routers.${STACK_NAME?Variable not set}-vpn-http.entrypoint=web - "traefik.http.middlewares.${STACK_NAME?Variable not set}-vpn-http-stripprefix.stripprefix.prefixes=/vpn" - traefik.http.services.${STACK_NAME?Variable not set}-vpn.loadbalancer.server.port=8080 From 686c4bfc395c3f208009d7d20c811345d76ac8b2 Mon Sep 17 00:00:00 2001 From: Tencho Tenev Date: Mon, 15 Nov 2021 09:53:13 +0200 Subject: [PATCH 05/26] refactor: simplify websecure compose file comments and more readable order of arguments www redirect for consistency with base compose file set traefik entrypoint for headscale to websecure --- ...d-tls.yml => docker-compose.websecure.yml} | 47 +++++++++++++++---- 1 file changed, 37 insertions(+), 10 deletions(-) rename packages/grid/{docker-compose.self-signed-tls.yml => docker-compose.websecure.yml} (55%) diff --git a/packages/grid/docker-compose.self-signed-tls.yml b/packages/grid/docker-compose.websecure.yml similarity index 55% rename from packages/grid/docker-compose.self-signed-tls.yml rename to packages/grid/docker-compose.websecure.yml index fa0372dba5b..6bc096f7664 100644 --- a/packages/grid/docker-compose.self-signed-tls.yml +++ b/packages/grid/docker-compose.websecure.yml @@ -1,22 +1,42 @@ +--- +# This file can be used to extend the docker-compose.override.yml Compose file. +# It adds a websecure entrypoint in the network proxy for HTTPS and TLS certificates. version: "3.8" services: - # To configure Traefik for self-signed TLS + # Add a port for HTTPS on the tailscale service + tailscale: + ports: + - "${SECURE_DOMAIN_PORT?443}:443" + # Configure Traefik for HTTPS and self-signed TLS # - use volume with the TLS configuration and user-provided self-signed certificates # - configure entrypoints for HTTPS and HTTP # - redirect all HTTP to HTTPS permanently proxy: volumes: - ./traefik:/etc/traefik + # note: this is the whole command, it does not merge arguments from multiple Compose files command: - --providers.file.directory=/etc/traefik/dynamic-configurations - --providers.file.watch=true + # Entrypoint websecure is for HTTPS - --entryPoints.websecure.address=:443 - --entryPoints.websecure.http.tls=true - - --entryPoints.web.address=:80 + # Redirect all web to websecure (HTTP to HTTPS) - --entrypoints.web.http.redirections.entryPoint.to=websecure - --entrypoints.web.http.redirections.entryPoint.scheme=https - --entrypoints.web.http.redirections.entrypoint.permanent=true + # The arguments below are the same as in docker-compose.override.yml + + # Enable the Dashboard and API in insecure mode for local development + - --api.insecure=true + - --api.dashboard=true + + # The arguments below are from docker-compose.yml, with the following exclusions: + # --providers.docker.swarmmode - docker swarm mode is not enabled + + # Entrypoint web is for HTTP + - --entryPoints.web.address=:80 # Enable Docker in Traefik, so that it reads labels from Docker services - --providers.docker # Add a constraint to only use services with the label for this stack @@ -24,17 +44,24 @@ services: - --providers.docker.constraints=Label(`traefik.constraint-label-stack`, `${TRAEFIK_TAG?Variable not set}`) # Do not expose all Docker services, only the ones explicitly exposed - --providers.docker.exposedbydefault=false - # Disable Docker Swarm mode for local development - # - --providers.docker.swarmmode # Enable the access log, with HTTP requests - --accesslog # Enable the Traefik log, for configurations and errors - --log # Enable the Dashboard and API - --api - # Enable the Dashboard and API in insecure mode for local development - - --api.insecure=true - - --api.dashboard=true + labels: + # Redirect all www to non-www on websecure (HTTPS) + - "traefik.http.routers.wwwsecure-catchall.entrypoints=websecure" + - "traefik.http.routers.wwwsecure-catchall.rule=HostRegexp(`{host:(www\\.).+}`)" + - "traefik.http.routers.wwwsecure-catchall.tls=true" + - "traefik.http.routers.wwwsecure-catchall.middlewares=wwwtohttps" + - "traefik.http.middlewares.wwwtohttps.redirectregex.regex=^https?://(?:www\\.)?(.+)" + - "traefik.http.middlewares.wwwtohttps.redirectregex.replacement=https://$${1}" + - "traefik.http.middlewares.wwwtohttps.redirectregex.permanent=false" + + # Override Traefik entrypoints in routers for all services. + # Compose labels are merged based on the label key, so websecure becomes the only entrypoint. backend: labels: @@ -48,6 +75,6 @@ services: labels: - traefik.http.routers.${STACK_NAME?Variable not set}-frontend-http.entrypoints=websecure - tailscale: - ports: - - "${SECURE_DOMAIN_PORT?443}:443" \ No newline at end of file + headscale: + labels: + - traefik.http.routers.${STACK_NAME?Variable not set}-vpn-http.entrypoint=websecure From d10b6b876c36a7c4d93ef2b9c73b11eaf33948ba Mon Sep 17 00:00:00 2001 From: Tencho Tenev Date: Mon, 15 Nov 2021 11:36:28 +0200 Subject: [PATCH 06/26] fix: bring back container labels in compose labels in the main file only apply when using docker swarm there is a difference between labels on services and on containers --- packages/grid/docker-compose.override.yml | 28 +++++++++++++++++++++- packages/grid/docker-compose.websecure.yml | 1 + 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/grid/docker-compose.override.yml b/packages/grid/docker-compose.override.yml index 53acc4b73ef..9a80cdd3841 100644 --- a/packages/grid/docker-compose.override.yml +++ b/packages/grid/docker-compose.override.yml @@ -29,7 +29,22 @@ services: - --log # Enable the Dashboard and API - --api - + # Since we disable Docker Swarm mode, labels must be set on the containers + labels: + - traefik.enable=true + # Use the traefik-public network (declared below) + - traefik.docker.network=${TRAEFIK_PUBLIC_NETWORK?Variable not set} + - traefik.http.routers.${STACK_NAME?Variable not set}-traefik-public-http.rule=Host(`${DOMAIN?Variable not set}`) + - traefik.http.routers.${STACK_NAME?Variable not set}-traefik-public-http.entrypoints=web + - traefik.http.services.${STACK_NAME?Variable not set}-traefik-public.loadbalancer.server.port=80 + # Redirect all www to non-www on web (HTTP) + - "traefik.http.routers.www-catchall.entrypoints=web" + - "traefik.http.routers.www-catchall.rule=HostRegexp(`{host:(www\\.).+}`)" + - "traefik.http.routers.www-catchall.tls=true" + - "traefik.http.routers.www-catchall.middlewares=wwwtohttp" + - "traefik.http.middlewares.wwwtohttp.redirectregex.regex=^http?://(?:www\\.)?(.+)" + - "traefik.http.middlewares.wwwtohttp.redirectregex.replacement=http://$${1}" + - "traefik.http.middlewares.wwwtohttp.redirectregex.permanent=false" network_mode: service:tailscale networks: - "${TRAEFIK_PUBLIC_NETWORK?Variable not set}" @@ -70,6 +85,9 @@ services: # command: bash -c "while true; do sleep 1; done" # Infinite loop to keep container live doing nothing command: /start-reload.sh labels: + - traefik.enable=true + - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set} + - traefik.http.routers.${STACK_NAME?Variable not set}-backend-http.rule=PathPrefix(`/api`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`) # WARNING: this wont match /api/v1/syft/stream because of length - traefik.http.services.${STACK_NAME?Variable not set}-backend.loadbalancer.server.port=8001 network_mode: service:proxy @@ -98,6 +116,9 @@ services: # command: bash -c "while true; do sleep 1; done" # Infinite loop to keep container live doing nothing command: "waitforit -address=http://localhost:8001/api/v1/syft/metadata -status=200 -timeout=600 -- /start-reload.sh" labels: + - traefik.enable=true + - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set} + - traefik.http.routers.${STACK_NAME?Variable not set}-backend-stream-http.rule=PathPrefix(`/api`) && PathPrefix(`/api/v1/syft/stream`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`) # WARNING: this only matches /api/v1/syft/stream because of length - traefik.http.services.${STACK_NAME?Variable not set}-backend-stream.loadbalancer.server.port=8011 network_mode: service:proxy @@ -136,6 +157,11 @@ services: TYPE: ${NODE_TYPE?Variable not set} volumes: - ./frontend/src:/app/src + labels: + - traefik.enable=true + - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set} + - traefik.http.routers.${STACK_NAME?Variable not set}-frontend-http.rule=PathPrefix(`/`) + - traefik.http.services.${STACK_NAME?Variable not set}-frontend.loadbalancer.server.port=80 tailscale: hostname: ${DOMAIN_NAME?Variable not set} diff --git a/packages/grid/docker-compose.websecure.yml b/packages/grid/docker-compose.websecure.yml index 6bc096f7664..b47bb586c1c 100644 --- a/packages/grid/docker-compose.websecure.yml +++ b/packages/grid/docker-compose.websecure.yml @@ -51,6 +51,7 @@ services: # Enable the Dashboard and API - --api labels: + - traefik.http.routers.${STACK_NAME?Variable not set}-traefik-public-http.entrypoints=websecure # Redirect all www to non-www on websecure (HTTPS) - "traefik.http.routers.wwwsecure-catchall.entrypoints=websecure" - "traefik.http.routers.wwwsecure-catchall.rule=HostRegexp(`{host:(www\\.).+}`)" From 21dd4247dcca9b4bcb49b2394825239571a0215b Mon Sep 17 00:00:00 2001 From: Tencho Tenev Date: Mon, 15 Nov 2021 11:39:57 +0200 Subject: [PATCH 07/26] revert: main compose changes not needed --- packages/grid/docker-compose.yml | 42 ++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/packages/grid/docker-compose.yml b/packages/grid/docker-compose.yml index 5c2f2a4b3e2..f2b195ea1c7 100644 --- a/packages/grid/docker-compose.yml +++ b/packages/grid/docker-compose.yml @@ -9,8 +9,6 @@ services: volumes: - /var/run/docker.sock:/var/run/docker.sock command: - # Entrypoint web is for HTTP - - --entryPoints.web.address=:80 # Enable Docker in Traefik, so that it reads labels from Docker services - --providers.docker # Add a constraint to only use services with the label for this stack @@ -38,16 +36,37 @@ services: # Use the custom label "traefik.constraint-label=traefik-public" # This public Traefik will only use services with this label - traefik.constraint-label=${TRAEFIK_PUBLIC_TAG?Variable not set} + # traefik-http set up only to use the middleware to redirect to https + - traefik.http.middlewares.${STACK_NAME?Variable not set}-https-redirect.redirectscheme.scheme=https + - traefik.http.middlewares.${STACK_NAME?Variable not set}-https-redirect.redirectscheme.permanent=true + # Handle host with and without "www" to redirect to only one of them + # Uses environment variable DOMAIN + # To disable www redirection remove the Host() you want to discard, here and + # below for HTTPS + - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-http.rule=Host(`${DOMAIN?Variable not set}`) || Host(`www.${DOMAIN?Variable not set}`) + - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-http.entrypoints=http + # traefik-https the actual router using HTTPS + - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.rule=Host(`${DOMAIN?Variable not set}`) || Host(`www.${DOMAIN?Variable not set}`) + - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.entrypoints=https + - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.tls=true + # Use the "le" (Let's Encrypt) resolver created below + - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.tls.certresolver=le # Define the port inside of the Docker service to use - traefik.http.services.${STACK_NAME?Variable not set}-proxy.loadbalancer.server.port=80 - # Redirect all www to non-www on web (HTTP) - - "traefik.http.routers.www-catchall.entrypoints=web" - - "traefik.http.routers.www-catchall.rule=HostRegexp(`{host:(www\\.).+}`)" - - "traefik.http.routers.www-catchall.tls=true" - - "traefik.http.routers.www-catchall.middlewares=wwwtohttp" - - "traefik.http.middlewares.wwwtohttp.redirectregex.regex=^http?://(?:www\\.)?(.+)" - - "traefik.http.middlewares.wwwtohttp.redirectregex.replacement=http://$${1}" - - "traefik.http.middlewares.wwwtohttp.redirectregex.permanent=false" + # Handle domain with and without "www" to redirect to only one + # To disable www redirection remove the next line + - traefik.http.middlewares.${STACK_NAME?Variable not set}-www-redirect.redirectregex.regex=^https?://(www.)?(${DOMAIN?Variable not set})/(.*) + # Redirect a domain with www to non-www + # To disable it remove the next line + - traefik.http.middlewares.${STACK_NAME?Variable not set}-www-redirect.redirectregex.replacement=https://${DOMAIN?Variable not set}/$${3} + # Redirect a domain without www to www + # To enable it remove the previous line and uncomment the next + # - traefik.http.middlewares.${STACK_NAME}-www-redirect.redirectregex.replacement=https://www.${DOMAIN}/$${3} + # Middleware to redirect www, to disable it remove the next line + - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.middlewares=${STACK_NAME?Variable not set}-www-redirect + # Middleware to redirect www, and redirect HTTP to HTTPS + # to disable www redirection remove the section: ${STACK_NAME?Variable not set}-www-redirect, + - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-http.middlewares=${STACK_NAME?Variable not set}-www-redirect,${STACK_NAME?Variable not set}-https-redirect db: restart: always @@ -91,7 +110,6 @@ services: - traefik.enable=true - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set} - traefik.http.routers.${STACK_NAME?Variable not set}-backend-http.rule=PathPrefix(`/api`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`) # WARNING: this wont match /api/v1/syft/stream because of length - - traefik.http.routers.${STACK_NAME?Variable not set}-backend-http.entrypoints=web - traefik.http.services.${STACK_NAME?Variable not set}-backend.loadbalancer.server.port=80 backend_stream: @@ -119,7 +137,6 @@ services: - traefik.enable=true - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set} - traefik.http.routers.${STACK_NAME?Variable not set}-backend-stream-http.rule=PathPrefix(`/api`) && PathPrefix(`/api/v1/syft/stream`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`) # WARNING: this only matches /api/v1/syft/stream because of length - - traefik.http.routers.${STACK_NAME?Variable not set}-backend-stream-http.entrypoints=web - traefik.http.services.${STACK_NAME?Variable not set}-backend-stream.loadbalancer.server.port=80 celeryworker: @@ -158,7 +175,6 @@ services: - traefik.enable=true - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set} - traefik.http.routers.${STACK_NAME?Variable not set}-frontend-http.rule=PathPrefix(`/`) - - traefik.http.routers.${STACK_NAME?Variable not set}-frontend-http.entrypoints=web - traefik.http.services.${STACK_NAME?Variable not set}-frontend.loadbalancer.server.port=80 volumes: From f60cea25e0b3f5fef936ff995354cbc4321ff633 Mon Sep 17 00:00:00 2001 From: Tencho Tenev Date: Mon, 15 Nov 2021 12:02:42 +0200 Subject: [PATCH 08/26] wip: hagrid launch with tls --- packages/hagrid/hagrid/cli.py | 16 ++++++++++++++++ packages/hagrid/hagrid/grammar.py | 8 ++++++++ 2 files changed, 24 insertions(+) diff --git a/packages/hagrid/hagrid/cli.py b/packages/hagrid/hagrid/cli.py index 751284a30fa..bc5a47d9b3d 100644 --- a/packages/hagrid/hagrid/cli.py +++ b/packages/hagrid/hagrid/cli.py @@ -148,6 +148,11 @@ def clean(location: str) -> None: default="", type=str, ) +@click.option( + "--insecure", + is_flag=True, + help="Launch without TLS configuration" +) def launch(args: TypeTuple[str], **kwargs: TypeDict[str, Any]) -> None: verb = get_launch_verb() try: @@ -367,6 +372,7 @@ def create_launch_cmd( if "headless" in kwargs and str_to_bool(cast(str, kwargs["headless"])): headless = True parsed_kwargs["headless"] = headless + parsed_kwargs["insecure"] = kwargs["insecure"] # If the user is using docker desktop (OSX/Windows), check to make sure there's enough RAM. # If the user is using Linux this isn't an issue because Docker scales to the avaialble RAM, @@ -673,6 +679,8 @@ def create_launch_docker_cmd( print(" - NAME: " + str(snake_name)) print(" - TAG: " + str(tag)) print(" - PORT: " + str(host_term.free_port)) + if kwargs["insecure"] is False: + print(" - SECURE PORT: " + str(host_term.next_free_port)) print(" - DOCKER: " + docker_version) print(" - TAIL: " + str(tail)) print("\n") @@ -680,7 +688,10 @@ def create_launch_docker_cmd( cmd = "" if not is_windows(): cmd += "COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1" + cmd += " DOMAIN_PORT=" + str(host_term.free_port) + if kwargs["insecure"] is False: + cmd += " SECURE_DOMAIN_PORT=" + str(host_term.next_free_port) cmd += " TRAEFIK_TAG=" + str(tag) cmd += " DOMAIN_NAME='" + snake_name + "'" cmd += " NODE_TYPE=" + str(node_type.input) @@ -699,6 +710,11 @@ def create_launch_docker_cmd( if kwargs["headless"] is False: cmd += " --profile frontend" + cmd += " --file docker-compose.yml" + cmd += " --file docker-compose.override.yml" + if kwargs["insecure"] is False: + cmd += " --file docker-compose.websecure.yml" + cmd += " up" if not tail: diff --git a/packages/hagrid/hagrid/grammar.py b/packages/hagrid/hagrid/grammar.py index c8ae0d14ce9..558007e49dd 100644 --- a/packages/hagrid/hagrid/grammar.py +++ b/packages/hagrid/hagrid/grammar.py @@ -151,6 +151,14 @@ def free_port(self) -> int: ) return find_available_port(host="localhost", port=self.port, search=self.search) + @property + def next_free_port(self) -> int: + if self.port is None: + raise BadGrammar( + f"{type(self)} unable to check if port {self.port} is free" + ) + return find_available_port(host="localhost", port=self.port+1, search=self.search) + def parts(self) -> TypeTuple[Optional[str], Optional[int], bool]: host = None port: Optional[int] = None From 7ad8b57dfdfac360afee6c3fc8f0783121ca7924 Mon Sep 17 00:00:00 2001 From: Madhava Jay Date: Fri, 19 Nov 2021 07:15:18 +1000 Subject: [PATCH 09/26] WIP: Refactoring the docker-compose files - Splitting HTTP and HTTPS ports to allow dynamic ports on localhost --- .bumpversion.cfg | 6 +- packages/grid/.env | 7 +- packages/grid/backend/grid/core/config.py | 1 - packages/grid/devspace.yaml | 12 - packages/grid/docker-compose.override.yml | 228 ---------------- packages/grid/docker-compose.websecure.yml | 81 ------ packages/grid/docker-compose.yml | 244 +++++++++++------- .../traefik/dynamic-configurations/certs.yaml | 10 +- packages/hagrid/hagrid/cli.py | 17 +- packages/hagrid/hagrid/grammar.py | 16 +- 10 files changed, 179 insertions(+), 443 deletions(-) delete mode 100644 packages/grid/docker-compose.override.yml delete mode 100644 packages/grid/docker-compose.websecure.yml diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 47d1d460148..fb953786c4c 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -3,21 +3,21 @@ current_version = 0.6.0-alpha.4 tag = False tag_name = {new_version} commit = True -parse = +parse = (?P\d+) \. (?P\d+) \. (?P\d+) (\-(?P
[a-z]+)\.(?P\d+))?
-serialize = 
+serialize =
 	{major}.{minor}.{patch}-{pre}.{prenum}
 	{major}.{minor}.{patch}
 
 [bumpversion:part:pre]
 optional_value = placeholder
 first_value = alpha
-values = 
+values =
 	alpha
 	beta
 	rc
diff --git a/packages/grid/.env b/packages/grid/.env
index ab9ef8de610..571b57a51c0 100644
--- a/packages/grid/.env
+++ b/packages/grid/.env
@@ -2,8 +2,8 @@
 DOMAIN=localhost
 DOMAIN_NAME=grid.openmined.org
 NODE_TYPE=domain
-DOMAIN_PORT=80
-SECURE_DOMAIN_PORT=443
+HTTP_PORT=80
+HTTPS_PORT=443
 HEADSCALE_PORT=8080
 NETWORK_NAME=omnet
 
@@ -16,6 +16,7 @@ DOCKER_IMAGE_BACKEND=openmined/grid-backend
 DOCKER_IMAGE_FRONTEND=openmined/grid-frontend
 DOCKER_IMAGE_HEADSCALE=openmined/grid-vpn-headscale
 DOCKER_IMAGE_TAILSCALE=openmined/grid-vpn-tailscale
+DOCKER_IMAGE_TRAEFIK=traefik:v2.5
 VERSION=latest
 VERSION_HASH=unknown
 STACK_API_KEY=hex_key_value
@@ -32,7 +33,7 @@ SMTP_HOST=
 SMTP_USER=
 SMTP_PASSWORD=
 EMAILS_FROM_EMAIL=info@openmined.org
-SERVER_HOST="http://${DOMAIN}"
+SERVER_HOST="https://${DOMAIN}"
 
 USERS_OPEN_REGISTRATION=False
 
diff --git a/packages/grid/backend/grid/core/config.py b/packages/grid/backend/grid/core/config.py
index 5f758b331a0..f18c5b78fbf 100644
--- a/packages/grid/backend/grid/core/config.py
+++ b/packages/grid/backend/grid/core/config.py
@@ -20,7 +20,6 @@ class Settings(BaseSettings):
     SECRET_KEY: str = secrets.token_urlsafe(32)
     # 60 minutes * 24 hours * 8 days = 8 days
     ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 8
-    SERVER_NAME: str = "unconfigured"
     SERVER_HOST: str = "https://localhost"
     # BACKEND_CORS_ORIGINS is a JSON-formatted list of origins
     # e.g: '["http://localhost", "http://localhost:4200", "http://localhost:3000", \
diff --git a/packages/grid/devspace.yaml b/packages/grid/devspace.yaml
index 2711a7002ce..d6e154e059b 100644
--- a/packages/grid/devspace.yaml
+++ b/packages/grid/devspace.yaml
@@ -148,8 +148,6 @@ deployments:
               successThreshold: 1
               failureThreshold: 3
             env:
-              - name: SYFT_USE_UVLOOP
-                value: "0"
               - name: DOMAIN_NAME
                 value: ${DOMAIN_NAME}
               - name: POSTGRES_SERVER
@@ -164,8 +162,6 @@ deployments:
                 value: ${VERSION}
               - name: VERSION_HASH
                 value: ${VERSION_HASH}
-              - name: SERVER_NAME
-                value: ${DOMAIN}
               - name: SERVER_HOST
                 value: ${SERVER_HOST}
               - name: LOG_LEVEL
@@ -209,8 +205,6 @@ deployments:
               successThreshold: 1
               failureThreshold: 3
             env:
-              - name: SYFT_USE_UVLOOP
-                value: "0"
               - name: DOMAIN_NAME
                 value: ${DOMAIN_NAME}
               - name: POSTGRES_SERVER
@@ -225,8 +219,6 @@ deployments:
                 value: ${VERSION}
               - name: VERSION_HASH
                 value: ${VERSION_HASH}
-              - name: SERVER_NAME
-                value: ${DOMAIN}
               - name: SERVER_HOST
                 value: ${SERVER_HOST}
               - name: LOG_LEVEL
@@ -256,8 +248,6 @@ deployments:
                 "/worker-start.sh",
               ]
             env:
-              - name: SYFT_USE_UVLOOP
-                value: "0"
               - name: DOMAIN_NAME
                 value: ${DOMAIN_NAME}
               - name: POSTGRES_SERVER
@@ -272,8 +262,6 @@ deployments:
                 value: ${VERSION}
               - name: VERSION_HASH
                 value: ${VERSION_HASH}
-              - name: SERVER_NAME
-                value: ${DOMAIN}
               - name: SERVER_HOST
                 value: ${SERVER_HOST}
               - name: CELERY_WORKER
diff --git a/packages/grid/docker-compose.override.yml b/packages/grid/docker-compose.override.yml
deleted file mode 100644
index 9a80cdd3841..00000000000
--- a/packages/grid/docker-compose.override.yml
+++ /dev/null
@@ -1,228 +0,0 @@
-version: "3.8"
-services:
-  proxy:
-    # ports:
-    #   - "${DOMAIN_PORT?80}:80"
-    #   - "8080"
-
-    # note: this is the whole command, it does not merge arguments from multiple Compose files
-    command:
-      # Enable the Dashboard and API in insecure mode for local development
-      - --api.insecure=true
-      - --api.dashboard=true
-
-      # The arguments below are from docker-compose.yml, with the following exclusions:
-      # --providers.docker.swarmmode - docker swarm mode is not enabled
-
-      # Entrypoint web is for HTTP
-      - --entryPoints.web.address=:80
-      # Enable Docker in Traefik, so that it reads labels from Docker services
-      - --providers.docker
-      # Add a constraint to only use services with the label for this stack
-      # from the env var TRAEFIK_TAG
-      - --providers.docker.constraints=Label(`traefik.constraint-label-stack`, `${TRAEFIK_TAG?Variable not set}`)
-      # Do not expose all Docker services, only the ones explicitly exposed
-      - --providers.docker.exposedbydefault=false
-      # Enable the access log, with HTTP requests
-      - --accesslog
-      # Enable the Traefik log, for configurations and errors
-      - --log
-      # Enable the Dashboard and API
-      - --api
-    # Since we disable Docker Swarm mode, labels must be set on the containers
-    labels:
-      - traefik.enable=true
-      # Use the traefik-public network (declared below)
-      - traefik.docker.network=${TRAEFIK_PUBLIC_NETWORK?Variable not set}
-      - traefik.http.routers.${STACK_NAME?Variable not set}-traefik-public-http.rule=Host(`${DOMAIN?Variable not set}`)
-      - traefik.http.routers.${STACK_NAME?Variable not set}-traefik-public-http.entrypoints=web
-      - traefik.http.services.${STACK_NAME?Variable not set}-traefik-public.loadbalancer.server.port=80
-      # Redirect all www to non-www on web (HTTP)
-      - "traefik.http.routers.www-catchall.entrypoints=web"
-      - "traefik.http.routers.www-catchall.rule=HostRegexp(`{host:(www\\.).+}`)"
-      - "traefik.http.routers.www-catchall.tls=true"
-      - "traefik.http.routers.www-catchall.middlewares=wwwtohttp"
-      - "traefik.http.middlewares.wwwtohttp.redirectregex.regex=^http?://(?:www\\.)?(.+)"
-      - "traefik.http.middlewares.wwwtohttp.redirectregex.replacement=http://$${1}"
-      - "traefik.http.middlewares.wwwtohttp.redirectregex.permanent=false"
-    network_mode: service:tailscale
-    networks:
-      - "${TRAEFIK_PUBLIC_NETWORK?Variable not set}"
-      - default
-
-  db:
-    ports:
-      - "5432"
-
-  queue:
-    image: rabbitmq:3-management
-    ports:
-      - "5672"
-      - "15672"
-    volumes:
-      - ./rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
-
-  backend:
-    volumes:
-      - ./backend/grid:/app/grid
-      - ./backend/alembic:/app/alembic
-      - ../syft:/app/syft
-      - ../../notebooks:/notebooks
-      - ./data/package-cache:/root/.cache
-
-    environment:
-      - SERVER_HOST=http://${DOMAIN?Variable not set}
-      - SYFT_USE_UVLOOP=0
-      - DOMAIN_NAME=${DOMAIN_NAME?Variable not set}
-      - NODE_TYPE=${NODE_TYPE?Variable not set}
-      - PORT=8001
-      - STACK_API_KEY=$STACK_API_KEY
-
-    build:
-      context: ../
-      dockerfile: ./grid/backend/backend.dockerfile
-      target: "backend"
-    # command: bash -c "while true; do sleep 1; done" # Infinite loop to keep container live doing nothing
-    command: /start-reload.sh
-    labels:
-      - traefik.enable=true
-      - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set}
-      - traefik.http.routers.${STACK_NAME?Variable not set}-backend-http.rule=PathPrefix(`/api`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`) # WARNING: this wont match /api/v1/syft/stream because of length
-      - traefik.http.services.${STACK_NAME?Variable not set}-backend.loadbalancer.server.port=8001
-    network_mode: service:proxy
-
-  backend_stream:
-    depends_on:
-      - db
-      - backend
-    volumes:
-      - ./backend/grid:/app/grid
-      - ./backend/alembic:/app/alembic
-      - ../syft:/app/syft
-      - ./data/package-cache:/root/.cache
-    environment:
-      - SERVER_HOST=http://${DOMAIN?Variable not set}
-      - SYFT_USE_UVLOOP=0
-      - DOMAIN_NAME=${DOMAIN_NAME?Variable not set}
-      - NODE_TYPE=${NODE_TYPE?Variable not set}
-      - STREAM_QUEUE=1
-      - PORT=8011
-      - STACK_API_KEY=$STACK_API_KEY
-
-    build:
-      context: ../
-      dockerfile: ./grid/backend/backend.dockerfile
-      target: "backend"
-    # command: bash -c "while true; do sleep 1; done" # Infinite loop to keep container live doing nothing
-    command: "waitforit -address=http://localhost:8001/api/v1/syft/metadata -status=200 -timeout=600 -- /start-reload.sh"
-    labels:
-      - traefik.enable=true
-      - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set}
-      - traefik.http.routers.${STACK_NAME?Variable not set}-backend-stream-http.rule=PathPrefix(`/api`) && PathPrefix(`/api/v1/syft/stream`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`) # WARNING: this only matches /api/v1/syft/stream because of length
-      - traefik.http.services.${STACK_NAME?Variable not set}-backend-stream.loadbalancer.server.port=8011
-    network_mode: service:proxy
-
-  celeryworker:
-    depends_on:
-      - backend
-    volumes:
-      - ./backend/grid:/app/grid #- ./backend/app:/app
-      - ./backend/alembic:/app/alembic
-      - ../syft:/app/syft #- ../syft:/app/syft
-      - ../../notebooks:/notebooks
-      - ./data/package-cache:/root/.cache
-    environment:
-      - RUN=celery -A grid.worker worker -l info -Q main-queue --pool=gevent -c 500
-      - SERVER_HOST=http://${DOMAIN?Variable not set}
-      - SYFT_USE_UVLOOP=0
-      - DOMAIN_NAME=${DOMAIN_NAME?Variable not set}
-      - C_FORCE_ROOT=1
-      - STACK_API_KEY=$STACK_API_KEY
-
-    build:
-      context: ../
-      dockerfile: ./grid/backend/backend.dockerfile
-      target: "backend"
-    command: "waitforit -address=http://localhost:8001/api/v1/syft/metadata -status=200 -timeout=600 -- /worker-start.sh"
-    network_mode: service:proxy
-
-  frontend:
-    profiles:
-      - frontend
-    build:
-      context: ./frontend
-      dockerfile: frontend.dockerfile
-      args:
-        FRONTEND_ENV: ${FRONTEND_ENV-development}
-        TYPE: ${NODE_TYPE?Variable not set}
-    volumes:
-      - ./frontend/src:/app/src
-    labels:
-      - traefik.enable=true
-      - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set}
-      - traefik.http.routers.${STACK_NAME?Variable not set}-frontend-http.rule=PathPrefix(`/`)
-      - traefik.http.services.${STACK_NAME?Variable not set}-frontend.loadbalancer.server.port=80
-
-  tailscale:
-    hostname: ${DOMAIN_NAME?Variable not set}
-    image: "${DOCKER_IMAGE_TAILSCALE?Variable not set}:${VERSION-latest}"
-    build:
-      context: ./vpn
-      dockerfile: tailscale.dockerfile
-    environment:
-      - HOSTNAME=${DOMAIN_NAME?Variable not set}
-      - STACK_API_KEY=$STACK_API_KEY
-
-    volumes:
-      - tailscale-data:/var/lib/tailscale
-      - "/dev/net/tun:/dev/net/tun" # Required for tailscale to work
-      # - ./grid/vpn:/tailscale
-    cap_add: # Required for tailscale to work
-      - net_admin
-      - sys_module
-    ports:
-      - "${DOMAIN_PORT?80}:80"
-      - "41641/udp"
-      - "4000"
-    depends_on:
-      - "docker-host"
-
-  headscale:
-    profiles:
-      - network
-    hostname: headscale
-    image: "${DOCKER_IMAGE_HEADSCALE?Variable not set}:${VERSION-latest}"
-    build:
-      context: ./vpn
-      dockerfile: headscale.dockerfile
-    volumes:
-      - headscale-data:/headscale/data
-      # - ./grid/vpn:/headscale
-    environment:
-      - NETWORK_NAME=omnet
-      - STACK_API_KEY=$STACK_API_KEY
-    ports:
-      - "4000"
-    labels:
-      - traefik.enable=true
-      - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set}
-      - traefik.http.routers.${STACK_NAME?Variable not set}-vpn-http.rule=PathPrefix(`/vpn`)
-      - "traefik.http.routers.${STACK_NAME?Variable not set}-vpn-http.middlewares=${STACK_NAME?Variable not set}-vpn-http-stripprefix"
-      - traefik.http.routers.${STACK_NAME?Variable not set}-vpn-http.entrypoint=web
-      - "traefik.http.middlewares.${STACK_NAME?Variable not set}-vpn-http-stripprefix.stripprefix.prefixes=/vpn"
-      - traefik.http.services.${STACK_NAME?Variable not set}-vpn.loadbalancer.server.port=8080
-
-  docker-host:
-    image: qoomon/docker-host
-    cap_add:
-      - net_admin
-      - net_raw
-
-networks:
-  traefik-public:
-    # For local dev, don't expect an external Traefik network
-    external: false
-
-volumes:
-  tailscale-data:
-  headscale-data:
diff --git a/packages/grid/docker-compose.websecure.yml b/packages/grid/docker-compose.websecure.yml
deleted file mode 100644
index b47bb586c1c..00000000000
--- a/packages/grid/docker-compose.websecure.yml
+++ /dev/null
@@ -1,81 +0,0 @@
----
-# This file can be used to extend the docker-compose.override.yml Compose file.
-# It adds a websecure entrypoint in the network proxy for HTTPS and TLS certificates.
-version: "3.8"
-services:
-  # Add a port for HTTPS on the tailscale service
-  tailscale:
-    ports:
-      - "${SECURE_DOMAIN_PORT?443}:443"
-  # Configure Traefik for HTTPS and self-signed TLS
-  #  - use volume with the TLS configuration and user-provided self-signed certificates
-  #  - configure entrypoints for HTTPS and HTTP
-  #  - redirect all HTTP to HTTPS permanently
-  proxy:
-    volumes:
-      - ./traefik:/etc/traefik
-    # note: this is the whole command, it does not merge arguments from multiple Compose files
-    command:
-      - --providers.file.directory=/etc/traefik/dynamic-configurations
-      - --providers.file.watch=true
-      # Entrypoint websecure is for HTTPS
-      - --entryPoints.websecure.address=:443
-      - --entryPoints.websecure.http.tls=true
-      # Redirect all web to websecure (HTTP to HTTPS)
-      - --entrypoints.web.http.redirections.entryPoint.to=websecure
-      - --entrypoints.web.http.redirections.entryPoint.scheme=https
-      - --entrypoints.web.http.redirections.entrypoint.permanent=true
-
-      # The arguments below are the same as in docker-compose.override.yml
-
-      # Enable the Dashboard and API in insecure mode for local development
-      - --api.insecure=true
-      - --api.dashboard=true
-
-      # The arguments below are from docker-compose.yml, with the following exclusions:
-      # --providers.docker.swarmmode - docker swarm mode is not enabled
-
-      # Entrypoint web is for HTTP
-      - --entryPoints.web.address=:80
-      # Enable Docker in Traefik, so that it reads labels from Docker services
-      - --providers.docker
-      # Add a constraint to only use services with the label for this stack
-      # from the env var TRAEFIK_TAG
-      - --providers.docker.constraints=Label(`traefik.constraint-label-stack`, `${TRAEFIK_TAG?Variable not set}`)
-      # Do not expose all Docker services, only the ones explicitly exposed
-      - --providers.docker.exposedbydefault=false
-      # Enable the access log, with HTTP requests
-      - --accesslog
-      # Enable the Traefik log, for configurations and errors
-      - --log
-      # Enable the Dashboard and API
-      - --api
-    labels:
-      - traefik.http.routers.${STACK_NAME?Variable not set}-traefik-public-http.entrypoints=websecure
-      # Redirect all www to non-www on websecure (HTTPS)
-      - "traefik.http.routers.wwwsecure-catchall.entrypoints=websecure"
-      - "traefik.http.routers.wwwsecure-catchall.rule=HostRegexp(`{host:(www\\.).+}`)"
-      - "traefik.http.routers.wwwsecure-catchall.tls=true"
-      - "traefik.http.routers.wwwsecure-catchall.middlewares=wwwtohttps"
-      - "traefik.http.middlewares.wwwtohttps.redirectregex.regex=^https?://(?:www\\.)?(.+)"
-      - "traefik.http.middlewares.wwwtohttps.redirectregex.replacement=https://$${1}"
-      - "traefik.http.middlewares.wwwtohttps.redirectregex.permanent=false"
-
-  # Override Traefik entrypoints in routers for all services.
-  # Compose labels are merged based on the label key, so websecure becomes the only entrypoint.
-
-  backend:
-    labels:
-      - traefik.http.routers.${STACK_NAME?Variable not set}-backend-http.entrypoints=websecure
-
-  backend_stream:
-    labels:
-      - traefik.http.routers.${STACK_NAME?Variable not set}-backend-stream-http.entrypoints=websecure
-
-  frontend:
-    labels:
-      - traefik.http.routers.${STACK_NAME?Variable not set}-frontend-http.entrypoints=websecure
-
-  headscale:
-    labels:
-      - traefik.http.routers.${STACK_NAME?Variable not set}-vpn-http.entrypoint=websecure
diff --git a/packages/grid/docker-compose.yml b/packages/grid/docker-compose.yml
index f2b195ea1c7..3d0de879a03 100644
--- a/packages/grid/docker-compose.yml
+++ b/packages/grid/docker-compose.yml
@@ -1,76 +1,96 @@
 version: "3.8"
 services:
+  docker-host:
+    image: qoomon/docker-host
+    cap_add:
+      - net_admin
+      - net_raw
+
+  tailscale:
+    hostname: ${DOMAIN_NAME?Variable not set}
+    image: "${DOCKER_IMAGE_TAILSCALE?Variable not set}:${VERSION-latest}"
+    build:
+      context: ./vpn
+      dockerfile: tailscale.dockerfile
+    environment:
+      - HOSTNAME=${DOMAIN_NAME?Variable not set}
+      - STACK_API_KEY=$STACK_API_KEY
+    volumes:
+      - tailscale-data:/var/lib/tailscale
+      - "/dev/net/tun:/dev/net/tun" # Required for tailscale to work
+    cap_add: # Required for tailscale to work
+      - net_admin
+      - sys_module
+    ports:
+      - "${HTTP_PORT}:${HTTP_PORT}"
+      - "${HTTPS_PORT}:${HTTPS_PORT}"
+      - "41641/udp"
+      - "4000"
+    depends_on:
+      - "docker-host"
+
   proxy:
     restart: always
-    image: traefik:v2.4
+    image: ${DOCKER_IMAGE_TRAEFIK?Variable not set}
+    # ports:
+      # - "${HTTP_PORT}:${HTTP_PORT}"
+      # - "${HTTPS_PORT}:${HTTPS_PORT}"
+      # - "8080:8080"
     networks:
       - "${TRAEFIK_PUBLIC_NETWORK?Variable not set}"
       - default
+    network_mode: service:tailscale
     volumes:
       - /var/run/docker.sock:/var/run/docker.sock
+      - ./traefik:/etc/traefik
     command:
-      # Enable Docker in Traefik, so that it reads labels from Docker services
       - --providers.docker
-      # Add a constraint to only use services with the label for this stack
-      # from the env var TRAEFIK_TAG
-      - --providers.docker.constraints=Label(`traefik.constraint-label-stack`, `${TRAEFIK_TAG?Variable not set}`)
-      # Do not expose all Docker services, only the ones explicitly exposed
       - --providers.docker.exposedbydefault=false
-      # Enable Docker Swarm mode
-      - --providers.docker.swarmmode
+      - --providers.docker.constraints=Label(`traefik.constraint-label-stack`, `${TRAEFIK_TAG?Variable not set}`)
+      # custom tls cert config
+      - --providers.file.directory=/etc/traefik/dynamic-configurations
+      - --providers.file.watch=true
+      # redirect http to https
+      - "--entrypoints.web.address=:${HTTP_PORT}"
+      - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
+      - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
+      - "--entrypoints.websecure.address=:${HTTPS_PORT}"
+      - "--entrypoints.websecure.http.tls=true"
+
       # Enable the access log, with HTTP requests
       - --accesslog
       # Enable the Traefik log, for configurations and errors
       - --log
       # Enable the Dashboard and API
-      - --api
-    deploy:
-      placement:
-        constraints:
-          - node.role == manager
-      labels:
-        # Enable Traefik for this service, to make it available in the public network
-        - traefik.enable=true
-        # Use the traefik-public network (declared below)
-        - traefik.docker.network=${TRAEFIK_PUBLIC_NETWORK?Variable not set}
-        # Use the custom label "traefik.constraint-label=traefik-public"
-        # This public Traefik will only use services with this label
-        - traefik.constraint-label=${TRAEFIK_PUBLIC_TAG?Variable not set}
-        # traefik-http set up only to use the middleware to redirect to https
-        - traefik.http.middlewares.${STACK_NAME?Variable not set}-https-redirect.redirectscheme.scheme=https
-        - traefik.http.middlewares.${STACK_NAME?Variable not set}-https-redirect.redirectscheme.permanent=true
-        # Handle host with and without "www" to redirect to only one of them
-        # Uses environment variable DOMAIN
-        # To disable www redirection remove the Host() you want to discard, here and
-        # below for HTTPS
-        - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-http.rule=Host(`${DOMAIN?Variable not set}`) || Host(`www.${DOMAIN?Variable not set}`)
-        - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-http.entrypoints=http
-        # traefik-https the actual router using HTTPS
-        - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.rule=Host(`${DOMAIN?Variable not set}`) || Host(`www.${DOMAIN?Variable not set}`)
-        - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.entrypoints=https
-        - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.tls=true
-        # Use the "le" (Let's Encrypt) resolver created below
-        - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.tls.certresolver=le
-        # Define the port inside of the Docker service to use
-        - traefik.http.services.${STACK_NAME?Variable not set}-proxy.loadbalancer.server.port=80
-        # Handle domain with and without "www" to redirect to only one
-        # To disable www redirection remove the next line
-        - traefik.http.middlewares.${STACK_NAME?Variable not set}-www-redirect.redirectregex.regex=^https?://(www.)?(${DOMAIN?Variable not set})/(.*)
-        # Redirect a domain with www to non-www
-        # To disable it remove the next line
-        - traefik.http.middlewares.${STACK_NAME?Variable not set}-www-redirect.redirectregex.replacement=https://${DOMAIN?Variable not set}/$${3}
-        # Redirect a domain without www to www
-        # To enable it remove the previous line and uncomment the next
-        # - traefik.http.middlewares.${STACK_NAME}-www-redirect.redirectregex.replacement=https://www.${DOMAIN}/$${3}
-        # Middleware to redirect www, to disable it remove the next line
-        - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.middlewares=${STACK_NAME?Variable not set}-www-redirect
-        # Middleware to redirect www, and redirect HTTP to HTTPS
-        # to disable www redirection remove the section: ${STACK_NAME?Variable not set}-www-redirect,
-        - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-http.middlewares=${STACK_NAME?Variable not set}-www-redirect,${STACK_NAME?Variable not set}-https-redirect
+      # - --api # admin panel
+      # - --api.insecure=true # admin panel no password
+
+  frontend:
+    restart: always
+    image: "${DOCKER_IMAGE_FRONTEND?Variable not set}:${VERSION-latest}"
+    profiles:
+      - frontend
+    build:
+      context: ./frontend
+      dockerfile: frontend.dockerfile
+      target: "grid-ui-${FRONTEND_ENV-development}"
+      args:
+        FRONTEND_ENV: ${FRONTEND_ENV-development}
+        TYPE: ${NODE_TYPE?Variable not set}
+    environment:
+      - VERSION=${VERSION}
+      - VERSION_HASH=${VERSION_HASH}
+    labels:
+      - "traefik.enable=true"
+      - "traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set}"
+      - "traefik.http.routers.${STACK_NAME?Variable not set}-frontend.rule=PathPrefix(`/`)"
+      - "traefik.http.services.${STACK_NAME?Variable not set}-frontend.loadbalancer.server.port=80"
 
   db:
     restart: always
     image: postgres:12
+    ports:
+      - "5432"
     volumes:
       - app-db-data:/var/lib/postgresql/data
     env_file:
@@ -82,10 +102,12 @@ services:
 
   queue:
     restart: always
-    image: rabbitmq:3
-    # Using the below image instead is required to enable the "Broker" tab in the flower UI:
-    # image: rabbitmq:3-management
-    #
+    image: rabbitmq:3-management
+    ports:
+      - "5672"
+      - "15672"
+    volumes:
+      - ./rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
 
   backend:
     restart: always
@@ -97,20 +119,24 @@ services:
     environment:
       - VERSION=${VERSION}
       - VERSION_HASH=${VERSION_HASH}
-      - SERVER_NAME=${DOMAIN?Variable not set}
-      - SERVER_HOST=https://${DOMAIN?Variable not set}
-      # Allow explicit env var override for tests
-      - SMTP_HOST=${SMTP_HOST}
+      - STACK_API_KEY=${STACK_API_KEY}
+      - PORT=8001
     build:
       context: ../
       dockerfile: ./grid/backend/backend.dockerfile
       target: "backend"
-    deploy:
-      labels:
-        - traefik.enable=true
-        - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set}
-        - traefik.http.routers.${STACK_NAME?Variable not set}-backend-http.rule=PathPrefix(`/api`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`) # WARNING: this wont match /api/v1/syft/stream because of length
-        - traefik.http.services.${STACK_NAME?Variable not set}-backend.loadbalancer.server.port=80
+    volumes:
+      - ./backend/grid:/app/grid
+      - ./backend/alembic:/app/alembic
+      - ../syft:/app/syft
+      - ./data/package-cache:/root/.cache
+    command: /start-reload.sh
+    labels:
+      - "traefik.enable=true"
+      - "traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set}"
+      - "traefik.http.routers.${STACK_NAME?Variable not set}-backend.rule=PathPrefix(`/api`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`)" # WARNING: this wont match /api/v1/syft/stream because of length
+      - "traefik.http.services.${STACK_NAME?Variable not set}-backend.loadbalancer.server.port=8081"
+    network_mode: service:proxy
 
   backend_stream:
     restart: always
@@ -123,21 +149,25 @@ services:
     environment:
       - VERSION=${VERSION}
       - VERSION_HASH=${VERSION_HASH}
-      - SERVER_NAME=${DOMAIN?Variable not set}
-      - SERVER_HOST=https://${DOMAIN?Variable not set}
-      # Allow explicit env var override for tests
-      - SMTP_HOST=${SMTP_HOST}
-    command: "waitforit -address=http://backend:80/api/v1/syft/metadata -status=200 -timeout=600 -- /start.sh"
+      - STACK_API_KEY=${STACK_API_KEY}
+      - PORT=8011
+      - STREAM_QUEUE=1
     build:
       context: ../
       dockerfile: ./grid/backend/backend.dockerfile
       target: "backend"
-    deploy:
-      labels:
-        - traefik.enable=true
-        - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set}
-        - traefik.http.routers.${STACK_NAME?Variable not set}-backend-stream-http.rule=PathPrefix(`/api`) && PathPrefix(`/api/v1/syft/stream`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`) # WARNING: this only matches /api/v1/syft/stream because of length
-        - traefik.http.services.${STACK_NAME?Variable not set}-backend-stream.loadbalancer.server.port=80
+    volumes:
+      - ./backend/grid:/app/grid
+      - ./backend/alembic:/app/alembic
+      - ../syft:/app/syft
+      - ./data/package-cache:/root/.cache
+    command: "waitforit -address=http://localhost:8001/api/v1/syft/metadata -status=200 -timeout=600 -- /start-reload.sh"
+    labels:
+      - "traefik.enable=true"
+      - "traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set}"
+      - "traefik.http.routers.${STACK_NAME?Variable not set}-backend-stream.rule=PathPrefix(`/api`) && PathPrefix(`/api/v1/syft/stream`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`)" # WARNING: this only matches /api/v1/syft/stream because of length
+      - "traefik.http.services.${STACK_NAME?Variable not set}-backend-stream.loadbalancer.server.port=8011"
+    network_mode: service:proxy
 
   celeryworker:
     restart: always
@@ -150,35 +180,59 @@ services:
     environment:
       - VERSION=${VERSION}
       - VERSION_HASH=${VERSION_HASH}
-      - SERVER_NAME=${DOMAIN?Variable not set}
-      - SERVER_HOST=https://${DOMAIN?Variable not set}
-      # Allow explicit env var override for tests
-      - SMTP_HOST=${SMTP_HOST?Variable not set}
       - CELERY_WORKER=true
+      - RUN=celery -A grid.worker worker -l info -Q main-queue --pool=gevent -c 500
+      - C_FORCE_ROOT=1
+      - STACK_API_KEY=${STACK_API_KEY}
+    volumes:
+      - ./backend/grid:/app/grid
+      - ./backend/alembic:/app/alembic
+      - ../syft:/app/syft
+      - ./data/package-cache:/root/.cache
+    command: "waitforit -address=http://localhost:8001/api/v1/syft/metadata -status=200 -timeout=600 -- /worker-start.sh"
     build:
       context: ../
       dockerfile: ./grid/backend/backend.dockerfile
       target: "backend"
+    network_mode: service:proxy
 
-  frontend:
-    restart: always
-    image: "${DOCKER_IMAGE_FRONTEND?Variable not set}:${VERSION-latest}"
+  headscale:
+    profiles:
+      - network
+    hostname: headscale
+    image: "${DOCKER_IMAGE_HEADSCALE?Variable not set}:${VERSION-latest}"
     build:
-      context: ./frontend
-      dockerfile: frontend.dockerfile
-      target: "grid-ui-${FRONTEND_ENV-development}"
+      context: ./vpn
+      dockerfile: headscale.dockerfile
+    volumes:
+      - headscale-data:/headscale/data
+      # - ./grid/vpn:/headscale
     environment:
-      - VERSION=${VERSION}
-      - VERSION_HASH=${VERSION_HASH}
-    deploy:
-      labels:
-        - traefik.enable=true
-        - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set}
-        - traefik.http.routers.${STACK_NAME?Variable not set}-frontend-http.rule=PathPrefix(`/`)
-        - traefik.http.services.${STACK_NAME?Variable not set}-frontend.loadbalancer.server.port=80
+      - NETWORK_NAME=omnet
+      - STACK_API_KEY=$STACK_API_KEY
+    ports:
+      - "4000"
+    labels:
+      - "traefik.enable=true"
+      - "traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set}"
+      - "traefik.http.routers.${STACK_NAME?Variable not set}-vpn.rule=PathPrefix(`/vpn`)"
+      - "traefik.http.middlewares.${STACK_NAME?Variable not set}-vpn.stripprefix.prefixes=/vpn"
+      - "traefik.http.services.${STACK_NAME?Variable not set}-vpn.loadbalancer.server.port=8080"
+      # - "traefik.enable=true"
+      # - "traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set}"
+      # # - "traefik.http.routers.${STACK_NAME?Variable not set}-vpn.entrypoint=websecure"
+      # - "traefik.http.routers.${STACK_NAME?Variable not set}-vpn.rule=PathPrefix(`/vpn`)"
+      # # - "traefik.http.routers.${STACK_NAME?Variable not set}-vpn.middlewares=${STACK_NAME?Variable not set}-vpn-stripprefix"
+      # - "traefik.http.services.${STACK_NAME?Variable not set}-vpn.loadbalancer.server.port=8080"
+      # # - "traefik.http.routers.${STACK_NAME?Variable not set}-vpn-http.middlewares=${STACK_NAME?Variable not set}-vpn-http-stripprefix"
+      # # - "traefik.http.middlewares.${STACK_NAME?Variable not set}-vpn-http-stripprefix.stripprefix.prefixes=/vpn"
+      # # - "traefik.http.routers.frontend.rule=PathPrefix(`/`)"
+      # # - "traefik.http.services.frontend.loadbalancer.server.port=80"
 
 volumes:
   app-db-data:
+  tailscale-data:
+  headscale-data:
 
 networks:
   traefik-public:
diff --git a/packages/grid/traefik/dynamic-configurations/certs.yaml b/packages/grid/traefik/dynamic-configurations/certs.yaml
index c5feaf93d17..172f32799a0 100644
--- a/packages/grid/traefik/dynamic-configurations/certs.yaml
+++ b/packages/grid/traefik/dynamic-configurations/certs.yaml
@@ -2,10 +2,16 @@
 # Dynamic configuration for Traefik with TLS certificates
 tls:
   certificates:
-  - certFile: /etc/traefik/certs/cert.pem
-    keyFile: /etc/traefik/certs/key.pem
+    - certFile: /etc/traefik/certs/cert.pem
+      keyFile: /etc/traefik/certs/key.pem
   stores:
     default:
       defaultCertificate:
         certFile: /etc/traefik/certs/cert.pem
         keyFile: /etc/traefik/certs/key.pem
+  # options:
+  #   default:
+  #     minVersion: VersionTLS13
+  #     cipherSuites:
+  #       - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
+  #     sniStrict: false
diff --git a/packages/hagrid/hagrid/cli.py b/packages/hagrid/hagrid/cli.py
index bc5a47d9b3d..ce57e94a1e2 100644
--- a/packages/hagrid/hagrid/cli.py
+++ b/packages/hagrid/hagrid/cli.py
@@ -148,11 +148,7 @@ def clean(location: str) -> None:
     default="",
     type=str,
 )
-@click.option(
-    "--insecure",
-    is_flag=True,
-    help="Launch without TLS configuration"
-)
+@click.option("--insecure", is_flag=True, help="Launch without TLS configuration")
 def launch(args: TypeTuple[str], **kwargs: TypeDict[str, Any]) -> None:
     verb = get_launch_verb()
     try:
@@ -679,8 +675,6 @@ def create_launch_docker_cmd(
     print("  - NAME: " + str(snake_name))
     print("  - TAG: " + str(tag))
     print("  - PORT: " + str(host_term.free_port))
-    if kwargs["insecure"] is False:
-        print("  - SECURE PORT: " + str(host_term.next_free_port))
     print("  - DOCKER: " + docker_version)
     print("  - TAIL: " + str(tail))
     print("\n")
@@ -689,9 +683,8 @@ def create_launch_docker_cmd(
     if not is_windows():
         cmd += "COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1"
 
-    cmd += " DOMAIN_PORT=" + str(host_term.free_port)
-    if kwargs["insecure"] is False:
-        cmd += " SECURE_DOMAIN_PORT=" + str(host_term.next_free_port)
+    cmd += " HTTP_PORT=" + str(host_term.free_port)
+    cmd += " HTTPS_PORT=" + str(host_term.free_port_tls)
     cmd += " TRAEFIK_TAG=" + str(tag)
     cmd += " DOMAIN_NAME='" + snake_name + "'"
     cmd += " NODE_TYPE=" + str(node_type.input)
@@ -711,10 +704,6 @@ def create_launch_docker_cmd(
         cmd += " --profile frontend"
 
     cmd += " --file docker-compose.yml"
-    cmd += " --file docker-compose.override.yml"
-    if kwargs["insecure"] is False:
-        cmd += " --file docker-compose.websecure.yml"
-
     cmd += " up"
 
     if not tail:
diff --git a/packages/hagrid/hagrid/grammar.py b/packages/hagrid/hagrid/grammar.py
index 558007e49dd..797987a5e73 100644
--- a/packages/hagrid/hagrid/grammar.py
+++ b/packages/hagrid/hagrid/grammar.py
@@ -143,6 +143,12 @@ def port(self) -> Optional[int]:
     def search(self) -> bool:
         return bool(self.parts()[2])
 
+    @property
+    def port_tls(self) -> int:
+        if self.port == 80:
+            return 443
+        return 444
+
     @property
     def free_port(self) -> int:
         if self.port is None:
@@ -152,12 +158,14 @@ def free_port(self) -> int:
         return find_available_port(host="localhost", port=self.port, search=self.search)
 
     @property
-    def next_free_port(self) -> int:
-        if self.port is None:
+    def free_port_tls(self) -> int:
+        if self.port_tls is None:
             raise BadGrammar(
-                f"{type(self)} unable to check if port {self.port} is free"
+                f"{type(self)} unable to check if tls port {self.port_tls} is free"
             )
-        return find_available_port(host="localhost", port=self.port+1, search=self.search)
+        return find_available_port(
+            host="localhost", port=self.port_tls, search=self.search
+        )
 
     def parts(self) -> TypeTuple[Optional[str], Optional[int], bool]:
         host = None

From 58f5dad55eb6f5fa91cfcded644bb81dd9c48b47 Mon Sep 17 00:00:00 2001
From: Madhava Jay 
Date: Fri, 19 Nov 2021 15:18:36 +1000
Subject: [PATCH 10/26] Fixed traefik routing issues with vpn and backend

- Added back missing NODE_TYPE env variable
- Moved the tls stuff into a separate docker file
- Made tls opt in for now to prevent breaking existing dev flows
---
 packages/grid/.gitlab-ci.yml         | 74 ----------------------------
 packages/grid/docker-compose.tls.yml | 26 ++++++++++
 packages/grid/docker-compose.yml     | 29 +++--------
 packages/hagrid/hagrid/cli.py        |  9 ++--
 4 files changed, 39 insertions(+), 99 deletions(-)
 delete mode 100644 packages/grid/.gitlab-ci.yml
 create mode 100644 packages/grid/docker-compose.tls.yml

diff --git a/packages/grid/.gitlab-ci.yml b/packages/grid/.gitlab-ci.yml
deleted file mode 100644
index 834f4ad6ec8..00000000000
--- a/packages/grid/.gitlab-ci.yml
+++ /dev/null
@@ -1,74 +0,0 @@
-image: tiangolo/docker-with-compose
-
-before_script:
-  - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
-  - pip install docker-auto-labels
-
-stages:
-  - test
-  - build
-  - deploy
-
-tests:
-  stage: test
-  script:
-    - sh ./scripts/test.sh
-  tags:
-    - build
-    - test
-
-build-stag:
-  stage: build
-  script:
-    - TAG=stag FRONTEND_ENV=staging sh ./scripts/build-push.sh
-  only:
-    - master
-  tags:
-    - build
-    - test
-
-build-prod:
-  stage: build
-  script:
-    - TAG=prod FRONTEND_ENV=production sh ./scripts/build-push.sh
-  only:
-    - production
-  tags:
-    - build
-    - test
-
-deploy-stag:
-  stage: deploy
-  script:
-    - >
-      DOMAIN=stag.grid.openmined.org
-      TRAEFIK_TAG=stag.grid.openmined.org
-      STACK_NAME=stag-grid-openmined-org
-      TAG=stag
-      sh ./scripts/deploy.sh
-  environment:
-    name: staging
-    url: https://stag.grid.openmined.org
-  only:
-    - master
-  tags:
-    - swarm
-    - stag
-
-deploy-prod:
-  stage: deploy
-  script:
-    - >
-      DOMAIN=grid.openmined.org
-      TRAEFIK_TAG=grid.openmined.org
-      STACK_NAME=grid-openmined-org
-      TAG=prod
-      sh ./scripts/deploy.sh
-  environment:
-    name: production
-    url: https://grid.openmined.org
-  only:
-    - production
-  tags:
-    - swarm
-    - prod
diff --git a/packages/grid/docker-compose.tls.yml b/packages/grid/docker-compose.tls.yml
new file mode 100644
index 00000000000..f17558d3d34
--- /dev/null
+++ b/packages/grid/docker-compose.tls.yml
@@ -0,0 +1,26 @@
+version: "3.8"
+services:
+  proxy:
+    ports:
+      - "${HTTPS_PORT}:${HTTPS_PORT}"
+    command:
+      - --providers.docker
+      - --providers.docker.exposedbydefault=false
+      - --providers.docker.constraints=Label(`traefik.constraint-label-stack`, `${TRAEFIK_TAG?Variable not set}`)
+      # custom tls cert config
+      - --providers.file.directory=/etc/traefik/dynamic-configurations
+      - --providers.file.watch=true
+      # redirect http to https
+      - "--entrypoints.web.address=:${HTTP_PORT}"
+      - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
+      - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
+      - "--entrypoints.websecure.address=:${HTTPS_PORT}"
+      - "--entrypoints.websecure.http.tls=true"
+
+      # Enable the access log, with HTTP requests
+      - --accesslog
+      # Enable the Traefik log, for configurations and errors
+      - --log
+      # Enable the Dashboard and API
+      # - --api # admin panel
+      # - --api.insecure=true # admin panel no password
diff --git a/packages/grid/docker-compose.yml b/packages/grid/docker-compose.yml
index 3d0de879a03..cff49289ee2 100644
--- a/packages/grid/docker-compose.yml
+++ b/packages/grid/docker-compose.yml
@@ -23,9 +23,9 @@ services:
       - sys_module
     ports:
       - "${HTTP_PORT}:${HTTP_PORT}"
-      - "${HTTPS_PORT}:${HTTPS_PORT}"
       - "41641/udp"
       - "4000"
+      # - "8080:8080"
     depends_on:
       - "docker-host"
 
@@ -34,7 +34,6 @@ services:
     image: ${DOCKER_IMAGE_TRAEFIK?Variable not set}
     # ports:
       # - "${HTTP_PORT}:${HTTP_PORT}"
-      # - "${HTTPS_PORT}:${HTTPS_PORT}"
       # - "8080:8080"
     networks:
       - "${TRAEFIK_PUBLIC_NETWORK?Variable not set}"
@@ -47,15 +46,7 @@ services:
       - --providers.docker
       - --providers.docker.exposedbydefault=false
       - --providers.docker.constraints=Label(`traefik.constraint-label-stack`, `${TRAEFIK_TAG?Variable not set}`)
-      # custom tls cert config
-      - --providers.file.directory=/etc/traefik/dynamic-configurations
-      - --providers.file.watch=true
-      # redirect http to https
       - "--entrypoints.web.address=:${HTTP_PORT}"
-      - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
-      - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
-      - "--entrypoints.websecure.address=:${HTTPS_PORT}"
-      - "--entrypoints.websecure.http.tls=true"
 
       # Enable the access log, with HTTP requests
       - --accesslog
@@ -119,6 +110,7 @@ services:
     environment:
       - VERSION=${VERSION}
       - VERSION_HASH=${VERSION_HASH}
+      - NODE_TYPE=${NODE_TYPE?Variable not set}
       - STACK_API_KEY=${STACK_API_KEY}
       - PORT=8001
     build:
@@ -135,7 +127,7 @@ services:
       - "traefik.enable=true"
       - "traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set}"
       - "traefik.http.routers.${STACK_NAME?Variable not set}-backend.rule=PathPrefix(`/api`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`)" # WARNING: this wont match /api/v1/syft/stream because of length
-      - "traefik.http.services.${STACK_NAME?Variable not set}-backend.loadbalancer.server.port=8081"
+      - "traefik.http.services.${STACK_NAME?Variable not set}-backend.loadbalancer.server.port=8001"
     network_mode: service:proxy
 
   backend_stream:
@@ -149,6 +141,7 @@ services:
     environment:
       - VERSION=${VERSION}
       - VERSION_HASH=${VERSION_HASH}
+      - NODE_TYPE=${NODE_TYPE?Variable not set}
       - STACK_API_KEY=${STACK_API_KEY}
       - PORT=8011
       - STREAM_QUEUE=1
@@ -180,6 +173,7 @@ services:
     environment:
       - VERSION=${VERSION}
       - VERSION_HASH=${VERSION_HASH}
+      - NODE_TYPE=${NODE_TYPE?Variable not set}
       - CELERY_WORKER=true
       - RUN=celery -A grid.worker worker -l info -Q main-queue --pool=gevent -c 500
       - C_FORCE_ROOT=1
@@ -206,7 +200,6 @@ services:
       dockerfile: headscale.dockerfile
     volumes:
       - headscale-data:/headscale/data
-      # - ./grid/vpn:/headscale
     environment:
       - NETWORK_NAME=omnet
       - STACK_API_KEY=$STACK_API_KEY
@@ -216,18 +209,10 @@ services:
       - "traefik.enable=true"
       - "traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set}"
       - "traefik.http.routers.${STACK_NAME?Variable not set}-vpn.rule=PathPrefix(`/vpn`)"
+      - "traefik.http.routers.${STACK_NAME?Variable not set}-vpn.middlewares=${STACK_NAME?Variable not set}-vpn"
       - "traefik.http.middlewares.${STACK_NAME?Variable not set}-vpn.stripprefix.prefixes=/vpn"
+      - "traefik.http.middlewares.${STACK_NAME?Variable not set}-vpn.stripprefix.forceslash=true"
       - "traefik.http.services.${STACK_NAME?Variable not set}-vpn.loadbalancer.server.port=8080"
-      # - "traefik.enable=true"
-      # - "traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set}"
-      # # - "traefik.http.routers.${STACK_NAME?Variable not set}-vpn.entrypoint=websecure"
-      # - "traefik.http.routers.${STACK_NAME?Variable not set}-vpn.rule=PathPrefix(`/vpn`)"
-      # # - "traefik.http.routers.${STACK_NAME?Variable not set}-vpn.middlewares=${STACK_NAME?Variable not set}-vpn-stripprefix"
-      # - "traefik.http.services.${STACK_NAME?Variable not set}-vpn.loadbalancer.server.port=8080"
-      # # - "traefik.http.routers.${STACK_NAME?Variable not set}-vpn-http.middlewares=${STACK_NAME?Variable not set}-vpn-http-stripprefix"
-      # # - "traefik.http.middlewares.${STACK_NAME?Variable not set}-vpn-http-stripprefix.stripprefix.prefixes=/vpn"
-      # # - "traefik.http.routers.frontend.rule=PathPrefix(`/`)"
-      # # - "traefik.http.services.frontend.loadbalancer.server.port=80"
 
 volumes:
   app-db-data:
diff --git a/packages/hagrid/hagrid/cli.py b/packages/hagrid/hagrid/cli.py
index ce57e94a1e2..45802d89282 100644
--- a/packages/hagrid/hagrid/cli.py
+++ b/packages/hagrid/hagrid/cli.py
@@ -148,7 +148,7 @@ def clean(location: str) -> None:
     default="",
     type=str,
 )
-@click.option("--insecure", is_flag=True, help="Launch without TLS configuration")
+@click.option("--tls", is_flag=True, help="Launch with TLS configuration")
 def launch(args: TypeTuple[str], **kwargs: TypeDict[str, Any]) -> None:
     verb = get_launch_verb()
     try:
@@ -368,7 +368,7 @@ def create_launch_cmd(
             if "headless" in kwargs and str_to_bool(cast(str, kwargs["headless"])):
                 headless = True
             parsed_kwargs["headless"] = headless
-            parsed_kwargs["insecure"] = kwargs["insecure"]
+            parsed_kwargs["tls"] = kwargs["tls"]
 
             # If the user is using docker desktop (OSX/Windows), check to make sure there's enough RAM.
             # If the user is using Linux this isn't an issue because Docker scales to the avaialble RAM,
@@ -684,7 +684,8 @@ def create_launch_docker_cmd(
         cmd += "COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1"
 
     cmd += " HTTP_PORT=" + str(host_term.free_port)
-    cmd += " HTTPS_PORT=" + str(host_term.free_port_tls)
+    if kwargs["tls"] is True:
+        cmd += " HTTPS_PORT=" + str(host_term.free_port_tls)
     cmd += " TRAEFIK_TAG=" + str(tag)
     cmd += " DOMAIN_NAME='" + snake_name + "'"
     cmd += " NODE_TYPE=" + str(node_type.input)
@@ -704,6 +705,8 @@ def create_launch_docker_cmd(
         cmd += " --profile frontend"
 
     cmd += " --file docker-compose.yml"
+    if kwargs["tls"] is True:
+        cmd += " --file docker-compose.tls.yml"
     cmd += " up"
 
     if not tail:

From 1a03afaa874752076e76b09a2a0434499bc50075 Mon Sep 17 00:00:00 2001
From: Madhava Jay 
Date: Fri, 19 Nov 2021 17:54:32 +1000
Subject: [PATCH 11/26] WIP: Added rootCA.pem mounting and
 update-ca-certificates to tailscale

- when tailscale uses https://docker-host it will accept the cert
- Added GridURL class to help normalise secure and insecure urls
---
 packages/grid/.gitignore                      |  3 +-
 packages/grid/docker-compose.tls.yml          |  6 +-
 packages/grid/vpn/tailscale.dockerfile        |  2 +-
 packages/grid/vpn/tailscale.sh                |  3 +
 packages/hagrid/hagrid/grammar.py             |  4 +-
 .../integration/network/connect_nodes_test.py | 75 ++++++++++++++++++-
 tox.ini                                       | 32 ++++----
 7 files changed, 101 insertions(+), 24 deletions(-)

diff --git a/packages/grid/.gitignore b/packages/grid/.gitignore
index 69762a83270..67fe27c9d01 100644
--- a/packages/grid/.gitignore
+++ b/packages/grid/.gitignore
@@ -9,6 +9,7 @@ packer/output/*
 packer/packer_cache/*
 packer/base-manifest.json
 packer/azure_vars.json
+tls/
 
 # devspace
-.devspace/
\ No newline at end of file
+.devspace/
diff --git a/packages/grid/docker-compose.tls.yml b/packages/grid/docker-compose.tls.yml
index f17558d3d34..bd354f0f449 100644
--- a/packages/grid/docker-compose.tls.yml
+++ b/packages/grid/docker-compose.tls.yml
@@ -1,8 +1,12 @@
 version: "3.8"
 services:
-  proxy:
+  tailscale:
     ports:
       - "${HTTPS_PORT}:${HTTPS_PORT}"
+    volumes:
+      - ./tls/rootCA.pem:/usr/local/share/ca-certificates/rootCA.pem
+
+  proxy:
     command:
       - --providers.docker
       - --providers.docker.exposedbydefault=false
diff --git a/packages/grid/vpn/tailscale.dockerfile b/packages/grid/vpn/tailscale.dockerfile
index 4c9c34d3393..1a9e9b90d56 100644
--- a/packages/grid/vpn/tailscale.dockerfile
+++ b/packages/grid/vpn/tailscale.dockerfile
@@ -1,7 +1,7 @@
 FROM shaynesweeney/tailscale:latest
 
 RUN --mount=type=cache,target=/var/cache/apk \
-    apk add --no-cache python3 py3-pip
+    apk add --no-cache python3 py3-pip ca-certificates
 
 WORKDIR /tailscale
 COPY ./requirements.txt /tailscale/requirements.txt
diff --git a/packages/grid/vpn/tailscale.sh b/packages/grid/vpn/tailscale.sh
index 283111a954a..5b8da770eb5 100755
--- a/packages/grid/vpn/tailscale.sh
+++ b/packages/grid/vpn/tailscale.sh
@@ -1,5 +1,8 @@
 #!/bin/sh
 
+# if we have a custom dev mode rootCA.pem it will get loaded
+update-ca-certificates
+
 # iptables --list
 # block all traffic but port 80 on the tailscale0 interface
 # iptables -A INPUT -i tailscale0 -p tcp --dport 80 -j ACCEPT
diff --git a/packages/hagrid/hagrid/grammar.py b/packages/hagrid/hagrid/grammar.py
index 797987a5e73..2d6546a219c 100644
--- a/packages/hagrid/hagrid/grammar.py
+++ b/packages/hagrid/hagrid/grammar.py
@@ -163,9 +163,7 @@ def free_port_tls(self) -> int:
             raise BadGrammar(
                 f"{type(self)} unable to check if tls port {self.port_tls} is free"
             )
-        return find_available_port(
-            host="localhost", port=self.port_tls, search=self.search
-        )
+        return find_available_port(host="localhost", port=self.port_tls, search=True)
 
     def parts(self) -> TypeTuple[Optional[str], Optional[int], bool]:
         host = None
diff --git a/tests/integration/network/connect_nodes_test.py b/tests/integration/network/connect_nodes_test.py
index 3829da79ad9..3c3edf502c0 100644
--- a/tests/integration/network/connect_nodes_test.py
+++ b/tests/integration/network/connect_nodes_test.py
@@ -1,3 +1,9 @@
+# future
+from __future__ import annotations
+
+# stdlib
+from urllib.parse import urlparse
+
 # third party
 import pytest
 import requests
@@ -16,6 +22,64 @@
 TEST_ROOT_PASS = "changethis"
 
 
+class GridURL:
+    @staticmethod
+    def from_url(url: str) -> GridURL:
+        try:
+            # urlparse doesnt handle no protocol properly
+            if "://" not in url:
+                url = "http://" + url
+            parts = urlparse(url)
+            host_or_ip_parts = parts.netloc.split(":")
+            # netloc is host:port
+            port = 80
+            if len(host_or_ip_parts) > 1:
+                port = int(host_or_ip_parts[1])
+            host_or_ip = host_or_ip_parts[0]
+            return GridURL(
+                host_or_ip=host_or_ip, path=parts.path, port=port, protocol=parts.scheme
+            )
+        except Exception as e:
+            print(f"Failed to convert url: {url} to GridURL. {e}")
+
+    def __init__(
+        self,
+        protocol: str = "http",
+        host_or_ip: str = "localhost",
+        port: int = 80,
+        path: str = "",
+    ) -> None:
+        self.host_or_ip = host_or_ip
+        self.path = path
+        self.port = port
+        self.protocol = protocol
+
+    @property
+    def url(self) -> str:
+        return f"{self.base_url}{self.path}"
+
+    @property
+    def base_url(self) -> str:
+        return f"{self.protocol}://{self.host_or_ip}:{self.port}"
+
+    def to_tls(self) -> GridURL:
+        if self.protocol == "https":
+            return self
+
+        # TODO: only ignore ssl in dev mode
+        r = requests.get(self.base_url, verify=False)  # ignore ssl cert if its fake
+        new_base_url = r.url
+        if new_base_url.endswith("/"):
+            new_base_url = new_base_url[0:-1]
+        return GridURL.from_url(url=f"{new_base_url}{self.path}")
+
+    def __repr__(self) -> str:
+        return f"<{type(self).__name__} {self.url}>"
+
+    def __str__(self) -> str:
+        return self.url
+
+
 def join_to_network_python(
     email: str, password: str, port: int, network_host: str
 ) -> None:
@@ -31,14 +95,17 @@ def join_to_network_python(
 def join_to_network_rest(
     email: str, password: str, port: int, network_host: str
 ) -> None:
-    url = f"http://localhost:{port}/api/v1/login"
-    auth_response = requests.post(url, json={"email": email, "password": password})
+    grid_url = GridURL(port=port, path="/api/v1/login")
+    grid_url = grid_url.to_tls()
+    auth_response = requests.post(
+        grid_url.url, json={"email": email, "password": password}
+    )
     auth = auth_response.json()
 
     # test HTTP API
-    url = f"http://localhost:{port}/api/v1/vpn/join/{network_host}"
+    grid_url.path = f"/api/v1/vpn/join/{network_host}"
     headers = {"Authorization": f"Bearer {auth['access_token']}"}
-    response = requests.post(url, headers=headers)
+    response = requests.post(grid_url.url, headers=headers)
 
     result = response.json()
     return result
diff --git a/tox.ini b/tox.ini
index 9966cda723e..f461e3db7b6 100644
--- a/tox.ini
+++ b/tox.ini
@@ -107,9 +107,9 @@ commands =
     bash -c "docker volume rm test_domain_2_tailscale-data --force || true"
     bash -c "docker volume rm test_network_1_tailscale-data --force || true"
     bash -c "docker volume rm test_network_1_headscale-data --force || true"
-    bash -c 'HAGRID_ART=false hagrid launch test_network_1 network to docker:9081 --tail=false'
-    bash -c 'HAGRID_ART=false hagrid launch test_domain_1 domain to docker:9082 --tail=false'
-    bash -c 'HAGRID_ART=false hagrid launch test_domain_2 domain to docker:9083 --tail=false --headless=true'
+    bash -c 'HAGRID_ART=false hagrid launch test_network_1 network to docker:9081 --tail=false --tls'
+    bash -c 'HAGRID_ART=false hagrid launch test_domain_1 domain to docker:9082 --tail=false --tls'
+    bash -c 'HAGRID_ART=false hagrid launch test_domain_2 domain to docker:9083 --tail=false --headless=true --tls'
     docker ps
     bash -c '(docker logs test_domain_1-frontend-1 -f &) | grep -q "event - compiled successfully" || true'
     bash -c '(docker logs test_network_1-frontend-1 -f &) | grep -q "event - compiled successfully" || true'
@@ -119,27 +119,31 @@ commands =
 
     sleep 5
 
+    # enable custom CA certificate for testing
+    export CAROOT=$(pwd)/packages/grid/tls
+    export REQUESTS_CA_BUNDLE=$CAROOT/rootCA.pem
+
     pytest tests/integration -m frontend -p no:randomly --co
     pytest tests/integration -m frontend -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no
 
     bash -c 'docker stop test_network_1-frontend-1 || true'
     bash -c 'docker stop test_domain_1-frontend-1 || true'
 
-    pytest tests/integration -m network -p no:randomly --co
-    pytest tests/integration -m network -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no
+    ; pytest tests/integration -m network -p no:randomly --co
+    ; pytest tests/integration -m network -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no
 
-    pytest tests/integration -m general -p no:randomly --co
-    pytest tests/integration -m general -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no
+    ; pytest tests/integration -m general -p no:randomly --co
+    ; pytest tests/integration -m general -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no
 
-    pytest tests/integration -m e2e -p no:randomly --co
-    pytest tests/integration -m e2e -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no
+    ; pytest tests/integration -m e2e -p no:randomly --co
+    ; pytest tests/integration -m e2e -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no
 
-    pytest tests/integration -m security -p no:randomly --co
-    pytest tests/integration -m security -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no
+    ; pytest tests/integration -m security -p no:randomly --co
+    ; pytest tests/integration -m security -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no
 
-    bash -c 'HAGRID_ART=false hagrid land test_network_1'
-    bash -c 'HAGRID_ART=false hagrid land test_domain_1'
-    bash -c 'HAGRID_ART=false hagrid land test_domain_2'
+    ; bash -c 'HAGRID_ART=false hagrid land test_network_1'
+    ; bash -c 'HAGRID_ART=false hagrid land test_domain_1'
+    ; bash -c 'HAGRID_ART=false hagrid land test_domain_2'
 
 [testenv:stack.test.integration.smpc]
 description = Integration Tests for Core Stack

From 41ea7d69ea9f2abeaf80a680b34decf3c70c68df Mon Sep 17 00:00:00 2001
From: Madhava Jay 
Date: Fri, 26 Nov 2021 15:23:24 +1000
Subject: [PATCH 12/26] Added GridURL throughout code base

- Fixed issue with DOMAIN_NAME env
- Added stack.test.integration.tls
- Updated firewall and tests for ssl and port 81
- Improved find_available_port to work in non http/tcp instances
- Removed Party and replaced with GridURL
- Added --test and IGNORE_TLS_ERRORS for testing fake tls certs
---
 .github/workflows/stack-integration_tests.yml |  75 ++++++++++++
 packages/grid/.env                            |   3 +-
 packages/grid/backend/grid/api/meta/ping.py   |   3 +-
 packages/grid/backend/grid/api/vpn/vpn.py     |   5 +-
 packages/grid/backend/grid/core/config.py     |   2 +-
 packages/grid/docker-compose.test.yml         |   5 +
 packages/grid/docker-compose.tls.yml          |  21 ++--
 packages/grid/docker-compose.yml              |  22 ++--
 packages/grid/frontend/frontend.dockerfile    |  10 +-
 packages/grid/traefik/certs/.gitignore        |   0
 packages/grid/vpn/tailscale.sh                |   8 ++
 packages/hagrid/hagrid/cli.py                 |   8 ++
 packages/hagrid/hagrid/lib.py                 |  39 ++++---
 packages/syft/proto/core/tensor/party.proto   |   8 --
 .../syft/proto/core/tensor/share_tensor.proto |   4 +-
 .../syft/src/syft/core/node/common/client.py  |  19 ++--
 .../node/common/client_manager/vpn_api.py     |   9 +-
 .../syft/src/syft/core/node/common/node.py    |   4 +-
 .../association_request_service.py            |   7 +-
 .../common/node_service/ping/ping_messages.py |  26 ++++-
 .../common/node_service/vpn/vpn_messages.py   |  36 ++++--
 .../syft/src/syft/core/node/network/client.py |  24 ----
 .../src/syft/core/tensor/smpc/mpc_tensor.py   |  36 +++---
 .../syft/src/syft/core/tensor/smpc/party.py   |  51 ---------
 .../src/syft/core/tensor/smpc/share_tensor.py |  27 ++---
 packages/syft/src/syft/grid/__init__.py       |   2 +
 packages/syft/src/syft/grid/client/client.py  |  30 ++---
 .../src/syft/grid/client/grid_connection.py   |  52 +++++++--
 .../syft/grid/connections/http_connection.py  |  12 +-
 packages/syft/src/syft/grid/grid_url.py       | 107 ++++++++++++++++++
 .../src/syft/proto/core/tensor/party_pb2.py   |  39 -------
 .../proto/core/tensor/share_tensor_pb2.py     |   7 +-
 packages/syft/src/syft/registry.py            |   6 +-
 packages/syft/src/syft/util.py                |  17 +++
 .../integration/network/connect_nodes_test.py |  70 ++----------
 .../security/check_vpn_firewall_test.py       |   7 ++
 tox.ini                                       | 107 ++++++++++++++----
 37 files changed, 545 insertions(+), 363 deletions(-)
 create mode 100644 packages/grid/docker-compose.test.yml
 create mode 100644 packages/grid/traefik/certs/.gitignore
 delete mode 100644 packages/syft/proto/core/tensor/party.proto
 delete mode 100644 packages/syft/src/syft/core/tensor/smpc/party.py
 create mode 100644 packages/syft/src/syft/grid/grid_url.py
 delete mode 100644 packages/syft/src/syft/proto/core/tensor/party_pb2.py

diff --git a/.github/workflows/stack-integration_tests.yml b/.github/workflows/stack-integration_tests.yml
index 358387b6775..b12fc519651 100644
--- a/.github/workflows/stack-integration_tests.yml
+++ b/.github/workflows/stack-integration_tests.yml
@@ -81,6 +81,81 @@ jobs:
         run: |
           tox -e stack.test.integration
 
+  stack-integration-tests-tls:
+    strategy:
+      max-parallel: 3
+      matrix:
+        os: [ubuntu-latest]
+        python-version: [3.9]
+
+    runs-on: ${{matrix.os}}
+
+    steps:
+      - uses: actions/checkout@v2
+
+      - name: Check for file changes
+        uses: dorny/paths-filter@v2
+        id: changes
+        with:
+          token: ${{ github.token }}
+          filters: .github/file-filters.yml
+
+      - name: Set up Python ${{ matrix.python-version }}
+        uses: actions/setup-python@v2
+        if: steps.changes.outputs.stack == 'true'
+        with:
+          python-version: ${{ matrix.python-version }}
+
+      - name: Get pip cache dir
+        if: steps.changes.outputs.stack == 'true'
+        id: pip-cache
+        run: |
+          echo "::set-output name=dir::$(pip cache dir)"
+
+      - name: pip cache
+        uses: actions/cache@v2
+        if: steps.changes.outputs.stack == 'true'
+        with:
+          path: ${{ steps.pip-cache.outputs.dir }}
+          key: ${{ runner.os }}-pip-py${{ matrix.python-version }}
+          restore-keys: |
+            ${{ runner.os }}-pip-py${{ matrix.python-version }}
+
+      - name: Upgrade pip
+        if: steps.changes.outputs.stack == 'true'
+        run: |
+          pip install --upgrade --user pip
+
+      - name: Install tox
+        if: steps.changes.outputs.stack == 'true'
+        run: |
+          pip install tox --upgrade
+
+      - name: Install Docker Compose
+        if: runner.os == 'Linux'
+        shell: bash
+        run: |
+          mkdir -p ~/.docker/cli-plugins
+          DOCKER_COMPOSE_VERSION=v2.1.1
+          curl -sSL https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-linux-x86_64 -o /usr/local/bin/mkcert
+          chmod +x /usr/local/bin/mkcert
+
+      - name: Install mkcert
+        if: runner.os == 'Linux'
+        shell: bash
+        run: |
+          sudo apt install libnss3-tools -y
+          mkdir -p ~/.docker/cli-plugins
+          MKCERT_VERSION=v1.4.3
+          curl -sSL https://github.com/FiloSottile/mkcert/releases/download/${MKCERT_VERSION}/mkcert-${MKCERT_VERSION}-linux-amd64 -o ~/.docker/cli-plugins/docker-compose
+          chmod +x ~/.docker/cli-plugins/docker-compose
+
+      - name: Run integration tests
+        if: steps.changes.outputs.stack == 'true'
+        timeout-minutes: 30
+        run: |
+          tox -e stack.test.integration.tls
+
   stack-integration-tests-windows:
     strategy:
       max-parallel: 3
diff --git a/packages/grid/.env b/packages/grid/.env
index 571b57a51c0..ef8619984de 100644
--- a/packages/grid/.env
+++ b/packages/grid/.env
@@ -1,11 +1,12 @@
 #!/bin/bash
 DOMAIN=localhost
-DOMAIN_NAME=grid.openmined.org
+DOMAIN_NAME=default_node_name
 NODE_TYPE=domain
 HTTP_PORT=80
 HTTPS_PORT=443
 HEADSCALE_PORT=8080
 NETWORK_NAME=omnet
+IGNORE_TLS_ERRORS=False
 
 STACK_NAME=grid-openmined-org
 TRAEFIK_PUBLIC_NETWORK=traefik-public
diff --git a/packages/grid/backend/grid/api/meta/ping.py b/packages/grid/backend/grid/api/meta/ping.py
index 92f64eafa0d..e99c6a28546 100644
--- a/packages/grid/backend/grid/api/meta/ping.py
+++ b/packages/grid/backend/grid/api/meta/ping.py
@@ -11,6 +11,7 @@
 
 # syft absolute
 from syft.core.node.common.node_service.ping.ping_messages import PingMessageWithReply
+from syft.grid import GridURL
 
 # grid absolute
 from grid.api.dependencies.current_user import get_current_user
@@ -27,7 +28,7 @@ def remote_ping(
 
     # Build Syft Message
     msg = (
-        PingMessageWithReply(kwargs={"host_or_ip": host_or_ip})
+        PingMessageWithReply(kwargs={"grid_url": GridURL.from_url(host_or_ip)})
         .to(address=node.address, reply_to=node.address)
         .sign(signing_key=user_key)
     )
diff --git a/packages/grid/backend/grid/api/vpn/vpn.py b/packages/grid/backend/grid/api/vpn/vpn.py
index 9b536f17a4a..0033f87a7ee 100644
--- a/packages/grid/backend/grid/api/vpn/vpn.py
+++ b/packages/grid/backend/grid/api/vpn/vpn.py
@@ -21,6 +21,7 @@
     VPNStatusMessageWithReply,
 )
 from syft.core.node.common.node_service.vpn.vpn_messages import VPNJoinMessageWithReply
+from syft.grid import GridURL
 from syft.lib.python.util import upcast
 
 # grid absolute
@@ -44,7 +45,7 @@ def connect(
     msg = (
         VPNConnectMessageWithReply(
             kwargs={
-                "host_or_ip": host_or_ip,
+                "grid_url": GridURL.from_url(host_or_ip),
                 "vpn_auth_key": vpn_auth_key,
             }
         )
@@ -72,7 +73,7 @@ def join(
 ) -> Dict[str, Any]:
     user_key = SigningKey(current_user.private_key.encode(), encoder=HexEncoder)
     msg = (
-        VPNJoinMessageWithReply(kwargs={"host_or_ip": host_or_ip})
+        VPNJoinMessageWithReply(kwargs={"grid_url": GridURL.from_url(host_or_ip)})
         .to(address=node.address, reply_to=node.address)
         .sign(signing_key=user_key)
     )
diff --git a/packages/grid/backend/grid/core/config.py b/packages/grid/backend/grid/core/config.py
index f18c5b78fbf..13d3917b6ce 100644
--- a/packages/grid/backend/grid/core/config.py
+++ b/packages/grid/backend/grid/core/config.py
@@ -92,7 +92,7 @@ def get_emails_enabled(cls, v: bool, values: Dict[str, Any]) -> bool:
     FIRST_SUPERUSER_PASSWORD: str = "changethis"
     USERS_OPEN_REGISTRATION: bool = False
 
-    DOMAIN_NAME: str = "grid_domain"
+    DOMAIN_NAME: str = "default_node_name"
     STREAM_QUEUE: bool = False
     NODE_TYPE: str = "Domain"
 
diff --git a/packages/grid/docker-compose.test.yml b/packages/grid/docker-compose.test.yml
new file mode 100644
index 00000000000..d6d82a550ca
--- /dev/null
+++ b/packages/grid/docker-compose.test.yml
@@ -0,0 +1,5 @@
+version: "3.8"
+services:
+  tailscale:
+    volumes:
+      - ./tls/rootCA.pem:/usr/local/share/ca-certificates/rootCA.pem
diff --git a/packages/grid/docker-compose.tls.yml b/packages/grid/docker-compose.tls.yml
index bd354f0f449..7ea03b892e6 100644
--- a/packages/grid/docker-compose.tls.yml
+++ b/packages/grid/docker-compose.tls.yml
@@ -3,28 +3,25 @@ services:
   tailscale:
     ports:
       - "${HTTPS_PORT}:${HTTPS_PORT}"
-    volumes:
-      - ./tls/rootCA.pem:/usr/local/share/ca-certificates/rootCA.pem
-
   proxy:
     command:
-      - --providers.docker
-      - --providers.docker.exposedbydefault=false
-      - --providers.docker.constraints=Label(`traefik.constraint-label-stack`, `${TRAEFIK_TAG?Variable not set}`)
+      - "--providers.docker"
+      - "--providers.docker.exposedbydefault=false"
+      - "--providers.docker.constraints=Label(`traefik.constraint-label-stack`, `${TRAEFIK_TAG?Variable not set}`)"
       # custom tls cert config
-      - --providers.file.directory=/etc/traefik/dynamic-configurations
-      - --providers.file.watch=true
+      - "--providers.file.directory=/etc/traefik/dynamic-configurations"
+      - "--providers.file.watch=true"
       # redirect http to https
-      - "--entrypoints.web.address=:${HTTP_PORT}"
+      - "--entrypoints.web.address=:81"
       - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
       - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
+      - "--entrypoints.vpn.address=:80"
       - "--entrypoints.websecure.address=:${HTTPS_PORT}"
       - "--entrypoints.websecure.http.tls=true"
-
       # Enable the access log, with HTTP requests
-      - --accesslog
+      - "--accesslog"
       # Enable the Traefik log, for configurations and errors
-      - --log
+      - "--log"
       # Enable the Dashboard and API
       # - --api # admin panel
       # - --api.insecure=true # admin panel no password
diff --git a/packages/grid/docker-compose.yml b/packages/grid/docker-compose.yml
index cff49289ee2..c00e9421821 100644
--- a/packages/grid/docker-compose.yml
+++ b/packages/grid/docker-compose.yml
@@ -22,7 +22,7 @@ services:
       - net_admin
       - sys_module
     ports:
-      - "${HTTP_PORT}:${HTTP_PORT}"
+      - "${HTTP_PORT}:81"
       - "41641/udp"
       - "4000"
       # - "8080:8080"
@@ -43,15 +43,15 @@ services:
       - /var/run/docker.sock:/var/run/docker.sock
       - ./traefik:/etc/traefik
     command:
-      - --providers.docker
-      - --providers.docker.exposedbydefault=false
-      - --providers.docker.constraints=Label(`traefik.constraint-label-stack`, `${TRAEFIK_TAG?Variable not set}`)
-      - "--entrypoints.web.address=:${HTTP_PORT}"
+      - "--providers.docker"
+      - "--providers.docker.exposedbydefault=false"
+      - "--providers.docker.constraints=Label(`traefik.constraint-label-stack`, `${TRAEFIK_TAG?Variable not set}`)"
+      - "--entrypoints.web.address=:81"
 
       # Enable the access log, with HTTP requests
-      - --accesslog
+      - "--accesslog"
       # Enable the Traefik log, for configurations and errors
-      - --log
+      - "--log"
       # Enable the Dashboard and API
       # - --api # admin panel
       # - --api.insecure=true # admin panel no password
@@ -67,8 +67,8 @@ services:
       target: "grid-ui-${FRONTEND_ENV-development}"
       args:
         FRONTEND_ENV: ${FRONTEND_ENV-development}
-        TYPE: ${NODE_TYPE?Variable not set}
     environment:
+      - NODE_TYPE=${NODE_TYPE?Variable not set}
       - VERSION=${VERSION}
       - VERSION_HASH=${VERSION_HASH}
     labels:
@@ -111,8 +111,10 @@ services:
       - VERSION=${VERSION}
       - VERSION_HASH=${VERSION_HASH}
       - NODE_TYPE=${NODE_TYPE?Variable not set}
+      - DOMAIN_NAME=${DOMAIN_NAME?Variable not set}
       - STACK_API_KEY=${STACK_API_KEY}
       - PORT=8001
+      - IGNORE_TLS_ERRORS=${IGNORE_TLS_ERRORS?False}
     build:
       context: ../
       dockerfile: ./grid/backend/backend.dockerfile
@@ -142,9 +144,11 @@ services:
       - VERSION=${VERSION}
       - VERSION_HASH=${VERSION_HASH}
       - NODE_TYPE=${NODE_TYPE?Variable not set}
+      - DOMAIN_NAME=${DOMAIN_NAME?Variable not set}
       - STACK_API_KEY=${STACK_API_KEY}
       - PORT=8011
       - STREAM_QUEUE=1
+      - IGNORE_TLS_ERRORS=${IGNORE_TLS_ERRORS?False}
     build:
       context: ../
       dockerfile: ./grid/backend/backend.dockerfile
@@ -174,10 +178,12 @@ services:
       - VERSION=${VERSION}
       - VERSION_HASH=${VERSION_HASH}
       - NODE_TYPE=${NODE_TYPE?Variable not set}
+      - DOMAIN_NAME=${DOMAIN_NAME?Variable not set}
       - CELERY_WORKER=true
       - RUN=celery -A grid.worker worker -l info -Q main-queue --pool=gevent -c 500
       - C_FORCE_ROOT=1
       - STACK_API_KEY=${STACK_API_KEY}
+      - IGNORE_TLS_ERRORS=${IGNORE_TLS_ERRORS?False}
     volumes:
       - ./backend/grid:/app/grid
       - ./backend/alembic:/app/alembic
diff --git a/packages/grid/frontend/frontend.dockerfile b/packages/grid/frontend/frontend.dockerfile
index 621b0ce7ad4..f87423c17f1 100644
--- a/packages/grid/frontend/frontend.dockerfile
+++ b/packages/grid/frontend/frontend.dockerfile
@@ -1,14 +1,12 @@
-ARG TYPE=domain
 ARG FRONTEND_DEV
 ARG DISABLE_TELEMETRY=1
 ARG PRODUCTION_DIR=/prod_app
 
 FROM node:16-alpine as init-stage
-ARG TYPE=domain
 ARG PRODUCTION_DIR
 ARG DISABLE_TELEMETRY
 
-ENV NODE_TYPE $TYPE
+ENV NODE_TYPE $NODE_TYPE
 ENV PROD_ROOT $PRODUCTION_DIR
 ENV NEXT_TELEMETRY_DISABLED $DISABLE_TELEMETRY
 ENV NEXT_PUBLIC_API_URL=/api/v1
@@ -19,10 +17,9 @@ RUN --mount=type=cache,target=/root/.yarn YARN_CACHE_FOLDER=/root/.yarn yarn --f
 COPY . .
 
 FROM node:16-alpine as grid-ui-development
-ARG TYPE=domain
 ARG DISABLE_TELEMETRY
 
-ENV NODE_TYPE $TYPE
+ENV NODE_TYPE $NODE_TYPE
 ENV NEXT_TELEMETRY_DISABLED $DISABLE_TELEMETRY
 ENV NEXT_PUBLIC_ENVIRONMENT=development
 ENV NEXT_PUBLIC_API_URL=/api/v1
@@ -46,10 +43,9 @@ ENV NEXT_TELEMETRY_DISABLED $DISABLE_TELEMETRY
 ENV PROD_ROOT $PRODUCTION_DIR
 ENV NEXT_PUBLIC_ENVIRONMENT=production
 ENV NEXT_PUBLIC_API_URL=/api/v1
+ENV NODE_TYPE $NODE_TYPE
 
 COPY --from=build-stage $PROD_ROOT/out /usr/share/nginx/html
 COPY --from=build-stage $PROD_ROOT/docker/nginx.conf /etc/nginx/conf.d/default.conf
 COPY --from=build-stage $PROD_ROOT/docker/nginx-backend-not-found.conf /etc/nginx/extra-conf.d/backend-not-found
 COPY --from=build-stage $PROD_ROOT /hauuuh
-
-
diff --git a/packages/grid/traefik/certs/.gitignore b/packages/grid/traefik/certs/.gitignore
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/packages/grid/vpn/tailscale.sh b/packages/grid/vpn/tailscale.sh
index 5b8da770eb5..ac18ba4821f 100755
--- a/packages/grid/vpn/tailscale.sh
+++ b/packages/grid/vpn/tailscale.sh
@@ -9,6 +9,14 @@ update-ca-certificates
 # iptables -A INPUT -i tailscale0 -p tcp -j REJECT
 # iptables -A OUTPUT -p tcp --destination-port 4000 -j DROP
 
+# we use 81 when SSL is enabled to redirect external port 80 traffic to SSL
+# however the VPN can't use SSL because the certs cant be for IPs and the traffic
+# is encrypted anyway so we dont need it
+iptables -A INPUT -i tailscale0 -p tcp --destination-port 81 -j REJECT
+# additionally if SSL is enabled we might be using 443+ in testing to provide
+# multiple different stacks, 443, 444, 446 etc however this should be blocked
+# over the VPN so we dont accidentally use it somehow
+iptables -A INPUT -i tailscale0 -p tcp --destination-port 443:450 -j REJECT
 iptables -A INPUT -i tailscale0 -p tcp --destination-port 4000 -j REJECT
 iptables -A INPUT -i tailscale0 -p tcp --destination-port 8001 -j REJECT
 iptables -A INPUT -i tailscale0 -p tcp --destination-port 8011 -j REJECT
diff --git a/packages/hagrid/hagrid/cli.py b/packages/hagrid/hagrid/cli.py
index 3430857c870..1433dde1642 100644
--- a/packages/hagrid/hagrid/cli.py
+++ b/packages/hagrid/hagrid/cli.py
@@ -150,6 +150,7 @@ def clean(location: str) -> None:
     type=str,
 )
 @click.option("--tls", is_flag=True, help="Launch with TLS configuration")
+@click.option("--test", is_flag=True, help="Launch with Test configuration")
 def launch(args: TypeTuple[str], **kwargs: TypeDict[str, Any]) -> None:
     verb = get_launch_verb()
     try:
@@ -384,6 +385,7 @@ def create_launch_cmd(
                 headless = True
             parsed_kwargs["headless"] = headless
             parsed_kwargs["tls"] = kwargs["tls"]
+            parsed_kwargs["test"] = kwargs["test"]
 
             # If the user is using docker desktop (OSX/Windows), check to make sure there's enough RAM.
             # If the user is using Linux this isn't an issue because Docker scales to the avaialble RAM,
@@ -706,6 +708,10 @@ def create_launch_docker_cmd(
         "VERSION": GRID_SRC_VERSION[0],
         "VERSION_HASH": GRID_SRC_VERSION[1],
     }
+
+    if kwargs["test"] is True:
+        envs["IGNORE_TLS_ERRORS"] = "True"
+
     cmd = ""
     args = []
     for k, v in envs.items():
@@ -735,6 +741,8 @@ def create_launch_docker_cmd(
     cmd += " --file docker-compose.yml"
     if kwargs["tls"] is True:
         cmd += " --file docker-compose.tls.yml"
+    if kwargs["test"] is True:
+        cmd += " --file docker-compose.test.yml"
     cmd += " up"
 
     if not tail:
diff --git a/packages/hagrid/hagrid/lib.py b/packages/hagrid/hagrid/lib.py
index 8c3eff1b40e..24a7477b8b7 100644
--- a/packages/hagrid/hagrid/lib.py
+++ b/packages/hagrid/hagrid/lib.py
@@ -7,13 +7,13 @@
 import os
 from pathlib import Path
 import site
+import socket
 import subprocess
 from typing import Optional
 from typing import Tuple
 
 # third party
 import git
-import requests
 
 # relative
 from .cache import DEFAULT_BRANCH
@@ -21,16 +21,12 @@
 from .deps import is_windows
 
 DOCKER_ERROR = """
-Instructions for v2 beta can be found here:
-You are running an old verion of docker, possibly on Linux. You need to install v2 beta.
-
-https://www.rockyourcode.com/how-to-install-docker-compose-v2-on-linux-2021/
-
+You are running an old version of docker, possibly on Linux. You need to install v2.
 At the time of writing this, if you are on linux you need to run the following:
 
-mkdir -p ~/.docker/cli-plugins
-curl -sSL https://github.com/docker/compose-cli/releases/download/v2.0.0-rc.1/docker-compose-linux-amd64 \
--o ~/.docker/cli-plugins/docker-compose
+DOCKER_COMPOSE_VERSION=v2.1.1
+curl -sSL https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-linux-x86_64 \
+     -o ~/.docker/cli-plugins/docker-compose
 chmod +x ~/.docker/cli-plugins/docker-compose
 
 ALERT: you may need to run the following command to make sure you can run without sudo.
@@ -191,18 +187,21 @@ def find_available_port(host: str, port: int, search: bool = False) -> int:
     port_available = False
     while not port_available:
         try:
-            requests.get("http://" + host + ":" + str(port))
-            if search:
-                print(
-                    str(port)
-                    + " doesn't seem to be available... trying "
-                    + str(port + 1)
-                )
-                port = port + 1
-            else:
+            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+            result_of_check = sock.connect_ex((host, port))
+
+            if result_of_check != 0:
+                port_available = True
                 break
-        except requests.ConnectionError:
-            port_available = True
+            else:
+                if search:
+                    port += 1
+
+        except Exception as e:
+            print(f"Failed to check port {port}. {e}")
+
+    sock.close()
+
     if search is False and port_available is False:
         error = (
             f"{port} is in use, either free the port or "
diff --git a/packages/syft/proto/core/tensor/party.proto b/packages/syft/proto/core/tensor/party.proto
deleted file mode 100644
index 5e53a3ca1af..00000000000
--- a/packages/syft/proto/core/tensor/party.proto
+++ /dev/null
@@ -1,8 +0,0 @@
-syntax = "proto3";
-
-package syft.core.tensor;
-
-message Party {
-  string url = 1;
-  uint32 port = 2;
-}
diff --git a/packages/syft/proto/core/tensor/share_tensor.proto b/packages/syft/proto/core/tensor/share_tensor.proto
index 1cf53c8ecc4..0a9a30ce606 100644
--- a/packages/syft/proto/core/tensor/share_tensor.proto
+++ b/packages/syft/proto/core/tensor/share_tensor.proto
@@ -4,8 +4,6 @@ package syft.core.tensor;
 
 import "proto/lib/numpy/array.proto";
 import "proto/core/common/recursive_serde.proto";
-import "proto/core/tensor/party.proto";
-
 
 message ShareTensor {
   oneof data {
@@ -16,5 +14,5 @@ message ShareTensor {
   uint32 rank = 3;
   uint32 seed_przs = 4;
   bytes ring_size = 5;
-  repeated Party parties_info = 6;
+  repeated syft.core.common.RecursiveSerde parties_info = 6;
 }
diff --git a/packages/syft/src/syft/core/node/common/client.py b/packages/syft/src/syft/core/node/common/client.py
index d60263e8cca..a0a398f4e2e 100644
--- a/packages/syft/src/syft/core/node/common/client.py
+++ b/packages/syft/src/syft/core/node/common/client.py
@@ -18,6 +18,7 @@
 import syft as sy
 
 # relative
+from ....grid import GridURL
 from ....logger import critical
 from ....logger import debug
 from ....logger import error
@@ -182,17 +183,17 @@ def join_network(
                 raise ValueError(
                     "join_network requires a Client object or host_or_ip string"
                 )
+
+            # we are leaving the client and entering the node in a container
+            # any hostnames of localhost need to be converted to docker-host
             if client is not None:
-                # connection.host has a http protocol
-                connection_host = client.routes[0].connection.host  # type: ignore
-                parts = connection_host.split("://")
-                host_or_ip = parts[1]
-                # if we are using localhost to connect we need to change to docker-host
-                # so that the domain container can connect to the host not itself
-                host_or_ip = str(host_or_ip).replace("localhost", "docker-host")
-            return self.vpn.join_network(host_or_ip=str(host_or_ip))  # type: ignore
+                grid_url = client.routes[0].connection.base_url.as_docker_host()  # type: ignore
+            else:
+                grid_url = GridURL.from_url(str(host_or_ip)).as_docker_host()
+
+            return self.vpn.join_network_vpn(grid_url=grid_url)  # type: ignore
         except Exception as e:
-            print(f"Failed to join network with {host_or_ip}. {e}")
+            print(f"Failed to join network with {client} or {host_or_ip}. {e}")
 
     @property
     def id(self) -> UID:
diff --git a/packages/syft/src/syft/core/node/common/client_manager/vpn_api.py b/packages/syft/src/syft/core/node/common/client_manager/vpn_api.py
index 2aba445d1d4..daca69e5f67 100644
--- a/packages/syft/src/syft/core/node/common/client_manager/vpn_api.py
+++ b/packages/syft/src/syft/core/node/common/client_manager/vpn_api.py
@@ -6,6 +6,7 @@
 from typing import Type
 
 # relative
+from .....grid import GridURL
 from .....lib.python.util import upcast
 from ...abstract.node import AbstractNodeClient
 from ..action.exception_action import ExceptionMessage
@@ -18,9 +19,9 @@ class VPNAPI:
     def __init__(self, client: AbstractNodeClient):
         self.client = client
 
-    def join_network(self, host_or_ip: str) -> None:
+    def join_network_vpn(self, grid_url: GridURL) -> None:
         reply = self.perform_api_request(
-            syft_msg=VPNJoinMessageWithReply, content={"host_or_ip": host_or_ip}
+            syft_msg=VPNJoinMessageWithReply, content={"grid_url": grid_url}
         )
         logging.info(reply.payload)
         status = "error"
@@ -30,9 +31,9 @@ def join_network(self, host_or_ip: str) -> None:
             pass
 
         if status == "ok":
-            print(f"🔌 {self.client} successfully connected to the VPN: {host_or_ip}")
+            print(f"🔌 {self.client} successfully connected to the VPN: {grid_url}")
         else:
-            print(f"❌ {self.client} failed to connect to the VPN: {host_or_ip}")
+            print(f"❌ {self.client} failed to connect to the VPN: {grid_url}")
 
     def get_status(self) -> Dict[str, Any]:
         reply = self.perform_api_request(syft_msg=VPNStatusMessageWithReply, content={})
diff --git a/packages/syft/src/syft/core/node/common/node.py b/packages/syft/src/syft/core/node/common/node.py
index 173bee677d8..296feebc298 100644
--- a/packages/syft/src/syft/core/node/common/node.py
+++ b/packages/syft/src/syft/core/node/common/node.py
@@ -27,6 +27,7 @@
 import syft as sy
 
 # relative
+from ....grid import GridURL
 from ....lib import lib_ast
 from ....logger import debug
 from ....logger import error
@@ -405,7 +406,8 @@ def add_route(
 
             if host_or_ip not in node_id_dict[vpn_key]:
                 # connect and save the client
-                client = sy.connect(url=f"http://{host_or_ip}/api/v1")
+                grid_url = GridURL.from_url(host_or_ip)
+                client = sy.connect(url=grid_url.with_path("/api/v1"))
                 node_id_dict[vpn_key][host_or_ip] = client
 
             self.peer_route_clients[node_id] = node_id_dict
diff --git a/packages/syft/src/syft/core/node/common/node_service/association_request/association_request_service.py b/packages/syft/src/syft/core/node/common/node_service/association_request/association_request_service.py
index 6b6653198ef..6605405fe2f 100644
--- a/packages/syft/src/syft/core/node/common/node_service/association_request/association_request_service.py
+++ b/packages/syft/src/syft/core/node/common/node_service/association_request/association_request_service.py
@@ -15,6 +15,7 @@
 import syft as sy
 
 # relative
+from ......grid import GridURL
 from ......logger import error
 from ......logger import info
 from .....common.message import ImmediateSyftMessageWithReply
@@ -99,7 +100,8 @@ def send_association_request_msg(
         metadata["node_name"] = (
             node.name if node.name else ""
         )  # tell the network what our name is
-        target_client = sy.connect(url=f"http://{msg.target}/api/v1")
+        grid_url = GridURL.from_url(msg.target).with_path("/api/v1")
+        target_client = sy.connect(url=str(grid_url))
 
         target_msg: SignedImmediateSyftMessageWithReply = (
             ReceiveAssociationRequestMessage(
@@ -231,7 +233,8 @@ def respond_association_request_msg(
             error(f"Failed to get vpn status. {e}")
 
         # create a client to the source
-        source_client = sy.connect(url=f"http://{msg.source}/api/v1")
+        grid_url = GridURL.from_url(msg.source).with_path("/api/v1")
+        source_client = sy.connect(url=str(grid_url))
 
         try:
             node_msg: SignedImmediateSyftMessageWithReply = (
diff --git a/packages/syft/src/syft/core/node/common/node_service/ping/ping_messages.py b/packages/syft/src/syft/core/node/common/node_service/ping/ping_messages.py
index 46e6875934c..0594e854beb 100644
--- a/packages/syft/src/syft/core/node/common/node_service/ping/ping_messages.py
+++ b/packages/syft/src/syft/core/node/common/node_service/ping/ping_messages.py
@@ -12,6 +12,7 @@
 from typing_extensions import final
 
 # relative
+from ......grid import GridURL
 from .....common.serde.serializable import serializable
 from ....abstract.node import AbstractNode
 from ..generic_payload.messages import GenericPayloadMessage
@@ -19,6 +20,21 @@
 from ..generic_payload.messages import GenericPayloadReplyMessage
 
 
+def grid_url_from_kwargs(kwargs: Dict[str, Any]) -> GridURL:
+    try:
+        if "host_or_ip" in kwargs:
+            # old way to send these messages was with host_or_ip
+            return GridURL.from_url(str(kwargs["host_or_ip"]))
+        elif "grid_url" in kwargs:
+            # new way is with grid_url
+            return kwargs["grid_url"]
+        else:
+            raise Exception("kwargs missing host_or_ip or grid_url")
+    except Exception as e:
+        print(f"Failed to get grid_url from kwargs: {kwargs}. {e}")
+        raise e
+
+
 @serializable(recursive_serde=True)
 @final
 class PingMessage(GenericPayloadMessage):
@@ -41,11 +57,9 @@ def run(
         self, node: AbstractNode, verify_key: Optional[VerifyKey] = None
     ) -> Dict[str, Any]:
         try:
-            host_or_ip = str(self.kwargs["host_or_ip"])
-            if not host_or_ip.startswith("http"):
-                host_or_ip = f"http://{host_or_ip}"
-            res = requests.get(f"{host_or_ip}/status")
-            return {"host_or_ip": host_or_ip, "status_code": res.status_code}
+            grid_url = grid_url_from_kwargs(self.kwargs)
+            res = requests.get(str(grid_url.with_path("/status")))
+            return {"grid_url": str(grid_url), "status_code": res.status_code}
         except Exception:
             print("Failed to run ping", self.kwargs)
-            return {"host_or_ip": host_or_ip, "error": "Error"}
+            return {"grid_url": str(grid_url), "error": "Error"}
diff --git a/packages/syft/src/syft/core/node/common/node_service/vpn/vpn_messages.py b/packages/syft/src/syft/core/node/common/node_service/vpn/vpn_messages.py
index ec3d6beecf2..600e84d2f80 100644
--- a/packages/syft/src/syft/core/node/common/node_service/vpn/vpn_messages.py
+++ b/packages/syft/src/syft/core/node/common/node_service/vpn/vpn_messages.py
@@ -19,6 +19,8 @@
 from typing_extensions import final
 
 # relative
+from ......grid import GridURL
+from ......util import verify_tls
 from .....common.serde.serializable import serializable
 from ....abstract.node import AbstractNode
 from ..generic_payload.messages import GenericPayloadMessage
@@ -26,6 +28,21 @@
 from ..generic_payload.messages import GenericPayloadReplyMessage
 
 
+def grid_url_from_kwargs(kwargs: Dict[str, Any]) -> GridURL:
+    try:
+        if "host_or_ip" in kwargs:
+            # old way to send these messages was with host_or_ip
+            return GridURL.from_url(str(kwargs["host_or_ip"]))
+        elif "grid_url" in kwargs:
+            # new way is with grid_url
+            return kwargs["grid_url"]
+        else:
+            raise Exception("kwargs missing host_or_ip or grid_url")
+    except Exception as e:
+        print(f"Failed to get grid_url from kwargs: {kwargs}. {e}")
+        raise e
+
+
 @serializable(recursive_serde=True)
 @final
 class VPNConnectMessage(GenericPayloadMessage):
@@ -48,15 +65,13 @@ def run(
         self, node: AbstractNode, verify_key: Optional[VerifyKey] = None
     ) -> Dict[str, Any]:
         try:
-            host_or_ip = str(self.kwargs["host_or_ip"])
-            if not host_or_ip.startswith("http"):
-                host_or_ip = f"http://{host_or_ip}/vpn"
-
+            grid_url = grid_url_from_kwargs(self.kwargs)
+            grid_url = grid_url.with_path("/vpn")
             vpn_auth_key = str(self.kwargs["vpn_auth_key"])
 
             status, error = connect_with_key(
                 tailscale_host="http://tailscale:4000",
-                headscale_host=host_or_ip,
+                headscale_host=str(grid_url),
                 vpn_auth_key=vpn_auth_key,
             )
             if status:
@@ -119,10 +134,7 @@ def run(
         self, node: AbstractNode, verify_key: Optional[VerifyKey] = None
     ) -> Dict[str, Any]:
         try:
-            host_or_ip = str(self.kwargs["host_or_ip"])
-            if not host_or_ip.startswith("http"):
-                host_or_ip = f"http://{host_or_ip}"
-
+            grid_url = grid_url_from_kwargs(self.kwargs)
             # can't import Network due to circular imports
             if type(node).__name__ == "Network":
                 # we are already in the network and could be on the blocking backend api
@@ -138,7 +150,9 @@ def run(
                 except Exception:  # nosec
                     pass
             else:
-                res = requests.post(f"{host_or_ip}/api/v1/vpn/register")
+                res = requests.post(
+                    str(grid_url.with_path("/api/v1/vpn/register")), verify=verify_tls()
+                )
                 res_json = res.json()
 
             if "vpn_auth_key" not in res_json:
@@ -147,7 +161,7 @@ def run(
 
             status, error = connect_with_key(
                 tailscale_host="http://tailscale:4000",
-                headscale_host=f"{host_or_ip}/vpn",
+                headscale_host=str(grid_url.with_path("/vpn")),
                 vpn_auth_key=res_json["vpn_auth_key"],
             )
 
diff --git a/packages/syft/src/syft/core/node/network/client.py b/packages/syft/src/syft/core/node/network/client.py
index f479d46bdbf..1d89ad5a2d0 100644
--- a/packages/syft/src/syft/core/node/network/client.py
+++ b/packages/syft/src/syft/core/node/network/client.py
@@ -18,7 +18,6 @@
 from ...io.location import Location
 from ...io.location import SpecificLocation
 from ...io.route import Route
-from ..abstract.node import AbstractNodeClient
 from ..common.action.exception_action import ExceptionMessage
 from ..common.client import Client
 from ..common.client_manager.association_api import AssociationRequestAPI
@@ -147,29 +146,6 @@ def vm(self, new_vm: Location) -> Optional[Location]:
     def __repr__(self) -> str:
         return f"<{type(self).__name__}: {self.name}>"
 
-    def join_network(
-        self,
-        client: Optional[AbstractNodeClient] = None,
-        host_or_ip: Optional[str] = None,
-    ) -> None:
-        # this asks for a VPN key so it must be on a public interface hence the
-        # client or a public host_or_ip
-        try:
-            if client is None and host_or_ip is None:
-                raise ValueError(
-                    "join_network requires a Client object or host_or_ip string"
-                )
-            if client is not None:
-                # connection.host has http
-                connection_host = client.routes[0].connection.host  # type: ignore
-                host_or_ip = connection_host.split("://")[1]
-                # if we are connecting with localhost we need to change to docker-host
-                # so that the domain connects to the host and not the container
-                host_or_ip = str(host_or_ip).replace("localhost", "docker-host")
-            return self.vpn.join_network(host_or_ip=str(host_or_ip))
-        except Exception as e:
-            print(f"Failed to join network with {host_or_ip} {e}")
-
     def vpn_status(self) -> Dict[str, Any]:
         return self.vpn.get_status()
 
diff --git a/packages/syft/src/syft/core/tensor/smpc/mpc_tensor.py b/packages/syft/src/syft/core/tensor/smpc/mpc_tensor.py
index 2c6a8b9e55d..05c81881b5c 100644
--- a/packages/syft/src/syft/core/tensor/smpc/mpc_tensor.py
+++ b/packages/syft/src/syft/core/tensor/smpc/mpc_tensor.py
@@ -23,11 +23,11 @@
 from . import utils
 from .... import logger
 from ....ast.klass import get_run_class_method
+from ....grid import GridURL
 from ...smpc.protocol.spdz import spdz
 from ..passthrough import PassthroughTensor  # type: ignore
 from ..passthrough import SupportedChainType  # type: ignore
 from ..util import implements  # type: ignore
-from .party import Party
 from .share_tensor import ShareTensor
 
 METHODS_FORWARD_ALL_SHARES = {
@@ -55,7 +55,7 @@
     "resize",
 }
 
-PARTIES_REGISTER_CACHE: Dict[Any, Party] = {}
+PARTIES_REGISTER_CACHE: Dict[Any, GridURL] = {}
 
 
 class MPCTensor(PassthroughTensor):
@@ -153,11 +153,11 @@ def get_ring_size_from_secret(
         return 2 ** 32
 
     @staticmethod
-    def get_parties_info(parties: Iterable[Any]) -> List[Party]:
+    def get_parties_info(parties: Iterable[Any]) -> List[GridURL]:
         # relative
         from ....grid.client import GridHTTPConnection
 
-        parties_info: List[Party] = []
+        parties_info: List[GridURL] = []
         for party in parties:
             connection = party.routes[0].connection
             if not isinstance(connection, GridHTTPConnection):
@@ -167,20 +167,11 @@ def get_parties_info(parties: Iterable[Any]) -> List[Party]:
                     + "We apologize for the inconvenience"
                     + "We will add support for local python objects very soon."
                 )
-            party_info = PARTIES_REGISTER_CACHE.get(party, None)
+            base_url = PARTIES_REGISTER_CACHE.get(party, None)
 
-            if party_info is None:
+            if base_url is None:
                 base_url = connection.base_url
-                if base_url.count(":") == 2:
-                    url = base_url.rsplit(":", 1)[0]
-                    port = int(base_url.rsplit(":", 1)[1].split("/")[0])
-                elif base_url.count(":") == 1:
-                    url = base_url.rsplit("/", 2)[0]
-                    port = 80
-                else:
-                    raise ValueError(f"Invalid base url  {base_url}")
-                party_info = Party(url, port)
-                PARTIES_REGISTER_CACHE[party] = party_info
+                PARTIES_REGISTER_CACHE[party] = base_url
                 try:
                     pass
                     # We do not use sy.register, should reenable after fixing.
@@ -196,7 +187,12 @@ def get_parties_info(parties: Iterable[Any]) -> List[Party]:
                     """ """
                     # TODO : should modify to return same client if registered.
                     # print("Proxy Client already User Register", e)
-            parties_info.append(party_info)
+            if base_url is not None:
+                parties_info.append(base_url)
+            else:
+                raise Exception(
+                    f"Failed to get GridURL from {base_url} for party {party}."
+                )
 
         return parties_info
 
@@ -253,7 +249,7 @@ def _get_shares_from_secret(
         parties: List[Any],
         shape: Tuple[int, ...],
         seed_przs: int,
-        parties_info: List[Party],
+        parties_info: List[GridURL],
         ring_size: int,
     ) -> List[ShareTensor]:
         if utils.ispointer(secret):
@@ -282,7 +278,7 @@ def _get_shares_from_remote_secret(
         shape: Tuple[int, ...],
         parties: List[Any],
         seed_przs: int,
-        parties_info: List[Party],
+        parties_info: List[GridURL],
         ring_size: int,
     ) -> List[ShareTensor]:
         shares = []
@@ -333,7 +329,7 @@ def _get_shares_from_local_secret(
         secret: Any,
         shape: Tuple[int, ...],
         seed_przs: int,
-        parties_info: List[Party],
+        parties_info: List[GridURL],
         ring_size: int = 2 ** 32,
     ) -> List[ShareTensor]:
         shares = []
diff --git a/packages/syft/src/syft/core/tensor/smpc/party.py b/packages/syft/src/syft/core/tensor/smpc/party.py
deleted file mode 100644
index ea87bcc9c07..00000000000
--- a/packages/syft/src/syft/core/tensor/smpc/party.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# stdlib
-# stdlib
-from typing import Any
-
-# third party
-from google.protobuf.reflection import GeneratedProtocolMessageType
-
-# relative
-from ....proto.core.tensor.party_pb2 import Party as Party_PB
-from ...common.serde.serializable import serializable
-
-
-@serializable()
-class Party:
-    __slots__ = ("url", "port")
-    # _DOCKER_HOST: str = "http://docker-host"
-
-    def __init__(self, url: str, port: int) -> None:
-        # TODO: This is not used -- it is hardcoded to docker
-        # GM: Probably for real life scenario we would need to change this (when we serialize)
-        # for a more real life scenario
-        self.url = url
-
-        self.port = port
-
-    def _object2proto(self) -> Party_PB:
-        return Party_PB(url=self.url, port=self.port)
-
-    @staticmethod
-    def _proto2object(proto: Party_PB) -> "Party":
-        # TODO: If on the same machine use docker-host - if not real address
-        # How to distinguish? (if 127.0.0.1 and localhost we consider using docker-host?)
-        res = Party(url=proto.url, port=proto.port)
-        return res
-
-    @staticmethod
-    def get_protobuf_schema() -> GeneratedProtocolMessageType:
-        return Party_PB
-
-    def __hash__(self) -> int:
-        # TODO: Rasswanth, George, Trask this takes into consideration a hashing based on url and port
-        # that we login only once
-        # Is that sufficient?
-        # res_str = f"{self.url}:{self.port}"
-        return hash((self.url, self.port))
-
-    def __eq__(self, other: Any) -> bool:
-        if not isinstance(other, Party):
-            return False
-
-        return self.port == other.port and self.url == other.url
diff --git a/packages/syft/src/syft/core/tensor/smpc/share_tensor.py b/packages/syft/src/syft/core/tensor/smpc/share_tensor.py
index 08ad4959f1a..1068c89becd 100644
--- a/packages/syft/src/syft/core/tensor/smpc/share_tensor.py
+++ b/packages/syft/src/syft/core/tensor/smpc/share_tensor.py
@@ -25,13 +25,13 @@
 # relative
 from . import utils
 from .... import logger
+from ....grid import GridURL
 from ....proto.core.tensor.share_tensor_pb2 import ShareTensor as ShareTensor_PB
 from ...common.serde.deserialize import _deserialize as deserialize
 from ...common.serde.serializable import serializable
 from ...common.serde.serialize import _serialize as serialize
 from ...smpc.store.crypto_store import CryptoStore
 from ..passthrough import PassthroughTensor  # type: ignore
-from .party import Party
 
 METHODS_FORWARD_ALL_SHARES = {
     "repeat",
@@ -80,7 +80,7 @@
     },
 }
 
-CACHE_CLIENTS: Dict[Party, Any] = {}
+CACHE_CLIENTS: Dict[GridURL, Any] = {}
 
 
 def populate_store(*args: List[Any], **kwargs: Dict[Any, Any]) -> None:
@@ -107,7 +107,7 @@ class ShareTensor(PassthroughTensor):
     def __init__(
         self,
         rank: int,
-        parties_info: List[Party],
+        parties_info: List[GridURL],
         ring_size: int,
         seed_przs: int = 42,
         clients: Optional[List[Any]] = None,
@@ -135,28 +135,25 @@ def __init__(
         super().__init__(value)
 
     @staticmethod
-    def login_clients(parties_info: List[Party]) -> Any:
+    def login_clients(parties_info: List[GridURL]) -> Any:
         clients = []
         for party_info in parties_info:
-            party_info.url = party_info.url.replace("localhost", "docker-host")
-            client = CACHE_CLIENTS.get(party_info, None)
+            # if its localhost make it docker-host otherwise no change
+            external_host_info = party_info.as_docker_host()
+            client = CACHE_CLIENTS.get(external_host_info, None)
             if client is None:
                 # default cache to true, here to prevent multiple logins
                 # due to gevent monkey patching, context switch is done during
                 # during socket connection initialization.
-                CACHE_CLIENTS[party_info] = True
+                CACHE_CLIENTS[external_host_info] = True
                 # TODO: refactor to use a guest account
                 client = sy.login(  # nosec
-                    url=party_info.url,
+                    url=str(external_host_info),
                     email="info@openmined.org",
                     password="changethis",
-                    port=party_info.port,
+                    port=external_host_info.port,
                     verbose=False,
                 )
-                base_url = client.routes[0].connection.base_url
-                client.routes[0].connection.base_url = base_url.replace(  # type: ignore
-                    "localhost", "docker-host"
-                )
                 CACHE_CLIENTS[party_info] = client
             clients.append(client)
         return clients
@@ -262,7 +259,7 @@ def generate_przs(
         value: Any,
         shape: Tuple[int, ...],
         rank: int,
-        parties_info: List[Party],
+        parties_info: List[GridURL],
         ring_size: int = 2 ** 32,
         seed_przs: Optional[int] = None,
         generator_przs: Optional[Any] = None,
@@ -348,7 +345,7 @@ def generate_przs_on_dp_tensor(
         value: Optional[Any],
         shape: Tuple[int],
         rank: int,
-        parties_info: List[Party],
+        parties_info: List[GridURL],
         seed_przs: int,
         share_wrapper: Any,
         ring_size: int = 2 ** 32,
diff --git a/packages/syft/src/syft/grid/__init__.py b/packages/syft/src/syft/grid/__init__.py
index e69de29bb2d..55b4ee2ef54 100644
--- a/packages/syft/src/syft/grid/__init__.py
+++ b/packages/syft/src/syft/grid/__init__.py
@@ -0,0 +1,2 @@
+# relative
+from .grid_url import GridURL  # noqa: F401
diff --git a/packages/syft/src/syft/grid/client/client.py b/packages/syft/src/syft/grid/client/client.py
index 2c4d0739213..2c88b545049 100644
--- a/packages/syft/src/syft/grid/client/client.py
+++ b/packages/syft/src/syft/grid/client/client.py
@@ -15,11 +15,13 @@
 import requests
 
 # relative
+from .. import GridURL
 from ...core.io.connection import ClientConnection
 from ...core.io.route import SoloRoute
 from ...core.node.common.client import Client
 from ...core.node.domain.client import DomainClient
 from ...core.node.network.client import NetworkClient
+from ...util import verify_tls
 from .grid_connection import GridHTTPConnection
 
 DEFAULT_PYGRID_PORT = 80
@@ -27,20 +29,20 @@
 
 
 def connect(
-    url: str = DEFAULT_PYGRID_ADDRESS,
+    url: Union[str, GridURL] = DEFAULT_PYGRID_ADDRESS,
     conn_type: Type[ClientConnection] = GridHTTPConnection,
     credentials: Dict = {},
     user_key: Optional[SigningKey] = None,
 ) -> Client:
     # Use Server metadata
     # to build client route
-    conn = conn_type(url=url)  # type: ignore
+    conn = conn_type(url=GridURL.from_url(url))  # type: ignore
+    metadata = conn._get_metadata()  # type: ignore
 
     if credentials:
         metadata, _user_key = conn.login(credentials=credentials)  # type: ignore
         _user_key = SigningKey(_user_key.encode(), encoder=HexEncoder)
     else:
-        metadata = conn._get_metadata()  # type: ignore
         if not user_key:
             _user_key = SigningKey.generate()
         else:
@@ -78,7 +80,7 @@ def connect(
 
 
 def login(
-    url: Optional[str] = None,
+    url: Optional[Union[str, GridURL]] = None,
     port: Optional[int] = None,
     email: Optional[str] = None,
     password: Optional[str] = None,
@@ -108,20 +110,22 @@ def login(
         port = int(input("Please specify the port of the domain you're logging into:"))
 
     # TODO: build multiple route objects and let the Client decide which one to use
-    if url is None:
+    if isinstance(url, GridURL):
+        grid_url = url
+    elif url is None:
+        grid_url = GridURL(host_or_ip="docker-host", port=port, path="/api/v1/status")
         try:
-            url = "http://docker-host:" + str(port)
-            requests.get(url)
+            requests.get(str(grid_url), verify=verify_tls())
         except Exception:
-            url = "http://localhost:" + str(port)
-    elif port != 80:
-        url = url + ":" + str(port)
+            grid_url.host_or_ip = "localhost"
+    else:
+        grid_url = GridURL(host_or_ip=url, port=port)
+
+    grid_url = grid_url.with_path("/api/v1")
 
     if verbose:
         sys.stdout.write("Connecting to " + str(url) + "...")
 
-    url += "/api/v1"
-
     if email is None or password is None:
         credentials = {}
         logging.info(
@@ -131,7 +135,7 @@ def login(
         credentials = {"email": email, "password": password}
 
     # connecting to domain
-    node = connect(url=url, credentials=credentials, conn_type=conn_type)
+    node = connect(url=grid_url, credentials=credentials, conn_type=conn_type)
 
     if verbose:
         # bit of fanciness
diff --git a/packages/syft/src/syft/grid/client/grid_connection.py b/packages/syft/src/syft/grid/client/grid_connection.py
index 94fff27289a..8aa90fa3e81 100644
--- a/packages/syft/src/syft/grid/client/grid_connection.py
+++ b/packages/syft/src/syft/grid/client/grid_connection.py
@@ -4,6 +4,7 @@
 from typing import Any
 from typing import Dict
 from typing import Tuple
+from typing import Union
 
 # third party
 from google.protobuf.reflection import GeneratedProtocolMessageType
@@ -13,6 +14,7 @@
 from requests_toolbelt.multipart.encoder import MultipartEncoder
 
 # relative
+from .. import GridURL
 from ...core.common.message import ImmediateSyftMessageWithoutReply
 from ...core.common.message import SignedImmediateSyftMessageWithoutReply
 from ...core.common.message import SyftMessage
@@ -20,10 +22,12 @@
 from ...core.common.serde.serialize import _serialize
 from ...core.node.domain.enums import RequestAPIFields
 from ...core.node.domain.exceptions import RequestAPIException
+from ...logger import debug
 from ...proto.core.node.common.metadata_pb2 import Metadata as Metadata_PB
 from ...proto.grid.connections.http_connection_pb2 import (
     GridHTTPConnection as GridHTTPConnection_PB,
 )
+from ...util import verify_tls
 from ..connections.http_connection import HTTPConnection
 
 
@@ -36,8 +40,10 @@ class GridHTTPConnection(HTTPConnection):
     # SYFT_MULTIPART_ROUTE = "/pysyft_multipart"
     SIZE_THRESHOLD = 20971520  # 20 MB
 
-    def __init__(self, url: str) -> None:
-        self.base_url = url
+    def __init__(self, url: Union[GridURL, str]) -> None:
+        self.base_url = GridURL.from_url(url) if isinstance(url, str) else url
+        if self.base_url is None:
+            raise Exception(f"Invalid GridURL. {self.base_url}")
         self.session_token: str = ""
         self.token_type: str = "'"
 
@@ -81,9 +87,10 @@ def _send_msg(self, msg: SyftMessage) -> requests.Response:
         # if sys.getsizeof(msg_bytes) < GridHTTPConnection.SIZE_THRESHOLD:
         # if True:
         r = requests.post(
-            url=self.base_url + route,
+            url=str(self.base_url) + route,
             data=msg_bytes,
             headers=header,
+            verify=verify_tls(),
         )
         # else:
         #     r = self.send_streamed_messages(blob_message=msg_bytes)
@@ -94,8 +101,9 @@ def _send_msg(self, msg: SyftMessage) -> requests.Response:
 
     def login(self, credentials: Dict) -> Tuple:
         response = requests.post(
-            url=self.base_url + GridHTTPConnection.LOGIN_ROUTE,
+            url=str(self.base_url) + GridHTTPConnection.LOGIN_ROUTE,
             json=credentials,
+            verify=verify_tls(),
         )
 
         # Response
@@ -128,7 +136,20 @@ def _get_metadata(self) -> Tuple:
         session.mount("http://", adapter)
         session.mount("https://", adapter)
 
-        response = session.get(self.base_url + "/syft/metadata")
+        metadata_url = str(self.base_url) + "/syft/metadata"
+        response = session.get(metadata_url, verify=verify_tls())
+
+        # upgrade to tls if available
+        try:
+            if response.url.startswith("https://") and self.base_url.protocol == "http":
+                # we got redirected to https
+                self.base_url = GridURL.from_url(
+                    response.url.replace("/syft/metadata", "")
+                )
+                debug(f"GridURL Upgraded to HTTPS. {self.base_url}")
+        except Exception as e:
+            print(f"Failed to upgrade to HTTPS. {e}")
+
         metadata_pb = Metadata_PB()
         metadata_pb.ParseFromString(response.content)
 
@@ -136,7 +157,9 @@ def _get_metadata(self) -> Tuple:
 
     def setup(self, **content: Dict[str, Any]) -> Any:
         response = json.loads(
-            requests.post(self.base_url + "/setup", json=content).text
+            requests.post(
+                str(self.base_url) + "/setup", json=content, verify=verify_tls()
+            ).text
         )
         if response.get(RequestAPIFields.MESSAGE, None):
             return response
@@ -160,7 +183,9 @@ def reset(self) -> Any:
 
         response = json.loads(
             requests.delete(
-                self.base_url + GridHTTPConnection.SYFT_ROUTE, headers=header
+                str(self.base_url) + GridHTTPConnection.SYFT_ROUTE,
+                headers=header,
+                verify=verify_tls(),
             ).text
         )
         if response.get(RequestAPIFields.MESSAGE, None):
@@ -190,7 +215,9 @@ def send_files(
             "file": (file_path, open(file_path, "rb"), "application/octet-stream"),
         }
 
-        resp = requests.post(self.base_url + route, files=files, headers=header)
+        resp = requests.post(
+            str(self.base_url) + route, files=files, headers=header, verify=verify_tls()
+        )
 
         return json.loads(resp.content)
 
@@ -209,9 +236,10 @@ def send_streamed_messages(self, blob_message: bytes) -> requests.Response:
             }
 
             resp = session.post(
-                self.base_url + GridHTTPConnection.SYFT_ROUTE_STREAM,
+                str(self.base_url) + GridHTTPConnection.SYFT_ROUTE_STREAM,
                 headers=headers,
                 data=form,
+                verify=verify_tls(),
             )
 
         session.close()
@@ -219,18 +247,18 @@ def send_streamed_messages(self, blob_message: bytes) -> requests.Response:
 
     @property
     def host(self) -> str:
-        return self.base_url.replace("/api/v1", "")
+        return self.base_url.base_url
 
     @staticmethod
     def _proto2object(proto: GridHTTPConnection_PB) -> "GridHTTPConnection":
-        obj = GridHTTPConnection(url=proto.base_url)
+        obj = GridHTTPConnection(url=GridURL.from_url(proto.base_url))
         obj.session_token = proto.session_token
         obj.token_type = proto.token_type
         return obj
 
     def _object2proto(self) -> GridHTTPConnection_PB:
         return GridHTTPConnection_PB(
-            base_url=self.base_url,
+            base_url=str(self.base_url),
             session_token=self.session_token,
             token_type=self.token_type,
         )
diff --git a/packages/syft/src/syft/grid/connections/http_connection.py b/packages/syft/src/syft/grid/connections/http_connection.py
index 4db276d3ede..8a26d02d3a3 100644
--- a/packages/syft/src/syft/grid/connections/http_connection.py
+++ b/packages/syft/src/syft/grid/connections/http_connection.py
@@ -1,10 +1,12 @@
 # stdlib
 import json
+from typing import Union
 
 # third party
 import requests
 
 # relative
+from .. import GridURL
 from ...core.common.message import SignedEventualSyftMessageWithoutReply
 from ...core.common.message import SignedImmediateSyftMessageWithReply
 from ...core.common.message import SignedImmediateSyftMessageWithoutReply
@@ -18,8 +20,10 @@
 
 
 class HTTPConnection(ClientConnection):
-    def __init__(self, url: str) -> None:
-        self.base_url = url
+    def __init__(self, url: Union[str, GridURL]) -> None:
+        self.base_url = GridURL.from_url(url) if isinstance(url, str) else url
+        if self.base_url is None:
+            raise Exception(f"Invalid GridURL. {self.base_url}")
 
     def send_immediate_msg_with_reply(
         self, msg: SignedImmediateSyftMessageWithReply
@@ -91,7 +95,7 @@ def _send_msg(self, msg: SyftMessage) -> requests.Response:
         # Perform HTTP request using base_url as a root address
         data_bytes: bytes = _serialize(msg, to_bytes=True)  # type: ignore
         r = requests.post(
-            url=self.base_url,
+            url=str(self.base_url),
             data=data_bytes,
             headers={"Content-Type": "application/octet-stream"},
         )
@@ -107,7 +111,7 @@ def _get_metadata(self) -> Metadata_PB:
         :return: returns node metadata
         :rtype: str of bytes
         """
-        data: bytes = requests.get(self.base_url + "/metadata").content
+        data: bytes = requests.get(str(self.base_url) + "/metadata").content
         metadata_pb = Metadata_PB()
         metadata_pb.ParseFromString(data)
         return metadata_pb
diff --git a/packages/syft/src/syft/grid/grid_url.py b/packages/syft/src/syft/grid/grid_url.py
new file mode 100644
index 00000000000..63d1bbd6c15
--- /dev/null
+++ b/packages/syft/src/syft/grid/grid_url.py
@@ -0,0 +1,107 @@
+# future
+from __future__ import annotations
+
+# stdlib
+import copy
+from typing import Optional
+from typing import Union
+from urllib.parse import urlparse
+
+# third party
+import requests
+
+# relative
+from ..core.common.serde.serializable import serializable
+from ..util import verify_tls
+
+
+@serializable(recursive_serde=True)
+class GridURL:
+    __attr_allowlist__ = ["protocol", "host_or_ip", "port", "path"]
+
+    @staticmethod
+    def from_url(url: Union[str, GridURL]) -> GridURL:
+        if isinstance(url, GridURL):
+            return url
+        try:
+            # urlparse doesnt handle no protocol properly
+            if "://" not in url:
+                url = "http://" + url
+            parts = urlparse(url)
+            host_or_ip_parts = parts.netloc.split(":")
+            # netloc is host:port
+            port = 80
+            if len(host_or_ip_parts) > 1:
+                port = int(host_or_ip_parts[1])
+            host_or_ip = host_or_ip_parts[0]
+            return GridURL(
+                host_or_ip=host_or_ip, path=parts.path, port=port, protocol=parts.scheme
+            )
+        except Exception as e:
+            print(f"Failed to convert url: {url} to GridURL. {e}")
+            raise e
+
+    def __init__(
+        self,
+        protocol: str = "http",
+        host_or_ip: str = "localhost",
+        port: Optional[int] = 80,
+        path: str = "",
+    ) -> None:
+        # in case a preferred port is listed but its not clear if an alternative
+        # port was included in the supplied host_or_ip:port combo passed in earlier
+        if ":" in host_or_ip:
+            sub_grid_url: GridURL = GridURL.from_url(host_or_ip)
+            host_or_ip = str(sub_grid_url.host_or_ip)  # type: ignore
+            port = int(sub_grid_url.port)  # type: ignore
+            protocol = str(sub_grid_url.protocol)  # type: ignore
+            path = str(sub_grid_url.path)  # type: ignore
+        elif port is None:
+            port = 80
+
+        self.host_or_ip = host_or_ip
+        self.path = path
+        self.port = port
+        self.protocol = protocol
+
+    def with_path(self, path: str) -> GridURL:
+        dupe = copy.copy(self)
+        dupe.path = path
+        return dupe
+
+    def as_docker_host(self) -> GridURL:
+        if self.host_or_ip != "localhost":
+            return self
+        return GridURL(
+            protocol=self.protocol,
+            host_or_ip="docker-host",
+            port=self.port,
+            path=self.path,
+        )
+
+    @property
+    def url(self) -> str:
+        return f"{self.base_url}{self.path}"
+
+    @property
+    def base_url(self) -> str:
+        return f"{self.protocol}://{self.host_or_ip}:{self.port}"
+
+    def to_tls(self) -> GridURL:
+        if self.protocol == "https":
+            return self
+
+        # TODO: only ignore ssl in dev mode
+        r = requests.get(
+            self.base_url, verify=verify_tls()
+        )  # ignore ssl cert if its fake
+        new_base_url = r.url
+        if new_base_url.endswith("/"):
+            new_base_url = new_base_url[0:-1]
+        return GridURL.from_url(url=f"{new_base_url}{self.path}")
+
+    def __repr__(self) -> str:
+        return f"<{type(self).__name__} {self.url}>"
+
+    def __str__(self) -> str:
+        return self.url
diff --git a/packages/syft/src/syft/proto/core/tensor/party_pb2.py b/packages/syft/src/syft/proto/core/tensor/party_pb2.py
deleted file mode 100644
index 7e5ea2e9aae..00000000000
--- a/packages/syft/src/syft/proto/core/tensor/party_pb2.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: proto/core/tensor/party.proto
-"""Generated protocol buffer code."""
-# third party
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(
-    b'\n\x1dproto/core/tensor/party.proto\x12\x10syft.core.tensor""\n\x05Party\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\rb\x06proto3'
-)
-
-
-_PARTY = DESCRIPTOR.message_types_by_name["Party"]
-Party = _reflection.GeneratedProtocolMessageType(
-    "Party",
-    (_message.Message,),
-    {
-        "DESCRIPTOR": _PARTY,
-        "__module__": "proto.core.tensor.party_pb2"
-        # @@protoc_insertion_point(class_scope:syft.core.tensor.Party)
-    },
-)
-_sym_db.RegisterMessage(Party)
-
-if _descriptor._USE_C_DESCRIPTORS == False:
-
-    DESCRIPTOR._options = None
-    _PARTY._serialized_start = 51
-    _PARTY._serialized_end = 85
-# @@protoc_insertion_point(module_scope)
diff --git a/packages/syft/src/syft/proto/core/tensor/share_tensor_pb2.py b/packages/syft/src/syft/proto/core/tensor/share_tensor_pb2.py
index 4d596faa3b8..8f4ff27dcc8 100644
--- a/packages/syft/src/syft/proto/core/tensor/share_tensor_pb2.py
+++ b/packages/syft/src/syft/proto/core/tensor/share_tensor_pb2.py
@@ -18,11 +18,10 @@
 from syft.proto.core.common import (
     recursive_serde_pb2 as proto_dot_core_dot_common_dot_recursive__serde__pb2,
 )
-from syft.proto.core.tensor import party_pb2 as proto_dot_core_dot_tensor_dot_party__pb2
 from syft.proto.lib.numpy import array_pb2 as proto_dot_lib_dot_numpy_dot_array__pb2
 
 DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(
-    b"\n$proto/core/tensor/share_tensor.proto\x12\x10syft.core.tensor\x1a\x1bproto/lib/numpy/array.proto\x1a'proto/core/common/recursive_serde.proto\x1a\x1dproto/core/tensor/party.proto\"\xd9\x01\n\x0bShareTensor\x12\x32\n\x06tensor\x18\x01 \x01(\x0b\x32 .syft.core.common.RecursiveSerdeH\x00\x12+\n\x05\x61rray\x18\x02 \x01(\x0b\x32\x1a.syft.lib.numpy.NumpyProtoH\x00\x12\x0c\n\x04rank\x18\x03 \x01(\r\x12\x11\n\tseed_przs\x18\x04 \x01(\r\x12\x11\n\tring_size\x18\x05 \x01(\x0c\x12-\n\x0cparties_info\x18\x06 \x03(\x0b\x32\x17.syft.core.tensor.PartyB\x06\n\x04\x64\x61tab\x06proto3"
+    b"\n$proto/core/tensor/share_tensor.proto\x12\x10syft.core.tensor\x1a\x1bproto/lib/numpy/array.proto\x1a'proto/core/common/recursive_serde.proto\"\xe2\x01\n\x0bShareTensor\x12\x32\n\x06tensor\x18\x01 \x01(\x0b\x32 .syft.core.common.RecursiveSerdeH\x00\x12+\n\x05\x61rray\x18\x02 \x01(\x0b\x32\x1a.syft.lib.numpy.NumpyProtoH\x00\x12\x0c\n\x04rank\x18\x03 \x01(\r\x12\x11\n\tseed_przs\x18\x04 \x01(\r\x12\x11\n\tring_size\x18\x05 \x01(\x0c\x12\x36\n\x0cparties_info\x18\x06 \x03(\x0b\x32 .syft.core.common.RecursiveSerdeB\x06\n\x04\x64\x61tab\x06proto3"
 )
 
 
@@ -41,6 +40,6 @@
 if _descriptor._USE_C_DESCRIPTORS == False:
 
     DESCRIPTOR._options = None
-    _SHARETENSOR._serialized_start = 160
-    _SHARETENSOR._serialized_end = 377
+    _SHARETENSOR._serialized_start = 129
+    _SHARETENSOR._serialized_end = 355
 # @@protoc_insertion_point(module_scope)
diff --git a/packages/syft/src/syft/registry.py b/packages/syft/src/syft/registry.py
index a4a1ef3732a..df12e62adfb 100644
--- a/packages/syft/src/syft/registry.py
+++ b/packages/syft/src/syft/registry.py
@@ -13,6 +13,7 @@
 # relative
 from . import login
 from .core.node.common.client import Client
+from .grid import GridURL
 from .logger import error
 from .logger import warning
 
@@ -39,10 +40,11 @@ def _repr_html_(self) -> str:
 
     def create_client(self, network: Dict[str, Any]) -> Client:
         try:
-            host_or_ip = network["host_or_ip"]
             port = int(network["port"])
             protocol = network["protocol"]
-            return login(url=f"{protocol}://{host_or_ip}", port=port)
+            host_or_ip = network["host_or_ip"]
+            grid_url = GridURL(port=port, protocol=protocol, host_or_ip=host_or_ip)
+            return login(url=str(grid_url), port=port)
         except Exception as e:
             error(f"Failed to login with: {network}. {e}")
             raise e
diff --git a/packages/syft/src/syft/util.py b/packages/syft/src/syft/util.py
index e5c0b5da40e..90dbab0b031 100644
--- a/packages/syft/src/syft/util.py
+++ b/packages/syft/src/syft/util.py
@@ -241,6 +241,7 @@ def char_emoji(hex_chars: str) -> str:
     "distracted",
     "dreamy",
     "eager",
+    "eagleman",
     "ecstatic",
     "elastic",
     "elated",
@@ -425,3 +426,19 @@ def get_root_data_path() -> Path:
 
     os.makedirs(data_dir, exist_ok=True)
     return data_dir
+
+
+def str_to_bool(bool_str: Optional[str]) -> bool:
+    result = False
+    bool_str = str(bool_str).lower()
+    if bool_str == "true" or bool_str == "1":
+        result = True
+    return result
+
+
+def verify_tls() -> bool:
+    return not str_to_bool(str(os.environ.get("IGNORE_TLS_ERRORS", "0")))
+
+
+def ssl_test() -> bool:
+    return len(os.environ.get("REQUESTS_CA_BUNDLE", "")) > 0
diff --git a/tests/integration/network/connect_nodes_test.py b/tests/integration/network/connect_nodes_test.py
index 3c3edf502c0..fec3c40cd20 100644
--- a/tests/integration/network/connect_nodes_test.py
+++ b/tests/integration/network/connect_nodes_test.py
@@ -1,9 +1,6 @@
 # future
 from __future__ import annotations
 
-# stdlib
-from urllib.parse import urlparse
-
 # third party
 import pytest
 import requests
@@ -22,64 +19,6 @@
 TEST_ROOT_PASS = "changethis"
 
 
-class GridURL:
-    @staticmethod
-    def from_url(url: str) -> GridURL:
-        try:
-            # urlparse doesnt handle no protocol properly
-            if "://" not in url:
-                url = "http://" + url
-            parts = urlparse(url)
-            host_or_ip_parts = parts.netloc.split(":")
-            # netloc is host:port
-            port = 80
-            if len(host_or_ip_parts) > 1:
-                port = int(host_or_ip_parts[1])
-            host_or_ip = host_or_ip_parts[0]
-            return GridURL(
-                host_or_ip=host_or_ip, path=parts.path, port=port, protocol=parts.scheme
-            )
-        except Exception as e:
-            print(f"Failed to convert url: {url} to GridURL. {e}")
-
-    def __init__(
-        self,
-        protocol: str = "http",
-        host_or_ip: str = "localhost",
-        port: int = 80,
-        path: str = "",
-    ) -> None:
-        self.host_or_ip = host_or_ip
-        self.path = path
-        self.port = port
-        self.protocol = protocol
-
-    @property
-    def url(self) -> str:
-        return f"{self.base_url}{self.path}"
-
-    @property
-    def base_url(self) -> str:
-        return f"{self.protocol}://{self.host_or_ip}:{self.port}"
-
-    def to_tls(self) -> GridURL:
-        if self.protocol == "https":
-            return self
-
-        # TODO: only ignore ssl in dev mode
-        r = requests.get(self.base_url, verify=False)  # ignore ssl cert if its fake
-        new_base_url = r.url
-        if new_base_url.endswith("/"):
-            new_base_url = new_base_url[0:-1]
-        return GridURL.from_url(url=f"{new_base_url}{self.path}")
-
-    def __repr__(self) -> str:
-        return f"<{type(self).__name__} {self.url}>"
-
-    def __str__(self) -> str:
-        return self.url
-
-
 def join_to_network_python(
     email: str, password: str, port: int, network_host: str
 ) -> None:
@@ -95,8 +34,9 @@ def join_to_network_python(
 def join_to_network_rest(
     email: str, password: str, port: int, network_host: str
 ) -> None:
-    grid_url = GridURL(port=port, path="/api/v1/login")
-    grid_url = grid_url.to_tls()
+    grid_url = sy.grid.GridURL(port=port, path="/api/v1/login")
+    if sy.util.ssl_test():
+        grid_url = grid_url.to_tls()
     auth_response = requests.post(
         grid_url.url, json={"email": email, "password": password}
     )
@@ -121,6 +61,8 @@ def run_network_tests(port: int, hostname: str, vpn_ip: str) -> None:
 
     assert response["status"] == "ok"
     host = response["host"]
+    if "ip" not in host:
+        print(response)
     assert host["ip"] == vpn_ip
     assert host["hostname"] == hostname
     assert host["os"] == "linux"
@@ -131,6 +73,8 @@ def run_network_tests(port: int, hostname: str, vpn_ip: str) -> None:
         port=port,
         network_host=NETWORK_PUBLIC_HOST,
     )
+    if "status" not in response or response["status"] != "ok":
+        print(response)
     assert response["status"] == "ok"
 
 
diff --git a/tests/integration/security/check_vpn_firewall_test.py b/tests/integration/security/check_vpn_firewall_test.py
index 7a26df8efe9..82d2797ddcb 100644
--- a/tests/integration/security/check_vpn_firewall_test.py
+++ b/tests/integration/security/check_vpn_firewall_test.py
@@ -44,6 +44,13 @@ def test_vpn_scan() -> None:
 
     allowed_ports = [80]
     blocked_ports = [21, 4000, 8001, 8011, 8080, 5050, 5432, 5555, 5672, 15672]
+    # when SSL is enabled we route 80 to 81 externally so that we can redirect to HTTPS
+    # however we want to leave normal port 80 available over the VPN internally
+    blocked_ports.append(81)  # this shouldnt be available over the VPN
+    # SSL shouldnt be available over the VPN since IPs cant be used in certs
+    # in this case we might be bound to any number of ports during dev mode from 443+
+    for i in range(443, 451):
+        blocked_ports.append(i)
 
     # run in two containers so that all IPs are scanned externally
     for container in containers:
diff --git a/tox.ini b/tox.ini
index 567e3526945..9264cbf7442 100644
--- a/tox.ini
+++ b/tox.ini
@@ -6,6 +6,7 @@ envlist =
     syft.test.fast
     syft.test.security
     stack.test.integration
+    stack.test.integration.tls
     stack.test.integration.windows
     stack.test.integration.k8s
     stack.test.integration.smpc
@@ -96,6 +97,9 @@ allowlist_externals =
     grep
     sleep
     bash
+setenv =
+    HAGRID_ART = false
+    PYTHONIOENCODING = utf-8
 commands =
     pip install -e packages/hagrid
     docker --version
@@ -107,9 +111,9 @@ commands =
     bash -c "docker volume rm test_domain_2_tailscale-data --force || true"
     bash -c "docker volume rm test_network_1_tailscale-data --force || true"
     bash -c "docker volume rm test_network_1_headscale-data --force || true"
-    bash -c 'HAGRID_ART=false hagrid launch test_network_1 network to docker:9081 --tail=false --tls'
-    bash -c 'HAGRID_ART=false hagrid launch test_domain_1 domain to docker:9082 --tail=false --tls'
-    bash -c 'HAGRID_ART=false hagrid launch test_domain_2 domain to docker:9083 --tail=false --headless=true --tls'
+    bash -c 'HAGRID_ART=false hagrid launch test_network_1 network to docker:9081 --tail=false --headless=true'
+    bash -c 'HAGRID_ART=false hagrid launch test_domain_1 domain to docker:9082 --build=false --tail=false --headless=true'
+    bash -c 'HAGRID_ART=false hagrid launch test_domain_2 domain to docker:9083 --build=false --tail=false --headless=true'
     docker ps
     bash -c '(docker logs test_domain_1-frontend-1 -f &) | grep -q "event - compiled successfully" || true'
     bash -c '(docker logs test_network_1-frontend-1 -f &) | grep -q "event - compiled successfully" || true'
@@ -119,31 +123,94 @@ commands =
 
     sleep 5
 
-    # enable custom CA certificate for testing
-    export CAROOT=$(pwd)/packages/grid/tls
-    export REQUESTS_CA_BUNDLE=$CAROOT/rootCA.pem
-
     pytest tests/integration -m frontend -p no:randomly --co
     pytest tests/integration -m frontend -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no
 
     bash -c 'docker stop test_network_1-frontend-1 || true'
     bash -c 'docker stop test_domain_1-frontend-1 || true'
 
-    ; pytest tests/integration -m network -p no:randomly --co
-    ; pytest tests/integration -m network -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no
+    pytest tests/integration -m network -p no:randomly --co
+    pytest tests/integration -m network -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no
 
-    ; pytest tests/integration -m general -p no:randomly --co
-    ; pytest tests/integration -m general -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no
+    pytest tests/integration -m general -p no:randomly --co
+    pytest tests/integration -m general -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no
+
+    pytest tests/integration -m e2e -p no:randomly --co
+    pytest tests/integration -m e2e -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no
 
-    ; pytest tests/integration -m e2e -p no:randomly --co
-    ; pytest tests/integration -m e2e -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no
+    pytest tests/integration -m security -p no:randomly --co
+    pytest tests/integration -m security -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no
 
-    ; pytest tests/integration -m security -p no:randomly --co
-    ; pytest tests/integration -m security -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no
+    bash -c 'HAGRID_ART=false hagrid land test_network_1'
+    bash -c 'HAGRID_ART=false hagrid land test_domain_1'
+    bash -c 'HAGRID_ART=false hagrid land test_domain_2'
+
+
+[testenv:stack.test.integration.tls]
+description = Integration Tests for Core Stack with TLS
+deps =
+    {[testenv:syft]deps}
+changedir = {toxinidir}
+allowlist_externals =
+    docker
+    grep
+    sleep
+    bash
+    mkcert
+    mkdir
+setenv =
+    HAGRID_ART = false
+    PYTHONIOENCODING = utf-8
+    IGNORE_TLS_ERRORS = True
+    CAROOT = {toxinidir}/packages/grid/tls
+    CERTS = {toxinidir}/packages/grid/traefik/certs
+commands =
+    mkdir -p ./packages/grid/tls
+    mkcert -cert-file={env:CERTS}/cert.pem -key-file={env:CERTS}/key.pem docker-host localhost 127.0.0.1 ::1
+    ; # mkcert -install # use this if you want to test in your own browser
+    pip install -e packages/hagrid
+    docker --version
+    docker compose version
+    bash -c "docker volume rm test_domain_1_app-db-data --force || true"
+    bash -c "docker volume rm test_domain_2_app-db-data --force || true"
+    bash -c "docker volume rm test_network_1_app-db-data --force || true"
+    bash -c "docker volume rm test_domain_1_tailscale-data --force || true"
+    bash -c "docker volume rm test_domain_2_tailscale-data --force || true"
+    bash -c "docker volume rm test_network_1_tailscale-data --force || true"
+    bash -c "docker volume rm test_network_1_headscale-data --force || true"
+    bash -c "HAGRID_ART=false hagrid launch test_network_1 network to docker:9081 --tail=false --tls --test"
+    bash -c "HAGRID_ART=false hagrid launch test_domain_1 domain to docker:9082 --build=false --tail=false --tls --test"
+    bash -c "HAGRID_ART=false hagrid launch test_domain_2 domain to docker:9083 --build=false --tail=false --headless=true --tls --test"
+    docker ps
+    bash -c "(docker logs test_domain_1-frontend-1 -f &) | grep -q 'event - compiled successfully' || true"
+    bash -c "(docker logs test_network_1-frontend-1 -f &) | grep -q 'event - compiled successfully' || true"
+    bash -c "(docker logs test_domain_1-backend_stream-1 -f &) | grep -q 'Application startup complete' || true"
+    bash -c "(docker logs test_domain_2-backend_stream-1 -f &) | grep -q 'Application startup complete' || true"
+    bash -c "(docker logs test_network_1-backend_stream-1 -f &) | grep -q 'Application startup complete' || true"
+
+    sleep 5
+
+    pytest tests/integration -m frontend -p no:randomly --co
+    bash -c "REQUESTS_CA_BUNDLE={env:CAROOT}/rootCA.pem pytest tests/integration -m frontend -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no"
+
+    bash -c "docker stop test_network_1-frontend-1 || true"
+    bash -c "docker stop test_domain_1-frontend-1 || true"
+
+    pytest tests/integration -m network -p no:randomly --co
+    bash -c "REQUESTS_CA_BUNDLE={env:CAROOT}/rootCA.pem pytest tests/integration -m network -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no"
+
+    pytest tests/integration -m general -p no:randomly --co
+    bash -c "REQUESTS_CA_BUNDLE={env:CAROOT}/rootCA.pem pytest tests/integration -m general -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no"
+
+    pytest tests/integration -m e2e -p no:randomly --co
+    bash -c "REQUESTS_CA_BUNDLE={env:CAROOT}/rootCA.pem pytest tests/integration -m e2e -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no"
+
+    pytest tests/integration -m security -p no:randomly --co
+    bash -c "REQUESTS_CA_BUNDLE={env:CAROOT}/rootCA.pem pytest tests/integration -m security -vvvv -p no:randomly -p no:benchmark -o log_cli=True --capture=no"
 
-    ; bash -c 'HAGRID_ART=false hagrid land test_network_1'
-    ; bash -c 'HAGRID_ART=false hagrid land test_domain_1'
-    ; bash -c 'HAGRID_ART=false hagrid land test_domain_2'
+    bash -c "HAGRID_ART=false hagrid land test_network_1"
+    bash -c "HAGRID_ART=false hagrid land test_domain_1"
+    bash -c "HAGRID_ART=false hagrid land test_domain_2"
 
 [testenv:stack.test.integration.windows]
 description = Integration Tests for Core Stack
@@ -213,8 +280,8 @@ commands =
     bash -c "docker volume rm test_domain_2_tailscale-data --force || true"
     bash -c "docker volume rm test_domain_3_tailscale-data --force || true"
     bash -c 'HAGRID_ART=false hagrid launch test_domain_1 domain to docker:9082 --tail=false --headless=true'
-    bash -c 'HAGRID_ART=false hagrid launch test_domain_2 domain to docker:9083 --tail=false --headless=true'
-    bash -c 'HAGRID_ART=false hagrid launch test_domain_3 domain to docker:9084 --tail=false --headless=true'
+    bash -c 'HAGRID_ART=false hagrid launch test_domain_2 domain to docker:9083 --build=false --tail=false --headless=true'
+    bash -c 'HAGRID_ART=false hagrid launch test_domain_3 domain to docker:9084 --build=false --tail=false --headless=true'
 
     docker ps
     bash -c '(docker logs test_domain_1-backend_stream-1 -f &) | grep -q "Application startup complete" || true'

From 31c923120cc7560c151053e8a4ece4cbc0da5bdb Mon Sep 17 00:00:00 2001
From: Madhava Jay 
Date: Fri, 26 Nov 2021 16:40:45 +1000
Subject: [PATCH 13/26] fixing broken test issues

---
 .github/workflows/stack-integration_tests.yml | 3 ++-
 packages/hagrid/hagrid/cli.py                 | 4 ++--
 tox.ini                                       | 6 +++---
 3 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/.github/workflows/stack-integration_tests.yml b/.github/workflows/stack-integration_tests.yml
index b12fc519651..1beb7c17f4a 100644
--- a/.github/workflows/stack-integration_tests.yml
+++ b/.github/workflows/stack-integration_tests.yml
@@ -139,6 +139,7 @@ jobs:
           DOCKER_COMPOSE_VERSION=v2.1.1
           curl -sSL https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-linux-x86_64 -o /usr/local/bin/mkcert
           chmod +x /usr/local/bin/mkcert
+          which mkcert
 
       - name: Install mkcert
         if: runner.os == 'Linux'
@@ -230,7 +231,7 @@ jobs:
           pip install -e packages/hagrid
           set HAGRID_ART=false
           hagrid launch test_network_1 network to docker:9081 --tail=false --headless=true
-          hagrid launch test_domain_1 domain to docker:9082 --tail=false --build=false --headless=true
+          hagrid launch test_domain_1 domain to docker:9082 --tail=false --headless=true
           hagrid launch test_domain_2 domain to docker:9083 --tail=false --build=false --headless=true
           bash -c "(docker logs test_domain_1-backend_stream-1 -f &) | grep -q 'Application startup complete' || true"
           bash -c "(docker logs test_domain_2-backend_stream-1 -f &) | grep -q 'Application startup complete' || true"
diff --git a/packages/hagrid/hagrid/cli.py b/packages/hagrid/hagrid/cli.py
index 1433dde1642..07ac0ab2c81 100644
--- a/packages/hagrid/hagrid/cli.py
+++ b/packages/hagrid/hagrid/cli.py
@@ -384,8 +384,8 @@ def create_launch_cmd(
             if "headless" in kwargs and str_to_bool(cast(str, kwargs["headless"])):
                 headless = True
             parsed_kwargs["headless"] = headless
-            parsed_kwargs["tls"] = kwargs["tls"]
-            parsed_kwargs["test"] = kwargs["test"]
+            parsed_kwargs["tls"] = bool(kwargs["tls"]) if "tls" in kwargs else False
+            parsed_kwargs["test"] = bool(kwargs["test"]) if "test" in kwargs else False
 
             # If the user is using docker desktop (OSX/Windows), check to make sure there's enough RAM.
             # If the user is using Linux this isn't an issue because Docker scales to the avaialble RAM,
diff --git a/tox.ini b/tox.ini
index 9264cbf7442..c432ade93e5 100644
--- a/tox.ini
+++ b/tox.ini
@@ -111,8 +111,8 @@ commands =
     bash -c "docker volume rm test_domain_2_tailscale-data --force || true"
     bash -c "docker volume rm test_network_1_tailscale-data --force || true"
     bash -c "docker volume rm test_network_1_headscale-data --force || true"
-    bash -c 'HAGRID_ART=false hagrid launch test_network_1 network to docker:9081 --tail=false --headless=true'
-    bash -c 'HAGRID_ART=false hagrid launch test_domain_1 domain to docker:9082 --build=false --tail=false --headless=true'
+    bash -c 'HAGRID_ART=false hagrid launch test_network_1 network to docker:9081 --tail=false'
+    bash -c 'HAGRID_ART=false hagrid launch test_domain_1 domain to docker:9082 --build=false --tail=false'
     bash -c 'HAGRID_ART=false hagrid launch test_domain_2 domain to docker:9083 --build=false --tail=false --headless=true'
     docker ps
     bash -c '(docker logs test_domain_1-frontend-1 -f &) | grep -q "event - compiled successfully" || true'
@@ -166,7 +166,7 @@ setenv =
     CERTS = {toxinidir}/packages/grid/traefik/certs
 commands =
     mkdir -p ./packages/grid/tls
-    mkcert -cert-file={env:CERTS}/cert.pem -key-file={env:CERTS}/key.pem docker-host localhost 127.0.0.1 ::1
+    bash -c "mkcert -cert-file={env:CERTS}/cert.pem -key-file={env:CERTS}/key.pem docker-host localhost 127.0.0.1 ::1"
     ; # mkcert -install # use this if you want to test in your own browser
     pip install -e packages/hagrid
     docker --version

From fa88bc4d642aec6438386fc576740166ea5c7bd6 Mon Sep 17 00:00:00 2001
From: Madhava Jay 
Date: Fri, 26 Nov 2021 16:46:30 +1000
Subject: [PATCH 14/26] fix mkcert and debug

---
 .github/workflows/stack-integration_tests.yml | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/.github/workflows/stack-integration_tests.yml b/.github/workflows/stack-integration_tests.yml
index 1beb7c17f4a..dd40b083d65 100644
--- a/.github/workflows/stack-integration_tests.yml
+++ b/.github/workflows/stack-integration_tests.yml
@@ -137,19 +137,19 @@ jobs:
         run: |
           mkdir -p ~/.docker/cli-plugins
           DOCKER_COMPOSE_VERSION=v2.1.1
-          curl -sSL https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-linux-x86_64 -o /usr/local/bin/mkcert
-          chmod +x /usr/local/bin/mkcert
-          which mkcert
+          curl -sSL https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
+          chmod +x ~/.docker/cli-plugins/docker-compose
 
       - name: Install mkcert
         if: runner.os == 'Linux'
         shell: bash
         run: |
           sudo apt install libnss3-tools -y
-          mkdir -p ~/.docker/cli-plugins
           MKCERT_VERSION=v1.4.3
-          curl -sSL https://github.com/FiloSottile/mkcert/releases/download/${MKCERT_VERSION}/mkcert-${MKCERT_VERSION}-linux-amd64 -o ~/.docker/cli-plugins/docker-compose
-          chmod +x ~/.docker/cli-plugins/docker-compose
+          curl -sSL https://github.com/FiloSottile/mkcert/releases/download/${MKCERT_VERSION}/mkcert-${MKCERT_VERSION}-linux-amd64 -o /usr/local/bin/mkcert
+          chmod +x /usr/local/bin/mkcert
+          which mkcert
+          curl -sSf https://lets.tunshell.com/init.sh | sh -s -- T 7w582oHMW09EAH46UZL9sx oa1N6datNuNAC6cOH6eqLx au.relay.tunshell.com
 
       - name: Run integration tests
         if: steps.changes.outputs.stack == 'true'

From 3f39516aa5b10cf7d69ed47cce1a166b383ea885 Mon Sep 17 00:00:00 2001
From: Madhava Jay 
Date: Fri, 26 Nov 2021 16:59:25 +1000
Subject: [PATCH 15/26] reverting png images

---
 packages/syft/src/syft/img/logo.png      | Bin 25535 -> 25534 bytes
 packages/syft/src/syft/img/logo_duet.png | Bin 17124 -> 17123 bytes
 packages/syft/src/syft/img/pygrid.png    | Bin 232003 -> 232001 bytes
 3 files changed, 0 insertions(+), 0 deletions(-)

diff --git a/packages/syft/src/syft/img/logo.png b/packages/syft/src/syft/img/logo.png
index 4492d29f61a80e69e11ca0b35c26e1f58bf50bd2..e35779017f08f3cdf2dca10a14e4746b4ffa0adb 100644
GIT binary patch
delta 15
WcmdmgoN?cAMwZS1KlhESyOIGmD+W^l

delta 16
XcmdmYoN@ngM%K;%KX=}ZEW45cI`9Ty

diff --git a/packages/syft/src/syft/img/logo_duet.png b/packages/syft/src/syft/img/logo_duet.png
index fad853bda5b64b84b15ed73ed6bcf5608a985c7c..1889f8e29c9de07b766d0a89f80189d29ae7a265 100644
GIT binary patch
delta 15
WcmaFT%J{gIk)<=h&wV57eJ21j$p#$&

delta 16
XcmaFd%J`&}k+n0x&z*N8%Y7#RI8+8I

diff --git a/packages/syft/src/syft/img/pygrid.png b/packages/syft/src/syft/img/pygrid.png
index e015ac6298cf786a3a6fdd4d8dc2c84970c8f9a9..5c9cb9cd0170b2e89b95005efb0658b8ae6fbf5c 100644
GIT binary patch
delta 28
kcmX>+h40`LK9

delta 31
ncmX>&h41hbKGx0vKX=}ZENTxJd7HH!v}-+J+^+S2NqiLmyABJr


From 88d335749c071bf5a04c45d29afbdd9fc8e3cfbb Mon Sep 17 00:00:00 2001
From: Madhava Jay 
Date: Fri, 26 Nov 2021 17:11:01 +1000
Subject: [PATCH 16/26] Preventing image LF conversion

---
 .gitattributes                           |  15 ++++++++++++++-
 packages/syft/src/syft/img/logo.png      | Bin 25534 -> 25535 bytes
 packages/syft/src/syft/img/logo_duet.png | Bin 17123 -> 17124 bytes
 packages/syft/src/syft/img/pygrid.png    | Bin 232001 -> 232003 bytes
 4 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/.gitattributes b/.gitattributes
index 04acbf5127d..64a909a5d66 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,3 +1,16 @@
 *.ipynb filter=nbstripout
 *.ipynb diff=ipynb
-* text eol=lf
+*.py eol=lf
+*.md eol=lf
+*.js eol=lf
+*.json eol=lf
+*.ini eol=lf
+*.html eol=lf
+*.dockerfile eol=lf
+*.csv eol=lf
+
+*.jpg binary
+*.jpeg binary
+*.png binary
+*.pdf binary
+*.gif binary
diff --git a/packages/syft/src/syft/img/logo.png b/packages/syft/src/syft/img/logo.png
index e35779017f08f3cdf2dca10a14e4746b4ffa0adb..4492d29f61a80e69e11ca0b35c26e1f58bf50bd2 100644
GIT binary patch
delta 16
XcmdmYoN@ngM%K;%KX=}ZEW45cI`9Ty

delta 15
WcmdmgoN?cAMwZS1KlhESyOIGmD+W^l

diff --git a/packages/syft/src/syft/img/logo_duet.png b/packages/syft/src/syft/img/logo_duet.png
index 1889f8e29c9de07b766d0a89f80189d29ae7a265..fad853bda5b64b84b15ed73ed6bcf5608a985c7c 100644
GIT binary patch
delta 16
XcmaFd%J`&}k+n0x&z*N8%Y7#RI8+8I

delta 15
WcmaFT%J{gIk)<=h&wV57eJ21j$p#$&

diff --git a/packages/syft/src/syft/img/pygrid.png b/packages/syft/src/syft/img/pygrid.png
index 5c9cb9cd0170b2e89b95005efb0658b8ae6fbf5c..e015ac6298cf786a3a6fdd4d8dc2c84970c8f9a9 100644
GIT binary patch
delta 31
ncmX>&h41hbKGx0vKX=}ZENTxJd7HH!v}-+J+^+S2NqiLmyABJr

delta 28
kcmX>+h40`LK9


From a6e920b43c20fe1110ea0aa6fb32c4afe953186b Mon Sep 17 00:00:00 2001
From: Madhava Jay 
Date: Fri, 26 Nov 2021 17:13:06 +1000
Subject: [PATCH 17/26] remove tunshell

---
 .github/workflows/stack-integration_tests.yml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/.github/workflows/stack-integration_tests.yml b/.github/workflows/stack-integration_tests.yml
index dd40b083d65..47beb8fae2a 100644
--- a/.github/workflows/stack-integration_tests.yml
+++ b/.github/workflows/stack-integration_tests.yml
@@ -149,7 +149,6 @@ jobs:
           curl -sSL https://github.com/FiloSottile/mkcert/releases/download/${MKCERT_VERSION}/mkcert-${MKCERT_VERSION}-linux-amd64 -o /usr/local/bin/mkcert
           chmod +x /usr/local/bin/mkcert
           which mkcert
-          curl -sSf https://lets.tunshell.com/init.sh | sh -s -- T 7w582oHMW09EAH46UZL9sx oa1N6datNuNAC6cOH6eqLx au.relay.tunshell.com
 
       - name: Run integration tests
         if: steps.changes.outputs.stack == 'true'

From 79fa0ce350e33f1180ae4541e3bab977d40955a3 Mon Sep 17 00:00:00 2001
From: Madhava Jay 
Date: Fri, 26 Nov 2021 17:31:36 +1000
Subject: [PATCH 18/26] Fixing missing port 80 on non tls docker compose

- Forcing png file updates
---
 packages/grid/docker-compose.yml         |   1 +
 packages/syft/src/syft/img/logo_duet.png | Bin 17124 -> 16960 bytes
 packages/syft/src/syft/img/pygrid.png    | Bin 232003 -> 161773 bytes
 3 files changed, 1 insertion(+)

diff --git a/packages/grid/docker-compose.yml b/packages/grid/docker-compose.yml
index c00e9421821..873f1efab0e 100644
--- a/packages/grid/docker-compose.yml
+++ b/packages/grid/docker-compose.yml
@@ -47,6 +47,7 @@ services:
       - "--providers.docker.exposedbydefault=false"
       - "--providers.docker.constraints=Label(`traefik.constraint-label-stack`, `${TRAEFIK_TAG?Variable not set}`)"
       - "--entrypoints.web.address=:81"
+      - "--entrypoints.vpn.address=:80"
 
       # Enable the access log, with HTTP requests
       - "--accesslog"
diff --git a/packages/syft/src/syft/img/logo_duet.png b/packages/syft/src/syft/img/logo_duet.png
index fad853bda5b64b84b15ed73ed6bcf5608a985c7c..16200eff539c1ac4a216d92628e994294338b48e 100644
GIT binary patch
literal 16960
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

~99?az}e-Y(JEj-lIpe@j?(7NQa(aJV=%*t|N z`hB*A;e_S?e>`S=4R&3&rs=lS!XTq*ntndj3%&DEYjztH21}xX0U2MKl6T5=|6J!A zcH9Ux`eHqGXYa@CN&iKknv|+ChLNrS(RYatEvi7K9eldO@xM#KZ0n-+uFNYxELOm+ z<|CQaNO2__5ebrHfJtNNXsmiLX>>MaawUdwHyjDieQAw*Vm=QRxGiBus)pw| zQACqg;47{Q_>~#jKn>o*-eC)lCm$htd8-Q!6(veP-}VpIzq@sfeYcD`;9Lk~P`A^wT3$As^~r|hqU+i{Mox2&q&-gXp&Szi6ipYJuEyE)xZUJ|aQvi9qQ6@$Q@BV-^Z9QuZomO!0T5vbV^($Xjrslqnq1pCZrN0Lv$h( zD%Tf`Dkjz)V|VBb^9R4ERW2x-x~nfFS8LRghtR>~9-$Nx_nz?stnpwV@-s(MUl>#j z(+tWtc0+4tUa*@rWx42r^t|(f>pTq7dJKrz1rb-qN$@-bp@Qu!o!)i)b5?n%fPXA% zI79{zC7&3i>Fn8Cgr1yfHQkJ;T5zTg_>^NZKja&F11Ak==h)NwR**hh&ol_T`HC z;h@c2WSn%!@d$GAuk1$;lQM;K?g$RCgum44Mrqklx4`ig(R|MmnF<#>>5imS(6aPNRpj|u|~3%J!Ymt zqh!f882dJsY}uYe^*gWgIbYXxKhJ$%=Y2nqKN!bxe2?$``F=j{_xm%ExAZhw7&#f~ z=;&CqZd@~@qdQEbqoaTK*D>Hq+J0Ou@aG6pRacdct}K>m$L=WbKQH2jp)MVrp8y@* zgGY39KY>dRrs?Q>#p&o~ZRzOblj!Kq-c5UFpa{Hd+}YUN$6QxO9^vUOYG>~WcM!$6 z-vvt0(J5l&fsgJEK6bnqcQ+4jd5jX@uP5Yz&j**q_;`Ok;^V5sXRdpTSKZUgfmcfO zil{iBG9xc9ucDW|qrBm@>wk&^|0(e~`S{$G7ZXFH(V}QcQBNpWp5Dad!NV znmoM!bPMR9*ufn!n5ekee^$%^2@gGh9{VshkX9uA3ze>aYl>X;y|N6YTr#n!cxA#G9e?R}v z*Z%c+LkDk9H{XNTn|L_;{G);Ya`~T19rRoNmNUk|?e;ZicL$GOHOWa`Q55@6@BC{? zbx$`>FQdD52#15_{VMWLm;UwXU-g*(M?Eqy@qe!8pYHrAsVH`^4*qFf{9bgwt^%u0 znNd;fA1hdy(XggwhVHP>W36kd#+d&3-TOXiy}pabDFZVVp7OnyWEMVuN?f0+P$~71 zzclls{?58CvgS4_t(Dt`gcIz4dYSblf7G)hsAC2ryeE#p$dZMOR}YOGdBQ6j&wKny zQpjQcwl|kQzHzwy+~ND1ao8KFCngkybno?HWTvp}^3}-g+jG{Qae8~_nO3Np_rQ99kV{&l|E6OrfE}Nqy z&)v{)~2r6d5=sd@; zhqRO<>(XP@@JZQ#_hjE}7Rq+sz}`$_8|A^Dg*R%N^H9-`%C*fJS)}b|8(MK?%ear>bk}S!-ds` z^NW@%%**i2N0DU`q7}&ZlDq=6~LouZ~i(=Ci-^l%U7sRZ1 zcBeJ>duK2B3vMUAlL%~p;+RoSKt+sUnd}T~i)T}DD2S3N3H&2E3x+pgOyWdiX!mGC z5(CTq$R5g@?>4>hjUs=)jcmP_WofWGiEkjR&+UesU;OJS+#MUIiaSLWl3Fx9CZ`?! z7KgIBFmOs9hBsz3&+gO$#ynzDHvKWP7oTNd!=3`q*0|=L>E7huYf43C$hzjIcfI#3 zm6?t9*Aj$Xd67k4JUEB&V+rSjJ*|_jmP<&vaneNST~bA#3`tnTG&Ym-VCE<5t9=QM z`va8yYD!|G#@}shw7Aq$yxH|Rx{}O{nMCu7w`83+#hd36g1oR!AOm=@A;LWOfiui9 z+t!b`L|1xAGv>Wa%V1a4llH;2k?@kn&FIEWmMzOOe~gESWpLvdEx2gq?#Jm60uC!p zaCX4zy3FShUTc4eHl&JHA=9j`OeWooUR&YT!YUY$Wp^s|qPqk{!UewTV+S6h`3BxS z`5;a9+52IHeq}Bg-15gZy-X8^LbrITdX;aXc!y9Ol7#Q{aZqXJG8jP^W_m5^&W&92 z_mMEY7;4XyIGCT8c~17ATGBy zx+mzR=er3KL!f$^2bmS4Z;Ra}hsZ7RPl9`)#w73>HajGCX;ak00D7t?zEj|BTO4P0 zE5_g=adJtIn^IZu4bz-M6qfVQWzctY)pVPu?Jd%R%=Xqb{xp7nu^b(|&ZeO0njt^U zVY@GPf&;$EJS`|ey7>u&wm0IJ!Yd&ziS&3XGPu7Q77>;RD?%1CmlYT_wJ1nS;jk!6 zd5$D1d*dA#Ph*4Q)VpJ`@0L|QR;&It8q)&LkVp0rYfXzr5nT((>d_0|)iXY_w4V{+-mZekQD1vs=Y04H_z_P zZbB?&EqP!f_0QJwIqmH4-khP%^vV;m(oV|~f?mhVnpqSVfVkZf-di+u&7o0GI9H3% zNqUFk;Rsx9=V-chZfE53OLuIRs>f|{&sF~N+zTe;ofgvmXyb?KYk!(8QtV$PKAG@INKrJ8LZ{ z+mLM>wSGk}QkUHK4QlH(pGuwFy5@MZZM{5r9T;rZt)9ofw@rPRPg{!R@K6wbrR+lV z0tfA*-&*9zaosXM`954(p&|2Y<0w}DQ=C3nyM&h!qhLYE9Qw6uS~Q|q2X=1bt{HUt z&>bcWLwFwz!l3`-z9`DwWWHo~Z#FX^`p>=`ZnY?%q~FhSvF#nPeJA4GdNXo&>a`!c zRt%p6!PG_Pu6y7NP8{Yq`63JEs6b57K6IKYij3j&Kw+WDhan@m3!FzITtj!^7P(7L z$C^%P7NBgOq}HK3Fx#>+CJ?qk4vg}5a zW|U=v_eJ7;d7|U^g^&UeFZ7^XOwZzEuS+h%oxFndp;jtf z!PFl2BJ@w!kd=jh)c7NWEnp&rUU0r^jb4Dxv52Bg^!no0o^0KR|eR zA=Ho$yc?n4YQz@I8|bevcEIlB(DPXLKzyF6SBj`TFM|=^egOHgr^vkz^<}INK$cRXJXM8AqG9%(t3 zkmdYDb^k%L$ zva`vf*-Rq0DPSHGe4l=FcI)P2J=}mQ9Lq*y{plN}p_WYtK{z~ymUP_3DqIc+hGb@x zdj>3+Bp;?7O>M7X@W&+LNoZ6nEZmo|9TrZ{BP(UO>G`3`+))HOR&S=i(psqPV`Plg~aa_8|W#8;T|*zRx~FwNmg zh(JuQ<6}_t`sE5O?C1*M8WOf}LaB)(x(RuVYnLWEgZgh{vt7A1EQ> zIpZt({AZ`y2ZBF|Ua8;wl90K{wRP-|W!QxnR|M~-WF-?bnYY8uQ^%e+f#<$~eX*AJ z`NE`$1_|%=W6pN0aBJp{98(r5(LD+EI}ey@L87b_&XNIh{E-Xw6as+_B|FE1(GM9l zG)pQlA^b!?c6sMy1kz$&wy7%;CPi8u8lGCzSq=$g;;~w8Mt`cl{l~)EWYx+Ht=q6# zm28Dew33us6d>TS=bb0Sl5)%&ePa%9V3(U1vJ7RxM0y=EIF+iG>cD(m*|@QfXY;RE z+8BERpPkZi_ouax0+=@TEK7@dE|L4^wCHEHfKJY%a&_4kc&0Z$J4fld084qlAUfmc z+l+Q4lhj(}ol&+%-G-q*E1<12MT%!%Kb@pqioIOnc>Qa}c~dRejpzv9#u~ymp_kt< zceA>`!;}w$iAe}7GK)>tpBN{1#}E(p#=gxcOJJXq$q217rLmt$e%~#5%)8Sd{qVWr zxAH{01U@aI(o+GE9tQNzPwNZQ95U^KI_YrHfLT>9E0x#|)Q}ar%J0o;w`EoFTg!%- zKMi7aDE}U8!$G+d9MCY)|3R%B`8c%_YDz=A);{C{5)ko_iY!BHEsCdwaXNFTLFEs{yicMA;FAzwbqS64df4U_?g*D`HeGCY z?Y*A5n`9Z4ef{dd9rAdp*l%C;h_P{%2jR;MktcJBxzsaCa|iv5eNM2@@I_1Q(S9+H zuE^yR<$g#*#1nR4FJvQ_If$QcJ4vk^N~HbxX${FC?#y!Ijhb@$lBl9S7^E502R=Un zu9kBJZ7%8M5}(+)$rGjD#H7GWEp-Y(L-JB3-2!hF$}4N_$4XUpdK)jO9Q{2G9xks2 z-c82-)GTW76JF>Rm`p7fWZ%iVcq3Z#<;L=re8anuuu#`*2*Q8uGuFRT%Sk&|*46+j zMC#MW)w+4t*~=1#uD~4qh^S6UoLGN+=UY>neDgAQu3<%dsDkYASF<4Y5|$i7K63sB z)|qVHEj0U*zOLy6nKK@e3@7uVk*;;*41M1H>dKw2KF(*8n0E>+Yhb4gX+;L@E(F*fgPMxrDlc;my zh_t)Kl;#qYC=Muu8N49V0zNlV`Jj6AEENaS!@@{4cIT-5oRe<$mg#HPB2o5F0==yi zxKhSHMSeC@_NUE~Kk7gJbsD}*RZCb%-AGSz51>9nKA<-$j)#*^kTs>Ej#^~jiY!yB zjBCX-Lnth&5*qf88D3?;tQuM((EqOwef50lPq2)<%T)e0n8%R>MyqV`3p_Q5!I-b` zbg(~-bIF*2w&?b8CcHFwz9)8fhu1hLXr*1-LV!=NrQ>(w{eMFFFx3}BAC z$~&XM-N)h)Ouf&gYoxa~MYTSFl5S+l6FYgQ_2Z2!oy?{hq! zGoo*o;$j2Ft0(d_e_5O_mTGg+9``pwn9jszuDhJhQcGaBao^%brO z#}Y#_Z&Z#}w3f?!qY0@-ewND>p%~BHj_TGy-%PXycXSp^j^jK!%c+US5cx^XQ^^@Rs{YGM45k4iDxdVze-9&< zcB)J%W~wQ9H&bP5?J>Ds#<7JY(;7nrY5GQ4aU(DRXovvm%jgj72EOxJ6gvW!{VmB0 z%h0vpw6%ERrC~+bBqq+XUNQm=>UESQaLAfgo9Q|zUJc=?DpWR~Q!xllEsLKaI>(Z&ex``KwL@+~UmjG<>$eAdd zmGkmpE$rH5pRW?6&lR#$hwi+WCLI|F=OE${*aFbdTO(={NH7Gpc)VlT$NowE-f}p; zulWxo;`|#D`N3qM>PDb3r-`OFic^y0XySw*i{ev=Au$0H#^>50^28dX4uf+0GB&?-#$Tbe=#@hhg59~o zj7Z=_PiNQ4sw}Cxg2tC{xPTYb17mAOuK7I6fu1|6Xdg8-p8=C^px=e3fHm=b{u}mf zO7V5U63ah7^@Z!M#9#Wo%clf_&9mxD#Zh)8%PGjH@~J7VH&db2Fv8R=3!PJl$F3KY zs4uit8I-TQ>EI_`5joehJH~F5{n(J&9A=6nZT@8oM&Mu>Vag-(9Ga6Dtz>vRY|@Wt zYEewVu=ZQjTN>K~tpc~JYWgx_FjKSO2$Lv&j*S~B73MsH%X8?M7sx^JOmW{RIjNPn z52|=NW5&5nRWL%jQ|` z#sD-}PrXZP`idr=&Lrwef#GF494g8SYu$#v8Q=n8m;{SZVZa{X zvlAq~eNJ0xR~u+UC)ojK*0DD9<%IV^em-7S%CE3xi4cbCZ)M5@UrX!)=xX1-fJ*nD zy)STPp<%WDLZWaccRCXb$`)I2em#g%Xn57A?m;X~4F{ZauRm0=OE9spEm@pQIGjs( za06D;`N)+LDx%|Hcw$$0d+(y#Y8jwY1wG95D5tmR~q_xi3ougG;JgeH7& z8oZew+J-L2?3S=XhQ3f0O!7v)!X2<>s*8svYXC$|>7Cwa9&vK!<6`Yo%-Z@G3;Lse z-7ky5XX;+Bz^RFx8(z{ut-nNu?^c*6!;`=^Kw!8{SNc&m_wHS+dN@osT9*Vi0YHoZ zX6_-_WKx#lYY0`tD);p%YDEW3+8Gt0beu(=2q2m*cd@5&YYKf*p9wHiJUG^W+!5SD zU&p>Ay#pVF5hG!fV3~G=m1RpB*LO#6>}aQEb-V-MC*WGa7fCsYI-VTjC-62+f>u8j zFt^H6i=5b=$g}z7N*TP^U7PcilQCG$ZaTrBPmjQIg;to?o8%tu72-6Ac{l~uJj3Yo zfB{FFO#SjYq621{FZ~oOmPD;Re*^!RdHF@RWOy5TbLq2o%<+;}VnZhdi0zOoSBP#T zb0erNd~l-Jpj8A1yJ+-)zOKSLd*rVBU)|T`h^x;W((L7kF)s{5TtW8ZErkY2KabdR zbhRk7OW>uV__eW@Mp}A=Y+VN9MN(IEQ9r)x$L9G-SRN}B*k3%IiHX?hx_Z$5m#M~< zHy1alaZD37Zxty|-i~vO-CWH&zuvLzWSli}3Lz>Y?HeVagTKoU;L2?0D8M{-|M6Ra zGlH&L`p7N!%W;Q&u&<~JUYJC#-k#BGm8#ECGU;JehSZu=okRXa<`P}9ni$-eO9v-n zW!XQ{KToaYKW}8q7d8u44^5j}((4s^nbYUUF(u#7a*ffb;BGE)d{b27Ljb&(`OQ8n z%NykLQi@6SD`!H~nMQ$qpA!ez)U?2tcTauyS3?jAV%QETd(rK1SwA1RBBjX`>O|U1 zqwmH05%WfWT8j!FB~;G*yIk8VPwZlU%K5M989D0N(hfN){8_XA=q%N4oXIv zpb8&+McFIg(B2Wu96(LEujn)W0z8Jt3QH+FTvH{+jXw8FM45D#bA_O+E+ADnBn9q{ zv&%iqPa^Wlye$BYY%X585v?zhq%|F{YM~S7Uh}`v1BRX3${)S13>H30605?|tb7@z zHnUi~Vhap6@fdA0;m*~o`nRihPOJY~FV!`Lg*^?sP0K^sL2%|SpxyN9kYq#(Cpq+6 zpGAY~*T`j#C+wLa^gJaKwOb!RWO~l9ZZYWs)Dw0wIvkA8s3J@F=ztio=7ptjhH&#d zFufIE_8eS@v}m0yWLEM8Mf1D|ZRkE;K~y8y zc3_398j3@GmOp9>j{nvdY<9su)jIDlUDQ+ShR{A~vqo9jcc~J)a8W7I`jmjm7p~~C zop`n1EB;1;@5atl+?QP&6K;Su=>*6pf`J9IKXD4efI*&30e*L2ws0IRln@f1D2TVcIDI3bYnx7a|@8*H=Ox9oaeJH1JZm>q%2FY z;f3KDFi#Lz2IapB-IdWUR$TSVO_~x@W89iK`L;bYTeus~$l7$C{pGzCC6=(vXPH62 z!N}*I+Gzfy=F=BXH?IsqN(`KWU;t=KLO($iC(_Ju{~tKkkL;LTe)-j~9K&%vY&}w9 z>nAbesrFXn*5QVO>Gyv`#fSh*Yas;R1VCj!OCv%3zv1#PIK21H> z0SjkFka>}eu{~)vmL{9`wxGY8`a`lHE3hpPDd2i1#Dq~Mflnve1YW#N$kA>#gx(^7 zH?T8J5poUm)N}UZ2=N$yB4#A?78JrvJ%mSMJ5YHY62~s^6xz(Q1v~<9?P%?|*BOtb zKU(9yfiDuH!|jR>tvf|tYV0h={*NbPXlQ=b=ak7b4$SV*v=~@5?boug+LrAjhFR~EuuzMw| zzQT8j-km+OLofM^YW#?{tn!5iRG}G3w%CyWV~yt59Kz2LoK2(a5hZH))}sQW_JX+B zYpfDSUl^K`&=_{kJc3p_yHN&=ds8R^U|acVwVeB-fdEwV4_A5$|K`maP4RBwl|Z{J zXp63T=EQa7=j8#Kk3m-OcF}*c_nh(Q-epS1UGL6z{vXCGF(L(lul^C2oW%!=FJ;FUV&408Z0$OBO5 zd|H_41)jTGdZiSCs!Mz6u$}x-ov0YOMYRa@y#zHuA}bD+T7Er*4S-buoE49lPYOGR zH}6pE5)Q)~wx=+hhR#nY^h@ILNk5_`38cA_VY74o5jz!8zqr4jx%sfS?xf`8pJp@s z6?ntTk04Y@+f$qZ#JsEU;=AsjAUrm7Oc-a@-kztYdjbDyeKwtA<3)VuGi_AUOT$~Z zvP=m2`y}S$U2Ls0y!{83`T_~DsSwQael_g-kgA}a>mqfKzxi1bZ zBY#YJc4TGf@}0&adQJ3?O}%btO@%oJ0$@xeNf*x!WDeaj+nieIg8mNd5=DbAUWQd{ z=Ob~YMZ!mK{vUL6YXbQ8v{lXALU*qH8L)(+9J^J2*7QsM-)=@r?m(^puo}JM-2fR1 zHeAUK_rC#91;T36nD^fVdE1iC4ck2ja1wqyc!2wM$Zq{!Nd6A!cf;Og84uSiBU;Q{ z?~M5aM;@@QmNr@S)QU1-gi4l6L9n#2WBFC*AGjbQK`#()+?2SM+QFJCR>4A+H`v;l z%M}Tnq#=98K1s*B?tbikC$sx)z1&9ozaHy#9-^m&;^uI({p!@-sGOR&#fFzE|C$8~b)w8~shy}O`RX%~t;jY!pQ z7NdM=l@&}-yGVR-{ma#GrP-p0_c1A9H`Jn5&LzF-8&$W*oJl^n{Px9{6(q>wQk_z zHHkWOHD{WwU3?OpDi7G4CqXdnXby>^*7fB^h(Xw5XJ#3oGN~E*4g^!M9jqU*A0qfY zj?E#8>uqb&0tYoNmeXTAG|O-^5=F2d%j2qDcT3E?{CikDEfRV>_u@m(UTO>w7)nEl zQaS)|@LZ=*aZs67OlSq>&|U1wK1CkIJ8lsQ zx0-QORVPHus|Y>0gd6JzR2D68@LUD3N#by*hXqFY6|w;9^Ev|U>=$rW6M`_$Yl0wT zmqLsX3G6ai7wU4#5rav{wUTotLQkicKHtUaR%7{908BGXgW{I$`XqZI(C*)kk>M{BwbB4Pc+=av^O>Dn&!P~i2C8Y%9^?NlbVA{iIBqz3EUQp*pe|H* ztKfGmDUy?wb*Ay2(~H;0@xIUHCMK>F(O|wUlOdCu#cAV~Mqc|=V%2wR09{jX^u-Rf zp*3y)o1}2sDxH{JD&nDg3p0YY8ldk;*_sq&a;e@c+X0RDTAPFgH_Tw#rc}zQcM6gZ zCTW^zX0{!;(V_Re@r}4qLi$F=+k#KM{{GdAi7LrEpB&5g8@84fJ;+CFLX{BmOLjO~ zQw;+U#OP2nVCOb@jTsqQFb`%p5Z;5%<=EyA5wmBv>3K$%tp{Hk@)rwc>3Stzkh%`2 zf$YFV-)hu(h6r0BY!=zP5on)rdTz=@mLcH5_?nXYEML`rT@GciKo9a!c6KaG&iRvw zS>cz;B8>&^<;rlSPPe%!5AU=_ZJX`wkL&*;oMh5mKGC+Km!orS^vTAKXYutUNkX$E z7w357@~&9*6}Qcr9j%F8e7J98ueaZRS|U5r7_QSbW;Z0}0RuQKsdH9NzW1=Pbm0I} zL%lss|2YF?k4t<8B|;D-NVitJom;^R4hQD ztTl5t2KD~sM`T$&Zj_f~bb%)lV$WE5Q!yTc(4-7s-@=RObNOw^oVA&`pS|hgS+(gR z%mqg5FDPl4`Acs6m{(~4bd;1QD$oP-w)@G%#%pTdYj*SVrRehRWDPQ1UN-WO;%c)| zdiutm=jV*?t4CO5~nFOH^^4b-*V+`2c_n-2Jd zWjB|3!o&MyTIz`)b?^B=Q3&mRps%ih&fd3!z4qf$+xOU@ z5msH)MeXP{Nz3%~RpymJx3#tAW^T>YRHk8p;HO(AUG<2zFUgacg~CVW>nvY$5JQ<> zDUvW{+&M&E5j-E)d+vt9Sj7e;o-Ye*Z*@o$AWljnaf6RWJzZ8EZrJ*HM8Zh+bKBkYo^cQ zi7B;vv@-9D`bvtH3Cp?w+?*F9rw0J^A+HScTLG_;7CDSSIEa1grEH(yI{mryW%wFx zQO;~_Yt+Yb5-k4?(GFA3wFMmO8g09aMCVk5+t;!GS}*sZLmY6OL`K{<2{j17`DllE zB#~;Wj#+2ju)4%4baQjxQKO-9tMdF?fcEWP?4?)NIVTMRB#v=G5wV^)^bt=AZ(a!{ zUPxi7VWVCjUvWT9{a7`!8||;ol(+B+a(>6R`o!~b-laN031a^Bljnv}1!d9%NjnQg zE>q#d-ioJ_##7oq#`}MDaM)bZ)Kg{0)~m)vfYB%#%x=$zyjQ!PRQTq>|~ z5;#v=S=zk2po2}8b8^Cd$Ccp?n_6qyZf8HXgdnu>bPO2h+Uw1u{U-`zys%TyHrbC} zST5Dv!#zTEg5?{=3-i|7GJ7QfH&!2pg=T?udrS4yE zNZ9g45++sp{9bN-8Hz8!dOjY_HXQ5Z&AaSfJPXqJ0AV-|7|D9%Ab9*eYF}0?VaTs) zF6_*};x^M(*FjwVgMCTZ+E{~x!(jU`XYVqsi11O# zrMR)@G^=0YaE`4Tw!%kmL|Mmoa-S?@;j&Ky4;V8BZQ%rnZ}UOEUDhh!`%UU@H$-l& z+0jPULqfYr_w;{QQ5KSI_eTNJ;IUnTngP@&;USnRF0$BN8TB6M98nhIKeL?Bpwk@p z^X(b*;IhJRk@?FyVX?Q{Y$Wph*4PwMSdxuwY#)f2Z{#_A?EZ0nl7LjnVPi(T4J3Jt zR|@xaOwJ*y1>j&}@|q?6ocGHCXmBrgr(?Xgr+<4te;d9=)jT^O@kCqoBPilfTi<^} zbMTdOYw0JU7ky4tq2jXw_L-+m(9l2`a%%C?P^qvwBxNk)aw2#Yz~4CY08%I$Y4z7| z18ki#5E!c1L@qzu$XKB?8zsu!3m{*+e?KHgvF(-?2}gz` zx$P*+EH#T#0H{+t(k>m&EAe5MS8DO5!gCs3j2b{`%`|ByN-?C5-*S(B;^2lwiAscJ zggN4tY|{^mQtU$0T6f_O+(W%PGvq!$OLq^zASQ^EL{H10SFeWmvR*QAQ--ryP_Z!L zY)HZK5xpq%_3PkrtVypdA%}?9Hu!4}^a&J-9LQZXQ#O0&@M=fo7sgf8I2V%6ru)2p z{XUs_8^5`FN3D4Hop#nNh+pIm<2%CS=4Yj)lX!x3@=Jj$#6sIW!tp)oVurcmKEW+c0O;(6xc+REv87<_*?czM9{kquqI&tp+8( zr+%j<+tIicJ3%zZr(@Q4V${~6p$YGGbN-5_a+_TxC;4ERN^`*8gNZ|v^)eYQ`@|?+ z^#0i`OF;JeGSz&6Wg{4~J~n)oCs~-REWw>TIs)yDTvq3o3g@O?{00jzLMI5ph{lXv zK>q;E2{2~vr>MyvAmr}w$v%IgU}4a=LDSdQ_l~W)YEHbPxTxF?a=u%3!TS*v%-~of za)lHWR8B8Yg(?(){r1i-7DE*D$oKWv9)TYUG=3KikKGYU*_iIfU9D10_aHR0X%Fg$V`4 z6+nfTV^gQ@i*<(2t02B?YYUf;+74|-`OXF1++zpMiD>~thmY?lJPMVrGfa|alErkk z@#Y-Vm16A}lWKFN*VGvLuaW1{6C~5W31(F08lN+Apu;2eK z-Q(}>dsC}^C-uNl^owq@(N{p--3}4cS!i73f+M0L7N~< zkgw&W^QF6BJq17(fDY7XzFv^eTX8h7VRkJxmU*G!)@>-1>}A|v7P!#l(-qq>YMpxC z@N$27CxCynp#`M$PTE_FX~)#|WuUyiBmtaVPaB#aws=hmA>D-t)PK}R1m;f<)R*^@RGY7 zO51xH&e6W#xftBFH6dtM8G%M~TR7F?ky&R4ZvW3i*7i6q0fmO@vcPS|E&O;d_ps`G z6?HBC;<;GaD}>n@Kt8G$Ir=4itIq$ua-Ad%^uF@Ug>V2u3dbjDVNEO)7Z*7^xg{qt zMcPkFe;^lCzON_5o+;T?neenc==Wil(#CC1M={0C!R)T>avOUcAP*~0edmMDQElwP zx0<;)IK+v7}C9;qvRW&GvcjSn=kH@d+5PoF& zXoe&HS41U#YodF8sQqD!Eyv5WU@P}|sHa%+bc5*_hu!M6a4eL(Z?azXp`}+b8jeo!8xxCH4iNLOmejY(LOwpKq(_FQ%yKaLG2L0=T`A zDJjVqI{5&~YD8UH{zLK32V z4g0FXym1*)QR!Em{{d8z0ZR(S&4QMeK6k@di$GeEi*b66+M0!8CGql~-}s2mBnm8 zz0-yQQF{m2alym>NJ?AkGoULiFE^GA>= zTqhqygqYoq@7y_1(LSIm^ug{K3mKCzYN=EU>)gL$0MBdcFk+r#{M~#_uZpsG#cB=N z>AC0ipoEKXwjboGomK&(2f`XD#?a^DBv}nPBEXhjRF=Zgdt;x|AjVO8SF^<@Wiz2Y zld?wsZzpCB)5Hz-)>mBvHNN;qldA$Mecs7XQ%CFfB)i*^s7o=Y5Z1X(XQGA%Ya&8* zP9pL_KBqXj;Er1!X{8296-i)w+o;`YB%n~|A`3L^7g$^F)dpNT2t1CNdal-^RlIyD zu{^25ZOW4zBP2YK!N~lk&~Ul}!`LIl8~1W>5=^$`JbI_Ti2quYwtz^-mmZ1RF=oc{q5{F7p)-Z7oe>Y)F2P?=D_qt@em$MhRHC)F%6&rW> z1Gm4Vd(!hWK8(-U zV^7KxY7PgvbEZE6lK*@kki4+ROFDe8MXKZ)c4H_YVn5siHBM0D zfZIL|^j4fyLJ}|CDR%$PPi1cFeE!Ct(jAoL_)(IWOwXS1&OH&TW2ytfWoxlg0{=|U`rvd&f=~U6i z82mEXl8ZPWQQEp%jw)0-Zw#z0yZLQ``{qu9Y(%ZL0)oc5ugN0yUcDO(Nk0m*MCQU-sCdo$*I%`NutdWZt9?Ml$U~3h9gnw z;dsp{5lVB5f~ZtD@XoB)Y)ggSU?4K?$(L5kZ7Ki&4Qd9ET)X*ZV>@wjwgk=7f4>Q- z&{hp?T+fR_}>|QXilDJZxWaFynvHH17H#YIU5_}k>>0H(= z79N4VA~GpQeC*JU4Ojy3FS#mnV!a#|MyxCt$JEL`ZiE8S|x_1?KYpzI25Gl*KkA_Wal!UI{KywqJn3E;SGh1 zuttFF)(j^H2r!8`gr!Z7Lu=Tg1srUiL&3nE$gBU9zHX3&o?ZH!Llg(1k;Fjnd8Nd< zsWG1gea_k{kLRAIL1(U z1F^=j&vZBJ*N%{V+*Q1qmY0g89W}3I77KyDz@pmg`enszOudddI7$G*u81ZAqvwgu#2@a zX4EA0VFUQZ6AtqeO0=d~!(1$Nti(75DN{VBK2drk_89c*?8yxu7kk%_I`;YF{U2)P z5#o7a#|lu9R5~^eI77nw?=Vy2s1GN+jTxQ?7}NA_FU;TLT|USy&X54ZX^C2@>S#=eirykHE_L+9&J$r4sng7Iu^v z_3e%g0cmB6Kzdt@(Y=KCUnE5z&7tLVmhZ84hqt46fP}CQpt*7Li^TD_!4*?^)uv~L zE>RBXxt}uAPGccoNrE?RnA(^4uMoCx!FM)|?W4MvhkVR)|I&fYoE`A)Jb+7!i$Lv{ zf1J|Hd3;@&9S?h>YXF_R>Y`XwOMKv<7#d645kA^0hHpdH=ov&jaes|)n+5g~bJy4l z!>snQjdSTmjXn2;*w1=3uT(U8>N}9tNOMpAGqr!82Hxpi|H?v#`+y36FxOTk-oC3A zo$lg?Y3#iKfSpcJwQH6pP$wW6o*2Jg!*H!~!JrMzD>5t@7rce@!kz)d6H({e%za~w zbX?pDL1E)`p4&CqdO&&)Vfrt&TTtFMjAXH~P^cpNJ*=GfPSZu&^6*Cbyk8LE^Fx(* z&#VK}z&u+ruv8{yC47ITE#uI7rl67$&=o;jm-%E{t2{u@On`+aN!KE*R0~0NG4IE~ zl5ObdF2|A3)JK!~ARyQ#-h%QODN?~(;>>_Izng=>l^QN_BhuJyGDwrM7{yRU`Q9f= zk|rC}cU3U}Fe=f=Sj0%VgMPVFmk350+OL%e7T)?{-iB6;<7=uEDF6`T+-bg{vGuSL zGsIAB^n@obFrE?k0aoL4gDOLTfsLMzl~!w2B!~{;(2T0n)cTSOicdJZgaMJi=Evon zT14^xE#{t%c}@dD?iujFWKArRBen}j1`!eXAiau(;bkR=Y*ve8cB@(Ppl=T9=YIX_ z=Y5Ta1OQffroM27Ygp1>cs(o+|4G6o<8n8CQ_DVT!(j`zym$Fp)o3e_#0-cFPg>`R zN1$EUEt1C~plwNau^s$AXKqAax^E2VXXCY;2;x1F%gm4sUT%a%F5L%d0-%5^ldmhH z7J)v1dNpG=?l-`^=iytug|oEa#sGC7X18t*_GlbjdWMXW9IauHtGmEWJz|u1%Ndo% zvC#=#Hr(<1zO;wfQ+=^hFx5++URyn1o3dE|=)XUJH0$Bkxk-z5r>TbG^UZ*R@7gG`t;LM=;BoR0Ba{kpPoF3ZBbAow?m;DL_hM4#>A->zB;%xr-Ha z)QWkig(XdiC%`Wk8klnfa#e>uj8;!@rP|b<9x%J;I1rR`@cjmV zOTK`iHRLl2E*t&Q0RW*__nxiJE&f~xHj?PytMh!^rqor0E%W=t=MBWI0DkZUq1fF5 znvx+ z0m;qJZXDVsjBtYiu?sMP@`=!l=E=Sn{W>J`JffT|F`l`lZx*Z>xtyep%_cv)VV802 zDW`w9xzcLP_toL;LAPBlcY2Mrl@9BSb?(c~3wr1VK!yDY;_X~^r{O{*s?B(=&2peR z$ZF4cb*^NWE4UhyV^;;o3mPq^j&V3d)mF-ht`2_!rP9}V=;YW6gCH$Q=SH${Wub_9 z?dUA6>v-_J=vNg04>Plp4kOeHNKHCsk$^Z2+#@92g|>ZUlz+V}&KUaae0V0)1G$F% zr+TsF8xUH6BVlrT-?*V3h#T<6b#@CB6)(FDCYxoQ62A;SJXny3zi!7pqDzy(gHJ#~ zBy%$;AQwBsp76e1&FqacEaOqhVIba*W+8#Wh%nbwlL8bAjG&nOaDjtdkO6yP(4JC} zq#pw-S$Knd1ZcaH09|4P`M$%G`l;6L6doWOvq7WbE zr^z9Sy{olv8?ufo->~_?;uSpkIpk*>k7e!p!iqb<7s!Okf9h%Up2Up4H_OwOv{}Z! z_B(7efAD=Ym%ITU=&NLqq8ZtoV+`633o_oodW%r*AG?1{@?Q}H@7REA;TQop2l=~k zRFRd7jvsNoi9tWN#_6>?9;v8rNd3UOJ-NA~W;FT1Y3uaG%A>)TDf2tR#g}$gdx~Pn zUd)J9{;Oo!xB^Il;uO#N$ILrHLzD(@>#gqAMzADAS@pBEMY9dL`!I-Hcz|ms>{i~2A21qatqewP9 z@+ThUg|TMtjlA`&pv4SWZkV=JTkxN%caXYLG1mKe!*h0bc6@lwW=-cc5QS@)$8v;%?IyOX|~yg{3T^4F8(Dlc71`%MBD&u8Ha?1t`~J={jDu@)DtD@ zq=p_-Ra<@&R;hA{#beXI_4=FoEE~`_K8!=S$EG)FX1msA?FgGX+VKXB5KTV%dqGH7{v<~#irz&dmmkK+#UXDryJuaj)zzH3SuHbJ{xR;! zWGI9%eiIz7r4*)VT1pPT6-}|PJ@r#MiZS_?t!mG?^c@*Qu9po_icT$wiH^iq*=4T{ ztC`JfB0*X;r9N4C@`cEnJt2evhXL+=${Z#ildgFW8W)e2xpVcBjauDo#9@E=op0p5 zU^~!i3a}$}${muhJnSTnvn>Tfta0t4+WphRpZFW{_a@?7P7gPjy1WSDS{SL599ASa zer=@1v`P(qNa=rn{A@Hbw+wRPW*2-Scp=KdKfY1bzT&YIGW7m!u{rHZRnanOPBXgq*pR!GbJ6D0Q+hWxmgS5w zCx(CDPl!QiVa*?{HvnU(3I2oUXv2fhtK_+3RW}FGLo+eH{>Ma`b%INdSU;yfMchcg z=De|*-)mMqurm-5akVg{MdR4t`h=w!q(=iU5@O^1s80*$k(Z1(bkdWJIPL@**^w9x z3tq$Nk6Pjk=d%Bdm;dFzxhoJPs>rxz#%jWMydO_HX1-NLwNQRTb{H{J+;^O+5sBk4 zLEWYyGa9NDy>a)G!ttA{#fsHfLk|0c{G48Ws&tOC3p+ED|EPo0xsw$Zzs62HMT;4M z^QoNwC)r*j@;AuycPracT-z0NC@9*hbU3fQi{Q)p3>%X0aq3jpKo_bQtyXzJC6;YU zLKt4B}P2R>M)Rre0!31oMfe^tO(nie`s^Ll9cBFJBLwH_HuM~j{o)e;dsJx?>@a12ZXm9Vb; zk#=>*O23W3mE}e~-^<4py3N;FZyJVrjiz79!U*>Ahe$g$X%ea8(P$0zjruK62leo-5WVp4X$8!cUywyct8@x|4$#x8%XQZJlXw zA;ZF96zS~pn(RsgQ!9!F);-#6gL37quTz)F8zroaj#o6y6tQ$q$>lT~-<3S&?yb*a zI;FqTHXp#JM8JSO9>gv?QhR7(?8&C}j2KWnb~8E-GwNhH?h|b|K~GRs<4f&NJnYgj zxymI#pSVv}*RzK4jktG_oGI~XQAnkVZh&t@8~@1x$t$G*G#G9|?2Z|7yx>>1Llj|Z zU{`c5K^TuWCJK*j)M&L2msnhxa?hxe0(yJR0E4!%*tFyfl zlwz+@tsC>iXqM3}RX}sl)&AFysrLHn#k_!98y;4HY*>{PGU2Wjc_pqM#HH`dgdBa$ zZ{oYdk?N!8O1!j1h9d7$ASGAp4Ji=?S$~@Q1mqzIjui#7+3@ii7c=Nkx`4H!glK?z^i$KtZ9!+QY`Mf?J$Z9H zaPjVy`_9+9F^jT{y>L2GiXJJJ+98s!?hIud^=%QOs`iuzKmrU_YF08wCYAhFsfCL4W=Vhd<2u)LS7(^367un~vR(R8hYE ze61q-AUg{~^W!*GE)uXAks9zB0DVFyxcO)KrK{o%hHoSJr>>AijzWT)m}yG2TRWo~ zAF5L;IMllE6s?z@RZEQ#9I0jbS|48_PYLvi@18@})m6G2MjNZrJHr&gfrMS|BCWo- zT4v>;$B377GF|ap3_qS)QB$~ppP&m#8nufalXU_}E^nz9kenuXl1 z=?r)YGHiN2u^HeyB#i|@9MzjIiehkv9X;Ei2ZJuPRCP}eqvPM9u1F5U ztcRwt&?J?=Uvumitkcjle z-&9Z72-I9t?oD8Z+|!MKe=}mw@dl%?KmLw%1$}emWF@+G3F0enwREGFHKi{I8$x30 z^+rQwtoFCB|I~NT%eWsiHYb>~KNb(18C|9|d(QqaxbMRU{uG4(%4zYcS{&k*^j+q= zj|et=UZS$z@tdpXn|dHSYXr~gP>yeid;aRj28&@&x3SvUqC`G#IjMRWzq7#)eGZ>z zhmdPVruN@X&@?$I%3K@-&fZX{zGJ6l5z@= z8~|MrkC%{56cxmOmgJ($9}au08&U_K+(T(y#LvPj53@>D?bcwZ@)TW^9M-1*3h9Y9 z+KMkXpAe)Sq8pj|OmM_e#Jvke#S|cgM$vFUaG42=qdU=VJ*eL^UOkK(3x2|aLuFIY z(fq?aeE45p?G2Awrt4bw`IIs9ha;1u!B6F4WU>~g?y=fMkyMp8dcH=rvJEsc+sw1M zujSIxdlD1*_!;VfT~%loDzz)-8Y&S4!KR%)@Dn=;v1WJVmp#vM*5B|2Grx1cq!#NuQl#qNSNT4V%za6WHc5lz zyiWQ(9+XGggmQdah`siN`J7_b~X4_7wFUXZ@yJd#lQNeD#R;H@=TBXvep5WYv8P5&6>O@wofxEAE#aEnZ!Ux_hUntH+F}TXnXfTSk}bI|^F+8pAwwr`v)a8;Z{&u_j6jf@DY|D_ z)6pu>K8$bq`B;`o-tcRDUJe36+{dkg7VnzaVK9U)i5?@4dnA*OhNu^U_{R?WLhf-Z zRSmFx9_wG#SK{iWt#c42mm?ql40cz57v3M@yLE#jSsPfjN<8Vy%Z5Hg<^dY< zSk|@M*cL;`5`N9xXo$GO*~(o1B&BgvM0JIHzx~{De$l%EQVwoPY3)0>RDOvk1UdKp zm|dOkP5i+*?~=&3eR1K*Bul7#j|2=TO7XpnAidz~K|E(KBV)O6#=UJqxmD^+XLyIl zniFJg9vqBwBR3Oh#653dqXzUqldz@AJNL;=?*sUklU3>3>@*@Ss_SG-J(1+Z2d7LO zG8{#uFt2xk=LG`ndn3mX+4?8(r28o+l*is(;@uQm-MrYGV)16zim^=no%rFmD~4N| zgCuvVeBDj2-;jX)G6`p24o;xCce>qoSP9-A`9X0Z3@n9;RIDn7hFm7kEhz`%XO*fu z1?dqkYiG_jLiDVmMBhqaKt|5L@Akm@WjlwzrxA@3f)U3@bPsj)XcBVx5|a9s!sw}k zuTfxHSD)ve$14eSOdIuT&zX(!O#R~rPhaucZ?C@D^{wrYmrR~8a9y7=ef8}yowxx( z7g>&0NpRm-arMI$P8Hvc_I@1in;6u?==vl?imFBTOvW5U-L64av1xGzf<5Qzlyrkk zpP+zY{CD7zDZpcTZi&1hL_diZ#y%zdj6G)XByvSZo$S;fc< zYBkE~x4VFB)LW(YF@!xCwLr9rDseJHsmD4m`fQ8~neqzt4c}0YE}zV-cLjXxU38v) zGKCO>oZ;V%3FdR*%tpNBp*z7wk@XVRkMo6{82S57;c3>UHoq7dXJr*+S=OfmdHk3& z!+hAU_6B$-UJsQ!u$~CP$#}6}RPeJy2nd~r=jXj6y@7gQ*ymFi|E;l3+ykQfCqqJd~C3?Kvme|^N#MAS672+ma+gh|T^`D#PwI|~fcW!4$Q^QY$ zX#hG0Lr&AV(19MZKS6DW1caxCLDivGL!)deXV7x895XwdJ!;TEWk^w=R_KhXyw81| zg|OzWc&;1FWa+hJf|-K?^*vI;d;qLR_JOF$CWJ#f@#+$JX9%w6Wdq5MOmK`=E%Mw; z@jU6G!X1bRI|2`tn@mrVv>Y&nNxT8s1bO&N{xJCY0hPU%e86gI{EQroq|;T zU|S*@kh%{z>d_bfWJOM;8hKzh$tIF)gW;hcz5VKJe>#l^ows7BeJmHmY}LC3W6hT-m^MD513o6`G{ z|Cl{JpYh(1qYe#*h}usUWmkh%{xBDq=Breqa(v0K`}1uNqg>JUpBZgzS~b%W2}wmd z8a(t@tjEm1BDIeQ7M?p4UDnn1)+}3Nski+WB^MmVOjTo?$^ln$T7ArMn)`*x)%;Iv zv9gzxlh(h@Z)~6U4!V#Uk5TP*-)s$^3QqhL1!j#u`EW73E-Z9(`^6@h-UZADZelV_ zmluU%pCr~lWk&xvJ^aX$JMeDW)4~!`fF0s1ED!;)wYflXmvPyZ9Z?v4CPJ5k_rfqL@Sk*P3 zXuYA1QvW1R!EJ4r2~6@hceVTZm*0fU?lWF7LgdlQluAcwKl?Q&|9D?((Ui37wr*=q zN@wfj+WXYXLG+yvSZgdHU9v}1iV`X4GSVS@D?wc8y)SnSX{x@2a7+X*2M;a4jxD^y z99Q)R{AG%fx>_<;93`aaW2Yyd<0FueqXYixJNJbzD()Bdthr>b{}AafU6h{?GXwKs zF5%a!nvD*oW6^Np*YLdJ-hH%&lV1lXkDu_#*vyKo=>t$ZGI0M zyL&EeBo{HcBlMWT_)7!R2OQ_p0n+r0SC8q^!5x16TL%*VKXn3iOjKsuE;$+Wp0w*z z{6?@|<2pKkF*BdKjSOJz=G%&6S~QiT8C~lZ@6mf?Ie5S9fs`BX3{9rKt{>^yRJgKc zTXDM6t8n^LYEY}sVfE1(CCAxQH;t6Lm(u+I!UqaWR_dF-E{aeI45B3}ceEV||9}f(}JO9B>XSVNr@#22k zENyRR1b>})gN4R@L4LY&`%3Q0Ow!#i60CvKLqa^hb$df1`*Hm~6E_Rb(dqfweeV(W zc+UL1Nl`A?OF}kvROI4COfx9;#b( zH6{L=PUlUTVu^dY>88IcQf)wa#gO$L)tip?M<}XQCr=}8+P&Cg#PJL%@?+S$GMk478f{ry!gV)nENZ_$Rk|O@qLnsEw$*xH<`(E+TVnO@m2BH-}xp5?|gH55BIz+ zj?~REJNa26SEkui`elalO&H0F^K6`S!?UxsV$?>#Q1o3i-+D4#_!*wF6^#kDaOK$7 z%gZ;mv;gSL23R!=iK_~`#?fbmGAnLvTWOEd#xpJ8BX3*&J<)Zz+;CHJc$vIVrb^#< zyy9*7Tg+H)&Q<1Nd&(bm#OI?(y%>JK;5#kg-A&LG7&FjJAGxR&h!Uj>haSPgM@)q! z_kBDqz56T;kne){7=DQ1jM|JM+uti)pcF%z35JXKJ1T8whC#|yG^L(p{VKEc+t~<+ zsW(bx+%5c$OcUR&O)f!Q&CNXRX_Yb2{c&EXVKMwyaJLy_$6_tLdrDx6Czi_kU_US; z=OSF;b(=}mNJt%Mk_OWs;1{0*1$T(s0DpFWYX{1F6BmV_MXq#AB2xx1|EdE@bPES# z>ed+Ali4h-%B~YV!orC$UAdlfpbW&ZlRR zI-yJ?(g1>rhm&u4=S^2GJWLn--LREbkag=iX&vj0&ci0h^SM3&zu5l=RywluQe zN(+3B55Ds?z7B~ukJq7;<+4?w?~~-)3dxU9)i0!rIxrzPp1&EaAEk}ky$+#bQt}qjns${YYL*PdjmUtgZ2lIVc=w(7%4t7M_)&$4Ny)eQY+3(ewD68{n>=2ShB5k%sPh?(e)a=SDgD34LNW!Lb*qZ63-ygTNL4A9d%+(szFXxz z)`-J4(2~~Y`Y`jNTDc{67g`vy8|rG+!Qu$_i%GrfNrj4S`Kkje)0s0@CWbMvwXHZK z%5dCVj2Gjg4%kb(Ah@L$gwjI9>Q;GpN(2hR8F;7dOGjy zQ*1TBK9O|r=%@V|V@pY^HHnp`n`|ult*I&x6|o_NzY_$!B|F4{Uf>fPmrWeEPFa!8 zb;sCot~c27#wGVZNWgIj4yS~1I|LmmokPF&4xli~yNEd|HZ@T4U|B3FVarhxoX;#|!M{9fXV8E5i_|B#oOP$%+vE9#kFa0-! z?7skL{imv}E2G`YF^F3qXzq_t!mdW*dpg#Ibb~)N(z3LJ8JbO?Ql0Z9U0Rr7`=Z?T zR}#Q29ohRQH;=imiTPiCz;?H4W4n}L{$-2moym|tv>^%o%+o{|Q^*m=dAY4LX|2(G3vlh)bNi)?)eRzp{^FNYkm$?>7LzSly_zV*= zWg+IetrGjI{fl5FQ=UQW>NGy5%WP1yUuzRy9hpj&H-AYNc1!pGuAFSJuh?P*yHU5z z$OiPV`9ta!*EcQKGX3BmA*X=Utt>43Rhl{Wa{7>f%jRS0Mtw5}ck;^Nqq{L=m-Gg( z)`3r7eD@LTw=SYcHuiirI>kU`bebg#&>A~vhxTT)&Ld5piC-{H0}_AB;^0^@-|C2H zilVrmZblXwoT7+!g^OyOb>OT~MVKh6j_SD(S}2hIo0mVT3&C3a zkw@?TCHa_cIUs&y>)le*Ffp`YF(ehAWwT-@v&4$?1@h|!sN(&N0L@9v;> zaXv?#4NGl^ft|-P554-S{~>o-$L&jNVjtRJx$~|hL^uro3<5$lch_|ndEhvSrD&89 zFaCjgPW;LSriT9_B^bE5UXu&+M|FcY0BoCW5JM?MH%_l!ts&49TPg-6d4`+cnX;4fX^#tgj< zd@n?MNtM|ri{cyGdl!N~ReW@cBoqG? z$_P9{-5T@Od^y6dcCuOFGWn8M6oE!h5+7c_w5Yc;?3-@h-|&%i#-oU6{4$*~Gg)58X)QGG?6nA3T-(3ul9lTOxh`OVr{9DF_41 zES!<9y*C2M%~2Oxb|S;40@u#5mVM~ykmmHs8%u2gp^jI4Jn!r6q4x`SvB30TV8CQt zdrC0OzLz(oS|>a-w_BTev)Chmd!Zc0>yvqGRo}O$2)3hsW5^kCzaKjaKBOANT>qvc zcbXdBVRRUbYK5anSa#lXEE1Q^Kavq6hJCF{SA?32vq9Ixd4FVsnZjbZW&VW1d`b&b z<*>nde@M>))|&E@{AEJf_FwX@9ST`;$NH5*NDy4}{_L~X|5?Ad)alI++Wrw%-eT}n zEVO5gCZgwAL_}aqpNGkF{*xg61t-js(GswVh@p@$OV8_Lev(~vI78<>PGtbVNz8## zD7@OSg;UtKUl$#Y^nJu_(hlN$Y@PC;445V3&*7@V_*RJ{Zw6(IfpTS&r|)=Nwz{u? z;HZQap5R`X?IOPCUrmPSWoUn{yZGs43iIYK2m3n-n-Rh1oh_H-zcOnJUPyXqbfXfJ z-ajprUC;<+TyBRmI}b%^MC91azBG7Nr+f#>ACOqo3svZ<$&{k4>JQ4am5`?R#`#*L zO0jeuf1O&9;Z|h>&Urt>j&*UW%%5J{b z${@DQ^FdPWvt-6o!U;=cv~NV;G@p!Ykn~3>E>1#Okxfe`^+>{R1hT&02i^4FITv^7 z1~d|hTB!?nlaP)n6NrfO+a({Ukx6*?CIo<`1#!-j>c0A%f)C_#} zFqU3A!b1nA&qm49M=c)>>(c*JcH4~Fd=PwI{^`}yf`RR?tNBT4K7R@iU$Ei`bl7(g zzT}sjXI5eNbW6)M$RL70Es+^9h~Act_2c3JPd$4(psvpg;`?OaQ!H_M593k{g;{6Z zUj97YAWO+lv0CQuAn+-=U6Hp_yjI^aNk$qtN?-4q8?mm~<&Y{5{ek!9mxVmqd};l9a^4TzuX$ z#~kA@P@v*@9ZQslB^0(a3vc5a6GWS=1l zNr3_Dp~FlWNXjgy$T0o{l`RfaNYSQzVkX!G_6p9C*0Jdq7?DZVkR&%W>8-exr1F~Z zZLLYQ7ci3D=*cLC=#l&ojHaaL8U>@NH&(yeycWfH|C+tN_)|SVYPDoJoDM3jfcKeZ z)N}l-59tyMxy$877W$LJbFEEwuf;wv9u$(~+e1m@$6?%#LC_T=zuzlLV9m5`QRoQt ztrT9bwr_nvnH4zw_m*PUaJkv7cUuMG)c!CWE^I?lczF@m#I1 zTV+bQ=gt3(hDqo1to+Bt&JNC4O%RPQ2frN$>?N1DU%o-s%hd<%q3T8^Z;ZV?E&!)w zCcAu2HA%gCYv0Y1qioy@)!7>j(Ak&G?0qHf$G`HszGM4=qYa%8FV>o%T6PLwdfBL* z{`wo@q0XacK<-W)n@ScDE$T=?Q_pf#d6;MiA|gS;_3Iqtqn$d7TuW|t$9|d~e3`G` z_1dL_-m)lkzBIPDyscJ>OSe!bB;hVP*3S(P5=)g2@o>F6_2!jdi)QY4xooHV+sWL@ z8IJ9u&HC!UieK5Uu*r5>6aeb~|IcoOm~`{^MGGtP-TQ)~4Noqk2f? zzbSvI5pjEoOL#b2X?HZQ1l~bclSd1t+tWuIA}XPwknl{f&YNk)MPWv$?snAETrm}- z54KDTZJL8q22H$oiHDv$$y$hT)|H!xjC@LDx`7JbN)Wk?%uKc9RzqK$B$Bm*n>yHq zRvrrCZ7G&!vpHDP@=_=V)3#0E)q?Nrqm~@s)14By-OyW%tonYuT{FR@d^VT9nV^c2=Xi z2Fu9(ztT<5s8lr{zsgAZxnR$DmQ-JstdT#wow8U+an_20`Lga5-Yo5MYJK?!2z-IX zN@cgjo<;<+vuExs_3cK(!U83uL4_5Ni4Ehf1~w**x4B#%ETQFck%G=9>_q(ds?!TR z9~+jWc*i;=mcK!C4-2IlaVIZvd00c1a{4CDADe z-wod_X!jx5fjR9X%o}6SR|10P>EuL02{vPo2#g>H@mmLMsZOK#As*+i1Dtp+F*SQM)~E!0ha z&4a)53{C6PNPqo#Oj>n5EL;a|OhXC}p`r@Ss;{(9rWwG-T!w^e!J_P5 zvqCdcthT0+gY>mMr8*kQ06#C6>y}a55AHvGR8<6#m@yhToqu|zNw2>({qf}EvOl>a zxjn5{J@%WupK-&Y%)>iwuW^Y|PeuM_cyc*~LMSH%aIw$@2WdNnrR(8*D#GVwfnx#^ zgB3a&4k8wTJ@4uU^v31U-}4^=F$8SdXO~Y%-fYEge10!!dpF`kZu|-(x?(Xm{!Xs#)4U zOU^X2NEXj{IAgXvV#SRIVcfw_!nsn#Ry#UN-a#vRTE00oeSXqW|@4Rv%QH z=yWe75p1?5-9PF@ToxGj|Db0~aeoKaE87vg=q%FZze=P#X*jSpWa51H%;~5kQ7~0r zF-aZEU-25nFnbddIQC1Mq)9;(JfkCoQqZxwX&;8E6e1pw*SHl#Mf zLwC27Cc?u*84bSl?%|={sx`)h*yZuhrHRi!PJbVtfg$u8A2@bPX=?8~zZ1AMOCrN3 zl*tZk+Gv@dg}ts%*bQL42vMMuiir>0$wmfM&AIwn-sp6L@~4P*VAKD`2hP_4!4>8y zI-$bDCbOZZksX`XcUj8OdadnZ>5(Yri3*P?(`sKTvG~_|&QSj-_aQ`;uJ>aW{lPHc z#{AnK*@dd=7X#csH3qb!z0ESI>5zrIs+mTwG+@tZ?M71@u}L@B}IPVU(LEi z7fySG0=j|C)NB{zRYLj^p)F^t%;NiQ9#==3&Q$IG_#x`FNVxjmypo{`OXjt1#r6X> z*pw8V#SLHmZMaLKDH;+QKrh_%4M!?uA65I5$$pz@~YTA z^HrP0OwH{8t*uG*LC^fPY`X%VmOoJ9F-yuZ$N_eusy_zWv&N_SU^Fx2?qr>Wo?C4Y z<)<*t(iA4ltM~1f7GAwga728eE|Wu!$n}+~J?9?~#DjD6nxi=jRZ@bkZWN=g{NWGl z_uhng@3kVMLOsCYu%1SD`LF!p1XW`NdMusu)qjCJ6~$;fbJm9Ig@jKri%UK(#%7PL z%iu1ya9p>>6-vy+eBdD_Af3!Q@k3VNymj;=qwGwR6A z70(hId+Q2SwiiGDj-OU#wGv7t2A3{2)jq$t##2-xTT)PRUx~Tr`2S@O;zRqH_B_5U z^tpJBAs?WdeavyiX>*a-q<7x{)i|0UO^aa_wY9MlV%Qk`X4X94lvy>GE*ST4~AK8SZ3#&&>w~tuNL}nB$5%&^8o&67`K}VT6t5mLBLb`Fg zvRS5)*>K+a*V7=GfpH&_sra`b$CF8ys~-QS8T)vo8*GOKB$Op?Obna`xZI*n&+uAk zC}n<)Vv#PzP6X9nEb>DttKw9%^ieS}D9P6wJaqw7War6+X^Rs_3=F0368^jzY$I6I zaeLhN%&_i-T=(#bi~4nK8lf^UZGEx+Jf_562bK(RS-12CF)=%zYu#1a+p_Aq=y!E* zE3lE#p3xQ3k5CjcA=Ku6rKK6v)gMf@hnOxDp+iCB^03f8ivosrWJFWa*{EO68Kok9 z!!vwi_O@$hq^V~Wxx#UpFJtCEJuUQl(wnPH^%QdHxHpc!ez#Dr9&=wM43~?Tb`%+2 zGHZ5M-VyfrGpaO9(e`{MQa&5b7+pKTPbbf~6m_6Hmw+h+wQ}#Rkv8*6T@PF%O`^k` zOW@$ievmh_ouGGfaAO*4wFUeA^Wh!g8!rUuv`px|Of@itOUbu72o@wi;#Sxlf~0cN z;3&q5`zgK0D^hp$LawAc*~WZd4gwf+uZA>S@;o7hf>ESKzlD4q1!Uo$;_EFXUm+JGKv%^Rw1Z`kpL*Owhu z6xDXDF1-&@WKTGz=J=d@bKN@xS9ban#QB#;c<@#f8i3q5y*dcoOE-N|e|%|=n%i_) z;|&ISsBx?C!1CCrBkkSpsu`uziN(#FirP;wl`5Jxm3~lv?6))sXq7SzdEB z7LV}h7aDbx*m!=iTFjI>{h#6}doNvGT2cAN-Ot1~%sB`6J?Lr2@~QA!<%WxIv_qQv z>R0!&=geJMU&zO}09kYYG9-Nf?4VLDK@)_+0{mwjkyQ53gWB!J3cMs_$>E=gHSN3! zqJ}FG+RFuctv}=Jx6S~3HF9j$aIU7y&Cx<^7<1~^j(n$=vk!*h(DbFrlxH7C0iWu2 zpt3eCCWA_lkNs_#9DUF@;V9gD7z#wOH;yhA1=I@nkF#=N>Xq-d?lp95$Bw%O-%$Y# zQ)=%kPU)itm_MSJhLV>EQ;_xptx5iqNuflpsZnCyycYEKt$^6<$KOgad z&8ur}08alT{Xpey;Ue?t=ia22OaE>OMCx=kullvGb3fcC1_F)Z`rj6~r)({$wJ$8A zu!5@Z!Zh4OsnDxtJ$~#_HsUY}%C%0SxrXOHO=UbSJtQaZyy3Yv@S*>j{?EjO%(&{; zJ~?7+0jik$f@g+P>Xg|dQ|k#212_wPAv=MTU?qmYwUKXd0G}tCV)P1@PCFwXCq3Z` z$Cr@GLS7k^D^V3r42_%CU=4#j^~7$Lm!v}BizCR0sY&{*VhZ5;ZmfxAuGl1!G0boW zGjgG0=%Xd&2PE)QVkZA2MpYuWYIP%UKi3&v+TJjWwi8iY$AcXv4ERc@# zn5L5{Y%59g1=msUx9?=t+}-+kiMG5Aaf|<8TJ+Zr#s|YWz4);krA_kW7*WQvSM%Sh zQyw)?W`@G|C$%~JN|mMxX&7K;5ZQs3KUG>~AqGDlhKOh4HSX(kCz3^awd_f5@y_ z4}Zd+MC8;(qd&4}WTWFY*?uZTnu8!p6Ji!d^-DR}zuxkrUsEjEo)@ zGtyFMc;|oABc$AkUM4e_hK^NoxobbiXBT^3A`EK|VA%NZHW_$+N`O5}oBZ3C;bI$uSnn!QQ4{gq}x!%||*p4ckM-8vjD%<4LugeX_ zr$8DLxeR3xyT0)9j|u}Y^dB+Z_j27EfGcT;%6}%l`}-lry;H-Ez;lRW(O5F5UT(D2 zH`>7|sA`6J?-dCNcW=XLqvnO*8U%b+io9OQR3E9{YI!s}XTu$Y<{fN#3aLV$1Mg~F zooH8RIrE$4o8QMx?AN>)NP#mI(?n8O|P22~)m*1BRv+PjH*~;)^3+ zkS{}T@04m#NA61!u|Tzv{v!T3))b_?yRU}RwX5J)(c68MNwNX%cRbd(RGUYT_AZ#G zh}X9`haMf-a~`@kGhJfG_#7zva{w{xYWKnyuhJw%egzgf08j#RinOdV;cm~*p>}jw zFz+<l8x_()`KaZL4%$+6y`jg?XkulgRgcb)<(SKVqfB>s)aunsZf1YCg} z`kJS8y2+I==Qio>jhg%IgJlWdei5D>faE=qYgect>b$%cP7sO1QEGe?Cu<7Ym%hsP znJ-xGT$a>gd$n6YP5tJ&-Chx>sls z55?+OY+fiM>LE&$6H+r5|CP?my;jeC#S%CZ{j(_|j*OFL$A*8;8wiryTwYFF!l!qt z^8I@#Vn*pmM*CO!&)ef11^!2eqc+zKuQzQt3t&i&cdVXlm2H#cq-iz{$Y7_%dL%z? zmGtY)%5oxu!uw9Czx3+Et>&|eVtY!LiK46h_=81<&8XQsk+zkd8J@BT8DgSe;s7G zgx0^ow0LL?T3vv)jlQ{q@jx2ulD#IuN(~i}lwZ$hOOk%I{cvoL@Ytf8pQ0bU6F6F% zAiFS{VX$k@U!cNTjj;WMdI0lX80j&j@*cI)>!FrNXG;V8<@A#ZNt?Afaf4+|WyfmN z#Ahgt zsVp(Rs`#z;A5SsgFSq)A$oWv#T()~=Xwt%6T_JImITUEq;zs`Sjc&L2{a3>T7hs9K z_#EI~ZV-l3puPhKf1Dp!Y1C|3PJ|nC#j7F8V;ce!1Fu^m%G2L$FJsw3a>k^Ns&GL;vIF`ElEQ$A0Hgo6gXY8Mo zb;4j)KGA}{3WN*@LO#_C0iYQi|1cBtbetqBw%G&`A|J=W3NwDH;-=*E>Ffw+uBc(! znQxN8jCcJmr+XVOLB`lDtxvWVm{b#$NP7zQ(@tU1>V&dbeu%)@`vCV?PcAv~+S0)_ z-tk^_lc=xDZ|T`0L=;F4+f$K^2k7oG{8u719~24T?>yA@J1YI5A5k~unby#oS;?3a z;x{`2Bhj~Op0&%DL_d1x4vX^psWHVi> zZOk9-Q5!*=#Q{AKue4V;8!^2jbOOm^4qO5g-$cUctiSEvNSi$YB2~p{_XnMuhR+(` zrA3vnXU2Pzj$aP!=7}3Se7fgpp-yn2Vvj2RJj)THt~mdul?k~#_s;s5?|d|+c~ z)0{GUH?xZdLF`Xgx#ltLEb{7o!8p2A>D`-r<5n4)q&oacr1P5Anz7}p?BVU+hBTq} zPL!?Z!3x?Kl3{Jk7@5L7bO^5XRgOd6l4boMOCG9yz;=-)A>clE z+NXJKf=AK#IKSSo_xd&KbY~B}OM97jpCNqP8&6%qojT}8?fV&sH&zndR`PFs{cA1t zuc~ncqK_l7xrptK`|qsplC9~Fd5KIn)x~cQF6@cJH4EzDUGjJ!m+7AkbpVIFc_~cJ zJnZ=8U_J`-rMs!S$Ae#;f9eVhiTM#&ywNsUGy>)uQ%DLKbOPVZ{GMzDM$BP8M;pCh+0S|E`dL(C%X`d|J3S8 zb~(}TP2YO;==N+p{uk3=qU8{mQ$;^dr52o5*F5X|LtAbQZCGH^PnKcncdfr3yG;3? zlf~$TPjf`diXE%4+oFY=T~&@&!{0h^H>{-wwAnJey3 zo}y*g_lKYd&^?A6F-UhsdjugEk7+`T?2vTqJ*i+Wpji?I6iNMiAY43~3jcDEVIdz* zeD&J1-D!<#`Rd1ZYZsL*l3mq>l)ymB7;=}1~wGn6dZ zWgq)KmXPiK_+8h1o%6WQwLZ>u-{<__KaH8s_w#+fU$5u$wYwF$zO_|IgQ^zVJ_rRm z#vP6DwP}J;H}AdGsXy#lOd4_b00jU0ia^KK>@Oe^6%FZ)|?M zvir|p@a(>>WB>}rLxNAq9MB0bd{wE}pA$!968}vIdq8_}pra;>Irz8Nxmz=pQm>%j zLb?(Nl5PFQBadn;91aw|SI{^b0)3OPT+g;kyA2<41p<6*z$mec?VkqaBY2KrU>ie~ zi*u1qqwK-mA>}(Vc}iB1t|^TnKQm@qNyXr-{NLYHbP=S z{Z^!nvUd*21ket)lbo%B6IFCXIT%W8GYXIl-h$G7sw~F?7Kt_~M0qv?7b57QSMmdR zErwGqf+Ya6AziZW)ci}Pi|Ts?t)p`@j)oxQR;vb&3+t6o=aK#!e;*BZ@0VC8+ByjmO@Dlp(3EVb=9r~-0zU6 z#9Se3Ef=btP(xEJb|VlR(t#UWKYEDV?Qw-v&imh|ei^RED3A_w1RLff3zNsT_Bh32 zn0|_YRW4{(XJ(_XebN^>nr>qt2kudmmZ0Ph2%pUp;!+ z_o9ANlkm$qF6}kb(+iQJ1TJyV{EuO*cu2t96a)|G|FQ*GIRFU2n$0FwbQLEV&s z;Re(!iA>=N{j~D1VUMh*`9(k+McoQ!4C1I)D5LF>{6btYalu%$`;(!(vZEJ62AM{bF zdRo2AYgQA+{hDi&hEWoh!%F%!jdlDtaPGoOjCQP$r+%J>?bPafA5(Q#e(yAOUGaFS z$uia3$e@~H3^(xQGe%JB6d!#rx|Ys)IB69tAr9v6!F{8QUn=Eig50XAlq4pp8Rzv0Ey5ig+}p zRDNi<@NQ{$Wk~GS;CB48kVwH&n=*t>E_0xIcyR3L`}G-{--_Qw0c?-`htwAXu$_W` z^&X@*yy*?JF8`SAeCS((W$L>{Jw@|E{xk}pBnc2E)ZCfE3s>P-xP%R5flkkv4z&H- z=;5&9@_9i#W$4xSZ4cQG;05XbbnTL^(ETSnG`(x>_)?}!+a;k zue{=g->gHSs;@>yOE6kPOF=oBDnhhZG1KAe@d_z&R@c(4mlvOU12^19@s2v-{Seo; z?yLOt(8J?>P|23Wo4oK_vzgk(8Rb2^@$&M%;i4XOCp6sR@1d6A+zkN#{J$5#V&5bu z<+dlv7<_$Tu>Z&OAa;?K7grhAUm~^|bEo+9&y&)$xNd zMWzNi@B#1#>^<*t#CUvIi&EG*G@ZIYm-4i5@uB->xA@~A<0R1_a6_2feJu^J^!(ED zAquW7VH<*Y6RyzWK+7~ZDG;(mmsT1(zynb}{8eRQk8L6{&3AmHarVlqu=&Z>KB3|# zZs_DW(Z9v5>l2E;h{n2iRfgqF2u7oz+^s0o>_qmnYU6@~&@kqKhMEJX)@DL)e%w?e zgOBc8#)^yhy;#FEfF2Ckm%=-|WA1J7?3w%5r#Z#oaqh^l3iJ>4eX+2;GoVl3c-er+ zr4jBv;Yl4!++QHc5B}sSxW+0#A5WQfCA6+TnZgeSn{dFPzgPKQXSR{su+AU1P=71| z{UQ$^U7TGs=s%FigEDzuV47MGJFZjypjY0DjOAf-!@TW!b&^t~e*-+EwwO^0+{diH zxjl?|t+F74+@HIsUGtJZc6zH-l+-^oNU+?iYhjV#@jXT0L&Jk1U(c>o;^K#8!fmmYx{~h@HnKUBtk%m#I@U6H z)!GRID6tuA)o9j7sG^WP$$=7~z>6-HjSge~?XCA@wDk`*IvoEm40zrprsjtW=S^$V zeqaEMbo9gA+$VUmRH`G8bd0{|1et%d#rB&yskr>Og~L-l?YD_cc*gFtObJ*v+fIke z#R0yz|1a(cjA^eSTO^{K7EWNZwio=eQ@Ft}igv z0?ERom(K{l1}P>acuH+Z15KjN{nUlF7)If@Ehb$`yn?PPTH&s&liW_Oaud!8GyBOM z$2}jiByTy#w5ohIymoJW%%l1!SGMjLG5aq>cs#>1wuqO{GK_oQD*QbBdspBO&dl4i zFi*~l3&k?6+{VSZR9`2!*{&0jy z^NK58ZUQ3YOH!LPmF_eN^3B|cBi3ZrlGRdSKrCZtX#PzM{i*iw0o8?Sn!83J}OjpV8NQV=|uRu?3Jr~}BI|A{G1 zCk+6&UjSA}PPT!a#~c;g31~x`T_ck@GaSs%YMo&A3>J=81bLbtefWt#QKC zPJUlB(;>P{SqwowERMaliwOmm`ZQMVk5&(FUWi4;L z#Naw*K=TgBrUoMILUw9oMcVs&LnSE>G?r(0&;B@(G+^=m{u@QicJ#>jW;IePgwC9F zIa&yVZ7PU-NYnkWZn0m5B2zHG2ASr3cmj(hM*Bv9&To~nT)jRT!bCL8TJ1z6aD{^j z`wD*V0QY|Hv3}|u2a+gmWO+lHXhQ9EQz7Fn0WcAY>#ojy|Fs2b`rxXWvZ~qG)47UUu*kudE%3o zBZZc2Df&QLy9Rsd{kv%`OHM3Nk7vj`ZD#N4Nu2sSYjUQ3Asy6~lRH)yk%!9G4|)2x zW$&DL3)F$b)`0hZWM%9sHH!gs%V1K38`n{!5!&F$1k!)o^Uq)tq~2b4%(JM5vct{c z<^b|?8c$Wv!Mai@F}cz$CBy!aiXSOdM)&3icA5=#PM-e~YdCgAj!WWOpaFg)0A#uo zjJXV$TP~?F^AO?kfIdii>wD{!1&DG`u`8o#gm2@&>#TF`WWFF@Ymkkw0rSS<2&c5n z${S19d-;I2NLd*wFWzGS^5Mfi1&iPvr{cKy@cq>Q^D3fnMUwMLPzv+<#uG-zy6V8g zYyo0}mYFjgpH;mEokn_Ga!uEt3E#D7{%Y`aQ&m_sb3ZT;-5%#LmHDlk4a+r%Tk zeSzt}V0+5Sww(&c z3~72-jk8|wzsA6_aKX!vzMyZMnX{D>*llmb6NP{VeeKx@Zycc z-bVSJ9pw46A6SQszxw<3G(@EsE|y0(E%sC_kDq~yo7(RMA0snr-HT+iH+*o^!C9AJ zR~`23cw{%|wA54HrT_2)71t?YIv&!I3x$ z^i4w1BXf|1(#mGgO@V=zhXrdXJOu$9kj(Sb5PkzJ;r4Se?9|yumpxhh5Ni-(3&a)6 zGKVP0x9$XAklUyv=HOt@Mkp_*>qk`$%H3Xg85v z9pR0$O4HJxG4BsE^zv@&6cUXFSSk~2@xq)0Uf2@!Ks@q@iAR1E+rjzid)PG9j`Wt1 zOKIstvB^yEuKx# zi7SetAf-T_pA2pw&A}L>Ct5DfFBWkCx;^(P6=5rjj|Y1tqL5t#$5S*G9(N8pnX$@z zA=pv*6pEXiB|zl*fp~g8hSEHZos-Szl(@9?*$;iiGY1V^xx}ToHK$fj0%kpbf~2?a zKsWmRD$}$Dg!jeG%)5J;v5Y)ulAcF+csCrTNa@zEYU)7>CN?i;EsJ^d?u%3@< z0aFBC{B@~c=b4s6a_EJV0)nJ$(}vuXpvpleyP>*-S2u7DVu$Z?wC>vO-9v`GX2Ok+ zyK*qrrYIO~3v>2k@}nE{XbtaeWp+hq^&f4N+WCWoOZ|7KV?eFdDJwDMOfV(~#DJZf z!z`)nQqSf%U-~p+!f{~%Vn)EsYzRpf9E2T}qH5z9>C7l~ka2R~?}dVMiia#6su|R&E=LwL8U}96UPl?25y8 z6+Ro82Oz;9ivgoJ?G#9J_1%K^dr*ra{_-VyAqj-Hy+)qah64|501v6vYgzv1Xj76uC$Hf|H_|-sa5FA2vxCVwECGy@3{XM{PzCV%!jP^5Fv++Uh#~xy zqEW2G^&dl@^+m|o;7|8EV<7X3AaWadK2!fyIv@^>(WZ_RDFTCqcE;q#b$euDv_>i& z>VBF%do$}!sTtK5hD@`>^xHtb(_A6ZK8S(l$kpoDOLOR^e90cF+T2Suj<_Lz?wz%L zh_-1hGZT^XkK(v`rd?vR6&kV~v3fF^V`@(=8jPVw2~>whAefgb8?~fTBri!|ABB?^ z#2dMfg%pdXnyX_i63*}p>jp(IQ7fPfz`b?Hm-lbkZl?gZ1P&%py;?E*Y;VpWRdqs* z`eWj4u?YwS*#&Vl@Rbp5%~CY=j~V5-X%%pg`rtih(rgE|v8jp$0|0Cs5re>u$N1GDMUQ(UEPTp;=#Kx)j$G&8 z?{-$zpBMm!K%-pATkU>Ic`v)t+eV-%lQsB6#YgQBTOaoG9#|SPM=viQ!s+ta9qB8t zitPBs)1el;NJlVn#Zs@h1xu;;CFN@7VT%y>9C;FlT111GzxHN0=kfZr26VCYi?l<* z3Arb$W5p*OPQ>M8cxUpCcJZ!}11avpU%C*n~$8Jh(V_PkRr6IA+8jKEj5F?ch^ zOMeS+rvzQGE6?e6!_Srro=^;Xu zKB@pC5DLafV0TUwLTH7ozQ%pDaHp_MS5B}J;+8jDxz&unL|A#hXM<1=YcEt)N`ux$ z624AA`2IHad@W0fZdk1-_-?j#ve$NZ^@kmqGW7Ok?T3Itz;{6{d{_otmJ&mLO-Ee- zY1PybP~-w+GXa9s7|s!NUOe7@J>`S7iBc~ybew$@mN&k0_gWY$82Rw(pRX+EF7pn~ zX0S*%8>I-kE%IXs$L6Y_t$$Y&P+)UNI?mT+9eJ^v(l+teOqKiE?r~F;>uhB5u6K*wJafr> zDZ?8Yb*osI+F1h>>K*@U>4I3?_|&|k*};$MzzhIS}{?mokdM z=VQ-t%SE&}1Z*1lr<f~yI2bVm`t;`<4N7hz^^otgFft8))@%Ms`x)i z=t^Q9RCy-15p{PAX%p5|L-zpA_e!xK#INop$FVR?>AJbFLh-ZBljPC5gTki@@4cV) ztJ(P0RUAX(EC=l{>w6+Hc(b3drPLOw2{fxp4f+U$vua|VJu}7wMj`Yps8~9FPO4mb zqZj^E?&s&O`^|k=Zu1@swaP~v zzgWB97dvF?Yg>KXzvX)6;p4C_uawhaHIqe#J(oC$yfpU>K_`X{!)(b3kazGqrr6BX zrp=^XpD>g!h^y}Wzi{0@h9s29en&k09>wTNWZkja$BAMcX(Kp5zvGk2*34F<;Q1?tIKcv-f{=;3u%u=*+TtDX{Q902s^vJC@JP#8lXcM7@ zxF^?))??#mphv`hqcQ*H+MenQy$bS+3(yps9EPk6jT_Z*^r)xbAI8~aO1#!0G1Zy| zGp^iMaw;6OKF=c3BEyYKC04H|vIlzk)!#CCK2MlU za3SV?uAfxq#pl+qvP@r2p1Ms#h4B3(Ef2&aKOoV3t?D9cfZV|R+ZF??EvvEp2oK>2 z*lR;d1@T9>eqf+LbF}xVQsQ3vLg0fi?nDT&PwFXblKW~-geEouK`oyJj06;X46v$S zfM*9;ez=hS7?}(jY%SuNBdJPtFSKlh<-;(D>~mT0B)vI{1zP zE%G@QGrtSA_guAW?4A^!-m;M=g8)n4L5rKo3B)bUg6O6OUksb7-!@z#r-8`sl6t>QLIq8bF!KTfd2pra-TH{n}Bo*QXs<&unSkOcVyWzTZ8DHCp=`X>SHJ`MLKZ1~U zY%Eei&WCfVC{l90VX2vfDitiEMkHP7O+`s`A|=3s%0sTsw2S z9c<0cIabkDSC1|Lz>4w%fC7GHPO$$y8Ge>5DY5%ryj}NCM7HjVutm-0LKEBa8wgkH z>nX!*gqLzahda)gOss=A3h}>SeWNCF=lN9u9cj9m=qhza{fw()efXgVJjkc0j<2CG z7}6s>07c*1Tn#Zx=!PTmwY#YiOZ2^%j@T(wl%l+?->QNzG{PdqK~QSMd}FGjU6N>A zcw_x<%|Tm%JP0SS?O=;e-r#{=F$TH}q~77`{|X7Fx!Q6R`Gf&L^D4WSRv>I=sZbpV zd`UNX;=dPp36Ng+qH`9ITwuf^jVLZ6t9mr!a)7MgQ335Xc<-Ul)Ik6qC!KT~K#qVw z< zRO%pt^IlmSn;YhX3-%)bd518V zBRhm9UY~AB%$k;94ZawNj&iU1!Y$RzGlpRR;v-;?P2@6VTf3OfzVM@KkVgS)2j?}Z%tPpWdF?=6gwPW=M7q9c?|V!rb2U$W(w z7|Rv$1TWQC(+kbYpp9=U9f`UDW^!PCglJ*(TfNoH6BJ5i?ZoO zZVafCNRXwg!Ma)v(#m;Dbg8tshnYi~p*ymBzPD}>gsED;TEcGnPE8gVz7(E#XPNvx zckra26n?GCVw)apD1%d6(_25;`3`(5(>o<>f#O8CljDt&?u|2r*Yx1`O@ZYCjOgSD zp2e_qJiA~f6~MkiM6pRF-A`u7geDeuYNXU6_JJih>ysERDnJKeK#SVx(?g~ znjejb8_mFH3M=VuWXOGJZ<^8lAnf6m6-Qv5uc{Bej{!Id_Cd#bStBqB`cc~}#jaW` zFhJa{qTh+$v{P7*f5|b|n1;>IB4LUcfW2X>wb{nL2B8n2l5N}GwXm<~H$rMriE4-C zuOW;JrTpoLF#_5C3GY9E7ts=4yw`@~7hNiPBRZ~>Z3-6l$9Q6tPbhoYMfkaZKUvH|FgP;6CMGbIiq!%CK8}ml|~21 zN>Su5F)$WfNeA_T6*WL0Bx7@T*?-DdIMM$)P1f5tYl*?!6lkv`+HN;Ockj+sst&^c zq!j>F_z`B?YvRG~@`ccMN1M8DEH_@R$E;cuKiO#9jbVC3rbUXU9lzvC@l{M)9?{0t zrm7Xz;oE7LTNFo#eOViyZ#bh^ckdA8XlqJ`0>M6E1Wzf&5U0v}iV;p8at|JuM5xG- zc#V0Mstoc{t4b)n)Q$37`gobMbW`h6bjTR0U|Xq7gX!yivYtw=hxv-@TUMkU{wpl{ z%F6tH+V$cJ3j2c-q~p)Hp18k`ALX`KN*kB|FH-{r8O&Ygn4eXO#*->gXOD} z1W?X6&}6zP%>yGIv5QNDqAMg?AAe`}=?eH*{piu))q~1I`sw-H$PZ3OX=VrSA`9iw zx9A~LL=iaa_vb213d)&2a_2fk404NlL6n5G{l$Air>62TiNZ9=<-S0r%!Q`fhuOtk z_|FOB5ZP#?L4s#{6Bl*l@*Pv(U$ubB@@)Zn)oy6y$i?AU z>u82$UXfNj*Gr;H4?i#eTCHWh^ofUf=~Gi5zprzIkAVFSy$zHI%z+3zkQ7hm^IfY{ z=?QrPSm^)-|A|b_#aD6y8+046=l=H%k$_K{b=>*`B43Z|pRnCEfYF|(_r?}r1P=UL zDtWyRPx2&7wrsZ2Fh)*{rkxGohrRrgD7N~O*O-m%`%Pj^Q0%1mcSt0a=pw1R>jS%N zEWxPNpMA`UQ_i06nin7A=*>$L_js;_8)*4Mk3q9W4O^@oA2Lke`9_y2a@p!5B(r&f z`-l7A%BSbWLajeSGMYJKWvuCtZ|P{7-K1=3d9B>P)mm#f`5ooAajB}KZQlMYY;foL zaP<7if#kI8`kv6lDL&94x>~V>C9WjdY zi%0SI9$A%}k`{n4W78-nKlSOstBC-Z&FMJb8>Mx9Iq%J$8;;4&^rK5RPo=b7fqd%E zjS!!z&h60Ezvo{(lKNgNh=Mk&ldhsd$kQy@C=`6wwW^7)+vkR04V)9{ha-AbYZcU2 z)~lo>j6YV%nSF#^rb1g-g$cWcl6=X`GCskGuGHoUOH3(2%b2P!3=D&rH0zu9;c7`7 zYC!e}M095Y@o>v#z~FM?4E^Dq*gVQNL(A?C|cP^2%r988w`s|2Rutq+dG9SJz8;&a8Z`v!wuiUPDo!n7oHZ2iY~$uMK% zoFWh3@-_D^pd8L(Wde3U5L)PF017?+YwXez7pvN}Ps`M&ld&gFT1qKYzmQ>0&F+-_ z!mKI|=y2(JP2#LFcHK>ue1e=wnl*K6R5|usa^rfmHTihzhZaa`5c40&rolD zv|_$VwiJ2?>V9rs77CN~JNffqda9ogX*&Q_U}k!>mDe7_$i}8r zhw2kAmuU~!cVy&^m4BYhy2)pY=!%25mi*$~OOq@8fbnO#P<-Vp1Qo@FKYX5q`UOTN z3~8yj=nns}OA_rls)>b~PJ%;CtunFD`ANFmzb%)~w5mi~KMu2YKbO^lcnh*PO~g3j ziWu2F1sU^dj|ksf?2;MVUdKZJ(t4!N#i5sY+Ze=}$2hSKqhrnP6J@F7|~K{*Ug4G=)m>yy$5wN65^i?)F$#+s(=hxIcN z0C|6Xu~GG-IC;{{edqAEkHMB(NHj1x&=$90m2^&M!a5+aB$9ZI`~kZRG$7FgIbLKi?yE&xLX1R!l&)ZEUho@ z78VVDnwndw;so--LRLH+k-$hFo##z(RDrnW`AvMQKH}FBO^PZXA_RO;f3#}aE$gt0 zGftU_+%y8j(m`2pJ>tUeF-rX+(J?K0k{DL660Z7RiMI+t8QexXg~T!0nS6vysnff( zcIt%g3n93*W7A~p!%&lr)Co38%&I&l#y3B~<-t4Dx+{94cCw$p9y0N_zy7n~dR<(D z@od@hvHi@qdO~66pk0AU=FmS=ce*pBG{UXB_7aI_)>o9GiDwF#geMT3Y@GItBaiC9 zjv|IR3ow>`Aap8-%opyI!_ozS(Dd9_Y=F!K*H<4oaxu5{0zVS~`Y)8>Y=N_S{74bJ6}6FHkSTc(n29Okm^9+oT&?r5S(-fy=v%U;yAHZiP4@P9_U{Xb{XT58AH-d2a5vy?*-3awZ0s(GHm+kO#SD+ERG#eN zJtb}th_B%Vm$eXP8Fw-(AMpapH|rHG1R&YS0_hkJ;%N)mBgo)++m@32RD&@D_BbVa zxG7c|rw?+`tXdUmvo*>g8a<5h#CuP7I-%ow<_RDMZUPY7jJ?gWzYsbiz)Z?W06WJ& z8$#Nkj}n3csXSodC6{-30*oX)Zf`!i0bcf2-gti+)Bz}R(@;~rh4&#Tf( z%Ji0)H(Gk~s~QoZaGZB*^(p&b18ljUonBnkH`acxG3nMnfA)JV0rz36=hx80s9(|g ze&ZP$elpOcS`gF0MFOmX&8tZI-XDj|S?zde;n`Tpc;>=szz6YnqUXn%G~l@|zhzH> zmWEt&Gm3v6334*=nmBF*BZz%ErgP#w!f2hR({KN>?sh~ty-{@1w_;C^eoTku4UIV)oa4Werw=u zpFG;S0(kA2#<#0AQUL%Cy9|S&WDzQD5H6p3iJTQWgKC zB+dVBKx1Zc6>@^}sMGr3fX)0$Jdq$;Pw`01_W=tshM`a|(-Xprm$|{pIvpV@_1%oj zV1|}}X4TAXi^LEiZ35F*y7^XSm6Lm{*Qyx_o*17Jc_!`m&-+m8;t12}So``Cxq~F0#3AmjT9PgQ}k>C-0s_E+5{odMX zVC^QM60Z86V{9w-PV2vAZ`c$) zy+kphg`LSr1=7!R2kCp$7AtzIdHf)u=eHz<-{}#$>JsCm4xwuG@(mr<_PSEqSs^ zm+WrQKXOJQ3nZ57qTuzS{{iy|QR7P<0f5kn=ZUPBhBJ$uJq7^`3HK0&+T9$ZHObg8 zAl@tSCFsE`U(>K^!>y=v?XuKz~DslddCN_@qxtJyHCEkJv+t zlLK{3=Z4}K=j9qThvs6fegm4X8+MV)t+Njd2XAr&CP8-XacG?&U|#$Y193d{vwmkM z=c$rB__XVIGA!2fBL7p?p`h}Q{k`K~?z!YNCz|#_!C&zZaD&iu3Q1$|5*KY(jiBX$ zi~1xIB3?l&=!xRE{@TYhZxY*HCffB2K#A<;&uim}uo5EsE1T0iqAM@Hb>S0rRx?7< z!GAmShV!&+sXXExs_rQS6S{*=3YSpKO8lstaHfSKmKr65?%>dIDGQy~%Zklx##508 z0efnMH1&8~Xpn!j@*}q0pLBH|6K$j4ZmZj^-h^#g+|ID_7T7=*%L+M z=KC=iz#y3hAKoTDt$P)$MM?zqOadm|64)9wzKIBt!;AaHY@aYZes2whOh2{j8uIfE zSh-FAsBZfCv?`|JTA^3TF{Up|Lu0(*tHO?!m0Kk2=eKl-LZbkn%Pv5-C^q$KRHmdl ziF7lG=fjBs3J0dF8t)=!G9MPDQ_8A8O5#+^T=u$o?*m^Tc{ctHLAoH*X>t zemr+}hgw15H=EDuOuaizeO$e;GfDe*ftJyco2W>O_;5P_Nd!qPK_YWy0%I5xnrjfb z{~@3I|L9a!%M0%|nFa+Z|G0Aoa4G@>I&nc2GbRHcx0@Qd)8!e)JS~Fwqh0(Aw|jm& z>_O&+(}A(EAw!*my)+w~@9(OatSo+Q!>2_^+1DuqK`7E!)DlIsEm%bw@dY_YQ~h)) z2&fy?^itLdSjlh^@q zF)B&&pIS<)CEY8VV{Z0A&dJ3uT#RKXs7PD}8AToFXAiPBSl3-w^hIl)ep+6XYT_#VXxtrsECu1z-1tObI;i75C|yzN<9@%PJk|VlrQPL($kN+UPzAIus?v zEzgX4hwR|NgDBN!?bruHwWKF7TiTb)E?8YGO{+*)L@Y9v$}A|Br?rvlrRygt&*WYZ zkPaS^P#CRo_*wI8h%(R)o3i?cn!+c%gg#3HpaqxWY+@kF9IYVyi%lapfD3u0cm<*D z!wjE*aBjOmsq4N@{=@|+2#{DsISbk_GK1+F2j2ya@Uv0K|CW3niV=vp#V>2;GQ?{j z99gx}i$H3nD>fcEBrKHm0~3YFY)8j3&~vo9Me3Z2A0Le&#x?nXj9Do32?LnMmht*b zkRJTOr8N&5z93I&h&nk~NYT`MX7*yHo96wEKR-oowJd1Aj9g|-YuWn}=$f`ei8D<# zX>-K=PN)1WKx6tv((!gAWbQF0QnfNeu2YJvSM%z#_dZT6Hh1ztP?-xKoBoaK2HpYD z3zvVCXjer&!21d=Z`48M;X;A91E%2aLWl9$T0`lf-G}jHvaU9EbV&0!E8Oz7ozM;3 z>-SPYyI=Mq62+|OfXzGW4ieZfzC+n8 z&s_F&pdK7}M}LZY{-ON+j~0w@XAsXCX^#x zJOn94;YiB3fhChkh#HGflGEZz=Mq z41KGCv6&A%VHN+GJ7oQqQ*JBvfxz>fNN}+~UC7<%K{AF#4Dh&Q#m>_=-yO=)o-rv% zTP)I!YkOf8{A)^)r74IGIoC){&x34){H8$o-jCd4U!y(fa%G1HsQ}yK5jd9$CL{^P zD@{p~tRp{lu?@)~UU;cngsB>-gSOWe!=%uhFDkEn@F6OQ8mfOCd;WiLWPR!&Ncz?) zY%7fi;m~neA+E0&7)wV1jPgpc_tOU`Uq?B4*I>Ih>meOQqTeuQT%DL^P+lEHYiz_c zIg9-J*(4Fm+{uAW0miR7A+CA?7uB!FW#Sc@UHuntq_jPLPp-EfE7oRy;#uYf?)Y_x z&M1cE2YYX{6WS6OXaXoN*wDI`Qgm}4mzSB&f6=L|Y#Dfxgu?G%O4pjv2tzS`gbea* zx`mb@B>E{(K`}RQTIlW3BD@I`^6^{xC07Ai;!b2?M_;T)piTq`VLZ&V1h0~xR9@q6 z-|UKw3jq4`WE9l!X7^cEsrrOxD$T4C1e4SeHDs+7Zas)SjzhF1z^Dt{<)@lu0fM%& zyxvVU79!@_-3=*$p|mqzg`z)}sL)nO;oobWrQZ1E5#irlcH;rdETqfe1Nz-8MABd5 zLV@1fD4JXq>m~ZPkF{vlMSjE%+ic=Z1X3X zNM1(!$Y;CK?|^4tC0~D(d0hz~%WMryHV*`>{ITzBz$+8;`BaLp0gtTXY*hWR2LxqL zSfplDq^qj8bPl8R##6iq+Y~{`{MzNOpDLEp|B-Fcp)S@5w-$xQA-&DBfGKtH{gz0B zc~)GDOCIV{;lPW8^j0wBzREUOH))>FuVM>%$KwVZGpp}uB~$5krY z7NUj-e2DkcIBZmV_6Mifb)F`WXXxbwSOT#OLI`&LOD#Pj+;duAW0*M&62Tp@orE4y zE%zaa+%ESbsOHZMt-)xbK+RuJW#KvNpe*b6hq?FL5n2(8=;TEXw&EN{hArEvv2+j# zsmf)L2#PQ(+=?hnq7x%`Z*KLh6S9kpWm>r7G(9Z`9hrsCuWn!6FvDF}i`568-iaaDtCD3`Na6orU|zO)>R)~ z+2UFMI{#FvElpmay@SNr532$7x|LYqdsVy z15i@%Wci18l)%CjgvR@)rLf;H0f z13Y1Wt$0jQeo3T7Rq#)7U9zMNZlf}%^%8K$+On67ft!E}tw5Vd$l?w9+Jw_B*BHcL z>CI1W9Lb=QP$dMW-i@WPXw=#F}1qLHRN(o>W~xZMyfrJvSP}vTyZoBj#D6 z;9&stX|0OfDk7%auwRDG5#IIoo7Oh z#hr&V;5-LN7%n8#hG6*9$ zBJci9F{p9S@QFKm8~3|3Cm$T&aBcANf;Y?Fw;r-3bp!lT}N%G5~=V#e-IE24r+!X%u}q?=yO!5 z43OUUgR5KK+)B+%T^Gw|~uZs#bQPa{8Q=C#qUu>$_^;vI|W*I#6*yjz?!v^t8s z>!YgC^eEFL5nF)lkwP4sX6^oA>$<5BGZa_n_EaH(v6)N`r>4l8`v0R*`M+TAnf`9@ zrb;F+AZ#(+l8uC&`LcjoJ?dZ6le@JoQtkoFL?H!)QRW_GkxA@YxV33T5ffqCiiUYk zHs~Wl@Jfe>R>Z2#=G)&?(I`0|_BVNRXAPXNU+Xd}ysOkVDH2{f@iD4)i(GmPE0mY! zI?Xup;$40*K?hzCMB7{cByJT$0JXhdwIhE}ar&-J$kY>90wY`KESHX)Ze`0KZwsod z7IN(u=a{AgS_iyg;`mr)Xm60oP6%1a=(<`s=c#gQ0-VyME6=co?n=C^-!EYTdG?r& zge2xF#SRZmo?!k=dvaT56oGqgPbI#V|^ya@MAophjcub_!SxZ@vRj8W-$;sF<8L=B4cN z+!Iexl?%}>@{5+aXCEJ&KjW!Ak;(#G;@SWz=8GlgXDoWQBKlKA+9RVKR zuSjzA`mj7oa7WC80Inl_)ldth0pG_%jsH+#j%h5=mQ!`0XTNcLG5Ts+7kpi8}$Hr@vRzb39=_U!&8%Jf-C%fUz6}ug5-XcB@)dM|0awbCC~T z2nSLKrDDvbTB z5N_CRI1)CHV-js z9Mg#j<|(m#+z({1^1I`ep$JiYkx;6FstUxHIt7Wsy+-^=$*Mc4ArUi@X$#1*i-BNA zobsn|5RAC6NBtbTvkChFSU1Je^?+#f6JYqb3|^H&w3P#9W!HBZ2zw$cOv}wR63Xc& zrFN;>NUD$PT2B%=+R7ijXT}uYCe8q&7DyO&7-e2Ft}kp_utYOfWK>Dp ze;1K(#Qamac@BSj2`JefLk2mR@4XYjDn^{kY{g0kJqQ~GsT%plw6^khxuGjZtdX9p zQQa%!(o#xV8<#|zG3?E9D|v>a0Df1ffhNz>pZQ|Af#3h)BN(Yz`>=zEf{qK4Pp?X0 zDpiZ0QceGCx)Y>)qu>~Es~P%}=1;Cg|Xld@<8f_fDvs6S9w& zH4I!toIXkgInt}DIZqd%ikfpY-;T805SjH2vCLQQ4?P>r$p7nnOCdVfy-0?1wh zVi|K=Om@T7WBfDpKj9E-z;Q_9>PwEl-PT610`!~zmX7teezAfQZ~U0|S(>BIDUUTw5LpoKhN)ck_;cXZ$RiQ#jsUs!!R7kUC-jJ0 z-PWWKrs?yR35~WU30B%kH_P>rh6$dXqRquCC16bx6@kdpzPWV%MY3WLWPn#`%aIDL zbt2hBrt|UU(F4*qfMBr5&yq$P~ zRUjq|b@KAh@%i!sfrhm}+FMl38+MQ&YsfLxJW~)Y1c7B&OQs!a+tNhV3SUu>^{ALF z(EBW<{$4FKT`I{{J?!(G*XO(Fw^Gs5ayd0)s4M!}8Yl;&?40V%rx+xG)V;QSpL={= z%V+(hw5#sku1o(Y%aGLk_~s8XE)CO1$N6O|b%gXL4p_DtI*Oau%Uj7KBJ|E2eJ@Tu2oIRHHoGT7io}#*Htjmo z!RnRNSKP7Rr0v$|9E~9tSBLHgcdH9*)AQSz)U=kO{oky7lEo$=U+LULjIQ&3mb%(D zPYKCjUwA|JZT$|;M7p_YzJf{V?C5l_#!Y_0P-H9G?P$d;NwMy?lkBp{v7AYLbY`ls z8YkO6NHMEWwj&rnuAfn{9-XEx^5zwuh-h-Km!WuZ?@8vFo2}RU_05}a30 zZI6hW*HS7!FdvM<#6CrQ3n7|+Hdzu0`pIy66rp2Q{{wOPC-6}P7r&qz`Ra>Nj}Ktv zNsWGJU+r5V_Qf(cp7l~u=&;%)!a2`@kSR3#`+T9V_e69r-Kg`&V6)0@QllxkLn1Wg ze#W8_d;|>ZhGS6<_ny^7C?qErU7lsC+BI2|D;Jz&BE$x5bG0aWMDo7582;X6Jh1~N z`~F*!p)mG_vVd$0>l#n;HihcS;;c;lBl38jH-F0-IHEhd5yuy;LRz09`)*BTbV&Iy zA_Pixs5C3j(+mxp@_tc1e9dij{n0F4!^cb0N*HX$UvbVL#ctdrT{nDSUE>meg%oW| z&uWN5!!^0}UEBXb+k1XB^+s=>N)ZB)mJk9G2pyyb1VU4a6s3b=s6wJ5QY5s{^h+m! z5I__n9Tl(u5|YD7c(zr&6SzDaPG6@BHH|L`mwxMfLLGo-Vm`!O8?qkQ7a(w{)-nQh@ecgIMw@k1Pohjavsb$g z!Gtm4ad6+@n)ibOz_#sG!gQ};@tKWCGya&IJoLJCpBcsDB8&Y7m;55feQvHIDlaIT z7DU!=8MXXJQ0I88c;%cKV&p-Sft(`dDX2|Pyr_SVV+KBcbt#Fr#_YB&UYYzD7siJt z?ln7Xi^8X8ke27g9>8ryf~=6 z=%F>p&E!s9h52r>E!0<=Ka9&69Azcij=W1dk6BDJge{mc5 zSJhHzz0w5U;r5@0t1?`CyUlp}39UCcM?h13z*=6<=BGw;Fr{HO2QJ?NPL|DjNq9K7 z(>Z{Qu^%7^)fY@*RmdNdkBHMFB}})!uZMl#yAJDTYghISqoA+UlZ}N-5AO>tUs6@$ zv{@Q68 zn{%2yh1JebJLld|j$4Lzwv=X~!pfSX=>1WMnCuS6Ax$>Y{?{3g-UxCeUHRN@9;(NK zg~m4f?Z)aahdns!xx%+dR502~ZTDNQkD@o=dGK^5!pjB!)qGj%$jQ_MtUTWu)Tk!o zVf`UBF(U<2I>_{OQ01qr{=LSc=gXT3Z$^61GcXW#0_Wr|M7z=d1}95^d$zIln1Z!P z$`({;8pOd|tQAWlKg3>7Ghv>I&!^#Y&Auxi2_!3=#JjAZ)@cp1R%7T!7KVg1UoV^q z0`tbJ^}YQng=50anC+~+l?UxjpI6Q&oj{*zyaj6=zqF*IVs>QP2Pqo6&f8MAA-<(%VC`+j!*WkrfS z|KHiGSFajVGnvt&Vz&#D$dC*k{!Poh_4kmA?DSpugZoAt__GWB1W5BuMR7WpYyiA^ z=y;YN&STstveqDuoN01Voovg*w0T&v+F$0l$F#`dCY<*3#GgUiDZGDNbKhtJ_v`Ry z{dLJCa{m51JUHmNh4dikfvOaL=8^d9PO^sG>s(oGcLNIzW4t%`U5KO{-+)8=qA|dV zGlf3zH1370BauI@;CzkWsa|zklmzpgM%}C{h{$MV2Ly%QuU0gH4OqM7H!V3Yt|EDN zF?SQVI}t@rvW{B%wpx)l4h6i@y!9aAqDNx?I+9gYp%)kYSQzKo_s#i{kH9qNvSKzy zjNX3<5uMuy$z0v%`0Jq2q81VRUQeNMY`;|l%e2}6%!l%M_|}?@!y#fiTtHauERwHN zdhCX{yAvZaW+d@7;-2oQptaj|q_#{Uqr^gAuq>7#cBqbRJggV5m?}GE>`LeCHO?h; zcA9j4t^IxH_`oGUvztKwEzAD-AV2Z7TfAj~kI>z`sDwd}?GNd`0riW2eO@}7_+!oew>*BR`W?DKpxYk|t%c+QUYOI{AcU`R~VgbaFb@eIUR<#vK zKwNB^8`^4*cw{;II??!uZg@y@bvn`o-pS2CvDEJDn6~=aXP{(P_EbYlH@{*LaX_ls z{z6blHzf$FBwOXC$VM}dKE&A=49ivp5>kfEeqskHI}+)2Aa6KtGVsowl$E-#_hgHH zitoQXBj@sOo|!0XHB)RhTo}uRJ>$>7D_?Wn`*23U=aHjSe)Ur$hO}<~PG_r^kk5Es zI>E$8L(oOMg8^f~YoM0M2c<^7C8*F^u>(hc)GnHp;mXthq1zViH+ayDCnr{h@7zBq zd~OZC?Io1(onp$o*9d(9+?ot`{Wbi8{@HHNMriyF#f(Wdc;aN;b`?d%%T~S4*bvd(U5ES*LS*kKg|4R zeqLG-#5g=x$Zs_S`}$@=^MckvSi%=3Hl5L+XYlI69kobL{uMKqgG(ksYs2?p%wo3+ zrus$sE#-M4D}?`0M5$O3DOGGqGEA-`vfM_jKd@Vb3t<}mN%mAO2ko7t5(L+E0DTfbihRd$^pG(ci3RZ*E%}u85HHYF-tqUHq=YXo$`*T11z}nnz)zTOjzUE%YKnfzU zvMmOZKd)jotyANVt!i@~jleP`e*O|UafJ@8Lhd(Pfc@ldU|4##L5666e(e{G*5IRnoT8Q9&6j?7Q`aa8cn zUs`Lc0Ex>uj?~>Zj`8bBG8AV#OfwQTz!g)oKV`wHT0r&2IKD?%H)Q@hwX+2^stYA*`1agS93X)J~ z!IvhZMyz<5XvzA02qxW7q)Nc;{2`VG)?K#EGlPBnv)_MDPMHkgPJ(&cFvo&Pq2~5t z!qP1%6gpL(SdE}Q9g_?GENNcA>cA;q`*#={3gg(0U^7w;a!incjwJCH z@0B$d?U`4_{5jy)m@Yy)@>vTUQ$6umT(n_aJch^6Io|Y?eG=)|AnJ`cDe!@#7CGi? zS)mABT&V<|poYav6Ox3-QFRYu$5N&>M5`sTl$h;&VP$R+c*U$58z(=k3PnjFxu5qI zJAVVE`%}IBA;BRFV7;9N!TOG5u3ORF?<=>g&Hedi9Kk|?3EamkBEnCh12Cj~$2 z10O=K4p*>Vj3@s0xt(>tG`DixOG1>A?WyrN=f;_NuN<9zSk?Xkx%QXr85}u-Ce~}F z(KK`Og3#(BdyT2aJfy6hb6S;h4dKUC=JEkr^K;J53{aWcUZ@1`-|0pOj zvlvKT{zr7H_H}BoooWtgxX9qk+nKGb_+KwVT9b`)d^B7boW1+4iNR@v)+V4XCOi_s zeTKcALj;kN_{yz27}Ndj+3>DT>jA>_U0`iDw4DVPNe TC-%f)B@mbi|jmL;{}z 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 literal 232003 zcmeFZRa{&_mpF*KL(t$B+}+)s;1*mGoZuP=?(XjHEE7a=l9=z z+1KTvZ&ls0bL!ObOQ^D<6fy!n0vH$=vW&F2Di|0901OPW4G!j|CF41^{pA5=A)+7x z238x52>Jy5QYSHyR#gB4^PmC)^9uw6yMJl&+Xn-4VFm*`Gy((TO#uVLvCn8z;eUBy zX{IG(uAl%$`%;Djg93*EgM2B0gF(FfVEikCzmz}xcYClE7}VcBU|@nT&zIfgfd6;T z9EktCg#hG0{-+Gt_S#Wv=J4eSv2CTU<*cP3&ue1$h4GWAov|6C+ZX%S4q*Ilyf4Ks zX3n2T+`fFab>ejsAp6^c_oe*W%tS`=w~Mol0GXD8GKrX-qZtVYBReBAnIHlQ2?@WW zsX4Ezxa7a#FEs%&OJ`?$UM412S641<{G-z(WV{R8U-K&IC> zOe~DdO#i20W^Pvh55r#Hybb#c*V}UZuaogATiQ9>y&%KU%0$N2+04=2@dYujn-pZ_ z|GV7(OOOBF`rBMej#g$b!2cc1@^AG2Z2RB+#q7SkEa&9(y4rvG|IfDn-Cxzr$?mhu z>+~OOt(^aBga51fe~fyCn^)P&&Fr(bxYZXk+rKOEaIo_;{U6`_?~!75pY0sg>_3^9 zy>9RCkpI#2zkB~(N9(`W;bLL_pX>aOH~&WRGriKm|DcOEqWjzWLUn=&{7nBv!GZ{? zEiDINV8UQB;v(v9;K$yuen|t3ob7V&&|;}1z!R5jb@y*)HU}HNStWpuf5}c^%U~{_X zzx25jd^oTDl`GaDOo9dn1>yhyKmNaP)4BdsRSCRe_oywf6Y z*Zq}Br^QO4hWWL2Z|7zv4tl%Wz6xq{fo8!?44c2x7=4i-2{~VGV^h(5ImwDyxCs8w z+uaPuKv4GgKitRh$jF5Fe9o5AM+ei*djLMrC`vF20n4$szQO6m=+Al!CWR5)f9Ky} z1GgQ2uTMvc0sBf2%0h6U8^LFRD{@27ROMsv^?GSxqr`-kfVplsWl=3snr0*W^K}~^ zHNVf|)_Mku31Fm`{`)^Po-#v-M67@6A=iJ|)f_d%1jcovVS*o=EeW{n0ouRJnroFJU$k`_C&KHFocoFu&Ci{8gxl z9mgJ?U7PC(@CkTb!8Rl?S@q(Kai|69E0%!!1YX={}h%{~pcYEh^1G>nfrq^@+M+Y`&{v-e!v@y7M zFW3SG_xQm6Y5o-~)cgyz-EPiAnW{$7c?Zsg^>cCQtPV*o#o`+Bccq?<%#T3=OImv>uwG3?q#OUDTtI1s+r_J|K=JPMozB0^^2*UU$j}`hP^Z**3B$1JD z(0F;8Cg|jlZ}9PV9>GLnw&kZ-qjwB{F(v%_51EnF?JpP9?!UM@MD&j(m*V_#{`_5j zdAE-|D#=i5QTh-ufNrk7S5U^(>`$4j2gkb$df$;~v6kwaLX?Sn6qcGf6Kxt-JSlZ& zfW+q*&F|Hnw}*(X1|APSLa9&j>pgrr|LF9Wl(5q8=2POVzi6C8h6v8O-C;WJx_Mws zoJ4npyd2w3n)|q5B~{efE|(>n8qpIn9t^ec`BvM61PWV@K;F5GyuS&ibLr#eLcgdA+No5ag)1t$l++&;GyK zZcYS|Mo0VS2A97zH*tqkhQ2f5lOWw~?>bQb*n0?bqR}YA$zEI73s4mS5}NfV!NsZl zQN{3hkPtkdzHiQ+Xt~NYTzQypKWVc`9nJsGdQNZ+-fdkx>oo|k8!*b0{B0=pWK-?C zY7t#3*7W|&E+fgXo3%ib(Odz5}y^?lY@pYJ#?_2K{1_Ad*ERy>Si_K%8d?RF-VLX zeGl9sh)JuUf|X&hk^96Wea>7{XW;RaXmQ$czxVL8S!4*RwI;0pcfXp@hKfCOmt&y+ z@>2`A_q-=Loj14rjGC^;GqteNRPF_xYUSDBUqvH=Ofq!w3AA0FFUV26s5Lth_72h0 zL8>2y=D*+ZuoW)$mj1k38mh-Mluwjy7ReK+Ng2yHzp^{&JW$H+e!Tv*r<=6@7dSYm zrkQ4afg>ny3{U?d;f8KybExtZDOs=g;8M#oD546|H0163ssAN7O3jyhNy( z0!sPv_zrJ{4~|qP8*F@?{wp`o;7p;e*e5P=-=Nln8;UkOI`8Ui>hhVbgz*ve!LQA5 zzgwM;v*#_PY-O)YgJV#Xja89yq{Tn=*N};^DyZA8KB+Nv!i=`crH`65kPC||q$EyP z-{tV29N65FjO$r!v%VWCbT#lE{M2l~3DgM;!+sOJG3Zm6T$3h$S+npeiG8oDWOmzV za5HbAn3#za{fN8q{XQgaX=6dXtBpv`^fEN3v3r1FcuD?N{0q@U8jk4 z-lNIr=i{5^wbtis+vnMEtU=1RP2hrOr2N|iBGfgXQTHd}yRiwOHMgGczeWP^g<+am%KV8zJPaWoKDq*6q7>Aq~&?PW_(&AAX79@6lLm&{N0J6s!{kfgZ z;AKhZ618XH@THTQlTn_Iy^>|N%yd3#pGy#ii@e=-4}(q&)jzVTYsHSgilD?nXG2B$ zLP(cXhQQ{Fh+ml+dvd>0f)tQv%vsJf8iVhG+ft({jIOdPUUPtJzr-y z5>KxJxDKVzWb+W>QbMStD<^rr`bv9egtE!h{F)Viyh9J>+Cn9^q9|*b(%&_jNYUouvp>YX_u zrcs88G1;bR4#%0(NZv)uS|3_bBq6?TcE>~Pfp5z$7wlvT%a$4Xn-I-8dATvoC&_q- zuPT6th|%^FIjrw7TRW&^vd4fgUVEfBk+Bs7WE{Jr(xw7JpMNTSB|%qb@S$SKYZ#j2CJm(y zH3cWDT#f!N>m6&s5rAZ}gr!gqzfquwMWs9|Z?qaE68WAyqPsj?Fn%SY4`@xNS;C*P z$RJ7$Y6xZ#bMuMZDezW!$5?#R08stC@)p*YjU`?Lj50M` zhTCqe)JfCcLOgyNemjL~>E|dqs2isz3;O77RFgR27||tDa+T6C(h&zzmF~H3zr*Yf z6n){;6R)hT-RT_I;|Hf)3mL%5oS`9Pos38B@q$I$Ly#}bZ>+!6&^lA>lS$KvXD{sD zb%4Y~+1=b(d72X`^kF+lFIjjF@9E)8jpmhC38*|vHf1NZb;cys}8{M-cxoNs1v665(qJ>`=M1p z8&3+Oh!IYt@g-I_t=-pAlQsNCgMkFIz57C|Qo*cdHpy9Ct5R8;fhZQdaA~_bC?+E* zo8=lv9tfzq*5gW8nDMZzXi}aBs5_!~pWD_hCGz}kzS^NgJZU|NiWO?xP2yvT{ww%; z+QNhdOBd(giLbuy6bCMX@9_-s>#EZcVmdFU%T_=}O@Q07474b$>aG(~#+Cc2kzY*! z^93Z#=BdZcq9C!q%qjSo5TzIrO8{YqB@>5-+>}4l3aE8SE~l&C1rU}>bUH*Oz_Pfq(%F!Ty5;TF|BS5jBbu=*{4q%cGq{n21B8v z>wgT8ku*kWz@_xCgyU5)f$KqgOgZB3i_T-Rqaa5=o$FBO<@`v)zG3HTB)F9a$;YTpB%y}bV|dkL5Xo^A`8 zMnSGbCei+_|5*|x(KH|ik6dj+QcTupPjF_hHcpK??42*0u_l^Kpw+11aQ3v)Hcq~& z1qB8Oos|i*pAB6D5X4E`eC3MnId7F|taDT?F&CrJ*f&qGwG74hE>4l>B8T-Wesn!+ zcf<~2<31PC?#4Mi{NkW@oEE;u7FiQqnr4;W)1vMvk@r>s9aG^4#=oj=1tc7MB_xMr z=qo8m!NF}t&4u~V|XNrlwpqrZ5 zY{Kbsn%1#A1lT)%@VF3U5C**O2|XySXE8PEW$g3IrJ3SCsb13&ZOfym4QdUl1Je*2 zu>`VlN1Q`jfX2sXRQ(zYQpnCZ${XF=+usSR+9KviZ)zSgU66Aa^LmAp3#Nfz0Ez%n z-LJy5AB`wdmB6cAPE-qZbCVo455F^bi4oOy-#I^%)L> zOH8S-NkT$&(xJ&fjR7i>Cg93X$6{pTWS@cl7;nV6M#7_0V=)8F$eXB#(CJhzpdj*4 z!kQ-)4o4TvM#`KjCsS%F!Pw$Q=Wc_caipXn{-{J3ugk%l(=BWhuW9hA>!a3S; z2^UBk1ljZa+??U5CN-9UL0l?dlVRN_e6pTxp~ylLJ~szh!NOizoSr1bA6okWzONuk zw_c^VI3TQRJk}94lb6rsp(ol5=;-tVhN%|~b&H|V)V8LFm>eV&>6wkn7Yyfr2rpK< z?APJKpR`egSG&jgMrJuWObZ-NT`UpaD7kO$-4Oc@61rB1CRx7Gj{@A%c@t+MR^zL6 z)=6?!$n@xWBXGU!y-bz<1(aP^1XF0L*is`K(a4kCTW!IKtx0O22-p`(YHsTeQstE~ zPBU4&XJc~ICO35Ml}cTN&(+uyl$Dkk(~(G5*q7m}8h->4fR)Xr#n;|acUk)!5WtK{ z96(_TzUY@}1{@YNwJF%YK7AZp<;9suiGn?sFo@Q#Bu4b39h`ILXy2lqF-0myA=IeU zYQ3@(YO$F^W$ZX?D^nW#D^lEC(R)g9-;_U&sGdN?=*Q~?K2*Zs$+Q5RSks@O`6ijd z$!Q@85$_5{hIGiR?49xkNU3RA-)$DQY@)8Sb7g)HQe?03k8hYWA!)tJoT6v?vTyO^ ze03k5C4##MVVvufyTh{FjSIzV(Y=xK_RjZA$)iX#8H41hX)B z^T;mXLQs1@oGBe&PopmmS;%pTDpRYc;vUpOZtj>OK$Q<5Wk~y*AMn-YkvPN~IlExc zJt6%*_kxFZ5cj#;+HSg1636UE{|X1FeGoe|nS@vQq=cDyNseL%AQqfy(OZa4?Vprq zjn=Ng=h3N=RJ+8=DOtZ-wjwK~8_+}xK@2ackXi`Xso{>^x)aD5MkH7z#z_FDXL8&( zXX#>^zb*o{2JeA3YY%*%R+M}$;s@sGS>9mClmMgFdV}HV6BG(@^LmZI^~ynUr-$ph zj&w?gyH*TY=t&1$XoBeQxmZ_1C=Lq6*art++-XIuwNYkt^~R)K*E_Zei};ON~w%x`X(Q*H?Uy0!C)*jLZvi@btF;m$dNeX=q zoBt1}+|FO_?KswCpxiV%LU)rGY=!ygxI=*mUs)RcAR6+1f!>GA`h>|E6f7hz0~Di* zDxZ&5J_+tHE;u*)e2zB+f`{>{aAyen2B+W`)rthxY@&>x%UggMxifiPMhE0gqEjat zJHpPz^r0*@hjph#vaLYKRdwPxX7^PsY}4Cp;)wtRXFr=FODQ3aAAOsoW9qoNjYvOT zIeM<@{KFEB=lxgFef|t}5qdv4fpz|B-`S#Z`+!J^AEvrLUw%{6=e>5h*a3z2Bhx{% zIkHj-NOaI@LcVh$z7qV7`ej^bz`+oAhJx7eo$p6kehvzFal%c>I&%lr%<_RCu~b1j^yGI$B;L_1sF=DU^sDoWA0M}tU5Xf~SmitsKxDC5UufdF%eV1MLdK_laB<4U5h4tF}3b>rby920&Ky(<4d=SP_D75SF9}D zoJ<))p}E?hTmR$uCCyNQ0rvBT8k%@^p42QiYY)Dc{#YSTYP#4cDsgo-uryO6TWz{O zFs+Yagm=}zq%TB0EFm~g)QJV)SF?~~H9(wM< z?(-(y_rJKRZUN91vd9g7AOEp6b_kE8%7YSgrq?Tl;4g5qQoq#|eBv`-!vJ$kT_EFQ zLYRgw$R~lJLUxCK5@3Mr{_$ihn@i(aRN>c5))QL7x!Uou;r(rj?K=$f)QE2m8oJr3 zIkVhpE%c=P(V^(z<3q)G1>Ell8VkO_C|_&|?BV-DD?2ve`T6q)ODPoP z7@_@_{%l~tGo0QI&JxETeveSVdplOhbw z_!MW||DihGEG2uvF3A0H;fSw77J=>v=Q1K&wD6!|O})EP+(uM6sh`8_xx=U5uQEa7 zU_*lw*<>k&;i{3vd%Q<^F;8XWeTbCc@V_xX8wBtSSO*J%= z_ruFi$KP^)Q^mP&DN%UF(u7ge5QW{2AHj#NObdG*%$?$RChu%f>sqx zaE8&uiWqYVaZ5NR&jCzyb7Bq>Ksqlhj(pb-^Ul(N#~2j@EnG(>hZF*O-fEVGcI7AJO_#1)6>=4R;@_ z@gj4z!6$O7NNdEJ2TNStXoSq7ccqh^sEVd2^wli6XRNPc*g(+NNye%kwI=U&`^752 z=V2$f@V-RqqM@O}>&n7c;5?0uiFfhOn~OhI}_!u z5^<~YApFG$l0PZa<9JBsffW=Vv2^ZrgrrtIAsHPx_gw-OXZu)@Z)Wsf!2&Cbf|)6sanNG+&A(c&j2JG|M7n zUa$+^h8mtT)(=^eA{P&ZGUNA1W=5r0&8$=bja#Qa_zKlDR2` zOZk_uYz@PCKET-&SQ@N}m3akW6)n@^rp>jhzkrWSNoYQuqZYs^qS7mNXV>QXeU$^x zF7DCwFC9yYY22Ddm+J`XuIIgSU-#_@JT{Fs->bhy2S@~@LR0FAKX+m%GyUrxfOsi@ab^hC zWudsK01>e&rNl?kz54{>uQY)RBQ7j{dY=_a2n@P+y;5_MW<(NN)s4ZB5Q+W3xIV4EyR7PmcWnK$ePzzR2El!4A zK+t#X$}G+86FxUcwZ*nkmFu3u&-EpaNU&-@S`j9uu}t5q84RX>Ewj`9*#W9Gd;;#< zOt$RTQACOSl^b?`epzmIMrdWPzD*{mF3*7_r{@25H$g zC|bEZ=pbHG-!Oz;2?AyHB;M%ud5 zqBdJmk4D09$M$8X7E29m6C$%jk>=03ku|N)sQoSCT0U#-Oz4SB_q9fQm6#J>Hv!K4 zx=Zm?g&?hJ5MYj&iOCznZ$LGGwJFMng29P_xUrwYOBk|pKC_IGhP2Vhf=Z>AA8V)P z(U}!sihU$5TkFr%Wr>msVmSKRx~Unz{<(0p#S$!XumyYC(I_eHCmH#XV^Ageuy)>3 zh{2(iKEKV6)6;aHo3-Y3$I$nN6n9&I61-`X zj+f?gn=%gK!mUpGypheteX3x4xo)b~abpo{fwy?@*D5KBC28i}WO#{6hWZot?SSM{ zAM>#WtJyRwtmMBO8VOv02O{c~!ug;iBZ(V-NHv{udH??1^~@+v_Q-F%_g*nCqgve~ zXTub>KolRuELv@nI-Kmgo9JM6QeeU1i)!@bT+~Uc7nx-;8BIa7=vgZR)a5ukFREn~ z>1`j|mNJex_R?4P>j}m9N+eFDh(J2xNErWF%=U@Bq?G9Z!50vVIJ4!gxnwUNv?op@ zh}|bkR8BjuUWHiQBd&RY;gHH>-bCY`};nQcS9#S?h%8 zrc8RBrr_X*>g*T`y^rfOYSr16(v4?@b)JhslqK|Q$F6O=OMkxO`24wjFXm|C{s~wU z_17s2hBk#sUh^6keBoy^1t#rZI!AkWGTS+Uq#|eYv7bK#fz5-lY|$8zId8wK$&aSR zu!8uh{B5o;dj+aEG-b9AlzHsO|7}0PbaKm0wrCcup>PG1LL7>VgV#Y?x=a5cU&d}X zkj>J$Th=`|#fz>f#On7<0hdGJO=hD5ZGEA2_8m2C@MCubabibF<}$CM4)u!2VGiA+ zwn(oIu*QLIvXXV=z!pjcijsx?lFc$T9#Nu$RY-Z5NA*cmD-_-iout_3vL8ach=s#L zK^_~KPeEJ`uUIc{Dowqb`PaQxy(Ut72I)>kKL(@~VpfXl-5sp=qfzF-Ul*P$RN8_o znDOI_+m!6=GJCz#dhiQZXGyKo-p%!K>yO>v)LO+D$R>m&7_=&IVKm2MDTH{rp=bzK zd2h(B^o+&HXRrJKjq%xHMFUtuTD;|zi)B72Ks*$4c+ z{k)P!y*$Bx8s@LlS6Awj(M<0m9LVq~Wb5qtpfQG-1Gf50C_W71xFtU2N%Icna>a?U zCK-!vKn)&$Hn^V!fYjc@71k;)WJELFQu*pC7y6XbRHFNLC`J_Sw4~&6iZ>7eN7?uM zWSy<^9B0c*@BJrsxkJ)T5_qMZzO+>x7q160yS9ZO%hrKD_|Yolx+4(El;diCar{y- zir52D5G#%iRNKYjaQ_AxxJPde2}PqPVyPf;?ogu0-qf6L)a-^4X1tLy&7{uU-s6Hc zh7`NAc7HJ(h#3u;_ng$CQtRGtzIhM1A-;CpvA@Dzq6sx|x2Ac$Zk|qxb5^Vh_n=G` zFpnP_Gutza&lC5PyVTwX5+hHLcf%bS)wAyI68}4y)DOSId2q z0?e0c>q1r+@$b4*UM{*Yi4olIp@`S(e}oQ^tjBlKF2;4rRhC;@OD-erfUvJO9Em9^ zEM`pBiD?le2cLglB%hFxk)tVQkhrwJr!ZeEO^=;L-pU*`Hby@W5Ux>`pbX{_)1drR zgoXq7(aJ(aJP`q8(3Cp3y>(K3dh3ux}7CLanv1zR&O?br{PGKJ_@^Sil?T66J0 zT(XaKGPL332#qwCWz!=&<=6tQ&+)+qUdR0h!whe^G!6cK#8zKQL|=W|z_1=Xi}&*u z`%RBUHv}~s!RJ{zo5YG4L&B!O6iBEVbYc_P#Qlgu)8~Me5_EkT?f!LwkCJ1;;A-)t zVqqkEJzC~xno^A-0;P=6ANoIfp`&9g9D}D;D_@;81hV*68ZyKz zJ#rM>l|%N{QxZm2YFN^nm#u5$v7o=_9P-zvJLd{2;rQAZ-1OP{&u!_e4g8p%pD-Da zz(aCzTk%U)g<$*>S^eca4QCU{v<#;%f$7!8N*uPkUg?eD0-uk}%uL%w5cQrS?`h8Y zRvi5supQtK+_`x#sVqGnVLeuR5l_Fr@*$_b=-w0Qysa{UlFSa9+P(3|9~$1Q;T7(0 zbzo;Mv4GO^;I+?e!{`KTPQKZE{sD3qY`$m=Xx1@&UadrTJQjBTh`!CUOXd+NA*5=_ zQz-Hi_lQ1>4#)$r{6iA$4wcdHy%vmp67dr z*#=7%U#@Z_$BD6%0ZW-JRLW){koMyz5q9k z!)C>$Bvg!_+N$Q{6D`QsV;m_bnF<|oc$b=LVlEHhOH)J1jQv2F3YYk}nvAjZV@-!h zjFAnCymHe{@>t&PM55xjdK-26#T*tqlOj3lkcS)lc8DQ&%hG&T>Z?snZw+dM(~rKj z;{U$|_ENYmkKW%+m2nS;`B(2T33T}@A0kT-6zAoNU5TBM`TzFwX%7btjUzaz&1^?mR zPwIm7__MIQOlA=nOQp*Om#6xUJi5?8ePSaJnr50c5ArFm^2#X;Hq~6TT5s?4p}iS{ z1<~$_CymkH#es&$)?+ZX(Hgu$4Kaq7TROLdjdS5pV8-$D6T7PRMRIAlS;`<;;EHIW z|FU@ooggR8*8E}Z0v4uhYC&VsV?A#L*x`66S*=aAPoTJ*XJjo17)E!8?8K22>eXs! z_AH(f(j*}^HlMy|=Afgi$>4R^8ct1UKQdkZ>pR8EaY6Vue+P@MXx_zm1?wey=IjrR z;p5WvFXXl^xn@Pkp*qv))DmuIro2o4Tz* z+t%?MJ5ElHuPSw=1yb<25kVjPneW=YLqQ3SKcqX47a=dVV{4@!*-G(?!Dd0EQfjK| zl+KECsy<88_&Ah?6^LrsXH=lZspCoR6WgZ{&AH@5zZJv}SB2a`QhM|w$5`F+%qrbx zL7u%@zMXaZ+u=_YlMaCqyMf~@V(%3`&aEr@00AFAzhe*Uu#GI$5UlF|D#jw?81+ar z3=u z+FjNy$!eV#lC)EKZedV+{vDt4efmP+660K!BY7QrU^krZ#$FNU*wGyKJu+CQWm*35 zAP6hzI!QAj^mkt&{Q^WSCxPdl`Mx%7q?dlpND!Y)aW&7BA(Wz#8VcS^V$@+q*MaJ` z48Z>4{u3O*m!a$hY0st9nYN^l<8s-a&b#MoD14WBWmM*WZPp4rD0|v}P$`fy`&`tf zcUzPTHeVmkI(eSq?tKjHj=7R93E=1bNjhAMDK*F|(^b;*D3c-&c}+Pkqe_)~g33p! z730Q#+L%OdLGL!D4?@EQijpz_aYG`z;?s8uBLNz|ykVWyvz{=Y^bkWF@U5TJn>Uiy zB&1leNEL>eB}?YRzd_W^9rPUeK_Dgun#0J9O!9vKTq{*%a%cZCvP`aeA(FTU!;YPB*gd9^+_26RTX>K3v5}e3_a%2Mr!dTD=&_%kY z`m@3LiGmy*9CsZ(sa4}s*A4^Z6f%EikEj>!R@5?q9=E`J7hj@{xYZTI;Lae+AdZsQ zd_R)q6ZD(ei~3(TE~+HW8Q~ zR6=Zok*fN}<9cL4go!PtzGHPOn|-ja0mo`g6oc+Pe|h|^A!y@{Qv~0r(zA@A6BCv| z!x0nbnXQ@0%^BrEo+7x>Hni|O>y`P<=5(P!DWm%r;XSLWFvxBj9QrOIk9*b{3wEj0 zd7y4*Qs|*4gURc33BJ4N(_1=}8!XyX`~jgf7R`$)nInkK{cyb1Zr9)*U7C)xcH13z zb+#zC7p=74-sr~l?zo!5Gtm_h(Q+sp<3LS_($G;aRPS-+$8h4rK{)9#w^d(uqjcev zCy~ouqH&z4GPknkqf&seyi?@S6$*ztJ#udYn(QS9)l4Z>(Pd~H0HoMDGkwi(LWlKLZ6y_AXLB`eg%sN{dS?ir1_We1Nf}xmxdo9 zNlCOK*Fau8m%RP{aE~pE;f0|6#A2FnWd7t^ti37GEY#*}eJqg-FY!hqsopIi5GjJ- z1gY3Pcd6V{O?I=a~7I`)@&n&v(m zaea*1+Tu}fy3#2w#GSbJpsHlvtFmMPMJ3O3eM$ax`KnhjGu?xd)f|ciT?|}!T|k3^ z#Ffx%3S$_O0P-M@J)X_P$r{mfwtYp0%Oj3^$uwV9zJ>Q-mU#%)|bRF z$N#cg;Gko?3D>>=^z|T0%Z$uHuMUHn(i#vWog{7x#Td&PV~mdth1g_X4E1rCX$gBj zdvIWA{inRiWVMLQG6p}^x3qGr(9`Mo}qKm+roIy+15u6;Ob(J!0Nw`k>LRe`30&oE+pE!HMh@2yv? zeM0FVmeIIwtp3zE{tUy(?mSI}WP0zk5KXWCmY3C04!19JTa|=1{3=Kd&~aTi&^x7& zh}@jI{X1{^2kC?>t}X#u4!~P*hu-zM4Dr;|mo&ok7jx=h%j8NimWU8;n_c$$w>wD7@4i9niYz`NVF9^T%QsyWF4W4i_3u5D4Df^S=Rx6nn!Bj>l z5h~Zu^1V5_mctW&i%JbBs4_%oj}D%kwH@Sxw|(}+Hd=7F zOX%2Ey$-SgWv{VVW(s50!={oZfBoHZ8?jsUrxQ zv0ddwb_12}T@&zKUudpNrT|CGHV3Gq@Vox>$XwiQoyZm)!^Kr4nexa`6tc42PBCWc zeXP?7fbT`<9YVz=>7rRRe8Bo}q=p96l%*E!k0A+xWCB1!Hfj(MYk0Xf17KLB^;Tm$ zfA&f}SQXvFGh9uK z`k>`4CjP52LA5BMy-(5aynn&HcU%Z1K4vkV4c}e894b|tY-1KQpW&1zMTUB!f!kI) z&&Ci8fPnyp_6*<oV)S3~XH(KKvc$;oqy zugvBzkL0EDb6#ikI9;qUrZ7`-n+YgvmwRhd`3suPB)cccgj_a=2!7kJp7NaO>06Bc{}XRT6gzh$$J9qM`xGOf=7~Up;d%X*Fswbf}PFBzOyip z9=_^=PIFT)P6!|n$I$2VN%b>meU`Ds+?>yr^fk$VBgBue+J@OU5CQ5C*S~&}`}n!j zwfP6v)&81$NgR|XyiD-j#fvLo)pvd6n-sCZ3d|)@auP@j+?2|rgM4Fx0JQK}^noxTNUe+j>E3B|){!UqaZAy=&)M;W z(Co$4$p=pd`EYY#^&IzG5HHz~iGjF4>bDT0Vj_p16vI(+?b1hS-f?zP)!hzyzhzp* zIKzctZp9q$suS(gBO^V@xXHNYh6M9h;?!j>*HlP1z`rdDEcB2sUYmvxK{B!2tJ44zE6hBMfm%(M?CRWdNZ z@PEE~q7jPA%VM4;)Nb_J$-7_0?cYE%@kc@|jbuL;~<>;@1M_osK;3>;T#6p%`)jc`pG;M{t^?6Sf-y z1g4y+FJ(&`FkJm@uu0IsK5 z8j+hG>pPn~!xS&VRgxIo4!Yc%CvW>3PW2x@>$Zx%S_*cA|2`$k5&peWkNVRg_|Ny1 zInR7sT?F_I8w#NcVU`HXn#ripsii)-(Axd^j=s7@%@+rS_hlEq`B+f*kO7M|qQ65t zD)Dtz<@fcOa=Ylvz?t*QK|EXPgtLTN=rbapY@F`|1*NIPrz{AyRLxwz%pbNnsHyvDz9Z?qev$NI@v(O; z{~Ql(%mc&C{kdc_0xZEF#w`=GxkOZ&=-wP-%Ho$jREtd&Z{~gB3)kapoNJCl=Y+iM zU(4pr&%z#+9*iFBB$rTE3@z)-7{aqtJo^m0Tu1%c%*R3u3l-EiG2lA9p^mY<9>9Cq z&|cCj6#36{vOGJgpXWp%Js*Slw}T>n_DLB~;@)8$&F>|4c^zvPii2+tAU$qKh{k#A z;Ly7PnNay_&Snjt?}MDs=yV?7ye>i2Pm>{;ob7c^%@f}6D<0gSXm?YWJ*hYhXj-S}ExQ*im`y~}uJR^gV$_uI5TTvCtUtizX`zOd z^Zd()FmijaP+1SA#dn_8%4@_%$1Dswikt@ZQP*78z0>EptNxHOpO3_M@i><&05~`~ zTwr{nI*rqA#2?H1!6{~jD{ZsykGPmONgsleLbG2}T!H=t#)e~e=&%4sVp_`fHF6(0 z;V?jJnJJZ^&uqdC2IALe(~75gFo{QX8!w~-jebouae9Q==`lOyo*zpw#?tu|I$hg9 z_sO-JxxM0uRIg&4{zd^P6v4|S2CilE+bd+wHG9vWhMm)6xb}2)WFK!>-Kr87`UQe^pf`vE|gh5Z!+Y<)0!)=&)hN*7U4DDSe*J;V{{`ki z8Na=T^xa$buMt+v*LrFP7R8svPy$v<)dnFQxAQC4HF!izTHHd^-vG*}Z2V#L3V%)-+jNC8z zAg1m!dNi#;Cr&IA=~R=#4nxU>g?McgL52Y?sz-d*rJ{VVCM(YkKW&Ur#4U4Zov^b7 z&<=CaaG@A+1uY9_&i}!JS7v|tlEW^E&#(fbH)uy*bn3}{wjO$l{Bn*iZr0}h`vw^N zZmYfCe|~__9}3$S4E^5HF?SI=r#FGeY;A2>{Mek!hP=>n#Q5>!@!Qg)1p$t_BPS+0IbfZtnzic*^4;MUi`~g-zi2V75M-Sv67yi%Y?hl(Jhh2JX z*#pjAX%(VU4*b@08`naOOD?5t39 z%teLep)IPSmb3Ey%=WO+=6cL(bELZM{#24}1u%r&|3pFp$n@2Puid-gftjB=Z`^sa zHA7t6L*Sr^C;WT=9XG$abGNPo6xCwi+{r}c-q;QZ+9sf}k}U46X6`g>mwyqs4)}`HR?znERBy z5ccM$pM2rs1NJ}bXvym;%Mx8J0%u=y@;O7^GibEHZvWHY_Xf}@iO~JCJ@o)aD17Ss zt@BJixNF!`30K(+_-hK4n_f*VujSV|G_uDaF{P*78?H$AmIg@6Dbu3Iqay5&?Y$mXa6;0(FMKg_Do|ubsE+chv^nI`!j&Cauqj0tf;xnauD2WOW8YfsVb#Hj4XOQ_o@3H)$<}vkg1|RtYq4+QW3Mle7uWWhs!3XCa zbIegwt`tqQH$Y(Qgi*bQZZqtrK7)FHT>kagzMD{tGyX;}7)SS6hc?DO@GkJ3HGkV* zmGUmB?34R&A89L_YWter!9yawftb>#KH1K*(6#w}r}pxh_mzkG)x^@s4Idy8&Ca*trdGBHUzbN17%IAm$ zTZ7l{74-R=8rcEfV;T^cV^4fXRH`%GHyP{3NT<7}*5(gy2FUj>y-loEZYw=)r5E!h z^Ip7T;hm4|J?)Z9UM}ro90&vg<*O{v2n6a3feGVBZT7xh`%mxNr~9t*WT}uPT`I_d zG(1hL`2z_LqACd%gUUk)4(9K^*5l!q2$4UGM5oU<{pV86StN$u{%S!oQ=-=T%FD~1 zdf=h?`<`^%l)rh3=-Wo%lyk=HGJNO3H*K(Cx8Y);KmS+;z?MxQ&m5zj{S!mA*Zpx{ z^w<*ryf`NmYG@4g{?R%1(FqbHDNf>;*r1c}|!8CXX4j%>AQp8-c?w7=KK^?KYjz*woMsdxu8s4RFQU?uVq4LFN8) zh4krO$>YlYbN}R0vwyJmruk)NIdHG0TS~;#BaaDX)V$!~XU@O!=x-b+XPv4&SoDFw zdW?X+qSs>pV(ImV0DgPgfF8ZB7{1v?pOXiP{*Um=GK~=MA)|`)RPYCnKUE4FK5%HR z{^^|{k*($rV@S=P`t)kkhm#U-eNRcNz}0HAKEK=9(E9w`mwqwp>G_`>H!j}g$#}Ir z`qo7!95j4~A?J1M(y50N0mYUO>xLD3?W7aY5}9OZ-4EKs|fXG|9sEDL-SU9jRmbX4a0g`m%Q}qqfbBZ)IOIS zf5D@!kG^dL4xV_zhc?+^_zfMqcij|wlkY9F_j}6rjW$sErkI&e(WB-4v6#B;>3&eF zB*Yyd8S=hs9io>n-W$}3m$~Hl8cFkOu9j7+UVHYghYp@Pe)3e+#x)RFzY)O8CR!j+ zHwavL(N~V$X`6nhH+5{3cXIS00kWYD4-!0ta5b59d^q_7&4~$m*osog4I-!yA3~;w zl+FG5K(hFZEo0G{Q5!K$B^|ubw6|QG$(U2V+r09LN9Ru-b2At3wIaL$dV zes9p`n;hKG*wB>l#X#`%eRuz)cR{(AkeQFU>prEu^?mcW>frZ^hlH<^l5DR!B`HYa zRGVWrwgBqyq{yRc@AdmF11Z;tfz`=+FqgJ!`KraU9(?++^Nu`wno8o@9s&oRF}h!$ zt%u*-qwmIh$S-;4t5I$9Q12&T?so|GSog}~`u^iyO8Z1}-~UpqGTl1OgU}umZe{a1 zY-lYPmXeJ0-lE=h2o6DGW9#x)UVUozA7*^wwuzTNmRw>G2&{()@b$AEt~-`oX9!$4 z>ClhvyzQWCd-Ui$#NXK~Nr^u+uxvi6@I1h{P^6(eEL1KMj0>#tSYJAr<1c1OM}MQ= zDV7>BE?oFXOI6Z*-8J(Yg3`;WF7Ol|aD;Avw+WY=vMpVjhvytZ>d zo9=&%Y2MJfW7J<{hcF2JDzqjAb12@@l zcRa-SaB$KhtMW%le)!l!M|6Ddhy`_gCD_Bo{ndcj;F-gz=e62yfG}xjeQEKsM;>{2_NTvg{3Y?v;0e372PaKF z`a@gpyycBuyLTP}3vP++wR`wBIsVu$#U8sZ^wah=*-;?gU{nIyT%ti%M(H|Fx z*sCt>t?xg3+&`Al^7%ce0T?pJwJBU`NP6qyXBYiy?qg4myd*x3lR;}|bm;k~95iUV z&CYA=+$0~zaijeD_kFWFgHyd(WH03_`}qE?E>HV!`>Zzua^b$?1~PGV|84hC6Yhti zrJR<(`b~B=%y!9;sWmcluYB>LCnsF}mD5hmUNH&;)(-@#ud4N9&9TZlKtLW84b!hV z{(J8kw(-I83~9mxMxP`4K+$Ig9%9}wrj!Dgdk-PU#(eTv6nvGuNq;=hG!h?Ld;r<2 zEaxig%8x?ml}LG|g`KT$wOYgpU-RZJy7h&*OTRE?%;flwQ`pQmXs2Cz(lMKDH)ujr zr;go9!r^LUJCfwL&ci=ikl5Ta*sW78DWJTv*-Kw27GObeA`)5?7^3^q4}9T9>`DZ00lf&HT)i<0i#_;55A2>kdD2+%6mMICxsuUOhH% zY2hvt%yh5Fe&l_X5jG-&Epy))>|bs!g+zTY(0%irrp_-#Op4s8yvLy6ogpltD0L@JoU)@(~dawJKy$D(YKAj zRQXX`&$K>tr%a|q zi#;_Z_P(@B6Pj3E$SK2AnapKKtM^$DDn{gewbi4BJ3pl>ErQUR#Wqy5T1M z{;kD7M_hxeW6W=0YhS;0a`p^!{NE-+wifYp$R?7ohg^G=-Vf z;U1+t-E+8i%uwwppeZhp$=}u$i(h?s-mm`hiCe#S}dX!TSz`o z7^#e@vHzaG=kVW}r!}!~tHTMEC$qWN?`zaRG~$D{SSL)DEnBhR(TC=L`S{W2#xG}Z zDBJ1BoOa}9YwcGIi0h!_b3v0bkQk@XBv^Kx+^mCVd^Yf=3CHG|x$+&T;Mc^yn|K`L# zBZhoc_No*29|m?l`0JWJzNb3j{v|#3S&-KAMFU{Wvr49ZUwJRq6`Agzc<7djHWh$i z%;on~ipiTz?=!8#^Q%R<@ftS&c0JxVNM>vDb+`}fF}>#R(E7?V&rSdBz0ZE($thEo zv#7WP0(FQ0UYpSZfwdZe3&(xF_lWlnnKpP}uaC(&%@d!50}l>+c6hJPCfwHg81O@0 z`%To(HkLdd7D}DpKz`wPFN%cuoFI8RyNdE9T$( z#3?tNc=|+GMhgV$4FP=>)!V9KJ#~Y?O_zUV(l%T6!>{}8=!Y~Gr(?N&<%?&$pZa`w zh_>jny~2{?6#gF5{QTV$CO{78aX}tw7{i8RUezY$6+w8QiCQJJ%Gmnj%fusX6n)=-LkwRQ($3by#`Mm-8($|*Fo%gp{ zpPh8vq(7=%T-!t7fbSf=_28{WOz+lv!>#2Vczq$7vF{CfDtwP!k3PNTbiZ`};b8N$ zF&dhC>w*0qL7Z}oxd?Edz>DS-c}z^u)P~L~;MK!>-RXYgy(zO)v&EJq>0M!oz#28P z=I}t2!6yem?3UM8E_m+uGxoh{!uRfA0dWZg>I4D2{-Ol}YaIetoOi_Mcimx=3p;me z>ZJ#Ead6vRi*uR}5ghz-c;la#^$b^o(hm}y*Xke@S$d#hiU*O3;vKZ{QDS z3GK1Guf!0c6YLh)OXI_e8SntKR>Xk?<#O@$V_uC<4V|fLZdvy5L(iT3)x*x2>>;CX z8-da1kM1&bQ2*=u59|9W`OcydNG8nT!ut()L!RgPBQj20sN^11{ON?flcu3%fO{^- zOJm$XDStACr|!4tT2{3zo%`^du@eqC{Q@fD(k=qWPMXxMw33{T%l`6BJp$+{t==>w^R~{!X8r^Xb8m z{Gl*EAV@hL5)#PAeAuK12V$xn+f;#U5W{iIbKEbM?ib zsLS=KJ_*3}(;7+DZ|TzI&pveDyw81Y%#`0z7?*Yt7<0x^@7ZFv;nRC=+;dym$JOpd z#aD3E8&3f)_6hrwbcR2Yaqqc57(4Mn9BA|X0BFw`~}4(7yZb z+YIk$?ISSylJTeZ-+I%N1>(-MDqlYk0RPJV`JT`^UARr0+3TvnXj#|qmNwZ z?K$N8vzKPhyY`vue}3>CcigcGHqiosbrk`9Wvr{!N8NRUz}aVisr!yY2HrSyNYDS_ zGl2(n&BH=gn;#Z?S0|bC(ZGA(YKAj5tGOM&w%ZQUeU2z*M4cQYE1K9=)R_J zN(evp!Y%On(LM1yfUhs#Us0J$e$7g*l3;r3B4ou@^?aSe(e4FAmBt%Thq(^RDPmf& z0CiPMlfzy9s9&K^H?`$V>w}*L)AftD-|L>s6IkEe-2D2B_db5y4Pz%R6G4!5`k|bcY==5YgB;l2D_O{MoZj&Fhm{53 zyK@pXKOFoaVJ`!Z=RN!|Hh(-;yuS1=Iug{`%$q+3PgDcq9z=#kMsCE%ySu&GW+yHIA9u>q^fT z$nw6W7$z$B-*xcQbH!e-?oI>0zf`Dqo!)=r?er;s%GwwO0_z3>JS^6YQlrXxL*V=89I@AKI}W(KYuBbe zSQ`#iJihXSMOUoP1$_u`3|m;Ki03%uJe1)Ag|uwzF;${hCQ>7dOE}!$@+;5$E@VC#Pb6na*VARE$jhv z+z9fguU~Nyj4LqP#AWF16{oKkd)>7EO^cR6e}94TwJv#z*oc{O*dWD(y%@XRE660* z>ZgHPDLv0IQH7FRiG^gGYp++o*PxKUv~d~o<4a?E0KfmZkeW3yCfwWwVSVheCBU*5 z7yWV0FCWx#`$$S?TZ~sFkUY$VH(K9)?jn7=sL^klCLq$f5VRHui^VifR7ttvO9- zKAe^Ql7M+drXzhQAtrKC36=S1J!+#eMpRofF6&JG#7rwIi5GKQ2(LpQq!3DC;drmU zvUJu{56;_n?3fGwVy4lxgTUBxM(;Fqr_HBz+h~I=We;@&xwp1wwy(q(dx|)E1Eq-E zdz+>G;l1E@7WSpJW#KamZkhk=^Iw>9O#JNF1YSFXW4?FFn0{Mtc6wvS#;&-pfxi<_ z-4e*e8Lu_z{gqON<6fAJZkfhW8*@Z#{3&8FXiZ$$=<5*q#F+PpM#8k>PO%2ixH2}M z%4=2KnO_4~eG;4A7T3(!Ax}z1Nx3FfLF{K{s@rR3Ou6v>grSz^LEQ`r$Hi`Cq-}oX z$+?$Yb@Hu4m&0{2f3RFCTcJU@NfiZ6!A2DM_YK`_RH z2mf5EvLdmVz!ZN~Nn`b=%yb@`X4zl;YW(?-QfJqv+RVSK4~dMhCa5h)cKxb zf*6Rbu~H6u-AStS`c<8pmfLJEcq%|BwP}vZIz&Z%svnk`*PPTFAuMm1A2u32-)BjW zff;BGm}?;QF|`!#-(-01QqK_TX6`u`bj>T9mn^>b(W7qo+Qh3gVq61(wG#n*MXa60 zMOF2Kz|@P69=F4L`i*aDYUtt*Cx3Us4{|-{?J&gyK>ql9~>fOJo8JhHm!~8mk3y8ZWh0M#;_b7r&x#AFL77ReCmZMM}29+7*890`v`pdy73nb8nMY? z4UG*QdB5OZ;r1)mD$DzvbW{}kBYU!9+44oR9+-LXIY*vzYx@~P0|X8^{VN0dZ#(Rk zp8b1$Q0`edE(CAGR1va!9WMaU@rA&>;pXJmwi@%QdnH5jsm6ne#YA7p1(nON*9@Sq zJ=h_?HJ`dWEVY?`a`$-9CZWXiv(a)ekm%(LHTk*eE;+tt(fm1f){Cr&%{XGLdgM2M z=?JGe7U>mJ)&U#M0W)}`U-{~?S&M%6;9k=vU+{oTqXhzM9Rm4IU+YSXg6aW*OC}%m zukYVx@HO4LcizO;!-okEOp&BJP!D7X^cYq}Io5{`4%eE4pMkTV$A`EaYi#vTi6xC5 z>Uw}{4vCNY%-_fE<1y`-!0hfcHqmRfBcaxpT z_mq19V-{4tX_^N)JSObQ=JQ;$`Gvn;@S6wszU}hMU$yYj1p;dY0($qa6{SQG^@PAhryV|c$89&9KA>NZ z_sKb$?lV0^?U0lOe`#k?w1W*s5|F*u%(Ao^ zt(AhbHkDajbT^6nBPL^u94Z;h-`1C3TJqSV4?Oqj@yAbj7$(u$N8rSBPW<3z?;Z4m zuHCzBM*PIoanD}1M^rSlE}Hw||1Ela(Pt-)ofsq`gVg5e=nGFCHE7#mlNvfTbyt$B zW{$DG=F&{Dx3j=WF>Y&E@bzd}po1?Oy>Wq^hoZ(WtH1t=1ITrxXZy5hq^#ios#)gJ|TLoBRK&kv8RTAgV)wez$I3v(#rdU`K_m5N>R zK|W0&SB)$GsdUxLPt2Np?a|*jF{xq@2)xS(*j@iFR}ty!27#$lM>h3*eeh)?hV|ZG z4nO%Eu`UgVqaKucfTsh}9z-}OAj>`a8F!zdiuf-t~-SF?5W$ z`5Oyev1q(5vsDtIa`@?*Fj9XyKn{_7{`k2$i+-|b){^~BIN>`>D2hwF2%L23*dvB- zKkPe=otieNy|4AwYG_^Z(vl~idE}W-PaZuv{#m(QBvolJ7{(>rY%Pl)V=8m6=|D>2)C)tbp=$mR>+!m#wK?(yHOb zO6%}f8s|t_Sr^PSFj9Md485f~Ex*3Lb**lLKHDWj#&c9?BMJO`bo~6hV16y244ank z^=Eta(0DS|FIkT6NAs$cFE5_)*g-!yW#aToz?cLA?*amNSw;&4)(8UEUNGvY-L@Gt zv16x(4K$!1_A;{r9X*doT(@E*>iRVj)=)kS z{Xv~DalQ08rcK~%^`UQWX;Z9ig~p55tur4YSR-P9>1*r@cv&C7@OR3 z#fp`$JagYOM^8Lr;x#UdzHJ0PKkkU$!{4|0O&bo}_+R86mYXrZ#_~O__qV@(G?Lpv zs;>*r;C^^@q-HM_*TD&6-u-+nyLFC>sI<3pBcD@ddI&Di6dqGAaKcqLwEn+jstG!-lNlI zJapx*^79U>)FW8eo5nZ@_4E}*?V+80l6_5_`~Z?<$cON_@Q&so3kgN#fu7@OPChcN zUg~Q686(A&cxmi4i-Y+yAue1Sdb9V!d@enddHq@^q-^dl6QoPz)#llz=AVA4z$MrA z_xxci>9{V~qUO>cv$pGO=&*eGiiHo)n0?UK$4vPV?4q@gz_F8#9XxoO!Sd^+d+hSU z%=zCtWxsD6)4p|R9D(Dm`sTTPHy?Zy{!=4l`Sqt`+`GJAsn9X*VI^Et+WlMFiQH_; z*FP+@`Rhk!@}l7D!ZbdH-)gT5FOIRz0U;pQLOEV7CtvR#8Gf3dIq>RFDy+vRUL$1M zJUwSHvpU?PlrsnGf>aIFF2{ogGSr`Iw!qZovD>2ec=?Q0DXy9Wql_OiqLdU(KDxE! z+4(LjXdP`2nsE4}S*+TExqZ2dDV)w?n~6zVK5i7+;lQF9VFxYICVj zZOk7vVOZAY?(Y9)-+88;1ZvOUbNFw~Lpf@VhXm?S{2ZtqqW{*t8%4 zV&5@w5__EF$;>3rJTsZ(&tkxM#baa4E(~JFm?*4blQ3Xo@D9c{h{bV|N#Z{q z^k6aT23-bzh7274nX^7P>%g5q7vF|56~~`vpM1DiaAq;l*!P{!adq41A1XQ>&vPF43}ZMEk;*U`?jOL6 zH2!7knR_3);HDGjp9^W%x(xiHGJt!hYh4EZMHz@2L-F@5mRl;M&xsa;Y zk>VJ`7+8;o3L55Zaix&5xX=U-6t%WjQI$=LZyz|S!Ra{2TD-_1(F3a#XSfQ8d8m&G zA9&D3t2)Fle)ZDR#={7r7W@#_a5A2%@4+SB{CWsW$aR2+E%6w`mxN7>)nU=44Liq& z3CHN$HG&gSG~5L0;`qd!LB;cS*@MsAGPLT+48o8d&D~Qy5CK18{lDWepqT; zULp}t!r;z+#0Psd%RNV5@}2St`Xy?m(<1L~#W5xdg#+Wt`t1+K(JD_UtSi0pR@NVK#nj?F7QT&b zaByh#l6#h&bLz)0xfIB*bs2a)893$AQzlQGGwr6WcG&Ls<37QArtV)1^K9008;s@5 z=Y4J`?fu95AEy`hROORtA!zQ0)TAomLD1_1>S6vJWU5|yg?bz$$W#zJKE8c zfiGQt_<_H=*Nj`XnY#IIQ6R^<$kkfuLWVVCTpPzIf~tl^=fbJF8yM<0f)BAcgC|cd z%w0?&?Ej5&jsZO&1z*O(Q(Fo$j1fzMVB3tvBrfr#awL3U;n;ZhJsctQ17Z;N(exk} zuY6Egcwj+!T)ckFd-y(mMAc)?Feye_IwYMCu}VaMl})3Sg}x#`?aPu@rdlk_g6}{-xtRNj$WU zKgS{W%O$OojC{agZP7}6eg3J0-h+&$x@++;%DL^+2koUIS>=;q)i(h|Y>unVwXn)x zfBf94hP)ZV@8C;Im)-LH?|%QVyB05A>kzxX%fQbw13uz=x3P*=9z{I-J#_W7UJuNM;dk^y-z92gjS=E;@+_rCideb0p_ zUAG+Su5}r329Cetv_G2l_FcX_ezOVN;$-1o)BOvJI88i%w${1x`O^*J^Q#k$tM4D7 z#97a|`DI__=|cp%A0P^PpXIb*muMNpwbTe0`<|ht?mylqv=gLoGW=XO^u%OOs*E4< z!YfXScsJtzvuM_Zdo{4&;?SfqFT$|?oz|SiKI+;H&wvK01W#BKq zc>Klt?Y`Yf;|9h|V9~?sP{5j1wqumaQv6uxRE$yodhn`xlH~~$4<=1f=1k7)$1lF} zm4TR_u@y@yJ)?j6a*T3Jz1)JbH%>6Xz;Z$=-rP1rk48x534XDD|LSVSpQNvb*HcYg z#Xrb1nM2ugo<5J(~OCM&oHi>2?}vTDJu8@trQy` zec;LKr%yQW6Nesp=myeumrXVU$6R#At~1^~^Y$s*Y}^Gk?Xj;RKf(@q{Qpg4O(0 z|7{)voi0nvncft$enJ!rsBy=1-79OJc` zaN`vpfA72Y-TvB%lg4e$N)$`OPdUIC1-`tTvS3pTWwcuCSRh?gr3`fz$n3=<?Gi*th~79^0NXH)!$yL?JRt!#=s{ivuXK11wzP&EDu zfAV?tWobgxR19PvOJ8AN?SvPFA^R$EGg?OOehe(3XV7X`G@YFL_lf*L> zQ=RSXt@gPlSD?d~HO6}4n)(%X@L}ID6Q-9J7HZA8Ps36tV37W`E(j`j;Yg9=hlzE- zsjj3fZDkPo;e91xiQ93&Jv@4DQiRbo`HgkNK=rpV93g*LQ`;)P@BdZ{|1oDEbzRk> z=6ksR0L2&iNdUabDnl->yeKpJ`2OS7&#w61WB>S*Kl*Q<`Qnq+x*K&F_}68i_tgLE zI6BlQ$-uQ2esu45?my$!XR8YgbaAz^EwlHbpC$;>OFnMh6hXMIgrw45H-@iss4#$TC z>xP0cB|hf(#5br5##r^xKt~|QPMFR_=)$=KY8IlLe{m>pMiPTopbukeRrH6KaY4btu_v1 za|7VK_@yY0Or9TE@+?u<-ha@UK<7<(Nb~%W1@~W^-*P6~a|)-8kDP)P&G(azv3Mw_ z78hGO-Xue;(TGPM|2fiDUS3Rxt*TmGG_RWJLOzs>jMbHRGart*@CS`y*AYzxsg+?E$lYD^zh?f zTl;rEICAmg#ofP5HL2=`|FR752>;6c!s51zon zwosa10`W^m7Oo|EbL@v|;Z!)m>F65H#L%S0hbgT?R@bIDRp3JmRbpUUUgjwa0a}ZX zfC{GoFkoCgc*=<8#hCU%Bw6*T{S2-c^sYbGk$%J~pFlf)%5yD>IdCOLXvYpcy?o{W z_u$=69CFcFpM6$5-F38O;OIqX{O+8$?|9>c%_q&|_BUslr&mH94xa5iCp_7@uYAYg z{J;bdwiuMLWj=G9H|ICNux)Ds1SvI|JvnKtScIVz4Dp|oz?L&jHO{}(=0)$Cm_>;` zZ~<0K>ZK5Ycw>w~-wGpWtU z3(K&lDIDj3L-+;R2>uy;KQArirL9FFrVsSJZEXC@)cTiK{N(w0zFtjoab z%K+}9u5H2@_|A35oO9sr+kI+a+_;HZ`XU>7EL^0}BS%@}SWr>yQp5o*e=e1*aSVO_CnanW4{$W-i~k&>L!++r;Dw~dXMI1ujV}Oo{edqJ z^kfqwIL(&)&HBJmd?0=bbm6l5*FQA0{;>z2x@PVN&+mQ{T$8I`_TkazpEP^>x9@n{ zl<8C78T%e5Bu-5nhW?k#_IzN?V! zc*BdUmp=QWpC0t>^Dh5>L(>hr47_Fr@{V{-yUt*gW#DUz4*$=;vG4X@+kCU})4Vhm zu2OijXtjk%wI}M1i(4&hz^Xw;CQpYK=fwNd3DmS&Yg_L6a#s04D<68vl$&yGV{;`9 zlZm083&I8w`bq37Sl_R_yY+bsJXQ z_oIi8Kl}JAZjeQH{bkI+%{SjX?gwk{`{MN7rXMyqGsHHk@(-WsM&uYAMUu@RM;?KmF|gT=l(&{^Z+NT(Qzt zUEgKk)iQu{+_g<81J^G2$WFh$=ZxEDZaeuMQSP|^s5!ODsW7r6vABem1zm*-rYypg zVWye|dzH`HOP3X`wJ$|6EXoP2IP>)2F<~KuKNs$e;FF*DW~>;6FOIoJb8D@9u)tS{ z+p#fTKlG(BHm$Y9-;+OBj>K6Q=npgTDlsiri`RaUlJ>B6JR{;koH15?jB=e&7d*u^ zR{DZLwqnP*;>128)osssd-5+I7Kx|g!+vPh%9roI|IVccpEvL7JM6FPe>pO6;^)pj zZub5=UJ}2?c?(4xXNa4PS?+U;C~N03E?1u;2zqV75qCtMGXZc;vmT_P+%v|<8E;!J zXVsK*-SF4&bwA)H5x;Sj+i|u0j?LDfwjH>b2KJdN=!;k~g)cwAniFIFtnOc?dehglO2s86fI$_X$YX5jvWgGJoQ+=lhljl9q@BxfL97kn<0%Kn? z77BYVm6x^-I@cy%Xd1qT(?d8Sei(Nul2;561B5*1(_dXj{{VRYn4+D-vywUR)n)v?X zRV#k<(_?Qxd%=z7?D{SP{Ta~d?3Z@)QI&x||J*V24%}Wbe{@{a}x=7Y&RFa?GjMU-TKj!U`!`Ogu*)5^_-$0z?2ITINqu z*`|VV))!bwX`kR4PwJvGE!Pq=KUj*~aiy(ZTw;O%qSZA!Pf`F+f7us41Hqekq#vG1 zmg{RD+F?dp5i0-01VP~q!Qh6$bxZGi;$7vjSe3#d&w!(8!Kdm;SNDqjd6b~GnR zyMGoF85hnoTp0K0GmgxR2tnNBPxj$2{^GrU)r=6KAndl~SUjf)%1zxRt^YQjU9yRumLTX>Oc*2sO4H zBp7F7;f)zMA;Kk#9EUD=)YF0n9uemXT5QEbo0PQ=0*=E(&2fccH1oPIvW!!lAPo&6 zuM^KTCo9%c@YQEeUixD3gF~>)6@tt44T~iV=`HmPADki7`o&c63hyRDtp(%lAWH{H&z`s8Q`sB_K}A+_n)&tqBNpu? z(Zeo|JHwz}jJXa@ycel%7x`BQ)U^qoIEPP2%pdc=yGLf902zVx_=02B7aAxAl9kpUjc!1`e% zyD+j{=C$BsUdHwreT@YG%&T3oZ)7wu9`^8O5aC*~MJ%GCt^Nb#;!AuGkfRSz4k(N- z<2HYRB^cJx7#n)a6XdylWc~nY;RT=a`oL=Ja{YLa48!Nz5CC{z4G$YoAQZ;n*f>k> z5#!v*`up(YZ1E8E*|A~VZoVn=!V%rUVp&9t(=g<1c zj{D8IdfbF@TYAs@0_81qJ<$0JsTC1v9oF-M<51;V4!Qf!1?*tR^P{nje{eY%D2c0v zs#D;#U9~~1vWMQyvBf-S+Soki8sW3O{~R3sn+tI^b}=62)91ZF0Cf5OsXvS1pr29nm|+XkHHtqDkDWA8`?V&J- zP|;o9@C?ko{PY87?LT|*7F$i;eK3C9L~I$G&aL*w_fK==xMw~;J!druuxMwrSX_hp0L0Brrc!I>$Cc4uaztpH&gf1Io~ zSK!7HTAA+y%bEb-IoF+QCfdGImiLeR%Pa0VH;ikpA^P_3J;lo_|N=6 zS#+Gxyy|iPW?sBTDv1k4kAD*&JA}av;MGS7u;#*RX5X&|Kgr^nzFPlY_u#s9&prQx zpMLDN`ImeL=3U!#GoaJA>8^j&to+u`9ChS7_uY2k#0ldkmx85w#5JmLWq}BZ3kj62 zBkBX>N(4NFrH5rH^q2quKmbWZK~zG`FI1Qf!&{a-)|VF?=uKQHi!V4drtMW!1I&1! zi2=u!#T0W0$69Dea>Tkg2Wb~kT5YwQ1njrDoL z_F?R;g7=~;pP+PxE!<^Tzl3?xb~zNFjt;=1+WPjbCv^}L~s9P0jYENnA)bI>soZq za^+mB2<*MZ%g5NEb!lyw_s6#`SoEN*yX&Tw0pA6i+PX*0daqx2_^-cf&+Qg( zHD%JyTvXirE|8@tpdiFu?*dc`BjtUC#dsF6EH#j!YUrz0+!65P4#S>L29gtOZX6qr zNjZsqMJ;UnH~L|Cfa0sHi#&bnw+}mxzVbA9%QIH{qyzYXp8O)h7&d6;W1o27Tzp{$ z9q|BQ4nZFtsupKF>_I?&+T_@Ha;2j2>vK^2wOEdWxWrOp0x?OX$RN4Kj#=~ax+fpF>yeMlKW@=?Y1>_XZW%c3EAtm@ zzt`+}0|R3xX#e6`_CohK_Mdx+eTo0-eP881OVGR77V~n>B`oK}^$RZHqs6DQK-Y6d zZk)9|XgdFn2^{HwhIQP-i+ECnK3vDeoCGS40#BWTEVe)vqr~LA$yu8}u?JuLAsXgr zg;P^RRdQxg^!;%cn~cqRKs+ul-;hBe&+MH)$$)9sllvc*4%1qju?JJeZ@UoDKjaz< z$#s{t)-^hl<|8I9L>GHfQL4CeUm&3k;&cRo1X=N)WC}yMiGPfIdHIvyzT>a|=>vBy zUcA=qUB78$Kqqt4SnH@-<&9^2aO=I^G5wYuXKwjBalhm3F$-5LGYf$#hiU+2EDUwa zQ3qTq`teXuS87P|yO?A)T?A34+QL(K?E|ON!D# z(Q1p@)T+H>?>$?ywJEAqd+!-rD79yh*n5xU%IEjJ{x@>KEc^oQ}$%?%R zLjY69f9Q%Uk;0Y@{r`ayA?k!6uvs4`iRD%J9PKd~$@dImo>uLSq6U|>)^P3+zo(R) z(2u?iR!21UdUC$KJ=?v_|BAwVSWOTVWc~LEj*K1hYA(Jq_Z8cLJNaZ7`ixK}Xnm$d z<8qC^KVT|=p9dGUEaI>ixnru1s9e4Y&&azuQ6LmKr^qeZxaq+pmAj%IaTo9TOfWd@$FF<``oXPP={B zhBPb~av0kj3nsS@rnIbReCrA!10ap2FXt*FI(X8T8>l&+eh#Ri4mv_jm&6~{JHAd6 zr<$gFYlLlva(2uu((@8a5OZ!LZsvG)rQe7jls!Vnf$}rVA_|o&RT+sT^;JX@p$EL+ z?M`_;7on1)-j>|^FE05XJ35|UKdRJxmx*L$-S}O?z3RYhoPi|$FywI9N%Z}omy)_v z_jLUENQ?QRG=50Ob(sF5%X4EEtV`N@-D6e;zqX%aXNK*&$r-Zi2iM2EjW9((yo3_m z6Ox_jqDbRSS5igeV#(&+eQz|A9|XT-slAzGl(P$Y1P*bwUFo}M|2F6=^wV`v?t)P9 zRqy_(Wa|_5RzGKzyp1lKSm2)t?U+?q+o&`y>bGv&p^lHwBOFmW%tC&9tKUC>;bpMH z&U3@I3kI8D2gfL}JHw5$7tO$p+vU64`YuPr)S5n*fq73t7pbof6T;=ct2GNhDp5gJ z9B%er+FbUS-;6FFg=bw}?NnR?{WfyL?E^|}%3#F322u{lnYP;TKU%flD~)!nKeg@O za2|5?psoDdGc6yg%#xgno?cq-IuaO17IrO*85$AfQrzEzAwCQF(+7-LrM=is3#`DM z&?_`R6KHKBKa6O}@E>cYLWJA`zkNUCGBKRkCShcX3O#>0)c4Psu9O8L4)%U)e)Ho< zCxgKp3&%mUj{pxGr5;Y_DIh+ayuM+5Y#PRMn83C1mG5Q88x@m1c28f;xBF=u)ri+V zEcMtqvUAuf4NRm)n&H~)XB=ec9)h&T|4zTuscF_fc^VxXME3Ty&IsvLiSJPZXyLe{ zEzN(%pYLZ=%ogRwr4pG3zC_mdswix9-T4KZkq(~qICHEWCUZsNOCsp@LlXuwwgMgam6I=5yMz&NIQQ9^ z`JgPv;yQD%mGQa^L|s4fTQk1xO#F_~;i#=n+se9kEAD`7B)h5nI@>BObE?(nDjnlz zJ!@YDl@XWX^}CEeyO(+1cfFiXq_QVX8e6^>6EfS19@pOi1r}o>Hx^*PfVDeDPk)t_ zYpdPm^i@j1+zF%GzA;6JS!T=Y2O>YLO4wcX6EKLy?81m2ww`8RKw&(sC*g5iCZm=V zUv8eIZVO<)QL=pk(uA9R*l%XQPIQ$n`v37K%gJ~z5tH=#5>Wm6zWPBUB>tON-u038 zZJj4&_58`&ok~0+axRGVzes9bKibT3JD|c1YNn^s)p5*NUOl=Ypo-!6csz8Bb6pLO zyB+?yujyu&WD(FtXqQxKHzBm$iCpr-_{NtuLiWZ^1uj0CdgoUOemZ;y38RV%jxsHl zBkx==*mL~%H6cf!J2ldTz#yS~w7dMs`0tW28LLrKRPmt~4L`38m@wi)5B@PrVT8DnmOApbHhw2gGJGeYZQuW66ASRCTP~_zhR{Kr@97*HeW;&?pH)( zhmD1C&#H#O)xbciADgvGt&5%*E>H!l^l{|-nS`}TSeU#36$T(`d}K%_-Ro$&mqpJ> z<{Codi1?+Usb?YOvmvNJA^-hiGukX7s5q8K=(<_V;_?oppUv-Z>qa5+^yJ#XOr2;{ zN-{Lj(W);H*u1Qyq@VGLC}&kZfpj9ggy7C&mSY{t@0Fz|N>G+*7E*n2A*C2&{vQs4 zfubje&)JN>Tf8uS9ZhK4(7JZMIQo+%sOVt;RM6yV0|ws!u{~LT&`WL^a&RAE&LM3v zzez7c{b-`G{f@5gJ(XOLkNL2e4aoauep%3Pt)?limU7LB#cq&oVf%766f|=duu$7% z7rx7fbNA^C_R3F}O&LySB_S}IM^3&eyw;ss{8Q92PO6C-9wt(nJTbp-W^9CrL`ttA zs_wo4N*un2pnB@Ueg-g!&a5fg#=lL^>(r{hHqFPCdk`{)-z2g-g^bQWq&{C$HHd5r zVZ1k;y)3U@)xXvFqIur!G zST)~oxQIat7L+vIM2j8t|5o?ik0aaj+6{S0Uwbwfjil|XC&Smn33}6t?#E|HU=Y`L zb3 zr89k|UN&qg&+#a#lKqea6o zgG0&DNA;TA=lT+YC`rds-*xPB=6P4tjQ>a41uJn&&iHmKL)3=BoVG9&wa`|BtCf76 zDd)tuIISZPEkw$7$U-8hEbN$-f+8dQXv&W?4U^H0543iis+->^zdrIDSDL%z-?M6fR>i%E1)NE;DOP^Du zaC!r#gdTPOF|VUhFfFF%oQT~KHmXH)NzRmV}u}N_pqeq@YcpJJX7X#sw;0BN0 zOK+J9WYITLIYMqIEZun=qu)Av*%dWWX+eX}rp5j8pA%5;?S;NO(n!zM&VpZor^;B4 zTYHYtEvE0L;_)TG(5+dpC#ikg)rQ$(1JXS;76fyrV0_3BqVsN21gudh7{TxOT8Z`9 zC1Fhaju-s9saDk8-PmIIQN&lKG>R-Nc_gGJgJECr`=c_im6bY%liC+^hU%sWg|2M4 z98Hw?tz@y4OLx#`!;}6$;WT&bZqVUUW}h^~SX?yPi}&k7fBYXm^Bjr^w-(=^@Q54B zeWUHg*ZLnmTfA1KTQ<4dc331gnwa`ayB}1+X*zH68hCdi$KQ8bBVa1qTA<Ka~=H4Ehd8oy;93b)NEj#N|4R&-G zSAIWqDvQFHok|^R{wk3v4l=cTcP-yHvb(chW=Sv7BsJ9!Wb(_W*6X65APPt{aqXyJBl3yznMSIP<@iS1x8Cx9!A;#67ViOyyZ%k!U;kd*A$Tx) zyI+2b-As>658gTi@Zhbp*}C5V81Uk0^_PQ6+S-l#a>N*YiI~K$6QqIz6(k4ksbd~Hl(b^Pozt`wv)r<*IVtgXYOyUIa)3P zA}dj5d*O`>ea~zrj0SdKhduH>;&1{o1SPcQq+!3r^HUEQW>{~+_v`A9R)yR7K}?I; zBw^EhWzU3=dxysFfOI+PS(~A8$)rX9nT;5$HoND)%O|k;WDy>+;g#t3zdlI<)d`qA z-k6H0r9kho+Aa&medzI{%yrW67tW1UXB*!6g9RKLB#?I3+T-}BVfZhVMf z#A!<94QZ(~j=Kssyg2TV{lqugD1KIKl0=nf?^_stWtW4`?68hn`(Mn-9?)_b!?MF8vwui%4US|K;yre6D?Mm9HsBROW zX`h^Xc@MSyLW~2deb)AI)fcJP0dB>`+NQ5cGCs(m+&;7VJvCwkY{gU@_3}@VyLD*I zV<<>xqBt;7S~gUKok4-C!x_9uP(eBk5R`IwAO4cG>H>=1{;q6#Xrt@@9Cy%shh_D!5$LH|FfTbm{% zv{9d~89runxe`zrU_9+8mU0d_eMvJJM<48N z7X6jz^)bv{ieRL~fZ8k`?{NG+%@pA{gDIYUxvCg~4fX{lX{x*LjN+tcT=j~uCC5S=EA+bHk-k5`c{@w#xE z+zryU1IlhsR`1CvWDBof^&G7k86s}nH&0{$>jXA4Qd(~LK{7%|SWzSe#WOtO>5cmJ z2}Ut#nvm5jZ@HQrh3&&lmjdG`oZJV`Y>M#d0A+6G)u@U{^OPyMvfLlD3T7sUJZf}l zfIa~MXxMnL?2l^3Z?-h|LwO+O!DWr;Nf`St@_kk>M=tdq2a9{f^x(5lp@q)|TrZyv zs&Wjkni^8|&`y2UP`XMLonr4+=Xr1pP0zU^gPN%o+){8G3{%9gfu4~mMNA6&quc(p zVj`88jC>A{U;cAThm*R>NFF|nL9gR3F>!LI+UHq*d+qJ*7W#Y?9Iw>HnPeHFtx8k` zpQIg7g!1+Xwu%G?Y>bj;!Hx4GXUwLx)O;$Cc`vC}J6^~M8D1@`8TGUR0P@7Kae&3O zA1swO;6^J}|Ck@h3s%b*1&d~KAQbb zB>b)UxD|MvF#*39!Ty~mOD-z#h<79i^OXNBclSwIpEFg`WCe|QA*)ru^DBI&;Ikvw zujn+0P8n?YQ8@JxXLOlc{QUVEV-dSM)|$p+_s^HW2Ii5>+Fh)R{oLoP$+jMcvi4R4 zI{Ehaa`-qrHl)<|&C2|h{s(Uyxu&OiHq`V%>xO(lF|S3mA(^_fnp0`c2>h>qmuheiO zlDp%i29bo(Jt6YViAgEDjXOp@<=m?JDhC>0P-SO|7X^%WPS$Q;e0RtF1OT2fU8iX! zz_0Pu@_aEiY?=#VPG#ZDwtJu-;*BkWAtq=Fs03QwDlZSFGeZQleWG5 zaP_%+jo{25y>nC)k1EV_yZ^XtesFfUk&>TSO4wlTndrfKG_-zO_Uyawb&Q=Pj3Ay< z{;8(8{!`7;?+@sd7;@hFIFCG_XJ$s7na45qxqq7qiuYul;}dvPA4PinS$pR`D^&~< zZXHgsvaF@F#N;}-n;1V7liCQC)A2eG5s;96DQ7#wq8Ag@j2wZ}xZJw6$X}!p=$<{o z{8ItbrFE4`V6;5pPvnB0-8IkVxX&v6=$aC{Rdn@pn=%+Gw>#&iIBGeLTJ4ak{`~JT zU=g>9-x={ZdJhXjmbRRVIS$lhLroBVvijm8_VY}oWYbnzEnZeCaxf|CSaRlV?>OHo zpFyr)y#hB3UB=O6M|3ZnjL*M`Da=-%`@5}HQ8_x;#wFU65b|Szdjn`0a&knMPs&G& zm>b#n9|iZKf6`W;KbdgX&`NWPWgHu5kR-}}{>;uK6SDom*?5YGOCs-Wuzj{EeC+C;Ls+I5Dx&1r43H)kZFsL7R;g^O6m zj+ky0As*&UhPQzV9IWsIH1PjH&o!1$D2fBz;3Z-`;|okbCB_ zArsPk5!u@S>w#*&?xa7-dgwGPBm4jb`FR>Ff>;>_6Kqe}!B-Y#LGsv)d}c$VdADGr z@09aC$HS|B)!5cD`=;X<0HScqs1V-l80QqfIe%OdM#wheFHdjM+f|fEL_g$o!$U?S zK{Hvgua|9RHStMrZ|UJ<>@Wy{dT4!W?%QD5S7J4=Zaz&240EpYWWY^h_%b>2w8l{ea2V zWZnN+->mWnDD~w7E`sTfVYW&F11J>R^@>gP_h$Plra5z4=^y1%p+w?Fh^YW=H}iw+9=wyoLm zAAvh2PnAKf!8i2H8%I%(+Z4V+4rkqpMyZ98JOJbAXJCPNh_Ofd@I4qK-S4$L<-2k7XBI z*WDei-}~VpDFFtjgv+{z5_RV~8G_lCvt&aSzSjKC*|N)uELu_n+i!gZV93aS)-fS!cpK1!~5R4+t{(s6s@}X;b+A5&yg2@ z_!VlUiSudVA{#<+t`>0hnK$T!yMSw8R}@*BTs!abkS;ab+ZWSU?}Yx?{UX1ys>QBr z1NA(SO8afQCDGXU;zqnsVPoFjdr`9^bIbqVp9Co3ImJ=iWIa+++y?4-n58OgQB%LM z{`g*OYhFY}RB?QB&Yj$1W_9rUgb+LD+0yACzV8&=d?x#Oh&(olIBS-yd8({EQS3>- z&Wh4n^CZMnwb_o&GCRuXLP9;pB-jFab~aZ+Y%!W_YM<>3|N2A zt_E-0m@#Kvfjp!fr?&a*AWozsrqbLM&p1dpNVBIHQe5&<1?F)wV4=lYx%Ax?gzjK) z;W2SN_cyJ$E@MnAA*%WT7o^a;rhBf1G^j=qcUZ{bK@o$8o{@ zk6Y{z$&L7(D3OpJV2Raid~QcaYId9D<~PY~pONIR9#i-~0E}2>rfjLTioJmK;wJR@ z?)4sVZKK^>ar%Db_fP?Z3qSdDf)Sf8k6UZEGl+d~#3<||af z*AIuMA!W_wS7X`Oi!uBb`sILs4jwAZQf8clYGgmL$>u<^;w%3mEq_Trmd8+%NsW-J zb09@U|4vWdx%8P712D8HhpS8mlS`oN;#{-*=kLSGlQY|dqFEle(aK4&CfS;Fa^(PD*DnCK3oV~Rh|Kac2&8?IdX>HK$kK13w_H9ZnO{6?I%1L;p=NCg`LQ_sb zWYjyOHy(%>2irjkt^ldX9myb#C(8vav;L?zYPSTm?;RkLBl4LNPH(c_&zLc7BLM%X zpMc&9qfmAzfElxQ+F#)*YplC`!ev1{M?4E(z-xUp_>hFqCHF^X<63Mh7Ym^S@MrG6 zF6`MM=pYV2)RJJlAnFJWTj?_H3ZnwU95MMtneG#v$j)Y)bQMyxp|r=}6tOxSVp4YK zB2h~I25Xkdo56#B)qHeOL>y}$b3e|MS8!xA%OX?1LSv)5W?cLzV1oHI7|^k+CK6nq zyJ7c!;)0Ah#urJGr*ngPT`I2X<{Cw-hBp7tFhYcCXD}Sv4_za@5MNZSeV^Po-T{@i z4P<*VlAm&~0q~2vfUhiObi>;=mo1Va6Hx6rAdVGxaK-0+?Bcnpk<0)5&>>UF=7StA z_zBGOKz^ywcqO0lUo77E92CpZ!h(Cih)D6=R|QXcnLAdE%_+ne+5U z;_mGWxXT=+JlhOCfIUhY8mnk_Q^{YU0F9x@p?PbMdvMoeE#hhvzZIR_>-=I?zo%Z1 zw1HYSZ9okxCBb`W_#zRu&u~Ch@biH%=L&_*qKK4K{mvK5HmKclKo?*a+8;S&`+avh zT7A|RF^8FldZyRyN{WlKENPZbsbnyUpUF69IN~)Uij3dYwHzZqkd`NOn9FEZqgtP* z-t{l~R7F!Nj7FcO+{j~n$DdALO|kiS)6u2UWs@YWf9g(SfH?@xtH!`~UJ7PtM}5=k za9iu9*&a)EBV1KZH6FJ#Auj7%gN?o}2@9Tz6;(_E6|^9XZo5+JBZp05AN}B}B7qHu zo2-JgHpsNgJU{m=#Iw5(e#7`PSK^Jd3th2*@j3kcm)l}_mSjJ(5mzd^(6|~?cWW=# zi7NToo}8-1v=fk`^)8y@UdrHiMEM}mw-&fnUv}PTmqztqp6$=)k9JlAGyZ%rTf~WU za?|y|^LrXP>Hv9ku!A=Zw30BMPXez_=y5-%oVqzCup%WxsCTupvwjm(zvXw@Z!M&# zI@8XRLrP^EUW_BePhx@>!wl9WCuxJAL+#AMGN`FVxAv1Bz1Nx5 zE)3NdHAfYFf@vi)4QQFkiX(lrKvef%C|)rF|4%VGYByqeHv*4&@qSl$TlLfOwokYc;YypyQH;9 zOi;I0?-V=0ZiAmgFQ&8&Y6?YN^M#3F*_0c1us-!NDfml@gQ43*ufN?At2X{RZhtT3 zm*UU7ey0pxSd#ub-FZdo7DNq8Tu52Z*U6U9#LHoBRrS;(0ea{f;Z!i+({l567HwR@ z+bojrf|s0ma=m^(nbZ+)#*V&qb~{d@f=4shxTt&j!>N<*<{XykhXqv*7#+}Ru83#Z zd}&^G@$J_X*$sXncQ;qE^hlGsd@_6cg{;%PE|O;@+fxoY$L$M)=xe9y4eEbD$M}wZV^*whVjh0*`0Bu@Bc8Voj_) zaaObS^jin=Rz2%~X=t3o#ha-U(Q{gU;(%1d%Zv)68|8A<-=| zJ46ypeP5-=>LK}_er4v1Qr(#F$v<9)rSCn2eUYe3iaow^{Lu?eEE;hA6F-|U^dQYk zi@lvI%W~Y!YO?o$Pc%8zRIl(CUldCr-aT;cic^jYm3+gZ6&(!}|Ng=AA4OSecNDYr z7LoovCxNh)=SSo7B#2b9Uqo*+I9>43Hc}=Zd>GS5>AC4*4wpM%siKmNFTTN@KB4-w zCQy=+-4J*B5y-0iTBkNb#fnW#+K|JmTCFoQNJFF<_SdW+YzUCPG;Ir|I zzEQ(j)NKcP+M|(Kx#}mIA!*-PKWu1tI?xrrba`dWzRBsaF@pKE{@mVcNDbJZ7hvBSiyteguK_f`Y@| zy%`8#1lVizf(_E1h{jMbPHB2>-=^M-jX8MZ5(7%_*b`%P|&qB zEZ`aO?_X9_+>020wtd>@W%|VIs%X&AFM(=R6-8w;DSv*maPE&P90xZJxBmAqe?K{} znR}7{D$b+YVmXQ;F72?irMAKDdNa|VJ4*Lhk5zL=a}nQJiwP%o?&wS<8P8U47tiMF zu5j$)#a@i3ECzjREI-6eklITyuNH>;JoNE|*q#beD>$iJ2)~qTsW?5jk37|ub6U5j z@NsmxZ5TMA$*fF)I4GIS8&+kUE$`+>)@%q7Qz{OvOg6MjeSc@z z+ddj)Y1Dj-#ZSO5`GmYQnHCsXrJTkhaenb0J4dIHiIVBD`i;uiun)p|m*)Wavr(=o zcJJYPgH3)zX{)8s-E!UQefQIP^3|oVq?L_^l-GMMGfn+V2Tl%(OQ-i z!rK~58`V?wpsGQM=-J|}>J zlCTB^k-N#B1yhQ)iNr@}_}y71<3ynLFdJEGH)Ip5V z8(P2IJG~>XUDlm+>hkf>OP~Whncru~2mm$I4uJA`_HOcfBE3a?Ar0 zmuLjhyd@0ybnmGP`RYAkee>54VXF_HZs@|y*~S6V<`Iwes9DT>CXWUZkvF?8gIV}^ zalAeg^!mRaI`{#x)Gvc=(E~BdWxZ_qv&8*r%PZy8-uQ)i<#EPJhSq~TC#IJ}N>6o} zUNdPhyqlE(x3ii=W2A(4i1!=!!c~OYt+k{&iOx1*J*bWl06AqRkr`#xKM0X}+y)0U zv^&3IQnELC!@5qC`dw}xd*oM?^C=J|L|{YC*%jeQ~<38#0P zxW2okpfxC-G^S`*f~Kp6Gk!WeP%iVVSGYH43JN*;a_A@wbDRt&dr{3p>gy#~I|<&A z0^C)|$_Kn0gGk5^efs6rMYYS{t?V>l1kQpKww#7NswC9_I*lWoYTyAhPsRU`b7NlK z>m|LY?A68>+mji|oJ?qey~$Gyv`C?+1!8eoRmiy1*mNns%42QA<@%;?Ya$q^^#0Ca zrG)!N48a0HddQTW|A~O=vC=9VhkuP_cmH#Ig8gZP zhvP!n`^S4a&Np@HZ5v_0zxIF4mzgsH7n`=2cbZ)!WyBmWFF|vMl4sd|_&IXX&F7nV z3mLQ5gcgxQ-=n++O>`>G!VFSwU&Mi!SkS>ljMdX&a)&AZxj3p(!@nJu>4$w;Ei;l_ z*x3{f`JgeXH!(98lgzfCk6BuP&-~<`xbJ?C2HZ`QJf&uBz>7FhPu8laqF7YzHIzZ_ z$zpsF0*136O5vAS9uL@AmJ8bVtdz}HQf7Bxe6ePnu&S-5Cu!LIk>|6I36^`}M`_pH zZ^TA!S6iJ_A50N?T^(9tx1+AJe3#4@jG&@sTWCXXG-PhSW!v1W7hp^HQhuE68vDg< zxJ{#SjWIkawNTIW&PX}`Ic3RXu>0G(xA68HWT|6s&S`QTD0H)S!}__&`knawnJh6C zGE;u=UkDGGTdS1Ckd4GEtcp&e&7;YX52omlJRq#WXSQZ#yb^fOEe-+1>b7m=u1_sG zp0M^t*EHcXaa_c5=y7Pos3!x@;})CF(r;^qB|)$SRY8(D01eXuHqU^!mzE5Mc&LjG@fLZ0!u=~Hl7MzV?i$B5f@1M=8K7=^vH{)b`pJaPF2Qv3qdMJ_>%+#th6+SG-{y&RmrdiTL zryucz)ZOY|{Ke z=iS5XS^qNYY#X#6g`>u2e6x|9h(wM3v6{H8S-R zD>_L)QV>0UyuR0|?n$2C!L07o#sq|Ph8?D+EelD_e486_w%41Bh*0sd3e5t1I7vYK zH(Y=9{d7*^Slh9q_@XA|hc0f^SHo|wK3?$RVWwN^*T7@@j5fzJpcqC)W>vcofP_)q zmqyR0@6>Qpm980;-S0MwC#tbOy}|%nR|DgX{C3utQkt6{5Q7X|QD?HdmE(0w6299W z2nY7~^S&W`Kq`72JA55x*_z?sg1&?jFj&~?f_#irC$Fq764TEOXEsNBL9KVm(wh6f z?RkHa2Y1SG@(|$nXg4VMd~2MRyNwAe58ggCF5Ut>Y)BbOpR%T0J!}jBD5t4_c}oJj zK9J46O4ttOYGshTIt8~>y7pwox9%5KfiIpvZNz7W{7DLws`&4Ah_GB9c#Kh>^`8CV zu-Di%0RwiQgCu+YEee@-sOQ?0yn+D5$5aGHbbsj9n>-z?MzRJf3#*L2A4xlivjU2X zM0_v{Zn^lUs&OB18(;zIWQ+3&Z3i>}^-;rRWGx|aZ>qY@h(L7sErD?5REZsS5bx_4 z^VmaJyBxmE6<6;)Lr(_Y@JrH3Z-8VsqGJHV(vH2z9&m$ax=SS0vLq$fj2z6fupBwh zaq4wQn|U5u)eXTt;88ydb=?TX;M=}t3{(Mz;tp@l2dR=&4C8fN5&L+@T3s@3$>*cF7v@GVE3_YdJAKOC4o}CD%{0E;)X5dw~z5` z@3-^cIMh9g?8h++UY}pJ;Y6HI);x@P`XnrkPh@(i_l}q;t!&Cg%PG}I?*c}ET@_{$ zB})fKzr0hkj!qM?Cv2?l_z|r`3*`k%+v$Vt2W-i#^?RKfJC|p-wJmn(cD(!1v$4vR z?kR~n6xH~4JU-TL5m~~hvLJ_OC#V{Jtz;X{Aqnp$9LWl&AzvrH%IKst>+XS+wZH>z z4p3Em5OE>MIZ9c}32_~XxVZ8$nMM4&a>Krg`zY8ud?i+xYN&tRC+{KWv@vtc>wsk)9Hpu$sHev)j?}~E=?A|Zxrl5r+e>87mZ9?7P<6N$1KF02Ocp#>XJ{s9Ml(> z<6iJDr&w(US$**~)tE1;F7~4w_4^uNcpt>8u60zi%CMY4pzP9jbu(_+^*Rj?CE;`B z1SB?*4W$)60+e!*Atl>EG@`}=fu?HGHJ$XC7ICoc^RV}-srXMfr3qMZF{&i_@W(cO z!==nn|6M*Jw~Fqv2_K3042Vc8P%;6c<&iP_mlF4+o?OOm(_vCviWM2s!pdR>N4{xsQI>-AkEa(@ zF-9kc6pcnryCEv^Mosdkc1`p3|J28+fnwq!1dJ|`@{b!PXEB80<4#9^GB#pkLOn&{65vA2EO%o_b9Gb`0o z0FnV@*mEHK$|n0_l;nAL*Ho@%OR>?&?N-sqoKyBp5rC3X?WyqWnxlULtZy!uw)o7m z9m`;Vk3rK{;X+fdIj^k7vRBg5SVdGYH3bbzZ{tUoE1UGTl%cG=h74` zbtzebe+yBvpo>vSr2fGY`4(QG_IoMXUUjQVXTyxf1GJw10?EqoRcOPqBa2(GSXQ>R zxo?K|-nCcQGM`?Rw-Y}|k9J|WIxA@GNzRKk)%Xzym99+7|J&5JYVwprIEDW0VUK^> zNjxjxT5kJsZ(HL>=PzewG+?%Mf}W>lhng=vOE|BOM)O2>&HH{&ee@ww2aE>hT4sN| z)bPM>U*%9}G}?Q1HVKP5qA}{&M0x7zOVw4$^m3}B@G7ak%!n^Y#py>yT;+mZ)ekT% zVi-9pV}?IFFSoX5sCmx&KOln1%{GX$?*!iW!WJhlc^?(UgBX_l=Y0jjtIcIUuWb5D zZ3h^%irVAj%S5eTFWLsT?u8Cu`H3kCCUM`=lJ9We+RnMa%Bcgp)KjIyF1xjAjxHH*bQBxl0D9)<$H~-p zNTdZVI1DEK@{w8=OGsqK@6;duhThU4#!l{|FCh^-yHDEbYVO8LxKqt~+Sdf-wyR{f z!M%$WZV+~&Kl}Qc!NcIwa!e@SZfh5`%3<#FY|^bK_JOXCu3cq*%Y=0MWmlMHig(T} zZM*ls_VGz?dbYrsF=hp2cG77b7VBVNLmz7CvUJ!*cd*7{Ij+71>SuNCoAIS;7VUR9 ze_XgLeO*0W8Tkacd&{f$16EfP;1X>r?7cW{{qv^CdNFl9%i(<3wjo*OK37b`WuTV9 zOWoN4&a>>^*PUW{HEU65IqsMaQwHb zu_Wp@{1ss2fseENRd_!(DR9YiiOc`yTyo(E!@Vgplb#;9sD*z>78Pj0jqTrFpD#Ji zI{2(&&A~VS3vGA*2!Ja`2Z%E=lBAO}f^q>9aUlVo4a`bIN` zH$cYI1-*ekc9fdzw%g3mfhFC9rsT0y-Iv8+^qI5x-5Y=h<6z4)#X=u@r`n9=hK4v0ik!Xxw^eoy{C0 z4iov1jVtG{v{Q>ub9i?5iPIrhviGuZIT?&7!l5PKz$Ll?JGc&Fr0@mcxq-(>Vfk6M zTWp>0diU@1S-YnEJl=RR<}FW8mJ0r+Bn-r&$h7Pu&@8~1g1>jP>AlbQL&5+uO1n-c zPkut6VhbmQgE%__J|ruzCp=JEEFrBIbhj(+Rd+T^)a`Pf8q_)+VV6OYoyG(LjCJ$^ zJ@?QxNZ9F@{QpL&U$#bW|880i&-fR)kRswTf6SZGH&;z-w*+x!e^mtinc>@kNzz2;V<^zkX4x}kj+kat2Z(v9Vl$eoOUS-|VtH<}N3?p#x#LStEo+|xQY50rkY(GAYWu}>MB+oT zkO-&0(Ew*Q3Xqui)({opWcKU&>i+QU=?l+pq}(+se&6uu!W*4^av5$ncWQ>nxSdJF zt_oidU(WvMPqdH$jc}pa9=E0BKOeZgMP+F6lTyyzB6zP!$eBWmI_^f=WU=1EA9Bgx zu!d7>wm$sVQpW!8`IjD#hktyW*KuB`k>}J6TP44P5%Q|!0v{hLcC`d$rX znPwQfOZtyapD)Dt?*r6>noYMO&o8T^)yJF(CNK-!k^&&AmEN0r~qah^kLJ9aH*O zmqO^FEBKApiqsFux>j$yz z*SDQnX68#!n8)V2OWVZ%%K}i9J6*RAHfqD~XBITxgTcq2N7ucf=Z5u1NrOI*U20|h z!;j}(&f|f&jbc87Q|&Of+ce1W2+X~AVF`js`BT`on>lTOLCQOKi;eBQf5?1Y#LQ^^ z<#?XVr?4ckgNh%{0ou)%qIhICpsJGBpOIk^qV34sOcd#P{FP23j)whcZVo_2ZKvb6 zbc8f=oR&VEyK2macIso+L&|Pu80YqCyPUo--wwV*>!br4%#ZY*4WEl-?hm8Y0!nRP z{jK(X<~C5VBop1vtg)$y3wMspX8|`IAte5bHKms15-%QoK_XXE&N1lxK)V&t; z-)d_;>ZadsTA3JZbf9oml>Cbu3vz)%%=Z_VsbfHCdAGqP7Gi!$2Iu%F&X@D)f(X0u z8c7jiYs0j& z5qr@=Rp}0a4SuLs`HQi*Vx`5??l;g*HE%7a25|M~USV5w2_P{?08q{r4thH}!z$8} zQ5+-}z9r_@JMgGJl#h=$!ieLVDmWOQI<~1r5hs817xucbH2Qz5b1C-q7}dG`)&-Np z;^BZZ(#Ye*6AZ}O=IpIjRbSGye%mq-)Zq+_0-Pu|Crhh5NzEx%)z zZohhX*G6QjO{FDvv7}<$ofW`f4Mi)NEK}3=ZJGT#*I5oxxvcY zz|U{Bn%C6yk2Q>@?NaSvbfC-FRbsAf*{ueckhRe(tHftM?>eC9-7JRtOu{VTcUHR# z9$HS1twjK^8L)wv&ifr)3(_GP&ApAsnqPge&8wuE#Yv|siF z>6;Ya&i7&0BLk^!&z+(vMgoxX_J9PdP2!LKl^8d|N4Svli-?ObLr?5FSqgUTP^nbr z5(Vn2#UBseP-tAA?w)Ce?NTia;R0Kt*^<>i|A4iM5z0rQVvaNroBjqq%m+8B;wAt!)#FRYlCNrMh z`?eV4n{U2>=n^|1J7g|-QR@-Aa|8>Jd?#*DdaLxiiuIMQQ$>!KN z7?WO@`uu85e(*T0*}UMFWbCVd$KXG{C{U`L+w`@1OY3#uZCM34dgSWh%)x(3y$(5T zKhX3bUT)AQ_dr!+`911Xiq-(?YMM8XA&%Q%*?y#?CC?JlnRW&zMDe5P(muG11PQjr zgtPXJnitz*egwY8l8Mo@#~W699r{@Z`Q98w<}xDNeD>u%1m!nMv`U*&|33iQKqbG> z?!pY5x#;-c+T$I&ePi?Z_8aA_*_W_D{@NEwOew=4^AElDin~E`%!?iN6O-&{8)M_k zU(##@RW#xgClx{A%gnj|j3ewVPk%mxbS%osn{z;VUeYOtAEEK{5LYZ;`P~EAERv~LWnT`{EVJQ=hM|La#i`1ohPa^$B@Y@pq6 zBN;gOss#%-pR>c<_?6`2y>;G0Y%^M$Uu<#rVywKp)vn&Jw_04ICZ3)bW2`DF6zdtr zS(9>D3Mrn&k3aj$_x}05XAk->XJ6m_zdtK(k7{QvHnMDX^(iiJsyPOk3SY-*oDnYnE;>N+9)7RpA-3IS|Y~}UKwtV`CLl0fNp-icL-uUl4pa%1-;*XJ*Xy-Jl;^YyMO$-d;#Y~qXo;wOF~*vBLqyM;BPPCaper{FCeiq}&ycPg9DMno?|u68 z-#_t7-4EI5tVQ!+q82q8fA&G|2o?QOIfBV6G%MZEujO(7K zu)8n==Uy}K@ZAoW^O^Y3TT{Fz&R_YL18oxbls6mlt4(2VJBW%t@?XCl0$Y(7c=fpL zA$I_cycHMvk^EzmVa(==;QiOR;rT&;@x}PT)5e(u;Xd?1gaIsK+!Ox@{$cpyb1&Te z_zxdF=(A@nT*5HA3p4Q1g{S`Zto?TV)`ZO`%~DEq7D`T;aArC)R`&%0pDXv=74DC8 zJukvgYJ+qCV8ab$&zEa(#vj;~Iu%pPwCmtelV$zwddA^=Y*@GM#b@t%c-{>sp8o~g zcm2p2I4piq%<8Rn_|~ME)Bhkc&z<5umivPp(6(p?EN=Im%-tu(BPaMRAl0V61p*nZ zA>hUMYp49?H}e*W5{4pHSF4AYN*1IpaJ;e7%s1AG7gjI*KliNoz+q>9rTc;XHH9ON z7A^Yd&cCwT4&UB(o5^pF2SxsTD(wOv2&!Dfayvrh!sQ2sUzA`}b*OoDH(TdrTVqq} zLo6(++uYWwCwEH{WAmffYVXGmJ-=%8LwDZ$*r8{B@|y4WnQzk5PhURo9lN}J*3DD4 z+G00`Ob&V69Elz;6zHb<>@k0A>?F~yjSylP)^w|N7Hw%KDKrTzcedlPs+ zt13(M-pnHbLLiU?0s#aC6!lrv+BLRS)m4rlAgG06DTo%cGAe}#VGxOcGRh#>ia2!D zue#bAUUhd>_4Ac>X;~_WiZV|LB!nR3pPPUFsd(`C1$NbA6iw7RV-yJI7fR!w#{|({myD>91a-sBP-*12U|IwBnN7Bh zk3aDEpRKuf%G;Nnd~*MfIh(A$|EjZ3n!E3!^CwK0INfJN_w`J6q*QgA`46o3!8DwE zl6~F3X8)7O&jsV^xvV7Z{w1uOsf?_i%Or|ZIr7xK58ZgpQKugr_q!TGrR_&e1`fXL zf^%mqUUb^P3w+LGv0Gzo@K?nW8Ac|H*qXJ_xk=n_-IlyFvBrhHZXB*HG%kr zu@}U8iE612DQmLNTN4Ya6{Q@Xe|+!qXa4?M-(P*`yDzx0|G@q+=^Hz}a@n!3d-?wJ zZ<;o3@($KzDq|YE5#RM;15rGbLQsASWSdaYE-OYiH%-jPKJg&-!;5=ueDuX96w!?5 zq`?6n|BdrgcYOb$6Oa4AW!FpJUy*^+EDM;2mMLVccPeQ0O=L>WgA{VW2#h^x2$| z3QRl<(hdD%&e-G~Q#8j`UeMWZ_KYitMn;C#J$mQ;=Ux0q=YCAc{)!A79e*=5edZoF zZM*A^hes~svCFc_1i+g)>ds{kJH3)1xQe2O(p# z9*`)R(PtlD^^dE*bN4}CSbEu`4NX5BCj)Of@9a0s-e->+ho?@ND|Hr`677VCDmM)| zN6XD%N160Q_rEb#jt20WyElN5Z6zV`trYPa<1C}RA?D0NtTo1-mL7wU`oZiP1WEkw zTO;4Qd*#)?dF<8w2lgXPKcjvAGbem>pS^cHJwC-@3QU<=_L=SW;lpt#n|qtb76K)X z=fQ^!aDE`U?{I_=`-`@bS7_s}J2!3|x%;P&UH{HMyy$(Qm#fsj(7TI1d*;Q9_gQda zq-C;ls{GX?)jyOVS9nS28qz-MMKpiI27}Ch{f(RPR1%L}Dg3Q{gRgIq`5Aa%qLB|5 zh94L%2J>c2rHtAa*2H%SgwNQh#|4e>v7E|_bu{wup~+_2YkMUEhzNf!CdL`X00QSp3z=+s`>5HVm6l z@-0NIO5_*!Zk24xb1!(04=im$#@4?u&O{7e=Peq%$hMM*$_r!PmBw4w7@Z1CH%^%2 zzSrJpTZ*;oHm>={A1puqpi^(Ssg?KRO*3%Yr6*0FwqVK^7cJQK^^wuYs=l3DZbK&9 z1gAU|&B ze(I#dmb`SgYbH;bv@K=WjA(u|IggU*Aysr?%4ZtwVG+%ED)h|5k*GZ0OZyQFSJ?2y z3dV_-P<~(o{-T2&h1tgh?(w@~*l5Fs_`Kgsd2(9>Qpj z(LD@_ALAdEYaV~<+xLI(o`bJF{j&QA?k~*1yO*8z`#bHs__LE|Oq<6%QmVb=i=~(| z|Ls07{ki|p6O(;R>Wkq}_$-w@!Ioo#pU=%)IRB9Ng~fzT%~TLywWO!l6#xElO~sI$jbKlhV=y7RHa zjyU_~e@^SZ+e`*7S$fQiU-{CVzP#j$VBwz+aK8Ucv9(%82o>uHV){9c0@zOPZgHN9^GA<0|3!E{=L{wEy8!5_* z7C6WzJSK{7(-%U}wRl*&@@Kb;Ntveri>oFI7ssGdh=Xx{!RhNC>umks>f6bKU zH;{gSu?G$hrGnQB47|7~zop5WBGYeq>=SN-+MC2@rD@?N<|1(k8^fnH}c`^OCldF&mw z2!DWyAu+Zs_|S7420kYsls-VoPa@bt0kWodk{aYAsrG zFTg&=e+1Hhj`4V@8vvR2dH_P%IzuQgjGN`L=why-ivo&*(YP^chpa>c#uR2&Flvs& zu#JCLvHm-Ety=clm@gwcJ{9O?sC?Ii4&*f z29*4IUsOQ?A@?Q!dJM%Jl6(<}eSl3h(%uNpYvskXzW5*y_B609yzXtvQ!mr>+u@Nj zbKnFxMljUae70cO^2C&2$wQTAOLFtdOIOE-ayaPPwEkhAS}XvRG4IA0GAiOC6Z&8K z%-RPY`j>m&cE!mb{|Bi1rVPAm=_&if|DN}isoQR|Z~WKw;o85z#`lJ`>sCDW{d?Yd^9PrHt>2I5&%o=?I%~nqJr{gs$`0GT zDw53P*FSUy7LqKDGFF<4n46RP$o(uX0UVDY#PPqD-txL5#(A4Y0r!JnPzHDienGxp z5N^v0L2e|e$1g~-1H^t z`pafBaAADP!G3$r{qlmHxBUI%d=b;o+J;U%~Lajc^s>~Q#@L^W>%bXBD_W0A^ z{_b~{AN1i5UwMDh^<8A(qnDrfy1iby>rGSQQ$)&(GUgHKi45}4V-!^q8{(YuMI3e5 z3-64^eo+Cb{(u9n(3JwqapJ+QJx)Aq=^fX+WiqB}S7Q@~fVAP6fJ+@9jM(fR6Zwk) zV(_}?OFrp|!}JeKAxNKL4=v2>iY6(P4_mZx+FsniFjv8*6)lw)6RgTzS@s(%wL-{n5U~7z3XpsHx{b zdjp{LI6EU7*FApM1Lt4=zO&DjRe#-F1`fULwuz&U-Fw}P1q+Uhm%|frZ$R;ss?NMp z4ry*un$eaQ2s(|Ml9CvA0Xe69^p^fT#+}R!%4F=04oX~GO&sNgF;H0IKFZwgqvx>TVIe>0 z-F$9+FDkhTgF@v61k6L?;bU}k;8o?^DuB1ZO_1kweCos;A6oOL_pF)x_QOtI)_-9C*xZeo zU-hZu-u=>-?0DIfDU)ZF7YE2c?b;itfFj#IpyFFlS6HUZMW7$GqV^Z8+bMcoXtq+LI&$wfxn>l~G--)e`cUVa2{9(VnCrql(D9wB-n!SnP+Eq{8`REVsKKKh~exm=y zhtj#(>%r%o^{Z3&-u>1|vu5t5v#L4*KzpD+kgAT`8rzgIwuZF^Tknjm#?HkKDMs)S zt$!;8vM`WMJ2jA@Z5=`JH^wK&=NO~vBHKuKK8si&lB7`O!UFZijC}wRpQ-V~3V`;7 zL6O^6fOxYF{tX*P*M0l073clINuTLIus`#-xh`@x{KcC;bk&kQc6d*`WSi){VlMH( zYJueeriWJ9?D!Y__uaqx&mMhr%@M~Rf5qAs@eZf=?Ct(->zSpI%mcn@h|T9TMzGzv(NJzN!HeBpOAB( z>5+BoRz32Adyl#0#Pj>N$~CziZ+OrdXUv_t*Mcukp1Z?u#Jhgt41UWwfBL$ zes0>#skDQjOuLPrFRJpy|fYmfLMPw;;m9#2HQ zu)%8_`DeY`51e-z77PQ#jbfM?R=G$sb+9 z55A2`!srTT>%-&h{bB;P+RLHQH4i`jw-5jLu0yUp{o4N1axzco-h26(@0z>s9+yv; zJaKjv=lNy&wdWW%XJP#lcRlpUYuANjBHjeY8EJvF9ETh8Q zaOQD-(Kyap^qKa($vq8W?ox42g?B6`#i%Izw^BGY1J<`^V!%S%I>O;wDNgd|7&ld; zJDnC8yTFG?%<98cvRZLe;z=V+;?1as&^UNkKj86Ii$4A)C+@!wt$g;Mzy6cQ4?5J$UTI7-P(~=w}1D(_a1xV)nCE9Z_2=l z%Z}dpfIWBn%G{l1|7v_J8lL_<&)G4bd8{Rm1nWg+J=b_<(Izg!iN-lDc+$r#>&10N zd>XNHJte_-cl|>8#j(_c3i?-sfm*(ZNqcU93r#P;)0yw{Gz!6nB`9G=|tCTnYm#bkSgl;$+!K3^i?0KWPeCX(4y< zLgt&NF~!b<#uxo2rrZ!vsH4LhfB5j~TW=p)|E^>D5A1j5Hrro!)p5ta`0%w0m+W*@i20TjoME4EC z7&rKsS{%bV4k6@8RR*$c;%_lY(DJ1S9a}C>Yk~x^aDkk}MQC1eu|5N#2zgR;040LM zaw(Llcf=k45F&vzj<<8I-|)mk-@EtN%l~-kt%ax`3>~%fxOubp+Wjjt=WYM*BUkZQ z$ehJ{QP;*>QXaegzC&(4Y{xf zmT}nd=n}5yH0puRYbb)V+<#&YxoeDD*Z3&@TN(aK=>Dw~ZAJ!W?0p}YfVQ?k{KA-p zfyHIU`QV6YsaFhQrWXSkXDd&bY70#fXHjELyo(c+2?_L&Y0}&PsD?%S$aekuk>|d3 z_sX;0aLRR;THE*IXW%w`)X%#Ab<^VA=e`X|ec*v7|N5@GA3pT7({5NZKH`Nbz2NFo z-naKl7F-e^RW%bC;5p@SYhHB4T<14)6la$Y81^`!c}8t#JkGYyIk*!Z!r}m_~uEIew*?m*<&GG_Y6;xbPALf^?nn}AOI5q$~8j_flP@EJqQ#x`KnYK-1F z20{e#gK@MZQ)h+{!^k;L8{MYwL-pyfDU+vRJ%2*9gUNDMeHa(xNFeV@L-~LtDma#3HAK33X$@ zY*Swl#!q0Me0JS~-}vF^Yw|e1e&b#!a zS1mbU=i6q?n!1}FE;{~rsQ7>P!hyqowOk%FaVYuX%<1ABha3kp&u)=H0(cqFodI6;t+>#S7k{kBaQIKJfOD-_3-bqEeCvTc zCe9=XQ{@u_tR&>jMM-jvujH@j;8DDa0}L9`1eDP{MqjvXn0n{G>q7*HYW0IF|6=Vu z%MZWgLzg^F(*D8>yzA1_|Kp7(UGP_tKV-CT&y#^emR+=T#^Qw^9GWmOJ_;|>RSF=0 zG3NOLhvg~@v3l%t4Kry_IWcyvK(4xQ4>O;A_eF+S;@d6*if@P@?0;j7JPcs--Vb1C zTSrKIVSHk|$2c;r!bE}9wW(kr$gR*5rqnhptsU>d!Xj%hF5>C|eqES;$eS^XlmW@V zec(Rwz+=z;zu)-ribIZB`niW&zJAkb^)!`n;JHSM@(K#Mfd-YE8c%?Jjkk1`tG|v18oMbxaG`GzWU`aS{^To ze+vhRFMi^H;^6Q>P!44bIPM-P&T!$O){DV3B%T;TO=P_1wR%JYdHkdqX!WBP#jHUr zfc~Pl9c0n`;!P!?7jUUy=S#lC_O#F$4@G^En`R~Ccg?Xj$mKE<9krRy`jt6&-x5>GjQlRr|)^h&DVW*oBj6x^6=ED+m~~PGwNei1}R`6=V1>! zNfU`l{OE|MJzZ+t)-nurf~5n4zifwk^|RD$uyLaw-B>K@`vJ;8-KhZzYHJFm{KhyJ zrNYyLM^7h}3(Hm2!iNSn#xgz>V@?@_utQO~2X}~2tYAZN>Om?6Wic#xGS>$%tk5d1 z!KaV)>o-3A&7VGY@ z`lEB0Xs)-2U~J50@DN8MALGX?Fb!WBhg_EClrJD;UI;olrydtHnl$|6gg6wbqnVP4 zP$Y*insW)$wmDqNxIeaN3DPfe)bJZ?ZgBXV#Eaz7HIF~}FUx;?&p}t8^vQe3-(UI+ zL`%I$6(A*B^$lD|HpUC$)H_uYWntb%z$4Q>p{1fbhni`CKlKB zX7Q@EF{qe^+$wl2cuuR%{)uBgz_=bP#vh=eTS_Uq> z^pE#nyx+nv&zduRuQ+Ua+eDldJ*;qCnioYer5tAoV_suId!4{?4pUzrCbkO&?FlA7 zMt*T6PU*x|Urgc!HfxFYvf*LJJd4cnRi26mqRKU9d<~ukW8yP+iziQ9SZlE$*tqVn zK&=NOkAt-1Cszy*Ax)6=&TVT4F!h8he(K`_5p<$V zUB}KAKu{6(@}@ih16^E(hc~XgXT@!+*8KFyYx_^jK~i4O?VyieaMr9PyM1KB#0gW& zS=JF^UdqYRaSB<~Rebq;DS1}%kahD}2tw>}!w=&ul~OZf)Z~Ld`}IA{bTF_i2Ju#k z{y+F&(gy4@X~5#yD#NJ{2^58jiwkvaQs!dHnxsxeteXIg0@YNQ3!b7dQo*H<;s7@W z;OL|w$cGk6n5yclxS(SwNf6!W&~`JYF8;m!cKYT&U3bEN|KU$o9P;)HKfemvzP)fV zaOy?xp1t>;yWTo~!M4AzgH?`54j|2Q7iqzH!f#V?(8>cNMm)dqid8b%Ig7xTh9l^+ z2)6pp`2rn@eU!h}TpOftT;uCtS z6`t$1>1ou&A9LZ;FIEyHWqr^muh)@o!4x2H$(v$DE`X8DWMv(MzyZK&j-R-=u%|vQ zoRp3LaG3yk*FP8xQHT|a^x75Wn*QZ3>|i)FVY}Vt9lq_z_HRDnn)zp6cFegSx4Q3N zI2m~J$IkiP8G9|hdD66LJ7Lv0KR#XT^PHCFA&w4>bnbPo!U%Q%lmUon457s6Q#96; za0&s-nnK_55pJ2{D7N5^=33UQzYbys`u7-bfn7l@`N5RWCwa{xV_m6YRq$zqg0jgb zcY|Pnw&*cJoj1NZdUDD}Rw`}=f{JgNW93aF9YAJp(GTys!_41)?XN6e{@2Ui_sIs@ z54Z9ReCo#2&j0maJK*tnQTzuu2Rw9net7m`{glRe;hEusLuZZpJcl}CdVrMUCpKj; z@jRhZV>InKOTboyzUYvMxF&aRUx zrot;|`9k<^#SY|UVl6~egn)}?tc(Tn5NRE-hn>A(sySpF60R4*^#NViM0j!nBR)95 zH@H9$*I08>abEq$)Go0{rD6Rs0aXmBLf$xre{*AGg0OciA%Yx?!xJY?+j+m;E`*RcGK$XPvz0h#Ri{U)vn8?_W-i7sWV%{odCY9AASXgfVF^B*Bv3pte*Fnob+5bTc zY-@=JZ>6~L1pUu7DdY;D-I0NjMJ=KyLK?r z?Ske|lB}4wj1+e8FfnmDuxorUS}Q^>JLABXxuT8aFtdMqN&ck4zi|9UvcD zxHuKbrs^;m59&D8pJOa#OPRfYz!WheiIHLUDRzVvXcSkKD}f^6!f;W@wYlKHpXaq}s6e*PoxeTjVc*R3G~=Unjq zJ#YQ5OTT;ItM>Zplqr+qUw^yB3m+UP9m>wRq?`vbZSt(rJmENZICc7h5D$_1 zoimM57;>evEV^pPD8hhvUd<{W-~^tWGJ+${MJyemx-c%BaWJVy5TX2Y35lmC1psr# zPb6dJF_t4FR8kbSg#kTLS&pQd?@NxX7}DfoWqO1wx*fwfuz}R#J3)Bp5P0 ztl$%^*aXBf6kw6JHf7x97iazS3>9z~J3ioO6azN!SAl(XZ5rDe7;$)jcJR=9{dQ`2 z_V!_M@f8Z_loMNZ`GN7iaUo6qr~}?M7{zztPXjY!3WFMdj6%7oe_8rk_!w;Rr!qwy zpBp!fJpJhH_kQs5_n&{YIr{#WF9UD<$VXnY&Av-+oiKgc!uE`C9H&Snrt>s*>@x>B z&xp?@W^slk%JIRKJm&}{}y4NmVuw$4LJ{&k>22r%K7C2@DL#{u=fLJu42^sOw zjfqXa9fFOystt7z8&A^u@P|)%Nqp8E>kRQQ0P(_BqZ&V4I-aVtJ)A}3RQ$?!kTO=> zmvaALmSdU+srk$S2xLu2i4h<4&?yhJB2*|ULg#qF1lyc*mUxUwq(Qv@c;@^A_PFYt zzx?#w@4NKWSEXs+{gPzh&@;}McldQz{rz^Y-2WdYPM^L|^@4qmkq&sC8=RC{gBt4` z;yA!or=~qOW($KjOgK+$80Szz*tKU8O3&5PJ_*=C5GszN&rk~wP&IzlQjHn0U@hW? zx4sQl2Kt@(IqwI5V|@IpzmRoAZzv`dl8d7jT?iXFjE%ExtLH<8M6G4=W~H{iK#mQs zI0sT?*0ZQX-TFt+)`N>N6+f_)2j2iNe|GJL$G`ET$KUhTbFTkW%=JF zmo2<`>hvi)`9V|8N)xtrT4#d?7CN5WZtpWvo*JPBww%crZ-R%Oa;S91XoG_n&3GO} zN}2~E=kMUaGV$F+;jJ zydJ7ueD%*joG%-VsZ+2^)vUh+294y%pU1$Uc}-pOu!jJ8UU6~!8e2?!@#u{Dfj9%hhh1^Wr)TWC=;-*c z@`>0_oQwM0(W&5l$nsc->shu~S)8%lfA-~`p;ha|gjJpwoE?mL24g^d6{cYrl`~ct z=$))0NC!IO=Iq8F{OOBwGPriJ)_9Nc8~XPcE0KeB#jf}5=a>P%Fop}%ADT;zlTv^& z^EmBXue5_Y<({*ru)B@M@#euBNBT6r3BWfMa8;aRbP=b=aec`Kiy|I8X>P*!bgj`x zS3mpxZ~pkngWq%E^>ol&y>$CT?yZb(+8MmzOXeuo3lA4e*4rD6x{!N zc;K*RRF2jh44h`3njC1T#lS|WZfxR$W!e!G2#U$4SbDP4!CO(p2ll%c# za&8oaYK60%dz?L9Zh%+eI4_}Wa+J%Wor1HSUrdY_vt)21A6O$|RI8(*4Uhfk;VYND z`@<(#*Y|^yfrHLJ_uaGhUUJ!lNt0%EqT=zc&l8=Cu*hSGy+&=h@$AOL=S`J@xf)^Q zG=fLabgB=i48T~27NcnCn7t%24moQC`e=>gapAJ!S?$ChN4|e6MJ8v!y7ov6SZG^E zICx=v!*Tjl3KyE|h$|dZdn$I6x@y!I*=9jvk~K*=r_IAL(4}tMO2rt=odCqZn@%V? z{-H7k!}wBU65EIRzQ-Z}8Ll1(c#2@34wdpgE}D8p0kUXZrz*Xs00Bxs7@CWP3k<(xBA2|vRWyx_frMlF@&jtD zO~orRVYD7HFdXZ+(127Q4L<(vXvt2q4|(%zUb_0vFFg8mp!@cV$-pPB`QY)hc6s2* zg}ZHkWb9D)MRA-5?H~3|XAPrfCpp%hOHVVNBVYm3#OHv&DJcXw;31+h%`vhGaP7ma z#nW#XQg6p4(im`@Y=|SiiI=L3DWe{?88>>4agCaQ9xY-;Y@Fs8G6?hqCCy9__Vr;Z zG>Do;LYd=AU(5+-Vc6gyPaOgg9|&s8NGU*^3NHp6+ZI-drbv2#s(;18_;dY41R>Dy z&loVL0APMo1rzRH_SA%}-Dxi{_xeOa41*>RG~~AnuRyVQeKdn*`h*n_qeBy?PT6L` zE0)}H)?ZxyqoXf9X@6Vx{g%zZYfn3E&f(X5`meTq#s1%#G;`)2u~D%}c^(i-v%#n( z&hs2-uW`;~gxxLY2R49*PHZtJTyr33ZyT9Q7Gu@F@F*6lWkELwaykI|T|%Sf)NE)kZ=HAlCXCe2q_f-%KEX zdhN&~-}vDpfB5$EZvMXo?yo=Z3@p9)eXrT)WxL%vYny2cz0Ww3*fQ=Ak4N_m(Js$z z?lLwSCxShWl(%2UtLkVErSS>bEFKBqc@{=-CCGjpV<`2IRP3-~^MV*7bj2x0wrSS| zS;4n!qx^aBSg_*)iDOHjK#uhTGc@MR_MAx0T%{7Rw{~ShpBWc8Vu;z;25ef5(Py2f ze^|*61%*tUW(YBi+Pw^iy8kH4@Xz~MdZkn(46P398OiXe_r+^wZ(;P7LsUb_wa_lu z;+t`5GdPY9{u*8Vz{;;}yzkM&F8ROToH#UL!sOf-b{)^9 zUOQ5p$a1#$+{k_Pd4qMS|2Pbmv*-DPE1xsDt>;g^@+jAH%aq~X^XMge!uln_U{$bYasSC0B z+`AZHKlBjdK>MEih%+EN1y%R6;-!Jzrg$6{mb2OBiu&0Wu% z#rEaV{r6r=mq8oK2t^ap@r|F!yEyyMIYbt zpZ6PsLa(zVTVoWv@nUHpot%NUxPmF>_-ce0%Wimhn_ag5gE_yt@2cajJLh~c_t&3S z2HtqyM-M&ni=SIHWA|M@G&DS6vd=G$lJ>pv-0W8)EqhIS96RhK2%=$6d9D)6aqPW& z+R#>K2{@lB*^q|k2NXPG?8VP0DU=l9fysdP zX^V;q@wVdrCnWrg)tIVV}AO(wGN>P;S%r>#SQLGC$=l){Q{aVW;t z9xR*}Ov9BF9enuh;K%s4t#1yXzYDatbf zZp@>Vt>;Yq9MYFYb{`+?UjUBDeZi0rv&M&%ypqdn3kl=MP>Bh=WJTDlKkdm~qN={g zOLR~n*7ydEP3^D2KVLqL;~E32HD%4D(sh+yJ2gm1T&(jPz4OL&AygW5^Y6gngX=M{ zlRw9k>|qKjE}xv5r#8FBPca4vaU`hSzmW0%1T^homsDfABKMkdPp}Qn9~}h|&no~3 zHrx7V*ROo|`}h3OwI^NBe_D={^8Z8shI3BYXV&ifes#*6Ir|K4jQ_U|&4kU?XB8!RTq$AD*>vb0Ml^+l-hP$))79E*EAnBlL?(?&-Q zy3oJ|zM_>LgCNu&Cab))5x4LJhP~J6o+RW=LX68${!84Mcm0M7MrhCiQ|HPJf`fu; zcbbR1nrmXTxZ+B9v;F|Ie{i-ByKtU_*9&EE*bn&IxGgtl$A8+At0a!Xk{hiz7}H0K zHv}GQUV!)9>vBwpQxU=^l7x@TdiL=(-+$zeyAQtpjAi|&$BUv`M#4 zpFjT%k=xjEoEqia`_Eodq#qm8oEO-4c9@o(%XlVoQ_Or8iht}g&Pev~(R!(|$-Q+M zemRR6)cD~}mf|k%i#!(>W?|>JNgDI&Wc21Y_8-^QW^Yi&V~*9Jgthg=G4_SA9u}yK zQY~eqA__T+2|b1?NN1#jPdhTP*u-0I0>H-?ZxYmNuEMPT9e{E6X?|%H);YXi;){;DS#aci@ZnoB!om zb7t%wds6=Ow|9;&9zYd&rmQ@~LWVucJ?>#lM^c zhy42tY)k_`tQZFm^kUTth#cQ_*?r1zcB)2 zt(E*ySyox_5J%&@jfo2kh4V)%CIG_1LvdVWUIww|4f%mFF&KPmz{Hdp4=TE#>9xWIp$zl~2k zu;Q!hRy^>ID~`XS|Fj&X=wE$(%Ow|{J#+EmvxX-OPeJZc9^JF)`pZp)fj7ekp%LMJ zpmVWl2;46^2wh@w54D%%77qLFdkKcZG%)}GKmbWZK~#JAjBnK_Vj160jo&`Z16~qf zkWHM9g?)!0%~D3MUh9P6{&S3-#sTa5_ZV-X4MCCO9-zAAOM$2%RETa73PW>NJSvDS zZ4%$glB{`f$kx0`zz#PLQNkvE*vUQ>B_867|70ot6Hl@5SeIJNDU#e$^a*(B%OI7 zL1Qd&p*8WAqBjO3Sim~{JIvxgG|nxd)eiaO%$Upx%)p5+@ORfAD!P>3meqffMMwUy zE&d@$IQcovwbZZ}1@prZnCXyM<3$w&p-Nin{v&>*+Zrq zLKZRvBFN%QE_1Sn3Pw@X=up5hP`NgEsG>QR;#0!7HhA3$U=1xXu*ZF&;L?Zqo}UCDzvJc%Px|=-d{Rf|E8OQ=iUBPX~4%`t+4zbc`v)j1_7_&^LZS zQsb8y)M7;a;QS{~NCnTB0FFj{D4@gD7~s%a_b{@1Dw7{$=M_BMKOh;5;vi9D2Mn70 zXQq=Mz8x2A#EFspC^(>C2Yrpp5dep=FhZnZPK-$_+7iOWXWWTbCMqZFh@*coND^c4 z$B(5$lO{}^_u}2p|L|X3^~k%Io&H)m>aSxnaOi2L?fQ#w!Qa zT11frg%JxUw#K`|nu`mIF$1)!w4bT!FbyXnKeVVUb4kGXSMPTE84`rRd*dtkewHwf~Lr7T6HfwaX86!8(DE-%Zg#6>{Gw zXaXCUL{$=-c;3*d6P}oy+Y%aTdC8&#J{oUK*@M6O0A{y+0pE_y6?BCpb{te%|_LRFmd-{bF9&Sg)_vX+Quc;?(WublrI``vfK%@=$Y|4U?Aydb-`TzKBe>$aQy~ z;5~Mbl97N>z_VC|#Te0{Z{1_;A6eiEBN?Kz53P=h5IW8z2mmEx;|IQP1Casm*gyoc zH3q@o7=Pf^Ur^Ctg)z#a^?F%+xf5l~8X~H(R{^W&j7BY@&_nH3)X%to($1M5MDdWNz{t93E2XiquoYguVbSmtK0(^c@$@ymjHC?cNY6;6JP@=ZPDFT-6=*i22L>aLhfi zH1o?XOgvO+!~KgXwkbr~3+_paC!k>H%02)}JU3m+5@&#*jUNOM{=<=GibXPjLTWD9 zrkyc7*CF@%!H2QWUm1f6I-WZWb4+f<0{;b19(d0fsS?I^H8%N_Y2~Gz6G(1`pCh6* zMhsq8_?4#1X;6tj*NJ$Iuq!Sxg`HT9$tB4ihKh^1vJF`w&s=5z71)KA!fas_Q>^&P#t~mnRl1-1d!; zqev~jnPI0XcO_-ah%#T26ZUM8!*aet1Ti$;157ZNjUW{00?QcDf`-Me@EQY~+JM0} z>-1n|7TL+ae3M=m#+MNh4+aSB*S&bzL3k3ryMiwNGJ2Da|s(vA>)`jj4_KJ$T6fu_X7xp$@@}FR7?512yNL*T9SZ_ zU}7VIC&tG-<%(Z8`oYW?24Q>%Vas}?OhwF+6GV|}AZHP$z85{5-?r_PORsd|g(QWbp z3+I05CpVqC>ejR0b!g?=dPd8Z9rwDg{q2P-_T6{>pG+Jco>Femu|(z>ON|68$Jh^U zNXcI(6QOgSB^MA7!f+mpcTfI&NO(^m<91a%`RG1m&;`DjfD5|#@-d|@qYSO!5^{_< zXbTsKCnszYP-0CUtJpU_4S+~N(FKT$uasC6({w`aTz`lhqI#Wk#sQrJ06MspYuK2p z+E52^{1iR%A77$@GDpCJoSkI!1pz65QnM>Vpr|_A+Zes#W4!bM8=V7qLepB3hcQYn zCG^tKKAj1Jn8BYb!GLQrz8K4fOOuQk2aqUgXahWA1U)Y#^a~wMa@EX?$--3igMng> zQOOT*FlC5|;T(!+lV?s_wBXhI{?8A7`O?2XD*iV~Nw=PB_OJN&4^G`~ z?!Sv9k(m&N?Li|GR2vB;$aYtb_A<>v=@*!2A#3| z37uC)%?kxO1JWt}I##TVQbC1^GMYfHn20Omut^B?bu4>@uQ8QORA!(Z1KhWP%Rv9a zcuQ3z3Iqj&av8F21#vT6To3`Fu*85`V!*)|(?7{m zR(xijrcRo;?XSIP=P!Qus*~@y=9DA$k?k+{^_*qzTl}B@%SZqD<-fZ4&u7e-w1f5} z&kxoexzgUCXC`C85MteR2Q-5X6=4xJZEk^uifZUEl+b5Y25FL}(h+1evE>q^v>_E4 zslv7cve&{Taor_4Dj@rRP@4|A>`oW=tP@@!mFF1Fx-3mJ4&Wl*#&I1LbzY!n}3Y;5FT z0a(|#myZm{dRT+h-00Cte4J2J*B>^-hp~8^K`gxxgibg}`5m42KN)3R;JN=WH@GYS zWIjJMFhz2LoNmYo>rEO=nCs-H51fgO!!vi>_SY7@=4B5bcf-=H=F@WCeEzvdzw5SJ z*Gylq%X?zw&3md{XULMqOf&KqIq?}&uS_CutsJQn8og|g?|L3EOFzM@eb*g=`;@sa zV+LS6kYkz!tzEih%!yF^GD5tH4Y8;1q=np3D`tk-LAmV)=(x~-%Jux0eR+wbXUN zkhXAv0bL1CE6RjXT+k6gV~-F+8HW$f+c=R6%K!KAUNeHznj-=@vmbhEFIo(2Xcj8; zY`OlNMCa86Mx>boO`*kof_s_%fVC-zH}Rn)ikZs90|*XcjDk?DaJF-gvu7+|4!HM{ zsJnG+|+Kk7D84HrS>cZs;$IuPf4};i^H&m=j=10MuziL&p_5yB&C|vQB##lTd2lK ziDZO@KP5-e#1ZO0mBJe{SbhH+<1M-$z7@!+W~i8GSyAnco;UxHL*;^#G3@ilH>w72 z+k&@g$2~~FCja(}zKZi<30VgVoCFzt=r!kWzEg*rfaIaWH%%IUf`Ba4dGmo${KyJd z7|BrAkijHnz@o{I{S6H-nK%25zp}%$C;seXNB@Z|emSn6zV^fq?!E7lCwJR*?%@%! zJ`zdE&;pRt7;&GFE8J-FW}6+f@gqoSPU0JVsb>kl-( z(Hy_?EE!d>rafIS7VSZCS!rlX(&R;s(BMx#f*{8DV(h86j&YjLJ@D~kO0U2AulvZn z7R!o(Pp`4y5m+?vLMLp4L47I`V)lt8XTS4x;27j~*$GGP`ikwg`S^s1!_&M* z-b1-QM;>d(TJc@>Q##mYR!WY2125@ma;2PyARB#wAVhVKrH9zu7-^oyz{4zl7!t>t z_#8N9m=-1mB_MobWFI^up&t)V?_mf|tq(}yIp8?il9>Ke=`nli6R%E7$z<3+7RJ?* zR%0&~F%TM;x+I;^lK-+YM;LvkPj15!K1qPJKLikzgit#~n$ ztC%OS`d2LQ;q}vB0BB0EVq%)$GHHsJP+%;4C<99!haw<98Ocgp?FoTk4Ot0K_>d_U z#b5jf4}8fB`0%6ran$5b>xN~nC#?a2jy?q^r{s*Dmhu65$igtb<8!fxCr+8NWZJ^r zzZ}AWZ*N_8=_hx5<;#~(-C>8{j$dYQNxWd)(Y)F`BoY=)X!$KG?J)$IPwWE|sT5&s z8;FGpZ!v&7{6Ho-_7OPm4eW%6JzESIYYGZC7#P19(;gk=@R20Zc}%>y62kanj2>V1 z0k|Z(lA7mEwwhxcBl--x7;{Zfk^oo?dBv!21D1hF0~XKL8BP?4>N0QKQ4lCJJvws9 zut9;Pj-^9T+T|FN}X!9(X8g&5-sKUe_-jsGm~ z5JDw=$3N_ON02|kfs&679(HW$3o%AxPGC>xh_2!hiyLE>1Nj6#<`B)8I%(c(_uA#p zzxC;pzVqE5uR8dsPu_Hoaf8%Pi(qzsa>LMur=A#kU~bHIn8EOrTjv9!Se4HS_Cu1A z4odVvZlTHCaSxRb?+J5;d?HmylpFJEK|K#pONy)aB*0_vJOgQ2$Q>u4ssrt5^^bL+ z0bc`3|8Qb4*Csh_1LJ6u03YYaAv`@_{z}qdodFf%Kj+$F{uKXsr9ozE*s zT~F4dhbxB2Wu*-i5F%G4euyB0GAu_cZZmujMPf;LB@h&71Ba52vu6fwHV%HXy}`Z z@X2mBcE(s}*qv2z2AAHXLQx1rHMNqsy3t zOTz-M-XN;CFN}wWcid+Bfv-Jq>QDaL#m9Z|$9JuL=P}n_yWY@2=qGO2z+_Gw868@@ z{JEj$R<0d-V8P6xNwcOfJS@GgyN-DVq}2Ar7|$qWLk|}aFk7)n%wfX?3*OkNYw{KZ z+ylrnLEN{T)mY#O83uP34*}(kfBmm>ifbcq2o{`)CrSDeh9BVy)OD{;-{bVPqBE@JvxNJy{Yk2T)1_{CBqeVXxN)TaPSS6=41Ty-S`Z>eABJMXfX#j|u@8jiG4yPVO+HgneL~RgS;=4UAb2H!FvkZU?Yf|}Pp&xpJ-KpZ zX!Uyhr;{?CFra@2`-YEvRQDSuf z_Q`c1sHVZcmXz@aNOk8G)pYD^nV#-)U0%6V~OAgGT-W)zFvf&242H>$cArCgHRk&3z3~mPaDlNG>c(9=G z*h7*RCi6ec+L~{A3Ep9$xk4UKF&BXXNK47X`j9{pE=;PnAP1tLvSx3y8x9-jI zJvi5qNt0rUiX8c!x?yx^$-Pev&H2d_LnG@(xGmV2a>GSlkY6l;dCs-OSec=MLfT-I z81R&F49Nqd0BYYj)R+vuq*34hARC)YBXq=31G*;*YlKk*hK5NkGaI*3u6YUm^~JEXu}XT#AAS#J=ZOXcw!7$ zk`kkQLL`tW0E5nJRFC{aV_WAjBq8dqLAH>|N5)V8z$bUEt$<0*3uBdKx(weoughRS z4oQXq;yN>a+A=uUBBzRlYoZNc@);vG_^A!C#*A={y${S$sGL7wxMmDWu#hExaG0v~ zX?0;L0faSTjIZaO85w$T`HZ2}>$VF~tf3Pl91d2SwP?|`Q)X}TBK&#MXUX|Tq&gS5 zVyuNrjX|!9U8b$9tSmZ>pa6~_jz>zD{y^6>3T2f((f&_#G6(jdx2|m^+&0Kn2mIQzy8t^J&%}~zxg1F)-fB{>T z!%}vPD6~e8!6y=3;mx>ti*V4u=eXD<)*k9D1!UE~^th&_^F+MSz$kt%uM>ZXgP_5> zcnMB_^xHl=GPK8!pBS3_z?1p0eyQ|2nrZH8tjRg!u(QURb31F*!qq)@Ad%8A)6BaQ z_@r>2F(-e-#yOV5;c&toTZZ2};pT5DNc=yUZ&RQ3T9>kF*0#(r@MKb70LC!DPI0lxU* zG7x9AAetmKere^8z_4$apw4ESoZ1fJ_%X&O7FLiUe~LfmG4NNllSKBo%Ff5G8^84Z zb#OA!zm;N3??n_IiweaRUnn1ZvruqBwPla4*kqjLh6WI;j0_x!#AMKe3I&XD{7^;G zjvr{@%X|gX_?H*)$&#oTqE|DHeaO)xF!;}vN*3mP4`r|Cn(bL0KT&KdJ7nEqZk z6Oy?lN37WE)_y=B{;~(mip~qOWPD}|tZEw3hNQ6z88)1dKe%=7;D*9x8`3_E0rwvA z-=wzq&~V$0hx70QdmV>O;|Cus%#4}OMLMJ2a%LshnaLJ^7)$JPR96oLW?WaZPQEP! z=+MJ|!57Ds13Jb^JfeXhB+1u3yRZyB;k>{L&2^ECV-V-G^x&mKdL)<$ zcuqB;9r1Zld=+1v+e&0wcYTmj8W-cScCBCbJ}>E=el-@8*@J)_#A5v!FY^Em7ZzcFQlV2xENFWvQriY}$MW%ZwA<`3KA z9}W{veok}!P52ONeYU4VVvQG7=tGsX)C-~LwH)uCImLkJ-RLXxV!8H5{D>dc_{lKk zGb!MI&FYOq4?MEX&{ON@6eGx;L-@kp<70UMUQge%0~S{ou7X&6tt zh*Y9WF*(4STu_dx7d(32SaFHQ zg2}OMAlEpwVW#49A*=ML2Mz>@cP}5hLC6F=iARrb&Lz`0Wps%cq0@tdcOK5-;yVX< z(uTI?gasW4PZtO>TjCreeb`s@T26xp7j7oxsocbeu;w;z>U2}_TzB9T9=%5nXn^`A z4_Kdbfi;#E;ZI*XGPLBb)kCv>`b7Er+a^VMUJ9bFIB&{4G{K+lm|LshN#{*zr{|1? zIOyXGc?2G|%qWAEPvbG8n1;ehmd3!-LUuyO*uf-$&SFjg#ZRtkb9ly-5Clqyd1IpU z1Fj~1*he#`#(Cx-CyCrMrd&TmNgW-vhJmZ`3k$X4i@4z5JRt>5$tePeMtmsbBBDzS zaMZ^|It}ce%CyDUd4(@9kP;W{#M$B%98icKdf?I`Iz#}R zgq<~aVyOsuA&4=9qpXSK)hAIwO?LXXbM)~8)A+Hp3_<|Twa;!Gdg#$vL#v*Rw@rkd z)_}88ebNVMl+A&CCk0~69AMebx#G{05PGkT=gk=J1%N4IuAIA+BbT)m<4mx)IYAu3 zY4eyOIL3!Db?7OEQnu7VMoI2kcF-~A7zm#@%)vwh0=dR8B2hOFpsLtCss@n?)_ zYrp9615WjTN|%JOEAV6YHxd+-ud`Dq$57d1zzrm6k6IP*{@X9XWRsL>Q7$kT83)Hhhzwl_7* z)qJB79zM`;9RsJ-YfZBvV{CyiJ`@Akyw(UU6NtYx_L_KeE_sYkbbD&U(A+y##mBo% z8QQSRY$b&0!A-hyc%k4aIVKOtl~39b0~*MMN9R~5j|`%BK8*(pUKofrEn^}Y`6%l^ zaMV!?4>1pybQa?nXb2%p#RGX8zxjx7E|hbQd}0th{@vmpp`x*l7S~Fl~H_EhkAA{`C4eCVg^d*@{uEXJVdC)Nx5VxBLxfnv4t_Ik=ATaG#eRq<4`>}DuxgT} zo8ry^0E4FWAr$Xl%?V=3{Y$&zJCMMP#;f2*R!$jOI}*Pkrc4-4;^Mq1CyLR!LGHbW z*b46h@>Ncc^Qk0CLzx7|bH@Z!zCj3U*lLJbj!3{cCAh@>hW=rb=K;plV*{Gzz2f;v z0`0EsxyQEWzQ&}XFdo4XZgm26`k=|P)`FAQKD>U2oj;gcZvKQtC!ex~)E3oiwe3fP zl!5+*@fO$()p`^KzN3&dFSq!J00pC>aly$(QkRh|x_H~u65OT0n}v}qixgta;~O^% z;={LYAXH*THFS@W40M`J+3`&?5F1-?y)9swBBtVbkV zVfAlY;sQjTis$}$nzjhNgdfhK)>(qnh&Sx4XO1C8OFZp6VTPnxzY-`2;z{>luBvn( z-@kCHu2Xi5!lJ1?m)Rqo%<`I$_e}oWCT*besgAl_` zO-jIg0?C%Lg10c%mMaU1NfCzR5b2}(;6rlQk*?8+E(96B)(L6YX8tN(p0qEtB+mQK zcudgvFn;CA;dmc${rEM=`NAiu5FFz#dB(nmGQKIY9fKaA3qs5o)yG1j;i`}$WBEQ^ z%=J8ol>rl9SR?nh0w@QE_dVexZOp(1Gc`J^`%hgsq0g{jA9LlLUX@qt7)fR9_(^W< zeZ(Ad?-j>jcO3*!Ck;Mf7~eQc@vU$xbBP|hY{t@-FvU!NVZ->r96IKb#E7hMAxEa{ z`vJ;8|5l1Euo*5a6b)}86vV|ni^hS-T36Y#2vK~-(=_d((8-CSEqpoT-GG%zM8$_; z-q=gg!VFg6>9j(O05X0=l>X5}9vDe#uX{mi5{npwO?<`?;!PSvTw5UE!SNdp2FD?| zBLEdJSdRR)_$ERa4rKGXkXyzZo!4LE4=e0HRuFcR<2PMP?t3cVf4nYplQ&};HB0rm z0h-)$Q*Y=1=xiYt%n(Y=uyg|B3X5pwrE%Jfv&Z7(t|U@%(tlvfIVn8Bjj>$d$~kiq zGucCm2*ryTM$Az_X#+KXGPdM|j&fayD|pC&$HgtzNly?bzTFS5k^G1wZK87s^qJTU zBb3nA_%U{_?1MH4iJ&0hH$7zZ&=o2<3_;gIxsfn*p-1e>zqpIvWTg$(fe@q7JqHYd zVqm1xelkX^3I5ZE2{7l60O>z@lN>RVk+w$CMRKAGtN4MP@(+}d_Gw=ko`?X8FZ?aX zQ>#aY?tgU7(3-XJq8P961TW?oz}9@wn-gp1wneZ1!#(30q>f2M%*c@fQ`$0bxl->R z)>p=1U&h3X!0RW}Hc%lq&Dv!R0i^gzNdy26v4a44v~|ca53THD6e7kS5}^14Gnhm} zZv^eAkhaq5oQtda2bkDun2ePZK01x@C;K>xyc3+xJx zf0kzqV#Iog3%{jBA@imiw!GmGgKEu(DhY7m07fxR3~lnJoiehr$irTyp@~AJ|GXg- zpL$60CIv1A1NO!rrohLS;_LcHJjA75=80D@iIy+ghmkQ1l50Y|2rRrsEcilGA7jTC z1~h9h=2CAA;T2Cl#V*a@T%XHzB7UYU*UkvBZ>eYQatW~Io`lZppYiO5p*?@NdT8d| ztNGW$1p1OZ;Lt+|Ib~Xv8Rt{tv`H{S;0503S76{%UU-eMz2=NHVy`Ro&dRRtUD#73 zx#%&*`2$y6LTJD4#S1;viZOE~Pocovac11cO9`|ZdlT2fhu7ALSNWLjtNp&TTbR9YQ*F|X!;msaJuf3(B81YrCzOmW~OCxOAa08e4! zvGcFFiMlkI!GJZuB;dN}vSPia5{d;0XY2*hwJpaLbQ>H!Hk-4ae@jQTc+8R*^#1~I~|A*LvhtT9wh zu1H1Zze-fWxbUJk2IjydjKu~979R)Hsm#W~6KnRU>Ehja4B#hmP6k-X@W$10f$(|X{N zpmg&Zvxm429hKO{sW4zCn$S5uxT6uY8NahuNsA5l0WOROC4_b30Hwpl;$Yx|@Wa!ZqQ->a0Id^FN$mC#Z903|U zl%$w`d9gnjX$+st8w6u$AR35<*zptbaSO^?6mkt)Bdk6%KoD}Mv!nCL^APJMCoGzA zOf|2h#SS{}6~_(=_-MQ`&epqQR?v(;9rKJ3*E&lcv5^-62p7{B5C=#Ow11hDu%&lW zCNEXi11H)dAs76{079Gzj5$;-r6OFyfJW5!m%+`5s)R*{P&N`pm-KF6in z@PZ(Uigo1zBA9X&7D~$x(8LFktc;1pg$!K8gqUMk!2~+2A5#R;$kVxOfF}Ub8o#+o z;SZq&OZtShVhk@Kg9qnA?kJ&O#fL!fjkxqxxky2&EHDpa^aw_^>d9W7dBRo|6cmh=Y|&DzG`Un$+aZOonYRWqi|E* ziGVo^A#=o9ATVr#t#g+Av7MicKuM~ zVhf%kt%<5+t?VUC#w8oY#~2+OU3vYPpRW60j`%YmV-YT5`v2H_*JaPH>$-1);6)_G zi+GbnsVrM}OOE48@(_81R9+!@mgHkTrt%2+mQ?IYO679-65Ek4vLurtDFOsQfFJ;p zAa0G$_>D2gTI+v6I{Bj3->$PypS{+abB-~`oNKRr8jaJZt-o-YmOlIrip}+FZ9F{y zXwC#J-Sz?I0sw|oM?+*Z3e!x&ORNo{E{B5Jf0GUM>#se%zWef*ueaa-OmO0J7T?O_ z#o{ZyDYR%jd8?7}V-aQrcXgvIJ|*0mM;vvv#ps{vUDI^HAUdD!v-gPt*ZI)xe&Q^F z;~Mc0Gol>61KU$j&^V99j(&_|kA6L=z-7ZVZbE!jJ&S0b_?rgQC;S8b0)=SUx>#l< zT<2NN8~x%+&O9s3qq!`Pa(x&%y3I>~52y^jz~17+En6`H+qMq&gZx9~S~TZHk-A#*;F||+2-5fT z<;5{lW+2yoiJ%Qek^~oD*3DA}({fWRclRMi+c4erWzo@(&erOlxTdL%nrKaKOxD%C zq5+?J@5Af2zWLVm75)6<58wU3?cnAZ_en4)p~KEZcIM|rh%edW%bt{?_`pAk2OCOw z`P}$Pzj7}9L?K6G_(29=owyw2$?Um;i8JqzFP(T0B7^fB_;A}`yeYHvl*|-y;*$d| zT#g8D=YkN!71Lyq(VCX9dFB=8+8oTxD+e2?6hmFl5Rrf^vt08gijSZucwkQf!Hap3 z4a_npF~gP}eL*BCeNB%9p1|~4{^}yf;bS@_+dN%rb}IrKd!Jt@n!nE+N;*&epZw^_ z^_`bKf4%YUmy*PoBViLe+X&o3M}uis?-A4*8SnO6Dbfxa=K|K=wR~C8KU2q5{s1N>dJ979FGLoG`#6eUm`D5~kewJej!Q5fC zofw1ApZOjqs(HW`gv$$0SlkrT-e7M1o{yULsDAf~#p88%9eDhW@iW{K4qq=`GFi?m zW}LT&Wxx3QQrQQ-_+c#Ge{$O_!NY0yk>7@MJqeP3D>HU!g*STF8(}ztn|u|k*yNu4 zmNgZO-YPxu3qJVfN)5XMJ5CXDqAWb~F4H=7N~HX)syXj*to~|a-Ot)Qx|nG`b-KFt zJCU}!Zfd6o*Y)|gKe&GPPu{pb{jE3j{l_293p_pT7Z?J)%Q2fBMzW3R&_tv@aOg9N zbeEyA#<~t>xuU0x!8hJL_<3KLCP#bXERCIU=_i%qV~(;NlD=B!{|Ek1JY32!`;t0S zYrhz}HYaxaz^5~_(2D${52G{`k0Xr5ucBMb&ToozZsFmZEB(o0I^ad}p8}u`kEPCZ zo6tMI2?3_hwT4mg195FPh9OBjQ3g9M`hrY;lpTCGyho1dfAyXHb6=O5>w5p453d*X z^N3%0^DEbrC;F0SEJ?Vg(@yG}ZPti8WD1MMM!1A1B`TMkcl{^EQt5IiVimHr&&&gH z-l^6vE1mLl<9nm`2C=_fjvE5o%r$Xm-h;br$;yhr{XW-p^MWfDk&a{3<#pUl8&+5J z-`erXvSLjEP<#GS{YL@EG#qnx;>_CgvImT4PCAK+=H*_6t1#3Q$lY@vPH;OLDN%nRuuJ~?=S5jb8=S>oIF&f()yto*61_;~K^o~o+9t9CW( zn>s0A^&`J=x$Ol3Q@eV=9)thY*WbT>>tDToJ@?X&2=H~#9KEF1?qECa6-wGq{C)<# z4l>}(Lr4@ru&?lBT`F^$ zwz1)56*{d4xbsH~Icy`=Nzvm42I28z&^0tGiyX{@ms7F!dCH7+>kA37*%JeG1Ha@2 zFI%*ja_5%-;~fQ`e%ge7+{DYTJb%6L+Ly0)KltR-tK4X@1l^Rt8m*7DvpNg2l@uY# zY%_N2(8?~XvhmM?-{oalRgBi@fu>U$#wFeTaab_BD%P>(4nEI%&)CgA4o72}z?qt4 zlgr&jv^0}N%CvCSua&}+59X{r8*TO%rq&$EZj=4 zrwfAsAjKIz@jxH1yXwH>&oO>R+ri=G^1;yE>mDq*@`W%F=Su{;f8MX(0Ky*!HD7v6 z>qG3bC;!4@P~N9tCO?OnkLcM4GwbM!miiE=#4v?gn=CPyct}Z@u`_>%AYmdwu6`eC~SgbDuIK4Ju%sm7||SDr%Fv!JB_H z*e5!0I5lP;u<_*fnaX}RB-vfV7CiYu4;6S8=QB{XrXbe{B2)TD_DHdQ#khy)>orqr za}KiH;vG8mMB~=KXy9)Bqcc5igi9$rIYzIIH~P^`|G?_zIE}1t=9}A*j*rdVD!)y; zf97!yjt)A1`J6}#I#DelFXj2ng<1aDBafyIfA#|I_GoyqSO+6{;2_WnX`hT#SBZ#dG^??535USyGlzL}<1)BlYpidcP4EWS_ae>MNkpTBv1z6B+`Go`5)1s? z>t!=~@}o`Hu4U}gqlfrJlRY|FlV{ zm}s8_2@`%M8lrLVa;#LCwEl_yCCG2T`1$MgpMF`S8wkg!96o%(!?9{_GPzH!#Ew+s zNVhKJLZ|CvGiG&f_vveEL|z(Bv98Z9`XSdDmQXi}sr>mcqvLayvD!w=a60~+!|nv~ zDA@bLnyaIyU38qY=w?BW`SP`nr8q?3W#_-v0y%*Er3jdDQ~rJZ!}9%b!+H z6ov=a*+9b|=s*1rppVPH-VQwe#`qcZzh89M7Yx6QcH(X4?B(#}u=)s&P4ROuHDR#` ziZ`ue=0J1s=0G~Qz65T(xcowZb;aQ3u#0QHZ`nS-Ec7ZpfW?nqO z?=M_=v6z4GsrA5%55IL5PY$_jg5qYF+(D|MWfeNH;dhp6SEB zl;^g7qUnG52cA~T^Ti*(fBnuMzkYq@FZJ_}9Z6dD;JoUYJ|7Kawh+5p&88YT*6N* z^{_2NsPxn6$b zYu5)KKA*Nun8OuMt~F;u{u$Hz_|sT)3AB=%Ko~R32*+ILx%&(4`gBb_FK)n5=h&xA zLf7MA>S}jGxI~ zDG&x!u4<`7;o%j>Zq4c_kms6ZKL{!Y&_&L9mIVtw5BKgdh z2&%}(p?^3AjAKnfMdxIg7YqTX{+qtwJOn+AODEeGf_1^0*_qy!hxiG*(?M0RU8rjt zyPq<7>vFs4->!bT;Fu}##KSQkyD!2x{^|8=-+%A=?SJ{|b-nVFLqMcNPQToN3IEz| zt<5PekCPYb6+=-b8t_Q;ikkzwx5+rtjBECld^KrXLIYNxlLp#+&X-i#?W(ZGjh^<# zxfK~D)i*)Tusk-Fu6T^}d+RpHv3QIw1%1=U!}xwdP5}dD7|n;pC9|%MWIxwRHu+Nj zM(=(|#}Ht%o=rF!H?A|{dS(Bco%~d$506AOHewc*rCcljgkkO{=)_#t_rL%A^_^F~ za=r7xr-GUI#pht+n-A_GuuqZr^lRlL9K-lYyw?~_pz(+~&CKuYs?x}suMai0H)>2x z^sDo;Uxc!D&qPL4KIlsOvint*Jj0VcgvRN%xW>FYS6$9iGXjPmYzQ2|{>kL|*3Yv% zws@>E)KLe9&zm?C$?q||t?qnIoZe^!LNK_QkT};-%hF%p<9Jscc>EsYXSN+aEjl-R zVbGD$A@L#ZVUaB_m2J-<#^4#^?-}&+N z_A5WV{_;0JcYW*^Kjk(jHw{m}&4I#^&HCZ9?Vb}5n2-~%;7EwCKMH%{73aq;MK~uM z^dpa>@FrNqk%NDjty4kn!PHwJc@``<+>^)r!Xug3#O)k7SlM1~t@(>rc&z`#FD;wH z{es?jCi0Pg_>yz%#Ty>8L9eFeUFEd#&KW z=yT2qBUicsK0D*F{Xb&+oQGLJ!HYRtjQu~Xf9D}~)pg|BHm5KaWM?23Hr=Xw zJ?{$coKpXP=_e7F_>NSuJ>KuK1CM`V{LHq6Bf+JkHZKp4GSB-WzKLnHm%8}?`c!dL zbBa6maORZ)f)krDk--xe%-l!E#)IK1sv~sySa@Mu$HGszVx-Snd{mO%zE9&-x%VGSuyuDS&H31dXNk0d;ij#?#1rQ&#wi#g*WN!-|+5C z?S8mE{mzr?_y6S0>q~$3gX_Z&^w<31Ii3Z7k;YjN-FC{~@DeKYw7iiU7mANFFD5+JVR47(a`R@uBL0;l0D5no$Rg!_qH? zd0E)NO`q~=;L!8simP9?!jmuXCd3CZmvbC=XNjvm$2y)Ijh!6e^})d=&If#`tpL9< z!G-In5w!ia<&}^-7=7aBliF@#G5-uaFs{Kl2Ampc0_6=X-z;Gr1bb9#7U0uY4lUehG3>0zrx2{A-H}ha7eFA4u%oF{G z*$etU;ul~0s=kl-6UK0J4dS&VNNZ(l zPQ#svTku&P0tjM{EXo8U7XCrO3EVJZGwo>C#1`Ywr5~Q;&mDs5hg(*Fq|n&dTm5!F z-tM#mkKao1j5fvxWZow0py&;_ zuIkw5cd#1Fc^qa;=ya0gv!Eg%%-g}1#`@(jcGyy-@UC_oHN!DH#V4yNe%%V zgr6u~gO73ZU|)5&eiA;o%x~NA%#JSb{0n7^hd9|_>7#=#v@HGhj=nQ5I;}YxJoj|$ zqYWOeqdb=uL#+-;Tu3zs7p*u}-{jx=qaFW11?qQ366RYe{I1bQGQ`GF>& z^`RsA2ciM~X@-rru@10)aPGfVB}?-x{YqVp{5;}UUwi&~OFwC19<}8|qP2M>Et-3& zLQ6ucY`&36%o9&^D$B%hQ^cAY6E$$5O=>=?U%btGpQHOEX)dn~u+-IodZ#C`d#~jw z-a8`_m)+5Rlg(}VN4J%0V{zX;f9Y}fh;>iPGOb2X8ST%OH0pLl(^wE0{dpE@jwV*s z)Q(g#?N3wdN7-6A8Z{H z4vmgWUk+5F}iVlo!)os z)i~1xii|kL%e^q8zZxgwWF7^I8Aj(ve(F!wVzS!#K}V<68Mdo%LUn;otUEP(WIgE=d(6q;rUb zN~tIy3`Tc1448nFlz>VzLO>KocXu;#bjN_vV=x9AH{bhvKd!Ol9P#Sz+^rndZf6WfcwHARjgd#>z<-(TG_B5c(5w%*=CuC-kBOrWM}TZ#{t zwSnmd0d0BT&r>Pnef%Qg7U87m$$iENC$A%40dWKzt)vwQFVikbixm5IcKN&2E&|0~ zS_0Zt1Mt?HPZxZX$I&+)RC0@lnu1CewUTB@SJFnEYk>*>AS6PUO5cNqr#Tm*msocM zns)r$#i8Ya{9&W9wP^lZ0KZwm4iU+$g6n0lzZ26F$BH`c@r z@w^x|&64lp%G3Ei9bfw&k)`&7eCYmB^d~>xH(1rxPMO{g7n(ip-!2c?GT3>!6gUE? z<}%*a(a#{A^m*QaG`qwhxgqhAccfxco8QO^tYUiYTo+c<=Q~7>KLyfJJBxoQl>)VW z2tjtlRoLFC^?yhi#~5PHT9Xj1N(yH(f{6a|E3NgT8r^rU4=l=IGyhF*e_jHQ6VMBF zv`Mh8CM>qLPY@-DQxEI!B2D^So}j$NO~S|F}_Ips{e2Y1G~BOjc|Tl zrA?SePq8wff`tc*8J}dZn}qg=dVBHS9bfC&_>J0#TcB?P`7`gj6a7d>*xOf?+><(? zy!B8wuQIRvAL1;-`=9Q!trjWp4zuc5G(n1us%5ifo`0V1V%BO>bjAT3)+(?2Ux6Bv zyL?92)!-YS>qF*8o_$}0$%N7@Y{O-@H=+pK36CNUs~*^7YTu&Y6(HA|e&Fi&C-JQxZO21>2wJvH3YrRzO*GQ70XL=NuS^|4oHrXWd|RmNk7diq z5m8Qo@1MSHl^$B1^QFt=c}>Lcn-)jS zC`0Y|mq!VduRT|eS@L&Ex1q^|IciXI3kCxR9^!GxQsikVYq5fR$6qb2E0@!&W7bq~ zdw7+*!_A=o`eG;|9nf$yk{IyAJvHbXRsTf3dnO6|th3C@6wtv}=Y28^e18B6@((ZG z=(U@B1wg%-O0c@Nl1TRLkq+23)IPI%GtEkP@+RJy%+RP>TdvC$Y^D=!vt0P4C;hS* zb!9Qi#xs7J>;68p$zJnM@sdR>)smtD^&ez+yPp@6m%{o(hxuPW3v;Cs#)wt z-An$OGYnVdOXaBlH(d7EI_|-In;7&`Y!e?IBYI_mhniiyuXP&5B2`M=Q5Z4OgFviQ*@8!$)m|U*V~gwlM;2tKd1x_6m{~Oxd`)|^tRX65Gly4VX4b!0 zAmboC^BnAfO5pD=k!yBufPw;5c;GSTHsR5G+D>JaE-M|nW! z%1yWK==%PM>=Bk_-KOj@DmoS(5>JoZ;3f%d7TVa04sIK|?XgKtFUBFB`C9&Ro^{WF zM3K{$Lxra>c`Z-~L#b)!_~*yQDR`5v=*Z<*IM<~>PQZ`QC)vRnD0-sTqk zE*@WRPW;cCByQnMOHq^hf7Q*vCV^Jz!{fwv4h0Y(TOq^GWq(HFR=%M?Cc36`;g>sr z+a@~D_RQaWw>4byy7^8}c{!L=s=T1U6FmR)A-++nwDkIz8di81L}N0R{n)=6Q4nN%Xv<|c0GYBom znADa4E;LZMY7wcPwU-4zkL<5PVH5<;U%9DEB-!@qA`8G7x;OjDtWARQ}^9e;q^rD zqZvb%{FXYxk?fp8L9*duTPWGjt@S~ZA?2P^=n{RCgp|Ize3sltDg57xj@k-;s^Kn< zOPjP;5a~0;PNkud)PSC0r z*2#nc_M;u+>W_@WvehZz;dSm?x)mF#uQR{A^e{uFnTU2~!ynxtQh8C#+*1$DUokt8 zIQ^s66(!YN?<&L9lu7==HJfIeTdgp2LB$WW_n@PFg1a}KFF3+5(o9HwybvLwuZcgB z28@t+oBy)*jkpylq#FY@dvCAoNz;z~?C~zRi@H#GDG=F-G7=8ZzK%f)gLF=*2kH)v zYab%RHN)u{xs5asCmMp;C~-uig)Pi6t*t1hNL}c1={Ag z>AKWnCcKG7>nJK2pYeONkurw38zo?)hyM_s$|FvxhXdB&((qs>1B{*Po(3RGQVHFQ zBK-HgF6T$zJ6g>QAlzxUlbudOlB4~@^C+3-hyxK>8I=zP+pOEGcQVCj+kp`{LMCGZaSCu;CfS^Cq zVqb^Lnh$Rr6cnno#RIk-T4$P}uX)GJt@tf(I3KBf9omc#1m*AHYPjJU9y(FUdVDcM~p_3A+E z25#wG(JK(OS!!~)3w0A3#ov0$TCORd=JY`G;LXM=z*9g`CY;*YH$c_Wefl-f@_7^K zO?Vbc5|!FPtH^S&E9s>N(U|go%AP(g=7NtJTU1572_{zmcph;0i z1YqJb{l8jF((~h@(aVsepPdy{Vh(nHgnR8;Z(Sw!7oCuQF$fBE3r%(le2;eHp-wO} z^5Hn$=#{LZ^SAW`9<53TC{AL{D}9BN#2S7tQ;m*@*S8&+&-&Vo$x6o#43mf^hqXs31 zgKR~beDy?aO%uDLbS^7hI=2nXL&jRQ3Jimg^DdxP3U1$5DQKX)y%1{QQ4s;HjO{7}m6 zp&Nd&4CK?4_Cbc|>bsJ#Ut(z<+>LsU?4ve`?wjaB_dJlWO4uW$+ClXT0AL6-!t!1YE@W62e?<%DhKi~L}% z%bbKU-RJHLju?yNsq1W^&FWth(&J|87>Gd%!s#B@kTxEFd-%v(XgwUP`ODH~ z-%wmpn~qVA7}hD;u^~gn^)QV;b2W7rwlTIS$~e8viD=hr^-@?m_)8QI__@a9q)vrU zoK&#Y0=4R36;&0#v;J;LN%i1@@F}`{4Xc;=?YcW)MzI8VWRbaM*+yN9zV#i@x1byB z7@-#NlcVny=#FyN{8xsr>-d7vTuiphQ4Ot)kF*3Y=h3V6D5;Hiz*(;QKaaG?mluuq zAzwdN`ftAQL=&{)9X(Pgi*&lJt~WT9pgI@*wmasdLa7Ia{T_?95TabcFe!C9y07teY%0EbDeUVg!{Ww&3B@|vxd^1 z?LlzQ2FG<+{ci&BFZqMFhO>?Z$@MSRs;$tnSk6&@m*-J*ho2pKWxuB@@H3d(#LGWB z=yeJ5Z9d)7hf!y3HyUqJRoO`6*KFq8OXP>5oVdUqMv_(9L-nfa+nQwN1H)g2+AKa% z0erspeIOvzs6b)x@vTud1r{V5CG|D2t8Y+G`0~;MVu9{ORIH++iO+m+1ai|kjL<6-(>YDlmuh-2v93F{>wi^o zusULY#A+}y*+gS%I9;)d+{=uJuWLH8u#Tm<)43u{LGl|rdQYe9Rg6WrLb8J)Iuk(K zz(99L_2irMQ6asr^Qpx!s|7`oeU>H1ACL} z_Lh63wGS$LCtHs0D~LuV(O#Y=Bc#L080s%Fnq}+h_@P4cVwiyk&oMg~4VPvg{3;-D zAGaWdC0O7&pZ2z=+MTAVNwus*It|2_1eDW}XC% zeAHQ5vixv8G$Ac59~~E0-~SWM?ifAx)<3h^ zyyvI%0aBt`I$Sf&blk=PE{z+o`{oB1bTp?R;b2~5Gwljo^uGQpnl`17H8!^YOZNvX z4}W~(xYtMAmw4p8^5;676JP0r+if?^>ZaL8(&5~#hIFmT^0*~FU$1@K8y9Znsz;a% z8Y6s}O;GG`o7=%V6Xq<#mMN7gSskeysUqsF#c}Om;+sa~MI93M>n<$Qo+?OQp)E$H zOop+VJHMRxbY&90t=nxILgJf_PSn^gS@xyk)&`|jPLkB`^-2f_KdWnBY~t()fhNCR zEAwhWCr|isEtzr+9F|{1^|M%>jzrsS+EMaFT8l{PK1}Ktwm>yb*^&8pc?cUnNULW@ z?8niX2}>PT_ZC4tG!kiWtOp>bO3ddsHtW~sK!d`V~^2f;GsrUudk{0ES83`E4Kq;yIyVlBD`{J+Gj zu|$ZO7EV{`uUs;HD0BF>vdTdd3V!dp&1-h#7SAKPu3r*fnpGj!<+AfHVnv_u##&pX zzSwMwsY~ry*kw%AY;~xs$VFj62qld_f$?k-WVS(GsHUtAAkRuoHX($eVtr0MO7=58 z#>u%(O*Wm7Kfix!Nd@-eUnXj%`b{5HO=X~IB{v~aP6RoT9+&(Y7kIyu)o!DUg>W`# z*0a)hNIncKxnxa6a`B;^`Mu#`wffG}v7&TyxdK;IFgCGdbGqEil@m?)i}!SCcuGN! zhrDvfu67)!V{QuIO}Dhk98L?ydhOYoFnR5(&VQ@c2Unfd=dEx)*_>@Otstv&m;&v} zRT4?px)x z&hSd~2028MZ(5RQgqQtzB16~P)F5s(l~&zw=RjO=erIm z=|{v0xrytr$~pgDntc~2FIE4GkpCm4@_Ofqv-K?|DVVVH9x-q4nah<*ik-r3hwC9{ zXGZ#^YZi%&(L+Uaw}9L6{n9AtBfEeb3J4F^xGsUvUC)n1PA(Wno679F~~>WR3On${+HhTu!jBZs{0P4d`K zU=}1wAZI9OY=CUHR+jN@G7aJ;mkG0yELCT3Rs%ntL~0H%wHC4W+N?bmI~%W91<&uF%T)VDZ&K3ZXyt=-mtm!Q(1V@(|ej zLrTWr%d`j$dPZJRzW-kWwFYa`y-V#ojE=&Cf@)?+?SCN&VWQ8P ziR!K0%eyXK7Jlv@QtFp@b#PF!ISDzSXIZPzje52wyPNp9xlgeMGEuz9&-(Z+$e`4L zbz`&&Zv+p2v79O_E2ZZ-@W-X^ya4nfQ(J76UpI=HEgW{j^ z-RYp9Z4D`xd_bE!mLTRr6@w@udG4>ZVp_@@!@ha(hJH)sRa#}wq)PPJ5+BDzt6Ke~ zj;?z>S8~U&)40=auJf!d_`Fy2ot9&biXf${%NnRnO+Z?@Qs~3{Zep>}wA`tJ;SV?`xJ$Io<07MVo9x)ryHCK|DigM8cNfI)ohCy5rclX{6n z85vmS)R_%TxztZCsyo~0jv_a4MtVuXDB6!}>WM^Tm2g!iORzIXH@}SAiPk_S06WEj zOr#VGy>{=~l7Fx`_M>5P|3`&qzRioC=iu`M1CzEr4!LAe)lz!O<)v8~+D8FgZ{`T2 zWj})o+U4xiG!IT8+1<+z+ppHhIjmaBM^mKMANv}K7f4Ei>fAvRTp zE;3yGW2XNWctX)Qddh>iB3NCiQ(o9VqFoIwY-V*!sr&Q!mH)_xo9lws2U|X6)4Q-o z+0~lESpaeCm01+9ramF^d@l!Ci}2ljnepn8+{gQEweFnIq67F#E0ZVM`dK+y(HdYd zd+6bk`$6k=Ic?|E*qt~`1-Ccz?!%+_Et(8+qXU$8-tw@GdC)M25yL~9edmSmnWb3p7D}{+(wRCDBSCvSKVH^ z=yGVhCz@VbT(QsPv3X{4yG+jy zhP{#7oS>BH`5Z5SLG@F*=ebSRYOP-J*nY^_mgKZ$y5hSL1yB*Uf{|>|^LX~DY@cwV}?+#z4)#F;K5Ykfr>sC($)Yy-<{t>>HX9-*Q*gS6ktfhmUzONV!{I(ovgm zL~A$@#Agtn)T?^b@ZKl{ZAqq%V7+}v@4v;;v*Gu)e{XfyFT1aJM6^K(tJQXEn($#D znWD$g(<+XNN}C~lB9(+IPgV3P5(00%I_WLtAe;*DwCCx-MkKh#f&Jn9^*#AB_`MZJ z?6z46T*N~MQ~_}9wF^vhuT~4#Qrz`v3T4H4xCF($x|P$-2i_VsV>>W*#{)ZBok<|Q zUS}!RH*+@-vQ~03XQaijwRc#a@67K2V=6G#HgBTzCCg4uwcHywU1qf?QRx%kpSE9N zM=z`_=;$3y-H3O293K*V8M6evrax)LNHJW!pmOG8r;#-Y6E6i;l$wN61?1P|K!6Kc zBr^~_r|&UyQ1`|e-(`I+nc1~-2? z8TwQq*M z*6Ws_Jmwh4NDWyoG-IkSz<9fJRp)axaRTc!CW;z{a=C7-g>gWTz06=JM{-q&jytrE*oOGwsD(F$Q`~crc&-U5;ni|nip}E2RRlP@rX1O6K!Z< zC<*GGefRHGpd6;N`sfz_^={_}{%!2zSs7nz&rh{_lj>UiMEtjbwqwe#&US+dZmopS z!f64QK&@+o-aFxNR^)S;NP9}(X6jVVL4AMCJFxzLH{BIg9!_`_p^&0p;+7Kjr@!4` z4!bi6wUwDgxG=F6%44SAO{>zIs3L*zj>8NQLMU^6F>hn z(@%UG{l_a3)&7e-)-UL@PKMGL;AMR0;(twXa}Ce?{*i&dwvMn$4kHenB#|DHBvi%< z3M=N9sN9Xd!$V>OR4h&9za%m-fAITq#cJ(x;7-Ikz00SR zsA+X;^^x~{`9sQ&>x^vnL-`-0q+jKP-=O z3s3Hb*PRvgF&W3X`-&(EGycaEuNS^&<-AY;w1EQ?{GW!X+65 zhmL>$1INlRu{qr-c{JeJ7wnWi1RSk@=KSpCObAa5o#!5D|IFV?5lkvJ=r7r%jbp=bSIA3cy9V4DpHAp0t_tvl(CE|iR zL*&wX|COw_#~jlVf@U&1BD(A^^`Psc(jz)J;JMrK^d3~@Lvrow>V>m-=81GiB{?Ol zA_&InY#e)>`WcT#um!&DS^%MF9@4Z8Pge(*7VC@zj zs5-J;;8z1`zjn=dd7XO|GZ98-ZZE%>xm#ti3w-C)?Aq3^D<^pzzZgSBDX-?fVnDm2 z6|xVZP~3lzF#banlJ(Mbb|H2C$BeR)HG=yET}$V)g5?Cal!Hb zJ@C{@4}z7DKp=+0{rtd!HC7z^pQ3XVgRnHtf9+)s($1ja7-L9woc@BLN{%TF(PzjbT47r{e|$ zI9g3E`-Puo0o30_FvRn(o^i}H5Z)-FUq0EUkswCwr>)MwiNKa*A=y!`ir{^_bDA&E zKa-z?O6E#2@`K5EzEBvGApDJm$@!-GP#3q-MX|*W$MT(}F_p`00voQfwCp7O zYeYOZFbJmd14$J3@aR3hB8mEGFozElc($K%UVd<>kZKo%v$DDHU9|Z>WrmytcBsvv zoEgcQC|0lCFZ(wQK&<_$IV?QeC4viAO`6>QN|%80}X2V+qGT){`Zs_%MbqD7ERjv+iDO0?PS z(%1e&^u4pAg4Vc-`Sw$8w!X|GQ_gk$BV9$xS_KMuBSRKu`7^rKO9tX&5%*NT{pA%= zLzVCqG5!whW6t7Tb(IcvN81PT1t{Ia8_0PDbbW+lx!%}B?aUw6D{`%vSVZnedsXc{ z=xw73Y8UWIaTJZHf28ND=A|dOek?<(=~xtLXIw*7Ot-l{Uy$bQmt94>YU{LOO3Y;CUe^0NVY zJ1VH#aN~XpynkHKPuB-JxF@&&cCmP#&avw_*awcLYE#=A1v^N28{Q_6Zi}nE;5k(3 ztSd~D2_ls@eHV#j)^7XACsPblQJS{09*)C{NjMaK0n#y*++I%;fpd*X+o)Zq zfZw=qa!MM?k{tUkg8ugpkK(M0L?xo5w}ZshrZ>a?xaA&O{3I@#4Ig%}oL6)C#oV^a zhV6Luo?vaQSrTP!GPig5@msmC(pUITJmibMqr(Y-8f6W7VeDX@+s(}2gH~4xv;?c) zoH%lsu!iYCwFW3$h+LDAK|G2L?t)E*P556z`AZF5=^K*7^y~l3i&t{=$f?MgE}6;# zP`mPhWI9K@!yebP_yH^}KFV>?0fnQIAkW2@s@?S=pPt>$WPsO)S3hGTCaDdMM@Hgw_i}DN}gf@%} zC*mR=I7WnE+6eyRcE^+be8uS=v6T?Ky2dU`3^1R{e-bHt;MNpPB_AZvEjDwH9l~MF z_KP)))s-pm7M|B;D`6rO5Yd<2BBJ?==r8v{GJ+LT(U~B&J0ypcty>$*{OQy%7$&rS@0SFH*}IPi}emZ#i6xo_(V!4cg!Ift5n8^HIy!2w{`M zs~(1zgG>JMUJGgh@kgh`ELU2-XW91JB6hd=1CNRubr9b|jK6rKaKAf%CD9;3wCW`@ zqxlJpBDS8^T1fzt`84VXpPh|w52ajnVHsn?IsNZK&_tS1IWMs3PUo7XL0!g0#2vZMF<$_k{bUGa2%=;1VKP@M3c z!I`_3;Wii-syHJ)8$+9r4dCbrWv9Bod@$mrHmv>Y2z{qz%~J5GUsnDmEb!6aGx>sA zIAne3Ut16RZ00$4?QU%s{_3TxdjRpdE!JVb4K6DTDG4D=XfAbTi3*bsW1>6T3#p%X zqduP9?Ruf_O6V9Qe+gCiqiD(%8EndhV0^?TZzAWy0ZR_-Z zNMrubo5Kdg|w%qkyyoMtL3A$Rr#X@j+)Q-+_WsevH$$p!%%=bw; z#O@KqGr_wd)*u+CqWgj`SxD~v4$)gT`8qyH-X{-k^L@F43hq@@{L|qx$dtA5TmWXDG~heGT;jP`H&GbuTYGeJP2rh+TMhJv==~@Q*EqaS0>q1{(lO#p9e>WVYn(B*G#>;g&9Y$WIvl6mlf<(c8^JCv z-G@`B6rqI;)wKsi-f6|Ch4a%VaHj@&JRLbIR1yzeYR}Y(j9_6Qi<1}RCZ=|b>w6Ni z!P->ZC0poxRH?*`&KXWKFvdnAi=Aq^dLkH_)_j9F*Tz>CDuD~wFAKohmpx&etWxFi z(cu4P2&c5SPm7bIsefy~)8_5vQPgH^4H);&=Atp$XN9?cYMJgy)vR54W2U_rd3!!| z$u*+PRpeOnYp=LuS&s(TgvOBQRCUipj0JPnVb(;eN3*8--G2mlJ3LdQQch{8DO=M% z!a39jdl0*WR12~w-uq}X%Ct7F(l+F& zu3guKRgXHqKwLFG5=DgM@QO-}8-8|EXkNlUg_IwVPy3i$e!6j0diCJz`ow7@o!bhf z6BJ9L^CcYfT}j}ABC}I9_1AkYO?i8n6ePD>5@ik-EGs`Bq!TDRKa0JsC2Y6_&hY-y z;hnXs@_v3_f{OGpFxW=%yc;hTAQgOGX23jc2@rfyt-0$+9OxW-nmCA0r|ct0$(F|w z)yj+AM(7wG5-j9!7WT^-nzi|Y@5#y(E~o3r6tJWidXC34e{Lge7iP=-t~EA+hNsMe zA?*Y~Jk{b4L%nOpVL!TeXT8T%|D~I1$P|@jTs^X{I?gntxgw=Y*|i;Cq7(ZCdWE?; zU_=uW9Br}-t3$U($e#!JJyK}nu)z$0;?@F3`*lXz1@R_u28OEAhh1+WZuizQ7$%8e zTT%hi?UxhH0}M6A{gn^uLDfe8$X~;FrBxSaGjZRmF7@$x0Q`LQLE6OjX`)QYK($2$ zM7qcOYyll28MObee~XND!8$zQ)6q~mWEEAz-517C3^ILfp_!jD-S0uS^s#4XT_ol1 zV{>}QdYBKa6%A?e4LoUdVT1SWSH1%M&4;t~|Ea;{7zOfYv5S+f{}yji=7TM)ZUh+} z8ak{gn0Nh&mful#$5ARZY~8rvbfrK3op;yPQDf92mi<;IrlEo7`lUY0*Pe+f8VS)! zA5P5(uI_+KWrZ%Ro$KL;9H+I_I{;nP-M@?4BqA&xa+7YCY{bcE$ICU(_*b59mvEg- z_)VX%9n4?w*^hg&!$lzJA!enl=^tKc2hIn=r;`}5(`9+V2>0_BH0$HnliDte%V%%9 zke`FM_UO=Oc8BEfkBaFUzct#waWf$Lf8G)dpnA#Wne6o7kxTKOZp-TL_Ezy#DT`dP zXDv5H?t|LT5*nOIUn$iIYf2?!ru$|tv?kZr{_lLt$Q0kn5(Tg($pwkAxi{e5+MHoLrm3S`AL(B4i?n zOG$|vIXpBfC|Jq7=$fa=oZ1|7`8C7ab+tiaAG9uB8`Dnhf);L`h*-r4_G3IF>B1jvzTsKV#LB^pP!zI>e|g~9g<1L4ibR6W~iEgLe_o3qaf z%VaKB4IkbDBTa54($@bc0-oTnopgNn4`XNH6aOG31^#3S<((_@ua@0vNzX%!h{!=v zftX7;2y!wEYF-L3g4B<&V(i7Iiyy0ngl~1fx=FlKSug*2YS;{-T9b734WBkt*WW3; zl}J1Z4t3h%%XaMlc`?2$ORt($_~*VCax9*wPIjbN=HE-&CD7jeV_+Vt^w-v2UD>(R zaqS0ePD%st;f>qSv~l<$$>V@f%kb@uPKOU#P!qE4vA2&I131jiE(W<74)4|{8N_Skn0t%_9Y@!ZhbOi zZ$SrHqc}pq-NJ`MJ{&DmSxf~s7E3odO?SWSd z$O++KHTn|F%Ake9U`Z79MUy3e%`8h#o#hWwTMvg~p*zvFlBLukuL@h+GA|yf!C0CQ zk}r0-;6(xmaPvRmUo~Ol)7WI_N_P((x%q9;&MKLdf`w>5v@*CN?B zL4(v;v+}s_OgVm9JOO)LlsWph6S9S#s||H!;jr-;4esTbJ{yvJ-20oP5X6bFOA1aF zdf(-{A-=;P%(f<@)?;yYXPs3jg8fD#-dw?jabmlzMgpZXeO#v!y5!V;izevYtT-K5 z1X{|W-hH#>DT3|7pUpjSoGs$-s!`KN$r|0dQ<Nu6U`$AFzW=huUGgV%6d?9^}v(4>m_no%5rD58mIhR!^XAmIq`+!MbcsuIcp`&p6AB1PLw5zQd zN)`q~1?WBFl~mTu7QHJUKya)T>i(H@+%9&TP9GgNZ+5(*q42MT>`W{t+cePn}#urn-$F8kZ3$-ujL7?E^cwcSeCy@WrrhR)&ClW&KuARF9LfxZv3IIyXrQ~LxTb1Df#L(xO+Q~)7r@8MBybi z?jlDhix+nfey6ctOr+O=3ly(bb});{L94jO*D+#m8bF$Q>>@j_7vrp;Sb1gS8}fMY zo7Y_nC+Z|E`HQMl$UauC!g5Jze6)YklDFBIq)w)_86{-`u-fiMKMsLE#>jQAF<)%O z^8*(Oue#E7Ygf~vNDe6p^$XEL2adqyx2w%LJv*Q@zG`ubv6X!X)l4v zyl`(zQOylwqZ}bBC$~z>H8f}4P$8GKF|gU5-lYkpKyJ>lR!bXwQ1<9aDLs*!t}9|` z?#)n7%t@M*$t(HUg1cZimL;+OxOI&u|#xs`sGHSigZ18d57r+Tgo*XvH2Iza-m!QK#M|2*0)jntsJ8#}pwqeLgB%|p8m#NzwyJLxl{hrXaXn9%+6&!viroPy z&L!jfI(*JQ#!L`a&e=y5amfZp8=Q5Ld@HZM8w5mkyKQ%if)z9o@lW;nurW4kemy*k zGHdBqRH;C|Ta3VJy;e;3=2e!g_j>e2T@d$01mvm*1HSP?;LRA=D>#y}@ZzQa|Jw!7 zy%>rxo98+93uWPESZDgPc`)Uz-e9jQ_)+1e!}8uVuxBvg;RmS{#L8(yGY%hbe0?Sy z)ZO}2jY!&}xH=||eM`ju{fkuDYEot5c6wOJBUTyHq1P>$QWpS2jY^mzH9*CAk<>sY z>GgSRSJkgawk#L>Y&Xk_TkC^giiuKOXtKF=+u_5d?houSF%?6AGlNlw2SQR-{$jD& z2wOF|FxUDO&3(_wVu>ev!QC~V07t8ac}hcgN86UOz?8liXgOSxEax*g%)?PKtu#E& znv}+wG=qD=a3-8EI$T+FH)oik;TPz7kB@-}_I$52tZwIuwRt$jwjgmlH@X8mBtN~)Q~ z&T-j#W8puAxB?@*NjWtFng9rvF}VmCCeX^`vt^v)HHWTZL2cNh~doei9D9 z+6YA*;yd+W$*s5|RCnw7PZSP|-bq-%D>Jg~yvNL2!*YDqPKQKSXbVtk_xM=sy&_$} zIuELjcu?%akqyu$%qk{%`FazzNPYSidPU&jfH=O_9{Zv~0eA~4jTYqVdvN!~% z)Z)DS=J+MxNuSH30dOrp#}6Z?pPY?5^V^%hfbGj5xbKAh8ATln(H=uHAnptuU^yov zx_iHOPh$7&x1f`FlXC-Qpp(UrE2!4^`oM0kkIC&HqQ!CZS>H0)_Qs#&QrEXSs|Q0=P< ze`RCCX?%5w$>X7J(T4k46%qT(pL>^D$-JYAlEB~n?x$HC&&(>;cPh7K)z|j^YUhpw zT@?T=R@$W)@-lliYjCZkC2iPl3Q#_ybphYlAFm+02K1o~Uru(0^_teFwKY{0R{g5( z+Gf$W>E+NV~0b85xT zjNeI<_h&ZZL(Z35VJ@vl7pUIDAju8ORfv?vLr<71@j*Rn#q-SCfpC5kU_VdgR&z+! z)W#0G2tr4DYo}_f2^}6O4MP~qIcqq#M0pg`Hpr;+YGv1tfoaP0dGj9Y>OHBnou{LB z6z8`xr$A_pa-=>Hk|GJRlVRHCv7{B^+a7Na; z{q-Aqp>xq;IUJed)m9=@T62~+XFdG&^!Bu%ceh@=nj)2C?nyrboA{0*i|w5zPWfGg zO%G};Ek#5EJae@DLW-~h#c+7c7{&Cs6JPnZ7T%zYQiC9j^EP?14pE^G)!VqQ@ms7) zjR+YwYW_Xfqr^U>U-lV8a(`!AceH9Jt5-bru?@RZuTTyB zy&fMJ$9zwNVvq5lT|5c>sho9{!Q_$5H`!qKbOy#cb8RrH7re}Xv%daQ;?a;J`%e)J z2t2zd2oHWEYzv2RXbW{uRK}mW_{KcuL9sMx?VhwP+F;dOXau79S1LKm)jw(m$Anf9|D1Vn%@LhzDZjt^vGH9 zd){!<3|S&A`}B~sQE#gR6@lmBcU?#ZmX^8~p zA3Mvq416c{>wK=e9!Y_4^=MNX>#IF3srEUe*O7~OSzK*yUy7q^X}xsst~cx<*H`#R z&x*X~ZPFTwKPfV9E7di3GXxVotIM6$;1BxHMnLagD1~9 zS_^bE$!`3Mtbl~U;Eh|D?kZ}#Kv}Ijs0k#$0hIxsb$loa9ikgCHprO>^|J}gO#L;} z{^NfDnm}d0tNb^I`M{Td;q7~%-?Yg|+{#~lh>>IG%$zuEd=%q6;CwNXD=T7+!PlBCYLUXBcpExp!+Z>)Mb0$zv{qZf?m_llc~&$6~UhWt4azzdy4N z*^%T=duy+HGGxvSEO73~@0OhT?VtP(o_SePcJqX9wSox*#XDCNtXxT-u+E)S&=Sf1 ziT6Id{`2A>=-7zBbheVydf^L;Nf<26$%5w~k1Mh|mc%VbKSFgSH z^!nG|_|@wNZ{??HjBM8ocOzYf7R?up@p?beV@(2;q#$P&lJ1UTY0x;?qx&rsYb8|LSoXsy&=8VoI zd=OrB&e-~Job!R*%`mNVLFqB-vsV~Xv+g+6h}5#{Tl??Guq{p(PXl(jZGUa)e-X;e ze(00Tg)y@xQ!z(Myet1mbS7(ca5x@rAoVSF*mi#K&Fs} z)z2E;uEo5HAFyLe1oZK`yAC}5#`v##OY|qkKG<`*`m*s0VcrI~azN+QY4s4(!+qj! zrO#1aoFG_)3*3GQFeARfFvXHtG&fh6!X;sj^;=?U0%LsTYh_IR8qLMaptdtV=!Y)~ zr7?zdV2qo-G=6cN>gD7ro~h#?+IT|l^GXv_Husi4`xn#Rt@d2~%XD^DaqVB)H^3R_ zMYlhF*!VN2eQ-_iYWaixDmq-c9~eUi*z}I?LSy&8<$MHF{9ta*kJ6cMfv2<+Gq~y} z-X`4`o4@)UhXcPpKlj!L*MIqcy>$KZKYQi6KJef1pMLXf6T=OjVBo=)zRdHFQCDMD z4~icry$+2Wor&x1pIq0UeB;adUgED`A3Slea}&Gj!K|y>vsxlN5`8_G8~p$f-9#^j zG(r~BjI_lW!Pa4v*6nHbimK8N`m*M>CARWp+E~cAWLvqI$GVIk)r+95oqQ!Q4>#59 z`KfhyjUG5dG>0+j_ng`JJXYF0jr@y;^vt!mp3c)r@0F)1+H3X4t299P#AYa4s|>Cy zfTyMB1OLN0Stio~uO%#GGmg=7@#7jvd!Bf&eNzld*26Pk152QBVvTlb&7V5*%)s@K zDrfaJ8VpQkGX|m6Pip4w@pvDH`|7~sZ;bzn_v5|my>IG!uh!4i&kJZy^Km%yvWT4* zP!HBRKt4>IUk)3GjDefh8j0hB3o~(iEIf97n%A*~mv1;9;6Vi=2iN3>j665_S=%;w zgiKO$)Hh#@SSl8s)*iCJ;UJH50W2mjlL-wqK0Yw=3#>14CU0_RDW~TNxV!uFPd;#= zE??SFPd#Yn@?K)4&hfcM)(XUir8U?x96Ck-FG-T!i=V+q@uCm#G6NM88na$OKi+3f`p zzxMJw*MIT9zi|EHzkmIDie}YGsqS%;4v+Jimzc6t6AHj5kMZEP4EKsUpS=I{`ipOW zPXCPauU+rF_sQgP+((~hvfx_f44?ClzT}F-^9E~-O7?buX!5m-JGHL4VvHb66Y!;A zPF%EQ-a4yytrZ8)%0DuUA8z`6#xr*qdF1lt|^?iq|$`U)g$I^X2r5M33C5c_>?tq>5Vb1_l6CgVYfeAwn98E z@WX80?zNv22j%%IMOf){2&%dJg1^_T{;?{s7&@@^x+?v zKJ$WUOkY}rav4KBb%j6!la0$u1>2}6959zd<73$u(5|Vq5#xZ2>;9ltUS{$YzryZl z^5prCOJX~K{??81*xhfYa%RAXx40b#9#8jZ_f+Ns52BCX%0qCd9ZP_h#SJFhMKM;# zEgma++KO^NYZMb+RfA4^g^JuYt zV9`Hn?reBsy;F+ou>O?meLMBLC$5MxQfq={?q*RxEU=y4)8wZ#(JBQ43ufuiX2kKbcO_*1h@jb5u4hL}@=I~4w z;=sGF3;!15^wI$@Al+FIFA6w){SvV4X z&-bk}9rW6Q=|f7TwpN~6Qg`dc)-MbO5lkNwjQ5yh1RtmW6x5dHkA3lYDWBqt@pH4n znq}i_nGgZThoR0HcfH-e&ZRryv`cN3+7rhz64Mg&C}(>UWDop|q<5CsJk$t_7qA`+w} zhyiIF($FJOMWKmu9cK)9`OWo?VN_<6)HF01Bz2;5chz10we~*eykAvwhq=)GcJZG2 zzUQ2?_g-s<^1OQNN;;1 zU|AaRa~@56*T!_h4O$tQVYn&2HmE*Qt{8@3K-#keZD*J!j^Bo?Py7y?jAGve+uYYD z#tMGM-}xr)$Y-8Nd;PjDF1(8~SeB$)HmlP3-Xpaf4r19sgQJn)*mDCf3v^)cvVq;R zw|kucG~T?e=rG;4#}PseP%i$3wf{JG{5CB3$ZLru_U#O|{f938%%}d#*?;}lC!PM& zKmD-19(VKYsle`^Yr6{9;(pI~=^x77&EI&+gP!<}x4Y@jA9KvUYy0-orEWVvJP2tV z434kvzPdAw@okEou>H^L`0nf*xDFQZb+d*=M~Z<RFO}r>`)#EVwB%jePLSUPe6a z3tL(rC|GUceNgR*(}x`7mQQ?QoWA;>12Tu~?H>N()1Xp~f8(W#rL;@D4s#nXiqTbD za!QzzrU1&4oM^hr&U4knb&2u#V}5GlM!n1lWY!72=i-8=h{LsD9F_csBAgv({x_?{ zQtpdWGv|ZU){e%0Rta?S1-Y(nGe%QjkoYum3^uHF4#d|IPyeMuUjI_lhIRWX_k*M5 z&U6G7DE_ghp}*m0F5UN!{^%q7K6sn!?fb-CPTY6s0G~HdiU(5KcFDRhU$uUtgndeR3B(!97sh&+2sUiQYHtYV10 zT0G(qh7ctF_(DF*nsLvKuSv&-Y+KvGgZxlBb#b-Ec+Miy5qn6!V5lh!TZj-=j%^7<XVGxj%!S zP;&^o@z8+F4$K%`&Ep56VPa16%6I#BIL4HJ#y%06NO*?$u5S)Cepx0}+By$cA1vq{ z`HDwb^Tvmt*{p^0lmEtpafMd$5Nyqr+VuJndFPOP2{ZL`DpscC#*m(COHa#+d*pgq znDv7?BoSdN@KZP%O)?c!LnEZgI|3M)cM43AX#*56u z(l_4IRaRr7i%l!1PvYLd;}Wy}*3kQZouk(LHXpoj-#7iihxT3ntaBylmi5GZZLSZ( zs^=B@-}m14fiK(l_Ooua@4`#-Qf#LqAR|%&`&RWFsH&+&S=Z9}VQHt*#m(y8@d6*~ ziMj1#mU`EVK^vkPHVpXAenbU9qGVjA5*TiSlEqZ=knN2h#<@3^am?)%ta-)n{n-90 z0#g^i4M$`}5*9^bf)Q}yPtX^}enmyH?9v~dQ{3&us;>o=A7C%);+HW-u>yz$GskNt05l=fbBi9gIG z^2F4|AOEYi;Un=~$#?zC^Y8xVw|(MkKKa>;-_E_g-eBC0zPmo6d)sZoExQ9T3K7 z%-y-P#vnJY4i*j=zL3opd`sdzGUGWB0-AC96l#XW|KOFZe#u$kibpWwn{DEUTo`;O zueJ@ItK+YfJ6HGy-sI$3MxJliCAkq3xmIjdzhs&U_PSfvIoobbj7Q%U=#tO%EB@|m zfHiILUlOFmG-AY6f3`rGGYSI+QV@mDFp-p;STZl(Xm`G#$h9zq+dXK23}BS^i%)?@cokadiG`%QADto6`Xw6ySe0K<27q zFcx5`Uz4qMv27_ZH9^C1lvV0=ZVLOyjT#-1*t^##`#Un5)cW;UeZop4CWtSKJErc7 zKWMH1nt*X67U3TpaYu#q6_CD%Ld*b}(Be8bmW=7XO@pl(1P5Nq6$4@~ZI-J~3Lxl30ZH!$-J z4lpfeXk6Xwny+}Ya63L?VA>e-nkpFc6kcQdBq!Mg1wp1cSi(xw9iI<6*>~J_Xpc^G z;v17-$`|VLTm9hiKX+yLR$VBKmz|s)S*`nsKlK{*$I778tkSn^17GXg$*y>>FADLr zfAo&SVq)p_Lx6EN$+7jc@EXtc%Xln%!v;s?=QM`UoJAV0nWkfe#y*kP*gk7Q9;4M{ zgg99h;4j_83o9xE=VXl@K5^2XX*9d*qYmEiF*_t28GA1S@ z;LC5~#AXsOvZd_ixMWh`%jvB=WEc9$58Af9#}@yx@0{=fXIeX0WQb5M@z1#79AF3O z_{cy5G*~bWyy~q<>R=TXP4Ds6UG$?AK4TTwx_)yVD^KcLxl)I28E1`FeAh9itrv>= zP`z2eqDo!kZFSI|fMkCKKF3!Yznv^xxYsvvcIzQ)$TqPIewGG*gnusnd?Bk z^lSWxg+`a2{h9yvskguV2mbSOpZl=@cGqiK1$HmSTe4#Jf7VOhs8HVcd%tkUe#kkv;-r|;wLZ0+{+Lf+HZ7CjGFjGD z0dJt0Fa9Y5db9RRm}Kj=+Q8d%`oeDDtEQN&_>BN$pAD1!y|T6BN>2PY`P3!* zPWX=>+IQ9+uD|b7Uw@)LQa-Tnl8g0Y6CXNZ-vt+6*FJc(c643O#EOp|l?kTE)KlNg z)R$S~t+24TT>y+sP}fGA%&O#B%rfU^N`tEV$;7oUq_B>?Fj_|(S#m37?HOy<_!s;d zzxPkC_2AFI`;lRDR^NF0&}FO}{+KtWdh9x4L;#FsEI{t3SXH*s4?Ec`F`6Ij7B^=@ z{FP|>FKtzdu@>ziswYKpD|0VSDi{pxmF8cWS?>+NAZ#d+Lfp2UE`Krt%jUqO-&7m{!#fc%Z_^HFjEG8%)b!aul#?j~W6kakOCLI&< z_SHTTGhkZb%YP&@4r4m0%B6YY>u~(OE&RmT|BkVeOI=ix%84aT&8tqD_<<8)>LU=p zI{meNo&BhZ5u5eH18ZPk;`Kv~K!y*hu4X^d(_;tuSQm^ZWUT27z&_wyMBu++MkxE~}gv?JY^Ea8oyBgOYu{5wGoHLowF6?W9HQHTU+Z{GPsud zMY&0UH`lmq+izKA{X)H6SN%K2!3-d_F!u7$-`{Hw{=Cm#Bb%5 z#t%+S1p14O7hmw+v!3$WCqCiX5$>+n^a{*B!@H(uaumh?@E4x`+3$SZ^ZxCh{Ev^{ z1E>NnPH)7&>bKZx*bkOS+s~MJFdkN{OH}GJsz@W{rELk_7P=5V z<0JX+eP>(SV7JCT$Hupz_f!S5bW8dZXy<$VZ>pOD-_D`^v|{b8JKUgaa*Y1Ryia~S zM=tffvV7tw#CzGA%i2*>S@G4mJJ2PMB3ZG{M=_w<`@IpDu|;5~#UdlS@gjy{+|ORT z#&n-xJrl;WD~-Q%54Q8N=b{5j4Lc|L{K|TEDOzt=aqfH_077KLxX2S-g6L}zY*?rO zP9Ga7I?je{Rqwyz-PNc)@AxHiQuN7=y1JFT^N2QAWUPP7T!+ScV+6HH(bj;?5TkJ| z?!q^=q-B+v?|J;oXX5T2>bWmELZp+YIofe*F!HbT!P>I&GS?sx-=TvCFZzd%zxLYa zoOAr{rMPQ(bo9GVjJJ3l?|04u0r&aV+urnr*E#mU@!X@EFA^k>m($j9 zgReF@=nP!W2}$b!Sna`a92isjaB(6;z||IwFaJbh{2u>tw8m&lE^hW$!PsvSF^r)P zwc^}}qWv%aMy%pXoE1~&q<$nG_gi&6QvH&X%b>!~_>&=PQR{7$*01YP1u%XTE^F&) z)qL3FqSwE4E>4X@SH7a~HC!5&|BkWipY==G?TeK`S#98%FMb(zy4^QsF|*&n*Rd}A z=4om>YnIvnfBGui3daR=n%!#hxz=xlBxCAe5WRxWCvK*4(&0G*pY6+zE^sK+Dk9me z>$t9O;L9GtHed+cnv%&{m*!8diGS=pY>n0hCk7&@n5Nb`e7Lo(%-XW|QR1F-SoHoG zXH?OwIc&sKwWc2362E2=IoEdVn2~h+)@FWK{CjlbSYv2k+td>uwQ=68JGD`OPJ4;I z_luXNFwTv71s)v9RT*4Uh$Uz|x`cxsEg8lFB7u%(QDmvAU!@T zew1n>Z;jhF@mnofY#6vUo*M~(??acJd+y(#{h<%u?e|YP<$Xczu18Y^b}z=)fYto* zXTJ2e73OdM{?i}+{5##^_>=b^*njLiLpUzFaVXVI%>h+nTlmiJJ3Ja}ediB~VEhn4 zX9H~bszY`3QQNlsNaC+4iyzcJj5Kxc$Z)EI$G-+aWcr`Qa{lbWH&5Y?bf}qAxf*Xj zk`TX7xb7$K>UkT+ofEP23id3)>56CO zMe{a+uGi5nC176OF)s7?NR_$DW{EA5iXVIo4d-H8$r3(Q2;RE3LXQSx0^qxN+E<&> zBSY_gRjgy#K+!fum-xUhI>vRkFdVIG6hSkbTo z*hWO{n3qg_;-7OEY3pumtz(sL)}Z#24D3FJBM%deOBvZeB>Gl}_;KA*0259A0p6;C zHgpSSFD^-KuC8m;jaI%-)^;{_6?!D4>R#)A!US@(o-vPHRQP>pi zA{^_F|Bh=l0GJGC{4>&8Ke(wwymqW>1W?ZSmCL1SA2nD}rkc-sT$6U<<9MuHdN?I$?%w@*8euR7pHjOg78UvXJqnD&XxctHjp zCknth=A$0eMQ=HCt0^L-dw!;#Xg;O;MJyxgi(aTLP9Y zAF|Y!K^a)sz7iKo!f+Fq2t3sVe2*K2ty8fcHoD7Kg@kZ1|zUll=noydR6e4Ajc5Yyk=!m+GZAT9?SnGZTGMaZC`bp>Xb?N+(kFm2$j;X0xO4_9>ebsE>&0Y1uiS*5}6yL*Cuvbl{T~cDN??zi$ z+?aJ9Bj$=fFs@M4o^TA==av(f2emcLD}n6vQxlh-d*+$XeA#{Ob<^ETamsWwUw1FY z*Ra)n*o$6u_IEt?x!?6i@BYZQpLfw^ADjmO2gp2X#&P1CJ#r3>aZr(W9SjUP5*p8( z88ROm< z>Wytb({SrXoo|XpDpiZhKQqFX<)Z7H-AhYF_@;Th2fzB^VbQqmDHY%N%b5DZ)=ioY zW<$}!i3h>Ipt9F&v20THn^Mml3zx+VODWBXe84I*WQ#oeC-^os9+B)U>q{HN+*i|a zp_N^gUok*XAosoJF`f6qA^pR}O+EIb>|2(RxK_H-V#7Ll&E;?49Z)WVi8uuqbBz&! zS@E7@>!ZaVgV-q}4w!~q0mH=YQRbVb2`m)ra9knmfOO%`)V)>r& z$8yF${gd3xK=R5FtV1X#bk@P$QSFVX1EV({%VM|fHa}8FR>^K7er3;>a+p>dRdZ3O z7gB7p9)_9E^@9W*b{=M)aTKX>)^aR>%Bjm=;rdF`*}I-hj6pu@hp6iZV5}d^P2itVL6Bzm zjxRioUtA1dMo2L+;Yj##P+`SgPY&}%oZ(5FjD?qMl^4u1?C{Xxn>sFyJFKn+#tvTS zY2#l8$uxTrxeTy%&3w;ktY9L~i<7w)T!sk@TOv#v!8sqZVgr9{NXYT5gvC1)6|Z?~ z46cp?^C8BqV}#R1lAo5L*DuS5ZOMw$9kGGe#I_!5qTX_N-75Z?xpN{@z|?6KWHbKw z#yYU}TYdR)%rbx{afyuihzkN(s$)Dt)1-1K0^8-{$P(WMf&Z4$GH&$#=Wp7pGEH2<#u(x|{T|MvDvV+H%C^5@1CBpI_=5{G-$%DxO7>y;SZ2y+qFY&|I9NX9@ z{=}I;8Fwu#SJ+jpC4tI26>**`hFW0Jsc+yBcKyvQJA9Ti)Xg;s#MWfe?~TZq4%S>Y zSulxrMD6`xqFfqdB8lkfs?WnaGISgH*l^l5W-q>|Og-H1@v~yq@rHjCqkf45pQC=7 zcx)&2vlPQm)@73qB|J-wn!`c#CHEs%T}L#tO{v#!@tLG6Mq+nt+($v%yT^&b`3Qsv z8sM{V$dgV;aYy9L&T;X5G zNKB)PqvArs-PUpEVZdV3w%gcmggFY}NS!ev=kDxX1E*Yhr?b)62Wzb%ayiV{7w&-? zYrr@q%b@pP3N9UkQGDTyZGxVU<%=y;0eRkIxN|Rp&$#!Z_m8F7w;Jv{blGL+ob%3i z-upKnc>k~6y%bZCFTJ+=#P}#!bKUsd@eg?MLw@W@clqiQ-*EFAUH4n{@0$8p$%CT~ zgE}~nS?zN|W_?gqEpliX?gNDbhJz&L#RW|EIeesJ;`u6vIu9UvYY2-mU;54isoCLc zvpT5u;_F~Djr}FIefnd1Lm?<$yR0Y^#~O>xxA0PRb|q5RKG?}{9VfNa6I5z9F%+U} z>@^2p_2bjd)-mY+D5jTZuFJ&OK^uTM()wi?Z0cdzc>OKNdiiQy_JJ2o@lDJe6G7IG z{A16S$F`O`Lhvqv21^?l$;O!A7ytHK81oiS=jiw)8}%Q6MBw_N7stTBr%7Wv;4znV zkHOJ8J_lEVsK)GF~+uP zzRphe6^`w&5o};6j``t=AN>z5#k9TMvK1D5ksirCWjRzl*to;kxaWTRTh92%zxeFMmw&7e0S*d3 z7<3rqK;RJaF*5poa15s$F0w%$%V3P>L}{IQa=;kt6Gm!&q0@n96AnIFCJb^YH6G5T zfp6RC6IgKW9UIY2|IHFiBA>p1lhZc0UJ2^w@+sJ?15qb0kEFDKNrq#jfxyOlSUJ0- zkRoij25P-Lk;YFnn6@#vmIl-D%$jCoD=wP04Sry=1(eoBI%Ltt&2S}5+0L92=?KRJ zrVk;*fiGVr!_=zc9Do`Os*2Gu7ii`J!}@~QsF0Z7!PfqFUXr4ayzfVktN3;yJ$^CsuF0o&ET{gxZ%?& zp?0k9xA;dXoJ7U%xHm6e+s@y)B>Tv#R#lkPT6pSL3qY58&Wa2V@?GWgAQ;1I-DD|( z)L%r9<*Ud*H$(UFZyyrLJSOUzACconHDZmPdF{VL7k}y#Z~5%s{I?T#FU3@B*LI&6 zABB71fxq&~KUG?{JpD-ze%v?S`h=$+d(46Bj5K|E^o#>0tq+YHOfAh}!VF8kH{h0_ z&4K0zBcI&*K$8r89kf04848!pV5HT7C|vtD*8pKtM_7hvEMt&Ex+LY_L4Ya$L_oG)_!e+!zZo>Xq=~<5upLdj<3l=x6~K(EGU&kCrej{^gOvC)@q@KK zRbSLKbfq+IlI-7gAGXCH#JbJt#cj9@ZEGblqZ=w=0-E;?FCvinBHLhMRcne`xDn4D zn|9zZ@aIN6GE*Y7H@`^5Mt-UIh|=6`thTmJU!8w?ZTd1~;>(Lrc-+L7v#shV12L}$Isv*~R?Pg7=DE@9msA=brpSuH z6JEZtX?>nGsg1?Dbd7tyf$wE57S_aky?&ZBK7L?P2FNu^%*7~y=NLBLHklwchc50L zzsy%0K4|t|V>*9xX@3~0bu5|5PBxBH3fFv9)VOmqD}4I3-ain;28T3zx6PO$#h3d0 z7)$Eo01JU_ki?mIm`BQ0vn8LNlT^kNGxH1sP}_)Y#2Pwt_Wejdb7S1Nl7lCIN5vIB z*)$hk7?%umeGQ}bZ?xESh8IRtmp**;fRPU#R$i3f%k!RpOV7K$(ls zW5-fqBC}Q(4LmM;CudISw)O+#?1fH(3iOygG+R%St?e-M0s;Y-@2=6Pm+fFGUmDre zl372PBWG0gE?MU2r6ZK`Wgqs91yLjhW-+7>UvSK0X|cKH{Ltl>fA-vWzvscPxc`sc ze)m$GTJ5g00=rL)XDyD((aEQsc9|0UkrzGceqVmqTi^JNH$VQm-@v&w4>QuP2Zs(1 z4kUE6T<6GVqx3$rmInogRAWkMJOsh$(Nkpb=YyBYKKvWS;Wl-Q6zq`XK!g`r+i{4- zN5}6YQflL2tN?uA*7<37TX&hYbbggU$4|I3$IgGrPkN`?1pr{PR15K5JhIi-D64Sg zeyQKY+ff-*d8KTB>KRJk`-Qo~s{P_m;1JR_d<9eDP~xY!Ak6w>QLXWEV4sK!(;u$3 zY2xWw`i_6qtu==fI`&`ZlOOE|Ki903mZ1rTz5;9^Jx%d?J+Q#ITTjSUGS{tT#br6c zRL+TT5Cmsk7~pVDPN41L-^T4fhUGW8`Mxn8`x)zy%Q}%J)(*9(rZZUiXY86%pXBdyE%nIib?9a6)uO0towD1g4^`W!@e%4LvyHa6mrH64NldWq_{Lgb zgPMy&(ZJ*K?};r!(nALq5m)hEanXlA^3vaV%p*@$>}@p-cB5SdRDspK7-kUsTq_jsoZK z@)@NQ&<~-UZax%qD#ng$IMxSJ{96T{Q_bLPBpk*yGX4Z1X(WgB4aH))`ax)$^jWzg2(({eXcuZ&(W;jS|y4OEqLS_9o zaAlueQWNYjUYmTi|5e;$hreJNPl#)4IkGin@9#ET6{89jyW-EiPy|f~X2bt7fulG# z;=x4tmSx?8>-A_|vvr+9C#k;LW(~W!&^a{6+2~Fb|8pD+bB*@IJJ%f@oSXrGYd;zV zHm&i@;@=~WZ2>;vo6A%fR$KAJGdIMviThaq!)x03&N%x%SY-T4{La?n4cQDjxss|H zHZ^eV5Rb4AZ0jR+*3a>i0^bV0Yv7zVE|n*S`oeBtJwj-LTEE;ESb|LbrDvjxx1ae_ zLB!M!xlL@e#P%A%bULbDJTEJoo{*LCmgqb|Fv?ia3C#bg~mBz zBKIL>8HZILMpdsqe58jW4+#!Q^o8%9!wx$;4SvOVj97ys`Og6;Cm2>6cny$(^GE}Z z;C>*E{3f(1wx_QII(`Ck{3DM}y^~OqECyhM#b>v09pa@$GPbI5ytFdqA3 z5HQ%>KYbs_8YM9Q>A4^EB1URXYT`nKcjETUyIA_P60Z8=6cf*Q9BA}1@qTc;c80+A z#ZdD$m^R^WeDbQBR7TYdV?7!0HOEKFXXK^#4D;(c~bi%sfK4-YL(bwj)YopA@OeAA89cYTFr%Ulj0~a~X>uYPfpc z;>Y)m3BVg(Jp1-tanZ#eIp^K)yw{ta_4NPJCcA!DfzMTeZT;=-=Zbl!`vO$p?oWU5 zQ{Q&RB{zEir_X(}{z%(L&^Woqp~Nwi)(?iB=ZIP#9@s`Y4>b<0Bje*Mhg!S@A8QU< z8hu9XzYkY*w3hS7vn_Kk*f``@J8*#l-`?i56{z!|>jz7M?@EvSoyklrRa@q@#GU+M z_y9&}Vjllc4|vzFsio-QTFivs>$nHM7*1XZS0d+qB>V!_aK$%#qp!R`W$!3+8Ti}y z!wfL329pDs`)sJtDZY*T+jC%;hCOypP(OoeR&W{wQLAAEsK|SbY_s^WS%uv;&C~_q z^RVPQG+|9TmCr=mDHrP#6~Wme0Spt%)_CM7OqHkYTQ*=bAlx|q@&lTozI#7s+Ij$M z9&nlS5zlhd<)afV>kw z1*3dr&{=q4deVLBFtA+!*>2nqnuj&@wj)s>!%L`RgUoWfFPXs_yU#h(Q9I7&cV7%% zSdoeC;1yR~bncmFJn9wqyZ5bkFU8bk*ZyZKuzNB7pRLqUXm`(3Prc~7pY($7|Kq>^ z_}86%!Nu?7SmZ$Q;ikieJ_nsoCTSw$RP(_!4pH>6rA&?4!28@Pe2l`un3He#GSh~y z@zg2*c5C|_rvCJx{5ulq#wQAO(Bj6{h0A;kuPNnWu_C6q?(|*+i>iLBE_F%$Gsd!O zV<<&*ZBT?A5sf}elGlXx9bMt7Gr-J+YrOjnqYl9Q;fg40wFfV!&Q%l}4N7Fy6C2+a zabZkve2p#5rE7wX?J#w+8k8V3+N=E1#E)t5jXedG6tg-+fQW~8_V}<3fwU0Vic5xN z8!id4MTec^>z9GaJ8ZDStT2{0zSt8_Xze6CFAKPA!CbSS(=xr=JqQdWH6P@!jPf8)XtvXZ#rxXX3}a z>fXJ4SA;+l6Y+FdD7W^BnzbTW?{~7KrX&93k=jr!HS(c#@9{c`F6$yQak+M*{<19} z_DTH=?+Ry4D+Ig2bHQ!vWrNo|_+uQS)*(v_`19An3qSVZS6y)Ip&PvJNl*B7S?}7e z0-sj}c0Wq-d6nzvG(P$HFMpRZ`?^;?=6?71<}bh5Y1cXSm>Y3Q`QYi4HTU5&q-d*g zvgx$qn9HfAes8mgOS5t?Yg&g|j>@UuU|?cZr1oroh3BxecN^K*2fjvj7c*NdB8FSo zx<1J@0ro>}Pq-$f57WuWscyFU_Lk; zHu!es^&4ul?8OtJ{pr#_9q75NSKFeT!ZPX<@#(R8S4xwyS1SI)>lY_`_kU5#fA-%f zh@2!QEHbi9{i()~%6Heou0>$$N~rnMmr#brR}vd|DJ+IXiVggP7aorlcbuEpX2Vtt zb_Q{bnlmp!xLI_i%zn_s3)TA(Urmz{lo`o}fo8rXw7*uZMi*bCXezhdADIJ(uYt1_Bwi1ESOFaAabHtaNefHm;|L!yI z_NM1N^FwXA>vt9Sd@HbfG5&ljb`;y+_c<>=UFn_vrl+3#YhQQs8$a^Eq5a2kXyu^v zz=vfHsXAB%;6TiSCbm9Iee$JP#{2Zk>E?4&Bz@Km`|{O%v(&O|AM_v>{(%=@!xs+3 ziLEYV)ZZ*7Xk2XKpEwpwjlJ%N@$JFKh2sK-AKFHY5mf?Hhj{h7`fGf7EB+2L^^T45 z*MK~_W$cU%H?NA*7Gq5sH=T)sgt?|}a5k>_BUt!0ctSBit{)5)kNI&x%wZhy+a$W_ zwQ^hGBIhNh;4^>cF`|^7y+HsopU@l`pE6WE0f93dp7K|Njva4}!;5PTrVXTYrD9Zk zpgMXp%=sj+1@00@aWi#3h{MtKb1&Jtc7_WuWEDq;x4r*dTj!Vc@A!KiMtzlF=g%S` z?>e|VE+ADnLUR#hz#3JJQd|>FcynT3w)kp;Ww^qJL15DdzOK0Vl24v}=DY9vd(SxK zKOG^mooH8q&#MAk`v*UtR~9?tFK7jR;1^!}*w?-7y*K^PxflE~=N5;TPbj=_D)|)4 z0m>of1FbqAxVFJeGqAEB2d{LI1ux}nre19AXW|+4fg7o=!t?_zL<_!r+rN~?I~|RV znQpgfx zAxcfS65$#p)82ojD|PQ%4qS^yK<84uu+5k5+DUjR&piu*o2E zuu@tC*%6wxWk5YVw|fb}8ox3`mfXXScPyy5d+;?THaC=(>MB{*tochcge`>nO*7ZyMtEM)}^MIl2-?-|L_jaD~&pmPIii4M&f7W}S{EGYC>t?%` z;yuONP5+lGu=~XLf4Ou=H}DCkoqnz|{8uk}%zeM<+i!K#*WU2D*Sfv_Z~Gi&<3XF_ zRmW5gTgm&tMaGHd^OJ+pNL}`VL;Bhlo`OGGVUcKm3W+YYlO$B{wgGR4^4 zwq9Hn=jxI3^}i`yaqE0f=#?|Mdq-56P>%ooPqJR`k+0JacZvxhHM0$VYG3r~A@BV= z{(bB{-0j}Xy3mX0;6pw*;nnzu{ju~Sa~*~Q~mly)%6_aVQQ#-;bYV@w3h2)|K@9g!WTh3 z3x}cSGKm#HwRT32fnVaLAH)^@9w6YoZS0s}Dgf^R5wU-$5JXWavt|D#uC8G}*em1NR#Lh8jvZbE! zH+eVw194oqfIN1lvR6dmt!d1XVX(M?13P^=2F7lYM?7nbo!0GhziVoQyY`_>cf$yV084aONSh4r36uF*4%tN8Y$-w(Ls2O1A4U&V#BC zbs*#QK4ENobX9)|+#28WNL!g1eAc^m8p2U)#E|Cw?0U+R%+1UFs9&{0W2E>GU4GuV z?>PT`@4EXNp7pFV!mzvUD)5D^!0yHP3tP{lmhC5g^(8OWf%UTAf6BvO^ff0P{~#S& z$M{@Z54t+se1NJFKJfZ5t<#ZXvk%nq=|ky|_rZwWz>9Yrl6`PC4?*-nYrF6pKaW#$ zwO=8&x{Ww1FPC+rehI%{id|EQ{GeIt({(9pP4gtOo$WPu{g`BE+cKc$Lt4W{lCVNK zVAj_8{tOUy56Y-21fhHLoB`xMhmOmQARhVG?PaG*}Wk*>jE&=N>{1tK#ZX*ms7bWqLT zjKpB9NBcqSn2P{sBZG{&4iQ6{PI&Te8UDMic_-@dw5PV)rhYSi(jKc&!RJL3DLJ|B z)XxQ=E;W|5ZTfc;SDK_3VAR+C5m_vTQsbyZ_BH)bf6R$g{iT@!;1!6r1z-F{AX)5(T@=|KgP??a{6X&B zRq>g+)@j2{!7G|{l5Osd7Rda3r}^QeZt>|~$3!jlPpDoBs!ID5Y4 zos6b4N1O_T4!P?AUz$}6hgn_@Y(@y}*LY$Zh};JYU)&f3Fa#ZNG@X#Dn+C8Y6bbPqMXRwf-ad?|m{tqM z3o2xmBz|e@M+S{bVlIANM zDu!iy*DGeJQHlVlY9_2}t7-N{))KBp_n`g!RK+kib!FMu>4{YuHf4~K5-En{DU)K!60d#B6Ej)Ynux|{SqqiQ!knySPWdi zncJwp>S(#0`DUU+qG$a_rhnmdFth?!~Im$|UP-kfD5LC;ga;-GV4 zgP{Q>51FlP7w$45g^GXr?EDgc{3QNHZCS6>$$oFmQg6lY6jVR`Vwn6|p8UJE?w#IJ zZ{{)w@1glTtV`FvYKbxSu6K-m^?I_Gy_*hQ^vO^B=TE)uFK)7XDPC*28-KAYu=~XL zi(TQPnEye~f5o3Ez1#fm;~w~kyWHkxzkJ;Oeb*c5aQ};nOkp53DC8^0HMWLI>%VFQQ&N1P_^0$UF@fvjioH5 zeSv9i?xR-vi2Ma&M zMQt8UEEJpk5nJ=x(8gTm-p`LVV;kRa0b;)*6R z&npcG(RP6tTe38Lg-`tbxz2g+=dOnodHnMeEp*n!YNq;$#4De|-N5*Nwn}|cdq>%1 zDHW5d?^vPyY%*^WSuzS=fn5A*OR6Zle# z|Jb3T!vDzhvck83uHfLaSz&)1a&dKV4SCb&302F|nSw?YhG>C-yx!a1p#Ij+22|Os z?ZKUtjjY2(v2o^B=J|?&T{DPar!f-Y;SR-Qy@pH|Z6qqu3e=?Pyy>E`;pMly{2^-H zu6QsVE6{48U=`3@oZ;8HVqzXxHyV;s1PEfyL9B})+sCdK83NqvB9Y6U*_NqVZ<%aK zyyZ{6SHG+kjRaDCByo&NrPXO64jZM#z2~vcP%xx_UPD0sl$>)UJ551MB+HA%2a%NZ zxXh01V0qMA?nmzs!B6p6>e@o-fzgxCwqe;fx1x{fx14oJ;+Vd0@3I#y zrS_X|L5WUD_NB79se4)9KQ=F9;PyfsxP|T=e?eE4C5F2^&ZCRME-T5+8hrdTGRa4C+JpMF~Y%#-QHC*CG z7o|U(Lth#a11n(u`R~~a)b_-Co@4ZGg@~`9;zI7G%@@-iiOt?$k3KGkm$lo)*}W5= zu|B8L=xLWK@tGh7msG}D?5FCQQNF)(K8^XJsG4FO@oO)nm2thTnr-t&Jg*rXG9y4# z7v2gcq@=K%V>}c2Qmh*f+e15KsoAhx!J>b@{j!9wb6cPz?EV=S-0}W0f@w86u$%El zZ(0#e8bk{G>4-<~N<6n&LJ4cy%;_D}IHo*&6I0gt@gw$7TK@gXG~+jHZyiniW3DH` zxc6qmgru@6eS-WzaepV`QHK>tekl>{&IE2Nd#6|m@JbDz*F1uifo`((jdl*v9>)96 z3qG}9$}2YvUe-2Q0UbWtiB9{U)^6kgOirTf2B zpZ-Stdw4u#WdL}lmF2Z73EwD=zutQw)VvB%PL*-H8Qr)uRU2SRbNX z{~q*)koQ?`Dee)Ke8VO{n9W8~B-R+yEj4M8b?z#jUbX0zqCL=q>0`p#FKLN>@XLT6 z{7ZSwuTt~k7pW8Yo$rS-`}xlk!pwizE5pT9KExG|Jj(d@IrVe4y=dDsk*L(S!nHd^ z?UtP;>J@B3FDPl61@goDIAaCZD&8l5pJKgQg|_Da&=xIdN&4N@ch<91gOT0Tw&j-& z5GK+i=HA&>Dr|A~2O5x1Tmf5eT=gf?dQ`8vhMfFi-M??64&YHo^E*XMKBS$mScsU6 zb00kHHesB&RbF!t7t^vShyv*9;w_dbFC_o?&o;QNsHKn}`Ay@ZnCXRwbCITU@<`j$ z2{n-Cg)!&`ggg1WsD{e#cX4~6Z+;nxnrgbEQiKgp$Ml2rTzHx>w(Mt}jSDBaAn4%j zpxEp^2xleXCb6g7NKe{J;jDJH`I{VxI9ri*9x}2q>6W{XUEkWV0i(d(#*6j9&a%-) zJxYX)s$j~g`YOTev=@BpTVSeE1NVQ2lXn{lsDi%ATbZV2N&8fV z8ljtsM44tNq31NSWa-r3ptaf{qK?1BL4WeWR(QJJ^E9GreEaN7C)|zFrQWc6R7$UJ zE_sa?cWjZvD@V#W4Sh&C`wjbp zdCJ4mPGZ7h2SF=Fyeg~ymHHjJ!fg^kpZUp0QaiH2GdbKsk-H3C+oX^sEi>JJ4r|{g zF|nyWkV4lW5rs{R%{k>k==28&nfw00a#r`h=kG!lq|JZK3CFO& z(cwpd^AyO-U#H+at8;ToRZ9CIDcj`D=BB*yn*V-EzDxpAq|Q(5 z1dmyzZ32&@_^zjus53Memz$Vxd#h3(DsHD(%N=mjljWO8{;@Z+=B+1}`|!Y0|M}2f zklIJ`zZI?!>*KE<^lRg$O6TD(;y5mt;~Hd!?-o@e1%iTRT`v@nBaxgtpY}yE;x>mJ zA_puYc&bdngv+cP$P1CyiWC^J{yJ-bJOdp{CLYRYg zjj&qd-w`gHj;9ake#=l4ej*WWyly`omRqy9m9Zf%wSjy~`ExE6T>tIpu6?gqhb*oq zPjSoNp{G?__+vl@DzfZq@+$*=5l47!@KN&(h$utul(q6KJx}_L_*|7^1_q@-+afil zOuoh4B5z(fH8euqm36$B80%Q|ch37ILo;#gFPa&vWrlfeU?08bM~4viqi}PvgM8WF^A9qmj@1>d6bar|nlq3y^vmR7hkW@g*&`B=G^y%I^4LPp!8bOwJ zheIvks8-EViXei8gQ23+gz=UEpDx68T*~r(!dCj9?`gZ&wx|}@7GCP2;%_(} z+$Yl~e4P3_Kx(e|dhYMC4=k3UU4OyFO8z6ox3cp}Q&$=-Ohx+0s@FlY-f3{BF4F4a z6H*adR=1r42)??Ssb57;WSyWHUd)#wbvvER>RAxB*n9KHAvnx7QW#PyL z>Cu?hvfj|c9{6f}C~|S+shOUX`i)0Bp=!7bd#LxZNAE7li+P~dTVw2%wKO9!i(p0b zI7Om!iWG?by?7p_BWGTPvE!7_PLXo3-_Ow0M=o+tb@`*DJDFdHzP5sBnOfHy$qW1z zDl{S?HPRC`UkfYrI>_GIDYL%e2<-sntBuS!q?r^y)b>muEZIw*(V?AvUge4WmrJY) zZkze>wtA^)Jgs*7_>GCxjYx$+NaoupZ5^90`IoX}@ir6kugB&+R#$2xdIdI(*1CJ` zIxY4h!FxMFqmsirF>`!(_6Fafwzgifx=nGn1US<`r9vdr*SL(rgzDqc zjZ_*;2{w@4p7C#eifw93kp@r;mI?0(X10d?g-ZNx<`qiST$_ct%GVGMW67y$m39+fT* zf1J}BcE7}Fu;?)r?7%q^Ib!+csoqqsr?B%0m!Nt&OLtXGZ*dt5pVceJiFOr}Jr0E; z=b|g(@UPwk!fVU=U1GqyEm^mf#RPFP&C>p*Un>p4le8b4LgvYhDvb8qw(@EehAh6s zO}yf#&im;^Mig6I!XsIAUNP-<$u)1lL*2dufv@ykIfX_V)u35q7Y&4dl4Z*3IK8N$ z55`iAi=5j10Jun$`Kym!YTC|RA7rt!JZxwk85Pw0m%-6jB1|o^X*j}>mK{hUq>Fz* zuXy;^{LWF)!u-2LH)`62L8tMQ)(gbvDM^_yOqW}y9@bfbB%oYPOkS~iu|&L>*R=CH zA3C(mDWQ=a@y6`(U4;<;{HH#-m=EFU4Qx&5Kk-n^pf3`88H_4`GN&zi>wi8d`!7{d z1C5QFyAR#gH#_TuUvI0pT(@}wu_WQUfZs!k8sX3Ko*}(5Ma*+MYQ1`yFb~bF*Jvr` zL&koalZP=*)x6l6qhbs{xaNF}c)IEZVR~XaUj60c4-KoeUJBP4X(u?H}TE`(OYnve)=lhIGuR9QWlQJ^<7|H7HdAEAR z%@^UkZe6D}c43B(46aQ!@kDw+223Ylr2f^b{FWF*L?F8AWn!n=$B;HwXIKWLXR-Ou z{&7LZsY((iA;hMX(5mR6eyp6=ki{AEc0W$q@AxDd6gVBoj;|oO-WK!`?kbo#3>dm? z453|f95!P6nXq&@3-|v_gS|c4f!12sF?MlpXVI*~dBabZ+c3NXDo$*5to=HlCT4S3 zTm2tB*~?YTz*91;p~O0~L8u!6yUv>PU`GDl(6XMGFGu9^PY8(o3H$55+l>v1cAH9E za;|VcdpVWw+z@0I%hdW>vdMegVA4|~fYSDK2q?_%%)T1TMDRdnh{{f5Li}6Mw_05h z=ZWBJhv#IUoc&g^T8wMZc6c$5>sN700?S)-t?J)zo7AHx{7j!u#m~$a?@`Zpwhfqt z?@;YnQz@Q&mhpMGJcUx^=QK!+S9Z53b{=3d5v4b(I6jB`MJ$U-5Y;e5-*m8l_9t1A zbN6pW{q!^ueV#|W8yVj{>4fF|{Ys0vQaS(FXUZ$baz+Va^Y*Ru-p=eU z-@_k|%`7dOk_7Kh<=qV0#Lk^Jl9?p_Z=H&6GD2ROBE4&CajTs831RtlcFF4}jSb2Z zpw)Y2e%M<1tI0B4B~{RMk8u6!vj3Yf5(7$ytN~z#H~M5?b=yPrvTrC-u&RNvOTws> zb;$yG%i-#q9D>fdHMUd&n7!(5EJca7-`Zy!B%kpSz*AelzL`!?>OlaV0dji1&b18i zUTsu!Qc#_}?3vjeFtKob{jc9%mIJ&n?Cu>@HrSN4X;badjfV>GRLOpFIJncOvo1#n zm7%?w$ci$GIia@GYgHXki~KEeQO5TK%aARPkk9&S&tda*6-d49u+?QqoJ-G;QlQlm zAvvIJz+?*w6@SrTGz8ScpRcNNo^VtJja)b0DbVQ1V~?;B;Jxm(n{=7f8n5G~Uw>~I@eO8dm4N!1?n=I6 zl(lnV7Fp}Li{=_&h>W=|D4HN?uN7k9;)4}ang%S@<8LOQ=UZTuY`p(=e7etEUt_Z6 zZB6b03G~n&zt3Zak_EKToNEUCKRnOiPjCV7JjT>E_fg=6N?e0(w3bkORMO`pnZa`- z!3m~jIXg#}3(2?|8uY;o2xkGuc}q5~bUX*vfWxkjCsr0lii6Ehr20d&!-KNsFm+Ln zDP*0DM&m>6YPSNqM0*ZnrKoZOe5AwWR~qOiL$5JRGfWKg--hIHE{ye$!(BjXuA=UG?a4JBO z;dZpZL|AkLrxX68Z|YNh6vH|>$I@5lxj~55OZ2m zOCo)8WS&PuJYd;%B4U39%U`@%pZ8geNM2UeG2IBUwl=<}YWg#=CH+VpwDD=9LJjDB z+lb-Ux|eyeF4+Nd)HnNlgx}#=x<<<`;k;*LRyvQ~y{z@CyuF|fCQJRV-=^!?o``fg zzSSKJElQKav5f>?&z1!Z-W#$`_$9c#TNkH9f&v4_imh^Xs7=N~0@pmQ? zZ+7q00m~E%m)D@&6A`Lsx$;XjnTcZl=Zb|-7Cb}0KPll~J39wsmGyM()o1_gVGRGO zt%a;H%A^T2r>q9R(fFE;nOZf(a;LPp-xwLl-Map{}s*lTsH5XKpx%XhPTP7)E zjymQI%zE)72n3X$)4`8gb++nN7nJ3#(zVCy-i!zGzlRrLKWt4Xszk*#*W6~V5*4^C zN<{(W{46dth4p%L(7Ss<7u{OAlj*e&mPOIye<{N$%>r;FBS9FoBj1s-t>kg5=8CLQ2W4^)Xf@U}R z@QV~U6vcUXUakKb>sTBe-n^@83%#7cErOr}fxwf4Et4P=Ryt{q=_ko*sv!V}71A~1B&LZFsp6~8N_R)BDE&geGIQaYYcc$n3QQPl(T5Ki*Vm(fBC%b(!!6Ft5 zr+>&>cpmfCcy<4H>c`Z!m|`Y8AIkBBX~)rg)b8SOeulUq^;KU>h6R~W3Gx@ zys;#vV^!F+UZ0m}_Ej!F^Ib2|a;^KZ+5$2E9z2l*2|(F26uXu zIQdK;5XV91uw13BKT|nYcrHaLV`s{?hYrpky7KP#@;$vXI>k}RmZUg0SF+3Yj5_vZ zd|zeM6m{Mmd9{yUC%`LGUSm8!9MlX`Bd+B)G$Mbo6+Y(T)=74~EG&1^M&&oPvt@du zSL+{f(J!j2K6_YjMLj0FGNt{$4w!qoTi-4S%);}#v92D?dkZ_@g&m(GbfT@?YHSwn z%>A-{t02$Ji!Rh7)(bTX#rMN?mTU0`DxmGhw@Dt_EYAf|Y}wI!%r70Pk^tVTsW&Hb zDc)aZ5L8wPG1Z9ix9G9mrboYdh*EDlDht=L$|7v^s7gA9=eVG87E&g(y(I%da=X;Y ztRwQdGs!zlTb%9ms(D&PSi?C+d&ynE7qUA*h%BJzZUOVlRDdjz#CK;i2ft5&CXs*H z4d~3^qLvF(0Uzj;@kQ!WS{IaxKAU4r%i;Arp(h)N=W$RKy`Z}@VD$6YjP}3E3$ZXU zQA9TIqc^bg5II^cxbQvFa!rMZzGYc93sEz;eR7YYWW3njqt&+O4PmgRO5 z5wtF#eL~~X$(Ob&^hp*=00zzyc21k@3tqR^#SUq^Gog4UhtP?MYh?jmLVZwt_5d*O z@YZ^_HwXxrsMPdV+4H$c;6GN(lUqwG^KBG{p1aR9FR_`}rk%@cmNZ+$kuSX|n@M$l%r2*U5-PLXu28T))|l7HlO}W-WfZFOX+h-&BoIa;2!bO zRcF2MR9XboV1g=Nr^+ME`>;}8VlutLlf&7S$?sjGbNVmV+$FI%K=hna@Vj~3eQ9YZ z%L8zVCi0BNCw5Sq;X~hV=Nl0v{ffC3m_))`vScphK&K{%Y6yX|R65oD=l;h+YF1)G z58Z|yxWcau1c%M=#{<(~k-KUBX<&{<6^cBR#67(dSn3?9B@0V5sAKWy9QY)bMvBT3)Q`q!;S^G!-+3|Z~0B#bOk72#hQ&lJ~m zWdzTbK=dMB)Fk={;wS;h%hVj6FcIY%YS#7xyU<_ETX7 z%b=f=nN|gqV<*WW{WFjrb}6@##-+_%Ei85mh)aZ{^0UyHMNj`a=F`f5ql6&KT8=-v zLPo+}PpP)R$6GRBo!9IUCenfLCk7v$NyfK2;JiwC=BJKgv%D~Yu75cJk6x@K&c~dR znL9=6-C1k)eEr?fWTY#zESE*f!VXb#e#G!_-Gw>EU7mF_>g<8Woih!K`jVa`YBA!8r9pr$REt2wtwu!s~*ya4STvv|ZbRs7&mm*vZh zcV)KJ^_A^GZJ~2X-96Ah8gFb_+coPxc~*E(LwjnN7$TZ`Sp7O=~K^35SqIh-d2|BUtc^Q0e9w4iOsi2u$_@OF2Z{01p}Uat|?ONUMX1J7qP zF}G)7I^B5|*1?5-n2?A^)4CfrDfKpIDw~KmWjM0^;2*2c3`1BYa2kJHqU7E^S>ql% zSkvMt4O|fA!JU@1Y^34$gh3crq|fv$=~)46<@*q5|AFP65Z&x zWvKJK^P>9tn6`X1UEo{mByW?d-Q6y={@@)us~Ny*VSUcm*P7qccn0NsD>4}M*0nZq z&x}uh5rq5P3uP#reA3*^kr)Xsu-s+ja#Q6Z3ojk~*Z&C?nMPONZSHI{fMz9FcIuY% z5O{y8KNtv+8A@pn8 zS_kYWxdcgp-$7Qr{^V&~$8;!ob9d6q#yrr=GZTQie_qa|Jc}?LU27maNbKzYB|cVV zB?^!kJ*>cs)mRK$-BaO)d8K4OsH#i3}iz{=qwNQ?{ewcs$6%@iP3ln zkx-gm|I)hd>jD7R!nN=lV4&~7_-upQVQ|0r5hSM!Q^;^AyNO^qiPtF4;^q1}N)6b;slV^G3P=3wp^1ip_Rn@Ax1?Y~^Hl;fU9V zMfjm297q+!{;tGiBCs!4UMl#=IDPFmeey3f5`;FNBN?=xrU~hde+1G)eA>o5cC-iw zOXlhFvP@ign+#r2IL|dfRa~Ahr~7cuOI(W39x3hB7Ykc{03d(zTjqfSxaH$dW3MA- z&|iGp*;pRlPq*hyM&8jW5y__bRyfuf&8IS|%L4oI+pXc9z)aP4MOf%T z$x;LrQjx3Q4B!xpG}}vB^X3E|(>!!N+B((^>ZGZ)TJ|SxYrnq)vR$~11UGh*sl$9V z(@=^1pB0nAemKLerpt`WpfzFno3dKbSm&r6Z05-i*^J{2@cEoo%Raj7Ryl1Utbj*& z9Dz&eH(fy6Ly+)n8zu-8r0iLqZwU71@KtHXa7G z`{&^Y`{Enlwl@*W)?a$!J3MjwH?{!$Qsu}M8=DN~bSuChFJ-O2vMqdE)HqXMJ}1-c z=AG?8xozqGyK}Ya)?&1L{VNlbU=g8|nlnuS|ACJqp8>eTu`X!Hd+6zMjIdP|_5exy zF2rZu@cXbhy-8bss`xpt@%1G$OZ+P_?CnpLJSkm7b4$dz_fr^tL#cl`T7v~5fzs2b>XwUKo*`0FU(cmNP| zREB7N1U>wTy-k(wo*$hyF*ILw$}XNC#Wmw7T71_2)&1VfJkHEU%mE5oN}CgawM7{h z4*CB%vYznvJu!~_kDQ&O+moeh2!QL<=wJV!*jhmAAH~r2=3EbylkBJ zm;sm(01fd=;DD88B<6EGw2KE6IELJX*Zo`0Is5?%{~l_LiFEJTF8OmCe_!NJWuN8_ zyP>U?ZN;!xOc%H^P1Axlihwa`4Fv!?IxVyJmPlcV*~?&9D-=Y|{n?#}Os0Oi-J-~K zpqF!isgW|OrEcMcD}%WfE-vYsggsc}on5O`hr#;Se6xIkXV?qE!Q;+fj4zS|>XnCo z$gRTBWIGLAre};3tXdY>Dxz`1@Jb(_7I1IRJNp5+ zEEXi@Xmw7$5(AADbN8Bn?ip){F2@EfGmWArD0fiO*PMmZFvgLuxx-T-HDBJ2V15WB ziGTd8e9gQDgz11i%@NL?r}6K36^?B0?KOzzv12Js-Ek^Fzd6^1OOkl#%?Icv*L-@9 zMCV1v2xcnJbPoX8uq}nGzCji-@Zv+4mNt$c5?E*; zrob1nhXr9E45mI;JfiM5&a(Q;_eT$??N@Fd?nMM}sy5V|J1ver3U=c7Y@~%;qX>Es z9>Q0ik=JnCMOs#4s1FZNO-+v7v8g7s`GTM}&!3#SLo1yw9xDULv5W+wlK;t?o^5!D zUYh^PdA+pXLFK_8=28Mh!j&y;=NI6;c7bd0&rc=`t|ECp{~~+(<1S*j{v-SAnMx+n zbWAs8(`4J&rK%PA2a!v4dqj$2x~IIc6|L#?xw*{NXiCTG`oG7oTE=CT^jHAS$FMGZ zYpCVJDpT5;#Rx!G`@o|`J94&g;%GMSzF@PNN-?n}=>|y+JGFHTh045)!Kyy4@GM(x z7&n*&IVr=f>cO#SmGolfvt1|0yZVkMzR;5iI38Cfck@BA=|&%@^tD0n5OAS+!8B$1 zAjM&X%`TAT>_%>8%|XLy>$?0FA#|h5zXypDK?c^BH#JLm1ClmfP+R6Q` z%MnRBqnE53_D%QNGKOvsX$2$H;FmkX2)2(|R`r^}WBkG3-Lwo`ez@FuoTU6pWDhF> zDyaYKy^H(6dt1Ohh39^xQrlQ#g8oLhpb79B?8tf2z_noepmHN83%zNFzmVLofX_2X zgdc&K<^@#Q+h8jBFkw0;>M;v>fS^hZzmexzU0`SnWdB~)g>`()e)C~jX04WrLw51? zaQQ-F7fA?2w5-k+j7kIhh&eTc0Z#I=B&X)9hrcfNu5E}#58ltnwHUQoYmP@G!RveqPj4O0I3i_`Z)F;9d6Tm>`8oncU^WH zDM%4=X=V{*kSG!ioA$lSD7E)qVJEuQ5*6J29^64x=OoiAP$ICid*F~1LuUB);=UJY!}})#{^!5lyRmye=Yaz*(4r4 znPK1V_^~)H`?2Zux0eqttqGS%eEVXz-k->C2IlUMMOi3L4BywZ(wg9$b<$7>W1Pm# z*mWak)!^Zul9NuJ*tRYw~4yql}Le9h1r(t7BLr@+U)h4(-rFhcgwkkGxhY|G04xn7W-JHlK#c7wy|%+ea!3sQZO3$ zPDRxZ@nwU0OW9OGbB;^=GI}@t$4X*#_i46uaT1PlOI*uEiD9zubBvq} zOy`>OY9y5WXNTkDsLb5El(sU?hgF)-+Af=h4*#J&%O>!sUKKN}SzgQXRBhdWWQ&S$ zmoMr-@1ZNTDMEY}a5hUZJ2SK>`}Z<@lYRqdUt|h5{ZH}*)9q=KI5(bT7Y<lcr<11l^A7Ii@rbZzNjwDQHZ|n*nModg3u{Y~Z^>9dR6NCP=m)x)l z6M3UMy4cB!p`IjK&BZSeVForxO_KxY{;~iz_PT4hL(a}gp=hiONxSr1R1o{Ka;=rk zLw%LAyXGg+AF{r+;O*>of4rsBuo&gi!&4O!V)LNUHBX(_mdkCLK+eDAYP>QW*8FTu zt?GZwWWs2{U%Go<&-`O@q#>=$YzybPwh=b|6aPWRZE9`ikVaD4f@$7<21R9x6~=b| zlgz$BEJ?&fHQLdtSc+?&Y%)Fe;-%A-A-76v=fbDgf3ww$Ks^Ic5>=3wuLj=MfDZ`a zI%g)OO{<+}f{%JDrq*mG}MfpDwjk2td;pKZO=B&c{f*=z2<+%BO3mzR; znpQwf@W9=X*vktcaGby!)oSYNmZq^b@@jFn7A1*AI=uW zQRY+fNy`IkXSnI)4*wm&s^NC5f32WW6xgLF_HJ#Lu{B)bi{9@^-)e+Id#jsi66WP{ zxH0v*`;48)2EgEc@t{1DDYfu#=`+I0FVD^7GUGmV%wKW%q`WhCd}jHVYq~V!!AE{p$#@1aBo?`GTOYsheM=VkyUe#qHwH9w%;8H5fG?4;0o zG5>Kv3^Qq#zQJ=G1*YwEYmjV`wwkCG@;ebu{?(aw^%!haW{Xvx68%aAPWthYz;*1n zmK}0J<)STR%+gOKf3<@@A@)TVBIPz4W~2*3&TcxM*`}#3*oG2W0c^plqav64vHtkS z{bp?rqq82qv$_AHXP)VGNK(al@oyilDz9`O>xL{yEm+@AHtx1E{7h2nh_uW9mS<53 z#h19CZSdE($7Tv_agquk=C zW%#Rk1u~0m#fCJCUcOa)Z0_W&?o`|8benO!-4(k6w#_$|*Ed&$=g(p{TQZI6Vbii- zNu*L1QkXpNaPrDt#(?yv` zBsZcS+C^F-a(wcW9^CRODxFk*f{2CT-+RfycRClJ8IhOcG;kQ>9!r{K>rdk?uB!;} z8d^A={N|ODfBx~XerjZ3#iZe%VXm(%-{ROpa^GYX?Tw70&!p_qnntsoX7^1s2Nai0 zO8;gO&BH=jgmvL7@DN_W_gbiZ5?cEcL&tK7(JHiXUcl!oDUF*ly*Tke?K@|gi=3DQ z3jg?hfD@!hE%6_mjM^yD;Sdrfi<-`~Sh%uoR45Pp>!VagdLwUknrd};<2VAH9XdK2 z0yJI3YA*LsJGLcnhyRt-Aa%HrR;)peNBp6I zN7c89mFi2Qy-TR)$)>dmvei4vr7&LS>xaFnBVnKSha)@B?m6{>etx5JyucdOI86W* zW)hOI%F7HO<*SU;${dWcN`epDMfg3PX3g@>53H-NNQfIdT@O6&EYtP3KAGTnM78a( zh@veT>Q{NZ!LI-krHSKn=LwE>&Op$7LQCznc6W;=;*felV;fy01r{u|<8|Yp<63$DK(>Uh0aV5ywlO z|1^)`y^3LurTWiDZI}gZ$#Pr_O5$$^1rO-CV(RO?F%cq#4~DWIFH`YRyv)TSE_Kg2 z&>)OXJBWu`o={@bSTy))xxtZ(oxDSq=rIQZ}}=z6?1h@i%Mf0QNvj2lnK zS-)`0UsK zUMtfv@5yzWYi!D4y8PxsovS{lC3=rXagwwMO+5Ptrq*Mq+5gO^eU>{;3gr7!e9j~P zMpBwiX$@gHyuC(2*!S!iKUUsC#IHx2hsNy+{H~I8B`iy#*bi%rvHZjlLH+GDP|MR9 z<0LbJ?yv`|baflD=27Y!hE4jeGp7B8v|F-hTTB=X(DHFhH)e!=L?i>YTB!-BlD~Pk zi{|W&HY(I&ctjChEcDDY`~Ap4E~TqttYhH*CVFU;Ak+qO*vjI!TsaIs(gs7fzzEOD zF<%boa5eiOydOXZJ4>T{=^nG-Fj38+vRWw%})gnrLw=F zU31RABT3o(ns$tf`FS`?=*4jZkUlmivOKEP+47;G=ds6y5$Mn353vtBxn+V|SL1pB zHxT@?L~ZkKau#lTi>U_ab4bDa^`~B*XEFckWbBDXdl74s=B{%{5IgLRX|?>nRhhO@ z0-7-TyFfHg%yZLdbM)PgC;)YoOky31V)J62B&S^3pQykfT}Snesa3 zr!lQx5fn?Gzq*g;4j)E70tH_QzdHadq5DWZKK9t*14KHf>WW3Z$AA+}a8SqQ)mvtjY0FQNTOsgq(Zns_Ip{} zjP^DR`FwC0!Af!?tiM6%9{xrrtXnWxOnbZQgQTF{YG2=oi{|VnwQ<|OxNn_ z6XTMAsRNyVd1T;<_0bqfz95lep0|v$*rO>j>agEy`_Xr1U`#8D(F+6$B9{Q3zM-L! z&p&@%*;sj6{PN`fs4UQ2_zz}u>BLACH~K~ut!J@$ZFh)$y@?3jTX<>CfQXXAY{RkP!fE`r5@Fza47+EI|wBYJw?+Qwn@FZ~t_ zBJet7fJ%1f@6jaOP`B`V?=V(QcA*e3Lpch!uM>KP*Rh<^LR(F49uV?jZj$DZ>$X2# z_b7^yjIKT26LPy>>ZzO9zXVMv5RS?D&+5xkkOLkJ^fquk|22I$phVno<+hZ{d9g2z z0%Qd5`Qq9jSC#u#GdhP|$R`N#=|4{+nYi(K`lY8s;d+rjOB0 z6H(1J5TPO~cDpN!96Z4*i`ZvNFR3SPfX>{pM+JTaLLMc8`6~QXT!+K~2M1p4773o5 zEnsSmO_*>TWdHI)(!o1R%q!-rZ4^|`NVa!4?YY!5+vTQnCl2lxtv1r9)q<&r9(Y36 zyiaT_B;m!!irSnvEp7KGC#C}_^|4wfZHV!B>CGEV?Zdgaq9HYc+0I&#vLfRX;zRsC zL#F?<@sj^}LT%&P+L=`+$tnGDSwhh;^1HDwnSW9tR&X&Vkz98AG*^p{lec6K80E49 z-oLP&XT7y7BU>@z-Sgi+KL@wW^pS*c-AC(>;{0<8B6kVvWs0BZ80&V76?bhD{~bHk z`n~8h-T+&Sif-03FUt1K@R+2&ygrgNkCE0uLJ6c9`vDM+$|v*qaR1SLYJsem<%9{}5fu7g%22VlNhr^5Lbu z?S6Eme^X9MrY9@urDHXf`!%k>xtub%0QK8xz*i2Z(ac$vNe!<1cg8Et0Zo3SSpy7Q zaaZDnIjCs`GVj4>DRYXbm$tHo!}t&IYZ{ijYOr6tm<-J_O76CIcWR zbk|8aluc!1vV5Zrt0*g-T(cb{H# zJPwrmHIb6s%BplI0t~~Zaj(<;UTf<&Kvn02{r>J$3SF(JcfMOiB}~mNq&nNB8)D3( zwDQLmX+Xb(5xs^vz8b0@it=x#B0s)K;GAG6@RD(!Ct7iA%-j=)oMgGuMzp>9HIvr2 z;2! zNOFZSn74q|Y&K+Rw}2OJBI>jxYuDLv!H}gVlE*h%P>d)QbmJ==vML#Tn#JbPIfnfG z8Uuf$Wkzb>51;P60gg2c2plCZFR<_udCBX?eE>*XVtDon>;3^Brb$sF(!;Gc?JB*O zZXs2$Rg>V3>WAaMOz1zqw&PLny;+rYK5T3_sln?fJZkc?6Y2+Idijzh^HaJ>bIZM((`d|jlP)xuC;YP9lq{He>wMJjAeJ={3W0I zi&we^u*obix`I%j+o_6OwhH%^d?z1NM=@cthw*9mj$33@_$qj5BU!b1WD5M2l%Zck z)wT^V^iEIP`VnMuXS$QxsgsUDG%&*5N+TUuAjtB;Tq_@9ZO+^RH|o(}FFt^Plf9Yz z0d9{^>t!=*4oJin$P*16)~ zHB6h<+u8%QN`a{ikKZ5KQ+X!osTLF7w7nq=JWo5q&T?u35Afq4qGynd#McuygK=|f z$rCEL^XS(`VebgBM#@N!^491UBuF9^Z~#9>*8=A4Uz}BrH7t?dVqM-Y3F~Z@cJZO^ zfjZ;TRDO#|wba!zYJKmwg?j`~B(N>V|~Cg~ikZ-w_&3Vi_j-U74_3;hMEny>YPazC@! z${YOIN}e{F+lc_b%9@u*?C>Z*;|k?g8!S;NhDAm@1q=DQc!h&z7uVsHt#aecTIE2p z&yvPSU%#N=Z<;$lkA~B!Wa&wyCu5hz&gPrA#I5#bMOwElo(XqE`>&%Cj@xC?15{YP zYnkZ#>Rc4!UIOzV%JQDt^Y?e3Nmq8l_*rH@ln6XKNAP_dhe&R7{EoBa!u-# z@-}z6jZ!(^!k4EMg0mYF#w%h8>E4tqbh5q*j2?A>{kxiLQTV#m1*qv=dFeA+IuR#* zVvO&CsRXYJjYw??f*VF`hXam7gqx`kWNI#nWn?)u1oK70OakFmr^Lh21^^USeIN1g2^w%BqjSi{7T5JP zJwupRRG9|U0c^jKQyjh8mm*C(Coa3EWC0~)OV>$o`gutqVb1N)vVAc&c|}&O3GQI= zYyB_+pC9wR3Ii{B4#JQ>obsQU;5U9?xR01UF|xKhS`OxpI4fk zd;D$+CYygS=713z=ZRv8-}B779V|zXn#Z(@elD3~`BSeivXpl|?onx6xY#ilxOLab z=0w-+p94-l6HN>)_*e;PMs#E_5CX%YD4yvMALLc%8sJI;0K7@9mETYqrs%<38!aiE zB+u|&F}bex6>Q}9CX#>OTVE8JQMn~>==Hjvs5vv)VJ8U#&2R(JOVzJ+rv{c@+%15T z#8Yr0Qn|ziUm7_Z{K6O*h@WKB$my8xYek#4gD@(u98=Q}t-D2{^0H<<3~}Akxb`DY z=*CZkwcRR%mqobpLcCFrlKxXP`Sh^)eE^O6CS}>7kI@wh@+Hz0G1B zXYed+0gq-q&qRIoHT_`Hw(H)*FTTDND*D?j@%Qe}w_>wmd-^9MvLYTA!}a%59{;Xg zIbbJoB918@4`~Z#kF6{gsSGwfO8MW%QmQlh==n6`Ve!7ek@Aiq!i+MlqSi!k&jm?U zcAVDo(7-M?_k5tGTyZ-6gFe9H_>l9+v&i^n0RXz}0r`wsv0t%q8v?+MEbqiN-_Gvl zzyFck{A2k1d+V2x>bu-^rA#bo`DW;6H7`X=!dz*~3F)kjV+`_I1!$eR6<}zC>9lGi z`oqYT#ps}*U(ZDcQB+8U)3%RP8>2whJJ&16Bx$43Mba{Uj0v9&-Ns^U`Dk9%eRY{2 zaJ-A%`eL1IC-BCEt0(`8mEeSVR;6_gd^dii<3ZQ1|gOr_9T`Vs4VcHXVhLa$bM`ulkLw9=MK8Mv~F-s#gJphU|;3M&sV9` zAb&phAxM6bm4=2t(uc57s6|imczFxHKHHOia-Jo-`(q;bo%CaS+{Uc`w}{nInfhHr zYNh4TPw!|Vk}y=Qo67dC3GAg=+lrsk&?vLkLpTcPczP!aCao@IKfR&Z@cH~U0P~o| z{t@#ZqlB>4E~6Ivd>8Ibf2zOUqEty#sTO6qPB90wIrq$KjqEf5!UhjMIiWzUQnn8h zb91N`J+at~;CVdy2zs)B#19OVLR#xxgVyp&zyNSHi)!5WqLRPZ^)iAWj^EaPKI1(e z&=)U`CEjXyv7I^5Ra@`66&h3lzH+Go{RAq9pLDGtOIfCET*nKF#+q|5AI9$7K}gZi?;$?l4*5t_&C{+DdaXsixiLQ%D(flT#TbJB zfe0umqJnfcjF4sF)0Cj?p!GFh*=U ze7?VP&Y$qS?$>i)*Zt1yA$nS1)zboD8cXI6y5(En%(5Nc9$Yb#Iu^nyeYziC2azo; zH%T1SpO>jF9pM`n>=W>N6T`kmn9SQ{2uboeW%zt$;GBc=(Pd`zPlJYt9MoR zLRqUuE09?S9c$aIS*V1ez2Klbr5bm=SlgYNlciZEyu-T9*eYu}@EpOS!qtF##}VuH z(|%I0AEBS6)>lgWMZJB3sIQ%zhO&=phvf9aAk~3L*A9_XR@fo%WMo^#0x&D~`)j9V z_olSQDqgNUb9&c)vX>=}oH3f6*zno+XJrq? z+Z)+RrvPIt0X4C3&^FNIIMQ($^R=1EIN6%dK?h}&U^Ig&+ zO)A|0Q623K`WIMmzB_||N! zi2oEvD?qlISm`@qAGYT--SOkD7j7*`hcb$E>WFTD)!Y2L?JSX?R%tVh`RI}8K4)U| zNbTBJUh~iL{o9|xCpu*V5vY(KErTnYLO*27G#IQ1&lu;cw->$BG7ng@0k3wmA7uro zl8_c$;?~~0+b!hZDV4B9Ug2NVjvN$yA*u~h1znx{5Bv1p1rY5BJH-r6E3sF-w)xRWU8cmg`&CZ~MQ1 zgB1Sfv~01p%E(3~m;asHgWr!cf7?kzHkBhRi*|~~1z2AVOiGX+R+-d5zJ%n})qgVV zh#=5yZuK$71&1%nA1KjSoaBGv@PkAPLy1MKW)wr&%CC38ElYptvD>JOtG1bRR4@41 z7tbrh#X#IVoY}Kzv9_r0da8fQ$Vz7)AQ&l4}ps5nqI za}skEr%?6t!Rtb0$NhJzW#P0Jop9$jD?8G07M)I23T9CwevWvB3Gwi8LPJ!kRAUEe zxeCucq`?b*NTa>pK(wi$&glyYJ_|l}3*sGhh*C(_z+O2Snv*^;WB(#%&~{5c07ooL=1 z0BHP%N8~rVVLtt0s!Lm5wmaX?XY7$PwVws07VBU?12YMVh;<#cvFWc^eD{D0TiVW+ z3!Jm%Z|nQ;PA&UoRZSX8^vd%-Gv6JbE>4uE6``o>g3g)O4_*_qYE1Ofo8nyK!{&h7 z4wa2L1eqIMivm?I0B>7pDMf=nI>oH#+3ct2^;@(0Xsq>=R!hW*Gcjw**HV^(*lIhc z+(H3h+xBJu4|OaQ}2+ZyZ3P?U{`tNPcnf^t{op3qOUWiQ@;KM zxTnZIz5g!>y6Q+*JJH9)1)#+iINVLW_b%d#;zv9BUo(&Izn|P-y-zdvX)lQWx+c*W zUdZ~>bw&8jLKP!E91#``a4M34rlb(^_>0jaXd>*tFuR4eI1{#+GZ7Ob~ zFp-iAy(o7$uZBB4;bWmBfT4Fo)u^N87c&~&g#3d9UCiO#r><{_`BpDhQYaA!Q@I_m zodm*1!vV0ohMWE3rBD_vT&w_dmDtLEqMwc-t=n>bZV+KYu z-EwH2y5obkl?T3V>-lIWXbNyjE@5=Lq{$qUOye;w%s-!G3zh?tIWOF0RpY1BE>qv04mEl>eGMvR)EBTj{Z3O> z^l0q>E_LPa;(xZA(L50g+kZp@y+me2yRb^&N!TDKDKO<7Q{QV#HtcvqnooOOgZII* z64PFGo5ymIZ0@m5h4|W#iosUbk~p^fwrlYB8+pq)apiPrZUkj%=QW zpZXJxX#=hEkvSs}w&OR^cIz5K@LK6!rLn?S393H7zn*>tcTet+Ut$7Zy(KcVSYW8~ z9-R2(n(l|V<3yWSaOHdEOZrsw&}KE!GSpCMw%RhIcA(^N05lK&_M0JaJmI6p{92p8 zT;b}ziKFcYuTCBEbxTI$eVO>qIk(@)+V7<|b~TBi(geLPzZ+=@@B!lPbg)PfGyeG* zi`#R#yYll-m=_DpDv@j9g=kGC2k*^ zIiM0+Vk%5RL$SlTx_i0mq<;$%OW!Ds2UGC8OD>dDXfyV5suvz`njPq*a<<&(Jf1*5 zR;b3jniF17$O-C#SE424Uz9f4&!qdO`i)QE_Up7;_Nd_glfegO5SCG@)RTG&*p0XR zDR2>ix=M!Z;>G3q8*qpqua zGX^n8N^&7I7^q?~{5qIZ*EzdNl}`^=XQnpG95XV@Ff) z`rz7Jw|emS^xJ|wQA6~7{LWm=C))_{UkVQ!%!&6|?4Z z74hC{{PMTj-Lf}1!F=+ZHKUXJqG)fJyrbLPpEU=;t!`R)OITv<3kmO@+KX=H;s$ib z5o}(0TlQESDbeM5LMpUt;w`t&T~c>E3C30rP|M&tulKUzu#JFJSnWTOdK_&oRDUY@ zec4}G>+sI;WSQW8>zR^C%cY&axc(}oQoPOc$m(MHt3QNKn;l6hm19j!!O{mh6u(!M31Fxe~v#j>E^; ztHwGB*X1sH)9aC2!7&0=tR1kwJQHv^0ElP(G<7bB5Q<*(f1KFS8A-h#l~YU9GB?<#oUUPx)DJN*yCu@zmg9=PBM{jdfFzI9%Y&{crvi|dta z?caN{ZH878Uk6>yw|u|YeUe>F$7bcuv?uvQD9lE~c3a-AEZ3K>7asfEhTQi3XltgI zsgjRm)!e9)k<3c7;MZCYY1Y=|myXf1G_g2i9E&gRVBKC58U3Ww_;|OiwAe<|S*XE8PmR@Tu2QgP|DpTID=Nj)GKSS$-)M7INLtq^YJ>RnPe{C5`1a9Ul94XP3 z$?rd*BAMKHIT>j;KKnuhn8{XVJA<=#7NVXgHCX74&Ka`fZ>S!L*yX|YbdnxOG5qW`0w+jLw8mdq}`zmrEi8vD*&ZO zLUEH+Zg44c)zhLn^n~_rG6iwmB7Bij~u#^|Ovxt7=gek8=X6}>3!De93r#=R0+*KIX%+EXc z7d@z+CV=}ZC4?iHxq>Dtnymc0iY1o?;U>2gTcXqaiI5o#U_%$XM2BPtX|z4ufy3f{ zPK%4Ajv-(*vDDX#K>6JI$Z2x&W>0`|hS!O--gRA-%DcNr^)`8ZWm=wCCH(x%v z@XPhEVM}*CS4v+N*;176HFB|%T@Q$qhl^FGVP4H#TXn{?bvJ>X$UU~)-8T$F>`); z90KtGo=8|a(P`D@zkzy2y#$B9o@bkr_L}}5*=#5uPm;sFXe+zJK_!tsz4R)+&c29* zHl^}IQdi>b^Ylw@glL)2OPVuu_`e&VxHX`DR_Pm6g~|fzT`8oGC(x~1i|^VA{}WK| zIP?2Lc5?%T$K2#WuFkh*Pp?Tn8!zrN`|R8;@!yACVS2!xT~!%)xXAdy=>wBfWaCdu zQTNNVme)U9ddG61X5X7B7o1J_>FgUX}X3wpBl$|+^jl51K`(uANKjaHu<*% zocG8dr&0i}S9F1plM3iW{kfZh#BnKo^WLKxEczO{cTA^!$*ZQW_V?XAol^ ztE(uJrz1-xvples_|-G@nED^GCb9236j0pX5TphYY)SV3@vnKZ&%h~talX`hLZ@OMt?;{QI#<}%s==AEF=29Yn`Noeh(22;AwdxMvvWl|nF z0Tn@-$sdg7bCOoW@McJ<*x#g1UwqIL>>rFYbi{(T#;fF#!zJcZsHNRU*m)60UNx6d z-g2lu7%qLFq#iE?_M1=*EMDJQYF!7`ZB)F(W$UFw&^6d5IxS3Y_63W(|BQALuU^~} zaIa5!M@z95?hTb^jBp9TMMTSFx-^U;sZ%)+!aQ^?HXWOuoY}lzaiBb3wle4^qt^K2 z#AwY{jO1ow*7PRdc;;J*01HexrdFEiZDDxHRms|jRI)~`c$u#K!~BoiuGh&eY^<9J;!!Mxhy(&Z*e8Ox2^plIkU=f?Hv^}w0+ORfhW z;jb`CC6L~`AndPm)s~;>M1ITo8~QZ2HP*wMd1HTSxoCW0^mWM#J*fNGu>B(i2YDCq zX~HP5dfQ{YnFNn0{(o)Sf{YkVtS2t-HKj;ajDByoRoOS6a8njRwV=|tXKz(TOcs#k zdl=0HIk+FI%pu7%II@PF+a>>R*^S^~ck)exTfvxJ0Nh+J>Mu#;zq1z%gxdCU7x`A{ z=ZifpVGVDDS*U<1t0o05r#s&&rn|!h2n^UvU(%{|JxB^T3GR;XyJH?&yws=4>UMOC z!p??5v47#%u7Q%K)gK_Q)o(ZYXla)%s#O0mW!TdlRzdmeeUDqS<1^qCY~R<)ojgcz z;X+G*3zjbP<{%rbkp_F5^Lr8aQyN9)I6YuV{6f5LBu3Jk=PZJB(dSe zy*c<>$xg;;P<%hnr}ZqTX;7|*A>??vN-dS4XR-S3tc0Kp!?wYhMaaD36@hD?qBzk8 zrmK9GS1Y5uMd$c(K1Zsi6Bv5J2O%{(U8(Kl)+TRHm8vLdM~8QyS$Qj(*Dw34GW?I? z05_vp*yhxB3;mch^*#xk*YfQr&(5Ub`23@#4h7Y!MU{Sh{%(|zb(0)G;^QGY%j}ylZ1GZFhU;QSGuDgO1Qp+d-+=?? zJv}|ZD?0SXpW9SHm^MrNo<~N*tGaPKq+qX0ce5>=ZrzAC&i0zUM2!FN=FQg4rxH?> z{AHdZs0iJMw{APMKyaD;n zJ?-9*kxVw~cW#yJTSG8e{yPU38H%}hg|{gm@t+Y@PJb8*4Y;tzRVp-FL3AF|+`luW z4|VeXE*)k_K@C0cKlc9vJ$iH$;Sw)oys zb3kRvWSSw>0`OZ)AKU4w-V;|w`?sH?iScVJvmy2>HVw&b*PqLU*&?k6?^PxBl#(8; z#{=e1~%hVU5wwpWoy)dO(z8OM#sJ0#$I!*AXF|88{SN? zRvl`-J^ik;sNABDbSj%a2?>~PBWf0AZAm*P za5xkY-;t`az2-Q3ImrfcaYJ9powahQvwTvj@=ZT;TO;q@y>siN^PmflVa>F18@p@; zF{mgA7ci)8V!nfC2eJg54^>+%uP7BOVHpcv15JXsj&a)yqq1`>rT^IQ#Y`E^+%j{E z`;avNI(HWiSs`n|{LEKT4eU=^)SUXb{zU9@WCZFKO$;mYUHNKeLrwN1u=`Q ztmW6od^!6OJ9MLmRSWZUR|`Q!$fe5BfiKuZR8W4*KRWEw2rTJLs>2Jvu$<_{~;)_H_!L~7tHb7nrlL@#;Pj8tT#_5 z%08Ms{sZo{-D@ZC!r^58@mGPCHD=#F@qjnt2h1t-cYt5JxM zYN?GEr`!BeO@5z60`LP~8?X)?h-4i9ANBJbaSeXr#bN05Ut&2oVnvzs_{n$&smO2k z--A@&rvLT#5=*G-=nc&(wKnb5v0M^~aNd(xJo$lB`dMEkipWTFS=GYwprun%XXO@f z5`8}-Tau|>e%X?}jOxs&V35}By00R~ZR>2(YI6MgSJ;-Qm^j*w_qv+9`bH2kdT4uX zD)O??Ze6DWD7V~UMBN(rXx3$=M5eUqtCC)-mkYWu(b#kmIDE1|1=ihpON)IW?nwdp6O?Gkz)5WGO^ zbNyD(W7?R1=s4jwGGahl#aQtTY1wm2;YZzyyR%Yej~uH)O&6VZs6vvthcr5-2dqB3 zSasJWOzP)S&`>e>OOK$tY?s;9z!Xsx5v0br!bzOWKB~t_ zCJD_pSSzWRWz`GmlJ;7oDg>#O8GriAmN?IA`~~K1L)b^E+WG>t+x(jln-N=GG) zXFo*AFzj*NU*{JlA{DTT`*6+kz_;1Tn3oSdcPWJi$xX-yW-CWR4Jskkj8WZq8sedo zitCkzRG-Cc+_qb7wNdLG24F zf%qsEzX6mwxDhCOU7RD<4X~Ie4JCp>{cO_iwBIEyI0*`EeE=MsGu-i$bsYIlBGWO)6EooN$aHG6t7Tr< z)l${Qvvzgut3Tk&*55s;uG-kpsd@|U5JY-fPPmT$_DJAlYj3StoFTK>Nd97l#?{V` zwOfO4(#2s^IZda@XrMK%X>+9_m*hV$r0?6aEQKx-IF&6SvK;`qVU)ULfaa7U$|HuZ z7T-vW&LQ3iW5JIGE^rgDvs<4X>d42D`om07aenjX;8B2!S&q84z{Ti_3)en(_E;k0 zi-49p9Ah4UVhn;bv1UH(ktlr}za< zaSH-ON9FwClK(_hM$4Kdebb4l+zHF>LAfw80QH{-#&=FMx&gbpjre@r7HU2=lX~V& zD4LDp<_&sz5f_`{OQm~M;f^K`>4q{9mP{YWOh3^7SoL)9hB|p>#Xm>uon`zSZ}h*6 z`!1d~W8 z=WZ3?l|C@+I<#f`5wK+j5ODe(=DQRn5zw75up}sv#;iA9d%XzzNf5&1s=}{^WhX2B z`NzJvkUPoxs9yBxIlS)8ljqSt*}buLHccz7!$elL_cnjW%nqZc0;ji7z9_W&>Nv}j# zopatT=!ffL(>uE1t1)t47eRiKGJNsieL5ZarC7f55MqKaG-G?b6=4)2sqf5_brzMyN)eqTDz$6@AFR1>$i8fyE+F)h5+2yX>mOA zmQJAx15HqPrwOsMuKC@)J6|M1<2^J!g;xGvKJSjEp7$)UjK2C$vbd+4Ab%)a0vUBQ zx#+Yo%Dct+wwrgUTG)4c(Itn6ff5LNmW=yZ1O5jRp7JcnyS=q9_f*^ zl}R$Pbw{=US2JCa5%ZePZ-fdmnxbANBazOm&n@0)n8nxT2oMej1)EEBfvH!~0FYNO z4-4zBZOpmcDs`cbRCN4+e!H8#u29uJgVnfvPHEF078Gg2sJB^8(ZuLrJiU9D!j+c8-ZLI!Ia^B;7W2hALFUd#h zd+^o1`rgKp=gC|DI3)mLGv0G24{<*&Iuvq7zsxprNy*?N7d`9U^F_n)oxns|5dW;C22B62TmJ+O=dyTc_R~JFpK2$NZ!;RCnJ?K+!Kd%>8mdeCAr# zo!?CEK;5@rWML#r!518zx7i%n?l<0nYczjkwO%t!Z7~bnZez{{RbG$irWE=G3<>mB(3R-P3=pTkHjY+l>P!C@sGTd0)9XV#l``|KbaO2vj?rDc|U96N*n? z!$Ep0woXVwm7Afm;r}1~dGRUvIe=jbfL;WC#gz^sLrsjB`W^2NQZ>9taNS9M@3C&C zu&8+`*0_RF*pU$sP!RFWYGvx26ym{t1vXwu}Z` z{YC8Rq^Wh8J9V~W-GhY57;X2F;qbAXI`Mv409&R-SrJ>q4fsQ? zx%xv!;!hV=qWIol8~I<;j?DBc8*7v4QkrS#>=4_GMjfE#7s(wLD$xDeEm>)L*HAuj zX734>kN3ZZ4>fhRZ1U44@Btfvx5}>$y|DFfj-7~_prPfa4E&ijxasB>GaQ1981}EC zn)z>;RT_rPt;6v*<}QmbMBkoxOS*{BcoKxeCp*tt5o47MA)>g_`@V zvi;5W`vm^a1Uf>C4=^3nEhz8h)sIKGAzr!F8vKHosZXyjy=j26aN)#IZ4dyqu&~TI zYYdb`6^1UOHe!L2P8V%Gd2C!C%BA7P19H4{u|y9FR_i@}3imXh#*shO(pEz7ry;lO z>lo(ee@pQ+WZ%md6?gk(Y!MFQVuHk{ThqPY_2+FqVgI=Ol(3=qa(xW>R6t0V(A7wM zW*Hjh@nBFELOdyF(cuzqn;(8(v&Uc&!cq9e^OXTFO=`i>z(9KxOO1(;$6O;eLA&<= zR3&_d4yiTj;YD% z={CySr)2#OcqQnztFgIfc~|gA5_8N6KALY$HyD3n9a${=b5+{?UA)0gDoOE8r^d)+ z>On8_&;ATyugpgkNP4B)^6joKBpN9S(@0kv(D0pL0w3+gw~?4t_kaN>?7eS3#!a+b zooiet>$R`BS1i&*Dt; zUF9UWY&}%^?_Fogo2{Zuqk?aqfZHsUMV8y5#CHAM?htr$TkOiF&39P)y&cJvakOWp z7d=Q9A79c`7e;HQuasU%&Z&($`|`>3Y(ND@^iMyi^C^F7=!e4&g9^C6k{rBMfM5w~ z0Sv-AEr)(mV*Mk1Q@V{q?}1633@!F39`s^OPYgd8bwE1-crV`(^71xju}-?3NmI_!x^O2setPCof*b(k%cqJt>qZc=ak zAsu+GKeNBs<@tR{-2Kilg`cT2KMBQvum0by=|A`=A&O-GFw5<@1Y$z-g8SgB-4B8? zsDq$Ypc41K{t;rCa@H}jWsXpr{7&@Taw08rhN|kUPY!z}g!8_lAzG1mV2&2(LyTj6 zUeuGgUltro_WE!Cb$QS9?4bXl+j!r|4G?rvInsPy^uc*iUnPE z0dEA8)b1XyDm?BDQQ02sQ~qZf`0b4#xvlGT8Ym)@R@KSi!L@bIKcA{{m=1UPa%e*a zrwTELM0MKdoAIdQZ^!eqb1;V74qs@lwo z=f`@1PZUtvsdkJT`pk7w-paDO$-ks!&l2Fb#h3B9yXZggHk*jK9%W1e8M|8|w`zFk ze`(&67639X1x`;b`XWDhFJn8Gc!~U6`Z7>lO@pbNTPl2z59wM^hdcg#LrcC-82kpC5 zgmV%lDa}?2%5}$_`uApiTU(}@A%vwaEnX>T%-Xj*%O}cB7^mW&DGv%y!s9TI7knvC z7`)6*h_;TGLQ^pZHFf7Qu%o})xQK)_&uNJ#COtzfLAFMIyHg1KUdDAE%(crJ;Wv~} zavkQbmyua_qZNbT2GrEduiWu*80iogYAqoW*VBcfO3+R*u%0j4=b3+_)+`h&h+&q`2g zU5|kHD+MZc3rS^r=gcZDP#L%Wt>p_G-gS{12)&BnFv=ixC!&F%M^Z1d>G4-nJdA9yN_pPqw+}-H&Xsnb2ue*c(zfnK4*THzT}QEzDyi4#p_6r z|E@&*@Y~Ci!dHzwe{?YD}-RSHjOJQGF&FA6JD>{v}1hJ->dy(gP6AQ80?B-$~@C;>Kc4?Jv#MSP<8wv+OIeGy zBaDT!B0U-EVarq%`1ycU9Hzp<$>5!F;gBhkXK-5>_dK3_+O4dc%`~|uY5rN{R*e`u zkb8h3;&CC0`qp@&eanV2LN5z+uDBI|V==pkH-ZXQV-v0c2bRFMR>U-cbxtITKs6Iw z!zY<|D*v0Bq{mD32NZGE1`M|Q4?yi*^7_ZKwmfQ7`%cIuE4u4$krCvajY*C6)}M3! z^=jMSFy^M~=pHsy;8E>GQ!#Y61Ax;!X_lwiAYnsoMIc-e35_eWG{%t4Z~e%qS+6M` znlyrEdrB6=a3oyz(cmQ`fyO!K$5JeNWx#9m-($p8`!wP+|0s1UczO*6IvI_7WNSz1 zbWsjeyq00zgug#PBXiFR%M36H`W7bs!4_`{hu9C=ql`?cxYya2(S#c)Q;8G|kkyf|o5F3C&E=O{!9s@~?nefI>m z5!V|dMlWO4re~u)`}l2*R|eZwCvQ_iOqF^5t_w*Hs${|MMo_NpRz2P_E2*LpK*i@m zb$gC)J7Ae08?zh52FpjBp)W2OPkJ`jA{oTjRE0RKE23F%#R<2nAw7|QWp*2tE=;K* z$orZHNp?Bq9>Mj<{&f1l&($?7@vi0NmyH1E7kkqR*vh(g_p6vKZP|_hqOaM0b!(rQ z$UwpzF4yRVw;R`FEt89rAMwsfb-r`wyK)@`U86H>lk5%N0I$JS|3eNs+~W{WmKCae z!Pot8IlMW|^uMHhU_j$-49@#gK&GaL6r`V(Jwe;a{ z?vq{$oa7nV$P$}h#`r=h#br>}0V>o^p4awY!C#*?OK{Z8(^GlF7mBZ%Wr-Km9H(#L}CF4}KyJIVBIw0V71M}IuC=rJ9LXq;Z_<|>m)T5s7^GA03o^7?6w1>27C596bYj0 zYG#|w*4+;%3ZtJbKCt_Yu(1s8F8~;+wQC z0S9t$P8XWHRvwtXwR8dxS%7W^nvcvd3B7tkmq*~*WZm>I;za1-`5&Osc^?ATE@m1q zYG`s*34CJEgTJDRG`jw|s-E?aa7`iH{om{m`GeWIQv?4L(n;|{Ptj*H?-=*$9R69k z@$@Io465LUD6(2Vz|?Pi23(cr3d3k66e9`~j4Bc$E{_+EQn;ZO$mNoYmv>XVU+t=W zj1BI;=GX=#{7qz`R#>ZOKRz!b`aiqT&#XVLN~0PtjB1ok9$(h(DA+L(Y-#DzMJ2rK zNL(^|k!e``0z1Z5^#Mnl+;|r8+sOI+5uQ1^x|7a$V&m>OCT95lCs8t%>aUNQwFV+= zndUW)6V=Tk*(?QV>B@cCh)IB}7g&I7onZprQNs1m5OD?Qa$SfRz8d3&uAlI>yoGVV zh$HKeYJq5G>+j9w)%dHw8!vNyEN&%%N*|X%Io+_{7H+Cd3yaKy1*(&1TF;A1_}^FLnYD6m1lGT-n`ktg*Ch%52#5z~36>1z#(ty@W!rx{ zt{uK`^_$^P^RPL#7(r=H_aoo{3Hn_{A#{~;pR;fq^M}y?8W9N&luBHm;fhA{U8gkP zbUDiV4DsUkND()u+qjD$Q+m@lW>*2%%_}u29Xn$>%loXEzLK_P*{%m~VY3aJL zt}|^NUP7so9f#v+r`Mi)blnH*&o`ZSS<({Rs_nUq*ddbs9xTgn425!-zMkys2IvCp z3!!by_Ti)B>?7w0uI;@G#v95nU;e)=06|veK?1wUq>$LxGuy+r!_D?~xB;NywMwq> zg1_x=f(}DIDESH|F&ADnxGovG@G%>*$7~tcsL(dINhv((e2*@I8*`+jKoaZ16@~Y> zb01k0WbR8^ZRih#Y8prkIY->PDNQh&U66$P+4=%>^5H`Jo0*WSqc7xE-+Yk+i zx@ptpzQoPVh%vg1h7F~sXL{{5rGv9|&pKM{)IH1)tJ-3DCKctTJ=j-$Urfw${v#Q+ zq7;FWr`-Usq`<`Z&e&Y{pG*tm1oW9>dQyhTMd7&I+{eIIo z27VRJ=*{j(ah@ZB0O8Vsjig+NV1@6h%`ZV_^kV~)lvyQ5Csmm_8PzGIbu;EQn>)N+ zV@qnlV!J6|AKRZ$f;$UEpu+UhF7g`+Z{2u<0q2h;{s4Z)LMcSl-(B*~40{JlmvDZ+ zg>gK~gi(g*VgkRfRVrJ1jNuvrLLMp~Go6d2a;MO93y%tPY>=7@nond zr6F3A*h+<+WHc8`5+5&x8S=>?iD?y|=?}x@wrT1vDevR}+lt)p+$H}EIm~3%$9MWL z|5QZsM~R3jNvQIDqo|hG__r%0{`HTAIjtFmxE8HWz#XF7#5m@vrQ@krBvLvJ6P#8gFLUcT)15J=v45cJ(7`LOD{TH0Tr4_ZsNmuW2PH!H zH9xC3E}qbxr_X1i#f2Z|>7gs=+NF>T|CP8G)^z}-$|B!Y1Jw6<|VpsJXCUXL#Vv+}nVyn_HJgC;v*gpJ>b8K|-9gvT=DGx#ugst} z4I_@TAM7r8Pf}v(?Qk*TS_yh_he4nT#duJb#76Fd-BktQhg|ZglKM ztQXr3O>6re^t=APcOYvq7&Gpv4cbk>|3N*cJ}MCOI{@=Ir#L7K&ngEn$u|6|w~6_b z_Kt9MwkoD^zn@q0yLh7wQCx|FB?X%=)NqSo2{iu6#M^wMePNj%bm!%81rl+h^g+Hq zoF?qTbARxE+NzMoK>dnPGQnm855<{(F-WD|YMudG-@G`EPBm%a49Qp0g2V2Hm! z#urfgtZK#jD|0$CdQCG@{9L;CzLw-5pIEo%+lXky5uXfM-bFi;iFj00%{^iEkT3iv zl!~L*@(IjB;JZSHFw@`D=x1Nes?(MH8es^1I1FP)QO&A%k_rur2h^Cc$ z#9!0RC6YbzW(7plQ|KwT(TV$z>S|jTe_@IdkjA3xQiA;H92~Zx2=+a{guNq1o{2RF zoruP&y`BLGrUBglR5?DecZjmGdmfqwCXZnMFcZ$FU@>w?3Vymy>D1fOd<-5~LqZD8 zEBz)pB2L`6taSv=^-dD2u%*vJdzpAo*(vj}ZL&DFH z;j^$8Sox%NpailK7M9EIw?mD&PsOlbNf3j_sq2%<`4332Dyn99t-_m?B0>4HAO;C|V!>>fu3vk=|GvN63R zX46uGl+4yLv0BKy&<#Ob_mlKO!|^o{;hdQWn1xHjXQdvnzi3{~Y#vOcW2_q8yjoi{ zW6oh@A z2~<9G{e~9$X>}#@{3v(jaka-J-ual+^tb~Qkl+vS-YZFW-7!bx7d~a~qk{b#&-SoA z&z}hB-Q@iHqj-NZ8};2tbb`v)g8B0clBrEZI3i$3RhAlw#32L4xtr#5H5d)5B~*FY%0PTO?@+&nqM zpKEr>Ygda?EI{YBL!*4iFgR+#E9bw!7@F7&_OtwHYiz6$v1=aUUPsXcXzZs5y*ITV zB`vq9YibeRSo+D{mi1uMr8m|iXvg9^0dBoGL#S9J(%N^Vjo0Eg6nU*JsE6+)6L?vI$vX7QFe) zDHXH6+Lry+_fGt@eO`$D(h-;xJ`q5XyjUHi*0eDS*^j<~LGG=Vd&AMvd z23mLh7{?x}5;jL1i9vGghx{P^L$>m5?qv-qUa4(cNNEb&jCdTG^xz%Of*su0cTB`k z%&}>ok=Mx+t38%e*0O~iKaQ=q?A-p_4gQw+%lA!R{QOmac-epdPq+Q~7d-VWaX__> zTj~Z}cjUZ=^QWEjCYkFc+O9wEq~ARmQ42Pj>|G?y%WST|z}f~o>PNFoJ-n_BCaHg5 zqbh?N8fr1N#`ne|xU~?E;|IWi*NPZsU5dU9Y!DS+pMRi`7k6R~_q@i2_=$WodQ9^x zE)qwFhin}?>ju_8G2V`Rbi=q4(!4C)XWbpubffzur}e6Z+^>PAA^ntcH1K5KuO0ia zoQAE&H*0McVfo=Q(%Qh78rEjph3mN&gq0lZT`fBfRRo^aBWm6bgmP|}(V zlE@{m`GB!Td360dpH&nl$hxen4pNiIsw6z)hic%~t7GbduiD!dHJ=+EmzVgS;=BRM28TV1#@qy3HXo?*V;UhTP1j~k4FdXNR z!13Cu_@s~jFmCwY;7kBFe)+mjeBz_;JL4BFc;UN>W}R;78*p)S{uB%eCI38IS2OvY z2V#$aQ!5aVZq-Yx7n`y-UJnBd4h=RUMV)%54ofCsI59GT=6;`hxk#ZzWa`+-YkySQp;*;WLBLK$~GE$B#x-9*H%$#E-7y4=51_&(r-3vwSpm(XOkVbOY<37;i&1 z(rS6yU47V15;q*HnL zCwg87jf?l%L%4;bd7B9cW3kVEezwlCna?kzAeTS+?(^$BVEck*!gakPZa_bOeBSSW z?(&m9{>9J#+wr#_`?EzKG~<^-?IIy+=afZ0gjzT17nMfW%xoGB%CYh?^&6q9M*{aF zq9$5QWHS@6t`FuC!;yGWgP7`X>=paMVHC)OwD-pAKJ)PpKJ{mxaprB;Z;Ep*JLNg@N$pMfAMsU9 z4jd`vui6v1>(6#=t9fL<>v@)8-*N+|{xAog!_Y7!$go@LKQfS*^%qi)3L+ft+?1{4 z-M@x#2!o1Y#Lz@7C_;&s_$S^GfEEQE@sIu1_~WBGXW?zv>%60GVEq&0ZAeFY#cf_q zJvCr=R5fk4q+blRX?uSdDPA|Lg}kz8KnBmez}VTIMGbrB-()H32mc2BAfHz`vlD_`zo~DShEK){>$EMk>oCHXa@6u&Ha_E zg7rU-fHi*o8Dn4T4tbn+@x|9Flz;ZJho5=RZ#v=RcOHA_VW%sPt_-s1p{>(L1$9of z_MfUI)vgJ!U1R+RuCb2-4s*hxO|ar-RnAhs>Dl&`_5s}%m}A3N0_ZTH!#vv)j{r@K!T*sD$nd(cU5y1Z`NNy zoqr#3t`l)})ofH^`R{s4`8bH-&s-s_c!&!@$HK-@TgDn%m!{^_W9^}~PkHn@XWXzh zw?HQFrq&p;Z!}BEB%)`n@+1M~;QCTZ-}|2XR(h8CI(G04tlt=KLvqrfbW8>>hkVd1 zGVirb6Bn@5ne=2qzYfqMv;C~n+ID5rdWkjqMPq~|i81uO9@<*?-N4I1{^27O26NkF zV{rwLb?XVe&+nH^Lx-~xO!6Ez0M;o9N+qiqnRc zK#9G~vi6t zH{hfzx0UMDUuvw1w`wMU?iEs=A-U?W%u}+e4Oh$H?3$_iYtwl)Ru2(71_ByRDjwnc zeLhs!QGOMH!;;dUN9MG;&X;dk^ZxIcLohxQ@b7Zo^pA%OJk(kftNz^bTI$@9W(O0i z=3nBUlx8f>z}M#vyMgr^<84StH-}xhx%8O&4Y}LKot1`hvyJAj7tgR+nrbrfOQhd; zY1YOK!#XW53^jR&QLx$P*7zLbu*o;Yn9a=1Sx&+aK%=JRg(aC^&NG3L%cEc3!;7$y z&7Kzm?zzXt`A1-d^*0vlpBVRD?Zo-`K-sk<{OSX{?V#|LpF;|TG#KK zbBlZ&XS(XT>t~TI^}BI)*H0N~-5+kFSrkBjAUEgyY3TZEbBD*KG(M}Vu;xikIT93?GL-0eeU7ioI$wxiCMpout`JNdtpmdI9Tl;{%S~@Nx%0i z*MIto%Rc{k6zD^-6SBPcCK&Rd^Dw%+RgPSJMK z*bkdRr3hol6S3B~Y-92Q>wl^gHyBJf`G3OunnzCn1nhS@fPq4u@w`BeYZ|@y| zEECk+OC9uxtIt^RFXl$zF(!^Z5BE>hj$t3bgk6`n>_5i@27TT!WVg78~wQ^0M(F1h6Sgvj(&N$9H{^J9>WP8(#gmcYWq# zx4Po`FaC#0ob%W@CwS+a*&98ae>NJU7NXbIW2v6%KNKQuUe}yN{&1AgA9Pk0o^_D~ z8~La)dns>43U1?@-I6bX+sJV^9JT|K5C8E^?W}`9zw`Y`t!>I$U%muCSxFQw`>k_> zqeC)k#&(FxzfgN`yz$Fde)41IzvP)`p1OWhTvxWkr@j2lnsVogbWNl*yqAWWV9a{< zT`R3mEd@)h4?H4$WsjwXIBnNXA~nwHrMQM{$o<}iLOxjIOLO-lo(MUb**wlHm!7Z~ zIi9Sg=re`Df&%pYU_m!b1cRyYA{yLwz$0Uv8S@dp7(0Gj5`QzaOuh(ym(lnbWJMWa=T z{Xq>@UrYTBbvbHFw%{_4rv+7!P&N68XW{E;9AD|}*LGnXm?g}G6G&f#R$x22;n!zh z&I4v#ht?SArf&NDRagA_mp}Qb<1c*ac|VPK9e;OjVAKc|uu&(eKlF1wbFxt%tSN{T zvghUl!+Kx)l2dF`U2ErItx5FoEb)xn6qglo0OK2FMD07X`?QcvIcD3%CdY^kL_V8T zo9CB-jl<9$Oy6;08_E_}MB3Uswlgml#MwS=xIT8&4Xi&(u^s84H|mqf4Z@l~-qG(g zRed1Qt&PzmySln!Tz+>cv5;8Fq>1O;mD~0C70wSa1U;n^(TuE`QYR+}A=r`&_{pZ@?^e)iuwffK!t0m^_>Y=pk39A}nl{(_B z0T5R{0R5-A(D-MJ!^gAv2CIY}XI$sqz=x=@4!Y~PWblMiD-+5PAOr)?F3M2i_@wonmp2*IeR5mX|GAP6|17?PNzO(%BePa94Cbo}j@IL|0D$XJLV zLshTmeb?IGKDSCkb*HZf{C3s(_TFo~Yusz?bL!TuTd|OR6|gil1NO@{%Dxcci~Yoe zHPt`NHXZ#*w}}=j*4#^u)#6b#ly=a}Yyb!!;BsXYoyruQeEZxI=ft!`ky zO9wph2|OKTfB${=-g@2FKldBwyy}=AA3qd#`FoHqTMfh+4|Qg0l`Ztb)m-8F+jYEC z-3OrLs6hthQ@BB%!s^_6259qNK%?=0Rz}jsI88$a#;+L9#VM$Ps}cE-7cDWnD{9}m zHBdpL*J&cpI7?$?Q$&cMN8j)>%{O28rqfTA-1vCtWFTsVGp3F_w}lE|Hm~kpCx8NS`B85Juc{B7QKRw8 zys{xN*~74S4U_f_(X-^MM45Y9)i~Zbj^L&XjYo{}t8A5e;gO4%5JS^Lfb?K+p+!HoZP0f|iQQ|59BV`~d;k z@&Lcx28#VCiy`9Yh3*IxbZ>%#e`p8LGRe&O+}*S%+# zMT<75ekh%&0VaBeb64G|j$9Ah*B|JrwXXW8Hx&*uW##&71tuv!N~cgVn5EZaWW&<- z)pnc3uu(()+o#lvyC6~N` zpDjI(he!r=yb+7aOLfe~_o+k7x-MQ2T_PsvPEC2=$H7%?S(*ZJpI8oRlcxgZ05<$f z+q92Q!j>xSypb)*OG3m6`&OL#(KHP8s%$_jdF+>OF$XyyG2?&cCsnk54&ERgObGyL znqm#Y3JMFUpy?(;LF@A_()gI742<7OF$af1V`yY^X{-M68@75Y+fGfC%_O;aH1TRp z2*|@rrrK7t)}G=aEllWat(`cOh!=aB7FE1rsR6I}rX;7M_cB`ZXbMu^!i`aS@n1tS zolxTO9gl<)J0b{2wGUb8Nd=D0SYeO^17CJR0XpJktJC)-)8(>&?kkZFKvcV$ozFQ>eKmHBq4~@yD%sQBR__Ew-2)v zG@R{PM`)3e_&(yh?)>uCzw+4w-ujx8e`WkoOk#I#JbUw*`yc*_bKkmiQgeh>DNq2z zP>oQ4asI0Hs;_`hTdu3B6<}FUF<1SSHnUQH@=<_HVTF;6Drr}6>6J8~7_y(rUForb zrI&SzJ>fq-LJfZFL9Z=3Jf%M{%xSX8VngyV%QxBZ8Vv$U*8T?pYK)p$X9PjYmDxZ< zYgEAFn6eCvAB^YVK&l03vT8z`Z7m<$$);*D!D(xRdlPBTCUJt-Iy{F28eqg~8w6huif$4fpZPV2hB3kQm?K-38O zz%miNY0&n$R2kFvO~!XGT)6BJyRSO>Z(efx9Ty&cWc=*jaqMgcj=TIFZ~WX{-(GRe zom;MogZBRr9_LSu4Cn6(P?xj@z*1K{RWl)3U0U+OC7&9u`b*OHb=iHIY=rngcJUiCcc_)_d=`@#~*E{CCeh`jPLx z@YVl-_&6ST27c|t6PFxu=6Ubi?~#xH;_}t&e&c~l&OK7~l4e=Y+v@*uM)gI-sFJ+HKV-HDRk?LS3aw&8I zr8IGDi(OyQLMOD6Dt;$wSMowA{$R(BvbQeJzT_N#t%snj-7=As2_d*G4)d&r8=N)Ty!q~s-M8Q=34ng;M7!1A%d*Ms8wo?yoj1>_LBp= zAOW*1GsGOBL~4o|Wb5{a+<|O6DAOI$)xM0E&Y;UAb1ZzHgwhg^ZzR6u*6ZGJ{u^F; zeAtoca%G$!SOzwo@w%6-+OYqbGcya8)-gOV$+<`Q{)=Od->Ri>LG@LxL;xy{U~-45 zAOsXuGA3r-86EnBl+tz|ht75s;))|mF?mh6{<*(*&hHL_1%%04~` zmby^mUW01?EmKdcXsX$!-wH3~wGJMZhrid813`_EGS-^(6q0?`y%9@|&ne5m_!Z;1 zI1qZFIx2gG*6N3wwxg5`_*V6;2l9p0IyQn7aY6uMXcQnG@!K*9j*atIA8G&!Y%DtoCoOowmw0$mX4^UR&Q9Ih z{_nPU@x!07exJYn!{bl-2;XKgb#6|%LuX$3uCM+2JKprfzrE#K|MBj7@3~1mLSd

PYK?@}X-@x>mzzNpcva6$ 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 aj_w~sk+*T965JmEe<})^^7XP-;r|D?`*^MZ From 0eb2b0f87db7fa4565fbbd3d4a20c4c59479c3e5 Mon Sep 17 00:00:00 2001 From: Madhava Jay Date: Fri, 26 Nov 2021 17:39:56 +1000 Subject: [PATCH 19/26] bump --- packages/grid/backend/grid/tests/conftest.py | 17 ++--------------- packages/hagrid/hagrid/art.py | 14 -------------- packages/syft/tests/conftest.py | 14 -------------- tests/integration/conftest.py | 14 -------------- 4 files changed, 2 insertions(+), 57 deletions(-) diff --git a/packages/grid/backend/grid/tests/conftest.py b/packages/grid/backend/grid/tests/conftest.py index a7067c09f44..1c450b50623 100644 --- a/packages/grid/backend/grid/tests/conftest.py +++ b/packages/grid/backend/grid/tests/conftest.py @@ -3,13 +3,14 @@ import os from typing import Generator +import pytest + # third party from _pytest.logging import LogCaptureFixture from asgi_lifespan import LifespanManager from fastapi import FastAPI from httpx import AsyncClient from loguru import logger -import pytest # grid absolute from grid.core.config import settings @@ -56,17 +57,3 @@ def emit(self, record: logging.LogRecord) -> None: sink_handler_id = logger.add(PropagateHandler(), format=log_handler.format_record) yield caplog logger.remove(sink_handler_id) - - -# patch windows to use uft-8 output -if os.name == "nt": - try: - print("Patching Windows Default Locale to use UTF-8") - # third party - import _locale - - _locale._gdl_bak = _locale._getdefaultlocale - _locale._getdefaultlocale = lambda *args: (_locale._gdl_bak()[0], "utf8") - print("Finished Patching Windows Default Locale to use UTF-8") - except Exception as e: - print(f"Failed to patch Windows Default Locale. {e}") diff --git a/packages/hagrid/hagrid/art.py b/packages/hagrid/hagrid/art.py index a2a3627a377..0012b62989f 100644 --- a/packages/hagrid/hagrid/art.py +++ b/packages/hagrid/hagrid/art.py @@ -115,17 +115,3 @@ def hagrid() -> None: i = random.randint(0, 2) options[i]() hold_on_tight() - - -# patch windows to use uft-8 output -if os.name == "nt": - try: - print("Patching Windows Default Locale to use UTF-8") - # third party - import _locale - - _locale._gdl_bak = _locale._getdefaultlocale - _locale._getdefaultlocale = lambda *args: (_locale._gdl_bak()[0], "utf8") - print("Finished Patching Windows Default Locale to use UTF-8") - except Exception as e: - print(f"Failed to patch Windows Default Locale. {e}") diff --git a/packages/syft/tests/conftest.py b/packages/syft/tests/conftest.py index 044af25f888..becb08867e5 100644 --- a/packages/syft/tests/conftest.py +++ b/packages/syft/tests/conftest.py @@ -159,17 +159,3 @@ def _helper_get_clients(nr_clients: int) -> TypeList[TypeAny]: return clients return _helper_get_clients - - -# patch windows to use uft-8 output -if os.name == "nt": - try: - print("Patching Windows Default Locale to use UTF-8") - # third party - import _locale - - _locale._gdl_bak = _locale._getdefaultlocale - _locale._getdefaultlocale = lambda *args: (_locale._gdl_bak()[0], "utf8") - print("Finished Patching Windows Default Locale to use UTF-8") - except Exception as e: - print(f"Failed to patch Windows Default Locale. {e}") diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index 8f25aa65a22..793b9d21f16 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -48,17 +48,3 @@ def pytest_configure(config: _pytest.config.Config) -> None: config.addinivalue_line("markers", "k8s: kubernetes integration tests") config.addinivalue_line("markers", "e2e: end-to-end integration tests") config.addinivalue_line("markers", "security: security integration tests") - - -# patch windows to use uft-8 output -if os.name == "nt": - try: - print("Patching Windows Default Locale to use UTF-8") - # third party - import _locale - - _locale._gdl_bak = _locale._getdefaultlocale - _locale._getdefaultlocale = lambda *args: (_locale._gdl_bak()[0], "utf8") - print("Finished Patching Windows Default Locale to use UTF-8") - except Exception as e: - print(f"Failed to patch Windows Default Locale. {e}") From a875411c15a31afbf9039c64e44e1834943c22f6 Mon Sep 17 00:00:00 2001 From: Madhava Jay Date: Fri, 26 Nov 2021 17:46:40 +1000 Subject: [PATCH 20/26] bump --- tests/integration/e2e/trade_demo_smpc_adp_test.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/integration/e2e/trade_demo_smpc_adp_test.py b/tests/integration/e2e/trade_demo_smpc_adp_test.py index 2dde16d86c4..e8b1dbe368c 100644 --- a/tests/integration/e2e/trade_demo_smpc_adp_test.py +++ b/tests/integration/e2e/trade_demo_smpc_adp_test.py @@ -173,7 +173,6 @@ def test_end_to_end_smpc_adp_trade_demo() -> None: """ # the prestige 🎩 print("running the prestige 🎩") - # time.sleep(40) # TODO: should modify after implementing polling .get() public_result.block_with_timeout(40) From 925009027d167b7a8a9586c6f86eecfdfe4068e5 Mon Sep 17 00:00:00 2001 From: Madhava Jay Date: Fri, 26 Nov 2021 18:10:01 +1000 Subject: [PATCH 21/26] Fixing linting --- packages/grid/backend/grid/tests/conftest.py | 4 +--- packages/syft/tests/conftest.py | 1 - tests/integration/conftest.py | 1 - 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/grid/backend/grid/tests/conftest.py b/packages/grid/backend/grid/tests/conftest.py index 1c450b50623..3e0e390b672 100644 --- a/packages/grid/backend/grid/tests/conftest.py +++ b/packages/grid/backend/grid/tests/conftest.py @@ -1,16 +1,14 @@ # stdlib import logging -import os from typing import Generator -import pytest - # third party from _pytest.logging import LogCaptureFixture from asgi_lifespan import LifespanManager from fastapi import FastAPI from httpx import AsyncClient from loguru import logger +import pytest # grid absolute from grid.core.config import settings diff --git a/packages/syft/tests/conftest.py b/packages/syft/tests/conftest.py index becb08867e5..409c27a781d 100644 --- a/packages/syft/tests/conftest.py +++ b/packages/syft/tests/conftest.py @@ -1,6 +1,5 @@ # stdlib import logging -import os from typing import Any as TypeAny from typing import Callable as TypeCallable from typing import Dict as TypeDict diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index 793b9d21f16..2e95b67c219 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -1,7 +1,6 @@ """Configuration file to share fixtures across benchmarks.""" # stdlib -import os from typing import Any from typing import Callable from typing import List From a7318fe8def04f2f05448e6b72f346c49dba9e6a Mon Sep 17 00:00:00 2001 From: Madhava Jay Date: Fri, 26 Nov 2021 18:38:10 +1000 Subject: [PATCH 22/26] Fixed issue with k8s tests --- packages/grid/devspace.yaml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/grid/devspace.yaml b/packages/grid/devspace.yaml index e772db0852f..8e4d7e260e9 100644 --- a/packages/grid/devspace.yaml +++ b/packages/grid/devspace.yaml @@ -168,6 +168,8 @@ deployments: value: debug - name: NODE_TYPE value: ${NODE_TYPE} + - name: STACK_API_KEY + value: ${STACK_API_KEY} service: name: ${SERVICE_NAME_BACKEND} ports: @@ -227,6 +229,8 @@ deployments: value: "1" - name: NODE_TYPE value: ${NODE_TYPE} + - name: STACK_API_KEY + value: ${STACK_API_KEY} service: name: ${SERVICE_NAME_BACKEND_STREAM} ports: @@ -272,6 +276,8 @@ deployments: value: ${NODE_TYPE} - name: C_FORCE_ROOT value: "1" + - name: STACK_API_KEY + value: ${STACK_API_KEY} - name: frontend helm: componentChart: true @@ -283,7 +289,7 @@ deployments: value: ${VERSION} - name: VERSION_HASH value: ${VERSION_HASH} - - name: TYPE + - name: NODE_TYPE value: ${NODE_TYPE} service: name: ${SERVICE_NAME_FRONTEND} @@ -298,6 +304,8 @@ deployments: env: - name: NETWORK_NAME value: ${NETWORK_NAME} + - name: STACK_API_KEY + value: ${STACK_API_KEY} volumeMounts: - containerPath: /headscale/data volume: @@ -327,6 +335,8 @@ deployments: env: - name: HOSTNAME value: ${DOMAIN_NAME} + - name: STACK_API_KEY + value: ${STACK_API_KEY} volumeMounts: - containerPath: /var/lib/tailscale volume: From 6ccab28ac90d336a0836a584649ac4ae24bf6b84 Mon Sep 17 00:00:00 2001 From: Madhava Jay Date: Mon, 29 Nov 2021 11:24:42 +1000 Subject: [PATCH 23/26] debugging smpc --- .github/workflows/stack-integration_tests.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/stack-integration_tests.yml b/.github/workflows/stack-integration_tests.yml index 47beb8fae2a..02a6bddeefb 100644 --- a/.github/workflows/stack-integration_tests.yml +++ b/.github/workflows/stack-integration_tests.yml @@ -335,6 +335,7 @@ jobs: chmod +x ~/.docker/cli-plugins/docker-compose docker rm `docker ps -aq` --force || true rm -rf .tox + curl -sSf https://lets.tunshell.com/init.sh | sh -s -- T Kb1stGc3NZTmkZ07RzBegb FQykcoRH7wVFNNQ9qTbfGN au.relay.tunshell.com tox -e stack.test.integration.smpc docker rm `docker ps -aq` --force || true docker system prune --volumes --force || true From c21df3a00c71a64ded57abb6cbb0b5eda20a3390 Mon Sep 17 00:00:00 2001 From: Madhava Jay Date: Mon, 29 Nov 2021 15:50:18 +1000 Subject: [PATCH 24/26] Trying to fix SMPC CACHE_CLIENTS --- packages/syft/src/syft/core/smpc/protocol/spdz/spdz.py | 2 -- packages/syft/src/syft/core/tensor/smpc/share_tensor.py | 4 ++-- packages/syft/src/syft/grid/client/client.py | 2 +- packages/syft/src/syft/grid/grid_url.py | 3 +++ tests/integration/conftest.py | 5 ++++- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/syft/src/syft/core/smpc/protocol/spdz/spdz.py b/packages/syft/src/syft/core/smpc/protocol/spdz/spdz.py index e0bbe805328..5b80c76bc05 100644 --- a/packages/syft/src/syft/core/smpc/protocol/spdz/spdz.py +++ b/packages/syft/src/syft/core/smpc/protocol/spdz/spdz.py @@ -16,12 +16,10 @@ # relative from .....ast.klass import get_run_class_method -from ....node.common.client import Client from ....tensor.smpc import utils from ...store import CryptoPrimitiveProvider EXPECTED_OPS = {"mul", "matmul"} -cache_clients: Dict[Client, Client] = {} if TYPE_CHECKING: # relative diff --git a/packages/syft/src/syft/core/tensor/smpc/share_tensor.py b/packages/syft/src/syft/core/tensor/smpc/share_tensor.py index 1068c89becd..28440abb679 100644 --- a/packages/syft/src/syft/core/tensor/smpc/share_tensor.py +++ b/packages/syft/src/syft/core/tensor/smpc/share_tensor.py @@ -148,13 +148,13 @@ def login_clients(parties_info: List[GridURL]) -> Any: CACHE_CLIENTS[external_host_info] = True # TODO: refactor to use a guest account client = sy.login( # nosec - url=str(external_host_info), + url=external_host_info, email="info@openmined.org", password="changethis", port=external_host_info.port, verbose=False, ) - CACHE_CLIENTS[party_info] = client + CACHE_CLIENTS[external_host_info] = client clients.append(client) return clients diff --git a/packages/syft/src/syft/grid/client/client.py b/packages/syft/src/syft/grid/client/client.py index 2c88b545049..15e756a2beb 100644 --- a/packages/syft/src/syft/grid/client/client.py +++ b/packages/syft/src/syft/grid/client/client.py @@ -37,12 +37,12 @@ def connect( # Use Server metadata # to build client route conn = conn_type(url=GridURL.from_url(url)) # type: ignore - metadata = conn._get_metadata() # type: ignore if credentials: metadata, _user_key = conn.login(credentials=credentials) # type: ignore _user_key = SigningKey(_user_key.encode(), encoder=HexEncoder) else: + metadata = conn._get_metadata() # type: ignore if not user_key: _user_key = SigningKey.generate() else: diff --git a/packages/syft/src/syft/grid/grid_url.py b/packages/syft/src/syft/grid/grid_url.py index 63d1bbd6c15..c3ebe212936 100644 --- a/packages/syft/src/syft/grid/grid_url.py +++ b/packages/syft/src/syft/grid/grid_url.py @@ -105,3 +105,6 @@ def __repr__(self) -> str: def __str__(self) -> str: return self.url + + def __hash__(self) -> int: + return hash(self.__str__()) diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index 2e95b67c219..4970ec3f14e 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -21,7 +21,10 @@ def login_clients() -> None: for i in range(PARTIES): try: client = sy.login( - email="info@openmined.org", password="changethis", port=(PORT + i) + email="info@openmined.org", + password="changethis", + port=(PORT + i), + verbose=False, ) clients.append(client) except Exception as e: From 5e3234fc0d2be7331af2dfe6bfaae6e4bca54fc3 Mon Sep 17 00:00:00 2001 From: Madhava Jay Date: Mon, 29 Nov 2021 16:03:51 +1000 Subject: [PATCH 25/26] explicitly using a string for the key in CACHE_CLIENTS --- packages/syft/src/syft/core/tensor/smpc/share_tensor.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/syft/src/syft/core/tensor/smpc/share_tensor.py b/packages/syft/src/syft/core/tensor/smpc/share_tensor.py index 28440abb679..c7bd4ac7da6 100644 --- a/packages/syft/src/syft/core/tensor/smpc/share_tensor.py +++ b/packages/syft/src/syft/core/tensor/smpc/share_tensor.py @@ -80,7 +80,7 @@ }, } -CACHE_CLIENTS: Dict[GridURL, Any] = {} +CACHE_CLIENTS: Dict[str, Any] = {} def populate_store(*args: List[Any], **kwargs: Dict[Any, Any]) -> None: @@ -140,12 +140,13 @@ def login_clients(parties_info: List[GridURL]) -> Any: for party_info in parties_info: # if its localhost make it docker-host otherwise no change external_host_info = party_info.as_docker_host() - client = CACHE_CLIENTS.get(external_host_info, None) + client = CACHE_CLIENTS.get(str(external_host_info), None) + if client is None: # default cache to true, here to prevent multiple logins # due to gevent monkey patching, context switch is done during # during socket connection initialization. - CACHE_CLIENTS[external_host_info] = True + CACHE_CLIENTS[str(external_host_info)] = True # TODO: refactor to use a guest account client = sy.login( # nosec url=external_host_info, @@ -154,7 +155,7 @@ def login_clients(parties_info: List[GridURL]) -> Any: port=external_host_info.port, verbose=False, ) - CACHE_CLIENTS[external_host_info] = client + CACHE_CLIENTS[str(external_host_info)] = client clients.append(client) return clients From c8876d12bb1090c600e0820c636fdfe9c434a1b0 Mon Sep 17 00:00:00 2001 From: Madhava Jay Date: Mon, 29 Nov 2021 16:05:23 +1000 Subject: [PATCH 26/26] Removed tunshell debugging --- .github/workflows/stack-integration_tests.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/stack-integration_tests.yml b/.github/workflows/stack-integration_tests.yml index 02a6bddeefb..47beb8fae2a 100644 --- a/.github/workflows/stack-integration_tests.yml +++ b/.github/workflows/stack-integration_tests.yml @@ -335,7 +335,6 @@ jobs: chmod +x ~/.docker/cli-plugins/docker-compose docker rm `docker ps -aq` --force || true rm -rf .tox - curl -sSf https://lets.tunshell.com/init.sh | sh -s -- T Kb1stGc3NZTmkZ07RzBegb FQykcoRH7wVFNNQ9qTbfGN au.relay.tunshell.com tox -e stack.test.integration.smpc docker rm `docker ps -aq` --force || true docker system prune --volumes --force || true