From 3247b9c9b8db0e59b557b245fcdd44ffa6a51d36 Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Wed, 28 Aug 2024 17:56:34 -0600 Subject: [PATCH 01/24] Update client.py --- jupiterone/client.py | 172 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 168 insertions(+), 4 deletions(-) diff --git a/jupiterone/client.py b/jupiterone/client.py index 0a4684c..d3d9332 100644 --- a/jupiterone/client.py +++ b/jupiterone/client.py @@ -27,6 +27,8 @@ CREATE_RELATIONSHIP, DELETE_RELATIONSHIP, CURSOR_QUERY_V1, + CREATE_INSTANCE, + ALL_PROPERTIES ) @@ -41,6 +43,7 @@ class JupiterOneClient: # pylint: disable=too-many-instance-attributes DEFAULT_URL = "https://graphql.us.jupiterone.io" + SYNC_API_URL = "https://api.us.jupiterone.io" RETRY_OPTS = { "wait_exponential_multiplier": 1000, @@ -49,12 +52,13 @@ class JupiterOneClient: "retry_on_exception": retry_on_429, } - def __init__(self, account: str = None, token: str = None, url: str = DEFAULT_URL): + def __init__(self, account: str = None, token: str = None, url: str = DEFAULT_URL, sync_url: str = SYNC_API_URL): self.account = account self.token = token self.url = url self.query_endpoint = self.url self.rules_endpoint = self.url + "/rules/graphql" + self.sync_url = sync_url self.headers = { "Authorization": "Bearer {}".format(self.token), "JupiterOne-Account": self.account, @@ -98,7 +102,7 @@ def _execute_query(self, query: str, variables: Dict = None) -> Dict: # initiate requests session and implement retry logic of 5 request retries with 1 second between s = requests.Session() - retries = Retry(total=5, backoff_factor=1, status_forcelist=[429, 502, 503, 504]) + retries = Retry(total=5, backoff_factor=1, status_forcelist=[502, 503, 504]) s.mount('https://', HTTPAdapter(max_retries=retries)) response = s.post( @@ -127,8 +131,6 @@ def _execute_query(self, query: str, variables: Dict = None) -> Dict: ) elif response.status_code in [429, 503]: - print(response.status_code) - print(response.content) raise JupiterOneApiRetryError("JupiterOne API rate limit exceeded.") elif response.status_code in [504]: @@ -233,6 +235,57 @@ def _limit_and_skip_query( return {"data": results} + def _execute_syncapi_request(self, endpoint: str, headers: Dict = None, payload: Dict = None) -> Dict: + """Executes POST request to SyncAPI endpoints""" + + # initiate requests session and implement retry logic of 5 request retries with 1 second between + s = requests.Session() + retries = Retry(total=5, backoff_factor=1, status_forcelist=[502, 503, 504]) + s.mount('https://', HTTPAdapter(max_retries=retries)) + + response = s.post( + self.sync_url + endpoint, headers=self.headers, json=payload, timeout=60 + ) + + # It is still unclear if all responses will have a status + # code of 200 or if 429 will eventually be used to + # indicate rate limits being hit. J1 devs are aware. + if response.status_code == 200: + if response._content: + content = json.loads(response._content) + if "errors" in content: + errors = content["errors"] + if len(errors) == 1: + if "429" in errors[0]["message"]: + raise JupiterOneApiRetryError( + "JupiterOne API rate limit exceeded" + ) + raise JupiterOneApiError(content.get("errors")) + return response.json() + + elif response.status_code == 401: + raise JupiterOneApiError( + "401: Unauthorized. Please supply a valid account id and API token." + ) + + elif response.status_code in [429, 503]: + raise JupiterOneApiRetryError("JupiterOne API rate limit exceeded.") + + elif response.status_code in [504]: + raise JupiterOneApiRetryError("Gateway Timeout.") + + elif response.status_code in [500]: + raise JupiterOneApiError("JupiterOne API internal server error.") + + else: + content = response._content + if isinstance(content, (bytes, bytearray)): + content = content.decode("utf-8") + if "application/json" in response.headers.get("Content-Type", "text/plain"): + data = json.loads(content) + content = data.get("error", data.get("errors", content)) + raise JupiterOneApiError("{}:{}".format(response.status_code, content)) + def query_v1(self, query: str, **kwargs) -> Dict: """Performs a V1 graph query args: @@ -349,3 +402,114 @@ def delete_relationship(self, relationship_id: str = None): response = self._execute_query(DELETE_RELATIONSHIP, variables=variables) return response["data"]["deleteRelationship"] + + def create_integration_instance(self, instance_name: str = None, instance_description: str = None): + """Creates a new Custom Integration Instance. + + args: + instance_name (str): The "Account name" for integration instance + instance_description (str): The "Description" for integration instance + """ + variables = { + "instance": { + "name": instance_name, + "description": instance_description, + "integrationDefinitionId": "8013680b-311a-4c2e-b53b-c8735fd97a5c", + "pollingInterval": "DISABLED", + "config": { + "@tag": { + "Production": False, + "AccountName": True + } + }, + "pollingIntervalCronExpression": {}, + "ingestionSourcesOverrides": [] + } + } + + response = self._execute_query(CREATE_INSTANCE, variables=variables) + return response['data']['createIntegrationInstance'] + + def fetch_all_entity_properties(self): + """Fetch list of aggregated property keys from all entities in the graph. + + """ + + response = self._execute_query(query=ALL_PROPERTIES) + + return_list = [] + + for i in response['data']['getAllAssetProperties']: + + if i.startswith(('parameter.', 'tag.')) == False: + + return_list.append(i) + + return return_list + + def fetch_all_entity_tags(self): + """Fetch list of aggregated property keys from all entities in the graph. + + """ + + response = self._execute_query(query=ALL_PROPERTIES) + + return_list = [] + + for i in response['data']['getAllAssetProperties']: + + if i.startswith(('tag.')) == True: + + return_list.append(i) + + return return_list + + def start_sync_job(self, instance_id: str = None): + """Start a synchronization job. + + args: + instance_id (str): The "integrationInstanceId" request param for synchronization job + """ + endpoint = "/persister/synchronization/jobs" + + data = { + "source": "integration-managed", + "integrationInstanceId": instance_id + } + + response = self._execute_syncapi_request(endpoint=endpoint, headers=self.headers, payload=data) + + return response + + def upload_entities_batch_json(self, instance_job_id: str = None, entities_list: list = None): + """Upload batch of entities. + + args: + instance_job_id (str): The "Job ID" for the Custom Integration integration job + entities_list (list): List of Dictionaries containing entities data to upload + """ + endpoint = f"/persister/synchronization/jobs/{instance_job_id}/entities" + + data = { + "entities": entities_list + } + + json_headers = self.headers.update({'Content-Type': 'application/json'}) + + response = self._execute_syncapi_request(endpoint=endpoint, headers=json_headers, payload=data) + + return response + + def finalize_sync_job(self, instance_job_id: str = None): + """Start a synchronization job. + + args: + instance_job_id (str): The "Job ID" for the Custom Integration integration job + """ + endpoint = f"/persister/synchronization/jobs/{instance_job_id}/finalize" + + data = {} + + response = self._execute_syncapi_request(endpoint=endpoint, headers=self.headers, payload=data) + + return response \ No newline at end of file From 50a6836f49c33d700e1613a06968d5146b963317 Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Wed, 28 Aug 2024 19:18:47 -0600 Subject: [PATCH 02/24] Update constants.py --- jupiterone/constants.py | 54 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/jupiterone/constants.py b/jupiterone/constants.py index 1383e97..348c0e7 100644 --- a/jupiterone/constants.py +++ b/jupiterone/constants.py @@ -134,4 +134,58 @@ } } } +""" + +CREATE_INSTANCE = """ + mutation CreateInstance($instance: CreateIntegrationInstanceInput!) { + createIntegrationInstance(instance: $instance) { + id + name + accountId + pollingInterval + integrationDefinitionId + description + config + } + } +""" + +ALL_PROPERTIES = """ + query getAllAssetProperties { + getAllAssetProperties + } +""" + +CREATE_SMARTCLASS = """ + mutation CreateSmartClass($input: CreateSmartClassInput!) { + createSmartClass(input: $input) { + id + accountId + tagName + description + ruleId + __typename + } + } +""" + +CREATE_SMARTCLASS_QUERY = """ + mutation CreateSmartClassQuery($input: CreateSmartClassQueryInput!) { + createSmartClassQuery(input: $input) { + id + smartClassId + description + query + __typename + } + } +""" + +RUN_SMARTCLASS_EVALUATION = """ + mutation EvaluateSmartClassRule($smartClassId: ID!) { + evaluateSmartClassRule(smartClassId: $smartClassId) { + ruleId + __typename + } + } """ \ No newline at end of file From 9b09c64e5635a8edc01dec4b0154a39aa6754f69 Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Wed, 28 Aug 2024 19:21:04 -0600 Subject: [PATCH 03/24] Update client.py --- jupiterone/client.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jupiterone/client.py b/jupiterone/client.py index d3d9332..ba90ca9 100644 --- a/jupiterone/client.py +++ b/jupiterone/client.py @@ -235,7 +235,7 @@ def _limit_and_skip_query( return {"data": results} - def _execute_syncapi_request(self, endpoint: str, headers: Dict = None, payload: Dict = None) -> Dict: + def _execute_syncapi_request(self, endpoint: str, headers: Dict = None, payload: Dict = None): """Executes POST request to SyncAPI endpoints""" # initiate requests session and implement retry logic of 5 request retries with 1 second between @@ -485,7 +485,7 @@ def upload_entities_batch_json(self, instance_job_id: str = None, entities_list: """Upload batch of entities. args: - instance_job_id (str): The "Job ID" for the Custom Integration integration job + instance_job_id (str): The "Job ID" for the Custom Integration job entities_list (list): List of Dictionaries containing entities data to upload """ endpoint = f"/persister/synchronization/jobs/{instance_job_id}/entities" @@ -504,7 +504,7 @@ def finalize_sync_job(self, instance_job_id: str = None): """Start a synchronization job. args: - instance_job_id (str): The "Job ID" for the Custom Integration integration job + instance_job_id (str): The "Job ID" for the Custom Integration job """ endpoint = f"/persister/synchronization/jobs/{instance_job_id}/finalize" From b8b4f8b594425932cfa1b0e89de2f83f51b9c678 Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Wed, 28 Aug 2024 19:48:48 -0600 Subject: [PATCH 04/24] Update client.py --- jupiterone/client.py | 68 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 61 insertions(+), 7 deletions(-) diff --git a/jupiterone/client.py b/jupiterone/client.py index ba90ca9..3b87243 100644 --- a/jupiterone/client.py +++ b/jupiterone/client.py @@ -28,7 +28,10 @@ DELETE_RELATIONSHIP, CURSOR_QUERY_V1, CREATE_INSTANCE, - ALL_PROPERTIES + ALL_PROPERTIES, + CREATE_SMARTCLASS, + CREATE_SMARTCLASS_QUERY, + RUN_SMARTCLASS_EVALUATION ) @@ -62,6 +65,7 @@ def __init__(self, account: str = None, token: str = None, url: str = DEFAULT_UR self.headers = { "Authorization": "Bearer {}".format(self.token), "JupiterOne-Account": self.account, + "Content-Type": "application/json" } @property @@ -235,7 +239,7 @@ def _limit_and_skip_query( return {"data": results} - def _execute_syncapi_request(self, endpoint: str, headers: Dict = None, payload: Dict = None): + def _execute_syncapi_request(self, endpoint: str, payload: Dict = None) -> Dict: """Executes POST request to SyncAPI endpoints""" # initiate requests session and implement retry logic of 5 request retries with 1 second between @@ -494,9 +498,7 @@ def upload_entities_batch_json(self, instance_job_id: str = None, entities_list: "entities": entities_list } - json_headers = self.headers.update({'Content-Type': 'application/json'}) - - response = self._execute_syncapi_request(endpoint=endpoint, headers=json_headers, payload=data) + response = self._execute_syncapi_request(endpoint=endpoint, payload=data) return response @@ -510,6 +512,58 @@ def finalize_sync_job(self, instance_job_id: str = None): data = {} - response = self._execute_syncapi_request(endpoint=endpoint, headers=self.headers, payload=data) + response = self._execute_syncapi_request(endpoint=endpoint, payload=data) + + return response + + def create_smartclass(self, smartclass_name: str = None, smartclass_description: str = None): + """Creates a new Smart Class within Assets. + + args: + smartclass_name (str): The "Smart class name" for Smart Class to be created. + smartclass_description (str): The "Description" for Smart Class to be created. + """ + + variables = { + "input": { + "tagName": smartclass_name, + "description": smartclass_description + } + } + + response = self._execute_query(CREATE_SMARTCLASS, variables=variables) + return response['data']['createSmartClass'] + + def create_smartclass_query(self, smartclass_id: str = None, query: str = None, query_description: str = None): + """Creates a new J1QL Query within a defined Smart Class. + + args: + smartclass_id (str): The unique ID of the Smart Class the query is created within. + query (str): The J1QL for the query being created. + query_description (str): The description of the query being created. + """ + + variables = { + "input": { + "smartClassId": smartclass_id, + "query": query, + "description": query_description + } + } + + response = self._execute_query(CREATE_SMARTCLASS_QUERY, variables=variables) + return response['data']['createSmartClassQuery'] + + def trigger_smartclass_evaluation(self, smartclass_id: str = None): + """Execute an on-demand Evaluation of a defined Smartclass. + + args: + smartclass_id (str): The unique ID of the Smart Class the query is created within. + """ + + variables = { + "smartClassId": smartclass_id + } - return response \ No newline at end of file + response = self._execute_query(RUN_SMARTCLASS_EVALUATION, variables=variables) + return response['data']['evaluateSmartClassRule'] From c636fb4bb828b21a4f6eb32d0fbfe2af59151458 Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Wed, 28 Aug 2024 19:51:57 -0600 Subject: [PATCH 05/24] rename EVALUATE_SMARTCLASS --- jupiterone/client.py | 6 +++--- jupiterone/constants.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/jupiterone/client.py b/jupiterone/client.py index 3b87243..0210445 100644 --- a/jupiterone/client.py +++ b/jupiterone/client.py @@ -31,7 +31,7 @@ ALL_PROPERTIES, CREATE_SMARTCLASS, CREATE_SMARTCLASS_QUERY, - RUN_SMARTCLASS_EVALUATION + EVALUATE_SMARTCLASS ) @@ -554,7 +554,7 @@ def create_smartclass_query(self, smartclass_id: str = None, query: str = None, response = self._execute_query(CREATE_SMARTCLASS_QUERY, variables=variables) return response['data']['createSmartClassQuery'] - def trigger_smartclass_evaluation(self, smartclass_id: str = None): + def evaluate_smartclass(self, smartclass_id: str = None): """Execute an on-demand Evaluation of a defined Smartclass. args: @@ -565,5 +565,5 @@ def trigger_smartclass_evaluation(self, smartclass_id: str = None): "smartClassId": smartclass_id } - response = self._execute_query(RUN_SMARTCLASS_EVALUATION, variables=variables) + response = self._execute_query(EVALUATE_SMARTCLASS, variables=variables) return response['data']['evaluateSmartClassRule'] diff --git a/jupiterone/constants.py b/jupiterone/constants.py index 348c0e7..e11536b 100644 --- a/jupiterone/constants.py +++ b/jupiterone/constants.py @@ -181,7 +181,7 @@ } """ -RUN_SMARTCLASS_EVALUATION = """ +EVALUATE_SMARTCLASS = """ mutation EvaluateSmartClassRule($smartClassId: ID!) { evaluateSmartClassRule(smartClassId: $smartClassId) { ruleId From 9fcc74623ad1d10d75c5763698554e363fef3562 Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Wed, 28 Aug 2024 20:04:41 -0600 Subject: [PATCH 06/24] add get_smartclass_details --- jupiterone/client.py | 23 +++++++++++++++++++++-- jupiterone/constants.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/jupiterone/client.py b/jupiterone/client.py index 0210445..cf12832 100644 --- a/jupiterone/client.py +++ b/jupiterone/client.py @@ -31,7 +31,8 @@ ALL_PROPERTIES, CREATE_SMARTCLASS, CREATE_SMARTCLASS_QUERY, - EVALUATE_SMARTCLASS + EVALUATE_SMARTCLASS, + GET_SMARTCLASS_DETAILS ) @@ -532,6 +533,7 @@ def create_smartclass(self, smartclass_name: str = None, smartclass_description: } response = self._execute_query(CREATE_SMARTCLASS, variables=variables) + return response['data']['createSmartClass'] def create_smartclass_query(self, smartclass_id: str = None, query: str = None, query_description: str = None): @@ -552,13 +554,14 @@ def create_smartclass_query(self, smartclass_id: str = None, query: str = None, } response = self._execute_query(CREATE_SMARTCLASS_QUERY, variables=variables) + return response['data']['createSmartClassQuery'] def evaluate_smartclass(self, smartclass_id: str = None): """Execute an on-demand Evaluation of a defined Smartclass. args: - smartclass_id (str): The unique ID of the Smart Class the query is created within. + smartclass_id (str): The unique ID of the Smart Class to trigger the evaluation for. """ variables = { @@ -566,4 +569,20 @@ def evaluate_smartclass(self, smartclass_id: str = None): } response = self._execute_query(EVALUATE_SMARTCLASS, variables=variables) + return response['data']['evaluateSmartClassRule'] + + def get_smartclass_details(self, smartclass_id: str = None): + """Fetch config details from defined Smart Class. + + args: + smartclass_id (str): The unique ID of the Smart Class to fetch details from. + """ + + variables = { + "id": smartclass_id + } + + response = self._execute_query(GET_SMARTCLASS_DETAILS, variables=variables) + + return response['data']['smartClass'] \ No newline at end of file diff --git a/jupiterone/constants.py b/jupiterone/constants.py index e11536b..d08fb4c 100644 --- a/jupiterone/constants.py +++ b/jupiterone/constants.py @@ -188,4 +188,37 @@ __typename } } +""" + +GET_SMARTCLASS_DETAILS = """ + query GetSmartClass($id: ID!) { + smartClass(id: $id) { + id + accountId + tagName + description + ruleId + queries { + id + smartClassId + description + query + __typename + } + tags { + id + smartClassId + name + type + value + __typename + } + rule { + lastEvaluationEndOn + evaluationStep + __typename + } + __typename + } + } """ \ No newline at end of file From dce766e2996f6f3a7c36b1ac869cccabfa1ee363 Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Wed, 28 Aug 2024 20:05:38 -0600 Subject: [PATCH 07/24] trail space --- jupiterone/client.py | 3 ++- jupiterone/constants.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/jupiterone/client.py b/jupiterone/client.py index cf12832..2268f9f 100644 --- a/jupiterone/client.py +++ b/jupiterone/client.py @@ -585,4 +585,5 @@ def get_smartclass_details(self, smartclass_id: str = None): response = self._execute_query(GET_SMARTCLASS_DETAILS, variables=variables) - return response['data']['smartClass'] \ No newline at end of file + return response['data']['smartClass'] + \ No newline at end of file diff --git a/jupiterone/constants.py b/jupiterone/constants.py index d08fb4c..d242d6f 100644 --- a/jupiterone/constants.py +++ b/jupiterone/constants.py @@ -221,4 +221,4 @@ __typename } } -""" \ No newline at end of file +""" From fa3350d3d6187d03499d0359aee05c018de76277 Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Wed, 28 Aug 2024 20:07:14 -0600 Subject: [PATCH 08/24] Update client.py --- jupiterone/client.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/jupiterone/client.py b/jupiterone/client.py index 2268f9f..bbc7671 100644 --- a/jupiterone/client.py +++ b/jupiterone/client.py @@ -482,7 +482,7 @@ def start_sync_job(self, instance_id: str = None): "integrationInstanceId": instance_id } - response = self._execute_syncapi_request(endpoint=endpoint, headers=self.headers, payload=data) + response = self._execute_syncapi_request(endpoint=endpoint, payload=data) return response @@ -586,4 +586,3 @@ def get_smartclass_details(self, smartclass_id: str = None): response = self._execute_query(GET_SMARTCLASS_DETAILS, variables=variables) return response['data']['smartClass'] - \ No newline at end of file From acd886826f2e5addf4d107711ae5f2b36880caa1 Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Wed, 28 Aug 2024 20:13:24 -0600 Subject: [PATCH 09/24] Update client.py --- jupiterone/client.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jupiterone/client.py b/jupiterone/client.py index bbc7671..a25ef46 100644 --- a/jupiterone/client.py +++ b/jupiterone/client.py @@ -240,7 +240,7 @@ def _limit_and_skip_query( return {"data": results} - def _execute_syncapi_request(self, endpoint: str, payload: Dict = None) -> Dict: + def _execute_syncapi_request(self, endpoint: str, payload: Dict): """Executes POST request to SyncAPI endpoints""" # initiate requests session and implement retry logic of 5 request retries with 1 second between @@ -266,6 +266,7 @@ def _execute_syncapi_request(self, endpoint: str, payload: Dict = None) -> Dict: "JupiterOne API rate limit exceeded" ) raise JupiterOneApiError(content.get("errors")) + return response.json() elif response.status_code == 401: From 99d031a5d9f1176000b95df51e16200a426fbe6f Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Wed, 28 Aug 2024 20:51:50 -0600 Subject: [PATCH 10/24] add fetch_integration_jobs and fetch_integration_job_events --- jupiterone/client.py | 40 ++++++++++++++++++--- jupiterone/constants.py | 79 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+), 4 deletions(-) diff --git a/jupiterone/client.py b/jupiterone/client.py index a25ef46..9f42fd8 100644 --- a/jupiterone/client.py +++ b/jupiterone/client.py @@ -28,11 +28,13 @@ DELETE_RELATIONSHIP, CURSOR_QUERY_V1, CREATE_INSTANCE, + INTEGRATION_JOB_VALUES, + INTEGRATION_INSTANCE_EVENT_VALUES, ALL_PROPERTIES, CREATE_SMARTCLASS, CREATE_SMARTCLASS_QUERY, EVALUATE_SMARTCLASS, - GET_SMARTCLASS_DETAILS + GET_SMARTCLASS_DETAILS, ) @@ -240,7 +242,7 @@ def _limit_and_skip_query( return {"data": results} - def _execute_syncapi_request(self, endpoint: str, payload: Dict): + def _execute_syncapi_request(self, endpoint: str, payload: Dict = None) -> Dict: """Executes POST request to SyncAPI endpoints""" # initiate requests session and implement retry logic of 5 request retries with 1 second between @@ -266,7 +268,6 @@ def _execute_syncapi_request(self, endpoint: str, payload: Dict): "JupiterOne API rate limit exceeded" ) raise JupiterOneApiError(content.get("errors")) - return response.json() elif response.status_code == 401: @@ -518,6 +519,38 @@ def finalize_sync_job(self, instance_job_id: str = None): return response + def fetch_integration_jobs(self, instance_id: str = None): + """Fetch Integration Job details from defined integration instance. + + args: + instance_id (str): The "integrationInstanceId" of the integration to fetch jobs from. + """ + variables = { + "integrationInstanceId": instance_id, + "size": 100 + } + + response = self._execute_query(INTEGRATION_JOB_VALUES, variables=variables) + + return response['data']['integrationJobs'] + + def fetch_integration_job_events(self, instance_id: str = None, instance_job_id: str = None): + """Fetch events within an integration job run. + + args: + instance_id (str): The integration Instance Id of the integration to fetch job events from. + instance_job_id (str): The integration Job ID of the integration to fetch job events from. + """ + variables = { + "integrationInstanceId": instance_id, + "jobId": instance_job_id, + "size": 1000 + } + + response = self._execute_query(INTEGRATION_INSTANCE_EVENT_VALUES, variables=variables) + + return response['data']['integrationEvents'] + def create_smartclass(self, smartclass_name: str = None, smartclass_description: str = None): """Creates a new Smart Class within Assets. @@ -525,7 +558,6 @@ def create_smartclass(self, smartclass_name: str = None, smartclass_description: smartclass_name (str): The "Smart class name" for Smart Class to be created. smartclass_description (str): The "Description" for Smart Class to be created. """ - variables = { "input": { "tagName": smartclass_name, diff --git a/jupiterone/constants.py b/jupiterone/constants.py index d242d6f..6874f1d 100644 --- a/jupiterone/constants.py +++ b/jupiterone/constants.py @@ -222,3 +222,82 @@ } } """ + +INTEGRATION_JOB_VALUES = """ + query IntegrationJobs( + $status: IntegrationJobStatus + $integrationInstanceId: String + $integrationDefinitionId: String + $integrationInstanceIds: [String] + $cursor: String + $size: Int + ) { + integrationJobs( + status: $status + integrationInstanceId: $integrationInstanceId + integrationDefinitionId: $integrationDefinitionId + integrationInstanceIds: $integrationInstanceIds + cursor: $cursor + size: $size + ) { + jobs { + id + status + integrationInstanceId + createDate + endDate + hasSkippedSteps + integrationInstance { + id + name + __typename + } + integrationDefinition { + id + title + integrationType + __typename + } + __typename + } + pageInfo { + endCursor + __typename + } + __typename + } + } +""" + +INTEGRATION_INSTANCE_EVENT_VALUES = """ + query ListEvents( + $jobId: String! + $integrationInstanceId: String! + $cursor: String + $size: Int + ) { + integrationEvents( + size: $size + cursor: $cursor + jobId: $jobId + integrationInstanceId: $integrationInstanceId + ) { + events { + id + name + description + createDate + jobId + level + eventCode + __typename + } + pageInfo { + endCursor + hasNextPage + __typename + } + __typename + } + } +""" \ No newline at end of file From 18c6b03e010f15401b0df15c8ecc75eea8c1ed4f Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Wed, 28 Aug 2024 21:05:40 -0600 Subject: [PATCH 11/24] Update client.py --- jupiterone/client.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jupiterone/client.py b/jupiterone/client.py index 9f42fd8..a1f2b45 100644 --- a/jupiterone/client.py +++ b/jupiterone/client.py @@ -518,7 +518,7 @@ def finalize_sync_job(self, instance_job_id: str = None): response = self._execute_syncapi_request(endpoint=endpoint, payload=data) return response - + def fetch_integration_jobs(self, instance_id: str = None): """Fetch Integration Job details from defined integration instance. @@ -533,7 +533,7 @@ def fetch_integration_jobs(self, instance_id: str = None): response = self._execute_query(INTEGRATION_JOB_VALUES, variables=variables) return response['data']['integrationJobs'] - + def fetch_integration_job_events(self, instance_id: str = None, instance_job_id: str = None): """Fetch events within an integration job run. From a4d7d9f17f866ce0fbf2d4de30795e74f052747a Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Wed, 28 Aug 2024 21:20:16 -0600 Subject: [PATCH 12/24] add list_configured_alert_rules --- jupiterone/client.py | 31 ++++++++++++++++-- jupiterone/constants.py | 70 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 98 insertions(+), 3 deletions(-) diff --git a/jupiterone/client.py b/jupiterone/client.py index a1f2b45..3409315 100644 --- a/jupiterone/client.py +++ b/jupiterone/client.py @@ -35,6 +35,7 @@ CREATE_SMARTCLASS_QUERY, EVALUATE_SMARTCLASS, GET_SMARTCLASS_DETAILS, + LIST_RULE_INSTANCES ) @@ -518,7 +519,7 @@ def finalize_sync_job(self, instance_job_id: str = None): response = self._execute_syncapi_request(endpoint=endpoint, payload=data) return response - + def fetch_integration_jobs(self, instance_id: str = None): """Fetch Integration Job details from defined integration instance. @@ -533,7 +534,7 @@ def fetch_integration_jobs(self, instance_id: str = None): response = self._execute_query(INTEGRATION_JOB_VALUES, variables=variables) return response['data']['integrationJobs'] - + def fetch_integration_job_events(self, instance_id: str = None, instance_job_id: str = None): """Fetch events within an integration job run. @@ -619,3 +620,29 @@ def get_smartclass_details(self, smartclass_id: str = None): response = self._execute_query(GET_SMARTCLASS_DETAILS, variables=variables) return response['data']['smartClass'] + + def list_configured_alert_rules(self): + """List defined Alert Rules configured in J1 account + + """ + + variables = { + "limit": 100 + } + + response = self._execute_query(LIST_RULE_INSTANCES, variables=variables) + + return response['data']['listRuleInstances'] + + def list_alert_rules(self): + """List defined Alert Rules configured in J1 account + + """ + + variables = { + "limit": 100 + } + + response = self._execute_query(LIST_RULE_INSTANCES, variables=variables) + + return response['data']['listRuleInstances'] diff --git a/jupiterone/constants.py b/jupiterone/constants.py index 6874f1d..0e9aa31 100644 --- a/jupiterone/constants.py +++ b/jupiterone/constants.py @@ -300,4 +300,72 @@ __typename } } -""" \ No newline at end of file +""" + +LIST_RULE_INSTANCES = """ + query listRuleInstances( + $limit: Int, + $cursor: String, + $filters: ListRuleInstancesFilters) { + listRuleInstances( + limit: $limit, + cursor: $cursor, + filters: $filters) { + questionInstances { + ...RuleInstanceFields + __typename + } + pageInfo { + hasNextPage + endCursor + __typename + } + __typename + } + } + + fragment RuleInstanceFields on QuestionRuleInstance { + id + accountId + name + description + version + lastEvaluationStartOn + lastEvaluationEndOn + evaluationStep + specVersion + notifyOnFailure + triggerActionsOnNewEntitiesOnly + pollingInterval + templates + outputs + question { + queries { + query + name + version + includeDeleted + __typename + } + __typename + } + questionId + latest + deleted + type + operations { + when + actions + __typename + } + latestAlertId + latestAlertIsActive + state { + actions + __typename + } + tags + remediationSteps + __typename + } +""" From 788def6f5a630bd40535fd23ede74b6eee8db04c Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Wed, 28 Aug 2024 21:21:28 -0600 Subject: [PATCH 13/24] Update client.py --- jupiterone/client.py | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/jupiterone/client.py b/jupiterone/client.py index 3409315..362bd72 100644 --- a/jupiterone/client.py +++ b/jupiterone/client.py @@ -633,16 +633,3 @@ def list_configured_alert_rules(self): response = self._execute_query(LIST_RULE_INSTANCES, variables=variables) return response['data']['listRuleInstances'] - - def list_alert_rules(self): - """List defined Alert Rules configured in J1 account - - """ - - variables = { - "limit": 100 - } - - response = self._execute_query(LIST_RULE_INSTANCES, variables=variables) - - return response['data']['listRuleInstances'] From 6a616c0434eca0dbc3372a5ff2727101df083081 Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Wed, 28 Aug 2024 21:39:49 -0600 Subject: [PATCH 14/24] add generate_j1ql --- jupiterone/client.py | 20 +++++++++++++++++++- jupiterone/constants.py | 8 ++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/jupiterone/client.py b/jupiterone/client.py index 362bd72..6c5b51f 100644 --- a/jupiterone/client.py +++ b/jupiterone/client.py @@ -35,7 +35,8 @@ CREATE_SMARTCLASS_QUERY, EVALUATE_SMARTCLASS, GET_SMARTCLASS_DETAILS, - LIST_RULE_INSTANCES + LIST_RULE_INSTANCES, + J1QL_FROM_NATURAL_LANGUAGE ) @@ -633,3 +634,20 @@ def list_configured_alert_rules(self): response = self._execute_query(LIST_RULE_INSTANCES, variables=variables) return response['data']['listRuleInstances'] + + def generate_j1ql(self, natural_language_prompt: str = None): + """Generate J1QL query syntax from natural language user input. + + args: + natural_language_prompt (str): The naturalLanguageQuery plaintext input to generate J1QL from. + """ + + variables = { + "input": { + "naturalLanguageQuery": natural_language_prompt + } + } + + response = self._execute_query(J1QL_FROM_NATURAL_LANGUAGE, variables=variables) + + return response['data']['j1qlFromNaturalLanguage'] diff --git a/jupiterone/constants.py b/jupiterone/constants.py index 0e9aa31..d9fc04b 100644 --- a/jupiterone/constants.py +++ b/jupiterone/constants.py @@ -369,3 +369,11 @@ __typename } """ + +J1QL_FROM_NATURAL_LANGUAGE = """ + query j1qlFromNaturalLanguage($input: J1qlFromNaturalLanguageInput!) { + j1qlFromNaturalLanguage(input: $input) { + j1ql + } + } +""" \ No newline at end of file From 460d59e7e1f643248de1605783df52f6cb423b39 Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Wed, 4 Sep 2024 14:17:50 -0600 Subject: [PATCH 15/24] added new methods to examples.py --- examples/examples.py | 118 ++++++++++++++++++++++++++++++++++++++++++- jupiterone/client.py | 2 +- 2 files changed, 118 insertions(+), 2 deletions(-) diff --git a/examples/examples.py b/examples/examples.py index 8ad04bc..0aaabf6 100644 --- a/examples/examples.py +++ b/examples/examples.py @@ -11,6 +11,7 @@ # query_v1 q = "FIND jupiterone_user" query_r = j1.query_v1(q) +print("query_v1()") print(query_r) # create_entity @@ -31,6 +32,7 @@ properties=properties, timestamp=int(time.time()) * 1000 # Optional, defaults to current datetime ) +print("create_entity()") print(create_r) properties = { @@ -42,6 +44,7 @@ entity_id='{}'.format(create_r['entity']['_id']), properties=properties ) +print("update_entity()") print(update_r) # create_entity_2 @@ -61,6 +64,7 @@ properties=properties, timestamp=int(time.time()) * 1000 # Optional, defaults to current datetime ) +print("create_entity()") print(create_r_2) # create_relationship @@ -71,20 +75,132 @@ from_entity_id=create_r['entity']['_id'], to_entity_id=create_r_2['entity']['_id'], ) +print("create_relationship()") print(create_relationship_r) # delete_relationship delete_relationship_r = j1.delete_relationship(relationship_id=create_relationship_r['relationship']['_id']) +print("delete_relationship()") print(delete_relationship_r) # delete_entity delete_entity_r1 = j1.delete_entity(entity_id=create_r['entity']['_id']) +print("delete_entity()") print(delete_entity_r1) delete_entity_r2 = j1.delete_entity(entity_id=create_r_2['entity']['_id']) +print("delete_entity()") print(delete_entity_r2) +# cursor_query q = "FIND Person" cursor_query_r = j1._cursor_query(q) +print("cursor_query()") print(cursor_query_r) -print(len(cursor_query_r['data'])) + +# fetch_all_entity_properties +fetch_all_entity_properties_r = j1.fetch_all_entity_properties() +print("fetch_all_entity_properties()") +print(fetch_all_entity_properties_r) + +# fetch_all_entity_tags +fetch_all_entity_tags_r = j1.fetch_all_entity_tags() +print("fetch_all_entity_tags()") +print(fetch_all_entity_tags_r) + +# create_integration_instance +create_integration_instance_r = j1.create_integration_instance(instance_name="testInstanceName", + instance_description="testInstanceDescription") +print("create_integration_instance()") +print(create_integration_instance_r) + +# start_sync_job +start_sync_job_r = j1.start_sync_job(instance_id=create_integration_instance_r['id']) +print("start_sync_job()") +print(start_sync_job_r) + +# upload_entities_batch_json +entity_payload = [ + { + "_key": "1", + "_type": "jupiterone-api-client-python", + "_class": "API", + "propertyName": "value" + }, + { + "_key": "2", + "_type": "jupiterone-api-client-python", + "_class": "API", + "propertyName": "value" + }, + { + "_key": "3", + "_type": "jupiterone-api-client-python", + "_class": "API", + "propertyName": "value" + } + ] + +upload_entities_batch_json_r = j1.upload_entities_batch_json(instance_job_id=start_sync_job_r['job']['id'], + entities_list=entity_payload) +print("upload_entities_batch_json()") +print(upload_entities_batch_json_r) + +# fetch_integration_jobs +fetch_integration_jobs_r = j1.fetch_integration_jobs(instance_id=create_integration_instance_r['id']) +print("fetch_integration_jobs()") +print(fetch_integration_jobs_r) + +# fetch_integration_job_events +fetch_integration_job_events_r = j1.fetch_integration_job_events(instance_id=create_integration_instance_r['id'], + instance_job_id=fetch_integration_jobs_r['jobs'][0]['id']) +print("fetch_integration_job_events()") +print(fetch_integration_job_events_r) + +# finalize_sync_job +finalize_sync_job_r = j1.finalize_sync_job(instance_job_id=start_sync_job_r['job']['id']) +print("finalize_sync_job()") +print(finalize_sync_job_r) + +# create_smartclass +create_smartclass_r = j1.create_smartclass(smartclass_name="SmartClassTest2", + smartclass_description="Created via create_smartclass() method") +print("create_smartclass()") +print(create_smartclass_r) + +# create_smartclass_query +create_smartclass_query_r = j1.create_smartclass_query(smartclass_id=create_smartclass_r['id'], + query="FIND (Device|Host) with osType ~= \'Windows\'", + query_description="all windows devices and hosts") +print("create_smartclass_query()") +print(create_smartclass_query_r) + +# evaluate_smartclass +evaluate_smartclass_r = j1.evaluate_smartclass(smartclass_id=create_smartclass_query_r['smartClassId']) +print("evaluate_smartclass()") +print(evaluate_smartclass_r) + +# get_smartclass_details +get_smartclass_details_r = j1.get_smartclass_details(smartclass_id=create_smartclass_query_r['smartClassId']) +print("get_smartclass_details()") +print(get_smartclass_details_r) + +# list_configured_alert_rules +list_configured_alert_rules_r = j1.list_configured_alert_rules() +print("list_configured_alert_rules()") +print(list_configured_alert_rules_r) + +# generate_j1ql +generate_j1ql_r = j1.generate_j1ql(natural_language_prompt="show me all Users containing 'Colin' in their email address") +print("generate_j1ql()") +print(generate_j1ql_r) + + + + + + + + + + diff --git a/jupiterone/client.py b/jupiterone/client.py index 6c5b51f..6fc7b88 100644 --- a/jupiterone/client.py +++ b/jupiterone/client.py @@ -639,7 +639,7 @@ def generate_j1ql(self, natural_language_prompt: str = None): """Generate J1QL query syntax from natural language user input. args: - natural_language_prompt (str): The naturalLanguageQuery plaintext input to generate J1QL from. + natural_language_prompt (str): The naturalLanguageQuery prompt input to generate J1QL from. """ variables = { From c11887de12ab3deb2a1cdf0ebf6f2cbe5b410f52 Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Wed, 4 Sep 2024 14:44:33 -0600 Subject: [PATCH 16/24] bump version add README --- README.md | 4 ++++ setup.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f389b30..7d15849 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,10 @@ For users with J1 accounts in the EU region, the 'url' parameter will need to be If no 'url' parameter is passed, the default of "https://graphql.us.jupiterone.io" is used. +##### Method Exmaples: + +See the examples/examples.py for full usage example documentation + ##### Execute a query: ```python diff --git a/setup.py b/setup.py index 93329fb..eab50e7 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setup( name="jupiterone", - version="1.0.1", + version="1.1.0", description="A Python client for the JupiterOne API", license="MIT License", author="JupiterOne", From 7533ebe13e404520d9bfcb4e36b4a6324e8f2c5a Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Thu, 5 Sep 2024 11:03:16 -0600 Subject: [PATCH 17/24] add integration_definition_id param and set default to Custom --- jupiterone/client.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/jupiterone/client.py b/jupiterone/client.py index 6fc7b88..5d31a37 100644 --- a/jupiterone/client.py +++ b/jupiterone/client.py @@ -412,18 +412,23 @@ def delete_relationship(self, relationship_id: str = None): response = self._execute_query(DELETE_RELATIONSHIP, variables=variables) return response["data"]["deleteRelationship"] - def create_integration_instance(self, instance_name: str = None, instance_description: str = None): + def create_integration_instance(self, + instance_name: str = None, + instance_description: str = None, + integration_definition_id: str = "8013680b-311a-4c2e-b53b-c8735fd97a5c"): """Creates a new Custom Integration Instance. args: instance_name (str): The "Account name" for integration instance instance_description (str): The "Description" for integration instance + integration_definition_id (str): The "Integration definition ID" for integration instance, + if no parameter is passed, then the Custom Integration definition ID will be used. """ variables = { "instance": { "name": instance_name, "description": instance_description, - "integrationDefinitionId": "8013680b-311a-4c2e-b53b-c8735fd97a5c", + "integrationDefinitionId": integration_definition_id, "pollingInterval": "DISABLED", "config": { "@tag": { From d2fb6386a631c38d90cc4207441b76bc9a228755 Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Thu, 5 Sep 2024 14:24:21 -0600 Subject: [PATCH 18/24] update examples.py --- examples/examples.py | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/examples/examples.py b/examples/examples.py index 0aaabf6..0945a91 100644 --- a/examples/examples.py +++ b/examples/examples.py @@ -163,7 +163,7 @@ print(finalize_sync_job_r) # create_smartclass -create_smartclass_r = j1.create_smartclass(smartclass_name="SmartClassTest2", +create_smartclass_r = j1.create_smartclass(smartclass_name="SmartClass1", smartclass_description="Created via create_smartclass() method") print("create_smartclass()") print(create_smartclass_r) @@ -191,16 +191,6 @@ print(list_configured_alert_rules_r) # generate_j1ql -generate_j1ql_r = j1.generate_j1ql(natural_language_prompt="show me all Users containing 'Colin' in their email address") +generate_j1ql_r = j1.generate_j1ql(natural_language_prompt="show me all Users containing 'jupiterone' in their email address") print("generate_j1ql()") print(generate_j1ql_r) - - - - - - - - - - From 887a4905076548c70c3ed7f543d9c81da947b341 Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Mon, 9 Sep 2024 21:17:18 -0600 Subject: [PATCH 19/24] add more bulk upload methods --- jupiterone/client.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/jupiterone/client.py b/jupiterone/client.py index 5d31a37..a320700 100644 --- a/jupiterone/client.py +++ b/jupiterone/client.py @@ -512,6 +512,36 @@ def upload_entities_batch_json(self, instance_job_id: str = None, entities_list: return response + def upload_relationships_batch_json(self, instance_job_id: str = None, relationships_list: list = None): + """Upload batch of relationships. + + args: + instance_job_id (str): The "Job ID" for the Custom Integration job + relationships_list (list): List of Dictionaries containing relationships data to upload + """ + endpoint = f"/persister/synchronization/jobs/{instance_job_id}/relationships" + + data = { + "relationships": relationships_list + } + + response = self._execute_syncapi_request(endpoint=endpoint, payload=data) + + return response + + def upload_combined_batch_json(self, instance_job_id: str = None, combined_payload: Dict = None): + """Upload batch of entities and relationships together. + + args: + instance_job_id (str): The "Job ID" for the Custom Integration job. + combined_payload (list): Dictionary containing combined entities and relationships data to upload. + """ + endpoint = f"/persister/synchronization/jobs/{instance_job_id}/upload" + + response = self._execute_syncapi_request(endpoint=endpoint, payload=combined_payload) + + return response + def finalize_sync_job(self, instance_job_id: str = None): """Start a synchronization job. From 2b980965995fb87ad46eb2cf749d6235b3bd4bdc Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Mon, 9 Sep 2024 21:24:53 -0600 Subject: [PATCH 20/24] Update examples.py --- examples/examples.py | 129 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 111 insertions(+), 18 deletions(-) diff --git a/examples/examples.py b/examples/examples.py index 0945a91..ed468f0 100644 --- a/examples/examples.py +++ b/examples/examples.py @@ -5,8 +5,9 @@ account = os.environ.get("JUPITERONE_ACCOUNT") token = os.environ.get("JUPITERONE_TOKEN") +url = "https://graphql.us.jupiterone.io" -j1 = JupiterOneClient(account=account, token=token) +j1 = JupiterOneClient(account=account, token=token, url=url) # query_v1 q = "FIND jupiterone_user" @@ -109,13 +110,15 @@ print(fetch_all_entity_tags_r) # create_integration_instance -create_integration_instance_r = j1.create_integration_instance(instance_name="testInstanceName", - instance_description="testInstanceDescription") +create_integration_instance_r = j1.create_integration_instance(instance_name="pythonclient-customintegration", + instance_description="dev-testing") print("create_integration_instance()") print(create_integration_instance_r) +integration_instance_id = "" + # start_sync_job -start_sync_job_r = j1.start_sync_job(instance_id=create_integration_instance_r['id']) +start_sync_job_r = j1.start_sync_job(instance_id=integration_instance_id) print("start_sync_job()") print(start_sync_job_r) @@ -123,45 +126,135 @@ entity_payload = [ { "_key": "1", - "_type": "jupiterone-api-client-python", + "_type": "pythonclient", "_class": "API", - "propertyName": "value" + "displayName": "pythonclient1", + "propertyName": "value", + "relationshipProperty": "source", }, { "_key": "2", - "_type": "jupiterone-api-client-python", + "_type": "pythonclient", "_class": "API", + "displayName": "pythonclient2", "propertyName": "value" }, { "_key": "3", - "_type": "jupiterone-api-client-python", + "_type": "pythonclient", "_class": "API", + "displayName": "pythonclient3", "propertyName": "value" } - ] +] +# update_entities_batch_json upload_entities_batch_json_r = j1.upload_entities_batch_json(instance_job_id=start_sync_job_r['job']['id'], entities_list=entity_payload) print("upload_entities_batch_json()") print(upload_entities_batch_json_r) +# upload_relationships_batch_json +relationships_payload = [ + { + "_key": "1:2", + "_class": "EXTENDS", + "_type": "pythonclient_extends_pythonclient", + "_fromEntityKey": "1", + "_toEntityKey": "2", + "relationshipProperty": "value" + }, + { + "_key": "2:3", + "_class": "EXTENDS", + "_type": "pythonclient_extends_pythonclient", + "_fromEntityKey": "2", + "_toEntityKey": "3", + "relationshipProperty": "value" + } +] + +# update_relationships_batch_json +upload_relationships_batch_json_r = j1.upload_relationships_batch_json(instance_job_id=start_sync_job_r['job']['id'], + relationships_list=relationships_payload) +print("upload_relationships_batch_json()") +print(upload_relationships_batch_json_r) + +# upload_entities_batch_json +combined_payload = { + "entities": [ + { + "_key": "4", + "_type": "pythonclient", + "_class": "API", + "displayName": "pythonclient4", + "propertyName": "value", + "relationshipProperty": "source", + }, + { + "_key": "5", + "_type": "pythonclient", + "_class": "API", + "displayName": "pythonclient5", + "propertyName": "value" + }, + { + "_key": "6", + "_type": "pythonclient", + "_class": "API", + "displayName": "pythonclient6", + "propertyName": "value" + } +], + "relationships": [ + { + "_key": "4:5", + "_class": "EXTENDS", + "_type": "pythonclient_extends_pythonclient", + "_fromEntityKey": "4", + "_toEntityKey": "5", + "relationshipProperty": "value" + }, + { + "_key": "5:6", + "_class": "EXTENDS", + "_type": "pythonclient_extends_pythonclient", + "_fromEntityKey": "5", + "_toEntityKey": "6", + "relationshipProperty": "value" + } +] +} + +# upload_combined_batch_json +upload_combined_batch_json_r = j1.upload_combined_batch_json(instance_job_id=start_sync_job_r['job']['id'], + combined_payload=combined_payload) +print("upload_combined_batch_json()") +print(upload_combined_batch_json_r) + +# finalize_sync_job +finalize_sync_job_r = j1.finalize_sync_job(instance_job_id=start_sync_job_r['job']['id']) +print("finalize_sync_job()") +print(finalize_sync_job_r) + # fetch_integration_jobs -fetch_integration_jobs_r = j1.fetch_integration_jobs(instance_id=create_integration_instance_r['id']) +fetch_integration_jobs_r = j1.fetch_integration_jobs(instance_id=integration_instance_id) print("fetch_integration_jobs()") print(fetch_integration_jobs_r) +while j1.fetch_integration_jobs(instance_id=integration_instance_id)['jobs'][0]['status'] == "IN_PROGRESS": + + fetch_integration_jobs_r = j1.fetch_integration_jobs(instance_id=integration_instance_id) + + print("fetch_integration_jobs()") + print(fetch_integration_jobs_r) + # fetch_integration_job_events -fetch_integration_job_events_r = j1.fetch_integration_job_events(instance_id=create_integration_instance_r['id'], +fetch_integration_job_events_r = j1.fetch_integration_job_events(instance_id=integration_instance_id, instance_job_id=fetch_integration_jobs_r['jobs'][0]['id']) print("fetch_integration_job_events()") print(fetch_integration_job_events_r) -# finalize_sync_job -finalize_sync_job_r = j1.finalize_sync_job(instance_job_id=start_sync_job_r['job']['id']) -print("finalize_sync_job()") -print(finalize_sync_job_r) - # create_smartclass create_smartclass_r = j1.create_smartclass(smartclass_name="SmartClass1", smartclass_description="Created via create_smartclass() method") @@ -170,8 +263,8 @@ # create_smartclass_query create_smartclass_query_r = j1.create_smartclass_query(smartclass_id=create_smartclass_r['id'], - query="FIND (Device|Host) with osType ~= \'Windows\'", - query_description="all windows devices and hosts") + query="FIND (Device|Host) with osType ~= \'Windows\'", + query_description="all windows devices and hosts") print("create_smartclass_query()") print(create_smartclass_query_r) From e148ef23523d2dd7c8408ac28723b932783e8a63 Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Mon, 9 Sep 2024 21:28:05 -0600 Subject: [PATCH 21/24] Create exampleEntitiesRelated.png --- examples/exampleEntitiesRelated.png | Bin 0 -> 152187 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 examples/exampleEntitiesRelated.png diff --git a/examples/exampleEntitiesRelated.png b/examples/exampleEntitiesRelated.png new file mode 100644 index 0000000000000000000000000000000000000000..699da9316cd00328330ce2a2427e34cd4cd803e0 GIT binary patch literal 152187 zcmeFZcQjn@7Wj=w2tguILJ(2}K@feAs1dzKZ_$n3X4FKG=!xEg=w=XQ)FA|kE_$z{ zGZ+j;d5>?q_kO>>^{(~4Yu!J7Yu#CEoHOS<+F`zbJw4yU+N4Gm2z~kxGTW*gzE{5ILY0+cR?<%Ek)F&W&g+y{1Riac5`zQ z;pX=A^yKp7<8pMd;^q++7Uq7!%gxKn38dh3g*dpGdT~0q-uu0fKg*G}a5Zt9v=Th>?q$|@|(`|mmb?atqGYPnjtNI8OmI^D$o z)n9*P{`Z@IWCU?vH2vR1@w=RVy9x+eoCL)ESEq@S=zcN%1oZnI8)+3y;0S2k#fLx$ z`19!ZBXEw-&^Op}trHLL8J@iKb4@S&jkL@4w@}CJ#`?FSZ{>U;lxcmofpuTX)N^{-Y#3f>gV|^8R%vX>1Io$6OH%r0N!Mo$F8xDjZ*CFaZPEzndic+hNF(qv zK#;FVPi;Q+7YUyG<-}>b#GDj~7uRjo`Uw~@|3eo1%Ad7Kovv=ENSr>Ea-)&5Pjer3 zF2C0nmf2SS_li}o5>%=OD7aBDf~t$#Id~$kb91O`U-`RGWUl9H5!96a-20v_eR%EfDQ&Lj^AnsLEob!7*>Zi`Y#15)jtF^h18(4~E5KblTy}aefs^qH z`iFvOrap@R9@_E)S_soDnz0h8KdjP8)x&kesH65&;Qx?e@t$fn0VqWXE}iI=Jkddv zhW@)GO#1JsngdDh!oTQ1Md-t}kS8aY-lYU%KOQo=r>_?8o}A&( zx>1l158{6uGZ+sl6ZoGTF?!0A{ZGUTV_lfP`BiD_x_GCxoQCq6-!Pru?6ggXq9t~V;qh>jM zDMm&7!_?~Yz$-~r;E6WB1aQ_BJ|pi<{_>?{yX0Y*zEw)ZD%IW6=jYzt%L94I4BD$E z$Bqd7%T-P6m>Z*RO{Ys~KW~~@;no7o72AU&%o@#E{uELib96FZ6twYyn_Wy$<_iDE z7^9R|rQG~-&zdy|G(EOzmRXwaCXKWk_5PlQ#CcaT{>c4+X$PP#^oxeX}YvqPEZ z5I^?qq*~JPCig)1-NrX!`vDma!|T2DzT^)TV7vK3DL}4arV=)*tAx&we2RdqWxiE8 zkC{L_j1M{{^7y0km;?s=j(N=WCPVz)XGS;rGZor&+Uw7aB*XC% zJ^u5oZOh?eU0FtOgG0mq@MQ*Gg2_bg#*<%NX`+Zwo%6F(rAEKg$z`+4hd6YjX0C`VG&M{kv?(*h-e zle`&!zLv%e2V`lxQ&XW~_k0*q!;1JU_*H*8M8CQgQ8I%Nq=ydI@G)>wqYdjlLyg;9t3n*%|yP z1FrJM#C3tiaGIR1-|c!QypJ^bc0y{Fym2Qd3yzIRxdPobR5(O|VGC845rdBF`EqTi z@$OIWrT+eVg~Lhf-5-lez>&tTQ{lRyz7FS3y;5D2VLxWluBrOGe-Isdp%8Z2A;Nlh zxHb*8(S9f2Dyng{qcOJxod?h4Qj|HK_8bB_CaHtfV?GQKns{ zo|>4hX54B}*swkDU1h^;>$G%h!?bxyHtHRRK->{bc2Du5JF6TgzD<@w90#VS@6cS1 zSvfmiFX@J^!>ky+H_G0U16sr|Kqfe8a)z5ZujLMlZJh58I4E!*Oik=L3?M(lh9Ba? zpUZNC{Kc0v%lGEPEXCf0iTjPDo_?d>IvIM0w+y0<*~4n~MRBzzX_jOwByh=ol&vjU zJF9)9YbYFLlTn_oB5rMzaR^pRnfhu$&u5)*6eydX(VET=vBv^3|}$vt!G)@Y_8&-{z~Vv2QIh^{cqj+Mmv0nfQJwmiC5Z7HI$2Yze8B z-xVmKy3q}bFUh!3vwHb3m{Tv=ABHH?9jCTF{U(lOC&8R?hiF4ab?gQQeZG!l%J!zK zkzPKGOWEU9K+(o-n%-*^aOh_@r)m{PoKK0Ttst5w}}z)DQESf~w9**UPDSn8SA4rdFGT3QS($KjxDYkvCaiNS9$t~jW8RjC>6K`_ zrC8}V7PJo9?gJa?x9}5_jBR7QZN|Qhky+*}M6z5K>2cJ--^yn6|n16cP#jHn2CCfD1|04DbX` zb}h*(^O0;oEJMV)BZp%c^wja;?vtXsq^>`TdTWOaYy0Du!rcW)bPNx$5~q7HYQ(#r zJQm9#7{w_6F+u9`W*6e^Knn5Eu2kUxlr+MA?ALvpmK*P#YwcJLH; zKZv>~U2FnXCTKhOqqtOZcMl(CH~;;^5->Wrt=o)O*gS97&?l^J9&L3-#pwv_uThPt zD~x3IWDl!tK#COze5x2|Q*GBZD-7U%{S=}S6HX(yCC;raU&V)>*=RLBSDSt}{;&xJ zOS1JRrHeJ_nafJWw3?VMN-x6?mZ2iqAT#_dq1Qt@H8vaM=dsP{ZriJNlWJc!g@n70xwI zt2ORQx6Bk3&vm^H@zdCh_o{G__*Kv!j85O<&!{4^?Dz!!OcZYA#nt=8PGR)Z#P+LMRD9 zF8Dh?-1Me0HPW%Q-Fk^p;1y+BUX4&Z zoo}DGD5h;?Cqi;jn@r0eh%!v*WSduF(gisM-Pbf-2b2VBB#!BPN2CG-KlH*4>*%iP zX|+a{ua`7VU!#4}vE3`b`Tji=(39}JP6LIGi-Kx$OK3>U=D1qZ zx0bs2dY^7iAh0pzNL#$cHhRaWj`cgiw*?(i*TGv>@$U@*L+UQbOJCbvJl$KdDVz9H(;G4@6E?)Oj!h#s zQQx7a^%{f7;58<3PIFXD|_nV9D>RpIlc;4u{M-&_ltzBh?-S8$o7k79^Kj2?o@chWusZFmP=q=Xj<0V z0S=cu&su#tCvr!4UMU8EsVHYCPPTqC=XAyrTat<(s6H;&Oh*dfTe5-_n)&r z%p+2C)}$}<-SoxHtUKzd`kAWZ`>lzVB>5SWxfaOGoyng#yl#2s&PX+N%L)aenD^QW zaZFap^IiU4UX}L-FGrj0S5XaB_L!pNf&l#z6xINLFx@(sa@Mn&yfFcfsj-cLoh*KB zh+n`iddiOUU1n+oiyu3Dt;=<1c;7I7nl@vO$s$6WKrs!B{wF(@vrTWfmM40Pp6gQ4 zX}x(tHVoDGJ3@7X5mVY)jm;|D?RH9M=`Y2i_`v#IWK4}Crb0fIm1Yb#jC)c|J)p?O zl;y=r??iJJe(yaQwrjDB`B^m?$|+{SqkWEKxsUR@_kW2{VpY8V*gv|Xl_nNn`fK*wO{F$U~Y(TeW9QXTN4Zz-zvOL{&tzF2p$ zs_f}m&uK{eRTj=7qscMp$;R_jM^|7@R;N_IKdgUyUN1}cZGmb`9|<g@)mp@}>S znagT{J`@rsr5NfUj=sBZB}Ga3_k|LO3R9^`DkX=#JI3jSZcz8EU-lB>JT}T&)};pz zjCm-&FFz+gYI<>k`dSUPI|GAFe?5@+1+Be9_?V)?B2$c04kp9?&fwOjmWkt`02A7)hnfQIR6@}5f=L_FpO?P+qvrg4gH`Eli!stl+gyd%)j+yp{ER~D(;4m+j7GgRLoH? zJx*D;Q>ji{&j)#{=H2X*d$K0zF(ncAHZJb^?1Tg^A2OH1<8XbBMjwxJ{D=TQ9ZfQe zdr1k5wnP7Kuf+? z{HNU`=q;Pf1C3qUo)p1e$Q#GTQ;%#Xqa^8StQih0U+hpl7u>Uus?hhN6Lw%mS;CDx z%rc&Acu5F}+If&*Fkio0RQ&a2oFJdMCGNS=;5PFE&=p8BcFc+?8^s^R=yAW0s*O_= zU5_yf%B`_5P_mo}Hkc>$%T+UI&heKM8BwtlcIMfM0FLvcpLDo;0u@3l%jARBatKA^g zGg70S&&A|_i`rRO4lD3KT{m8Oe=m}l#&hIz)|J=0?5hTyvBRJDWt2uBz3F1vF$%}U z)ZBrv1ht3#E(MY)%RfXM=iD_s{6z+mTx;8C&kJ zDs2%Z;Y>QHnnu^}Rz0LJ@Z^wP$SX%@?sb_s1agvE{4vuYglr2T3hAG!VJFw(Vc=|OFk*ZlKNle7IS6oqj^%7PfQYFq;8xVO!&v6EG*rP3Bk z?L&N7nup+IhsRiC*lyJIQPd}v>&R687SJK8w9r7Ivh7aIjM@;W6eUDq)o@-L_O8z~ z|Jh2Ty^)otcLUpl=jjmV>l~HHJGJPKLmM8ewv+)6q zW8>UA-CwBTb$4+3D}L`7x5WigU82a7C`{*|w;U3=XE?N`V1O^T7bSl^57)+U19MLttUe*s9C}etp?GQV1;l=3iefejM(3MQC3O&>BDxjTr zAN$BRH_CfGnA<7eU0B=@KWbU+MKy&|g7qh_4olPz{3yo2!fuDMR%)(#qx9erBX7=o zvD(d5z_zV&le|f%=$t=|pF~N`5?%JWg{@7_uy!T{pG%E3S1o2#(>hbJAJ2>~nXphg zi?Q$iJYapwf~7ZlG`etRm%S!yeP2sv5*R?jkpZfy&xQqVMHZyWkwv};N7#+PZ3m9v zGKO-YX4kXrQ%^hA)XA$Q9yXj=5(!sTY+CO4WUF5%rT^;oo1<;Zw`rvKyjbR7pz>X*Y*Xtk)d!%|GOeb~Q? zrvyn>(Bh|qeUtqLC(#T9tL6t=T;X#Uky5#EJ%rxwr{*uJ76jz;B3ukxI zx>jyasIA^3Us-Go|M07pocpWgXYiNr&|f>b<{aWqeZfa!4}_!sQYG))t+dQlNJYyf z!MdkO4?UV(kLNH0naz-nQ{*JU3BD+;`|R7{q&!%8W{uB6`jCh4t=X4zKecIJrG3bv z>Z|;^UE|9~-%w!~e~_x@m}AGNB`WlA5K2HrGi!QzPu-=^^(q?J2t*|Rc<~ac&WQ8D z-8_rNbc=3%UI+)htSQz67DG%Y9ehjTDgFgdzF<8het_Y?#XI#V2V9AM0^=7(ba{%m zaist52S%{e+;?wu17aeT@GH$HKb$EoG&Mw*@ipqS1F#zL^3~jwW0|4`ZOH(;dn6H9 z-&T~bb^knfNj9iF!O$aVA|Z^c_J<62B}A?6*L^`t2h^FCk**CVV0x zZb&s5Dx_0^D~8Ar6KlrL+~jM=u)5KQO)jd1CF%7JA=Ru%o437bn-tA0%kcH|>n=YI{7~L-!5FX~f<(5^>9v3Y%gI+* z(dcRpaWEAc+4BLeq-|?4J-*o#o_xnoLbfZ_K^yH^hs!5Y5_7UFe@VRkQ6S5-(hpIi zWK`zN?YbsH|9YZc-i7gi@$d`8ZI4)oZ;^u|ePOqr|JCFHlHM?~Ry`$l{#G*k<8@}^ zbZ^LN_B?+o;ukuG7|{s}IS98Iu-;fL8|8s zzz~}FTM;V*COjrF*Lug^lORpVyu4}4}Cc9)LgqypA69U?-uoJ@T?6g2(J zfVU6Ct8>~Vhtz$%b!og{O1h@_dVe;UOcRh>gTR7$SKkJ_%gj~<|&&76%0`?B5snMe)dUoZH>yKCQXwbrohrsplmgb_qf`qY1Bh2?;jtyvU{PUyRFQE z8~!Cnvvu-S0b`+D*TfwBl>Sr?`OASMGnMsLXXvLr8Yrw3C?0Vsg>Du!9jrYA?9QEQ zRgSn^-QK?Q?o!dwxY0vl3d7=R9n(Vlk&hBT#Ct(zMkfb$H0cs&ak4Fy5SfiyxMGQcArjGczbnEk!fFzy^t}U)t%`a(h9~S5ujCcjoA%cY zo6jElAp%uuS%Y%dmXGUVU<#6tn)ZFxH8@+`S5C|9iq}aDW%EJ^3<@|H=-}7WT79+I ze~|hvi~5;anas1uf1W1*-KwCR?ROd#S`)9IY?NK@7a`e!%3;2f-q`3r)#7rd1NN8f zzEV_EJjb@zk2JA%nP`JZ7jv><)`EY`=< zA(l!k2NbIBsXToDU4bNG^M*!t~|Lld|nRQtNr;fMU$!sGs6l|(hmqrp*S6>>DA^m zYR{4ci&zGo7OkWrB;hj7xQUswCF&ic`;9(_dI^`S$DgsOsN{mAf?mlfQD~J+80?4! z`!Bt#ia%=QO(4>s5HlWqD+A3pEV6OMj7^8g(UcsgN*`)*8qBABd29NaDrQ1gjZMS3 z5~{$J!D zqnsN)EvxHh)yPZKvQNn`BVtT&r_rjD;Wv1#0&WZ$`>E~DjaVI1RFepuSF<8>v`Tdj zrca&nKR-SF5?VhTKcn#pQ(a2zB$N7RS337at2H>(C1dmp0cgU{e#n-J6 z4mx^p$75Xz3+>6%Rr95fbsiOja_vK1{B8&Yv9TMJ8EC&>>91-w%5|oyrW)RC$!+PI z2ezwgUv6|v6r>^ywAt|C)TZoy_rgd7$rKA7gd3r>x-Hqa-B&V0YD=;qlR?Bz+&Sq3xK5W2F>uc>5_f17mZ*nZ^X)b>ID95-ea6>F=&SU*6 zUWR$AddozKM+iOZZ zSMP?2oOqaM)EsXs`Mdl_gL)LbCBzJH)*0NGz=)CQs9K%HsEKP3*|K)pO~>6Vuw%|9NPln(JyzHofRd(0AoD=axNrk(mS>)t07R=M8}&>9iYPZxev% zZ|CMcH_5y{OW93A!}Z;JD>F!PTm@57qn8=SVKwDg)HgD|hCg!V=-|y(cp4GF>Zl^A0GxdJYl&How`%=%e`3U>*9Ksy`Z$&*sz^?rLiYIy z`|=38e$+_H9zPf#?j7QC$ASc_od^*xGH&#f?J);l(r^r|LkSnD6NH0)@%n5BL~E-^ zQEOObV|Z%M8u?ZC8&tBgn8jAv52xj6To^`R&@UG%`KcgZn|WR}OXFyM4A^tVnx5(9 zg}y6Xt}Be_yjMapZ=15%07p^JQl59CYlj&kNup)LiY!EXV4HWHt4^%66#VBVc$TI= zN_A_P%hmMx!sIfuJi(Px_SH63oA;B_rK@eOO9tLp!@=hvV~T-VL}SOCyzbPhA#Z9e z*e-L4!CFIcYofN~ zyl|X@pq`HM;g=T|uhF#+@$Y+Bzet(JI8NIaOENR05#cjFFq@zk+mD6}RqcNW{%qHi zXP+}?XrE(RnLakS^wataZvm0dY5NvWp*2U;@pmcZ_nhHszG#vZb-<32$t6ylSe1wT z^_f?kbJyl}{W@>KVQ+bNR|;RGkdzeQ>5F5`gw`0kD-D?2qZO*|)J98_&&4san$tziRqWu-(ABs! zZX!?y9{Tlw)?$I?&~mT6=y##0CCf{UPMg`gSGT`VY@+Z|-6rM&4=w2TpT1OKA8Ix; zDojK|7jlJl3f>xl(RDw&@9|*ssoeXEZL}(k*Wx)QLBK?jl6o!WaqrxL_K5^y!AKa3 z80CKO{`=xuueh6}LHj`^*^YL;XU^lF=%0Ck1vAGKav7iaJx>WH?w!mq)vtP-hWSQ5 zv8C4;dHj?A{uR{O#cX^$3W_)zIoZQGKGg3$a*`ljy%dRet`HE0UIlz0I@kPWrt+q% zE|1Q$C)$Y<@~<5 zqpEB~iGOw?Xx>HME54?@bJY%R1)uTJ$07~RZ?Qn{TgIjo-?4xQXq7(h@jKnuDF+6- zI^-PSt`EfcIF^39!Zm{}EP}h7ep!eo&0`BUoZE12oo+sA#s=My;=*UFqOCg^w^N!y z4$1kW(zMADpcBe9_C#uGI}WV?+<}1z7Zn|bd3Da28YAANGt%^)J(k8U1zeT1p20{> z)=@=nNYBoT4cqK4Ch#OdQFvEc>2swTtwFAhNfWKJQ;7@Kdd3a*HlIhpEfTA| zLhEL> z=TMW8y1pCgc)987qPxN$D=2T2lTUT8DJC@}y~=QE{eVsr*L|a^(ft9ma^|(S{rVdN zkNsSIda9VBSYW0U#Mw5;t{I3@i?K2e($IRQC244SI2KwdlVF%AKJweR_Nb>YFncAf zM<7(1>L@!HZ)R$UA=Krn1h+E=1?Q3;yab2rh1VWSA(EV3EmO!gd@-kD+H88s0!7+M_mT#TlsA7CXJ)ktQva7ane==$3B>D z!8#x358PTANWi6QIKfpJuI|6?lj~t&tDhU~{=pLR4x{UJZH(P%nR1pyNBfP?enPx; zjF*;|n|0y*7A~QEpO;%JAS^0$`^Ac&-Eh~Y6mvV{mieJkLr-PKSNmoDREe#IlCJ4$ zXLG?vl;lF+yP32=7C1Ob&yL!icDNf?|PYT@1lasxr}p(Hsg1E%c|VoH_a)-9n2p)(WToU3gr{gzr3EQ= zK|5sze#cukCyIH}Vf>Go@2w(Vd*^aF`;UA{TXwaLLBV+3N&#UOLZ9O~Ll^)rrF*?f z$}@K0pZN0 z-8)s&H`9ah_w^E4bck!?H4@Vcsq7lQ8W0#zy!UqBFtgOB$Z{E;P6B7F>19LELl8fHmvEqai;Oumj0y zEr=4{=ghv<3^%i45OH&w#(ucTN*CnE1i1Kb69|KX?-Lk^=Ds0-tXfdck>n(>dUnLJ zIXruIiFCK{W%$cUzEL&=Bd7Dx$jC2fzlf=(9=ogA$(PzG`5bl~Vn|;&3(s=qZrJ-o%11%O zUcuR&=N+Pm%Ww81@z;?KJdl6;3QMc?Qb+o^HA*OI?znjxU3-Q9(dY5Y<57S+xB7G& zvOed6f^zpJGoGO;)wFb}R3-<`+UPkOijz(jKndDe>;ptH_1QVZz;1ph9vh8Xu9>>` zxVNsS{%b{FEsOD7TTLJ9iD(q*^Yih8kj=eW&Momlm!spQT+S-jnqMM}TH5{=CqnnQ zT_22Z#JqT<&bqkjcvEvqdf%NU50z~@(9>=n*_By6D*V4YchRV0)c`tIj$&}UXL z3h#QMCXo1&0)kAdQKAmlw&lb2>ABX<5UF22tOp)_R4u+TF|opt^JJsZR%hg^^7?i^ zp_G*(-^G5V0^-+|4#SM^n{L}Gzh(x41nN&xFVCSU=Mup6IYl3y^oP0*S=Q{uU=27P z=7dFzpC^8$a3Km&&33$4)U87HTEUmge)4wKnn6-ZCfh1XZJhb+3kNv_7`A6GLr&g( zZa22A0nO@3_DgM|8^@+-VlA`X!mU%vR0A3-2E+yQ?qffv>lp^ysLlbaeGXfl_)fZs zW%W}B9^&`En}l*FsZkeOB(#x679Z|cM)#oCiv2iqo+%S`b2eG9UKd3ZJ3Jp^Q&^x93_6GeuDEmcNP}jJ6m!x1OBnNEi$EWE&?K#r1M?BlXf- zlk{>5(%)opvRjP!o|Osjz!J*gNY9jmrPdcE1L~I#UrgY1=h`WCrtc>wPduU%GwJ?1 zQrlR&d)0}PDO9Ktxvdo#vdfz=@$$yCaT-Xb)+>c{V69^9*4$sxXyQOGaNk4Ad0DLn zZu^`~1tCcGcEwav(r9R-;X+W{KOw3wn|VAM8;G$JVaT@1)laH=--35>_^&y$zg_yk zM8;*;_bp|&YY5p%!F9Nb@>AON{>AUVXxD31p&quCz|!?JKdZ6deaLp;VpnGnqQ;{~ zmD6oSyzM1Rk301t`5cONgHepQ|*} zQ#WH^_pP0N&?~p|U)Ll?&VnQszxXzBa5jbLqTlXzzE;B*_Zs(HdM8L!n@Uecu<}N3 z&JSi^Vx-j>w<2Dk9~HWk9h7C29U99M!RQQ+?!39Y}HH5GKgq;=W7(sG61rIud+oLrDaPDG&6MV`49G8K4in9s57H!h7 zk`-2{<&VY0N&&aY7(t^u!_KWAjLF&xek7smHWR{-wz`#1y#c2+FY=S8?}(wN`^1k! zmZg?xW+?-A*AF{=dI$&bqE-}rbiW6c+7pu|yb+A3NaE)=*EZ|W%bO$mJ(!h|g6EQ2 za3;W6p0Q{|Q~p+yc?~fQEwbtR{JhN*b@uthG$-o^JzX*=yHMG8fV!dOXD+bE8Ru&w zbLek>c5t)mF#EevsyuO_i03OZK?m`xFg{qG1{;5^T+l-`{|{8N9fI75ICk0!iHm@k zn(b`QF5jw-N~oXJR)cea7-b_6opK+&WoLNqwN91owA~jgSbWD3btI>>3DX>1sk}O) zX}-K1cQ`OpqA@((q!Q}Oi2~*C?mfsrTFLrIOr6kOBes?*RQr{uL^LpSz)9ZH9e1;E z(siF_WWhJ9CnIZ>P-}n1KshPiuU&hv*og`s&3nC3MqcY%F>Y3tERp^mnd&9vm zy>?e`!cRrMcOk;qXAR!TCJ_3__Lvh67K1O3&bS(IW7TONu{#go172GrJN==c8=w3n zsE65C{Lc3a-+ZeQfJv)KOeG5l24clQ3&;RG3Y#5qFhRl9?fekoi0gZ1CdaB8oH13{ zy2Mih+NB|>k1h>VR}zK;!>grbqMFl(>Tp1Spu1^r;XBT6+Tm;odISb@J(RylZmXD) zSS2`pI@B<70~~H&NoMb__g02qVGbr|Sd+{dLWpjjm~N(k5H}wxI?er}tc;-JcL}^p zH~6S6mVA3i$G9e+;Dd3RhE_TE;Qi0-QB3G7R(}Fg2H%2MLoji; z1{dQ8>Bw@5BG*k^+pzc8;I#Su<6G)R;Xh;YosI!_QmuDvb7D*MqS>(4P0ZRib<+X5 z4NZ}cp`R+N&gG;YV>VN+s0Zsai<&+MlLx&j?9=5MFew{d)e5BDWf3g9K|4;A7GqW% zi}~EhM>$tZp7L0u*YFZ$|50etlIW>C-@my`6D!ciKVj;o|N@3T!6eZki0fjxgxZ>5*-%z<$Csrx|O zDh<*aU@~NqfsU$jc{O^#!QO;{Xpssd!?=;7lYY2O<)@uE!|+j#*QZ^V{v$H_vB-s^ zs^4IH{QYgTCm6&Lw5b7X`f_$?CMr(r$=K(=Jp%Sy)&>0Lf@o?xrh_)Gy8ao$`$v3t zzVclye0aB9!z{^McxOW~vIv!t<$F~L_enOa!YQSmo9T`ELWD7^<}mrOXXm z{qrfyp200@BMzB>bIY*3{K~jOPj8L%-JNzOG(0T% zN6G>28^@oayT8Sbs|peizQ>Cql~K`n*Zu)Lt{vClU|_V$7zAZ0TB}k#P1din*BvBZ zslCHv_D+q$no3?HZWjuKWmS?}{w?x4I^tObFm+L^V6UC|_HxNY!NjHxN(TEhaShSp z{TB%ENAq8~T^&rsquG5ba`HB2XPHfawk|KYi1sn{5@E{)cPh6 z+-{J^tp5VKcgy1DoRN>*GB%?!RWIE_f4aB*KP7eX;GZW6ZR7B;L^}D`u^5_NJzF7f z<_QzVzdugEGl7dRd|X=G^@O8gbw6lkiB~=8gI1rvKY^+ZL8V?m2obuqI`>G`^_(s^ zcHNh`W`3>~Lh&E^c7YuLjSP|v(4iw-|0mU<`3aAp{*#-o;D2=P#Uq>G;}Z%c5d7o% z{{W6Zd+q-#z(MQ;|3}~akDvL=c>mk{%zs(@O=dtW;_1z6e>YXYmNer5Bm3&3EBX&( zYPxZkFpU)dFB$wv3H^_H`cqW@Gr_sE!pRR{^HPz7mlaix) z7=Tyu#6i>Iq(EqY&{@?Xx%vYYx%kTq; zn%yv)(NfcW?)Af1fZUq8AW+NXY8F2!v?*JeZ9doz5lfgk-;J@URcsiqi*fhr^+TNO z8>e#CjLtj9B>f9`wG9Wx?6yAcWO_z%pXxCnvac(V$GpoT!O$`ih^Lkz|30km2%ZK4 zwni7u07_FSgq*>wu~R@T@HP;G^H$e$%DtPtsQ43DAXg`#iMm(ZEZ9$?+kT`r4N|&H zPBltU)Fo%KzRbjj_7!CFsOt5U7-{|Hb%^dip*UNwoc>V56 zLa#-=N7@1Bz``t7AK|bBAQu9_qO%&ZR*F=NiNH!m}t+|%FZhb5F`@SH1ii<#!?I~t3NHt1877x~^L-$bL4mg4CG ztxC0x%Llp*EXzJ8kr0b{!Cdch>ZRIvds2950^-{B4&tg*Zn2)E zrDOeCM9|(IT4`^7T*cPodV6c8`Ot5vE6Eb*CD{_u4b?;}1-`?ba$(mc&9q&Bft;Cy zET?U`mJytE3(h?CJ>DzO8^I^KV{(B{7WR^Mrd+-GkXA;nxU`uhS1yXN0A1Cb*giUQ zSenGw1?|>;3XXSF?Gqn-h<_HN1f~_X3%-2-a3?AuT$Ven)Eq0c)CWny-Kh>sC&zX} zrjzGGPOi%d#?`(2bNCrYoxKMl$qtrhC*@YkLAU}#x3t1#XVIk&(0VDp zSRRGPEdHLnR|P#X{`_A6&vx($t`dKF*pzp+mu-XH-n@*Sw-RtGHNWpxx^T}k`KLrr zXC3*~AyyIisJtkc$E6eVR=RgSb?oY$kigZ~0 zenTUn2)$N=1~rv|o(nWm-zv?$D_#2fjn1nt;7C5pt|ttl z9&Sf_dT)l^0WME-<^^XuFJ$+%=e6-x4HdDq2)Pkcb4=3Jjn!e67zgt0%XjlCRIMU#sp7{~9PvFJSz$zP824 zoy-xSyma6)L+jRq`5)E3eB3IkZRC0xzlW@T#1kqyEY1ybm`>$o-YO~{5OD18sPD7F z7NY4Vy&KegKN<|f@~mHZ#yFk9{!BH(xJ~e5Mj66 zv@kUgx(tsJ6W@B)w~39D`ve*1fa2>P_s$v3pDpODMjT+dCw@i zwOoeUH9E_Pwxr&C&V-`h*hsG^OOB+0I+$a;k=a#DpzoR1ttBaQS%8fcE$JJrFCReu z!A3q5W-WFfwhdPRgqBy?2A(sEOd+?M|jf z`l;&@qY(dc&BzqPwr0{*q6?826cE&dywzMUS|8$TNGXTn0JYnh_7oO zZflD!De3MJ_;}LW`pv{o=uCXnnD(EV1kLjao?csTIP?7O4da%?7vF4JFq45+QW4#h z#5amuJ}?=o4{BmjG5L6Nwus->Om-Zka`|9y2Fg0nuFXx(S%5bp!gxol`Of~Zf`dDa z+syaWdP}U+kcI#GLX<@E>OfvfPP|@6g|*sLitz!NtoAE%d_RD~rwdZ!V69b35wN@} z+M!=ukdqJ^4Xd6H&GkF&s>MGV&gpB`Ew`-kwH~i1AQkLFC|02>;lRK&yi)(jz6`jP z8(n2qDHBk{Ia%$zpjf00>jE&Lgv}@BdFzSpjQ*81)vf96wfCErPmaU-r8+x0IgR&P zdU^#WwKltuh?QQukj*b;{#c|J0eU$WfA8xe1myW-n-Rw(qj-YJwWr7;p} zIYx*bF^in))rZ^l^SvsYcF8^aq;NE(v$3D*+QXw`=pLuv$P#*XiuSJ~zbQE776ZX; zBD!y?fK2!NwkB&VZE*BMr@S!jWET;|(<3=gmFrQ-mFhDs)wD}*Q5-g|d8+Yd(h-;DQ zzxBXv7DdI|M%dzpN{l5CyYvp#-|TB`d~P+n_KI2ch^#*r%y5bE9J8Ro8lA6XN<*B# zmYKJUe5(YUKO+68hq7nDSm(+6-5~K26426=0*$=dZE?=reYe$Lt$;=_UT}>rS`GJ# zIuG*+UMCnq3xF6-l~f%`ttL^=Eql$!aun+OYeSuhGyc~vF)UbR_%4lS$_shN5YJp7 z>oPQkueA-`&no8|!@T2G>gPi_x|-fxn!4N6s||w0yr(L`^oaJt22`Su)ErIjXXTZS z6VB}nQ%E_)$IbF9+ztTGfIa{5@!r(YExAg`37}QoNml8%Mc+TM`33kvMF3Ezo#!!o z9)70B=6I5Mq;T6E-@X2_K=$3I3;-nIfN&El;7lt9FieNpW?$m7)$z(A$o4m)K(?Gl zEr&@m0T-EE79%85nuEh-wKCZxlFtRft+@hXvYGzo63-#An1GbtpAD17$iid}f`kT?2Ms}eKYl97FocwS`5>T zl+&INBlP0GuNd$Q#$5V>WV?Lx5*W+6$Y&_{l3?%89rZY0GP~7=ibgbhfNeM4~vw+I`g97 z`WXA*Q|s%{98$4hfCC-A3Kvo-W{l*jS)}v~_j_`;R)W$VJLQ?73$7f>0vH#MaW=>P zYKwT?whzCiJkN_By>ycSfE?HaMbQ1Fuh<#?nc^BtOSLAaGXOjznO>!xx4)n>k7h5} zNM9hv=mIBuLU;eCCEYWx#gB4bFF7ohf~la4TKxurH+QLna-S0hc~IM~IiCT`11b^k z=a?W#SoCG(3W`ulQ-JGXR1QNXTt_>uOBUOeP%?*NyGiN7uce#&!_b{=SB4JDYaW90%g5!=s{VTl3lg&^u zrqa_TK_h3Bt+B%Ag2Mrv2CEK^E45T(f_y2{2y;&UZa~4;IMPl{CXeg(?wgt}>R$r^ z9;pS$PT#8cg;`_lrgVxYvw;-hX9oqH?PAzT^QWo>_`0WJ)-%Wk-3zjs&aU`|X!WZ| z-?g2^K=>y=r2Fa2xLB9)`fKW*U%WXd>CH1L$jx=!N`rj=Js8YNU`tf6|18^Qg)AM~ z=L>Rdi0HPlgP|J>p`57nEc|YaI0Rv9I5vGUmCLPd_JrNR8$f>QkSDPan`R*$h|kh< zR?T&vH+WH^Hx&b)ZQi|5LGKMFv^i{fMSKD->;GM%;%FRcp#r$xro%Rk@67f%7-;=e zSN47cjScfSoC^_+%50t!Ki$)C?dBh$4Z?KXZw3OYkHfp=i#y5--tv+#>AWyZm3Ld6 zlbYWLM)jUV8M7{LqQwUZP1;lrXrA80F~4XU{%bAdQKkT{ArNxM<^2R}cXkK^WEG$& zacKYZbin=>Vlp!YAH= zhC&mGIYCjOuljaFoBIL_d$L(>-b!a1F!}j`HJz4g3;qrGr$l2)F`lcj8p_V-p&sS+ zFujMx#w3 z%~~G~rcIK@SzZdYjz!BfGAC=0xDIcNk^$trK(61 z=~Wbw5_$_Ar3nfmO$Z$+(rf4>Qba&P6A%J~9*|Ce1Oj*uw&(etckcZI?tC+u44fqA z?7j9{Yp?cO+kMN4L>~i}zp+!SN8TV2v z9VB}SdFc1euEu>|y?f7naDUzudY^R2u=LZ?`}oDVrK?@5m?GcoH7VR>L6tYI79Busu0*}MFtzQdLG(ve|8b* zAL5Uzy)5TjGyWuAb5j0Zhr$VNo-6DsU=ZE(dis%sEky??*4+NY)MrrCW1>sy}RYpfhTEi^HBvaHDRX>u^x!m1h*&TPcqE#HZBvXy&F9`ThRv%{)V zkUSH=?@&Efj3H5a_-MaJU^agOfY~|KmRSSdl_&cPZA1e)R+QX_0K0a(JBAfx5gz>BtQJ5eo zT=v2Pd&xVjOVVHkoYFIYL6^_#2czbNU$Hst8&MOLqfB8I+b?oEUHT=R8_wd|y{xue zn8Z2p1uSB%y!jQbyzs=f_)?JyzBG0IEQgjyG*C?gM?0w9h(UaD$|zH^y$(o?8;H;9 zpLSg{1j+S6X#7}H#k~>24}bzq-&NXI(9mMH&D)C`+vA2X|eW8|oVd zKvh1R?I1@bbwhA~Ds04_WQv@ZL$sHqNr3Zgc7pc-+gaFTy_S~9j7fK+qUcKxV2ATp z@AL$PnHGIt8@J6|Z$0fdVsIWM;DiJT3PmIJA=Sf_|3b*@%PKJXL4TBxj`h;WSzA$#X zvvK_R3RH8n`&;e0xbK=`U&?dKT!*-Q_mrg#6_W}*EV`aD)hjt|h@L{Sn~=y`qO z?inP|0wpi{*#qCV_L0le#@B&@l4K0_p&fINg^q0AlYcu(F(eCsTRTu zAm!k-g0agfWC?uZAd5(Pke5PNyW$eWO74q+aRcUPW9VAAk$LRbJti z(u^a2iOnDI4SUzi&mS8EJ&s44wi)D$>>5*)2%!x!o91iwKuKhB?wD$_qr^%m8K-GU+sv@;~ z-G-KMBe~m)<>1BCVjfRlFVMdDj7=e9WFqdIs!VyNEO*B zP6JSj%RE3ZMTnb((iiANgiT!S=B+dX7%gKel|pHNo}*Cbqnq*79ChRlhyG@+>VQ~Z zM0W9Fa&y|F5J7OvV(CLJPjI`taUL{GF=+B9NAP~lGeh{MAil1hBsE>Wz7O3825RfR9 z9GDJph^72tQ5mVWQ?gK97%sHAwG^g+QE>)cZs~7c;)Rx+R90eAt*G74DL-@+=CG?DHoiiEw=7j(@ z;3ZlVE#@ebyr6}PTGB1A$SnAFy8J*2!|W7088Fg78NCl6>U-SZbNE*+gU{EQCZENb zneG;JzNo8je@*8^o1l(-c&V17*Va=vI0D>v5Q7RTSMqVj_OX(^Q3=+rJ5KcW*(Squ zVuz2OR<(Xg?{ZlJoYW|byDsz&dix5W!XBw7H?=bW<-vb&lY7udt3ROh)wzFglW^0$ zrV;vRz23SpxASJaM2c|)Rs4=$JGPB;xO>2|cIEtk7Qn?bLx+TX92XGl)+x*n&WI=9 zDm8(MG75d(v}ltr;LE!kCNnbOwpB*bfFK>;XClmaeSY|=4u+TkOjxE@v5q-5$1~B# zy-CiyNLY5Sqsvq{bgfkoXmeM$x-gwQpQ)r03!Rsn^evAX6*Q?CK=SE5+XlKYqMK3Q zJ4^3P-Oz6YoUdW??91R}`nHT-Kpnf2N!HdrNCeS8!vpEI>Wyijy8Yo|o)1vlY!>FG z;0{F2JHZQthV-uVi`(>L$BpsL`GRng^Ot7am}|?)v7_KGwmo@N?yP{!xdX)W^E3%I zb+(~col58=lU!`(!|HQW<#niF^93i{M`TTVXI2}kzx)^{vieS8#(1_qC-!0(r=D)9 zr{mxU|9qnK9>)HscZut%Fk`p$IUk-ClL69PNwuutJ#hmh=ceat0NvVpksr==f|U1Y zG7W1}%14H^w7Yp{(~iyxg5AN zV|r0q`7g+%y)loTZHU=f^Xk%Es5Vw0O0dmf1Eohx$g0M}7i)QNq{|PzVB8R0VHd;z zAYN_n$Z7cMC42_5j%zs~`?c4(y&b2KLHg_TgccXb=-71}fF{H19|q3!Ohbn%O!^B; zBh>ifec_UROOJA+pgV=J)2mzG+AiJg4+M1OszLb>qox1gqAS1lEyP#kS3|6U$zU6^cca5b5~BW zthJO1TUmh>mj2semY}(@ii$M1-X@Qg2fK|4v1K0#YquJ)(+B#v>Qa^UL4W!EFh+}K zU$HGl{Cl$DNQmfTHU07f|3qy2V$XpEJyhS$)Zl*kn!of6IU|A#K328DxAU;*JBCDN zlW}!$a_OMUY&8wA((EqzNK0`~dEwZFgky)|@6}cSd9fx|tHy8pt_}Ckwmh7?&n@Z= zqxamo6p&V(X@o7X{!|lS$+ourM&1lU{*x=Cv}T9{`s=5^mn8A_me>5N-|iTJZ{n#6E3T;@G$SOG{iS#f`T5o zKHv?4hP+y?I&uGi9xPWckNT{`ByR5aou^Df!47Gv$6cTFXktSX>N)fAzwky4N56cE zQ+OkvUGXWrQN_g$wfkne3ME*U>g z1idwjeiSWQORnELP}p5v-u8hni!WP#Jbc!cf0V)8>(L?5+A0W^7f zQxJ6oxVxLn-zilaLNiYjip3N(d%+H@sx>9HO*i}>^XHU1Z$ip9>%HrrjrbA!(34Lq zW{uJ)1`A7ZNq)1aDG**(Ex!8;*0{eEU8Z{9-E`4>#8_XaAdMl473`y5DQi!D)sVO0 zet86|Z=oL>wqM`Sd~v6ftMy^PA<*B(9n_S7E;$)JxWC@>uu!u_SKrR;(d>bMY`7zR zy*ru9%N3`o#)gw2z(p3{nU;L^W~Ez~-n*Y0k!w;!5VTraXBKyhEFdhmxX}1&SH|l; z3gPA%*|9@;B)AV+lDWZOEonE@QR_rO!h9q<>tMtse|K^FLI2}=Vc+tPY^n~CxlwEM zGVIjmmX(?95{4umW>b@m#*aGbG=5?mtAAn}g?Gp0yy__EXHFyONAoRXlegv$Rl3TW z@6*MTyMW~X!W-LIVaX=h2iUR(JpuVl(LTpr4~4qB`jkJ$ZZR1k{Y8l;8FwCDOgN$B zeSa(S1Kbo9f^m4|Soy#Keb%tvM>K!+`n0WVkRYAoZ8!oKV^~xcJh41*y_-Q&zK7S=Tl%hCmG!EvEiNn) zyc>N-yMyH%rAWE_+D^5ge5)mak4I9I<^(^WTT4y zmG~{;-X&F6%cL!BUf(2hFJqn?i4g*^bvrrqz5>og_n)gNsjW9wrA#<}Xj@H_c2A2; z%1S6~1!54@f^S958%A1nAUiJ-drS7Z+xeW=fHeDJR6y7tU}ILubD#q(YCT$|zO8Vv zJ00j3&qS>g(6(5~SsSyI5TOYf5GSftL zvO(7qEJgxtCe-)VlX%R-HfpqsvdW1(CU`6d5Sz-sz-8^H_(pB%#fx?3^pkq7it7>Q zlKE^7*S)HBMRq0xY)BG>OoDD!Ljtk}*(WZVf=%qWV4syyuC=esc~yfQRQ+0aYQTX< zMs-??L7R>DcygPy_w*A#RP8~9cfCgjF=1J;wct5&yRpi`zIkz`y{d*G{**ihz-u$e zTrKkH?JeOjT!cO##!KT1x1OYL%SSAT z$4_|7SKs(}L$L1Vs)U_WD}JTx8-~|H5JXrZ4YkTp**q(8(c<}|y-%7&ZY8!8o<(=w z30RW)extnK@I4uMn_%xslK0MOQH-9%)NDd+qaj@~9(gg6XWjb-xW9jSw0+tC!(MFB zTy)6E^!qN~!q~<+V z)pF9{JQI?^*j}{o&PDx2!=g@hnHi7wg7Vj|5l=lT+}9SOs((6q{NCY5(^SB1I|;V+ zDwsyVdBcn3TeiNN-*eR3Hgh+}pxD=k8iMBH(vHed?+C=wXM}@(03$ZP5@cG85(EmV z7I-Rj$XxcKM|i>VdV^H-KS%{L3C5ad`}lxuXN;-Uus-o{c;BQ!Q>wvnQyBn2=J7S= zb3BpnmmF&bAdvoNNGQeZ_w*yLhZ^g*arsxL^b2EA5vNEvjT!zR^Yxyp6qO34uk>$O zYTZa(Sej5IFOSW<_Q!1@H~VF8jtML|2jL+Nt7T2rXkBfS3r`nrT=3z&p=d3K$U)!6 z6h=bg1$pFKx)KRqGDz{;b3G6hy_-y`xg;gy2DpP_eqf$E*^!u43QKVx zUSao!Qoslfh+{mAtUK4pJZgqNg+QXF14btIY>qrxyjc@h`TA>Rr>4b7b0T!fuIN`| zlYrR5z?0Wqo34X8fho(y6Y;7TiNv?;n`Ml%gEmL#dI@u7Sy<+}&zr=HmkJ;iO(k2XbWAW1Xr=Ih={>t9!#B>?flZ=zrQsCj+NbXQ@^N8)~% zVghi+2K$XRU$O*C?r8F@en(_PJWx5YIQfiPkxG^v>tKg(FSBo9GBqANmSp;F)a`$Y z+g~t}M(jNB)%#YNU)=Y#hu^lGb`3qY+VPSuJu=Cq*U(tj3;|2VC1D=`9bn=mkAOCh z?g4to-m{`W^dQiD2glFje}vl(e5?B;n0OWFyJlE=*p&H!nP{?n6>!%*9v#_Z8F&H{ z9RxS454)Cb2>MOf73lW{C3%}4;DCYxy|T_JZ$60v4o}+o?9!?pK14CABzx{UUyfox zwO=U#rQXRyI*=8{ogS|rulH0BI5X8rR$fw1z$TVjhB zHj$Oly%?&3)s_jqsJSHbxX@zK3_Ys zo(JY4@MYMrv#a2$>#+jfFJ^VoqDO9#9FLdYjQ5_(mj~*4#%{MckHLgW^aqYlR`t)k zNM~z8s*;tC*QbE{8FtPO>rl^J6`WSi@}dDwZ5S(S7Xmr&>bxf@$v0Tb+h(7~O7QtM z8|fmTp>JigXdOGhHG?r}1ev!yi;AxZRle)Eh!C3P6fFtRCH1d4Hh#OuPzB&0FFKXq zCJB3wCT|jc5^#4Z4roJP?<(}eBnNt0lMocucfs%$Jd)VR zBso3nO}`|1MHs~E!j%cWMgID&1(#Mgn4w8uq4CYWubF`^8DBn09JRc>fO2eIa}#>s z{BFHFUTQRaxVWuxL-$trs6p_-UlgRLocDrdQT6gX>7mHYk$?+ju zmp5Oj)F&BU+U!Ysq2kec+u|6M`lR9R?lYE&jFYjd&K=-%gwFfIizW}Be71s|WG6(G zy@nV}I#_;j6}*oD+B84x32;q47Q7xXSEt};|1QAk0r|(MeJn3c%qhOm=px{UV z($5?;7lkpWD&>~9?3)VNTl%0ON02cR|#Xrrm0-A(SfpRcp;P}cA%Xo3E}a2h_~ zj2{ca!bB6B>qJLmmO-B2mZIr(O>mF>x(86R_Zum36G|NC1- zUEo+I)miJO|NF@eU|vrqjmZB?C3c;Qz)?%O_3wcA`hQM0`oGipzpL~ALuM0@@LKz( z5HHyC;J*wHh~ve3fS~eTU;5u;(h?M{Diul-D`caUev3Qs^*<029Rfgz2;aOr`#(aY z!v}owf!LV!e?R%ZzhT!Q2r&_a{{TX}M3f=MKlK>9AW^g+)W`&4E%SGMvJfX6YAtqx-Fn)|jTvh(P7CIM0zMhq`ZYspI|5VEi_C%38VTZewm_Ij3NCEn^ zFb|q9Re$<^`XGTP#ME;X<7AJ$|0vi((vT=J7Zq<+1S9|HIbAwDr0kzpJM0$N0kGT; z+fB_Zp}Re9Q)^}4Q=68+%ioK>gLBlm32(!53vEMgswdZ_*Q0OwrIRoib{6-NEwZaK z%xynsm&%^gy-jmlF$=Phk4|lJ$UrwVI-q=ZHk}REj;>)5E$&ot4Jaf2A79dypLEb2 zsDEOz>`3NdCjwsPw98Ed!u-v>7ATt&&qmV7V4&N~T_T$fj}!+DZqwvw;QwDQ_yF0i zey}%xMw497vWJH<4K*PRbx0Z6E=Q4HL;h;$3enFiz(qouOQIpIWLr7bjmuzTp%#ne z*Xl4;MPe02;zpi7`#UHSMe#0%49xBxMk7nXMYVZoz#PN zAU%dID9-&>o^sc(o1FfF-GC^M*oS9!a>J+Tv3yAm`e5vt>Cbyvi4aGTFLpf zSlI3(E*AfpLNMw148?w;=5!H+%;@^bM_Wtp(@7B0EHj44&Q7ie4#j(G!iI``{tipU z>LRf(?F?8c^?Yay{gf?%5*jI5`fC_->;qby5vNxhDAJv~Y8Zar>L*qBXqQcb>*%`1 zACIF5_!|4I!Vz_kO@7hxe6pg9F7qveCzi|1z4}d$y<$dx&GqzMhn~osY|G19%CBV2 znaxT<=*K(gucw78XQf|4u=3-P{ks3Ud^*ysd&Gwv@M@y*AM4I%J^^pGv0>~_`>E1% z1Ag84m}fwX*f#b6b_{y3_+!7Wx~oe1a|T4N4E3)kpCt-A>yv@o!{U)orhk|}k@0&? zH2|ANm4kk*^hdhSbnx-xlT8lfd)duq$Fd_#RoCt>n*UtIBE_sX1pRcdao`BPQ36s> zb^kuPRC#M{azJ#Q?iX8}5AkXniwPSY4|tE*r=Qw)U$9&SJpO;y=V6$lI$;LT(-bJt zE+w==LIZ)6FT~6-GswcL30#HT>c?Uoey{Tu@lHoMOrfT)6-b8O(9B|~6PE!YN0Z{$ zHns5U_5Y$O_05nBVjqL^NN3adN64oED?@onsI}_(lZNs20q6bezc~C=xT3)&Jggdd z1Pv&mnLBarz5R@>%Mq5IT-UEq_KONXrxBT=XiB&d{X~K8xbj}i)Q@GF#KM|_w zlV|9Fraxxb0xGui=Vauv6n?ExEl)6M5YTSvLFKwB9E9wsDJ6Vc2dX%lhiW_gBX)&E zA+4k?baPj?K@4w-%Np;^HIZwF4)LA}dH^@vZ)UDD`a=bjMrV>kI}}fZMD52X)}a*C zk^is(HB*Qgp;OL;b_Gnh=5-#j&L4vNw9}XKQ(16`WDr+8hj7XAw}B#WJ-Kg$oIs)D zF|l}jt>Ec1e!WELcm?5_k&rD38blyc^6{rv?=JI#eto9Q?gEtD?+QIVcnX?Bj&hfP z`p%v}xo+0<$JqVr7L~NicY`6z+GR+~$Uh>{2iaz0YCd zuNUs1`N~~{8I^D8gGd%AIM>gf3#x-s(0;42i^tJFp}(bhr1UUqlMXglqGTIo8F_Cz zV9qd2fBF74h3@rMs=(WX8x)Sw2$U@nDxpzF=0b-m0S^9|s&O$g`z^7r*a)X-3bZq| zjzid6HA5kL$WdcL%IiqmublALD$Wk#S-$g64PR!)ErSFDTU@J)JNobJLK$Gw_2c?; zww%7E?d3HD>Y>%|a8H?L``Y|r2N*Oq>6SUyPlD;l5Ou|{XaqcGZv_cSwL#9tfhaCx zRqH^=XazsBq%G^%sQ!MK(vkm_1LRzCfBt8hZGNTeKbW_BZS@u+arD^g#SD zXu~_fkUYp|KnR{5tGVFkki@vQFpB8+chSE&oG|2?dQ1(#BC{oAU;`JjtrJ=1z%%ez zU82c?IGAAIfnyXi4U8jUr=JGqFQFO}X-RYM03B&558+Vv56mN$dX8iWmCAwCf}3nw zo^-$Eup5&8wXlyBX8_2|2ZFlt$L#eqC}WCxGAGj)pHNW7@z;{mQs=%NW~$Ef%uX?x zZm+(Em~#cH<FwtaPAcUZ6oRY|YyvoK);kT~6M=j-l z^u%{B2W*%eX;YKDfr2T}&q$$FLLmg|W)Sf-5FHZAJ#qpSC*Xwp@oUfX5DEph(C~UE zW+-g)t7lD)_?~o>Gl#etVvaOvXC!JSV<+|x9IE}@GmKj`{jW9C%n0xsmhI*a{ZdAX zw~0tM1ZBJmY$3RP;g*xs#O^k*dpsZ6j-22Ad&^HEgiaijp;8CR&oD^n@N33>B(yX@ z*9rgcO~8mOfnkQ!HB^#9DXmjpyd7v#Gosv$$Mjp?(@K|)zu(|??}o$ZtA%@G!Ax~7 z%gftOP_ylJQ0J+NvQ85*0S0ZS0Pcpb^$7yTA_~UPJD49NeaGW+`1p8REuQN9{yU@P zy0&9kV5*xZ!t(nbw6s&%V(frIe5${!S}kt9Gxp+V-Wz znN?dGSNR?cg-k2tf6g3lksROsf)Kk~?l<0|NiifcjO!NmmkyvDEj5WV3tCToH0>*} zxwoYUdHX^=h6_`c5#PKJWBTds?Wr3egUy^dWd9EhC)jmg2OQ9}l#UK%1gi|a)_iTTlr<)&Z?|;y|`#CU!=eolu^- z>oh1+%Fc9K^SP~pa7Pz;R{5V2n_ z|7VyTs#aD+M}RK)KmfFK4nVoTO2q3~`tyPjeUg?{E`e@ieUikRu15q9H5R z`0x*JWw{ZbiI{{4ucqqQ@FhOk+BZ0*s;?llLwSWn(tM9kakRLYXQb*0_K0yF9N%>JwAy3*|nS2pf&<+Bm&H^(6FQ{j}1o>}mzXZSao?alXXL@eIEdo2}Sh-pD z(OcDRZ_PLi9j$r7V0Ickljk`R3b(jR|1?C60HS&6%I``I06om-0QllTPTC zf%;UM_NZZhO1cGG^SAYm?#XUF+ew{X&Xk*eUN_ti7o^w0L`O9msBXQ2_{$rq((kv! z@aQT2njgK|Qn6pUw01e+mp`~1E!as~e_R}%3QBsc&nebd%$a(S~3)Ugn6T30YPuwSXhJYC_X>DJd{ zbF$%q?5MnuVym?mZwf7FUtV7@gyA-xOz7*a+cr)&cn2M_SgAC!QNNLNHbPn-*ZH}y zS`1+8rMFBcD_nhy-^~sA%pcZvf49+aG~7sCb!iUADXezzV^$09Hw?Y}*lWkBaFXT{ zL@C8we-gR+WX8C%0I2}Sp~g(3x++1BtcENDEFAf#XR9gar(;0scU6)ZEaW3Hb0(r4JoCdtq8V&Nz-3`oQRQd>*~^oe~}C(uzqa zqvi=IA=n%}1U2lG&Qww=qpEB)+({cRC`%G*vDha$XZQtG%7&j{mGNu-zxTeM?hZF# zo!67`(oI1>?SKqiLZ#-At!LzU2`S+}{1>+K37*Da_Z$o*!}NIIq}}DREz-ySbQdIB zjbGa&9Y>0lq#0Vc+PIAgN=otDt{!doX;obF=vLtHnWh-+e!KzTL+0+(yG~6!0jY&T zq?Y9C%wh5eL%G_}$oF;#n!#dAf5V$AA^{%rqxs3+0_c^NwA#qcbT%1RJ~^xx&l5ud z<1{Cv9In!TTZv~WhSRVC!zfj7|K%`DT^leGr30Jj{P@$B9T=&PEpa_`W&TWB9hUbo zub$;qI$qTd*5fWfWO(+sg^n?cco@rZx7gAyB*hT+U@}ad z@24NcsnN~6s`?g$yYu~P>@kCr7h-v|c`K!c_Th%_g$Xlst+lyt$}g1Zm}b_fSf4p042Z; z2az@kH-nHnmuQjM0bZ^DvhbxAee~ z6D(>@l${kz(*eD&$ujvc?F{Jib`UzH$kb$%r)h5mnkQ}K5I&pR?Wwi(SQQ%1w&Js} zBKV;~dAD_Enz8mglZ5N5FeZu{N?v@VJ^vE|rp|;LNPSm@Xj? zMdS*}> z^-XWZc`gs5epR06#9 zQYv{q`y5*iE*dd$uYMB>;SuOxDd((Bb@qK~dq_bOv&UHM&1L%+U0zf3zNIIE~3^V;FQgE0y$Apvzc`v`1TE%caL9uNpVKB!FX> zQD((G#rJNuw&a~@M`RBZQb-$E456-z=!f_@xhRiG*7r->oJqUf0H@yEb1;B1OAsQo z!do%Yg}vq3mph{Sbo z%U)$^9EFj%1E)llr}tBDMr2IBJ84E@gT{(TyoWKkYXl(!u-i|6$`J;5>0DsS!-|wruWi2rDvOu@tC5MXCtk zsoO}c+YHm*jBlpJKVs>}KQZ#1qX@!v7(YYYH0V2n5M_*MMr6X?A!468iD%YxB+$%o z>$sBdk6`K9ZkX8+BB<@~P`~eQJ}4KQNvFf!Dn~`)yh08R6Qs>A87&w#3{oe^v?C;? z`33(4}YTg~pHA#}FFME*Mcox@0PP8qW<+JjFI5UK2h8Pf&HM zeeD|(BHsSFbjm)Lx(=9?o+UwIzxX?)y{^pEQ479V9#B_pa>Fo9JD&c6KEuq(z>bVl zv(Vn0g%~Owk$a!jTe)xhoR-zYQ0dLbPl&M;WCu>fxU5VHdE*E!Chd*$Ep_aKPMk$B zgvrOIgBWiG;-d;uV4%@88`u60^jgRSxr-Ij>~YW~Y1Bwyk2FU+(aA*e)Nl%zO zVzN!PuE&9L_s%s04u+6i$3FwzYs-)ud(`L@PS|z8;QgD z6*L6xk8g(PJPf8fY_Kwtao?gj9QVHy?5&rxoe5!4(~82VNIi!fI$~nv1TXi>z!u-r zoV+1myXrq>^2fKZS|H}T4zF9E1RMu%I9LiM;rW&!Cz9^wQV5-Y_G^)@TrtYgs?iQd zSyHwj3z1A%oAQB@9wzRw6hlr5axe;MpBIq`VtK(%bnDWW)J0i{4BEuDpIatf zs%z)&XOr{e5sCB;{Dc&^(vA2>{)Q86qTXr!5~2%?+fL7Idt=PW<}$CM{ktI2CRMg)hKSE-fUqAD(bC<=G@7qmEbaV;XtHGZ{cQ21 zWMc{@W)GCl)FU?>U^$^gGnmQ)fB9mNtV718CvgRhx+LLbeIRX1IK3_}8NujxiyK#C zRG?^f9+f}eN!6ik@l-1_<5Q=*b;izmGY5EfGEk0DYN`p7zdE#Qbj2r0(g_Ki8f!`J zyO2yE`C!kaj&2q#-MJIcVcZ$u%9<-~MkHHKTx@(@}~Ul@MOm}J1kkb zuyJO}3A(pMFNFCV?wRSdcBrDyv79L| zv!#tWA@z`AM}Rku*aZ>&^A>r@)9 zvxkl#T1e7r(e-q2+o9QsHQQ%5l%B5l*mU2+c7O09tgK!E91>TataZ$zw4mDR{F`5W z`=atbjM*u~C?ohzc1LX?Nlr0W2U2Wf=;?W!{cn6ftS$CCp{x&ry-<(kLQXPkw`yqF z5)v_&uX+fX!MrqkWp{6ryZFpEQ*N$3)%;}bKi}vuRAZDHeM*)zpGdZk{k*}$wurn@ z%l&ym|G^`$-S|Wy@jm+OEoD|;xA_k5)+xz;*H7x~f&OQ<4(fAxwDWVXT-wkMwD3ZM z`j(>>I<+>s+_zJcC({E9GWwC@q*NJ;on^V`Lk9zrh$)R=Q?jpqAZum{$&lH_C0JW{ z9#cq(r00GYXB!v1^!-1fxJ&9piS#q$ZAyxA=#ux5dMfsHgq7jEkd2bqt7!Xi9Bv7# zYO9&(`8e(Y!W7+t$xctD+UKG8Z~Xt__8RK}id$?BH{K$CqwsjeF=p&+DU( z)`Z65s=oC7uz)}kL8m|rgxwM7EQJl zIIZmZnkU3awVoK~BOlvS`$td1i3!PEx-AZAw3k`I}M`qFat8uywkD$T4yO8q}>}5RXQ) z(kjfgTA?cJnFQ_ou$|qd1$f-!mAfCt+$B|Ki$3TLNsro24tQl4H=}Q=1S}499>iT( zjwHqf!}%t-L%ylh3&RVf3!WP`eBe5wsuF1l*ScX^4T`q;ys6?)_kV``MQL~i;CIEI zf3p1YqW-1xXryy!9kI{-PT6U@k8x8%=!#fpSf+PBPrnG|6mFN9!CAIQyUG6h9rkrk zO#cBwGQ`d1r=Ujz@F1@tlfz!+q0~1dO{l`uaAqVn@^)I(e zfWUmFduGquv;G%Vi~OM1;5VbMNlQyQsNe1Seh1DtOX^IF<82!)HJ!3OpN_eQ{!Fu4 z=S>ycd!al5G_wBn(|YwHCzL*$FLPC_QBOo0atC z9;hZj$2=uVJ`0?5*{E}>BtJzd(hxc&Ih*1QoPwBK#!-*Y>ZQ>C*;fjgLt=>1n8$%I zB?MFZhTt@plxi_>IlS!Za-tu1g4HQUUb+NyGR45E-QhIIFNEqkkS%EKOGi`uONw<& z?C-4G&rF{+#{eT?47DV`6y>+0{x_wTF!}r=KEYp^fNPu;0Ho23$C1>DY>S2=#_1nj zJNz9CJ5eRgJ5KoBtiC;H$000W7K9{qVG7?ch1)p_8db2T zNIGYz=KT^f_&Zvuz#|{G-Q~f2g1XJ%$16`y>iP(i3D|~7RK|ZB%^{-fI(LHGKdRKf zbi%*hf}ZWIlYUeUo)Ie*lS}lrB&FU#L?)Zv5(<5CFWMrI#hPO z4I!28p!{FeU_|C22=69+4zaSH6qt#04q}zE7%*lKwn#H+8;;&p|G6_-t&v(C$a^g7 z44m;b2!<4@y)mr_*oSyN%M3F6KeKwRnE=%4~(mY zUTXziY9!mH=Qnsix|NN7AbIguwwH{sWZDnA0Yc!Rv*@MJ3vod1veF(O&2`IR9dQE1 z{G*|%L*9`QpOqq$s9finM%lIx7+15cN;;s3oG8aDf+3d*25X-U=6t;(|M=7S3s-ju ze=#GURxlRc;Etv(nU0`h(~^0t>4BU`D^EGgED9QRuJ%PJ2#GBS}*nkUl00Aq7j~fL;{{BZYN`;^{7jz zIR3uXH6Sh&o{cwA*6(KKM3MONp>37gLE=3aM|~Rg!WB<9FWdvV>1TJE8`SFj+v#$kAIW&5+xyB zD|CO;-a4iBrOW8k*?rY|7z$A+JM#MmO?QCR{)_s2G|Rm3?)w=yRYg-P2*$|& z(d%y#ANx}0q5J*S4#xPac%(x9?~;jG+Rx-xbiL4h)mrC8iCGW;Fs&c$kZjnlJD#-J zTxa_aVSsRz+D>T2OBYMUYS3J2?XkpFpi!E`db5BS;`ind`9kpyF(erJxV8SN41eSC zyxC(4=>%L%ZdxMwU(NCHl*M_#k&A2AN@>SW51^o?@Y{;ed!GgPxKIyDDehQ+ve)~Q~rU~lq2>OtOlc4=4q3|_P(U6Fl^s25S{=N

