From 9e757b35856d370d069f262f6049e2a2c746e765 Mon Sep 17 00:00:00 2001 From: Jochen Date: Sun, 20 Feb 2022 18:05:17 +0100 Subject: [PATCH 1/8] initial changes --- .../_static/img/footprint_screenshot.jpeg | Bin 0 -> 139388 bytes docs/source/configuration.md | 35 ++++-- docs/source/contributing.md | 43 ------- docs/source/data.md | 8 +- docs/source/deployment_overview.md | 33 ------ docs/source/dev_setup.md | 64 ++++------- docs/source/for_mapswipe_managers.md | 5 +- docs/source/index.rst | 26 +++-- docs/source/project_type-footprint.md | 108 ++++++++++++------ docs/source/project_type.md | 42 ++++--- docs/source/testing.md | 45 ++------ docs/source/testing_and_travis.md | 20 ---- docs/source/updating.md | 16 --- 13 files changed, 179 insertions(+), 266 deletions(-) create mode 100644 docs/source/_static/img/footprint_screenshot.jpeg delete mode 100644 docs/source/contributing.md delete mode 100644 docs/source/deployment_overview.md delete mode 100644 docs/source/testing_and_travis.md delete mode 100644 docs/source/updating.md diff --git a/docs/source/_static/img/footprint_screenshot.jpeg b/docs/source/_static/img/footprint_screenshot.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..684894d2efa8be075784ee41074bda449420cb7e GIT binary patch literal 139388 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 mMn$dg5~ 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 Notes: When deploying using `docker` or `docker-compose` `POSTGRES_HOST` should have the value `postgres` and the Service Account Key (`serviceAccountKey.json`) should be copied to `mapswipe_workers/serviceAccountKey.json` so that during the build of the image the file can by copied by Docker. - ### Elaboration **Firebase**: MapSwipe Workers use the Firebase Python SDK and the Firebase REST API. Both require the database name (`FIREBASE_DB`) and the API-Key from the Firebase instance. The Firebase Python SDK does also need a Service Account Key. The path to this file is set in the `GOOGLE_APPLICATION_CREDENTIALS` environment variable. **Postgres**: MapSwipe Workers writes data to a Postgres database and generate files for the API based data in Postgres. +**OSMCha**: MapSwipe Workers enriches some Projects with data from OSM changelogs which are requested from OSMCha. Create an account, you will find you api key in your profile e.g. `Token 589adf125234a` + **Sentry (optional)**: MapSwipe workers use sentry to capture exceptions. You can find your project’s DSN in the “Client Keys” section of your “Project Settings” in Sentry. Check [Sentry's documentation](https://docs.sentry.io/error-reporting/configuration/?platform=python) for more information. **Slack (optional)**: The MapSwipe workers send messages to slack when a project has been created successfully, the project creation failed or an exception gets raised. refer to [Python slackclient's documentation](https://github.com/slackapi/python-slackclient) how to get a Slack Token. @@ -80,13 +86,26 @@ The Service Account Key (`serviceAccountKey.json`) should be saved to `postgres/ ## Manager Dashboard +Please refer to the official [documentation](https://firebase.google.com/docs/web/learn-more#config-object) if you set up your own firebase. +Otherwise you can request guidance on the settings from the mapswipe team. The structure of your app.js should look like below. + `manager_dashboard/manager_dashboard/js/app.js` ``` -TODO +// Your web app's Firebase configuration +var firebaseConfig = { + apiKey: "", + authDomain: "", + databaseURL: "", + projectId: "", + storageBucket: "", + messagingSenderId: "", + appId: "" +}; +// Initialize Firebase +firebase.initializeApp(firebaseConfig); ``` - ## NGINX `nginx/nginx.conf`: diff --git a/docs/source/contributing.md b/docs/source/contributing.md deleted file mode 100644 index 526d9b8bf..000000000 --- a/docs/source/contributing.md +++ /dev/null @@ -1,43 +0,0 @@ -# Contributing - -This document describes how to setup Python MapSwipe Workers locally without using the provided Dockerfile for development purposes. - - -## Feature Branch - -To contribute to the MapSwipe back-end please create dedicated feature branches based on the `dev` branch: - -```bash -git checkout dev -git checkout -b featureA -# Hack away ... -git commit -am 'Describe changes.' -git push -u origin featureA -# Create a Pull Request from feature branch into the dev branch on GitHub. -``` - -> Note: If a bug in production (master branch) needs fixing before a new versions of MapSwipe Workers gets released (merging dev into master branch), a hotfix branch should be created. In the hotfix branch the bug should be fixed and then merged with the master branch (and also dev). - - -## Style Guide - -This project uses [black](https://github.com/psf/black), [flake8](https://gitlab.com/pycqa/flake8) and [isort](https://github.com/PyCQA/isort) to achive a constisted style across the project. -The configuration of flake8 and isort is stored in `setup.cfg`. - -Use [pre-commit](https://pre-commit.com/) to run `black` and `flake8` prior to any git commit. `pre-commit`, `black` and `flake8` should already be installed in your virtual environment since they are listed in `requirements.txt`. To setup pre-commit simply run: - -``` -pre-commit install -``` - -From now on `black`, `flake8` and `isort` should run automatically whenever `git commit` is executed. - -When running those tools manually please make sure the right version is used. The version can be looked up in `.pre-commit-config.yaml`. -To update to newer version please make sure to change version numbers in `.pre-commit-config.yaml`, `.travis.yml` and `requirements.txt`. - - -### Tips - -Ignore a hook: `SKIP=flake8 git commit -m "foo"` -Mark in code that flake8 should ignore the line: `print() # noqa` - diff --git a/docs/source/data.md b/docs/source/data.md index 700b9ba37..691385f21 100644 --- a/docs/source/data.md +++ b/docs/source/data.md @@ -31,7 +31,7 @@ Attributes: ## Aggregated Results -This gives you the unfiltered MapSwipe results. This is most suited if you want to apply some custom data processing with the MapSwipe data, e.g. select only specific tasks for machine learning. If you want to use MapSwipe data in the Tasking Manager you might look for the data explained below. +This gives you the unfiltered MapSwipe results. This is most suited if you want to apply some custom data processing with the MapSwipe data, e.g. select only specific tasks for machine learning. If you want to use MapSwipe data in the Tasking Manager you might look for the data described below. Files: - `aggregated_results_{project_id}.csv`, e.g. [agg\_results\_-M56eeMCZ5VeOHjJN4Bx.csv](https://apps.mapswipe.org/api/agg_results/agg_results_-M56eeMCZ5VeOHjJN4Bx.csv) @@ -51,11 +51,11 @@ Files: | 2_share | float | 2_count divived by total_count. This gives you the share of all users who marked as 2. | | 3_share | float | 3_count divived by total_count. This gives you the share of all users who marked as 3. | | agreement | float | This is defined as [Scott's Pi](https://en.wikipedia.org/wiki/Scott%27s_Pi) and gives you an understanding of inter-rater reliability. The value is 1.0 if all users agree, e.g. all users classify as "building". If users disagree this value will be lower. | - | geom | string | The geometry of this task as WKT geometry. | +| geom | string | The geometry of this task as WKT geometry. | - ## HOT Tasking Manager Geometries - This gives you filtered MapSwipe data ready to be imported to the HOT Tasking Manager. Currently, the geometries in this dataset consist of maximum 15 MapSwipe Tasks, where at least 35% of all users indicated the presence of a building by classifying as "yes" or "maybe". +## HOT Tasking Manager Geometries +This gives you filtered MapSwipe data ready to be imported to the HOT Tasking Manager. Currently, the geometries in this dataset consist of maximum 15 MapSwipe Tasks, where at least 35% of all users indicated the presence of a building by classifying as "yes" or "maybe". Files: - `hot_tm_{project_id}.geojson`, e.g. [hot\_tm\_-M56eeMCZ5VeOHjJN4Bx.geojson](https://apps.mapswipe.org/api/hot_tm/hot_tm_-M56eeMCZ5VeOHjJN4Bx.geojson) diff --git a/docs/source/deployment_overview.md b/docs/source/deployment_overview.md deleted file mode 100644 index db79edaf8..000000000 --- a/docs/source/deployment_overview.md +++ /dev/null @@ -1,33 +0,0 @@ -# Deployment Overview - -The MapSwipe Back-End is deployed using Docker. -Every part of the back-end has a Dockerfile. -All parts/ Dockerfiles come together in the docker-compose file. - -To setup the whole ecosystem of MapSwipe Workers it is easier to first make sure every part is configured and all keys are in place. - -MapSwipe utilizes a bunch of Google Cloud services: - -- [Firebase](https://firebase.google.com/) project with Realtime Database and Functions - - Create a project - - Create a database: `> Develop > Database > Create Database` -- [Google Cloud Storage](https://cloud.google.com/storage/) for backup of Postgres - -[Configuration](configuration.md) describes all needed configuration and credentials. - -[Installation](installation.md) describes step-by-step how to setup the backend for the first time. - - -## Continuous deployment using Ansible and Travis - -Travis is setup to automatically deploy a new version of MapSwipe Back-End to the server once it run successfully. -This is done by using Travis script deployment (https://docs.travis-ci.com/user/deployment/script/). Travis simply calls the `deploy.sh` script found at the root directory of MapSwipe Workers. -To be able to connect to the MapSwipe server the Travis instance uses an encrypted SSH private key (Which can be found in the directory `travis/`). - -In the `deploy.sh` script an Ansible Playbook is run (https://docs.ansible.com/ansible/latest/index.html). Ansible is an automation tool which utilizes a SSH connection (`ansible/ansible.cfg`) to run commands defined in the Playbook (`ansible/playbook.yml`) on hosts defined in the Inventory (`ansible/inventory.yml`). - -## Continuous Deployment with Github Actions -We use an encrypted service account key file. The file has been generated with this commands: - -`openssl enc -aes-256-cbc -e -p -nosalt -in=ci-mapswipe-firebase-adminsdk-80fzw-ebce84bd5b.json -out=ci-mapswipe-firebase-adminsdk-80fzw-ebce84bd5b.json.enc` - diff --git a/docs/source/dev_setup.md b/docs/source/dev_setup.md index 8af7f4cb5..0f18b04aa 100644 --- a/docs/source/dev_setup.md +++ b/docs/source/dev_setup.md @@ -1,6 +1,9 @@ # Development Setup -In this document some tips and workflows for development are loosely collected. Those are independent of the production setup using Docker-Compose. A working Firebase Project (Including Firebase Functions and Database Rules) is presupposed. Get in touch with the MapSwipe team (e.g. in Slack) to get access to an existing Firebase Instance for development purposes. +In this document some tips and workflows for development are loosely collected. +Those are independent of the production setup using Docker-Compose. +A working Firebase Project (Including Firebase Functions and Database Rules) is presupposed. +Get in touch with the MapSwipe team (e.g. in Slack) to get access to an existing Firebase Instance for development purposes. Check list: 1. Clone repo from GitHub. @@ -15,7 +18,8 @@ Check list: ### Requirements -MapSwipe Workers requires GDAL/OGR (`gdal-bin`) and GDAL for Python (`libgdal-dev`, `python-gdal`) to be installed. Furthermore, we rely on Docker to set up Postgres. +MapSwipe Workers requires GDAL/OGR (`gdal-bin`) and GDAL for Python (`libgdal-dev`, `python-gdal`) to be installed. +Furthermore, we rely on Docker to set up Postgres. ### Clone from GitHub @@ -48,16 +52,19 @@ mkdir --parents ~/.local/share/mapswipe_workers ### Service Account Key -The MapSwipe Workers requires a Service Account Key (`serviceAccountKey.json`) to access Firebase database. Request yours from the MapSwipe working group. +The MapSwipe Workers requires a Service Account Key (`serviceAccountKey.json`) to access Firebase database. +Request yours from the MapSwipe working group. -The path the Service Account Key is defined in the `GOOGLE_APPLICATION_CREDENTIALS` environment variable. +The path to the Service Account Key is defined in the `GOOGLE_APPLICATION_CREDENTIALS` environment variable. -You could also set up your own Firebase instance. However, this is not recommended. If you still want to do it, get your Service Account Key from Firebase from [Google Cloud Service Accounts](https://console.cloud.google.com/iam-admin/serviceaccounts). +You could also set up your own Firebase instance. However, this is not recommended. +If you still want to do it, get your Service Account Key from Firebase from [Google Cloud Service Accounts](https://console.cloud.google.com/iam-admin/serviceaccounts). ### Postgres -Setup a local Postgres instance for MapSwipe Workers using the Dockerfile provided for development purposes (`postgres/Dockerfile-dev`). The Dockerfile for production (`postgres/Dockerfile`) does need additional setup for build-in backup to Google Cloud Storage, which is not needed for local development. That is why a simplified Dockerfile for development is provided. +Setup a local Postgres instance for MapSwipe Workers using the Dockerfile provided for development purposes (`postgres/Dockerfile-dev`). +The Dockerfile for production (`postgres/Dockerfile`) does need additional setup for build-in backup to Google Cloud Storage, which is not needed for local development. That is why a simplified Dockerfile for development is provided. Make sure that the specified port is not in use already. If so, adjust the port (also in the `.env` file). ```bash @@ -90,7 +97,8 @@ mapswipe_workers --help ## Logging -Mapswipe workers logs are generated using the Python logging module of the standard library (See [Official docs](https://docs.python.org/3/library/logging.html) or this [Tutorial](https://realpython.com/python-logging/#the-logging-module). To use the logger object import the it from the `definitions` module: +Mapswipe workers logs are generated using the Python logging module of the standard library (See [Official docs](https://docs.python.org/3/library/logging.html) or this [Tutorial](https://realpython.com/python-logging/#the-logging-module). +To use the logger object import the it from the `definitions` module: ```python from mapswipe_workers.definitions import logger @@ -104,9 +112,11 @@ except Exception: logger.exception('Additional information.') ``` -Default logging level is Info. To change the logging level edit the logging configuration which is found in the module `definitions.py`. Logs are written to STDOUT and `~/.local/share/mapswipe_workers/mapswipe_workers.log`. +Default logging level is Info. To change the logging level edit the logging configuration which is found in the module `definitions.py`. +Logs are written to STDOUT and `~/.local/share/mapswipe_workers/mapswipe_workers.log`. -Per default logging of third-party packages is disabled. To change this edit the definition module (`mapswipe_workers/defintions.py`). Set the `disable_existing_loggers` parameter of the `logging.config.fileConfig()` function to `False`. +Per default logging of third-party packages is disabled. To change this edit the definition module (`mapswipe_workers/defintions.py`). +Set the `disable_existing_loggers` parameter of the `logging.config.fileConfig()` function to `False`. ## Firebase Functions @@ -128,38 +138,12 @@ Firebase functions are used to increment/decrement or calculate various attribut Those functions will be directly or indirectly triggered by incoming results from the MapSwipe App. -By using Firebase functions those attributes can be calculated in real-time and be accessed by users immediately. The use of those functions also reduces the data-transfer between the Firebase Realtime Database and MapSwipe Workers. - -On how to setup development environment and how to deploy functions to the Firebase instance please refer to the official [Guide on Cloud Function for Firebase](https://firebase.google.com/docs/functions/get-started). -For more information refer to the official [Reference on Cloud Function for Firebase](https://firebase.google.com/docs/reference/functions/). For example function take a look at this [GitHub repository](https://github.com/firebase/functions-samples). - - -## Travis Setup - -A Travis instance is used to build MapSwipe Workers and run tests. -There exists a Firebase instance only for Travis. -For the configuration of Travis following environment variables are used: - -- FIREBASE_API_KEY -- FIREBASE_DB -- FIREBASE_TOKEN -- POSTGRES_DB -- POSTGRES_HOST -- POSTGRES_PASSWORD -- POSTGRES_PASSWORD -- POSTGRES_USER -- WALG_GS_PREFIX: empty -- GOOGLE_APPLICATION_CREDENTIALS: mapswipe_workers/serviceAccountKey.json - -Those variables can be definied directly in the repository settings of Travis. For more inofmration refer to: https://docs.travis-ci.com/user/environment-variables/#defining-variables-in-repository-settings - -Additionaly a Service Account Key in JSON format is encrypted and added to the GitHub repository using the travis CLI. Once Travis runs it will decrypt the Service Account Key. Read more on that process in the Travis docs: https://docs.travis-ci.com/user/encrypting-files/ - -Once a Travis build succeeds Travis executes an Ansible Playbook to deploy MapSwipe Workers to an already installed and configured server. -For this to work an SSH-Key (with access rights to the server) is also encrypted and added to the GitHub repository. Travis will decrypt the key and Ansible will use it to execute commands defined in the Playbook on the server. - -All files encrypted for Travis (Service Account Key, SSH-Key) are stored in the `travis` directory. +By using Firebase functions those attributes can be calculated in real-time and be accessed by users immediately. +The use of those functions also reduces the data-transfer between the Firebase Realtime Database and MapSwipe Workers. +On how to setup the development environment and how to deploy functions to the Firebase instance please refer to the official [Guide on Cloud Function for Firebase](https://firebase.google.com/docs/functions/get-started). +For more information refer to the official [Reference on Cloud Function for Firebase](https://firebase.google.com/docs/reference/functions/). +For example function take a look at this [GitHub repository](https://github.com/firebase/functions-samples). ## Database Backup diff --git a/docs/source/for_mapswipe_managers.md b/docs/source/for_mapswipe_managers.md index 71c4fef74..14332a231 100644 --- a/docs/source/for_mapswipe_managers.md +++ b/docs/source/for_mapswipe_managers.md @@ -22,7 +22,10 @@ For BuildArea and ChangeDetection projects: For Footprint projects: * The GeoJSON file should contain only simple Polygons. We currently don't support complex Multipolygon geometries (e.g. [polygon with holes](https://developers.google.com/maps/documentation/javascript/examples/polygon-hole)) -Once you submit, the task should appear relatively quickly in the manager dashboard. You will receive a message in Slack. But it's still not active and not visible to the MapSwipe app users. You need to set the project status to `active` through the manager dashboard. Just click on the respective button. If the new project does not appear in the app after about 1 hour, check Slack for an error message, and see Troubleshooting below. +Once you submit, the task should appear relatively quickly in the manager dashboard. You will receive a message in Slack. +But it's still not active and not visible to the MapSwipe app users. +You need to set the project status to `active` through the manager dashboard. Just click on the respective button. +If the new project does not appear in the app after about 1 hour, check Slack for an error message, and see Troubleshooting below. ![Project Management](_static/img/manager_dashboard_manage_screenshot.png) diff --git a/docs/source/index.rst b/docs/source/index.rst index 5f267370d..494bf73ab 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -13,23 +13,33 @@ Welcome to MapSwipe Back-End's documentation! readme_link overview - contributing + data + dev_setup + testing + + +.. toctree:: + :maxdepth: 2 + :caption: Project Types: + + project_type + project_type-buildArea + project_type-changeDetection + project_type-footprint .. toctree:: :maxdepth: 2 - :caption: Using: + :caption: Usage: for_mapswipe_managers use_cases tile_size - data .. toctree:: :maxdepth: 2 :caption: Deployment: - deployment_overview configuration installation cli @@ -37,14 +47,6 @@ Welcome to MapSwipe Back-End's documentation! backup -.. toctree:: - :maxdepth: 2 - :caption: Development: - - dev_setup - testing_and_travis - - Indices and tables ================== diff --git a/docs/source/project_type-footprint.md b/docs/source/project_type-footprint.md index fad1b7940..a4aa290a1 100644 --- a/docs/source/project_type-footprint.md +++ b/docs/source/project_type-footprint.md @@ -5,49 +5,86 @@ ## Import structure +Footprint projects can be supplied with geometries in three seperate ways. +1. by specifying a HOT Tasking Manager Project ID and an object [filter](https://docs.ohsome.org/ohsome-api/v1/filter.html) +2. by specifying an url to the data (e.g. an [ohsomeAPI](https://docs.ohsome.org/ohsome-api/v1/) call) +3. by uploading an aoi and an object [filter](https://docs.ohsome.org/ohsome-api/v1/filter.html) + + +Import structure example for a footprint project which was initialized with an aoi and a filter: ```json { - "inputGeometries" : "https://heibox.uni-heidelberg.de/f/7a61e549b6/?dl=1", - "project" : { - "image" : "http://www.fragosus.com/test/Javita.jpg", - "lookFor" : "Buildings", - "name" : "Mapping to end FGM in North Monduli", - "projectDetails" : "Swipe slowly through the satellite imagery and mark anything that looks like it could be a building or village. This area has high levels of girls being subjected to FGM and child marriage.", - "verificationCount" : "3" + "createdBy" : "Sample Admin", + "filter" : "building=* and geometry:polygon", + "geometry" : { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Polygon", + "coordinates": [[[9.18032169342041, 48.790552471542284],[9.187102317810059,48.790552471542284],[9.187102317810059,48.79407236257656],[9.18032169342041,48.79407236257656],[9.18032169342041,48.790552471542284]]]} + } + ] }, + "groupSize" : 25, + "lookFor": "Buildings", + "image": "http://www.fragosus.com/test/Javita.jpg", + "projectDetails": "This is a template for a GeoJSON AOI project. We use Bing as the tile server.", + "inputType" : "aoi_file", + "name" : "Test Footprint GeoJSON AOI", + "projectTopic" : "Test Footprint GeoJSON AOI", "projectType" : 2, - "tileServer" : "bing" + "verificationNumber": 3, + "tileServer" : { + "credits" : "© 2019 Microsoft Corporation, Earthstar Geographics SIO", + "name" : "bing", + "url" : "", + "wmtsLayerName" : "" + } } -``` - -The `tileserver` attribute can have the following values: `bing`, `custom`. If a custom tileserver is chosen, you need to provide a `custom_tileserver_url` attribute which links to a TMS using x, y, z placeholders. - -Imports which have been imported successfully will have a `complete` attribute set to `true`. +``` +Examples for the other initialization options can be found in the mapswipe-backend repository at mapswipe_workers/tests/integration/fixtures/footprint/projectDrafts. ## Project structure +Project Structure example for a project which was created via HOT Tasking Manager Project ID. ```json { - "contributors" : 0, - "groupAverage" : 0, - "id" : 13564, - "image" : "http://www.fragosus.com/test/Javita.jpg", - "importKey" : "-LNOgRd0szBM2HJBX27B", - "info" : { - "api_key" : "your_bing_api_key", - "group_size" : 50, - "input_geometries_file" : "data/valid_geometries_13564.geojson", - "tileserver" : "bing" - }, + "TMId" : "11193", + "contributorCount" : 1, + "created" : "2021-12-10T18:05:26.090515Z", + "createdBy" : "X0zTSyvY0khDfRwc99aQfIjTEPK2", + "filter" : "building=* and geometry:polygon", + "groupMaxSize" : 0, + "groupSize" : 30, + "image" : "https://firebasestorage.googleapis.com/v0/b/dev-mapswipe.appspot.com/o/projectImages%2Fimage.jpeg?alt=media&token=c57beac5-6c6f-4d8f-85e5-9543e5bbeeab", + "inputType" : "TMId", "isFeatured" : false, "lookFor" : "Buildings", - "name" : "Mapping to end FGM in North Monduli", + "name" : "OSM Building Validation - Indonesia (1)\nAmerican Red Cross", "progress" : 0, - "projectDetails" : "Swipe slowly through the satellite imagery and mark anything that looks like it could be a building or village. This area has high levels of girls being subjected to FGM and child marriage.", + "projectDetails" : "The Red Cross Climate Centre, Indonesian Red Cross (Palang Merah Indonesia/PMI), IFRC, British Red Cross and Australian Red Cross are implementing a programme where the data contributed will be used by the Red Cross to assist in forecasting future disaster impacts, by knowing in advance what is likely to be impacted and its exposure and vulnerability. The information will help implementation of early action activities to take place before a disaster strikes, contributing to reduce risk, prepare for effective response and ultimately to strengthen community resilience.", + "projectId" : "-Mq_IVluLteQRS75gWej", + "projectNumber" : "1", + "projectRegion" : "Indonesia", + "projectTopic" : "OSM Building Validation", "projectType" : 2, - "state" : 3, - "verificationCount" : 3 + "requestingOrganisation" : "American Red Cross", + "requiredResults" : 286302, + "resultCount" : 0, + "status" : "private_active", + "teamId" : "-Mq_EQlzqmYytCspuFSq", + "tileServer" : { + "apiKey" : "ca613e76-811f-46e7-9e1d-84f6795441c2", + "credits" : "© 2019 Maxar", + "name" : "maxar_premium", + "url" : "https://services.digitalglobe.com/earthservice/tmsaccess/tms/1.0.0/DigitalGlobe%3AImageryTileService@EPSG%3A3857@jpg/{z}/{x}/{y}.jpg?connectId={key}" + }, + "tutorialId" : "tutorial_-MO3ky5z--RY8PC1lONa", + "verificationNumber" : 3 } ``` @@ -56,17 +93,16 @@ Imports which have been imported successfully will have a `complete` attribute s ``` { - "completedCount" : 0, - "count" : 50, - "id" : 100, - "neededCount" : 3, - "project_id" : 13564, - "tasks" : {...} + "finishedCount" : 0, + "groupId" : "g289", + "numberOfTasks" : 31, + "progress" : 0, + "projectId" : "-Mq_IVluLteQRS75gWej", + "requiredCount" : 3 } ``` - ## Task structure ```json @@ -77,7 +113,7 @@ Imports which have been imported successfully will have a `complete` attribute s "type" : "Polygon" }, "id" : "13564_100_0", - "project_id" : 13564 + "properties": "feature_geometries, e.g. attributes from osm" } ``` diff --git a/docs/source/project_type.md b/docs/source/project_type.md index ce3e31e57..96c07a096 100644 --- a/docs/source/project_type.md +++ b/docs/source/project_type.md @@ -11,12 +11,13 @@ The MapSwipe back end currently supports 3 **project types**. Each project type | Name | ID | Description | Screenshot | | ---- | -- | ----------- | ---------- | | BuildArea | 1 | A 6 squares layout is used for this project type. By tapping you can classify a tile of satellite imagery as *yes*, *maybe* or *bad_imagery*. Project managers can define which objects to look for, e.g. "buildings". Furthermore, they can specify the tile server of the background satellite imagery, e.g. "bing" or a custom tile server. | | -| Footprint | 2 | add description. | | +| Footprint | 2 | An image with a footprint overlay. The question is whether this footprint is correctly approximating a structure on the shown image, which can be answered with *yes*, *no* or *Not sure*. Additionally, a button is shown which hides the footprint overlay. | | | ChangeDetection | 3 | add description. | | ## Data Model -This way of formulating the overall crowdsourcing challenge and it's sub components shapes the **data model** we use. The data model is depicted in *Figure 1* and consists of the following parts: +This way of formulating the overall crowdsourcing challenge and it's sub components shapes the **data model** we use. +The data model is depicted in *Figure 1* and consists of the following parts: * project drafts * projects @@ -27,10 +28,11 @@ This way of formulating the overall crowdsourcing challenge and it's sub compone * users -| | +| | ### Project Drafts -After project managers defined their mapping challenges in the very first step, they can generate **project drafts** through the manager dashboard. The project drafts contain all information about your mapping challenge that you need to initialize a project in MapSwipe. For instance, the project draft defines which area you want to get mapped and how many users should work on each task. +After project managers defined their mapping challenges in the very first step, they can generate **project drafts** through the manager dashboard. The project drafts contain all information about your mapping challenge that you need to initialize a project in MapSwipe. +For instance, the project draft defines which area you want to get mapped and how many users should work on each task. | Parameter | Description | | --- | --- | @@ -45,7 +47,9 @@ After project managers defined their mapping challenges in the very first step, | _Project Type Specific Information_ | There will be varying parameters defined by the individual project types. You can find this information at the page for each project type. | ### Projects -The **project** holds all information provided by the project drafts, but adds additional information which are needed for the MapSwipe app such as progress and number of users who contributed. A project consists of several groups. +The **project** holds all information provided by the project drafts, +but adds additional information which are needed for the MapSwipe app such as progress and number of users who contributed. +A project consists of several groups. | Parameter | Description | | --- | --- | @@ -67,7 +71,9 @@ The **project** holds all information provided by the project drafts, but adds a | *Project Type Specific Information* | There will be varying parameters defined by the individual project types. You can find this information at the page for each project type. | ### Groups -The **groups** are an intermediary between projects and tasks. Each group belongs to a single project and consists of several tasks. Groups are the key to distribute tasks to MapSwipe users in a way that we can ensure that everything gets mapped as often as required in an efficient manner. +The **groups** are an intermediary between projects and tasks. +Each group belongs to a single project and consists of several tasks. +Groups are the key to distribute tasks to MapSwipe users in a way that we can ensure that everything gets mapped as often as required in an efficient manner. | Parameter | Description | | --- | --- | @@ -81,7 +87,10 @@ The **groups** are an intermediary between projects and tasks. Each group belong | *Project Type Specific Information* | There will be varying parameters defined by the individual project types. You can find this information at the page for each project type. | ### Tasks -The **tasks** are the smallest component in our data model. Each task formulates an easy and quick to solve mapping challenge. In many cases this challenge can be put into a simple question, e.g. *Can you see a building in this satellite imagery tile*. Tasks always belong to a specific group and project. +The **tasks** are the smallest component in our data model. +Each task formulates an easy and quick to solve mapping challenge. +In many cases this challenge can be put into a simple question, e.g. *Can you see a building in this satellite imagery tile*. +Tasks always belong to a specific group and project. | Parameter | Description | | --- | --- | @@ -93,20 +102,23 @@ The **tasks** are the smallest component in our data model. Each task formulates ### Results -The **results** hold the information you wanted in the very beginning. For each task you will receive several results by different users. A result is the simple answer to your initial question. For instance, it's a simple "yes" to the question "can you see a building in this satellite imagery tile". +The **results** hold the information you wanted in the very beginning. +For each task you will receive several results by different users. +A result is the simple answer to your initial question. +For instance, it's a simple "yes" to the question "can you see a building in this satellite imagery tile". | Parameter | Description | | --- | --- | -| timestamp | | -| startTime | | -| endTime | | -| result | | | +| timestamp | | +| startTime | | +| endTime | | +| result | | -timestamptimestampstartTimetimestampendTimetimestamp - ### Users -The **users** provide the results to your tasks. They are the key to solve your mapping challenge. For each user we generate mapping related statistics, e.g. the number of projects a user has been worked on. +The **users** provide the results to your tasks. +They are the key to solve your mapping challenge. +For each user we generate mapping related statistics, e.g. the number of projects a user has been worked on. | Parameter | Description | | --- | --- | diff --git a/docs/source/testing.md b/docs/source/testing.md index 6c2196e8c..de1ef0757 100644 --- a/docs/source/testing.md +++ b/docs/source/testing.md @@ -1,40 +1,9 @@ -# Operational Tests -The operational tests should check the usual workflows we are having with MapSwipe: -* project creation -* mapping -* firebase to postgres transfer of results -* generate statistics based on postgres tables +# Testing and Travis -To run all tests you can simply run `bash test_00_main.sh`. There are still some uncovered bits, you find them in #158. Once you created some projects, you also run the `test_02_mapping.py` script several times. Make sure to clean up after you finish testing. +## Tests +* run tests locally during development -## Test Project Creation -* `test_01_create_projects.py` -* creates a user in firebase with project manager credentials -* login as project manager through firebase REST api -* set `projectDrafts` in firebase through firebase REST api, authenticated as project manager -* save project_ids to disk (to be able to delete those specific projects at a later stage of testing) -* run mapswipe workers project creation workflow through `_run_create_projects()` -* delete project manager in firebase - -## Test Mapping -* `test_02_mapping.py` -* create X users (without project manager credentials) -* save users to disk (to be able to delete those specific users at a later stage of testing) -* get projects which have been created by `test_01_create_projects.py` -* get firebase projects, groups and results before mapping and save to disk -* for each user and project set random results for X groups in firebase through REST api, authenticated as normal user -* get firebase projects, groups and results after mapping and save to disk -* compare firebase before and after data - -## Test Firebase to Postgres -* `test_03_firebase_to_postgres.py` -* copy new users from firebase to postgres -* copy all results from firebase to postgres - -## Generate Stats -* `test_04_generate_stats.py` -* generate csv files for all projects and users for which we got results since a timestamp defined in `last_update.txt` - -## Other -* we don't have broader checks of firebase database rules -* some database rules are checked indirectly, e.g. firebase read, write rules through REST api get, set requests during `test_02_mapping.py` +``` +python -m unittest discover --verbose --start-directory mapswipe_workers/tests/unittests/ +python -m unittest discover --verbose --start-directory mapswipe_workers/tests/integration/ +``` diff --git a/docs/source/testing_and_travis.md b/docs/source/testing_and_travis.md deleted file mode 100644 index 7c6de697e..000000000 --- a/docs/source/testing_and_travis.md +++ /dev/null @@ -1,20 +0,0 @@ -# Testing and Travis - -## Tests -* run tests locally during development - -``` -python -m unittest discover --verbose --start-directory mapswipe_workers/tests/unittests/ -python -m unittest discover --verbose --start-directory mapswipe_workers/tests/integration/ -``` - - -## Travis -* set environment variables in travis -* travis then sets up the docker containers -* test are run inside the mapswipe_workers docker container - -``` -docker-compose run mapswipe_workers python -m unittest discover --verbose --start-directory tests/unittests/ -docker-compose run mapswipe_workers python -m unittest discover --verbose --start-directory tests/integration/ -``` \ No newline at end of file diff --git a/docs/source/updating.md b/docs/source/updating.md deleted file mode 100644 index 623937431..000000000 --- a/docs/source/updating.md +++ /dev/null @@ -1,16 +0,0 @@ -# Updating - -## Mapswipe Workers - -``` -git pull -docker-compose up --build -d --force-recreate mapswipe_workers -``` - - -## Database Rules and Functions - -``` -git pull -docker-compose up --build -d --force-recreate firebase_deploy -``` \ No newline at end of file From 27de0e9a2d3740e5c59acdc69b1fdb554dffbd73 Mon Sep 17 00:00:00 2001 From: Jochen Date: Sun, 20 Feb 2022 18:08:14 +0100 Subject: [PATCH 2/8] remove travis reference --- docs/source/testing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/testing.md b/docs/source/testing.md index de1ef0757..01ac47e38 100644 --- a/docs/source/testing.md +++ b/docs/source/testing.md @@ -1,4 +1,4 @@ -# Testing and Travis +# Testing ## Tests * run tests locally during development From d6d5dd54c75078214e3ac5c9c06a400c940490b9 Mon Sep 17 00:00:00 2001 From: Jochen Date: Mon, 28 Feb 2022 18:15:41 +0100 Subject: [PATCH 3/8] restructuring to mirror check list occurence --- docs/source/dev_setup.md | 53 ++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/docs/source/dev_setup.md b/docs/source/dev_setup.md index 0f18b04aa..7185ba8c6 100644 --- a/docs/source/dev_setup.md +++ b/docs/source/dev_setup.md @@ -6,22 +6,16 @@ A working Firebase Project (Including Firebase Functions and Database Rules) is Get in touch with the MapSwipe team (e.g. in Slack) to get access to an existing Firebase Instance for development purposes. Check list: -1. Clone repo from GitHub. -2. Install GDAL/OGR and GDAL for Python on your machine. -3. Set environment variables and get a Service Account Key File. -4. Set up local Postgres database using Docker. -5. Install MapSwipe Workers Python package. +1. Github: Clone repo from GitHub. +2. Requirements: Install GDAL/OGR and GDAL for Python on your machine. +3. Configuration: Set environment variables and get a Service Account Key File. +4. Database: Set up local Postgres database using Docker. +5. Python-Package: Install MapSwipe Workers Python package. 6. Run MapSwipe Workers. ## Installation -### Requirements - -MapSwipe Workers requires GDAL/OGR (`gdal-bin`) and GDAL for Python (`libgdal-dev`, `python-gdal`) to be installed. -Furthermore, we rely on Docker to set up Postgres. - - ### Clone from GitHub ... and switch to development branch. @@ -32,15 +26,29 @@ cd python-mapswipe-workers git checkout dev ``` +### Requirements + +MapSwipe Workers requires GDAL/OGR (`gdal-bin`) and GDAL for Python (`libgdal-dev`, `python-gdal`) to be [installed](https://mothergeo-py.readthedocs.io/en/latest/development/how-to/gdal-ubuntu-pkg.html). +Furthermore, we rely on Docker to set up Postgres. + ### Configuration All configurations values are stored in environment variables. Please refer to the documentation on [Configuration](configuration.html) for further details. +#### Service Account Key -### Directories +The MapSwipe Workers requires a Service Account Key (`serviceAccountKey.json`) to access Firebase database. +Request yours from the MapSwipe working group. -MapSwipe Workers needs access to a data directory for logs and data for data for the API: +The path to the Service Account Key is defined in the `GOOGLE_APPLICATION_CREDENTIALS` environment variable. + +You could also set up your own Firebase instance. However, this is not recommended. +If you still want to do it, get your Service Account Key from Firebase from [Google Cloud Service Accounts](https://console.cloud.google.com/iam-admin/serviceaccounts). + +#### Directories + +MapSwipe Workers needs access to a data directory for logs and data for the API: To create this directories run: ``` @@ -50,18 +58,7 @@ mkdir --parents ~/.local/share/mapswipe_workers > Note: XDG Base Directory Specification is respected -### Service Account Key - -The MapSwipe Workers requires a Service Account Key (`serviceAccountKey.json`) to access Firebase database. -Request yours from the MapSwipe working group. - -The path to the Service Account Key is defined in the `GOOGLE_APPLICATION_CREDENTIALS` environment variable. - -You could also set up your own Firebase instance. However, this is not recommended. -If you still want to do it, get your Service Account Key from Firebase from [Google Cloud Service Accounts](https://console.cloud.google.com/iam-admin/serviceaccounts). - - -### Postgres +### Database Setup a local Postgres instance for MapSwipe Workers using the Dockerfile provided for development purposes (`postgres/Dockerfile-dev`). The Dockerfile for production (`postgres/Dockerfile`) does need additional setup for build-in backup to Google Cloud Storage, which is not needed for local development. That is why a simplified Dockerfile for development is provided. @@ -75,7 +72,7 @@ docker run -d -p 5432:5432 --name mapswipe_postgres -e POSTGRES_DB="$POSTGRES_DB Or set up Postgres using the `initdb.sql` file in the `postgres/` folder. -### Install MapSwipe Workers Python Package +### Mapswipe-Workers Python Package 1. Export environment variables to current shell. 2. Create a Python virtual environment with `system-site-packages` option enabled to get access to GDAL/OGR Python packages @@ -94,11 +91,12 @@ mapswipe_workers --help > Yeah! If you reached this point, you are ready to get into coding. Below you find some more information on Logging, Firebase Functions and Database Backup. However, you don't need this to get started for now. +# Further Information ## Logging Mapswipe workers logs are generated using the Python logging module of the standard library (See [Official docs](https://docs.python.org/3/library/logging.html) or this [Tutorial](https://realpython.com/python-logging/#the-logging-module). -To use the logger object import the it from the `definitions` module: +To use the logger object import it from the `definitions` module: ```python from mapswipe_workers.definitions import logger @@ -145,6 +143,7 @@ On how to setup the development environment and how to deploy functions to the F For more information refer to the official [Reference on Cloud Function for Firebase](https://firebase.google.com/docs/reference/functions/). For example function take a look at this [GitHub repository](https://github.com/firebase/functions-samples). + ## Database Backup ### Firebase From 3f434018d35faccbb2f3c516ea62cf2408721119 Mon Sep 17 00:00:00 2001 From: Jochen Date: Mon, 28 Feb 2022 18:35:43 +0100 Subject: [PATCH 4/8] deleted compy of help docu and provided short instructions --- docs/source/cli.md | 153 ++------------------------------------------- 1 file changed, 4 insertions(+), 149 deletions(-) diff --git a/docs/source/cli.md b/docs/source/cli.md index 083a58c5c..66365798c 100644 --- a/docs/source/cli.md +++ b/docs/source/cli.md @@ -1,10 +1,10 @@ # Command Line Interface -THIS DOCUMENT IS OUTDATED: Please use the `--help` flag of the CLI. +The Mapswipe Backend provides a Command Line Interface(CLI) with which the users can interact with the program. +They can be used for example to create projects, which were uploaded to the [manager-dashboard](for_mapswipe_managers.html), +or to export statistics on the finished projects. To get a comprehensible lists of the available commands use the ```--help``` flag. ---- - -This document describes how to use the command line interface of MapSwipe Worker. +```mapswipe_workers --help``` would get you all possible commands, while e.g. ```mapswipe_workers archive --help``` would get you additional information on how to use that command. In our current deployment setup the commands of the MapSwipe Workers CLI are hard-coded in the Docker-Compose File. @@ -13,148 +13,3 @@ You can run these commands also using docker-compose: ``` docker-compose run mapswipe_workers mapswipe_workers --help ``` - - -``` -Usage: mapswipe_workers [OPTIONS] COMMAND [ARGS]... - -Options: - -v, --verbose - --version Show the version and exit. - --help Show this message and exit. - -Commands: - create-projects - create-tutorial - firebase-to-postgres - generate-stats - run - user-management -``` - - -## Create projects from submitted project drafts - -``` -Usage: mapswipe_workers create-projects [OPTIONS] - -Options: - -s, --schedule [m|h|d] Will create projects every 10 minutes (m), every - hour (h) or every day (d). - --help Show this message and exit. -``` - - -## Transfer data from Firebase to Postgres - -``` -Usage: mapswipe_workers firebase-to-postgres [OPTIONS] - -Options: - -s, --schedule [m|h|d] Will update and transfer relevant data (i.a. users - and results) from Firebase into Postgres every 10 - minutes (m), every hour (h) or every day (d). - --help Show this message and exit. -``` - - -## Generate Statistics - -``` -Usage: mapswipe_workers generate-stats [OPTIONS] - -Options: - -s, --schedule [m|h|d] Generate stats every 10 minutes (m), every hour (h) - or every day (d). - --project_id_list TEXT provide project id strings as a list stats will be - generated only for these projects. - Use it like '["project_a", "project_b"]' - --help Show this message and exit. -``` - -## Generate Statistics for all projects - -Ideally you run this using a separate docker container. e.g. like this: - -``` -docker-compose run mapswipe_workers mapswipe_workers generate-stats-all-projects -``` - -``` -Usage: mapswipe_workers generate-stats-all-projects [OPTIONS] - -Options: - -s, --schedule [m|h|d] Generate stats every 10 minutes (m), every hour (h) - or every day (d). - --help Show this message and exit. -``` - -## User Management - -``` -Usage: mapswipe_workers user-management [OPTIONS] - -Options: - --email TEXT The email of the MapSwipe user. [required] - --manager BOOLEAN Set option to grant or remove project manager - credentials. Use true to grant credentials. Use false to - remove credentials. - --help Show this message and exit. -``` - -## Archive Projects - -``` -Usage: mapswipe_workers archive [OPTIONS] - - Archive projects in Postgres. Delete groups, tasks and results from - Firebase. - -Options: - -i, --project-id TEXT Archive project with giving project id - --project-ids TEXT Archive multiple projects. Provide project id strings - as a list: '["project_a", "project_b"]' - - --help Show this message and exit. - -``` - -You can get the project ids for the projects to be archive either from the manager dashboard or query directly in postgres. For example: - -``` -SELECT project_id -FROM projects -WHERE status = 'finished' AND created < '2020-09-01' -``` - -## Delete Projects - -``` -Usage: mapswipe_workers delete [OPTIONS] - - Delete tasks, groups, project and results. - -Options: - -i, --project-id TEXT Delete project with giving project id - --project-ids TEXT Delete multiple projects. Provide project id strings - as a list: '["project_a", "project_b"]' - - --help Show this message and exit. -``` - - -## Create Tutorial from json file (e.g. provided in sample data) - -``` -Usage: mapswipe_workers create-tutorial [OPTIONS] - -Options: - --input_file TEXT The json file with your tutorial information. [required] - --help Show this message and exit. - -``` - -## Run a script which requires mapswipe_workers library -``` -docker-compose run mapswipe_workers python3 python_scripts/add_project_geometries_to_api.py -``` From af92137de71fc9fa7ca52c72fe41415d077b999e Mon Sep 17 00:00:00 2001 From: Jochen Date: Mon, 28 Feb 2022 18:36:15 +0100 Subject: [PATCH 5/8] move cli to usage --- docs/source/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index 494bf73ab..4bb0a4e9d 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -32,6 +32,7 @@ Welcome to MapSwipe Back-End's documentation! :caption: Usage: for_mapswipe_managers + cli use_cases tile_size @@ -42,7 +43,6 @@ Welcome to MapSwipe Back-End's documentation! configuration installation - cli debugging backup From 909295dae7ae41bfd85136d824c633a602e0f700 Mon Sep 17 00:00:00 2001 From: Jochen Date: Mon, 28 Feb 2022 20:05:11 +0100 Subject: [PATCH 6/8] added user specific table and annotation for project_type_specific data --- docs/source/data.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/docs/source/data.md b/docs/source/data.md index 691385f21..be315aebe 100644 --- a/docs/source/data.md +++ b/docs/source/data.md @@ -53,7 +53,9 @@ Files: | agreement | float | This is defined as [Scott's Pi](https://en.wikipedia.org/wiki/Scott%27s_Pi) and gives you an understanding of inter-rater reliability. The value is 1.0 if all users agree, e.g. all users classify as "building". If users disagree this value will be lower. | | geom | string | The geometry of this task as WKT geometry. | +Additionally, project type specific data can be found here. E.g. footprint projects which were created based on OSM data, will have data describing the original OSM object included. + ## HOT Tasking Manager Geometries This gives you filtered MapSwipe data ready to be imported to the HOT Tasking Manager. Currently, the geometries in this dataset consist of maximum 15 MapSwipe Tasks, where at least 35% of all users indicated the presence of a building by classifying as "yes" or "maybe". @@ -67,4 +69,15 @@ This gives you filtered MapSwipe data ready to be imported to the HOT Tasking Ma - \ No newline at end of file +## Users + +This gives you data on the users which contributed to a project. + +| Name | Type | Description | +|---------------------------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| idx | integer | - | +| groups_completed | integer | Number of groups completed | +| total_contributions | integer | Number of tasks completed | +| agreeing_contributions | integer | Tasks with the same result as the final result (e.g. Tile has buildings). | +| disagreeing_contributions | integer | Tasks with other result as the final result. | +| simple_agreement_score | float | Share of tasks which had the same result as the final result. E.g. 0.8 would mean that the user labeled 80% of the tiles the same way as the majority of voters. | From 126756ce19be34dac41a1446faa367530c61b3e6 Mon Sep 17 00:00:00 2001 From: Jochen Date: Mon, 28 Mar 2022 13:12:28 +0200 Subject: [PATCH 7/8] project_type_refactor --- .../img/ChangeDetection_screenshot.jpeg | Bin 0 -> 129666 bytes docs/source/project_type-buildArea.md | 154 ++++++++++-------- docs/source/project_type-changeDetection.md | 114 +++++++++++++ docs/source/project_type-footprint.md | 22 +-- docs/source/project_type.md | 152 +++++++++-------- 5 files changed, 293 insertions(+), 149 deletions(-) create mode 100644 docs/source/_static/img/ChangeDetection_screenshot.jpeg diff --git a/docs/source/_static/img/ChangeDetection_screenshot.jpeg b/docs/source/_static/img/ChangeDetection_screenshot.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..5b05207f4a5125458fcc56d1ca3216d1133b0bb7 GIT binary patch literal 129666 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

