From 3329a14ae83dab2bcaf2f53d2878b316b0a9d719 Mon Sep 17 00:00:00 2001 From: Vasilije <8619304+Vasilije1990@users.noreply.github.com> Date: Tue, 24 Oct 2023 15:29:22 +0200 Subject: [PATCH 1/9] Added a few fixes and refactored the base app --- level_3/models/testoutput.py | 8 ++++++++ level_3/rag_test_manager.py | 6 +++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/level_3/models/testoutput.py b/level_3/models/testoutput.py index 21512b538..0921df7e0 100644 --- a/level_3/models/testoutput.py +++ b/level_3/models/testoutput.py @@ -27,6 +27,14 @@ class TestOutput(Base): user_id = Column(String, ForeignKey('users.id'), index=True) # Added user_id field test_set_id = Column(String, ForeignKey('test_sets.id'), index=True) operation_id = Column(String, ForeignKey('operations.id'), index=True) + test_result = Column(String, nullable=True) + test_score = Column(String, nullable=True) + test_metric_name = Column(String, nullable=True) + test_query = Column(String, nullable=True) + test_output = Column(String, nullable=True) + test_expected_output = Column(String, nullable=True) + test_context = Column(String, nullable=True) + test_results = Column(JSON, nullable=True) created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, onupdate=datetime.utcnow) diff --git a/level_3/rag_test_manager.py b/level_3/rag_test_manager.py index 294262284..43984fb25 100644 --- a/level_3/rag_test_manager.py +++ b/level_3/rag_test_manager.py @@ -408,7 +408,11 @@ async def start_test(data, test_set=None, user_id=None, params=None, job_id=None test_id, result = await run_test(param, loader_settings, metadata, only_llm_context=only_llm_context) results.append(result) - await add_entity(session, TestOutput(id=test_id, user_id=user_id, test_results=str(json.dumps(results)))) + + for result_list in results[0]: + for result in result_list: + print("Here is one result", result) + await add_entity(session, TestOutput(id=test_id, user_id=user_id, test_results=result['success'], test_score=str(result['score']), test_metric_name=result['metric_name'], test_query=result['query'], test_output=result['output'], test_expected_output=str(['expected_output']), test_context=result['context'][0])) print(results) From dd785b85aed38f2df1b08e9577ac52a83d540868 Mon Sep 17 00:00:00 2001 From: Vasilije <8619304+Vasilije1990@users.noreply.github.com> Date: Tue, 24 Oct 2023 16:03:55 +0200 Subject: [PATCH 2/9] Added a few fixes and refactored the base app --- level_3/models/testoutput.py | 3 ++- level_3/rag_test_manager.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/level_3/models/testoutput.py b/level_3/models/testoutput.py index 0921df7e0..4a03253f9 100644 --- a/level_3/models/testoutput.py +++ b/level_3/models/testoutput.py @@ -23,7 +23,8 @@ class TestOutput(Base): """ __tablename__ = 'test_outputs' - id = Column(String, primary_key=True) + set_id = Column(String, primary_key=True) + id = Column(String, nullable=True) user_id = Column(String, ForeignKey('users.id'), index=True) # Added user_id field test_set_id = Column(String, ForeignKey('test_sets.id'), index=True) operation_id = Column(String, ForeignKey('operations.id'), index=True) diff --git a/level_3/rag_test_manager.py b/level_3/rag_test_manager.py index 43984fb25..47f07269a 100644 --- a/level_3/rag_test_manager.py +++ b/level_3/rag_test_manager.py @@ -412,7 +412,7 @@ async def start_test(data, test_set=None, user_id=None, params=None, job_id=None for result_list in results[0]: for result in result_list: print("Here is one result", result) - await add_entity(session, TestOutput(id=test_id, user_id=user_id, test_results=result['success'], test_score=str(result['score']), test_metric_name=result['metric_name'], test_query=result['query'], test_output=result['output'], test_expected_output=str(['expected_output']), test_context=result['context'][0])) + await add_entity(session, TestOutput(id=test_id ,set_id=str(uuid.uuid4()), user_id=user_id, test_results=result['success'], test_score=str(result['score']), test_metric_name=result['metric_name'], test_query=result['query'], test_output=result['output'], test_expected_output=str(['expected_output']), test_context=result['context'][0])) print(results) From f81fc276c4175ef5e57daea8338bb00f57c5c84e Mon Sep 17 00:00:00 2001 From: Vasilije <8619304+Vasilije1990@users.noreply.github.com> Date: Tue, 24 Oct 2023 18:01:22 +0200 Subject: [PATCH 3/9] Added a few fixes and refactored the base app --- level_3/models/memory.py | 2 ++ level_3/rag_test_manager.py | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/level_3/models/memory.py b/level_3/models/memory.py index b326da7e6..e19ecddc4 100644 --- a/level_3/models/memory.py +++ b/level_3/models/memory.py @@ -12,12 +12,14 @@ class MemoryModel(Base): id = Column(String, primary_key=True) user_id = Column(String, ForeignKey('users.id'), index=True) + operation_id = Column(String, ForeignKey('operations.id'), index=True) created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, onupdate=datetime.utcnow) methods_list = Column(String , nullable=True) attributes_list = Column(String, nullable=True) user = relationship("User", back_populates="memories") + operation = relationship("Operation", back_populates="memories") metadatas = relationship("MetaDatas", back_populates="memory", cascade="all, delete-orphan") def __repr__(self): diff --git a/level_3/rag_test_manager.py b/level_3/rag_test_manager.py index 47f07269a..edb0ed787 100644 --- a/level_3/rag_test_manager.py +++ b/level_3/rag_test_manager.py @@ -300,7 +300,7 @@ async def start_test(data, test_set=None, user_id=None, params=None, job_id=None if test_set_id is None: test_set_id = str(uuid.uuid4()) - await add_entity(session, TestSet(id=test_set_id, user_id=user_id, content=str(test_set))) + await add_entity(session, TestSet(id=test_set_id, user_id=user_id, content=str(test_set))) if params is None: data_format = data_format_route(data) # Assume data_format_route is predefined @@ -412,7 +412,7 @@ async def start_test(data, test_set=None, user_id=None, params=None, job_id=None for result_list in results[0]: for result in result_list: print("Here is one result", result) - await add_entity(session, TestOutput(id=test_id ,set_id=str(uuid.uuid4()), user_id=user_id, test_results=result['success'], test_score=str(result['score']), test_metric_name=result['metric_name'], test_query=result['query'], test_output=result['output'], test_expected_output=str(['expected_output']), test_context=result['context'][0])) + await add_entity(session, TestOutput(id=test_id , test_set_id=test_set_id, operation_id=job_id, set_id=str(uuid.uuid4()), user_id=user_id, test_results=result['success'], test_score=str(result['score']), test_metric_name=result['metric_name'], test_query=result['query'], test_output=result['output'], test_expected_output=str(['expected_output']), test_context=result['context'][0])) print(results) From 81b8fd923c3ea714665d908438cc8f94263ffcc0 Mon Sep 17 00:00:00 2001 From: Vasilije <8619304+Vasilije1990@users.noreply.github.com> Date: Wed, 25 Oct 2023 15:28:20 +0200 Subject: [PATCH 4/9] Added a few fixes and refactored the base app --- level_3/models/operation.py | 3 ++ level_3/rag_test_manager.py | 26 +++++++++------ level_3/vectordb/vectordb.py | 65 ++++++++++++++++++++---------------- 3 files changed, 55 insertions(+), 39 deletions(-) diff --git a/level_3/models/operation.py b/level_3/models/operation.py index 6be8b4df0..3c3877286 100644 --- a/level_3/models/operation.py +++ b/level_3/models/operation.py @@ -13,9 +13,12 @@ class Operation(Base): id = Column(String, primary_key=True) user_id = Column(String, ForeignKey('users.id'), index=True) # Link to User + operation_type = Column(String, nullable=True) + operation_params = Column(String, nullable=True) test_set_id = Column(String, ForeignKey('test_sets.id'), index=True) created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, onupdate=datetime.utcnow) + memories = relationship("MemoryModel", back_populates="operation") # Relationships user = relationship("User", back_populates="operations") diff --git a/level_3/rag_test_manager.py b/level_3/rag_test_manager.py index edb0ed787..5035f2f69 100644 --- a/level_3/rag_test_manager.py +++ b/level_3/rag_test_manager.py @@ -282,7 +282,10 @@ def generate_letter_uuid(length=8): letters = string.ascii_uppercase # A-Z return ''.join(random.choice(letters) for _ in range(length)) -async def start_test(data, test_set=None, user_id=None, params=None, job_id=None, metadata=None, generate_test_set=False, only_llm_context=False): +async def start_test(data, test_set=None, user_id=None, params=None, job_id=None, metadata=None, generate_test_set=False, retriever_type:str=None): + + + """retriever_type = "llm_context, single_document_context, multi_document_context, "cognitive_architecture""""" async with session_scope(session=AsyncSessionLocal()) as session: @@ -294,9 +297,7 @@ async def start_test(data, test_set=None, user_id=None, params=None, job_id=None await memory.add_memory_instance("ExampleMemory") existing_user = await Memory.check_existing_user(user_id, session) - if job_id is None: - job_id = str(uuid.uuid4()) - await add_entity(session, Operation(id=job_id, user_id=user_id)) + if test_set_id is None: test_set_id = str(uuid.uuid4()) @@ -318,8 +319,13 @@ async def start_test(data, test_set=None, user_id=None, params=None, job_id=None "path": data } + if job_id is None: + job_id = str(uuid.uuid4()) - async def run_test(test, loader_settings, metadata, test_id=None,only_llm_context=False): + await add_entity(session, Operation(id=job_id, user_id=user_id, operation_params =str(test_params), operation_type=retriever_type, test_set_id=test_set_id)) + + + async def run_test(test, loader_settings, metadata, test_id=None,retriever_type=False): if test_id is None: test_id = str(generate_letter_uuid()) + "_" +"SEMANTICMEMORY" @@ -372,7 +378,7 @@ async def start_test(data, test_set=None, user_id=None, params=None, job_id=None test_eval_pipeline =[] - if only_llm_context: + if retriever_type == "llm_context": for test_qa in test_set: context="" test_result = await run_eval(test_qa, context) @@ -399,13 +405,13 @@ async def start_test(data, test_set=None, user_id=None, params=None, job_id=None results = [] - if only_llm_context: + if retriever_type: test_id, result = await run_test(test=None, loader_settings=loader_settings, metadata=metadata, - only_llm_context=only_llm_context) + retriever_type=retriever_type) results.append(result) for param in test_params: - test_id, result = await run_test(param, loader_settings, metadata, only_llm_context=only_llm_context) + test_id, result = await run_test(param, loader_settings, metadata, retriever_type=retriever_type) results.append(result) @@ -458,7 +464,7 @@ async def main(): ] # "https://www.ibiblio.org/ebooks/London/Call%20of%20Wild.pdf" #http://public-library.uk/ebooks/59/83.pdf - result = await start_test(".data/3ZCCCW.pdf", test_set=test_set, user_id="677", params=None, metadata=metadata) + result = await start_test(".data/3ZCCCW.pdf", test_set=test_set, user_id="677", params=None, metadata=metadata, retriever_type='llm_context') # # parser = argparse.ArgumentParser(description="Run tests against a document.") # parser.add_argument("--url", required=True, help="URL of the document to test.") diff --git a/level_3/vectordb/vectordb.py b/level_3/vectordb/vectordb.py index d413fe4d3..e11655db1 100644 --- a/level_3/vectordb/vectordb.py +++ b/level_3/vectordb/vectordb.py @@ -2,13 +2,14 @@ # Make sure to install the following packages: dlt, langchain, duckdb, python-dotenv, openai, weaviate-client import logging +from langchain.text_splitter import RecursiveCharacterTextSplitter from marshmallow import Schema, fields from loaders.loaders import _document_loader # Add the parent directory to sys.path logging.basicConfig(level=logging.INFO) -from langchain.retrievers import WeaviateHybridSearchRetriever +from langchain.retrievers import WeaviateHybridSearchRetriever, ParentDocumentRetriever from weaviate.gql.get import HybridFusion import tracemalloc tracemalloc.start() @@ -56,9 +57,8 @@ class WeaviateVectorDB(VectorDB): super().__init__(*args, **kwargs) self.init_weaviate(embeddings= self.embeddings, namespace = self.namespace) - def init_weaviate(self, embeddings =OpenAIEmbeddings() , namespace: str=None): + def init_weaviate(self, embeddings=OpenAIEmbeddings(), namespace=None,retriever_type="",): # Weaviate initialization logic - # embeddings = OpenAIEmbeddings() auth_config = weaviate.auth.AuthApiKey( api_key=os.environ.get("WEAVIATE_API_KEY") ) @@ -67,28 +67,36 @@ class WeaviateVectorDB(VectorDB): auth_client_secret=auth_config, additional_headers={"X-OpenAI-Api-Key": os.environ.get("OPENAI_API_KEY")}, ) - retriever = WeaviateHybridSearchRetriever( - client=client, - index_name=namespace, - text_key="text", - attributes=[], - embedding=embeddings, - create_schema_if_missing=True, - ) - return retriever - - def init_weaviate_client(self, namespace: str): - # Weaviate client initialization logic - auth_config = weaviate.auth.AuthApiKey( - api_key=os.environ.get("WEAVIATE_API_KEY") - ) - client = weaviate.Client( - url=os.environ.get("WEAVIATE_URL"), - auth_client_secret=auth_config, - additional_headers={"X-OpenAI-Api-Key": os.environ.get("OPENAI_API_KEY")}, - ) - return client + if retriever_type == "single_document_context": + retriever = WeaviateHybridSearchRetriever( + client=client, + index_name=namespace, + text_key="text", + attributes=[], + embedding=embeddings, + create_schema_if_missing=True, + ) + return retriever + elif retriever_type == "multi_document_context": + retriever = WeaviateHybridSearchRetriever( + client=client, + index_name=namespace, + text_key="text", + attributes=[], + embedding=embeddings, + create_schema_if_missing=True, + ) + return retriever + else : + return client + # child_splitter = RecursiveCharacterTextSplitter(chunk_size=400) + # store = InMemoryStore() + # retriever = ParentDocumentRetriever( + # vectorstore=vectorstore, + # docstore=store, + # child_splitter=child_splitter, + # ) from marshmallow import Schema, fields def create_document_structure(observation, params, metadata_schema_class=None): @@ -140,7 +148,7 @@ class WeaviateVectorDB(VectorDB): # Update Weaviate memories here if namespace is None: namespace = self.namespace - retriever = self.init_weaviate(embeddings=embeddings,namespace = namespace) + retriever = self.init_weaviate(embeddings=embeddings,namespace = namespace, retriever_type="single_document_context") if loader_settings: # Assuming _document_loader returns a list of documents documents = await _document_loader(observation, loader_settings) @@ -174,7 +182,7 @@ class WeaviateVectorDB(VectorDB): Example: fetch_memories(query="some query", search_type='text', additional_param='value') """ - client = self.init_weaviate_client(self.namespace) + client = self.init_weaviate(namespace =self.namespace) if search_type is None: search_type = 'hybrid' @@ -258,7 +266,7 @@ class WeaviateVectorDB(VectorDB): async def delete_memories(self, namespace:str, params: dict = None): if namespace is None: namespace = self.namespace - client = self.init_weaviate_client(self.namespace) + client = self.init_weaviate(namespace = self.namespace) if params: where_filter = { "path": ["id"], @@ -283,13 +291,12 @@ class WeaviateVectorDB(VectorDB): ) def update_memories(self, observation, namespace: str, params: dict = None): - client = self.init_weaviate_client(self.namespace) + client = self.init_weaviate(namespace = self.namespace) client.data_object.update( data_object={ # "text": observation, "user_id": str(self.user_id), - "buffer_id": str(self.buffer_id), "version": params.get("version", None) or "", "agreement_id": params.get("agreement_id", None) or "", "privacy_policy": params.get("privacy_policy", None) or "", From 993624894258e463c0dbb223490473dd7ca8bd26 Mon Sep 17 00:00:00 2001 From: Vasilije <8619304+Vasilije1990@users.noreply.github.com> Date: Wed, 25 Oct 2023 20:23:12 +0200 Subject: [PATCH 5/9] Added a few fixes and refactored the base app --- level_3/models/testoutput.py | 1 + level_3/rag_test_manager.py | 38 ++++++++++++++++++++++++++---------- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/level_3/models/testoutput.py b/level_3/models/testoutput.py index 4a03253f9..ed83decbe 100644 --- a/level_3/models/testoutput.py +++ b/level_3/models/testoutput.py @@ -28,6 +28,7 @@ class TestOutput(Base): user_id = Column(String, ForeignKey('users.id'), index=True) # Added user_id field test_set_id = Column(String, ForeignKey('test_sets.id'), index=True) operation_id = Column(String, ForeignKey('operations.id'), index=True) + test_params= Column(String, nullable=True) test_result = Column(String, nullable=True) test_score = Column(String, nullable=True) test_metric_name = Column(String, nullable=True) diff --git a/level_3/rag_test_manager.py b/level_3/rag_test_manager.py index 5035f2f69..6a2e06607 100644 --- a/level_3/rag_test_manager.py +++ b/level_3/rag_test_manager.py @@ -407,22 +407,40 @@ async def start_test(data, test_set=None, user_id=None, params=None, job_id=None if retriever_type: test_id, result = await run_test(test=None, loader_settings=loader_settings, metadata=metadata, - retriever_type=retriever_type) - results.append(result) + retriever_type=retriever_type) # No params for this case + results.append([result, "No params"]) for param in test_params: - test_id, result = await run_test(param, loader_settings, metadata, retriever_type=retriever_type) - results.append(result) + test_id, result = await run_test(param, loader_settings, metadata, retriever_type=retriever_type) # Add the params to the result + results.append([result, param]) + for b, r in results: + print("Here is the result", r) + for result_list in b: + for result in result_list: + print("here is the result", result) - for result_list in results[0]: - for result in result_list: - print("Here is one result", result) - await add_entity(session, TestOutput(id=test_id , test_set_id=test_set_id, operation_id=job_id, set_id=str(uuid.uuid4()), user_id=user_id, test_results=result['success'], test_score=str(result['score']), test_metric_name=result['metric_name'], test_query=result['query'], test_output=result['output'], test_expected_output=str(['expected_output']), test_context=result['context'][0])) + # for result_list in results[0]: + # for result in result_list: - print(results) + print("Here is one result", result) + await add_entity(session, TestOutput( + id=test_id, + test_set_id=test_set_id, + operation_id=job_id, + set_id=str(uuid.uuid4()), + user_id=user_id, + test_results=result['success'], + test_score=str(result['score']), + test_metric_name=result['metric_name'], + test_query=result['query'], + test_output=result['output'], + test_expected_output=str(['expected_output']), + test_context=result['context'][0], + test_params=str(r) # Add params to the database table + )) - return results + return results async def main(): From 5f6f2974b131ea9693a8650d3c1c7baa720719f0 Mon Sep 17 00:00:00 2001 From: Vasilije <8619304+Vasilije1990@users.noreply.github.com> Date: Wed, 25 Oct 2023 20:54:43 +0200 Subject: [PATCH 6/9] Added a few fixes and refactored the base app --- level_3/rag_test_manager.py | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/level_3/rag_test_manager.py b/level_3/rag_test_manager.py index 6a2e06607..ff86ae356 100644 --- a/level_3/rag_test_manager.py +++ b/level_3/rag_test_manager.py @@ -405,24 +405,20 @@ async def start_test(data, test_set=None, user_id=None, params=None, job_id=None results = [] - if retriever_type: + if retriever_type == "llm_context": test_id, result = await run_test(test=None, loader_settings=loader_settings, metadata=metadata, retriever_type=retriever_type) # No params for this case results.append([result, "No params"]) - for param in test_params: - test_id, result = await run_test(param, loader_settings, metadata, retriever_type=retriever_type) # Add the params to the result - results.append([result, param]) + elif retriever_type == "single_document_context": + for param in test_params: + test_id, result = await run_test(param, loader_settings, metadata, retriever_type=retriever_type) # Add the params to the result + results.append([result, param]) for b, r in results: print("Here is the result", r) for result_list in b: for result in result_list: - print("here is the result", result) - - # for result_list in results[0]: - # for result in result_list: - print("Here is one result", result) await add_entity(session, TestOutput( id=test_id, From f869548dfe3ad7bf606abd391e123e558dc7b363 Mon Sep 17 00:00:00 2001 From: Vasilije <8619304+Vasilije1990@users.noreply.github.com> Date: Fri, 27 Oct 2023 11:11:22 +0200 Subject: [PATCH 7/9] Added a few fixes and refactored the base app --- level_3/api.py | 85 +++++-- level_3/rag_test_manager.py | 407 ++++++++++++++++++++++----------- level_3/vectorstore_manager.py | 168 +++++++++----- 3 files changed, 446 insertions(+), 214 deletions(-) diff --git a/level_3/api.py b/level_3/api.py index 9eb64b3e8..10c640d0b 100644 --- a/level_3/api.py +++ b/level_3/api.py @@ -11,6 +11,7 @@ from level_3.database.database import AsyncSessionLocal from level_3.database.database_crud import session_scope from vectorstore_manager import Memory from dotenv import load_dotenv + # Set up logging logging.basicConfig( level=logging.INFO, # Set the logging level (e.g., DEBUG, INFO, WARNING, ERROR, CRITICAL) @@ -20,20 +21,23 @@ logging.basicConfig( logger = logging.getLogger(__name__) - load_dotenv() OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "") app = FastAPI(debug=True) from auth.cognito.JWTBearer import JWTBearer from auth.auth import jwks + auth = JWTBearer(jwks) from fastapi import Depends + + class ImageResponse(BaseModel): success: bool message: str + @app.get( "/", ) @@ -43,15 +47,19 @@ async def root(): """ return {"message": "Hello, World, I am alive!"} + @app.get("/health") def health_check(): """ Health check endpoint that returns the server status. """ return {"status": "OK"} + + class Payload(BaseModel): payload: Dict[str, Any] + def memory_factory(memory_type): load_dotenv() @@ -67,24 +75,34 @@ def memory_factory(memory_type): logging.info(" Adding to Memory ") decoded_payload = payload.payload async with session_scope(session=AsyncSessionLocal()) as session: - - memory = await Memory.create_memory(decoded_payload["user_id"], session, namespace='SEMANTICMEMORY') + memory = await Memory.create_memory( + decoded_payload["user_id"], session, namespace="SEMANTICMEMORY" + ) # Adding a memory instance await memory.add_memory_instance(decoded_payload["memory_object"]) # Managing memory attributes - existing_user = await Memory.check_existing_user(decoded_payload["user_id"], session) + existing_user = await Memory.check_existing_user( + decoded_payload["user_id"], session + ) await memory.manage_memory_attributes(existing_user) - await memory.add_dynamic_memory_class(decoded_payload["memory_object"], decoded_payload["memory_object"].upper()) + await memory.add_dynamic_memory_class( + decoded_payload["memory_object"], + decoded_payload["memory_object"].upper(), + ) memory_class = decoded_payload["memory_object"] + "_class" dynamic_memory_class = getattr(memory, memory_class.lower(), None) - await memory.add_method_to_class(dynamic_memory_class, 'add_memories') + await memory.add_method_to_class(dynamic_memory_class, "add_memories") # await memory.add_method_to_class(memory.semanticmemory_class, 'fetch_memories') - output = await memory.dynamic_method_call(dynamic_memory_class, 'add_memories', - observation='some_observation', params=decoded_payload["params"], - loader_settings=decoded_payload["loader_settings"]) + output = await memory.dynamic_method_call( + dynamic_memory_class, + "add_memories", + observation="some_observation", + params=decoded_payload["params"], + loader_settings=decoded_payload["loader_settings"], + ) return JSONResponse(content={"response": output}, status_code=200) except Exception as e: @@ -101,23 +119,32 @@ def memory_factory(memory_type): logging.info(" Adding to Memory ") decoded_payload = payload.payload async with session_scope(session=AsyncSessionLocal()) as session: - - memory = await Memory.create_memory(decoded_payload["user_id"], session, namespace='SEMANTICMEMORY') + memory = await Memory.create_memory( + decoded_payload["user_id"], session, namespace="SEMANTICMEMORY" + ) # Adding a memory instance await memory.add_memory_instance(decoded_payload["memory_object"]) # Managing memory attributes - existing_user = await Memory.check_existing_user(decoded_payload["user_id"], session) + existing_user = await Memory.check_existing_user( + decoded_payload["user_id"], session + ) await memory.manage_memory_attributes(existing_user) - await memory.add_dynamic_memory_class(decoded_payload["memory_object"], decoded_payload["memory_object"].upper()) + await memory.add_dynamic_memory_class( + decoded_payload["memory_object"], + decoded_payload["memory_object"].upper(), + ) memory_class = decoded_payload["memory_object"] + "_class" dynamic_memory_class = getattr(memory, memory_class.lower(), None) - await memory.add_method_to_class(dynamic_memory_class, 'add_memories') + await memory.add_method_to_class(dynamic_memory_class, "add_memories") # await memory.add_method_to_class(memory.semanticmemory_class, 'fetch_memories') - output = await memory.dynamic_method_call(dynamic_memory_class, 'fetch_memories', - observation=decoded_payload['observation']) + output = await memory.dynamic_method_call( + dynamic_memory_class, + "fetch_memories", + observation=decoded_payload["observation"], + ) return JSONResponse(content={"response": output}, status_code=200) except Exception as e: @@ -134,23 +161,34 @@ def memory_factory(memory_type): logging.info(" Adding to Memory ") decoded_payload = payload.payload async with session_scope(session=AsyncSessionLocal()) as session: - - memory = await Memory.create_memory(decoded_payload["user_id"], session, namespace='SEMANTICMEMORY') + memory = await Memory.create_memory( + decoded_payload["user_id"], session, namespace="SEMANTICMEMORY" + ) # Adding a memory instance await memory.add_memory_instance(decoded_payload["memory_object"]) # Managing memory attributes - existing_user = await Memory.check_existing_user(decoded_payload["user_id"], session) + existing_user = await Memory.check_existing_user( + decoded_payload["user_id"], session + ) await memory.manage_memory_attributes(existing_user) - await memory.add_dynamic_memory_class(decoded_payload["memory_object"], decoded_payload["memory_object"].upper()) + await memory.add_dynamic_memory_class( + decoded_payload["memory_object"], + decoded_payload["memory_object"].upper(), + ) memory_class = decoded_payload["memory_object"] + "_class" dynamic_memory_class = getattr(memory, memory_class.lower(), None) - await memory.add_method_to_class(dynamic_memory_class, 'delete_memories') + await memory.add_method_to_class( + dynamic_memory_class, "delete_memories" + ) # await memory.add_method_to_class(memory.semanticmemory_class, 'fetch_memories') - output = await memory.dynamic_method_call(dynamic_memory_class, 'delete_memories', - namespace=decoded_payload["memory_object"].upper()) + output = await memory.dynamic_method_call( + dynamic_memory_class, + "delete_memories", + namespace=decoded_payload["memory_object"].upper(), + ) return JSONResponse(content={"response": output}, status_code=200) except Exception as e: @@ -158,6 +196,7 @@ def memory_factory(memory_type): content={"response": {"error": str(e)}}, status_code=503 ) + memory_list = ["episodic", "buffer", "semantic"] for memory_type in memory_list: memory_factory(memory_type) diff --git a/level_3/rag_test_manager.py b/level_3/rag_test_manager.py index ff86ae356..1b395764e 100644 --- a/level_3/rag_test_manager.py +++ b/level_3/rag_test_manager.py @@ -20,7 +20,9 @@ logging.basicConfig(level=logging.INFO) import marvin from dotenv import load_dotenv from sqlalchemy.orm import sessionmaker -from database.database import engine # Ensure you have database engine defined somewhere +from database.database import ( + engine, +) # Ensure you have database engine defined somewhere from models.user import User from models.memory import MemoryModel from models.sessions import Session @@ -28,6 +30,7 @@ from models.testset import TestSet from models.testoutput import TestOutput from models.metadatas import MetaDatas from models.operation import Operation + load_dotenv() import ast import tracemalloc @@ -43,12 +46,13 @@ load_dotenv() OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "") marvin.settings.openai.api_key = os.environ.get("OPENAI_API_KEY") -from vectordb.basevectordb import BaseMemory +from vectordb.basevectordb import BaseMemory from vectorstore_manager import Memory import asyncio from database.database_crud import session_scope from database.database import AsyncSessionLocal + openai.api_key = os.getenv("OPENAI_API_KEY", "") @@ -58,13 +62,19 @@ async def retrieve_latest_test_case(session, user_id, memory_id): result = await session.execute( session.query(TestSet.attributes_list) .filter_by(user_id=user_id, memory_id=memory_id) - .order_by(TestSet.created_at).first() + .order_by(TestSet.created_at) + .first() ) - return result.scalar_one_or_none() # scalar_one_or_none() is a non-blocking call + return ( + result.scalar_one_or_none() + ) # scalar_one_or_none() is a non-blocking call except Exception as e: - logging.error(f"An error occurred while retrieving the latest test case: {str(e)}") + logging.error( + f"An error occurred while retrieving the latest test case: {str(e)}" + ) return None + async def add_entity(session, entity): async with session_scope(session) as s: # Use your async session_scope s.add(entity) # No need to commit; session_scope takes care of it @@ -72,6 +82,7 @@ async def add_entity(session, entity): return "Successfully added entity" + async def retrieve_job_by_id(session, user_id, job_id): try: result = await session.execute( @@ -84,12 +95,14 @@ async def retrieve_job_by_id(session, user_id, job_id): logging.error(f"An error occurred while retrieving the job: {str(e)}") return None + async def fetch_job_id(session, user_id=None, memory_id=None, job_id=None): try: result = await session.execute( session.query(Session.id) .filter_by(user_id=user_id, id=job_id) - .order_by(Session.created_at).first() + .order_by(Session.created_at) + .first() ) return result.scalar_one_or_none() except Exception as e: @@ -103,16 +116,24 @@ async def fetch_test_set_id(session, user_id, id): result = await session.execute( session.query(TestSet.id) .filter_by(user_id=user_id, id=id) - .order_by(TestSet.created_at).desc().first() + .order_by(TestSet.created_at) + .desc() + .first() ) - return result.scalar_one_or_none() # scalar_one_or_none() is a non-blocking call + return ( + result.scalar_one_or_none() + ) # scalar_one_or_none() is a non-blocking call except Exception as e: logging.error(f"An error occurred while retrieving the test set: {str(e)}") return None + # Adding "embeddings" to the parameter variants function -def generate_param_variants(base_params=None, increments=None, ranges=None, included_params=None): + +def generate_param_variants( + base_params=None, increments=None, ranges=None, included_params=None +): """Generate parameter variants for testing. Args: @@ -128,22 +149,22 @@ def generate_param_variants(base_params=None, increments=None, ranges=None, incl # Default values defaults = { - 'chunk_size': 250, - 'chunk_overlap': 20, - 'similarity_score': 0.5, - 'metadata_variation': 0, - 'search_type': 'hybrid', - 'embeddings': 'openai' # Default value added for 'embeddings' + "chunk_size": 250, + "chunk_overlap": 20, + "similarity_score": 0.5, + "metadata_variation": 0, + "search_type": "hybrid", + "embeddings": "openai", # Default value added for 'embeddings' } # Update defaults with provided base parameters params = {**defaults, **(base_params or {})} default_increments = { - 'chunk_size': 150, - 'chunk_overlap': 10, - 'similarity_score': 0.1, - 'metadata_variation': 1 + "chunk_size": 150, + "chunk_overlap": 10, + "similarity_score": 0.1, + "metadata_variation": 1, } # Update default increments with provided increments @@ -151,10 +172,10 @@ def generate_param_variants(base_params=None, increments=None, ranges=None, incl # Default ranges default_ranges = { - 'chunk_size': 2, - 'chunk_overlap': 2, - 'similarity_score': 2, - 'metadata_variation': 2 + "chunk_size": 2, + "chunk_overlap": 2, + "similarity_score": 2, + "metadata_variation": 2, } # Update default ranges with provided ranges @@ -162,22 +183,43 @@ def generate_param_variants(base_params=None, increments=None, ranges=None, incl # Generate parameter variant ranges param_ranges = { - key: [params[key] + i * increments.get(key, 1) for i in range(ranges.get(key, 1))] - for key in ['chunk_size', 'chunk_overlap', 'similarity_score', 'metadata_variation'] + key: [ + params[key] + i * increments.get(key, 1) for i in range(ranges.get(key, 1)) + ] + for key in [ + "chunk_size", + "chunk_overlap", + "similarity_score", + "metadata_variation", + ] } # Add search_type and embeddings with possible values - param_ranges['search_type'] = ['text', 'hybrid', 'bm25', 'generate', 'generate_grouped'] - param_ranges['embeddings'] = ['openai', 'cohere', 'huggingface'] # Added 'embeddings' values + param_ranges["search_type"] = [ + "text", + "hybrid", + "bm25", + "generate", + "generate_grouped", + ] + param_ranges["embeddings"] = [ + "openai", + "cohere", + "huggingface", + ] # Added 'embeddings' values # Filter param_ranges based on included_params if included_params is not None: - param_ranges = {key: val for key, val in param_ranges.items() if key in included_params} + param_ranges = { + key: val for key, val in param_ranges.items() if key in included_params + } # Generate all combinations of parameter variants keys = param_ranges.keys() values = param_ranges.values() - param_variants = [dict(zip(keys, combination)) for combination in itertools.product(*values)] + param_variants = [ + dict(zip(keys, combination)) for combination in itertools.product(*values) + ] return param_variants @@ -185,27 +227,60 @@ def generate_param_variants(base_params=None, increments=None, ranges=None, incl # Generate parameter variants and display a sample of the generated combinations -async def generate_chatgpt_output(query:str, context:str=None): - response = openai.ChatCompletion.create( - model="gpt-3.5-turbo", - messages=[ - {"role": "system", "content": "You are a helpful assistant."}, - {"role": "assistant", "content": f"{context}"}, - {"role": "user", "content": query} - ] - ) - llm_output = response.choices[0].message.content - # print(llm_output) - return llm_output -async def eval_test(query=None, output=None, expected_output=None, context=None, synthetic_test_set=False): +async def generate_chatgpt_output(query: str, context: str = None, api_key=None, model_name="gpt-3.5-turbo"): + """ + Generate a response from the OpenAI ChatGPT model. + + Args: + query (str): The user's query or message. + context (str, optional): Additional context for the conversation. Defaults to an empty string. + api_key (str, optional): Your OpenAI API key. If not provided, the globally configured API key will be used. + model_name (str, optional): The name of the ChatGPT model to use. Defaults to "gpt-3.5-turbo". + + Returns: + str: The response generated by the ChatGPT model. + + Raises: + Exception: If an error occurs during the API call, an error message is returned for the caller to handle. + """ + if not context: + context = "" + + messages = [ + {"role": "system", "content": "You are a helpful assistant."}, + {"role": "assistant", "content": context}, + {"role": "user", "content": query}, + ] + + try: + openai.api_key = api_key if api_key else openai.api_key # Use the provided API key or the one set globally + + response = openai.ChatCompletion.create( + model=model_name, + messages=messages, + ) + + llm_output = response.choices[0].message.content + return llm_output + except Exception as e: + return f"An error occurred: {e}" # Return the error message for the caller to handle + + + +async def eval_test( + query=None, + output=None, + expected_output=None, + context=None, + synthetic_test_set=False, +): result_output = await generate_chatgpt_output(query, context) if synthetic_test_set: test_case = synthetic_test_set else: - test_case = LLMTestCase( query=query, output=result_output, @@ -226,10 +301,10 @@ async def eval_test(query=None, output=None, expected_output=None, context=None, "output": test_result.output, "expected_output": test_result.expected_output, "metadata": test_result.metadata, - "context": test_result.context + "context": test_result.context, } - test_result_dict =[] + test_result_dict = [] for test in test_result: test_result_it = test_result_to_dict(test) test_result_dict.append(test_result_it) @@ -238,13 +313,11 @@ async def eval_test(query=None, output=None, expected_output=None, context=None, # print(test_result) - -def data_format_route( data_string: str): +def data_format_route(data_string: str): @ai_classifier class FormatRoute(Enum): """Represents classifier for the data format""" - PDF = "PDF" UNSTRUCTURED_WEB = "UNSTRUCTURED_WEB" GITHUB = "GITHUB" @@ -258,7 +331,7 @@ def data_format_route( data_string: str): def data_location_route(data_string: str): @ai_classifier class LocationRoute(Enum): - """Represents classifier for the data location, if it is device, or database connections string or URL """ + """Represents classifier for the data location, if it is device, or database connections string or URL""" DEVICE = "file_path_starting_with_.data_or_containing_it" # URL = "url starting with http or https" @@ -269,71 +342,92 @@ def data_location_route(data_string: str): def dynamic_test_manager(context=None): from deepeval.dataset import create_evaluation_query_answer_pairs + # fetch random chunks from the document - #feed them to the evaluation pipeline - dataset = create_evaluation_query_answer_pairs(openai_api_key=os.environ.get("OPENAI_API_KEY"), context= context ,n=10) + # feed them to the evaluation pipeline + dataset = create_evaluation_query_answer_pairs( + openai_api_key=os.environ.get("OPENAI_API_KEY"), context=context, n=10 + ) return dataset - def generate_letter_uuid(length=8): """Generate a random string of uppercase letters with the specified length.""" letters = string.ascii_uppercase # A-Z - return ''.join(random.choice(letters) for _ in range(length)) - -async def start_test(data, test_set=None, user_id=None, params=None, job_id=None, metadata=None, generate_test_set=False, retriever_type:str=None): + return "".join(random.choice(letters) for _ in range(length)) - """retriever_type = "llm_context, single_document_context, multi_document_context, "cognitive_architecture""""" - +async def start_test( + data, + test_set=None, + user_id=None, + params=None, + job_id=None, + metadata=None, + generate_test_set=False, + retriever_type: str = None, +): + """retriever_type = "llm_context, single_document_context, multi_document_context, "cognitive_architecture""" "" async with session_scope(session=AsyncSessionLocal()) as session: - - job_id = await fetch_job_id(session, user_id=user_id, job_id=job_id) test_set_id = await fetch_test_set_id(session, user_id=user_id, id=job_id) - memory = await Memory.create_memory(user_id, session, namespace="SEMANTICMEMORY") + memory = await Memory.create_memory( + user_id, session, namespace="SEMANTICMEMORY" + ) await memory.add_memory_instance("ExampleMemory") existing_user = await Memory.check_existing_user(user_id, session) - - if test_set_id is None: test_set_id = str(uuid.uuid4()) - await add_entity(session, TestSet(id=test_set_id, user_id=user_id, content=str(test_set))) + await add_entity( + session, TestSet(id=test_set_id, user_id=user_id, content=str(test_set)) + ) if params is None: - data_format = data_format_route(data) # Assume data_format_route is predefined + data_format = data_format_route( + data + ) # Assume data_format_route is predefined logging.info("Data format is %s", data_format) data_location = data_location_route(data) - logging.info("Data location is %s",data_location)# Assume data_location_route is predefined - test_params = generate_param_variants( - included_params=['chunk_size']) + logging.info( + "Data location is %s", data_location + ) # Assume data_location_route is predefined + test_params = generate_param_variants(included_params=["chunk_size"]) print("Here are the test params", str(test_params)) loader_settings = { "format": f"{data_format}", "source": f"{data_location}", - "path": data + "path": data, } if job_id is None: job_id = str(uuid.uuid4()) - await add_entity(session, Operation(id=job_id, user_id=user_id, operation_params =str(test_params), operation_type=retriever_type, test_set_id=test_set_id)) - - - async def run_test(test, loader_settings, metadata, test_id=None,retriever_type=False): + await add_entity( + session, + Operation( + id=job_id, + user_id=user_id, + operation_params=str(test_params), + operation_type=retriever_type, + test_set_id=test_set_id, + ), + ) + async def run_test( + test, loader_settings, metadata, test_id=None, retriever_type=False + ): if test_id is None: - test_id = str(generate_letter_uuid()) + "_" +"SEMANTICMEMORY" + test_id = str(generate_letter_uuid()) + "_" + "SEMANTICMEMORY" await memory.manage_memory_attributes(existing_user) test_class = test_id + "_class" await memory.add_dynamic_memory_class(test_id.lower(), test_id) dynamic_memory_class = getattr(memory, test_class.lower(), None) - methods_to_add = ['add_memories', 'fetch_memories', 'delete_memories'] + methods_to_add = ["add_memories", "fetch_memories", "delete_memories"] if dynamic_memory_class is not None: for method_name in methods_to_add: @@ -348,98 +442,132 @@ async def start_test(data, test_set=None, user_id=None, params=None, job_id=None loader_settings.update(test) test_class = test_id + "_class" dynamic_memory_class = getattr(memory, test_class.lower(), None) - async def run_load_test_element( loader_settings=loader_settings, metadata=metadata, test_id=test_id, test_set=test_set): + async def run_load_test_element( + loader_settings=loader_settings, + metadata=metadata, + test_id=test_id, + test_set=test_set, + ): print(f"Trying to access: {test_class.lower()}") - await memory.dynamic_method_call(dynamic_memory_class, 'add_memories', - observation='Observation loaded', params=metadata, - loader_settings=loader_settings) + await memory.dynamic_method_call( + dynamic_memory_class, + "add_memories", + observation="Observation loaded", + params=metadata, + loader_settings=loader_settings, + ) return "Loaded test element" + async def run_search_element(test_item, test_id): - retrieve_action = await memory.dynamic_method_call(dynamic_memory_class, 'fetch_memories', - observation=str(test_item["question"])) - print("Here is the test result", str(retrieve_action["data"]['Get'][test_id][0]["text"])) - return retrieve_action["data"]['Get'][test_id][0]["text"] + retrieve_action = await memory.dynamic_method_call( + dynamic_memory_class, + "fetch_memories", + observation=str(test_item["question"]), + ) + print( + "Here is the test result", + str(retrieve_action["data"]["Get"][test_id][0]["text"]), + ) + return retrieve_action["data"]["Get"][test_id][0]["text"] async def run_eval(test_item, search_result): - test_eval= await eval_test(query=test_item["question"], expected_output=test_item["answer"], - context=str(search_result)) + test_eval = await eval_test( + query=test_item["question"], + expected_output=test_item["answer"], + context=str(search_result), + ) return test_eval - async def run_generate_test_set( test_id): + async def run_generate_test_set(test_id): test_class = test_id + "_class" # await memory.add_dynamic_memory_class(test_id.lower(), test_id) dynamic_memory_class = getattr(memory, test_class.lower(), None) print(dynamic_memory_class) - retrieve_action = await memory.dynamic_method_call(dynamic_memory_class, 'fetch_memories', - observation="Generate a short summary of this document", - search_type="generative") + retrieve_action = await memory.dynamic_method_call( + dynamic_memory_class, + "fetch_memories", + observation="Generate a short summary of this document", + search_type="generative", + ) return dynamic_test_manager(retrieve_action) - test_eval_pipeline =[] + test_eval_pipeline = [] if retriever_type == "llm_context": for test_qa in test_set: - context="" + context = "" + logging.info("Loading and evaluating test set for LLM context") test_result = await run_eval(test_qa, context) test_eval_pipeline.append(test_result) + elif retriever_type == "single_document_context": + if test_set: + logging.info( + "Loading and evaluating test set for a single document context" + ) + await run_load_test_element( + loader_settings, metadata, test_id, test_set + ) + for test_qa in test_set: + result = await run_search_element(test_qa, test_id) + test_result = await run_eval(test_qa, result) + test_eval_pipeline.append(test_result) + await memory.dynamic_method_call( + dynamic_memory_class, "delete_memories", namespace=test_id + ) + else: + pass if generate_test_set is True: synthetic_test_set = run_generate_test_set(test_id) else: pass - if test_set: - logging.info("Loading and evaluating test set") - await run_load_test_element(loader_settings, metadata, test_id, test_set) - for test_qa in test_set: - result = await run_search_element(test_qa, test_id) - test_result = await run_eval(test_qa, result) - test_eval_pipeline.append( test_result) - - else: - pass - - await memory.dynamic_method_call(dynamic_memory_class, 'delete_memories', - namespace=test_id) return test_id, test_eval_pipeline results = [] if retriever_type == "llm_context": - test_id, result = await run_test(test=None, loader_settings=loader_settings, metadata=metadata, - retriever_type=retriever_type) # No params for this case + test_id, result = await run_test( + test=None, + loader_settings=loader_settings, + metadata=metadata, + retriever_type=retriever_type, + ) # No params for this case results.append([result, "No params"]) elif retriever_type == "single_document_context": for param in test_params: - test_id, result = await run_test(param, loader_settings, metadata, retriever_type=retriever_type) # Add the params to the result + test_id, result = await run_test( + param, loader_settings, metadata, retriever_type=retriever_type + ) # Add the params to the result results.append([result, param]) for b, r in results: - print("Here is the result", r) for result_list in b: for result in result_list: - print("Here is one result", result) - await add_entity(session, TestOutput( - id=test_id, - test_set_id=test_set_id, - operation_id=job_id, - set_id=str(uuid.uuid4()), - user_id=user_id, - test_results=result['success'], - test_score=str(result['score']), - test_metric_name=result['metric_name'], - test_query=result['query'], - test_output=result['output'], - test_expected_output=str(['expected_output']), - test_context=result['context'][0], - test_params=str(r) # Add params to the database table - )) + await add_entity( + session, + TestOutput( + id=test_id, + test_set_id=test_set_id, + operation_id=job_id, + set_id=str(uuid.uuid4()), + user_id=user_id, + test_results=result["success"], + test_score=str(result["score"]), + test_metric_name=result["metric_name"], + test_query=result["query"], + test_output=result["output"], + test_expected_output=str(["expected_output"]), + test_context=result["context"][0], + test_params=str(r), # Add params to the database table + ), + ) return results -async def main(): +async def main(): metadata = { "version": "1.0", "agreement_id": "AG123456", @@ -457,28 +585,32 @@ async def main(): test_set = [ { "question": "Who is the main character in 'The Call of the Wild'?", - "answer": "Buck" - }, - { - "question": "Who wrote 'The Call of the Wild'?", - "answer": "Jack London" + "answer": "Buck", }, + {"question": "Who wrote 'The Call of the Wild'?", "answer": "Jack London"}, { "question": "Where does Buck live at the start of the book?", - "answer": "In the Santa Clara Valley, at Judge Miller’s place." + "answer": "In the Santa Clara Valley, at Judge Miller’s place.", }, { "question": "Why is Buck kidnapped?", - "answer": "He is kidnapped to be sold as a sled dog in the Yukon during the Klondike Gold Rush." + "answer": "He is kidnapped to be sold as a sled dog in the Yukon during the Klondike Gold Rush.", }, { "question": "How does Buck become the leader of the sled dog team?", - "answer": "Buck becomes the leader after defeating the original leader, Spitz, in a fight." - } + "answer": "Buck becomes the leader after defeating the original leader, Spitz, in a fight.", + }, ] # "https://www.ibiblio.org/ebooks/London/Call%20of%20Wild.pdf" - #http://public-library.uk/ebooks/59/83.pdf - result = await start_test(".data/3ZCCCW.pdf", test_set=test_set, user_id="677", params=None, metadata=metadata, retriever_type='llm_context') + # http://public-library.uk/ebooks/59/83.pdf + result = await start_test( + ".data/3ZCCCW.pdf", + test_set=test_set, + user_id="677", + params=None, + metadata=metadata, + retriever_type="llm_context", + ) # # parser = argparse.ArgumentParser(description="Run tests against a document.") # parser.add_argument("--url", required=True, help="URL of the document to test.") @@ -520,8 +652,9 @@ async def main(): # params = None # #clean up params here # await start_test(args.url, test_set, args.user_id, params=None, metadata=metadata) -if __name__ == "__main__": + +if __name__ == "__main__": asyncio.run(main()) # delete_mems = await memory.dynamic_method_call(dynamic_memory_class, 'delete_memories', @@ -541,4 +674,4 @@ if __name__ == "__main__": # results = await asyncio.gather( # *(run_testo(test, loader_settings, metadata) for test in test_params) # ) -# return results \ No newline at end of file +# return results diff --git a/level_3/vectorstore_manager.py b/level_3/vectorstore_manager.py index df0f652c2..217318b7e 100644 --- a/level_3/vectorstore_manager.py +++ b/level_3/vectorstore_manager.py @@ -6,7 +6,9 @@ logging.basicConfig(level=logging.INFO) import marvin from dotenv import load_dotenv from sqlalchemy.orm import sessionmaker -from database.database import engine # Ensure you have database engine defined somewhere +from database.database import ( + engine, +) # Ensure you have database engine defined somewhere from models.user import User from models.memory import MemoryModel from models.sessions import Session @@ -14,6 +16,7 @@ from models.testset import TestSet from models.testoutput import TestOutput from models.metadatas import MetaDatas from models.operation import Operation + load_dotenv() import ast import tracemalloc @@ -29,7 +32,7 @@ load_dotenv() OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "") marvin.settings.openai.api_key = os.environ.get("OPENAI_API_KEY") -from vectordb.basevectordb import BaseMemory +from vectordb.basevectordb import BaseMemory class DynamicBaseMemory(BaseMemory): @@ -41,7 +44,7 @@ class DynamicBaseMemory(BaseMemory): index_name: str, db_type: str, namespace: str, - embeddings=None + embeddings=None, ): super().__init__(user_id, memory_id, index_name, db_type, namespace, embeddings) self.name = name @@ -50,7 +53,6 @@ class DynamicBaseMemory(BaseMemory): self.inheritance = None self.associations = [] - async def add_method(self, method_name): """ Add a method to the memory class. @@ -102,6 +104,7 @@ class DynamicBaseMemory(BaseMemory): # Optionally, establish a bidirectional association associated_memory.associations.append(self) + class Attribute: def __init__(self, name): """ @@ -115,6 +118,7 @@ class Attribute: """ self.name = name + class Method: def __init__(self, name): """ @@ -130,9 +134,17 @@ class Method: class Memory: - def __init__(self, user_id: str = "676", session=None, index_name: str = None, - knowledge_source: str = None, knowledge_type: str = None, - db_type: str = "weaviate", namespace: str = None, memory_id:str =None) -> None: + def __init__( + self, + user_id: str = "676", + session=None, + index_name: str = None, + knowledge_source: str = None, + knowledge_type: str = None, + db_type: str = "weaviate", + namespace: str = None, + memory_id: str = None, + ) -> None: self.load_environment_variables() self.memory_id = memory_id self.user_id = user_id @@ -145,12 +157,16 @@ class Memory: self.short_term_memory = None self.namespace = namespace self.memory_instances = [] - #inspect and fix this - self.memory_class = DynamicBaseMemory('Memory', user_id, str(self.memory_id), index_name, db_type, namespace) + # inspect and fix this + self.memory_class = DynamicBaseMemory( + "Memory", user_id, str(self.memory_id), index_name, db_type, namespace + ) + def load_environment_variables(self) -> None: load_dotenv() self.OPENAI_TEMPERATURE = float(os.getenv("OPENAI_TEMPERATURE", 0.0)) self.OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "") + @classmethod async def create_memory(cls, user_id: str, session, **kwargs): """ @@ -160,14 +176,17 @@ class Memory: existing_user = await cls.check_existing_user(user_id, session) if existing_user: - # Handle existing user scenario... memory_id = await cls.check_existing_memory(user_id, session) - logging.info(f"Existing user {user_id} found in the DB. Memory ID: {memory_id}") + logging.info( + f"Existing user {user_id} found in the DB. Memory ID: {memory_id}" + ) else: # Handle new user scenario... memory_id = await cls.handle_new_user(user_id, session) - logging.info(f"New user {user_id} created in the DB. Memory ID: {memory_id}") + logging.info( + f"New user {user_id} created in the DB. Memory ID: {memory_id}" + ) return cls(user_id=user_id, session=session, memory_id=memory_id, **kwargs) @@ -181,9 +200,7 @@ class Memory: @staticmethod async def check_existing_user(user_id: str, session): """Check if a user exists in the DB and return it.""" - result = await session.execute( - select(User).where(User.id == user_id) - ) + result = await session.execute(select(User).where(User.id == user_id)) return result.scalar_one_or_none() @staticmethod @@ -198,21 +215,42 @@ class Memory: async def handle_new_user(user_id: str, session): """Handle new user creation in the DB and return the new memory ID.""" - #handle these better in terms of retry and error handling + # handle these better in terms of retry and error handling memory_id = str(uuid.uuid4()) new_user = User(id=user_id) await add_entity(session, new_user) - memory = MemoryModel(id=memory_id, user_id=user_id, methods_list=str(['Memory', 'SemanticMemory', 'EpisodicMemory']), - attributes_list=str(['user_id', 'index_name', 'db_type', 'knowledge_source', 'knowledge_type', 'memory_id', 'long_term_memory', 'short_term_memory', 'namespace'])) + memory = MemoryModel( + id=memory_id, + user_id=user_id, + methods_list=str(["Memory", "SemanticMemory", "EpisodicMemory"]), + attributes_list=str( + [ + "user_id", + "index_name", + "db_type", + "knowledge_source", + "knowledge_type", + "memory_id", + "long_term_memory", + "short_term_memory", + "namespace", + ] + ), + ) await add_entity(session, memory) return memory_id async def add_memory_instance(self, memory_class_name: str): """Add a new memory instance to the memory_instances list.""" - instance = DynamicBaseMemory(memory_class_name, self.user_id, - self.memory_id, self.index_name, - self.db_type, self.namespace) + instance = DynamicBaseMemory( + memory_class_name, + self.user_id, + self.memory_id, + self.index_name, + self.db_type, + self.namespace, + ) print("The following instance was defined", instance) self.memory_instances.append(instance) @@ -228,8 +266,6 @@ class Memory: if existing_user: print(f"ID before query: {self.memory_id}, type: {type(self.memory_id)}") - - # attributes_list = await self.session.query(MemoryModel.attributes_list).filter_by(id=self.memory_id[0]).scalar() attributes_list = await self.query_method() logging.info(f"Attributes list: {attributes_list}") @@ -239,10 +275,17 @@ class Memory: else: logging.warning("attributes_list is None!") else: - attributes_list = ['user_id', 'index_name', 'db_type', - 'knowledge_source', 'knowledge_type', - 'memory_id', 'long_term_memory', - 'short_term_memory', 'namespace'] + attributes_list = [ + "user_id", + "index_name", + "db_type", + "knowledge_source", + "knowledge_type", + "memory_id", + "long_term_memory", + "short_term_memory", + "namespace", + ] await self.handle_attributes(attributes_list) async def handle_attributes(self, attributes_list): @@ -259,49 +302,66 @@ class Memory: # methods_list = await self.session.query(MemoryModel.methods_list).filter_by(id=self.memory_id).scalar() methods_list = await self.session.execute( - select(MemoryModel.methods_list).where(MemoryModel.id == self.memory_id[0]) + select(MemoryModel.methods_list).where( + MemoryModel.id == self.memory_id[0] + ) ) methods_list = methods_list.scalar_one_or_none() methods_list = ast.literal_eval(methods_list) else: # Define default methods for a new user methods_list = [ - 'async_create_long_term_memory', 'async_init', 'add_memories', "fetch_memories", "delete_memories", - 'async_create_short_term_memory', '_create_buffer_context', '_get_task_list', - '_run_main_buffer', '_available_operations', '_provide_feedback' + "async_create_long_term_memory", + "async_init", + "add_memories", + "fetch_memories", + "delete_memories", + "async_create_short_term_memory", + "_create_buffer_context", + "_get_task_list", + "_run_main_buffer", + "_available_operations", + "_provide_feedback", ] # Apply methods to memory instances for class_instance in self.memory_instances: for method in methods_list: class_instance.add_method(method) - - async def dynamic_method_call(self, dynamic_base_memory_instance, method_name: str, *args, **kwargs): + async def dynamic_method_call( + self, dynamic_base_memory_instance, method_name: str, *args, **kwargs + ): if method_name in dynamic_base_memory_instance.methods: method = getattr(dynamic_base_memory_instance, method_name, None) if method: return await method(*args, **kwargs) - raise AttributeError(f"{dynamic_base_memory_instance.name} object has no attribute {method_name}") + raise AttributeError( + f"{dynamic_base_memory_instance.name} object has no attribute {method_name}" + ) async def add_dynamic_memory_class(self, class_name: str, namespace: str): logging.info("Here is the memory id %s", self.memory_id[0]) - new_memory_class = DynamicBaseMemory(class_name, self.user_id, self.memory_id[0], self.index_name, - self.db_type, namespace) + new_memory_class = DynamicBaseMemory( + class_name, + self.user_id, + self.memory_id[0], + self.index_name, + self.db_type, + namespace, + ) setattr(self, f"{class_name.lower()}_class", new_memory_class) return new_memory_class async def add_attribute_to_class(self, class_instance, attribute_name: str): - #add this to database for a particular user and load under memory id + # add this to database for a particular user and load under memory id await class_instance.add_attribute(attribute_name) async def add_method_to_class(self, class_instance, method_name: str): - #add this to database for a particular user and load under memory id + # add this to database for a particular user and load under memory id await class_instance.add_method(method_name) - async def main(): - # if you want to run the script as a standalone script, do so with the examples below # memory = Memory(user_id="TestUser") # await memory.async_init() @@ -318,10 +378,10 @@ async def main(): "validity_start": "2023-08-01", "validity_end": "2024-07-31", } - loader_settings = { - "format": "PDF", - "source": "URL", - "path": "https://www.ibiblio.org/ebooks/London/Call%20of%20Wild.pdf" + loader_settings = { + "format": "PDF", + "source": "URL", + "path": "https://www.ibiblio.org/ebooks/London/Call%20of%20Wild.pdf", } # memory_instance = Memory(namespace='SEMANTICMEMORY') # sss = await memory_instance.dynamic_method_call(memory_instance.semantic_memory_class, 'fetch_memories', observation='some_observation') @@ -330,26 +390,28 @@ async def main(): from database.database import AsyncSessionLocal async with session_scope(AsyncSessionLocal()) as session: - memory = await Memory.create_memory("676", session, namespace='SEMANTICMEMORY') + memory = await Memory.create_memory("676", session, namespace="SEMANTICMEMORY") # Adding a memory instance await memory.add_memory_instance("ExampleMemory") - # Managing memory attributes existing_user = await Memory.check_existing_user("676", session) print("here is the existing user", existing_user) await memory.manage_memory_attributes(existing_user) # aeehuvyq_semanticememory_class - await memory.add_dynamic_memory_class('semanticmemory', 'SEMANTICMEMORY') - await memory.add_method_to_class(memory.semanticmemory_class, 'add_memories') - await memory.add_method_to_class(memory.semanticmemory_class, 'fetch_memories') + await memory.add_dynamic_memory_class("semanticmemory", "SEMANTICMEMORY") + await memory.add_method_to_class(memory.semanticmemory_class, "add_memories") + await memory.add_method_to_class(memory.semanticmemory_class, "fetch_memories") # sss = await memory.dynamic_method_call(memory.semanticmemory_class, 'add_memories', # observation='some_observation', params=params, loader_settings=loader_settings) - susu = await memory.dynamic_method_call(memory.semanticmemory_class, 'fetch_memories', - observation='some_observation') + susu = await memory.dynamic_method_call( + memory.semanticmemory_class, + "fetch_memories", + observation="some_observation", + ) print(susu) # Adding a dynamic memory class @@ -360,16 +422,14 @@ async def main(): # memory_instance.add_method_to_class(procedural_memory_class, 'add_memories') # - # print(sss) # load_jack_london = await memory._add_semantic_memory(observation = "bla", loader_settings=loader_settings, params=params) # print(load_jack_london) - modulator = {"relevance": 0.1, "frequency": 0.1} + modulator = {"relevance": 0.1, "frequency": 0.1} if __name__ == "__main__": import asyncio asyncio.run(main()) - From 8c177fbc72e1b41d6335624703b1694ae011f9ba Mon Sep 17 00:00:00 2001 From: Vasilije <8619304+Vasilije1990@users.noreply.github.com> Date: Fri, 27 Oct 2023 15:17:43 +0200 Subject: [PATCH 8/9] fixes to chunking logic and optimizations --- level_3/docker-compose.yml | 48 ++++++++++----------- level_3/rag_test_manager.py | 83 +++++++++++++++++++++---------------- 2 files changed, 71 insertions(+), 60 deletions(-) diff --git a/level_3/docker-compose.yml b/level_3/docker-compose.yml index be58cf30c..7444aca82 100644 --- a/level_3/docker-compose.yml +++ b/level_3/docker-compose.yml @@ -1,31 +1,31 @@ version: "3.9" services: - neo4j: - image: neo4j:latest - container_name: neo4j - ports: - - "7474:7474" - - "7687:7687" - environment: - - NEO4J_AUTH=neo4j/pleaseletmein - - NEO4J_PLUGINS=["apoc"] - networks: - - promethai_mem_backend +# neo4j: +# image: neo4j:latest +# container_name: neo4j +# ports: +# - "7474:7474" +# - "7687:7687" +# environment: +# - NEO4J_AUTH=neo4j/pleaseletmein +# - NEO4J_PLUGINS=["apoc"] +# networks: +# - promethai_mem_backend - promethai_mem: - networks: - - promethai_mem_backend - build: - context: ./ - volumes: - - "./:/app" - environment: - - HOST=0.0.0.0 - profiles: ["exclude-from-up"] - ports: - - 8000:8000 - - 443:443 +# promethai_mem: +# networks: +# - promethai_mem_backend +# build: +# context: ./ +# volumes: +# - "./:/app" +# environment: +# - HOST=0.0.0.0 +# profiles: ["exclude-from-up"] +# ports: +# - 8000:8000 +# - 443:443 postgres: image: postgres diff --git a/level_3/rag_test_manager.py b/level_3/rag_test_manager.py index 1b395764e..1dbe0fcaa 100644 --- a/level_3/rag_test_manager.py +++ b/level_3/rag_test_manager.py @@ -110,15 +110,13 @@ async def fetch_job_id(session, user_id=None, memory_id=None, job_id=None): return None -async def fetch_test_set_id(session, user_id, id): +async def fetch_test_set_id(session, user_id, content): try: # Await the execution of the query and fetching of the result - result = await session.execute( - session.query(TestSet.id) - .filter_by(user_id=user_id, id=id) + result = await session.execute(select(TestSet.id) + .filter_by(user_id=user_id, content=content) .order_by(TestSet.created_at) - .desc() - .first() + ) return ( result.scalar_one_or_none() @@ -221,13 +219,11 @@ def generate_param_variants( dict(zip(keys, combination)) for combination in itertools.product(*values) ] + logging.info("Param combinations for testing", str(param_variants)) + return param_variants -# Generate parameter variants and display a sample of the generated combinations - - - async def generate_chatgpt_output(query: str, context: str = None, api_key=None, model_name="gpt-3.5-turbo"): """ @@ -372,7 +368,7 @@ async def start_test( async with session_scope(session=AsyncSessionLocal()) as session: job_id = await fetch_job_id(session, user_id=user_id, job_id=job_id) - test_set_id = await fetch_test_set_id(session, user_id=user_id, id=job_id) + test_set_id = await fetch_test_set_id(session, user_id=user_id, content=str(test_set)) memory = await Memory.create_memory( user_id, session, namespace="SEMANTICMEMORY" ) @@ -395,6 +391,16 @@ async def start_test( "Data location is %s", data_location ) # Assume data_location_route is predefined test_params = generate_param_variants(included_params=["chunk_size"]) + if params: + data_format = data_format_route( + data + ) # Assume data_format_route is predefined + logging.info("Data format is %s", data_format) + data_location = data_location_route(data) + logging.info( + "Data location is %s", data_location + ) + test_params = generate_param_variants(included_params=params) print("Here are the test params", str(test_params)) @@ -499,6 +505,7 @@ async def start_test( context = "" logging.info("Loading and evaluating test set for LLM context") test_result = await run_eval(test_qa, context) + test_eval_pipeline.append(test_result) elif retriever_type == "single_document_context": if test_set: @@ -511,6 +518,7 @@ async def start_test( for test_qa in test_set: result = await run_search_element(test_qa, test_id) test_result = await run_eval(test_qa, result) + test_result.append(test) test_eval_pipeline.append(test_result) await memory.dynamic_method_call( dynamic_memory_class, "delete_memories", namespace=test_id @@ -537,34 +545,37 @@ async def start_test( elif retriever_type == "single_document_context": for param in test_params: + logging.info("Running for chunk size %s", param["chunk_size"]) test_id, result = await run_test( param, loader_settings, metadata, retriever_type=retriever_type ) # Add the params to the result - results.append([result, param]) + # result.append(param) + results.append(result) - for b, r in results: - for result_list in b: - for result in result_list: - await add_entity( - session, - TestOutput( - id=test_id, - test_set_id=test_set_id, - operation_id=job_id, - set_id=str(uuid.uuid4()), - user_id=user_id, - test_results=result["success"], - test_score=str(result["score"]), - test_metric_name=result["metric_name"], - test_query=result["query"], - test_output=result["output"], - test_expected_output=str(["expected_output"]), - test_context=result["context"][0], - test_params=str(r), # Add params to the database table - ), - ) + for b in results: + logging.info("Loading %s", str(b)) + for result, chunk in b: + logging.info("Loading %s", str(result)) + await add_entity( + session, + TestOutput( + id=test_id, + test_set_id=test_set_id, + operation_id=job_id, + set_id=str(uuid.uuid4()), + user_id=user_id, + test_results=result["success"], + test_score=str(result["score"]), + test_metric_name=result["metric_name"], + test_query=result["query"], + test_output=result["output"], + test_expected_output=str(["expected_output"]), + test_context=result["context"][0], + test_params=str(chunk), # Add params to the database table + ), + ) - return results + return results async def main(): @@ -607,9 +618,9 @@ async def main(): ".data/3ZCCCW.pdf", test_set=test_set, user_id="677", - params=None, + params=["chunk_size", "search_type"], metadata=metadata, - retriever_type="llm_context", + retriever_type="single_document_context", ) # # parser = argparse.ArgumentParser(description="Run tests against a document.") From 22e9968012060649d78e7a1e19ff108b9aeb27ce Mon Sep 17 00:00:00 2001 From: Vasilije <8619304+Vasilije1990@users.noreply.github.com> Date: Sat, 28 Oct 2023 20:02:09 +0200 Subject: [PATCH 9/9] fixes to chunking logic and optimizations --- level_3/.data/dssd.pdf | Bin 0 -> 472539 bytes level_3/models/operation.py | 1 + level_3/rag_test_manager.py | 36 +- .../charts/Best_performing_output_2.yaml | 69 +++ .../charts/Count_of_tests_done_3.yaml | 71 +++ .../charts/Worst_and_best_Questions_4.yaml | 69 +++ .../dashboards/Overview_Dashboard_1.yaml | 116 +++++ .../databases/PostgreSQL.yaml | 13 + .../datasets/PostgreSQL/explore_query.yaml | 410 ++++++++++++++++++ .../superset_dashboard_configs/metadata.yaml | 3 + level_3/vectordb/basevectordb.py | 2 +- level_3/vectordb/vectordb.py | 2 +- 12 files changed, 783 insertions(+), 9 deletions(-) create mode 100644 level_3/.data/dssd.pdf create mode 100644 level_3/superset/superset_dashboard_configs/charts/Best_performing_output_2.yaml create mode 100644 level_3/superset/superset_dashboard_configs/charts/Count_of_tests_done_3.yaml create mode 100644 level_3/superset/superset_dashboard_configs/charts/Worst_and_best_Questions_4.yaml create mode 100644 level_3/superset/superset_dashboard_configs/dashboards/Overview_Dashboard_1.yaml create mode 100644 level_3/superset/superset_dashboard_configs/databases/PostgreSQL.yaml create mode 100644 level_3/superset/superset_dashboard_configs/datasets/PostgreSQL/explore_query.yaml create mode 100644 level_3/superset/superset_dashboard_configs/metadata.yaml diff --git a/level_3/.data/dssd.pdf b/level_3/.data/dssd.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e610a35c019d568759074b9b9de95ac3c27e339d GIT binary patch literal 472539 zcmb@v2fS@nbuNw-1J)NsO`^FLOiYXj_E=GZ*#1F{#%@rqT`+(?OA-sFSfXg2$um)6 zjIks>eHIXvegx@UqzMQD7Z606V9ZmK^S(01m}9NI&*9?#%^zpZQNHnwxz--6bMBgZ zuC@K{yX^WqJ3jEC+iZXF=2K6<-8K*3@SqKQzx37HJoF)t*kvka>I@fdFVDf?6&b$uXyEt z8+LrqgSOdW*H^uEzm5BB*kRY#?y=v-T{gaK?>#r}@Pt?Gx9{#7_j%&puY3L8du`ln zzYUMrW``&4{o1|vdDiRqc-h7cJM6OYjjwvy#%Dh12^)5J*3|X z>Gz-e@ICi?=2LFB({Xn@VCU_2JNPG`+~JBpeeGLMzIxAhyz!a8apFCWyX>M{-sfib zIPRH$_=Vk0-v0OxJ?9I%9rfqO|Jk#D`P8RB^j`1%(+eN}@}C@er_UaIi|3v3gS&k8 z;9q*)aXvK-J!xx^i-Oqk|!{2Pb?ay!c*8bNWar%>w+pz!V9{Ide zAG7OAzI5<;N5AHbUEa9MRqubqwgzdh;UZ#nmGPWs&o z&;RSs9r@7rJZH~`?sfRJfAp^RoqdPn{^NzWzWX8Ss%Onv*#Z6-}d_B+yB=)cKg6< z?)-xPedu=2z5ADTe9Q}<^LLLr=dXVCfoFc|Lp$zt>pc(Hal^~@Jm8-`wfV=7x%;c{ z{o==caL3=f-=6Q^^PRtO@JV-g+kqP%y!{hTK4#mUUbE8~4>a=B57+M16B+v-&>oZBKjlvwv-?Yp;3hYj4=){QV#Pw7&(uHN;HZ+Oj~x4p+-eQ~$fyy0P+e)D(V{r+Q*|HP9&dc*#gzv?>k|a>yJ3_!=Ksxb7wsM z)6c&7$8LSx6aVGjcR2W4KR@H(`*_5p-s$o~PCfFAxB0<)?za1pkKFyjdmi^IuiWFUAARNR9)8BNKfLi9 zoA3Fi^N#tC)86o@`y6`ZpFiO4yMN+~KRR{g3nxGQKmPI9_kR8ZKmXx|-`Vv8kG=md zef#3q-~MsCz4uusZru41UwZKIx4z@WhkxWl8?JidkIuc>(O>?^mo_~5z?W`)o2~cR zxbq?3+wP9LetFNG4>@bQJHGgaf54hbA?(ph6?RDjYAGg;r zcmDVezje@?{`)Jgy3>~rKVrB2&%Ng7kA1_LfA{dGJ@B=A|HUEoMw)0~TJK!znzx3mu-t9HN@yoY4_}d@2{Ev4$;4i=O;tOy7=F2br zKkvTVZT{l6r~kn{?|A4Fw|>#in~uEXtULbd6TYUI{_uc+Zo9?~SgZ8@BV>kWDPoI0=t)B9z zCtdcy&%STNPj9vBOP;X%QE&eCzu)@x@BFjv?|-Xj?SI+lU-OBVoV0nb=j^`ilkdOd z*0+1#sn7e_Up)Q5yFU2sce(Su@4v(Ucm2C}{L&rYwDXTId-$I`W79`&b>wY7@wTtM z{C7Y8g10{U$lLwvz3zX_d-vb#VS7IBPtVz~)i$@;|MRcC;hoRi@Xd>^-FL4yZaQzf z$3Oq)&pGyX=f3oI?|RdHS1x$g!LK>@!Ds*1pFC&NTkpH^yc<6K?fswn$ejh5R!(PJNYzgzyxrmsHrRgeDoCx7$!=icWw@BH$8 z_qh8VKJ!;E{^(EM`_6Np{Dd9v@R<+Z_vg3$#K*5W`P18PxAOlMzx5GkKI>_(+~NEe-|L#g_PXGp z3*LX}XLmj4$2)!Vh|A8|>IXNRu>Xs{y2s6S_|W|i`{uj1e&NqQzT3e!-1|ZIeClN{ zx%lU=I{b#69(n7(Ip?nL_}0I_<&)d~(&s<-{T=T6${h}P;6Zmg_hZMt=+!%Z`{(c4 zZ^sip@DI=W$a|mhiGSMW_M!rU?cYED@89{>-+t;&oB!~xf4lX`n@@lI zAARc|c6iJ`{LMaJxb;=5x7+5CTc7*5ciio-@Bf&4Jnao9Y(DH?zxTeEzIWd{y!oTo zo%HkPKm03C`>mH8zWYI6zu|Eo_|o5h=P@@s^Iz}srk~yAx8L!&e>(Sm?|8y72S4K> zzjg3wpFHo=XFcbmpLxmuI{7K*|JgAI@B4rL$GO-3`-}c*kF9?4sIP6m`{Q1)y4A}+ zeC)q1UXyp+F)qM6J@`QndE`U$vb^JiZqjx6VGqUM9q~8FgCF{kZSeO5|LoX(k9}UZ zFRtvn@3V2wSG{b%z4yT%D7rkq;dOiMy8%HPHazyR_(SCv{)2_r_4*@4hcdZ}-)yU& zt=@90tyWf6R^2S2ueJ(l)g5~_KrKW+yulKN)V6#yx#>kxd7M*B30g7>&vXRUT<0?y z9BpzFV^@YeB*sD0iSsxVb3(uFy6dh*yQY#{#rDHen-I~%a_Oa)T(WWr&G>P<=%R}t z7*ax>r}NH(>D+UT2If28Is5DZ8oW!SQ_)U2B^?M_IfRGh;0bL2;! zoC8E}wK0n{DK!+1G30D!Y9KPh9N*AQjLB7OxHw$@BQyvu#Z0=odNnI?s9oyBK4Mr@ ziX43=T#6SejJ6>_b1A|kI4W_=OHnadizGhjq!Y>F6dpoZJ@(jRA)*vV_M=&f?G(o+ z24hUoQ1>duLn;`BxUzB(nk`F85ssu6U$BzB=~jK3!ePc=us3%FQ?+SGIWd9C31Q4) zdi-*=sxiAGE0bBfvCHi&$9(1_OoApe#_LszKSCj1cU{YI_0=pz=W6C5ibO;uSs(-w zO7TJ)zV|(jtE=aqe?G?Veixlekv4izh$zLuyj%h>9FR^yqb8$D5#@No2`3y6!|^hI zi!DoW1g^Lg0m~M?XVhh36Mf(hASQ=+MLmg7)vju%*zMhR&MU-OFX+$Mn?Mq@|SAT$Z z1>5DY@uxK=!0%`_#!INqwRnLlF-p-0BUOsZTHTpvu$_MT%F5~AW;;!ka*LIvc(SA2 zue4G;?zrOss!}Y{F{>f1tQ>K~5r?xK#&#&$z&BVJ!F$j__+ceRDQZ4MPSCc>RA+-6 zvJk|#$e&|KU_I_Jv3Hq&w}n~m@@hclU}TsBH=BK4tKQjacLF;HM7P7GGA zVI^K|8DS8vyz)v`qB%w>UPc3P8b>L{IiU4>Y!uwSi>45&4n!%EBHNj4fyUrclum>l zt1QKnS&U(l16M^{7LRYGNVq|P3m&tqtQ?6#oR{LE-}uHi9Aoey9DG_cY^6#uEXq^f zs>+yc#1GP%(prKdx-+>u<2bkhrzFiL^mPIxr=i&gO;5O77F!Y}L`Ex3q+zI*)T2|& z@FgSsie6p4Mx_`Kn16^uR4JN6{pH`s@cqlO7NIB@%u7*IfIa^g z;*n5W*4DBImMm&P0ND}+G&{4m9_Gj?pG^!{Yy>QwUb2Qi2jx^i00t!?Y9Y+^fm}xl z)*dSpLukZ(MGSdwQ84)_NfV40#Y-Y2-I`rMmQUbZc+WlOoOGUz=HRqs2J7TPG4Zxy z(Yh1^?_lL!R)M`5H>ngePtnDvC_Ao-u;)$1RhQzyo>F95C`H9jORsU0w$u`G5;2O} zJQDLXhf)OA*(-3W=DDXY5iL&xPrO!!x1=DUKYr{=P8!uhC_MpNFp4oxAe3umV25Dz zyv5C03@SRR(GN%IA=q-UeCy8OJe6WWSc&VFqRztVv=moQ9_e!?x*EbfDLpF_Yh|7t z98^zUrI@w2vcjt(?<>ZsfzV44F>^xc#+R$q66}K7n~z0(Ovc`vT8^*=bw*dF6bg|B ze?Y-E2;i2&PR?2O5k?{*GPeW6%;6VlN{&D>Uxy!+V$6v~mf}bx7@=xIn@g*!7qb*E zy2$spmrd+Ev~#iA61j12k(C%~27n{Q=EiCZ)JKDMbY=b|z$OG8!}NkmAFqncUg!iMMUR0 zURjAsT;~V{=MnN3^eF-K3|3Z7Jn@7RR{iH;Ro;RCaIc}tN4Jb!P|%oQSKTdEIX$g5;(%nR2AQ1a0%?JZWBSK`CCS`-&G_02EeR&gX4KF1Mih z49ad{~sZc>0&k2nH$G_JN-%3iZW zDN-M&hoy+Mmi0?f5k423W2iNTki1!XhOv(T487@aX-Iz^e+cr;jdPvx*#?)a5g!O@ z!dj3_U1~C{H9B&sH|gL^6vkR@$-|TH8iUPanSCs`TyZ&@O7XJG28Oh##m$rKOG=SU zIvUM`8rlegf_vOp_JhDu#DIlAw1I-uS6dW2t3;OEFhQXnKT(i$%X|cTm*Sxo*^_my zg=wu)OnAVOKqESh_xTU3!@C;Rour7tB4{KzXFK66I z2HhG`L=G>aML#LIGs?bCYkI(ANJx7$IwF>vmAkRCGQrE z18<2vexgYvkM%Y~7($cl8vdo2nRz#d?FT=YO#wD9{K@Up$x_5>OH$hteH<6GoB>J^ zEy59m)fO+eFq3dO@Up1VqQ{MQxV_rKN*smf3Tzhg`}!9G5%R0^wGkp{(XT`)Vzs3j zS6g~55~fn5z(!;Uq1q^07FvPg1USS;Sa1`W%tnT_W=f}=nunH{I3%Z-yQMQlp()HX zs3YzsNySP=M0Rcxm0yBX@e7?D7FtS0xSk6Qu}M6^x-6b2_-i-HMT= z*ou*XEJcoPo)f1gW2z>mNv=3Yfl7^DBSsI2EutpFaCAVIV_qgDyiK5Tn{zmcQ$h=& zOfpXuqo=l}4H^U0v$Gm=gc3&?f(P{Y7WXiLm$$glT86m@_@!)EZGq?yf)s3JL69vx zw;_2Lzo2H@x1xaBiAr9ucSD!s{AB9ijv|Mc=Gbwyk3^G+8I zsFc!_V;KULBr($MLy{o~XtO;DQtu4#< zwsIW9L>7=P8(jC25@~uWv}26#O~RJ zs3DIq=HSVQgl?-bjKsOxf?~`{9GnBTh9q9$<4fG&m+D%?YKstgTF4?dI_|PED>oEu zVI?BKt1XU{gEC?lw?lg8qLz`ZTU9&-#NH=c{<>K6C+zt0$x>O-{{eSPL-9apSg0-H8XS6j%b zTio2+f~M6LaM11sg{8=^aFYn?=$K6G--4i01d2vB3P&41oq;q#vLjU4wD1?Tm`;rI zQZ#wZPlDi?-mc|6fz8u3$>HyI!6$~LiX+ue{4Lv5B$N%-Hdr;%PW!VLw4%c5c=pxu ztkRIOStom2=*^=$Cx_GJOYY(3u${_Y>qc zE3dXF{>$2 zg^SQ%C80^xqZ_3-z>(M~ZJwOkm`e^oL`zGgNEKdMtd`Kd3o_A#EFocwBOq$<#K^%~ z+S()x5;9Q^n*|jvIWW2r?p&Uy1Jj$6ppFd%6DL<&aF3fd{J3}A_iJy9KUz5B!ejx~ zQ6_7A`Y?|(m&<;Uh1uAY*QKbXKbp9oz~v52rI>@~7Uxw+S!!>KqLG!`5=g;=&8nevF;N_ zfSOcSqA!RbrNhIRT1j|j4*jVg&8;oVYO!G;vJ~57_$BT*d7jT~;V;?O9E*;$P~0!V zjSD+*YS1xG(cNIw3^0WUK_DHR6wAWPW?{_8l0pMh2pJb=y5>aSa7aVI;Kw&{wZ+V_ z+7eLP)c0r@subsS247Uk8l`BqNJk}@OQOI=pBq>HQZ{Sj?h{koB-ECpk5(z>AGm$a z;Ehz7@oUa(6}NJP2q(UolM~5Y>yC~M28Ax0u1E)u;7kJ(hd3VwOtlfTASuwDSxjcm zLNCxo#58fCBp4FC_=;{WRA3w;gNSK%h44GvDn)7XvJ$!4l2DBCNtH=pbp7+B3}hQh zPZ*h6^Py^!RWQS8i2|EP_AEtyg%(DlEmM96xB2< zthS`;Swr(V06#q*(4!PjIi)f-Az{F{=@vIa<4IyPvJ!bi2O=Ev|4EofKBu%wOGvyb zx&g3$DFWt6R4>caY%cW$Q|i(JPe@FnTw5TBd2$-3?4)coLkmgq0OUw)fl6o$AqwAv zrWE2B;gZ@dZf|WFRDO~eXIe29N^LXXM;f)46$azZw;$5V5rrI;=gx3eY#S%H|E zZIhY)YTc4DM$V!z>j?#85LvFVGT%48h zK$}8$75lfiz1lL^u(yRFGvEAVo zubkvxc2UGL?eO>}wD$NWTo(IrAzsZkicH_GtI+aMV)SO?jYS_-SWt+wQcS3iUuQrj z&eqYDlqNM`!)l zutCmJ%$SDc-JEQ8`|(ZF4F%k1r52f1U5cKH!r+~iqBmJZ0l~CfDEx67Gk`vn zkpa@I85qW#{R}fzBf=Tk%k43>I1!}+;(3}%c62dEGek@r_B3Z{!N^#*HQ;den8YqY z4`l3ZsmOeM)8gJ1)5YwONBZD4r9s+%YCv9#;MlZD-{U64(Y&3b#(h@4Dqgw@)x?;^eCL>dHgm%5k+N{3CJ?`YJVC8S@ZE4K?7j&A*tItn@q}l06 zq&|DxIskuc$C?Tyq7^ASvvNWt4B{PJy-JvvT z;Elzx?1u+9X+r@XYUd!vCqZs*!F~c8XoIHu1t-4W>;|im1inY z=s>t73|MhVpi{p2*gmr0NUB5*%5^2fGYI1ve|Pkfs~FCWA?YvM7VfT0k_ z-WJD1oTB|yJKR}x9&A5_d7%`8T!AV>Nci~KYnN3_2DiAm20cA)2C?8p6J>h0tVL+dU9mP*_>``k z!%P#yrHzVvf)`|c?v1M12YltQWuPh3&fuh@u zC8ob&A;uB=Q;}Yl{y|05j6d+fYG<=0dhBh1Gn*@M*#XA{GWt@!w?)lhJu(MR5`(E_ zOj?a9r;K0R+cL0;@!@f`rIjK@)n%btK8pSpw=aotCcWC?si8MT>yrvT?kM0)Xu`l9 z1$Zia98)XBaiEd}F%Es=8z@t3**F-ILaaF}&n>AMIMA|`8Bva|X=UWnF|mm*ePk82 zx?ljdtHs-m$yZJax!RI@TM&?qr6?>7Gx~JV59cUFA1U6IanXgmv8ecnB~Ab6?c*DS z7WTFXsxCpcK+95;K_!IO6W~=D3FHU^dabs!l|O$BSZyf;gjR$Uord9*q7+HyN>nNO z#Vt!qQHirl7Un~f+2R)TiN=^`u_$P|n=$VU= zRAm}8mX;b5)NXNewMAI>+?221&k60xWD~eazAVB(f|b=QML$Ul7Q8HD_NfQ;*xRB= z1}`K_TDr`VSZF7@6!R80S6krqdt3V67KR*+{~~V=lUXHgoZV51aA>0yuZpp^g#^ZH z5T9V#1qmm;g-yq9tVk+B#M_8|ol+dBh*OJcS|0wA;3#<_q=S(pi361i*;v};lseZ2 zpFBgIO4nbHCpdWxn(S-_`0)^>(#YqC)iZPOB(ZX)fD!+Kj+4g-JV$KBFU!Dl#IV{j z`ONDkA>L4co7}{UK;4;KYiWC1u$v$N7^bC&tE?hSLkLrjc$sfDEJZvsCyA>RT{-+0FG44)Em?}3LN)PEE{S?shRo_*ikmiJ zwS{`*ThWGsapFBsKGZHFnIUDLu{v+|)D)HoN;HoTx_}2HgOw^K$AR{OlwdTm8Mn^3 z7HVdfnjOZVwh+1p_R-c!8?HnKA5=Kp;}&;USGC%LOCpReMF@VV9iHEmZ*Fn)=FNDL zn1iQNz*TWsDf016`E3Y>@xCHPE&ENbihg_(AwdJtr4#d}OO0#L%ch`j&l&@)8cR_^ z6txDHqTkzM7MG&;6DR>9G;S4{oz{#w3EKkRltnSv6h5YHwm=7DXv%ME_zF_OVkTN{ z#GQbIkLEm7B5tiA5DFVpvz2{*jhpe*eT$nCeoXF>s+*qPBs5D=PZC?q z&JqG#JvssKh628$0A?rCEpBYH3X|E1j3O7?uTE+5!rIxI+(bnv-pt`DLWmI%hRKw~OW0zs_A+Ghpbt1WWpX&@|^DC+r5nNp?5 zr`pY1e%?_;bmPJBs>C`(R${ESh}c~)ap4aJ{rh>8qHA#ioM)!q=_Kb(ZhADeF+W`v zb&ET~GCYV8A?g1?DSBGLTc4@*OarZnO?Gg76veWh(3$eEqQ;Vr2UoBXWReyp3|Xc_ zS|>H}im>3MMbT1>0wQHVw3s8S{5rI2Mq7BvQAqEqBlJI249gAxPxwj4=yoODId;>H`?U(bKC==im_ zh0X+RQ7HzUh724wSh}&xBTtv~i73dwq^1#rn9_PaBTdwL(MPPpi(_bli#^Yk$=2@` zl_aT1kGL+I9hb#Ah*)g_maz=s$QI!-#FNC*s8aN53r&t-U!^0HD=}&H(v~X3g&GO& zB2g`x5ATD{%!{Kkt+*6Dmv}e1w-nT&W+d<-Lc-&l6z@RaR}2z@REiXCTJw}DW@O}< zDl>$kO0tSRnh}$T9^K=I9kJsBk>oVuBrMrI8WHwjOen^|yG)t@7&Xr)TSPW+thUG! z5N>Uu=(a3b*|^$riC$K#up*4AArF~f`@=0P5a+6C@xzMR)RwzqEnubS`RrG2Z zv(5BCU5)4$2W+@KBngUF85R#!7>#8Ux*ZutXCPB8m6v=9GWleyWlhs_m>zObrGSjQDxwt8GQw{r z=W}zs+Tv-^J1s?U!&Y7h#Ee0;s3(cpoTa$9p}-u|o?K+}XvLO}6GR5jr1TQT9DCf5 z4b0;x`-mS?5LM!1ZVZ4a;>#I4@}#r470|Vk1M0Aul}1F;YM6WLT=}a~BvM!llv~4h zxMv#*^dzxB0L)VC#mLnbEVr~ujDKv1n4JXNS9B@n;laA1cV$pugm@zgQ83>k{f<$MQF&rH5qwE|djlq#?^#ex<&A<{R zgfTe`3v6bqI83TBohw|neuftT;fz%6dHd~b_ED#gu{GqbD|3&2FHyv5y0(aG^7 zF$*j43L)NCRFWz|2!_ZEk)`NuR#2)G<6|I5aICgqR1Ae!_d_Yti&CswGz2~O6O1P; z%B)hHKVPvp$<$ipgGEw#G65ZGA*!Z%Gg(}1RB z5|nB{15$y)=3EfzaJy$%LgnCwg7H0We3Ki6c;%IGRRpM)B9>dm>j`RRm5`RI9{;hJ zKBm*#GQRU2qL^70bp4@r*xBM&2=Tt67NCvFN@S!gJ|^sKftGS|Qg>Jg7>?xKoVEnb zH@Bb^<4IzZS7o%lE#x5^hOOp#WQ{Z&n9{b)?udYp1|h3bUHQoaRc#93w|U zGGposBK=tZeON+rm=ewSF%Dv*L&BZ3|*;R^(Z z#cA2HWEMhCrz4_a>WC&cF~}LhSoN08GJ)FUCyC|W767=|vd(*3$jf#qew1WoGu6l# zIbDh{tByRGI2T@R@$u_r8M)dL(`kdZS-BLm9!Fs+r_fH{0?9skeiQU)9o6Kedt0&? z5eg`Jmtssk;E65w-BmDXp>UJN{jZk1i3a8wAGe* zPU>+{j6s)MzCs8d_ljv^m|;;V%DsxcEikCru(Zd*A0YW=^8Vfym=S?qrAQu~1$F5n zB|S~II?mYAtXpa{aiOV>T;(ibIAI!7n3jQDnsxD77&Pf1REM?YpN}TO&8SWv8rdq43DMiA+Q;;Mizy0xdj)+YX_^= zT1FuT5y>Q~Cz@I>MH=*ef(zTfG6?dQTp6NQlebbFds{SBLdG#MG-sZrC>sfRRpf2O z0V%90jGULE5-jbECkZ62{3Q(E6XShFWnza?)T!_pZ~*5Cb0`wR9mXV^j|^F(k&g{- z_hV#4n}iVw(nJ_&gat+vjg-+f#4rY0J~BmHF48$Xma2y^;*+P3x~~WfDv^&88!oQ4 zv{3S}DHTU0t@G2aibS{+FXZ(r|E@#f@LLe8cv*(pcx{XJwvgM+Q;4Ia4nh`lb;|+(0YRLD zc^ow0l%&~&zEVj}L$e#-voDt&U+nF8`c&p@hzdGOLtmbSR%cpS!7Xlxda7N4`CRx( zDH5y*Wu{^V(S$5ao_8o0x)fE9>drsk?`=^j2AX`hv&a?bXqtrOK`f*HT8!dmiL-I7X-LtrGs)f8N%nD1?AfD(I5&pl?bOhS?{TVk)o>Lhv!Mj4bA zX<;Hhn35pX8XKf+Lm&e=JX*13VB`&TN}mhXxX2s|FaUqwzQNq!jJ)+!+*&*e!1e z3a};iL6m2Sew#cBFLZX~AR?F+2RYd-LS&W4l8Mrga~YKISP5aS59EzXOtQjlRx$rf zMwMTk)vZN2Np&S8zbga6%H{ZJrKnsmO-d2QaXE}@A~3it3Z5NIvB@e~a9h#0xZ#Lb z2tkU~77{Tc$0`um>Z&+OF|#B$)}Sc@EQ|KGER-T{Qe%0Q2#^VnC?ih3>XawaX=d(f27@=H3eAb8BgWwmX?8s2&o~$?hA`I?w*_N{ zVx0XCjV%Su2`b)KB&-@s5w%!41x$T)b#q9XrRr~V7mN}Z(<45Q30BB@Z;M_b1SLw5 zm&Mbx+7cybR#??Y2O(MY+Llzt=zqCL7x+jvUKHC^5stRnLKuFq?iZ5Ds4$`aRwO_z zWhMPHD`skc+^Ww72cSXD{{0%q(pOsW$9%TMJKc;&A-4nBcLkNwdm`j zNE7dI`>N>tFu80gj8fDTXxXe=+)x)QF{VkB4i?|z#%haY`20og_9U_LXli>ne_w&sKyjvXQSGibWen4 zONtq4T4&j&YQU$)pbKO16RVbq2nb6G4N)HPKnuQKV3-6?lsMtA>C3YiBMk(WV$D#F zaUwN|c#@c8MzUdV%d$#@XB;9o6rdD!8W7A|-13Vk*+Q`ceJe#Jz<0P$8UYJZ5aPWp zXz7hFa>M5aI|O@6;0ihx4o5^iiYePXWB`C*80aeX}>c`3F6vAyIl(f*^C+g`g z_JLb)I9z6l!c`Y}=%%fuvO50PSs-3!Q2a7S@wbG`SXhWs(cu+BPEM!p=2)H2Mff7X z7b0Rmfza68a?!LBgHutInNOui3Rzi+TULq_W|rbQds{?(%rPp(Jj?i}3(S7PB6CkZ zVXK~$mRmeK$KtLcR$J0C-`nC78iWPvgpM62JE;^CK*}{GNiwKwxgl1guavcfhLLDJ zMG^!8gCz@;rAu9leP&m{qAj?@G!j;31Oy^pmqFEsHs9KkcIF63rc)_S_O_^C7{M!< zNA;rjEpF^>QG-2JTV|&ej!00_qz<8AJ3;PkDNIgEV|#Clj|?!jJOYYnvibBlXFzJB z6#*4pLZ1W}B_g*nfdRCJl&?xC+W$Ha@XIuf~+X)OV;I7&}trq`i2z7XYF zi*~tPG!Pji76m`B_iue|{ zQlJzw6gtHiJPM<*#Fd56f;%YU#lnt_af)T2bTd>hl)5rCVG_}ybj=1M?BTn#z+P7Ys}!MA0& zB{?*dq9bX8ZdVCb*)J)@+}i@Qzr`I-5`#WU(FdhI4>7U;7EM`Fk+&Xd2NxWElGxZ# z5OfSlfKBZf8YWRnVZPSOYAORX9rJ?Tp0vdX4J_4h+6KJ(% zVMD>!z83ol3`fK$MN#^+!EQp?@|wp4HXxV$)GSIEL5b6(7&jVY*lZ~QYL|5ddMQU!mDk@(bOuL(7Pp!7hAK%2Ou>1hadaP13W0oQ_al2ogW`K6*%OnW9FUhofV<9LHB_vf7fUVJYIr z%>fym=;b3K>?onsVAEhS^@H6~25L-Y`q@lUs}h@KvbSYcir7$~^wDi5J$_s+V5A{`tcruV!YqARDaMn;2=zWI zBCUvw6WTf7Hs-!dt1tiQY@JQ zlcA*$K3T$@F5whCqi{@w5H*=uh6i)_Oa@yEvu#2i-kOQYifY79P0}(p$5|>Lx%x3D z26`G6BE}~6HDRTgcSPvE;`rsvJKWQ~En;ybM3o{pS_L;t1@b5tPXs13Psbwcy2XuW z+C^J$Z;N7Ffufhr4mY^biy_B61$3k7glO5%dh}TMOK(n~#&!3$WUkz1RZ&V*r@?a? zvx{je`v_So0YkfoPz+RbGEa`P@G%P^9aN#E#tAEZEd)vEi=oCbwMZj?QM4qGvKZKx zL>tNqT$)OlXMlVGN{gb`0m3$2y726>%h?EopKLgWR&&F?vgcSz>R=C#RIk zI0S~cO$t$^IHn?e0y#^_k&jlV@jaZX8t1TkaxY~-{DOie? zBSJKnoLG)+s$7DWIZh12G(!iP1;vPm!pAYui+kK20^9ypggrSZ2xb;4DXljKgCLU0 zL9II$^ocVSjEGd9Cehw##}Kv%_P|NxA;>o-F`#yg9#XJSQVSNygJ9{5fEasQB9^Zx z@ScK*kH~N*qgD1g{Gs}H^|Ex+)fOOPwPhJrHj=Bc6#WMPOp;=A3%msy^PrUXxJ{sU zllw_x@XcDIFdu4h2B8|TQHr#&3EM^)*XTqvd`UqI<#Kn2;N8&Wn3ZP{{lq_#Etdd} z<|&xNCFKaXAsAE^8p~mKKx8#KPEbrseiIZ8gzNRp90a%&>B?x7qLYZzL3XE1hnUtkZHf1`Oo51o!TlJ0i<`_ zAosQi(hfI|CBSfdZ;Ns4d0E7LMf3<`DVn&Awxl7`PDX~gm04=n>d4!%hacDpQi>*& z4kJ3Q0%n5p22irkMkcj;I+qOLBvK9pR2zpQFfDDxG#l|;Z5gGQPNV&3c*>Efxw~jI zdR3x-Ys!Y}7oOkb_qN~_ym)WR*xN$ZY}iiV)s`?MA=HHB$WoL$N-+wb`>gt7#PBt4 zqQ2!<2(?ngqTi^*%wOb{Pbt*#qUdkV)`@p1!p<*=<;jnuv0glxVLCF(E$vfHv^3dW zLZG`&R5WT0R$>Cl&`xJX~gIuu`MKo!Jdgrre2CI4nExCCYMm2 zORl!WjYV!KutOMhRf@i1xe}`sFX*M{KxgFRoA>}H=gI+mxUYzwi!FK|w9r}UlTw6d zp%n1~p>L@a;RK6QL8wcjEvxtvH>|n01>&KH#zY{i`35)P)@P+?W3WL9DTg!|CT$sr z?hMI9VVQV<={m!rjp*ePV03i2WSi`1k%A+Hqh$F?3O6YS!rsC(wt#u)gv1~KjipG< z*=)1M)fVgSabJ;*FUx=-pCkq`qB&lI>QjT6BTVC}I7%@hIG_O=&u@a1%`eQr4Q?C! zYI34gD+TECrqBKJms{QnV-CF^fEa3Zq>LI*l`+)$ka>eu1{a))uC5 z=9myol$|jKE1eM;Ff-EGDkhB*(BGTRM#&(NkJTqr`DUQz|(~Obt%HYBu%OeH} z1EHgXs~YLJqaX}GLQ*MKA{cBAnt(>7_fqV6N_O}xHW-iQO3P74b}S5{oiU5||qAcA!ITr<%wY0=z1RwiBTcG7aAr)1DrYKdhT|-!@Az%<$juEpwZ97c` zm;{R6gaDL~;BKI-$2T#3ICO&>o2)u6V{0US?NUT28!38I3NE+U=*f9&3oX`Ts7w^9 z1VbRY_O>|E_$KSdB6Zo&)uLZe!;-ud`4a`er`kb{#xHS42nUp6dZ0n9j$Y|y;jvV6 zRH+sMFQw!XX5b~NN!cfbEr!~h&IlhWCHzz<0n}wkdqgcCgjSb+TT(M!QsvmaU3RR} ztIM^P!c2vlC+53wRlEpf7wJtIVvXaXtYh@cGO(pU-W9C2K!{ydHnB%O_bqYO3`Y2L z1*`YAba2XeL&2mJVc&vM6pEdeTVfhmgGTFnTMDL+ERP1(F>@)l_$c7)Y8~3dD28&a zFGL`QXo5q==-v}+DiM7i1&$aWP77v0YdJk2)ZoI{02Ip=cI$>Mpk?qaZa%;%n?t>~ zC1{omK-0>g7+EFIR4gvV3*{AJblOqCFLGx%@8+-+<8UBFBVeJ4KFbhF-`iqNg@A%j z5<6C;HYU{?_4Ett~MTo0CPR2}?P{YK*J{X9}j4n&hEY+{sR z@Z!P3UZsd9iS>p`T(Y-?L~eLl1_VS%_3b`>lu+H%i)BAmBjkB0I*!4s{3otZR&PR<~0^kHKB z1VsazDYvw*7z;j%&eG*LTymG0aZ2Wqs@s;%z&OM-Rx*qf6D9*^L5O8Y%%q&-wJn{3 zFUyE8ayy9kxZ^=$T5Z8{3ri7iD6l_D5FcjZIf63PUW%G_In0Y74K5D#f@Wh7Vyi7Ymw1Jif`KtrCktIOIj2`hpQq~{DKZ$L*{6S zXm=d?JRRi^Tjy9`W&m4|TCpJlGxo zB;au4t-ZI!G3;H6T=?U1%L-m0gr23yYFsGAcD5`6gv6tV#KyfX-tOmVac_$~T7%Z! z7U+CehMpt_IetAalwz{u*E6|*G-WDYZK0J3*u`qg5xod4=W2_vEXA*Wb;2k6nx&`& znci{eqj_pn#`M;aI!;0C(DJAz2O9Q9Crg>L24J`e**mx;?q;7;(xT1Nhn^lm*mYow zX`)a8lpHs?e=z-Ym3?U`UVJgx#9$isL+U4QzPAOaY-2{StVSuStRT!hH zLGdkaThSjiR$FFwh)6yuMQ*gJQbZ^lkEfSn9wA-vxkPeXh*zsAtt$XJ4W|}H4tCox zu!&IUa6-x!Q-d1x%Z33qq0l{JGmm&j4P8=CRB{P3a8m`j7JW3hAZc$4Et3OfSiml0 zO`!RD0^wq`IB{}h=aA}`?QKbDJ5@3JhG;f7W`ye zH-9)2n~6)GWrV%xoTbzfIwmGvzNJDX!{eJI`y2oZjiuk0*((9?cB}ZMDVo2sQ?RgkOiih5{ZV zDRouE4Q_d5>!lb5AnA{xW^$u~f+CXO679%%XyMFRd2Y5lFtPdJ&}SB7hkq?eXost> z@JOyWrBqky&>HhnWAiVF2*}1#O!k%8dt1^)zfcas?>7mP4>W&$Hcu4Z7)C*vXyryr zQ8$eYCJiL9)qBZdsDlem4#&ik#O%X&XIY6>5@j~h$)Y3F-WI5Z#BD{Xgy0PDs#qt> zADcfnMUR;{ex05?ZUPN)NEJ;}TiBN`?Vej{5ZDIUjYtJ`oZgs$ z*A(E@E&e4P;k?h?X%}V!oEWC{h)avgV+%S&y8!CtE#p}GG4xpw;memp&B0nc;e`Bz zMrwTd~I}8mZF_ZP$zaKD>+~qC*8!@l_3v_k6c(Ki=!R{_?c2bCi#0R(-` zf(EdtheR`f&}!RXo16Ap;qKz}I}sy^&r8=K2Vb|sS;`YJ^eDwg-T;U`870`?T3Ul}(SL064RMjTje_Up+ZC=g375M7EsISW1fao)%ah$zkNp#hl2vkd5kwua%-%)F^wEr%MD*w`BciEAK(iF}<`Zt< z15%SAJgA1$xYrgL8L>GMT(SgorthPcTx^j4hkA7jN>P_ZnsTodzQ}#qWl>+#fhf1I zLt*t%lh{i!4#H;#+goOj69Yc(bI0@>NwD|R;O(bQp6A=AUABbk!8wysj9QE>1##LD zqa_!gxM1Zle;{}AE*}}7*;_EE$xWnhsFJLrkLK`&9^M7p)Q|)mGf70*mByHYeDZkm zQ?~WBAk3rY+=9t*;x3AEQIM4aOEIQI)$Ph3R8$FAh+d-<6{Bj43u4l+79o#ff)ad? zyuF1RTzZ2ems~cTN_f;?A39z~41=hXAETOqyt#NJ^!oLzDH(w$I5i|hKTeFoSsYaUHwxk%UWNV1AvO|i>5co)pHIV`0*F99!a2_lg#n8o12Uup%cAZ&Y;al0 zm$xu2?&k2xc57x%3T|-0li>@eO1!94!D#cSz@ntcQ zuA>oaIJ^+h*UMY1#*z!&B*+rXQBm~d1jK*R#?r`hEDAQ`&-~yQLE7}ofRmSXwO^IC%>8#^} z!4x5s9>kL&qk}LqWIV?fPB8UKoPOB?OWAE2Ozc7TB=u*58()aLl0bzKY78&x!zAsu%6)*Nt|s$!Qb*WG`3l4mZI-)%K^CWaPz&;_**gfIQVENq`650 zXK!XPJhgR4QJA_POC?nB;FF{nN?}huMubpG@4D%oGa?+H8A;(bq|)gNvtfzJafD)v zi&tC16ay-8vcUy`ysxNdI9;K4Lc_A6Tig_MII~jZ1DwWgE4{siPqriayqYNlKTd3t zzTa0QUaKt@BGo7!nB$7ZK_IUDLHJgdqR&*u=eX>j;hQ!cipPod<_#`sK`dV0f}WeL z{B;P@=@Z4!&brM0s41!i407j7`9{W!B9lH`3Th*5e(1KOKjybMnS=v)BgyFwlv7rS z)C@1H>F67g6Q$^kM4wL+D?>!G636r5VdOKM$gEbSNUco~SH;Z&__HCGE{flSFqt0`(3w=znbYjrLEDoY>Qe%9zB+H{q-vB`xtrE|sKtxg$Hw2lxA&zL6 zI-W{yruxQQHoG}Mf`qjwTcw7yVJotv1bvbXwyi##s-)1 z@)pv4n;lEh?}0JLDJQD}X`M75E6h$ZPCiU&q-zpX3NDI%V+OH-XDNP_j}wdYm^A#- zV%pmA2CkeCBoiDWAvdv!V#H9jX-M!6R5>BEb1)br(aE-GUbJ*rms`><&L+bwN;3(a zWtppdg44JplEIH~aw#%fQexX5HN2*P92VJggUitD3zG+$)Y=9Y1g!eyEtIl_Y&I5* z4eS?75!OH$uf9)Z@K)_jgbed~%Q&$p#X9J5id~95iE~v(9z;^+0o{ZVp#wcpVh*xJ z0wV`1%%s521T;uvdfgy-(4@-*sf{x;gZIG5NmGb3aIryfU_ap1RXoGVW&?wS!@w)T zDEo0=v3YTa+Z$Zu>QuPqn45{d3>7!7FhFOmjYZizrda|9;g+s%TA>r*U zyssEJS&IDzcTcI$3I?Lx?3K(?>_+1Pjga^!FPHuRLyt;om015A&aaON0~j{Auu)>0 z*5A;S+EeQj%)|2U=r~65%u2BxlV?ZFI&A@jM4Cbl1|%#;AG@>y)Pceh4T&jb{wAhr zol$6pvn6i1Nbm4isvg3KPo6Q#ZG`#(<`=p7WV^ET$BEGxju17+lrd8Dv{;H4tx=2v zrihrSWxl+{(wHtK$Dl_U;p-5mVzosIRE(pRvKD0-6n(WtWG$kL!Rd5R*xHVQC`C*H zcCwGZ6^V>_QjCKdGgvAOm?if3$>wQPvP>EVpvuLF%n;G3*4Q9rTOv5zxhRjU01u8K ziDRgihQ1`lFaZ|Lw$!k}gOmuW6|ix!fW*##uFW9gykX7GP%)Ejl@qm~-{FxS1U5&~)I&BJIpRu8OqC zSF#!>nwe2dEA?LTG}`{rcGiTpL1)$YHVNt0*GeN=S7$QmUvm1trSa zPqMod6{wuKp+FH1WAE5u)U2rTH}vMpi>o4^D7N_W78t*)*9e{G=h`U(w{y4#9nnL| z*~nuvdR!IPD#cbkP31sQrxyJi`dxhts|<0Fv-S$bylF-EdPIQ2velLx|QEx_dF&q5pi zCIOWJWz9%B)Iyl+iQB@l!ik3xn_D31Z{cnNNNNyyRXo|~R$5aLkg36%%_1t1p2MIW z#@mWqZNXHa@&~Ie=+T@F0!oqVEqx8zKK1exwmEA0LYO>y}|mp zXB&#EExi`uT2_kAorhMdEyyCznS6*-l_Hb7<#LNar<`)i$tSxQm(?3>h+1^{d%XGY zn|4(^{4my{N>N|p)@gyoH*#WXIp=uDVjhS`fg$FY0(3U2y-7Em<_MHD^fWue@;=ZD zPLs+UB9Wd*%#xZ!*{3s%=^N5n+7V83ifn3{YL$-WMqH|F=-3fEd`9L>rp<#d}jbM~^9quDVW5BXxC}8ztJ%y(wss%W!LgiFzZ(WiI1w?$T! zqH7VPD%9T5=9y&ginTT?MG?{ifrCo%>k@6@jsk&3x5cGs%E@6dld~xYQ?jK^#!^Pg zkOW<@&J3g*c+CN-tc-6}Ar-nuy5yFc6k9MVNH|OE#o^9ALQg|= zCs75NrI*)2!5xO)d=6xfZ*XJX&wE=;&r+=I1diypxCJT}hZr?v>!XL{&tQCFJQ4?x z%TP+y7~@u^wFJOK5rf$jYct}g1t#+rU@h9U?Ftp8Xq9l-B3&6Ih)n40azdy?Too%B z?&iea7RD_*Gj$vZ;E1Mj>~ks3Wa;nBfb%Kfgse9r3Y9oc7hWTTm$%5`Vua{l%z0U) znYO4z4s5o@F)Ys*ds~PmVC-$Np_gJ78gaypvfh1lr8R)TT5ZTCvKEK7C%YKk;X(|!$&Ef=3Jp=EIFfm_W#|i%so2X^Dm2;f95IY~X3n?(3e~QJDQ1-h z%R;iLfu&gA;fBklh*-R+Kns7If@T3*gq9=$-Dp5SsXhW`gAvWx3{A{4ZALiy{|=09 z*l-e5upzZn65~h+V9PND=xkJbE1-=L2*ne%zV@+?Qe-^yMvK*!qKBD_E!f*aARG6! zpuyojX0~}cLzbf3q!cp^N3FJW!|H0^+wyIFhr5m^={O?Dy~cQaQwPLvYF6K9(DIiv zjC^?uUI~3TZgHdKYRj0;!rm6dcymiU>Jz%sYgAlG%>|K7Galp%k|4&Fk8uoCYa(=O z?D6A1a2#lfCXo=f3Y$P2;ogCShOV*V#L{vCCTs+R+eX`LVh<+wrW`#=F_eH=o4&k- zHr`hRCqg5&5{p5J16}DM@_q)!KeXX{nVY;{Fbd@3> znWNQ~0?2KVLDAHevv@OQ1i&y0+S^!fbt9*-ENcg zrO;PO7uw5Pl#}-rQHrcZmLgVL(EE{gczp{u6)+kDno7|kO<{&RR$F==$ZfSn9^K+b zG1kIgD@D|hj~w)|3@wR)B~Zf4ThOz$0<@E+Lgpd%D_$OrrHShq1CZexCP@TlPCwQlns$JMLNPe z29vl?U>%cS#KJ+v0gKH(yVVQuH*;Q6?eH+ilR1cGKn%_^ur;TB$lGe(GHd(R$FQw0UQJ1 z)4eULdVCXJ-ZE%IgrOQuEJZ%O$;RcSSS$dIq;ts(?8_rl*NUkhZ~$6hiR5YunM*C+ z6yQ;#9s&nz2}%ui`s}B(Bnj5o52;}qTZ(~IKG_^N7h`HGyu;0(%HU_(Eh|N##ze%x zhuZa86N5u2aB1)0j6#gA^TF*nbtsSM@=va!3WUo@hjm2q-p#f4)5|b5` zi03OhZNiF8lR}g0DWqce1I5Ha}~DuLmXo!$%T;t zEJZv?ESpPFPZCR0j(&m@GX*y!y+SAwj1DY0SofFte zm(^ivSDz}cS6JgTW@W(c68*6E87N0pgq zE5)(ta+aJmG-5Rw%N^ZawlDS(>|rnwsPLo?O|~k!*keDzDfkL^oveCqi%{ya6a%GT zba6@aBm;doZ!B^@L9{qsoQ4}OjCH8o+`^|f@u7Chnz0Hrk@`hsandD)F{Si?3A8&F zWpa?keen*UyvtNO7{^KENTe-Ypmp6gNC2z&4Cw~QQnlJ5$q{i3*T9sw7VXt7?s}+Q zm16B}Q4&Bm>%y3f-rEALHvxLVbH=K##V~)-WC|6alNHwTHUfztR#z{MY@U4&&xp=R5p+5<3!L{{$7e10>GpcvEwgpaWl^Clq$ublbP~ySZzs#y8P(W!i8Il zM?yc6>wZ{+h8R2k2x2MnpU=_Slf){T!d5yAA4_u}3Yz;cOEKF5(1w5$lP9hr*A`9c zFrZ2;R?~F?rI3MA52aBIAqcdz6RMyAfnH$B^vjTAdFe`}iS4Y}ik|Onspbs@SokXo zL#P1BTAY`nZgIy!iE?zFp7aFZ&LVZ$#(hQd2TWog z+X4ehQS=jt_qIeW%FTz`&9@UoDKau!ot2tnc$`{&VlhrbO+$=4jkbjhF@lMAlM7-e zo~d$;wB?PMnn9zIxY#)*`|`=uwUMYv0ce3G#(^6_EBCgvFLJMPYfJ5I$xIQBAxkkI zYllsLxWO$yy`F^Bm`@qwgs%A>7O;1Qp5@UD-iOycW z6`G}(ScwT^*f+GHpb#v@g<{lIF(OG6=&%%bxQZ)tCSH1ZODNcKA#fP-EE8v|duf_Q z>h?qP+&ofsb0WygGm>1b@^oCeiY2kj;P7Rz0~0*#v9~2*llQh{jHyW#@wh5piu;Or zB3dcN*#OSy=ouH$q6ihGC@G16&Nl4YPLRiO^2sNeAaVXI%GSbcbD-bb5}%tw8!)J_ zoj}Xbp{f*XZ;Oq!@JDW#21&^R!Wph0i(z6E!_>d1A;Lj9&Y9#5%$S5@fVB|*gmGkB zOjqm@j52Z&ZtvhobcPNOr52ySW?Egn4)1MQV{eP2BdVyRioEc1l0x)iy$MR6#` z+S}q7UKNWvVL3Y2|0V5RxUEU5DpCHq{-_om+5(pY4T4zBRk^mHAg85N6ovi)`_9*T zMDE<@`-+Y+PQ-f5HCJTrRlBM(c0>|LX*62WZjI&KBY?ts?5quub8EgD2f@CDsHW)%K*%5SjE`|UX7f%vXDUPl8wIrCdAvd>KXj3Vw7HvbXGjpV6CXhkI zURHEIz=`JG+fuHXg(OBLxk~Y`+K<&1IA^uR1aU*rNn$i698y+WGOcEM5&*>$Zm;~& zIeS|SMJaymYk&Co16@z(A=_CQ?=@T53peUZ2{<(+qZFY7XqqN$?pdq~s%d(RX~JGh zrgtBbQjVa*CAGBUB2W>G(ATuEzoJrO?%2Eh?Hyg+xsjuDI~&BAd|MX@!Gx zsLC{bt+`CDwZVl^ntt#G$yOeWc(&NluE$z(sc5;OT7p}SRg&E)HV{W~m9Lvz_Zjxj@UmT7t z0YjAoOR=7EGZw8@qFIW-RY#XeEJXLfK5Zv@DFfTS$O@;?`a&#mJKO9@LS3ZIz6ArG zP%@vv(5fv0m|BZWl%~9W4cda1{s?EQ5XxBmlLcU^?2aWD8qq35oGQh4iF652ok}sg z3Q&rB4%pyQC=#;ar`$4O#RWg*MuV2SOgA(yxlloa{#=TDV+I_0X-36DzkVh9;bJzp z_zkvg4JA#+*JTo$vp*WnNC|6F$%pOv|?aT?gY@0+c?)3Uwpd>c3lOlPCd}3`4yyAFw_${|v=R(%q`}$7SOim%m?5$- zW;cBICni_0jT`(d1IZZm6-8TrDZ+_|i?DPlzP(}fj~G2#)EHjKT5@SRUy{7N!KG{p zMCVcrLv3)evrAF?tY{NVBTF&oES8;4g3>}+!*^&dg-b4MUUGrsQi|E&A~^pAjVFtW zMpxg@M=2_A$OW84uOw2r86lbCHdZigo&o(q*-6hd2g4F!`vx_VU`C6-!WajcKo3!( zk48k=VLWD4h}#iiE7GzJe9ny}m-hNOcdO-KNOoFvR#;Gqzx-ukUS+0T@#^YgdxOj0 z{%rsg-{^Tq0ZY-xiNV>(09!9Xy9x$|M><6b1jP(*I!+9`3hL3KVSdVOIafEO$ly>^ zx{pRDJ8nQFuL%ayEJ~cb7-(-u3q}*#ai10n%`mi?)k;D8C7(=W-^tqe>9i{lQECpN zm}I@=A``w5*?it-VMpxFG7Tcwz%+@?Q!6QI`y7mWTqcybQ@^}MhK+F+SrKj^mpBOfPb zWkp^^zr2OfZdHkWgJDLDoxZ}XxX>hrc3N4?El4RU%E8yP3cMPXWQ^jEy5uGHB$Fww zMzk=bPtr@w>7ZuINZ@Ky-6T&5X11qfFAWAONS%OfEG70!vt`E43oHx4dD}RSaX~h{R}}V)^w@5B`=ho0lyW|pce?g zwZoE&TLo=!@}wXdVgl z@m;(ef0t4;lny`RhE6xl9N7%H_A15q266RIy9yN01mSTh4n-a;jzQAS)iQ)H@Wzbw zg!|m!0)I76=DS*l1|iJounf&di&9p;#MD*V1EW@35*myK@_j}rHV=Y2+me?^_o$Y- zhrs6PHPMYA(AA#raZ#9NGEIQpH3?}U8qAgXrCwxAq!yt9U@H-$5L|76zzr_mZ6yFK ze#R}#5w!>|B8u@{cvJi3Eg|UT7Mz;{lS;9}vA+ejR$DlX8=z8Lt1WAT%i7`crYGE7 z_~Rse^WRj8$Z&8oBQeZTV{BS&;nSRg_+-0}b`>zP+M=8bFq8Cc zOkp(T&r+_%;T=%0ngsOvOh&p(d1qrVTQ13p4VSc1?a!Cu@389U&mjZ%S`~xfkAAMW zUQ=LCdY7UUWkttzKQ}G6yy*-l7%q4HT8ch62e?{o(aT#_GJY-Qp`xuk+73+%e_Z*4 z?8O$Zwg3bR|FYUbO$`qg@la7e=7tRqxY3tS0#CMU3qyFw;wMXyBu<#SO0C++Bgr?a zrO_*NkFUJ2yYYIv=>{Mi29nsG$;DuwJj+4nXSDDdNsgqbY;X)@q+*68FK?lxgJDJ` z{-#hI&kZgB{0q)-`jW3HSSWofzPEw-@P|Vd*>e%v$B99iY4JerZ2Ds$Tz#AvJX4DJ zEq4<`U@77WH<{FcRr?DxSE9ZYdTuKClkFtp)sHB;F@uH}MgJ>~_qh4_z~C#%bm zBNf!@mCB2oz9H?5`*7xS@+P*SuS><_Ha z9abn4iNu|$vf5$=Js#)qV7tA+r6}>O2yxz*0R^Sl54Z)Z4&(6wNdJ3&DZyg7QqR#dkf1DqKS*4?WYc{pfwfgMA^}Js4>4-%oK5cL@*7;S6$-$vkTOi767kUc_wIG8!n<)BZJF`Fa>o~Do zJ2(F61gD`?6sag=uymASo^gN6L<(v&qFjor7*&eJNqV&2_7_z)+LPGko{2q5)nW^t z!K+@djcwA3fYT+fs|ZxX$dI}~_Pr^Na}4^~NQd(?SHzJfz`h315v50i9jv=M(e?6{ zwgAOaY+b_Cm`U)h2tiM{G3GciO8iS&h?##`=uiv!^J>e=TF4x-SRR=1SP>cob-o^H zWhEAdEc{t{tK}9ruG1nOjjJvF@)o`?13+wWNr1xeBeBVh5cxzG$%7}CUfi&2+%_9_ zUnDz+0~6mgL5PmV<%g(TF;hiD8uvTjDF+r~&@?uEUGNEM7Gsl#VQ3k8oY35mioV(4 zg4k7vVkcexEP+L(mR9RI=#ziZaAXqx=@qcOpk3+@SEj z8iu12$~5tdMq))2KaGWn9LR7yXRnCEa~QWW@<@t=s_XSQN;wbuQ+f6Bmi>)L+G=%? z&_Tpnq@<3u2w|362#Lo@^_~JOLH87TgG*Z|Fh=wi!jEU%dB9DlN)ZnhPjqM)SI-rj z4-a&7oLDf=18GV3$je)dfYqhw*JZ%SQbZG${W0HGeNzG?>hoHt6~`pfr74d{Xm@L` z5QZH#C_t7sQMZGUhf7RtIRHypVlpX2!SNNO#^#ie4F!0_4gY?Nkj`*o4F25KmBavs za&CyNe#UKpfzJFhZz%Zb6e8bHe)IB{q88oGl+_ma$+%WqWMP;yt;xmEt1YG9jl}{V zo^bOxF`{VYmm(i4u9vsSnT!}LS)eRk>RqM}YzlN*hU-#%57;}fF#FyVmOvPbTWXutfnzk5pz)`hAWd|X>e7qe-ZwnrevgQO z3xC|*@^hNvCW`H9VQvjfeb1I8 zBKZjYic@05#4M4lqmCpiR5n9iWi&vuTcx;2H&rf7SAg}Fc})RWzWlQ1LQaum+!(O6h0nJQQ?Jz)>yCt+QiN3Pdpu+@%o^ah z7Gn0cR0tPb2rV67j1d3C7Egh-$Wr7Qv|xii%cL$!slQ?e;uRsSI_9*mg`Tb_Km^(% zX#BlnBONH*Ff6tuGHg^!-9up8)X%a3LZKAfzv9TDy{F1Vhqe^d8_H`t!JD5eGM$21 zignInXz{Jc#_fJsYuPVv$t=0IMZqS4wH|T9x=Ilb76a43)s`?Q6O3-hBJ@#*{=Br> zlF50sC1*I{6sK%%0g6fuUjl&??d>R10VNr8FVZ(2OWi|wan17Bsea=eG8P?d=PWehkB_)9@bxWk|C*P# zPzDfVj1{bVK%uPR6-)&$@?S6c|y)KZFAZIQ+E{gL;!D36i%DPf)Gih|&24%hwm zabgw9A4L3_cl|LH|G3)12a7HX0io$(j_;d%MQ}SlAxup({@f4l>YRJsR*9(C74`8v{Ce= zg+xOWmak)AnCU>e>J9v)P?1a_8VYKQ7JBx!#OHyfm|M_xaMWyI!*a`IZ;K+XvpS4W zw6_HZ+nGtLEeFJRpDZwY1~;X6SBw{$o0qp3QMej2W2!1e{x1s^y`3Ba-cBxqI=x3| zMMQitbX@Km^jx^4O-yJm8Dvoch~Y(&Hj~0F>BDsP8P<+hRB|XevcXJ;Rz*QK%HP@+Xgr!GZLA$wcaJ;=`?90d59xkJ>`k^3ak zYUgmR0ol&*3~o={z(s#A4w(}*3Jzx!LP>)t4;_RH(3ccr&$bD_s?bCZq-xVhwYBBH z2!Yw{e6V;)TOgSEt%z0tFSZ;nZ!tK4o4qakQiK<h*{E9ol zQ(`vkY!g698ak}Dpsxu*^6^bIL6u_rTd*7IZoZ}JbB*wJB8AYfu6d$mH7om`(3qYi zbIBahbZY{(+nmHvYGRq_W_e2VIR^K-;S=P_x6Nm*T9pQ~(hNu$awH7bT-ca*Q2CP}(q%d|IN%a4QW<=EX2J&7)?*(3nez z>Vf#QC6=ki0hMLO;(;X$o5<6NOIxhCwI!vPP)B0FpGkN4q`68c#(t=X2$Z7P^js0o zxcO{R8wy;C6Rsa|^D7a}sk%2q-w3`khQH}o+;gRrwAx}501$pyhuS@tBHg+v?ggKl#8+nIH{A7H(X*crJXUln z_qE#Mm$x{*Gb9h^oSSB^3>K3(_;C|bm+myL`ruxz%7P^-j|GkaM-P9v|w zDK=5AQhd3OaTci13Q^}xR${c1(ReSkO0mpj;jg&a{*{gIZs`pLMllXQ;a2a?A3T{n=l1W}?@V;5c>JxXcV@(iHE6E3G-Q+A z662a+%p-}Su9r$Kp(P4z^ts(>0eB#w+S=Pv@hC%x1;A)++>rR&Sv%g#J~OCLVW>pF zph}GYa*~*=MMieKyv3#H$-u?cmT(O%4fU5?P_yv2KNYODtl&&S!`F<*jkd$+7b=Vg^K!eDGN){Dtb1sS%}iPA{a7+(F-=QlFX$( zA;c?2owIds!I8ySqo!6$R$HtB{~tO@?BA0^`F0*NvhPxq$#$?tIVZb#9ScuAv|*@X9f z&~je)w!o)S40~NZLy(exxf~gyMs7qPN}!O;L+>Y_Ed{mO5^oI^K~^zQU;}{tQz^=+ zj(*SZu;Jw`)VcYzlDrr%dt0*6s>l%3rDy^%nwI@Yb(>z~ff-n}CuFQEL6g8m*@5oc zckl>Uuvd_x%D9H&Y6b~&cgvrdAd(6BCn;eullN64Qa+xUb9s3STqs3(g%Y;A%0)ko z*z@l!AU?kK(~#J25`ti22z;bJJ~Wh4tqktgP;Rn)QClB5U) zrtXB{7rIxf;_6zX1S_6g=9PQGjPey%l9Q*bd+aC^!zGJG;hMsNdO~u=W3}XP0?>j9 zH4QgSNOg3s4F#yg4aeggF$7BaqUU30kU-qqVu6{t+#-#OE$15wKG@sRm*A;@V9!Y^ zI(;p+4}wdPTU*?Cd{ZsA=)En)QUH#ZT!CzaWUu{I05@8(aYw=3x1w)FrTeTAY`~G! z!x?0=ZN&5)Daj`FWxC@zS?eQnaP9;ZeR96(QhYr&l-!Qw=`h_=YGRpL$Z(y&WeU3# z1+5@G;wGn?!t@hv>)BE8<(E{Ov-h@C)?;tWKmH^36ZjeT(|cR~?(aNrv0LP!Io#J$ zkGOFke8*Ns=TVTlu09V)Q?}h$zpCdLHTpUXgt1am3&+ZqcSl50T z8M91VlU)Ao5PloB?AZh2NcD$*Ws67*8`TI=ZIo^O6KXxy{*(*QG3FwyX)E^_%d$r^ zl*L3JhHci3x6s_thZEhj(D77j=3N_R)k5V zs6AF#_rvi`F!6t%b+x(Vyeq@;?C~}$4k*Mb#ht1%lo3$AEQ299!U=!cP>@sYWUL#b zW9?+|oGDf*g0={6#}Hvy?yXTKNbVX3yDUr0eIU%%!#B}O0wS%0d?QQsJi=!q1Cn7x z*;ZP5*jBC*?YMQ-!~-oPS;S?+T5Yk`?`?sKg+KIfd~3^;AuS<%xwmB!9ugu`iX`zz za$AaU>J0^T0YvjuJ2uK_A)eu4^WK&=*89mBT8;axbiyK5TWlNp=ooCP|AU@<_mbn- zw_m2M&Bwo_09Ig&m|B3Q)3d7Mva3K-y$(*C|+IKazQ%vt4pG@#$H>C3;@P zEjD_4wIwkjwuF94k?(DRfeU{a&^$o}KvOCHPycr! zXTVZidt09Ggc!=~N8G-5uyI2H{NMT}iNvOkIlZ?=+%|fG{ zZCcnn_=+#2O`2S@oI)WgViD8yG^yaaBE&}E2!VKLzQ!22d%2$c%do^wOdI~(vl9Q) zl(e7_Q;G#QOp}r6SKLp~#fTW}v%1~&rx2z=)6LLpTmF~t3v66%k+VCeOx%P2g050z zkV0Gf zY+x~IBn>N(V;NYAdOi6)9srW*C`C`dB~EJB@@drDdI^t-mP{s7aUjeFLmGM0zu>rE}}=L#lK&$7WI|_JX@sEzvk9nD`;S6kH1%? z_}4cRz-B9MDsa5~{A!$C1yInq;^O1PxDH)3D8obZO@j$f7VVI%PBHju#Ls6d{DETR zrh+WFIKocnkY$_U6j{$8R2x$=frL-CmlC0FfMEr{TGgG-`xvR%KP94~LF2|3;m=Y%hC-H~zb+fhJM-cAKeE`=h8JFok zF&!Slmm$C+c^>(6F(8HUv=SaCrX`o6GJq?9C`CTyw&Csl9l|fE7%3s?DbvH2v^c|w z8(h@v@Rwp+AQ-NdXzVKR%Ug_{B^T?CO14e~A7yQDF&%oJ;e_MF60-(o|q zm%%t){R`UHYA=&z#xS(zfV%4P4B?%WnDCX>w=V1*X~02ElMTvT6dm$uVF)sfYt~R0 zw-qL%et2#TiCP0=*}4)%!xv`2`0HN}5-MFv0$HVadC)CL0T6lUP&7&HE0{`jx^Y%m zSumm!`Eb!wfzDF&k_(i}1RbuKdahY=5sWJ?`#77Mi1V1+c_=Lm|fu5v=J*d@j!iy~~G=vFabbwo5m+~;~qIjOd_gX$j4oEO;{ zZ*3wWq4`TuKB}z5BTPDM93^wf=tc^ZPDbl+Uu-+~P;1k#obF42UdTyAry6#I*@ zmt2w{)J5S?_WYmd^?VUOXBil@DnkW5RKIDGGk_&pG z@H7WYE>W&wJIkj_v7<}C1{WrC>zB7kEr_N8i**aV1ZwrKXuth! zm13zHD@%Fg_)Q-;6;nqXs_artjW z0S8@b_jp(JTsXO>&z384m9+M!WNC1$aO7B#?GijW~G9^$|8X^zft5*yZ9 zG&+Jkz7^3%_uE^t*9zFG#Gmn}Ilg*=@m$eQ78NN^t+qh<>pbE9@p13@wJ2m|`b+;tbu1t||kf5OM0n#q(R*khO74cM@P}^g`_3r8p}601$&xY&)a# zT=6JHJyujqI+o)5HlP}>rI_QyoP{qaXDO~2sEASdL5Zv~M!7G1^sK#%_UimBIWn`cm91=20^KoJ@ zKbNB4n864kucc_N`K8#JmS&*1V=kmxs4e>gHu{B~v233GLHtR@VK=aggQ`p|FvcMC z$?f|=o$ZEon-=H*m!gp%1zktx&T5M%qL)Gw&Q^I!#4D{>inFKSp;G+izPpK0NX6L( zty(}lP7J0#P7Jai?crUuRR4dqHs0FOI0RxY&Khv zK^?47iuCnZQ3+`v>@Ay(D$z1;;aK>?Y6~~GtkssGq2yBJvm7;1{*n)K8fH2SXBqvHmq_=hmb!<)X2>ux=D8VovDdYUr>O+m_}qgAv@Ze%wF~>L+Q`Ic z3XmJTWnQ~=_XOGCXWV|sO-pZZX`UOw54Z(qLhLDstn84(zwbF^KI5(h=w5AEpNnR7 z=3A>Rbl_W22j_G?33V|;#Yfzk2gCG;J23|LjcOExn^I(Sw<^Upv>=uw=#QYO&-;L& z@mT5}LeH$pUkN8vp)|={8Yd$INm`IZ%@*{Xb);8muXaT%th!hVD03+s8y92n7*L35 zdc>U#E@itN75u-+smtk7Tvtxl+ey(vY3K~gvNk(akLFCKB@ zI5C~#Bpb0kk(MCLb}Mq?TaiEF7CpQ97j&C+ePj>|x|xF`>T>0uuu(0IKA2PbECfJq z`d~B{O&~_kvL^;>a2k@2)=#zrM0OK7)XoKY5@l%X+e5nvps&oV#J$1ga31r62fyLg zabluir*m_Ff+(!UD0z8Hxq$I%3xRD^)N{92TY&Yq;tzl5xFcA~thU6bO5~KF+f*ZS z*%ARSZ$YD3tv0v_k8ZvdZ7E7=qOVAgu*cBCv!ftq=v5o4@zAE!?3|uLY{a!!f+4Z{ z%55LVkl#ommwhDDz(^C5mtjGkL}Ssr@r@Zg*-q5zX0@ekK$dtJ;ZZ5R!!8s$AK}C; z1qPR0dt0>WPnQfc8%puQ`AX$+VtK5n$cNt}MA^AJ5Ed-AaNX~_ye$M^ZwtQ@Jtd5i zYE)o+Az>-5pKyC`i}2{4N|6p-lyU{u)A0nT5;jBY+eH5dEer>uk~=S5l-zehJFUh) zu!^V&9`sfc8Ftx3*-)kQC3Vt`rfY*eAR5`c0gBVasQ%yw==N$0RFz`g8G>GxqE=ff zZ;vcR?I&O?8}_!K=V@ZvP#{}wWIjQdB+13D$XbkW)eCow4SH<_gsA*kQc_x6UYSH2 zOa?WLdN3Ay(nb~w;kGC+*fv79OmD>SHl~FM1|@os>AqHinJ-h0`^!P&$z)?~s5CH*?xY2hhdZ(3-6Eh4w zOOZXNYeF6;2E#Yjh5|XO^BXgE^5;^lyDnnVvvme1b3U_R^m4??oz~~oB$kzuSEv==DMG6MWtqUB%t25BD2A`vfYnBss#(V zaTb?_z?noGZ8L)~uDnn--;EG-Jj2-6WR5tj95f{GeHv$@TR1{qC|qpWg{bF>zt$N} z-ev{=lpK1z(<(Xo#PzrJxxualJVlVsg z*ASX!{vmWQjOS0d-^GZI^Kmb7=_`%Iy|)F1d3g&1+4A{59w|kc%;HL17Y(yREJURV zJm-_eyS*($kzv2QMU2?=2Om~j(gZ}8QuIA>Ygsox~8WwTKn^JO1*J zdr#{~8igAQdY2U+a_2NLxJ}&iPyoLbVeh3seJSeZ!Wv4(C7c$jY& zEr2NiAbu;dnL$?XZ4rSO(cP7zeaxHWmGUc$3U=zc=b^3n&6q6qBPoSv+amjD9*R8x z=55mn7;PkHN`Rw%*AGY&9>NLn%Ufs*O@?)E#k{4(NOuZe03BW_HC&qE#^IVjyaQ6~)^7CXn9Vhns;_Kxtq3~*p(y&A0tUN@C zL65l0r&9dO2J{>q&ImL-SLBzX740bKO;(6Zvv+Hd@hAtq=TWOI&}GA~xQVX2qWM~> zM8D@4_KIc_T@HIoaJ4Y^2&O5(OlOmPdU7Tuj}kg~$xEbfR7>4MV5{U$qkT_+3gHuO z#oNZQHV#kBU-rJ%uPu?>r9?lwam7-^<)fQN-r4*auO#78Ia!xxnC6h^+3OS&d z>G0HO7`8}-dUDuMZjo3iRxHkat6jhJ}w6>;2^9-=*k$38N3qv&c|0 z?$s6>T#7*llj-Fov7e?8X~ly@uC|z4gR#qC4w=6=R$JaaC`IpW35yu`i2K`hl2|3= z*ca_j17O;!7DJ((EqcaHGJPvDl(*u8_K{!VW+xDymYIjFF<9l?qR| zz1k83_qGt`BXcOB{R3YL?PrUG*~mxST5W+EqtZ$aj6>(^y)BF{7Cl(J*--G^@0vCQ zs}P%yu5b7xu_mMwX8jxbPc+dGyr~qKxk^!v54x4VQH)0d50utqtP&cCMri`ZlUTz@ zpq5}d6IPy^(G;46I_u4KF!lt=tk%M(6ZPboL2wFcpu(v42w~K>Vl4K%6q%4PL9@4| z{CcqXrKVI}R$EHN$hWsVm!c^Mv&2fAAlmZIjK9W?g8Yj6$3G6Im(RD9lx&OJ7~0e%1VIDDzF^8| z2Cm*_`|kWA2`Dm$utO+cb2dwatKPs5g^I$+R%t4;R$FLy6Q(+TE5cE#Mm$->-WG~_ zWd_z;@Wa_X0j#zhds~3)QsnuH|DbP066~Z;mDr^SSeGImap#^fBTKPQZ}JrG_O|TF z>=^G#QNNpo&-VpmEw|7%9~yoRVf9FIqYSFUGnaT~kc6&Nd$P3T!?@u;OoF<* zOivV(n3y2sp^i3yqNPzSLhA+itZ_$C#$R92B?0*8?WR(cHg>K-!}Rb;VyMJyD42<| z6o2{4o*Tj4w$d{9wmg3)`jr{|N-JQz+R|YlWhq|vwrqE&t;&N_4GxUhQgE)e_<+T{ zxrM*s7RX?fV!ftdUC-=;Ub*f>labGy>ZiNh`2K)&-#uA?btm25#>x(BF!L+%=NqW=XW#dFD2>*F2|M6vzO_U7o|XFcyam(J~!&(>5qM3=#1X zk3^qP&afLzCUk7(YJrn*<9bVJ+}d*NZ7EP@lD#dn4vlX`Ge`&x|n z-_2t5LKPk}bIgQb)n zCrg`JSPT$lu8~UEZIUwg(dx{?TM7upuejMd$zmECR$Ko0pM79XE`*P`BNohwOQSQZ zEq0(^t1X&8Onp-;ZuYjw`6C_QR8EbIQcHfwk@$=|z6??;DxZ*J<@rUoTD8cRiD##ia1_IS6qj^KY+EM`9 zxwoYPE~BE~Sc+?-RX^e`Fx(|#wM82WwA$jy{vF(S$Ze{PoS2fb+ERSj@>lN>5|t=K z!~kk~uvl=6c(PbpCv?i4n2;BHTQZYtDI!8G_aAa5pm{|uV{8d&Y^a}x19#^g+lG?& zqH_W?xtG9Ln}+3+Qb*2}OsX(u=xidT)|Q?OT{ysrj}>qBwg7+owhR&0mDC6@N|Bx2 zS@>%m*%SBRYKuzI2159V8>=n%%^VYtW9{%LXPD3Jr*mhJ(C=+o--`6^Qlzf-l-l|D zwTQhffC%8dEqGgoOqXv(@)&9O^p=tfL=Ci@sHZ6`Ll~BYEDoRP*$r&LIZ9JkVvQsa z$wB*>O4E| zW)6gYDRfG4vhf-Br4mE*hRrPy&%6Ehc9f#Bdvgn*em}wYzYkF_Dc~A($Z{jF>?g|e z+P-n@ZDEA`EJgi@JLs?Ly)A$A-w1dvMKR}2CkcrNwu_P)RnLdSFoplcZ~)9;llsHE z$>?aDMX1wWWRn@FTeqU0uEuE;Q-J~o4W>h_i(mHu--%U<%sX(c`<+w4Q^oP?Ave^y zQcCX)aOlfYOqfvTNn$enZS(jfvHzF52{=7^De7CXo+{FyjaJ%E0F65eFla-;|40P% zv=~VBcQZ%cmkk6b_vlpKx1BER^SO#l`z#Z;Lqo=5IJ~wZ#WG$%t5t*=LnnltEr}`&&_tM3jGD z7M?8Ll_H)i?kS=a{oWQ+(Dg^$+tO>$vOA4M^j6b5u#9^KbI0qWLr68#NLylkrn(Pe z_8qCHttm_xO488Zq(ZR0HMCx|#gdV@T;xa&9)0dYu{@7KKRHaV4FwjJ5oHKXFU#=v zqTbpvrARh6!tq=YeW+V%;gS=-;=bA20<_*{h4GE&i0LdbD(m8)WVJ<(>T-`t)d(BX zmMJsfBko;_FZQ+ot$#uP@iqR@rI?S6{1zn;@2nM>#A{$k+Wlu=Sb*vR!s(%+nW>tv zRw5ErUX6zy-(a6&>B3+7xm*HeUl-aY;h(O`+^Y|4Su8T!!+TpK)=eZ{+pLOOhWb{F zf?@EXrtO3F_vhXgyr10Ltd6ka{V{hFU^_u5A!oIP=5A{WW5X1zaL|0b+VbMPE%;j0 zhJqdS$6EU9c#`116?1hGtg#=d?w4{tcLpB#0>Kq8E!N5u$7!s%3o~2LboC@V(Fw)#+s!`dXCbZU%U&=*&}!wG8c;S2NIR z%Ra!#rC2!2idfT`MWsK)p8QH_cCC3g5l5F|JZ%wA#9N|#qQJEpgkNhCft z8H@0eI;oWM#?>ZJsT5%lD>^*lE^*&5*ksOBAg^cKSoq6+f@Z!Evf3gK;<>j4rAXDx z9U`?ljJ^zxUTvXCO@SqMIE0)e7T4RiA>6;WrGg5H92D8r4JAo=O`k6;4&yx{6yeV`l#a)c;nS8akMR$_%UThHnS_2_UwGBNQS6ey``>bqb zkpCuHG}+ryC_Gt&*a=z~zw1wWHd;ZhQk>Asx1wj%bS;plmGcv#r`;zE5!ydKc6QtU}7oi!j3C^R2&N0gqIWmE?$e7FcWUJ8xV#PWV}=u?VZ`wJfiN$#C`-4o=r2TLyecC3cu#MZ6?KyF{<0V~ z)n$^a8i_A=Cu5*}J|`5XO|`%MqI>jbB|-7Ll9huo_aFYghmJHksq(*_reVsd?b zQ;s*RxIn=B$%9NTZii-zRh6jc+<1A*ZlpvrSOJtb!t!BkbV5(~f(Cf{TWgxSE*s!4 z3L09eIHPhaYOWPwbRZtYSHU-vJ@NGGsnR>UUMc zJz2mHibEln<7SMFLqd&EZ|hwjUZO4;J43<>Q6tR^tG3u-(u3|QMFaU$?q6f|5A9Nl z!29Jb3e=_oZg45)jMmk&b9zfqwdB&~pZGYjM85sC_gZm(OC2Yc>3V}p;l#Qwa$(%aWquZiV1i^j8MdZL z5Ho^#ZRqTUcuqQ&gf!K7atGTWHg`SK!`4V$yq8>vlpRkOQ;LQup}NO|D}a7^OAOiI z0&O=<2+^@wqW1SZ9zLHShW`(WOVO!z?@|n04sI&=5e;q|TrxZ*=1I4(nh8rWEi?1* z;3ibII>HGQ+Te2CRDl0&*$oj;-N!BkoyNv)EwT~pXTn#qj$gtV;pl_nQ1_4!AqMpoalU>k(vew}WBHl1mY>64wS7g-kxEDn+ijFhcHhQUX2P#?g({ zzlp$cVo*?umHIkjdkfKXoR~}T3IlO6FonH5IOjVIwt;21OHmHEGIF~WOVOLH$Z)^G z#oXydt**^YSJRMZV@f76cdw&g3eCnSHX|*ydXsDJN1+&#yHzy4eJ_)jqZp`54%6hg zLmu9uaHRS&A=bxG<^C3P(9PywML;m5|5YVtjEp@>aX(#T z?z`pp!9hDOPI&>%~l_Oy{L&w^;11Pt9JMN)HUPyc&?~26nMc}Pwl7__XZaL_68UJCW47!?jf?~Q!|mWx{X2b z^1K!ugFa12$Qa${-j7Peo^jpfOH}0S(iV3rn%1 z9{rdbCg#rI(XbAOfai)*(Xru4H+sh;T=wdIivLcG7l$~(dbh7Y4Czv+*06{)xX3P33ISfkIRPYZ;j>L zBY=hVXuWJbZD%ZVjXi_y7K6GZ8uZS5%1=SejMgZtW!N4;wxOW3wcWz}l$*7<3sH}A z5(!4brI&JAS&Hv+Imo4mB^O58M5#p`CuUWZI9JxZ!mey}Vc@AJ+z@Mn3szf{U{XL$ zDORLj-hxMq3n*80v6sr@#OCEKaH?e34~Cs zap>)cz1$qxn(dWfn1Ii4J12C3`$IUqtrSw6$28Wi0#xFBhM9F16ruGz(N-W(X|_YmdCSgS1+jj`TR@E6=sP%STSQLJqE zPBe4qYVZaZK+52erKp#;KrPOQ2B32lo~5Kqy>yn~33Hh`V=*C;18@dPfX$R*A%HSdGoE0N;Daup0 z7|8%JLl81`)Ca-@C%c%Q1B{DZ%1U^`59sN#CVld=U5Y=(abjuksua1wB~g&36!o>J zO@He@NOF1lP7F`&DgcLH-U0y&fBYpk5zuza?V-tEiz-E`rn5lZZ5Zr-*#ka4##Uxp z?HtHR6(dWVJGd={`@GR%6^!w?g^QygG+7q7ZrcmwGCPhzY!zoYj1T>6(F=cy%*$I8 zfurp_`dg8uh?lpRb+hU2suRU+N20aC1)5%&!84p7>pStm)fOmRZ1HM~mif=CkC`%-U1<|h+PE?-Ay{;W8*J#BAXO;3Ke4G>ppNtG;ByfM5_%S zf$76vwa=ab0>t0BC6rak?UKp#3v1v)IB}(4$k(Dt)%y~PBbS}kmP(aJ-1=IS&GF*@ z(xv#%D8}Uy;B|g@Ou?R|D5y-{Rp3(0Z0LmVJWh;;9498xpiH77mI{*}anpy!UvlSU zJFB_zBKz-IgN8z#-R!msoQ^I<+R$XP__AkMTEQ_sTWPX2&c?I=8q4hQSFQLzIU=Aa zj8(!Xt1vg@0wzhxga!Y}^aL31>o_>1)CQMa=R>P4HA%xsP`4D)ulR_2KjZ!-+Q%~y zgSw*W~%?VkW&)jCJB1 zG`b`KV{5sE3;3d*gw!s#4;DOE>h}hh zd?Mc8LXrjEv&?Z~X5km(S&GL8MVhpFc}wC*&J8X_Q)3KtQ*JQT5@I%)y9h86K)vukehBs;9K#y4T`#( z+6Nn4$d&va)T1%Y=`_r#We6!h=QWix#?l7Fvdi z=ZfuBDMBNf{k0V3n9P0G-ubx@|+Qv*WZinE`f_qNpL7S2=cd)V6|;kz;+6k3(y{)gRg_ePavmtyl`?T`MH z;$_aQQV>mBptVd_DNF2+rh?-uNR1VGH@?Ok9x1l4FJGBGyVfAE-Q~O57BUgCoEa{f zt~+Nq0j*ts;)UV|i{j`BK%?8oiCrgvm$%5@=-S%?>(BquFDa-;+%Wx=b3p?Q3Q@<2 zSu?L?yfK3a_DxGao+{SLAJubj3y;o8b1Bv)t1xldPd5S}MxzBT!CKkwO7V|yh7%h~ zk%6W#OUo9_+r|w}F8L1oD2_J&Sexyo@Dh7*NUaXz&J@)H`?Qxy$1zYzheHa?bLWUD zt4q;_*g2pS_s=1K&ab%f&J4V!;C62d!rt-M$??97thTTcwato;xV5(h1~r`G#7blg z^n~`yTU3iV!l`K?uoShoB{Am02~KE|zwfie^sU%|Mlq3cG1jXskiLQa1pEChsxnT9 z|AJoUEao_|yHe~tEmT4qm~XXFNAgG1VH8%xRs7gXv=N1?F+5TmQO<3E%={eC682(f zj0M2k;)sJmKHA$#i+~=fx}g$(V+QqWL%~ss*xOPOrhSJ>env^mY768pMZ4rZjuW$` zHxyu-6&j2z zH^hxqGHXkuVN^@qLttx)m%=Tmu2~#L6s|^R_XHYI2?N5Q_A>d!F?dLIdueRkmisO( zM8vXiWIGD6HWYYo%fJ5XgKuxiYD-t5bG|E@9cJKuU$LhJXI!d8?QNk4Mm<;Latqd4 zSc+P0=~BdFMKc%-ycz?U(EV_SvqHSuB5dEQRf;-J3|_sz#VB7Bwi9qeLD3{P2K~3< zX`auZ>|nYPX&R5E?jcN21>cP)Okp(1T-y2|t|<$b$z-0g-er5T9Z2TWClITLD9La# z$k%`lZVS*^ZK=3kZTYvd%&65CoDabV-2L%V)~$4(8&HbXXn%hkCkA7c;-n}k3xECc z7Jzw%lZey-NZa~^8CtGhZ6OAz|A#+We0%%WHwhXPU0H3xFK6Xr*LzzOqz=|DMO)26 zdH8^$?$$!7PRoeT0L8jIe| zbD&&ld$lEothThja2XM))fQ2(L(?gXx>SQ;>bXXciEk*!(qA*e$Wm$@tZK2Jp zEr~7A9zo>Q7CzyofbAv!r9Z8< zgxz0@9b^GLNj$JmGcTSivJ{__6f84nRY+)f!i|2%jYR8GP3DK6A?QBd76MTtoF0QudJwk2KE-S9K9LO4C-*4 zSd?bwBks%I7DpXnW|@UQvbYp~I6JL80Wyn0&$v;F#3~)vTDSl`IGOJ{Aak6Ur=P={ z3c5EGke-dck)k;uUMnB;#$~pR+tE${1dRn}KtT2@w7ns+>q@REcd8XAN9BNhF?Y6( zle5fDTr(?K8g}`$~G~#M1jAx@MOf^3AfLqVF8=$9(JWebi3~G9L3w9LD zYKtCm<0P@80ZUyWMPaU9Z81b&i~1F}-HZ?u##(Nn&2(D!I}*KC5L4@Zo=DCS%TB8) zMbWFvOp}e&OMIQlmuaZ_9i^Es14Ml!{#@c{n^OwoNq>3{1m~Xh6c58zMjlB~Q2P_> z%Wg~yo#7&^4F&j8YyzN;N8I8;=Z4i52xe-5rd5i%w|KyfN8CS$=lB&jU*59!6tEKW z@)khRK4|7ta;zn%V=iN)b=E z(_pFBlVi2Tr0A!4;?!42iLb{+V2}uE&bc8KZgTeZ2hS2qhKViCioO{Q+Kvje?eH&U ziT=bI-ti4-VW%mX&Q*$K*2pK^v)V#p-($U|fU7Mu;cR$awIZNt?7 z7_mRcZ@9I$#mum9O1;l&CJ5^;MI?ZQt;Wo(GJj%psA9#`EV(HRC%Ky>g;0vU^o+w$ zQ3<{qLNP9rw0`z1IsPF6!9taX+mdDdb%rXIW!MDA+%r9u0w= z8wwOq-A{f(>2I~ks#aTIIQO=2RxCxoNa#A{=XA2n|G7v-c-l9=!B*OvOOX$_Vd7t} zwpeZY{0myQh|%r%%EA#$#dOuze8Wp~x6VFyVZ(v@^lS_=WuaH#66qb)Quh$pis5#= z_a9br_!juuxXVhU7_jh1ElE7OPbtz@=yx1yr|krR?+FDom!s8|4kZa5aq}y2AdIJ> zR$JN$p_>1Jp+@w5TaR-H$YRU49K=XUYE_EfXr<&{ZGl%>C8$z#`m+8WBZ*g=JR{v! z0NiWdivgm1=}*tIMjAmKB!Fy&E|G>&Ep-p!yby;Uy%0~R9Y+#2=HZ4vXY>TI-twvx z0qaHR%E(gmgT=D+XyRNotbTb*tQhb^ZmzbBA(1g?wZ$^})jGkG0FZ24ZTXHx>VCrg zt#3gjjWSBGieB##(vAXA@FXz_>PUg8PoBk1+|`{u zZQE52LMUMue#8sMc94DaD}Cues09qUJiLvu#zY_~-~J1KDMh8AjR%QwM03J}oX>{L)2|W|QFnNe(CZeC+S?M~w_S=8CYZ78C1JIt zN|CctDSo|f1Q0C6SFNx42Eb4@xZKZ3bfs^^0zqW!Ntm6Mqs2hz#S@r3aCscUJC>eZ zleN(EKjNO1N>j5Dft7F#WjJBDlp=qzm?Q1x28d(@BX_N~WEv<&pO^y_o6I9x`l(8> zCQe)LDLAIt_rg%_Yhg4bhoD>Srh?uMAJsN>J9vq zAY$J?_cEBSNNW^e-rQ2xRuLI<0n~1i@4YQRd{~NJZDA=kk#h8w0%zz%EeNh!+}jDX zq2RmC`)o?&T{K>^h>Jq2koVOUg4 zb0B*o=yDrcVPG_<{54LXq%yB`iZ43z*z}e93SQ3r8r-V+}i>S&u`*} z0=z5(nwm;ck}k@V^OHqbLrDpL+D$+c@#9)2iP4x+ti3J4T?bOAkql1t(>aF#>N+R2 zK~LzF|3+7&?GZ@^it55Eo%YKl_Dn@%%uS}RXu9xlI+Z;+J(VfNInk~rtALf46n?~w z)t1`ZVp^kEitj{qhtDFVzBF>qDrxT#68I#Jk)Mh{@}natKMd{a1xbdf5^!WyCn*20tWr0 z3PYzo#DB6GEm#MV!nL@mWW6oL_K=35zh65ePffHkp<{Cj2w7~A(T<+`+tc2bLal99 z{oWQcUQ1CI^i+z(g3BRmwPjLcLxJ8;zDw~~ZMnR+#e6ltH=iV?6t*Q}1CmK6iNSc5 zBHvJ;lf*nh?I-vX{A_l$Kl*Q^ntwr4Tg`>0J{Jn7B?@dFOOp;I&Xozkt-Y34tVEHi zV=l3{w@TKw%FmANb&7aCf|z1wOBTn%!3@q~Y&klz1$y{2XK%9Vy)8nWds|?_Nn#F1 zC~EQjm(ZM`uC}x_Eo0E1rI@vrF2%<~YtY$dg$IkIa%@f#3pZ`}OA89qutA`5W_DEl z3L%#w_O{T3HE8tw6?d4qo#3*!1s*~_F2#U=v*c+rE}ob%yl#dk=rs%;^BO|gdiOO6 zBgYJh6Y`(UAEvov64u!mOft0%gCUfZ>MtM7coZinCENc~r5MaZ=QsHkLTzdxCy9lH z@&7la_~1*SvD)&t{kn{v)1y~g@T!bhd3sZwnNwHjYt@Aq<*8v}^^3&>=U3cv^K$Cq zE#rViK31fn)_YqzIRoc>MboekK$2uj>|27s24?q3ayJO5?#6pWO9_(lMbFGUKf=hz zk?n^21JeXpVvoOSl1*+BIF>*y7DiMa%4nr(8I+^;h0xRY6#7 zDe>uEUmSlAJ!jgHQtu}}_7oUjGt_F!{BX86w*ckKD>wrzXPR$b_T!bxjz`>6i%h*5 z0B;YKVkqdF_qHq}7yi`33K>vZ&g?eErT}#@V|d*Tv|*K`FR{#pwWBmohMHz3b4@Rk zeVzW+L#oaR;iQhigP=?)d}*G@r;-DGl;VG=6h-8Yykzz`*N5kdg;FWz@Fq_}5p=ge zNsqW^la)3Ua7RH?2R}hH>{5L2cVd1$xu}EWKu2Yy?3O8TwM9SVCgR$Nq|N&Y+RJTL zdBR;bm7)^6TYWg3)qT9azE+Cs#TXuWn+%%l+i6n z>1rkgvu;`!4&yWd_fHAr*J8_lfsjg3k?zcrPnsr8CxGUJ&NFlRqKH##fv+e(R$FFo zOUMQ)$qW#WQe<|lwh&Q&$g{+fVPdnBt1aA7@QLOJ+}dbGBulYb6v|S}jc#r@C=)m? zYEt8!K|GgE*w`*I)likx!3)|j&BG4#X&rG9;I^fOXMiuGnT%vF$*Qj#^1WIVATPk= zQII;8;@J6E5qn$4-BL)1&YxY0g~C$&CqBxdDZ?=9XWVKjN`9Qk7x8B+6}0Qhmp4Kvz=V}%M)&U((9+QHI>-#kejP5q||_4 zaib~2Cp!fA^rjH-0e5z{DAxbm^0lx1;o}d0*dL6O(a3g_$PT##xS-_ju)`Teh;$9C z8zh5(1-pkVYi?}~%~UChXzK_swJ+GFcs%SZPcjLXQO~(y`rYri>+doPt+;rGj$$yH zH@H}4pNoK$H$v0)zyct@8gG8e{lNy8o`L5Wa^yi84>~HkSqUf-GHgu8lIbQ&*sCjBSVW#f3`B-KjofM#BpLYtMO#J zEV+=ArRYrsmEm?)aTWi{#@#5d;s7386_&3cVk#eKMN;J=KYGRe* zFI#<{7U%5XqMM80k_&uUa)CrhDEM#aw>P||0NfJQ{pc^HR6f{BtZ}d`#j^T1F_hxC zTOuQ#b6cNWRgAEkrIuWpvxH`vbmx5_1wjg^v7(=$ z4{oW%Sxp}ZtrB5QqiSPWGdY1yagVfY==jSoysgrrAVCHDn&l#hVfgPlf1&s6txMJ zj-kNAMN!8H=2?iAqdO6*J55_lDw>+G{M*p-<<=MWgHbb3=Onxss@BSO`9$Tf&H-~* z5=jy^sMlu4)pcMOME1j}2|B!X6$DSuzeo1KtGVXC+u(A2Uj|}8kiHqY!Nq0{XxeDy z1ke&Ak8fjM-cmDADXv;nOgTNuF#Iy3p@Ewr;?#Dm4sq!V8GgbC1cZ*Vb68(e7F@Y_Qb`(3&o6J8N8Et< zEkeFujLN5f439dkgnXgq^H1q#*VUsC)T@Ou*CN zDSE1KR?5M7UZrnMxhh_h$TS<&LWSRsL3ubsplyTIve~n3vaC`((&4!x7NTS74-Y5j z=$+8o;DY!sza-*`8h9p>CtFnn4UstJ&Gw8oZPVDtP-o5_(dh zuQ`fHWF5UVgpC>rgV<_hVAD6tN5aG_wC0i!dq){P5{6v7C+7_=154PBax>*Z$FB0e`e<{gIb=^Tz$W~}h z=`=HjrW);i>Vqn~W2{Lo|8~fI8158Dsz2P7N+W(jt93tvHQAIRw*BE~JHNaIULGf= z7YQLubc{eNRYvQ+WO?C_O-4Rh?DW}H&mx63!O|aF zg}h<4g?`1Ei;20v1*TYF_~n zYI?@ag+H@R0JapM<=7mX*9Mp1NHL|jQo_Ep#Y#uFEw}Mja2Wc{+eU@R2gz2N0(Qa% zQ!VVECyJ5Nh;(b4)U91owu=J5t+z~DDK$2#1$flD57@j0!D}S8WeMo~VPD7K;$H*B#4NHs3nPRXWC83f z&G(>DEtG#79H}1eo^KAvk=Ipx9z7xJUg ztbT;jFq5yJ1z6owmxegm3tjD?ov3BC=5+_vFq>NN?y zG2;yzToS_f6rd98{%RbymLRAUo6@D24KDDq9hsqMgUfid!6h&cXN-^}Q7Nv6Io?%3 zc0<(H1;qSamLg>}{CM^##J=1DWXumDI1m2$XuD1V(E3(Xa+v5oXL2F^NHup@#MBmr ziMt8fH)fg=PM8rgb<`_CkqTHB@eFo?*o$AE?cpI{8-jf13#yqi{aS75Z$4HcHn{XP zl@P|xMM1kzixI0W5dWz+xI9ha#ReBMlEq2SIGeNDLXcqiH#7u1SzNcUuK=fsdAa4R z#NOayiZjh<%+Sp<(yoHK&DT;i)Xecd(blT+JD z$i{PXe1?+{>R5_FLT4rFnPNzJ-fTUJ6Gn?qS(gx&Vh_nU}Mp{eNJv(18_Zq zilN!AWijo6-I&NkX-3;uEYBn1PL^AmtMO`!z7%&5uvu+k6dI%XmI94A!wIrhTlx}o zoY?#3d0C1D5+5s3252JlY74Y|hErzjNS30Xa3|z3rHGU5Rw;(K__+Yx6Q;n;Eg0DH zD{d?3jjKZz!4R9@B=i+a(f6^YQRB1KIq0V}19hry@VOCHt(?!}LO^V40Vj)G6YQYT zgPvIwp1^Z@mmsJ;d9#+PP=!BooLF6UvQb4Tiouyha4AJ>ZQ&#CotFCv-nT(ltzevO zhY_nSKU;oz_^oK0Rc$H2Y74Yoir#5e!3D+G*NN}N9I{xYm^(l)0u{r(Emj{7uC+`h zrWC!OKp5k4-e=-$L%+{(s#)EQf~vE(MLRkKDr6dKelnEO<6*q6IKuvMjYh>1W3X3j7mbBx?*;qW zdlvz*f+F@Bqft~ecCeusYb?>&yB=1s_XaA81yoe9q4Iy8X*;{ON6F=V|H=DfK05RC znR)m!yE}7xFcK)T!_7VMTb$^pxB-f|EIy;BE%2HZJ#B%n6B7lYNZ)N?@mR+sJgI~! z5>zW*_hUR_kwOtn#2GZ*AtVh@TBjA+x4~R;+mxMPiXcQ<%S~S>C(b zV+g6hr?{ydmEp!BEyx2UnbHqL@Y5C&5e)FOMO#=1bViaj@HI}9p*(EoP$*KCnF@39 zZVMeY#-T-w3Rrrt2m$m9SfGOV2{+0T1=Xp1sVy^B{D}=?RrV=kxF<#@v5_DJ{Gk=$ zIZcHUr}QI)ipT=RETLh&if%-wLf5tx&`VSn@-lt-^4nrUNz0%+*43Pc#$p`EdUzB@SLEUAzR$ZArS)s6ydL* z3O@lwPzj-CZsP02s15x(F=h`9pN;HKLebL}5f!0`=Cptq2%bl_((51V9PeF)@;~z-bGAw?%Q0Pg@kJnXe+izX^>T z#Dwo|f|@|_J~IF@)sR2lf>>mKMF%y!wsL}77^(eeyZMWAv)nf32HCV5{Wv6rIe_Fz(V~k z)w%`>#7G1&0rT#NJB>k1SvOQ-sZXt3WsPBQPFR%w7^4Vi3@XN27=RPdq#zR6H;E}- z;ubf5qd<`&_3Rn_o)Q{>CYFc7;})R73TilQftsDR0Cf-k^FQ7qPFv8BK#_Dp=R!!V zYqRnwiVCfQHy$uoBB{&q+wCyLxc`Mps0u`5n|u85GWEX5-q9B|6+zJ z40k0$%19&%6qZt=211ho9!zT0Cd36r>_4U0Pk?#}2SO+nojHpvjHI5lq++8`Vm2tE zgQrT#L?YSTK_V5>4?k@ID60AeAS&;+Fb!@i!l$^QAQYeCwjzd8a)2D{aH9+gHVPDh z3s;~>EofZOh&^uBlf`#iz!nR}CV#wza5Na6wrHSeGQqhYHKF4{8j;9{NC>{ijUVFX z-z3JyK^p#U3+oFS35rxm;~}j?mU{uI98oetmn4e?1MG_wj3o*W3<3;F<+LT85IL{V z1}&28ouURn# z@drI=0g7nKRD6${f0G!8qVjGFb27oZEzF1X#NTb_c`ZB`q2-l@LANMTsG9q*@WO|5L4?^{WsKmm3MHz}1h5bn@e77YE?Fa?5rlNcnKu~3T$TX2t?l@~FfBn1S} z5;1R)f$y~g*6dT_Eth)OJIsZfj~?jmoL)2~Sc7DlpABp91?K*BLO zX%reLY3@ueMbnUIP6w`1sAMvu&^`95y! ziA|BZDh^1&e-#vAhns$9j!V(58{>h9BoIiICB~VCY z+7g~rtUI9jyDd~gUMS#ysen2$Q>6hhSrvr@p~(Jt3+)X)ItwDDut9==`$!}gXMTPFu1Mt4=gFK{A735(w&21S_3G`9jJ6JMaG zEmREQ)1HD3t^8CvUbO9BD#G zJY-}jDib#0X^Zl;@XVTy8aB8iF$yj6yDcCM55ETmPg{T?UnWNLPeQ}NpW>(_06)b| zf)OS9(a@@cKeKNVgU@g)U*9CZ+k&a(ABLbm0GezJObSGY7W*I#R0N892}?xkZxRC$ zDRfk+t-)1sAq=lT&UM0w5>R8o0ns8T5(;Hx@KR)@51CTDnLY93LAa$N)M%(e)Ijh7 zb62_LcCw7+n2AULTD`%KLx31L+Q4ZGRS{z#VT&7Ta@wL`kwqd6dACJ1BJpkuI0`5N zjqg}N0|f}O$*md~$i>$;0S(_IMl7j0x+V%Nl8&)rr!DwKfeMPk00;%|9cZv5!aINbv;|#hA*U?@iePq%YiLVc z;k1PWKoNY7`v@@j-*lL~WQ9J%CMkJmMi{r#Kgp`Z^;VWNgQ4gPWBQsBeXok5+X|-5fiW?^B^^=&_R+?e?@>4 z<**^o(0q>@cvkqT2+sHgi+BdjUMQg9u%@P*2hLomj05|`EpEk(owmTsEfk6(BABS5 z2w=n=Zr+nl%c3e8{%#9X@Y5Dx@x>O}6~1FdpoklbbUIXFA}4dN^gwf z_O#{Q5T$Gm3c^wuHKq|LjkOq#)>|?mW~^(`D0+%P-Wll$oUN z#?;$H522|W)gl!2-fdyNQWPZV*EgY#D3sF{!tx4Q{Nv>8xCKpFpaGOh{bLj*7*d3zBB(__gq8*92}Q9`g0mphK-ee|(1-ewnk!g1s$mR`!9dHmf!V3l1;K`r<0Px)wP~uyEXh;jb^hYV?1dPg^C=>Df zoA9)SDuE$TL{HfmZ3z#jEqd>^aJB3sXmrM+AQ8g@5b0?PL%_$}JxG@Aiy0EX!u{aI_MfeCeamSi( zaRbSm6pD|*1m7fvPz0XV_y`TBErKV8+Dh-;7ENsGqCgDPP$Vc~e+Wg^6L5S8Xef<% zKYWT?3;?01yxT&=I#47LSl@JBBq9q-wY)|>?Txg&V#DF%5CgDG@GxLONvK7UMnO6R z1+^0vWVn=LeNY?A9i~L1ia{7E!J6xMs~I;RC%aVyD-(I6fDlAU2B3J0@t}q2vGh6t zg(CbBA<0-GNyqTDITVVJ7}UY1xS^q^Eh<~l4I{{D%XuNCueQK!kDf>&D* ziefbQ8E$&)2L#Ikq3FO^Adnyw6)+Mg%3w5mp#WTz0%3rWD;l0zkY13ccH9tsn23!d z1r2rK5!ozAAgttg8lJKW6nS6NhjV|c)r24{ub{;_vfOYAr67m@{N0vVq9PT2w}n`s z5%*CHxCFEaMe=S7wWOyl!b|QIoIs8*6u=)40*VxTp#TU?XdM=e0F3OflcOHrv!XAy zkU%0La>(GmA~bl~f+F0_!J337Ew4}}G(??f;oTOr!Xj2h!m;=?21sa!$P$gxAr&D{ z{FpOx#6~h?CW=^}qMa#zlqWS0&P)i)M#gBOA+&yQE|o{eWvZ405_6-RFyOs_fb>PD zN=d9mD)2jVULzJ`B_N7-TZjV>if-yc)F4DCMk-k+2Y;ZuPpuU{y2Z`BXoDZ)ChxYW zBkOS(2cal|5k#RZ4r^#aD8ryA83-(*j18Emp+6##`o(2YdA9|$xW!G3p;Dhg({$1p zXu+Zpin2UB=LipsSxQkMemFW>X@E$Q04xsD8lI1YS`ww)v*q~dt7JTrpz4b`Yh_A@ z)PS4u7VV{R5l-lUV1>!wvKL%HijJ(n=3+80xG2`t6Y&@+1%V?M;MmuR0R=}cP_rW! zprAls*eEZ!@ZMP~j$DMCIw2m<6IVJ-ibwLc6>ctKO!84~XaSE(_JPM2Tu@I7#udXL zv@$EwC&43s*$R9F9(S7K5#!Q;7@S2Tl)`f{32vz(=2+39V+IOE%I#2w3JuT1REaw3 zsZdI!Bq-s>ZA3>(f1na(g5X0EI;mqMp^%Wu3ogQv$N`Aj7hLFD1>i{jehUdf|9Fe= z)IgCAED0!*p5Vv@k;rJ;;0rF$!PP79N1??R=TH?JI6{#OfmUP)u+5Deg(7{c09fKi zTh!u_3$Z3lVj_N$Tl{@;{ueXQ2lT`>k-y+VGY&F%zXgw6OeWvD54vRa@NysS>*L`% z1S#*n1G73-wsWu}L?!1+LRg6jYt^#vFlMNSeV5jK2YR^qX0>lWqOUIsnhkOF^vG)8 zd4Ribe>-Pqr>yo(JqCF8_ocLphnu&%M;lk4A;Td;8y^q%0dBtDK6Z`{cJ>Xu2ag!y zH5?7?>>CX59p1*nr=jZYoxO|4$N_F1O?+I(*x4IBygXrGWOD7Y)~S<~O?ve5b4$DXL^jQyaae}CiHj#> zFqX89d;fC!H$yI*p5MhMf2pD!zisTXa?^q*%fp^e-!SuR!q*91C-u&?J?Ej`{#*7o zIU1hxMD_Q#ChVP_aOl^SnOBVoPF!0&V_mPIKh}IS<6y-5dkKY#P99tB)rEwY6Pg|m zD|GV9Vb8;L-)7y}d+6wjE={i1A8|7GwsXPxR#mMX?D}Q4`$aURZ1j`9drL%L zOjy#nN&QlduU{HjBvWEdQ_$q7K0C5)iC7==X}M?SD<7|%3%=q}WNc*9iYC8SMOKb@ z*2om~Vos%^lUF8w-j(y5SN8SG8r%rn60mjTr=K@8iyfctwrz?2CsyRk5m_+qR_ko@ zdk_CP;o_V%G5haD)M)uMtkQu;qo%F>kZz}Oa6zxPGpb+9W0;t4VBIZmzp1qU`-aW0 zw5?WSzjxD7AI3M?``xbZmKBX#_2;4ZE_KS@dG;}Tp_=yfLU*^=-e`J%r^v`*xbyTIjpL{YVrrTJqy`=gQrv-|F~?xr58!Y#0?+HP6KiZMwMqST&}&>wqTPqtef5x#eYpjvm<`m)Nq} z=5ZFofTt%bOuN2%dVOQ&PQU(9GLP-C^@gYkPu*LT7<6XI9QzTk%Cu;{@a2viYbR8` zGGI>R^!_2u?4N~aUNPfsy4)R2ZOZJ-f5kM*WZTty-t9YWo>h!AHoopQWM`?Kk4pZq zJ!ggNYYMMfa6a$A!W}|}I)%Khk$X>@Wxuvw!O;ZYFt`;@0Lc@6xnGY*=;`>ep)Lyo-G*x$a}3{{AyAc6?s0UYDWGHgviC zBDYsUo6DUtFW;5#nUBMvF=I}Dp3uKguT_~baY?Bt%D9Y=V!Dn7r4TgjYv8ht7T&x;`Q1BiRai2l<&rZK zZaT#^F~0q=&A$5Qf8D+yllQak<*z+GJvx1juetoQZ?%hmwyo{{N>4MGZvHx_T(O_x ze%aErlH+2hMN8i;9#Y1ue5vL07xtH zdtSMer_zAAKOHaL^5%w-O%t3JKKgCNlh~~v-u23# zaA{4`*nHhS#P40zu1Qp*u`%~=j`rwVY}45@_JP9=2bQjE>Ne^8A3L&-D9|ma!l~FT zT_4RiWIQ|d&h(KrI)we~>;GiKA8$WK49@#*b>)47U)>)W(7My*XZIJc&2Z?uA{lJf z8$7a{IyB|*s2{T(iB11>*q7BUZS(dvI+PCx?Q)?`+@y=AM)bcr>c*vyZ*v~LwS4Rd zx1VAf4%_9MbJ4&FdEyGrJyfblg`D*U?KOSyt6yM$o917>_i5&_GkeF{i(C1h-w|!d zeLHZOdtK*I`8FNgHE&U&8Usov7?!Us^D3a*^b+6gy^yi7sY2tz!%q7j$lto&pu6Aw z^8M+Lqejij>-6mX>SveJ1s3u;`moDV!@Enn&g5J5SFe8c97Y}reebYtpUcO!p-yqd z=Kb|&DV-}*Rdx}o;#9SolejchN!_K%v5L4fIaaTh6|NE~xHLIdNyTLdf+lwv!kMTp zL+R61jK7psJU7!z_y3JLh!@@IaAnZn(5hYjPbM!h$^0a#OxjhQJNa}^1f_(=@IS?h zspySbD1(yJ>M1ocfjlLopfslcAvUQg2whN+&WwasM`tEt$rCnxHbsHW zhtEbQ6ok+WIgx9%a(!M-p4x)P3F2a%393chkhE$Q=Ts(w;aW{A^eRGQ#8{OHFlM7? z20~5=jhoPFi))Z553$sOI0Q^lZxcYZZa)qB7{OBT_N;j=%6Q8 zWKw|SjYa=R@H_4Z~E!&zvPwN=8Vz*q__@}$aylu(HjZhA7I)FG@*9-qB3 zNiNap%v{AJI<`Eoipt#EOs5F`my#!UsG?K!b1~~D zo(p-*N#;X?kkr^}TrCVm7KP!E(JPZMp6j*hAR$PO&?Jus6m3%eI=M?#K2l|z`s5|@N$@#ncnvGegSdUN zZ8FJA%Ae;>{-sS-K2l};zn8qE=B(BwojkRzn$yi)s`9~%)nP4hRwOTo#k2%93u;Rv zQRM%BCNEX_NR=_2A5T^gn=a$U?tLtVdcmK}h1(7+h2}$!& zO;N>2MoEz7$)mg0&Ok-VgG_b*Ex&sdPi9Z*t{GA5Cd zLDFPW$>UvXBJkvC#FS-9U7c2#8e0x`ZH#1iB_#?ayD%w;^!2i>Ii33C@!XkTEHHX< z2~p`)jQQA9Y87K{YoTK$B}$rP=j8OVtvQ`eKPWZS)3Hgw-&D{o$;^>^Q{R*sr^Z%0 zs^pR*^n%cxl?7pHlgDST9VHK+ntWJ53lF7Mrz)@rk;s$6TSY@CAr^$jAW8P`CeLEf zq$jD?syVZeYPFiv8e7uxr0`bj$K|}$>XYPo@`CiNSVT$1#%Sr67A!5zf(FrOHLTQ; z5{Y9xNn4BE@}!tgg?5&lUOglYm%8M!2_%s_J_|l&b$8sKOOs59Myd7XF-U7snOt&` z)2n*XGD#(m2Nphji29jfW|}z*XC!z4F4Xc|PFigsEiW5e4#X!xTiJ)w$?45K6p2V) zkRsz0kIQ*J!X$HNmLTp8Ef1iGl1PY|v6(;#!y`))PV!0ok0dXVN9VnXmMem|gpWRD z$YbaEZHRl=A{xGm3}Vkm0AhP#C(KiLsz*WW5H5atSht> z!-BB|F&mdM5i@)ci{$hyj9vqeXOg$DkYqtjD28Z};NFq}7fBh_BwsOBY?bt@jTKv2 zE~HWbiIk=yNfk0Vy<%xbsgoxK5+rvKW3)(cOKI+4i&B+~Fr$R5BN8)#;vlPN{$z<_ zCsSe~`oK#}PA|vO(6})mxto*1ULK}CElkzP(ikgNjMC_3HZ`^~7-c_cO0rm?6$3?< zGK%b~DDGyI5=EYrKCRd$kv++Xllsw6$}N;OHMY!4nUfMmrjpakwrZLrFH!N=P?E9b zVRMaSY%zPXji7k|O)K;=p|KIHY@?>dl+O#Z{GBZx4Ks(E%+_knkzp;wD)>zT}?@}Up z(5;d-p#GU*h-s!ITxyJkZIW3|Nv~Ge$jP%J%>SFNY00zV=bo0lwB%Wl0V`b7ke8M` zD>7h(s~UOY2EdAl{|~t;$rFj=g!Ne~C044$YhBu>Xz(yB=vTg!pLRZK}8MsUgLg`pWilPCPOgk-NbX0=Q*)=eE+%Qk{m zhY_66%Y@Ks2-!wWi#e&qf=f;>49y6VJmGFmC=Qyz>adEf#oXy;PbU-;Nf8;D8e8U~ zOv*eQN|Mv-d!ZDQr+Dj7!qxJyxki{KkvpC2ad(|oiO47&8zC|?rUGeB`WA|TzTUDF zlBYQ9QruSz(jvhv)wx5d%0-w_Le>$9nLu%nRdfZAC5oL)Nt2Srf=*5^49y93@`PTB z$hR%zVd~S|ThelooIgc|lwvH&b%nC6ymks>DS$*uQ<0k2K{it#8D(c9Kn|KbU!lo3+$G!CLuF1Ijrt`@CDJFXCxK$xiB(0y}5@X zNynWPk)X^}eE13)gsnnYo`-p2c|gTmqO^guykwfhPmE83wz3bUlhd1fD3YX-$DyZK z^T{TWJ#L~nNt9NZR6ck@xVzSu%Smfdsm_i0?`?8=RWDj5b;;us(z(^;fs@P!_fL_r zCLyT`%sb#ef1V>D=LA=qOMd$lNV8b4=P+lj)?5Eon8$F@s)mdh-cN zlE0fgOTW05Cc(N?tJRz|DoU!80hQY1@ljg(#ZB29S?W_} zOlOfYTkX$OB!_25lMB zC%SXtDTUu=eZ5Xck|_1bUSRX>eL^y5`fQ z5{tTGf@70^p2d6rVATr)KH z%Kzfz@l{RCiKmMRG^{YQOeC2+%Wk02|HWm}Bt5w@HMYDv?wgX9XM@Z`zMUaIDp8spU1vSIQ`h*2|v1vNKM5-=hb z5*p-jod}d(Ga(edQSsbDhV$@NMY zE|EPHtqvtVZegzDvCK7+gile)9+yZ)oHSSIOj={iS&@0ACq-rUQvnqpzMKj!lhjfW z;UdeDqODCHAGWkJYMvrK0P|EOYb&QJS!3Q0X?ddl&B-&*9-pH;Z!#UOkmsl;Lp_(v zLG)x61M9 zrle1bu=;8y6;_N$jd3b$d7A!n$&=t@HeGG*Wb7qxY-XVdG=X{Y^u-o1#+}p|*Mv}5 z1$kNrvp~u?El^5S%NdbvIBg-EbOGm<&{{H>z%xSLk4&#RKBWRC}dR`}^mP%RRcoJdB^%}A@Z)m&v& zmcS%$%qO7rR3M2KmbGRYJpn%3@{V*{J*R)aOiaaWs6vB;Wv!V;Pk_lwGJASX|9+WB zk=am%=6@l1W}W{x1R_P|!xbtZENjg*Iue3B%h1#D_)myLhRjDRRC>8nGGXp$E}_X& ze5BC2KN<4~|3-1+wi@YwofY}fn@EyMWdYN3)yV!&CeNDmB<-ut-v7zusi*iq$E79Dirl6p zFD-diWWWm7G~}fv&x#CK;hKiLwB%Wl0V`b7ke8M`D>7h(YZ~&>l4nH*tZ+?3URv_3 z$bc2DX~;`Uo)sCe!Zi(fY00x916H`EAula?R%E~m*EHm%CC`csSmBz6ytL$5kpU}Q z(~y^zJS#F_g=-q}(voLI2CQ&RLta|)tjK^Bu4%|iOP&=Ou);MBd1=YBA_G>qrXepa zc~)e=3fDB`r6tdb3|QfshP<@oS&;!NT+@)3mOLvmV1;WM^3sxLMFy;JO+#K<@~p^! z6|QN>OG};=8L+}N4S8wFvmyglxTYa5EqPXCzzWwi7h(YZ~&>l4nH*tZ+?3URv_3$bc2D z>C*xB4hNs>oYlk2eYmfWhwBiey!#H!>f~hSV26Zb$NZTt&S}%+n{_iM|6!N@ z*3`)re@WemMBsC(G`BGtH*X=y&O#zRxt$f;mn_T-dYlc=bIA4V!Nq+u_B56|MU9yfNmLzvHZrPEX2D{jJ^QdAs{P zS^h`Rh%EI7O*jy~Wmjy`$??Q?RHfBoja{m{T}YO(LWZ(CVs?#^tU zRh_CRlXno4x9>1!sE2)*)_n(hxcO$aZ$F~1FAACsarN}bYTtQ)JLIKmwW?X|n|ciJ z?C)#mRJmGKdzzCru0BJC*Q#aT#>c~bfSa$kkDa4~oqa>^!6Sxv4M!(C$QoqPJe&3n z2KWwdEfT) z=Z;x-;8?|G@jrDqvm>(J_ZjQ|v;Tf;bK?H*u}y9+z3S=q%iMvJ-Mym8C4Cms(19N)FC)jypfd~=cTAe*1J^!er+TlIhA zWE+R{hNBq+(t#p5#tuxA`>zW1@~2T>4n3*+#?d414r&z8FOmNoYk9e zuMNo8=V771G8w-s^1RYL_ui*6wDh0#$kkv7yg%}m%iLaVPqhjAwz2ookUfrVo9_S6 z=7HzIl^r+j9X;Fc_va&DJo0rPlXqs#U;Tf#>-r|U!LV%2&z>H=E`FJ_;7av3w>%v8 zPD zDKe(L!|L|gI<30zoNMZe^;;heY}#u^n>;_ozVtr6Iv~ry2if~3Rx-H%l~BJ&%fU`< zPv+b=)YIV7d7<<68~c3+giY;Lp+jv)$Bk?E#K&zd9CockXpXmG|dgZQf_fNP}&B3*S zY44a<#!_Q@uJ)X6lc7|m*CADGBSU8Rxo`FUBbV(hQxQ`JUN&sy!uw2+pZ;?eI8t_Vtcn;mOzJkQ*ONMYcLLU^$PU!^IH9=WTQW_yba4%@pk9c z?{5F*TH<2%zcPPuy7bfC56esXjdMNT{Bv9`!$X&d>;5)B6po0G@y))rqhUjV3)RX^ z8MiZhS)q%kbFc0_2((*4M=@+20L+Jo|D{+d?&7HjfD`SGCuNfrgX2 z1MlZ)czW)wML+I0=HImAj7$B-wq0)47h5o>TU2G^>>@)V3a<+6GBYNv4pY!7aI?r7L?c(8v$-@b1CehI%f z-7$WhkKgCUKSsUVK7LojUbC}xsd=Df(pYn(Eyq0!@9p??0ek@1T`vV(wYu#?*Pi>tYzjJ<- zH%qM{=T|N}G3-;p%Yz-;cK0aJ$mF!mG-U5tLtvIaO5D#e$dK=9m#CF1W8c*}(cU<2xFPD+$K$Tk%eOqW`{J#L z&duCz1l|h&)xT1=dW(8|$$zb})0&+jF2Suf#T^R?7}nyMDfg}!etQ=Wc3%?n=O5Vv zv-oB4ujKI{(9v;gl{wdo2Hou2z5k1g%}&m@HyT~HxPR%sq2`c*i%vxQ`5k@u-8Vz( zM#g6f^lOsQb9&aeQ-d4rDOc>G;dtJOGyI0G$?^JVue;5Lf77FB)Qi9YRpw=Rf1$MT z>8-po#|>*?9K3K||7iGS{wwg<=eli*)wFwi`sQStRyR5hxG=1gap>*>Emr-xe^0{} zZm#jRMYq=66I&|N)L(aZ?0afY$kg|~2A5?K3${HLX8rRyGP|L7<-=&p5{&l!jQRm9H#+OYvSkZR%?Ge4sWxTbz)Ra8CzkWEB z>%H?jW5$QwwjW-3^T=|)%(W&mRpltM=_{pJi;`6}y+u__6h?Q!cSFT?TKc z++)zEbq#Fq9r|J2`z>SpmKa^q(EQkx;FmiqZ_k^lTKHT)zg_u1L>gxV4f!eN_Qjcj zOPwCXhlD)x4;Y#;>g4I@L`=AR|9Px%4=xZ0}C);#kx-cYs5}^?Xjp zB7Q62`S^}QuA8O4G5UHQkN(sl6n?_7&1d{My0gLXpieqOud^<(&x|vc4?fsBe4by+ zT5zEc_B2ejU%P0<*>{x;0i`E7=7*brOLc9JFIjTxL}=ijv+!H&Y zdh|Kd*|#&_<~{m@@uutX21OI5I}aNh=`zkE*OF~+Q^sFxG5&t&v(hcrE}r$Xjf3mi zslz8khLmh`)4jyi0)~^*cF+3RZ@u&DEAMLBWXd-8*}PNDB8=H99WK?aWmt~zdsz&X zLMEKu`Ps{GyTjFOeUG=#ydugkgJHANvG)&uUL7%^pzW4DXS_doH2BctZuo<5>s)=A z%@E@-uh#jHxns|_@@P=LOZ2;=A&pH{2gUzX*x1Fj#G~-9QKh{<^=XiMRQXuO zjS&+QPdv3BWOSd>XxNg@J3en7exhZ*rU_pIzAv_GTdu9=4$t$8n7Aw6zPoYux36c- zEEIh0{i;t51G3aCW$z#Oed84aa~Ps}pAJd<^6**Jn#L>_a=zNRYV`SWGpk&14<7rC z?eS6eZFc4FKXuTn46VOhGJbwBs-o?Y#4A~CA69n1>)QL56Yp;|3&@h)t$t3&2e;fB z#Py1G8SmRQ*yM8O&oiI@3JUsg!~XEsA;0*!#C%*dCZv(iu89HpKbJRrn7hO9@P^xs zDaBXhDpX-f5w}LjuyYrskTYC;{ zJG`xr*1FHbs=0nxesh7Nt;?yREjle(y6tuGtyM;jbuZyq&eL^(f03Jg9(Jjm z=h-n2L&AnKg)dJDuHMIeL93tONBuCn*qzpSeLucAI_GAUTX*(8{n6odi}JTT+;Z4gbQ?3h z`^9#+Y3VclT*9-7j+dkB;@GBo6ji`)RV> zs{A#+IBmalcgyV>;d2L8TCsg+Vc({1-TMaDzIpx_ED9UKFE%bwd_#JlKjOv*`)3^0 z%xi&7lj!Z4T78~2VCUez>BhbpZ20C@kIpTx7B$9Jthv~I)yDiI*S<7l-X69j^kcp4 zAO1Y+V(6V^h2QC=V}fS*MfNH9w1n%Ml>^H)?Qr?qBkeri>@$AeV=6eVaMcd6J^M8{ z;Se%?Y}?ukKDfBH&JobjaC+g(y$gRBR`CA7;Yt~JgdTI21B z!aJ5$ztCq&c!F)`_k#>SciuC;`aGv$`|BNAza{Ito$t>Ts~s^QW@qm*Wg7-x?UHfk zB0tY=z4z~l?2y>(UH|yEtE=^@{dP)=Y2Vhb`D|hJ)~-|DdYz0d^=?U_Pf?c}*X+5v z#^Xb`Ujyxg=r(q>F zb=v($A=`CLtIf~zw%3}9CYRxFe;zufLe~l7PdYc6l)p~S5)+1aT_!EwKq8d7%F zxtskO*qo@=e_PAatJ62zjevaTk`X$I^(+e_5E>3!p@pU z&wW^3KRBo1QDmQ(*WG5k@TuJR^3BhS$}f*vQEk8f{EeBtY&z}Swcvusl;Mq!dCw1B zJf~NNu$FV`b&TJ1_D1pBp2548`NeIvsrvEe;aQt*oHs-@tyZ+$x&uvX)%Q5LDEvjn zR|N)DZg6QwNVX2UdzE%7_5Jw6Pd`*&TRix}U!J!?Xh-u7AyRGjRtQ=CecD-D^I*ch4 zd7yNmZFQOiojUdERfZ>pM$|6!*B@^)-dI^<^yYW-`%D@*^RMTT*9`XCmaOr1uR3n# z4(A@Hd{+3_x(2KWw^>r{?>(=3Z#hwMX84(+RcF2lulVx7=J9o3tZCQty#M_{b?YBK z5}sr3jz{Mz3^`Z0;`{Y~UAnaV>%mh+e0DBxxutXYS9MJNR~&y5-u=>{?J+&(MrZ!R zbo^%Tpsb9o%_5odvzdah#Y*x_Gkp8c;8-A_cBd77{ zh-0n$^?eca=;heJ+PRD$mL$wx8Zr36SXl2*M63&qsycm-+ryCy#-Av1K5zFM{;h8B ziynDu(uT&Fv@3m_2}-Ioa1k74c(akUH4f%PBpJPvtsDd z&t1X>B4EVd0kjsbaaKI`Vlm;G&@@(+sdzgphor_hWM z*_K{EyU62O-zhuaJm0#nkpI(Wc^0`hyH|R}o9_J`9+V$rytw3c+qEsfJaZjWxl)kh zM}M~iuYzZknLcjQ)zWRRG${9F%YpsfhDGn%5NDiNpw^n@JY2ea_&fA4lAud%4h0H-Z|i zyu5H=H0&BjA?y>d3 zCjZ)Fug|ILIdVYN19zPs+VA!9GEQ=9mN_O%xqgFt9&m5D!nXdbri;Em-R%65>eFo| z-KuDN>U^H67sE%+U-x+A@zSRbRnFb3-mbiD=ePY@#`e2QH#bi9Gfdq-B(d2nzmCz7 z&t{u?9eDoP_nKF(Jhmmu*FaWC z@PKkX7W-8S&Nuxl_F3R!lPx2MpJ>~`>r4k@;V!$~3)G&LZ)mqryN|^^`kwl{I5cEP z)NTW*zdnGvi7Q5;AjW2Ph%T%#no~P1;^n2WW3^UH$YE^LSh!F>m=K4A&u8i%V3Wkb3 z>{|wYpW|S*kC{WZ?7GsY@2#KxR;-%VW7qcgU&oAc|NYq=&nJCag+%upf9rAZ>UAT} z_V}%qV@RP^Weuluy5uV4H1leqQNKR-_udhKX3ozi(%Oc7pgg9p>cV(JpRGs zT!ONk-}|VE-?k^&dKwnD40HB)QY`HDtUrCn-25~>*S&5&hLBG48`XaN-IqM={d+)X z6*JDseI}sGx$7@RAOG#kNw1b`_uUK%EU{wX%pTL6>+Y%Y+%|gd@X$xjC+C;$`EudP z{l5LCWPSSGk^|%RPoI(ZQ^8*M9V**4JNwDb_G<8i7XHQSRBz!BaVOW7d|N_`c4^va z=h}+i(}K^qgf>4iqPxMnLFoeDZJpH0qwMVXU4b+Dy}W+m)=!4MKGnbYf9o9TK55;o zN^Y6@yz}fFv)$RNXid+=qOYTDeb4MX>341Q$1)xBWWKaxUi7yiWBVQp@Lpz9e|w3j zHB$=j9$5R>yPXsNsNQbnm2LYSF73GN-EnD)C5Hy={&w5iy(eb|+}wVtz_|+92hX4U zWlZTl#~f<_k~!{<5ycB9fqeH}2$=E~gN^V_%R?V0obyNh9M7njXbVBno9 z6BgQRU-Y7Ri)Rl4LZ_a+nde$qi?$*27Zj^@J#72TH8&g_hn#2>*rG+=glz2%*KeF# zRj&Tvr*TzptT>d-)@$5=9V@nc$X2Fvz_GTEw)>60GJDhJ-FaS`j9Iok>aaAE?d_9u z)*U|LHh)2h3tcy_$yK)x+-mpuI5J0B+rwpTC)T__Iy8LUm3#9edU+oU@d$r9XKJ&W zy`qM1GG%nUQ7HcW)Qe{)2Hao&%N{3#&zXKdU+7oDBU9G!t${b3b6q-;XGpl;-kR=v zn>8$I>-!}xlp5b__5IlauMT{!VhFh3rcS}b#cj(j*jRjE-#m?SjqBYi=bp;$eOtb) z88gjh-lBT}Z3?uQHuRC#^-V#!7X9(5qG9CVb+x)3vaxMHwoL!1YS9Z{mHs;T_bzQ? z1DbBU(By}zZ!0(y|Fhl6kme;{mYR`!?dJC}KF`(+dcUssWBb`PTgC_8967$s+$Y}U zcFcKIe}AZJbMGHUm1x$p{jyOm;UmK<)UP`QyEMH>{IXMl_q*MykoOO# zcbCHsnD#9z)X4dHTl+ar9)-pCDmrV$#=hIP);8qrFl+YHMKR+X>euP&931@n){r|D z=Y9@!*q*;_=)DntWb4+>cG3{T^~RlcmmAXj$%cJ5E;)CKJw3EkbkSZ*gHCt+XtU?b z&(j0#re7_Penw&@W9<1dt439Y`LyrlSJMA;#_IFVoO#zjkEdryNcB70hgRM)xO2Bs zH(%u*wqp9An7;i_PfaLlthTAv$ci&6L>;bfyXSMp0>RyFPaeu(doa86p@}z#eLhy~ z<+?GUZ*v;P#0-kqANE?abX(}yV|{H}JX@89TnfnV)kEnaytq`~Fpm#5Ex$MVoR zv3ZTgF*%oJ_dE4zYIv3CKQp%p*qp0K*s-gbqNmSWxu~yc@#S6nuigxNx^&RIC$lql z{OoQBSsdZD>*YMZvTw6w?wJR6@PEoz>$jV=zEpTq<^1c9KNwy?_apKA;7+M zzOkJ?U2fIlha>X~9LUqlw_I%Dbw!p&_FWm~GN^FCi~Me$6C8)tF5)-fw|=(wLj$|C zY?Sa_rvaN{cV9c+XIr)Sc6nPp88@_2;HsJd1Dp@c>)y=0WaGPS+vUHqs6fpHIqKB9 zuzJr06U+aQbj|V#4LP z#f9tis9L|#ymB+n43BtyI$OteR}!kXD3|rz$;;6Wl@297th1tP&mTu!t?;;0yG2zF z&8b}OVeN4(&pjH8hjnCbHZAg9i}=u zRdJ|9j$p~5bEQYb9vG;x0QF83U`+9(AcZ9k3Tp`Q zRw{2)<+ZxRVj&?+K)fOaSkk_H`4UK|X?gMD1+Y+K0V*aYM$|xHiH?pY&2v?GrYcX> z1w5KYoM-DAGQPBn4PXJOt|DLsmb0pepyJ0%oj4KpPPe5zY#5 zKyjti-Ua&ZU99i0|5SOK7GMbR&!U2Mp^pj$7GNbn@eUXYig@ZwK%t-_PJ#rGDp0&p zgW@#=V4wiPN>l(QSdl;h9jHL@Obv>sbOukJu$d4rARUE;gW@p=1S%Ld^icu8z@h@h z0|^xOc|U*%AhoCf(LG{8YOE+82q=i+4irLAEZn{gjMb=6)(NB#3$zQ43gFmMfop{p z6`%!dP!FsD8>GRdLMkai1q~ulfzaTncm*^r7O+GB#g~egbcG-*g?g=kMT5gZg$nHA zIs7+61u9tKs6dt=gDe(Ise=m8SU?4Z1FMrn1wermhy^WM9!P`LJ;cI2QUk$IffOxd zy&%B&N7jl@pYU1&p#crFgHInnAQ%WRuwfSv00RL=%1}WT4G9rQCV>jt^J_$dT*!q) z7Zm~&dZ++A(4s+w5?YN4ki%M`Xa$9UfJ+I~GAeL^pam3ktpGxW3c6xItpY{TYXt)Z zTPq+UDGVJH4^Y!JLl+g);U7W8qsSPJ3N{YYqsVAP11=ZXFjPcEK1mrW*i{4?gaQU- zSCQmVfyM+G;_`t@1-pVMYXw*#Drlp#R&Y>g*9r_ziw-J4L4iSP1rO3y1TG%b-4ZGQ z83GTKP*4G$sXztxL)Qrk3w>13>j>Ji%Lfn)6}(B!eFX+GnJ65Pfd6!pkt#~ z4?@G;1&0G`B~*X~JdLOxLB6OSL1;K~P8`--@~UU6Kc2o(?p zmJQM`uMid#56V?Uc?wAm73`)0o7AC#cTZc22fXd1ydEm3#tapB`Jg4~wF2CeKm`dN zp`e2B>;Z&cI`{eZ;N2!I`lw*0=BQu_Y(7&Omk3iNR)`9Lj8vfFJ-{I@ zc-Hb*1`7=;@DhRrqC?GqfDHi!T_H%VpaPUip}?@TR?vG32@=ZPCId$@YXx>hmJ7OO z=%Yfx2D^MHw-po|91p2L1)ZU0tzgp@s9-$1v0x7&C}htd3>SCray;mxf`y@tgbEPA zvZ2x$E?kj+nQ2{`q_Z7+&1T0i*1>SMeLO?NV)!USyLLLD^;|*c~9#EN_t`)Ko zqs>sE+-d@4jtX#-P(gzbd;rO>AmqjZczP9~mlAzcP=CB|u)7NB$&|n%6{w)G9?-^Q zLRj#}Qz{b=A>4%CU2tSjDJ~eeR`8NaRL~%Z2LcMZLXcWU1s?!DlTz9eD#YC;g9KRP zN}+(_T~ccW#wN=JTQevgaNC0R%C8{i4eRIgy)L|GW-I9Pak;E zB!%o#@QPnRQnps`5OBAtkOUbTRPY-Mu)?c|vUwFAj>`ip_#DFVK-*+d0V@O+2taEd z%7oDPj97r%3nmoznv5sw1p$T%6%S(x7*uzg3M%4O&w`&dzpY3P74&w3-BakJf)0l4 zQxFm#PE&^p8iDL^0!el?$@V7Q;G|lC3d-`D-)GWI3Pc6P1&0G`Q;Z6TD4-gP= za{+bIsGx(wWrCoB+)^MUpjd$ljEZ2O6~_bKbfS=7K`4zizpqeTL7rU-4ZHIWaUnm0 zD5yYCNZXriSCcFmpr8+?w85JTh6mc{ph7GYxZRC-pyh9&0=gpwVZrV%aDjkAt|HJ% zPawc4h(H@e14RYasY3-MFftNikcyxJEBsFZfdpAAfRL{s@>+q51u3v%Kp|KFp0o@V zs3!18)mi~g^mc;XQ&2c)Q9i8a05 zRCuvipom{U@EL?&M1bOWNGU2n2}Y({0c(D;C-hA2va18 zaT|+jp-v$x5FQ*4v{kPaBA$c_@^A`@JGY@SLk02Rs9^45u|S?*K=2uaJer~q?=(eW zsCaw<;BYJM9ZrG@tk|O|Q1slC2DgX`aS4GH15kklJV>j%R)A6;6}%q>6+{vVwS)-? z74*IWjr7(E3#ee14|0Q{+*x1{Qs6=YtsW|vfff}^%nzuSu5Zk1F%4Ff$iTw1%$^#Qz&?jPAZCuNMv~-3k8RUX05mnx0@Ul z_wS1f2qCm<1;k4V6$B7inY3#~A{~k93LqT=0cxOkk8#A6V0 z4)W#(VC3RcxV;b|OeT6y0Rn~!uClOJ5CEYKSt<|}e8WP83NX+|1r1NmOcg+w5E{5; zLABVV5Eah}7(_)@h?K1rv@3=P%Fx3xb_I##GH3}N#6^UlLeVOSK#HRR^kgSX#)bR< zqPtcQRFKFjRG3WZ5ETdsC`b_-tPl`iz9@9F(hL>EU4N~(3p#uXAttO6_Z8-- z5U>!a;2Rdnpd#WDEDTp;DJIBT0iAt_!hXY8=kLiA239FU1*{XgC+QG?phLQXfJj*@ zfMEw^cs6Dt2V?{l2nJEeLP3@bfeN96J5A-jfP%HaM22n{L(C}7>tt`%@PhMxS4 z3?E5xy&$bvD?orJ>CzP>j$SO3kKN#A1(-!eLS@1Q1MW4E1OomGRKQLa5$fJ;lDkg6 zO3*f$wSvV`HFV#?3>6d)mQlf0is)z+C~&P%qNfTK6blR$1Qz5YdJs(q74!*&o~SD) zV@TQKugvNLz4!abo zy_kY{Rxnibw}pAo2A@ayeT9q))TROzXwH!VJKn&ND+r4DXY(kDwK*#IdAbS{`l#U7 z5q{}lI~Qbg(-JDMQ(AE6g45XYPu&1X;lc61*9tV^*r4|kV#NRryQwf+D|Ar7Afc=k ze;*Z}?}Ub4BCtSI;Kn5k1!`=NqBY})0+m>ZhE_<=T74F3q?js_Tt4VINO*7z1qN9s zs1w$yLj^pXQdc|&0SYc3l&4n^vRIJ2PJ9F*8hjMtc%ZEwD!`Pk8T1MwP(g!3O@CL& z0f@X-up3S7&87+!>~50+g47BsMEqn>0g%u`g=(>YSmvleSkNUyEEGUUpSmGSh3=J7;OcVRvydN5Rhob^OG5fH3 ztzh>SuvXBh(9m5h<Tq_hrAjPg8?7l(?hL0kePxDfxIVyB+H zmEhe3PeNdZe!`Ag56uB z2o?0E0_rbhP*~9ub-rDJu!w^jjHdt!jtXJQ*9svZsQB;>FJI>$#IKq~Kml78G31~G zq-3AsR%mDxz~UZWK8UM6D(Gf6sfkq*s33Z*l)FuNzd~Tc5-QNu3>C0SfLN>*Y{LTY zICW70wgef71&oLH7Em}IQi2L{yGeY_)(Txz@W&A9!Y?8kR4BKaNGYfQCrfLE78M8% zc9sqlK9>S4F2FB$0{iIZB{~9DfBN+Bnk1m-Ah2f<2`B1j1t`GcJzYR3D&E4<6aS8^ z6x3Ob3M!*F7WgP4b)a4=s6yGVfZH8JgpfcUUjkcuoC;tImn3h@vEh7ZZkrnue2RRW}Zu|Pbq#}8NAQqs&D+n*_rqco{=xRZ2B~-w2A&P3P;89`8 z022R;8%`k2Q9)M;_UQ`dO!lxo!>%?yRU~}E2Ojc#LDUEh{8YvDH~bI;THM=&5)~PR zpa>1S_l|CPvyE?frUBn~?=FRgz~$ozq5;oG1S;53Dco_gMMASy(2EFr1|g#WI;oR% zVnZr{3c_ho0m}yB0dyP|^vVGOLa0yy_Y@$fTUkh`wkym&p$8VEz$FA)>5X)_+oboI zASSmJ3Mv>Zq{k3Ts340*xUx_HGz1?9Tf=a7LQfCB>(EMLeUh7CB010zOYM}d+kaqSGb zCNQt{O_ss6>F~{!I>>S&3&vf@pcTab|$Md}J`}@_es;g%i zCoi_&`+cis>(k%od5`+_wL2H7HRsmpXg({YC}Lq4(E8S?z$6MVCP-V?0ute-q7_<` zvTh}<@L=jhY6TUeWui}oMtD!tT9H%O!>Clu&=6R-OCuD>_O+rSaWE>R5qtq!j}lrc za4g0k-$EjxLl9PJ1)^__?Q9;Mp4`SFgw>Pt_>|{^niNIb^B-wT9I78&>D;*Y5=!3& z6nFwt1XLi`qk_8>XrN>$1CIj5)~`sZs9GW4BKNw{8ynwuEw7DqfjR-@MG<`J?x?FY{97eBk5`ZVM>N*+|oRNlR0hkFQLp7l*0H-l9QJ z5D)XP9~E4KXuR22k&4{J+Q+X5SM$lJNHhWnzDZ`uM5V%5povsuFdg3wDllWSG7Yf^ znLt~fgCN_X;)96=JPNeYueft$dh!%LZ1A9c3ph4wGdh`QSAYdUio2TAGuLT6E*`~_ z)J<>d3e&YSrSGvRjzG``r9l6qcZ~%qTCMQdlnG0K~-LR-cFjrK z38M&=3X&0_V?cU-1;(XTFk7_(r5+XXF&Qz;Q4yOI;}34w-?X2}m{<7$#I0kZ!=~f703z=rfET9S&Ax)g)+s0prjxg#^Vod%C{&~T;->CiE0ku$PxfaQT(1J>A0B^t5fvJTD76Av>4gtLGDdAfg>F_&)*yi5&~po@@HoWbSKR!2KluYc{`04y z4{#3d{&#=&U;W8X>{2Vf@mGHA`~TF>o+28+0sa4@(dg8zTR%SxV)&)CwU`r7V9v+?>%Z~dWMfz>@-68gT?K7^({{K?X>lp)HdeqP z7JvgfBVI}cy0mg(8W8(+5EF(HXus)OFoE%Kz0+Kp7Aj~%*r8C7u4Yp4c>Cjcl)xiv z1v=^j&zt{iEUQMAgHYV(KGkvl24pZ4{6--clK7U0us{~+>vBe(`jYzMbnF3FHaJU_ z8PUr0Sb<{x-lj%rd1|dV^CS8wzyG&H#a~e26QJTZl^cD}?|T7)VgJWy^uAlS{@u~& zuim=(*G8l7{I+|H-fwRcaZ*v{6czt;G@7G=bm*Nh(kX~ag2AU_rBxZxAuLc_NClBV zSf&*iK1T)WDiwM;qLEK32r5+Xs9?cjhlvYqlVy<30y}ae9Hr=m_h$wZU*&cl4kTfC3#P6@ygB zy9f)i`=5-y@1K3;|N5h&AHF%k@Abd(v;PPm`%ghQ{=L!YzyGzL8;$+~*B`g36~{)S zpTBhrDE!#1n?H`f>h6NQQ!H$d9jS~DlL;`>HF{DC2@z?4lO8d`)X z&73-);)-~=YZR7fZ2ar3Pn^#}NiuBE(Vja%s zd49*}<@>ZCR0_ zjlWx{c>E_ue`@mO(T}}tbmi)3^s_hro1gia+0A?3J9=B63eE}R!8u9AUs=m@bgn`0 z&K#VRPH-*4%49)H5tJKuQ)1zPlnmhzhhwNs9-NvARA0gxWd7Do(F#weSSF-?CmnTq zeg)gKIz?&=A}G?96sHp;I0%aHHv3w^$tEA=FRW#P2sqeT#5W4h6)b?wsT*4aKd7is zBozH+l*MtRK6j9-QPMQvV&y=rupJ$u!2<&#o!#3$?ay7~j z76faMJM>X;4=bR6H^B=yN2zu2C*W|tv3`@fbn-bU#q%bDaqf5X)%e6_r1$>p+uu$y zM8!WTRQ%VZ0uBY8PEfJ-4}XwNKlvg?;3OUK;+OnP(DoF)~VCgp-@sDz|~=OAoHh+L}`f}uo}3U;qj!4d=Hf-!$`4dOj-)TCB0 zYmGpzr2<7>vfw9_WFXtoiYKPx=1Claf9x*TAjh{5?YwauF#++nkC8dX1;*qd9Zsa_ zSFo;9p+j}rjq6;doW3EYphVo#4i>tCihIYV$FT@`jsDqLg-fIYPy`jXZ?Avhum91}=s(a3RfiyJZyWuOe|+@9dq;oi zFOB}(&6|I9H2TH0n}31~aVQice3jmu+_P<{D1K&31-kGgom3->^TyeGiVm1uSs?<{T2v#y|~+$>N~&qi{I)}@elvrXK&xW`F*1w)UJi7xb^2pKRWtjkB^T2$R8Q~lbbi+KKg;} zn-`%M7*Blx7VtKIY!Y*><(zfDTe;#|^r+C8DW>XDAy1Q0k%>7AQf~9kFq*=_SX#l1 zLZ#w0lmm-sb3!U05S=;{!g^3L!lQ`9mLucDA=01%gWy{*=6(gzi+uRRYn#C06TE-5 z!~N;$@oXvE9YYBn>Q2*otQGEPl4zcN2BlkPk$PJ#^RseooxM?(cAvfZ;k)h=zA`9sraeU z5Bif`)OCmpkG9pB&#!p%W&W1G&|slw=+US6#KT8hJ0OBVQ~--Y1su&UO;7L+ zF9L3C(36wiXl5BCdh=6kN->0A;eujP@epfDhCjWIBam;uUHR|%++CWEupmhOZ&i=p z_Qi&Z-$&j5cI(!EI2!%X_RX7rhdutCe|g$mrf;+3w` zH-!aOq?jcLKyETVG?hf8vFcHwzYl_L4-ftMxBu~<`rjYu3}p54+ z|Fs|aFiwL#Cyq_$sp$9>eACS~7HN|&uvEbLM!Ge-q#5#&=iTdwlb zuP9is?L3za6^kwvF}OnoccOKa?narAmk9;&_<*Q5rKV%1;+n5%5{7~WpMdlL?&)s} z2=q=clo|`vKK0Gb&DXRwp$VlEwi{e4Ob$)gNyR;V{RkPInIcWcf=dq+Bk)Kp&P#PV zhLuMRrXged6^t>qoQ}n*DIE$2H0p|3o|@uBgnlNf!`+NmRw4_69M>TVVj{3$4;b9a z#h_n-PFRf~CJeJoB^7ck3KeLY(+V0B1ujIi7@?0@gQ<{C(2C4c;ghkPg=y7_-OUfZ zvu%N^$zoFR+y_v&OwpiZ(6i72^382Ozap`?JiEE|+41&>x8Lj@BSAQT-g`q9g!#=^pGJjD$;JjhmB|T4NyUrLYMWcSQK^`CzoMfR)C&i)Py=Vv z0lM{~p@JDhd+Fq*gc`qQb|e7^dBBPS{d0Ly?*R ztw1h+U^Y++sc65>%cV#n;q$S5snA69F#1#k4sI6}yHjCd$3jp@EZhU9-1vVr{wxkp zu~xl>H;7vmGyT;VT9B=+ZQkjqUT zQh}Zj3&!}#AT+q2<%-!1si{DwkP)7R4G3=Yx^pZ~yHs@5B1IxnvQR^4MGD3M6}!(r zh3+jC`ZeYh(-UhuJNMo{9)E7*|886sHhf%Jg`Sn z5nja;P~q31E$LHHad00H!3?l45UCY?DsmG`DXG99!+}hz7KI8hZT)Teb)}8o>umyGMlbAso!KrBa zi}{~y$(W1}9gF`rw6N?|f__&H|3N7;17zZtXoeDhgRZVh1&5o3pn_P0o0-@2)CG}D z*)SEvVjn8FB5lNC$b#ex6)GecjCxe?pEzUh+^-N7jHnWhxdy2Lb+RBx2dO}P8>AIj zghbtbR7AITew}KLW#d5j4zT!it-mzGPDKevUc7w!b7PF%+q`~`%adXnCg*0H{1$YB z`xMRmtS*7|4kcG+iOGTf zr9q1_3#s4?a5SALkEn`89;G+;u>{3T0~B!`LNgM7xe|3iBB+SnP1Fri5tH=yImH8) zrf%<25vz|#;B96YKmB!m7K71ueq}uVOlfJTIQ{zVoxPpUk1@*ys!0SC`3aw!QJ#+A z=MbP^P1CM2swU4eQpn*>S>;Y1YYT$PmI{sQMPft7qnMDQ6i@eIjXi5hCiVQ-d zdqWRBi9;mU`&9JahN!U9$(9wUnB@$_A%b8q6o?@e>_f$1GGIY+3R9tlskX5eQ^C(D zg6+s?Pu83J%1@1-ekm>YaRq!9r~UhQ@?WXz{>V~LbUj*%6IjguVO8&?fqdtw@jK7^-sa;I`ZVwvo#D;RogI8$ zfAGHX_+RKYuiBPJbT#i&m2nP&7@_zaDrvNG8yi!vK5#a+&f~HpH?#&h23m1GrjGP8 z$!&)Ujm939QpH}DqD*+*T;0v!!POlq7CbGDJp~7`U?I{0D%i?kDimvPa|so7W!hPq z4p8B#lM0H2YLt3qigN2$py*Sw3WTwc=|}?-(-H{S5;~fB(L1OB7OdR;1E|FXuS|oA zV+|FMe+mM^av=OUqMLlD*;P~F#j1vvDUiWxda7V8} zoFAk@O%)C9W%=f2S%Z*@_*Ir-{64TaFD(4Qzi>uWV4^o=-rwt2TY-uhdYX#aYwzJG zQ;{#`8FUnKyyNXS91G4>g4ZCiz9JmR_Nd6dphMZ#gd`R5m!>2V*`Fz} z$l^jO(&L0kIBY0xI}dV-k%H72qSLbE2#N#oa{Raw_WBA{MHuD|Zyl z1~OimdJF|(jtVuUUQjXk6F3Y~;kg)#itsk8SU@AtrXTNZ#(+2qVM%B#qJq9f?=Du% z5K#2*ZGJnj@W+O}KZk$>9tPs=HAG+BcH`2RzfHm0_z=%T8!CVW$8zQkL4nJ>=n(<; zZ;%5OdS$;zLxp>J4dT27qf3QawET#i&PZxf~PE094!TETx_ z3BV%r3#mve0wdxe3*t>pYDG>!(NNwhQK=9b(hT|)^HemB1;$%2=BN-35v5Exm0yue zbn=mHI!|cwGkz?VCdT*0pL|u5C;a6NlZI_DZhQxkm zc$>pixHG(o8tM(bI#WV%+)(tX7z>p_B3Q{!5@uraHg-TSyk~s)2>+eKP>70&shD1f z3wjT(Q7opKe~1cS-4qn|DbO3sXT-&?K)(E)bP&NHDiRA)!9EPcLYdsiA|j$9A`}Oy zplDPoEEscC5QhjoD)gF;42VUdp@L|jL%GdcED60#kBrkX6qZr}C=gmE8Vll?V$VCk z7@{IR3+xk|(PzVPRV&~psCH3=(U0!EDF^C>caIOB)A~kS#Or%{4W}+86?|U76l^?r zz?&AsRQMbO%|>I83c8vMrXk}-DKK1Trbrn~g&a*5`%tX062Ys}#)5RIa3{tczao)9 zx||Bo5LjReNk!^Kp&}g%bV!$TkP3U7Fd~Mb#9b=1AcgthTUMw_(X2uI;q4Zk;Ab~T z#norVi-1r)#=Wk8;|x&bOCq&bYa|e>?_s%?JRG~C=M|U=oo3}+98fGsmx?;Mw4y%0 zVt*<$)FRPPk!ZA1u|~6ja4;%>M*q23L4{|Nw;4MX_0~!Y(T-2S-uI=qTcypE?VeVI9^;2LBd-wwgIkdbR% zc^MU0hIE){o^?Yia`7Q^#5b@IijG#ajs*rmH3q4`($rcJJUFRD#D;g>rO?i%uiexG zQ}STJC|ZI4QK&Q(${>neO>0HaAb%5*QGifpjtY)u@Igp(nHP1Yg0Z@EsK9TzDkrT4 zDIc3M$NW8yd{Tj^n7ofrfQpUT?DpO+oJ)^6ejNY6mpx+&BTKi#Vd>5+Dkc+AfyXx= zoAw;p4i#9Mu5jz7*}szQ$hT6d03N8UQXxAMVu1!NQ)NR?=ukn?uvBE+VWMk6(3fI? z1R4IMRv<-DTERAEkOUUY;ioK3FVV4xU`tY{01^wS@CYbGj*U#X7BV9h3RBUFMYH2w zf0?@<-OtT*I(DN{5gf^Y+@8%gX(1XYX8B&?--;rPh^Ft&yag=KN-8FLUO}(DO9kAE zI6{x4rxln)BEi`hk_x0KNh?_0qXK}SviKC`F`{eiD=J6>4@35+fHdOd@tPzV5NBdi23#ss#X+y=H zcT--H!!WzN3n~%{O2rIQjt_kmF$*l=I@TZ+ds~De_BNS(x2T|E*v)hXaZ-_Khy_~Y za|#O-f(qmiC>f?fR3J)~aB8h^U*w$u7S5Om3r4dtRbxm*p`-k-ivMArL6#(NSWX4{ zSHFUT;h-tdr9j4UY6U6^6w1ftyaa<(#J{`byjM^^ApCoA2k*5amp5*GY&`zz-WQ%a zL6`6R6~d8J@J;Yt9Qq1fg!8Y@Ue|lN_>g*X{$ia}xqJ8c`-i7@B39_Nhl@(K7TwVE zIH-m)@-yvLv{bN-G-O&$2x@SW&U#?sq;onZDiVodDmaSaKvWP1jFD7$DT03?XW_q; zDTCdMB~+kKI2O*?uRxv|B=~)!?Nfo;PH^Wvdlr-FwY}{aaopGQ zzK#xpVlwqzEUasfal?9GX3oXQnIiP4m|DO5>Ul$t=EJ>{1(Xa0ErPpxp)D^tg)iB+kwKsf@Tn3;x* z`&4)dBCi62M1=+ytw3pr3a%Lf3*=g@(D065;TpxwNAFK#?ENa&yJP(TC*O#gjlG-x zFfoW-zy9>tN`cSYRIv6ad-K@@zk?J#HAFM8bv~$l5fvJTC=`M@S1q9eV!=M9LPi5v zu!gs8m@?3gG(<4F9~BryI5eCan|0TFhzfK|cN5uQqI){FkP5#9V3{UK1TH75E%Z;$b-ofa6ttC}*ucYknX6U@%SfHaV&Ef-o2j z>qeD|-i|l=iHeX4;lNo41)rhUgvC^#xBLl>ORYd5r~nz2ibgEZ1Ar8j2r4v*qyGJh zREeGisU!41)J1AV$x$LAur56c8GAEykNs(cqRZRl zt86p+Abu`u#kF_imyy4np|A~CGNkHTK1VwXD>9V(`08!8M1&OtP8 zfC`WRkq9cd@Gut4q+fyj5EY~$!!Q+kO+_{$%Fa_!eGB^)G$A1wHX#^Sso-7(gWU?} zI(M;9HRo5Lt~eK!3b26&`4#z1p%e;1!P7CmK(et=EB2*gLthK-QE>(P6_`D!7?X;1 zQ?bXFFH!*#PFpEZJ3z&3cJZC#r%&uORP6MrfaihV#ng)MD-1Fk_t9{fmG}S75w#R>_qfJBljC@w3TeKq>&JZ2pHX^f|EB|fqbQ+!2W~)|kB~sQP z%JeM=hB(l#h+n6kR*avyiktt~#bU?L>>}bPOAGRNhC)&?nVo*u_^^EnR5R#IBoEeS zN8T}h*Qpu&kV*xi@U0uV6&}R6M@7%CC{D#nR0xX>6ICnlQUIi*6?zlZw?NTUAV!`n zFgR6gp6> zpcVX}DHU(v@A^DOzNZym8IOPY+q$^>g?*^V zcK{e7OF&|?B9fJ;!05Vl5$**Y%qO9udy*bnfw`7j5Wj!@e^GYk3Ij1m1sZ8UB54;P zsJb|C>!u;2YeCRIsX!KC5f!`m_-+nTvGYZ&M>8Z9x?7R1=JD}DD5w^{b7=hZ$%lKJ zb}Nbn5f#Wr5JE>@}K<&O-VV{CA-H96b z61rJoEYhPu%9aSRnKfgvM3-1XNWY?L1u7R%p%rRJD)!e3y+|)AT7h~>#qKWtIOVAU zDzH^?g;Ehgo+j-F+=?p=6<_NrL|gjSq47J9U*6lpWeiNx(~5a2j@$~Zczw>V!0?6& zDnt$X##j-IL9OsV!6zclH|OYsRCG?#F+?kn?i!?EkwnDINP1MDrV9nOvrvbpF`U>Oqi){5GRS^*v$ceJAO1SE2C5GpVqVNehiA_B#@ zxrtnd3Q7g)c6agJb9U`g0i_s!YI@^~l?t>@ukg9CmJG+Kc=n2~IeKrq5`1aWmT>q)xRVxEe| zwFmgJOLHCmF2xnPER7vStD3%L!|<>g^Jx5 z^bF;oB5uh5iqCQv3s}6Ddr);1Qlx^b5AIT7F67$RsrkJ<`pz9H`1}f;j-kO81eq6b zJa$kj#7FTf{F>xJP~^2uR|geQKtjC$4~~&pg$i^A7_p^U*k~+Bp9-9rVoW%i!&KD& zafJ#Rkn-Izdlq3iGTB!v@Tzbw7z+ku{FRUcQE~ss^aVV@!uI@xPb2XBJnwk_HvUAN zu)y33g$n$OX0zuH(fbe-Gc_wdoOKnZq7{Qw+^Q$(XB)p_saABT&}&Cj(BOuJ>q;iN zq+gMXkcJ9+7mZLL8zOmQaEI3oM9d ziZuud-u4z1Sf0AIr6QhngN8Y+2!|6-V7{JIyctw{j!!`1ZC>~m!UE%=7`F_Cj?n#5 zhnURxLPfZnxmOYC zzEp4yU9MnKsbI-4G;T!^3pSvh&(ABJ3k$amM1u77wN745-g9`0#qBEQe#Nks6Q=vCvZ_`)=6LYt2 z7E<9EnypP%Bo%I)ry}aZ!9a;<_|^@Z@V^Y90HMsvRK(mDm@6uc(4&^EC{p7gRvOx{W7*1I^nC+KX|7~S_&h>6Z!EV6MBD)J2x3;*Rx zX$4BTx0yYVrc)7BIv%5B%-_(PqvE~KPk+;&Myv$ z4`mkl6_}KVrWwN9M6n)_HCoY9QLrdfl;>g@iz*YgwH+*$S`fY)=|oVGNa$TQCL|or za5dE`9DF!7PsOPdod6#2cY-=pc#dOEE?xR^e#FIq^M@f*<}~^9ejm?aQvO5`8H~(C9;7!^m=C#|l?d}drKq=V%*HY*bP$5q z(t)X{;P$M37|D1bby!4&S0Gq=l%OrmP>R%woTaQj42P*eqcS~j6V-4y8S@8r7>Q$K z2B6@Z5pl4=j?3=8s*-yRdKJ?sTB|bA1n|=r{@C zpCa4i7o9b@>}~Rn_Z`rvXWdk9GjH8sE?O;E5Ja{jOQ~RAuR-io5DnuHajO(dwE_d- zSSV(MA87>ASei0d!T=S}3HcX&_YGqT6!tb}Wg7hQL?9qO1wmtv3Z0yyI&c0LDo|%I zf(q?cNGzIT(@F)pceDcKAu1kU>{GFWo)bnmN(UC-raic3C}2Q@!ruA}l?=0QHCUuJ z-r2(``WmU&d$h-|o6J+eKZ6@o+&^xuNGgbgeoTd42GOuq6ca)gL`806RWLvW8k3El zR(Sd_Bq)dqKQ68F7qL?->{oEq5EW)3Z~muPEYJ%7?;;X@6RS{>JzFYV*QKICBDDhD ze4HL@4@A>8s@105!~`-7w}L6$`uLZ=BPji?rzp3?^vM5-b4`$ z^+IIFB1?w;t`tzrTupn8HP(<2LfgaQf zcI;8%u?-cd*mb3!Hv1wL`MuLl&f=aP!cH}2za#vt$|-cXKFO9cmF=!NO@{5rIP zk90?{1&Lj(E)`{UI$%K(38Wn=;>n7IjH(rUvDAt3ebWF!i90CHD|)U9D!c;GzIO+T z{tZ10@+rEoFcq3;m}^1iKWW) z!~;{oYHe$PkLW0$qN^3Hw;7hCL1JYp^kRsp5O6Od$J!)=`3QC}vZUiNu1iZ8qypV3 z797>5!ZUTLaGiPRQsK3TEQmWHeod=V7Pa-=Ac1U`3iK&zfqdGJo&_mX7zkMp?08ct zs#cf^{FxBdh6UMv@#)&fR8TDn7J%YiXU|>O76dyFZoWYY!HD%dAL~;=$nZxodB>X* zXMkw*smLa-M5?#hQo$a=VS>APUbIsP_YM(DX;((@5Tev5FS3bb=5}YGXH-j6ghqDfbdy2c*Mbr zSe$mKpedQB!ke3&bC7_7@7rO33N#e+(RiDvwlN8fwG**ia6~-bCP7gu_XPlz~ zJfONzF=HqCW}x9xSP&*)L9ueu3VE8cB7sAf3ifs=RH)deLQn{cJ{5a80aJOK_uikM zhIJ!5@VjHQATI!lqc^k+ z%jl&P`NO6#qy>Sixr7S71s#uRx57vu&NYZrc5*0G#LCp?WIZahG)4b<{e}xvPhc>D z3X+g}7I~5$Tol{EVa;t`lyYyArX%e~Un>Tv&@a&nR0JHucd__x9Fhu`S}IgyERbDB zg?tPAnaZR>PiM!sjyZ!)(gTV^NAdSe{mEhlB3S?x*M-G7La_x$VmABQc>Js9u7L;! zOram;f{Kp4@U5E*e67oJI2)}H6Ff^VKqxaug>YcRSrokfm|KK!rvmLV9??^N#gGLF zDgXvTkqKo$MH#(}3U-p^$n*^W;eeW4na+@(qk>`qkHRrBi9@8^!m?1HhXSk!QreP4 z0;!t{73W;8CS+eKasWVh!xaj-lC$S6)JVK0yVK;ft>J2C~QK+f_yJi!Q}^fre@gBY`o2ihIhNcg&WkEDG7N}>Z(-Zj@rY_?oT~AgN6#Of<(F;kT0yDv&o_7G#b2vIH5VLOl>!D~cVlx9P@~3f0)lM0P0^9vq8OQL*0*J&Z^wE=p-v zq@uG3SxyC4e*gk^yXJ}~~?Lqvk* zcgN$8mcNwFscYaFNG&B5FAxwu>*g4dKu9W3t?!z)RA~61R?viS5uzRuEug}!^e9LL zLTE%Lwj2?2N3-3%k_A~#MLjSj4tTXysW21u-X?|)TacgvYzPS5xanCC8WW5!Vu8F@ zADOgr;d2ml!IG5mef%-o-{2n}BNdOav6NKYM)o9siN=SH!@00lYy}plLI;?lnSgt@U*?VV4+fhCW65(eJWVjw;-;It5_W>DipkA z;n4Lo4aGiGc%wTH$%d$aVqo^76@?1nfR=r!@ERncC|ZG`ph7E;c?*I@Q9&B)SD*%g zI7C3HM@8N8Mq4Wv-0?;gs6Z%CaPgtttfXQGPc+lAQBV{rhy~=}1$0NC596gJ`T$FL;j#~M_?f}k)x@&HQ^1(Xm@TyLpx9af;oym)B*jLV7zg`-j% zit*Twt=QPOhdZJSM{fic$X^8$7*PBQiv;xagbb}#jbfQlMWIeX9oGhf` z-mi?uzlrHWDuRmX*)A3MzWBY=ihPTEUn3QV@rA>zL7GMc=kDK$YBI9B^JtS#Q)GAz z*KCg9uf=#r6JT7&>^L)>qk`k^T7uTbl}E;yOK*Gip(^zJ3+EBKW&wDs{91HG-m##Ud&|2Zl&1f{KAN(*}&t z3cawRFdoPgjlf}uimqd^oQkskAQol6f*HI{M=e^d=&nKd?!4U{b_C7@sv0U#3U`xQ z(V7vo6brKOh8{Wv70B%x3Q>XLL~9VFSeya^a6u^e;cnuOyG)OtHx)pF0WK$6-o=|% zNWp?)<<{_b(h;zJ{n+|LBY~Lh3@5HMYtx%ljpNtjk!dXz>T4{JZNy@p3Ux(9chgiv z+);|*dz%{TJ#WiIPFDB3r4@}>phxR&4pRZ!!9!C?M2S|S0@DMK@F={$iK>tZ=Nc-& zMo0zqB11JJ4HC$93`q4WFsxD$P$U&znWD!!wz8(jF72EF6ek}XLCyB<)2KRqg<4@K zfCZhFLznpZBU55zOvUcb=f~p@+yM;&1AQWF&;o3%uU`aw+#NZFwTPPv72ZKXrLaJ{ zA{G1Iub9&c%q`L28;}KIM!}|oTG2HjXl$0IT#aTxOR*qC0-*q*%pxiE=5#8B(0zc*`dx)zfLH2b|6SRAG=I5LJ&;F zWb*B&P#7P=pM(f1ka1X>tv%j)`0(N8r-=o6rBc|J*f@(SP_eE%o73s*$oBk-LWQtE z_kF1d-=ZTG)q-FK=thGCvbG>-QAXwi1(IRsLN_-BMN*;7EZy4-zk+@DrviNfjt&*R zp{FSjfeOU5B2KIo*sMTNf?=^h37HNRs6wz{FjsYgxt>;_eU6I!Rv}N)5dw;e#q`K4 zk3I`pg0OM!oM{25Li4si(hPwbA&&mJ(>K*_^{8vY z`aExGGN9w*oktHJUMXm7d{T?p%?)mN9la>8b3>;fx9C-zz=OG_Gox|w7`nUy;b5R( zcnOk8)r_}@24=Q!r1j{dAvTBwLk|sC*7Ye@B56dN7ATyVN5fNKy9b$>3W|rQK&zb# zo00T7TPh$Oxs^3X1%}TFMpX;s^y(3TjM(5zDCAvGC?+r9Q$n({bN_cC7vF+H9KFbW z$s>1ZNM<*3H+KtvUj3b~Y;9eh-NhF7=dl_^;53j4_*#XE&5d6lqxOyCh|bHf|OQ(jeF3OF9j5!f_)txJ%aI|RDcSJ2D6)+ z{9r%A-SeP=-vJ5oc+dMnEJu#K%8qkXuyX0uo8IFU(Y?_MloYi2t(;Cl8m*{QpxHpI zF$Wyj|E*EM8B9c_g7@=GMnlC+9TkPs85Q&{hz4=U6{`J;6bhsl&{p+gfmV1z>V&mI zv8f0)`~@;}=usgfq6k{?9G>P3hjWJu5QGz3v>>2jYwP-#;cb5B0T(3xmwjT)*R)nJ zr(i%fXLJ|FAK_M&u((Dd_ye;+*?6!{-(vbA9(aSwLIr4ueJmuY5>BgDV8GC$SW)f3 z9jy{b1|5o;Am`l*iiKDx5qaRqprYzT(F!z%W-QbSP7uLVC=M!u4Qs^=-Ec&Pm{2IA zfpR$+(ZysC8gp8KzMvw|7^XtgAxbR5tFWKBTr0G@$p}8hv#*?-9$hCEG8*`$E>ysL zJpJ|Q(bpcCibsz&KR)KG%7Wy}+ryafFbq}WUqeJH?$df4CEcI`ry^HwayMjp^iA-9 z%1T9L;y_ejjt&c0mZB=HM^J&93b719eqp`8oVG*n>s0u}RA5DH1g zoCV<*(@P)}r|xq#GM(NM72B8&g%js#K?udGTU%?~a(EF9fWlaOq+kJW6Ag4Lu=%yl z{qA2g7AGVepaWGIrZ3%F$6rq+7B#d=0j)q^SdUnS3|f$!4XMu2;asrFR0JEbBt>=W zSkSXj@U}(76p11gd8Idd7UO{mqCqZ@jif_G4(U-rGeSCM+1|Av3#hPSAl5NRoQ7b7 z6O-`Ap;7_Kz=QM@kgE?k5gEOODI{Yl6{iRVV7P{laC!J0qM9cBpy0#86u z5*3d&KgQ>(p(uA#RG=_9bKARE4?Z$x(E)}evq-rvox@^?3iOp@F+>IDqfSUD$OBzY zBoc{K43v#SmkKRG<}YNScN&nOf;Dk7%QB$~MwJTE5m=N~W*REm`m`RXgI2U*$bxjK zkiW^vR->Z6EUCaYXRRO-FeJKUf!g#oi&mg6pa2b8gkB~U2E>!q99W~)?B8L?! zViCbKs6dv2A?Jd5hmKYpgbKNxoI@5QW?PktiT#Q)YG$nf8OS{$6-1*@Au|H2VYfop zZmL$4m+fs>u-;arxq4$T(tM!D`0!~cg~ENx#p&Dn1D4xb9BFFk1X9Yyjg!cnxg#z( z6hEfoRW3yX3R;lO*N%L6JpTCc>CxEATED=%7Oy^_P%u2`V$nd6D^pE~sJUc;QcFel zXte@$gyIRP2uD+i*C3cn8Ld4~(20mt17cwVB1=-W!jEF*`=VAjq?0+(VF>F4#lfh+ zC`pAP`xL0McOk<;pR;d4S$g5dX_ue{6mf(FUE&$>gMdkxYe;Jg(gR;CTG&>tsR|c=&6Df(NIq zS_lU@7o4n6q3@ioMg_;^BmbSFUc}Or$tqM}MAZru`cw!DQo+!tB2NdfBCT3cnaC@> z8cRA_ucEUuRS!gb72jdhsUx65* zP~jq-PUi9?gxQvfq(X`z&FEkOZ`1QcfL+t zxmWtqiRn>(`?v%xN~>DX)s$2yl0?*~7!YNW3chOfHkGfJEJOvxLP1bKD^RejiC8RP zMdTilpirqOSd;~bGeL!+Na4UpxfjWV57iGq1@^i9Rus#r8>9lwWv@cpSnO}9kYmB3 zSEr200s`t3b;V*%D>ycSHaNipi@ss8y%p5G`y2Q`QC(tWSXN+u`us=mgl9f55kdW& zjndIIVDTxech|5%alR12jQ6ngMN|T^lnTCFPb;)4Wj)uUxnXg;Pla^CLLm!+{y_zD zz=AP;GDt6ms6Yn;VGCj`f{L^o;c_0F3QP{sKwPQdjyEdkS0F*~eucyWrAkHQ3l*TF z5)o8jz=~Axl}<6DQ1FNTrV>Qc*YeM$PtKk_i;76Ft#$T=GcTZyK^xb`;-hC!%YOdu z$BPOmzIf^G8UE#wOB?s`?C`Su$UA!6+2p@^j*4(BY)2R)6e?Ww*MtyrMY@;@i$uh& zR$!Js6~KX5M1q`7(rHSn@nDXo!?Cys8ZtQu6`G7uP(du>%rtSxE(Hr#bgAHPaB4+M z1*)YLNQ+=JT7l}mR-o$f`FApopQHlC$@J(3UClA`4qlo<0A6@~w&v}MM~|-H!uE9f z@?EIKr!QTV&lwIyZdz<$HToR?_Q(bf#NdI&jm=0fHF$80FPkD0CIq?0u`m^ef)*r# z>$%E7VsnG25E0kk2L`A3s zn{_(IjDxTAhD(7jg`l=WMOYA24^a`5U>j?Y3Id_POhd&@eAJ}kX}2;q6*$wF9(nP4 zQt{~Fxg)1;JbbtgEIx~CdTM_8zLz1o=FQdU3s-*y6CBYKmMRVag7Z=(m=Xv@WB!tSe*bW0t#j17}9v4>i`uwOQB*HHL+)rZAyiQ z{ff5!{I=fnDb#@qh7B$zj$V9NxLD`?iigc`kfl^`@@B&V=7V~13BT@0 z3W?nGDD^=1r=~NqukSqSbemM5Th}F7mE{w0l5lqQ?>(DgH*(e zd53exlB|a!z+km#si;opDpbVu1cTZ0=S2lqAu=Sn{)mN$4@*e}PeKN$!0sj+5i)J4 z7(ad99;a6$uNN#XUpR>or*Bd&kO?YYM8At?5{xU_M;CIu#~^qliN!eXWQ| zeaRwtn6Z-4Tc?6EIT(vd1!{ptp~9WyZANyG3b&Dnq=LQ$1D?D4^tT@2fXrRE;5>CB zHoY&;=$K(g>VBmH4h46&vv-qXTQf@I@jpk7d@Q6wHiX^hZrwCef##qg(*;zJ2<>?1 zWh~B2mEh8p`DB6ro`X^$oxnKTl6|S5PWT+X!D5EWVJf_x6@CR*r`@|)7^grxqD-p9 zd6dqFR`|~pii(bE$9)_09MB3H69o!JZdeEjL-CC%v|`(;w?zu3FYy!Q9dG_$gnM!1 z95n%2;l)~K$)cIr%-wDkCisgq$P_B#vCVZ6LN~L9A`{Gb0>&^OOso-+5{kYBK_6QY z$^_OSCGJvzYJ{M|j%F@R!*tAB5RVZL%*w++Dy^Vm%=r~)6cF)skQvH83}FsfFwQ_6 zyv4~IdZ-l zrY{nQq=MfFKryL!^oX}FQGrDXV%=7}Pb@a59Mdy-Fj2K)!PTk!iUy3L z4@E1i5*CZ3qWiscOz%*=%{(qeeM5zMg%yG6h``#=i!K%Fj))5o<*(%)7D`El{tuW6 zIu<2hWt#bgRD@nMw{CJsU7SXZ*QZ*UvPM$TKExurLAq#9krnxdpK6Hx)lK(qTW_lYQbP`2cplix;8``)YxZ*z!>GJw}^P~g%- z#v`$S`9O6#n=&CBb6ehooJ^UJL9Jj%_!fynq-CdqQqgDydpnp4#ARy}^~}rBM7~Rf z4no3skcdT8(6?Y{sAyIpPz}9$ySG{QE6~(^w2At{%gj{gASf)QB6ch0s7RsMDNx9l zz;yoDnY!R|*0Q=hEezjK3%<&=OxkHWJi|>`lc`-VQ}Wh0qWjTzkw> zAyZPQuwX2rf*xm|iok+Qb~QPv{SPyvZxK;tkKWgAOWSTN?On3;x*TPj*CBp7Ks zd~`}bQvq+FP?3%W>b!-OYmly1(0Is*z>aujTA^qyh`J#H8ivBIgs09IkoTeszi0R= zC3xkd;wi+qP=UCqWNF=0tY5~T#rqPag5AAe0UnfR9Klq`vtUh;ihx3rfqJbUz77%YD zf>nrru5%CjC3Vg(3F-Xf$_#Z>30$Z^oO>3?dL2Ul0*@=0Ju@DEIk8YF~BU3gW>LN`;EDIHgw5h74c;#9aOMhJ6KA$ zF2Am4>-yjnRic7@95(NK02yn=02S+(-mO2CiauQnf(lWQXf#wbCIr0zh-p|#g;%Hh zQ-KK;KuG!%l?tv-(b`ZESda=dL?X+fS%#@-4#-xZ!fX^Oa@!)Pfcd~H*@7SgI{3oC zArj|cIO1%~79@~B(j25SJK``0Ls9lCP$?>QzVnox#SB2C6Vi&AhqP48*7(0_`qG2k z@^+VqH#hN_jX%wO@A4o$Yeg(RUjJnF4@Z;5A{8bBHHC`Su|PdlV~7ek7WOui2d70Q zlqp(~YY@J+f~jEEP?R+YY6=w)3KXps$b@1b2O1C;zXD5BYX#y431k~8(4F3<#xa%! zLE2EkHf~rjF%`(^($D32pfIu*~2D$Sq@8TOMRKTUU zJVONnPC+uo-X_mKux@=lw!HbfjQ6b*5wdWHxAK??tx&TfnvS|xVJg@l*{D(xXXye1 zt(spp1ceS2#N%KO$HIUJT7w`D9vpk=kuh~b0gYinkkfvJEC>o6D)JO$>BF&XOeSIj z6Vx>b3Y7{J_?`4H9W51T03B=(ksuu`GRS@~YMEF;D{MPtKsq=7gNmIymt;pmEAT@6 z_OV`Zo(g^Il>a|B`OTuEuhgfS01Mo+`OGpZ%toQY>ySbPYzgKqJ_Ry-55OT3oS7mA z1LD+ckc_)hQT+;xpts2>90sUhLyrpeH5JI(v&h@LqJox0h9lE~N2X~K-v4(7ILwqQ zRG z?;wOH>1Y-ejFJbZ9V$3YT<=yIRFDlAlT-=zkp)3Y=YngHupn$gkhh66s8F4yLjHxQ zC{ZyU$}}uARCtCZRK)!XK~b>aDAM845{&(+K<6+b%=Ik@so-=W6@?0$kbuJXE96(8 zYljLgPN5mJAPyI?y9u3`o_e!=E|$(gxNq^9JO@d)qNRfGL|W0L#iu}q?I99Ka*IOt zBkotMKm{jZ@ZEoDg*^+@nF_!_y)zX|yHudU3)B>e1`8_%<&K4=BIKex)g;A2BLoGw5DX=n*9xyfBpMheDl~o(6=_9+igYZj6!a-L8jhwD zKB)jXz!2x?EftUM>q(uj)1k1pHNpJ~4rJhRrrE1t-de#}Z6OhbjktG#Zxz74R$= zlLZ81nIsP~BBH`l5eH@Hl~63Ef}I>}N0cWOt{kF*Eug|Cq?ixZ%7P#bDp(~pS}KG_ zhl)p!-aPe+@9231m!z3a1iKV!jMd~yI376&H zicBa&tw7&MVpIwRiu+PQC@K{g0XR5K;1H6*8VW{v)=dz>q*@T!5v@GDXQ53_QqiE1 zRG^l7n@vECQD~?@9Ri@}o}}~J$8DIS0)tX9tPm*^^^c{aOHzTX3`qz@Lq$l1s6a0S zuS3c%)__)ovq|fL{-iUQht~})yPTB>=9W`&4pTHzvD~lV z%Ow@OUm+fX3cnRX!9XAs;#oHh6qO1L0T-qMc|MBOv(Vv0?iR0h4^e??8<9pTCf(Dq zm8ifxGG2vrv;r^Gr$Vot?nT+aO1Y3<;nR?LZxcfWg}u(eA>h!oMq)V? z=osE6asyO=hoEAUpU39{3uKE{ARkm9m!bUeF)GC}t-u;Jv;sp#g{Ih#3c)c*h2KHA z7b;LPk_V^Ncp!&9G#nnsm^u-T6{+ZZn*jwB1AWcIVk(3M@vu)(;zlblOOFb^iMnA? zrGi+XA*i5lF-HXlHdL@E141rhWtv!|RHOw7f0L4dF``1FdsMKlp+Z=E-dIRA!hUEd zBYG7X_NO9y)~yQXT;HRDmDCGvX=Xf$@1%zTvA5~baS*~nxE3o?QMN0VQo(scF~9=~ zOQ;|b421`0o|p=d`znyeZ0E9_({6F79JKwsg} zXa%Rvy$UOaq$1=Zw4yFetN94YcC>9(A2xU?woN8f8 z!Kj1eTDZ7?3N_ACAuQ0=P@#pXo>UN?=5i`9m{@3j#5Cs(Legz7Ps305&9^KOldl&6~#R^)HGtrj(e?kS>u)pcIGT>K0E7->G zgCMa=IDX%F{Dr<&SThJXKwT?$bqQf#FYx=$pQlMOvnSWfrXbJ zg2IbbG(9;L_AWR@vt5CFD-~5M=BPl=E)`2wsA!-# zx7>p4@f@TH#e!hE$6areFWFFme1W2PoAxboWvabRE>bNJ8t?4J+Q;6YXTgwu#X+dh zRKrvR7DH6XxhPanDw;Kj?MK<$OcS!ug7_^|EKq(TDgX#kXu>5<%}96@nNX%`1v^cVa$`J*Gc#}wILKpxAv*y9^{#2y1S@$b6SD^wW z7!xW414@W16)5AWCLX~!bVE=mN*-45E6OZ!5Q1`XIgt-6lq=rm0<8cI87dKF{$VO= zb6oNEZ5s(jONA7ps}&eZ93pA80!xv(HOL~Zu(#>A5jLcFn*%%E=x8W{3Y5E4q!9rX zEfNRN3cr`)TA-MIg|k9pH7Y6*%-e z4U3MqiKdmcLRO?w!CA|;rtnD9kq2bx5PRJ|2;m5XJO`;{pwd)0V~HReC@;Tt)1e~$ z3XFmUL5x5id^)D0?^qyPjYV2PTM`~cCZxi1Gaja*wr7r1z|nLu zsi=y9`tLdw`O-{haiF_cduc&D*{%-7ocDLq!+J33QPD!Nz^@pl z0@Jr(%=;C7eV>vsuX`0t3lYqq!X_j#NCbw{>Q@|;3XF$dAXbn-FoN5OIHAxsmV2aH zpfpT{Y>8K-dBg%-r~YI{>; zNG#&Tf{d05w2+EO=CvYua9Xs26ApWuY>5zC-bw_7#3C9i7^v8X3i9BPA`xk5MHrIQ z3cmt*5EPDzGhr&?UD$$v2b334Q5_5Bx>R_pJK0!hK`=W`(h-MGF-(Qule|rP6=Y&5 z6&TSmA%zN0HFAQZ5NDXc&tx1wt``@pQ6WRpg`!=V&QXCEfLi!vB98kNC}GDNasIeD zxj<=<3R{xoVRb4zyW@&RfuUsFV~GW^VsxSCQh_Ow2&A4+Xdvs&3-}bSz9g*(EC#4Z znUK$E93qZ=icHd@V2Y^+sqjnYU#>)nJYe4fadk4eU*V4XQn3|YMI@_G;hBAN6M2K7 zxTV6q=vdgbsE!3%I#i@zQK&$NWMc)b;0sYT@=2SvBKdd6ss-u$6)6=9Z`~M=j#l7R zNCjUFIVVYlONELkrdY^yqydSW|Lme;vJMo>EC>cvDo}WZQ$&Kiv_d*jsc;X*)C+^L zh>Gf4tUyKD5zGp|f-jJPEJ!c#w6v(hc6YWam0rl1n9~ZgQT8i(R0xgLsK6QouN6MU zFcsxJg@aL4^DjephfHkQ^Fn3TYIIqYEJZwekGxUb2@OwEJ6&M4-NGd#oZvG=13lXtk=R)nq zB0SF4uaM`-F3=0^dbda*Z_APK5(}bNQ6w@LnF(2sS?qYbm;DMaK6vGd)bf?W?l1-o!oR- z!hVIHlg1$tu=>bQWI~yx7DTryFoX9tIh8NnFvDEetr)f-vANkCkUa?%c(I-Z(IN!Z z35Blcp^QKr_*%ib*>H|kX??32YP9$7!?VH)78jlhCQ8j#hU3(p((^>9pv zGE52$h+CLT!HCs}Rv~VU*hDC9kXT7Dnt6Q50u@0;HZ2egElt^{P$4H{fC}_69eu&@ zD}>L9f^YQZVTfBhRFoy^kQoWj^T1U2br3J0f(NK*O}|3j7gIrVQm@{Kjn$}#x1l3b z=6#7%I?<(qNFXE?9>-E=FRNio9Eq{68$ zWTCq2aSl)cohWDO!XYAz-A^mfC4%7K74O*K%zCEcqqv*4C8hoHtS(Q9M&MAWK*!ko zrUl7>+I^|eODv&6?TkVzm>`VyP*spvRV#EY3j=)^!dZz%+`3^7KlR>CwIGHfsPJYM ztO$f60*3Xj^rEJ~3iL)+YtlI?IBSmzRn^mUibV<4_jc-wblEQ#i zwBDvyAzGd`P;@K^Bx8|QTOxtid?VP7iXTVOOjj8F>C)oMk~ z4v!OA`kh&W6i}oEp-aJ_ZSTw^4w3e#K(EHvY`sm6_svZM;qL%YBDlM$#sg51Kqy^- z3eR75vjPrX`Y%|xPsB1Ig^Jq5g-B{ej|z4o9jygfOa*&OE`o|gg7xMiTus5@yxPdb z;tN^gqpKAhwI3C6P8Mqr4CqsVDtHqPoUl0yAs&?qw)HItsv0U#+F`GfBo?TlRM>DN z6Rl%`Ci@laG@um=s30F*zXHRd6`Z969f+{hZg7^?)`&Dz`0^%ra40}1QwI-Gf!3-Q zT6>^|Kw#S&aYF^n1}YF_N4iv4Ir5xr;Wa(&dv~bdd=!aD(yNFSYHVeZin=mIfmG0+ zXdKRj!l|U9M5Kbf9r}-AMQxXg=qETB#ePLpE0ItLjpAr&A@PH(8F6BH^`)uTdC z%v13i`sTKG)e6c48l)Am_&~AsE4o^t7eti1-m)dV2lS#DT9G}O!Hxyvs7fxf2hwUl zRH-vE>H|w6qCo*y4MP?L)zyk{8G;JO$jnn=ED8|H%xMKi7Bhl;p9=3}p+VPq zTMJT`A8d7~TA{L_XfApSi()*KkyhmJsuiwjs8B_VMYSM(Dsr|tDu@I^*Mcpc;0)7Qr8ykX? zQ&hzHX_pGrw_ucS6{cS?NCgJL-1z1)L|r1PT7il}g&XNnkP3w4VNff)_TX+s zggj3N7=;RC(3)CNsA$~Hdl2otaWHl--35|WV!fTNNgfgZAuZRqy1zI60hyyz2 zLZoLwk_x?fMU@KIb*V@skX9ys5x=WV9yr>ccUr ztrZ<_(+kt;ZVpiqSYQH#)u?daPzmo@6e`M>PUTNjDkv5R1f)`d3LJwVwgpKxf(l!a zmWd7(7)Gr?GDijLdKSc0-~pK)70oV|dm-kQHw#FT2dAWh4M7L(21-m2>J}C~4AeJT zF+fGf-CRb6d2qa#3cOy61oEiyIY@^J)GAOUBB0#W3hhwh^Y%~_cQ#D%Q3h{t!p9)l^XAvC_aH#sc6N5S}{+B7pIIHzoKQL)e624gH!@BvV{s~QPZa)?%i~~%^5oOsqkin z?8quqV20SX2$@g?qaGDpgM?qsmI`YHDg;IRNxC8zFdk@16H=)l9cYkN1QiVu z$S$BlFRZ9o5tT>=GLdwtXdH`_38mJ3-1@dV>=KP8|D(a3mhApFlcoZO%DZ82w z4Gaz(k_yxyG*qZ8EaI#*v6!bqT@m4QEU7RXt5BiA-t?AC#Bm6!dsO%s9X7-Z5Ok2c zxsVFt;XSO3lZoCrNXLR;T2UeMfr9Vo(RKg}8<2R21*?dKh+x5iH}vv)g=(5(5M+aj z=!|3u73@SaGOrcf=S;C+mNKD$0@B>A&=RD2o0g2AA~XX7BJ58Et%d@zI0zM{A>)P$ z%r>kQXrPNB7#Jy&DuFV!qTH*nUxC`XG@Z5XCR&PCJP{R`pjnwpEEw6PPzHu1j0cLu zf=PIr%(hgBj#a7P;I3AnEGUFU$ASz}K_D=sr9uZH#eVdtC|efZ+8m++DuEeOD+(1f zA}dj0-y(5{^dMBoeBdpFUx6HeFcg&vE=6>|BG(`6HfiOe1BGtgq*9do6)73k2#iMt zv1rKDo@SQ{w9$-os9;^)tKcGJ2^H>KPC_6XU7YW~B1^4S;20$R3gjBCFcp%Dv>@^|;a7CSAQk1@ z^f7rDqym7TrD#Q=LPi8F`%xhrA{wBgE<{=?FmHvTIG(7ryE#mSv54)=Mk{gwg0uq# zwE|NPQGseufmmUf3Og0KG<8q96-hMtdz%>1r=pq<x*g{aUf1QX{OS=Wjbu|N;6J~BB76&M@= zSP%!47)5rFiUG%B5f#KDai|s~wE~TET2X`onexSSQ=vC1y(qGwB`HmaSEa?T2+zU> zrt0=?DcaNozmmEC}Y2Yk^dU=|fcXObB{5OVglZ zj*3JA>06+JZ!2zODXTpT=NQY+bVl10AsEWTcAzCJ$RHKo##%rHXN}-J@4y0e!3J_e zR1_?PLqtJ^q447sb9V1yX)8;LVJb`p`V3N09E-+!ETY0!H+%OhLONqxN$W@D=^J46=dLIh__ED0n%-(=il+jo9BrMMFiwBDO4;Bo$8c z4+_Og#0mr@+7eQMY$mZXMGbO@5qeZmDr868%DA;4t5Kn`bzhTG;ZVM3N;85geft<` zIu`INP|6JpS&fPYT8af}Z`}}#rBq;GBNr(3si0a|ERg9_fhvSx1G(Z`6d;r_73zyf zJRo*9A7Vi`P?K80&bn*SP{C|Mkse0)6)hFABMlNk1!t^Ou;hc&*zHyYqe{gLrIre| zA~aOE!m)J2Sy~d)kny}$gibJlvx#wXIb*^e72*Lv$c{iD&`S~GhKd;5oP?lekP6ff zP+_6SSwID{VgqTR0$CJe5fc7IOGVkFkkeUsaAtste7RygP(d^Thj}Uh2)gvC;51=J z8b9+%sE~8P>0~^ZQCLJpwtH#nix#C0NZ@`2i{WiPAr(M_M2HIC(Ho%{GT~fOK{oin z8zu`DAq^79Rs(_&^Hgx2e1-+G4Hd*AuwV{99V!fkz0J-^`u-2R(M|={A(%2`f;k0? z1gU7m0xf=80lSC{n~<;{l8g=&QivMOYenb;6Yzjp)8+IUgsRX$rfrEiKzGsRY1Ni7r;aUp@^VNDVw;C0mL$NPcC?2E& zox0mt9Q78dkRjnbG9Jt*ETSUYO$8i_T7ew!Nb7-8d+TO_1?fgmAP9yMu_p9le+z=X#fDS^LNrW;6r-VnJ_SNcg~WoDfFeQ{3Q>XffTL;! za~!CkZwo~}A7OzaZHH@}N-R)OsYuTvsBjXy6_M;~K`>!Bo#9vTCFNYehUBdqRE1-~ z))FcY=}yp!$ZC`|NR^3UDll2$q9YYag|Ud&9H7E25Q@}_{7!meAp^o*5{&dH=Dp2$ z2~vTq{0gK+E7Tll0E_%ix~c(1)e4A){E9>Z>55cfu1bX_)=|20T8B87v2XJN3s!Wg zpl9(GsKDreLi-gchPR0v4TlU!--5{9MB@Mza4kfIS0B9m-^HS}Aecb`R3McFL0YsT zbpmyk4P*)x$TP(914uBSf=S{KsdYl;gMf6fIFIcs&QlWP8Y+sn>1Bvlr8Xf+g~Z~m zQlWR?=M^X`o#1MOrMR0%r!!Q7wbTsZzyhJ*gY>*AjpSfdV2*G)!2=3?DvSkR3Soc> zH_&h-74$M|2m``ybIzvjczXivVJX{C(fAc;Dl(B&7>b!EU>xRyEFhqQ$s85*Cmhft zsBjK(P=OqPP*k;|Qh|nIJh*dVt)S`Pkf1^;;iw7)nxPdP*Mg=4)y0BviU@j!Uf|#) zJ-09anF9RHROzm#qmhg^C!OG7$%+sMR@0Wx^-v z>K#_3BNp7gim8}TB&ZUOTW=FJ_AA1%n4u!1LhdGu;arp(dZ>CURGi0-H>QAAhz?p0 zzKU!J(n5tKLs}so(6lcV=+jt{9u;V`<)HbXJcLT*y-l_w01GA^Dq;zughyf#*smiM zT!}PTm0h<5yH}t?RFaat9%mG#Ln+m9s09vkf z1yF^$nSZAO=(u9x%8Gyu|3_5(i30!xIP$+y0W@FDU_olz5EQPcxW?joE(_2P&;*DA zmH$o!AOobUrF5Y7$Fk`!93Ub<2Hk-L)fs=IVioAVvLHb5H!6U>Uts(z6@b8XBm${I z*3zMCrl1MALgSZ~0A(QSAW&g2hXkaM3{wBS>jtVS{zAp?v!Isb`WVy~K>eS(;&<%v zr>+1*LAwDK*CYJzr~p;Qf6^7eNLSCK{~8l?D1ZZK4pgr9VL@%lZz=#n{zAn+cisG= z0vP3AseoMbkEsjb7|oFlz zKn(}j^fz4rK4%Ix|AmTQktyh7{z_nE3jOC};0gai1w==HeGm%*Rv=p9e@O)>5AiS{ z6(ED?3up{-jRa8sNd+Ku0PEt|m8uMlcA0^!|m4KSGiJFDf8J{8LvzEeDtbm%8#Rz>7kn5r{(p96%il zP*?n(zJllqQ1UkwS5^eDCSdblsQ?354R0^m`5qR2bkiHv|ko^k1pC8U#9>1u-1Z*({(PbT^^he^LRmah3j} zD}JHz2NFOP6opU$ExcigfFJ}M0Z2d$0_Kn! zczoqiK)nkn71#M6M1WOL8e%{o1tcN`u>e~CjS5g2Owff8kP2u30=E61P;sp%fbqa8 zIPQO?0%}D-G=Q0k-#JkGO$BfOB&fFute%1gpa}tV1tk449*_!TS`!oj{Z4Sc;`-lL z0#pEvfL{UR5H!H@x2^z{#cwKrgD&Vg2vE7w6~7z{(C37NqfjFLLIu>{ym}DiYTfi- zr~tT>)O}f1m=oLI%h|f%t{R zf1m>5bwXw=K=%SnztqIvEeLpVFkRtrRe)GP*|^dbP$6gx0U#I|g=z*tz>H<>y zlZvYm0b>HxuJ&O;*!Vx8;(By|2e5iY1&9TN4Zx!STL1JbfJ2CyxZ36YcVz(%@+)2K z!~%{%6t0T@M#Zl)udw({1<(U(jO(cisNipJ6JkdGt}CEISH8vX4HjVYFK-h92cROL zvXGf9NENCuAXGq(K`jAIe^3D`jVoON)_}jiP;vS%R6vRNZ&U!I{4c2hfw-aq1Oo6n zf&9Nv0excV_alY>QC9%NTqP(Lzo`J40W^M50hNNrAXjyu_?xbPc3k@wU}y?SU^8_3 z3M2wdf9MM6Igr2<;!*%SfK5;yuBqs{aw~pQ0m0+Sct9Kr;GBP@0yHB)`V9rtfPmNd zm3~8UHJ=60aD@f*Inygi2pV8y3O$CDP%3~1h`R});tCD`5vb+3I{T0P75}8-O6JPZ zywVk*vVdref7KNbARs0L%ENCefZ5IK@gOCL1Jss)?k3O#@jCyqL+@Jt+NA*W1K9Le zDz5)KHmD`8PXJ2*i|a$M@^4gJdz^nPk6oVvMdJDhg2wg1^?U_nk2lzOjRl}1fTO=q z@oO3jLIqS|{Hp~4PJ}Y?S1KTW1$d3?1l1JR)80TUgbGOZ2Nj^Rd3^@7gwO%O0yzH9 zR6yDIbJq=&ir-Gf?|1}?#cwKrfdMprQ31U!GzPh<1I0h6fOP#v13K>w@hhP775|_D zIu@8i9Zkr;nF0^5umCLwa0K~-=!$D9Ab4CE4~Sy{Nc{^Hpl<=DKcIm671xdhcr9oG zuz*yqrmwE%y#XAq63_`Mj{kuQ=vZL>7hUlm_hLcif0+>A@b|N0(7r#Q04Be00FA$9 zyRQVm;@aQ5n(V%&0*pNXEddEZu5`t}Qvu3>31kCOfySfI8BVBQ0T2Q7K&kj+*%T6* zLQVlPs9*6{3j*o8_BgMQ0E_E$e#IhS187Ge9niSr4=Mm6zyx%H-sV54_`|UPWS|P; z@45mC!>{~LDj*kyX3!bVKj*t4zwQopUayW_L$L}y1MnxHm0y0vUv}n1jgH_Dh)kVeJS=_4gt)SR4E!ra~3 z)LczkjGR@$+};v+HIQ3ULlP1~y1G@**-c->Tusg9OTAMCk9LK_PPbd#ciFKSRiiJ2 zB*ky%NTsKzpa>y`adF6CeKY=fD~1CmX|w3|Q6KVv0vrj3u7LQ0edSz1e=TwlM5)xMJdq{ zU~eH30@e6j44@hS8zVxFE;9mFMFOSBf$sk*i9lubeee(B)MV0_ISR*LBt8yXMC&mx2|Q8B8MefqU_;IsM(a5D6Gr6(J^>0CiGlHN6&Q#SaO;0OP5Q{vX}+;j$-d+|&}QzBFjofn&>L1`! z56rmtqy*+dgbm>`karh&7sE9W!nzC%4eN9ip2lEC+gT(GTGutmaw8_wvtUM32W!ci zKD}@~)=zZF#{BtC0`Z>e9eXT+nzS6=Ko+Ou;T~<4Mswnr-%BCS%?kSCyvB+gMT|c6nQTkAPE}!$VX1 zVnq+v2eY=Ew$O8@Ctu-x>ts>rP=2)aW?94p;w<)g){Fk7L^S`F{YT<5A5X@Y?swmsToFxU3+*wroVpD^0_I$xKaJVGWbDATpEMg%2++ z_Nbgb>$WU^(qLLwRF?h6r!TS1Lqb#86Q|<-}9^cA>3#@YAf5#}^wL3?0Hxg0K(?5nCP>6coTn zSV{}NCJ1Rcc$4J#t(1j0I{+JVZC@c#HDc^8mLhlFw}9j^-6;l_H#*_Xp+8{D?RcDf z$CKy?J@h#vhj!H>apTmLOHv#i?i{aB=+}B^(B%`?%}IxZzcb(u(qPPPu^_WVG~TP& zl*TvtF~YKNV}^i+?xN*+L!n>zu(MWPo(lB{7pf}otq_*f*VpGIrpYi#9gn7NnLQ26 ziv57j{>U9y?q-?x62CLk8)R_<2{#Nay2OZiIc)z~G|Q9`dll*|K4Q8xEsG!Y<}Djy z{j1f?BC7XZ$g`PwX{7#a&d7K;jG)R#P-c@7`DmlGDmgNvBOt>^Lci>7c)44EhLEkm zuqFTd#rIxf4UD&L`YYNo+Y}|_Vw~R@*$G1>iR@do*=K=$sK|nQ&-%Sh7T+dA>ZL(i z5;B!0d`35;nK`eu9+K5~f@k_zD!O&?8??wkD%J7;xsa1!8IIyuXG!&*{*MY`NrpK| z#XWcUxRa5PrLnc-FpBEXZAkLawbjEE_hSXBXBFw#srKdW;8C#V%}$o&IxEUpCJp0< z4zq1+d_(SfEgA(Iv(CCX?_K&Knlp+k*|(<4j8DFWSA4f_%$SWj25AirtB^@^a$q~w zCE-nu+(&O~3-r5MSZ{jDmE?4aHwdL|8gbS-(REd5WGh>wmn$vsE!CbEJ)#KKRrI3N z3zTh6RW;w0-g2RF`(Su4xnRs#1EY;{n~@RCDb{-Y)`v3E>E`xo())yngrlq@-nHDg zan_mY6L~86M>7d5>9QX#(vu33-2;#a)Dk^I?uK>A$qDCSzap%&9joT@o;>=fg^Kk6 z#exo}v8b=e#zlDuCCS>ArCCj2VT4I3jT1%ol;1Cyk7;YSHmy9^fVqJIj)yZz)A>kq z5M3^{S{c=yz1WjE|LyrUcbJ7m{}j=Lu#pJK1|Ohf&11Xl!YC8yRN+jMngwqZX^D;0 zzHKP#+!f)>GPUU$PLg0kcsEJyf_2|`kX%M(k%+6*`Pe9ynUiCWosjBd{e4v1e}j z#~nAjGCnnK4D+{Z$gC4Phf^Outlp3cluBaevzr#85zEJVKuf59=esu33U{wsXOWqU zow8Cy#rt-`Bvo}u1_tZ=VK)xxM=MW#J_Iil6wos@$chC#hpj1c9{7TJ*fvo`>2xvo zL2`Dsd%HC0m_#3IAc;D=TJ@#ul(j4OBCom2rAvbthGn*FLH?~R$a{e_&UHv8Ad+0k z12UQPE6A0Pfm{cwqo%0Rl@z!wRdge3o%x!3P8Hk#*|dF0j%zSg_=8j^(W02VOm zuAaXBY6==p(S!WNj!&QQC?lmcZ;%fJr)bJWNjPOiCK~sCjei5jO%b&n#iD0oKcnFn zguF0;?`vZ;+YsRJz>=OLLqB{G{SGR3GMgQ%>WkCj*i5v9NSpGX?*}*yD~-7PU2X7T z;E+YkxiGo%E74KI01wen-oK8uH1NDBurVPxxiPw1RHK`x=YH%#P_H6~75e^h=fifI zy}5@ow|qztk7VyVA+=g#7q^Jh+|SFE*|4X^JA72 zU0u_%voo|~bDdL(npgCk z!r6yVCGYT3n0lap)P6dC_&NYaHGCUQQ2%&EL5I$*am+RQ z+4ALX3v#zsru2yqjEX!(Y9VI*=}NPC)2hn#yCtn9OgoQZ_Xt4*0;eG@1gV=+OA@i z`x=B%^9}7D`u3(Y3hsg}vS7RODI*uY$yOK%bv<(2#(}CT+_FtwXJM?K@SDOPQQInC zT`_F(Pj5T&H=SWb^{!ZCp$o2tCBjJZI>@`QiAOxvOL|N|sgC3s>kw8Od*khJ{rT>b zJQLez_X4u5QBt$Z-sX>{3^-Y88(!Sk)0ADIuHN1ysC-fJBhG(&y7nGA{@_*{eHHg% ztM$d!{l%m^y8K0B?7bh9lvZ_z%x2%nqgeA)=by;3I!eEH&m!cGBDB|39JJ!XL=JWI zq!gu;BU+Z3zPI>%CZJ|w%SyuF`Ks#FPe-X}Lb;+m?BZByBFf^Y1=-}-u@hTqd-k)B z;wt0QNKv)2_9F6F&#SUB>JRj%c7%Mzj>uS#0%5jNQJ&MWUmoij4TN-FN^L|UXO=b3 z-2cFZpCq&6+PBt+`*I6T%P*Y5q6|T0jrYBHS6G)S)%tVzjoi~9SdzSXq#$dpb`ysY z(wouj`6f12?%g)F1G)~Gon3*532~{m*E76U`4kOr4X86@Uqm+K^(@q`h;!ywW=q~c7R+vBlib}ls0)vh9`rq(^FP=BM)Po( zK)iHOx}rSV807+^4^}Ei!m5Qr@=FeBOnb-pZb>SCBqyc+$oGOcslEjs1C@Sd**on(Y zJRCodEh-kbfL$(B!ifo|%S*!0#?`ic8GlgE6xDXRu&^_qMQ-CUJR19n>}MP?4xw=M z-t%D%LvPtQ50W$|{nJ*KqC#qG!pGeM@-$Nq_=kATN(VEu?i&}SBeYW8`i@wE zoZKR^AB1e(>6%CwmQhp}^HcGY+0daM2H;Ptg%I#CmzYQk-3v!XU>IuQdaD=bTA6QU zGgG$jX&2a0q&EAOOVXQTzA#VaiH4p#S-^&CkA5OMC+5fRQl5Q8VWfVg&YNF@Qs(gl z&P~gt4t5J*L`DKc(^VM#RkS_d6~AZBL>+o%+aH9cY3Sw!cUuNSw~D>~1_?t>B!?UB zvf|o8ej>q>xj9wAS9cPO^|K8PIb&fBKZ}sKHe+$c2@cLA(;s5>QHh%kB-S0@ro?J? zG0*faTR%?PD9bI(Pl{a6)q{IYTB!Ld*Y$z`?)#}#?HC?0F#-zW$j$7_`6k=>KK-30 z&NZxHajK!8q8~1n;*Dwpdb)hte};5j3bOiQ%#TX3t;neq5Z@$79uhCgdD)uGr$s#A zD_N}f32rL799=oMG)4l5eDWm_Gt!d?I&}lBM)ur?&80c@-EH3e%&%maHW@rBHHYH8}rBnv0>?<1FVzr$(tpDPjmJ$6nOHR+er} z(N!ypjG|{rVb4YRh%_9Z;!}+-KhyG3_ZV$R$1F!k7N5%K$d-9VD-}20Iv6gLBAeOc ze1xYk&*C!=XM$6VXQ6J7E3R|ou<-Q4!bA>cSjkbR51QY3i}6l-!h>arJKId>FOS6} z&F{v`j%?Ll2+#+bsw!m}-og=8xm`5&;|Wo$6J@L;;Cj=Ge`PMk4&YwB#jN*y&$B?x z_Ab`heN5tpl{5aiNTouneCEXnB+i5(1I%yv7b@reA7#F6$Ou@F^5W06Q|=8gj#m4I zt{si_ySfPK5Wq6REWc0D<QXV5HrpVJav$T_f~$;yuVa66{$hyBsa zmrgSK!*N2wN{a20BVQQ4#Z&D*O2%@QoQ!RzF0)(CMM{Augq5S>tlhDm`)j?UcA{bwq}BwJC&?KI@?BARSor^0X_0uS%ZsC}~MNQ+0% z%=OAIc{LE3yGkN50+V`XAdK&S8T3B60(F6%*4xN~e0r(rlk9yyUi|K5n1|2qnQd+S zB*oyAZ93?+ZZC*+C2?>Nu3vf<o3+SImC1gG*rC?JyXYm~n zDU8RfSbt=U#;tr2D*jUszjd=DiR$n)7XRL6vt>-=tmn^o4`Z_071esy6U}WqP2VBy zrtf+y3{-wgPiDMJ``%64E=qdO1SL%9H0pI>gjY-yoGfLI(cl()67VVlCUgC6;lz- z;0!Yvp>E0dn8`pRt$(kdw~N1--0%bq)Cgt-83Q_~61_3B6NuJt#iblM(U{#Bl3O&^ zyh_c-vGz#RM`=n)f0l^UsPTU*Hab_~oZX<-(jyW)Gd^m@bM_TsN=Z6gYV%bTx3*Ix z{Dy;38LXeq|0C^lur-7u{TK8Kz@klUM2#6G?%S~tW zL(>f4N;<3P+w-Vw<3&-oE|uQr9aU(lMjvk1y17tP-DtB?VoD{dh6*dX8{PU-E_O}& z;T&O@#~oO~MVYMlrM}+cGDT-IQ)cY?MAVe>`IulU)%-G@L0(a1VoLtx`Yc{+%|hb_ zwTpsu65x)zZ(GqKWbDR}o1n=%GNIYgQjDr5u=Zf&H^hk02dL8;l$kclds1jHBo5%l zbKfe7+fu4PKb>kMzT^cC-&%lxgz%ZyOQ?X zU1G^Rc~~gQ#Zu%943T%w?xC3T1cB~Z6>(iDy9)A80jNeAP&)5LQY>8TNkF?Um@lV}_xke_Mr2AE8%RA_zY z-6z=g>c^WqC~kJ>VCU6zrP}yGRJpPn`0z*>-@L9hyMv)|YmtOeOX{%Qwy2gvqh2{G zo6?7oFpl)-^)P2?-m0CLnHmhk3%95y;*=^ltO0B5ASJV0>Rto=s#u&?j`%#1Z-#B++SJMTWdeKUvF))ZrcQEgx6$$e!dC=t()*i5cuRTK zELsxicG~5lw1W{pf(FO~W8vFf64_jeTTT%v2aMw*<7+}2?Vi981HKMvIVwXmY!Xd6 zkz~-|m+;3*;Z_)1PchdF*U=;B%Q_vg$&$)nU$pHKCMPFpu}`Ku_V&pHH+U50Er*}p z3X-63k($6Q(a2Q6wWqx6|B+f7`J{(6I#iTETg~DJ4F?c?MBR&E^H&x6t`R!xsCHCd zW!Uw$j3r;f)~6}BoC};clZX(b=@@^S<7k~>*`DuS%-ETP^&FS#L4PnGH-Z{Fi8ou7 zA-B4dq^NEX91PWxB}O7m!ovb4Vx?43bG9+qv^w`o**??A27Jc?2zQ5@4GJNGQk&BY0)cBxy(6QK~o#mjH7e_4hwCo@JeBxT}9V9!qzA?!kml?<7XYo=zL(Q^YI8Fi|)r6UR@z@){|Su>6#TSVnGkTe>zfyR#&yNycq z0xLfd25_*)@bbz`M|#}yY$)US_>}Dn7*TEqcQuk$FS3uR-{ng(qZ=nYKsD{ory^9Q z(Ror!keg>T93vX7)0E!4_JGkFyNWj8Nmr#`7kN<7q}K8>Ovi=!*|{N#t(N83C+~Vy znrzL|5f#s;z2%DHI3FIqb6B;KC6-4ot0`VD3Iz1Nmp9E=jAClbyy`)EZ6)=@)?`(a z?&s{}dg=b1- zCdSKdR*VJdee3CoLZNbEfQsT1)z_6PeNI1aW_i@9SZq$}>QkwL!LT69`cC6BP5#>X zUEK?4GH3|r(l)?+>8!8RxKUoze14dQdaxbOXl z#+m{~dRuzG^+21Z1i3u3^|KTVdDty&8t-mIrmey@%;(vnf^UzIo=g+XRkobAuHx$O zr-kw~HqCBs+gf>gmPv-FzRc#1Iz>bgK2)>ex25$YaiiF>&C}*~3x38N!cOthAR9Gb z59xui?3X=)FK`rU?19KJ04&xxVN0miLf=YR3DCmm4^ZgYC7uiPwQ8**F(C7XBXH$$ z&1g6`%-pePPCy}g#sB@Qc9m*hPxVKjq;bq zx8Ki8bLJm$Dy)rUGf43c857e#M$FOuR)T}*?1tUzw2oD>_9cKQx`KI$PN6v3}aC>xf+(`&w^wtnMG2`-+s$&M+65Us^h z%S9}!RBb&nncb@sO@glvcY5oUB|T>(VEL^7hp1PuKry>Zp3dqnnm=X?aelxoY)p@_ zzofWhr>>V*Wb=*@+P8%5;f?$18m8f;Zi9$koy^-!ZOvnAci^$DHN+(q>=o54C?+bZ z*+i3AMs(Zku~P8Hp2>d|D}84pGVL#;&lZH_fNQSRYj9uTju_GRLw6GI zB_aLC_XIobveG_$$&s&M_;I&zC-UsnEyz2{#A0w(k%XhLZ!PlezGx^LRS8FH#O@5& z7FH^_xtJ&=$hWUO$y2lS{-WMviRIRkL`VMjN zTa&ZD(hS4E$K>_Xcsakh{v~8PtRFw$URxByT|Btjc{W`yOFo&IDtV8GQcX}XX|?2q zv#7iksC_x>x73(!iSW0vU~ym+bLCMahJ~}sNf@98Ne31S8OIti3Y2D2q&-t+`RDsxlg4uv76aS#JX+GONDc> z)5T}CCI>ztu1I3uyQ?K*6Bds<^9>47HQ2Mv$Jo3yZu8t_F@OH-pqI~1=W=+5Gs%k& z%Qu1nRl|u~?%A^*4_4n>&DJ-D-6hQhOxB_wRb<%d!;1HRjP>A%Yh5mk`T)z{E>|Kq z|31IGo#ANbqDG0wro2k7*Tmvod;g^!QpY)85;aW5`2IZB_l+lJz468siU2&z?V< zb}jztGrlFPvCB{E)KJ^~&ikX{InL|oFw)kz=2TBVemOY#cpF&((!1F~C5xE6`vqTx zy1or|f!KrAPpN5j$sIUxW;cz}vsNeO&fKlJ&Zzr&EZLi+v8hM} z6C;Z2j}{T<6vf6125O7+GM)~8vtcg~=56Bt5L`WDv>c0IO~$q#c{6Hz;1h<{>kE5Q z(Wjd8;i1gqEujs{Bate6Cs^O3h@yXlCb7&j>{YaP4b&IHw@e1o6QLO+*x5E_uWKM5 zBD^Cj4Px;~0dp@Je%n*irn;F)U{(@s$t@3LLi99>SW7Gz#qWafx?%OywW5N!5 zpJaFZY*>VtPZsIvb8mem>&;p@9z;BoPEj?tWa+WZ z^hNp5Es(;6mTA_vUmUAXdy5)yrM~e#TAt30W?w<_qQYE7ROeq#*bJ`5`kGow*@7`p z^(qU21lJ=|p>T{MH2l6EI=opTJ0to><8k+KR8$+Ark#cIcS4zmCFq>*2U!w>x2TK? zKXc{~J>F^SP3YpVcVPZZN6kaAMteM2^;??vA=3`cG8Bh~=Ps42F<$6~gFS;~>{oZdz7v7b5QSF$dBg$-5$XL+u z%>Q+5WL!+u*`3!O^Z< zCX&X^QIex+-m~@$_h1@uJ@hm}eJ8V9t9p5|vz{8%n5px;{3JpG&e~6`SrROyao|+; zMPMi!T4zw@q1PEwV^e69ikf>`eIb>~J{P6l+^3p6j(tS`%~bXwXoh z6SuH)(HiAV#NHfumitpeKrhUgkyC-@06Sgl5v!SsG_aijNohpmQ`iTq;E3ri3AndO z%_U_gXOhvX>R30-y&d~d6<#hB9Jrf2)p61)#*E1gyNB9zDjnkYJ>%;XcBAn})*fyu zflxY5k`M7RiUs$So44`{1fE-xQ3#*}#G^FBC8)kkUnd+@giEHcK?bLg?J*C~=rh>N z$-j(*#$kRH5KUGNL1;5RuQ8rYNIAX@r^;Yq_a&ZC!7TAZ72l^vM(Ilg?HrFZb8?!^ zbw28jt1hYcl>}R}=M;&fC##lZ)5+>_Jj4^`zhJQO&^`+|iw5ks9UDzj`g~+pUA6fE zZjy=u+uNlTx#H>0yS5fKPV17nYIB`aPiyU>ZogOQec~;t{o1tK>U53uU5)Wv3e$I8 zj!Gmk6J!FWGi8M@xws;k>?;xVTj2xI-_k<(qgo1luy%NFpgK|0-i>zI_i{>#0jrS7A%kEMts7MaK&rujx z3jat~Xa9u;p^-H!uX7Ud1q?&b^7qV&3K=SAt8V%_K?lM-xOa!$G`Ng$8tD=D-rSYI zZ%$jrU0lL&<9`@N(ErGmhbzZ^;fcvpYzFgA%GsGvR}J}Qmiev*6p?`mrV4DC;-RSn zI2#mHXTZ8rGj2x=);x|G)D5ElVNS}Q6p1XSWQ6L&Bfn9V-X?F=uY-Q?JAM+vHx$~T zFy@JdmqZN>d2`X6HKdY3 zdG{`-{W`_jtq7eL)2Os#k)zxA;|nJR(PggRCUmFLT8FZ~{CLpyJqGx))l;t@+#5HB zTSLy1c0*r2PDhG*J24Wk<)zWAS!#r#QTduA(b^=@OY$}fESj&4+EFvN-=)aPk7PR= z8b;D^f~YOD?C)gztkssIbl*0ef1)Nua))Hme-xGsw%U-uc01F}f;DAWOYw*v}nk>N@VEcHjdNrhWSUM}a2@kFb|HPxuqTW34XhKI}%TYfK@<|Y?C zHLPa2HC@`#?9hcDPuFoyteEl7D5seUQKF!mPlzm6tOUE@=uVPgp)AvMYjBDBEs(2G zY8q;W1c3p43q!2CF&=p*kBm4UZT$=C#`{^1Tq2?^>2LGYHLQ)?QAZ8QcpKopkW#iv zE*&&YEbK`B+(Pm34=tDB2jun?G5*3lAV^%*apVXpoFF*qJssJx~y_U*~COoEARyp{O=1<9sLhzsH_0*3s~yQ$|W&LAyRg(k$t>HVL)3U*1%k8$lBI+TOsXh*S$iQ3Uyaqqii9HUxa%Ct?eZ};{-<1{ z^o9ss+u=nTUglP3^gM4rVH@o}eo!5*(lRiM<)NGXl*qw(Tdm?&vSqIwT?wr|_I5Hw zU9#g$0#@FDKBbv$GqDi|f8Ha;avq$~0yG;{*>q>Yq|=v8vf+T;F?V%$P3umYwJ0MX zmzeW#whk$R-5P+W801NN-^3zVW7lRGsjndTDQ@0v;?`4}*kP8BwepxL=IUE-6x7MS zwb&5w#(u4lZHqLc_(FkptY%lOR;G}IDzVuR$%Da3>;PXxpyihq-Hf>(IdM;-A!1)1 zUyxzH!!wtWFj0@T^koS)42s0HcjcX@2$(L4Ykn5QZIt>Mia-_DA()SUQd%CsHkID|}ALE~Im$?+9}eO&9}H zs#vHleuOO+z2tx{fV_FBx%{(kmUb8iYQYI#kZHZ-nhOyuv5TA4Wfb8%797 zt@o2Eo-6SVCLcv?v>4?Vt*SYfkFf2!G~NeD>?$l~4X$xY>37+BWhY-g zKZb*7gW%Eh`l*llL4wE$KUv1@_^fz5yikj=9EGx-U3DJ_f1^ULy|lGS*p*C6prZbk zT!MJJxHPU+@T)vEigzdG#f0se7u|QWM;Mn?ukXeJ-yCDalaagDweRpYT9`vMGB`Gz zzb=)PX_k_H6}}tMZ?3fD_EVjpj9c+#YOL!E)Xyvm4?b~>si;3;o1gSmE!54Wp;6aF zmgl=W9XmIna*Ip8lGe%EE^S+*+C|8X!k(@RC0~Pq!G>Is$~wcyVTJCbhf%fM=UIhq z9$=z615QMl ziH~8n*AZKzxNawp)kvxDX)VbBewu30e8=*V2qCf&e-d@{lE|ZAjvbRnxBj-HIY~$b zK88*-jV7uGACVK&+`ht+MC1I9ikj%T-%tSwWS{gN%)4DC(vM_#gLmYG9~wPz=r>x7 zhbw4LnVi5+#_1-@^&<=LuWRx;s`Y9b5^!XjoF{ge!Ha9iVE^)f43XeX#-5x>6tLn# ze)1$81v5r!NXuwEGLO=x&sV^6AZGSD$-3p6`#U zejgBJyiT^L=0c z@@yZ)mT5jn5081q_na%}=qyi^x^Glw#2k(5g*Y}nzxFfNfnDtjRTX!*iH9Crs{Rk` zo_Y$*D$&h)lB)zt{VazS%i{?fmI22eb#bj0eZ?^cGwuFTE+#HUbh>mR50jC|lr`xw(7-52R zWS#1nMLQybTB8HBh{Gww1#l@x3ve&_60!^CEMK6i2aO3gHrV0YY!-d3wvvDS@V;}O`=YA!Zox9%<@fhT z<1kXp`|$E1xnY!|soW!xFsfYPlFPy{9X#S?B#j;CZ`M*z5D`NOfAqZ%wk$12zSnD- zP4%(Bt>=$rAR?{HClniQL2Pr1q}$%XdsYAEn_E$~Ql zbAb;{EWs-3>`uguA(;m$#4O-vMYH*v29Z*+y3W#12KBtZ3qDP;zH=jw+jGEbYJ^zD zl7#1uEu0PJ3ekqME^?M@ew345tyW#wyr&< zduYPFi>_Rh7@N4@>UV8!(QaI~A{pCW9i@SU*WlP13XXx0)_&EF@66{HH+&cL7s76pRRGBDI3yoRqOg0)r6tC zqAI8)DA7?xJrb*5eYSlVdCTV&QYeUN9U*y;o*+&|C?8d+2v<)Uw;3g+M=^?P0Smu)wpH-Z|HIV8G;;!sXc(y8 z1lcM)(hI20hAIVW-;h36IF2QD?;clnZ97ssrSwO*Jnvcmrf<3oW6|x!zpQI%nbfek z%7k_QB2JIK?fgvv;Jvxat(6RyWjNRQce4v}>6za~xouS<8`bUtzI76BsI4#&3SI1a z(k)*LA7S`hp07{xv`h*S`CPUg!M_?xf%)!xs%sfWtrZpsOyHO<-B`p>yeNpf@c=dE zRAQ+x(TeS(LJ+x7S5N5*eF7T7#7@#!v8KpPboFe88kUC6OdV zUJp>l0GEL;LleGve^etb(J-^z(>)3(s8dGwz0@_rB9Ans!ktk;2Hr#9Eg&BgISNTV z9BS>+zK`HJAMF7vpUJy+?^7IFi=`if*Zdc8VKMN- zGwxDoptM9T-SOPsae7DEC3g0e*0ko*cKW1meC^Qkq37ju`Ls5p!eCbn%t{9a_6X8Z zVZ4-S*l?jx5`>6QwX!%E+HBs<)Q&n6o>O?ZKyijM82!tG?mV(frtB46-qzEn!<}t7 zdA%b2&U7{WCK_F2{&QV+qr8N5cY*JO%m^-4D9@STz9#q7<1(A0b*s%Ad2rv41F4#J zd|viu>U%T!UGi82qirL>hO*(()*&Elh~r)exOocvSPED_bx_CbelH5V4M=bOigt&U zH}vrq#xF7@%NC1_zt%j8I6_AZL&1#BFdX{wFiVeTZ2#xtfnXEe4YUaNgfxPPmy?gr zHV5Qc<@VD&3%yogf9wk7)S#+A0ACuNc-Z6ik@gzH#fznLdX_tiye=bC4&m`EiNrKi zgcO=vnGYYmy7YgA6MRTE?Z1lLQPf;*Tu5m_x{KxC)zzU;gcjj?@1djn(PiTaV<;{~ zKmDzQnUVlehj&CfXavTj_KbUS&(q>gUWI%0M<=}T7_K@$u={9Brt@W7nIM_FzIw8> zoaU}DyR1j`TxFZ!!Fwe=-J#Cx$|_1fM+c*6$IG-hS8eyrEuO;%-o{4_FVEbBILAax z66UL3++loxLg+bB%>!{h;&bmHaL!^7a!&G0Y(CzgHtKHK@wI%7_T|u-gipJQ*RjiA za$$~4ppnmU@ABK@JscA$XD4ZiK&jkFn9)Q>JtQnP(`+u4(cLd46)eYSiSa=$J2vf0 zk6!GH)MzffMw#MzxHq%wbLxAS!))f^hQFhS!1L5vOe#(6>(HCBet9CVhRC*$fmR5RSotW7%r=52X(tT*61&`*0 zJ1I9x9&ovK32$@=Yd=7r*^`nDFV-3n0xgZ}GXF-uTAEblYrHy=oqm{rL}hEw&99-- z+8Vwqh0~%gmu(&ME(ht%InAZ3${nV5y4zkEVS2AF_SV~34I95yvY&olz?u2@fb$}$ zms=V6c>H0Ysc^NSW$%Jl2bBY{YE6HQhx?jGczzc<*^GWu$3HXHQ??BCg_piojA)ysZCnI|#ci+i%I&JOT$4&dSO&a*!A+w7p~8HP{-o^EFFTHHwY3;EoXo3=T%=cyfE=k%T+ zEH-?prj657PuU8K*?F1Iu9uk0=#ZiKPpa*ORtZc8e{1W+z~ zv_U2eFCYR}wz|Glyz;e>mAT`G$=9^R;@;Gz{A`i$2fXU!@|_7h|LCX;2S1n@0zfqV zNeCqwSFD-gvI$viBf25~+6$D5%jtJ8 zj6T}EOnNOLHY8#+lGk_Px)e&#c051bu{gV5hKSuBCSv#fh0Fd_NAPAeKzl2CoWEyh z-^z}^%1`kzqtW+iGxwG<7YW(EoJ#rn=8;VwcPBDGJd^wRdfTXUbUbLLMjO|( zr5!%yC-X6x>cNA13=>hq+1I}crT~+v&yL*Rtm#P0Q3Xz@|jzxC%ZGsaR z_}vwG@u%eo+(K29=MUAwNjzjpA7)B58n~f8^n%IZAz{;hPK*>pVYFKX=4q&H6yXbN_ zqYPVh1W%VHZrax0>NsI;6vxQldy$HKv4v@C{shn(KlOvB1Yh{i4t@7n>?)?i#E02{ zUpRa*Fl-R52za5eG31qPtGj18B<+?7YnXxS?^vHsDs&XPPYxBCTZ3CGv5CJ64v}=| zqH@`7e+;V{oy#%NG~ePW(KbAnysV?F-7CQ@%;bv&j0(9e?k6#cKZL* zlQ*=Qnwq6n`l?0??qb1+-Oj={Wd7^T4yGO+d@p8JRwqLFMC@4=K|;}j zPX|RsMW6E}BMAj~&oi!i5ST7DRvN6eOvnyZH-~|nS=!Wy2ZqHGSzG$q!mqAW2nYx) z7b?9T_ma2nGhNm-Uh1STZ^(#1(fn6~){SdP>V>5E_Rv9{m~^jQkSP3ji-s45;~6~I zdY*PmF4KP^@y?q;SqxeYCh<7Q{T?hzot?4va%+bE>09}DBF@3n$ z>Yvmmz5>~M*mZmn`7BzsisAwLp@n^srz8b&IuNtcU~t{@dhCbS+39U?wjim(|p6Qq@(d-}pKnu$@4$7+{E>HCw1?NSma z>5}(i#QYTz@Hnlg8(4jA%k(aZi1~`u$GWAVRbc#sH%5{eT2E?6+)WQ*Cm1@Bd{sP4 z@Iy2{wA*VSH_tN1q=5r7y$7YnZ)~&L6nhSz<#{zEfGn%OdpJ{ky`d!dNbXFHtOKOc zNkm3PArm*PwYpsE^+6w&7OB5+j-giWgr}j?m@B9Dg>A}*p99Hb&qJvq^&_YrgkU> z$PH&NFM)c*a(p&TW?8lY0gt=3$Nlu$T~7g)v5pZYmCi5IEx#KYt`>&s-IAGfXb|S-~pya904ju5;UG! zW(memsS&*-jlXw1Um;hc^QXpYiB)mZJSp|l-v#mx4#|~yyoVatIG;(j3E2wdjf7R- z`&YSd^#o-lY1EmFwYgnSzmM_~;AzZw2GESWd6ww;ZBe`C|D$23vW?JrF1 zY{sT95{G$w>8;Lc+773yy>6%9pBKZDiu2~(`N@Vpab=F{ZMELUGtiG*UaT+iCpl?B z$3^F|anu(aGL9C0%QcptWu_xtz{6R^7}In2(JL0%EG1xL?v%Ri?i`I4**p#=)1vOy z2Y08ySJByPwbl!Ik{_Ia&yZ~pflbTvW;HcL(6!mK{0f8}OXrGy&*F1olypCi?>M$w z;nee`sKX?$qchm~6RF(_|J`uT!vQnbg?Gj-OSp0 zY)`~x!;6au)nR{>rZ15G971PIwdwf{fVA1wUJ~dP+A|2Y7wRx=lp=plZb(^{Ekp*S=qDLMq(hf z3PbTC?Ms4cTJrAFQB!S_o+u`^egF*-32qa}8Zm%z*nmui=cPp<37sMj1#2m^r{w);n1@=g-z;Rm8Xtmaom@d<8 z&oSmZB9OF1X487g`DXa`@_4*Zb$-UWCan+rmcsM`me!7AfF4=8m4aZo>|=)YpjJSuqf#De@~Q0*lO3yZ3?+0*A}Q2B4ou(-Z_Wl z4DT(*n1n|iKI;qbJ;67yrpESmFH2Teqq14!BAO-!^=jYuV0bVDkFy{u(V=8rcN(=e zUn`Yq_@QjZoeUZ8@>xmy zIRYm#Fe-^$SFG_Lw`I&@TSnRSV80D?O##ql=S~a^CrJC1A%9mI4TU?8=uW4~T;F6Y ztsi8*p1w-@TW(~Jw)S~>_*FFQM%1`Ig8Jmr}~u~B|}!O) zV}KN6;tuXIYFZEi5i6tN5@J@l2(BT8+To3ZugzKumLyp8Zy}3W>W4sgc9DR>Zw?L) zPEJmQ&@rBgALxEJZg{76B76D~D->T#QiRh3Gtkw$=x{H35M&rF(12QN5sSE{YxYO9 z-e3wj>rG;^`enivhX=r+)PxD^l(~eOh?Ke~qQGY;9r}|t$3vAjkDkB}g(3_$< ze<7^B_{koU)dFn&q4axG-9Lc89ejSu=FC;@?U3&=LB%V!eaz(g?2BPx%O4y&tFt{E zGO4N3qqZ;8X84kLpJv**LqPjc7kSV%*s}-b&#m(0)H8xj98DkLO|ckA42UUw(J%tZF`U>2lA+_Ch>h z^5}WG*r<7LuRCTd_Sa6eG$w58g!;r_AQS5z3yh-(C?HdB9ZY+N_o~jeF6yq<$IjI< z=Meuekqet%#Gam{;cST1mN914U}{rS_~th);{HPA`FhuT>Umq_1}nNFE@{VE7u{j#Rag7sB72Z2} z997Y&E`GNAE&LK>s_$fubT8BiT>BuU_M+Gb1O8B?OZ0R{kTpS^>~Rf|v+!_!zQA!l ziHwWp=(nqldKwx3r$7&bc=%ytf=UMxO-tdV)5Jvo2;0b7fRp5h$lOK)#roo7BwfLe z;jzP(4v&Cs%GL$ffydQ$NNt!`91r~tQ#CTQ$!08}H;JNK(CFfAswxK4Jc@ggLWY4s zW`a7M`%!cEA=@iR@hU0l#0xT+c|Ex8*QQRV6cA8mB&M&~n{&D{yzpA5z=8;hJ^Qe1 z7zCptv%CH-qix@_dB)o`QD;A~x84Q@f73=^4+&>{s00)C$#kQHXhLo+$Ii33BXK{O zNUKhBT1w^jhf%jnP*#%lfzW&20UDKbR&5gUan{WwMrf+L9u#BC7pjukIFp5+maHm# zMw;(d^AzW8Yqy#2aXYKep=t|3oi&Uwd0hn8+B3qnn#Py@aQ^9mOCy#O{1p#-*E27s z*`P=MX)XpZ%|n~b9=n)Qct_j2fc?Sz_6gY)GkQBOq$~aT9?aEatPNk~D^m$bYwAYN z$I;z1XgzO1yS)O%9|MqC0$=4YefOUZ%r$0(RMiun5)oPr zO*5l%uLP2U0S3$Qyj%0$oRl0+_JXD-T#0Dx;+C@Vtp!WY8W%rw!gGh?oN+b7(qGN1 zUHINaW^y3&fWrTDMTJ@*p0OP* z&PjVY9vcdiYKB)C4uNwUYYE7o^&W~PIuGo(v~bO+L>Qj5(f@iC?7 zeu!N1#3u|8o4|Z{LPViwX^Y30h0bwe$9^(_U_zu-;@8)iK+|#QoAOH~?tz)~lE|g9 zw+5u5kNVEPvi2GRY|f-7q5VzC1_9$UPHba#6JrR^7ESnZ4MY2r^>yTeJ7`^$VMchg z^Z5QMdtG+kWZzVAYzhli(6z&U0j=Y$_9V0_#59vfWB~z^%gI_7#MCpMh7FbeAQQwx`Nm5%J#ax*y$vI- zg^t-}m6(Xvh0$5LD1mGCw#*LAVKa|O(%0C5=8wA3g7jlM{92w_OI#68#dJYNf>p)q zA;1}PA8s@?RcQ-V<2BYYN99SV%MkKL5T)jVW zlDp_cCON&%9Bo649s{~Jf3ml2hbQj@3bJA&sJGjXbqMyHkrzE|VY0#UG&Es@Nq8b+ zWNNFoBjZZZvhkS=c&rt46}}`G<2%REvs)^;R~;n_$D=rpkNnA>+ZG8&eQ%1r!Nv78 zD8JBm^z7k4^nc@jXtHY5KFa=Ph>R0R#E0&9D6#=3n?2)D|21a-e}(FvGPz=P_}lmN zVXUx0lb_t2t_$Zgxy1*1YDXs~xCE9n0Rw|1L#Ee<5x0_)U+HkIQA!tV*9|)!zFZOV z-)g^8=-oU(?W@0MXE=3%$DMHa(CYt~CXJprHKcWTfA4WNd{W2bq9T4x>xh*&beCf_cM;t=AcwGa4~01n zsTXrr*R>0L3CQWbNOXHQ){HzL$w7M3>*qmy*)4_Xv@#+&aNX2XO?*o_%yhDXeKS`W zq5d=HM0OYpZaEZPs=QE=-)XRE4*oePvonmGz}PX|72BMb6sF_0SNyZU%&AE8pSTti z8^I|MAMDwtDjDIvmSq7LLbd|LZH?bo{$*a!Uv8QIGTj)Ohz4c9F7Cl zeC)S~Jmp%fd=H>{5-bmj5zn$l+6726N5AHtkDu0LU}go@;=ey)?m|g zzP9t;oO`anY*MY_&c$ta^1&|7`&=tI@{qA!ml?fPB~ia&QL&Y;M0Z-rrRVN;6UAzNvgeeF{8hh_Ek6 z)+|btk2OL4Mf(zoa6|UgzeThWD~hyzxeWUC)_5;>i3!1^^0@GRtO$O3$lcC**ogB5 zai7ra8vi(ZJB*a{ranxM=D{-W;wBW?B~s$plb2Juh3s=SL(2RDqB@^pR?dz zH;c``zG*K&#jM>C*X-;T9{NGlTUHuP2_r zzqeCH5Ui1mUdH?l{E95JCCqMQQ$IXsx_Kl0(&Bj5!7br;Dd=8!OJfE3YE?~HaWAb= zIE!{Qjq4%Nd~FI<{)4bl*r^G_Pb+MTiKPO5=y>+}uxVSP4uN0c=$BmXgK8yE6X zw~d1?-H`KxQ%C0qeSfkm77hApn31TEnRy5|X(j`VO(eo;qu!zl%5+Ac_ixpjQQ&~n zQ9C?7@>%;#!gUCF`LrL@1h2kuQEIGOWu|zG^B$&IBA!`Q88j&O>LxirST#hN56FF5 zVTl6s~94rWaQV z?ODh;yLk69?BgQ;koJG27XLT)|KR7;^t6gGBp$Y*_fH0Pxr5{5z5gU{*p zbOVj>k$kV|`!6GvlfNui3a=Awt%HUPAn{?*?+r%s(uK`wn5Fyq&jai2>F;J17CkkA zz{JHW9a#F5lS5D(SWQk(UoBf!b!(4R&;vJ4EAe0UUG5B^;Ifk6>M*rk^fXwn0Qdb# zMH70h+6`oSKOG+ON2ObL?`-NmU}SMvEmjxY+p|$VxEAAyOeO^1D)dnb{3w8=OsXwiy;X8Wy>d$ z^}IEN=~`8a%PAm2<611!z9uY zN70rdGccX5e`-C1``qLc9Xh*S$+~WHENI6k6bV48bXx8WCl;E~sRTnIsWP5p;Vc;r zL21u>~p-GQwxCm(Aj9afn3;qk;ZAg z{CdBU?Pvt7g`GcmwotfGHW`9m?y9OYl{&3WYl45NZ<aqq-*IJW_vf0h!Kw(#Q%3oi(6Nu#k zTJ=Yr)Z%}B5*I}FCT}M;uhCGWJpL%xY1--$TM)w(w}{r3&R@7UjUd43q#|6`)wRRr zPMF+JJ*`J_`DH%wq%uq;d(0M6)Kb`wro+bjC>YP?BEz4ojU%T-fC0sYA}Tyi7}o~9 zhZMPJL);EBs+Sx^C})9>m-j{$i1rj@R0_}vspsg}^<%B!9t9M1`HTW|`?a_${^+h} z>~9Cqc%KKAdv$JI*t(mg=s22TmS{`F#91D)`^V(!JZ`ggtE+|LUItIe zsRYU&^v=5+OYdLnCIm-(y6&?-`(4fai;TBN1N(=JxAR2AVJ0s5jvaOHJz}K!cbZXs z55JXu!bntm^twE$_I`D*G=Q{k26)gb?(kZ%X&K}WxD*Wp0eknpG!9D@l!~Evs%scG zU~OUGdIE95J#h^)ScN9}F(0FX3dpcvrQ5YrG>6~x3!_P?s@l#BNoc~paVjZMM;5l* zUvO8c4sX4Xaj5>Xj-5b2=@^&Ri#0ra2|>*U$C0ZZ2(To5;S4GKFzOFPAS){>1m0h+ zRaY!YM6eNDnR>V;=jSPPQqY-VEVpjtl2(uz7#L(E&>y*NE>%qw(j+2`1A)*hyJ4~2 zb$5rR=S^tqc}KeHMFx)py2Pd+u7q-YU%(Tm4w0gX05U`6FY-IxJnxsh2*&M^gh$SY zv+o<9yhuf;V1M2gXSp9S`8>*<2afnppg;x?$9)IPgEn~vtFf%bVxD z84`wrRy@t=7{yXXRXPDzKZ>;WLL!Metxj(*7tvu2)69OKa;-+jOL|YvwJ;MEb7}&v zI13&3tDd_$3;0Vv}dO+>ao=yEpVs) z1{qw%7Y9(kqJ#-mZa8 z{cit;h6esW%)@`pmF>hV{$DIra0^aOIX{A(Gh?uO@n?5pd!RY>dil4dac8kBv=?kE zYCg3Sh3YDtd~yo=H{RP@(QWHrkE_iNZkEEoMW(l7qm2+LE4lq~7aa0`MkX)1Uwi-v zXoQD6bU`_D^3Pbrl_~pE`uBpV#3qf6ORw*(HT+$jqrTue#m2zR|cJfc=rJ zibS*-?6+hr1K0k51@<=FYR`H6aRi&+LtHsKkxp$`Im4aF0igj1nC%`{>d{H}~`2ebO@C%Zj=l?=YJmC{@`|U}cx!t;%U6ym?DuF_c{fwOak7 ze32#iS0#o2E|U50fchW3%>N>i`JbPprme59|FYCoB<#=l^#aafEi;iP^&#>9g_RW$ zE^z#0l(5*NKB3GNHU4lzsnf;bpDbWy83TY_(h~LC$0V|9@tr%0plsqRaD7l8GYH*1 z#i1$A6d>Fdh9Ox|9bA0xc%Dz{R11{GApSz-NS^=Dn+PHPeHruC9!sOxd9<)uMlG6G zOwKiAN86WCbZESkD5%azMH)1Gs$6T=4E~?WC ztwvdYMk*x9r^$Gpq2C~2n46UwfC$`9w9p%%Vi+2!17t8%@%!xT?3>)9=lXz5#rf## z=g%U@Fo1T5v<@X}q#+|;tz12p$v=zRj2akIkwH;D`LmNHeo9q0PF6yLkh9>}hozK^iP%5gbgf9CqFycST zVUYfs8)52{5A?@7(`j{Pz;6Zu>FAM2Vpk%>^6~8Qz=1G40$B zpMswOvmxNIXE|T~HD%+Uk_Z=# z>^K@R;uVn$*NuI-GpU1}Gt5UoXv13WCUO87w|$;?pd7zZ3{uzU)rmRW1YgR)hC^a? zK2eVm3;Q9um4Tp;us_aFtoUdw;s-?9M?Lshi0WHTVjNxyH=N3o@Qe%TPG)MYP!42jqxMH zw$rz7VQm>{j_LSVw z8#2O2dg(8M`?}UBu8>i9T;nrsG8KYXZ#Vb|^2G?O1pI5}%$wW`B*KYT#+vcT&Vzf$ z)Km!-Sg_?44_8P@`hP_rX!Ae1e8FWpVY#!$+hv6GA7%cYbYZ3bYPuX-h?Bc_{4$uXZ8YQM_>3<70artM zvd|CU3VLovd?qsa8naIxd$b%xe)EYzSGw&E5A=Nf>(4t_fsp~&Ab}`@-|g!6f^K?( z3;bv6j;VUUp6rdh3weOBKg~@AUwRU4D15EPrc_{DCbt$d|0VrPAyHhq!de9W)vzXb zQQ6G6m4SK@RayiM8d?V8jP*Mm*v|Q{$1_rw{FTp@%rS{9Aj+CGPSt)3-U-!*Nq}pI)`yLQD=D$&d$gK*q5x{ zyeSYm5`c(q*-0l>Xf00jLMmw~S9c!-;t-NJjKnlM7M>)p`vSKo>yVE7DT^WmJ;&wb z^fb}+qi8d*aI@Wd;p!rbH=A)JWP~D>HAR~NvDw72wfJt3i4wyvWn>hT_lKS6tM5gj z?KLU;MG*=)OnM#k-Jf6)y}S*-Z5N-{|U-#>W*)5?-J0iFoY$EdS6f zTZx5c`@B5@)?;|&SMBWX!+0iNd(=!s+hloZ&^2hn(j}Tm zM;OE-IoUni;q@$gcayQatXUR}T-AP;24%DPeBOD#?2P8tU_1sR+$g}#PHu;vcUW3V zdmljR(<1P@y1F{&=wv;9TisrDa@~xuO&1??POe8R1UU?w)F|Rk|G{6_WqZ;2fHd$b zUP&<4GH{v|yd`BRm@TIlC>x&mPFfUoe)w@7;z`0B8<2TM6eZ5PlR@(ey#PMxHasBA z`FyI#NdK)|-EXTvTS-YtE3pwMIcCI4v+#U>J|Wkj=eh;G1Z}F=Bl+ftV7WD4p=F83L4 z^2)kS)q35Z>Da}oXWKY1aB~Bih$gtk+S=)2=)FRGM!k+U4(OkG!dg&A>UYlp03mV> z40Wn}NHgKxs2~35K)Z)eF6jAGq;^BY zLm^4&=&+(HvvBYRM@mbbr75E6bw35jCg0;T)7qbpVfSCeT>zeLOMH`%#BxV@_%Is;p+EAv&KT8?nefqRZdhdcA1v&9YC82r! zQ5Xt^NRVDGx{$iBp7neq86m}gD^%=2hsHst1j-6qG6T#zMDwvbm=QpsfxuLpsKY>YbVq|1y zj@gOPL-S4ylJeWB>X<#A8Z=|vgp9=0DDv~44)UW5UMSRuI2D@J z)L3{aQLvlwm5VK)^PclG;9s+Wg_E4feC1KZTKo;DnSnsrq?zuG1H~Bukgu4@do!anaFZ}KHRb0Au3fIzDHy1^ z*6ctv(3YzL*cX?>X$oyEb(-o+V7Vq9mz2;X%+(kUY?nnzRC>X)51oV(d0v1sa@wq_ z%TEkvGIcy`174+_5cGDa4;}4a4R~#fou{WZd|gS&;bg8@^Os@3j+a+p-U!FF=aqYn zJTl$JCb*tc(@w6hXPveKw%6Wns|UJ3wH&yzZ7431W-?^T02m5-Leue#*a##%P9qOn zL&JP+;pX9yk%-@+z-G8F`U}_yf*}+JNo%UBnYp<`BLI*$u+oe{r6?Q?sLb{po}X@y zS?-j`(FFtqg080NLv{KHxnUJ#lL3}#YLxNiFCRF~=x5S!2k!Cxe%$Z^p^P^9U?Uo0W#KS2f&PKv7;^ zSlB;aP)p!W*3{~Dy+1mNh+b7zW@%-0^GTd6-Uo0q0c0M7@!|rIBT53dvj9N^QTeOC zj!~zDym6!*r@1vds7gUeDLOLp@Ttw03#RH77>p>HUmDfk;B8o z#EsF>(Q;wd>upQrwLsO*e5vSRALGOHJVD>QE(bfi=eyG~wJP@t4fbo8nSulelZjC( z73pK?Zfg`XwX+KDK)T?{*UkNbqjn0C$zMGk9fG*FmD55F7yR_V(n%8z3@9 zg-#GylqIg{p>iFlb3R%0GtFfoNB?lG@o@2Qxnn*6)x4Tg;{~|!X_Nr@D=8%fP?rS) zjg5_DS3S3SKCeMgg-uV-&+Y7=KBp(3A1%T12$-Pp<(^bEca{UKkH}KdT{KqpLXvhZY&S-^VUbOzds#sz^67 zGO}gx^z4y)Gy@rMAYQ~{eLyubj>;*ky^l;q0g7t#1D15kwaJ?yjkrHh0PW@`B`mO7 zAV;S;rsD77(JmDfJ=ejfcb9={S9V!DIpGA5v^;xYMw}lH2kh>Gc!T+DS#3Xx;Yy9?qyl0#?TLvOHpBz1DlehGpHf9P+^`m9Qzlk-mn zGZaH`6Bd=9FH>!)oUOmO?Wda7yCe<~XUez&4l*-m;EdsFh*I28!Ix-u&H?$n-!egx z9uEL1>XvyzkzcpcXge`6vC(ALYd^s@5VthWX2!(9#T7z5@e0lHzTWO}1{$9AYi?l_ zRTgQ6GDao-4M=EdHCJ9`o^@>iFE^KNVc_p?^xRj?VaxwcW%vkWuw>Gy*O^4Z<<&EK zf_IlV7oUBO%aoBoUUf7wBA=HYFi{>~B6Q{C^&Dg{5%lOh|m z3h{JsY8$EjT=j%^B>r+@q>(;O9-4j>_Zt{G>D)7|IW@OCDl8J95+4u*Ot_<;q2ZI-7aL3ejIz!ijH0-L+Y+6pjiWQmE1yz?`ZTkCL}i?k*r zv6za$CjMrZU1@7+V-q#RSdsH%aJmMlPP^grPCyt$jP{n~T*rEO+6)6o2U7HfU&{kXa)_vN_QZf6eZHxV7tMXE&M#n)thS_9gSLv({jha-dPXT zGOEtEy0Bn6P7c@dLjfE5SguV}hE|K2d7(R>HX>s}*`%$3k=rq|7s&GIz1`N}utn@O zc4zNNZnUZQS2q6DWF?>%um=PON1hZ50#bOTRtzaJ=z`0<5XP8z{B&ELD_WX(;&Y

@^bZK&YHd@^4q$B{oa=58F-L82X+0koXoCiCS#Gj#}+L2 z<^8pa@kPz8RqUPPtR6RhTdFNfZ7M0Vgy`#m&Z1$lV}q`9Z?Y{;{%-9%f|fY5sn&jAHFg z^8L{76`*{sKS+%2S>i^M){@gW=*2JalDl35sXt>xPC@Er>CP@L=_vimn%M8%1jbT7 z%}`03T3UFQwwplUk7>nsEcpA5&dwHsKyhV#=wLL~FeX#JL6Q&V{RoggeJRx0y)??7 zYHt?l+3%^z2bHu)>}c2-gdg#-MHIi;EkYM?&ed<`2>+-m*8vQ9oEP2FGGU^QU>z@s zHjCqF2xm3~0WPhxdA=qRls~?Nk&Md0-EE*40R*3o)OCQTu?qFWIdbh4^Vz}77u~94eR{PtH4E&u01Ne@Cg|?Y8R~ls;;RgrC_Ka)B?*l^szI~Qa`<0#{wP%}&cN>(fa+83 zD)Vp-(D{I?QI3et<8r>9==BI}djKrcqoT(E+J=+d5W-;(&hnIith6)>OUryER8jgZ z03C3iOzmO9k_4*5tJ(dBSMZO2@c*}Ku=wX48V78GFRTB5DD%wy9|fH`S=iYBv&u93 zzl%KoSMB7#&#A!wPnDQ~3eEpjP?_a;t-I^^$Ky*B~yWT+NPn;c`C-ijwq&7kbu3OwS-<0E*+T~mC4CqE{$l0OQYr$&5PuIP{HWP{{0UG{KTsVts6K#A8J$La+ zQpZ!UGk4;XRIH__1k%Pxy=0Ag|135~dPdU{KAW8~3tiBw?Zg3u7jd9;I-c*G{^r*& zkdTpnZke+@OxKfS9|;%nGHP%f(O^NMA~M{IzP;TNu>~AV5rq5HDG6U4f8gUUeE!9I z)m)m7HWxdgMi5yRwW{TG6L{n~`UiR@KC7R*i5NL?-B>`b_3O-OW7%sKCmtg4COg0J z9?v0cM39p0{tJ@45G8D*12>1FXKQdw*HxWQ+eSkfftSOb=bR1~>V>+y^GXY$Jy5s9`v+EWZ69@3otk-%Q=hnMRp7xhkB|%e}VTo=frSHQ(H%-f< zjnQ&)9eVo2@3L)$yh+xHrpGK$AQ`jv4;^_FTejGFx=cD?F?fo5xP@VyFI~+(&KO^h zUOt;RP$-;LCz`ljXDg{azvqgbQ0S}OF{)R7Bcu^EO5!5I#EE1GFog=Gl}%qWVub9* zF*t&~S)&~qMxVDN9V$g+#Vfli*vEpxh@~{96z1bl;>K{2k;qCw#73|MheMhFnm9$T z5Ke2#vqfWMuWQ0F#;X3|3q>)0!GylVAln7>Ba&lZL>fyAOsYg&Z#?waW%s9qu_IPA z2^cpa*c)i+1a&=3W6Bc9c>fRIX7XfRhazNUdwl(KjFF@FyKsjQ4hg0i z=|zspp(6aH5MqkT^$U&sEWy6{wvHDj$^9{)7#OCfaexuUq#t5K42^kZ%Sukup-=&j zpsJ=sAhU#p@Ob zOCu!xXP6gKD`=CB7WqodV$%sc+8&jJ;o>tY2VD^LudMUNaVU1U#rDF5YF|6Klpxmn zpt^cA)k>%+HbGe*8?|$xiiAg5BBw0qPf+73o>%s6MH#qBmLQ{2s%&jt{L5YTy)3Fu zKYpjVJPd$Wn+cf;!uqz;=kvTZWH?A(#h4}J{&)i70&Q%9q=bfIE*C(_Q~0d3CpY+2 zGpI5GNMCAxs8T{tV3zq<-HjRC-`!1JpW1Ak+=rY6cf^Aq*fiR<-mXRIif9_$TxBqi z26EjfJ@D|gu1sUcFl&vzK}Z(4OB=xXWQ9!H6X5)6~wvu+(Z z;g&sC>cNm0yJ_mkf1d;Ed5h!+C*w2QT7i)YWcZpHD})t4=ttxbAz?<2OC^VK&7z)tG^4 zc;_ADylDf++A!k}sltxGl0``e-0rNWt|A~w^pk1Cy~Y~9t3k?q6+x%JqOTSNE5bda zM1w=z%@`7(VH$3O^Oc3zvQu==Q1eS=%*ce<#p$KTfb$P$d)7bvBH4=tqabf+$)GY1 zNi%gyxO{*s4DF5;V9=)!0!cX2QT!vqb*Hc9=O;9k;=V{W%nIwFVm}RsxbChWot%;) zKV#KHQ$Kk7@66IT=PQ?iaUdeJfp9DTu$1ro#QH4##B*C7|21)T|9WBU^pkz>+3T9k zZ@o1qYblhqxVPZ+qBnF;-MIj{U|207BxFcbkjy7sd{~4e%-C)i`Tc4UP_+oq=C`WH zACI7mOHx>B)CRO*>h zR6V`Fvyc9*3Ywl8UUxytteV!yCqpuH457lJhAIke2xFX0Now2R>p&RP;_9kHb48pM zfsl7}mjNAOIwz(5G@i|7K>yY5gZO?*Zsc7x+e+hc!^%ee@#`es+bcbj(hncY&&4Ps zF9>*q$xf3W$OQ+^n2+tVVRqiXnQ-xJ#i{$bv0ruYTXCKWjQ&)t$7dZ6iquHM3Z=5w zota?Hbfh=QEMVz%o~}tL468md7~U3tllX(7hblpe+k6gTHA_Dv!>OM<*RIo&x`FWI#a(*;uQX(RVBABAMq>ONJudC?S zuVM# z?lsYbNHeuu&pl9MZa7~)v(#9r@@abrswqjDN02-^G0z{as5Ap5Y6awF(w4x8&4y|x z+mC^EZn1NuMLn537;vS;Y*q^f6ZAVmO;Py!y9wi@6$+Bsbt>!}{~UzzbQR!I;24ux zEDHos&Gd3%Y*zU%xYK#GT9;(2?tV=2=C?|&;J?vmz;kz*bG|7$O{)y>6f>TsVm+EE zb6z{SI~B~G_{PxA-PYbe^P#V0#t&|=MV4%ks$u2WfpogA^%hAPg%^{W zjsA8s>2{Ifux*BB55b4Xb7SJ4&c#!)Z_bu1P(Du>3;TrI#Ni+w9vsR_As!G<`2kuYL`u zW25k*2KCWi30i)m&(0|s;`3_B<7X+IF!{1~SWR1HN>MRXQoosSvaomPs*~j@spH+G zALbP09b5UOHnazNBEH2xG1U^XdoA}V(U@3Ox78ZF*qA8+Tjn!sJGyOy?K!cLo&iUw zb6I1f$5SQ3j@AAD)7VvqMYVN(LPS82?igthm|=$QP+;gzX@-VDVnDjPJ0v7U1QbQO zM7lxgMv;^nKq-VKGKH37j(KOo1I359DfYkA>jS zpiR=>ozsbq&Uk!OLEqz_EJBueK#1E>O#V7oo*k2$kij;%3uoAGc#x<_^jR`eaV3{m zWMKtP=4<7?R-Tn6963TMhbDgi1A5=AN|w*!22FmqHGNY0O0(CfWztZ&#IlN7yqeko z#;d^lxN4O&j~`oTKY)TTsW*BA&)+euyS^=Odomo@Y#?H;M6acJniDt)*y=06c;MhD z(La+ZpWX}8S!b1zdfywPNM@9zBZtqf<)4*%qV%+JI>s0C4w`~{q}XoSTx#6Kt&gilkL9vEgx8&vXK30)DiZT}f*H*kQ7pS@ z*4YpVk`3qkV1Rl_YQVxj{UWi&$2#D!anoh(N$scYvydU%&hK2Nfs}aH8Y9_+TuT#8dM6`rDtE3Ec=Rte%e59SHrnMPo%k<4!;$ zo_CzaNkOn}i)n*ppyySBH?zdPdohCWsohG~_iwMtpx9OYj4}RJQg4^MgYxSFchI7E zWM+s^sVe7PUCgySJSyWm_j4S+1Y~)3R!8_0hXbQtputHBEU-z=Y2qs#t@HG)H=-fsZ zU*zs*dPOqi9a}=l!h*ilhIWa)#+~>B90=7OXI_<3yN&IB;Vq=LE!nS=N?xTa6-_H3 zN!ale5QZrdPUObA%T4epAq8y%y5gdmXwgnK^UxN5fbG)kE8)s9!4eftW8$U9*e?SK zqb@UJ>?D-+ZsrcZ86+*T zI_kTtI7F7m9l5HHh#qz2fZeX#(zlK##98&*)TS#Xn*ry;Y}1?Xh9>r0@=vYRz%8T z*w6@90w2_iqe-4=gY1sym~>H4Kj0lB+3B0a{XnQ>Ir7^nZAgF{p)@zaqo%r0V8mu*wL|%p&pW%QsBX)s}i5OP3z0j>- z6 z8Jr8LjdUeGsGLjG{UW#T7jN@na%6O56s?{Q&3Ervdtlu`kO9UQ*JGK`{TO}dq8Exa;GJ2W?rXB5${;&Q!rbPB~1Z(=`d)CEMod(z~v*;jvy7`F)j~OVw z`hB+hSN_e1JH41^B7*g+Ql{U?Um%ry?cz6@fB6RoR!gN}<~D&6Z%cP*RqJiVp_SzN z5V2;G(V4N%G|&Ne=SSxK-N}g8`_|EOz3H4rhQ$jeg0bJ79jmL>9I=~fpzfTqhbcT5 z-GS#DNrgarJSsG5eiFz-=q*(CsE24c9H{`*ilq&ha}G4Q&4H^<+4>gTOXd-7?BLO+ zai74tSBJw(fL+@b^`_wpqrT4~l(m95oq)uGc2G&IP-CxtpZ{z7)z>zenyDUI><~>B zaj+MaYG@odVa(`Z$Cp-&abEO38ytl-jN~kg_ytKTtcQ7xlMAlZx@Vtb&OgVAs5op^ zM_jTs$N4vHNmwY!6)&;9j!wzQCckV+wmZl>i@&`?KotPRY%!=j)vn`k+AQm=nsJ;} zHF;{MXWaCB$hys>r3GtxWLm|q))1J}scORdlbu1Uy6__Pac|L^&@0xc+PMYesaH?f zk0V-z%RC1V530KzHy^ppi95YlYQ~rG#!hT4IC^ID4#?Z(x#Jga?IR@B*0zkdQp_cv zda?QX`Hw?Y?QH+2-k>F01Tha~)v7n`eh1c$sAKD-FqxflGr`pu&wIgfjNg7cgHKf;Kn zjPHU;^BB4UynHGm`RF1;g6(j79d}kornU3$`k5~H1{9g&xKF1VZhsjc2Z^A_>2?U z6&4YC%QNs{2E*DwWm_?1Q8VvUm6WXfTCy-f{T$DbvA|tf(wWk|?5Z3~dA5{py}Ba3 zEytp5kp5^82glwL|G646$QS=BX2~b)!?>3@qLGdFULa0B4_!U45m(Du;olJ9l>3Dyz}AlbLEYDgne~&Lub*POU-Wgn>_Ei zoqiM67>?=xo}PUV0$;yOof6!=%|&M+{u2?q$Z@30vcSt_DJS6MDBKyMxAh zM{j}q&NCS#?X{$ARMK~g*4GtXEd$WvjB96!jI`w|szZ2m8Z#})4q#JJSj<^1fzKLc zSl!4I-|F@j&Bd&-(ljJ;bs}pzo+7rf262!J=I5J+G~etarXHk6aJK`qW#6`Z*q<%G zQ>eMGFN7}(y14RRa925Po!L#@G}GNor74JE9xIxeFe(vF9_TdNVqx3N%}L{Pe`j8S z_R@EA_!VnOW8zm*O}2%CZs*k0{Wlx0z9{nTQI%Mvy&pS?+9R!h?4SWud=92GVq69g zE%_c^iHAp+(s(fWcuef@_VxRGQUeq@NPm*qbirRKVsl(;soRIvIV3K9mg6BLx|Kwu zH(ckr_1;Uyv@$TQ^exp{gpse|HxoO>b;U+^IF&b|{>9WFwvxDOgP7JGtL}6`wb{8i zfu1(zB7xwwV%+FR+)qZ<_!2(~7w62YwK0mTgh{SwqC*&eqAAR)NVZ`(n}$DIR+J)}4z6ZD#wQNTo{WZ{X zuao;jx^)6ClaZ7vbd{%eZEoy7`Wnp>3OSf9kfpjp(b!C{J*=r=(?oyS*i!H4%L0ZD zVK6CWY=3DhR)@iMcL0B|xE5oN$poYQrA^kjKXx_zQxMUB>wLXNhDO`TK}p9zOM`&4D0$(@rZ!uT$G8kC_pIqWH(QA-zk{)P;!yWW?!e35g8~q3v+VMO) z|AoN_$FTj+tODe(1Oia|sS6CKZf*m^MIBvX&h7y4btVA-)P%XgJzOneZU8Ycpd8%U zT}%v>UH}1vuYU&0@d9{n6oGPJ0PnRu&Fee^P~8=7sReU40;)fh18T#(+<{OhlyR9q z3fVsjs4*^3U(LcEW_e>2$_oJS-&lo$0RUdmA0h-LUMD&Tzl2>DNt4m_z;G$vxI5N%Um~67Ufcu zyWNZcH=RH=N7~sLeqHCi$>kVdcLe5a1-G!rgA&Zwg4c? zrCRPzxIk3^gEpM6~+ZB!<=p0Z2>n%{zZz2TirmZQ;N{vbYF5%>t5&}z1?`~ zJIx6S4Qb6sPMe+Y4OA4SLl@$f+dM7%X$J=d1z)qMo8h>0bZF5o6mxV;Evc^PZch@; zpV|o4tEE-ptZ%I@-(ge@4l8($*75XpWU{^#(picNk}}u2g+p;gVR&?@&PHNdo+5Cjj&ycY6o-Kq-<74lkBb})keqYRMJOPf5wvYJYiF-T>&=6Hh%28&;<<-7U=B|R>xYt@ zgoJ2Ii%x%i`Q^Rk+WqMAGp{TP+Iv+wQrka5l8=aaTZNM=$&G06)xt+?62|{hIp#E zm-aHnN0nnx8PDR1&?lyl(pXVx*hXFDvK&2WEY+G@cjmyHxMhdFR_d9FXlmQ#pR-`@laBXGF|5%Fu9KWYyU%dLBE3oa?L0IACnt~_&1mg z*>{2nL-+in#or^%W)9RaWD-kBT{rHjn6@WPl|N4p+o3%?p{txorDwKg_Io?Pxv-mm zQkBo)cdtl%U)gwXwtd2jAbqp9Y*8a!Yi{o6mQ|hX8V6LGfoEc{bJ2szF4uqAHM=wH zd*0`e#xf-LJ6dngXzbS!Z%>!RUgtomWVt=>Jhi)UfPhMpeu|zqdzC)+MO2Es7yH@m zYC9hV{no!x3;tMj8IVSb=d!b-M?(Dc1u3Fe(+bDHx#(lwM^drb@5;fi9;B5oC9-IJ zb12elSatwaVCaq)m^tV}LlxbVsEi#8!-DMLN2=yds4)g|!+F=S@h9c+{f;!Su)tsE{vK)9O#64r zPCoZB+B$2>7i+a(%bYZ?g@ zKXqR*)tY&JA3Z-~-D^FlRQqGZTpKm)ENqid6Vp3i?~y=aynvX<5e-D6>!~-ub1O2fga;iaZ+o2)F3>=`8@0ua%KWoH%gB zT}})qb@@=sP4C?D_w_OUyucF28&(|-PSvOaKkGKh0n_uY>~WWZ{bm?cNvanNwGd06 zd>rIGD&K&Om8N;py|y1u2v=X!%$i_7S1id`2)`Q~@>xZeWm+@eXp7<(c29>V-hYD3 z_dCq^|94#C`}^vI{|^%XZ;&7;=})e_G4d}!%1tqX=YU89m$-K&pGgw_ydA2bQBq9d zG0rnS>3mO%fp(Qx=@uBEbGqjlAJmQ7BtvB*aO9FQ;C8uGV0z*PrF9}FjtE9MQy4Ju z%_PIR+p=H)g8YY$&imMarE0_KWDRgDUmVN5eFr14=}B1l!2q~ovTD#=!p85!%;Mt1 z!qVJqdY032hBn7iHQiR6gVal^HgQ|S{Q*DY6`4a$&;w@-m81DdBdsbuta2jLyThUg zME8%hikuT)OZ(C21GQ2;Q1U^(^MbR>UG<4iG4YlcOr1rwCyW5qqTz&DLYkgFH*Wgtj<*d+JwA_-BYd(Sid7m2wG_s) ze<=fc;FaxN1)mZa6y~(+?S#giKZUD@SQk?5WtMGx5HQ$9IO&l1V6@(6{_M1wNEj3G zh1<*35=j7!1!fO2xIbp{*cwLd!m!Ip6u1)-l zM^+2Os}5SOeWNjY+BZ1F#i1LiJK787;(5~Fr#3wK(7eZW^PFY9wD1A%J8h8q9gP0j znJ4IIzU|}>|DoBxR|5T>W$J6ftN}nRJ8u|(PZ$7%I$OcKj6f*a7;s&)h6DI+C>98P zXe0*W=SO{82;&7=TbaWk{9u@swJ-z%6EGJL60{bCSV{bM4b%)(6ApI=KyEq@)HC7* zKmfePsL9PgOmcn)H?N@3^*q+i-4$l;gzGg+H}r-8U79p(#mz?0TGVJ$n|h|UDfHoe z4NhC}z;O~UjHr*qaq1j=G7rXlFyl1KCd$dS=j~btCEeVx(Qq*z0(6+(w+2qTprPA; ze6Y>Iyk5qH&vZw1&}?mdC8q8wxVaZmGB__05t(m#|LU-m7U~bkz!j!Q9Ct3fd%Q#* zC8s#$ME>R=g=)#z+aiSnLY0Cn@=Rh6FXj