W`^3_$5t|nZabw9@rzH`(ct@)v$m;(3nd`*nqrD{$GPBnDk+s zqBc?5tJM1an;`r|sdATNCY#~3mn3?rGyC`#g*r(+u02SU)QRVbD4T^>5THQH{#NX;^G8*~1nHp)O-oXEN7ylR)p4DzF5n-c zL@Kh7CeY3hkiMK>lMjs8Uo^KQspxreO4CHMy1wk= z>;ML;RjsaL_uus!B4$Kjj?{+>EUR8WT-@I`z5J*8Yv#22%hV0i;XWN$=HUHhZseCo z&aOoSo=g3@#L|mov!zVr`@@BVG`!kY>_ll#JoyV{(oriu;EPeWf9_fAv5GvElPf+F z(@y>U7Ulo0K~g0;LpLLT{-teZ_)j8Q$&%gih_!9tAN#9ZlgZAj1|!!wJ6?zW46uvH z6LU6q6_h0E{dsc8K5;l7y!vh&dq3@<^Xb(>c|x*{@5$M2f7OJ@C8BHeGuZ-n6Cw(K z@o>joMQa&^n{LrxD{GFEI-MYvF8;x7C%@`GVrV=JVg5sbo1Az(aA2uy<1ts@6s?1t<&g>41Fvz^$TjNQ zimTmO-cQDPYLx8xZ#ygwt_yFkCK;_B%#HQrA}zP#2{w~VRM4wzS!RzSGjWO6bT;he zg60fk6dQ{7j$T?y6D^jFVt4`;Px_2AzBvN7L%fIr&83f}*-75w3=hYk6eLjS{7IxGM)j$G%@`=?5PAVe)U&aBbn12`WxHF^14{Z0@6a7#%! z(3=*1dE$@Q{SP;)smuV~*R?nOXWPPv2Q?KPfdsyL9||fg_iZ+o%%wxJ7wD@x)ENla z|Ki6}SFf=AmbMTxU<3`%JpKv~I|I?vk*5LMbDhN7ASEV3Cu?RxC#21A3_I+5Q86uG z9KI&a1S-$2h$FctdZ#tUe$nC;2{6fRUfab7KlPa+F`qg-Jmy*<&D8%x)mMi_-92x^ zy6BR!lt?!!tuzQomxQ!5h=6q00!x>G0us_4B7$_UG}5hfBcOCj?0fL}egAl`%jdfM z!)MR=oHJ+Uo|$`QVD>db8BbHMX|zIL52mHy?B0L!Ixmn4Za;aTp09BF-+2|?2LJn; zg!mW#ygP6g=293-1A!K)$AA~6F*3*1=id6v?0)7GOBJ)Ww6lRX^SeF||MLq1-VndT z_~L#(!E(%BHT?LM_T7v0+L~p{I;;Gj0g6jT@2uv`U zXuS8-DL1*IVO>h+;FA_uAj%Z+ux~5u@6Wb65&b{YTSNnHDm~)|JL*-`En*VLu4tsBK zZ^L_vKbQGQ=vkM(u+%7Xn^N2O+Rfz<3W241a32(`o<~1mr{IS^E#N(2<8V$M!BXqDwa25E^s>? zqaM>iC<5H{H>o0haNwFT7`p_A_>vo+B^{uIO9%lf`oRmi|Ezl!u*axvjYQwR2&(m9 z_3x%C$x$aamxKXTMwp+kKh05#!H^o>kK=?J#pM1ogaJRmQr+4Nj4H8I>m+O#Lj4cB z6fA)~0}m}?_gg}x^qEQBBW*Z27Uq@$`Y`I+z47RWCdniPd@M%OEk*&UQ&@WYtiM|Tu9lei15&94Ww*ea|8!3iM^BQ+ytyz3~ z+I-z6Kso_i#91qeLJO|*WOmBh;#2KIn7b)APriNR=M5YU4?^ly54;OG!@f zfQvMmZ;ao!wd!~FuyeW7^1J7hu9VMN@h~-bG^LgAy<=76wybg+O>@T5|QWiCJoV8 z#A_#wiZ;{5{1$QE(x$v%D{}3=uRN+Fr3qYa>q9l)01?;iiZldoqz-E3`q&~O^ns*- zX%)2GZ|q$`yG~;1NMgv25f^0K0gp=@G$!C^-7)E62rbYE+tZ>ASt0_v;@o{dAB_Vv zOsEbNZ~uLJ+S2}HI=GJ8O31EX?-}KIH+;&I8zZSLZE?xiegKRKFPVamt` z{G|a$mqRNtl{S$m%8_WkG;0pm-|Dpw@InD6(xgt7_)~`ml?*+cMo#DfDcIi}Jc}oC zi15O|B0bF9U5=%!vLbjWRe+0HwnWy&z#@0NLjgG`ow^czR?u9^y>vfaXsL#-XTYZ6 z>?jrpA6i%T9x*<%P=7?B?kYEH##c2(aFCI3l(6d}3X@MIYKdY~ugRQ@(;)d}885;$ zPbNE6P6eal&(LvR|PM9v_!s6D%e_nLbA&()asM~hzl})ZBXHCI}N$EUTM6<=O*DR6*OLU~dsVsQ>Civo1;3gVo;ghw9tvSCJnu@K=F> zF2sMW_syJxIp2l^nyk{U<{}$vmi6LS3`V-QZu{oy7;nZEj%1O-A%C&x z%LrQL$)~l57G-l-fR!zleP)K8)SmVx;R65;E3z2d0{9bPGF-I&q|JL{ie68i$)8w zr|7r|CLOl)$ta?Ad$+EI7@oUOw28;q!|^dY1hgHtMYI7N^*}Waq)4Zr6{8MOOcT=h zXle@|{wdL(Eb|Pyr7Qv7a=wzGR2VI|vW>6*est>z5TLE)%|}ka@{@9=1DrK12XRa5 z3hsF=pNAiv7m(~G-zAcu{)!z@5Kiz%*iGV{v1m4zZn;GCve0wA@aC?+<0SLpJ zg;Qsj6iSBcv2Bvtdqile2HrQ2%iU40t~7_>x;86plPmrO*`EYMBL(bbjY`OFEgHi@ zSpt^^S+YM^nlFLa*zG?sWl*z$G$~o3w11kHV>^`2v$RM_(R0M6(c*+V$U@5tq;j^R zy$>Qt5deyVv9g&k&5s!9Ps*9aQX8iExNSj~iat2oU-?klc-b`WG$T9D{<6v{ZZ}$Zy>>=a0qLQ{ z9(TCLEl1$O;6?HQ4`{YXVnO%cy3_AI$ARn|ea=rY-*|zvG|~N*yzCf^!jTO8j`lPe zvSsW}8BxS^xS(!HN91K3tL$xd!v@||-z&0!@9-?*w`jR-LA)zt9Zn5CWo|b%g3!%h zcoU!a`kj~96_EF2Nv9&5lNrN=oSwc{j0VT4h5Z{$RCo~>Cz~$xSz2=)i+$?#+>i)s z)k`lWq)Vzdj|5m@{_{Ai7$ ze+&L&l4?u!V03A+PCFF)#ivRpZkFk@uJs62J7zi1V zXY2k=iqyv0h_^Fh!n_+pnVIexp<6pnE6@CxQEb{PI_FQj9h>R~Q^5M+|ix!&T6 zVFJI4MZDCMYEHJqi`djeJtXqdAPgvhFQTL1Sz7nqUhuU9DRa3AY9L-=WoEHsiuDxQ zNjUYH#sL53*T{=1pc~DlF|r##SN5U}|61aON&0~!MvB$+;97h(f&JcNgYM%$kc}}b z>2O99__7|Gik7q>^&*>gsk}(r%$i=eG#x+W(*KEB7=O9sF-$Ft0aYwj9M<&|xCeXK z@7mM)LVzYu(z8;!@rEObxcBQF7Fu$W@UBFIIoru96CFCr&aX}CyhP-bVHOlVc#O3| zb1fJfFPFcbOII%;fbgFAI;#c#~@py6Cnb&Y22$3U#cBF=5=_LsVnjwz!Eu zdt$5kKgPce7ux}P%uE%d-C>n`!#R5d)+T9|h)*H?Q$i{}Bvk#wI{rvGz__;7TeaY% z#bGATb5!2`d=DRUELwQJ%Ha5%dxrJff$pAt`O*qY%lW{y?H<-sGAFW=HLObHOu6gA z$9BTAtBX^)rzIvp9a-P{QMbOPaUlbO1yxIg3+y-(U=pMy_C)8zpq@u@62@-Kl>AV^ zGrBOL_$Z_-6y0-FG@_eZL5j0yo=ptAM9JWrRFa7SjPBKW0$F-oMd*$4Ij-j$C+upv zRS{fW>3yiO_|&AmvoXa*ewKX}muF5P{E*st$J{#4yuBcz^ZN%?$cPtk5^S&^8tOs5 z`dLP3o(fPWkEfmmQfz<-PWEUaJy`!7OV+%No#u54EZvU50Icl#Z)GYNok;}?y_GrM z_y(wPvQ1&Lq8|2Iri9z(W?RjU4C7*@vJE~xkS@6w zg`VcYgO&?g7f$$xQKuJh63}S?vV2R<@y9Dtd~Tn2A^NU z+2f;>`nTbuy5%W>E4Z(O@eZiCooF=P_4leiPz^UH3l=@^cD9?eL5sO_NYeIEN*y1D z<})7E7e+Ug1Y)p$_LQtuxz+b&l7Wyhz^UBtu(hYnm28Ve7-O4?J8lG9aM0}?)KezI z(fi5@qvuB2HCNwjJqBu;fd$E!tGmG34BIPZ7LLmBc+i$=diwg=X?mq8Da#KvXS6p( zhrvAx4nVSr2lZY@nHYYL&K5r99;f~d!urIWjvNFZdKJy{GOQt#@0jf3QleSL zuv2n_HWy=S9P^pqec#~R0jG2vM$8@YeYnGzITw&M+;GJREVzmT{jw-m^2!}b=N>Oj zdw}cYlrO*;Y$;}`KxWs8UsF0a-7SqzJhjwD=>IhHS_ZrMA#D36`E$e_TK3W_H5p8m zzvm<=_^GFdxpwgI2#muPJ*x$+r)ooVHRrA7**m{T23?HJ znfoxfj0RyO-I&K-FVX+vD>%ei>R}d}U=UEqm;37xx^h-oWa+muSW&&KxRO+ugHv2z z)2nn_Q(}9}+9jmC^5Okzx)k61ib^ny8(gjJErT+}?V?Z*0Hk<*qa^y(*p=g3O632#A7Wx<9{AKfnZ$qGgH& z;O%!nyJV0TGANORklUsB8+p%^Z@pt4r#tzQgmG#OYIJX_Vgx9#(xYp&@WQlQKndbFGNLZNQ8e(z%<#GXp_n9E6vGFfXo9UK z$8*#)H~#)xL6*Vqa7!}To*%zH+P;N3gvO7x2s|4Q+hQtvR;4fc)8;&SuOPh-@;^A? z#(jv2`UfYP3zR^U8fU4NG8G7T>)2*O9j@!u7p)q0B0A`iqW>wu# z!jUE=PdU1_8EmIY8dK^GL#15L>&x?E((gFWA+z#U9FTVUa+|3#MQlarlVkj4O7)a` zMVb8#nI0I#be!F8fz;3?UiR7^_#ujlocoxUoxS>0_$g=Z_VpI7G52rkkn*w zPBwoPSLMO|rE=*&Z~9*(ZV<6ERxr-h5@*^Da zI=IzvfmbDI11A^7yr#WNBdQx=Iss5eouC^Yqh*otrEr&(dKg_(v1MtqO}Fsph`UO4 z0}nUEewsKDiJva{X~D)v1ZVT2MO1(#g5(>XcD*QqSwZ!3J@76^C^bu-f3zC3cOX+4(y1qm*9E(lfv)VXkDzvPg~vMmqwwaDFMPz=T0#rFSF4Ly=&tGH2d43ldCSB z4v*t=d^`&Q`Kj7Y&T^#gwo?Y*1E+rT=odTfX~V;gPNm{_9JMj}2VoP~BmGqJ6q&&) zkhD;?UE0Auelu$rt)QdH=;ial!lgbwXr0( zMUa9kwIoU%B_HakOSB?VC+k(W0`j8s85V1p5V5rEobEwiXU+CBM)@VaHwQ??MH%m2 zZn2=Od(0|ic`pJGqkFGRIa#88*mYPE&!h9xzSz^{S=TWvTVwpiHxuDvy8iSCC1+gpGJlFXY~iv`WFzGZRF-MH7!sELtpA)HyxSRqVafAe^=Vf%Pi+6U zU$Rf_k6j)ZYb|V`(J>v69adCWG0u-dCod3i&UrsPh(jM+os^mM%wZEMnrFE~O#jOPSoo*-ri$lagpTy=NqAfZzGB44co@+`|(}IiJ#8 z-n%mV$8W;_CS%-Mc1fO3^yyZO5!7>%Xzpbsajqlb{J7n?5LCE_Fjx0`1rD)fdT6*? z8E!NgY(l9*AJzQ~Ss1c;y@zJQwC80ontF~rJOFXB9h$o2&@BD$|DUu9`N15ax;A}{@e0afw03fDl%JSLPK-(*rI5Zht7yDga9WL3+EE}i$?Rdz<& z(52SseH*%F-Bm1XLUjqcsn#gU$ zH9@7f-*kgjuoH}Ek@Vr3u$CfkAn;Wi?>MAA%HQevbps@fV8bx!p2rK1C*PgwQG~uR zv*1_lb$#K1!y5`;Y4X1eWsf!v7HG>jwJk(d`{n)+zVo{wd0`^4OVre)yP7OOov>)e zYN!eQqeyGx3?UxNA2`sEC-d|*Ohvf4Ej9oJ2$^Vi=@sByGP6HK^)4AO^A zvw{{nz7Q?KMVMjQLGb+Dyi8fvU0I5XpSNv`f<1NiTb}Xir*(WY_|CwPv0bX3PC7pu z>p^H;5fh+BVfG_wssb)Goe;Xu%*_dz5^$LRUAi9Vq}D(P#-ab4=C{yLZEM0bVn#Yp&6wJF)b&cmH&MZKHL< z>s!%UWR;=!HnUh%0zY%a*v?)%bnvHR>gMW(bqMTQjl#daK6mOYZ++0NC4x(HE`msO_slafqB zl$$)0#E8%IgHoVo$97`(2qGLPzTug6D;T_2LHgx=P7*ZfeZY+<4?Y-CN^6jX{*}qv zfuyMmYl{!R-eGa1PA4Aszpe%WTD7;^2H1Ob-x&q?E)PxBUq|qPbccze>`fvKWQssu zgCZEFT`C|G>KGfDgl!zmeOM>OkXE&yA&q$Q0*_~YJDi7I4dy_63EO{XVgbdxv?6yg zwlRo})F`}&yW^7?d@#1@O?@xm8BtLqMy+*R`0FjQ;3}?yO53Gp&9-h7>4>+t&6r}a zupJrIo2!9u@cpg7BnbalnT-7S=OEPma}cVaR*Up6001Pf#t=ZlOhNyPcD*o&Bp|Ny zc}s1CoQ!aHDJsu`O{i51*5BD>^wXh#ckhrjkk8;5)Qo|f0FqY2CN+6(oR?wxELfxV z939WnRBTMH7X%BtdrirNGWUMtqZ$SE-2ENuZ9xhZ#J?xhzlk;n$@VMD5^~_D#Z^5E z^XwoNPE06)QhaH0AnauicW&KR6tgOg6QC%2OU3B_8yBlg#@5`l*0Zv0W|}Q&j#UQsdZ37AJ?di8QIPu&uRa$jWLzz2<^W-W zgOyAj0vDFFohmkdo3vh26%j>YmYd8yF%+^NFYkiC|_Zcj5zzt`7BT38T%@8Qib4ZgI8V_ieM@rWZ*SJ|*QNQL2;lMVZzjc+qi4}c?mRAigJ~93H)F@e!++- zWySr<+q;axry`MN)GGXyhCLUxS}D7$=@R~Jcat}4XiG6 zznczP(ER6~0A(63Wo71D?432z+oU*;&$}AQzwX)nb+{a%mjKhG7b_}eLbQuJjS|5@Q!|8%|W1$C4aM7E2e{OYDyDBMLKB0A`d zT@dMSR9g2h9`o&vvpWOT>&he>2BaBQxh;PTrS06P zX9tKI$zlR|v^JTvAjrWA>PMJ8H7gRrH>$Cwn|f#xA;tSvDz`>ujX%aKo2CSmqzE(l z-6L$b4TDeV1NEE41gn6 zqxkh-7{KbtRKfI@n_;NoMV&Q9ph&&)GJ+1oO1uudna>4RUK^ z!Nb!r(oL%zDsZ~V4xoZ=EQ!C|k74Mr%e!WqEE(?zcN2`4s z4H94K#K)A_CSy7uL;$GM!(+iqjw2wh$`%Icmi_jUJm7w624digQpCAc2kPVy{!NxI zUEuwz*Ojk6BZr850|hC&w+GU%y2uCzFI9Qc+tL1#KVCT05O=JG*i=lbI&1u|7eJ`_ zriC=lHp91If&KQ7!3cLos66YKUEQ5iCP%Sr4tdMcfTK~pUzO2(pReSTpq}CnV(192 zG5;knWcPk;CIaQc$HGmZy+?7+SZQ((p^{5xlN<=s48V|tM?F?5#l##$C!WVkkU#kw z*Fap+Kgvnh1n+Tu3zy3vtgW-H6FRlNC(xF9W;>2+U4@}jK>mJE7rd}i=3Lim!lGOZ z)*ww9_De><`?zWi`f;GP4Vv?yda#r8gKu*)z9lJ9z+fY4OO?H@>n|>St?+O{3=_&C znfT?ZgW{%=f`Ga3^VXfvFmsF7^d!aNf3~6Fj?gNsEz@9u!1^9XM461^nEi>!9d@zh z@QM2Ld^lOvl?A2%!%H~@q(8_(7GIyfsl0oyJ){V!`!DDN+6BJCqQyGCo{v9I;I;B) z)AirY`XQZ#hL+Hw&NG4ctgiMT&aZ=W@{KUhj9zIp&2oy$V`y`P>avNT9~?g9#$r^N z4w(&#!5lTCzU98~W73P7vLe6IcyomC$nQPXGtre{`JBgJjh;PXcvQ(iIt`1=<*Kd9 zmeS?;-v-KCOuS56Oy1vKd@x$%vre1^9~6PwB$qCnr@1nz{2wSu5lnhi$$$7~XBd6Y zjU`I2y;xNQ%VuMGdfCc@8ol9qd#{z|tG5dWLx$_(6yr(FVTsnKkJN;J4h)mb!4uksQLd9)9_LR80mYXE_$uSyCLQyP!PSO1hXP)JvT39+nF;{`W<&9S9_qQ<3 zM2y{g6m2*Y4CS^zzg7hpeb!{FX5fB?u|gF1fdG~KxrPM+Z~G&gO6Lb(aDDxv@MO9; z!Zg%92iq^$Q@;FhAcmi7j`KotrvS4Gjn&2Dw_*vI4cEpX{?+vAyxYtZ5Sug`>56p$ z8ED#~Xgo?{4mRvrsjltTr*C-J4lD6GT;~%P*PKE;GCpQT?b%3geG9siOSY&Dftj)| zzQ(tt#;KZm9?TdA?~%EclgiKFG-iZ{trZpTLnzStiLj?{G+#+0lporPv&oq%i@o<1 z%2;Qly$8d|enkWhok_wFuq%f>AiTl%yF7t8idm@pb1^__It3-f#9MjwR0aQM*|W{S zB5bu?I-31pl`D-8$am5Y7~}LL(P4=K!U8;L@5N6-An5jRyXi182W?M%L`TrxYxybzr=2?dy&`# z_F(s3XpnZX`o@MSRgHD&3Q6Rte9e0?f^!|3Z8?yPyIoK+A#%y}(MmRWWr6iVTp^=} z5;riV6HH#(TNe)YnAdRvQnQA44972~DsI z&b-zb-8BU6pQr9>wS0Qly|8j&(4X|UnN z+=}jZ3X@v)gj1hqt;Wadx&z=g9d&`Q@c@j#qrIi}50o#`En?rjPRNbe6Qz%#k8U9S zB-F-BSrj&~HBiL#ABI4nQ$=I-K@w6u!aN@YXWx((0onP~l<*QxZVBNf^y;Q-v&MV$ zHW7)x&=J_7riBGBqQtyZrQ*h;B-MI{PTi3+I3>hd4hdMnRStuzDco`X z2~ImRs!3tsf`-#&&dwE@e5m}io$z{5 zQWrD1_>K7OHi2#{e4d@&Vb>|&-Ld#R1})Xh1G54rCctSTkr7r^C2(1OfSV6G<7SCs zQa*YJH_EVhPY#%qPjLqBa}b3M!UG-=k>6qSB<;&j;(Zbrmc4=3NPCk6JRAj44?&#d zt~l_y>ST%`0Q#U|KN46&bElRXtF9Qw7Lq;vhpj%WHMSa%>hpoZ!J3C$<3fP=gX~Og zz}r3*^t+hh;=^{#lzm7rw{DOWj_oA|xyW2LE5H|}_L zsHWKKPCCd0qeOaJg5rA6r}!`4Yu)l{>-Yy_A{z<|*|wCC?(CV&D;JBv z1|ateo~SSTL{VZ!^vIPMHDt%@3Dvq*zd88cCNp%Cn}%R6BR8$RGXw_%h0wR3XZDW0t85d);|3J zczc-@`61E+AAeogf2_usIpC~dg-i)P=>W*nfTgx)^D2`$6`|>4#)KMn5&PEHLlc4x z*umy!Ovx~Cf!Ft1sMe1%i_LC6loL~0@R0w$a3m~=@NN?GA>;jw-ax_|GBk`h3%{@D zBk1Otx4ow~O^J&sd&F)~$4&iHic-%s5HR_Y#jsi0z!&=8MS>rU%{K%2k?=57O}c{f zo_t)>s!VfXZ%bEzjKR`lOo}{SwF>W>J8kKg)n|Aohl~*wK1sf-;-gKk0xjXH4O%kAIx9)1QKig#@O< zjgt&9ir#)K%T-eR4JQZQF>=180RsoWKH>3;!+f^xSiqcvITqBt_38Ny}CO<1II=8VDs;enRrtS=ZL zeKHWyehclc+lnT(zSU>OTqat6igqZGCd+) zrrajg$S!|9@pSk>=k$P&6wTna(e(F)a@e9Vq|mm?)B>B9?D+D+yz{%N>V z8ruZN-a{UWJodNAW`YH!^KNVwYnBO6+c$lJuB*{;F7JIbT6r2QcV>xP5+i4emN#yo z3dWreh(|nWYv7L9OubKR=QF6*tG=Evc)+@F`IkwrR@n6w_l1=x zW1C(-h000;PV^gLEBG9*Xi84U$J5)m-8Vq?wj2si?kurL(w9e&C^sTSIA+&Z32|?Q z3)ATBm~O^RgufFM4w#>xv5hgP2|-v@n0rqQ6%H&cH^sc05C>l}(wP=c2O@|+tgUP@ z-!9c#x5DO8DdfiAPNtZ09XyDU@T`o^PgQxT=kNW{$&eAU2IGzkeV?k^P8zC&^j1A= ziF%TR!8Q1%bO&MBp?v7YRGbbc5gZre;+34I4C_%K=U>k!NsRqT)@!YqQ0gXeeh zWG_g}Il*_u4|)e62gc&tsh$%3L(&wGZWWf^n)JcZE9p3sV;aq~)|MvZnW zovl*`lXpKJG}Cs1)??LNE!4D*eZ0+tJH_yoqufsFdxhiJkE7TbubXniw=o!Qm~Mg6 zXO7=d9RhB-TkXsJ%&4f!(G(g?;^iaWQ9`p~ZvaqAlCnm*AjizeGDHtP$3opxg%c5_ zS{ri$-u~naCh^OK+ul(vvMNETr|*1qW+|3_@AB(P5k>Jc%!DRY8s9`c{UELx>a>6z zSpt)o5A3CJNzo2C8;)7!d33zT^KFp11>n*|X2-y9+M;VV^@( z`Xn!Doig|O*5V(=tnGfNcDMAOp|(~0Ffdnhbv;chyXkPTanoR%&IrQNRuMcVJMii5 z^1!pEhq)@!|JkL_X`l!2O2H=x6o3m1nMQEx(pk6=-J1I^WAal~L-D6asTC;BwzTeFlUmXliT@ONk)$#TT=dHwLwEMAAR4}_k-+*?$j#|lGz(w`3EM&taGD#K=1lfEX$e1+{fofLA z{d#Pr({;=E)nT~hrn}UjIX3#3Pr>=Bx*|_@6Rb@ba7`!?TuIkvfzJh6-3y3umm?1A zc_Ma~e;*7cU<@(lUfp7rSOfOymP~06IB*6AP^Gg`B_i~PeYSg+^^G~vte!IErFjRzrxEZZq!0_3xw0=lb9^G1J4{NSm*e@zS-C{!>?NEqA}3HVKz_1mE_n`)gL z`=(1}iR@yNOPlYsZ%iT1x z9c#LPE&Fv-QgdCQseFrJ5!Xe?hn(=03>(0h_aM3rcN^%}QZt;S`sXa$XUE%DqrYq` zjY~zmT8m>!5i);JJNo?QXif5<$rQbX-*rhiiL*WrymKj?*KK8P;i}x6N`!j0%0Hs{ zSN#}J!R*+D&*8tfk8SxzE~eJ3C=#Rf`}w$DC4)kl)$djUa~Lrg;%q8X80Gxs>27YJegd`Q<|M=s1j z#cH?mD+{pk$Q;N(c(-j4)Wh73`D|8(fw^vOkwjlu`tKs zE|2#6IYy_*VGvYRbMX?SHL?b+-(stGNU$-Xr(Oc9zrdsn=ArsOn>s2AuZ`Wbob#nU znV9olg-h_k(w=5A`5*5y2|3pJdViur6$+z;5$HyFlpfln z#PwUWXA%b+{?{9udlQ*gKQo^jU2W;q;?3mIqm%s4lZv(e%(VQOc@ZWnBRI801;szK zsd#K=nkt|w#lEFhR;m#DKY zy;NV3rr{7$;Rw};=b2(p4awaH1zIeQX^b#I!!__-yk?-2_gL8r-@)Uz)1tKOi%-bi zR~}^+>+~EwS!NjhBLjLBlZRekx2EqoXC$3Hg6(x4#=n}M@Dj3`Q(bWdqXK%tptg9> zW&#XxVxQCz!re6- zB%1#WW7T8n7)lpOigbc{O$1>(NDDv=+I)DKA7P47>@;k@!=|fJZKN4}QnqBZJQK$~ zp*5(BvQ&1W3I7)Z%2I+94l?x`U%Om89{s=)4Dz28-mpxn%;9-S+cPjNb=Fl$uLu8t8XbxBdHj&2F+mo#%S# zt3PS=y^%j%yjwtBK)55B@B~b^=hNQ#<7+hG9L!EOyIdAgsViqXWa4T%bfXGo3voZm zB8^7J%Gy9;{7z`bkTdD1GAoJ?Z;lnv)CdD|pekvKap)nvHZEuZUKc0IvVJJ$vtuT0 zJ0@Hz*gD|~$epG0g6}C-B^Ty=WPUnE;kRo(<3qlOs$~twllo(J!Jef{zPmog2e-uc zZuL?woOQW+V`_i3he+)>v|gROnyIndwBYg{iHaLStUuYbim+cEsb?6DK+TU8#!(L* zL?80uarkA?r0#-dgNK1iu$>=CNhNfr#`pMm{^+NX>AKp_X*_$aTkwhr^nFR!cLW~H{P8hhp zWuNsU*@M0IyR4whRdw1i9^+K0{K{PfbMOOfWa01U1x3m&@vAZM^jXi9=s%29OX?la zTspt2DgS0xOqC71$(`0K{VB?|wm>Z0xI456ZoO8&E0{~Z{?vOEJ!^wUUG~Pspx~Fa zXzg~K^YoQzSDUmmqo*5N0nv`q!DGFld})>o!GaLq(?!W-3n z_C0U+AxL6l=Ls5%T+Mc_UeS8`AB?n~_2oGgzrWl=U&Z(K8J~ZDMFBxHL7&z2d)==dX=_q9shC!>$_ z?wBp#qC*S5ofZ23E$lt@T{u-h3MiHRkOht+d!pc=q#9!A6rp->&wu|O7^X2zvFmr* z7*C7dr&Y~ll}2@oU+=p@C8+8(9&Je?9eh{z5ks5ty&?TYvIjj0ZCds{=X^RtZjw!P z_l_PTtV9mbQWw~Lf>9BU{#K$h*Sk5VdC$Ars{I<@+EKoU38A#9^>4De6n3Zs(i+z1 z!{jmM_^t29Py>x3g;FberZrvr?e2BFxWfF=pM^waw>F<`_hpySruXoYc z>mGDYWkC~xUD9*65ZZ_;`gc|GD^|2vuE zHKyM&FslvWyUE6idy7|%trv|%i&%X>RX)XISbB2oB5y`Kvth8uSa<0(}O)7^U!O*h+N*_b(!E<#s0RMW^v~{_3g!CoQB# z@qjDD=lfw&TvDA^Y^?aT=M&EL-#o!F=TCS-bB3N3Rvi}Oiyry?9m`ZvwK$6d(|g_s zb3#lZK6hDq!>&!2bwx0*Q&iC|&dWbWUj01K>V10J%wT82H|zL)$bV-c?oP`YZEwI; z*%RBz($#hS9c817zv!*dBjM`bA^zuQ3k~$|EXTTj=rkW3+h_bi?EYFEP)f>By*?)P z-=zrIm_?whdrue89KCn~ok`xSsV$qSaX^^-6)8Q@;6^eC)8i0B+g! z*~4`Fvwb~&7x%A|dM!zU8#X+_rPU%AGo$j&icf7_YVBHEPtfQqJ2aJ@PB7AkkmQjf z3ZK+oaOsC5x)fi)Kv>}3PRP9DVL3VBPshx+)^%MnJN0hjd$ai)l;T&1;+f7tVU6#)_HD zeYG}LeD1sRb32czL3N##l*v?!?24iPq?PT@_pP(;7f%D&dIt{&X_bN@~^m|p=-%y9YG3(dEPwRK?`JH== zx_CKUp3?sP*(HuX6c@0sUrX#N)vJ8D^|Z0@^F1!3*?#Mj^kr%N6;}TPR{gEJjWHgB z-C`#d>($x#0!PhDO@SNp{u3oy_=DLQ-)~Qu*a?11K5(XnSsPvvi|-SEs}gjYca+MZ z9K`t$&2shpau=~7lDezZ7u4!EU}H4qNL|I@q~>wJxh{Ho|7)VT^lw>G-a}c?1^HtS zqu24S^;@LYh3<9zDuBbNe3x@f!jK4%YF`- z6*{s?tM{b0Yq~sfK)bK#x2)+?>@?=9d+53zQdQ+1MW`Zjeq!9TIhcMIkKrJv+%26& z9$B=zrXXO`_?c@6@?~EIF{&pRZei}o|5u51<1sn}}_;+Cc zQ7Zm%y=uuXQX$0G{Cc`-Gnz}RN?a#cy!senKCxB3SwB`dWM#YHR2s1NwQlC~Ayn|V zG$!iMuyPN5~?Rxg9`wX+Qg`Zh4bFcrtr#*kaUOk(6mi9r&aF)C8H5E)G*i9P@ zn%Q_M{Bdq?^N0enq3uSoh#R8Zh9PP8)T&pMk zHB$vkn3_F-ba6ETv=h0H=XFQuldt*t!P;|zo%q+!5?N62;T`>%0R(D3TH2~qw<72M z9WOc+f!W!w!)L=`V&l$fE?<@8k@4;V<4t;@_QB7los>5I=(HSs=sNi`le>emhYZUe zLAetUPUwuTZb%y?&-Lb<2*pect&N~uf?Em~-{n(5 zVEQfgZ+7+KZcq-1)M#PPiQe(@ny$9dX~(Bl&SVxCuUJas&L2vEdeZRxxfielOB0*1 zvYoq6w#o}-`&GM!+Wb(lid`%*5iAa_~p|0XjFAl zhzsa_?x-X{HY`Wu)uEywlbm`tt*iTLwy=&xFEqWq>~#aY(G~GGQA41#em}MKJoUK^ z|9;bH^R69T1IHO8t%|N`PV-}8mB}C9PBx>F)eW%dwdW zytMlf63zA-f~p$>7j$`Zr@fT+znZt9AJa3WQtIm$2R2Z?Gc)A^Q{{Z0gnoMwfK=LC z)1A|tv7o_VcgEw7@HbLW2$VegZ13Auv_Haqo9UCl@mRb9#I9y zDYVCg!lRie)bZr5yac2(>p(pUMd4pGzB)&Z>aj78ikGEU^uj|++as(By9)^7`Z6Ti z|NJ!i+o9O;&(A8C95$2Z4(NeX-l2=i*h~Gf<%mwi%1P9KxjXGi^YRDc_TahM-L7u& zbE_znv}WUZ@4(qiM1Cp8hG9arvWC4qjg!V+{rN1%sR-zo*gk--x+`}j7512chh)}Z zxj;}h>+e_*0#l_qgjpzotb;kxW+xfgA|@8x`0GDd(a%r=|0yUxRp0Byw`4@hwE{vS5)(kQ8P zGa6}WP#Q!*x{S#>rQ-(n2jMYl(7h579zd4VyCfFUZ zAVD4R0W|iE?ps6p>@K{n`|K_RqC^+iOqzj15Mo$SuAy53imz5rVJjjIZyCWkr~6g_c%4 z9k$e2yw&bnm9xK}p*AL?{r-HvRn1V0g~+FCO8ssoTE4`;U{VvkC&~aOQI{_+`evH< zDbwT1`m)5>Kyyo8{N^uIUnzAD`=~x=W_yNw_Cm-1Os6kx`LuBJ zCdvCyv|hDi@(KAxKh`pykky*FJ&UWC_<>Wqy!i2t^`_RHCe5h2B{zd>u~Ro!@fr1p zCmtww=k{}N#D#a*4vWf&y9?4lG|0ta%YtEJMC2}Sf2pHM{3(qGI^ZW)QLxwB^kPUXxYZku$fiRb~Z-Xa*cAy=cqk>#|c0MOdMA`!)lF38wd$b z7EgmVn_`cf9`0}A9PXwaR0hH?UTno|l^E0s#H|Pm#U9)aA1F^?OMKnOeOGb6Bc3!2 z%l950ZfM*tz6oYqm_zaoZ+i68!lVBzi+8r@H{!Q-Jb`r>ln42Uk6iq5hLG?g=Ru+ z^!+QTl9fVb+lomIZ+In6c!y5zUi>}%IUeWrw==BpEBw+>x)br)g>nG2VbyVP>#fy2 zxZ;8$amYMyi2saq87*03c(}J+lZIa{=ihX3`Z-O!ob1D}7t1QXdswl(y{2YD^Pbdo zSlBou!bb*C!&3H>8JzK9_O$-@f1U-0ivFMiVxC?A0lFs1jWM;=OjH zVv)Lak3gI)Z#HdglzG^>NX)GH?8*DxmTbEYlKJ;MT$-$1hE1rjGCT~l0RD_c>w1b| zal*;MOd`3PLk@l}jajA+zB>j6|Ng4a-SwBlWR7O`%jq zQorq~88m~8A^*MkW?F{Yx3T+`Lm+@J%vkkyV9udn_^G4rnYd8z4@ALrSNV%>CNB!Tp^S?h zkB36h-2wu4s!2K~--9y8^N_VM-NyEz_iK&CprSV@|6R+foE}&X7Ih>kMS%A7V$hW{ z-|K^>gVs$yilP@!j1#3eM*^Ho@d<^adTBejpRADr){31b(|#FS4uqTbXW>&8n+`g! zib4-dI6dSJ#({rqgK9>eDm0Jp;|X+;={#jq@oD*Sa(hu{{baptz-FB=a?!S z5Dj}sm&dj(!=PfeF~>n0?aTes)4-froDn9h7wow84592n%g)2X{N*t!DkwR z?4!^+#PZH#CL9;2mtb3F-EL!=Q1{g$o8XPuuySKx(}To+gp076;Ms%M#VYWH@K~Dl zi{>pcd@m1NzL&`&7A^PbAuOkubOfJvuRq*PeZV(gSd~Iope4Ik1w&xEx?v%n@83Hm zOViwb!`MEU)>D4ee&-~;luEVzGy7tR!bz9Qk_ZhZTb|Zk)Aw&(ZhBbv9U6(z+h`qt z9V1gB5;PRxya)5cPSQgY%RWkER*ur(v`CV1laY`Ntwiue`4(~$?dnCayIgKE3A)PT z{Y!X{CQMxvDvATudHnRaqSgKzDfw&%vFt3I{O9-JLGeUXlM%|Mj`Yy~?v%;GD%~-c z-}^khn_ex`^1JQo^?jY;eemkV9a62Zr~Ie?A*Xo4JwnUE_u}EGBa(Ocm0|4)pDlRb z-;HfjF~!&VFGKaPO}eaphOstWE9p~9&Gj;V!tk>2<-*n$LaVU?-m$oaG;|cLBh&Ny z8{+p9_6QEWK8XK_<0u$hsYiq3DcC8|+vnC!j-Ay_9(|JI{wJf%)f?k|>BIb%?dnfT zx6JGHHkMCzy#7NvHmXezS;iTg*AEEU@jMrO+|UoK(f0mF0QF>Zf5&IW)j<+J(Kruww*r_;D`%JdEN%AB}k~Ma4pGn2c5y2gvt4a8C;52Vp;aaXFul7^*V* z{z%<(lX$<&8H?+EA5=^cQkp`>LQkR27PVFE^az>a9*%*YEbz@?clyz~HotZ}Vx)Bp zauoRf9-@lM-SIJOQQTVOFAxU_*-cf*eXn}knfjB%^-#~}QVdkqSslMKr2H~Y%6i+__b6x zExQF<5hCVqLO(R_YH!NKW$PRQ6CRicKO7)-E$Edr1 zNur75K68$&=2KjkyXrzAENRpoGM$ij$wtTaRwCMve7bN=Z4iy`u>S?sA(g@w2*0v3=RgB(Gjm3ta z+&+<~dUCw-mCShbr3>wnYmGRl{tsAwPCd*6LA=hpyK~Wc(GtsFF@AFIHGl?Xdu4P= z>b|h|`~B1@dO*;Q$dO~tTKwTn;k#kFq_?Anln(G+jzKN<6uC%>&+L+62qcrmmnd1L zu8nV}(Su^85%cL+-^L@J)7ewSeEaJVWR0ZE?U4{UX`4k#{yp?M>=2GxNRr z^&?B}k8WYK-~baMWsgiuvA3>_Y`^F_RW z2YXQI+`>iz{t0EHy#pYvC&}5SZ~e~7DcfDwCMUjO@ops)QF>phjfBt@_2hiO`)1^w zcgHa{9>i_>;jyJW)kca^eVsn&KUc-Cd(FF*1DZ3M^Q=GGJ0izyN*kCKq2?`v#KDmQ z%vW%d_;)4a9QEkH@?9bEt_+u%_-0Ugwc%@K&|51DJC>bB{d__pXAI{@{TMo}VKx$# z#8yM~SrP)n6YE9wJhu&-Ltx~E7Z{bC)Rb)?k@tl8{Vu6|&YCmBPV>6>M7l)Lkdm!- zy>{U((;VHOz1xX*m!Yma9LmCk{AT`Qpb?lgaJ+n`C+i-w3xE`G_kLQxB*(ctdCg7t zj%4VBEm>og22;yZdDP}liMosXyuJ#O>RKZ>JA3mE8W*;v7XM-2-Cfg5-3=#6k&7?` z4J!mYGO=H@Y)99RKVc8C`E3j({HrzXg!Bd3%=dXT{HMJ6RhbaEG`1??P4I36>{FT~ z%ZK`1!7&Dxh^4~JptD(Oym;*2QFnX%@Kyf{dpNyhi_(m=G#H}g>UTjcvj6PXMXEB( ze!2l_@90niqS|3z3N{zFP*Hw4vlnuOcVdC*APYKFTqP}>cRh}fFUgFZFW6e*XXFGi zC#RIYD!$P39j&n!BdsZ{*BBiUJsFIRG%X3Ihf^v+yGbcmWE|D<0N_Hf+S0TNg5StI z0#1TJ-x;t6OyQJo_M3&z_)-`$>%lo%PjA|GJ^4BK_Fb-FJI(nQf)}Rq&B1RJAVV)HnITuwf(4)LmCz?&rXB$_}}k!L8BzOfss_-Y~WgtPheyR{msy<2M$96T_upHU}U|BZbpRD-nT`k9%`~uF)NLdsz;5BN$Zed(P6LOHYTxs zEGHtb>Yf&x7HkX`$buaEwLaL+2NkB*%HxhIcAi-N=5bf)!$Vpj)|m-!dPEfZqXK0o zhXhenbeuAn8`d-L_gE=0sD;0jA7C0ceTTG!&>uuc;`ws+3Oh6(ee+hjOu;9)JwG#A zi|sne6vd8*K#d?iJy*UXMy-RxA9cSszo2^^RynMsI3iegVs%2??97dWP$`aBY^bR? z3M$4e{@hz>FWmk3ZI+_4y0BfK*cu5>f#n&2Xlyzo}u{rwi5{k+1D-GGVPBgk_@^xb_2*HGx zCH^hhkFucvx$~o&wOVJseMf`O%&D<)B=_^R(njEJYMGEs$Q%rG>9@I|ndN}l=k*0F zgcxW!pBKE0raZvOe10K!IM}(}wuGRir1ISrY_ACvMXy7$PFA+UK(|JUYPC1}{B+-W zJU458DM3#e>M|N06BWBa;PFpW&1OMQ8`IhbMSd&(EP4No{bS^$iuFIt!cD2smjQNYWHO*xC>hce zPW1Gh0T`q|WRD?tDv-o=a%)b(BLo7NgPFCz z9cf~yys`*G8w|Akja^xpcRr5^4fd#TSO0t-PIbyOnkAD9OP}6g7|4I2>^(|#+ z{WkROCltAYi3dKw{rE@V9hC5=;D}J~yy^iYGePTKd?dhwU{LQlbj|p2AS#L=P=scX z07-i@aMIQra*vpT?##D|PP{G7QKfM7I_&)Lp-z1HQRPI`mXV_@OY!XmuU3#60!NA% zWeNN9CMwXzD9!79SC40=!RArBa_naCjUmZteK8&%7CzTWluco=E99;JaarY`S*9#5^F(etu zM~xjIE{g88W3uUse+3pqA3pn5YL+G38%M5aCw=;10d=1^@HseJDgN5;?)qzcX>Ep| ziB!PhV)Br|fbfReBn-P&iQ(jIA=HD0uvJm8R^P0OHtY<0tq*eOQ`VW0v?_pgk}zHF z&O7p_&!@miQYj@a)HUDbx$X*~|7DO^w5H+~^YqVexttmme4Scy1fkP&%|NKvC3vp4 z9>L}%2Q8>9>Plbi%{67HPyGQlVK7SgVRTY?!y+F{Ne^4u<>$5$cp33LiuiF?ujDK5 zZzMeRwpW#ub^~N5F#15%)t3Ljjvum9p$*x3tv(G;hRo+$;yrJVdeQ_@J`>ZdfuY-z zzv5aB0MTy2PZSO}?1AtViqBm?Eb}At>v<|?=WBt^O~eau<5og+($jN6)z zQEMJ7^PlPG%?+Y(Bx;xX3AwfSbPS!o`l=omq~Ve8Xm4!@d;b6c{t3s8F_-gUkuv#u$0 zW9z#YtO4R3CY@}3p-jCB!JhQ5HeQRZmU$C+5bUCn5@Zy-rls6?q~uk0-a~y=z+lvf zUJ$~5+20{GgD{KwArR(jGL-t#ym7N7MM(yKd3d)86<|JNw7^V8+)!ygWPK93M!-WU zXwMaLCfY8_>y!$+gl7y6i^$q5U-mDa-`^Zif`jE=cF!Y%4e%s}uG?rk^*cUD6N#GO zn^VUkZRG|lBXOM0rk}2Zy5TsPwSJdyHjONXd$c(qt0O01R-FFQr18_)C%exKEzx>4 z)(Jm`$myr8!z$l&wcq07cZ1Ddo5^+Gg)wJZdR+7>=RW886!z&kCGp+z>HgA!!XT8j zsxdNwja6>-=`89o4~1zPW zV%~+MyVjCR_%%~M^hWiryzPx5#_RQyrTHG`%2-hH1KsAvHbH1+Uop>O6PLJ6lY(8S zobt)o_v}4ukaMJPOakCupC-(VWZkUXUus$qn9%Mgxp+)p$|%QXtO5)q+3Cf;E?zyL zY^F;~mMgZg`+(-OTe%xe)GpC)P!ZJ7(-Am)YxaJVRFQB;VquS3xkkn~txpT#t6;m&>7U85xxmJ_CW4h#mJ8h;(2m3VuH1GKcFpA1EAr(kEr0X%|-*@_o4Unu%yOx+Vaqi)jP z0;%r${^X3nhgYc>{Pb;RF^eS{f%1r}A%{TPTQoMK$ibLV8wJTv_BKs!*YDwht z(Z9!h^6pBD!4j{lEB3qT zuDi!DG9~F^K1`W!mB0H-IyQ5~6zJ zT~M?bKZlSqo5SMsC;D05`Sy%v95u@?1TYh+pltcd7v$nDEt>0oi*J@dont(q z2}rTtk52i{G|%C+Kcp0%Qhc_{F+7yf9AxhAjy&vVEqm-FTg~1%LKpSbhMFY7b;%|^ z>?U*|%`)3^KcL)k)wjE0>oCfxLgmr0Av+<|5jz(-z)xVUPpz971UBPs2B`dQ4w3>9tq_}x~uZ#37Fu+e!H%=?SkW~`Bp;;Ok$nM*VmI&>HQ9^zYX!;BGcXg z>ys~`FmGf4QiZ_{dxsvq7|^v`cuSnTal1?r!Dd1D%j<*&UvlN1daDDc{8tzQMpxk;(GLd ziCrcn0hV3KQTa@&nD0FeT$itrH2HUWI8~=_Z}wZL(mV236n{cOx3UyEUCvJK596k! zil`e>`fPa}wqwyFYN9m#I6#-Y<0Q{<#+RSL!HJ0L!F8dL+C_&QP^qbg=#$B zUn?@F{POmw2MndEU;mD5n7#xDk5F~L6pbIlJ;9JmK{~G9COX2H434G_Dy@W>i0!dPv4Yc zf-V}JY0kjqeUGz`SJ~;2bJt$}c{a)KkZB;o~SsiOBZf<23FG^>uzU40fRU7A`+% zpA5eQ|09H=Rlc0eeDH7C4as;%UC1ap0+qf_VCzIOl!v7*THZy%ObG6r{bLj{m@htx z=Zi!_kzotuX6>dSgG*sSguBidKD6Gu6_tI18S#83!veTiZzvuQ<`{y8z3(hH9yL85 zEo2ERGdR3E@JH-Yb785%HlEs0&}JyV%2S{La^x{!9O(ii8peCyye0VxTfi>y@03d* z`X~&emG(O}%89}edGYqh7Tnxq^LE}xVJJaTXl$&>ZO3YccoUgaI9NxAsGhn{+kyjc zNnz|oPsQ7KJID5V=FQ;@8wm9G?IQ)9R6Z+BoaIqT06VJ7vR@)5GE}KSg-@5_UgHbR z4eLSEeC|rDz{knNpkD&y{+1&(GsXr?4;ma&w9kUW2widOjho!;!en3b2=HiA{or|$ zlF`VZDx=5sR%bXUYkxD?fW~}RpMdFrBQ#UO-_Ha8t6KWPAA`i3xdhj>!1DJP=zP3) zIY2c2X>g>;t4dz8 zprk&+UaX>C{nC7r3MqRtN6J1i>mXht7CP1|IE+92Wj0^}5N-#DVTANX*=dvNWBYJR z3sN#ZPrG$g%3P3Lmc233PpN$c_JEpEV)zmXg&?0!a+2sM!d&kPUi3&AT?{21z(!|< z%00umT_k?v)}J3~(gy^`8vMojxFEY~S(7xI+N7vlQ(JOFa!&{XQQIoYNWF`EkLWDgOE0cAO3TnRQ$%m zk+L{=m;9FEV%kv-EO)g|?Tzk}WxO3m(-LhCza@sG6(k=}RU>cI82@94aClxH6 zyFP5$bD@b6+{otup{K@~d4za$ceiS!HlX!#A8R2YLS8POr$UsWTz{t2$PO-mLG!Z5 z+N2@tZr8#b=*QOL`;e-ujHUe4BoYX$f59C7av)Lu&{D^q2|jl=^TDBvM8Rve{A0!0 zF;zekuI{V*dpSvu9MSA?(KWi-AH#}sy@yh><8CYzJN)iC<*~IdZD_fMepGyPk1?c8 zEgreK`M!c=>UnJBZUL(_Xfk%QUmF|^|23Di3PZz21R&2&ivHR#(5NdeSD#S6%Y5@k6uyc z#sbv+_c+T;lsL5+fVa!574Ija*;St1QjD7(`1KJ#3l;WDvq6WQd}ew#Opy6~svPjg zt?+8*{KeyU4^%`|%!=~0OSV4{EHw#Vp6@YsLFOI*w_(_mAe4f>IakIEbCu%qyFVo@ zkp_xbtbC}4m#GKS1#_QXiyHZPHnFfJ7IT^J)E?XHr*Iy8R1Uec{jqO%U-f?x0T=tY zw=sWGcqN!50%V*foOoK0&k{5m6+4_*{T^d|aNX*GYsu@hd}h=-bM!``N}X@ij&Xw{ z^@HFBtKi0%kF$dz1&=|>N%T#u=6>!O(-fD?KOVmMYLPI7aJf|e{#~Y2pK-xQy0vvp z6pmnY&D#c6zqRQ%kHX)w+2w67#?E(LS@WSSyV@9<>qLW}alTp@<&g%?z4QOheO`Ai z_=4%LmBXt|{Y=GIn@5#e0F#q1$=K`HUBHRy6FZMNv3r?2N6BU%TX9Fl=og#v1+KNR zw||;&K@KficbgyC?Y=&2{?qDj1LYY=NA!Kr|2-dbg7qJ+jIs4Y*c_<_Htot$j{KjOUw_9x=6={OZL(X^ zxihK1nzO6ZBRQD4KNoZv{uNZ*a18Vm>=@>~^lpwpockrDaM~}UQqvhR-xS_CG*zfi zvur`r2zzL}i!nn*@i@O@pmY0b8d|^|$@!+MfL~?>1t`i>Y(JjZXE+s6^(5x&?Cf)1 zbLEesqryOI-IroIqn4DVwTz-hv~_%;pO;~5yq*rors>V7qxQ=fH)Z@C2+ z71mBuUAhdKh|UEGoxRqDdXR9wH-4>gRv@ zUl0(d(yhzE@)=1^!uOeQ0SV39Px+Vz8k2PzugK@(_OLA#__i8q)p-y5p93F1r0Q)C z5Cz?C7i9@Ze|uaZ)rr$6hpZOJt-$ngxVLQrdM}%~FQkV~NSJhOMw(>z?<9g$`Q^`r zCT*Wox%PcBWw22P^y7RXj(qiHE$6A9f5~&QS&FVyaoG3``qb{R`tN)TqHlvfIo2{L2 z?{}Nhy0MyoHW z85ty{Y}aa#oOvoab0%R^WS%0zZ8SLU_u~=~ivNq0nUI>he4(@w#&_ipxQ+rA=MsAtoZ)&WuPZRRn#qSs;knfAi8TKVAol>@ zD=h$mt?zQ>dp_6G`0cIC*|^-^rQD&}xWf}=@{`@|iJ~-P;EqqdeOZmrT{3p+dRD6( z*rGD~QI=>SySLApAAP!&Y#LROh_Cyq`KX)nBkJXQMnCpI?5CL)R15;fHB7%BQ zx~^;-lL`+o1g)cZ0G0)m_5}$=58*EgH2`n2p+6Yo^ZOM|b4)1k5=Uh7fuBpzdV)4a z^|I$y#^$_D*_762d7mF@qDL||xx;tT3a<7H@l+V0nHfWehQC3>#-(3r`NO=tm`1QvR`- zVVPwr2l;yT;!GSl)$TxEC^`nTNH#8$A{IlAU*Z!ecx67!zU9cgR-N0ybNEd)%h2RYEYqn#l^4rV9$HQIvAc+#^<((M zDr}TZsN7lw{}9WkjFc|(s~d(-_~*@!MiJY7j(hacag8CCbvP6Gn zD1*~4xj!W;(#-vY_wvF8p}N7Ml}>c(0%UKb0ncMZwCJ(IPS%{^b>SW8so4GH8YxxI zGiegsoQgL$L0PZ;YC+H8^~@syY*dcm%Lj$uT-{GnEjAxv27nG6{7%v~vA9*lZ$Cs= zY6p!yEuHK-AS}S-@aZVK62x;(&Kk|sRAbC-4UuVz!ZH?|^uQX8OeE8C?45$U{~c|U zJB%7g8}gMA!Jg%nk8PslJz(J$#PE8!-I7?CwBA4CFlyA*a)ficcKyH;A5&M7tek}< zds2<|`^a9`ZVV(P*^%-{NSsY-ZB83F@M{&R;-kO__v$lX*qw0iTR_v;rZw^b=*N)r zA@(UG=Y^^-8Y==N5H{lb=eQDgPw3@lhp;Yy61x2RfBu+5u&s2h+A$pl!pbN}-BMA8 zTk2Wb4EK(4xZgKH8n}GJD#Dv!k{A2%gFYunl!H1YHHRer|GQ(*pu$aFOplR73FXnM znBp08|D(EEv_bK7?}ZWN8>K!Du|j8}H!tQNV`?dW=FqETaCN5*z=%@}<{6|1=in%F zC_+tkP+>%JFzCD;tC}+35{-)@fylL% zoU_$XISr|EfLSn9@3h9o@{tN0KO13X*`D>3R(XCkFyNbgQW+v1!U1w`qrb{daZk=8 z5IvOa+iLm450kfg5}76)*1R^&gIz;1(}K^##C@<-{xN82x5GB=>J_Wqvl%2nyhVwt z!OlLvR=$~qqX|Fl3amSXxqbrdI|TU2DX|r^=LBle{vDpNB#7jqR zc@u-8Yh!d_X|*#lqGUC;eV3*j$d%4Iu20oky5E}T*althlR%2$^ zZyL#NLSX*)GQc5?on~cZ(%`N0FP}OW$l0 zdPkP2SkRP1?qpz;-GZ4n$6hHwOP`aDJ)?CQ z9OIT?eja_DM23kRD_x)iGV1wy$26zan#CG^A43|MmQF*f0RodazxjE(L%ptW3FgT^0PJ%Q*gIcN2Y zT|77s$A?@G@c)y!DcXx*mEOsx%KR#!U$i5r1nkuG%#1J^C?<*qx&e%t$PgMC!0VVz{s#-Ku~f`+7Nbcxa2~I4`179QPhllK`F}) zwIWA1Mc&qeP-amd7h{yDSZV!SfU9r#safT|_qGjC6$ue|fQ<2$tI#)a*cJKAB*tcW zd3kS46kB6&d0tZ*4qdYLMh?TrUlmw`zfOmbPnS?Tuu)y1a*r!A^Q|2l%@%E23iM6( zowZMElR|o>KtaXeYw@fv9dT;nRwt{Uo=EpUg%1I2O`R&QGiw_GpKfxCU=x_WoHl4U z^$e&4=aFJKNRT6@E&$U*ZGD8n=Fpo!CY4k(DGm@JhS^HqGQ$6%+Hh)Y2IWkn zAc2EJ`6k~tV>e*^^k-3c_f`-)*$KQ+rbnDV{(-3v!@N8b=~QK8rz43nwJ?6JB_eM& z$QkEDUco4Nt)&vG3lASt!VcjoKZN`ZuH_mTyHk&Yge_^Mb{yY3hE*ywKr6PTB>F@K zy+^k^Yjw(ury1W|DSq*HX4axT&;pBYIF7`;kp6@cn-SxGjNL01*&uZA-=8OdWacDG z?%-cW5jHaUp@?a*@uVW-I)oYyT5oLS9phH&_WNA23tW(pL;VO4Emsk#a-95shyX@} z$u}A!OBwTW3Pe#(&u>O}ViGh0in5P=w{8|s&@%G%w;E>pD2|LM~$A@1Zs_`(MQ@KuRoLAik zA#4q^$qNatJ5Y_TJH_3}0_p@~Yy2RZ5e&mj?|s;UoF?*!TKtg43W1@Wt3ddii_TVL zWV{dnw`Y&HNk+i6R?N+4g$#;!kq3$thd{Y8@9eR)mE|wq71H?)<2!WzjVJW4^v#eb z<~qo+yWp6V9VWgAw=B&WgDQ8ZMO|k$WQCrMgH{h1)G@tfsHj_9NynS$TJMTQm zBp-ip#`du~_5prLW@-;Bs3^lS3)e@!pJ5&eJElEZ{uL)~#r1mAP~g)qk~kL+g)iRw zLC?vOowVc*mRsyRt!&;BgNkUVKdj?eK%}&A#{`Rs%T=>!x*0Ddfw3bRkV-bvG+J!h z{-0xpTUAc3=voWXrhlEB4RMxg6FRFIJqN=6O>Mk`Wra$2*g3*c-vN` znOYuS6LHp!#rgNeT)%B<^O1llV9X2s_3q(`NJa{U!cLD*wQ}2H|JWPs4J3J`i^N+1`R6 zv~u2tta*iy;1CK2_i~wH!JUSOtd!CKnki}4$J>YON^E)?1% zb7vc@PO!O}{H;R-V+DK0t+Fx$y?J7!f0%H9{0yix>Fk@yX+f_qMfs0p8{J#bGkPvhSr`2*eR z4~TeAOrv0h#lE5)=6F7GP0{8?R)C)?;LHvKx-mTYxYTui9NXQsinb6Kk9aQh(w_Ao zeV6M~G;zx=kVJbB$Or*XJ@`dJD{yD?-@7@rXCFtYJPKAKwVlG@+knHGVoVjFIzCy3 zFGq1G90y1BVn&boivBwWDFcKLb1vBx&gc%tZXd3mWKY^~QU{k>?bS8ka`=HUPzt^N z)%~5xC-4I>4uSUuYz3lD0y$ki;myM628n8Df`)H9(u?(#_aU7pZ2n%w5-4iUdIoc?dv*Ge(3nm~n zD+!uhr2wg8%@$p)R8>T5^XvQHqUN}qfR9Zz5?Hr1lL(ONa&q}%H%nVaa}QXMd^$w8 zRBTCdQvtaYGp#Q&J&~NNXwBF= zWx40#)w6eIadp&wss^>Gg0eONToI#xf@8uDr-8ehj?Mz#Ip6n89tbP_0hr;||0Ul; z29-6$hrXdu{he3Z<4{A^)KMSe!AEeiv%cv@kX5qKS~MP98gC!NV&4T^FHRYougaP#}PowuO$W84@lkh^ce(MF+ab+=`7-u$)YlFtYp zvcZ4yr$#MH_ZzCq&6hUh{m^f7 zGA1hbYEzeN-MS7e2#A94q;!4(QOAdG85jMufuy1QbBERi_7i7Nq##h@IB;wB$-o`>mMvS4?n?1Knc|Ip z!)?UasP+Qs+6J%4NBnBU>o){Nk@Id2dj1jzd!%EfpO4EAj?S%{$AJ-Md>c@zj_Nc& z`IX5MQ z`JqoLGoXCE{~x}Qy5(7kv>fG634SXQ*1nH0G^duOH5!?pHe=fr%KyZ0tL%C44 zQd1GBh@~78qajHbAo;{9;cHAxOz`+-`dV;CxfJSZW;dgx^w)lACV|${UHaXWw(C^n zNXaknEbn14_ugE_&&s>wzR> zIr2Godkes+cgDxZzZ+kywM%OP64#&`PM~SJq-1;?i%w-i|J~jF!r6TI#xaJ_s(FLm z!3ltZca&@<3RUa@Pp|#nAN2cxl1WAyzl}DkDxWO=;@_V#g7IV#_fqe(KOd;$MX0hW zZ`YY6oI(hwomEs+_Nfm%+AubH|mCjS#>b9Cz@Kst=_<)g}?scyH0a^2B3Z=WxR-3ixLT}_3fZs zMi;7O(JWrzR@c=04@+)4iBppp8cG-B^r+tdny}x1x*Nu?5q-5Y&Zxw*dUd(Nd-i~O zxI<;%9(bc}cpMSu^EQxOfc>(ue3E%_DtnW$anwnoRzH>}kL`+wAcU?iH2@viB_N5! z5M93P7R1`XsapZY`TnX(+@1Pu&<_I{EeZN|ex`MLD49Et6UAURO{PoshE5izcy4{s z#U|YV(bce@X@*HD*58164ij_w;o?%r9L^h~j!j7OMdIOVBnaW!`k^S@`R%aTW$E5x z1Hj}1p#D#S=7Y(thb!V=9p(p&&nsIk6gl566&W4zy+vJNx@?K>NEi4VaSnAmsmJ{pRVumhn};&iPq`IR5bc zjp_$^V?0teoYs-k&(%}aRuh4(0`p{7eDH0Q#x26gOa3xXm0gk5j(?){IA0cY3nrE) z_VYsQV#W|`9d@@O^W7GCA^18X=OOa$!IH+%Z?kBzO*K}B=0?17=Z&`)qtb+!8IKqu z1GIGiIs!P@Fua@x6mTfhMVJVua;B#7k^D{$a=hFkGVK*Nn^9uKR+_Xp*&LG6doe^L zDQtoj{aE=Yz3W+})0&+7#ge-S&N^d~VXPE~62I=JQOSFBCo%vRibW^5>|x3k6F7@F zD{Nn_6cG^$dA z%CXfcgnz1t6!0+q2nt>7av%Hlc1J0iJzn>A9)u6*n!0c?#!QWdB)m`^Q^Q{n*`o(uE}I(Svd0mtP_$gSCrTwu%Y&WwF!lGjD6jAYESQQjZYK-S`|HzW9GkeRW)v zUDPcz3?&Upr=-%|jUZAsUDDFs14xN|)@%SLoA{Ag$DR`BSp8V zpE+2T=DOw3$%RmKHTC9BC@MINs`>K$JdCZ9KytSzWzoJQH|+(+og~eU8CQwuKu2;l z-27#S5tpi4+kQne10_xkxoWOPL{S(At`VVjb@kasI_}`I-@5iu;-=J`DEoHyg>S6( zkBt;%Jk9WSpjhgIl^^wQ`^Pj`?t;I%H}K&0zrwz;JEc{&`SU{_M|TXJw`ReKjdC@g zwb84~)Vs!e3{y!;{2bZHZnrJ7&$wK3x$mBNXte3Jo{cVKzTv)X`$F5>)oY}Wl8>m` zWLeSok^`t~l9=);>~geAI>S&mVTQ1S+kQ&{OR%@^(JIL_ZAy^%I9cZsV`E1-r9q z1N?BbvJ3HF>XU!HiUdH~R_ruk-fLIewQ6&eoGBodpKne0X<)WW1%sU#bR_aLsK7g%JrZ@Hq9CEDG8~X%d!9|U5UE?#S#SGA! zcXmLON@L8LDh7+n^1*-QK412)^JTL5u%4M5HTbjgN`x0+0dZ<=q|6#=`});eBm+q0 zZ5tg8s*;T7fm}iuYuB}Cy*igSlFYzB4zf*n7W^ld|El~q21rh{_ET2XU4VEZJta*a zHj6^v-|I#`c;(C+H}O$<~*2SKO3d%9=z3o6SphR61J96BszGU18$&D~VIT@8<+sFE8t~=1WuwB;hzW z{B-Y6A^m=J8`0lv0>}N-Fofb6Az{{E0NMI{>)l2N#nh)TK4&mbdSCjn*a-o7^ z4X?%}m&E2J8!YTDtO>7!j(t=XOD8T`Tv{9gnSJ|jVA_(raAr#PmN2cJC;h3bRe!xl zVRAF_f3o4;IlYdxe;*l|wrN6zli-p;)LjyJE?BUqSHBuKswQjRpV#C2=A~^WFi)xV zcQO+)Cm45W_NzzD1=;v^GpD(ern!ISxsH|gb9%xLW-0-3G46e&m1H*Hq@9o#RJ@ZC z!bl&VUj#eK!`Q8y3&Oq~7x2LfsH&B5sXejCT*ox(G8tSmXa%1ukF}n`$9q%MKFA_iYl+>*!Qo z^#SD9MjLPEjex5SE4NR?o9zmT#7`d<@kfVa(lQ%NfT2!g<%>Z>0??Bf^B|GTR-n_; z=(FUmpnE;{s{KSup;$T!0~@^7CF6rL2^35UjDabDWzgE?hJEV0R?o|DM97hDcT40B z+FuoiUObYQxuUv)2F6a{ZtUVvXqoa7gk&HVG^gY_o^?d)VuqycuV8k0D}6H9t7Z+Z z79nh_guAZ-X}=S~d_Pi95)`dRGzn%7|K^%0L2tURB3)S=Ix=}XUyilYw@{l8xC?)5 zvpOaVd0f5KJp56dbH{Xk#Blp|0Ui>Kx1K1GY4-Jzki2)G@7Qhg28O?TyrFo>uirQS z#fqYGA*JBA=i*Ng<$qi_NhP=DHVkS^Q&|UnzQ45Q)03ZT)6@^{WWKEHqO9Wm#J|g@ zm+Ag3yK>aMmvKjg{8)BCD0^&JxxZU8d6Z#{3+RVldnjo8y&Pm_2g!-wTsCs{Vl0lZ zr-L1sI_;kuI+~|Cyv^`oUr>*>oy(~rPU~hMcQt&HYy)X(iVJkv`y1%8oRkwNK?^r= z+@P;U*gs%EiU>x87o1yMC}_=}t`dC@t5ULRMTy@`RhTq?D7CYxHn81%mMu@h^$wpM zUwH$EPo#J~XFcr=%GCl)(y4~l&a!i$wR^$87xT!YLYi_$M&=1mmhS!&U(r&Az?8u- zD4hdqIQ%e;Z!3BnlH%;r`(RP>g82|s_b2rFYs$l-;Sk!C7bJpsg=uMNEZX^clGYSJd-r(E125Wl0kJU-^q%yu&}Z6|kYf`DcQ9KstQC zlp_bfwY6|=i!XI)!g$oatN+TVjFxOw{7)GR*BW(M!LN%Jp$F@DUs_w`>`0e41Ji<6 zFPr#D!ICD3{kCo?S=4~bB2{+jNmmak$(g%GM#yv;lQyAC@M^PW0D7}L%w#;!>23UJbjY^So4X-pQJ@H< zen6LoTF0mZU%W=1ut?|V{!Fulc#Kb$)JV3i%?DqcQI0wJXFY>z9eBeQ@%X+KX@9Ca z)e5SArUxq2&wT9jW;5#lEG`u@;~0oFiWHs>)IDrBP#$YIzaVpu#Fk`;wJ=H5{t8(P zP_pfa3)e8N6KzN+Mop?S6F+@4*4c%9YJ75UluOUBF%K1ppHidKIHh@7_R{a|W9B_A zQwDSWM+_*N-_%D!?ri3~PDhb-x1$L5-5@Uu-7s)yOEXTp2k}D$;kMs*Z zcI;#!5EL7A>E&g81y`hPC-L(nOVHGV@J2%gF{a=5tS z2tr)tKj9L3tQ)_)2OhKHKv^uuUC6w@m&X$rOB?DV%LwLxMzih?YxZo|oVB7ZL#6 zEZk92?iteR$j|$9u6=@JCVlTD(aJ#P5P70;n-o5b zcBWLotgS`BrE8@Sr2I@SDDwk;|E;C*C6I3PI77B0mCn{(pJ-J#)Soqv$bHl&^(x6M zHDo;iY#hBk{KU5`i0~IvhmxqgVjx34>2B-Zo5~>;jI8C?Fpc|r5pUQ?XxxMe zbc&SnE+;y=I*lHZjT5ToI(@V^Tl4)As5O)WWaou46GOKjuJGT#zWZ!XoJZ{ zvI;;2Cn>;Sq%-wTq;L5oM`)KsXKEJ$I-!~P%=pqjz0r1_wRMfuPGr(E@~+EC+P+jN zReynT3TD~oF4jxr;7z51n-#ay)}`xsj=zDrc1M5x3vco=cK3hC;*?Lno_xtdEhmb; z-{8TnX8 z12|107QyP8(Wml~Wa6vf zp^yvO9M+RmLeO?8!uHsD?ZX9&$zFHp--mRT7{*>tm`n#7pYI@}&my_3Eukbd40|K< z6itBTtza%=Wahp0vUtH!Ir6MgSN5a)CWLS-bxG#UI#SWw)?7JsP=83-U-C|w3(_56 zUAfC9Fhg-u&J4xs`SsPMpDC>j&ee--UdV8~C=qj*VRshkN;g#P(2Uz*Deh;kW!PeH z!IHN#?P8_~b}6u(3HJH-mhs?o=A_#kGxDi?WVbqGA?dU5xShf9n|eF>+xqd!9IsQq zU0%pn{F=-sELrgFk%Pegyp1fEnx)XKfIJUAwH^-OY~Y9bt7F+ZW0vmDc+y!qEe1dO%74P)u5hgTohee zKA^4Myvy1cuU1%IYCR{3|HD#~I8xtsUfy=qnR)tqogAGShHa>Kq=faNO0j1!#n*z; z^C{07f#htWmiM!e=U46)kt75WXD^-WLeAV+v$YJ#aNpgtNe%r)Yu%BP6%9HKNiFO| zZk^gi}&U)?4KzxrivG0~Z$yWRDSaAKy`;ug-Gvgzz5`y>!p{zu0ZYIy9(= zzlo7$-l8R4rOh{TOY$)Q%vcdJ+=D-zm zMPepQMfN-Wy!%K-XGnl7LOGLlr$=r($72yF1iE3XUruAEAO$~@9dLUs3*vHGQ>J1q zw_pt(snY0|>BN!o{uFYpBHB0(QF_fXU%%|{;7Xsee<%2rs%M0#EV53fcE%vlDmSIn zZ?OkN#%0(4#YF*RW%B=$l?X+ANe0|%-vOaJF0x4bCKK!3BS`V7OW-#~`vU;Xm>=mX2wZ z6#RE9DhVM`Y>V@)-U`@Wwz3z>!%uOM&DRVMAtM8y$17&X8IYABzv|33j9*&+said9 zGcqCqsbYV!Jr%T%fc%Q2uHG&6&JiWk?I0j*yfD&*RS|WZF`mX3$l0t# zXyE6Z_-VH$Q2Q|9gVfR5t$x({Q6#Gg_lET|jj_-GPbylf2mDkp&ZMt7h_h(W&`Y6F zv4P!*O1tuY`;!jM(09+KRw8V-_^-)hc<7krq(-7uI8kyoNeks7mN&2UJD{mIp$S6Z zc-nMT;6#VAR<$3}06w)Xz|6hc`PaiGR{AebE9zyPB4{A%5B%8>EOG?icqcj~!Vks9#2>2x%1+uFpK9IOfU^ zoVv@n1Z5%|GQKO2^k4h09WQU^CFXffX&lu|>kM-TPza|3t-qZ_i~glN6P+&W?BAfr zbJDu!D{{;|1_%jy<|L$b%Nx?nAg&-zJ(iW#+NrWlPTf1rtUBq|mG&OT%Kva#?7q}r z;i$*H!|+Iq%rO1o~|Dw66b-?|XXCeH*jWReSa_XE7?Cnlz6#Bf8Nbt@;e5J(YhZOS@7aMtCRcB@b5tOKEC6j zozMOPNrRk8?$Oz!X_21}%;V(VkhcLB5IoaF2hpF6sUqCwECw0Mmc>jnJ&^>GfFdA5 z{rEHc3Q(pwqFa0Cru>|NpRRbqu_PH%v_p$+#DiwIl zuK;olba}Q=yzoFQk@>TFoMX^3pWWs-ronweym$4W8B(# zVb3tRqDBv5PP2@Zpi^&;P;6zxTD{nyf0(CwNtrF*sE24B7#Zu2*Pzg}_|I+BCUlIA zg*g`{!5O{P49GZEct5Kk$&n_yVYJaS6zN4viMKSv9R@?kmlKFuaVpV02mbjqBI+^#pgM z_ht`PGxG1(3C%HagOK}!nc?O}b%OHp?K_Rn!8(EMxH-spFL)zoNEa$PBx-U37+j1E z5mYksGOt{CxBtVG=x;jh;G@F6hTe4}yE?;+ZhF16CP}bsbwthK-7j&tELSpEk#npb zIR;8qd~`(2XZ|b$rG6j-TevlYk>7VtFo|E7x$rKQ!INy}na3*Z2GrV;Bcno^QDGc6Y&ZDvi>OZv>s+MS|?qPGR_*&Wq2=9%idHU*(b78Zt z_!{=FOQ+zxsJv`Er38&f#OD!&(y4}!IOUdqH}o+NuFAJ*_@rG7G82Y=$et{XD77&5 zub`F`)Pc89^j^`BR| zH~~6Qx%N+n2|=w_dq1&Xx!2T}%|$Nyg|dI0j1+yvT+{5fk$lqzR5c4R^9g>pCHBq< z*WT_V<1G}P5L+qgrt{>Kw-dx4G+7?sTi_GT;6*l`r}BY>yJfD2tll_44^t{LQ$An+nhIVbO9<)s<)BS zDf{IB(vCKZJyiS7>H(AbXX98Mr!6`E(2^2ga@bofYm0u`qwg{Peh#a5;-mJ%H}a*| zY0qDb+BFhL&YL`CHC!4NXqWv->kWW_mzga3Rpv@nPFKc(mdkoeh$rtzT?<+e zx+>sOv7nMrOA71} z-^gIFV1}%pdljji+b50{jrrKXXM7J=zNx+5{rdonc522Qnebsa7!XyFxNjpWj$^Z9 z*L??V&(zJ)N2aH(@54OG2?mjZY_RHL#@WCGx;X_CAYi#WEo|V+qB$F;afyFTaBOjT z0)YfX) zxscfFD!($6O&?ti}bmn6z- zQnoWL8VeuO6+wv2fcLE9J0TT;mY`sgqO@r#AtzEY%o5}20yX>3l-h{?2WV-3d*g%e z$tZO&lSOcaD}s<_xWWfR_S>l?>KndWZX`DznG(H`6aXi}w`U~rP|o`U^s@L^s640P zaUIcW1Zs=<>4prg^F0noxMC1X)lw=b5pJ^O$@i>{HOE#ro7S#PNTHu-iBM;N<&R~5 z{9%1<8Y!huAB6EMB&nC3E|d)D4$RY_CNlh@v_Oc{3F5?6G(||KsnstfVz46Ca@(k& zQr1Es4WU1ju>V>f(esjjq*}O3PEmoyaA(VcCnT&MCd}?{#<7XKgR?7=U?U%<*}!^cS*XJ7=Q!#mV>X~$USwcGs)YuB!%f z7e@!Lfad0_7Uw8SE#ZBcw64(_6N9}M|BUE5U-^g&Y|pudhO842YfF<1f7KcO-8&t` zng{`rAG32miX|HeQ(X9x7ZT#KZwKG@^K9}{QYTzqEVxNN?I`UR`-ruHp8H$ZzHPJJ zB)nbnd&avc$%Uc(*H%F2A%gEekBT3v1^IWI%BX+r%Vct^_Oy>75l(9ZT^4+OFGTC? zOcS37m{h+K7SrxtNe*%K|6Sn~>{>-?tKTOk+Q6~SCH=8M75@(*l$`;CBDzK9gyZxZ<- zsvXmRnI3CDV5{oY>I6)EdtRHKiOMFA`k%Lzq-6@gdnjRfc(mkJ)*tGmB*P~YU8a3i z+P1T1J)(gf1uh4xhatU;HrqyVfj*48a8IWqKiMeX^#Ge3Ubt}Qv;b=&1@IfMrpO+v zowIesitcv+ih#a;F$0o~QVbtlpH>FzqC;1r{;ALNa2*LM#MyK3c3Wa1u zn+BPinNv}jBs@`X=$Q$f{X{*r=fd~5z!<;m_f6|$VD-hq^(=d`khl)fK)rpNt*++% zC!zmAV6OYz-kZs5Gg7{;D2M?<%&O?kG z96CwWY>ExSY9~e}whj8Z$-%Xs?s5l6X2qRFPM2W9!gcd;g}FxITMGlok?+5hJYW46 zJ|OWOd)FJCqyVUXU>d7r31%7}J;h3AM&tCW9duEItJ{D1dIdZ<6BdE>U7=GxUB5-D<=QX~SJ%q5VIFKIr$R)+QmyJFb zV1iM2roMU2_}~q`)sqlLr1Z$Y!q)Ca9kw;0PnrK3x}&6`F0w7HR2<2c0CW$$lpOfr z$A{_K(Jjw%k-l{lzDJX|2n$TxxrGzCe;Y)O^*5}efa3Twj~?z*K7-#y{$!djG$PF0 z;$HAy*JVc2*zA;xJ1|m7524ok@YKUh^qNx%+u!$d*rQ~$vO`71-cznyPP>jQLcj2^s0^b%X^ zr*o`B{z$Ewm0%h#l(!zpKk1=Cv*!s~XJuQg-_x+bf4z>@(J9 z=4%sOeWAJ*OxW&goV?5@0hLpahvZGn8rTNW6jM-W^-yI?oY`CcsPE>LfU-6WK?z)1 z)~Y2M@-e4K?6G}D7rD8c?e;b{mX+#-gzEuDrQSfT$jsiJzp#LObXWW0QJz_2H;n%(u+vX-iL~uznI+c+x~+uNHESv? z6@{ITRWCkZZm$xEgJaAi(4B9P^KjGCz&)NV1G(D{u{iCckH-btsx4u2nl?y4|0@i=r1a#tI7QwzF!lfIzbyeNNJkvx1!d7PKmeIyrrse;^xm66&~k~IamV2ZLWi}y@r z$xpLfj)JeogZG>pb~TvUCC76n58f{NN06W4`rKy!$PXc<7ylEq30q#}hYo9s>}4LR zGk`FE@>}{$PJW4maWl2I-*oX|Plc!>a^-&Z2Hhy|yOp%P^FDh4gF8EH$G~pnkQ=Wu z4L91br1)=-5Y$b;D5Ek4*2joas#_>e*y}+4E&-oXr8xULIAH?(5VY)ktD(s ztGmVe6xN<|$tW8*P%fmqQ?@EiH<##`JepTcl4Ef8KFxhi?~(Cu^5Y0X&dkiS0o7hf z%wlhGoLr^uPt<|O!V>-R1?;BgYo(O!m*%0GQ9I=%ZcsZa&2}+A@al@l*2c1&NWv7o zYR)L+wv33AdMGm5E4eh=bM=Nv41?Yg=9ZNA}I^l1;)ZC@#iYg<)k_Kcy{*+cUB7t(;`-MVNb z9JWq0NT>R0f{}S7^$zv+>B=^@tAX}F`uEA<(I|BuO&g=}s~b$~g%B{GDZm4lidRU# z$?B6)lkX>b`9Qm>yxS8l@r63a{&Wg0VM-((^!$4d{B8S)rf(sz0h;*gof-t~A6SP! zK6kn-7jEYthr?1{;GtWZUU8;76JIE?p|WM>9hZEvEs4kID|CpxO=@U)K4pz= z@U_^Hfa75mwN@^QnoIIgcKrb%Z2~6^C}{1=cq6Mp8Y5{fUfY2i33&-=k6&&f)V4jHSBcS6*pB(BejYwEq^690M0y-nxR_Cm1 zYG#?SOoLQ_vO{_mj@gPk`mJf|>~Is%X|uGo#fM%}fS!=_H{Bi`sT`#+2gJps$>h{k z02=L6E-)$l-=4QR?|h(!u3e^Gn~5;j)pd1|ZOxL==tiI=8nmFqvAm8-owNjVx#rx_ zFRvv4r2lsb`Z(wl`9BMt*McgrStojqD60nI304^4DD6V2MdP44cNYI}h@vgIRg8Wp1tPSMe zjbgTp&#r>igvV*X+HAh&#wAaDNWSNqr_a(~W)H@?C4C>JQ^v=i9IE!j=4ei2U?!`# zh<#)@v$b*iUK#2ri@616k(Q_ZiFF0uel3a=z_`AsD?%S(dPZ(BX96yJCFHhzmm=*q z4ibI5pqA^gkuia$jRo598|?J_qgxalmQ!1 z{Qk^vbh3`b=ot^Eu2*+gb>gkX2L#o$ze|-DjMpsY9-^6YBO%(4PZDpaWHYlW-mAswPBG5z0; z4!@l5A(z|dTajT3BisT^d*dSRchO(L1(~F|QOt6?*DEyzCOyrkr{C4O2y^ve_F3m0 z>wdN+QYJEOR=wLo6&6Tj~E4m-5BJR*OHZmdfWLuhd zosMqA%IU)eoG45fe|D37<@Gi_4BBynz%+{#+7R2g2d&pKyW0W9o;#k@ZHGqA(_8Ck zm+G`j*zKm1&DbLBwH(`*fdqH5<8PX_4KBfye1TA~&c~3z?5*a>_*HS8>r*{b<}4286Bq3B+W)- z=v{Mo7t_2a1zjE6Uf3X8$;(gXrfoPcPCi8BAbpt_xf1y`XIvLQZDl*$g_O0SK=9*K zQ}{mVB}9L^)*WLSB`(WLtP<4-;Pqyl^(;ot-Q-TCfB$_^jN)oR(c3B$z?h)L2R^MZ>opf z_2P-`sF(inS$wtB*o*J?L0m9Ko7&?av(R2IrUj41^oZ6eGoRb36)vVD0Y5nMrf_9M z`s8OjT3#Y}xhEEV#rogQxaQlpPk!KfaCMf#sWr5}{cWiaNAmrWd)1N`xp1s-n71wsJ z6SdAP)qgW;*23Sg++c5}I8_)BysmZR;z;TyTcVryC&R-eKyB^6*Zo0$j1HzYe0tr& zD}v{w@=jLIn{IXa-S9Na3ZoFyxPfMTKcZ24ox)+7kT1Ur2oVK+@jr%;GF=Qcl8|-S z55M>5>AR|6V+HH{HFCT`QXnGbt!us$bA){W9NaCN2a)#$Ey6v`zCmadk~XJACvkgi z@6&7RGLXqcI!96VeA*-5?ib|xCoFIx=w#UEa^nNyo#+ZC4p(;F8%FA!z#!EVXE|C= zeq1V0D+#{sg3H69h=sUL|NXY`gAcOHLA#GaQ9+l`Zv>aynA`NDXNXuPs=6%n7yAbC zk4O&qjj2NNn8=>syB=4GfEiz8rfy4L>*!28X-Wj)#M5xaHxEOw>x?8S7+vR1^r2U& zyBAK9x8!o3_Y<}m0jBRJ)Mt2PgFx!hv9J8t>Z11D**#J$rV4h}J%~OEGeR$IW&F|)0-!l|4iqW@Gmv}rX-?wKH(vh1*3Ht=yr_1tzdMO-|%g0Yo`c>8sd8ulfP2}YOzBOo=fe(Z z*E(SfZD0M2LpAI%akk_kw#2xQ!Y_5<&1fJajLVV@D99eKEc|yBRek5^p$dFw4giPRRgHeEqY4N|8BB78qcY|@_jl5 zq%NCa;W67P+G$izUr;l9_76iDHnYJy50Q}t653VUw8k|a2u zvd#sAR9}2Eh^vIE|C=#d~QqKKziFr zTagU89>2Y^Rr0%fY)ehub_78#xwLTw^6ZNRG*=q74&SU(!(9^=vM}ob%x7w$Bbb9L zg=8vOo)7*2R~g!2Bk~~l9WwqmbtHWMwMXBle#GEb;Qx5NJH&!^Dx)jL3Z2PgVp|Eo z-sYJENmVb$XcI0Qe+`mnMIR`PWg(u_5#K|{X|9nEsC87LSMg3MjxX{y)<^6J- zH|uOgm{$G}R?br|WF7x?@UfK*h$cs52VeJ-L|H{VeF+Ad{f?%IMh;4#fE&G?^ioiC z)ltl5Bm1x~`5BO@s$-X1NarZJ2}8{{FX1U%6vh(7y1(y$d7jjx4`1ER>GG4#xNwzA ztO{0QZb_Mi9zp~9db)^=crXL4!E}-+9(K8i2LN*WjW7FtzkOGCn2+~Kw&g~EO(E~< zP+aX4HP{}w&Sm-dzPSGp1(zWWZB2D&Gik5Be6)YuLk}h)7kDigw_kOm>f`MV;XFFv zqf6Tq*={Jd%+u>edM(8$HWFNVNyx6sqxB@LJC=l@u>qHP;|-h(`)KNV`E~iL!IASm zJ81i5M12FYb^9~z$?45g_kz*p)I$`b8!C9bksNvmFCcO-%4cl}1*}9R4f|yS$iU-xoHP zBJg!E(lhsOv$QqBtqZ=*L@ef;{%V0Qy6SuRO?)~Ik+KfZ0Z}Lj&5UTLbky=rW1atIvsT>e{A1`Z)O1%giUx zZQ#0nBuB?=4K29yrvfGizl#Z0)Pt=^#^STJU&Wiv&lr|rNC>Sj^Ol?##Cxv^PinOMo+AHaw9sf;&MLN5-5?S$_7AA5-dP933^FEU`IbfINu%$L+C1 z!Gi;?;*U5$wmiQuh=ls4{oqs8_5;^no_hHIw--Pv5;5R^EmmiPNk&2y{(U$Yb&;IB znTE9v#)*iaBn=whmo%@8W^x`<=hXMytSqFH(o8o5dg=m5ed^)ypF9&KjM4mSL`h$A zjY#pB>o@PAECt&LKmaR925du*!fEpj62DABc{I&xvUa|3^cCuwQ*?#RvHjTF<7=9I zoh;c(afZYjX?G3pJ7`mRy&$tlOE7!=yEve%eEZ_J^*+ewmcE^-%>Du?8GIzN-8^pW z=6w0K?>xc<4TqXemS{V<``oUrJ1Y;LL}$i6{la_#X_;KQ9Ucd&(^+q30;9g-rn^BH z5c@ydJp3a2L?*bjtf}t_3+S$@$OCIP4orXco)UlXL%Gt(+;PaOD&8;jo zbQoNryLI&g<>CnKsFLZS+8*5a;c$t4j)7YWUkU)nIfJuQQ?E{uX2wR zs(yGyJ(H&S`wl%+m%q)ZvDWRBdb-@c0R8JKt2OS{bg`a)%g;9Snr({5xwUKcId67V z!dU?3`0*^IP;1{c?W?oZZbY`sxXBeMtv3Z9U)<5Q!cESSjE-XUCbN160e#O1v)t2* zLT2b^^g_FTkQo(_r^P-oKflS}bS6U*=kYq3!ga0pvjQxiR`u#V;^jC*Ri7!)*JOp8 z-#Ni$nU-N+2=vPqu7o$4u;p>v7_;;SgJ@eZAt?FjaQEtAiuDHhOSOJM3YxXg(vLYP zIT!djM?a6fMG*in8U!FF9<1NL$-qpZ*y4q^UAJ;|B-iG+FHXlb{p20ywfZkOlMnE% z*jDB&&w|0gIlt2@-u%Cy2p{6swtb=7g!16BT1-Hn)SKS6&&5tmeU%ylNc7*BzI-n6+X>hcPQnR$=Q?poD)wjNsK%|9d>Z9pFc1{`ESE z(P%iuH}w1OxE+nH9KPLf*U&+p1^_38g@@o@vVbZb_X$It@Pv5aOWE0T=kA18X9(L- zH_J$72|RwEyuTUHM+B0FlOp3cr1ee#4!HNp&M?9$7wo?se46j*|E7ux71~aEdUc?K zMMIYbRqh=d#XVcuz6wI-n`u*nN-8n}Fq8e2#ASqmOT$VXLiw1BS$>a_mcTT6Dffo) zA28Z&SL9;*e9$$}W-@n1=LMgSD7ff$BYngZhM5Ui{PSpjTjEm!lrXf0_4sVr#5rg` z^v`{Vy$m&pGd?mg)SUt?L$mj~2DdH#+hiTY_$Ts13}XWsA~^y;n^< z3J{R#HE~^jIXfZ9%V08l7aZIVHFMT~HMME}t&}q$Jm2Z9)B1=;_FbU2rw#;qR}0U@ zo)Ul^N$civN)Ck)wPAI$J|FSkw1fl170@kX>$R+zwWK6Ijk*`!XgOBi*c@EuyVsfP zdUzuI*VejIYM&Rjv#jW_NO8beSsKxHAhwP%IY7FWa)UoFVww{_3H^ee z77fN94zd6LwCW8DD^}x?_~=E&*qHgxWaW#k3e_ZA(ReQ)WP2N3mfFw4W}XJG8_n== zs{1RtA+y_~%ZzdsJzWZJM6k?0oBL1Uew@$&&3@VrlPxGQ(5Vtzjmb8eGFJVp4ZNc) z;QzNlPZJ^(X+U+Phyagz#yySP%q)R@;r#;Y?_n3Ne-3C*mn@2!8Bd+4_AL+yMne7aKC}?C7rPG?(cu_q{mnmBBtE z@V)-Q*sn3F_y>o3o&e{bH7^F6eD*O!o&0+oEDCtm5`^-gPnd*^#9_TCtoDSzlnOA4 zRI1R=Xk-)hK`E7#TNk^;!pw(tMw7d<>~#lWO%A_Jkvs&;$jB_R$zskM z56y&Vz9$5gJ!D;GSSmy5=(hsg=%8Opl1t6X9k&Va(K`tpmEx5?|A(os42U||-iBp? zrFQ{Edg&IVTS|~d3F#0ege9dzkOnD{PDMZ(m6TdSL8KG`$)!`er1YKDd;jnKyzrZu zGiT0uPD`3tIG7c3ST>tF7ABW9?lfh8g`f&0B&Mn;{COCw~ZHKh3jEs~7L(2^W7QqlG%Z zC<4C~VH2`yeR=Do6|5^!clMv544)fG*=~?ZJgj|tU0oaL*4x`)1rjj8EF-7ah;7vX zGUF400Uzxa;<9k?{|}W4HhXP+R*R1wY6Mw-CTA38U;C1tkU#e+v*&MaPhA)=U$<(D z9^F-h8gqT}e=FMO2aJ}tY)cRM;!*kzndG%n4IZtYL)D%x<9QG4R>kc+Q_ON?Y(hOX zSER=IH9soZ-17xA*dPrRs~=r^fBus#o3f)j(A_icZ2v`VR4fZr18X9eA`Jb#!q6iD zK21lJgm(?CWM8#;kI70fT;(i%1U+t$KI!zA8Ix`Zc(NbVR-z-kFV~(9st(LX;cs@q zrNTmEk-JWw?>>}|FgTOGdPXNcJ>bl+X{;J~Z1&gn#tN>s8C9NTi1W{7L+)*WEO}re znz<6t`dK+_%2qV=ivf5@h z(y#c%QNQ>+U-}*kBw*l8XUdLTF{q(P+Hp*Y56qr8WzBxlvH0J-t$nuP$&sz?nGZZq z(3DXQ^V?ijJnEw?IH$q0V*!hg$*2z5 zpVlor1D5d15 z*UtNHwj!XxWXz%;iY8~nIAF_V6Hq370BuBCG+ z`g6rLv#FFKywkjgSvypyfs;TsOraWQTnRQQ3l^$`kbESs<0c;Kc0Atntz&wUSy_L3 zG{93WJK+9!g83-VuZb9elX~&X6G8A5>y1-#Q6bNQODDJ2dD7HE%N3Q)e1? zu1R`J`9$6jRyRb}3@d_pnMf z2+-B3J>IZOQOP>j&*(A;U#|T6yTSZc6^?Z^>rI^zEE{jc57u#UV7lT1bv?J)%^nK5 z7JIVYY8$}}^S*@NW`V$+pdJJ6y%*_jiG}5xjUvL^0s9tOV#pcLE{!5#_b3{{2DwYl zvihc0uK~ClKiu~gaukkw^rippB(-Oa>I_z~!$R4C*5XoBw+Tn%Abf59ST=l1(CFnW z(efPWc~+@n)K>_D)@RfefTVI;Vw6PJ0MJJr;*HyzBPl+cMxB5!qLJM_8`odZVqJu1?u#Uem8 zI`SD1T-V4fNJ52?Ay*ktzD*BL`=#heU(heHj$m3^eFjc8vv^`1Ple1E`k z@ciQ)ZXgapwp_t-gtc;g^6~MpJcMcb_SYv`@MnxNV`39$j=G&q_pT4@gKV(vx4Fl6 zt}E<1wDrnnC8nw!K=kzW!2iDj$5%sqb!E{bfCf8lb~H?W*!B4AW@hHoQPJcQp40Y% zWZ~7wOk-twVD*jt8Nca15&I8hY|jF-n@(d$a?C^}?DgdSX3{-C;_S)$?piB+=yGZn zffOAQsxVL{*f9wBNwKe=?cC{#Y@V>qcBa@NdYDbht#x&K|`titv>^?+f-Z`YMvwh zi8bmV85(PF8-Vkt6RQ`oLHCg%YKP|yE*^ybl)^Q#>k-WFnYNyl+LiFDGeR~SBu^@m zcf7JwQd}7-6x+foKmEiOqAI|alyJx-2$$$r9UahAMiF!4#VAdGC09%`{+AMlZQ0W0&@__ILX6d$3O&*Wugok$v zjL$@oGkJkNT+SZ75_BN=<}35Bru7|5h}~3nrgEeEJ0res8B=@R?yu2>WKq!+kAr?y z4TdRNF$~%=Fb$w6c0T)xQrrY(PS|61V~=@FkAn-k&ocZF?{z@E%i}2L8UtRb0oelG z6tHB6$@9l!Kd##P%0z{O%-OUh2eXaFxofAN_OMYFTo!l~PB(qeBSuEX&`JrEEv3bTUFZAJlm`t{K0{@0zLm8DmTRP z3)$(X>72qmd_t6@GhcXk`b0rqa2QKX55qe- z=asdhVbhj}v#<2}J}_uOjZkY|jYhCjms$Zg8YXOo3Ypz{Y6BpYBk(NE$A6Zha}Cxs zpLbi^~+U5TGxa=jIz{u|#xQf_RS+_s3Y6?^{?J=Wmds>jdCcjw`xR>}3z@0^lwCLLELM-$4`MgTvK`12#P*}1 z)&Gwm*dWB^e~rXcR#t{KNzH=xC?Mp;5Z~xCnI>18_ZI{c5CS#R(P7a<97+l`+QMw+ zHP|ABpG^CnP)?N_2us2qXZjp?)wfH`4obKRJ_{7g94`lnxqfbaRp!`q6bXohg@p@f zwj5em_c&eDq6pMV%+7u@qTcjbyfIKwJqNleZGuL%u-Ta%tOi!Z7 zKFX;rU8#-BpsJ-$9eij*0WD*eveNu`YkA z%Oo`p5CWtnzf_Kb3`k5pbBufYt)9MnD&RH^k)S}m2G)-31gt8^Ao39)bG3pVf7{+3pr8KA z!0#HY|32WeO4D$a%6aWXS;#28)&XiM;C#EYS0W&A@v-(&Go?V0EY?^Gsi)tMpJ?j! z@taBzo6mSvNCplfIHq9%4)PP+iG7c%ZaBJtErj4AdCSb=Xa)^Hi8KC_2&IzAB6pgu+35 z&%sQyk4&#bJ4aX)PL}KKU$50uASKSU1ALmrD$i&7 zKXGDxU}ASlL=Eo`{a$oxJ7KzQB;0#atKMq28uu(vLhL^X7tq633ey%8P&3rf>mxnM z^ex{0FfHwBRG9cb6+R6swM`W+AFHC@0`E_tDC4Q zO9i)z&l*zN#D&4u0KecELD7R&b-7`I5(zs0s-53RK!qfBe*Pq7sJ3}}U7ZGe>uYc# z^Uc|KCOK08-pl?-8dOA7?rM$<|ZO6`$83W#2_?t)I>dHTy8eq-h*jv^m zr?s}(H|ptahj!S7N%!R{eFh|!0uFos?_&zZtD~bEKPeLKJ+9~Z=NRe3=0{2C8D=RV zBVcp8QK1FtyLIg}KF2zalH*xXKen0&eqLMyRf^H&L4N}34TcAVF+N;bD*?ZqlXrf@ z))N3}m~h+P1I-Y+E@iKNh6wQu&_6WYJouK_roj!}zymtx%)x&2T>^afyzlbHN7GxcmN0u+RjFFau~%<*M7JCdU5H(D}{< zsW`VA0`*@TkNy-FbM~+Z_3bUR+@2&`JBkHy(68aT^* zL^)DjUS1t%?bHRe3kvRU{r+Gx=iT&dH}UQ=T#QCCcW2`bh}*Yp2-onX+BHjxp7*GV zB#6-K_7lz5tz0VKTNzy00^KOZ=u=X52u2<&x9xei`MRw4nV@#8)*o4By#NbKVi%5D zp(ks!A~rBjh_!HpBIhM-ZRLC?Ri3netc%{I3jPT4)}3eD6{&bdX0~We|~vq9Ei4#BT~ zj;rGI^>o;48+}y%Ko=CxczZfkmQ zIjOeo$?_W~sc+Q5A7Aob^hGgaT>FQdMh~PgZqYo1N^(x6iNx)+hlaMFo)Oi~wYAN! zhIv(DONVIwmJY?n4V-g9EEyuh=**at7Up!>g5fT;GqYiSmE?~cq;5uc1xRylEW15^ z@ABSrC~GC#^X|S}-wK}WX`aOUMj!rrKSkS~H1%cI+hZ9S5xm?*vE`$truOL4leBh) zpLro*0KqXgOZx^BZ(HE^`UcZ)troSz+84T5mI(hJmf)ECc*W{%gu)gQU4U;d2X`e9 zK6+3e9U0oe5GH+Fl5nZTSaC6aLTag*>!qh}?@8wbC~|Xa;rwe;Q9s4O>;s)bh}lMpdGWVc#?*D+z{teqjma%ARA{yI1o08oWxfO@KBSNiV2 zps<1&yPC+RS0@gZy4^BobP69><}2!K3wjFd3p%gb4pn)%gk|OfQ=@R8CxHv&Sxg~n z{}J05E)QYNn#xw$tWW(-JTRqoEZb{Xogw)~3@Mo7%1HVMmr%&|`89|oxn`x(qzbl` z)*CV)hMfu-4dZx~Llk4I7RgRkJ(25Tnrh7p6tJd~tUT)c)Xe}f41NFJ%^h+o*ig z&$_u3PVGKtx68kkjHEa~@Zp9Ob1M~GgCeKq>t;W`HvHmFd-2jsaS<-@E3W*UWHTYz zb;^T(Jx6u%8XLybzcqI#hc3Nr8-P0`^f^lnC~Gdu(~HnkZfyM|L*EgpSGZ;OPSorg zoGqt;_>Ffyr$dMRAb+84(u3*@B`hMu!|E^vwld<;&=3hJH8wXeq@s-JwIQ)Pfsb#& za{n9`J))kdb}U>kOr*r(7OT>jk#XaNnl< zMT7z~gtYfsMFG*9(MrcNUb9FN2Ar449Sp)B#2NNm#~3Q--B46nJ8YkchaW5j?3u6X z)BvBauFh4pe|}hZn1XQYsb3w!&Gk`29Rf2h$r`_$W+i@QrYLN8R)t=8@I+b%xs&8} zrj)O0-dH<(;FTlke*fo^is_e14?vA1d2sh5~=T%6iaf$6tD#e*{9FIS}{yzal^CT52MgQ+(b=XJpO@mAOEkEP9u) z-Q1|#+dtm2xk;uS)A>CoJyks)aE*RwFzoB8*PtXi7FhDNSo!CvPKvGpa{e_@6Botc zDDu1g#`jWTCtm2P&iToXt{iR@wQ_W;RXq1zG3F_Qa`c`dL~5{jZxA1j zajZy_6tU3=c3(JPz4@d&Li39p48)xm@ti8Sy&ZW9`>>hPXV~?h(3gfAM&oQQ8&gC# zcoGPbK4LFY48eutF^kSu5ZQ;U;&VCs$Xe(5*v`4oj%&7=9LSY^>=`!sTR6)AN$SP6 zF9;W_#Q0aoM9L~XJ7v78+tO;3)fN|A@#Ac_GIF;N!DS`7{k4UM@RI#OesD^W>BklN zDl?vH9+{MD0s;cGLApE#dZyrT-{rB85%a0cCIVr-8&Yy_te;H9Q*VC32<1(>a_z@U zi}}ef`h2Zod;e1qO@Kv(soauYFyo@?$OpF)= zoB1E#rh*dmTDWy=Z%2XZT}$Y2ut-6dl$o#fY4d7M^Ler*rM!Ef;NGX7flm?c|1k9n zn6-2~UcD%BIO4!nw0_=|{b7Wpr-FZ`Xz`yuPMd`-u}OLUy$rWV(UG0y5z9g{`-SgL zU4_NduOp5QjP1aV}9fcWkE@MObN7zV%9IEJfF$3;R*dAW;3z`PI*q*ug z4hDAFiqz9Bk-^K^+Ih`^C5HX@{}^w28c<|S;K9lEj9K3U&9tkglPfDL)=dez->Dwx zwqz>wawNHaBXX))>@1Xv>P=zt`xUs*dFHhyZ?O*}p`ttOyFzZY?o`i;m$Op?pT1>m5>TJC}9-@%3~6G z;LsKYGN&}JAGow-I~3h8i}JM}@qa&--Igdcq4jp1d7Y-?li0V zGWTLsbCSq6$FW_o`5$Bde@_iL^c~p)50$Tl!fa@qq|iBFdiLd{JjX_qXA#zv-aQG7 zrQt6@C&C{!KKl+4$bqE$x@}!4gWby^jmq6ks^yGV7Ir4ybKT~;sGuW~^y;oO&vfsotSt?L+* zY$5iS=(ohw>g5w-bjhm`CwpD?75K~r58f%JS=ODs|Kx4sMO^}qjyS`T)} zinb0va;|t{i=%Ui|iX#k0Ob*`VGJAgbi-1#1ap)Ghl}O4f zBBbY3CR8P0Ki(*#Wigz?><*<>B{UEWq3C#^Y%b>o63&2*A_3~bd~Gcg9<7KoB12&A z9+s3b_dzTgCRAff!bA`W?DYG}+<HkOLK&I$Xhz29+> z6Xxo2y_5rzKqNgGd?e6hYCZ&RKN{rT%aUK2p@Nvet*rL1?o#vXH%6Q{#uOK>R8w!Grk%M?p?$348(*uu#KmXP=D~X z@odm^1&LOG><_S%x`4I^3}3xsMlJYKErF!(P$&Q?qCGVEbo}e{G8^~<5-Pb5O|2Jh zL8sYXVsp!tkW_#Tv}8dykV9pK$(`UNgDoDeUC7olpNon}WG);Swd&?F3yQ8ED}Ub*u>=78Qup!ewVhPp(~-{N|S9Ki}&J80?I zv4v$og%N<2EDsl8l18fhC&^Ux_h*GZViTT?urwJ>Gi=p(svzgkZZh5zY8Q4CkbxL` z=U}yK>S8gf4Fm2~Q?@xRtw=7eb&8C@NNZcW;KQ}A1^ILIS=xByd&Pn;b!{poS2k=W zS_6FMUdPwA2;GQP50K>F9Q;~VGOnD{nBN(v?paT)D>ID`x^>)#@lCBSu2NnA_(Ab1}G- zSp~svcjN}V_ z%^F#Mv{+fd&eCHFOLZZWL;uLiu-!o;9ntz!3r^- z^YY^xFa?$Om4n`}aolEK{*w=|h%~TX2=+y04B@wci83oDN2uydo%%o%eS}$JN(T>FdadS30B#*X9(^nQqa<>(;?*+VI8N?$=!fDWZ~PM0^{X zxizF2!VfiS&(8in|J&g>7`e8hLt01bHg{ifis}hfr=bp?DKn8}UK#cgL0ctyCN=4f zjuZSGmci3#3CHJ5gv+EPc9#wvo<#^O6hrK4uvJ}zE1<9mQf6DFlP_SQ1KASyuDlEv z5{b6agERJqvnbNf*PYLwH&wOj=hYB!(B&NkHI4nc)m5@A(KwJL#wYOcjucj=3qz67 z@LMojI{bJ25;>p0zfpM3BNLw4#*$y3DIXF{u+ZN?HBWjPIjp>LfN)*V(&%fw)~vk+ zFah5jPX+=};K?v^Xj!bCoqyal{<=qjP4*Y@&DF^g^|K}A;8CPQ2bXRh11YrpWeaa1 z;Inn55Lf0P0(s?c+_T?Gnwq4%J+AJPo)(j<_kSy83woNL6rmNcpI2@5l0UqpePP!z z+&%2ENT#OM^A-7PUwAm-3ujYqLI1?>f3Ce%MmLn0xd%+!U`=?YV8e4K7BZ+#XG%fEAN*L zW6rf0=FlQ8ke8IFd=x-Kl`#XMzu~GpS`ZFXV7kE(UR&&kgJZL_Yr4Y?bwIRuidE6- zrM{9U&ARqDNstQ10cW8*#jSSUk#n9@Dbv7OCUY%BsLJvK(CPqIu;RFPQ%Pf{Yl$(^ zZBq>Vh6^%G9P=-7T_vCyt_?d91d~3y+RFv`y`xsiT$e9~Br30gUe@1+SPncBqp@P* zzu+xUn++X;r%kY0t8smQKp`fS%IR#__Z-)t{(}(A)@|uC*Ita;g}IWi=nm=1g=yQG zb(QID$*?!;BPC8kspTC<*hX;`u-%yluab*2@i@v&s06$4b`<#OiB3%JlSQg#5k)F( ze)JK`|48llO--?7WTSh~c7Ev4b5<}G)NI_c2ekP=nQVu!7Q#852Cz={6xM4`4+NuM2wcaLB(Ppu{LC59o&Ody!66*N!ob@bL^11p_-Or+U!q zBfcsYu1w!y&8t(W$VjW@F68$5cli0A2^k7s^;i#AnrzR68uW7;MPb#OKUBmHj@r_N|Z2P;a7Y~FAmBNWOT*> zbysi^@X)(NLP9ZD7~HcAlO0d!s$z~cnrVjRCu6vmQ>kBbw(P;?KF*=WsPIU;Nq8R2 z5BZ-PJOTf;&4$FC4XQA_8%8z9^70N|&4ltDDTu6NjLyO;F3~*dj>~B-AqmrmnqccI zoE*#*zsTPXx-;Z!QO>Eep7BFihk2pSbowmSule2QrfP9K z5(1VvA<%)D-|OWDFZlBUC_9?I*4ChMn`>AL(vtB@)px|G`+ZYNPc33v)*+dYhy3j7 zPS0EDJgUyt!ul4{DBe+v>#*K`EtdriEPup4UrWRjl*Z4af6CdkhynChdz8tlSaps@r|T3aSO?$oc0FtnG zjaghfL?)}~%fwO>-vXW(>~dnT+adSDUhVhF;xZw9eXVITRkdVskmQOZyv_uC$8`CDArwu&9e^OmHaG9X!xKLodC%8m5 zHVyqQ4Yf z_=<5;^58r=L*DsEjW-1g;J-&${zF1`;B#j&IIEM6Vfpt{1Rz%*lkZt@?+4VIzQ%6; ze?M!g7;=D&He+{r4AoeSfUS10CV04X(svAk8C-6^p3#YEKw7HoONl}DcrPVx)k|~F z3Eqc^IANnuQI6}ef0@D{B?Rg#=Ez&!PwBvc%j84pIpvFvuAGe zJrY@;g1MfWl6ct~6D-!rvu}fYPI`XUDu{vC>hJ(d^=X+hvj&8NA@1NsJs9x1I^JGS zsLJ|_GX?7VJX#*mBwE28qBXA=vZ(#~1tX;XXGXV=_nDU1l~8^}63)|TVzdm^`|pXN+mDB!geo8qthz`$)kpWZ?9;TVW!jrj3mPzyP4RqA{D zp>3gtWjP!ay_#q2YwD%MDHX?m<-w>R{A#HO>OW@fg!> zGg5KSc6~~$a5Du5uD)WjoXrD)889W;4P=cb9jQ|9TML09#@?(Mux7`DIubdRVV#N_ zEynp*?+otW=S&;G&y|XUIg%)Z?IuK&ZlxP}8{z+IbYJXLzBfG>DNAd>13ul4n9Fjk zTFWdCBr*J9K2-P9n8fQt7B9pLiNv)eT;qLrgUI?T>MHJFSJ&`M<*?}Mhscf)Jk%#s zo$hPbip|5{|3ilJtTu5eILO z^!C(c&EBIobU-AZp4x4$-+pq#P^VE|D|XRftv)9NqZx zyD{Ye$HW0O1q9-?xu<#JbHfg+PdC^gtV!CCmCy%wzMfVXJb_IA`Pufdw({;y)KPWQ zBd~gsA>cBTEveDw4QS2EV77#yaYT8ZUj*${$~oCyo0#kMpZH%rPY&XrSxVvTmMLdC zWovsIxTyNs`qs+_6vB4eE5-?-s6x&kbN)ZBh{sQIj%tD%+Jj}ltU&Ya#_`+X;|+;F zXCK|rXK&k_V&=7gnnr-(nm2~t zNV9y^eAPo!w|**I;B(v(HoPs)5pnZq~>-i)bNs;M>5VG+1wa|&NpiPMTUnR3WOXoMC?7ne7 z^WNL;E&>Q`oTMK$o&uFZ#hIhO8$dasCP?r%l#n8=h?IbuuX?N< zRntLmiW_a3UUUHxmsOCQAw7t&VrPy{Tj9|st|!Aw2BjP6uNknv6$pV>(CK`rNkXYm z^N!l2^y-{HaDqR*6Y#W*C3qxUa%(Qai4Br*Y``{OrITqSuOvILkMbNLqP*9KR1n)3 zOO>_$%%H$pP*PXO=eKd~FH%SkiE*o%(5PcWw`wjldk3bz2eQ-=+@I#+>sHfnoHSD? zpJEr?#3QH9^eCbg%aRzk52Sl>zdlvw5X#hBs5h3dwP^3Mb&o*#n4r6hHqSliO#-_@ z#f@?5YmXmCq$U75!b3fPh+jE-HV(&2*BIqOTl0+v5L6E=mY)@It6{gXmIJtR^;xYN z38E&dK+1DPv=*n~x+09NZGdi2T!1B9JDlw~qPK`sMS|k`QaoIjsw|D`VUk4t`y_`i z88>Vp%5q5$U-lTNAsj3r-hbYrod>4AZM)KTj9sf)2`+UCIytx(1H{Z0(B=)RFLecU zLI{!FY{|p!g@YPOw*eD=Zu!O}T!At!_Cps21*WI@DkwT1pzoh@Ml>v|$-`VNmn^u4 zYCSeC8S$=BacaHs5i@ARVjn2P{AN?}!dn$L@uEH=WLwO=PC4y`W{C3ny4R1(XqH3%sgkEe$i3k%sMxXNtk{6gX!}(xah7H zhNLnMoZh3sb>RwrclIuvE9Ui+tL=}k7X_OU--NEW_#FtZ-pzdwl2jiBXVM@ha|V&rzHX`Dq*=c>6rK_ZDB%^ zb?!i~QqLirU0DatZ;}|B|I1Ld;9cS3fi9#)IL%8+dK=vcp+iSIQU_b{wgb&i_;O+` zxrLYJ)$Q+ z^0*o0X}@YUP2-PA4*BKv;O?Nr!aefJg!8eue2bJlr3Jc~4WjvYdzw5g(lX)R>52uJ z?M?sOC+>{zE-Wv2H|6%qbMm3S4@o!uYk%VzM7E0r4{)Pd?5ftH-JlLxX3}F<%m-r9 z2G8vRhPyO`0aSP{hs!H7@-1=u=Y{4?4GbObo(QGIRIJr_>ui{v{$*mFPyt~57*_&S0gB0GR`Z{`Ob)r zt!k6$D%(NXirvop))d!e`}f?`9z33$ezx`LY+z2A#}em;U@O3uSh#Fl;}MbF>Rd{H z(=CbqTZyasEw?8NXV2h0nx$8$#@%EyfBrVy_+Do8phz5xjjsY3`Duea-YQGWUI>94_(R5dYpSrb*bhLUt@5K4PzVaKtMSq@Eox(mu8_*0iPi%$tg! zNbpaFk*Cd_OWO6JJ@PtPQ%k?KhyS28L%;DApD2C|CAn!aiY8WU)_q! z8Y8x}4J1pK8*>ep5R_{aGe3Ew#5#NzYE)&mY3DmHS2Tx+t@yl>nN<2XqqF1yeRl*Tzfw{RUvJ#qjyMk8wP=OmsL~n!MRs zXjQc1%$_fcmu-V{SE>PH=;+K`;Cc#98ve?U`PfB$@fS{DlGc$3i!2a@YBhPc}Id-AY7Hd+Heziw^RRCCp>nqGd>_ z^BwAb_KA5lN6Y(R&$2?GO-ixagrn#ZgefZKCU%0&n6GO7vk|_>p_K%~O9V`Q+FeI^ zmS2jNJfK^uY@zqtle3w#9&gYh@f8*%NYeJTMXa_C(7V3CeYoP4J#6>Ix^!SCtxjg5 z@ULM_3KqzINi!OmMKu>1fg{mR==vfmElc7<4DlQb`4@>VRiDphR2a*PqZK~E_z%+7 z*DV97d{L)aql}L*4fcY};i#l3hhe=ac(wQaOE><7`fvE|Iv>oE*czKS+3HbWyfPK< z^3P~saq93->|(7^qitmfv_JaY13T?Erl0!WtU%$j{g-LKs-zxW!NS=PbQ%0HN*z8I zXXN#maA*0}dgE`rnNML+jfh$N)-fUpFEj6NDpGj;?(AOjQ{_2lKl(P7ZB5Fmsb-cuU9C?&6=#hs>Cdv*yKUTw{Dj0gCk|7qcwJ1+MXfpcyRkKUOS8jv@$6M zvY}J45R@D>lZseaA!!fr@Gj2m*pcb3s)mE8mPCnSR-;jrn z&Mpi{WB6Kr=`>3mZmfUw8Jhh)s*l@O7G~ZA4jZjt2k^6fak;@)RgRD=Ia2eDMSP>_ zINK`~r}0N-e+`KZMI0Z`m0-b>P3OhPJS~2y$kFT&C%M+1guiBgw1N}%ek*?)IXNld z%*Vs5R?^dx`TWUn(la=!R`Cc(VGCvlZJOc5Ghq8=8aN&Cqx73TlVCXe<1@c+9&iMvXSz>l%uou)atfdq3f#Z5FhLZLIICT!mpQpsh6S^Z){b zA6Dhp5xwbmQxF~CeDgU`gZGyWz?^>-AsNFofGu~5uWvG0DkU6X9<|sLWTLs7zIBk$1!~%(4la}26= z^Fttvn@On}Dhs6Y$>w=;tjt}yKj@=XG zj*T4_inCod^1$?4_(|cNDXm=fB7cdRKYuPUf0}l{(3y_x>$GzDfn!!rf=o+?d6uNdRU&g%k9XF;10u)&~|y;N+1!BwIMBR)Au2P9Z&JezqY!~ce)`h zbz!^l;*)P|RmpbARy)pTPvj-QE&6Fuia*8?cj>U#~}97EB#VzzL)&I=8UwVS31n(A)6Ev^<8-gDzh-tUS$k;Iqc< zehSHamY3%$V(?HSj+$>~@7(3M*0S1%o0}}%P!jG`<0B*`^gAC$w%X3O6$81#s?#>Nh31?8R%lN`-rdO6er_2C@*^7ezw$aUKg+)s6 zkf+=33<&F>RV0nvETD|0{3!A!R%3!fP=m=i%7)^_swVH4%m*bbt)L#X!y;x^Z1d%$o@D-SRx zRfoHfO*;skz2-%0`1uIiG;)kBk^;6@s8ctR8&vrGwM~{ zra)bJ_U&6j0^KQ>y3*_HKEF>_qXL-%cRReVueslRC)jba-MrI=PTc~sho(>c{9vQJ zI%Uof(J~?U=ZjYv0c^?GL)#d-5i`xFUnn&_9(P0cq z{yrS%qMJ(|Afz`ge5d-KA$<#!*L!?+rsl;ABKXD-z%=gU%SC-DEYhn&&i*se20Lw*MoP%n4ukh zi9Us#yb_)nh(hT zHVA-PyYxKfM6c_bS2=FpYd;&U(aL0`ccpb}!UQl2S>LY<=iufa5vaCpTRq2MQ@W);57bg-@tMdpm<&vn zk?XgTi9dwb_c~aXCh1cGqtir@%jYLOj6S57A^pA2XkwvOUm-z5fILR9C@;-39ee*5`DCAnY&;jwO{?@%u^c~-#aj=tS!wR}5drAHu zTkjoC^&kF^+Y~uQ8QFvi9Z@!itV%{Idkd9tkj=3YB~;3ul~u;EkG=Pfka^4_;~e|o z7~kjV{rP;Z>vvth>pGWzT#nc4x$gUZjQiOXIX-7{XYplgminN^F}L4(v32@JyN1Tp->H`>4#>=T%_S~jVPH$%u zY@@y;<}Njy?iICIkv1nweHagSlZjU0G3)D!*&S;*{T+aHPw#=MverL1WKO5P24g*0 z)eSs)L^G&iS^*Y1JbK|v#{Xy7-_lr3Ta8R=)F1%sZL0$Py;&&4$ z7__w;DP&kIEKti>aI!b~zW)sd84L%i=I_IZS=c>Cu|1 zd9M7}vT&L=e}pn~4yV>r=LskB3nQegjv?=xQY$_{?)XfhT(M!S7Bqz;oThmsIS;-@ z#Y#I(f{UC(*g9DNRGQO%4WQ%~5vt%6>caQiHN9OOY>^W+}H>NAt$Bb-Hd%Wx$bF(Ar%RoVjcZT>}R9M)+R;am1>BC77D&H}SllEIgSWKZ} zix23w8Z@58|ee+HUMbj`wzW7sn}a>`E$Sw9WloFKNR zagQrvO}uH~dKtp@37K7PoG zy?}b~$dJh(iM4Rt1Vga1xY5lT-uOng=_Cpspm47PW7bwpOe)* zr1G%O;PniK@^NhNgDAmE4E)~(9!HH{X;eKgZD67BjPZL^_-g|#g`lmBR@%8ft$%gP zeL)6Vc$}+EVfi^|5BXg4@iLF^T(1icVZ5XHldf4Hpw}3e_nFF~f|c_VlV6tHlX;ce zpi^Xp9HF+Dv<>H)e(bWefuS55E~;C7<6Au2f@zbRReF##IW{od9>#Ig?Bxl@D9F9; zn~qvz_WIN2RbO;4^&6jtUYPx#>&zBLwv268mLCh`Ym2rYimxCWDi`OIw5LJT@Up!~ zyP1BxDBSePkssDi?I_=TneQDX2cP47tfxTk9I&=-ibJ?EpV_q@ey=N13nE^>>~XfGhn5jfkW96ZSZnMW|6bIb0(Dl7i^X zcQfm6sde+G6&j1R{m_n{R4>v&5MQFOA&suNMJ6sbS1%6)mGA&<6R0u$JK2iw#0%s> z8^Dw2-Z2O5M*&3;A?x zUa?$GXo(3vzuMRsX8enBQ2d({U64`TuhrOnb3w9{!$qU)YXsJY19h5D_D))HZL&eE zB*Tmer6=IRYCd=br40Vc1h7sEsfn+>5(xQ&v*QVJX}KWXi!*Q{?N=rlW}+zxUsIU5 z+&csvsrOgk)c~c1H6RkCUykM46xeR#2Ftf2P?BrE~^!o?_HujxFg0JJkcDZ8+$=RZH zcnx(O4JOHBHdYt)*5aZ-JpsSEVObY~6#KoMcoD63Af@GLW;r8p@i~us$`+IF$=+CK z+ogwfE%fpfT9RY>^&JJ(dS45S-m;?wC!`$jCYLL)puMJCHR1PknbAgp#p3QRAsinu z+Ch?d&Y#ddeqQ#qC-Ls)xE~}r3Zi3WF|8@K&Sbl>_@{u`h<;sE)x=7kj8Z+tBi zN7X7*lrPLYqoA;f=ATR5<9>3Yo^g}r^Yuo?QX2T{EA9o1nL?wCRw!TQl&Dvy>1XTU zCZesT6aR|JH&~_TlU9eRyY(AW1qkj}ut2Ugj2QZ)mIPNd<9quO8kHu{{E3XSN5tTn zLIiT1rQ~>+n~DeB8h0YoKh^P*ukjp0bLI-5y{cTod1#OS{vg3voZ~tA^!SIV6gi#I z(H18s@wR$?3mxWcH~tnsRe{XBit_u2cL$+#9w`D?dom=clV|hkO^Jq~%5fg`C#L z2I_Y{hI6?$HV~p*s$oaDf6N97tGB2s$CL=(Thk&&^?p7gGI^Xm4pl6hcgRwF#%XR* z$PCpviSs?ax)rWM&7Z`)k$S?g{`(@jSF591$L1Pz)l6sg2T8b~-BA3LLxP5tRafr#lY`0YRxby|AG6>-B(TRzhjf2r0n9{U3hf+zoAYLW zC^h6l)RlIh4|Bo6)K6w?|1QrlY!&=N$;)~5evoLs=I=+o7O-&TX=ieNyS54{;(CUN z$hEQCmD8)9+gi`8Ptw8~_u>|WEq(r6z+=bAYnM1!Uuo?zplM#14OI1)?3!@W^{(2P zzLvZ5rDDNmz|9=I$D+3RT{VH(4v79|$-xPr?@;_`H%aqGBfVHit|#qFGEjw=zT|W# zYzd*2x|7y=r^gh_rnrBf@((sr9ETB4cHU5mT6F~skB~dU!m8g?$!#W89K)0AcFHG; z5hI=6|EkcP<-e*DaD3dI63Eua`{W4_`0z$jNP$Q;>PiQNnw^&lcKlq)|K{ZQ_-{&j z&y@A-*~x}W3(i7eIa=muWlASPn=gTa9!m+44UG8PTW_b$hsI?_7ByFdusaeTFe7Sbb`yfr~aAle+I;sJ+ z6ldyYksE#zK(Ud+)7f|C-$+XRTB><)fE54phfhu5{g49I4L%5rS^;B-?Zho%)G<4o zg}>}($z|GUS3cmg;w>gJ=|MSA)a){{wO%^VAK$~l)1|NrX*g7d%N~85TBI&>x9AL) zcqTA4%;ZDxS+<6GyEQ~TlEtX_bK(L-gHm`H&ilC2r+SPUo4?SKunZt7VnoS|hKclo z1fWQ%UAP9sOvN}V63ViG~99rt}cF)}5QuA8JFrs@4eHK^slZM9DZchs->6h~W~RR*5n&5|1m3&pIsG(->YqJ31>fHeoy^`aQ9w6m4polMHMu9Dpl}0@h<2E3Vt5uK}ooxWH+vIPt z01W57CP`{m_v}`My^%+cN@$#CLLlZrU{TSa>V#T)pnoI+-7S+ZY7pe$0t)p9?0aoghF z=Z$av82^ka|H%PaOp2#dj{a{3^rAbcoENL+SkA(r{@^BSx?xrXx9_IHrmM;w^R4`n z$8Sl5V^}TyZ^GDA0uKe}++1q6G*$w!E_8QcTdmC2NhBDWQG2s`v8IyCH&&KXs6QXB zS)R$c)M3nan#SA^{a)CEg&0Ww=Ez;Yrnu85KpfS{4S>V-y~G!yWKV>7UClkdck6*z z&T;Mvr3@LJi1euSYZjY9vw`Bz{M`$$O%D}dl^k1rYXyQ%RWaNiPc0tcs>Up;mQqpV z?p%9omf>y;`bK?>zO_giNy`IJ(a^OSXa&Wxljrm{WYbODH7(e9S+F5~IE7J)f5BcD zN77O4Kk+1qmGDcm#71IndwQ^KP}onw&Ds+D;cMkBUwJ5 zjP^)^M}p5F1-o2``x!g3zAFz<&&ooBo1^)1!?EZ33gW{{U`1KJJHLV;2Wi<&3Xmzh)v%kM-#3 z`gpPR4JE)ghlBU9Yw;M(H?9i6PfMewhH;+sNc9gy2U0kzvV`-!athSVm34)T4KS~+ zHAih8VoQqL)MduRW89RYj4rXE`JYDg-@81GSFWY|b9}gyTIu;_sp8md0U5UqoIlN% z$1UE!$x6-7n#r0Hvn*{d*wm6c>X0T(6l`lLVrzeoI%890ou>}AoV!1F6}qI?AI?VB zZH09DcsY0xHY(*;OHTGDYf`;tWJLv*D4(6`LEp6KfAasBZ-@{+Yo~2Nw#%48ueQ|B z9I@k=W+o99M%4~!K0>0B?Q&yfsac~}uX|VT&weK zSvz;8e00e%1+~^u+uBlpTAct8YyG#htQtwdxqkP#LT8L&=4=b(6ygy|Nzh4CkQKew z;n&X?=TurdY}6QCJuDPA@W7Gd@R8y6BK}V8eObtOcx`o3zL>e9MF-%dMu?100P5%C ze{>R&QM%3;L5YGqSblSXgT+llG|@;+yuC{v>$_DaM+0|(#00vrp3cQ!lXFs8)Rtv2 zX=^&C+wqep7TwgZIp4a)+Qqy13lc6mdI=tSE{*$+hLtRgOrI$K*;9bbSFF{6Y-RzV zmo6#wdfH&k{r9O>&iFtA{d_6JuWjPCihq%h;nm4{$GRtOMX8>ik7m4E_V97Le}}WH zJ_=|~4E*onA7MQfp3Ee@?T)P7C@gykAu%!j=?LoFia`66L8K zsK@>dJQ3*)MPREiQ=_IXTpO8{;M^mA^w_~E(0%at+5Zio9J9<$ujKSpmAk4~zua0r zgR)4$eN-}ZXQw_^W$fkbVJQY>dA6HV7@l5PH%6_5R@zA%7}x#3*LnirOhd|V5=5!f zzfUe}u*|qYrn0G{`&x5~%hxo3+dp(s^J++|JN}uow)D-EwL8bc>2cM6kJP6E=os0f zhXuKkq;U$eSkyvui8P|l(Cct1zS49xyZ`sv{yggqvz6n^xzTo>-Vu9_Up#4STHT&Zq;ltTfw8{NuPnOGur*baT4YSn zd9}S598kB(Jzf*DmRgc;;Px-{|Dz`h0qBprF3TlM#z;E4%_(XB-u95Ab!7cdY0E^$ z&<(M@eE`*Ya=6sGGN5lAgG28X$4jJ28tGaZ{~)wxy<~HmFPw9}a6dT4NVnYhS4`ls zEj|_JpEJBXxD0mvP_afK5dn6h$@lk~kv46(VH|$v$a_mM!_Xz1#*nCBB`#?b@DxRY z=1ZwQWJVPYglU`{#S*(i%AC~1vu`6(_kt=rekGE0+=)g%)oMOEIo=tlxgb4-4A8i+ zoj0<>TZnzA$+c7nu-b#4BY2w4u2|t306XQJ7DBsm&*Lekm>6>Ban1xWFwT4W^q)S7<@uSlK2yV3+)M+Rp z=;Ed_@MwsGF_)V(q|mr^$74;-q~7o7EcE207I$jlFG+3o54Zrc_d**ikkQv)0`1Q+ zj9@Gg*OJUV{|H71oZI|WQzA(#BTEEX!KD#rJ_+Qf`a5>K@>?>qhR2cdHv+8`3VNPTjlg@TRMaoX&i?iKf-SA)zvoRtR zulYe1a4o@D!A+gP@^a_fJN1v4cIpU@GhXM}1AtDIxDB-ckX-)#XRV~RRjQZy@zGcV z7P0r!@?KE z6MVQ&x#(UwASSE9tSX?6+Sx7L`))fQZZBE0BO!qYEzaXe>#YH<8QUy1@#2?{)0G0I zIsnFngv`dCftAlmaiEBwV$M&BBkj@LTN{J=i{7I4Kid6^1+(i%Q=%@PMR#)loa&O{- z2GBxm%N?LYRSBI9dh?`lcbCTiANq{eKaciA)!Y|2Z?HgNbO3;D&ei5%)S*k&QryON z1gsY*m_MKV(t?I%&1gh(vUi^jhATZrVt?D{_4`bZlBVSdn`UY#JZ4TTLzc>&^gx%O^%SAA#QladoG2r z1Px^0-dPjJ)V9fED7~D2eZQA^jLKj1>#ivC-CLd7oNG~4La>*lSVoI_5woUFNgvJz zKR(CsZ0EW)zkW>$96Wz%iCWlgUG-%67b!I-1KWcXnVXu^$GpnU020yd8=zM1IXoPH z{^vEWHmH|K8Fn9%z8+Z!2r5oV=SklQy>h4kx`r>nN#db(rXK6)!SRC;JxjysZ$|_1@`|hNN#m2{auwY$H=F#$ji2Q!q&h4g=QY*6)Q@iW*HVgHYW5s5%1gN&oKKM%Y0?MpmOH? z;idz?<@v5&wre}LwgEH(@s*DsEw{d9o?aRHrpnV8N#SrrA@p5e6z!1e5hs7LJKS<= z5mZwIPJy|)lcsJR*cAAqU`o67@-Yi%kY)xi0nVDc-eKB9lyJDtq%6k0X!r9!x1!2_I z(65h1HBK|qH&)`ZA0#pr2JZi<@D_8u(6-PHv3j#6GuHUDSrr2|>4h;PgWFbT_V=gU z3#(Uuzz6<3&q+<;$#BkI4y%CIxi~tydylzJS0a|vqJ%HwZ(&`Yb6aXtt6l*6Dp!#- zFjk)__zk}m3p{Y2TI4HhQPobrJhbxF-(PyV8VkkmY<Nqk$w2cM+GuA6`KoO)% z6SmN7*3=mJx7IGz|MZ{(RRSX%msi0+NSX8aYk8KGTDvm0lB1R=Gk6oF zENqbBY~&X1ghch3fN9}L95TYvf2(ayx?*Z_HC1k{$ahS4iKyDrQD%XkJduPm9)8s1?lKKpNGf@MX(y9Cai8pu&(><~&sXD=YtWt0lc-xp8O87`m^q1(4fC+j zuuCFx?%#}KCYT!hn%2|2=ihz^%DZ1Mm-0s%z(0yI-$qUk$7<{NmKg9nPl4V#bf5GB7ynYYT1yac99>b!` zbe;JrJ3%Lw0ein0(i>s9J3|ix73d;ZgW^dVOy^U+r^ASutRXRzeHBciGG^bGxPh%Z zp|9LG*A*yisM)A2;+QKkt@A6H@xmczyd?Z;KcY@cVKW-b=UUGK6bz5i&r$Sl#N?>u zcE|pld|`vvY=GBzI7$GBp1 z$_7eWnVA=@!8d7T%m9NFCnc9h7O!9t&DqZVogdMlF6m|Z#JKdE_!K~fj* zFES7O-G@Ln^3lb6_=-tqkxmB3sJ$yyNUuy()D+@Pow3romqVW9U*122tt_L@E8Iv&`O82 zC0bLj#spc~i&k14mQ1DMr&&e67}Z1fSse2#q^CU{o%cUgOnnl^5fppu%|eVDi`|$T z1QJm*M;Xz4uU)88E}Rp0$fjf2y2WR%iE!oJPM)_a*@S7YwQokz2{|B&R7pP@`e# zc04^kJhXaFN7H(|KkYTE$3szF`MyKl>!@CzRA*CyO2B*0x1U@b!rc{*zuf6m@y9-s zc&a(n1joD(&&UL*PHKpc7xjcH2P2ve%kWGGWW*W%K*3jD>-4*O>H+S>DQh5?=G_@j z{B%_fkH2`W=KF!|F8~`uvnEt5XdI?;4irK*~6cfr>(R?fMRU@wXf+59C zeYAI^pABZ{xwscB`k6JkI^jdA$$5GNoH%Me?8q06QGAPhl*#)NRqN;IUq3r<`>sy- zfKjVr?uPCUD)Q}X7zL{{{Z9>Q^4SLP8y}>$gTE$32hrvetFPx2Y)vNh_T_;Eu8&U6 z(sOtML`82_;P|NJ1Giq`r{K1oDJg<3qy$C6xHl1 z_Dp@c8jHV0dt(%p;eJ-~)b4v#hI?vuVQs?wmVmLJxR|34RtfHPvvu1eM1vzYJfjT%v*QmtS2mzl4qu=U%*vcwRvNux{s) zAO1opgjmeATu8RHwuV@Kd8f;^1qXsfhz!l1ceGE*jjjQJS94oL@b{7nLoDeiK7V2; zo%!_WHkE?W11acXezb1J90C79VH zV`RkmA7Y^jJG`ku=_Z@Me7bN~lcV8)~<1%~@#7vrY1P`!B3noS| zH!4p0eJ&TF7V1rOK*Ds&!VUy?SzVv8c{_-wo#v!*cD&$W<9V48q_VD05V@g+1BKsZ zqKemcUrTH32PbL&FKC3GMvO84(-KR>n~%0yMykx!WR`{-Tg*$)+i7<)e()QRg6d1`)5*b>;a3qYUq>hdPg z*nQ)2rS}}a*O^!))y?u$)*ue&ioCTY_1=(5`zk_R4g)`J%-1p!Tjcd8L8ViCV^W2s zG&h;60jf{O|B0c~yN$P-;l<~$!G)vFlb5X#jM&W<2*l=s3dXRUWnPC$RaP@autM5{%NjtT;J%kvgx0vR2()Z~nPHySFD6-g9B- zy*9sn%#qIa&c@D0Q*4x9xnN<8cZlnWdZSz5f|7FL%P7h{!K<8i#+a7i(6*k4g=?|( z7z-*9whz<;r0^@3n9+z;6_kY}8yEG_qD&mWVCOX-efqCyeuA^fyg8?ccaPJ=Fdt(2 zn8qdH0}e;=a=&hHJmnR?-t_djKpJb-KI@)7$cCT21eJNzG)&C6#*N|tpf(KraS}iJ zSL7LcV()wmzp%d`v>gBNoV2-UyTW6ng|zf@zm5E4c7rtxW{dUYJvd_?+MtRN7t0LWg%h_suPAUey9aKY9}hBo0B`Y!nji+f9HU1 z5RhVpV^^%r&^%unwG0ubn5P)^epo$4i@S8XWcc1~K;bCY&wcyiSdOJ-Wqf*E=-oBk z8FbIArr&%+z{tHovzHST8hPwqLXC{CBGlDxgnS{D6pfb>H*zA4PEaRt@0*@At#-1a z*TO0ylt~>WJholsQeuJ`CxDrK?bhh2OfeL%L6u(>XY+7b9%~9Vo#*E+*J9f03*reR z!n%bI9|+&kGpR!k3fy6wA0Yr9V*sMVd&i~za2cMuP>m(mTaFQ!1)?gL5zhMFYgdt3 z3e;P>20DATm(ua>-QQv3ZUZ@3*8roj&L0*7&rnlz#bPitc5SU%P^?=N@oc)sEWn#rRgW4Qz;DJP&h$#xNVv=sgrjSQR9=jlRlJzddQSCe&iaZaGE8JFDX(pfR5>8)70A12D56w?LrMa#a zN`*wzJ}dRSJbhAn+KHByPmm9++$;CRCij1W0CydufGm-p+-4Xc=W))bJKfal4oxCP zH&-&HXdi~zp1OlA>)%r^U_l;Z9%JE-ZEVm@&uK3gXgvW%I`ehByigdUZETPJpbePeLeZ}6Xg1FMpF&t8d;xfTrkYhIV8`ylp zai3OCcaBa)FKg&Iz~aq&&f5cFca0Z{XMU?ah{7XN7pWA>)>)yX`5;-mQewEmoDq$B zy`ZFXTK0zuA{sam^HXW>HMN%guL`4}z(oO`a~P&s(`J!(q!dRNxV=@4K#KR$k_eJr zjt6Ju!oGITX#QhT9dRZKiKgFdiVob;J5{l7lhIO>FBdEjhfABx-v&{c#bV3*rqP== zv-ic&bQj^0+4WQTiOg}enWmFA!CI3(L5qBC&hwy#Phwt*8Z&)`#vleF_^Ri(})yTg>p#^1m&2 zXYe+3+yC(na$#3ms0PCwI8}gAUm@UU2cmYy`cLb8YwAy{@6MaFmS5tFf-lM?J`ifG zYUj=FE$KrXpJC2KLhb!yB5#vdZ7G#AphvzC3?@8c_Tkz~6T!Jz{WJz4dDe{CQJgMs z37o@8NN$0^w{}3x!eMInYgB$xL66!%;~e+E_rkdaL;x*)y`IKes3&{B?{@A7suS(fd)A zTl3JusjU0tTsq)|`aJ#e{nE=Q)Bm3d5oJLm^0KYiuNXZ^K@|rsiCCU9u;G3$q?5A3 zjfYsHX0x)~`(=gKT^d}!T{({jay}bNk8z1l11pjO2kQe-N`EIDs2`>Sx~(}moFnAt zM{m96J+bG{(b?}K(=8_zB0L)MjT0ZKtv0E%END`%}XA6l#b1pTfd<_CQs^s~eQzsHWg>Dm|uk>N0}~EfT{I z%O34+tkKJD(@2lgrXmz)le>cxtg)qS#f|6FE|v>5?obNOAYq|j>CVspN>QkagPU@8Aw zT2kcaP%k7gbr(tdZ*jLuag(50Cpq03()<|CiX#ywRa;(5=i&WzkpI-X+BKZILA1g>dq9j-f1qOKKaGOOLk^2`(hdgX00-)M&oV?|Yygk0ZM>2n`lz+K?)9_dD= zSzI91VecJk`4Mv<$XCdI#i~b@YNz%ZbEWh|e<*9nw8m+R%BgO7YmRYK7puK+>MMQt zLaQH14B1g|*1UIPW7J1dTKz1t6a_04ah~x{@SCl-d93?G&lzk11u0BTaCwfpa?kR3 zp4Hm&^l_w$EQXZvQ?Y?jYT{T2ISlepyxH#Kb8-c`SfoFkZfAqY9-n76+EB+!1d1uY zcHa;X+dPZmuEE!Do)uI!D9tHNw?y(0rrlII`S}^|(|t8TixH+N#PCd_9lce8u6^pQ z^KYNpj7Gn$oEB@W+LsWEIBMU?78|@g#^Y|Dy%C|c8bkZa?L+lN6~nhAc*pGU)20&h ztI;$&#fhr@{?ERmT55ihrPMbJLb^ZoUQ+U3S=6l}OHrZB*8GTymh{#W9g@OY?*TPlse{CBF_Jbga*29WDTx5-Zdk zyH`HYYuGArNt3Q(me``gJBGx)&Z*92IVct-rHI4WErj&n&iFw2%WaOk`OI$FS@O4V zy?qji=64oT>Z$Gf&NZe%9ecNFWjww{p)w^0dwI#pK9ib!{UCsNE=?w`Q_g}m$}N5; z8TD3Wvy1{3ch@$E>y%E^>q$`TnL4Za#eN6{G&CdYyBnnphGz-Ro#>!)Z3!7e;hp!r zES=^S6mXr(8n5q{vej2@r_&3R35{!o&@y_|wC`{Yi zDmW@c;JuiU-myH+cI$0e(&6(h@|=x<(92&hMM@Z?15=t8TNg%!Jo7GEZtA!I;{Bn; zBycq^=M8D-0jbQj#$tG@O61k_Yb0>No8rx%L&{o@)z!p8FSzo+>CrY3$Y^5+Q(=t;I*HxxRUA10Ngzw->-6>tsxF`CFM~zU?1|HcpSYkG;{LqaSrP z_CB4P)wL!`k~P>;2PAF!A&>--i|W&5z-PAg?xl+9yLgQl+C?ajp3C1n3r8Y=f;N84 z;`6}v$F8%z!4_-f%^-5vqL8!E)UUS(^?*KXQNCjH;kja5$(2UN>F_y?;gR(mZfa@-sNd=2 z(C>6lQQ-@MtioS&N*}Oq$*ps)yd%Mw@#|f8YKf(jCVY>CJ^c0d4_P1wvQRCk<0Q;s zQjI5BBhR1A7n_Au|I+6f%1aDrS%m)%%SA(ZRATgHhVz& zqmV0csJX4EB$~OQ`{4H4UXjH0ES~9=W0oS5zu7m8*W34b*j_)LDzVdwL;1N>%lgC4 z1%HWH=fZI`NEv|(eS%x-u~Q*yght4Z zkDJZS8?s{7Pc+!($@&{9f_Z5v&qaQVFC8GND^?@bFR#gY6o7Io-tX9Cn#OfP&D03T zvDK|iMt+gT4m*VEO)jryBGpNx$g}l0w{0&T`rOw0!9$_pq=Pgz$%ow=a5iUnJKE8p|e8s3i+X>pQ4SHW6kOd|gmAf&-mQik*0I3^{iVW#yyJ4@a;0$4T zwi@B3+$)F`F&!2CLv_UO#4fR~iY^u9V6mMs4avN4%ZjT~qUL(zTzGCrw{`&Xjj7Eh z`Ov^;**LcHYmY!mXEeb}W@nt7-;nR`B+t~@yjNsfz=7caolBrL2qyHG;{2W=SL*gl z&*Dhmzc>$fj-Gm2%nAP%W}ca)cRwH^GO===P)4mM6Jhz>A@tx&d)}Z$AL2x01p6Xj zcIDWB;JE)j%gNbf(x$T0w8@J{vR-v~a=F(-@uZTx?ylO1=Q4uZA?QGbg8yk>07v{& z3mW$P_~kfG9tYg;=@~yuvGOP6EB;MUKBZ#48K4zYktzK_we&s9C`bTV+|RT_7XLyt zU$j)i&(-e6sQrHVQUkJ@#oaH5dtLYaB?~D%5^CDV;khYun5o!=o>Zx^M9=0pDLspA zgmS(3n=s?8=hTODAMLS!G8xXo<%)}bcdXhpl-lu7!O(BLOeJy!_p%?b-Pp2V-W8!^ zf6Uu};^_=OmVs_QjtFe=)vd8|zOn79m@5!^k>Yk%kqm2Rdd1fLxVHM%D`*)io|g=b z+lzkQj{;YN z^!c9re1HG1ru6lO$~ZCCM|B5jYwAw@XIkesm1YF18+aaUjFq0anPgSg%K63ZoUzgp z+y@jfMzr!QkGhh8t`XZtqk;|lZgf#7CJOe5#X!H6qp9gvNKqSMlHk@;ywE+ZPk;PO z*K0bkrqrqZ+sJ9jNzb3=7^$YBxTVjJazr;KbH^I;#V>-_IZs?UH}ltqjv#vMr*7OC z*G2MVV^|uxkDeS~U&vXr+}TR5v;mcOX)TSzhKs&vqn{7$Vvt3hIqOiin2e|AYuh!OD}XPntH4wQ-30>q(l9WVJc0vrXI6-*OfL44B+QU90S) z-7{q;N8?`5z^AfY8cz1nR55!sHKM(vRKx-qe2<*4o*}I_=Jzo7e_|K#v+sdbn5F&u zAV&bfu8ti?Gn1uU8$PLBs%h|&$EEUZY0JZzHH^H3>YXe{5A3nfV!a3!3!Sf``5V1n z_B!Ih4U1`J^eV&_jzAQk3bZqRGCwc=pVI6i*)W*FUloI5yG=u%&Vh!6y#y>*Mb~Wd zMydL`1~Q(1VqssP(N$4%lX+Z(eM)4;kcfMNM_nbhY(cC)Dfy>+1MbRO!Ikl17uEs> zjO%*~{Jdto=$;mBF(23Bj;PHe*S_Qb=Z*Bvfh^?y%3q`Zdxjf~#Fjch02QCT&F>#o zIUzJ`)$sBn3!Fa<-v}}PU(Hcc5XiZiUwuvbPc_F&X3URlr8aNbOR1XeCDqMF%uxEZ zG^tL#ArD6dBb@C2S9?1+7p#9CuX4A`od0fVgOGlt-r1X_4|^ zv;O20Yz_1q`%mtf1pZ%kjqVqs5Syq0>ps_u$D#$Q@2&T5YDH=9F%B5xTHaz(9Az|cf357<&{yPV$ivs+^js4+;8<4TNO%vIq&TeH+~i+J+p!|g)|^uy1?S$i=7{dA{8&7+S9qTx3k>mKA=Q+Y1C~8 zaBCWZSEuMV%lzG*V>95u$()woD2pW;fi+C^YbVAm{0ba_-hiB%{*@+|$K(3+c&H^7 zXqpP)N;a zq(R%D#i9WY`pc_A-uNAa(smU9(Ed%wEdj7@?ALz_J!f7^Bs#90K_kjcb)%QCt+%?b zsw@5i8|+4!|8`f%MTU7J4aRw*#gkfO6R19?0n^7Nn#*Yx2`9P|0*-w`nJ197WH z5^2!0rgpQ;x6r7#87SE7<_N&&|J$i@+H?QWBd32L5ROR?oKZYl`IcEA zk41g6W%xStmXybWSy<;)N%vTdv`Oi4&T{`g=@1Ks1D5Y%S=qDVia0D2KPsnt6U4`(Hl-)W#j>wsq_;sDP3EJPcaJH z5q>~k6(VC%<5^&f#kO;RTf|3=ifILz(WvCW-ETY|EpN)xhwmyuln$)mPQs9>-s0C2 z{y0(E&9+F^8lrE22~8=A-o=C7-_5&ZqWyb1-ab|Z4pwSpwKH`?)k~JJrSg&XBFw0} zDIEv4;<6O~9$vq}zbDdVIbdLKr(yQ(%GS)se5~T?bcW-?Pu~669%I~pr?XndO``wH zzM;&&z{a`+cwMN*rhs7OMue-{UWQ8Od5P5rLGHXE+;gEzAAOo5ctqE~g9nqI^&ciS z6JbKDQ+Tf|QXRIW>;?jdgf;vgS*?m(R@;x_mwhk1Fv*W1D}3`=+vVSLE*$w5eRX60 z*#Fl16nHb7`>LZ=#@_gP;iG_xa_dxXDo6A1Fy54B<6p~QuvPa!M-B@dx87kMg+<_r z2a(UDeE43Rk5S?MZZO237ZsP>Cg;z7at%0-a9lJZDwtlrJ#b zz7}_t6#?hho#^w&C-8N!CXx5Mc%S=#PLI19D)o@+eOJ0$u9w78+G6iaKg8*j4#Yu8=Eh&u?u7Kd%d^9^O9X8mhL7b9v3U&*GvXM( z=8UE%sV-@vn*X=jJ`z`(zDw>6A2LJBfO1n5+?wWdJEv1Ctv47US928;C0Y!ouiNT21K{gGJu)w@U6_c6mt=ss#bg`rQJ-(lGqX5 z`3I?Tw@1QA-~t-oYY_bQ*013$Vu9bHqyPc4^B`d%`l@s$Eps;?13O*bBhJ@R%CCr{ z*cmSOkzoVKW6FvCZhdu`ofRI$!5jnUKy>j!C+I-3|3di6VU$}@)$-*Ts!Ulg?36gk zof9!gx8QX@1ukCBO>DYxsePF3vl=edNw!=oWN_!ckV)jZO)Y5MElwhlwurBEdp1c9 zQDEpVMbWKl3|1FZOmur*m@KTI)eXx@^Sz$3AkO=zkpg!OH*OoVp$9`eVhVo2c)U8f1%4_JSWFQj?135sIo^m=c6K|)ws!~zt%`LHY$^!E7l}vKQL z7#Y>>jhbS&I(Q%kcH4_=YBF!}bmCV4>>7IF`qzP%Y~LvRUT@T_4<@z6kDw|mx)5f^ z_Avt3*|ZRePm=uE6xgJlQ@B_Vw&Ed8q!VpZh*iz1mrm2ptM{LJwiXJm5-o6H2_&4l zr@M*NiOdO_Z#!^NDs7&zEm2bVmZVztK^EmU;C#mbscGy3gDV zC&Dn4t~4vKZNaADqa^%uatdqB6GmWiK=;=8wLh-homR=vFP(ncsaH82F{JJ#JRw_% zp*1L6LGoy&ME!*gYVRJt*B>mW_umcs7t560L90F&>}lWAHKa1X0b_PJ55k+l`xeDe z__zwn88!C?3+Va>PL>X2oK2-xO=MmmFjJG>dNFd`zU@fr@d0g0m*W)bx(ZkpS6kUgVT%9&UT5 zVeD|HcEcy%x(C^HY ziLo><>JnUk=R|K>nNS4i->d2LBHn&hz&(1tnTjzBdnIU1_Qs02b}#L$_2M(>ZYZDq z^UQR936Cy*>0wPJUD|3Xlvg_1Gn(LI7*cI4`+qJG0}v4%$}vf0Gem_v^1N+;x*5Oc z{Od-6Zs|Lhw;~d>gqYDZS6VNJ3^9F;mu-#ksqff+-{W4ZD@Gx+<1_qPKxLRaV0Vaj zIa+o(!Rk*|bZ>ln0f&~vjb-}_OVVmm%@?F!A|l&-WXU+CT_(~VxLS!*DI*O882%q$ z{~b^D`~QLCoRovgO32=2OXjgNlHDSEl#xw1HYIx`l1)k|d&j|Xh!8^d-ej+AzSk4= zdVjv(-|ct1^+(P*&+B)mePXaVL$hSc_MZEeAZd!6N z>^IX67aKdtaRvrGHd^br%hx6g4Sp;z#A$woQ7;HBeF{BySvYlg*U*)p7c&NX$)Ze| zS*$n3fo=1=BnQ`bcBb7vik#mF1XeRi~bac#q&$~k3yfx zt8eKdt{yJ{S{>!>7qy=0I_U-wZv8eRsosdX?{wZu>A5+VA?8 zyp(a-C z<-gje;dU3uxq*~?O*ktfMnP)UmU@ZjMYU1TEOpLDy(uoxJGW#E-)f*)iqh334KrZiCgrJjQLp;h}>v`?0esIu>*_k#8Y<1=J*uR7M*N6sDqiNGm|XUFv3S{$wmbiB`3mF!ANj*hKv+UL+t4*!bV zZhiFE3e=7Rv*+0MI#)u|!ic#h(|-j2&IXV5?Wjm9cjQUatAUI??M-`lHp1b8l^YCoY8B zfpXsN5blcWTFJy!oMn&hvMcyFE^Ay^>W7-w*;Fn)x=U=7a(6)P0?8Q5ho10+tH{g3%bNvTWbdr9$MTJAZYsqw{yUfVjt#HHJbR;pJT zk@i=gK{G($lYiOWsheg!nhm7oR||fP)~=bNx(SdkKoD7GL6y5%{*g&GC_GsZxAGAz zu|n&LoftuEifzktN|#dj)0tqChv5s4gVe*`Jv9;EkcrtYrv(8}*tq!d!G=*j8g*&n z0KX~^aP|#s{lM(%JON*}nIHI(&6bZ<30EGgS`G7TE?+Nobt986{P5jyFYo- z4Eb#-BHyxdPX;r>A<5~VYWO44^zn7h9LSX%Q|C4lXEp>WU!KV$Q^z_kn{~t4J$O#_r%oEIv@sF8|;Jz&m5v=c`X^xwuEi+h=OVx!P7*v?e+$yWb)y{Te z+!;tV>D3%7(SG^p=+vT*W1z=Qj>~;E63n=0hduK?zi9Ux-z!k2elyTo_dW3#>s?C_ zx>}y_56c%H_anuxFuLCkJebG;LONPMVa7<2POWMS{@R&v(Co+AxM!egB~W`NI7&W( zmS#ZvyIj1;=80+c-ZaTJT!Cn^Q1vUwIl~crWGs7K<}FKS-~-h|sOV20ByZ>IQaFJ+ z`4RF9H-2dA1*yxe^5q?Ut5sO;g5p5j6Wa3IEkHm6Yk$X_sL11 z-MEnfQ?{k_*67l|io8cqTiD-bQs;_CUpO-m5!1jc@7?3{ilwVMKH3kcdv*hDA7JXm zKM&<9>FCyhoKKKNQDx8Bl`S2v#mr~tQ{n_VKjOt4*N^W;@SC+=WTfV67_x-5lilT{ zX`r^sE{T4LCEv%FM>(z)1Ufj?-(XC^vM(mounCgJYi5)Y#fX(wH+nu*O6a#QwkXSEu8BtC{I(n#@9^D_5T&#B~&4F7~*Zm z?7jlKh3t4vJ^#$7`h|G+b>Fx$JjpkV*Ksg&?O)NNQ+dLqP5d?{U+ZRjy!F7fsZzQ@ zEgw42;_Q9$4?P9yC{Vvuzecq1Y zg{T#B3Qj@2iwlqGb{gvdEZfj0;7`#Q}KhEk{t{VE(N!bg_4INzfFv zu!LK3(tsK`CR53PR#Rr2_oY>j)n}C%!~`4c-tokMb}W&>=)x-mBKzE5!}OvHRx^Sc zruaNQQR_!*+!e8Kjb7LLx^#o3{obDfhlDKa;f_!D`ktlCu-WZz-ncBZ>6Wg)uw_>n zPB|-Ysj}+kp=C)guGIs7|o7;rd805@x11GTlQ!%r;5+JE@PZHIqAldYaA6{ zwcbTV{DB_ujYV(W*AJ2GSvveU&NOU#JD@kmgX{zg2l50!uqA}Q+4+lbY=C!|$a)Y~ zO=fu~9a4LGoYxsJLXo{tqJ(TJ32fm2JrZ``AdflZGi~J&TG}QPTbAk!|Gf2p8j>FTm^O0meLPhgMHY10$HV~gEITm z1OMc2RC>ePULj}8jeQ3uOg8l)KXEWI^4YSLkZ03`apkY2GCfbb(zSDUbJp+^#n0Pk?qr&8Paw(W0eX~Q%X#)W;>;oVAPiiq z-RkU2XAha{!oKw6IJu~%{O+0R5wKzLYz+)=L#~SG%i;oP_=BG>C!USy2M+NPDe)D&7?BIcWiWZW8C&%mCdzH(MhdcIN*40HZ zx9mZ~u`%WD$8S$Lg2>kx5GSOg!}jd?pUgPRaU!iHyWNz9(RQ~-Er)P~^2-=Mnq`eX z&^#H_7XzLkDC*$(`@}7r+>~`~)&WfL*oOnL)trE^=XD48Bqxnc0J(lDgWo4)33XpR zo6;SI*Bhh5ud%Tu3Jtu=T2~`&kfUBVa(-%_4G2(JK##t1HearnFGsyN9>LX9dGIu9~B3CIyP zX!@GvZ9BRp-Q1a1H|EJtmtqPP#4A^2m7aQS1EuhN_ebNGujcB;tt)MNcX#Qa8VRYV zSTE6~msD5M)!e;udXD(P%S2s#g8w?(wMn$9Y;r0$TC;4nDx699u>=?iBd7$pzS&sR^|V?))^X%9JuJ^3?cC0(`?^u^uE@w~WfUwm29|9|O_ z)dQfx7(~uZ99ACvx#R@NGVZ0JC*OI?;=H$3y1#Hwe^Eap@IR=nf6Nz&K4)7se>GcI z;~RB|S$Bq+TG@LS0W+EvTCeJ|zdq|g0KdhI9yNLI@^@#Sr>Cb|EqA{w}DyR5__aw2gT+lDt))+_D#6xd*k4e+{SbM#N~xb;zF1nXbR- zh@Y8uy24BH;E`HU+3wTU19SSYg`OP8ue#hJ3 zcF@pL*nl4A(Q}rkOteTMr4>cgi+Yr&zqAwH8%(y66V$q$u7yG{`OYnOf6+vKTXA<^ z;A5ngZu^4h`c*2o9OvrT%wVt(RN_<;n3AO`Eoves@x2QzBd=kwWt5lyU|xBW+wRg=A~@ z!0kE5wHgZEXd;|g(E&)!4Mi`S6%8%a7rpXzfVB?W zWocz_m|3zA}Q-1lyt&&sZ_kF zH(gfWk+-?z?Pw<235+(hubF=NYuq!c(}Att8qd9Vx)*nueVz^u{U9E~d2D%gJW1A2 zhB`#J$IcI_ITIi$X6c_$Y3wTOoLz>rot{NbI{asEs2f1zOy_l;j)PAmg(TIo2HoFl zC&IQ6mNqlz<9p_NXJTwLei2Wm%c~m9ejOGu`ApSW89_e6G@O6!2hU0|_5eWPIhDfn zkR8r`)$_*b703fKotF2Qv}ybDmK1vc-uEaRZZIu=es5>1@#M}wdFUDhnq{&T@CZ~LQTlbxa|KLazwt1p!I#beo9sY#63Twafk-X6B1fn z?+X@UR%Uox?YU>2&;p8+iK`r(_j;QNFYfC+kmkr`+ttpa{INFxAGcI47w9vSOw2S^A zt~o9CJoQWjL1mMmrG@?oyUNMC#`IuX)dg;4B_*!}s?LA%fN7xvE>e={>pjlRJ|J=O z`}Y_N;0=!V878M2Q6Y;Zv;p)~9PE*7OE(uhW%A26iQ9(kS_xKQQZ%3=Cs;bvUuU8w$x-r!}jc(tzF_+YxFJ zRPZ9UV)Gnkkny9Ep9|jm%OE@p9RuHZa4Pdej3KBE@DB^SXRBd}dZBEn&C*eoh`|%> zgFW7zp_VdmB~ABq+JI6O%3w|{b7uqruq64;Ox5;?cRSo~wR``Vs0!!KY1Oe{DjU=l z{$6f5@LvyoYSx=M-s|bue0`cT(EDpQ*x>0fhu4HArEhb%P5MTJk0k&e7%NZZ=uXCB zq{deD+bl*~0_&o48IQw>(eKw`u<>{;< zi^62MjUy(C@!+@&l$XRjn5MBcj5Ye>=_`Gn4Clec5S(*xUmqgkK$v`J`i-dASDZ0V zW9}NWKT3PTAEd~6|8caO2BU`b16kq+(ScTlncrt%KX?&EwHH@AYe?HwYP>vqt5>R) zt84CeJFYBAw77U>qyRDK(nk4qJMUtR>eK1oAk}TN^@X;~`5U_<8e{INk+%kUAA>iV@?w?pToi)nW<5w9a%U@h%S?85 z)8HwR-d-4y@ei9vmr_g_Yu>1P9yeo0ryMjBU)LPiwnZLX8JpHpRkAq7YBqXz`mtN| zNDb8NH*q73eCU=Z&Z-w_aGSv0mC+|e?+ipfuSXe(z^3o+A2sDs`#Pi-t&A4KSIxa{ z$+o*NcaCNp>`lIH=c*BlJo0MElhofGQke;uO`vH9I2bAP)w|a55-?;n@i=I{K#)-Q zRDAqs+a=%LVtsVQPN@c5nZZl9MS|fdMnAJ65ehDi>U-_+2^6-i*ZJgB?lZX1n<{CGFn+r49^!aH) z4;Yu^wGU3bf)w@$imyZg`s33p^nEpPGO^L%6^q(Y#}6mgxCdz4<%V(pWGWBMh2%Bb z4t^aSP}iXiy*Kn0_U-lsfrCWCw%j@D`=)Qe+o9g7Oi9ss9<5{&A|~iy|`B8x-nx>QrEE0#tR@0@|i>t9~RE9q@=K%%tH$Hl1SZ$ zP^R@Jv_57cc)cE&Lw5*Pnmgol(6@7z6N07)eaX8EMvrRmy9zydD+VjsR%{H3QQ2bh zft&FQ_Pk6u8<8Z|1BSoaWM)MGJ$6meM_^Q^)XILzrB#8PX9x3&;H401Mz6!;lw4BN zc-PS!lCsyXLkoz<5wsqNwi+zuG9rI|-xDwYYGP~Os^5P@>q0|MTP~drJ(iV`j8By( z;56$fQ$+kpmwB)M7wjG1Hl8vq_W7Nu zf)Z0`{$b2MSb9J<6k7J?Hf$2|@G?ek{al1gfY$qXp0|A*`PR_6D=P6GsmGh{O>bE6 zM*kb;GBk``2?%b0VOY?)v$`rosebVac|r@R#ACxGq=bQXm`)?mhi;QHLJ~H_)KpQ0 zEdlK;Apb>GDQpR0gwkEGHx!DnMUQHyg&u7JH9w(beM~D}r96_Uej~_fbc*Y)EG!?7 z#yHW#X*87Et@a(4&ZA#?EC2Qs2hfv2su&-d#Ru6j(82-leV@}3|BGw2G~y#mID#*( z*$R!%Ev=({JowmCm#Ip|&l`Z2PkI55Do=P$3ig&Q6)W$6$RZWY%=a0Ql`hzHIEdk9YM_e1 zh-?nTX<&iB-ub{#)g~F!5ZOOPV=?mkr}V1$G^#uH2$4S1WB%B0cxk-#f+Y}16CEE^ zjwsT?D9q|g(_|@Sg)!ni8qs;5w~guEaqA6qEEqi8F9AK1ppn&`zNSfq48ekEjfa z8!u0Y(F6EB2vVF1bP#7$aAE*dXt`sN0a3w%*=J1tPOe^M=`>lgykmtRjoi%%suiIc z;+S2(#)OdSt;quUz)2MaKPGJpwiKfAUqR&=mn0Tm&$Tzd<+yYk^t`wDa7u@8KnLgB zpK4F&kc>rZB=becc0|_|JN&vl(PTO|$%ry5eK>JF!g&!sQJ&OTNopZ0{C>`(P$Kb9 z@I9-LKNAn5^VqimoEB*AvM>_D%Jtbe!x`*0G~n+$QrP;98eJ#6d|w%h_^Uu}|=vENeUBwR;2GAeMFlJiS`(YW>Y-<9!^L~Sp z%B~en(q1rJLAdS$@vw!%3(*jnsmBqj6mAcz#+0uS$*1TMj0Od@pKUA29H7rgQltp< zH@M_bO>j9>(?cac1*Wve$4M$lm`dV$WICRX08aec));^`cpKK1iO2e` z-S0k+)G+rh9#(_)6ME4Frc^At(1i4p1zg0INe4E%PSX*{A#F++P7)hskmXMk4z|T{ zQjVUMDQBwR4cA1ZT(2>z^H*2<^O)wmuqSgd9m9W@v@p0F>&DHwps}whrQQH35kD$s zvdKj+YhM{f=6xM--Cy%*WNIFGWlGBB6WG4|T3-SCa>82e z5}2jA7XxyaVm^w!T|5QR&Nsd8URZLt@Pj; z=j0AIlTTO+Ec1|5-DkV~2MIJKd4DW@UD+G@!|b1o@K*cE%EJ>Rn3}(8ol`~lr8qKt zLZq|e*~$FG8|2aE7!C6Mx6jvEQ?YnvCiG6ob_Xvs9xLKy`09)~A2({)zN<7X>8DBD zP8L=K^Fj0}OW&balfq7Bo3K53!kn1mA@&ID=QM%G`iRkaB)Pc+u;ou^&I|58IAOIO zbff(Ylj=GzTp8myKFvMQjiO1JW60n%8tDIs)!w-ZTJr*?0PA@S&OGO(8i+Kn(ZVnl z^0CAXNWIDLNx0NwoVhCukE63{YuK~nt`|y6O2QN=Vkf7MyZqhpLa;-RuX&x^puYAv z^3py`vBX{3EAr}&sJ=uIM^@^ZZ*F$ZLS`QX#m4fbi#gDZRX2|S?M_~wdJY^WTww`F zE93o*Bd_SwSYZ0jFc|6vM!9Yg3@U_flIG#Sg-*5@E-%_b?MH7!q8C3~ee#6sj z{{#}{0#pVvIao0Rcoyw5PlrYHod$BB89VqY`X6XmJ}l9!JR|l)=vLo@Tcm*Zf&1(y zGj_PSJTK4V!Y43|9%tLpYVqu~@Z_a5qUW-1Lmw|01?RW1%5D#oSk`^A>EHivqX6rH ztK8#x<47{JadSaf6IV1IfAh<1_<{m?#P%~#rm9id`l5=nNCXU(q(Gi`OD1u)U-WAY zbQhJcr7~eQf|~GA^C0(0wvR=8AC(JBq#1cU`~TLY7Skreg!;Zgv(c;J!;f768j|6W5*MibxAT%<=Z}AI zLKceQNB9HRqI_qV$8d#{k+_R9Q}IEn##LKkSR${btb=4w#hTknUjdU<#iOa+@GUYt zyJqYD!t^(!RDI$g36IEsl;>TandF(GK@tltZHdSrmy?a6zwMKRAr8(C%hkpxwVIk+ z#m0~Y_l0Q2t8|I7INxL|5Tvf9^mbu?`BNTA8sBaRusYbP*Yv_>L=CTlWEIVjM;QN$PCfK-Hg3Tn8)X!!Be>u3Ipf< zdT601BrnuoV8Mvr2O4G@%W#t3O%^vn30DG;~ZO_J7LdW@Y4Zl5_ za!igCe&0G|=}g6m2a40k$BtqiNP4pdVPWhi8^VmrRurG5JuiXV$TWV{stHB@2(i1y z@R1f91=N4~dScAWU?W*U^7k`-mR-)3f@>a)&Pp!MZ#d{brnIbXC|g0}b=hbYs}&Jop{YFu*s2$zRgh{%!+W72BR=D?KA?n6&sNY5?w20 zLVc+S(i^d1B_bN-ec&@YzoP@jfVMLHzl)0k59UNV7I=pnQ(K8QRj%VUl%4YqTh5M2 zJuBtG)K;56s!P5GRzr?pWg_%^46KROMe;4nn*+tFr(1~51eRJv^PRzy+nNQBsG?Qg z%84Y3PnNnil!)ztSPD^tF2ZH`qS5?f>VgsjXpG{Xo z=FHO>CvtqUX$=165zUaDq=+xmzQBx{KQ}=o0d%t)o4*^q_HLX?kk@EKK+u==MbVJ3 zjAZhOmDMeb`Dz0byL=T!YAbA+xaLp(N~=o<)fZ@v>Vvy9(_=z+I0^Z*)BEN z8=CsB<;TMs6GOs!ekaEoYLz^Dn~>M-NnZjS!C=+wNtYvJt=M$kx~6|ri+0u6}B zMo)!czYKp|u}>fc={tyL&xkeWJ;Yaqhe33vjq)9cjcnXMWea-WaUf0z-({3Qd<`@j zu^K8Nn~O5V7D-7Wj;5ATrB+&^<1@(W$E2#6A{XPM;d!&l8^AL!l%?|rQUD>=5&;6b z`BKn@6QfPS7eI8LX9!j(55lwMt@Lg5>!s?@>usGimK^Xbtfg-JVjp*QhmpiWWl7FxGV4)-w1RQ=-(KN zGQViF4a!UiXpgP>4w(flx=-c=wwVPekp1t=0NA4sPBSrjzcqXg@Fb^ZWO~M1EUI>5 zx8zG-Qy#sv(mh?pPeU-53xv6PknYbLhoeOphBaDht&>LXaZ^!EA81n|^)8i3qilIj zmVb35$ki|x_EjAEoA(wBS&Jvs% zE}$1WnzXOPQgihM=^LBR+}PnXb^EQC=T6NUu(nSz=wkd;(Ef#I69PR;9?%#1D6spM z>dx+|Z!=-%sDMG|q8yJxV`r2i*4iORHh;x>u(D$KF=1yLK@n7Yx5<{*rXc!&F{oBz zT8N@d>#kR1yn)vg$CU?rW-(k0HJo8bHFdVyI7sSpRMQci zuUO>7=sL$t=Yrnu*4@v-DF?w{H{HtS544V3-B!yvDi&(pJ^5LM=oYH`?X0^#sVH{D z?u?F(>g$X@*OE?X32$ zn-t=LiN(|5b{?-PFdlj~pSXk9TS(_u%1*q*;`j%BWS+niOsf(@cW~pVHPVEDoLjkX zOYD;d^4QpbZSua?bY`=f*EBquV`-nQ#sR1K?abkQpLZt0Iq8RVuN`)#Pd}u6wH>iF z#&;#@(tz@PHLNw2x!o7%3EqIt-^CXxUTx=f_bcu&);Or2{ru12sSkVONaYI_k6Cs4 ziB6RI8)w38H3{MJ8!u&|b^w%dM)eo%wkUOAVeus>%1S>l!(Azx^;F~YNI0{*i-EJo z_FTisIbr6dh9NO{a%N`FdtVX;Sd?jNZC8PsGQWIB*>Xq+IyqX;Am5=0b+HWiK2KyVG5++@75-5IT$&I+RiCJOD-Kl%{Zg1RPUj)3t=|LM7@+Taj&Un9(c zeAqwDVH$o#h>GOZ@yh}VVdIC%B95OX+{?{#R8Hp%qG78b)VIgeiPi%p``N64wpCnTZ zyk$Dz&N*niLoZ<03nkn21dt}@646O6XD^L_-pv?!OKSd4z3yUk-e(HbZz*u?1!#22 zLyKdQrFVZoNmUx=CW9n(Xj`5^qC}o4uZjP*eRX(h5LSR|s@G|%7*c1XUgC|Nk5G6U zR>77iFaimG$k+W(`uv72)X{=22WaFlR-f(tIJ0CtnZ&K}53w`tDJeuYw6Dq(Lc=C> z3{y@SR1vIK<(kSqBe=;^eE}XfvQ{KF^vgW0y{z-lc;aivx>l;4dxI<|`#=HNxsfz( z2yW=t`Zz=rYm0V*mXq#L_r$bA1xDa@UJC6lQG2IeBQS*zz)+NE{$M)_z3kU(EQ~v7 zZ$AG0rn9P96*B4ml@VkmF@RRCav>UZT8=6`v7f;%sDsD!e|)Pv*%Ebo7~I}jc~<6i zk!j+J(;Z~#hrSsEB9Q~N!0Rvo`R2jiT~`24gr}UII>UH8qIlX@LbUePjZTvfMH)Dh z$HRWg+ZE*^KfzUtP6sN^&FuO7o zJ&PEhT9ZLmM!8BpX+2fPNzAzc*ElxzB%fX{;aD;WL|cmu)^JC!NtSlD^{BMIHi?M$ zQ(_?tUtQa_(+>IzPn`qMn{R>3NWpPvspMqRtVFK_hz5eDulF={sXT}((-V*W7Z#z% z2J7=AJYi)im^EDXeQvqUx$md41#HNs98l!Rx%vN+9ef1Q5}bqobwQndbT*17IEdS? zT7H~t&3_L7K~W1{hC69`tV)>Z*!GUwT-aW)QjI>*Z zPCFIWA}A11>}sdW$Xm;H5*5eyv{@dsKJ_A{l7si_UyoBbdH){Bc9Z~#)KLHlgHPH6 zfCbR0s!ASiRxeoG^W8?xiZ@9f)Jft*9_AhI<`3zmk-P}sFB!h9X)7$0$95V zS7O!o38+A@7PrO6l@&T11VVEiYW4gTAh^GQ@{C2se9par+MqlxdG@dnRKG`45M!~_2Uu&$d~x9 zks(g+bvExesO_qiORxhby4^eL{z9nt-Mnp=_M3v>60nj1Fchx6C_p@KhSi$h z%j>v=5`r*)Vq;xFrQZvpcIR+-(C)@8oA;Kc_gmC7m#rdbEg$E(c;=>(S^|t`De317 zZ6Nv=Df){iDEwm1NOZWnzH)rD@=8V#Tf$yf6mJ!1!7PExKq(1$0i3{a*umF!&*l1H zb~{|Y!_Ifrw;q?-=*2z}nFwSO)t2*O#40CR4z%`jztXQf_c~zPe;-)~p^la%yJQaq zoHB-QJh1t%m!hGuNOpka>fZ*_TX$>86$nooP;9` zi(cJm;jZMo;?ZiUPg+f0kfgQoYg8JUr&YihIGyKxxX=XprLC9BueK3kuYD4#y5X0= zRI&DFgBB{eeowu1*kgP6$N?0N1)319J$II-64clo$LVsrY|NG6#%sN(POXc{37B7ClNV__~1rR&DVY@30?qR0VBfDg@9vtL;=7=>k4R03Up$QryN z5F#2Rm01kwbOAstes<0yMNeB|SRf>en;@+`Eqmll8~GIu6o%6n4?2^CUY4@m#JP^c zk4WY`A(Q@nKm7NVQ%#?=V%+=J`^9!wel^MgkkzZbzimL2RAl`-(@QfF!W{+4y^bd! zWNSedK~<M|4s z7c=SNxB5N(y||Bj@3w1mef3nMPje-nofQMdC%S}h==&k*AgiRcqn~C*smYoVFS@O) zYRS6E`=HSq2LW~ewr7}IqY1P=nl?Ckx(-@-Z;$I84%QqFPH6%zA6$RRwnL5@JKsdA zCKkyFqWrtHgkD5~rXfzdf3*mHAcv9^)CO6AS;e^8AXLo<3Qbk|MD{hkrZq_fmyGq6 zAlO7dnsnkx_^JT_t0p8Lsk`o{r4wQnS>Iu3>$#xw((V~9k?*Tax9!SN8k}VUgB=VG zu^fC2!XwFlB!X{`3Hs1C6_r$__$!iZECqBwebc3i;G$NN4_pIa^d-Q3l9T5#&GAxb z3-o}u#5-ghEVTs;0+3ZyxN8p9r$BM0b&x5}&KLcy&p7hgT=Ibp)s1dM*-!_xC{U+< zE8D;TI??x?(uADvF|k8!$!p5 z=M+4!^PfGCSVf;}yw`5@Mbn~uM~mGJv+=7AQR=)j&{LGgGp{;i0@e9{PYF&bcwV)l zRWazA$yEB1Yd56ANkfgDD)rhI3t0YK zdQ@}JQX>`W(%k3Jache%uP> z@!odv?wwczg{j^{{9dn9>{Zyx*x-tXozDax}#Wl%#oq{gpJZI&vGIgbq`#3Im z5wCRHfhmj`t~*ESDKh^tssR~s7P9jFMD+7q@=?u&C`elnC8Fot1{IvjF#zM8TdV`5 zk5slU7` zi+2-oSm00DRdxV)GOvDGVrnF}vea0z>vA2`lx-Ut#V=qQ+G%hPk6n+df5rpMD65Z!~LTiTThOx-+We8e_B1x?lF6u_?uCN zl8~x%D@kh8C*zn&A|^Pg;K5jEx@D@)aKrsr{AoV1ys27_cz=tsYE)UmG)lJ%Ueffv+0r*r+w@Uzzqck>3f!_W zno*)RQfz*bp*|xY?S`}6VqHh=b?4c*`mepnfH@`xP_-{JMTp&uQ5D6B5L`+}JdY@1 zbMtnUN3^`-A@nG`SRkqQVQ8Hjs>V0TqKNo}Q@PrFFWD_n9({H18tKx<@kJAe2O2wh z*X-L@0||d)H%6(ZtX_0XZ-K)QJN14v^Eh={9-1I4n5Mjbw$2!fG!1U(!!^(M#P`zV z)x18_jP~b+#*4N`Gqw%)I%pWVk!G&5fyO&CLNy{bp@{BD{!@KYN)Mjj_TyAM2+$MB zk)_QBbL7SnRV$MdNoJWL;7qc{75?QcSj5$Emu04S?ypmCdWx*JiSPR*b*WZ_BV{O@ zf4`zt5>Fg=t-u>BSM;$Ge~cYIr`-EGg0#LL1%FttX~n{o?isYOgaQ}Os{W)>k1gh&5pozZ!=@uSU1_2uWD`{ibS<8=<|7alaY$G9Eb z7BBYIqGe{No_umaa4ktO>=w!UrOKOk5HXNV4fy53D{vRHGrgyQSgC^OJHB20^GZK9 z;Y*U2C$6v59yS7z662#>SNu{)RELmuY;-4V6fOfddTWy_AZ>V=5uL?xiKk6aV0j-@ zc50_dT*{!kjnlXp;Jp*@o(EnGnyaOL(7a;HOS?Juv|$nycs)HYOnMPH5<)_|c3)M5 zrC3p7kBSr)-$Y=gC`4)5O_SoX&&h=D3LDq9X3{mO2_BfD3Dm&Pej4E#Q0w!@p9S4T zbex}i4C?!?nGB0sQC2?ZuN@<^ExS;Y+5S(#@CA#y{NZC5w5WTq$JohanXbZtjyM+? z`Seo6RLvQm6N`%7zT&;?m_o&7zE(KVKkXVRm60QTeg}XP&7-n%MgxsxFc##4MG5uk zh>rpLV*6#@`(=2fu$;SI>#u%#?8zU!Lrt-8sXfb^h*E^hEZm6DOujU1j6qO|m-=nq zH3ZTr&m^$#V{rU2-KYGuZ(z8YwAeGWEJzLd;@XQ$X16k z5Ges(H~r_s_i~zEdI=|Jp4u1i9oCtdc(_ zuC3^QW1A>U!itC@{WZ+(C*IDn@2-v=uF~#4vY|~)k)qEnYgI9>HyTBhMDa5PMA12^ zsyC_&xW$%D(3P)~u$pGK%TCR!R2yK6IZ^Q~0Yg?k2Av8Mqsyi3eZj=Iwpw^}%_v+w z!rCtM!5@ku&dsc=WAog7T;ojxV>Urs-!*(3sRwz_Bd_@9Gij%e-pa&Mh;4A1hp!N( zQ%yoZT)*dy@0ZSH(KRsRcqVgVs}6^fC)-l+`=W2cq00wc?5Q^(X9K0;K5(AgN|w6P z2#?CvM2y-ef7_~==hHF)&TYzf=lL4aK2EZsUpLd@o71I0Og(8X$TDML-yRxt(!L(zWiHr1Z>m`wF{#ldV z--iz3ZS3NynEtxA*e|m%fJ8ziMZ@QOLW2cfY+0#$?6*v2Em+a86ME}_)In?G+O z9M}sBLb1&5G1GR-)2&_KPVlew5!?re&&%cEDM1W^O$)c|YuBFHUu^OQm*@7N%Ep{{iFW?u?Nq%l4EDva2Vx6HMezOjet?_Hx_1xX{- zISQnaPM}rn1->8JBQ}+(WrKc~uuqV)2&3?+YsuuCdL)*KE2z(}|L*>B+uZX9|HZW? z?)A0M=L6$b8;pES;yC>8C;Dff;s_fJ`Mu{?Ep9b+<3maO;qzjAy#l&s6;RofgKxg^ zQvAHIMd$c~kBdiOp<|F`L@E5uB#oi5U)Um&r%2cMal;ty@hUkf^Uj z4T}S`w^xYWA?W7DAe2#1J7`<;Jdq2s9qQ_FjbjVYFI%p;vGT`e(i_u%x(Q1Zt=>pl zDGrbQ5Rr%c#(`PW3w$7)f9?n%w23-{>eGNA7^_w;YQ4G7Beq-^1On=iE}{f9zQZF7y%r~Q9oslYQLc^@ zN{d6F*PgZvjqUL_a)TkKCh1a|(_|MAd4tl?wun0=pnF=9;WhafoEL{zL4d)WC?${z zRgb*uzD8YWL@7gzt?F9;v`nA}zHP9VZtyJVh9C8U`;GQ*u5BNU@a=xP9q*5hl9(ZV z3KEVS*Tmhb3w(J!WS4od=~-;a5m9%Ek)fON#-x>&v* z_(O`Hf+?FR`zQig?D{pIZ}}9f;dYlrtz{90=<|eDjQ1E>*ZGNk(cw>xC7NHSY>P;| z9IqTbT*fn@Soj+e1j*O6!gDrv$dYtKLi>NAj-E zbmiBxZ82g%H=_YQ=eYK8?9x^D>E^daBv@-nGy#R6%z1tgDa>#mc}U)sWEz2Q|guVRZ&g>_T$HJ5_qb@yKy z3a|KnsHHwxSU<}KNX^ChgI?W~^f@!Agnc*R+00v}7dX0B7nsQs71_<-JkPOz<8R0Y zL9D#7aen)e_9ru$ubz7pe%(~7t(T(%0H+H;9dD`~M}NfJP<*AK_Vm7e+{cB`DA1Ng zT=A8;!+H}NTh{E&VmgjHRnv;>C``Mmb0iyC41+Cuy$nrOc|>=y#ID*S_8&4Mo7Brw zz@Rc@6xl>zOP;94B(+Bq>+dPhRK8r!P+dNxVAnulZi90Rr$74gLAK&+X-X>(3cRN~5a$(-T zJT;hcz)Sh_-K|COub`tI$w(7~3<`NCNE=dz5qBsTRoRF!l~JlQ%=2&j(Oj1RzBnSx z=*bwAE(={+;n0mqEnp2Io$_y_9{FS}SVwJA6ri#B8eYv=v5AHFq%V}doKx)OWShTW z-c(j|xWv3QboHsVdxSG_TConZ>EKmr%uB19tlX4p!uPxO51&}aJwuoy5{Prh<3$M?^Z?Jh3UmrU%HPe)-@j<-Y;weIk*+;2TELmA`-g_mw}8ZxYWxJ~|6D{Ewgd|71J; z&-^c+o1c;8iSGjeCbKQqVtK3~6?{UEFB<JDqO9={}%5M~$zh-{Ryy`AYwQNR<(69+1K z?lI?sQH!t*&_6P1=y{h)6G*m;f;@_BiFPtbwrjZP%V$i-4u!sarGMf;l&>N| zE4eO}^s<5iR|2`!Ul2@OQz#|B=p%d3A&nKZkklCzgWHRJfGi}j} z1gWkDpfR5Smw~O0CK(;CFWL!>jmr$mUJ?x_K*36!F2F&Nj)r`L3##E|p=u#n;SEGADrAMFJR|W$f_- zKwtC&QmI&vKSe2*jDt$u$&@uf=OG9eF9t3DoB>ViIu%Kun-#S>#os3U;cbAs6Zsh3 z@lInD4Z@i@&vVI=&Cj5#M&s(3-7cgHJc93m6i6CIhOwJ^S%XNGcY38~p`q(ahT7+M zK>uX&MM-dRxBM|-ZfVII%5OOhS&M()SNOgQfQl16fHU#ZM66R~rSsC=WDuS>pC_Qd z=zIg;u4e~gmZmhhkcOw}w3yd;57~%KRj)f=RLG0R0_C#q`B8SiZGtkfQ8j^9=XZMO zb3swbCU0rvC~$)kvpx>A`kqI)(%{n9?oOF!RMv0n`SJj8iG0)sn8@6}*tuqM3djep zv*22ylM*>N%Sa$xKY9ufvfugL13{2s=}@N6AdS1XC({O&_yX?c$4;x^M`7WcXDF{E*zm zl@7>LP2|JbGM%#P4FBU?}Dq`VzBYZ8Q9hwKH|!}ylZdN7D-nDm^v5AvfnvBLS+Hi z{N!OAG6uPo%N6v+kl7^h6^f0Fcs8W0N1J>oOF8UMv92nD0#fd@dG=u{;}K~!2Jzc9 zHC2~h9Jo#X;(m895IMh8{XhTriaDuYG`&@SY$x~sD@$dVN77FSM$NYstcglvK|;s~ ztOk3X?=Xi3JFg7PE4|7zvBQZbh1qeaWjOK2jPO^XK-QQPz2mKGX&13obk?$;$qs;O z^*6n!83E~RhPmA8z2868dUz&T*fh9VSsC-`u$4r98|%4W@tnH7BPZRwEmXZ0HtzDs zXOf}ue#j-HMO>(la@@zLzWnO@feJ4V#tzoLWquiq!y{0p|;6oSYcx=chEC_%Nb5<+m zd-m6``6(WC#(|;L(m6Ff5zK=J6zu4qM(Dr4$Z-Kp-Bokqkb*g0RH|J`A$lJb_?8S| z=r(c_$~RPHK2+Mpn4@gdvGc-0(~y8Vq@N=%Yz*+$%0sd1d|biF;cln!3ZgN4=fyHi zj>}Ct#Hj{R5wts2OwgSn6NyT4sx~-`3=QNyp`NK1_Xocj;#ZjQO!;~a(cB9HYU4ny z%{>`S14EU)o~^U1i$W-p1?WmM^}&3H-crY*4fqVxx)3vd^&)$gJU57&nAz`uo4!6e zB1-3k4Dp;Mv$eV;`Vzv8dW|i?=4Z)GAL1ze6f_Eg1ubucZ5F`IH}WD}l>ztax$f+z zrS@-&W>5;H(OhHfMLTqr^k6E5H<~YB9mebiqp9$>(d_uCqB+s^67L zY5{{v-MP~Qc@43TA=T?)P%w4NL!DN+Lr|Ju*;c6RV`gE34B6W&166g?!|<7(5rBKQS`rW@>K%ylb^D?=QZ3A`%%cGZ#dcb+#A#b=jPzC4>Ph>S?kAH67U z9X4BpxWqtPtEHsDjQHgrq}eC=G35yDOrKBU)}{@fnD&ccigds;sxZmaG`%b#Qj3CP zu4HACog>5;Ll4_jHT(0@N!c17_R{=)davDU2GC#GSb(lAR?ub>Lx{gKH(FXh@yU*} zx+GA;^v!WgO~P)aAKL?#Kj#}(c~=!8*^vU$EW=bVsQ8uZe~;r2*;ro@C;? zLV8}`0wL}Ivd1;peyc`xx4l6sQVXig?2sJlukffoG`tNvSdq5)}=? z3#*u;)QI3)N9_ppStUyHlVZ7ytwtJ2yCura3Sr*>r7Kao+?jM9yB&MxU`6c7fIF0F<}eRDlu=C)?ffKDdNUg1Nv?6RAKa%h!AVPg5) zYyhwg@H82jq2b$=MYWW;qy&P^0~njwWWVy9dwBZQbOLvd*GvJsT13{Y67W+A?)8Gl zD1C@5>|s2#FY5%m&Ev>G_l?l59+u}r0q9NdC|^B^YrIV>DOIB}5LU)2>Zwv2VqV}z z!CD?PZtaIMry}z8yOzJQQ=Fg9Zl|MSL%p{xLoNeZNIzr7=n;fzHPf?GgZ%LARLIV@+%ER1yTujXp{v=Y)3yBu~a5 z2!CVOvrm|v4ij<}Q(Fi3*G;rP{ZRZFvt$=G!&{$~gZ{^#hG;#D6mK#y{{psUIKI}4 z!fp(#Q-S2py0F<6!|+4!I@rL*00tz<*Jd#evGB{+3J1#W)4_Q}b^H5Gc8OW{scq2d zdk!a<)%2}S?KfbNn>Xc6^U-5)lu|9y3@X(2Ii0@1WIO#{q73aqhVT-B{a&3}XDKL( ztJ-|*2x4C{7o5One+Mh8j++Q;G%ChZ#-OsU$w#V@^t}SOqMQY3>AEdlO)xRFnCpi3 z^RMBJYUM9BBRK7TA2kP1E>%@y-k9#x{i7x7AqWnST5kk)ZgFJ;^JmF@0y=Mr6B+Q* zt5qwm2(bFx!L$y#ec`oc2lgZ6CUGN)=X0iRDdd@FzuzJM3Wy?N)(;$pFcYa$a&gKX z>z)Jkx?77x+BBf}lXBK;J84o{%U8oGksAbs$O9O@XU?-U?#m4m0{mnUzu9kb=c7*+p*>@SNvU6j2h zKYPWqg_6^MeGD3+1~DrejnW5*tl}e=)h*k$jYk?A1oF~v_9U6`k#RW6fFiN`QpVjk zm=pM&6=R}t{{l8PuCv!7Y2P2-o1Bt_eANy^zaT>yftnhXZEO}sC|y@sv*AecK@q%S z=QSfKwwAaccG}amI+mm_c(=V283%hdTy;MKiH7 z)`c;y=~J0YeP^Hk6e{hKgQMmO+&fIM0%p34qk=~itm-tCt+u@dD*iAIt?4H3zmsrI zSOI!KS_5d#vj;OT0ioIp2#)QAY{alo4l>+xq>c4kyT!43nghS=C9qZ~O^^@L4?$-H z^d6ClH2&5o%n1?EQf2;3$h@f}PZmPgdzCh_-k{=A@-vXMN2jwz()3Oo<%l|ahFji|pp-0JGRL2`jZ?gIh7LNYeb z>-np3F9W>^Mfglum~5JiI(DvqV@!CXD7PLza3@9P?RfmkR8jl>+gppDkI=-_BGfRu zT?R%hRGG3wIRi|ntN4wUtGH@k$%7sF!&?6JXIt<+iiEp}(u5pwUyJN$H(d~cdB(Cg zL4|H7fP+i3cg=1(9(6k2=FO;jYRg@&NiVc0k#u`FM&=r;)@(Z4B47EOdm2o{Jza}9 z3~1#|dHJ`VIXu=}V(j+6SGIT`FQ238I>ethH)Wv=7|PfbYwEUk`UTZ@8M^Sj@vw`YxWJ2 z&6GWLZlS25Ihp^aO|T*vUZYha>N;6(Io|NVW$>5Qi8cA!U7lKN-rjR4DI>Kf-VBw(RH#z&OgXfzA*JZtvbOVpJE=4mZ~pS5)56}xPfzZqY0*lsCs_cx zdx){oE_goy*|H`_e5p=(J!AFCpI1$?O+cm=pK5Qhf-4~`DbX8koUhO|a|p>^a6(FU zhwFI%HZ{T@0P&$ZJo%ZP@*Ro`ddO38+bR~U)C*Ig985w~ekWhq``fI}LJGpI>ep=0 zp@^-Inb(#Tmg$*Z^RNI~I0}3t9nonzywd1M3fx0sT)|G6K51x{?8{ox;b|FM29_?z zPeVNx?3Ow^>Y^>=p~t@_MZI2enI|Sw@$Xr2as=~#h<=Zlvn2X%MZ)jA@Z{H%_8rE~ zH+`J_?kwAsDFwC%uSrDT)vwK;HJLZ6v7qKfp-yT4sb2j4_XF^gpk8NpGaX|73D)hq z0iHg#+A-sYYdL~zos>qh{)yrRk-+m}J43 zH9RipA=o0Eb|x0A!mfW^PwEhm#x_va0y_S>&(ZzhS`VX`bN@sN51@fOQW~G-^@Eu8 zA$X5k79wBDd`BBs?*r0R1R!+SYx4JHuzH^ZufbYN#W-vkCXnNcnb_sGJ)&mluH@pl8O;C}<7_#QO? literal 0 HcmV?d00001 From 1fac4b5e87d62ea663e2c95e29f0a58d50455c3b Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Mon, 9 Sep 2024 22:35:50 -0600 Subject: [PATCH 22/24] more methods and url cleanup --- jupiterone/client.py | 48 ++++++++++++++++++++++++++++++++++++----- jupiterone/constants.py | 29 +++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 5 deletions(-) diff --git a/jupiterone/client.py b/jupiterone/client.py index a320700..40d8795 100644 --- a/jupiterone/client.py +++ b/jupiterone/client.py @@ -5,6 +5,7 @@ import json from warnings import warn from typing import Dict, List +from datetime import datetime import re import requests @@ -36,7 +37,7 @@ EVALUATE_SMARTCLASS, GET_SMARTCLASS_DETAILS, LIST_RULE_INSTANCES, - J1QL_FROM_NATURAL_LANGUAGE + J1QL_FROM_NATURAL_LANGUAGE, UPDATE_RELATIONSHIP ) @@ -63,9 +64,7 @@ class JupiterOneClient: def __init__(self, account: str = None, token: str = None, url: str = DEFAULT_URL, sync_url: str = SYNC_API_URL): self.account = account self.token = token - self.url = url - self.query_endpoint = self.url - self.rules_endpoint = self.url + "/rules/graphql" + self.graphql_url = url self.sync_url = sync_url self.headers = { "Authorization": "Bearer {}".format(self.token), @@ -115,7 +114,7 @@ def _execute_query(self, query: str, variables: Dict = None) -> Dict: s.mount('https://', HTTPAdapter(max_retries=retries)) response = s.post( - self.query_endpoint, headers=self.headers, json=data, timeout=60 + self.graphql_url, headers=self.headers, json=data, timeout=60 ) # It is still unclear if all responses will have a status @@ -401,6 +400,28 @@ def create_relationship(self, **kwargs) -> Dict: response = self._execute_query(query=CREATE_RELATIONSHIP, variables=variables) return response["data"]["createRelationship"] + def update_relationship(self, **kwargs) -> Dict: + """ + Update a relationship (edge) between two entities (vertices). + + args: + relationship_id (str): Unique _id of the relationship + properties (dict): Dictionary of key/value relationship properties + """ + now_dt = datetime.now() + + variables = { + "relationshipId": kwargs.pop("relationship_id"), + "timestamp": datetime.strptime(str(now_dt), "%Y-%m-%d %H:%M:%S.%f").timestamp() + } + + properties = kwargs.pop("properties", None) + if properties: + variables["properties"] = properties + + response = self._execute_query(query=UPDATE_RELATIONSHIP, variables=variables) + return response["data"]["updateRelationship"] + def delete_relationship(self, relationship_id: str = None): """Deletes a relationship between two entities. @@ -542,6 +563,23 @@ def upload_combined_batch_json(self, instance_job_id: str = None, combined_paylo return response + def bulk_delete_entities(self, instance_job_id: str = None, entities_list: list = None): + """Send a request to bulk delete existing entities. + + args: + instance_job_id (str): The "Job ID" for the Custom Integration job. + entities_list (list): List of dictionaries containing entities _id's to be deleted. + """ + endpoint = f"/persister/synchronization/jobs/{instance_job_id}/upload" + + data = { + "deleteEntities": entities_list + } + + response = self._execute_syncapi_request(endpoint=endpoint, payload=data) + + return response + def finalize_sync_job(self, instance_job_id: str = None): """Start a synchronization job. diff --git a/jupiterone/constants.py b/jupiterone/constants.py index d9fc04b..e6b0902 100644 --- a/jupiterone/constants.py +++ b/jupiterone/constants.py @@ -117,6 +117,35 @@ } """ +UPDATE_RELATIONSHIP = """ + mutation UpdateRelationship ( + $relationshipId: String! + $timestamp: Long + $properties: JSON + ) { + updateRelationship ( + relationshipId: $relationshipId, + timestamp: $timestamp, + properties: $properties + ) { + relationship { + _id + ... + } + edge { + id + toVertexId + fromVertexId + relationship { + _id + ... + } + properties + } + } + } +""" + DELETE_RELATIONSHIP = """ mutation DeleteRelationship($relationshipId: String! $timestamp: Long) { deleteRelationship (relationshipId: $relationshipId, timestamp: $timestamp) { From 62de66d0317aaae6d64b8ae7da97e5a902ccfb6d Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Mon, 9 Sep 2024 22:39:08 -0600 Subject: [PATCH 23/24] Update client.py --- jupiterone/client.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jupiterone/client.py b/jupiterone/client.py index 40d8795..26b5d06 100644 --- a/jupiterone/client.py +++ b/jupiterone/client.py @@ -26,6 +26,7 @@ DELETE_ENTITY, UPDATE_ENTITY, CREATE_RELATIONSHIP, + UPDATE_RELATIONSHIP, DELETE_RELATIONSHIP, CURSOR_QUERY_V1, CREATE_INSTANCE, @@ -37,7 +38,7 @@ EVALUATE_SMARTCLASS, GET_SMARTCLASS_DETAILS, LIST_RULE_INSTANCES, - J1QL_FROM_NATURAL_LANGUAGE, UPDATE_RELATIONSHIP + J1QL_FROM_NATURAL_LANGUAGE ) From 87232e71b442bbe85f3bdf99650b1ef767b4feab Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Mon, 9 Sep 2024 22:48:03 -0600 Subject: [PATCH 24/24] Update client.py --- jupiterone/client.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/jupiterone/client.py b/jupiterone/client.py index 26b5d06..f32465b 100644 --- a/jupiterone/client.py +++ b/jupiterone/client.py @@ -653,7 +653,6 @@ def create_smartclass_query(self, smartclass_id: str = None, query: str = None, query (str): The J1QL for the query being created. query_description (str): The description of the query being created. """ - variables = { "input": { "smartClassId": smartclass_id, @@ -672,7 +671,6 @@ def evaluate_smartclass(self, smartclass_id: str = None): args: smartclass_id (str): The unique ID of the Smart Class to trigger the evaluation for. """ - variables = { "smartClassId": smartclass_id } @@ -687,7 +685,6 @@ def get_smartclass_details(self, smartclass_id: str = None): args: smartclass_id (str): The unique ID of the Smart Class to fetch details from. """ - variables = { "id": smartclass_id } @@ -700,7 +697,6 @@ def list_configured_alert_rules(self): """List defined Alert Rules configured in J1 account """ - variables = { "limit": 100 } @@ -715,7 +711,6 @@ def generate_j1ql(self, natural_language_prompt: str = None): args: natural_language_prompt (str): The naturalLanguageQuery prompt input to generate J1QL from. """ - variables = { "input": { "naturalLanguageQuery": natural_language_prompt