From badef773d47977e89dbc290ec8eb418f1117d620 Mon Sep 17 00:00:00 2001 From: M Waleed Kadous Date: Thu, 2 Nov 2023 17:02:02 -0700 Subject: [PATCH 01/37] First version of API approach. --- api_presenter.py | 63 ++++++++++++++++++++++++++++++++++++++++++++++++ docs/index.md | 2 +- requirements.txt | 2 ++ 3 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 api_presenter.py diff --git a/api_presenter.py b/api_presenter.py new file mode 100644 index 0000000..80510ed --- /dev/null +++ b/api_presenter.py @@ -0,0 +1,63 @@ +import sys +from typing import List, Optional, Dict +from fastapi import FastAPI, APIRouter +from pydantic import BaseModel +from agents.ansari_fn import AnsariFn +from agents.quran_decider import QuranDecider +from tools.kalemat import Kalemat +from agents.query_extractor import QueryExtractor +from tools.kalemat import Kalemat +from hermetic.core.agent import Agent +from hermetic.core.environment import Environment +from hermetic.core.presenter import Presenter +from hermetic.core.environment import Environment +from hermetic.stores.file_store import FileStore +from hermetic.core.prompt_mgr import PromptMgr +import uvicorn +import copy + + +class Messages(BaseModel): + messages: List[Dict] + +class ApiPresenter(Presenter): + def __init__(self, + env: Environment): + self.env = env + self.router = APIRouter() + self.router.add_api_route("/api/v1/complete", self.complete, methods=["POST"]) + + + def complete(self, messages: Messages): + myansari = copy.deepcopy(ansari) + return myansari.process_message_history(messages.messages) + + + def present(self): + self.agent = self.env.agents[self.env.primary_agent] + app = FastAPI() + app.include_router(self.router) + uvicorn.run(app, host="0.0.0.0", port=8000) + + +env = Environment(store = FileStore(root_dir = 'ansari-stores'), + prompt_mgr = PromptMgr(hot_reload=True)) + + +# This work involves 3 agents, with Ansari as primary. +kalemat = Kalemat(env) +ansari = AnsariFn(env) +env.set_primary_agent('ansarifn') + +presenter = ApiPresenter(env) +presenter.present() + + + + + + + + + + \ No newline at end of file diff --git a/docs/index.md b/docs/index.md index 7a7fc36..513e3e6 100644 --- a/docs/index.md +++ b/docs/index.md @@ -12,7 +12,7 @@ Ansari is a chatbot designed to help answer non-Muslims' questions about Islam a ## Key points before we go any further - Ansari is not perfect. It can and will make mistakes. -- We have gone to some trouble to validate that it does say things that are *mostly* correct. We have reviewed over 2,500 user interactions. Of those questions, we found 8 that we weren't sure were correct or not (mostly on fiqh questions like inheritance etc). We sent those 8 to some religious scholars, and it turned out Ansari was correct on all 8. +- We have gone to some trouble to validate that it does say things that are *mostly* correct. We have reviewed over 2,500 user interactions. Of those questions, we found 9 that we weren't sure were correct or not (mostly on fiqh questions like inheritance etc). We sent those 9 to some religious scholars, and it turned out Ansari was correct on 8 (the one it got wrong was a complex inheritance questions). - If you see it say something you're not sure about or wrong, just tell Ansari that you want to flag this (as in "I want to flag this") and a human will review the conversation. Or send e-mail to feedback@ansari.chat. ## What can Ansari do? diff --git a/requirements.txt b/requirements.txt index ea4c2c4..6d20fa2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,6 +5,8 @@ openai tiktoken rich pyislam +fastapi +uvicorn discord.py git+https://github.com/anyscale/hermetic.git From 4b45318e05fb7f97b87c4c8c1630ac7bbca41aee Mon Sep 17 00:00:00 2001 From: M Waleed Kadous Date: Thu, 2 Nov 2023 17:03:30 -0700 Subject: [PATCH 02/37] Add main_fns.py --- main_fns.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 main_fns.py diff --git a/main_fns.py b/main_fns.py new file mode 100644 index 0000000..32896ef --- /dev/null +++ b/main_fns.py @@ -0,0 +1,35 @@ +from hermetic.presenters.gradio_presenter import GradioPresenter +from agents.ansari_fn import AnsariFn +from agents.quran_decider import QuranDecider +from agents.query_extractor import QueryExtractor +from tools.kalemat import Kalemat +from hermetic.core.environment import Environment +from hermetic.stores.file_store import FileStore +from hermetic.core.prompt_mgr import PromptMgr + +# Note: I am hoping this will be migrated to a config file +# in the future. But for now this is code-as-configuration. + +CSS =""" +.contain { display: flex; flex-direction: column; }x +#component-0 { height: 100%; } +#chatbot { flex-grow: 1; } +""" + +env = Environment(store = FileStore(root_dir = 'ansari-stores'), + prompt_mgr = PromptMgr(hot_reload=True)) + +# This work involves 3 agents, with Ansari as primary. +kalemat = Kalemat(env) +ansari = AnsariFn(env) +env.set_primary_agent('ansarifn') + +# We also use one tool, which is Kalemat lookup + + +presenter = GradioPresenter(app_name='Ansari', + favicon_path='./favicon.ico', + env=env) + +# This starts the UI. +presenter.present() \ No newline at end of file From 6449a5727f39d63b0c6a41fc0d2d21921c63b677 Mon Sep 17 00:00:00 2001 From: M Waleed Kadous Date: Thu, 2 Nov 2023 18:39:09 -0700 Subject: [PATCH 03/37] Minor bug fixes. --- agents/ansari_fn.py | 9 +++------ api_presenter.py | 15 +++++++++++---- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/agents/ansari_fn.py b/agents/ansari_fn.py index 25b70ba..74dc7c6 100644 --- a/agents/ansari_fn.py +++ b/agents/ansari_fn.py @@ -50,9 +50,6 @@ def process_fn_call(self, orig_question, function_name, function_arguments): def update_message_history(self, inp): - # First stage is to pass in the functions. - #kalemat = self.env.tools['kalemat'] - self.message_history.append({ - 'role': 'user', - 'content': inp - }) \ No newline at end of file + # Explicitly do nothing, since we rely on process_message_history + pass + diff --git a/api_presenter.py b/api_presenter.py index 80510ed..85f11c8 100644 --- a/api_presenter.py +++ b/api_presenter.py @@ -1,6 +1,7 @@ import sys from typing import List, Optional, Dict from fastapi import FastAPI, APIRouter +from fastapi.responses import StreamingResponse from pydantic import BaseModel from agents.ansari_fn import AnsariFn from agents.quran_decider import QuranDecider @@ -15,6 +16,7 @@ from hermetic.core.prompt_mgr import PromptMgr import uvicorn import copy +import os class Messages(BaseModel): @@ -22,22 +24,25 @@ class Messages(BaseModel): class ApiPresenter(Presenter): def __init__(self, - env: Environment): + env: Environment, port): self.env = env + self.port = port self.router = APIRouter() self.router.add_api_route("/api/v1/complete", self.complete, methods=["POST"]) def complete(self, messages: Messages): + pm = self.env.prompt_mgr + system_prompt = pm.bind('system_msg_fn').render() myansari = copy.deepcopy(ansari) - return myansari.process_message_history(messages.messages) + return StreamingResponse(myansari.process_message_history(messages.messages, system_prompt)) def present(self): self.agent = self.env.agents[self.env.primary_agent] app = FastAPI() app.include_router(self.router) - uvicorn.run(app, host="0.0.0.0", port=8000) + uvicorn.run(app, host="0.0.0.0", port=self.port) env = Environment(store = FileStore(root_dir = 'ansari-stores'), @@ -49,7 +54,9 @@ def present(self): ansari = AnsariFn(env) env.set_primary_agent('ansarifn') -presenter = ApiPresenter(env) +port = os.getenv('API_SERVER_PORT',8000) + +presenter = ApiPresenter(env, port) presenter.present() From f17f2fef5d2230994c7b4c9d021690b4705bbe7d Mon Sep 17 00:00:00 2001 From: M Waleed Kadous Date: Thu, 2 Nov 2023 19:26:08 -0700 Subject: [PATCH 04/37] Updated procfile. --- Procfile | 3 ++- api_client.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 api_client.py diff --git a/Procfile b/Procfile index b85a77b..38e6fd8 100644 --- a/Procfile +++ b/Procfile @@ -1,3 +1,4 @@ -web: source setup.sh && python main_langchain.py & python discord_presenter.py & wait +web: source setup.sh && python api_presenter.py + diff --git a/api_client.py b/api_client.py new file mode 100644 index 0000000..2e1c9db --- /dev/null +++ b/api_client.py @@ -0,0 +1,44 @@ +import requests +import json +import sys + +def ansari_complete(url, data): + """Function to listen to server sent events from the given URL.""" + headers = {'Content-Type': 'application/json'} + try: + response = requests.post(url, headers=headers, data=json.dumps(data), stream=True) + # Check if the connection was established successfully + if response.status_code != 200: + print(f"Connection failed: {response.status_code}") + return + + # Iterate over lines + for line in response.iter_content(): + # Filter out keep-alive new lines + if line: + decoded_line = line.decode('utf-8') + sys.stdout.write(decoded_line) + sys.stdout.flush() + # Do something with the event + # Typically, you'd parse the event data and act accordingly + # For example, you could convert the line to JSON if expected + # event_data = json.loads(decoded_line.lstrip("data: ")) + # print(event_data) + + except requests.exceptions.RequestException as e: + print(f"An error occurred: {e}") + +# Replace with the actual server URL that sends server-sent events +sse_url = "http://localhost:8000/api/v1/complete" + +data = { + "messages": [ + { + "role": "user", + "content" : "Who are you?" + } + + ] +} + +ansari_complete(sse_url, data) \ No newline at end of file From 14d758bf188aba26882abed9c52850b5d592ff58 Mon Sep 17 00:00:00 2001 From: M Waleed Kadous Date: Thu, 2 Nov 2023 19:50:01 -0700 Subject: [PATCH 05/37] Switch to uvicorn launcher. --- Procfile | 3 +-- api_presenter.py | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Procfile b/Procfile index 38e6fd8..851670a 100644 --- a/Procfile +++ b/Procfile @@ -1,4 +1,3 @@ -web: source setup.sh && python api_presenter.py - +web: source setup.sh && uvicorn api_presenter:app diff --git a/api_presenter.py b/api_presenter.py index 85f11c8..824d6aa 100644 --- a/api_presenter.py +++ b/api_presenter.py @@ -24,14 +24,16 @@ class Messages(BaseModel): class ApiPresenter(Presenter): def __init__(self, - env: Environment, port): + env: Environment, app, port): self.env = env self.port = port + self.app = app self.router = APIRouter() self.router.add_api_route("/api/v1/complete", self.complete, methods=["POST"]) def complete(self, messages: Messages): + print('Complete called.') pm = self.env.prompt_mgr system_prompt = pm.bind('system_msg_fn').render() myansari = copy.deepcopy(ansari) @@ -39,10 +41,7 @@ def complete(self, messages: Messages): def present(self): - self.agent = self.env.agents[self.env.primary_agent] - app = FastAPI() - app.include_router(self.router) - uvicorn.run(app, host="0.0.0.0", port=self.port) + pass env = Environment(store = FileStore(root_dir = 'ansari-stores'), @@ -53,11 +52,17 @@ def present(self): kalemat = Kalemat(env) ansari = AnsariFn(env) env.set_primary_agent('ansarifn') +app = FastAPI() -port = os.getenv('API_SERVER_PORT',8000) +port = int(os.getenv('API_SERVER_PORT',8000)) +@app.post("/api/v1/complete") +def complete(messages: Messages): + return presenter.complete(messages) -presenter = ApiPresenter(env, port) +presenter = ApiPresenter(env, app, port) presenter.present() +#uvicorn.run(app, host="0.0.0.0", port=port) + From a15c1ce4dec3a975b5084a89f18e17f37e2ff399 Mon Sep 17 00:00:00 2001 From: M Waleed Kadous Date: Thu, 2 Nov 2023 19:57:11 -0700 Subject: [PATCH 06/37] Switch to gunicorn. --- Procfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Procfile b/Procfile index 851670a..aef24a7 100644 --- a/Procfile +++ b/Procfile @@ -1,3 +1,3 @@ -web: source setup.sh && uvicorn api_presenter:app +web: gunicorn -w 4 -k uvicorn.workers.UvicornWorker api_presenter:app From fc6e61e9af1542e4fb8b437e0f0748eb0faff420 Mon Sep 17 00:00:00 2001 From: M Waleed Kadous Date: Thu, 2 Nov 2023 20:00:59 -0700 Subject: [PATCH 07/37] Include gunicorn in requirements --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 6d20fa2..aa62e5f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,6 +7,7 @@ rich pyislam fastapi uvicorn +gunicorn discord.py git+https://github.com/anyscale/hermetic.git From 94519ebcb3dfba8a28571453c95ffa162e7f153b Mon Sep 17 00:00:00 2001 From: M Waleed Kadous Date: Thu, 2 Nov 2023 20:07:04 -0700 Subject: [PATCH 08/37] Remove url from api_client.py --- api_client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api_client.py b/api_client.py index 2e1c9db..20dc115 100644 --- a/api_client.py +++ b/api_client.py @@ -29,7 +29,7 @@ def ansari_complete(url, data): print(f"An error occurred: {e}") # Replace with the actual server URL that sends server-sent events -sse_url = "http://localhost:8000/api/v1/complete" +sse_url = 'xxx" data = { "messages": [ From c6a71f8f06eeb7cd5b90c845aa41ea20a0f36ac0 Mon Sep 17 00:00:00 2001 From: M Waleed Kadous Date: Thu, 2 Nov 2023 20:11:20 -0700 Subject: [PATCH 09/37] Remove url from api_client.py --- api_client.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/api_client.py b/api_client.py index 20dc115..d6852e3 100644 --- a/api_client.py +++ b/api_client.py @@ -13,23 +13,18 @@ def ansari_complete(url, data): return # Iterate over lines - for line in response.iter_content(): + for content in response.iter_content(): # Filter out keep-alive new lines - if line: - decoded_line = line.decode('utf-8') - sys.stdout.write(decoded_line) + if content: + decoded_content = content.decode('utf-8') + sys.stdout.write(decoded_content) sys.stdout.flush() - # Do something with the event - # Typically, you'd parse the event data and act accordingly - # For example, you could convert the line to JSON if expected - # event_data = json.loads(decoded_line.lstrip("data: ")) - # print(event_data) except requests.exceptions.RequestException as e: print(f"An error occurred: {e}") # Replace with the actual server URL that sends server-sent events -sse_url = 'xxx" +sse_url = "https://ansari-staging-b78f9bbc2ddc.herokuapp.com/api/v1/complete" data = { "messages": [ From d6d19756a326e7d5a01518576b03e9e04c7d6fac Mon Sep 17 00:00:00 2001 From: M Waleed Kadous Date: Thu, 2 Nov 2023 20:11:37 -0700 Subject: [PATCH 10/37] Remove url from api_client.py --- api_client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api_client.py b/api_client.py index d6852e3..4e9d105 100644 --- a/api_client.py +++ b/api_client.py @@ -24,7 +24,7 @@ def ansari_complete(url, data): print(f"An error occurred: {e}") # Replace with the actual server URL that sends server-sent events -sse_url = "https://ansari-staging-b78f9bbc2ddc.herokuapp.com/api/v1/complete" +sse_url = "http://localhost:8000/api/v1/complete" data = { "messages": [ From e81203a9d7276043b7f989acf06661518765c6d1 Mon Sep 17 00:00:00 2001 From: M Waleed Kadous Date: Fri, 3 Nov 2023 17:22:32 -0700 Subject: [PATCH 11/37] Cleaning up as part of refactor. --- agents/ansari.py | 56 -------------------------------------- agents/ansari_langchain.py | 53 ------------------------------------ agents/query_extractor.py | 21 -------------- agents/quran_decider.py | 24 ---------------- agents/quran_filter.py | 14 ---------- main_langchain.py | 38 -------------------------- main_stdio.py | 22 --------------- 7 files changed, 228 deletions(-) delete mode 100644 agents/ansari.py delete mode 100644 agents/ansari_langchain.py delete mode 100644 agents/query_extractor.py delete mode 100644 agents/quran_decider.py delete mode 100644 agents/quran_filter.py delete mode 100644 main_langchain.py delete mode 100644 main_stdio.py diff --git a/agents/ansari.py b/agents/ansari.py deleted file mode 100644 index 6cf8fc4..0000000 --- a/agents/ansari.py +++ /dev/null @@ -1,56 +0,0 @@ -from hermetic.agents.openai_chat_agent import OpenAIChatAgent -from hermetic.core.prompt_mgr import PromptMgr -from tools.kalemat import Kalemat - -NAME = 'ansari' -class Ansari(OpenAIChatAgent): - def __init__(self, env): - super().__init__(model = 'gpt-4', - environment = env, id=NAME) - env.add_agent(NAME, self) - self.pm = self.env.prompt_mgr - sys_msg = self.pm.bind('system_msg') - - - self.message_history = [{ - 'role': 'system', - 'content': sys_msg.render() - }] - - def greet(self): - self.greeting = self.pm.bind('greeting') - return self.greeting.render() - - def update_message_history(self, inp): - quran_decider = self.env.agents['quran_decider'] - result = quran_decider.process_all(inp) - print(f'quran decider returned {result}') - if 'Yes' in result: - # Do a secondary search here. - query_extractor = self.env.agents['query_extractor'] - query = query_extractor.process_all(inp) - print(f'query extractor returned {query}') - kalemat = self.env.tools['kalemat'] - results = kalemat.run_as_string(query) - print(f'kalemat returned {results}') - eq = self.pm.bind('ansari_expanded_query') - expanded_query = eq.render(quran_results=results, user_question=inp) - print(f'expanded query is {expanded_query}') - if ' flag ' in inp: - expanded_query = expanded_query + '\nIt seems the user asked to flag something. Ask them what they want to flag and why.\n' - self.message_history.append({ - 'role': 'user', - 'content': expanded_query - }) - - else: - print(f'In else clause {inp}') - if ' flag ' in inp: - print(f'In flag clause {inp}') - inp = inp + '\nIt seems the user asked to flag something. Ask them what they want to flag and why.\n' - self.message_history.append({ - 'role': 'user', - 'content': inp - }) - - diff --git a/agents/ansari_langchain.py b/agents/ansari_langchain.py deleted file mode 100644 index 916676d..0000000 --- a/agents/ansari_langchain.py +++ /dev/null @@ -1,53 +0,0 @@ -from hermetic.agents.langchain_chat_agent import LangchainChatAgent -from hermetic.core.prompt_mgr import PromptMgr -from tools.kalemat import Kalemat -from langchain.chat_models import ChatOpenAI - - -from langchain.schema import SystemMessage, HumanMessage - -FLAG_INSTRUCTION = """'\n -The user wanted to flag an issue. Ask them the cause: wrong, confusing, funny or impressive. -Also ask them for their email address but make it clear it is optional.\n' -""" - -MODEL = 'gpt-4' -NAME = 'ansari-langchain' -class AnsariLangchain(LangchainChatAgent): - def __init__(self, env): - super().__init__(environment = env, id=NAME) - env.add_agent(NAME, self) - self.pm = self.env.prompt_mgr - sys_msg = self.pm.bind('system_msg') - self.llm = ChatOpenAI(temperature=0, model_name=MODEL, streaming=True) - - self.message_history = [SystemMessage(content=sys_msg.render())] - - def greet(self): - self.greeting = self.pm.bind('greeting') - return self.greeting.render() - - def update_message_history(self, inp): - - quran_decider = self.env.agents['quran_decider'] - result = quran_decider.process_all(inp) - print(f'quran decider returned {result}') - if 'Yes' in result: - # Do a secondary search here. - query_extractor = self.env.agents['query_extractor'] - query = query_extractor.process_all(inp) - print(f'query extractor returned {query}') - kalemat = self.env.tools['kalemat'] - results = kalemat.run_as_string(query) - print(f'kalemat returned {results}') - eq = self.pm.bind('ansari_expanded_query') - expanded_query = eq.render(quran_results=results, user_question=inp) - #print(f'expanded query is {expanded_query}') - if ' flag ' in inp: - expanded_query = expanded_query + FLAG_INSTRUCTION - self.message_history.append(HumanMessage(content=expanded_query)) - else: - if ' flag ' in inp: - inp = inp + FLAG_INSTRUCTION - self.message_history.append(HumanMessage(content=inp)) - diff --git a/agents/query_extractor.py b/agents/query_extractor.py deleted file mode 100644 index b5cd2b7..0000000 --- a/agents/query_extractor.py +++ /dev/null @@ -1,21 +0,0 @@ -from hermetic.agents.openai_chat_agent import OpenAIChatAgent -from hermetic.core.prompt_mgr import PromptMgr - -MODEL = 'gpt-3.5-turbo' -NAME = 'query_extractor' -class QueryExtractor(OpenAIChatAgent): - def __init__(self, env): - super().__init__(model = MODEL, environment = env, id=NAME) - self.env.add_agent(NAME, self) - self.extract = self.env.prompt_mgr.bind('extract_query_from_question') - - def update_message_history(self, inp): - # Add the message with the query in it - extracted = self.extract.render(question=inp) - print('extracted is: ', extracted) - self.message_history.append({ - 'role': 'user', - 'content': extracted - }) - - diff --git a/agents/quran_decider.py b/agents/quran_decider.py deleted file mode 100644 index 1c18701..0000000 --- a/agents/quran_decider.py +++ /dev/null @@ -1,24 +0,0 @@ -from hermetic.agents.openai_chat_agent import OpenAIChatAgent -from hermetic.core.prompt_mgr import PromptMgr - -MODEL = 'gpt-3.5-turbo' -NAME = 'quran_decider' -class QuranDecider(OpenAIChatAgent): - def __init__(self, env): - super().__init__(model = MODEL, environment = env, id=NAME) - - self.env = env - self.env.add_agent(NAME, self) - self.about_the_quran = self.env.prompt_mgr.bind('about_the_quran') - - - def update_message_history(self, inp): - # Add the message with the query in it - question = self.about_the_quran.render(question=inp) - print('question is: ', question) - self.message_history.append({ - 'role': 'user', - 'content': question - }) - - diff --git a/agents/quran_filter.py b/agents/quran_filter.py deleted file mode 100644 index 6c0efdf..0000000 --- a/agents/quran_filter.py +++ /dev/null @@ -1,14 +0,0 @@ -from hermetic.agents.openai_chat_agent import OpenAIChatAgent -from hermetic.core.prompt_mgr import PromptMgr - -MODEL = 'gpt-4' -NAME = 'quran_filter' -class QuranFilter(OpenAIChatAgent): - def __init__(self, env): - super().__init__(model = MODEL, environment = env, id=NAME) - - self.env = env - self.env.add_agent(NAME, self) - self.filter = self.env.prompt_mgr.bind('filter_relevant_verses') - - def process_input \ No newline at end of file diff --git a/main_langchain.py b/main_langchain.py deleted file mode 100644 index e975397..0000000 --- a/main_langchain.py +++ /dev/null @@ -1,38 +0,0 @@ -from hermetic.presenters.gradio_presenter import GradioPresenter -from agents.ansari_langchain import AnsariLangchain -from agents.quran_decider import QuranDecider -from agents.query_extractor import QueryExtractor -from tools.kalemat import Kalemat -from hermetic.core.environment import Environment -from hermetic.stores.file_store import FileStore -from hermetic.core.prompt_mgr import PromptMgr - -# Note: I am hoping this will be migrated to a config file -# in the future. But for now this is code-as-configuration. - -CSS =""" -.contain { display: flex; flex-direction: column; }x -#component-0 { height: 100%; } -#chatbot { flex-grow: 1; } -""" - -env = Environment(store = FileStore(root_dir = 'ansari-stores'), - prompt_mgr = PromptMgr(hot_reload=True)) - -# This work involves 3 agents, with Ansari as primary. -ansari = AnsariLangchain(env) -env.set_primary_agent('ansari-langchain') -decider = QuranDecider(env) -query_extractor = QueryExtractor(env) - -# We also use one tool, which is Kalemat lookup -kalemat = Kalemat(env) - -presenter = GradioPresenter(app_name='Ansari', - favicon_path='./favicon.ico', - env=env) - -# This starts the UI. -presenter.present() - - diff --git a/main_stdio.py b/main_stdio.py deleted file mode 100644 index d91fa3f..0000000 --- a/main_stdio.py +++ /dev/null @@ -1,22 +0,0 @@ -from hermetic.presenters.stdio_presenter import StdioPresenter -from hermetic.core.prompt_mgr import PromptMgr -from hermetic.core.environment import Environment -from agents.ansari_fn import AnsariFn -from tools.kalemat import Kalemat -from hermetic.core.environment import Environment -from hermetic.stores.file_store import FileStore -from hermetic.core.prompt_mgr import PromptMgr - -env = Environment(store = FileStore(root_dir = 'ansari-stores'), - prompt_mgr = PromptMgr(hot_reload=True)) - -# This work involves 3 agents, with Ansari as primary. -kalemat = Kalemat(env) -ansari = AnsariFn(env) - - -env.set_primary_agent('ansarifn') - -sp = StdioPresenter() - -sp.present(env) From 976ef6d7808c3cfadb007b7525c3c9e8ac49c146 Mon Sep 17 00:00:00 2001 From: M Waleed Kadous Date: Sat, 4 Nov 2023 18:08:08 -0700 Subject: [PATCH 12/37] Massively simplified the code. Removed dependency on hermetic. --- agents/ansari.py | 118 ++++++++++++++++++ api_presenter.py | 75 ----------- main_fns.py | 35 ------ presenters/api_presenter.py | 57 +++++++++ .../discord_presenter.py | 0 presenters/stdio_presenter.py | 25 ++++ stdio_presenter.py | 17 +++ tools/kalemat.py | 30 +++-- 8 files changed, 235 insertions(+), 122 deletions(-) create mode 100644 agents/ansari.py delete mode 100644 api_presenter.py delete mode 100644 main_fns.py create mode 100644 presenters/api_presenter.py rename discord_presenter.py => presenters/discord_presenter.py (100%) create mode 100644 presenters/stdio_presenter.py create mode 100644 stdio_presenter.py diff --git a/agents/ansari.py b/agents/ansari.py new file mode 100644 index 0000000..9a88428 --- /dev/null +++ b/agents/ansari.py @@ -0,0 +1,118 @@ +import openai +from pydantic import BaseModel +from util.prompt_mgr import PromptMgr +from tools.kalemat import Kalemat +import json + +MODEL = 'gpt-4' +class Ansari: + def __init__(self): + kalemat = Kalemat() + self.tools = { kalemat.get_fn_name(): kalemat} + self.model = MODEL + self.pm = PromptMgr() + sys_msg = self.pm.bind('system_msg_fn') + self.functions = [x.get_function_description() for x in self.tools.values()] + + self.message_history = [{ + 'role': 'system', + 'content': sys_msg.render() + }] + + def greet(self): + self.greeting = self.pm.bind('greeting') + return self.greeting.render() + + def process_input(self, user_input): + self.message_history.append({ + 'role': 'user', + 'content': user_input + }) + return self.process_message_history() + + def process_message_history(self): + # Keep processing the user input until we get something from the assistant + while self.message_history[-1]['role'] != 'assistant': + print(f'Processing one round {self.message_history[-1]}') + # This is pretty complicated so leaving a comment. + # We want to yield from so that we can send the sequence through the input + yield from self.process_one_round() + + def process_one_round(self): + response = openai.ChatCompletion.create( + model = self.model, + messages = self.message_history, + stream = True, + functions = self.functions, + temperature = 0.0, + ) + + words = '' + function_name = '' + function_arguments = '' + response_mode = '' # words or fn + for tok in response: + #print('Token received: ' + str(tok)) + delta = tok.choices[0].delta + if not response_mode: + # This code should only trigger the first + # time through the loop. + if 'function_call' in delta: + # We are in function mode + response_mode = 'fn' + function_name = delta['function_call']['name'] + else: + response_mode = 'words' + print('Response mode: ' + response_mode) + + # We process things differently depending on whether it is a function or a + # text + if response_mode == 'words': + if not delta: # End token + self.message_history.append({ + 'role': 'assistant', + 'content': words + }) + + break + elif 'content' in delta: + if delta['content']: + words += delta['content'] + yield delta['content'] + else: + continue + elif response_mode == 'fn': + if not delta: # End token + function_call = function_name + '(' + function_arguments + ')' + print(f"Function call is {function_call}") + # The function call below appends the function call to the message history + yield self.process_fn_call(input, function_name, function_arguments) + # + break + elif 'function_call' in delta: + #print(f"Function call --{delta['function_call']['arguments']}") + function_arguments += delta['function_call']['arguments'] + print(f'Function arguments are {function_arguments}') + yield '' # delta['function_call']['arguments'] # we shouldn't yield anything if it's a fn + else: + continue + else: + raise Exception("Invalid response mode: " + response_mode) + + + + def process_fn_call(self, orig_question, function_name, function_arguments): + if function_name in self.tools.keys(): + args = json.loads(function_arguments) + query = args['query'] + results = self.tools[function_name].run_as_list(query, numResults=10) + print(f'Results are {results}') + # Now we have to pass the results back in + for result in results: + self.message_history.append({ + 'role': 'function', + 'name': 'search_quran', + 'content': result + }) + else: + print('Unknown function name: ', function_name) diff --git a/api_presenter.py b/api_presenter.py deleted file mode 100644 index 824d6aa..0000000 --- a/api_presenter.py +++ /dev/null @@ -1,75 +0,0 @@ -import sys -from typing import List, Optional, Dict -from fastapi import FastAPI, APIRouter -from fastapi.responses import StreamingResponse -from pydantic import BaseModel -from agents.ansari_fn import AnsariFn -from agents.quran_decider import QuranDecider -from tools.kalemat import Kalemat -from agents.query_extractor import QueryExtractor -from tools.kalemat import Kalemat -from hermetic.core.agent import Agent -from hermetic.core.environment import Environment -from hermetic.core.presenter import Presenter -from hermetic.core.environment import Environment -from hermetic.stores.file_store import FileStore -from hermetic.core.prompt_mgr import PromptMgr -import uvicorn -import copy -import os - - -class Messages(BaseModel): - messages: List[Dict] - -class ApiPresenter(Presenter): - def __init__(self, - env: Environment, app, port): - self.env = env - self.port = port - self.app = app - self.router = APIRouter() - self.router.add_api_route("/api/v1/complete", self.complete, methods=["POST"]) - - - def complete(self, messages: Messages): - print('Complete called.') - pm = self.env.prompt_mgr - system_prompt = pm.bind('system_msg_fn').render() - myansari = copy.deepcopy(ansari) - return StreamingResponse(myansari.process_message_history(messages.messages, system_prompt)) - - - def present(self): - pass - - -env = Environment(store = FileStore(root_dir = 'ansari-stores'), - prompt_mgr = PromptMgr(hot_reload=True)) - - -# This work involves 3 agents, with Ansari as primary. -kalemat = Kalemat(env) -ansari = AnsariFn(env) -env.set_primary_agent('ansarifn') -app = FastAPI() - -port = int(os.getenv('API_SERVER_PORT',8000)) -@app.post("/api/v1/complete") -def complete(messages: Messages): - return presenter.complete(messages) - -presenter = ApiPresenter(env, app, port) -presenter.present() -#uvicorn.run(app, host="0.0.0.0", port=port) - - - - - - - - - - - \ No newline at end of file diff --git a/main_fns.py b/main_fns.py deleted file mode 100644 index 32896ef..0000000 --- a/main_fns.py +++ /dev/null @@ -1,35 +0,0 @@ -from hermetic.presenters.gradio_presenter import GradioPresenter -from agents.ansari_fn import AnsariFn -from agents.quran_decider import QuranDecider -from agents.query_extractor import QueryExtractor -from tools.kalemat import Kalemat -from hermetic.core.environment import Environment -from hermetic.stores.file_store import FileStore -from hermetic.core.prompt_mgr import PromptMgr - -# Note: I am hoping this will be migrated to a config file -# in the future. But for now this is code-as-configuration. - -CSS =""" -.contain { display: flex; flex-direction: column; }x -#component-0 { height: 100%; } -#chatbot { flex-grow: 1; } -""" - -env = Environment(store = FileStore(root_dir = 'ansari-stores'), - prompt_mgr = PromptMgr(hot_reload=True)) - -# This work involves 3 agents, with Ansari as primary. -kalemat = Kalemat(env) -ansari = AnsariFn(env) -env.set_primary_agent('ansarifn') - -# We also use one tool, which is Kalemat lookup - - -presenter = GradioPresenter(app_name='Ansari', - favicon_path='./favicon.ico', - env=env) - -# This starts the UI. -presenter.present() \ No newline at end of file diff --git a/presenters/api_presenter.py b/presenters/api_presenter.py new file mode 100644 index 0000000..dcd0db8 --- /dev/null +++ b/presenters/api_presenter.py @@ -0,0 +1,57 @@ +import sys +from typing import List, Optional, Dict +from fastapi import FastAPI, APIRouter +from fastapi.responses import StreamingResponse +from pydantic import BaseModel +from agents.ansari_fn import AnsariFn +from tools.kalemat import Kalemat +from tools.kalemat import Kalemat +from util.prompt_mgr import PromptMgr +import uvicorn +import copy +import os + + +class Messages(BaseModel): + messages: List[Dict] + +class ApiPresenter(BaseModel): + def __init__(self, app, port): + self.port = port + self.app = app + self.pm = PromptMgr() + + + def complete(self, messages: Messages): + print('Complete called.') + system_prompt = self.pm.bind('system_msg_fn').render() + ans = AnsariFn() + return StreamingResponse(ans.process_message_history(messages.messages, system_prompt)) + + def present(self): + pass + +app = FastAPI() + +tools = { + 'kalemat': Kalemat() +} + +port = int(os.getenv('API_SERVER_PORT',8000)) +@app.post("/api/v1/complete") +def complete(messages: Messages): + return presenter.complete(messages) + +presenter = ApiPresenter(app, port) +presenter.present() + + + + + + + + + + + \ No newline at end of file diff --git a/discord_presenter.py b/presenters/discord_presenter.py similarity index 100% rename from discord_presenter.py rename to presenters/discord_presenter.py diff --git a/presenters/stdio_presenter.py b/presenters/stdio_presenter.py new file mode 100644 index 0000000..9897949 --- /dev/null +++ b/presenters/stdio_presenter.py @@ -0,0 +1,25 @@ +import sys +from agents.ansari import Ansari + +class StdioPresenter: + def __init__(self, agent): + self.agent = agent + + def present(self, agent): + self.agent = agent + sys.stdout.write(agent.greet() + '\n') + sys.stdout.write('> ') + sys.stdout.flush() + inp = sys.stdin.readline() + while inp: + for word in agent.process_input(inp): + if word is not None: + sys.stdout.write(word) + sys.stdout.flush() + else: + print('None received.') + sys.stdout.write('\n> ') + inp = sys.stdin.readline() + + + diff --git a/stdio_presenter.py b/stdio_presenter.py new file mode 100644 index 0000000..4331067 --- /dev/null +++ b/stdio_presenter.py @@ -0,0 +1,17 @@ +import sys +from hermetic.core.agent import Agent +from hermetic.core.environment import Environment + + +class StdioPresenter: + + def present(self, env: Environment): + agent = env.primary() + sys.stdout.write(agent.greet() + '\n') + while True: + sys.stdout.write('> ') + inp = input() + for word in agent.process_input(inp): + sys.stdout.write(word) + sys.stdout.flush() + sys.stdout.write('\n') \ No newline at end of file diff --git a/tools/kalemat.py b/tools/kalemat.py index 443bc36..db00e3b 100644 --- a/tools/kalemat.py +++ b/tools/kalemat.py @@ -1,15 +1,26 @@ +from pydantic import BaseModel import requests import os -from hermetic.core.tool import Tool KALEMAT_BASE_URL='https://api.kalimat.dev/search' -NAME = 'kalemat' -class Kalemat(Tool): +class Kalemat(BaseModel): - def __init__(self, env): - super().__init__(env = env) - self.env.add_tool(NAME, self) + def get_function_description(self): + return {"name": "search_quran", + "description": "Search the Qur'an for relevant verses. This should be extracted from the question.", + "parameters": { + "type": "object", + "properties": { + "query": { + "type": "string", + "description": "The topic to search the Qur'an for ", + }, + }, + "required": ["query"], + }, + } + def __init__(self, env): self.api_key = os.environ.get('KALEMAT_API_KEY') self.base_url = KALEMAT_BASE_URL @@ -19,8 +30,7 @@ def run(self, query: str, numResults: int=5,getText: int=1): payload = { 'query': query, 'numResults': numResults, - 'getText': getText - + 'getText': getText } response = requests.get(self.base_url, headers=headers, params=payload) @@ -41,7 +51,3 @@ def pp_ayah(ayah): rstring = '\n'.join([pp_ayah(r) for r in results]) return rstring -# Example usage: -#api = KalematAPI() -#result = api.search(query='Coral', numResults=10) -#print(result) From 7eeeb4f9c65044c20ecaed676a0ff97b2cb8555b Mon Sep 17 00:00:00 2001 From: M Waleed Kadous Date: Sat, 4 Nov 2023 18:09:11 -0700 Subject: [PATCH 13/37] More fixes. --- agents/ansari_fn.py | 55 --------------------------------------------- stdio_presenter.py | 17 -------------- tools/kalemat.py | 42 +++++++++++++++++++++------------- 3 files changed, 26 insertions(+), 88 deletions(-) delete mode 100644 agents/ansari_fn.py delete mode 100644 stdio_presenter.py diff --git a/agents/ansari_fn.py b/agents/ansari_fn.py deleted file mode 100644 index 74dc7c6..0000000 --- a/agents/ansari_fn.py +++ /dev/null @@ -1,55 +0,0 @@ -from hermetic.agents.openai_chat_agent import OpenAIChatAgent -from hermetic.core.prompt_mgr import PromptMgr -from tools.kalemat import Kalemat -import json - -NAME = 'ansarifn' -class AnsariFn(OpenAIChatAgent): - def __init__(self, env): - super().__init__(model = 'gpt-4', - environment = env, id=NAME) - env.add_agent(NAME, self) - self.kalemat = self.env.tools['kalemat'] - self.pm = self.env.prompt_mgr - sys_msg = self.pm.bind('system_msg') - functions = [ - {"name": "search_quran", - "description": "Search the Qur'an for relevant verses. This should be extracted from the question.", - "parameters": { - "type": "object", - "properties": { - "query": { - "type": "string", - "description": "The topic to search the Qur'an for ", - }, - }, - "required": ["query"], - }, - } - ] - self.functions = functions - - self.message_history = [{ - 'role': 'system', - 'content': sys_msg.render() - }] - - def greet(self): - self.greeting = self.pm.bind('greeting') - return self.greeting.render() - - def process_fn_call(self, orig_question, function_name, function_arguments): - if function_name == 'search_quran': - args = json.loads(function_arguments) - query = args['query'] - qt = self.pm.bind('quran_result') - results = qt.render(kalemat_results=self.kalemat.run_as_string(query), - orig_question=orig_question) - # print(f'Function call received! Results: {results}') - return results - - - def update_message_history(self, inp): - # Explicitly do nothing, since we rely on process_message_history - pass - diff --git a/stdio_presenter.py b/stdio_presenter.py deleted file mode 100644 index 4331067..0000000 --- a/stdio_presenter.py +++ /dev/null @@ -1,17 +0,0 @@ -import sys -from hermetic.core.agent import Agent -from hermetic.core.environment import Environment - - -class StdioPresenter: - - def present(self, env: Environment): - agent = env.primary() - sys.stdout.write(agent.greet() + '\n') - while True: - sys.stdout.write('> ') - inp = input() - for word in agent.process_input(inp): - sys.stdout.write(word) - sys.stdout.flush() - sys.stdout.write('\n') \ No newline at end of file diff --git a/tools/kalemat.py b/tools/kalemat.py index db00e3b..58f47c6 100644 --- a/tools/kalemat.py +++ b/tools/kalemat.py @@ -3,11 +3,17 @@ import os KALEMAT_BASE_URL='https://api.kalimat.dev/search' -class Kalemat(BaseModel): +FN_NAME='search_quran' +class Kalemat: + + def __init__(self): + self.api_key = os.getenv('KALEMAT_API_KEY') + self.base_url = KALEMAT_BASE_URL + def get_function_description(self): - return {"name": "search_quran", - "description": "Search the Qur'an for relevant verses. This should be extracted from the question.", + return {"name": FN_NAME, + "description": "Search the Qur'an for relevant verses. Returns a list of verses. Multiple verses may be relevant.", "parameters": { "type": "object", "properties": { @@ -17,13 +23,12 @@ def get_function_description(self): }, }, "required": ["query"], - }, - } + } + } + + def get_fn_name(self): + return FN_NAME - def __init__(self, env): - self.api_key = os.environ.get('KALEMAT_API_KEY') - self.base_url = KALEMAT_BASE_URL - def run(self, query: str, numResults: int=5,getText: int=1): headers = {'x-api-key': self.api_key} @@ -40,14 +45,19 @@ def run(self, query: str, numResults: int=5,getText: int=1): return response.json() + def pp_ayah(self, ayah): + ayah_num = ayah['id'] + ayah_ar = ayah['text'] + ayah_en = ayah['en_text'] + result = f'Ayah: {ayah_num}\nArabic Text: {ayah_ar}\n\nEnglish Text: {ayah_en}\n\n' + return result + + def run_as_list(self, query: str, numResults: int=10, getText: int=1): + results = self.run(query, numResults, getText) + return [self.pp_ayah(r) for r in results] + def run_as_string(self, query: str, numResults: int=10, getText: int=1): - def pp_ayah(ayah): - ayah_num = ayah['id'] - ayah_ar = ayah['text'] - ayah_en = ayah['en_text'] - result = f'Ayah: {ayah_num}\nArabic Text: {ayah_ar}\nEnglish Text: {ayah_en}\n\n' - return result results = self.run(query, numResults, getText) - rstring = '\n'.join([pp_ayah(r) for r in results]) + rstring = '\n'.join([self.pp_ayah(r) for r in results]) return rstring From 33ec7a0931f5f962e78448897292f591a3f809d2 Mon Sep 17 00:00:00 2001 From: M Waleed Kadous Date: Sat, 4 Nov 2023 18:50:37 -0700 Subject: [PATCH 14/37] Rename to SearchQuran --- agents/ansari.py | 10 +++++----- tests/test_quran_decider.py | 16 ---------------- tools/{kalemat.py => search_quran.py} | 2 +- 3 files changed, 6 insertions(+), 22 deletions(-) delete mode 100644 tests/test_quran_decider.py rename tools/{kalemat.py => search_quran.py} (99%) diff --git a/agents/ansari.py b/agents/ansari.py index 9a88428..c659f56 100644 --- a/agents/ansari.py +++ b/agents/ansari.py @@ -33,7 +33,7 @@ def process_input(self, user_input): def process_message_history(self): # Keep processing the user input until we get something from the assistant while self.message_history[-1]['role'] != 'assistant': - print(f'Processing one round {self.message_history[-1]}') + #print(f'Processing one round {self.message_history[-1]}') # This is pretty complicated so leaving a comment. # We want to yield from so that we can send the sequence through the input yield from self.process_one_round() @@ -63,7 +63,7 @@ def process_one_round(self): function_name = delta['function_call']['name'] else: response_mode = 'words' - print('Response mode: ' + response_mode) + #print('Response mode: ' + response_mode) # We process things differently depending on whether it is a function or a # text @@ -84,7 +84,7 @@ def process_one_round(self): elif response_mode == 'fn': if not delta: # End token function_call = function_name + '(' + function_arguments + ')' - print(f"Function call is {function_call}") + # print(f"Function call is {function_call}") # The function call below appends the function call to the message history yield self.process_fn_call(input, function_name, function_arguments) # @@ -92,7 +92,7 @@ def process_one_round(self): elif 'function_call' in delta: #print(f"Function call --{delta['function_call']['arguments']}") function_arguments += delta['function_call']['arguments'] - print(f'Function arguments are {function_arguments}') + #print(f'Function arguments are {function_arguments}') yield '' # delta['function_call']['arguments'] # we shouldn't yield anything if it's a fn else: continue @@ -106,7 +106,7 @@ def process_fn_call(self, orig_question, function_name, function_arguments): args = json.loads(function_arguments) query = args['query'] results = self.tools[function_name].run_as_list(query, numResults=10) - print(f'Results are {results}') + #print(f'Results are {results}') # Now we have to pass the results back in for result in results: self.message_history.append({ diff --git a/tests/test_quran_decider.py b/tests/test_quran_decider.py deleted file mode 100644 index 6bd7b3c..0000000 --- a/tests/test_quran_decider.py +++ /dev/null @@ -1,16 +0,0 @@ -from ..agents.quran_decider import QuranDecider -from hermetic.core.environment import Environment -from hermetic.core.prompt_mgr import PromptMgr - - -def test_quran_decider(): - e = Environment(prompt_mgr=PromptMgr()) - qd = QuranDecider(e) - result = qd.process_input('Does the Quran talk about rubies?') - print(result) - assert('Yes' in result) - # Restart the servce - qd = QuranDecider(e) - result = qd.process_input('What do modern scholars think about music?') - print(result) - assert('No' in result) \ No newline at end of file diff --git a/tools/kalemat.py b/tools/search_quran.py similarity index 99% rename from tools/kalemat.py rename to tools/search_quran.py index 58f47c6..bd233e9 100644 --- a/tools/kalemat.py +++ b/tools/search_quran.py @@ -4,7 +4,7 @@ KALEMAT_BASE_URL='https://api.kalimat.dev/search' FN_NAME='search_quran' -class Kalemat: +class SearchQuran: def __init__(self): self.api_key = os.getenv('KALEMAT_API_KEY') From d84989283530d24f40a96c08cd404b4d568dc2f6 Mon Sep 17 00:00:00 2001 From: M Waleed Kadous Date: Sun, 5 Nov 2023 13:53:34 -0800 Subject: [PATCH 15/37] First working version with hadith support too! --- agents/ansari.py | 10 +++-- main_stdio.py | 7 +++ presenters/api_presenter.py | 3 -- presenters/stdio_presenter.py | 2 - resources/prompts/system_msg_fn.txt | 6 +++ tools/search_hadith.py | 68 +++++++++++++++++++++++++++++ tools/search_quran.py | 15 ++++--- 7 files changed, 95 insertions(+), 16 deletions(-) create mode 100644 main_stdio.py create mode 100644 tools/search_hadith.py diff --git a/agents/ansari.py b/agents/ansari.py index c659f56..66ca5c8 100644 --- a/agents/ansari.py +++ b/agents/ansari.py @@ -1,14 +1,16 @@ import openai from pydantic import BaseModel from util.prompt_mgr import PromptMgr -from tools.kalemat import Kalemat +from tools.search_quran import SearchQuran +from tools.search_hadith import SearchHadith import json MODEL = 'gpt-4' class Ansari: def __init__(self): - kalemat = Kalemat() - self.tools = { kalemat.get_fn_name(): kalemat} + sq = SearchQuran() + sh = SearchHadith() + self.tools = { sq.get_fn_name(): sq, sh.get_fn_name(): sh} self.model = MODEL self.pm = PromptMgr() sys_msg = self.pm.bind('system_msg_fn') @@ -105,7 +107,7 @@ def process_fn_call(self, orig_question, function_name, function_arguments): if function_name in self.tools.keys(): args = json.loads(function_arguments) query = args['query'] - results = self.tools[function_name].run_as_list(query, numResults=10) + results = self.tools[function_name].run_as_list(query) #print(f'Results are {results}') # Now we have to pass the results back in for result in results: diff --git a/main_stdio.py b/main_stdio.py new file mode 100644 index 0000000..7650424 --- /dev/null +++ b/main_stdio.py @@ -0,0 +1,7 @@ +from agents.ansari import Ansari +from presenters.stdio_presenter import StdioPresenter + +if __name__ == '__main__': + agent = Ansari() + presenter = StdioPresenter(agent) + presenter.present(agent) \ No newline at end of file diff --git a/presenters/api_presenter.py b/presenters/api_presenter.py index dcd0db8..1b61d71 100644 --- a/presenters/api_presenter.py +++ b/presenters/api_presenter.py @@ -3,9 +3,6 @@ from fastapi import FastAPI, APIRouter from fastapi.responses import StreamingResponse from pydantic import BaseModel -from agents.ansari_fn import AnsariFn -from tools.kalemat import Kalemat -from tools.kalemat import Kalemat from util.prompt_mgr import PromptMgr import uvicorn import copy diff --git a/presenters/stdio_presenter.py b/presenters/stdio_presenter.py index 9897949..d5e4228 100644 --- a/presenters/stdio_presenter.py +++ b/presenters/stdio_presenter.py @@ -16,8 +16,6 @@ def present(self, agent): if word is not None: sys.stdout.write(word) sys.stdout.flush() - else: - print('None received.') sys.stdout.write('\n> ') inp = sys.stdin.readline() diff --git a/resources/prompts/system_msg_fn.txt b/resources/prompts/system_msg_fn.txt index 9d9a505..036ce28 100644 --- a/resources/prompts/system_msg_fn.txt +++ b/resources/prompts/system_msg_fn.txt @@ -27,3 +27,9 @@ When presenting the Qur'an, present it as in the following example: Ayah: 55:22 Arabic: مِنْهُمَا يَخْرُجُ اللُّؤْلُؤُ وَالْمَرْجَانُ English: From both of them emerge pearl and coral. + +When presenting hadith, present it as in the following example: + +Collection: Muslim Chapter: 56 Hadith: 7306 LK id: 2_56_4_7306 +Abdullah b. Mas'ud reported ... +Grade: Sahih diff --git a/tools/search_hadith.py b/tools/search_hadith.py new file mode 100644 index 0000000..cf71dc4 --- /dev/null +++ b/tools/search_hadith.py @@ -0,0 +1,68 @@ +from pydantic import BaseModel +import requests +import os + +KALEMAT_BASE_URL='https://api.kalimat.dev/search' +FN_NAME='search_hadith' +class SearchHadith: + + def __init__(self): + self.api_key = os.getenv('KALEMAT_API_KEY') + self.base_url = KALEMAT_BASE_URL + + + def get_function_description(self): + return {"name": FN_NAME, + "description": "Search the Hadith for relevant narrations. Returns a list of hadith. Multiple hadith may be relevant.", + "parameters": { + "type": "object", + "properties": { + "query": { + "type": "string", + "description": "The topic to search the Hadith for ", + }, + }, + "required": ["query"], + } + } + + def get_fn_name(self): + return FN_NAME + + def run(self, query: str, numResults: int=5): + + headers = {'x-api-key': self.api_key} + payload = { + 'query': query, + 'numResults': numResults, + 'indexes': '["sunnah_lk"]', + 'getText': 2 + } + + response = requests.get(self.base_url, headers=headers, params=payload) + + if response.status_code != 200: + raise Exception(f'Request failed with status {response.status_code} {response.text}') + + return response.json() + + def pp_hadith(self, h): + en = h['en_text'] + grade = h['grade_en'].strip() + if grade: + grade = f'\nGrade: {grade}\n' + src = f"Collection: {h['source_book']} Chapter: {h['chapter_number']} Hadith: {h['hadith_number']} LK id: {h['id']}" + result = f'{src}\n{en}\n{grade}' + #print(f'Hadith is: {result}') + return result + + def run_as_list(self, query: str, num_results: int=3): + print(f'Searching hadith for "{query}"') + results = self.run(query, num_results) + return [self.pp_hadith(r) for r in results] + + def run_as_string(self, query: str, num_results: int=3): + results = self.run(query, num_results) + rstring = '\n'.join([self.pp_ayah(r) for r in results]) + return rstring + diff --git a/tools/search_quran.py b/tools/search_quran.py index bd233e9..9c3a7de 100644 --- a/tools/search_quran.py +++ b/tools/search_quran.py @@ -29,13 +29,13 @@ def get_function_description(self): def get_fn_name(self): return FN_NAME - def run(self, query: str, numResults: int=5,getText: int=1): + def run(self, query: str, num_results: int=5): headers = {'x-api-key': self.api_key} payload = { 'query': query, - 'numResults': numResults, - 'getText': getText + 'numResults': num_results, + 'getText': 1 # 1 is the Qur'an } response = requests.get(self.base_url, headers=headers, params=payload) @@ -52,12 +52,13 @@ def pp_ayah(self, ayah): result = f'Ayah: {ayah_num}\nArabic Text: {ayah_ar}\n\nEnglish Text: {ayah_en}\n\n' return result - def run_as_list(self, query: str, numResults: int=10, getText: int=1): - results = self.run(query, numResults, getText) + def run_as_list(self, query: str, num_results: int=10): + print(f'Searching quran for "{query}"') + results = self.run(query, num_results) return [self.pp_ayah(r) for r in results] - def run_as_string(self, query: str, numResults: int=10, getText: int=1): - results = self.run(query, numResults, getText) + def run_as_string(self, query: str, num_results: int=10, getText: int=1): + results = self.run(query, num_results, getText) rstring = '\n'.join([self.pp_ayah(r) for r in results]) return rstring From 754bb99f8ba403781c44604f54f781f33685439b Mon Sep 17 00:00:00 2001 From: M Waleed Kadous Date: Sat, 11 Nov 2023 13:21:21 -0800 Subject: [PATCH 16/37] Added FilePresenter for exams etc. --- agents/ansari.py | 38 +++++++++++++++++++++++++----------- main_file.py | 7 +++++++ presenters/api_presenter.py | 7 +++---- presenters/file_presenter.py | 24 +++++++++++++++++++++++ requirements.txt | 2 +- 5 files changed, 62 insertions(+), 16 deletions(-) create mode 100644 main_file.py create mode 100644 presenters/file_presenter.py diff --git a/agents/ansari.py b/agents/ansari.py index 66ca5c8..9a67704 100644 --- a/agents/ansari.py +++ b/agents/ansari.py @@ -1,3 +1,4 @@ +import time import openai from pydantic import BaseModel from util.prompt_mgr import PromptMgr @@ -41,13 +42,21 @@ def process_message_history(self): yield from self.process_one_round() def process_one_round(self): - response = openai.ChatCompletion.create( - model = self.model, - messages = self.message_history, - stream = True, - functions = self.functions, - temperature = 0.0, - ) + response = None + while not response: + try: + response = openai.ChatCompletion.create( + model = self.model, + messages = self.message_history, + stream = True, + functions = self.functions, + temperature = 0.0, + ) + except Exception as e: + print('Exception occurred: ', e) + print('Retrying in 5 seconds...') + time.sleep(5) + words = '' function_name = '' @@ -108,13 +117,20 @@ def process_fn_call(self, orig_question, function_name, function_arguments): args = json.loads(function_arguments) query = args['query'] results = self.tools[function_name].run_as_list(query) - #print(f'Results are {results}') + # print(f'Results are {results}') # Now we have to pass the results back in - for result in results: + if len(results) > 0: + for result in results: + self.message_history.append({ + 'role': 'function', + 'name': function_name, + 'content': result + }) + else: self.message_history.append({ 'role': 'function', - 'name': 'search_quran', - 'content': result + 'name': function_name, + 'content': 'No results found' }) else: print('Unknown function name: ', function_name) diff --git a/main_file.py b/main_file.py new file mode 100644 index 0000000..c5e9653 --- /dev/null +++ b/main_file.py @@ -0,0 +1,7 @@ +import typer +from presenters.file_presenter import FilePresenter +from agents.ansari import Ansari + +if __name__ == '__main__': + ansari = Ansari() + typer.run(FilePresenter(ansari).present) diff --git a/presenters/api_presenter.py b/presenters/api_presenter.py index 1b61d71..976477f 100644 --- a/presenters/api_presenter.py +++ b/presenters/api_presenter.py @@ -9,10 +9,10 @@ import os -class Messages(BaseModel): +class Messages(): messages: List[Dict] -class ApiPresenter(BaseModel): +class ApiPresenter(): def __init__(self, app, port): self.port = port self.app = app @@ -21,8 +21,7 @@ def __init__(self, app, port): def complete(self, messages: Messages): print('Complete called.') - system_prompt = self.pm.bind('system_msg_fn').render() - ans = AnsariFn() + system_prompt = self.pm.bind('system_msg_fn').render( return StreamingResponse(ans.process_message_history(messages.messages, system_prompt)) def present(self): diff --git a/presenters/file_presenter.py b/presenters/file_presenter.py new file mode 100644 index 0000000..e0e5607 --- /dev/null +++ b/presenters/file_presenter.py @@ -0,0 +1,24 @@ +import copy +import os + +class FilePresenter: + def __init__(self, agent): + self.agent = agent + + def present(self, input_file_path, output_file_path): + # Read lines from input file + with open(input_file_path, 'r') as input_file: + lines = input_file.readlines() + + # Send each line to agent and get result + with open(output_file_path, 'w+') as output_file: + for line in lines: + print(f'Answering: {line}') + agent = copy.deepcopy(self.agent) + # Drop none that occurs between answers. + result = [x for x in agent.process_input(line) if x] + answer = ''.join(result) + (question, answer) = (line.strip(), answer) + output_file.write(f'## {question}\n\n{answer}\n\n') + output_file.flush() + print(f'Result saved to {os.path.abspath(output_file_path)}') diff --git a/requirements.txt b/requirements.txt index aa62e5f..5c24de3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,6 +9,6 @@ fastapi uvicorn gunicorn discord.py -git+https://github.com/anyscale/hermetic.git +typer From 5c7484dc9384f8d40970986981c2996e007a7abe Mon Sep 17 00:00:00 2001 From: M Waleed Kadous Date: Sat, 11 Nov 2023 14:19:45 -0800 Subject: [PATCH 17/37] First version based on new build. --- Procfile | 4 +- agents/ansari.py | 4 +- main_discord.py | 11 ++++ main_gradio.py | 8 +++ main_stdio.py | 2 +- presenters/discord_presenter.py | 68 +++------------------ presenters/gradio_presenter.py | 104 ++++++++++++++++++++++++++++++++ presenters/stdio_presenter.py | 7 +-- requirements.txt | 4 +- 9 files changed, 141 insertions(+), 71 deletions(-) create mode 100644 main_discord.py create mode 100644 main_gradio.py create mode 100644 presenters/gradio_presenter.py diff --git a/Procfile b/Procfile index aef24a7..de9a332 100644 --- a/Procfile +++ b/Procfile @@ -1,3 +1 @@ -web: gunicorn -w 4 -k uvicorn.workers.UvicornWorker api_presenter:app - - +web: source setup.sh && python main_gradio.py & python main_discord.py & wait diff --git a/agents/ansari.py b/agents/ansari.py index 9a67704..281a873 100644 --- a/agents/ansari.py +++ b/agents/ansari.py @@ -1,10 +1,10 @@ import time -import openai from pydantic import BaseModel from util.prompt_mgr import PromptMgr from tools.search_quran import SearchQuran from tools.search_hadith import SearchHadith import json +from litellm import completion MODEL = 'gpt-4' class Ansari: @@ -45,7 +45,7 @@ def process_one_round(self): response = None while not response: try: - response = openai.ChatCompletion.create( + response = completion( model = self.model, messages = self.message_history, stream = True, diff --git a/main_discord.py b/main_discord.py new file mode 100644 index 0000000..be068d1 --- /dev/null +++ b/main_discord.py @@ -0,0 +1,11 @@ +from presenters.discord_presenter import DiscordPresenter +from agents.ansari import Ansari +import os + + +# This work involves 3 agents, with Ansari as primary. +agent = Ansari() +presenter = DiscordPresenter(agent, token=os.getenv('DISCORD_TOKEN')) + +# This starts the UI. +presenter.present() \ No newline at end of file diff --git a/main_gradio.py b/main_gradio.py new file mode 100644 index 0000000..cb65785 --- /dev/null +++ b/main_gradio.py @@ -0,0 +1,8 @@ +from agents.ansari import Ansari +from presenters.gradio_presenter import GradioPresenter + +if __name__ == '__main__': + agent = Ansari() + presenter = GradioPresenter(agent, app_name='Ansari', + favicon_path='./favicon.ico',) + presenter.present() \ No newline at end of file diff --git a/main_stdio.py b/main_stdio.py index 7650424..046bd06 100644 --- a/main_stdio.py +++ b/main_stdio.py @@ -4,4 +4,4 @@ if __name__ == '__main__': agent = Ansari() presenter = StdioPresenter(agent) - presenter.present(agent) \ No newline at end of file + presenter.present() \ No newline at end of file diff --git a/presenters/discord_presenter.py b/presenters/discord_presenter.py index 2935afd..14c2ec8 100644 --- a/presenters/discord_presenter.py +++ b/presenters/discord_presenter.py @@ -1,25 +1,15 @@ import discord from dotenv import load_dotenv import os -from agents.ansari_langchain import AnsariLangchain -from agents.quran_decider import QuranDecider -from agents.query_extractor import QueryExtractor -from tools.kalemat import Kalemat -from hermetic.core.environment import Environment -from hermetic.stores.file_store import FileStore -from hermetic.core.prompt_mgr import PromptMgr -from hermetic.core.presenter import Presenter +from tools.search_hadith import SearchHadith +from tools.search_quran import SearchQuran import time import copy - -load_dotenv('/Users/mwk/Development/ansari/.env') - class MyClient(discord.Client): - def __init__(self, env, intents): - self.env = env + def __init__(self, agent, intents): super().__init__(intents=intents) - + self.agent = agent async def on_ready(self): print(f'We have logged in as {self.user}') @@ -27,7 +17,7 @@ async def on_ready(self): async def on_message(self, message): if message.author == self.user: return - agent = copy.deepcopy(self.env.agents[self.env.primary_agent]) + agent = copy.deepcopy(self.agent) print(f'User said: {message.content} and mentioned {message.mentions}') st = time.time() if isinstance(message.channel,discord.channel.DMChannel) or \ @@ -55,53 +45,13 @@ async def on_message(self, message): print(f'Got a message. Not for me: {message.content}') -class DiscordPresenter(Presenter): - def __init__(self, env, token): - self.env = env +class DiscordPresenter(): + def __init__(self, agent, token): + self.agent = agent self.token = token intents = discord.Intents.default() intents.message_content = True - self.client = MyClient(env = self.env, intents=intents) + self.client = MyClient(agent=agent, intents=intents) def present(self): self.client.run(self.token) - - - - -''' -client = discord.Client(intents=intents) - -@client.event -async def on_ready(): - print(f'We have logged in as {client.user}') - -@client.event -async def on_message(message): - if message.author == client.user: - return - - print('User said: ', message.content) - await message.channel.send(f'Hello! You said: {message.content}') - -client.run(os.getenv('DISCORD_TOKEN')) -''' - -env = Environment(store = FileStore(root_dir = 'ansari-stores'), - prompt_mgr = PromptMgr(hot_reload=True)) - -# This work involves 3 agents, with Ansari as primary. -ansari = AnsariLangchain(env) -env.set_primary_agent('ansari-langchain') -decider = QuranDecider(env) -query_extractor = QueryExtractor(env) - -# We also use one tool, which is Kalemat lookup -kalemat = Kalemat(env) - - - -presenter = DiscordPresenter(env=env, token=os.getenv('DISCORD_TOKEN')) - -# This starts the UI. -presenter.present() diff --git a/presenters/gradio_presenter.py b/presenters/gradio_presenter.py new file mode 100644 index 0000000..9c46c17 --- /dev/null +++ b/presenters/gradio_presenter.py @@ -0,0 +1,104 @@ +import gradio as gr +from threading import Thread +from multiprocessing import Queue +import uuid +import copy + +CSS =""" +.contain { display: flex; flex-direction: column; } +#component-0 { height: 100%; flex-grow: 1; } +#chatbot { flex-grow: 1; overflow: auto;} +""" + +class GradioPresenter(): + def __init__(self, agent, app_name, favicon_path): + self.agent = agent + self.app_name = app_name + self.favicon_path = favicon_path + + def present(self): + self.instances = {} + self.histories = {} + + def generate_session_id(): + return str(f'{uuid.uuid4()}') + + def append_flag(msg): + msg = msg + 'Please flag this. ' + + def clear_contents(msg): + return '' + + with gr.Blocks(title=self.app_name, css=CSS) as app: + # Note: Gradio Presenter is incredibly confusing. + # We can't pass agents because they are not serializable. + # instead what we do is that we maintain a dictionary of + # LangChainChatAgents by uuid. + my_uuid = gr.State(generate_session_id) + + + chatbot = gr.Chatbot([['', self.agent.greet()]], elem_id="chatbot", line_breaks=True) + msg = gr.Textbox(show_label=False, scale=10) + with gr.Row(): + clr = gr.Button(value="Clear", size="sm", scale=1, variant="secondary", elem_id="clr") + btn = gr.Button(value="Send", size="sm", scale=2, variant="primary", elem_id="btn") + + + def user(user_message, history, my_uuid): + if self.instances.get(my_uuid) is None: + self.instances[my_uuid] = copy.deepcopy(self.agent) + self.instances[my_uuid].session_tag = f'ses_{my_uuid}' + self.histories[my_uuid] =[['', self.agent.greet()]] + self.histories[my_uuid].append([user_message,None]) + print('history is ', self.histories[my_uuid]) + return "", self.histories[my_uuid], my_uuid + + def bot(history,my_uuid): + # Check if we've seen this uuid before. If not, greet then add to instances + if self.instances.get(my_uuid) is None: + self.instances[my_uuid] = copy.deepcopy(self.agent) + self.instances[my_uuid].session_tag = f'ses_{my_uuid}' + self.histories[my_uuid] =[['', self.agent.greet()]] + instance = self.instances[my_uuid] + history = self.histories[my_uuid] + + history[-1][1] = '' + print(f'history is {history}') + for word in instance.process_input(history[-1][0]): + history[-1][1] += word + yield history, my_uuid + + msg.submit(fn=user, + inputs=[msg, chatbot, my_uuid], + outputs=[msg, chatbot, my_uuid], queue=False).then( + fn=bot, + inputs=[chatbot, my_uuid], + outputs=[chatbot, my_uuid]) + + # Clicking on the button does the same thing as submitting. + btn.click(fn=user, + inputs=[msg, chatbot, my_uuid], + outputs=[msg, chatbot, my_uuid], queue=False).then( + fn=bot, + inputs=[chatbot, my_uuid], + outputs=[chatbot, my_uuid]) + + clr.click(fn=clear_contents, + inputs=[msg], + outputs=[msg], + queue = False) + + if self.favicon_path: + app.launch(favicon_path=self.favicon_path) + else: + app.launch() + + + + + + + + + + \ No newline at end of file diff --git a/presenters/stdio_presenter.py b/presenters/stdio_presenter.py index d5e4228..a098337 100644 --- a/presenters/stdio_presenter.py +++ b/presenters/stdio_presenter.py @@ -5,14 +5,13 @@ class StdioPresenter: def __init__(self, agent): self.agent = agent - def present(self, agent): - self.agent = agent - sys.stdout.write(agent.greet() + '\n') + def present(self): + sys.stdout.write(self.agent.greet() + '\n') sys.stdout.write('> ') sys.stdout.flush() inp = sys.stdin.readline() while inp: - for word in agent.process_input(inp): + for word in self.agent.process_input(inp): if word is not None: sys.stdout.write(word) sys.stdout.flush() diff --git a/requirements.txt b/requirements.txt index 5c24de3..f94ebda 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,6 @@ gradio>=3.42.0 gradio_client>=0.2.5 -langchain -openai +openai<1.0.0 tiktoken rich pyislam @@ -10,5 +9,6 @@ uvicorn gunicorn discord.py typer +litellm From 5edc67dd23f7843e4e81cd17b90e2af790b78288 Mon Sep 17 00:00:00 2001 From: M Waleed Kadous Date: Sat, 11 Nov 2023 16:14:30 -0800 Subject: [PATCH 18/37] Add util. --- util/prompt_mgr.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 util/prompt_mgr.py diff --git a/util/prompt_mgr.py b/util/prompt_mgr.py new file mode 100644 index 0000000..e7255c9 --- /dev/null +++ b/util/prompt_mgr.py @@ -0,0 +1,33 @@ + +from pydantic import BaseModel +from typing import Union + + +class Prompt(BaseModel): + file_path: str + cached: Union[str, None] = None + hot_reload: bool = True + + def render(self, **kwargs) -> str: + if (self.cached is None) or (self.hot_reload): + with open(self.file_path, 'r') as f: + self.cached = f.read() + return self.cached.format(**kwargs) + + +class PromptMgr(): + def __init__(self, hot_reload: bool = True, src_dir: str = 'resources/prompts'): + """ Creates a prompt manager. + + Args: + hot_reload: If true, reloads the prompt every time it is called. + src_dir: The directory where the prompts are stored. + + """ + self.hot_reload = hot_reload + self.src_dir = src_dir + + def bind(self, prompt_id: str) -> Prompt: + return Prompt(file_path = f'{self.src_dir}/{prompt_id}.txt', + hot_reload=self.hot_reload) + From eb602d897254d28024c9a8199afb6c4c380a8b2e Mon Sep 17 00:00:00 2001 From: M Waleed Kadous Date: Sun, 12 Nov 2023 10:51:10 -0800 Subject: [PATCH 19/37] Correcting issues with gradio. --- agents/ansari.py | 14 ++++++++------ presenters/gradio_presenter.py | 2 ++ requirements.txt | 4 +--- resources/prompts/greeting.txt | 2 +- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/agents/ansari.py b/agents/ansari.py index 281a873..6d48ecc 100644 --- a/agents/ansari.py +++ b/agents/ansari.py @@ -4,7 +4,8 @@ from tools.search_quran import SearchQuran from tools.search_hadith import SearchHadith import json -from litellm import completion +import openai + MODEL = 'gpt-4' class Ansari: @@ -36,7 +37,8 @@ def process_input(self, user_input): def process_message_history(self): # Keep processing the user input until we get something from the assistant while self.message_history[-1]['role'] != 'assistant': - #print(f'Processing one round {self.message_history[-1]}') + #print(f'Processing one round {self.message_history}') + # This is pretty complicated so leaving a comment. # We want to yield from so that we can send the sequence through the input yield from self.process_one_round() @@ -45,7 +47,7 @@ def process_one_round(self): response = None while not response: try: - response = completion( + response = openai.ChatCompletion.create( model = self.model, messages = self.message_history, stream = True, @@ -63,7 +65,7 @@ def process_one_round(self): function_arguments = '' response_mode = '' # words or fn for tok in response: - #print('Token received: ' + str(tok)) + #print(f'Token received: {tok.choices[0].delta}') delta = tok.choices[0].delta if not response_mode: # This code should only trigger the first @@ -74,7 +76,7 @@ def process_one_round(self): function_name = delta['function_call']['name'] else: response_mode = 'words' - #print('Response mode: ' + response_mode) + print('Response mode: ' + response_mode) # We process things differently depending on whether it is a function or a # text @@ -95,7 +97,7 @@ def process_one_round(self): elif response_mode == 'fn': if not delta: # End token function_call = function_name + '(' + function_arguments + ')' - # print(f"Function call is {function_call}") + print(f'Function call is {function_call}') # The function call below appends the function call to the message history yield self.process_fn_call(input, function_name, function_arguments) # diff --git a/presenters/gradio_presenter.py b/presenters/gradio_presenter.py index 9c46c17..3861eaa 100644 --- a/presenters/gradio_presenter.py +++ b/presenters/gradio_presenter.py @@ -65,6 +65,8 @@ def bot(history,my_uuid): history[-1][1] = '' print(f'history is {history}') for word in instance.process_input(history[-1][0]): + if word is None: + continue history[-1][1] += word yield history, my_uuid diff --git a/requirements.txt b/requirements.txt index f94ebda..dc99cb1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,6 +9,4 @@ uvicorn gunicorn discord.py typer -litellm - - +litellm \ No newline at end of file diff --git a/resources/prompts/greeting.txt b/resources/prompts/greeting.txt index d2032b0..f96cc67 100644 --- a/resources/prompts/greeting.txt +++ b/resources/prompts/greeting.txt @@ -1,5 +1,5 @@ Assalamu alaikum! My name is Ansari. I can help you with your questions about Islam. -sajdah + Ask me about: - Dua to make in particular situation From 9b6b18d810f934e89da7564cea7d43590a330d7d Mon Sep 17 00:00:00 2001 From: M Waleed Kadous Date: Tue, 14 Nov 2023 11:46:29 -0800 Subject: [PATCH 20/37] Trying to debug issue. --- agents/ansari.py | 1 + presenters/gradio_presenter.py | 2 +- runtime.txt | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 runtime.txt diff --git a/agents/ansari.py b/agents/ansari.py index 6d48ecc..7eb963a 100644 --- a/agents/ansari.py +++ b/agents/ansari.py @@ -8,6 +8,7 @@ MODEL = 'gpt-4' +MAX_FUNCTION_TRIES = 3 class Ansari: def __init__(self): sq = SearchQuran() diff --git a/presenters/gradio_presenter.py b/presenters/gradio_presenter.py index 3861eaa..af562af 100644 --- a/presenters/gradio_presenter.py +++ b/presenters/gradio_presenter.py @@ -73,7 +73,7 @@ def bot(history,my_uuid): msg.submit(fn=user, inputs=[msg, chatbot, my_uuid], outputs=[msg, chatbot, my_uuid], queue=False).then( - fn=bot, + fn=bot, inputs=[chatbot, my_uuid], outputs=[chatbot, my_uuid]) diff --git a/runtime.txt b/runtime.txt new file mode 100644 index 0000000..dfe813b --- /dev/null +++ b/runtime.txt @@ -0,0 +1 @@ +python-3.11.6 \ No newline at end of file From dc2284cb2906a20b3376fd0eaecc5e0030cf1415 Mon Sep 17 00:00:00 2001 From: M Waleed Kadous Date: Tue, 14 Nov 2023 18:01:14 -0800 Subject: [PATCH 21/37] First UI build. --- build/asset-manifest.json | 36 ++++++++ build/icon-192x192.png | Bin 0 -> 43691 bytes build/icon-256x256.png | Bin 0 -> 68059 bytes build/icon-512x512.png | Bin 0 -> 176172 bytes build/index.html | 1 + build/logo-512_x_512.png | Bin 0 -> 10020 bytes build/manifest.json | 28 ++++++ build/robots.txt | 3 + build/service-worker.js | 2 + build/service-worker.js.map | 1 + build/static/css/main.634cee6a.css | 4 + build/static/css/main.634cee6a.css.map | 1 + build/static/js/496.0908b6ad.chunk.js | 2 + build/static/js/496.0908b6ad.chunk.js.map | 1 + build/static/js/main.3b96aaec.js | 3 + build/static/js/main.3b96aaec.js.LICENSE.txt | 84 ++++++++++++++++++ build/static/js/main.3b96aaec.js.map | 1 + ...sktop.63102f795f5cdd4cfa1507c0e1dc29cc.svg | 3 + ...obile.5cf58a2558b421d9a7efa7bdc0146a76.svg | 3 + ...Image.a6ecb59e7fceee8ba332e72a9a2a7fa1.svg | 9 ++ ...lenge.c51044e733b61899e430f4556dfd6bf7.svg | 23 +++++ .../chat.619701281b91114d8f1bc63449c03a13.svg | 8 ++ ...eLine.fc758875b883cdd0d49d26825c3724b1.svg | 6 ++ ...eLogo.316705e3d9f51e155685d95c54b5978c.svg | 19 ++++ .../flag.9e5f16974d8d9499372259788a3ffaf2.svg | 5 ++ ...ation.57276f59a016eab0e6ea703416008442.svg | 14 +++ ...Green.184e83d6d39aa7c53bac1697e460e0e9.svg | 7 ++ ...guage.d2b30058380c7654f198f42db4e81c50.svg | 34 +++++++ ...Green.3fa8c8ef5414b2efa242e23ddf1a283a.svg | 34 +++++++ ...ading.d0f5c7e6f03330f1e6c74bdb3be06fa3.svg | 19 ++++ .../logo.7b5ec47fe8c8f9f97ba3d333cc377e3c.svg | 13 +++ ...oader.829e7dc0c1aadbd86f67988cb85d2769.svg | 13 +++ ...eLeft.1e428e58000e7e2443d099452acbae53.svg | 5 ++ ...Right.4b340c003efd041aa251d78b317b4923.svg | 7 ++ ...aying.d21207ea569cad47cc61aa8c7cf53aad.svg | 11 +++ .../user.1f5def49ba3a194081bdb4fb610cef60.svg | 11 +++ ...ircle.13bdef0766f4b31b03c20eff816b0439.svg | 7 ++ 37 files changed, 418 insertions(+) create mode 100644 build/asset-manifest.json create mode 100644 build/icon-192x192.png create mode 100644 build/icon-256x256.png create mode 100644 build/icon-512x512.png create mode 100644 build/index.html create mode 100644 build/logo-512_x_512.png create mode 100644 build/manifest.json create mode 100644 build/robots.txt create mode 100644 build/service-worker.js create mode 100644 build/service-worker.js.map create mode 100644 build/static/css/main.634cee6a.css create mode 100644 build/static/css/main.634cee6a.css.map create mode 100644 build/static/js/496.0908b6ad.chunk.js create mode 100644 build/static/js/496.0908b6ad.chunk.js.map create mode 100644 build/static/js/main.3b96aaec.js create mode 100644 build/static/js/main.3b96aaec.js.LICENSE.txt create mode 100644 build/static/js/main.3b96aaec.js.map create mode 100644 build/static/media/ansariWordDesktop.63102f795f5cdd4cfa1507c0e1dc29cc.svg create mode 100644 build/static/media/ansariWordMobile.5cf58a2558b421d9a7efa7bdc0146a76.svg create mode 100644 build/static/media/backgroundImage.a6ecb59e7fceee8ba332e72a9a2a7fa1.svg create mode 100644 build/static/media/challenge.c51044e733b61899e430f4556dfd6bf7.svg create mode 100644 build/static/media/chat.619701281b91114d8f1bc63449c03a13.svg create mode 100644 build/static/media/chatDeleteLine.fc758875b883cdd0d49d26825c3724b1.svg create mode 100644 build/static/media/compositeLogo.316705e3d9f51e155685d95c54b5978c.svg create mode 100644 build/static/media/flag.9e5f16974d8d9499372259788a3ffaf2.svg create mode 100644 build/static/media/information.57276f59a016eab0e6ea703416008442.svg create mode 100644 build/static/media/informationGreen.184e83d6d39aa7c53bac1697e460e0e9.svg create mode 100644 build/static/media/language.d2b30058380c7654f198f42db4e81c50.svg create mode 100644 build/static/media/languageGreen.3fa8c8ef5414b2efa242e23ddf1a283a.svg create mode 100644 build/static/media/loading.d0f5c7e6f03330f1e6c74bdb3be06fa3.svg create mode 100644 build/static/media/logo.7b5ec47fe8c8f9f97ba3d333cc377e3c.svg create mode 100644 build/static/media/messageLoader.829e7dc0c1aadbd86f67988cb85d2769.svg create mode 100644 build/static/media/paperPlaneLeft.1e428e58000e7e2443d099452acbae53.svg create mode 100644 build/static/media/paperPlaneRight.4b340c003efd041aa251d78b317b4923.svg create mode 100644 build/static/media/praying.d21207ea569cad47cc61aa8c7cf53aad.svg create mode 100644 build/static/media/user.1f5def49ba3a194081bdb4fb610cef60.svg create mode 100644 build/static/media/warningCircle.13bdef0766f4b31b03c20eff816b0439.svg diff --git a/build/asset-manifest.json b/build/asset-manifest.json new file mode 100644 index 0000000..5176f3e --- /dev/null +++ b/build/asset-manifest.json @@ -0,0 +1,36 @@ +{ + "files": { + "main.css": "http://localhost:3000/static/css/main.634cee6a.css", + "main.js": "http://localhost:3000/static/js/main.3b96aaec.js", + "static/js/496.0908b6ad.chunk.js": "http://localhost:3000/static/js/496.0908b6ad.chunk.js", + "static/media/compositeLogo.svg": "http://localhost:3000/static/media/compositeLogo.316705e3d9f51e155685d95c54b5978c.svg", + "static/media/backgroundImage.svg": "http://localhost:3000/static/media/backgroundImage.a6ecb59e7fceee8ba332e72a9a2a7fa1.svg", + "service-worker.js": "http://localhost:3000/service-worker.js", + "static/media/challenge.svg": "http://localhost:3000/static/media/challenge.c51044e733b61899e430f4556dfd6bf7.svg", + "static/media/ansariWordMobile.svg": "http://localhost:3000/static/media/ansariWordMobile.5cf58a2558b421d9a7efa7bdc0146a76.svg", + "static/media/ansariWordDesktop.svg": "http://localhost:3000/static/media/ansariWordDesktop.63102f795f5cdd4cfa1507c0e1dc29cc.svg", + "static/media/logo.svg": "http://localhost:3000/static/media/logo.7b5ec47fe8c8f9f97ba3d333cc377e3c.svg", + "static/media/loading.svg": "http://localhost:3000/static/media/loading.d0f5c7e6f03330f1e6c74bdb3be06fa3.svg", + "static/media/languageGreen.svg": "http://localhost:3000/static/media/languageGreen.3fa8c8ef5414b2efa242e23ddf1a283a.svg", + "static/media/language.svg": "http://localhost:3000/static/media/language.d2b30058380c7654f198f42db4e81c50.svg", + "static/media/praying.svg": "http://localhost:3000/static/media/praying.d21207ea569cad47cc61aa8c7cf53aad.svg", + "static/media/user.svg": "http://localhost:3000/static/media/user.1f5def49ba3a194081bdb4fb610cef60.svg", + "static/media/chat.svg": "http://localhost:3000/static/media/chat.619701281b91114d8f1bc63449c03a13.svg", + "static/media/paperPlaneRight.svg": "http://localhost:3000/static/media/paperPlaneRight.4b340c003efd041aa251d78b317b4923.svg", + "static/media/paperPlaneLeft.svg": "http://localhost:3000/static/media/paperPlaneLeft.1e428e58000e7e2443d099452acbae53.svg", + "static/media/warningCircle.svg": "http://localhost:3000/static/media/warningCircle.13bdef0766f4b31b03c20eff816b0439.svg", + "static/media/messageLoader.svg": "http://localhost:3000/static/media/messageLoader.829e7dc0c1aadbd86f67988cb85d2769.svg", + "static/media/information.svg": "http://localhost:3000/static/media/information.57276f59a016eab0e6ea703416008442.svg", + "index.html": "http://localhost:3000/index.html", + "static/media/informationGreen.svg": "http://localhost:3000/static/media/informationGreen.184e83d6d39aa7c53bac1697e460e0e9.svg", + "static/media/chatDeleteLine.svg": "http://localhost:3000/static/media/chatDeleteLine.fc758875b883cdd0d49d26825c3724b1.svg", + "static/media/flag.svg": "http://localhost:3000/static/media/flag.9e5f16974d8d9499372259788a3ffaf2.svg", + "main.634cee6a.css.map": "http://localhost:3000/static/css/main.634cee6a.css.map", + "main.3b96aaec.js.map": "http://localhost:3000/static/js/main.3b96aaec.js.map", + "496.0908b6ad.chunk.js.map": "http://localhost:3000/static/js/496.0908b6ad.chunk.js.map" + }, + "entrypoints": [ + "static/css/main.634cee6a.css", + "static/js/main.3b96aaec.js" + ] +} \ No newline at end of file diff --git a/build/icon-192x192.png b/build/icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..968b2c981f60a041eb6436e6587fbacbbe84adef GIT binary patch literal 43691 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 literal 0 HcmV?d00001 diff --git a/build/icon-256x256.png b/build/icon-256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..95644b3cfaa8d8e50279cb23ce0cf07c5cff20fe GIT binary patch literal 68059 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�dxbS*0<2&~b~c?Dd>~4}IK1|kL@4(Fqn0xplMMah z^11**bW`}GIQH_ttCu;0o6Eh5i^uwzL(*@eOA46EDa5Z}&$&q|maQ5-=Xz z&c5RG+`|O$3PfXyY@(b>XZ@>j!c5`a1H9`mW9sb`Md-nK4itc@+TQG1wJ!$XcF6=rTrx>u% zwcOy|*LOj3>lIF^vM$a+cqI3A{oF{__WwQN&gotTjBp%x{b{PQ>RDEwgsk=)fYRG? z6c(o%9C?O2*$and{$UT`ONfp!ntGjE(PNIQFywi>Rj;rlLTDYz4OMb==oP^izzQqK zj;$8J4}ZeFXp__Fta}irX0wE)SA>53kU6){$a%b`S;QxyPx6`v2G`?IkH8X!qv7=Gb!S-&Bu$pJw<0cch(f zSYcI^bpv>9thDd4$u`0eLQ^fP;)GcGt>;8ca~bZXAf|<1{)ENu7JUfaBJ^92{>~%V zdWBUSD$`mEM#w}7ed4Ac3;#`-Iep=9T^=TYFSB%Vc!1gFB#W_dS{$m3Ej1qzCsn1E z)ts;_2k_5R+3wr*DFPpC<_JxB8(XUoddhI!G7LLh^T5%G!+M3|fNeHY$#M&kd)-)} zzkZF?{JU;ikjj7UiExSlCFcq2s#xn-4||$<>TJ^EEmh=S{Rm^6E&EpK=mP|QMU+}) zm-6F#8*^#W=mvT;VLG_TlKzAT(I(kgF-P`MpwrI$BCz=D|Ae1!(c?i6&Tg$oNs}w7 zJFmyh&hH+U{D%qPpD{MtXypId(>nfqWQE(o1WO2W2m>3F^oAc0r2dP0$UV(6S!v^}2*k;6ub9(2 zfh{c16qj(SfXO_5rYCY3hfTmQH|kRyM>#G~Q$sUQFaMn79-$3ADZhW66!(kjIfPanz0ALI=9T$GL zCIXYuH5-B%DGi#+G|WF20=5^m#+e5D9MqxlPNR;>AA+#KI-#@s8u z_q#p$_av!FN*G33ZQMNi&Z{fQeV70a<8wvR>Fo~-+c4xNZuDowVeNguDzpUF5msVh z^~eR{@ESSscoU^133vDF~bZL-$9mOv%7$5i$z% zvdN-u($Wt4MHoV{zU6NA-GeKc-+YA0Zqnl$av0~kx9Rl%j;BeXmM?PSvs@Pr<1hgn z#^)`4uhNCjS%h_zOn#hCKKFBcL`F9`DMHUy#Q<0pmQ2iS?%mHnTd$Y-mW9X&CH1%) zeD`;M_dkr^PaFb)UZrg9J2ads7X4!VhE!jFx_TAAEkmzbudaYxf_2yj8Md%M9rtJ5fwiZfV!z_A1oyEhdDP0CWUOQ=8Z`#`< zY)m~nt+c542Mq#@D2@5ijg1zF&%C&bqe!%@mWB=j{X2|!lS?(vewzc57QU_|47`|= z-LDICC0)*X*Y(!-SKqHUVNB@ShHK2fv%5$I`nZ9i60(zJ z>{&VMaaeI#nD|$(K;_0vk~uY~Cl}?U6YRj=at@h4R_&X* zKZi=+)7fdFC!jL2>mRmfPr4rp9#K_^n)q8HNuY|}uu0(ZBH*Sz2t||;@;vD^r%z@@ zwK!si@EAyw&LAcOCR?kdqhYg|IYarfK1qxf@4< z3u((8h35O=`{wGq%(~yJd07`gzo0CF0yCHvFD&D;fK=LBQSkCOCtw6;=UqJgp{MpSW zMv}KPE}GJ{_n5c9-mBN}Z+#_t*w~5m*t;th!wGE=W5f;BjGJr80XW`_=;?7?4?q5!`Fi&3zqGxNraRwkN*``g)dXFJ$vrNGN}~@ z>qGbNkCP2$M$bLA>KN_-HF|~0*$RDlHLfS>dc|cBOn9zt?%64T65%@d7ua}=5#MNy zmz15UWx@V|>zW?F8=`7`!h6atlTICSMx0xEK*PQ`Nf0iM>wf@ouuZk1I}ksu!GFC? z{85?7ZTucF&Q!u1_!hf@;P@Wj$GLrvn2q&fK||djrB5*!T(54|D)g1!SYs%R4WG0K zv#RQfdPpRPacGFOj>NwI!QxzUC-ypqAY0)^n}ldZI9`Q3Iet=UzS7#CgM0FT@)m=t z`2E1?YonwRI}jG4YDP9*VzBLOarIZ*#D4%vPmA0UqKQpohO0`n9+%F>SlPN9)xcb5 zX5}J;5y2hFHjox%P}|pe1@nyezJF#JbW4*lg*fLCiyU=&#Bgqo>(t}QK_y#xe=fsv zvWa*KrdrTv95QfgxyX(B)~xp&_a3GDx!=!GtAPAai>^K-nB+*Nn2L9^0^3Gkmso|) z)%xyVAfo>zJPC-w3SaxTC(;3hk$Z1u6{L&r?F>#qxTs1w-B9t6G%9LID1qf%wgjnc z?#iAN(b4IOYLb#L|A@aCtp|NC5y78+VB?g_!R>R(z}Ko6&F^2SL&$PyvCJ(O&3@=6 zI8XpmxINRoaP?KH9R$s+_Yax|phUR-B^26ewAAsdK9iy2c?|nOZ^O)fP4>8dtrWW% zu(FhI2CFzO`++1y8>sQTEwdcCMN%6FR@@`sd>V3OLFKqw1Q<}0Z47VR8pl+3FjOb< z4trM`)4sY+_SJ5mNS~OPCw@BUvQn8IfFk++5p901Z!;%5+J@6KrSA=qaw<#%iWlWi zN;^tx7PRgAN&pOl)}WGK!H(yIwu|z=So}`e^oL`|H4287X_&UgU@Yeg`Zab|5D`oh z4tm@xv5l!iW1d~uedy#E=7;s(7;HhZz>NB*_b>NG{JXZgs?!BHXK8~!f z>>xRzm@Jn$YzitO*`<7~FsGTz0drMsSM{Qso?l3tz7$G*(>K0-5c2!QF!l^A^3EE1%k4+8~k(s}=qgG-n(7^^!NDre7R-rlcA%OXdBP=_9*NnXtWmrugaX#Ir|0%266VvE|u4`5?HES7)2= zbCkacs0I_eW-3!`#C(Pj4*jz2?lNyBkBX|AW(^yty>Iq(1(<)v!RE-2z@q7QGhHOW zr$Cfavl-nVjPi1t^3|P$h=cw9@4)@(-%ivaZ=ZG8Q%Wfwj1bOsf0KvulX2rQ*qt+c z`0i)ZOK8vfNS#32Jpgsb7!7VY0(V(<x|{+aBVF zD$a$JW`EYl-$vvbE}Z{;!GKzEn=Lle@d>`Tk@mr+frU~C?JJCwlRF^Sdf(1}05Y{1 zC6{#1!ar=ZG-={0(heJrpQ zV0%rPde-Rf8xB;TrxWY>2poIt4ZVw-E6j1z>w(KmxA8kI9)A%%GptkDHvrQ{@cA&p z;fNJ&UHr7~;$D_yL)cC5i^}Tlt18R53(2JO2W)@f;Ymw{`Al&Ds$bCPt3x$tH!925 z$z!+!mvmp_bdqd^O3l-~M0-t7G$3Eh?h>0Gi%8k6?vDoZm6#nVoxSOH)&mLB2`>*E z85D|VwcY@F3h6!+9!nRT-_&kwc9Nzaf6RYjVt6Qy#pRaTe!`FYfc?z#6*ObJ576&!7%#kKh|p=A zH!pSi5sG3x62yFGI(PYY$m`D6su<}|ttaISQY-R1dm1gOnX(x3e2f0(i{@HPL+5b{ zrhVR6alCtL=npxF>W-Qw=Z`91^jd6=u2^1F1Nd@TBdg_f$(g&!y%L2Kex7%FmbcmE zKpNwNY_Z588O?g&7q;6o`Sp9!S7gjttWI2$J^6UIcA6WLE%#5SQT8c#M5!>3=Yn-r z!gSB<@!)6xiuPY2{8PAc1eE9&(u7aH@n)?uD>s;$vw1DcKs>UBr>G%dT=lhJ0^)|nUx6P&%awZRv zSxedtR~DdWz)}Of#N~)n*K_S9{M;_oxZrB-na-f!%yt(f$U15=Cp=IBv;(iNN{r|0xrqxlc1JbP>p(`M39wv2??{ z4JDH5=PO@@w%4Q#*Pe-ByGnK(tk*{nL~ocf9Fd6K19X>m6@8%{Y$a_|g0Id;KD|9A zDzUNohe>JKP&cyk7S?owj_}H;t%twp>Z<8(7|>eziTP)C$Hb5JXdT<12#dG8=&+Pi zM;pu!-~t-LWb~C4Qm?vDBX+LUju#2eN@|k0?Sx)G$F~Tfjpx1HE=T0X8gvSsY9UUm zqnc3vWVSvipUraMaX!(;nG7iD=1@eH8=^JkK4Rr}7y;Z;k}d>NP2 z3%8_%XyLHl(~ogVM+l#V`}Z2H)}3jj+!wbeQyDjKqzi}M9DHd&WG((LrMk-*u4d54%u302%&VR{68sfF)g#UGd zZ(7fv@T&ZoG7R57I$B(?+qO@)>!9Axyvut(R4aOm-;&bu_YA*Fef8mi@l8Lm-R-hA zZto7X4O)4L9vSWSbH!VF5A1w=IunMgO*t|nhgFQD8RhsG-0v%s5s{pI*}{?;%{D|9brB z8omLys@=G|Bc(hYdF;VFkdKF4&(bLAvl1Yc*B=2ZT`A82{OpKJB9QfuRD6fRZ?&6) zLd2$EzEpQV*B4-4y+gGvctTD7?NndiYG(!>o?Uz1W&)5TA2$CDI{6ELR){Io2 zqp{bjlZZjk`Thes-t#1C{sVbyR%@oB?p)8jdxYZk?+9;-pvJdS0trPL} zbiWtMF`bFoEI(zV%7vEZ{pY-kA%dkRv3%h}JXO9Tz`Ql=p$CEoX87?12s2^U{PCO~ z*I>x<4BWpMzx72bO0s$2UW4};P(!9dt`@we(o?#xTFf{#S4dklx|WKZ1?R0!#q!+w z`>H$X#4eh^%(@4;6JImvbj~&H`{})UmGW#$82k;fa|rjZ+kEFUhJAL<59M|nX3MVO zAFk1Q(|Ctk|`|BUTRMYbA;AB*=ykb5< z_#mmi-KQ+%XlnYzT5Fm7?To@ynW~w)w9>+A!rBCEnX;kKGy}(jpHQrIdTKKprQnZ& zErYxMYDD`N`2cHGLu*b*OP7;S8?(TP4ws}tw0~eA8@u?Ylwie3pIn!DhLPgQ?JU++HSvpi94i*e=gh*GrVe^rK3I@W`9wh%fqM8j?K9Z1;QA3>DSQxErZZ>c z(;BM&^Z+Efeoz+5iAB?+P^UX=id-Q{#O;e*^-5Le_sEL`hnfzwc2HG2ir}gZC*qh= zDq;U{%arWCp%Ien!(o61s_5o@=?r&yJb+Yw2atNzP|gcSQxD9a3Na9UpsYDnb)LQS zoU?&u*>kT>`c@@D6I4%5Cp&YZFRh(>43wZpEhM2CRH3wAAe{xXJdF117vvXJ6@v2yi%Z zsh^lf9Sik276#;({+KmJ<`D}cIrb0lkqtYxA`afU7#&sZ?ZOffSkJf^A*C=x_@j%C z(=GCCtvqa7)|g&uqeqdA1j?;Dj*>mO)g@(hJOJ$Kxm%~&iXUn!Ae+{+3yXT!hhn^M zeCS8zklq6>Cn?5KuDAy0_W@O{Mb(hS4-c0Po&vLd1xf^A15k%B6wvk$;95D<;qpMzY=3K@8pH}va+9TwhB{m|3clpt)oqO5^+0yA5qqq zz~I-i>ulJ2lbn!VNW;2i$$C49*$%!6`_pr*gNK3&)=OxW49t1% zl-JC_59AcsI@xS|JD8M+m!H3GifmW}JKbw0lI3!W7w*r5+cH@xsIFIRyN1vl(lD)d znx=Bx^%+hM9!vHtv&((GCSl`X)Bl?YrMB~QeoyY%cSoB<6rhNQFEE_@4H z!OJD^NlY5V*OcL+c{a4}_)&kKkAW(x^(l~OEi%f09k6wIb_J1NnK2?2+Q31|TN{Bj zdCx|<`8a}}?C4&Cv(z3Ze~uhlBx$*_SL+`Y;+n%KFV5q_5gjqg9EUaW@x|({fBgG) zXpEBHTs3}>nFK(I` z2$);oUr}aIU;}?>XV7NWLo3^@2VLiioxumH1g{(RZ0Gt%IjQ}bQHp2!cA&IRU@K)r zZIh~sd5#;h$X=5IDx*1u^m)OEZ)1!s8AfMma^xIezb&n{;qG~(UE z3|>f(q9{~zsb#>ENujNPSGTmP8E30y^^b|LF=fWF6ZrXbIk+_tWJWnB@)~1;=nR)b z0zXcsMjY=I1tQ{utisUXZe|{R43V)X8y^9T6W4^5whIom`eSz^o0}Q^YNjG%&UhN6 z!R|Pr`C7-u|J9y}%oMmVeR3zrg5A8$VJH#GWL1l358$61*Xl+G2W*W;LgyC! z<0}!y$Ii8QnS)P&Y}XsW@<6OTS||m^hQV)1Ga}J@#}9;US#sZHJ7VZGU>gxm@CD-A z4b2(vM1VbxKs$JTY4(V2FzH%UhM!$_+h1?me*~#wDR%AQ5R~MjT`ZB87+Is%fD(DNqd~GB8?0*S%|aDc8(WSW&3wtuaGciM%LIt)ly{;^1L?)I_C{T!h1z5#TJ!>(Ad#5+*2Z26UO8T0H~-xzv-I+BNxn!+5Bc- z8(j0v;1LGvZ9q0qg?^uQ%)mZf=2vrC_4H_AU*(OP-S(^6|gf zBzVN}z<_kbWCh_{(e2_8e*aiMKvWi&Z-7=NYY3N~dEp zEAotsj0h*K-A|Or>hJiaBl>IUXi}BSp7^yQ&Hq?S^ZVD=HBIx_86^i#bRm1iDr$WT zO&U|TJ?6P5J}WpEjbM;IJ1@#_#%uio1(=-GKfw<)?c2O1*)>XxYZ@q1n7b6^f9W-3 zY#+hEEHwK_F}MyjuLPa({nNht_Ux691aRyOp>>?R+gz((iu zTzq%P`ozjU5EF$f8kJiV>gL3vd;4jlF2gfXeI5>7s${_FjdMeQxbvHYK(oyEzYS@} zwF9)nLdV;OY;ogbv@$Hf#(vtEA)5_@uE*y}E^wkwwEWeSZf4fxI?$GB%uhQsc#cIK zC?24WO5F>Gv|LF%bj|k&>#B8k`7JEKxahV;IK^{ntZnjMMDV|<_dF|m1}7BKH(p8M zY&Tz#PAO1apnUImMY1h1N=f#l*jQI5$-_5Tv(k-Et6m5Mo8|~;u;oXtm}F@oDDTd~ zy~IGhC#5t}L$J-b>_Vh8G0}g@Dma*VsKa7;CYVHBB%i;OG8iamiITHQzs_Gy-IFf$ zb&+828aJqtAKd=A)=IFP?UMluYd@qi@p=B4jcjzNj!^wsh)4Y>JbEe=%h+|xNBHiU z(Qex=O|4l~yuEdR5YLt+9kqmUXz^AMD=S-&F&KDuP2wk+fkH81R))Vl+bFE`qd;nW zx9mhL`pWv|0hi^10KYe9xNQH?#RW&o;{|Ak?5Ha-3wc_K>%IPejq@wS(y^2@dammT zg)tIEL_|1a%b(cAoG!zuRK_ifk?Agdk_>*G>~HdlzoXzS zktgK>JYnheE*GZX$;rkVe16^h?Z=dgi|)_ah&y-UoBCTb-ahub!g%FGiWsKTcL##C z;*FcSeY6Ie{HFc+QH@f{%#l%(C|v8E67&cwxXKb!nw?jnoT)mP5R=rwof)(3nL zP)(q>t2x=eX;#&{xP#Qcfy~@Wd}w_6nVvFZz_wT zm*eIO`Hcmx#z;wDR3)Bb@08Ieb4uOtQN$umo*&PxEfXx}L@?+>8#oa$&(ItVQa;0? z{GGLLGrAFRE4=5mUlNB~iPySBhc=5XF-fCXJWtMiW0jVJ;{tbqvxIOSc$Yxhj7QZY zw=q?_noN2#@kjV`@uHFCPKCMO+a)WE>pVl-q36$?qfCR^y5|BApQCSXpw{dqJgCO3 zDMnj;V91e2knLueGjn{YIQ4fNrN9l7*GG-=W+cKXH7d#x9TW6C5Oz-{a#Na|q=Ay# z@atWK4U_Z5=u#J=!6_^+IHo}Ka4CFc_A#un2p3j}Ns+%vi`haWDW_SZF5X|)vq}CF z_qK({EO8{+Z8=L2JEJPQNq2)aCtKoXGjvd9EO`WqxQ+o20TMv+>MYl8+ucO9UkW)x zLZLj>U&Dh_F~%)RJ|85xao#gVXG|3G3hOj5rrJ9*wya%iBFimXy0oDx*~NcK0tS4F$9b%@@M0mhvYr;r2ke*z3>tcmlot71@7G6YgK2zUslsnke*yT=6nBMQ=S`>}9F_`-b-?oZE_-21Yg|xC+Z@mLC;2J!-Qf&KVe#2wx zr1S<*_)KNvh$0cs&#aX31526mOQ}2zBL{XC@S&KvY8$(SLz{LCs(bmj7iY`=djZz9 zG6qLKa71ZgB7oixbG!yRw65Ct!gJE?mw9xddH`z20yZoGpM`Awz zJopZP58a1tCN~WnH1STb6NMIJ%$;XNjCkkTB8V;UArwDT;Gq?!z+{+xC{1%vp>?wV z`e)|A16Y%|f{9e3%|QECCRVYkl}PtXGhZkrO{Zi3AoGg^zy&Y*HmI2V#pjhP;idW8 zkNp5jFH)amY9`;X{@wU1gmK!8zRPx2n{AqQCO~V9Ncc6ySU4VS%FtGlto)t5VM|f` zb|U)p&qX5#-ANAo`vnzd4t8EiKEZXRtj|7+FkyfCP5q~I=Vx0;!q93x|BRiTQ+|ja zZSA(2nhRZ{OX=}t+^nsbtjsU!*2>B28eLVWx}`YYd-jBSe)qWcHeOA97w{3DTcuN# zbib?inn-imL4mSPV4d}ulJwVBB6kt3H^3!)L>U#&m;<7q6+wz-`VW)-}g+;(OkC`@E`q5TVTdtyBTTz153l*&(oX0Fd^oATN_9fgA85? zI;6Hazfk3r|78$n;*q>rz?}v*7kK7qchC1J2$oYoJ;(U7%;bKk`A4ok zY_47(;^5VTm!_RL2odPJJ=17FuAH0*IdbLMwURaY<;A#m)>d69j*X5-9;cZLy19(7 z`nR=9yEDAtBvALyw$r2H;IrE&oE1vieV3Z{oF*@x*0sdlLqkhr{_c_^U;enjwgl?Y zg;E%J%{@COjbw}R59y+_Ph9W^t_Z@V8L@srfV!W)%!r%1RjxLTX5DX!EcUj)c+n0~ z8cZ(O>%I3^!B4j%nEe{o@i$+YlysNfgaE-xuA7+x1DUd*iN=8k4*|4`lU;=;E;rOr z0c+guR$FW|fm&O1X{(n>(H`>?m2y`jCfj>t?2rZp;w2C4qh5`gF`Cuby*UEKRLS<* zY!L-bL7OfH6vt3a*KmIA2;SmskCsVz2mVXC6fJPkl`=Fyum4UF;Oo007S>?v7ARb3cC5oV8Yd|-P;x(j-W zo!CV-BIgTUjIU0aE_s=!N}+#!IPv_%M@sI-&g%B}EhoktB(pKpr%h;HR&i0lB{fCl zUcE>d_~W~!lN;H%tc)RgjfNWWsh<5)Y67pk`>zP=aHN+;c(#)B%`}LP4MEz_25|%m zm53OKWh3^x=#%Y?dW`liXla?;s`U+Wx?e{v0pv~4>oqHG}=JG#kD@@t9n-uF%9G59e&mre2iNPg2Mwps&J= zQ)4ys)&4Hd`EBb0OC9NL2Q7DLS(W0Q&mNdCAWKCK_6dKH0=!PiYVfl#4&xRbCU|>8 z&|fokrz#6F&P(`WF8vut3qyL&jlMKJ@^Rs=o_?d4YIR7FrY-yq&*5ye{~JCQEEB2p z0_L&pdQxI+(Ag`%SvNhlwwbXPs_{*Usg>?``?@-AQOyU_>FopJf1G9P^)G^#>jq-m zn-^GJThnNPNeUle<(z;2tk!Pah@6>Za-i>HUmPMyHsJs3UcWqGKzmPR<@BWUp^+-S zd;U~4<84dRIpwd?Jt}_w{;Pls)G?57(|ardh!PKb8VAeyy1c-!ocIW#02KLTz-etV zppw8m?o-?~4R`xrS{QaS>7=_?z^4>i30gB`4B^*DTE1!u;owZNZM($-d6@3qmH}BpHWeJnw)gg5wHiGDsM^$&X_c# zlBz1Y*V6s{Q)tx~%-R|n17a6Tu6M8;-4e_pQxq8?Iz4lL@cg2GgKw?7JhIp_j_m5g zY7Zwzb=?L%0R?|_?``u-U&^Vd3V;0W@+%`n7I|SOa;O6Fya%<|#W|_G$+KIDwiN}P zFtzj>j18K=9>rW|2x8Ld32#%>EZE~|oR>+j0CVY<%-h%OAM-XA`OH;O%|*A@RGfb3 zmQ3rnwOx88SRTtl2+ocY8iVRDOjb{PpBTO#?Yf-`9XaNR010|$NEaM-;pm$Q`KBs$ z2Z_0V4DG3h_e?A^ks0L(v$C=|x*Nl7Dt*h4MMu^|H`pm-((Z1=^7cEclJ2^Ywq<;w zatx$$9F}WoD0dyd$ntsdM&m6z(k1t;TkyYWB3Bb266JL^w937pt*beh>TZqt))_AEW` zci^WH7wfP#5rO~eXutP~6;6PxV)MhM?_G+UWNL5I5lm{qAS@yM0E)daoAy3lY}4x+ z++*=7{vOv6&@-XQv2g`wBja?FnrJ4q{0!A5L{y+?4s`bTT#!cd~ zxAlR^P-WJn2l^xzQMNED>|_TLcHCJ@2eiET%Pif(_pCO@5TbnSZ;oBuz0qyACnr70 zTY0)JA4TMq_w_4H08w0GcBaVCs46%4AKt-pw?>L4y}i0bYlow{`UTB2L-Tb+#62J1 z@BKQ+hFJY$cn3~D^8KC)_UXtqMsv)r+PA-~(Aap?5=wcRV^~_4M!cZE>ybZQ_!l%ez*O zP)EXEafAydgWb%GZffx!4uh)Nw-#D}lWQzSrMABC$fk(#Y88sMg-%a!I{LM==jP(L z-OjZc(fxyl9azxAg?ZzVO)ZNa>81z>D_=xlt1(a7M%$G*ueqZ^FP5O}?i0V-$TTk< zmY$(pjpSCVcKSG_G1q`E@r3QBP%Tm&cOPIZyR&UHN^(0@U9f3|up1*RW8c!pJRPkH zK}G9L_*>T)l%9UKA{he8H}NVMw3~qwctn9&q|f($`u^7Q&a+#Y2&c8nz`|Z&87Pzr zW{0B!gD{YG$@U44Qn7i4iGX`Z?g`ajg)}v|1L@Y# z0`5)VzsM(U)j4o=#!}o~4k24@Tx)Y>(C)cM!gjx6zA@7@Dt1HpE`?mbqo2bmU3g$! zzF^`eGM$74BEx-+ABu5uAKhNLs5<@U>&PZJED9|>$CRSj1JjaXIwIatbWGuBC(r1P zWr~>-6H2q8s4AUz`itCgPBGM)01SVS1(6Z4)2Apsky)WCo?K|8n~BXz@?DzqT+qHh zk&n@2C|Yra3;;@yQyDX#=e{H-+u(r zWo;fygPLNawUufrx+rv9F=9j-b#gn+juFBHVjU9Q;kzAlHh{wvKXWybgvG54K@;sN zVS@%QZ!=SPRAyIO*Uj7^}~YsD(990yB+SVFr@z-%f_qa{tv_pw>0QLPMBnv z3grzo49aw`jBI$;wmkO4QL$67gw`G*Jzu){u1YdJ$eP-D>c|~oNyBRHS#{?`Vztw8 z(k@CC@FnX#O}x2A>cQt(Ty#sBX8u~Yem?XW3-Rzp_U!f+vP(j(b4Ii&#@F^fBV<@v z$Mz&xO1sEd*OVBd7w+)(00(P z{lddPyj+1MB`<9@dkKsU5|$ctAg#hbT)h-$h*xEB299EF_rHVecmP++gdW>c1WYpq z1$#C4hOr=p?CRFN12c_0oANl!_LD!`g^z~5kF*bQ`>Ho2<(KWIajV@5Q<8LcSm83z z;h-r=e4Zk#uYK!zQ|wu{yJ@#-c~|`noCzDjzfG#gQR#J2zO&OWI%_5*55abGq8T9h ze~Y~x`zAxo$$jZ!M)^K9@F`!avBSART5+>lsCI0w&QVWUV}TA)xc^z?y)f!b_z0A!pC=)RPDiEo}N4z(b_&1sKkKVPc(0T6t*; z*5~F{qS#U#wO3yJ=zqNsnQO2mLmTFbz#`9bs88N_^*~QH4+^e2`-;uS<}(iNJ?W;; z?>N@5v3q=8pl8_Z$9cQ;=^$#Sq0RJlfVh$qe^} zrH4T6q*o16$O&*U#pf4V6Z3AOyL6GEI03cnHJGVS?Kql~?-L0`QGj&Cah6HRtVdv6 zt;VLO3@GXiy459p*jr{(dsziYuD65r)+BULvxpy3X^8}#JenkYTJJ9T!`=m&Y{bKE zGPt_xBU~dxHcrhJMnoxE9^qq7PaoNt7kl&3P-VL2sszWZYn0w$H{urCRA*L}U{iKu zc{NVJmK$aqbg1iq=SpNC!H?7IxhK7M%J9uiMZH? zcy{gnRQjQW>eQTvViI*ImZc&hpfAMn$b0X`viq@zG4&IAAxN#TPXSIW5R*P#OTIm+ z<5F-%H!bY(8^X=LaWP{w@QdjCma<1HefLR2q#_$vUH`2ZOK9Z@*yd+2g%1OL3>&}@ zFy4>Q-uiTHboPZzDbzIG^yNxptb|@8^cHcCs}1voAwS3{Z>Oq|h@IjUUML@1#0onq zBP!q^V-7>l=6{d7SnP!LkH}`iq$UKda;@D64RY#hs43*7@Lu6j+ip|&us-<)HjOg& zwUj(Al^jW&vIL7=qeb+R?^Gl)rMBQo4D&{z{FZwK4hN`|OQ@%#>6XXqAByfO*j})0 z9-*`?hSUaa!E#Iy*Lh*3YKaT{^wpSF>%fLC>F!U$0R`i?MDfW(UZut!)9&#m;GV8@ z(~O$bm({vd`R~LyDunId|0r?_1|my+hR($uCI)2`()Dw}&KoJXh_F6QriGR1nsr)T z2iEas=<`hbvqSLqwsP1oPEq)_CFn#F+YK>Znw@EK27Ack3yqCVxtNnFJ>wwmY5xMY zLO1tE5JynUP+{vk2IVrqJRxg@CdzunhO_^+rIhAY2xfeZ;Ek>#;4bW@k&vlwRElq| z$m*W;;pz@*W^R)f>F{@%^qYzWu8gB0K62%B^sx$Yfqn*hye*FCm9qP6P>S|COQxFl(JLrM_3p0ldZ$lY^cyKPjcq z2ldT6hlTR!V$_3^5RwQBDQ@@@*UXilYd0i~t%a5Bc0dls2(8D2`gdZ&wkc*DL%s+a zCd4i`%I491`F_9B^BVojiotYJAF#DVR$|V{ULz2sP0P`$9L@> zy@1yZRy>O zoqV(E1R_f1#+sC%Ckzf_9+1!?+=Bzlc%rYZ@(o>v4;Ct6 z$)C8&C*CxeK_vbl0?)XooPEzj4TCV-NQ0MH@Ijoh{AQm+N5ZYybIX_YD4YlR$~a7a zuuu5MrEU8bE@YrA5j1h)5F98_T_KWC&NNq(w7V#(Wz#-UI9yNhKF!-}#=Kx(;S_$&u`8L zA1TroC4S9xJ)-F@CM&2wJ)BT_Rjhk9Zt$5-KOD{DEq+sRZpM-*!KFrWhApDyQ6zeXqnX1!sS9?pPQ0u_5fnCNqr;yzKW^}kcZ8>|#MXx!h}`{Kvd zq_HhGY&0ud;Xy3!Xs+-x6RW0_kCJZS z5KPnU`p>v=vX3F1TD>es6}=M)1!LBayA^32sQRbiy@g+ffXX2vvP_ic3x@vizYa+5 zQoH%K>Bmy~4i{^o;pwDLZVHldcPYT^<6^57e^`<~T8 znP?b+j_w~-eP#SHf)g~+q8DPVfcTZFeY<68UEHQ9*xAZ&|#N6OR8|m{+ zL{Gle5S-ARi4OWeYRU%sVb!SU==O^SE&pT?YtjN(U@T6t1aoQB`vKz<76MCIpL@x< zPai+u;V7Lsvh)_=;5>%UACfx&A`wwm5RR_-!?jSKdL+9+uQHXtC+Xg<%XMbmIZdfu zhE%qMtl}9a>Rm6$jaWMezU|hW%^oU!WeHS5~BPl5BdsHG2m8;yAGc9@aYQ4_v^T}Ntot<%Q z<<{xicu9&Y_{`9a3qFA3w-AVIIlLl4VJBK)^%eg9+eQQ|(c{=o^>H3cW)|1zp;x4U zHMj7fP|v2zF(7(_-L9-L^8P&@EnLa59Dz^Af~SvY^fUeErGzjrU}S~2G5EPgp%!P` zD3_05R+3k$uhz;7U=Zi$a(uq$8Hb?AFz42FivajuSy3l?% z@b*=d<+(o#odJBXn+eU#qG=`pNHEB_S@AhS!7+OQLAV;VZ(P>IARNwxRT%$#0_Sb7 zDHd$=4*j8nVj|`5=(Q|RUy2xb5JJSbwyZBy%vifK6Za5IFY-oft0qCUNSBfQe@Sx3 zXUOQjm^nc$J^pNPrffG(!rE?GeQhD!JF(|!H~x~5@OS^byXlh;qNsGbs&~ucLB7q= zm9<+}yS>Bbz!kK}`7>;Pzr0H~wRbSY z$=~@BagU-JXfaBIn61JWoj)7~Cn8t8C93JeUFVRTu5nS(*K4{{MpvbgWV;?@h3GFN z@FBTomnvs?oF#HguNr^Om7@PS*mf42HCl%vC`AnM=QI>te_yzq?Jn9WCU15I=Ij+< zVdZ%Tr!0Yi2nLNGHlreM51RW%gku)dGRGrCivT=ylxNq4PK`^vqhdR?`C>hgG?Vs^ zognidlwIuWGoQA$H{!G8s4so-mEJBStg@R{w41kzc77B}OF{gJ)UyfsO1%y%h^<*) z`-&Efprk40#_WLQ`0NxtS_DCrb`y}&O2JNFU&p+V)$PM|n7w`GPq*;UAjPbFS#8r^lU&!o-y z*u}l7*Kj_=T5iyp+i37gSQxIVJ`WS?kQ$feRTu2j z_Hw3Ic=BAFMh2WHP{{@|xzgMiK@t%_h8Zv_L^wtcx zki7j3vpI|1Yp}&Hz8X=kkIkRE0>`Wt16bZk;9n?*doG3f|Kzvr)-nTH$2y5l zbpE+z@#e*ifcy z<;#(HF)%#L=0~2a<}9D@AbiG7{L)ntSIwk) zB`CeqpT>WC3(G_8E}TbIar9@a3l2hji4tnydCK#_A>G&TS2GMWIbf)KKTXmaTcC_Y zG?;`6*mk9ZqFxSK?WoQa9`AGs*>r$&C2EP>5;YS#mu;tf?-=?Pa{b~y{3*sL+qzmw zb0X~FTVBy8KA<6S3apv4xFh9&I|yxgRju3N9zT$w(`uY@x{`~9O}i1!E^E95;nV*B zv_MP0rup{+-wPUECS(*3LwpGJ-{yg|$LHawj&ZOw=}sbKCbeX7pZ_ipQmCrKchY~X z%qk_~()Ev2b0nrn$+}hp@;##mBkD z2Mvj2Z0^D1w5_ulCDxs8IiUqI*PrXM_yZamL^tpNl9J3c3J43j+D)C zwZxH1l0&WV45swVVKEK|(|Ly5G0hoPyb%`48iZb1!tq+OQ)AR&iRE#J<*mS~@?2Y*BZ)Exn?>gGTluM} zzHC4M6<+fUmCXjy&2m_Xd0gXHAqBM_W;k9Nb?9$N#}e2JhK+7WQ@oFUifrK+cZh>! z@DKZVxtr%?HqS(KP3IPf9DvSkb<$f(Xtq#ft>nBtmqP9#o^Ld${7@a2Ww97b+NLJuO5?q@VIOt~7!(bq2oF23~Au9MPfAjnQkT zNMoaPiK?)Xz4Hyn*8UooZLBE3mG#I+$%(V`zwTsbv)X()?H*jn!k!f8NCd-zv@KGv z9wV0Gn{a+r6a+n+THh>D5 zA2iA%KlSI>|Kp#r+N-hHwMocHzv@v_7Q@8~dxG-7X8b2fR%)zvHT`m;mN>X&e%?NIVTEd%lDJ8=M-ZUhoa{VgkWlB=an%;w<#o8$d%$&Bi3beACM14Ue- z2N}g%{DR5x$2h+R<#zSvo!l%FMTm2S@S*3{H+IlE>BnzV*vt)n^d+qgmf(b(eWU&a zI609eF&D5_H}h=N)|`fG+-NqVE|~7bIr+)m+$6Q*X`2^?4tXwfG0ueIcG-{*7I}59 zq%wwpD9v4xf|3-MZL!)%@(bWmDpMx=_-M(`ne1lXGS9NZjRN!)pzMLYygV1?NdfjQ z$WAeFc0$Bu$j55jElzg1#&-)IZXCUm>I|Qd%#T8vvc?+MwBku<8V!7cT*2i|GtUmn zdAqS`)OKzbh#Y{q*>B#iHb2e^_xL}sh5{b}8rJE7r6edu*{e+DadCazLzN1LQ%Not@*#gN5^1qwOd5sBKzeUtjO~rcz=EZU zjoxjY-sh;@{8}J#0Or@8v+iy3Q3HJYk#x{3oTrCaR8Uje?-F*+S9odh!{j9|E2oyh z6a%iyMUwlKNPr;0eHJcN<->Gct9;gztX~+E>J8U+chh&kk#I{@K3VWf_J$F{roP=` zK*EQfW+DY2cXCP=g#K8X%VJZ!1+H7+t#+x6PUkM^hh2U2tZtKA?zF$cBMj;UR~hHe zLOU+s#rN}RlW^)1Y%VE{@ZRG8Jhzi`r}JyoPU^{XIqvj9bdJZjVYI)0y*%T@xJts{ zp37wRprMqW7p6Ly$6Q$`r#H7vIK`#>NZ09hC3-em=9A?iVWdWOsi$?W)E*0s18Q^R zpZ~_0igkHwjC6=OZ?J12l@)u&I>Z00(J zZI~`iHhKIQAO4qJj7!Qxz>r5CV`--T?rMf*sjHTncULEZRP*s{Mt!umK;!_lx6${~ zVsZ;t`6%3UjaSvfjD!as+03~<9jb8uryn>`cGWPoX>JND4bGiVb_Xc%ywC5^35HhlQ(U``d^lDX(GldOH({L z!RzhldB2yN-C&Sl*wugW)-=a#i=wVkvuxs?MW5&zc$yEokzqaAYm&`3n=>2`Q>05C zWnvumYLq3fZ8@a0VnL7`MgV(3N#m0}$8P$sY~|`IQ&A}qAxif0PAB*V!SIyI+*nb3 zC&W`Rk4ueHXLB(93nMvfDq#FifB?)*CwZw|>aEclCbn{?&~&$|#OP-2(zf_Gt31z? z=g#=JE+e^xyd92!NCa_7)u>I1y*~8`ih>vWGSlYysPSF4N&2DNxkl~hW`W27n4A6P zv*-%1cZewrnqFr4=~2=?EP~W>oMr< zx)f=v`fqtDoGUd4{nUal3{&Z_&8Ui9ZQE253EmJk!SFf^)7_|{ijDcqc852SO|RrO zU8R(Lh!-VVApITs4e5kKtk#3OC`UQ`f|_=&JPu|aoGO`{%SX~Rqa`kJ6ggKh8IN%! zRb+(46lViGGcVn(-0KVKn7PdiJqrtDMXC@!_xNZoOptR~ce`r^8={l}NhYQpP|*vJ zk8Fg2Pf_vBqV;^z#aXwsqKP8!W(5bJ)c%>21mM`Tjn1Do)mx7fk!oR>}#27JU zl+zp$L7N0IB#lZ*XJcPcj#PD!@AUQJcqe$Vk&_Yxvo^ynNk6`Dm?11$&-RE9U^aJW zey@offcdrOta>x(|I(D8POFVwq&`V-tv^V5J%4D#`Xw)p{0i=wQKl3k?U~g?MewJN z=rwa~5q9)RUd&#m$(LO|kT9oylDwJnhfdKQ&D%-d@tn z(b5Qac*@jaPk$P5q5Gwal{~MsD+_C78>y^_C%HbTkQi*=Opdpmz5RM_IW3C%oeTO;YX1Wq1W%po%r&adj{ZAC&D4%X#)Yal?Qy#Wh2%P3Y^2}b z?xs%u153$rjcfpNViOV|A(ly|SX8Yr=nLbBW0doFqni@J!V}yq+y;WFusqK5V!U;- z=u(evW<{^fs=aafpC}P+G8FED-MgMoeb$)OJtp6=?%OV zp0`9E@acf-Q=ZFme?7Lyy4-f^kATzFn|@Fa3Fl#Ij>^y*LKxBF_awsuNqd)KaWY_w!7*NN(ZU z&kwNH0Ir(kLdD5QdJIavw{bM~8p-62sAbLEEY1@NXkqHJ6+4mvdEmJ|bmm39l9jb8 ztAn-de!miFiCOH4dwkuEiynp4wWlBC^=aEkL~Ve(<(Uey*~#WRwwcwjI8uJ9 zq&zV9ATRmX1xdJk#!T7l*^e6rKN^r+-N6utLUj&pOx;^S_}XUvOnkQ=0=(&R5M z;H6dqG7=KCJ+8GiZnB@3I(ZqJ$VQr5P3~V~NxgJMv8&(4p0u!qCDCrgEQZ-&hqz8EIfUqHIK|t3e!bDpb_S5POMZd64#&OX;3>^V>5Wqq zx$+UGGUgavhC;GI?s{w+H#wR`!anHJ8izUerLqT)g}&gG$OPA1z6^pn{ojoPJA+XS z)0f5NVTabApQ!*!a=VWqk?Z68_`KT+i{L>dXkRbR&fLE{9#t`7KjZYqYg|4}z$8+~ z`*@+Hc1B&nvQ9L0sCNTzp9ZhrAM_L=2jDcg{gYd`M^49b!pZdUY`YEP@S`lt#JM(% z^cU~nvDs6aoT?y*rMV$k!s9QsTPGmA`3om}D-Cx)|DV?U$#-V_muNVY87vQy42UiA z0)m^ahkE@v`zNT%Hm_9Wub0g~pW`+^2XA=s6MPU3 zzt&G@*PvM;Vd{I zLU)4m7COnB@5K$Rr|<-|UoG=pEKU-erH;e$AO=Pp@wfM~y&ZF*bn6R9i6cE9L|UEx zhNE_kEf6^Xr})V*FW!~>nK}9X|Lnb2kR4Zg=lM%_ZCMm-0iXvR*!13ewpz1~>X+G( zrU^%~)ryf~G!y$o>SpfnJ=2-K@}Z!{LK?hRt@t zc&WGZ{v-Q%fq`p!Ojmq%#`)yM4cx9*X|n44*kem07J;O}CmyHIakxpqIQ|no1T3jDDztZQ?bUZb2s+oN@{zWhXxeOog*iCii0LF~P zC7}S87YgI3?@$&4wuzly!?QZeqpXh|^*wy%WGQ5iFmC)UGtp;|cQ?6#3#7zS5B{XB zO?L1lBk|x#1#xn{0S4?Gmuqt`^^SasuECgA2W{3LeV7`bW=p&DTAgK3;K?4IZYMzL z@OwD3dj~CWCIIN5vA&L7W8yx_(X82ZlxBN{6~YPk4Du&9<|Q3$F(OKMVOmmXgnHoi zd_!@y-N4{T878tR0Njoyhvj*i*-O=}Xrw^7a7NqFJ8@RwTxG)-k z$iAk{RNzvU@7)p$XCrh#jHvt7;uc1;eY{;f%3u(d+FFf!vM4ZM%(dCm(nay-^cC_o z7EmWZ&{p?w=J&a^z?lGGZtZr;j*5b$Oo#1JXSZ3C$)lK)3pp?Cup(;2(ey?{CKx`6 z3Uf$0+wizlR&nhn3kGsEvX@!20J?eu&DqgtrX?vi?+V+ z*Q{gur3C7&qXk(w3!P$pNloEuATQB(oO|5YdIzdQ>)wSANt%vGZjNB+vE$+ zqleI2Lp1mMA7NWk)~NUd=lLF&Mn!z0S|8HqOp{3|fdoF4z`!?L<@}eDYt?PMW#X31 zi^a%Hfg^!KciQHnsPIy&Hjq9d*nudGQi8TjflER)%~q#Szl#!N>JU2{m1}evPBNa= zfKQULbZuSe%uc7I1lh*KN5 zU4yVnC0=RAn_Q=UWiZaK<5_q+9t0@brpF!4gk>7FgLc7` zEJbb|Z?}49GARktUIHl9y=|tl54Lu=)aMm*qaWSFeZI| ziMkcSHt;Ar8AeiNKATnU5jo_=TwMo_)>ugL%@+)h-@m>VI1>PTeQn#;nG2h_UUSz+r+Fc%mNxne&PwOFT%XXE z)p##E__2)5U!_K6Mad9$A>ayX8u)6nB-=L3AB@LNR1=f5=6_ql)p~!C-Ic*YfvARg zV|*c(r)-vLo%$ePe|{;S@+V3oysfmXzK?inUeOvia+5FyWS?9gzfW3O&TQr?e3s^} z<{9H!s&#&KD4fzxLx=wJ57hT<^H{ArpfUg*1{~WTC3Wr+?saWGi)R3$D?Le}?lgG$ zR4V*Q(3PrklP>p2pGmJtc7KbvpR9(LiSO7^DMVY5Fm29 z*_e*Krm@b&YeEMv?OH5Hg>3Zw=Sn=+ZZM`PoQBPZxd+*=fo@69rO&T114?ahH81M+ zed;N!Kl?NM4!aUwY=AgFqL^7F%dkyHW+>5zSn#m&0(P!9NLUW7>z?H5}1+A%qjTFsVr`^=gB zPJIiU2>?!gn|5@@%4V*w`Ye=#J_&dxJ_)Ea@h0vN(Hq&PnV?AY!mz~6x(eCS>ZEA*CD7j5-=%m zQnl>!a|d}^Rzw1vEG<*3tZd2T!+``Hgy{7JuTWaX&CwdR3~B|NR~ji1)`ONuF$+uh zp`@%EIh{3n)W16GA+-tlJ?3?1@2)<@p@% ziE!`V9m2W9;DNc=O&5l^LAdOCLT=R;b$~gm&q!8khF6Whq1f#B;4yNALGF-mrRyNC zO6prro&s#mt>LYtF<*%yB}x&`8gn9A2F>Jtr=H+0(<6T-0BF@Szy9CP z1OQ)u8#lc|Gyq7F`&2cvW&BW9O0p`CDvhQo<>&^}vz9 zs_5`~QV^m=i}Z?0u_WxdwPn2~E-OHf?b(MBmEjXM0hrEIm9wAWd%T-uI3#U)Xo&2R zVJh*-CGH)jZ6H0sE=5qC%J|nq9yr=8Ox@6PIYFx2EJnjj=%l9aa z2!%;$7^DRlg-zl2BuNQU$PB`kirbXCQ<$3ATK4Y zaNBAi0RnF14)Ij$UZa=-^|FH&NYMkMWw5*I*DP|qD*1GZrK-GO;7bbJ^*CDwz-pD9 zj?JaM&z|mw__)=5s7a-&v<0j}z}5wk)qKN=<^QIqP~dh&dt0qE<%7CLK}Zqv0zU6q z$IkdUf?qRGNGrS8s%Nm*F<20|%#)Rz>+`mz`l(gn6DpmXnei|^gKCe*RMLuaa)^s9 zg9}vK1iTfW+-34EZsd9i0F&%mB}+6h!tzW;Q56-7MC$imnNQ*FdyfDBAOJ~3K~%d# zo80loIZxVE%`=9`G_bcK%!PoJ3g=#S*3PXHal__Elg)jWIc zF3yGnbJgYbIFGyVTb2iIP5G`<1v`CX+J#FE{uaBE0BL$(?M{|tEFyS;J5m2r@2HhucuZ0ESQyhc0C51UL z#0|E=0^###Qk?61e9`@IdmtnQEX#1C4EVWeUT&5eR{913w;MK@YK1qH36iLwMNDyM zz(mmWH^mAtc&BR(hovpbzu^+s;e0`bXIJxzQYT!_wHiO7+e?Cmz~;TUkANx%EK!0} z=_C^;9ViMIv3u=o0GyH$UaFMlx|76gyb7Q7{3V}Ft>a*L8ID92W28S23*GY>a!PjMa`7fX;L%sp%13X|+O@O9f$|rc&j#z%`}W14?Vd z=SIUarE!$&h>G75KwAn78KP`kZjCcoHL_AUTQxLtrOd?f6w~MYL~)c=)}WpZ(N?<# zhbq(TuBLDo{FIqiKsP6m^-(EmyEk=7Qvltk#ii*M`Uv~%R!y{AkP#BS!NhqD7X!EejnE|*(HIvzMiJs zHYl<{NAp%?82BrBHcRQTu$fx|U+D$ZjcbH@CX-+s zh^P8wWED;xjkLd~>6-O^C1zJCE|?nQ<;5`tyXbop;NQgocPeMQ2utJe zCKh!CHR)@^P;LYJv(rqF!=7{*Fky)@@$oovyvVlrBqHC?#4?sUFwghMo2Iglj;a{e zZ$sW`<^Zp^lRaqF=d`<^Omv3DHpyxv9V055NtVwN6p08^$!07novg4e8@XTgW1kVl z;0XvUn`*==S>D4lIzS1A=q(t^4YQOv$cstOH?xuJsHuJixeIxw6Ws{aSB7v(Rt=on z2m=r=NzQ5y!3~*AI&dI!Kv5u@VjNnv|C!%gx4@YIpmiIa)EIP>G7_~@a7AjpIuR&Mwlzn-K9|R`LM}1zF zRJsZ%M!7snHH;dew7Q?@^%S?*=dkTC3wj&NNH8ZqP zbVZZH)ww_sV3G zgjtYDYHB05=>8oQwUOf`kUK|Q6vdsfSNU8t1?8!)qRBizV7?7Y+7{1}`nt)Hti@+13tm<2_XLA8E|-NSL*s_W zu%E8==c-FK1@rxY{`^He-^qkKImE5H&4nqEarwxQQj<)=1~*H&Ca$5NGIa*sjVyyT zeX)~oxn6b=1vB!{L=26UJXOX8sch*q=xOq~ViA(G% zzP80yzF;!CG7*r~(zLQrJyBUvjBi{%PFY+QUb`WSK+z#(^7%2IUg;|>h6vEByqU{f zU&->yrqaLhRgzYhQ@;m1pOk5s*}#v4)~M_1g(tXGET&5lw!*A{BJ@I#HpnJ`+Emt} zOO+OsDrD57p|pV&p2fIp{~NoeE(;TZQcTB0)Vf%hfHqbHqpVC54Dow^}e4l5s!*P+10b;R-zWV(OWyg zkx!7;79VHZKu61YijQ-fFY0iz@-W!Zw}!pZ^UEr$yPrE{HJe+*@1nI$&6AD;v9w&P zK2IlF`4byhA;u*lf1LTx?BlTzWc3)qsfzl=yrvL}%?NnUu=pr@fZ=ATMTM+?3Ul-* zgBeFn+_O@}DiFx>p79@Rj*FUeUT;gAVc(-KF2fpX+P@HgHYpD{J*@NvSzcS!yFr;@ zGsU^`Z%K!yLLgN=MGLqNpZ5ObM4fv*_`3l|dmE_Wi6N3`KIn-+>i>c*IO6bpQg%XR zkT!66ImPHeLdHpz2}Ze32Ti(kp-La!+#ux)F@N!5y7Tf)1OW%S9^%7jUlgDl9#_XF zd;*RdCPoDKC_&Im#@|tra?h?dq2aD6`QZP<5^yEqYxMh#Ggh?VQ6qt*>5V*~ z^a28AvI*WCNzX38!E}nNHO*FKBOKmN%G%A!Zb7vxVZjjgCCM0NlfbGc+x};cpWOmy z0)VfvM?~wn%1eATFEvozQch#)R+^x1Wwp65N8WHSx_xHaO^wR{Uf7^aaB3E$F#wqS zO)0ZwxLq{;yJL=odf-qWcPMtEn=L9D(k`t|oY$^f#$9+=ou)q9eO-!Q9!}u4!{@0A zyW0_5iJo5u>q8sK_L!=+f3D(U*ETQk8Fme(9hBz05tpR5kU@=USDG+G*!A`y{u(X&V5D($CEd=wD#Mr@_v)2V5*mBrH(Ve!)~GId^xQg2Ap;dYd(!ii zAxu%&0i95bFCced7fu#FPwndT3?L136`xGDNJm2ABrGOUjQB;L5 zdc5$=ix$>`BOGf-VJ!qn%A~d^dY+JW_Sy-;ID(a!;9i+T;=s%3ATEHnz~*33!uJh& ztw0GXsWj*bTjw$Hl~GE!s{t|B`)YKYEZ!=jW@*t=^7wS#9KN+veNSJ<`A*vaAfB3)RmR~mdsqBb z&5HJqu@xTY#vrVZ<@$KJnFo3lD{!j$u@Tyka*4~X<@xyYYpsAJDxw}dCNo@aMv5!Kgm+IR(pOC?i@8)L4n+s^ z*%Gad>StDpbsH5h>+IUhA(?l!{rxZp+FA9CtY=}DD8PjVD2*~7)4yPmk>fhUVm!Bs z*Xq|7PX1EvlND>2j+GSnEMJA0$GL_Si*?YZCO40wVRBqdnc7t`JmEbLaaLe(c~qok z>esB4l0%aALp$F|u%3m5S_aD#H$%_kJRu`WnIWX~iP=xRMjbt8aRc|rO21_AK~&N? z$}UJ$$PBHP6&po@B8%Z87N0Z&Sk~Kr2&V$)S0%s@-wT&rJ&*8d(zD9Swuq7zRu~Tv zx5=#Li%v2Mt=dp!JSLP>b+6Rlvko5_f6mOT3G`7?VAM{7b+S)!h`U6AOODB} z<=>he8``?wtLb%f<>AJ!q4?t)xJ`rggs)ZQ?Z7=zQv3ZsIOKsM*$PCpMKDww2nVNC3Ajj-+BInY<>sQ)<9bTjx5kwE z-=mg}jR(Do|8H=c?3YAat!&_ms#(*z_k6Y_$rdNRH!(WOaaY|PFVuvvUA{~|(%391 zs@Q3|e4KrxwK8ERV}qIO_Z@3l5ozR+peEa_gNvfc7~rNXxUh{j0LG2=sA z?HCNU6D)Mv&JDkhpVL>!airricAl#1ev{`pZ3BSdN%{&^H5tv?ECYYq<-?PW zZi7F=n!1BN-=WX4$O`L9U&wbUmtEX+ieNI_)fR-fdFtIP^l7 z6fU_yan$R^AC=8qRfR#l5*09;thhAjM~)HNTeeSe^*v?Ovz(=#&k8l+f3eMw+ulzkH<38;vqO8keCAjxxL*ROm??q0^%9kRzJzt?naQ$Coq{w5ir-}Uo?));AYJ{1hXBKfXLW%gyWWTO}l8Dj;5(<}1K&okDnY|_p> zPyAo3NatAL#h6xd>|C)i?OgYp-skiU0G`4sjPgJ{no|uP5R_qCBfHAzOHrusCrQr~ z==0Ka;nQz=beqnJ{O_hOQ_{>fqo&94(Fg@_*0lr+u!vhUT0bg=GMA2`(A0j-cU=t< z4Wu`tgKe&lXEo?Xa1@1bWhkif9-EK#04Wpw%rXXipA|y667TiwFz>`Eau=i#m-T=j zQ#zHk(`b8WdtgU#A-Sb~PlTxbufrOJ-}2F63Pd;(4oaGZ}D>1M^)An*c9uFqZQ9T>38X>v5`;=Bl-&(2-t{4 zqS!#8QePN+?VFd7F>L4FXGuucD58GB=k-SQbXkZ@q*v9r+>JDBmhjR1z zAg<`v>>d=j=}DFq+^=YC!mZEjI{6>;4MiZCq0)EkukYZYSHq$WT8BZ&&I}>&`Nc( z&$L5d;Icx1gSB{?Qa;l5y2Q~eLvd_9OY=78`93pKSw3AHuX#%lQL0JC>I{GiItRI1 ziRu`9kc-$r%f!{&$91zTpY=mZnP7q~W{=9qEmKyt5k`*IF^FpzH0q=JyHIM2=kcPf z%0oBJMO9cL{Z?nc1dHNBNyeTa;BdR8ibmI#{*be{NiuTjfDeoY##AZ@3)?Tcf(>56 zF6`omjRFAmKA&W9!L2DTs{8Obm>Xe7Bh}8NdzCRIo8tQV*eThFfW1lPTPgrIIX@~a zb_&K=0rr&fID*IFqdCSCDXyDXR0xy;qS{RP{yph(%oE=W!{noO#MVy5{eBbYIIRPK z(4O>e4c3x@w&GI}3Xz{YG5MS{0e)m41JQam48fYfm&llUArvyA2n9Ag-d zzfH)ivD2n(r^p?0*IrZsHn;nJ!wr%#Le!|X1#x?Q#lJ=MyQX2bL z%Y@nJzFm`@J^R@cN1IE#mn+;ERQP1BV7a<#9q>uOGm?VUz`{6y2Z9LPM-SXy!#dV*#J_tmQK~U#6R0w@R^VL{UUf(4?OQY}4&+Gn}ik zjedOotai*}k6}Ev5@X^RJ&w&Sp*hfVb5$1%6#&yoDv(N& zXu*XNVEbY!6b8fL5RCzF1wwv%z-=t6Q`UG#cIWu@IyKPKiuAY-bc zuKG1c#i-SCtLuE1fB#+t0P=#Oprb}FOnB|CDDll>cQelZsd(Ya;G~DkY?xnn2NaKS zn@^(hzTs-@qLj^9@yI%H0PraXCc|BQ?2A8xfP->bt`1kaUSM$0tT5(fDdBRdAj>t{ zTn&Cgty|BPDO2f{iv+8ipQn_$W;x8MeMR7BDL--yj-}S{Rwr$w2Gb2(DXGnNDK}cQ zM9h);9${QvnLCV0S?;6NrV;rlP)E-69fY~D5=r3n^;y5n_;0pW_ejS@fyGvH>y&7Pe73tw+bsD z)5lx!ey`j(*K>2AC$Y$RgU!qTb-DyADgKPZ zb{^zdt4wMq?UXn!hRV^_7+)Msh7zrJ;lK& z(#7d5KWo zGEzDT>wt1CFU^}hfAJN%Twh;m+or)aDU0K&SPfe5GrfuXgen0&-%Oy80mAHU=uQB-e~u`ic$jweA=~+SLL}UHgkdP zb8#a|mR?mh3Lw>F?WjtU+7zzF<--|^t0F6Y&-M8{Ist~I9Z}v}6c0YsggVH*@=aBJ zM*1F_jY~*s;|R*$`y}A`PSE9&ktvMxCps(A=p9O?!Sd*;SR9L*dTF`uiGa5T*KsU* zyvkmQ|Aa^%C#3A_@AWBCG;CDZ%|n0Hn%xP)!*eNyk_TDoA@2b7BEkIw=O_ z-;Tw||J%*`t>}PXM?aPC*s-`&GEC9)OF&Zg_#n=Z`8w|5+j7qDRRAE3UI!9=H4yld zy}YvU$4sA!m!fEcL0J21)7U0h&(gwd&`cdjb}H^k2GxbjxkrJJs_gFmDWAm8tJD3m z3ic|z*(?R0bWewV$%38?HzcjlT0MgfKH6DD$+@(DeNsk3JDN4J%9T~fe~q{po)BC# zFez#E4D|qDGxrE1A)5Nus%B2WQD+@n+F9+0B3XGUcZkwrel5Rm_xj(a{WM@rq3#dx za;xA+0=t#iN>=nhR#Gh4456zT5wb@N#8wCWzWnN9v6sWr$8u(id z@N5+Ds54O#=wu(_g?8Fsiyt)thc-Kh^lveY>Tc7lCwi{(CN2^DOwQ-Ir1C@XTNV^T z+)+EYpLU*A?=#EH%s^3XTOBV!!zgrR&!*QaQ|=n+92?N=8rrE+?=zQiuhlbr+kgLF z1ppGw&ludTBYss+?Bx%q!fYZmM7h*5S>OdYQcqIcaf9hQz0w_|_$$u!1xXxk zohq_5>Szk=_XIZ!=uvTo*RU&TB^gbV8XjZ0hm&iJjjp2|1Cx9PT73k1f{fSl8y%;0 z;w8nOU5kLZ)E1T@1c+xPsmIm#6ZN`r?o!sT(M?zf25yo|S*vHL2LMCdFI1vvjaFrE zc5%H>i=@18u)w>`CMp50ruw--;UQAIos^A8x*wSU7ue+NEa_^Aj2n=)EK+Hcl&tJb z!HPsSH>}&*8V95MUO)*Gw_L&VpllnIQzqrAN2xSJB?*L@bU#tw2T3oNs~qSru}jl0 z^*bvLs+#m!fz)VqEjgxCr@bmBOT4}0uR1TK$hD?6aktRY6dOS5{8H93ag`i!z+25I zdK#ZHT;zr5yNgN|@9pE+%YIzL<}};tnVk@H*lPdi?>f^_uy}95s@Y0@&Ca9fq;RVp zus8h>A2-@p2iL;cPuHZhXJraHx!3yl_9U4Zk2|HE8(E&u`V0l*ljF+ZE7nc;fh#-p za>Zv~&pJLo6&bPVja(_zP}LVD=-khXozNZU(jMQYW4>1bKw&-C2ca*#RL6oe?};Dv z$-WR#+cOPT);;axCp7S_3ZG?u%IA%)rRrmgxwh_GU+av|wpul{x_7Mvs5Hi7Y5(}K zif4TmcN-ol%VJk%RkA*M{5VDXGPzy><2tPW%ek~3e6GZE?WBs8PQJ~O3LNMUt#b7} zY0F$mAB)INW*xhe+Gu(MR|wrxCS;?^!BU2Cr_6P>g_AzO({pKel`e++%O?Bht(h$= z8$3m7dV=$n7!PVkwas`cUHs8SnN-&nr(&L>K*8bTrFN!@NzqB0(l3; zrQ9f%)A@sHf;)lLP@k+LJ{eL*>pH+IbNLpc&ruiJG4N+9ywXg#N-|%CrAq%Hna&rU zScI{@s%@5YlV*h}L#DO7e=35DR`2rL@cZ{B00@4~Kq19V^^R`vWmjyF zj=m5P)uqd3lq!=Hi>K z`O0kv02>ugcacyy`(hJ(IMLp!R(eqCN-#c>XBR`CZj0*${jAfe+7(aO6TMA>wWPLF z8I%p&D8RR%%DY-+F23)Pr|8Na;cTIzijTkv6Sn|CEvBj-N3@oN_8VyDoj2P@)a&%` z@*lRS1;}P$MmhgcK-|e(Qzj`-r2KuxeVYma=lYtas#p5q_ad1x!(%x65W`7>uY8Z^ z4sxHY+P56!=_FCAX7?JU?djBe@b`2V`ne;p*x%J)BCZT^b=6={zTc|J$9-$q8^4bB z(P)?BU#E>mn5Ekmd3GDa z_bHXi%*^{Mrjp8UN;cl*W~H7(5pT;HcHg00X4CEIQ~a z?esD`SisR}^dFbaRGRn>??uttQBxv`s5LmO;m5L(J2a;|iE7qKN76d}Ig^i!2b&A| zM9-^J>?)oSiQh@Kb2k3xBls8mj0%rojSZ5w4OWVXhp;C~E?ZiGXJnGxI)r^q3hTfa zxdGAlPLXy!mJ0(x2Af`s5iX?CY-KaEN%^!dNkZc5=MdIM%Apcfi;F&^1`3+$=mbXh&hiEluO#k8?WdNx$`^DR%A;RNX{ zg>spqZBg`Hiheg`cbv*piPGUbZYN+f6|X*ud1#PK&LeI2kus-9n>Ja`C7;TWE*HsJ zLJPDo?Eq8hXEdOK#UDw5R)wKqaxl}wk*#C6*Q~{Dwd&IEC$0k6Mw6l4E~D>TYi%^M zoE7sW$LHc~z}_U)J%#Mw#GlGNGztI|NBstzW4js1rdcTd5W*x8s4)O0ShG;N<^gzSYBxDgutxxI67!Gn@HS!{k`*LEi4?Y%>T8Dby?4lDq-*|BjED;6*6?PlNlEpC^(+lcu9Rm=as|}a6d|EZz@TZf92=); zJJfHKz;q~jE~90GW4_76{BFuy#|W+w!I>QdC!3<}q;Ev`RTJAvjICps*Ysl?lOVyT zH)YUg`wYwyCu(#Nt@bG9Og={`vakQIYXVL2P2p@txldV6XZS!5{H^X^(C_&iw|N4B zHQ3#~rUrs-Cje-5Zt*4v1%47;3nlYlWL2HnX&E4eZ6QI5X|gl-B_qw=t&D3~pQ}VJ zTY^GYGCCr3Bj2V3WAcr;cqNzDn`H?aJ)l&QqTgAg>qP^AM#5KeY~2Ym zG$PY_9EBln)wa!zyITX%FwyJ?OF44v>1+TLZJX~!0H8ave(Gek=}>d(ri#sD~gT$ zCY{ERLU3o8Gizy_q=Jinz=_Au4Js@L7<=o2{1F(f6|xQ=+P!M5Dip)x=QBE_PnzlVM&|Em6{dZjl{P`r+shXNiNKWFFFeJUOw*zkbY@4>;+mBJ zT0NtdmX7-f$Yj>j%N0sfK4BBetJ10uF#Rgor0+|9mqmvaFgj6Te^TvSg0RXmE{ZQ) zOrObVhtKDK$&qG;PR*WgdJ~I`Kp8|;^20nomws5;$d%Qa+GxGh)^Ku;&?;r0;S$d! zfn`-7ILUnqR2X8VX4Ub-3n*RxDkZ@_XgPSL#2D~=5(`4BnX2)tMTxjozxb~F{{095 zHgc~v=SZp>%gfRerh0MWpcSLa$ZElGxkAn(AA}dMSFezpDszb`N1^7mUMcW;qt#8c z!^~{tPgG#hq=wz9gK2H_X0)kR=g_|^sZ@s>L%;ZGnb1}0Q54Pcyk-2aH9J-`ewgj*I$Cv5>areh zv?@I$T|;MY;$@l8ZdXK+l-#g*4%jw()1E?}7q)JNYi=MjUSYt7b4-ga2~x^cKJ2w9 z7h%2xJ+{NVh7-QvK};q^yTS6A%-D?a1(S0bVB39%-=_U!03REpE0dwuFVQO^O;$ix zBjA@zgpy%X$JvI>S@P^M0d@5&k)UFFE)=f;{u= zD)W?x(uv#QT$(*bM598oPo~A?0zj7RT$q{jCj$O37_s$k_nD&miIs0ba2F;))KRdL zbEz_<&(d}R06DMdc$hgZOIaLEhnbrA^%VAKh&y$e);9SffU_mTqlRybHljc zwA^!4ebCRaB}p$O#Ae*9d;m;}**Px0I%%J8df(GN0MN!HVM8|*-%uXo24|}d)Ie%e zO@wJ~h_7C>^lPJ+DZsQtW7zF}kTaY3ky;tF@QZJ9J!@u+djy>wH9a|*&Nlr7SA;5B zGSd%ho$YXS@Zzx?+59|K*6m~s3XaYG&%a<_GZ1B~dlJBt>vO)OP#upW&Is?yM5&eL zq)d|OHqRRdt z&E=lQ?w)n*JQe*!FC^LpIL5E3@kC<0HrH%sg8=@PI&wdT<)NAA6 z4+WQ93m$2YGS}*bYh-d5$&Tk%b*>?=5YtPQAkBgJ@p3aN(e&e7 zu2+$r-oIh1GSZ%?8e6C5_&)D1_4QPW6&h#LXlg4I(GU=78|vakC!{h zbM2jw$J9DI?aTdexRo^S%)R)H=QQ6DHE%vcPe<+S5J-HK)pwWFI6T@~Z52 z(yUb0%q^&Xo!pC*xJ;At=9&_(8wv#k`E~qzC)aMaucrIP_c`M5e3I>N6suv_eAvk1 zcYG7)Izdg3#eu`AwY+nx?)lqzp3^!2i2A%s5034m>h2?)UJ6$OINA$Ss zho8y-Kx{a*+nsN#$)llYN23lUtA~XZ?x|R8?_bTnQ`Pa*px4J8YQ<#|=#-l}f2g7T z)(8jMMbC%e%=5f}F54$?;aGP+yAr(y^n`B`_*LHNdYGd#LtJKjm9;sN-OmTjL_Abl z*x)){4vP97G;1SC4bo4V8SGM#d9KCTrcjJd1TuQA$*zjQ;e9TpPLcPg>OGxq=MjAh z7Lu7vvp8k2-1o?z@QkJ^HI>{FBU280m&oV7PSGBlx^+snr?9@}Lm_tIV?JA3W$Faj z=VZB3%SUVRtEi}qc7#lN7g7Ql9U<=*2^ReK#=%MaSjm!1okzb}$N+d2yLuXEmuMj=xn^aC z*BX^#WubHZAP=Z=rzlvi;iYzzJ5T0WzR6=x?*JflV^b-6(T#^^8#!Skkx6)cCOv-KB_Lblq-aXua6P& zmXgc1dFxcot>vbGOM@!VIV(Pisw~Ys-cCx#jt_CQV<}ZMjeDm z{m(QQ^(stzP%ZeFeJ0($&p=?ZKwq!y@@44?nP_z8``h1q@iNFx)l3 zC+(K86ooa#4|E1j#x~nxUur))+s$CK+r=~xQ1;Iq!gky8+qmCp9RQ4P z;9AFIaX6v38XlP2eC_cC?vP^icB7@N+sZy*FfwsGAvyL=5T zAb5`HGUs6`^~C%M_#BUE%Vf{tVUC>pca$34f|4y>&J}ny=gVfdDl7$Ii0s|Z4!zp0 z^V4gd0?#L**C*F=i?-F3KtrVNG*D1LXCoG`C#A2G?j>qRd@96x8n(;7u&_|#dKCcl z@%wgzl<4_N8@bSf3+3A>!)qrSC@ZjDpumZ2DTd8W4__xfIpmrZPCoZ*pu|7!kV<6 z6ei%MlZh0SX8#7R(^AFF$`!MsVWC<{x88>{(?^%#V^$$20ZOx4*U9!ajiOIVql?JR z=r(ehGl$F3A4>&>AP`nWNlAS&ZSc;bH5}IWqMY+Qu5PA(pri97fR0f6e1i+| zv2809r;(G3enEgI0HH01_@G&dLRJeCHcK6gOQI8jtSU{L(QJwxVo!Ur?RVz*Q{Mu? z??}%aP=WcPB=DxxvGe2X=5Hx9O6v-3H=XBF(J-*Z7QV)I354cp*;EaeFaP&L?2a>8 zrZ;i95h$n5Be~TlQhg)&m z%^}1~ntV%}xUU*enG1`doj0JrN!ho0yyg$myO`qVQv?%f{B{JKRN1tLyOkMP#Nn}> z>nH7_rNC$XmVhx(lfSRz-}}|RZJH3pfa4-5`b?wD@m!zb+j87#8vtmIuWsmEj#qR_ zuUX?Ow?LEYVyghLx;&K6uuBI269NDc?Gd%W{k$~S^p-Z^P=QDb-mMG_THZ*y&&kc)V)^tp3Xmj_;$t_|LO2ABInr*#*)7YR(X&8X@ z`3S}ZiwT6(YTTvtAQCYJb(5Zetqa!G^h2UsFhs6kaJK}KT@Uf}3BQ@#Dc`Wrc9*Q9 zIPoja$z-^|6TJhm+cj`~k9|Ecu(75u&&64=otCca_{Vpapjtdmd|WT!a0R|>wzAg& zlA4E`fbd$~leYVg?-!-*$>MK(fR(9?vL05R0-npR?uYrTosysIUkv4o<-cR$(dQpXPv%q z1x|w-G}R}U=FKSASD#N-*415HRyA1~)oz#HtuZr^fOA0)ASU| zd0zd#g}w!QyKD~epP6WP&}h|eXMX?VwtxhKqralt>1NQXDqV+J1~XE60`_H30Z>-E zVNQ8$S^O|ZlAd(pH(ZxWk;$&%)mZ_681QW39{FZVRX)sEEUMS{!BhP*4DjPRCi09k zL)>dROy^deNPjz-77sB=cZc2-#~p)mxr$-hq-={G`HrKR7UBAvurr?&0BP-x+6{>o z=!Zg^?BxE04K!2X`Y0t*vU|F1guX3`s|f&I&oCGZJX|y2SZ09ztx6d&IrK!@U?=zf zZQb{@4FJX;=NiXmiJDkis5%{al&+qo3|0-6iHS@nFU$AXV%uEm*Mv-Jk>-3pZ`Hx{ zH6-Pj>E;?$zZQf$?CV;^j_9PL$^#o&?wedBwQ?nl;xXphj0Y8tKRchvBw>-MW1Q9f zu(JQHyMHM_OqM>cLbvIVmf{`r`}9QbCJanJ&mLfSt{FTndD||tB;Fd6 zk8_()X%)Tz93=vn@U?C zT*O#5B`aXOQev$8r;O^cM-cpsU^Ju2$~T`jSWu}l&(cA(IO^H#iW`HeET_*EY8;TP zpqP!VV}Cm+dsW^GxHOtsv;#i(P>YGEK~T$%CgZ0CpJx+{o%F%c(nrPQVE^jQO`BTY z$hTmJ(>4Im7PHdE&4eHLE%OVm;sH0cpNzjN`4B}#F29DY;iP)IR(_L6G;8n?4>H}* z`RXZB6B8_Td@j`!qg&;0&m*(lt@b`jX3-$mhMnB=J@$7!G&?|O)sF-OwZK4?5W?qIbyA;C8nPuqI-baEW>@i2^xE~>nZx1yPiFIH<8sVN8Gx40 zAp_WQ?w6Qf>-V=hCi=V5GU#W(?&gZR3!i}c45nv1KA-<^%~a&fc6zsfaQ`h=i9B^H z6QghwRKE)!y>o!$?NV9wv4?)if}RXFNMN3OxK=CgWQ*$9%YAJ3c{xfWm3nsBN41GhmguNfsmB4YCixZ|It~xvtJ)5#IrE3J{+U3sd`2s4Swvw)_E(b{Y&x zHqA1)ECl0vIghP8%uzkT%Q!T?kt45nZL0+$`#3z^b5A$d00mq&3}M1IQPQVpKe z&n+dyzu(Wh|8+6*4U5ZFR-jEYs(Ra*9L(+K!=&eoYL5srsq3M+NwRm+2fm4YPs;#6 zA$phcBi*2lK8#>J3ky~a;o9lu1PrIv@t!_TI_%5_?v7|qE8(GP!0x^bBjOM!Dejqm z1_V7Hq!@^%@sqL?N?0TW&nSUkVMrzb03ZNKL_t)KfH#ae$a_xzf<;D7S?FTh?Acaj zmwDyO=vJC z-@jVq*dAY`2Ka;@hnc|uwr<2;VR5$QD*R4*&K@FQR5x>7H8e?+Qd;*~cFg(~L%`&$ z_B07BAKwp{5=4{l)1_AXp}cQ&U)$iz)atJ&yu#QyXL(H#an?C4Mofp}fs3o`$2^t< zZpa1*ceDaNN%E5j>CWQyqPDqGAiq7mJ^4;f%K#uQ)|2GWCY;>f5O|{|q=1THv;Bz4 z=be0zC(H@KKNNOxpBlv4pz`QvQ>zlVLl@ zVXV_tPCM`P%s$_p7Ldtz{1^15ySP}(SnInNu%O?drk(VJb$V-=_wqk$zrL*|_X+Nm z6|8_xGchGU`7Yh1+*lD~A(MmogmkoMWC&d~zlLXLl@FgHRUYF`&miS_j2+LgwHeh= z1tY)VEF;4u=^kF}gx;&$M78M#&Q4ieCVxu`0t9Srm|Qulp5LO|$e0xPd=%AokVVo= z7q>*jy{0P$AN8EiWD;msvbEC=D-^~n9EVC}UQNOr&1~RDnrhfc81B2%)4xXnK%4=P zB7sTJ$;-zOoyyrW>426?3^nQO|cp*u6Iq2^d``glDb7*?l@pLAI)+I|JFd6 zWmrC+W*%Z!{CL&&S#I@xik8W)+!_RkuQq)z^-^u)I@EXAlm7{a+o?N#*FWwv_up9y1pmxHK{N#-B3E(-5&CjX_Ouce z+VxA)gDLI_EUHIsUTufdud*q(iu zFB01HZe{cY%vF@Fop$;r_xa9e0Hl+D@g(Wq3TaE$hLYkk$OxZYH*D@8PsbIqibLEb z6gt_b6VnIrwRdbT)#sM_ab`7tXeui66sbj1q~)0T=TU4$C!5*CHEKX;5bbx;Val7i z%=I}Z*T<{IkK0%3n_kSFrcLIE&5L>oaGrw%9u~MnkL6>Tg7r<@ zDL5y=IGxPfo%}TyS{YU-%J8$iX#8ukwYFd!rZV(6l@Oq5;8z`{pUyHK2RQ5diBhKp zkJZ(y#<+&o-O=Zm`4xkt!#SeCIIDq~>bNrRx!D@as$x)WXB&*MkEU{mo_|e%=fbe zjt;RTYjRoK*4e1?VfF|I8)cz1+FcwV^Al|0znusMmXcO+H&=_%krKx_#9M`BwKBj7 ztsM~f0eibH;}^-AH+KRsfK2lY({1T5S8*ZVHWpl(|0JAM3d9 zTmT?Z^YlV4G91ooYSkKP!FT|mQgsPaySZk(+Ad^eBEDS&y5AVWaRx zFyTYNt>R=-%=1P1+Q6t*+1Y!TFJ%0YbpLd~wWc|nrWm0Fb(_VRD%nBFWors3Z)4pk~zsBLP4U&$X%> z#jmBsaOCfniJRWvoP*o$y-sc7ZWA(F4)AQJRHXPdlxDWU11kNtuCo9@qmJdA8Ud?0 z_(>{$Q=7TW^lQKxvC%Ah?CbI=9PTE_R!HMAkTN-2Q24gNuJk(gNI;^3sT2cdg|n3y zPdMpIn|c991Dk{SFF2Mokqe5u=y7>~=(L5LhJfLzET1;RbF}*|PV4=C_Oo;*=l^YB z1f%5{>j{4KtMY06yeIi^it3x5fvxOrGO zu1D4Mm^9KH%T9Adm%ij%Ed|`WnWnZ9+r z7tL}OEZ$qtq3F)^kP4{JP8vHqZAzs-u!Q>!3p2Nr7mOcq(tRzOg^gw@+r78RUo&8( zxJmX;0x8PhW$_frVtS@gbBFajGBGzsby<-b&pK?6>mRgxPv69T--!S~$-6$mSq0(D z$N2iP8pY!XDUNn^G4cPi_vYbt6lr?rFEY=5?xuYgix40-u_N|HP+QyMvE8&i-R0^A zAqh!9SM^eewr2!>9(O_EF1i6NR}z%FZO?eX_T!mxS62aI-}g=I2!ZzXu4g})G0zw0 zPh{(u@FTU^n-dFNX&dd_dWSQ%MJQ7_z8&sF`>q!fPUnb1% z&;a4K$?R_?j+9=*rCLupx@ut;^yZ zq1#m!?^W|~eE1lVY!AAgl&&mp*-6Y)Ax?A3^T8EXH;a#Joyd;H$2D4?8M|}QOs&Fy zt>B-Q+Nl3;bn&Oz`__IlTH8EY+NIYsHdEv@|FIn}mFx)zzRW~RsHS}jd{ zh?iK_K%3|M8@qTflS!tC5~-g&PEtst2{!UWwzcAM9f>g>P93A(0FX^AJBbs6sda`@ zHpctyKdMf<=`nK|3opcL!HuB?=RZPl6T6vb8*P^R)-gS%IX5uqPO88Q69egQW{K@4 zyaU3~9HC^C33<&#+h;)d>yf_oYhIqRoop+iiE0yIaE%F7#PeZZ9CH)B%}$b?_mgbz zEQ$7b@&43$en(E)K?A@;_ty#y4C$M2Axz~uan}zASu0!vZDTlJ#9GX_S` z=DgrD4LQz(oD+#L!w`vDyw-V3ZHft&E$bWKVCWBWL-@w*nOijk#N3zYE*ilB6~}I4Ay*$&@-s zccG%XSgxa4ns>9I$C)3*Skw}4swk?;b42lUs{xW%7*+j-MeaXvO0mGn{*bg}7Q}Al z>qh%XD`R;$%8q&ipqdzkhONnkyjO2<{Vtxo!-r$4pl4HMpxclQN|XQ97&bH$r^>G7 zyA@3Um!i0Z1oa+Ye1IWO(7A(o<`~LZaZ^{38a1Fe8^~7$3D}ifG?W3b+N3oA9Jm&n?bULc ztKB0D<={$Ax1yZvx%*v*!A~t-s^={@93RcGT4(gGTklZXe!w7Ks$Y(Foj=L_e9eQ$ zY9EheyG^=oFIV`9gd{AGcX_>0%3x&!DT@TjzndZ7DSO+#UzXwijo(`-ZhI?4rx*ZI zUj=;U`-YntAAL88^i-~MEjG8`!iUY=bC6*pAq~Z4hJT}hyz-EHCEvj@^zB60!R#U{j***~V+tJihz8nHeqPKAL%k98?FUG0&el z;uiR_{V<5J4d;E-x@XiI0Gaj7_v^eTqP(O2urXz;Uv{<@bDV4{dmo{#-DYAjPrHCr z+7fJOMm10dbZ{LvcnD$R2F%l|LyVUk`GQ3xWHGtYc8yjR`y8A8JPZ(_Z|qodcfUr# zZ^g?*;zS|?7D*?=^oYd_BlMHwv&1sCwEFS~9%X`6(Iu94Ghp~y>J z!_n(l%~_UhJQ_pj)dkn%7U|O=vf7nBp0H&Rmu!PNMuMX(`r{5C4q9BGwBb|{9*^lV zX0=#HtGzY}w~98&m>407PY+RuUPYCA&*MkBAMy3MaS9I_N4)`9ppl4)D8(9 z47!|Vg_!9U`KEnIYZkd|w&`_7>%h2th59nOh)p#$3Q9D}7nt%IU2xcGhiRA1+P}bg zxBxTp1>`f08w_&a=DlndTZQPaN3pwm4YQLLr-}O6xH^VS<{?gU;+$5A_rb1AjE|0k z{2I-i((m!RZoAyodYytf&D~Kdr8OVBHa{%<<;n`(bu0J(wv{bw-k*+pfPX@$rgec2 zYVq^S7^S5yv7|EJmBX3>O{>Ub?yk1Y%))?9m z&Xp{L;baa7HYYQUi#_a>v_sejLl#^5q ztg>%a6GuAKxmU(d%=ZkKRDox!g>|bvN7mciI=|4o< zSeUt9rxJr~P=8WFVm5Pmd9da~%klPv7U($})$gUYlvYc$xRbPIY}w843NUedo)4N; zl`}xcyRo?&k*+)__9fv8Nk!5Q+gcU_T0tZ`z3h%F$p!b@nlIxPJ!~h>M`*4jM3nYy ziC3Ys(tnM1Ec$Io8|h7_l;#&CPwHRAX?Cbg^IMiDj^9#SK*JLbss?59t(u zS-KL#7eLPP>0Bi-FU#T}F^^i$^+1k(M7zjbMz-@=aMJbtg0Z0_mljjJ()lN~fkL&O zm08QxEym=W#5Oi~qCi4Y^yiY!V-a#)Hnrc%NB(CC7C>0dDB=t%-mj&LF86pKn`-sw zvf`jux8M-ka=bj6E$NY(S0ho+gr!T{20PUnt@(qIs1Nj-Y|8%e@l?U)M$?>xXK;xy z`+0X*4ui3sysGXgvB`N?b{#i3!U<4^sc+}sk!;U$RYmtc#QtC!;Qnqpqlzn4h&_p$ z4^RnR3nq};@XN;;qETS3{Ow!)|ju%7;03{S~@~-wp~L*+kySz@+qT` zV`JCteC2O{dKL2o=THu-2&k~-u!hvvx1Li%E~f|8xN<9*Q;cwux7dk?pnVLVHU;b)mXH4Qk55xpQRHHUI(a0okF*>5XStvM&8H(->9@76#~#D}$9+b_-o*FK_a`C3 z6z?a0!Vd3m9-Cbws$MUP$Vs86_mK-84zg=G)qzt}1>T&vZ0MBn$v0PJ z%pJ?-(^xxOTjfJB{d$Dd8#9@K~M-$Yb^o^6c0o*NMkMumvAFY#0eJuwPrigiRK*p;<$v@}5P-wG9a&2rd1W zQ6G@8nZ6#$GNal6sBq$!02NKe$by6Cw}35|{@4y)Y{i`utj{nJ`ZsMCH>Y?h3Rf6i zfRbcy!F(7(9ui{?5{HAZcnTEkO^)Fs+0ZIL6O9g8Y|6Rpk^5|m6GRKZ4)ba3rlEp6 zA~ZBH&wL%>t+rvh*91`*>xpvgqNZzIvkhQ zdo9%6>HAi$8VT0R!_maiR%hRO#zu;q=ZdbVTng97*)CwCY%FGTwmC7U`FiZ)*5t7( z8_og6PpjI&KzGxbR$M7zyY}tu-#e3JL=)C|bf-;jI1=Ojan5!#%TXnaiIeA*j@wL# zp>m10FBW2+$JtT&p@jI~k=V|=&8*2L%+O~-nVo{Lw?f2GO!W+p_N_)FY}lbHVHCC7 zIL~M=0Db^;EAz_G)KBAkW{qs&K-kJNMyl-SHUQRho(HNq6hx&zrXxAA?F;$5RjbZy zN-MDP)0k6)lPVvd=4;y_B|HTIz5$hfgv$+kSKyKud^XHGiL%ukR21}pKGovmhQhLg z>ohnan=hkDHjU)zc;ACekHt9GpZ*tYe`Xz?N|uu-@Ip}bx6$M@?*A~Cnz;TLHqcLJ z&f!9lEH!JS&Axb%H%BtA*Qia$^6z6;+}@GOId?16AJ<9o8>uc9HR_?9n_j`s9~~H} zO25tZ$mzWhGTzLRYMrsb*|ROjyOS*1%8YbQqKgf~Ie~i{ux;^4tV{#!AJ4Ls_VHe)ydgqe#*^S0;jb~0 z=2vhiL|{i`E1!A>f)OMObB)oVSZqtA`Di$yLNU}rE|+;7ZidsO*5LR_ z)JA(M;HWkLJnPtOzQYUwcrPj4%@w-r_O^0UZVhEM7OF z5&}j!mEU+`9mZwV%k?1}t2fN^1HBZdMvW5QWRscTk`aQQG8OTVbRGlvvpFN3;I@J-t=PeRSU%WqS; z=<+2eD=cAatLEB0Y+cppcNFeF%ig=@AQ{!e_RwRzVk5JyIMqY3TP~Sco;OkvE|Rri zIPqfH5K~dE5aFR}q&)^lvHY z%nK6hBxdvLpkR>^7INumTg($)ea4eIg)1cEK*)Gf18hmOah@ec%*}iy2Q-hvB;)YT zc%S5YejOJSG*je+9uAQ~n}ecR!{p#nO!H3HkLhdXkSE^AbT^Yl_^i@b7dO$t>+1K} zJDe%!=b*78d>s2Dz8p?HN8+AQZ2`l@QSqx9=Fw z8;wrSGC}%RGAkP86xp_f*#>)og7vV5_*$P7GX-05pub&*pPcR|nYK1mr zldd*_O%DB9ZV;5QSgB(Dh9H~?@p3(;KLbpf&g8tqWO1`AkCaIM>(AEpIQ6}b3g3Bw z0VmD}{`w{7xZ-~A3Q9T5n}-nAI1=B>sC!0q z`O?P}>c*qeFwJAx`&Ryoqw?%y^r1r-=1P5VBy|>txw4t|=Xia}9i>oUGnbL=)wK0# zo}Rjxw0Do>^G}L!zR>vw^YN?JE5u_$M&{6?Y<9-B7`4Ny?sVPF__WO>^4(SrG9}Ml zuSY`Ue}>3|>kOy0FGU2?Dwm`k#$sG0hdUhHkj*B)2P6F`Gjx%;!p<6B;3HRi3_I7$ zceFz$zJzDRbx+c_fs1sqO?Dv1#vmTT|9rD1PGz2kPJe1)vz!UF-p{~V&a}#2Vm->& zv{7vU_}x7+*u$ZY9rD5-BQm&;D=fQ&@Dxx^#ARRJW=rxE_KD>xC->fMw5tT;A{YtF zb^)&V>k;klc$zoG)s*Vyd^y#B?DC`^gyMMs#7oezgqOVgO!P_u(*+)FNBd9=b3TT6Y)^;i^xXi@PTWY%)2 z2|KvFlU#fN`789m=`uT?iG%NGUP;hn_LD3DlXEMeB9~3t=0wM3-|lUEFl7=a5aL83 zqY&#_Tx<&V#3S_aIfKmrZe&bE(zK(moGN&}b}R97!)jMl*tVuq zPS&9iUuOo`>$$VbETJ8#JTsKV4B6aB@qXKn*(K{uPd76XaJq-3F@}ZBb`-mITkJpS zrlBc_{xz{@D(x1G4@nwxn1oxPv!Zxs8P>i%MTboxi&L~_ysTSdxSP~G?^{;%bu8qC zX5WZ@jCi`Igya`v!XNr8)3l4$iY@C}$F02Luh+|Zkd*1@Vm>hjMHxdN0P1Gj;FXg# zD_-OSwV1wE@Aa4Wyc))y7~$0OLups7dq=$iknU!tUyD1@$202BF%+e;0rl-Ai9=U7 zPM2GxUD;*Q69-pRpR~&!OVih8G3Y-Xiz_Y?VYUTh1FrocVtQ8$rgbC3QZJtqOyA%tWEQ%hL zV_(K5>$4c2PBYVU_e&Ec zFEpJa9f@$Z001S9CX+a}sIdZ}#~bdSScY}VW@d#c%f+>9K8`O$z*)m`W7Qf;18xa3 zuPkZgCPF;z@%Rf!a^^Hnv|*O_!O1v=72kZ|^2OwPya476?I1u@+BJi^qNW~>bfr^sM2%Jv}E=O9+n81E*U&`W7$*-19( zc$wuiG!gAGUNj4`JGb#-qwE?3ZdP1vFg_w%>+(`9H@3v@vkAtCVIJ>fcdIFfdIgcx z6y|t_yno}B?>@VpD+KNDz-x`v5cO)NrENnDw0}ql(f2xKt#$=(<+6pXY!7-ey(}>| z#HRL}hq98kIx9@(6`bu~vn`8$L-H1-U=;}oZoudyI0wQWRi9I$Cw}oz!wIeSVL0VS zy#XL-))OL}UI;PW&j;;wR^lxA0=w-Z1LBVPCPeOn?II|NwfRIsT@Z^obZX5MiCua3 z$;%y7yweD|UTaW2y=|w+et&#Q|1IOvIWCqDSqMK0B9R-RIGDzE!*oPlW;vQr2)>Nu z_-b#GNX+FTOQ(PF8=^~TCYp&Sl(-RI@o&t2y@Wx<8v1XsBsAoOu^-SzhU8dKEz|vzG!HMK`XOjU=3$jij%|xqg?i( z`DRy)eKj!?0<^Sgk0`o|1*Xf|9DH8bWy{xjK5149rj_=NWZ6+|0GJO#bDo#F=i8ie zTC-zkfzMkR;GL_P*kN(1#|I!e^hw3Dt$YAp8$7a}pwzIZ5m3-os4U;>m8Ckcz|u48dYf82kS zvlRryW01`fw{&y79b^d`$;mwG>-y=Qh&ty4L<$1kUhD_!Wu9Xw1Y+Q)|P)@2gYka% z{ikcmQb@#!5k|F-A*FtAr~sQ$J}gt+7A;=($LHmFZ7%0YcvepLO0mO{tfRc4?2Q!_ zGp$l))!sO~Eo-mP1jj8dwgkVW*sb$yOU6j;X%`cPwwT2%sn6Erqwq|HY4tH8X-Nkh zCS|XT&%nc+X+=0muwJ(2)7UL+ZiYX=|JusLW+&T<34T18Ik35GR7==BTIb=YGyue% zG_aD{c7#)hY$_H-k=JdMBGYKFjq51P2`2t7WE?w&rk^yrUw-!hfPOmMvh?onh&7&E zi14vjy~+YWm&>H{f3))V-Wkk@C?-fetmp{aF8iY$d{vFFz(c|s*I$MWeg-UkAMNQe zToE)V1X0_*gEu%6o$6t};S+G!9F!S0@i~i$3CDbJmHc9_L!RQ54NkO+C;aV`lmFmk zlWu9^dA3bHYVmxvkU}$KJxa?cZofT3JQZnoLQ&TWg&aE)lWa&F=M+nYPDQz=x|W)x zv^5u{XP}3sla~ACD%^jWiB9})!`bAHNdsWT3M-!5_s=!@zckBSsNg-V_3IYu9qsV0 z)@-+0q}K5R0sRg*yk1RwYhWF7 zEX^zzzVfe|x|=C!i}U1OFOATs4pspc7mDoYT*BM_jWN51*>Z}PbYefxi8ua|!|yoE zR+_Mp2`_~Q9f`jeY~J-SQwBub&2`EmQnYw22=?>p8(7QLl2H^~t5R$EzSJv>qK!CR zf^)-&j@evh*3TGksUIEMMlFU+OmUtap~LU3cJh4IzHE5xvxj>=k2(Xu$Usgr#1du$nW4gIfmJpGRAB(-zm))yxV-7%xCUahXf(eux23lI;}oA1Aqp zf2jBJ45vO^kr>0%K?}Rtm+mQv1$o5fqZ(Y#wGvh^X@Cy9#p?E?Iz887dneawheGmJ zp74L%@($9|`JT8UqCTLXzg?M!Il&bmqr#Pp1kV#wW-7ea^V*pF-VUB^_2X=I432cU z=$%WxkFtNR(37<`Dw8ryLJ%d3ocy<@8?#PZUC;}%_pbU6t@h_wGyr1DZ~r53A8B^; zuWm(~Fkca6JYq$K+U#oQf6v{wT38W}`OEO$_j8S`F~*1%Lp#Rv>PMvvD7pM6@x(&@ zzS_xkU?p>`5+eTVwws1(4P;hxqHA-OVKL3|R5r$yA~k%_;7O=2&a;z!&z3TSYq?&q z2dM(jR?9Y!>;xXeVnT_f@9{n8-}^oD-YS=IzgwK_I=tRq=cL@*&8)Cuj$_f&;lmwe z)-d0-i8_=>$Slo(cGzC8E@O;z6Hdc-#0yeTZ0uS%RP=1P6G-~pw~DTCh+F zq;QB2J%P*QRv5A%e_D>D$3)_sFWC-418RVSif`H$9*E<4lSMon*r?7$Y^t`f2+5G4 z@bwu0GFF3OF7;0SVzl*Uc&!zh;=?h?N3zb?@?}EnInqjd(!{*B_>?~EK{!g3(zGt$dSFi&fdGy81>(VON771Ww^)=(P=g<;Ty4eRoz6d`S)Yk>0Z7s zi1TW~UEW5Qjc~ax@tJ1dD>)?;=JX)&*jsOd<%LJV(tMKeQ3(6X zh;+H@a<(wB#%|%oR^9%M`YP#+{rfoEr;}iK0pgvF*=HNoJ(9nV8UsKkbD^IL3O-^C z0ivle?^gr1jKm-eu4J+bbD{ZAYEU*xJWNi?QpSn$%3p1wM<%L?_Yj0!xaeW zS=d5hSwpLNp@*-K%|A6*AHdXVpGQOa*z#qf=Wghv55twyO8;^0XRFpW zo5Fbv82~DJ*X@gxcK_yZj$bx9zJq)2shUZ17~a=muTt3Z27E?mp~|$|gKPP& z(u5L=_*JW$SS4gx?u8f<=>jkLPxIayS=8+5T+D0!4tp}dt|HyOkf&Q6j0)3hoVSwy z>HtxizaF6vR}oY=%Gr`4co1RGTE4Gr2KM#w*7WI+>Z8MQIZ=d$LLoLqt7Hd=hch+J zV3=ZP-tv>Q)$4;uJpZ7N@m8M5K!JSTrN7?cM)tJ9ea!JZ%~E&RVt2TMw?>OcbkrCC zsWn{a&zG0|*3rCCFP%g_j%=3623TUzA-d2y&u1~4EzJP?{B9t@7PQ^Ud%+1H@wlla zw?1XHu8db^pqp#O1>ClXr~LOxY+ehXPvOQa-t|7#VBHd*6EuA=jj)*yDYK4ijGS(j z_`OLDvY9Uod_j(IGx?`8-$VTm*8mt?!(2%R5)fefc3vHv!et&BR^0x3`+51>bn=&X z(tg*naRog*fskh2X}OFrH~v8;JpR8ng9$h$3;>Dw7kYkIyUu?uhe=u(j@F85r*KN{ z{~m6U`A1&aYTO*2r!Nm%$1LLA zgVwNau9ft-#0;KlH9YH~`14_2tfpg9)>AREx^fAY=!^;5EWNY~^hi&^ad{S?%%RIu#t~RpprTx}sXL12=Hv5ha zXSq>f0Q5i1sY3vN8lBDYLcM%;y`Hf-&Ae)a4VFuP>{ecACS;Ia!=-|FujNKFAeA+I zN7;lEig%T7LU}|$`4lgX`ANww*UHtumdoVh2^tWM>hLoORs;V?94fn(t0d-M&9L!{ zRSb7BX4mpv$v(&?cs`L~u3r;iIDni+eI5Ur5vu&Gf zkIP$r!J{%=@CAv5{DV>lumywbxIxA#5#t#@X2Khj?0O^YcDjTK+HOU(H0oYrh~%a* zU)H-?1=BXq)k`VQt>KKKbs%&oz`%~%_^i>h5BKj!-2kYz`8Ohx=zWk`;V7rqqrx>X&XD=;N7cIk$UPGc9g&o}{w%Z{wx5am)-yndD-uLECZY@eBSm^U{o) zzK0tKvm<%)!8F44>PW5P0zym?EJADn&sH;Z3=MHF*NS^EWU(dci}UMsOiybhMNgDR z-2G{uY2~!;$pLGNOvGWZpqOB)(xi6gc)1yix|uN=ZDk^NE&W|ftH+N}y9yfjj@-Sg z*VKF7Xg2_&%a{GRf`2F8&m%N$Kg-^`@-L3ivySLv#1k+%%4J@PprkS96|YAvE*IjU zc#CfMfz?d3Y{OY12>rZYu2=r%d1Z}Q*H$)EqZIc-igJIehQH@s(26&P!wq8iNGzr~ z1$x_Ke92~ZXC@md_4Deb2KKJvf^di_#W0_C-o)pPUZR)rB;|x&y%=JzE;0qDB~Sa$-X>EV0En5YvE%B}xa$D-*30 zzq&zk@N0!Fyt2Zh5K&xUcmf;-BO!JbV83mV^e8J$*%m-NCcI#AjX8-3=eUep$>7Rn zY+f5Ku~M`BKbqy@cP{-it~h}^a8FDzI8Ta+43X2kG@S@WCh zeJd+&6UQs`+&Ms;g0K2))Rm2hzHnfuJD`H~_%~iPUu9iwz?=6^YBOgV) zl$8TWNMSn`p>&QHYv~|(63WeLu=KCvN+Zw|09%Uj6OMDPfT`vAvKMtO;*DDEmN6gL zUm{WR%Geg4_$82!^vpYI27uX|EH3uD@PoOk)dnN|2$yQ7Jb*4c|9&j*_)|-~yw_U! zslhtMU7lLQcST^Q7GO_kIwLM;8<#p1lrU(8*!e|@eXVTzl}%jqv=#G=)x4djTcIR2 zo`YWIi|4@;5^Nyu_TKA(9rY|{d1o*lQ zUL()z-*%Fp*j-E4qt${V{E_C-dSNy;;XhTw1dK`p;Km#6=Lm8%~ZW?JN-4Dkoq zdsohF7DRa{4?0@+3V1FR=5mjhUkG>Pn-oL8k@wUX>yjqCjx$8FUTD9yDv1smksHGm(W`^)v!#aQ!D0Pb3J7TdrxLF$wgbdeI^id}Btop|X z^QL%pzPX6-sdKr=4*SyFTL2=C^qe~?27pnu+s`$AYRYCd{~<9eL7z`!Lp9*ZGtUsZ z_F6H>8ee_`AP9&v+RjrsNmRB3U|1}&<5y$(Fqq5Q_$j3lk~wge=0roFq0#vWFI5A- zG}wd_>2m5$F#p!X{?~D$>t!K`WKhcQSoXm0*_|L=2$2fTfR(k%ztnc+FFw==qR>HhT%VF z?_K%BA>$zofB8KN(5l-gtRL}9Z_Y+1%xVTedBmGGf)6x`cX6)pzH1>glYDsdZ_QhY z?d%G=>}7rU;z1(QqFf}|I%W-6$P4-rPR?3P6A9pYO)NU>?ihD4g1wR{(BK4It!_zm zoLJym?V>Y%yi_Y~x|yN-@G&AM_j9gx%>mJt?1Z)uF9*F6*|Gt!rHAKEuaTzR%=5f5 z0tWZOGDVk9J8!KYR;Yw$%V9A|L;q0ov|pI0mFFKy*(3ge$|Nj2%Eg6ZDQ+y6xUu33 zc)3v;ix-PGo0#OpF5owf?rAhQ(w=lTKadSDALhd`HyIT@b9u2MLqb&G6+hFS{4RN{ zQ>PNIrx+-yGJ`JDLoSmYo2YjhPgs1QZsF@j?F;^{A7ny0hKPocSj6A^RGg~Q65Tn2<@L~KmzBUHXIwmU3MWvU4EAgx%>~#v{>@d-g zVyxNt%kKV4n?wyP#;dJ_Fk0>JXeuASYuQ^`bN*3klMtvZ%HF&3QUCK3KfP_LYiU7e zSH7ns)V|G;T;ziO2Oik(e_nL?(w`{JU!l|yUt7xU*prQppZsk%0Hm*mOw8hP&j^r= zAZ0U6yqUU4Hmul|O|e_Y(9sATML5B7jgXCmWOgOGc-uQ6r@OhrOW~FEIHUP`us~`| z5=&*6RN>0E*_T+rEB<%h^GmuS1+I{AXuOHAYjA#gU_M!ULN1#ki}>_V)^%azON5yx zX@0U#6!W~+wUi$3xt;+qQUpLgud}S5JCX}|tI;>8pCOd`jO#qMM`NsPJs|Sd=>C!V z{fK|0W|In)_~*?=?vi<92hTMlo9H9IF`$dKTlw{&4utuL6jw?;sRD0KT*glG{{pnL znd~S&?+C=zgl0E8mUES&!*NlPo>FvquNsiW#K_h$-(%R4k1J=hvDK5m*U$7yX6Uey zLe9q)@PxnrnYCPP!W4>clDF_dwU0>RZf!2-O1Xr^3toz%#1;n?Cs`OB?rJgHT`r`> zZRkDIw)s4^pnllkP~Xoex?jbXFWU&rIf`wPaKQZReXE9OFT|Gr_(UkYegutxuWd)q zOWnW9d@J4+yKBkSXiHGlM=s_cd>NWTHnuUrJbMQuW%g<_G{JtH8!p34RM;3@{&7xHYQwl(@aw~lkkDK5bjVo@UY${e6+NzuqxKRR(1%rU|ix6=EQM^8p1ckFUUZMz-)oy^m1pOLcIy z@N&0};rRfMztwvp9TB&b@9GrE@5(W7ibFiz#%2D~Mo>RsIOBiJ++)OR_HF`BIGSyC zHUDe=zLoz^unlc@-9DkHT_L1894v+Y$8Btn>Un$aSv44JL+s9_KSHU$J(}Yq&(>LY zR_?D?%e(rmxN_^5BdLI5q4B*=s8- zq*Kk`BW{G@5yclU&bQH5q6_1u7af+)zhO<%Tk1Unhz@S4$hmVPtuWmJ|a z82~$giAS@2wG04hQ~RI(>G(o8E8YPSX*mp+{&4L6;w9VHu02Q`N*)%w>$U}Gz5Xyf zxTPvx?fyajzSaL{OE(?kh5adJWr4F7R26D-e>Y_#9bC&*BC?Yx@NA>C)JvI`j2}OD zNq|y#z+@d2$wfo#kA&Gql7Uv3@Ah{yGpabp?~xtS?!P0M%W<`crD;fq!^FhfVch60 zF9b>8^6NQI3<}{+h=zC})kmjFltP}ZZrH(TVwhq(${;|=1PG`jHkwvO7;YNZc^=}T z#V4J&@P+(+?@W^6A`>meB;kwk_E*<2c#o7;?Cs33@9upJ)}v9b*M?ym0R7#ZZYxe{ z)WMR0Mz-kiemKNjFJ(dy@SC?EV0CJy9x3C`0uazzqKXu4vvqm-^io~~f#MOgd zko38_#QPxXQ-*R>41>4U5~>B_NIk+-3r?$*vmb14MQF$OgK%`CjLxQYe2j zA(REYkXp|~$Dt#taQlnws+ErD)w6FUGh$&RbH%(m*Ws;jnDhP8!u4KEs|RU+UBfm2 zJPOK2lg9hqw$KtU_x^1;d>CJH0B|>CV#-N-EvJPQlN?0^3*mWkwW6rOk(^Agd^4!a zYHjrBBIP$RMzqVjR)`BNhr!rlUZ|Sx@*oqe7?()-`?vE{vsRZ#V=9N)v0Hei9=N3< zhNKuLyjBi;neJ!H>OnHzvpn`eX?HmUQsF(X&;!GOZIQ`4?CbKy>Vo4Sv9N;1@oO0b z%jDNEw_q{Dj1v_4H81$txSDBm>g@fipYs<^ z{>2|pa@?YX14c#|N3+?sL-SI9`8T`#&k6s_4XQ4xN^AZdzceLG16Ldx_Aq`>;bPn{V?Ow5iXT~ zdz-en^Y0!BhR5{00h^!A$!Cxi1QP&-g;_u1wvdc2PJ=a zqS8hI-F?c{l6h9pY!AZ@6c@I1(Yo)q5UwHE4bpR)Ff*+sbVkuV-DCp5xN`HbMZqLJ<5D|&q@>NeI zOo|94aL8hEE#&SHz^1~@!u!>@wVQfR$9SP~jD7df?#4j|z@1BbM3yhP%Tm_4*`KZa7o*SsAR8SY=AL_gD}aFh z_hMrD%DA^}!8Pe3Z?%ZA+KJb#2~gznMMWpDLaK ziL>uG7=I+*#(`;^V#BH8nb;TM&3bWe59r)XSYpV!zLxJwx^}Jg?5h>TCQRij*^eX( zs%RN3mGS7wS{btVGP;FLjSLjCc9vy~Tl}_mCARTSwf&`{t{SLNLeoWyo`^%yb(yFw z##A%~WDk%GwIpv;qdab=ZNoMIyvk)DREU{DvKcug3(8WgD=a1sX>^U)zihAx#k>mV zvKD)Sv>l?L9Fy0X^yjk=>7dKbM3_%mz+ez$_sj}HbElGw6p7nmPV-o_1U%xx*UB+T zOD7ZyeA2m$FZ}h21=B`3NCqs_fN zF^2bQ85b1=Em2jeqIRYKmT~D^2?*wBzN+VT8(haZLKaj_$t&pAb6qyoL*zCy*^cEh z@qfK!o_4Gu=}$+aKL;5A%a;l2{%Y;&ALqW>vzo^rujs8$y?arjCl`K2Yt9)?TNS)N zW`E(*Au)d;`I$9gi9-FghX0YfcjfPnMgt(Etcim^d#JKW4X6Ld>OFq%rt~4*!*kX0 z>-9P&rClyejHzt^$iZY%p1Dd9D_9gQn=jjLDrHJ}SO0o0w_V2MEw+uhrM4_^Io(gP zr+N}T1=ZjD46z~HDVpuc#RpTr3pYTn*XRvYya2L?%2>G$ zNl#+EvadivJ8U~tAod{}0LFR}{rQmb28?eeZc$A*!K9;fbGa95HZMr?sy`(~z$RT5 z=NO`gU`~2@WSk;>A;qS+MbG94Zs#tdkuEOuzhrL^g+VL6jaP+QS2*$8Zskee0ISqW zCWWG$>+h2oHNv`ObhA5op`I5&jEBs6E|K;oay%8}5%5o*G9F=KtxSSSyTq0CCD)6= zC9b8|A~v*|RZubBByG?l(;0~W8O6YqXhvgh%{2@L~k)&xXZK-zqTh)3N&t=MUNZB@B|^a}!#LT(O**{@Z9Z0JLMB zlDq$*Z06|a`iPczSxocm;$You&5^>}!qMk;&~o|HNh zxA0Ok?Z|a=cCmbj>zKe-^k6-^9equejI_SBToi&ya;Pb0*d9r8MXilo_7nLn5;AOs zjby+bH^kR(p2TN#(C-H}D^FPyIvSxDqL8+U8hKYy6DY7@AOuA;F znX#!?W<(5t%H||gv0=Kb0yBi~xB~cd$tml=;3Wpxp#Fp*U?Ks^;gm>LOe&khhH4!Y zL!oaKUExq^f*k5)=r1+Vyu*iMe3%5I-W1{_zvm+OETIIB!`oHcxdLl&8dplptl+Y< z>(=`6j{~a>Gh*adW7yD$X)wK-i?v-sqZe{)?7E$=S{(<&r9Fk~LyFJ+IlWR(YBlF! zGp$^wvpvhx!=XHGwN0bBe0=%Rzt*TfKH6=pYXBHJbp6xZy{rDp-_Ej(v8Wg}iwW2q zR$Msnvz0?MD&os;dq|^~mTHI&M(}%=AEPczK+)O4clDbfy|w1DRqK5O84@8 zLv6m8*M`$pPg&F)*qR87_OIns6AEacf#OL8Hv@2!uyGo$kVBzy<=be-!Pel~a!3mE zp1SFPT5ClB&SOgTv7`=X4CEfO7vy-i)*-Lw0lFdyE;ntgB0Xd`IwYN= znp@gmzgV6fVJ`Q=1==Pr!3J;84tkLR;TlN^aUI%)2j6U@MPBmw2#otX%9X~;AYlSc zN;!o6Moh)%vB;2TkFwe0#K?#8#6yY+d4~z|G95)0B)a)^Jp~X zWpPxm1_pra%8m>FNB+K*f9Y>%^3Rt}c0%gaCb9#nlKjN)TDD4SmiX%&%^m=>zA{Ld zbW~s5QF!xJF)oy(y;vY7*#lvVTv0Rd z##Z*7HIsNuyc0GZo_9h{=+Z7f;6y*lgmjThMCP|I!`q&*QU=5b6W*j|2E3@*(-AS& zXSPxK)LQn zK%W1K6`^>3-ve6f+k*FuRs%q3_FAq!JIGXcwBOy)cz)&)PWF^P%d)=D_(5n!-BWR$ z98@|wd85%L=Ji3=itKc*a5ZfLT5i@=@974J5LtWyb;+8_Zt>YpkyE7Y+GV>Pr%xBr zg&eU+h{>7*qB;`N6*XCpk#);2h>4+Er9!s6q z=vvB8e%<9DSM@=QkAU;mGA`{QUS$*4{H7K6hzxpqT1ni+Kj1RC(}D}oyqjE%kiQJM z%tuvZju;;DLJdZs>_(FCh1O)-;0v|T#Cb|$JPj`60Z`;(+l)G(+o-(!KDdUts+^)H zsW}6A-l>;!D(NQKkD2L)I72WD|6eCBc;N;^NKsbiGIPC!kGh$*9_wYs+J1qV=uWO?w^<0t5GF!;ZTRz#xtJ^xN=^=H+( zJ4y|J?Qz|9M$disnb_^|3)0%s7;k3H5&XrA)+2LU8%+u+u+;^{27rhqZD!AUum@D(l)a2Y4sd;@w z3;=0tY8^kQC|A|6{tWtaT1o2GOf+%RyS(E^vdc!*JDHggi!=Q|Km+Jo#4D`=;^gFQ zR?85t`BPg`>$pHX2+1noH$VNOrPvs|h0VMEBZ*00lH+ciM%G}pmzP<`m5w5r+`?0> z$OGqBb8(@J2au1#ariQLY8Qj1e=H}363mu&pd5PQOL*BoR$l6j8Fwh`3G>{Mq@*0F z34J*0>00sQu3RqvxkimYoX@FOcMAqUxf*p(_TGmj5?8q<-T!CFzWtevzHq?v+35Id zg91A7yOuqmH9xM^p3!CiD6RKKbCKD-fBo0JN9+BJ#^)N(-ZbV{3?qQ=67B9CFBJ`-&wc?Fx+9~zMPuAVXAIG{XOKj4YWO}C3 zUe<9LvbhiG*BUO>7UPWf;})Ls)@Jdb>Nrz_!bXkWpXd*y%c1H@*%HT1kIM3S`yB_; zBW173&)^IZVUqExM_gA{x)lT57EeQRA-`(WmXY}Vh#3HW$wZ~tTPqEu|8E&*=Srj! z-etsg3X)NQrR<@4)m|AB<>_X9bUc=<0(Z|*e z0P$R^RhfGqUgmGF!35Y!(i%5s-Q@qm&woB-4#$_@wz3TPtJ%%bWB@35FYMSi_TT^D z=SSncjP_?%6!)Z|!s(IW#c_Ag?{BvV{$%o;sa+;Y8Obt|HC4#MB{aas?Tii)8T5OV0jWk=khFC8W6IGiH1?Q+5os+J0P zQTo`vuzB8o87m<;x^ps@YMU`t-+5V0Ri0@8edTO5$)x%^#Rs*()Do^3o8&qv-wXzB zq~_ZZGXVTt)iUsZ-^p)kq1{D7cfjFn+ZW$ywZoR=bB6djb~9hqJCP5pWR4YPmMG}8 zE#&a0~#m<||fbezsB& z{FQ6`eLrpAyET*Np@&S|)4Qqx{;Kt16d3>?Sg!hB`sWW1$=e>uasM{d{8rN!zWh*mbeXuggwWLrJ&w1>+oSJSkj;GxdTBW3^uX%n*v zo*(zap%!ScGeQiMw3*?^pliYcIBB)R28cI?_tozWO*{1JF&z31^R-JZxsVOjHa?l; zDT~Vm7$RUp6uWhZZEc$DV3@d-Vp>@`c(6Ugdn#aAH`8Xr8L*bi#hMka0ddz=1)>Bh z6T*ptW@Gyz_El&x#m0Y(G87_p%uR|QCp9NWfm zHN8cbURNw@MGTj5Dr6L*Y>6-B9kzAd%Db(c+{<~u-;wbWt%iJ_{2`hhhMfi~#;BcmD1>`Mm>-f#zL3cB37Ad*Xcx{LtL#Xa^Tp zNZ=H%kOJ9lY)br)owCkKIN;A_FaRxyjG8-$E3#0FkA-VT71;CUSe(~bBYm8@&P5Y zj>`whPI|bJLRHU%h)8T=Vue7d3c*CJ=NVVp8m{zmUz>d&hhq{R%XP-?ykn-a+}Dp( zIN(qX02ynAdN_0M!?*j#y-f0RP^w?OcXN~tfDf{|a3%MxJ&yKo@dNUQV`W`yZvi}Q z@Ipz0(J~vlA(mL696F~XTaCg~z`#ptjtKJjw$n{B#Z1y(#4(d~Ry&2SL| zr!B+fvi3_#V6_;3ZXM@1idZcL#MDDfC2G|9N+*29j_nyfoPCE;f31%6|0S_Zk#n^! zo#MT*>1g64?};+WJu*J`Z{x{kh31+azgp#vm;oRS$gSnfB1j&+^i-!qJm2V~>}REu z__$^Bp_i&rcX3)lXmB#83$V^BC*Z^QExdM6-0PRb(s|~)nt`CIQr~(`3Avo^5i>Lz z@CwTmG!@4YgJnQ-p#TfZ6Ci6jeEix@c2y(3sP=sE9JIU4la!cjj`zmh(b%)1|Bi{d zyh;60f{^VQ;Kd+0Q=`5f|GhKAxz7#};J_e@ENR1q#P>4pk7U*w~%Tlu=llf0Fi#wkLqWa^XqL%dw=IsQJT)^i?i ziFvgd=ELE=_3C#WQ3JqGHY%?4n$n02B3M2j=EX*X8SJKqt}m^5=tP8<{Irl>c>#sE zE*;q{Ji)%jkW#sQ9e&mZ9QsjmBTvn_kVi6)JUyZOJ9I1(FOG&2+x! zd4BULUTl_Ap;23!`TfWm02-BB&-W{!5yg(=Lf)#?P`}5Z8Nf=ddi+Ef!F*8fp8i#w zW`~%q9Cjy`AVewVl2}lvjm!Le{(?zhBgI-9wV|+7oSca8Y%Q5azler-(h8c-x)xJa zyhH$k%~+tGYp;=^e4<;yk#hb=BWk_JHI-qbH~6byim zviGhWN?>%To%k)jKfRXAJSIK6z$dYQ5^8X0(%oEPQtlMFwuJ|T)2a=jY;24pEa}tL zcui!p9q8dw5r4~Oc|Mqu=+#*vWfPo|&F8TNeA>(_>tDr{k^-1W@{;-kdc1pb-JD*4 zaNA-&@Yf?7cWM=9i?XfxdxO2HUKL)hyqGWBBRecfCly!x_1Cc1c{S(?h=AOtpB5=CB8OAky6DPNgr3YF;ODbE`A zzf7yhM@2!GhPcpm*j!5nkYK#3Ej<`eFVjI?`#b@_tK%d9j*Dq}7RZynJ~C7A*?L#)RKP zG3RiM$#1Ozp!qo4Q<%%zwTG;Lb~xV4u~?^MS(S-&MBYiKay(a$Nz@~AE5feMMZ8g~ z&z|hB2WAc_zKPz#hr#l)wq~XpBcyYCj;E^S$V&=dI?jAKA-geNZ~qay8;!Nesc$oc za(t}$jXx7=U>(;v1>W&=Un+)%gnm)_7k+I~Zp&zQz(P&I+ z{eHv^fZ%3a&$aGZsKZ68`a3Vj;u_m3GH0r&qAn2mg5;Y z)%qqe|E$fW;+`^cJBoLb3x?`WOS>g6)K#1{B*#@7`peH^w^Ehtq|7GuT@gk~wzHv{ z!Q=-3i4oIwD;t~fE(~{q{Wjj0{EI)Hdtq@Tm z5r*5*wY0Wpy3y1TkL}=kuC=tV)01sm#8b8IF`;K&A}dP7YkQ0vJ#)CfA8`ZVvB$7~ z;Kf8!HIT> zk9u$7W_DCX=8OAhdMS?7=kUzb#T*b;DQ)cY3{q6+BlCRGzJ$+$^+-HFqPVCCu22p4 zN9pOzGhX6vWkHV(HNy{UxXQ9fR>L3o(Wb_$;^W31?gTo1-_ad`(PRJ|-H|x{^x=$v zco|Q(nQsmn0tkfH{M74Sojq%q8!79K48(Y5@{dSWdtR=avx}0aZ?jWq)OX%bvb~)- zlAh=8Erq)`%w zDJo8p|2NEci+Mt+g9UK1>p8`7IbF(G4j;ysu(_E|RUK>(87fAHO>bgB^_P-*fGH%o zz$g+HcqJGrX!LxaCFvweIkrN`E9o7o_d(8y#F$||G>0!bmR65vrPp)0b{XTBjWq7E z>0B&zRm)`X+LeBkOSHqd?HM)%U1|fXxyG_fWJ;}waWv}l@!yZ$2pl&6j^5aRTb`VH zgsEOCu}Gh{FFrV3x_1>9ghPfMki=|$T}ydX>T>d&@K(3nd+RjeLnD5q~< z?pXA9Zs%RUk&s@^zKvId28aRft>gP1 z5U*Llw_#0uh<0IOQOg+g*7?D8oNj4mnSa}CXGbgYldi)>b&J_-^@m>Gp*@ z9V{oV{xNM_E~G%_?1Aw`2cuvQ*Cab$@8KJP;|9Rt8{6Neng>dr!w$1PR$=N( zb#p$dq=dPDkPWS-41038MT<{rA?r=-zMX5ac-Mc@udJPND06wT6~$L+uaQoVa%L@w zdA)*IdfI{bf1$`r&Fm=^0VUa+EM8^{y-a3Gx*RHzXVg!!)=q3%ST7Ymx&34Bn9x5x~IX3$`79gS~buU5g zr+Z6mOVu_&!~E37MY4IDiiBda#DVSP9X|g5*?aRiDX#Ne_&HV8d-p8t%z%UhXamXG zH$Z@P+lifA2Y>f-;za^x#O7-ykp)h^VD7!Kz;^6hNdwFPR_w&dcctsZi5**(gg^*M zNJ3}@Axj{{GOWX_-Cey@o%?%F_vxvwsqU_x9WnKnM4vj#TQzmw^S;mfJk>6u4-$Dw zd7mE~!}F5NK{zsJaaY#iIT@_No?__?QYfTwS)>=6bi4_78Va=i2DVD@i@*jbLf%*r zOG{yQcv;UdSScHR+JE=2S~3@0xv!7w+@Y^+_=&xbz{=$ha&RIS>F0~z4KQ&s8-k1U z+zTR{dpjQn_I7;j<3G0F?|XR33dWS{dfRXAK862O|K55>Qm{VveU5fuRk_O^e70IQ z+SU!2;#DzId_QgJQ8!DLGQg&SLlFl+pzMQ61Y2Y}09 z!1QWp*F4x`r#dHE;~4A4(YRGOY~P6KnvyH~H8?|BWAGBU3a!UX;Xq_rPq86uX(P2` z9H$GV!QI%lFKvd*0ib+)B7oa+z`6n<5J9&%0asWFeXI*6CMq{S$De>dn!p^UB!OqhsEj;;o_Uc&Shs zP<&fic!GsUJl_2lL=mx)ZwB zFBtbUw_FB7QvisVNqihx4yr46btO09x)jGmtF*DuQE0<_X*a`%S4Q~$^UYbga!GXp z%D(>O^yk33#M*|u4J+~&bz@Q<51p6=u4Ux1S%71=H>uy#@#8IdPPT95vb79&xL@tX zaa8v!GqC2dJW1Ss9pfD9tbH>^X;SN+!tJ%#Y8A8TXvAzvFP6g|NG6~|67%4Cfpm{L zM|$%%R*IOm<943L+XhD}pkh*rV}f;~HB7X?#98je>B>djhcY5L8()KQ3UC>H^E4Ho zc#mM8+=vNy7dLTf-~qgD1z+o%aF;xcCV`{Xb$H9o;}g!qWL#;c5z$mAoFNwQ;t=~9 zPCL;Clla`k6z0kRzd%60?{T5@x0|v1qs@>y0HVge7PrfsJC%*RXJUIH1v^4lepbh5 zlA0`c6YH|19IV6>0wB_ayGcYS8N*9<7ABfwXALeA%KP`NBK?mCN@6e89+p`gIM1)fvZbeO<#1dBZJO zp!%nc{h#2hUrzo#mcrO3{iBmh?9XSgmOLECvF7@Tv)^xF!V~rV5Lf{54NP#nII6yQ zIV=AW0?`oW(8-+?SJP>w$vzX~<0@>O`DMZV-*1;t zd~L+dJWKnosz|nECSk%EPcv*VHq%xJ5)UBc@L6p6*;ivVUz^Y|G=Nw-d zp!IPMeBT}kz@saC{$`ULu@NUAWB6Be-ZD20WIDas{ZvFonnC{QL zUUNM95(K?4ze0;PW<|lpVr5jhW#Y|3_dpK zyrLkUNaABnMMz_)$>FpzM{GR@+E$U|Ni?7FXNX#|M`INyg7@Q% z{vxQ!d9@r|PvAvsz9mP8S)j(W)Ivll$j>k;8ppLxxgdFe(1Yi!;FFd|Q4#WEmI0`g zm-hy6BEg|})0iMgg0fz=xSxYFhE`^vxyy@|R2oLagAmg(QB^QjXbI4tB9RK!BbV3I zpTKk@l>w;;A*984wV3{OskMIEejkv~vXhY*TdP0v_$up9p@)`EFje+6hfp0mk1zIu zhw(3UKGKlq;Pz+Ezl3o+SUP=g{D+MtfyC#_L$aQR?G;PJhjQyATw&eFsB};P+EWR% z6Po~S)SRPQRuxFQQTes0;G>Wii7o>kHHj(Q#JH?8(SsH~mvV6Yo5JzVHte795Mq2A zRGbDchbM;8zM)I8SC%spAHwBKR02rSE+eR7CtHZlzCQPC3j4~miODvpcPI?)aTD*9 zilp>)4u$R?5(j`JB|Tx>z%n|~j#tvekt)jr>a77pgh9bf5t1jzVj&;QB9;jp~WDfnA|1x2{^|mp=Rv0dcRZ-GcJT_ zf>6W7MF7R9hJAKXjrb@ zxY*2=Ocz^|!VpWx@owasA}^l1D5ZOE8*Wm8QS^_YI{e!Dd&dUMQdLxt~?Lf9nw&3!#MU}Qk8-_%x3$G8R z2#}n^pgRC|P?|J!!o(-!MJf!}NtHU{v=8WbgMAad`okpJ;h>7y6oTR=;-OL4Zhe@! z(m)2&zCribAE~|>_flC%s1Cn%c)6>Kaq(NlkSJWl6pZx{zJP)P2GWWLXWKkD>cq+w z-z3O5#Kw|lI8(V8yZUQQ=XyWBzg{twrOkK9?;F&$WFi6I$pZ&H_+Y^AOTG$ZRMyU$ zi*o)kWwve8W&Tymzt>-A|MG0fU)C>5&qMu))&SY9eG_gL`Sc>8YLXS6Gzqmz8Z{md zR48CP1w&)#O3{Ifp@vGgeJWlqbdt_)^40Wx4nL63d(yEPv*?f*UW{%19l7KU2*evIX55j>nGiG^_og<%3k6q`z$v2cs74Y-HEgRf1;)AQ$NSOMvh$XEr?{h0@E zSbL$|J{mASM(Ej$YTs*-C8dQhvNlwsZMai9Ql~t4ZYW45`eL_%x|c%lhRQyMi<8TM z%z>PM?>+V%QA}mI{41A{0%bl3Za^k5EINH%U)vy9Epr#=%>SJgL$vwlX0cdb+pu|9 zSZIhRL1^`HS#cZ!XZwz#ApN-0RONS`8E8G0!tQC`MAE*A^Yy5XX_zIxStgEzAIN9S zBUyD#0S~y804~R5^4o8ZI*4^Aa66O?X9`_n{h3IBD^Q@oi&bKZC!CM*A-qC};|0mD z(7pjTN*ouAn6z z$38dpl3A+Zi)22>UY9QoBncpjsppkrOsBS_K1HGsL5^LlzFYCnnscHTLpAV`p&?Fv zBoZP#HC|yNx6f4I_r7B|=p?J@IOYb7Q?hm@PVC^KZh7OruIHS-|GRZTzwUVx$cdi} z&2k(t0T9&)p8o*4l^Ta;asxi<4xOjIfOSoIVn~CS^Dnl*6gckG*EQ@Ia4Vbx1H?At zMwz28>i|M%_syu~99N5FGMHxO8y7d#jD~>15mp$g2<6WWq*~+HVPzMjO*B@E&!r8V zswzjY22qoHC(}7^pvuE~t5dQBEGN zcwuUAi#6m_Xl#mvP>G+S;>06Ia8R-g+S?1>?HbHAWf+U&jbakQ{khiR-dAAdvR`uG zi^E}_PMCo3sug3?-26YEVkcmS#*{zldgQUZT=1ah{ENQ;M_H2J8voJyBg5f68Ok|O zo?KiuV^O?eKiEn7-?RrGRNm*Tep;&U zV!zY3cU&#*eC-&Xb}GY*Z^nfrzGm-3$g(rEn+D>d3L;aY;$c9L6P2=k-PtI2Xc69Z z6pz~mE&2iGO8|LqSQh(Yhe34!_$G{x@l2Sr6eXlwRO=I{Qj)k-V`VV3(Ssp+#VWjA zENnx4dsCP_kmVR%TksiXV6q7REXG#*OF$)xoeURgDn^?mWKjedDQ!aaqschlsBkC^ zw32xYL`h{|UbdmU*S~V1ejj96AHBDhM{w`WTA5u>_&X27dZm6By+q_RE} zI12+Og7rAzl;7{zf=g8c)00u`90+inh`_42`;>~Uh0>$E5f?-`t|(Q;SmdKn|{0& z`IAc0nJ)WL9) z6)t3`90xR!?KI=J@6QQjDZXJG8E^9_F>%Qn6So06M^)COarH_C!qW2xtZ%`RCPaA2> zPW`ZfDm2d9%UUW;hnRK)+iEQ8s9hUz2cr`{U<5M&x0sW$go5i&F-p~OGXcD*#Lh~@ zW4(uTVq!tu$rPLk-j4yXzdZZ}Ieu44U6AH}yb*y)1($*k*`ZDH*I@BaaKrkdrPyVwh!RPs-T zyw1P(c8hcHs}gJ1f7JUf&iy;3k{_)^^WY=jeb`U`-L)Q9F%1{cS1X#tj&aMJqnlO> zScS=S4R4RWA3d-ZiAG#W94K}{qW-ib<@mXR+Ti_oxtxA!pE_Ox|HKfq_713~3NzV( z^!N**m-=Qqjbkm>E<_h!&iu-4JE#r-O)eJ_&o}^_a~vh+J0g6rvn1IULqa?ZIPT*( z$x3igyETMNOQh1+SGBa88`|yt6h$~%36HM9oL+#hz#2wNsn}O#;h?5*5}R;&nq#W) zqNn3o$xc;j4xJ6ST=8J4!Lh5N9%nk6FgGh)WPE%KTW79uSGH1WoOAVe-^!(X7}z!E z%={fN0g+Y9MyELYHNXWJ>)g56E)U~>FoX<${bMT5ck1ib&*`7e&dpu~m3o#X&t!;2 zvJ|>qn{XFlmdZ_`%8)lx&>CEnuS_aH%(b}P1U&C^JXa`!Nhp4Ff@6iKsn08^bz@~x zCu~pPgNZhBA~*LIYa=jSK&8h-I1NDu?-Be62GXXAqz1$S20C#P?U(_kw_!F3zfqql zj`yqTyNQYVIu|$h54ruse( zr$S6p9B)a)F5xTu3-Mxa{xEuL$KiONf7P;s;GlBQbK>Hh{cB>~<6p{~tRMrE?!ubdKy7lM1dZQH#NF{-K2janM!PjC2 zO*~sFjBb72vCWvpO;jrkU4g}T!Agw9AH~?1A2$)ZX|O&&{7<#}i6ACH!&E5`lV`8m%VeG@jxu31% z6_gX>Y3T6ajA9}{{MT9T0VCLj?d;FHofD~tP4l!%@=B#bL3(sVC^WTS^*+4(N`>*ahjE^{d%FbwEwQ%2zA-ZY%4Pou;7^B( zP0O6e&-JwpU$x7k`c^LcR|foXnSBjObCa{HlItFScSr^wMuW<-JercA<~49i1ukJK zT7nBvmX1PK6YinXIXe)XFMt}mD?`l=n>LHygi8#`-$C$iNt;HzsM)=QBE_5_hqtm}B!t5dhB^3iT4L8y{(+PY~xeOwI*l8i>(G(o= zEy8=U|L7Lfz{ntNWl19Sg&K^qk_S1htK)H8qIz)&rBmo7G=a`Yo$#thE`SABE&oH4 z^Ir@W=YOw^&hexkNZp6;Hst}R{HvDz90R9R*sH0QeG|h!>yI?#J1|7Z6!$y@IpjDkA~~;R-s8!w3JHeP9Mhy zQ`R7nYQ!}u1|hv|uTm0n!wlD1bKxXDbW;s(<|-=b-#g=Yt7QV(XDmPp-vz^Hcv?Id z6Hsv#eU?S_R19y0zlD=dbCT%{UB^pqNaYHyYc-UP3AkQUFxI;H(;PJ~KK22pp&}(T zW24~5lTbVw)PN}tX{10)fNv>0lp99eui+E_LVPe74}L%$01;kqzXtOdwIX=86;E(GV4F!{AxtwT6`p-%12`|Hm-WpBcjA;gNslxESlQSU! zFH~C}QSeqVl_)BW(G^^0a#YHkzYy5S((}?EP|Uzi37R2rWM>m*saa)2kAh<)>v6HEbyH57z{im~?Cq@`K6UpE4~p4>X61D9_eHkpOba4xajoy*%?%_xDl8f~-=&^bHe-Iffo8e%3A}p$;AHOb%UDMU+&ilUfg3 z*)-{Gv?+GQ@cQ^~;Upb`Iw#;3x`&9=LKk2^`<$~b3}La7HMl%0phjheZ?lE@CDJr5 ziLgNh?+ZIBjTI-S#G+(NGVmNY@cm|-bW{3AbLn^-qthxT`czD|I|CHWNbA^V7f>qW zak*+bU=9EoDKQ>X4Gq)nGod=k6wxZy;KM=>wAAeR7Su%3m?;GnL=I&-wz>t-S^KB( zmQTTzCNVi>HLinoI6*mda$@uixX@HFlVp1%m*G`6V`Mk{`82j9y7&5{HvGbHdUu9mE`mNci94((-co!n zViO;aSyn+D`t}8?MWvJA)~9c5YzwY~feBghogIXzk8i=nrhzM9;8^ek-gcAU?`Xm$ zl$xM^B{*7)K?kt2n8_4O4k~z=EyCH}*pLouU5%KNlR9QFRRsrphw-7C`8kbASgwg0 zE~S{SJwmQ3*zY?cXy66wV1Hi&;sB7b<7aWBg&8U{Z#tmM6cv6S=A?l$m03Vb zbQ7+VwWM~90(!YRwqUA96(xQ#ZvcCXm6l|~S@+1f52U6+f4_Kx-QT1K9}JxFC0`#d z(!1j1Z_oL!Uf}g7#*r8e<;_2h*FWmMQ;V?XsXS4YVTK8aD<-=w_Wj3qe;OY^U)N+8 zu%Z6ku=SBtx?v#Ps^Peuc~5V|RD+2cdmi*+E4vRm)yGHun5QzN{7139oc*Gs5tpe9 zR1R$ftFRRdkc#~T*AeiLum@B+olNwkA9iD#+*~uB3u)B6U5e??O~0~DY$I;r8b(<$ z18I)a71h|?n=->vV-JV}(6I?~RNgItC~T!59!ua=H?^XrCT;y)z9>@p&MmnRF+u6I zxJ8y=z=WxA>^pD*%`?^@CDEZ>jkuCAT*!QQGx&8JD`#%hHj8+z2v*@4dVnG)28hT2 zIYco9FOFSU9C%o0%vd8X;7sJc#5LGF(&gG>sM`m=y<(E7n(wo2t%xC+5(j@O;T!vB zShFT?BlNFa{u_X2Kv197%P}3W+UrZ4{wD^uV5pbPIQ!H1y2t-{sOK?U$B%75Emx6O zTH6=7@s_{CWPcb}iKr-WHdvRb%a3os6pFeQ5^^hMA1Ndx_8p73j=)vTfY#Q68D0f7 z8pp@p~x1S7h>~&(XlHO!0fxT5LKr*sr zU5SmjBCX(JQ^%`Jg{pcm)3iv@iqu6$DKJkRt<)eyuUQ?zY^!zvdAofri!3$nx&C|L z+beG5%-jhE&rqy|gZ(0rZvQ%d_>V#rOc)PQYJ&HRRJOf6Bn~ z%OD4Fa-8!YCj4VpVa*!XRXBq<}Vj# zn&>#=!)vt$E>D^m7p}wa%3ZjXy-?S&!w&WnQtRtc6;*MAm!Z{j3~#!L>{?XNJ z5jd#0(zc~PW3nI~!K)-jhu5s`< zaA0&DJ}6a_PSlKHQ-r=NQXGn5AkI~ss&tX7$>w)%Cq<=Fp3 zdfsNcdbQ%yTb>#Uo&XNKn@9(4!4H3!=a>!V`*E&}6>SoNZsWzb%S2p!^D{aCy9+6= zTGvM9ew}w=s?61!3|$%t2xX(jlx|INu~B-%i}7r^cCk{<7o$TLd@c&EBk8z6Gu|lW z1Q38wg3nD82O|$)U#YnX#aR`XfvN=v^-pO76>U&(IB*}16{D`FviYgjD0SA}p)g)& z{X`esFAe~I0#(rzZjxbmVH6H-X!xk2L^*?y{XKz86(25gs-;v@*zeDl(iJmydjqCv z9tgsY;B-9g1k}s&F5fO6gkj*LilxQNEr>KCrenUyCmqA@+=h$fT&_Ofa~U>cF#MzLjn?%51`a+?z-d*{u8e-~e>s+p4I6t6lZg;| zUG?G?@tNoNg!oS+D2_tzp+z|5D1A$X${SFndvPVPzta7r3E@0feu`9VA}o^yoynV+USh z522vbDfY(}%%Sp2*@uW4t9ZFsC7Rn;rOyrk{{cd=D$KR(AhRIe3jSGf8AO_7d=uv7 zv;hjt+6~BrHpW<12q%@sOH~f!K+*NM4q8Uc!A#*mWEtKsWhesXB{t!1@em!<_e$L_ zNrt4i9ID6j))$&sr1TFlD~CnMNJ5^DC-A;CbVaIEKKHq{K@| zj!LCC$y0gAM-dlk2{~5V&r$7(VwTAf4cFlXw~B+UKSq@|j9aC1REVMP$tR)CZ^gI( z1mLhcEKOAt224%F$1(&;+(aVo!LBiBC{&#w|1I z3@^qGw^0BQa`)mk8uOF~&)F*u3K=nb!oSNj@P<d#3N!9GuG8Ke9yTbcGETZ25M&2nCpUONB+gcihHYuzH{gHHSK zk{hE79chNSMwY#)wF^6}UXU!m69%%NLklgA7^7~Pj5}$gWE$QM+Ek_zn{ZW{;{v+h zjrV3Br*k82BZtH-7J$57UBMiaBSGSZ#gf)`P?@6ow|vp=^^5z9G;@z?7{gK-G6$iz3gpd^LMbYlN0dh z3ZL&7|L1|j1n?L1sCo|`do0m!&-^^;$XX3x6$9#Ozy#*OWJ(KI4>KIl(ej z;&>q-TNc1~H>bTnlP~uuzcqM{1Lgjqs`#)sG>g0e;iw0* zDB2-dsV>D{N1Oq`+Sj8>Q*i_R0SG`#8gDDAuvaqFEV%yrOzL3K7BE6}_-!eBkNjTP z0#qKzRdX+RCNJ4f*H87e4d2M?i*o)6&o9Bx)0}@P!xkb78W>DKOflK?*!LfAE;X%@ z-<>TGZ4$iwYM~902yW=kX%moki(HqE1*Jiu;27t)n)(PblH0-If{sH*M}X+m$CqL! zEc85SU+bELd1@LT1Z@=!)^I+7_<{?uv($Sbz}gpLVuyyaPWzkSaZzv=MJq^1F0dFc zmg?KaC^Rr6?Q}T7>8O8othw`UnTWo&pdY{tVMZ z-sE_BVmnrw@J$#WgCOz|z_GM~{ZRwW6B96yfTmYroWU_wR2XC~Bj~{^>^`*R*6YFU z&>3_lsxdKPV6>VAcc>gmJ&mq(8YjniaT@hV7X$)Qt>{MFLu;jcTVx5gyLoX&+7xjD zRxSN6oU{MkFPZ^#@?W=pQQl}PR`~ou^H=9B;LqjDC%}?X<^Q#x%KI4;5a-}mCDyJN zIvpcd?<^4CjN1g5j|hC4@!Mht8&P_<4Jv*QZw#nRDe(KKe6SPAF;!?qG9&M!tD?_< zq(E=qi0SggOHl-cVSk_!r_c(HW^mMioo>hIP!+C$0tE(+hw8DXcPj$UHsS&gFf~$- zZPq?Iw%}4Vo6o1iuKoAkj@P*f^As**gLVI6Y;~LJkOFdYTN`2%&Bt$h#b+5(Mp$w*=qoo6ToWLPn zn}nDImEsW5#o_Q`yi@KvM%wqZfPdApuY&VseX$J(+n(^9`Wt)L-@kI{cLChn-8ZAM zAcuE|A1!Zub~(_mk&AMM?*Mp7AZb@Rb;qy0}>j6Ha7yVgpNiryp z#n(RmR3G~}?{7~u;>s-dJ`@A*1(x8DlToN@z~jS}h5>&OF*t*B7&2|}aTT7C2g=qb zP~}PEh8*V!eLXoiHw65hjTxN8b4!n9T=1A~(mQUvScmm^1AFjy5k`;JUsbrqnOVLDIQrKfi zI0^WW_amuysVM>KD(bPn+`k67aKZh&5Zn720T2WgA>2+c(QiiK*)M-N<57y7QakRU zQ#*lG-0%vNT1%F)x7y24MQIR&q=11GttAyln`xp|BKWfkfm2i!7v}87!HGlL(9ouu zh$g5GRf8`cN67ERSPA$e^J>6h?_%t;zHG4#xKZj(_t%WN)3t@I8&~E;wG& zr1Yv72$0y1X&_`>72&=N4If7C$7%5$Cl_Gs)3hm0@Wu zy2tdV4bN;qtyjf`6YMNkH5M9RDcjzcai#n*^^r1hqVhQQbY6_=w2n}~gu)e= zI?!I-jLt&o6`^8lX83QcmqG`11t;_*QmO}Grl3|j3Zz_k(u>^$*3YW~=zJVAm>-j= zRx!^TV>m;(9(!0p$~HO~L2Oj*7-ObziK+^fJuw!A{FMYg+c_x^$Q`Oia%yy(&l>z-#>xy>&AWii&#!xIVHN&s*CIp&kXJ>EB4o-lt=G zU+VC!95`IX5thazCo(*WuEaUs8dZQUzOxbYtxOK2 zI+k<*+|*jSc{$v)u}btBVeG2-N_Q^F&HdIk62Pc1bOjb;d*=p>qlyA*(;r@Fx$_xm z@6H1LzglJ``*3%Yi&mpfr%pFFHN|Ap;p70+)YS#gj`a|>p{&c~W~E}7RXuOwCJgf! zd_GhE+lHe09%T(U(zxF&U_F7#GH3o%)W#CHrZ4G9O0&i`fkN(ra+vb&B-R#KT)rMl zxr?PeFnSiZhabp~81wb0j%k=>>F;Eymj^Jbu7Iog5to30J!9)ZG&y+}0T+E1Q8=gm zsC@nPV|Z`=8Y&v-z8rY~2nca#HGE^Ifc_}Qs%ebw!PZxVoG0Fh`Bq(fRYj8OI!z;o zj_)x?uZk8eg4fDT1&|`1qF`p45dOe6d#FfgSf_C3U_=12Dpc3eODlvMV%Xgm50Q){ z)S)(lbPfVUv&l@ZKcL)GG@NWSzgs@khyZ4gWqI9RTmc%f6^E{IXX@ zD{&J8`_K5=$IlP3q=7Kt0QG6z6e$NCuETSb-c2*8))0DuO^IOv6!ugGuVugJd)hV` zlf5Rc6u)tB4LIQI1?H@r<;*KT5aO+6L!bzkJLSeY2<7us`8jy4!L(FUBc-y`pKO$1~` z+0)G_75l0d;-KBI(T%tsN+u-a(Qw*h;zPCwt@QZbdlKG@Ph))AhYM7TkWFqf3Qh$o z@P->FK%h0(<04bTr3#SpbG%+iQIAS3m;rz2IG*W`8hpo>HADP!GgTXyz{l1wi?ux| z5mr=TN)i|&a%UV#O~WSv2V2Vfy4K?=rr`n)M{`oexNM5X_|GalBf*a4yx=2k2hIWm zx%rFl!+Gie(Ar0wfPs5&d)qUyn0}!HcS+zff#X7c%u0swdZEatNDsH-3aF^1Zy6ED zaSbQK6?otN?Wga2dm}FP0GEmII0?8h910)9`vdhYr>HUKxGZ7=HIj{pl6|a!dDb+! zpfv8pJHUhZnbodf_> z6{O#@U@=NPSN9HpCHG978a})txt`@9lkGVV+7J~5 z`vP&Cb|fKs5^DPyR458AQx%LB=t&QDQ>}fWv7{hR+Jg@&@56^g(15A%wZ@?-1{59u zuSz0`X6U_nsmNp0Q>UIj3a5rFPV zvFCJu@{9OxcN)a?ghv_+YDmv4cMimeCJ_&FisKRbmfJDzK!CWYn zElb@gO3)m~)?y%Y>-g>+01Bn2ak~s#=t1llZIdJv;p!&bL7s>kW+OrJpy1L%ZzX{r z(hR54X~b0pexk=EV1s0sW(rzfJ&N7-yoR+u;$4ouk1OZ|Ey61b+9bN(J}zyrCdd1M zW;B8KSeDq=yt2aHc0XcP3K1F&6R+aRB+ou=RPzJfcW}9 ztGA{;kEW(ULxz`YoAar?tiYl*8wy%sfK}8NX3Fbo!aa;Z4F<520Nd?PV7ivf(A%;! z&IFfYmy`WOMVAM+$UVqN;`bHHoex`%-{2?UZ;xY!Co2foqYWw80_`e8RVe|wEEbE> zz2X4Z+sln&p;d^8d+rzr%n&GfOE%J3HS_Dk&duFB*QdtMDgNm zdm2g7Sk(Lo@`M1JWHhdU6jFFQysWg66y>`VhAN*2FBCI+bPH-=2&zi7b389|GFh<8 zy@r8~iXtRMcBH3M1g5ty;mCcxx4@(a9}KkklDjx?RquOoe`kL<01WtbJmLLvPN3+) z2Ll0L@<|Sqm17?=2SAvM{Z?Q5_~+bPZlvWvS->g}EXGiABD4^@3ynt@v6PBr#iDLf zwwx2eV4l+Od?7s12jo64vscL5cX9+k$eRQ^>LNnn@DjDD);ej`@at|^n7NU992J}-{R@%8n%)KDR!dGl>1}_%L=-P-o2nZl96^@lyuZ*dEV&EK2c!I?lS56ab7 z2Y>M4uQ$OXv7u+snXdM6{687u(+J--LJKvFZ17iWJ){1b= z6r2h!5_08^7e!^U9i}yWPoeTe8}6hiXRr#}*_V6nEwVHEzI!6LS>OjqXourPmIcP0 z_yIyy6_{WssA4KKq@hyUKq|{}4~~Wm9EOURbswQR|FIf^@SsXHFj)w{5k5=BLEl0g zD8%|FfPqh7jFQBKP(T$hju8POiA!=EQ8*?M^)Ic(G;k=g1n(7lDxwNZ!Ns%>6%rMq z`#Tyjn<5tj7Xh$r>@;8@XXCf6DT3pJ#`+y*+-Z2%mxsXmT zSp}^Iq|l5<#WgZqE^@Vds$Ueja-H5ps=OO?3WSoH`sThuULbxfN!0)S8lrBvn zb}5*s?G1CH_~WnuZO9?{&r1Am1OPZNA2c_;R<2x9oq$5(9et&ybu(P9O&=YA=XD?d zBG#<$;kb(dRxb_v6O1YhTrmp{wF4mL%<((DR{0{nIil!S){E4Sjk7AIpOvR;w_-W= zDM)r$H`PrdVn94AjQkCB`qOwPuHZ6Rr|-Bt6?@!r63{-v6BZyAP0TXS+=kuZv2980&i3BppepQ94a(FZo;S_LztnXJ<7{0Us zy65PL^Y%T-1;AhiD~0l4!N`U6KG!LL-Hq_fRB?v{VG!@~7@J~JZWDbHs@^X6_l2k9 z<`O^%Kiz zB19A*jZun%kbHn?1E(sN6!vr}#jz%<{3k%WxOUtOICt*s`WdMd9B%fE8@ zc7V?tZlukb7>_y_cJ!#1Tn(jtJg)I*8N{kbL5sIQsLJ|6 ziZQr^9%ei{x(a!!r+<&TSOk6!8A!)k|Rjy`$#=ra>513yo%HK z#LVYkgcq#2p)CKk-~zDUqXLGJ%@2{*b+F!D6d=)n%efC18y40?Nx50dE+fD9uLZJz zzZW@4LJ!eZt^>ds9!qp759P`0W~7P#9oZ8XINPMJd%P}hNvl^>1QO=YIPk?nOC44Y zfZz$h8>186IU`QM;J=&%h>Nx14jP#x$`uVkGmYJm0##Ag8Pa#NOTnC?(zWDNa5Q^u zQoniWW(}#7ft13~%2gcaDZvpFNh)}^dJ!C%BqexG&WFD1ttMWxA0AI{K_qPA1}fnW z`LL^4*}2{N?LWdOR)NdCK*V1E@3^-Boy>#gju?)QU5aQa)j=!3yj*$svK#;bdebnS zCQalG;RirUWUekDd;ozBC~Hgtlmw1oPocCxR#4$;(t1l>(21C1Ipo1x*cDAe#kE@3>(x{{b zh~~Dn+Vc`;xVmKH0c=o)1Hd^$Q^Fhl7S{Yj_lafoYHuKM<`+E>{~V3_x`qexrv7kU zrJrg40Z3 zxz*70iMUk~-H3J!CSj$zIF8areB?<4#<$_p6flX>vDW&0VuIya8eC%K3)gp-$VsmK zLKSOt8dv7B*zJs!UU$`0yBl^i4^?rn3gqRECR89lImn%qSHWTpOLt zGXzG0xixoX)L^4&1E!|Ia~@IL^Wk13FZ$VzgqQ%1R?l?Fr-o1&0zzbX2P7l4BA< zLUjbQiFl|OqLSE@VhP+Lz#?_nAy50n%4B*l`Ul7Gj?C3tjoYyWm#PM)r#RlPs>cCh zGOTGuz{fBL0lX3VYCbQsz8UwDhu6-rtHuV_*tQzlO%rgfl<^hoQV{oh@$Ml59aBPC zwX37>b_EataE0PQhyiT@1Fyv>JZ7Snkg1_+Y;_yr8Tmr>j|BoNm;EaT{wPaS z9RL%I|8M=H(_hWY@7L9N{MDY{f@Mx>JuZ$X^wv~;UVZ)Q)n0$1NN{a4Y>k9paKnd{{XKQQD)Z-{YY(iWkZeoh!=$paJ4dxYI@R44Fx#TRAN=L~2l*w=)vKa5X zeX%$D;V7K6Q+HeUAAG#lVvirqc zQ$g4&{8nWB#@Q}xpZw?f>09yL{Rzg#(zwYm&}!vNv6AEvC2z$8cqR9(Z4v}+{%{?B zSB}l2oA5c)L_AUtBFJ*QsH|J%sP-?$4hqo|=50wBfnX(S%_PEpFUHH1uiz`t@P0A6 zcR7fiA=gxJD6*({si33*ro&+|21cialmb{eC76K>Wx##nU^ zia7w1v!6D1mc+ZkWjJE*mugtOAC$a zF=%ZtyY8 ziwZ-`RMCcXcTPoy=dJg(Z^kGyg$m*ntn%UvlJLb$+)7SE=qR?j;g9A&LnxNOTykE5 z6Y)Iz!%Ur~bO3Y>Z;!q|e}gBdW$Gl%mSG>_wx-;@$&e7lNGbw!il<5n4fxnshrOj< z2KhUArPPNt8sYZdk#>EzfbZd@|BW&B_kHiFZ#@)q066&L3194?yqy1v6}~`_|AI6A z`Eo{Poc(7!#=evn39yj`4QB^{gUM#`cK`q&07*naR8LQ=UH?%zYaVIaHw&EFi0L5( zm#Pd2|6)9A?@g5T-2@MgK*c3UviTWl+Kx?_qY`kMgnkr6l{DHl4SI?Qd^A*Y`i+R$ z9Kh3E4Vb_@86qw_K7judDq>O0Nt)POy#$Bctd2i{s#prM-B8)LK7lH460;<(jfm_t z18HlTmr@C#O6)BsWlK&|$418F-Vp@7+8EYnzrwQQ`CAR=eZ{peO>ofUtDhmm#xYAArK`8>-c&Uw| z;N3t0M5uLKqWI+uW1Ye(MCOn%@yRF$7AN8&=v-}>zNWFfu=v{0sbcoeV+$y$Hwa@-l%bwvtd*YFX1+xF)}Q>3U@ZeQ4ZLPAI~3^yFJ^mzGoIskx6n71HvjlzsOA1_ zl}{!b5mz`miBi}!P$4*Qh^L?v+oU5RBL;$aE>nt1WITji=j{fz6-!MQvnZ7v28|5h zzL-!vT?1RD(bj&e$(n52HYVG4lkFxOlWVfw8z;SavTfV8U0>%q*ZKa!dY-lS+Bep% z=YwXSigM`uWVW|t#s@Hls7KI=UTL&JyC4k_Tu;~+hGJ(SGsts zhvpjuI#ONphFy+IaUOW)5}wsBSg9P*n4u69D50@A{gdzZ=26a>S3>1zrmi&pcPADR zVswsjR<8-;YS(8mB>W|;OczOtT5g+f!*^1_{g=Om=I~9rkRX{{#grnL8p`y{wrf8U zTD1-}*$hm_%j7cN8=t<$E9XFQj2OMno%-A)4&c#w+vP9sw{(+4a86YEaIqJ?xkTh* zmer2wAU`otfuvO86 z9Ww0{#jTKm|8L~`b{F@>~c%zbV(M-a9%0e(sdKJmPgs$Jr1aj{qU5d1aEdrO_nI2|N_~ z4kn#4%ZP=FIEtY!-;Q8b{)W-hrgs>jO1Nw}qfVe`u@S7E>oIVmkp4$7hebM`UwTGV z{}Y^Dj*^wAheil83^t}?7HUvC-x!|wxO>7HT0+S43K(qk6GbdE0`M=)(Oae8JBOS$ z^vvfsLYX9c4-i(I&2y;ev)G!M3iqcCY!RLjNy)W023XAjRR{|I5^*7H*3Mp3 zUS#$|Kaadl)|IvdFj`@wmfC!|--Fr#Rmv#k8v^T>(?lM?gC1j)lw6R?3>!|OvOSnq z4_;kN9M3t88ogyoa~0VIJGX-*k}Y8?^^s)`9)|gM;MPsXxTGP%(`9U=m@wMbTKK#9 zcb?FVaL=I2JS-6rpg}aUN9~>{>+l1=wD$CSNAO5QAXPS3*7T~if zbq!kld01&#BG$%vOs>ktQQwGd?)IHMhN*j2fx_xWNQ&HX+iHoX0uWhg2)gGFoKEouvveTirzH|@Zn`V#Lfklw@xo{=*KA%i3B%eiGm z*+4vq`cnkHTcQQotH?K(q3eqxIfqd8Mq2N0vHDQndByu6bASU+ufBwM+Ty0dzdZS1 zSzOHqY?f0P{?sGk+0Jj9`R5=9uvrL4t&9I!Axu1*Tp#h9uUIZx#-1gOONyStaop{E%+T;?Ucnv zltpiJImaDO%)0b3l*=I%5t$jZaJ2Na z>MdB=Qw2`83_ucw*MtD{{-~N7iEhq*)2q1I?)i`(X?IMCp29_vd!>k1lSDPa!$MWD9 zz&3P44xNd4M}=$fjR|qUe$uW4!QVcn>XmWkg<+c5I3T%-kp0e=NtovmU@EV+pcIS* zoV$sTq-zw1J2MB$=9wv8(msUX&-4m>MtAMR1bJ~^wu=0N%C{!5UKE{Ydcn5d>gUkj zUlluQ=Cj8uX}I42^8iU-GU;?QlYoyB=_=`6EiamuPd%b0RtGIOYE1s2=v^F^qD@ z{zgtc_VN9m+p)t}?f0nHmkzlwfzN{QJusUbnvG~$H~R8`r1#4fL2>AtlViRnYbDI=-5CLpWH`-$F zQQ)zi5v8gaaTBeF+VERYUs(l#i!{a5#AX5m5BcAyuLqIF39M=0N}X9cr@E1FZ@eo4 zi)!HUJ#o@bTB&drD2BL~uo0W;{9R_OcX04(tUjVy>Gv(oJHB4fqRhDHhk`fiTj>#N zUVTIUXatgWV=}4a-6#8HtXrGFHc5V+(u4W~5p}jBpDv5OS=s?}#x`e(;e=dS^lpK4 zb7C9&z_r2`uiOu>6zmP-YnAGS?(>R(QoLn147_AFkcFUpW$Qv#S@LfAQzM$+f=WBL zbrr&$)8zGA!x0Xa7ds%1<|=t)+nr;ZP^5^GTM#E%y@6Ct*ckPKgBx8Sv`Lb03O?0j zG`_LDDZqapBoDy6?+7zkw_?6RblU8It~K|Lt7-J#XI0rlUrOulI1>|UxyC!?|A=eI z1w=Q)CJE;(3i{eXBpb(13=DA$VGjAK%BOYjdg%PFHv8B-CeK~{rYRa>hAjL$NFyaE z3}zl(=uy)s41<{wHUJb4#rvLVpE}Yc9CbM;uP4rt{6_P|4E4=UavAwV@9LbiX757U z=>PD|wCYg7;X+PI>u$OST()Evs`5ob4dOZ?wsHOv?g1mecJjb~NbRX!eq|U1BUai( z_^n$BYAz5(Z5U3Oa)LZo3I%ljVoSI;n2`fyfjXgjKe5I5(g6-Li&cgy zmSaZ808^?{!-l)u?qz?1J*lqImzCcLtUi0VuJA*Nf{6J1zc+_2%ii2qYI>2_yPXTX z$ciIX*(bSU6CU>qUjL94fOZPJR6j7kI02ABC*AMGLH~-w;SFo<;RlNn+!TaL=`G7& z53fY4(b}lcLaaC2z~|}h4*u^QkQ}hFHqqcqocV6v2u!scIFV*tsWx8|khwyi5AU!J zA7x?I!_Uv=BqbcQyl;sln4H(fJm3hSl(K4FAH)YRjFyNF&~R5}4X8^BZ>&Fq?ll6C_Qj_Y^apEvJ7lT4k|Bsi zkYk#W;3$UzhZ5PaH%hfaG+2q}2P9V=Gsnu5j#ekHWWHGH6`@^@=5#i-h#3_4IKX%? zIS$Ssqz0VWFpQLfRG;{_fR_jd^geV94Gg*_Wcovb3@LoxSS(Y|@YPo{J{kl2et{30!$x4vqZ~fk1@p7<}Y9*kKjlk%5;_h2*A!F#EHsG7l4{MRP)YOa9!reWu zR?gwz0)49RVj-&p**w`5?bJk8M4BXSOk?oOrm~lTW(L|1V{t^pK zix{OZ|5y3tt?EfN%6S6|3WOV*(<1yaJiKLm<`!J-vJZfn%V$c2&X3|;^gyj%jz9vn zjW!Ka2lh-QpY`!2`(KRh>W#tdK^Al9<+6VxOY+kjjB=}1P6>C6E!?I*Rcl20bQ6Xt z+EU^V6iqgeQvkE*MIuJZ2sXu`msCtwLG=5LBeEa2oz%@j0H^Sc?pmY86Wdv*4bHxZ z-=8+dS6$XgX=Om?R43Z2ISb3W$nHxo{a;zm;V0nJhyHbqK+D zAprXuD!3w3@2F78?Y~{5g}$G!Kt89H?6ygW&PVC93vz`p&TzUw&uf>PXZGyWJw(m{ z1aNs`a*{D(A!71Bt{kT)3Kmr>mvs+3ztkVscn{}V5-fGIZhlBuED~zWSGGUsbl$&a zV{fkKUplkDOx~8r`p;P2rV{$^5(Gq|eb4>=9vI}mqmCHbD3ORr&{SXgWFf$p*;YCK z#;=`MFibjcqz2#RIj#LXQQV41qt}>j1nm2_Y8;^igU92syg{Eta5C5jnp;%24wngnG+Z(<8B)4lc8IQdVXzS@bJRLLm2g3ID$lgv`G6r%HMCS zf4wwg^Bq|CPm^M#W~lMGFVPDB!U#8oW}G|0*@Me=Pc*AI>k89yrO!wP-#C#dYzx^v zG+no_rOEFH7d-jL({@70#zbXmhC5##*Ph>1pJ=HgapNW&beB&{z0BKiQ!b$W1)LYm z{vs^Su++jOknp*Gv62e>5UjBs1NY_jc+HGvM#O7YFp#T)8=Y<)Cwex4?_a&Uofo45C49NWLzYkB|rE%p%dSGPFVu0$|?WQ*oHA;uOY_J+w(lS%E)VU9MyZ5J0-1L5G z?htbAf_v9`2vdw^tgxxs+r)*=1I6w=5`G}#cDMxQ?B%Z^6XpI2e6jz9Hv^snv9;tg zrwlZ47`enxfjuqTsz(crIF;#gj z^zZv$1gSKc72;154j07c{U?J)<@@G83z(d>DIUmur}y#(7pK66sty^E@0sv!nErW| z#cLX2GW`OZWTsISA=ERIusrT{#-{C&=9|cy*yg2}sf9_@UzK9asF7wLsqMXrC3@#E zhwu$q+G59C>glBK zf??;#6txwLx1IO^mmA>^yorgfuj`w-5Sf@cLj)gz&6Vvrhy<7W z^BQ{dV4B5M{ulzs;mxyGHQh_$Hea5S5N<=Myf8wIPzS{Pj5;HDznmqMMpeYZzM6fB zmHJK>TXc#~KQ6c=YK?tyB?&&(DXRP}LI&3^_6ZYZkwd1?gjB1bd3D3a6&zP$O7V`F z0XPC}INeu9p?xV3_YWx`*P*$695eowA5L3z|w^CB0&fRB8kj&8PNJo$U`8lS!ox!gqO z%fluwv=An7R~KyUW#Rf|zFM!Sl-YQ0{xgg$L6_5GA$Rz=u%@mgoc%V8|35!HmEGK1 z-P=&?2^RnyQdp}Eb7e-bN@PEo*$kuSsJRlS1jR(K_)4m1D#U(?toP6m4} zJr+#gGIiTZv$O4c`h-XhRmiFSff_5A<4NLA6Abna5$XCxoSpSXUSLSV3wGMTKFX-$ zVTi1zn)Ea@o z8UwOjFwZ+3IkG#syfjSr+|u*FLk=c{9oeZx85+Il(r@I%I#RDsY>d%V^_c&b;-EA> zD{m6cl-DV|!Am>rN*&|Jus>kWtWZ4Nz>Q9rr%xG`RlVH5sa`%(n%twUJdR!I>!;&% zX{6S|6s_w2Xnd7_mKskAKLmJ~q8S+kX=HB7!54k>XIN1XTn^Cq4y#zRQlsGT#D6|L z?d}4r-YZ=Jd)I63x!G+#Cnh?l4Zq9rVy!9_X@Lrb+>s03(_XoeVh`rfPrn3kb~eXK z-uttYHO)0A!I(F<2n!%0@phTZc=yhI6JxTxf{^Df*`|gHAWoatF`bFFqsqt-ZB^iq znq=k{8LyS!gdaF%M2D6jK2xOKpk==;|41@+@d=Qg#=h-Sh9#45z0yw57afaemUGr8 zqcb>1z#a>9=KjShd+8zDajWPoKWto8n>spu2Ql}pf8nk}GGZ#Jl?Q?o|O$8QQ8bFT@bNI?1noy1flZ%Sw*u%s*jE`v$rx{$|0c>PvDkB|Ut`(qcJE-I5T4<@{G;v(p#zsqzjDEmv~eV!k?uRGRDzXr8G8axx6GZFhBN zbNDluK!+4-r2MxqQE3zGXq&LQsCpV|dF?K8)!%$4F3 zEZDAMS#1;y`)He%DBDTY&N^<>@K06*^wW{v!qiwhM4U?|ftkoCnB{=AVOC@3IZ_wa zp|r1)#t9D~cDyV$x$VKTvW@h|CkBo~^AMeIS~*I|t|U2|9fm$Kyd9s9lB@+qXW*$U z^K6pOR}=_E=KJf&)~=qNcnkmE-doS5-oj)qtJrI9z(9Bh2)y?~Q~h%3Ohj&jY8(Mt zg=I9Pm!TW;2vvO5nApOp$VJ^`0?-~ygOk~xV$Pjv)CAxOv7)^MsaYSNQxgp!*HjzO z3X8dY9IG8HqZ~wJnX>duJUFP-4e-_Ftg_2lCK=wWij|VC@}^S-NmD{9Rp~N7kQl-A zZ|~tEEx`XUTd37qm9ydjjCa@>Mn5n>Z$({a`Dbbz^8jMLKW}6d9SElX)F~4xFRCR) z!PjNu&e}cdyJSat_kQ;n@wu0IE2`{3_C6Xlizj(@Afc4u?<#5N=>5G(IguLjupUhT z+z4A5FFeX8tZF13o2JOJO{z2+3NL!GIYLJxpm~q|j$*5&mN<-wV{6{tumNj`W70e1 zs}Gpy@;5EWK3o_nSl^&$nlE%j$oP}wi+~wDapO9tJ#h#f~nE zuP7!*NTZ|Hw%CyIZuIe!+>W^>R+kioGJ-8WfT4jF3iRWEm22P^DA0n`w)`<4G`TZTw3;bzKz2Cj(aHssZCj zNhdyQyOn@qMIH)4EAIfbn47yCRwBf%HHg#a1pRKmmYPmq#LLjyvJzLzl@xAc?V?a& zjT!LRQ9J@fz|HR;P>dW6FM{A?pG(eDmJIyN0DGTe9MvJB~1O7yi2gyA(L z;EUdAGwFtRdGXzSqr(p@g*u1L)4m;>aRhM-Ob~yIAjBk>Ex%j#Ti6L&8KgrbD$@^^ zC2xL(O)cE2OGCDZKQ#Opdu=#43RM@gq;?9|3?fB9-4AyMO#wbk6)?5c_v+nvoJsrB z_oUD6)MhkdN5xpRvM|d~Ei)(F?zx85;ska8A?RGzJsp+BSb>l_NL}Jr-As)JKf24!bh2vZD3829c%TPs@`^2a!xNP`h75?!;?CA1yP9+V#sN!BZgW* z7td+|Im%T+FhN5&4D*J6wQ519z=ZB!)6#f@K=)kyW;Tio&SN-ixvK4XuWC(E=q?lf z8{XliwiW6z5|WfNO#~h1B&EQ`Fy@V9{Mc0%D0p$>S{PN=2-w23S5rxiyw$#K2Ol>9VnW#@C zBb}X>Qi6L$r}HX95%1HX7(a~5Ln}(M>$5+u#VD6Dz?ab%WtHAk$BM;`%zEb|ItkCtUL)qA-GtefEvJ8K zS$J<{;C8Bx?0hyx5N#^`B1sJEk1i4eY;Vsf_ShKaWoVeVB&&hO#)y-PK4}T?GT5;e zs*~scd}clX-eYN?XR4Ns+cs4F-v=O)#a|REASF7=s1-G5MBVp%Mn&?k+J$(&cY4?r zeC}*#+DWzt%>1U`cWGrWA<(U+{y3$Q82;&RzuN@$64M|g0G$Uumm-?L5I?Edx~y|r ze_@zcq+UmZNt6d)C&J2LU;fbe z)&q(kcBpR1WBVLPEXSh1rJ_jbm=QwEJ&5pk65_y0%Q8x_rhNWhP2nj?o#Z_IYl`1D zK1_#0IFf+d7lvf+<>&9!i{3|soC+&a6nZZ(Oq`_1)<=M7+fq(0&)~(8Oqfrnjzplr z)2eL(IAO@6R{ymG4?f#9VL`8BGN@(lHbagk_%h%7mf2Y7T%w?vXpfhwh+Jz$;nIfZ_u!xics7q$MhZ$i5_=2>>ABALz*V9N;%gG;- z_*U!+)X-f4`#Gk{eT=gB88Pi$AB{9VTb@76Zx!p*+6ZQaobeb3`4(#mr^&(nG=ooL zrh3daXbf&Hs)>vfH(PHB!87!a8}|FXoV!G-R~x--r35S)b5>Nb83G~`ojswd$`!QJ zp!Yy6>0c&_xHjhLaL)h*YeJ^dNJ=3$2p7F^AFIV79-Odj-6lPH%;rl$KBxYq!zr_j zS$Nl$yxhrizH6>QSv}XlgZYyOt|9OoOd$?pZ%2V!M85JOv)!|*RKm&ze9=L{;8k(- zA)lyxOSKn`I;t_S+qvB_8L^h`nt`gFXPuT`G&FZTcVr zYsre9yY<36psz{*#9BXaqcq88N+Io|2p$N(}Vo2Kj0=W_bs24Kf>ZZZ*N!aDw?8(!3*~S z$liGG<&iQbckB9CEk;B*7!ew|0436vpBObM0+FiiwVLFcm&s~>HO@*YZV62n-E%28 zOX9ruuP~t|DSbWOUSbP6O*k^!{pieY5;wWW;5WMKot-=N(cvgYuA>+^IYrIU*)0ld zybtKj+KXlrB|YWu?4e_sxe~TyH;mMfI*vtcZP8yI2VgP4u5jaqW3tZs?+;ha3NL)Z z-;Ls6@R5?mE#Gw7k49>rB&T0 z4yx+S+Ie=pfP_fg#S~~M@oxToG{V~w!X4Lh6TEdc8H?GH-`_)@^JoK~iL2M;CqAh% z^fx+X@dS2C3YGK#qQ6=KRABz~?jZi^XIBwOeXkv>6;&j6=~cZ*c{EW+6C!v79jm%QBjgUdR)zo-G!O4-+yv>( zJ|y-8o1{2xJft)eyD;(I`1CEHLh%!|0QX-AA44W*nIQwsgJh&$u^pv(WSc=$!AyXn zZAvR6G`};Ps%Sa$T}n(+_C)_cr8koxysO`3_XYn$MP4=DfQ$cW z4pR;!KSIi1{&};$T{()R$9B$FF#%|yj%+q9T8b@jPA1GW%qZ5`y)!(Guw&GUm5v+to6 zOD_$a%BFopA_28Rk_<(({E$^AaZHy25$PNB66|cAlRw=j+0ga6j*Sc+_=xTa{~S_a z**&;c?xC?YN!GBkJ(m}0v2r>nR4ETnodr8IeC}uwKT{!p0vFyCT<8}3(_gpII#<^O zDi;i0;j=t4j%mU&V;~&U3_aqvl<(>VZH36Z)o^Vk&o_Js+ayC6kPN5;jYG|wD=aJh)i?#H0)TWm%0k>qL2)*nI?X&Aqj1= zx%Nj=zS&h-V+wv6BWjWM%qhFZ;hrCO7QXW}JU>dlRKdZ+w&xQcm|gn;e(nRq5y$s9 zW%n@q^-JAp^cKwro2jvgNaEAG1;mcz{S&#~dyjHiDH2U;ll+S`7OU6s%}S`Wg!*7` z?bJKNcz#7-y{v2dXcr~IV_v#y)_}!)IO=pZ(K8zdN)pzhh9+)`-d6W$iPL=?`q<9I z={|ojFIYER>vpAT{8IUXm0bX|z+di}jfmvd6%1bg!cKQ0M@b`nuW1vA$WF{%JgsT* zg45LS1PJ1fvbno{tyHQtAIrpaI9&e8cu5%Ds0teiWBvSfB3&h|H738@#;a#q1xlkp z@P{R0Zr{Lv@oolYJPq39j$SYHT{@P&`1!+$`nj-Ia}|(OafCVX0SLWwmR%uB^9NLD zWdu8((7CWUW`ih++dhZYZLRPA>^-ij`pgH2j0K#D)aDiOOdlswr}%h+hR#RI>(N%5 ze=Gj;$#vJpcVj?mKxFyO38yR|sVL7({c9_GFB4Wi+bcR&EQl|ZnRML-1|MOmoOJZf z49xr6J6K4qeuexfcv5$uzht5R@9Kn-5mp@CicY?)v?mdpTZeYG-CCgw*eX}jF*ffW zot($-Z@+~d1l)0*3Cd8TZoCGGlC1pk^a(AQ!hO{rnQ02OcB;SI%o$EyQd-+Mc?+Cl zO3R|_xxI4fGJ!~rwOhMvBV@RC0ntk5srTOmYuVW(r0$A92%O~&CNw)?i%w{qY^Dt3 zXNB`NM5z#4legH&MSYS4$k#@{4qssZvF)$8sZt*P^C?HoBA@*F+9CQXHcOZXfsj0a zs{X)-uSBtbsY!kGi9ZzKECL`dfyhoGoGR_{LtEaiI!@+lv~XET2jX7SzO&Mj#49<) zLebkgEm)uUu;uD`II*lO8)R};B*S%gKv-^dOtaJ`Pa1Hx zgL8`qqt}zhk^NyG>su0acmKFM)|qwmGZu#>swKJn8yCm+Uxaord-pnoetTfLb_6+h z+58(T0#kSVVA@)aX~yXcU2JGB&cc}uBlIdEH3Y(Y>JK34=LHji!@+XQDA-W7gz!B;_?ZjC30HNub01*5q zWdC;z6EQg{p4GP1L8_j)Y^;Qh7a8+-t$azWDk*Ia4bq@$WSrKhkUSU(jqq8oqhg7d zXO$PCpGDuCtMHfK$nNSqJ7fS@r@g3|u| z0}>>(xE(>dX$-y%6cB=+IJtLVtL_7KHs zHGBAGrMiW9&nzk|s?O;SR-^E1%T=<=X!@$zcB`U?Kka0vMF*OjC;GtFK1oz}3q*cb zt<+fjohkQU)Q6h^P2SrowO|HO{8&+ouDGWzpB#%#V(=!$+X$J9%|i6Y2vgmrRZew| zA_r7;Jd{W!PxKdb=QRVfL_XdmYU!cLQYvl@ zD@yXrx%oefomI2RR~{VtU5;igeFiO80oZ9%F^rgX_bOp+j#K?n$Ahc0e#R0U!VNb` z{`CI~)tbabbZu;dqVohvJNCw&TWmzsZWi|l5Tlegsj`%Y=PV#J_~|I%4tuN4pv(0d z)UeV--&JU%5}|kZBfx$#oAI4&p_=Hv+eW+8Ebv;Zi;S&8viu-<#PeO&nvHV^%v_@Y zEKzyckZoOt#gNmjH@4ifVS(gi3<^_>V-^a{wrvm3WE8AU(JB2@r79%8HgOq6PJwkn!5O(z=@2 zjld%a=oX^DW+1dD`mtUilK9D_e7R?BfHd3GDL;$URa)csd`A>6N96TeRxLi1HO*vt z5oL=!B>V3N3mO}XeI@n})gc#p6q8t8d0lkWXu_V-vJ8L)f$yrq?+r3{Ah0LzMbp=*NWPV6+ z_cYeDJ!^4#qvks0X|NYvp+`kAs`gn)`_*-{nP_D;t~Ah3frLiE4_Cp1@w6!M=^GTz zSaVSP@b=(VjW&j!a4Rt=miZCQWmD7X#rN++#us=V6Dv3tQO48*7kN84a5aC9AnRjl z&<@2G@h+<}%$WCFh{`=;Yno*hj80cUPsrd{_>Y;{|2-3XI`(ZJa;fTD9VU;y+jiuB z-_j2HXMWCq$IeAvl2ClBy#D%H7K^^;Y@6{!0F{ALVFld<;h82(@7mcrKuj~ZO^61k zO*{^V8P@7+>pL!|Btj6Z+OmH8TVh>T-JXP}xEqxV2C=X+o0;5mL;*-jR= z2%4t|8(#v=H<|^eK=7xB=Fgl92Fi#%Ef7tumc$xyQwsuWMJ-wS#YN|>uGkmDX^mb?)=VIUY`Z8kMp|5G1J?JXazuAdFX zw;aoVoKgG)Y6~EyN*$Ix)W4#cGjwmu)RM|O)6H)gZoIz0Hj+JU<>=a`Q=(j;$)l^9 zUTWY2w1|3U*;pcdJg&EyQ(M}hEBmn6APLPRQZ;N6|Jdw`g@rKmA%(S)|I$WGb`R2Kody?L11<7kdG+c-GjzWc?` z&H2fs4`+5&$=2MI(3_uvrRwmMPZfi{6HW=*TT5mwLWCuGKrx|<(ke*QJheM97&fT8 zFL}q)LUl?{%jl0fIo*qyB+HBAOtdDZ-rE`1CXaS{dJ>50B_s*qhE8PDqd11NQ(d~o zVVcYpA+=_a)~%PcbDcKIYwbJk%#iz{vEHmw&2fq|eA+4x7~t!_IPKK2GVq#SL8Eq{{V;Tn!P_iV@!s0W<{Ry zKxtF=`weDB6j{xK_Y2!2YxRs8O%1J2bmIVz(vCrgDgE0c?v)2cJ3Vwqxr)f4M^ena z3bvm~W@H0$bHB;bFM{7IM1L8S4pTwM75=+K)n6S4e=S92AELO@Ih>>85S43VDCG@@ zRPCA9D&epsMWe4SIt;sfn(#obyBK2C&WT?9CeqmMRihr=LCz$>ubpEWd ziKTXW=?)0_Q+k@uY82-=4EdM4t38D>vs5@DOMlRI@j&O=nXV~j`&SCqi1RQOheP_z zA7`2|P2jr+brjz6zkBad@c$Iau?llYu-CT9vcs-u;mV~NJTIZAZSJVW0}sef3vr`& z{-+7uDo%yVlCa~Fvdr^s2AP_x$I+shN@pM75jO8N4<>A~zi^veK)NY~vry3=*X*++ zR5CcBxn2^X=UQ8GoF`!031RxMe*YS+t?C=YB~tR03!} z)*?5-N)PHE2qhS-jozutwvXuvg5hg;GKQz{H22iuqQDawqDE=`nFm$FmId@491HtV zCI1oP!pqqnPz;bX$_rkLGY^Id^ukbE@+kG*(gG?XRr9ZM@HMI0&z{UqzMx0{|DUzjxZI4R(H_ zpe7c(RPZ;)LqqYLJI;Z))j`AVOU+d9u@ec*WhS4OGszB&yCa~%Ng`_ACEO)XmV4$ zRARI2C$IyUb!4tG1dZXDa;kg=ac9zgBckig6WHZ$Wz<4rEZ=K;_!gb32BI-$? zUSf?15MxL%skh3r#8^)BN((m1S%t~WTbej1j7>I?ezv}!O@jENKdDa$P^?dS-)iwQp;md=;6;C(8(g zOBI%P&JMg^Gw=PT9MvPy&rnPoRe!h+8Hg8i5!g?0quaf$3hSiJIa@)8)&nAziIAN$ z?}kY!h@|EIE1-M+pUWf9ED+udjBJJMSWA8l&>$YG-!nt9=LTHAQe6wtEpEJLG!kUM zJdzcc#^k62@-v6Sn-#%zO>R~Xjh5+l%)e)(2Gdq5JUUwGIkgu)FGV^HjI#|krcpyz zJyduygf~e%PVxM0Q4a*}w&8?K5T$npkTPvU(HC>g0dd-|HWJ1Ik;1yI!SnJC-HXFA zfeAfJcuEIZZp%FMJwxEgSG=Y5*d#6j|qrM-g@pFarA69Kx;O z8aS_yk7%@?E)A8`{b5T*KB!$Y3Q+|)ZI=H?-vCrLET=I5eq1>%nhlvsLWU(Jj|{v> zie56MMh6`79okejN=4IrZ?-n!1@ z>ECQ|dfPP3@snJyQroWH_8eyM4j8`k>&n&kEe*s4!Z_85k?vGHmm2J+cJ6I_-zPW- zm5BFrIJ!a-(oX##WMWc;D1a!78xz;wVp_JT-?$#Rd3inmL_s@4kJ>jn`PLdt3e)rA zo*S}dlLT?{S`&6*ek?_k%Z*GSNXLU9v3nqn2X-+JGhFdL`Q5=KVxX>XrO@=4(h&Ej zwD43_=W;Zi!WPC0Sin}0teW&&EO6&?q>0 zIoc-=yV1i{mV1PF$Gs;r{s9}dXe|!$mT(Q;=x`8#y#aPLeLWHq#j^3ZsP}?J(#21z zX9(t>mb*uy#o4<8%q!$>6b)N&edSWM(hLUyUq7znsXSbc{3Br-dqr@5oH#SY60-CtG@eG!pLf*)ah(K+6#O+2}3@}n#t&z zQk%WvZVH|r^eke9SY`izU6Rmm{Rox$^lNOZ*?l&%R~2njBj`pvv9N?#++|*7&gdOL0LcOtaFKZotF& zO@(Gy%RazoA2qI*YR3m#4ccldvo1{lwPX5dhPhf>nzWW$6;7P8j2d>^3KNwGBCCcw zv^SzLBCA|egM>J`Ta_ME=qk+!ld1?(j&)yG^p}s%l?>l6aV$gI9?8p!Nphi%QVnK# zP#7-=<8aTYiS1#)^c*)t)v|k1MiN4V>h?lD?K5N+z&JGDCC`SaGcLp`_+Oo-{zA6F z0WLePYi4k68mLE$;&k@7K0I-}HcG*)I~Q6aXVX825S+(c$z0)H{Ks%@H{^U1$zsCi zng%)btJ?+$ki+>Jb~CpE_va2=ElrYDCxi}p+N?vgL-!XKI= zfhg>8r`KVL+iwT(jgZuu2g%y-Q{2BW#jazL#_<<21x>sbe}X77PSxmxx}9B#a4~Ju zzJ1O~mpYCWh_-oO*iek>KE~LuEs!0eA;kD$bnTWQS!)bYg%n|`@4@JhWvJ;wptSu2 zsid-vw1luoaJQWvF&fs|wwE32jB=frRaQK)ntf!$Y%-f7`9vA$kXV09KZriz3 zBW-ZEHO0>iahPL#-kb9kdfj^SzbzNiAmk?S*xYea8Pw0WUh%|!51oz{X5bH* zw0*uv&${EpL0c!mxjc9@RMK3z=h$q=aH$qYMk-*p-nUL&#W56;*6+hJN0X`wnTpIS zYuc<3n_wByW3luFP?vy#Z zGq@0deNi^hgQ+Fs{eJA+s(a{TCUYN1eAP_V>(h-7fVhzY^{oEQ=C1yw=7bMFf1U(R z*Ej3TfK*?-vz~!`jY7Jty+(@uC(xik>6kWFlD)+ToxsU*mVz>RZ`+p(mcfy9z^0*% zknHBq7ADxHHmC23Spx9bl_11z5LL%O)CHwsLT8OII$FMZ zQ-r4uLu0`Yuwe8loXl1HOty2nWsS*}?~xB#<1tmF3=<;xT^9C{iTZ!Mne56j({e?L zw}wf^(MQc6(t4}5h9iCc_)srtCkVbhMd~cURGY2`px3pbKR9CZf)ktJF2XGbm1N=* zD<4@5Cwh$+^sjB;H9jA zpo71?7t$PA(Jn7G_Umi^?Lc-Tupb1KQl;=^aXd+t`^h>~hk^G#!zl^8n-nXoJgJ6J z(cbr0;1i7e<8KM0wzAXy)T4MtqotWzkyh56s`BpTtCnNY=~4A82=&S?H<}9ZzUPTg z%_Q@eCa$KlV~feXJ40=KR*}x8SLj3rH~PQdZo5ZVdkkWmROw0iMZL1;8 zbmLT2FW+zjKEewb_dOf$3hS7P)Bo{wj^UXF+qVAFNjkROv2EM7ZQJa0Y}>YN+qP{R zH|Lza@Bj6yRy|cU#~kCG27$jit;^X}ETQ8yQl~bFCr?WTiHo$6Ed2G4wk+oV^FSE> zMVMy|$(n2|Nie9e%PsDl%FrV)dA;VF$C+&iDZJ4iwx7J*Cu>clurdB?6=YaZd*&jo zBdlB_xGoIjMuGZ+#(m4eGLJw~=*}i}>K8SZ$IPLF(kixd-9bJ%2TroP&KRHh6wz`G zbI7TSTfe$8->Hh(HRv^8D3Z7Po9P!qYmT>B1hAgm2Wg88^7$D?l}d;xZ-0kWEM+?L zo15f11NTNQiuRUUDWYb1Yf@n()F;1QtjY0eN#`)gNh2f2f~9*iE^3~9cB(Vg5{u%G zNNF`)tFb_GpE_p!N62#4naeoQ8h5$=gPe5Pu(c7zE1>B?;+i&6 zJU;7@XM1cJ=`CxoK5^KFIrfh*A{a!dw|{~^!%rB+I+^Zr(tXc(gfZj4v*1fPK#I-ziA9^opb5N>n#Cl?@`D$vu?L_9$QhmVe%fT-y@g zW+EobS`)u8iLeZI@DbL)$4Idsf9lNdnBX(8(G7%Yq<+9FKHeP;7JL+gR4C0p zaZ~!1YD1V7y>I#Y$7~Lm*CY>1Uj{k;x>*V<67`^{i9JXANcGL}3Gb-TvYacPPUKl9hbyu^v4bNa0VgL1PVtxkUxohdiUFgz%cV*b^L z6Z5qz7$T!h6YWa(9+Te+1>x9W5zABNfQ0A!%b{&~b#r9n_urmz7wXLG8xk&ba49w8 za66;A-x?H%I0|4yJgS1VsRT=hBaz)Dpmnh^ zn;@{1(Q9RP8so>JGd+VcYM-yGnKQd~uzSc{OkB)z#{R<9mBeI6NZI6L`@bc&IS`z; z4&^p&?2cK+xmL21nlKl>KBvY3Gu$C9SO+DxiEzFa$_Pfjopo?@)Brnr5>R!Lbi{sL zm(+?%$em3yTmsFa5pfFPS~D!RxW%)Z2<*x7a`o9C{X0YDx3O`YPgPO7$Y%fXraR8}65rU?8VBsu`fm5RE#BRWWEzsa^ zf;?UY{1*DFw)|WkH*TmQH++d$yA&Eo>-r)SL$X%LNJ9*x5x zx{AOy05MYDUrdW7@hKMsA#sppT>|2=jZH8nwJFGonN2n!^6M2Eb!V|I{KbE~y|i)n zZZ;8fERZ4jK5_WzpS*tn62p1QuEvDy&p;!&L*G9nM)@hg*y4jLNJ`P}55)!Z>?WFY zq8)X4{Z&oqs}cR$bIHT@)Vo*|7OL@tD+ROAih0Re`DPMV;z#T%t#bxk8SDDGb^n$6 zbCN*48b4&p!gT{-`p+YU*yMWy|L)6T8L|9%_h*B!WhaJ|PX`r%p)Hkz+LCp_gh{Dj zC0)IEE1ts$rd``D%0@;5Cj$1PaIFOlc(#J1ODdtc~(w9ckN~7{i6eje#4wL!5$@H2eqHo z5V?CxzCTSlglfr!<{{vwO>NS6!7s_*PHWnMMD3l`U@m(AGcwwBcErep$`Z&|K~hjc zc+i6++t&$cV&;tvVkSw6$M!;Ov$SGczo1ggrAGnT)e;d zft(ZLk+2GjmaJ_|TcsR)7dCF(zWvyH0ssK$H#77&Oq3)e1u?aE$~H6QKyJ)q;Zhy( zL_PfbfML+`(2B}aau;;?dR72mvdTi zyQsD)a1Q62-rYsX{yGZV*nJ*Y2A7&|pM)wJ!biCJNwX81| zXa%#T!BE54?woIpYn^`)M$@-)_V&qBgwRxlp-Z3pyF{w+ZKOxX2!P8C87etJcCg?^ z{e}0Htt9!+LkJy83B>)NK&JcX@rg^ZA^=D@8R3ICss&YDbKXQ#Dj{-lTO8zRc=<-h zd6@Jo;YrDrU7JGHBt<*^n~p62_d)F=c1I}zt-ow9vIb-9Z++zQ;`hMl*%#QdV=~=z zP-WL0C6NZrYDRylSwg7~mmnden=PylH{jkD(zT_h=+D}LiO#a43&4mDDM`%ke55ac zV0Kr`gW7h<`B&C%oYd@r*90+hwlIWi`#{H}?f^kwM%$;}kOypt5Ov#H>!LH;$}0em znIWm#XjUBO=+&fO!pB4J_6d7stG4OGK^#NBHaI;@;98SBu@)IG1N-1)f|uxc8baBD zoiPugivGDRK?FRVhcu`{q{-s{wu&w^l-o9QD4)fkelJ(2R+yhl@GCi^>Tm`L54pU3CZ)==3 z0hyQE713u2A6>dCEkB`yO8EE(>c)plder0{F;BjN9$wu~Bob4J4F$@|nUiVn8}h23 z8Bp)bM(iEk*JPcJrZqDK>`v@VsO_O5pU)RD_l>?pb)flC4$(lcw+A5TNbsEZ!DrEhyb0d$W2Khn6NLCvmM5JrMcPCQlj zXMh)$NzRYQV8pd(xVk~8$BgLEXmr$oi4zem6ZB{jkT1Q1t>F+jsPe2p7vy#hm0497 zorj)~{Y}01Y`swHd3-+ZPw3EHE=ke5SIB18@g#SAu2GA0n5un^d|K_+0L~n5lKSR_~!C90NE<0`}tbCC&JiLLD|r2Ijf!BfJ{t;rio+?u`zoUDw&O z>0fWB`QCF(S)NrkL}Yd!w7S_OXzfs{pIBtYVP`rT*Mhg*v5ViV?LWCCi>-(2XuaFH zyk=ok?wu{u)w+E=rcKism~op_@lkF!8}HNU9uE|W@6?cYj_MBQA1WyMl^W4YeyzV* z*z!upev|#vJC@`6&hM%xGoQl+E}hiJTwc>MiP{m(l){k?AJFt9+F~OGXu8}sRNe># zXtQ^z)VgOUG}_5B3M}l5seqJ8folM9@X#?y9s7v$iRQ}K_ z!f39G&0~ws0c$LuOqGday*IOkFF!T_3F5?1KauaRB3aF`7aiFvnsGx33aeWH__bx0 zZcCFCBgPR!0YrVvkVDJFB6L&X3!nGC6-+7EL5!DlJ&{0M^E9d25yhKgxx4lep%;k8 z2p+NxeqR$^8-V{Do+jv8#_&~ajM%S*VB*d9d~KulM6k?hfYLHX?_k^XJnGwH%ChVj zkn=`XcD~xxNi)*8i#^p0Y&YD;ob!c3XOA7*2{hw7l$7c4{n~z|)&jjSgo%^Y6RI_2 zSsl6H6z#clzXynT1A$9*H{I+WuF}r!CQihqu>i~A*u;G5AvWIUmtXoKO+~w9llF3} z-q_dL6>2S0XX@tq7p8U1@cK+O=Ir zZW$DBS^DS`eePVfvJc7IUm=G`y6#SRft`-=;?D*+!sqg5ri&c!47MauMgW!&feD>* zIdcPFotPkg=yNP`thAgZ9tDzQOyTI$d^|Ie{-Q8=$eU!&q6jq6 zN$P%Ta^3P`uKJW={=6IM7$dFV96&y1TK>tKyGQF9p0j5iOeF)?=<$=1KPoo7X&yHm z-EAL}IDPRnb#5|+O6;si{@5ZbyLAk8FjY6Fnpj21U85{vjyHjBOmb!Yd{U^}zsf@0 zwHILhbWdfi>bk>q7opOjd?kJYzcEYTCDU^mAucyfzKr*hZR<6xwLzVGW(OuU6SW}) zoKg_ln+$f>uWo;A9X+bNTo3uyeB;LR=&PP!!`6ti=Py!U0G*L{H(#c%b<<`k*@%sz5}gL%b|rJ zil_oD9%U3EFC<^R-KJ|NWQ*5L*2f%Kc_-peX{d~ zjMX$h8yniMdD8R2Sn^vNr(XUMZK!v+MeSaQ!1B5OlC3cwZXU{XV8es$@dqW3JL~?} z_RPf-KQ9yp<#t#Je7tcyCrmm^LLfg5_Tq=ad3^ur=(IwU0xXx>bR@gdwjYdtX)n(S z_;P3!aiauA-LM4TE?}ym%Ojy&{AIavY2ASWo4n2q&?}3N?0Y)SY?>rlA59XG@vG^D zHCEFjU(=raYHIAbj>O;I?tPr7r#@<>5wyNv;n_Wbp=5+6przwx6_967uZPUYCi{q*$$1m$FZsFBCuky8* zu>?N`u&HfK7U851F)zK^0g`Cmd}oba>h3*H;mFs*e~uUYvDP0v6Pg#6HTRO8&RE*? z(WNJ5Q~C0a04LzcR`L^urTg|C{=UNu$Imo-@axU|>d|k4cyM$|!h&&x#vu$ZV=4~O zYiV;lx7U1wAOkRzVeeA><%a-&MkWx+pxSd2r_GEhdmVrqL zBztWhYhOBaIOZFo<}vII?Dc73#-5S7b}dC11FA$ejL>^^iebP{5RG!`QXZMOVjdwc zNw^v3SV41kSD1+F9Rn6LIlud4FLQdI^Q)B|P}d{zb@H2O{?~U5(^{0=MDmF$tf>>C zs&TE5I0b@fp8m*vplAVHapW@RFEK2EkK8CG3<%3Zcg9a^kPj5MOn3iQ9h@#E_@R;? zw}?Sht{5jo;xQ!c9KM8PD9!#T=0K6E<=Ow{CG&aQaMfe>XO_SItPhmJo94wHtKvj4 z`qG6pld$~Jw-{pSrneqvzsiEYpFL3{)og|hGQ-*+$^e%00S#MHw%Xo`ku{j$J3a$Y zX}fW1Fz3N};}m8OE^^8t%Uh6Wd>Vr9GMRl6X}a>T(O}W2!4sQjBEq}&zo&C*gSkGt zvjObVs5#Gs7)6R)W;p<>#Vr%gk??7)2Uy7!_Ii*`-~l___0-7h3(gx#)`>>@yv`8wYgSb_?2%w{FK@?t2r$fHI!s=+ zpwq-JjM^mGP#pnq!@kOw+J;x;qJvl}6F()w;OblDLxTd!^XQK}v#fdqohlJM5k+6Eh$8=Ne2S}xwHef8 zM<#nE>tFN4jyD({)-M7rPsYG*ehT`wFG8x&!^*NWcr7Jif2l4S!Ju~r8@swy>C z+cy1ZhMfal0YqnYp-o-1_Z!2LxlhxBKx$1?0_6AfC*u|s*TNff6it_3OgGQQtS<6l zn^12U;5*xLXYeuyuuaxbUEQ(rww*BCR~O5m_?`QJ zZXi@lro0o%mja!MXpZx9L$*~u-930TU1+WAy`ohD(+Nz|sL>=hgG_8dBkI61XT_D) zvBzt;Cw*@n^k$oc7RPD8&?MNs4iGJyr;`tTDTq*Gm3>Tih&~jxxo^`VE1k2$RPU2e z6&>r3wR5cVo@vKixttMw(94VelT8r{R!m8tF3dcbBK;;It7n z=w4!rVdQ2sNeaIy`OkkpDatUf{WNuwIuf1}cJ`|lFW@|N1C!mu3}LSDHOwOgGziFe&p}QgJ^s9=PTNQ9>-r2f5S2 z_`}+0({r_va^8-od7B4E`NdXliKtpjbf%WrYV%FK|J{63|RtT(@*USiC5o)cF z6TFg;I;v_txFsY;?$!+qFEqC=y0R|`{F43ern!OmvBjO+r6{ex*f6VdT}^qS?YoP&C<mo>B)u7*NApPEw++pB13iT zQOzb?t4=Xu0!>J(#4%R)Kj}B$Zu)vfMsH8+$YFEFe0XC?=hbWgCiiW)2{`i<*U;fC zh$|;kOTS_xKWyFNO#1oZV@jHHzIKkJCkwqeS+G z%O`ThOYP2Ny!PKeGLyP>&coL%%%;Bk_lE$nY~6N(DY<9MlRBCAlyQgdz9Q}JGREcb zIiQ<=-&~tX7amt}@wQykNpw5Skh0zIrz`y19M_suO^IaJQU5wtLP%V>t|Jh>QhPh& zSilLHmM74E31Lq#jH@(IhNmD-D5M@~(}*q|au`_)f5!}tx+R&rM9_{#57lZ6mQN}X zGch*jG-X!q| zs1@_Gm_ktg$Vsn`%qBCRzm?b-{{Ghs0P&8m+eDr5Vxa@B(1&+z-ZqzxX3%-uIqmSG%Yv+5f3NG!7K^b$%np&< z@1IZeN!@he<)w9Rz6BJcALZ!bhUzI0R5v{eq(*dFz*j?2rP15Os$*lZNr@_3@aMyP z(>GlA(}IY5Q3+3HzcAbfZ}OY{$-bnyX47_$BKLRo*VRF2!MfXF;%#U3@jOsW=yt7` znN4Q;I%hpCsKR)NJFbtRdUo~bj*k>W%470U3-ka zMTi?_u=Kbp4&A_cyhO*2_Q_O+;r{<`&Ian#!pmf-Dhm7Y;t$!iN!7MyCEw! zORe*8NST_VV)-=y8s|GvxJ#~chZ8?9>;#eIFWJUnG1LL!9tymMrFAvS0{^ih!?2#`Pjsx## z{|^?VrbSUtn1qclvYegPwMb+-*G#VRPmZh^JkXh*cz2p^l!9SAuD{r|4s8oHeK)Va zw4*itzI!Eqi>JC&%PaSXPBg7x zOVGkBnL6WPBgTO_VO~L`fa#U~Bpm*P-bhoIE*!tR`|7{BGwmyNjzYamdJbsHAUy@v z-VynWMutH>R;c&f6fU7WW6eK+oA6Qm!b#mXYPYJ0@!>tZ&KBH zEvE9HvGf{l6xDro$r>15boXrxJ&&hBjwTX1O8Sn8z{VvTH>xRlvHJsc89q+HwDMU)465zT|4E~ z0rpzfAh2JsnM!uc*))h|5;v=pwEjPMHG z{!9C8n}TfWRR8XG{#oFiwIwH|9S$+LlYurVF}_i;dQk zXS-K*zI1{%ru52o%cR|w0Eu35K?MEI9Ixs4l*a}X+7D8+fVDPHoOQ1ax`DR` zeJdQ2b1QMoSf%p%23?RsOZDDd6Ae#E6gtQ=C5QoxH1q5z8O{Hf>T}E(*%eJ2_N9kk zX5$w1YDPYUjgxlV+z{#Y2$u1mPFK*v% z<&2vzWnDen+Dd;V#F4EX(yR-5b7h-1YikdZKoo+I5kG1BfvnBOja?qD6I^*sdDCVQ z5bj%-CitaA`0~9H*lc+2iEKDdzh-XB8fLDIY$zp+OEv6J-3U}s4p_Sc#)^T{3o-S@ zCN)L|{!L^4x)JHx)qrlQG)?|q)7vaRk%P*SeXCqR-wA1zBE!!_AI6-8Mc*3H-YaDR zrm%9+Lfi2Yey*d=g$g?|y|{S4l)zJQ{v>5G{nmcv$1%AYM7zJwW-ZQAo(Gy)Mv&}| zj(10>EU!hxB~WOoD$1E)X9rj!B8w7rGPe&oj_jOm^Rv^&Hp)o(&3Cnmeo$LQxrmn@ z3FG6vclSqi&E<8Q$oub2_z)$caWTmz_xepja7Z@++pXWBsCi7hpPipw&#pgLTc95= zj{%{t_DOGD@o4Tuo;st}GjeO8Hm8uTP$}y$jc;EG@VAhKwZww6g#}P0=?L@NF*4SL z+K!R>j_5yU1W#GiGqIAFXHy?~Vg#>Sr+bHjO)1p9SEJYKh_B}MAGb%}c`)nc2|-Rx z=<_ceIplgiuQ9})$h&xU{O;9>BnNd}+4R62(wsy@TL6lYfqtSBA)leXsm<eh?U&;6R=kd5y_8r_H8c+4?nP1lvblLZwy+dM5zf$`*n$*(4{qn*$Y@p(o zD;SzV^zqsb#u)b3sbR*!yBRP=D=PEMbRM|YQDm;(z0EN22w2nAuCxt1eW^RYb&ij? z+NKKa4Md@^n#8Qhf|lIDaN>AZs6sdRWv<=q^@bwM3<^(48acoluG2GX|EloPi2BC~ z;zsB}+37iS+}9cZQ!B)Sj6#)6WMlj(+vQ`SzOt$;br7Ex!d+fUR$Vd-Xp^=p=V zy4Zm@XQDf1yC+N%-Y2ezFs!eBWPBQZu8gol^C&ZG%1*3G@V4BNveA=TEfta>hS3{# zqrG({{a&x|G@B+HMjjs^q)IPe6wbcwnLVRSJD?n5=a$;*t4nN{RXHdY;}hNi>%6;_gEBL z1eutTKdrgMpOPlboz=8QW^GmlCECBZ-RXmX+%NCNO#|0uUceWd(H0X8SV!Ht^n$uc z({J8ieKBNF2QEst&u0q_tSdyQo7&zzllZVb*>&}{7Y5xPubC}v5~Bre$y=L~A=gqg z;C9Z-ynW24nPww9jzW-*XJVk=Yit0)^p>Sx?ylfA3m;7gH@9{Pu$-b5#A9S&7*i95 z5Mk~n&+SQDHFGS$FO&|&DhG3x7>szoSsX2e82bZ1E6?4FXG2#`+;PJ#a!1;6wsG5Q zF<%IaR?XWwoXJx4%HJ~U53D1%`t4AKT6K&f4>4B*imaYW8Z&q{1wDUN)myCze+(l+5xha9;a!0*2saXJaYn4kM;7qfVNm8mU)X^r#tthwmUzv z{b7-;$n!SGS6Z9x4bs>C^t_*5BK_{1o82S^;rlKc3r`X(w{f|`%{J6(^rF_VIzqnLVHeJ|b4bAA3scl>5vE+8)& zfFK6~9>%R^aGkv?nqz4s07!TPqv*&hwpQlHt63nld_%42p$C+?eB{0ux;%XLb2NQ5 z+5yITnmNZ2#7Ilsr@CijV3zC>1`!6CM!lnJL;DtC+2QEWKEB+KA;HFej3`lY!v+}SKzq;T}3o0Z3j`o1KF%0m_8}+BN z4>tAz6COi>E3o8!J!F1RDkBh-Q7euABy+VwRNQ@j$WY6JJ*NEvm!482hf#?Ew zgBuFKWQ5#xZ=gjM3~)pF)7|YSQ4$%DFcSPs{$R-?hr_xk#l|S`*>(sJvorLK&v!c} zO_-T6x`tU5A|2*8y-#ucIkuR;_wf!rA=x-reNu4g_&96fQL6q8DEuboeEMh)de>eD zdZFp`_GKulyrRM1!njUIkl_eTZ+FpB^JKsVn0GSStkPpioIv2EeS@W6-x=si_b8aX zmnVH{Hb5fjafsJB%9AzoIR{IVyhlD<`Q-1`YW<*?M9PtUsImQWsi|tUP*Y8J?ARXV z#50C#Ub)AhDSN38kM~<>2i_mScri}FVuQX(9a~rZ zI)Q^jW7IlugJdn;zOws6byI+M9^G$-wRY+8Q@hp8B=2n`ks3N4hj`yW!nM+g6Yqcd zBM8dY49#}T-dclXC_U0y_(tcb{TmD>i$bqe^kf^NMiCY1A^3HO6m`Y`FE9GagahDw z>$hZnrzJ;B2F`Y=p)G0Wej!p_qe)i20uEG4xXfa4exj#w%@YZvPgfhhM~l-h+hQzz zeIKjxjUuq>brCySb1#By>-205*cX)ey$B!0ot~^?5uul#1f27_d~xAvB=xOYWfl10 zql9w0jyS*h%|ilHYq6>;njXmM#+3Ezrb^3@@9$nh$c*gERbwrf19o^-QHEc&b~XW0 zHNoGrFG7!JNX7jZ!$C-Vd&INL+gz8yZaq=mM~ZMg%j0bzGQCntcY9YtrCnWjFg_M0 z!t@qV7U?=D9{u`BU@cQz!`vtbL5vzNs?{k?eTGgEw#lQjKS`7?Cm<`{8ui{fdh~c_ zyRhAR<-1?c-inh7_-T|Z!@sQ&r^GX+nhw8MyC`%&{(%V5Y zO0;B%%Ws;Po+u)D#}x@4eB|x7q`t1yF8YPmvre3KOMrLafZT!E@J5_dX9P7*n#R+{ zd)KCCNn0CIh_Ap1f5T7|l2=)dP#OI0{uAEbypp{c$~krzQ5VVy3jueWqb)KI7d2@w zp3Sq}SJA-YK3|L2T<8+WGsj-E>YOUe!L~vRggHeubD1miS;+B)sUvwiWyGP3lxYW} z-CTD5hl41)`jJ=vI164O$DzDD*#~C%&6v!FPe|WovA~Xdy>Sh}k2kmZx_y7B)?-z= z#lp)d@2=_GcPxtASFW|H{k*yC27>7t;1*fcVUDYEz~AuZne%TV6ed*%gqVMm@A_&e z&z3T|THw@9+-MTfO{3!RrvmZ^NXD z=FCC8a@oq_4nddSd}kR|Xs_!&MmYDeMy{ z4)`ZtY8JU&dGUuv(g?LiT7_7XD)npAjBs+EF?|NsUZzFvyA@nAdsz8Dr3W1iz9Ej3 z!^GC@+@vExLPz}x_TL|!eki!f;Z5k$+&xgb2SXQ7&VV2m$HqfxrqW`ij1Of_??tDW zNP-_fqI(GHA4Ws&VNB*N^jwHYAGj>_roaAN`08ZANA{XcBj^06qzF+V8d}tF(nLhs zgS#xk-Lq-RQuXAwY{57R_0`r-t+1-XT0G(bN|+a?_-!jii(v@%_sE3ydqyp*IRg0? z;@iP=(~DeVkl~gTg`{2JqQr0b1pJp=Xh)UHmf!wgTb&=8IoY_rvdmIM-8Cct%gH$m zINwspGnh z7q)qez7UskcA;u?zdAh<#wMezKtJNCsVIlq+t zvJv01HDhk@$6jtd>-==k_^<4LzLb!{*?SdH=$qS~=QZ$=%y?B;GiyJnWnZaF>d);F zE#;|EI~BGj4x2>;;LGS`Aaxx;IReHCErO=IHatmFcLwPi3b`_JeNcy~XdaITae}{8 z!j~~eK_TYdkEF;i2t{*8WPC?_PvlM3sI`{nWU{5C2+`@&2W0{VQK8KThxOrQmS#`i9NAF9`rbSjXPvd69QJ>nSe#GaF;B*xxU3WV;* zvJJ4L_K;M7x`r%gxVp91!*bsRn9dn#x0Ibv&w{V(+^~gELCWwMa=IlMyPXU#=Mi#2 zos|XkwKOUMzEd-q6Mm~wfBVk9`NA*<9~o|pIFq2%TAWUrNxI$s8*b$U=(FlN-#_Yk z16Kybh+_NGCA5E!1)pAeb{rXMw>}UgpvdHxy*`@}VJg1MeYhfD?#q@*wm3e;jsD~_ zDI5WKz2YXuFdQj6{Oq3ZX+E_7lZD1q=Et>i<z5FmBT^XUow|;twZ1(+eeubi`@2WMK-^k9>S(6;Lvb z^ju!lKZ~@dR-5%BkWX)q=Z~DL*5f^Z*nWA^wcz=<;C22+cI+8Ru?m~wQ~EfysA{otQ2IJ; z&#zVVFaIHtheT%p$ZEDY`lv4OfK1WKZlW&SlU-tEONZI5kLSO;?yT0184vE)%{q;o z+*%a`8KP@m%~ayI6_3d0^ zZEP!X)W5uOu)S0j9e--6@Rkh~OMTXqka-adin$WGINy?fZmnWuG$=k&^ZO34-%Mcv zcz4dJDOLS{mq>=3Z05^H%iEK`aZh|#50s@dbdrZV7nayL0m`n=g-?m^%Va}7%7M0D zADn=>V1?4c8+b3y1-~?C&UXc8Yyf}I_R0XT+0}wbuOAZeud^$}odefC&ca~vqhlq| z3>Cal)g_=2o~cB{+k{+UYuF*&9EH$b@kp@oBTV<4V$T*bn(cG4Va4Y_+ajsg&0kAy z9n_;_onLh=z0yAsZl-Yqy4ob1$dYS_MGvdrltVN37I&lu9Ve!-iS!Y>TA}wEcdqA( z{mJyOh|+|`?)CTJ!7{R>nPMs6=|Bx|Y#j`?z@-0NI37(Kh#3m+1Aza0>H*Kzi9~E3 zu3k|mj^!6W&vxai2NPD1kWzQLY77M$XKrguQVVeoszWf z9%t*ajZY)1TU)&Nh7)!F29pi~aQlU>2ELEO5H~l*T2iM6juO!RVD7;3(#Zzu}}^G$)1sTTIE>A{4~RJoGr_s z_@9xStEy*#b)}AhsIK*?{f{iW`M5Eup;MM{V?AJf)Dh_-9o|^H+-4Q+kCW(DHhcem zpDlz~tz?cD4f2s)>5Y;xO96O8yS-;~X_p!eJCIQ_&CW<^!ha|`228`1b)^nr&<$%r zZj*Z5AHmx|W+ciKv7xKhLTb}F$@i?5Vt$XMY0c z#eX!#%z3@#vM9WkfZ)s!onU(ZmaEg-b=k`Irvh5lC#}fN>0^SN*xaVmfxeTUyd|Y^fk@I`)9Yzq8w;L2aDA-J zKI~UbxS?0FvV5<#;@qF!s&k5HBTCVrp|N@icYT~~q~5C^Woe(|Z2cHgA%}+43%j)7 z`-SePFpF4e%P<$_{nO!KL#6Ee zHptd>y7OWNc-4EGJ$yi213nUzOcI!NvI;OI6QFxEXAZv8cMV{%I(WN@ri9MlZow~h zi&OH$HZp2g=?!1 zDEgx4Y+dw_v=LG&LCe*Qbfpw$W)Y+L>;9RR9d>mf`&sV~Xu9)+ygZ-K5_hxCjXtSA zD-`;)&z>@xAFEerJS7|Ztrak96z2M5jC`cE9*)`p4vq?Oio{S@`xjJysv3RbEf8e| zzJ&(_>B_2hMOa2L*W`tD$tq4a>#T0&`c+4JK$o+0 zgkfniS>k>W_M38snX8~$z}%uPJ6KQ2?4TO;HuLLI!7^hM%3M4~bt2w!bnH~Z+AL<2 zMKa5-XeNv z7RDo(JA2FS!+Eh9O@3&;m30AR&RWNV0?D1{iphMtjT@5gGry|%e?%`qQt!jOC9v!1!Qbc;1X>1qQDPtu1;gi=tx|} zEcmpFAYNyDDO5y>#MxoXdECmurqN;e*q-#yZvzb2d&C@aH?mLF)mqaIyGYk9BX+>t zRwm_9JnfiGNtoG8%hsYJAi!0Z0w+N2bTiX<$Y_V1nA=1^0!WArFk zG-sP_7u-d5z(*ecH%663gx%=2-z4j7ZU&%{5Mgepl?~wF-RTr$z|HyAXO=E#x~xhL z`p4L+HQO$FKS9E@+`Ik(?sTN!WQhfA{)gW=1E_-tRik2B)F`x7!3V7_fu}+GBx7VW z7U6$2!I`Y(77MqbQ-^BRR6x2m_c=_oiB5gXBafj~b~7hlJSc=j;~kw|5)E;hJf?Z2 zraGi@8Q~hWb=v@zxb<+r2_|{Vy#KdhS!qw09(hqqKKn`Fq)Af(tOx(uMc47e1@)7v z+TK|uZJo21$VrI(!vu&3M2UEjbGIjvO;jgoDBVr?m3Kfr_BmbNn zf*-I}i^|e7p1gRM#68?shc4YvE4k^(qH9a?&kn*SuMp3~49Zm_i}6gKPz-@0kpeI< z@#~6(JPKS?;W;=NJ`7w~tG0}5_YHGUR_a06?4&JG+ZTAy7lwP;zWS)J69p$QXe~az zt@=D*Kp%+!4p+llg2|nIy$OT++J4yRhZavezVz?Ryym(Q$M5P8i{G|nE(xB@yWVDG zqrD|SG3Mr3jevrY-OWGKdmqR@ZcR)>RImohA#&uEWvCGzyJyV!IcI?}cfal>y<>&c zX?%D1=bGDoOPZVo_5~90|54}Ig_k-@_>a#hf7r}~tARpPoqut1AI}jXHkCAt$^-AX z`%iV@O;b*8WoPSyF<{okp-4u<>@!uDGHX|_gtb56dI}=IT1Bz_4)lExmXhSRJ>$X= z!{#@pZ&D+*u=tOouZ}Qjk6G z5)VlJ>ji*D*XrVyap3N*_^rX!mrTLC?B~Dkl-E})LA8> zmHED`-}vaI$5aRdp|m4M6= zykyZWYPKB|(h+c+95eO}P}tq09`ifyGu9?u2cq*n^}rq!go!9@1C~Rajoq*!f57uG z;{OI+dj)psA^|ktzM)#$bYId2s(w4WT)x`EMA(0j zH*c~)mD{Q8+D}mQoL^kDms+&{wEV^T3&|3cF41G`Mru>Hx*lO7E-Ci`V$3Quqc{RS zg!^M=Pg5IyAsm6YxN_4DZtaKIFG5mf3N0KG#2yP}RCMGkksFm%dy5$XdZylo5i$-q z-4C=Shm-0L4|MDP+hYCBF?>WFlCZUdy9;Y^zXceFN8nN=DOn|%_>C^&Ez6Tjqscp| zMw_p}!;_dCzfGn(b71*w2$x^PkrMhXM}y0fHN^(>+<+{FW<-7y3nAVDdu>SB4AFL4 za&6>41ZmR}`zshACQRX+>?Va6m@wan&8+AQ@NsoNGff8uR(vdjo7oL%B|(|=jNQuY z>GN1F0WU<)vBVv)+{T5cAzeBrz(hiu0+lv5c9T7r5B@GssuZFGs*m)Hp1sn(*l2G| zh2TEgSWl|%nQJf8`YAWppQ8nRIq_im$O-WGnaoQtMK8g7#tJvdBpn*?$2|Y4pajo| zNIU}1s3)Wau~1m%DeB-@kxv^Q+aM8Rx+=MrF$^pUbLkdZVTvg96I4|M_TJj#|zyHmq^5??p>~W=gusi<4gE|D*3c{tqIysi@L36 zcErPcw-CNH^hnfP)F8OEwH4jyp2-NXg;6|uRt(;7Qu6?R?}lJbtw8ctZr!`#MJwkY z1O!C-_kDQF`ZzNLt5c_3oRbH1pzUdSBd<#e+}SQr1o90Ps^;vRjra-9J8bP@HQOPE z@Hc*`6sN1%U`tGkXr7|e%ZDm$&GS~as_ET*K8NLBtbSaPs^If5yV$~!!>|i$-YGtA z(cuD!p9qo^kiHU=*c`CvO49+@!Fgvyp0%Grsk=B$%`$tD?T-YFz~Pjxgv zRm#d&Plw*+o?DNT{o4=P!w!~{mrie*e)z}4dhokES=ZmvW%?F#^T+*hV|R`5CZK%q}|7bAy*TP+PuVw{epxlsv%(Pn+J7 ze=pWxS#?{!3n6!XDEI?{;D&AQzSuC<{E9O1?37j(z7QSz4To`|MhtnB`x#hK=?t8k z4n=!*{wS#Mn;O=3*&rkFq;~^dRlKdmLEF!|CQZBZEcEVr3J?28buuYi_Mx*~57w`H zLVyEnVp<8y&rLayw6$v|gV{=*_m%o;-)-f9^PZ3lbKiZy9 z-lTZxR?6;K+r;`U=>GvcLBqbBE8(1$gY>D81=g>AWg-m^Hbz$AAGg6F#91W)C|S%M zhXZX#*&pWYh&P^yag#0HbUBn(uSVB@FOxUh$nCC8+OgPFD(rvycj(0LWQuZd*dJAkmF#A?xN% zr^(~kD|k6XZdqFEUiP;@{pXN|i&*N4hG>>+_e!ckK0vGSEQ*=~?CcX@=lEkX9e`EK z{{>qA+bZ4ED1B?yNJQzPuY?2ON2wPJyx;yXQi5CeD1+s0#AUvu8;b=_yE)zurY{AP zG&G+@QHzDHChnDA%MFB0u!;W_9m(GbhwXkKm$ArGqia3*lV1#M;~0{{#$X76=5eh* zZzSi*A}I<}1&gA_K+M=tSYzb z$hk$AGj5(-GD%ym$TXjH<&k73Z#VMbgJZ2Q`JGh*G^a>;j0j^CipV6ir5|O0iD8?H z!ja>Hyk9HtA7)nrL@X0lH1iRdz&s1Tq`OO4*o2KOc;wK;}*6DAmi0#{Kw( zQtLlw=bpbh?gr=60g#(@cL{>N+HScq2SD1n<(36R^^ZW0A4Bt2`vk0e>3t*B){Q*X?bgb!e~sc_g`QVUAZRijfNQRaF)byjh8wE%;Sj~h z4ZQSHcqHU2-~f2EzUJG~gz!z}d-w>}=p5#{it9YZQ?qVq9K&oO->5RKAZSBbz!MYX zbMex-BFbi2e2@y@6;3|E{FKEN5>7YcYA197uHdC=@S(^Ct2N5f8bU;(N+OD|lOSwPnM#aJ+~br*%$kiJ*L|mIoN&P$06)=$^ru#7gx6om8QDqZ;4)oB zh+8f#_4K9XTB-9#@%fO;r`1SvDw7#w{I9u+cYoj7Zt#Kp3#WI9HPv!g&ELyf2pgLmq0~1omL$2C^JRSh!``qrc+6n zIbxiota2F4LI3pW91G^MJY0qW1RgfEujl>|Z*)d>cZr6>cxE)sYwYZ+QkUIm`mGw`qU$gWoik74=!jAgFL5)7PQW`*HfJ@r-8?u%$$7DJH((uY_OW>k%EIz5Ne z@*NR&(zyjL%4=rX7H$4rzO-jYDCBbtD;N-Nf7{_o*P=}ocq92R;*>Xi9D9OU?KW4- z!Ymb3TE6wA&0ni4>qF@uZqDWH&K$?X0L~RYloGGXU)InRhzu{}D$6y|=Vsq4(-qmg zxfTao4|AZ_x7AyXL8 z2SW)?RpS*1YsUkO1iAP1kC~o{bBp26*NkeBd9+ZLCSH-0+i#@y?h zm&Y0E_;2B&MDBC+?)|-U?%Qq4mSCwLk8ej0b2{_CO=vg0a@mzA?g#63aOZ&423o*= zW#vCr1TCecLht(t%K8~|F8X;xRJW^^uSM(eDH*MD?A-nJbGC=SftAaCgi?kfZOoz6 z2s?KF=D5GFS~U}${ds5~EOlSgsfkjl<9|U1h>m1$t5h7V2bt#nRsJHBbHM`>R&v3< ze!W9)UyaI(Nwwm*#>~4u*MOZ%AiRL;osmVKNvDc%t#?l7H&ZqXiq|>B3GX{4yV$`e z>9pFgbrC&0L?*cTGT`GPcZ#B5x#uoga{-hG<= z{lY~6HuD>vhnR)^)7Kkx^7u*GLo_EOIpvR*gmQF|qxN+A-7`i#aE1u=ggu0MRRv-9 z8~hKJDt?)`(_Cv4dUh_l8q# zhT3Zj(=zVaous2V3-e^L-VOKgHDwcxIDGu?j__d+JeS$RN{YD22YJbF+|f-Z$Cn8-aJ~OE;q@} z)%#6H`80hWLcLn^kO;#Nv_~uw#R4fi!s6sQ{-+nZH-J824XlzQ^2%YvK@e)mh=mer zU%9DP6bddWk#f|t>(uX47MQZYm(v2GjF+6wN{@Ia2sAVF zWX+}c3H*i)0<@4Gbv7+8E%xc>ynQ8%pSR)4N9panue4w{dU%Yh=6r=~MR+#>$JBk~f@_sTJqmfQ zDU{i7tC8Os#>2UW@4%Gj`dJJc?bk%kyC4pLpM6d`nY7s+29EHMo?_IIJTK0AxHeb4 zA z02|eeF5xKK;{C(}jn(y!^zfS!y6QX1bB&b7l%<2$2pG^*CtSuWjW`a*W;vFak{r#E zaFc$Em{`~}OChR|-TP3QRPqDXNO}_M2 zQ0pyi+$I|q`FAs*HSZfQoGyv`&dQ}%{fP0;Vwy-?nGD|82q7m|=E{?Y7@7%zkzp_j=n{vN*-^KAtz%!3?tB#b@LyDuR zbyNq=ibo)9hW*^-Z4#Y4FSY%>u}ZW?^T1aoUrTFdGH1+rbpT{gvWWOW7sdeyNY#1+ z@_6ctMNYPVd%T3Af8dgH8r{qaT}{fgzLmzHIQ@hX*)3e|xLj3k;`pe;k(L;`m}h|r zk$H!f4L>JaTG+qsV@}J$E#R5B!(7W^p>k<4yanrcw;nKXcw-4&-KYbQ@8M?gDjVff z7-PFfiI2p&T_&VoU}H>VL-SGF7a&hr|FKP-F=c@%3p8Va!N<8$qMUM#0sCrR@RUx= zGT}=`3hb!2;qu?}$oEOM&0)3Ku?m>5h2AigyZj3~k zEnEez#fWW@!$mtTEtZgB1@iF%49w^F)Q&OaIJDUomrB)?$-y7ud2dtWIRJ8Z5l?f9 zB}BhOMjiMp3hi1k(_c|0^uR^M$%tme)rL$k;Dy$0n}ynCmS;SXM6BeFL{uln^I*f1*R-;{w*LXcR7b{Q^n-sCgZ%|eR~ZT$Y$;u)qFTDBz#`4cYfr$q-;}1 zc&^@Jb!Ib{L^ao1Ht)7PfK+>g9+GR%JjOENXOTrY8(~i{Eh&-ZU>dkeW3o{jlOh<} z#O+qO(nM*_I4)-_n??1;TS{*1--wqmBoD_yID$qpk`J4P|g7-#`sE7w-K$zgV>e>grjBYAHeZt{as zCTa{1XArfy%~ACGRRCoI9_^teVR3mv(JEeU!Qy1B$b46mZX}20MJWWQka*xM;3llU zXC7y1G{W34+XT<|_yS~7B-hoBlvI7eBrJ7?yOk!ATyF#@3|p3rduS6YY?vmyh4(ct z)MMV7sQss|o3g-^1aC?e^lpR*%HYi`}*zmF6zFw1(Mp!hDHQw&N z;Bu_vLH77>S?0RA+dHS)SZs@;BMgHsZ%&3IaLx`uZWGrQV8IyHq&joDnzG-}7M56U z*$b2Ky2Yt{fzOK)zJX36%rKKp%G<&ZClcY)e2$Z8i`>ZwZcG!EauFpUjKFT*0OyXf zV|YF*#2c(vpX$}>n=o1j&o#mi?d70sn|+A~s)xKrH*<-El??6VLH5*|@FVlN$B+Sq zL`rlI$pM%fi;{0ioASg^@g(DMZZ`6mRfL2qNK7}XgS1g|93^`z_sGq)HGct?>zf0MTEOx9CHE`Hh0x=GAh$RqUuqbPvh&T#?8^tl$o#tApH5+c9sR1k|ZZ0 ziMMuOlMjuTldRU~(JibN=cAUqq@YEI zb1awA5~(c6Bzber?-=>tF^5r)YT+(vFNhQ!eVj{Gl&d_XZ!LswS!K&eR)(o@`EeWd z!gWnOtErQxEHGt(^KJp}TV)n6mtrc(4i)&Gh|Y=YaAoR2UZ}?B?`LqeG$RRk%g^B2 z{}dguvKEQK0tC4Cy@AT6V$|g(ZPO`yBP{{d)iJwa`NqY$+jZ${eTcCnT~#cX+sySv z%|*ie+E!zuRnYw2uIvJ1q-5rKa=RQ|8|nTXldcKur?d%)`T5^p^dB#Ba0}9RHT%l zCUa7?oQWw{o6Yiw&Gd!{7c{!y@LtEatLKw~hA`!Gnj1Z?0lUb)LWGDVNK=c!#KCaI zKus3r0sX^^2g++s)RkQ{tg^Fez%hyAp|XC9|B8eye4 zQEltkQF*~i3RnggAV3(|_DA5;#M*F?e7Vw9- z&8F62ci2KY@+0P1EnJ;=fETJo03<3KRV;K$aYWlJVr$txMq+m(-|$khLkYI}H!iaA zI(>q9sVGYXhaihuD#1&&7A)C(D4Uzo>k-wFa_)l=?oIFhdV*d_M}c)~p`b$l^#jtS0BlOP9+rs1EmrK2koMAcbptoK~|I}s{#1xmduI0r>Em%=vt-?!S@K~EzsTCas&3h4tl*cqX z(KST+Hu3~FVVBh-B?59e&-8ytDj8=+ZUm(}IMoqCwd^04Unoza&{({I!}ZFlsTx{o zqM0(xpgkw-0EoQr_ZO2M$T1`8FkJ)~EM4MawrmR8A(M}Byx{Qp)>bn2-is3`uXBmg2x^Klm|tt^imrTR^v~Ns5GLVlBN>cz}8{YwGtY z3tV^$$T#_)Ex;(@l{XGG-&X^?UdY#-GrZFFkLwGwc?3AY1!s5@H~K58f+M$VgJ^#@ zc|S)R`F6-|Ubk?SKf>v6Q&OG8SdbW`PkoP3vzeL4o#LE?r7Mks;TCR2GgmgASe(I2L#KockGW#I9j|nXm)U$iT)eYGp2H9~iG`(Sv}dKwo+t$0yPkx#sC_ zVSn>ZZntcb0^Ufk<#{2>nVDy`nM@XMwFJud^y74nSSHjIDTjN64N7U3gK6K6+}|hB zvXMu7Q2>?(UHZ8GsmzIDJFXvb@RR$hdFi{1Z znAyT|0oFw=4hz^0n~RM&kj+S9gk3=aAaNMn2-k@ALFx$aWan^^YnMXzMT=eSYa6Ft z4|@_7bwMd7Z?ZCL;4vO@4o|eS&a+?8)09O$ z19u3U;P4PT=KLSy0ff?rBRwQL6gLWil2hPx>*r?~|D?*HJ;p*8=E{!0VlRbjxE#uK z$Au#AHiNmSHwmYHpR&M|1 zmpidJk~+k@VT+Hs{#)3&uW_fNi5G|2)&9M+i{|iVuJ_Wi?`eKD(Qlif8lJ;!EH05y zeKJa~r*!JKj-*_twQ`5Qs!N#ujt%qbCBD*e1J+x>mBMQx-{}9*#>*0k9_is`%GA6` z&9Bb2oX($4mNZApdbT(6H04{|u1xgUHXy_zdux?OHqvIZ=Ui|HzyL88u*O$L;UqQB zHS!P)0zQFJaS|9oqu13kiXoiXWLWrYzcW$>+lln3E!3Imqr6{_&i=v%ilrGn3#J*Wy6yTHf}bE2#!4`;khF;eK|^9yZ+6F4v;y z$I3b^bj8~g?EulscG)I&H#C$BxzuAnl*Jw!$JS`6C@4oe46U+v=nQ@7?@m1W((FW? zI)BOnQx*uf!0;b4TP00|E_gUv-ha_5aj?Byym|K{^m&Wx=Z`Tb6=A9CGLjx-FTQd= zv-9jBlC`*1QVWs>Z1I7Q<%T1hSt{Xm`Ttt-y0xC)sYhvx$GO#42k&Ujq4b7uZ5K%s zL|RP6Q{2@YYCXb-{_pdi9-`OUtdP*T*`TdOq{q!M^aOWG)HevEp6L84FXVU1^9~<$*5H&i0<4dw6P;mmwGept`r{-E?5Ib9Ig#fvb?VI*Di0ib~3o_9o*J=sHHLN;iBQwzs&o7+79~?50?1&2mXY`kru8r-wlhr zfPM>5h+4EbMWW_g?c!#l>tjf36?MlH$f4z>yHQ~s->0P{&uoGd`+}m!ZuOO_Fc{&+{6_&?w)(k001BWNkl@I&)zj(hyx%u_lMr)-v*3v#Dt^Apy8SWBqKDpK~_>ECY)LV(1d7lM|2#bO>qrr({I1m({3xKDQD2G9- z!Y!4ZM43oQ{h&maF?CE?V9Ej)&I0-oVk2`|C0rifUF93r+QG-w7L#LtNUE)knt1>9bgsAPm!Tkq$@L@a1T zjplKMu&KHZDQQEP591-W$Ue!}9EVt=fIS12oXd@_#b|3l#@-J=lzZkfygBW=<5da0 zF&RMOMsBQB4rugXj@@&=GqG_`#8&=mzAy*Cc%6ZAx1#1m+Y$EGasmc>xXNhTmuVbR z7BBmi1uK9Li7FiC*+#Bofdp zm%pKmEHeStQ;afr0m~!+llkuM%nt_FeZdH-pKcnYm+} zm=0d_a}}KHq@22b$^ugssBHmRc(aPzJ-&E3TXwYR2Y9EEFmk1IuN)z?BNT*yOa#n~ zb5K46@n3|a(>5>=`W-9R-AzCcbqKi!P z^TtRD(=E~$RNV9WmEFuek~%18j&y9`)q4G{fc!+qrjutY?0`>^7|e3LClF^i4r*-Z z3{bPjl=m(4?%Ax(>h-nR-@i}?KsxJZnv#DDjbf}eon&mp$E$2Z!Ig;@;p9g{==pKF z%mj9EQxEcsMhr5%k$a@(vKk?dx9CbP&2`wLF=9FGhW=PQ-w1Cc@8@76_o_G#Q|AJ6i%&l6NUe zJ}ebLhPAKAG*@^;j?&(R5Syv5m=h3j`6T`z?^YYIew4OMg4JVwFEKEgl05Stn={D= zYL~;wc?JZynQzL2tOj5iew^!tG{PS;@@h*hi_Vq@>QAEJSj_chJVRw!*0 zC98DWyV|6L-51En2+N_5l47`S2t1lUbe(OVbK7tG5gH%fQ#VpT~hv?VL=G zS7-kH>Z+_KexG^CPD6xejxWRFUs^7|B!?%^V7g!J#qNN-4O_ZQkazo@i2Y zGveIN{?a%A!m@YEJeF#o5Rg^m-I`9oBScQlU{@SsJzSWFbAMqe)yY0mQhP2 zsM_Q8YFWdOtOmFk=WZ2YAQ%M^0T8WA?1yqx15(zTR^H2J1S>R-QE4niR1T%q@kS$g z$a?pf`hCg*Qx+&$z~^pT`t?hWsc(N zLW-S1N?Y$Yxjv`aQ4J?h?HTI-$n;E(70C{s3BwRcDq_T8jYn%7q>uN=&myot?gQs} zIIwC_k#gn48uR^g`J}Z*w0X=zE*qbx3=le@3lxV28LY;);$0_t3kch6IaMGjgjbHR zw;n;$g_`$Y8V5iIEKb1ExpaBF((*Tv(T#t`zDB@&%^J-ssgvt6HrvBW{Eq#URBM(y zOkYHc+2xdIL~CdljzI zF?nizVGe|+7-;&jo@c$q*f0Q=%Nix^7vw(h?qzoP8<{!klBwp|4sGV@a!HXhG{B4L zR&Mps$fBi?n!!6?L|IF-b71QHDGPkrEg&R3BX@AE$6YUre}9Hu9W7iYte~~Z*#xD| zWyHh8cf9DQH-5>9_iJ{|+i+IX#KUNX?WVnoEGgq|M!3hjpHw8YcCuzD#DQOa0gw(E;+!*d`<0PmHfJJ5UTK6ZsF{c7 z2{{y8j&=Aza=|u?Fj1VFtT=5FWsqWeBipD@S;gzq*Kx>9&Yv*TDsqeKGT2%}?$S65 zKVf0U<@#idZ4;Gp9O~f?3zA0`^4#LzFr+``kkH-88SWO4qTneC4yQGAS}`sWPgMG+ z6`z-@DaO$;dy0eQyxucm&X<=TEK7hsBjST2^SRvsBc%`G1U$rBQ;~pXX5`elQx+I& z0kiXeg6q7+-@I>g*rtAq%)k>yHFZ`P&d0oi8kOD5YN5$Z7T6Z#?C=(M31hnsZDmli zt6^`-<@A9g*mLKx+OdcPQvhW-@vln?LKe2R2kYyP1fQ+&qFk-G8=E&$K5?P2IWYJH zD{Y%j|DtXji1yOvta6C3uZt_BMk7h~hB+3-Hd~mM@xuIxL^xUZnT&S6bPj+wadVql?3BqB%-<}Ew&nv7N|=m+d&+*&R#NjqBOajf zrl(`miW<&vi52BCzXRZ<3&H?3{yux;9j+#u-oQ4me9*8%&17Ld#;mBqF1YA8oQ!vJ zAZ$17y}*J14(bf}={f!P7I0)skynUeXNufuSOE*{@l#Nixdud9SOl9yY-wDbzppIP z`JWv;BNMy-hjheJbXOdaCS{W+R5OM#UhIh!F6lP!*ma*7PJefzBRxU@I)7+1^p z&wQIFfFtsrkwg-Oha`1~t+mR(J&c&}|HsOUwdVjx1fp1Ecg8kEXPLQBsJB@(m0h#B zQ$$^EN_qo#7)`$G$J)X6Q@l0C>ih@(bJI8V|50f0x~>rPvoH zVAJSB8r{OhuFEyD_+^W{IsM`0O8DeHp8RA`7-O`DI|Q8PIvhwp#5+N503p+fM!3!? zVD%j>iFKHl(c)@c=J=>E{ljr^IF>xdTmF~Cq!G%Cc(TY&^=RFoW-LIhNLZ z=wDF1^riHnnwqGIA}SVHidILWf>J`Q$%-C9!Q!BY7x09CTt$EK5U*8B^^R`jF4v;P zFVI$T0EF835YIQ8CYDrbF2(IqI%tI5G{=+Ecx@u7OCh#XaG9S&LBQy)%WKs@;9rLM z`K5LM#6abGcH<@b4JP6b6!|0(<5VMZh=$YpNz$1-mm7UO3+)v6xb53~Fp&r00a$`6 zfSD)E!g*sULBLT<)T&}Qg)H$%lum6kL*5!kv9DFL|Ku4GiD`6MiWcS4kHe=e2~Mf| z$jSsAwV744Ss=IwS23J++3k;3l%1LDESJ&5G$XIvFe{%p9>baymUUKYvf@ApejvtP z6~fGw>*2bhsE%oLKE}>q36Fk~){z3sJxqX92ei%P)rq`V6L~gM*GyU9t84*D;SHYP zX0Oywa{j6Lyd+`&;JAi2bB|OUMJx`4)zTZF9$Z!a9=S%}qf7}d?G7ql^5^{P+06*D zE#M}P`+uaso>>obtn%F`(Y#+{%It(`P;fc{J-m;Fmt5H&6U(86a;sc z8R29tCRtIE{nj0{W#e=f^IT-vq$}-OXzg$IaA7Q)a?V3>5T%)TH zH*%MqyxZ(Td!~oWY>R~=7-C0p-8^T8QhXSeKQp;A&8-GY07I=+l&>Tm(wXG83QcK| zqsbY(-fZ6{@@%HAnXz0GOBo2kvbSg^WcsV4}8;N39%9Uk9qS&K+CDroXiYl(wHV4xW@Ww=+x&ATJM`A4V zhwY^;N#zz@jv4mU9IlFENx!o$ZE=g~B9s<-PYazNVy8b^Gts`C@9Vzw4uBuf<{3jI z7X{c7W*l2~_I{X!WQBZ-uuQtc8TN#EW^%7XFA-b#!^YUG3HNn22zFg_>6}oH%4O6|&7v9@A%KkfCGr1-y3j zA2BVHVug3F)5AO;{4hxygFmFx#1sa>PO;2OYs73$Mayhs&Gv2T{3#3k|G@%&!Wr4v z3=gt1*2Z+(CT80Vr}CT{6OPxY+!pQ@YFk;7gSr07yZZWjC>~ok@WF}4NTpkhn$kS& zFx{^W9qf~Yh(t0nALW?8)XxxE*j(k>w8-+{j_^XJjjMzRW85>4 z&|8rKr@)7;lOQr-B%J4)vcE+Yro{qpB+J+d^ZQJ$Cdw?SN~jj8k$y_qV&V|HrUZn} z_nR}-{#VHYLW`SSz-@kFGl^6x3D^6hh)O8`$>=;Ed+*=zKW28iEC*~B9>wdb310nr zc9L>IZE@9@Ft=Q!a1G_|dOj3lwoH!OU7G`qlr{S$bj^1m%G-%NhX)+ew&Di4mwbOm zT6kspZ_8F<{4uS@xk|L@hniG;X$K_0_$bNrygrqNr z9WJUwOzId%QXE#CqwyriMQvpyOSczEmo0maq?|#42LmTbws$LpqSUFLB)x1EDp4{^O@(>8Ff6xtrC%F353G^ zkqgnC){1x9*K%6!=V#Co9q430*0)xlMxW$T*Wnro4SFFnSyY7xNkUT6Pmh$x%ypMh z$KsT2(OgbDx-`LE+jiAH>)5$+?v48En`*zV3aWM>^Ox>t2TI z+2V`({Y&it3_ryjRbZKCoS_6;s}VaiV!+X-SmYL1;y>5$3)sA$IKXFqFH;DK?igZr z%3+aq>F`vu%(WV=i|m!!c~9XfxR{;#GujdvR%3H)j8=ep!abQLx?D8Y><=p%k78eBICyqch&`K@il|qg~194vU+g^75 zsvLH79WtLDqj$*SwFAk)J|T5`+)$;0s{x?p$l;-(>cc$vU^ld9R7N4Gub1+O# z#n9Wvxmlb8E$N6deS0<@k;4LQ=2hQlDSzl~?FeTQOp zF5PaRnn}td3q?LlPvfI%)ltJwah)o%(EBz{29^29MwWTZg?Wp&I@j{)`ItYG(dL)h z0q}E8%U~N-ZVEGuH)$)s$%0wrjp@fYS`QE-k%;*-nH!67P35Js(5k@ec}*r7VWpHM zCf2gm^Bzs~VjlN6ivG6s?DFoL@8M>Xde9t^keMlMS<7>NuT!uES}`rPju(`?l)l4D zJ9v(Wx0n`+?5q~U)US~mUJ5r(I=k|#x> z9&pXD06xZS6)UUTl{Xdxnis-K3gw+oTeyA%zx3HJvupNMntUq9c2B`?XbVd$mqkGb z;K=t$wlClgG{=(9@Ot(hy8WPVVK8+Sds;i`uQwKR-yV{q5pFP8va+5@dOfdCbWUX+ zWq}s{|B}|qf!2q3d!lWf@9VzQ4uGF+%C^ZT9zZB(n?Cdp>Byy6QK^5`oXR-dF6{(G zF3iV4b5ScnfQY^QQMSEE~!QD z>9KN2e(vQ%^ft?F?co^wc9&GfCkN@P7e#3FSxuccWq~iF1qAFjG>heSln&Fs(yrT* z#d&yu-g@FP{xJy=PP&bi0$`T!K)Q;yy@|XjE*Hw*`+kUSEec z8^%#5STgKU8B6)HYtdnA+9gh@ik!w4e}HLXo1k29W(&);%Pe6aR04wbVY!M9pSKlw zBTNRk)_f3$X%w^ZnrXi67Vjs@l~&EpBfrKBlT0(*Y+ve~|K)Z7Hgb(+ajBVHih;Iu zW9caC4bJ=B_&o0f^wY@GtFx$t0NY8$5T(z6cA*f@y1(n*2IAw&ug4W|3?jGMc?JH*mDse)-is{laAa zc24(jU0fM~oDT)DFTcq<*q+0>{O_ChFSP8pk-o_HFgM60j>}cSRD^f^NYDSr-g|}F zbzOI!zY}i0m5@;g1OXDvIaAC*l;xRulOEb`%M=k9WKCN${dwLfKXrTTmi5UZ5h;y5 zJulQ-e{BWk96*8;Nq}HLBr*!9eDewOt$okFICbjWQ~*T~#MOgM)QS7-u=ZO2z@M8Y z~!>9d^vU|#XA17H1K#|?pSVo^iVGRC-urs8kl!7x+{RkG1dwH;`a{&F4`6THb5-j?Ml)v7S2wxLB_7K`L2qJAJI_vMv2E z`%YzIn(1?$JMUZzobDD-9`!$GiJz_4`(?N9n!MAypYdXSp%6#9=eiZ;(a+h~5sP&9 zL;N8+ZpJroo9xny1-7R1^ec*65Oga6T!Uk7mEAoF#%J;jnx1TW6w+&XHG2QzMs8Ib z9Sth<6=O(I@?-VhD)<=+>lQeT(i$;b}g@U+aH4VctE|+DT)+zd+%1n5VOX>1^7+I5#jSfwV1cm#5&StimW|=bP zfa4+&95)afs$YVKNbp*>X@7av6ThH0k>Co;rf(W3FmTceYK3VW4(A>{8NG%F2R>V) zehiZvxI)r#0va42Zt z61`c-O}@=6nHx-($@FX`+3o67u`p;-5ggF8pdE~{|3ZJ?EGDCKL!*{%;2pDhAq?E} zMM`%G_o@v>eX(yf=eyM^9}oPfd(hhPbu7wQN+NjLydVqWguxBEbgJJ?GNwI8c(WY_ zOCPUQ2nBQuY%?ux)PFNlyr2C+otk{Azs5Z4<7WqWwi|hMxwm#xRRK1IqnHut-NfN=ew;9wQA7PdhQV9sicd1ldVRLYgA+{TzHdl z*XHy5gC}*eyZt!&c%{ERsQd-$x&sc4;u zA&}>(66}0+Z>YUMWrX(HBxZ{H)&9Z)Q7UG*wXHtZvNg_#9Evr;IvV~3pn%wR|3~2Kve-*Z2lS&tt&wv1=}Ggt0P{>lF}r$&~k%9e-E~-RDsD5PyuN7jGb2fE9+A zd&S?c(EH`=jnWhPOf!E2LSQ{rA^$U7e6J`aF|`4 zM5aNyx(>upJ?7+2Gp=D;aqpWo*NLb4MHEa^$y0*TC80g?~!tgkr zOH*JBhg_XPw>OEEIgT}dkmTej3la&IY3728%zci`1W=;sl(N%ETfA*N)LMa0Ssf?1 zTy`9?*o(ZcVUTtqt#%WUww&0=oeDS;2@IOGn@kjiUEC+;L&uUlALSa00^vlFYpq0` zZ6QCY#|7pk(;U${>FDQiQ+V(5Wq-0pGx}3~G8!kb8Dh zXO~UY&el z$5fARU_lRD;R;u`g)3m&4{hL;Ek2svLL8*oHHMy|CmYZWvo&4{>t46I@8m|V7J(tx zVXXJjI{QKy4<)!N>+pIQ{XemZyF`7gQ|gSK#M;Rq`U@jqvt7RQoh%X8S%^DrN`x|9Yf8!qo_dF@umD`!-L+m%J|TBQ@B z#({F_^te_2|2_RYBdUFRyvo02`*}Vt;}>@?olS6jhWbJRL)|ngU@~5* zasU{aC{r%mc(YEB%A7}Et-?adPEN}@)-_O$?&;$rd7sfIxh`R|(5OP8vPDeuy|wC%OQKf5F_|G&kwz5Q*fT$Jo*CxxUK3 zpYZ{Je6;c}S>~lqa^FphLTQNiX8m7N*8*R53n-AA&-GRS^ivp_JntBP!DxLW*!&mBoh#N&wx5^UEz){k zQ{}dh@R$w^}ad+MZv=ac6u05PT$~^eYy7 zRW562_y;NR>Lk13Kw?__Le94me42ic&!Y`ECA%OA_BsH@sFvB*2@26^(uGMQS1w2=vbcNMTrE|5nSZtQ>C%}Cf^U?v?vITl(h9PZ_XB{4Ps zX4jN7e6j9jfEMByS;w-Z#pPLxm&0WQe*=9*xXt%*s|Ig2!#YS%VI{amd4U@o&#dC@ zc9|UY{Wp-9^tn)LLa2W;s93Nwy_&t}vH>&c8RyP9)fSLl|LA6xW_(sEJ6>`8Ot2?k z3Znev|x*}t9ZS!2nPIkH4g)^NVJc`uU~m>~OZ|>vYvx$%^B1wlKjnPOR_=jyGc<5bmmOah8uQm800?*T z370FPbP~^CGU0PbqGHd+F{>n9SfPOq~#k_o%_Q2K6TvHR3y%<{GOnSxW2ChxO!ZCO;PA<5cYX(MS z4L_Bc=qNn>J*@xre(u(RM4XiR$a=0y2Ea;THJJt@eiGlAB$G%op!EJj{wlH#`5xPP z*K)j@_xUQ1{aOV8x}hYkZChN>5VL60f^h>Ntf}8=jc3Y$lzP$z?vVgM`2eiu#nZ79 zJ+YC?(s2Gv061~YpaKBM=GO9TH_zw)f>bdGkaWslx0zez&E6kHXg;ElIKnL&{o3r4 zh!%M^@J5hS#p6u;{W$+1qKv6Mur!56tcJ_&Pi0}X+tValQch|XenyIsIn zIoQtK`|IBV0xlk#&r+>oC&9lB2a*Ta7EbpD88lI;Q&hFMU&7>IqL=NuZ)@`#Io9%U zDn7%WM>S=W509%jux(hEWQWfmB#WSH`7<%35ls(a1o#QwJyj~RjPuGM_qkG1D4iZE zw$4VXb`=pIn-@B@Id7~Z|HAo+ptM}G__#m9G}1(4 zKwd)J`tChKPKnxxJ!Xras76Jjvcgjg;?~V9x>4`bw^2y>K!!5T(XU;nX}Yrr7T#{H zHJe>e(pUn}>ox!g?Bwbf1^U>@dD-e@ zvzqC5ICtK;7KpZhEV8D}wT4+&tqgoPM3Ac-K6dDzS(wc!GZ>|*A+p+4IAog?ZG)We zvDkCyQP(hW$~8WkougK)aD5xcPS-bhFSmL+2)6V~&J$T&$sqKs-W{#3_)Z3BRC0}1uyJezdVuRCMeCDLM7 zsgH@PV;$YZ{JhT%YJf)UG}|@4Xg%LB$UVx0L)`p4Uh1ai*Y5fOtu9-0cGJXa9N^&hBX#G=Cs<%uTr2%i=y)Sz?2Y4r zD|Swei-I(=FZF-9zL=gV8nHpTL3Q)+EQ3!|1MF><;nJ)f5BBt|VY@tc!?#1!Ne6h@ z=)#x2w2?bqmvrvoQ(LeFzf*v_Wv-0dh@DCgi)tTqL)Vl0DtuHRu4X3KmU(chZb3Kz z$XdKN?$-moUKe+7lFG7(OX{h-%U5;oSrGt48!tiu6us$b82|x<6cgN~&+Sy~K~TF( z=W)H}s5hg&iOgr&Wr1hW?-}&yovQCraSbL@35L@>9E%&2D%EasqX)(O0bVta>lH4W<1Qoxpl+sv6!;RF&~9Z>g<8YvEC${dpbDV(O1b~i0P z?nK~63yes>5GMvDrb}74I1zFM6Q@SU=RhvW=iR0TzpBA_?!ISM3&=Q_tgt*`DkB}W zo0rVoxWVUfb!;_mYTPZyIv$_)Jv<$FJY@&@G*)ex%WEM4pPIqp{=hs&f`lHIg@R`i z?2KpeP8egLucc7?i@0A&iJQC;HaZ*I$PG5k@08i3-ccxx8@S)F7|M0Q9*BNDnJ>x< zxm5(enz@UrXJ5=*-(jwmpijVbfo_50nUoBZajV8irpEE8imR{!=H|FvY{})`mWh)R zMb-#@BCc0WaqI&sKCec>%V8<{DD&ye>Zvn-nzJ$h&=Q-C0n!8n(*W^F*1%+M@*%dj z+9gZSFky0)E;)ob^7>v9eAp(J*vY!BWZR#^;cSY}qT)Q|jjVKGrMO$u0X$Y#qt8y%2g+<Iu@Tb;Y@P#nIN4pPkq!Xc)Zrk_V@n>HP zNRYo`E(^Ut3`^cnkm98@AGHGdHg=>P&|$-i_v9dVHUP^p1~gK7D-^liFfp=aUYIuS zHjphEO7eVKEnF7iLXfR&<`x+Jf(;7rDF6T^7%IDbOOW=W)R*>nJ)9*CR1oJ`23NWw zF4pEJ-9V?;PIXqqdDzYqUM%K zo);I_cF*~B`}aP*(ZrhB*~ zA*j#bC$;R{EM*kYpq^;p%uG5#+~BOP=c<~?5>fCwKFRAd?SR9ZxH9Fl)S2Xs-k&hi z3=F6=7dF%-dIed#!{@muB}rS0#(@;W+6&o!eiuzwYS%JpA2-iiz5k&*v~2N7ZuV{F zM0YvS_V)jkMTH8Nhc(dU7}H>TX0=N5bzBOW$+tXr&eygDjG=#FVNZ&yLOXuPPqH;` z=N*1aL7sEk|EdCQGxH%TPB~)xZ zqlRUS^}H(^hr_&P{PZM)Vsry55(bw{n+Iwfs7|nF;O`ihza9R2GP%VJraUfeD6G~? zz#nGU@(0sJ}{g=b{|ATM58&%K^d^dvQu;OR<02CeLN2f4Zy zN*&AJCEAo|S{>_RHM9p#juan{Lr#f(A|N3FhqIKMT%TE5pE@|y^$hm9HI67sTnRD4 zG$u-9OjxLOx7D#GzVC1#_b?yo1zMZ}|85?Oe48sp0@F6xm0s0e@hbYBq206Lo0Lq4 zqGK>(nvD1kzH5_9`YaUQue_`5&Pz6L#({tQCmAT(d@Ii7N{bHFJdX57WJeVs$>(N; z3y?{!kLSA0YV7%E`sd}iEnMep*2(>+NtO!?dNnQ&A0yGeU13*xi2Y~dfbL|_pF1Wp z4+x+CpE)m`XL&<*+{BqM_;5}SM>}DbXbD}Z-}gMyoi4p#m@c-s*YN5T*f@nuWie|i z+Vat;9Jr?EhVeSlZ!DR~RGM2PD3{#koG?Jt^KZ{)$4k zeMMzKEJYtQ1(0|=$(s>(!en_dw}qvACCiCudL%hcni_M1xpy!2Scyy`#fq@rij?&v)AvUx(w*+5n)i znQIUpt8mKUXkUyHp#DH==N@p>yZmTwIm_!kWmYK8?8%?v!lzcUua(|(L*T|@nReo` z96n1&YKO9TnhuwX_qEj0dJ=4Fr{_N{*m)7Vyql%I&qCj8!kX~#e2W9Q2|jP-t3A1q z2V_w6JUrDUt1$^i9JFMIlCrt3A>J{=06^Ypax>rY9g5L=Hw^?trA;&;ESBjBR>fNe zlZMN|)M2I8)mHYo%YJe0@UKA&NZ?*xz)}a6iHCcvd8c{$U|BY!2mq z$a~%1FZ^AsdWhpCMm*t8kTo;`{*aXS!8or z%F%0y-DPQ#IhH}L>S8A?9LHmP%NHE$#8Oky_dEv5SzZa(M8kUI0y?rB#$AIx?NVkN zeBr}he&5XwUKk8>t6V6k-zoN}_1(}XX^W%h zz=G|1>e=yk!3fRiWuEJ>vO(!H1P8`}yvNR&FnY8hR$S>TyqI!=TD0E^rTM!-03fU) zJ^zT25Eer?SlDWZn|FP7_O9iV@RtzrFj>s=YxqMqUq}L=?O?aU#)zV-Ul%euoHVKU zDSWepRg-DTq~G)z2&?i5qpD!@aWs1=aN?0t5H6fpU!xWbZ#}jjeAqIqjZ$BX`yEgFNcq5lmNggRCqa);JSwQMRbBm@n-K2PKt18 zY`{#o{+)agKeQ0W9$znAx}ukFJM3;|0W2FV(+P}n>XPg4ixx;H&k#OFu?FUIk71wG z|4@GydtjGcwn@J#WeTt`GzWEyqtYO3xpbWJX}8aPrXGLx1^^)`TWNf?00sQmRv$wK zeQ7HCQZ)1{PBSfQ>vLgS%M(APfB17)uSmzGJctJjs@LCBEqS@kx1A zp%#wq2r0S+H<9{c&8M6nXN&QlyRU(ssRR9+{9HmmwG&+83%FGW%nq(Aw7LOCqUmP| z#vOyjN!j`On3jR(`;^60r>~DM;?mU<>$pqG2)Q-<&$zbM_!#MnJrVEv(O(Pu zNv}Z6gUt6lE>fil@hLGlmi5^l6}i$u^Xby;k3PF-@8?2vY4vwW-NSGy&GF$PhZe4+ z+N#tkr-W_YPgOWg;UNs=Q=&4aYW+7UWmeVe^wNHNmyw)P;YKN&>SIK|p;+OyPUz6Z z4cw;H7qb`g`*!d5bsb-4Z2%x2M2lkt9b`PSYHH0o?xTf~`~qfsW)|;H6Z`l%^BcCG z!9}{IwZ+{#+_BqP<+kc@I-3wj#XDUcwe%FrJ(o+x<}T8$DF}KFv{1J{v z`|Ri@&bK_4Mf*YcDJ4Lx!kFQ*v*(eMPL|pWqv*4BZj2$A#>a@zPqoC>p2ryG{~UK-OC4!MFLN_yU9kQf$cz*cN+J%h}Z|T{r%(%rNm0ggX^Mymuy;($(GZZty+Z_bFhbkAFJc0QG$f8~F3^*vuw)*LaX4)4rR0BO zJaf7hgNgOrp(uYa+#5LOb<=Sg6qW=>a}V-PH|Mro{GTRS8RcFP(U510+A_wVl6+Z>veW?g#!-C%OV*8_;Gl&fzwYbYM2cb)L|hB0o#O zOb(x=4ECPRN%wSpue13&Qudjg$3Vy`m>}>=65RKOfGmokTUK{w^sZ5^8_mH`_D?us=OiQEO6b-)d@HFnngo*S)UOioN zkv0?xOB8q0ufpl{IPtV@t`$9YawGSJ833)yrXjH;3G$r$!~DM4y~~^Vjw_lBK8JE& zQfcK>-urZ(d)5a4VcTCx>uqy+z8NaMyoviI#T*8dOj+ndvYKCJ0H8|@?E;o&9YJFW zOp~ex#++)WQIpR&Hw*pGaCzUbxzO{;D^Z^$Z*Uw2a9zOy-)BN^ix02^vOH^0gKo?WGOe9Rzox zqW63!L8R*Ab^ZM-g@bNEEp<=<(7f6LuCH0lQ|y8+X>LvX>pzmK^>al{vTi=6X;C;X zj+`|v@#{{gu3KS`l?t!~Aw!^3?H^jcd!oYj1%ER=E7I=zqffCs;c}@QCt1SmT3%~+ zPN#p51_0{3Ci2A!%aGzeHI7aE+$#P(?mpqo#_2XM>h!(-l*gU*0f01SxT7=!>Bw=V zjoha>t=WT$XWkHq5gz&c3fDyH)&e9E-+Dj0l0P)no_-o@c!)tW%S2dYquGbnKGZ_3 z$v@P6-AzgQZsJ~fm(u~bk>}KMo3gVq4CU&Vmb85;#aqT-GA=dx2ZmWbB@L@aJ)RQX z@i9U}nEMG59u zHnTmG*`7N+3!~b@z!Si3TFSr{PSqlr@R;K}%u*A+2aPOjpUaAqp3TT!g=-rT?G zj+Pb%?N&`b8VDqM3!AtOpM}C6a9j=+U3PVXJlEe=f{SAV%*|$*V|(h|6_Q;k=K1VS zdmNCA)8~IfYT@PF8K~7chQTrAF3FNn(EtD-07*naROn&UT;4cUCsDbllEXEaRd9H@ zn|ILfa^jaW*v&M%x(9F?OF(nrB9jz>?vOtE!7?f)T-i^*PTESEv zL&`4c)jS&=OToN(hhRPAIy03*{yL4(Z$wLCJtlr zj+VuzQSJ5cbrfqv+}v91Mnx>D;&G_YVq~vH@oWYab<&@j9V0>ZGMDU_%Yf;zAXY10 zC~@^gU;Zc4{^32nY`;9lEKAb9$rP9QF8ylkM}kGIpeOR!`G7*!?ejM*Wj&7MLh{#R zo4LSpS>90hGdPUN;p#ZWev1+d)O)y$U^0L`GD0#1S9azOEsOp6 zhxnjX8!JZ7V(yhpEGd>R2d>!N^qqvoiuYM z6z0ghMW~I106g;#w|>@c`^uSk{5K*1&~>cFf)Zm7tO9_i7{uk;b{|T~@vh~q@h4ef zC%9O3ZW$zp<8c6@rlqMq6`v1h#TZY7?>X@VmzW7w=z4d%=ZX9K$UoDc%qcGG7x~qE zIFoAxJDjTtFcjfy$onP?_9j=dvuWl-(xl6n=asn7vQ>GY!Q1Wdd0g9LUn&A*Z0z2l zmOIF^Gc7TQq_Jl*83qIu*K>=?@<>+4=9Nw)msRZ-t`Nq7=QCj@l>M_6SDTjimeNkb z=YV8H`m+=`ggeuB=&&8nxWi(UuE}=z4787Crfg!M(*z-0b_znJLyrJwsqC9*2@w62HS-j?Kbw@Z9cWNU5?` zqgu4tKEK8LDQVrKEcMb{(kuXNwj*x$4B`23rlm-^M%buF%7X2v*uk9hfSg+xh)It-#;-0iY@1(81uE%^M0s#3qQ=I60 zMtfswQ9;Bjz_O+bl`N>aRdu?KrpV}z-^^7itb)}E4Ms0QoeY?!(Yv5;*Vk)axdBz% zY^k*!y^g<*c?ClumL-LH6a%Y}V82skydUOx1}miuAc25ov!m56S*|Uhy~Xp%nJ~{z zG1nLQWNq0Sxw+?3H1q7prZ^FoJ|Ex6tpY%7H8BaBLM43uzPXLEs0vCMBeR-U)r7Z! zg&JM$xoipZyxR?MeXcM~dX}?m=ws3u(J6OWYFI7pPF*p2GJOh;&u~wLLo-p5Z1;R; z!rvtj$6>Z%u|QPw3}1bt*s&(%uY||`krZFdFHvPJ&fdpK%^T!i>C@eO9|aiHmb;-{ z<=8rIv@Pbf5}xX$-6q%b9mB@T_VW9^iPM*`+_k z3%ax;Ss&ZthG}gaJg{U_@-ZMuVQ3VC`<`ll=(KIlgyX(30f11ztV+Ejs$UbZh}0eD zBv_cTS)e2(EfOLl>3AIROb$m;#g$E5;shx!*){qm`*SIFX&~6x&zP0SD?M#Rn`=f9 z3U`Kv3zcY-ui=j~?I@Ec1&fa6T9_e4udgU~2`*1q97^=EJ#G<}NtN@MU8r$QFbPf5 zC~x=Nif%WljE-)SK)zh&^;rujx2u^?Y~~JAzKzXL_J_P3y-y(KwAi2}hdJUm(Q22Xl;=E3 zk^z$Rv;z~pHO9$NU>Bt`HCrHk;_x8pUXvb?WOaSAva454b0!&4)oU8C`c(Y{2e3Jw zFEPm)N>L_BW8$BI=7#^@=`9wxU4d3tEA>jRvYtyFQ>E#TXIJx9+_MdDU}@6e64Pch zvyb=V0?Ntt+%KL20f?}zXZ+YkZji;fP~+Y0$2i`tu0$ZudxK#!T=V$6_aR2&ST|}h zw7E{eD)QS z9PuXbu;@!zEVe@WA#t3374WTK4i#ogmY^ndODN_oj8*m%L^(^e;Dh!Td;Le_V1E99+ z5dLpTO&(O^Z6dpxciYizmE)+vt>P^p0cGw0FSesO$}YUe=UWo6RXkpwwU)7V&(-Sh zQ=C~1j`yzO?Pkv{x&g)YT&KW{ZGIv^mipnT>zss<|Ax!4>?3Sxcki?1@86gJKt7oN zILXQq?ok}iIxS@=yLS2xvfGa<>E`i4uCql!E^LAmx{zs5Onb^JKmpm}eqj*G=}JQd zTHc~=Xk{mPzLm|dvPWIYolX^_=Mi4$v>haCvM|ZrmPNUliBYp_Y11Z|Tr+EUu9JHf zHYy{g`EhmEk@Z}aG+ELP{8;@J*VY^cMJ&m%Stuz|Kj4Gc47T^j2*GsnY{EG4e9F-h zlk!I}x!O)LSM^1os;~uIhY{PRPzDkX{erk|Xbwn5$;TDeMZ1Ny-LnZ*%>mctddWHU+bcI_Pfy9)A?+^S1{LL<&T!oik7!v=-Ll9JrCHA?0R40gqdHFf)JQkuLV zSQDg=?mftht=tj2z5bbg{5L89kdG0rNy&dZB|h!@-}(G>d?>LQ?eArU=_xr`HIa%i z$3%@!=RV5OR?&LYE4u?Bk&Yi(JBF!x*?wMbwgb>2M}CcW^N&qe)M|A@4b1EIxzz-^ zi0{g^v;92NF8wdZh0xm~!1P@BeTFx2WlGo&J|8wyR||`R#J$t01OQ^qny^WvL-bAm zdsyXfpY%Z&&G-C+9FO%O2jl3!k*lq>lC;tD zq~wx2tait-o))9)xjtdCK5!dZPdm&_^t=WW z$;8jP@xhJ?be3?ZWO76iG5_#%s$4hi9X__fmZ(pPey!S`rnvuUGPB0GRQiJ&3pT@^ z!S38&x1LM8c}5wpn(jMUjK2`{hmdkXBDrtOD#s*;lw5ur+uy#Y1Dy7+LsRECI_#~ z+hNDPW^JwSB{jw20xvB2$;t1gq)Xv$1IFS+M~XjZsh{I=U4xgjXwBew(qmEMek~Nh zq*myO8etP`MlhkIb8GmWzMkfV3kCH+i8n9&F_m`xNHPZHBsaM>*=A)UaWv#3EJc{g zVauL-qJUMkNau1St1h-#Bk4dQDZ6{|m6zSUoDunnSGxYEib2IT70aWhG6oJ+w?;MJ zLk$o2XacX~;x5Zki|cc0A>YW2Qd5;(Rj$lSMhEXK_m{CSK9B3fH{SNynOe&y^6!nH ztx5e~7O$~Eu1wW9k@*q(;@US11Xk?;!(mlDwL5-}ca7gf+${y^pHw?&vVA-k4pKFf z0F#5Al+3g;UOPG3X8l9tZznRmwBWD0bE;H;kS!V$-N}QGT?K)XbuQi zZz#n}&FHE!pNu_8zhN@RuCsf@96)pz!(x&_|t`w7GC#=@8J zchLoyw75FF7D%9q!?td~zhB0){VA{cjR^oo*0C%p$k8T1B;^z*l(WO^X;&jVogZlU zztWc;;0kR$sSHNe^5GQ0lE+DoFXTKE7KZID!_OhWF|UpWKDNKe{pxAVFv9Ivn7I{o{<%hnmkf5zSLUY-u~dzoIA+?vB>?M5v%Ch2n_Z*k z@Ns{ajER{(&sTlkHzEK~i@(L?O&ePTMRZ_LR~7rT>Tq=Kqe}IzE4}VcKd21mxmgyw z78f?|ZE@uP{(|>(jZ}70Y-V1?=jyNsQQLd?_>RM;$K2_GfV4#-$x6c|DLWv14rHKM zHJC3hgy9sYT7as2%QvZd9wi%U&FY7Nliu|+!Bsr|IOhK`pKl4}s1tpDd4Ek&k{BTC z^IUk>Arte2!3}X<1%bD^>i4=9sZ3rra93FGKPz&_F?C9<_Z}A{NUFd1Z5~jl@>OgJ z%wuj7r^1;UGbvE0d>5M++BrjtkWTLeNqM(f3#hT3%BeC26x-u6Qo~2;RK{5jwN^M1 zIi|ds3tUg>W4K!m^6X3idzwF9t@6>pkJzUux+8o?m>s!?6pFtwE(3#{@2VQ^Azq5B z;ZFRL%S^3ECp*@VQI;0X3iplZ7>fgkg~4OZoan;W5xe1p&t(F3{HH^_9A|pfYHV+N zn&kPTe7l)Hy$&!$zSNSPypNl^kmq$k?f;6o#X92#&t=lKu(k53ynDjtXu{!xDPu`W zbaPl>CAnP0v8Fwr%$?$iQ3pIv{rMcqR@fd6CZrsR&(#WStABD_fgSDoRoi*5$pI4l zP0XdwN^o8SS0K+Fs0YTKb}D7SnLg)Nao$-U04P~mi#s&%Pdd8mF{)L@B&yF<_^g!W zdR12qJHLs|ropcC0Sd;C`X+*Th^CaSF)u`hDCK!kquv9f!wx$F%)_sOF8 zw{y8Vkz_D(P1p3OddmHhnkndOpFRcNiexvGNlu!r#t){e^)&=aWZ=rs4LJEbeEy)l z5=!g1%d^OLg6<#R$Vv-V+DZ1L{+jJG>CEM)__phkY{l_bN?{9G;hJ?H0QrSwSi|={ zx{3KYR|S3v+f?ZJ2`9y;R)rg7m(mvkfaObdA|D`J`_Z zJ0%dQSllapFYEI{D*$M-_R>3FFU^*ozdGqZ-+-7dni z;EtYPNygw}*Q|qP^-nSKKD{smNszE{Enjd zdAt;DXa8r+D(1K)Jhl&&c~)o1wBwzW0&y`siveLM$ou*(o|E9S{zyr#anGPpM7yHo zu_ewSQc*;oU{=6~cf;kOZpVqpm5-MBVBwD$YIUv_9}6#JTC_-=CyRFQKPmH6^1L(q zFBuPCQ~Gb&I((J){S;S71S)**|8jumB@&lohn^&t zPjRX5GB=7omBm)Lw2t`8ONz^8e>47VbYM!FKheh$!(hIuzlIiSS){A*c9d!}wt<_% z>1w5SE(%t2IKcO)g$IZP3x7GA#9)e9rp?7uG}DCxTVq!`My6Pa<@AvlOOsC6d`q5N zyC8-qIJe51QOV!vJ8B2RLX9btb2k&5XeQV_+$`V8Fd45o9835VJrCD0$QlXerJzU2 zgvyQu4%h0AZ0?xP%W+=d>az`YqR;tud=I*E-gHDfzpH~#w9EZcT68jSUq|FNF z`!=&ASc)nvsv2j8d*$0!d|s9BskP>#fVOVhL@T4YKGSp-#{Y>qi9W8>*0jy8+o@QS zKEL=27JDf!4U4IGHWOBzk&yJ9x~-}(TPii)k7~|qn&wQi9_pJtPO=!dJ!(G-4d4w^ zH}x}@HgT7Xa}joOOg_v#$Wb20sLtae$7cDI@hm{Nh-in1 z!|^oqKYR}1vp~7=nToYhO+mTpQK*?1BJV3ZXTwoQ4N>=btJ~Cn_`9m-^r*ITsVn>o zgQU3DusD%@h&SaLk|CN`<36?EdF;-o*i98Twr2k`GL;@~Q)BJq?`Ss7$E~y|)B^nf zk}VavGUS`$P8NAD46u{=WpW`awf%bI79v_Cx+^Y6Y6b^8p&-7yhQxI@F}GA@v1iaD zrK32JDG`=BZt(fSLzLBAAeq0-+@t8L^}57oBE_tqTQRrJ*#UPmU7cCSo_K;K=@eJ$ z-K|8J$RZq2oSOP}|C)56NIz-j+aB{GgW%*#N;GUy_I#?69`gmD}%zuO)mX;stYQpp4~J=f<@HOcP&y^K#T;&$OUCv1k2 zF`_`xYaIRsb9>X=RC9Peu0E=EkrwY1U2bTG7g2T6K3)w2;PiqZcF6sYvQ_S@O`SZO z-90gUWud>_w1D{q2fvvSjetr2e3U<{`0Se%qQ43H+^8!x>fO2P!Y)hr;R&3QOR8LB zRw}__^&Vn~W3ey!5Zjw_uzif`Q(Pt<5^|1sFc=n}teMrpEtQW*4j6q;vre@DeM?Oq5t+ zigRQnTcV#w0+XV{C+%dw+l`lrUoh9qaD(UYZY!|b#5yjQOjTGcD=f3?B>1%N!FcwQ z1YhMvh$)WDT?(-0rPp$9QcDg;H>sPtspBS<#I5 zFPpBKOT|i1!NsWs4U{mj;T)s&k$aG!Wj^)E$(=H+V}9($yW3a3TbZCL0U5kq@J|H*HBrE z3U_KJG|%9R-}SO1Zl|igZIX+`ole?akoCzmd>Rb`RNvdcMUD|z${Os-AK=qg{Z3NK zh?MJ$Y*gx@ z{b?!5NpK{%nLbAO-s!^=6@JOJzRkQ`hL89w4o&-(>zG%uxn6{P!V6d@0e}RhHwRR} z`rdRhdUbSN|%GVE-7`< z_t5HR^6#e0WcmoNOjB9=8JS|9d*v8i0#NbCuSpjj?vaH?c+xe8ou0?YEDNugrq^@0 zNYQBOyxtw*U7XO4faKAAWYaln{>28IQD^)V%-OQ9f@5u+qqF5$nmX z&|%KSqN+b|IHO z>mv*DWPUZT$YP{b7F7@#?B1I_m(F&@(c%gl`CsI`ti{V=Q>Mu$xl+ED6Qe38?K8TB zC0X&BfLbZbk^aA6M19*j2fyL+>)808Mxak@1=@BI;< zbvtjgJ6`(d2xPMsa~-!H$e0eJ8JiQVr6dcQyvM|dvgz%YfYqt7yFbG)73_ko<{X7^ zS2&eEr97&}T(|_#3~Z}GuIhX-I5T*Dri;IR*NM$sZh9*bo0Z73@C#r;&2;uZSI#o|z z;|k(x;aYY$dywC@+GVSS8&+hKJTDoTu(4FD6nk9z>5_y>fge&XidFUAQg0vRel_{E z&_HPRO(uTDrKZDjt>d5;njmm&2L#mPG)mtK8*N23_9a^}zKNS8fD$IlKOE$(P7(Eu zHmHAaUlbA*!^VQ~B3qh)>%th1xQtG>{Wb1*1*DY>OdM6&$2Uz1X^$-ea#W%{gWMiw zu7s~C3+H5-*TQ-MVZ)m^S5k%h8RP-I2(}W_>gIjJr5iaf?8w;cIvSL#M5I>p;;GJq zojkA5krOUAN1Yoji_g;!#aq31a@{len6owjC~oA|hRBBi;Y@a=O!l>-Qk~9^6@G?x zGNIv#U7n%c&Z(Q{4BH$xlNc6fJVE8g)j)-pJ$i!qX`3Ze5W&GiC|!4(ZElIYm1IT2 z=V&3x?#U438x%N55w#@Afy$A{7A(Qm3$=4`Gv zT`Fdh!^tv-Cv66W7AVKgL`hE5C&NIx>UyrKnJiJFJ^f1PrmHNCWJ%6n%zaXd5E`iH z+*e)Zs(QEth#q@;*2FVIN}ISn=u=Y+tNac06%9nfS`;FG7kwsGr(VL%V%Vh?i9WU% z-)FMjxKM&uBMRUsl(5Dx?D84ChVa)@HrGknPjn}G4zjb`l3c6jQakz++$_u_Nx2tX zcFdp6L|x_ri|xn&)c^n>07*naR1(?AqS634&oZf|Otu$2u8s{9ERGb59GWwKYN<@_ zA67w)W0eFxAW{#PVEB}*wqyIURkv~OL^MguCC3HU?Y{A;{9R#hXUpVTt<0iM z4rOH>$3k^;$iXbn3w@ z_o>}(3;;^b)dnTa^vOs6h4T|BE(`ACidm5BQWEP?(dCy^q)hm^9Pb=^3{em6F zl^6^Pz^te4ji7Nooi=OJ<0J?e-@pZSpsir|jAjn;Rx9aa$0y&DWXM?6nIf44Q=ZF( zlAhEL5{F8cziDiRnoL*oOgOWkSsqG#ZVg+aSqH%t_-QT+1Dq^z%=2+2yCNb-y^rvE zw~eO6SS)V!ObR`#c}dRK-s*7Gen)Vp*&0NS6o+fSs)mefjP>3Gd2Lz9C{Ju(z{g20+|UC zR$V?hr3}Zaylp&MFMEW44Wlvn=4oDxstIcBhMaS{dGJc=d{`M}iD8siG@*&0A6%Z!`~Rt~b=C#|f2sy-bsv?+90^jZEga^w z(TToRCrIRO->*@Q5MYnZ+fipge;xCR7B|KXxXCA2U?fmG1KGWgrFc(I9*vrzk6&=u zIeB*rc>(my)pE}Zr?3>yeytpiYp|wD>e4A#nyot*6<|Ve0T$yUWZ;Q z#buf@BukxXP*Eit1JCu?617?lV<@6+9fX1~v1U z^ryg^W2pz12>sEu_$c=fhh}oER_AEEM6*CJdTwbm=XoAiH0Fwf{9XbcrH`?M<&LNH zMckav%hBLkx?Sy38o__&5% zfk=H1@WPVQDAC^T9lmLQKNkRe$zObY6SrGFeM*$)kTR~BW;W6=>QF0eb4~F;Rmxhi3*w@CJ?P?gv$~WKXP8pj$el8oS8E&?cq|^s7Hwixi}ble zxv-7#qVb=*(>3qplPM0quQUbf^?eZ;8Q|ki(%S(G!JHgoB}o=)N>F1FGb!aPUS}Cj z2l{xk3lk8NUXRNAb-cD-_N z)n(g26D)<&J@_78vz@BWHfg}82HVBeh4q7p)UIoi%&*~>ZEUmj|n7<`vaVV!eq4ji6M{}LdkJa zfSSTzRJg}-`7HeyJHyv1Y~;_BBcLc%#>jO~Y~mi>*W)q-&7Mp2J9J<73?}miAI7y; zP=2{rX-U9DPZN3T>aP?{cdld!dsp*nyY@Ku_nEiAxd341ZP(G6VN|VXy8Eyz>Qbi> z;ZiTnj`KpCB%T+`;@C$paq~`P}i%Y z}AUgH*IcW5Ly zUaPPx3Ir7y-@r_~5qm&h8@{f)Ww_Ib}tYas&8&pa?!7ZASCxIRwwrwk(a^rjf zo24T4by+xv<}ojq;F^Y3L|s<(u;NAgm?f9@=LC|(VPEws92kf(B+?6^>oMN5hS%eQ zfB;}MM=R3lg`pX^t-OI1ZlIVJhdWTr3i!6Pm+bD-tLrXuN}_i&*D4C4fmf*ViWo5* zwn^I#<++zqj-!OdsWPg*BS2Es*@AZUIFfystvVnPEW+RdR;H$6JLGsz`n9CkhbkOs zX2v9e=|q()MUqkA*sRp1_Lz@JC^{=Kr_Fl;#f?Y4mUOPFK9Nwj6cam zmd%AKIFfAsL0%1ym%>wAFN%h_HN4Xpb7E+e;4b;^FaLV7U}GN42=6CY)Z&Go8GGS{VF#4L?pgSMA~! zalgphG_61$o3kUU?~WiSr-aZ>m^ELv#Iz{k}IL3>ldQG2H{$ZY%OO-ZruRLE^HLlTDQT6hBgj;Xh z>`ui98if~Zp`PV~06?wT;?8Jtmn^8Aq?MJXLb?uclM<1iWXSZHZ;3)%Xbh=^%;2~M z#j?YR*+)+5Y6xg`Y>Wk_$D;7KQ|}~deImjop7J$nzJ+hN7=}n{2PGEyd!@#wvmWC> zrx~_p{ZfLXs?UWrLkTjuqHrn4dXUv+i&mMJxa&sC0A7t2*QHe&zq-XBhc-f@l87ZTmbMV_}a3#mKQ73@nV(2oxZcI&rPB*x0;uulTMh+ z@AwR*;J9lrtLie;EDaoet?=%#nWwroOfg-yg{gWCX;;|e`y4e*@fzWL-($9<{G`?! z7XV0*z+Y2|+l3bYl|_`XG6Nh5i@6AHVq%nK7OIwMoh~Yp=r&xxgo`yFx#?$@1;SIo z$gpp6@E;E_6s~)#T}qOR4MELIAm=mTTT~4(R&nVS(4G=cG5JWRLCa5Zk?V4yWFSV0 zyd1VKj(ZMWHi|BolN-1qj9zc%v^TMlJLQ|i26~d|c!2v&7}g7fcG8P3-i^g$1GmZI z8^__6%#@KusE~D?cpo?a@YMRUe(pFq<0-+KhJWmlzi!UJb4JH;2NA52xU3nY0T zPzGNisoriLTfjMgejj3%QfC3I;dgQLIEB(*$hTdavEEfD5$2^|a-Nq|y!o)>mn$lT zo{M9fToeVR1q!Lif^GL6kL~BhW>|#q_YR9P$u;ysExUj9Eya_d#=E&kIjSd1%{-8u?wHGq zQGW!T2{H`+m|e|*;Mp44p*Z8Gu-K8ZtIo1hbTG>&m@f;FTI?+L`wp`tBNSHdlfUV# zL>vyH@%;oPKFZyy?k*XiG=CHcR>`21Hgl6GTFUow5*$4|!493q4;=DDz-6vv4VtC5 z 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 literal 0 HcmV?d00001 diff --git a/build/index.html b/build/index.html new file mode 100644 index 0000000..64f0996 --- /dev/null +++ b/build/index.html @@ -0,0 +1 @@ +Ansari Chat
\ No newline at end of file diff --git a/build/logo-512_x_512.png b/build/logo-512_x_512.png new file mode 100644 index 0000000000000000000000000000000000000000..2424e15a7b969546f206f111ff290ea56b2c4578 GIT binary patch literal 10020 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 literal 0 HcmV?d00001 diff --git a/build/manifest.json b/build/manifest.json new file mode 100644 index 0000000..2f37090 --- /dev/null +++ b/build/manifest.json @@ -0,0 +1,28 @@ +{ + "name": "Ansari Chat App", + "short_name": "Ansari Chat", + "theme_color": "#08786B", + "background_color": "#F2F2F2", + "display": "standalone", + "orientation": "any", + "scope": "/", + "start_url": "/", + "icons": [ + { + "src": "./logo-512_x_512.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "./logo-512_x_512.png", + "type": "image/png", + "sizes": "256x256" + }, + { + "src": "./logo-512_x_512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "background_image": "./logo-512_x_512.png" +} \ No newline at end of file diff --git a/build/robots.txt b/build/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/build/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/build/service-worker.js b/build/service-worker.js new file mode 100644 index 0000000..9208a46 --- /dev/null +++ b/build/service-worker.js @@ -0,0 +1,2 @@ +(()=>{"use strict";var e={923:()=>{try{self["workbox:core:7.0.0"]&&_()}catch(e){}},190:()=>{try{self["workbox:expiration:7.0.0"]&&_()}catch(e){}},437:()=>{try{self["workbox:precaching:7.0.0"]&&_()}catch(e){}},185:()=>{try{self["workbox:routing:7.0.0"]&&_()}catch(e){}},833:()=>{try{self["workbox:strategies:7.0.0"]&&_()}catch(e){}}},t={};function s(n){var a=t[n];if(void 0!==a)return a.exports;var r=t[n]={exports:{}};return e[n](r,r.exports,s),r.exports}(()=>{s(923);const e=function(e){let t=e;for(var s=arguments.length,n=new Array(s>1?s-1:0),a=1;a0&&(t+=" :: ".concat(JSON.stringify(n))),t};class t extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n=new Set;const a={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!==typeof registration?registration.scope:""},r=e=>[a.prefix,e,a.suffix].filter((e=>e&&e.length>0)).join("-"),i=e=>e||r(a.precache),o=e=>e||r(a.runtime);function c(e,t){const s=new URL(e);for(const n of t)s.searchParams.delete(n);return s.href}let h;function l(e){e.then((()=>{}))}class u{constructor(){this.promise=new Promise(((e,t)=>{this.resolve=e,this.reject=t}))}}const d=e=>new URL(String(e),location.href).href.replace(new RegExp("^".concat(location.origin)),"");function f(e,t){const s=t();return e.waitUntil(s),s}async function p(e,s){let n=null;if(e.url){n=new URL(e.url).origin}if(n!==self.location.origin)throw new t("cross-origin-copy-response",{origin:n});const a=e.clone(),r={headers:new Headers(a.headers),status:a.status,statusText:a.statusText},i=s?s(r):r,o=function(){if(void 0===h){const t=new Response("");if("body"in t)try{new Response(t.body),h=!0}catch(e){h=!1}h=!1}return h}()?a.body:await a.blob();return new Response(o,i)}const g=(e,t)=>t.some((t=>e instanceof t));let w,m;const y=new WeakMap,_=new WeakMap,v=new WeakMap,b=new WeakMap,R=new WeakMap;let x={get(e,t,s){if(e instanceof IDBTransaction){if("done"===t)return _.get(e);if("objectStoreNames"===t)return e.objectStoreNames||v.get(e);if("store"===t)return s.objectStoreNames[1]?void 0:s.objectStore(s.objectStoreNames[0])}return E(e[t])},set:(e,t,s)=>(e[t]=s,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function C(e){return e!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(m||(m=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(e)?function(){for(var t=arguments.length,s=new Array(t),n=0;n1?s-1:0),a=1;a{const n=()=>{e.removeEventListener("complete",a),e.removeEventListener("error",r),e.removeEventListener("abort",r)},a=()=>{t(),n()},r=()=>{s(e.error||new DOMException("AbortError","AbortError")),n()};e.addEventListener("complete",a),e.addEventListener("error",r),e.addEventListener("abort",r)}));_.set(e,t)}(e),g(e,w||(w=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction]))?new Proxy(e,x):e)}function E(e){if(e instanceof IDBRequest)return function(e){const t=new Promise(((t,s)=>{const n=()=>{e.removeEventListener("success",a),e.removeEventListener("error",r)},a=()=>{t(E(e.result)),n()},r=()=>{s(e.error),n()};e.addEventListener("success",a),e.addEventListener("error",r)}));return t.then((t=>{t instanceof IDBCursor&&y.set(t,e)})).catch((()=>{})),R.set(t,e),t}(e);if(b.has(e))return b.get(e);const t=L(e);return t!==e&&(b.set(e,t),R.set(t,e)),t}const q=e=>R.get(e);const D=["get","getKey","getAll","getAllKeys","count"],U=["put","add","delete","clear"],T=new Map;function k(e,t){if(!(e instanceof IDBDatabase)||t in e||"string"!==typeof t)return;if(T.get(t))return T.get(t);const s=t.replace(/FromIndex$/,""),n=t!==s,a=U.includes(s);if(!(s in(n?IDBIndex:IDBObjectStore).prototype)||!a&&!D.includes(s))return;const r=async function(e){const t=this.transaction(e,a?"readwrite":"readonly");let r=t.store;for(var i=arguments.length,o=new Array(i>1?i-1:0),c=1;c({...e,get:(t,s,n)=>k(t,s)||e.get(t,s,n),has:(t,s)=>!!k(t,s)||e.has(t,s)}))(x);s(190);const N="cache-entries",I=e=>{const t=new URL(e,location.href);return t.hash="",t.href};class K{constructor(e){this._db=null,this._cacheName=e}_upgradeDb(e){const t=e.createObjectStore(N,{keyPath:"id"});t.createIndex("cacheName","cacheName",{unique:!1}),t.createIndex("timestamp","timestamp",{unique:!1})}_upgradeDbAndDeleteOldDbs(e){this._upgradeDb(e),this._cacheName&&function(e){let{blocked:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=indexedDB.deleteDatabase(e);t&&s.addEventListener("blocked",(e=>t(e.oldVersion,e))),E(s).then((()=>{}))}(this._cacheName)}async setTimestamp(e,t){const s={url:e=I(e),timestamp:t,cacheName:this._cacheName,id:this._getId(e)},n=(await this.getDb()).transaction(N,"readwrite",{durability:"relaxed"});await n.store.put(s),await n.done}async getTimestamp(e){const t=await this.getDb(),s=await t.get(N,this._getId(e));return null===s||void 0===s?void 0:s.timestamp}async expireEntries(e,t){const s=await this.getDb();let n=await s.transaction(N).store.index("timestamp").openCursor(null,"prev");const a=[];let r=0;for(;n;){const s=n.value;s.cacheName===this._cacheName&&(e&&s.timestamp=t?a.push(n.value):r++),n=await n.continue()}const i=[];for(const o of a)await s.delete(N,o.id),i.push(o.url);return i}_getId(e){return this._cacheName+"|"+I(e)}async getDb(){return this._db||(this._db=await function(e,t){let{blocked:s,upgrade:n,blocking:a,terminated:r}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=indexedDB.open(e,t),o=E(i);return n&&i.addEventListener("upgradeneeded",(e=>{n(E(i.result),e.oldVersion,e.newVersion,E(i.transaction),e)})),s&&i.addEventListener("blocked",(e=>s(e.oldVersion,e.newVersion,e))),o.then((e=>{r&&e.addEventListener("close",(()=>r())),a&&e.addEventListener("versionchange",(e=>a(e.oldVersion,e.newVersion,e)))})).catch((()=>{})),o}("workbox-expiration",1,{upgrade:this._upgradeDbAndDeleteOldDbs.bind(this)})),this._db}}class M{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._isRunning=!1,this._rerunRequested=!1,this._maxEntries=t.maxEntries,this._maxAgeSeconds=t.maxAgeSeconds,this._matchOptions=t.matchOptions,this._cacheName=e,this._timestampModel=new K(e)}async expireEntries(){if(this._isRunning)return void(this._rerunRequested=!0);this._isRunning=!0;const e=this._maxAgeSeconds?Date.now()-1e3*this._maxAgeSeconds:0,t=await this._timestampModel.expireEntries(e,this._maxEntries),s=await self.caches.open(this._cacheName);for(const n of t)await s.delete(n,this._matchOptions);this._isRunning=!1,this._rerunRequested&&(this._rerunRequested=!1,l(this.expireEntries()))}async updateTimestamp(e){await this._timestampModel.setTimestamp(e,Date.now())}async isURLExpired(e){if(this._maxAgeSeconds){const t=await this._timestampModel.getTimestamp(e),s=Date.now()-1e3*this._maxAgeSeconds;return void 0===t||t{let{request:t,state:s}=e;s&&(s.originalRequest=t)},this.cachedResponseWillBeUsed=async e=>{let{event:t,state:s,cachedResponse:n}=e;if("install"===t.type&&s&&s.originalRequest&&s.originalRequest instanceof Request){const e=s.originalRequest.url;n?this.notUpdatedURLs.push(e):this.updatedURLs.push(e)}return n}}}class S{constructor(e){let{precacheController:t}=e;this.cacheKeyWillBeUsed=async e=>{let{request:t,params:s}=e;const n=(null===s||void 0===s?void 0:s.cacheKey)||this._precacheController.getCacheKeyForURL(t.url);return n?new Request(n,{headers:t.headers}):t},this._precacheController=t}}s(833);function O(e){return"string"===typeof e?new Request(e):e}class W{constructor(e,t){this._cacheKeys={},Object.assign(this,t),this.event=t.event,this._strategy=e,this._handlerDeferred=new u,this._extendLifetimePromises=[],this._plugins=[...e.plugins],this._pluginStateMap=new Map;for(const s of this._plugins)this._pluginStateMap.set(s,{});this.event.waitUntil(this._handlerDeferred.promise)}async fetch(e){const{event:s}=this;let n=O(e);if("navigate"===n.mode&&s instanceof FetchEvent&&s.preloadResponse){const e=await s.preloadResponse;if(e)return e}const a=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const e of this.iterateCallbacks("requestWillFetch"))n=await e({request:n.clone(),event:s})}catch(i){if(i instanceof Error)throw new t("plugin-error-request-will-fetch",{thrownErrorMessage:i.message})}const r=n.clone();try{let e;e=await fetch(n,"navigate"===n.mode?void 0:this._strategy.fetchOptions);for(const t of this.iterateCallbacks("fetchDidSucceed"))e=await t({event:s,request:r,response:e});return e}catch(o){throw a&&await this.runCallbacks("fetchDidFail",{error:o,event:s,originalRequest:a.clone(),request:r.clone()}),o}}async fetchAndCachePut(e){const t=await this.fetch(e),s=t.clone();return this.waitUntil(this.cachePut(e,s)),t}async cacheMatch(e){const t=O(e);let s;const{cacheName:n,matchOptions:a}=this._strategy,r=await this.getCacheKey(t,"read"),i=Object.assign(Object.assign({},a),{cacheName:n});s=await caches.match(r,i);for(const o of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await o({cacheName:n,matchOptions:a,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(e,s){const a=O(e);var r;await(r=0,new Promise((e=>setTimeout(e,r))));const i=await this.getCacheKey(a,"write");if(!s)throw new t("cache-put-with-no-response",{url:d(i.url)});const o=await this._ensureResponseSafeToCache(s);if(!o)return!1;const{cacheName:h,matchOptions:l}=this._strategy,u=await self.caches.open(h),f=this.hasCallback("cacheDidUpdate"),p=f?await async function(e,t,s,n){const a=c(t.url,s);if(t.url===a)return e.match(t,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),i=await e.keys(t,r);for(const o of i)if(a===c(o.url,s))return e.match(o,n)}(u,i.clone(),["__WB_REVISION__"],l):null;try{await u.put(i,f?o.clone():o)}catch(g){if(g instanceof Error)throw"QuotaExceededError"===g.name&&await async function(){for(const e of n)await e()}(),g}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:h,oldResponse:p,newResponse:o.clone(),request:i,event:this.event});return!0}async getCacheKey(e,t){const s="".concat(e.url," | ").concat(t);if(!this._cacheKeys[s]){let n=e;for(const e of this.iterateCallbacks("cacheKeyWillBeUsed"))n=O(await e({mode:t,request:n,event:this.event,params:this.params}));this._cacheKeys[s]=n}return this._cacheKeys[s]}hasCallback(e){for(const t of this._strategy.plugins)if(e in t)return!0;return!1}async runCallbacks(e,t){for(const s of this.iterateCallbacks(e))await s(t)}*iterateCallbacks(e){for(const t of this._strategy.plugins)if("function"===typeof t[e]){const s=this._pluginStateMap.get(t),n=n=>{const a=Object.assign(Object.assign({},n),{state:s});return t[e](a)};yield n}}waitUntil(e){return this._extendLifetimePromises.push(e),e}async doneWaiting(){let e;for(;e=this._extendLifetimePromises.shift();)await e}destroy(){this._handlerDeferred.resolve(null)}async _ensureResponseSafeToCache(e){let t=e,s=!1;for(const n of this.iterateCallbacks("cacheWillUpdate"))if(t=await n({request:this.request,response:t,event:this.event})||void 0,s=!0,!t)break;return s||t&&200!==t.status&&(t=void 0),t}}class B{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.cacheName=o(e.cacheName),this.plugins=e.plugins||[],this.fetchOptions=e.fetchOptions,this.matchOptions=e.matchOptions}handle(e){const[t]=this.handleAll(e);return t}handleAll(e){e instanceof FetchEvent&&(e={event:e,request:e.request});const t=e.event,s="string"===typeof e.request?new Request(e.request):e.request,n="params"in e?e.params:void 0,a=new W(this,{event:t,request:s,params:n}),r=this._getResponse(a,s,t);return[r,this._awaitComplete(r,a,s,t)]}async _getResponse(e,s,n){let a;await e.runCallbacks("handlerWillStart",{event:n,request:s});try{if(a=await this._handle(s,e),!a||"error"===a.type)throw new t("no-response",{url:s.url})}catch(r){if(r instanceof Error)for(const t of e.iterateCallbacks("handlerDidError"))if(a=await t({error:r,event:n,request:s}),a)break;if(!a)throw r}for(const t of e.iterateCallbacks("handlerWillRespond"))a=await t({event:n,request:s,response:a});return a}async _awaitComplete(e,t,s,n){let a,r;try{a=await e}catch(r){}try{await t.runCallbacks("handlerDidRespond",{event:n,request:s,response:a}),await t.doneWaiting()}catch(i){i instanceof Error&&(r=i)}if(await t.runCallbacks("handlerDidComplete",{event:n,request:s,response:a,error:r}),t.destroy(),r)throw r}}class j extends B{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e.cacheName=i(e.cacheName),super(e),this._fallbackToNetwork=!1!==e.fallbackToNetwork,this.plugins.push(j.copyRedirectedCacheableResponsesPlugin)}async _handle(e,t){const s=await t.cacheMatch(e);return s||(t.event&&"install"===t.event.type?await this._handleInstall(e,t):await this._handleFetch(e,t))}async _handleFetch(e,s){let n;const a=s.params||{};if(!this._fallbackToNetwork)throw new t("missing-precache-entry",{cacheName:this.cacheName,url:e.url});{0;const t=a.integrity,r=e.integrity,i=!r||r===t;if(n=await s.fetch(new Request(e,{integrity:"no-cors"!==e.mode?r||t:void 0})),t&&i&&"no-cors"!==e.mode){this._useDefaultCacheabilityPluginIfNeeded();await s.cachePut(e,n.clone());0}}return n}async _handleInstall(e,s){this._useDefaultCacheabilityPluginIfNeeded();const n=await s.fetch(e);if(!await s.cachePut(e,n.clone()))throw new t("bad-precaching-response",{url:e.url,status:n.status});return n}_useDefaultCacheabilityPluginIfNeeded(){let e=null,t=0;for(const[s,n]of this.plugins.entries())n!==j.copyRedirectedCacheableResponsesPlugin&&(n===j.defaultPrecacheCacheabilityPlugin&&(e=s),n.cacheWillUpdate&&t++);0===t?this.plugins.push(j.defaultPrecacheCacheabilityPlugin):t>1&&null!==e&&this.plugins.splice(e,1)}}j.defaultPrecacheCacheabilityPlugin={async cacheWillUpdate(e){let{response:t}=e;return!t||t.status>=400?null:t}},j.copyRedirectedCacheableResponsesPlugin={async cacheWillUpdate(e){let{response:t}=e;return t.redirected?await p(t):t}};class F{constructor(){let{cacheName:e,plugins:t=[],fallbackToNetwork:s=!0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map,this._strategy=new j({cacheName:i(e),plugins:[...t,new S({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this._strategy}precache(e){this.addToCacheList(e),this._installAndActiveListenersAdded||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this._installAndActiveListenersAdded=!0)}addToCacheList(e){const s=[];for(const n of e){"string"===typeof n?s.push(n):n&&void 0===n.revision&&s.push(n.url);const{cacheKey:e,url:a}=A(n),r="string"!==typeof n&&n.revision?"reload":"default";if(this._urlsToCacheKeys.has(a)&&this._urlsToCacheKeys.get(a)!==e)throw new t("add-to-cache-list-conflicting-entries",{firstEntry:this._urlsToCacheKeys.get(a),secondEntry:e});if("string"!==typeof n&&n.integrity){if(this._cacheKeysToIntegrities.has(e)&&this._cacheKeysToIntegrities.get(e)!==n.integrity)throw new t("add-to-cache-list-conflicting-integrities",{url:a});this._cacheKeysToIntegrities.set(e,n.integrity)}if(this._urlsToCacheKeys.set(a,e),this._urlsToCacheModes.set(a,r),s.length>0){const e="Workbox is precaching URLs without revision "+"info: ".concat(s.join(", "),"\nThis is generally NOT safe. ")+"Learn more at https://bit.ly/wb-precache";console.warn(e)}}}install(e){return f(e,(async()=>{const t=new P;this.strategy.plugins.push(t);for(const[a,r]of this._urlsToCacheKeys){const t=this._cacheKeysToIntegrities.get(r),s=this._urlsToCacheModes.get(a),n=new Request(a,{integrity:t,cache:s,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:r},request:n,event:e}))}const{updatedURLs:s,notUpdatedURLs:n}=t;return{updatedURLs:s,notUpdatedURLs:n}}))}activate(e){return f(e,(async()=>{const e=await self.caches.open(this.strategy.cacheName),t=await e.keys(),s=new Set(this._urlsToCacheKeys.values()),n=[];for(const a of t)s.has(a.url)||(await e.delete(a),n.push(a.url));return{deletedURLs:n}}))}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){const t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForCacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){const t=e instanceof Request?e.url:e,s=this.getCacheKeyForURL(t);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(e){const s=this.getCacheKeyForURL(e);if(!s)throw new t("non-precached-url",{url:e});return t=>(t.request=new Request(e),t.params=Object.assign({cacheKey:s},t.params),this.strategy.handle(t))}}let H;const V=()=>(H||(H=new F),H);s(185);const G=e=>e&&"object"===typeof e?e:{handle:e};class ${constructor(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"GET";this.handler=G(t),this.match=e,this.method=s}setCatchHandler(e){this.catchHandler=G(e)}}class Q extends ${constructor(e,t,s){super((t=>{let{url:s}=t;const n=e.exec(s.href);if(n&&(s.origin===location.origin||0===n.index))return n.slice(1)}),t,s)}}class J{constructor(){this._routes=new Map,this._defaultHandlerMap=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener("fetch",(e=>{const{request:t}=e,s=this.handleRequest({request:t,event:e});s&&e.respondWith(s)}))}addCacheListener(){self.addEventListener("message",(e=>{if(e.data&&"CACHE_URLS"===e.data.type){const{payload:t}=e.data;0;const s=Promise.all(t.urlsToCache.map((t=>{"string"===typeof t&&(t=[t]);const s=new Request(...t);return this.handleRequest({request:s,event:e})})));e.waitUntil(s),e.ports&&e.ports[0]&&s.then((()=>e.ports[0].postMessage(!0)))}}))}handleRequest(e){let{request:t,event:s}=e;const n=new URL(t.url,location.href);if(!n.protocol.startsWith("http"))return void 0;const a=n.origin===location.origin,{params:r,route:i}=this.findMatchingRoute({event:s,request:t,sameOrigin:a,url:n});let o=i&&i.handler;const c=t.method;if(!o&&this._defaultHandlerMap.has(c)&&(o=this._defaultHandlerMap.get(c)),!o)return void 0;let h;try{h=o.handle({url:n,request:t,event:s,params:r})}catch(u){h=Promise.reject(u)}const l=i&&i.catchHandler;return h instanceof Promise&&(this._catchHandler||l)&&(h=h.catch((async e=>{if(l){0;try{return await l.handle({url:n,request:t,event:s,params:r})}catch(a){a instanceof Error&&(e=a)}}if(this._catchHandler)return this._catchHandler.handle({url:n,request:t,event:s});throw e}))),h}findMatchingRoute(e){let{url:t,sameOrigin:s,request:n,event:a}=e;const r=this._routes.get(n.method)||[];for(const i of r){let e;const r=i.match({url:t,sameOrigin:s,request:n,event:a});if(r)return e=r,(Array.isArray(e)&&0===e.length||r.constructor===Object&&0===Object.keys(r).length||"boolean"===typeof r)&&(e=void 0),{route:i,params:e}}return{}}setDefaultHandler(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"GET";this._defaultHandlerMap.set(t,G(e))}setCatchHandler(e){this._catchHandler=G(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new t("unregister-route-but-not-found-with-method",{method:e.method});const s=this._routes.get(e.method).indexOf(e);if(!(s>-1))throw new t("unregister-route-route-not-registered");this._routes.get(e.method).splice(s,1)}}let z;const X=()=>(z||(z=new J,z.addFetchListener(),z.addCacheListener()),z);function Y(e,s,n){let a;if("string"===typeof e){const t=new URL(e,location.href);0;a=new $((e=>{let{url:s}=e;return s.href===t.href}),s,n)}else if(e instanceof RegExp)a=new Q(e,s,n);else if("function"===typeof e)a=new $(e,s,n);else{if(!(e instanceof $))throw new t("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});a=e}return X().registerRoute(a),a}class Z extends ${constructor(e,t){super((s=>{let{request:n}=s;const a=e.getURLsToCacheKeys();for(const r of function(e){let{ignoreURLParametersMatching:t=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:a}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function*(){const r=new URL(e,location.href);r.hash="",yield r.href;const i=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];for(const s of[...e.searchParams.keys()])t.some((e=>e.test(s)))&&e.searchParams.delete(s);return e}(r,t);if(yield i.href,s&&i.pathname.endsWith("/")){const e=new URL(i.href);e.pathname+=s,yield e.href}if(n){const e=new URL(i.href);e.pathname+=".html",yield e.href}if(a){const e=a({url:r});for(const t of e)yield t.href}}()}(n.url,t)){const t=a.get(r);if(t){return{cacheKey:t,integrity:e.getIntegrityForCacheKey(t)}}}}),e.strategy)}}const ee={cacheWillUpdate:async e=>{let{response:t}=e;return 200===t.status||0===t.status?t:null}};var te;self.addEventListener("activate",(()=>self.clients.claim())),function(e){V().precache(e)}([{'revision':'ccaad833ce0ce8444e0b5e56a59017d7','url':'http://localhost:3000/index.html'},{'revision':null,'url':'http://localhost:3000/static/css/main.634cee6a.css'},{'revision':null,'url':'http://localhost:3000/static/js/496.0908b6ad.chunk.js'},{'revision':null,'url':'http://localhost:3000/static/js/main.3b96aaec.js'},{'revision':'8ad9271cf57f751715b0c207b1c3d3cf','url':'http://localhost:3000/static/media/ansariWordDesktop.63102f795f5cdd4cfa1507c0e1dc29cc.svg'},{'revision':'cfeee23c12973dad09cd743e51fff801','url':'http://localhost:3000/static/media/ansariWordMobile.5cf58a2558b421d9a7efa7bdc0146a76.svg'},{'revision':'05b42d2bd75215267bbc6f8ffd8f914b','url':'http://localhost:3000/static/media/backgroundImage.a6ecb59e7fceee8ba332e72a9a2a7fa1.svg'},{'revision':'ba37a21c0e569339c397194557c97246','url':'http://localhost:3000/static/media/challenge.c51044e733b61899e430f4556dfd6bf7.svg'},{'revision':'1d543b1909cb96925d6ef98acf3dffaa','url':'http://localhost:3000/static/media/chat.619701281b91114d8f1bc63449c03a13.svg'},{'revision':'ae129310808407dff3dbd9a4746675e1','url':'http://localhost:3000/static/media/chatDeleteLine.fc758875b883cdd0d49d26825c3724b1.svg'},{'revision':'30dbf43aeebb4ff6d0d0b4e9ffa386d6','url':'http://localhost:3000/static/media/compositeLogo.316705e3d9f51e155685d95c54b5978c.svg'},{'revision':'cecdb4e28296c8580c4774b75e59e464','url':'http://localhost:3000/static/media/flag.9e5f16974d8d9499372259788a3ffaf2.svg'},{'revision':'955706a618e074e4c63a80b45db7c373','url':'http://localhost:3000/static/media/information.57276f59a016eab0e6ea703416008442.svg'},{'revision':'c22d85475966173f8ed82e63419ab939','url':'http://localhost:3000/static/media/informationGreen.184e83d6d39aa7c53bac1697e460e0e9.svg'},{'revision':'7e1f33d94fab0cf7cbc5b95260b34ed5','url':'http://localhost:3000/static/media/language.d2b30058380c7654f198f42db4e81c50.svg'},{'revision':'8eb4e8045447c887f2aa5dd9dd75c544','url':'http://localhost:3000/static/media/languageGreen.3fa8c8ef5414b2efa242e23ddf1a283a.svg'},{'revision':'d5d8035468a410299f4a8bade755f96d','url':'http://localhost:3000/static/media/loading.d0f5c7e6f03330f1e6c74bdb3be06fa3.svg'},{'revision':'4274febbee55fc4af7a1ce70569efb54','url':'http://localhost:3000/static/media/logo.7b5ec47fe8c8f9f97ba3d333cc377e3c.svg'},{'revision':'e6ca7b94380180c9b565a08bef64d409','url':'http://localhost:3000/static/media/messageLoader.829e7dc0c1aadbd86f67988cb85d2769.svg'},{'revision':'3f307c69824fbd746fdb84bc267643b2','url':'http://localhost:3000/static/media/paperPlaneLeft.1e428e58000e7e2443d099452acbae53.svg'},{'revision':'e7bd34fb2ffe54bf60f34cd5571b7911','url':'http://localhost:3000/static/media/paperPlaneRight.4b340c003efd041aa251d78b317b4923.svg'},{'revision':'e128194d472c654d9184417b55984d7d','url':'http://localhost:3000/static/media/praying.d21207ea569cad47cc61aa8c7cf53aad.svg'},{'revision':'9bb7f45798eaf306279ffa5e5fc9df2e','url':'http://localhost:3000/static/media/user.1f5def49ba3a194081bdb4fb610cef60.svg'},{'revision':'ec5835aff148b0c67ad3397cdddf9d9e','url':'http://localhost:3000/static/media/warningCircle.13bdef0766f4b31b03c20eff816b0439.svg'}]),function(e){const t=V();Y(new Z(t,e))}(te);const se=new RegExp("/[^/?]+\\.[^/]+$");var ne;Y((e=>{let{request:t,url:s}=e;return"navigate"===t.mode&&(!s.pathname.startsWith("/_")&&!s.pathname.match(se))}),(ne="http://localhost:3000/index.html",V().createHandlerBoundToURL(ne))),Y((e=>{let{url:t}=e;return t.origin===self.location.origin&&t.pathname.endsWith(".png")}),new class extends B{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),this.plugins.some((e=>"cacheWillUpdate"in e))||this.plugins.unshift(ee)}async _handle(e,s){const n=s.fetchAndCachePut(e).catch((()=>{}));s.waitUntil(n);let a,r=await s.cacheMatch(e);if(r)0;else{0;try{r=await n}catch(i){i instanceof Error&&(a=i)}}if(!r)throw new t("no-response",{url:e.url,error:a});return r}}({cacheName:"images",plugins:[new class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.cachedResponseWillBeUsed=async e=>{let{event:t,request:s,cacheName:n,cachedResponse:a}=e;if(!a)return null;const r=this._isResponseDateFresh(a),i=this._getCacheExpiration(n);l(i.expireEntries());const o=i.updateTimestamp(s.url);if(t)try{t.waitUntil(o)}catch(c){0}return r?a:null},this.cacheDidUpdate=async e=>{let{cacheName:t,request:s}=e;const n=this._getCacheExpiration(t);await n.updateTimestamp(s.url),await n.expireEntries()},this._config=e,this._maxAgeSeconds=e.maxAgeSeconds,this._cacheExpirations=new Map,e.purgeOnQuotaError&&function(e){n.add(e)}((()=>this.deleteCacheAndMetadata()))}_getCacheExpiration(e){if(e===o())throw new t("expire-custom-caches-only");let s=this._cacheExpirations.get(e);return s||(s=new M(e,this._config),this._cacheExpirations.set(e,s)),s}_isResponseDateFresh(e){if(!this._maxAgeSeconds)return!0;const t=this._getDateHeaderTimestamp(e);if(null===t)return!0;return t>=Date.now()-1e3*this._maxAgeSeconds}_getDateHeaderTimestamp(e){if(!e.headers.has("date"))return null;const t=e.headers.get("date"),s=new Date(t).getTime();return isNaN(s)?null:s}async deleteCacheAndMetadata(){for(const[e,t]of this._cacheExpirations)await self.caches.delete(e),await t.delete();this._cacheExpirations=new Map}}({maxEntries:50})]})),self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()}))})()})(); +//# sourceMappingURL=service-worker.js.map \ No newline at end of file diff --git a/build/service-worker.js.map b/build/service-worker.js.map new file mode 100644 index 0000000..ea4a7d9 --- /dev/null +++ b/build/service-worker.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../node_modules/workbox-core/_version.js","../node_modules/workbox-expiration/_version.js","../node_modules/workbox-precaching/_version.js","../node_modules/workbox-routing/_version.js","../node_modules/workbox-strategies/_version.js","../webpack/bootstrap","../node_modules/workbox-core/_private/logger.js","../node_modules/workbox-core/models/messages/messageGenerator.js","../node_modules/workbox-core/_private/WorkboxError.js","../node_modules/workbox-core/_private/assert.js","../node_modules/workbox-core/models/quotaErrorCallbacks.js","../node_modules/workbox-core/_private/cacheNames.js","../node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","../node_modules/workbox-core/_private/canConstructReadableStream.js","../node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","../node_modules/workbox-core/_private/dontWaitFor.js","../node_modules/workbox-core/_private/Deferred.js","../node_modules/workbox-core/_private/getFriendlyURL.js","../node_modules/workbox-core/_private/waitUntil.js","../node_modules/workbox-core/copyResponse.js","../node_modules/idb/build/wrap-idb-value.js","../node_modules/idb/build/index.js","../node_modules/workbox-expiration/models/CacheTimestampsModel.js","../node_modules/workbox-expiration/CacheExpiration.js","../node_modules/workbox-precaching/utils/createCacheKey.js","../node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","../node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","../node_modules/workbox-strategies/StrategyHandler.js","../node_modules/workbox-core/_private/timeout.js","../node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","../node_modules/workbox-strategies/Strategy.js","../node_modules/workbox-precaching/PrecacheStrategy.js","../node_modules/workbox-precaching/PrecacheController.js","../node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","../node_modules/workbox-routing/utils/constants.js","../node_modules/workbox-routing/utils/normalizeHandler.js","../node_modules/workbox-routing/Route.js","../node_modules/workbox-routing/RegExpRoute.js","../node_modules/workbox-routing/Router.js","../node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","../node_modules/workbox-routing/registerRoute.js","../node_modules/workbox-precaching/PrecacheRoute.js","../node_modules/workbox-precaching/utils/generateURLVariations.js","../node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","../node_modules/workbox-strategies/plugins/cacheOkAndOpaquePlugin.js","../node_modules/workbox-precaching/precacheAndRoute.js","../node_modules/workbox-core/clientsClaim.js","../node_modules/workbox-precaching/precache.js","service-worker.ts","../node_modules/workbox-precaching/addRoute.js","../node_modules/workbox-precaching/createHandlerBoundToURL.js","../node_modules/workbox-strategies/StaleWhileRevalidate.js","../node_modules/workbox-expiration/ExpirationPlugin.js","../node_modules/workbox-core/registerQuotaErrorCallback.js"],"names":["self","_","e","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","messageGenerator","code","msg","_len","arguments","length","args","Array","_key","concat","JSON","stringify","WorkboxError","Error","constructor","errorCode","details","super","this","name","quotaErrorCallbacks","Set","_cacheNameDetails","googleAnalytics","precache","prefix","runtime","suffix","registration","scope","_createCacheName","cacheName","filter","value","join","cacheNames","userCacheName","stripParams","fullURL","ignoreParams","strippedURL","URL","param","searchParams","delete","href","supportStatus","dontWaitFor","promise","then","Deferred","Promise","resolve","reject","getFriendlyURL","url","String","location","replace","RegExp","origin","waitUntil","event","asyncFn","returnPromise","async","copyResponse","response","modifier","clonedResponse","clone","responseInit","headers","Headers","status","statusText","modifiedResponseInit","body","testResponse","Response","error","canConstructResponseFromBodyStream","blob","instanceOfAny","object","constructors","some","c","idbProxyableTypes","cursorAdvanceMethods","cursorRequestMap","WeakMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","idbProxyTraps","get","target","prop","receiver","IDBTransaction","objectStoreNames","objectStore","wrap","set","has","wrapFunction","func","IDBDatabase","prototype","transaction","IDBCursor","advance","continue","continuePrimaryKey","includes","_len2","_key2","apply","unwrap","_len3","_key3","storeNames","tx","call","sort","transformCachableValue","done","unlisten","removeEventListener","complete","DOMException","addEventListener","cacheDonePromiseForTransaction","IDBObjectStore","IDBIndex","Proxy","IDBRequest","request","success","result","catch","promisifyRequest","newValue","readMethods","writeMethods","cachedMethods","Map","getMethod","targetFuncName","useIndex","isWrite","method","storeName","store","index","shift","all","oldTraps","callback","CACHE_OBJECT_STORE","normalizeURL","unNormalizedUrl","hash","CacheTimestampsModel","_db","_cacheName","_upgradeDb","db","objStore","createObjectStore","keyPath","createIndex","unique","_upgradeDbAndDeleteOldDbs","blocked","indexedDB","deleteDatabase","oldVersion","deleteDB","setTimestamp","timestamp","entry","id","_getId","getDb","durability","put","getTimestamp","expireEntries","minTimestamp","maxCount","cursor","openCursor","entriesToDelete","entriesNotDeletedCount","push","urlsDeleted","version","upgrade","blocking","terminated","open","openPromise","newVersion","openDB","bind","CacheExpiration","config","_isRunning","_rerunRequested","_maxEntries","maxEntries","_maxAgeSeconds","maxAgeSeconds","_matchOptions","matchOptions","_timestampModel","Date","now","urlsExpired","cache","caches","updateTimestamp","isURLExpired","expireOlderThan","Infinity","createCacheKey","urlObject","cacheKey","revision","cacheKeyURL","originalURL","PrecacheInstallReportPlugin","updatedURLs","notUpdatedURLs","handlerWillStart","state","_ref","originalRequest","cachedResponseWillBeUsed","cachedResponse","_ref2","type","Request","PrecacheCacheKeyPlugin","precacheController","cacheKeyWillBeUsed","params","_precacheController","getCacheKeyForURL","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","Object","assign","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","plugin","fetch","mode","FetchEvent","preloadResponse","possiblePreloadResponse","hasCallback","cb","iterateCallbacks","err","thrownErrorMessage","message","pluginFilteredRequest","fetchResponse","fetchOptions","runCallbacks","fetchAndCachePut","responseClone","cachePut","cacheMatch","key","effectiveRequest","getCacheKey","multiMatchOptions","match","ms","setTimeout","responseToCache","_ensureResponseSafeToCache","hasCacheUpdateCallback","oldResponse","strippedRequestURL","keysOptions","ignoreSearch","cacheKeys","keys","cacheMatchIgnoreParams","executeQuotaErrorCallbacks","newResponse","statefulCallback","statefulParam","doneWaiting","destroy","pluginsUsed","Strategy","handle","responseDone","handleAll","handler","_getResponse","_awaitComplete","_handle","waitUntilError","PrecacheStrategy","_fallbackToNetwork","fallbackToNetwork","copyRedirectedCacheableResponsesPlugin","_handleInstall","_handleFetch","process","integrityInManifest","integrity","integrityInRequest","noIntegrityConflict","_useDefaultCacheabilityPluginIfNeeded","defaultPluginIndex","cacheWillUpdatePluginCount","entries","defaultPrecacheCacheabilityPlugin","cacheWillUpdate","splice","redirected","PrecacheController","_urlsToCacheKeys","_urlsToCacheModes","_cacheKeysToIntegrities","install","activate","addToCacheList","_installAndActiveListenersAdded","urlsToWarnAbout","cacheMode","firstEntry","secondEntry","warningMessage","console","warn","installReportPlugin","credentials","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","getURLsToCacheKeys","getCachedURLs","getIntegrityForCacheKey","matchPrecache","createHandlerBoundToURL","getOrCreatePrecacheController","normalizeHandler","Route","setCatchHandler","catchHandler","RegExpRoute","regExp","exec","slice","Router","_routes","_defaultHandlerMap","routes","addFetchListener","responsePromise","handleRequest","respondWith","addCacheListener","data","payload","requestPromises","urlsToCache","map","ports","postMessage","protocol","startsWith","sameOrigin","route","findMatchingRoute","_catchHandler","catchErr","matchResult","isArray","setDefaultHandler","registerRoute","unregisterRoute","routeIndex","indexOf","defaultRouter","getOrCreateDefaultRouter","capture","captureUrl","moduleName","funcName","paramName","PrecacheRoute","urlsToCacheKeys","possibleURL","ignoreURLParametersMatching","directoryIndex","cleanURLs","urlManipulation","urlWithoutIgnoredParams","test","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","generateURLVariations","cacheOkAndOpaquePlugin","clients","claim","__WB_MANIFEST","addRoute","fileExtensionRegexp","p","unshift","fetchAndCachePromise","isFresh","_isResponseDateFresh","cacheExpiration","_getCacheExpiration","updateTimestampDone","cacheDidUpdate","_config","_cacheExpirations","purgeOnQuotaError","add","registerQuotaErrorCallback","deleteCacheAndMetadata","dateHeaderTimestamp","_getDateHeaderTimestamp","dateHeader","headerTime","getTime","isNaN","skipWaiting"],"mappings":"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","file":"service-worker.js","sourceRoot":"","sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:7.0.0'] && _();\n}\ncatch (e) { }\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:expiration:7.0.0'] && _();\n}\ncatch (e) { }\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:7.0.0'] && _();\n}\ncatch (e) { }\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:7.0.0'] && _();\n}\ncatch (e) { }\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:7.0.0'] && _();\n}\ncatch (e) { }\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst logger = (process.env.NODE_ENV === 'production'\n ? null\n : (() => {\n // Don't overwrite this value if it's already set.\n // See https://github.com/GoogleChrome/workbox/pull/2284#issuecomment-560470923\n if (!('__WB_DISABLE_DEV_LOGS' in globalThis)) {\n self.__WB_DISABLE_DEV_LOGS = false;\n }\n let inGroup = false;\n const methodToColorMap = {\n debug: `#7f8c8d`,\n log: `#2ecc71`,\n warn: `#f39c12`,\n error: `#c0392b`,\n groupCollapsed: `#3498db`,\n groupEnd: null, // No colored prefix on groupEnd\n };\n const print = function (method, args) {\n if (self.__WB_DISABLE_DEV_LOGS) {\n return;\n }\n if (method === 'groupCollapsed') {\n // Safari doesn't print all console.groupCollapsed() arguments:\n // https://bugs.webkit.org/show_bug.cgi?id=182754\n if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n console[method](...args);\n return;\n }\n }\n const styles = [\n `background: ${methodToColorMap[method]}`,\n `border-radius: 0.5em`,\n `color: white`,\n `font-weight: bold`,\n `padding: 2px 0.5em`,\n ];\n // When in a group, the workbox prefix is not displayed.\n const logPrefix = inGroup ? [] : ['%cworkbox', styles.join(';')];\n console[method](...logPrefix, ...args);\n if (method === 'groupCollapsed') {\n inGroup = true;\n }\n if (method === 'groupEnd') {\n inGroup = false;\n }\n };\n // eslint-disable-next-line @typescript-eslint/ban-types\n const api = {};\n const loggerMethods = Object.keys(methodToColorMap);\n for (const key of loggerMethods) {\n const method = key;\n api[method] = (...args) => {\n print(method, args);\n };\n }\n return api;\n })());\nexport { logger };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { messages } from './messages.js';\nimport '../../_version.js';\nconst fallback = (code, ...args) => {\n let msg = code;\n if (args.length > 0) {\n msg += ` :: ${JSON.stringify(args)}`;\n }\n return msg;\n};\nconst generatorFunction = (code, details = {}) => {\n const message = messages[code];\n if (!message) {\n throw new Error(`Unable to find message for code '${code}'.`);\n }\n return message(details);\n};\nexport const messageGenerator = process.env.NODE_ENV === 'production' ? fallback : generatorFunction;\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { messageGenerator } from '../models/messages/messageGenerator.js';\nimport '../_version.js';\n/**\n * Workbox errors should be thrown with this class.\n * This allows use to ensure the type easily in tests,\n * helps developers identify errors from workbox\n * easily and allows use to optimise error\n * messages correctly.\n *\n * @private\n */\nclass WorkboxError extends Error {\n /**\n *\n * @param {string} errorCode The error code that\n * identifies this particular error.\n * @param {Object=} details Any relevant arguments\n * that will help developers identify issues should\n * be added as a key on the context object.\n */\n constructor(errorCode, details) {\n const message = messageGenerator(errorCode, details);\n super(message);\n this.name = errorCode;\n this.details = details;\n }\n}\nexport { WorkboxError };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { WorkboxError } from '../_private/WorkboxError.js';\nimport '../_version.js';\n/*\n * This method throws if the supplied value is not an array.\n * The destructed values are required to produce a meaningful error for users.\n * The destructed and restructured object is so it's clear what is\n * needed.\n */\nconst isArray = (value, details) => {\n if (!Array.isArray(value)) {\n throw new WorkboxError('not-an-array', details);\n }\n};\nconst hasMethod = (object, expectedMethod, details) => {\n const type = typeof object[expectedMethod];\n if (type !== 'function') {\n details['expectedMethod'] = expectedMethod;\n throw new WorkboxError('missing-a-method', details);\n }\n};\nconst isType = (object, expectedType, details) => {\n if (typeof object !== expectedType) {\n details['expectedType'] = expectedType;\n throw new WorkboxError('incorrect-type', details);\n }\n};\nconst isInstance = (object, \n// Need the general type to do the check later.\n// eslint-disable-next-line @typescript-eslint/ban-types\nexpectedClass, details) => {\n if (!(object instanceof expectedClass)) {\n details['expectedClassName'] = expectedClass.name;\n throw new WorkboxError('incorrect-class', details);\n }\n};\nconst isOneOf = (value, validValues, details) => {\n if (!validValues.includes(value)) {\n details['validValueDescription'] = `Valid values are ${JSON.stringify(validValues)}.`;\n throw new WorkboxError('invalid-value', details);\n }\n};\nconst isArrayOfClass = (value, \n// Need general type to do check later.\nexpectedClass, // eslint-disable-line\ndetails) => {\n const error = new WorkboxError('not-array-of-class', details);\n if (!Array.isArray(value)) {\n throw error;\n }\n for (const item of value) {\n if (!(item instanceof expectedClass)) {\n throw error;\n }\n }\n};\nconst finalAssertExports = process.env.NODE_ENV === 'production'\n ? null\n : {\n hasMethod,\n isArray,\n isInstance,\n isOneOf,\n isType,\n isArrayOfClass,\n };\nexport { finalAssertExports as assert };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n// Callbacks to be executed whenever there's a quota error.\n// Can't change Function type right now.\n// eslint-disable-next-line @typescript-eslint/ban-types\nconst quotaErrorCallbacks = new Set();\nexport { quotaErrorCallbacks };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst _cacheNameDetails = {\n googleAnalytics: 'googleAnalytics',\n precache: 'precache-v2',\n prefix: 'workbox',\n runtime: 'runtime',\n suffix: typeof registration !== 'undefined' ? registration.scope : '',\n};\nconst _createCacheName = (cacheName) => {\n return [_cacheNameDetails.prefix, cacheName, _cacheNameDetails.suffix]\n .filter((value) => value && value.length > 0)\n .join('-');\n};\nconst eachCacheNameDetail = (fn) => {\n for (const key of Object.keys(_cacheNameDetails)) {\n fn(key);\n }\n};\nexport const cacheNames = {\n updateDetails: (details) => {\n eachCacheNameDetail((key) => {\n if (typeof details[key] === 'string') {\n _cacheNameDetails[key] = details[key];\n }\n });\n },\n getGoogleAnalyticsName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.googleAnalytics);\n },\n getPrecacheName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.precache);\n },\n getPrefix: () => {\n return _cacheNameDetails.prefix;\n },\n getRuntimeName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.runtime);\n },\n getSuffix: () => {\n return _cacheNameDetails.suffix;\n },\n};\n","/*\n Copyright 2020 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nfunction stripParams(fullURL, ignoreParams) {\n const strippedURL = new URL(fullURL);\n for (const param of ignoreParams) {\n strippedURL.searchParams.delete(param);\n }\n return strippedURL.href;\n}\n/**\n * Matches an item in the cache, ignoring specific URL params. This is similar\n * to the `ignoreSearch` option, but it allows you to ignore just specific\n * params (while continuing to match on the others).\n *\n * @private\n * @param {Cache} cache\n * @param {Request} request\n * @param {Object} matchOptions\n * @param {Array} ignoreParams\n * @return {Promise}\n */\nasync function cacheMatchIgnoreParams(cache, request, ignoreParams, matchOptions) {\n const strippedRequestURL = stripParams(request.url, ignoreParams);\n // If the request doesn't include any ignored params, match as normal.\n if (request.url === strippedRequestURL) {\n return cache.match(request, matchOptions);\n }\n // Otherwise, match by comparing keys\n const keysOptions = Object.assign(Object.assign({}, matchOptions), { ignoreSearch: true });\n const cacheKeys = await cache.keys(request, keysOptions);\n for (const cacheKey of cacheKeys) {\n const strippedCacheKeyURL = stripParams(cacheKey.url, ignoreParams);\n if (strippedRequestURL === strippedCacheKeyURL) {\n return cache.match(cacheKey, matchOptions);\n }\n }\n return;\n}\nexport { cacheMatchIgnoreParams };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nlet supportStatus;\n/**\n * A utility function that determines whether the current browser supports\n * constructing a [`ReadableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/ReadableStream)\n * object.\n *\n * @return {boolean} `true`, if the current browser can successfully\n * construct a `ReadableStream`, `false` otherwise.\n *\n * @private\n */\nfunction canConstructReadableStream() {\n if (supportStatus === undefined) {\n // See https://github.com/GoogleChrome/workbox/issues/1473\n try {\n new ReadableStream({ start() { } });\n supportStatus = true;\n }\n catch (error) {\n supportStatus = false;\n }\n }\n return supportStatus;\n}\nexport { canConstructReadableStream };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nlet supportStatus;\n/**\n * A utility function that determines whether the current browser supports\n * constructing a new `Response` from a `response.body` stream.\n *\n * @return {boolean} `true`, if the current browser can successfully\n * construct a `Response` from a `response.body` stream, `false` otherwise.\n *\n * @private\n */\nfunction canConstructResponseFromBodyStream() {\n if (supportStatus === undefined) {\n const testResponse = new Response('');\n if ('body' in testResponse) {\n try {\n new Response(testResponse.body);\n supportStatus = true;\n }\n catch (error) {\n supportStatus = false;\n }\n }\n supportStatus = false;\n }\n return supportStatus;\n}\nexport { canConstructResponseFromBodyStream };\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A helper function that prevents a promise from being flagged as unused.\n *\n * @private\n **/\nexport function dontWaitFor(promise) {\n // Effective no-op.\n void promise.then(() => { });\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * The Deferred class composes Promises in a way that allows for them to be\n * resolved or rejected from outside the constructor. In most cases promises\n * should be used directly, but Deferreds can be necessary when the logic to\n * resolve a promise must be separate.\n *\n * @private\n */\nclass Deferred {\n /**\n * Creates a promise and exposes its resolve and reject functions as methods.\n */\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\nexport { Deferred };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst getFriendlyURL = (url) => {\n const urlObj = new URL(String(url), location.href);\n // See https://github.com/GoogleChrome/workbox/issues/2323\n // We want to include everything, except for the origin if it's same-origin.\n return urlObj.href.replace(new RegExp(`^${location.origin}`), '');\n};\nexport { getFriendlyURL };\n","/*\n Copyright 2020 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A utility method that makes it easier to use `event.waitUntil` with\n * async functions and return the result.\n *\n * @param {ExtendableEvent} event\n * @param {Function} asyncFn\n * @return {Function}\n * @private\n */\nfunction waitUntil(event, asyncFn) {\n const returnPromise = asyncFn();\n event.waitUntil(returnPromise);\n return returnPromise;\n}\nexport { waitUntil };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { canConstructResponseFromBodyStream } from './_private/canConstructResponseFromBodyStream.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Allows developers to copy a response and modify its `headers`, `status`,\n * or `statusText` values (the values settable via a\n * [`ResponseInit`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Response/Response#Syntax}\n * object in the constructor).\n * To modify these values, pass a function as the second argument. That\n * function will be invoked with a single object with the response properties\n * `{headers, status, statusText}`. The return value of this function will\n * be used as the `ResponseInit` for the new `Response`. To change the values\n * either modify the passed parameter(s) and return it, or return a totally\n * new object.\n *\n * This method is intentionally limited to same-origin responses, regardless of\n * whether CORS was used or not.\n *\n * @param {Response} response\n * @param {Function} modifier\n * @memberof workbox-core\n */\nasync function copyResponse(response, modifier) {\n let origin = null;\n // If response.url isn't set, assume it's cross-origin and keep origin null.\n if (response.url) {\n const responseURL = new URL(response.url);\n origin = responseURL.origin;\n }\n if (origin !== self.location.origin) {\n throw new WorkboxError('cross-origin-copy-response', { origin });\n }\n const clonedResponse = response.clone();\n // Create a fresh `ResponseInit` object by cloning the headers.\n const responseInit = {\n headers: new Headers(clonedResponse.headers),\n status: clonedResponse.status,\n statusText: clonedResponse.statusText,\n };\n // Apply any user modifications.\n const modifiedResponseInit = modifier ? modifier(responseInit) : responseInit;\n // Create the new response from the body stream and `ResponseInit`\n // modifications. Note: not all browsers support the Response.body stream,\n // so fall back to reading the entire body into memory as a blob.\n const body = canConstructResponseFromBodyStream()\n ? clonedResponse.body\n : await clonedResponse.blob();\n return new Response(body, modifiedResponseInit);\n}\nexport { copyResponse };\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);\n });\n }\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event.newVersion, event));\n }\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking) {\n db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event));\n }\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event));\n }\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { openDB, deleteDB } from 'idb';\nimport '../_version.js';\nconst DB_NAME = 'workbox-expiration';\nconst CACHE_OBJECT_STORE = 'cache-entries';\nconst normalizeURL = (unNormalizedUrl) => {\n const url = new URL(unNormalizedUrl, location.href);\n url.hash = '';\n return url.href;\n};\n/**\n * Returns the timestamp model.\n *\n * @private\n */\nclass CacheTimestampsModel {\n /**\n *\n * @param {string} cacheName\n *\n * @private\n */\n constructor(cacheName) {\n this._db = null;\n this._cacheName = cacheName;\n }\n /**\n * Performs an upgrade of indexedDB.\n *\n * @param {IDBPDatabase} db\n *\n * @private\n */\n _upgradeDb(db) {\n // TODO(philipwalton): EdgeHTML doesn't support arrays as a keyPath, so we\n // have to use the `id` keyPath here and create our own values (a\n // concatenation of `url + cacheName`) instead of simply using\n // `keyPath: ['url', 'cacheName']`, which is supported in other browsers.\n const objStore = db.createObjectStore(CACHE_OBJECT_STORE, { keyPath: 'id' });\n // TODO(philipwalton): once we don't have to support EdgeHTML, we can\n // create a single index with the keyPath `['cacheName', 'timestamp']`\n // instead of doing both these indexes.\n objStore.createIndex('cacheName', 'cacheName', { unique: false });\n objStore.createIndex('timestamp', 'timestamp', { unique: false });\n }\n /**\n * Performs an upgrade of indexedDB and deletes deprecated DBs.\n *\n * @param {IDBPDatabase} db\n *\n * @private\n */\n _upgradeDbAndDeleteOldDbs(db) {\n this._upgradeDb(db);\n if (this._cacheName) {\n void deleteDB(this._cacheName);\n }\n }\n /**\n * @param {string} url\n * @param {number} timestamp\n *\n * @private\n */\n async setTimestamp(url, timestamp) {\n url = normalizeURL(url);\n const entry = {\n url,\n timestamp,\n cacheName: this._cacheName,\n // Creating an ID from the URL and cache name won't be necessary once\n // Edge switches to Chromium and all browsers we support work with\n // array keyPaths.\n id: this._getId(url),\n };\n const db = await this.getDb();\n const tx = db.transaction(CACHE_OBJECT_STORE, 'readwrite', {\n durability: 'relaxed',\n });\n await tx.store.put(entry);\n await tx.done;\n }\n /**\n * Returns the timestamp stored for a given URL.\n *\n * @param {string} url\n * @return {number | undefined}\n *\n * @private\n */\n async getTimestamp(url) {\n const db = await this.getDb();\n const entry = await db.get(CACHE_OBJECT_STORE, this._getId(url));\n return entry === null || entry === void 0 ? void 0 : entry.timestamp;\n }\n /**\n * Iterates through all the entries in the object store (from newest to\n * oldest) and removes entries once either `maxCount` is reached or the\n * entry's timestamp is less than `minTimestamp`.\n *\n * @param {number} minTimestamp\n * @param {number} maxCount\n * @return {Array}\n *\n * @private\n */\n async expireEntries(minTimestamp, maxCount) {\n const db = await this.getDb();\n let cursor = await db\n .transaction(CACHE_OBJECT_STORE)\n .store.index('timestamp')\n .openCursor(null, 'prev');\n const entriesToDelete = [];\n let entriesNotDeletedCount = 0;\n while (cursor) {\n const result = cursor.value;\n // TODO(philipwalton): once we can use a multi-key index, we\n // won't have to check `cacheName` here.\n if (result.cacheName === this._cacheName) {\n // Delete an entry if it's older than the max age or\n // if we already have the max number allowed.\n if ((minTimestamp && result.timestamp < minTimestamp) ||\n (maxCount && entriesNotDeletedCount >= maxCount)) {\n // TODO(philipwalton): we should be able to delete the\n // entry right here, but doing so causes an iteration\n // bug in Safari stable (fixed in TP). Instead we can\n // store the keys of the entries to delete, and then\n // delete the separate transactions.\n // https://github.com/GoogleChrome/workbox/issues/1978\n // cursor.delete();\n // We only need to return the URL, not the whole entry.\n entriesToDelete.push(cursor.value);\n }\n else {\n entriesNotDeletedCount++;\n }\n }\n cursor = await cursor.continue();\n }\n // TODO(philipwalton): once the Safari bug in the following issue is fixed,\n // we should be able to remove this loop and do the entry deletion in the\n // cursor loop above:\n // https://github.com/GoogleChrome/workbox/issues/1978\n const urlsDeleted = [];\n for (const entry of entriesToDelete) {\n await db.delete(CACHE_OBJECT_STORE, entry.id);\n urlsDeleted.push(entry.url);\n }\n return urlsDeleted;\n }\n /**\n * Takes a URL and returns an ID that will be unique in the object store.\n *\n * @param {string} url\n * @return {string}\n *\n * @private\n */\n _getId(url) {\n // Creating an ID from the URL and cache name won't be necessary once\n // Edge switches to Chromium and all browsers we support work with\n // array keyPaths.\n return this._cacheName + '|' + normalizeURL(url);\n }\n /**\n * Returns an open connection to the database.\n *\n * @private\n */\n async getDb() {\n if (!this._db) {\n this._db = await openDB(DB_NAME, 1, {\n upgrade: this._upgradeDbAndDeleteOldDbs.bind(this),\n });\n }\n return this._db;\n }\n}\nexport { CacheTimestampsModel };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { dontWaitFor } from 'workbox-core/_private/dontWaitFor.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { CacheTimestampsModel } from './models/CacheTimestampsModel.js';\nimport './_version.js';\n/**\n * The `CacheExpiration` class allows you define an expiration and / or\n * limit on the number of responses stored in a\n * [`Cache`](https://developer.mozilla.org/en-US/docs/Web/API/Cache).\n *\n * @memberof workbox-expiration\n */\nclass CacheExpiration {\n /**\n * To construct a new CacheExpiration instance you must provide at least\n * one of the `config` properties.\n *\n * @param {string} cacheName Name of the cache to apply restrictions to.\n * @param {Object} config\n * @param {number} [config.maxEntries] The maximum number of entries to cache.\n * Entries used the least will be removed as the maximum is reached.\n * @param {number} [config.maxAgeSeconds] The maximum age of an entry before\n * it's treated as stale and removed.\n * @param {Object} [config.matchOptions] The [`CacheQueryOptions`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/delete#Parameters)\n * that will be used when calling `delete()` on the cache.\n */\n constructor(cacheName, config = {}) {\n this._isRunning = false;\n this._rerunRequested = false;\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(cacheName, 'string', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n paramName: 'cacheName',\n });\n if (!(config.maxEntries || config.maxAgeSeconds)) {\n throw new WorkboxError('max-entries-or-age-required', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n });\n }\n if (config.maxEntries) {\n assert.isType(config.maxEntries, 'number', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n paramName: 'config.maxEntries',\n });\n }\n if (config.maxAgeSeconds) {\n assert.isType(config.maxAgeSeconds, 'number', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n paramName: 'config.maxAgeSeconds',\n });\n }\n }\n this._maxEntries = config.maxEntries;\n this._maxAgeSeconds = config.maxAgeSeconds;\n this._matchOptions = config.matchOptions;\n this._cacheName = cacheName;\n this._timestampModel = new CacheTimestampsModel(cacheName);\n }\n /**\n * Expires entries for the given cache and given criteria.\n */\n async expireEntries() {\n if (this._isRunning) {\n this._rerunRequested = true;\n return;\n }\n this._isRunning = true;\n const minTimestamp = this._maxAgeSeconds\n ? Date.now() - this._maxAgeSeconds * 1000\n : 0;\n const urlsExpired = await this._timestampModel.expireEntries(minTimestamp, this._maxEntries);\n // Delete URLs from the cache\n const cache = await self.caches.open(this._cacheName);\n for (const url of urlsExpired) {\n await cache.delete(url, this._matchOptions);\n }\n if (process.env.NODE_ENV !== 'production') {\n if (urlsExpired.length > 0) {\n logger.groupCollapsed(`Expired ${urlsExpired.length} ` +\n `${urlsExpired.length === 1 ? 'entry' : 'entries'} and removed ` +\n `${urlsExpired.length === 1 ? 'it' : 'them'} from the ` +\n `'${this._cacheName}' cache.`);\n logger.log(`Expired the following ${urlsExpired.length === 1 ? 'URL' : 'URLs'}:`);\n urlsExpired.forEach((url) => logger.log(` ${url}`));\n logger.groupEnd();\n }\n else {\n logger.debug(`Cache expiration ran and found no entries to remove.`);\n }\n }\n this._isRunning = false;\n if (this._rerunRequested) {\n this._rerunRequested = false;\n dontWaitFor(this.expireEntries());\n }\n }\n /**\n * Update the timestamp for the given URL. This ensures the when\n * removing entries based on maximum entries, most recently used\n * is accurate or when expiring, the timestamp is up-to-date.\n *\n * @param {string} url\n */\n async updateTimestamp(url) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(url, 'string', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'updateTimestamp',\n paramName: 'url',\n });\n }\n await this._timestampModel.setTimestamp(url, Date.now());\n }\n /**\n * Can be used to check if a URL has expired or not before it's used.\n *\n * This requires a look up from IndexedDB, so can be slow.\n *\n * Note: This method will not remove the cached entry, call\n * `expireEntries()` to remove indexedDB and Cache entries.\n *\n * @param {string} url\n * @return {boolean}\n */\n async isURLExpired(url) {\n if (!this._maxAgeSeconds) {\n if (process.env.NODE_ENV !== 'production') {\n throw new WorkboxError(`expired-test-without-max-age`, {\n methodName: 'isURLExpired',\n paramName: 'maxAgeSeconds',\n });\n }\n return false;\n }\n else {\n const timestamp = await this._timestampModel.getTimestamp(url);\n const expireOlderThan = Date.now() - this._maxAgeSeconds * 1000;\n return timestamp !== undefined ? timestamp < expireOlderThan : true;\n }\n }\n /**\n * Removes the IndexedDB object store used to keep track of cache expiration\n * metadata.\n */\n async delete() {\n // Make sure we don't attempt another rerun if we're called in the middle of\n // a cache expiration.\n this._rerunRequested = false;\n await this._timestampModel.expireEntries(Infinity); // Expires all.\n }\n}\nexport { CacheExpiration };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport '../_version.js';\n// Name of the search parameter used to store revision info.\nconst REVISION_SEARCH_PARAM = '__WB_REVISION__';\n/**\n * Converts a manifest entry into a versioned URL suitable for precaching.\n *\n * @param {Object|string} entry\n * @return {string} A URL with versioning info.\n *\n * @private\n * @memberof workbox-precaching\n */\nexport function createCacheKey(entry) {\n if (!entry) {\n throw new WorkboxError('add-to-cache-list-unexpected-type', { entry });\n }\n // If a precache manifest entry is a string, it's assumed to be a versioned\n // URL, like '/app.abcd1234.js'. Return as-is.\n if (typeof entry === 'string') {\n const urlObject = new URL(entry, location.href);\n return {\n cacheKey: urlObject.href,\n url: urlObject.href,\n };\n }\n const { revision, url } = entry;\n if (!url) {\n throw new WorkboxError('add-to-cache-list-unexpected-type', { entry });\n }\n // If there's just a URL and no revision, then it's also assumed to be a\n // versioned URL.\n if (!revision) {\n const urlObject = new URL(url, location.href);\n return {\n cacheKey: urlObject.href,\n url: urlObject.href,\n };\n }\n // Otherwise, construct a properly versioned URL using the custom Workbox\n // search parameter along with the revision info.\n const cacheKeyURL = new URL(url, location.href);\n const originalURL = new URL(url, location.href);\n cacheKeyURL.searchParams.set(REVISION_SEARCH_PARAM, revision);\n return {\n cacheKey: cacheKeyURL.href,\n url: originalURL.href,\n };\n}\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A plugin, designed to be used with PrecacheController, to determine the\n * of assets that were updated (or not updated) during the install event.\n *\n * @private\n */\nclass PrecacheInstallReportPlugin {\n constructor() {\n this.updatedURLs = [];\n this.notUpdatedURLs = [];\n this.handlerWillStart = async ({ request, state, }) => {\n // TODO: `state` should never be undefined...\n if (state) {\n state.originalRequest = request;\n }\n };\n this.cachedResponseWillBeUsed = async ({ event, state, cachedResponse, }) => {\n if (event.type === 'install') {\n if (state &&\n state.originalRequest &&\n state.originalRequest instanceof Request) {\n // TODO: `state` should never be undefined...\n const url = state.originalRequest.url;\n if (cachedResponse) {\n this.notUpdatedURLs.push(url);\n }\n else {\n this.updatedURLs.push(url);\n }\n }\n }\n return cachedResponse;\n };\n }\n}\nexport { PrecacheInstallReportPlugin };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A plugin, designed to be used with PrecacheController, to translate URLs into\n * the corresponding cache key, based on the current revision info.\n *\n * @private\n */\nclass PrecacheCacheKeyPlugin {\n constructor({ precacheController }) {\n this.cacheKeyWillBeUsed = async ({ request, params, }) => {\n // Params is type any, can't change right now.\n /* eslint-disable */\n const cacheKey = (params === null || params === void 0 ? void 0 : params.cacheKey) ||\n this._precacheController.getCacheKeyForURL(request.url);\n /* eslint-enable */\n return cacheKey\n ? new Request(cacheKey, { headers: request.headers })\n : request;\n };\n this._precacheController = precacheController;\n }\n}\nexport { PrecacheCacheKeyPlugin };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheMatchIgnoreParams } from 'workbox-core/_private/cacheMatchIgnoreParams.js';\nimport { Deferred } from 'workbox-core/_private/Deferred.js';\nimport { executeQuotaErrorCallbacks } from 'workbox-core/_private/executeQuotaErrorCallbacks.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { timeout } from 'workbox-core/_private/timeout.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport './_version.js';\nfunction toRequest(input) {\n return typeof input === 'string' ? new Request(input) : input;\n}\n/**\n * A class created every time a Strategy instance instance calls\n * {@link workbox-strategies.Strategy~handle} or\n * {@link workbox-strategies.Strategy~handleAll} that wraps all fetch and\n * cache actions around plugin callbacks and keeps track of when the strategy\n * is \"done\" (i.e. all added `event.waitUntil()` promises have resolved).\n *\n * @memberof workbox-strategies\n */\nclass StrategyHandler {\n /**\n * Creates a new instance associated with the passed strategy and event\n * that's handling the request.\n *\n * The constructor also initializes the state that will be passed to each of\n * the plugins handling this request.\n *\n * @param {workbox-strategies.Strategy} strategy\n * @param {Object} options\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params] The return value from the\n * {@link workbox-routing~matchCallback} (if applicable).\n */\n constructor(strategy, options) {\n this._cacheKeys = {};\n /**\n * The request the strategy is performing (passed to the strategy's\n * `handle()` or `handleAll()` method).\n * @name request\n * @instance\n * @type {Request}\n * @memberof workbox-strategies.StrategyHandler\n */\n /**\n * The event associated with this request.\n * @name event\n * @instance\n * @type {ExtendableEvent}\n * @memberof workbox-strategies.StrategyHandler\n */\n /**\n * A `URL` instance of `request.url` (if passed to the strategy's\n * `handle()` or `handleAll()` method).\n * Note: the `url` param will be present if the strategy was invoked\n * from a workbox `Route` object.\n * @name url\n * @instance\n * @type {URL|undefined}\n * @memberof workbox-strategies.StrategyHandler\n */\n /**\n * A `param` value (if passed to the strategy's\n * `handle()` or `handleAll()` method).\n * Note: the `param` param will be present if the strategy was invoked\n * from a workbox `Route` object and the\n * {@link workbox-routing~matchCallback} returned\n * a truthy value (it will be that value).\n * @name params\n * @instance\n * @type {*|undefined}\n * @memberof workbox-strategies.StrategyHandler\n */\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(options.event, ExtendableEvent, {\n moduleName: 'workbox-strategies',\n className: 'StrategyHandler',\n funcName: 'constructor',\n paramName: 'options.event',\n });\n }\n Object.assign(this, options);\n this.event = options.event;\n this._strategy = strategy;\n this._handlerDeferred = new Deferred();\n this._extendLifetimePromises = [];\n // Copy the plugins list (since it's mutable on the strategy),\n // so any mutations don't affect this handler instance.\n this._plugins = [...strategy.plugins];\n this._pluginStateMap = new Map();\n for (const plugin of this._plugins) {\n this._pluginStateMap.set(plugin, {});\n }\n this.event.waitUntil(this._handlerDeferred.promise);\n }\n /**\n * Fetches a given request (and invokes any applicable plugin callback\n * methods) using the `fetchOptions` (for non-navigation requests) and\n * `plugins` defined on the `Strategy` object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - `requestWillFetch()`\n * - `fetchDidSucceed()`\n * - `fetchDidFail()`\n *\n * @param {Request|string} input The URL or request to fetch.\n * @return {Promise}\n */\n async fetch(input) {\n const { event } = this;\n let request = toRequest(input);\n if (request.mode === 'navigate' &&\n event instanceof FetchEvent &&\n event.preloadResponse) {\n const possiblePreloadResponse = (await event.preloadResponse);\n if (possiblePreloadResponse) {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`Using a preloaded navigation response for ` +\n `'${getFriendlyURL(request.url)}'`);\n }\n return possiblePreloadResponse;\n }\n }\n // If there is a fetchDidFail plugin, we need to save a clone of the\n // original request before it's either modified by a requestWillFetch\n // plugin or before the original request's body is consumed via fetch().\n const originalRequest = this.hasCallback('fetchDidFail')\n ? request.clone()\n : null;\n try {\n for (const cb of this.iterateCallbacks('requestWillFetch')) {\n request = await cb({ request: request.clone(), event });\n }\n }\n catch (err) {\n if (err instanceof Error) {\n throw new WorkboxError('plugin-error-request-will-fetch', {\n thrownErrorMessage: err.message,\n });\n }\n }\n // The request can be altered by plugins with `requestWillFetch` making\n // the original request (most likely from a `fetch` event) different\n // from the Request we make. Pass both to `fetchDidFail` to aid debugging.\n const pluginFilteredRequest = request.clone();\n try {\n let fetchResponse;\n // See https://github.com/GoogleChrome/workbox/issues/1796\n fetchResponse = await fetch(request, request.mode === 'navigate' ? undefined : this._strategy.fetchOptions);\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Network request for ` +\n `'${getFriendlyURL(request.url)}' returned a response with ` +\n `status '${fetchResponse.status}'.`);\n }\n for (const callback of this.iterateCallbacks('fetchDidSucceed')) {\n fetchResponse = await callback({\n event,\n request: pluginFilteredRequest,\n response: fetchResponse,\n });\n }\n return fetchResponse;\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`Network request for ` +\n `'${getFriendlyURL(request.url)}' threw an error.`, error);\n }\n // `originalRequest` will only exist if a `fetchDidFail` callback\n // is being used (see above).\n if (originalRequest) {\n await this.runCallbacks('fetchDidFail', {\n error: error,\n event,\n originalRequest: originalRequest.clone(),\n request: pluginFilteredRequest.clone(),\n });\n }\n throw error;\n }\n }\n /**\n * Calls `this.fetch()` and (in the background) runs `this.cachePut()` on\n * the response generated by `this.fetch()`.\n *\n * The call to `this.cachePut()` automatically invokes `this.waitUntil()`,\n * so you do not have to manually call `waitUntil()` on the event.\n *\n * @param {Request|string} input The request or URL to fetch and cache.\n * @return {Promise}\n */\n async fetchAndCachePut(input) {\n const response = await this.fetch(input);\n const responseClone = response.clone();\n void this.waitUntil(this.cachePut(input, responseClone));\n return response;\n }\n /**\n * Matches a request from the cache (and invokes any applicable plugin\n * callback methods) using the `cacheName`, `matchOptions`, and `plugins`\n * defined on the strategy object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - cacheKeyWillByUsed()\n * - cachedResponseWillByUsed()\n *\n * @param {Request|string} key The Request or URL to use as the cache key.\n * @return {Promise} A matching response, if found.\n */\n async cacheMatch(key) {\n const request = toRequest(key);\n let cachedResponse;\n const { cacheName, matchOptions } = this._strategy;\n const effectiveRequest = await this.getCacheKey(request, 'read');\n const multiMatchOptions = Object.assign(Object.assign({}, matchOptions), { cacheName });\n cachedResponse = await caches.match(effectiveRequest, multiMatchOptions);\n if (process.env.NODE_ENV !== 'production') {\n if (cachedResponse) {\n logger.debug(`Found a cached response in '${cacheName}'.`);\n }\n else {\n logger.debug(`No cached response found in '${cacheName}'.`);\n }\n }\n for (const callback of this.iterateCallbacks('cachedResponseWillBeUsed')) {\n cachedResponse =\n (await callback({\n cacheName,\n matchOptions,\n cachedResponse,\n request: effectiveRequest,\n event: this.event,\n })) || undefined;\n }\n return cachedResponse;\n }\n /**\n * Puts a request/response pair in the cache (and invokes any applicable\n * plugin callback methods) using the `cacheName` and `plugins` defined on\n * the strategy object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - cacheKeyWillByUsed()\n * - cacheWillUpdate()\n * - cacheDidUpdate()\n *\n * @param {Request|string} key The request or URL to use as the cache key.\n * @param {Response} response The response to cache.\n * @return {Promise} `false` if a cacheWillUpdate caused the response\n * not be cached, and `true` otherwise.\n */\n async cachePut(key, response) {\n const request = toRequest(key);\n // Run in the next task to avoid blocking other cache reads.\n // https://github.com/w3c/ServiceWorker/issues/1397\n await timeout(0);\n const effectiveRequest = await this.getCacheKey(request, 'write');\n if (process.env.NODE_ENV !== 'production') {\n if (effectiveRequest.method && effectiveRequest.method !== 'GET') {\n throw new WorkboxError('attempt-to-cache-non-get-request', {\n url: getFriendlyURL(effectiveRequest.url),\n method: effectiveRequest.method,\n });\n }\n // See https://github.com/GoogleChrome/workbox/issues/2818\n const vary = response.headers.get('Vary');\n if (vary) {\n logger.debug(`The response for ${getFriendlyURL(effectiveRequest.url)} ` +\n `has a 'Vary: ${vary}' header. ` +\n `Consider setting the {ignoreVary: true} option on your strategy ` +\n `to ensure cache matching and deletion works as expected.`);\n }\n }\n if (!response) {\n if (process.env.NODE_ENV !== 'production') {\n logger.error(`Cannot cache non-existent response for ` +\n `'${getFriendlyURL(effectiveRequest.url)}'.`);\n }\n throw new WorkboxError('cache-put-with-no-response', {\n url: getFriendlyURL(effectiveRequest.url),\n });\n }\n const responseToCache = await this._ensureResponseSafeToCache(response);\n if (!responseToCache) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Response '${getFriendlyURL(effectiveRequest.url)}' ` +\n `will not be cached.`, responseToCache);\n }\n return false;\n }\n const { cacheName, matchOptions } = this._strategy;\n const cache = await self.caches.open(cacheName);\n const hasCacheUpdateCallback = this.hasCallback('cacheDidUpdate');\n const oldResponse = hasCacheUpdateCallback\n ? await cacheMatchIgnoreParams(\n // TODO(philipwalton): the `__WB_REVISION__` param is a precaching\n // feature. Consider into ways to only add this behavior if using\n // precaching.\n cache, effectiveRequest.clone(), ['__WB_REVISION__'], matchOptions)\n : null;\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Updating the '${cacheName}' cache with a new Response ` +\n `for ${getFriendlyURL(effectiveRequest.url)}.`);\n }\n try {\n await cache.put(effectiveRequest, hasCacheUpdateCallback ? responseToCache.clone() : responseToCache);\n }\n catch (error) {\n if (error instanceof Error) {\n // See https://developer.mozilla.org/en-US/docs/Web/API/DOMException#exception-QuotaExceededError\n if (error.name === 'QuotaExceededError') {\n await executeQuotaErrorCallbacks();\n }\n throw error;\n }\n }\n for (const callback of this.iterateCallbacks('cacheDidUpdate')) {\n await callback({\n cacheName,\n oldResponse,\n newResponse: responseToCache.clone(),\n request: effectiveRequest,\n event: this.event,\n });\n }\n return true;\n }\n /**\n * Checks the list of plugins for the `cacheKeyWillBeUsed` callback, and\n * executes any of those callbacks found in sequence. The final `Request`\n * object returned by the last plugin is treated as the cache key for cache\n * reads and/or writes. If no `cacheKeyWillBeUsed` plugin callbacks have\n * been registered, the passed request is returned unmodified\n *\n * @param {Request} request\n * @param {string} mode\n * @return {Promise}\n */\n async getCacheKey(request, mode) {\n const key = `${request.url} | ${mode}`;\n if (!this._cacheKeys[key]) {\n let effectiveRequest = request;\n for (const callback of this.iterateCallbacks('cacheKeyWillBeUsed')) {\n effectiveRequest = toRequest(await callback({\n mode,\n request: effectiveRequest,\n event: this.event,\n // params has a type any can't change right now.\n params: this.params, // eslint-disable-line\n }));\n }\n this._cacheKeys[key] = effectiveRequest;\n }\n return this._cacheKeys[key];\n }\n /**\n * Returns true if the strategy has at least one plugin with the given\n * callback.\n *\n * @param {string} name The name of the callback to check for.\n * @return {boolean}\n */\n hasCallback(name) {\n for (const plugin of this._strategy.plugins) {\n if (name in plugin) {\n return true;\n }\n }\n return false;\n }\n /**\n * Runs all plugin callbacks matching the given name, in order, passing the\n * given param object (merged ith the current plugin state) as the only\n * argument.\n *\n * Note: since this method runs all plugins, it's not suitable for cases\n * where the return value of a callback needs to be applied prior to calling\n * the next callback. See\n * {@link workbox-strategies.StrategyHandler#iterateCallbacks}\n * below for how to handle that case.\n *\n * @param {string} name The name of the callback to run within each plugin.\n * @param {Object} param The object to pass as the first (and only) param\n * when executing each callback. This object will be merged with the\n * current plugin state prior to callback execution.\n */\n async runCallbacks(name, param) {\n for (const callback of this.iterateCallbacks(name)) {\n // TODO(philipwalton): not sure why `any` is needed. It seems like\n // this should work with `as WorkboxPluginCallbackParam[C]`.\n await callback(param);\n }\n }\n /**\n * Accepts a callback and returns an iterable of matching plugin callbacks,\n * where each callback is wrapped with the current handler state (i.e. when\n * you call each callback, whatever object parameter you pass it will\n * be merged with the plugin's current state).\n *\n * @param {string} name The name fo the callback to run\n * @return {Array}\n */\n *iterateCallbacks(name) {\n for (const plugin of this._strategy.plugins) {\n if (typeof plugin[name] === 'function') {\n const state = this._pluginStateMap.get(plugin);\n const statefulCallback = (param) => {\n const statefulParam = Object.assign(Object.assign({}, param), { state });\n // TODO(philipwalton): not sure why `any` is needed. It seems like\n // this should work with `as WorkboxPluginCallbackParam[C]`.\n return plugin[name](statefulParam);\n };\n yield statefulCallback;\n }\n }\n }\n /**\n * Adds a promise to the\n * [extend lifetime promises]{@link https://w3c.github.io/ServiceWorker/#extendableevent-extend-lifetime-promises}\n * of the event event associated with the request being handled (usually a\n * `FetchEvent`).\n *\n * Note: you can await\n * {@link workbox-strategies.StrategyHandler~doneWaiting}\n * to know when all added promises have settled.\n *\n * @param {Promise} promise A promise to add to the extend lifetime promises\n * of the event that triggered the request.\n */\n waitUntil(promise) {\n this._extendLifetimePromises.push(promise);\n return promise;\n }\n /**\n * Returns a promise that resolves once all promises passed to\n * {@link workbox-strategies.StrategyHandler~waitUntil}\n * have settled.\n *\n * Note: any work done after `doneWaiting()` settles should be manually\n * passed to an event's `waitUntil()` method (not this handler's\n * `waitUntil()` method), otherwise the service worker thread my be killed\n * prior to your work completing.\n */\n async doneWaiting() {\n let promise;\n while ((promise = this._extendLifetimePromises.shift())) {\n await promise;\n }\n }\n /**\n * Stops running the strategy and immediately resolves any pending\n * `waitUntil()` promises.\n */\n destroy() {\n this._handlerDeferred.resolve(null);\n }\n /**\n * This method will call cacheWillUpdate on the available plugins (or use\n * status === 200) to determine if the Response is safe and valid to cache.\n *\n * @param {Request} options.request\n * @param {Response} options.response\n * @return {Promise}\n *\n * @private\n */\n async _ensureResponseSafeToCache(response) {\n let responseToCache = response;\n let pluginsUsed = false;\n for (const callback of this.iterateCallbacks('cacheWillUpdate')) {\n responseToCache =\n (await callback({\n request: this.request,\n response: responseToCache,\n event: this.event,\n })) || undefined;\n pluginsUsed = true;\n if (!responseToCache) {\n break;\n }\n }\n if (!pluginsUsed) {\n if (responseToCache && responseToCache.status !== 200) {\n responseToCache = undefined;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (responseToCache) {\n if (responseToCache.status !== 200) {\n if (responseToCache.status === 0) {\n logger.warn(`The response for '${this.request.url}' ` +\n `is an opaque response. The caching strategy that you're ` +\n `using will not cache opaque responses by default.`);\n }\n else {\n logger.debug(`The response for '${this.request.url}' ` +\n `returned a status code of '${response.status}' and won't ` +\n `be cached as a result.`);\n }\n }\n }\n }\n }\n return responseToCache;\n }\n}\nexport { StrategyHandler };\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * Returns a promise that resolves and the passed number of milliseconds.\n * This utility is an async/await-friendly version of `setTimeout`.\n *\n * @param {number} ms\n * @return {Promise}\n * @private\n */\nexport function timeout(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from '../_private/logger.js';\nimport { quotaErrorCallbacks } from '../models/quotaErrorCallbacks.js';\nimport '../_version.js';\n/**\n * Runs all of the callback functions, one at a time sequentially, in the order\n * in which they were registered.\n *\n * @memberof workbox-core\n * @private\n */\nasync function executeQuotaErrorCallbacks() {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`About to run ${quotaErrorCallbacks.size} ` +\n `callbacks to clean up caches.`);\n }\n for (const callback of quotaErrorCallbacks) {\n await callback();\n if (process.env.NODE_ENV !== 'production') {\n logger.log(callback, 'is complete.');\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.log('Finished running callbacks.');\n }\n}\nexport { executeQuotaErrorCallbacks };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { StrategyHandler } from './StrategyHandler.js';\nimport './_version.js';\n/**\n * An abstract base class that all other strategy classes must extend from:\n *\n * @memberof workbox-strategies\n */\nclass Strategy {\n /**\n * Creates a new instance of the strategy and sets all documented option\n * properties as public instance properties.\n *\n * Note: if a custom strategy class extends the base Strategy class and does\n * not need more than these properties, it does not need to define its own\n * constructor.\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * {@link workbox-core.cacheNames}.\n * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `fetch()` requests made by this strategy.\n * @param {Object} [options.matchOptions] The\n * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n */\n constructor(options = {}) {\n /**\n * Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * {@link workbox-core.cacheNames}.\n *\n * @type {string}\n */\n this.cacheName = cacheNames.getRuntimeName(options.cacheName);\n /**\n * The list\n * [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * used by this strategy.\n *\n * @type {Array}\n */\n this.plugins = options.plugins || [];\n /**\n * Values passed along to the\n * [`init`]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters}\n * of all fetch() requests made by this strategy.\n *\n * @type {Object}\n */\n this.fetchOptions = options.fetchOptions;\n /**\n * The\n * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n *\n * @type {Object}\n */\n this.matchOptions = options.matchOptions;\n }\n /**\n * Perform a request strategy and returns a `Promise` that will resolve with\n * a `Response`, invoking all relevant plugin callbacks.\n *\n * When a strategy instance is registered with a Workbox\n * {@link workbox-routing.Route}, this method is automatically\n * called when the route matches.\n *\n * Alternatively, this method can be used in a standalone `FetchEvent`\n * listener by passing it to `event.respondWith()`.\n *\n * @param {FetchEvent|Object} options A `FetchEvent` or an object with the\n * properties listed below.\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params]\n */\n handle(options) {\n const [responseDone] = this.handleAll(options);\n return responseDone;\n }\n /**\n * Similar to {@link workbox-strategies.Strategy~handle}, but\n * instead of just returning a `Promise` that resolves to a `Response` it\n * it will return an tuple of `[response, done]` promises, where the former\n * (`response`) is equivalent to what `handle()` returns, and the latter is a\n * Promise that will resolve once any promises that were added to\n * `event.waitUntil()` as part of performing the strategy have completed.\n *\n * You can await the `done` promise to ensure any extra work performed by\n * the strategy (usually caching responses) completes successfully.\n *\n * @param {FetchEvent|Object} options A `FetchEvent` or an object with the\n * properties listed below.\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params]\n * @return {Array} A tuple of [response, done]\n * promises that can be used to determine when the response resolves as\n * well as when the handler has completed all its work.\n */\n handleAll(options) {\n // Allow for flexible options to be passed.\n if (options instanceof FetchEvent) {\n options = {\n event: options,\n request: options.request,\n };\n }\n const event = options.event;\n const request = typeof options.request === 'string'\n ? new Request(options.request)\n : options.request;\n const params = 'params' in options ? options.params : undefined;\n const handler = new StrategyHandler(this, { event, request, params });\n const responseDone = this._getResponse(handler, request, event);\n const handlerDone = this._awaitComplete(responseDone, handler, request, event);\n // Return an array of promises, suitable for use with Promise.all().\n return [responseDone, handlerDone];\n }\n async _getResponse(handler, request, event) {\n await handler.runCallbacks('handlerWillStart', { event, request });\n let response = undefined;\n try {\n response = await this._handle(request, handler);\n // The \"official\" Strategy subclasses all throw this error automatically,\n // but in case a third-party Strategy doesn't, ensure that we have a\n // consistent failure when there's no response or an error response.\n if (!response || response.type === 'error') {\n throw new WorkboxError('no-response', { url: request.url });\n }\n }\n catch (error) {\n if (error instanceof Error) {\n for (const callback of handler.iterateCallbacks('handlerDidError')) {\n response = await callback({ error, event, request });\n if (response) {\n break;\n }\n }\n }\n if (!response) {\n throw error;\n }\n else if (process.env.NODE_ENV !== 'production') {\n logger.log(`While responding to '${getFriendlyURL(request.url)}', ` +\n `an ${error instanceof Error ? error.toString() : ''} error occurred. Using a fallback response provided by ` +\n `a handlerDidError plugin.`);\n }\n }\n for (const callback of handler.iterateCallbacks('handlerWillRespond')) {\n response = await callback({ event, request, response });\n }\n return response;\n }\n async _awaitComplete(responseDone, handler, request, event) {\n let response;\n let error;\n try {\n response = await responseDone;\n }\n catch (error) {\n // Ignore errors, as response errors should be caught via the `response`\n // promise above. The `done` promise will only throw for errors in\n // promises passed to `handler.waitUntil()`.\n }\n try {\n await handler.runCallbacks('handlerDidRespond', {\n event,\n request,\n response,\n });\n await handler.doneWaiting();\n }\n catch (waitUntilError) {\n if (waitUntilError instanceof Error) {\n error = waitUntilError;\n }\n }\n await handler.runCallbacks('handlerDidComplete', {\n event,\n request,\n response,\n error: error,\n });\n handler.destroy();\n if (error) {\n throw error;\n }\n }\n}\nexport { Strategy };\n/**\n * Classes extending the `Strategy` based class should implement this method,\n * and leverage the {@link workbox-strategies.StrategyHandler}\n * arg to perform all fetching and cache logic, which will ensure all relevant\n * cache, cache options, fetch options and plugins are used (per the current\n * strategy instance).\n *\n * @name _handle\n * @instance\n * @abstract\n * @function\n * @param {Request} request\n * @param {workbox-strategies.StrategyHandler} handler\n * @return {Promise}\n *\n * @memberof workbox-strategies.Strategy\n */\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { copyResponse } from 'workbox-core/copyResponse.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Strategy } from 'workbox-strategies/Strategy.js';\nimport './_version.js';\n/**\n * A {@link workbox-strategies.Strategy} implementation\n * specifically designed to work with\n * {@link workbox-precaching.PrecacheController}\n * to both cache and fetch precached assets.\n *\n * Note: an instance of this class is created automatically when creating a\n * `PrecacheController`; it's generally not necessary to create this yourself.\n *\n * @extends workbox-strategies.Strategy\n * @memberof workbox-precaching\n */\nclass PrecacheStrategy extends Strategy {\n /**\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * {@link workbox-core.cacheNames}.\n * @param {Array} [options.plugins] {@link https://developers.google.com/web/tools/workbox/guides/using-plugins|Plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters|init}\n * of all fetch() requests made by this strategy.\n * @param {Object} [options.matchOptions] The\n * {@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions|CacheQueryOptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to\n * get the response from the network if there's a precache miss.\n */\n constructor(options = {}) {\n options.cacheName = cacheNames.getPrecacheName(options.cacheName);\n super(options);\n this._fallbackToNetwork =\n options.fallbackToNetwork === false ? false : true;\n // Redirected responses cannot be used to satisfy a navigation request, so\n // any redirected response must be \"copied\" rather than cloned, so the new\n // response doesn't contain the `redirected` flag. See:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=669363&desc=2#c1\n this.plugins.push(PrecacheStrategy.copyRedirectedCacheableResponsesPlugin);\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const response = await handler.cacheMatch(request);\n if (response) {\n return response;\n }\n // If this is an `install` event for an entry that isn't already cached,\n // then populate the cache.\n if (handler.event && handler.event.type === 'install') {\n return await this._handleInstall(request, handler);\n }\n // Getting here means something went wrong. An entry that should have been\n // precached wasn't found in the cache.\n return await this._handleFetch(request, handler);\n }\n async _handleFetch(request, handler) {\n let response;\n const params = (handler.params || {});\n // Fall back to the network if we're configured to do so.\n if (this._fallbackToNetwork) {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(`The precached response for ` +\n `${getFriendlyURL(request.url)} in ${this.cacheName} was not ` +\n `found. Falling back to the network.`);\n }\n const integrityInManifest = params.integrity;\n const integrityInRequest = request.integrity;\n const noIntegrityConflict = !integrityInRequest || integrityInRequest === integrityInManifest;\n // Do not add integrity if the original request is no-cors\n // See https://github.com/GoogleChrome/workbox/issues/3096\n response = await handler.fetch(new Request(request, {\n integrity: request.mode !== 'no-cors'\n ? integrityInRequest || integrityInManifest\n : undefined,\n }));\n // It's only \"safe\" to repair the cache if we're using SRI to guarantee\n // that the response matches the precache manifest's expectations,\n // and there's either a) no integrity property in the incoming request\n // or b) there is an integrity, and it matches the precache manifest.\n // See https://github.com/GoogleChrome/workbox/issues/2858\n // Also if the original request users no-cors we don't use integrity.\n // See https://github.com/GoogleChrome/workbox/issues/3096\n if (integrityInManifest &&\n noIntegrityConflict &&\n request.mode !== 'no-cors') {\n this._useDefaultCacheabilityPluginIfNeeded();\n const wasCached = await handler.cachePut(request, response.clone());\n if (process.env.NODE_ENV !== 'production') {\n if (wasCached) {\n logger.log(`A response for ${getFriendlyURL(request.url)} ` +\n `was used to \"repair\" the precache.`);\n }\n }\n }\n }\n else {\n // This shouldn't normally happen, but there are edge cases:\n // https://github.com/GoogleChrome/workbox/issues/1441\n throw new WorkboxError('missing-precache-entry', {\n cacheName: this.cacheName,\n url: request.url,\n });\n }\n if (process.env.NODE_ENV !== 'production') {\n const cacheKey = params.cacheKey || (await handler.getCacheKey(request, 'read'));\n // Workbox is going to handle the route.\n // print the routing details to the console.\n logger.groupCollapsed(`Precaching is responding to: ` + getFriendlyURL(request.url));\n logger.log(`Serving the precached url: ${getFriendlyURL(cacheKey instanceof Request ? cacheKey.url : cacheKey)}`);\n logger.groupCollapsed(`View request details here.`);\n logger.log(request);\n logger.groupEnd();\n logger.groupCollapsed(`View response details here.`);\n logger.log(response);\n logger.groupEnd();\n logger.groupEnd();\n }\n return response;\n }\n async _handleInstall(request, handler) {\n this._useDefaultCacheabilityPluginIfNeeded();\n const response = await handler.fetch(request);\n // Make sure we defer cachePut() until after we know the response\n // should be cached; see https://github.com/GoogleChrome/workbox/issues/2737\n const wasCached = await handler.cachePut(request, response.clone());\n if (!wasCached) {\n // Throwing here will lead to the `install` handler failing, which\n // we want to do if *any* of the responses aren't safe to cache.\n throw new WorkboxError('bad-precaching-response', {\n url: request.url,\n status: response.status,\n });\n }\n return response;\n }\n /**\n * This method is complex, as there a number of things to account for:\n *\n * The `plugins` array can be set at construction, and/or it might be added to\n * to at any time before the strategy is used.\n *\n * At the time the strategy is used (i.e. during an `install` event), there\n * needs to be at least one plugin that implements `cacheWillUpdate` in the\n * array, other than `copyRedirectedCacheableResponsesPlugin`.\n *\n * - If this method is called and there are no suitable `cacheWillUpdate`\n * plugins, we need to add `defaultPrecacheCacheabilityPlugin`.\n *\n * - If this method is called and there is exactly one `cacheWillUpdate`, then\n * we don't have to do anything (this might be a previously added\n * `defaultPrecacheCacheabilityPlugin`, or it might be a custom plugin).\n *\n * - If this method is called and there is more than one `cacheWillUpdate`,\n * then we need to check if one is `defaultPrecacheCacheabilityPlugin`. If so,\n * we need to remove it. (This situation is unlikely, but it could happen if\n * the strategy is used multiple times, the first without a `cacheWillUpdate`,\n * and then later on after manually adding a custom `cacheWillUpdate`.)\n *\n * See https://github.com/GoogleChrome/workbox/issues/2737 for more context.\n *\n * @private\n */\n _useDefaultCacheabilityPluginIfNeeded() {\n let defaultPluginIndex = null;\n let cacheWillUpdatePluginCount = 0;\n for (const [index, plugin] of this.plugins.entries()) {\n // Ignore the copy redirected plugin when determining what to do.\n if (plugin === PrecacheStrategy.copyRedirectedCacheableResponsesPlugin) {\n continue;\n }\n // Save the default plugin's index, in case it needs to be removed.\n if (plugin === PrecacheStrategy.defaultPrecacheCacheabilityPlugin) {\n defaultPluginIndex = index;\n }\n if (plugin.cacheWillUpdate) {\n cacheWillUpdatePluginCount++;\n }\n }\n if (cacheWillUpdatePluginCount === 0) {\n this.plugins.push(PrecacheStrategy.defaultPrecacheCacheabilityPlugin);\n }\n else if (cacheWillUpdatePluginCount > 1 && defaultPluginIndex !== null) {\n // Only remove the default plugin; multiple custom plugins are allowed.\n this.plugins.splice(defaultPluginIndex, 1);\n }\n // Nothing needs to be done if cacheWillUpdatePluginCount is 1\n }\n}\nPrecacheStrategy.defaultPrecacheCacheabilityPlugin = {\n async cacheWillUpdate({ response }) {\n if (!response || response.status >= 400) {\n return null;\n }\n return response;\n },\n};\nPrecacheStrategy.copyRedirectedCacheableResponsesPlugin = {\n async cacheWillUpdate({ response }) {\n return response.redirected ? await copyResponse(response) : response;\n },\n};\nexport { PrecacheStrategy };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { waitUntil } from 'workbox-core/_private/waitUntil.js';\nimport { createCacheKey } from './utils/createCacheKey.js';\nimport { PrecacheInstallReportPlugin } from './utils/PrecacheInstallReportPlugin.js';\nimport { PrecacheCacheKeyPlugin } from './utils/PrecacheCacheKeyPlugin.js';\nimport { printCleanupDetails } from './utils/printCleanupDetails.js';\nimport { printInstallDetails } from './utils/printInstallDetails.js';\nimport { PrecacheStrategy } from './PrecacheStrategy.js';\nimport './_version.js';\n/**\n * Performs efficient precaching of assets.\n *\n * @memberof workbox-precaching\n */\nclass PrecacheController {\n /**\n * Create a new PrecacheController.\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] The cache to use for precaching.\n * @param {string} [options.plugins] Plugins to use when precaching as well\n * as responding to fetch events for precached assets.\n * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to\n * get the response from the network if there's a precache miss.\n */\n constructor({ cacheName, plugins = [], fallbackToNetwork = true, } = {}) {\n this._urlsToCacheKeys = new Map();\n this._urlsToCacheModes = new Map();\n this._cacheKeysToIntegrities = new Map();\n this._strategy = new PrecacheStrategy({\n cacheName: cacheNames.getPrecacheName(cacheName),\n plugins: [\n ...plugins,\n new PrecacheCacheKeyPlugin({ precacheController: this }),\n ],\n fallbackToNetwork,\n });\n // Bind the install and activate methods to the instance.\n this.install = this.install.bind(this);\n this.activate = this.activate.bind(this);\n }\n /**\n * @type {workbox-precaching.PrecacheStrategy} The strategy created by this controller and\n * used to cache assets and respond to fetch events.\n */\n get strategy() {\n return this._strategy;\n }\n /**\n * Adds items to the precache list, removing any duplicates and\n * stores the files in the\n * {@link workbox-core.cacheNames|\"precache cache\"} when the service\n * worker installs.\n *\n * This method can be called multiple times.\n *\n * @param {Array} [entries=[]] Array of entries to precache.\n */\n precache(entries) {\n this.addToCacheList(entries);\n if (!this._installAndActiveListenersAdded) {\n self.addEventListener('install', this.install);\n self.addEventListener('activate', this.activate);\n this._installAndActiveListenersAdded = true;\n }\n }\n /**\n * This method will add items to the precache list, removing duplicates\n * and ensuring the information is valid.\n *\n * @param {Array} entries\n * Array of entries to precache.\n */\n addToCacheList(entries) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isArray(entries, {\n moduleName: 'workbox-precaching',\n className: 'PrecacheController',\n funcName: 'addToCacheList',\n paramName: 'entries',\n });\n }\n const urlsToWarnAbout = [];\n for (const entry of entries) {\n // See https://github.com/GoogleChrome/workbox/issues/2259\n if (typeof entry === 'string') {\n urlsToWarnAbout.push(entry);\n }\n else if (entry && entry.revision === undefined) {\n urlsToWarnAbout.push(entry.url);\n }\n const { cacheKey, url } = createCacheKey(entry);\n const cacheMode = typeof entry !== 'string' && entry.revision ? 'reload' : 'default';\n if (this._urlsToCacheKeys.has(url) &&\n this._urlsToCacheKeys.get(url) !== cacheKey) {\n throw new WorkboxError('add-to-cache-list-conflicting-entries', {\n firstEntry: this._urlsToCacheKeys.get(url),\n secondEntry: cacheKey,\n });\n }\n if (typeof entry !== 'string' && entry.integrity) {\n if (this._cacheKeysToIntegrities.has(cacheKey) &&\n this._cacheKeysToIntegrities.get(cacheKey) !== entry.integrity) {\n throw new WorkboxError('add-to-cache-list-conflicting-integrities', {\n url,\n });\n }\n this._cacheKeysToIntegrities.set(cacheKey, entry.integrity);\n }\n this._urlsToCacheKeys.set(url, cacheKey);\n this._urlsToCacheModes.set(url, cacheMode);\n if (urlsToWarnAbout.length > 0) {\n const warningMessage = `Workbox is precaching URLs without revision ` +\n `info: ${urlsToWarnAbout.join(', ')}\\nThis is generally NOT safe. ` +\n `Learn more at https://bit.ly/wb-precache`;\n if (process.env.NODE_ENV === 'production') {\n // Use console directly to display this warning without bloating\n // bundle sizes by pulling in all of the logger codebase in prod.\n console.warn(warningMessage);\n }\n else {\n logger.warn(warningMessage);\n }\n }\n }\n }\n /**\n * Precaches new and updated assets. Call this method from the service worker\n * install event.\n *\n * Note: this method calls `event.waitUntil()` for you, so you do not need\n * to call it yourself in your event handlers.\n *\n * @param {ExtendableEvent} event\n * @return {Promise}\n */\n install(event) {\n // waitUntil returns Promise\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return waitUntil(event, async () => {\n const installReportPlugin = new PrecacheInstallReportPlugin();\n this.strategy.plugins.push(installReportPlugin);\n // Cache entries one at a time.\n // See https://github.com/GoogleChrome/workbox/issues/2528\n for (const [url, cacheKey] of this._urlsToCacheKeys) {\n const integrity = this._cacheKeysToIntegrities.get(cacheKey);\n const cacheMode = this._urlsToCacheModes.get(url);\n const request = new Request(url, {\n integrity,\n cache: cacheMode,\n credentials: 'same-origin',\n });\n await Promise.all(this.strategy.handleAll({\n params: { cacheKey },\n request,\n event,\n }));\n }\n const { updatedURLs, notUpdatedURLs } = installReportPlugin;\n if (process.env.NODE_ENV !== 'production') {\n printInstallDetails(updatedURLs, notUpdatedURLs);\n }\n return { updatedURLs, notUpdatedURLs };\n });\n }\n /**\n * Deletes assets that are no longer present in the current precache manifest.\n * Call this method from the service worker activate event.\n *\n * Note: this method calls `event.waitUntil()` for you, so you do not need\n * to call it yourself in your event handlers.\n *\n * @param {ExtendableEvent} event\n * @return {Promise}\n */\n activate(event) {\n // waitUntil returns Promise\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return waitUntil(event, async () => {\n const cache = await self.caches.open(this.strategy.cacheName);\n const currentlyCachedRequests = await cache.keys();\n const expectedCacheKeys = new Set(this._urlsToCacheKeys.values());\n const deletedURLs = [];\n for (const request of currentlyCachedRequests) {\n if (!expectedCacheKeys.has(request.url)) {\n await cache.delete(request);\n deletedURLs.push(request.url);\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n printCleanupDetails(deletedURLs);\n }\n return { deletedURLs };\n });\n }\n /**\n * Returns a mapping of a precached URL to the corresponding cache key, taking\n * into account the revision information for the URL.\n *\n * @return {Map} A URL to cache key mapping.\n */\n getURLsToCacheKeys() {\n return this._urlsToCacheKeys;\n }\n /**\n * Returns a list of all the URLs that have been precached by the current\n * service worker.\n *\n * @return {Array} The precached URLs.\n */\n getCachedURLs() {\n return [...this._urlsToCacheKeys.keys()];\n }\n /**\n * Returns the cache key used for storing a given URL. If that URL is\n * unversioned, like `/index.html', then the cache key will be the original\n * URL with a search parameter appended to it.\n *\n * @param {string} url A URL whose cache key you want to look up.\n * @return {string} The versioned URL that corresponds to a cache key\n * for the original URL, or undefined if that URL isn't precached.\n */\n getCacheKeyForURL(url) {\n const urlObject = new URL(url, location.href);\n return this._urlsToCacheKeys.get(urlObject.href);\n }\n /**\n * @param {string} url A cache key whose SRI you want to look up.\n * @return {string} The subresource integrity associated with the cache key,\n * or undefined if it's not set.\n */\n getIntegrityForCacheKey(cacheKey) {\n return this._cacheKeysToIntegrities.get(cacheKey);\n }\n /**\n * This acts as a drop-in replacement for\n * [`cache.match()`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/match)\n * with the following differences:\n *\n * - It knows what the name of the precache is, and only checks in that cache.\n * - It allows you to pass in an \"original\" URL without versioning parameters,\n * and it will automatically look up the correct cache key for the currently\n * active revision of that URL.\n *\n * E.g., `matchPrecache('index.html')` will find the correct precached\n * response for the currently active service worker, even if the actual cache\n * key is `'/index.html?__WB_REVISION__=1234abcd'`.\n *\n * @param {string|Request} request The key (without revisioning parameters)\n * to look up in the precache.\n * @return {Promise}\n */\n async matchPrecache(request) {\n const url = request instanceof Request ? request.url : request;\n const cacheKey = this.getCacheKeyForURL(url);\n if (cacheKey) {\n const cache = await self.caches.open(this.strategy.cacheName);\n return cache.match(cacheKey);\n }\n return undefined;\n }\n /**\n * Returns a function that looks up `url` in the precache (taking into\n * account revision information), and returns the corresponding `Response`.\n *\n * @param {string} url The precached URL which will be used to lookup the\n * `Response`.\n * @return {workbox-routing~handlerCallback}\n */\n createHandlerBoundToURL(url) {\n const cacheKey = this.getCacheKeyForURL(url);\n if (!cacheKey) {\n throw new WorkboxError('non-precached-url', { url });\n }\n return (options) => {\n options.request = new Request(url);\n options.params = Object.assign({ cacheKey }, options.params);\n return this.strategy.handle(options);\n };\n }\n}\nexport { PrecacheController };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { PrecacheController } from '../PrecacheController.js';\nimport '../_version.js';\nlet precacheController;\n/**\n * @return {PrecacheController}\n * @private\n */\nexport const getOrCreatePrecacheController = () => {\n if (!precacheController) {\n precacheController = new PrecacheController();\n }\n return precacheController;\n};\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * The default HTTP method, 'GET', used when there's no specific method\n * configured for a route.\n *\n * @type {string}\n *\n * @private\n */\nexport const defaultMethod = 'GET';\n/**\n * The list of valid HTTP methods associated with requests that could be routed.\n *\n * @type {Array}\n *\n * @private\n */\nexport const validMethods = [\n 'DELETE',\n 'GET',\n 'HEAD',\n 'PATCH',\n 'POST',\n 'PUT',\n];\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport '../_version.js';\n/**\n * @param {function()|Object} handler Either a function, or an object with a\n * 'handle' method.\n * @return {Object} An object with a handle method.\n *\n * @private\n */\nexport const normalizeHandler = (handler) => {\n if (handler && typeof handler === 'object') {\n if (process.env.NODE_ENV !== 'production') {\n assert.hasMethod(handler, 'handle', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'handler',\n });\n }\n return handler;\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(handler, 'function', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'handler',\n });\n }\n return { handle: handler };\n }\n};\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { defaultMethod, validMethods } from './utils/constants.js';\nimport { normalizeHandler } from './utils/normalizeHandler.js';\nimport './_version.js';\n/**\n * A `Route` consists of a pair of callback functions, \"match\" and \"handler\".\n * The \"match\" callback determine if a route should be used to \"handle\" a\n * request by returning a non-falsy value if it can. The \"handler\" callback\n * is called when there is a match and should return a Promise that resolves\n * to a `Response`.\n *\n * @memberof workbox-routing\n */\nclass Route {\n /**\n * Constructor for Route class.\n *\n * @param {workbox-routing~matchCallback} match\n * A callback function that determines whether the route matches a given\n * `fetch` event by returning a non-falsy value.\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resolving to a Response.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n */\n constructor(match, handler, method = defaultMethod) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(match, 'function', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'match',\n });\n if (method) {\n assert.isOneOf(method, validMethods, { paramName: 'method' });\n }\n }\n // These values are referenced directly by Router so cannot be\n // altered by minificaton.\n this.handler = normalizeHandler(handler);\n this.match = match;\n this.method = method;\n }\n /**\n *\n * @param {workbox-routing-handlerCallback} handler A callback\n * function that returns a Promise resolving to a Response\n */\n setCatchHandler(handler) {\n this.catchHandler = normalizeHandler(handler);\n }\n}\nexport { Route };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { Route } from './Route.js';\nimport './_version.js';\n/**\n * RegExpRoute makes it easy to create a regular expression based\n * {@link workbox-routing.Route}.\n *\n * For same-origin requests the RegExp only needs to match part of the URL. For\n * requests against third-party servers, you must define a RegExp that matches\n * the start of the URL.\n *\n * @memberof workbox-routing\n * @extends workbox-routing.Route\n */\nclass RegExpRoute extends Route {\n /**\n * If the regular expression contains\n * [capture groups]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references},\n * the captured values will be passed to the\n * {@link workbox-routing~handlerCallback} `params`\n * argument.\n *\n * @param {RegExp} regExp The regular expression to match against URLs.\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n */\n constructor(regExp, handler, method) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(regExp, RegExp, {\n moduleName: 'workbox-routing',\n className: 'RegExpRoute',\n funcName: 'constructor',\n paramName: 'pattern',\n });\n }\n const match = ({ url }) => {\n const result = regExp.exec(url.href);\n // Return immediately if there's no match.\n if (!result) {\n return;\n }\n // Require that the match start at the first character in the URL string\n // if it's a cross-origin request.\n // See https://github.com/GoogleChrome/workbox/issues/281 for the context\n // behind this behavior.\n if (url.origin !== location.origin && result.index !== 0) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`The regular expression '${regExp.toString()}' only partially matched ` +\n `against the cross-origin URL '${url.toString()}'. RegExpRoute's will only ` +\n `handle cross-origin requests if they match the entire URL.`);\n }\n return;\n }\n // If the route matches, but there aren't any capture groups defined, then\n // this will return [], which is truthy and therefore sufficient to\n // indicate a match.\n // If there are capture groups, then it will return their values.\n return result.slice(1);\n };\n super(match, handler, method);\n }\n}\nexport { RegExpRoute };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { defaultMethod } from './utils/constants.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { normalizeHandler } from './utils/normalizeHandler.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport './_version.js';\n/**\n * The Router can be used to process a `FetchEvent` using one or more\n * {@link workbox-routing.Route}, responding with a `Response` if\n * a matching route exists.\n *\n * If no route matches a given a request, the Router will use a \"default\"\n * handler if one is defined.\n *\n * Should the matching Route throw an error, the Router will use a \"catch\"\n * handler if one is defined to gracefully deal with issues and respond with a\n * Request.\n *\n * If a request matches multiple routes, the **earliest** registered route will\n * be used to respond to the request.\n *\n * @memberof workbox-routing\n */\nclass Router {\n /**\n * Initializes a new Router.\n */\n constructor() {\n this._routes = new Map();\n this._defaultHandlerMap = new Map();\n }\n /**\n * @return {Map>} routes A `Map` of HTTP\n * method name ('GET', etc.) to an array of all the corresponding `Route`\n * instances that are registered.\n */\n get routes() {\n return this._routes;\n }\n /**\n * Adds a fetch event listener to respond to events when a route matches\n * the event's request.\n */\n addFetchListener() {\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('fetch', ((event) => {\n const { request } = event;\n const responsePromise = this.handleRequest({ request, event });\n if (responsePromise) {\n event.respondWith(responsePromise);\n }\n }));\n }\n /**\n * Adds a message event listener for URLs to cache from the window.\n * This is useful to cache resources loaded on the page prior to when the\n * service worker started controlling it.\n *\n * The format of the message data sent from the window should be as follows.\n * Where the `urlsToCache` array may consist of URL strings or an array of\n * URL string + `requestInit` object (the same as you'd pass to `fetch()`).\n *\n * ```\n * {\n * type: 'CACHE_URLS',\n * payload: {\n * urlsToCache: [\n * './script1.js',\n * './script2.js',\n * ['./script3.js', {mode: 'no-cors'}],\n * ],\n * },\n * }\n * ```\n */\n addCacheListener() {\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('message', ((event) => {\n // event.data is type 'any'\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (event.data && event.data.type === 'CACHE_URLS') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { payload } = event.data;\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Caching URLs from the window`, payload.urlsToCache);\n }\n const requestPromises = Promise.all(payload.urlsToCache.map((entry) => {\n if (typeof entry === 'string') {\n entry = [entry];\n }\n const request = new Request(...entry);\n return this.handleRequest({ request, event });\n // TODO(philipwalton): TypeScript errors without this typecast for\n // some reason (probably a bug). The real type here should work but\n // doesn't: `Array | undefined>`.\n })); // TypeScript\n event.waitUntil(requestPromises);\n // If a MessageChannel was used, reply to the message on success.\n if (event.ports && event.ports[0]) {\n void requestPromises.then(() => event.ports[0].postMessage(true));\n }\n }\n }));\n }\n /**\n * Apply the routing rules to a FetchEvent object to get a Response from an\n * appropriate Route's handler.\n *\n * @param {Object} options\n * @param {Request} options.request The request to handle.\n * @param {ExtendableEvent} options.event The event that triggered the\n * request.\n * @return {Promise|undefined} A promise is returned if a\n * registered route can handle the request. If there is no matching\n * route and there's no `defaultHandler`, `undefined` is returned.\n */\n handleRequest({ request, event, }) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'handleRequest',\n paramName: 'options.request',\n });\n }\n const url = new URL(request.url, location.href);\n if (!url.protocol.startsWith('http')) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Workbox Router only supports URLs that start with 'http'.`);\n }\n return;\n }\n const sameOrigin = url.origin === location.origin;\n const { params, route } = this.findMatchingRoute({\n event,\n request,\n sameOrigin,\n url,\n });\n let handler = route && route.handler;\n const debugMessages = [];\n if (process.env.NODE_ENV !== 'production') {\n if (handler) {\n debugMessages.push([`Found a route to handle this request:`, route]);\n if (params) {\n debugMessages.push([\n `Passing the following params to the route's handler:`,\n params,\n ]);\n }\n }\n }\n // If we don't have a handler because there was no matching route, then\n // fall back to defaultHandler if that's defined.\n const method = request.method;\n if (!handler && this._defaultHandlerMap.has(method)) {\n if (process.env.NODE_ENV !== 'production') {\n debugMessages.push(`Failed to find a matching route. Falling ` +\n `back to the default handler for ${method}.`);\n }\n handler = this._defaultHandlerMap.get(method);\n }\n if (!handler) {\n if (process.env.NODE_ENV !== 'production') {\n // No handler so Workbox will do nothing. If logs is set of debug\n // i.e. verbose, we should print out this information.\n logger.debug(`No route found for: ${getFriendlyURL(url)}`);\n }\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // We have a handler, meaning Workbox is going to handle the route.\n // print the routing details to the console.\n logger.groupCollapsed(`Router is responding to: ${getFriendlyURL(url)}`);\n debugMessages.forEach((msg) => {\n if (Array.isArray(msg)) {\n logger.log(...msg);\n }\n else {\n logger.log(msg);\n }\n });\n logger.groupEnd();\n }\n // Wrap in try and catch in case the handle method throws a synchronous\n // error. It should still callback to the catch handler.\n let responsePromise;\n try {\n responsePromise = handler.handle({ url, request, event, params });\n }\n catch (err) {\n responsePromise = Promise.reject(err);\n }\n // Get route's catch handler, if it exists\n const catchHandler = route && route.catchHandler;\n if (responsePromise instanceof Promise &&\n (this._catchHandler || catchHandler)) {\n responsePromise = responsePromise.catch(async (err) => {\n // If there's a route catch handler, process that first\n if (catchHandler) {\n if (process.env.NODE_ENV !== 'production') {\n // Still include URL here as it will be async from the console group\n // and may not make sense without the URL\n logger.groupCollapsed(`Error thrown when responding to: ` +\n ` ${getFriendlyURL(url)}. Falling back to route's Catch Handler.`);\n logger.error(`Error thrown by:`, route);\n logger.error(err);\n logger.groupEnd();\n }\n try {\n return await catchHandler.handle({ url, request, event, params });\n }\n catch (catchErr) {\n if (catchErr instanceof Error) {\n err = catchErr;\n }\n }\n }\n if (this._catchHandler) {\n if (process.env.NODE_ENV !== 'production') {\n // Still include URL here as it will be async from the console group\n // and may not make sense without the URL\n logger.groupCollapsed(`Error thrown when responding to: ` +\n ` ${getFriendlyURL(url)}. Falling back to global Catch Handler.`);\n logger.error(`Error thrown by:`, route);\n logger.error(err);\n logger.groupEnd();\n }\n return this._catchHandler.handle({ url, request, event });\n }\n throw err;\n });\n }\n return responsePromise;\n }\n /**\n * Checks a request and URL (and optionally an event) against the list of\n * registered routes, and if there's a match, returns the corresponding\n * route along with any params generated by the match.\n *\n * @param {Object} options\n * @param {URL} options.url\n * @param {boolean} options.sameOrigin The result of comparing `url.origin`\n * against the current origin.\n * @param {Request} options.request The request to match.\n * @param {Event} options.event The corresponding event.\n * @return {Object} An object with `route` and `params` properties.\n * They are populated if a matching route was found or `undefined`\n * otherwise.\n */\n findMatchingRoute({ url, sameOrigin, request, event, }) {\n const routes = this._routes.get(request.method) || [];\n for (const route of routes) {\n let params;\n // route.match returns type any, not possible to change right now.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const matchResult = route.match({ url, sameOrigin, request, event });\n if (matchResult) {\n if (process.env.NODE_ENV !== 'production') {\n // Warn developers that using an async matchCallback is almost always\n // not the right thing to do.\n if (matchResult instanceof Promise) {\n logger.warn(`While routing ${getFriendlyURL(url)}, an async ` +\n `matchCallback function was used. Please convert the ` +\n `following route to use a synchronous matchCallback function:`, route);\n }\n }\n // See https://github.com/GoogleChrome/workbox/issues/2079\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n params = matchResult;\n if (Array.isArray(params) && params.length === 0) {\n // Instead of passing an empty array in as params, use undefined.\n params = undefined;\n }\n else if (matchResult.constructor === Object && // eslint-disable-line\n Object.keys(matchResult).length === 0) {\n // Instead of passing an empty object in as params, use undefined.\n params = undefined;\n }\n else if (typeof matchResult === 'boolean') {\n // For the boolean value true (rather than just something truth-y),\n // don't set params.\n // See https://github.com/GoogleChrome/workbox/pull/2134#issuecomment-513924353\n params = undefined;\n }\n // Return early if have a match.\n return { route, params };\n }\n }\n // If no match was found above, return and empty object.\n return {};\n }\n /**\n * Define a default `handler` that's called when no routes explicitly\n * match the incoming request.\n *\n * Each HTTP method ('GET', 'POST', etc.) gets its own default handler.\n *\n * Without a default handler, unmatched requests will go against the\n * network as if there were no service worker present.\n *\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {string} [method='GET'] The HTTP method to associate with this\n * default handler. Each method has its own default.\n */\n setDefaultHandler(handler, method = defaultMethod) {\n this._defaultHandlerMap.set(method, normalizeHandler(handler));\n }\n /**\n * If a Route throws an error while handling a request, this `handler`\n * will be called and given a chance to provide a response.\n *\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n */\n setCatchHandler(handler) {\n this._catchHandler = normalizeHandler(handler);\n }\n /**\n * Registers a route with the router.\n *\n * @param {workbox-routing.Route} route The route to register.\n */\n registerRoute(route) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(route, 'object', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.hasMethod(route, 'match', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.isType(route.handler, 'object', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.hasMethod(route.handler, 'handle', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route.handler',\n });\n assert.isType(route.method, 'string', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route.method',\n });\n }\n if (!this._routes.has(route.method)) {\n this._routes.set(route.method, []);\n }\n // Give precedence to all of the earlier routes by adding this additional\n // route to the end of the array.\n this._routes.get(route.method).push(route);\n }\n /**\n * Unregisters a route with the router.\n *\n * @param {workbox-routing.Route} route The route to unregister.\n */\n unregisterRoute(route) {\n if (!this._routes.has(route.method)) {\n throw new WorkboxError('unregister-route-but-not-found-with-method', {\n method: route.method,\n });\n }\n const routeIndex = this._routes.get(route.method).indexOf(route);\n if (routeIndex > -1) {\n this._routes.get(route.method).splice(routeIndex, 1);\n }\n else {\n throw new WorkboxError('unregister-route-route-not-registered');\n }\n }\n}\nexport { Router };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { Router } from '../Router.js';\nimport '../_version.js';\nlet defaultRouter;\n/**\n * Creates a new, singleton Router instance if one does not exist. If one\n * does already exist, that instance is returned.\n *\n * @private\n * @return {Router}\n */\nexport const getOrCreateDefaultRouter = () => {\n if (!defaultRouter) {\n defaultRouter = new Router();\n // The helpers that use the default Router assume these listeners exist.\n defaultRouter.addFetchListener();\n defaultRouter.addCacheListener();\n }\n return defaultRouter;\n};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Route } from './Route.js';\nimport { RegExpRoute } from './RegExpRoute.js';\nimport { getOrCreateDefaultRouter } from './utils/getOrCreateDefaultRouter.js';\nimport './_version.js';\n/**\n * Easily register a RegExp, string, or function with a caching\n * strategy to a singleton Router instance.\n *\n * This method will generate a Route for you if needed and\n * call {@link workbox-routing.Router#registerRoute}.\n *\n * @param {RegExp|string|workbox-routing.Route~matchCallback|workbox-routing.Route} capture\n * If the capture param is a `Route`, all other arguments will be ignored.\n * @param {workbox-routing~handlerCallback} [handler] A callback\n * function that returns a Promise resulting in a Response. This parameter\n * is required if `capture` is not a `Route` object.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n * @return {workbox-routing.Route} The generated `Route`.\n *\n * @memberof workbox-routing\n */\nfunction registerRoute(capture, handler, method) {\n let route;\n if (typeof capture === 'string') {\n const captureUrl = new URL(capture, location.href);\n if (process.env.NODE_ENV !== 'production') {\n if (!(capture.startsWith('/') || capture.startsWith('http'))) {\n throw new WorkboxError('invalid-string', {\n moduleName: 'workbox-routing',\n funcName: 'registerRoute',\n paramName: 'capture',\n });\n }\n // We want to check if Express-style wildcards are in the pathname only.\n // TODO: Remove this log message in v4.\n const valueToCheck = capture.startsWith('http')\n ? captureUrl.pathname\n : capture;\n // See https://github.com/pillarjs/path-to-regexp#parameters\n const wildcards = '[*:?+]';\n if (new RegExp(`${wildcards}`).exec(valueToCheck)) {\n logger.debug(`The '$capture' parameter contains an Express-style wildcard ` +\n `character (${wildcards}). Strings are now always interpreted as ` +\n `exact matches; use a RegExp for partial or wildcard matches.`);\n }\n }\n const matchCallback = ({ url }) => {\n if (process.env.NODE_ENV !== 'production') {\n if (url.pathname === captureUrl.pathname &&\n url.origin !== captureUrl.origin) {\n logger.debug(`${capture} only partially matches the cross-origin URL ` +\n `${url.toString()}. This route will only handle cross-origin requests ` +\n `if they match the entire URL.`);\n }\n }\n return url.href === captureUrl.href;\n };\n // If `capture` is a string then `handler` and `method` must be present.\n route = new Route(matchCallback, handler, method);\n }\n else if (capture instanceof RegExp) {\n // If `capture` is a `RegExp` then `handler` and `method` must be present.\n route = new RegExpRoute(capture, handler, method);\n }\n else if (typeof capture === 'function') {\n // If `capture` is a function then `handler` and `method` must be present.\n route = new Route(capture, handler, method);\n }\n else if (capture instanceof Route) {\n route = capture;\n }\n else {\n throw new WorkboxError('unsupported-route-type', {\n moduleName: 'workbox-routing',\n funcName: 'registerRoute',\n paramName: 'capture',\n });\n }\n const defaultRouter = getOrCreateDefaultRouter();\n defaultRouter.registerRoute(route);\n return route;\n}\nexport { registerRoute };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { Route } from 'workbox-routing/Route.js';\nimport { generateURLVariations } from './utils/generateURLVariations.js';\nimport './_version.js';\n/**\n * A subclass of {@link workbox-routing.Route} that takes a\n * {@link workbox-precaching.PrecacheController}\n * instance and uses it to match incoming requests and handle fetching\n * responses from the precache.\n *\n * @memberof workbox-precaching\n * @extends workbox-routing.Route\n */\nclass PrecacheRoute extends Route {\n /**\n * @param {PrecacheController} precacheController A `PrecacheController`\n * instance used to both match requests and respond to fetch events.\n * @param {Object} [options] Options to control how requests are matched\n * against the list of precached URLs.\n * @param {string} [options.directoryIndex=index.html] The `directoryIndex` will\n * check cache entries for a URLs ending with '/' to see if there is a hit when\n * appending the `directoryIndex` value.\n * @param {Array} [options.ignoreURLParametersMatching=[/^utm_/, /^fbclid$/]] An\n * array of regex's to remove search params when looking for a cache match.\n * @param {boolean} [options.cleanURLs=true] The `cleanURLs` option will\n * check the cache for the URL with a `.html` added to the end of the end.\n * @param {workbox-precaching~urlManipulation} [options.urlManipulation]\n * This is a function that should take a URL and return an array of\n * alternative URLs that should be checked for precache matches.\n */\n constructor(precacheController, options) {\n const match = ({ request, }) => {\n const urlsToCacheKeys = precacheController.getURLsToCacheKeys();\n for (const possibleURL of generateURLVariations(request.url, options)) {\n const cacheKey = urlsToCacheKeys.get(possibleURL);\n if (cacheKey) {\n const integrity = precacheController.getIntegrityForCacheKey(cacheKey);\n return { cacheKey, integrity };\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Precaching did not find a match for ` + getFriendlyURL(request.url));\n }\n return;\n };\n super(match, precacheController.strategy);\n }\n}\nexport { PrecacheRoute };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { removeIgnoredSearchParams } from './removeIgnoredSearchParams.js';\nimport '../_version.js';\n/**\n * Generator function that yields possible variations on the original URL to\n * check, one at a time.\n *\n * @param {string} url\n * @param {Object} options\n *\n * @private\n * @memberof workbox-precaching\n */\nexport function* generateURLVariations(url, { ignoreURLParametersMatching = [/^utm_/, /^fbclid$/], directoryIndex = 'index.html', cleanURLs = true, urlManipulation, } = {}) {\n const urlObject = new URL(url, location.href);\n urlObject.hash = '';\n yield urlObject.href;\n const urlWithoutIgnoredParams = removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching);\n yield urlWithoutIgnoredParams.href;\n if (directoryIndex && urlWithoutIgnoredParams.pathname.endsWith('/')) {\n const directoryURL = new URL(urlWithoutIgnoredParams.href);\n directoryURL.pathname += directoryIndex;\n yield directoryURL.href;\n }\n if (cleanURLs) {\n const cleanURL = new URL(urlWithoutIgnoredParams.href);\n cleanURL.pathname += '.html';\n yield cleanURL.href;\n }\n if (urlManipulation) {\n const additionalURLs = urlManipulation({ url: urlObject });\n for (const urlToAttempt of additionalURLs) {\n yield urlToAttempt.href;\n }\n }\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * Removes any URL search parameters that should be ignored.\n *\n * @param {URL} urlObject The original URL.\n * @param {Array} ignoreURLParametersMatching RegExps to test against\n * each search parameter name. Matches mean that the search parameter should be\n * ignored.\n * @return {URL} The URL with any ignored search parameters removed.\n *\n * @private\n * @memberof workbox-precaching\n */\nexport function removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching = []) {\n // Convert the iterable into an array at the start of the loop to make sure\n // deletion doesn't mess up iteration.\n for (const paramName of [...urlObject.searchParams.keys()]) {\n if (ignoreURLParametersMatching.some((regExp) => regExp.test(paramName))) {\n urlObject.searchParams.delete(paramName);\n }\n }\n return urlObject;\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nexport const cacheOkAndOpaquePlugin = {\n /**\n * Returns a valid response (to allow caching) if the status is 200 (OK) or\n * 0 (opaque).\n *\n * @param {Object} options\n * @param {Response} options.response\n * @return {Response|null}\n *\n * @private\n */\n cacheWillUpdate: async ({ response }) => {\n if (response.status === 200 || response.status === 0) {\n return response;\n }\n return null;\n },\n};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { addRoute } from './addRoute.js';\nimport { precache } from './precache.js';\nimport './_version.js';\n/**\n * This method will add entries to the precache list and add a route to\n * respond to fetch events.\n *\n * This is a convenience method that will call\n * {@link workbox-precaching.precache} and\n * {@link workbox-precaching.addRoute} in a single call.\n *\n * @param {Array} entries Array of entries to precache.\n * @param {Object} [options] See the\n * {@link workbox-precaching.PrecacheRoute} options.\n *\n * @memberof workbox-precaching\n */\nfunction precacheAndRoute(entries, options) {\n precache(entries);\n addRoute(options);\n}\nexport { precacheAndRoute };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport './_version.js';\n/**\n * Claim any currently available clients once the service worker\n * becomes active. This is normally used in conjunction with `skipWaiting()`.\n *\n * @memberof workbox-core\n */\nfunction clientsClaim() {\n self.addEventListener('activate', () => self.clients.claim());\n}\nexport { clientsClaim };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport './_version.js';\n/**\n * Adds items to the precache list, removing any duplicates and\n * stores the files in the\n * {@link workbox-core.cacheNames|\"precache cache\"} when the service\n * worker installs.\n *\n * This method can be called multiple times.\n *\n * Please note: This method **will not** serve any of the cached files for you.\n * It only precaches files. To respond to a network request you call\n * {@link workbox-precaching.addRoute}.\n *\n * If you have a single array of files to precache, you can just call\n * {@link workbox-precaching.precacheAndRoute}.\n *\n * @param {Array} [entries=[]] Array of entries to precache.\n *\n * @memberof workbox-precaching\n */\nfunction precache(entries) {\n const precacheController = getOrCreatePrecacheController();\n precacheController.precache(entries);\n}\nexport { precache };\n","// / \n/* eslint-disable no-restricted-globals */\n\n// This service worker can be customized!\n// See https://developers.google.com/web/tools/workbox/modules\n// for the list of available Workbox modules, or add any other\n// code you'd like.\n// You can also remove this file if you'd prefer not to use a\n// service worker, and the Workbox build step will be skipped.\n\nimport { clientsClaim } from 'workbox-core'\nimport { ExpirationPlugin } from 'workbox-expiration'\nimport { precacheAndRoute, createHandlerBoundToURL } from 'workbox-precaching'\nimport { registerRoute } from 'workbox-routing'\nimport { StaleWhileRevalidate } from 'workbox-strategies'\n\ndeclare const self: ServiceWorkerGlobalScope\n\nclientsClaim()\n\n// Precache all of the assets generated by your build process.\n// Their URLs are injected into the manifest variable below.\n// This variable must be present somewhere in your service worker file,\n// even if you decide not to use precaching. See https://cra.link/PWA\nprecacheAndRoute(self.__WB_MANIFEST)\n\n// Set up App Shell-style routing, so that all navigation requests\n// are fulfilled with your index.html shell. Learn more at\n// https://developers.google.com/web/fundamentals/architecture/app-shell\nconst fileExtensionRegexp = new RegExp('/[^/?]+\\\\.[^/]+$')\nregisterRoute(\n // Return false to exempt requests from being fulfilled by index.html.\n ({ request, url }: { request: Request; url: URL }) => {\n // If this isn't a navigation, skip.\n if (request.mode !== 'navigate') {\n return false\n }\n\n // If this is a URL that starts with /_, skip.\n if (url.pathname.startsWith('/_')) {\n return false\n }\n\n // If this looks like a URL for a resource, because it contains\n // a file extension, skip.\n if (url.pathname.match(fileExtensionRegexp)) {\n return false\n }\n\n // Return true to signal that we want to use the handler.\n return true\n },\n createHandlerBoundToURL(process.env.PUBLIC_URL + '/index.html'),\n)\n\n// An example runtime caching route for requests that aren't handled by the\n// precache, in this case same-origin .png requests like those from in public/\nregisterRoute(\n // Add in any other file extensions or routing criteria as needed.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n ({ url }) => url.origin === self.location.origin && url.pathname.endsWith('.png'),\n // Customize this strategy as needed, e.g., by changing to CacheFirst.\n new StaleWhileRevalidate({\n cacheName: 'images',\n plugins: [\n // Ensure that once this runtime cache reaches a maximum size the\n // least-recently used images are removed.\n new ExpirationPlugin({ maxEntries: 50 }),\n ],\n }),\n)\n\n// This allows the web app to trigger skipWaiting via\n// registration.waiting.postMessage({type: 'SKIP_WAITING'})\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n self.skipWaiting()\n }\n})\n\n// Any other custom service worker logic can go here.\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { registerRoute } from 'workbox-routing/registerRoute.js';\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport { PrecacheRoute } from './PrecacheRoute.js';\nimport './_version.js';\n/**\n * Add a `fetch` listener to the service worker that will\n * respond to\n * [network requests]{@link https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Custom_responses_to_requests}\n * with precached assets.\n *\n * Requests for assets that aren't precached, the `FetchEvent` will not be\n * responded to, allowing the event to fall through to other `fetch` event\n * listeners.\n *\n * @param {Object} [options] See the {@link workbox-precaching.PrecacheRoute}\n * options.\n *\n * @memberof workbox-precaching\n */\nfunction addRoute(options) {\n const precacheController = getOrCreatePrecacheController();\n const precacheRoute = new PrecacheRoute(precacheController, options);\n registerRoute(precacheRoute);\n}\nexport { addRoute };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport './_version.js';\n/**\n * Helper function that calls\n * {@link PrecacheController#createHandlerBoundToURL} on the default\n * {@link PrecacheController} instance.\n *\n * If you are creating your own {@link PrecacheController}, then call the\n * {@link PrecacheController#createHandlerBoundToURL} on that instance,\n * instead of using this function.\n *\n * @param {string} url The precached URL which will be used to lookup the\n * `Response`.\n * @param {boolean} [fallbackToNetwork=true] Whether to attempt to get the\n * response from the network if there's a precache miss.\n * @return {workbox-routing~handlerCallback}\n *\n * @memberof workbox-precaching\n */\nfunction createHandlerBoundToURL(url) {\n const precacheController = getOrCreatePrecacheController();\n return precacheController.createHandlerBoundToURL(url);\n}\nexport { createHandlerBoundToURL };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { cacheOkAndOpaquePlugin } from './plugins/cacheOkAndOpaquePlugin.js';\nimport { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [stale-while-revalidate](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#stale-while-revalidate)\n * request strategy.\n *\n * Resources are requested from both the cache and the network in parallel.\n * The strategy will respond with the cached version if available, otherwise\n * wait for the network response. The cache is updated with the network response\n * with each successful request.\n *\n * By default, this strategy will cache responses with a 200 status code as\n * well as [opaque responses](https://developer.chrome.com/docs/workbox/caching-resources-during-runtime/#opaque-responses).\n * Opaque responses are cross-origin requests where the response doesn't\n * support [CORS](https://enable-cors.org/).\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @extends workbox-strategies.Strategy\n * @memberof workbox-strategies\n */\nclass StaleWhileRevalidate extends Strategy {\n /**\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * {@link workbox-core.cacheNames}.\n * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `fetch()` requests made by this strategy.\n * @param {Object} [options.matchOptions] [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n */\n constructor(options = {}) {\n super(options);\n // If this instance contains no plugins with a 'cacheWillUpdate' callback,\n // prepend the `cacheOkAndOpaquePlugin` plugin to the plugins list.\n if (!this.plugins.some((p) => 'cacheWillUpdate' in p)) {\n this.plugins.unshift(cacheOkAndOpaquePlugin);\n }\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const logs = [];\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'handle',\n paramName: 'request',\n });\n }\n const fetchAndCachePromise = handler.fetchAndCachePut(request).catch(() => {\n // Swallow this error because a 'no-response' error will be thrown in\n // main handler return flow. This will be in the `waitUntil()` flow.\n });\n void handler.waitUntil(fetchAndCachePromise);\n let response = await handler.cacheMatch(request);\n let error;\n if (response) {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`Found a cached response in the '${this.cacheName}'` +\n ` cache. Will update with the network response in the background.`);\n }\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`No response found in the '${this.cacheName}' cache. ` +\n `Will wait for the network response.`);\n }\n try {\n // NOTE(philipwalton): Really annoying that we have to type cast here.\n // https://github.com/microsoft/TypeScript/issues/20006\n response = (await fetchAndCachePromise);\n }\n catch (err) {\n if (err instanceof Error) {\n error = err;\n }\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n for (const log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url, error });\n }\n return response;\n }\n}\nexport { StaleWhileRevalidate };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { dontWaitFor } from 'workbox-core/_private/dontWaitFor.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { registerQuotaErrorCallback } from 'workbox-core/registerQuotaErrorCallback.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { CacheExpiration } from './CacheExpiration.js';\nimport './_version.js';\n/**\n * This plugin can be used in a `workbox-strategy` to regularly enforce a\n * limit on the age and / or the number of cached requests.\n *\n * It can only be used with `workbox-strategy` instances that have a\n * [custom `cacheName` property set](/web/tools/workbox/guides/configure-workbox#custom_cache_names_in_strategies).\n * In other words, it can't be used to expire entries in strategy that uses the\n * default runtime cache name.\n *\n * Whenever a cached response is used or updated, this plugin will look\n * at the associated cache and remove any old or extra responses.\n *\n * When using `maxAgeSeconds`, responses may be used *once* after expiring\n * because the expiration clean up will not have occurred until *after* the\n * cached response has been used. If the response has a \"Date\" header, then\n * a light weight expiration check is performed and the response will not be\n * used immediately.\n *\n * When using `maxEntries`, the entry least-recently requested will be removed\n * from the cache first.\n *\n * @memberof workbox-expiration\n */\nclass ExpirationPlugin {\n /**\n * @param {ExpirationPluginOptions} config\n * @param {number} [config.maxEntries] The maximum number of entries to cache.\n * Entries used the least will be removed as the maximum is reached.\n * @param {number} [config.maxAgeSeconds] The maximum age of an entry before\n * it's treated as stale and removed.\n * @param {Object} [config.matchOptions] The [`CacheQueryOptions`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/delete#Parameters)\n * that will be used when calling `delete()` on the cache.\n * @param {boolean} [config.purgeOnQuotaError] Whether to opt this cache in to\n * automatic deletion if the available storage quota has been exceeded.\n */\n constructor(config = {}) {\n /**\n * A \"lifecycle\" callback that will be triggered automatically by the\n * `workbox-strategies` handlers when a `Response` is about to be returned\n * from a [Cache](https://developer.mozilla.org/en-US/docs/Web/API/Cache) to\n * the handler. It allows the `Response` to be inspected for freshness and\n * prevents it from being used if the `Response`'s `Date` header value is\n * older than the configured `maxAgeSeconds`.\n *\n * @param {Object} options\n * @param {string} options.cacheName Name of the cache the response is in.\n * @param {Response} options.cachedResponse The `Response` object that's been\n * read from a cache and whose freshness should be checked.\n * @return {Response} Either the `cachedResponse`, if it's\n * fresh, or `null` if the `Response` is older than `maxAgeSeconds`.\n *\n * @private\n */\n this.cachedResponseWillBeUsed = async ({ event, request, cacheName, cachedResponse, }) => {\n if (!cachedResponse) {\n return null;\n }\n const isFresh = this._isResponseDateFresh(cachedResponse);\n // Expire entries to ensure that even if the expiration date has\n // expired, it'll only be used once.\n const cacheExpiration = this._getCacheExpiration(cacheName);\n dontWaitFor(cacheExpiration.expireEntries());\n // Update the metadata for the request URL to the current timestamp,\n // but don't `await` it as we don't want to block the response.\n const updateTimestampDone = cacheExpiration.updateTimestamp(request.url);\n if (event) {\n try {\n event.waitUntil(updateTimestampDone);\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n // The event may not be a fetch event; only log the URL if it is.\n if ('request' in event) {\n logger.warn(`Unable to ensure service worker stays alive when ` +\n `updating cache entry for ` +\n `'${getFriendlyURL(event.request.url)}'.`);\n }\n }\n }\n }\n return isFresh ? cachedResponse : null;\n };\n /**\n * A \"lifecycle\" callback that will be triggered automatically by the\n * `workbox-strategies` handlers when an entry is added to a cache.\n *\n * @param {Object} options\n * @param {string} options.cacheName Name of the cache that was updated.\n * @param {string} options.request The Request for the cached entry.\n *\n * @private\n */\n this.cacheDidUpdate = async ({ cacheName, request, }) => {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(cacheName, 'string', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'cacheDidUpdate',\n paramName: 'cacheName',\n });\n assert.isInstance(request, Request, {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'cacheDidUpdate',\n paramName: 'request',\n });\n }\n const cacheExpiration = this._getCacheExpiration(cacheName);\n await cacheExpiration.updateTimestamp(request.url);\n await cacheExpiration.expireEntries();\n };\n if (process.env.NODE_ENV !== 'production') {\n if (!(config.maxEntries || config.maxAgeSeconds)) {\n throw new WorkboxError('max-entries-or-age-required', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'constructor',\n });\n }\n if (config.maxEntries) {\n assert.isType(config.maxEntries, 'number', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'constructor',\n paramName: 'config.maxEntries',\n });\n }\n if (config.maxAgeSeconds) {\n assert.isType(config.maxAgeSeconds, 'number', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'constructor',\n paramName: 'config.maxAgeSeconds',\n });\n }\n }\n this._config = config;\n this._maxAgeSeconds = config.maxAgeSeconds;\n this._cacheExpirations = new Map();\n if (config.purgeOnQuotaError) {\n registerQuotaErrorCallback(() => this.deleteCacheAndMetadata());\n }\n }\n /**\n * A simple helper method to return a CacheExpiration instance for a given\n * cache name.\n *\n * @param {string} cacheName\n * @return {CacheExpiration}\n *\n * @private\n */\n _getCacheExpiration(cacheName) {\n if (cacheName === cacheNames.getRuntimeName()) {\n throw new WorkboxError('expire-custom-caches-only');\n }\n let cacheExpiration = this._cacheExpirations.get(cacheName);\n if (!cacheExpiration) {\n cacheExpiration = new CacheExpiration(cacheName, this._config);\n this._cacheExpirations.set(cacheName, cacheExpiration);\n }\n return cacheExpiration;\n }\n /**\n * @param {Response} cachedResponse\n * @return {boolean}\n *\n * @private\n */\n _isResponseDateFresh(cachedResponse) {\n if (!this._maxAgeSeconds) {\n // We aren't expiring by age, so return true, it's fresh\n return true;\n }\n // Check if the 'date' header will suffice a quick expiration check.\n // See https://github.com/GoogleChromeLabs/sw-toolbox/issues/164 for\n // discussion.\n const dateHeaderTimestamp = this._getDateHeaderTimestamp(cachedResponse);\n if (dateHeaderTimestamp === null) {\n // Unable to parse date, so assume it's fresh.\n return true;\n }\n // If we have a valid headerTime, then our response is fresh iff the\n // headerTime plus maxAgeSeconds is greater than the current time.\n const now = Date.now();\n return dateHeaderTimestamp >= now - this._maxAgeSeconds * 1000;\n }\n /**\n * This method will extract the data header and parse it into a useful\n * value.\n *\n * @param {Response} cachedResponse\n * @return {number|null}\n *\n * @private\n */\n _getDateHeaderTimestamp(cachedResponse) {\n if (!cachedResponse.headers.has('date')) {\n return null;\n }\n const dateHeader = cachedResponse.headers.get('date');\n const parsedDate = new Date(dateHeader);\n const headerTime = parsedDate.getTime();\n // If the Date header was invalid for some reason, parsedDate.getTime()\n // will return NaN.\n if (isNaN(headerTime)) {\n return null;\n }\n return headerTime;\n }\n /**\n * This is a helper method that performs two operations:\n *\n * - Deletes *all* the underlying Cache instances associated with this plugin\n * instance, by calling caches.delete() on your behalf.\n * - Deletes the metadata from IndexedDB used to keep track of expiration\n * details for each Cache instance.\n *\n * When using cache expiration, calling this method is preferable to calling\n * `caches.delete()` directly, since this will ensure that the IndexedDB\n * metadata is also cleanly removed and open IndexedDB instances are deleted.\n *\n * Note that if you're *not* using cache expiration for a given cache, calling\n * `caches.delete()` and passing in the cache's name should be sufficient.\n * There is no Workbox-specific method needed for cleanup in that case.\n */\n async deleteCacheAndMetadata() {\n // Do this one at a time instead of all at once via `Promise.all()` to\n // reduce the chance of inconsistency if a promise rejects.\n for (const [cacheName, cacheExpiration] of this._cacheExpirations) {\n await self.caches.delete(cacheName);\n await cacheExpiration.delete();\n }\n // Reset this._cacheExpirations to its initial state.\n this._cacheExpirations = new Map();\n }\n}\nexport { ExpirationPlugin };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from './_private/logger.js';\nimport { assert } from './_private/assert.js';\nimport { quotaErrorCallbacks } from './models/quotaErrorCallbacks.js';\nimport './_version.js';\n/**\n * Adds a function to the set of quotaErrorCallbacks that will be executed if\n * there's a quota error.\n *\n * @param {Function} callback\n * @memberof workbox-core\n */\n// Can't change Function type\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction registerQuotaErrorCallback(callback) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(callback, 'function', {\n moduleName: 'workbox-core',\n funcName: 'register',\n paramName: 'callback',\n });\n }\n quotaErrorCallbacks.add(callback);\n if (process.env.NODE_ENV !== 'production') {\n logger.log('Registered a callback to respond to quota errors.', callback);\n }\n}\nexport { registerQuotaErrorCallback };\n"]} \ No newline at end of file diff --git a/build/static/css/main.634cee6a.css b/build/static/css/main.634cee6a.css new file mode 100644 index 0000000..b659af5 --- /dev/null +++ b/build/static/css/main.634cee6a.css @@ -0,0 +1,4 @@ +/* +! tailwindcss v3.3.5 | MIT License | https://tailwindcss.com +*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;font-feature-settings:normal;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}.tooltip-arrow,.tooltip-arrow:before{background:inherit;height:8px;position:absolute;width:8px}.tooltip-arrow{visibility:hidden}.tooltip-arrow:before{content:"";transform:rotate(45deg);visibility:visible}[data-tooltip-style^=light]+.tooltip>.tooltip-arrow:before{border-color:#e5e7eb;border-style:solid}[data-tooltip-style^=light]+.tooltip[data-popper-placement^=top]>.tooltip-arrow:before{border-bottom-width:1px;border-right-width:1px}[data-tooltip-style^=light]+.tooltip[data-popper-placement^=right]>.tooltip-arrow:before{border-bottom-width:1px;border-left-width:1px}[data-tooltip-style^=light]+.tooltip[data-popper-placement^=bottom]>.tooltip-arrow:before{border-left-width:1px;border-top-width:1px}[data-tooltip-style^=light]+.tooltip[data-popper-placement^=left]>.tooltip-arrow:before{border-right-width:1px;border-top-width:1px}.tooltip[data-popper-placement^=top]>.tooltip-arrow{bottom:-4px}.tooltip[data-popper-placement^=bottom]>.tooltip-arrow{top:-4px}.tooltip[data-popper-placement^=left]>.tooltip-arrow{right:-4px}.tooltip[data-popper-placement^=right]>.tooltip-arrow{left:-4px}.tooltip.invisible>.tooltip-arrow:before{visibility:hidden}[data-popper-arrow],[data-popper-arrow]:before{background:inherit;height:8px;position:absolute;width:8px}[data-popper-arrow]{visibility:hidden}[data-popper-arrow]:after,[data-popper-arrow]:before{content:"";transform:rotate(45deg);visibility:visible}[data-popper-arrow]:after{background:inherit;height:9px;position:absolute;width:9px}[role=tooltip]>[data-popper-arrow]:before{border-color:#e5e7eb;border-style:solid}.dark [role=tooltip]>[data-popper-arrow]:before{border-color:#4b5563;border-style:solid}[role=tooltip]>[data-popper-arrow]:after{border-color:#e5e7eb;border-style:solid}.dark [role=tooltip]>[data-popper-arrow]:after{border-color:#4b5563;border-style:solid}[data-popover][role=tooltip][data-popper-placement^=top]>[data-popper-arrow]:after,[data-popover][role=tooltip][data-popper-placement^=top]>[data-popper-arrow]:before{border-bottom-width:1px;border-right-width:1px}[data-popover][role=tooltip][data-popper-placement^=right]>[data-popper-arrow]:after,[data-popover][role=tooltip][data-popper-placement^=right]>[data-popper-arrow]:before{border-bottom-width:1px;border-left-width:1px}[data-popover][role=tooltip][data-popper-placement^=bottom]>[data-popper-arrow]:after,[data-popover][role=tooltip][data-popper-placement^=bottom]>[data-popper-arrow]:before{border-left-width:1px;border-top-width:1px}[data-popover][role=tooltip][data-popper-placement^=left]>[data-popper-arrow]:after,[data-popover][role=tooltip][data-popper-placement^=left]>[data-popper-arrow]:before{border-right-width:1px;border-top-width:1px}[data-popover][role=tooltip][data-popper-placement^=top]>[data-popper-arrow]{bottom:-5px}[data-popover][role=tooltip][data-popper-placement^=bottom]>[data-popper-arrow]{top:-5px}[data-popover][role=tooltip][data-popper-placement^=left]>[data-popper-arrow]{right:-5px}[data-popover][role=tooltip][data-popper-placement^=right]>[data-popper-arrow]{left:-5px}[role=tooltip].invisible>[data-popper-arrow]:after,[role=tooltip].invisible>[data-popper-arrow]:before{visibility:hidden}[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],select,textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}[multiple]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,select:focus,textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#1c64f2;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#1c64f2;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em}select:not([size]){background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg aria-hidden='true' xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 10 6'%3E%3Cpath stroke='%236B7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m1 1 4 4 4-4'/%3E%3C/svg%3E");background-position:right .75rem center;background-repeat:no-repeat;background-size:.75em .75em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}:is([dir=rtl]) select:not([size]){background-position:left .75rem center;padding-left:0;padding-right:.75rem}[multiple]{background-image:none;background-position:0 0;background-repeat:repeat;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:inherit;print-color-adjust:inherit}[type=checkbox],[type=radio]{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:#6b7280;border-width:1px;color:#1c64f2;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;user-select:none;vertical-align:middle;width:1rem}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#1c64f2;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.dark [type=checkbox]:checked,.dark [type=radio]:checked,[type=checkbox]:checked,[type=radio]:checked{background-color:currentColor;background-position:50%;background-repeat:no-repeat;background-size:.55em .55em;border-color:#0000}[type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg aria-hidden='true' xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 12'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M1 5.917 5.724 10.5 15 1.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:.55em .55em;-webkit-print-color-adjust:exact;print-color-adjust:exact}.dark [type=radio]:checked,[type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E");background-size:1em 1em}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg aria-hidden='true' xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 12'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M1 5.917 5.724 10.5 15 1.5'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:.55em .55em;-webkit-print-color-adjust:exact;print-color-adjust:exact}[type=checkbox]:indeterminate,[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:#0000}[type=file]{background:#0000 none repeat 0 0/auto auto padding-box border-box scroll;background:initial;border-color:inherit;border-radius:0;border-width:0;font-size:inherit;line-height:inherit;padding:0}[type=file]:focus{outline:1px auto inherit}input[type=file]::-webkit-file-upload-button{background:#1f2937;border:0;color:#fff;cursor:pointer;font-size:.875rem;font-weight:500;margin-inline-end:1rem;margin-inline-start:-1rem;padding:.625rem 1rem .625rem 2rem}input[type=file]::file-selector-button{background:#1f2937;border:0;color:#fff;cursor:pointer;font-size:.875rem;font-weight:500;margin-inline-end:1rem;margin-inline-start:-1rem;padding:.625rem 1rem .625rem 2rem}input[type=file]::-webkit-file-upload-button:hover{background:#374151}input[type=file]::file-selector-button:hover{background:#374151}:is([dir=rtl]) input[type=file]::-webkit-file-upload-button{padding-left:1rem;padding-right:2rem}:is([dir=rtl]) input[type=file]::file-selector-button{padding-left:1rem;padding-right:2rem}.dark input[type=file]::-webkit-file-upload-button{background:#4b5563;color:#fff}.dark input[type=file]::file-selector-button{background:#4b5563;color:#fff}.dark input[type=file]::-webkit-file-upload-button:hover{background:#6b7280}.dark input[type=file]::file-selector-button:hover{background:#6b7280}input[type=range]::-webkit-slider-thumb{appearance:none;-moz-appearance:none;-webkit-appearance:none;background:#1c64f2;border:0;border-radius:9999px;cursor:pointer;height:1.25rem;width:1.25rem}input[type=range]:disabled::-webkit-slider-thumb{background:#9ca3af}.dark input[type=range]:disabled::-webkit-slider-thumb{background:#6b7280}input[type=range]:focus::-webkit-slider-thumb{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1px;--tw-ring-color:rgb(164 202 254/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),0 0 #0000;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}input[type=range]::-moz-range-thumb{appearance:none;-moz-appearance:none;-webkit-appearance:none;background:#1c64f2;border:0;border-radius:9999px;cursor:pointer;height:1.25rem;width:1.25rem}input[type=range]:disabled::-moz-range-thumb{background:#9ca3af}.dark input[type=range]:disabled::-moz-range-thumb{background:#6b7280}input[type=range]::-moz-range-progress{background:#3f83f8}input[type=range]::-ms-fill-lower{background:#3f83f8}input[type=range].range-sm::-webkit-slider-thumb{height:1rem;width:1rem}input[type=range].range-lg::-webkit-slider-thumb{height:1.5rem;width:1.5rem}input[type=range].range-sm::-moz-range-thumb{height:1rem;width:1rem}input[type=range].range-lg::-moz-range-thumb{height:1.5rem;width:1.5rem}.toggle-bg:after{background:#fff;border-color:#d1d5db;border-radius:9999px;border-width:1px;box-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);content:"";height:1.25rem;left:.125rem;position:absolute;top:.125rem;transition-duration:.15s;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;width:1.25rem}input:checked+.toggle-bg:after{border-color:#fff;transform:translateX(100%)}input:checked+.toggle-bg{background:#1c64f2;border-color:#1c64f2}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3f83f880;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3f83f880;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{margin-left:auto;margin-right:auto;width:100%}@media (min-width:100%){.container{max-width:100%}}@media (min-width:1920px){.container{max-width:1920px}}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.inset-y-0{bottom:0;top:0}.-bottom-1{bottom:-.25rem}.-bottom-24{bottom:-6rem}.-left-1{left:-.25rem}.-left-1\.5{left:-.375rem}.-left-3{left:-.75rem}.-right-1{right:-.25rem}.-right-3{right:-.75rem}.-top-1{top:-.25rem}.bottom-0{bottom:0}.bottom-1{bottom:.25rem}.bottom-5{bottom:1.25rem}.bottom-\[60px\]{bottom:60px}.left-0{left:0}.left-1{left:.25rem}.left-1\/2{left:50%}.left-2{left:.5rem}.left-2\.5{left:.625rem}.left-3{left:.75rem}.left-4{left:1rem}.left-5{left:1.25rem}.left-6{left:1.5rem}.right-0{right:0}.top-0{top:0}.top-1\/2{top:50%}.top-10{top:2.5rem}.top-2{top:.5rem}.top-3{top:.75rem}.top-4{top:1rem}.-z-10{z-index:-10}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-auto{z-index:auto}.m-auto{margin:auto}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-mx-1\.5{margin-left:-.375rem;margin-right:-.375rem}.-my-1{margin-bottom:-.25rem;margin-top:-.25rem}.-my-1\.5{margin-bottom:-.375rem;margin-top:-.375rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-bottom:.25rem;margin-top:.25rem}.my-3{margin-bottom:.75rem;margin-top:.75rem}.my-6{margin-bottom:1.5rem;margin-top:1.5rem}.my-auto{margin-bottom:auto;margin-top:auto}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.ml-0{margin-left:0}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-6{margin-left:1.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.block{display:block}.inline-block{display:inline-block}.\!inline{display:inline!important}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-0{height:0}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-20{height:5rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-36{height:9rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-auto{height:auto}.h-fit{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.h-full{height:100%}.h-modal{height:calc(100% - 2rem)}.h-px{height:1px}.h-screen{height:100vh}.max-h-\[90vh\]{max-height:90vh}.min-h-\[20px\]{min-height:20px}.min-h-\[50px\]{min-height:50px}.min-h-screen{min-height:100vh}.w-0{width:0}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-116{width:460px}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\/4{width:50%}.w-20{width:5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-36{width:9rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-52{width:13rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-auto{width:auto}.w-fit{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1}.flex-shrink{flex-shrink:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.origin-\[0\]{transform-origin:0}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-full{--tw-translate-x:-100%}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-1\/2,.-translate-y-4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-4{--tw-translate-y:-1rem}.-translate-y-6{--tw-translate-y:-1.5rem}.-translate-y-6,.-translate-y-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-full{--tw-translate-y:-100%}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x:100%}.translate-y-full{--tw-translate-y:100%}.rotate-180,.translate-y-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.rotate-45{--tw-rotate:45deg}.rotate-45,.scale-75{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-75{--tw-scale-x:.75;--tw-scale-y:.75}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform-none{transform:none}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.resize-none{resize:none}.resize{resize:both}.snap-x{scroll-snap-type:x var(--tw-scroll-snap-strictness)}.snap-mandatory{--tw-scroll-snap-strictness:mandatory}.snap-center{scroll-snap-align:center}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;appearance:none}.grid-flow-col{grid-auto-flow:column}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-stretch{justify-content:stretch}.justify-items-stretch{justify-items:stretch}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.-space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1rem*var(--tw-space-x-reverse))}.-space-x-px>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1px*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1px*var(--tw-space-x-reverse))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.75rem*var(--tw-space-x-reverse))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-left-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-right-width:calc(1px*var(--tw-divide-x-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(243 244 246/var(--tw-divide-opacity))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(229 231 235/var(--tw-divide-opacity))}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.overflow-x-scroll{overflow-x:scroll}.scroll-smooth{scroll-behavior:smooth}.whitespace-nowrap{white-space:nowrap}.whitespace-break-spaces{white-space:break-spaces}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded-b{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-e-lg{border-end-end-radius:.5rem;border-start-end-radius:.5rem}.rounded-l-lg{border-bottom-left-radius:.5rem;border-top-left-radius:.5rem}.rounded-l-md{border-bottom-left-radius:.375rem;border-top-left-radius:.375rem}.rounded-l-none{border-bottom-left-radius:0;border-top-left-radius:0}.rounded-r-lg{border-bottom-right-radius:.5rem;border-top-right-radius:.5rem}.rounded-r-none{border-bottom-right-radius:0;border-top-right-radius:0}.rounded-s-lg{border-end-start-radius:.5rem;border-start-start-radius:.5rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-0{border-left-width:0}.border-r-0{border-right-width:0}.border-t{border-top-width:1px}.border-t-4{border-top-width:4px}.border-none{border-style:none}.border-black\/10{border-color:#0202021a}.border-blue-600{--tw-border-opacity:1;border-color:rgb(28 100 242/var(--tw-border-opacity))}.border-blue-700{--tw-border-opacity:1;border-color:rgb(26 86 219/var(--tw-border-opacity))}.border-cyan-300{--tw-border-opacity:1;border-color:rgb(103 232 249/var(--tw-border-opacity))}.border-cyan-500{--tw-border-opacity:1;border-color:rgb(6 182 212/var(--tw-border-opacity))}.border-cyan-600{--tw-border-opacity:1;border-color:rgb(8 145 178/var(--tw-border-opacity))}.border-cyan-700{--tw-border-opacity:1;border-color:rgb(14 116 144/var(--tw-border-opacity))}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.border-gray-500{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.border-gray-900{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}.border-indigo-300{--tw-border-opacity:1;border-color:rgb(180 198 252/var(--tw-border-opacity))}.border-indigo-400{--tw-border-opacity:1;border-color:rgb(141 162 251/var(--tw-border-opacity))}.border-indigo-500{--tw-border-opacity:1;border-color:rgb(104 117 245/var(--tw-border-opacity))}.border-lime-300{--tw-border-opacity:1;border-color:rgb(190 242 100/var(--tw-border-opacity))}.border-lime-400{--tw-border-opacity:1;border-color:rgb(163 230 53/var(--tw-border-opacity))}.border-lime-500{--tw-border-opacity:1;border-color:rgb(132 204 22/var(--tw-border-opacity))}.border-pink-300{--tw-border-opacity:1;border-color:rgb(248 180 217/var(--tw-border-opacity))}.border-pink-500{--tw-border-opacity:1;border-color:rgb(231 70 148/var(--tw-border-opacity))}.border-pink-600{--tw-border-opacity:1;border-color:rgb(214 31 105/var(--tw-border-opacity))}.border-purple-500{--tw-border-opacity:1;border-color:rgb(144 97 249/var(--tw-border-opacity))}.border-purple-900{--tw-border-opacity:1;border-color:rgb(74 29 150/var(--tw-border-opacity))}.border-red-300{--tw-border-opacity:1;border-color:rgb(248 180 180/var(--tw-border-opacity))}.border-red-500{--tw-border-opacity:1;border-color:rgb(240 82 82/var(--tw-border-opacity))}.border-red-600{--tw-border-opacity:1;border-color:rgb(224 36 36/var(--tw-border-opacity))}.border-red-800{--tw-border-opacity:1;border-color:rgb(155 28 28/var(--tw-border-opacity))}.border-red-900{--tw-border-opacity:1;border-color:rgb(119 29 29/var(--tw-border-opacity))}.border-teal-300{--tw-border-opacity:1;border-color:rgb(126 220 226/var(--tw-border-opacity))}.border-teal-500{--tw-border-opacity:1;border-color:rgb(6 148 162/var(--tw-border-opacity))}.border-transparent{border-color:#0000}.border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.border-yellow-300{--tw-border-opacity:1;border-color:rgb(250 202 21/var(--tw-border-opacity))}.border-yellow-400{--tw-border-opacity:1;border-color:rgb(227 160 8/var(--tw-border-opacity))}.border-yellow-500{--tw-border-opacity:1;border-color:rgb(194 120 3/var(--tw-border-opacity))}.border-yellow-600{--tw-border-opacity:1;border-color:rgb(159 88 10/var(--tw-border-opacity))}.bg-background{--tw-bg-opacity:1;background-color:rgb(242 242 242/var(--tw-bg-opacity))}.bg-black{--tw-bg-opacity:1;background-color:rgb(2 2 2/var(--tw-bg-opacity))}.bg-blue-700{--tw-bg-opacity:1;background-color:rgb(26 86 219/var(--tw-bg-opacity))}.bg-cyan-100{--tw-bg-opacity:1;background-color:rgb(207 250 254/var(--tw-bg-opacity))}.bg-cyan-200{--tw-bg-opacity:1;background-color:rgb(165 243 252/var(--tw-bg-opacity))}.bg-cyan-50{--tw-bg-opacity:1;background-color:rgb(236 254 255/var(--tw-bg-opacity))}.bg-cyan-500{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity))}.bg-cyan-600{--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}.bg-cyan-700{--tw-bg-opacity:1;background-color:rgb(14 116 144/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.bg-green{--tw-bg-opacity:1;background-color:rgb(8 120 107/var(--tw-bg-opacity))}.bg-indigo-100{--tw-bg-opacity:1;background-color:rgb(229 237 255/var(--tw-bg-opacity))}.bg-indigo-400{--tw-bg-opacity:1;background-color:rgb(141 162 251/var(--tw-bg-opacity))}.bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(88 80 236/var(--tw-bg-opacity))}.bg-lime-100{--tw-bg-opacity:1;background-color:rgb(236 252 203/var(--tw-bg-opacity))}.bg-lime-400{--tw-bg-opacity:1;background-color:rgb(163 230 53/var(--tw-bg-opacity))}.bg-lime-600{--tw-bg-opacity:1;background-color:rgb(101 163 13/var(--tw-bg-opacity))}.bg-orange{--tw-bg-opacity:1;background-color:rgb(242 155 0/var(--tw-bg-opacity))}.bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 232 243/var(--tw-bg-opacity))}.bg-pink-600{--tw-bg-opacity:1;background-color:rgb(214 31 105/var(--tw-bg-opacity))}.bg-purple-100{--tw-bg-opacity:1;background-color:rgb(237 235 254/var(--tw-bg-opacity))}.bg-purple-50{--tw-bg-opacity:1;background-color:rgb(246 245 255/var(--tw-bg-opacity))}.bg-purple-600{--tw-bg-opacity:1;background-color:rgb(126 58 242/var(--tw-bg-opacity))}.bg-purple-700{--tw-bg-opacity:1;background-color:rgb(108 43 217/var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(253 232 232/var(--tw-bg-opacity))}.bg-red-400{--tw-bg-opacity:1;background-color:rgb(249 128 128/var(--tw-bg-opacity))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(253 242 242/var(--tw-bg-opacity))}.bg-red-600{--tw-bg-opacity:1;background-color:rgb(224 36 36/var(--tw-bg-opacity))}.bg-red-700{--tw-bg-opacity:1;background-color:rgb(200 30 30/var(--tw-bg-opacity))}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.bg-teal-100{--tw-bg-opacity:1;background-color:rgb(213 245 246/var(--tw-bg-opacity))}.bg-teal-600{--tw-bg-opacity:1;background-color:rgb(4 116 129/var(--tw-bg-opacity))}.bg-transparent{background-color:initial}.bg-user-message-color{--tw-bg-opacity:1;background-color:rgb(242 249 255/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-white\/30{background-color:#ffffff4d}.bg-white\/50{background-color:#ffffff80}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(253 246 178/var(--tw-bg-opacity))}.bg-yellow-400{--tw-bg-opacity:1;background-color:rgb(227 160 8/var(--tw-bg-opacity))}.bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(253 253 234/var(--tw-bg-opacity))}.bg-yellow-600{--tw-bg-opacity:1;background-color:rgb(159 88 10/var(--tw-bg-opacity))}.bg-opacity-50{--tw-bg-opacity:0.5}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-cyan-400{--tw-gradient-from:#22d3ee var(--tw-gradient-from-position);--tw-gradient-to:#22d3ee00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-cyan-500{--tw-gradient-from:#06b6d4 var(--tw-gradient-from-position);--tw-gradient-to:#06b6d400 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-lime-200{--tw-gradient-from:#d9f99d var(--tw-gradient-from-position);--tw-gradient-to:#d9f99d00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-pink-400{--tw-gradient-from:#f17eb8 var(--tw-gradient-from-position);--tw-gradient-to:#f17eb800 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-pink-500{--tw-gradient-from:#e74694 var(--tw-gradient-from-position);--tw-gradient-to:#e7469400 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-purple-500{--tw-gradient-from:#9061f9 var(--tw-gradient-from-position);--tw-gradient-to:#9061f900 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-purple-600{--tw-gradient-from:#7e3af2 var(--tw-gradient-from-position);--tw-gradient-to:#7e3af200 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-red-200{--tw-gradient-from:#fbd5d5 var(--tw-gradient-from-position);--tw-gradient-to:#fbd5d500 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-red-400{--tw-gradient-from:#f98080 var(--tw-gradient-from-position);--tw-gradient-to:#f9808000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-teal-200{--tw-gradient-from:#afecef var(--tw-gradient-from-position);--tw-gradient-to:#afecef00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-teal-400{--tw-gradient-from:#16bdca var(--tw-gradient-from-position);--tw-gradient-to:#16bdca00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-cyan-500{--tw-gradient-to:#06b6d400 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#06b6d4 var(--tw-gradient-via-position),var(--tw-gradient-to)}.via-cyan-600{--tw-gradient-to:#0891b200 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#0891b2 var(--tw-gradient-via-position),var(--tw-gradient-to)}.via-lime-400{--tw-gradient-to:#a3e63500 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#a3e635 var(--tw-gradient-via-position),var(--tw-gradient-to)}.via-pink-500{--tw-gradient-to:#e7469400 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#e74694 var(--tw-gradient-via-position),var(--tw-gradient-to)}.via-purple-600{--tw-gradient-to:#7e3af200 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#7e3af2 var(--tw-gradient-via-position),var(--tw-gradient-to)}.via-red-300{--tw-gradient-to:#f8b4b400 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#f8b4b4 var(--tw-gradient-via-position),var(--tw-gradient-to)}.via-red-500{--tw-gradient-to:#f0525200 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#f05252 var(--tw-gradient-via-position),var(--tw-gradient-to)}.via-teal-500{--tw-gradient-to:#0694a200 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#0694a2 var(--tw-gradient-via-position),var(--tw-gradient-to)}.to-cyan-500{--tw-gradient-to:#06b6d4 var(--tw-gradient-to-position)}.to-cyan-600{--tw-gradient-to:#0891b2 var(--tw-gradient-to-position)}.to-cyan-700{--tw-gradient-to:#0e7490 var(--tw-gradient-to-position)}.to-lime-200{--tw-gradient-to:#d9f99d var(--tw-gradient-to-position)}.to-lime-500{--tw-gradient-to:#84cc16 var(--tw-gradient-to-position)}.to-pink-500{--tw-gradient-to:#e74694 var(--tw-gradient-to-position)}.to-pink-600{--tw-gradient-to:#d61f69 var(--tw-gradient-to-position)}.to-purple-700{--tw-gradient-to:#6c2bd9 var(--tw-gradient-to-position)}.to-red-600{--tw-gradient-to:#e02424 var(--tw-gradient-to-position)}.to-teal-600{--tw-gradient-to:#047481 var(--tw-gradient-to-position)}.to-yellow-200{--tw-gradient-to:#fce96a var(--tw-gradient-to-position)}.fill-current{fill:currentColor}.fill-cyan-600{fill:#0891b2}.fill-gray-600{fill:#4b5563}.fill-pink-600{fill:#d61f69}.fill-purple-600{fill:#7e3af2}.fill-red-600{fill:#e02424}.fill-yellow-400{fill:#e3a008}.object-cover{object-fit:cover}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0{padding-bottom:0;padding-top:0}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.pb-2{padding-bottom:.5rem}.pb-2\.5{padding-bottom:.625rem}.pb-24{padding-bottom:6rem}.pb-32{padding-bottom:8rem}.pb-4{padding-bottom:1rem}.pl-0{padding-left:0}.pl-10{padding-left:2.5rem}.pl-12{padding-left:3rem}.pl-16{padding-left:4rem}.pl-2{padding-left:.5rem}.pl-2\.5{padding-left:.625rem}.pl-20{padding-left:5rem}.pl-3{padding-left:.75rem}.pl-8{padding-left:2rem}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pt-0{padding-top:0}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.text-left{text-align:left}.text-center{text-align:center}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-roboto{font-family:Roboto}.text-2xl{font-size:1.5rem;line-height:2rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-6{line-height:1.5rem}.leading-9{line-height:2.25rem}.leading-none{line-height:1}.leading-tight{line-height:1.25}.text-black{--tw-text-opacity:1;color:rgb(2 2 2/var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity:1;color:rgb(28 100 242/var(--tw-text-opacity))}.text-blue-700{--tw-text-opacity:1;color:rgb(26 86 219/var(--tw-text-opacity))}.text-cyan-300{--tw-text-opacity:1;color:rgb(103 232 249/var(--tw-text-opacity))}.text-cyan-500{--tw-text-opacity:1;color:rgb(6 182 212/var(--tw-text-opacity))}.text-cyan-600{--tw-text-opacity:1;color:rgb(8 145 178/var(--tw-text-opacity))}.text-cyan-700{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}.text-cyan-800{--tw-text-opacity:1;color:rgb(21 94 117/var(--tw-text-opacity))}.text-cyan-900{--tw-text-opacity:1;color:rgb(22 78 99/var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-green{--tw-text-opacity:1;color:rgb(8 120 107/var(--tw-text-opacity))}.text-green-bold{--tw-text-opacity:1;color:rgb(0 60 53/var(--tw-text-opacity))}.text-indigo-500{--tw-text-opacity:1;color:rgb(104 117 245/var(--tw-text-opacity))}.text-indigo-700{--tw-text-opacity:1;color:rgb(81 69 205/var(--tw-text-opacity))}.text-indigo-800{--tw-text-opacity:1;color:rgb(66 56 157/var(--tw-text-opacity))}.text-indigo-900{--tw-text-opacity:1;color:rgb(54 47 120/var(--tw-text-opacity))}.text-lime-500{--tw-text-opacity:1;color:rgb(132 204 22/var(--tw-text-opacity))}.text-lime-700{--tw-text-opacity:1;color:rgb(77 124 15/var(--tw-text-opacity))}.text-lime-800{--tw-text-opacity:1;color:rgb(63 98 18/var(--tw-text-opacity))}.text-lime-900{--tw-text-opacity:1;color:rgb(54 83 20/var(--tw-text-opacity))}.text-pink-500{--tw-text-opacity:1;color:rgb(231 70 148/var(--tw-text-opacity))}.text-pink-600{--tw-text-opacity:1;color:rgb(214 31 105/var(--tw-text-opacity))}.text-pink-700{--tw-text-opacity:1;color:rgb(191 18 93/var(--tw-text-opacity))}.text-pink-800{--tw-text-opacity:1;color:rgb(153 21 75/var(--tw-text-opacity))}.text-pink-900{--tw-text-opacity:1;color:rgb(117 26 61/var(--tw-text-opacity))}.text-purple-500{--tw-text-opacity:1;color:rgb(144 97 249/var(--tw-text-opacity))}.text-purple-600{--tw-text-opacity:1;color:rgb(126 58 242/var(--tw-text-opacity))}.text-purple-700{--tw-text-opacity:1;color:rgb(108 43 217/var(--tw-text-opacity))}.text-purple-800{--tw-text-opacity:1;color:rgb(85 33 181/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(240 82 82/var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgb(224 36 36/var(--tw-text-opacity))}.text-red-700{--tw-text-opacity:1;color:rgb(200 30 30/var(--tw-text-opacity))}.text-red-800{--tw-text-opacity:1;color:rgb(155 28 28/var(--tw-text-opacity))}.text-red-900{--tw-text-opacity:1;color:rgb(119 29 29/var(--tw-text-opacity))}.text-stone-500{--tw-text-opacity:1;color:rgb(120 113 108/var(--tw-text-opacity))}.text-teal-500{--tw-text-opacity:1;color:rgb(6 148 162/var(--tw-text-opacity))}.text-teal-600{--tw-text-opacity:1;color:rgb(4 116 129/var(--tw-text-opacity))}.text-teal-700{--tw-text-opacity:1;color:rgb(3 102 114/var(--tw-text-opacity))}.text-teal-800{--tw-text-opacity:1;color:rgb(5 80 92/var(--tw-text-opacity))}.text-teal-900{--tw-text-opacity:1;color:rgb(1 68 81/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-400{--tw-text-opacity:1;color:rgb(227 160 8/var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity:1;color:rgb(194 120 3/var(--tw-text-opacity))}.text-yellow-700{--tw-text-opacity:1;color:rgb(142 75 16/var(--tw-text-opacity))}.text-yellow-800{--tw-text-opacity:1;color:rgb(114 59 19/var(--tw-text-opacity))}.text-yellow-900{--tw-text-opacity:1;color:rgb(99 49 18/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.placeholder-cyan-700::placeholder{--tw-placeholder-opacity:1;color:rgb(14 116 144/var(--tw-placeholder-opacity))}.placeholder-red-700::placeholder{--tw-placeholder-opacity:1;color:rgb(200 30 30/var(--tw-placeholder-opacity))}.placeholder-yellow-700::placeholder{--tw-placeholder-opacity:1;color:rgb(142 75 16/var(--tw-placeholder-opacity))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:0 0 #0000,0 0 #0000,var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-md,.shadow-sm{box-shadow:0 0 #0000,0 0 #0000,var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.outline{outline-style:solid}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-2,.ring-8{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),0 0 #0000;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-8{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(8px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-cyan-400{--tw-ring-opacity:1;--tw-ring-color:rgb(34 211 238/var(--tw-ring-opacity))}.ring-cyan-700{--tw-ring-opacity:1;--tw-ring-color:rgb(14 116 144/var(--tw-ring-opacity))}.ring-gray-300{--tw-ring-opacity:1;--tw-ring-color:rgb(209 213 219/var(--tw-ring-opacity))}.ring-gray-500{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity))}.ring-gray-800{--tw-ring-opacity:1;--tw-ring-color:rgb(31 41 55/var(--tw-ring-opacity))}.ring-pink-500{--tw-ring-opacity:1;--tw-ring-color:rgb(231 70 148/var(--tw-ring-opacity))}.ring-purple-500{--tw-ring-opacity:1;--tw-ring-color:rgb(144 97 249/var(--tw-ring-opacity))}.ring-red-500{--tw-ring-opacity:1;--tw-ring-color:rgb(240 82 82/var(--tw-ring-opacity))}.ring-white{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))}.ring-yellow-300{--tw-ring-opacity:1;--tw-ring-color:rgb(250 202 21/var(--tw-ring-opacity))}.blur{--tw-blur:blur(8px)}.blur,.drop-shadow-md{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-md{--tw-drop-shadow:drop-shadow(0 4px 3px #00000012) drop-shadow(0 2px 2px #0000000f)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.delay-0{transition-delay:0s}.duration-100{transition-duration:.1s}.duration-1000{transition-duration:1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}::-webkit-scrollbar{height:1rem;width:.5rem}::-webkit-scrollbar:horizontal{height:.5rem;width:1rem}::-webkit-scrollbar-track{background-color:initial;border-radius:9999px}::-webkit-scrollbar-thumb{--tw-border-opacity:1;background-color:#d9d9e3cc;border-color:rgba(255,255,255,var(--tw-border-opacity));border-radius:9999px;border-width:1px}::-webkit-scrollbar-thumb:hover{--tw-bg-opacity:1;background-color:rgba(236,236,241,var(--tw-bg-opacity))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:left-\[2px\]:after{content:var(--tw-content);left:2px}.after\:left-\[4px\]:after{content:var(--tw-content);left:4px}.after\:top-0:after{content:var(--tw-content);top:0}.after\:top-0\.5:after{content:var(--tw-content);top:.125rem}.after\:top-\[2px\]:after{content:var(--tw-content);top:2px}.after\:h-4:after{content:var(--tw-content);height:1rem}.after\:h-5:after{content:var(--tw-content);height:1.25rem}.after\:h-6:after{content:var(--tw-content);height:1.5rem}.after\:w-4:after{content:var(--tw-content);width:1rem}.after\:w-5:after{content:var(--tw-content);width:1.25rem}.after\:w-6:after{content:var(--tw-content);width:1.5rem}.after\:translate-x-full:after{--tw-translate-x:100%;content:var(--tw-content);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.after\:border-white:after{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity));content:var(--tw-content)}.first\:ml-0:first-child{margin-left:0}.first\:mt-0:first-child{margin-top:0}.first\:rounded-t-lg:first-child{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.first\:border-t-0:first-child{border-top-width:0}.first\:pt-0:first-child{padding-top:0}.last\:mr-0:last-child{margin-right:0}.last\:rounded-b-lg:last-child{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}.odd\:bg-white:nth-child(odd){--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.even\:bg-gray-50:nth-child(2n){--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.hover\:cursor-not-allowed:hover{cursor:not-allowed}.hover\:cursor-pointer:hover{cursor:pointer}.hover\:border-gray-300:hover{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.hover\:bg-blue-800:hover{--tw-bg-opacity:1;background-color:rgb(30 66 159/var(--tw-bg-opacity))}.hover\:bg-cyan-100:hover{--tw-bg-opacity:1;background-color:rgb(207 250 254/var(--tw-bg-opacity))}.hover\:bg-cyan-200:hover{--tw-bg-opacity:1;background-color:rgb(165 243 252/var(--tw-bg-opacity))}.hover\:bg-cyan-600:hover{--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}.hover\:bg-cyan-800:hover{--tw-bg-opacity:1;background-color:rgb(21 94 117/var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.hover\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.hover\:bg-indigo-200:hover{--tw-bg-opacity:1;background-color:rgb(205 219 254/var(--tw-bg-opacity))}.hover\:bg-lime-200:hover{--tw-bg-opacity:1;background-color:rgb(217 249 157/var(--tw-bg-opacity))}.hover\:bg-pink-200:hover{--tw-bg-opacity:1;background-color:rgb(250 209 232/var(--tw-bg-opacity))}.hover\:bg-purple-200:hover{--tw-bg-opacity:1;background-color:rgb(220 215 254/var(--tw-bg-opacity))}.hover\:bg-red-200:hover{--tw-bg-opacity:1;background-color:rgb(251 213 213/var(--tw-bg-opacity))}.hover\:bg-teal-200:hover{--tw-bg-opacity:1;background-color:rgb(175 236 239/var(--tw-bg-opacity))}.hover\:bg-white:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.hover\:bg-yellow-200:hover{--tw-bg-opacity:1;background-color:rgb(252 233 106/var(--tw-bg-opacity))}.hover\:bg-gradient-to-br:hover{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.hover\:text-blue-600:hover{--tw-text-opacity:1;color:rgb(28 100 242/var(--tw-text-opacity))}.hover\:text-cyan-700:hover{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.hover\:text-green:hover{--tw-text-opacity:1;color:rgb(8 120 107/var(--tw-text-opacity))}.hover\:text-green-bold:hover{--tw-text-opacity:1;color:rgb(0 60 53/var(--tw-text-opacity))}.hover\:text-orange:hover{--tw-text-opacity:1;color:rgb(242 155 0/var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}.focus\:z-10:focus{z-index:10}.focus\:border-blue-600:focus{--tw-border-opacity:1;border-color:rgb(28 100 242/var(--tw-border-opacity))}.focus\:border-cyan-500:focus{--tw-border-opacity:1;border-color:rgb(6 182 212/var(--tw-border-opacity))}.focus\:border-red-500:focus{--tw-border-opacity:1;border-color:rgb(240 82 82/var(--tw-border-opacity))}.focus\:border-red-600:focus{--tw-border-opacity:1;border-color:rgb(224 36 36/var(--tw-border-opacity))}.focus\:border-yellow-500:focus{--tw-border-opacity:1;border-color:rgb(194 120 3/var(--tw-border-opacity))}.focus\:bg-gray-100:focus{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.focus\:text-cyan-700:focus{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}.focus\:outline-none:focus{outline:2px solid #0000;outline-offset:2px}.focus\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-0:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),0 0 #0000;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-4:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),0 0 #0000;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-background:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(242 242 242/var(--tw-ring-opacity))}.focus\:ring-blue-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(164 202 254/var(--tw-ring-opacity))}.focus\:ring-blue-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(28 100 242/var(--tw-ring-opacity))}.focus\:ring-cyan-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(103 232 249/var(--tw-ring-opacity))}.focus\:ring-cyan-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 211 238/var(--tw-ring-opacity))}.focus\:ring-cyan-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(6 182 212/var(--tw-ring-opacity))}.focus\:ring-cyan-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(8 145 178/var(--tw-ring-opacity))}.focus\:ring-cyan-700:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(14 116 144/var(--tw-ring-opacity))}.focus\:ring-cyan-800:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(21 94 117/var(--tw-ring-opacity))}.focus\:ring-gray-200:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity))}.focus\:ring-gray-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(209 213 219/var(--tw-ring-opacity))}.focus\:ring-gray-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(156 163 175/var(--tw-ring-opacity))}.focus\:ring-gray-800:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(31 41 55/var(--tw-ring-opacity))}.focus\:ring-gray-900:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(17 24 39/var(--tw-ring-opacity))}.focus\:ring-indigo-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(180 198 252/var(--tw-ring-opacity))}.focus\:ring-indigo-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(141 162 251/var(--tw-ring-opacity))}.focus\:ring-indigo-700:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(81 69 205/var(--tw-ring-opacity))}.focus\:ring-lime-200:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(217 249 157/var(--tw-ring-opacity))}.focus\:ring-lime-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(190 242 100/var(--tw-ring-opacity))}.focus\:ring-lime-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(163 230 53/var(--tw-ring-opacity))}.focus\:ring-lime-700:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(77 124 15/var(--tw-ring-opacity))}.focus\:ring-pink-200:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(250 209 232/var(--tw-ring-opacity))}.focus\:ring-pink-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(248 180 217/var(--tw-ring-opacity))}.focus\:ring-pink-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(241 126 184/var(--tw-ring-opacity))}.focus\:ring-pink-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(214 31 105/var(--tw-ring-opacity))}.focus\:ring-purple-200:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(220 215 254/var(--tw-ring-opacity))}.focus\:ring-purple-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(202 191 253/var(--tw-ring-opacity))}.focus\:ring-purple-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(172 148 250/var(--tw-ring-opacity))}.focus\:ring-purple-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(126 58 242/var(--tw-ring-opacity))}.focus\:ring-red-100:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(253 232 232/var(--tw-ring-opacity))}.focus\:ring-red-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(248 180 180/var(--tw-ring-opacity))}.focus\:ring-red-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(249 128 128/var(--tw-ring-opacity))}.focus\:ring-red-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(240 82 82/var(--tw-ring-opacity))}.focus\:ring-red-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(224 36 36/var(--tw-ring-opacity))}.focus\:ring-red-900:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(119 29 29/var(--tw-ring-opacity))}.focus\:ring-teal-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(126 220 226/var(--tw-ring-opacity))}.focus\:ring-teal-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(22 189 202/var(--tw-ring-opacity))}.focus\:ring-teal-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(4 116 129/var(--tw-ring-opacity))}.focus\:ring-transparent:focus{--tw-ring-color:#0000}.focus\:ring-white:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))}.focus\:ring-yellow-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(250 202 21/var(--tw-ring-opacity))}.focus\:ring-yellow-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(227 160 8/var(--tw-ring-opacity))}.focus\:ring-yellow-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(194 120 3/var(--tw-ring-opacity))}.focus-visible\:ring-0:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),0 0 #0000;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.enabled\:hover\:bg-blue-800:hover:enabled{--tw-bg-opacity:1;background-color:rgb(30 66 159/var(--tw-bg-opacity))}.enabled\:hover\:bg-cyan-100:hover:enabled{--tw-bg-opacity:1;background-color:rgb(207 250 254/var(--tw-bg-opacity))}.enabled\:hover\:bg-cyan-800:hover:enabled{--tw-bg-opacity:1;background-color:rgb(21 94 117/var(--tw-bg-opacity))}.enabled\:hover\:bg-gray-100:hover:enabled{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.enabled\:hover\:bg-gray-900:hover:enabled{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.enabled\:hover\:bg-indigo-100:hover:enabled{--tw-bg-opacity:1;background-color:rgb(229 237 255/var(--tw-bg-opacity))}.enabled\:hover\:bg-lime-100:hover:enabled{--tw-bg-opacity:1;background-color:rgb(236 252 203/var(--tw-bg-opacity))}.enabled\:hover\:bg-pink-100:hover:enabled{--tw-bg-opacity:1;background-color:rgb(252 232 243/var(--tw-bg-opacity))}.enabled\:hover\:bg-purple-800:hover:enabled{--tw-bg-opacity:1;background-color:rgb(85 33 181/var(--tw-bg-opacity))}.enabled\:hover\:bg-red-100:hover:enabled{--tw-bg-opacity:1;background-color:rgb(253 232 232/var(--tw-bg-opacity))}.enabled\:hover\:bg-red-800:hover:enabled{--tw-bg-opacity:1;background-color:rgb(155 28 28/var(--tw-bg-opacity))}.enabled\:hover\:bg-teal-100:hover:enabled{--tw-bg-opacity:1;background-color:rgb(213 245 246/var(--tw-bg-opacity))}.enabled\:hover\:bg-transparent:hover:enabled{background-color:initial}.enabled\:hover\:bg-yellow-100:hover:enabled{--tw-bg-opacity:1;background-color:rgb(253 246 178/var(--tw-bg-opacity))}.enabled\:hover\:bg-yellow-500:hover:enabled{--tw-bg-opacity:1;background-color:rgb(194 120 3/var(--tw-bg-opacity))}.enabled\:hover\:bg-gradient-to-bl:hover:enabled{background-image:linear-gradient(to bottom left,var(--tw-gradient-stops))}.enabled\:hover\:bg-gradient-to-br:hover:enabled{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.enabled\:hover\:bg-gradient-to-l:hover:enabled{background-image:linear-gradient(to left,var(--tw-gradient-stops))}.enabled\:hover\:from-teal-200:hover:enabled{--tw-gradient-from:#afecef var(--tw-gradient-from-position);--tw-gradient-to:#afecef00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.enabled\:hover\:to-lime-200:hover:enabled{--tw-gradient-to:#d9f99d var(--tw-gradient-to-position)}.enabled\:hover\:text-cyan-700:hover:enabled{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}.enabled\:hover\:text-gray-700:hover:enabled{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.enabled\:hover\:text-gray-900:hover:enabled{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:text-gray-400:disabled{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.disabled\:opacity-50:disabled{opacity:.5}.group:first-child .group-first\:hidden{display:none}.group\/body:first-child .group\/row:first-child .group-first\/body\:group-first\/row\:first\:rounded-tl-lg:first-child,.group\/head:first-child .group-first\/head\:first\:rounded-tl-lg:first-child{border-top-left-radius:.5rem}.group\/body:first-child .group\/row:first-child .group-first\/body\:group-first\/row\:last\:rounded-tr-lg:last-child,.group\/head:first-child .group-first\/head\:last\:rounded-tr-lg:last-child{border-top-right-radius:.5rem}.group\/body:last-child .group\/row:last-child .group-last\/body\:group-last\/row\:first\:rounded-bl-lg:first-child{border-bottom-left-radius:.5rem}.group\/body:last-child .group\/row:last-child .group-last\/body\:group-last\/row\:last\:rounded-br-lg:last-child{border-bottom-right-radius:.5rem}.group:hover .group-hover\:bg-cyan-200{--tw-bg-opacity:1;background-color:rgb(165 243 252/var(--tw-bg-opacity))}.group:hover .group-hover\:bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.group:hover .group-hover\:bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.group:hover .group-hover\:bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.group:hover .group-hover\:bg-indigo-200{--tw-bg-opacity:1;background-color:rgb(205 219 254/var(--tw-bg-opacity))}.group:hover .group-hover\:bg-lime-200{--tw-bg-opacity:1;background-color:rgb(217 249 157/var(--tw-bg-opacity))}.group:hover .group-hover\:bg-pink-200{--tw-bg-opacity:1;background-color:rgb(250 209 232/var(--tw-bg-opacity))}.group:hover .group-hover\:bg-purple-200{--tw-bg-opacity:1;background-color:rgb(220 215 254/var(--tw-bg-opacity))}.group:hover .group-hover\:bg-red-200{--tw-bg-opacity:1;background-color:rgb(251 213 213/var(--tw-bg-opacity))}.group:hover .group-hover\:bg-teal-200{--tw-bg-opacity:1;background-color:rgb(175 236 239/var(--tw-bg-opacity))}.group:hover .group-hover\:bg-white\/50{background-color:#ffffff80}.group:hover .group-hover\:bg-yellow-200{--tw-bg-opacity:1;background-color:rgb(252 233 106/var(--tw-bg-opacity))}.group:hover .group-hover\:text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.group:focus .group-focus\:outline-none{outline:2px solid #0000;outline-offset:2px}.group:focus .group-focus\:ring-4{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),0 0 #0000;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.group:focus .group-focus\:ring-cyan-500\/25{--tw-ring-color:#06b6d440}.group:focus .group-focus\:ring-white{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))}.group:enabled:hover .group-enabled\:group-hover\:bg-opacity-0{--tw-bg-opacity:0}.group:enabled:hover .group-enabled\:group-hover\:text-inherit{color:inherit}.peer:placeholder-shown~.peer-placeholder-shown\:top-1\/2{top:50%}.peer:placeholder-shown~.peer-placeholder-shown\:-translate-y-1\/2{--tw-translate-y:-50%}.peer:placeholder-shown~.peer-placeholder-shown\:-translate-y-1\/2,.peer:placeholder-shown~.peer-placeholder-shown\:translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:placeholder-shown~.peer-placeholder-shown\:translate-y-0{--tw-translate-y:0px}.peer:placeholder-shown~.peer-placeholder-shown\:scale-100{--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:focus~.peer-focus\:left-0{left:0}.peer:focus~.peer-focus\:top-2{top:.5rem}.peer:focus~.peer-focus\:-translate-y-4{--tw-translate-y:-1rem}.peer:focus~.peer-focus\:-translate-y-4,.peer:focus~.peer-focus\:-translate-y-6{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:focus~.peer-focus\:-translate-y-6{--tw-translate-y:-1.5rem}.peer:focus~.peer-focus\:scale-75{--tw-scale-x:.75;--tw-scale-y:.75;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:focus~.peer-focus\:px-2{padding-left:.5rem;padding-right:.5rem}.peer:focus~.peer-focus\:text-blue-600{--tw-text-opacity:1;color:rgb(28 100 242/var(--tw-text-opacity))}:is(.dark .dark\:divide-gray-700)>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(55 65 81/var(--tw-divide-opacity))}:is(.dark .dark\:border-none){border-style:none}:is(.dark .dark\:border-blue-500){--tw-border-opacity:1;border-color:rgb(63 131 248/var(--tw-border-opacity))}:is(.dark .dark\:border-cyan-400){--tw-border-opacity:1;border-color:rgb(34 211 238/var(--tw-border-opacity))}:is(.dark .dark\:border-cyan-500){--tw-border-opacity:1;border-color:rgb(6 182 212/var(--tw-border-opacity))}:is(.dark .dark\:border-cyan-600){--tw-border-opacity:1;border-color:rgb(8 145 178/var(--tw-border-opacity))}:is(.dark .dark\:border-gray-500){--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}:is(.dark .dark\:border-gray-600){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}:is(.dark .dark\:border-gray-700){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}:is(.dark .dark\:border-gray-800){--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity))}:is(.dark .dark\:border-gray-900){--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}:is(.dark .dark\:border-indigo-600){--tw-border-opacity:1;border-color:rgb(88 80 236/var(--tw-border-opacity))}:is(.dark .dark\:border-lime-600){--tw-border-opacity:1;border-color:rgb(101 163 13/var(--tw-border-opacity))}:is(.dark .dark\:border-pink-600){--tw-border-opacity:1;border-color:rgb(214 31 105/var(--tw-border-opacity))}:is(.dark .dark\:border-red-400){--tw-border-opacity:1;border-color:rgb(249 128 128/var(--tw-border-opacity))}:is(.dark .dark\:border-red-500){--tw-border-opacity:1;border-color:rgb(240 82 82/var(--tw-border-opacity))}:is(.dark .dark\:border-red-600){--tw-border-opacity:1;border-color:rgb(224 36 36/var(--tw-border-opacity))}:is(.dark .dark\:border-teal-600){--tw-border-opacity:1;border-color:rgb(4 116 129/var(--tw-border-opacity))}:is(.dark .dark\:border-transparent){border-color:#0000}:is(.dark .dark\:border-white){--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}:is(.dark .dark\:border-yellow-400){--tw-border-opacity:1;border-color:rgb(227 160 8/var(--tw-border-opacity))}:is(.dark .dark\:border-yellow-600){--tw-border-opacity:1;border-color:rgb(159 88 10/var(--tw-border-opacity))}:is(.dark .dark\:bg-black){--tw-bg-opacity:1;background-color:rgb(2 2 2/var(--tw-bg-opacity))}:is(.dark .dark\:bg-blue-600){--tw-bg-opacity:1;background-color:rgb(28 100 242/var(--tw-bg-opacity))}:is(.dark .dark\:bg-cyan-100){--tw-bg-opacity:1;background-color:rgb(207 250 254/var(--tw-bg-opacity))}:is(.dark .dark\:bg-cyan-200){--tw-bg-opacity:1;background-color:rgb(165 243 252/var(--tw-bg-opacity))}:is(.dark .dark\:bg-cyan-600){--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}:is(.dark .dark\:bg-cyan-900){--tw-bg-opacity:1;background-color:rgb(22 78 99/var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-200){--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-300){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-400){--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-500){--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-600){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-700){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800\/30){background-color:#1f29374d}:is(.dark .dark\:bg-gray-800\/50){background-color:#1f293780}:is(.dark .dark\:bg-gray-900){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}:is(.dark .dark\:bg-indigo-200){--tw-bg-opacity:1;background-color:rgb(205 219 254/var(--tw-bg-opacity))}:is(.dark .dark\:bg-indigo-500){--tw-bg-opacity:1;background-color:rgb(104 117 245/var(--tw-bg-opacity))}:is(.dark .dark\:bg-lime-200){--tw-bg-opacity:1;background-color:rgb(217 249 157/var(--tw-bg-opacity))}:is(.dark .dark\:bg-pink-200){--tw-bg-opacity:1;background-color:rgb(250 209 232/var(--tw-bg-opacity))}:is(.dark .dark\:bg-purple-200){--tw-bg-opacity:1;background-color:rgb(220 215 254/var(--tw-bg-opacity))}:is(.dark .dark\:bg-purple-500){--tw-bg-opacity:1;background-color:rgb(144 97 249/var(--tw-bg-opacity))}:is(.dark .dark\:bg-purple-600){--tw-bg-opacity:1;background-color:rgb(126 58 242/var(--tw-bg-opacity))}:is(.dark .dark\:bg-purple-900){--tw-bg-opacity:1;background-color:rgb(74 29 150/var(--tw-bg-opacity))}:is(.dark .dark\:bg-red-100){--tw-bg-opacity:1;background-color:rgb(253 232 232/var(--tw-bg-opacity))}:is(.dark .dark\:bg-red-200){--tw-bg-opacity:1;background-color:rgb(251 213 213/var(--tw-bg-opacity))}:is(.dark .dark\:bg-red-500){--tw-bg-opacity:1;background-color:rgb(240 82 82/var(--tw-bg-opacity))}:is(.dark .dark\:bg-red-600){--tw-bg-opacity:1;background-color:rgb(224 36 36/var(--tw-bg-opacity))}:is(.dark .dark\:bg-red-900){--tw-bg-opacity:1;background-color:rgb(119 29 29/var(--tw-bg-opacity))}:is(.dark .dark\:bg-teal-200){--tw-bg-opacity:1;background-color:rgb(175 236 239/var(--tw-bg-opacity))}:is(.dark .dark\:bg-transparent){background-color:initial}:is(.dark .dark\:bg-yellow-100){--tw-bg-opacity:1;background-color:rgb(253 246 178/var(--tw-bg-opacity))}:is(.dark .dark\:bg-yellow-200){--tw-bg-opacity:1;background-color:rgb(252 233 106/var(--tw-bg-opacity))}:is(.dark .dark\:bg-yellow-900){--tw-bg-opacity:1;background-color:rgb(99 49 18/var(--tw-bg-opacity))}:is(.dark .dark\:bg-opacity-80){--tw-bg-opacity:0.8}:is(.dark .dark\:fill-gray-300){fill:#d1d5db}:is(.dark .dark\:text-blue-500){--tw-text-opacity:1;color:rgb(63 131 248/var(--tw-text-opacity))}:is(.dark .dark\:text-cyan-100){--tw-text-opacity:1;color:rgb(207 250 254/var(--tw-text-opacity))}:is(.dark .dark\:text-cyan-300){--tw-text-opacity:1;color:rgb(103 232 249/var(--tw-text-opacity))}:is(.dark .dark\:text-cyan-500){--tw-text-opacity:1;color:rgb(6 182 212/var(--tw-text-opacity))}:is(.dark .dark\:text-cyan-600){--tw-text-opacity:1;color:rgb(8 145 178/var(--tw-text-opacity))}:is(.dark .dark\:text-cyan-800){--tw-text-opacity:1;color:rgb(21 94 117/var(--tw-text-opacity))}:is(.dark .dark\:text-cyan-900){--tw-text-opacity:1;color:rgb(22 78 99/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-100){--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-200){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-400){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-500){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-600){--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-800){--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-900){--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}:is(.dark .dark\:text-indigo-600){--tw-text-opacity:1;color:rgb(88 80 236/var(--tw-text-opacity))}:is(.dark .dark\:text-indigo-800){--tw-text-opacity:1;color:rgb(66 56 157/var(--tw-text-opacity))}:is(.dark .dark\:text-indigo-900){--tw-text-opacity:1;color:rgb(54 47 120/var(--tw-text-opacity))}:is(.dark .dark\:text-lime-600){--tw-text-opacity:1;color:rgb(101 163 13/var(--tw-text-opacity))}:is(.dark .dark\:text-lime-800){--tw-text-opacity:1;color:rgb(63 98 18/var(--tw-text-opacity))}:is(.dark .dark\:text-lime-900){--tw-text-opacity:1;color:rgb(54 83 20/var(--tw-text-opacity))}:is(.dark .dark\:text-pink-600){--tw-text-opacity:1;color:rgb(214 31 105/var(--tw-text-opacity))}:is(.dark .dark\:text-pink-800){--tw-text-opacity:1;color:rgb(153 21 75/var(--tw-text-opacity))}:is(.dark .dark\:text-pink-900){--tw-text-opacity:1;color:rgb(117 26 61/var(--tw-text-opacity))}:is(.dark .dark\:text-purple-600){--tw-text-opacity:1;color:rgb(126 58 242/var(--tw-text-opacity))}:is(.dark .dark\:text-purple-800){--tw-text-opacity:1;color:rgb(85 33 181/var(--tw-text-opacity))}:is(.dark .dark\:text-purple-900){--tw-text-opacity:1;color:rgb(74 29 150/var(--tw-text-opacity))}:is(.dark .dark\:text-red-400){--tw-text-opacity:1;color:rgb(249 128 128/var(--tw-text-opacity))}:is(.dark .dark\:text-red-500){--tw-text-opacity:1;color:rgb(240 82 82/var(--tw-text-opacity))}:is(.dark .dark\:text-red-600){--tw-text-opacity:1;color:rgb(224 36 36/var(--tw-text-opacity))}:is(.dark .dark\:text-red-800){--tw-text-opacity:1;color:rgb(155 28 28/var(--tw-text-opacity))}:is(.dark .dark\:text-red-900){--tw-text-opacity:1;color:rgb(119 29 29/var(--tw-text-opacity))}:is(.dark .dark\:text-teal-600){--tw-text-opacity:1;color:rgb(4 116 129/var(--tw-text-opacity))}:is(.dark .dark\:text-teal-800){--tw-text-opacity:1;color:rgb(5 80 92/var(--tw-text-opacity))}:is(.dark .dark\:text-teal-900){--tw-text-opacity:1;color:rgb(1 68 81/var(--tw-text-opacity))}:is(.dark .dark\:text-white){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .dark\:text-yellow-600){--tw-text-opacity:1;color:rgb(159 88 10/var(--tw-text-opacity))}:is(.dark .dark\:text-yellow-800){--tw-text-opacity:1;color:rgb(114 59 19/var(--tw-text-opacity))}:is(.dark .dark\:text-yellow-900){--tw-text-opacity:1;color:rgb(99 49 18/var(--tw-text-opacity))}:is(.dark .dark\:placeholder-gray-400)::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity))}:is(.dark .dark\:shadow-sm-light){--tw-shadow:0 2px 5px 0px #ffffff14;--tw-shadow-colored:0 2px 5px 0px var(--tw-shadow-color);box-shadow:0 0 #0000,0 0 #0000,var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:ring-cyan-800){--tw-ring-opacity:1;--tw-ring-color:rgb(21 94 117/var(--tw-ring-opacity))}:is(.dark .dark\:ring-gray-400){--tw-ring-opacity:1;--tw-ring-color:rgb(156 163 175/var(--tw-ring-opacity))}:is(.dark .dark\:ring-gray-500){--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity))}:is(.dark .dark\:ring-gray-800){--tw-ring-opacity:1;--tw-ring-color:rgb(31 41 55/var(--tw-ring-opacity))}:is(.dark .dark\:ring-gray-900){--tw-ring-opacity:1;--tw-ring-color:rgb(17 24 39/var(--tw-ring-opacity))}:is(.dark .dark\:ring-pink-500){--tw-ring-opacity:1;--tw-ring-color:rgb(231 70 148/var(--tw-ring-opacity))}:is(.dark .dark\:ring-purple-600){--tw-ring-opacity:1;--tw-ring-color:rgb(126 58 242/var(--tw-ring-opacity))}:is(.dark .dark\:ring-red-700){--tw-ring-opacity:1;--tw-ring-color:rgb(200 30 30/var(--tw-ring-opacity))}:is(.dark .dark\:ring-yellow-500){--tw-ring-opacity:1;--tw-ring-color:rgb(194 120 3/var(--tw-ring-opacity))}:is(.dark .dark\:ring-offset-blue-700){--tw-ring-offset-color:#1a56db}:is(.dark .dark\:ring-offset-cyan-600){--tw-ring-offset-color:#0891b2}:is(.dark .dark\:ring-offset-gray-800){--tw-ring-offset-color:#1f2937}:is(.dark .dark\:ring-offset-gray-900){--tw-ring-offset-color:#111827}:is(.dark .dark\:ring-offset-indigo-700){--tw-ring-offset-color:#5145cd}:is(.dark .dark\:ring-offset-lime-700){--tw-ring-offset-color:#4d7c0f}:is(.dark .dark\:ring-offset-pink-600){--tw-ring-offset-color:#d61f69}:is(.dark .dark\:ring-offset-purple-600){--tw-ring-offset-color:#7e3af2}:is(.dark .dark\:ring-offset-red-600){--tw-ring-offset-color:#e02424}:is(.dark .dark\:ring-offset-red-900){--tw-ring-offset-color:#771d1d}:is(.dark .dark\:ring-offset-teal-600){--tw-ring-offset-color:#047481}:is(.dark .dark\:ring-offset-yellow-400){--tw-ring-offset-color:#e3a008}:is(.dark .odd\:dark\:bg-gray-800):nth-child(odd){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}:is(.dark .even\:dark\:bg-gray-700):nth-child(2n){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-blue-700:hover){--tw-bg-opacity:1;background-color:rgb(26 86 219/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-cyan-300:hover){--tw-bg-opacity:1;background-color:rgb(103 232 249/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-cyan-700:hover){--tw-bg-opacity:1;background-color:rgb(14 116 144/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-gray-300:hover){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-gray-600:hover){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-gray-700:hover){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-gray-800:hover){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-indigo-300:hover){--tw-bg-opacity:1;background-color:rgb(180 198 252/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-lime-300:hover){--tw-bg-opacity:1;background-color:rgb(190 242 100/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-pink-300:hover){--tw-bg-opacity:1;background-color:rgb(248 180 217/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-purple-300:hover){--tw-bg-opacity:1;background-color:rgb(202 191 253/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-red-300:hover){--tw-bg-opacity:1;background-color:rgb(248 180 180/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-teal-300:hover){--tw-bg-opacity:1;background-color:rgb(126 220 226/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-yellow-300:hover){--tw-bg-opacity:1;background-color:rgb(250 202 21/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:text-blue-500:hover){--tw-text-opacity:1;color:rgb(63 131 248/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-gray-300:hover){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-white:hover){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .dark\:focus\:border-blue-500:focus){--tw-border-opacity:1;border-color:rgb(63 131 248/var(--tw-border-opacity))}:is(.dark .dark\:focus\:border-cyan-500:focus){--tw-border-opacity:1;border-color:rgb(6 182 212/var(--tw-border-opacity))}:is(.dark .dark\:focus\:border-red-500:focus){--tw-border-opacity:1;border-color:rgb(240 82 82/var(--tw-border-opacity))}:is(.dark .dark\:focus\:border-yellow-500:focus){--tw-border-opacity:1;border-color:rgb(194 120 3/var(--tw-border-opacity))}:is(.dark .dark\:focus\:bg-cyan-600:focus){--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}:is(.dark .dark\:focus\:bg-gray-600:focus){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}:is(.dark .dark\:focus\:text-white:focus){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .dark\:focus\:ring-blue-700:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(26 86 219/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-blue-800:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(30 66 159/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-cyan-500:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(6 182 212/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-cyan-600:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(8 145 178/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-cyan-700:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(14 116 144/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-cyan-800:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(21 94 117/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-gray-500:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-gray-600:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(75 85 99/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-gray-700:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(55 65 81/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-gray-800:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(31 41 55/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-gray-900:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(17 24 39/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-indigo-700:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(81 69 205/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-lime-700:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(77 124 15/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-lime-800:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(63 98 18/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-pink-600:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(214 31 105/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-pink-700:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(191 18 93/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-pink-800:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(153 21 75/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-purple-600:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(126 58 242/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-purple-800:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(85 33 181/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-purple-900:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(74 29 150/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-red-400:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(249 128 128/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-red-500:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(240 82 82/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-red-600:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(224 36 36/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-red-700:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(200 30 30/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-red-800:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(155 28 28/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-red-900:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(119 29 29/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-teal-600:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(4 116 129/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-teal-700:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(3 102 114/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-teal-800:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(5 80 92/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-yellow-400:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(227 160 8/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-yellow-500:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(194 120 3/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-yellow-700:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(142 75 16/var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-yellow-900:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(99 49 18/var(--tw-ring-opacity))}:is(.dark .dark\:enabled\:hover\:border-cyan-700:hover:enabled){--tw-border-opacity:1;border-color:rgb(14 116 144/var(--tw-border-opacity))}:is(.dark .dark\:enabled\:hover\:border-gray-700:hover:enabled){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}:is(.dark .dark\:enabled\:hover\:border-indigo-700:hover:enabled){--tw-border-opacity:1;border-color:rgb(81 69 205/var(--tw-border-opacity))}:is(.dark .dark\:enabled\:hover\:border-lime-700:hover:enabled){--tw-border-opacity:1;border-color:rgb(77 124 15/var(--tw-border-opacity))}:is(.dark .dark\:enabled\:hover\:border-pink-700:hover:enabled){--tw-border-opacity:1;border-color:rgb(191 18 93/var(--tw-border-opacity))}:is(.dark .dark\:enabled\:hover\:border-red-700:hover:enabled){--tw-border-opacity:1;border-color:rgb(200 30 30/var(--tw-border-opacity))}:is(.dark .dark\:enabled\:hover\:border-teal-700:hover:enabled){--tw-border-opacity:1;border-color:rgb(3 102 114/var(--tw-border-opacity))}:is(.dark .dark\:enabled\:hover\:border-yellow-700:hover:enabled){--tw-border-opacity:1;border-color:rgb(142 75 16/var(--tw-border-opacity))}:is(.dark .dark\:enabled\:hover\:bg-cyan-700:hover:enabled){--tw-bg-opacity:1;background-color:rgb(14 116 144/var(--tw-bg-opacity))}:is(.dark .dark\:enabled\:hover\:bg-gray-700:hover:enabled){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}:is(.dark .dark\:enabled\:hover\:bg-indigo-700:hover:enabled){--tw-bg-opacity:1;background-color:rgb(81 69 205/var(--tw-bg-opacity))}:is(.dark .dark\:enabled\:hover\:bg-lime-700:hover:enabled){--tw-bg-opacity:1;background-color:rgb(77 124 15/var(--tw-bg-opacity))}:is(.dark .dark\:enabled\:hover\:bg-pink-700:hover:enabled){--tw-bg-opacity:1;background-color:rgb(191 18 93/var(--tw-bg-opacity))}:is(.dark .dark\:enabled\:hover\:bg-purple-700:hover:enabled){--tw-bg-opacity:1;background-color:rgb(108 43 217/var(--tw-bg-opacity))}:is(.dark .dark\:enabled\:hover\:bg-red-700:hover:enabled){--tw-bg-opacity:1;background-color:rgb(200 30 30/var(--tw-bg-opacity))}:is(.dark .dark\:enabled\:hover\:bg-teal-700:hover:enabled){--tw-bg-opacity:1;background-color:rgb(3 102 114/var(--tw-bg-opacity))}:is(.dark .dark\:enabled\:hover\:bg-yellow-700:hover:enabled){--tw-bg-opacity:1;background-color:rgb(142 75 16/var(--tw-bg-opacity))}:is(.dark .enabled\:dark\:hover\:bg-gray-700:hover):enabled{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}:is(.dark .dark\:enabled\:hover\:text-white:hover:enabled){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .enabled\:dark\:hover\:text-white:hover):enabled{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .disabled\:dark\:text-gray-500):disabled{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .group:hover .dark\:group-hover\:bg-cyan-300){--tw-bg-opacity:1;background-color:rgb(103 232 249/var(--tw-bg-opacity))}:is(.dark .group:hover .dark\:group-hover\:bg-gray-500){--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}:is(.dark .group:hover .dark\:group-hover\:bg-gray-600){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}:is(.dark .group:hover .dark\:group-hover\:bg-gray-700){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}:is(.dark .group:hover .dark\:group-hover\:bg-gray-800\/60){background-color:#1f293799}:is(.dark .group:hover .dark\:group-hover\:bg-indigo-300){--tw-bg-opacity:1;background-color:rgb(180 198 252/var(--tw-bg-opacity))}:is(.dark .group:hover .dark\:group-hover\:bg-lime-300){--tw-bg-opacity:1;background-color:rgb(190 242 100/var(--tw-bg-opacity))}:is(.dark .group:hover .dark\:group-hover\:bg-pink-300){--tw-bg-opacity:1;background-color:rgb(248 180 217/var(--tw-bg-opacity))}:is(.dark .group:hover .dark\:group-hover\:bg-purple-300){--tw-bg-opacity:1;background-color:rgb(202 191 253/var(--tw-bg-opacity))}:is(.dark .group:hover .dark\:group-hover\:bg-red-300){--tw-bg-opacity:1;background-color:rgb(248 180 180/var(--tw-bg-opacity))}:is(.dark .group:hover .dark\:group-hover\:bg-teal-300){--tw-bg-opacity:1;background-color:rgb(126 220 226/var(--tw-bg-opacity))}:is(.dark .group:hover .dark\:group-hover\:bg-yellow-300){--tw-bg-opacity:1;background-color:rgb(250 202 21/var(--tw-bg-opacity))}:is(.dark .group:hover .dark\:group-hover\:text-white){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .group:focus .dark\:group-focus\:ring-gray-800\/70){--tw-ring-color:#1f2937b3}.peer:focus~:is(.dark .peer-focus\:dark\:text-blue-500){--tw-text-opacity:1;color:rgb(63 131 248/var(--tw-text-opacity))}@media (min-width:640px){.sm\:mx-auto{margin-left:auto;margin-right:auto}.sm\:mb-0{margin-bottom:0}.sm\:flex{display:flex}.sm\:h-10{height:2.5rem}.sm\:h-6{height:1.5rem}.sm\:h-7{height:1.75rem}.sm\:w-10{width:2.5rem}.sm\:w-6{width:1.5rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:pr-8{padding-right:2rem}.sm\:text-center{text-align:center}.sm\:text-xs{font-size:.75rem;line-height:1rem}}@media (min-width:768px){.md\:inset-0{inset:0}.md\:-bottom-1{bottom:-.25rem}.md\:-left-4{left:-1rem}.md\:-right-4{right:-1rem}.md\:mx-0{margin-left:0;margin-right:0}.md\:mx-2{margin-left:.5rem;margin-right:.5rem}.md\:mb-12{margin-bottom:3rem}.md\:mb-6{margin-bottom:1.5rem}.md\:mr-6{margin-right:1.5rem}.md\:mt-0{margin-top:0}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:h-10{height:2.5rem}.md\:h-5{height:1.25rem}.md\:h-auto{height:auto}.md\:h-full{height:100%}.md\:w-48{width:12rem}.md\:w-80{width:20rem}.md\:w-\[380px\]{width:380px}.md\:w-auto{width:auto}.md\:max-w-2xl{max-width:42rem}.md\:max-w-xl{max-width:36rem}.md\:flex-row{flex-direction:row}.md\:flex-col{flex-direction:column}.md\:flex-wrap{flex-wrap:wrap}.md\:items-center{align-items:center}.md\:justify-center{justify-content:center}.md\:justify-between{justify-content:space-between}.md\:gap-5{gap:1.25rem}.md\:gap-6{gap:1.5rem}.md\:space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(2rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(2rem*var(--tw-space-x-reverse))}.md\:rounded-none{border-radius:0}.md\:rounded-l-lg{border-bottom-left-radius:.5rem;border-top-left-radius:.5rem}.md\:border-0{border-width:0}.md\:bg-transparent{background-color:initial}.md\:p-0{padding:0}.md\:p-4{padding:1rem}.md\:px-28{padding-left:7rem;padding-right:7rem}.md\:px-36{padding-left:9rem;padding-right:9rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:pb-20{padding-bottom:5rem}.md\:pb-40{padding-bottom:10rem}.md\:pl-6{padding-left:1.5rem}.md\:pt-12{padding-top:3rem}.md\:text-base{font-size:1rem;line-height:1.5rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:font-light{font-weight:300}.md\:font-medium{font-weight:500}.md\:text-cyan-700{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}.md\:hover\:bg-transparent:hover{background-color:initial}.md\:hover\:text-cyan-700:hover{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}:is(.dark .md\:dark\:hover\:bg-transparent:hover){background-color:initial}:is(.dark .md\:dark\:hover\:text-white:hover){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}}@media (min-width:1024px){.lg\:my-8{margin-bottom:2rem;margin-top:2rem}.lg\:mb-0{margin-bottom:0}.lg\:block{display:block}.lg\:flex-nowrap{flex-wrap:nowrap}}@media (min-width:1280px){.xl\:w-116{width:460px}.xl\:max-w-full{max-width:100%}.xl\:px-64{padding-left:16rem;padding-right:16rem}}@media (orientation:landscape){.landscape\:h-56{height:14rem}.landscape\:pt-12{padding-top:3rem}@media (min-width:768px){.landscape\:md\:h-64{height:16rem}}}@media (min-width:1024px){@media (orientation:landscape){.lg\:landscape\:h-auto{height:auto}}}.\[\&\>\*\]\:first\:rounded-t-lg:first-child>*{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.\[\&\>\*\]\:last\:rounded-b-lg:last-child>*{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}.\[\&\>\*\]\:last\:border-b-0:last-child>*{border-bottom-width:0} +/*# sourceMappingURL=main.634cee6a.css.map*/ \ No newline at end of file diff --git a/build/static/css/main.634cee6a.css.map b/build/static/css/main.634cee6a.css.map new file mode 100644 index 0000000..3ad05fb --- /dev/null +++ b/build/static/css/main.634cee6a.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/main.634cee6a.css","mappings":"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","sources":["index.css"],"sourcesContent":["@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n@layer components {\n .ltr-text-style {\n @apply font-roboto font-semibold;\n }\n\n .rtl-text-style {\n @apply font-roboto font-bold;\n }\n}\n\n/** Update Scrollbar UI */\n::-webkit-scrollbar {\n height: 1rem;\n width: 0.5rem;\n}\n\n::-webkit-scrollbar:horizontal {\n height: 0.5rem;\n width: 1rem;\n}\n\n::-webkit-scrollbar-track {\n background-color: transparent;\n border-radius: 9999px;\n}\n\n::-webkit-scrollbar-thumb {\n --tw-border-opacity: 1;\n background-color: rgba(217, 217, 227, 0.8);\n border-color: rgba(255, 255, 255, var(--tw-border-opacity));\n border-radius: 9999px;\n border-width: 1px;\n}\n\n::-webkit-scrollbar-thumb:hover {\n --tw-bg-opacity: 1;\n background-color: rgba(236, 236, 241, var(--tw-bg-opacity));\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/build/static/js/496.0908b6ad.chunk.js b/build/static/js/496.0908b6ad.chunk.js new file mode 100644 index 0000000..1e685d9 --- /dev/null +++ b/build/static/js/496.0908b6ad.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkansari_chat_app=self.webpackChunkansari_chat_app||[]).push([[496],{496:(e,n,t)=>{t.r(n),t.d(n,{CLSThresholds:()=>I,FCPThresholds:()=>S,FIDThresholds:()=>N,INPThresholds:()=>G,LCPThresholds:()=>X,TTFBThresholds:()=>$,getCLS:()=>F,getFCP:()=>P,getFID:()=>R,getINP:()=>W,getLCP:()=>Z,getTTFB:()=>ne,onCLS:()=>F,onFCP:()=>P,onFID:()=>R,onINP:()=>W,onLCP:()=>Z,onTTFB:()=>ne});var r,i,o,a,c,u=-1,s=function(e){addEventListener("pageshow",(function(n){n.persisted&&(u=n.timeStamp,e(n))}),!0)},f=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType("navigation")[0]},d=function(){var e=f();return e&&e.activationStart||0},l=function(e,n){var t=f(),r="navigate";return u>=0?r="back-forward-cache":t&&(document.prerendering||d()>0?r="prerender":document.wasDiscarded?r="restore":t.type&&(r=t.type.replace(/_/g,"-"))),{name:e,value:void 0===n?-1:n,rating:"good",delta:0,entries:[],id:"v3-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:r}},p=function(e,n,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var r=new PerformanceObserver((function(e){Promise.resolve().then((function(){n(e.getEntries())}))}));return r.observe(Object.assign({type:e,buffered:!0},t||{})),r}}catch(e){}},v=function(e,n,t,r){var i,o;return function(a){n.value>=0&&(a||r)&&((o=n.value-(i||0))||void 0===i)&&(i=n.value,n.delta=o,n.rating=function(e,n){return e>n[1]?"poor":e>n[0]?"needs-improvement":"good"}(n.value,t),e(n))}},m=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}))},h=function(e){var n=function(n){"pagehide"!==n.type&&"hidden"!==document.visibilityState||e(n)};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0)},g=function(e){var n=!1;return function(t){n||(e(t),n=!0)}},T=-1,y=function(){return"hidden"!==document.visibilityState||document.prerendering?1/0:0},C=function(e){"hidden"===document.visibilityState&&T>-1&&(T="visibilitychange"===e.type?e.timeStamp:0,L())},E=function(){addEventListener("visibilitychange",C,!0),addEventListener("prerenderingchange",C,!0)},L=function(){removeEventListener("visibilitychange",C,!0),removeEventListener("prerenderingchange",C,!0)},b=function(){return T<0&&(T=y(),E(),s((function(){setTimeout((function(){T=y(),E()}),0)}))),{get firstHiddenTime(){return T}}},w=function(e){document.prerendering?addEventListener("prerenderingchange",(function(){return e()}),!0):e()},S=[1800,3e3],P=function(e,n){n=n||{},w((function(){var t,r=b(),i=l("FCP"),o=p("paint",(function(e){e.forEach((function(e){"first-contentful-paint"===e.name&&(o.disconnect(),e.startTimer.value&&(r.value=i,r.entries=o,t())},c=p("layout-shift",a);c&&(t=v(e,r,I,n.reportAllChanges),h((function(){a(c.takeRecords()),t(!0)})),s((function(){i=0,r=l("CLS",0),t=v(e,r,I,n.reportAllChanges),m((function(){return t()}))})),setTimeout(t,0))})))},A={passive:!0,capture:!0},k=new Date,D=function(e,n){r||(r=n,i=e,o=new Date,x(removeEventListener),M())},M=function(){if(i>=0&&i1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,n){var t=function(){D(e,n),i()},r=function(){i()},i=function(){removeEventListener("pointerup",t,A),removeEventListener("pointercancel",r,A)};addEventListener("pointerup",t,A),addEventListener("pointercancel",r,A)}(n,e):D(n,e)}},x=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(n){return e(n,B,A)}))},N=[100,300],R=function(e,n){n=n||{},w((function(){var t,o=b(),c=l("FID"),u=function(e){e.startTimen.latency){if(t)t.entries.push(e),t.latency=Math.max(t.latency,e.duration);else{var r={id:e.interactionId,latency:e.duration,entries:[e]};U[r.id]=r,Q.push(r)}Q.sort((function(e,n){return n.latency-e.latency})),Q.splice(10).forEach((function(e){delete U[e.id]}))}},W=function(e,n){n=n||{},w((function(){var t;z();var r,i=l("INP"),o=function(e){e.forEach((function(e){e.interactionId&&V(e),"first-input"===e.entryType&&!Q.some((function(n){return n.entries.some((function(n){return e.duration===n.duration&&e.startTime===n.startTime}))}))&&V(e)}));var n,t=(n=Math.min(Q.length-1,Math.floor(K()/50)),Q[n]);t&&t.latency!==i.value&&(i.value=t.latency,i.entries=t.entries,r())},a=p("event",o,{durationThreshold:null!==(t=n.durationThreshold)&&void 0!==t?t:40});r=v(e,i,G,n.reportAllChanges),a&&("interactionId"in PerformanceEventTiming.prototype&&a.observe({type:"first-input",buffered:!0}),h((function(){o(a.takeRecords()),i.value<0&&K()>0&&(i.value=0,i.entries=[]),r(!0)})),s((function(){Q=[],J=j(),i=l("INP"),r=v(e,i,G,n.reportAllChanges)})))}))},X=[2500,4e3],Y={},Z=function(e,n){n=n||{},w((function(){var t,r=b(),i=l("LCP"),o=function(e){var n=e[e.length-1];n&&n.startTimeperformance.now())return;t.value=Math.max(o-d(),0),t.entries=[i],r(!0),s((function(){t=l("TTFB",0),(r=v(e,t,$,n.reportAllChanges))(!0)}))}}))}}}]); +//# sourceMappingURL=496.0908b6ad.chunk.js.map \ No newline at end of file diff --git a/build/static/js/496.0908b6ad.chunk.js.map b/build/static/js/496.0908b6ad.chunk.js.map new file mode 100644 index 0000000..e52e9bc --- /dev/null +++ b/build/static/js/496.0908b6ad.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/496.0908b6ad.chunk.js","mappings":"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","sources":["../node_modules/web-vitals/dist/web-vitals.js"],"sourcesContent":["var e,n,t,r,i,a=-1,o=function(e){addEventListener(\"pageshow\",(function(n){n.persisted&&(a=n.timeStamp,e(n))}),!0)},c=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType(\"navigation\")[0]},u=function(){var e=c();return e&&e.activationStart||0},f=function(e,n){var t=c(),r=\"navigate\";a>=0?r=\"back-forward-cache\":t&&(document.prerendering||u()>0?r=\"prerender\":document.wasDiscarded?r=\"restore\":t.type&&(r=t.type.replace(/_/g,\"-\")));return{name:e,value:void 0===n?-1:n,rating:\"good\",delta:0,entries:[],id:\"v3-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:r}},s=function(e,n,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var r=new PerformanceObserver((function(e){Promise.resolve().then((function(){n(e.getEntries())}))}));return r.observe(Object.assign({type:e,buffered:!0},t||{})),r}}catch(e){}},d=function(e,n,t,r){var i,a;return function(o){n.value>=0&&(o||r)&&((a=n.value-(i||0))||void 0===i)&&(i=n.value,n.delta=a,n.rating=function(e,n){return e>n[1]?\"poor\":e>n[0]?\"needs-improvement\":\"good\"}(n.value,t),e(n))}},l=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}))},p=function(e){var n=function(n){\"pagehide\"!==n.type&&\"hidden\"!==document.visibilityState||e(n)};addEventListener(\"visibilitychange\",n,!0),addEventListener(\"pagehide\",n,!0)},v=function(e){var n=!1;return function(t){n||(e(t),n=!0)}},m=-1,h=function(){return\"hidden\"!==document.visibilityState||document.prerendering?1/0:0},g=function(e){\"hidden\"===document.visibilityState&&m>-1&&(m=\"visibilitychange\"===e.type?e.timeStamp:0,T())},y=function(){addEventListener(\"visibilitychange\",g,!0),addEventListener(\"prerenderingchange\",g,!0)},T=function(){removeEventListener(\"visibilitychange\",g,!0),removeEventListener(\"prerenderingchange\",g,!0)},E=function(){return m<0&&(m=h(),y(),o((function(){setTimeout((function(){m=h(),y()}),0)}))),{get firstHiddenTime(){return m}}},C=function(e){document.prerendering?addEventListener(\"prerenderingchange\",(function(){return e()}),!0):e()},L=[1800,3e3],b=function(e,n){n=n||{},C((function(){var t,r=E(),i=f(\"FCP\"),a=s(\"paint\",(function(e){e.forEach((function(e){\"first-contentful-paint\"===e.name&&(a.disconnect(),e.startTimer.value&&(r.value=i,r.entries=a,t())},u=s(\"layout-shift\",c);u&&(t=d(e,r,w,n.reportAllChanges),p((function(){c(u.takeRecords()),t(!0)})),o((function(){i=0,r=f(\"CLS\",0),t=d(e,r,w,n.reportAllChanges),l((function(){return t()}))})),setTimeout(t,0))})))},A={passive:!0,capture:!0},I=new Date,P=function(r,i){e||(e=i,n=r,t=new Date,k(removeEventListener),F())},F=function(){if(n>=0&&n1e12?new Date:performance.now())-e.timeStamp;\"pointerdown\"==e.type?function(e,n){var t=function(){P(e,n),i()},r=function(){i()},i=function(){removeEventListener(\"pointerup\",t,A),removeEventListener(\"pointercancel\",r,A)};addEventListener(\"pointerup\",t,A),addEventListener(\"pointercancel\",r,A)}(n,e):P(n,e)}},k=function(e){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(n){return e(n,M,A)}))},D=[100,300],x=function(t,i){i=i||{},C((function(){var a,c=E(),u=f(\"FID\"),l=function(e){e.startTimen.latency){if(t)t.entries.push(e),t.latency=Math.max(t.latency,e.duration);else{var r={id:e.interactionId,latency:e.duration,entries:[e]};J[r.id]=r,G.push(r)}G.sort((function(e,n){return n.latency-e.latency})),G.splice(10).forEach((function(e){delete J[e.id]}))}},Q=function(e,n){n=n||{},C((function(){var t;q();var r,i=f(\"INP\"),a=function(e){e.forEach((function(e){(e.interactionId&&K(e),\"first-input\"===e.entryType)&&(!G.some((function(n){return n.entries.some((function(n){return e.duration===n.duration&&e.startTime===n.startTime}))}))&&K(e))}));var n,t=(n=Math.min(G.length-1,Math.floor(z()/50)),G[n]);t&&t.latency!==i.value&&(i.value=t.latency,i.entries=t.entries,r())},c=s(\"event\",a,{durationThreshold:null!==(t=n.durationThreshold)&&void 0!==t?t:40});r=d(e,i,j,n.reportAllChanges),c&&(\"interactionId\"in PerformanceEventTiming.prototype&&c.observe({type:\"first-input\",buffered:!0}),p((function(){a(c.takeRecords()),i.value<0&&z()>0&&(i.value=0,i.entries=[]),r(!0)})),o((function(){G=[],_=O(),i=f(\"INP\"),r=d(e,i,j,n.reportAllChanges)})))}))},U=[2500,4e3],V={},W=function(e,n){n=n||{},C((function(){var t,r=E(),i=f(\"LCP\"),a=function(e){var n=e[e.length-1];n&&n.startTimeperformance.now())return;t.value=Math.max(a-u(),0),t.entries=[i],r(!0),o((function(){t=f(\"TTFB\",0),(r=d(e,t,X,n.reportAllChanges))(!0)}))}}))};export{w as CLSThresholds,L as FCPThresholds,D as FIDThresholds,j as INPThresholds,U as LCPThresholds,X as TTFBThresholds,S as getCLS,b as getFCP,x as getFID,Q as getINP,W as getLCP,Z as getTTFB,S as onCLS,b as onFCP,x as onFID,Q as onINP,W as onLCP,Z as onTTFB};\n"],"names":["e","n","t","r","i","a","o","addEventListener","persisted","timeStamp","c","window","performance","getEntriesByType","u","activationStart","f","document","prerendering","wasDiscarded","type","replace","name","value","rating","delta","entries","id","concat","Date","now","Math","floor","random","navigationType","s","PerformanceObserver","supportedEntryTypes","includes","Promise","resolve","then","getEntries","observe","Object","assign","buffered","d","l","requestAnimationFrame","p","visibilityState","v","m","h","g","T","y","removeEventListener","E","setTimeout","firstHiddenTime","C","L","b","forEach","disconnect","startTime","max","push","reportAllChanges","w","S","hadRecentInput","length","takeRecords","A","passive","capture","I","P","k","F","entryType","target","cancelable","processingStart","M","D","x","B","R","H","N","interactionId","min","O","interactionCount","q","durationThreshold","j","_","z","G","J","K","duration","latency","sort","splice","Q","some","PerformanceEventTiming","prototype","U","V","W","X","Y","readyState","Z","responseStart"],"sourceRoot":""} \ No newline at end of file diff --git a/build/static/js/main.3b96aaec.js b/build/static/js/main.3b96aaec.js new file mode 100644 index 0000000..5ba7402 --- /dev/null +++ b/build/static/js/main.3b96aaec.js @@ -0,0 +1,3 @@ +/*! For license information please see main.3b96aaec.js.LICENSE.txt */ +(()=>{var e={110:(e,t,n)=>{"use strict";var r=n(309),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,g=Object.prototype;e.exports=function e(t,n,r){if("string"!==typeof n){if(g){var o=p(n);o&&o!==g&&e(t,o,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var l=s(t),h=s(n),m=0;m{"use strict";var n="function"===typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,f=n?Symbol.for("react.forward_ref"):60112,p=n?Symbol.for("react.suspense"):60113,g=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,m=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,y=n?Symbol.for("react.fundamental"):60117,v=n?Symbol.for("react.responder"):60118,x=n?Symbol.for("react.scope"):60119;function w(e){if("object"===typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case a:case l:case i:case p:return e;default:switch(e=e&&e.$$typeof){case c:case f:case m:case h:case s:return e;default:return t}}case o:return t}}}function k(e){return w(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=s,t.Element=r,t.ForwardRef=f,t.Fragment=a,t.Lazy=m,t.Memo=h,t.Portal=o,t.Profiler=l,t.StrictMode=i,t.Suspense=p,t.isAsyncMode=function(e){return k(e)||w(e)===u},t.isConcurrentMode=k,t.isContextConsumer=function(e){return w(e)===c},t.isContextProvider=function(e){return w(e)===s},t.isElement=function(e){return"object"===typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return w(e)===f},t.isFragment=function(e){return w(e)===a},t.isLazy=function(e){return w(e)===m},t.isMemo=function(e){return w(e)===h},t.isPortal=function(e){return w(e)===o},t.isProfiler=function(e){return w(e)===l},t.isStrictMode=function(e){return w(e)===i},t.isSuspense=function(e){return w(e)===p},t.isValidElementType=function(e){return"string"===typeof e||"function"===typeof e||e===a||e===d||e===l||e===i||e===p||e===g||"object"===typeof e&&null!==e&&(e.$$typeof===m||e.$$typeof===h||e.$$typeof===s||e.$$typeof===c||e.$$typeof===f||e.$$typeof===y||e.$$typeof===v||e.$$typeof===x||e.$$typeof===b)},t.typeOf=w},309:(e,t,n)=>{"use strict";e.exports=n(746)},463:(e,t,n)=>{"use strict";var r=n(791),o=n(296);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n