From 7a6454cee4f05768e7015a02fe99b0597a1ae903 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Thu, 14 Nov 2024 16:47:23 +0000 Subject: [PATCH 01/56] Add processed_path and id to config --- poetry.lock | 15 ++++++++-- pyproject.toml | 72 +++++++++++++++++++++------------------------- src/acbm/config.py | 31 ++++++++++++++++++++ 3 files changed, 76 insertions(+), 42 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2f7d50b..60a73b0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "annotated-types" @@ -1023,6 +1023,17 @@ widgetsnbextension = ">=4.0.12,<4.1.0" [package.extras] test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] +[[package]] +name = "jcs" +version = "0.2.1" +description = "JCS - JSON Canonicalization" +optional = false +python-versions = ">=3.6.2" +files = [ + {file = "jcs-0.2.1-py3-none-any.whl", hash = "sha256:e23a3e1de60f832d33cd811bb9c3b3be79219cdf95f63b88f0972732c3fa8476"}, + {file = "jcs-0.2.1.tar.gz", hash = "sha256:9f20360b2f3b0a410d65493b448f96306d80e37fb46283f3f4aa5db2c7c1472b"}, +] + [[package]] name = "jedi" version = "0.19.1" @@ -3754,4 +3765,4 @@ test = ["pytest", "pytest-cov"] [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "033376bf1b5aeadf8ad90831c1681f92c37f475a591039c67385b8a7497de7b0" +content-hash = "62358db191b9d2f0cd4348dcdc6fa886fbf472b830af5db703fdefc8c3babfce" diff --git a/pyproject.toml b/pyproject.toml index ca1429b..119ebc3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,9 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "acbm" version = "0.1.0" -authors = [ - "Hussein Mahfouz ", -] +authors = ["Hussein Mahfouz "] homepage = "https://github.com/alan-turing-institute/acbm" repository = "https://github.com/alan-turing-institute/acbm" license = "Apache-2.0" @@ -28,7 +26,7 @@ python = "^3.10" pytest = { version = ">=6", optional = true } pytest-cov = { version = ">=3", optional = true } pandas = "^2.2.0" -uatk-spc = {git = "https://github.com/alan-turing-institute/uatk-spc.git", subdirectory = "python"} +uatk-spc = { git = "https://github.com/alan-turing-institute/uatk-spc.git", subdirectory = "python" } geopandas = "^0.14.3" matplotlib = "^3.8.3" scikit-learn = "^1.4.1.post1" @@ -43,9 +41,10 @@ tomlkit = "^0.13.0" cml-pam = "0.3.2" gdal = "<=3.8.4" pandera = "^0.20.4" -osmox = {git = "https://github.com/arup-group/osmox"} +osmox = { git = "https://github.com/arup-group/osmox" } pyrosm = "^0.6.2" jsonschema = "^4.23.0" +jcs = "^0.2.1" [tool.poetry.dev-dependencies] pytest = ">= 6" @@ -62,22 +61,13 @@ ipykernel = "^6.29.4" minversion = "6.0" addopts = ["-ra", "--showlocals", "--strict-markers", "--strict-config"] xfail_strict = true -filterwarnings = [ - "error", -] +filterwarnings = ["error"] log_cli_level = "INFO" -testpaths = [ - "tests", -] +testpaths = ["tests"] [tool.coverage] run.source = ["acbm"] -port.exclude_lines = [ - 'pragma: no cover', - '\.\.\.', - 'if typing.TYPE_CHECKING:', -] - +port.exclude_lines = ['pragma: no cover', '\.\.\.', 'if typing.TYPE_CHECKING:'] [tool.ruff] @@ -86,29 +76,31 @@ exclude = [] line-length = 88 # how long you want lines to be [tool.ruff.format] -docstring-code-format = true # code snippets in docstrings will be formatted +docstring-code-format = true # code snippets in docstrings will be formatted [tool.ruff.lint] select = [ - "E", "F", "W", # flake8 - "B", # flake8-bugbear - "I", # isort - "ARG", # flake8-unused-arguments - "C4", # flake8-comprehensions - "EM", # flake8-errmsg - "ICN", # flake8-import-conventions - "ISC", # flake8-implicit-str-concat - "G", # flake8-logging-format - "PGH", # pygrep-hooks - "PIE", # flake8-pie - "PL", # pylint - "PT", # flake8-pytest-style - "RET", # flake8-return - "RUF", # Ruff-specific - "SIM", # flake8-simplify - "UP", # pyupgrade - "YTT", # flake8-2020 - "EXE", # flake8-executable + "E", + "F", + "W", # flake8 + "B", # flake8-bugbear + "I", # isort + "ARG", # flake8-unused-arguments + "C4", # flake8-comprehensions + "EM", # flake8-errmsg + "ICN", # flake8-import-conventions + "ISC", # flake8-implicit-str-concat + "G", # flake8-logging-format + "PGH", # pygrep-hooks + "PIE", # flake8-pie + "PL", # pylint + "PT", # flake8-pytest-style + "RET", # flake8-return + "RUF", # Ruff-specific + "SIM", # flake8-simplify + "UP", # pyupgrade + "YTT", # flake8-2020 + "EXE", # flake8-executable ] ignore = [ @@ -118,7 +110,7 @@ ignore = [ "G004", # Logging statement uses f-string, not necessary here ] unfixable = [ - "F401", # Would remove unused imports - "F841", # Would remove unused variables + "F401", # Would remove unused imports + "F841", # Would remove unused variables ] -flake8-unused-arguments.ignore-variadic-names = true # allow unused *args/**kwargs +flake8-unused-arguments.ignore-variadic-names = true # allow unused *args/**kwargs diff --git a/src/acbm/config.py b/src/acbm/config.py index 6cef753..ce9920a 100644 --- a/src/acbm/config.py +++ b/src/acbm/config.py @@ -1,7 +1,9 @@ import random from dataclasses import dataclass +from hashlib import sha256 from pathlib import Path +import jcs import numpy as np import tomlkit from pydantic import BaseModel, Field @@ -44,6 +46,35 @@ class Config(BaseModel): ) matching: MatchingParams = Field(description="Config: parameters for matching.") + @property + def id(self): + """Since config determines outputs, the SHA256 hash of the config can be used + as an identifier for outputs. + + See [popgetter](https://github.com/Urban-Analytics-Technology-Platform/popgetter/blob/7da293f4eb2d36480dbd137a27be623aa09449bf/python/popgetter/metadata.py#L83). + """ + # Since the out paths are not too long, take first 10 chars + ID_LENGTH = 10 + + def serializable_vars(obj: object) -> dict: + variables = {} + # Check if variables are serializable + for key, val in vars(obj).items(): + try: + # Try to serialize + jcs.canonicalize(val) + # Store in dict if serializable + variables[key] = val + except Exception: + # If cannot serialize, continue + continue + + return sha256(jcs.canonicalize(serializable_vars(self))).hexdigest()[:ID_LENGTH] + + def processed_path(self) -> str: + """Returns full processed path.""" + return Path("data") / "processed" / self.id + @property def seed(self) -> int: return self.parameters.seed From 9b5704e25ca401e1e672cdee3e859140664fbb19 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Thu, 14 Nov 2024 17:23:41 +0000 Subject: [PATCH 02/56] Update paths in README --- README.md | 58 +++++++++++++++++++++++++++---------------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index ab00af7..fe471db 100644 --- a/README.md +++ b/README.md @@ -89,37 +89,37 @@ The pipeline is a series of scripts that are run in sequence to generate the act │   │   │   ├── trip_eul_2002-2022.tab │   │   │   └── .tab │   │   ├── travel_times -│   │   | ├── oa -│   │   | | ├── travel_time_matrix.parquet -| | | └── msoa -│   │   | └── travel_time_matrix.parquet +│   │   │ ├── oa +│   │   │ | ├── travel_time_matrix.parquet +| | │ └── msoa +│   │   │ └── travel_time_matrix.parquet │   │   ├── ODWP01EW_OA.zip │   │   ├── ODWP15EW_MSOA_v1.zip -│   │   ├── spc_output -│   │   │   ├── >_people_hh.parquet (Generated in Script 1) -│   │   │   ├── >_people_tu.parquet (Generated in Script 1) -│   │   │   ├── raw -│   │   │   │   ├── _households.parquet -│   │   │   │   ├── _info_per_msoa.json -│   │   │   │   ├── .pb -│   │   │   │   ├── _people.parquet -│   │   │   │   ├── _time_use_diaries.parquet -│   │   │   │   ├── _venues.parquet -│   │   │   │   ├── README.md -│   ├── interim -│   │   ├── assigning (Generated in Script 3) -│   │   └── matching (Generated in Script 2) -│   └── processed -│   ├── acbm__ -│   │   ├── activities.csv -│   │   ├── households.csv -│   │   ├── legs.csv -│   │   ├── legs_with_locations.parquet -│   │   ├── people.csv -│   │   └── plans.xml -│   ├── plots -│   │   ├── assigning -│   │   └── validation +│   │   └── spc_output +│   │      └── raw +│   │         ├── _households.parquet +│   │         ├── _info_per_msoa.json +│   │         ├── .pb +│   │          ├── _people.parquet +│   │          ├── _time_use_diaries.parquet +│   │         ├── _venues.parquet +│   │         └── README.md +│   └── outputs +│ └- +│    │   +│ ├── interim +│ │      ├── >_people_hh.parquet (Generated in Script 1) +│ │      ├── assigning (Generated in Script 3) +│ │      └── matching (Generated in Script 2) +│    ├── activities.csv +│    ├── households.csv +│    ├── legs.csv +│    ├── legs_with_locations.parquet +│    ├── people.csv +│    ├── plans.xml +│    ├── plots +│    │   ├── assigning +│    │   └── validation ``` ## Step 1: Prepare Data Inputs From 0d811cf72481d0a5ff646a8cc93491b49f13f03b Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Thu, 14 Nov 2024 18:02:22 +0000 Subject: [PATCH 03/56] Update paths in scripts --- scripts/1_prep_synthpop.py | 5 +++- scripts/2_match_households_and_individuals.py | 6 ++--- scripts/3.1_assign_primary_feasible_zones.py | 26 +++++++++---------- scripts/3.2.1_assign_primary_zone_edu.py | 22 +++++++++------- scripts/3.2.2_assign_primary_zone_work.py | 21 +++++++-------- scripts/3.2.3_assign_secondary_zone.py | 21 ++++++++------- scripts/3.3_assign_facility_all.py | 14 +++++----- src/acbm/config.py | 10 +++++-- 8 files changed, 68 insertions(+), 57 deletions(-) diff --git a/scripts/1_prep_synthpop.py b/scripts/1_prep_synthpop.py index 3df2dd8..14e97dd 100644 --- a/scripts/1_prep_synthpop.py +++ b/scripts/1_prep_synthpop.py @@ -1,3 +1,5 @@ +import os + from uatk_spc.builder import Builder import acbm @@ -23,8 +25,9 @@ def main(config_file): ) .build() ) + os.makedirs(acbm.root_path / config.interim_path, exist_ok=True) spc_people_hh.to_parquet( - acbm.root_path / f"data/external/spc_output/{region}_people_hh.parquet" + acbm.root_path / config.interim_path / f"{region}_people_hh.parquet" ) diff --git a/scripts/2_match_households_and_individuals.py b/scripts/2_match_households_and_individuals.py index 77e6316..cb4ea9e 100644 --- a/scripts/2_match_households_and_individuals.py +++ b/scripts/2_match_households_and_individuals.py @@ -31,7 +31,8 @@ def main(config_file): pd.set_option("display.max_columns", None) def get_interim_path( - file_name: str, path: str | Path = acbm.root_path / "data/interim/matching/" + file_name: str, + path: str | Path = acbm.root_path / config.interim_path / "matching", ) -> str: os.makedirs(path, exist_ok=True) return f"{path}/{file_name}" @@ -44,8 +45,7 @@ def get_interim_path( # Read in the spc data (parquet format) spc = pd.read_parquet( - acbm.root_path / "data/external/spc_output/" - f"{config.region}_people_hh.parquet" + acbm.root_path / config.interim_path / f"{config.region}_people_hh.parquet" ) logger.info("Filtering SPC data to specific columns") diff --git a/scripts/3.1_assign_primary_feasible_zones.py b/scripts/3.1_assign_primary_feasible_zones.py index 9858691..1af964b 100644 --- a/scripts/3.1_assign_primary_feasible_zones.py +++ b/scripts/3.1_assign_primary_feasible_zones.py @@ -1,3 +1,4 @@ +import os import pickle as pkl import geopandas as gpd @@ -23,6 +24,11 @@ def main(config_file): config = load_config(config_file) config.init_rng() + def get_interim_path(file_name: str) -> str: + path = acbm.root_path / config.interim_path / "assigning" + os.makedirs(path, exist_ok=True) + return f"{path}/{file_name}" + #### LOAD DATA #### # --- Activity chains @@ -103,7 +109,7 @@ def main(config_file): # save travel_times as parquet travel_times.to_parquet( - acbm.root_path / "data/interim/assigning/travel_time_estimates.parquet" + acbm.root_path / config.interim_path / "travel_time_estimates.parquet" ) # --- Intrazonal trip times @@ -122,7 +128,7 @@ def main(config_file): intrazone_times = intrazone_time(zones=boundaries, key_column=config.zone_id) # save intrazone_times to pickle - with open(acbm.root_path / "data/interim/assigning/intrazone_times.pkl", "wb") as f: + with open(get_interim_path("intrazone_times.pkl"), "wb") as f: pkl.dump(intrazone_times, f) logger.info("Intrazonal travel time estimates created") @@ -175,9 +181,7 @@ def main(config_file): predicate="within", ) # save as pickle - osm_data_gdf.to_pickle( - acbm.root_path / "data/interim/assigning/osm_poi_with_zones.pkl" - ) + osm_data_gdf.to_pickle(get_interim_path("osm_poi_with_zones.pkl")) activities_per_zone = get_activities_per_zone( zones=boundaries, @@ -186,9 +190,7 @@ def main(config_file): return_df=True, ) - activities_per_zone.to_parquet( - acbm.root_path / "data/interim/assigning/activities_per_zone.parquet" - ) + activities_per_zone.to_parquet(get_interim_path("activities_per_zone.parquet")) #### Get possible zones for each primary activity @@ -220,9 +222,7 @@ def main(config_file): logger.info("Saving feasible zones for education activities") # save possible_zones_school to dictionary - with open( - acbm.root_path / "data/interim/assigning/possible_zones_education.pkl", "wb" - ) as f: + with open(get_interim_path("possible_zones_education.pkl"), "wb") as f: pkl.dump(possible_zones_school, f) del possible_zones_school @@ -248,9 +248,7 @@ def main(config_file): logger.info("Saving feasible zones for work activities") # save possible_zones_work to dictionary - with open( - acbm.root_path / "data/interim/assigning/possible_zones_work.pkl", "wb" - ) as f: + with open(get_interim_path("possible_zones_work.pkl"), "wb") as f: pkl.dump(possible_zones_work, f) del possible_zones_work diff --git a/scripts/3.2.1_assign_primary_zone_edu.py b/scripts/3.2.1_assign_primary_zone_edu.py index f401b5f..4a49672 100644 --- a/scripts/3.2.1_assign_primary_zone_edu.py +++ b/scripts/3.2.1_assign_primary_zone_edu.py @@ -1,3 +1,5 @@ +import os + import geopandas as gpd import pandas as pd @@ -19,6 +21,12 @@ @acbm_cli def main(config_file): config = load_config(config_file) + + def get_interim_path(file_name: str) -> str: + path = acbm.root_path / config.interim_path / "assigning" + os.makedirs(path, exist_ok=True) + return f"{path}/{file_name}" + # TODO: consider if RNG seed needs to be distinct for different assignments config.init_rng() @@ -29,7 +37,7 @@ def main(config_file): # --- Possible zones for each activity (calculated in 3.1_assign_possible_zones.py) logger.info("Loading possible zones for each activity") possible_zones_school = pd.read_pickle( - acbm.root_path / "data/interim/assigning/possible_zones_education.pkl" + get_interim_path("possible_zones_education.pkl") ) # --- boundaries @@ -44,9 +52,7 @@ def main(config_file): # --- osm POI data logger.info("Loading OSM POI data") - osm_data_gdf = pd.read_pickle( - acbm.root_path / "data/interim/assigning/osm_poi_with_zones.pkl" - ) + osm_data_gdf = pd.read_pickle(get_interim_path("osm_poi_with_zones.pkl")) # Convert the DataFrame into a GeoDataFrame, and assign a coordinate reference system (CRS) logger.info("Converting OSM POI data to GeoDataFrame") @@ -95,14 +101,14 @@ def main(config_file): logger.info("Loading activities per zone") activities_per_zone = pd.read_parquet( - acbm.root_path / "data/interim/assigning/activities_per_zone.parquet" + get_interim_path("activities_per_zone.parquet") ) # --- travel time estimates logger.info("Loading travel time estimates") travel_time_estimates = pd.read_parquet( - acbm.root_path / "data/interim/assigning/travel_time_estimates.parquet" + get_interim_path("travel_time_estimates.parquet") ) #### ASSIGN TO ZONE FROM FEASIBLE ZONES #### @@ -164,9 +170,7 @@ def main(config_file): logger.info("Saving activity chains with assigned zones") - activity_chains_edu.to_pickle( - acbm.root_path / "data/interim/assigning/activity_chains_education.pkl" - ) + activity_chains_edu.to_pickle(get_interim_path("activity_chains_education.pkl")) if __name__ == "__main__": diff --git a/scripts/3.2.2_assign_primary_zone_work.py b/scripts/3.2.2_assign_primary_zone_work.py index 91b6f06..7b86e74 100644 --- a/scripts/3.2.2_assign_primary_zone_work.py +++ b/scripts/3.2.2_assign_primary_zone_work.py @@ -26,12 +26,15 @@ def main(config_file): config = load_config(config_file) config.init_rng() + def get_interim_path(file_name: str) -> str: + path = acbm.root_path / config.interim_path / "assigning" + os.makedirs(path, exist_ok=True) + return f"{path}/{file_name}" + #### LOAD DATA #### # --- Possible zones for each activity (calculated in 3.1_assign_possible_zones.py) - possible_zones_work = pd.read_pickle( - acbm.root_path / "data/interim/assigning/possible_zones_work.pkl" - ) + possible_zones_work = pd.read_pickle(get_interim_path("possible_zones_work.pkl")) # --- boundaries @@ -45,9 +48,7 @@ def main(config_file): # osm POI data - osm_data_gdf = pd.read_pickle( - acbm.root_path / "data/interim/assigning/osm_poi_with_zones.pkl" - ) + osm_data_gdf = pd.read_pickle(get_interim_path("osm_poi_with_zones.pkl")) # Convert the DataFrame into a GeoDataFrame, and assign a coordinate reference system (CRS) osm_data_gdf = gpd.GeoDataFrame(osm_data_gdf, geometry="geometry", crs="EPSG:4326") @@ -279,8 +280,8 @@ def main(config_file): ) # Define the output file path - os.makedirs(acbm.root_path / "data/processed/", exist_ok=True) - output_file_path = acbm.root_path / "data/processed/workzone_rmse_results.txt" + os.makedirs(acbm.root_path / config.output_path, exist_ok=True) + output_file_path = acbm.root_path / config.output_path / "workzone_rmse_results.txt" # Open the file in write mode with open(output_file_path, "w") as file: @@ -331,9 +332,7 @@ def main(config_file): # save the activity chains as a pickle - activity_chains_work.to_pickle( - acbm.root_path / "data/interim/assigning/activity_chains_work.pkl" - ) + activity_chains_work.to_pickle(get_interim_path("activity_chains_work.pkl")) if __name__ == "__main__": diff --git a/scripts/3.2.3_assign_secondary_zone.py b/scripts/3.2.3_assign_secondary_zone.py index b144555..a6c79aa 100644 --- a/scripts/3.2.3_assign_secondary_zone.py +++ b/scripts/3.2.3_assign_secondary_zone.py @@ -7,6 +7,8 @@ - For more info on the spacetime approach for secondary locaiton assignment, see https://www.tandfonline.com/doi/full/10.1080/23249935.2021.1982068 """ +import os + import geopandas as gpd import numpy as np import pandas as pd @@ -35,6 +37,11 @@ def main(config_file): config.init_rng() zone_id = config.zone_id + def get_interim_path(file_name: str) -> str: + path = acbm.root_path / config.interim_path / "assigning" + os.makedirs(path, exist_ok=True) + return f"{path}/{file_name}" + # --- Load in the data logger.info("Loading: activity chains") @@ -101,15 +108,11 @@ def merge_columns_from_other(df: pd.DataFrame, other: pd.DataFrame) -> pd.DataFr ) activity_chains_edu = merge_columns_from_other( - pd.read_pickle( - acbm.root_path / "data/interim/assigning/activity_chains_education.pkl" - ), + pd.read_pickle(get_interim_path("activity_chains_education.pkl")), activity_chains, ) activity_chains_work = merge_columns_from_other( - pd.read_pickle( - acbm.root_path / "data/interim/assigning/activity_chains_work.pkl" - ), + pd.read_pickle(get_interim_path("activity_chains_work.pkl")), activity_chains, ) @@ -315,7 +318,7 @@ def merge_columns_from_other(df: pd.DataFrame, other: pd.DataFrame) -> pd.DataFr ) else: travel_times = pd.read_parquet( - acbm.root_path / "data/interim/assigning/travel_time_estimates.parquet" + get_interim_path("travel_time_estimates.parquet") ) # Edit modes @@ -349,7 +352,7 @@ def merge_columns_from_other(df: pd.DataFrame, other: pd.DataFrame) -> pd.DataFr logger.info("Analysis (matrices): Step 3 - Calculating OD probabilities") activities_per_zone = pd.read_parquet( - acbm.root_path / "data/interim/assigning/activities_per_zone.parquet" + get_interim_path("activities_per_zone.parquet") ) # keep only rows that don't match primary activities @@ -449,7 +452,7 @@ def merge_columns_from_other(df: pd.DataFrame, other: pd.DataFrame) -> pd.DataFr # --- Save logger.info("Saving: Step 7 - Saving population") - write.to_csv(population, dir=(acbm.root_path / "data/processed/activities_pam")) + write.to_csv(population, dir=acbm.root_path / config.output_path) if __name__ == "__main__": diff --git a/scripts/3.3_assign_facility_all.py b/scripts/3.3_assign_facility_all.py index 30113cc..ac3b31e 100644 --- a/scripts/3.3_assign_facility_all.py +++ b/scripts/3.3_assign_facility_all.py @@ -18,9 +18,7 @@ def main(config_file): # --- Load data: activity chains logger.info("Loading activity chains") - activity_chains = pd.read_csv( - acbm.root_path / "data/processed/activities_pam/legs.csv" - ) + activity_chains = pd.read_csv(config.output_path / "legs.csv") activity_chains = activity_chains.drop(columns=["Unnamed: 0", "freq"]) # --- Preprocess: Split activity chains by activity purpose @@ -139,7 +137,7 @@ def main(config_file): logger.info("a. Adding eduction type as fallback") # load in activity chains spc_with_nts = pd.read_parquet( - acbm.root_path / "data/interim/matching/spc_with_nts_trips.parquet", + acbm.root_path / config.interim_path / "matching/spc_with_nts_trips.parquet", columns=["id", "education_type", "seq", "TripTotalTime", "TripDisIncSW"], ) # we get one row per id @@ -286,7 +284,7 @@ def main(config_file): lambda point: point if pd.isna(point) else point.wkt ) activity_chains_all.drop(columns=geom_cols).to_parquet( - acbm.root_path / "data/processed/activities_pam/legs_with_locations.parquet" + acbm.root_path / config.output_path / "legs_with_locations.parquet" ) # --- Plots @@ -318,7 +316,7 @@ def main(config_file): x_label="Reported Travel Distance (km)", y_label="Actual Distance - Euclidian (km)", title_prefix=f"Scatter plot of TripDisIncSW vs. Length for {activity_type}", - save_dir=acbm.root_path / "data/processed/plots/assigning/", + save_dir=acbm.root_path / config.output_path / "plots/assigning/", ) # Plot 2: Euclidian travel distance vs reported (NTS) travel TIME @@ -341,7 +339,7 @@ def main(config_file): x_label="Reported Travel TIme (min)", y_label="Actual Distance - Euclidian (km)", title_prefix="Scatter plot of TripTotalTime vs. Length", - save_dir=acbm.root_path / "data/processed/plots/assigning/", + save_dir=acbm.root_path / config.output_path / "plots/assigning/", ) # .... @@ -357,7 +355,7 @@ def main(config_file): bin_size=5000, boundaries=boundaries, sample_size=1000, - save_dir=acbm.root_path / "data/processed/plots/assigning/", + save_dir=acbm.root_path / config.output_path / "plots/assigning/", ) diff --git a/src/acbm/config.py b/src/acbm/config.py index ce9920a..5dc99e4 100644 --- a/src/acbm/config.py +++ b/src/acbm/config.py @@ -71,9 +71,15 @@ def serializable_vars(obj: object) -> dict: return sha256(jcs.canonicalize(serializable_vars(self))).hexdigest()[:ID_LENGTH] - def processed_path(self) -> str: + @property + def output_path(self) -> str: + """Returns full processed path.""" + return Path("data") / "outputs" / self.id + + @property + def interim_path(self) -> str: """Returns full processed path.""" - return Path("data") / "processed" / self.id + return Path("data") / "outputs" / self.id / "interim" @property def seed(self) -> int: From c2636fa9fb9baf0093593fac5e31adb892a1c972 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Thu, 14 Nov 2024 18:05:44 +0000 Subject: [PATCH 04/56] Write config to outputs --- scripts/0_preprocess_inputs.py | 7 +++++++ src/acbm/config.py | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/scripts/0_preprocess_inputs.py b/scripts/0_preprocess_inputs.py index ed8aa19..6e84735 100644 --- a/scripts/0_preprocess_inputs.py +++ b/scripts/0_preprocess_inputs.py @@ -1,3 +1,5 @@ +import os + import geopandas as gpd import pandas as pd from uatk_spc import Reader @@ -12,6 +14,11 @@ @acbm_cli def main(config_file): config = load_config(config_file) + + # Write config to file + os.makedirs(config.output_path, exist_ok=True) + config.write(config.output_path / "config.toml") + config.init_rng() region = config.region # Pick a region with SPC output saved diff --git a/src/acbm/config.py b/src/acbm/config.py index 5dc99e4..12c624b 100644 --- a/src/acbm/config.py +++ b/src/acbm/config.py @@ -114,6 +114,10 @@ def init_rng(self): msg = f"config does not provide a rng seed with err: {err}" raise ValueError(msg) from err + def write(self, filepath: str | Path): + with open(filepath, "w") as f: + f.write(tomlkit.dumps(self.model_dump(exclude_none=True))) + def load_config(filepath: str | Path) -> Config: with open(filepath, "rb") as f: From 8a3b6e9ec8300da0afc4342c603eca8f760d7b20 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Thu, 14 Nov 2024 21:05:05 +0000 Subject: [PATCH 05/56] Fix and refactor loading travel times --- scripts/3.1_assign_primary_feasible_zones.py | 7 +++---- scripts/3.2.1_assign_primary_zone_edu.py | 6 ++---- scripts/3.2.3_assign_secondary_zone.py | 11 ++--------- src/acbm/utils.py | 14 ++++++++++++++ 4 files changed, 21 insertions(+), 17 deletions(-) diff --git a/scripts/3.1_assign_primary_feasible_zones.py b/scripts/3.1_assign_primary_feasible_zones.py index 1af964b..342fffa 100644 --- a/scripts/3.1_assign_primary_feasible_zones.py +++ b/scripts/3.1_assign_primary_feasible_zones.py @@ -82,12 +82,11 @@ def get_interim_path(file_name: str) -> str: # (`tst`/`TripStart` and `tet`/`TripEnd`) # TODO: move to config - travel_time_matrix_path = ( - acbm.root_path / "data/external/travel_times/oa/travel_time_matrix.parquet" - ) - if config.parameters.travel_times: logger.info("Loading travel time matrix") + travel_time_matrix_path = ( + acbm.root_path / "data/external/travel_times/oa/travel_time_matrix.parquet" + ) try: travel_times = pd.read_parquet(travel_time_matrix_path) print("Travel time matrix loaded successfully.") diff --git a/scripts/3.2.1_assign_primary_zone_edu.py b/scripts/3.2.1_assign_primary_zone_edu.py index 4a49672..49dab6d 100644 --- a/scripts/3.2.1_assign_primary_zone_edu.py +++ b/scripts/3.2.1_assign_primary_zone_edu.py @@ -16,6 +16,7 @@ from acbm.config import load_config from acbm.logger_config import assigning_primary_zones_logger as logger from acbm.preprocessing import add_location +from acbm.utils import get_travel_times @acbm_cli @@ -106,10 +107,7 @@ def get_interim_path(file_name: str) -> str: # --- travel time estimates logger.info("Loading travel time estimates") - - travel_time_estimates = pd.read_parquet( - get_interim_path("travel_time_estimates.parquet") - ) + travel_time_estimates = get_travel_times(config) #### ASSIGN TO ZONE FROM FEASIBLE ZONES #### diff --git a/scripts/3.2.3_assign_secondary_zone.py b/scripts/3.2.3_assign_secondary_zone.py index a6c79aa..3ea392d 100644 --- a/scripts/3.2.3_assign_secondary_zone.py +++ b/scripts/3.2.3_assign_secondary_zone.py @@ -29,6 +29,7 @@ from acbm.config import load_config from acbm.logger_config import assigning_secondary_zones_logger as logger from acbm.preprocessing import add_location +from acbm.utils import get_travel_times @acbm_cli @@ -311,15 +312,7 @@ def merge_columns_from_other(df: pd.DataFrame, other: pd.DataFrame) -> pd.DataFr logger.info("Analysis (matrices): Step 1 - Loading travel time data") # load in the travel times (path differs for estimated ones) - # TODO: improve / save in same directory / add paths to config - if config.parameters.travel_times: - travel_times = pd.read_parquet( - acbm.root_path / "data/external/travel_times/oa/travel_time_matrix.parquet" - ) - else: - travel_times = pd.read_parquet( - get_interim_path("travel_time_estimates.parquet") - ) + travel_times = get_travel_times(config) # Edit modes logger.info("Analysis (matrices): Step 2 - Editing modes") diff --git a/src/acbm/utils.py b/src/acbm/utils.py index c135002..30ff863 100644 --- a/src/acbm/utils.py +++ b/src/acbm/utils.py @@ -1,8 +1,12 @@ from datetime import datetime import numpy as np +import pandas as pd from sklearn.metrics import mean_squared_error +import acbm +from acbm.config import Config + def prepend_datetime(s: str, delimiter: str = "_") -> str: current_date = datetime.now().strftime("%Y-%m-%d") @@ -37,3 +41,13 @@ def calculate_rmse(predictions, targets): # Calculate and return RMSE return np.sqrt(mse) + + +def get_travel_times(config: Config) -> pd.DataFrame: + if config.parameters.travel_times: + return pd.read_parquet( + acbm.root_path / "data/external/travel_times/oa/travel_time_matrix.parquet" + ) + return pd.read_parquet( + acbm.root_path / config.interim_path / "travel_time_estimates.parquet" + ) From 8c0f4547313557c05def6e0779b3549377035e35 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Fri, 15 Nov 2024 17:30:54 +0000 Subject: [PATCH 06/56] Fix config ID --- src/acbm/config.py | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/src/acbm/config.py b/src/acbm/config.py index 12c624b..f2be6c6 100644 --- a/src/acbm/config.py +++ b/src/acbm/config.py @@ -2,6 +2,7 @@ from dataclasses import dataclass from hashlib import sha256 from pathlib import Path +from typing import Tuple import jcs import numpy as np @@ -24,8 +25,8 @@ class Parameters(BaseModel): @dataclass(frozen=True) class MatchingParams(BaseModel): - required_columns: list[str] - optional_columns: list[str] + required_columns: Tuple[str, ...] + optional_columns: Tuple[str, ...] n_matches: int | None = None chunk_size: int = 50_000 @@ -55,21 +56,7 @@ def id(self): """ # Since the out paths are not too long, take first 10 chars ID_LENGTH = 10 - - def serializable_vars(obj: object) -> dict: - variables = {} - # Check if variables are serializable - for key, val in vars(obj).items(): - try: - # Try to serialize - jcs.canonicalize(val) - # Store in dict if serializable - variables[key] = val - except Exception: - # If cannot serialize, continue - continue - - return sha256(jcs.canonicalize(serializable_vars(self))).hexdigest()[:ID_LENGTH] + return sha256(jcs.canonicalize(self.model_dump())).hexdigest()[:ID_LENGTH] @property def output_path(self) -> str: From 6fea129ce12162dacb8d2d873e362f07a204ec8e Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Mon, 18 Nov 2024 11:06:42 +0000 Subject: [PATCH 07/56] Fix activity chains to use config and update config paths * Update reading activity chains dataframe to use config path * Add boundaries and osmox filepaths to config --- scripts/0.1_run_osmox.py | 6 +++--- scripts/0_preprocess_inputs.py | 4 ++-- scripts/3.1_assign_primary_feasible_zones.py | 8 +++----- scripts/3.2.1_assign_primary_zone_edu.py | 8 ++++---- scripts/3.2.2_assign_primary_zone_work.py | 6 ++---- scripts/3.2.3_assign_secondary_zone.py | 6 ++---- scripts/3.3_assign_facility_all.py | 6 ++---- src/acbm/assigning/utils.py | 10 ++++++++-- src/acbm/config.py | 16 ++++++++++++++++ 9 files changed, 42 insertions(+), 28 deletions(-) diff --git a/scripts/0.1_run_osmox.py b/scripts/0.1_run_osmox.py index 16ba912..4288acf 100644 --- a/scripts/0.1_run_osmox.py +++ b/scripts/0.1_run_osmox.py @@ -12,15 +12,15 @@ def main(config_file): config = load_config(config_file) config.init_rng() - os.makedirs(acbm.root_path / "data/interim/osmox", exist_ok=True) - fp = get_data(config.region, directory=acbm.root_path / "data/interim/osmox") + os.makedirs(acbm.root_path / config.osmox_path, exist_ok=True) + fp = get_data(config.region, directory=acbm.root_path / config.osmox_path) subprocess.run( [ "osmox", "run", acbm.root_path / "osmox/config_osmox.json", fp, - f"data/interim/osmox/{config.region}", + config.osmox_path / config.region, "-f", "geoparquet", "-crs", diff --git a/scripts/0_preprocess_inputs.py b/scripts/0_preprocess_inputs.py index 6e84735..492f169 100644 --- a/scripts/0_preprocess_inputs.py +++ b/scripts/0_preprocess_inputs.py @@ -74,9 +74,9 @@ def main(config_file): logger.info( f"4. Saving the boundaries to {acbm.root_path / 'data/external/boundaries/'} path" ) - + os.makedirs((acbm.root_path / config.boundaries_filepath).parents[0], exist_ok=True) boundaries_filtered.to_file( - acbm.root_path / "data/external/boundaries/study_area_zones.geojson", + acbm.root_path / config.boundaries_filepath, driver="GeoJSON", ) diff --git a/scripts/3.1_assign_primary_feasible_zones.py b/scripts/3.1_assign_primary_feasible_zones.py index 342fffa..3d78fdb 100644 --- a/scripts/3.1_assign_primary_feasible_zones.py +++ b/scripts/3.1_assign_primary_feasible_zones.py @@ -33,7 +33,7 @@ def get_interim_path(file_name: str) -> str: # --- Activity chains logger.info("Loading activity chains") - activity_chains = activity_chains_for_assignment() + activity_chains = activity_chains_for_assignment(config) logger.info("Activity chains loaded") # Filter to a specific day of the week @@ -46,9 +46,7 @@ def get_interim_path(file_name: str) -> str: logger.info("Loading study area boundaries") - boundaries = gpd.read_file( - acbm.root_path / "data/external/boundaries/study_area_zones.geojson" - ) + boundaries = gpd.read_file(acbm.root_path / config.boundaries_filepath) logger.info("Study area boundaries loaded") @@ -152,7 +150,7 @@ def get_interim_path(file_name: str) -> str: # osm data osm_data = gpd.read_parquet( - acbm.root_path / f"data/interim/osmox/{config.region}_epsg_4326.parquet" + acbm.root_path / config.osmox_path / (config.region + "_epsg_4326.parquet") ) logger.info("Activity locations loaded") diff --git a/scripts/3.2.1_assign_primary_zone_edu.py b/scripts/3.2.1_assign_primary_zone_edu.py index 49dab6d..06dbbe3 100644 --- a/scripts/3.2.1_assign_primary_zone_edu.py +++ b/scripts/3.2.1_assign_primary_zone_edu.py @@ -44,9 +44,7 @@ def get_interim_path(file_name: str) -> str: # --- boundaries logger.info("Loading study area boundaries") - boundaries = gpd.read_file( - acbm.root_path / "data/external/boundaries/study_area_zones.geojson" - ) + boundaries = gpd.read_file(acbm.root_path / config.boundaries_filepath) logger.info("Study area boundaries loaded") @@ -62,7 +60,9 @@ def get_interim_path(file_name: str) -> str: # --- Activity chains logger.info("Loading activity chains") - activity_chains = activity_chains_for_assignment(columns=cols_for_assignment_edu()) + activity_chains = activity_chains_for_assignment( + config, columns=cols_for_assignment_edu() + ) activity_chains = activity_chains[ activity_chains["TravDay"] == config.parameters.nts_day_of_week ] diff --git a/scripts/3.2.2_assign_primary_zone_work.py b/scripts/3.2.2_assign_primary_zone_work.py index 7b86e74..74af395 100644 --- a/scripts/3.2.2_assign_primary_zone_work.py +++ b/scripts/3.2.2_assign_primary_zone_work.py @@ -40,9 +40,7 @@ def get_interim_path(file_name: str) -> str: logger.info("Loading study area boundaries") - boundaries = gpd.read_file( - acbm.root_path / "data/external/boundaries/study_area_zones.geojson" - ) + boundaries = gpd.read_file(acbm.root_path / config.boundaries_filepath) logger.info("Study area boundaries loaded") @@ -53,7 +51,7 @@ def get_interim_path(file_name: str) -> str: osm_data_gdf = gpd.GeoDataFrame(osm_data_gdf, geometry="geometry", crs="EPSG:4326") # --- Activity chains - activity_chains = activity_chains_for_assignment(cols_for_assignment_work()) + activity_chains = activity_chains_for_assignment(config, cols_for_assignment_work()) activity_chains = add_locations_to_activity_chains(activity_chains) activity_chains = activity_chains[ activity_chains["TravDay"] == config.parameters.nts_day_of_week diff --git a/scripts/3.2.3_assign_secondary_zone.py b/scripts/3.2.3_assign_secondary_zone.py index 3ea392d..bc8d241 100644 --- a/scripts/3.2.3_assign_secondary_zone.py +++ b/scripts/3.2.3_assign_secondary_zone.py @@ -46,7 +46,7 @@ def get_interim_path(file_name: str) -> str: # --- Load in the data logger.info("Loading: activity chains") - activity_chains = activity_chains_for_assignment() + activity_chains = activity_chains_for_assignment(config) activity_chains = activity_chains[ activity_chains["TravDay"] == config.parameters.nts_day_of_week ] @@ -55,9 +55,7 @@ def get_interim_path(file_name: str) -> str: logger.info("Preprocessing: Adding OA21CD to the data") - boundaries = gpd.read_file( - acbm.root_path / "data/external/boundaries/study_area_zones.geojson" - ) + boundaries = gpd.read_file(acbm.root_path / config.boundaries_filepath) logger.info("Study area boundaries loaded") diff --git a/scripts/3.3_assign_facility_all.py b/scripts/3.3_assign_facility_all.py index ac3b31e..1db59eb 100644 --- a/scripts/3.3_assign_facility_all.py +++ b/scripts/3.3_assign_facility_all.py @@ -43,15 +43,13 @@ def main(config_file): logger.info("Loading facility data") osm_data_gdf = gpd.read_parquet( - acbm.root_path / f"data/interim/boundaries/{config.region}_epsg_4326.parquet" + acbm.root_path / config.osmox_path / (config.region + "_epsg_4326.parquet") ) # --- Load data: Boundaries logger.info("Loading study area boundaries") - boundaries = gpd.read_file( - acbm.root_path / "data/external/osmox/study_area_zones.geojson" - ) + boundaries = gpd.read_file(acbm.root_path / config.boundaries_filepath) logger.info("Study area boundaries loaded") diff --git a/src/acbm/assigning/utils.py b/src/acbm/assigning/utils.py index 0413171..f16ae1e 100644 --- a/src/acbm/assigning/utils.py +++ b/src/acbm/assigning/utils.py @@ -5,6 +5,7 @@ import pandas as pd import acbm +from acbm.config import Config def cols_for_assignment_all() -> list[str]: @@ -41,13 +42,18 @@ def cols_for_assignment_work() -> list[str]: return cols_for_assignment_edu() -def activity_chains_for_assignment(columns: list[str] | None = None) -> pd.DataFrame: +def activity_chains_for_assignment( + config: Config, columns: list[str] | None = None +) -> pd.DataFrame: """Gets activity chains with subset of columns required for assignment.""" if columns is None: columns = cols_for_assignment_all() return pd.read_parquet( - acbm.root_path / "data/interim/matching/spc_with_nts_trips.parquet", + acbm.root_path + / config.interim_path + / "matching" + / "spc_with_nts_trips.parquet", columns=columns, ) diff --git a/src/acbm/config.py b/src/acbm/config.py index f2be6c6..c287759 100644 --- a/src/acbm/config.py +++ b/src/acbm/config.py @@ -58,6 +58,22 @@ def id(self): ID_LENGTH = 10 return sha256(jcs.canonicalize(self.model_dump())).hexdigest()[:ID_LENGTH] + @property + def boundaries_filepath(self) -> str: + """Returns full processed path.""" + return ( + Path("data") + / "outputs" + / self.id + / "boundaries" + / "study_area_zones.geojson" + ) + + @property + def osmox_path(self) -> str: + """Returns full processed path.""" + return Path("data") / "outputs" / self.id / "osmox" + @property def output_path(self) -> str: """Returns full processed path.""" From ef6dfe3ebeab4bb03b918e3a4674bbce7bdd232e Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Wed, 20 Nov 2024 11:50:00 +0000 Subject: [PATCH 08/56] Fix comment --- src/acbm/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/acbm/config.py b/src/acbm/config.py index c287759..ed38056 100644 --- a/src/acbm/config.py +++ b/src/acbm/config.py @@ -54,7 +54,7 @@ def id(self): See [popgetter](https://github.com/Urban-Analytics-Technology-Platform/popgetter/blob/7da293f4eb2d36480dbd137a27be623aa09449bf/python/popgetter/metadata.py#L83). """ - # Since the out paths are not too long, take first 10 chars + # Take first 10 chars to enable paths to remain not too long ID_LENGTH = 10 return sha256(jcs.canonicalize(self.model_dump())).hexdigest()[:ID_LENGTH] From b8413ca1175469d2a551ea6a8eb36f6eff3e832f Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Wed, 20 Nov 2024 12:06:43 +0000 Subject: [PATCH 09/56] Remove flake8-pytest-style, add config test --- pyproject.toml | 1 - tests/test_config.py | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 tests/test_config.py diff --git a/pyproject.toml b/pyproject.toml index 119ebc3..e6b7775 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -94,7 +94,6 @@ select = [ "PGH", # pygrep-hooks "PIE", # flake8-pie "PL", # pylint - "PT", # flake8-pytest-style "RET", # flake8-return "RUF", # Ruff-specific "SIM", # flake8-simplify diff --git a/tests/test_config.py b/tests/test_config.py new file mode 100644 index 0000000..1ffc880 --- /dev/null +++ b/tests/test_config.py @@ -0,0 +1,14 @@ +import pytest + +from acbm.config import ( + load_config, +) + + +@pytest.fixture +def config(): + return load_config("config/base.toml") + + +def test_id(config): + assert config.id == "324e59cde5" From f8c4c6f009ffaab40c4e0d79b7d62e8b883183ce Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Wed, 20 Nov 2024 16:07:15 +0000 Subject: [PATCH 10/56] Move code estimating travel time out of else --- scripts/3.1_assign_primary_feasible_zones.py | 28 +++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/scripts/3.1_assign_primary_feasible_zones.py b/scripts/3.1_assign_primary_feasible_zones.py index 3d78fdb..04c2e81 100644 --- a/scripts/3.1_assign_primary_feasible_zones.py +++ b/scripts/3.1_assign_primary_feasible_zones.py @@ -79,9 +79,21 @@ def get_interim_path(file_name: str) -> str: # are compared to the travel times of the individual's actual trips from the nts # (`tst`/`TripStart` and `tet`/`TripEnd`) - # TODO: move to config + logger.info("Creating estimated travel times matrix") + # Create a new travel time matrix based on distances between zones + travel_time_estimates = zones_to_time_matrix( + zones=boundaries, id_col=config.zone_id, time_units="m" + ) + logger.info("Travel time estimates created") + + # save travel_time_etstimates as parquet + travel_time_estimates.to_parquet( + acbm.root_path / config.interim_path / "travel_time_estimates.parquet" + ) + if config.parameters.travel_times: logger.info("Loading travel time matrix") + # TODO: move to config travel_time_matrix_path = ( acbm.root_path / "data/external/travel_times/oa/travel_time_matrix.parquet" ) @@ -96,18 +108,8 @@ def get_interim_path(file_name: str) -> str: ) raise e else: - # If travel_times is not true or loading failed, create a new travel time matrix - logger.info("No travel time matrix found. Creating a new travel time matrix.") - # Create a new travel time matrix based on distances between zones - travel_times = zones_to_time_matrix( - zones=boundaries, id_col=config.zone_id, time_units="m" - ) - logger.info("Travel time estimates created") - # save travel_times as parquet - - travel_times.to_parquet( - acbm.root_path / config.interim_path / "travel_time_estimates.parquet" - ) + # If travel_times is not true, set travel_times as travel_times_estimates + travel_times = travel_time_estimates # --- Intrazonal trip times # From 2bc00bf4a084fbb386eaa0d0ee42ab602f538411 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Wed, 20 Nov 2024 16:49:38 +0000 Subject: [PATCH 11/56] Refactor config paths --- src/acbm/config.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/acbm/config.py b/src/acbm/config.py index ed38056..b552b4c 100644 --- a/src/acbm/config.py +++ b/src/acbm/config.py @@ -61,18 +61,17 @@ def id(self): @property def boundaries_filepath(self) -> str: """Returns full processed path.""" - return ( - Path("data") - / "outputs" - / self.id - / "boundaries" - / "study_area_zones.geojson" - ) + return self.output_path / "boundaries" / "study_area_zones.geojson" @property def osmox_path(self) -> str: """Returns full processed path.""" - return Path("data") / "outputs" / self.id / "osmox" + return self.output_path / "osmox" + + @property + def validation_plots_path(self) -> str: + """Returns full processed path.""" + return self.output_path / "plots" / "validation" @property def output_path(self) -> str: @@ -82,7 +81,7 @@ def output_path(self) -> str: @property def interim_path(self) -> str: """Returns full processed path.""" - return Path("data") / "outputs" / self.id / "interim" + return self.output_path / "interim" @property def seed(self) -> int: From 24970ec902a9268698d6f3be583ef667ba2910de Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Wed, 20 Nov 2024 16:50:06 +0000 Subject: [PATCH 12/56] Update validation paths --- scripts/4_validation.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/scripts/4_validation.py b/scripts/4_validation.py index 059b248..6950a99 100644 --- a/scripts/4_validation.py +++ b/scripts/4_validation.py @@ -24,8 +24,7 @@ def main(config_file): # ----- Folder for validation plots logger.info("1. Creating folder for validation plots") - - validation_plots_path = acbm.root_path / "data/processed/plots/validation" + validation_plots_path = config.validation_plots_path os.makedirs(validation_plots_path, exist_ok=True) # ----- Reading in the data @@ -40,9 +39,9 @@ def main(config_file): legs_nts = legs_nts[legs_nts["TravDay"] == config.parameters.nts_day_of_week] # Model outputs - legs_acbm = pd.read_csv(acbm.root_path / "data/processed/activities_pam/legs.csv") + legs_acbm = pd.read_csv(acbm.root_path / config.output_path / "legs.csv") legs_acbm_geo = pd.read_parquet( - acbm.root_path / "data/processed/activities_pam/legs_with_locations.parquet" + acbm.root_path / config.output_path / "legs_with_locations.parquet" ) # ----- Preproccessing the data From 83a3f89d80ecfe6e16c9b9a535c5baf47b36c4af Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Wed, 20 Nov 2024 17:19:47 +0000 Subject: [PATCH 13/56] Update base config and add use_estimates bool --- config/base.toml | 17 +++++++++-------- scripts/3.2.1_assign_primary_zone_edu.py | 1 + src/acbm/utils.py | 4 ++-- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/config/base.toml b/config/base.toml index 6999ade..09d9697 100644 --- a/config/base.toml +++ b/config/base.toml @@ -1,9 +1,9 @@ [parameters] seed = 0 -region = "leeds" # this is used to query poi data from osm and to load in SPC data -number_of_households = 5000 # how many people from the SPC do we want to run the model for? Comment out if you want to run the analysis on the entire SPC populaiton -zone_id = "OA21CD" # "OA21CD": OA level, "MSOA11CD": MSOA level -travel_times = true # Only set to true if you have travel time matrix at the level specified in boundary_geography +region = "leeds" # this is used to query poi data from osm and to load in SPC data +number_of_households = 5000 # how many people from the SPC do we want to run the model for? Comment out if you want to run the analysis on the entire SPC populaiton +zone_id = "OA21CD" # "OA21CD": OA level, "MSOA11CD": MSOA level +travel_times = true # Only set to true if you have travel time matrix at the level specified in boundary_geography boundary_geography = "OA" # NTS years to use nts_years = [2019, 2021, 2022] @@ -16,7 +16,8 @@ nts_regions = [ 'West Midlands', 'East of England', 'South East', - 'South West'] + 'South West', +] # nts day of the week to use # 1: Monday, 2: Tuesday, 3: Wednesday, 4: Thursday, 5: Friday, 6: Saturday, 7: Sunday nts_day_of_week = 3 @@ -35,12 +36,12 @@ optional_columns = [ n_matches = 10 # What is the maximum number of NTS matches we want for each SPC household? [work_assignment] -commute_level = "MSOA" -use_percentages = true # if true, optimization problem will try to minimize percentage difference at OD level (not absolute numbers). Recommended to set it to true +commute_level = "OA" +use_percentages = true # if true, optimization problem will try to minimize percentage difference at OD level (not absolute numbers). Recommended to set it to true # weights to add for each objective in the optimization problem weight_max_dev = 0.2 weight_total_dev = 0.8 -max_zones = 8 # maximum number of feasible zones to include in the optimization problem (less zones makes problem smaller - so faster, but at the cost of a better solution) +max_zones = 8 # maximum number of feasible zones to include in the optimization problem (less zones makes problem smaller - so faster, but at the cost of a better solution) [postprocessing] pam_jitter = 30 diff --git a/scripts/3.2.1_assign_primary_zone_edu.py b/scripts/3.2.1_assign_primary_zone_edu.py index 06dbbe3..a53155d 100644 --- a/scripts/3.2.1_assign_primary_zone_edu.py +++ b/scripts/3.2.1_assign_primary_zone_edu.py @@ -107,6 +107,7 @@ def get_interim_path(file_name: str) -> str: # --- travel time estimates logger.info("Loading travel time estimates") + # TODO: check whether should use_estimates=True travel_time_estimates = get_travel_times(config) #### ASSIGN TO ZONE FROM FEASIBLE ZONES #### diff --git a/src/acbm/utils.py b/src/acbm/utils.py index 30ff863..def55c7 100644 --- a/src/acbm/utils.py +++ b/src/acbm/utils.py @@ -43,8 +43,8 @@ def calculate_rmse(predictions, targets): return np.sqrt(mse) -def get_travel_times(config: Config) -> pd.DataFrame: - if config.parameters.travel_times: +def get_travel_times(config: Config, use_estimates: bool = False) -> pd.DataFrame: + if config.parameters.travel_times and not use_estimates: return pd.read_parquet( acbm.root_path / "data/external/travel_times/oa/travel_time_matrix.parquet" ) From 1f4fcb8f4706008d6fcd68eaf732cc739f68faf4 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Wed, 20 Nov 2024 18:21:06 +0000 Subject: [PATCH 14/56] Fix test --- tests/test_config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_config.py b/tests/test_config.py index 1ffc880..d0afe71 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -11,4 +11,4 @@ def config(): def test_id(config): - assert config.id == "324e59cde5" + assert config.id == "01d8ded073" From fe5ee8812a70a1b9ba340f4aaf2bdfc9e3bcae93 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Tue, 26 Nov 2024 15:44:23 +0000 Subject: [PATCH 15/56] Fix doc comments --- src/acbm/config.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/acbm/config.py b/src/acbm/config.py index b552b4c..4d7c2a3 100644 --- a/src/acbm/config.py +++ b/src/acbm/config.py @@ -60,22 +60,22 @@ def id(self): @property def boundaries_filepath(self) -> str: - """Returns full processed path.""" + """Returns boundaries path.""" return self.output_path / "boundaries" / "study_area_zones.geojson" @property def osmox_path(self) -> str: - """Returns full processed path.""" + """Returns osmox path.""" return self.output_path / "osmox" @property def validation_plots_path(self) -> str: - """Returns full processed path.""" + """Returns validation plots path.""" return self.output_path / "plots" / "validation" @property def output_path(self) -> str: - """Returns full processed path.""" + """Returns output path.""" return Path("data") / "outputs" / self.id @property From 095d20e56e6a4349c5f8561592fa662a07e7337a Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Wed, 27 Nov 2024 14:28:49 +0000 Subject: [PATCH 16/56] Refactor paths into config properties --- config/base.toml | 2 + scripts/0.1_run_osmox.py | 8 +- scripts/0_preprocess_inputs.py | 27 +-- scripts/1_prep_synthpop.py | 17 +- scripts/2_match_households_and_individuals.py | 52 ++--- scripts/3.1_assign_primary_feasible_zones.py | 38 ++-- scripts/3.2.1_assign_primary_zone_edu.py | 26 +-- scripts/3.2.2_assign_primary_zone_work.py | 37 +-- scripts/3.2.3_assign_secondary_zone.py | 25 +-- scripts/3.3_assign_facility_all.py | 17 +- scripts/4_validation.py | 14 +- src/acbm/assigning/utils.py | 6 +- src/acbm/config.py | 211 +++++++++++++++++- src/acbm/preprocessing.py | 10 +- src/acbm/utils.py | 9 +- 15 files changed, 287 insertions(+), 212 deletions(-) diff --git a/config/base.toml b/config/base.toml index 09d9697..1a737cd 100644 --- a/config/base.toml +++ b/config/base.toml @@ -46,3 +46,5 @@ max_zones = 8 # maximum number of feasible zones to include in the opti [postprocessing] pam_jitter = 30 pam_min_duration = 10 + +[paths] diff --git a/scripts/0.1_run_osmox.py b/scripts/0.1_run_osmox.py index 4288acf..d6cf0b9 100644 --- a/scripts/0.1_run_osmox.py +++ b/scripts/0.1_run_osmox.py @@ -1,9 +1,7 @@ -import os import subprocess from pyrosm import get_data -import acbm from acbm.cli import acbm_cli from acbm.config import load_config @@ -12,13 +10,13 @@ def main(config_file): config = load_config(config_file) config.init_rng() - os.makedirs(acbm.root_path / config.osmox_path, exist_ok=True) - fp = get_data(config.region, directory=acbm.root_path / config.osmox_path) + fp = get_data(config.region, directory=config.osmox_path) subprocess.run( [ "osmox", "run", - acbm.root_path / "osmox/config_osmox.json", + # TODO: add to lib as string + config.root_path / "osmox/config_osmox.json", fp, config.osmox_path / config.region, "-f", diff --git a/scripts/0_preprocess_inputs.py b/scripts/0_preprocess_inputs.py index 492f169..1eaf13f 100644 --- a/scripts/0_preprocess_inputs.py +++ b/scripts/0_preprocess_inputs.py @@ -1,10 +1,7 @@ -import os - import geopandas as gpd import pandas as pd from uatk_spc import Reader -import acbm from acbm.cli import acbm_cli from acbm.config import load_config from acbm.logger_config import preprocessing_logger as logger @@ -14,15 +11,11 @@ @acbm_cli def main(config_file): config = load_config(config_file) - + config.make_dirs() # Write config to file - os.makedirs(config.output_path, exist_ok=True) config.write(config.output_path / "config.toml") config.init_rng() - region = config.region - # Pick a region with SPC output saved - spc_path = acbm.root_path / "data/external/spc_output/raw/" # ----- BOUNDARIES logger.info("Preprocessing Boundary Layer") @@ -31,9 +24,7 @@ def main(config_file): logger.info("1. Reading in the boundary layer for the whole of England") - boundaries = gpd.read_file( - acbm.root_path / "data/external/boundaries/oa_england.geojson" - ) + boundaries = gpd.read_file(config.boundaries_filepath) boundaries = boundaries.to_crs(epsg=4326) @@ -52,16 +43,13 @@ def main(config_file): logger.info("3. Filtering boundaries to specified study area") # Step 1: Get zones from SPC (these will be 2011 MSOAs) - spc = Reader(spc_path, region, backend="pandas") + spc = Reader(config.spc_raw_path, config.region, backend="pandas") zones_in_region = list(spc.info_per_msoa.keys()) # Step 2: Filter boundaries to identified zones # a) get MSOA11CD to MSOA21CD lookup - msoa_lookup = pd.read_csv( - acbm.root_path - / "data/external/MSOA_2011_MSOA_2021_Lookup_for_England_and_Wales.csv" - ) + msoa_lookup = pd.read_csv(config.lookup_filepath) # Filter msoa_lookup to include only rows where MSOA11CD is in zones_in_region msoa_lookup_filtered = msoa_lookup[msoa_lookup["MSOA11CD"].isin(zones_in_region)] # Extract the corresponding MSOA21CD values @@ -71,12 +59,9 @@ def main(config_file): boundaries_filtered = boundaries[boundaries["MSOA21CD"].isin(msoa21cd_values)] ## Save the output as parquet - logger.info( - f"4. Saving the boundaries to {acbm.root_path / 'data/external/boundaries/'} path" - ) - os.makedirs((acbm.root_path / config.boundaries_filepath).parents[0], exist_ok=True) + logger.info(f"4. Saving the boundaries to {config.study_areas_filepath} path") boundaries_filtered.to_file( - acbm.root_path / config.boundaries_filepath, + config.study_areas_filepath, driver="GeoJSON", ) diff --git a/scripts/1_prep_synthpop.py b/scripts/1_prep_synthpop.py index 14e97dd..8979d3d 100644 --- a/scripts/1_prep_synthpop.py +++ b/scripts/1_prep_synthpop.py @@ -1,8 +1,5 @@ -import os - from uatk_spc.builder import Builder -import acbm from acbm.cli import acbm_cli from acbm.config import load_config @@ -11,24 +8,20 @@ def main(config_file): config = load_config(config_file) config.init_rng() - region = config.region - - # Pick a region with SPC output saved - path = acbm.root_path / "data/external/spc_output/raw/" + config.make_dirs() # Add people and households spc_people_hh = ( - Builder(path, region, backend="pandas", input_type="parquet") + Builder( + config.spc_raw_path, config.region, backend="pandas", input_type="parquet" + ) .add_households() .unnest( ["health", "employment", "details", "demographics"], rsuffix="_household" ) .build() ) - os.makedirs(acbm.root_path / config.interim_path, exist_ok=True) - spc_people_hh.to_parquet( - acbm.root_path / config.interim_path / f"{region}_people_hh.parquet" - ) + spc_people_hh.to_parquet(config.spc_combined_filepath) if __name__ == "__main__": diff --git a/scripts/2_match_households_and_individuals.py b/scripts/2_match_households_and_individuals.py index cb4ea9e..518c517 100644 --- a/scripts/2_match_households_and_individuals.py +++ b/scripts/2_match_households_and_individuals.py @@ -1,4 +1,3 @@ -import os import pickle as pkl from pathlib import Path @@ -7,7 +6,6 @@ # from joblib import Parallel, delayed # from tqdm import trange -import acbm from acbm.assigning.utils import cols_for_assignment_all from acbm.cli import acbm_cli from acbm.config import load_config @@ -27,15 +25,14 @@ def main(config_file): config = load_config(config_file) config.init_rng() + config.make_dirs() pd.set_option("display.max_columns", None) def get_interim_path( file_name: str, - path: str | Path = acbm.root_path / config.interim_path / "matching", - ) -> str: - os.makedirs(path, exist_ok=True) - return f"{path}/{file_name}" + ) -> Path: + return config.interim_path / "matching" / file_name # ## Step 1: Load in the datasets @@ -44,9 +41,7 @@ def get_interim_path( logger.info("Loading SPC data") # Read in the spc data (parquet format) - spc = pd.read_parquet( - acbm.root_path / config.interim_path / f"{config.region}_people_hh.parquet" - ) + spc = pd.read_parquet(config.spc_combined_filepath) logger.info("Filtering SPC data to specific columns") # select columns @@ -107,20 +102,14 @@ def get_interim_path( # #### PSU logger.info("Loading NTS data: PSU table") - path_psu = ( - acbm.root_path / "data/external/nts/UKDA-5340-tab/tab/psu_eul_2002-2022.tab" - ) + path_psu = config.psu_filepath psu = pd.read_csv(path_psu, sep="\t") # #### Individuals logger.info("Loading NTS data: individuals table") - path_individuals = ( - acbm.root_path - / "data/external/nts/UKDA-5340-tab/tab/individual_eul_2002-2022.tab" - ) nts_individuals = pd.read_csv( - path_individuals, + config.nts_individuals_filepath, sep="\t", usecols=[ "IndividualID", @@ -159,12 +148,8 @@ def get_interim_path( # #### Households logger.info("Loading NTS data: household table") - path_households = ( - acbm.root_path - / "data/external/nts/UKDA-5340-tab/tab/household_eul_2002-2022.tab" - ) nts_households = pd.read_csv( - path_households, + config.nts_households_filepath, sep="\t", usecols=[ "HouseholdID", @@ -201,11 +186,8 @@ def get_interim_path( # #### Trips logger.info("Loading NTS data: trips table") - path_trips = ( - acbm.root_path / "data/external/nts/UKDA-5340-tab/tab/trip_eul_2002-2022.tab" - ) nts_trips = pd.read_csv( - path_trips, + config.nts_trips_filepath, sep="\t", usecols=[ "TripID", @@ -524,9 +506,7 @@ def get_interim_path( # We use the 2011 rural urban classification to match the SPC to the NTS. The NTS has 2 columns that we can use to match to the SPC: `Settlement2011EW_B03ID` and `Settlement2011EW_B04ID`. The `Settlement2011EW_B03ID` column is more general (urban / rural only), while the `Settlement2011EW_B04ID` column is more specific. We stick to the more general column for now. # read the rural urban classification data - rural_urban = pd.read_csv( - acbm.root_path / "data/external/census_2011_rural_urban.csv", sep="," - ) + rural_urban = pd.read_csv(config.rural_urban_filepath) # merge the rural_urban data with the spc spc_edited = spc_edited.merge( @@ -1130,18 +1110,12 @@ def get_interim_path( ) # save the file as a parquet file - spc_edited_copy.to_parquet(get_interim_path("spc_with_nts_trips.parquet")) + spc_edited_copy.to_parquet(config.spc_with_nts_trips_filepath) # save the nts data for later use in validation - nts_individuals.to_parquet( - acbm.root_path / "data/external/nts/filtered/nts_individuals.parquet" - ) - nts_households.to_parquet( - acbm.root_path / "data/external/nts/filtered/nts_households.parquet" - ) - nts_trips.to_parquet( - acbm.root_path / "data/external/nts/filtered/nts_trips.parquet" - ) + nts_individuals.to_parquet(config.output_path / "nts_individuals.parquet") + nts_households.to_parquet(config.output_path / "nts_households.parquet") + nts_trips.to_parquet(config.output_path / "nts_trips.parquet") if __name__ == "__main__": diff --git a/scripts/3.1_assign_primary_feasible_zones.py b/scripts/3.1_assign_primary_feasible_zones.py index 04c2e81..acca185 100644 --- a/scripts/3.1_assign_primary_feasible_zones.py +++ b/scripts/3.1_assign_primary_feasible_zones.py @@ -1,10 +1,8 @@ -import os import pickle as pkl import geopandas as gpd import pandas as pd -import acbm from acbm.assigning.feasible_zones_primary import get_possible_zones from acbm.assigning.utils import ( activity_chains_for_assignment, @@ -23,11 +21,7 @@ def main(config_file): config = load_config(config_file) config.init_rng() - - def get_interim_path(file_name: str) -> str: - path = acbm.root_path / config.interim_path / "assigning" - os.makedirs(path, exist_ok=True) - return f"{path}/{file_name}" + config.make_dirs() #### LOAD DATA #### @@ -46,14 +40,16 @@ def get_interim_path(file_name: str) -> str: logger.info("Loading study area boundaries") - boundaries = gpd.read_file(acbm.root_path / config.boundaries_filepath) + boundaries = gpd.read_file(config.study_areas_filepath) logger.info("Study area boundaries loaded") # --- Assign activity home locations to boundaries zoning system logger.info("Assigning activity home locations to boundaries zoning system") - activity_chains = add_locations_to_activity_chains(activity_chains) + activity_chains = add_locations_to_activity_chains( + activity_chains, centroid_layer=pd.read_csv(config.centroid_layer_filepath) + ) # Convert the DataFrame into a GeoDataFrame, and assign a coordinate reference system (CRS) activity_chains = gpd.GeoDataFrame(activity_chains, geometry="location") @@ -87,18 +83,12 @@ def get_interim_path(file_name: str) -> str: logger.info("Travel time estimates created") # save travel_time_etstimates as parquet - travel_time_estimates.to_parquet( - acbm.root_path / config.interim_path / "travel_time_estimates.parquet" - ) + travel_time_estimates.to_parquet(config.travel_times_estimates_filepath) if config.parameters.travel_times: logger.info("Loading travel time matrix") - # TODO: move to config - travel_time_matrix_path = ( - acbm.root_path / "data/external/travel_times/oa/travel_time_matrix.parquet" - ) try: - travel_times = pd.read_parquet(travel_time_matrix_path) + travel_times = pd.read_parquet(config.travel_times_filepath) print("Travel time matrix loaded successfully.") except Exception as e: logger.info( @@ -127,7 +117,7 @@ def get_interim_path(file_name: str) -> str: intrazone_times = intrazone_time(zones=boundaries, key_column=config.zone_id) # save intrazone_times to pickle - with open(get_interim_path("intrazone_times.pkl"), "wb") as f: + with open(config.interim_path / "assigning" / "intrazone_times.pkl", "wb") as f: pkl.dump(intrazone_times, f) logger.info("Intrazonal travel time estimates created") @@ -151,9 +141,7 @@ def get_interim_path(file_name: str) -> str: logger.info("Loading activity locations") # osm data - osm_data = gpd.read_parquet( - acbm.root_path / config.osmox_path / (config.region + "_epsg_4326.parquet") - ) + osm_data = gpd.read_parquet(config.osm_path) logger.info("Activity locations loaded") # remove rows with activities = home OR transit @@ -180,7 +168,7 @@ def get_interim_path(file_name: str) -> str: predicate="within", ) # save as pickle - osm_data_gdf.to_pickle(get_interim_path("osm_poi_with_zones.pkl")) + osm_data_gdf.to_pickle(config.osm_poi_with_zones) activities_per_zone = get_activities_per_zone( zones=boundaries, @@ -189,7 +177,7 @@ def get_interim_path(file_name: str) -> str: return_df=True, ) - activities_per_zone.to_parquet(get_interim_path("activities_per_zone.parquet")) + activities_per_zone.to_parquet(config.activities_per_zone) #### Get possible zones for each primary activity @@ -221,7 +209,7 @@ def get_interim_path(file_name: str) -> str: logger.info("Saving feasible zones for education activities") # save possible_zones_school to dictionary - with open(get_interim_path("possible_zones_education.pkl"), "wb") as f: + with open(config.possible_zones_education, "wb") as f: pkl.dump(possible_zones_school, f) del possible_zones_school @@ -247,7 +235,7 @@ def get_interim_path(file_name: str) -> str: logger.info("Saving feasible zones for work activities") # save possible_zones_work to dictionary - with open(get_interim_path("possible_zones_work.pkl"), "wb") as f: + with open(config.possible_zones_work, "wb") as f: pkl.dump(possible_zones_work, f) del possible_zones_work diff --git a/scripts/3.2.1_assign_primary_zone_edu.py b/scripts/3.2.1_assign_primary_zone_edu.py index a53155d..1185622 100644 --- a/scripts/3.2.1_assign_primary_zone_edu.py +++ b/scripts/3.2.1_assign_primary_zone_edu.py @@ -1,9 +1,6 @@ -import os - import geopandas as gpd import pandas as pd -import acbm from acbm.assigning.select_zone_primary import ( fill_missing_zones, select_zone, @@ -23,11 +20,6 @@ def main(config_file): config = load_config(config_file) - def get_interim_path(file_name: str) -> str: - path = acbm.root_path / config.interim_path / "assigning" - os.makedirs(path, exist_ok=True) - return f"{path}/{file_name}" - # TODO: consider if RNG seed needs to be distinct for different assignments config.init_rng() @@ -37,21 +29,19 @@ def get_interim_path(file_name: str) -> str: # --- Possible zones for each activity (calculated in 3.1_assign_possible_zones.py) logger.info("Loading possible zones for each activity") - possible_zones_school = pd.read_pickle( - get_interim_path("possible_zones_education.pkl") - ) + possible_zones_school = pd.read_pickle(config.possible_zones_education) # --- boundaries logger.info("Loading study area boundaries") - boundaries = gpd.read_file(acbm.root_path / config.boundaries_filepath) + boundaries = gpd.read_file(config.study_areas_filepath) logger.info("Study area boundaries loaded") # --- osm POI data logger.info("Loading OSM POI data") - osm_data_gdf = pd.read_pickle(get_interim_path("osm_poi_with_zones.pkl")) + osm_data_gdf = pd.read_pickle(config.osm_poi_with_zones) # Convert the DataFrame into a GeoDataFrame, and assign a coordinate reference system (CRS) logger.info("Converting OSM POI data to GeoDataFrame") @@ -73,9 +63,7 @@ def get_interim_path(file_name: str) -> str: logger.info("Assigning activity home locations to boundaries zoning system") # Convert location column in activity_chains to spatial column - centroid_layer = pd.read_csv( - acbm.root_path / "data/external/centroids/Output_Areas_Dec_2011_PWC_2022.csv" - ) + centroid_layer = pd.read_csv(config.centroid_layer_filepath) activity_chains_edu = add_location( activity_chains_edu, "EPSG:27700", @@ -101,9 +89,7 @@ def get_interim_path(file_name: str) -> str: # --- activities per zone logger.info("Loading activities per zone") - activities_per_zone = pd.read_parquet( - get_interim_path("activities_per_zone.parquet") - ) + activities_per_zone = pd.read_parquet(config.activities_per_zone) # --- travel time estimates logger.info("Loading travel time estimates") @@ -169,7 +155,7 @@ def get_interim_path(file_name: str) -> str: logger.info("Saving activity chains with assigned zones") - activity_chains_edu.to_pickle(get_interim_path("activity_chains_education.pkl")) + activity_chains_edu.to_pickle(config.activity_chains_education) if __name__ == "__main__": diff --git a/scripts/3.2.2_assign_primary_zone_work.py b/scripts/3.2.2_assign_primary_zone_work.py index 74af395..d468fba 100644 --- a/scripts/3.2.2_assign_primary_zone_work.py +++ b/scripts/3.2.2_assign_primary_zone_work.py @@ -1,9 +1,6 @@ -import os - import geopandas as gpd import pandas as pd -import acbm from acbm.assigning.plots import ( plot_workzone_assignment_heatmap, plot_workzone_assignment_line, @@ -26,33 +23,30 @@ def main(config_file): config = load_config(config_file) config.init_rng() - def get_interim_path(file_name: str) -> str: - path = acbm.root_path / config.interim_path / "assigning" - os.makedirs(path, exist_ok=True) - return f"{path}/{file_name}" - #### LOAD DATA #### # --- Possible zones for each activity (calculated in 3.1_assign_possible_zones.py) - possible_zones_work = pd.read_pickle(get_interim_path("possible_zones_work.pkl")) + possible_zones_work = pd.read_pickle(config.possible_zones_work) # --- boundaries logger.info("Loading study area boundaries") - boundaries = gpd.read_file(acbm.root_path / config.boundaries_filepath) + boundaries = gpd.read_file(config.study_areas_filepath) logger.info("Study area boundaries loaded") # osm POI data - osm_data_gdf = pd.read_pickle(get_interim_path("osm_poi_with_zones.pkl")) + osm_data_gdf = pd.read_pickle(config.osm_poi_with_zones) # Convert the DataFrame into a GeoDataFrame, and assign a coordinate reference system (CRS) osm_data_gdf = gpd.GeoDataFrame(osm_data_gdf, geometry="geometry", crs="EPSG:4326") # --- Activity chains activity_chains = activity_chains_for_assignment(config, cols_for_assignment_work()) - activity_chains = add_locations_to_activity_chains(activity_chains) + activity_chains = add_locations_to_activity_chains( + activity_chains, centroid_layer=pd.read_csv(config.centroid_layer_filepath) + ) activity_chains = activity_chains[ activity_chains["TravDay"] == config.parameters.nts_day_of_week ] @@ -76,9 +70,7 @@ def get_interim_path(file_name: str) -> str: if commute_level == "MSOA": print("Step 1: Reading in the zipped csv file") - travel_demand = pd.read_csv( - acbm.root_path / "data/external/ODWP15EW_MSOA_v1.zip" - ) + travel_demand = pd.read_csv(config.travel_demand_filepath) print("Step 2: Creating commute_mode_dict") commute_mode_dict = { @@ -139,7 +131,7 @@ def get_interim_path(file_name: str) -> str: elif commute_level == "OA": print("Step 1: Reading in the zipped csv file") - travel_demand = pd.read_csv(acbm.root_path / "data/external/ODWP01EW_OA.zip") + travel_demand = pd.read_csv(config.travel_demand_filepath) print("Step 2: Filtering rows and dropping unnecessary columns") travel_demand_clipped = travel_demand[ @@ -277,12 +269,8 @@ def get_interim_path(file_name: str) -> str: )["demand_assigned"].transform(lambda x: (x / x.sum()) * 100) ) - # Define the output file path - os.makedirs(acbm.root_path / config.output_path, exist_ok=True) - output_file_path = acbm.root_path / config.output_path / "workzone_rmse_results.txt" - # Open the file in write mode - with open(output_file_path, "w") as file: + with open(config.workzone_rmse_results_path, "w") as file: # (1) RMSE for % of Total Demand predictions = workzone_assignment_opt["pct_of_total_demand_assigned"] targets = workzone_assignment_opt["pct_of_total_demand_actual"] @@ -316,7 +304,7 @@ def get_interim_path(file_name: str) -> str: n=10, selection_type="top", sort_by="actual", - save_dir=acbm.root_path / "data/processed/plots/assigning/", + save_dir=config.assigning_plots_path, ) # Plot the demand_actual and demand_assigned values as a heatmap for n origin_zones. @@ -325,12 +313,11 @@ def get_interim_path(file_name: str) -> str: n=20, selection_type="top", sort_by="assigned", - save_dir=acbm.root_path / "data/processed/plots/assigning/", + save_dir=config.assigning_plots_path, ) # save the activity chains as a pickle - - activity_chains_work.to_pickle(get_interim_path("activity_chains_work.pkl")) + activity_chains_work.to_pickle(config.activity_chains_work) if __name__ == "__main__": diff --git a/scripts/3.2.3_assign_secondary_zone.py b/scripts/3.2.3_assign_secondary_zone.py index bc8d241..4ad6231 100644 --- a/scripts/3.2.3_assign_secondary_zone.py +++ b/scripts/3.2.3_assign_secondary_zone.py @@ -7,8 +7,6 @@ - For more info on the spacetime approach for secondary locaiton assignment, see https://www.tandfonline.com/doi/full/10.1080/23249935.2021.1982068 """ -import os - import geopandas as gpd import numpy as np import pandas as pd @@ -16,7 +14,6 @@ from pam.planner.od import ODFactory, ODMatrix from pam.read import load_travel_diary -import acbm from acbm.assigning.select_zone_secondary import ( create_od_matrices, shift_and_fill_column, @@ -38,11 +35,6 @@ def main(config_file): config.init_rng() zone_id = config.zone_id - def get_interim_path(file_name: str) -> str: - path = acbm.root_path / config.interim_path / "assigning" - os.makedirs(path, exist_ok=True) - return f"{path}/{file_name}" - # --- Load in the data logger.info("Loading: activity chains") @@ -55,16 +47,14 @@ def get_interim_path(file_name: str) -> str: logger.info("Preprocessing: Adding OA21CD to the data") - boundaries = gpd.read_file(acbm.root_path / config.boundaries_filepath) + boundaries = gpd.read_file(config.study_areas_filepath) logger.info("Study area boundaries loaded") # --- Assign activity home locations to boundaries zoning system # Convert location column in activity_chains to spatial column - centroid_layer = pd.read_csv( - acbm.root_path / "data/external/centroids/Output_Areas_Dec_2011_PWC_2022.csv" - ) + centroid_layer = pd.read_csv(config.centroid_layer_filepath) activity_chains = add_location( activity_chains, "EPSG:27700", "EPSG:4326", centroid_layer, "OA11CD", "OA11CD" ) @@ -107,11 +97,12 @@ def merge_columns_from_other(df: pd.DataFrame, other: pd.DataFrame) -> pd.DataFr ) activity_chains_edu = merge_columns_from_other( - pd.read_pickle(get_interim_path("activity_chains_education.pkl")), + pd.read_pickle(config.activity_chains_education), activity_chains, ) activity_chains_work = merge_columns_from_other( - pd.read_pickle(get_interim_path("activity_chains_work.pkl")), + # TODO: update with config path + pd.read_pickle(config.activity_chains_work), activity_chains, ) @@ -342,9 +333,7 @@ def merge_columns_from_other(df: pd.DataFrame, other: pd.DataFrame) -> pd.DataFr # --- Calculate OD probabilities (probabilities of choosing a destination zone for an activity, given the origin zone) logger.info("Analysis (matrices): Step 3 - Calculating OD probabilities") - activities_per_zone = pd.read_parquet( - get_interim_path("activities_per_zone.parquet") - ) + activities_per_zone = pd.read_parquet(config.activities_per_zone) # keep only rows that don't match primary activities activities_per_zone = activities_per_zone[ @@ -443,7 +432,7 @@ def merge_columns_from_other(df: pd.DataFrame, other: pd.DataFrame) -> pd.DataFr # --- Save logger.info("Saving: Step 7 - Saving population") - write.to_csv(population, dir=acbm.root_path / config.output_path) + write.to_csv(population, dir=config.output_path) if __name__ == "__main__": diff --git a/scripts/3.3_assign_facility_all.py b/scripts/3.3_assign_facility_all.py index 1db59eb..89e7b3d 100644 --- a/scripts/3.3_assign_facility_all.py +++ b/scripts/3.3_assign_facility_all.py @@ -2,7 +2,6 @@ import pandas as pd from libpysal.weights import Queen -import acbm from acbm.assigning.plots import plot_desire_lines, plot_scatter_actual_reported from acbm.assigning.select_facility import map_activity_locations, select_facility from acbm.cli import acbm_cli @@ -42,14 +41,12 @@ def main(config_file): # --- Load data: POI locations logger.info("Loading facility data") - osm_data_gdf = gpd.read_parquet( - acbm.root_path / config.osmox_path / (config.region + "_epsg_4326.parquet") - ) + osm_data_gdf = gpd.read_parquet(config.osm_path) # --- Load data: Boundaries logger.info("Loading study area boundaries") - boundaries = gpd.read_file(acbm.root_path / config.boundaries_filepath) + boundaries = gpd.read_file(config.study_areas_filepath) logger.info("Study area boundaries loaded") @@ -135,7 +132,7 @@ def main(config_file): logger.info("a. Adding eduction type as fallback") # load in activity chains spc_with_nts = pd.read_parquet( - acbm.root_path / config.interim_path / "matching/spc_with_nts_trips.parquet", + config.spc_with_nts_trips_filepath, columns=["id", "education_type", "seq", "TripTotalTime", "TripDisIncSW"], ) # we get one row per id @@ -282,7 +279,7 @@ def main(config_file): lambda point: point if pd.isna(point) else point.wkt ) activity_chains_all.drop(columns=geom_cols).to_parquet( - acbm.root_path / config.output_path / "legs_with_locations.parquet" + config.output_path / "legs_with_locations.parquet" ) # --- Plots @@ -314,7 +311,7 @@ def main(config_file): x_label="Reported Travel Distance (km)", y_label="Actual Distance - Euclidian (km)", title_prefix=f"Scatter plot of TripDisIncSW vs. Length for {activity_type}", - save_dir=acbm.root_path / config.output_path / "plots/assigning/", + save_dir=config.output_path / "plots/assigning/", ) # Plot 2: Euclidian travel distance vs reported (NTS) travel TIME @@ -337,7 +334,7 @@ def main(config_file): x_label="Reported Travel TIme (min)", y_label="Actual Distance - Euclidian (km)", title_prefix="Scatter plot of TripTotalTime vs. Length", - save_dir=acbm.root_path / config.output_path / "plots/assigning/", + save_dir=config.output_path / "plots/assigning/", ) # .... @@ -353,7 +350,7 @@ def main(config_file): bin_size=5000, boundaries=boundaries, sample_size=1000, - save_dir=acbm.root_path / config.output_path / "plots/assigning/", + save_dir=config.output_path / "plots/assigning/", ) diff --git a/scripts/4_validation.py b/scripts/4_validation.py index 6950a99..4e4ea65 100644 --- a/scripts/4_validation.py +++ b/scripts/4_validation.py @@ -1,10 +1,7 @@ -import os - import matplotlib.pyplot as plt import pandas as pd import seaborn as sns -import acbm from acbm.cli import acbm_cli from acbm.config import load_config from acbm.logger_config import validation_logger as logger @@ -25,24 +22,19 @@ def main(config_file): logger.info("1. Creating folder for validation plots") validation_plots_path = config.validation_plots_path - os.makedirs(validation_plots_path, exist_ok=True) # ----- Reading in the data logger.info("2. Reading in the data") # NTS data - legs_nts = pd.read_parquet( - acbm.root_path / "data/external/nts/filtered/nts_trips.parquet" - ) + legs_nts = pd.read_parquet(config.output_path / "nts_trips.parquet") legs_nts = legs_nts[legs_nts["TravDay"] == config.parameters.nts_day_of_week] # Model outputs - legs_acbm = pd.read_csv(acbm.root_path / config.output_path / "legs.csv") - legs_acbm_geo = pd.read_parquet( - acbm.root_path / config.output_path / "legs_with_locations.parquet" - ) + legs_acbm = pd.read_csv(config.output_path / "legs.csv") + legs_acbm_geo = pd.read_parquet(config.output_path / "legs_with_locations.parquet") # ----- Preproccessing the data diff --git a/src/acbm/assigning/utils.py b/src/acbm/assigning/utils.py index f16ae1e..a9ebea4 100644 --- a/src/acbm/assigning/utils.py +++ b/src/acbm/assigning/utils.py @@ -4,7 +4,6 @@ import numpy as np import pandas as pd -import acbm from acbm.config import Config @@ -50,10 +49,7 @@ def activity_chains_for_assignment( columns = cols_for_assignment_all() return pd.read_parquet( - acbm.root_path - / config.interim_path - / "matching" - / "spc_with_nts_trips.parquet", + config.spc_with_nts_trips_filepath, columns=columns, ) diff --git a/src/acbm/config.py b/src/acbm/config.py index 4d7c2a3..9864dcd 100644 --- a/src/acbm/config.py +++ b/src/acbm/config.py @@ -1,3 +1,4 @@ +import os import random from dataclasses import dataclass from hashlib import sha256 @@ -7,7 +8,9 @@ import jcs import numpy as np import tomlkit -from pydantic import BaseModel, Field +from pydantic import BaseModel, Field, field_serializer + +import acbm @dataclass(frozen=True) @@ -40,12 +43,49 @@ class WorkAssignmentParams(BaseModel): commute_level: str | None = None +@dataclass(frozen=True) +class PathParams(BaseModel): + root_path: Path | None = acbm.root_path + output_path: Path | None = None + osm_path: Path | None = None + study_areas_filepath: Path | None = None + + @field_serializer( + "root_path", + "output_path", + "osm_path", + "study_areas_filepath", + check_fields=False, + ) + def serialize_filepath(self, filepath: Path | str | None) -> str | None: + return None if filepath is None else str(filepath.relative_to(self.root_path)) + + class Config(BaseModel): parameters: Parameters = Field(description="Config: parameters.") work_assignment: WorkAssignmentParams = Field( description="Config: parameters for work assignment." ) matching: MatchingParams = Field(description="Config: parameters for matching.") + paths: PathParams = Field(description="Path overrides.") + + def make_dirs(self): + """Makes all directories requried from config""" + os.makedirs(self.output_path, exist_ok=True) + os.makedirs(self.assigning_plots_path, exist_ok=True) + os.makedirs(self.validation_plots_path, exist_ok=True) + os.makedirs(self.activities_per_zone.parent, exist_ok=True) + os.makedirs(self.study_areas_filepath.parent, exist_ok=True) + os.makedirs(self.interim_path, exist_ok=True) + os.makedirs(self.travel_times_estimates_filepath.parent, exist_ok=True) + os.makedirs(self.spc_combined_filepath.parent, exist_ok=True) + os.makedirs(self.spc_with_nts_trips_filepath.parent, exist_ok=True) + os.makedirs(self.osmox_path, exist_ok=True) + os.makedirs(self.osm_path.parent, exist_ok=True) + + @property + def root_path(self) -> Path: + return acbm.root_path if self.paths.root_path is None else self.paths.root_path @property def id(self): @@ -59,14 +99,89 @@ def id(self): return sha256(jcs.canonicalize(self.model_dump())).hexdigest()[:ID_LENGTH] @property - def boundaries_filepath(self) -> str: + def boundaries_filepath(self) -> Path: + """Returns boundaries path.""" + return self.external_path / "boundaries" / "oa_england.geojson" + + @property + def lookup_filepath(self) -> Path: + return ( + self.external_path / "MSOA_2011_MSOA_2021_Lookup_for_England_and_Wales.csv" + ) + + @property + def spc_raw_path(self) -> Path: + return self.root_path / "data" / "external" / "spc_output" / "raw" + + @property + def spc_combined_filepath(self) -> Path: + return self.interim_path / f"{self.region}_people_hh.parquet" + + @property + def study_areas_filepath(self) -> Path: """Returns boundaries path.""" - return self.output_path / "boundaries" / "study_area_zones.geojson" + return ( + self.output_path / "boundaries" / "study_area_zones.geojson" + if self.paths.study_areas_filepath is None + else self.paths.study_areas_filepath + ) + + @property + def workzone_rmse_results_path(self) -> Path: + return self.root_path / self.output_path / "workzone_rmse_results.txt" @property - def osmox_path(self) -> str: + def osmox_path(self) -> Path: """Returns osmox path.""" - return self.output_path / "osmox" + return self.root_path / self.output_path / "osmox" + + @property + def osm_path(self) -> Path: + """Returns osm path.""" + return ( + self.root_path / self.osmox_path / (self.region + "_epsg_4326.parquet") + if self.paths.osm_path is None + else self.paths.osm_path + ) + + @property + def activities_per_zone(self) -> Path: + """Returns activities per zone filepath.""" + return self.interim_path / "assigning" / "activities_per_zone.parquet" + + @property + def possible_zones_education(self) -> Path: + """Returns possible zones for education filepath.""" + return self.interim_path / "assigning" / "possible_zones_education.pkl" + + @property + def possible_zones_work(self) -> Path: + """Returns possible zones for work filepath.""" + return self.interim_path / "assigning" / "possible_zones_work.pkl" + + @property + def osm_poi_with_zones(self) -> Path: + """Returns OSM POI with zones filepath.""" + return self.interim_path / "assigning" / "osm_poi_with_zones.pkl" + + @property + def activity_chains_education(self) -> Path: + """Returns activity chains (education) filepath.""" + return self.interim_path / "assigning" / "activity_chains_education.pkl" + + @property + def activity_chains_work(self) -> Path: + """Returns activity chains (work) filepath.""" + return self.interim_path / "assigning" / "activity_chains_work.pkl" + + @property + def centroids(self) -> Path: + return self.external_path / "centroids" / "Output_Areas_Dec_2011_PWC_2022.csv" + + @property + def assigning_plots_path(self) -> str: + """Returns assigning plots path.""" + return self.output_path / "plots" / "assigning" @property def validation_plots_path(self) -> str: @@ -76,13 +191,95 @@ def validation_plots_path(self) -> str: @property def output_path(self) -> str: """Returns output path.""" - return Path("data") / "outputs" / self.id + return ( + self.root_path / "data" / "outputs" / self.id + if self.paths.output_path is None + else self.paths.output_path + ) + + @property + def external_path(self) -> str: + """Returns external data path.""" + return self.root_path / "data" / "external" @property def interim_path(self) -> str: - """Returns full processed path.""" + """Returns interim data path.""" return self.output_path / "interim" + @property + def psu_filepath(self) -> Path: + return ( + self.external_path + / "nts" + / "UKDA-5340-tab" + / "tab" + / "psu_eul_2002-2022.tab" + ) + + @property + def nts_individuals_filepath(self) -> Path: + return ( + self.external_path + / "nts" + / "UKDA-5340-tab" + / "tab" + / "individual_eul_2002-2022.tab" + ) + + @property + def nts_households_filepath(self) -> Path: + return ( + self.external_path + / "nts" + / "UKDA-5340-tab" + / "tab" + / "household_eul_2002-2022.tab" + ) + + @property + def nts_trips_filepath(self) -> Path: + return ( + self.external_path + / "nts" + / "UKDA-5340-tab" + / "tab" + / "trip_eul_2002-2022.tab" + ) + + @property + def rural_urban_filepath(self) -> Path: + return self.external_path / "census_2011_rural_urban.csv" + + @property + def centroid_layer_filepath(self) -> Path: + return self.external_path / "centroids" / "Output_Areas_Dec_2011_PWC_2022.csv" + + @property + def travel_demand_filepath(self) -> Path: + if self.work_assignment.commute_level == "msoa": + return self.external_path / "ODWP15EW_MSOA_v1.zip" + return self.external_path / "ODWP01EW_OA.zip" + + @property + def travel_times_filepath(self) -> Path: + if self.work_assignment.commute_level == "msoa": + return ( + self.external_path + / "travel_times" + / "msoa" + / "travel_time_matrix.parquet" + ) + return self.external_path / "travel_times" / "oa" / "travel_time_matrix.parquet" + + @property + def travel_times_estimates_filepath(self) -> Path: + return self.interim_path / "assigning" / "travel_time_estimates.parquet" + + @property + def spc_with_nts_trips_filepath(self) -> Path: + return Path(self.interim_path / "matching" / "spc_with_nts_trips.parquet") + @property def seed(self) -> int: return self.parameters.seed diff --git a/src/acbm/preprocessing.py b/src/acbm/preprocessing.py index b5f3c5c..7c14286 100644 --- a/src/acbm/preprocessing.py +++ b/src/acbm/preprocessing.py @@ -6,8 +6,6 @@ from pyproj import Transformer from shapely.geometry import MultiPolygon, Point -import acbm - # ----- PREPROCESSING BOUNDARIES @@ -388,11 +386,9 @@ def get_new_coords(loc): return gpd.GeoDataFrame(merged_df, geometry="location", crs=target_crs) -def add_locations_to_activity_chains(activity_chains: pd.DataFrame) -> pd.DataFrame: - # Add location column as spatial column from OA centroids - centroid_layer = pd.read_csv( - acbm.root_path / "data/external/centroids/Output_Areas_Dec_2011_PWC_2022.csv" - ) +def add_locations_to_activity_chains( + activity_chains: pd.DataFrame, centroid_layer: pd.DataFrame +) -> pd.DataFrame: return add_location( activity_chains, "EPSG:27700", "EPSG:4326", centroid_layer, "OA11CD", "OA11CD" ) diff --git a/src/acbm/utils.py b/src/acbm/utils.py index def55c7..e9e95ed 100644 --- a/src/acbm/utils.py +++ b/src/acbm/utils.py @@ -4,7 +4,6 @@ import pandas as pd from sklearn.metrics import mean_squared_error -import acbm from acbm.config import Config @@ -45,9 +44,5 @@ def calculate_rmse(predictions, targets): def get_travel_times(config: Config, use_estimates: bool = False) -> pd.DataFrame: if config.parameters.travel_times and not use_estimates: - return pd.read_parquet( - acbm.root_path / "data/external/travel_times/oa/travel_time_matrix.parquet" - ) - return pd.read_parquet( - acbm.root_path / config.interim_path / "travel_time_estimates.parquet" - ) + return pd.read_parquet(config.travel_times_filepath) + return pd.read_parquet(config.travel_times_estimates_filepath) From f1279c53fa004b830e94007d4c50637220d6d9fb Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Thu, 28 Nov 2024 11:14:11 +0000 Subject: [PATCH 17/56] Refactor logs to use config --- scripts/0.1_run_osmox.py | 8 ++-- scripts/0_preprocess_inputs.py | 11 ++---- scripts/1_prep_synthpop.py | 11 +++--- scripts/2_match_households_and_individuals.py | 10 ++--- scripts/3.1_assign_primary_feasible_zones.py | 8 ++-- scripts/3.2.1_assign_primary_zone_edu.py | 6 +-- scripts/3.2.2_assign_primary_zone_work.py | 7 ++-- scripts/3.2.3_assign_secondary_zone.py | 8 ++-- scripts/3.3_assign_facility_all.py | 7 ++-- scripts/4_validation.py | 7 ++-- src/acbm/config.py | 23 ++++++++++++ src/acbm/logger_config.py | 37 +++++++++---------- 12 files changed, 77 insertions(+), 66 deletions(-) diff --git a/scripts/0.1_run_osmox.py b/scripts/0.1_run_osmox.py index d6cf0b9..aa978ad 100644 --- a/scripts/0.1_run_osmox.py +++ b/scripts/0.1_run_osmox.py @@ -3,14 +3,16 @@ from pyrosm import get_data from acbm.cli import acbm_cli -from acbm.config import load_config +from acbm.config import load_and_setup_config @acbm_cli def main(config_file): - config = load_config(config_file) - config.init_rng() + config = load_and_setup_config(config_file) + logger = config.get_logger("preprocessing", __file__) + logger.info("Getting OSM data") fp = get_data(config.region, directory=config.osmox_path) + logger.info("Running osmox") subprocess.run( [ "osmox", diff --git a/scripts/0_preprocess_inputs.py b/scripts/0_preprocess_inputs.py index 1eaf13f..966e898 100644 --- a/scripts/0_preprocess_inputs.py +++ b/scripts/0_preprocess_inputs.py @@ -3,19 +3,14 @@ from uatk_spc import Reader from acbm.cli import acbm_cli -from acbm.config import load_config -from acbm.logger_config import preprocessing_logger as logger +from acbm.config import load_and_setup_config from acbm.preprocessing import edit_boundary_resolution @acbm_cli def main(config_file): - config = load_config(config_file) - config.make_dirs() - # Write config to file - config.write(config.output_path / "config.toml") - - config.init_rng() + config = load_and_setup_config(config_file) + logger = config.get_logger("preprocessing", __file__) # ----- BOUNDARIES logger.info("Preprocessing Boundary Layer") diff --git a/scripts/1_prep_synthpop.py b/scripts/1_prep_synthpop.py index 8979d3d..d9ed6f1 100644 --- a/scripts/1_prep_synthpop.py +++ b/scripts/1_prep_synthpop.py @@ -1,16 +1,15 @@ from uatk_spc.builder import Builder from acbm.cli import acbm_cli -from acbm.config import load_config +from acbm.config import load_and_setup_config @acbm_cli def main(config_file): - config = load_config(config_file) - config.init_rng() - config.make_dirs() + config = load_and_setup_config(config_file) + logger = config.get_logger("preprocessing", __file__) - # Add people and households + logger.info("Combine SPC people and houeshold data") spc_people_hh = ( Builder( config.spc_raw_path, config.region, backend="pandas", input_type="parquet" @@ -21,6 +20,8 @@ def main(config_file): ) .build() ) + + logger.info(f"Write combined SPC data to: {config.spc_combined_filepath}") spc_people_hh.to_parquet(config.spc_combined_filepath) diff --git a/scripts/2_match_households_and_individuals.py b/scripts/2_match_households_and_individuals.py index 518c517..5301ad2 100644 --- a/scripts/2_match_households_and_individuals.py +++ b/scripts/2_match_households_and_individuals.py @@ -4,12 +4,9 @@ import numpy as np import pandas as pd -# from joblib import Parallel, delayed -# from tqdm import trange from acbm.assigning.utils import cols_for_assignment_all from acbm.cli import acbm_cli -from acbm.config import load_config -from acbm.logger_config import matching_logger as logger +from acbm.config import load_and_setup_config from acbm.matching import MatcherExact, match_individuals from acbm.preprocessing import ( count_per_group, @@ -23,9 +20,8 @@ @acbm_cli def main(config_file): - config = load_config(config_file) - config.init_rng() - config.make_dirs() + config = load_and_setup_config(config_file) + logger = config.get_logger("matching", __file__) pd.set_option("display.max_columns", None) diff --git a/scripts/3.1_assign_primary_feasible_zones.py b/scripts/3.1_assign_primary_feasible_zones.py index acca185..2d30bf4 100644 --- a/scripts/3.1_assign_primary_feasible_zones.py +++ b/scripts/3.1_assign_primary_feasible_zones.py @@ -12,16 +12,14 @@ zones_to_time_matrix, ) from acbm.cli import acbm_cli -from acbm.config import load_config -from acbm.logger_config import assigning_primary_feasible_logger as logger +from acbm.config import load_and_setup_config from acbm.preprocessing import add_locations_to_activity_chains @acbm_cli def main(config_file): - config = load_config(config_file) - config.init_rng() - config.make_dirs() + config = load_and_setup_config(config_file) + logger = config.get_logger("assigning_primary_feasible", __file__) #### LOAD DATA #### diff --git a/scripts/3.2.1_assign_primary_zone_edu.py b/scripts/3.2.1_assign_primary_zone_edu.py index 1185622..dacef02 100644 --- a/scripts/3.2.1_assign_primary_zone_edu.py +++ b/scripts/3.2.1_assign_primary_zone_edu.py @@ -10,15 +10,15 @@ cols_for_assignment_edu, ) from acbm.cli import acbm_cli -from acbm.config import load_config -from acbm.logger_config import assigning_primary_zones_logger as logger +from acbm.config import load_and_setup_config from acbm.preprocessing import add_location from acbm.utils import get_travel_times @acbm_cli def main(config_file): - config = load_config(config_file) + config = load_and_setup_config(config_file) + logger = config.get_logger("assigning_primary_zone", __file__) # TODO: consider if RNG seed needs to be distinct for different assignments config.init_rng() diff --git a/scripts/3.2.2_assign_primary_zone_work.py b/scripts/3.2.2_assign_primary_zone_work.py index d468fba..bb833f0 100644 --- a/scripts/3.2.2_assign_primary_zone_work.py +++ b/scripts/3.2.2_assign_primary_zone_work.py @@ -12,16 +12,15 @@ filter_matrix_to_boundary, ) from acbm.cli import acbm_cli -from acbm.config import load_config -from acbm.logger_config import assigning_primary_zones_logger as logger +from acbm.config import load_and_setup_config from acbm.preprocessing import add_locations_to_activity_chains from acbm.utils import calculate_rmse @acbm_cli def main(config_file): - config = load_config(config_file) - config.init_rng() + config = load_and_setup_config(config_file) + logger = config.get_logger("assigning_primary_zone", __file__) #### LOAD DATA #### diff --git a/scripts/3.2.3_assign_secondary_zone.py b/scripts/3.2.3_assign_secondary_zone.py index 4ad6231..ed0084d 100644 --- a/scripts/3.2.3_assign_secondary_zone.py +++ b/scripts/3.2.3_assign_secondary_zone.py @@ -23,16 +23,16 @@ activity_chains_for_assignment, ) from acbm.cli import acbm_cli -from acbm.config import load_config -from acbm.logger_config import assigning_secondary_zones_logger as logger +from acbm.config import load_and_setup_config from acbm.preprocessing import add_location from acbm.utils import get_travel_times @acbm_cli def main(config_file): - config = load_config(config_file) - config.init_rng() + config = load_and_setup_config(config_file) + logger = config.get_logger("assigning_secondary_zone", __file__) + zone_id = config.zone_id # --- Load in the data diff --git a/scripts/3.3_assign_facility_all.py b/scripts/3.3_assign_facility_all.py index 89e7b3d..8f56f83 100644 --- a/scripts/3.3_assign_facility_all.py +++ b/scripts/3.3_assign_facility_all.py @@ -5,14 +5,13 @@ from acbm.assigning.plots import plot_desire_lines, plot_scatter_actual_reported from acbm.assigning.select_facility import map_activity_locations, select_facility from acbm.cli import acbm_cli -from acbm.config import load_config -from acbm.logger_config import assigning_facility_locations_logger as logger +from acbm.config import load_and_setup_config @acbm_cli def main(config_file): - config = load_config(config_file) - config.init_rng() + config = load_and_setup_config(config_file) + logger = config.get_logger("assigning_facility_locations", __file__) # --- Load data: activity chains logger.info("Loading activity chains") diff --git a/scripts/4_validation.py b/scripts/4_validation.py index 4e4ea65..ffe1327 100644 --- a/scripts/4_validation.py +++ b/scripts/4_validation.py @@ -3,8 +3,7 @@ import seaborn as sns from acbm.cli import acbm_cli -from acbm.config import load_config -from acbm.logger_config import validation_logger as logger +from acbm.config import load_and_setup_config from acbm.validating.plots import ( plot_activity_sequence_comparison, plot_comparison, @@ -15,8 +14,8 @@ @acbm_cli def main(config_file): - config = load_config(config_file) - config.init_rng() + config = load_and_setup_config(config_file) + logger = config.get_logger("validation", __file__) # ----- Folder for validation plots diff --git a/src/acbm/config.py b/src/acbm/config.py index 9864dcd..d1e8372 100644 --- a/src/acbm/config.py +++ b/src/acbm/config.py @@ -2,6 +2,7 @@ import random from dataclasses import dataclass from hashlib import sha256 +from logging import Logger from pathlib import Path from typing import Tuple @@ -11,6 +12,7 @@ from pydantic import BaseModel, Field, field_serializer import acbm +from acbm.logger_config import create_logger @dataclass(frozen=True) @@ -72,6 +74,7 @@ class Config(BaseModel): def make_dirs(self): """Makes all directories requried from config""" os.makedirs(self.output_path, exist_ok=True) + os.makedirs(self.logs_path, exist_ok=True) os.makedirs(self.assigning_plots_path, exist_ok=True) os.makedirs(self.validation_plots_path, exist_ok=True) os.makedirs(self.activities_per_zone.parent, exist_ok=True) @@ -98,6 +101,11 @@ def id(self): ID_LENGTH = 10 return sha256(jcs.canonicalize(self.model_dump())).hexdigest()[:ID_LENGTH] + @property + def logs_path(self) -> Path: + """Returns logs path.""" + return self.output_path / "logs" + @property def boundaries_filepath(self) -> Path: """Returns boundaries path.""" @@ -317,7 +325,22 @@ def write(self, filepath: str | Path): with open(filepath, "w") as f: f.write(tomlkit.dumps(self.model_dump(exclude_none=True))) + def get_logger(self, name: str, filename: str) -> Logger: + return create_logger(name, os.path.basename(filename), self.logs_path) + def load_config(filepath: str | Path) -> Config: + """Loads config from filepath.""" with open(filepath, "rb") as f: return Config.model_validate(tomlkit.load(f)) + + +def load_and_setup_config(filepath: str | Path) -> Config: + """Loads config from filepath, makes required dirs, writes config and inits RNG.""" + config = load_config(filepath) + config.make_dirs() + config_path = config.output_path / "config.toml" + if not os.path.isfile(config_path): + config.write(config_path) + config.init_rng() + return config diff --git a/src/acbm/logger_config.py b/src/acbm/logger_config.py index 87797ea..75f328d 100644 --- a/src/acbm/logger_config.py +++ b/src/acbm/logger_config.py @@ -1,6 +1,5 @@ import logging -import acbm from acbm.utils import prepend_datetime # # Configure the root logger @@ -19,13 +18,13 @@ ) -def create_logger(name, log_file): +def create_logger(name, log_file, logs_path): logger = logging.getLogger(name) logger.setLevel( logging.DEBUG ) # Ensure the logger captures all messages at DEBUG level and above if not logger.hasHandlers(): # Check if the logger already has handlers - file_handler = logging.FileHandler(acbm.logs_path / prepend_datetime(log_file)) + file_handler = logging.FileHandler(logs_path / prepend_datetime(log_file)) file_handler.setLevel(logging.DEBUG) # Set to DEBUG for file output file_handler.setFormatter( logging.Formatter( @@ -39,20 +38,20 @@ def create_logger(name, log_file): return logger -# Create loggers for different modules -preprocessing_logger = create_logger("preprocessing", "preprocessing.log") -matching_logger = create_logger("matching", "matching.log") -assigning_primary_feasible_logger = create_logger( - "assigning_primary_feasible", "assigning_primary_feasible.log" -) -assigning_primary_zones_logger = create_logger( - "assigning_primary_zone", "assigning_primary_zone.log" -) -assigning_secondary_zones_logger = create_logger( - "assigning_secondary_zone", "assigning_secondary_zone.log" -) -assigning_facility_locations_logger = create_logger( - "assigning_facility_locations", "assigning_facility_locations.log" -) +# # Create loggers for different modules +# preprocessing_logger = create_logger("preprocessing", "preprocessing.log") +# matching_logger = create_logger("matching", "matching.log") +# assigning_primary_feasible_logger = create_logger( +# "assigning_primary_feasible", "assigning_primary_feasible.log" +# ) +# assigning_primary_zones_logger = create_logger( +# "assigning_primary_zone", "assigning_primary_zone.log" +# ) +# assigning_secondary_zones_logger = create_logger( +# "assigning_secondary_zone", "assigning_secondary_zone.log" +# ) +# assigning_facility_locations_logger = create_logger( +# "assigning_facility_locations", "assigning_facility_locations.log" +# ) -validation_logger = create_logger("validation", "validation.log") +# validation_logger = create_logger("validation", "validation.log") From 3e40d6aa4a8adabfd3da5452ba4c24f616f7ceef Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Thu, 28 Nov 2024 11:23:34 +0000 Subject: [PATCH 18/56] Make PathParams optional --- config/base.toml | 2 -- src/acbm/config.py | 6 ++++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/base.toml b/config/base.toml index 1a737cd..09d9697 100644 --- a/config/base.toml +++ b/config/base.toml @@ -46,5 +46,3 @@ max_zones = 8 # maximum number of feasible zones to include in the opti [postprocessing] pam_jitter = 30 pam_min_duration = 10 - -[paths] diff --git a/src/acbm/config.py b/src/acbm/config.py index d1e8372..ad95a00 100644 --- a/src/acbm/config.py +++ b/src/acbm/config.py @@ -69,7 +69,7 @@ class Config(BaseModel): description="Config: parameters for work assignment." ) matching: MatchingParams = Field(description="Config: parameters for matching.") - paths: PathParams = Field(description="Path overrides.") + paths: PathParams | None = Field(description="Path overrides.", default=None) def make_dirs(self): """Makes all directories requried from config""" @@ -99,7 +99,9 @@ def id(self): """ # Take first 10 chars to enable paths to remain not too long ID_LENGTH = 10 - return sha256(jcs.canonicalize(self.model_dump())).hexdigest()[:ID_LENGTH] + return sha256(jcs.canonicalize(self.model_dump(exclude_none=True))).hexdigest()[ + :ID_LENGTH + ] @property def logs_path(self) -> Path: From f2edfb0a52d9dd3f89b65dbb6fd211538f3f4028 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Thu, 28 Nov 2024 11:24:10 +0000 Subject: [PATCH 19/56] Move prepend_datetime to logger_config module --- src/acbm/logger_config.py | 7 ++++++- src/acbm/utils.py | 7 ------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/acbm/logger_config.py b/src/acbm/logger_config.py index 75f328d..af01916 100644 --- a/src/acbm/logger_config.py +++ b/src/acbm/logger_config.py @@ -1,6 +1,11 @@ import logging +from datetime import datetime + + +def prepend_datetime(s: str, delimiter: str = "_") -> str: + current_date = datetime.now().strftime("%Y-%m-%d") + return f"{current_date}{delimiter}{s}" -from acbm.utils import prepend_datetime # # Configure the root logger # logging.basicConfig( diff --git a/src/acbm/utils.py b/src/acbm/utils.py index e9e95ed..41fbed7 100644 --- a/src/acbm/utils.py +++ b/src/acbm/utils.py @@ -1,5 +1,3 @@ -from datetime import datetime - import numpy as np import pandas as pd from sklearn.metrics import mean_squared_error @@ -7,11 +5,6 @@ from acbm.config import Config -def prepend_datetime(s: str, delimiter: str = "_") -> str: - current_date = datetime.now().strftime("%Y-%m-%d") - return f"{current_date}{delimiter}{s}" - - def calculate_rmse(predictions, targets): """ Calculate the Root Mean Squared Error (RMSE) between predictions and targets, From 53e3c108eeb9b17ed5ec2d518ff852b4491e2ec4 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Thu, 28 Nov 2024 11:44:52 +0000 Subject: [PATCH 20/56] Handle missing PathParams, revise log filename --- src/acbm/config.py | 20 +++++++++++++++----- src/acbm/logger_config.py | 2 +- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/acbm/config.py b/src/acbm/config.py index ad95a00..9215802 100644 --- a/src/acbm/config.py +++ b/src/acbm/config.py @@ -88,7 +88,11 @@ def make_dirs(self): @property def root_path(self) -> Path: - return acbm.root_path if self.paths.root_path is None else self.paths.root_path + return ( + acbm.root_path + if self.paths is None or self.paths.root_path is None + else self.paths.root_path + ) @property def id(self): @@ -132,7 +136,7 @@ def study_areas_filepath(self) -> Path: """Returns boundaries path.""" return ( self.output_path / "boundaries" / "study_area_zones.geojson" - if self.paths.study_areas_filepath is None + if self.paths is None or self.paths.study_areas_filepath is None else self.paths.study_areas_filepath ) @@ -150,7 +154,7 @@ def osm_path(self) -> Path: """Returns osm path.""" return ( self.root_path / self.osmox_path / (self.region + "_epsg_4326.parquet") - if self.paths.osm_path is None + if self.paths is None or self.paths.osm_path is None else self.paths.osm_path ) @@ -203,7 +207,7 @@ def output_path(self) -> str: """Returns output path.""" return ( self.root_path / "data" / "outputs" / self.id - if self.paths.output_path is None + if self.paths is None or self.paths.output_path is None else self.paths.output_path ) @@ -328,7 +332,13 @@ def write(self, filepath: str | Path): f.write(tomlkit.dumps(self.model_dump(exclude_none=True))) def get_logger(self, name: str, filename: str) -> Logger: - return create_logger(name, os.path.basename(filename), self.logs_path) + stem = ".".join(Path(os.path.basename(filename)).name.split(".")[:-1]) + stem_with_log_suffix = stem + ".log" + return create_logger( + name, + stem_with_log_suffix, + self.logs_path, + ) def load_config(filepath: str | Path) -> Config: diff --git a/src/acbm/logger_config.py b/src/acbm/logger_config.py index af01916..05ddd23 100644 --- a/src/acbm/logger_config.py +++ b/src/acbm/logger_config.py @@ -29,7 +29,7 @@ def create_logger(name, log_file, logs_path): logging.DEBUG ) # Ensure the logger captures all messages at DEBUG level and above if not logger.hasHandlers(): # Check if the logger already has handlers - file_handler = logging.FileHandler(logs_path / prepend_datetime(log_file)) + file_handler = logging.FileHandler(logs_path / log_file) file_handler.setLevel(logging.DEBUG) # Set to DEBUG for file output file_handler.setFormatter( logging.Formatter( From 5af333155f340d62a293a6794f5820aa92fca2b5 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Thu, 28 Nov 2024 12:06:54 +0000 Subject: [PATCH 21/56] Refactor logging --- scripts/3.2.2_assign_primary_zone_work.py | 20 ++++++++-------- src/acbm/assigning/feasible_zones_primary.py | 25 ++++++++++---------- src/acbm/assigning/select_facility.py | 3 ++- src/acbm/assigning/select_zone_primary.py | 9 +++---- src/acbm/assigning/select_zone_secondary.py | 10 ++++---- src/acbm/assigning/select_zone_work.py | 3 ++- src/acbm/logger_config.py | 19 --------------- 7 files changed, 38 insertions(+), 51 deletions(-) diff --git a/scripts/3.2.2_assign_primary_zone_work.py b/scripts/3.2.2_assign_primary_zone_work.py index bb833f0..d00f95d 100644 --- a/scripts/3.2.2_assign_primary_zone_work.py +++ b/scripts/3.2.2_assign_primary_zone_work.py @@ -68,10 +68,10 @@ def main(config_file): # Clean the data if commute_level == "MSOA": - print("Step 1: Reading in the zipped csv file") + logger.info("Step 1: Reading in the zipped csv file") travel_demand = pd.read_csv(config.travel_demand_filepath) - print("Step 2: Creating commute_mode_dict") + logger.info("Step 2: Creating commute_mode_dict") commute_mode_dict = { "Bus, minibus or coach": "pt", "Driving a car or van": "car", @@ -86,12 +86,12 @@ def main(config_file): "Work mainly at or from home": "home", } - print("Step 3: Mapping commute mode to model mode") + logger.info("Step 3: Mapping commute mode to model mode") travel_demand["mode"] = travel_demand[ "Method used to travel to workplace (12 categories) label" ].map(commute_mode_dict) - print("Step 4: Filtering rows and dropping unnecessary columns") + logger.info("Step 4: Filtering rows and dropping unnecessary columns") travel_demand_clipped = travel_demand[ travel_demand["Place of work indicator (4 categories) code"].isin([1, 3]) ] @@ -106,7 +106,7 @@ def main(config_file): ] ) - print("Step 5: Renaming columns and grouping") + logger.info("Step 5: Renaming columns and grouping") travel_demand_clipped = travel_demand_clipped.rename( columns={ "Middle layer Super Output Areas code": "MSOA21CD_home", @@ -119,7 +119,7 @@ def main(config_file): .reset_index() ) - print("Step 6: Filtering matrix to boundary") + logger.info("Step 6: Filtering matrix to boundary") travel_demand_clipped = filter_matrix_to_boundary( boundary=boundaries, matrix=travel_demand_clipped, @@ -129,10 +129,10 @@ def main(config_file): ) elif commute_level == "OA": - print("Step 1: Reading in the zipped csv file") + logger.info("Step 1: Reading in the zipped csv file") travel_demand = pd.read_csv(config.travel_demand_filepath) - print("Step 2: Filtering rows and dropping unnecessary columns") + logger.info("Step 2: Filtering rows and dropping unnecessary columns") travel_demand_clipped = travel_demand[ travel_demand["Place of work indicator (4 categories) code"].isin([1, 3]) ] @@ -143,7 +143,7 @@ def main(config_file): ] ) - print("Step 3: Renaming columns and grouping") + logger.info("Step 3: Renaming columns and grouping") travel_demand_clipped = travel_demand_clipped.rename( columns={ "Output Areas code": "OA21CD_home", @@ -156,7 +156,7 @@ def main(config_file): .reset_index() ) - print("Step 4: Filtering matrix to boundary") + logger.info("Step 4: Filtering matrix to boundary") travel_demand_clipped = filter_matrix_to_boundary( boundary=boundaries, matrix=travel_demand_clipped, diff --git a/src/acbm/assigning/feasible_zones_primary.py b/src/acbm/assigning/feasible_zones_primary.py index 75eb52d..9eb18fb 100644 --- a/src/acbm/assigning/feasible_zones_primary.py +++ b/src/acbm/assigning/feasible_zones_primary.py @@ -1,3 +1,4 @@ +import logging from typing import Optional import geopandas as gpd @@ -13,11 +14,12 @@ zones_to_time_matrix, ) from acbm.config import Config -from acbm.logger_config import assigning_primary_feasible_logger as logger pandarallel.initialize(progress_bar=True) +logger = logging.getLogger("assigning_primary_feasible") + # --- Schemas for validation activity_chains_schema = DataFrameSchema( @@ -128,8 +130,8 @@ def get_possible_zones( travel_times = input_schemas["travel_times"].validate(travel_times, lazy=True) except SchemaErrors as e: - print("Validation failed with errors:") - print(e.failure_cases) # prints all the validation errors at once + logger.error("Validation failed with errors:") + logger.error(e.failure_cases) # prints all the validation errors at once return None if travel_times is None: @@ -139,7 +141,7 @@ def get_possible_zones( ) list_of_modes = activity_chains["mode"].unique() - print(f"Unique modes found in the dataset are: {list_of_modes}") + logger.info(f"Unique modes found in the dataset are: {list_of_modes}") # use map_day_to_wkday_binary to identify if activity is on a weekday or weekend activity_chains["weekday"] = activity_chains["TravDay"].apply( @@ -157,7 +159,7 @@ def get_possible_zones( # loop over the list of modes for mode in list_of_modes: - print(f"Processing mode: {mode}") + logger.info(f"Processing mode: {mode}") # filter the travel_times dataframe to only include rows with the current mode travel_times_filtered_mode = travel_times[travel_times["mode"] == mode] @@ -174,9 +176,9 @@ def get_possible_zones( and "weekday" in travel_times.columns ): for time_of_day in list_of_times_of_day: - print(f"Processing time of day: {time_of_day} | mode: {mode}") + logger.info(f"Processing time of day: {time_of_day} | mode: {mode}") for day_type in day_types: - print( + logger.info( f"Processing time of day: {time_of_day} | weekday: {day_type} | mode: {mode}" ) # filter the travel_times dataframe to only include rows with the current time_of_day and weekday @@ -184,10 +186,8 @@ def get_possible_zones( (travel_times_filtered_mode["weekday"] == day_type) & (travel_times_filtered_mode["time_of_day"] == time_of_day) ] - print( - "unique modes after filtering are", - travel_times_filtered_mode_time_day["mode"].unique(), - ) + unique_modes = travel_times_filtered_mode_time_day["mode"].unique() + logger.info(f"unique modes after filtering are: {unique_modes}") # filter the activity chains to the current mode, time_of_day and weekday activity_chains_filtered = activity_chains[ @@ -292,7 +292,6 @@ def _get_possible_zones( dict A dictionary with the origin zone as the key and a list of possible destination zones as the value """ - # get the travel time travel_time = activity["TripTotalTime"] # get the origin zone @@ -321,6 +320,7 @@ def _get_possible_zones( filtered_activities_per_zone[zone_id] ) ] + # how many zones are reachable? logger.debug( f"Activity {activity.id}: Number of zones with activity {activity_purpose} \ @@ -338,6 +338,7 @@ def _get_possible_zones( <= travel_time + time_tolerance * travel_time ) ] + logger.debug( f"Activity {activity.id}: Number of zones with activity {activity_purpose} within threshold of reported time {travel_time}: \ {len(travel_times_filtered_time)}" diff --git a/src/acbm/assigning/select_facility.py b/src/acbm/assigning/select_facility.py index 6d926f1..42bfa50 100644 --- a/src/acbm/assigning/select_facility.py +++ b/src/acbm/assigning/select_facility.py @@ -1,3 +1,4 @@ +import logging from typing import Optional, Tuple import geopandas as gpd @@ -5,7 +6,7 @@ import pandas as pd from shapely import Point -from acbm.logger_config import assigning_facility_locations_logger as logger +logger = logging.getLogger("assigning_facility_locations") def _select_facility( diff --git a/src/acbm/assigning/select_zone_primary.py b/src/acbm/assigning/select_zone_primary.py index 8a37d19..7626677 100644 --- a/src/acbm/assigning/select_zone_primary.py +++ b/src/acbm/assigning/select_zone_primary.py @@ -1,8 +1,9 @@ +import logging from typing import Optional import pandas as pd -from acbm.logger_config import assigning_primary_zones_logger as logger +logger = logging.getLogger("assigning_primary_zone") def select_zone( @@ -149,7 +150,7 @@ def select_zone( return selected_zone except KeyError: - logger.info(f"KeyError: Key {activity_id} in possible_zones has no values") + logger.error(f"KeyError: Key {activity_id} in possible_zones has no values") return "NA" @@ -240,11 +241,11 @@ def _get_zones_using_time_estimate( str The zone that has the estimated time closest to the given time. """ - acceptable_modes = ["car", "pt", "walk", "cycle"] if mode is not None and mode not in acceptable_modes: error_message = f"Invalid mode: {mode}. Mode must be one of {acceptable_modes}." + logger.error(error_message) raise ValueError(error_message) # Convert to_zones to a set for faster lookup @@ -260,7 +261,7 @@ def _get_zones_using_time_estimate( # Check if the filtered dictionary is empty if not filtered_dict: # Handle the case where there are no travel time estimates for the target zone - print( + logger.info( f"No travel time estimates found for from_zone: {from_zone} to any of the to_zones: {to_zones}" ) return None diff --git a/src/acbm/assigning/select_zone_secondary.py b/src/acbm/assigning/select_zone_secondary.py index 4c53952..dd7dc3b 100644 --- a/src/acbm/assigning/select_zone_secondary.py +++ b/src/acbm/assigning/select_zone_secondary.py @@ -1,3 +1,4 @@ +import logging from copy import deepcopy import numpy as np @@ -5,7 +6,7 @@ import pandas as pd from pam.planner.choice_location import DiscretionaryTrips -from acbm.logger_config import assigning_secondary_zones_logger as logger +logger = logging.getLogger("assigning_secondary_zone") def set_home_ozone(data: pd.DataFrame, oact_col: str, ozone_col: str, hzone_col: str): @@ -152,17 +153,18 @@ def create_od_matrices( to_indices = df[zone_to].map(zone_index) for mode in modes: - print(f"Starting mode: {mode}") + logger.info(f"Starting mode: {mode}") mask = df[mode_column] == mode values = df[mask][value_column].fillna(fill_value) # Fill missing values od_matrices[mode][from_indices[mask], to_indices[mask]] = values - print(f"Finished mode: {mode}") + logger.info(f"Finished mode: {mode}") return od_matrices def update_population_plans( - population: pam.core.Population, od: pam.planner.od.ODFactory + population: pam.core.Population, + od: pam.planner.od.ODFactory, ) -> None: """ Update the plans in a population object using the DiscretionaryTrips planner diff --git a/src/acbm/assigning/select_zone_work.py b/src/acbm/assigning/select_zone_work.py index a8d4991..ff9257a 100644 --- a/src/acbm/assigning/select_zone_work.py +++ b/src/acbm/assigning/select_zone_work.py @@ -1,3 +1,4 @@ +import logging from dataclasses import dataclass, field from typing import Dict, List, Tuple @@ -5,7 +6,7 @@ import pandas as pd import pulp -from acbm.logger_config import assigning_primary_zones_logger as logger +logger = logging.getLogger("assigning_primary_zone") @dataclass diff --git a/src/acbm/logger_config.py b/src/acbm/logger_config.py index 05ddd23..1843232 100644 --- a/src/acbm/logger_config.py +++ b/src/acbm/logger_config.py @@ -41,22 +41,3 @@ def create_logger(name, log_file, logs_path): # avoid logs from being propagated to the root logger (so that they don't show in the notebook) logger.propagate = False return logger - - -# # Create loggers for different modules -# preprocessing_logger = create_logger("preprocessing", "preprocessing.log") -# matching_logger = create_logger("matching", "matching.log") -# assigning_primary_feasible_logger = create_logger( -# "assigning_primary_feasible", "assigning_primary_feasible.log" -# ) -# assigning_primary_zones_logger = create_logger( -# "assigning_primary_zone", "assigning_primary_zone.log" -# ) -# assigning_secondary_zones_logger = create_logger( -# "assigning_secondary_zone", "assigning_secondary_zone.log" -# ) -# assigning_facility_locations_logger = create_logger( -# "assigning_facility_locations", "assigning_facility_locations.log" -# ) - -# validation_logger = create_logger("validation", "validation.log") From 0ef173345677a425f8938cc6cd727c04db516810 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Thu, 28 Nov 2024 14:35:40 +0000 Subject: [PATCH 22/56] Fix case in config, add field validator for commute_level --- src/acbm/config.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/acbm/config.py b/src/acbm/config.py index 9215802..a02d010 100644 --- a/src/acbm/config.py +++ b/src/acbm/config.py @@ -9,7 +9,7 @@ import jcs import numpy as np import tomlkit -from pydantic import BaseModel, Field, field_serializer +from pydantic import BaseModel, Field, field_serializer, field_validator import acbm from acbm.logger_config import create_logger @@ -42,7 +42,11 @@ class WorkAssignmentParams(BaseModel): weight_max_dev: float weight_total_dev: float max_zones: int - commute_level: str | None = None + commute_level: str + + @field_validator("commute_level") + def validate_commute_level(commute_level: str) -> str: + return commute_level.upper() @dataclass(frozen=True) @@ -271,20 +275,20 @@ def centroid_layer_filepath(self) -> Path: @property def travel_demand_filepath(self) -> Path: - if self.work_assignment.commute_level == "msoa": + if self.work_assignment.commute_level == "MSOA": return self.external_path / "ODWP15EW_MSOA_v1.zip" return self.external_path / "ODWP01EW_OA.zip" @property def travel_times_filepath(self) -> Path: - if self.work_assignment.commute_level == "msoa": + if self.work_assignment.commute_level == "MSOA": return ( self.external_path / "travel_times" - / "msoa" + / "MSOA" / "travel_time_matrix.parquet" ) - return self.external_path / "travel_times" / "oa" / "travel_time_matrix.parquet" + return self.external_path / "travel_times" / "OA" / "travel_time_matrix.parquet" @property def travel_times_estimates_filepath(self) -> Path: From f34a2a2f3b74c8976db4167a03bce4a1f6799b38 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Thu, 28 Nov 2024 15:57:05 +0000 Subject: [PATCH 23/56] Update paths --- scripts/5_acbm_to_matsim_xml.py | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/scripts/5_acbm_to_matsim_xml.py b/scripts/5_acbm_to_matsim_xml.py index a514808..f0eef57 100644 --- a/scripts/5_acbm_to_matsim_xml.py +++ b/scripts/5_acbm_to_matsim_xml.py @@ -7,7 +7,6 @@ from pam.samplers.time import apply_jitter_to_plan from shapely import Point, wkt -import acbm from acbm.cli import acbm_cli from acbm.config import load_and_setup_config from acbm.postprocessing.matsim import ( @@ -28,19 +27,11 @@ def main(config_file): logger.info("1 - Loading data") - individuals = pd.read_csv( - acbm.root_path / "data/processed/activities_pam/people.csv" - ) - households = pd.read_csv( - acbm.root_path / "data/processed/activities_pam/households.csv" - ) - activities = pd.read_csv( - acbm.root_path / "data/processed/activities_pam/activities.csv" - ) - legs = pd.read_csv(acbm.root_path / "data/processed/activities_pam/legs.csv") - legs_geo = pd.read_parquet( - acbm.root_path / "data/processed/activities_pam/legs_with_locations.parquet" - ) + individuals = pd.read_csv(config.output_path / "people.csv") + households = pd.read_csv(config.output_path / "households.csv") + activities = pd.read_csv(config.output_path / "activities.csv") + legs = pd.read_csv(config.output_path / "legs.csv") + legs_geo = pd.read_parquet(config.output_path / "legs_with_locations.parquet") # ----- Clean the data @@ -154,7 +145,7 @@ def convert_to_point(value): write.write_matsim_population_v6( population=population, - path=acbm.root_path / "data/processed/activities_pam/plans.xml", + path=config.output_path / "plans.xml", ) From 628b553c5f8454d35fcf1525e116816d632174df Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Thu, 28 Nov 2024 16:32:15 +0000 Subject: [PATCH 24/56] Revise order of args and returned tuple --- scripts/5_acbm_to_matsim_xml.py | 5 ++--- src/acbm/postprocessing/matsim.py | 6 +++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/scripts/5_acbm_to_matsim_xml.py b/scripts/5_acbm_to_matsim_xml.py index f0eef57..2ace3ba 100644 --- a/scripts/5_acbm_to_matsim_xml.py +++ b/scripts/5_acbm_to_matsim_xml.py @@ -74,11 +74,10 @@ def main(config_file): }, inplace=True, ) - logger.info("2.4 - Remove people with missing location data ") - individuals, households, activities, legs, legs_geo = filter_no_location( - individuals, households, activities, legs, legs_geo + individuals, activities, legs, legs_geo, households = filter_no_location( + individuals, activities, legs, legs_geo, households ) log_row_count(individuals, "individuals", "2_filter_no_location", row_counts) diff --git a/src/acbm/postprocessing/matsim.py b/src/acbm/postprocessing/matsim.py index 248db15..6facb89 100644 --- a/src/acbm/postprocessing/matsim.py +++ b/src/acbm/postprocessing/matsim.py @@ -68,14 +68,14 @@ def filter_no_location( ---------- individuals : pd.DataFrame DataFrame containing individual data. - households : pd.DataFrame - DataFrame containing household data. activities : pd.DataFrame DataFrame containing activity data. legs : pd.DataFrame DataFrame containing legs data. legs_geo : pd.DataFrame DataFrame containing legs with geographic data. + households : pd.DataFrame + DataFrame containing household data. Returns ------- @@ -114,10 +114,10 @@ def filter_no_location( return ( individuals_cleaned, - households_cleaned, activities_cleaned, legs_cleaned, legs_geo_cleaned, + households_cleaned, ) From c8ef43adcb02be716a6a524c2288c1db4f73eeca Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Thu, 28 Nov 2024 16:38:54 +0000 Subject: [PATCH 25/56] Fix test --- tests/test_config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_config.py b/tests/test_config.py index d0afe71..9dc9cc2 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -11,4 +11,4 @@ def config(): def test_id(config): - assert config.id == "01d8ded073" + assert config.id == "11df8ad099" From ca1d92240061593b32a5bbfd52ce5c18e8afb98b Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Fri, 29 Nov 2024 17:56:59 +0000 Subject: [PATCH 26/56] Fix doc comment --- src/acbm/preprocessing.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/acbm/preprocessing.py b/src/acbm/preprocessing.py index 5d31601..7601659 100644 --- a/src/acbm/preprocessing.py +++ b/src/acbm/preprocessing.py @@ -425,6 +425,8 @@ def add_locations_to_activity_chains( DataFrame containing the activity chains. target_crs : str The target CRS to reproject the locations to. + centroid_layer : pd.DataFrame + DataFrame containing zone centroids. Returns ------- From 2885ba3084140a3a476e31c4e828f40c88e27744 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Fri, 29 Nov 2024 18:04:08 +0000 Subject: [PATCH 27/56] Refactor loading/reprojecting boundaries with config --- scripts/0_preprocess_inputs.py | 5 +---- scripts/3.1_assign_primary_feasible_zones.py | 10 ++-------- scripts/3.2.1_assign_primary_zone_edu.py | 10 ++-------- scripts/3.2.2_assign_primary_zone_work.py | 11 ++--------- scripts/3.2.3_assign_secondary_zone.py | 13 +++++-------- scripts/3.3_assign_facility_all.py | 10 ++-------- src/acbm/config.py | 5 +++++ 7 files changed, 19 insertions(+), 45 deletions(-) diff --git a/scripts/0_preprocess_inputs.py b/scripts/0_preprocess_inputs.py index 6cfa4f4..994b2eb 100644 --- a/scripts/0_preprocess_inputs.py +++ b/scripts/0_preprocess_inputs.py @@ -1,4 +1,3 @@ -import geopandas as gpd import pandas as pd from uatk_spc import Reader @@ -19,9 +18,7 @@ def main(config_file): logger.info("1. Reading in the boundary layer for the whole of England") - boundaries = gpd.read_file(config.boundaries_filepath) - - boundaries = boundaries.to_crs(epsg=config.output_crs) + boundaries = config.get_boundaries() ## --- Dissolve boundaries if resolution is MSOA diff --git a/scripts/3.1_assign_primary_feasible_zones.py b/scripts/3.1_assign_primary_feasible_zones.py index 9cb26e6..f45d13c 100644 --- a/scripts/3.1_assign_primary_feasible_zones.py +++ b/scripts/3.1_assign_primary_feasible_zones.py @@ -37,14 +37,8 @@ def main(config_file): # --- Study area boundaries logger.info("Loading study area boundaries") - - boundaries = gpd.read_file(config.study_areas_filepath) - - logger.info("Study area boundaries loaded") - - # Reproject boundaries to the output CRS specified in the config - boundaries = boundaries.to_crs(f"epsg:{config.output_crs}") - logger.info(f"Boundaries reprojected to {config.output_crs}") + boundaries = config.get_boundaries() + logger.info(f"Study area boundaries loaded and reprojected to {config.output_crs}") # --- Assign activity home locations to boundaries zoning system diff --git a/scripts/3.2.1_assign_primary_zone_edu.py b/scripts/3.2.1_assign_primary_zone_edu.py index 26bf1b0..f543edb 100644 --- a/scripts/3.2.1_assign_primary_zone_edu.py +++ b/scripts/3.2.1_assign_primary_zone_edu.py @@ -33,14 +33,8 @@ def main(config_file): # --- boundaries logger.info("Loading study area boundaries") - - boundaries = gpd.read_file(config.study_areas_filepath) - - logger.info("Study area boundaries loaded") - - # Reproject boundaries to the output CRS specified in the config - boundaries = boundaries.to_crs(f"epsg:{config.output_crs}") - logger.info(f"Boundaries reprojected to {config.output_crs}") + boundaries = config.get_boundaries() + logger.info(f"Study area boundaries loaded and reprojected to {config.output_crs}") # --- osm POI data logger.info("Loading OSM POI data") diff --git a/scripts/3.2.2_assign_primary_zone_work.py b/scripts/3.2.2_assign_primary_zone_work.py index f5d92a1..eb66876 100644 --- a/scripts/3.2.2_assign_primary_zone_work.py +++ b/scripts/3.2.2_assign_primary_zone_work.py @@ -28,16 +28,9 @@ def main(config_file): possible_zones_work = pd.read_pickle(config.possible_zones_work) # --- boundaries - logger.info("Loading study area boundaries") - - boundaries = gpd.read_file(config.study_areas_filepath) - - logger.info("Study area boundaries loaded") - - # Reproject boundaries to the output CRS specified in the config - boundaries = boundaries.to_crs(f"epsg:{config.output_crs}") - logger.info(f"Boundaries reprojected to {config.output_crs}") + boundaries = config.get_boundaries() + logger.info(f"Study area boundaries loaded and reprojected to {config.output_crs}") # osm POI data diff --git a/scripts/3.2.3_assign_secondary_zone.py b/scripts/3.2.3_assign_secondary_zone.py index c216209..ac0a95b 100644 --- a/scripts/3.2.3_assign_secondary_zone.py +++ b/scripts/3.2.3_assign_secondary_zone.py @@ -43,16 +43,13 @@ def main(config_file): activity_chains["TravDay"] == config.parameters.nts_day_of_week ] + # TODO: remove obsolete comment # --- Add OA21CD to the data + # logger.info("Preprocessing: Adding OA21CD to the data") - logger.info("Preprocessing: Adding OA21CD to the data") - - boundaries = gpd.read_file(config.study_areas_filepath) - # Reproject boundaries to the output CRS specified in the config - boundaries = boundaries.to_crs(f"epsg:{config.output_crs}") - logger.info(f"Boundaries reprojected to {config.output_crs}") - - logger.info("Study area boundaries loaded") + logger.info("Loading study area boundaries") + boundaries = config.get_boundaries() + logger.info(f"Study area boundaries loaded and reprojected to {config.output_crs}") # --- Assign activity home locations to boundaries zoning system diff --git a/scripts/3.3_assign_facility_all.py b/scripts/3.3_assign_facility_all.py index 55702ce..813b00f 100644 --- a/scripts/3.3_assign_facility_all.py +++ b/scripts/3.3_assign_facility_all.py @@ -44,14 +44,8 @@ def main(config_file): # --- Load data: Boundaries logger.info("Loading study area boundaries") - - boundaries = gpd.read_file(config.study_areas_filepath) - - logger.info("Study area boundaries loaded") - - # Reproject boundaries to the output CRS specified in the config - boundaries = boundaries.to_crs(f"epsg:{config.output_crs}") - logger.info(f"Boundaries reprojected to {config.output_crs}") + boundaries = config.get_boundaries() + logger.info(f"Study area boundaries loaded and reprojected to {config.output_crs}") # --- Prepprocess: add zone column to POI data logger.info("Adding zone column to POI data") diff --git a/src/acbm/config.py b/src/acbm/config.py index 9a1cafa..e8e608b 100644 --- a/src/acbm/config.py +++ b/src/acbm/config.py @@ -6,6 +6,7 @@ from pathlib import Path from typing import Tuple +import geopandas as gpd import jcs import numpy as np import tomlkit @@ -358,6 +359,10 @@ def get_logger(self, name: str, filename: str) -> Logger: self.logs_path, ) + def get_boundaries(self) -> gpd.GeoDataFrame: + boundaries = gpd.read_file(self.boundaries_filepath) + return boundaries.to_crs(epsg=self.output_crs) + def load_config(filepath: str | Path) -> Config: """Loads config from filepath.""" From f35ba011c08f4433c2a3e6376f262557c3e9123e Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Fri, 29 Nov 2024 18:04:51 +0000 Subject: [PATCH 28/56] Fix config test --- tests/test_config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_config.py b/tests/test_config.py index 9dc9cc2..2bf69d6 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -11,4 +11,4 @@ def config(): def test_id(config): - assert config.id == "11df8ad099" + assert config.id == "a89b65de35" From 3d0733bab179028fcf594349ce53265c1a6a8bb5 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Fri, 29 Nov 2024 18:08:41 +0000 Subject: [PATCH 29/56] Update OSM path config with output CRS --- src/acbm/config.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/acbm/config.py b/src/acbm/config.py index e8e608b..d0dddf3 100644 --- a/src/acbm/config.py +++ b/src/acbm/config.py @@ -168,7 +168,9 @@ def osmox_path(self) -> Path: def osm_path(self) -> Path: """Returns osm path.""" return ( - self.root_path / self.osmox_path / (self.region + "_epsg_4326.parquet") + self.root_path + / self.osmox_path + / (self.region + f"_epsg_{self.output_crs}.parquet") if self.paths is None or self.paths.osm_path is None else self.paths.osm_path ) From fdb2304e910542b041ac12be41cd092cdc00ab3d Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Fri, 29 Nov 2024 18:31:08 +0000 Subject: [PATCH 30/56] Replace print with logger, fix get_boundaries method --- src/acbm/config.py | 2 +- src/acbm/matching.py | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/acbm/config.py b/src/acbm/config.py index d0dddf3..610dc45 100644 --- a/src/acbm/config.py +++ b/src/acbm/config.py @@ -362,7 +362,7 @@ def get_logger(self, name: str, filename: str) -> Logger: ) def get_boundaries(self) -> gpd.GeoDataFrame: - boundaries = gpd.read_file(self.boundaries_filepath) + boundaries = gpd.read_file(self.study_areas_filepath) return boundaries.to_crs(epsg=self.output_crs) diff --git a/src/acbm/matching.py b/src/acbm/matching.py index 0be0dfd..4c0a5b1 100644 --- a/src/acbm/matching.py +++ b/src/acbm/matching.py @@ -1,3 +1,4 @@ +import logging from collections import defaultdict from dataclasses import dataclass, field from typing import Dict, List @@ -8,6 +9,8 @@ # categorical (exact) matching - (for household level) +logger = logging.getLogger("matching") + @dataclass class MatcherExact: @@ -282,7 +285,7 @@ def match_individuals( if show_progress and i % 100 == 0: # Print the iteration number and the number of keys in the dict - print(f"Matching for household {i} out of: {len(matches_hh)}") + logger.info(f"Matching for household {i} out of: {len(matches_hh)}") # apply the matching match = match_psm(rows_df1, rows_df2, matching_columns) From 721cf547587dccaaeca90037fac9cb507c71ea90 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Sat, 30 Nov 2024 13:05:32 +0000 Subject: [PATCH 31/56] Refactor with population type --- scripts/5_acbm_to_matsim_xml.py | 70 ++++----- src/acbm/postprocessing/matsim.py | 251 ++++++++++++++++-------------- 2 files changed, 173 insertions(+), 148 deletions(-) diff --git a/scripts/5_acbm_to_matsim_xml.py b/scripts/5_acbm_to_matsim_xml.py index 30062c6..bb75dfb 100644 --- a/scripts/5_acbm_to_matsim_xml.py +++ b/scripts/5_acbm_to_matsim_xml.py @@ -1,7 +1,6 @@ from datetime import timedelta import geopandas as gpd -import pandas as pd from pam import write from pam.read import load_travel_diary from pam.samplers.time import apply_jitter_to_plan @@ -10,10 +9,9 @@ from acbm.cli import acbm_cli from acbm.config import load_and_setup_config from acbm.postprocessing.matsim import ( + Population, add_home_location_to_individuals, calculate_percentage_remaining, - filter_by_pid, - filter_no_location, log_row_count, ) @@ -27,18 +25,14 @@ def main(config_file): logger.info("1 - Loading data") - individuals = pd.read_csv(config.output_path / "people.csv") - households = pd.read_csv(config.output_path / "households.csv") - activities = pd.read_csv(config.output_path / "activities.csv") - legs = pd.read_csv(config.output_path / "legs.csv") - legs_geo = pd.read_parquet(config.output_path / "legs_with_locations.parquet") + population = Population.read(config) # ----- Clean the data logger.info("2 - Cleaning data") # rename age_years to age in individuals - individuals.rename(columns={"age_years": "age"}, inplace=True) + population.individuals.rename(columns={"age_years": "age"}, inplace=True) # We will be removing some rows in each planning operation. This function helps keep a # record of the number of rows in each table after each operation. @@ -47,31 +41,29 @@ def main(config_file): logger.info("2.1 - Record number of rows in each df before cleaning") - log_row_count(individuals, "individuals", "0_initial", row_counts) - log_row_count(households, "households", "0_initial", row_counts) - log_row_count(activities, "activities", "0_initial", row_counts) - log_row_count(legs, "legs", "0_initial", row_counts) - log_row_count(legs_geo, "legs_geo", "0_initial", row_counts) + log_row_count(population.individuals, "individuals", "0_initial", row_counts) + log_row_count(population.households, "households", "0_initial", row_counts) + log_row_count(population.activities, "activities", "0_initial", row_counts) + log_row_count(population.legs, "legs", "0_initial", row_counts) + log_row_count(population.legs_geo, "legs_geo", "0_initial", row_counts) logger.info("2.2 - Remove people that don't exist across all dfs") # When writing to matsim using pam, we get an error when a pid exists in one dataset # but not in the other. We will remove these people from the datasets. - individuals, activities, legs, legs_geo, households = filter_by_pid( - individuals, activities, legs, legs_geo, households - ) + population = population.filter_by_pid() - log_row_count(individuals, "individuals", "1_filter_by_pid", row_counts) - log_row_count(households, "households", "1_filter_by_pid", row_counts) - log_row_count(activities, "activities", "1_filter_by_pid", row_counts) - log_row_count(legs, "legs", "1_filter_by_pid", row_counts) - log_row_count(legs_geo, "legs_geo", "1_filter_by_pid", row_counts) + log_row_count(population.individuals, "individuals", "1_filter_by_pid", row_counts) + log_row_count(population.households, "households", "1_filter_by_pid", row_counts) + log_row_count(population.activities, "activities", "1_filter_by_pid", row_counts) + log_row_count(population.legs, "legs", "1_filter_by_pid", row_counts) + log_row_count(population.legs_geo, "legs_geo", "1_filter_by_pid", row_counts) logger.info("2.3 - Rename geometry columns (for PAM)") # TODO: Rename columns upstream in 3.3_assign_facility_all script - legs_geo.rename( + population.legs_geo.rename( columns={ "start_location_geometry_wkt": "start_loc", "end_location_geometry_wkt": "end_loc", @@ -80,15 +72,19 @@ def main(config_file): ) logger.info("2.4 - Remove people with missing location data ") - individuals, activities, legs, legs_geo, households = filter_no_location( - individuals, activities, legs, legs_geo, households - ) + population = population.filter_no_location() - log_row_count(individuals, "individuals", "2_filter_no_location", row_counts) - log_row_count(households, "households", "2_filter_no_location", row_counts) - log_row_count(activities, "activities", "2_filter_no_location", row_counts) - log_row_count(legs, "legs", "2_filter_no_location", row_counts) - log_row_count(legs_geo, "legs_geo", "2_filter_no_location", row_counts) + log_row_count( + population.individuals, "individuals", "2_filter_no_location", row_counts + ) + log_row_count( + population.households, "households", "2_filter_no_location", row_counts + ) + log_row_count( + population.activities, "activities", "2_filter_no_location", row_counts + ) + log_row_count(population.legs, "legs", "2_filter_no_location", row_counts) + log_row_count(population.legs_geo, "legs_geo", "2_filter_no_location", row_counts) logger.info("2.5 - Log number of rows in each df after cleaning") @@ -109,16 +105,20 @@ def convert_to_point(value): return wkt.loads(value) # Convert start_loc and end_loc to shapely point objects - legs_geo["start_loc"] = legs_geo["start_loc"].apply(convert_to_point) - legs_geo["end_loc"] = legs_geo["end_loc"].apply(convert_to_point) + population.legs_geo["start_loc"] = population.legs_geo["start_loc"].apply( + convert_to_point + ) + population.legs_geo["end_loc"] = population.legs_geo["end_loc"].apply( + convert_to_point + ) # Convert to GeoDataFrame with start_loc as the active geometry - legs_geo = gpd.GeoDataFrame(legs_geo, geometry="start_loc") + legs_geo = gpd.GeoDataFrame(population.legs_geo, geometry="start_loc") logger.info("3b - Add home location to individuals") # Apply - individuals_geo = add_home_location_to_individuals(legs_geo, individuals) + individuals_geo = add_home_location_to_individuals(legs_geo, population.individuals) logger.info("4 - Write to MATSim XML") diff --git a/src/acbm/postprocessing/matsim.py b/src/acbm/postprocessing/matsim.py index 2f9bc96..8f5c12e 100644 --- a/src/acbm/postprocessing/matsim.py +++ b/src/acbm/postprocessing/matsim.py @@ -1,124 +1,149 @@ +from dataclasses import dataclass +from typing import Self + import pandas as pd +from acbm.config import Config -def filter_by_pid( - individuals: pd.DataFrame, - activities: pd.DataFrame, - legs: pd.DataFrame, - legs_geo: pd.DataFrame, - households: pd.DataFrame, -) -> tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame, pd.DataFrame, pd.DataFrame]: - """ - Filter the input DataFrames to include only include people (pids) that exist in all - dfs - Parameters - ---------- +@dataclass +class Population: individuals: pd.DataFrame - Individuals DataFrame. + households: pd.DataFrame activities: pd.DataFrame - Activities DataFrame. - legs: pd.DataFrame: - Legs DataFrame. + legs: pd.DataFrame legs_geo: pd.DataFrame - Legs with geo DataFrame. - households: pd.DataFrame - Households DataFrame. - - Returns - ------- - tuple - A tuple containing the filtered DataFrames (individuals, activities, legs, legs_geo, households). - """ - # Identify common pids - common_pids = ( - set(individuals["pid"]) - .intersection(activities["pid"]) - .intersection(legs["pid"]) - .intersection(legs_geo["pid"]) - ) - - # Filter Individual Level DataFrames - individuals = individuals[individuals["pid"].isin(common_pids)] - activities = activities[activities["pid"].isin(common_pids)] - legs = legs[legs["pid"].isin(common_pids)] - legs_geo = legs_geo[legs_geo["pid"].isin(common_pids)] - - # Filter Household Level DataFrame - households = households[households["hid"].isin(individuals["hid"])] - - return individuals, activities, legs, legs_geo, households - - -def filter_no_location( - individuals: pd.DataFrame, - households: pd.DataFrame, - activities: pd.DataFrame, - legs: pd.DataFrame, - legs_geo: pd.DataFrame, -) -> tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame, pd.DataFrame, pd.DataFrame]: - """ - Cleans the provided DataFrames by removing rows without location data. Gets all pids - that have at least one row with missing location data, and removes all rows with - these pids. pids are geneerated from two sources: - - legs_geo with missing start_loc or end_loc - - individuals with missing hzone - Parameters - ---------- - individuals : pd.DataFrame - DataFrame containing individual data. - activities : pd.DataFrame - DataFrame containing activity data. - legs : pd.DataFrame - DataFrame containing legs data. - legs_geo : pd.DataFrame - DataFrame containing legs with geographic data. - households : pd.DataFrame - DataFrame containing household data. - - Returns - ------- - tuple - A tuple containing the cleaned DataFrames - (individuals_cleaned, households_cleaned, activities_cleaned, legs_cleaned, legs_geo_cleaned). - """ - # Identify rows in legs_geo where start_loc or end_loc are null - invalid_rows_legs_geo = legs_geo[ - legs_geo["start_loc"].isnull() | legs_geo["end_loc"].isnull() - ] - - # Extract the pid values associated with these rows - invalid_pids_legs_geo = invalid_rows_legs_geo["pid"].unique() - - # Identify rows in individuals where hzone is null - invalid_rows_individuals = individuals[individuals["hzone"].isnull()] - - # Extract the pid values associated with these rows - invalid_pids_individuals = invalid_rows_individuals["pid"].unique() - - # Combine the invalid pid values from both sources - invalid_pids = set(invalid_pids_legs_geo).union(set(invalid_pids_individuals)) - - # Remove rows with these pids from all DataFrames - individuals_cleaned = individuals[~individuals["pid"].isin(invalid_pids)] - activities_cleaned = activities[~activities["pid"].isin(invalid_pids)] - legs_cleaned = legs[~legs["pid"].isin(invalid_pids)] - legs_geo_cleaned = legs_geo[~legs_geo["pid"].isin(invalid_pids)] - - # Extract remaining hid values from individuals_cleaned - remaining_hids = individuals_cleaned["hid"].unique() - - # Filter households_cleaned to only include rows with hid values in remaining_hids - households_cleaned = households[households["hid"].isin(remaining_hids)] - - return ( - individuals_cleaned, - activities_cleaned, - legs_cleaned, - legs_geo_cleaned, - households_cleaned, - ) + @classmethod + def read(cls, config: Config) -> Self: + individuals = pd.read_csv(config.output_path / "people.csv") + households = pd.read_csv(config.output_path / "households.csv") + activities = pd.read_csv(config.output_path / "activities.csv") + legs = pd.read_csv(config.output_path / "legs.csv") + legs_geo = pd.read_parquet(config.output_path / "legs_with_locations.parquet") + return Population( + individuals=individuals, + households=households, + activities=activities, + legs=legs, + legs_geo=legs_geo, + ) + + def filter_by_pid(self) -> Self: + """ + Filter the input DataFrames to include only include people (pids) that exist in all + dfs + + Parameters + ---------- + individuals: pd.DataFrame + Individuals DataFrame. + activities: pd.DataFrame + Activities DataFrame. + legs: pd.DataFrame: + Legs DataFrame. + legs_geo: pd.DataFrame + Legs with geo DataFrame. + households: pd.DataFrame + Households DataFrame. + + Returns + ------- + tuple + A tuple containing the filtered DataFrames (individuals, activities, legs, legs_geo, households). + """ + # Identify common pids + common_pids = ( + set(self.individuals["pid"]) + .intersection(self.activities["pid"]) + .intersection(self.legs["pid"]) + .intersection(self.legs_geo["pid"]) + ) + + # Filter Individual Level DataFrames + individuals = self.individuals[self.individuals["pid"].isin(common_pids)] + activities = self.activities[self.activities["pid"].isin(common_pids)] + legs = self.legs[self.legs["pid"].isin(common_pids)] + legs_geo = self.legs_geo[self.legs_geo["pid"].isin(common_pids)] + + # Filter Household Level DataFrame + households = self.households[self.households["hid"].isin(individuals["hid"])] + + return Population( + individuals=individuals, + households=households, + activities=activities, + legs=legs, + legs_geo=legs_geo, + ) + + def filter_no_location(self) -> Self: + """ + Cleans the provided DataFrames by removing rows without location data. Gets all pids + that have at least one row with missing location data, and removes all rows with + these pids. pids are geneerated from two sources: + - legs_geo with missing start_loc or end_loc + - individuals with missing hzone + + Parameters + ---------- + individuals : pd.DataFrame + DataFrame containing individual data. + activities : pd.DataFrame + DataFrame containing activity data. + legs : pd.DataFrame + DataFrame containing legs data. + legs_geo : pd.DataFrame + DataFrame containing legs with geographic data. + households : pd.DataFrame + DataFrame containing household data. + + Returns + ------- + tuple + A tuple containing the cleaned DataFrames + (individuals_cleaned, households_cleaned, activities_cleaned, legs_cleaned, legs_geo_cleaned). + """ + # Identify rows in legs_geo where start_loc or end_loc are null + invalid_rows_legs_geo = self.legs_geo[ + self.legs_geo["start_loc"].isnull() | self.legs_geo["end_loc"].isnull() + ] + + # Extract the pid values associated with these rows + invalid_pids_legs_geo = invalid_rows_legs_geo["pid"].unique() + + # Identify rows in individuals where hzone is null + invalid_rows_individuals = self.individuals[self.individuals["hzone"].isnull()] + + # Extract the pid values associated with these rows + invalid_pids_individuals = invalid_rows_individuals["pid"].unique() + + # Combine the invalid pid values from both sources + invalid_pids = set(invalid_pids_legs_geo).union(set(invalid_pids_individuals)) + + # Remove rows with these pids from all DataFrames + individuals_cleaned = self.individuals[ + ~self.individuals["pid"].isin(invalid_pids) + ] + activities_cleaned = self.activities[~self.activities["pid"].isin(invalid_pids)] + legs_cleaned = self.legs[~self.legs["pid"].isin(invalid_pids)] + legs_geo_cleaned = self.legs_geo[~self.legs_geo["pid"].isin(invalid_pids)] + + # Extract remaining hid values from individuals_cleaned + remaining_hids = individuals_cleaned["hid"].unique() + + # Filter households_cleaned to only include rows with hid values in remaining_hids + households_cleaned = self.households[ + self.households["hid"].isin(remaining_hids) + ] + + return Population( + individuals=individuals_cleaned, + households=households_cleaned, + activities=activities_cleaned, + legs=legs_cleaned, + legs_geo=legs_geo_cleaned, + ) def add_home_location_to_individuals( From 447496e894215eb83297637df2643a7d97855508 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Sat, 30 Nov 2024 13:11:16 +0000 Subject: [PATCH 32/56] Rename method --- scripts/0_preprocess_inputs.py | 2 +- scripts/3.1_assign_primary_feasible_zones.py | 2 +- scripts/3.2.1_assign_primary_zone_edu.py | 2 +- scripts/3.2.2_assign_primary_zone_work.py | 2 +- scripts/3.2.3_assign_secondary_zone.py | 2 +- scripts/3.3_assign_facility_all.py | 2 +- src/acbm/config.py | 6 +++--- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/scripts/0_preprocess_inputs.py b/scripts/0_preprocess_inputs.py index 994b2eb..267de49 100644 --- a/scripts/0_preprocess_inputs.py +++ b/scripts/0_preprocess_inputs.py @@ -18,7 +18,7 @@ def main(config_file): logger.info("1. Reading in the boundary layer for the whole of England") - boundaries = config.get_boundaries() + boundaries = config.get_study_area_boundaries() ## --- Dissolve boundaries if resolution is MSOA diff --git a/scripts/3.1_assign_primary_feasible_zones.py b/scripts/3.1_assign_primary_feasible_zones.py index f45d13c..b61fa23 100644 --- a/scripts/3.1_assign_primary_feasible_zones.py +++ b/scripts/3.1_assign_primary_feasible_zones.py @@ -37,7 +37,7 @@ def main(config_file): # --- Study area boundaries logger.info("Loading study area boundaries") - boundaries = config.get_boundaries() + boundaries = config.get_study_area_boundaries() logger.info(f"Study area boundaries loaded and reprojected to {config.output_crs}") # --- Assign activity home locations to boundaries zoning system diff --git a/scripts/3.2.1_assign_primary_zone_edu.py b/scripts/3.2.1_assign_primary_zone_edu.py index f543edb..183a46f 100644 --- a/scripts/3.2.1_assign_primary_zone_edu.py +++ b/scripts/3.2.1_assign_primary_zone_edu.py @@ -33,7 +33,7 @@ def main(config_file): # --- boundaries logger.info("Loading study area boundaries") - boundaries = config.get_boundaries() + boundaries = config.get_study_area_boundaries() logger.info(f"Study area boundaries loaded and reprojected to {config.output_crs}") # --- osm POI data diff --git a/scripts/3.2.2_assign_primary_zone_work.py b/scripts/3.2.2_assign_primary_zone_work.py index eb66876..ede5a1d 100644 --- a/scripts/3.2.2_assign_primary_zone_work.py +++ b/scripts/3.2.2_assign_primary_zone_work.py @@ -29,7 +29,7 @@ def main(config_file): # --- boundaries logger.info("Loading study area boundaries") - boundaries = config.get_boundaries() + boundaries = config.get_study_area_boundaries() logger.info(f"Study area boundaries loaded and reprojected to {config.output_crs}") # osm POI data diff --git a/scripts/3.2.3_assign_secondary_zone.py b/scripts/3.2.3_assign_secondary_zone.py index ac0a95b..a87ea10 100644 --- a/scripts/3.2.3_assign_secondary_zone.py +++ b/scripts/3.2.3_assign_secondary_zone.py @@ -48,7 +48,7 @@ def main(config_file): # logger.info("Preprocessing: Adding OA21CD to the data") logger.info("Loading study area boundaries") - boundaries = config.get_boundaries() + boundaries = config.get_study_area_boundaries() logger.info(f"Study area boundaries loaded and reprojected to {config.output_crs}") # --- Assign activity home locations to boundaries zoning system diff --git a/scripts/3.3_assign_facility_all.py b/scripts/3.3_assign_facility_all.py index 813b00f..b46138c 100644 --- a/scripts/3.3_assign_facility_all.py +++ b/scripts/3.3_assign_facility_all.py @@ -44,7 +44,7 @@ def main(config_file): # --- Load data: Boundaries logger.info("Loading study area boundaries") - boundaries = config.get_boundaries() + boundaries = config.get_study_area_boundaries() logger.info(f"Study area boundaries loaded and reprojected to {config.output_crs}") # --- Prepprocess: add zone column to POI data diff --git a/src/acbm/config.py b/src/acbm/config.py index 610dc45..eef187a 100644 --- a/src/acbm/config.py +++ b/src/acbm/config.py @@ -361,9 +361,9 @@ def get_logger(self, name: str, filename: str) -> Logger: self.logs_path, ) - def get_boundaries(self) -> gpd.GeoDataFrame: - boundaries = gpd.read_file(self.study_areas_filepath) - return boundaries.to_crs(epsg=self.output_crs) + def get_study_area_boundaries(self) -> gpd.GeoDataFrame: + study_area = gpd.read_file(self.study_area_filepath) + return study_area.to_crs(epsg=self.output_crs) def load_config(filepath: str | Path) -> Config: From dfaaaabb5847c55fa025ecf181d51bb5c335f1fa Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Sat, 30 Nov 2024 13:11:45 +0000 Subject: [PATCH 33/56] Rename field --- scripts/0_preprocess_inputs.py | 4 ++-- src/acbm/config.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/0_preprocess_inputs.py b/scripts/0_preprocess_inputs.py index 267de49..ebde65f 100644 --- a/scripts/0_preprocess_inputs.py +++ b/scripts/0_preprocess_inputs.py @@ -51,9 +51,9 @@ def main(config_file): boundaries_filtered = boundaries[boundaries["MSOA21CD"].isin(msoa21cd_values)] ## Save the output as parquet - logger.info(f"4. Saving the boundaries to {config.study_areas_filepath} path") + logger.info(f"4. Saving the boundaries to {config.study_area_filepath} path") boundaries_filtered.to_file( - config.study_areas_filepath, + config.study_area_filepath, driver="GeoJSON", ) diff --git a/src/acbm/config.py b/src/acbm/config.py index eef187a..5a6f41b 100644 --- a/src/acbm/config.py +++ b/src/acbm/config.py @@ -93,7 +93,7 @@ def make_dirs(self): os.makedirs(self.assigning_plots_path, exist_ok=True) os.makedirs(self.validation_plots_path, exist_ok=True) os.makedirs(self.activities_per_zone.parent, exist_ok=True) - os.makedirs(self.study_areas_filepath.parent, exist_ok=True) + os.makedirs(self.study_area_filepath.parent, exist_ok=True) os.makedirs(self.interim_path, exist_ok=True) os.makedirs(self.travel_times_estimates_filepath.parent, exist_ok=True) os.makedirs(self.spc_combined_filepath.parent, exist_ok=True) @@ -147,7 +147,7 @@ def spc_combined_filepath(self) -> Path: return self.interim_path / f"{self.region}_people_hh.parquet" @property - def study_areas_filepath(self) -> Path: + def study_area_filepath(self) -> Path: """Returns boundaries path.""" return ( self.output_path / "boundaries" / "study_area_zones.geojson" From ec45d94ec2ef2e006f2996a143942ae9c223e6bc Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Sat, 30 Nov 2024 13:12:01 +0000 Subject: [PATCH 34/56] Remove todo --- src/acbm/config.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/acbm/config.py b/src/acbm/config.py index 5a6f41b..07f3acb 100644 --- a/src/acbm/config.py +++ b/src/acbm/config.py @@ -339,7 +339,6 @@ def destination_zone_id(cls, zone_id: str) -> str: def boundary_geography(self) -> str: return self.parameters.boundary_geography - # TODO: consider moving to method in config def init_rng(self): try: np.random.seed(self.seed) From 009d5ebeab7e8910e1719ebaf0b43ee6e6d6191b Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Sat, 30 Nov 2024 13:23:59 +0000 Subject: [PATCH 35/56] Add python script for pipeline --- scripts/run_pipeline.py | 44 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100755 scripts/run_pipeline.py diff --git a/scripts/run_pipeline.py b/scripts/run_pipeline.py new file mode 100755 index 0000000..4b0f20f --- /dev/null +++ b/scripts/run_pipeline.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python + +import subprocess + +import click + + +def run_command(script_path, config_file): + command = ["python", script_path, "--config_file", config_file] + try: + subprocess.run(command, capture_output=False, text=True, check=True) + except subprocess.CalledProcessError as e: + print(f"Error: {e}") + print(f"Return code: {e.returncode}") + print(f"Output: {e.output}") + exit(1) + + +@click.command() +@click.option( + "--config_file", help="Filepath relative to repo root of config", type=str +) +@click.option( + "--skip-preprocess", help="Skip preprocess script", is_flag=True, default=False +) +@click.option("--skip-osmox", help="Skip osmox script", is_flag=True, default=False) +def main(config_file, skip_preprocess, skip_osmox): + if not skip_preprocess: + run_command("scripts/0_preprocess_inputs.py", config_file) + if not skip_osmox: + run_command("scripts/0.1_run_osmox.py", config_file) + run_command("scripts/1_prep_synthpop.py", config_file) + run_command("scripts/2_match_households_and_individuals.py", config_file) + run_command("scripts/3.1_assign_primary_feasible_zones.py", config_file) + run_command("scripts/3.2.1_assign_primary_zone_edu.py", config_file) + run_command("scripts/3.2.2_assign_primary_zone_work.py", config_file) + run_command("scripts/3.2.3_assign_secondary_zone.py", config_file) + run_command("scripts/3.3_assign_facility_all.py", config_file) + run_command("scripts/4_validation.py", config_file) + run_command("scripts/5_acbm_to_matsim_xml.py", config_file) + + +if __name__ == "__main__": + main() From 6d8ae6c95ce2f1dd938a1a314a76fce0a0db5338 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Sat, 30 Nov 2024 14:32:12 +0000 Subject: [PATCH 36/56] Fix preprocessing boundaries --- scripts/0_preprocess_inputs.py | 2 +- src/acbm/config.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/0_preprocess_inputs.py b/scripts/0_preprocess_inputs.py index ebde65f..50d2024 100644 --- a/scripts/0_preprocess_inputs.py +++ b/scripts/0_preprocess_inputs.py @@ -18,7 +18,7 @@ def main(config_file): logger.info("1. Reading in the boundary layer for the whole of England") - boundaries = config.get_study_area_boundaries() + boundaries = config.get_boundaries() ## --- Dissolve boundaries if resolution is MSOA diff --git a/src/acbm/config.py b/src/acbm/config.py index 07f3acb..c10eb0c 100644 --- a/src/acbm/config.py +++ b/src/acbm/config.py @@ -360,6 +360,10 @@ def get_logger(self, name: str, filename: str) -> Logger: self.logs_path, ) + def get_boundaries(self) -> gpd.GeoDataFrame: + boundaries = gpd.read_file(self.boundaries_filepath) + return boundaries.to_crs(epsg=self.output_crs) + def get_study_area_boundaries(self) -> gpd.GeoDataFrame: study_area = gpd.read_file(self.study_area_filepath) return study_area.to_crs(epsg=self.output_crs) From 96f8aca90bb84913adc992bbe42038cafa03ebc6 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Tue, 3 Dec 2024 13:53:42 +0000 Subject: [PATCH 37/56] Update CRS in osmox script --- scripts/0.1_run_osmox.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/0.1_run_osmox.py b/scripts/0.1_run_osmox.py index 0fb7830..bad7790 100644 --- a/scripts/0.1_run_osmox.py +++ b/scripts/0.1_run_osmox.py @@ -24,7 +24,9 @@ def main(config_file): "-f", "geoparquet", "-crs", - f"epsg:{config.output_crs}", + # TODO: check if this can be specified as the output CRS + # See: https://github.com/arup-group/osmox/blob/82602d411374ebc9fd33443f8f7c9816b63715ec/docs/osmox_run.md#L35-L38 + "epsg:27700", "-l", ], check=False, From eb468636178b77b71297eedcb6c07af7f2237068 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Tue, 3 Dec 2024 20:43:55 +0000 Subject: [PATCH 38/56] Add and revise CLI flags * Add flags for matching and assigning only * Revise config file flag to --config-file --- scripts/run_pipeline.py | 42 +++++++++++++++++++++++++++-------------- scripts/run_pipeline.sh | 22 ++++++++++----------- src/acbm/cli.py | 2 +- 3 files changed, 40 insertions(+), 26 deletions(-) diff --git a/scripts/run_pipeline.py b/scripts/run_pipeline.py index 4b0f20f..923aca6 100755 --- a/scripts/run_pipeline.py +++ b/scripts/run_pipeline.py @@ -6,7 +6,7 @@ def run_command(script_path, config_file): - command = ["python", script_path, "--config_file", config_file] + command = ["python", script_path, "--config-file", config_file] try: subprocess.run(command, capture_output=False, text=True, check=True) except subprocess.CalledProcessError as e: @@ -18,26 +18,40 @@ def run_command(script_path, config_file): @click.command() @click.option( - "--config_file", help="Filepath relative to repo root of config", type=str + "--config-file", help="Filepath relative to repo root of config", type=str ) @click.option( "--skip-preprocess", help="Skip preprocess script", is_flag=True, default=False ) @click.option("--skip-osmox", help="Skip osmox script", is_flag=True, default=False) -def main(config_file, skip_preprocess, skip_osmox): - if not skip_preprocess: +@click.option( + "--matching-only", + help="Only run the matching part of AcBM", + is_flag=True, + default=False, +) +@click.option( + "--assigning-only", + help="Only run the assigning part of AcBM", + is_flag=True, + default=False, +) +def main(config_file, skip_preprocess, skip_osmox, matching_only, assigning_only): + if not skip_preprocess and not assigning_only: run_command("scripts/0_preprocess_inputs.py", config_file) - if not skip_osmox: + if not skip_osmox and not matching_only and not assigning_only: run_command("scripts/0.1_run_osmox.py", config_file) - run_command("scripts/1_prep_synthpop.py", config_file) - run_command("scripts/2_match_households_and_individuals.py", config_file) - run_command("scripts/3.1_assign_primary_feasible_zones.py", config_file) - run_command("scripts/3.2.1_assign_primary_zone_edu.py", config_file) - run_command("scripts/3.2.2_assign_primary_zone_work.py", config_file) - run_command("scripts/3.2.3_assign_secondary_zone.py", config_file) - run_command("scripts/3.3_assign_facility_all.py", config_file) - run_command("scripts/4_validation.py", config_file) - run_command("scripts/5_acbm_to_matsim_xml.py", config_file) + if not assigning_only: + run_command("scripts/1_prep_synthpop.py", config_file) + run_command("scripts/2_match_households_and_individuals.py", config_file) + if not matching_only or assigning_only: + run_command("scripts/3.1_assign_primary_feasible_zones.py", config_file) + run_command("scripts/3.2.1_assign_primary_zone_edu.py", config_file) + run_command("scripts/3.2.2_assign_primary_zone_work.py", config_file) + run_command("scripts/3.2.3_assign_secondary_zone.py", config_file) + run_command("scripts/3.3_assign_facility_all.py", config_file) + run_command("scripts/4_validation.py", config_file) + run_command("scripts/5_acbm_to_matsim_xml.py", config_file) if __name__ == "__main__": diff --git a/scripts/run_pipeline.sh b/scripts/run_pipeline.sh index 025ed8c..0554b51 100755 --- a/scripts/run_pipeline.sh +++ b/scripts/run_pipeline.sh @@ -2,14 +2,14 @@ set -e -python scripts/0_preprocess_inputs.py --config_file $1 -python scripts/0.1_run_osmox.py --config_file $1 -python scripts/1_prep_synthpop.py --config_file $1 -python scripts/2_match_households_and_individuals.py --config_file $1 -python scripts/3.1_assign_primary_feasible_zones.py --config_file $1 -python scripts/3.2.1_assign_primary_zone_edu.py --config_file $1 -python scripts/3.2.2_assign_primary_zone_work.py --config_file $1 -python scripts/3.2.3_assign_secondary_zone.py --config_file $1 -python scripts/3.3_assign_facility_all.py --config_file $1 -python scripts/4_validation.py --config_file $1 -python scripts/5_acbm_to_matsim_xml.py --config_file $1 +python scripts/0_preprocess_inputs.py --config-file $1 +python scripts/0.1_run_osmox.py --config-file $1 +python scripts/1_prep_synthpop.py --config-file $1 +python scripts/2_match_households_and_individuals.py --config-file $1 +python scripts/3.1_assign_primary_feasible_zones.py --config-file $1 +python scripts/3.2.1_assign_primary_zone_edu.py --config-file $1 +python scripts/3.2.2_assign_primary_zone_work.py --config-file $1 +python scripts/3.2.3_assign_secondary_zone.py --config-file $1 +python scripts/3.3_assign_facility_all.py --config-file $1 +python scripts/4_validation.py --config-file $1 +python scripts/5_acbm_to_matsim_xml.py --config-file $1 diff --git a/src/acbm/cli.py b/src/acbm/cli.py index 053cb0e..6fb2d6e 100644 --- a/src/acbm/cli.py +++ b/src/acbm/cli.py @@ -7,7 +7,7 @@ def acbm_cli(c: Callable): @click.command() @click.option( - "--config_file", prompt="Filepath relative to repo root of config", type=str + "--config-file", prompt="Filepath relative to repo root of config", type=str ) def main(config_file): pd.options.mode.copy_on_write = True From 2807291fe7d110fddbfe6da4e5247ae67a8b45ac Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Mon, 9 Dec 2024 16:00:12 +0000 Subject: [PATCH 39/56] Additional logging and tqdm for assigning work zones --- src/acbm/assigning/select_zone_work.py | 96 +++++++++++++++----------- 1 file changed, 57 insertions(+), 39 deletions(-) diff --git a/src/acbm/assigning/select_zone_work.py b/src/acbm/assigning/select_zone_work.py index ff9257a..5005842 100644 --- a/src/acbm/assigning/select_zone_work.py +++ b/src/acbm/assigning/select_zone_work.py @@ -5,6 +5,7 @@ import numpy as np import pandas as pd import pulp +from tqdm import tqdm logger = logging.getLogger("assigning_primary_zone") @@ -429,7 +430,9 @@ def select_work_zone_optimization( max_dev = pulp.LpVariable("max_dev", 0, None, pulp.LpContinuous) # Create binary variables for each person, origin, and destination - for person_id, origins in self.activities_to_assign.items(): + logger.info("Adding people to assignment problem") + for person_id, origins in tqdm(self.activities_to_assign.items()): + # logger.info(f"person id: {person_id}, origins: {origins}") for origin_id, feasible_zones in origins.items(): person_vars = [] # Select up to 10 zones for each person based on the actual flows (to limit number of variables) @@ -476,49 +479,64 @@ def select_work_zone_optimization( if person_vars: prob += pulp.lpSum(person_vars) == 1 - # Calculate assigned percentages and deviation for each origin-destination pair - for (from_zone, to_zone), percentage in self.percentages.items(): - # Create a variable for the absolute deviation (with lower bound of 0) - abs_dev = pulp.LpVariable( - f"abs_dev_{from_zone}_{to_zone}", 0, None, pulp.LpContinuous - ) - deviation_vars[(from_zone, to_zone)] = abs_dev - # Calculate the assigned flow for the origin-destination pair - assigned_flow = pulp.lpSum( - assignment_vars.get((person_id, from_zone, to_zone), 0) - for person_id, origins in self.activities_to_assign.items() - if (person_id, from_zone, to_zone) in assignment_vars - ) - # Calculate the assigned percentage based on the total flows from each origin zone - if from_zone in self.total_flows: - total_people = self.total_flows[from_zone] - assigned_percentage = assigned_flow / total_people - else: - assigned_percentage = 0 - logger.warning(f"Warning: Origin {from_zone} not found in total_flows.") - - if use_percentages: - # to satisfy both constraints, abs_dev will be a positive number (it is the larger of the two) - prob += assigned_percentage - percentage <= abs_dev - prob += percentage - assigned_percentage <= abs_dev - else: - prob += ( - assigned_flow - self.actual_flows[(from_zone, to_zone)] <= abs_dev + if weight_max_dev > 0.0: + logger.info("Added max deviations to assignment problem") + # Calculate assigned percentages and deviation for each origin-destination pair + for (from_zone, to_zone), percentage in tqdm(self.percentages.items()): + # Create a variable for the absolute deviation (with lower bound of 0) + abs_dev = pulp.LpVariable( + f"abs_dev_{from_zone}_{to_zone}", 0, None, pulp.LpContinuous ) - prob += ( - self.actual_flows[(from_zone, to_zone)] - assigned_flow <= abs_dev + deviation_vars[(from_zone, to_zone)] = abs_dev + # Calculate the assigned flow for the origin-destination pair + assigned_flow = pulp.lpSum( + assignment_vars.get((person_id, from_zone, to_zone), 0) + for person_id, origins in self.activities_to_assign.items() + if (person_id, from_zone, to_zone) in assignment_vars ) + # Calculate the assigned percentage based on the total flows from each origin zone + if from_zone in self.total_flows: + total_people = self.total_flows[from_zone] + assigned_percentage = assigned_flow / total_people + else: + assigned_percentage = 0 + logger.warning( + f"Warning: Origin {from_zone} not found in total_flows." + ) - # Update the maximum deviation variable: it is the maximum of all deviations - prob += max_dev >= abs_dev + if use_percentages: + # to satisfy both constraints, abs_dev will be a positive number (it is the larger of the two) + prob += assigned_percentage - percentage <= abs_dev + prob += percentage - assigned_percentage <= abs_dev + else: + prob += ( + assigned_flow - self.actual_flows[(from_zone, to_zone)] + <= abs_dev + ) + prob += ( + self.actual_flows[(from_zone, to_zone)] - assigned_flow + <= abs_dev + ) - # Weighted objective function - prob += ( - weight_max_dev * max_dev - + weight_total_dev * pulp.lpSum(deviation_vars.values()), - "WeightedObjective", - ) + # Update the maximum deviation variable: it is the maximum of all deviations + prob += max_dev >= abs_dev + + logger.info("Adding weighted objective to assignment problem") + # Weighted objective function + prob += ( + weight_max_dev * max_dev + + weight_total_dev * pulp.lpSum(deviation_vars.values()), + "WeightedObjective", + ) + else: + logger.info("Adding weighted objective to assignment problem") + # Weighted objective function + prob += ( + weight_total_dev * pulp.lpSum(deviation_vars.values()), + "WeightedObjective", + ) + logger.info("Solving assignment problem") prob.solve() if pulp.LpStatus[prob.status] != "Optimal": From 248925adf2828d02e1d9ed8747391d33039e047e Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Tue, 10 Dec 2024 11:36:41 +0000 Subject: [PATCH 40/56] Add tqdm, change logging to debug --- src/acbm/assigning/select_facility.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/acbm/assigning/select_facility.py b/src/acbm/assigning/select_facility.py index 42bfa50..3aafa42 100644 --- a/src/acbm/assigning/select_facility.py +++ b/src/acbm/assigning/select_facility.py @@ -5,6 +5,7 @@ import numpy as np import pandas as pd from shapely import Point +from tqdm import tqdm logger = logging.getLogger("assigning_facility_locations") @@ -67,7 +68,7 @@ def _select_facility( # Extract the destination zone from the input row destination_zone = row[row_destination_zone_col] if pd.isna(destination_zone): - logger.info(f"Activity {row.name}: Destination zone is NA") + logger.debug(f"Activity {row.name}: Destination zone is NA") # return {"id": np.nan, "geometry": np.nan} # TODO: check this replacement is correct return {row[unique_id_col]: (np.nan, np.nan)} @@ -82,13 +83,13 @@ def _select_facility( lambda x: row[row_activity_type_col] in x ) ] - logger.info( + logger.debug( f"Activity {row.name}: Found {len(facilities_valid)} matching facilities in zone {destination_zone}" ) # If no specific facilities found in the initial zone, and neighboring zones are provided, search in neighboring zones if facilities_valid.empty and neighboring_zones: - logger.info( + logger.debug( f"Activity {row.name}: No {row[row_activity_type_col]} facilities in {destination_zone}. Expanding search to neighboring zones" ) neighbors = neighboring_zones.get(destination_zone, []) @@ -100,13 +101,13 @@ def _select_facility( lambda x: row[row_activity_type_col] in x ) ] - logger.info( + logger.debug( f"Activity {row.name}: Found {len(facilities_valid)} matching facilities in neighboring zones" ) # If no specific facilities found and a fallback type is provided, attempt to find facilities matching the fallback type if facilities_valid.empty and fallback_type: - logger.info( + logger.debug( f"Activity {row.name}: No {row[row_activity_type_col]} facilities in zone {destination_zone} or neighboring zones, trying with {fallback_type}" ) # This should consider both the initial zone and neighboring zones if the previous step expanded the search @@ -115,20 +116,20 @@ def _select_facility( lambda x: fallback_type in x ) ] - logger.info( + logger.debug( f"Activity {row.name}: Found {len(facilities_valid)} matching facilities with type: {fallback_type}" ) # if no specific facilities found and fallback_to_random is True, take all facilities in the zone if facilities_valid.empty and fallback_to_random: - logger.info( + logger.debug( f"Activity {row.name}: No facilities in zone {destination_zone} with {gdf_facility_type_col} '{fallback_type or row[row_activity_type_col]}'. Sampling from all facilities in the zone" ) facilities_valid = facilities_in_zone # If no facilities found after all attempts, log the failure and return NaN if facilities_valid.empty: - logger.info( + logger.debug( f"Activity {row.name}: No facilities in zone {destination_zone} with {gdf_facility_type_col} '{fallback_type or row[row_activity_type_col]}'" ) return {row[unique_id_col]: (np.nan, np.nan)} @@ -147,11 +148,11 @@ def _select_facility( ) facilities_valid = facilities_valid.dropna(subset=["floor_area"]) facility = facilities_valid.sample(1, weights=facilities_valid["floor_area"]) - logger.info(f"Activity {row.name}: Sampled facility based on floor area)") + logger.debug(f"Activity {row.name}: Sampled facility based on floor area)") else: # Otherwise, randomly sample one facility from the valid facilities facility = facilities_valid.sample(1) - logger.info(f"Activity {row.name}: Sampled facility randomly") + logger.debug(f"Activity {row.name}: Sampled facility randomly") # Return the id and geometry of the selected facility return { @@ -205,7 +206,7 @@ def select_facility( selected_facilities = {} # Select a facility for each row in the DataFrame - for _, row in df.iterrows(): + for _, row in tqdm(df.iterrows(), total=df.shape[0]): selected_facility = _select_facility( row=row, unique_id_col=unique_id_col, From 8226ccd9b97561d0c8355159525fdace87f4c126 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Wed, 11 Dec 2024 17:31:19 +0000 Subject: [PATCH 41/56] Add multiprocessing to parallelize select_facility --- src/acbm/assigning/select_facility.py | 56 +++++++++++++++------------ 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/src/acbm/assigning/select_facility.py b/src/acbm/assigning/select_facility.py index 3aafa42..74f9d17 100644 --- a/src/acbm/assigning/select_facility.py +++ b/src/acbm/assigning/select_facility.py @@ -1,4 +1,6 @@ import logging +import multiprocessing +from multiprocessing import Pool from typing import Optional, Tuple import geopandas as gpd @@ -64,7 +66,7 @@ def _select_facility( {unique_id_col: (np.nan, np.nan)} if no suitable facility is found. """ # ----- Step 1. Find valid facilities in the destination zone - + pd.options.mode.copy_on_write = True # Extract the destination zone from the input row destination_zone = row[row_destination_zone_col] if pd.isna(destination_zone): @@ -202,29 +204,35 @@ def select_facility( dict[str, Tuple[str, Point ] | Tuple[float, float]]: Unique ID column as keys with selected facility ID and facility ID's geometry, or (np.nan, np.nan) """ - # Initialize a dictionary to store the selected facilities - selected_facilities = {} - - # Select a facility for each row in the DataFrame - for _, row in tqdm(df.iterrows(), total=df.shape[0]): - selected_facility = _select_facility( - row=row, - unique_id_col=unique_id_col, - facilities_gdf=facilities_gdf, - row_destination_zone_col=row_destination_zone_col, - row_activity_type_col=row_activity_type_col, - gdf_facility_zone_col=gdf_facility_zone_col, - gdf_facility_type_col=gdf_facility_type_col, - gdf_sample_col=gdf_sample_col, - neighboring_zones=neighboring_zones, - fallback_type=fallback_type, - fallback_to_random=fallback_to_random, - ) - - # Update the dictionary with the selected facility - selected_facilities.update(selected_facility) - - return selected_facilities + # TODO: update this to be configurable + n_threads = multiprocessing.cpu_count() + with Pool(n_threads) as p: + # Set to a large enough chunk size so that each thread + # has a sufficiently large amount of processing to do. + chunk_size = 16_000 + d = {} + for start in tqdm(range(0, df.shape[0], chunk_size)): + chunk = df.iloc[start : start + chunk_size, :] + args = [ + ( + row, + unique_id_col, + facilities_gdf, + row_destination_zone_col, + gdf_facility_zone_col, + row_activity_type_col, + gdf_facility_type_col, + fallback_type, + fallback_to_random, + neighboring_zones, + gdf_sample_col, + ) + for _, row in chunk.iterrows() + ] + results = p.starmap(_select_facility, args) + for result in results: + d.update(result) + return d def map_activity_locations( From 4a3bfedf15241604e3075a855206906cddc3e14b Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Thu, 12 Dec 2024 09:02:20 +0000 Subject: [PATCH 42/56] Update Pool argument and comment --- src/acbm/assigning/select_facility.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/acbm/assigning/select_facility.py b/src/acbm/assigning/select_facility.py index 74f9d17..0429a76 100644 --- a/src/acbm/assigning/select_facility.py +++ b/src/acbm/assigning/select_facility.py @@ -1,5 +1,4 @@ import logging -import multiprocessing from multiprocessing import Pool from typing import Optional, Tuple @@ -204,10 +203,9 @@ def select_facility( dict[str, Tuple[str, Point ] | Tuple[float, float]]: Unique ID column as keys with selected facility ID and facility ID's geometry, or (np.nan, np.nan) """ - # TODO: update this to be configurable - n_threads = multiprocessing.cpu_count() - with Pool(n_threads) as p: - # Set to a large enough chunk size so that each thread + # TODO: update this to be configurable, `None` is os.process_cpu_count() + with Pool(None) as p: + # Set to a large enough chunk size so that each process # has a sufficiently large amount of processing to do. chunk_size = 16_000 d = {} From fb3583984d49c310a1888d202e93a5b2a6adfa01 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Thu, 12 Dec 2024 09:09:13 +0000 Subject: [PATCH 43/56] Example config for Greater London --- config/greater-london.toml | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 config/greater-london.toml diff --git a/config/greater-london.toml b/config/greater-london.toml new file mode 100644 index 0000000..f6b8ba5 --- /dev/null +++ b/config/greater-london.toml @@ -0,0 +1,33 @@ +[parameters] +seed = 0 +region = "greater-london" +zone_id = "MSOA21CD" +travel_times = false +boundary_geography = "MSOA" +nts_years = [2019, 2021, 2022] +nts_regions = ["London"] +nts_day_of_week = 3 +output_crs = 4326 + +[work_assignment] +use_percentages = true +weight_max_dev = 0.0 +weight_total_dev = 1.0 +max_zones = 4 +commute_level = "MSOA" + +[matching] +required_columns = ["number_adults", "number_children"] +optional_columns = [ + "number_cars", + "num_pension_age", + "rural_urban_2_categories", + "employment_status", + "tenure_status", +] +n_matches = 10 +chunk_size = 50000 + +[postprocessing] +pam_jitter = 30 +pam_min_duration = 10 From e22a0da3b47ddae203299464e44b75f2b3584513 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Fri, 13 Dec 2024 09:50:42 +0000 Subject: [PATCH 44/56] Example config for Leeds --- config/leeds.toml | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 config/leeds.toml diff --git a/config/leeds.toml b/config/leeds.toml new file mode 100644 index 0000000..3e60054 --- /dev/null +++ b/config/leeds.toml @@ -0,0 +1,42 @@ +[parameters] +seed = 0 +region = "leeds" +zone_id = "OA21CD" +travel_times = false +boundary_geography = "OA" +nts_years = [2019, 2021, 2022] +nts_regions = [ + 'Yorkshire and the Humber', + 'North West', + 'North East', + 'East Midlands', + 'West Midlands', + 'East of England', + 'South East', + 'South West', +] +nts_day_of_week = 3 +output_crs = 4326 + +[work_assignment] +use_percentages = false +weight_max_dev = 0.0 +weight_total_dev = 1.0 +max_zones = 4 +commute_level = "OA" + +[matching] +required_columns = ["number_adults", "number_children"] +optional_columns = [ + "number_cars", + "num_pension_age", + "rural_urban_2_categories", + "employment_status", + "tenure_status", +] +n_matches = 10 +chunk_size = 50000 + +[postprocessing] +pam_jitter = 30 +pam_min_duration = 10 From 1fae69afa6b346fe9b2fc1dfaf3a7dcb3e9f964e Mon Sep 17 00:00:00 2001 From: BZ-BowenZhang Date: Mon, 16 Dec 2024 01:45:12 +0000 Subject: [PATCH 45/56] Add validation notebook for between AcBM and Cencus --- notebooks/Validation_AcBM_with_Cencus.ipynb | 4406 +++++++++++++++++++ 1 file changed, 4406 insertions(+) create mode 100644 notebooks/Validation_AcBM_with_Cencus.ipynb diff --git a/notebooks/Validation_AcBM_with_Cencus.ipynb b/notebooks/Validation_AcBM_with_Cencus.ipynb new file mode 100644 index 0000000..2002cbb --- /dev/null +++ b/notebooks/Validation_AcBM_with_Cencus.ipynb @@ -0,0 +1,4406 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import geopandas as gpd\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "from shapely.geometry import Point\n", + "from uatk_spc.builder import Builder\n", + "from uatk_spc.reader import Reader" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Input Data Paths" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [], + "source": [ + "geo_boundaries_path=\"../data/external/boundaries/oa_leeds.geojson\"\n", + "acbm_data_path=\"../data/outputs/36c777d445/legs_with_locations.parquet\"\n", + "Cencus21_OA_data_path=\"../data/external/cencus/ODWP01EW_OA.csv\"\n", + "Cencus21_MSOA_data_path=\"../data/external/cencus/ODWP01EW_MSOA.csv\"\n", + "#MSOA_boundaries_path=\"../data/external/boundaries/MSOA_DEC_2021_EW_NC_v3_2768211653661228621.geojson\"" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 89, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhUAAAGdCAYAAACl74FWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9d5xkeV3v/T6pcq7OuWd6cs675LA66KJwWRUvXi8XwevqirD7KIiP4qNyhatXWZFFMC4GJHgRgUVg2YUFdmcn5xw65+7Kueqc8/xxumu6uqu7qzrM9Azn/XrNa7erTp06lc75/r7h8xF0XdcxMTExMTExMVkm4t0+ABMTExMTE5P7AzOoMDExMTExMVkRzKDCxMTExMTEZEUwgwoTExMTExOTFcEMKkxMTExMTExWBDOoMDExMTExMVkRzKDCxMTExMTEZEUwgwoTExMTExOTFUG+2wewltE0jaGhIdxuN4Ig3O3DMTExMTExuePouk48HqepqQlRXDgXYQYVCzA0NERra+vdPgwTExMTE5O7Tn9/Py0tLQtuYwYVC+B2uwHjjfR4PHf5aExMTExMTO48sViM1tbW4jVxIcygYgGmSx4ej8cMKkxMTExMfqSppA3AbNQ0MTExMTExWRHMoMLExMTExMRkRTCDChMTExMTE5MVwQwqTExMTExMTFYEM6gwMTExMTExWRHMoMLExMTExMRkRTCDChMTExMTE5MVwQwqTExMTExMTFYEM6gwMTExMTExWRHMoMLExMTExMRkRTCDChMTExMTE5MVYVlBxcc+9jEEQeD9739/8bbXve51CIJQ8u/RRx8teVxfXx8PP/wwDoeDuro6fuu3fotCoVCyzfe+9z327t2L1Wqlq6uLp59+es7zP/XUU3R0dGCz2Th06BDHjh0ruT+TyfDYY48RDAZxuVw88sgjjI6OLuclm5iYmJiYmMzDkoOK48eP85nPfIadO3fOue+Xf/mXGR4eLv77kz/5k+J9qqry8MMPk8vleOmll/jsZz/L008/zYc//OHiNt3d3Tz88MO8/vWv58yZM7z//e/nPe95D9/61reK23zhC1/giSee4Pd///c5deoUu3bt4vDhw4yNjRW3efzxx/na177Gl770JV544QWGhoZ429vettSXbGJiYmJiYrIQ+hKIx+P6hg0b9GeffVZ/7Wtfq7/vfe8r3jf779l84xvf0EVR1EdGRoq3/dVf/ZXu8Xj0bDar67quf+ADH9C3bdtW8ri3v/3t+uHDh4t/Hzx4UH/ssceKf6uqqjc1Nekf/ehHdV3X9UgkoiuKon/pS18qbnP58mUd0I8cOVLR64xGozqgR6PRirY3MTExMbk/CSez+ovXx+/2YdwVqrkWLilT8dhjj/Hwww/z0EMPlb3/X/7lX6ipqWH79u186EMfIpVKFe87cuQIO3bsoL6+vnjb4cOHicViXLx4sbjN7H0fPnyYI0eOAJDL5Th58mTJNqIo8tBDDxW3OXnyJPl8vmSbzZs309bWVtzGxMTExMRkJolsgTP9EU72hjneE+LlW5N87ewQb3ryBwyE03f78NY8crUP+PznP8+pU6c4fvx42fvf8Y530N7eTlNTE+fOneODH/wgV69e5ctf/jIAIyMjJQEFUPx7ZGRkwW1isRjpdJpwOIyqqmW3uXLlSnEfFosFn883Z5vp55lNNpslm80W/47FYgu9FSYmJiYm9wHxTJ7nLo/xzPlhXrg2Tq6gzdlmf7ufn9nXcheO7t6iqqCiv7+f973vfTz77LPYbLay2/zP//k/i/+/Y8cOGhsbeeMb38jNmzdZv3798o52lfnoRz/KH/zBH9ztwzAxMTExuQPcGIvzv795dd5AYpp1tU6e/PndiKJwB4/u3qSq8sfJkycZGxtj7969yLKMLMu88MILfOITn0CWZVRVnfOYQ4cOAXDjxg0AGhoa5kxgTP/d0NCw4DYejwe73U5NTQ2SJJXdZuY+crkckUhk3m1m86EPfYhoNFr819/fX8nbYmJiYmKyTDJ5lWujcW6NJ/ja2UG+dKK68++loRjPnBsmkS0svjFwvCfEI391hGcvjS4YUAB8+M1bafE7qjqeH1WqylS88Y1v5Pz58yW3vetd72Lz5s188IMfRJKkOY85c+YMAI2NjQA8+OCD/K//9b8YGxujrq4OgGeffRaPx8PWrVuL23zjG98o2c+zzz7Lgw8+CIDFYmHfvn0899xzvPWtbwVA0zSee+45fv3Xfx2Affv2oSgKzz33HI888ggAV69epa+vr7if2VitVqxWazVviYmJiYlJlfzg+jjbm7w4rBLn+qNcGIzwzPkRTvSGATjUGeBod4jRWIZff8OGRff3+WN9/PaXz2ORBF69oZaf3t3E6zbW4XUoZbf/z/PDvO8LZxYNJqbZ2uip/MX9iFNVUOF2u9m+fXvJbU6nk2AwyPbt27l58yaf+9zn+Mmf/EmCwSDnzp3j8ccf5zWveU1x9PTHf/zH2bp1K7/4i7/In/zJnzAyMsLv/u7v8thjjxUv6I8++iif/OQn+cAHPsAv/dIv8fzzz/PFL36RZ555pvi8TzzxBO985zvZv38/Bw8e5MknnySZTPKud70LAK/Xy7vf/W6eeOIJAoEAHo+H9773vTz44IM88MADy3rTTExMTEyqJ5NX+dh/XuHpl3p4aEsdP7g+AejsavGhY/QthFM5uieSCMD/+fY1rIrIL796/tL5ty+O8KF/Nxa7OVXnuStjHO8NsbXRg6bDjmYvzT47OVVjJJphIJziuStj6HplxxxwWqh1m4vNSqm6UXMhLBYL3/nOd4oX+NbWVh555BF+93d/t7iNJEl8/etf51d/9Vd58MEHcTqdvPOd7+QP//APi9t0dnbyzDPP8Pjjj/MXf/EXtLS08Ld/+7ccPny4uM3b3/52xsfH+fCHP8zIyAi7d+/mm9/8Zknz5sc//nFEUeSRRx4hm81y+PBhPvWpT63kSzYxMTExqZAbYwmefqmH9bVOro/GyRY09rf7GYpmiKbyxLMFHlwXJOjS8TlkVA3++eU+eiZS/P5PbSNTUOkPpegPpRkIp7g8HOf/nhqY8zyxdIGXb4Vo9FgRBTg/GOVYd2hJx7y5wU06r/LspVEuDsXorHHyc/tbkcz+irIIul5pvPajRywWw+v1Eo1G8XjM9JeJiYnJcvjh9XH+298dQxSgo8bJrfEkO5u9nBuMAnCwM8B4PItdEemeSIIgkM4ZvXo7mj3cHE+Sys3t3ZtNe9BBg8fGQDjFYCTDwc7AkoOKnz/QypFbk/RO3pZGeGVXkH9+9yEEQSCVKzAUydBV51rS/u8FqrkWrmimwsTExMTEZD7+5gfdbG5wk1c1bo4n2dfuJ19Q2dvmYzSWJZTIEkpmaQs4aPY78NmVYp/F+cEY62qcRNI5Qsn8nH23+O00++wMRdP0TqZKgoBqEQTY0+qjoOl8/vjchtEXb0xyvCfM184O8c9He3EoEi/99hvn7eH4UcI0FDMxMTExuSOEUzmujMTJqUaDZDiZ49ZEilN9EYIuC6FUjmi6wPnBGPVuC5qus77WCUCNy0KN24LDItEasJfsd3+7n4FwmqPdIfpDcwWqCmplDZmCAHvbfLT47OjAuYHovNs+8cUz/NPLveg6JHMqP/83L/PD6xP8qCf/zfLHApjlDxMTE5OV47F/OcVwNE04lafWbeVYd4h97b6pMVABuyIhCnCqL0KNS0HVIJktsL3Zy/mBKHnNuFy5rBJBl5XeyRQ7mr1cHIqiLXAla/BYGYll571/OjMxFs8WVTO3NLq5PByv+jX6HQo2RUKWBA52BPlf/2U7NmXuZOS9hFn+MDExMTFZU7xwbZwjtyYJJXO0+Ow4LBK7W72c7I2wp9XHtdE4yZzKuhonbqvMlgYvmYLK8Z4wp/oiJftKZFVa/BIb6lxcG40tGFAAjMSy+B0K4VRp2WRmMDH7OVLZxXs3ymE8h/E8/aEBQ2DrZ3byw+sTvPtVnQjC/d3gaQYVJiYmJiarxrmBCP/wYg9n+iOEkjkABiJpBiJpGr1W9nf4OdMXoS3oAB1cVplbE0myBY14pkCLz85AZG5JYzKRI6+qZAuVJdtbAw7CqdvljBqXBZsizQkmpomk5/ZtLIWzA1He9OQPAHDbZH58awN+p2VF9r0WMYMKExMTE5MVQ9N0/uqFm/zDiz3kCiqxjKFwuaXBzcEOP+FUnutjCQCGo1mGo1kOdPg53hPmUKefcwOG55IgwJWROAc7A9R5rKTzakk5oi3o4ORUE+diBJwW5FkjoG6bYkyYzEM0nafJZ6PF5+B0X7hYelkOH/y/5/ng/z1PR9DBoc4gv/yaTuKZAuPxLAc6AvdFsGEGFSYmJiYmK8axnkm+dXGEiURpD0N/OEUiq9LsM5os/Q4Fp0XG51RQJKGoonmwM8DpvjDZglF+kATI6+Cx3Z6sWGhE1CIJdNY48TksZAsaQ5E0Y/FsMUsyTSSVw6GIpPLzN3EORTIMRTLsb/cXp1BWgp7JFD2TKb4wQ4rcIon8+LZ6fmZfCzrw+k11K/Z8dxIzqDAxMTExWUEEzg1Eed3GWlJ5tXjxT2RVDnUGONYTotFrI69qqLrOhcEYXXUu/A4Ft03mWHeIOpcFVdNpCzg4cst4/NZGN6IAG+vd9M0aF93c4EbVdAqaRl8ozdXRxKJHGU7l2dvmm7f8MZPZAclqkFM1vn5umK+fGwag+6M/eU/2X5gjpSYmJiYmK8Y3L4wAkMwVONYdYnuzh031bgCOdofY1+6nLeAgksozHM0AkMoVON4TJpkt8NqNNXTWugglc0wkMhzqDKCIApeG42xt8kxNcmSKz9cWsHNlJM71sQTdEynUKsoUp/oi7G/3L7rdrYkkBzsD1bwNy2YFqi13BTOoMDExMTFZEXRd51sXjaDi+liCzQ1uBsNpJhJG34RDETnXHyZTUKn32rDIIoc6AySzBRo8NjTdyCAc7Q4xGMmwvz2ApoPXbiTVR6IZCprGnlYvu1q8WGWBkWiG5Szop/s7FuNYd4i6O+gBcq+qPZhBhYmJiYnJinB2IFrMPkRSedw2udhDcbwnjI5ArdvO2f4o+YKG2ypztDuEVRJRZIENdU5ssogy1VSZUzUGwykcVpkH1wXprHFysi+KIkmcHYjic1jY0uTBb1+6kmU0nccqVxaVSHfoitkWcCDfqSdbYcyeChMTExOTFeFUb4g9bT5kUeDiUIxQMkfQZcVtk2kLOvBYFS4OR7HJApFUjpyqs7/dz5WROE0+OzfHk1wfM0oNyWzesCYXoC+UZiSawWWTSedUbownCDgVUjmVayNxat02QqmljYBubnBzZaQykau2gJPh6PwiWivFlkb3qj/HanFvhkImJiYmJmuOm+NJTvdFiKXzdATsBJwWjnWHSGQLXB2J88L1cSYSObY0emkLOtnR7OFEbxhd1zk/GGVDvWHKpes610YSnOqL0OQ1Mh05VaerzrjYZvMqLqtEMlugyWfHvwzPDaelcrXLC4PRqrZfKlsa710FZzOoMDExMTFZEV69oZbWgJ2xeJaJZJ5MXmVDnYsNdW4KU52H62qc9IdT3BhLcH7Q0KRI5VUOrQswOTVlkcmrbKh3c7AjMCXhPY2xj4Km47Ja0HTom0xhkZd2KXNZZS4Mze/vMZtkTqU14FjSc1XD1nmCiu9fG2c4OlcIbC1hlj9MTExMTIpMJLL8/Q+72dTgZn9HoNgTUQlv2t7AazfW8vBf/oCBcJqCptEedHKsexJVh4BDwW6RuDVLdGpXi4+Xbt7WnZgONgDW1zrZ0+pFFERO9kZwWSQ6a514bAqb6l30TCaJLVH9cmuTp2pLdJd19S+bmxrmlj8mEll+5Z9Oki2ovGFzHb/wQPua1LIwgwoTExMTEwBO9YX5tX8+VTKy2ei1sb8jwP52P/s7/Gxu8CCJApm8SiSVJ5TM4bBINPvtKJKI3SLxiZ/fw3s+e4LJRJZzA1FaAw7q3DbODkS4OBSb87zWWZkGWQRBENje5CGSzmNTJFQNOoIOvHalRFtiT5uP0xVoTczmVV1BfnhjsurHSeLqa0cEXXOnTP7qezdJ5w1BsO9cHuM7l8f44Js286uvW7/qx1MNZlBhYmJiYsLnj/Xxe/9xgbxaOso4HM3wtbNDfO3sEAAOi4SAUQqYiSQKNPlstAecdNU52VjvYtAq0RdK4XdYONZjZASa/XYGw6Up/FSuUPJ3wGmls8ZJIlsg4LByaThGNF3AKgtYZTdum0x8Sv672iyFRRbZ0eTl5VuT1LgsTCSqE7bKVWijvlQkUSj2bXRPJOmZTPLyrUn+6UjvnG3/9zevsK7WyeFtDat6TNVgBhUmJiYmP+Kc7A3z/37lQkXCUalcefdOVdPpD6XpD6VJ5wqcnJE9yKsau1t9CAKc7Y+wo9nDRCLHcDTDnlYfp/sjJfvKFVTODUSQRJGtTR48NoUGr704VTLtFbIU+exdLV6O9xiPWVfjYiJRXfljqaWWSvHZlaKS5l9//yb/eqx/zjZ72ny8uquGBq+djfVra1LEDCpMTExMfsT5rX87W5US5WJIszQWLswqeZwfjKFIArtbvWUbDztrXJzuj1DrUhDQ6Z/KbByaUrXUdJ1XdgV5scryhcsqc2HwdmPmmf4wAadCKFl5oDASzSy+0TLwztDcmPn61tU6eevuZt6yu4n2oHNVj2E5mEGFiYmJyY84sx08l0sle8urOgVVZyR2W/dhe5OHTEHjdL8hn53XNPKqTsBhoT3oQBQMM7Fro3HqPbaqjskqi7QHHSU9HTlVZ0Odm6PzNGtKosC2Jg8WWSRf0EjnVVJZlWRu9SYwPFNBRd9kir5Qiod3NPLoa9ezvdlzT3iBmEGFiYmJyY84u1t9XKvAhKsSAs6FLcVn4p5yHt3e5CFb0IoZjc0NbhKZAnlN4+Z4kmafvaREEnAqXK1QsGqarjpX2SbRcwMRvHaFaJmyhscmc26g8pHTlUDTdf7jzCDPXxljc4ObP3/7Lqzy6mtjrBSCfq8KjN8BYrEYXq+XaDSKx3PvipGYmJiYLMRgJM1Df/ZCcbpgqXTVudB1nZvjiwcVAaeFfEGjyWfn6ujtAEERBXxOC+PxlVWutCsi6Xlszqdt12djkQRy6t27RH7mF/etiSbMaq6FpviViYmJyY84zT47j71++aOJskhFAQVAjctCPFsoCSgAdrf5VjygACOImY+Lg9Gy+hOVimpJq1CVcFok9lXgoLrWMIMKExMTExNqymgjVEuhilV90GVl8yyRJ5sscqNC19BqmS61lCORU9nWNHcFbpEqKztsbvTgcyjsafVxoMPP9ibD7r0j6MBtW1qXwS+/Zl3xM7k5nuC3vnSWRLZAtqDy3StjK9pYu5KYPRUmJiYmJhX3QSxEqsLyiSIKXB2JE07lONQZ4Fh3CB3Y2eqrWuGyUuyLeHZcHolhV6SSEtCGehcXh6Iksgu/LlGABo8NWRLIFYw+kOn9HOwIFDU6qmFHs5fvXh3j304M8I0Lw9S6rFgkkQ99+TzXRuO8ekMNlbXE3lnMoMLExMTEZI509mIIAuxr89MzmWQikaPObWUoUtm45a42HyemtCKOdofY3OAmnStweXhuI+VKoUgCjV4b4/Fs0YdkJrF0YU5vxdHuUFETYyEEQWAglCQxpeGhTE2NOC0SSoW26rN592dPlPw9Fs/yxj//HsORDF/99VetWWt0M6gwMTExMSE9j6hVOdbXOhGAE71h1tcaypcdNU7GKuiFEGCOouaVkTiCAKs1NlDnttI7kWQ0nmNvm69E5nsm10cTWGTRsFyfoncyxaHOAPrUsRvHaByoPvVPFIRiQAGQ1/TipMmuFu+KvY7+UJrHXr+erWVKNWsFM6gwMTExMaHOs3hPhdsms7nBXbJyvzmeZHODm8FwqqLn2dni5WyZMc3VnEMMOBWujBi9Gqf6Ihzo8HOmPzJHkjyUynGww8+xGa9vLJ5dNFgSBWMs1mGV55RvymVFlorHJvPeN2xYsf2tBmZQYWJiYmJCQwViUl21rrKlgCtVaEbc6bR9V52rGFBMc7wnTFvATr3HKIf0TN4OiLonUiiSUAw4Ak6FcCq/YNCj6VPBQ5mNVrKh0mGRsSlrW7PCDCpM1iyJbOGO2AybmJhAg3fxoOL8YJSA00IoWZ0J10y0Ozy1MN/0RV8oTV/IKMP4HAqtfgfnB6OMJ7Ic6PBT0HSyeRVREBaV8bbIIgOhVEkJZJq1OqWxWphnbJM1y1+/cBO/04LfYeHycIx3vbKzohOfiYlJ9VQie13QdDbUueaVtd5U7+baaJyFLqOrfZFt9duLXiFbG92cnWVWVo5IKk+L7/Zxzc7GyKKwYBljZ4u32Hg6m6WOlJajxj2/1sZawQwqTO4ambzKuYEoZ/qNH+PmBg8nekLcGE/w8bfv5tC6IL/wt0eL2790c5IvPfpgMf13YyxBV52rZJ+6rt8T+vgmJmuN3a0+JFFY9KJ/czyBKBgp/5l01jjpnkyytclDNJUnp2p01BgNnX2hFMNTRlwFbfWsw0UB+sNpdrf6sEiGo2mlMcxCZYV97f6ygZQkCuyf575pZHHlyj372wMrtq/VwgwqTO4qP/eZI2Vvd1svsH5WwHB+MMov/M1RDq4LsK/Nz+/8+3n2tvkJJXOEUjnCyRwb6938y3sOIa6wQZKJyf1OrcuK36EwkVi4tDGRyLG71cuZ/ig7m70IgiHzPa1zcXEoxuYGF9fHMiUNjl21ToIua1UCWdUiSyIFVeNMBdmJaVp8dnxOZUEL9aPdIbY3ebgwFMMiizR6bHgdCtm8tmBAAaAvmLepjoOdZlBhYjIvN8YSHOoMMJnMcms8WbKi+MKJgZIf0NZGDyOxDKf6w8iSwLMXR9jU4GYklqFnMsnGejejsQzjiQxbf/+brKtx8fG372bTLMU+E5OVoqBqJLMqVkVc881zlSCKAutrXUwkFhdqimcKHOwIMBRNMxCe69ip6nPLHDfGk9wYT7K10fhNrsYIaa6g0RawU+uyMhBOM7rA1IbTIrGt2cOp3ggDkcVdR7snktS6rIwnsvSGUlChntXxnnAxA+S2ycQzhUpfzhz2tq192W4zqDC5a1wcMsbKBkJptjZ6iGfyBJxW8qrhVni2P8zrNtWSzqmoml5sDjvaHeJQZ4BIKofdItMZdJIraGysd3GyNwLApeEYXvv8srwmJtWSyat84rnrfOF4/5RcspHGDzot/Nrru/iFQ233fHDxY1vrF115gzFGOp/Hx0I6EACXhuNsb/ZwYTCGTRZpCzrw2RVAQNU1bowlyzqGVkquoHFy6vmtskiTz07QaeFkb7gkZ7ClycOx7oVFrabprHHQPZEiWYWWx0ymA6x4pmBoXSxhH7IoUOdevpT6arM2JblMfiR4+VaIvlASiyxikUWGohkssohjauIjW9D53tVxdCimJv0OhYMdAYajGWyKhKrpnOmPUNA0xuNZXruxFlEAr12hvoK5exOTSjjZG+bhT/yAT33vJpPJXDGgAJhM5vijr1/inX9/7I5PNlTL81dG+c0vneW3/+85xuJz1S/X17rKPKpyDnb4F7UKd9tkLg8bI6iZgsa10QSqDsd6QpzsjeB3LG8x4JrRGJktaHRPJDnRG+ZAZ+kqP1Zh4LK9yUOde+UaxL1LfH1Bl+WeKOuamQqTu8aZ/gjD0Syv2VDDUDRDXtXJ5FVkScBtldnT5iOT17g6EmNjnYuhaJr2oJPjPYZPQI3LQs9EioMzpHXrPTbcNoW37G4yGzZNVoS/+M51nnzu2qKp+qPdIT53rI//9kD7nTmwKggnc/zml87y3JWx4m3fvTrG9z/weqyykV25OZ7g0X8+uaznOdkbxmM3dB3mY1O9u6R/QRBgJHo7wKn32BAEYUleJD6HQvc8GZSz/VGafTYGp6TEZwaG82GRRSaTueJCZz4OdgYYDKcYimYW/Z64rDKRBd6f+VgJw7c7gZmpMLkrhJO54knj2mgcn13Bpoi4rTIj0QzxbIH+cJpjPSEavXYiU6uKM/0RmnzGquFUXwS/UyGvlp4c0jmVX3nt8m2cNU1nNJbhZG+Ib14Y5nRfmFAyh76a0n8ma4rPvtTDx7+zeEAxzcf+8wpDFdTn7zSf+f6tkoACYDSW5dlLo8W/v3tlrKILLUCt28rBjgC+qVW3JAo0++zIklD8rc7H7OfY3epjcMZ7drQ7RPdEkt0tvoqOZSab6t3M1weaLWglTqXBBazQbx+bl+FoZtHf/EDYKI1U8j1xWpa2lg/eI0GFmakwuStMzhDPGYllGYlleWBdkB/enCze3j2RpNVvp85t5cpInL1tPsKpPNmCyp42H7IoFOfJO4IOeiZT5Aoau1t9NPvsyzq+W+MJHvvc6bIGR26bTHvQQXvQSUfQwS8caqdpmc9ncueZSGQpqDpBlwVlhsqjruucG4jyxRP9/Ouxvqr2mcgW+MC/neOT79iDz7H4RSuRLeC0SKuaVQsnc/zTkZ6y933heD9v3tkEwIXBhcsW02xt9HBlJMZ4PMu2Jg+RVJ6OoIOb40leuT7IizN+w7NxWaU5v6lQonwzpVWpfs07uEhANxzNFHsaTvVFFnUQnS6RlOvxCDottAcdCAKc7I1QX2G/w+zXNa1jsVgDZ41r7WtUgBlUmNwBVE3nPy8M0+yzs2eqe7ncOVQtM7/eH04bc+ctXmRJoMVn5+xghBZJ5ExfGFGA/e1+eiZTtPjtJLJ5xuIZ/u4H3WQKKkORNO841Ma2pspNff7jzCC/8+Xz8zZlxTMFLgzGuDBonBz/8aVe/vztu/mxrfUVP4fJnSWazvPdK2NcHo5xaTjG5eE4EzMuZn6HQq3bSq3byng8y7XRxAJ7W5gf3pjg1f/7u/zSqzp5655m3DYZl1XGIoncmkhysjfEiZ4wJ/vC3BpP0uK3s7XRQyqn0uCxYrfIvG5TLW/YXLciwcY/vNg973f5hzcmGAinuDh0+/u8EE0+G/2h25NayWyBXS1e0jmVAx3+BQMKgE0N7mIzNVAcTZ2NIgolC49KmS9LtL3ZgygI2BWppBH1WE9ojjPpNPvb/ZycKtP0TiY51BlA03UKqs54PMtAJF1yjKPx7Lz7molNlqh1WWn229F1nUvDMdbXuhaVOq81MxUmJsbY3f/zpbP8x5khmrw2fvjBNyCKAifKrA4y+fKp15k/1AaPDUkQcNtkHlgXZDKZ5VhPmAfXBcgWNLIFjZvjKf7omUvFx//E9say+9V1nZ7JJFdHEtyaSHBzLMmNsXhZs6OFiGcL/L//fp5XddVgt9zb3f/LIZrO89KNCX5wYwIBeOLHNi4pZfuf54f5mx/c4pF9LbxtT8uy3lNV0/nC8X7+z7evLigtHU7lCafyywomZhLPFviL567zF89dL9423wjlQDhtaKw0uOkNqUwmcvzTy728cXMdn/nFfcvyyohl8vzDSz3z3q/r8KffvMpXzw2h67ChzsX1sfnfA5dVLrE3D7qsiIKx8l/MHryrzslIrDQrEU2XX51vb/ZyekprwqaINPvsOK0yN8cSC05g+OwKoTL9CpOJLMPR8hmRo90hdrZ4GQwbQYIgwIH20gxGtqAvGiy0BuwVmYdN73d8RlAbriCAulyFv8rdxAwqTFaN4z0hPvHcdX5wfQKAoWiGI7cmecX6IH/3w+4524dTc39YO1u8JT9mSRTYUOcmkSmU3H62P4IoigjodNW5uDHjxPiRZy7RFnDQ6LNRUHUsskh/KM2pvjCJbAGvTSn5gS+FRp8d6R7ozF4JCqrGQDjNjbEEN8eNf9dGE5wfjJZoE7x0c5Kvv/dVOKv0bxmMpDnVF+FUX4T/862r7G3z47TKpHIqyWyBZK5g/Der8qoNNfw/P76RRu/c8tP10Tjv+/wZLpUpYd0NFqq3r691cXrWGOZzV8b4y+dv8PiPbVzS800msvzOv59fNK1+diBSPDa7Is1Ry/Q7lGKTYLag4bHLxKaCAQGwyhKiIJTIY7usEl11bkThtsT16f5IyXuwo9nL+TIll4OdgaLTpyIJbG++LYGtiAI7W7zoOmUf67LJc4IKr12ZN6CY5txAFFmE122sQUPg+9fGF9x+NhvqXYxGM/SHqu+n2VTv5uro4gHDjdE4V0fia157xwwqTFaN3/+Pi3NO6H/8jcv807sPYZ/VrNQesNM76wfZ6reXBAf7ptKRkgieGRoUVtk48UzbFavhVPGEJQhGb8a10TiiAOX60NprHMsKKtw2mafesQeLvLb6njVN5+Vbk5zuj3BpKMbl4RiZvMrh7Q38/k9tq3g/0XSeL53o52RvmJvjCXomUuTUxRv6uieSPHdljJ/e1VTVcdfN8KAIp/JzGgxn8m8nB/j6uSHe/apO3rK7mXU1TmRJ5MZYnF/8u2OMxOaOTa5FrIrItiYPV0biJYHZXz5/nUdfu77qbM0Pr0/w3n89teAUxjR1HlvRpfPcYJQ9bT7O9kfQdOOC7LUrXB9L4FBE2oJOZJeVWLpAi8/OzfFE8TkOdPjx2BWcFomrownCqRwOi0R/KEUiOze7kM7PvS3gUDjddzvjkVd1TvSE2dHsZWiq3DA9srqh3kUklWd8hsBVuSbIaDrPgQ4/eVVjPJ6bt+9CEAQuDccZi2fpqnPitirFbMliiIJAbImiVl5HZZfhoWiGf3q5h4+8dceSnudOYQYVJqtCLJOnZzLJvjY/0Uy+GBxcHIrxs59+ic0NnhKjn3pPaVDhskpoOqRmpDpjaSOTYTgL3t52R4uvGFA4FJHOWhdBpwWvXUHVjJLIlkYPF4fKr1jPD0RxKCKpecovi/HjWxto8TuW9NjVQNd1vnJmkE9/79acFZDfobC10VPV/n73Kxf42tmhJR3LN84NVx1UVCt8lMlrPPXdmzz13ZtYZJFal3XRhr21xnTpYGezl3MzVuCCIGCrsmHx5VuTvOcfj89bTpyJTTF6k2Zyui9Ca8BOrqAxGssWP49UXmMglKSjxsXBzgCZnIoii9R7rFwZSXCmP0Je1dlY72Jzg3vBcsHWRk/ZDFI8U2B7sxdV17k4FCsGWOcHo7htcomw1vVRI9DZUOfCY1eQRIHJeRYH0++vIDBv38OeNn8xQ3JjzJhM2zejr2IhrMtYUAgsnOG0yiJvP9DKK9YH53gdrUXMoMJkxemeSPLf/vYoqZzKyakT1vpaJz6HhXMDkbJqfAORVMnfmxo8JT9mu0Uqq+B3sDOAPFV22NTgpsVn57krY+xu9bGpwV08ScwXULT47QSclkUFexZiJV0IV4LPfP8WH/vPK3NuVySBr//Gq6uajIll8nz74siSj+W7V8dIZgsVl0BUTefvfnBryc+XK2j3XEAxk3OD0ZL0v8cmz2nWzORVzvRHON0XYTSWQZoqCWyoc3O6P8z/euZyRQEFQEfQWbZBcL40/oYGT0mZxudQUDWdV6wP8vKtSVr8dhRJXLT/YL7fTH6qTAJGALyhzkUsU2AokiaWKXCqL1ISFKTy2oI9IDOxSAI5VedUX5i9bT7OD0Zp8NjwOSw4LFLZcspEIrtonwlQMj1ULdnC3IyNIglsrHfz6g21/NKrOlZUfGu1WVtnQ5P7gucuj845sRsBQZINdS5Gomnis9KhLX4HqaxKrduKz6GQLWg0em1FZ8N1Nc45gcHuFl/x5Huww8/FISO9v6/Nx1AkXZwwafXb6axxklM18gWNZE5lMJxCx2iSK+ddUA3fvjjC7//U1jknf103TmA9EykGwmksssjP7W9Z1Xnz714Z439/c25AAfD6TXVVj9o+d3m0Yu2CcmQLGs9fGeOnKsxW/PDGRDEV/6PK0IzvYyxT4FPfu8GvvGY9faEUf/yNy7xwbZzcMj6TkueKpBddjTstEhsb3JwfiJaMg25ucDMUTZPKFkhkC2i6ESzYFJGuOicOi0xB1SloGgJCRX0DMwmn8sUMJBilkXqvDU3XeVVXkNN9YZK5hd8HuyIaxoS6cQ7a3eRCQECRROrctuJ0mSIJbGn0lCwu9rb5uDwcQ5ZE2gL2qQxpeeRl9FOFkkYmqNln59HXrmNvu58Nde41V06tFDOoMFlxTvXNf4K6PpagI+hAkQqEZjRmTgcHs4VzLJJAe8A5Z1SsxWejN5QsNpUd6wkjAIlMAZ9dps5j4+xAlAMdfo73hOkPp2kN2Gnw2BiMpPHYLSu2oh2KZvjXY/2841Bb8bZEtsDvfPk8X51VNviXo738/f84wMb6lW+2+u6VMX7jX0/P2xC4lP6CaTnl5fCN88MVBxWmsBg0++1FgytV0/mTb17lq2eGuDWerKiXpRpimcKiRhQb693F7MSuVh+6rhcnQKYbNkejGdxWQ357fa0Tr11BFATODdw+F+xu9TEWzzAUyVQ0JTGbUCpfbMJ0WWW2NHrndRZVRIHNjW4ssoQkCmRyKum8yvnBGE6rhE2WSvqo8qqOTZaKJobHukNk8upUCdWwL9/WNH8JdTnf2qFImg/9xGb+xys7iuqm9zJmUGGyoui6vmgNsmcyRZPXRoPHOmfEbDY5Vef6eII9rT7CqQhgTIBYFQlZEumqczGRyCIIAtm8kfr2OYzmsh0tHq6OxIujfDVOK8d7wjgUcUUCCqssYJFE4lmVD//HBWRJIJUtMBLL8u1LI9wqU64ZCKd55FMv8edv380D6wK4rHPT29UyFs/w5LPXuTwSK6v1Mc3FoRiJbAFXFdMY16pcXZbju1fHSOUKOCpQErxXpIhXk4kyfQGLaRgsh95Qkm1NHuyKNOciPVMcaltTaUlyZpA6Gs/itBgX5VAiW7YEcqY/giQYJctKfTfmI5EtoGl60ZhsJutrnQxFM5yfut1ukVhf46SzxkGNyzgHbOn0MBbPsrfNR17VjG0FHVUDUTAUQy8Nx9nf7ienasUMxnz9GFqVwbDbKrOz1cvuVh8HO4O8Yn1wWSWUtYQZVJisKEPRDKOLBArT29W4LLQHHIaN8CJMr9AUSWB3q6/YeKXIIt0TxuO3NLrJFazF3os6lwWPTabBa2MiYcyfH+zwE03n6Q+nSeVUJFGgxW9nKJJG1XTW17rwOy2kcyqCwJTrpI6mGf0FsXSBBq+NaDpPXyhFTlXpCDoYjKT5wL+dq+g9imcL/PI/ngAMb4Gg00LAaSHosrKhzsW10Ti5gsbDOxr4hQc65h1VzRU0nn6pm088dwOLLBJwKAs2m6qazp9/+xof/qmtFR0nGM1wyyWTN0ogb97ZRK6g8ekXbjIcTRNwWvjpXc0lI3LVBhUBh0JnjdG8li2oXJhnJXmv0OCxzuv+uVpMJHJMJIys4eYGF1dGyn/mTuvCq+hkTr3d6DjPa1D121nJ5XJtLEGL317SZC2LAs1TfVIFTSeaynNrIonDKmORRQbCKfa1G6Zne9t8XBuJk8ypNHhsRFJ5XFaZ470RDnb4GY9nOdEb5pXrg8XnPNodYl+bn4lklt4ZZbrZNu/z8cquIL91eDM7m733hDnYUjCDCpMVpZJO6WkmEjnWdTip99gWlMoFuDYS49C6QDG1v77WSd9kiuujieJqKp1TGU9kcSgiW5u92GSRk70RmnwOro0miuJH9W4rVlnEZZUJp3IMR9LsaPZyeSReUdPX7DKCyyqTn89wYBFyBY1mnx0dON0XJpO/fWLunUzypZODfOSt29nV6it53HevjPFHX7/ErQnD5bXZZ6+oZv33L3azpdHNz+5vrej4FruQVMoXjvdjkyX+8vnrJeJiT333Jr/zk5v5n68xvFpujS/8/ksCbKh347UrjMWzdE8kCU2V2/a2+VbkWO8mbYG5AlF3ktnp95nllqsjCVwWicQS7b9Xmums29YpHQtZFNjW5OH71yaK2+xr93PIbUUALJKIx6Ygi8Y460x7dodFBJ3ibdOLlraAg6Go0XfSO2kESpNTAUXAaaEz6AQBhAoKIOtqnTz9roP3TUZiPpb16j72sY8hCALvf//759yn6zo/8RM/gSAIfOUrXym5TxCEOf8+//nPl2zzve99j71792K1Wunq6uLpp5+e8xxPPfUUHR0d2Gw2Dh06xLFjx0ruz2QyPPbYYwSDQVwuF4888gijo6Nz9mOycpyqIqgAiqZhBzpu2xLvafNxqDPAgQ4/O5u9HOoM4LQqHL0VwiaLFFSNm+NJWoMOdrV46Zn6sfdOpnh1Vw3bmr3cGk+SV3WCTguTySxWWeBAh5+Aw0Kz3044lWcsniWv6uxu83OqL0J6iSfLxRwMF0ISjHG5k71hUjmVW+MJdjR7qXNbcdlkzg9GeeunXuQjX7/EF4738cXj/fzS08d519PHuTVhpK1rXZaqmuA++H/P8dR3bzAcXbwE9KZtDUt+bTP5wfUJ3vOPJ4oBhcMisbXRaEb7029d5c++fZWhSJonv3N9zmMbvTYOdPjZ1eLFokhcGYkXTadmcj+Ij91tY93ZzYGJbAFZNH47gsCaCSjAeK9ujSc40RNme7OHrU2eOWq4J3vDHO0O8XJ3yJDY1nSOds89R7msMpG04WECsLfdz4EOP/UeK167BU3X6Qg6SWQL+OyGB0comeNkX5iTvWFO9EbYVO/iQId/3smWerftvg8oYBmZiuPHj/OZz3yGnTt3lr3/ySefXLBW/A//8A+86U1vKv7t8/mK/9/d3c3DDz/Mo48+yr/8y7/w3HPP8Z73vIfGxkYOHz4MwBe+8AWeeOIJPv3pT3Po0CGefPJJDh8+zNWrV6mrqwPg8ccf55lnnuFLX/oSXq+XX//1X+dtb3sbL7744lJftskiLNSkWY7haIZGr1HnnK5XWqbqsZJgiO+EUnnW1zpZV+tkPJ4lkTWaw4JOC7mCRiiRxW0zrNJP9UbY3OAungACLgvDkTQb692EU3kUSVjx+nS19dSZzLSJVjWdFr+Di0NR8qrO2JSoj67D8d4wfztLhbTGZeHKcGxeV8b5jxf+9FtX+dNvXWVXq4+fP9DKzx9oLft7fWhrPZ94/sbSXtwCdM6a5vnL52/wl1PPY1dENtS5sSkiA+E0Q9FMcQpoPloDds5UKFQ0m0avFU0z+gLuFJ01TpwWiUSmwHgiSzKn4rJK9IfvzORLZ42TWrcVVdOZTGSn/HV83BpPsLHexXg8SziVp9ZlIZUrLCrBfTfYVO8u/pbDyfyi7rDHesK8ZkMNN8eTNHptrK91EUrmiKRzXB6Jk1d1fA6FzQ1uFEkgkSkgCgKZgoosClhkiZ3NPhRJ4JVdQc71R0qm2K5OlQobPFY21bsZjZcqbC7nPHEvsaSgIpFI8Au/8Av8zd/8DR/5yEfm3H/mzBn+7M/+jBMnTtDYWN53wefz0dBQfhX06U9/ms7OTv7sz/4MgC1btvDDH/6Qj3/848Wg4s///M/55V/+Zd71rncVH/PMM8/w93//9/z2b/820WiUv/u7v+Nzn/scb3jDGwAjkNmyZQsvv/wyDzzwwFJeuskiLOV30+J3MBzNcrQ7xO5WH3ZFYk+rjxvjCTprXHRJhq/gjbEE7UEn9V4bogBXhuPUeawcWh/kTF+E491h7BaJgqajSIKxctVhS5OHRKbAlZE4e9r8JLOFkgvase4QG+tduG0K5wYiVZcyEktU0gNjxR5O5Q1jtI4A6ZzKrhYfoihwbTROR9CJRRLLlocmEjl2NHuKDWlL4Wx/hLP9Eb57ZYyf3t3ErhYfLX57McAYW6VU/ORUDd9llWjxO/DYFDRdJ5zK0RdKlQhALYYkGg2z05+bIgq0BBy4rTJWRSxeGM6WMa4C8NotXBmJs6neVbwwLAeXVWJLowdBENB1wyhP1XTyqk5O1RiJZuZkWVxWGYsslPhqrBbTAlIzj0ESKGrKdASdXJsqKx65tTL9D6uBZ4aN+WAkzcGOAIORFLIoYpEFJFFEFgVE0TgXiIKR3ZhW2x2OZqYymben0CKpPJEZKqTNPjuDkTR1bisNXhs6OoORDD2TRm9GfyhVDP6nGYllCaXy5Aoae1q9hFN5eiZTc0qY9ytLCioee+wxHn74YR566KE5QUUqleId73gHTz311LxBw/Q+3vOe97Bu3ToeffRR3vWudxVPZEeOHOGhhx4q2f7w4cPFMksul+PkyZN86EMfKt4viiIPPfQQR44cAeDkyZPk8/mS/WzevJm2tjaOHDliBhWrxLpaZ1kRmYWYlreVBEM97kTPJC6bhXimUDzRbW5wGxceTSeVU2n0Ggqc8fECQZe1aDJ0qDPAWDyLIkkMh9Ok8irtmoNLU6OR4/EMdmXu1/7aaAKnRWJni5eb48mSE8tiLCeosCsSG+tdKJJY0sC2v91vCB/Bgv0mqZzK/nY/w9HMsiZavn1plG9fMkqDAaeFnS1emnx2vruARPZyiKRz1LutjMazy84c7W/3E0nlONQZIJ4pcHM8Meei3eSzoYgC+TINdVZZxGmRlmXcNZM6j63qlX0iW4A7lCgppwMyM44uaDp7Wn2L9jndTdbVODk3ECm5bSnHu67WuaAbaiiVK/bvjMWzbG5wF9+/k71hNta76Khxlvx27YpIeqpx9PRUINvotfLC1THe+4Yu3DOCofuRqoOKz3/+85w6dYrjx4+Xvf/xxx/nFa94BW95y1vm3ccf/uEf8oY3vAGHw8G3v/1tfu3Xfo1EIsFv/MZvADAyMkJ9famNdH19PbFYjHQ6TTgcRlXVsttcuXKluA+LxVJSVpneZmSkvEJgNpslm739y47F7u1O8jtNKlfg2UuV9aw0+Ww0ee3EM3kSmTyv6goyFM2QyavUeWwEnFZUXWddjRNJEuibTGGVRW5MuRROz5ODYWrkcxg/1JsTiTlqgNfHEmxuMJr70nkVRRSMx+uQVzXSeZVYOs9ILFNiy1wpjmU0MwaclhKBn2lEQaDJa6d7cuFJgGlRMUO8x00qW5jjoVItoWSO712tzlCpWurdtoqmfirhVF940ezSUCQz7zjg2YEozT47hQoyVK1+Oy6bjFWWkKdWwEDREnvacKt7IrmkrN1q47HJC7q1AozGMrQFnXfoiKqnxmUhlsmTWQEBsMU+o3ROJc3tEseVkThdtc7idMu10URJg/COZg8FTZ+j7zIcNVxS3/uvp/nb/75/xQLYtUhVQUV/fz/ve9/7ePbZZ7HZ5sqGfvWrX+X555/n9OnTC+7n937v94r/v2fPHpLJJH/6p39aDCruFh/96Ef5gz/4g7t6DPcyf/i1SyVeHfNxoMPPqd4wQ5EMnTXGTPlgJENrwDhhZwsaZ/rDFDQYj2fZ1+6fo3p5rDuE0yJR77FRUDW66lzcGp8bUIAhbLOac/7L0f1P5VVksdTobHeLj0vDMayySEeNg9aAA1039Chmvj67RcImi8W0+uXheLHRbK3jdSiwQgvhSstVp/sjrKtxEnBaSOdVsnkVBMN5YTKZrUht1GaRKhIE29Pq5cJQbMlTQcvlUGcAXTe+9zONrvKqXuIyWo6RWJauurXlhNngtTGZyCKLIm6bMicTtVSGImkCDkuJEN9izM40zFScFQShRHV0Nt+7Os4fff0Sf/CW7dUf7D1CVWfDkydPMjY2xt69e5FlGVmWeeGFF/jEJz6BLMs8++yz3Lx5E5/PV7wf4JFHHuF1r3vdvPs9dOgQAwMDxSxBQ0PDnCmN0dFRPB4PdrudmpoaJEkqu810yaWhoYFcLkckEpl3m9l86EMfIhqNFv/19/dX8/b8yFNp2aNnMsXuVj92i0T3RJLdLT72tfnpDDp58cYkV0biFDTw2GW2N3vmHVNN5lRuTSQ52RfhRE+YUDLPwRlTJHcKi7T0TEV/KM36OjcdQQf72n3sbvVxZiBCIltgMpnjZK/x2k72hknn1GJGJui0sL3JQziVJ5EtFGWbg07Lirym1cZ2F5QDcwWNWxNJTvSGuTgU48Z4khtjCa6PJQgl82TKuGbOplLhsNP9UTbUuap2F12MJt/CHhCKJLCrxcvR7hDHesKkcgV2t/rY2eJFEgXSeZXNDYsbyo3GMyiSwNZGT9XS7iuNKBjKun6HhYOdfgZWsJl1KJrB7zR+Ux57ZZ/tlVmTVjN9bQYrkPz/7JFePvtST+UHeY9RVabijW98I+fPny+57V3vehebN2/mgx/8IDU1NfzKr/xKyf07duzg4x//OD/1Uz81737PnDmD3+/HajWEbx588EG+8Y1vlGzz7LPP8uCDDwJgsVjYt28fzz33HG9961sB0DSN5557jl//9V8HYN++fSiKwnPPPccjjzwCwNWrV+nr6yvuZzZWq7V4DCbVU+e2crGC7TqCDo73hGkPOGjw2Ujn1OIqciaZnIqjTP/Dwtz5mbxlxBRE03naAnaujqQW9byYSOTY326M9qVzatm6vSTeG2nVtdgJb6sgALBUkba+NBynwWNlQ62rqsbT+WiaWq3vbPESzxRKVuvbmjyMxjLUuKxcmPFcBY3iVEzAodBV5yaeyRfl7efj+mgCRRS4NBzDZZUWlKgGw+20UhOzatnb5i8qfY7Fs9S5rbQHHZwdiFbtgbK9yYPDKqPrOslsgXgmTyiZo6vOVRTGiqZzRZfSctS7rSW/1XMDkaJPUWfNwj0a03z2pR7e+YqOqo79XqGqM7bb7Wb79tK0jdPpJBgMFm8vlwVoa2ujs7MTgK997WuMjo7ywAMPYLPZePbZZ/njP/5jfvM3f7O4/aOPPsonP/lJPvCBD/BLv/RLPP/883zxi1/kmWeeKW7zxBNP8M53vpP9+/dz8OBBnnzySZLJZHEaxOv18u53v5snnniCQCCAx+Phve99Lw8++KDZpLlKvHlnE99dpBZvlUVSOZU9bT4kQaB7PEmL386OZi/ZglqSisypOid6F8+RyyLsavGTzhfuSnPZYtbFi3F+MLaoYdE0V0fibG50c3Oe9G+lyn53E0USuDqy9vqVxuOLT15UGwyNxLKMxLLsbPYyFs8uyX8FDFMvSRTIFvSiZPTuVh+qppOYMc00rYxZjlAqz83xBH6nZcGAYprpptZEVuXSUIydLV7sikQia4xaSqLR+6NIIpFUvmrDsEqwKeKcUsd002TAYaGr1cn5gRjpCrJMAH3hVEnp52BngOiMY++eSJCZVcK1W6QSDRu/01ISVGTyGl67wnA0Q6aM42g5bk0kq5bMv1e4469IURSeeuopHn/8cXRdp6urqzgeOk1nZyfPPPMMjz/+OH/xF39BS0sLf/u3f1scJwV4+9vfzvj4OB/+8IcZGRlh9+7dfPOb3yxp3vz4xz+OKIo88sgjZLNZDh8+zKc+9ak7+np/lPipXU38f1+9SDxbvl47nYlwWmWOdYewKxI7WrwMhlMMzjNKp+mGIM98KxKrLNBV5y5OidwNVmLVXee2VRRU1LoNTQ+PXWZnZ6AYRETSeW6MJbgXEhXbm7xFe+u1xOypILdNJptXyas6G+vd+BzKonoZ83FuMMrGehdLjaVq3FZGZomVTWcgOmsc7Gvzc30sxsZ6DzlVwyZLaLpOKJmjP5Qir+nIokCr386ZgfmzJo1eK00+x5ySow4lDp7TTDe/BhyrM9Gwq8U3r416KJXjWHcOr11mZ0uAC4PR4hTYfPjsSklQcWs8wUQix+YGN7mChlUWafDYSMzQ5mj22ekPpYq9Ew6LhCSALAk4LBJNPjsuq8LeNqMXqlKS92lQIeimLeC8xGIxvF4v0WgUj2fxOuRKcWMszsefvU62oPJrr+9ib9ud7xNYCkdvTfL2v3654u09NrmkiWw+fA6l7Iin0yLREnBwdRWbMCtheu5/OSiSgNeuLLjS3NnsnTeNbpUFdrf66QslGY7ePZnnSph2jl1rTH+O62ud2BSRoYhRThiJZuYNlKuls8a55CbDPa2+ssFYi9/OQDiN2yZT77FxY5bUvCQKNPvstPiNUdfdrT5O9oapcVlLNBbq3FYEAUZj2Yo+o9nHo0jCijam+h0KmbxaHM9cDLdVYkuTl8vDMeLznFe2NnpKLvw7mj1E0vliA/SBDj+apiNNjXjXuq2Mx433o2cyRavfzrXROPJUdmZdjZOhaHpJpZ9z/9+Pl2htrGWquRbeA+uaHx16J5M88YUz/PjHv88z54f5zuUx3vapl/j5vz7CD66Pr3lbaEkUqjKEimUKHOjwY5XnLx/YZBF1nhPV9mbvXQ8ogIomXhYjr+rIokhboHxT3IZ614LjpdmCztHuEA3eu9tUVwlLsb2+E8iSiMsqMRbLcnEoTjiV5/pYYsUCCjDGIZfK6f4Ih2aMUk9T57YW+yxmBxRglMTG4hkKKuxpNYKFoMtKa+D2pFDQaUGWhKIZ4PGeMAc6/GxucM8p7jV5bRzsDMyZcgg6V7YfravOVXFAARDPGr45mqaXyP7PxKaUXvLOD8aocVrYPGVqp8gC3ZMpLg/FsMkinTXGe3R9LEEsnWMwkqar1l1c5NyaSLKpfmmTMvkVGIldi5hBxRpgKJLmQ18+zxv/7AW+fHpwTr3z5VshfvHvjvHTn3yRb14YRlujJ+X9HQGeftcBXtkVXHRbSRQ41BmgoOp47fOfaHe1+uY9qccyy7NPXgm66lwrNq4aTuVKhLREwVg972/347LI866+ZjIay7DWLTByFdad7zTHukMksuqKBhGzOd0XZl/70jOPR7tD7Gr1Fv/e3uThwlCMwXB6zgVzJjuavRzrCXGsJ2Q0OgaMEsf2Zg8Bh4LDKs1R8zzeE+bKSJyNUxfNZr+dbU0ehqIZjnWH5uhEeFewBNLit1dlTjiT5FQT88HOue+zXKY+eLo/ypWROM0+O7m8TlvAjteh8OD6QNHLKJLKU++xky9onJklunV2IFqim1MpP7wxsfhG9yD3X0HnHmMwkub1/+d7FXUxnx+M8ug/n6KrzsWjr13PW3Y3rTmDmu3NXp5+10E++fwNOmocnO6L8OylUSYSWWyyVDxhr691zlsrnUlinhO8yyJxbQUklZfLSppY7Wq5rWJY47JQ47IWyyrlVqjlGIpkFrSvXgukcvfnCq0SCpqhxFjrstJR4zA0RgoamYJKMlsoZgoW4tpIgo6gg57JFE6rTK6gsb7VtaCl+MxGxulGx+kSR8CplNV3mcbnVDjUGeBUX3jBkUnnCo7PBp2WOdo01XKsO0yL3w466OhoOvSFksiiUDZb1uy3MxxNk8qqtAbsJLNaUT+m1m0llsnPq7R7rDtEa8C+4Ps4m+evjPGW3c1Lem1rGTOouMt85fRg1WNRN8YS/OaXzpLOq/ziA+2rdGRLR5FEHv+xjQD8lz0t/MFPbyOWLuCxy1wYjPGHX7+IKAhsrHcZErix7Lzqig6LhMMi0eK347QYX1cdHbdNIZrOo+s6FllCFAybZoskGs63GGnfKyPxeQOT5bKrxTvHFXGpTKt97mnzYZFEro7GSzIglWqAbG5wr6rQ10qwHFnz+4XxRJbxxNwAYmezl7FElpEFGkLTeRWbIrGj2YM4ZW1wZSTGrhYv18YSc9x2WwN2hsJz93dpKEbAqRBKzp/x66xxMBbN0L3IuDOwYgucGpdlxX5X5QITqyyWDSouDUVxWGRcNpkzs3xiRIFFpfvdVgWoPKh4zYbaire9lzCDiruIruv8++nBJT12a6OH/3qgdYWPaHUQBKGYGt3R4uWLv/Ignz3Sw9fPDhebwQzvhbmr/isjMVI5dclZiXqPdVWCCklYeHxvPoJOC501TiRRIK9qxNJ5xhJZoun8goGDccJevGygrvG+GzB8P0zKc24wSqPXRkfQQW8oNa+M9JWROB6bXJR7jqULnB2Isq7GyUAkTa6gsanBjcMica4/MsfJ1ioLCzY5y6LAvnY/J3pCFbvgrlTPV2vAsaTf1mIYehveecfOE1mVRLb8b2w0lsWhiKQW6PGwLlB+KserN9RUtf29ghlU3EUuDMbKNlYthiDAR9+2457VjxcEgf/xik6+fHKgeNtio2BLpSPopMFjI5VTiaYNoZuVaBTc1+4v69mxEKIAAZelKORTDU6LRDS9eA9JvIJt7iazZ/5N5jI9tjrTqyTgVOiscZFXNa6OxHHbZCYSOWpcFl7ZFaSg6lgkgVsTSXIFjYBDmTdgUCSB9bXueccfO2uc6LpeUXlyJuXM2paCskpz0VZZqvo1zaTZ7+D6AudrSaiuFNozmaLOs7BC6r2IGVTcRb58emDxjcrwyN6We9JGdzSW4TuXR7FIIrVuK9nC6q6qGzzWsicRr13G77DgtMrYFMMYStN1YpkCA6HUogGOyyJVZZG9r91PNq8yHM1wfYkZl0rlntU10K4gCkYwF3RZGI5mGAini+OGXptiBhUV0juZYH+7n4tDMQIOS7FxUZzKkvkcCqFkjhdvTAKGGNa03ktoRqp+U4ObOreVgXCKoNNKtqCVzYr5HAqb690c6wlVJI41m5VqL6ry2lwR04qXy8Frn78RNei0cLEKjQoA5zKMCNcyZlBxlyioGl87O7Skx37l9CABp4XfeOOGe0Y85ekXu/mDr1+6o86NdW4bI2Ua36LpAtEFDJUavVbq3DZsipEdmN2jsLXZO6cpbnODG03XsSkSFkks6eVI59SqRHHKUeOyTjmSzo8iCayvc5at1d8JalwW1te6uD4a59ZEklsTSbY1eXBYJAbDabY0uEjlVVh7Ypp3BUUU2NLkMYSq0JEEgVgmjyQKJLMq3RNJRmI5FEkoumLCbXntmTV+j11GlgT2T+ksnB2IFoXRCqrGcCTNWCxL98Tc3ogNdS5A5/pYkhvjiSUFFECxv2Mh3DaZLY1uMnmNXEEjW9BQJGHVm64bPMsPKsQFoqb2oKMqrZrOGifra13LOp61yr1xRboP+cGNiSXXDQuazl9//xb/cWaQ3314K2/e2Vh0x/t///08o7Esj+xr4cZYnN86vJnOmrtrY/ytiyN3PKCAyrwcyjFtUzxNs89O85TojUUSi0qG02ysd9E9kSjJvCiiYewkCgJDkcqat+Spk1a58kwlnfCb6t28fCu0qE/DajDtEjuRKA22Zh+HXbk/V2dLYWuTp6KGxEoEpWLpAidmlONmlk5SuQLD0SyNXmvZLJzPoRDP5NnR7K24IbgciiTSFnAgiwLj8WzZ0dwmr51UzpD9nv6a72hefWFByzKchAECTguFedKAm+rdVQUUT759N2/dc/9NfUxjBhV3iX8/tbQGzZmMxrK8919P86/H+tjfEeCvvnejeAL6xHPXAfjOpTEefe06fu31Xdjuwgn9dF+Y933+9B0PKABUbWVqAYORNIORNLJoGDd11jiJpvN0TyTRdJ1UVp1TyslPrRYXwyqLbG50IwsCV0fjiKLA5gYPp/vCJReTSjLCjqkg6uJQjGafbV7p89WgP5RadIV7aTjKA+uCbG/24FBkCprGmf7IklfG9zqr2RM103F1uvlQmJFJaPDaaAs4EDCEnYJOC1dGljdxkcwW6Jua4qpzW8sGFdMeGzMnp26OJZBEoZhZWQ2Rv1N9YXY0e9B1o7dCloyx0p6J5KIGYPva/JwfjMwbOOSrrDmuRnlnLWEGFXeBRLbAty+NrNj+Xro5yUs3J8vel1M1PvH8DY71hPjsLx3EegctpwcjaX75H0+smnvhYiw0KrcUChqcHbi98vY5FHa3+vjeIiZq8yGJAi6rzNlZ42vHukNsqnczkcgymcyxt81HXtUYWCTj0T/DEnosnmVvm49MXmMklsYqS9S4LJwfXF4GY2eLt6wHRLag0R6wo8O8HiYFDX54o/R7ulYlu1cbAZbUpF0JDouE32kIyjktUnGEdyiSYX2tk5vjSbw2paSEF0oaDrhLaSIG2NXq5crw7TLhYiqzMwPJVF5jQ52r2AS5GkFmXtWxKlJJNmeajqCDOo+NRKZAOlcg6LYiCQKpnIokGuZ3uXmyRUt5zworKGW+Frk3xwfucf7z/PAdv9C+fCvEE188e0fVOP/xpZ5VGQ2rBAEYCC8+W78cIqk837s6zoEOP44qx8nA0NFYX1e+rnp1NM5kMked28r5weiCokM1Lgub6l0lJZu8qnOqL8Kl4RihZJ7haKZsCtgiCexr83OoM8C2Jjdee/l1hiQKHOwMcG4gOm8JozeUrrq80T2RXHZq+l5kU4OrommepdDqd/C9q+O8uqsGp1Vm5i/eY1M42Bko6yh6ojfMnlbfgg2J86GIYtFwCwxxu4W4OBRlW9PtskfAeVtVd7XGok/3RWj2zZ226JlMGfLeuk73ZIoTPWGOdoc4PxjlTH+ExAIBUqWlzZncC07Cy+FH79e8BliqNsVyeebcMH/0zKUVSS8msgW+dXGEP/7GZT76jcv8x5lBxmbZOv/cgda7lupbX+dcUXOjhTjeE8ZtV9jSWL0HQN88ol/TjMWz5FWdUCrPgQ4/NS4LPodSouS5vtZV0TSKJIhz3CRzqk4oleNod4iLQ3Gi6QJ72nwl2/gdChvqbis2bm/2sL2pfB28Gq8GMKYYgk5lyf4J9yq5VZx8yqkqiiRwojdEvceG23Y7UDzdH1lQefN0f4RN9dU3EM7WHrk+GqfVP78PjaYbpb9pZmrJrNbCR9X0OSOcM09P1ZYxdrV4GVpC86fLdn8XCO7vV7cGGY6mOXKrfKniTvAPL/bQ4LHxK69dv6THZwsq//JyH5/87g1CM2qR62qcvG/iDJsb3PzXg2288xUdrK918eNb6/nWxdGSfUxfD1crYG/02hZVv1tpRmNZRmPZkga5ShiJZuiqczEYTrG10YOGMS0yFsuUjAWC0SvRFnAQcCrkVJ3TfRF2NHtRJIE6txWbIi5on36sJ0RXnatkv7I4d+U0WxmxxW8vKZtMlyt2NHuwW2QGQqniydW9hBPmcDSLx2bhUGeAWCbP1ZH4fd9ncWsiWbFLb7UMhNNsbnBzfjDG+cEoBzsCXBqOsanBXZGfxlI8dYJOKze4PaGSymsEdGPUcnbPQkfQQb3HxpUZPvA3xuLsb/dzczxBYYV6ocpxui9S9EtZX+sk4LSQyBTI5LVFp6tmEnRaSqTPK0UU4BXrF/dGupcxrc8XYDWsz9M5lV96+vhdDSwA/vzndvG2vS1zbg8lc3z82WsMhFPsbfOzt93PrlYfLqvMf5wZ5E+/dbXsJMK0/TIYJ43xeBZZEov/b1UkrLIxKgfQHzYaH/e2BxZcOVWLJEC91zbHHOlO4bBIVbuWHuzwIwgCV0biRNN5Grw2VFUvGQ3d0+rDbpHIFVQuD8fIFjSafXZ6p4IIv0NhW5OHm+OJkjLI1kY3NkUinMozFEnhtVtK7K4Pds59/7c0uvHYFFRNJ5VT6Z1MLqjdsa7Gidsuc27AuIAtR2AIjF6VjVNGbatx0V0r7G71zZkkWgnK2avbZJFMQcNrVyoquywm3z2TzQ1uhiLpsp+VMHW/26bQH07R7LMzGEmVfEdnI4uwmgaesihgk0W66t2c6Y+UDXwWYluTh1sTySXprdS6rXzjN15NrXtlHV1Xm2quhWZQsQCrEVSAMeL1X//mKGdX4YRSKaIAb93djEUWOdEbRtN0OmocPH9lbtOhKEB7sPREtbnBxWA4TXwqSNjf4S82Qc2+sO5o9sxpENzZ7OXcYJQmr416jw2LLNI7mSyrKzGbJq9t3rTj9H7vJq1+O/3LMEPqqnNyYyyJJArsb/dTUHVO9oXZWO9C1XQcFkML4+SMbvT6qW777U1ezg6Ejbr5SKIkgABDtlyRROKZAvFMft6MQHvAMa8fy3zUu62our5ifTR+h0JnjbOqcb17ifW1Tm5NJFd8MmpDnYtwKlf2c+iqdZJVtUWNrw52BDjeG6ro2KZX/vcKbqtMPFtgT6uXC0MxOoLOBZUyZ7Kn1ceFoeiySqsBp4U/est2Ht7ZuOR93GmquRaa5Y+7gMMi8+E3b+WRv3rprh2DpsOXZ/V2zNekp+mUBBTNPjt9IcNf4DUbagxBo5nd3DkVj10mNiUwVU5P//xQtJjdaPLZOdodmmrumj+oWFfjpMZt4Vh3mIMdAU73h+f8uFfTtrpS6ty2ZQUViihit0hznFyvjSYQBXBaZSTBsI7P5FVujScYjWc52BkgmS3gtVvI5LU5AQVQkQsmQJ3HWnVQMVrm+ZZDOJUn3Bdhe7OHiXiOkdjdyT6tFjfHkxzsCMzrRbEUJFEgms7PG9jdmHrOercNURAQBGMa4dporLhAAKNUtqXRzeXhxc3pMmvUyn4+4tkCBzv8dE+keMW6AOm8jiIK1HlsDC7QeHmwo3pp/nKEkjke+9wpvnGhkT96y/aSJtX7AbNR8y6xr93PQ1vq7/ZhlFCJbPbeNh+hVA5dh1d2BbkxlkBEwG2T6Qg6itvVum6n97onkuyZJSuu69A01Yk9XcOdT0ejyWej0Wvl1kSSY93Gj/pYT4i2gINGb2nj1UAotaJ25EthudYFLpvMwXZ/Wfdah0Wm1mUlks5ztDvE2YEoBQ021rlwKJKhnBjPkl9mI+DdGgMux4XBGOGU0a9ylz/aFefCYGRFU+F7Wn1lg0kwyiJ723yc7AtzojfMsZ4QR7tDnOwLI4oiBzv8xfd3f7u/ooAC4OZYktbA/E2Za5HJZI46j5WhaJbT/WF2tfqodVuocVk42BEg4Ci90G9v8qxIQDGTZ84N81N/+cMV3edawAwq7iK/dXjTmhJCWazx6GBngFN9EdI5le3NHl68McFkMsvFoSjJbIHeyRQHOvx47QpuW+mUwflBo0HqQIcfz1Qz38neCB1BB/6pH/B8Fwyf3VK2BntzPEksnS8JWPKazr52fxWveuW5MBhb1jTD8Z4wL1yf4NpognqPlYMzLqaJbGHORWhDvQuLIvLizYmiR0h/OFUUw1oKq2UXv1SyBcPgqj3opGueMdx7kVReo8m7cqZS2jz1igMdfronkpzqi5QdaYym8xzrCdPks7O3zVeV9oIOxd/wvcLN8SQT8SzXxxJYZRFN1xEEgUgqz7GeEJsb3RzoMEatD3T4V83wcCnNnmsds/xxF9nU4Oatu5vv2ojpbFK5hS8kM9tvcgWNgmZISmdR0TFOLsd7wrisEs5ZF7SCBheGYnjtMm1BBwVVJ5UrYFPEYt32/GCMgx1+TvVFilLVWxs9jC6Q9k7mVE73R0pEaC7d5Z6KdF5lIJyiPXC7kXKpTE+V7Gz2cmVKhGcomqYj6KDWbUXTdU72RoDbKoXbmtz0Tabw2JSqm0aniaTWpj35dBluQ50Lr0Ph8lBs1U74d4qzA9EShcnlcH4wyuYGF1dGSnsEKvHlAGNypBJJ+NmcG4iysd616h4eK0l70MloPEt70MHlkXhJ42Ve1e6IKJv1PtRouf9e0T3G4w9tLHo+3G0Ws82+MhJHkYxjvTme5GBnoHjfzBVSIqvOezGr99jQdcMAqS+UNk5+woyVk2A4hrb47GxtNOyZK+nMNmR4vQCI0t1/P5M5lVr3yq1Azw1G6ahx4rbJ9IfS9EympiYHBGRRYEezB6sscbDDj0WSiGdVnFap+HlVSziVX9OlhutjCU70hMmrGvvafGxtXH3/iNVkOJpZkaxlXtW5MpIg4LSwv92PIgrUu61lS2krzb2WrbitrSEgz3rzQ1VMgyyFjqCDn9vfwu/85JZVfZ67gZmpuMu0BR184VceMJoaBWNFIUCxiUoQYCyW5c+evbpox/ZySeW1Eg3+2cQzBXa3ejnTHyWRLTAYThdX47OzrmcHIkX/iXU1TgTB6Ho+0xeho8aJrUSB8vYPeiKRRdMxJKkjt7ewSMK8UrlgNJNeH42zvtaJIonE0pXVg1eTi8Ox4ijfSnBtNMGeNh+np6Yh8qpOrqDSVefi8nCMZr8DRTJSuK/qCpItaPgcSjGTUS1ddWt/5ZlT9eIUTL3bitMqc2uicr2BtUKD1zZvL8RSCCVzJLIFtjV7ONMfXfEm2nIslulca/imgqCLQzE8drmY7bTIIj2r+B0KOC28/UAbe9t8HFp3/2lWmEHFGmBfe2DRbd60vYG//v4tPv6da6tqztXksy0YvMyMNwYjafa0+egNpec4a2o6NHjsDEYyjMUybGv2cmsiya5WH5IooOtGCluRBKwzxJZujSfpqnNxYyzBoc4A3RNJnFYZt1UuGRW1KyLbmrxT+9JLpIhXS/64WtI5lX3tviVf1MtxfiBKwGkhlMzR6LXSF0qTyBbY1xZA03Uk0QjRZnpszAxEqsFjq16u+W4yGs+yzX1vrZanmS04thLsbvGt6GTJYiylbHI3uTIcK45/C8Ct8QS1biuNHtuqjqWHkjn+/NmrfOnRV6zac9xNzKDiHsGmSPzGGzfgcyh8/dzwigpGzcRvt9DP/CeHi4NRfA6FSCpfnN5wWaSyJlOn+sPFH+3R7hBtATs3xxPUuCyEU3lCyRyaDgc7Sr+GzT4bzT4b5waiKJJIrqAxmsuwq9XLUDjDulonl4djZZvJtjd51tTqOllmnHY5FDSdDXUuLg5GUSSJaNpYgR7rCbGv3Ucqp1HjsjIaz9Lqd+CyytwcX9r7cWk4hlUWKpoKWitcHIqvuvW7KKy8Gqy0Ch3bswWwVptwKo/TIt0zPS6xTAGbIs3pBZlMrH5Wp8ZlZVeLd9Wf525g9lTcY/z3Bzv43YdXpw5X77aiahoHOuafnlB12NZoTHGMRDOc7pvfcEfXjR6KQ50BBCDgtBJO5ZFEAYskoulGV/r0qNbOFi8HOwOk8xov3pgkk9dYV+Mk4DQaDs/2RxlPZDnaHZpXafFOurBWwpWRONubPNSt4Njg9bEE6+tcc3xDTvZG6JlIGfV5hGLGxmkxTpxua3VriFROZXvTvXfiCyWzSzLFmg+LJLCtyUOr347dIrG/Y/HMYrVMJlf2Qrap3l2iyHon2FTvumcCimnG4tk5i5A7IRE/HM0s6vtzr2JmKu5BsivcdBV0Wuiqc3FuwKi9ioKhqNczmZxT5/U5FLonk4vKYL96Qw3DkTQ3xxOEU3k6a5xTJYvSVeS0Rffl4RiSKHCsO4THJuO1K2i6zpmBCJm8VrlIkKCzucHNlZG731MxzYWhGA6LtGI236Fkjs6gk62NHqyySCJbYDKZI5TMEc8WigJg0XS+JCW9vcnDxeFYVeWz1D048jYczbKl0U0iW1iSI+TOZi8WWWQwksYii/gdlhI57cwKvydLLU/Nh9sqE02vbqOh32HIfU+/vVZZWJXvSkfQQTqvVizadi/x8q1J2oMLu7nei5hBxT1ItW5687Gp3o3DInFuMFqi3KjpRjpdFAwxnWSuwEQ8i6pDjdPCjQqMdzJ5lYlkjqDTQq3bykQ8iyxC0GVFkYSiEubglJ7CnjZ/cWUdyxSwSgIOq0yt20p/KE1e09jWZFxEZVFAEAR0DEfDW+MJQqk8NS4LFwaj7Gj2Aca4Vr3HRragEk3nsSkSnUEn8WyBTF6loGpoOivaIDcfqZzK8Z4wWxs9TCayy26cO9k3NzixygK7Wv3zlsYuDMXKen0sxOXhOI1e64JeDWuRy8PxqoM4AThQJnjtnSxdUa6kdbUkwOgSnC5nU+Oy4LErOC0yuq4vSza7LeAou4q2WyS2NnpI51QuDccIOBS66lxkCxoFTV+VkpPHptxzvRqVcuTmJG8/0Ha3D2PFMYOKe5D1tS6ssrjsjMWticSCGvaablghw23DsEqaIEUBTvQY/hO5goZFFrk5lmBDvRtZFAg6LTT57Jzqi9BR4+LycJzdrV58DgVRMMyPtjffbjILOC30TabKjpYaCp959rf7uTISI1vQcVll9rQa2Y++UIqtjW7imTy6rhdfzzSbG9zUuq1cHYnPaTZdDS4Nx7ArEvva/QyEUivalb+pwbNowHCsO8SeVh+n+yM0+SozXmsLOO+5oAIMzZQGj60ieW+XRaKj1llRNmylgnowguyl2GdP0+i1UeOycH4wtiKeK3VuKwPhVNHBU9OM16tIAheGoiUup6FUvli63NHsYV+7n+FIelmvZyZ7Wn3kVO2O/C7vBkduTaJPiW7dT5iGYguwWoZiyyWUzHHoj7+zLFObaiy619c6q7IFnk7nTo+Bbmt0c3FK8ndjvZuxWJqNDW4m4lkavXYuDMWIpo0xSFEQyOQNMS2rItE3mSAy5SGyvsbFeCJLwGnBrkhYFZH+UAq7InFpOI7dIrG9yVOyOt3c4KZnMrmg7PS+dh/dE0l2NPu4MZZYUP9/JWny2sgUtBWbiZ8pALYQVlmgLegknVNp8NjQdB1V1xGAM/1zG27r3NY7ks1ZDSoRlWr02pAloaKR7emAbCVpDzrmZEMWQ5EE9rb5OdU31/9mOYiC8W+p6xW3TabBY6vYoGs+/A4FRRJp8tlXxcl1rfDd33wdnTVrvwRiGord57x8a3JZJ5LtTZ6q7KmDLmtVQcX10QS7W32Ek1l6Q2lujSfY0uAmnMpR57aQzBa4MWqULMYTOWpcVtbVOJlI5LgyEmdHs4dQKkejx06D10E6l0TndpZhOh26pcFN90QKq2xE+s1e65yAojeUmhNQTNuj1zgt2C0yl4ZjxDMFeieTjMUzHOoMGPPqkkhrwM6NscSqNG8NRTO0BRyomkY0vfwZf7FCtapsQef6VHPa7NTy7lYf10bjJeJlY/HsPedEqYgCe9v9i37PxSltmEoCCkUSGFqFgNPvsFQVVGxv9hBK5ir6De9r8yFMjXBfGV5cfVTTDVn80BIVVeOZAvlCao5TcTU0+WxIovGZtPjvLU+Rajlyc/KeCCqqwZz+uAc5vK2h6J+xFKox3BKAG2OLNz0GnRa2NLpp8toMkav+CE6rzMGOADta/GQLGiOxLJF0nsFImvagE49dZmujB79DYTSWYSia5lBngAuDMSLJPCf7whzrDjGeyKLpOk6LhFUW2Nvm49VdQWpcVlr8drY3+XjNhho8dgsb6g1fiH3tPq7Okt4FCDgUAi4rQ5EMNovM0e4Q8UyBHc0eeiZT5FXDY8Jjk8nkVa5NBUirlaDsC6XY1FAa+Td5bWxucNPsq/KEugKBz5n+CJsb5vqWKPeQnHCj14bLJld20W33V5yZ2tvmX3ERqTq3lQsVaCJ47Qr7O/xsaXRzYTBWUdlqd6uPeKbAiZ4wJ3vDKLLIgY6FTdn8DmXJAcU0mYJW4s9iU0TW1zqpcS2sIWJXJA52BhiLZYpBXqXy4vcqL9+aXHyje4x750xhUkQSBTYuw7DKpki0BRyLbwhsa/IQSi7cR9ERdOCxK1wejjOZzJLKFahzW8mrOnlVYzSWLipoWiQRn0PhdH+E9oCTy8NRTvVF2FDvIpYucLQ7hI4hc717hlHYuhoXjT4bO1t85FWdq6MJTvSFafLZONUX5sZ4wigj6DoPrgtwdSTBpgY3+9v9+BzGeKEkQK3HxvjUhWHm6er8YIzdLT5ap1ZG4VS+eI2OpfNsb/bgXmIgF3RaCDjmH3HMqxrOqemQtoCdoWiGKyNxBiNp6t1WDnT42dPqW/D5tzZ6EKYaa2dfNNw2meYKV3yKKJTNSl0ciuG2rq1x3dl47TK7p96ncGrx3h+bLFacgfM7lIou/tXQEXSgyOK8PQOb6o3v7+YGN7F0nhM94YqdQzfVu8mrKjfGE0VjuUgqz/GeEM1+O9uby6ewN9Qt/bwyE7sscrDTT4PHSiavcXM8ueCKfG+bD6dV4lh3qKT0cp/HFMW+ivsJs/xxj7KxwV2Vk+BMpldwlXTHW+exI5+m3mOlI+jkhWvjgJFazyZytAbsjEQz5FQNr12hN2ScDE/1RWjx2Wny2omm8+xs8RFN58v2PMxcHE8mc1hlkbyqYbeIxRr/aDTLwXUBjt4KIQB7230cuRUqmXKYfp172m73HIjCXOXNMwMRBAyjt6tTI6mKJJBVNW4MJmnw2Fhf4+LScLQoGa6IAi0BB26bjFUWEaZk1jN5lUgqR73Hzqm+MAVNZ3uThxtjiRLZ7hqXBXRjoqDcZzEaL50UWV/rxCpLFDStGLS1+h0cmbHi8dhlAg4LDouMVRHpnUgyGDYClI4aJyOxDL2TKfa0egEBRTKmaaadGss1e+YKGrtaVmYkdqVZX+uk2Wfn+9cnqqq/72r1VZTNsCkiHUHnivZSdNY4GYykF/TkcFqlJf3Gm7w2hmNpmrx2DnQYvVN1biv1HisOi0z3RJILoRjtAQcBlwWLJKLrOsmcuiwFTlk03lNNg4vD8TlOt5eGYnMazOvcVpqnmrbLIaxajnBtMB7PcnNKRfh+wQwq7lHe98YNnO6LcHl46XXuxaZHFJEFBVqmm9ZGY+Mc7AhwbSxOZGqF2B9K88r1AeLZAoPhDHZZQEcgU9AYi2cYiWUoaDp9oRRNXhuKV2Rzgxu/w4KmGyWITF6bmgTxIggwmchxfTSOqoPDIlHjshJK5kjnVfa3GyWWk70RnBYJbcbqb7r/RBKNVXs8U2B/R/nRyraAg2ujt1eDe1r9xRPtSMw4brsisafJjSQKXB2JL6hcONOl9MJQjD2tPi4O3Q5K2gKOeU+o5Si3sp5tGhZLFwwvmVnMDFA6gg5cNoVb48mK0//hVTZZWgr72nycHYgyFM1wcCp4rGTd57HLFWUedrZ4GY5kVrw5s85tXfB7IwgsWQm1wWvjVF8EtzWPZ0oEbCyeZSyexWWVmB5e6Q2l6F1BAaZtzd4FJemTOZW9bb7i931Lo5uRaIaLQwt8Dvd3TAEYJZD7Kagwyx/3KPUeG1/8lQf4L3uaqXEtTa1xMRnfjQ1ucgWVAx1+9rb5qJ2hCumxySUn2mM9RqbgQLux7aHOADlV59yA4TK6vcU3pTNhNNCpmo7LIuFzKNS5rUTThmz3kVuTJLJ5NtW7yRV0fE4LTqvE8Z4wNW4r0/2pqZxKXyhFPFtgLJ5FEgVuTfV+dNW6ODtgHNvGOmexJ2Q6G7K/w08ym+dQ51xlRLddLopDKZLAjTIn9nTesFs/0RsuCk1Vyun+CG6bQvtU+ama/pZy2GSR7onqLww9kyl+cH2CwUh60ROa2yazs8VLwGVZc86lmm5Il6dzKsd6wrQHHWxpXDyFv6XBU5H6o1UWV0WZMrxI34JdkZbUvFvrtnJ26nc5GMnMCZzX1bhIr4JI1aZ6N2fLTA7NZvo3eLDDz9WRODZFWtAoMFe498TXquXIfdZXYWYq7mHcNoWPv303uq7z6Rdu8RfPXVtwdHI28UxhwXE2l1Uhmo6XpLzr3UZzpCgKc1LhrX4HTqvMcCzDaCxZIk0tAOm8Bgi8fCvE1kZjpT/d+V7rNiZMXrU+QDidx+dQUDWdq6Nx6t3TOvk6e9t8JHNqsTwxjarp1HpsHKpxcmEwyu5Wn6FT4LVzbSxJR9BeHFedTOTQNA2nZe7Xf7r+DEYm5tgqpPsnkzkEwSjLTC5TW8BhkckUlrePafnuFr+dUDJX7NrfWO8iV9DomUyV9XaphkOdAVK5ArpuTKncGEsseTpgY72h06JjuOHOTKn3TH2X97T66JlMlu2tqHNbOVVGPKwcq9EouK9t8bHUTN5Y1cuSSCpXYCSaocFrQxZFLg5Fy05/ee0K2xrdfO/a/EHQSr6eGpeFzhpjNPnqaGW9HpeGYzR4rMXfVa3byvACuhbVTJ3dq/zn+WH+48wgb9ndfLcPZUUwg4r7AEEQ+NXXrSeRzfPUd29W9dg6t3XeoKJc/9DMFHqL306Tz04yW8BpldE0nXgmz2QiSySVJzKlcjmRyDEYzTA4Nb5Y67aSyavYFInvX5/glV1B0jkVAWM+XhaNC4am6zR4rJwfjKLpFG3XJcGoSXdPGM1fTquELAn0TKYIOC2MJXJsbHDzmg01xVVZwGnlynCMvKrTPZGk2W84qM4mP2WeJYvQXaV2QDVMJHJMJHIc7Agsy6pblpZ/kTg7EKHVb0fTjcbc4z1h9rf7uTAYXRHb9oDTMqd3oVJNjdm4rDLRVP72d9BnY6xMYHa6P0Kd21r8nkzTFrAji2LFuhtXRuJ47fKKjPxC5fowe9v9nJgV0E6LW3ntMpvqPUa2QzCyGnZF4txAhB9cn2BDnYvrYwl8DgWLdPu17mvzl828VcvGehdem8KJ3vCSBLdGZkhu2xfo2ap3W++IZfvdRtPh8S+cQdN1/suelrt9OMvGLH/cR7xldzM/u68FaxXjfwtJDqvawheUkagRJHRPJDnWHeJEb5hzg1HimTz72v3savUWTzqyKLC+1kmL306r3040XeDSVCf7qd4I10biWBWRvmldCV1HFgXG4lkeXBdEFODsQJRGrw1Vv1266Z5IcmEwVlz1Tq/EMgWNbEEt6ks4LDJZVaer1skru4I0eW1zegkOdPiLK8jdbf7ilMhaZiWCCk3H6H2JpDneE2ZjvYsTvWE2N3qQV6DeUa7r/0RvmB3zTCAsxIY6V8mFJpopzNvsOBbPMhRJs2dqJPhQZ4DhaKaqIG7a32JHs5egc3m26vs7FtfNACNzdH2BlX80XeBYTwiPXeb6aIJzA4bM/oY6N/s7Akwmcuxp9ZHKFsgUVA52BnjF+iAn+8IVKeLOx7oaJzuavVwbTXC8N8yO5uWbzS2klhlK5mgPVjaldq+j6fDEF88yWoH661rHDCruIzbWu/nTn93FX/z8noofs1Aj5mKNnAXNkH2ePrlsa/Kwt81PtqBzsjdcrLG6bTLtfjtBl5VGr53RWJb1dc6idXp70EEip5LJazT57ORUlWROxSKL7O8I8OLNSXa3+tB1iiOfMznQ4cdhkYrTIn6HwomeMAXNmPLY3+4nms6xo9lLk9+OiFDSjAnwwLoAV0fjCBiPGahADGklyKrLqxkvtydjmsiMMsG0a+OZ/gj72ud3rK2U+UbmBiOZivVWJAFes6FmTtkgnSssuI9sQeN0f4SDnUZGaCmicfFMgfODUVoDDva3+9nR7MFSZTC3q8U7J/MwH1saPRVlRk71Rtjf7md7k4dDnQFsikS2oBFK5TjdHyGn6sTSBY51hzjWPcn+ZXyWho5LkvMzmlv1FRBGiS1gfJbX9KkpJd99L4IF0Oyzr6ib8d3CLH/ch+xr9/Orr1vP+YEokiggCvDdq+Nlt51I5PA5FP7yv+6hoOp85/Ioz18ZYziamTMSNh/He0KGImY8y0g0gyQKJRmQZLbA5ZFEScPbYCSN166woc5V7FAHSlLiD3QGODk1eXFtJM7Gehdj8Sw+u0wkXaDVb0eWxGJvR5PPxoneMJvqXYRTeSyiwEg8S63biiKJyKLI969NcKgzUHLS3tdmyHN3Bp1cHIqyq9Vf4nGwmkyXW5aKLK7uuiBbMEaCl7rCXWiKIZTM8aquIImMys2JBPF57OzbAw4kUSCZnRuAFTRjBHixUdej3SFkEXa3+CjoGvF0gYDTQjxb4EaFktIzx1VdVpldrYs/7zSVfsotfjsneysb69SBS0NRBEEoNp167EZT7ewemILGkktZHUEHN8aTc1RlK1VwXYhKzMJO9xuj3tNCZSMr5C2y1njb3pb7wgfEDCruQ2rdVj74ps3FvzN5lQ/+33P8x5mh4m1v2FzHOw62cbovzNmBKHvb/DitMq/fXIeu61wajvGD6+P805G+RUcONZ1iSrmcC6amQ0eNY04XfTSdx2WV2dZkm7NPUYCLw7HitEcip+KxKbisMkemmtYEQWA4kmZvm49sQcPvsOCyytS4LXjsfq6OJdjR7OGFaxMl+55ZHtrT6uVUf4QtDR4uDcdQNRiO3jlXxEvDsTl28NXQH0rSGrBXJDO9FM70R5bc/wBG2WChJs+cqhn6IIKhNxF0WckVNAqqocPhdSicnvK3ONhRvvwwEs2wo9l4DxeSUy9ohhbJNL2hFIokFHsQqqHSgHuacwNRNje4uTKycEOj31GdK2dqqjF7umkSDD2Icjgt1YuXBZ0WEtnCHGVaAKu0PDG0eo+1YktzHTjZG0aaanC+MBhblSmWu8WrN9TwG2/outuHsSKYQcWPADZF4kM/sYXuiWTxBP+z+1p4aGs9D22tn7O9IAhsa/KyrcnLL71yHe//wmm+cX5k0efZ337bdvvdr+rkrbub6Qul+J1/P89AuHyZ5SP/ZTsPrgsSSuX5/rXb2ZTNDe5iz4VNFtnR4iWv6mQKKtmCRi6vGSJTBY0rwzG2NXv54Q0jeBiJGpbpLX47A6E0QacFv1OhwW1jIJJmOJIh4LTQ6LVxYSiGPqV74bLKdNY4q9KNWAk0XcfvUCpSgZxNQTOCpK2Nbi6PxMs21y6XU32Vu33OJpVb+OKbyRkXRV03Ov0X7vYvv4rrD6fpD6fZ3eLj4nD5yYj5yKt6Ue21WqpdVRY0Ha9dYWO9i4Kmc3rW92x7s4fzg9UHl3tafdwYTyyYNVEkgbF4ZZ+fTRZZX+fEZTUCnPkWFYuNxS5GrbvyoGIaVTfcZztrnMQz+RVxZr3brKtx8sn/uhdZuj+6EUyX0gVYqy6lSyWTV3nbp16idzLJyd/7MWyLqGUCnBuI8DN/dYTcAnbPsgj72gPUuKw8uD5Ii9/OnlY/3ilp6nRO5Ux/mPFEDl3X+ccjvVwdifOxR3bw5p1NxWN77F9O8dyVMQBeuT7IucEosiAQcFmKF5utjUawEXBY6AjacdkUjnYbBmtdda6i+deBDj+6Di6rRCZv2Cdn8iqKLHJhIMLGejdWRSJbULk4ZAQvbquEz2Ghv4qV4kox7ey6FLrqXEZTXl6jq85JLFPg6micJq+d9oCDvKZxcSi25BFOgIOdfo51V5etqMSErFL7dVEAn8OyqKOrIglYJRG/s/LPURRAlsQF1S3LsbPZy7kqpbsFbpdCZppuSaJAk9dW9Xev0mmSchnE2Wxv9iKLRrPzYoG1RRbRNG3JbqZglFV6ljFhFXRaaPbbuTmWqEhzZC3ytr3N/PabNlPnmZutXUuYLqUmZbEpEvva/Wysd1UUUAB84N/OlQQUr95Qw39/sIMTPSG+dXGE//GKDtqCTh5YF8BRRvcBwG6ReHB9TfHvn9jeyHgiW2KYZVMk/uq/7eM3/vU00XSe7c1eXrw5SXvQXrJ6nU5vb250o+k6378+QVvAQTqnEs8UWFfj5MZ4kuM94aLWxfpaF+cHIuxu83FyqrnNYZX4/rUJDnT4afbZGYyk2dbsLY693mm0BfL2bqtMV72L030ROmsceGwKmg7JXAGbLHFphqrqsZ4cAsZF5Gh3iKFoGlkUUESBgx1+hqOZJQVNiwwClWW20udsuuqc3BirbBJjR/PiFubAlHS5Sr137qqv1W8v+9q76lzF5tRKUaS5zb6VMPNTbgs4iKTzjEQz7GvzVy2R3eCxVtz7c2kwyqHOwFSJT8dllWjxOyhoOjZZ5OJQrKgwuqnejdsqLyjstq7GuWgpZzF6JlPsWGJ2Bgy9l8mpIHNro5tbE0nsikR70IkiCeRVfU3apncEHbyyq4af3d9a4m90v2AGFT9i/NFbty84RjqbX3ntOpJZFU3XecX6mqL64hs31/Ghn9yypGOwyGJZB06LLPLJd+xBEAS+fGoAgBqXld7J2xcCSRTY1eLl/ECEoMtKV62T3pBhtbylyccPr9/un1BVjUxBQ5EEVN1Q86tzWxFFgUSmwKHOAGf6I3TVuWjyWtExVqxtAceCUzGrwXyfSaPXSledmyvDMXa3+oil85wdiGKVBQqqToPXeB/r3FYmElk0/XZAAUZZoclrozeULgoObWvykMgWqrLbXlI6s0x5wGWV8NoVHBYJt+12g27AYaFrymF2Ip6dM/ZZ7fPPzjpsbjACh80NbpwWmVg2z0gkTTyr4rNXPyq6oc5VLM8tlSsjceyKyAPrAlyY0euxGKIA62pd2BWxRPNhIRI5tfid2NfmYyKZK8lGHOwIFIOaq6Nxmn12fA5l3gDUskKp+htjyWX1FE1zaTiOIgmEU3nCqUjx9kr8jVaSXa0+Ag4F25R2iHXqv3aLSKvfCCZaKzRzvFcxyx8LcL+VP+4leiaSvOvp43RPJDnYGUASjPHBrKpjlyX6wikmEjk6gg4avFZevhVmZ4sXr13h5VtGOWRDnZPrY0naAw6GImksskij10YiW6CzxsmRWyEOdQbIF1R0ASRRLI797Wz2kimoVa9gl8ruFl9JEyHAhnoX/VPBzdZGD6JgTOtYZJFUTiWTV4s15Z0tXronkmysdzMUSZeoFO5u9c1Zsc30YKiE6RLX8Z7Qgs2QMxEFqHXdFjCafYLf2+Ylk9NQZJFEtlDMSPkchoz5YCTNRCKHfapMNft5O2sMO+10XuXCrNVurdta1BmRBAi4rHN0R6YvZtMCbdVwqDNAJq9WlD2phP0dfk5W4Fuyv93PpeGll7L2d8wV1QLjs2r02koE4ZwWqWxZYV+bn5MVKpJWgiIJbGv0zvn+rxSzS0QrvWhwWCQe2dvCO1/RTtcKubyuNaq5Ft4fnSEm9x0dNU7e/9AGwNDCiKYLIIjE0wUUWTSmAToDpHPGhfXB9QGi6Tzj8Sz72wPsb/dR77FR57bSUePApkjoGM11jV5bsZY7Ek1zqj+KPCOgADg3GOXaaIJN9S52tixf5GcxrGWaBX12hUxeI5PXONMf4dZEkqFoBp/dgteulFwIdV0nnilwsjc8R/a4nBjaQj0y5ShoxljmuhonlgrF1bx2hfapiYSDHf455bHBcAa3XWE8kWUslmVPm4+uWifrapzYFAlpKtORzqvUl6k5K5IhFT8SzWCfNdmQmXExVHWKmigzuT6WYFujZ0nNfke7Q5wdiJb1j1kKJ3rCbG/2YlvkvT03GF1yQNEecMw7PqvpFLNe02xpLH/xWOkp5ryqc3E4uqA1+nI42h1iX7sPSRRo8dsZjhoTY8ulLeDg9968lSMfeiN/9Nbt921AUS1m+cNkzfLGLfX83pu38qffusJYPMP6Whdj8QytfjvpnCHqM73Cr/fYGAin2d3qI5Q0VvOioOGwSISS+akTpI5FEslrOsPRDDuavTgsEooszdskeXUqU9EecCCKLMm8qxJmCo3ZFZGdLbdtuQMOC+vrnBzvCXOg3c9kIkPQZS1p+otNaTx47TIFVS9ZYZZTLSzne1IJN8aTizaVzrTZPjcQJehUyBY0NL3A+loneVXDpkjUuq1cHo7RVeviWCTM6b4IWxrc3BhPzHFZbfU7SoKleo+1OI0ykcjNaUScraEwEEpzqNPPzfFkMYjIFbSiRooA7Gz1IgmGDbwoGLdJosjJ3tC8pldHu0Mc7Axwpi9MTjVM8mwWaUmByvnBaLEReT6cFqnqhtIDHcbrXsyR9HRfmGbf7WzFchp7qyWv6uQKGnZFnPIIWlmuDsdxWWUcFom8qnOqL7Jk/ZVXb6jhf7yig9dtqlsx8bn7CTOoMFmzuKwy735VJ0GnBa9d5qWbk1hkkZFoBqdVJpfKF70MXrwxybYmD9F0jhtjSRq9trJGRYoksLPFh9+hABrhVAG7Ii8oFwyGpsHeNh/drE5QcWZK9TGayjEUzRQDij1tPkRBQBQE2gIOJpJZ3DaFYz3h4oU06FCod9sYiaZp9tm5NBzHaZFoDTiwyiJ2RUQWKenUj2fyJUFJndu6qB+G4TxrjPIKQnlvmAaPDVXTOT8Y41BngHReZWeLtyT9PH3c18cS+OwKl4bjPLguwPnBKJIkYJFEtjZ6ShpQU/nbQYYiCbiscsk44smeUIlex64WL9+f6q95cJ3xvmqaTjRlSMif7A0jAFdGjOfY1OAqcdnc3epD03US2RxbmjxYJQlV1xmLZ+ZoghzrDhFwWrDJIkPRDFZFWvKIsCAItAfs9M6jO+K1V7ffSqdDwMhWtAcd1LisWGWJYz0h9rb5SOVU3DaZgbBRVjveE666fFYJg5E0G+urb5pdjGafjVq3DYsslEwwddW5Km503dni5XWb6vipnY1sqDczEgthBhUma5637jHc+y6PxMkVNERBIJLK47HLJSvai0MxDnb4gSRj8ewcM6kN9S4aPTYuDceodVtxWRVEUa3IshkouqmulifIse4QWxs9RWVJWQSHIvHiTcMaeXqEsdlnp6vOxbHuEF67QluNk2M9oaJI1fYmDzoUm9/W1xpp5QMdftI5lQtDMZxWmV2tPs4PRBBFgYlF7L031btKLk7lGuCCTguCQFHkbDrouD6WwO9Q6KpzkVe14liorkOTz87l4RgXBmN01rjoC6WIpvNMJnMc6gxwoieEqsOV4TjbmzzGBdsuF9+TaVQd3FYFMC7GN8YS7Gn1cXnE6D9I5lVkWWJDvauo8NkasOO2KWysd5eMqiqSgCwKJLKG4Fo4mWMoGivqX2yqd89x5Zz5+Mlkjq2Nnoov/gKG6JXDIjMay5BXdfa1+4tquPFMge7xBHaLTIvfvugYpl0RCTgtBJyWksBsIerdVvxOCy/dDE3tQyLotJQEDpvq3cVAfTU0FQSBYg/RSlDvtlLvsTEUTSMJwpyR6MFwil2tXrSpIHgmbqvMqzfW8PpNdbx2Uy117rU98rmWWNY342Mf+xiCIPD+979/zn26rvMTP/ETCILAV77ylZL7+vr6ePjhh3E4HNTV1fFbv/VbFAql6c7vfe977N27F6vVSldXF08//fSc53jqqafo6OjAZrNx6NAhjh07VnJ/JpPhscceIxgM4nK5eOSRRxgdHV3OSza5i1gkEU3X8dhldCCWLtDgNX7sfofC/nZ/0fpd1XRqnAodQQcHOwM0eGxcH02QyBawKSKNHhvnB2PYZJF97b6Knn8ymcOhSEtSJqwUUTQ68Xe2eNlQ7y5JQTusEvs7/PgcCrfGE2xtNEb/FEmkyWvj0nCUV6wPklM1fHaF3a1e9rX78TstFDS4NZ7Epkjsb/dzui/Cmf4I25u9rKt1oenGRaMciiTM8YG5NNXgCEaT34EOPzoULzp+h8LlqQtaKGn4rhzvCXOmP0oiU2BPm49Xrg9yazzJ3jY/8WwBQaCYjtZ1o7Swp83wqyhoOheGYpzsDTMYzWBTJA52+lFmpJ8vTU3IvKoryFA0w+n+CDuavSSyBQIOK+cGogxGMsXafV8oTe9kEl3XCTgtHOoMcKgzwAPrgoiCgNcuo2o6iixS77ayoc7JzhZjfwc6FvbRuDQc42AF/RZWWeBVG2oIpfIMTDWmRtN5TvaGOdYd4uVbIZLZAg1eO8lcgR/emGT/rOf22mUOdgY40OFnU727+DmcH4zNK30+m7F4luSMEdIdzd45omA6enFMeDWS/k0++4qWPjprnNwcTzCRyJVtLB2JZTnbH+X8YKzYY7G10cOn/9s+Tn34x/jUL+zjZ/e3mgFFlSw5qDh+/Dif+cxn2LlzZ9n7n3zyybKKc6qq8vDDD5PL5XjppZf47Gc/y9NPP82HP/zh4jbd3d08/PDDvP71r+fMmTO8//3v5z3veQ/f+ta3itt84Qtf4IknnuD3f//3OXXqFLt27eLw4cOMjY0Vt3n88cf52te+xpe+9CVeeOEFhoaGeNvb3rbUl2xyl2nx21EkkclEjoBD4UCHv+gDsK7WWXRJ9dhl1tc6GY5l6ZlMcaw7xEgsw/YmD6f6ItS7raQLKnlVI5rOY5MrDxJ6Qyk6a5xLqqXubfOhiAKtATseu0yNy8LBDv/tf50BMnmNYz0hzg1EuTwcR8c4OQacFkRB4PxAhCsjcdbVOhEEQ9UwnVNp8NjIq/rURdIwBeuZTDESzXBxwAge2qb6QkRRKJZ7JpM5rk7pDVwdjZdt6tzV4puzOk7mVIJOCztbvDT57BzvCZes1r12BZ/j9sjoZDLHrhYv+9v9BF0WTvdF6A2l6KpzMZHIsr3ZU9bTIZzKzbmA5Qsa4VSeY91hds2a8z/THyE35afS6rejo1PjshqmYh0BBAHO9EXY2+aj1mWh2WdoNei6UQrSdJ2CanwGp3oj3BpP4LbJrK9z4XdYuTYar1iB83hPiK2N5QM1t1XiYEeAoNO6qOR3z2QKl00uBsz5gsa2Rjd7Wn0c7Ayg6UaW63hPmKujcTJ5reIJnWl0oHFGo+Z4IkvTrLHva6MJtjR4FtUfWSoraaY1LfNfqSjWqb4IP7e/ha+/95W8aXsDyn2ibnk3WNJIaSKRYO/evXzqU5/iIx/5CLt37+bJJ58s3n/mzBne/OY3c+LECRobG/n3f/933vrWtwLwn//5n7z5zW9maGiI+npDIvrTn/40H/zgBxkfH8disfDBD36QZ555hgsXLhT3+fM///NEIhG++c1vAnDo0CEOHDjAJz/5SQA0TaO1tZX3vve9/PZv/zbRaJTa2lo+97nP8TM/8zMAXLlyhS1btnDkyBEeeOCBRV+nOVK6NvnWxRHO9EdoDzhoCzr43a9coNZl5ehUbTuTV9nW5KZ7whg7tcoCjR47TptslEimRlQLms7xGb0JlbCuxonPoSAIcLovsujJu8lrozXgoGciWWLZXQ5JgAfX1xTlxqdr/1ub3EwmcozGssWa88EOP8mcysWhGBZZxGkRWV/rxmWVONoT5lBHAB1DJnsslsXrUDg3EKWrzoXPrnC637iwWmWRwUiGnokkbQE7Q9FMicz1/nY/gsC8s/4LNW3ONrbqCDjwOxVOT5Wb/A5juqU1YMdrV9B0HZdVpnsiOdW3YVy82gIORmNZZElAEgVssljU3Gj02gznWkHAKotkCyo22RiFPNMXRtUNNdBUTsVhkUlmCwxHMmxqdBFPF8oqfr5ifYCCpqOqcH4ois+uTDmH5vHa5anvlFi8yN9GRxCMLFkyp+K0yHhsCqOxDBOJLB01TjRdZyyWRRQEMgVDsK2Svofp0tb+dj8XBqNLNgebj33thjDcTAQBmrz2OTLdO5o9OK0yL9+qTqxrMarp/1gMRTJ0XKq9uP30rib+5Gd2ViwO+KPCqitqPvbYYzz88MM89NBDfOQjHym5L5VK8Y53vIOnnnqKhoaGOY89cuQIO3bsKAYUAIcPH+ZXf/VXuXjxInv27OHIkSM89NBDJY87fPhwscySy+U4efIkH/rQh4r3i6LIQw89xJEjRwA4efIk+Xy+ZD+bN2+mra1t3qAim82Szd4+8cdiyxNkMVkdDm9r4PC2298tuyIV7bU7a5yc7A1jlQ3RGVkU2NroLVpm723zIWBcJFv8drY3ecppNM2hzm2lxmUp6cxf7CRY47IwmcwyNGsFrkgCO5q9DEfThgmaTSFXUBmKZDg9laa1ygK9k0nsiojbatT1D3T4iaTy7G31MhBOUdB09rX5jAmKOjenesPsaPHhUCRujieKwkXbmz3FUcUbYwnagw5eub6G7183vFZ2tnjZ3uwhr+rsafUTSmXx2BRSOZUz/REKms6hzgAF1ZA7z6kal6feh3P983fRXxqKligz+p0Wzg5ECDgVumqNPoYb4wn6Q2li9gKpXIHNDW76ZjUpqrpe0hy5v91HV50Lv0NBQCCUzNLgtXGqN0y9xzZHOCuUyOG0yshTPQpbm9xcH0swFsvS5LPhd1iwKxIWWSSTVwknc8SzKpFUjlxBQ9N1Xrg2jl0xhNF6Q6kyAcVt1tc6yxq8zRZ4mtaM0Mqs62ZqZwgC3BhPGPbpq+SeWy6rrOsQcCpzgorzg7FFyz/VsrPFy/UVbNDMqzotPjsDi5ghzuarZ4fonUzy1C/spcV/f4tUrRZV53g+//nPc+rUKT760Y+Wvf/xxx/nFa94BW95y1vK3j8yMlISUADFv0dGRhbcJhaLkU6nmZiYQFXVstvM3IfFYsHn8827zWw++tGP4vV6i/9aW1vLbmeythAEGI5lONDu59JQDLdV5mh3iIFwmragHVEUEIDXbKxFFASOdofYUO9CFgUcFpnji6yOAg4FRRLnjPr1TMyVmA44FbY1eTjYaax2swUdj03GZ1eMscUWLzUuK6f6IgxHs1wajnOsO8SZ/qhR186pNPvseKdUHne3ehmNpRmOGrby9R4rmYKOx26hwWMnlingshkX9VduqCGvGmJSLX47bpuxZoik8sWVPUBfKMWx7tuNjucGjLqy3SIxmcxyYyyJIokMRdIlUzEn+yKcHYiWqH+quhG0lKOgwY5W47147cYaktk8u1q8WCSRYz2hot7BtiYPI7EM9R5byXF67cbxN83ST4imCzT7bBzvCU/tx7ggJnMqta656pheh4XLwzEyBZW+UKrYxNvotdLqd3BxKMaJ3jAFzRg1vDySwGWV2dTg5jUbatB14yLfHnRydTRBo3fhGrvRMLow+9v9xbLT7NFNQTAmn6a1NTbVu4mm8xU3XS6Fkz1h9pSRjB6OZtjc4Jpz+5n+CB7b8vv8g04Lu1t9nBuIElqmQdmcfZf5LlTC2YEob/izF/joNy5X7UZrUmWmor+/n/e97308++yz2Gxzf1hf/epXef755zl9+vSKHeD/z96fB0m2pmed4O/s5/i+xb5H7vseeW9tKoFQYaPGoBEIhJrRAOoGUSZANTYCDbtgGgaYlpgu1GiaoTAaMAE2iAY0I6koqapUVbdu5s393twzY9/D9/X42eaPz/1keEbkdpeqvFXxmKVZRsQJ9+PHPc73fu/7LN9J/PzP/zxf+MIXwq8rlcpeYfExwKGBBP+fq0vEDY2mI2b93d1xRFepNB0+c7CPr3VSUGemhC3yhalMGIveTWbM19o91sdxQyFhabsy7terNp/an8N2Peq2x0q5SaHuUKj37toPDsR5Z7740pbBE9kI+ZqNqSlIkkTc1Lg4aeETsFJq8XirTlQXPg9z+QbnxlPcWi7zYL0WtnvXyi0ODsSotmpEdRVdFYFZ3QAvsUBWiZtqSOa7tiByUaC+SwfmSSGRjjy5WR8ejHN9ocSZsRSPt2rCpGwbvvWwwCf3Ca6I44OuitcU0xWiRu/t5+ko61zMYH9fnFLT4fBgnPVKi2LDodH2WCo2OTacEN0oRUKRJD5zINexMJc5Opyg2nQYSlpcnitwekxco1zMoG67yJKE6/fafzueT39cJ2FqzOVFjsThwTgDCZM7a5WwcyBsvZ+tUtB34VycHk1haDJNR3B5bq88GQspshSG4QGcHRdjr2PDCRptj4SlcW78/cfPvwwC4NpiicODcSK6QrnpsFAQ48NCvc2+vmhPBo/jBZwZT7z02HA3XJjMcGel/KHmc8RNlQP9MRRZeiUb+qfRdn1+5euPuTJf5F/+mZln5hrtYSde6UpduXKFjY0Nzp49G37P8zy+/vWv88UvfpGf/umf5tGjRzu6Az/6oz/Kpz/9ab761a8yODi4Q6XRVWR0xyWDg4M7VBrr6+skEgksy0JRFBRF2fWY7Y/RbrcplUo957P9mKdhGAaG8eGRhfbwncFf+L37+Y/XlzE1GUWW8IOAlKVSarpoipDXfe3+JhOd1rXvBwylLDYqNkeH4li6yu3VSphWaqjicYIAmo7/XAnf3Fb9hS3W7sL1suQ51w8wOyZHi6tNRjMWb88JN8vHW3U0RWIiGw13rlcWSpyfTLNaavbYLG9VhSyTAI4MxklaGl9/sMWB/hgLhTrnJtJYmsxSsUk2aiBJwr/iaSiyxOXZopB4zhe5ulAkoivs74tiair1tse1xRKpiLarJXi+7vBos8Z4JsKV+SJvTGeZy9fRFQlNkdistTg7LkzLLk5l8HzhDnpvvYos1Yl3OjFTuSjVpsNyqcl0LtozTlAkSEaejGE0WSZuaWzVbcazERRZYjInxhJ9MYOlYpOa7TKUNBlJWYymLaothxMjKWxXpNneX6tybaG0g7/wIpJuZZdR0OO8IDnqikwQwOHhhDDaQqLcdGh2IuKzUT38/fdWKsQMhaVCg4bznTGiurtWDaXY/XGDiWyEG0vlMLhrO1bL7y98bzwTwdRkLr9igNrLPvaH6Z/xznyR//5fvsP/+ycv7PEsXhKvNP74vb/393Lr1i2uX78e/jt//jw/8RM/wfXr1/mrf/WvcvPmzZ6fA/ziL/4iX/rSlwB48803uXXrVo9K48tf/jKJRIKjR4+Gx3zlK1/pee4vf/nLvPnmmwDous65c+d6jvF9n6985SvhMefOnUPTtJ5j7t27x8LCQnjMHr43MJGN8mPnR1FkYVrUFzcYywjZ4I3FEnZn/p2KaBwejHNloUhfzEDpjDSuzBdpbmtB265Po+3RdLwXmmKtV14c293le1xfKDKYMJh+jh3xseEEEnBjUfARCg1BChxKmqGD5PGRJH4Q8Ml9mVBSGdGUHYz1QqON6wXMFxvcWCrzYEMUTQ82ajQdnyvzRVqdounGUokbSyVipkpfrLewHogb+AiJpzj/GI22h94xSOqi1HC4vljaYV19d63K6bEUK6UmxztckvVyiyvzRU6OpuiLmaJLkDB5e7bQ8SFpEzdV/ECkOgLMbtU5M57mxEiCvrjBJ/ZlOTwY59hwgiNDCQa3WXk/2qxxbaHEndUquiJjuz5xU6Nmu/QnhOLiTKfDoyoSAZCL6nzl7gaOFxA3NBFC5/rh84fv5wve77trVQ70944MGrbLVs2m3HKwXQ/XDajbHpfmCtxbr5LtXPN8vc2DjRrnJgRnoWZ7jKQtSu/DSOv9QJGlsKjZqNpcnhMF5G7Pv1hocmjw1YygZqYyLBcbH0mmzvmJ9AcOJtsN33yY58//66uv7GT6/YpX6lTE43GOHz/e871oNEo2mw2/v1sXYHx8nKmpKQB++Id/mKNHj/In/+Sf5B/8g3/A2toaf+2v/TU+//nPh12CP/fn/hxf/OIX+bmf+zn+9J/+0/z2b/82/+7f/Tt+/dd/PXzML3zhC/zkT/4k58+fZ2Zmhl/6pV+iXq/zp/7UnwIgmUzyZ/7Mn+ELX/gCmUyGRCLBz/zMz/Dmm2++lPJjDx8v/IGTw/z8f7hFAGFY0ImRBKoih211Q5PDAKh761UmspFnOm++DF42iKpmu5waTSLLEjKgKPIOMmFMVzg8lAhb3FO5CJfniqFd9GDS5EB/jICAfK3NXL6OqSXY1x8jYWrcX6/2OEx2cX2xyOlxIb3djVzYvTbd4slxA8azEab6omxWbVqOSzqqo6syc/kGy6UWM5OR58r/Ls8Jzsp24t21hSKHBhOUGm2GUiaLhQaOB1fmixwZEsmh3Vb6cqnJetVmMiuex9QVjg7F0VWZiKGQb7TRFJl6WxhpjWUiNGy3x5rb0hWoi/HM/Y0abddnZirDcFIULgf7YwRBwFDSYiBhUrddLnUWpIVCo6cbkY7qvd2ql+g49ccNYoaK4/uYqsK9tSrVlksqomGqCromc2+bMubxZo0Lk2khn5WkHhnt7Y9goXwWPD9gJG31dCaeV9DEXmEscHI0+YHGJc9DKqJxb+2ju06/fXeDP/G/fptMVGejahPRFf71T13cleD6/Y7v+KBIURT+y3/5L/z0T/80b775JtFolJ/8yZ/kF37hF8Jjpqam+PVf/3V+9md/ln/8j/8xo6Oj/LN/9s/43Oc+Fx7zx/7YH2Nzc5O/8Tf+Bmtra5w+fZrf+I3f6CFv/uIv/iKyLPOjP/qj2LbN5z73OX75l3/5O/p69/CdwX+9s0E2prFWtonpCk3Ho9hwSFkq+Q7H4dFGPZSPFhsO+/pkPD8gG9V3be++CNN9MbZqu98kFQlOj6c7Y5SgM0rx2KrZPYv/hck06xWbpKWGBcVQ0mS93GIgaeJ6Pi3HQ1Hk0J/i0WadiWyE64slTowk8IOA9arNocE4d9eqnBxN0nY97q7VODGS5GrncUdSFjFT7VEmFJ8ixxmazLvLlbDYGE6ZvLdSYTRtYakSTTcIuxMT2d3Z8X4giIbb4fqwXm4xkjZxvSDM0rBU4V6pyPDGdAbPC6jZDv1jSVquTxDARsVmqVMoTvdHUSVJmH8NJ0mYGgTwsNwiHRGOkwMJE0uTGU5atF2PqVy0s6g7WLrCqdEkqizTcj10VebOaoUjnY7HZqXFaNqiZruc77haNtruU6/vxVXFRtXmwVPhXVXbDa3Q9/VFOTQYR1dkNms22ajO3bUqmYi2w6J7JG19x9JyQRB3z0+kub5Y5EWb85vLpR5ezrOgKRL5F7i2fhC4XkDrIx4Rbee0/K0/cHSvoHgG9qLPn4M9n4qPD/70v7jMNx5u7dqizEQ0RjMRbi6VOTacoOV46IpMsWFTabocHxE5D4os0Xb9UH76LCRMlfFMZFePg+3oFha75UV00fVyGEyaofnTSMqiajuhBXlXunp6LMn1xTIS8Mn9OQgCSk2xUPp+gKqICPHlYhMkET4VM1X64yaFuk1UV6m0XNIRHc/3AQlNBdcT8kFVkbgyXwzdM7d3GyxdYV8uGr7mqVyU8bTFRs0O5aUgTIeSnXTVff3RHZHknz3Yx2a1FQZ51dse6+VW6OFxeizJ3FadUue198UNpnIRJATHZbHYoNRwMDSZuu1yoD/Gw806iiSSbRfydY4NJ/ACiWsLxTDPIqIpVG2XpWKTpKWRjeosFBpYmkzV9kL/D0uTsTT1uUqE7vuwG44Ni/vEq7Th0xGNUsMJGyBP5548/fV3CocG4mxUWz1247mYznQuRr3t0mh7qLLEWqX1wqLiw/SgeBZOjCR22G1/FIibKt/++d+7g2j8vYyP3KdiD3t4nbBWbvHbdzee+fNCw6HQKHNuIsW9tRptz0eTJZIRjam+GJs1m+VinS6t4tRokmrLRe4kZ9VawkNhOGUxl6+TMLUXFhQg5JbdwKJn3lQ7K0kuqodFxXjGYq4QUGm6HBuOc3muwGDSZKNqh14V33i4xRvTGfxApDveXC5zbjxNwtR4rynObTIbJW4o/G4nWAvEzFyVwe66TmYsNiotbFd4UWy3497ebRhNWUiSuDZGx3xKcBxSjKYtBpOiA/Fwo0qx4XBgIMb8Vj1UvHTHOxvVFoWGw8PNevhcM1OZsKi4vlhmZjLDZs1mdqvOZtVmNG2F/h0SoljqtuQN7Ulq51KhgaWrbNUdZjfrRHSFluPRFzNYLjUYy0SZyES4ulAMx08HBxJcWShyf73GDx7q49FGjYXi8wmIT9NsZAnOjKUoNJz3NdN/OiPk9molJEumP+K2/vNwb71Kf9zg5EhSjJ1qgu/xrO7cs5CJary7/HL5Oh8E+is4434Q/LHzY99XBcWrYu/K7OFjj693pKLbYagyp8aS1G0XVZG5sVjmynyJvpjB+ck033iwiYyO4/m4nk8qYjCSsmi0PfK19g5Fx3DK5O5a9YXR1DFDYSQVIWYoqIqMqQnnxacbgidGkmxWW8wVxOLW3bkbqsx7qxVOjCTxvIClYpPhlEXDdombKivlFsvFJhOZCJdmC3xiX45LcwWODz/hY5wZS2G7PtcXuxJRMVJJRTTqtvBqODQQJ2ooWLrCQMLEcX2CbU2e06O9TplJS+Od+SInRpJsT37oHrP01ELc7XBcniuSiWoU6k54fhenMtsKqMiOOfvN5RItxycT1ZjMRtmotjg3kWKz2ma13OTocJK5vAiN2+wUWgv5BsNpi2sLJbZqbc6MJTvjIkGYHEtHqdsOINF0fBQJdFXm0WaVTEdx8Tv3xOdoKGGK4kuRUBUZTZGIGxrvrZSpt72edNbzE2kWCg2ufMiJnbmYQbXlMJgw31fa6YeFjarNRtVmIGHsytl5GUznYh+pHLaL++tVFEkU8x8lfvBw/0f7BB9z7BUVe/hYo+V4/Mu35nq+J0lweCjOpdkiSUtlPPNEbbFZs/nqvU3ipspgysT3g3Be3Z13f2p/bkdRsdKRam69wGr74EC8R9L2tDfFUNJkPBOhUH/ih3FxKsNWzcZQJTw/oGG7fPNhnripcnQo3pndSqwWG/i+z/mJNE3Hww9gdlOkdy4Vm5ybSKPKwtzr5GgSEHPgmY6sdKHQoD9hEDXiPSOLLk53zI9mJtPcemrH3R0f66rE460aM1NpPF8oMgov4KNMZKMU6uKa7OuL9nRsxtIWLccLr/3FqQyO57NWEcRS1/OZzET5xrZU0turFTJREZi2VGxyfbHEvj6RPnp+Io3rC7vs6b4oMUPj7lol9M/41P4cliYTMzSm+qJcmi2Eluau77NUbBIQkI0ZLJeayJIUnltEk5mZzCDLYGpy6D/yUeD2ShlNkV6qI/Y6YiJjMZi0kCW+Y6Obasvl+HDiI71mqixxphM+tofdsVdU7OFjjd+6vd5jmjSVixIzFG4slumPGwTArV1ar9WWyztzxTDIa7Mq2u2HBuI02mJnOJGxaDk+61Wbw4MxYoaGpkhsPKP9e34yTfGpBXa52OSN6QwN28PUFfI1e8cYxOsUNl2Ph6lcFFWWSEU0HmzUKNQdzk+kycQNFEninY4x0sEBsQu/ulDiyFA8HLXMTGbClMxLswVuLJZQJEJeybPgeqJV8WhTtN23y2y71/jKvEj+7MZIHxyIvbComNuqkzAFn6MrV/zkviz1tsu3H+eJGCJl8/JsgZbroSkytZaDIkvomsJapUVUVzgwEKft+vTFBKlxO6+h2GhzYjjJndUKhc7OPhPRQWrRaHsMp0wyEZ1Ky+HAQBzfD7g0W+CN6XRPhsXFzjVLWFrY8Yh28kgaji8cS5FoOSKMrmu1/WEjbmm7Bqx9HHB0KMHjrVpIOB3pBAG+jFLqg+Kj9pI4MZrcM8J6Afauzh4+1vh3lxfIxQxSER3X80PJqCoTLgbPw7XFUodcKFwi761X+eS+LG9OZ2k6LkuFJucn0txerdBo13Z4MGzHYqHRY2FtqjL5ersn+2Nf306PCrnTBujKGMfSJuWmy2bVplB3RKx48GTU0GXmx02V4VSEuKGgyjIXJtN4fsD1pRJt1+fhRhUJ4bvx2YN9fHubNfduSEU0Yro458ODcVZ4ct7qNomlH/iMpC2Wi008PyCiyTSek4VRbDjMTKW5NFukL26wWWszu1UnoqtEDKEcuDRb4Ac6rqeHBuKossL+gRiXZgukIhoHBuKosoTX6cRoioyEoKScn0iDJFQZ3YJiNG0xlDSRJIlLswVajs9SqclAwiRhqjgdHsbNxTIXJtPYrh8+3lDqychhudQiaqhM56JoioSmyiwVGuiKcGyczzc4P5HmxlKpJ4jt/WAiG0GVJaHuyUQ+lkVFVFcot5we+fJyx/30O1FUfNSqg4tT2Y/4GT7+2Csq9vCxRLnh8Mtfe0iz7dFyfSotp0dhEekESL0IjhcwlDRYLT8Za2zVbO6t10ICouASJIjo6o5wpe2ottyeHAdTV5jORbm1XA4XHFmSGIgbWLpKMqKiSjKyBBen0rQcn9NjKZqOKI5ihohwlyXwgaNDcQp1B1mW0GSJiK4RNRQ0VQ67MZmoTtv1GU1b5GI6+/tF2JrtesR0lePDUZZLTUZS1o7W/UKhyWgmSkxXeGehhARcmMoQBAGWpoTFQ0RXubsmRkaPNoXzYsOxyUR0MjGNhxu9hZwMzG41wvPrixusdGzEx9IWEV3IaWstl6iucK8TL359scTJ0SSLhQalRpu+uMG7y2UC4NBgnBud1NWHmzVKDYdPTGcZTpoYmsLsVj3keZwZS1FqtMnGdFYrNvfWqpwbF1wT2/XD8dSB/lgnnVSQX/vjBn1x4TTqej5zW3WGvABZkkJJLIgR0/7+KNmoIcZXbY+1SnOHXfuLEO04u54bT+2aK/NdxUuu1vv6Y7t2wyz9O0OiXCq+f2vul8HzNhV7ENgrKvbwscM3H27x5//11R3JmPv7o6QjOvfWqlSaLpVmjQP9MeKmuiMIazvGM9GwqDBUCdv1OTYc572VahhqZagKb88WGE3tHiYVNxQsXQ2LCk2WKDUcri6U2NcXpdH2WC23Qu8CXXWo2SqleluYOw0n2aq3WS42OT/ZdVN0GVcjqIrMNx+KLsN0LsKNhSInxlIokkTDdnsWr5ihEtEVRlMW354toEhCKjqWiVJru1i6wmq5xVpFWGNv53802i4LhQb7+2OcHU9RtV0MVQ7VI31xA0V2cf2A48MJYeYlSUgSjGcjPNoQOSNP4/xkGkmSyEQ0ri8UycR0TowkiRsK3+qMHqZyUdqecDE9NZrk/kaN06MJLs2KNNmtmk3CVDkxmkSRpDC6fbNqU2o4aIpEqekQ0RUebsuoyEZ1ZvN1Sg2H8WyEjYpY8DZrogvgBUK9oUgSQ0mTrZpN3FRpdELHHM/n0WadEyNip/2sztfDjToPefIzXZHEKGWuwMuK9m23M2L6kEmfHwbSUT1U6OyGhKWyvy/2TIvsd5fLXJzKcGetEkqlPwr4H7Hp5d/6z+9xe7XCHzk3ykDi+cFy36/YKyr28LHCV+9t8D/8yyu0vZ13j4cbdQ4PyhwcjHN3tUrNdsNFvC9mMN0X5c5qhco2Tf25iVRPBsF0X4w7q2KnDIR+CV3ipqrIzEymubrQawx0fiJDw/E4NBCj3va4u1blzEiSe2uVUG3hB0HIoG+7PmPpCAf6Y3gBvDNX4OCAsDxub2sdZ6I63W2iBMRNjQODKjeXykxkIiGJMDz/XJSv3t9kqdjk4pSw8S63XDw/oOX45Dst6CAQSZNdHocqExZpD7eZNj1YF5HbN5bKbFZtpnPRHlXI06i2KiQsNVw4zo6nwuTR0ZTJkeEksiQMwe5v1JjpEDPjpsaVuQJ+IDgmmYiOhETSUvH9gCNDCUxN4dZymbrtYmoyrh+ELfWToyneWynTcnz298doux4LhSaGJrNSajHTCY8bz0RImGIs9tmDfTQcj4V8HQkotxwebNQ4M54iHRX8i7urVc6Mp1gtt3bwZZ6HtheEabjNTgDa83BsOIHn+ehKbxfkdUH8GYmkliZzbDjJg43aczM3Wo7P27MFhjvk6Jr90RhVvYwx2QfBfL7BP/zNe/xPX77Pn3xjgr/+3xx9YRbM9xv2zK+egz3zq9cLbdfnh/6nr4U23Luha2L0LLw5ncUPAu6ti+CkpxfImclMT55FNqoz3Rfl8lwxXFwBBhIGo+kIV+eL7OuP8nizjh/stO62dIXToyneepxnNG1RaTq4vnD/8wPh0XBzqcSB/hgRXQ1NuAr1dvg6Dg/G2KiKLIy4oYbs9qc7DdvPv+uLMTOZDhf1qK7QaHs9nWxFljg/kaZmO2Gg2tOIGyoDSbOn2HgeLkymmd2qM5gwebBRw3Z9jo8keHe5wuHBOEvFJkeHEpRbbe6tPXnMpKVxoP+J/LDLtC82HB5u1Dg6lGC13MTSFDw/IBnRmM/XOT6S5P56LTRg6osbTGYj+D5EOj4dhwdjLBWaHBpK4PkBQSBCyx5v1fnMwRx3V6sMJk0MVcb1fK4tlpnMRhhImFyeKzCcsl5YGDwLmiJxdjzN5U7R1MVYxsJQFVRZImFpobQ2aWlkojpxU8VQZZGo6gW0PQ/PF0WX6/t4XoDj+zhegOv5tD0f2xVfy5IopNNRnaiuoCgyQRAgIdJYFwrNV3KR7ZJ+QRS607kobc/n7lr1lTMxPkojrExEC3k13wn8yMkhfvHHTqOrrxSj9bHDnvnVHr4n8a/fnn9uQQHdWOrd0RczuLogHCMVWQoLCk2WODWWYq3S6ikoQAQ85ettNEXqyX9Yrwi77bGMRdPxw8VClXtvLpossVQSv7dUbDKUNCnW20znorQcj4cbNVqOj6UpXFsokoqIbIGkpfHGVJZiwyZfc8L46ctzRWJGJyfkKdXByZEkt1cr7O+LsFkV7f07a1XSEY1iwyET0zkUM7i6UCJmKMRNldWyTb5u05s20Yuq7dLK1xlMGD2x8M+CKkts1do9xVVEV0laKuuVFjXb5VInjhzEyObkqHBD3M7z6BZfDzdqaIpE1BCR3JPZKNcWS2E7/sp8KSR5GqrMwX7h+KjJMm/PFkiYKnFTI0AUBZWmw+OtOsdHxM1RQsiJgwBG0iayJHF+Mk2t6RAEAX4AKUt730WF0+la7O+PYbsea+UWRwYT3HyGIVS56ewY7b0qjo8Ip9bnjSwGEgZDSSvcaT+9v9z+peOKDtBauUWh3n6h4ud5uL1SIaor1NsffrfC1BX4DhYVv35zlWrL5Z/+d2f3VCEd7F2FPXwsUG05/M+//fCZP5cQltcrz4ljrtkOx4eTPN6q9RgK9SeMF/oN7O+LcWdt505+Ozm0G02+HZWWS6sTZnVpthCGlz3crPOJ6SzfepxnpjOmaHsizGksHeHKQpGAgHvrNSTErvbGYqkzDmFHQXFoIM7sVp2a7fJw0+UT0xmyMUOEWFka99arOG7A1YUSmiJxdChJvm4zMxml5XrPlZru64uSjRnIiF3qQqGxo30d0xUmcoLk6fkBp8aS6IrYZRcbbS7PFpBlCUMVZlLjmQjRTg7H7ZUK33pUCGWl25c20d0Q0tmYoXJ0KEG15QiiqqFgaQqGKtNsu5wZS6GrMt/seFqcGUvh+QGVlhiDmZrMe8vCEh0ET0ZALKpDKZPri2UOD8ap2x6VlsNAwuTceOpDyXl4uFFDkyU+dSC362fpw4TyEufbLYy/06jabk/n48PESMoKPWW+U/j6/U3+u3/2Nl/6P82QjGjf0ed+HbFXVOzhY4F//87Sc3dHwrwoCHeTmizhPEXMbDo+Vzp2z5PZCIYm0iOXSy2ODSeeabEc0WQGEiazW3Vaz2n19sWNHUUFiLGNRG8L2VRlbi2XmOwQHG3H41P7c2zVbJptl5OjSTZrNgf6Y6xVWoxnIiwWmoxnrB5/BkuTOTSY4Pq2vBJNkXi8VQ+7CoMJg6PDCR6s11BkCVNTkCSh3MhE9V0JrMeG49huwGjHZfTpBWA4aTKQMDE1haVig8ViM7x+TxsQnZ9Ik43ppCManh+wUGjwaLPOo83ea3VptsDxkQSlhkPUUEWBEoj4+gBCxcmx4QSOH1BuuqGpVS5uhuTNmck0hXqbm0slTo6mqLZcHm7W6I8bHByMcKdjxqTKEookxgHHhuOYmkI6ohHRFYaSJr9zb5NS08EPAnRFoT9u7OCwvCocP+DyXIGJbFT4aPDRmEO97llX99aqqDIvDCx7VTQ+gu6HoUocGkigazKuF/T8rXVxdaHEj/3KW/yJi+PMbtWZy9f5wUP9/OQnJj/083ndsVdU7OFjgZchQ0U6srWZqQxX54scHowT0RVuLpV23Lzm8sJroBvo1c2YaLS9HcXL0eEkX72/yWDSZChhoqsyjuczt9XoCZ4qNdoMxA0mc1HyNbtHhRAgFs3PHuqjbrvM5RsMJgzipkbb82k7PkvFBpWWw6GBBC3XZSRl0Wx71Nsuvh/wyX0ZvvnoyeKuKRJDSWvHTc7xAvriT0YVaxUbQ5XZrNp86kAWXZH5yt1NJIQj5ljmSdro/v4ouqLw3kqFU6PidW+X0XW9HFbKLWGRPZVh8amxwNO5CO/MFzk3kebeWuWFBL3N6pPd86mxJLeWypwdT4WKiDemMnx7lx2upkicHkuhyjKaKlG1XbxA+JAkTBVDFc6YE9lIKO+1NJkz42mudFxH6y2HYsNhMoDfubfJ4cE4d1YrHByMY+nCkOvDQM32iBlqyCs40B/D0hXqtkvT8Wi0Peq2+4F8L+TXvKooNx10pftp+vBwb61KTFeofUjFxf7+GMvFZs+oan9ftOdvO3zu9Sp/8z+9F3799fubXFso8kt//MyHci4fF+wVFXv4WCAXM154zMP1qiAmdm7Wdzst5kxU40B/nFtLpR6TprYXcKsT87x9/PH0193dz1q5xVbV5vBgPNyJn5sQi5ImSyyXmpwcTXFjsUS97YUW3Van7X6gP8Y3HmzhdjoDDdvl6FAiDAQLz8v1sJ0ARfK4vlhkZirLYrGB9ZRb4Nnx9DMJb/ZTVVSj7SNJUGq4oXTxxEiSm8tlDE34aSQsNeyCTGYj3F+vMZWL9qhjzoynyNfaWLrCYqHBWrkVGlt1sT2x0lBlLF2h5bgcHU6+sOXdLehOjSW50TmX1XKLw4NCPfNwvcLFqQyyJJ4nYWk82qiFahZZehL41SUEVlouF6cy4evIRHXGMxbllsu1BTFS6spmL05laDlep0CR2NcvgtGcVIR9/bEPLQXz5lKJpKVRbjo7ItIBTo4ksHSVB+s1To4mCQio2x6yLD3zGo6kLWK6Ssv1MFSZmKFSsz86+eYHgfYRqVxcP+DgYPy5SpRXejzP73HsBUhFdODFPiJ+AP/7jRX+2n9z9KXuX98r2Csq9vCxQFfi+TwcHEzsusgW6o6Q9/XHWC03e3bLAWInPZmNkIsZyJKEHwQ9Kg5l21O7fsCDjRrDKZOVUoutmthVO37AwWykQ+wLGIgbPNyocXZczPkvzxWJGAquH3BiRMgjiw2Hy/NFPrU/x6nRJPl6m5ihoCgSOKI97/pifNLlbpybSHFlvsThwfgOUmkX45nIDtqlqctMWhGWSw0KdYcjQ/GwRb78VKchE9VotIVnhK7I4SL9dLEFYuQjVCZCdSIBs/k6qixxdDjB3dUy07kEVxdKGKpMNqrvUB2cHE3iegGLxUZYkNxYLPPZQ31sVMR8PKqrNB0PQ9e4sVgCSRQH99arnBpNEtEVPrEvi+cFmLrMSqlJuemEYWaNtkc6Kt7TtutzfbHM0aFeFvvJkWTHrVMiGzMo1dvhuCuiK+TrHx7/oOn4HBpI8N5qedeOhOeLsUyh0Wa+UGd2q8HhwfgzVQaHBuMs5OssO00OD8ZDXkl37PZRx46/KuKm+lxzsJihcGgwgeP5bHW6iBtVu4cs/SysVVodv5kPVrQMJU3WKjv5Ge/MF1+atBwE8Dt3N/ij58c+0Ll8nPC9rYPZw/cMnndT1BXppW6cDzZqHBtO7vqzmCFcHS/NFXhnvtijXHg6T8B2fUbTYmSw1TFJmpnK4PpCx35iJMlAwuTAQJxKp6Xu+QGmqnB4MM699VqYqzGdi/Jws0bT8ai2HExVJaaruL5QqBwfTnRkqUn29UWptFz64zrlpvNMUyVZgnvbZLUxQ8F2fIJACm/kkY7r5NOYykUZjJshd+DeepUTIwnOjKW4sVTqOVZXZe50Yrm7cd0BogPyyf05ITf0xAJ6upOcOvSUeZgsiffvwXqVsbQVfj8T0TvBbxq3V6tcXSgSM4Wj6YnRJJamMJ2LcWggToAYV6xVWgQE3Fwqs1G1yUZ1hpImnz6QY26rRr5jXtXdvdfbIruj2hlrdEdsjhcwnrGYzAk30+k+oTZZKLw/9cezcH2pJLgV0V7F0mjaImoqbFRtPrU/F7qRwpN82JmpDOMZi8ODcU6MJFnI12k6PpYm90h/A9ix034dsJtJWtxUOT+R5sRIkpbjc2W+yM2lMivlFpfmii8t21wptTg1lv7A57habu0oPLsYTFq7fn83XPkOJLS+TtgrKvbwscDX7u2MNwfELtVQX5pJfnetiqbsnDc/zQPYjt2ip++tVcnFdOptj9mtOpdmC9xfrzKRjbJSanJrpcyl2QJzWw1sx+sUHQExQyUT0TB1hYG4QX/CYK3c4v56jeGUhR8Iv4HZrTrffJSn2gnWUhSZR5uiAxAEzz/fzarNm9MZLkymuTCZ4chggpGUxXgmQi4mFjBJkqi0XDRFyCcvdP6tlpuoSu9t4dZyhWuLO7MtpnLR0OSqZrv0xUWL99Jsga/d3+Rgf4zJbITHmzVUWZAHF/INjg+LG/WZsRT7+mKiDS5BzNToixucn0gzkYuErwXgzHiapWITSRLFYc12ebxV4+5alaiucmosSbHe5tJckf39MTzPx9JlKk2X332wRS5uMDP5hBtiajKZqEG9JbgLSUvl0VYNo7NwXZot0nREzHlfTPhezHwEFs0PN2ooksR0JxNmJCXs1beqbQxVeEuMpCxmJtO0PZ9cXGdmKoMqSywUmtxdE0Ztzc5Y70B/PByvdfEqpl3fKTxdIMxMZWi2Pd6ZL3JrubzjNRwajD/Xf+ZpXJ4rcKgTuLcb9vfHODeRIvoC+/BbS2WODMV3fN94BV+K7zfnzb3xxx5eeyyXmtxb3ynBOzWW5N3lyjPtt3dDuemEI4TtWN+lzdnF0zvJ7uPEDZXzk2mabZeIruJ6Pm897g3tsnQFU5O5NFvgwkQa2/NJR3URub5VY7o/ylQuyuxWHV2RWS23UBQZS1M4M5ZgudSg1fbYrNrhvH+6L0YQBIylrR6S5EDCYL1iM5A0eeuxaOM7XkDcUKhuG/l8+kAulJA6XsDVDlGxm9bZeMmdbdLUUCRhdQ1wZ7XSo5Do8k729UVZLbV4YyrLSrnJuysVTo+lUBSJBxs1EpZKOqKHhWFUVxjPRogbKkNJk7ipIknC56PrgrlWbjGYMElHdObz9TAR8xP7svh+wMlRwWc5OZpiKGkREHBjqUQupmNoCuV6m2sLIltkZjLDvfUqp0eTrFVapCM6WzVbJJ+OJFFkQez9qObimzWbSqvNzGSKYsPl+mKZk6NJfF94ZJiaFBZ1mYgejqC64yhVlsP3erfd/Gq52cM1eR0wl2/0fFYW8nUUWdpRTIAoAOutV+OGBIEgxD49BjFVmVNjKd6ZL+L5AafHUrQcL+RfPQ2noyhLmCqHBxM83KyG47SXxWQu8uKDvoew16nYw2uP//36cs/XsiRuqO9tKygGEmInem4i/cI2aempzkMmqj9zVntsOPHMLkjVFvHp761Umd2qs1612f7UZ8ZSBAHEDI2IJqMqEjeXysQNFUmSaHs+QRAwu1XnE/sy1G0X2/VRO12ES3MF8VokSJjCbXOl1KLedrk0V+yxTj49mmIiG2UsbZGN6hwfSXB2PM1gQoSXzUw+aQfXbbfHXKlrjd3Fy3gcaIqErkpYupB+giBOPl2A6apMNmrQcn1UWcypNUVis9pitdRClYUHyEZVyGdBkHK/fn8LXZO4vVrBC4Jw1PPuSplay6FQa9H2fO6vV+mLm0znoqiyGMPMbtXJ122Gk1bHLE04Sb4xneXoUIKVYjNUB2zVbC7NFSg3HTaqomP09mwBQ5Up1B1uLpdZ7vgebFRtRlIv3/Z+Fo4PJzg3kebcRDo04LLdILQlPzueolhv03I83pkvMJSM4AeEKbQAJ0YSYaHdbLvs64txaCBGzBDvRWqbX4Lrv367Zc8PmMo9Sexdq9ihGdrTODGSDG3yXwXLpSb7+uIYqvg8nxlL4QXCiKx7Ha8vlsh3jOWehf64wf7+GJfmCkxlY8QNheXSs7kdYxmLC9v+3r7fPKv3OhV7eO3x4xfGeW+lwqXHBab7xK6+u1s7NpxAlkSLvitF7IsZJCx1hw9CF48261yYTLNcarJaajGUNHf1wOiLGS+V2VCzXWotl1bb59x4mnLLJWFqrFaa1GwXSRKZIQuFJp+YznJrpYylKUxmI6FqotryWKvY2K5Hqdnm9FhS+GisVrAdn0xUR5LErqc7j17dFo29VbMZSpmMpi2uLZZoOT4nRhIcG0nweLOB3jF6MjvFzaHBOPfWqhwciFGz3R4CpvKCrca+vii24/ONTsjZdrvwu2tVznZSNgsNJySUpi2Nu+s1Nqs2lqZgasK4ajRthVyY7kJYs0XBs78vzmbVptZyseIKfXGDsbTFVq3NsZFU+Ht3ViscGoyTiabRFJmYoXBjqUR/3CRuqFxbKOH4AQlTZSIb4dxkmpuLJab7YmRjOroiM5dvEDOfLMTbx0vz+UboY6Krcqgk+SA7/+6cfTL7ZBc7X2iyVmlxcSrNQNLE8YTl9jcebjHdF2G5KMinp0aT1G2X/rjBQNzA0BQMTciAuy6VU7kobden5Xg82qyTjeo9n5fXAbeWyz3yz3fmCkxkI8xvK/BPj6XCFNn3g9urwjwtaenP5FxtVm0GEsYzuznb7yN6Z443nYtxoF9ipdQMu4W6IjOQNPjyz/4Ahirzj37rHnNbjR411PcD9oqKPbz2SEd1ZiYz/PrNVTZrNroqc34izWa1tath1WbNJmo8f1bavVEdHYpj6QpHhxI7TIiG0yamKhwiFVkiQNyAthMcV8vNML9hvWrjBtEdrdSW41FpuaQiGq4fcGggTsv1whyRuKmyWGwwlYtguz4JU0OWJcqNNqWmi+sFrGxbEA4NxDgxkkBXFaQAtuqCFb9UamKqMglT5dCAxY2lMidJMrslFpWTI0lMTeHSrFjk35zOslxq7nAgVOTnVxWWpvTcaL2ntmJXF0qYqkx/3CBmqFycyuAHPpfnSoAgDqYjGn7whIArSU+kqK4XcHwozkbVpi9ucGdFRJxP56K8PVvg5GgSXZXFdXRctmrtsKj5gYM5bi1X2KgKK+nRVIThlMlGtY2uytxaFqOX0UwkfJ/29UU5NZpE3eaF8vipgrQr5227Ihhrui9KENDzWRhLWwwkzBe6s8rbnqfcdBhOmaQsPfz8bdXa9CfMHtfUx5sNYobCdF+U++tVhlMWjzbrzEylebBRIxPRSFgqy8Umhwbj3Fwqc248HfqNRF7w9/DdQKPt8eZ0NhwZKrIUes2AUBY92vhgzqNnxlIUGm3urj2fc/XucuWlMkn8TmZM9z0+NBBnf1+Eo8Mp/uYfOEp224js//K5wx/o3D+u2Csq9vDaw/MD/tW35znQHyNmqjzerL3wxj2Xb4Rz5ufh9qq4aW1vxQJMpC1abZ9ay+1ZQPf3R9nXFw3Dwx5t1sjFdG4tVzg+nBCLRNLsKQK6mQC264cy0DenxahGlSXarse1xTL7+2IYmoIEXFsocqbDYD88lOCd+WJoPJWwtJAdP5Q0qG3bCbVcn1atzUTn9Ti+T9wUfgXbi51i0wndLZ+GocpIkmDoi9caYOkqlaZDVFdDV9Iu7q5WMTt+FPv6RCBYLm6wUWlRaTo82qxxYiTFeMYKFRSSJHF123t4YfKJ2+hI2qLSdKnV2pQabWRZSHLHMxaDSZN3l8ucn0xTaraZyEYpNV00xefkaIqW4+N4PoMJk+GUya3lMkeGEgylLL79uMBgwiBpqbQcl/MTaZDEDHipJIrDg/0xpKfUM+KEe798vCk4AJ/al2Uu36DRdlksil1rV278LGwfLxUbQh00krKQEDHx99drPNqs7wiMq9keGxWbpuMTM1RkSdjET2Yj3FurcmY8jSRB0lI5N54mIODoUIIbS2VOje6uevpuQOqMLxfyjZ5U0fFthR6Ikea7yy8v45UQRNd0VMPSVFbKTa7t4n75LHT5HTNTYhS524bl6RRUVZFIRUw+d2ywp6D4fsZeUbGH1x7feLjFg40aMV2h0Un3fBG6C+nLYnarzvmJNI22R0RXxK6fgJWnZrnLpRYJU2W9IjoWliaHY5cuMXFmMtNTVPhBQDaiUai3SUc09vfHuL5YDqV+Rzvs8m6hdHI0GRpbHRtOUKzbzExmWCo2GEyaXJ4rEjcUfvBQH7+zTRWjykJFEDXE6CdmiEIgG9W5u1bl2HCchxu1kLh2b333YKfuedRsl/WKvatWfzts1+ezB/s6sssGM5NpIccbTrBeadF0fG6vlpnMRjFVm5Yr3EjPT6SRJbE7/ep98TrOTwjzsum+GJtVO0xZ1WSJbNRgpdTCD0BCCrMrNFniMwdy5BsOt5ZFuuhquUXL9bgwkWG10grHTXP5Bvv6Y+iqIlwnJcHXUGQJVRbt7aih7MhxUWWJoaSB74tjFovNMFfk6Xn/WDry3KJiN7fLhXyDN/Zlqdsubdfj4ECMOyvlHR209arNdE68jnMTaUxVxg0CLkxm+Or9Tc6MpXqMyLq4s1rB1GRa28zfnoXpXJR0ROfaYvFDJ3cOJ03iphZ2CrturkNJA9cPevgHpvry3ZUz4ynWKy2WSs33xb8AkS80mjK5NFtAlnamqWaiOre2mdRdmBTGd34gMn6KjTZ/Yma8pxP1/Yi9omIPrz3GOzeeV7HerbZePbRovdpirdwSLPuoBggnTl2TeWeuyJGhOJmIHhoLgfBgaDq9u6l76xU+uS+L6we0XZ+FfIOW63NmLAUEvLtc5vhIkmrLIWaomJqCLAl/glzMQJNlFgoNVFnivZUKF6aeuISulFv0xw2iHV+NC5NpdEWm0fZYKjZC2V3SUjk9mqTtCb+LettjbqtBOmIwlrHw/ID1ihgTyZLYBQ+nLBzX59riE7dHZRf57W54sFmj3HREvkcgyGkrpRb7+qOslm3SEZ1HW3UmslFqtsNyqcVm7YkdN0A6onF/vUrTEbJaEM6TothzeevxFrYbcHI0KRwjdQVJlpjORfnKvU00WeLcZJpvPy7wmYM5Wo6PLEO+1juy6qolLs0V6I8bDCZNyg2HocEEDUd0plIRPezW1GyXtuuzWhbnOxB/siPtLiDbVTDPwvlJUURtPZUfsr9fjFJabRdLU9jfH8P1A2wvYCFfD4uhLkZSEbIxj8tzxdC1VZMlNEUK809qttsjwWx7AaeGE6FL6fOwUWnxeKvO0aEEMUNhs+Pv8UGhyhJ9cSMc+4EoYKO6woH+OF/vuJpu/1m3qHwWDg7EcL0gTBx+WXS7mJIEx4YS6KrMu8tlpsfSLHUK17dnC5wdT3FrWRiUFeptjg7Fub1aZTIb6eF63Fmt8Nf+47vcWCzx93/05EvFCnyvYq+o2MNrj6lclEMD8V1lpbuha0+8kH+1G+FioRkWIlO5KDcXy0z1RTF1JYx9frz5bK18zFA4OpwkCAICELyJxTKTWYumI3UUEDL9CRNFlri7VuPN6SyFehtdkemLmT2jhcODce6uVXl3qcxYxmKx0OTQQJyNaiu8yV+eKzLdF+XxZp2LUxk2a6L4KDddvvEoz4mRJLeWy2Ervd72WKu00BSJVERnfyJK0/VxPBvX96m3XU527LtHUiYpS9vhuLkdk1mRNmrqYp5fbDjkazb7+mI0HZeNis2FiTSWrqCrMvm6zWDSZDhlsVRssFq2wx2pMD0S5/dgvcYn9mXQFJlCvU3c1MKC4uZSmYG4wdGRJH4girSBhEEuZvCoY2ttOz6XOu6Yb+7LMrfVoNRoU2m5rJabNNoeR4cTBH7AvbUqAwmTK/OFsDDY1xej1bZYKjXZ39/btYgaKnQKg+uLJY4OxVFlObRaX6+0Om6oT6qM7uK/G7JRg8ebNQaTJt96mOcHDvXx1U4Hqtb2MDukzFB+WWyE78lysclQ0mA0HaHUcNAUORyZnBtPM7tVo9BRO6nSy4n9bNcnFdHCDomlKRwejIWBbq8KSRLjrSAIdr0GyYhGteXukD4DXJorkrDU0A+li27GzoON6nOdOZ+FiK6SierUWm5P+N2luULPZuTqgnh/uyO8bhjdQMLcVTH2768s4QUB//CPnPq+LSz2JKV7eO3RbHvhrvZZMDWZEyNJzk2k0RSJcxNp4pbG6CtKAC/NFjg4EOPeWo3p/hgtx2chX+fhRo0D/fFnWv8qHYXHpdkCl+eKfOtRPpSuZqIGBwfilBoOVxeKLJea1G2XiYzFjaUSlZYwjmq5oruSiWqd2b/G0aEEQQClusOFyTSPNqs7zLjiHaXCw40aT6tpuzPgpw2tHC9gs2rTdDwuzxZ4tFnvjCLUUKq6XGpxZ7XC/v5eE6GEqZLuKDWGUxbvrVa5Ml/k9GiKhKkykDBZLgslg+362J5Py/GJ6CpTuSh3V6thcNgn92VDzZ3jBVyaK7JQaPLp/Tm+9ajAtYUSEV3F831mJjM82qgxnYtyaDCOoTxxj1RkiaiusFlvc3OpzFKxSS6m43hBqJ45MBAnZqhYmsJSscntlQoJS+P4iCBpntwmaXx7thC20R9u1HtkyIW6GMucn0hzajRJo+31ZLfM5RucHU+FNujPKyhAFCHlpkOp4XBmPMVX74kxRpc4ulVrY2hy+D6rshS+ryvlFoaqcHmuSC6mMxAXnBGAKwvFHudH9QVdp4G4wdnxFGcnUj2vt+l43FuvcW483dOleVmkLI13l0q7XoOYoZCO6FRbDsmIzr6+qOiQbCNsBk/NYCREh+jt2cL7KihAEGQTprrrfeXSbKEnRK/l+hwZSnJ1oYjtegwlzdDnZTf8h6vL/J//3XVc70OOYP2YYK9TsYfXHr/0X+8/M/Y8E9UYTlrcXauE8864oYSSvZnJ9CvPWOu2h+P5LBYaXJzKcGNRhE5dX3z2wuAF4ubZvRkrssRY2mKl1ERXZL49W+DchGhLtxxBuOtaWpuazJ3VKlFDQwIOD8Sp2h53VitUWi7piMaJkSS/+2CL87ssUN17br7e5lP7MszlxVxZkyUW8g0k2NVFFMROMB3RMFQx4vnswT7antfz2LmYTiaaod5yWSo1KDdd4qbKZw/28fZsnnPjabZqNteXSoJA2WjzaKPG6bEUlZbDzaUyfTGd/oTB5bkyFybTXF8ocm48HY6SPn0gS60luASpiMa3Huc5PpzA9UWWyjsds7KZyTRXF0osl5ocGxYx6Z/Yl6XSFLv0LpZLTWYmBUemZjvcXq1yYjjJ0eEExrbj/CB4JRvlc+Np5vN1NmttslGdpuOxuAvZ9dJckeMjCRYLzefyEgbiRrjjXa+02Kq1mepYt7u+cPpMWRoJS2N/X4xGx3Vy+2OmOz4rfgD1tke15XJsOMH8Vp17HRv1i1OZHnm0IsFUX4xMVMdxfRaLDdarNutVO/RYMFWZiK5i6TKGqtBouxwZSjCWcZElRAsiACQxpnoWX6PYcDg+nOjpCHRxbFjkrVycyvB4s9ZJCa6zry9KrUOQfjocT1UkBpPmB5bIPs+O5e3ZAocGRD5O3Xa5vlji4ECM++s1tmr2Cwng//H6CvW2xz/6o6dIWtpzj/1ew15RsYfXHrspFLoYTFjcWa30zLPrbQ9LV2i2Pez3sVtYLjW5OJ1hrdTkd+5toisSI+nIMwubLvo7C0Q2qtMX16naLqPpCG/PiRvUUqFJOqLRF4vx7Y40sm67PNxoIksSs5t1Ss02Z8bSLBYbxEwVWZYYSVnhvPnyXDEkkFmazFg6EqaOyhK03IBMVKfccjjQH0OVJSRJ4lsP87tyTIaSJmMZi0uzYpFfLTd5sFHrWFIHVJsul2fFWGAyE6HcaUNXWy7ffLRFX9zgykKRT+7LkopoNNsemiJzdiLNaqkZElYPDyX4dkc6uF6xcXwwNIWpXISYofHNB3kGO6qJY8MJLFVGliWsTmR7d7c/l2+gyILMemtZJMxu1WwSpkalk+HRTTSd3RI5LKVGmxPDSRzf5+asID92g80sTeXESOKl0ke3E/em+2OslpoMJk2m+2I82KhxcSpDteWGYwPH9Wm7HvfXdn9sCRhKWax3xhpjmQgHB2K8/fjJGKbcdDvXvMmJkUSna9O7oCmSxOnRFMVGG1NT8AMEF2ciza3lMieG4uF5f3p/js2azeOtek9GSM95SRLDSZPBpImqyCwWGjzeEgt9l1Db8/yyJOzYt+rPNHrazVZ+LGOFZOq3Zwv0xfTwtXUdZJtPdYFAdLTmtuoYqryj4HgVPHiB7ff2cWtXEdJ9/pfBl2+v8yP/z9/lf/7xM5wZ/+BZJB8X7BUVe3itMZ+v85vvrT3z5zXb5c3pHJfn80QNjbihMl9ocKAvys3lCvqLnJyegbcfi93TfKFJ2wteiqimq4oYUWzUuLtWQ5UlcjE95HiUmm0abZehpMVoymKj0mIoZTGWEcFVVxdKRHWFS3NC9XF/vcr+/tiOHV7Xrnq92iKiKbRcnwsdEuDbswX29UWJGQrXFkt8Zn+OtUqLqb7o7gZfcYO67XFxKoOpyXiBz5GhBBLQcnwebtQ4MiR2mamoDtsKPM8PwlHMarnFRtUmaWk4ns9o2iIb04kYCoos87sPtpjIWgwnLfxAGFwpsoiTPzZscH4yQ9RQGEpawmtjNEml5SIhxgldBcpkNoofCOJiy/G5vVImEdGpNEWOyXRflKiucHu1StPxcH0PRZZ7AuIkCbIxnem+KA83q6yUWmGE/bMwlrHYqtnCJRUR0T6Ssqi1XR5t1jg8KBbu/rjBhYk0W/U2q+VWmMnxNCYyETRVJkB4oHSlu7WWFxYUXQkxgKFK6KoSKoK2yx0XC42wMPmBg30c6BdFjqbKDKXMMM4ehIfLsyypu5jbqlNutvH8gOGUFXJDnhVMdno0xZUFQRYdTJmkozqmquAT4Hc8XpynivsuR0hXbQYTJn4QMJmN8N5KhRMjCQoNh/lt7/vTKDYcxjOR5244XoSnVU/PwngmwkalJT7/r4ilYpM/+k/f4ud+/yF+6lPT3xfKkL2iYg+vNf7D1WWGkmZolQxCLjqVjZKO6nzt/iZLxQYHB+JEdRVVkehPiLlvrGOHva8v+kx3zefh7VlB2royV+jphJwdT6EpMqWmw3y+TsvxOT6S4BsPe9nrwymThUITXZVZLjX55P4sy8Um84U6Ix0nybWKzYmRJNc7u7HujS6qK0z3xbiz2rsAjGUsVFnmq/c3mZkS5Lf3VipENNEdgCeOoatlm616m61am3y9zZvTGUoNvWeB3T4bPj+R5vpiGUmCU6Mp3l0u4wUwX2gwlDRYKTU5P5EiX29jqApzW3WODye4PFdkpdTk1GiSt+eKaIrERtXm0ECcuKmx2hk/VZouA53Qx1xUx3Z8mo7PUrFJy3EJgL6YTkWSSUU0LE0JF1XXCzqhWh7XF8vh/H+r1map2OAT+7Khw6cmw2QuStQQCpZMpPc1a4rM4806950a+/ujJMze3f9A3KAvLjgt33yUR5JEamp34dZVkc3y3koFPwjIxQzurlU5M5YkQGKpJLI2Kh3/EFUWVtnd/785neOtx3lcP2BfLsrFSSEflmWJgwNCXhzRZI6NJLk8V2Q0baHIUlj0pCytRwq8XrX5zIEcWzWbtXKLRtsjF9N5vFljrWIzkbFAgvWyTeIlWvEbVZuZqTTz+QZeEITGX7vlXRwciPF4S+z4HT8IvTp2Qy725H1YLIjC+MGGKOoMVUaWRNfjvZUKZ8fTVFoO25s8I2lL2KQHgqz6dKHyfjCatl7omrtQaIhuTO7ZVt7Pg+sH/I//37u89SjP/+PHTu+aJfS9hL2iYg+vNX73wSbLJSGjHE5ZFOptFgoNmo5L3BMfXz+AhKmxUW2xXGoS0VWSlsbxkQSuFxDRFXRFEmmYrwihBIlgqAr31qqcHE2G7Pq4qdIfMxhKiTZxOqL1kCgXCk0+fSCH4/k82qhz6XGB0+PCdng4KfIBJEnCUGXOjqe4v14L28EBIgl1O44NJ4gaCqosk4vqOK5HoeEwmNAZTkXY/uokJA4PxqnbLglLJd8J0Do6nMBQFZZ34Zl0N1EnR5LcWiqFhVS15ZKL6SiyhCSB6/phHLemyFyYTFNve9Rsj+PDCVRFJqIrfPtxns8c6MON++zvj/Fos47j+aiyRNzS+fZsgePDCXIxg6/e3+T0WCrsLNXbDo826xwbTqArEmfG0zQdLyyCvEAkvm5UbVIRjYcbNd6YyhAgFj/H8/F80WGKDiu7vE7x4lKWTiYqnBsvTKZZr7TIxQyuLpQ4PBjj/HgKy1CxXZ+1cotTY8lQltntGBwdTpC0NGFOVW1RbgrCbbcQtjSVwaSJpSvEDZGGGjcVWm7AaNqi4XgcHIxzZ7XKfL7BVC7acVltioyb1QrNbQv6460aJ0aTYQAcCOJhqemw0vlbsTQlXNyzndcDcG+t8kLiKAgG/0bFxlDl0OK9/pTvSzaqM7dV5/BggmLjxVLVyWwUQ1UYTJpIndeRsDQ0RabYcKi0XI4MxQmQWK+0Qint6bEkK8UWS8VmjxLpw+Aq2K7PSKp30/I0Lk5leLhRpWF/sAj537m3yR/9p9/iX/3URYZeITr944Y99cceXmv81R85AgivAeGUKHaRDzbqFBsOM5MZDg3E2arbxE0VxwsoNx0GEgaeL/7/eLP20nPQ3TC71eDuWpWYqYqdb1QssNWWS9zSeG+lwrWFEocG4lyYTPe4cxbqbXw/EK3ziSc3c9cX8rpLswV+98GWuOkHATNTGQ7sMvKImyq6IrFZaeP6AVFD5cZiGc8LWKsIm+r1is35iRTZqM6luQKFunCkHE0Jn48To0luLJUZTO4eLvXOfJED/TFc3+/pzIymLbJRg8G4ie+D7QecGk3yyX0ZvvUoz/XFEptVm/dWK5iawrvLZZROjsJX74uicKnYZLXc4tpCqWfXXbNdmo7L/v4od1cr+ASoioShKhwbSvJeZ4R1daHIQqHBxcm0WEwC+N0HWyIOHYnRVATbExbat5bL3F2rEtEVZqYy3F2r9ARGLRebnB5PMZwykSWJG4slJrJRLs8VSUd07qxWSEU07q7V8AI6jyVulboi7MFnJjOdxNs0hXobS1d40FEIyZIY64AwdaraLg82apiqjCQLE6WDA3FsR/AFbiyVyUR0RtMWCUtlNGUyt1VnrdzinfliT0EBopBbLDQYTT9ZmG6vVkgYKucn0iQsradbsJ3nUG66XJ4rMjOZ6SEqPi1/dH1RdhXrbQYTJseHExwe7I0An8xFaXsB1gviw7uo2S7LpSZX5ou8My9UPndWqx2SqXicetvj0qz47F6ZL9IXM7g0W9xBts7F9JBD80GwWbWxXZ/JbIQjQ3EOD8Y5NpwQ6h1EcNvtlTJjmWjohvtB8Gizzh/9p2+x8IwAw+8FSEHw/Zah9vKoVCokk0nK5TKJROK7fTrfl/j/3Vrlb/2n92i0PapP7ZTOTaRou0FoHlVotIkZKtWWi+v5mJpCqpMxAbySEdbLIGlpBAShhj4T1YkbKgNJk82qTS6mo8oy9bZLueGwUGgwmrHoixk82Kg9M2jI0mROjqZ4b6XS4woa1RWOdsYNR4biNNsei0WhgrAdn3vrVT6xL4vn+9xZrVJpuSG58NiwMO1JmGpIttwNpibjej7b+W+HBmLcW69xdjwFCILbkU5668xUGkWSeOtxgVxMJ2lppCM6EV2h5XioioyhyFxfEgFeMUPFD3xuLVewXZ+24xExVBptj/39MVKWxuOtGoMJk1vLFQ72x7B0hXvrVfb1xXhvRWQ02K6PpkhcnisylraI6CoPNqqcn8ygytBo+yRMYdX8cKPOWGcBXiw2GUqaDCVNri+WeGNauFhamoIXBLQcn5ih8NbjAqosLNFHUxHWKi0SlsZQwuAbj/Ko8k4L+C4R9sRIAkmS0BWZW0sl3ACSpkqt7XFiJMmV+SL9cYP+hMF8voGmyLQdl1pbXPQLk+nQ5fPqfJGoqXJwII64VQdcXxRmTNuJtydGkmxUWkz2RXj7cW8Xouvt8TROj6a4uVzCD4QjpSzBvbUalq4wno5wa7nISDrKRqVFve3tIPqeG09zZaEY+qm8DHYbRUrAqbEUbVe42bZdUWA02u4zCbQzk5kPZZF/HkbSFpPZCA/Wa6FHyIeFgYTBv/6pi+zvj7/44NcAr7IW7nUq9vBa4xsPt5jMRXcUFCDm7JausFlt8fZsAV2RubZQ4uFGDdfzqdsuxbrDpdkCzbbL/v4Y2ajO+cleJvaz5JZdjGUsRtPi38w2/fqB/lhYUKiy2D3FLZVLswXihsrluSJvPc7zcL1KzXYwVInFQpOrC6XnJhc2HbHjzkY1ZqYyGGp3JCBcFD9zMIfjCu8Fzw+4uVSmP2FwZjyFrkjMFwTH5LOH+lgsNMhENFbLLYJAxIo/D6dGU8RMDUOVmMpFOTmaEK6fqizknb6IfL80W+D8RBoJCVWWyER0AoTVsSpLwixKkijW22xUbYoNhyvzRYqNNmsVm7ih0hfTGU5bVFsuk9kIS/k6d1YrZCJGuJgMpy10VSaiiWC3makMD9YrRHSZm0tlLk5lWCw2sV0PUxU+IZWmkABWWy5DCYuZyTRDKZFEe3ZccEKuLojF9PJcgZbjcX+jJoogWeKdebFQXpjMUKg7lJriNTzcqBEgosuPDCVIRzSmclE+cyDHmbEkc1t1JIQniOP5vDNf5PR4mvFMhAMDcdquj++LwmEkZRHRVJptT0S+d9oGB/pjWJoSWqWfHk9Rb7ksF5tcnisK5UynmLEdLwxsm92qETdVPE90R7o4PBjn3eXdRxPXl0pcmBSfZ88PuDIv3DgNVWYuX+f0eFr8HXU6Jf5TqpO5jrnc7FadlzRe3XVkcWw4gSTBgw3RUby5XO50nHYvKIZTJkvFj36nv1xs8s2H+Q+9oAChgPqxX/n2M9+bjzP2ioo9vNY4NpzYISnr4sZSmaVig4iuMJgwMFWF02NJZqYyOF5AOqpjux4RTaRTPtyoka+3kbelQ03nogRBwP7+KBcm05ybSNO/zeBnKheh2nJZKjZD90YQeR3bQ81Oj4sgqC4nYDYvkkEBGo5Pvu7QeoZx1m6wNBmlY6Y1lDSJbmsx247Pw806762USUU0cUNer4Zuiook8858ka/e28TUZIZSVmgSVHtBDHO54/dguwFNx0NXZPL1NkeG4liajETA+Yk0p0dTgCCz1myPQqMNAR2DMMGhuDRbEOOh1QozU2mhZFkuE/hBxxq7zXDS4vRYiripcmwkxbmJNAlLZWYqzaHBOFIgVAfDaYukKRZhJJmHG3VihkKp6TCRsVgsNDg0lMBQZbJRnSNDcZZKTWa36kiSJDJdDJWHGzU+MZ0NX68wAWujyBK3lis82KjieAFxUw0Nw7ohaCDszJeLzXDn3x83eOtxnrWKzZFBMf5SZYmYobK/P8rVhSLDSTP0ULm2WObMeIpriyUuzRUYSJpcnhPXEMTi3lVZvLtcZqtqc3o8FXJg2p1zA3i8JfJd3pkrkInqZKI6762USUd0LkxmGEoaVFoO5ycyHB/eubvUFEl89vsiYcbNndUqS8Um+XqbIBAF5IkR8buN9pPPzngmQr6jJrJdn6m+2I7H3w03l8rkYr1ERVmSqLVcHC/gwUu45g7EewP7Pq4o1Nv8+P/6bX7rOeq2jyP2iJp7eK3xxnR2x0x5O1ZKLVbLLT61P0fb9VEChWsLRRwvIBvT2araNJ6S9dW33Rz74kZHs18HxE7z/ESKsYyFrog8gK518FDSCn0Uttt1n59IhzHVXUZ6tTN6yL/PkcuJ0RSXZgvh6OH85JPnWCk1QyOei9NJ2q7Ptx8XQufObrEjAbmYGbaJNVnCC4LQ1ns3bG9jj6UtrswXOTosuhW/+zDPmbEUK+UmhXqbhKkx1CEgjmdE7PfVhaIgyrbEjnStLCzBJSTmt+ookkQmqtP2fMotb0fU9NMZGvfWqliaHEozP7U/h9HJYtnXF+XeWpVjwwkuTApVjO36vLtSCW3VN6s2mZhORFMZS8vUWi5vP97qISsWGm3emMowlDSJaAqzW3UuzxXDcU8X3fb/ufE0BxSJmu10uD4BSUvjykIxLA5mpjKYqsKxoQSb1RYnRhJs1dpYmsKNxRLnxtOYuszjjToXJjM87sTTz+cb9MWNMGPC0lXurlX5gYM56rZHQGcRth3urFbJdpxCi402Ndvl2HASx/O5PFfgzFgKp9OxC3jiszGYNJnIRLi3Xg1zNbrdMNf3Qw+PK/NFhlIWDzZqGKoolLoYTJg9cs5M5OUUDa4fMJaJ9CqQOgXXm9MZ3nr84r+Xh8+xyv+4odpy+R/+tyv8/mOD/LdnRxhImKHlvPY+5fDfbXw8z3oP3zeYykUZfgaxsIugQ9p7e7YQkreSlgin2i2E7L0VEVMuSbBW7iWAne14DFyZL7FVa3N0OMl4pkuIC7gwmebuaiVc5A70x7ixVAp/f6PypFX63koFS3v1P7F0RAs7Il0J4FLnBi5JQqN/f73G2fGk4I/4AWfHk6xVWiH5biBukIsbYUExM5kO47tTloamSMxMZZjKRcLnNVSZ6VyUs+MpZqYyXFsoMpyyuLNaDV9vodHmyGCCoaTJRtVmtdziW4/yLJdarJSaNB0fSYLRlMXRoRhBEKB1LJUdP+DMRJp35ot4frBjDDWZjTCY6nQuDIWIJpOL6Yyln5zj7dUKN5fKjKYtTE3hE/uyLBcbfHu2wNtzeT61P0vb9ajaDrIkRjgxQ+XSXIGrCyU0VabpBlztkFIBDg3EURWZStPh27MFFEXi+HAiXGhBXDopEO//1QVx/jFDw9QUDFVGkSVqtockwcxUmmrLEWmshQaaqhAEEo8263gdClvL9Wi7PoeH41ydL7JZtXm0WaPt+WiKzJ21KjOTGRptt0PqFOOUK/NFGm2XbFRHV2A8Y+F6PusVm7gpPELKTYeZqQzNtkt/wuDBRgWl8x5cnMqwVhbjwq77q6FKoYlUseGQr7fZ3x9DVWSWi01ajs/hwQSX54scHIgxlrG4vdrbPdxeqL8IzjMMq956XGAiG9n1Z9vxMsd83PAb763xZ/+3K/yhf/JN3vx7v82Xvjn73T6l9429omIPrzUkSeLNfbmXPr7YaIsuRVTneWZ7EV1BkWC+0FtUSEC+1iYTEbs11w9YKDS5OJWm3HApNx0OD4mCJBPVw+cDsHQl9DIAwXa/MJlhZjK9Y9f7POzvj4WeAF1S21rFZiBuIHceNxPVCXyJUqPNg/WaCCqLG+Huuz9hsFm1SZhi5t5yfRwvYKvWptpyeWMqy2KhTqXp0Bc3ODGSRFdlHm/VWa/Y3Fwq4fpCfpnuhEsdGYqLdv+jLXIxgzemMsxMZbg4leH8RJrRzuK/VWszX2iwVXMwVJkTo6lQfeF6Pn4At5YrVJsu5yfSRDSZ8xMiLn252OT6Yokjw0myMYOtWhufsB6iUG+TsjSGUxaWpuB4PqfH0gwlha+E7Qrvi9srVfb1xxiIGz1SyGqn6PQCoWw4PCiC6r7xcIuBhCheV0ot3l2phLvpkyPC3tvxA9YqLc5Npql1eCViVOTjdj4Db05labQ9IQ/dqtMXM3hvpcLlOWFKVm469CfMzveK/M7dTbwgYDhpcmIkyUDcIAgCLk5lqLQcsjGDK/NFSs1OjkxEY7Xc5BsP8xwbTrFVc3i4WRcjkUAoZ8YyFndWSsRMjd++u8mZ8QzpqMZoygy7fooEp0aTnBxNsq9vJ1nw4UaN06PJ8OsbS2WCQLy3uajBRLbXs+G9lQrDqecX/13s5nfRxUD8xY+hPM9f+3sEk9n354nxOmBv/LGH1x7l5vPtsbvQFInRdISJbBRdEWTBXEyn3HR2MPXvb9RE8NVT+vS7axUOdBjZ1xZL2I5HRJd5sFFjJBVBVSSuLZRCy+Tt7fuRlLXD+vjbswXars+5iTQxXdnROekS3Pb1x0hFdMoNp4erUai3w7b79oKlUG9TqLeJ6jJnxjPcW6uyWbMZSQu3zrmtOp892MfluUJ4jkeHEtxerYTt7HLDIR0zmMhYPFx/okYZSBhM5iK4nkhbJQiI6gr5epvLc0XihkIQBHjQ43dwfjKNpUqcmciwWmoykrYEcbZTGOmKxNWFEhcm01xbKFFutrm3XsVQRRLpdsvl7SqDtuvzqX05biwXQ35EvmaTjmhcniuFx13sWCl3HSAvzRYYThroqpCWblZbPQvSVr3NVKfYGYgb3F2rcGZM8B364wYjaZPhlBlapF+czLC/L8bX72/iBYKPgwQxXaEvrhMz01RbbSK6yqlREW3fFzdIRzTank/C1PjWo3x4fkeHhDmYqcmdsLkS+/qiXFsQBmLllkfMEAmhlqb0uKYCIInI7aSlcWggztudkce9tRqnxtJ842Ge8xNpbq9WGElZTGSjYdbK/oF4TwT5brg0VwxTbruoNB0RE76y83fH0hFWnuP30MXTfhfb8e5yiZOjYoTztPFbFw/Wq8gSz81U+bjj/RptvQ7Yk5Q+B3uS0u8+giDgwv/tK2y9IKX0aWiyxHDKYr7QeKb8bCBh4Pv0JBV2j1VliVMd++HuQgNi8Vmv2pwZS3J/vUa97aEpEseGE7Rdn9tP3QgzUT20x35akteV4r0o1l2W4MhQnPdWeo8ZSVnIMh27Y5nTYynur1fDtvaJEZEt0o3tPjee4vpiiWPDItr8wmSae+tVKk2XQ4Nx7q1VSVgqruuTjupsVm3anmj531gokoubSLLEermF6wecG09xpWOq1L3mF6ezLJcaJExNGDEljB5L6S7OjAmZoxfQc313Q3dhOz2WRFdkpE5hoCoSrhfg+QFBELBcbpE0hdHXVq0duk5uf/9lCc5PZGg5HqmoRrHWRtcUbq+U2d8f49aykKxuVFudMC2FVtuj3naFZ8JckcGEwVpnzJW0NI4Ox3lntsjp8RSVlsu9znsaMxRud0ZlmYhGoeFwcSrD1YUi5yfS1GyPh5s1mm2PgYTBeucx++IGIykTSRLukmNpi6lslK/c24BAWIxv1dpM90WRJYl0RMPzA64ulJAlOrHyTc5PppF4UviZqsy+/hgxXWG+0Ahfw/OQimjIkkSh3ubgQIyW4/UQV7fjVMcH5UV40fsNgs8TNzVajkfUUDBURVhcB8L2+2W4Fx9XSBLc+YXfj6m9nP/HdwKvshbudSr28Fpjpdx65YIChGXwfIeH4D+jbl6v2IylLZKW8G7Y3xfl2uITc6orC0UyUS28AQ53Aq8kRAv3aCclMxfTn3mTixkKhQ4n8tJsgbPjKebzdfb1xbmyIJ7rRbHufgBLxVZY0IAw5ZndaoQ+Fm3X59JsAUtXBHF0vhjuMM9NpLm1VGKl3OL8ZJp2pyMgSxKaLHN0KEGj7YaP/8l9GS7Pl4gYKtMJg6iucGgogecHLJWafGI6w+21Ko+36hwZjAufBU/YbW9WbfriJsvFBqVmG9f3OTwY4+5abwfn4UaNqb4Ynu/j+v4zvRQA5M6QtqvSkAiIGGpow/7OfJGIrnB4MM5WzWYgIdQyyYiOpsihcRXAocE4l+YK7O+P8ni+xsGBOPP5OqdGU9iej6FKFBttcjExStIUibPjafwgoNgQxWEyojOeiSJLAfm6w6XZIklTRUIQS/tiOvmazb31NjOTaeHH4fkUGg7vzBX4xP4cv/vgiaX7WMZirdzqWLML18luIXhsKE6h3qblepwaSaKpcrhwd8m2J0cSyLLEgf4YQ8knBMr3lsu8MSWULmfHU3h+gKEqmLpCNmYwkDRDd9BnodRwODchxlfPc+GcyEZeqqAAcLwXO1MK866dxcv+vmjY+fpeRRDAf7qxwo+dH/tun8r7wh6nYg+vNW68YEfzMmg/JyNgsdgkGzMYTIqbbMrSe5wGu1JMEFkiiiTInJqqcHmuyIONGo+36qjP+Esy1N7dhmhxi4XN8wMSlspQZ54OkI1qHB6Mc27iCYlxKhcRLqFJk1OjSX7PoT4ebtR7jLG6aHaisS9u89O4t1Ylbmo0HQ/PFz4KY2kTWRJx6ffXq0xmIwynrE6ktcyJTsEUNzXeW60S0UUH4PRoikdbgotxYEBEZ8ctVezmbZeVchPP8xlOWZyfyGBpCo8365yfSJOKCNLpmbEUbiAKi2xU59ZyhdsdU6uncXgwHi58y6Umgwlhia4psgjsanscH0kI4i0wkDBRJUhHBXv+ynyRrz/YYmYqw9nxFHGjo1jRFE6Npri6UGIwIboC1xZKnB4TktC2K7oL3bHZ7dUqjbaPLInPwexWnUbbIxPV6Y8b7OuPcWmuyKf259istZnukEAvzRVZK7dwPJ+ZyQxeIPwltmMoaeF4AfW2F3aZDvRFkYGq7dF0fNYqIgjMDwiLQhAk06ViA9cLeLRZo1BvM5dvYKoyJ8dS3Fkrc2FCxMWXmw4126FQt3m0IXg4z0PCEnyc91YqYXfoWcg+lWcRN8Tn3lB7f+/QQIy2FxAz3t8uPPsCn5XvFfxf/8MtvvFg68UHvobYKyr28Frj+odQVDwrXbGLx5t19mWjfPNhns2ajYRwNXwa99drnJ/MMLtZY6PSYiBhcGo0SX/c2JUUenIkyaMXyN+GkyaKJOH7AW9MZdAUhcebNe6tVjg9luKN6Qz5ms2JkQQP16t4fsC9jRq6KnFxMkPC3L3Z+PZsgYGEwfGRBKoiMZK2ONAfQ5FFouhw0gq7K64vFrSNags/EOz8h5t1RlIWbddnKhvBDwLWKzaSBFtVmxOjKZaLLRaLDXRFZq7QIEAQMe+sVbixWKTUbLNSbtGfMHlnvkip4TCYMNmqiw7R/v4oqiIzkY3g+gFvzxY4MhTn0IBYkLtFyHbcXimHC4sqi9yUd5crlJsukiQRBKCpCtcXS9xYFPkdfiC6RDcWSzQdF0kSBGDX8zg3nuLdlQqtbZ+Retuj4XjETJWZqQye73N+Ik0mqjGdiyFLortk6gp316qMZSLYrs/MZBpZEoogvzMeujiZZjhl0nJ86m0hM356Me9G14OwY7+6ILpM6U62RrHRZqXYoNX5kI1nIsxMpjnQH0OSoNAQklE/EGTh4yMJTo2lcF1h4X55XozwoobKg40at5YrHBlOUGq0dyz6IDgiF6cyuJ54T1qOH3bZdsNQ0uTatjHYxakMiiIzEDc4PJhgZirDYMIQfI/1GvfXaxwYeH9Oks9KLf1eg+sH/PS/usLdtd0NwF5n7BUVe3it8WEUFc8jhoGQW15dLHN0SNzont4NbseNxRLDKQs/CJAlwYrf7vx3fiJNX0zn4lSG+xvV3clknfu4rkgMJizeW62Qi+vM5euMZyK0vYD+hImuyKiyRKXlcWu5wonRFKtlERhVbrogwbGhBJ/an9uR3QBivPPucoWpbISbS2UuzxVpuT5RTcHUxLhgqCPXlZBY7kSA266H5weslpuoiszN5TL312v0xXQeb9aJWxoSosuyUGhSarRDG+y4qdF2A06NpenvMPmXik3OjIlOzEQ2Qi5qEDc1Hm7U+fbjAiNJk88e6guTNe+t1/jMgRylhsNGtSWC1zqvqdb2UGSJiK5Qs10KdZs3pjMYmowkiQTRLtH1+EiyZ+xybjLNreUKrbYneAiBhKrIHBmMYWgy5zqLpu361FouC4Umt1cqnbAwh9mtOuvVFiulFseHE9xZrRIzVJYLDTYqLbxAZM082KjxznyR64slLs8XqbU9NEXmvZUKb88WWHjKDfLGopDInhpNcnu1iqEpmJooAFxfKJmOD4vrd2W+SNwU71/Ndqg0HQbiRughUWu5PFivcW2xxHJJ8IlAFNa+73NwIMaRwTjVpghs2x5sZaoyF6cySB356dMqjXdXKpwZT5GL6T2dtPVKi5mpDJosRm1duarjB9xYKnNptsBG1e7hUbxf/cbTrp7fy6jaLn/sV77N//LVRz3GY6879oqKPby2cD2fWy85p30ehpLWM624p3JRri2WaDoey6VWuHObzdd7fAq6aLk+UUNlNG0xnullaI+lLd6ZFwqFtus/szDpnsn5yTSLxTpnx1I02h79CRMkkcOQjel4QcC3HuWZmcwwkYnw9myB/f0xdEXm5EiSt2cLvDVb4BsPtzjQHyMT3T21sSsjHM9YLOQbGB0C4921aujOeHleKAeuzBfZqtnUbJdzE2Ixf3M6i+/7JCM6siSRr7VZLbdIWhopS2O1bOMFwivDdjxcP6Dacqk0HTRF4vRYirlOgJLnB+iqHC4OmiLR9gN836fZdhnrXNOvP9ji2HACgk6+RyYSOjHeW62Qr7UZSposF5sU6228TkDbUqHBiZEEFybTLOTrRHWZi5Np9vdFabY9Pnuwj6ihUqgLO/EHGzWihsaV+SJ+EOB4PqYqM5a2ODOWZCChU7c9lgpNWo5H0tJYLjVpd0KoZAmWyy0ihsq7yxVudKzDZQl8IB0RhZgsCcLpmbEU+zruk/v7Ywx2ZKy5qIEiSwwlDU6OJNnfH2OmI9k1NQUPEf1+eizFeytV4QwrSayUW0zmorTaLmfGU6xVWhwYiJGL6YykI2EX5O5alaSlM7vVIBczeLgpYuu3am00ReLiVBpLV3h7tvBMC/m263NtQfi3PNqscXEqw4XJNKdGU9RtlwMDiTAoDggJyrBTqfFwo/a+CotnheF9r6LcdPi//8ZdPvMPfoc7qx+PrsVeUbGH1xaCOf/B4oZB7O52k2gZqoTr+eHcvNx0OD0mdmCVpkjO1HcpLB6sVzFUcQPePiYZTpmMpEzyNRtdlTk7nubceIpz4ymRpjoYR5ElVkpNpnIRPB8ebTaQZIn76zUUScLs5FwEgQgQ8wNBVOxeB88PWC420DWZmSnx3ENJsSBN53ZaJZ8cTYYGWo7n4wUBK6Umhip3WvvCE+HoUIKVcpOZqTT5ms0n92UpNRwkCRYLDaq2JzJVggBJEoXaWrnFuYlUx6I7YK1sc3AwzlQ2QrPt0fY8Lk5luL5YothwOmFvwrvC73gxnBlPockS1ZbH4aEkm9UWZ8ZSgPA+GEyajKYsEcbW8cEoNByihogGn+qLUbNdai2RHtsXFyqKfF3wGgIkAkliNBOh7QZ89f4m07ko+WqTh5s1jg7FyXeKkmuLZa4ulJjLN7g0VyQANqptHD9gOG1xcjSF7Yjo9mREw9LVsEO0WGiwv8OjuDJf5OhQgiAgfOxHm3VuLZe5tlii5XgcHoyLhVUKODwYR1clLE0h1ilwkOC9pRK1lks2ZiAhcWmuSMvxuDCZRldl0lHhzeEHAYvFBndWKxQbDrObdfI1myvzRZIRjZMjSS5MpGk4Ho22x3yhwXQ2wsONGkeG4gzEDa4vlik2Xj71s9RweHu2wOW5ItcWS7y7UuH2Kyx6lZbLocGXs/beju9XrWIqooefr9cde+qPPby2+MqdjQ/tseLGzo/6uYkMN5fKYSqjpkoEPJF6Nto+b05nKDYcFguN8KY7mLRoux6T2QiX54qcGU9RaToiF6LU4vyEUAs0HRdFljE1sTO/t1blzFiSWtvjwXqNpKUR1WSiusKxoTheIGbGwymLbz3K0x83+NT+HEEQMJwyOTAQYz5fx+pkWHidpMp8zabR9nZIN01N5sF6NYymLjccLF1lJGXhdmSYuZjBSqmJ3Mmr8PyA4yMpri0UOT+V4VsPt0K+SNxUydds/EDEpIvnbnN6LEXDdvGCANv16U+YvD1b4M3pDA/WBRlTksR1XSw0aDkeN5bKTOeijGUiXH68yXR/gnbb50C/KLzOT6RoOiJptN52MVSJ64slLk5l8IIACUFSNFQRA358JEmfLzoNlabDZDaKpkgcH04iSeC6Prbr8cl9WfL1NkPpKLNbdRaLTRbyDY52skIO9MVwg0BwSzyfkZTF1QURwX1/vcZnD/UhAS3HJwiCsDhaLTeRJYmz4ykerFcp1NscH4mzWens1qUnC6ImS6Q7xMaEqWNqMpfmikgS7OuLcXYiTRAEnOvEq+uqxEK+QTYqxkPtThF8cUr8XJYkCg03lCYf73SxzoyneOtRHqcjC76zWmEyGyEd1bE0hZG0xWrFxtJVbPc7z1VIWi9n7b0d8veB8dXTGMtY/I//7YmPjW33XlGxh9cW//XO+kf22MeGE3z7cZ7JbLRjpBMQBBKXZguMZyKhadHluWIYy318OMlisdGzI9vXF8Hq+BxkY0J+eW+tiixLHB1O8NajPAcHYkR0lYgm03J9HqzXODmSpFB3ODGW4v56jWxMx1QVZjdrrFdsDg/FiZsq33goGOBnxlIsFBr0x01MTaZhuyyXWjxYqzCcFoFQI2mL5eITGd50LspsvkGl6YYeGUMpjRtLZaZyURzPJ6arYf5Jo+1hajKpiEbD8fn6/S1G0hYpS+O9lQrjGdEpuLdW5dRoksebNSazUS7NFjg5miRtalxfKnNkKCGktI0261UbTZE4N5HG8QJ0VQl392MZi/mtGqfGM2xUbZKWxr21Cvv74zRsj0zHuGyh0ODseJor88UdWSFvTmept0W6KMBWTdhjX5orhPkeF6cytDyfxWKTdETH0hWiusqB/hh12+UHDvUhA1FTw3Y97q1W0RSJI0NJ5vJ1zo2nub8hPEIabY9LHbvrt2cL4VhKkYVnxr6+GFXbo2p7zwy9Spgqg0mLN6YyvLdaCccNFyYyBAQ9XiZdVUW+3msAd2EiHap/utyHwaRJJqpTbTkc6I/SckSnSOl0wlwvYD7fYCBh4noBS5UWG9UWb0xnebAhxhleR0r9negIrJR397t4Hr7Xa4rPHOxDV2R+594Gnh/wU5+a4uf/D0d25Uy9rtgrKvbw2mJ268PTo6uKzIH+GJs1m7bjsVkVO+7HW3UMVeLUWJqrHYOk6b4o1xZKrJZb4Q374UaNhKlS6SwAQ0mTpKWRjep881GeyWyESssNY6JBcEIGEgZ9cYMHaxXGs9HQzrkbojSYMBhNW7w9W+iw9oXHxLHhRLi4KLLEWkUYSV1dKHFuQiR+TuVibFZtIrpCsSHa/5am0HQ8To4kubtW4fR4mkuzBWY7iZZd2++257NcFOOOS7NFRlIW5ydSbFTblBsu6YhG1FDDnf/MZBrH97mxWOaN6QxvPSow3RdlsdjgzHgKzwv45qM8FyYzSMCJ0SS+L7oTuZhOve0hS0Ly6fli53xpViR4Nh1htiVLEp4vxjNeEFBo2vi+2OFfmS9ybHinAZjreYylrY56QyIV0ZiJZ5AICAj49P4cC8UGk5kIZ8ZTYSjbmfEUNxdLzEylKdZsNFXmdoeIOJq2qNouEV2h0nRYLYsOhq4qoQdEvt7m1GiScsc+ezRtUbfdl1InOF5A2xVdrYimcG5cjCbmtupsVO3Q7GsyG8EP6AnuAjg1luRyh7uwry9K3FQ5OZrEdj2qLZfbKxX64gauF3Bntcrx4QSjaYuxdARTk/n6gy1SEY0jHaLutfkC/TGdW8tlGm2hiLm6WPpIC4vBzucg1zHyell0bda/V/H5z+7j4nSWd5fLfPtxns8e6v9YFRSwV1Ts4TWG94pMb02RODGSpGa7bFTtUPMPvbbPnz2Yo+X6pCM699arTOVETPf+fhGAVai3KTcdTE0Od7sDcSO0mC7UBbltqdBAliQkCfI1m3MTGb56fxMQ7oILhQb1lkvL8Tg2kuLBRo2Nqs0n9mW5vVJmKhfjzlqVassNZ/DvzBf57MEc9bbHqbEUhirTdj0MVWGjajOZjZCv2dRaMguFJk7HE+L4cIKooZKNGiyXGmHRUmu5qLLEZrXXYEtX5I7dthgNmZrMndUaEIi46+EkDzZq5GI6fiAKm/dWapwZS3N3tcqZ8RSyLOH6PhFNQTEkPn0gy9fu50WR0fbJRHVWSg5JS0ORJFRZ4sp8IQwnOzOe4t1OxsiZ8RSpqMaJ0RSaKvH24wJHhhLcXCoznomQiYoxwXbMTInux2KxSdPxqLccDg8nmd2qM9VJYu0uWPlaO1RIaIqEqSodWaNE3NJotD1ycRNdVUhFdMFDkQQxd7nUIgDG0+I8utkrjuvTFzeIGioL+Tr7+mMvtUCmozq3VyrU2h6nRpPhZwYgosk82BDX1/cDara7w959+3OYmoLjetxcKvOJfVnur1cZTgn7+ZMjSYbTJu8uV9BkiTMdv4pjwwkebdZ463EBS1NwfZ901GCj87iFRhtTfZIM+2EhaWlM56LM5xvvSxqatNSeFN3vRXS5X8dHkhwfSb7g6NcTH2hI8/f//t9HkiT+0l/6S+H3/uyf/bPs27cPy7Lo6+vjD/7BP8jdu3d7fk+SpB3/fvVXf7XnmK9+9aucPXsWwzDYv38//+Jf/Isdz/9P/sk/YXJyEtM0uXjxIpcuXer5eavV4vOf/zzZbJZYLMaP/uiPsr7+0bXU9/Dh4uz4Tq+IZ0GS4OhwgqsLJe6v1yg1RFLj0zg0GOer97dotj0ihtJRTejMTGZ4tCm6EVbHHncsI1wCf+BgH2OZCGfHU0jbOOtHR0S+w9mxNNmYQa0j+xpOmTQdj/WKTa3t4Xk+X7+/yXqlxSf2ZWm5Hqaucm2xFD7X7dUKjudzcSrD1x9scXlOJFIW6m38QHQ2HmzUGMtEyNfbRHQFXZVFpoih8O5KhdmtOpfmCmGeyYXJNA83qpzuEB+3Q1dksjGDxxs1jg7HebRZZ7nUZCQdodJ0cTyfjarN7dUqEV1mrdJiMGnScj2m+6LcW60QBJC2DFRF4q3HedYrNv0xnWbbo+X61GyPiWwM2/GQO7Hr2xeqawslhtMRVFmiars0bA/XC7i3VuPoUIJiQ0SFJy2V+2sV3n5c4Pw2KaPrBaE/gqUrjGYEQXQkZXFrqRQuvtlOIdByPWYm07wxnWW90uLumlBRzG01UGSJbFRjqybGNTFD5Wv3Njux6mlGUhZ316uUGm1838d2vFAieX+tyv7+GPfWah2H0md7MMQMlaSpcmo8xSf3Z3e4iB4fTTGdiwnXUF3h0Wad0UyEw9tIjf0dnw5NkWg5HrIsM5ERXiKnRlPh+39zuUxEVzg7nuLocIK6LRQijzZrtDrvw6HBGI4X0BcXj5kwVQxV4cTozs/MB4WhylxbLAli7/tA1FBfy7yP/rgRJvseG06I8VbC5NxE6pWCBE1NhAJ+3PG+i4rLly/zK7/yK5w8ebLn++fOneNLX/oSd+7c4Td/8zcJgoAf/uEfxnvKmvVLX/oSq6ur4b8/9If+UPiz2dlZfuRHfoQf/MEf5Pr16/ylv/SX+Kmf+il+8zd/Mzzm3/7bf8sXvvAF/ubf/JtcvXqVU6dO8bnPfY6NjSfkvp/92Z/lP//n/8y///f/nq997WusrKzwh//wH36/L3kP32H84OG+lzouHdG4OJXZYTl8uWOmNDOZIRfT0RSJemd8kYroaLK4KZcabeYLdY4NJUITplxM5525Im3XZ7nUFFHknRTILgxFZjhlEjdVxjIWDdtDkcSOVpYE2fD3HOpjqdTiyFAC3w9YLTWZ3ayz1pm3T3ZinOOmiqHKXJ4tcHYizcxkhtGURaUlgqYmMk/ingfiIiTL9Tzhe9Bpj2/WbGYm0xwejHNmLMnd1Qonx1I0HW8Hc3yp2KDacokYao9xkQScm0ixVrGZ6ES+m5pKEEDK0tmoCnOwI8NJIrpCJqoRBKDLEpWWy1RfjIiukI3ouL4PBKQiGroi9cgNu5jPNzg/mabR9pjN14ibKglTpel4KJLEWNrk1nKFhuMTAFcWimGRpCkyBwdiXJzKMJ2NkrR0kpaGF/iMZ6JcnMqIOPWkuFHv7xNGWL/7YIvZfJ3Dg3Hark+l5bBZtZEliVvLFRYLTfL1Np89lKPYaNN2fa4vCufNxWKThKWjyBKf3J/lxmIRxw9wfaHQqbddnmXgenY8ha7IfO3BFuWmw3y+QcxQ2N8X483pTKh6ub1a4dZSJSTmlZsOqYjOm/synBpNslxqsr8vymQuyqPNOpVOcFnb9ZnL10M1z9nxFH4gTMKWik1Wy03m83WSpkbS0hhJmqEyqItKyyVuqlya7S3gPgw8L530ZbBSar1Wi66EMGgbTJpcXShxabbAeysVKi0xBrsyX+LqQomjQ4mXOu+JTPSFzqUfB7yvQLFarcbZs2f55V/+Zf7u3/27nD59ml/6pV/a9dibN29y6tQpHj58yL59+8STShK/9mu/1lNIbMdf/st/mV//9V/n3XffDb/3x//4H6dUKvEbv/EbAFy8eJELFy7wxS9+EQDf9xkbG+NnfuZn+Ct/5a9QLpfp6+vj3/ybf8Mf+SN/BIC7d+9y5MgR3nrrLd54440Xvs69QLHvLq7MF/nR/+Vbzz0mDI3qcAOeh0/ty3JjqcR0fywsQEQWh5ADOq6PpsqslZv4gZj/+x1FgyJJ3FuvcHxEeDmcnxR2zg/WayGJ7uhQgmrLYbHYZCIbYThpUbPdMIPj1FiSh+s1Dg7GubZQwlIlsnGTfK3NSMokoits1dohwW97QJMiS7wxlcH1fd6ZKxIxVA4PxgVxrWN5vX8gjiKJrsFQ0uTgQIyv3RdET12ROD6SxA8C9I4R01gmwt21KocHBSnUVGVKTYd76zXars9I2hLqC9ulP2FyY7HEqdEUWzWbkZSF7fps1mz64waVTqR3uSE6K4MJA8fzCZDYrLboj5usV1s7MkBAkFBXyk1MTSGiKeiqRMzUeftxnpkpEf7lB3BvTYRzjaZFYNYn92f55sP8jsdTOjkYAK7vk4noXJorcno0gaWLEYjnB0iSRNMRXI+oodJoe3hewL31KjOTGWzPF695LEW+brNVFSFeDzdqnBpN8o2HeT57qI+v3tsUZFDHo9hos1WzabtBmEa6vz9GNqpzf134gmiKzFDSotRoE7c05rZqrJbt8D2XkFgqCafSqVyUhuNxd7XCSFrIQN+czvJ4s0ah0ebiZCYMtbs0V8Ts+KwcGU4iS08KOU2RODgQ495aFU2ROTqcZL3cotR0Qhv4iUyEmu0xm68zmYkiSbww+OtVIEkfXBLaHzfYqL56FtCHgf64QS5mUGy0qbbcXW3yn4WYoXJoINYTwPc0fvjoAP+v/+P5D+FMP3y8ylr4vjoVn//85/mRH/kRfuiHfui5x9Xrdb70pS8xNTXF2FhvOMrnP/95crkcMzMz/PN//s/ZXtu89dZbOx77c5/7HG+99RYA7XabK1eu9BwjyzI/9EM/FB5z5coVHMfpOebw4cOMj4+HxzwN27apVCo9//bw3cPtXeKVn0Y312O7Yc9ULrKj7Rg3xbghEzVCsuTMlJgxB4GQql1bKuF4PqOZCIcG4jzYEDfgqKGgSBK2Kxbkc+Np3pkr4ge9rPyW4zKUsjBVmVzM4K3Hed5dKTMzKfwq3l2uUG97zOcbHB9J0J8wGejYF/fFxY7c9QMUSYwuuimFhwfjHB1KcG+tAkgcHkpwsD8uckc2akiSxEDSpO14vPU4z8xkmqGkSa31ZGfY9kSK5fXFMpfmihwaimNqCjNTae6vV2m7Pu+ulNmq2ZweS6HIEsvFJookfDViuoqpKWiqzEal1YmTF2OAZtsjZqhcepzH0lXeXamwUGwSILFcamJpCt94lGe+0GQ8Y/W8L/v6olxfKjGWjjCfb3QCsypcms3jBQFBIPJS3l0uM54VeRhLxSafPZjj6nyJTFRHlUWM+KlRYS51YiRBgJjhLxUaRAyVTx/IcXO5wlKxiSRJOJ4w6BKmaCJ5VZMlio0WFzteHTIwGDe4NFtgs2Kzvy/G7GaNwwNxvvkoz8WpTFhQLBWbzBcarJZbHB9OMdWZjZ8dT7FZadF0PIoNh4VCk0ebdb7xcIuIofLWozyNts+nD+Q4NZrk3ZUK15dK1G2XhKXxznyB2ytlzk2kw+6WrkisV22m+2JhwFyj42MykLQYTkW4vVJGkUShe3osheMFJEyNgYTJ/v44SifNVBS9FfrjJhXb7YyBdErNNh/WpMHSFE6OJrkwsXMc+SrY1xd9YfjeR4WBuIEfBNxerbBabr1SQQFQs12uLJQ4PZZkIC7I2UeG4mJsMplhKhdl38fEh+JFeGWi5q/+6q9y9epVLl++/MxjfvmXf5mf+7mfo16vc+jQIb785S+j6080yb/wC7/A7/k9v4dIJMJv/dZv8ef//J+nVqvxF/7CXwBgbW2NgYGBnsccGBigUqnQbDYpFot4nrfrMV3+xtraGrquk0qldhyztra263n/vb/39/jbf/tvv/S12MNHi6/cWefIYJyYqXJ/vRYy7bfD8YRd9v21KqNpC8fzWSo0SZi9bd0jQ0JNUe+MCs6Mp7A0lalctJMymufN6SxNx+ObD/Od/AmJdmfhfLxV7+xGXa53ugfOU46Zj7caJCyN0UyEzapN3FA5MhxnId/A9YOQeFqot0O3waSlc3ulyIXJDOcm0zRssTi0HJ9by2XOjqdCxUfC0sPEVdv1GEwIBUpXZnlxStycLs8LSeDBgWffpK7OlxjPRFgoNBjPiOyNuCna+vmazaf252i2XWzX5zMH+7m+WGIkZdFse6QjOu+uVDg3IRZP1w9QFZnT42lmt+r84KE+GraHLElMZqOUmw6eH9BsC85EwlLxvICDA3FsR5AVAd6czvDW4wJ9MYOpXIS5fCPsuhwZjHNntcKFqQx12+XmcoWkpdKfMMnrSk/k/MWpDPP5BmMpi764yVfvbZKL6VyYSkMgUbdd7q9XaTo+Y2mL9apN4AeMpCPETZ1C3UGWhSNmy/OZyFgESCiKhKEptD2ffX3R8LpfnitwYTITfl1vu6E6qNF2aXeIlNtxcSoTdhEMVQ5TS7sz+fl8naiucHwkhSyJolDEtqe5vlTmxLDoulRaDk3Ho9xoc34izZ2VMnXHFwXzvCAWL5da+j6n0QAA5sZJREFUXOx4imSjBjeXy5yfSNNou5wdT6Eqws+k2HA6Xac2R4aT3FurMDOVwfcDri4U3xef4dxEmhuLxWcm0L4sZjomat8t86uxTCS0f/8guP6MVNj//tPT/OXff/gDP/7rgFcqKhYXF/mLf/Ev8uUvfxnTfLZd6k/8xE/w+37f72N1dZV/9I/+ET/2Yz/GN7/5zfB3/vpf/+vhsWfOnKFer/MP/+E/DIuK7xZ+/ud/ni984Qvh15VKZUeHZQ/fGbQckc54p8P2liU4MhQnus3F0Ouw4yUJ7qxWSUU0TFUhE9V7ZpOZiEal2WZmMtPhRASARN12GE4Jzf6nD+TYrNrkYmIuP59vhMTPLrrkxYP9cZDAC3qLipmpDHNbdfb3xzBUmXLM4PFmnXy9zcFnKANE7HeKrz/Y4vyEsJbOxHRMVebQgJj5DyQMAj9gs9pipdTkwECMW8sVRtMms1tinGCpoqNwcCBGf9xgbqvO1gvaxAMJg4VCY4dkUZUF8TGiqwSda394MM63HuU5M5Zko7NblCWJhUKT5VKTsYzFZCbK/v4o69UWD9aqqIpMJqr3LEYr5RaS1Ild7xD3AA4MxFBliamONFdVZPb1ideyWGxyeb7IUNLkynwhNOPqKnOeRhBAseGwXm11IrTFeGN+q854JoahKfTFTDY7MekbFREJ/61HW+zri7FYaBA31Q4BMkrb87i+WGah0AhlpHP5BoYqsb8/hqbIlBsOn9qfxVAV5guNsPsDEk23dyXUFVF4HB9OMl8QMtLTHdWL4wpOjyzBaDoSqoNOjSbRFJFrkovpmLrMpY4EOmlpTGR7Fz3bFc6fc3nRPem+x4cH4533ThSmXc+Vw4Nxig2HjapNOqKhKzJHhpIUG200WXrfBMm262NqCnXbe9+dj5MjyR711oeJi1MZmo7wOVHkjnCg87MgEH/jng+GJofeJB8F8vXvTgfmo8ArFRVXrlxhY2ODs2fPht/zPI+vf/3rfPGLX8S2bRRFIZlMkkwmOXDgAG+88QbpdJpf+7Vf48d//Md3fdyLFy/yd/7O38G2bQzDYHBwcIdKY319nUQigWVZKIqCoii7HjM4OAjA4OAg7XabUqnU063YfszTMAwDw3h9iEDfzzA15f/P3n8HSZqf953g5/VvelveV1d7P+1mCEsRAjYIhXQn6JbS8hQMklqJXIpHAieRyzsFd6VgSFxdhAiGIOwqVhck92RI6nS6XQpa8CCQxAAc09M97b0p76vS29feH7/MtyvLdXVPz2Ag1jeAALrqrcw338x8f8/veb6GTxzIAiJx0/NF4bAd2rket+dLnBtJBccNpUP0JUxsx+Naa4eQCGkMpkLcWSihqzIxQ0R6H+2NEdYVHi5XkPA5NZSkabsc6IpgagrrFQvH9ZkvNDjSqxEPqdxdKNEdM6jbLkf74jxdrTCWjfDWk3WO98epWS7rVYuTAwnuLZY40hPFbuVi5GvCiVJTJSZXq3THDJ6uivTGkK4wvV6lJ27yaLnCiYE4bz/N8cmJLFYryyFmqgwkw8zlRUt8KBNhqdgQIWIto6pESCO3i/Xy3YVS4GuxEa4HU2s1DvdEuTlXpD9hoisSZwbj1CyP14ZTgUVz3FRJhzUiutjBF+s28ZCKLIvE0N64yVKpyaVWh+HJaoW67ZEIawHXBODRsiiO3hjPkAy7SIDteTQcj9ODCa7NFkiGdWHU1DrW9YSz5ubFKt9SF5QaDmFNpmZ7jGVE67xqOaiKFIR6ybJEIqzjSxKfOJClZoswtb64SdP1qNsuYV3hh8YzrJTrAcdFnKs4Pl+10FUZy/WpWU1BrAxpNGw3KGo2wnKFDfxMrkY2qgcdGmh1KkIalYbN5ak8UV3mR450s1Ju0J806UuaqLJMzNQ43i9kyFFDRZYFN0VXZXJVi2RI40BLIr3YGpucGUxStRwyEZErk40aPFmtoslSxxgv37LgfhXY+B63c2Z2yhbZjHPDKeq2G8ijXzUujKb2/DrPjwj/mA+rsHiVnjzfb7xQUfEjP/Ij3Lp1q+NnP/mTP8mRI0f45V/+ZRRF2fI3vi/sgJvNnSux69evk0qlggX9jTfe4D/+x//Yccy3vvUt3njjDQB0XefcuXN8+9vfDsienufx7W9/m7/9t/82IFQomqbx7W9/my996UsAPHjwgJmZmeBx9vHxxmcOd/FP/tNDTg8meLBUDqKfN2NjcuFG7nRfPMTlyRyfPfRMRTKYCqHIUos3IKSVYicl5snlhsPh3hiXJ3N0xwy6YwampjCYehbvfH+pjAQMZ8KMpMOUmzaFmiU6Ej0xhtNhFgt1cjWbzxzKkqta2K7PStkK5HRRXWm5PaYY74piOR6Ta1VURUJXhI2z1HpBC8UGcVPl8UqZvmSI2/NFfuhAFqcVfnWgK8JCscHpoWSw4IY0hSeru2v6q5bLyYE484VGR/hTWFcYzYSxXY+D3VFipiocKyUJXQNVkTjeH+fOQolM1GCpWCcR0rEcj4iuEFZlzo+kKTfEqOjcsCB3PlmtEjdVTg0m0VSZt1puoRthuUJBcX22QEgTstfvPl5jKBUG3+fqdJG67XJxNI0kifb65rZ0V0zn0YpQlhzpjdF0PN58JLwgjvbFMNRnt73LLTvruVxNKFskeH08Q6FqI8nwZKVC1XLpTYhMF7n1nJbjdfhLqDKcGU5xfbbI2eEkM+tirBQ11Y5iOGYKJ8+ILq5p3FSDggIIrNbPDicF0dWHb98XirbBZIjuuMG12QIDCZNYSOPeYjkYz8znxfgtX7NJhbWWNb2PKoPjiWsbNhTS4QjxkMajFSHdzUb1ICCtZrnM5evbjho/KBq2S3/C3FNRcW4kxfXZwgt71ewVR1pk6b2izd16d1IE771KAisIefXT1QrjXT/4vIoXKipisRgnTpzo+FkkEiGTyXDixAmePn3K7/3e7/H5z3+erq4u5ubm+PVf/3VCoRA/+qM/CsAf/MEfsLy8zOuvv45pmnzrW9/iH/7Df8jf+Tt/J3jMn/mZn+FrX/sav/RLv8RP/dRP8Ud/9Ef8/u//Pt/4xjeCY77yla/wEz/xE5w/f56LFy/y1a9+lWq1yk/+5E8CkEgk+Omf/mm+8pWvkE6nicfj/PzP/zxvvPHGnpQf+/j+48RAglRY2EqfHEhwe764ZVd6biTFfKGO6/qsVprUbCdY8Nq70Y1s8abjkgzpvD8jXCslJBTZw1AVqpYYpbQLk6FUiNl8nZVyk7NDSVyflqW3WFijhspaxQpayFFd4eZcgZipcaw/get7FGt2EI1+vD9O1XKYaz3moe4oxbqDocoYmjBdarfzJ7qjVBsurw0n+c7DNd4YTyNJEqoiiHRvPlrF98U8XlNl8jWbakvKdmE0RaFm84mJLNdnCyImfQfcmi8RMxTOjSQBiXLDJqKrzBfq5GsWo5kISkuSOJgOc7nl/HlnoURfwmQkHWZmvcpCoc5svs6lsRSKInNlOseZ4ST9CRPff5aQWmo43FsqUWsKxcJwJkIqpFFqODxYLnN/sYwHHO4RY4p2ZyATFXLWgz1RKg0R+y5u8IKPcagnStzUmM3XeOtJLshvub9UFqmo/rPd5rlNUslrMwW6YwYHu6OEdIWZ9SpD6TBr5SZ9CZPHLQmweC5hJFbadE0dD2bWay33zwKfPpTlzYdrW7xSDvfEOoqgkK5wdjjJtZkCsgQHu6M8Xa1SqFl0RQ0hZW4hFlJ5f6aAqcnMFRqcjYkOko8UjDd64ib5mo0PgQX4maEk12cLVC2XuaUyZ4ZSFBsO6xWLrj6DNx91FnfJsBa4er5KRAyV6dzzrblPDMS3lR+/KvTGDRaLjUCdsxc0NnTzSh+Sq2f+Jf07Pm54pY6apmny3e9+l69+9avk83l6enr49Kc/zVtvvUV3dzcAmqbxz/7ZP+PLX/4yvu8zMTHBP/kn/4T/+r/+r4PHGRsb4xvf+AZf/vKX+c3f/E0GBwf5F//iX/CFL3whOObHfuzHWF1d5Vd/9VdZWlrizJkzfPOb3+wgb/7Gb/wGsizzpS99iWazyRe+8AW+/vWvv8qXvI8PEYos8cmDXfzBjQVuzReD/Io2xrsiwc3ntWFBaLu/WCYbNbg0mgrkWw+Xn7X5dUXGcX0muqM0HI+QpvJopYLt+hzvEyOLpVKDTx8Urps9LRttoTePBeoN2/W5s1Dq0PJXWtK+rCqjyvC9h51t0objIkkSK+Ump4eSRHUFSZJYLjVahVM8kMgaqkSotRM90htjrWLxaKVCOqLjtHawbfvrdjy8JElcGktze65AsxWgdaQ3/tx2bbnpcnW6EPz7eH+clXKTTx3MMJdvcKWV2Ol4PqYmoylysGgPpkK4PvQlTfqTISQJlstNjg/EubtYptJ00BSZpaLL0b4Ypq6itSLHV8rNoLNyeijBxQ1kx+lcnYHUM96W5/nM5mqoinj+2VyNzxzKMr1e4+JomqVSg4fLzxaijcFTmyPor07nA/fJNs8lZqrkaxY1S6HpeJTqDpYrxjQiVE50m0oNi2LdYSwbJhPTg/NPR3RGMmEmuiNcmcrTtD0UqeNpMVWZO5uSPOuWy+35Ip+ayPJkrSIkwhJMrtWYXKvRlzAZDmnCqKtiIUniudbKTXx8Xh/P8LQ1whhMh1FkiWN9cd6fztMSOWGoMroikQ5rxIw4V2dEGJyuyttyUgo1m0KtyIXR1I4E6ZdBaY+Pc3u+xImBOLfnX0x915cw6I0LV1TL9VgqNoLRTxshTXQml0ovxmHY2F0p7XF886KIbSKX/6DipXwq/qxg36fi+49/e2WWf/AHdyg3hZ9Ab8JkoeUYeLg3xoMWkfPCaIq1itUxm7wwmua9qVyQP1GzXK7PFoJdqywJW2xVFjLNpu1Rtxx0TabScIIbz+mhBJosBzvMwWSIhWKd4XSYwVQIy/Gp2y6rlSbLpQZ+y3AoFda3SODSYZ1MVOfRiliMjvRESYQ1PF/crFZKDWRJZFhkowbvTuY4ORDn1nyJUwMJQrrC+zN5bNdvMfclbswWODeSZrXc5OlaFUWWONobY6XcxHI8CjUrWGA24/Sg6ACpisSBrhgRQyFXtXiyWqUvYXbclNu23rqmkK9aDKXDdMcMrkyLFM8jfTFWW7t7y3bRVJEzcW44hSQJcmLd8jA0mXzVasloRUG0uWCEZ54ESiszpGa7YkEoNvj0RAZZljtGEG3sNPduP8elsRR3Fkoc70/gej6O57VyP8SM/fRgAl2Vmc/XSUc0woaG1fLkmM/XOdEf596SCB07NZAECW7NibHMZw5maboe12YKTHRFSIR13noivDTahdhez3fjec/lRRCYJkvkqjaPVysBUTVuqhzti/P+jIhcL7SMtXpiBpmoQdRQ0VWJ7z0Wvh/XZ/JB0unzoCkSpweFj0j7e/dBEDUUKs3nm2DFQypmy5r+eTjeH2O1bG17bMxUGUqFiZkqliP8Tm68hBKlzc0BMR78oEZe2+HNv/vDDGfCzz/w+4AXWQv3sz/28bFGoWbj+uLG+2i5Qn8ixEKhQTqsdYQLLZea9CbMoKg42hfD933Gs5HA4Kl9Q4+bKjdmCzi+Tyaic7Aniq7IPF6tkgpr3J4vIUvCx8L1fBRZ7ljwPF9IKKfWa0ytdyon2nA8n7FtdPW5msVI68YRanUl7i9XONgTpdZ0aFgOB3ti5Go2hWqTwaSJKkuc6I+jKiKa/VBPlGzUCIytzg0nuTy5juMJPf1AKkRIk5ladynWbc4NJ7k6U2AsGyET0QXbXZG4M1+k0nQY74pSaTod6asAi8UGE91RHrcKoHLT5YcOZLgynWcwFWImVwvsnVcrTbRViYVCoxUJLhwmJUliar3KwR4RBnZ+JMXNuQKmpnC/JVmUELvpjeiKig7RwZ6o8Moo1lkoNjjYrRPORmg4HmFD5vxIaovccbu29sHuKLfmhLth1XI4PZjknafrnBxMBDK/96ZynBsRaaiXxtIMpEJCTjmd41BPnKGkSV/CREakhL4zmWOhUGeuIFr6h3qiyLLEO4/EZ6UrZnaw+u8vlTk7lKDWKqxuzhU50hsLElYBxrNh8jWbbMwgZqhBCNxaxQoW9dFMmNeGkqiyzPH+GJbj83ilwsmBBGsVi5lcjYiuMNEd5d3W58JQJY70xphaqxI1VQaT4R0JkOPZCGFDhNStlBrByOhVFBUxU91TUVGqOwz3hzsKhYvtFNXpPLIkOmqqIu/KjSg3tn6uXxSG+qyggA/uDLoTcjXrY1tUvAj2i4p9fKyxVBJJoe9O5hhIhbg+W+DiWJrlUoPpDQv6TK7GQNLg4mgKx/OZy9eJpFWyMYPVSpP7S+VgRziYCmNo4ma0VrHoTThUmy6O6zGXq3GoJ0oypHN5MocqSzie6ArIshS01RVZ2pbZvxF35otENJnuRKiVGumiSDI+PqYqc6g7GuyakiGNqbUqtutzs9X2fX08TdIX3IGJrghzhTqFmo0swamBZ4vwasUKZJaGpjCXr5OJ6gynQ9xbtCk1RA7K1el8Ryfn9GACy/EC0t52SEf0jn+3PSfar912vSA9tDduEtFVnrZex/H+eEAA9Hyf18fTzOVqjGTCpCOiC7NSarBYFNbXbXmfrsi8P5NntdJkNB1mqsUXODWYIBMRHadc1aJQszE0paUOEdfxxEA8CKuSJKEiOj+c4v3pHBNdMRZL9WDkcWowgak+I5cf7YszvV4lG9VbUl3hQvmJiSyluo2pqRTrFldmi8gtg7Ka5TJXqHN2KMmt+SK5qsWR3ii9cZOq5WzhAF2bLTKSDhHSDTRZYrHY4MlqRXBOcnWyUYOnazXyLdVOmzO0EVPrNdYrTca7o4R1lVK9Qb5mocgwkAoTNRW6Yia354pcHMvguB5SKwF2MBVirWJxZ6EYdMA2w3Y9bs8/+5x0RUSey4VRMeqrWS7LpcYLpYu2EdZVYI+jhw3joyO9Ud6byuH7ws/k7mJ523P/MJAMayxvGpfstePyInieBPwHBftFxT4+1vA2TOfm83VhubxDq1iWZNbrTRIhjURYzKGP9MUoNxwGU8JWul1YRHQlIF1unt0W6hUMRaI7ZjCajTCXr3X4VQBcHE1Tbbr0Jgx0VUaWJFRZplC3gpjxg91CQjqbq5FsjThUWeK9qTyfmsjyvQ3qh0LNJm6onBhMMpevUmm6vPM0x6mBOF1Rg8er1aB9L0vCybMnbpCrip3peFeErqhBWJe5MVcMFAeXxtLM5mssl0pbmPTtgqbt/rgdNicR3FkoMZgMBbvzmVwNrxVlXqrbAfcABHHRUGUWig3m8nU+OZFhNBMBSbDpj/TGWh2VGqvlJr7nYWhqsIieHIjzdPXZ4mZqCu9N5VqySbHomqrEaCbKpw9m8JH47qM1xrJhzrZcQQ1V5k+frHGsL46uScFCKPgC5dYiJwqMewslzo6kcFyR9dEmrwpeiMJquUGuZnNuOIWigOeJ63OgK8KdReGGOp6NcHkqT6EmSLNvHOgkah7ri3F3scx0ro6pyoxkwtycKxLSFQ50RbZ8znJVC1WGobToMmmK8FN4+8l6YDUvS/CJiSzffbSGIsv0xU2Wiw0UWeL+YplczUKW4PRQkncncxzoEiFit+ZLHO6NkQxpeL4wJ4sYCu9usrtfrVqsVrcWEFFdoTcZIhXWtuVmbIeNXZnnIdwKkzvQFWWp2AiMrx4uizTdjwoxc2tREdb31nF5Eax9n9xCXzX2i4p9fKzxq3/hGJ86mOU3vvWIW/NFTgzGqVtucBMzVGGSZGgyjucztVbl9JCIjT7SG+PpapVzIymuzeSZa+2uXxtOcmuuyMHuKA+Wt+7QB1MhTE1p7YqdbY1/rkwL74yNiYumKnOsP8YPHRCZFJenxIx7NBOh3LAp1Gz6kyEO9UT57uM1zo2keLBUQm4RF+OmyjtP17kwkiRfd+iOGRiawlg2wlA6FCgB2l2J7pghkkFjBtmo6CjULBddVQCx6C4Unj8Ln1yrduSMbMRSqcHxfnHN67bLUDrMQl74K6xVhKnX5Vai6qcOdvF4QxFQbjoc7EnieyKj5XuP1znUHSEVMVAkmZipBu+jBGRjBrMtdUB3zKBYd6haLmeHkni+jyYLqW1f3ORyVfzdoV4Rjx4xU/i+z1A6xORajSM9ciDh/eREhnzNxnV9+hIGqiJzdTrP6SGhujjUE+XOfBHXp6Ng1WQZRRZEz/VqA1WW6UsIwzFZlqhZLk3H443xNE9Wq5wdFt2KqCEM2AZSIfwNHx5NkXDdzn+nwzrnRlIokuh+JcOCiGs5wiOj2rTpTYSYXKsS1hWajsTdxRJnhpIslxpkoyaO5/G9x2uENJnhdFioYoYTeBWfiKFQsWSO9sYo1W2O9cU61EAPNnE8XiRErGK5PF6pBIZae8GLKSckmo63pdBar1o7fl4/DIT1rVYJ7XThV4n9omIf+/gIIEkSf+5IDz98uJtv3V3m31+b5+ZckdODCVYrzQ4uwMHuCLoiMblWJRnWubNQpCdubpGnvT9T4HBvjHRYC8KsNu5E5vJ1RjPi5nxhNEVvzAhyF9rwfLEojGSEzXe16fJguczUWo1czebUQIKb80UihsLUeg3J9xnNRrDcZ3bdD5ZKnB1K8WS1gq7IjGejNB0XHynwK8hGdU4OJPjjB53dGUmSgtlu3FTBl5jO13BcL3j89phoL1gqNkRQ1VqF5VIzIMEuFhsd6onFYiMg7x3vj1NruuiqzNmhJN95uMrhnigr5SaFlqxRlWWqjljEDveIBNN3J3OcGkxgb4jzPDeSYq3SpNp6TWNZYeZ1vD9O1FD5bqur0+6IXBhNUa47zOZqHO+P82i5zEAqRE/MZDZXJxMzuL9cIdEyKRvvinBluhBExfe1VALt9MjteIuyLFFtCl6KiAr3kCXBhelPhoKC6HuP1/nERIarU/nAS+XuorARL9Ud3hhP03S8lgS5yamBBEulBivlJlem8xzsjiLJEpefbu3A9SdNloqi0ArrSivULcH9pTLnRpK8P12g0rpmgykxj780lqZYt1mrWJwaTJCrihyPTNTA8TwUWQq6dBsxmgnj7BSxugvWX2AMslbe27FdUYP3Z/I7yj5vzBW5OJoOXEU/TOjK1ogsU3vpgO8dsfqfyfjj1V+ZfezjQ8DUeo13nua4Op3H832ipspisYHt+pwdSpKO6DxaqdKXCjOcDuN5Yqa/E5GybTp0bbbAcklYE58ciHNpLM2JgXgg77qzUMKXhBTtSG+Ui6Npzo2kWjwBkQ6qSBKPWrbMqRYHYanUYDBlMr1eYyApjIouT+WFqZOu8sZ4mqip8d3Ha3S10g8vT+W4MVfkzkKRT05kOTEQJ1e1+OMHq5wcSDCcehbGNZOrtcLNksRMjWszOZaKDQo1i4muKBdGRSjWxjmtIgvJ6WCqM9QLhAzUcj2WS00O9UTpiupcHEsjA585lO3gVtiuz5XpPGsVi/em85jaMyLrg+UK+D6XxtOcH0lxeSrHw+UyqYiO4/lcmy1yaSzNUrFBxHi2p2k6Qr7Zhu/7TOdqrShpsbsNaTLXZvKkIjrlhsNsvkZfIkQyLHwu7i2Wg4LKcX0+cyhL3fZQFJnbCyWyUZ2m7fKdh2vcni9yb7FENmq02ulb0X6dM7k6A0mTXNViar1GSFUI6QqvDSf59MEsF8dSVBoOB7qjjGbCjGTCnB5McLA7xpG+GHXb5f2ZAvcWRUCdrsqMd0W4MJrCUEXuxk5GZQuFBudaQVzvTeVJhnWajkc6ojNfaHBqKEkyrHFpLC0s64HlUgNFFmTlVEglYijcaxXeV6cL5KrWloLC1GRBSt5mAX0eVivNPXU4UmENe4/eEGNdkV19JCQJHi2XnhspfqArwmvDCcY+AAFS2WZko6uvful8sLy7Wd0PCvY7Ffv4gcBvfOsh/9uNBUDsxMp1R3jzez4xU6Vuid3wYqFO12CSqfUC1ebWG87B7ijlhoO0gS2gKRL5mk2+ZgcErJMD8eD4qbUqqbC+bWx3d8zg6kw+uPFMrdfoT5o0bI8T3cIjYi5f50hvjCet0YAqS7z9NMdEdzQwZAJxY2/YHn3JUAff4vxoimLNJmZqnBsRChdVllitNFmrWC2mf0wULpM51qpW6xg41p/g7kKJ04NJTF2mbrnUmjbnR5IosszN+SL11k5XaZFQHy5XMDUFx/U50hvn6VqVI70xbs4+2xXDM1OxzUZQ+brDO09zXBpLI0ticX7naY6QrnC4J4btekjAlQ1zeF2ViWxoM29cT+4uFINFS1dF92ByrcrJgQTL5UZgM67KIizsUstwqm6LMcJ4NsLkWpVsRCNqqpwdTlJrusEI53hfjDvbWMArskRfwqQ/EeLeUpHzoyk0Wea9qXUWWgTiQz1RkmGdGy3n0EcrDXRFCkjE49kIuiJzciBB3XYoNRxm1qvoqoLr+wwkQ/T2xHj76dYId4CYoSJLYmSnyCLfJdQi4x7qiVKu20x0RXl3Mkc6omOoMpWmMFg7O5yk0vQ42B2j6bpUGjYhTWYoFd7i33C8P8HV6Ty9iZ0znXbDXH774n0jKk2RYVJuODzdxZY6rMncXdidhDmQDDGXr3OsL4ymSMRDGookRkPtz46hytRa3jE1WxBNZ3O1F/ao2M50QX2J4ut5uDlXbKnN9s47+Thiv6jYx8cedcvlP917lvMytV5FV2TOjySxXJ83H60xlo1gqDIhXWGx2OCTB7K8uckG+txwkpvzRWzXZ6nU4OxQkodLJQbTERJhjStTOZJhneP9IUp1i+6YyEhIRwwyEZ2FYoNUWNggG6pMs2WOtVIWceG6InF5Ks9oJsJaucn0ulj43pnM8b3H65wfFXN/y/G4OJpiOlcjEXq2O2+0ZGv3FsvETDUw3JnP1RjrinBrrkS56fC5I918+/5KQFU72i8cCNsL7+Sa4JHkqhYrpQbxkIaqSFyZytF0fE4PJZAkiaerFUKaGF1MrVVpus8KhpCmcH+9xKnBBCFDpK5u3jmulpsc6Y1uW2zBM9WK7flMr9eoWy6rlQY+Bsf64oxkHCzHQ1Nk3pvOkwiphHSFutUZPmV7bLHiPtIbY6ZlrT3RHeH18TTrlSbJsMaD5TJyy+P8WJ8o7I71xYiaGuWGw52FEmFdIWoozORrnBtKcG4khe14HTLLuXwd2/GIGArdMRNFkpjOVQnpKtVW9HVv3OThihhF1C2PM4PCdfPyVI7euCGcOSsiqO7GbI2J7ijpiB6M5BQZ3pncvqC4MJri3mIJy/GDz8SxvjjFho3tCF6RJovY+7AmMj98CaFk8nzyNZuIoXBlWig9NEXm/KiQ8L4xnmFqvcpwOsz0ejU4H2kLNXdv2Gwwth1s1w94EL1xk4GUiSxJrJQbTK/XSUd0UcSvV7cQIzejTfhsjz5t1ydfs0iGxWPM5+v0p4RN/6GeLPeXxFivL/Hi2U7uNlVFxFB2VM+8LGqWy8PlMkf7frA9kfbHH/v42OOPH6wE/IETA3GWS01m83V8JG7OFUmHdZqOy/2lMtdmCkyuVZkv1rk0lub0YIKzw0kSIY2rM4VAmQBwbbbAqaEkq+UGrudztC/OcmsHV26KkLCwrtIVM2gbNGaiBqmQCNAazYRp2F6roJC5u1AkqisUahZN1yMVMVBliYujaS6MplAkCQmJu4tlTE1hNCMcQdtSvTaO9EY51rqxxEMqUVPD9QTxUUKQQ88OJzFVmZih8GCpzMXRNPc36PGvTueRJJ+umCHkqPkaZ4fE8zxYKhPVVcZbKoC3nqyzWGwQ1hQujqbpjRvM5Wv0J0Osli0UfDzf3zZ75Xk7tserVeZyNS6NpdEUYdz0cLnC+7MF5gsNrs8VMVqkt2LdoW65nB1O8n7L9fHsUJL+hMGJ/jhH+2L0J01GM2GerFSo2y6DqRDz+QaFms2jlSoLhQZHemMkTJFMmwprfHIiQ9TUqFtOwFU5MZDg6kyBCyMpXF9cr5vzRc4OJUmEVIZSIQaSJiFdwfPEdXx3MsdCocGBbBTPF+mZbz9dx3F9bs0VyEQ1Sg2hgDnSG2W13GSt0qRuu5QbNqPZCD5iIfzkRAZdER2Z7XbCx/panaGmi65IAQnzwXJZ+FeYKoPJELbnC2M32xMZNz5IrZIsX7W4MVukO27wYFmMXhYKdd58tMbNuQKeLxJRN+7cpZfcJDfsvSshjvXFSEU0CjWbxWKDuKlzZkikv747mXtuQQGdqjAQRbDt+uSqlnifivWAezOXr6MrEp+cyLBYfHHeQnPTaxtKh/jeo3VuzZcYSoe4MJoKQg0/KF4kj+Tjiv1OxT4+9vj/vD8PgK5IFGp24PR4d7FERJOZ6ImwVGxybiTFcrFOXzJEveVtASJv4WB3hHuLJapW58Jouz7j3VFc12et3GQkG+HuQomm6zGUNDE1hVLdJmaonBtJcnW6wPnRFFem8ox3RVko1Hi8UunYWUcNjYbt8XC5zOHeWIfcrm3gc3uhRK5qcWZIJJgmQiqHekT89P2livCiGExwc67IoW4tCDQ6MZCgZrl4LaVDOmJwd7HE5akcr4+leX8mz0R3jIghRkJtXw3X83lnUriLPlgqU2raXJ0ucLAniqnZxE1hspSO6CyVmhiKxFA6jOv5PGklli7ka0z0xLFdL1DaNG0vMNfaCW7La+NAV4TFohgbFOs2oVYR0x71tO/Lk2tVzg0nadguMUOlanksFEucH00R0RWutCzF7YZDpeEwlA4HxmZzG8yo2lbrpbrNw+Uy6YhOb9yg6XjcXRDcjvdnChzoeiapvTlX4I0DWTRVYr1iYajCV8R2nyWiPl4po8oSIV0sZFFDZSBp8t1H64ykQ8wX6qiyzOmhpMjg2NDKvzCaIhnSeLJa4cJohqq11fJZUyQihsqZ4RR3F0tM5QT5Nzed50R/nLrtcqI/wR89WOXiaDpQIBXrNroqM5yJENIUyg2bdEQnGzWI6iqO51GsPbMlH0iGtyzg9ksQNYEOc6jnQVcV6rZDvmqTq1mBKutFUN0k51xuZd48WCpzoGXmtlxqcH/Jbo3hpI4NxQs91yazq564GaiUZnN1ZnN1Jrqj5KoWB7oigSPty+D6bJ7/6tLwS/3txwX7RcU+PtZYKjb4o/ti9HF2WBgBtefBqiwxlokGMdJhXWa53GSuJaE80R/n9kIJ1/fwUWk6viBhGlprp+OjK3JLz19iJBPF8Tzm8x6qBGFD463HqzgeXBhLc3W6wMmBOLoi0580uTKdZ6I7it8y82mbIV1uWYMf6Yt3SBQzEZ1S3eazh7I0bA/P9zE1hfGuKHcXSrw3lefccKqlUFBZr4p2vuO6KIpCzFBRZXFTvjpdoCduUGo4jGbClOo2HsI74elqtYNncGEsRd0SMe5PV8ucGIgztVbjs4e7+JMHq1waS/H+dB7bExwAYf8t887THOdHUxTqNnXbo+74LfVGkYujKdIjKW7PF5n2fM4Np7g6s7tXwZPVKsf7xNhiojvKtdliYFQFgsNwYiDB7YUSi8UG84VGsAu8NJbm7kKRxgavERB8k+3IuKOZMG8/Xe9YSMRiUMMHNEWmaXuMd0WIGCpvjGeo2w6GqvB4pUw8pBE3VRLJEPeXSmiKzIXRNFemc2RjBn2JEMW6RV/CpNywqbTGIaamcKgnRiIkrL03yiF1Rcz5s1Gd1bLFw+UK410RPjGR4e0n6wEX4LXhFFXLIVexODOU7JB9tjkDR3ujrc93gcM9Mc4OJZlsjTPaBdahniiqLIvPma5wbabQ2q03yEQMJMnvsJxOhTUcd/s4+Y0Yy0aImyqKLDwzJCQkCS63zKmeh+uzBc4OJ4mFPGzP2zW19EhPhJCuMp2rkYmKzt9CodER1Q7QcDzh6aHIQYJoV9SgJ27g+j6VpvPSTpgbnXtjphpk7WzE4xWR27JcUlnZo+JqO+x3Kvaxjw8Z//7aPJ4P411hmo5Hf4ugBcKCV5bBtjxODyZaO8dn831TVzjeH8f1xI3S832erFSImxrL5SbH+mI4ns/D5YooFlSJlXwTQ1UotFqxp4dTeJ7Prfmi8I1QBZN+JB1mKBXGUGXslmvko9UKQ6kwqix8GRzXI6TJhDSFeEgTTohVi/tLZV4bTgYLzoGuCJfG0uRrdrAwhzSFsWw48IEAWl2EBpYjHD7b7XXb9ZjoEl4LmajRsVCfHEhweTLPqYEEq+UGvYkwyZAmUlmbDhfGUuiKzPGBJIok5Li9CZNiXRRKpqqgyYI/8amJDOXW4mm7PtdmxXldHE3z/szepH1aayddtz2Rplq3mc/VqNke411RSg2HY30xdEVBloRRmCrTkY1RrNvBwmc53hYp3oGuCNWmQ8xQydWeLQjtALir03lMTcHHx/cJsjlCmsxQOkzUULEdj6erVQ73xlAlqaV+8RlKhwN79iO9McazEd5+uo7RcuZs+550xQyO9cY40hvj8UoZxxNF8fcei+c6O5xEUySKdZuVUpPXRlIBcdVQZd6dLNGbMFmrNEmYKhPdUeq2KzwzKhb3NvBYTE0J4tOzUZdTgwny1aYoQlsjj8FUiCO9Me4slBhIhbg8lWM4HWIwGeJhy031YOuzFtIUmq2cjM14Xk7JXqHJMtProrh03dqWTsdYNkImqqNIElem85wZSgoiadzkeH+ct56sM5A0mW9tIHrjpkgTHk7SsDzuL5XQVZneuOBt6IrMdO75ZNLtkN9QwLQ5Otvh3HCKuu1QrMtM9ESZywsH3BfB49UKpYZN/Ac4XGy/qNjHxxae5/Ov353meH+ccsPhemsHshGmqqBHFS5P5hhOd8rGZISfgyCr5TnSG3v2ZZV8oobG5alc4FQ50S08FvqTYbpiBjFT5Z3WzXo8G6HpeCwU6/TETXRNDm4uXVGDu0tlGrbLTK7K+ZE0PkJql4kazOXrHYsbEASClRoO1YZNxerMKEhFNBJhHdf1uDiW4vJknlzVQgKG0mFuzhVwPBGqprUIoiKe3RccEV8sXDdaAWrXZguMZcKUGg5NR0glL46Kx02FNeIhjen1Gj90IIPtemQ0nXzNptywqVkemagYi1iORzaqdyROTq1X2ANPj/6kyePlCoPpMJNrVZob/mgkEyZhqlydyXN2WEhRY4Ya2FdvRDKscbQ/RsLUUWQxJjJUmfmCCHm7OVckG9XxEaqJtYpFWFfQFBEK136/b8wVOdAV4fRAghvzRQZSYVJhnXJDZG/0OKIoHM5EaDoul6fyHOiKBEFnj1fKrIY0zo+kaThu4Izp+z49cYPvtCLFL46meLRSCezXFVliuVinanmUGzZRU2UuVwvO670pMeYIGyqPl8tYrkfIULk5J1QwuQ15IoPJEG8/zXG8P06hZgc5LRdH01ybzeP7gifRmzAJ6wpSywPl4mgKkHhvOscnJzLcXyoH36+RTJhyQ5huXZ8tBDLd04OJV1JQwDPuxkKhjrxB7WCqMhfGUtiuT63poGsKrudzbSYfRMQ3HZeLYyluzZeCULX1ahPbFa6g9xbLNG2XStOhO6rTdH16E+ZLFRUbCdOyxK6qlXxNhOQpcoPbrQDAQu3FDLp8H0Gu3i8q9rGPV4/vPV4TGRPbzFwnuiJkogaTa1WWWzvVmVyNia4Ij1erTHRFeLAhtvlgdxTb9XB9j6vTBc4OJanbLhNdESoNm/MjKZaKdUxVeXZjHntmsdwVMzA1mT99vBY4VF4YTSFLEtdm8gymhEKi3HBQZAnPZ1cny1vzRYbSIWKGxuNSk8VSZ3DS09UKb7d20Mf7Y8GCM94V4clqlYutUcvtlrETtDIbFsTNzEd0Z84Op4iZKk1buD92xw0KdYt0RAtGJPmazYEuIU9scx3KDYeD3VEerZS5NC4UAw1HjFAeLldIR3XmCjWajs+hnjgr5bXNL5GYoTCajXBrXvgJ9MZENHX7MW/PFwO77aVig7FMhE9OdAVKj3LT4WifWCxjporrw3A6TN1ymV6r4XgVZEmibntoisRoJkKxZlOzXGzXo1SzGEyFiRpCEXS4N8rxvhjgc6I/TqXpENFVHq2U+dzRbqpNm3ef5rgwlubdpzlO9Cf47vQ6EUMNdpxPVqtIrTCrYt1iLt9gvZrj0miKC6MpnqxWGc9GOtQql6fyfPpQlmLNDqSnCwVhsFazXNIRnfdn8sRMLSDtXpnKc7w/husLuee12QJRXWkVg8L0KRnWiIdUKIguzNG+GLmqTN0W/uFnhpLgw6PVCposU23aDKVD5OetoPsFsFBs0BM3OdIrsk8A5gti/NSXMBlIhZjdJTzvRRE11GAseHLgWaFyvD9GoWpzZarA8f4407kakiQxmgkHwXVHe2NEW06svi/UKhdHUyBJeJ4YZ1aaDmeGkpiacE61XX9XK/rdkAhpQVHRdmDdiHRYZ6I7CvjUbJcrU7lAJTW1Xu0I5NsruqIvJ+v9uGC/qNjHxxb/5vJMx78PdEXIRg1mclUer1Y7LKHbKDUcPjWR4Z3JXMc8vR2Ydbw/zqFukSZ5a7bA0d4Yj1Yq9CVC9KfC+L5HbqoAwFTLD6J9k5hcqzGWjRDWVWbzNVRZDvwFkmE14CL4vo/X0pvP5rYnoR3pjbFSbmz5vXCpdGjaLhIw0R2lUHO4syAC0Z6uitchSRJhQ+H8aIp8pclYNkLMVLk0lubxcpnBdBhVeWZKNZwOs15pcrw/TjpsUGm4PF6pBumtV1rJnO9O5jg3nMJyPB4slRhMhbm3WEZXJXpiJqWaw0BS7GBVWebiWAKttdNs51q0cahXSF0vjqZ4ulbl/dkinzqYZTQd4c2HawynQ+SqNmeHktiux588XCUb1QPPEYBbC0UO98RYLjXIV5vETVUk0sYNkhGDq9N50hEdU5FYrzaZ6IoC4HpwbjSNLIMsifyId57mGUqHkGWJh8tlDnZHmc3XONIX563Ha2RjJod6hefDJw5k+NNWUZeN6hRqNkOpEP3JEK7nU2zYrVFcA1kCVZH40yfiWuc2tMsvjaV5tFLhnac5rBYfZKVUZyAVxvE8BlIhXNfn9fEMDdulYXvcmhevuWZ7HOoRr2c8G6ZquVRyda5M5zjUE8Xz/Y7rfW+xzLmRFL7vsV5pEg8JxUuhZvPW03XeOJDG98Vorp1bMZAMMZurcWYoyfcer6EpEif6E8FjLhYbLBYbpCMaB7sF56id6voiUGWJ10ZSrJQarJQa+Iii/N3JHFFD4dRAEtvz8H0JtZWlc7g3zkxOJAf7vk+5ISzzc1WLCyOC37JWbaLKUoeBWbsA/+zhLl4bFkXay3ZYNhq0bcwt0RSJs8Mpbs0Xd3T1tFwvkB7vFboqi0LxBxiS7++FWvNnEy+SIb+PV4vVcpM3/tG3cTyfM0MiTfPBcmVLKNZ22MhX2AkXx1KU6g75qkWxYQceEfBsbtwTMwgbCpNrtZY7o7jpm5oYt3z6YLYlb63RsF0iukq5KTgBD5bKSJLEGwcylOo2jufTdIQZk+V6HO6Oslxu8mS1EhQ/Y9kITdtlodjg/EiqZXMtYbsuuYrNVMuSuum4+L7YNUd1mdNDYpYbM3WWig0MTchbj/QJi+sHS2IBvbNQ5EifMDnqT5h0xXRuzJVIR3QSIY21iui0tIuD0UyY6VwNGZF+2RM3KNRt0iEdx/NYLDaIGAo+UhBdHrTWJYlS3WaxWCcZ1gMzKFWGs0MplstNZnI1Tg4kuDVfDBYCgE8cyPDO0/UO6+yYoWJoMicGhHnSUrFOfzIUFH2+79O0XUK6wnqlCUgkwjrvzxREdoPvB3N7XZU52R9H14T8N6KrVJoOpiYzs17jcG+MpiMULjfnxLl5vs/7050R6wOpEPP5Oq8NJ9EUmUcrFcazYQp1h8crlY7RjaZInB4Splt3F0sokih6CjUrWBC7YgZjmQiXp3KMZyMYmkyhZqMrErbnM9Sy4ZZlCdvxKNQswq2xyEb88OEu/vjBKiAKCEOVKdRtYbSVMKk2XR4ul1pcpWc76XMjKapNpzUy8SnWnS0mWSB4BevV5p6knyAKF02RtnQ6DvfECOsSM7kGA6kQpbrN1HoNVYa+RAhdlUmENGKmRr1FgBb/VulLCNLtcDqCLAl+zZWpHKPZCJoiE9YVQprCnz5ZD7qXL4MzQ4mgiNIUiYPdUQxV2WLtvx3ODieZz9cZyYRptu8bz7EVH0yF+N4v/7mXOtcPEy+yFv5gl0T7+M8W//SPHnG4N4bv+8GX+rOHu3j3aS5o2++Ee4tlTFXe1lcBhAnWUlEsahdbu1mnZckMcHO+iK5IjGYjvDuZ42B3lO88fNbef204CQizmqip4no+ni/azXda7HzXh9MDcd59uo61Scr22nAymLcbqsTx/jipsMbV6ULw2q5M5zFUmWP9cYo1h0RY45gRx9SUQKLYHRPs9juLJXwfDvcq9MZ15otNDvfGSZgakiR4F1emcnTFTKK6iq7KGJrCoxUxRlFlmWLD4nBPDFUWi9bpwUTg0fHelLBGXy416YkbrFabPF2tMpIOoSkKdxdLaIrEuZEUZweTFBtOh2IhFX5m8e148N50nsM9IoQqrMkMJEPkqhaXxtLkqk3+9Ml6UNiNd0UIazKqojCfrwdFwIFWW1mVZSSEiZQkSURNjelcgzcOZLg8uc5YNoLv+4GC5fyoIKauVRqkVJkHiyIzJKwrhHWFnoTJQrHBarkZxKLvlIo730pe/d7jdY71CUv1iKEwm6tzoj9O1FSDoqI3buA4PncXS4xnI6iKyG7xfVFoOZ4opFfLTTIRnadr1UA6DWL3fWehyPH+BI+Xy6xVLE4MiMyTjTjSGwskuumITtNyyNXswKTM1BQerVT4xESGm3PFoKA40BXh9nyBptPiTwwlMHeQid5dLBHWZM6PplguNnA8n4btBnHtGxE3VXx8ptY7O3KJkEbEENd3vCuCLElkIrowapMFDVdCCqTKP3KkmwNdEUK6wu35EqslkcK6cZH+xIF0S5Jd5sJomqVSg5ipEgu9PD9B2+DDYrs+T1crRE1tT7Hv12YKTHRFAkn5QHKrPf5mdD3HdvwHAftFxT4+dni8UubWXJE7C6XAchmEze/JgTiW6yNL7NiNqNtuQOoCIZVLmMKYaCQTCW5UybAm8hIkUCXB3lZkiXuLReqt5/jEgQyeL9qgbftcWSKQOB7qidGXMJlar9FshXlpisylsTSqLG0pKDRFCjwnAJqOHxQJZ4eT3J4vIkkSw+kwU2tVrs0UhLPiQokj/XHuLJRagVIlxlpFTxudCZsSIy3pn+sLK/N2K7s3bhA3VbpjCdYqTZ6uVTk1kODOQpGIIUYFsiQxk6sxX6jTEzdayhcZ8IM48lhIYzZXJ2YKx8m65eD5ErENLeOIrgR23hvxYLnMiYEElutTrFuslr2O2fP7M3n6EwapsI4sidl5oW6x2kpyvDSWFkobRUKRJN58tIYiCWOibFRDwqfp+GQiGrIs5uyfPdzFu5PrHOiKslqxCLcKrIihioAuI8W9xTLh1u5+YwLtTrAcj5F0iIetxb0vEWI2V+f2giARnh1Kkqta9KdCvP1knc8cyvBktYauqniex6OVCsdb7ysIjkFIU1iv5nBcn3PDSVRZQpIkdFWEsXXFDI73x1lpuZxeGhNjjbrlMLleCzpfyZCKHNEZSJrBTt3zfc4MJpnL1Sk3HDRFYiwbYa1sBQUFwI3ZIq+Pp5ncgUdRs70Om3UQCacPl8uUNkhER7ORLZ2U04MJZltuqG0l18WxNKvlJhFD5ep0jjNDKXRVSImrTYe3nqwxlA5Ta4rv9s25ImOZSCCfBZjNCw6I5wsX3qihsFQU30dDlTpe314hb3IDazg+R9PhLUVFX8Kkq/UduT77zGQvHTWgde1t18NQJJq7+GU8L8vkBwH7RcU+PlbwfZ+/9/+9HWjNr83kg5vuQr7eins2yNd3l2p5ns/5kRR12+XeYinYReVq4nFTYY2+RIiptTLHB5K8N5UnbipcGEtzsCeGocpYjsd8oY7leIy1ZIqFmkWl6TCSiXBiIMmV6Q3cDV8QSHVVeF88aElV7y+WgyClM0PJDjOsjbg2U+BoXwzb9Xm8UqE/abJQEDvBiuXieT6qLHFjTpA865bbsSC1IUvgIbTzZ4eTGKpMd8yk0qhiez5LpWaHi+JA0uTWfBHPh0M9IWbzNRYKYid4fiTFTK7WUcANpUP0J0KslBqcGUoyvV7lyWqVTx/K8ubDTsLmsf74jq/XUGUeLpVpOh6ZiFDbhA3Rtm7neyxMb/+3tutxc66A64nd+Q8dyOD5PpNrNQxNDRarquVyb7HAsb44s/k6XTGTJysVPB+WS02O9cdZLNaJh1SUlvtWzXIZSoW33XlvxnrFImpqHO3TuTVfpLjhb9qv+zMHszQdj4nuKOsVm/6EyXtTQoUiSSJ99Hh/HF2VuTZToCtmEDUUxroi1CwH15e5PiX4HaOZMGFdEGlHMxGWS82Al3ByIBn4ZeiKMHsqlBtIQKlmcbgnyoPlChdGUywU65wfSXFtJh+MXzRFwlCV4DFmXlAtcWU6TzKsdYwfJzepJc61JL0AuZodZN/UW6RjgJFUCMv1uL1QpmF7XBhN0hM3W2moImiunfnTxvH+GHcWREF4cSyN7Xioiuj0ua7P+ZF0wJF5EWzHDrg2U+DSWBrH8ynVLWZz9aBgB7E5uD5baGUTiQ3EWDZCqW7TlwztSnjtjv1gkzRhv6jYx8cM0+udC5jl+iy2FriehEl/MsTt+SK6Iu+aN6Cp8pad1EYc7o3xztMcg8kQV6eFrDIbNchVbK7PFjg9lESRYK3S5PRgklzVRldkYqbGgWyU92fzHOwRBUBv3GSp1MB2PeSW8qNQtYJ29omBOLdbcsL3WrLEbNTYljx2bwPxLmFqLEkNXNfnUxNZFgp1jvTEebJaEU5+iIXzs4e7cD2/5RjqciAbCXwTVisNZnJ1Pn0wS9hQtzXXmS80+NTBLE3H5fZcMeAeuJ4YCY1nwgyPppjPi5tn20Xw/KhI5+xPmAylQ0yuVkmGtT1r8xVZIhZSifpCnbHUqo0OtBQuu0GV5UDGem+pzPH+OH0Jk5lcDd8XRmPDqRA9cRNDkbm/VEaSJWK6wkBKOJHeXxLW1WsVi5MDCXzf50hvLEgSPTeSQkJIBTNRncuTWz9PT9aqdMUM4eNxMBP4UGzEdK7GcFpIZp+sVclGdQ73ivHPueEUjud1FIar5SbD6XDQeZIkIR3NxHSiuortetxbLHdIJI/1C8vwSy3HVvE59IXhV77G0b5EION8ryU/ViSRG1NpOORqFqW6w2DKoNJ0tpBu94pCzeb9mUKw4x5Kh1ko1AJ7bAkx7uiJGSiyTL5qMdEVQZWhJ2awXG4iyYKjk4no9CZCTK0JvxDH8ynUbAbTMjdmiwHJ+eJYGlNTgHLQufjUQfF9sVxPfFb3kKK6HXZy4dyN+HltphAodMoNh5MDCR6vlKnbHoPpEOxS2+x3Kvaxj1eM0WyE//h/+RQ/8y+vBu3wXM3i1ECCh0vlwK1weZuW+kZcmykENtebETMU7syXOD2U4MZssSUvdVoOh1EkSezaHM8X7pUbFuILoylqLd5D03ZJhjUUWeJAV4SwoYhQp1Z6ahvyppCmJy3Hy43KEoB0RMP3wVAVBlMhPN8noisdIVfFhk1Il+lWdFJhHVNX+JMHq4xlI5TrNsmwHuz42omUZ4eSYpbfUkb0JUx64gbrVSu4MT9eqeD74gZ9e6HU0d6dztWYLYik1cM9UcpNl9n1KtNrNfK1Jo4neCrzhfoWw6TmLoVfoWZRt7bO4tukz1ArjnvzCAnAw0dTnlkvP12tokjw2UNdrJSbPFqpEDUVvvNwlcM9sdZ7XaA/FWvZousU6zaFms25kVTgR7ITdiMIj2XDHO6Okq/ayJK0JYBqJlejULc51CPMshq2h+16NBwPU5W5Mrn1M9ruEvQnTbpjJnFTpW67PF2rbJtf0U6a3WmxWy41SUd0FEnwfeYLdVbLzS3OmZNrVSHH/IDR3u2R10q5iSJLARG3zVuqWy6LxQZRQyVuqmRjBk1HdN7uLZaYWhdKq3ZXo7tmM5urYTkeh/tEQSbC/BpcmxGy0eP9MZZLTaqWi+/7PFmttpJJ6y+d/PkimSYbsVAU36uVUoORTCT4HijS7uexVnnxbJKPG/YDxfbxscNEd5R/+tfOoitiOf70wSzgi1AuWQra1LvB9XzuL5U50toRbsSh3jjlpsON2SIDyRAN26UranKoJxYEN91eKOF6foe17+nBBE1HGBZNdEdJhXVUSUKRBCmuWLcJ6wpxUyUV0TnSG2MgGULd5nwXCg1eG0kG/xamRiJ+fanU4Mp0nvdnCpQ3ZRz0JUxkWWKlbJEMa9xokVin16uMZCJkY89IkXXbQ5Ikrs0WyER07i+WONgTZbHY4M5CiZihcnogzmgmTDKssVRqsFpp0hU1uDSW5uJYmjfG05wbTTGaiaAqwgb96nSequUy0R0hHhLPd3WmwGgm0pGjAeK6XBgV1uMHu6PBz0fSQjmxuaAQ3iAi/EmRRcroSHorwe3KVJ6uqNHyCBA8mpCu4iOKlbNDSabX67w2lOL+Upli3SFiqFyfLWC5QoHzmYNdLBbrWxw5N+N4f3zXlvXlyTzfe7LO7YUS2YjO+dEUG9ew4/0JCjWby5M5FFkiE9XJRnUalrPrjnckHWKh0OD6bIE3H63x3lR+x0AseQ+LZq5qcaYlsVwpNzk1mNj2uOuzhQ5exAeF6/lcnsxxrD9Gb9wkHdHpiZucHkxyrC/OQrHBUrHB6aEUdxaeRZeHddFty0SEpPdAd5STgwkMVUGVRVE/mApjuz6JkMadhTLjXVEGkmKEkAhpwfjC9326o/q257cbNud+7BVz+TpDrU5ZpekEBMztEk834nfenubfXZ17qef8uGC/U7GPjyWO9sX5O184xP/83UnebCklJITb32AqvKuxVBuW4zGbEzue9mx3rBUY1kZv3GSxVOfxaoXXhlM0HJep9RphTcbUFE4PJni6WqU/aZIIqdQsjzvrwmQrpPoMpkMslZq8NyVGKONdURRZCmyTQewKt8PGUKSnaxUGk6EgDGsnLBYbrFUsNEVCVWQO98Tw8Hm0XCGkKzQdj6FUiGzU4NqscB/UFIm67VJqOEQMO5h5LxQbwajiYHe01RkQjPf7S2X6kyaqLHF/qcwb4xkkSSJuqsRMlbutm/9GT4aVcgNF7tynVJtOwC0YSocCN8qVsuAzVJtuB9muWLd5sFTm0wezSBJcnytyvD8ObL0uC8UG3TGDiK5Q3RAgByJgqj9hslAUu9Rc1Qpe61AqzNOVMomwwcmBBKWGjanJHbLijXje7nIjlstNlstNLoyK0Ykkich5EGOMW3PFHVVJG9GW2u4V2h534m3F0+Wp3BYS4kbka69+x7xcbLJetbgwmhLcjYZN3RbjAdfzKDU6C8yHy2UO9USJGmqL4+QjSxLFmsVrI+kg4VdVJCZXqxzpjeK6HnO5GlFDoztmMLUmZNi2K6xF+5OCyNnO/NnM+diMYv35ZN2dMNvi9RzpjQXy0+cZOHTFDD4xkX3p5/w4YL+o2MfHFsf7Ex27SB+Ih7QdJX7boWq5FGoWA0kz6DJslKTarhcUKO1F6eJomierZVbLzeCmY6gKbz4Sw9BzIylUWQqOH0qFODmQQEJEaBuKtCevjI3rQK5q098vzJV8/B3Jjc1WZoapiSCohaJg8Z8bTnFvsYCHRMP2WCiKCHBZgv5kiIiu0h3z6Iqa3FsscXE0jSLDXL5GT1yQM/UWOTVmqhzuieIjAsokSaLccHiyWuFIbzxwY7w9XyQRUinWHbJRneF0GN8X3g7ticXGZWs2V+fCaIqVcpO67TG5ViNXtTg9mOBGa0y1Vm5wajDBnYUSQ6kIy6X6rmZAK+XmtnkUjifm+e9O5gIr5zfG02iqzIOlMhXL41i/yd0WiXcjgXAjumIG69UXX2AtxwteUxu+L/Jodisq2sVNqLVL3yvuLBSfy0UJ6Qo9cYNrs3lGM2H0XUYcm4vDD4pESAtCwHxfGEO5PtyaL5EKa4xlI1s2Cp7nEzFUbswV6U+aLJeaHOmN0ZMwefPRGr4vpOAiSRYiukbDcRlKh9EVmaLns1a1WKtuXxiMZsLb/rwNWYJi/YN3bGbWq0Ex7T4nBfZvfmqc3sQPNllzf/yxj48tNEXm/Eiqo6W+GzlzJ+RrwnzqWH98ixTM2yaP8cp0jqN9CSbXqpwciDOaCbFaeXbDm8vVeHcyx/E+YQLj+b4IMNLE16np+kyuVvn0wSx9iZ2JVyGtc7F0PB/L3b3dWm6KDJSVcpNq0xEhawmTpuPSFQ9xdijJQNIMxj93F8t0RXUyUZ2umOBgTHRHQRLPN5aN4PoeI+kIvfEQiZDaKmgkZEni5nwB3/NZLNYZy4a5PJXj/EiqFUnucnpItLA93+fGXJFHK1UOdEe5MJpqJbgKfkp7pv1ktcJQa5yRDKn0xAym14VrIsB61cb1fNarFg+WyyiSRG4XT4DXhpNcnd6+yMy3JKFPVysc6Y3x3lSONx+u0bA9umMGl6fywfilvkObWxS1Lz6P346DEdKUbdUEbYj0T41zIymcF4wgr9teK/RsZ5zoF4Rh2xVmYbtFjhsfkFOxGdFWwi4IlcjlyRz3F0ucG0mRiejISDhe52vuT4a4NiOyR2ZzQoWlK7Lggvgil6NqOczmahzqiXJ9rsCdhRKZiM7lqdxzuxBT67Xgs7gdkuEXH5dsh5rtsVJukgprHQ6dm5EIaT/wseewX1Ts42OM7z1a5cp0nkLN5nh/jHRY2zUmeTcsl5qUttl1LG3jGOj5zwha8y0ZYnfc4I3xTEsGKHGiP44sS6JroCsc64sHXgUXRlNUbZc3H61RabpbeAYgdkntlM82QprC9dnittHKG2G7Pg+WysRNlXREZzAVYjpXY6FQZ6HQYDTT+XzFusN3H60RMTTWK01WKxaXJ3M8XC5Tsz3mcnVy1SYPlstEDK3FffBpOC626zPaFWEkE6FQE9fvynQeTZUJ6SLp9O5iiVyrGHA84dXx3lSexysV7swXCesK50aSrTGEzVg2wicnsqQjBvGQRqEu8lKO9wv+S7R14z01kGClYvF0tYq2DS9lOB3m1lxxxzCztdYYIh7SiZlKcFyxbm/xzri7WNqRed+ffPGd43ZdgBMD8V13vumIxkqLs/K8Ltd2sJ5TiEgbxh3TufqOYznoNH16FZgv1DnalyCkbTCT8nyuTud5vFrlykyebNToCAWcbfESjvXFmOiKcLQ3RqFVKF4cS+N5PuW6yIfRFZkDXRFeH09TauydBzGQ2LlbETdfbSM/X7OZXK/tWKKOZSO7Fh0/KNgvKvbxsUTNcvh3788DsF61MDUVU1c+EDt6s6NdzFQZz0a3PfbGbIFTAwkMTTj4NSyfR8tl7s4XWS41SIQ1bs0XcT2f1VKTh8sVJCS6ogZXpvNBR6XccFgpNQNCYRvZqLFFrqa1FqLd2uOaLLU8CeJoqky16bTSM6N4PiwW69iuh9YqeA71RImbGpfG0jQsB9v1g0JqoivGlak8PXGTZFgnpCkU6xaKLPga83nBR+iNm1ybLTCYCnWcR91ysTcZCjVsj8yGHXPN9ijWHS5P5umK6gwkhUQwX7O4Mp1nOlcjFdboT4S4u1DGUCUkxK663WmQ5WeFRvD8isRYVuSbbMS54SQn+uNcGE2Rq9m8N5Vncq3KXL7B8zbfo9uETp0fSe04itoNm89LU6RdHycd0bixTQrvXiEBq7vYRkuSGHXtFdsVcR8Ut+aLqLLcYWi3EfeXylscJfuTIZJhnVzNYnK9iiQJJ9Jc1aJquQxlwiLFVVeI6gprFYu7i6JbcWE0xZmhZFAcRHSF7pjBSCbMoZ4oJwcS5OsWB7uFxHUzPowFfnUXgqz6kgqVjxv2i4p9fCzxj7/5oGMndXU6Tyai7ypR3IiwrvD3/+JxLoymOD2U5Pf+5uv80792lmRI5UR/nLNDSRq2u6MXv+35uJ4nUjFbmRKFukU6avDJiSwNy0WVxa631HCo2y7Fus1qpbmFjFVuOkytVbk0liaqK6TDGtttBHdTIVwcS3OkN8bZkSR1W/gaNCyXnrjBkd4YMVNlIBnCcn1KDYfRbARFEkFLV2fylBs2PlKQ2gpisQYxvtFViRMDMW7Nl5hZr1K1xGs+NZjgu4/WGEmHKdbtwKK8TUa8uS2ZcPub43KpyXA6xFrFIhHSGEqFAj7KzfkiPoIH8c5kTrSLI8JNMxM1iJlaoAYA0cX4zkPhonlxNB0UjHVbJLVuJiH2xE1ODiZ3vL4gHEkvjaWDUc3hnhjXZ1+8oBDo/BDYbqdZ02aUGw6Dqd1n/LvhtZEkC9t03do4OZDYE7m5jQ8rEarcFIqXi6MpYsZW3shGUqyuiM/rW0/WyVVtuqIGkgTdcYPllmTTcjxuzBa5vVDC1EXC8OmhBA3b5b2pfIeSpWq5rJSbTK/XeLhc4dZ8kQdLZR6tVDG0rV/IVz0CasPZQZ68FwXPDwJ+8Hst+/jPDu9N5fidt6e2/Hw3tjoIktvf/NQ4nzvWw3iXYI3/9ddHkKRnrd8vvTbE//NPJ597DhdGU0yv17jTMgAS4UY63TGDYt3i5nyJkUyYxeeoNdpwPP8ZmdByeXcyHzhmgjC92W0GLCF2cgNJk0RII1e1uDpT4OJoitl8nbrtiuTOFjfh5lyRRwh57vRalcn1GqdaLPs22ve2p2tVDvVEuT0vCJxXpnPULYeuqBFI6nRV5vaCyPjIRnXWKta2O29dlXmwXNrycxBJnkulJroq/Cdm83UmuqM0HI/Xx9OsVaygI9FWiMRDqnD3lMT7/9pwElWWg2Kw0gqaOtoXY6Eoxhg9MSNYFNtpktNr1eDa7IZ3J3Mc7ImiSBIrpcaOo5XnwdrGEjobNXYc39muj+P5u2bW7AZZkjgxEG/JLSVcz+fWfDEowl+Ui/QiBcjL4PJUnripcnFUEGTbTbu2m6ciweHeOLfmi0R0hbGuKJbtsFRqsFCo03Q80mEtINfGDJWnayKg7sZLpKjO5OpEdYXKBm7N5m7Tq4IEnB5IYGgyC8VGwG35z6VTsV9U7ONjhXLD5su/d33LTunkQLwjpMrUZD59sIsjfXFihkrUVPnMoS76N404Nlf//80PH+CPH64E+RU7n4fTMXdvK07Wq1ZL4ggrpaa48ewgRdwNbUXC5v+/E7zWBZkvNDBVmYujaRzP4/Fqhf5EiNsLpSAJ9OxQQvg9+D512+XUUIKr0wVuzAnr4AujKXz/mVyuYXvkKjaeLxQC50aE5K9Qs5B8n2RIpdp0CGkyh3piW1QNm1+X7fgdHaCTA3HyNZu1spB5up6PKotCqmG5XF4Rx242A+uJG4EUz/WFxn8nrsG9xTKfOpilYbvUW3ku4roJq/ezwyksx+VgT5RHG2Kyt8Pzfr8XVK2txUPsOe30uXw9sK1+UWz+/FwcS6MpEqcGU7jeztdtO7TTVz9slBpidLcxp2euID7Dr20YO/UmTG5v6ogpssRAKsx4l8yD5TKqIrFQaGzLkdorRrJh7iyU6Y4ZpCMapipzciBOSFdZKTV29SrZK7b7rl8cTXF9rvjSBl0fN+wXFfv4WOEf/MHdDla6Ikt8ciKL5/v86Kk+UmGd18czfHIi+8KyOxCt9H/4fzzJz/7Lq7tmO8R3STa0Xa/lQSAIl7fmt9+Z74aNpDlvD3HuGz0tGo4XLNoXR9NULbtDltlwPHRVYa1qUW44rFeaHOuLEdJUrs7keW9KSAo33iTzNYuwrnBnocjRvjjfeywke5fG0lRtl/VKk0PdWwuKI72xDp+J9YrFo5XORXm+0OBEfxwJH1NT6IoZKIqM5QqJbxuvjSQ7rLAzEWNLvPR29tGyJGS+33u0ho8oqtpFmOsJommpbgcz+5F0iOnch7toFrf5bO2lvX1lOr8nOfLzcG+hhO16L8UH6Y2bH0lR0cbGz39YE7kmG8d04W2+5+1ODIh7xEg6TF8i1JG0+qKYydVRZelZl8zUOr7b6bDGaFYkqs7ma3uOfm+jJ25wZ5tx4eWpPCPpMD3xH2wpaRv7RcU+Plb4yU+M8cVW8dCbMMlGjVdewb8+nuH/9dOX+IXfvbajrv/yZG7HXePD5QqZiE6lab9UQQF0SAY3t1kjusLx/gQr5We7o9WW3XFv3CQT1TFVBVMTJlXtjsqBrgipsB6c84GuCLIs8cYBkUlxcSzF6aEEsiQR1hTWK83AsfNQT4xrswVqlkvTcTnaGyNiiNjq+XydC6NbvSBODsS5NV8KrlPbVAkIdPntY5qOR8MSRYShyjiOT38iREiTg/C4uZY1tYh0N7f4U7Stnjfu9lQZzo2kgy7L4Z4YNdvlwWwxWJzTET0YO6yWm0QNlaN9sY6clVcJSdrebtly9qZKuL9UJhPRA1+Hl0G56eypA7Ydch/geV8GN+aKwbm2O40bi5p2jk0b54ZTzBWeLequ5z+zptcVzo3EqVsudxdf7Lu5eTS1uTTJ1WxyG4q9REhlIBkmaogk4HzVYjZf2zEvJBvVdyxEpnM11qtNfvFzBz8Qt+bjAMnfTTj9ZxylUolEIkGxWCQej3+/T2cfrxj/6t1p/u///vaOv09H9MALYjM2unS+DNoLJIjdvu16xEOa0OFXmsF45sJoSnQ1fJ/bC0Vq1rNzSYc1Go7XYSW+GUOpEKmwjt/qEmiKxFtPcqTDGpoqkwxrPFmp4HoiXbHadIkYSsdOeWMXpI3euEnVckR8dlC4rAU8jd6EyXAqFBhlnRtJUW3YrFQsRjJhSnU7KOhO9Asly625AicHEmiKzOWpPKoMrw2nUBSJSsMlFdZYq1g8XC7REw+hqzIxQw3Iop8+mOXeYolUROfhcgVFEkFby6UGB7ujHSmVmiJxYiCxbcDaB8VOBcHFsdS2oWTboV2MfRBs7kbtFQNJk/kPmVOxHT59MMufPl7jeL8g7pqt7BrH85lsBbf1xA1uz5fojRt4PlukwRvRHTPoihmkwzpNx6XheEyuVrZY3++EjWOZvUKWxHduNBsVozjb5eZckfOjqV0DDtu4OJrm3/zN1z92o5AXWQv3OxX7+DOLHzs/xMOlMr/z9vS2v89VrY7FfyO6nkOsfB7mNiRMbhwfbEahbu8448/VbNJhjWN9ce4vlehLhHi6WmHjRmk2X2c2X+f0YIKHy2UOdse4OJZmaq1KV9SgYbu8Pp6l3LB5vFqhVHcCIyoQN8jHm8YZmiIRMRSWSmLhsT2fh8tlwroaEO2Wip3z7avTec6PpLi/XCFXtTpkpyFdoW67yLLMo+UymajJxbE0rutRabpoqkTTdnj7SQnb8zk1mMDzfO4uljoCzJqOx2rFCoLTYiENz/cZyYR568k6cVMNlAC264s0yR3e3w+C9A5FxeXJPEd6Y9Qt57njF5G6+cEwtV7jSG+U+0svxhGpWy/JTv2AeGcyx4WxdBDu1rC9YJR2fiTFvcUSt+dFEbFUatKXENyHXHX7MWZ7jAGCsNz+HKuyhKpIKJKQThuqTF/CxNQUCjWbp2sVbNff01hyMzxfeICkI0bQgRtKhbi7R8v1K9M5Lk/meONA5oWf++OC/aJiH39moSoyf/8vnaDccHj76TqL25C87i+VCOvKlm7ATo6HraZCB470xniwXEZXZJqOx8XRVLCDfx6M5zDQczWb/HQeSYJHKxXGsyJU7OrUM0a9LAljrZCmULMcnq5WSUWEIVTEEOmX7U7EaCZMPKSRr4l/h3WFfFXsvkO6gq7I2K63ZWy0VGoGqa87YaN4p9K0+eyhLJWmQ0hXCGsKPTFDFECpENdm8hzrTwQt7IujaTS1gW25QfLs5udrOC6mJuP5ImDK8/0gUvx4f4w7C1uLt83jlA+K0VYXZifcXyq3UjtT3JorUt+B5Ps8pdNeoasKB7ujGKqMpsooknBKRfwHz/exXZ97i0VODiS5v1Sibr+6MLEXgeV4O0pZ5ZY/xUYsFoWsOVfd/b0TdtvP3hPH8zcQgsVjbux4aIrEwe7onuXr28Hz/YBMfXu+uG3S7nYwNWVLBsoPGvbHH7tgf/zxZwcN2+Wdp+s8Wq6wXrWYWqvyh3eX+NETffzcDx9gsdjA84XNdHfMIKQpHO6NsVRsiPTOUoPlUgNNkYXUtLVTL9Ztfv7PTfDeVI7XhlOsVpr8m8sz/Mt3Zp57Tge7o/QmDBq2T9Nxmc3VtiWXbtduvziaom57FGoWfuv1WY5HqeFwejBBLKQG9tempmwhBo5lI4xnI3zv8dqebq5j2QipsIaqSEhIFFrBYCCcL2OmGizwIMY6qvzMN+PuYpmLo6lW3LzM7bkCiqJQqtv4wGcOdfHWkzUO9wiux5PVCge6olt4HjFD4exwimLD7ig4FAlODia5voPB1GcOZYM8iQ+C4/1x7i+W2Msako3qDKVCXNumEHtZFcjLop05spEX80EwnA4H8e0vAkWCRHj77sPJgQRPVysdyaE7ZbZsxMuMMYA9BfztBS8zTvrbPzzBl//8oY/NGGR//LGPfbwgTE3hs4e7+ezh7uBna5Um2ahw2jvWL1zw/jw9HX/XbrU/D//FiT4AuuMmQ3skYvXEDVbLFveXypwYiHO8P07d9ni8UunYeaUi2paiYnMn5I3xDJWmja4qTK1VORVJkI0ZTK/Xtm21T65VCesKXVEDVZF2nM3risSpwSRXpvNMIna/siQkoEd6Y/QmTL77cLVjkZ3ojnbIaduLgo8g7Z0ZSpKNiYTUwz1RqpZLw3Y42B1jrWIxuVbl9fEMV2cE72IwFSYR0rgxV6TcFAZH95fKnBpIYOoKT1crjGYiLBZqvHEgQ65ioatS8Lpt1+c7D9e2DSZ7UdxZKO2587FWsVirCIlyoWZ1LDwbQ+8+CrQTWm8vvLjHw2aIgC8fTZF2JC3uBNeHsWy0o/sQ0hTGuyJUmjY9cZOnG8aOy6XnL9bV5st1XnIvESS3HbSXCGf72h8/5tZ8kd/8q2deWQbJR4V9R8197GMHtAuKV42dFgxdkbg4lg4sgy3XDyyGw7rCUknkQnTHjMArAyCiP39v4Pk+t+ZLXJ3OU7cc/vjBKguFBiOZME9XO2fuiZDGDx3IcGehxFyhTrXp7hhWNZAKdeyofcTCMNEdRQL+5MEqpwYTmC3HwoPd0SC/AaBQs/nkRJbzIykerVQ4N5xElSXSEQ1FlkWiqeXg+fBoucx4V4SQpmA5Lo7rETE0ptZr3JgrcqwvzicPZIMMj5vzRe4ulDA1mUcrFSKmRt1yebBcJle1AwOvdvfi3ckcZ1uOodtBkYXx1/Owk2PiTrizUArSVvWWPXblJTNuPii2k2++KAZSIWZzdV4bTr3U32/enId0hTstH5ana1VGM6KIhGd24jFD5XBvbMvOfqI7ysOX8B0J6Qq1l/Cf2Q6q+nLdhu88XOUvfu1PubvwwQi7HzX2i4p97OMjxk6SvSN9cS5P5litNDk7nMT1fCRJYjwrfBba3guPViodKZh7adnbGzgg7Zvl45UKbz5c40B3lGQrfvpEfxzX9TrmuquVJtmoviUPoi9hMrm2fQcjFdYCr49rs0X6EiHGu8QYJB3RyUR0Lo2lyUZ16rbLSrnBSDpMSFe5NVdgJldnoVBnsVgnGzN5uFTmU4eyrJabjHeFebxa5VBPrKNjc3exRLkpCKdtxEyVtbJFX8JAQuLGbIEzQwnxuNsUCHcXioxlw4R0hbFshNODicCu+cxQglLd5uTA9tkNbeyUeLobbFc4rqajBqcGEnTHP5yCdjtoisT5kRQXR9P0vgKvhFRrZ31jtrBjSNtueG8qz8iGWPJS3WYoHeLciChSEiGN14aTnB5MMJ6NcKQ3Srnp8GCpHBzTxsuGgmWek/j6IkiHX/69nMnV+Mv/45/yv16ff2Xn82Fjf/yxj318xMhEtr/JhFrteOECWQDEjD4b03Fcn3rV4uJomqn1aodB2J2FIsmwRmEHM6/BZGhXMyXb8SnU7I6/D2/qfjxcrmwZDwylwwG5dXOr22mR/xIhDUWWKNVtoobCarlJf9JElkRnYCQdwtRV+hImNcvjOw9X+eyhLpZKDe4vlfnMoSw12yUe1rAcD9fz8JBYLDa27SQZmsxCoRGEVsVMlXzVJl+3eLpaYTgdDoq67UYUTcdnZr2G6xOoewaSIQZToeC131kQHhhT67UtBWLMUPfUkt8JbdXMyYEEw+kQMx+iSVcipDHeFUGCV8rfaOd3NByPo6nQrrLPHc/NfKZAcjyfxUKDvniI8a4Ik+tVZEnixlyRs0NJinUbVQbHE8qOjWTppy+p0Notp+VFcW1WmFtNvwTHBMRo6hd+9zo354r833706MeGZ7ET9jsV+9jHR4x2RPpmbNx1H+qJcqQ3iiyLxTqiK2SjBq7v0RXTO0Yori/Mq3aExK7uo/VtTJlq28yhH61Ugm7FYCrEey1C3+nBBNmoHkSEnx5MkGx5aLTdLXviJqWGw4GuCK7n0xMXJkfTuTp9CRNJkkiGVVJhjbuLwixrJB3i6UoFRZJYyNd5uFxhtdzkxkyBY33RQBkymAohSQSjAxAFy7uTOQo1m6sz+cD3Q1MkZnJ1Nk8ojvWJkLnxbITzo+mOuPr5Qr2jmPJ8eH+mwOHeKOc37YyH0uFdnVr3ilvzRebydWG3/iHhcE+MazOFjoKzO2bQm/hg3Yqp9WcL+bWZQseobq/YHPAlCLwSy8UGmYgRjNPWKk1s1+fMUApNlqg0bVIhnfMjKQ52i4Tel0HoFUh627Bdn+grKFIihrplNPRxxH5RsY99fITwPJ+b84VtfydJgqke1oVs8/5ShVtzRfB9vvt4nYdLJSQf7iyUO8YfACu77I7n8nUk3+fCaIrRzFaSaG0bM6CFbVjvuaoVtP77EyE0RebEQJwbc0UWi00OdkeZ6I7ieD6lhk1Ik1mvig7I3UXBbWi7Fr75aJXXhpN0xwyatofleOiKwoHuCMf744xnwoykI/QmTVRJwkMkjZabLrbnEzX04BpkIjqnBxPIsrTFXOrKdJ7PHOoKcjcSO9ivT65XsVyXp2tV3p3M8WS1Sl/C6PDs2Iy3n+RwPJ9D3VHGsmG6Y8a2TpovC0NTdsh7/eCQJbb4j4DoyiwVG5waTHCs78WLgQNdkS2diWLN3jZKvTducmE0JdJ7N+WitOWjXTGD14aTXBpL873H6yI9V1MC2XBXzGCtYrFQrHOkL4amKORqFlem8yRCGr0vOUbSXnGY2PQHzA35v/75Q3zlzx/qsPf/uGJ//LGPfXyE8Hx/x5l72zb67FACHwkQN6L7yxUGkiaDqfCO6oSp9RqDqVDHWGQjavazHIhDPVFipsaDpTKHe2PcmitsOX6nm1e7m9J0XM4OJTvOZ71qBQvVxdE0mYgRdEhCusKxvgTvPF3nQHeUT00ICee5kRRvP13n0lgay/XQZBnL8bi7WArULnXL49JomqdrVQaSIeYLdYp1m0M9UXxfZGqoshQoGNpIhDRO9Mdp2sJAaygS2tFUqm65PFmtdmSZLBabz5UsXp8tMJwOYWgyiixt63XyotAUideGU9yYLXxgNcpOONgtvFM2Q20t/m0vkOF0iGRYx/N9PE98fuOmhuN5qIpMuWFTqFksFkUhkY0aWzxM5gr1jtFZX8JkICm8SNoGalFd4UR/HF2VURWJsKZyfiTF9dk8q+UmqgznR8U1EZ+NGGH9WZHquD4+ndwh23UJaaqw+4/o3Ft6VoxnozqJkLajTf+rNlqoNJ3gs/uiGM9GiJkq/+v1eVJhnVRYJxnWSEdEx/LDIpS/LPaLin3s4yNE03EZz0aJmU1cz8d2PVzPJxHWSIV1Lk/m8JBYKNSJmSrlhsPR3hgr5Sbz+d13O/YOhlybsZENv9OCGTUV1re53z5ZrXK4J8bUehXXFbLBs0NJkCR83+dMq2OwXGqQjuosFGq8Pi4KhprlMpQOkY7o3F8s89pwMpi/F+o2K8U6x/oTOJ7PyZaF9umhBDXL5f3ZApbjcXoowXyhTtMRHQtDkZERKpLzIyluzRcwNIUjPXF8fGzP5/JkjqG0UCT0J0JbX1QLDdvb0sm4Op3ncM/2C3AbM7k6MUNBVz94y1zIS+0PrZhoo1Dfniy8WX45k6s/l9fx6YNZlktNPJ8di9o2abNYt6nb7hYOR8Vyg/wOgE9OZEVQWCbCk9UqjgdXpvKc6I8TMVTyNYv+ZBhVlnhjPI3r+7w3lcf3xfm8O7mOoSosFhvETZXbCyV6EwZDqTCVpkNYV3i0UtnWrA7A9l69q2hzj9kvm/F0rcp//wd3t/1dRFf47Z+6yIXRD29M9qLYN7/aBfvmV/t4lfB9n//D19/ixg4GTCD8JK5M57BdH0WWMFU5MPvZzf+gPWt9CWfhbbE5fXQjNpoJjWTCSLDFx+LCaIp8zWYgabJcavJktcKlsQz5qkXEVLm/VCKiK4xnorw3k8d2vEDxEjc1inWb2XwNQ5VZ2hTCdLgnSiKkc3kqRzqik6sKdcdwOoLtekQNlXcnc5wZSnBrvoTn+TQcj3REJ26qqIq8bet/u7yN04MJ7i2VsfZgAPZB0kWFEVY4sHb+sKGr8o6vaSfH1+F0iKF0mMuTuQ5SbiqscXIgwXrV6jA42whZEoXCjbkCxfrz5bKaIjGejfJgWUSRj2TCyJKE74tuSbsoGc2EGUyF+N5jketyuCeCIktUml5gvtUTNzBVmZl8ncM9Qnb6cLlMf9Jken37Iuhob4x7u9jnvyh2I1J/UIQ0hd/+yQtcGv/wrL1fZC3c51TsYx8fAZaKDX7hd69z7zma85rlBDds1/ODguITExnKDYeQtv1XtjtmvLKCAoSBkaHK9CZMzo8I98s2rs88kwpOr9eYydU41BPlwmiKkwNxzg2nWC03mVytMLVWI26qXBhN8daTNSQZ8lWL7qjBWDZCzRFOnz7CijliqML90/UY74psKShAFE5uayfZVl8sFpu8O5kjV7W4PV+k6XjcnCuRieg0WovncCpMzNR4vFLh7HCS3oTZik1PcqQ3tqWgODuU5NZ8cU8FBQjy5pHeXQizuyAR0j6yggKgfxcy5rXZAmPZSMfPemIGNcvFdjz6EiHODCVIhTWO98eJmRrvTeW2LSiyUcF3SUd03ny0tqeCAgS5Mdnis6yUm7w3lefdyRzvTeWYWq9ycTRFWJPpiZs0HY/DPTHOjaTQVYWoqeF5PmeGhBx4udQkEdY51B2jK2bwcLmM7fp0RXe+BuWXNMzaCTv5vLwK1G2XX/53N/fcqfywsT/+2Mc+PkRMr1f5H755nz+8s7yFXLkddpKLNW2P+0tlJElYIHfFDFRZasUz++BL2y7AL4uIodAbN7BdsSvcGLzlA6PZZ4S8s8MpdEUGRLBY0xFnNZA0mc3XmM7VOD+S4vWxDA9XyqTCOo9Xq2RjBtWmE+ziinWLRyuC19AdM3jz0dq25/ZopcJnDnVt+7tszKA7JhaLy1M5Rlo72abjoUrgSzJHeoXqQZXh1GCSq9OFbR9roVAnHdFZq+w9CrxuuSiytKf3eiNm84J3cHextCWC+8NAd9zc0SV144K+8fhb80WO9opd6vWWtbjtCsLkxgyTi2NpGraL7XrM5etbEm73igfLZTRZwm5dywujKW7NF8lGDS5P5QlpCjfnioxkwkyuVZAliYbjcbwvzlyhTn8qxKnBBCFNYTZfZ2q9SrUpivaxbGRXaeb6KyTcAq3vx4eHqfUav39llh+/NPKhPs9esD/+2AX74499fBB4ns/f+pdX+dbd5T3/jSwJBv7sptn0R50F0SbWHe6JslJu4rgekiQFKZ9RQ+FwTyzoArR3qedHUsiSxGKpTkRXgxGKKktcGE1RbbrcnC8SMxSO9ie4MpXj0liat1vJlKcGE9xbLJEIabsu5p8+mKVQt2naHiFdJmZozOZrrFctyg2HuKkK9866zeRalaihMpoJc3O+xOnBBFXL5fFKRSSk7mJWNZIOs161gvTVveBFAuM2I2aoHOuP8/50DqQXt7neC9r8kt0Q0RWajovjCev1VFgDCQ50CYv1c8NJig2HqKEEBQbApfE0+ar1Ui6Wm2GoIhxOkyWO9MU7RksXRlNIkoShyEyvV1EUmVrToTdhcnO+SFfUwHa9QN57cSzNjdkCB7qirFWa+L6P5fodMu42tgsQ/KA4OZDg1h6TSl8W3TGD7/zdH95VPv6y2M/+2Mc+Pgb4j7cXX6igANHaT0X0LUXFi1o/f1C0jZ8eLFc4NRBnNl/nYE8s6FZUmy6yLG1pea9Xm+RbRlqfnMgCz+bSdxaKnBhIcn4kRVhXaDgel8YybNzE3WrtPG3X33Xxq25IKwUCM6o2oobC1Q2LUKnh4PpCfmpoMpbrcXIgzkqpyamBBJNr1W1NmqZzNY70xniyWtnzAv+i4VFRXSFsqEiIuHbfh7ChUW06nBvZuZPysuiOms8tKqqWy2gmzNR6je6YTjZqYGgKT1YrjGSE2sWr+YH08sKoeE+/83DtA/tctHGwJ0qt6dJw3C1clTa3KBvVOd4f57uP1vB8WG69h+NdERzX5/2ZPJ4vOg9Nx+Nhi6PRnwxTbtiMZsJoilDueL6P64nX9KqJsupHYDCxUm7yW29N8t98duJDf67dsF9U7GMfHwKuTuf5pf/3zRf+u5ipbts6vz5b4GhfLJCdfthYKTc50huj2nSo2x7JsIYmS7w+lmK1YlGo2cwX6iit8LA2Ntp2WxvY7r7vY6gKsiS8I9qk02xUjBfa/z6/gYwa1hVODSY6iodnj905P3Y9n0tjaXxfxKrHQxoLxc4iYbnUYL1qMUGUStMhV7GoWi7L5SbH++M7Oj/eXypzekicx176upmI/kLSwVRUDxb55U3nsFkm+0GhyBLL5b0VPe3duiRJ3Fksc34kRaFmk6vaTK/X+ewhofo40R/n4XKF4bRQ1iwVG5zoj3eoOV4G6bDOg6X1XYu5Ut3m1nypxWWRAkO0p6uiSIzoCpYrVD3JkMpEdwy35aOyUzflaN/L8WJ2g/wRuVb9j3/yhP/q4vD3NYTsAw16fv3Xfx1JkvjFX/zF4Gd/62/9LQ4cOEAoFKKrq4u/9Jf+Evfv3+/4u5mZGb74xS8SDofp7u7m7/7dv4vjdLYX/+RP/oTXXnsNwzCYmJjgt3/7t7c8/z/7Z/+M0dFRTNPk0qVLXL58ueP3jUaDn/u5nyOTyRCNRvnSl77E8vKL7Rz3sY+Xwdf+6NFLtVAnuqI7MujrlvuhmSFth7ipkghpPFqpMJQKM7lW5Z3JPHFTpKIuFBqcH9leypYMa5iaEhAX+1MheuIiAvriaBp8ONEfR5YkxrNhbs+XGM2E8TYUVDXL5elqtcMps43NhZemyMzma4R0hZipEWmZKY1mwlwcTXF2KMFoJiKyRiyX/kSoI0L7eRyIG7MiPXUvrWXjBdwYL46md+0avOpW9vmR1I6yz83It0iwK+UmiizxZLXCmaEkAJ84kOZPHq6hyBK3F0oU6zb3FkvorZwU+TkmTTFDwXhO0JYPnOhPcHEszaWxNMf7Oxf7M4NJBlPCdv3uYpmIoWK2nj/fCq1LhXVs16fpeBzqiXNjrkCpbgefj+3wKt0021A+ItOqcsPhf3l7+iN5rp3w0kXFe++9xz//5/+cU6dOdfz83Llz/NZv/Rb37t3jD//wD/F9n89//vO4rvgCu67LF7/4RSzL4q233uJ3fud3+O3f/m1+9Vd/NXiMyclJvvjFL/LDP/zDXL9+nV/8xV/kb/yNv8Ef/uEfBsf83u/9Hl/5ylf47/67/47333+f06dP84UvfIGVlZXgmC9/+cv8wR/8Af/23/5bvvOd77CwsMBf/st/+WVf8j728Vz4vs/vXp7hnacv3j49NZjYVQEwtV575Xp0TRFch7OtxWIjrs0Wgpn0QqHGUqlBzFS5NlvgkxMZTvTHKTY6Z9LnRlKMpENMdEV489FaUFi5nk9YV5hcq7JUalCzXUK6gu9DJmow3h0hEda4vyT8Ky6OpjA1mUrT4eTg1gCvmCFu/Mf6YhzpjeH7wsr83cl1qk2HasPhUE+UqKFyeSqPqsjcmi+wVrF4tFza0t6+v1TmYPfuMfbXZgqkwhoTuxxnqvKeI7MvjaW5PLX75+RVbXBPDyYYy0b23NaP6EpAkPR8ca6nh5JoisylsfQGFYcfWGYf708EHaSb80UO9UQZSXf6gsiS4JzIssyZod1TTGVJxI9fblmu31koc2H02d+oiujshTSFdFhlcq3C8YE4F4aTQXejK2pwtC9GSFPw8XE8n7lCbVcezat20wT4KHcD37i5+NE92TZ4KaJmpVLhtdde4+tf/zq/9mu/xpkzZ/jqV7+67bE3b97k9OnTPH78mAMHDvC//+//O3/hL/wFFhYW6OnpAeB/+p/+J375l3+Z1dVVdF3nl3/5l/nGN77B7du3g8f5q3/1r1IoFPjmN78JwKVLl7hw4QJf+9rXAPA8j6GhIX7+53+e//a//W8pFot0dXXxr//1v+av/JW/AsD9+/c5evQob7/9Nq+//vpzX+c+UXMfmzGXr/Gf7i4zk6uRjRk0bI+/eLqPiW6xi/r6Hz/mN/7Tw5ci2G0O7NoOcVPFh5dSCIx3RTBVBVWRuL9U5sxQkqerlYAQ+fp4GkNVuLtY4kBXBM8H23G5Nlvk5ECc5VKTVESnYTlMb9hdT3RHmVqrMt4V4elqhfZkQvy7SjaqMZAKo8oy12fyXBrPcGu+yHg2ImbNkkSl4ZCO6Lz9dD14XF2ROD6QQFPkgMvRxoXRFPcXy8RDWjBquDCaotJwuNcqTGzX49Z8KfCPONSzewz2Xq4/iMXuwqgoCDbePYfSIRRJoma5RA112zCrdhqs7xNEru8GU5NJmNqWsciLINwio77IJ/LEQJzbLYmtJkscH4hjqArT6zUMVWI6V+fkQBzPF7vw5XKD4XR4i4+KKkucG0nx/kyeA11RqpYTdGYSIQ3bcXeMGD/cE6UrZnBtptDRVWorkQ50RdAUmSerFc4Np3in9d5dGEkxV6hhOT7H++O883SdM0Mp7i6WcDyPA10RIrq6I5n24ujzi70XxV4/W68K/+krn9m1+H1RfOhEzZ/7uZ/ji1/8Ip/73Of4tV/7tR2Pq1ar/NZv/RZjY2MMDQ0B8Pbbb3Py5MmgoAD4whe+wM/+7M9y584dzp49y9tvv83nPve5jsf6whe+EIxZLMvi6tWr/Mqv/Erwe1mW+dznPsfbb78NwNWrV7Ftu+Nxjhw5wvDw8I5FRbPZpNl89uUtlX6wcuz38eHi//GH9/ntP52iarkdEsv/8U8e8/njvTxcKvNopcL5kRQzuRq9CZPJteqeCwBrg878xECcsC48G0KaQqlht1I6fQxVpmTY9LXyN96fyWO7Pj1x4SUwkAzxZLXCaCaC6/t0RQ0sx+voguiK1LFQnxtJ8c7THMPpMKvlJm5L7ZGJ6pwdTiIh2uAN26XadOiJGeSqFrbnkwyrXBhNs1JuBAWFJktENIXxbISxbITb80XydZtL4xneerIuZJe+z+xqhYneBI9XKyQrnTJGy/UDk62NmOiOosoS5abT4ScgIdETN7m3VMbxRMv7WF+ce4tl4iE1iOTeCXvV+Xu+CCw70htjvWqxXmlyqKfTLKxYt7kwmgoMm8BnudRkOlfb9jXthIbt0bAFNyAR0uhNmNQsd0djss2ImSpjmQg3X0B5kInogXEUgO356KqC6/lYrsdSyeK14SQ354p4vk9fwuRQd5Ttrp7jiUj3/oSJJNEx6inW7V0X20rTIWpqHOmLdzi/Xp7MBeogz/OwWxbdsiTeG0HE9VmvWvzpk3U+OZGhVHc4N5xs+WmUCe/g9wKd38NXhY9aYvnN24v87T938CN+VoEXLip+93d/l/fff5/33ntvx2O+/vWv80u/9EtUq1UOHz7Mt771LXRdfKGXlpY6Cgog+PfS0tKux5RKJer1Ovl8Htd1tz2mzd9YWlpC13WSyeSWY9rPsxn/6B/9I/7+3//7z7kC+/iziGrT4X95azrYMV2ezAXkQtv1O1qObelnm/h3oCtCNmrgI8YjsiRRt12m12sdkjZDkfmhAxnWyk3uzJe2vRGdHkwEuv923kJv3MDUFOYLdWzXF34WCD8HIEjo3AhrkyPi45UKQ+lQsJiMZaOoisS7kzl+6ECGpVamRanh8JmDWd6ZzKEqMkget+dL2I7HicEEvXGTfM3C88WNfq5QR1dllstNDvfEePvJOuPZCJmojiJJ9CYj+L7PuZFUIPXL7eA8aKoyR/vjXJspMJOTOdITRVVk7iyIa1W1bKKmIHfO58VOumq5nBiIYzke8/k6F0dT3JgrBF4aG/GiYU33l8rEDIVPHMjy3cednhpNx9vR/fRlULVcqpbLQut96E+YDKbD3JwtBLLezTg/kqJQt1+ooADI1URwXJsgO56N4Hk+t+afXTfPF6OEvoRJfzLEd1uOlu2Rzub+d8N2WVzaShC9u1AiaihUtgm1y1ctehMhrk7nOTuU4NoG6WqxLmzZ8zWLCVMDfD5zqIu1SpOZXI1S63vleiJrp2LZeL4XdEV26o7AVqvyV4GP2rnho5Sfb8YLDY9mZ2f5hV/4Bf7Vv/pXmObOsqEf//Ef59q1a3znO9/h0KFD/Jf/5X9Jo/HBg3Y+bPzKr/wKxWIx+O/s7Oz3+5T28THBv7s6t8Vl78p0PiCu7YYnqyL58vJkLnAGvDlXZCgVoi9hcGksTcxQeWcyx1tP1tFUecedzXYs8qVSk6n1WsfI5UVuYaPZCMW6Td8GKaCqSBRqFj1xg7eerNN0PVJhjbNDCb7zaI2m41G3XWzXp2F7HOyJcmO2yFKpwRsHMhiKjOcLlUbMfJYQemk8TaluiwVXEuZgTiuf4+lqlZFMZNtzHEia9CTMYJdvOV6QF5GKiKjrbNTgj+6vUrMcTgzE+ZOHa0HRd2OuyFyhzuWpPMmwztFtnC+34YM+F7br72mM8aqxUGxweTJH1FRJ75Kk+nT1xf0ifJ/AxhrEWGe51KAvEeLiWLrDfXQwFRLFZQvvTuY41hffkjp6oDu6rXKm6XqcHkxuSTE1VJHU2zahms7VOt4fWRIGbWsVi2uzBTwf/vjBKrfmS0FWycHuKFFdQVFk0mGDG3N76zyXGq/eTvtFzdA+KD4Msule8UKdiqtXr7KyssJrr70W/Mx1Xd58802+9rWv0Ww2URSFRCJBIpHg4MGDvP7666RSKf79v//3/LW/9tfo7e3dotJoKzJ6e3uD/92s0lheXiYejxMKhVAUBUVRtj1m42NYlkWhUOjoVmw8ZjMMw8AwPl6Jb/v4/uPqdI5v3tna3fJ94b1wrC8eSNn2gu6YsKheLjVYLDZpOn5QsCiyxNou8/P7r1hSemowESzUlyfzHO2LETNUdFVwHQaSIZZLTRGHPbAzkTQeejZaWK9YVCyXu4sl+hMmni+4BK7vc226gCJJDKZC2K7Pga5o4DY40R3hxjaJqacHEzxeqXTM1QF6YiZz+Tq5qhXYdZ8dSuL5Pt95uMbZ4SQhTebdDXHohioxmolwZTq/JasjV7W4NJam3HCYzdf2NLY6OZh4pR2JF0VbjmstllAVmQNdUVzPo2575KoWJ/oT3F4ovrCFe8P26I2bZCMG33koujCqLG1x4WzLgDfizkJpS7rrTkqokXSYy1M5xloOre18jFRYZ6nUCPgyuarNmcEk1+cKHO6N0bRdqk2XwVSIw71RljbJh23X59FKhUtjaZaLjW35LTth/QUcVPeKj9pnZjgT/kifbyNeqFPxIz/yI9y6dYvr168H/z1//jw//uM/zvXr11GUrdWR7/v4vh9wFd544w1u3brVodL41re+RTwe59ixY8Ex3/72tzse51vf+hZvvPEGALquc+7cuY5jPM/j29/+dnDMuXPn0DSt45gHDx4wMzMTHLOPfewG3/f59r1l/sbvXNnRUdF2ffI1awtLX5HYcrNtIx3ReHcyx9R6DVUWhLQ3xtMMp8Kc6I/vSsqLGK9uBzKcDm3ZUd5bLIMkcW26gOd5LBRqnB9NidTQXXbkIs1TEMNuLxTpiRkc64sT0hXm8jXODSdRJDgzlORAd5Rc1UKVJe4vC/7DxdEUg6lwsPhNdEe5OJqiP2lyY664paAA2DytuDia5vpcIWhfLxUbvPUkx5nBJImQhqHKnBgQce2u53fwBgAetzpKbavss8PJ517DVxF1/kER1lW6YybFus3V6TzXZ4s8WCrTFTO4OV/k7HNUFjvh/ZlCx+hkp4Vxudjg0li6o2Oy8a1JhFTu7VB0P1oR3J/VchNTE9bwQNDd6o2bQc6M7XmcG07yYKnM1HqNStPhzkKJy5P5Le9lG67nv1BBkQ5rH0oB4H4Iqac7QZbg//x9tOt+oU5FLBbjxIkTHT+LRCJkMhlOnDjB06dP+b3f+z0+//nP09XVxdzcHL/+679OKBTiR3/0RwH4/Oc/z7Fjx/jrf/2v84//8T9maWmJv/f3/h4/93M/F3QJfuZnfoavfe1r/NIv/RI/9VM/xR/90R/x+7//+3zjG98InvcrX/kKP/ETP8H58+e5ePEiX/3qV6lWq/zkT/4kAIlEgp/+6Z/mK1/5Cul0mng8zs///M/zxhtv7En5sY8/23i6VuG//9/u8ubDVQASoZ1boovFRkeCaFiTGeuKcmUqv22yaLXpBrbbjgdvP83x6YNd9CXNLXkHm9GbMF8oi2InjGUj5KoW8/l1zgwlgxZ+Nqrj+z6HeqI8Xq1SajgslZ7/fK7ns1axOD+cxPGFSqXUsHm0XOVof4L3Z4RFcq3VwTg3nGK90mQsGw52tO3Y8ZMDce4vlXm8svvN/epMnuP98cDXY6FYb7lRitvaYrHBRHeEqzN50mGdkUyYmxs6Ic3nBIVZjocqSzsuMhsVEt9P1CyHp2tVRjNhmo4XFDrLpQayJEYZH2ZK5my+zmy+zkRXJODDLBSfETIP9cR27eY8WqnQEzfoi5s4nuBqxE3xWZCA8WyYlXKTOwslzgw9kxfvJehtr0ZfbSTD+o6cng8CaxsOz4eFr/7Vswylv3+dilfqqGmaJt/97nf56le/Sj6fp6enh09/+tO89dZbdHd3A6AoCv/hP/wHfvZnf5Y33niDSCTCT/zET/AP/sE/CB5nbGyMb3zjG3z5y1/mN3/zNxkcHORf/It/wRe+8IXgmB/7sR9jdXWVX/3VX2VpaYkzZ87wzW9+s4O8+Ru/8RvIssyXvvQlms0mX/jCF/j617/+Kl/yPv4zge16/M/ffUquInIebs4XubvBhOp5LdGr03lODSaI6ApLxUaw0L03lefcSIrFQo1S3aFiibbtTK5Gb1zEdYMgsoEgib1xIMOV6XzQMtZkibChUKw7hF/BrHSiO8JyqRm096/PFjgzlGAmV+N4f5zvPFzj5ECcie4oiix1LAiqDNvdy3vjBgPJML4E12fySJIYD33yQIYnrbCnK9P5YNd5debZY5qqTMPx6E+ajGbC3F0s7UmS6/vPQr9yVYvumMFcvo6EsOk+3p8IlAVD6RA35oSMtel4VJo2vYkQD3ZRUdxZKHF2SLTcP84JSW2C6dR6jcFUiJipUm44WI5HwlTJ75AMqskSqYi+o5PoiyIdMaBFCl4oNOiO6aQjxp7GCculJoaq0Bs3Odgdw3ZdhtMhZnJ1ehPC66I/aZKr2pwdSnJttkBXzNi1C/Eyrp6bO3evCvYek24/KExN5r84vv14/6PCfqDYLtj3qfizAdfz+YXfvcZ/2KDgGEyFtjgPRnRl2zb8RuwU/DXRJRbyY/1x7i4UOTOcwna9wCTrzFASVZa4MVfgUE+M1XIzuNmPZSM0bZeIoZKO6B9I736oJ8pCob6FbS+1fidJEo+Wy5wfTVOoWTxaqXCsP05IU1ivWEytV+lNmAwkQ1iux5OVCge6oh2FQDsz4khvjJrl0pcwg3M+0R9nodig3LCD4w92R3i0UuVTExkerlRYfsG01cM9MeIhFcf1yVWbzBfqZGNmwAOZWheBYooiMZ+vM5wO4/s+/ckwT1YrwXU+P5Ki1LAJaUqQB1Gs28TNrZ4Gg8kQcy9gxf1h4lMHs9xdKLHe4pUc6Y3xdK2KKkucGEiIGPq1KudHU7iej67I+D7cXyphez4j6fCeJarPw0AqxEAihOv7OK73UgmlJwfiHTH0nzyQoeF4PFgqUW59btsmZPUWWXc7nBhIcPsFlS/nR1Nc+RA4Mr1x45WmCG+GKkv8n84P8nM/PMFg6tV3KfYDxfaxjz3iyWqFf/L/e8g3bnW60G3nZJiN6VTXd15Itht1tDFfqFO3Pd6dzBEzVW7OFemNm4xlI/QnTeEB4Hikwzp3FkqcH0kFi52uykHA16lt3CX3iktjad6fyZONGpwdTrWMrwRR9I0DGUp1m6ip8smDWb7zcA1DlTk/miJfsTokrguFBgut0CxZEvPvjZ2F7piI1Q7rCveXyvi+H9xUXd9HlgSh8vJUnsFUiP5kiFTE4MlqlWzUeOGi4sFymUM9Ueq2y1rZIqQLbwZNlphar5KO6KQjOu/PFDBUid6Eie+L0LTRTJh4SKVpe+RrFk+2kd8OpUJbftafND82RUWhZqEqUlDo3F8q0xU1GMmEAy8SQ5V3XCxLDRuJV+OlMJ+vM59/pr54GYT0Z8vS+ZEU33uyvuWYfE0oiC6Nbe8wO5QOvXBBAR+OnbamSNumob4q9MZNfv9vvfF9JWduxH5RsY8/s/jm7UV+5l++v+XnEV1hu+67mPNuXUi6YwbdMWPHgqIvYXYQ+soNB02RMFSZB8tlsYscSfFgsUS1pZ9v2C5hTUZV5aDACWkylYZD1FA52hfj6nR+T6z+ZEhlrCsadAu6YwbffSQY/ZfG0kyvV1ks1FEUmen5IrIs+NuW44EvMZgKk6/bHOgSzpnL5SbpsE5PwiBqqFsCv3yEZXbb7ng2X0eSxHVoB6IlQxoxU2UuX+/oCC0UGx3GYntF2ymzHUAmUkU9Sg3n/9/ee4dJdpd3vp8T6lSOXZ3zTLcm55luzSBAgIyQZcAgG2xjm7WNQUYgjLyAuTZhYS/oAgZsI62xvcDei20ZWMvGC2bRiiBQmtEkjWY0uXPurpzTuX+c6jNd3dVxWhPE7/M880hdderU+dXprvOeN3y/3NLgZjqexa4p7Gj28szlELtavYzHMozHMjT5bDR6bYyEq9ffh8Jpmn32CpOw2BoUTWucGp1Bo9x1ciiyoG9mT6uPfEknXzAMsE6NREnni3hsKi1+Oy6roccwGEozHjOOVZUlhsNpwqk8XruFrjonFyeTTCWyTCWyZqC7VP9Ii8+BTZW5PJ1iS6MbCYlIOmcGjmtlttlytcz1fzk7HseqSlV1RcDoi3FY5AW6Ew2e5Z1Yq/FSjH5ubfJy8iUcOx6PZUjn19eq/Wp4CUTOBYIbn2S2wH/59zPVn8sVyeYN1czmOXeptir9DM6y4dNStdta98Ix5XxRx2qR2droIeDUmElm2dvh57auGrY0uomk82xq8NBd68KiyLQF7HTXualxacZdfzRDwLm8E2F3vYtNDR4uTMRpDdjRFKmihv7cQJhwKo/DqjIVz9BWY2hW9HQGjIt7f4jpZJbpRI5n+0JMJrK4rSqhVI4Xx+Ic6Q8vuMCeGonSXe8y+0TAkE4ei2YIujS66pz4nNqiI5vHB8N0rPGuy25RsKky7TUOdrV46e0MkMgUyBdL7G/3mXfRLqvKq28J0tMZwG21cHwwwlRi8QxJs68yWzE0k6S3M7Dg8aXwOzWeGwjz3EAYv1Pj4IYABzr87GrxIkswk8zhtipE0zkO94fY2eKlwWNlU72L6USO0UiaM2MxIqkcPZ0BJMkYaZ31Z4mm84xEDIfQWY70hzm0YXG/mN2tPg73h6hxWZElo4nYGAVe+boWY7GJjOVQ5qQJE9nCkv01J4Yi+JwaG2uv6Jt47ZY1X8QzhZfi4vzSdxh89YlLL/l7rBQRVAh+IfnrH11cchxwOpEz7pZ1nQOdflRZquq8mCr3OixFtWAEjC98h6awsdZp1PxliXSuxItjcYbDaY4PReifSXFqOEqd24ZFlTnSH8ZqUQin8stOgRzo8DMcSnF6NIpDU7EoEr0bagi6NHa1eHFbDenlbKHEwHSS7U1eTo/G6OkMUCrLK+9u8VXUt3WdBSJg88nkSwyFrmQgejr8ZAslNgSdTCdyXJxMLlm3zhd1SrrRSLhacsUSNS4ja5TIFnm2z1B3LOnwswsz2C0yjV4bsXSeYgn6p5Ocm4jT4LUteZd6uD9ER42D3g4/m+udbG8xRlNHImle2R2kpyNATTnIs6oSnUEne9p8HOjws63JzYEOfzl7Y6xpMm6Ugl4ci5EvllBkicFQimi6QLFk9Azo6OWSEXTUOBmOpNlU76Ej6DS8L4LOBQ2At9S5cGgyWxpd9Hb6aQ3YuTiV5GCVwGJTvZvTo0aWKVcosb89YAYCQ2sMCOYynTDGhlfL3KyKU1Pw2Y3f18UYjWSocV3ZZnODu0IxdjUk1pCBWgq3TeXMNZgQ+u6J0YpM2vVEBBWCXziODYb54ZnqUu1zqXVZsWsqR/rCpuqkKkP9nMxDg8eGx6Yu6SZZrOIloMpwaGMNxwbDHOkPc2okRjxT5NJ0gp3NXjYEHdy+qZZ6j42NdS6S2QInhyJ0Bp2cHY8vqpsBRtPloY01HOkPk86X2NLoocFj4/JUip9dmOb0aAyrRWFrk5f97Yaa4S0Nbp68NMPWRrdhClYsoSkS8hq+IQx3yRwzyRxbG92MxTKcHI6uSi9gMp6htIYe8kgqz0gkTYPHyvmJOBtqndg12cyS5EtGf0euWCKZK5gp+oBzedG7/pkUmWKJsxNJTo9E6SnX82OZPIf7Q4RSOW6pd5Et6PRNJzk+GCFXKHF61Mjo6BiS12CUoI4PREhki5wZi+O2WXj1LUE0RaItYEeRJQ73henpDHBsMMJUIkOj18bRck9Mb2eAoXDKLKG0BuxsqHWWGyNlXhxLkC8aTZnRtNErsm1OBmNns5fRaNrMApwcjpomWpsb3FdlYDaXalm65ZiekzGSZQmrRcJqUfDY1ap9Gn6HhTOjcU6NRNnf7ufi5OpVRGeZFVFbLzpqHIuOhy/GrhYvH71rM//7j1/Ffa/ZuOB5WbqSIdVUmQ21Tgolneevg7JrNURPheAXislYhnv/v6MVktTzcVuNC+7xoSsp8WS2wHQiS0fQRa5QQpGgqBtaCIZnxeLvOfemqc5tpdlnJ5rJ89SlGWTpyrSEIhkXRbsli9+h8ZNzU2Z/wbYmD7d1GR4T8++oLYqEIktkynXlAx0B0rkrQcdgKEUik2dXi9ENv6vVZ3qXDIbSBF1WU1nyzFgcr92CqshsbvRUKE6uFL9DMycRzqxCAVRTJPa0+YlnCtgs8pree1aNtL3GsPmOZQrc2hkwu/pb/A6cVhVFkZmMZQi6rOzv8GNTVxY9ZfIlbBaZ7gY3NotMvcfK2dEYXXUufHYLiizR2xkgVyzRP53EZYo4WfE5LMwkDEO4eo+1ogwVSuZIZIogSYzHsoY/ilMze0uCLiv5omEf/8JIBK9dY2eLj/MTCVyaQqvfQbFkmMeBkaWaSeS4PJ1kX7sPRZLR0dnc4KbeY+XJi9NVR4PBqNFva3JzevTqJ0IaPDam4tkVC0p117lMzxoou/HqOsPhFO0BJ6dGorxiYw2hVA6npvLcQJgNtS5T6+ToYJjtTR7z9281WBRpTb0yS6Gpqx8B/8SbtrG3zRAse4vcwotjcYZCKaYSWX7jQBu/fWsbLeXzXSiVsKoKoWQObYW/wy81IqgQ/EKRK5bwOSycHI7SVedacFfT7LPhsVmIl11BARq8ViTJSMsHHBbCqTzbmr2USiVkWcZaLkssxomhCFsaXHjsGof7QxUXk5JuBBr9Myk0RaanIwDoHB+K0BZwMBRKmYFF0KWhKTLp0pW6747yyGQ8U0CV4UBngKcvhbi1XK8fDqfJFUpsa/SiWWQ6apz0TSfZ3uShWIJEJk/QXRlgRdP5qzIkqlYmWo6uOifxTKFiXHYtdtHxbAG/w8J4NMOhjTUMh9MUdZ3n+sOmpbXbpuKyKdS7bZR0nWP9EQ4son46H5/dQr9uuKcGHBbi2QKHNgaJZ/KEUzkCTg0JcFuNu+rBmRQbgg5sFpXJWBabRWZzg7v6qKWkMx5J47ZZONwfxm1T6ekIcGrEyHjYNYXz42lS+RKRdIG2Ggc7WrxMRDMoksRTfTP4HBbaAw7Gohnz9yyayhu/s00eZhI5nro0U1ZIrT4dEUnll3UQXSnHhyLsbPby4vjy2iOytFC1M+jSaPDYOD0aYzSSoTPo5MnyNMimejcWWarwXjFGZePsaPaSL5awWZQVe7MEXdZ1V0hdS/lnbp9OV52Lr/2nA0zEMnjtlopSqiJLKLLx80r6q64VN0ZoIxBcI1r8Dv7nHx3i1bfUGuOFHhs7mr30dAbY1+ajxqmRLZY4MxanxW/n0MYANU7rlU54ScJlVXBbVUYiGZ4fji4ZULitCgc6/BX1/bnYyzbN25o8ZIslDveHONwfpi3gQALCqZzpcDidyNESsJvKkz6HhclYxmx47Kpzm7oXRwfCDIdTeOwWZpI5FFkyxLQko23MZlE4NhhmS5MXVZbo6fTT2xlYFyOiZG75u72ezgB723zIkiGNHE7mF4ySPtsXYl+7b1Xv7bUbQZ/PYaFQKjEYSnF0wBg9PD4UJujS2NboIeCw4nNoXJpKEliF2uRELEO2YIzFdtW72N7sZTCUZDic5tJUkiP9YaYSOUolncP9YYbCaaYTOTRFRlNlrKpCncfKnjYfO5q93NYVpDVgZ2+bj0gyz3gsS6BskBbPFMwmylSuyPnxONtbfOaI688uTJMvFNEBRZHY1+ZnS4MbqyqTzRfZ1uRBkgzTro11Ln5+cdrshzk7nmB/++KBlF62d19Man41PD8SXdF46f6OgDk6PUuj184LozF2tHhp8dsrZOovTiXY3OhZkLnLF3VOjUQ5Ox7nxFCE7joXm6sYyM3Ha1//e+y1dHYoVQKReo9t0d6sGw0RVAh+4XDbLPz3d+7nQEcN47EMp0aiHO4LcXQwwvMjMdzlOfkmr51nLoe4PJVAUyT2tvmYimcBY+7cbbPQ6F28ZjzrkHikfHFZeBwqLX4HJ4YinB6NcaQ/zM5mo9ks4NSYTmTZ1eLj+Bz1yQsTCbrrXDR6bTg0xax9u6xGClTXjbHKW+rdtPod9E0n8dhUJMkokeSLOpGUkYnY3OBGAi5PJzncZ7inFlboUeC1q+WsykIWM4+aSzSV59hghKDLSovfsWi6+thgxOxdWAmzFy9FlkhmiwRdRuZAU2V2tvhI5wqk80VsFoVUrkg8U8BhVRlYYWPibIlpT5uffMHIWPRNp8ysQLPXilWViM8JrJp8NjSLUW55rj/EdCKHLEmcGomiyBJDoTSnRqJYyunrs+Nx8zx017mYSWTx2i20BAzdiabynazXpnBpKkmDx8rATIrzk3Gi6TyaKhPNGL4YB9r9tPgcHB8Is6V8Ad7c4CGdL/LcQJiezqWDhuODkYoeorUSW0TVcy7xjDF1dKDDz9ZGD3VuKx6bSnedE5uqMBxOMxbJsKfNx/YmDx6binUFKf8LkwnOjsd5zaZatjUtHlzYLesfVJTWMKJ6YWLtPSE3AqL8IfiFRFVkPvmmbTT5bHzm+2fNx2UJNIuMJBmeCiUdNtS6sFkUisUSfdNJLIrExloXoNNV5+aWejfpXJGLk0lCqSsXx23N3iXTx911rgV9A/Fsni2NbiZiGVr99qqvPzEUxmOzVHgU7O8I8NNzhk/JTDKHTZVxaAqbG9zMJLLEswUy+SIbap34nRZKJXhhJIrLqrC/3c9gKEU8kyedX1lQ0VXnZiSapj3gQFNlLIqEWlahVCSJs2NRErnF96WX7+Em5yiHVt1Oh8N9Ifa1+3m+rO3Q0xEgXyxxYSJOsHzBK5SMfoNZ4yZZkjg9GqO7PI6ZyRc5OhBmX5sPJExPDDD0I+arpy6GXVM4tLGGpy7NVBVe8jutOKwqxZLOwQ0BSuXj39/hp6vORUnXOTV8pcnzxbEY28sZBZtFYWujh+lElky+iNuqcHEqga5jlqN6Ovw82xfiFV01jEWM5tPnhyN01LgIOC0cHYhgtyj0dvrJFnQsikyuWKJQ0nFaVcLJXMVd++G+8JJljmJJp73GcdWNm03+5RVIX5zTf7O/3c+WRjdHLs8QcNvwobOp3oW3XEIEw3tlpWJVe9t8/Lj899HstxslBl0nky8xHjNKRRZlfe+xG702c7pmNVycSnBwY826Hsu1RAQVgl9ofnVPM//tJ5cIp/J01DiwWRSO9Idp9FqxqDKb6t24rCrP9oXY0uBmb5vP0DSIZ7mlPJLX6ndwcjjK5gY3NS4LFyaTNPtsFdbP1ShUqTH3TaeQJaNXYjGJ40KJioBiU72Ln5yb4vZbgmQKV6S/a5wag6EULqvKcChJrcfGySFDBlyWjP4LdJ3zkwm2NngYi6aZjGeXlSJfSjl0li2N7oqLxHx8dsuiz1Xj6ECYZr+dJq8Nl01hIpZnU4ObEqCXwKJKFEs6qiLR0xGgpJfw2lUmYxkkQJVlDnT4KZWMfW1pdNPotRFJ5VGVlde9+6aTZjPk/LS726owEDIs09sCDurcVpK5ItubDev2RLbA3jY/AWeO54eMi/loNE22UKRv2vBdmYxn2FjrxKLI9E+n2F+2EJ99q8NlL5lCscTl6SSXp5PsbPYyFE6ypdHIcqXzRYbDxrncWOsiXyyZzbmwcFx0tsxRbcx3e5OHSDrPnlYvyVwRu0Xh+eHoqtP6mVWIMzksMucn4mbT5HavjcP9hp/MjiavKYbl0FSKi3RItwUcuKwKFyaNKZjQnPHruaqfYGibXI1SbTUkySjFraVHY1/b1ZecriciqBD8QlPrsrK5wcPTl2dMK/LXbqojlMpxfDCCIkFbjTEG+OJ4nFa/HR3Y1ODm2ECYXLGEKmfY0ewlnS8QdFqp3WBlNJpZtuPdskjqdl/78hftuczO5KfzJaLpPE5Nwe80xidnFRcPdPjJ5otsrHOhKvDM5TA7mr04rQp2i/Hlu6PZg8+hLWpx7rYqdNUt7Thpbmuz0Oyz0+SzIUsSuUKJaCbPVDzL5gY3AzOr10GYvRjMnRDYWOuk0WvnqUvT5oV3c72L85MJdrR4CZT7JiZiGWRZwmtT2NXqJZLMMRBKs7PFu6ovflU2RkhhYe/IliYPh/uufDbxTIFEtkA0nac9YOfMeJxsvoQqyyRyRvYAHayqYkixzyTZ1eJjPJphIJQiVyhxpN8oU52fiJvrOzoQZleLl92tXjRFYSyWJpEpcG48RmfQSZ3bymQsg0NTKzw9ejsDDM4kq5binusPs6fVx6mRCIUSbG30UCiVqoq6bW10MxbNmKJbK/nMVpPS725wc3JOE+msboWuG/0Z+9p8nBmLUdJ1oum8aV43y6yqKhglxt2txt/qYqTzRU6NRNnT6lvxMS7H3lZ/hWneSgm6rGydM/p7MyKCCsEvNJIk8U/vvpVLUwne/4/HOTMW48RQmJry3ej+jsrU8HQix942HwOhFDtbfSSzBRyagg5EkiWemTS2bQ/YjZT9cGTRrvdq98e3ddfw8wsLvQ4WY27WIJ0rcnY8TmfQSYPHytOXQ/gdFrY2uhkJp7GqMtMzSewWhVLZaySRzaPIEuOxDD+7OM3tt9QueI86t5VN9W5ODEVM8ablyBdKjEbTCwR5JMn4DEPJ3LLZjLk0eGzUujV8Do18oURjdxBJknj28gzhZJ5DXTUUiiVKuvG5lnTQFMPvIp4tcHBDgKlElnzRuDDNMpPIGQZuseyyegIS0NMRIJTK09MR4OLUlQtlnVsjmi7Q2xlgOJyuUJN02wwjuJ6OAIosEUkV8dotPD9sOG32zyTNu9qpeIbBUJIapzGJ0Bl0EknnF8ixnxmL0V3n4vx4nNaAg0LJCOT6ppP0TyfZ3uwlMs9v4tm+ELd1BRlbxFvl+FCErY0eQOfM2OKCTWfG4uxp8xFe4cjvxloX51YRVMjz/jLmB335oo7XrvFcvzE+Oj9ZMVfAKp4prCgI1nVWHCSthGxxbcqca9FmudEQQYVAgPHF9y/vPcSD/3GWF8diXJpKsKnetaDWXO+xggTNXhsvDEdI5Usc2ljDqZEojrJiYr6oMxBKMxBKY1UldjR7sFkURsJpRud8QcqyhMuqmkJWu1t9PHNphm1NHhyasuyXoceuVlh354olXrGxhmyhxEgkQ4PHylQix4agQoQcfTOGt8NIOE2Tz2b6O9S6rei6Mb52cs4d3qYGN4lMgbPjcdpqHMSzBc5OxCuOeTHGY5mq2h26DrUujdFIumr5x/xsJGgNOKgpG4G1lc2xOoNOc0Jga6OHWzfU8JPzU/z8wgxbGt3YVAWf3cLGWmelZbsiE00VCNRWNh2ORIzAp7vetezd9L52PyeGo1UbUf0ObVEb9UKxxM8uGoHijmaPqd2xo9kDkuGImyvojEUzXJpKsqfVcLDtqnNxpD9kNofOZWOtC6dVZW+7nwuTcbY2eUhlC+xt82GRZZ7tr94jkVpmMmepYGIuqxmUvDiZqMgerHbnk/EsvjkTOqFUzvQ+mYxnzdKN26ayIehckzMqwNg6KVK6bSovrtJyfZaVNJ7e6Nz8KxAI1gmbReGTb9rGOw+1k8kbTZlBV+X8t11TGJpJc7g/TKPPzvYmDxZFIp4pYFUVuusqu8uzBZ1TI8Zkx2g0w/52v3m3f7gvhNduuIJurHXy4liUQglzEmQxB8ZZNtW7K8R6zo7HKeo6yVyBeo8hlnRoQw3jsSwWxRhHc1lVYpkCG2tdBBwaXXUuNFnCUg5wJuNZ9rb56K5z8Vx/2Eyfz2p2xNKFBenZamOoY9GMqfo3H1kyGl0vTCaqfolurHWyq8XHwEyKY4MR9rZd6Qfom07SHjB8QUq6ztOXZ0w57xfHDKXRaCZf4TbqsalkCyWyheKiF8NwMkdbYKHfRWv5sZ6OAM8NhKsaNwVd2pKlrtnmV0m6MmGwucFNjdPKqeEYh/vCSOj0dAYIODRODodxWBV+dmG6akABxrmWJImfX5whnTNkvvvKn9doLM3+dj+dQQeb6t20zPGvGV8nHYbVNDUWdTgzGuVAhx+bxWggXi1z1zD3d2YynmVoJsVtXUHSuWLVccyVEHRpZJYwXVsNG4LOqoaEK2HvEmO+NwsiUyEQzOOXdzSxqcHDnz/6Ak9frixFnB2Ls6vVy1Qiy6Upo0nu52XHz4DTsqQbJBhd/K1+O7JkXHhHIhmafXYmopkFToxLyVpvDDoWCFRpisSp4SjJXJFXdgfZWOcyrMZlqPNYafLZsKoyr+iqMYSYNAm/ZqHGqdHot5Mv6qZAVFug0tBrbuBwajjCrRsCoBv16GgqT9Bt5dhgpWtqa8DO2fGFd//9MynS+QL72v0MhVIkswU2NbjLUw8lMyDQFInuejcXJiozAJ1BJ/UeG6PRNC1+O0GXkWnpn0lyYTLBgQ6/McWjyGQKJTRVplAssa3JUzGeO5fpRA6PTaU1YGcolMbnsNBV6+LksCGNLknG8cz3lNjR7GEwlMa6jHKiVZXZ0ujBrins7/BzYSLBWDRTzmLJ2FSVdL5Ie9CJN2VZMoszn1imUCEvPRRKVzh0HugwNC8kiYpM2dUwEDIailc6MVkoGV43Tk1BAl51S5CTQxGiKxg1BXDOsUOf/1lPxLO0Bx0USvqahNeAq1aj7OkIMBpJE3BqizaProRbVzE+faMiggqBoAoba13893fu50v/5zz//ed95penTqX0brZQNO9KxiKZijsqCaNcMj6vhj23Ua7WZWUglCJRJaW+WMf89mYPAzMpuutcSEicK190c0WdWreFjbUuJmMZzk0kqHVbyRVKDIWMi+mruoPk8oYIVixdQNcL1LishFI5Ls+5u/dWmc64rStIJJ0jkTYuYhcmE2aJoz+UYneLj9NjUbOHxLCKX8h02ZL74mSCrjoXkVSeTL5Eg9fGTCLHZDzLnjYv8UyRfLHEvo4AsXQetSxFHknnkCSJcDJHMlesyEqAoZMhSxI1Lit2i4zPoRFO5XBbLZSQ2NroxmVVkCSJSCpvfn6xTIEtjR6GQmk6a5yGm6hDJV8okc4XsWsKufJFsNlnp9lvNzMos5bm81FkQ9+kvzyKfHkqUXH+T40Y2gzPXJ4h4NKYiGVxagrT8Rz7ypMf1djd6q2whx8OG+O91fQ2ZstAu1q9RFJrKw3MZ7ycdVut8moyV2RPm48nzk/TUeOgWNTN331Zgm1N3qo+Otk57qHV+3qMx6YS2arBjlNTqk41uW0qknT1luf5YonhSHrZsdnluHXDzTtKOosofwgEi+CwqvzZ3Vv5zh8domuOIuCZ0ahpRDVX5W4inkVTJDbVu+jpCOB3WphfIJ7Vjuiqc9FV68RqkRcoSc5iaGFcod5tpaczwOnRGPFMgfMTCexzUskOi0yN08rzI1HOTSTY1+6nyWejxW83jyKeLXBkIFIua0g0++08NxDm8lSSV98SNPdls8jsafXR0xng0MYaktkChVKJM6MxhiMpvHbLgp6JE8MRds/poF/se7pQ0inqhk5HSTemas6MGWWATL5Ii99O/3QKXdc5P5HgZxemiWcKpAtFhsIprKrC8cHIoqOvNotMoaQzEkmTL+k8NxDGqipYVGMK5cxYjMP9htjX/PJWtlDC7zCaKAHq3EbwYFiqG+qoXruFkUia/ukkmxtc7GvzVS3jODWFBo+NI/1h3OUAazagmPUa6Qw6GQ4ZxmD1Zbn0ZK5IwKUtKvHcGrBzvkr/RsMSfjawuj6IlTAYMqalVoul7FLXP5OitcZhlq/2tvmN3qR55TRFllBlmS2Nbno7A/gcGpvq3XTUzMmmlX/XBmZSdASdbG5wIQF7Wn3cUueizmNja6Pb/DuudVnZ1uRBU2TyRb3i73st5KqYBq6WGqd21cdxIyAyFQLBMuxt8/O9+2/jn48McaQ/zMmhCBI6O5u9PHlpBosisbnBjVVVODeZrEhF17plfrOnjVvqXexvD7Cl0Y2qyERSOX7jb59heGrxEseJoQg7mo25/HTeuBjOFyGavfA0eKxoqkKuWGJro5tiybAOj6YLXJyc8x46NHlttAaM8km2UMJukdne7OXkUIRXdgWRZbg4lURTjD4LWZJwWlXGohl2tfpwagolHV7RVUM2X2QmmWcmkSWdL6LOsTWNpHK0BxwE3VYkjF6KWeGiYknn7GQcr81CwKnRXuNgNJyixe/g2b4QcnnO32u3sKHWyfnxOA6rSjiVZyJWmcJXJKO8MxY1PpvcnBJUg8fGwEyKi1MJdrcaWgQuTWFTo4dMvsjTl2do8dtN8auJWIbuereZBTg3EWdbk5tCETzlCQ1d100/llnhrmqqny6bak6/+MujrT6HhVa/3fBq0OGn5dLZtiYPg+EUXXVOHBaFXFFf1LOizm2rKG/MMtfdsxrrLe40Gc+a5bLVcKQ/ZIy9xrO8OBbn1bfUcrgvxAvlqZxTozGz4RmMBtnDVcS5ejsDqIqMzSJT0q+c89mMW8BpMcejtza6OTMWR8IoB2XyRU7NsSQ/f5UqltlV6HAsRk9nAGmN5ZsbCRFUCAQrwKoq/O7BDn73YAdguEre9w9HaQs4mIpnzS+oDUEnd2yp40BHgJ7OgOHhUeWLIpEtkM0XqXNbmVrC5fTUSJSOGgeTi0xTDIfTbKx10uwzFAs9Nov5Je9zWMgXSmwvT5OAIZ60pcGYamkN2PHYVFr8dqyqjNOqoqOTzJaoc1mJpHM4NBW7RWY8lmVgJsVguSmuUCoxHs2go9PkNV4fcFpMpUwwygnxbMFMyc8aJW1t9Jhp/e5aN0cHw7QF7LQHXaTzRVxWhUS2iEWV2Vjr5ORQhL3tfnO0cCKa5tYNAULJHEGXleeHo4xFs+xq9TITz5EuZzB6OwM81x/ilnoX9W4b5ybjBJwaAadWUVZo9NrMoGImkcVV9pfornfhtqpcmkritqk0+ew0KDI/uzhNbk46fkuj27wgzmUilmV3ixdNVSjpJULJHBuChrBVJl/i2b4QhzbWoKOTzhUJuqz4HRaO9IfZ3+5ftD9nMRXJS1PJigBpPrl1akRsCzgYDKWQysqkq6HJZ6PV7+BYubelq87FT89PmUEGGIZm25s9JLNFsoUiFxe54CezBdMQcGujh3q3tSLoDiWNaZEDHX5eGI3hsMhsa/ZypD+MzSLT0+Hn2ECYgr74Z7pSFtOcWQ0vh9IHiKBCIFgTAafGbd21nCmbHe1s9rKt2Vu1F6EaLX4HkiwxGc/idxh9EJlCkbNjcXOSoC3goNFrYyKWIbXIFMDsaF0sXcBjNwKK2zfVksoWjXJEi4/hcBKP3UUqV+RAh5/LU0n2t/tRZImJWAanZtxRh5J5coUEigLtAQeJTIE6t3GxSueLeGwqmxvcnBgKs6vVx2AoRUeNgxdGorTVOIimCxXTEa0BO0cHIubPI5E0BzsDPD3nrvPooKEQ6dIUCqUSOUlib7ufTL7ESDhNwGGhqBt9ATUOC51BJwGnZqqGSpJkjreeHIritip0BH34HBrJXBFVlvA7NC5PJ1EkaK5xMBxOG5bciSzFkl7RfJkr6njsGh5b1hwxlSRjWiOZK6Jb9HIZ4cpFSFPkRf1OppM5hsNGQ2lvZ4BIKsfATMr0Onnq0gwbgk6zKXfWTyWVKyw6ujv7mVXrt5iKZ9nf7keWJBLZPOPRLKFUDk2RKoSwrgZNldja6CGazrPSMGVXq5dsvsTZ8fgVcz6McdNqeiUvlIP0nc0eno8sHM9UZSp0Qs6MxXBoCrffUsvJ4QiaItPit6MqEpqqUCg7lk6Vgw6nphoOwR4bQZd12SzPckyVszaRdG7NWY+ezgBPXZrmH58d5MxYjLu2N/CfX7/ppsteiKBCIFgj972m66peX+PUuDyVJJy6YjVuU2XqPFZ0XWcwlKoQUVqK1oCdqXiW3s4APyl7HAAc7g/R2xngqUtXplhm5/pv2xhgOpHFZVOxyBIOTWE6kaW7zsmzfWF6OgOUdN3sA+iocVDSdbY0epmMZ9nd4uOF0QhddW7q3FZ+en563lEt/DLMV0m3JLMFTo9GOdAeIFco8ER5PxuCTqLpAreWMw7NAQcXJxOmSZhOpdy3BHQEXfz8ouHL8cJIlBa/nZPDETL5EvUeK8lsgVAiS1E3mvRuqTdM1ayKRLYcXExEMxWjurpuBEQ+h8aR/jBNPlvFXf9iZmhgCIdFUjnTBKzRZ18gBDU3ED3cH2JTvZGqbwvYcWjKAm+UYknn6ECYbU1uTo9WXoyzhdKC5kmPTWVni4+fX5x/ftZGjdNq6rdMJbJVj2MWqyqxvdm3aMPp3jaf2b9SDVmqngHoqnMvCJJSuSI/OT9Fa8CO26pydNCwXX+2L8xt3TU8dXGGTfVuiiWdWKZgfk6j0QwHOvxXNRkzncgxnQixt8235n380TeP0j9HafahH1/CblF432u717zP64EIKgSC68Tnfm0Xv/yXP6u4u88UShV3cithZ4vXdPOsZgx1bCBspsW3N3m4PGnob5wZi+G2qXhsFmYSOXwOQzSqfzrJtiYPh/uML0mrKtFd5+aF0Rj9MynqPVbaAg6S2SJbGj2cGolxdjyO32GpUCUcrCLFPT/MsKoSFsWY6sgWitR5NLz2ANF0Hp9Do1jSiWbyeB0aum5cOAwNDz/5ok4qm8drVwk4rdR7rGYG49m+kCk6NlsOcFnVirvIeKbA0YEwdk3Bpim0uW34nRpWRcbrUHFoKqPRDCPhNDVODV03LOo9NpWny++jyjC6SMe/32GMGNd7bGZPQIPXVtEvAEbvjKbKZqAy2wQ8GDJGFDfWOhdMuBjrWVlWLJYpmNLi68GFybg5XpsrGCPA+9v9nBqOmIEZQFvAkLRfLKCY7UupRsCp0eKzc2KRgGOpjOBQKI1dU3DbVIbCKfa1+emfStEaMILiRp+doXnvO7lIs/RqWatOBlARUMzyhR+eJ1fUedcrO81pqkKxhLrO/THriQgqBILrRGfQyf/1y5v52L+dXvVrNze4sSgSiiybDX2zX2edQScWRcLnMCYbzo3HcFkVGr02ssUSVovR3DYezbKjxUMqV8DnsJiTEZsb3eQKOh01Dtw2C/mibnpA7GvzcXQwQqvfYaov7m3zEcsYpY/ZoKLVb6/qMTEzx9hpX7ufgZkkp0Zi7G/3MxHPUoqWGApfCaq2N3vw2Cy8OGaoes6+7thgBLfVQnuNnVSuyIZaixlQgNGgabMoODWF3s4AhVKJiWj1C0c6V2RnlYDslV1B0HW6653kikWcmsW8u93d6uPSZJx4tsiuVm+FVwUY6f4LEwli6XxFpiGaylPj1CrGjHWMRtvBcvPlXK2FUDLHhlonVAkq8iucOAg4LJxeo8JjNULJPD2dftPnJJM3siN7Wn1cnErgs1twWlX6ppOL9oXsbPYuGlDsa/NzfjJeIac+n3Bq8ewQGOd0Nmg5Ohg25ewHZlJVzezWq8KwVp2Mpfirxy/wd09c5s27m6h1W0nlinzsV7au+/usFyKoEAiuI799azvfOzVWcUFcjt5Oo+N+fiXh+ZEoBzp8DIUy9M2ZkNjf7sOiyEwnctS6rNS7beSLJWRJ4qmLU+gYWgpuu0pn0Mn58QStAaM5NFV2ppzVD3imL8T2Jk9Fin2+fTtAo7d6UDEYSrGl0UW+WHYe9dnY1uShpOtk8kVs84SNgi4rE7EM25s8yJJEs89wWi2UdDbWOckXdUOoSzfssqOZPCOhFOOxjNlvshIuTSVQJCqUEIt6iQ21Ln5WntCQJWNcNZMvcWLI8O1o9juwW1RuqXfhsqpoqszlqaQZZKRylZ+BjuGuCZUBjteuAca25ybipq7CUo6woSXKLnPpqnOvekJjOS5NJhdkXJK5AvGM8W857PNUNWUJszl1OSMuh0WumrmZz9mxGHaLTDpvGLPNBn/ZKsHY1fQt7G0z/r6KJZ3x6NXpVCiyhCJLC5pq0/kijxwZYn+7n7/8zT1X9R4vNSKoEAiuI5IkmdMKq6HaJEiT14Yqy8TSxsXGa1PY3OglnMxxvqw0+dSlGfa2+Tg9GuNAR6D85axzuD+MVZVo9jlQZcPSqa3GydnxOK/qDvLCaIxWv52OGgfKCkzF5ooVzaVQ0rGqChcnY/R2Bjg2GGYkkqHObcWqynjtKt11LibjGSTJcFid7fDf3+5nJJLBbVXY2uTlxFCYbEGnM+jEY1PN8cy1MJ3Isa/NcJbUFIk9bX5i6QLJXBGXppDIFSnpsCHoMjM0U/Es0/Mmd7rqXAt6IOaSyRtGa3tafRVusH67he1NHko6FEsl6r028oWSWWapxkgkbfaWVGO20XMivj4qmnOZSeYWBDyRFRpyBZwLNThK5WbclUhQzU5wLEcsU+BV3UGmE7nydIax9/WagplFlqWqZcfVsrPFy//4vR78To2P/9sL/L9PD5jPSRK87zVdfOB13Td06QOE+JVAcF25OJlYtQHSs30hDs0ZP1MkY3z08nSSog6bGz1sb/Kwo8WHIklmavfkcLSsXZHHrimoioTNYnwFbGvy0FHjIpUvomOUO1xW454jkzfGIU8OR+mfSeGwLH0vIktwaXLxDvh0rkTQpfFsX8i8052MZ2kN2MnmSzitKt31bqLpfMWoXzSd50BHgL3tRqlClWVe1R2kfzpJfBmDs5UQShnBwO42P8/2hYhnCrhtaoXa6Wy/wyzzg7uBmSS9nQHc1sU/o0y+xPGhCB77lW0yRcNm/MxYjHMTCZ44P121xj6XfFE3x3Tnsr/dz9ZGD5oi8cqu4Jps5ldCX7n3Zpbuehf7lvGu2N7kwW6ROT4Yxue4UobYVO+mp9OPx7b075ZFlkxDuZXw/EiUvukkJ4ciZvbIVmX88ypaIRiLZmj12znQ4edAx9q8O/a3+/mHd/Xidxolyz+/e6u5rzq3lX/4g17+5PWbbviAAkRQIRBcV1aawp7LrhYvT/fNmF86RR1T4VKVJI4NRvA7NX5+cQbNInNuIkGNU0ORJNqDTkYjadr8DsLJHLqu0x6wc2Eizkg4ic9uXNBdVoVwKsfWRg9T88btEtml70g31rqqyo7Pcm4iTovfseDxUgl8To180ZDZ1vXKi/iFyQTP9YdIZvP0dgawqjJnxmI0eKwrSocvR990ip5OPyfLGYRoJk86V6yQhV7OnTVf1DncF8LnXLqJ0mu30F3rprvexdZGzwLxJEmCyRWUbzx2C3bLla/xbeXS1JmxGKFUftFR1/VgOpEzFWVf2R3kwkSCowNGsLC9ycNtXTXcUu+q6Ffom04yEjFGpG8pq0dqqozbpvJsX7hCUbK7zsWWRjc9nYZoXHediz1tPqYTK/+biaTy7Gzxmj8rskRHFUn12UO0rCG6GAmnGQqnOdIfXlMWxKrKfOntu03VVTA+k3/8w1v5y9/YzX984JUc6gousYcbC1H+EAiuI111Lno6AwRdGt8/Nb7s9h0BB+fG4+jldHFPR4CJWJpSUcelKbw4FuUVXTWcL/tZRFNGmtplVY07f1mixunj2b6QcTErGDbtBzr8vDASYzph6Cik8yW2uawVaV2fw0J3natqD8VcAk5tyecBXhiN0ei9ooIJRr/G5gY3FyYTNHpt7G/3Mx5N47GrNPuMMUGLIjMRz1IolmircWJVZWKZPGNjV6/BEHBqpLKG/8eJoQib6t2cHo1xaEMNxwbDxLNFLk8lljXS8josi6pezhJN55fsHahzWxeVb5/LmbEY3XUuxqNp4tmFLqwrKVVdDePRDFZVYiScJpHJI2GU4WwWhScvzaDrxhSM127BY7cQSeXY7rVT1HXsmsJtXTUkMgWzoTNXLJmTMF67ZdXeInNpCzio91g5Ox5jV4uXk8NR9rb5qpZOYpkCAadGKJmjM+jEbpFNi/rVsJRb7WK87zVdtAYWBtkWRebNu5tXvb/rjQgqBILrSMCp8Yk3buXebx5d0fa6BO1BJ+fKM/qH+41SyNN9M+xr8yHLMqlskXzRmN4YCqVxaArnMnnsFqXC5GtgJklPR4ATQyGO9IfZ2+bj2GCErY0ezozFSGYL5WAjys4WLy+OxZetZStlQa/lSOeKuK0q7QE7A6E0mxtceOwaDk1BU2X6p5OGSJXXRipb5MWxOM0+Oy1+Ox0Bh1nu0DF0EyDO/g4/2XyRXEEnnS+QzpVIZvMgScvesW9tdDNedo1t8hkeGiORNHvbfPzs4jSaKrO/3U88k6dY0rm4RGYkkspTLJWwWwxBr/wqHEdnqXWtLKgAI4Ozqd6NImNO6cwSXWGfw1oZiaRpLY+Odta6iKRyXJpK0hE05MZbAw5qnBaKJSjqOgGndUH/gSpLNPpseOwqL4zE2Nbk5uJkck0TGRZFYnuzl3SuyNnxuKnzcmokyu231PKT81NVXzedyJqBYt90ErdVxW1TV9R0OpfVZio21Dp596s3rOo1NzoiqBAIrjMf/ZdTS97VztLTYYxS2jWlQpI4Uyii66Aj0TdlTG60BxxkCkUCDguKIpMtlpiIZfHaVfwOw4tjc4MxdbGh1s3gTNKs17ptannSQeFIfxiLIvFs35WgYyn2t/tX3LQ2GTccObc3ecgWSlVHDMfnCBKNRNKMRNIL9A22NrrRVJnRSHqBxsd86ea5WBSJrU0e0Knoa+muN1LtkmTcOZf0coNlJE0mX6Sr3l11xHMWt1UhlStW6I9IgKpItNc4zcbTpVitFbfPYeHIvAmPGqdmOrC+lAyF0mxr8nB6NMa+dh8dQSdDoRQNXhuaInN00BAfm2WuJDcYd/exdIGuWiMLdno0zuYGN9IqLNDqPVbaa5xcmIhzvMrvaEmHn5yfYluTm3Ayv0Doan6CIZ4trMmFdbER2mpIEnzunp0LrNxvdkRQIRBcZzY3uHl+mWbNvW0+DpezBPFMwTSmGgob5YHuOhcOTaElYDcv/Ps7/AyHjFJGe40Dr91CJJXH57By64Yanr48g89hoVgs0ex3kC1/8WcLJbrqXOYX6uyd9mKumbNsa/Ksugs+mSvy4nicAx1+Elmb6e+xGoolHb2kM10leKj32BYEFZvq3bjtKufGYgv0JcC4q/XZVIJuK+PRDJJkpPB1IJTKL3s3Gs8W8c3rkdAxPseVGE95bCqnVtG867GrJLMF7JZKe++Ntc4l1T7Xk9OjMTqDTo4ORNjX7jc1N6rR7LMtyGYZWYoraz47Hqer1onPYVlyqmRD0InLpvL8cHRFmZ3To3EsirSkrfwsxcUMeTDO0TsPddDotfP05RmevjTDdCLLYCjF1kYPDV4b972mi1a/nZ+cn+JzPzi3QAr8nQc72N+x0IjuZkcEFQLBdebtB1p59PjIkmny4rxbqaFQmn3tPobChmfHhckEAadGrmB4U9S6rYxF0tR7bJwcNqzaQ8lcecrCYfom1LutZAslLkwmeHV3kJ0tXqyKxIkq/gVjSzQO1ji1RZUll6NY0k2djm1NHiyyzPMjkUX7FvLzLurzZa/nYi+LX52bMBQ/FUla9u49nSuyo8lrajv0dPiZSuTMqQNZYlFfDjDEpsYXCY5KS1yoZnHZ1AqZ8OVoCzhMr4wmr406jw2rKps+F9eKgENj2pZd0pzLokgLfD7UsrV5bt7v/8WpJI1eG6pLqtqcqcgSuWJp2YB8PvmizrGBMM1+OyOLmK8Z2y0MHuvcVt71yk5+s6fNbKz8rd42dF3n0lSCy1NJ2gMONjVemYp52/5WejoCvOPvn2UkkkaRJe7Z28yH7ty0quO+WRBBhUBwndnXHuD+13bzF4+dr/q8TZWrmkGdGomxsdZpZhjGoxlGo2n2l/UDeueoRJ4di5t3rYosgWTcsQddminHPavz0Nu5cCzOpspLlmg6gs5l7/xWwqzyY73HSmfQyYtjMaLpygtsMreyC25XrdNcv9uqUCyBd5mpDDC68fOlKxeUi5NJOoIOcj4bI5EMI5E02XyR3a0+dF3nzFjMDAjr3VbsmkJokbvrRq+dkWVk2EcjGfa0+Rak8S2yRHvQUWllDxUjvqPRzFV5WKwVWTLKO3pJX1JoK1/U2dLi4cJkwhTY2Nni4dm+6r87Y9EM25rcVYOKfXOyd6tFB7w2CyMs/jttVa6UJTpqHLzn1Rt5697mquUKSZLoqnPTVeeuuq+OoJNH33uIn56forezxlSHfTkiggqB4Aagp7N6GnRni5dktlB1ZHLWdwGocLo80h9GkSXji7tMZ/BKKjyRyRNK5gglc8QyNvIlHX3OHfSJoeiCvoVMobSgFj6L32Hh+TlCTutBR42TZy6HsFlkDnT4GZxJmWWMaHplzYdz+xLi2SI2S5G0tnz5oTPorLigh1I5mot2JuNZbt0QMLMqs/LoHrvKjloXiWyBqXiWiZnFMwTzM06LUW20scFnYyScqfACsaoSmRWUVF5KNtQ6kWDZ0pfXbqHZZzP6TeaUaZZL3pwejbOn1YcsSaiyhGaRmYxlrmoyBMBqWbpvJVso0lHj4AN3dPOmXc1X5esBhiPqr+9vvap93AyIoEIguAE40BGgyWsz7zJtqkyTz77i1G7QZTWDCoBmn31Rh9MzY3HaAw4GQim8dgtj0QyWOaI62UKJUpWLX7PfviCo2NzgptZt5ZnLMwu2XytWVebE0BVfiSP9YWTJ6CsJp/IMh5cXc6pxasiybE6ygOGouRKL6/mXjiafDbdNZXuTl2cuhxYEXLF0gWODEfa2+Za1vVZXOeJpt8hsqDUkwMOpHOl8kVAyZ9qbA+suwb0aejsDDIaSFaPBi9EZdHBiXg/LgQ7/irINRV0nms5X/I5fLdoSQlItfju/e6iDt+5pvikEp24kRFAhENwAyLLEW/Y289CPLwFGZiDotq7oS7TGqfHiWOWX9WAoVVH+mH+TFXBqDIRSpgfD3BHJjbVO0vkiu1q8JHNFc1rh0lRiQR06nslzdjzOvjYfI9EMDk3Bpipcnk5UdPyvFEky+iAS87IRJZ2yE6ufBo/RL9IfSrO7xYemyhRKJXKFEqlckaKuU+e2kiuUzP6Jns4AJ8uy3ssRdBkjqh01DgJOjRNDEUYjGXo7AygSDEwn6ahxLFC8HAmnF/hhLFzfyoIKu6aysdZJ33RygRlYOJW/6rv09WBro+Fk67Kqpg7EUqSr/D6sdMLDZlFW3TuxHNWybk1eG+97bTe/tq9l1RM4AgMRVAgENwhv2dNiBhUAh/tC7G71Lri7m0+D11bVhfJIf8hM18//Ap1tOrQoMtua3JweNS6+douC36kxFkkTSeWNkUuMoKQz6ESVJAIODZtFJl/UzRKALEsVzYlzLzLVOvgPdPh5cTSGJIEkSyiSxJZGD09dmiGSytNeY2dgprLebVVl0xlTluDQxhqODoQqAoWAUyOdzZvS1JsbXIzHsjzXH8Jrt7C71U0qV8ChqYzH0hXvIUuG5Pmp0Shuq0r/TKoicLAoMooiM5PMEZS0BeOqE/FsRSBXnZWVPy5PJaoast0o1HusjERS6BjjlyeHoxzo8HN8MMxiwzGxdB6XVSGRvVL6eGE0umwgBguzR1eDVZV5ZXctw+GUmR2sc1t532u7ePuB1pfdiOe1RgQVAsENQledi12tPlMmGuD8eHxRG3FgyYvY1kYPz1wOmVmJucw2O0ropjDUpno3sUye5+ako48OhHlVd5CirnNpKkkyW0CWJLx2C36HxbwgzLd8TmYL3NZVw2AoVXXU8+x4nFyxZHb8u6xKxboDTuuCoGJnyxUjqZIOT12a4eCGAKoic3k6yVQ8SyiZo85tZYPbikWRscgSBRfcUu8mnMxxuD/EvrYrWhp1bittNQ4kjAbJ9hoHT12qXsqJpHPkCiWcmoLHbqHObcWmKTg0hWS2wGAozenRKJ4lpjdGwxnsFqVCw2IubQEHDR4bx4eufyZiMTRVxqmpC0Y4j/SH2dniXZBRsGsKbX47l6YSCwKOVK5Ircu6QAp+PuthAqbIEu96ZSfve02XObkxHk2TyZdoKKuACq4eEVQIBDcQb9zZWHFxTeVL1AAOTVmgCtkZdHBskTT49mYP6VyRzQ0uzo4vrPPnizoWWcJmURgOpxcEJ1K5h2E8muWJee6fO5q9nBqJMjgnljk5FGFro9uUNg44rfz84pWL8/wRzHimUKEVsK3JW/H+c+vdDV4bNU5LhZqnVZXY0eLj6cshJIzyxlh5pLXZb+f4YAS3TWVTg7tCbMpjVysCoMl41szibKx1LhpQAMhIdNe5iGXynJ9IoOtGqeTYQJgal2a6di5lVz5cVumc1RKRgF2tPiyKxMBMisFQatFemBuFHc3eRSd95mekJCj7p8gUSsbPzrLr6yx2bWGZQVMkvHYNp9UI4E4MR67qmHe1+vjsW3aYmbdZGrwLDdkEV4cIKgSCGwhrlTruUNjoHZj7xWr0EejkqzRUum0qY5GMOe2xvclDplBaoORY77UxFc/R7LObF3RJgj2tPibjWY4ORObvGgCbRaa73kXAYXh8jJQv5jVOjQPtfko6Cxoia1zaAl2HWMa4ADksstlMOUtmzp2pz24xyzMHOvzkiiWmYlkzo6LIxp3spgY3E7EMxwcj7GzxkpiXdQFIZ4uLNnpalmnIe34kiiJBrduQ8Z6drpnVwbCW73SP9IcXNHPO5dhgxAyodIxSx2p0Ka4nmxvcS44Oh5I5esuTTIlsgVKphNNqQVOMKZ5jA2H8To1bGqxmYNUZdOG0qqRzRZLZIrFMnmyhxFQiy9Ty4qOAkYW4dUMAq6pwbjzOWDRNSTcyUe+9fSO/c7Djqqc3BCtDBBUCwQ2Epipsb/aYYkaznBiO0DOnU35Pq2/RsseeVkMUazaomPWD2NnsRSuLIg2GU3TXuXjm8gw1LqthSa0pjMcyS0pxbwg6uDyVYGOdm2f7QvR2Bhgul2a8dpUXx+LsbvURy+To6fCjY4xRFqrUzC9MJOgMOvHY1QXKloU5wkNzRw4dFoVcsVShvLmn7UpmIODU2NzgxmOzVHWA3buEjPjZ8Tj72/3oupHtiGXyHO0PE88WqHFqhhlWc2VDos9h4dm+EF11Ln5+YZp9bT6ODkY43BfiQIefM6OxCpXLWWbKQZcE62Lbfq0oVBGEmksiW1jw+To1ha1NHo70h3lld5Dn+sMUdZ0mn43RSIZktrBAEGs13L2zkf/65u2mbTgYQWY8kyfg1FbcHCtYH0RQIRDcQHjLpkrNPjvNPjtnRqNmqvjiZAKLImFRZF4cX9iYCbCvzW+WK3a1eImm82az4fNzZJCdmsLzQxHS+RLD4bQZGMyiKRJ72vxMxrNmUyeALEmk8yWzTyJXKJl9FaVyOeCU+T4SR/pDtAUcTMYMz45z4/EKnQm3VeXiRIKeTj9T8RwDM0luqXdXZBPOTcTZ2+YjXyzx1OUZ8kW9olwzR6eKUDJHOJmjrttQCp3NIkRSeTqDzmWnJp4bCPNnv7yFP3yVYfJULOm8OBbjz/71FF11rgop6VqXlXTecAadzQLNHT880h8m6NJQZGlBJiKTN372l50xbwZW4v1SjWSuaE5+ZAsl0vkiO/xeM5OznJ38UrzzYDufeOM25HlZCE2VqXFZ17xfwdoRQYVAcAOxtdGLRZFM8yy7ReFAh5/JWJZsoYilILOj2Vv1brvObeXcnGBj9o56d6uXcDJf0ayZzBWr3kGDkeKOZfI82xdiZ7OXGqfGTDKH3SITSuVp8NgYKl/0jw9F6OkIMBJJM5MwZMA31bvwOiym0JMiQ7agmxeRuWqRRV2nI+jgcJ+hABpJ5aqqh16eNppEZ6cEsoUrx35sMEyzz26WYWatyxVZMgzTgk5OjUTx2i3Lik+9oquGP7it0/xZkQ3Xy1Ayx1AojSpLbGpwI2GUeLKFIrd1Bw0jKX2hDPd0wtCUKJZ0JMnQ3TgzFiNXgIMbAuXyRxKLIqOpshk0WhQZTZGxqPN+ViR0DPXUi5MJZpI5PDaV27qD3FJvGKtZZBlVMYSiVEUu/9eQwi7pOj86O8n/Pj2+qpHfFr+ds2PVA9mVMBJOcUu9i8N9Ifa3G1MiQZfGdMI43111rhUZrc3lQ3du4r23bxSZiBsMEVQIBDcQbTUO3v/abr5YluxO54tmat9tValxapwerT5iOntxns/sSOqeVh8zyeyiZk9z09SzPD8SZXuT4WbaXe/mcF+IjbVObBbZbMqcSWbprHEwU/YWOTeRYEPQyWAohVNTmIplKwYpNUU2HVeHw2kkdGM8M5ZhV4uvqj31bAOgRZHY1+bnmTlBlc7siGMaGaMpdDYzcKQ/TFvAzp42X4WcdTV8Dgt/8eu7F9z1lko6E2Vxp0JJ59x4HJsqs7PVR7GkUyrpi/ZP/Oldm3nd5jqKulECkiUJj13F59BwaspVXRCzhSL/fGSI/e2BBQ2IS/Hm3c3EM3n+44VxHv7xxQV6G/OxawoSRtPwWgmn8kTTefa2+czM1oagk0avjVMjMTy2lV+KFFniM2/ZztsPtK35eAQvHZKur8Dh5heUWCyG1+slGo3i8az8j1YguBpyhRK3/T8/WqAtsaXRzXAoRTxbPcOgqTLdda6qmhWzSBLsbvUxHc9WjKnubPYyGk1X9VjY1WL0Ypwbj9Nd5+JoOctwW1eQeCbPqZEoJd3YbjKeZSyaoTNoCDd117u4MJGg0Wuj2Wd02l+YjOOza7hthkrkSNnrIpTI0eCxMhROV/Wv2NHsYTKWxWO3MBHPEJvjCTKrGbGv3cdMIlf1Qrm9yUMiW1j0Ivrf37mf122pX/B4qaRzejTGdCLL6dEoX/jhefa0ejk+pw9EkaCa1MKj7z3EnraFXio3Cpl8ka/+9DIP/+RihW23y6rS5LPhsVlI5YoLGmmvhvlNxystq7QG7Pz6vlbu2ddi/i4Jrg2ruRaKTIVAcINhUST+8+s38eH/+bz52K4WL6dHo4sKC4ERjFycTCwQZZqLrsPxwQiSZOhYzIpYze23mM/J4Sgbg04CTo2hcNpsJE3lDNEjRZZA11FlmYlYhh3NHpxWFb/DQiJboKczwKmRKE0+O0cHwuxo9nBqJMb+dj92TaXFZ0dTDBOvZ/vD7GrxVg0qrKrCRDzLRDzL/g6joTKVK9A/naSz1kkyWyCTLxFwahWBgwRsanBhUWVckkpvZ4BLU4mKAOq+12ysGlCAIey1o8ULGKOrX/3pZSzzBJK8do1QamFAtqHWtejneiNgsyh84I5u7t7ZyLv+xxG8dgvD5Sbf5STH10oiWzl2ulRAYbPI/PL2Rn59fyu9nYEFWSTBjYcIKgSCGwxJkvi1fS0cGwzzyJEhs8diJfo/2UKJJp990aBiFl1nxXefXrsFu6Ywk8ySzhVNA6t8UWdfm59iqYTbrhJK5mksBwiyJBFL5+mbTrK50YPfYWFg5oqK555WH9lCkf7pJA5NYbjvStYkkspX1NjtmkI6VySVK9LTGWAyliGVLXJ2PIbPYWFvuzFl4barXJ5K4LSq7Gz2Ek7naPIaoktztTrcVpWtTR666oyA6bWb6viTX1rehvqFkSif/l9niGcLTM6xgbcoEpH0woCi1m3Fa1/eFfVGoKvOxf/4/R4+9q8vrGtWohqLObjOZXerj7cfaOXunY14bDfHZygwEEGFQHADIssSn33rDrwOC8fLI4orZTiyvvLOuq5TKOlMJ3LsavGZExQvjkXp7axhMp7HalEoFEs0eGxkC0XCqTxuu0pRN4KIbKGIw6Kyv8NPOJmj1e8weyfmT0YMhFLsafUBhvvqRCzDK7uC/OxipQjXxloje/JkWWTLbVNp8tm5NJU0sxDV7Nrj5bHHjhoHt99Sy1+8bdeK7oCtqmwea/9Mim1NHk6Pxqh1W2n22Ymk81yYc3e/sda5ko/3hqG9xsln3rqDj//baZ44P7miIHa1qLK06LSL26Zyz94WfqOnlc0Notx8syJ6KpZA9FQIrjdj0TR3/9XPVzV2KElGt361C+pa6KhxEHRZKZV0VEWiUNLpm07itKrEMwXaAg5Ojxp9FXPZ3OCizm1MivTPpNjdemXqQ8LQjFhMSMmpKbhsKqUSpoTzXKXKrjonbX4HkVSeY2u0XX/t5joefsfeVckzZwtFvvTYBf7l2BA+h7agROCxqWyscyEjsafNx5//ytY1Hdv1ZCya5lP/fob/eGG84nFZgru2NzKVyK4qyJ3LXNv2uWyodfLNP+ilSfRK3JCs5lp4VTZsDz74IJIk8cd//McAhEIh3v/+97Np0ybsdjttbW3cf//9RKOV9VpJkhb8e+SRRyq2+clPfsLevXuxWq10dXXxjW98Y8H7P/TQQ3R0dGCz2ejt7eXw4cMVz2cyGe677z5qampwuVzcc889TExMXM2SBYJrSsCp8fYDrVhWYZmt61BXVn1cD2rdVp4bCJMuFDncH8aqKmUL8jTRtNGouavVV2H6pMrg0FSODUbom06h68ZdqnmMGEqS6iIZgmSuSFuNo8IT4sxoDLdNpTVgx2c3xhGPDUU40OHHZV2db8MbtjXwN7+9b9V+D1ZV4U/v2swzH30df/Wbe/jjO7oJzBFdimUKHB+MoKkyv7S1eo/GjU6j1877XtvFrnIfCcDtm2p54sOv4aF37OWbf9DLr+9rqXhNs8/Ox35lK0986DWc/fQb+MxbdtDkXfg7OPezmss7D3aIgOJlwprLH0eOHOGrX/0qO3fuNB8bHR1ldHSUL3zhC2zdupWBgQHuvfdeRkdH+c53vlPx+q9//eu84Q1vMH/2+Xzm//f19XH33Xdz77338g//8A88/vjjvOtd76KxsZE777wTgH/+53/mgQce4G/+5m/o7e3ly1/+MnfeeSfnzp2jrq4OgA9+8IN873vf49vf/jZer5f3ve99vPWtb+XJJ59c67IFgmuKVVX4yBs288T5qSWnOuaTXcSwai0USzrtASMrsK3Jw6mRCM0+O7UuK5pF5uJEguODEfZ3+CmVdCyKjI5OLF2gyWcz7+YljLvd/R0BQoksF6eS7Gr1LlDTBKMx9fJk5R1tMlfktq4gz/bNUOe2mpoQs9mL7jqXKZ29FG/e3cRf/PquCqGq1SLLMpsbPGxu8PCbPW1846l+wskckVQeRZb4/ds62NceWPP+rzfbmry86pZaRiMZfnlHAx/7la3m56WpMp/7tZ3cvbMRq6pQ67bSUeOo+Dx/q7eNe/Y1889HhvjKjy4yGc+iyNKiWhSv2VR3TdYleOlZU/kjkUiwd+9eHn74Yf7rf/2v7N69my9/+ctVt/32t7/Nb//2b5NMJlFVI4aRJIlHH32UX/3VX636mo985CN873vf44UXXjAf+43f+A0ikQg/+MEPAOjt7eXAgQN85StfAaBUKtHa2sr73/9+/vRP/5RoNEptbS3/+I//yK/92q8BcPbsWbZs2cLTTz/Nrbfeuuw6RflDcKPwB984wuNnJ1e8fUeNY1n9gZVyW3eQpy5OU9KNiZEzYzF6OvyAxOH+EJoqs6vFiyxJFaJcQZdGo9duKmx6bSqbGjwc7g/hdxh+EHUeK4OhFBuCTiyKgiQZZmOzzYL72/2maJRTU7BaZPpnUgzMpOjtDFDSDfv1fNEQl9rRvNAlcy5v29/CZ9+6U/hArIBcocTRwRAHNwSvaj+ZfJFvPjPAj89Nmv0vc9lY6+TxP7n9qt5D8NLykpc/7rvvPu6++27uuOOOZbedPYjZgGLuPoLBID09PXzta19jbmzz9NNPL9j3nXfeydNPPw1ALpfj6NGjFdvIsswdd9xhbnP06FHy+XzFNps3b6atrc3cZj7ZbJZYLFbxTyC4EXj7gVZ6OlZ252tVZXa1+thY68ShKXhs6prn+u0WmcN9IbNfYlY++9RIzLTvnrWlnq/yuaHWNUeyGzY3GgEFGGJIVovChYk4nUEXx4eiHO4P8WxfqGL6QJEljvSHOTUSJZLOc2kqycBMip1lVdGzY3FKOuxr99Pss3NpMsHWRnfVtbznVRt4UAQUK0ZT5asOKMAYW33XKzfwN7+9jz+4rXPB5/+ru5uv+j0ENw6rLn888sgjHDt2jCNHjiy77fT0NJ/+9Kd597vfXfH4pz71KV772tficDj44Q9/yHvf+14SiQT3338/AOPj49TXV9Yj6+vricVipNNpwuEwxWKx6jZnz54196FpWkVZZXab8fHKBqRZPvvZz/Jf/st/WXZdAsG15vXbGtjT5ufA//1/Ft3Gqsq881AH9756o1m71nWdbKGELEl867khvvx/zlcVuFqMLY0eLk4mzMDBrinEMgXS+aIZMOxs9la3+tZ1PDZD3XK+tTrAYCjFK7uDTMYybG10o8oysixhVWXS+SL9M0mGwymzuc9jt5g+JLliiWafDbdNJZLKVzR8np+Is6fVx/E5DZx/fvcW3vXKDStet2D9cdssfOxXtvJr+1r4/P8+R990kt7OgDgvLzNWFVQMDQ3xgQ98gMceewybbelGsFgsxt13383WrVv55Cc/WfHcxz72MfP/9+zZQzKZ5POf/7wZVFwvPvrRj/LAAw+YP8diMVpbW6/jEQkEVxhdZFTUblH49f0t3PeaLuo9lX+XkiSZzYi/fWs7d25r4KEfX+T4YJgzYzHTS2MxMvkSsUyBgEOj3mtlIrZQ/6Kol5AxzLE0VWKsLGl9uD9s9FAs4Qz6s7L52dZGQ+3y8nRlH0V3nRtFlrg0lTSdP4/0h1FkGIksFMgCKJQMT5IDHX5ODEX4wq/v4s3ibviGYUujh6/9pwPX+zAELxGrCiqOHj3K5OQke/fuNR8rFos88cQTfOUrXyGbzaIoCvF4nDe84Q243W4effRRLJalxUt6e3v59Kc/TTabxWq10tDQsGBKY2JiAo/Hg91uR1EUFEWpuk1DQwMADQ0N5HI5IpFIRbZi7jbzsVqtWK3C2U5wYzKbfdje7OEdve0c6Q+xq8XHW/Y2r1ggqNZt5ZNv2gYYte4Xx2KcGIpwYijCzy5MLxhdTeUMXYZQKldVMXJni9HDsK/Nx0g0g92iEHDo5rYl3XD+3Nfuo286teho7GzJY2+bj5Fwmol4FlWGc+NxPHYVl1UhkTUcQWcVOZfj+eEI3/i9Hl7RdfUpfIFAsDJWFVS87nWv49SpUxWP/d7v/R6bN2/mIx/5CIqiEIvFuPPOO7FarXz3u99dNqMBcOLECfx+v3lBP3jwIN///vcrtnnsscc4ePAgAJqmsW/fPh5//HGz2bNUKvH444/zvve9D4B9+/ZhsVh4/PHHueeeewA4d+4cg4OD5n4EgpsJr8PCv7z3EDubvaiKzG/2XJ2hks2isKfNb3pTFIolnro0w/96fpQfvDBOMlsw+yaqMeteqsqGi2i4rJTY5LPBvB7RowMR9rf7l9XbODYYwaJI9HYGKBRLHB2MkMgW2N7k4YXRGKdHY7TXOJZdm0NT+Np/OsCtG2qW3VYgEKwfqwoq3G4327dvr3jM6XRSU1PD9u3bicVivP71ryeVSvHNb36zotmxtrYWRVH493//dyYmJrj11lux2Ww89thjfOYzn+E//+f/bO7z3nvv5Stf+Qof/vCH+f3f/31+9KMf8a1vfYvvfe975jYPPPAA73znO9m/fz89PT18+ctfJplM8nu/93sAeL1e/uAP/oAHHniAQCCAx+Ph/e9/PwcPHlzR5IdAcKPhsVnY+xKaU6mKzKtuqeVVt9Ty0bu28Invnua7J0cXbNfTaTSMHu4L0arZKemGeNGp4Qi6LhFwaIxWKU2kFrFan0++qPNsX4igSzP7KV4YjdHTESCSzpnuqIvhsqp84/cOsH+Fja0CgWD9WFeZ7mPHjvHss88C0NXVVfFcX18fHR0dWCwWHnroIT74wQ+i6zpdXV188Ytf5A//8A/NbTs7O/ne977HBz/4Qf7yL/+SlpYW/v7v/97UqAB4+9vfztTUFB//+McZHx9n9+7d/OAHP6ho3vzSl76ELMvcc889ZLNZ7rzzTh5++OH1XLJA8LLE79T487u3MBBKEc/kCZU1GAAuTSaYSebo6fCTzBXRdeibShJ02XBYVUaj6QXKiXVu66o9JaYTOeKZgtl0OTs5shRum8r/+/s9N7QzqEDwckbIdC+B0KkQCAwy+SJ/8cNzfP3JPjRVMbMOBzr8DIXTzMSztNU4sFlkTo/GafbZafbbyRaKDMyk2FTvXrRZcyX0dAZWJA39P//oEPvaRUAhEKwn10ymWyAQ/GJgsyj80e1d6EhmT8PeNh+XppKMRzPYNJlc0ZgU6enw0+y38cJwhJNDUSKp/JK9GSshmS0su81rN9eJgEIguM4Il1KBQLAiXFaVercVj81CV52LY2VzMIBN9R7TvXTWyMxtU+lt8XFuIm5Kaq8VdRHvE02R+Z2D7bzzYAetAeEdIRBcb0RQIRAIVoSmyvx/7+rh7V99ZoGA1rHBMD2dAY4OhCmW5TfjGcNi3GaRsapXlxSNpxdmKn51dxN/8vpNtAaWnwYRCATXBlH+EAgEK2ZjrZu//d39zFe6LunGNIhFluiYN/KZyZcoLCOytRyXp5PsaDZqufvb/fyv99/Gl39jjwgoBIIbDBFUCASCVbG3zc93/ugQUpWKRKZQIl/UcWiVluKWq3AENfedL3H/a7t45N23sr3Zu/wLBALBNUcEFQKBYNXsbfMvalc9Ekmzqd5l/ryx1mn2W6wVl1XlT+/azAOv33RVluUCgeClRfx1CgSCNfG2/Yv74hwfirK5wcWGWifyVbqCtgUc/Ot9h3jdlvrlNxYIBNcV0agpEAjWRKN3aQn+s+OJq34Pr93C//j9HjqDzqvel0AgeOkRmQqBQLAmdrZ4+fvf3c+Gl+iCr8gSD/3WXhFQCAQ3ESJTIRAI1oQkSdyxtZ5Xb6rlX44N84MXxvnxual12//vv6KD27qFw6hAcDMhMhUCgeCqsCgybz/Qxt/97n7eebB9XfZZ67Zy/+u612VfAoHg2iGCCoFAsC6oiswn37SND9256ar39X/98mbcNss6HJVAILiWiKBCIBCsG5IkcfeORpzzdCpWw4EOP7+6u3kdj0ogEFwrRFAhEAjWlY6gk39+z0GCLm1Nr//EG7chVVPWEggENzwiqBAIBOvO9mYv37n3EG2rlNHe0ugRapkCwU2MCCoEAsFLQkfQyXf+6CC3b6pd8Wt+aasQuBIIbmZEUCEQCF4y6tw2Hn7HXgLOpUshWtnF9E27mq7FYQkEgpcIEVQIBIKXFIem8le/sWfJbf7pD3v59K9up6vOteR2AoHgxkYEFQKB4CVnT5uPHYv0Sty+qZZ97QF+59b10bgQCATXDxFUCASClxynVeV//tEh3vPqDQuee99ruq7DEQkEgpcCEVQIBIJrgqbKfOj1m/jYr2w1Hzu0sYb9HYHreFQCgWA9EUGFQCC4ZqiKzO+/ooNbNwRwW1X+n3t2Xu9DEggE64gwFBMIBNcUSZL469/cy2AoResqdSwEAsGNjQgqBALBNafWbaXWbb3ehyEQCNYZUf4QCAQCgUCwLoigQiAQCAQCwbogggqBQCAQCATrgggqBAKBQCAQrAsiqBAIBAKBQLAuiKBCIBAIBALBuiCCCoFAIBAIBOuCCCoEAoFAIBCsCyKoEAgEAoFAsC6IoEIgEAgEAsG6IIIKgUAgEAgE64IIKgQCgUAgEKwLIqgQCAQCgUCwLoigQiAQCAQCwbogrM+XQNd1AGKx2HU+EoFAIBAIrg+z18DZa+JSiKBiCeLxOACtra3X+UgEAoFAILi+xONxvF7vkttI+kpCj19QSqUSo6OjuN1uJEm63oezKLFYjNbWVoaGhvB4PNf7cK4JYs1izS9XxJrFmm80dF0nHo/T1NSELC/dNSEyFUsgyzItLS3X+zBWjMfjueF/OdcbseZfDMSafzEQa75xWS5DMYto1BQIBAKBQLAuiKBCIBAIBALBuiCCipcBVquVT3ziE1it1ut9KNcMseZfDMSafzEQa375IBo1BQKBQCAQrAsiUyEQCAQCgWBdEEGFQCAQCASCdUEEFQKBQCAQCNYFEVQIBAKBQCBYF0RQcR148MEHkSSJP/7jPzYf+9u//Vtuv/12PB4PkiQRiUQWvK6jowNJkir+PfjggxXbPP/887zyla/EZrPR2trK5z73uQX7+fa3v83mzZux2Wzs2LGD73//+xXP67rOxz/+cRobG7Hb7dxxxx1cuHBhXdccCoV4//vfz6ZNm7Db7bS1tXH//fcTjUYrXjc4OMjdd9+Nw+Ggrq6OD33oQxQKhYptfvKTn7B3716sVitdXV184xvfWPD+Dz30EB0dHdhsNnp7ezl8+HDF85lMhvvuu4+amhpcLhf33HMPExMT12XN88+xJEk88sgjN+WaAd7znvewceNG7HY7tbW1vPnNb+bs2bMVr7tZz/Na1/tyO8ez6LrOXXfdhSRJ/Ou//mvFczfrOb6aNd/M53nN6IJryuHDh/WOjg59586d+gc+8AHz8S996Uv6Zz/7Wf2zn/2sDujhcHjBa9vb2/VPfepT+tjYmPkvkUiYz0ejUb2+vl5/xzveob/wwgv6P/3TP+l2u13/6le/am7z5JNP6oqi6J/73Of0M2fO6H/+53+uWywW/dSpU+Y2Dz74oO71evV//dd/1U+ePKm/6U1v0js7O/V0Or1uaz516pT+1re+Vf/ud7+rX7x4UX/88cf17u5u/Z577jFfVygU9O3bt+t33HGHfvz4cf373/++HgwG9Y9+9KPmNpcvX9YdDof+wAMP6GfOnNH/+q//WlcURf/BD35gbvPII4/omqbpX/va1/TTp0/rf/iHf6j7fD59YmLC3Obee+/VW1tb9ccff1x/7rnn9FtvvVU/dOjQmtZ7NWvWdV0H9K9//esV53nuZ38zrVnXdf2rX/2q/tOf/lTv6+vTjx49qr/xjW/UW1tb9UKhoOv6zXue17peXX/5neNZvvjFL+p33XWXDuiPPvqo+fjNeo6vZs26fvOe56tBBBXXkHg8rnd3d+uPPfaY/upXv7rqL+iPf/zjJYOKL33pS4vu/+GHH9b9fr+ezWbNxz7ykY/omzZtMn9+29vept99990Vr+vt7dXf85736Lqu66VSSW9oaNA///nPm89HIhHdarXq//RP/7TClV5hJWue5Vvf+pauaZqez+d1Xdf173//+7osy/r4+Li5zX/7b/9N93g85ho//OEP69u2bavYz9vf/nb9zjvvNH/u6enR77vvPvPnYrGoNzU16Z/97GfN9VksFv3b3/62uc2LL76oA/rTTz99Tdes63rVL6e53OxrPnnypA7oFy9e1HX95jzPV7NeXX95nuPjx4/rzc3N+tjY2IL13Yzn+GrXrOs353m+WkT54xpy3333cffdd3PHHXeseR8PPvggNTU17Nmzh89//vMV6cOnn36aV73qVWiaZj525513cu7cOcLhsLnN/Pe/8847efrppwHo6+tjfHy8Yhuv10tvb6+5zWpYzZqj0SgejwdVVc1j3bFjB/X19RXHGovFOH369IrWk8vlOHr0aMU2sixzxx13mNscPXqUfD5fsc3mzZtpa2u75mueu49gMEhPTw9f+9rXKiyHb+Y1J5NJvv71r9PZ2Wm6/96M5/lq1jt3Hy+Xc5xKpfit3/otHnroIRoaGhY8fzOe46td89x93Ezn+WoRhmLXiEceeYRjx45x5MiRNe/j/vvvZ+/evQQCAZ566ik++tGPMjY2xhe/+EUAxsfH6ezsrHjN7B/x+Pg4fr+f8fHxij/s2W3Gx8fN7ea+rto2K2U1a56enubTn/407373u83HFjvWuce52DaxWIx0Ok04HKZYLFbdZrbOPT4+jqZp+Hy+Bdtc6zUDfOpTn+K1r30tDoeDH/7wh7z3ve8lkUhw//3337Rrfvjhh/nwhz9MMplk06ZNPPbYY2bwe7Od56tdL7z8zvEHP/hBDh06xJvf/Oaqz99s5xiufs1w853n9UAEFdeAoaEhPvCBD/DYY49hs9nWvJ8HHnjA/P+dO3eiaRrvec97+OxnP3vDSb2uZs2xWIy7776brVu38slPfvLaHOBLwHqt+WMf+5j5/3v27CGZTPL5z3/e/CK6kVjpmt/xjnfwS7/0S4yNjfGFL3yBt73tbTz55JNX9fdwPViv9b6czvF3v/tdfvSjH3H8+PHrcHQvDeu15pvpPK8XovxxDTh69CiTk5Ps3bsXVVVRVZWf/vSn/NVf/RWqqlIsFte0397eXgqFAv39/QA0NDQs6Pid/Xk2PbfYNnOfn/u6atushJWuOR6P84Y3vAG3282jjz6KxWIx93E16/F4PNjtdoLBIIqiLLvmXC63YOLmeqy5Gr29vQwPD5PNZm/aNXu9Xrq7u3nVq17Fd77zHc6ePcujjz665Hpmn7uR1rwe663GzXyOH3vsMS5duoTP5zOfB7jnnnu4/fbbl1zP7HMvxzVX40Y+z+uFCCquAa973es4deoUJ06cMP/t37+fd7zjHZw4cQJFUda03xMnTiDLMnV1dQAcPHiQJ554gnw+b27z2GOPsWnTJvx+v7nN448/XrGfxx57jIMHDwLQ2dlJQ0NDxTaxWIxnn33W3Ga91hyLxXj961+Ppml897vfXXBHcPDgQU6dOsXk5GTFsXo8HrZu3bqi9Wiaxr59+yq2KZVKPP744+Y2+/btw2KxVGxz7tw5BgcHr/maq3HixAn8fr+ZjbrZ1jwf3WgQN79Yb6bzvB7rrcbNfI7/7M/+jOeff77ieYAvfelLfP3rXzfXc7Oc4/VaczVu5PO8blzz1lCBruv6gk7isbEx/fjx4/rf/d3f6YD+xBNP6MePH9dnZmZ0Xdf1p556Sv/Sl76knzhxQr906ZL+zW9+U6+trdV/93d/19xHJBLR6+vr9d/5nd/RX3jhBf2RRx7RHQ7HgpFSVVX1L3zhC/qLL76of+ITn6g6Uurz+fR/+7d/059//nn9zW9+81WNlFZbczQa1Xt7e/UdO3boFy9erBi5mj9q+PrXv14/ceKE/oMf/ECvra2tOob2oQ99SH/xxRf1hx56qOpIltVq1b/xjW/oZ86c0d/97nfrPp+vohP93nvv1dva2vQf/ehH+nPPPacfPHhQP3jw4FWtdy1r/u53v6v/3d/9nX7q1Cn9woUL+sMPP6w7HA794x//+E255kuXLumf+cxn9Oeee04fGBjQn3zySf2Nb3yjHggEzJG4m/08r3a9L7dzXA0WGSm9Wc/xWtb8cjjPa0EEFdeJ+b+gn/jEJ3Rgwb+vf/3ruq7r+tGjR/Xe3l7d6/XqNptN37Jli/6Zz3xGz2QyFfs9efKkftttt+lWq1Vvbm7WH3zwwQXv/a1vfUu/5ZZbdE3T9G3btunf+973Kp4vlUr6xz72Mb2+vl63Wq366173Ov3cuXPruubZ0dlq//r6+szX9Pf363fddZdut9v1YDCo/8mf/EnF+OXsvnbv3q1rmqZv2LDB/Mzm8td//dd6W1ubrmma3tPToz/zzDMVz6fTaf29732v7vf7dYfDob/lLW/Rx8bGrvma/+M//kPfvXu37nK5dKfTqe/atUv/m7/5G71YLN6Uax4ZGdHvuusuva6uTrdYLHpLS4v+W7/1W/rZs2crXnMzn+fVrvfldo6rMf8Cq+s39znW9dWv+eVwnteCsD4XCAQCgUCwLoieCoFAIBAIBOuCCCoEAoFAIBCsCyKoEAgEAoFAsC6IoEIgEAgEAsG6IIIKgUAgEAgE64IIKgQCgUAgEKwLIqgQCAQCgUCwLoigQiAQCAQCwbogggqBQCAQCATrgggqBAKBQCAQrAsiqBAIBAKBQLAuiKBCIBAIBALBuvD/Axc6XY19QA7UAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "boundaries = gpd.read_file(geo_boundaries_path)\n", + "boundaries.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 90, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "MSOA_boundaries=boundaries.dissolve(by='MSOA21CD')\n", + "MSOA_boundaries.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
geometryOBJECTIDOA21CDGlobalIDLSOA21CDLSOA21NMMSOA21NMLEP22CD1LEP22NM1LAD22CDLAD22NMrgn22cdrgn22nmctry22cdctry22nm
MSOA21CD
E02002330POLYGON ((439176.316 446904.131, 439048.115 44...55616E00058996d0e5f055-f45a-4c73-ba31-72a00babdfe1E01011702Leeds 001DLeeds 001E37000062Leeds City RegionE08000035LeedsE12000003Yorkshire and The HumberE92000001England
E02002331POLYGON ((439824.268 447781.097, 439846.716 44...55595E00058975a99aff6e-3846-46e8-a00a-493c3f470420E01011697Leeds 002ALeeds 002E37000062Leeds City RegionE08000035LeedsE12000003Yorkshire and The HumberE92000001England
E02002332POLYGON ((419465.000 445311.000, 419185.334 44...55004E00058339239f6484-5a0a-4e03-86cb-045ee4dd76bdE01011581Leeds 003ALeeds 003E37000062Leeds City RegionE08000035LeedsE12000003Yorkshire and The HumberE92000001England
E02002333POLYGON ((418604.775 444120.550, 418438.000 44...54998E00058333e1295d1f-a2f3-41d6-a7c8-937c7c36e003E01011572Leeds 004CLeeds 004E37000062Leeds City RegionE08000035LeedsE12000003Yorkshire and The HumberE92000001England
E02002334POLYGON ((444937.313 444639.906, 444928.976 44...55588E000589689df65ceb-2b55-471c-8e2d-aa803dfca3e5E01011709Leeds 005BLeeds 005E37000062Leeds City RegionE08000035LeedsE12000003Yorkshire and The HumberE92000001England
................................................
E02002437POLYGON ((427596.093 424322.312, 427618.813 42...54799E00058126b5da9cc9-e49f-4e9d-9f5b-a4d61278df1aE01011535Leeds 108ALeeds 108E37000062Leeds City RegionE08000035LeedsE12000003Yorkshire and The HumberE92000001England
E02006852POLYGON ((427455.473 436298.086, 427186.000 43...55515E00058891bd49b23f-805b-4dfa-8d58-e728f2ba239dE01011690Leeds 109CLeeds 109E37000062Leeds City RegionE08000035LeedsE12000003Yorkshire and The HumberE92000001England
E02006861POLYGON ((428682.183 435118.284, 428662.000 43...54333E0005762838dd690f-4fd2-4e5a-9abb-cae5f1745891E01011444Leeds 110CLeeds 110E37000062Leeds City RegionE08000035LeedsE12000003Yorkshire and The HumberE92000001England
E02006875POLYGON ((429164.000 432940.000, 429339.265 43...160254E00169780e25c17dd-793a-4a37-b838-1bcf74113e56E01033008Leeds 111ALeeds 111E37000062Leeds City RegionE08000035LeedsE12000003Yorkshire and The HumberE92000001England
E02006876POLYGON ((430650.424 430920.211, 430541.000 43...54471E00057776c09f4ae3-3dc7-417b-88bd-87f18eca3d64E01011470Leeds 112CLeeds 112E37000062Leeds City RegionE08000035LeedsE12000003Yorkshire and The HumberE92000001England
\n", + "

107 rows × 15 columns

\n", + "
" + ], + "text/plain": [ + " geometry OBJECTID \\\n", + "MSOA21CD \n", + "E02002330 POLYGON ((439176.316 446904.131, 439048.115 44... 55616 \n", + "E02002331 POLYGON ((439824.268 447781.097, 439846.716 44... 55595 \n", + "E02002332 POLYGON ((419465.000 445311.000, 419185.334 44... 55004 \n", + "E02002333 POLYGON ((418604.775 444120.550, 418438.000 44... 54998 \n", + "E02002334 POLYGON ((444937.313 444639.906, 444928.976 44... 55588 \n", + "... ... ... \n", + "E02002437 POLYGON ((427596.093 424322.312, 427618.813 42... 54799 \n", + "E02006852 POLYGON ((427455.473 436298.086, 427186.000 43... 55515 \n", + "E02006861 POLYGON ((428682.183 435118.284, 428662.000 43... 54333 \n", + "E02006875 POLYGON ((429164.000 432940.000, 429339.265 43... 160254 \n", + "E02006876 POLYGON ((430650.424 430920.211, 430541.000 43... 54471 \n", + "\n", + " OA21CD GlobalID LSOA21CD \\\n", + "MSOA21CD \n", + "E02002330 E00058996 d0e5f055-f45a-4c73-ba31-72a00babdfe1 E01011702 \n", + "E02002331 E00058975 a99aff6e-3846-46e8-a00a-493c3f470420 E01011697 \n", + "E02002332 E00058339 239f6484-5a0a-4e03-86cb-045ee4dd76bd E01011581 \n", + "E02002333 E00058333 e1295d1f-a2f3-41d6-a7c8-937c7c36e003 E01011572 \n", + "E02002334 E00058968 9df65ceb-2b55-471c-8e2d-aa803dfca3e5 E01011709 \n", + "... ... ... ... \n", + "E02002437 E00058126 b5da9cc9-e49f-4e9d-9f5b-a4d61278df1a E01011535 \n", + "E02006852 E00058891 bd49b23f-805b-4dfa-8d58-e728f2ba239d E01011690 \n", + "E02006861 E00057628 38dd690f-4fd2-4e5a-9abb-cae5f1745891 E01011444 \n", + "E02006875 E00169780 e25c17dd-793a-4a37-b838-1bcf74113e56 E01033008 \n", + "E02006876 E00057776 c09f4ae3-3dc7-417b-88bd-87f18eca3d64 E01011470 \n", + "\n", + " LSOA21NM MSOA21NM LEP22CD1 LEP22NM1 LAD22CD \\\n", + "MSOA21CD \n", + "E02002330 Leeds 001D Leeds 001 E37000062 Leeds City Region E08000035 \n", + "E02002331 Leeds 002A Leeds 002 E37000062 Leeds City Region E08000035 \n", + "E02002332 Leeds 003A Leeds 003 E37000062 Leeds City Region E08000035 \n", + "E02002333 Leeds 004C Leeds 004 E37000062 Leeds City Region E08000035 \n", + "E02002334 Leeds 005B Leeds 005 E37000062 Leeds City Region E08000035 \n", + "... ... ... ... ... ... \n", + "E02002437 Leeds 108A Leeds 108 E37000062 Leeds City Region E08000035 \n", + "E02006852 Leeds 109C Leeds 109 E37000062 Leeds City Region E08000035 \n", + "E02006861 Leeds 110C Leeds 110 E37000062 Leeds City Region E08000035 \n", + "E02006875 Leeds 111A Leeds 111 E37000062 Leeds City Region E08000035 \n", + "E02006876 Leeds 112C Leeds 112 E37000062 Leeds City Region E08000035 \n", + "\n", + " LAD22NM rgn22cd rgn22nm ctry22cd ctry22nm \n", + "MSOA21CD \n", + "E02002330 Leeds E12000003 Yorkshire and The Humber E92000001 England \n", + "E02002331 Leeds E12000003 Yorkshire and The Humber E92000001 England \n", + "E02002332 Leeds E12000003 Yorkshire and The Humber E92000001 England \n", + "E02002333 Leeds E12000003 Yorkshire and The Humber E92000001 England \n", + "E02002334 Leeds E12000003 Yorkshire and The Humber E92000001 England \n", + "... ... ... ... ... ... \n", + "E02002437 Leeds E12000003 Yorkshire and The Humber E92000001 England \n", + "E02006852 Leeds E12000003 Yorkshire and The Humber E92000001 England \n", + "E02006861 Leeds E12000003 Yorkshire and The Humber E92000001 England \n", + "E02006875 Leeds E12000003 Yorkshire and The Humber E92000001 England \n", + "E02006876 Leeds E12000003 Yorkshire and The Humber E92000001 England \n", + "\n", + "[107 rows x 15 columns]" + ] + }, + "execution_count": 91, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "MSOA_boundaries" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
MSOA21CD
OA21CD
E00056750E02002340
E00056751E02002338
E00056752E02002339
E00056753E02002339
E00056754E02002340
......
E00187149E02006876
E00187150E02002432
E00187151E02002337
E00187152E02006875
E00187153E02002404
\n", + "

2607 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " MSOA21CD\n", + "OA21CD \n", + "E00056750 E02002340\n", + "E00056751 E02002338\n", + "E00056752 E02002339\n", + "E00056753 E02002339\n", + "E00056754 E02002340\n", + "... ...\n", + "E00187149 E02006876\n", + "E00187150 E02002432\n", + "E00187151 E02002337\n", + "E00187152 E02006875\n", + "E00187153 E02002404\n", + "\n", + "[2607 rows x 1 columns]" + ] + }, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# generate OA to MSOA matching list\n", + "OA_to_MSOA_21 = boundaries[[\"OA21CD\", \"MSOA21CD\"]].drop_duplicates()\n", + "OA_to_MSOA_21.set_index(\"OA21CD\", inplace=True)\n", + "OA_to_MSOA_21" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "OA_to_MSOA_21" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Read in the AcBM datasets\n", + "\n", + "The dataset currently used is generated on 12/12/2024 for Leeds" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "acbm_data=pd.read_parquet(\"../data/outputs/36c777d445/legs_with_locations.parquet\", engine='pyarrow')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
pidhidozonedzonepurporigin activitydestination activitymodeseqtsttetdurationstart_location_idend_location_idstart_location_geometry_wktend_location_geometry_wkt
12115E00059028Noneworkhomeworkcar_passenger1.01900-01-01 06:30:001900-01-01 06:34:000:04:00NoneNoneNoneNone
15125E00057570E00058739workescortworkcar2.01900-01-01 06:34:001900-01-01 07:00:000:26:0013383664501381546612POINT (-1.5129058870428844 53.81732739735367)POINT (-1.474703422980641 53.85175150478472)
18136E00059028E00059102workhomeworkcar1.01900-01-01 08:30:001900-01-01 09:00:000:30:00None1397386050NonePOINT (-1.437978763907208 53.831371262924726)
30198E00059102E00056971workescortworkcar2.01900-01-01 08:00:001900-01-01 08:10:000:10:001671756810377084374POINT (-1.4220144369942826 53.84172919739339)POINT (-1.4471266040651745 53.87141888994728)
32198E00169783E00056971workotherworkwalk4.01900-01-01 13:30:001900-01-01 13:45:000:15:0060575406377084374POINT (-1.5479900578735037 53.80108316543812)POINT (-1.4471266040651745 53.87141888994728)
...................................................
1157754794606334832E00057790E00169583workhomeworkcar1.01900-01-01 07:20:001900-01-01 07:40:000:20:0012389004082671267350POINT (-1.5320639571262564 53.781896143736425)POINT (-1.5933444255448457 53.82849087561576)
1157788794621334839E00187098E00165696workhomeworkcar1.01900-01-01 08:35:001900-01-01 09:15:000:40:00876772744735155888POINT (-1.5290247468603333 53.789487589857636)POINT (-1.6533095476728066 53.87043507716729)
1157797794625334842E00057799E00057577workhomeworkcar1.01900-01-01 07:35:001900-01-01 07:50:000:15:0013208369481313992658POINT (-1.5213598592927677 53.76963697620853)POINT (-1.5186351332907104 53.816325638496004)
1157799794626334842E00057799Noneworkhomeworkcar_passenger1.01900-01-01 07:00:001900-01-01 07:20:000:20:001320836948NonePOINT (-1.5213598592927677 53.76963697620853)None
1157810794637334851E00170617E00056766workhomeworkcar1.01900-01-01 08:30:001900-01-01 09:05:000:35:00408724848523021654POINT (-1.5362161982189206 53.793278868899215)POINT (-1.7122020271735048 53.87390173302263)
\n", + "

140433 rows × 16 columns

\n", + "
" + ], + "text/plain": [ + " pid hid ozone dzone purp origin activity \\\n", + "12 11 5 E00059028 None work home \n", + "15 12 5 E00057570 E00058739 work escort \n", + "18 13 6 E00059028 E00059102 work home \n", + "30 19 8 E00059102 E00056971 work escort \n", + "32 19 8 E00169783 E00056971 work other \n", + "... ... ... ... ... ... ... \n", + "1157754 794606 334832 E00057790 E00169583 work home \n", + "1157788 794621 334839 E00187098 E00165696 work home \n", + "1157797 794625 334842 E00057799 E00057577 work home \n", + "1157799 794626 334842 E00057799 None work home \n", + "1157810 794637 334851 E00170617 E00056766 work home \n", + "\n", + " destination activity mode seq tst \\\n", + "12 work car_passenger 1.0 1900-01-01 06:30:00 \n", + "15 work car 2.0 1900-01-01 06:34:00 \n", + "18 work car 1.0 1900-01-01 08:30:00 \n", + "30 work car 2.0 1900-01-01 08:00:00 \n", + "32 work walk 4.0 1900-01-01 13:30:00 \n", + "... ... ... ... ... \n", + "1157754 work car 1.0 1900-01-01 07:20:00 \n", + "1157788 work car 1.0 1900-01-01 08:35:00 \n", + "1157797 work car 1.0 1900-01-01 07:35:00 \n", + "1157799 work car_passenger 1.0 1900-01-01 07:00:00 \n", + "1157810 work car 1.0 1900-01-01 08:30:00 \n", + "\n", + " tet duration start_location_id end_location_id \\\n", + "12 1900-01-01 06:34:00 0:04:00 None None \n", + "15 1900-01-01 07:00:00 0:26:00 1338366450 1381546612 \n", + "18 1900-01-01 09:00:00 0:30:00 None 1397386050 \n", + "30 1900-01-01 08:10:00 0:10:00 1671756810 377084374 \n", + "32 1900-01-01 13:45:00 0:15:00 60575406 377084374 \n", + "... ... ... ... ... \n", + "1157754 1900-01-01 07:40:00 0:20:00 1238900408 2671267350 \n", + "1157788 1900-01-01 09:15:00 0:40:00 876772744 735155888 \n", + "1157797 1900-01-01 07:50:00 0:15:00 1320836948 1313992658 \n", + "1157799 1900-01-01 07:20:00 0:20:00 1320836948 None \n", + "1157810 1900-01-01 09:05:00 0:35:00 408724848 523021654 \n", + "\n", + " start_location_geometry_wkt \\\n", + "12 None \n", + "15 POINT (-1.5129058870428844 53.81732739735367) \n", + "18 None \n", + "30 POINT (-1.4220144369942826 53.84172919739339) \n", + "32 POINT (-1.5479900578735037 53.80108316543812) \n", + "... ... \n", + "1157754 POINT (-1.5320639571262564 53.781896143736425) \n", + "1157788 POINT (-1.5290247468603333 53.789487589857636) \n", + "1157797 POINT (-1.5213598592927677 53.76963697620853) \n", + "1157799 POINT (-1.5213598592927677 53.76963697620853) \n", + "1157810 POINT (-1.5362161982189206 53.793278868899215) \n", + "\n", + " end_location_geometry_wkt \n", + "12 None \n", + "15 POINT (-1.474703422980641 53.85175150478472) \n", + "18 POINT (-1.437978763907208 53.831371262924726) \n", + "30 POINT (-1.4471266040651745 53.87141888994728) \n", + "32 POINT (-1.4471266040651745 53.87141888994728) \n", + "... ... \n", + "1157754 POINT (-1.5933444255448457 53.82849087561576) \n", + "1157788 POINT (-1.6533095476728066 53.87043507716729) \n", + "1157797 POINT (-1.5186351332907104 53.816325638496004) \n", + "1157799 None \n", + "1157810 POINT (-1.7122020271735048 53.87390173302263) \n", + "\n", + "[140433 rows x 16 columns]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# filter the data to only include work trips\n", + "acbm_data_work=acbm_data[acbm_data[\"purp\"]==\"work\"]\n", + "acbm_data_work" + ] + }, + { + "cell_type": "code", + "execution_count": 133, + "metadata": {}, + "outputs": [], + "source": [ + "acbm_data_work=acbm_data_work.join(OA_to_MSOA_21, on=\"ozone\").rename(columns={\"MSOA21CD\": \"ozone_MSOA\"}).join(OA_to_MSOA_21, on=\"dzone\").rename(columns={\"MSOA21CD\": \"dzone_MSOA\"})" + ] + }, + { + "cell_type": "code", + "execution_count": 134, + "metadata": {}, + "outputs": [], + "source": [ + "# Filter the ozone & dzone is not none\n", + "acbm_data_work=acbm_data_work[~acbm_data_work[\"ozone\"].isna() & ~acbm_data_work[\"dzone\"].isna()]" + ] + }, + { + "cell_type": "code", + "execution_count": 135, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
pidhidozonedzonepurporigin activitydestination activitymodeseqtsttetdurationstart_location_idend_location_idstart_location_geometry_wktend_location_geometry_wktozone_MSOAdzone_MSOA
18136E00059028E00059102workhomeworkcar1.01900-01-01 08:30:001900-01-01 09:00:000:30:00None1397386050NonePOINT (-1.437978763907208 53.831371262924726)E02002330E02002351
35208E00059012E00169786workhomeworkcar1.01900-01-01 07:50:001900-01-01 08:35:000:45:00None952311802NonePOINT (-1.5385467208011925 53.79821785944038)E02002330E02006875
43249E00059045E00058296workhomeworkcar1.01900-01-01 08:10:001900-01-01 08:42:000:32:00None262780150NonePOINT (-1.5182841630529933 53.864789509699904)E02002330E02002341
452711E00059022E00056971workhomeworkwalk1.01900-01-01 07:30:001900-01-01 07:55:000:25:00None377084374NonePOINT (-1.4471266040651745 53.87141888994728)E02002330E02002359
573313E00059016E00058877workhomeworkcar1.01900-01-01 07:05:001900-01-01 07:45:000:40:00None294189496NonePOINT (-1.520049852688877 53.806563321006514)E02002330E02002393
.........................................................
1157752794605334832E00057790E00057239workhomeworkcar1.01900-01-01 07:20:001900-01-01 07:40:000:20:0012389004081166563594POINT (-1.5320639571262564 53.781896143736425)POINT (-1.5467417317175023 53.82775152739614)E02006876E02002363
1157754794606334832E00057790E00169583workhomeworkcar1.01900-01-01 07:20:001900-01-01 07:40:000:20:0012389004082671267350POINT (-1.5320639571262564 53.781896143736425)POINT (-1.5933444255448457 53.82849087561576)E02006876E02006852
1157788794621334839E00187098E00165696workhomeworkcar1.01900-01-01 08:35:001900-01-01 09:15:000:40:00876772744735155888POINT (-1.5290247468603333 53.789487589857636)POINT (-1.6533095476728066 53.87043507716729)E02006876E02002336
1157797794625334842E00057799E00057577workhomeworkcar1.01900-01-01 07:35:001900-01-01 07:50:000:15:0013208369481313992658POINT (-1.5213598592927677 53.76963697620853)POINT (-1.5186351332907104 53.816325638496004)E02006876E02002377
1157810794637334851E00170617E00056766workhomeworkcar1.01900-01-01 08:30:001900-01-01 09:05:000:35:00408724848523021654POINT (-1.5362161982189206 53.793278868899215)POINT (-1.7122020271735048 53.87390173302263)E02006876E02002338
\n", + "

102712 rows × 18 columns

\n", + "
" + ], + "text/plain": [ + " pid hid ozone dzone purp origin activity \\\n", + "18 13 6 E00059028 E00059102 work home \n", + "35 20 8 E00059012 E00169786 work home \n", + "43 24 9 E00059045 E00058296 work home \n", + "45 27 11 E00059022 E00056971 work home \n", + "57 33 13 E00059016 E00058877 work home \n", + "... ... ... ... ... ... ... \n", + "1157752 794605 334832 E00057790 E00057239 work home \n", + "1157754 794606 334832 E00057790 E00169583 work home \n", + "1157788 794621 334839 E00187098 E00165696 work home \n", + "1157797 794625 334842 E00057799 E00057577 work home \n", + "1157810 794637 334851 E00170617 E00056766 work home \n", + "\n", + " destination activity mode seq tst \\\n", + "18 work car 1.0 1900-01-01 08:30:00 \n", + "35 work car 1.0 1900-01-01 07:50:00 \n", + "43 work car 1.0 1900-01-01 08:10:00 \n", + "45 work walk 1.0 1900-01-01 07:30:00 \n", + "57 work car 1.0 1900-01-01 07:05:00 \n", + "... ... ... ... ... \n", + "1157752 work car 1.0 1900-01-01 07:20:00 \n", + "1157754 work car 1.0 1900-01-01 07:20:00 \n", + "1157788 work car 1.0 1900-01-01 08:35:00 \n", + "1157797 work car 1.0 1900-01-01 07:35:00 \n", + "1157810 work car 1.0 1900-01-01 08:30:00 \n", + "\n", + " tet duration start_location_id end_location_id \\\n", + "18 1900-01-01 09:00:00 0:30:00 None 1397386050 \n", + "35 1900-01-01 08:35:00 0:45:00 None 952311802 \n", + "43 1900-01-01 08:42:00 0:32:00 None 262780150 \n", + "45 1900-01-01 07:55:00 0:25:00 None 377084374 \n", + "57 1900-01-01 07:45:00 0:40:00 None 294189496 \n", + "... ... ... ... ... \n", + "1157752 1900-01-01 07:40:00 0:20:00 1238900408 1166563594 \n", + "1157754 1900-01-01 07:40:00 0:20:00 1238900408 2671267350 \n", + "1157788 1900-01-01 09:15:00 0:40:00 876772744 735155888 \n", + "1157797 1900-01-01 07:50:00 0:15:00 1320836948 1313992658 \n", + "1157810 1900-01-01 09:05:00 0:35:00 408724848 523021654 \n", + "\n", + " start_location_geometry_wkt \\\n", + "18 None \n", + "35 None \n", + "43 None \n", + "45 None \n", + "57 None \n", + "... ... \n", + "1157752 POINT (-1.5320639571262564 53.781896143736425) \n", + "1157754 POINT (-1.5320639571262564 53.781896143736425) \n", + "1157788 POINT (-1.5290247468603333 53.789487589857636) \n", + "1157797 POINT (-1.5213598592927677 53.76963697620853) \n", + "1157810 POINT (-1.5362161982189206 53.793278868899215) \n", + "\n", + " end_location_geometry_wkt ozone_MSOA dzone_MSOA \n", + "18 POINT (-1.437978763907208 53.831371262924726) E02002330 E02002351 \n", + "35 POINT (-1.5385467208011925 53.79821785944038) E02002330 E02006875 \n", + "43 POINT (-1.5182841630529933 53.864789509699904) E02002330 E02002341 \n", + "45 POINT (-1.4471266040651745 53.87141888994728) E02002330 E02002359 \n", + "57 POINT (-1.520049852688877 53.806563321006514) E02002330 E02002393 \n", + "... ... ... ... \n", + "1157752 POINT (-1.5467417317175023 53.82775152739614) E02006876 E02002363 \n", + "1157754 POINT (-1.5933444255448457 53.82849087561576) E02006876 E02006852 \n", + "1157788 POINT (-1.6533095476728066 53.87043507716729) E02006876 E02002336 \n", + "1157797 POINT (-1.5186351332907104 53.816325638496004) E02006876 E02002377 \n", + "1157810 POINT (-1.7122020271735048 53.87390173302263) E02006876 E02002338 \n", + "\n", + "[102712 rows x 18 columns]" + ] + }, + "execution_count": 135, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Filter the home to work trips comparing with the cencus data\n", + "acbm_data_work=acbm_data_work[acbm_data_work[\"origin activity\"]==\"home\"]\n", + "acbm_data_work" + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "metadata": {}, + "outputs": [], + "source": [ + "# deduplicate the data for only keep one commuting trip for the same person\n", + "acbm_data_work_unique=acbm_data_work.drop_duplicates(\"pid\",keep=\"first\")" + ] + }, + { + "cell_type": "code", + "execution_count": 139, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/jl/8nv_1f6915lct8qfk5b81hx80000gn/T/ipykernel_5022/1763523430.py:2: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n", + " OD_matrix_acbm_OA = acbm_data_work_unique.groupby(\"ozone\").apply(lambda x: x.value_counts(\"dzone\")).reset_index()\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ozonedzonecount
0E00056750E001695784
1E00056750E000585644
2E00056750E001870752
3E00056750E000570682
4E00056750E000574032
............
56407E00187151E000568231
56408E00187151E000568221
56409E00187151E000567681
56410E00187151E001870801
56411E00187152E001871521
\n", + "

56412 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " ozone dzone count\n", + "0 E00056750 E00169578 4\n", + "1 E00056750 E00058564 4\n", + "2 E00056750 E00187075 2\n", + "3 E00056750 E00057068 2\n", + "4 E00056750 E00057403 2\n", + "... ... ... ...\n", + "56407 E00187151 E00056823 1\n", + "56408 E00187151 E00056822 1\n", + "56409 E00187151 E00056768 1\n", + "56410 E00187151 E00187080 1\n", + "56411 E00187152 E00187152 1\n", + "\n", + "[56412 rows x 3 columns]" + ] + }, + "execution_count": 139, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Generate the OD matrix from the ACBM data at OA level\n", + "OD_matrix_acbm_OA = acbm_data_work_unique.groupby(\"ozone\").apply(lambda x: x.value_counts(\"dzone\")).reset_index()\n", + "OD_matrix_acbm_OA" + ] + }, + { + "cell_type": "code", + "execution_count": 140, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/jl/8nv_1f6915lct8qfk5b81hx80000gn/T/ipykernel_5022/4150659795.py:2: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n", + " OD_matrix_acbm_MSOA = acbm_data_work_unique.groupby(\"ozone_MSOA\").apply(lambda x: x.value_counts(\"dzone_MSOA\")).reset_index()\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ozone_MSOAdzone_MSOAcount
0E02002330E02002359447
1E02002330E02002335131
2E02002330E0200235192
3E02002330E0200687554
4E02002330E0200239331
............
9202E02006876E020023621
9203E02006876E020023691
9204E02006876E020024231
9205E02006876E020023851
9206E02006876E020023641
\n", + "

9207 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " ozone_MSOA dzone_MSOA count\n", + "0 E02002330 E02002359 447\n", + "1 E02002330 E02002335 131\n", + "2 E02002330 E02002351 92\n", + "3 E02002330 E02006875 54\n", + "4 E02002330 E02002393 31\n", + "... ... ... ...\n", + "9202 E02006876 E02002362 1\n", + "9203 E02006876 E02002369 1\n", + "9204 E02006876 E02002423 1\n", + "9205 E02006876 E02002385 1\n", + "9206 E02006876 E02002364 1\n", + "\n", + "[9207 rows x 3 columns]" + ] + }, + "execution_count": 140, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Aggregate the OD matrix to MSOA level\n", + "OD_matrix_acbm_MSOA = acbm_data_work_unique.groupby(\"ozone_MSOA\").apply(lambda x: x.value_counts(\"dzone_MSOA\")).reset_index()\n", + "OD_matrix_acbm_MSOA" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Read in the Cencus 2021 Data" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Middle layer Super Output Areas codeMiddle layer Super Output Areas labelMSOA of workplace codeMSOA of workplace labelPlace of work indicator (4 categories) codePlace of work indicator (4 categories) labelCount
0E02000001City of London 001-8Does not apply-8Does not apply2653
1E02000001City of London 001999999999Workplace is outside the UK2Other (including offshore installation, workin...35
2E02000001City of London 001E02000001City of London 0011Mainly working at or from home, No fixed place3871
3E02000001City of London 001E02000001City of London 0013Working in the UK but not working at or from home436
4E02000001City of London 001E02000016Barking and Dagenham 0153Working in the UK but not working at or from home2
........................
1856451W02000428Swansea 032W02000418Carmarthenshire 0273Working in the UK but not working at or from home2
1856452W02000428Swansea 032W02000422Cardiff 0483Working in the UK but not working at or from home5
1856453W02000428Swansea 032W02000423Cardiff 0493Working in the UK but not working at or from home1
1856454W02000428Swansea 032W02000428Swansea 0321Mainly working at or from home, No fixed place2128
1856455W02000428Swansea 032W02000428Swansea 0323Working in the UK but not working at or from home160
\n", + "

1856456 rows × 7 columns

\n", + "
" + ], + "text/plain": [ + " Middle layer Super Output Areas code \\\n", + "0 E02000001 \n", + "1 E02000001 \n", + "2 E02000001 \n", + "3 E02000001 \n", + "4 E02000001 \n", + "... ... \n", + "1856451 W02000428 \n", + "1856452 W02000428 \n", + "1856453 W02000428 \n", + "1856454 W02000428 \n", + "1856455 W02000428 \n", + "\n", + " Middle layer Super Output Areas label MSOA of workplace code \\\n", + "0 City of London 001 -8 \n", + "1 City of London 001 999999999 \n", + "2 City of London 001 E02000001 \n", + "3 City of London 001 E02000001 \n", + "4 City of London 001 E02000016 \n", + "... ... ... \n", + "1856451 Swansea 032 W02000418 \n", + "1856452 Swansea 032 W02000422 \n", + "1856453 Swansea 032 W02000423 \n", + "1856454 Swansea 032 W02000428 \n", + "1856455 Swansea 032 W02000428 \n", + "\n", + " MSOA of workplace label \\\n", + "0 Does not apply \n", + "1 Workplace is outside the UK \n", + "2 City of London 001 \n", + "3 City of London 001 \n", + "4 Barking and Dagenham 015 \n", + "... ... \n", + "1856451 Carmarthenshire 027 \n", + "1856452 Cardiff 048 \n", + "1856453 Cardiff 049 \n", + "1856454 Swansea 032 \n", + "1856455 Swansea 032 \n", + "\n", + " Place of work indicator (4 categories) code \\\n", + "0 -8 \n", + "1 2 \n", + "2 1 \n", + "3 3 \n", + "4 3 \n", + "... ... \n", + "1856451 3 \n", + "1856452 3 \n", + "1856453 3 \n", + "1856454 1 \n", + "1856455 3 \n", + "\n", + " Place of work indicator (4 categories) label Count \n", + "0 Does not apply 2653 \n", + "1 Other (including offshore installation, workin... 35 \n", + "2 Mainly working at or from home, No fixed place 3871 \n", + "3 Working in the UK but not working at or from home 436 \n", + "4 Working in the UK but not working at or from home 2 \n", + "... ... ... \n", + "1856451 Working in the UK but not working at or from home 2 \n", + "1856452 Working in the UK but not working at or from home 5 \n", + "1856453 Working in the UK but not working at or from home 1 \n", + "1856454 Mainly working at or from home, No fixed place 2128 \n", + "1856455 Working in the UK but not working at or from home 160 \n", + "\n", + "[1856456 rows x 7 columns]" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Read the census data at MSOA level\n", + "Cencus21_MSOA = pd.read_csv(Cencus21_MSOA_data_path)\n", + "\n", + "Cencus21_MSOA\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Validate the flows at OA level" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Output Areas codeOutput Areas labelOA of workplace codeOA of workplace labelPlace of work indicator (4 categories) codePlace of work indicator (4 categories) labelCount
0E00000001E00000001-8Does not apply-8Does not apply73
1E00000001E00000001E00000001E000000011Mainly working at or from home, No fixed place64
2E00000001E00000001E00004731E000047313Working in the UK but not working at or from home1
3E00000001E00000001E00006038E000060383Working in the UK but not working at or from home1
4E00000001E00000001E00013547E000135473Working in the UK but not working at or from home1
........................
10741180W00010697W00010697W00010425W000104253Working in the UK but not working at or from home1
10741181W00010697W00010697W00010563W000105633Working in the UK but not working at or from home1
10741182W00010697W00010697W00010623W000106233Working in the UK but not working at or from home1
10741183W00010697W00010697W00010671W000106713Working in the UK but not working at or from home1
10741184W00010697W00010697W00010697W000106971Mainly working at or from home, No fixed place44
\n", + "

10741185 rows × 7 columns

\n", + "
" + ], + "text/plain": [ + " Output Areas code Output Areas label OA of workplace code \\\n", + "0 E00000001 E00000001 -8 \n", + "1 E00000001 E00000001 E00000001 \n", + "2 E00000001 E00000001 E00004731 \n", + "3 E00000001 E00000001 E00006038 \n", + "4 E00000001 E00000001 E00013547 \n", + "... ... ... ... \n", + "10741180 W00010697 W00010697 W00010425 \n", + "10741181 W00010697 W00010697 W00010563 \n", + "10741182 W00010697 W00010697 W00010623 \n", + "10741183 W00010697 W00010697 W00010671 \n", + "10741184 W00010697 W00010697 W00010697 \n", + "\n", + " OA of workplace label Place of work indicator (4 categories) code \\\n", + "0 Does not apply -8 \n", + "1 E00000001 1 \n", + "2 E00004731 3 \n", + "3 E00006038 3 \n", + "4 E00013547 3 \n", + "... ... ... \n", + "10741180 W00010425 3 \n", + "10741181 W00010563 3 \n", + "10741182 W00010623 3 \n", + "10741183 W00010671 3 \n", + "10741184 W00010697 1 \n", + "\n", + " Place of work indicator (4 categories) label Count \n", + "0 Does not apply 73 \n", + "1 Mainly working at or from home, No fixed place 64 \n", + "2 Working in the UK but not working at or from home 1 \n", + "3 Working in the UK but not working at or from home 1 \n", + "4 Working in the UK but not working at or from home 1 \n", + "... ... ... \n", + "10741180 Working in the UK but not working at or from home 1 \n", + "10741181 Working in the UK but not working at or from home 1 \n", + "10741182 Working in the UK but not working at or from home 1 \n", + "10741183 Working in the UK but not working at or from home 1 \n", + "10741184 Mainly working at or from home, No fixed place 44 \n", + "\n", + "[10741185 rows x 7 columns]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Read the census data at OA level\n", + "\n", + "Cencus21_OA = pd.read_csv(Cencus21_OA_data_path)\n", + "\n", + "Cencus21_OA\n" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Output Areas codeOutput Areas labelOA of workplace codeOA of workplace labelPlace of work indicator (4 categories) codePlace of work indicator (4 categories) labelCount
3208071E00056750E00056750E00056750E000567501Mainly working at or from home, No fixed place56
3208072E00056750E00056750E00056752E000567523Working in the UK but not working at or from home2
3208073E00056750E00056750E00056753E000567533Working in the UK but not working at or from home8
3208074E00056750E00056750E00056766E000567663Working in the UK but not working at or from home2
3208075E00056750E00056750E00056784E000567843Working in the UK but not working at or from home1
........................
9992534E00187153E00187153E00187074E001870743Working in the UK but not working at or from home1
9992535E00187153E00187153E00187120E001871203Working in the UK but not working at or from home1
9992536E00187153E00187153E00187137E001871373Working in the UK but not working at or from home1
9992537E00187153E00187153E00187152E001871523Working in the UK but not working at or from home11
9992538E00187153E00187153E00187153E001871531Mainly working at or from home, No fixed place82
\n", + "

108789 rows × 7 columns

\n", + "
" + ], + "text/plain": [ + " Output Areas code Output Areas label OA of workplace code \\\n", + "3208071 E00056750 E00056750 E00056750 \n", + "3208072 E00056750 E00056750 E00056752 \n", + "3208073 E00056750 E00056750 E00056753 \n", + "3208074 E00056750 E00056750 E00056766 \n", + "3208075 E00056750 E00056750 E00056784 \n", + "... ... ... ... \n", + "9992534 E00187153 E00187153 E00187074 \n", + "9992535 E00187153 E00187153 E00187120 \n", + "9992536 E00187153 E00187153 E00187137 \n", + "9992537 E00187153 E00187153 E00187152 \n", + "9992538 E00187153 E00187153 E00187153 \n", + "\n", + " OA of workplace label Place of work indicator (4 categories) code \\\n", + "3208071 E00056750 1 \n", + "3208072 E00056752 3 \n", + "3208073 E00056753 3 \n", + "3208074 E00056766 3 \n", + "3208075 E00056784 3 \n", + "... ... ... \n", + "9992534 E00187074 3 \n", + "9992535 E00187120 3 \n", + "9992536 E00187137 3 \n", + "9992537 E00187152 3 \n", + "9992538 E00187153 1 \n", + "\n", + " Place of work indicator (4 categories) label Count \n", + "3208071 Mainly working at or from home, No fixed place 56 \n", + "3208072 Working in the UK but not working at or from home 2 \n", + "3208073 Working in the UK but not working at or from home 8 \n", + "3208074 Working in the UK but not working at or from home 2 \n", + "3208075 Working in the UK but not working at or from home 1 \n", + "... ... ... \n", + "9992534 Working in the UK but not working at or from home 1 \n", + "9992535 Working in the UK but not working at or from home 1 \n", + "9992536 Working in the UK but not working at or from home 1 \n", + "9992537 Working in the UK but not working at or from home 11 \n", + "9992538 Mainly working at or from home, No fixed place 82 \n", + "\n", + "[108789 rows x 7 columns]" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Filter the cencus data to case study area\n", + "\n", + "Cencus21_OA_case_study_area = Cencus21_OA[Cencus21_OA[\"Output Areas code\"].isin(boundaries[\"OA21CD\"].unique())]\n", + "Cencus21_OA_case_study_area = Cencus21_OA_case_study_area[Cencus21_OA_case_study_area[\"OA of workplace code\"].isin(boundaries[\"OA21CD\"].unique())]\n", + "Cencus21_OA_case_study_area" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Output Areas codeOutput Areas labelOA of workplace codeOA of workplace labelPlace of work indicator (4 categories) codeCencus_countACBM_count
0E00056750E00056750E00056750E000567501560.0
1E00056750E00056750E00056752E00056752320.0
2E00056750E00056750E00056753E00056753380.0
3E00056750E00056750E00056766E00056766320.0
4E00056750E00056750E00056784E00056784310.0
........................
108784E00187153E00187153E00187074E00187074310.0
108785E00187153E00187153E00187120E00187120310.0
108786E00187153E00187153E00187137E00187137310.0
108787E00187153E00187153E00187152E001871523110.0
108788E00187153E00187153E00187153E001871531820.0
\n", + "

108789 rows × 7 columns

\n", + "
" + ], + "text/plain": [ + " Output Areas code Output Areas label OA of workplace code \\\n", + "0 E00056750 E00056750 E00056750 \n", + "1 E00056750 E00056750 E00056752 \n", + "2 E00056750 E00056750 E00056753 \n", + "3 E00056750 E00056750 E00056766 \n", + "4 E00056750 E00056750 E00056784 \n", + "... ... ... ... \n", + "108784 E00187153 E00187153 E00187074 \n", + "108785 E00187153 E00187153 E00187120 \n", + "108786 E00187153 E00187153 E00187137 \n", + "108787 E00187153 E00187153 E00187152 \n", + "108788 E00187153 E00187153 E00187153 \n", + "\n", + " OA of workplace label Place of work indicator (4 categories) code \\\n", + "0 E00056750 1 \n", + "1 E00056752 3 \n", + "2 E00056753 3 \n", + "3 E00056766 3 \n", + "4 E00056784 3 \n", + "... ... ... \n", + "108784 E00187074 3 \n", + "108785 E00187120 3 \n", + "108786 E00187137 3 \n", + "108787 E00187152 3 \n", + "108788 E00187153 1 \n", + "\n", + " Cencus_count ACBM_count \n", + "0 56 0.0 \n", + "1 2 0.0 \n", + "2 8 0.0 \n", + "3 2 0.0 \n", + "4 1 0.0 \n", + "... ... ... \n", + "108784 1 0.0 \n", + "108785 1 0.0 \n", + "108786 1 0.0 \n", + "108787 11 0.0 \n", + "108788 82 0.0 \n", + "\n", + "[108789 rows x 7 columns]" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# combine the cencus data with the ACBM data at OA level to compare the difference\n", + "\n", + "Combine_Df_OA = pd.merge(Cencus21_OA_case_study_area, OD_matrix_acbm_OA, left_on= [\"Output Areas code\",\"OA of workplace code\"], right_on=[\"ozone\",\"dzone\"], how=\"left\").fillna(0)\n", + "Combine_Df_OA.drop(columns=[\"ozone\",\"dzone\",'Place of work indicator (4 categories) label'],inplace=True)\n", + "Combine_Df_OA.rename(columns={\"Count\": \"Cencus_count\",\"count\": \"ACBM_count\"},inplace=True)\n", + "Combine_Df_OA\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Census counts: 326921 \n", + "Current ACBM counts: 86463\n", + "The R^2 value is: 0.005976117773372713\n", + "The RMSE value is: 11.364015603538766\n", + "The MAE value is: 2.8038680381288548\n" + ] + } + ], + "source": [ + "# calculate the R^2, RMSE and MAE values at OA level for the comparison\n", + " \n", + "sum(Combine_Df_OA[\"Cencus_count\"])\n", + "sum(Combine_Df_OA[\"ACBM_count\"])\n", + "print(\n", + " \"Census counts:\",\n", + " sum(Combine_Df_OA[\"Cencus_count\"]),\n", + " \"\\nCurrent ACBM counts:\",\n", + " int (sum(Combine_Df_OA[\"ACBM_count\"]),)\n", + " )\n", + "\n", + "r2 = np.corrcoef(Combine_Df_OA[\"Cencus_count\"], Combine_Df_OA[\"ACBM_count\"])[0, 1] ** 2\n", + "print(\"The R^2 value is: \", r2)\n", + "\n", + "rmse = np.sqrt(np.mean((Combine_Df_OA[\"Cencus_count\"] - Combine_Df_OA[\"ACBM_count\"]) ** 2))\n", + "print(\"The RMSE value is: \", rmse)\n", + "\n", + "mes = np.mean(np.abs(Combine_Df_OA[\"Cencus_count\"] - Combine_Df_OA[\"ACBM_count\"]))\n", + "print(\"The MAE value is: \", mes)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Validate the flows at MSOA level" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Middle layer Super Output Areas codeMiddle layer Super Output Areas labelMSOA of workplace codeMSOA of workplace labelPlace of work indicator (4 categories) codePlace of work indicator (4 categories) labelCount
0E02000001City of London 001-8Does not apply-8Does not apply2653
1E02000001City of London 001999999999Workplace is outside the UK2Other (including offshore installation, workin...35
2E02000001City of London 001E02000001City of London 0011Mainly working at or from home, No fixed place3871
3E02000001City of London 001E02000001City of London 0013Working in the UK but not working at or from home436
4E02000001City of London 001E02000016Barking and Dagenham 0153Working in the UK but not working at or from home2
........................
1856451W02000428Swansea 032W02000418Carmarthenshire 0273Working in the UK but not working at or from home2
1856452W02000428Swansea 032W02000422Cardiff 0483Working in the UK but not working at or from home5
1856453W02000428Swansea 032W02000423Cardiff 0493Working in the UK but not working at or from home1
1856454W02000428Swansea 032W02000428Swansea 0321Mainly working at or from home, No fixed place2128
1856455W02000428Swansea 032W02000428Swansea 0323Working in the UK but not working at or from home160
\n", + "

1856456 rows × 7 columns

\n", + "
" + ], + "text/plain": [ + " Middle layer Super Output Areas code \\\n", + "0 E02000001 \n", + "1 E02000001 \n", + "2 E02000001 \n", + "3 E02000001 \n", + "4 E02000001 \n", + "... ... \n", + "1856451 W02000428 \n", + "1856452 W02000428 \n", + "1856453 W02000428 \n", + "1856454 W02000428 \n", + "1856455 W02000428 \n", + "\n", + " Middle layer Super Output Areas label MSOA of workplace code \\\n", + "0 City of London 001 -8 \n", + "1 City of London 001 999999999 \n", + "2 City of London 001 E02000001 \n", + "3 City of London 001 E02000001 \n", + "4 City of London 001 E02000016 \n", + "... ... ... \n", + "1856451 Swansea 032 W02000418 \n", + "1856452 Swansea 032 W02000422 \n", + "1856453 Swansea 032 W02000423 \n", + "1856454 Swansea 032 W02000428 \n", + "1856455 Swansea 032 W02000428 \n", + "\n", + " MSOA of workplace label \\\n", + "0 Does not apply \n", + "1 Workplace is outside the UK \n", + "2 City of London 001 \n", + "3 City of London 001 \n", + "4 Barking and Dagenham 015 \n", + "... ... \n", + "1856451 Carmarthenshire 027 \n", + "1856452 Cardiff 048 \n", + "1856453 Cardiff 049 \n", + "1856454 Swansea 032 \n", + "1856455 Swansea 032 \n", + "\n", + " Place of work indicator (4 categories) code \\\n", + "0 -8 \n", + "1 2 \n", + "2 1 \n", + "3 3 \n", + "4 3 \n", + "... ... \n", + "1856451 3 \n", + "1856452 3 \n", + "1856453 3 \n", + "1856454 1 \n", + "1856455 3 \n", + "\n", + " Place of work indicator (4 categories) label Count \n", + "0 Does not apply 2653 \n", + "1 Other (including offshore installation, workin... 35 \n", + "2 Mainly working at or from home, No fixed place 3871 \n", + "3 Working in the UK but not working at or from home 436 \n", + "4 Working in the UK but not working at or from home 2 \n", + "... ... ... \n", + "1856451 Working in the UK but not working at or from home 2 \n", + "1856452 Working in the UK but not working at or from home 5 \n", + "1856453 Working in the UK but not working at or from home 1 \n", + "1856454 Mainly working at or from home, No fixed place 2128 \n", + "1856455 Working in the UK but not working at or from home 160 \n", + "\n", + "[1856456 rows x 7 columns]" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Read the census data at OA level\n", + "\n", + "Cencus21_MSOA = pd.read_csv(Cencus21_MSOA_data_path)\n", + "\n", + "Cencus21_MSOA" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Middle layer Super Output Areas codeMiddle layer Super Output Areas labelMSOA of workplace codeMSOA of workplace labelPlace of work indicator (4 categories) codePlace of work indicator (4 categories) labelCount
713972E02002330Leeds 001E02002330Leeds 0011Mainly working at or from home, No fixed place1572
713973E02002330Leeds 001E02002330Leeds 0013Working in the UK but not working at or from home30
713974E02002330Leeds 001E02002331Leeds 0023Working in the UK but not working at or from home366
713975E02002330Leeds 001E02002332Leeds 0033Working in the UK but not working at or from home6
713976E02002330Leeds 001E02002333Leeds 0043Working in the UK but not working at or from home2
........................
1719013E02006876Leeds 112E02006852Leeds 1093Working in the UK but not working at or from home6
1719014E02006876Leeds 112E02006861Leeds 1103Working in the UK but not working at or from home8
1719015E02006876Leeds 112E02006875Leeds 1113Working in the UK but not working at or from home471
1719016E02006876Leeds 112E02006876Leeds 1121Mainly working at or from home, No fixed place2243
1719017E02006876Leeds 112E02006876Leeds 1123Working in the UK but not working at or from home233
\n", + "

10403 rows × 7 columns

\n", + "
" + ], + "text/plain": [ + " Middle layer Super Output Areas code \\\n", + "713972 E02002330 \n", + "713973 E02002330 \n", + "713974 E02002330 \n", + "713975 E02002330 \n", + "713976 E02002330 \n", + "... ... \n", + "1719013 E02006876 \n", + "1719014 E02006876 \n", + "1719015 E02006876 \n", + "1719016 E02006876 \n", + "1719017 E02006876 \n", + "\n", + " Middle layer Super Output Areas label MSOA of workplace code \\\n", + "713972 Leeds 001 E02002330 \n", + "713973 Leeds 001 E02002330 \n", + "713974 Leeds 001 E02002331 \n", + "713975 Leeds 001 E02002332 \n", + "713976 Leeds 001 E02002333 \n", + "... ... ... \n", + "1719013 Leeds 112 E02006852 \n", + "1719014 Leeds 112 E02006861 \n", + "1719015 Leeds 112 E02006875 \n", + "1719016 Leeds 112 E02006876 \n", + "1719017 Leeds 112 E02006876 \n", + "\n", + " MSOA of workplace label Place of work indicator (4 categories) code \\\n", + "713972 Leeds 001 1 \n", + "713973 Leeds 001 3 \n", + "713974 Leeds 002 3 \n", + "713975 Leeds 003 3 \n", + "713976 Leeds 004 3 \n", + "... ... ... \n", + "1719013 Leeds 109 3 \n", + "1719014 Leeds 110 3 \n", + "1719015 Leeds 111 3 \n", + "1719016 Leeds 112 1 \n", + "1719017 Leeds 112 3 \n", + "\n", + " Place of work indicator (4 categories) label Count \n", + "713972 Mainly working at or from home, No fixed place 1572 \n", + "713973 Working in the UK but not working at or from home 30 \n", + "713974 Working in the UK but not working at or from home 366 \n", + "713975 Working in the UK but not working at or from home 6 \n", + "713976 Working in the UK but not working at or from home 2 \n", + "... ... ... \n", + "1719013 Working in the UK but not working at or from home 6 \n", + "1719014 Working in the UK but not working at or from home 8 \n", + "1719015 Working in the UK but not working at or from home 471 \n", + "1719016 Mainly working at or from home, No fixed place 2243 \n", + "1719017 Working in the UK but not working at or from home 233 \n", + "\n", + "[10403 rows x 7 columns]" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Filter the cencus data to case study area\n", + "\n", + "Cencus21_MSOA_case_study_area = Cencus21_MSOA[Cencus21_MSOA[\"Middle layer Super Output Areas code\"].isin(boundaries[\"MSOA21CD\"].unique())]\n", + "Cencus21_MSOA_case_study_area = Cencus21_MSOA_case_study_area[Cencus21_MSOA_case_study_area[\"MSOA of workplace code\"].isin(boundaries[\"MSOA21CD\"].unique())]\n", + "Cencus21_MSOA_case_study_area" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
OrigDestDist
0E02002330E020023300.000000
1E02002330E020023313532.892984
2E02002330E0200233220083.427194
3E02002330E0200233319168.244335
4E02002330E020023345888.497237
............
11444E02006876E020024377329.451871
11445E02006876E020068527882.022965
11446E02006876E020068615685.936850
11447E02006876E020068752992.168008
11448E02006876E020068760.000000
\n", + "

11449 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " Orig Dest Dist\n", + "0 E02002330 E02002330 0.000000\n", + "1 E02002330 E02002331 3532.892984\n", + "2 E02002330 E02002332 20083.427194\n", + "3 E02002330 E02002333 19168.244335\n", + "4 E02002330 E02002334 5888.497237\n", + "... ... ... ...\n", + "11444 E02006876 E02002437 7329.451871\n", + "11445 E02006876 E02006852 7882.022965\n", + "11446 E02006876 E02006861 5685.936850\n", + "11447 E02006876 E02006875 2992.168008\n", + "11448 E02006876 E02006876 0.000000\n", + "\n", + "[11449 rows x 3 columns]" + ] + }, + "execution_count": 97, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "distances = (\n", + " MSOA_boundaries.rename_axis(\"Orig\")\n", + " .centroid.apply(\n", + " lambda x: MSOA_boundaries.rename_axis(\"Dest\").centroid.distance(x)\n", + " )\n", + " .stack()\n", + " .reset_index()\n", + ")\n", + "distances.rename(columns={0: \"Dist\"}, inplace=True)\n", + "distances" + ] + }, + { + "cell_type": "code", + "execution_count": 153, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Middle layer Super Output Areas codeMiddle layer Super Output Areas labelMSOA of workplace codeMSOA of workplace labelPlace of work indicator (4 categories) codeCencus_countACBM_count
0E02002330Leeds 001E02002330Leeds 001115720.0
1E02002330Leeds 001E02002330Leeds 0013300.0
2E02002330Leeds 001E02002331Leeds 00233660.0
3E02002330Leeds 001E02002332Leeds 003360.0
4E02002330Leeds 001E02002333Leeds 004320.0
........................
10398E02006876Leeds 112E02006852Leeds 109365.0
10399E02006876Leeds 112E02006861Leeds 110384.0
10400E02006876Leeds 112E02006875Leeds 111347188.0
10401E02006876Leeds 112E02006876Leeds 1121224329.0
10402E02006876Leeds 112E02006876Leeds 112323329.0
\n", + "

10403 rows × 7 columns

\n", + "
" + ], + "text/plain": [ + " Middle layer Super Output Areas code \\\n", + "0 E02002330 \n", + "1 E02002330 \n", + "2 E02002330 \n", + "3 E02002330 \n", + "4 E02002330 \n", + "... ... \n", + "10398 E02006876 \n", + "10399 E02006876 \n", + "10400 E02006876 \n", + "10401 E02006876 \n", + "10402 E02006876 \n", + "\n", + " Middle layer Super Output Areas label MSOA of workplace code \\\n", + "0 Leeds 001 E02002330 \n", + "1 Leeds 001 E02002330 \n", + "2 Leeds 001 E02002331 \n", + "3 Leeds 001 E02002332 \n", + "4 Leeds 001 E02002333 \n", + "... ... ... \n", + "10398 Leeds 112 E02006852 \n", + "10399 Leeds 112 E02006861 \n", + "10400 Leeds 112 E02006875 \n", + "10401 Leeds 112 E02006876 \n", + "10402 Leeds 112 E02006876 \n", + "\n", + " MSOA of workplace label Place of work indicator (4 categories) code \\\n", + "0 Leeds 001 1 \n", + "1 Leeds 001 3 \n", + "2 Leeds 002 3 \n", + "3 Leeds 003 3 \n", + "4 Leeds 004 3 \n", + "... ... ... \n", + "10398 Leeds 109 3 \n", + "10399 Leeds 110 3 \n", + "10400 Leeds 111 3 \n", + "10401 Leeds 112 1 \n", + "10402 Leeds 112 3 \n", + "\n", + " Cencus_count ACBM_count \n", + "0 1572 0.0 \n", + "1 30 0.0 \n", + "2 366 0.0 \n", + "3 6 0.0 \n", + "4 2 0.0 \n", + "... ... ... \n", + "10398 6 5.0 \n", + "10399 8 4.0 \n", + "10400 471 88.0 \n", + "10401 2243 29.0 \n", + "10402 233 29.0 \n", + "\n", + "[10403 rows x 7 columns]" + ] + }, + "execution_count": 153, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# combine the cencus data with the ACBM data at MSOA level to compare the difference\n", + "\n", + "Combine_Df_MSOA = pd.merge(Cencus21_MSOA_case_study_area, OD_matrix_acbm_MSOA, left_on= [\"Middle layer Super Output Areas code\",\"MSOA of workplace code\"], right_on=[\"ozone_MSOA\",\"dzone_MSOA\"], how=\"left\").fillna(0)\n", + "Combine_Df_MSOA.drop(columns=['Place of work indicator (4 categories) label',\"ozone_MSOA\",\"dzone_MSOA\"],inplace=True)\n", + "Combine_Df_MSOA.rename(columns={\"Count\": \"Cencus_count\",\"count\": \"ACBM_count\"},inplace=True)\n", + "Combine_Df_MSOA" + ] + }, + { + "cell_type": "code", + "execution_count": 154, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Middle layer Super Output Areas codeMiddle layer Super Output Areas labelMSOA of workplace codeMSOA of workplace labelPlace of work indicator (4 categories) codeCencus_countACBM_countDist
0E02002330Leeds 001E02002330Leeds 001115720.00.000000
1E02002330Leeds 001E02002330Leeds 0013300.00.000000
2E02002330Leeds 001E02002331Leeds 00233660.03532.892984
3E02002330Leeds 001E02002332Leeds 003360.020083.427194
4E02002330Leeds 001E02002333Leeds 004320.019168.244335
...........................
10398E02006876Leeds 112E02006852Leeds 109365.07882.022965
10399E02006876Leeds 112E02006861Leeds 110384.05685.936850
10400E02006876Leeds 112E02006875Leeds 111347188.02992.168008
10401E02006876Leeds 112E02006876Leeds 1121224329.00.000000
10402E02006876Leeds 112E02006876Leeds 112323329.00.000000
\n", + "

10403 rows × 8 columns

\n", + "
" + ], + "text/plain": [ + " Middle layer Super Output Areas code \\\n", + "0 E02002330 \n", + "1 E02002330 \n", + "2 E02002330 \n", + "3 E02002330 \n", + "4 E02002330 \n", + "... ... \n", + "10398 E02006876 \n", + "10399 E02006876 \n", + "10400 E02006876 \n", + "10401 E02006876 \n", + "10402 E02006876 \n", + "\n", + " Middle layer Super Output Areas label MSOA of workplace code \\\n", + "0 Leeds 001 E02002330 \n", + "1 Leeds 001 E02002330 \n", + "2 Leeds 001 E02002331 \n", + "3 Leeds 001 E02002332 \n", + "4 Leeds 001 E02002333 \n", + "... ... ... \n", + "10398 Leeds 112 E02006852 \n", + "10399 Leeds 112 E02006861 \n", + "10400 Leeds 112 E02006875 \n", + "10401 Leeds 112 E02006876 \n", + "10402 Leeds 112 E02006876 \n", + "\n", + " MSOA of workplace label Place of work indicator (4 categories) code \\\n", + "0 Leeds 001 1 \n", + "1 Leeds 001 3 \n", + "2 Leeds 002 3 \n", + "3 Leeds 003 3 \n", + "4 Leeds 004 3 \n", + "... ... ... \n", + "10398 Leeds 109 3 \n", + "10399 Leeds 110 3 \n", + "10400 Leeds 111 3 \n", + "10401 Leeds 112 1 \n", + "10402 Leeds 112 3 \n", + "\n", + " Cencus_count ACBM_count Dist \n", + "0 1572 0.0 0.000000 \n", + "1 30 0.0 0.000000 \n", + "2 366 0.0 3532.892984 \n", + "3 6 0.0 20083.427194 \n", + "4 2 0.0 19168.244335 \n", + "... ... ... ... \n", + "10398 6 5.0 7882.022965 \n", + "10399 8 4.0 5685.936850 \n", + "10400 471 88.0 2992.168008 \n", + "10401 2243 29.0 0.000000 \n", + "10402 233 29.0 0.000000 \n", + "\n", + "[10403 rows x 8 columns]" + ] + }, + "execution_count": 154, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Join the distances to the combined dataframe\n", + "Combine_Df_MSOA = pd.merge(Combine_Df_MSOA, distances, left_on=[\"Middle layer Super Output Areas code\", \"MSOA of workplace code\"], right_on=[\"Orig\", \"Dest\"], how=\"left\")\n", + "Combine_Df_MSOA.drop(columns=[\"Orig\", \"Dest\"], inplace=True)\n", + "Combine_Df_MSOA" + ] + }, + { + "cell_type": "code", + "execution_count": 155, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Census counts: 326885 \n", + "Current ACBM counts: 98431\n", + "The R^2 value is: 0.02268671717234933\n", + "The RMSE value is: 172.01178789952573\n", + "The MAE value is: 26.782082091704314\n" + ] + } + ], + "source": [ + "# calculate the R^2, RMSE and MAE values at MSOA level for the comparison\n", + "\n", + "sum(Combine_Df_MSOA[\"Cencus_count\"])\n", + "sum(Combine_Df_MSOA[\"ACBM_count\"])\n", + "print(\n", + " \"Census counts:\",\n", + " sum(Combine_Df_MSOA[\"Cencus_count\"]),\n", + " \"\\nCurrent ACBM counts:\",\n", + " int (sum(Combine_Df_MSOA[\"ACBM_count\"]),)\n", + " )\n", + "\n", + "r2 = np.corrcoef(Combine_Df_MSOA[\"Cencus_count\"], Combine_Df_MSOA[\"ACBM_count\"])[0, 1] ** 2\n", + "print(\"The R^2 value is: \", r2)\n", + "\n", + "rmse = np.sqrt(np.mean((Combine_Df_MSOA[\"Cencus_count\"] - Combine_Df_MSOA[\"ACBM_count\"]) ** 2))\n", + "print(\"The RMSE value is: \", rmse)\n", + "\n", + "mes = np.mean(np.abs(Combine_Df_MSOA[\"Cencus_count\"] - Combine_Df_MSOA[\"ACBM_count\"]))\n", + "print(\"The MAE value is: \", mes)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 156, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Middle layer Super Output Areas codeMiddle layer Super Output Areas labelMSOA of workplace codeMSOA of workplace labelPlace of work indicator (4 categories) codeCencus_countACBM_countDist
0E02002330Leeds 001E02002330Leeds 001115720.00.000000
1E02002330Leeds 001E02002330Leeds 0013300.00.000000
2E02002330Leeds 001E02002331Leeds 00233660.03532.892984
3E02002330Leeds 001E02002332Leeds 003360.020083.427194
4E02002330Leeds 001E02002333Leeds 004320.019168.244335
...........................
10398E02006876Leeds 112E02006852Leeds 109365.07882.022965
10399E02006876Leeds 112E02006861Leeds 110384.05685.936850
10400E02006876Leeds 112E02006875Leeds 111347188.02992.168008
10401E02006876Leeds 112E02006876Leeds 1121224329.00.000000
10402E02006876Leeds 112E02006876Leeds 112323329.00.000000
\n", + "

10403 rows × 8 columns

\n", + "
" + ], + "text/plain": [ + " Middle layer Super Output Areas code \\\n", + "0 E02002330 \n", + "1 E02002330 \n", + "2 E02002330 \n", + "3 E02002330 \n", + "4 E02002330 \n", + "... ... \n", + "10398 E02006876 \n", + "10399 E02006876 \n", + "10400 E02006876 \n", + "10401 E02006876 \n", + "10402 E02006876 \n", + "\n", + " Middle layer Super Output Areas label MSOA of workplace code \\\n", + "0 Leeds 001 E02002330 \n", + "1 Leeds 001 E02002330 \n", + "2 Leeds 001 E02002331 \n", + "3 Leeds 001 E02002332 \n", + "4 Leeds 001 E02002333 \n", + "... ... ... \n", + "10398 Leeds 112 E02006852 \n", + "10399 Leeds 112 E02006861 \n", + "10400 Leeds 112 E02006875 \n", + "10401 Leeds 112 E02006876 \n", + "10402 Leeds 112 E02006876 \n", + "\n", + " MSOA of workplace label Place of work indicator (4 categories) code \\\n", + "0 Leeds 001 1 \n", + "1 Leeds 001 3 \n", + "2 Leeds 002 3 \n", + "3 Leeds 003 3 \n", + "4 Leeds 004 3 \n", + "... ... ... \n", + "10398 Leeds 109 3 \n", + "10399 Leeds 110 3 \n", + "10400 Leeds 111 3 \n", + "10401 Leeds 112 1 \n", + "10402 Leeds 112 3 \n", + "\n", + " Cencus_count ACBM_count Dist \n", + "0 1572 0.0 0.000000 \n", + "1 30 0.0 0.000000 \n", + "2 366 0.0 3532.892984 \n", + "3 6 0.0 20083.427194 \n", + "4 2 0.0 19168.244335 \n", + "... ... ... ... \n", + "10398 6 5.0 7882.022965 \n", + "10399 8 4.0 5685.936850 \n", + "10400 471 88.0 2992.168008 \n", + "10401 2243 29.0 0.000000 \n", + "10402 233 29.0 0.000000 \n", + "\n", + "[10403 rows x 8 columns]" + ] + }, + "execution_count": 156, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Combine_Df_MSOA" + ] + }, + { + "cell_type": "code", + "execution_count": 163, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Middle layer Super Output Areas codeMiddle layer Super Output Areas labelMSOA of workplace codeMSOA of workplace labelPlace of work indicator (4 categories) codeCencus_countACBM_countDistdiffdiff_abs
0E02002330Leeds 001E02002330Leeds 001115720.00.0000001572.01572.0
1E02002330Leeds 001E02002330Leeds 0013300.00.00000030.030.0
2E02002330Leeds 001E02002331Leeds 00233660.03532.892984366.0366.0
3E02002330Leeds 001E02002332Leeds 003360.020083.4271946.06.0
4E02002330Leeds 001E02002333Leeds 004320.019168.2443352.02.0
.................................
10398E02006876Leeds 112E02006852Leeds 109365.07882.0229651.01.0
10399E02006876Leeds 112E02006861Leeds 110384.05685.9368504.04.0
10400E02006876Leeds 112E02006875Leeds 111347188.02992.168008383.0383.0
10401E02006876Leeds 112E02006876Leeds 1121224329.00.0000002214.02214.0
10402E02006876Leeds 112E02006876Leeds 112323329.00.000000204.0204.0
\n", + "

10403 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " Middle layer Super Output Areas code \\\n", + "0 E02002330 \n", + "1 E02002330 \n", + "2 E02002330 \n", + "3 E02002330 \n", + "4 E02002330 \n", + "... ... \n", + "10398 E02006876 \n", + "10399 E02006876 \n", + "10400 E02006876 \n", + "10401 E02006876 \n", + "10402 E02006876 \n", + "\n", + " Middle layer Super Output Areas label MSOA of workplace code \\\n", + "0 Leeds 001 E02002330 \n", + "1 Leeds 001 E02002330 \n", + "2 Leeds 001 E02002331 \n", + "3 Leeds 001 E02002332 \n", + "4 Leeds 001 E02002333 \n", + "... ... ... \n", + "10398 Leeds 112 E02006852 \n", + "10399 Leeds 112 E02006861 \n", + "10400 Leeds 112 E02006875 \n", + "10401 Leeds 112 E02006876 \n", + "10402 Leeds 112 E02006876 \n", + "\n", + " MSOA of workplace label Place of work indicator (4 categories) code \\\n", + "0 Leeds 001 1 \n", + "1 Leeds 001 3 \n", + "2 Leeds 002 3 \n", + "3 Leeds 003 3 \n", + "4 Leeds 004 3 \n", + "... ... ... \n", + "10398 Leeds 109 3 \n", + "10399 Leeds 110 3 \n", + "10400 Leeds 111 3 \n", + "10401 Leeds 112 1 \n", + "10402 Leeds 112 3 \n", + "\n", + " Cencus_count ACBM_count Dist diff diff_abs \n", + "0 1572 0.0 0.000000 1572.0 1572.0 \n", + "1 30 0.0 0.000000 30.0 30.0 \n", + "2 366 0.0 3532.892984 366.0 366.0 \n", + "3 6 0.0 20083.427194 6.0 6.0 \n", + "4 2 0.0 19168.244335 2.0 2.0 \n", + "... ... ... ... ... ... \n", + "10398 6 5.0 7882.022965 1.0 1.0 \n", + "10399 8 4.0 5685.936850 4.0 4.0 \n", + "10400 471 88.0 2992.168008 383.0 383.0 \n", + "10401 2243 29.0 0.000000 2214.0 2214.0 \n", + "10402 233 29.0 0.000000 204.0 204.0 \n", + "\n", + "[10403 rows x 10 columns]" + ] + }, + "execution_count": 163, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Combine_Df_MSOA['diff'] = Combine_Df_MSOA['Cencus_count'] - Combine_Df_MSOA['ACBM_count']\n", + "Combine_Df_MSOA['diff_abs'] = abs(Combine_Df_MSOA['diff'])\n", + "Combine_Df_MSOA" + ] + }, + { + "cell_type": "code", + "execution_count": 157, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ACBM average travel distance 7941.936440896207 \n", + " Census average travel distance 2553.8742505636333\n" + ] + } + ], + "source": [ + "# average travel distance calcuation\n", + "\n", + "Census_distance = sum(Combine_Df_MSOA[\"Cencus_count\"] * Combine_Df_MSOA[\"Dist\"]) / sum(\n", + " Combine_Df_MSOA[\"Cencus_count\"]\n", + ")\n", + "\n", + "ACBM_distance = sum(Combine_Df_MSOA[\"ACBM_count\"] * Combine_Df_MSOA[\"Dist\"]) / sum(\n", + " Combine_Df_MSOA[\"ACBM_count\"]\n", + ")\n", + "\n", + "print(\n", + " \"ACBM average travel distance\",\n", + " ACBM_distance,\n", + " \"\\n Census average travel distance\",\n", + " Census_distance,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 166, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Cencus_countACBM_countdiffdiff_absdiff_percentagediff_per_abs
Middle layer Super Output Areas code
E0200233024851057.01428.02892.00.5746481.163783
E020023312426836.01590.02746.00.6554001.131904
E020023322412823.01589.02317.00.6587890.960614
E0200233330911204.01887.03003.00.6104820.971530
E0200233428951035.01860.03110.00.6424871.074266
.....................
E0200243725481010.01538.02032.00.6036110.797488
E0200685255081528.03980.04888.00.7225850.887436
E020068614196934.03262.03846.00.7774070.916587
E020068753814971.02843.03749.00.7454120.982958
E020068763997826.03171.03575.00.7933450.894421
\n", + "

107 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " Cencus_count ACBM_count diff \\\n", + "Middle layer Super Output Areas code \n", + "E02002330 2485 1057.0 1428.0 \n", + "E02002331 2426 836.0 1590.0 \n", + "E02002332 2412 823.0 1589.0 \n", + "E02002333 3091 1204.0 1887.0 \n", + "E02002334 2895 1035.0 1860.0 \n", + "... ... ... ... \n", + "E02002437 2548 1010.0 1538.0 \n", + "E02006852 5508 1528.0 3980.0 \n", + "E02006861 4196 934.0 3262.0 \n", + "E02006875 3814 971.0 2843.0 \n", + "E02006876 3997 826.0 3171.0 \n", + "\n", + " diff_abs diff_percentage diff_per_abs \n", + "Middle layer Super Output Areas code \n", + "E02002330 2892.0 0.574648 1.163783 \n", + "E02002331 2746.0 0.655400 1.131904 \n", + "E02002332 2317.0 0.658789 0.960614 \n", + "E02002333 3003.0 0.610482 0.971530 \n", + "E02002334 3110.0 0.642487 1.074266 \n", + "... ... ... ... \n", + "E02002437 2032.0 0.603611 0.797488 \n", + "E02006852 4888.0 0.722585 0.887436 \n", + "E02006861 3846.0 0.777407 0.916587 \n", + "E02006875 3749.0 0.745412 0.982958 \n", + "E02006876 3575.0 0.793345 0.894421 \n", + "\n", + "[107 rows x 6 columns]" + ] + }, + "execution_count": 166, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sum_dj = Combine_Df_MSOA.groupby(\"Middle layer Super Output Areas code\").agg(\n", + " {\"Cencus_count\": \"sum\", \"ACBM_count\": \"sum\",'diff': 'sum','diff_abs': 'sum'}\n", + ")\n", + "sum_dj[\"diff_percentage\"] = sum_dj[\"diff\"] / sum_dj[\"Cencus_count\"]\n", + "sum_dj[\"diff_per_abs\"] = abs(sum_dj[\"diff_abs\"]) / sum_dj[\"Cencus_count\"]\n", + "\n", + "\n", + "sum_dj" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- • absolute map flow differences:\n", + "\n", + "$$\n", + "Gi=\\sum\\limits_{j}(|(T_{ij}-T^{obs}_{ij})|)\n", + "$$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 165, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 165, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAvIAAAJ8CAYAAACcIUXkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd5xcZfX48c9zp2zv2ZKeTa8QSCgBQksgYgClBWyASP2hfkEFxYag2BXwC6iIil9BkSq9BEIJJEAgCWmk97abZHudnbnn98fdnexk6+xO2Z09b18j2Tt37n3mTjv3uec5jxERQSmllFJKKdWvWPFugFJKKaWUUip8GsgrpZRSSinVD2kgr5RSSimlVD+kgbxSSimllFL9kAbySimllFJK9UMayCullFJKKdUPaSCvlFJKKaVUP6SBvFJKKaWUUv2QO94NUEoppZRSia+hoQGfzxeXfXu9XpKTk+Oy72jSQF4ppZRSSkVVQ0MDeSmp1CFx2X9RURHbtm1LuGBeA3mllFJKKRVVPp+POoQvkYYXE9t9Izy6fz8+n08DeaWUUkoppXoiGRPzQD6RB4Qm8nNTSimllFIqYWkgr5RSSimlVD+kqTVKKaWUUiomLAyWiXFqTXzG18aE9sgrpZRSSinVD2mPvFJKKaWUigmL2PciJ3KvdSI/N6WUUkoppRKWBvJKKaWUUkr1Q5pao5RSSimlYsIYsGI71tWpWp+gA161R14ppZRSSql+SHvklVJKKaVUTOhg18hK5OemlFJKKaVUwtIeeaWUUkopFROWicOEUKA58koppZRSSqm+QwN5pZRSSiml+iFNrVFKKaWUUjGhg10jK5Gfm1JKKaWUUglLe+SVUkoppVRMWHGYECqRe60T+bkppZRSSimVsDSQV0oppZRSqh/S1BqllFJKKRUTOtg1shL5uSmllFJKKZWwtEdeKaWUUkrFhDEGE+OZXWM8tjamtEdeKaWUUkqpfkh75JVSSimlVExojnxkJfJzU0oppZRSKmFpIK+UUkoppVQ/pKk1SimllFIqJnRm18hK5OemlFJKKaVUwtIeeaWUUkopFROG2Pcia/lJ1WPbt2/HGMNvf/vbmO73yiuvZNSoUTHdZ6z95Cc/iXkt2q4YY/jJT34S/Pvhhx/GGMP27dtD1vvNb37D6NGjcblcTJ8+HQC/38+tt97K8OHDsSyLz3/+8zFrd180atQorrzyyohu85VXXmH69OkkJydjjKGioqJPfFbi9T2h+rcjv2+UUgOPBvK99MADD2CM4YQTToh3UyLmpZde0h+HKHrttde49dZbOfnkk/n73//Oz3/+cwD+9re/8Zvf/IaLL76Yf/zjH9x8881xbmliOXToEAsWLCAlJYX777+ff/7zn6SlpcW7WVGzbt06fvKTn7Q5iUwkPp+Pe++9l2OOOYbMzEyys7OZMmUK1157LevXrw+u13JC3XJLTk5m/PjxfP3rX6ekpKTNdktKSvjOd77DxIkTSU1NJS0tjRkzZvCzn/2MioqKGD7DyKmqquKOO+7g6KOPJj09nZSUFKZOncp3v/td9u7dG+/mKaV6SFNreunRRx9l1KhRfPjhh2zevJmxY8fGu0m99tJLL3H//fdrMB8BX/nKV7jssstISkoKLlu0aBGWZfHXv/4Vr9cbsnzo0KHcfffd8Whqn7NhwwYsK3J9DcuWLaO6upqf/vSnzJ07N2Lb7avWrVvHHXfcwemnnx73Kw7RctFFF/Hyyy/zhS98gWuuuYampibWr1/PCy+8wEknncTEiRND1r/zzjspLi6moaGBd999lz/+8Y+89NJLrFmzhtTUVMB5n3z2s5+lpqaGL3/5y8yYMQOAjz76iF/+8pe88847vPbaazF/rr2xdetW5s6dy86dO7nkkku49tpr8Xq9rFq1ir/+9a8888wzbNy4Md7NVAOEZQxWjK+mJ3KvtQbyvbBt2zaWLFnC008/zXXXXcejjz7K7bffHu9mqT7E5XLhcrlClpWWlpKSkhISxLcsz87Ojti+RYSGhgZSUlIits1Yan3yEwmlpaUAET3GKn6WLVvGCy+8wF133cX3v//9kPvuu+++dnvOzznnHGbOnAnA1VdfTV5eHr///e959tln+cIXvkBFRQUXXHABLpeLFStWtDkRuOuuu/jLX/4StecUDX6/nwsvvJCSkhLeeustTjnllJD777rrLn71q1/FqXVKqd5K5JOUqHv00UfJyclh/vz5XHzxxTz66KOdrn/33XczcuRIUlJSOO2001izZk3I/fv37+erX/0qw4YNIykpicGDB/O5z32uzaXxBx54gClTppCUlMSQIUO48cYbu7zc+9Zbb2GM4a233gpZ3pKb+/DDDwNObv39998PEHIpuoVt29xzzz1MmTKF5ORkCgsLue666ygvL+90/7/97W8xxrBjx44299122214vd7gNhYvXswll1zCiBEjSEpKYvjw4dx8883U19d3uo8jn0tr7eWS7tmzh6uuuorCwkKSkpKYMmUKf/vb3zrdR4vGxkZuvvlm8vPzycjI4Pzzz2f37t1t1jsyR94Yw9///ndqa2uDx7ZlnTfffJO1a9cGl7e8Vt095qNGjeLcc8/l1VdfZebMmaSkpPDnP/8ZgIqKCm666SaGDx9OUlISY8eO5Ve/+hW2bbc5fr/97W958MEHGTNmDElJSRx33HEsW7aszXNbv349CxYsID8/n5SUFCZMmMAPfvCDiB3jI3PkW47Te++9x7e+9S3y8/NJS0vjggsu4MCBA51u6/TTT+eKK64A4LjjjsMY02n+fW1tLd/+9reDx2vChAn89re/RUSC61x44YUce+yxIY8777zzMMbw3HPPBZd98MEHGGN4+eWXu/W8u/qeAOfYX3zxxeTm5pKcnMzMmTND9vnwww9zySWXAHDGGWeEvKe+9a1vkZeXF/JcvvGNb2CM4Q9/+ENwWUlJCcYY/vjHPwaXNTY2cvvttzN27NjgZ/PWW2+lsbGxTRsfeeQRZsyYQUpKCrm5uVx22WXs2rUrZJ3TTz+dqVOnsm7dOs444wxSU1MZOnQov/71r7s8Tlu2bAHg5JNPbnOfy+UiLy+vy22ceeaZgNMpA/DnP/+ZPXv28Pvf/75NEA9QWFjID3/4w063uWrVKq688kpGjx5NcnIyRUVFXHXVVRw6dChkvZYxPps3b+bKK68kOzubrKwsvvrVr1JXVxeybne/b9rz1FNP8cknn/CDH/ygTRAPkJmZyV133RWy7IMPPuAzn/kMWVlZpKamctppp/Hee+/1uP0LFy7klFNOITs7m/T0dCZMmBBy8tXRWKL2frc2bdrERRddRFFREcnJyQwbNozLLruMysrKbh0PFX9WnG6JSnvke+HRRx/lwgsvxOv18oUvfIE//vGPLFu2jOOOO67Nuv/3f/9HdXU1N954Iw0NDdx7772ceeaZrF69msLCQsC5TLx27Vq+8Y1vMGrUKEpLS1m4cCE7d+4MXhr/yU9+wh133MHcuXO54YYb2LBhQ3C/7733Hh6Pp1fP6brrrmPv3r0sXLiQf/7zn+3e//DDD/PVr36Vb37zm2zbto377ruPFStWdLr/BQsWcOutt/L4449zyy23hNz3+OOPc/bZZ5OTkwPAE088QV1dHTfccAN5eXl8+OGH/O///i+7d+/miSee6NXza1FSUsKJJ56IMYavf/3r5Ofn8/LLL/O1r32Nqqoqbrrppk4ff/XVV/PII4/wxS9+kZNOOolFixYxf/78Lvf7z3/+kwcffJAPP/yQhx56CIBjjjmGf/7zn9x1113U1NTwi1/8AoBJkyYB4R3zDRs28IUvfIHrrruOa665hgkTJlBXV8dpp53Gnj17uO666xgxYgRLlizhtttuY9++fdxzzz0hbfzXv/5FdXU11113HcYYfv3rX3PhhReydevW4L5WrVrF7Nmz8Xg8XHvttYwaNYotW7bw/PPPB4OC3h7jjnzjG98gJyeH22+/ne3bt3PPPffw9a9/nf/85z8dPuYHP/gBEyZM4MEHHwymV4wZM6bddUWE888/nzfffJOvfe1rTJ8+nVdffZVbbrmFPXv2BFOfZs+ezbPPPktVVRWZmZmICO+99x6WZbF48WLOP/98wDkxtSyr3YDzSN35nli7di0nn3wyQ4cO5Xvf+x5paWk8/vjjfP7zn+epp57iggsu4NRTT+Wb3/wmf/jDH/j+978ffC9NmjSJ8vJy7r77btauXcvUqVND2rh48WK++c1vBpcBnHrqqYBzQnn++efz7rvvcu211zJp0iRWr17N3XffzcaNG/nvf/8bfB533XUXP/rRj1iwYAFXX301Bw4c4H//93859dRTWbFiRchVkfLycj7zmc9w4YUXsmDBAp588km++93vMm3aNM4555wOj9XIkSMB53v45JNPxu0O/+es5WSgJeh/7rnnSElJ4eKLLw57Wy0WLlzI1q1b+epXv0pRURFr167lwQcfZO3atbz//vttBugvWLCA4uJifvGLX7B8+XIeeughCgoKQnrJe/p90/KcwEnz645FixZxzjnnMGPGDG6//XYsy+Lvf/87Z555JosXL+b4448Pq/1r167l3HPP5aijjuLOO+8kKSmJzZs3tzkx6A6fz8e8efNobGzkG9/4BkVFRezZs4cXXniBiooKsrKywt6mUv2eqB756KOPBJCFCxeKiIht2zJs2DD5n//5n5D1tm3bJoCkpKTI7t27g8s/+OADAeTmm28WEZHy8nIB5De/+U2H+ywtLRWv1ytnn322BAKB4PL77rtPAPnb3/4WXHbFFVfIyJEjg3+/+eabAsibb77Zbvv+/ve/B5fdeOON0t5bY/HixQLIo48+GrL8lVdeaXf5kWbNmiUzZswIWfbhhx8KIP/3f/8XXFZXV9fmsb/4xS/EGCM7duwILrv99ttD2tnec2kByO233x78+2tf+5oMHjxYDh48GLLeZZddJllZWe22ocXKlSsFkP/3//5fyPIvfvGLbfbz97//XQDZtm1bcNkVV1whaWlpbbZ72mmnyZQpU0KWhXPMR44cKYC88sorIev+9Kc/lbS0NNm4cWPI8u9973vicrlk586dInL4+OXl5UlZWVlwvWeffVYAef7554PLTj31VMnIyAh5PUScz0GL3hzjludzxRVXBP9uOZZz584N2c/NN98sLpdLKioqOt1ey+OXLVsWsvzIz8p///tfAeRnP/tZyHoXX3yxGGNk8+bNIiKybNkyAeSll14SEZFVq1YJIJdccomccMIJwcedf/75cswxx3Tatu5+T4iIzJkzR6ZNmyYNDQ3BZbZty0knnSTjxo0LLnviiSfa/cyXlpYKIA888ICIiFRUVIhlWXLJJZdIYWFhcL1vfvObkpubGzzW//znP8WyLFm8eHHI9v70pz8JIO+9956IiGzfvl1cLpfcddddIeutXr1a3G53yPLTTjutzee/sbFRioqK5KKLLur0mNm2HXx8YWGhfOELX5D777+/zXtS5PBr//rrr8uBAwdk165d8thjj0leXl7IMc/JyZGjjz660/12pb339b///W8B5J133gkua/n+uuqqq0LWveCCCyQvLy/4dzjfN+055phjJCsrq1ttt21bxo0bJ/PmzQv5jNXV1UlxcbGcddZZYbf/7rvvFkAOHDjQ4X7b+54Uafu7tWLFCgHkiSee6NbzUX1LZWWlAPJDb7b8LCknprcferMFkMrKyngfhohL5KsNUfXoo49SWFjIGWecATgpE5deeimPPfYYgUCgzfqf//znGTp0aPDv448/nhNOOIGXXnoJIJgz/dZbb3WYpvL666/j8/m46aabQgYBXnPNNWRmZvLiiy9G8im28cQTT5CVlcVZZ53FwYMHg7cZM2aQnp7Om2++2enjL730Uj7++ONgLxjAf/7zH5KSkvjc5z4XXNY6p7u2tpaDBw9y0kknISKsWLGi189DRHjqqac477zzEJGQ5zJv3jwqKytZvnx5h49vec1aei5b9LSHuTPhHvPi4mLmzZvXZhuzZ88mJycnZBtz584lEAjwzjvvhKx/6aWXBq+OgNPzDM6AOYADBw7wzjvvcNVVVzFixIiQx7b0Nvb2GHfm2muvDenVnD17NoFAoN20rZ546aWXcLlcbV7fb3/724hIMEXmmGOOIT09PXj8Fi9ezLBhw7j88stZvnw5dXV1iAjvvvtu8Bh2pavvibKyMhYtWsSCBQuorq4OHtNDhw4xb948Nm3axJ49ezrdR35+PhMnTgy2+7333sPlcnHLLbdQUlLCpk2bgs/nlFNOCR7rJ554gkmTJjFx4sSQ17MlPaXlvfj0009j2zYLFiwIWa+oqIhx48a1ec+mp6fz5S9/Ofi31+vl+OOPD77fOmKM4dVXX+VnP/sZOTk5/Pvf/+bGG29k5MiRXHrppe2mG86dO5f8/HyGDx/OZZddRnp6Os8880zwmFdVVZGRkdHpfrvS+vuroaGBgwcPcuKJJwK0+56//vrrQ/6ePXs2hw4doqqqCuj99004z2nlypVs2rSJL37xixw6dCj42tXW1jJnzhzeeeedkHS87rS/5erLs88+2+ax4WrpcX/11VfbpO+o/qNlZtdY3xKVptb0QCAQ4LHHHuOMM84I5lYCnHDCCfzud7/jjTfe4Oyzzw55zLhx49psZ/z48Tz++OOAM7DvV7/6Fd/+9rcpLCzkxBNP5Nxzz+Xyyy+nqKgIIBioTJgwIWQ7Xq+X0aNHRyyQ6cimTZuorKykoKCg3ftbBhN25JJLLuFb3/oW//nPf/j+97+PiPDEE09wzjnnkJmZGVxv586d/PjHP+a5555rc1ITiTzIAwcOUFFRwYMPPsiDDz4Y9nPZsWMHlmW1Sc048nWJhHCPeXFxcbvbWLVqFfn5+d3axpHBeUtQ3/JatARYLWkZ7entMe5MV+3rrR07djBkyJA2wU9LekrL58zlcjFr1qxgCsrixYuZPXs2p5xyCoFAgPfff5/CwkLKysq6Hch39T2xefNmRIQf/ehH/OhHP2p3G6WlpSEnA+2ZPXt2MEBcvHgxM2fOZObMmeTm5rJ48WIKCwv55JNP+OIXvxh8zKZNm/j000+7fB9t2rQJEWn3uQBt0u+GDRvWJt0kJyeHVatWdfocwPne/MEPfsAPfvAD9u3bx9tvv829997L448/jsfj4ZFHHglZ//7772f8+PG43W4KCwuZMGFCSKdIZmYm1dXVXe63M2VlZdxxxx089thjbd7j7X1/dfZ+zszM7PX3TWZmZpcnRS1aTuJaxpO0p7KyMuREv6v2X3rppTz00ENcffXVfO9732POnDlceOGFXHzxxWFXpSouLuZb3/oWv//973n00UeZPXs2559/Pl/+8pc1rUYNWBrI98CiRYvYt28fjz32GI899lib+x999NE2gXx33HTTTZx33nn897//5dVXX+VHP/oRv/jFL1i0aBHHHHNMr9rc0cRJ7V096Iht2xQUFHQ4qLejH/gWQ4YMYfbs2Tz++ON8//vf5/3332fnzp0huaCBQICzzjqLsrIyvvvd7zJx4kTS0tLYs2cPV155Zac9Ot19ji3b+PKXv9zhD9ZRRx3V6XOJlXCPeXsVamzb5qyzzuLWW29tdxvjx48P+fvIKjstpNXgyK5E8xhHon2Rcsopp3DXXXfR0NDA4sWL+cEPfkB2djZTp04NBsRAtwP5rrQc1+985zttrry06E4J3FNOOYW//OUvbN26NXgCYozhlFNOYfHixQwZMgTbtkPabds206ZN4/e//3272xw+fHhwvZbBve29Vunp6SF/R+r1HDx4MJdddhkXXXQRU6ZM4fHHH+fhhx8OyZ0//vjjg1Vr2jNx4kRWrlyJz+drU1WquxYsWMCSJUu45ZZbmD59Ounp6di2zWc+85l2v7+i/X6eOHEiK1asYNeuXcHXqCMt7fvNb34TnKjuSOG+fikpKbzzzju8+eabvPjii7zyyiv85z//4cwzz+S1117D5XKF9fv0u9/9jiuvvJJnn32W1157jW9+85v84he/4P3332fYsGGdPj/VN8Rj8Gkip59oIN8Djz76KAUFBcHqLq09/fTTPPPMM/zpT38KCapaejpa27hxY5v6zmPGjOHb3/423/72t9m0aRPTp0/nd7/7HY888khwcNeGDRsYPXp08DE+n49t27Z1Whu7pZfkyMvN7fXid/SlOmbMGF5//XVOPvnkHpc0vPTSS/l//+//sWHDBv7zn/+QmprKeeedF7x/9erVbNy4kX/84x9cfvnlweULFy7sctvdfY4tlR8CgUCP6omPHDkS27bZsmVLSK/Yhg0bwt5WVyJxzMeMGUNNTU3Eaqe3vPfaq6bSorfHOJ5GjhzJ66+/TnV1dUivfMsEQy2fQ3ACdJ/Px7///W/27NkTDHxPPfXUYCA/fvz4YEDfla6+J1qOvcfj6fK4djbrcUs7Fy5cyLJly/je974XbPcf//hHhgwZEpwEqcWYMWP45JNPmDNnTqfbHjNmDCJCcXFxm5PEWPB4PBx11FFs2rQpmNLTXeeddx5Lly7lqaee4gtf+ELY+y4vL+eNN97gjjvu4Mc//nFweXuva3f19vvmvPPO49///jePPPIIt912W6frtvT6Z2ZmRvRza1kWc+bMYc6cOfz+97/n5z//OT/4wQ948803mTt3bli/TwDTpk1j2rRp/PCHP2TJkiWcfPLJ/OlPf+JnP/tZxNqsVH+RyCcpUVFfX8/TTz/Nueeey8UXX9zm9vWvf53q6uqQUnAA//3vf0NyVz/88EM++OCDYFWGuro6GhoaQh4zZswYMjIygqXd5s6di9fr5Q9/+ENIb81f//pXKisrO61iMHLkSFwuV5t86AceeKDNui2zXR75pbpgwQICgQA//elP2zzG7/d3a8bDiy66CJfLxb///W+eeOIJzj333JDZNVt6d1o/PxHh3nvv7XLbmZmZDBo0qMvn6HK5uOiii3jqqafaDUa7KmXY8pq1LtUHtKn+EgmROOYLFixg6dKlvPrqq23uq6iowO/3h9Wm/Px8Tj31VP72t7+xc+fOkPtaXrfeHuN4+uxnP0sgEOC+++4LWX733XdjjAmppHLCCSfg8Xj41a9+RW5uLlOmTAGcQPn999/n7bffDqs3vqvviYKCAk4//XT+/Oc/s2/fvjaPb31cO/ocg5Oi0DL5WFNTU7CizuzZs9myZQtPPvkkJ554Ykhv9oIFC9izZ0+7ddTr6+upra0FnLKcLpeLO+64o02vsoi0KcPYU5s2bWrz/gPn+S5dupScnJwurxIe6frrr2fw4MF8+9vfbneCpNLS0k6Dxfa+v6B33w29/b65+OKLmTZtGnfddRdLly5tc391dXWwbOyMGTMYM2YMv/3tb6mpqWmzbk8+t2VlZW2WtfT2t/y2tZxAtP7uDgQCbdLyqqqq2nxfTZs2Dcuy2i2BqvomCxOXW6LSHvkwPffcc1RXVwdLyx3pxBNPJD8/n0cffZRLL700uHzs2LGccsop3HDDDTQ2NnLPPfeQl5cXTHfYuHEjc+bMYcGCBUyePBm3280zzzxDSUkJl112GeAEULfddht33HEHn/nMZzj//PPZsGEDDzzwAMcdd1zIgLEjZWVlcckll/C///u/GGMYM2YML7zwQrt5yi29cN/85jeZN28eLpeLyy67jNNOO43rrruOX/ziF6xcuZKzzz4bj8fDpk2beOKJJ7j33nu7LNtWUFDAGWecwe9//3uqq6tDjhE4l4HHjBnDd77zHfbs2UNmZiZPPfVUt/Ofr776an75y19y9dVXM3PmTN555512f5B/+ctf8uabb3LCCSdwzTXXMHnyZMrKyli+fDmvv/56uz8+LaZPn84XvvAFHnjgASorKznppJN444032Lx5c7faGI5IHPNbbrmF5557jnPPPZcrr7ySGTNmUFtby+rVq3nyySfZvn07gwYNCqtdf/jDHzjllFM49thjufbaaykuLmb79u28+OKLrFy5EujdMY6n8847jzPOOIMf/OAHbN++naOPPprXXnuNZ599lptuuikkVzk1NZUZM2bw/vvvB2vIg9OzXVtbS21tbViBfFffE+DkeZ9yyilMmzaNa665htGjR1NSUsLSpUvZvXs3n3zyCeC8T10uF7/61a+orKwkKSmJM888MzjeYvbs2Tz22GNMmzYt2CN67LHHkpaWxsaNG0Py48EpX/j4449z/fXX8+abb3LyyScTCARYv349jz/+eHD+gjFjxvCzn/2M2267je3bt/P5z3+ejIwMtm3bxjPPPMO1117Ld77znZ69OK205PCfc845zJ49m9zcXPbs2cM//vEP9u7dyz333NNh2kdHcnJyeOaZZ/jsZz/L9OnTQ2Z2Xb58Of/+97+ZNWtWh4/PzMzk1FNP5de//jVNTU0MHTqU1157LWQsVbh6+33j8Xh4+umnmTt3LqeeeioLFizg5JNPxuPxsHbtWv71r3+Rk5PDXXfdhWVZPPTQQ5xzzjlMmTKFr371qwwdOpQ9e/bw5ptvkpmZyfPPPx9W+++8807eeecd5s+fz8iRIyktLeWBBx5g2LBhwbr2U6ZM4cQTT+S2226jrKyM3NxcHnvssTZB+6JFi/j617/OJZdcwvjx4/H7/fzzn/8MdhwoNSDFsEJOQjjvvPMkOTlZamtrO1znyiuvFI/HIwcPHgyWlfvNb34jv/vd72T48OGSlJQks2fPlk8++ST4mIMHD8qNN94oEydOlLS0NMnKypITTjhBHn/88Tbbv++++2TixIni8XiksLBQbrjhBikvLw9Z58iSeiIiBw4ckIsuukhSU1MlJydHrrvuOlmzZk2bko1+v1++8Y1vSH5+vhhj2pSifPDBB2XGjBmSkpIiGRkZMm3aNLn11ltl79693TqGf/nLXwSQjIwMqa+vb3P/unXrZO7cuZKeni6DBg2Sa665Rj755JM27Tyy/KSIUybta1/7mmRlZUlGRoYsWLAgWG7vyDJtJSUlcuONN8rw4cPF4/FIUVGRzJkzRx588MEun0N9fb1885vflLy8PElLS5PzzjtPdu3aFfHyky26c8xHjhwp8+fPb/fx1dXVctttt8nYsWPF6/XKoEGD5KSTTpLf/va34vP5RERC3qtHau/4rVmzRi644ALJzs6W5ORkmTBhgvzoRz8KWac3x7ij8pNHlo/sqLTqkbpbflLEOV4333yzDBkyRDwej4wbN05+85vfhJTka3HLLbcIIL/61a9Clo8dO1YA2bJlS5fPtbvfEy22bNkil19+uRQVFYnH45GhQ4fKueeeK08++WTIen/5y19k9OjR4nK52hyj+++/XwC54YYbQh4zd+5cAeSNN95os1+fzye/+tWvZMqUKZKUlCQ5OTkyY8YMueOOO9qUdXvqqafklFNOkbS0NElLS5OJEyfKjTfeKBs2bAiu09F7vr3X5EglJSXyy1/+Uk477TQZPHiwuN1uycnJkTPPPLPNcejote/I3r175eabb5bx48dLcnKypKamyowZM+Suu+7qsnzd7t27g5+LrKwsueSSS2Tv3r1tPkMt319HlmVs7zuju983nSkvL5cf//jHMm3aNElNTZXk5GSZOnWq3HbbbbJv376QdVesWCEXXnih5OXlSVJSkowcOVIWLFgQ8p7obvvfeOMN+dznPidDhgwRr9crQ4YMkS984QttyuFu2bJF5s6dK0lJSVJYWCjf//73ZeHChSHv261bt8pVV10lY8aMkeTkZMnNzZUzzjhDXn/99W4dAxVfLeUn70zKkV8n58b0dmdSTsKWnzQicRghppRSSimlBoyqqiqysrL4WXIOyZ2Ms4mGBhF+2FBOZWVlSJW8RKA58koppZRSSvVDmiOvlFJKKaViQstPRlYiPzellFJKKaUSlgbySimllFJK9UOaWqOUUkoppWLCMs4tpvuM7e5iKpGfm1JKKaWUUglLe+SVUkoppVRMGIj5TKuGxK20rj3ySimllFJK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InnBhEuhvCYzB3dcqKzPzLFFRERyRKk1IpI/wmVe0J1K+nvcynqVmhQRyQfGZD/VRak1IiKZZ0IRaFgMbtC/gwYjUFrl3/FERETyhGbkRSSvmEAI27AYzh6B+PDcD1herQWuIiJ5w8lBc8Dinbcu3q9MRAqWcQPe4tdw6dwPFimf+zFERETykGbkRSQvGcfF1rVBzznoPTu7g4RK1MFVRCSfKEfeV5qRF5G8ZYyDqayHSMXsDlAa9XdAIiIieUSBvIjkv8o6CITS29Y4UNng/V9dXEVEpIjpnrOI5D0TjGBLouml2ETrMBW12EiZSk6KiOQbx/Ee2T5nkSrer0xEiku0bvpKB44LZdWAF/yLiIgUM83Ii0hBMMZgG9phoAt6z028UXk1pohnXkRECp4Wu/pK73giUjBMMATR+olz340D5TXZH5SIiEiOKJAXkYJijMHUtHgB/cUqapQTLyIi84pSa0SkMFXUwlA/xAYgVAIVdbkekYiITMfkoLNr1jvJZk/xfmUiUtSMMVBR4wXxNS3exyIiIvOIZuRFpGCZkgoomWWzKBERyT4tdvWVZuRFRERERAqQZuRFREREJEvMyCPb5yxOmpEXERERESlACuRFRERERAqQUmtEREREJDu02NVXmpEXERERESlAmpEXERERkezQjLyvNCMvIiIiIlKAFMiLiIiIiBQgBfIiIiIikiUmR4/03HfffVx33XVUVFTQ0NDAu9/9bvbv3z9um6GhIbZs2UJtbS3l5eXccccdnDp1atw2R44cYfPmzZSWltLQ0MCnP/1pEonEuG22b9/ONddcQzgcZtmyZWzdujXtcY5SIC8iIiIiAuzYsYMtW7bw1FNPsW3bNuLxOLfffjv9/f1j29xzzz388pe/5Cc/+Qk7duzgxIkTvOc97xl7PplMsnnzZmKxGE8++STf+9732Lp1K5/73OfGtnnttdfYvHkzN998M7t37+buu+/mIx/5CI888siMxmustXbuX7aIiIiIyMR6enqorKyka9/TRCvKs3vu3j6qVr2e7u5uotHojPY9c+YMDQ0N7Nixg40bN9Ld3U19fT33338/733vewF46aWXWLVqFTt37uSGG27g4Ycf5h3veAcnTpygsbERgG9961vce++9nDlzhlAoxL333stDDz3E3r17x871vve9j66uLn7961+nPT7NyIuIiIhI0evp6Rn3GB4ennaf7u5uAGpqagDYtWsX8Xic2267bWybK664goULF7Jz504Adu7cydq1a8eCeIBNmzbR09PDCy+8MLbNxccY3Wb0GOlSIC8iIiIi2ZHDFPm2tjYqKyvHHvfdd9+UQ02lUtx9991s2LCBNWvWANDR0UEoFKKqqmrcto2NjXR0dIxtc3EQP/r86HNTbdPT08Pg4OCU47qY6siLiIiISNE7evTouNSacDg85fZbtmxh7969PPHEE5ke2qxpRl5EREREil40Gh33mCqQv+uuu3jwwQd5/PHHaW1tHft8U1MTsViMrq6ucdufOnWKpqamsW0urWIz+vF020SjUUpKStL+mhTIi4iIiEiW5Hf5SWstd911Fz/72c947LHHaG9vH/f8tddeSzAY5Le//e3Y5/bv38+RI0dYv349AOvXr2fPnj2cPn16bJtt27YRjUZZvXr12DYXH2N0m9FjpEupNSIiIiIieOk0999/Pz//+c+pqKgYy2mvrKykpKSEyspKPvzhD/OpT32KmpoaotEon/zkJ1m/fj033HADALfffjurV6/mAx/4AF/60pfo6Ojgs5/9LFu2bBm7C3DnnXfy9a9/nc985jP8zd/8DY899hgPPPAADz300IzGq/KTIiIiIpJRY+Un9z+Tm/KTK69Jq/ykMRPP3n/3u9/lQx/6EOA1hPq7v/s7fvSjHzE8PMymTZv4xje+MZY2A3D48GE+8YlPsH37dsrKyvjgBz/IP//zPxMIXJhD3759O/fccw8vvvgira2t/MM//MPYOdKlQF5EREREMqpQAvlCoxx5EREREZECpBx5EREREckOA0ySvpLRcxYpzciLiIiIiBQgzciLiIiISJbMrBykf+csTpqRFxEREREpQJqRFxEREZHsMCYHOfKakRcRERERkTyiQF5EREREpAAptUZEREREskSLXf2kGXkRERERkQKkGXkRERERyQ4tdvWVZuRFRERERAqQAnkRERERkQKk1BoRERERyQ6l1vhKM/IiIiIiIgVIM/IiIiIikiUqP+knzciLiIiIiBQgBfIiIiIiIgVIqTUiIiIikhXGGEyWF59m+3zZpBl5EREREZECpBl5EREREckOlZ/0lWbkRUREREQKkGbkRURERCRLVH7ST5qRFxEREREpQArkRUREREQKkFJrRERERCRLcrDYVak1IiIiIiKSTzQjLyIiIiLZofKTvtKMvIiIiIhIAVIgLyIiIiJSgJRaIyIiIiJZojryftKMvIiIiIhIAdKMvIiIiIhkhxa7+koz8iIiIiIiBUgz8iIiIiKSHUqR95Vm5EVERERECpACeRERERGRAqTUGhERERHJEuXW+Ekz8iIiIiIiBUgz8iIiIiKSHSo/6SvNyIuIiIiIFCAF8iIiIiIiBUipNSIiIiKSHUqt8ZVm5EVERERECpBm5EVEREQkS1R+0k+akRcRERERKUCakRcRERGR7DDkIEc+u6fLJs3Ii4iIiIgUIAXyIiIiIiIFSKk1IiIiIpIdKj/pK83Ii4iIiIgUIM3Ii4iIiEiWqPyknzQjLyIiIiJSgBTIi4iIiIgUIKXWiIiIiEh2aLGrrxTIi4iIiEhW9PT2zotzZosCeRERERHJqFAoRFNTE20rrszJ+ZuamgiFQjk5dyYZa63N9SBEREREpLgNDQ0Ri8Vycu5QKEQkEsnJuTNJgbyIiIiISAFS1RoRERERkQKkQF5EREREpAApkBcRERERKUAK5EVERERECpACeRERERGRAqRAXkRERESkACmQFxEREREpQP8/K56yMaPBHT0AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(figsize=(10, 8))\n", + "plt.axis(\"off\")\n", + "plt.title(\"Absolute value difference in flow between SPC and Census\")\n", + "MSOA_boundaries.join(sum_dj, on=\"MSOA21CD\").plot(\n", + " column=\"diff_abs\", ax=ax, legend=True, cmap=\"Reds\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- • absolute map percentage differences:\n", + "\n", + "$$\n", + "Gi=\\sum\\limits_{j}(|(T_{ij}-T^{obs}_{ij})|)/\\sum\\limits_{lk} T^{obs}_{lk}\n", + "$$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 168, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 168, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAu4AAAJ8CAYAAAChsySCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd5xU1dnA8d+507ZXtrD03puAFEFUUFTE3pOINWosMcb4apotiSkaNdZoYicx9miwdxAUkCK9Ln1Ztvc2c8/7x91dGLbN7E7ZnX2++Uxk7txypuzMc899znOU1lojhBBCCCGE6NSMcDdACCGEEEII0TYJ3IUQQgghhOgCJHAXQgghhBCiC5DAXQghhBBCiC5AAnchhBBCCCG6AAnchRBCCCGE6AIkcBdCCCGEEKILkMBdCCGEEEKILsAe7gYIIYQQQojIV11dTW1tbViO7XQ6iYqKCsuxA0kCdyGEEEIIEVTV1dWkRsdQiQ7L8TMzM8nOzu7ywbsE7kIIIYQQIqhqa2upRPMDYnGiQntsNAsPHqS2tlYCdyGEEEIIIXwRhQp54B5JAzoj6bkIIYQQQggRsSRwF0IIIYQQoguQVBkhhBBCCBESBgpDhThVJjzjYYNCetyFEEIIIYToAqTHXQghhBBChIRB6HuNI6mXOpKeixBCCCGEEBFLAnchhBBCCCG6AEmVEUIIIYQQIaEUGKEdm2pVjY+QAarS4y6EEEIIIUQXID3uQgghhBAiJGRwasdE0nMRQgghhBAiYkmPuxBCCCGECAlDhWECJpAcdyGEEEIIISLNV199xfz588nKykIpxdtvv93q+jk5OVx66aUMHToUwzC45ZZbmqzz/PPPo5TyukVFRfndNgnchRBCCCGEqFdRUcG4ceN4/PHHfVq/pqaGtLQ0fv3rXzNu3LgW10tISCAnJ6fxtnv3br/bJqkyQgghhBAiJLrC4NTTTjuN0047zef1+/fvzyOPPALAs88+2+J6SikyMzP9bI036XEXQgghhBARr7S01OtWU1MT0uOXl5fTr18/+vTpw1lnncWGDRv83ocE7kIIIYQQIiQMFZ4bQJ8+fUhMTGy83X///SF73sOGDePZZ5/lv//9Ly+//DKmaTJ9+nT27dvn134kVUYIIYQQQkS8vXv3kpCQ0Hjf5XKF7NjTpk1j2rRpjfenT5/OiBEj+Pvf/859993n834kcBdCCCGEEBEvISHBK3APJ4fDwYQJE9i+fbtf20mqjBBCCCGECAkjTLfOxuPxsG7dOnr27OnXdtLjLoQQQgghRL3y8nKvnvDs7GzWrFlDSkoKffv25c4772T//v28+OKLjeusWbOmcdu8vDzWrFmD0+lk5MiRANx7771MnTqVwYMHU1xczF/+8hd2797N1Vdf7VfbJHAXQgghhBAh0TD5UEiP6ef6K1eu5MQTT2y8f+uttwKwYMECnn/+eXJyctizZ4/XNhMmTGj893fffce//vUv+vXrx65duwAoKirimmuu4eDBgyQnJzNx4kSWLl3aGNj7/Fy01hEyCawQQgghhOiMSktLSUxM5Of2RFwhDtxrtOZBdwklJSWdJse9vaTHXQghhBBChERXmICpM4uk5yKEEEIIIUTEksBdCCGEEEKILkBSZYQQQgghREgcOZNpyI4Z2sMFVSQ9FyGEEEIIISKW9LgLIYQQQoiQUIS+1zjEHfxB1a173Hft2oVSigceeCCkx7388svp379/SI8pIkP//v25/PLLG+9/8cUXKKX44osvvNZ76aWXGD58OA6Hg6SkpMblf/nLXxg4cCA2m43x48eHpM2d1QknnMAJJ5wQ0H2uWLGC6dOnExsbi1KKNWvWcPfdd4e8ZnFzlFLceOON4W6G6EKO/r4RQoRfRAfuTzzxBEoppkyZEu6mBMx7773H3XffHe5mdElLly7l7rvvpri4ONxNCarNmzdz+eWXM2jQIJ555hmefvppAD766CNuv/12jjvuOJ577jn+8Ic/hLmlkaWuro4LLriAwsJCHnroIV566SX69esX7mYFzYEDB7j77rsbZwuMRKZp8uKLLzJlyhRSUlKIj49n6NChXHbZZXzzzTeN6zWcQDfcHA4HAwcO5LLLLmPnzp1N9ltaWso999zDuHHjiIuLIzo6mtGjR/N///d/HDhwIJRPMWCqq6t56KGHmDJlComJiURFRTF06FBuvPFGtm7dGu7mCRExIjpVZuHChfTv35/ly5ezfft2Bg8eHO4mddh7773H448/LsF7OyxdupR77rmHyy+/3KsXuis7/vjjqaqqwul0Ni774osvME2TRx55xOsz/9lnn2EYBv/85z+91u+uPvroo4Dub8eOHezevZtnnnnG7ymsu6IDBw5wzz330L9//4i9enPzzTfz+OOP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Ho8++ijHH388q1ev9upBLigo4LTTTuPiiy/mhz/8IRkZGQF/r8BKwzj22GMpLi7mxz/+McOHD2f//v28/vrrVFZW4nQ6O/wat+SPf/wjhmFw2223UVJSwp///Gd+8IMf8O2337a4zbXXXkuvXr34wx/+0Jgu0fDd0Zyrr76aF154gfPPP5+f//znfPvtt9x///1s2rSJt956C7B6bx966CE2bNjA6NGjAVi8eDGGYbB48WJuvvnmxmVgpU215csvv+Q///kPN998My6XiyeeeIJTTz2V5cuXNx4jNzeXqVOnNp5kpaWl8f7773PVVVdRWlrKLbfcwogRI7j33nv57W9/y49//GNmzpwJWJ+pkpISTNNkyZIlnHHGGU3a3WD16tWUl5d7tdvX75aXXnqJBQsWMHfuXP70pz9RWVnJk08+yYwZM1i9erXX4H+Px8PcuXOZMmUKDzzwAJ988gkPPvgggwYN4vrrr2/xtWoYn/Daa69xwQUXtOvK0o4dOwAaP9cNwemPfvQjv/fVYMWKFSxdupSLL76Y3r17s2vXLp588klOOOEENm7c2KSdN910E8nJydx1113s2rWLhx9+mBtvvJH//Oc/jeu09/umPc9pw4YNHHfccfTq1Ys77riD2NhYXn31Vc4++2zeeOMNzjnnHL/af+jQIU455RTS0tK44447SEpKYteuXbz55ps+tedovvzWCxFWOgKtXLlSA/rjjz/WWmttmqbu3bu3/ulPf+q1XnZ2tgZ0dHS03rdvX+Pyb7/9VgP6Zz/7mdZa66KiIg3ov/zlLy0e89ChQ9rpdOpTTjlFezyexuWPPfaYBvSzzz7buGzBggW6X79+jfc///xzDejPP/+82fY999xzjctuuOEG3dzbtnjxYg3ohQsXei3/4IMPml1+tAULFmhA33TTTY3LTNPU8+bN006nU+fl5fl9nH79+mlAf/DBB17r/va3v9WAfvPNN5u0wzRNrbXWL730kjYMQy9evNjr8aeeekoD+uuvv25cBmin06m3b9/euGzt2rUa0I8++mjjsr/85S8a0NnZ2U2OW1lZ2WTZ3Llz9cCBAxvvHzx4UNvtdn322Wd7rXf33XdrQC9YsKBx2X333adjY2P11q1bvda94447tM1m03v27GlyvAYNn6V58+Y1vh5aa/3LX/6yyXGa++zcddddGmh8zxosWLBA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17/4wQ9+wCuvvMLVV1/t128stP5bL0S4RdJJCFVVVbz55pucccYZnH/++U1uN954I2VlZU3KTr399tteeXXLly/n22+/5bTTTgOsCiFHVw0ZNGgQ8fHxjeXb5syZg9Pp5G9/+5tXT8Y///lPSkpKmDdvXovt7tevHzabrUlO7hNPPNFk3djYWKDpF9CFF16Ix+Phvvvua7KN2+32+Uv9sccea/y31prHHnsMh8PB7NmzA3ac8847j7Vr1zZWzzhSw2t34YUXsn//fp555pkm61RVVVFRUeHT8zlSS69dQ4/O0Zecn3vuOa/1Zs+ejd1ub1J278jXrMGFF17IsmXL+PDDD5s8VlxcjNvtbrGdc+bMweFw8Oijj3q1qb1VUlpz7rnnYrPZuOeee5r0wGmtKSgoaHMfgX6vDMPg7LPP5t1332XlypVNHj/yM9Le1zicTj/9dKDp+9lwxeLI74oBAwbQq1cvHnroIerq6hpLE86cOZMdO3bw+uuvM3Xq1Ca9zC1ZtmyZVx703r17+e9//8spp5yCzWbDZrNx3nnn8cYbbzR74nRkGb6W/p7ASk+ZPHky//73v9mzZ49Xj3tVVRV/+9vfGDRoED179mzcxtfvlrlz55KQkMAf/vCHZnOam6uv3h4HDx5k48aNTZbX1tby6aefNpvu1Jbzzz+fMWPG8Pvf/74x1/9IZWVlbdY8t9lsTf5WH330Ub+u0B6po98306ZN49RTT+Uf//hHkwpSYL1et912G2CdbJ1wwgn8/e9/Jycnp8m67XnvioqKmrweDROCNfw++/ob68tvveg4AxWWW6SIqB73d955h7KyMs4888xmH586dSppaWksXLiQiy66qHH54MGDmTFjBtdffz01NTU8/PDDpKamNl6C37p1K7Nnz+bCCy9k5MiR2O123nrrLXJzc7n44osBq5fwzjvv5J577uHUU0/lzDPPZMuWLTzxxBNMnjyZH/7why22OzExkQsuuIBHH30UpRSDBg3if//7X7O5pA09azfffDNz587FZrNx8cUXM2vWLK699lruv/9+1qxZwymnnILD4WDbtm289tprPPLII40Tg7QkKiqKDz74gAULFjBlyhTef/99Fi1axC9/+cvG3rhAHOcXv/gFr7/+OhdccAFXXnklEydOpLCwkHfeeYennnqKcePG8aMf/YhXX32V6667js8//5zjjjsOj8fD5s2befXVVxtrw/uj4bX71a9+xcUXX4zD4WD+/PmccsopOJ1O5s+fz7XXXkt5eTnPPPMM6enpXj8uGRkZ/PSnP+XBBx/kzDPP5NRTT2Xt2rW8//779OjRw6sH8he/+AXvvPMOZ5xxBpdffjkTJ06koqKCdevW8frrr7Nr167GkpRHa6gzff/993PGGWdw+umns3r16sbjBNKgQYP43e9+x5133smuXbs4++yziY+PJzs7m7feeosf//jHjT+6LQnGe/WHP/yBjz76iFmzZjWWmMzJyeG1115jyZIlJCUldeg1Dqdx48axYMECnn76aYqLi5k1axbLly/nhRde4Oyzz24cVN9g5syZvPLKK4wZM6ax5/CYY44hNjaWrVu3+pzfDjB69Gjmzp3rVQ4S4J577mlc549//COff/45U6ZM4ZprrmHkyJEUFhayatUqPvnkEwoLCwHrs5OUlMRTTz1FfHw8sbGxTJkypfFq1MyZM/njH/9IYmIiY8aMAazAbdiwYWzZsqXJvAe+frckJCTw5JNP8qMf/YhjjjmGiy++mLS0NPbs2cOiRYs47rjjmj2Z9te+ffs49thjOemkk5g9ezaZmZkcOnSIf//736xdu5ZbbrnF78+Xw+HgzTffZM6cORx//PFceOGFHHfccTgcDjZs2MC//vUvkpOTW63lfsYZZ/DSSy+RmJjIyJEjWbZsGZ988kljyUl/BeL75sUXX+SUU07h3HPPZf78+cyePZvY2Fi2bdvGK6+8Qk5OTmMt98cff5wZM2YwZswYrrnmGgYOHEhubi7Lli1j3759rF271q/2v/DCCzzxxBOcc845DBo0iLKyMp555hkSEhIaT5J9/Y315bdeiLALYQWboJs/f76OiorSFRUVLa5z+eWXa4fDofPz8xtLQf3lL3/RDz74oO7Tp492uVx65syZeu3atY3b5Ofn6xtuuEEPHz5cx8bG6sTERD1lyhT96quvNtn/Y489pocPH64dDofOyMjQ119/fZMyWUeXg9Ra67y8PH3eeefpmJgYnZycrK+99lq9fv36JuXW3G63vummm3RaWppWSjUpDfn000/riRMn6ujoaB0fH6/HjBmjb7/9dn3gwIFWX7uGUoE7duzQp5xyio6JidEZGRn6rrvu8ipv6c9x+vXrp+fNm9fs8QoKCvSNN96oe/XqpZ1Op+7du7desGCBVwm62tpa/ac//UmPGjVKu1wunZycrCdOnKjvuecer5JOgL7hhhuaHKNfv35NSpndd999ulevXtowDK/SkO+8844eO3asjoqK0v3799d/+tOf9LPPPtukfKTb7da/+c1vdGZmpo6OjtYnnXSS3rRpk05NTdXXXXed17HKysr0nXfeqQcPHqydTqfu0aOHnj59un7ggQd0bW1ti++F1lZJvXvuuUf37NlTR0dH6xNOOEGvX7++yXPqaDnIBm+88YaeMWOGjo2N1bGxsXr48OH6hhtu0Fu2bGlcZ9asWXrUqFHNbh+M92r37t36sssu02lpadrlcumBAwfqG264watUY0de45bKQR5dzrG5sqzN8bUcpNZa19XV6XvuuUcPGDBAOxwO3adPH33nnXd6lchr8Pjjj2tAX3/99V7L58yZowH96aefttquBg2v/csvv6yHDBmiXS6XnjBhQpMSeVprnZubq2+44Qbdp08f7XA4dGZmpp49e7Z++umnvdb773//q0eOHKntdnuT12jRokUa0KeddprXNldffbUG9D//+c9m2+nrd9jnn3+u586dqxMTE3VUVJQeNGiQvvzyy73KXbb0mW/uPTlaaWmpfuSRR/TcuXN17969tcPh0PHx8XratGn6mWee8SpR2NJ735KioiL929/+Vo8ZM0bHxMToqKgoPXr0aH3nnXfqnJycNre94oordI8ePXRcXJyeO3eu3rx5c5O/oYZyikeXSWzuO8PX75vWVFZW6gceeEBPnjxZx8XFaafTqYcMGaJvuukmr/KvWmu9Y8cOfdlll+nMzEztcDh0r1699BlnnKFff/11v9u/atUqfckll+i+fftql8ul09PT9RlnnOH1OdDat99Yf37rhf8aykHe60rWf45KCentXldyxJSDVFoHeMSV6JIuv/xyXn/9dcrLy8PdlC6nuLiY5ORkfve738nU3kIIIUQzSktLSUxM5HdRyUQFaOyar6q15tfVRZSUlDSpPNXVRFSOuxDBVlVV1WRZQy5oa1PcCyGEEEJ0VETluAsRbP/5z394/vnnOf3004mLi2PJkiX8+9//5pRTTmkcOCiEEEKI5kk5yI6RwF0IP4wdOxa73c6f//xnSktLGwes/u53vwt304QQQggR4STHXQghhBBCBFVDjvsfwpTj/ssIyXGXHnchhBBCCBES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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(figsize=(10, 8))\n", + "plt.axis(\"off\")\n", + "plt.title(\"Absolute percentage difference in flow between SPC and Census\")\n", + "MSOA_boundaries.join(sum_dj, on=\"MSOA21CD\").plot(\n", + " column=\"diff_per_abs\", ax=ax, legend=True, cmap=\"Reds\"\n", + ")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 9930a17ef46d4ac24e029b088c79ad725ffd287f Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Fri, 13 Dec 2024 18:14:19 +0000 Subject: [PATCH 46/56] Add todo --- src/acbm/assigning/select_facility.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/acbm/assigning/select_facility.py b/src/acbm/assigning/select_facility.py index 0429a76..28a9e0d 100644 --- a/src/acbm/assigning/select_facility.py +++ b/src/acbm/assigning/select_facility.py @@ -65,6 +65,7 @@ def _select_facility( {unique_id_col: (np.nan, np.nan)} if no suitable facility is found. """ # ----- Step 1. Find valid facilities in the destination zone + # Added to enable multiprocessing pd.options.mode.copy_on_write = True # Extract the destination zone from the input row destination_zone = row[row_destination_zone_col] @@ -204,6 +205,7 @@ def select_facility( keys with selected facility ID and facility ID's geometry, or (np.nan, np.nan) """ # TODO: update this to be configurable, `None` is os.process_cpu_count() + # TODO: check if this is deterministic for a given seed (or pass seed to pool) with Pool(None) as p: # Set to a large enough chunk size so that each process # has a sufficiently large amount of processing to do. @@ -212,6 +214,7 @@ def select_facility( for start in tqdm(range(0, df.shape[0], chunk_size)): chunk = df.iloc[start : start + chunk_size, :] args = [ + # TODO: add seed (derived from global seed as an argument) ( row, unique_id_col, From 1a90abcb5cae35548329649a2cd04a2d697baede Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Fri, 13 Dec 2024 18:14:48 +0000 Subject: [PATCH 47/56] Add Leeds config with travel times --- config/leeds_with_travel_times.toml | 42 +++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 config/leeds_with_travel_times.toml diff --git a/config/leeds_with_travel_times.toml b/config/leeds_with_travel_times.toml new file mode 100644 index 0000000..8c3f920 --- /dev/null +++ b/config/leeds_with_travel_times.toml @@ -0,0 +1,42 @@ +[parameters] +seed = 0 +region = "leeds" +zone_id = "OA21CD" +travel_times = true +boundary_geography = "OA" +nts_years = [2019, 2021, 2022] +nts_regions = [ + 'Yorkshire and the Humber', + 'North West', + 'North East', + 'East Midlands', + 'West Midlands', + 'East of England', + 'South East', + 'South West', +] +nts_day_of_week = 3 +output_crs = 4326 + +[work_assignment] +use_percentages = false +weight_max_dev = 0.0 +weight_total_dev = 1.0 +max_zones = 4 +commute_level = "OA" + +[matching] +required_columns = ["number_adults", "number_children"] +optional_columns = [ + "number_cars", + "num_pension_age", + "rural_urban_2_categories", + "employment_status", + "tenure_status", +] +n_matches = 10 +chunk_size = 50000 + +[postprocessing] +pam_jitter = 30 +pam_min_duration = 10 From 265a6c4d1dd66fd3594630303502ca8245bdb704 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Sun, 15 Dec 2024 18:08:29 +0000 Subject: [PATCH 48/56] Add manual download fallback if pyrosm fails --- scripts/0.1_run_osmox.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/scripts/0.1_run_osmox.py b/scripts/0.1_run_osmox.py index bad7790..7bb1163 100644 --- a/scripts/0.1_run_osmox.py +++ b/scripts/0.1_run_osmox.py @@ -1,5 +1,7 @@ +import os import subprocess +import requests from pyrosm import get_data from acbm.cli import acbm_cli @@ -11,7 +13,20 @@ def main(config_file): config = load_and_setup_config(config_file) logger = config.get_logger("preprocessing", __file__) logger.info("Getting OSM data") - fp = get_data(config.region, directory=config.osmox_path) + try: + fp = get_data(config.region, directory=config.osmox_path) + except Exception as e: + logger.error(e) + logger.info(f"Trying manual download of region: {config.region}") + url = f"http://download.geofabrik.de/europe/united-kingdom/england/{config.region}-latest.osm.pbf" + filename = url.split("/")[-1] + fp = os.path.join(config.osmox_path, filename) + response = requests.get(url, stream=True) + response.raise_for_status() + with open(fp, "wb") as file: + for chunk in response.iter_content(chunk_size=8192): + file.write(chunk) + logger.info(f"Region ({config.region}) successfully downloaded to: {fp}") logger.info("Running osmox") subprocess.run( [ From 54bae53a8a7b12d19a2d8bdc4257b8d01fde3b94 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Mon, 16 Dec 2024 18:22:39 +0000 Subject: [PATCH 49/56] Add travel times plots --- scripts/3.3_assign_facility_all.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/scripts/3.3_assign_facility_all.py b/scripts/3.3_assign_facility_all.py index b46138c..21d329a 100644 --- a/scripts/3.3_assign_facility_all.py +++ b/scripts/3.3_assign_facility_all.py @@ -6,6 +6,7 @@ from acbm.assigning.select_facility import map_activity_locations, select_facility from acbm.cli import acbm_cli from acbm.config import load_and_setup_config +from acbm.utils import get_travel_times @acbm_cli @@ -336,6 +337,28 @@ def main(config_file): save_dir=config.output_path / "plots/assigning/", ) + # Add travel times + tte = get_travel_times(config) + activity_chains_all = activity_chains_all.merge( + tte[[tte.columns[0], tte.columns[1], "mode", "time"]], + left_on=["ozone", "dzone", "mode"], + right_on=[tte.columns[0], tte.columns[1], "mode"], + how="left", + ) + # Iterate over each unique activity type and create a plot + for activity_type in unique_activity_types: + plot_scatter_actual_reported( + activities=activity_chains_all, + activity_type=activity_type, + activity_type_col="destination activity", + x_col="TripTotalTime", + y_col="time", + x_label="Reported Travel TIme (min)", + y_label="Modelled time (min)", + crs=f"EPSG:{config.output_crs}", + title_prefix="Scatter plot of TripTotalTime vs. Modelled time", + save_dir=config.output_path / "plots/assigning/", + ) # .... # Plot 3: Desire lines between start and end locations From eda975bd36cb934739a55529a5aa38a5f7baf6f1 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Mon, 16 Dec 2024 20:18:57 +0000 Subject: [PATCH 50/56] Revise CRS for plots from config --- src/acbm/assigning/plots.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/acbm/assigning/plots.py b/src/acbm/assigning/plots.py index 26d7d51..7c47a17 100644 --- a/src/acbm/assigning/plots.py +++ b/src/acbm/assigning/plots.py @@ -291,7 +291,7 @@ def plot_desire_lines( ) # convert crs to metric - activity_chains_plot = activity_chains_plot.to_crs(epsg=3857) + activity_chains_plot = activity_chains_plot.to_crs(crs=crs) # calculate the length of the line_geometry in meters activity_chains_plot["length"] = activity_chains_plot["line_geometry"].length @@ -429,7 +429,7 @@ def plot_scatter_actual_reported( activity_chains_plot = activity_chains_plot.set_geometry("line_geometry", crs=crs) # convert crs to metric - activity_chains_plot = activity_chains_plot.to_crs(epsg=3857) + activity_chains_plot = activity_chains_plot.to_crs(crs=crs) # calculate the length of the line_geometry in meters activity_chains_plot["length"] = activity_chains_plot["line_geometry"].length From a13616388fd3c669de7c905f50606c283fb7b1ff Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Mon, 16 Dec 2024 20:19:21 +0000 Subject: [PATCH 51/56] Add y_scale parameter --- scripts/3.3_assign_facility_all.py | 1 + src/acbm/assigning/plots.py | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/3.3_assign_facility_all.py b/scripts/3.3_assign_facility_all.py index 21d329a..2099b9b 100644 --- a/scripts/3.3_assign_facility_all.py +++ b/scripts/3.3_assign_facility_all.py @@ -358,6 +358,7 @@ def main(config_file): crs=f"EPSG:{config.output_crs}", title_prefix="Scatter plot of TripTotalTime vs. Modelled time", save_dir=config.output_path / "plots/assigning/", + y_scale=1.0, ) # .... diff --git a/src/acbm/assigning/plots.py b/src/acbm/assigning/plots.py index 7c47a17..80a7bd1 100644 --- a/src/acbm/assigning/plots.py +++ b/src/acbm/assigning/plots.py @@ -390,6 +390,7 @@ def plot_scatter_actual_reported( crs: str, save_dir: str | Path | None = None, display: bool = False, + y_scale: float = 1 / 1000, ): """ Plots scatter plots with trend lines for different modes in activity chains. @@ -451,11 +452,11 @@ def plot_scatter_actual_reported( # Plot the scatter plot ax = axs[i] ax.scatter( - subset_mode[x_col], subset_mode[y_col] / 1000, alpha=0.1, lw=0 + subset_mode[x_col], subset_mode[y_col] * y_scale, alpha=0.1, lw=0 ) # Use a single color for all plots # Calculate and plot the trend line - z = np.polyfit(subset_mode[x_col], subset_mode[y_col] / 1000, 1) + z = np.polyfit(subset_mode[x_col], subset_mode[y_col] * y_scale, 1) p = np.poly1d(z) ax.plot(subset_mode[x_col], p(subset_mode[x_col]), "r--") From c779bcd507ea500a0e01dda86e834c0f116cbdeb Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Tue, 17 Dec 2024 21:31:32 +0000 Subject: [PATCH 52/56] Add tolerance parameters --- scripts/3.1_assign_primary_feasible_zones.py | 8 ++++++-- src/acbm/config.py | 2 ++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/scripts/3.1_assign_primary_feasible_zones.py b/scripts/3.1_assign_primary_feasible_zones.py index b61fa23..613e06f 100644 --- a/scripts/3.1_assign_primary_feasible_zones.py +++ b/scripts/3.1_assign_primary_feasible_zones.py @@ -200,7 +200,9 @@ def main(config_file): zone_id=config.zone_id, filter_by_activity=True, activity_col="education_type", - time_tolerance=0.3, + time_tolerance=config.parameters.tolerance_edu + if config.parameters.tolerance_edu is not None + else 0.3, ) logger.info("Saving feasible zones for education activities") @@ -225,7 +227,9 @@ def main(config_file): zone_id=config.zone_id, filter_by_activity=True, activity_col="dact", - time_tolerance=0.3, + time_tolerance=config.parameters.tolerance_work + if config.parameters.tolerance_work is not None + else 0.3, ) logger.info("Saving feasible zones for work activities") diff --git a/src/acbm/config.py b/src/acbm/config.py index c10eb0c..2cfa99f 100644 --- a/src/acbm/config.py +++ b/src/acbm/config.py @@ -28,6 +28,8 @@ class Parameters(BaseModel): nts_regions: list[str] nts_day_of_week: int output_crs: int + tolerance_work: float | None = None + tolerance_edu: float | None = None @dataclass(frozen=True) From 098a8473eec449ddc1319d039ed0b2ef11ee2571 Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Tue, 14 Jan 2025 18:28:35 +0000 Subject: [PATCH 53/56] Update config --- config/base.toml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/config/base.toml b/config/base.toml index da41aa4..410dc11 100644 --- a/config/base.toml +++ b/config/base.toml @@ -48,3 +48,15 @@ max_zones = 8 # maximum number of feasible zones to include in the opti [postprocessing] pam_jitter = 30 pam_min_duration = 10 +# for get_pt_subscription: everyone above this age has a subscription (pensioners get free travel) +# TODO: more sophisticated approach +pt_subscription_age = 66 +# to define if a person is a student: +# eveyone below this age is a student +student_age_base = 16 +# everyone below this age that has at least one "education" activity is a student +student_age_upper = 30 +# eveyone who uses one of the modes below is classified as a passenger (isPassenger = True) +modes_passenger = ['car_passenger', 'taxi'] +# yearly state pension: for getting hhlIncome of pensioners +state_pension = 11502 From b3d5581c3f5f771b95bae902decea0d79122ed4b Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Tue, 14 Jan 2025 18:29:16 +0000 Subject: [PATCH 54/56] Fix test --- tests/test_config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_config.py b/tests/test_config.py index 2bf69d6..5ac5b86 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -11,4 +11,4 @@ def config(): def test_id(config): - assert config.id == "a89b65de35" + assert config.id == "e4589718b2" From 8e4a2887f8810657faacbde35942488cadc5caba Mon Sep 17 00:00:00 2001 From: Sam Greenbury Date: Thu, 30 Jan 2025 17:18:52 +0000 Subject: [PATCH 55/56] Remove prepend_datetime --- src/acbm/logger_config.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/acbm/logger_config.py b/src/acbm/logger_config.py index 1843232..8229077 100644 --- a/src/acbm/logger_config.py +++ b/src/acbm/logger_config.py @@ -1,11 +1,4 @@ import logging -from datetime import datetime - - -def prepend_datetime(s: str, delimiter: str = "_") -> str: - current_date = datetime.now().strftime("%Y-%m-%d") - return f"{current_date}{delimiter}{s}" - # # Configure the root logger # logging.basicConfig( From 256ebde3e5a112dbfc1506b3463dcfc7de5836c5 Mon Sep 17 00:00:00 2001 From: Sam Greenbury <50113363+sgreenbury@users.noreply.github.com> Date: Thu, 30 Jan 2025 17:40:29 +0000 Subject: [PATCH 56/56] Revise comment --- scripts/0.1_run_osmox.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/0.1_run_osmox.py b/scripts/0.1_run_osmox.py index 7bb1163..05eb39d 100644 --- a/scripts/0.1_run_osmox.py +++ b/scripts/0.1_run_osmox.py @@ -39,7 +39,9 @@ def main(config_file): "-f", "geoparquet", "-crs", - # TODO: check if this can be specified as the output CRS + # For the distances to be accurate, needs to be same CRS as OSM data for the region. + # However, distances from osmox are currently not used in the pipeline so any CRS will work. + # In general, the CRS is transformed in the pipeline when this data is used. # See: https://github.com/arup-group/osmox/blob/82602d411374ebc9fd33443f8f7c9816b63715ec/docs/osmox_run.md#L35-L38 "epsg:27700", "-l",