RQ=7cFUa~ltD2-r?Mh9^D^6#a3d z3B6|Wp!X{Zfzoev!As;t(db+Mv9Y)VHrxI^S3$P{%)&$IEK)%?sP3`>Z-aC=?07!d z0U>b9xLV&|Fmtg`j3u)nIT zUj_Q&%j1sj`teJwYf!ya2tVg0P7`}Y;g%b-J>Rb{}hm`F&_^sN!;O*FP z;gacl3ybdT4<6lME-v8EO01vdd?N3{`0qfr&)@Qe; zp8YM6<68kTi@5y)6z>kT%7v(Ely7IdN{(U?t#fKy{5bfEf~WM`dKg~RaEZLA4IkHK zBu@-ZC5ZR!)q1RS*tjGMCeAnhqHV=#H=~Ablo6%H$J2kygQuQe^3FlHa|YrDXuj_6 zqAF8;I?Z(j;6-0mrrpwb&y>SNV-TpnrS3@vUQ$m5B@P_HYzC47odh%6gMj-CA56RM z_B>NLoX31LeF<{o`K!4Ud{;9cr_j4@*mT)TIkP3z()%aC2KzyRW0S135#KLNL7+Vf z0GBbi|4JpVPQH`~Z{~qAkztt>ZW(=f#5)GGh;tBEm@#gTTiWOG34z^jz_JjN^{>>p z41v4Yg76P6pW_ME@dU3exkR=gSW|Kb({8{AUcG`sunA~92POOs@kVk4+p!?v1Qc*_ z7oyucVIS4To=Kq^&k#7*%?cv{z*8kxb9irrMyI%P{ z|LaCbNf%Q}7n3JwEd?D2LrOX+0pW-vlgt`kT#*Eb{+~GDl@Y?){}X}%*O>mV>i6j0#Lv#I3Xc>W2*B3I8iU1AnzDn12`e{59t9!%TPo60;M^zuWy!@Tq^r2eCFu z|JV5cEvdkzX)#>j_1o94-@buy9p&bY8^Eu;fPmlA#znbv6Yl{fn?g7~hs|9A)<@6e zN1T6GA;G&TDgT=t?$I5b6HZI}svbh!s z52$POZo{F6qZ+lq$T?x-nV?Yqc}6MNcpzt);5e?PieV#>=q0mZ1r^T1;5n#SKB1xm zcw8vKK9%ld&=-eV9$WTJ1qF8K}xU^Y68f>%=a$g8A6f(haa7e&W|D@Q)@HD61gVy ztj-G6Z8BzA7VFY@I+Y^92h>jYQ=-=M*UQ!`hePV~560#a^cNzgDkE}HIpU|z{55xe z{O0`K09{;JHPg0V6H23Xc|s;ftxzZAQTA7N5Y_7eEnKT4E%S4ZqT1Bul4QxQig z1bE)mwDnN*Jlz}#g=&QgY!owv$TEc~-o2DDE8qLg`sw(?w-mA$8M}T%slRIM@QXq& zZAdhI{U%~s_fb$hbW^!u`)-2HJ$iu_VPOV<8o|&}Bl!2K(pU^|>iI)cfc0&YT z$2FAlwJn-Y6V=r>rf1bRr(VFKB-Z)z^%WCy)jEXt&Oz~G%>zw?)9%|+(m#H7?n7%D ztf92Z@;lX=%HP|Q9MfmRW$b2sBOya2)n;R(6kChWdTf4_O&7yV6$9nVlEq9&c<5Sd46S8Ih!{m@gZYSU7NvSZs)xH*2zTKEHHuf>yTi8Zn&_+f;5wg zvR^7?C2Z!@`KgXUA<2-CY1!FuiJV+4{kZ8?!?UqcOY zNvAsJp&P~}5O)L*E#bUMkj3LvqxJGVzZNkDMo-aj1n5Z3*`!VtdJ>axjgQgQ%R=NK*H;ASN=Cm)jBbV@-5J3PE{wxrb6JBouOZ zk$UR6fhCFuWt&v;DYokU)6lw&1=sYS?ty|si7oPPCBEAx6Pze!r^f<>T6B?XDMPg$dWX)_wCr}lqT}O+1tBF!(Jw7Y4fVNf`A+QA-vzu=<5cP?N+~&y zO(5}x%8ipNn49b~p}eOlNk6*}AvNB+%s3O(?EpRc7U~ zy+|j&qsipN{Wht;LH1f-+JFpt_e2y?mIP~%QYQx|SwfjZuG(uViAa`Qlmf9RqSASk z54?8E7RH%63TY{GpYjfq^ckMnn&{LB{C}Jb_1S)uDA;eV?$B>_{=;Kr{+#PG!xWj zVbWsV(}&;3RVMG24<3lD54!cSj(ix54}#6Q<%zMUGZdgPlE2R1YTos>@&UIE9_qe1 zZorh~1_Dl<6-{@)+t(9)v@6^aQI~0G!qxjFxadEgbIQhNuWk1{jiGSSf0 z8pgkGvML@a5=#Led2L?AsO z*OiStGOr;T+ygvhIy=_p@WD0OjHb159DQ^^RabpA#)HhWew5lpD6t z&}f>QSAM{w6BidI^J)FYcs58uIP?MTI|=Jv^Z@i*=(#ilEk9f21+_&3b%IN)^zIhAwKlQbE0!3?@$9;(m#>rjeBil@+tOPSkHv$a=#u)R6; z6DYz85R0EBpSg;YK9`WNM=P1wO5u@x-=HhH8tn#fHzY2=Tz-9HO{D zejpueOF=j;fc5k{Q&LhX;VP4oKBQb~g@~fYT$gg9 zqG_{Lng3s}yy#=JKp{x#j9-`g7&u0t6d9CMenJ179J z6Zlyd^9?S|`bMFS5-Gh73?>Rhk@cSfN=xR$7L1pjceVubY|om2jPD5Hb())3S+mb| z1cgY$NbtsmM7_L9%p-kT+0g#N9LEbU;4=QcEqLQJKmWnHe@q8SqZ18KyYW+8T$-}f z5hS=aN2<|tMZxjFR~kCU`tL7kLqvpygos8)K3E5-m9pvY=yNeaIN0YtD66^M5^imC{G}2QH=td)i_y@-|S41<%jem7O<@b=O87TCrVsRZcRBRx zoDR84eVt=EaPI&WqSpx~YF`+ok%Ukuc!9yX`lCEp{&&=}|=x?Fccc!kA%U8BRh9kR9<5*+5gNhlQW3;Dep2<~m96|K;1+*yQ|D6A6co)_^U^7RRxpkQ7BUQSp9flT=qCFS z7$PQa1(AewEq#)bOdI=5tw3^B!mnDe(!F%caF6k#O#QO zh=(;ppa$0Zy(M~`5YfmICq6i7=BePqt8Qx6PVTWO3#wgoc~-g8k4`f5B_OM!U8 zLSWxwT~~43hdiIv=k@d=$Ub15-0LtG$R&ERi|Fqv`%cP9sH6Qh?;cz2loy}PX+ty> zs3}VpTOz}H!~E;!bn%#^t-$oyda)TiSc|%hhh!8^>6h(%oSn(|BU0)8De4_zQqpb= zS{Sa}CRh}M-Wu1sxR{N9jrtTD2Y556g~?lvx9dK;eFAgt(s1RW$3V~EkHd$ChW7^O z(DEc*z@nBNwIf}GczAeBf-|q(mSTYZ%sTnN5cnzTl$vIQTjyC7#&qD3H;X9NbuaD~ zQ>tEW)cwmWUpEWkQ1txsjS;m+ zA`TzU9s>r z`n2j1J(TLS7F;}>O2r8UED{_0!8K2Cjpz?txqh>8p*Er`%yR$=8`Ho$(icW(b#m)& ztvpbNmWVps5x z&3vTTTe}hgPXOS!LjF0%i>4QNKskhsjh#uV3K&IVQs0IfmMg1jUF4V>s8&31AQ8?> zmRm#Nh~_8!ok?m4F#|F=Qxktlel1IL`B5)ktfy$K#}Wr-5j(@%lVoDK$PvOsdO{AsPZ9YB zdP7kkadRQ@5>C0CKm(h_orW|G2bR*3#)CgfDXcHm&90VI6%OQ{P+s4M(p_Io$E5{u zwPe8Jxh#zv(N^V0sbe-BYyJ;=Mh4A0MtzAfcRP~A-XIc*M~e~Bh8NNC7txv* z(f^}Kt#Sqe*r*MX8^$eB~g z*-sF204N!dS=R^%&ctxe;c(2i)aM{2 z;Kd6odwsX)bgqb?@9P~qcH-u}dUZ|gF%GEcGt@eoA zy3KaMsf)BHZ13aaBycpWrNj9MuXWyOhg^`Pp^(x9^JSfDDEB;1KVewQZkkgUZns`P zQK5nIn^Vh*!f*}fJXK?@ce-8h$+z|uGTYF?u)S!3C);3NNuuGxuu>mBjaqTXHH$h| zzZFc2gE@#KMWE!cxU(dwyEd5n)C^whueV)$biaYLCwzQ6;Ru5QC;`PzWlBvvsdNK;RuEG>$RywZtVoY1Bm#r9P__dY-9t!$OC`a6N|xdpZ8t=7b!lhZqslTC&0SB~_*3~m zQ}b}qvq2{^QTiApTEsaty)?bWcl0v&dE>~jS{+z{+pZv;D-tT=rcFZr=J`>h5+)oH zuZ^<_C)b43YsJbcBKC1R(EL;6IBn{867y6v+QW-I2iG}VHMD=@oK*muKcwi1iJivA zecPtBwWR8XX!Dt~!k%O=vU4@9MJoc*VV?=!$T;_r(A7LrC!F({-DFC-Zu7bbA&064hlKUp z{+~9+eZNUtd$o_&-G6BBPrILDaI^GNKDxfCtaTsZRc z`-y18M)fHNcjB)%=ihHu`Y4Ug%+Vsx1>xae9oh*BpN>z$!_8d*a;q;<~32?Da5L2X&9(_sh_f86&Pmi6+`NpKTE-eH%5l;*y;qDjKs8 ziKY*!Nt?!w`=yg~J(!v6fy%%Opjv!F=?!JF8S<0%cCCozPcwn}i6JvkvLX>8ECtHe|7o3jRHB!aL z+&1DaS@TAF+|R6bc5rYXuVJ$8sG{^8nl8=P9Of3GO^5s2rRg%Yb7%7+Y3yvwdO~Gm zIc|svnEhM$TcSY!o7Ni^$X*AR}at|J&Xr16q_%ix=3k-AO@`~F56MM%_{fLf9|C8lN!Jlo^Dz3w8-^L%iy;aD}BkFq^vXNXKg z?7g(^>P22G3Z?}yrJqTQ)Rz`Oc*aLGi@7cF)xjcm8wHH?s+lrBcd+;-;?J1TnQ=u( zgv06Cl`v`oq`VH2D@(b9Ay9t|0p+u_d&kjLW?0xLvv#JH5h@R!+zQ=1bSED!?T>ZP zz+kiv*|Qqzuq2!8w5jG`KO2<2n9WPGO!qXA#Zl=u&+AI?P$@5bQuSEWfAW}8t9_?} zCC}87EU!~$eoj1&i8{J62M_l4tDpEFzC?^vP#V3sEpY2SyA7FNahG*!4V<*CY@H!v zMNu*^kfEj3Mp`YifrZviF=K$fhDxaOFeeEL%**54>yx~(b;ENuw8V#WANb_?i_eK- zYqVhvgX7J`<*67`6gOzIM1L^`!8pCCR3pF})Ro2ocRtvp7l<_$b8q53%oC3znbI8M zFmi8l+^?%LiL>_M&B!S+;g8HyJQK|`et4j;0?f<@+>YN8!8F>F1)2j%$|>2XsdZ-W z)kagOctjSOVaM0C$wSqfxr^Has)$r)0sFXH+Q$1i@|e*GBl}rnGi8~;jA??F1m8= zQc;6^oz8_+8-|uOUeA0|ayfKpL#qmWShZt#la$cUQxl|yz zgc>FEAxg${sSOw`S7jav#hrV2Ltl;1XQ*gu?n%Fh-xkq=rj?$U!|CHtv+<;}XK1{N z`Vl3TYd@+Xzfl!!IGC9IvCMI3<``(&-2HM8SP6v2Vu>R?JuX%GgR_s*W)$_DL}F1^qGvG zyGmW`h_DY^CV69pEC%X(b?ZaHjly^4OiR_G@zhksigu(^RYfetjZGVI4HCvH$Ggpq zzn_DAfF8j%0e_aR9!o8Xw5Z@|uiKJ4qKU-2Hvq+r$HZAwXk82JD|NQ`HVb!@92K*J z^*_pMc!B2)izfF8TZ1pFPgk)AB826Fg*IihmjsLh=_f~rx)9n3awuhss=kOnDzKxs z@2BUoQ~rjD#td6Zs@~Y#TmwT-?BJrjiuKJNl7{x>7~7j`!VwdpN7L!E8YVF$U_XL8 z;ZKP33X7V(n;ysC`9Q49NY-$W6rfO25$XC6xkbkq4qc-4#s+#i*^2o&4I1_4E{)e z@%rr&M!KNNk!H#|uQn=w0$?AGY4}rL-DSO{xIAoZgd z%%o?qBT3WTtZH2jMGFy0(>C}sqZvX%aV9R^7(nSFMp;BANjdxSv>6w5nkAZP@#&ir z!Vdh*0dpx~c)EAiAOb%>3y1B;TxiAtd}d7|P^0BKU2omeg~4%v!O08JokTlQHiX7{ zcPAdh#^TAx_DCK#%$~YvP5SefvXd zMoBkKX;@rj5{{@%@e$y47BMD?Rlp`qX`5S&Hy*j1kimXDQM4Jvr^4R|U)6@1MWpT) z;Bvr#QlUdB8eD43^EmLT;sw#kCH=xi-9EhTW*QPVE?4)x)@4iPvp<}QDF2I6u=HQV znCJ}{xf}-K-?a5K;T^e1Za|txK01(AkBN30(sQXA%UXjK3<3#9#b! z5L{3BBjCL>^ZJN0DREA};_yVtUqcWw-`@u$?B3%0XK+G~3sTbs$@hYU zeL-Tn(4l&v!}>zUJVJ-ge*#BjR^b~r0MEb?p8GkM^&`SNm9a*k4nFT*Ila-TDL9E| z(ILu*EiYjf9Bf2DN(;11w-}rQk%F{z-R_)_2`FtY)&y|t=9rQxH@Co8fwF;V2s#7T zP$W!5e_|;uwZ|-p7g)e9}Zw_mwu4vv1G$-sVZj$>h5fEA!-m9UN^~J9->ILN z04!tEuWS+8DyiL(-)(8!RQh8bKQ5xKQv1XvNY4dQu+c)4FpFA79R=0%`s zcfoBd*Rmh$o6*&Ybvwff74_^X6@o>(@|j0Joq4_n_h4xbpx7?=Gc0D;v9PypfB>Wb$#4fWm;lu4jMHniCjWx2ma3!VUqTo@O-fd3v>oaSV~r~ zdWlQTL=p|x+$!Bv(oS9+bf=R|vZ21DNz(oi0ky0ci}N1UOl(Bvf@n)8$B8%AiXhlw z5$c{J6KAj~I_!qKuOi4U(_U>7VbT@uD>xeqlhfXfq?8!Nuz4HGBzT>zCPv4+Vj132 z-n^0kJ&NDi?T~@W>qVvm^UQ6>v~_pEuTZh+JxlRSWsX5~=J=B8R2voHKp{!%06aYN zNmGfodo~3NmK9Kz8EX^OWExH>(@#}YHbQ}JP0}o}&A;!__dZS^AQeQiNNBPNQM+nEnfbdeLmhQr*BsoD7UN}+hixcrf8jgvSVF&PA z8p-M#@^h-E>?Z;CZne6wsqp3KV=5cmm5jB%8xpfRvrOp#<^#%%n%)S@ zaGAV}!C;P+(+qGmj0%zp5ql`r?7$-JazJ9X$O z&%-6ng0-ob59T%zn})j%--5Dt%_G-y>V+*18ur7LyC1H2L)V{=zYs^n`?RoJiPM+xSx8qdA51NpF6Eg2rZXej@x)P)h7gB z244o#b+pm{&*Q8ASHziLk>1jGL{exxx7@A~meXe+Z(j*!Y?mTlMQ))VuY zw(bO?qtEaENcsXK;qDq;MBMU3EyE zYjo@lW2!B7WgJ$f@Z}}6!0kp=V_PI-i;6rF3^oQn~v#8bMswy~a9w zokN?HfbXTiMNT&VWi^PhcYL3oQ=ce4M9#0FjYV36WeB3IsH|E~@GBRmDG>)kx#S&B zE-u7Kmz=!nB#MRU1d*$@jD*MqT%c)(&y4f7U83^@(R-Y*7Q$jjodC(LJ3_iJX3Te# z3uRC3B)L;cQoKr94;1zWOWfRhKh&xjMC%?ftG*>$oT9|k!_yTK5|IO|iI_dq)isDo zjMnmM-FvRZQWKMrAM>lfi;b^L=g>CHYd6(SJed-YgihSpI2kQk&0s&g+qmVx29SE@ ztfjD(4+xx!O$i`W=Hhta8%2;)!@X4Eqh-)v6lS>Z z)7%_D!pML}XC~Pv)W35jN>1#txASU~R;w=zmr%_~f#%}}Rqyx?Wt;w%WP;?yz>UR~ zT!UlaY5!l;(FkPY7E_)9L4r$(5H5#Lw78;FJ|0s^^Y1>jFDa#R!5f(?x%vonua8>r ztX6f=DP75L;Yue;wjd`O@f5EB>cnW;bZ`J&3h#E^k26m5r2j+Rd&f1IbbrHcaTip2 z6+~`AhX4lYBHRl}=)LzPp^G9&5v1&{v=CYXgf2^$PJ+^lLMWk!4pIaI0s_)I_+Ef} zf9~h^zVGw*^Z1FE*En;{%$alMoHOk^c6-?%1f=njrP4W(;;I%rtPlzY#*)McqoL!! zNSiGt0k#8rwbe!QL*p?qA1^Yd$^l4=84``(R^j9XtE*$Xql9vwdh&&bVfz6Y6gBE$ zo9P)gCGCB?W=T(mlP^AM{FN8O!vG46;vfsy8n7?|=@>aU_#&|MgxKW#D`FjvdnEW2 ztK)v$0|a|85~E_#xHyNUFST^XC-6aYs$h!&?u}bP(@oOuEw-UMQ;Ih)q)`PFnGMAt z9dY{c@wmr056)IcoVtSnjN0LClU(zLZCbTm1?+R&Wz7{B80GZ@6me)y5}|JaI7T&3 zh%9}b)9`EIWsQ6Gmhp=Cs}_+86%f9mO3Ka&wQx*MVDEs%;LJm#)@Cy<+e2bJ-|?!I zuRAgus7X%VNg=D6B;hO=qLHjFk#CwjbT8#9{R>$|1u|aQtM(rl3&<^Z9Y>`z zQ31)wJVRLn7=|41)$}Uq>PYHkEd!|yjouEkmcEv?0HNdsFY9Aq8+8$n(>awnT7Cp1*upUjN| zB>$ohT^3sHcn$&M?IgPvB^87KnTz=hySa!DntluL7RSr|uF1!JcAeED1>2aN*q-x7 zMxG7Z9kxBuym3*AY#QVgV1EBln<~=XHL;5t%lb%g7Sz$vjy(bxBxWT$p3VScKfnH^ zg!<%1M6RzAG?$wveL$t(Qs@z%I2ky?(xhF*^d3k!nj`<|5a_S6Yf&okSs+zW7|whb z&vWxlP=VlImen35Dg)erHdAfoVL*;MuI7X`YpnPqp7WPD9lvS3logJBXxJTG2^jCH zUXc*6rN}s16=cc2-LY9=W3Dv`MF_<;s<6+#K5(@Y+FQ8#P@Wc+QZZ>+sYs|v^Ndl%da+74P|)}V3837grjP#H&k#Fb^O4tC-s zE>!{s5x~Ba6Ls`!(X!=b(Px&nmpb+4JM%mN3nUUjqGnc33Se#2`}r*ZrC^$RCAVgW zgFPTyooE$$LWszT;`hi<#Y+_roEy8b#|I)3x3gi)rl#F6mZ>Ih0}G1)&kN$tEUh>p z-25d!O;;G&ELdby*$JHpR$Mfu@@Q_bl8cuu@N<|cGdGHA(|98fKOx^%EuuA8h3^K$ z7t-blw-wz{_u)az@8zN+#+m-tzhklD+?H~+K`slI(POa!KrjUe+VAC}BL07asux-E zqGDvxV@@iF7>$x zL)rO}mb1U2M9&uPxKeYLr;7@nuZm2bHX}BihX&@KNlcwboUbT=YkGCEC1+0eKsY^9 zR>njomwDB^rxBX0ce&L!vxnqFH)MGza%x@EahL`=p4UgrksV4<`-q{iu$My-5n)4N zFC&IfAK&}Im|`R$Ds5<+PFf{6B@l2Ccq3>N!Y+PTIXN4u7fL_IY?ANXq74lhUITDO zT!0f+@0OvPmC4@p^R$=_CHPuk%)}9`XxEG_e05va4Aa2P>#GF3G9xLP5QD(C?(Fy4 z7d&7JIWNQqST@LVze{AZ%dty-{i{11FBfsHq3@Jm}+B zay*5iD01oH%kh89VFV={3|)*kA?y=b4yZ%hilI!;mRwd%ZQ{GCo79~$S`DUMUz}`9 zJ23vjw2lrF@i}nCPG%`Ssdf>$ut})JbwnF92ljyXE)?T>GgZjIfh#4_#Re-lAJC$+ z(SDAy?|JSE%j(ch_AN^V*1Q9%7&!A;vh$$^(3Es0P^q~Kv5onWT)7j6kin8r1xO1M zHOacx=8|b3a1f~ko!EBJ-?J2B3ho&__B)$f&W5@=k(JiXnM$Q1dR@+S$T&e@KM;W_ z8;NZf-$CD_z-F!50#olF@haRYW7=W}L^X~;QGWZ3n@x84B@5rKsi0JqGg47A#WZ=s zH0VYXC`OMDq_&d)Z1b7PB+#Th#s)^*4>Aylz}5?7VvzJ{E*t z))3g{UUo}6N+xoIt-O@qQzkGN8>T7(?QALE+< zR#mxD>8J8vS#AA_{l7lD_qppCb7b!`zMg;eeR`e%Tphn0-|^5T8yXGnXe$+NIUKJ- z2+s>NhSp)AgQ3VnfFxzw&@e_qlVP8z185nGunyyaWJA?wWy8RE0+26SLgg+`^WX_G zQGkdOPkhcZmG3AMsB#>srq}?}Y2V^3A`7+Tyc3q`sHz%C4j=kg5_=4fhN%Gp>+p2# zxer5j6nsnAybgk2&4w^olZ8ck?jEwgO50a7x#bu%5D%PI&1Z}xP9@oQZj92=nq?<~ z<9irxi7l9m(NUvm3SdJJ`B*Z-iDO9(E2yMB+x@z64*4T}y__@El)aUb#D{X)Le^9A zFZn-@Y3DG=ESdvYZT1pKE7iftpMH2flR!kVu_9m=-uw>pz4Ms1d!Kp(F(@T(17v&( z%IWRAUy44XtPVb83m-h&w!2bO)iG=8!EPw??V2ZDi|L(WVKztB9t0l72n|hzB{|V@ zI8c;5xH5Buc^qg3oC|Mr+9DNwGeK%^s3-YkQo{0Q< zuj7ab)9At3`JgXS+e618*Wqd8{0pIIp}z*)53N0FDknLu;M_&Na)x~NRqi44aWf^< zFMfnM5d6ih+aV3NVdUEu^?qzPPHs;r{f|O7>Ed_IQ-FQJ(6+WJy6gH!Uc9p~ukTq! zXE@|FkgN1i5x4zweWVcf#Aw%a=Q7g3+`dQ#HETRns|XCP9wmXFH4gRZGweA?PnjQ83eY&1`<1nNAW7C zr~{V*yPy@eASDe;s9MpdO>>)suMC@ysvyiYF#I ztOi3PezAWK%sl=ciWQk;e!HG^6JR$aAv(ck`8Yy^=l+xOTfysAjE&b>=->)G%_WXWi~j9KLF;hBW%L(^T&GR>e^5VPV zbSF1!=R6#RPTuE_0`-FwiVJjp0Xlvp}5y=dGf^&E)0r6{Tb)Ke&c)zjqh7n z3l&#wb$FV33j$SL;^W!pbZ-3=)RbULR)vo=g&nv}1ak#6t`XW3U$+N#9ndvuKk3T3 z$IU}ZCn6o5cKtg?E1eI;^Bx1gg1;2AHqaWgdwUd>*{6!L56vm8S}O{-&Xw zAVY{eL5xo$8)Cp5Sq|sXLDTw8+uP&$MDE0s4BSZXZ_=8ofKd)9p`j&JR}3puQcc2` zJ~k+oJDa*B=HaL3_~@)>gE>NI3^ij+d>ii%(3#sjofxSQK6R+NyBBCpU3KlMJq6wM zo$k=onO?AjuC2l>{VSu8yF<+IQ_pOOB$O%#!bpFD>c21}f=E=vk0KZ(QoAiqvccw3 zm`PA`UpVvQucwfcJ$Kvr00JSK^|iad2(k^r+hyP=C7>dsax0pPF1`SzBa~9xO?o$>3o#mx@_9$lOa6y5`1;(`GL4Aab@Ynna={V57%E%S%AVPBRC<3DBr#zc3=D7 z;qA=fLfP}}QPd6#F(ZaxM*;|T`s(U4^#pMHg=>HF)J0uigy72ln3oI1@bcbfR|ihd zCKq&(#b7aH@h3M3Nw__rG_8ypK0&=ewW zj1nrga;RxFXpu7_ym6RY^0K|5hALt!jY+p2X9A;>sH31O0pY>UlFoa{OLJ6HWEQ3GFfF$d$mUCJj<1?54sLSHT8Z7@p>tVhXM>t^Rm{Z8=W zBO)%wK6JjJks!ztOoXo!Bt{=!5WXuQBjbmn4jj8A*&*dJSy^TXikjZS1Don_eg0n) zZ?r^s8K4zuSG2|xQ_;YzL$%2{|Ef>})DoI19~(%FmP2`gaA;Lv3;j{wRple$BDEDp zP4~S^_hIMKtNi^+(e1Jwr5_u3Z-8DmVvy|d@y&jh)vHp01d5JqXt%i73_L{H-q>?| zVX*5YtlI^RHc-zNcXaeOU^W}L5&)}Zqewggfq-kUHll4|6`*mp@)2`Tk*65VG{{QqRr`jqzdkTAe zRMOkU$!tFvLyAew`QFXC+%6kn`z2$PZdcyM36_Hraa(-Xs6HnpIpptL!Bggq*E30@ zv@{BLEYEK^tragnbrq2A$0Bw7a(!*JHJT|>sV zO*Zkz&0`w%f1Dapl$INOoXvzJ?gL8^ZWzl~njB zYwNuJgIKJgTWO846}Z}}0bhMG*(3pxX$b%D)oHi5w8q4-p@Gw*3AfQM(2(*WM7*J| z>nI(wBg?x4mOIK2^11VW&yU8)`MS>?mXW7s2Jdau{%?4-16KVn)^zmfFK`8Z{_)pe zfZtEQ0>}d2aRnH8?m@0IG5<^QHv`apLwipz{XbcF|E*&5JLVTDX+$>O_!*X!PZj#t z`%U=MR++!a{C~vf%wI0_{BZ3DWnk9fYgkqxjX?>&kFHJ-HQc~A(en6UUiX=Av{eYG z5RNFapK-$&XwF#|>6e*IW!z~F7tGyacYB&?j4SM^3tcYN6?s+bs(J3HuJA08TdslK zHnJUoEVG2{VeJ0i^3I`TI5pdK?*=gX2({*xv9GEvvwge9^b=dyE7qz)@g*kOE%qqy z@$|W6?^$Yt43Xbnh*=#|%S&OWv&m8}ZDk!JL(MG`Q+_t*8{=Dc^t2W_DS1#EG{>xjplD#yp%U=sjlt-B^%l1KbX@_`)XfrDQ7KZuNyVK)Sr-EG#vm2 z7iz{Z*9i=)v(@DuBz{~q4rP;nz7%n-Qp+9B+5nXH)@YBT zq&L3DX{Qe#wd^VAQugn(=?QARj*yP_|$}jNA;_lx6lZl1TTJ%L zXBi)-U-c{_6_7VkZT(p$5}237eRrtH)V_k{%L=N66^(AznE>Y3CZ+4Tw9w=GT-W_n zUStxU7O+Jgm=I5hK-izC1>GWW!9p_S>x0U*5$JNPw+yBVnikT(ZIGXFg@TL z)E?5J6n}n(`gSelX7kf2d1eNhxSiRsA}U&Hvk2633f`z2{FF z`*E>MG+_ZQZPwLRj^yX(14`wE^;yaol^70v%|t^xFutnw;~qjv{B4Ous%h!!NaE7Q ztcJ{x*0Z0;TkrL8pf?@{@cmuL^ZMH2@@FBiWp9r|Q(5J;ueB8ipNF{T@X9;fA>8M` za#!CrI*32PoaG!y1#f3?X~zHcSrExd9=&H{osm#?9Ky2s@8wtVCDA@_^WJ|ZyM&fB2ptlnOaa_}`4 z|C6oT?FdJ`k|Ybc06T@+446ZbCLwu5r_kG!XjburkegKJsKsC#b6kv#Ihq(36f>JW zs5@5U0y?tMaaNw^+?KR*k!hJFVbt)6-Y9Tt0^a0O0?)%9XBIM?T7(!>&wTi};CUFW zE!>({9e4csulCNH4}%O78!IRwQz9+z0LgMG{&ww0!Ik5z&E2RbdDDF1;nm;YiayR# z+s)Xt9E;IZJIf8(1dhFgOvwUU)z0%RW6LZ?0x5tMJ+PuG(iLv7*@4V(8&T)1YiRX3 zqLx?YD>q9NqPEXwAIhy3Q5}=GgkKhhmQl5yw4SZeP>r`66^d(j4#sk`7$*9IbN}#q z*TXU<)>zBM`Nz6fLSh-!j*|ix7rS_$u)JN!VlQ8^y0`o0_Cewi7t_lxo@QzLt~&}w zY*U`%vsCL$bYx+&30^u$NC~DJ8M;z854lm+7%fKI!l0YrJFc@t zMBDs_b>UIF`rnTsV};`;uZxEE_{q#7t$Nf^Mvo5QrEB^JBh9-ZF3OGMZ`Ts-6~xB! zuTpVC?N{6Ptt~T>6Zmh#btO$70ZJ0Gnq+O_qbY$E*@bcm8d2MrXr(C#o~lHQteAJ( z2%1979_O-gMpR!z?yoe?8HN|3ACed0W3PS<`{kgYZ>6Z7??G^u-=(!5~tEHd7O zKln+J%SLQQN&DTd74f&xBBgTdjxuz<`0XU#?Zt^!e~0po%GwAGEz{}kclMhjn@OK; zX=0P*1K7LS1H>Qd1QSksm7%jyWvJ4k-?jzG%%61zs3T3pDE6=SCZfF4tBcHoe$~vF zvxyp}q8Og5a5M z>Nx;cxDB+3ETDl0z?J3o6|}jX6yxOq*B+MWztWcwuB}|ZeBwwOdNg&~ANKh7tuoGP z?{Ef_T$QMb8=g^=UfN&StyPLX2um-Od*fnf>{LxhDVHqr1_ZX4dpr3g^MQD|TmZvn z-tQvauOwgEaoCM?4!&F|7X36dIh@3|m8O_et-x5C8yg*1kme{Pq%Bk9zAimQj3I4$!>2XIJs<8fLJp^saQy#({$0Ni)r9%f5o4jh&jkaA$&5CdX8# zec4uSp>j*lx`nsip|4ciZ+Z-HiG(yYy^){-00`3eo&u;eJGLPCt9y66{>pCh76L$X z8IIXssvt?cyJvILlwee{)_Dedxm+q6qw?+AlEQ2_Zm#G&%r^3!Sg# zW^wHu%l*+f0UL+WqKZ9;TpBwEVDSr-3NB8+8T5N>!uq%#Y~0II$(T`yPdgjS+Jzk2 z4bc~(+AJD8m~!ito?A5PiVW&oF?0xf=Ma@_oR7JL$+c;Rud1VcId~OFrT^`EcIXPnw!Sgd4E1|=N|rc4XLss9#hCJJvO|3 zkBcd)5LIYM&^Jh~xc^@)E0m?~c$8rS+~XbB7K|y>V+ybGtwND!xD=&z$*4EX4Dc40 zl}MAr;#}a&NXx)-H0zJ$_ie**NlO}Xq(Wdf%Hw6*SODk0(Zniv6>vqyOmYSK}~l4hK9$D+30qo*p#s} zJEMw<_2BB@@rOsBKX?Xs@9or#d?|7D{KB7qWQUM;doRs_)!3=(W)akxW%LXI6-Y1{ zSo-9RkBdWBjbDG2@3u4ZVi7U&3(c_WDvBbSm}Xi??{#Mej5N(?s4bgRSXML^2?tr+ z))e1L&>Lk;Echxcb7sLYn#~0%;%j13n5viZ!47ZE{Z~;wZhia;Sl>lo`=>00znQj; zojGS1;ltj4IzBXMA8}(on91a~mEQ6Zylag!C@~d&J%ZIs(-ZM29`Y-c<<2%^u)QqP zJa1uGcVHyrv#h^H&1$!g+i)|gc5ZloO8<+9%H8r#^|7@SntLA}iwZSJ^@eB}66fpl zsRePYjjzqZV3hupe2$6hCczu0O0n7SY5_>e1BnA3s#Xz*6-%YL+t8?Cn)?~cALl>o zk~%jN z1?gg!r=@QRT3m0Q?3`M54*A$D2=lJ6aFfn@OF7d`ct2Xgjf#mwS$UY@#DHEtH;Ea) z?z?hlx@mx!w!`V8Gd{5_^}aBFf_}O)luM*|n`u4LjB#G~S2oI55H`~-<6r-Ft#%mg zTK4T4RrcW9FXS+o+>|=eTShY4x-_rZ+C|NHp~+&%hU*TuiEGVk&2`@MfrSth6BC)e zQPFzJFlu+;hd-Z_x)pXO*>&Sg@JaW!vw%}yUG0O$5Efy` zBbPhr#>cGAR~4K&O2$?{o~4Aeuwlp#MaL|!NGU9`Hz~+0J`QG(m)rf(b#giGB=crW z=@ysv(&B9i$rd%0AYnsX8U2=|oOpPqSwwXHSip3ITE|0y%28RAQSLD)EQrPFtlXf^ zE~owhjggI8nb9_C$c8h#Fx)))L4Yq{kEs8650-UlH~w~QC|V8van+tbvQ=ZPj*E?) zxJ94j);}_SoEV^-1Ci!7l3DMUZkr}qzR4E`u2kX84UkC+cvfN2#ISqB6_K-L?6f)Ti3Rq& zoX1$aJ){w-%9oaVAZ4#$MS}{D+BZDfcC>x@essTx)VVCNMhV=aJ7%ur;{I!Yro1IU zO?|ij&C2|df6qSkNT!BcMtVr7uDH!LtXTl>`Dc}nC15ohIk^te-WU${^Q6+n#(%XG zMU?5)>`85Eiin-~iU6Ru!^d2*=b+|^tSO1>bVYWjKPtQ5kh7Ly%bkx*x?BBN@J!Q3 zp+BlZJl|+v5dWucp^7g3mZi(`4HI75l0=Su-PptsjoqjnuMfvbp2kH8%d@-FUl(kh zxLL+_J8N{_?}^KVjC9(6IZq01^UH7#ajCO!k-Qjr#ikTRg$nI)H2W$%cw_p0bp6pv z$>6e;ueLUF>;B(G#<4QFPhDL?HhvH3fV8OQwsd$ZYlPH=x_ZxwE=3&%0LOPv>E;By z4_aD-oprxmTU7dV^4rF}IlwppXW4hZUEA=^h zTg8W0M>qBWrXWX)$(QBevc~Wi=maRgTUqdAK4o!ef$ZYsfn!`4QB|E0vmwBvJ^Mnp^Z?^}D7UQbx7mQs#G z*veO#hjxX%^8?J&-j3K82cF${$YUBS@;r=vHR(JZ+hO{=Fw(a7YY@tNU$|rHUs*-y zl^YX9Mv0$Ta+9L%G)&ul0zO^OUPs;@GQmF$b!Hb+idYeui6g9p$JyP_ozoa@g&WV` zh!3ef%6#nhTx7W2743Q=+Vy@nmX|t+)pZ9g>OCv))H9mr=5dJB(51nxZNZpvqKnHE zh92!J$d$sl{Y;2us0yoDW3O|ss$jc;hfJYurumj8uB$`+HGhA*_EKUG!o?L{6z;Q$ zU0j@g4-8?Xikfv&W-)6%3QupSA6&)*co>DXOPADi8TAvlolJAZ1 zN0xDT?uaNwzgH?L`oh1|3un3++1d!dZ8^Q*4YQW8(4nx#i*6}6d4&$xMsWVR&DcgTqT~kI z@>93kZygh9~Tw`-}#(BvpPLrB{>DyKxFgGO{>Re|Xo6mohRn?#&1G0Z8_Gl~O> zFPY!ExfJ{tF@%xtfii4<)ix)|g8i1AGx1BZ-~uFwZA##aeIaX}@$!_pyJEg=Ma@YO z7u(r+1TaR%4|C701~HJ$i#6}JjRyCUyzlbb;pJ)rQo7$%rYQC3nk8&;{qXHt+GSOY zez1%cq}oh!bUrCuR@7}__C8KImUFuwEv#o$^Y-+U->O@3Nx!rp_pP)$`QlH`+D(g1 zjgp${Y)X$;tE=m*z8ntdpXrt?`GhQ~nVchm!8T+xu)pNA%`{NX@EOI|KT~T@A$iru z?tbyn#cM?>5S@Sg{eLA!R_%<8v&}Mzk(oCxH*Ru0HrDswlY7@J#pWi-=Vp#s`YA z1H3@`79$|WfVWC}?Je!Vec+#AAm%?AGwxlayMOg@j%}e+>SO^>mse`emnAhj19=Yc zR&}jyKalG0yZC(PfwU@NPsDR>vHtA*`XR7Wg05!R+ z;03Kqz-y8$OIuU}esbv|EkKg`RmS?YC&ODxcR3U8`hGO8HULXmd;AfWSq)bASCiqv z-t`nq4CV16;ks3qpmkmgU{|o6JmF|gKyl4VFsX;KQ#OBk=zZ!E7!DpY`#L~8d>*VF z^u>?WR05-e>#1`x@CD~5w$t#Oz|8xeK}KPjmV%j}BwS1dKJ@e;DIl4ljeBG|)s)Q1z0{-tF}9VgXN zxtbgPIIy-orByZ`HgRjTI0Vb;OL8DsKnM$9 z^GdYCj&^P5v_+5LG~RvI)!B$YDICQnFz_NDF+GfmeGK3=LHMiOpvRS9qcn{D6hz$FPWH@35|= z*a72eMDptRIM8?mt?+o#VHO=73Hz}?n9F6!+P#ih8lQ(%Z}9?=s2uV%VpumI6tn}` zo(gXd5@rFRp3#TR7($N@Y}Ju>J?aV7TB3Bo)>}yMO3<`Iu#{EfxQ`786*K^H>Fn{* z&UJQvfOPoH`LNwqW|}8&o(Fw#Moe1OM&bvMmI52#1vSx$F*E?37D+e)r<|Z`aT=`r zIE)(K&WNT8(gIvI9lwqI3jQ=(`JcQh=IVM&J_RZ$aSzmoqFL!DdSVWw*}5m~_!%6< zE#S~uml_|O7`D$bPfOUT?v_QhwN1}~`F8Cg*~qy_?f!;IXsfi)hEi>)p-*106ex1rNvO-Pc0Q5$+eMuS)%}ev}{t`1E5Vv*^ajw zQ9yqeO_oRs6&62X95C=&03Z}epOs()J<;S1aLTp{DNZnrSwAPV0WCe39 zGRM5qI#45kVaPtJ$^};`hgml@bDyy7D5*3pRxtb*Y)8Vs_oX?|2kwgH*4h@?6f_Hi zIKr{RRSY-zHH{?(#kj%4#x!lAwE7jtNra#tdR84) z#V*F~o1S?lOCDGfg@Ekmd#1{s>g7PN*_*cM2yY+(xNM)(z9NJE$%Sy0O9FtNH|e>! zn7)y%IHlMV6RG{|2s^VBmV|cdOw>mMu#2~!>CalK6Y)%WyE`_N)RNR|!vGStIq&o#{3UNg zD6cdqooQ^I4rm&`t>(*KBHbF)!*o@l43lm5Sc;B%a@Gxyg+@$b6rN)BkZLf3*-8qW z#;5g4U8N6DX|-Wk2f~n0w1Xs|)vQOX{jH?a`aik2+e~}ZUv?HMYfFHIfZFL{<>92I zOU))ghGO8^_=CYn9uP6N_M>4;RI`P-f!M4HBL|-bhYm=^hUC=c6bAy~@dDvp$)tqt zBkN{guz3~uq}0KHrN)o*N;WLSf7~!H`O4pxJrBU4)Pn*Ws>PDp>;A^G)ctHF5WyXf zk+PEa!x?1t)^?y-ze=_PkdMRL93*GZ0>Z!VR$bs=)sU;$oXQJ7&wq%I#C2fXqh`0Q z74EWvCY!={s@479O|?hv@M3QVQv8z@LlsM1!RG2CkGk7b#ohWl5;TzN)zVA=qMR26 za#IwG+$bHaHItbBhb2Ei2fN;*oL`p#)qH=1HH8uTpo^6NPFr%Hq+}li!syt8!XiH> zZ=j-8U=28u1DOYfqND;~S#g-xS)p}oNhC-2a%+$JurxOA?{r&V|4D_}RNLR=ATHwN z4qp$BgagBGJ!uPChHz*xFo4Oty_MqxBIIVBeXMqLs3bI0{7l3BkwYCT?{sB{b&C&` zMYiWZ{C@Z4c7-scFPXt?R_QKVFTz4`4d$*#JlOv;cD!$`jlcbD(vp0DkO?VePJH3{;dzMYM5} z=qbPft@{HFKSUj4z@u<9^ z2!?D&TE}X>_yq!5q7Izp>37>pas!_;^CkHbiE}cr)M`J&`KoU`1rfKgw-N0jFT?@A zr+fMV1#>-#(UpaYO?izuQhOnCs0hm4jnuztiqZ0rC(?(E516mW%ul`8Y;F=Tc|^ScLl4aAxh_gipl`^aEp&a3<&D) zljfu*zq=p*yFf4LFf5|6$OmY$sLtsOB%arG<^$S-<`kkr;h_$jO zB`fH{U%sQ|N4_;?Du%-of<6FZO0Z^2W7U$eM)m`yy}#A2`qRUyON;dfnh_T1b=Rb6 zt@gPdBqwNBjeic$Cq09Jh1ar)+X-S3j>MiAtbY$52vCD)R<`xpmha65chR#S20(Pg z(2G{HJrSWhoC4c;`_fV#hlVjy42>TEg9@17dH~KCu%CwTJbBR4q?EZvd@Rs!fgZVk zYWJOX=EzYNsOA`7cu!IjrS`e4w!1$#1x-y&1voZ<2`6O}tNps$!@~u{KlOjwaFb3$ zqdwb1qdshE|C2*v?3*W_7_4TsBEl%0ncEKZIabmM4tZ_>&TX@=*t7*CTHU6H#?g~- zq;%GU!XUUmnt!Ka-aMwqT}z~SYjZOrWpLa#_0HQUsI4~6U_<;1N%BZ(A&A7t+2;&+ zM1IJwNMI?n{p9VXVf}%c1IE;aW!603w^kHP=|KAlM>?l6%1f%Ux~O)ykv19bEOy18 zB#W!b0K)_nL(4mS@OMrDK7Nm5r-h-v@ny5I%g zbZCwou6yZ7_y%ly$QA4g$9{7BcI}6M%KxcY&6t4auMIalAk5Dz_9R0Atk8??$ktwW z^%s-SYo+lOYR#6z;}vK=GE&8B7(83+DOIrq!n#_&+`I5hufyzFNnY&Hdd)!ZljyArUWI3r3&>A=p#eO84luY> z8p}J4&*#wL2LP%^`cz1ub~N2)??2KfLS;?Z?pD04Kt#k&pCh7`L`ju#WA0glyQBFO zOTneCV$<&E?)C=kV#bRa&eQtQ1MUf;V9}2w-2eD z@kjta(L7NM~txaWOq!6!-ZM~T&ebq>(lXFWj*e?@&c+~ zW^q~qGS+qAzxVr=c2v3-i2!1CT-!8Yx>_zI=#uK6sspr=rQI*&XK?cz0p^2R5Yz#L zz5=auHXeFJ5Q)R9cA_WwHbRycKyvA$a_m7%3CPyWvjfu8c%gCJM*tL)?^c0PD$Pq9 zw(VGz&V9c}2(@WzCeFh^Isltj>rf&OJPzTaGZhuUIO!>$GxK=0Gd=~wFhz{P!T zNX%=)ZuLPlE6I<|t38IB=Y86}-J%!AGc5Yt1u;ula4Q+m1>q-Jcv%1LO1Loqet9>fCW! z^3+RMj_$PvPKjytngzLv@6FI~C)LlBt-qxynU02pq431Ss`{5!%v5e`Nl!b3+6hs1 z{3mJ_o_|l?igzd50qXLlS?x?DDJ@)S0Z{$z=_JL$u*7h*Q%jfBDyRHe&X@)|F!}7K+IWhyTUfoxg*UH-VUMM^+zOVgy|q&U1_5uWPJe*IcPl(1=k9&q|ygHt=E z?;Vq&yRDDq46qSTv=gSA)zvl3T`J?rO0X`xpCuT5tIq3eL_kJ^(!x&sE?hsd>dCQZ zg+jRq56?B*jog zS4&L0k0!t|l(1LXT`+X;ebjdbGxOyB`)@wP!`)hMU~6=TBv1Z6ie#l zApl&Yz39VE;pz?I;y-b4^f`hth`HE>z?+w%#gcF*;=Tdk7<19leNJPrr;xMLylPXu z7J|mitIasULg!N94JmO~CDY(P8+9CdD=NP-Wrm_@So`AmGi=*W;$+icEgX>(JH+Q# zWmkhQ{PqY6;PnDxue1&f_wQ=l+-gYPKqy`n`?KAH9;khYbt@nU~A)66e z6S@U1zR2QGJU-2o6V~tfS*T0 zqJ#_B@qyFtkhGsH0(Uk5KFPV-KXjSi)u3hx`ZPc9FFC1L?gr|E=NR4z-?osTG=48D zd|O5I#pKh?#*}bij!Yvh#)jCEfWLeF$_}9EYNKWWdoC;Bk?@s>N6e8XzO(W=FxbOf zIT*z7h#8fCnb&Lwe{X~LNN%r+3*IcL#dlQs^Cz;`v7YPwQztNT!+5J1@X7wQFAiBk zJN_u)p0(}!pXT#Ca0AGqBPEN=CIKoi63zCXeBXVsU-gOKlWrRs=Qc9jlU5rUr!y?r z2~?Dt=UjCt9`IGmxq;wS>}BwKY%Y*E?mvlLzX#KRSeH|^{|*9K{de$x#QyJt zLZ@mj`CD8$$wc2MJBBIY!2b@84*^6Z6Mc4@c`JZKK@yQ)Rsz**018(_7{-kbW9zes zJ|pM6<%L^ZKFX0_icbG$^9cy_TW}Ch#(^W_vV)m4vR>@><+2OOVe4aWUvm%rGKz+rX`M6y~DkzL=Ju%=u zr_hXnqvo?hvHNK4aE`{6dQ8EzS*jwfNTxW!d!75UwHTWfgKk!df?Lg(Y)!?#qrKK` zIMwLu+EO*&T8i&3E%YZ6&GN(Bx>-0pQbXGpUO>$(&x%g$?iYAUuZ-!3!E@&86*xkb zts>K!V_~-OE7T)ih8bp9e5_4Lu6?BEn@_+pVsz1{x1+_>zI(+Gd+|!gvwgdymdpS~ zEU^76S*S$fjI?kJ%FD=yRrhiQ(mWq&8$xRo;!V@@4WEY8uX%SKXbXp)@2GuM16D5m zBPP7TbI9`C1;dtOx`Hj&589e%!ck=^`iZ8g{wWfhfoh*m*TF$71yu$$2D{RNyz-j5xXvM>elC@;tx_J}Ja7tAvROG7FZI-~oe1xgWS+@WOdFs3QJ2sq@Cw~zj=Ldx-tjEA(vn9+*R)%j%wukF9Uryqg4F)Jk!gK>`zT}IA-=I6A@3$7sFkeb8fD1}D`aM&-q*ijeU4a;2)qdMlYen?w>_pe-? zBib-NALB3;R*Hi0IA&Bl00xg=elM<)uWKE@GHk16c5dtvbHtFZk!kbLI<^>7kd-~! zIS5?143a8&uAd}J(UdtG;s3&{)BZpxdwUaf&&&4bhoT1tcZ;HuSbgYQ#A186emb^)K!M0(TF9Y+$9Asfp@GXWh`bBS-Mn~r+{~RkG*~+o`Y;clyYVn9?CwBo z43Lt;AQ%?l88zv@IlrLhnCENh?2zZ{rsiA#7URVafqJaGJnS`SGVQ$zV>Xw)PESyG z2Y6b0pWXdLfCg2&jjz#b>G8B%7m?yAzpcoZ;QV?XF`9{GcJ&jB=ep3+;%X+;!H4r6 z4nqsiph!e+(rl-dGzGRQE!PZf%Ipl1m2#`5xMPYxNXef@$mMs9`ZViC;g-fI`ZE(H zYYpbn9{dRQM@N`ks`D)obXS6d2**YYpZQryP9~Sg26Ua%5~leIf7;c3lH{hTg`s*O z;VBqGe-7KHJd*GY~5_kIr7tnQr6ZeDC)wf z%LgOldf&w7owl1jGoi>^CqujhX{;ml$-Wjvt7?|d6iPBpVt&3^65}^4<^^$xFP_Bs znbnQIuyprwPUUN&=9`poFhPo?O%GEv`(>CP-X4|Gr721Cz2nD{#yoU3v~r44A=jxA zjkCw-bBdm5u`MzS%Jv#?%1b6DaPvCIk@^^m3KYvV2_X##qkYCF6d6>BS$wrNMc8re zn6cW7^o+E4`-zsXs~8?(z~qF}kj(I13U=ZNF1s|!btViXNqL?J)YF7Jn!sdi+qVBe zYJrf>3?{zQ>s43A2a8}8@xF=KS59^Q-1iMckM2&gYVbWgVr3vm2a@bYhU+*mR@8!` zX=|~Lr%|Zv{-X67uf+T%<0vxT|D8FiTBPC0lY!T7K42thiGC>B06P%#V`YqK!OPOb z=D*(fsZ1x2%)n=fr$@sj=x@bc^ zG5)gjVA8MN{Hqqir~>0?ccVo24GVvkuOZ36sKWVK%HJ*)MtB|w{Y3NP#S+m?($d&b zo;gA>^)8gZ*@~l-)UoCZof#v7PWxcnFLI(8Oj8Sp2UZL*a7`A5;yevm{rt5wOp%p+ z{}`t>4p)lK)2yRzxj*TW_>fA!zCp~@Jkcm7e3xVRVR)&LdI8y%%^{b4nD-Zog%vVH zQpTlBm>F@}M_#O5FGOnjiV3?nMu>_Dk>#IsI>0-6haJKmO<1}sE9Nt(^``B+3%%)q zZ1Z&Okjf(Pr5G+V!649M=A{h;$J0w^hg8kO)-O&B?P}_j61;Sc>Le%c+b(2CvGMX6 zYslpqlz*{@JRzxhX>_PRmXb^3LlcN*<(^F_jVwb2cPnJ6DKCqV3|a2U8qCsRVMdZ6 zKC!U}n_(bb(yH?6LnbUtZ^^|qYX8nJr=jWFe7F*((7iP^3z256)EmihH3OmnAW?0S zCPV74)Ub&}UeD7Ax=0(#NxYVqa6@1>K2iRL_d?B*u37K^Pf42A3MMFiN}77jMoP&k z0Zy4V@E*)r_hOt*zK`Meh7h+|b*YTIOC~S6(j!q0xXpCTdgcb9KrfZqCp`gJSfIPf z0#kq;y4gzjLCO0>atz;gkxh7CU~==!^f0|Uj3miYaq`Wypj_QgLm1PW#L$ttSX0pclBQDM z@bs#WnsHsCdp1v%hf(RD21Z`ZIXJeZ$23tVAExfekZfTnBNh0h@Cg|GK|rCJ`;ANG zt1*tsZ~-hoOB&|2?qc`(LVrR;RoQHI#fwAY7G<0!6wR>&BnH>x%)vo^c=<()F&%qG@0n* zC1IfCROtEOhH%{DupVJAF#3s%diA2Y1W#Ga6G`tzL?72cha%1UNES_K!+J<~E|YLLo( zw9S&hXZ|AB`;oYSb&M8>1vMTFQxkqjTGewf^m#*IaeB4jiRH`vQSaenjy-0abq{0w z|3lngMzxi`;iGV;ij?ABpd`2!cNhY}rMSaDaBJ}*g=w*b5Fofy+$DI5wGbd!i?%pL z3lu0;oX**uPJjRPet6G0-_BZDS$pNle)fL+mg~Cj^E@!1!PPiuKG26s4eaQzO`b{* z@zNY&%v!5sJdGDnY%z(8oM-`94D}e-HfEV_$BY7jp91Y*Y19sf&>tD#jqcjedZFn# zqnJ8tr5TdThk)%N=^HnP;X+~&fb&x};|%C|y~{FeFqqRGlQ@7|Pw5jLPIk3y1GXq- zA+jSuLYYFH8Osz+cb>EX^~}I{TdgC?`HxkB=y3^0NF%?a+v_XT5vjgq@8n;lq2Jt7EJ#ir;I9*E#-GR{ zyp};v@koY-?1Qi;UT4h{@y^QVqU9*oQ|+MTzI9Ew)${!t3r zP0mgJun42t)1HoQ){seMLdei!OSBJ}IQ)b`RZ_w1Clua16RFL?dQRpuM5$sV=s_>% zmU@)sfchKfkmw2-hMlobj1;uOYgrW2N8llD*~9@&e60d0zF6`H>;#)v(bPT^Sm+`n zQdvsBxK`Bu0j53lPUO3mi;esADMcM_QLWizzN1%brm#}f^d)|#U_{*6Wj;2;t-grp zSrD4Xg+Zg@U*mGTxYV9u?!weiv{LtvlI+asLos+JEtR^#ONuDJ@AIKK+Kn*8=xdAZZi0}2u_2qdz1FVojq;}_9qWyS1HLOntW(fNw zyVi4W^P^5?T6zs`_E8f1AGHo3O}lZ7M~lL9l zr$=KVAVe|bxt_#_*BIVlx1&HbjYNwg1~**_M4Sy+hqyVt(?+ACdLU91>X}gee)CBE zwQ?0Fhq^*B{&NcdoN-oz7167qR$<|GLIr*3o*BVMjbI9_F7KWtrYHas*yotu$Yq8C z;kWT68P$QADI-z%mQ4*Iw2?W>PnZkUwwp;)+eN_qM(;iMTn&=S11{d)9E;Wye*qsF z;{n-RoH=HVbsaXmCfs9Y!z)7`T9U|MB5Vqjqm0V|M>a*0tjq8`v z^U8MDbX1~;>($yEk(KDAXkijfo~%mpiF;US@`}_Xok-hiwNCVay5)xXj5rQTSqdU^ z%Mefn3C~YjCYu#0L0mWTMbKW%4r;q~waIq<vP(*mu)w)e4KZ48l#8&dbNFgu*BS2eGXvQ$C$ zbP#+`LmX=J2YsM}mws$af_g$ufm^_%5n6U)wXYly6N|*6+yhP){p^sK#^d_L*`7ig zKmUh2;xi>1%>MALa+S5o0`(Hkx+n`?qQcg7jF+$rgZoG?N92=w=|<=2F)U2|^=Nu3 z;9&AL-1Adg0Bv;)GKgYr$@JEq+>y1;g$olcu)kNO5$Ezhk77O zqN#oC@Wmv9$M8{ewQ&<_p&hXetEGgLk*&icu%7x1x_-Lmy8-tOcT&zw@dHja{Y6Ml zGw)Lhd|ho$gtHR4`zn=2rl{#BSdBfWuco74ctu=$L=!_IlX5>}p^qD>kCusu6TbSF zUFLBLb2WXz%))#agzHHX6-S=%u#M=ymN~1!a|B}Wv^ArgSxLTQB;v4v@g$H|Vp3jN zHD!mF+;Bxl!{S0=9+;*AUijC#NRL=>!)4ZF|ixkLdmwLux&*u^FZ4h`o)gFCh+`WoW03#nEsM5&ssS38{vPlyBY_X7nXKeBKUYZi%Rj8k}Q#GfVmK6wGLdob9lrO4}-R z5!Xzu=;`8;cLCi=3W|tT{bjozOpB5No%iNrAVWSC6TG={{Sw#>!0-g1Q8xJYkck$A zGYo~BHtb26#}Z-`nIT9-+Mo=@2Jd`F`kMFrR{<&0*zXQcO8Sl_A@1c0&PLR67-436 zhvK-26r46=4YZ|=s)Z_v-IiuP`GjiKQ>ET>vu+$ab)IQc_F2(vEe6eu;|1w!q3KN{ zn%qr8@e95DY_1&EY+EIw6RcL}G3v21F^|QS%KU~qdYP1Aj&|3-9FTl$^Qqt3JMFDz zIQ?~s@RP1!&z??PZDlCnkmAo1?%Op>j9U@Jy6=rd+wQ2Q`coksylAFVL^X(T)~P-m z&D`}SpbUrX6fBMM>%`WQq2yVWVsB&TC>%ByR#)N4Kfp_iwI7imkTTU-Jrr}7$@GS< zskweJj-*sp@BUzybrQ)T5$f23>SY2YVuBN6Kq));BJ9KXMREGqL zkIZa4j)TXM_8?KS2DMecx&mY4@_(K55BqIhWJlCs9Ybk>tm{;gyu`NcQwZyGmqC%~ zjYHoiq67QuvK@oznL|EtOCzGhY%JB*(C{4En1rDy#&b2jlsBQ=`w8r0JL)iUVA3Tf zU`_Aq7Pm*9tjF*xzJ5?_s<9V!k6Rj+&y)TJY zTqz^|7tW$;^Ro5SK@gI8A|bY?s*^~8s2tUw$2~O%5G*VoxKOF=90oe)GD5{EZD|eC zy{tQdgsjCBm+QWkYuw#Eu!K@it=P#l5I#q)nfq%*iv+gdi%DI%ps+bjU-b@DOeV8X zE~c^2jvSNU>`X->thDCm4Zc~Bxh5CtAbtfOg3UZlpK2e`$EfyVx!$Ix10h#i&(j#7 zhjpVFwqh@aY88jpw9yqSJhKQ>B&(Qyu;x9->F0)sPXwv#Z z3NK-sX*r8v zEQ?iF+7LIp$Z;?5&pS-U5XNf(C$Yi&S4~&te3;w3fiC{pk=7J1a#T&5@d1P$rpF_p zAHdzOr8WfQB2QngTgV`RE4Z!|lw#{824ou-avjmiutkv8S3WB>6O~5mZ)gzM-XY0f z*);@?p)gUlRNN96bmmjww=$^^9rJ2b((<4LnzqQI72> z@b#>T7pkhUTH;!_AGvL(!-W!+=E1#2*Rxrr4GW(-b!WH33OXyN*!Hl@+dudefxB2f3~-I|~KI>oSI;8b9%$oa&@jq3M-hT-mG&c9U3i}j*rH_>|k_n&xz`NFXtBQg&p z9wEOaqlP4sL6O5c_|(nVLbnH~5z3f{YyD*a3qxQMc!4;YqEP=Z@& zW-sZhH^!9HKI+rWH5Op)h<5@IV~pe??u9bsYwDK!^<(ya;3_d%20<)6Ed+BH1q56H z^UwDOr~Hc(@VRHy_KA`hmtNQ}chEz_`$s50P~f(!G$7;p)R zq*AYRdRWorJZahN-A0uS<-#;%@N7TVq0}OHm^N9hVkt!cf^%#CeBv(S*^;N(x zuu;HcdF}vq1HFf;^=R%TwA#K5Arg%Md}YfyNsIzRD1x9D(9+4k`A(C;A_)rP4aGF6 z)FpnJp~)uv+k&dWuRc|aJ%I+9s%Bmvd<^W%&*z)k2Zi*NmkD~2O6)_99Qc+pR0lDL zpTSdYiNF4-otMXYnU=k>W*V!qaosx1w1_)SrIP65p38i5_w+}pm>J>B&#;bP2v%%V zWkCq`lnNxtn>(y#$T+ztpltCIT?4FsOEu>WnN;_Ncvh*vQ$CmJ`oZG+LK#5mZCHgtBQDJ(xY&?3GhHXGYPkW^|tun%2v|H0Yz7<3F% zj*jTAxc>g!4#%m0mo%dlg9Z7u+6Do1jx7mV8Nhj1mMe{pU-cEQc|LJdSyygEn@I7; z1Cb5HEf5x7MPriRFqcIdX?3MwN9Q-pW%X%)`+ft>Q3R*Cr%2A(HVaZ<8yFhsW)npb z_M-^wGiL9%Vr_Q}om8zRBC08Zh9FI;?BvvtUD|>TL8-P_WZAKrs4=Sh~i3e|Q@x zE1@yRv8STSt#uAtHU+EFa@{~!b~MYzXwJ-A^G6TF8B--~SdWWQ1aQxg`oMJSRpiGo zKIxxI3@jK>ZEzE&NSYBDO0_lD!Qt^hA<5}_scICTo;^r~#?H(e7~fymw6<5LU8&wB zDl#clXvTR95GB>{zvw5yVORWyJHK^AGvK*?h!A=p<@&)+IBr$%A*FPqpOEPE8vo(E zyKp_^ZGvBrTto(8q2L?W`bNEd&Wzb9P8Sp~}$R5Ur6?_ohBadk*W`0{-Di z$xO3CA9Y)wfm)H8aW{SCf(~s?R#lkhhN@~7ZAPKjxTq-TF|}ACS?^MR@GtnRKT4Gl znW{mxwc(Ew@|PN$zf- zbT-gEutc%Jb?GeAW^-$Oe=$UCOH)cSg9-h5n}BoYij&!zY8prfZ$yn{s1Z=MEz_G` z&!WBcA28Z#htV_l+($Gi9)HA2yKQPY_!FC?z#*2BP=w59O&bdK0e$-b-GpcHlaXsW_r;M+jy}nFVu2%r_@Wx0*g_;1y8P9YE?;1W;eA z)Q%*nvLQT};LYbr51H`QeC{3z0R#EfM+v2X3hO-KH{76x>T{V#`h&8ZOb(eOY@yRJ z&SnjH_x{g2T3OZWVKBxL%CE;%O3Q25C;sixtMqTFGpzTWTdU03YvScsFd!~0%v`B~ zN~OjH<6hvSTx+jF%VXeV1b*wE6;p);kyk9iBl!ocs4d-VP)W&#|)m&&xNYuSdUbSk@4 zqXs2#ILnYBc`s+4ZOW(~iMg|8+1GnRSNeTj?JY3H&FomNQvvp*$o{*Wb#ZQNKG0dg z)+h~FY!QA`x)o=PWpeZSXu`gmV`-?q(+n!|jFyWygfA3ndJjiT^{q@H_Cz$n^nY3; z0lKiK6sw`w66bJ?`^^0q@Gyocs@MBV8sqPtS|2X`tdc(zsw#%hevxQTFpaA;{uklI z$L?O8IMDaSxWjwg%=8m)o)7@a(AmUNLfGI*V(7#`PqT#mw2kzw2E%A6$xO)HE{W! zN&+8P7jXiMUlJ0@qCnkiHpt(b-!*;tJJWH=Wabm+s*c3L^)xj87xFdGw8e|Si=uAB zb#N78BSf5GE0i{WNG*x?)mJv|hJWk_sQ`&!)z2wA&S_|68+Vg3itB~cyxaKe-ebrd zP>hTZ>;s0Z*IJaD*M|0jXc=jGr;t{eYPI$W*mYQvAf~M35SVirq2j*>?~J>sF>@z_ zp?%QP{0h=Gog;VtFq+NiH1S_l(}420vnT@zN3<8NIhX|JHJ5A7RKuHvh|f3#vn6D; zu2iR9Xu7*N;bR&eS^$HpauA6yk1FKQ}UOKqQPWO+qS6Q4IrKIRHwMMAGM3n3uVxJkwDYt} zgI`L$7nOHvsM3&e_fW_&is-8#Xo(dqB}@T`2S*gwNxum;cT;PeEQTlNxDR<2=g1B` z#cPZLvO?tJzkp832D~3up@M1OfaGBq{?XKp)s7LZjS(4|=~$JhW&xxX@r(mK$fCjC zFqk1@mngI_eNPpL_usI9w6h$M0hWO)WIhDB$C=uN#@gOD6TO0$XxwQYAePAut6%+3 z&ieb?wmX;E5!lG|%Z3>@k#x~1kE+(}@@IwTYIgG>2$hu*Q;b`tDy51smK{3~vr8Ud z@2%1-C9Z8c$yE_;Qe;hziv8*@=%dqzSLuE4fOHQ;SHi3dwUH@-4>r~WlU^|lZW=RH zse5{I0tqbZn+}oeDUp`~{|WJ}417P7ygxbMvoc65XQZpWS=l}~01`a&t?a0wn)S$e zZwYIM!r|-XloyFgF_} zF&7Fnv^N_bXSbKJ^ryg<%AiYqp!H7%;BF`G0lx@a&%gm?Q|lWL8BdeAIfjSUYxiC# zWB2!2+C`v9c#GemXoG6K2B|vD1S1gJI>uyN({3%A!`l4>KarQQ1M&=*Mg_Qu;3P%) zs+2vyq*@0GsX?pMgU!^_0>qf@*zI~AWn^POD zp+7&d+Zb2V3w3Ggc^i77r8&WmbntSp*AXk7mpWE(9<6@`bFIFJlR{XkTFcQza{bM(~iCAE81G^M&j(%?q{i<6Mw z4d%SV5l!lmTr`=Umn4^5rNZk~UyIt`f4H8sw>{uJ5W6OBnJkuLq2-Cg=Q^&^sCkK| z@_}?=Hu%;h;rm~b&0gy(q7hq~05j=u?30FO zV+4N$H|-z?szzfq2~l0&i;6fE#H?r9TR5hlqXa=SnrImW(W)JV1oT^y!x0QzHxn{D z{RD!r6?}_XTz~Peha>BgqsAQC8oJ8kez!Sz<6F1vE+0zTy{(pb&s`g^ z$}S&u&szYZQJsO9I91)#)Xd^dm-}zM^43gR#?Gt|M@NB0j~P#BfT%mCvuRnic3E`(OFm+wt{KP;G zZjiyWa-x?gu^kDuxLAQfXhB{jRm+B}@~j&d#&bY`5$#37ND;`H$iHB(9DV7p@JoMh zr8+jZpxU*!Gl;wDm(pNgr}fS;+{J`C{6wSQI*qchn}t%__5!J?)rw4y*!o-1_M+&J zLjDm6Rbx>NL3O81O+D|-X)P@bm4JQT9n=Owt&NY>!EXJsoFwhKjpaZ7;ysOpRXI?W+X{%U9}sw=Eo2Dz%nii*^5)S zd3nj(p{!JBTa6x~6Q;G!ctnoS4u0cSLKoWNodvTh`cjP;xE&wtFgE zAu&HS1d)1&yYnr4n!KoW*pYym&Z>9|5X+g-f!@-^A_H4IA0xn;3NlR#?cP&^A_F{f zj?~N)-g^D`Z{Z*X9eFK1Oe0ZymcL-#85(#Wc3w2Ixwo4;;C!(Rrk#w4QZ+8HjP#-r zg*WR#`@8;dJYhapO?%;34`I9_{ykE+J$nhsBieDzOp1o{HQ$VNqm|M&6ysd`D$#*0 zY3Nd~;zTt67&U*t7a^li3Hw58-ra=(A%Jc2exdh_`S*cBwDv$N=>*xJN%ae+OMDRn zvxk-;0|Bz1ySHP5akt~}INMNFjSX)+TdN7ii(*4aNdDr>na=MT1a$SP+@~CQ@Kf!G zZ=63_w1*IoYQhYa1$TRur2TjDNv?J8t+jYo2Tw*Ct-1n>4%<-5|BacRFA{085}W$%zHw&0pSQ3-BMhbeefLc?@3i+6 zRTRLCSc$`30X>j(k;ca=R4<`igzHaD>{$a@WaR_HibTw7ws~(9K56BZNQ`^BpB?t! zu|}~Wokiw?s!9ZC-b+9E5H!YEYP(Z3K@!4ly@s=B!xNc5?Ik|s-7~GTMjNn;|YyM#7c@e<-%ciTR0n1?U)vwJ02SgH4S#Vg5{7T~1%UKY!x_y2ZMB>zsrOE+@%dtNHgU#Q*%T!d^jrbJ1bTwIifJzLvShK7~|v;aW% z|JQ9dEz+jpLq%q3)8(rGL6F0=S)E4e;bF`h>GB|Ia)Jl9{gqtT-At8f+)h+L3m+B! z&*LK8g~3W{$>|w_lmMaT5K}afG#}G!xTaAltAf88+R>T_6BdHh0TOm>aP<%R-#vY+ zY>ZJ7nZfCv;b40N5NHl3LD%@hhar8_Sz=TLMLOK9(=nnyM$>=@KT-cXy!8puC;n_z z3eMYoQB~1BJ>GWUhv#WjB#BIi2vC-Dxn4bYR$5qtaJLQO_xbhGxU6Iz-iGtXV)#l| z0J37PHH2Xr;c@5yxW>Km*O~gdY&AQc_6q$zh_;Pd*s4LYNE$|Q3;;9((A?Z4X`+{G z?$-Un-mDyHAR~L|e9Df6*Pl(%0xOno8#u8Pfcx;fT{lz4N@qdQn6hBRPbBo`E1VEf zO<$2KwxUM@W5*qY^u`5}wx-d43F|%h{m7`^oDpNjryNC`Y(JsO#KZ3103CQESauAo zhPLN%Hb!uuw4UfjBJ5Y5QX>!+Cc#Cw;u|FF$@sfTQL$A!5f~e zdw=BzUB8-{wn6^x!M}5phLZ%eVo^{VfCDJoH$54Zo`808Z){e{IufWd%Tx_cu#6CG zC4L#Q1X{VW_$?z7!UKI&vP3j^F8cv)MxbmW7C)&XCC+zjIbm-AV|IJ>(ZkfN_^k8y z5*AE&4@p(uGychq3Y4v3W4BdVnMqR`Khfa5jdXvmhpf;fYHYrd=l?U5-(JF@SQ(to!2yLuw!LVxG!jtoNks{x;%?En&b z@WRl$!bClps-`IWQg1T>J9^JMmm`SygR0*G7?ryFd;1kVe~Zj$M?=6J@cC-wPK?*| znvX-3W!cyZ^crY}Rd~IX0NNKJ?|`&8X#aiVqs8@8YWNw?_3dbJCCz`$C8758uPb-D z@JRs!9T72T{yY&4{+z?7Z=wQe22!sAe)k)R^W3E7hCzL#ZoaP)@qrn&^JdvNHK%c# zN-Wdy*OY6GV=L~ti)YW?_X=;YUutd&Zxrx_L}%;S^-ND)rTv~$w+qU+PbKKKDOwcX-U@4obAy)O?E7#kg}ShhRSR-{BuKz++0l5{1QxTPSv#C zd2Z*XQiHT{SlC>mLU^Vx_>k(I=&Q;Uz<6wiH zs8zw zP&fz_8l5xM|19iO^{hUW@dN4u3je#a#rS`BdIER;EUfrHg}|NvRr~)%;m@Z0-@cH? z|MT0%v?8WZd9@@mGMQ;_QJSAsiub|#XXND}1e2Y&U2Sge8JzlsBH5!#2};fVyApY9 zSEs%wuUD`$yl{Y0wAXz#1nY(wl;;_J3=EU|`B!*Rtv>M;zF*-}s0#6O<9Pf#>7en6 z-Jq0GrK;1Xz1WI)`_AZ+D}?#pd{?f^<(n>LegDdPKkQ*ZlIgX-no&-Nk8Kvg=P4aK zKT3Znz6i@L2mS+1vw}35SonU*kUn13tStUAlJ1HwHPWz*L1}oqO%@v`6;2s;37h-L z$#&%$Ruy%G5miUvp2Rxn=OkktlnCKCZfV2s78y$SfU7r8I&(vq`{6s+g{s@vVYb!b zIK5ILAP2U9&2ZRK5cQRB*U3QG{2SV6tlJ^8Q%; z?DENE7SSEO%@7B*?fRJW^s2j@#NWUz<)ddr$(E&hD&sLN8L@9acF#<}b3r;pQ?$-*R`2$?P2m< zMh(HTS{t8U(q*$~eyZl)3OQLqqY90!D02KR@YD+5eCrqH;_0t9xxpohd%PZ;PXW`&JzX<3=4zd=t<+U=lKiwdVJmcN$r zo|#?eCg-?*dfJT`)NX4&mA1Kzy7$kGT;=uYHwo&LP6a+>ueaqc0Plvq{aJx*nA zeErqrOT*+TPft;>gqd-%PW8EzNIqK$M$*MQ`$0x7;z>_`iX`0&>cZ&0uKA(~o=HC* zou{W+fnmqregLt2!3DrUbkLQKEiCO=q}=8Gi`TZ?pcYb9l$Y&~8I#Pm3e?F7^UTfl zAcV-VQnL_MRbT7mMYLHm<-BPq1ccVEyi14i(G*J>iX!UqxG#!NDlh_-;d*+($-F#r zV&dmgP1iap-IJxra(+Rrg$Zt7x91w^F%6?>?4C|10ZSh*_4FxXi!1m&eY;NYlm2r< z7SZ2)EGAGJINrRZ9Ybe6RnbR8n)^j(D((%H!Kv5Mku>Zw?%uA=jxXow*>zQ|qRE!) z$C?f{Ox3NO~SdWsB!|vk}UJ@p9m;SN%63ly7^Td{vm=t#XqEZ2m`N9dhL9Yov_9G$F z9Tnb1&8JGF@XF}&nymRg*jKybubNLGo#GuqzFY4Mo7YsR=Ax8uiJzkOEwzqv$AW~y^M%YZ88{CW4_7lSfiqJ=F zv->TFblu#%vUIqkp*w5Y8N!^<+xOVF;JWm~`c)-QQcjb48-LfWC=tp#4n{yc(F-No zE1P50t@}0yVPh;sLSeoC+)xfp0KRFj$^U-}Df;Y6sk`%u)geVmVZ^rzR8m*{u z3k!eyH-4fV<^HT#jObP78~!iUgFBUYye_+Q?dlMyAar@tc;V>}y~N;uZrB>6!FIy0 z9;|ZT@_GNFBgl3X9*6w#9RG=;>)AG~LR(~4Co0Cluao&D&>8KvtXF?TDD)qEXbkcB z(G^yE#r!q?SSIiDzFTbRo@U2I0K}Y6Y9y^`W{_e=++8-A0{#N?uMkhh*2fq zz;fD{QkVWx7m(&)>W(4Lrb*Slx(Ru#QBLTabeDUVn2CCerJ;+Aw$8uitR}nSIJG6- z2N9xz)ZSM%DSTm!<6A-rrCWHMS`nXa{&QpIHGy!C3I^7hBg!5`J8su^~;S60hG}z`4#{@;<}pRdV%y==#isntjO;?~@KMz9xM> z=`n^3ea?EGirfi~e>+8>F8B^162C{ZXq`=!vifdPR@ZuwWsgUo!$yxfC|+Mf*f@S3UH4E13X0s-2XoJzG0!8AINjY z*zf&$F>rj)YYM>XgfJN!v-a=bO&@+Z)2~YJavD$=+V>1xit4*~GJe=E74v7#!44s+ zah#3gW8RYcGn%bQ_8*Em;a3EIH7sl^kVSl|f={S4JuZ-r?=$n&?BC4&3`D*Te?}PQ z$5LKhDA>c=q^0?$>+k7$5>Os~p>)i5xn#gfe)*nr`Rd`HQLd++!D9PoIV{W<--VdW z6@#YP-mt8l%0;hn*n{U8Qv$RaA34{u87#kfqZNPa$RzLWk3*p}ADw;%%4+p@HjbSv ze49=#F~VPxJ>Kwn>mFV)JmkJCU#JAa*yA1BKpu2NTwTP(k;45zOn9*KuhAN3Bl&Y4PV4m!8uqyiIT{v4Ecve7>@u`y~8K z>*4brE=|(me{Q64Q||Am83hZPysJ8-OS*b5`>`)Ne0YCZe4vzJf`)+t(MCFdl*Pcz zb<`6raY&%r9eC$EO$Ob?(H!qX#!Ckd^&`0tw!dzr2p{cNND2^to3Q#iG)T5ex1Z7c zG22Pzcamlf@FzQQ`*`ca_ZAXwt?KxRJIR5R3h$>95|Gu&N6_KvcrA_JQ zz*B#+KS158>jN(y-JrYaV6#s(vX?FUm(zuiTGz?_T|sKK&N73hjW1Wh#1q;jnO^y! z6rxW(l3x*zt-rV#!@Y_Xs|~vddmp^-`K>V|*alQr34y97<`#G)>4)Nur&D0_Bapfh+xj0f!%td;yJJ3wn{xid5&zioPbA;wjh3D2bcPo zQ@M@hy{6UN?n7%Pxwg>T29So6ekVJcN8A_Eb5-h6xtdHOIY>xD_zpx-HfB5e`3~>4x~ZQe=w|f1qYf` z=7n&g7sw{PU>cI2d%nf@vGN`BO?^w=Gg^6pCXsuXyp0pW=A-B{<%e6Jgt&hQa?QUu zU5$;Ii?d1?Tt+=HXK;05WNN7VsPzpK#*%-@9YLOD{%!C_{je033I6KaDVYhfTuyAw ztDU(IS6rf;6C6{KoQ!>yslyKBNr=ZG9)~@uo#0ffHlD2FyiAX%IDMQ0>hiaFS?up_ zI?^c)!iXjn3Bguq1T@*dUp31)&M2&+NccW@2_BlKy%bhnEna)(Z3j%3x-HA1iJ9Oy zb&C#bGOx<{p~h>@`DA&{_Dhgk-Sq$8NyVIEX&?MH-;VYDc@?pZSHyhbAyc#jOc7Dxo64aJ0LN=8<3QCo%=+2EjO3m#Cwg~(8d1P+o6Za zE;=8%x{HRyBtJBtR{^`a{d2?SgipKanv^Oi?5u4IZJ{||H*@;+ig?-eL+R((u=V(Z zVCv3>v(=^@-IGw=5T;`Og@%7_)bksDm<^jguaIk<+JV&C>AGF_ctWb^=&d zPB<>cI_&4sD;LC-PsxGR@GaW^`0NMC(2=+YA*^qQ_qIp>~5JboMVRd%2Hfv?*96sd?%~)PL{Gy zcJqLg?hqxXx57;LIhPgqtTGF&GLvtpW*-*5kEc6O-mA<$5`dO^kZsA{>XTI(jAxY( ze@AOOG*rH>n(aDEJIlF6%Dpbz`6}5XShhcJi}eWHEsH+_566@3#}n)WRUmf-8}~Ii zE-t(-5#*b)u;F-~^}GZeZH?ULo+a+%d=kg_9+c{eqVrYs={o7AE9)JMzmx<`A3j5M zV3fNIOBPY^GLwtKvZ zPlwcWm{-{1@ldmP_U#4A&np=3&UHGRJ_@ye)?R2*hW#9(|L#sF=L~$Hn~{?8mXeZ< zq8hy-N+nkNpa70j6irvgl`3|U5I%aBEl&5>nbxC(=R@5~qoN#imYt6h5)70i6JiN( z(^>9A{t8hvq;rqEZ*5D&u&P>CabyX)-5PEK6OSHRF6)bmc-%|U|DN#WW8ZyYd2DsG*TH zOKCLoNLZeJH<182Vb8^r+@e_y6+}1jLvlVlMf*Yq0^d{(aM6U|-Gjjhe5?9K#Ps?= z8C+sV4MIG^iIwYHxsz~Cqg>}Q1eFjtqwCQtt7n5jmlIwsjXEsfh3gg&_$J-l)Ivso z`P7A=V^CrlRi>QG3QhT(KFdTX@#t|V$IV0TR%F0KPTE*Y!i0~)#DAdfKAPqr*rfBk zzqJ{LJ}6adp$y=-J1-43F(~t+N0?!c62lGe@8y^CALhD z>XrA03p|(Si^_b+Y%9bD>Mz8>K5?6EKk~aDR|}d_3I}q(*gNK|8f*t zj$XM6N)aF&y2vlH49Z%1Vb7*x8-;0KQM{yM+DRAJg@YA+`C^jj+)3W6G+{^($^v2% z^!1P6s&|&jUK+kOX6$?Bq)8K_!Ii<9;0A&~81EVQSj*XeAVJHsjN0k&v*2R0C zedj~?5Pm0qNgA&gTw9ZNUrS3r-UeF0fA{kefg+jatu=SOSWA&LU-1}m?4GDQa(Fr7 zV1S1q%69aHjdD6%w$Tqj{5gGk3eLP;ue_UJsaDXWAS%&44kVjucaKbwmX#|n$f5l0*R zu{In+BQ=Llx8LB3IlSu6>Of7#h3%ig{`OTI2ii>my)LsJfvS!H{)U z(i>OM&umoChu>u*mz@4r}Rb`OF)r#(_RqmSW6~(g?kPs^?c)F9N+~S?t3+f)lZ>8U;3Mj}E3J4{M z!4Z|8A+Swa`r8Zy&5n@??>Asdl1UNE#5i&YA=xWSy}Lqp{lNt&DNLP_=rZbEV5~36 z+6d6<{4m`^N}-m#_amg}^O^?0H^2zz;$UE%PZiTBKVcN}o0UoN0ik zQ?L_8V3jIUgoF+wK8LRtP!LeOC%L^}Oi4p9YezGzqWox@5&R6%^C+8;oDjDRBDB}P z8{KlHpuYq?>@fJ&S_95h^`@5;g1|_UK^TOdWO}S30c<&(Y+J%KGh0;Yp2!FBKRM1k-vI2JtIvTvyxyi1H7}7$e5nO6VC@c2Cof- zB4h5o%GL+z6|oRw0uLOV-kIUgQb>YP4v0&yLI;Y^+3Ca1I_9JiLOhU4@Myc%2YeBS zUNAjfY={tnGS7n}%X z%&o?UDDnph(;*dUo(b1RD9+HWJjvpMkY|x;!G}><3_cu%_RtxoK2u7*5rG1-a204D z3CS}ptq>0ex@It#>q3y=ktU1c*Ugjo=o9J}($^8QocD7$){2~F&f^Y2F>=o!phpLB zWaHEiUaA_%3}BfHdmIu% z5Q%;}%T9Uc10|qDsqNF*)@_6bezwzl1n0QNX!m^ib)Nt+C5;flqbTy*6cpgtOmX=< zPhj3pyi!^|Pttxw6h5lu%;!vpN~x!86>bafZKzrV$@D5fC>lvm)%xVMzu^u8d1WB$jXcOcnZyBF#`k6bSj zXR=gRRAD!rE0Y=hdFwusl83%BB}>>A z7eb36+<^tmBQcwzJD%W!PC13=-~t`sApWandY0<*Sf?6Yvx;(oXaN_iAEh#d=$@fy z20bHz2ON}ud7SM**uWh9+1>N8OYiNiJJ9&ZH*|dW51tji&X=Nm+xLKk45Cs%$tcT8 zpu;FAu@w1bS{`WHO**?k48fn?`AWI2E#s!KK)E? z+Ci{QdG{u4zlYTX5n1?pkc+2=BYb7w6Cr?O)V?qM;8{W}296^+mUT$xB(Gt*Nk|4; zrbXZ`I>MK)QTD=Q!yo=QBc7Dbj#UXiGzcZRL&YKx&i1#}-tDpHhKBkE528Hi@BHNq zx*yf|J`(cm6${%tC07;RcMPNmp$Hx!hWniFW?H8$lkG1uSVpO6A;i&L7C;MTOa<=z z{SFIF+olG*I1t|MZB(ZOGx)(-{IM^6KKgN%Y_^b{6wPfI_;m&)=bwG#QGI=D@AB`& zx@&wGzUr6FdV6L`DeU!yYlekOQ7@xp&CK@Ado-b)9xG9(byp*>ENg4^oWqyFPJL&` zV?RPDNQmVhMfB$T<$#n~AB#TvG-~SH%|lE~H_AhFdo(*z`u^q$3E2~E%2#^jaEEod zh>nONACH9ab>iW-hy1pD*AxVguwk~lEX>6=)+O1_kLw$jLxMuj;x`@ajh`D&f8C@r zSari?^t{x*eINV?D@^|Y&G*b*iPEycwr&ta8$l+z{B+Z{^@^ZC?a!nnu5?9KR#w5L zpL?JG-F)y3EG0n*OT6v^O)TIZ--N8Ba^jMOk#Cj4^@<-u9L0ru_<|C?c0Zw4Iet(8 z-&f3spXHA_-E$cgXOND+j}DN$kD)4X;MPJ2h0Fh~rosB6v@zsG&Q;%Yp3GR=(JS5f zgRRR#Pvb)Y76LUGSLkEDRhB<;`9u}SIigkk*+*af)t_uE{OGNs@+T5PoDnH#E%`%P ziXZ1)MNyQiEg~}*(Jl7vMsOzLvQAW?=yED9Bh4~ey;dBoN-x{ z&G}JZ#2I5gtR`dA^!yE}%`mVA>8EH?)vS;_F0FfVeAC?+D-giu)qhDSKCmv97x0IvAVz02_o zc=v{?QBdZeFRL!X7YR5-?FH}kK69T`{J*$+@2{qs=x>x75=bB*06 z&CgT*QjF&QdvF3Wv0!b^%LBE`yfP#i|^4+8W|wHAD?7~lDES<6sEn}fS( z#3)N}e}8u=iEu6J>j2Gs1y6pHvHRW*D0^luS2M7hON!&s0O6e{Ox!4|d{9SwyG|W^ zO-53>hV3DWg61N}ibpT;{gh_aSlmw53U|&a_&ZFOYZTr`ZwBh@;HCKbsd%-*H3bu0 zxgjK%JW^=+HP^3;S?|8p?IZl+RRqTR+qI=JR?8ZKag{`_xqC*5FWOi`2^%>%%;g3< zU&*&NWBZH7dHptc4wMJPfLnb^?&yk(@D7cf%l#9lt_Ac&E1%PK}sZimlW2 zks7{nStNMj{b#TFJ|7mWZEez<2w^ZUb>h~3rF2Ca6sNCIAERy_iUj+?Ti@KQX$DMDki-S-!BcZ=Nl(>UPY@EncCx6NgbqHClcEXPFO}brEKW_?u9Y630@{fa{ao3ZoCeM9 zxO=+J==xnz@$B^;84ZfQ5-R-Z0md*RIN?R_j~Cb5I?^aTLOZ|{y`rP_-^|6KX}T&y zt*|wxcFuLb<^7EjM5^G!6QXKQV|EM^c!=AM_TQQ?aQJdTSI(;JqRjNs_l3V>4D<+u z87G=2css0rE66nH2dt`I5AV|teR@oSTS8QXf&uC%4X+#Y=QWFk9#C2~l1w&%f$ zq3rNjk$IQjYEGz``S`38=z6NfQz;B4dZ>SD=q>zZvWLv=&y_O1zQA)v<})-+4-tXX z9hNz(a@ihu;VEh~3kXZQk|~eU4|XR=T+h>{-#2W_wdPDfo8_=iB;gJJ8PqLYu`#d| zw2{S;2h9gG?i})byrw)lx3CAhTI5q8niY_pd~t0in1mj~O=q~C0GHTL~4Ekfp9R^-XXDl_i@46>^~U}HS*lf z{hg+f@N&Y7g}(xI0by8BM+zd!SD{;Ju@K(z8bK)@ZQ%LUaq0{BJx;>VAE3$FckOWB z!oVQnEy}L6&Onml4}=Ey0E#KG+&g#RHNLZXdT)hsf7T~1E29650CneMk55TNc9f4$ zBnC=0;oOm-mRrhynW*_DUM{o{lzZLjtkdyN)V`sHh8jqYPB8kL`MU%ZUbcA3vOi9P zVOq?h^poFZ1*F;zBf;UiL$IZ{-?osCBr5$B`Pm3J^P!ehO3NrTKzwCr(y*>BBcYh* zRO!mjn{6+l70|93YO$F4#CtBuG|YC_MC4g@jOq*i8kQV{xhdi81yK2X!8l)r6M`py z`JouP@G@>YHF!!hucpLwOuL%=$EL4}*s$?Qw#sfhH`kSNe0y{V2IAZDzPI&6Cdh@8 zDjkn_DZ`TXC0Jykxd{-b~|Fn8CTp& zS{EdsxFArD)?k-bWCF6q;EU3Mn&CyBr^*{%&sgF(>~s>~BER`2E2*2m<15|0FhWD&rMM)qYS#$~ zX#?;Z2i_fj5^r4_E_~KEg#A0^3OCqYIuCHl_&(m!Dkm9^Y_1Fp9Ylzcql0MEZ^)`Ox_9OU9Xu?pm=*&L^MT2=2`{`6a4NF9KE% z`s1mfysg=DVm^zA++t<7v^m3zdk((8jYZR+63hff>!v`hkuIQ;hQ45QhZMNF*8|jA zqn`2cECmrskRUTi=7G!khrXXr23>}s+Ms9uPQX2XQU?e-uAT${OwNpJ?VRpApmj;G zW{Jbd_I?CVNU0Dlx_2?;w{h3T9f?9aP%5j}E+P!fohSnmlDhIu{(@y7qQy44reSxI zD_G%+Y@V44$`J${J{ta`z8Q{02mo2P8Ox@yz_X?6=~>6JGF@5ZkjV zI26f30xX@O?&y8zx5M0A1u8(+PM)#o=<>6WJ>mk5KIdZW$ z#B9~j{9)yeZD4%a3gAWd&c`pyU6xYI44;LD(qGh!5TNCI!}H=OyTzuPFcqsfjh1}R z{-e^Q@?D4f9$51~IHGdj{_c-RPdS(jr(YJ=ppV0ifdtu!98u6n+HzXK$E37Fu|til zAD?W{y(y0mD;<11Wl4S)#7BhO6riUHT@t(y)xh9TN4vh3CTLu@3ziFxVA`g;a28~%i0O$f z0o-2jYPm5ZwqJlG3d0F9pUTW$c%J|`_R<;M%f4J@Trxa;1!}Sxxc%1cn^_5pXV3PmxfZCQ9*C8>Vb zOeHbwK!538Ewi`&r>BkD(7L(!5|=WhWElMwfXNc&I?BK#4jy=KKJylB-MO@RuS>QJ z?oV#HsI*}Rg30=>1oWqGs2#rq#3beX%Z8sHp^!e%QWI^zaMA1`y%KcIdGat#%B>$L zj{$qKG%m|fJ3l#gp^K$Eo%K)H0jdKdD)WAc&~Ac2pzVLzKIk(?iDy}13j@W^oglwwxl2TJ$>z1GjSsRG$pr$uU&&gn-@0U5)(pvejkf=?Nj<1H zTV#2F4g zDI8hckhon{@u$$+Hx8aP;)A`u%gPYX{-EE)WmqOKZuPSTlUCv&UAD+6$urN_DtbYk z>6!E!Sy3=3bS`5zsW|M%!o`cM9L8UNvfOQs<`l~RWuwK7rVaeH$_PMr1lYC(5Id~< z|NCNDYgkWM&;Q?R`|oeq&blU*PG1UQl_kfGvi`EXzyC=8+L7z8D|e^|iO%dOdy~gL%68?EAlL zp=t3f_TcZqj?9x={bW3OT_c2VzvkGtnZKd~&6W!Own6%}5O54^s1O$a@qJE9h1lUd z%OCyz=9)m{@4X_kZo8h9@=w7mJKU)3meqaH4+6y2qF37?RxO_k-Xwef_FvXMV-sZR zdD2)*^vvA!qH59E)y#zj-mpRa6v`7n?tj#b%1IT*e!Y)xCFef*d_JJ?E4{Y!ko9_> zUCf^^n|uW6s9h~l6R6@7swnr4+@=}j%-5-@m3E|cTX3`Q<>Yid!oSLF3OX-n-HaX8 z-ee&hd;~P#lU$ljEO`_)D+S%5wetb=fSOIJV&{WB2dFZ^uL?x9O%!qy^O`r#yVhRg zh!t5uJ+^s)tKql-NkQFm_9TSJnAbD(Nw!kF?n`4h{tSdye=CY@AVV zNDa0%%+&`_<^#j~!8PN3v$0&tQpXuVr*_v~dSn04@-!?6;YN*3S`Dh(oQ+D|#J|c8^R@KKDMGB{E;=@cTc@O7FuGhg)-X1%V=u;Z*-En< zb{m<&3%)$2drDKu!Ex{2(8ZJuX2mN`b3GxCbFltY2)|f!7ME_B3ZE}-l>4D^hmRi3 zGG&&gXs&&=yw<>iQSGLmYl)1;@bS>yapRjZ3HGajxSYPT9j1kT{f}lNF;UjUi(q59 zMU&M8QcpN27AD{HVr)Z;Td>Q%pjv6lgH(Kq`B2;=l=cx#6o-e5duG>&3E|3XpS11f z<>;+HG}7098ap!OA~mmd($MlB!4H@H+T1!*MWiC{jFHB$mpCHgQP#t5mR9O~h<;~} z7fx*(iUHHc2PRNkt>FRj7nlpgnoG{Qn7rvLtkaj{%(=3vRctJOHPNb1M#0s;#Q|q; z{McrctgKxMy=9zg!>ee}UoO(7*;%$nv?an}*;y-oCIZZ3N-kJ2gj=fmq%?Pj>JVOY zt~z$LTio3|B;W0OnHY$I`-;7`2Lu)d2;PO~Q~A#+#dQ>eTz&w6@M*R5S?@Gib=tFb z)PltWjKX}Kx`CCPcgsxB^Yq2BiH)R@lOKqA(OsQ%Wvjx8D@dkP>O-!`&zHm;$8!2Q zf&hxC4VuetLT{w_41-3l48CG+&EmAD>8)|KP?7N)o8ECDgC9uBQ5_9mqXHVHUAXxR zr5#%4zv;?Esf+qWXWs#hQEv1t;a_D~wBq@n%DzNODu}G~)%%a=D`~#TC6}I z`k_>XJFp>)%l~+FSl5y=G^B=O!cx5KAAX|I_gW)2**<5xodQ)q^7xXjtsSgIq8d2u z`8f0Ed-Z;3S!qU~J2omdPS{r$HxsRz zm)sO=;3+rXK;d%etCgqT7BPB=5T(IOcC@#O`sLLFQw*Q*YQ*JCk3f9Oa8?k)#M0Lg zUK4YTH{)SoFfIHNDw%lO!cA!l(@4oqs@`2u1jy|`AV_UBTfMyEYx*pU|Ds<1&NQRg ztQO_<2XeU^H1%HN0>=r2q-Fb6q2a^BM3$dE&?>KPixr_lEZLM7QyBkQ81V)|lt?IS%iWzoA_MeODJs+YD8A z-gL?+3kq3|rHRlEq*{wHcX>CBZWGN*14#`%2RDFfkR|6aqNsvG9eEq8sP@GEJFj2j zv!E(mx7nXqTCBYJqL_SJESIh7mHd=3NykmeuMM4i!D>2MQs_p+3Z{kNnY})eF|@l} zF3(vk&$q#Uf0;0lSTf?IU>z%&-sz!L;LqH3dxH%n+1Vh(MIV7Z@s}?CGMOv?P@&n5 zzQdS;#6?2zVR;4aLLMxLJ1kDm^1e6(F>;S*>WmcfekyyX+--|ghcxSh`#UGkIK3>p*D4JcY+NjKPKLgy%?3>-g+h>ug@xTvFLuG4XlbsZrai@iF{AIrg)Ba@e{t z(Np#EsUtmNBGy|b1#;_26)=4=*9Og5ugxWo2+p-*Hs`5R;E~a`;3zIm9-k;r3w?{< z2So@OK7v?^Ejz)W&A(J4@Sc4%posbdtG%hzlNK+Pk+fE_QRyXU@diKSf?4RR=X@Ti zDy)?y336Pb^dN^_3;$%i&`)a)4lSLgs!|{6033@b-Q~`m45|sJtjT^YeJy3hJ+DR- zvZOkk;7uP?K-W^v8TFMS zx$il|*^qg7^72jiweDBQBZ_1#z)*CL}==;_3HK14e6Ia^7THBM^ zVp;NlLc;Tv0^Saoc2p)~jo`K3Ew!BPQq{P5<3j$}AoNw59y!S>ew;u5n*2X`dGr)| zHPE+BO)B@9d=yk%k2f{CrdPMDufSYV3VCXc@f#aZ_|(P#C116WF@gE*S6fir@W|k! zndC8keRXlYyj$W~l%mIm*OhYTQ?s+=g|uRI)F%1jx@G69%L(Qu?1FC*QR5Eg_|lfM zT#<|^+lEF&rrCYLuxbg;aBQweoqFDa`RAHZKHjva@>NW-?3n=u1p=PBfx2fI-7GCR zY+Y-#tMB-&VSDSOuL#jfEf*5$NdVWks+Duvz?O|(lZtrLi@C=(l=I;+suabx^LiC& zMuL}bm}oaadeUv^)0GXa7v8DIRgZ0JKnruyST^UpDVhu^b5Fr}i>^6bvc?pl^p#lI z@!5-LnpisDz{$C)MMNb!kkGEm4~$aPXGHM#gA>IN10oZ;et*c8wH5&>@Qt_WrC?D_B3@^HpG5|@&UxYtbLq#KdVZ4k}CGu z010G}k2Q45NHt3d0vpo#W{7D40K7Fd!a^sjhf>CBsQQf6jGJPRG+YiiC^?yhz z^bg6lXjQk-Csa4UXeF9Y-HO%w%c8`43xg2^eYxDT9z7p+v*2{jr`T*ocvW>_w_3!1o>}Wk}i+jbNqHqU( z8~P0%b($OtX+&SsNBdYDnVQ*6(kr4GEc*oe_sn z7O6&nCN1kUZZRPXKJ$AyWAL`{4vI0zC*4x{hF`;?+9qf?-vhWfnLU#G@`nYn0q>RHuCEHXDqLRnVy%pbCf+2#mi5QX1@!sxyp=i!x~}cro3KvtVk^3Anya1pO1C9y0O=Tp?F$ZO zyv7Q`NVjm1NP@_A#lB`9HSQncg_?He9|$^c0>YEVUEDRi&qt%z18W*o%vV6NTU=|( z7D|0H8N%mR;V>yLy~05JSk*(oS4kjV*gx9YXF{HXVDD5aY~XA>_Bm%tm^d3wEnSRB znpt~!@7S5%5;KpDDbNp@65E!(r!I|IT@#zTua0~NF<6tE#>K znd1XuX*PyrgO%;Wb2G^O_mSheTB_lyLJgO+cc#4x37wX!AvBKW9P{fQ3-6PVqYBLpI?p*@YvNlIgG%#1jctcW)ki?ji2x_Oxo6k(0`H({IWe11Drs!vR^o5o#fX2 z0x8w{Pu~N5>v?C<#=5-y3qZ}#=kj927nn=Ospg%u_hpllJYL*wChV2qfx7-hpV?aH zsrt(*;q;MW%jGONTnqe*!cPYb*^U9^$;0q8QhV%&}Q356Tc5VAGtZ*Rc zqaSKm&5HdNXD9*P?r;3W?&7+r%Xo;uFUtG$YB_)jZ#kg=e#<6*&SQhHt6$;EzOYTL zbV8PSDoR$Q%a17o3HTG?qz3gAm)3_ChtLlHM+L9B40xHb7m7jrvghLb{Pq1GJ<6L@ z&*qI$-@0{u8Q=<@~ZKk&b6%$hp?Tmr4`um zqE0$2$>d#@D;oKp4oqunaD?kNJj|ALE-h9XdSlko{SqK<2DHLdxhbYg z`UdebiMT0)cD{}QaW+fD)LM$c&erhd>vkZ^Wsl9xhKn|5)NqEH!yL07n7`av|M9cRcbVZ;pkcrZARk9*N-=omL)Oi+$}+4Ut1;kSZQ)XoMK4cc(Kfl7?PO;bDj zN%w6{m4a0cd8;!>o%j*5?&=f&ri!v90BMPe?p7|~@`U^|&=r7L{>_=Gtn-L506u42 zIH;tf^_o!X-;$2?KVQm^M}C5gZLwf!a%pW!a3MKb{Aud(JZ0hpGlh|+IZ4!aYNIw5 zmb_~3uWGv121yfj53g6_kK!u;7@4c3YSwC5)kNsKWP^-ym~-^8@H9q0NzF!My#yKD zd%g9~Nw0q%D^I-yB(b;An7tf#DZ#GAEJuM?M;o({+-8xHGFGyJ{(#)+ z#l9To10@|>aN;VHR9I3iBF6Dn?v-3PIqwxb_z$RAtiwG(n!T({>zYWcMANA`9^O|@ zRy87-cPTEGt>Ny7URKh%q{mC(Dwo7)oeP)!Q;x6!?ZAUzKWX;Rpq{WM$|~e z4->A+_MMO2{HwT2jcTN}I@{NLxBKf{8zmyLad!H)l8OPhgxnm_^cAJ!g|D3e8^8Bt z6-4ol_Zc%ene=j(@DP(B6>-W8;<*6Un|&FZO?%#9`5tvfsEzOl@F3kyVL_~_8&I9+ zd|pakE4*4vGr)<%lsZ2S5pWar>{4womB)(rN$k5uF7O9uT=ES#OnR|>H1K7;nBM3L z^94$wyF9Tk42JRBxqGGChlFW8_yx0#PZ3rbh zTbIl-S$9ok+g#UH%ib9?-xLiYJQlv9E3q`7I#$Pi`yE&<$XwCYXtM0^AC51`({ShR znYt?!uiaPKz zyGDBeDq;unj%8T&(4>_{xx$gHQ9nvxIB}oou_8b-E(_U!;hR0-6DXW}8$hyal^3ws zV#WMzUGRFiGQ?c!fySJz1Ndy>ZyLj|kB-)VP2bh2vk0CQX-8&CN~QDo@mIf!0D%*0 z&_V8kQzvGV*8xmcn=b4u)W$!hL$t?PYeh zh-_9C#%_qD?-aV+lCz2|7mlQvDo+5ixBQ&79d>S^E)jGS0+8Co`cfk6i zUSvbsg@T<6cTHJ?GJ8oUMlRLDsaa?qDS4eEe(105?ZbOxu0+e)%zSN9=g5G_RBZJv zt`%{R{{^iMALK>~1CycCEEb`=@ddlarE8eOod>;k%)<(3Fr~dKTZrc%D`=8+i~x#r znKfzxGvahtOMcLLpI9DfU&5J>bvAfrURpjv)Y`r$Bu}0I9kl8Ple>5+CUj-qCK@wv zsJ`Yu{)KvlKLXYB!6fSBHX_wO?i`uwYUeN}^A$7=nWV9Sd7G#vK<(`|1w1@0c(LzC zwL2m;76!-{jD_(6t|RA#x1OGjfz83PlutS3Q$RV}mSdJ&lR||o6ld+oJeC`we3N3V zII`_ZmThObRf~J`+R4G+5;fnh2^w!`g{o~r zhx+?(snNOr>XVj)!2Nzfi@W1{pb51b<~1nX1Gz5ol0-wfi}F{UGVlvoG%ZeeV`i7Q zHoTMga0+tH^3;`7H247UrRqtzeSu%pEVAc#j`%pSTFmKoClUp7J}8YIcGR3#ZQO(3 zD9QGJMyPRM-mq+FLhBi+D5Wo_#S5zhDRW)yyKE>F9I6Ndk9@wh+9=xiKOCFafT;6} zzoj3i0PasprLXH;_-`S6k+i(AV9{!&|IH)MlrocM84ldk9OVRm(RU+G4sn8&H3HGV zv-YJUr9fR&63~kq$gHMK=GbHJT$5aH$dfRkmZ1lzOEtp+)hcJUPYu8o`cFjlIggj& zOS02zG-E`H0D29$v;cpLcNtbO)q;gC*zTPBpZ+pVb>qeH>|y*($v}ggTWs;P$CdCI zCgPbC?+S;xkI^lJAH$Xt6VjTk6(Tk^i{I+-sJd6XDGiMkN}Wszcda6+<4oB) zovYO4t*)^M%{5CWt^epTy898drrQQsXUs7sd(t;C557nK;IOMO|;z5 zYM~;gvZHhM10ZS9!LqAHg-b@MK8%-pFkiz5BYeA%%PRu-hav+f*&N@LwlN+IJ(sg? zt<@&JN7&tFjOmt(326}>H)C?6o^a#gXHtt(D3wveuuQUOz2?%$bwVAqbUoUDtRGYp zbxvQyW8p|<&b52PT}!h&_b&89&8DgqBW%-x3(lc~v%VyWbC1-9f-eysRNeBESa2EX z7HaUnrbMhY-T`+_JKiqS|2}w}*SEUqF%2U-G1ehoqemJ`MWVVOo?SQ-5QoA*1Rr|= z00RN$ajU9I0qt_~9_xFJqRA7hcXo!(?CV*Bh>6J;_mhJH`{j%*%Oa}1TZT7zv+xO5 zL(YB`!k6}FQ(H5Hb%%0ea|_QAG6t(W{QDVW`Xk%|#sGBT^d{}HVR7x5cV%*IIr$cC zZn>9{a)Kq-QLgVr5K}xCU7NQ@r*) zPZfn+_3dc%FC*SC1Vyy`gJ>(`k+H8+0fOj<&IPgxLdu}6ziww zhmN4G8!xKv8nfRTmaGwkcH&FMRX#{?FOoA)UEy>FXv3V#?7$}3F_EBfthm$h$W?{F zYS)muZP|NWP2+Okoa#1$uW4&$TEDr`U_NJcY#Y8wUbXvz$(lb_g%iPNbpO?rB zBb(A0kDkao?`=wbmf6*Xl3g=kc2e{Uh%LMHu~T2T$Xq203Y)ZzUc4&5J9xfpGrg1@ zX1c7)8{P0eJv?w))F?(Re0^IUj`_?dCZ?YnDBiByCx>OXfL?&4-c1d&a>|;^BHARe zg}S)auwRtxj`7*h;ZzGrtiS)~WP3-9B4X3oPjt33@nDegv1Zd06QhkZhq>JrU@t(W4Zqip zk*__stFUQoaa9698W3-)&fIWs^~Q8{i08w5hV#AB6qNg>-8IS0=F@~0ZBi_aF!FW& zn)l#uqlF8Yh^nFJl8upWU(6$&lhSp+DyP_uviJbr3TrjejTC9N^+vI&jFK!R3#W=k zCu{qhjk9e^-(nHU`PE<2>&c^^z*^_C}xueyao310sT@!xV@UA}a1@|rTTYOzLgO6YCfT})-^Ko^B>tJwk&&#Du zK$5rRAQspVF4mFmkP9xY)5^jNU2i_A z*w>t8BW^$6nCf5unT(y1yCIl)upPJlky|aJNlYFor)dPc{x2IE8Lf9s^@}OD{PC;s z^LXp0qC}nQ;&)WV*-8HB71c9WQr`&4L9a!5=qE|KRdBul+h`DP^xIbbqcSa|NiIOp zThZ*{+rj}EB;Ujbe}_R+ShYL1`9>^OOVLmCC2T?b$;_`x#t-da8(@fNY8YwV_b%5D zRfXG<7)@9=wqLx@u~U6Woo6W3=LDO{nx{1zxp3$Z)|v{O$O>!-*Qu&M9B_?qf%C))DQ5EVBr(CM8~U zOYotFa*P~?^M~vNE8@lRuATZx_NIuw7ij3hd7g+%ZX(Q_)O3|NU9D6&Y!v9IlbU5J z71b_iqwfU81^j01ERuuVl^f}e+)u^{=g~2ye8AJ^zg_<2ur~8Jc^)<~_ISKq^O-W* z@HG7lbw#k#@)5L|ZaLOzeTWqb@)SLVx&hkCk2YEf4~0QRgEp0uhDBXhY z%#u(Yz}@WY-&tw)&Qkc}DWLT&ZP${G(+V5N&S;-w!8@<(WmssVbb&64+*bS(?sg-7 zao*|`ov|fLO>edW(=60{zzIV|D9N6pqU}GI4k|+xq_3m0lIrs;2k9m`Jb83P>YN8O zL&vk!_gCJcjlh?~dn<>xHaW_T-++#;`kYKzTxKcwF|?q8Qrp}ljbP& zU0@m6$X%{FaW!boo8roEugMJlHeMe*7ufO)V?M4&bPwrLwekAzt&(@Wbmgns_0w=+ zBy~t?Y&MZ57JP$Fwk(Zogsg~Fy>z1X2ra=3&(jWYglroAS`Zcst-V0-SLfv-r%4jV z!5}gI%BsI}vazHU_!)7*iku3s>+M`SqHW@0Y*KQFZ9b`zurSg6=-SvO~VF<_Sx{|rW{rN(C5ZLIJoL1MgSlW_mqTlFUG>+3CPh?w=g+*7RagT zNCi)E%cEkmR7$I#q`*eal~mcACmwJf@-SJF@`_sMb^&O}M3lZkKn8z=t<4ZH0XuTb zSE9^hO-e$^bRlQ(bD{XWcqwgn6HDo{LP)@Jrf+b1CB1-z^^BnzzW#*FP#jy0E_$`#i^$n}sI3*>OsJNY5k&)JV7xCnOY7vn4x@8euwmekVnH`+PH&Z3X z?D(c&UxVL9fw#3r+5^+fRe>HzBTjoRzIf<>x|Qk|1&yYM1b@6EK7&R0rPhnoujFS3 zC;v`btt|=9GGOZ8OqToOAA2HGglv4a}eLtIcq+oF8hI&+x&azmEkCdj zqEQd5{_>-lF<{ABX30Li30vC~h}6R3gKy?43D#;af%PwQ%?aem6(>DREXCBjQoa_ zitoX{z(gjWKDv4c5iN_=bwStEG%j;eNWGQA_pEbMX^F_~n zc|gK?2B=oWLNn*t(9u?mSNl}+(Z06tONOodo-~B&Q)xNCARVYYnMwRR=T9M0K6VL- zlUNk$Ui@$%;#Mf-$ulIVpD!J&f}-NOM08v|95UtO1brWD1Z6tAXla^Vy^cICU}-1H za{p$rASBB08f|%^!}`W!^lO^4u=X2hKR49}A8tBx6RwLw`mI)b@$5c_jtmX8nE)Te zqgacdC$px1+rF3AYr$wAadUww&m2wfci^LooMxZrS=Sg;x1kK6afZt)Q_x<0dq{MV zS>cH8@$K1kd(at0p2=}jy#tNEUHAA){gxFNq&-%qla4)eki2jxs0ntpf91AwO)&Rt z)LG|$wtccCTvE1g&}lh*9OSnG8$tG>hATFivZ-8P=cJmyO#Fla2%DC+oLT@c|2VYy z&WgJ9#G^LJPEcvNZ98rAV^UQWP7%-|>++{EU{8l8#zu+f_P+n2?SI>b@G~Ew!XiOpnC=Y2&78yYxpGwR;$;-Uc%($xYGSPDDz z_&ZC!Yy#QU?Oz`16w+XOJ)?KHhCxr2OURvXJ&SZIC&_>Z1iYFEPkRT+mG z3@ktLmc$s@eTV!%gvHNjkF zDkJ?FbWjQ3t!a@NId*aHzr|cowFiQ$ZR?lO^}u@=$ok+9R#^1cqx2sBk&GzvtOdt8 zxXlVLjU&&WF)vCqlL7k3=GH{wHc!5K{CAW&`JFzqXjfUY9>EwX`tVKlJ<|BnKS=^+ z%D#57CJ$=l|4`+T@(4=V8g`s{$Ny{=hQgbBODqlxy?Go}39h{R`>*Du_B)ksux9f0 zFzA*0;mBT}i%c`artq$Cdcv>0Ljz1n_GS7JgnC~gtDsS_oax^z^xsNPi}RJch8FaH*)sIY zXw-nurPbu8nDD7d;%UkTB8S-Y19^K=ZU%?EjCL`Iza*QTmVxmgTz2Il%e{yDA{CW1>7_B0u0^B!FPKUjKE* z2A?}pPKmRk#W|4oPf}Nol*#+7yZ`-)v-&@u{2xE~Utd{H-2dx--{HSX|5sHu{_nkR z9=&kT(a||M@pVwWx175r@XJ)?_7C~NmTUZ%jz0Z){vj{#i`I((6XV~db5FL^!q1=2 zad_Hmc}1;B<9FqE;|jT7Twy;PM33rQ_N7-(?yK8#05f(aIc(b84 zI~e^D3t#f#)!Eh;A01vkY<#;$>9c#O@+Y6&qf9(xbmOdn#-F6&{2$)C$v27*|3sDS zN{XDnm9&~u5dJS)k;a{}r#dzp2U@zrWidYg#H;kPfVTV}+nIkKefD(w7d-yw-0`1( z`ujz&7W+8=w1um&Z{AG$U-NhcW7IWU-OQSvUN`|?6p>OME?3r#of%)mUY_qd6@S%} z{`$~J?1F<&?6B`y!g|}n24&NBOw65McLJYLbzrg{ei}0Sv@58k^Vn@A1-}S&kD~~? zhwa_pM}byV^hBMy0Osp5{9KBq&)qIXnRf2WxSEJ>#w!ck*rd1L6CB zK$*WK%#+a4OzLP3d9UkL@>uMbH!Ew%80VJ>?Fp)!qfYQR(?`p*!8z$DnA-d6J`j*) zK64^5`+>s+@%NY~h|#n8k1&yyY$NwdFGyxTfG4IWJ%sF!dwCT!o#p@Z{9m^6D5lD9 z(fcC5%U<~H`?JypwQPH|Ili&gf7@8lvA7H6 zi_zC_-94<172Zl_D^3)acrNp2)m~r6{V2|_A^%*p3rNZi$Xt5JZ4lE@f}=dWXe>3H zWG*}jKk=b)y)DR>e&w_UMeB?$5~KFyDK@+Fz3@V`J@tK4f9=oHH+NXbGEN79^j{a1 zqmIvnhDbQrl8?XG3bwh^?AJAV&8UJe_eEHZSmWb$@Ybk@-yBuN#fERo+Qt2B;1|zV z+Unh=m!Klj#eDy=J)8BqYRd==3=EQ)zd-i?|Ne6T_ZBDhQWhdQ7sB6O7jfNT#Xs!- z^YCo+-FN4oKDu#5^~>qS|G$5I`!CzZOqATq12|XS17?NQJF`dUUfsWUgsGQgJ6>O4J8*J$^Ut>BlC`>BmQO6_+#}ec~y%A z&mr?Kn?v${=(T?VYgzEMTyUlV?#VfNy?zela|Z->Ou$IkQ2M$Q1a%Ws(dj;ile*kU2?y0;z{-i2{?MgDaCQVzDoApBKS$@ zt4j8YCxO_C9=7(!$kEEhl{PdhBB^p96UX+_8)N$E#gv2Q)fBrk05`3$vuaroqK?5% zP_e-;u%&@t`d(1qii_CikEfoP{(gQ+`7z%!^5u;o!T0Z%-Yl@=Yh#ieOSA_n?wVA= z9{9$^$nSrv`xRSxP`#HiO#ZIXm1(g1X!7^kXA&*pe2oJ9`jd4%9~!Uzhr3P7f^7z2 zPg3E_QV*6g%6Z;&*>8x${dou}|*|XJ$FGF>9Cmb@jo|y0AYV+W!3f zDwoH$s%&kX8;!UgbZ#jZ^W{s@)unfj4m^u(k4gG5uhv&tJhI+PO!k$J&6|I+XA#MM z^ok1lymRc2awn_%z7$@{seJj3S28?jeyH?eh^J;&X46A(QSoBY4_;`pCR zxbAWpGt7tyk^%?Lf3AG`ihup}D*ej_b zK$JWu+1~u7*s~kU&#YR1+m&?hUOfI)BaXlQ_r0J0r0s5`9yR&5*Rrp^i<{5(u3{II zg15FB)k_t7{r)hWeEbD}Mdsn!VN9s}FZQy*bDTpvJzbH+U#}kj%XZjoUTbUju(@s> zN2$nXQ|;n1>;We|afq{J@?F}Maea~(({#Q&zwq?i{Cz={^3MWQ$ltl+h&RcfGE6Oh z=7*KAw3n4&Q2DY{|IO-O1wXUm^u8wt^84H@fEdw(x0XI|f%jiU1?>5l`(6^Fneb&i zhPLHfh&`;2s93m%ymHu%zcijmv$Fv)i}wXCQnpNC53Hq=e^?CYoZx|(Soat|E^bN= zOv`a02?xJ<^`j5chy~~fBdCZl|xC;`SjAe5d zQwzNwn@jvyA>^-mPJX1ti~oAkZtA>fzqsiwlXCC)?KrS1XDW~79qdXCZ^DvXrw25FFTzzh&Q zfOL0*118-yx;JWLgum%|f4;we;4!#&-`9P;`gy&=lF&2RZtW{R462-r4}3ml<*EiC z9|(lC(}y@E7?s(I(grs0YeN3gOx-3?KQAJ`us?4r6@0kQ4w9nMiFq>nQ}|J6*!eOf z1>3fZ{}4aFnbxzmtwcg-o4qPe z%y;>W&oX`^_~^M+XhV~7-$DYu05fj{v?{rS)uiW;DourR^;kPrF4B>}YSE3c z-I$!UywDMHqSvR7Q_9p(l&&Rb|4>$+{j>V-<@D6$<6ED9rch%c52ed_POYxA)V^DrsLsQ(t*D*BfrXu2yVN01`y0n&g9U+q zm9lZ|4E*ghcvbdZ+g;M$6Ih1~p_rPfA@JI;^S(_cyc!#=pu2hCZdhkY6CTt1rB&^A z*uYk1%GD^D+8F0}#+jv5;N$1Nh&;QPq(DoiZOqbZqSWFc8~Dt+P{-7j)=zAfrk* z1Ufec?oBx#`UMOydaz8?M08NP-0r!)IKl+|B09kNz0N!`x*qi2u^~PO_fL_Z>(;DC z22V|Boa7(U5;3^XkDRo$GmChGgWhQShK$NFqbqeJTKy~L+MAU+*Dl(%8)R|Mm*?=8 z>+G~U4Cnd@XN7=Iy5=3vJ5Qwk$-fau|F@)M{uhxXp}2fuAb;=v?~kN0$)TFO)@NRw zJ0C8W?QX@&o#FlL_u2jur6&$!`tX_ZCgJdKTDdLFAE0~{36~es@Gj#q<~D*VJ(kwdk2Cb&XKQ$EsA9>tdkk;XeVO4{ z&d{wL#_p$-bBuqNoiPzq4S9CZ(jazz)78qbM9KbT9={sz&P1eP^)d=D+2n@9naX-O*X|>Zj3>e0 zfAl3Vw%0f*cLi11$XoXW0X(qdu-wAf6npn#9Mb+~Wawi~i&a?ebGQ$ek!5h3WD)&2 zz(+)G>%772DAd+=yz&PU_;IL*Fd~DmAZ-=!eLT=iWZ=GAhvJrH$u!8hB|lTCZp)UU zB+xg+;R3Ap+REz}QDl8KnbAhb{C+j4*{z03K{4#_%rwlz)$5Y-slSP~^Z1Q}=z__cOrP^2W3abJRx}G4ZzQ4JJV$v{uhyb&CVn+ z-M!hcsbaLBxNS!J+K$ky>laaJq`Nd1$K{j&ja&^_^>a)Qp+1VwqNK2y>mr6DzQcXG z_iJ9sE(&ScLmcRz`V5wQ9`+V)MUUv1cyJu9$VXXbMiep+SnK*4Jg$gqWPKMRkOiF7 zWbm=zu?}yK9F6Fp)p72MCfYGeS?(=)JypRp;Xf99Cg^)q827&DAITgNWpQ{(bgwZ2 ziz>YIdcES)Olo>c5H1S~Dd~2t>!;3hGtZ~X#24IrWt;cQ>V;v^W)wB@ zZI6WpQtPnSJq0TnhtD40Vb|i8SY;A8GqI%z3J@vee6#U6k*(ujf}9^@({0?Klm<78 zk-qI$*)88r58B79nfRBsPknFJ?zY0QR-QWa5N|S$ZPpEokm>KHd+ofR71yC#{cae@ z3?-vS1R(Vyd`MJJ1v|WjJ)m(2>z&hJ@)KL@G|GsQQ%E_ zmcc|J8TFXyx|R2Q$%=+bdhI`Taw8Zd$tst_n>B}9-`lUV4q^zM_cN%a@-NW2E)X{+|-%J-Q&?!e0O($sKbgQ9iZHE z`8rAhUF;!DT@!wwp+GzKlG&dNQOym^oByPj#3A0vF6ej3pWWS(t4!Q@9B`)0`3^N9 zuvB%HXTq0O(+CO{t&)M1!tPDhrY+fHG1U2USd3tu?%TwJ6&$eL0UrY2Q2yo?zU)4$ zo6gCaCWdnxyAGCt`{Kb)x&E%}HhlT5ex`!ymcYWw%~5-~!J*N3djWcD6v{E-nf=fV ztRoSCU^knf_08yVVY$!Z=q0#1qNaZTQ4agatylU(9+E*s_xk`06yG46Jk<*C44ogr zhVo36oRoTGw13tF^l%6CH)QcTc?KWKz*(Ga9PDu~*4honuZquP`%CF|@1O(j=&Zo_=utt3`~7stDX$LtZLW@s%AzmeeSF*{J6h z;cn{WHz1VmTROu~6j2nl`8va{%T4;LiZ1_(*UQ6aMD}q$=TGOAc)?5)X-9SuFWp`DkqyqzUn|rcz1|&>4&~P4b?DkN1eX4C} z5|dDfEdhe+IiDAY#kByL8Cn|Of*lt8MDY3t{E8;kEQ!Pj2UPDwA~>W#?2LMRa=PU0 z*weK=a+&vz63q^Kl>hSl9nAb!Camzt?Y5K4hx0b-FR3*q(TM)A+WDyF_fiE^>vh)s z(#qpN5RM@{h4MjSvw>mX#%yrP&hI6*kk{L5I4V^8y6YQ-Q8IIO;w z*K-w?4YJ=|-QC0}bMB){-}q~y8*8BjnA_&h%FSLhKYbYU1Z#2t#nPb%mP@mh$UQ=*7p4ZRXH_Ov3|p+}vY(R4QUorF+0 z1KYZ8{E75OnBBPuf6TosiwUG-+2@UMR!lBUKRGhh(UEJp2!PCLPdY6f`9S~TE z*WTJ!_|4*=)95P4?n=4W4rC)blHUarQ=oTvmOoKqdF&a&m?G0pIVYKKFKY5|Xh1>1 z>e$Ng7(Nl;L2*VohkzAscS9>VBmFcKPLR{%SLNGH^KOY%isocCGvtXhN8T?v#TTWc z3cnq3d!Vct7(1e*J@2}+t2-)oe%D?_8hwP-BzrUJpiM}-&a_^kO+ju(bkR0zt>Fr^ z6xQs1dfz@~Bs^DO87&Oa0jSEsJs-<38vz8eBWp~)P1tj#Z}0PyUe?V{TRZtg>o==T7(s(%x&s>2VWm`=>ys2;KzV6|{PnMHyU9)`BW-+3$Kw zQyRxUMbmf(BGzd`rix$s=DTC56C0j{rYW>_rj1gQaA|+FVlyRw+{x6)x~8l2)V--^ z1?^|x;5IjUIdJ9_Hl#S1O~HB2hmu94FqiZ$b&xfaSY}-`Rw$Z7znGCwKQ*RHVcZ&D zJBCjlxE!;&@m0Es=YLqs-3e*m+bO&}8Wqvb5j<}Qi1H2)+%~k8P5iDZon>m@?~vO6 zcENHzu;Fq>R(GTA{h*{qFdjwrxzGrq z?s}(yceE@O?m4=WCj0}ZO(C=teb#KMIk?sck{*sccsMUS#CO(lYJ;X{wjEa z=$F_H<*#}sYgWYkgJ@hG=NX|pioWjgHS;v!bHr1+)%u|w8EVZtqkdmhr{5(VklS#2 z*r?41*{sD&aO{aHMB5H4`hlau{gODS(@~N~UNgDGX@^d|!P)aJd77exglRHIJ})wm zdzG(z3O=ng0^;s(#^7c=fIz z!I+WHrcd0h6pOP}Xb9ChI~}+_+745+GQv>3fBC`F0JEYkSIP9bj*SA5cSYVQ2EnpE zy(>Yz+x}TNX^=Io>*&qq^BmSuK#I=(B=mH6Vx5mf%PDZ zD?l4XW3HG@Dp@0VFdi*RJ0Ji!eTNSt@VY8-3ROf9b2rs`gmBUYaBruSAc_Lxa$|iR zOW&cqt!AwzECZ|A!a`8u;Y$N)-dg)&FU-M2A`v87MR)~1cgNMHsX84UK7 zI&WNy^#RrElmTU*zOMhfv9T!rXT$)nTq^N>vOW2f0(aXAO3+gY=QEox`(v!f#tV!) zQQR~88T=yIPcW2n1F+V)BOgModzD1Klkk+U2tJ6gZv|=4N+rKlpx7!G>pc5eLH!?t z0K_Xw3ZL|rbYau7eFhv3*6bbaQ1?Cs*>DF5S$>M&V4-rSf8Y%{sZ$bBg5En!@u68${)L3sJ`^(18kkXAH#`5O&h6lV`AHsbW>Bhn44P zh})?i72?Z*N8`(7qK0o@i8qlg1AR8dS%R;M25XfqHUrYT2&0 z2b~nNi6i^0iH6_e(Oz%KQ}akcX6!71oRlR-_I|l$TFo^9mb>PD8BT-t=hCA8jICt* zKB|7ebzGLSau%4Il4^(MVQ! z^v5!zevtO4L_$qjdpO3uWNXwY=cG3F6nUfT&^6krqZK|nw4{!v$zfdl@-)A@xik?6P7-VKY5 z`xQBq->=hL70K25$Lr){4UPH zJ(tKadF>~Re|D`R2OMVrvNL;dIp%xnD$RG<}R%O#Tk4C&t981R@vJut=wbS zdHZBHC4ldcp9=(yF82?fs&43reU{PqJfxXUKiTJqgxgO(4s({}OWo3&3}p|N;ASig z7>38Np2HMsvaQ%;o>|6r%I4{}q%yfmtRl?QOf8d}8zP6xkP}Q7hP#TE@rM1nAh&0I zbH;K-UE^RuSu5p_1oJP6S0wL0&?z}^Y!TRG8kf&Q!hQg?G2X_j(OT|TQnVs!1#`$cruIGL5+W)Z<56@8yQhc+$FT26Wkxn$Il z>AXf{l2e6?P^Ha&-kn=8zB(lOcWqw>-+<~OtT3_}8r$Jt7fVW$(ZR^BZD0nS+gB5c z-yHzqlL^{IonZwL??L^;Um@v^U0`+-1qaq}^tAg>8N-n0IVc>p;$v$dOAY+gt5QQh z7@k@-j21}Gdm>~ZkQ1^0RO#}mot59i-uw<}mGPyUN#e|IABy4%ecoo3zctr&SO8Fs|kif0n@mH?)v7W&z`v?1}a2;JfY@C=&Er(!X*A8oOJd&(Ow>hOS(6{p4 z`aA8wNyG$b_aLC+0TnzR^2z%#{x%sq>_E8P8zJt zV%R74#yobUbSJCSWQvO_dl-rkE@w^J6UG@UF(%_Vj4trM&7}#6T@seS%09D&3_FeP z^a;6?{P^WeFLl_Md0`bFrVg1@XYxmB8(}sC(*^Fk{17UDa0tsP1Gn+^Fy1Q!W!0`3 zEE5@iDRMFOpsk(>85Ie;8~HPDuGv*tqL*(7touTOd`Ggj#r7;GV`%l#bcvaxhXW~O#(iEGwkQKisd!;$k(DoH2?(%&I2L?Aw_Kx>fq5K!_rqXyc!Hc3?zPrTba~6_U z^~EvL#Fl->4M?C1{eP9tZ)`j$|93CVE=rh)_oCCb-!i#Q7L>II&n#Pq-o{Gf@m0 zMw$0#EL);FCn$?Lfn10}R-zeoSeL!z9RYb$urWiSiiel?3YoWPsQK`X+2WtT#zK*0 z4T^cAF-C_z2+`Wcho)UKn^(==^OS{231r7-M_MnG9V8-t8es1zefhZ>HNwu25V-gQ zcAx7RJwQjb^kHnA?chUp)wI}7d&WV8m#zC*t&OgfW|uICx6axHDfBt>+ZIqz*o)87 z*u0Eek6TBE%P{Jaf{B*E$QNxKf9$<#e`YQ^LL>6t)OmJQMzR1r@HAL?@FvdOIK~A0 zxf9sk!bV;ERLE6Lc!WNVQT(qC@L?T;$VkBye{dJacGm=?t!I=_$)TEbsIVK!2{ z73V*3W%fbQ4TIpH2UP`C%Urnm{>E>(0UXe5n00`bFD7f+vM5WM>=OQYr{%JIl*gW~ zKxlaLtl!5cFrjCDvge&>(f5b)dfQn6^|Dbuoqd&^rWQH$rlkilnXztUr`3VY^O~lGn43S{a@N zWT9=mXtK+~7iuAsy#^;J0C;Mncd}*6XK+=`Ecqv#n@>YD(l&xAMVr^o-p=f(Mgd=r zb~L*xZr-_hhDXopf^geiO0+M{Hw9+3 zlF8Mo-$MN`kvF8i+hFC!N(+jiF}dIUcS!t5X__vfo8>vO-bsQbu2nb2L%!dTh$QX% z5B|#8B>`?N63yzE4Aqo`HO0tHGP5-k+H6k*d_$4I)C`fKiP&HQIP*NIZhp(oABhtZ+E8=8FqF@f`}DJ}m7U%ao7uYnZ2W9(WZcXFl~4M-&E4%rW9SY5>>wbv7`SI9n6Jm`|q&6R>bp`?jJ&1Dr9(t}o^ z_0+6JX)F?NVxOQwK>WoKy^)uO!WMpBK_)^odFD{`=rhW6<%BEv%FyzEiU62zuow7-*209O6Y_644u9i|pD(JN(CVmoc5tw()4UIo zPyvRw4mlxAd1sGh(fvjp8*eA8uWn6psxsi>kET`vcTOg_lxEs?k$HIFVieUy)jjfX zw|DH*EFEw}O&K-T@vqQCV8ka&2TZCegz850B&dxr1+L+^d%hk?k!&>#zU2YM6qG;$IC3qAV2Td6m$Gs z+7AR(n`7+g!Evu1h!sFPt3P!*~E)o@$GiYAU*-$6qeusHps^;#BX?_I= zM@v*7<`f01EqGXa9Lm;ba>csL0RNv{@^EZHVIFT&i-9ui@h>~$M@2&6zuleXD~<0C zmEn0n;U|U2TT1*MyXTB5>RU1h-a{KKkoyNo9h}ka*<(o!#^I(2w?}E{^*WDxQC#Ij zii-~HIz4uy0fK^!uCrBUe8^HVZgT)#M%Q3&B%EO^sEvmK9Tb}PM-;6(v*s;@$D(Y2 zPY{g(q661FhJ=mB0410a|2oee@@m1vhtpLHXhArkwYZS+R$w_>D4VGEg!JO!!KN37 zZj^iU+)~96t<6wmhj_MB2eP!;Iz>hyDC>MQ2)#O-5=xy{@R=lUZcvx{6@($O`^pS@ z1Dd~D{yzb{a6<5yEEi?ee7Ey`Murk)+q#Jz=fs9$q4UgB z0+4$JK*_zK#h6ml#ZBOx;_eDEu0cOIh`yA#+Q40$=ox_g^V*;JAqKc69^8A>75ukM?@`xZrEvLT83 zr#uOILm+$|kAiY<^%dv;Y*un%)qrAt5eYwPnoO0)mZLhe;^LY|4?@UjLp<7JJ;_bT z+19HNlusJ$IwcWR6`YLk(!=q3w4Fr3fGN(s^moKmSzj{Mgs0fr9CZZrXX%!f*Z_fI zg-X@}@!TI$Gh#FybhXVJQjJs`I_w>WaM|0+op2yJ1opq@$1-c9X+W6RRVeWw5y}X& zvnH^-7)Drvq5sJ>V~UP<&kqk5yHC?2mKq2(U#U9JO2zqz8EXkG*@B^nbLOol6wgUs ziC==?;>EA%DmWCdbQu1%DbIQ@DFavNHj9>!ps=_{35F~ngWcOsNYFUaNH-U=a^r>x zjhT0;!ZV~C|7RX|)<8G6&Ohe%{j_-0cW^IxfT-XXQTfg%r0;g-9`E6csoQpBx(`Q^v5I22<^{J?AagJhnTyIYQ%o3OXJ8PN!K+(2Oo=oePKJyP zk`FPoep)dUlAph6)2_Zz?Mbs$T1Y?gMu*BE2m(=O5}I%oiul70CB-KXC1|L7vPaWc z?Hk)+_#61|)1cxn7rubWjIZK7#Dac~*n<8}D(owv2+B{EJ%%Qjgc9?@*K$9_>4BNP&8^wo33bT&mr$L*Y_p ztdBkKUS-EQ)U^-Z5N|a3Suy0}c~)D08{=toXhd%QvpKe>7?9VFXUfR6mHyUpNJ6~R zC``|zV+q=unS!PYH?NZs^vJ5nVCf>RrX3`8jL~|&0__|Mvp|OVNMR~eX`UL&7#;7b z;rNkMr1t4uM63v9L9L7n<>4m3kn#(|KaTAc&q{QTxsf}T+#E+&b(Fn+)BdIUuwA3- z0AXhjI5#xoqgwy`de?y9Mf*Fs4-fe2z?EMK+#_}uD%2i|Ep(6Jtk9OE2D{qrC?zB` z9?_W2H&rY&;?Wfh#t%2U_qaM{wxUIeWA|XtYC_lZn`i&ItD%&gE8dlMyddd2k*xy0 zamj5N%Z+#l4B2?inno!x+{i}V19ygfH5oJSbCw?1T_^+$vTSV(+;$IZr6yea;c-Dce+En8rK9 z$lD{n7Lswrf&WGHA6+LD{euAXTq@?~-|4E>&HFb)Qi?A`N4ei?EHh&0<7FQgM&)`P z)fOcVUTa%7@`0X;#6m}%#G)*TtK59u)pWv1K?iwa+h|_zRc}`VzX*k%nR1g?(p4^` zjV@L?4uXv9l~}}Wcq~J;9D*fh``q9>R&8>-YH&e*9eP7 zusmnBQTQi)e?RBQ*3wvfxpf6#|IA)t%~M}JePC|zp}7IzJBOKioxR?SBb_i{wM~`0 zLh)ACly1z7B2k2-EtO}m7UI+dZ?*Y{ZwXH1sUDzCbtvR~w>!Z6P$2dM56Pj~!t+wE zS!WBe%0)Kx%w|c9+Xy`+nc_4W6x^T;JMhecLe+SiUe&k)XH` z^{UU2QGSLh_U<~ zOzdrYiKIilfd5+SGK9arB0TYg@I*OaOXcl6i##^T#yd#4lHnMI2k#o2 z8n$Md&s^u%{%$afv;4vH@^93ZU;L2`ghr}jLU|D2g;1pf&iC2BcJD1|l&Se-gf_V892-@^wh!~MKUE(umr3?|jsKkEMW%-&v z#_Qn}7KZlg>gpcB&6}BpL?Bj!L^JERT?pB`49Awp-_bC@io9NXnBH+r@SgkpNjo82 zIohtK7_xk>l_s&YIpS9f2F2IdvzM+@bul?5@;WG#O}baa$7eH#fc=_dMJDr_(1W*v zv&qv{mG$9;7eNp!!ax9?|9A71!*T~`fOfvlYxDYb0-Qt~{7}4{mNp5&w`-P^{<&L% z%lI=DgYnpoBFD+s9;#T!7_ovbTEBW)VI}PV3yUWSLu}K%>;q2ETMJLk4L(yRYo&v# zx2p*``)(Mg?yEl!L;v?CJjkDGTm%S7BS?#$q+puJ8k8>{hSdxZnt?#cJ(_X7*3u zuuaeJtRQl1nDCn#H(T7f4N0NHQ2bR3BtZBhf~5td*z?gSK%H67WUpf|T`d=-RulvaA2V zMOr^O-rpHCDmCE$gVF3VY_~d%t$9K1N(6e?b6USUF+zGIV+rGWw#0r8Iu;5P=8c_K z#!^QNFX(Nu%xOb~oWxk{xN2O=MinbpAk|k^qL`pIww>yYlQ!kS|LvGe%t8-GGk~`^ zLJmtf`y7{QI~u(+n*C%THs`LRv)#5v>|ay^X4uF^c%_1O5MyiMpji5i6h~>QPYqXD za7Btwsy48x{&C$@M+D{D1Q5O)6V%>&j3YQ(CeVZ{w*S2dCPlcVs!gjI!`AK&}z_!TYV)~>nLm=XGlH|LhGX8#lI1s8^dJVnOT7Z8Xmp< ztac;;M9jKoR8J=rVPN&2*G^sQKrQIzY;uRi_k2tTO6G{M4y3LGO$ERc?R?!!PsB%k@ng*skr4CX4 z-(5f4>F?U^oLbpsAQB59VEBCmZ=+tJT9>SLW;;J%CPi{Zp_0?4#jsuh{5Y9q|3X>^ z5ZoZ@&sEpuG=^GiAusR@%~;2mA47OVV{vU(lwo?(32r)zRm*YLzctL{&ef74vZ~J9 z@nDuc#P^TRG<@-kNZ2Iyug_m*tAsC6E2IgQXeG1viY8QEzRpfRYdH(ynod)OQ*$RC zjTu!FFVgo=YYgwq7LqD^Grrm(keJ!3f#&K9Xypc+A;!$%80TmL&BmR9JB5g`~)mQb5ch5P#+D2$m0t6F^ju?B> zSgRO!+(w=r3dFVd*3Ck*W`o)Xa|twpm>m0GY5hs+YK#5cKgnOXXK%B6-EO5+AluE}XlCz!>7QeZ;_%X)^*RwvZezbut>0B9XqC`})!*U{ z>|S%Yp@jGRk;J`i!I#ei5{7&H(%Q|=2n1i=M(b)zOpzm6_p%whG~IL=o_t~Kb2CEO zF*BH1Y~E36GG9bKu!&QIe{6q*MxqIZN)o3$3?~SKOy?Gc=g)rQNmuIK&kDqvCl@+8 z3Fp1P9cH!%1FmM<+RNHbLfb-VU}!LiD~pU{p?Bz+60;INUvf}ypV6iVJTp4YDfwsj z`h1YXWSdL}8lWvUaUijukD17BVik@;N{jB@y1!nwYcAPRju7F+sw3M+mE7ma?Ps9C+2#po| z7apbJ!44V>XIHb&0;z;M#Xy?ouOtScA(5c=4#MUTyxc8Z%73aMn3(f*Ski|^E>+5P zLbQBrb>Wp1Ru{`e7-)VA;vL-RR{WON?i+)+SPBn4L#%xQE3a`y^@z#YGD-qD>hyy^ zKILHo+bMVak8oAsXMq#+aa_wVJmfvH=@-$)e&Kp1=hS4k_#Q9caX&(Il6*E~>{TyD zhmlMGrG5qf9!ys^>$ELWEkWq%f|I;jF8V*U6-@d-*(`m1F|dHsqFsh?qJa!uzm#V3 z%nl6qN!*g&8FDK`I^^Z%QNdrL`F23OCM!er-9h9T4sfJ$*1TJm8MGd^UpFtg7DNCG z6xN{d|NqXk>fLbx)Knw9zG?dHlBdDq?cTqL1`Ea+LYUQ#to>XAQJN2yMg=wPd4_=_ zI4PKNcWB1y4d|K;L0F*ZSZK=s3W*)J!NRZ56qODVKVv)vNw>%} z5+k&S5Rk~_7!!wg5Dq-eDnStkDI=ih3#V<#RlFhQ|HLRFEl+zs!_AdE*EzV|N?+`f zP>vMsG=<7zu6F%K!XaBnTepqOGI4ASx&7uLG7x?*FfA2>3_+JSH9iZ z9)WXQ(!;KUT$lZOJDHd8QR?2o56#2PL99bwz*+i_26l&M(FVcb(r)fhneMBnNMKYI zLUC(Mxw9SzF~QT~LfZe2(YTGXKL$|s{E#x`l3J~(oW7Ji2(1oM-tWjK{NmYPX1kQ>zZoVJdR9aFFJ(G!h6z@q zIw*91nc>er(8|9rUgo)!>HhDk|2~QD6TVHjh~`qJhwyj8MGX7Pq?a;X|9v2QgYfm< zo1sg>p9$A=w2`Al!y#k17accb|Dc01Att%s@D7U$L%n}rztI~SA|i^5lUXr`Ajg$e zz~%G5h;SMjpX}95Ldq$-9x$C6lJzN2von)Vv#|dnYIWr4!Wn$qI6qu_tzNz-5}~HS zTqK*C(o~76P~|4cBh9qF6i^Mdu7}ntI(QGl$Ql!yR1CFvuvYp~A^n*&Ek1yEkz)+C ztyX_6rG5_$?dpeOr$CneMV%ZPzJuBO~)DpRdh2t2b#PfLEzAQb4gnkSRofGuN6%j*vPWthL(&4q2 zyRXh`Zo>s%c3yKvmhV@|y)l^(aog!5&ptQFRo-6ki2X-cWBg8_)*S*I;;aQr}c zcPIJJ02@W+8Pm^=%PjvAKP0N=I+NAV+oI2z0bd7<2T&auqM>hYGoUnL;%~# zzKj`Y2#gVWOa=v}jxX0#E-C05<>lLm0DOwRJI@GsYRxUetAQ~`bF;6rlLffz zV6o}LYi8(Lfba^Z`dD2 zH{WQ3Tzs3>Gyk}_MH9zNCBYKYdym+X%W`AlbDmd*=c||QyBR|XH9qx(`Yq6W|7Rg4 zvE*rDTCse$ns(KrIPmIfG*21D5yu-n6}ut;T_680N0ngez`(KgZcn+yp$d&LycYl%N`r@jQ6?;I)8Jlt&1yTV$W$BC;_?^EwVq#7~F>QRUB1*%XL!LOg7o3nOAzNHt=v(s+`c=)h5Tr3 zifhCddb^)bZcZo%IEbzthZ`vzvVttUZSobrzn^bjhY^W|8#Wo>9+EKj`xUt`dn`wo zl2e|-KfnWXAI&F~0n2J4+%;b6Nq0KX{xh_0#&-xw4VUh%>@4d4)G63e1vaX*cSC7ql8-Vp6V35wz3}4Y!Ga*7mX4b36eS33~ z(Tk^hryEBPej(MeQQ};OY2J~XHuvC&xXvbVt3i_p9(X(i*l_oA89LXlRMa-q_LF`y z>s6`_v|a#t%zXpvB2|@OC1xvh^}Z_u{gl)8w=$YzOIb!_D;Pv;qV6EVF6CWyddOFU zPpCOjvS+eb>9=0h6#>9pi@}Ds-oA2MLe+V@0ue6#9M*!Tt{}VleU=!-BanKm_AQl4~0CWHf~RaBQ=gwOld74noP!$lyJ`S8z;bm`aTF!b4FINrBMbbl(DwMQ`S|q5rXEr$* zKDa|awlp;H7koMo(Ql|7hy%5YEGA44F;=)suAf#mtBgsI+SqBHvqIO}b+wIW-Avtw z9r(KHgITEdv0mSDQHevn4Y8ub13zdf2h3^r>=@U;i4jCpXM7)TQFs^(JM6qBB`_wyzHA({l}w$@J)kE$_#jWhkBq9vKc8vQgH&9q!7tg-z<%?GqMmQd ze>?IsT}Bwx;-e@WSSR&(HH+emT{hJ(zdErwSN-@97~5ZT6wgD_Q6e0Hnh_}XZ%s-`^nhR47cT;>+!JQJ6z=YX{%1wl(|s5K8=;{ zc4~mIdy`bEt*7U*HvNnOWVM6Oy}xeLzGucHa(b!@1@y{mLAnen*kN+WN*a31pA1sb|j~#VevOj&Q%3@2``avH+ z$UL*Y)DX?>>Ynlr)O$Cq?GagA3zt6_G&68{qPPW0Sm*B8c*^S0maeKJHWi)rLtkdt zCPp&C_aWufP^fymv6ojsRAon8fc72Kn`g06V2Y(u9W4%terQ+eKy#j2rMMvKz5?Qd zdan__?{(zPYxQc4D8|Bn>va7;zNK&O{}a`gQM1VAeB)yqlR6xIbRDr3h1u$+E;P@2 zN&&_61uKRkPc7di-J|aQ%BYbNRTDp4jg4P6rsyyb=__pX;2=+%eHoMVuz*B;?f~3W z7fzz(4`Ca3%T8;N+zF#;M8f5raJlX_Dq@bGLnf2+X%^moCVItc(FdHXI> z!fCF9iv1dz819iZOt5D}H;tz^rdlhFN@1()GpQFUMu(a}XF;wgXrj`1d6g}Ng3wM~ z0gdt5$A=qlG-W{?MOAtc3X%!!!sr%FRfViWnDT-tN1G=zrm{Vjbv-b5$02;&3$3{N zfHc47Rap-5(}-udIBurY!2UIsFe8H8C5(B(NsPmTJpPB*@U)7{YVzBqb%@Aqd8E~h z@y{0tw=oJL_c8+uJ$#Fwt<@T=OsTB@SY}znQ8&li%f3xr*@_jzw&7LeTxqNBjqND# zBj}S?Kh94vDp^)+tIMa=4mS*e`Cc;o1_aG{>s2ch_&|YaX@JhUPVq1Ur3#N%G9lxH zalmQVkc0}aI{!VPOIX#L7Htym9|V6oGVBb>pgCYi5jeA!uVwm!c1Cv&C7y9oR!w{= zf}l{)bE0zAT~Aj!M+~3`9!d((OVAV$prXMC{ih9K=2fyERhNUxKK*zwsyI{(tI?y{ zh>lCJ#mXy{_EpESX9#w1ro^&6m}pTw^9LK5p4tT@o(cgCEOt9-!6bp+TvsR5(B9M3 z4o9FQ)ULKQ>J!X~EIqu0;*sgF1fd+JEzjcX7@zS*Y2&WZ$cW%f-30YC2csuzI2T3Q z(UZ*{+GVr68mA(M+S{Alq!At1{@=$Huljy=Cz#iC$B1`^MV;kT?>zuiJYqC3T4BUT zRs^(bC;|92=pt$^shgGWY7|pLl%~2?O{e;&Ek+v5?GIt>8XX*46nCEA8S2_D0A}RS zDv2eu)W1Fv-{fp;iFwTiBwJ4nStZw!<&zohv=#XBGxVF(^6ODGMqD1*Ra65n5t&-- z^E`hl$h?i9?Jpu1DsTXZ!ZUDialm*)H8AGv|10mkzu{`*x6#pwPBMtzCDDoAi4vVW zQG;Q$n86smL~qdsi4whpc=QrXl;}o`-h1!83nK3%&v(7+ocH_%?>d$rwwXP%_rBft zr`^|eeZcqm-~iS zVsM{5Z6Hij#nS_O6?@&D$SfF_jL5Cg^q&+7j}^i9|LAHsB-{J9k>RyV5;@np_#36H zK9fudT8oa#o#WH9S7_c20jCoeo>o5DgRFJgjO8yiBWtYaFuR*{{YXd4C)W+qP=0r$ zJH7R50E`f(wPi1+w8Hx`%ql2GpY|fLBQA^LG&C%zApX>tL4A{)a91)+LD64OuTGP_ zm>BU@eu|MFC~<(f}2{ z*k0}0wW)c8R%PFD=|ud*$2m4}xR zu0%Q&1=(in#R%Jhx~R}zkpxe2L42lULPEb|8@qPth=CzpfB+LN|2`n*vzTo!4Oz(H z+sF)y3uSBxZSxwu&cnfTew!FSXwLtX%w=%Wroqi!Ft-dGcl7HZq*RFH1;W$7o*;Lw zbf@}Hh#*_dx?P_60|M6w0edMoW(7T5 z)n4}63-%HAhqjoEk@ONR)#Wa^lzkj95eg0fB(Yv)5EPLrvDUs>6;VtZmx5K}d}%+X zP))&Y-H4#Q%sb)c3x3-1!%B0PSG-8*gioK;ewlN~1a~1i&27~veb2%siG!Zj5)nMT z3ObWaHueQi^I$|q`eGjZ&$fYfI1UXx;y6vDsxFK5e(azNyL0jtw;0!P)W`taja+)k zh1zn6LtnQ0wSyO^G-WUvDlKeW12_?_8m}AS z9)q+u$JD2vEk@C$9h)3ufZES7$+Iq=i(L*6P|?fTpQ3cVwft&?CxvK=NQ0A`fFQpy zE;^A}|8;nGE3Y;dCU}o>b=Cc1$bALw^I>AwM@@sV04tunHvexGW|c}_;|Nur?Cp7yeA^XEP7h7q%U)Kb%K{Oc|eg;#{C%(J?kf7i5% zI_}FU{?{CF#vIP3?{v#5VqWvoG4V#ZWcTA?2#&I~bCw}?8w*9znCgr6nSgr4^y*L< z`pDotzhbA`KOLrmA5~L1+^2Cyol($gzHdO&dLX~y)BD#XMo6q;Q?pmX8!sla)ZtM* zZ&z>U7`CDDRz6~)H@$88d}@*(jW<2spV_Ynbud|sjz3f@3sVgkdTrvA2->RZMXB>T z&C%cpD4E&sv3?vRDm-6=LSf?y8&Nl(i3Xj&!5BsI=aK?AA6^$e=61{b6n%mGk=|Hr zW#FEM2qJF4>sL^Y%XDKqd0=Z+v26ENXXODwDUG<5_N*#Dk;r5h^}&C8AwgysgyTQb zE4bDDp9b@H2Uq!y988SVCD{pAGNRO}_b{-=#_TV5zzQeOG3y15f|C`K8Rd%{iX{yQ zvi_U!O5gU2@oB?Iy>2&f90<1MZ=2H8p;#c3&S26)f=W$a0uazkpEsuM&Hs{0i8l|= z-GwO0juk`N4G&zW^@w zRVvJoOD*}StKY)Cb&9=HaAk&q((NpaQR})!!pk^OzR;Gd&qK_eD79K=UkZ1WCDK4% z#QW`P9nhZp$Dr`O+Qrbp-}#|qq|?Xtt;kgxQWHhAu{sQ44Xg`tmU{F2N~aP(F@;7H zb-A^-6MZ#t!yl06KD6Fwh*&^`DJQr5z)tH3Y%cW3%YbaE1i5K}a@@=z5cO~BLt2$S zqiiPL=@TQ`CpOshK!pqk8?!2!TI}1!_4Kp%-agRG_)Tar1zID=B{X@XrKJT$A=*6zmE_1d! zi}}N8Hz#NWA=$(b6$AJAP%><^-C?HOSPw1<_ShJWJsN0d+jU!Wc-;S#ut7T1ln`Yk z5u4c9(f3Qd%f~{!U7YzZ+k9f=D)n4qyFpF`h?jYkK6Kxg^!UUY=~9#)CC;|rVupiR zD)MPdBQk3=Gwfl|lpd)sqx1&K3ym@mEH1dbGKV4454f4EBT@N0h_ z^`*XnS8pyi!RE{LB1nHDXk9nJOc9;Yi3l5LlZ^2tMS-NK9t?2fhVDhrbY*D4(@PFk zF9c49jQ+$!zCC!aiQP3zKgP39;8#AyP7u(b`nI`EyX7+j&B%Vlc`3eAMIN|)l8>!D zP}|1DF*c0;_}&++P4?MU7K{ZQi?QTvqGlPCZv82!I2D!EGVP5!Gm7SGmQ0eet;Ghx*!y9cOBt;%TX?`ockDYKsbSE-wN`HV!hT!9y$M$k+Lg6}L6epWtqfVa0RZ(f2C;^_WviSKq+GZUdsm@Visq3H6V$KLZ z$?&Yhz$k^mda5%J3DJ%-+00a{MU`A8hEsPk=n7pdjiF_;ouDb>Uf>b(O$l4GXI4pD zV3=od8yqV5gHQYRi%NAm;d_t-LHbKC(%738p_*q)vpKF1@SWa-$y!lQ>FKtdrx%zQ1Es*=jx)3jhAa01ZQsaEVY1 zg*H7A-r-hz?;#vJ4`Oes3G-!dJRuyMBF?i$OIhC?!?WO9H@R1x=lt4%-$Qz&H(6_= z-spu!cfD^>60ou@Yor;&a7isF9ws0khQGeCTI(AswZt z0na;kzpL1jkdbO1_E!yWPIL1czrjL+)$HsNL-`0B6;`Lc#fUQ?E1x=$c;7Jku72e0 z8U0VNpD|H9TH;9au>a>G)@2qIDtCrA)V-wjetgicQ7H&=`eLha=3#iUgz!$@=Fi|R zbNrg9RXCt{g!h0xe;Yw+@cfA=)~osGgz_?#pcBs3#|t0G^t1j|_judRH(WVfM5+Oo zdS3>;0cVpqt>RQvX|YSuv0-Ir0Ma-XOTurl?UNx7acy)we*$H~8b-ZpnH?MD7VT71X{UCwRS5y-`gGfB;!MJ_4le%w( z-R2u<)0y2%>s@77^fH8o3c5R|ZX)T6b~pO>A(^BonRa$edRQ3&C+ek`0JrdAy$?zm zZu5Zwl5Fsr9}N;2;fqqw{yI#8J(E@FtD_>g{3gFc7F0qMYcznOT+dR#Fe@;y6`<=q zJ;^8wQwL81zp;-W!tMNn<1>ZYatxZGchv(ujzAL4j65W$cNKwR1%gf~`;~Zk_DtPcbpzJC^Xk?2| zK{Q@e8cd^P>PpWmIc1=id4=R9D~?@-ZK}I*lZ071GS_(=T688)98&l~Lx&>6R>=QV z&jf=eDXGvlD7vkDq1dIjGM)%YD2p{w75xrISE5p`yyQLi@I9INi*N$^s%T+ZIzsd& zdnP}vWDt$Byrs6AufPZ!(sd7_dfmOdtEHORP@1XQ(Z^V0u_8vBMm+B#GmtG5B-!UN z-XE<+tm2?9GkEN>1ubnp43D89kzSugK8{4}o5Fev`Pi>iS^F3# z*QH;RcE@a76Ntf0kdrMF_?u$(z1|s#vor!0`(ri|%`<)pkgot_2#o*^jg1I*jN}ah z!|@FySog@=>MQ6Nd=wG{4)qZp^}%74fMhF2%?#fs6#ugM4TuKw7)2{LJq8M!5I4e` zNEx6y4WY?WjHV8yHo%{>Of0JxY(HX_kZS3+;MF}S?TMM97qjc~;fBG3&eCFu_E=$M z%J*>%O*5Byj^VNIN+~=NMaF~9GbkSO7seM{_$~l;pFcN2$NEyI6V59gaj?*k3$h1r z+aE~Gy-6W(W+@C>l{Ir8h-q9=Qn)Q-jO8w1s8H8283tw+Y7-`;!eTGYH`}qbo=5eJ z;jUU3R{);uxk}36>~S!Exc?px+d$K4Dr{>8k@}ilJH3K`&LPZ5LxKG7D~l_y)ONum z4HXd~C_!sa^fzt94w5H$ae6?jKiMi%MWuld@+@MIa&lh|-?k;hY!WbIkJ~n zvKN=_lqDd9Eo}E1!M-{x4=1F|dOXB%`a$x%|AJDHJ*#9zs|COCCv;%amaGt@F zNJ3BDlM~y%oAGkXMWe$$lsil~=!b)^xr!!EiDL`BSmYv5wKHgX{Apry*J}wGR(^hq zd02B{@pBp>;ZtLi)Vg5%IEg+Nn!-#q$FJN}SYhs!L7Du_|Azhn!>=@P;LF6;@ve*b zAiJQG=CwtjFd8KnzRbK|tOitTLt z0~UtG=%V$A7FGn&FhTQUA|WaXda=j8cl95MJ%XSby&@rWMP3-PTd&>1eEYlF^o{`P zu*_99&Be^_kRzM*4{gJ-B~3o{ThR(=KDCfnIA)HU0<5RdTssX#etnWen5`pNa_2$V zP-2X2Am)=yHiT#bNrB=5}x=PAAxw12Qt{>cEoO8S_4OtH|q(kruo(53zKC^Gv z$ZH2u%?L1NXZ7c4l#gpk!=R10aa*g+51Xd9K*LF^);}Dh z#M|%rn{c!`5nEoW>b7E8sG~6$dx1{Z^J>(J@ugkmi)zV}{!c`jOvqJR2JHo{0m7rg zox^Wwy5xqT46Fb#8t)df7@bYX6-H?`R)F?ZEW)sqTP?qj3^eaNOa1w4x}m_L1MfSI zkm`U?Hk;U25b*#am{Sc*kh8qMWMSC%O~dFvp&10Bqc|TkTl^sh<{Z6Z$R4f4aobj*^|h7E z{U`>CGyEG0TW1TQx08m1Up8Z7vDeGYAE=wMz1XNl`(C$e4oRF(Kac$UzAu242D?YR z&T`>1my#=&By05%sLUdHiwK{wAz8Gcu;0CYU1K1AI{=z>#9akTm8HqoTurRvRmqbn zVT91h**q~2$3-fO&l0INy1gyMo5bzO!`>y=gkb*yEi{ZLwm3U*jM1?$$tT(|fcNX{4HdOpWxN5|4-~DGU-R5NQ0i_3P%I+So64-8fxKCA9VAps>2+OD$H0tGTA9`LD9vcHj2zG;xKE3#)z8k&B^f z8C;jCaxtJI2+c@NC)pOd<27b2%1+f!I~{F-7GpKC4b4(}%hZcxu%`HVb1)86h1xvN z#Tg%bfaI9TqKj4H`rHU9ibD)q3l^>Sf zDf&$ys%dfUsqhY)z`(w8WZw_}3Q-kVXoyyIf@8DtYPUDJhK8k^(%cf{^&{ipU)Drq zJ!I^(8$T6riBS7hg<-w3_7^XDh-5OJxbQ`9H;sL4Uf1|VR<1gP>d)sq^>O5Q_WT*+ z_I|!>SBpe4NURT@0%lZK;P0}>B5=cP??ZD#oU5D-gt77ldJC|R_&{?eLTz86?djR# zWoLKHrGKXE>C)h=be4WJ(Fo`CmG6$KCmw{WQ*H|*ln}Xe!!e{KGRVFv3IcpG2W>^? zGHtMz3J=)^2iWyBFrkP@g;MyO71=8WJ8-eO_<5sxz)Uu2)CUBf6Ka_$wL@jf%ufGs zv;iMTQ9~9v2dqRm*p$}opR7D&(M%z)E63*7vh6?De7qlj17u#rmm3vpnfIp^G-F>3 zFIcA^6Qv@tWkLYrrt^dDB+>O`6ysL|x%P#hN^D205z$%3Qqhs!6zX;Pi_a ztY&e#Xt~d@XW+VeB|GLtMTKIrA#d>L3^#b{gF^M4j;AAN9Bbc;%V<_J28kjg>S~eA z_cgY_K}(9)o3_Iqe8+vsKm~Y%GGZ}LlH_M;;_u#ho{_Xlg1GPdxo9JHtVDQ0ElxIM z(MCa8Se7>R%Gijp1JFtF31OMdCQ3&0>apq% zT($Z$CqG$l5xLCGnX=24M*yDUNH!_dDu3j#ra}*(uxshzo-iHX{zCyBFmEA z$Wy-T`B3@Y#vf)2o(2z~)fKh_v?)XoHR-1WlP?`-d~x;0dw7GhC9N3=C^ze2%Qd-g zA`k-9h$E0ImJp#dxzXz@j=>OX9R@H?WP|J26TY7Xi`X>Z-bz9^$U2G|5o67|lWAXD z`nVS;vNhL2Y{khAdZ*~)d(r=*Q{^+{DLVajC|Mhv8b~OLPWvxAeATN9{VC?ZQFTf9 znjU%;s>6u^#m#MAR@(`oaFX{{z%$mX=oNdKk`*)g{~kD7yhhgyEViK07E$Oe7#oRy zqry-3W15arvETWU<~%^=H^A&hhK$MyjyM)DHx;uh9JOiF>2rOXD(KrZ#1~^Syi1&d zBNW9@-YB+_o>IOsP|$Hvk=W?|VFzmSK?IaRZi*b}QTOmL_DUne{*$=I&l^zIfAOE^%r$w1*(DhnG>nhGux`(4!#S-o; z6^+b?vpULJ0jkJkjDx5rmqDImq{#Kx(PXr+?YijNdwxuYWr>DlS}VyG$))#nauJak z*mibjR{0(V(ll`mQou59~n<>D891QJwcshJTI`Z0T<%fws~-;QVk`g^Rtm z`3eqxu0cI(fL8q^U8OAcaFq8~yRU|M{YeXYVcubkgtL1|lgW&X&^reab-|6Tl6UmQ z^u{kPCeE3FZ810bA#ibLC5I4)Kq0N=kKlt-r89yOE`9 zkmW&J_Vt&>ci&g!Bqks0$G(uLWJVAqN~GdEh?>cWF51soUG6X}aR0$iinWnCKfcGm6#^ViqwU`*bjtx)A2hVhU5!#cb^7Wd1K z`kVK=B2Y+P4mB2Hv>>p9ZE+xu689p^&1;h2b4J$J6Ucp=;-1d>055|Me?Zcno34k} zVf0osSt#8d?PW?t|6!FI3g&7fnRaYuJj=4x+xm9KN?wddj8(Kzu^!>XqG$Ss_m^*{ z#7Wp1S0%RbQJIwxH_wEp7)Q-;W{@o1yyzR>L`xMOH?qxtov7-n6b^eeLdTqp;ht4* zCA4(!z<*3hTH$BP?Ao+ku3iQ}%OPGYIW15|?iy59 zCGowuNcjlQ7xENEmIA&oX-1uLbejI6DOG74(vBnffov$DA;A`JK~5RG!yzV*62Qpo zcDdNQui44wMWqiO(5Qbirz2Et=_X(?nq2>7v9GYsR-IdhM}H8W)_a_Ej+cOlU6;)E zfXrozfp1WRsd9!8Y^Iov(Lf_N1_pE05u&&H*{N`@q1Q~QBpSZ~tbby!+>pVC(nx&Q z`9v?P!E_wO?2uxONah(#J^0J_6KfAvHR2F;YZaA^w4*Mh^5R?~kFQSBZ$RCtjrU8U zbo_&!hR~?B!o<)<#p0<+OZ%e)5e>e7Oz%2xhb7>UV^qkusR(26TU(B(Kz79rQL{wV~L=I$%R$ zNSomr?-)ZfOgF|zm4D)u=qDw~a%``oDsL?6U$Hx=5&*1QJc`)q4w}<`faMIz#1bmi zaZ0nutXe_N_Y&p0nv=l~mi;i8IC45Xg%RjV zOSQ$u;$kkuuFK3e6P)vaN~-p!@6Z|dZV<+zpNqohNhyc{YzlUU+j3*rB>KUS}S zeuBWh5HFW;j)x)FEU`|twt6wwOaujqoU>;yuJEAvuKpDBK+Mob5Sr3Jptm1ug&JmE?fkFC@(2 zLB|(Ucp~~<8jB=oP?5V?CKO_sK1AA6<1~=L4yF@bMrB7}y z3_E>;8Vg&}GwEy+^WF-wE#_ z2DaB0Gb;PYvXZBX>9YjUxyRzzwH(rn`sC{dbI536BjeJHN+J(u#LI9ux(6fK+8|p* zJ%tE%JVR`}FDdc5d^4eOL6!VJa2cX|>!{PgtKD9bhnaiq#CYY~XrU2_kt1p4Q3i%i zZZ~s$rDw$9HQi!ZZ7t86ocZZz)9pWobw};8lT(uI3^dYVbGfm@l8DTxJ6Mi?$|RpN z|BHhOeumeBom;uZC6aZ0-ySE*(7c&B4B!tO!_@zKLS1b($AO~rF5z(ziU>EX#~;Hx zutkUbl=^{&OlvxZ0o)ZhzRr@Jw$U2REc-cOCL1G#t;Rv7zN(H^=eiP0jNC67yRDED5W^jnKMhDC(TSQ zskJ*F`)BE&xu<7Gd(|-ZNCag#{|1b)Lj%6M%?~Dc56g&sIiw}s>`o}Nle(N4a||y* zk>K||lj~XCGn5^QN)tcuL?Aoaw}BR^;<%`jwb=-HqohqDg2pG{q zDMj{!)s)P3ImN!oe%68mSyoj&WS6tOGe3FBPd5q=<^iO_n`a5yNcT3P6MnK_$}s`t z9m31#-V73PzMZmK1sUFNxGb&y0BejLy}hQOvse%H7T)BW#2T-$cj$+`oO5&?4tqt; zWEOprxll+#E$B0};5axC8$i^Z_Vgby4-()RQ8c-?z!fd4{mX|fqn0Cl5`5`DC^n1s z&5mJ%h>w~1lnT=$qzDQ(RUgT)5wv}TJws2P1-P!+^zpiQ^voPcaiaFju?twRA(9B= z52_XG^Y{V^mTr9hwF$6ZYof)7eiWp6M|&K|$0xsn(Sx}-$EBU<{W?(H?rxmfsGahV zYNok0srj%NBhuo28Ik#|dLto5z?F$JbH-Z(f!$FO)||LE{xWh@N`sEB)2LL*Q&TY} zO3%3>PtvOfKP5#(XxxKEvWQ55O-v($b}{w{zD{w^#}bC0#GOBubu_5xqFxNzNM-TU zj6OtSS=)0)iyMy7lXd6L6=Y!~yV6u=+(U$Wl%)A#cVZ@|fgH!=*F1m58GuR4okyjG z{igijHWQ<+wXYVPZD?M`ziUlnJ+I|*R@!0l5Pd#WNUr$?f)k)TZzQaQGr1<%^lHm< zc-P^!?|44SgS-BsVSPFcTTL2_jaR_9fzW2r52vM=;WK9j5x_HKWy~ZrwgkKCD^1EM z;!L}EeR%0a#e}y+?7}vaMCZc;1Vo9Gj0nNHSU1 zX0{t>g?4`fMsZQD`#Rn%PulJY#z^F!bmS^e*@NQ8V%Nr`Q3_|A`AN1J7Ew~YWl0k8 z^{YUW<_6%+p<-Cc=U#5HH0VY=W~)UlZAb}#vbG9}RbEbZi9&5;ctaL<^b-fFeUZj$ zu=2KgnB31$`|u)Al59wu#lA_Fs-cXnF6Ss!vl)+I=tH&Dq&unsfIZgX} zlE3QLXVx$gY;Klv%@MRP_ersFkH-P`I=POWaDQ@y|{o2Jx zb@*iRq*C1F`2nR2!%#$Pw&4ux$=8>MS99OaY)E^uQ0J&??sjaONrKcbR^-xv1d2-V zx9+5sjhbok#!n6%aTI)9`HKAf0>he~CFBo}vDARyKq{>0y@7+o3$G!=+Yja2yPDJ*(@d zWs?r0V#dw2P1zs#Oj7tFU{A6@)ak&i-ja8@-tUkX6qwzS8#*Ov==5)Z_3DGQ817rX zxfIdbQ2y2Z{SLpSk@JgRJkMg_GN1~%7%W*{cLs|XOi$cXcKR4FOu7RnltzwIkX^r) z@W&MOV9y&XClPBVP<5R}8+;|hQ>ZHaQM6~yR9l<(8lMtJJT3!oyC9c@>6966KAgx3 z|73YDg_374BaDr7>vIg6)+!~C^j<~lm(72%6QxzRfBT`hbRt^02?r+*NhugyJsfB> zrf~@}h>>Z(^z2;mr4SdjbWqw_$w(F$r10fuqL`#iUf&3W+jUW8$Q7`YJCW-|$D&AN zI##Iku@{Tm#CR#-{Ni|XS>n$M=fYxDh)F=5i>~Gkc%Q^Mgdg{D#3qDJ3RA5w+!Wv8 z?6&=l;IzXL-ZhzEb9U&n2;tfklT(j9(QE=rML! z5z9P+df;FG%N@fhx5G|#o=kf|nNY~W2ZuWNnsLS~u6;gR1re^=7SPqM>VnZ3jb^6IF0r5#DE^m?%=Zv9Cw ziuSK@g9S+C(J}veLJnEGrPs#vC0*w&;oJ7^ji08C%^LZ2BZPjn(SpWPyZ7K(-v7|0 z_B`M7D=EvGPPOejfD1NdxORf2QsoEC{B28FPOph>yp03&FbPy^NIny{q+ub-2OsT- z&tTI4TJ>V-{3EVZ`SBMeJrG7r9UHefo2+>hc{D0Jl#gvKbX-k8LcKQ5sI$RzW_2vH zUNuEY&N*)4+r>8wN|@&xSoH`b#n%X;M$iM6u-bvxdrpG534|sn;*}n~_}%l*5%Grrs#7aHc^j?bOMn-XiK>>va^?jL2{?0`AIKIlrWc&1bU$7y|b+`{WqfOB>g zCgK>(Z(~EcoeY-!9QIDIw6lJ4`W-oGw)mjWpIfN>dkYj`5?J~88%>P^+^KpwMkln= z7Dn_Y=aTqbnUc>%KxiahGV`(b!xlo_1mf}HCr(Um6QeXeINK-&+3A0b+MkV6%#6H& z_q6m7AwQu_3We&pN$dSZh1w7a^ejNF6lqv!dzdP>Yk%z>^JXATKl4D;&G8?fi=71* zC#%2k60p~HoepUJ7G`OV5xNh=NJSTwSukissUzysgECRN>{jMUQG;e?Y;UyQ8Ay{t zmJ1F95cbWH4u=GGVI&RWZaP!t1z(md8FZ8hVw0oa@Q)F*yvG7VGN3E)h_=$kXl!bK?S#W!) z5|K4(vFx!XVy1KBXtKH}LB(aabNmH;bqJTgnmC{{G$}Hlai!6!-;&{_=EjbDOTP^R z3A4J{#CD9D0K;HBp?jn1ySdQGZt&b4Id^7lyL{W>oc%rcuOkP%c{$#F%UE}G#hAltVn%?xErx8|U<)%1QjL;Dx$YI^;zl%QB3ZU-4BfnPo zGw`Ht^&{x)fH1Uxkfjs5Uqbv}`g;FSpo(*zL{L(Gz4uj$^?CIQh2ow7Vy4;-{@^)# zIyW7p6!2m>tE)vzD$zE+h9%X`lDce;Zx#|ky}HQyvDyJVhrKY57coDxMC8s-Ww1FX z3>?bW4YBztr@I;0@i!@BNlRRBFx}N!+R+N3(ay9NBs|B=ceTSnl}y4&Glo8ImvGwE ziL|*eX1z?%88qlufoKS0OK-0XB#@J=P-FoUFNf2l!Zy_ zZ;y|=LMY5Rj`&H^$mtm7aH1daZklV$LQ%7Xr<{Yhl7~oy*=mS=A-YjHYj)Xy7MIu*Q{}G+5M+k` z1|$k0nm3A@`{7Y7#XCZS>$`8Pp)2o~*H@VhTpi+UduHqCqLmEKy`wvMEu!F9uBJNb zx>-%OY%f4NcE#;>?27!;)@DtBUFH0(ue}W?X3&$A0Mg%p@SNj6*n}Gr(PRn8ENZv> z)fECC?E;A)81uQZy!#NFF8uEcl(q+}_jwIV(uW!ZP$=1Vf3VL+L&YY6Tuo6@&#X?O zen}t{m8NY+PEY+Ie}_)QqK}S)?Z@U^Wazb=Zc*TI?w>0VSFohPdtJqriHm8cERwVj z&POgXeo~8?nf9c+b+J?@ChF4J)<9YpnL9{UjOtftDLD&FpQbZEuK8@^h9mBEYJ|dU(;x zW6n-DWMdrFt~CTE(+f1YBlx-J5?gx@{0->*I}3RyP|80ZJ}w-v3a+K z>0u{*LKhtPQq#r47)g|&UPmZn2ZI&UNqMbcaeG!2iDUU!(@_#{Axz}dx`!P42tCnt z-rjU?GXMfQS`HkRg}oS(JM(`-_Baq6*RrqV;N1@flAesdODG;Y#8g0KIF3wmVTffh zBQ>$KuERlZ0E}g$A^NWhqXZxp>FbTe<)_h*a^vWeOOL=-X#wo<+xoX;=dAbcpffsN+oSGsYxs{QC3ZI z#%eGdJi@dSVrS$0F8%K8C+Iwf&K{$(9{JZ&vz=!y0An5-5tDc@0CC#i>EGP=FhJS& zJn5K-LT1>66C5t-xV(~}WX2~kHErXHw;F7(uj{DmV*aC~4RVdwEgX?(P1zw#6uBgS{c+V&&pXzQi&xeL zCsWlK>_v6%!y~(Xpq}z{P70T0hZ=e?6l#u?Y#uPFOvHlz|r%$SCgU>>93VTC29Kw zLWzWS@0aD)KTUNZgK%l5igm7mwc}}I!!88rm^Hx>C(9$MmF%oIN|5t6dYI4O|98UoUkTFY!OJDps9A=v2ujD z2ovncPJ%4)Apb;h;-<|35j3+F>tHkglsgP-rf)^61Irqoo!seZR_eWI7A6T1N()Mv z68aK3ItOiR%#1z`fM5UbR5i-di@Q6lOrXZ#k%d42CG|*7Wl`fjviK`oo^TU+*$TSP zCe}tW{8kK_Z?67^Lqu4o$JZIn{2O zeEY)qXjX_K32p)rb*T%LR%H}+9|<=@{N6HzOgGKWTWvgWRZf@ugnL*1nB|YDe=MNO z@Z%&3YI)y8Mw^US1b#C44LGj$d`d9O#?xB@lLvn%_rheF@1z4MD(|#*ikfRVkIY)B z#^%w=eCaXeewuL2V2P9zw}->WD~FTj8C7!-)6OjOl~jNH0JVG1Uzpye{}b=&jh9rf zx{wy~3p-Cb^}15IGG;DRW62fi45j}|H&As$sX+@Svv(J@z80Rfx5*De}2AZO5AqbY-F~1D`?YgRbdGpD$x1x<(~_|b7)B}WK!{;p}STY z`YW`ew5lE}M=-pp3b5Z!K2Ip99~zclRrr(KNmwElqXIoKn+gRykpy4bzTc~^$V8e~ z5$b1>Nyz0$RN7G|Ts8}DzM~~H!wjS{!PMm)cFS*o^WJYj!*bAXz@5>}+%M>T&B6DE zz~Y480J1;r%1cA`ZoS0rrAx>!#Ba=gY2POiR37+5$d6j?2%M+hX#V27$Lzak1Qve( z->>l9r~DtU{5{9y|9Q^;{?w%9p1{Tb`+Ju5T>ih`e1Tc1o0xO|k9Sn*aH4mK&Zl!t z?ll9Gmew17^8I)4{YTq?6kqS9ZNj#X*@ZSKB zlPPnIS9ed=LE)=oda&Q%Yt&0J#b+Lg-xJn=<^%U_lCLtBZm%mNw+gDqbzjDHj&r6f zxE0=t6n=QioZWUs?^qbmfXu=Rk%K9oDiKf_wJ`|gO;6p-(6?G0ydxCk9p*g$m@(=X zi#lqkrwmvH(vSK6N`rnGc@rZ;7s5 zrG;h|1SK$dgs`R^GwmZjikBW$xy&<`%y(LItP$fhnpcP|w!K#}%aoknR(p%@A+dBb z{qVYdNAicSF0yN!u1n^H>%fz)<}bzhfSI#a^%4PPag6D^j5(G*{<9l@rw6L)@ zV$Ax>=o#&mp&$BE{bqk3zmDFF2h)3iW-cDyhyl6jHbJSfDqy=AXJ-@iW7* zC8qaxM0ecbbM}Kz9ZOq2y8YZ2G0G+RspSUy{O%F2t{uH~g@1+ndt~kBlQb$HVwHka zagQj1iM;I(tf)UX6+UQQ{!h6c5onLEZdaa}O`kbz^`HS2&wh2NIXclF8#qOxncZ8| zl#MSY>91b-ghb_n({D6AJIS!n=shloj7`DcHiCh!oz(clqIBrit!MVTa|^2=BQDoI z+YLK_XMM=7$UvNT=XLf+$4vnJJW{O zY-)uT^|zB3CureJWmWHYg;u$}mN>4p05RtMZ_8#k@k7aaZwiuG?*%O{)YTZ>RmG;1 zbAAIRZsh%aPtN%d4-cNTdObR}#QVSI*Yxrp*Ll>fdgF$u=#yhn`sOE%>QPg_lyIkQ zpQE44MAHxO3+k)`$J@>Mg<3!4cx|>5VA52C#e(wQMUD#jW1F%4z+D&Rqn)2a1m0^U zm}qikR%dCucDt%Ye$4)t9-LU+%i7WB4aPZ!J<=@JRk_VkX{9#&ynp-s!cZfx))n)C h2U5y{ZwSsUw=f!EDLSHWBF{Dc`3K`ivjcz6{4YBic&-2d literal 0 HcmV?d00001 diff --git a/docs/source/project_type-buildArea.md b/docs/source/project_type-buildArea.md index 235f850b4..bbc46ea49 100644 --- a/docs/source/project_type-buildArea.md +++ b/docs/source/project_type-buildArea.md @@ -2,81 +2,105 @@ ![Build Area](_static/img/data_structure-firebase-1.svg) -| Name | ID | Description | Screenshot | -| ---- | -- | ----------- | ---------- | -| BuildArea | 1 | A 6 squares layout is used for this project type. By tapping you can classify a tile of satellite imagery as *yes*, *maybe* or *bad_imagery*. Project managers can define which objects to look for, e.g. "buildings". Furthermore, they can specify the tile server of the background satellite imagery, e.g. "bing" or a custom tile server. | | - - -## Data Model -The MapSwipe crowdsourcing workflow is designed following an approach already presented by [Albuquerque et al. (2016)](http://www.mdpi.com/2072-4292/8/10/859). Five concepts are important in the following: -* project drafts -* projects -* groups -* tasks -* results. - -| - -As a project manager you have to care about the **Project Drafts** only. The information you provide through the **Manager Dashboard** will be used to set up your project. You should provide the following information. - ### Project Drafts -The project drafts contain all information needed to set up your project. Only MapSwipe user accounts with dedicated project manager role can create projects. Make sure to get the rights before submitting project drafts. - -| Parameter | Description | -| --- | --- | -| _Basic Project Information_ | -| **Name** | The name of your project (25 chars max) | -| **Look For** | What should the users look for (e.g. buildings, cars, trees)? (15 chars max). | -| **Project Type** | Is `1` for all Build Area projects. | -| **Direct Image Link** | An url to an image. Make sure you have the rights to use this image. It should end with .jpg or .png. | -| **Project Details** | The description for your project. (3-5 sentences). | -| **Verification Number** | How many people do you want to see every tile before you consider it finished? (default is 3 - more is recommended for harder tasks, but this will also make project take longer) | -| **Group Size** | How big should a mapping session be? Group size refers to the number of tasks per mapping session. | -| _Project Type Specific Information_ | -| **Zoom Level** | We use the Tile Map Service zoom levels. Please check for your area which zoom level is available. For example, Bing imagery is available at zoomlevel 18 for most regions. If you use a custom tile server you may be able to use even higher zoom levels. | -| **KML file Content** | The content of a KML file. Make sure that you provide a single polygon geometry. | -| **Tile Server Name** | Select the tile server providing satellite imagery tiles for your project. Make sure you have permission. You can choose: `Bing`, `Digital Globe`, `Sinergise`, `Custom` | -| **Custom Tile Server URL** (optional) | A custom tile server URL that uses {z}, {x} and {y} as placeholders and that already includes the api key. This is only needed if you choose `Custom` as the _Tile Server Name_ | -| **WMTS Layer Name** (optional) | Enter the name of the layer of the Web Map Tile Service (WMTS). This is only needed if you choose `Sinergise` as the _Tile Server Name_. | -| **API Key required** (optional) | Do you need an api key for the imagery? | -| **API Key** (optional)| Insert the api key if required. | +To initialize a Build Area Project as a Project Manager you only need to upload a bounding polygon as well as fill in some information about your mission. +Details on the basic information you need to fill in to describe you mission can be found on the [main project type site](project_type.html). + +```json +{ + "createdBy": "TestCreator", + "geometry": { + "type": "FeatureCollection", + "features": [{ + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [34.975833892822266, -15.899098066386088], + [35.089302062988274, -15.899098066386088], + [35.089302062988274, -15.820002241903946], + [34.975833892822266, -15.820002241903946], + [34.975833892822266, -15.899098066386088] + ] + ] + }, + "properties": {} + }] + }, + "image": "", + "lookFor": "buildings", + "name": "test - Malawi (1)\ntest", + "projectDetails": "This is a test project", + "verificationNumber": 3, + "groupSize": 120, + "tileServer": { + "name": "bing", + "credits": "© 2019 Microsoft Corporation, Earthstar Geographics SIO" + }, + "projectType": 1 +} +``` ### Projects -Projects get created from _Project Drafts_ by the Mapswipe workers. The workers extend the information by the following parameters. - - +Below you can find an example for a created Build Area project in firebase. + +```json +{ + "contributorCount": 1, + "created": "2021-12-23T13:47:27.346088Z", + "createdBy": "X0zTSyvY0khDfRwc99aQfIjTEPK2", + "groupMaxSize": 0, + "groupSize": 25, + "image": "https://firebasestorage.googleapis.com/v0/b/dev-mapswipe.appspot.com/o/projectImages%2Fbuildarea.png?alt=media&token=07505c0e-0f80-454c-b446-9b82a73d9d3e", + "isFeatured": false, + "lookFor": "Buildings", + "name": "Build Area with Bing Imagery Z18 - Kenya (1)\nMapSwipe Devs", + "progress": 0, + "projectDetails": "This is a \"normal\" Build Area project. The project uses Bing Imagery at zoom level 18", + "projectId": "-MrbXgHx8YJDt6cTIyGA", + "projectNumber": "1", + "projectRegion": "Kenya", + "projectTopic": "Build Area with Bing Imagery Z18", + "projectType": 1, + "requestingOrganisation": "MapSwipe Devs", + "requiredResults": 148158, + "resultCount": 0, + "status": "active", + "tileServer": { + "apiKey": "AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", + "credits": "imagery credits of project", + "name": "bing", + "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a{quad_key}.jpeg?g=1&token={key}" + }, + "tutorialId": "tutorial_-MnNaUEShyefFtMG6_5-", + "verificationNumber": 3, + "zoomLevel": 18 +} +``` ### Tasks -To create a new mapping task, the overall project extent is split up into many single tasks. Tasks are the smallest unit in the MapSwipe data model. They are derived from the area of interest by gridding it into many small equal-sized rectangular polygons. Each task corresponds to a specific tile coordinate from a tile map service (TMS) using a web Mercator projection as its geographical reference system. Therefore, each task is characterized by a geometry and its tile coordinates, which describe its x, y and z position. For the projects analysed in this project, the tiles for all tasks are generated at zoom level 18. Taking the latitude of each task location into account the satellite imagery has a maximum spatial resolution of ~ 0.6 meter at the equator. -| Parameter | Description | -| --- | --- | -| **Id** | Each task can be identified by its Id. The Id is a composition of its position in the corresponding tile map system, which can be described by the x, y and z coordinates. | -| **Tile Z** | The z coordinate of the tile defines the zoom level. Greater values for z will correspond to higher spatial resolution of the corresponding image. For most regions Bing provides images up to zoom level 18. For aerial imagery or images captured by UAVs even higher z values are valid. | -| **Tile X**| The x coordinate characterises the longitudinal position of the tile in the overall tile map system taken the zoom level into account. The x coordinates increase from west to east starting at a longitude of -180 degrees. | -| **Tile Y** | The y coordinate characterises the latitudinal position of the tile in the overall tile map system taken the zoom level into account. The latitude is clipped to range from circa -85 to 85 degrees. The y coordinates increase from north to south starting at a latitude of around 85 degrees. | -| **Geometry** | Each task has a polygon geometry, which can be generated by its x, y and z coordinates. At the equator the task geometry is a square with an edge length of around 150 metres covering circa 0.0225 square kilometres. Due to the web Mercator projector the task geometry will be clinched with increasing distance to the equator. At the same time the area per task will decrease. | -| **Tile URL** | The tile URL points to the specific tile image described by the x, y, and z coordinates. Usually, the image has a resolution of 256 x 256 pixels. However, some providers also generate image tiles with higher resolution (e.g. 512 x 512 pixels). | +| Parameter | Description | +|-------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| *Project Type Specific Information* | | +| **Tile Z** | The z coordinate of the tile defines the zoom level. Greater values for z will correspond to higher spatial resolution of the corresponding image. For most regions Bing provides images up to zoom level 18. For aerial imagery or images captured by UAVs even higher z values are valid. | +| **Tile X** | The x coordinate characterises the longitudinal position of the tile in the overall tile map system taken the zoom level into account. The x coordinates increase from west to east starting at a longitude of -180 degrees. | +| **Tile Y** | The y coordinate characterises the latitudinal position of the tile in the overall tile map system taken the zoom level into account. The latitude is clipped to range from circa -85 to 85 degrees. The y coordinates increase from north to south starting at a latitude of around 85 degrees. | +| **Geometry** | Each task has a polygon geometry, which can be generated by its x, y and z coordinates. At the equator the task geometry is a square with an edge length of around 150 metres covering circa 0.0225 square kilometres. Due to the web Mercator projector the task geometry will be clinched with increasing distance to the equator. At the same time the area per task will decrease. | +| **Tile URL** | The tile URL points to the specific tile image described by the x, y, and z coordinates. Usually, the image has a resolution of 256 x 256 pixels. However, some providers also generate image tiles with higher resolution (e.g. 512 x 512 pixels). | ### Groups -Single MapSwipe projects can contain up to several hundred thousand tasks. This can pose a challenge to fast and performant communication between clients and server if many volunteers contribute data at the same time. Therefore, groups have been introduced to reduce the amount of client requests on the backend server. Groups consists of several tasks, that will be shown to the user in one mapping session. The grouping algorithm uses the extent of a project as an input and generates chunks of tasks lying next to each other. Each group has a height of three tasks and a width of approximately 40 tasks. +The grouping algorithm uses the extent of a project as an input and generates chunks of tasks lying next to each other. +Each group has a height of three tasks and a width of approximately 40 tasks. -| Parameter | Description | -| --- | --- | -| **Id** | Each group can be identified by its Id. | -| **Tasks** | Each group contains several tasks. The information for all tasks of the group will be stored in an array. | -| **Geometry** | The group geometry is defined by the union of all assigned task geometries. | -| **Completed Count** | Once a group has been completely mapped by a volunteer the completed count of the corresponding group will be raised by one. The completed count of the group is used to assess the overall progress of each project. For doing so the completed count is compared to the redundancy required (see Table 2). During the mapping process groups will be served in ascending completed count order. Thus, groups with low completed count will be served first. | +| Parameter | Description | +|--------------|------------------------------------------------------------------------------------------------------| +| **Geometry** | The Build Area groups save the bounding box coordinates in fields labeled xMax, xMin, yMax and yMin. | ### Results -Results contain information on the user classifications. However, only “Yes”, “Maybe” and “Bad Imagery” classifications are stored as results. Whenever users indicate “No building” by just swiping to the next set of tasks, no data entry is created. “No Building” classifications can only be modelled retrospectively for groups where a user also submitted at least one “Yes”, “Maybe” or “Bad Imagery” classification. - -| Parameter | Description | -| --- | --- | -| **Id** | Each result can be identified by its Id. The Id is a combination of task Id and user Id. | -| **Task Id** | Each result corresponds to a specific task, which can be described by its Id. | -| **User Id** | Each result is contributed by a specific user. Users can be identified by their Id. | -| **Timestamp** | The timestamp (in milliseconds since 01-01-1970) provides information on the time the user completed the group and uploaded the result data. Results within the same group are assigned the same timestamp. | -| **Result** | This parameter describes the given answer. 1 corresponds to “Yes”, 2 corresponds to “Maybe” and 3 corresponds to “Bad Imagery”. Each user can only submit one result per task. | +Results contain information on the user classifications. However, only “Yes” (1), “Maybe” (2) and “Bad Imagery” (3) classifications are stored as results. +Whenever users indicate “No building” by just swiping to the next set of tasks, no data entry is created. +“No Building” classifications can only be modelled retrospectively for groups where a user also submitted at least one “Yes”, “Maybe” or “Bad Imagery” classification. \ No newline at end of file diff --git a/docs/source/project_type-changeDetection.md b/docs/source/project_type-changeDetection.md index e69de29bb..8236da1d3 100644 --- a/docs/source/project_type-changeDetection.md +++ b/docs/source/project_type-changeDetection.md @@ -0,0 +1,114 @@ +# Change Detection + +## Project Draft + +The Change detection project type is initialized in the same way as the standard buildArea project. + +Project Draft example for a Change Detection project: +```json +{ + "createdBy": "Sample Manager", + "geometry": {"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-175.21785736083984,-21.122295110595505],[-175.2367401123047,-21.148873980682744],[-175.21339416503906,-21.152716314425852],[-175.19931793212888,-21.15239612375494],[-175.19588470458984,-21.147913381670975],[-175.1931381225586,-21.136385707660683],[-175.1934814453125,-21.129660817021904],[-175.21785736083984,-21.122295110595505]]]}}]}, + "image": "http://www.redcrosseth.org/media/k2/items/cache/5a05a447acfdf6fcc40548cc4c1cea8d_L.jpg", + "lookFor": "DESTROYED BUILDINGS", + "name": "Change Detection Sample Project", + "projectDetails": "This project uses Bing as the tile server and zoom level 18 for the before image. For after we use imagery from open aerial map.", + "verificationNumber": 3, + "groupSize": 15, + "projectType": 3, + "tileServerA": { + "name": "bing", + "apiKeyRequired": true, + "caption": "Before", + "credits": "© 2019 Microsoft Corporation, Earthstar Geographics SIO" + }, + "tileServerB": { + "name": "custom", + "url": "https://tiles.openaerialmap.org/5b3541802b6a08001185f8b1/0/5b3541802b6a08001185f8b2/{z}/{x}/{y}.png", + "apiKeyRequired": false, + "apiKey": "", + "caption": "After", + "date": "2018-02-21", + "credits": "© OpenAerialMap" + } +} +``` +Examples of other initialization options can be found in the mapswipe-backend repository at mapswipe_workers/tests/integration/fixtures/change_detection/project_drafts.json. + +## Project structure + +Project Structure example for a project which was created via HOT Tasking Manager Project ID. +```json +{ + "contributorCount" : 0, + "created" : "2021-12-23T14:14:52.179930Z", + "createdBy" : "X0zTSyvY0khDfRwc99aQfIjTEPK2", + "groupMaxSize" : 0, + "groupSize" : 25, + "image" : "https://firebasestorage.googleapis.com/v0/b/dev-mapswipe.appspot.com/o/projectImages%2FEQ%2BEarthquake.png?alt=media&token=6e82ba52-8adb-4214-8f81-4b7030c00946", + "isFeatured" : false, + "lookFor" : "damaged buildings", + "name" : "Earthquake - Experimental Damage Assessment - Les Cayes (Haiti) (1)\nSimon BA", + "progress" : 0, + "projectDetails" : "In attempt to provide a rapid damage assessment for the 7.2 magnitude earthquake on August 14, please slowly compare the images to determine if damage is visible in the post-event scene. This methodology is still being tested and should not replace traditional damage assessment methods. Imagery is provided through [Maxar's Open Data Programm](https://www.maxar.com/open-data) and hosted by [MapBox](https://www.mapbox.com/).", + "projectId" : "-Mrbd5ArF4lb_GoYG2I5", + "projectNumber" : "1", + "projectRegion" : "Les Cayes (Haiti)", + "projectTopic" : "Earthquake - Experimental Damage Assessment", + "projectType" : 3, + "requestingOrganisation" : "Simon BA", + "requiredResults" : 3636, + "resultCount" : 0, + "status" : "inactive", + "tileServer" : { + "apiKey" : "f57b8754-0d70-4439-bdb4-641beea5c2ec", + "credits" : "© 2019 Maxar", + "name" : "maxar_premium", + "url" : "https://services.digitalglobe.com/earthservice/tmsaccess/tms/1.0.0/DigitalGlobe%3AImageryTileService@EPSG%3A3857@jpg/{z}/{x}/{y}.jpg?connectId={key}" + }, + "tileServerB" : { + "credits" : "© Maxar, MapBox", + "name" : "custom", + "url" : "https://api.mapbox.com/v4/mapboxsatellite.haiti-post-2021/{z}/{x}/{y}.webp?sku=101Fw3jtBuWI5&access_token=pk.eyJ1IjoibWFwYm94c2F0ZWxsaXRlIiwiYSI6ImNqZWZ0MHg0djFqZWoyeG9kN3ZiMmkyd3cifQ.y2HNjGo7FcKQ7psI_BfGqQ" + }, + "tutorialId" : "tutorial_-MhJtd9ePFOw8Vs6xwZ2", + "verificationNumber" : 3, + "zoomLevel" : 19 +} +``` + + +## Group structure + +| Parameter | Description | +|--------------|------------------------------------------------------------------------------------------------------------| +| **Geometry** | The Change Detection groups save the bounding box coordinates in fields labeled xMax, xMin, yMax and yMin. | + +## Task structure + + +| Parameter | Description | +|-------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| *Project Type Specific Information* | | +| **Task X** | The x coordinate characterises the longitudinal position of the tile in the overall tile map system taken the zoom level into account. The x coordinates increase from west to east starting at a longitude of -180 degrees. | +| **Task Y** | The y coordinate characterises the latitudinal position of the tile in the overall tile map system taken the zoom level into account. The latitude is clipped to range from circa -85 to 85 degrees. The y coordinates increase from north to south starting at a latitude of around 85 degrees. | +| **Geometry** | Each task has a polygon geometry, which can be generated by its x, y and z coordinates. At the equator the task geometry is a square with an edge length of around 150 metres covering circa 0.0225 square kilometres. Due to the web Mercator projector the task geometry will be clinched with increasing distance to the equator. At the same time the area per task will decrease. | +| **URL** | Image for the tile at timestamp A. The tile URL points to the specific tile image described by the x, y, and z coordinates. | +| **URL 2** | Image for the tile after timestamp A. The tile URL points to the specific tile image described by the x, y, and z coordinates. | + + +## Result Structure +```json +{"OzDyJJ8su8TQtctYVIg9w5tplaX2": + {"data": + {"device":"6a39e920622c4fbb", + "id":"13555_105_298", + "item":"Buildings", + "projectId":13555, + "result":1, + "timestamp":1544613097198, + "user":"OzDyJJ8su8TQtctYVIg9w5tplaX2" + } + } +} +``` diff --git a/docs/source/project_type-footprint.md b/docs/source/project_type-footprint.md index a4aa290a1..8d74025ff 100644 --- a/docs/source/project_type-footprint.md +++ b/docs/source/project_type-footprint.md @@ -1,9 +1,6 @@ # Footprint -![Footprint](_static/img/data_structure-firebase-2.svg) - - -## Import structure +## Project Draft Footprint projects can be supplied with geometries in three seperate ways. 1. by specifying a HOT Tasking Manager Project ID and an object [filter](https://docs.ohsome.org/ohsome-api/v1/filter.html) @@ -11,7 +8,7 @@ Footprint projects can be supplied with geometries in three seperate ways. 3. by uploading an aoi and an object [filter](https://docs.ohsome.org/ohsome-api/v1/filter.html) -Import structure example for a footprint project which was initialized with an aoi and a filter: +Project Draft example for a footprint project which was initialized with an aoi and a filter: ```json { "createdBy" : "Sample Admin", @@ -44,7 +41,6 @@ Import structure example for a footprint project which was initialized with an a "wmtsLayerName" : "" } } - ``` Examples for the other initialization options can be found in the mapswipe-backend repository at mapswipe_workers/tests/integration/fixtures/footprint/projectDrafts. @@ -91,17 +87,7 @@ Project Structure example for a project which was created via HOT Tasking Manage ## Group structure -``` -{ - "finishedCount" : 0, - "groupId" : "g289", - "numberOfTasks" : 31, - "progress" : 0, - "projectId" : "-Mq_IVluLteQRS75gWej", - "requiredCount" : 3 -} - -``` +The footprint groups follow the standard group structure. ## Task structure @@ -118,7 +104,7 @@ Project Structure example for a project which was created via HOT Tasking Manage ``` ## Result Structure -``` +```json {"OzDyJJ8su8TQtctYVIg9w5tplaX2": {"data": {"device":"6a39e920622c4fbb", diff --git a/docs/source/project_type.md b/docs/source/project_type.md index 96c07a096..2d94d1c5d 100644 --- a/docs/source/project_type.md +++ b/docs/source/project_type.md @@ -10,13 +10,13 @@ The MapSwipe back end currently supports 3 **project types**. Each project type | Name | ID | Description | Screenshot | | ---- | -- | ----------- | ---------- | -| BuildArea | 1 | A 6 squares layout is used for this project type. By tapping you can classify a tile of satellite imagery as *yes*, *maybe* or *bad_imagery*. Project managers can define which objects to look for, e.g. "buildings". Furthermore, they can specify the tile server of the background satellite imagery, e.g. "bing" or a custom tile server. | | -| Footprint | 2 | An image with a footprint overlay. The question is whether this footprint is correctly approximating a structure on the shown image, which can be answered with *yes*, *no* or *Not sure*. Additionally, a button is shown which hides the footprint overlay. | | -| ChangeDetection | 3 | add description. | | +| [BuildArea](project_type-buildArea.html) | 1 | A 6 squares layout is used for this project type. By tapping you can classify a tile of satellite imagery as *yes*, *maybe* or *bad_imagery*. Project managers can define which objects to look for, e.g. "buildings". Furthermore, they can specify the tile server of the background satellite imagery, e.g. "bing" or a custom tile server. | | +| [Footprint](project_type-footprint.html) | 2 | An image with a footprint overlay. The question is whether this footprint is correctly approximating a structure on the shown image, which can be answered with *yes*, *no* or *Not sure*. Additionally, a button is shown which hides the footprint overlay. | | +| [ChangeDetection](project_type-changeDetection.html) | 3 | Two images are shown, the upper picture shows a scene before e.g. a disaster, while the lower picture shows the scene afterwards. By tapping you can classify the scene as *yes*, *maybe* or *bad_imagery*. Project managers can define which objects to look for, e.g. "buildings". Furthermore, they can specify the tile server of the background satellite imagery, e.g. "bing" or a custom tile server. | | ## Data Model -This way of formulating the overall crowdsourcing challenge and it's sub components shapes the **data model** we use. +This way of formulating the overall crowdsourcing challenge and it's subcomponents shapes the **data model** we use. The data model is depicted in *Figure 1* and consists of the following parts: * project drafts @@ -24,67 +24,85 @@ The data model is depicted in *Figure 1* and consists of the following parts: * groups * tasks * results -* solutions * users - +* announcement (can be set manually in firebase -> banner at the top of the app) | | +Below you can see the structure on the example of a Build Area project. The project manager supplies a bounding polygon, +which is then divided into multiple groups, which are in turn divided into multiple tasks. +Results are always bound to a task and what a result means differs by project type. + +| + +As a project manager you have to care about the **Project Drafts** only. The information you provide through the **Manager Dashboard** will be used to set up your project. You should provide the following information. + ### Project Drafts -After project managers defined their mapping challenges in the very first step, they can generate **project drafts** through the manager dashboard. The project drafts contain all information about your mapping challenge that you need to initialize a project in MapSwipe. +The project drafts contain all information needed to set up your project. +Only MapSwipe user accounts with dedicated **project manager role** can create projects. +Make sure to get the rights before submitting project drafts. + +After project managers defined their mapping challenges in the very first step, they can generate **project drafts** through the manager dashboard. +The project drafts contain all information about your mapping challenge that you need to initialize a project in MapSwipe. For instance, the project draft defines which area you want to get mapped and how many users should work on each task. -| Parameter | Description | -| --- | --- | -| _Basic Information_ | These parameters are the same across all project types. | -| **Name** | The name of your project (25 chars max) | -| **Look For** | What should the users look for (e.g. buildings, cars, trees)? (15 chars max). | -| **Project Type** | The type of your mapping challenge. | -| **Direct Image Link** | An url to an image. Make sure you have the rights to use this image. It should end with .jpg or .png. | -| **Project Details** | The description for your project. (3-5 sentences). | -| **Verification Number** | How many people do you want to see every tile before you consider it finished? (default is 3 - more is recommended for harder tasks, but this will also make project take longer) | -| **Group Size** | How big should a mapping session be? Group size refers to the number of tasks per mapping session. | -| _Project Type Specific Information_ | There will be varying parameters defined by the individual project types. You can find this information at the page for each project type. | +| Parameter | Description | +|-------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| _Basic Information_ | These parameters are the same across all project types. | +| **Name** | The name of your project (25 chars max) | +| **Look For** | What should the users look for (e.g. buildings, cars, trees)? (15 chars max). | +| **Project Type** | The type of your mapping challenge. | +| **Direct Image Link** | An url to an image. Make sure you have the rights to use this image. It should end with .jpg or .png. | +| **Project Details** | The description for your project. (3-5 sentences). | +| **Verification Number** | How many people do you want to see every tile before you consider it finished? (default is 3 - more is recommended for harder tasks, but this will also make project take longer) | +| **Group Size** | How big should a mapping session be? Group size refers to the number of tasks per mapping session. | +| _Project Type Specific Information_ | There will be varying parameters defined by the individual project types. You can find this information at the page for each project type. | ### Projects The **project** holds all information provided by the project drafts, but adds additional information which are needed for the MapSwipe app such as progress and number of users who contributed. A project consists of several groups. -| Parameter | Description | -| --- | --- | -| *Basic Information* | -| **Name** | The name of your project (25 chars max) | -| **Look For** | What should the users look for (e.g. buildings, cars, trees)? (15 chars max). | -| **Project Type** | Is `1` for all Build Area projects. | -| **Direct Image Link** | An url to an image. Make sure you have the rights to use this image. It should end with .jpg or .png. | -| **Project Details** | The description for your project. (3-5 sentences). | -| **Verification Number** | How many people do you want to see every tile before you consider it finished? (default is 3 - more is recommended for harder tasks, but this will also make project take longer) | -| **Group Size** | How big should a mapping session be? Group size refers to the number of tasks per mapping session. | -| **progress** | | -| **isFeatured** | | -| **projectId** | | -| **contributorCount** | | -| **resultCount** | | -| **numberOfTasks** | | -| **status** | | -| *Project Type Specific Information* | There will be varying parameters defined by the individual project types. You can find this information at the page for each project type. | +| Parameter | Description | +|-------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------| +| *Basic Information* | | +| **Name** | The name of your project (25 chars max) | +| **Look For** | What should the users look for (e.g. buildings, cars, trees)? (15 chars max). | +| **Project Type** | Is `1` for all Build Area projects. | +| **Direct Image Link** | An url to an image. Make sure you have the rights to use this image. It should end with .jpg or .png. | +| **Project Details** | The description for your project. (3-5 sentences). | +| **Verification Number** | How many people do you want to see every tile before you consider it finished? (default is 3 - more is recommended for harder tasks, but this will also make project take longer) | +| **Group Size** | How big should a mapping session be? Group size refers to the number of tasks per mapping session. | +| **progress** | | +| **isFeatured** | If true the project will appear bigger in the app. | +| **projectId** | ID of the project. | +| **contributorCount** | How many volunteers contributed. | +| **resultCount** | | +| **numberOfTasks** | Number of tasks in project. | +| **status** | Active vs inactive. | +| *Project Type Specific Information* | There will be varying parameters defined by the individual project types. You can find this information at the page for each project type. | ### Groups The **groups** are an intermediary between projects and tasks. Each group belongs to a single project and consists of several tasks. -Groups are the key to distribute tasks to MapSwipe users in a way that we can ensure that everything gets mapped as often as required in an efficient manner. -| Parameter | Description | -| --- | --- | -| *Basic Information* | | -| groupId | | -| numberOfTasks | | -| progress | | -| projectId | | -| finishedCount | | -| requiredCount | | -| *Project Type Specific Information* | There will be varying parameters defined by the individual project types. You can find this information at the page for each project type. | +Single MapSwipe projects can contain up to several hundred thousand tasks. +This can pose a challenge to fast and performant communication between clients and server if many volunteers contribute data at the same time. +Therefore, groups have been introduced to reduce the amount of client requests on the backend server. + +Groups consists of several tasks, that will be shown to the user in one mapping session. +They are the key to distribute tasks to MapSwipe users in a way that we can ensure that everything gets mapped as often as required in an efficient manner. + +| Parameter | Description | +|-------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| *Basic Information* | | +| groupId | ID of the group. | +| numberOfTasks | How many tasks are in each group. | +| progress | | +| projectId | ID of the project the group belongs to. | +| finishedCount | Once a group has been completely mapped by a volunteer the completed count of the corresponding group will be raised by one. The completed count of the group is used to assess the overall progress of each project.
For doing so the completed count is compared to the redundancy required (see Table 2). During the mapping process groups will be served in ascending completed count order. Thus, groups with low completed count will be served first | +| requiredCount | How many volunteers have to map a group. | +| *Project Type Specific Information* | There will be varying parameters defined by the individual project types. You can find this information at the page for each project type. | ### Tasks The **tasks** are the smallest component in our data model. @@ -92,12 +110,14 @@ Each task formulates an easy and quick to solve mapping challenge. In many cases this challenge can be put into a simple question, e.g. *Can you see a building in this satellite imagery tile*. Tasks always belong to a specific group and project. -| Parameter | Description | -| --- | --- | -| *Basic Information* | | -| groupId | | -| projectId | | -| taskId | | +Tasks are usually gzip compressed on firebase to save space. That is why this information is not readable by humans in firebase. + +| Parameter | Description | +|-------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------| +| *Basic Information* | | +| **taskId** | ID of the task. | +| **groupId** | ID of the group the task belongs to. | +| **projectId** | ID of the project the task belongs to. | | *Project Type Specific Information* | There will be varying parameters defined by the individual project types. You can find this information at the page for each project type. | @@ -108,11 +128,11 @@ A result is the simple answer to your initial question. For instance, it's a simple "yes" to the question "can you see a building in this satellite imagery tile". | Parameter | Description | -| --- | --- | -| timestamp | | -| startTime | | -| endTime | | -| result | | +|-----------|-------------| +| timestamp | | +| startTime | | +| endTime | | +| result | | ### Users @@ -120,11 +140,11 @@ The **users** provide the results to your tasks. They are the key to solve your mapping challenge. For each user we generate mapping related statistics, e.g. the number of projects a user has been worked on. -| Parameter | Description | -| --- | --- | -| created | | -| projectContributionsCount | | -| groupContributionCount | | -| taskContributionCount | | -| timeSpentMapping | | -| username | | +| Parameter | Description | +|---------------------------|-------------| +| created | | +| projectContributionsCount | | +| groupContributionCount | | +| taskContributionCount | | +| timeSpentMapping | | +| username | | From 2d6b91104d180d149e0113246148c6585280f8bd Mon Sep 17 00:00:00 2001 From: Jochen Date: Tue, 29 Mar 2022 14:41:03 +0200 Subject: [PATCH 8/8] project type descriptions --- docs/source/index.rst | 8 ---- docs/source/project_type-buildArea.md | 52 +++++++++++++++++---- docs/source/project_type-changeDetection.md | 47 ++++++++++++------- docs/source/project_type-footprint.md | 33 +++++++------ docs/source/project_type.md | 1 - 5 files changed, 90 insertions(+), 51 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index 4bb0a4e9d..cd6f55681 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -45,11 +45,3 @@ Welcome to MapSwipe Back-End's documentation! installation debugging backup - - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` diff --git a/docs/source/project_type-buildArea.md b/docs/source/project_type-buildArea.md index bbc46ea49..fa1a2a17e 100644 --- a/docs/source/project_type-buildArea.md +++ b/docs/source/project_type-buildArea.md @@ -69,7 +69,7 @@ Below you can find an example for a created Build Area project in firebase. "resultCount": 0, "status": "active", "tileServer": { - "apiKey": "AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", + "apiKey": "", "credits": "imagery credits of project", "name": "bing", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a{quad_key}.jpeg?g=1&token={key}" @@ -79,25 +79,57 @@ Below you can find an example for a created Build Area project in firebase. "zoomLevel": 18 } ``` + +### Groups + +The grouping algorithm uses the extent of a project as an input and generates chunks of tasks lying next to each other. +Each group has a height of three tasks and a width of approximately 40 tasks. + +| Parameter | Description | +|--------------|------------------------------------------------------------------------------------------------------| +| **Geometry** | The Build Area groups save the bounding box coordinates in fields labeled xMax, xMin, yMax and yMin. | + +```json +{ + "finishedCount" : 0, + "groupId" : "g101", + "numberOfTasks" : 54, + "progress" : 0, + "projectId" : "-MrbXgHx8YJDt6cTIyGA", + "requiredCount" : 3, + "xMax" : "160239", + "xMin" : "160222", + "yMax" : "129763", + "yMin" : "129761" +} +``` + ### Tasks +Tasks are only saved for tutorials, since their spatial inforamtion can be derived from the spatial extent of the corresponding group. + | Parameter | Description | |-------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | *Project Type Specific Information* | | -| **Tile Z** | The z coordinate of the tile defines the zoom level. Greater values for z will correspond to higher spatial resolution of the corresponding image. For most regions Bing provides images up to zoom level 18. For aerial imagery or images captured by UAVs even higher z values are valid. | | **Tile X** | The x coordinate characterises the longitudinal position of the tile in the overall tile map system taken the zoom level into account. The x coordinates increase from west to east starting at a longitude of -180 degrees. | | **Tile Y** | The y coordinate characterises the latitudinal position of the tile in the overall tile map system taken the zoom level into account. The latitude is clipped to range from circa -85 to 85 degrees. The y coordinates increase from north to south starting at a latitude of around 85 degrees. | | **Geometry** | Each task has a polygon geometry, which can be generated by its x, y and z coordinates. At the equator the task geometry is a square with an edge length of around 150 metres covering circa 0.0225 square kilometres. Due to the web Mercator projector the task geometry will be clinched with increasing distance to the equator. At the same time the area per task will decrease. | | **Tile URL** | The tile URL points to the specific tile image described by the x, y, and z coordinates. Usually, the image has a resolution of 256 x 256 pixels. However, some providers also generate image tiles with higher resolution (e.g. 512 x 512 pixels). | -### Groups - -The grouping algorithm uses the extent of a project as an input and generates chunks of tasks lying next to each other. -Each group has a height of three tasks and a width of approximately 40 tasks. - -| Parameter | Description | -|--------------|------------------------------------------------------------------------------------------------------| -| **Geometry** | The Build Area groups save the bounding box coordinates in fields labeled xMax, xMin, yMax and yMin. | +Below is an example json for a tutorial project, as can be seen on the three extra attributes screen, referenceAnswer and taskID_real. +```json +{ + "groupId" : 101, + "projectId" : "tutorial_-MGwrwsP9cTYf6c_Nbg3", + "referenceAnswer" : 0, + "screen" : 1, + "taskId" : "18-100-131072", + "taskId_real" : "18-65040-120545", + "taskX" : 100, + "taskY" : 131072, + "url" : "https://ecn.t0.tiles.virtualearth.net/tiles/a023313133022210002.jpeg?g=7505&mkt=en-US" +} +``` ### Results diff --git a/docs/source/project_type-changeDetection.md b/docs/source/project_type-changeDetection.md index 8236da1d3..2fdb26a92 100644 --- a/docs/source/project_type-changeDetection.md +++ b/docs/source/project_type-changeDetection.md @@ -61,7 +61,7 @@ Project Structure example for a project which was created via HOT Tasking Manage "resultCount" : 0, "status" : "inactive", "tileServer" : { - "apiKey" : "f57b8754-0d70-4439-bdb4-641beea5c2ec", + "apiKey" : "", "credits" : "© 2019 Maxar", "name" : "maxar_premium", "url" : "https://services.digitalglobe.com/earthservice/tmsaccess/tms/1.0.0/DigitalGlobe%3AImageryTileService@EPSG%3A3857@jpg/{z}/{x}/{y}.jpg?connectId={key}" @@ -69,7 +69,7 @@ Project Structure example for a project which was created via HOT Tasking Manage "tileServerB" : { "credits" : "© Maxar, MapBox", "name" : "custom", - "url" : "https://api.mapbox.com/v4/mapboxsatellite.haiti-post-2021/{z}/{x}/{y}.webp?sku=101Fw3jtBuWI5&access_token=pk.eyJ1IjoibWFwYm94c2F0ZWxsaXRlIiwiYSI6ImNqZWZ0MHg0djFqZWoyeG9kN3ZiMmkyd3cifQ.y2HNjGo7FcKQ7psI_BfGqQ" + "url" : "https://api.mapbox.com/v4/mapboxsatellite.haiti-post-2021/{z}/{x}/{y}.webp?sku=101Fw3jtBuWI5" }, "tutorialId" : "tutorial_-MhJtd9ePFOw8Vs6xwZ2", "verificationNumber" : 3, @@ -77,15 +77,28 @@ Project Structure example for a project which was created via HOT Tasking Manage } ``` - ## Group structure | Parameter | Description | |--------------|------------------------------------------------------------------------------------------------------------| | **Geometry** | The Change Detection groups save the bounding box coordinates in fields labeled xMax, xMin, yMax and yMin. | -## Task structure +```json +{ + "finishedCount" : 0, + "groupId" : "g101", + "numberOfTasks" : 24, + "progress" : 0, + "projectId" : "-Mrbd5ArF4lb_GoYG2I5", + "requiredCount" : 3, + "xMax" : "154722", + "xMin" : "154715", + "yMax" : "235151", + "yMin" : "235149" +} +``` +## Task structure | Parameter | Description | |-------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| @@ -96,19 +109,19 @@ Project Structure example for a project which was created via HOT Tasking Manage | **URL** | Image for the tile at timestamp A. The tile URL points to the specific tile image described by the x, y, and z coordinates. | | **URL 2** | Image for the tile after timestamp A. The tile URL points to the specific tile image described by the x, y, and z coordinates. | - -## Result Structure ```json -{"OzDyJJ8su8TQtctYVIg9w5tplaX2": - {"data": - {"device":"6a39e920622c4fbb", - "id":"13555_105_298", - "item":"Buildings", - "projectId":13555, - "result":1, - "timestamp":1544613097198, - "user":"OzDyJJ8su8TQtctYVIg9w5tplaX2" - } - } +{ + "groupId" : "g101", + "projectId" : "-Mrbd5ArF4lb_GoYG2I5", + "taskId" : "19-154715-235149", + "taskX" : "154715", + "taskY" : "235149", + "url" : "https://services.digitalglobe.com/earthservice/tmsaccess/tms/1.0.0/DigitalGlobe%3AImageryTileService@EPSG%3A3857@jpg/19/154715/289138.jpg", + "urlB" : "https://api.mapbox.com/v4/mapboxsatellite.haiti-post-2021/19/154715/235149.webp?sku=101Fw3jtBuWI5" } ``` + +## Result Structure + +Results contain information on the user classifications. However, only “Yes” (1), “Maybe” (2) and “Bad Imagery” (3) classifications are stored as results. +Whenever users indicate “No Change” by just swiping to the next task, no data entry is created. diff --git a/docs/source/project_type-footprint.md b/docs/source/project_type-footprint.md index 8d74025ff..ae907abb9 100644 --- a/docs/source/project_type-footprint.md +++ b/docs/source/project_type-footprint.md @@ -56,7 +56,7 @@ Project Structure example for a project which was created via HOT Tasking Manage "filter" : "building=* and geometry:polygon", "groupMaxSize" : 0, "groupSize" : 30, - "image" : "https://firebasestorage.googleapis.com/v0/b/dev-mapswipe.appspot.com/o/projectImages%2Fimage.jpeg?alt=media&token=c57beac5-6c6f-4d8f-85e5-9543e5bbeeab", + "image" : "https://firebasestorage.googleapis.com/v0/b/dev-mapswipe.appspot.com/o/projectImages%2Fimage.jpeg?alt=media", "inputType" : "TMId", "isFeatured" : false, "lookFor" : "Buildings", @@ -88,9 +88,24 @@ Project Structure example for a project which was created via HOT Tasking Manage ## Group structure The footprint groups follow the standard group structure. +```json +{ + "finishedCount" : 0, + "groupId" : "g100", + "numberOfTasks" : 30, + "progress" : 0, + "projectId" : "-Mq_FxTdV2QJHsxQcvFk", + "requiredCount" : 3 +} +``` ## Task structure +| Parameter | Description | +|-------------------------------------|----------------------------------------------------------------------------------------| +| *Project Type Specific Information* | | +| **GeoJSON** | Each task has a polygon geometry, which usually outlines a building or another object. | + ```json { "feature_id" : 0, @@ -104,17 +119,5 @@ The footprint groups follow the standard group structure. ``` ## Result Structure -```json -{"OzDyJJ8su8TQtctYVIg9w5tplaX2": - {"data": - {"device":"6a39e920622c4fbb", - "id":"13555_105_298", - "item":"Buildings", - "projectId":13555, - "result":1, - "timestamp":1544613097198, - "user":"OzDyJJ8su8TQtctYVIg9w5tplaX2" - } - } -} -``` + +The Result for a footprint project are explicitly given via the "yes", "no" and "not sure" buttons. \ No newline at end of file diff --git a/docs/source/project_type.md b/docs/source/project_type.md index 2d94d1c5d..b650d07fa 100644 --- a/docs/source/project_type.md +++ b/docs/source/project_type.md @@ -98,7 +98,6 @@ They are the key to distribute tasks to MapSwipe users in a way that we can ensu | *Basic Information* | | | groupId | ID of the group. | | numberOfTasks | How many tasks are in each group. | -| progress | | | projectId | ID of the project the group belongs to. | | finishedCount | Once a group has been completely mapped by a volunteer the completed count of the corresponding group will be raised by one. The completed count of the group is used to assess the overall progress of each project.
For doing so the completed count is compared to the redundancy required (see Table 2). During the mapping process groups will be served in ascending completed count order. Thus, groups with low completed count will be served first | | requiredCount | How many volunteers have to map a group. |