From a880a5aeacfc5be39f99e27affe5e47454cbcb23 Mon Sep 17 00:00:00 2001 From: CahidArda Date: Fri, 6 Dec 2024 14:57:07 +0300 Subject: [PATCH 1/5] feat: add context.callApi --- src/context/context.test.ts | 237 ++++++++++++++++++++++++++++++++++ src/context/context.ts | 22 ++++ src/context/provider.ts | 37 ++++++ src/workflow-requests.test.ts | 6 +- 4 files changed, 299 insertions(+), 3 deletions(-) create mode 100644 src/context/provider.ts diff --git a/src/context/context.test.ts b/src/context/context.test.ts index 5cf6f73..40c1bbf 100644 --- a/src/context/context.test.ts +++ b/src/context/context.test.ts @@ -11,6 +11,8 @@ import { WORKFLOW_PROTOCOL_VERSION_HEADER, WORKFLOW_URL_HEADER, } from "../constants"; +import { upstash, openai } from "@upstash/qstash"; +import { anthropic } from "@upstash/qstash"; describe("context tests", () => { const token = nanoid(); @@ -426,4 +428,239 @@ describe("context tests", () => { } throw new Error("Test error: context.cancel should have thrown abort error."); }); + + describe("context.callApi step", () => { + test("should throw if provider isn't provdided", async () => { + const context = new WorkflowContext({ + qstashClient, + initialPayload: "my-payload", + steps: [], + url: WORKFLOW_ENDPOINT, + headers: new Headers() as Headers, + workflowRunId: "wfr-id", + retries: 2, + }); + + await mockQStashServer({ + execute: () => { + const throws = () => + context.callApi("call step", { + api: { + name: "llm", + }, + }); + expect(throws).toThrowError("A Provider must be provided."); + }, + responseFields: { + status: 200, + body: "msgId", + }, + receivesRequest: false, + }); + }); + + test("should throw if provider is upstash", async () => { + const context = new WorkflowContext({ + qstashClient, + initialPayload: "my-payload", + steps: [], + url: WORKFLOW_ENDPOINT, + headers: new Headers() as Headers, + workflowRunId: "wfr-id", + retries: 2, + }); + + await mockQStashServer({ + execute: () => { + const throws = () => + context.callApi("call step", { + api: { + name: "llm", + provider: upstash(), + }, + }); + expect(throws).toThrowError("Upstash provider isn't supported."); + }, + responseFields: { + status: 200, + body: "msgId", + }, + receivesRequest: false, + }); + }); + + test("should work with openai provider", async () => { + const context = new WorkflowContext({ + qstashClient, + initialPayload: "my-payload", + steps: [], + url: WORKFLOW_ENDPOINT, + headers: new Headers() as Headers, + workflowRunId: "wfr-id", + retries: 2, + }); + + const openAIToken = `hello-there`; + const stepName = "call step"; + const timeout = "10s"; + await mockQStashServer({ + execute: () => { + const throws = () => + context.callApi(stepName, { + timeout, + api: { + name: "llm", + provider: openai({ token: openAIToken }), + }, + body: { + model: "gpt-4o", + messages: [ + { + role: "system", + content: "Assistant says hello!", + }, + { role: "user", content: "User shouts there!" }, + ], + }, + }); + expect(throws).toThrowError( + "This is an Upstash Workflow error thrown after a step executes" + ); + }, + responseFields: { + status: 200, + body: "msgId", + }, + receivesRequest: { + method: "POST", + url: `${MOCK_QSTASH_SERVER_URL}/v2/batch`, + token, + body: [ + { + body: '{"model":"gpt-4o","messages":[{"role":"system","content":"Assistant says hello!"},{"role":"user","content":"User shouts there!"}]}', + destination: "https://api.openai.com/v1/chat/completions", + headers: { + "upstash-timeout": timeout, + "content-type": "application/json", + "upstash-callback": WORKFLOW_ENDPOINT, + "upstash-callback-feature-set": "LazyFetch,InitialBody", + "upstash-callback-forward-upstash-workflow-callback": "true", + "upstash-callback-forward-upstash-workflow-concurrent": "1", + "upstash-callback-forward-upstash-workflow-contenttype": "application/json", + "upstash-callback-forward-upstash-workflow-stepid": "1", + "upstash-callback-forward-upstash-workflow-stepname": stepName, + "upstash-callback-forward-upstash-workflow-steptype": "Call", + "upstash-callback-retries": "2", + "upstash-callback-workflow-calltype": "fromCallback", + "upstash-callback-workflow-init": "false", + "upstash-callback-workflow-runid": "wfr-id", + "upstash-callback-workflow-url": WORKFLOW_ENDPOINT, + "upstash-failure-callback-retries": "2", + "upstash-feature-set": "WF_NoDelete,InitialBody", + "upstash-forward-authorization": `Bearer ${openAIToken}`, + "upstash-forward-content-type": "application/json", + "upstash-method": "POST", + "upstash-retries": "0", + "upstash-workflow-calltype": "toCallback", + "upstash-workflow-init": "false", + "upstash-workflow-runid": "wfr-id", + "upstash-workflow-url": WORKFLOW_ENDPOINT, + }, + }, + ], + }, + }); + }); + + test("should override method and add headers if passed", async () => { + const context = new WorkflowContext({ + qstashClient, + initialPayload: "my-payload", + steps: [], + url: WORKFLOW_ENDPOINT, + headers: new Headers() as Headers, + workflowRunId: "wfr-id", + retries: 2, + }); + + const anthropicToken = `hello-there`; + const stepName = "call step"; + + const header = "header-foo"; + const headerValue = "header-value-bar"; + + const method = "GET"; + + await mockQStashServer({ + execute: () => { + const throws = () => + context.callApi(stepName, { + api: { + name: "llm", + provider: anthropic({ token: anthropicToken }), + }, + method, + headers: { + [header]: headerValue, + }, + body: { + model: "gpt-4o", + messages: [ + { + role: "system", + content: "Assistant says hello!", + }, + { role: "user", content: "User shouts there!" }, + ], + }, + }); + expect(throws).toThrowError( + "This is an Upstash Workflow error thrown after a step executes" + ); + }, + responseFields: { + status: 200, + body: "msgId", + }, + receivesRequest: { + method: "POST", + url: `${MOCK_QSTASH_SERVER_URL}/v2/batch`, + token, + body: [ + { + body: '{"model":"gpt-4o","messages":[{"role":"system","content":"Assistant says hello!"},{"role":"user","content":"User shouts there!"}]}', + destination: "https://api.anthropic.com/v1/messages", + headers: { + [`upstash-forward-${header}`]: headerValue, + "content-type": "application/json", + "upstash-callback": WORKFLOW_ENDPOINT, + "upstash-callback-feature-set": "LazyFetch,InitialBody", + "upstash-callback-forward-upstash-workflow-callback": "true", + "upstash-callback-forward-upstash-workflow-concurrent": "1", + "upstash-callback-forward-upstash-workflow-contenttype": "application/json", + "upstash-callback-forward-upstash-workflow-stepid": "1", + "upstash-callback-forward-upstash-workflow-stepname": stepName, + "upstash-callback-forward-upstash-workflow-steptype": "Call", + "upstash-callback-retries": "2", + "upstash-callback-workflow-calltype": "fromCallback", + "upstash-callback-workflow-init": "false", + "upstash-callback-workflow-runid": "wfr-id", + "upstash-callback-workflow-url": WORKFLOW_ENDPOINT, + "upstash-failure-callback-retries": "2", + "upstash-feature-set": "WF_NoDelete,InitialBody", + "upstash-forward-x-api-key": anthropicToken, + "upstash-forward-content-type": "application/json", + "upstash-method": method, + "upstash-retries": "0", + "upstash-workflow-calltype": "toCallback", + "upstash-workflow-init": "false", + "upstash-workflow-runid": "wfr-id", + "upstash-workflow-url": WORKFLOW_ENDPOINT, + }, + }, + ], + }, + }); + }); + }); }); diff --git a/src/context/context.ts b/src/context/context.ts index 36581ef..b1cadef 100644 --- a/src/context/context.ts +++ b/src/context/context.ts @@ -21,6 +21,7 @@ import type { WorkflowLogger } from "../logger"; import { DEFAULT_RETRIES } from "../constants"; import { WorkflowAbort } from "../error"; import type { Duration } from "../types"; +import { getProviderInfo } from "./provider"; /** * Upstash Workflow context @@ -351,6 +352,27 @@ export class WorkflowContext { } } + public async callApi( + stepName: string, + settings: { + api: Parameters[0]; + } & Omit[1], "url"> + ): Promise> { + const { url, appendHeaders, method } = getProviderInfo(settings.api); + const { method: userMethod, body, headers = {}, retries = 0, timeout } = settings; + return await this.call(stepName, { + url, + method: userMethod ?? method, + body, + headers: { + ...appendHeaders, + ...headers, + }, + retries, + timeout, + }); + } + /** * Pauses workflow execution until a specific event occurs or a timeout is reached. * diff --git a/src/context/provider.ts b/src/context/provider.ts new file mode 100644 index 0000000..bbc4b8c --- /dev/null +++ b/src/context/provider.ts @@ -0,0 +1,37 @@ +import { PublishRequest } from "@upstash/qstash"; +import { WorkflowError } from "../error"; + +/** + * copies and updates the request by removing the api field and adding url & headers. + * + * @param api api field of PublishRequest + * @returns updated request + */ +export const getProviderInfo = (api: Required["api"]) => { + if (!api.provider) { + throw new WorkflowError("A Provider must be provided."); + } + if (api.provider.owner === "upstash") { + throw new WorkflowError("Upstash provider isn't supported."); + } + + const { name, provider, ...parameters } = api; + + // validate provider + if (!provider.baseUrl) throw new TypeError("baseUrl cannot be empty or undefined!"); + if (!provider.token) throw new TypeError("token cannot be empty or undefined!"); + if (provider.apiKind !== name) { + throw new TypeError(`Unexpected api name. Expected '${provider.apiKind}', received ${name}`); + } + + const providerInfo = { + url: provider.getUrl(), + baseUrl: provider.baseUrl, + route: provider.getRoute(), + appendHeaders: provider.getHeaders(parameters), + owner: provider.owner, + method: provider.method, + }; + + return provider.onFinish(providerInfo, parameters); +}; diff --git a/src/workflow-requests.test.ts b/src/workflow-requests.test.ts index f78b92a..0a74a64 100644 --- a/src/workflow-requests.test.ts +++ b/src/workflow-requests.test.ts @@ -563,9 +563,9 @@ describe("Workflow Requests", () => { url: WORKFLOW_ENDPOINT, }); - await triggerFirstInvocation(context, 3); - const debug = new WorkflowLogger({ logLevel: "INFO", logOutput: "console" }); - const spy = spyOn(debug, "log"); + await triggerFirstInvocation(context, 3); + const debug = new WorkflowLogger({ logLevel: "INFO", logOutput: "console" }); + const spy = spyOn(debug, "log"); const firstDelete = await triggerWorkflowDelete(context, debug); expect(firstDelete).toEqual({ deleted: true }); From 6682c4aba926b2026e483468c77cdeac8ef96474 Mon Sep 17 00:00:00 2001 From: CahidArda Date: Tue, 10 Dec 2024 21:26:05 +0300 Subject: [PATCH 2/5] fix: bump qstash and add resend test --- bun.lockb | Bin 424401 -> 424075 bytes package.json | 5 +-- src/context/context.test.ts | 83 ++++++++++++++++++++++++++++++++++++ src/index.ts | 1 + 4 files changed, 86 insertions(+), 3 deletions(-) diff --git a/bun.lockb b/bun.lockb index 9c75fa829a58ddbb8f7080223ae14b97eee5d9b1..dfecaacaa3f34af8f1b90ae6a2dfa19c1470981f 100755 GIT binary patch delta 64132 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�U*&x|10lf&)*wf1+l0v`Y zsj4)JS=DQy-wZ!)4xUmnk7)k=cE7=#tVH^8#?PME-;T>UK`p;=sb@#XV>M2 zrqqTWB{WpAA!k|5wX9JOThG5aEX7l^qulr@Nx^M+tju?&Mue8TcU{~sG;(>(q+p5! zZ^WDK#;s0uCb;Dfhl68QSU>m$p-GAf4!lOiX5O0`T1iN~?cGa5FX3ri=wB9;BY3^= z>X`$MlN@y|6U(i5n5GlD#LMR^LR5tu&$vzt7C8oU2(jdnZaX3RkJvM>_a+aqGYENS zIR9`<9t(#)#ve)<-b@IdzEWMJ<$XROZY&R{@*G$4csTS6zCTCQ1)Yj&T5>I+i@h>F zBy@pW`f%Uq8>pU_C6gp{J)XZHF%5&;@y>Tkho%Nkx-k$K?Pjt?NV$ofhFdWr)miAq zJ{b-@g0G^u&(jIN;tj-O;*#4%#s0PFFC?4sQizN6QvQH9-ak(%Z}!it=S^dSH=H>C zV)z7aVy%~YOCXSh*HDu#bQPXDoemkC9F5Z-$G>WRv{9^yS0+cV^3$V{M&0=!7B6s-g(~HT9e}M@W;nrey_k& zuW|9yj(73KdfwV6lcVqSm*0Bc!nPQ1BvCQ$fyv3y#=n*M{h5c?mng=8_LjNj&xV8P zt5ru$rMqiFp(;XNS>`}DCUl9eVC@ac2&oUe{YK~ro<=pwTS2?u<=5S>?NYokUP)Ti zcH`OF(&qTPYuZdLLKoqw&E8TK+GIUu14~?+d;GrjXVDZqmFJIL30^O}kT-8C@icGz zl-)~frvs&5iKhj&zL&BJPqW^y=dgSI8Rnn&1fJ%wzZ?4zZxCKX?;=0vKE5aRJ@UL6 z&+8%0_Mp2)-?OU^oweS@PbiB}j<;?2kdRtPu8h_FeDqdZ#74Y6cz*G>t@A6x5MPlT zg)`R6bKnDDFLW=VSzajmL0!%olSzcso(QuxiLv@eP5I9e^3$I2Pz}3|kat$_quNl9 z^<1gS$+_Jvc{S|3@0PzB4mB+E$Iq|W1iZer)qE2#9glutrRegoSI_j+&>BLcyi{4U zlcR73Yq1FRc!Wa1eurl~8VD@J^QLidH=b9?P|}9ln>o|F1aE;-nFGmAa`a<#Wz9LE ze7q&K-nV#z@x0uFPd;uN6KwuO&7@sG$WNh7^)q;^&J0k?jWu03htLc!M@`5oyh&b; z@^U z5uUouzmKoOyTJ2Qdd$;)E)y4uU+A`H{RM;`Tan}(aAV(LkGsuZuh#?PtJ-xaIbm=S@8w4|X%&3x}?Q z>1N^I5njVn{rxA>M$h{lPD`1FWAIeIf8V+dFBOkHC7ZF`cv=rycztrx3wFgZ2To_g z;w5|MY4zKNr>Wp?{G(s2Tibzns%@0FA}??=-VcZV1?yeIA{y;*KX|`iX!H($?CErd z;6}U&B;k2=X;SDbJpTkOnr&b5i}O0inc~KlheP+n)MT$A!O!s6Gw=X;+RHUt_4r$p zf|K$1gn&zV8zC*Heg{XsQYXjIMR+RBzwO^>?HKu#;`uSC%BV%^@aa1fl$r%|UygMRZuH`IpSsSUOHXHD$X+R($bp&x5Qecr4| zcQv7*epPBiC+!x?{H$-37l`}B3vi)QyN^MBsQp_tp&7NIhigKi?+B?&SOn;V)A#tR zlQ*}Vo862r!_Kd62|xR~<@~(fjr}UjM?D$*qUEG+WtL%yuG`Ba3WrRw_;Fg=m|nvskkt>Mg#l&>CJM@=Lcatjl8$=IZNI0 zZ^EH1u-dgF_#<8q?R7(^|I6q8QacGx)6m;Dh3>-BHOmJ{&m~96aVxlHekarw%qb(1 zf|tLqQ7XN-Z!`gw>MzWH;{8>>QTu(5+uR`T-FV)5t0%|r!lCx%eyRRSJqK^FSE^?5 z6L`Jx{9Dh@wQ-v7$sYs)X?{vppO^8nJdZeMpj-ZZ*eP;je+Y-({LtUuvhqz$iirHk zz3Yd5PLf+r)U6){0z){7&GqCY=U;Bd;cʢBV!`-O5UYOa{IuO>MUxv@Wnop0R? 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 { const token = nanoid(); @@ -572,6 +573,88 @@ describe("context tests", () => { }); }); + test("should work with resend provider", async () => { + const context = new WorkflowContext({ + qstashClient, + initialPayload: "my-payload", + steps: [], + url: WORKFLOW_ENDPOINT, + headers: new Headers() as Headers, + workflowRunId: "wfr-id", + retries: 2, + }); + + const resendToken = `hello-there`; + const stepName = "call step"; + const timeout = "10s"; + await mockQStashServer({ + execute: () => { + const throws = () => + context.callApi(stepName, { + timeout, + api: { + name: "email", + provider: resend({ token: resendToken }), + }, + body: { + from: "Acme ", + to: ["delivered@resend.dev"], + subject: "Hello World", + html: "

It works!

", + }, + headers: { + "content-type": "application/json", + }, + }); + expect(throws).toThrowError( + "This is an Upstash Workflow error thrown after a step executes" + ); + }, + responseFields: { + status: 200, + body: "msgId", + }, + receivesRequest: { + method: "POST", + url: `${MOCK_QSTASH_SERVER_URL}/v2/batch`, + token, + body: [ + { + body: '{"from":"Acme ","to":["delivered@resend.dev"],"subject":"Hello World","html":"

It works!

"}', + destination: "https://api.resend.com/emails", + headers: { + "upstash-timeout": timeout, + "content-type": "application/json", + "upstash-callback": WORKFLOW_ENDPOINT, + "upstash-callback-feature-set": "LazyFetch,InitialBody", + "upstash-callback-forward-upstash-workflow-callback": "true", + "upstash-callback-forward-upstash-workflow-concurrent": "1", + "upstash-callback-forward-upstash-workflow-contenttype": "application/json", + "upstash-callback-forward-upstash-workflow-stepid": "1", + "upstash-callback-forward-upstash-workflow-stepname": stepName, + "upstash-callback-forward-upstash-workflow-steptype": "Call", + "upstash-callback-retries": "2", + "upstash-callback-workflow-calltype": "fromCallback", + "upstash-callback-workflow-init": "false", + "upstash-callback-workflow-runid": "wfr-id", + "upstash-callback-workflow-url": WORKFLOW_ENDPOINT, + "upstash-failure-callback-retries": "2", + "upstash-feature-set": "WF_NoDelete,InitialBody", + "upstash-forward-authorization": `Bearer ${resendToken}`, + "upstash-forward-content-type": "application/json", + "upstash-method": "POST", + "upstash-retries": "0", + "upstash-workflow-calltype": "toCallback", + "upstash-workflow-init": "false", + "upstash-workflow-runid": "wfr-id", + "upstash-workflow-url": WORKFLOW_ENDPOINT, + }, + }, + ], + }, + }); + }); + test("should override method and add headers if passed", async () => { const context = new WorkflowContext({ qstashClient, diff --git a/src/index.ts b/src/index.ts index 7c868e2..0da49bd 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,3 +4,4 @@ export * from "./types"; export * from "./logger"; export * from "./client"; export { WorkflowError, WorkflowAbort } from "./error"; +export { resend, openai, anthropic, custom } from "@upstash/qstash"; From e0011e9633571aeff8ad3dd0576b633dbc967f31 Mon Sep 17 00:00:00 2001 From: CahidArda Date: Tue, 10 Dec 2024 21:27:42 +0300 Subject: [PATCH 3/5] fix: bump typescript-eslint --- bun.lockb | Bin 424075 -> 424313 bytes package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index dfecaacaa3f34af8f1b90ae6a2dfa19c1470981f..df7baf6d74279ee262ddd7e7692b407a61c35924 100755 GIT binary patch delta 65357 zcmeFacYIV;zxF*lnSl(wL+C*|gboP=GW6aol+XhN2#|nDK(Hl50h@Z_QuBd6rA2m}IU0)c{z z+_{@}8rUtqaO98uJFDv`Z?0GpEfj}#( zXJlqiPh2oRFrPs3&#*i{aqhfn>3Ni5Ze~_yULXTc`PU(yD)1vh>CTv&o|l)AKRqxf zWAQ@O=uS$ZfaM6Nl4s;D$jh9Y8_3ALa6v}S;=tPSCSpeJ{G1F5@=I(WP?d1CsD^5o zK5br(n&vC)s!)VPWG_NjgQsUqT`&{>tX$<52pq;KUBqUx`J8hxrx+b=C6cP!4F|q__~xzHB6uF*DJ6I zT^qduRzVizWG2q05c3ygFV3GfZ+gZ)NyfG!G2~? zjxbGKww~#$AhA@V!La&nYEJsJ44UdmYcEZ1baz1-EdQ*GoS7LN&J4=$-P5r(^M@sv zcBs(EWIGO4hkit3s-1E(vKD6K1OlfimWsa{rT_(hIHtJk(Mmlpm+{Rte_n3hwA|dl zMCOOu?Q!a;Qf8-T&&!-12>gy#_-~CpreLtUBG|xr)!h}WnZK*K86A1EGO{ygEDjV} zy%APoPc{n#7(fO7q$9IAEdv4ixnMl3!q#hL;*UgYls%62tDc#iIX^u&cK~+jD_WcI z3t*+2o#@;13wq%wgP}qj%V>4R9cTtd!Ae*O+X(+@`0njY+egDkhyBA;Kn2(UE4_W~ z0|6Sa;4V0x0ambx4wA=B7&Mwbv&}cPqbbmCSi?Clr&AX-_hz(ekTY-YTy?+;Sk*oE z!3?N^TVTzn1=c@~X`1B}Sm7GL z$|zv%A9XVN0IZtL$jw-ok)4+tolghItt$4;?ygcb^Y`^M)!72edMm8SwA9+?S)B&g zz}_ELxK7r;q4h6g{eO&@_{U*2;{jOl9)cC`PV0X&Ofz;XxYQbEzzTRitbnO-b-1PV zuV(!NR)6g-Dcvl*i^^z<-Q(^mT{D00VAHud8R^sV0)arOA!hL03aiuqu>P09>XT`f z2gB-<_Lk#etptwc&j*>xybi03Prz!V2Vo7)+YNUsxP}!%hCKGisTAO5JTzLbhReX0 zj5PW(bQnE#LGILfivxk-?vl8+&JuT5TvB|`^GubdXXNJPkjAu}dAYe4Fx9Hmm9f)#f`_WaEG>_Hz{U1USwY5A*(rq(^(gfb2ClO~%I zC&Frrtjw&8#OYH57v`!wfk46(lj@DIYLE}BO+~uAqQ`5QC{e{8?*n1mc`(}n| z-dE9Dluw{lxVf`TVLydypfhr(rO!>Do^cedLO%y9kJkw={Q|5e+dSLkxzFn8cE1a) zO3ltCB@Q})yRG4N%Qww6g=Ak02G6^1nwd`c%59MobBL-aAjDDeYeQ0VQ*M|7*;LTz*^G^EYE;7 zVTZ%D;3Qb9O9HG~m9_liMW$9KEFXgDhWvuP#!;}z@=93E@@l@R<#lK^*R*+a=V{U{ zFEIV}4y;;6o3k_F63}ZFnD7;s8htmc#dsymU@PAD7N^gho0;pbD_$T>nYUmjv*0{;SB19uomQA^PTp+V?Fg*m)yA$^ zV{eI$wwW39Wx&C%Vt-FK6=RNT`s?D0GV^r&OatO8_hHC;0q)?B*^yArN?Um(yF{`Ovz@f)x**a`R=aSsXJDUFE+Ep>6tl!Ha67zHume5_rqlgcfaL(EZ^|7Db{7MN;5~d`1582 znmuFm4p^nSh4AW^>tL$sdR60{uI{d?HS@oJ&Q$zUSRw!QA%K6=pP9iu{nQ1SbEgNQ zXWBA7O#?^Iw$Y<&^oSZgy534S_2fLu4K3R<^3>wPaP$luJ?lo#xLb&zuJ3O-dWepm zk)wzArTA+^bh2y@*9Bj@TdFnadjHF&0V};?x+gD#yX>4m;C{4XMelGbA2H#gw@7PT zr+Q82DmT7*+dUZ1~)f?mwdCRQ! zJz;fiYgi2x<@#uKX%$#YNgS*$Of53@dD$6xoE`(uS)Cm)_N7P7ics+#({4dn>2I(+ z3V%w~pNM?n{Y$)9=HL#%JRiEuvoBaLrvX zGc)^j>@|rvkM^hxM{o9KxLe{IbS)F(__dDS_2y1n;2-H6>>74`9mhZ7Ear(@E~!2e z>-eeM>pHb-rbSnSdGj-}@#Hz9*)5{GM2nE)5AI}AQJXf0HP~yw>gnk7#zUnXf9@^F zo}M|4A+y}Quy)&Cx^{c>yC(jyr$!?JfT{qSy!Vq1|N5q)NPi(E8aBA4(pp!+jQMTv^ry2&a}ji9e4)F zz*h4W5Sx)zFn8W`zg-X3F{wvW-Co!DKTdpwi#}CYjlCK=GdDdaCw+0?CN$~i7woph z;UB}e&`Lce z!SP4-P*?@%-pEwYgUhgF7j*C)B;3&~8N1!R^_qnjH8!o4<({n9Y|yVwOd_Ad8k*7C z?r3TX^&WN=W@h?=nXE;Dmz$Zv7kzm73|fVG#7(Q;AU}HkN~K6@qfW4@IF<88X7_Yt%P;a1BOf^u<3IFbPBj_8Y*a(zrUMPIzkpm`E``!bhsYJ^g@ z0C)E_)vVLc6d(>(_x^}o-JjgwHUq4TYgvx7{4?Pz1%~jb*CteHped;fmm|V)SWC`z zum<|YgG`O`W|>?1ZwEO3c9&0l4P@5jgrvATniRBdbyddH2bwq98B^(ngNHw_J#tc; z8AXx%Mp?-cvoKI2B(HkTU#mbM52=%M+0>sM94kyNK*I`l)?vnwb!ar zzWNE3TpY43!&~uU-3?zQ$01BMCx#@2x1$E)73W7&kEm6G?uLO$?%PAkxgUMs*(vAN z9+n#3hM(e*$iSqSFUq;AF}CNxqm*OZ4TF+mW|ntr4^NG`r@T9EIE{l}XZ*^z>BE!4 z2~4};e$q5}XdbGYJ8^JI%)tuoxDl!0zcBQ~n{xC?j$=S{^TR6U6{wLW<|9cluU2%& zjZ6&(8EmaFlJT&la66RBR$9dfdnmRg{7wu^3LTJgk3EtS{tcIUE5=QDJUNaD+Zz$< zSNvv_+6zSjFQAk_&`ltLs*Ll#?y){8;W4-r%Cz`$lxcsJ@+eB_QJ{fI;ik+HH6#OL zKvK-qs_xPAQ^SvAoZtsh%hzE(k3mL7 zNeK^Nl~;$DD&K`tM^ZJ)R)jM7t1^{qnZAkjJ94&FrV+NHRBb9sQ~iMI=BM74qh=EJ z3Tob%8S(D8wA7e&@$Txh)bQ{44aSeAqH+4yc59DI4KL@cdY)eZ8X)HP+U{zMgIUu? zV~le*q$P!0)Qyf+scoo9#eUUT6)z}Ovry`36K^|8W6PhV&ev|y_()94`flwBsp0AM zqeDU!-HOt7$*NN|r%N_D2V@slHt>!$JdfLk~@60Y4ST4tt; zlj+7!iG+7xix8FZJ0Z#W%`L>%_MDO}bQMZt%GCP})R|VO)7TWsw89cMerm*N>ZVPN zgl0FP58ZkLQo{G)Qk@+4#7D_-2vgnkkxAi}O^c(CPI9KZh0`M84c5j`7?|X|q zgv;`(Gnpj(ap}x<3#Uh%PuwDWlA1?{n8t4w%1q$&w4~5JRH|EVcuGvE7VgoZsp0M| zOfxaqnOqm6G|I?mP?EFHEu0Yv*J#P3Mr>u=6XTP@OHk^6e;kJ2KxtJoBer>~=tN~~ zJ2Tv(nUU}d*fg2SxEsbLg<~m+3SHWt@F}Qn?%HuFyiX{a6$!sCjW25xgJe~rQKoZW zMXAMDb|)sswK2ksf(uYR@nT9};(KW%o8_ilTT>#l>JCQP^qG5CqRhBTcs@DK3X;d` zca&1}$4+=~J2U3|Ei8N!O5-Z*ZWx^uK4?`bH(@|hxD4&24E*K`_eE*?vCm9Ra^7;| zvm#ClH!Uj?THXO4x8A^%P!X>F8WK(eH$FQOp4%~6D3#-R)KHTi4N{dsLUy+4`=Cr$ z(XY-*H*H=d^f4>Tcz5Ewlu%FBgf!n(h-;MZ`Wlz<9Yi0T@2<`1?j*ZMb0R@xrXOT# z*FYfMcRh`3qVH-*jb{3;Yj9=wt}k&-_FY5hT;tk`%fu*6vzpAO;4;3C7u#y}2n5C` zt~1Y#&x?fbL7T?bX8S2ht7R#F_e)LHP9I)GgPR$mVY$amTM!8yCQe^>;)0Y=6_)4z zzH2P5fxc@!F5~-Av8^@DHPrWAgv-Qu43`NP(?@ZSE$AM^VS?S}o0P?SxQ6>tTeJGu zL~z+eaG7jN^;2>r;`DQCFN_3{Ch&W>OyI_>6odVwvT>Pc58*Q5Vg^J@fx|CY_$FN1 zF=E|>DM{gHP?|yh$szoEvC_iO$xXX75}w9{q(JuY@*s*jG6>Tdprr&op@PFXil-~ zX5OLB(0X;((Vx3EnzJyrQh$!-yr3g?>{Xcm`Ls~D;@Z8l0B z!;vH-Tf*>nM$1N6TI~?t5^g-+GzeKx&~a}3 zvWRn|o3<XjTiQCc#Xgjq>WWjB6JBs_Ai=@ibdRLn!!#$j9@L21Bn zquD1Z+&?Som%v%90Hq=rzt2(h77eYDIy5^vo;g5=m!s6}O^=+d{7;}B{hZk?wjg>FZ&EZ>$AbFx5pq2a_O(ILSA3C%%Gck8W6 zaZ=o(t&vc>rB;WY!8J)fp+;BwCzN$5;aRxU-gFc5=T4M*h89M>jp~HroIErsRPHK< zm3wR}6~{HsPv<#Y6onK^U9B~1;<}X3KwK=igjO89GB95kr;hE>VI8#!{g^~Q8}q>Shy?iZS21S!E6s*{F6V6{gBMH~yhWsP_tW zLcNDl!k6RX{=lvfyHO)hVNJ(S@D_ih6KWPMDxZZ-X5R^Ra`H5wJB8V{f@Fp9=5eVbW+x#MDC z8-p5#UwMC}_zN{0WmQ(R;h>@OP54l;X}BJ^9pq>)CAVi;5uAt z0-BOF=xvlbHRvy(l~bb^bXL@cisuO-;e>*;a(y%chE3Yjc4Q$mDP+Bm|J@X-y2E8d*vvp>GnRqv&G=j;2 zMtv342UXU8#&U;w;#JnqE*oXrhX+r&>-lbi--0J_G52Z9UK;{|S^l}iy1XW-G>^4 zpJ|J-TW#NZCpu6gltvpNhfoI;w|+eEt8yiv-^}awL59N>L&^DA`(s0df#TzWlJI58blE)+qEnE;Dk^+Zhd^gY|7F(@#I*GVM5Y zm)XQk=O02%@>A4MXm!774Ks%>L8<;_+=M5R;}G2uW^|Q*z>FZ)2qy4VC>6^jc>tvm z%X1#xexQ<3tP@Px&JUVqGu!!6)Oq;vB#q3!LMas%U?xxd-6lU1@+y=DqUo4ps0&bL zDQ*8yiLMCeqXzpSHxwnuA(VlsPv1Qy=juw7deEO{p$|~>Amgm*!^Ii97s7@$WuRD|D_L+kE8&>#6l%|pyV9%l2`AP@!A5m@mM0BIv z*iCyq5}vW&tPv*RyHTnDH=|VGOO#rizIiP zWj7&~ol%dQ4mJh49i=4A`TsN2nZh=D!W7njeBqquro9yjKZLD|Uj*9M`O+=I*7ix$ z_1up?mK=u|PXNSabO6c(*Sh&TN}2gB@sMB;cRIMVn3{(D5LKL5xbrh6Bksy5143SAeD6c4tEeK+9R5Uc3Lcyi?)I#y zEXh$e7nMvXnv)E)H2A zb`Kf{rk)3U6RsPJU2o$W>_=$yBJJk8W*58eFLwP}?CSkeG~D&Yu2+j)wGT#pr{d~w zic;+Q+ILMn(LH!5>Ul9PrYMDatk@NEIBM%(?7BYc3LnO$HeveH3c;7nr1GCFIN5I6 z#}VgEw~)Ve-6H7?lf4SAYb52FV_q}6IwybwNhX2qlJQZ zk#N1^B?rfNl-3fn3f_g%5I`{?K18W=Nss4u)!#2pof~!@!+swLuf#T*5N3Ppf5P+# ziaWmo)NDU3Rqii0?T1LX&j%(AmJ`xnj8dO5lxVKqDD{~s$sZ`Q3~>f^3x8x+`p|5U zRNPAn??WjxO9PK2zC@{C%@S7oBQs$AJs>n3)!jYzR*F;GjsH2~9Cy=xj)ZG|VmB0T z!w|*`N?ql6>1CYcpp?6ISW5T+u1?s^gXlj{y?v!8KoPg-mx!~}jsG>)K+HX8bLYswC&&ob>i++nZ_1*a2Bcb%q*{|Gs zzo$5Nx`n?-!k?grk|PT^ZO%>IACd5)FU;<2ZfB06)JH~L_obQY{uANwmaj~$SZI0L zIqd5a13A1FWqX=|c+4ul{X+G=@mEn!g_*eelR7=h*02Mm*6^o7_(PONj(I-Z>Xg}O zO%KdPDJ1nL=N%}&b=?!c@uK#$=_@k^rlV~6*&1#;qn7ff9i@1jCU~X$C(5*%Mpw6Q zi~B!4If&rijTcheyuuhK68;c_ddiI4Cf}J_u%-Qw9EVUc{*VpbgX-e1a;I<&$4*ys zbot(tD$Y$m=nMJq2=9gDxF4dM7mHzN2&$*Q8r^_P#8EZ+0BNX&IawlD)L@m}{HeoPiPO<|l#(>VU>Qn_ z7yAV7>i2u`l_=3K))?m>uDXVt=v-swWua6)665X5Jt)pGjIM8RX%;hrXpXj}u%oCZ z&!3lgMU_eRZH#Iac6Bz`x}_bz>DjM2X^-;?t2mL+I*dL1{qY@KDwzMoAXGMvLc0_D zr#J(>!m6aT7=u|3+3lHY@zpSXj8SDXH&_k$l&nUvncZVhol$(ygAUq{GV7<-`@c|X z60=#hFJn?M8|fU>Nc{Y#Y2imvT~XZ6(iVZTrp~l7Y4$`ZKmYjXEb@wKP@x?dhkM6r zI4Pk&a1Qm3)p5E9%lR%DZ$0BYamJZgp6)ZTF2Xs`I3GXbEM1}4I^vAeJL5cl#@Vc5 zaoBlhoO^Kgw*@=n>{ChBiSd-tcliZ>8E0P;v})yI=a@6j+s`<(QggD_aX8z8(%3Nz{+}o_ zymfFJSgk}zr@)JEz*yLUQT<&>AG-*hLh&wXN=mpe&+%4~PM3JV`XsrLRd;8gYs&mrkSeC%1x#W^#`x?z?7fHm|8 zs*Ar3o$?AB6SyUxiB{@nL0gJa`FX=o*DHmu<&Gu<`BuSKaGe6ZtO zR_5h6I*=tXbWQ^z_^(%|;Zk5ztUFMu1qXx? z$zFU*B9?AgoHqN|0F(mIAnf)_iv6^DJ?X`_BElaSlL*2Q@#7@tBCimmdRczM8kKC% z4JgyE>d9kPv4C)Nh(E{pnZ;!kN{1?r1BBdw(vlbOHt6VwO7k8l-_=Ng z+me|mv%EiyOC8H>q$~bJnfBDtBe|JcU7NrnTv|x!B1-cvN{cM{(8Tqdo3e3)TFH}E ztIX258fANnM{ZxB%>7==7N(@8wZ@^$$kZ^p31w#p2hti|T1Pr!93MNkV}$+uHdL}( zFDoVd9nvaA{np1 zs2!bC!WBFmL)rC*`-9(6Diud1CQ7$tCvdJGQZH|A_z#K?Li>-{s`@9h96ob@DIuvE zk1u{j`O_oRr<=wjPYgnr;4(ve2d*=N<|HaYOq0&w6eo~@GQ)o_O08o2y70mG9#IwY zP%IXcQo=9eGSfnxR=tOrGIR&$l|iWX#3|>U7{HE!G6zAOf$l>Mh^80*4yAT5C#e>x zrXBopgl06_QIv?e?KZ^^ptL7nNdw*4Icp@`|F zJe208QF~Cme05@Pvc7qsJ(#ZHCelS|JW~aR+B?Nc^X8lZQ9r3U#Y$(N2T*4+Z#B^I zZ?a5B-GMR#?`vEQDz8?8En=Nzaq|h zFKxIpEk6|SzuL!N!;N9;=U*kc6c)yoe~DuN3sS%VG=YEp6D!;hpm_9xf5G`t$N#~K zz#8XYf5-A?!SxelO8b{s_VX+=(0tA6=wD*_Gno8%WAr;jy4V1GkFmb;?^u18uf0Ep zJ2jnHZ`cT@L0ILVtkB+9^PQT0@zas9fR^?XVY>U5Sh>wG@;|VWnPvSmt-n~|XIq|Q z?cyMqXLSkoZokl}>=$Cb_53?lW;xbhtW0vP7KZ_Aoqvhtf0>a!E57L{!}2e%{;=^X zVengHsSQw)mC#kzE-nXFfYM+UP(d~Tg}V#r5-Y=v5?o^GO_uLg{vpJ@KoPeAU19~? zZh430ov^NwtZ=)4;y(bS9|XF@vOff5-ve|NbF^t>P{6%F)8%o?&%(OI)j$!51@8h~ z|HMk~JwKFT72vqlVzpfUC)QAsmBC4%2%lU20@n3+tOB3*eGMz)@2nO}|6p}V#-1Pe z$$E&D5YJ%z8Y*`cfCnc2C04C~u&@jH*Z(4`{{K%h z^1F!5(!b6y`Kzzl>-?)ESI065yT(R3tRPb@Pm|yh%Q@ZZ|2F6ULqrv9hV}nDmj5j4 zUy^0YwD!N_GWh4>uZ1svkq!7i$x3puO}8XBz`hE*yb6u~=&0l0V(nyWiC7-qY7+2S z&U>vEhrF!CP6O}K#ZD#jr|wuMPJI~IWkdZtto89>8~*QDJJ2)uE6B6@<7JIyTUWQd zWTT1YJZQC8&O`iBWsX?8Sl#g^EYn-o{!gs%?-EXn<_9+3hYlwI#r?<{K87`bKZ8}U z&*k}_u>8NY{(r}n@&Cj6iybd3jryt{vBXt2rIf~h!AhaD4JVe4vsx_eAC>-vm3}!J zPON+@#n=-B4&PAC1`sPD{j8}ju@a~SD`H((UiB?El;A4KGBvVxvEnze`V6yzD5Iv< zqa@4JoImn!VY#K{R`TTfCywAhn{YMY0vrDS;Ku)%M@hTaV>~^jaxBFxzS8nlHkerU ztF0DGUt{@N%hy@H9@Zt6^G3@z!HTzBM#~zZx5jX?u83nJ9vZq^Y=Dxih+D0_B&)}^ zW0%)X{%B_IfkR&T2~JI~^#ms_U%m5`0$7&w8LP!|K4*1FR-VsWyI9Tx{E_`dYcI)F zu)k~lk6C{>-;a14gKQ^kfDdc{v78@S`^T^f{F$|X4y#h9VO@X6D$uvqza*=5e~z&m z*{=jpz~5{@u`>G8+W)e4v78Q`N}x1c7OtYemgQf~>VIOLyz8m`m2rI=K`dv2)g@U8 zpJVMMS@9cNyI8u3)g@WOp#^q%wYK5%6Rkr(e5?Q+VEzR{ML zyn#Q8zudBG*@O8PSj`_5=ynOqj+VhS7*xYMVfk(1kNRditc-WcXgLmk7_A!bhn3)C zRzD3ZoddAK9f4J#H((9YcddROR{W1)e;JlT?$4};e#Tn?zJ-;*kMguE=P&#b|IQz6 z>0t%3tOAv>TC9vK!zxfbtP1J($d!IW*k9Zda45mXur9Hj&H1AUEny|BA3#?P+spGm zVR?17{$j<`52@=CE8`Sv?;f<N(UV zHw;#a=h|dTvWj!QwTs!c(^)gWzrv~1OGO%M{r-;SHNpCemDVJy#g4Z>-D%)A{Zyoi zlwpI-w82WUqGwurNmemtTYE{aiG7K+{{u7h|Gj|!OW{oZ|5#Gh@Cs_81?47KdbzEc zSWcHeYN1=L{qI=*9{y_S)v$uD(+Nz54O0IFYx-=l;qSA&!^SJgD&S6Q|0hBP*WSOnGGja0b9UYz}i`RNml&! zHe5&8pZ}e3$fL83P?BZuV(ntJOe)+6o&sy0Uj(ZH1+Xr$;w`cIAK1?S5&_i$SE6-R zyUp6gvKPWic(t{cWVOgT8*YR3|2tMX8*Mt9LU#Ud!r*VWHsbaYtPFQp{ZFiLJ8d|z zGJ3#jvCa!mTV2flGn~Kk_}75{KeWcgvo^k1Ep-4^0rL-953y=+$ZByPbS3s$ZMQY_ z$Fio?IcSA%Z0#jk88*ePq*}omj2&#al1u?=1Ug%fk{s)8o8{D0hXlIH+pBlI)65^L zJ#Fa!4y%~GY&@}?1FZfhR{IRL;b3!@FcgEv{50$F|BmfY{h!ECEi&C!K&+b1gk_&) z?P5*#`PP16zV*1!8ggKbgs5Gt2-m>;3oPT061>Usav8bA8X+sJ{yUbJXTuf38bSH% zaj2ws!5UhdEpLOB(RNr@NmfQXt-T~G{4Q%3E8GKCmtFW;r<;~xn3f?_@Iqfl644qyA;0_rvOC+&?NZ)Rs}w?5kI#2Q?d8e z9Q*j-bL;&D%)h{C{rMMGGT&LdSlN6Js~$gFyIA3Vg;mc#ti2?wSf$i>hRxV5Vek_! zZ3BpvQJmFcWl+ZIlB{rLtz9f#4pspxS-V*F%9g8?CV!Q*ItCTCjty9nm0>;XN+fFaj4{5VO=FzeZC#L3h;pS7i+BSwOXu%AF)~-<4v5$v+8$mcH;a${`1sl@KAy; z*nlNj2_Clge}`4GBR0J^U=`p^8(*xJeA{YR4;zg^0gG&acf8Z{oQ`MT`1_5+Nbp>K~HZ~V``@zX8>K~HZ~Xu3H~xFlRyeOaJtu9uw}01P_jJyTP59#Y$xjBC z&;N16xQ2@l9Bn!&`SN!!op#%nt~G~eee~4IhAW5M5dYeosoy>O+pNTxmmhCFY0k27 zscBx8>(ufx9(9KBxu+H@oiSeXl}>qY*-8vyuSkZsW$1A$hO*vuw_>>VRt#UsP~Pi$ z8;0cDaIL)!Lq+eT44=s`%)`L1A$b^9c^LkXp{h4%6^4PUFl<|ep}O~r3_r^-u@FN| zZ%ZMD&4n1suf`DXrLD#=b~T3mGSud!!a3}c`fe1(EJVz%kIF?!Yh*D zZ5ev3$I!~VZas!;*JJofhD5LH1`Np?Fs$8xp{;jPhRR^5r=4;eao zgYLpG@GcD7?!wU7`$dMIWtg}TLz1^;BZkczF_hngp{tj+3B%Y;81~DM;)U@4+zZ9t?+M=;g(4#!zcBhRZf%=;Ixb;RP8Iw_xb!E#87* z(H0EHWEkMJ*ovX~Rt(FwVi@EV$?&!eJ?_OY#JlcZ4AGZ}_$!*H%wxDCUqZ5aNL;e2nw;tmXBye&KUvv~)G z@;fo4d1*T_jNOT0zYOEO@GcB-yD((!a)u0>=x;6NPq1^n`-eQTa&x2K0yj=<(zn6e zPhH=s^RU^?BY8dZYE^mt%Sd6~qB5@^E&bP}tqZ<7yyl0gcVE8X!K{O^rEV(M>rQWf zjjG6@QU;LnPG!jnsuZu`cD)$2U+!Y{QS zjokgf;#cmzcK*ek_GSNEC(ChY16A#X-e=6p> z7uwC*@Y2oKytwRQZ{qzFZ)5ZP%{{v(?w^0b^~?6f*FW8V#f|HB-WS@~`0Jb(uKx1$ zjTa9+vg*Kh)4JWX`@u*593S(|`Ug(FU#)xTouykg|M=9AmHH%Zw0P+yi&yQ<_DdT- z6?5VI;rmVoXFqm$?`K25Zhz!Z?-o~g?eKBc!zk>%IUnVLDPdg%NgZmQb6UBbsB8uk3O@;M(o+Hpg(Aw#zvPrAOs z?4vKe((>}j-r7g#po{lE^g*Xdn?_b|lN&0kaB%v~TR&=5ufgn=H~v{~#Ql$4-=jyX zW|t4hn)6k^LHA9p^YF71Gun*oU+KHMe}CecOUGrET61G#xp;8x6P2Ob(P{1)*R@vbok}vR$MY<`;^V! zT<}GOKimC0(0%MVZ`h-BP z|5+3BpEm2p^!Gi-%EUHsVoJ5#^Jm%EyJJFEb>b@`O7vyNFVUryNaj9%xu~p+_eIN>M_khVXjRd$LaKy?ZLPi4FSc>^W5}_Tf_1=g#uK zD^xITZf2X=x#r&ZQ*VEr*atfAn&E#_v*7YMrn)NK?A(mpY4G#dcns$^-Q6}^%v@X0 zKBk~w)}x^JTu36SZ=|>hN|Q|)neOuIbE}lUU_M4dU*D=Y;(mKodiIHk5{&LgVPefwZ zm+#B(i}0Hl1%Jix|2!8rgL8*Rxrg}GtU(CAP*QM_ccfQr9dAn6*zUePD>EyD+6R1l zvrrFyc*Jko@8s)gTu{qDdaE5j;wC zU(Y@74v8&@DV`>q`E52+7Sjr!4UgRydX!&0^P?PBVVoV_vXQYVp=ojT#a?eiva0=O;{z+XL{Cq zyOhM;w(IoGV8u)T`Vh9RH?6G^?$+vOuD7tMH0OXep3|5l7TVxPZSW>|EwZ+EuqkF! zaGibAaKeUbhV3EmTqW@^UiwbMN7kza?oHU#x%x`7O4btGW0UyA+FD`T>}^mI`Xa5a zlh!K{_ga;d>vL;sgZnOP`@-7VVjJt7RuYR8mP=oHR*vm~KFp$y{My<&;4Wj6_{Q2g zV%y;LYC;l^5>Fj;+IneG)en`_h4me3CEEp@0J^@jwj|t7c`HaF|52Jw9rT0s>WW(* zdryG%^=oC$FTMpj(yoo*pKUmPSTNv_{yDI|maVM1gWh(6{c3GJu=T;FZu$+Ix`$0K z(AU@|1sqyZnMA-48!#4|Mov#K5}U5t*px{xaGtg4``nu8y}?9lJI99WgRPmjq$zd0 z1(U8O)~g?GeRoxT+|=6oHs9kn)nKVA(t z9=wZ9qo9|yO~C!Jwe`WK!b}98SX)A0j2cdpz;`ym@iw6Dbbj-8HD{Q_*osfI>89gV z&e|s1;8U@U#;sv6#oDIfUS@kW-P)#OQv+*g=$q~;QwC^GI1PFC6?r9?3HlIDy)nz$X5-d3iPZA?%DlqO0dG(dHL|`gFB^xv zfWG9WYmRTr4+OFhYprpv4VaDX5^U;?ENm*^JfI<=-k4{@&Bv{`F}mj4a2MiEu(li< zE(e1{8OZ zwQ0Tm9q3wYZHsZ=Yez)>#nyN+#?~~Un(`8By9Bqs`KIeqY-)u|!MoOWxea$2w)d<} zU(8WcUk;92TYo4CU+ldg=y!`CpNjfIDr#rPg)@HZ{Mx=1OZ@ zid%zA&3l!#U5Q(3v|8 zYqeT(z3nY%9crM;Gk!P@!d=-~380;mWo zfy$r?(AiI4-hTtU3El#4gCcMgyaV0^$H05wICvkN03U!?z!Ts}@Dz9&=ogxFZcGGi zVgmI8ZE>^%9e@sxoj@0m1iE_15`%3!55zeL3Fpx3@#EPUm_wQGGxw1{#6{a1Lk;nt-OD8E6h#fR><@cVU}gRh|MaX%lRg zmV%`_&_Rg=Xf%CxyU=$b)#(=S40+6)tALxMNUCMI| z)WBU6)B?&>QpteYLdq$D#X$Qb5mf^{aaa!Fr(QbNV&E zFTjgHzwmbwJOcKC$H5ceKClC91q;DNK))7QMB4gQ$qbMV^i!AmT}=JhXHU?=@yc`x zw#-k!-3Xim8iOXFDQE_o1N}VeangDpoB$ty55Y&^WAHe55#om&=fG~T2W$tsO4A6p;qbsJ5JP6M;7Z(AfebJM%mO``LA`)(S^9y2U>Fzybl0J~ zj4@y=7!P!ZQ4i=RPxLb=Pt(ZD893Uxw9CB!_64i*W575{E8|#B90Ypb%W5C2nLh&a zNU)2F+z+;a8hCF4_khh{0{){we~<`t`fm!Ffdru2sDA|a1a~<`@!QtUw5udrd7Zi+*bpA ziCp(HBfz;}G#Crgz<4kbOai)X$pYD+7rGPZ40KC!7`*Jg(Ir?h|23SigEzoiKsOyl zKsOrigAc$-@HzMbd=0(Pw*Ge%|k5E4MPRch$@@|^xcaW@NW&; zXpOHxW9e9<-z<6zgz2#|pe!f{Du9Zh5~vLHLwu*fZW{3cupMkcpHJLLpc<$NYJo8L zlQ;o52=qurk5JwQMc`;GouG##`eipgOwz+6JuG?<>;`%|G!zU6Bfv;-E;tXI4{CvU z&<3;x?LbSQqq1&+NZ!BmsExZ0c#Fywfp@@b;B~#lc?0}Fz#qX$@Fu0{P|mQyv^9 zz{}uu@FsW*=zeH5xE-tkx)oXn?g0AXk%eF}xEKrogMfb9r7!3QdV-56z#?!lxCC4Z zE(4bXZiMsw-HJF-R7JCy0zH@^lK?wz*cZCxG$eSPlIQ`vp}~t zOF;za$9OKL)R%zEz~$fyuo|R*?w}>LNdWbMJ`Jg#3(;@CTnlsyqdS(;6i#<3KLFjC z`~*G(`YD$D?flsRo(C_01K=*O3G^fb{hr8QAV4CqK)*ZkDA*4k15bivGS_p`0`MY1 z-zD5ea4lE>E(a+TE*|LqOdocB7~B@(4N zG^a;#1Av~s4F?y16_n-?@F=*?Vh6khYz4!?E=sl$oEu~((XF0t>nj2kGm5XUuK|yd znI2W$4g&ZKV{rEa{lP$>CsaegP%wu=&h-xT-~>4y=L9ejOaha^6p#+4f{p}#hcfHA z&mdP|sZSYby!h9MA;R2M6(c4d_`*9=HVf^?;}Sdv&>rEK&*H3^WI|fSUCta6V;f z0qdcN9&W57%T0vu3%3SwU^n6Q2qBuSirWPwfphe8QmUvP1FJq71nLLX?=PI&N$e#8 zUI(rRpM#U&W1w4i`E3MBR0WClqkdfJW}sX7KY>F*et|y)pMl506X2#&l}x0#2u;s* z=_GGq>tNHce$VrJFw9Gc1Z(oKpRSQ$GpCf7j>^|F8XbUj5GLUO3HcA6^gwDX(37s= zK!;+TVstPb1O|cupg-sZbZgrgbOaqhJCF!kgO)%y#LdAupdP3T>S#-=jiVN*32J~U zpfV@}!XOS*0IFO?P#%;6Wr6I{VorvE>Yy5k2THR6s1F)~1keaH22DW|&`euuD;#Y> z8=w-)-5$s;bOPN#GUx)5Kv$3ox`Q4d0(yeJK(*`xdV_vIEj0wF&}u2QkXmIls6+n# zlgyE@YCZz!(5U+njmS|z5#*N!CIEF4O&7QrOa*E!b)&j$5tsrl0@3bN_bQEaFa^kO zGLV11`dgk_7}aDmz;vL5qY)HFEh9Y*WB@hw0x%C`gDfx;WP({>HkbqE0;QV+=7S4? z;^l%o4X0=(DugmsO`@e!#_}HzN|svokHJUa18@R#^y>8vF0ZVz-vVw1%Ry&vfA3&h zC)N9^cW``2{V~8B)+czr6SrqWpWsW5(`ipuzhJ}(s{sle2CKKbf3Q_pS?VE3Y42qJ z;Jr?L@74iWH8ymc+|fHQAlM*Yajros-qmn6$O0ohXJD{Fd9~$KWICAXB@PT;q@G@jLHy5h9lc?Lf^(dXd-e_r?umgf92y)F%LlObj|isV`^$)6162G- zYBJLsG?JZZnzvwN@M)**p04Lona}_dZ0oH!FW9WQoc93V1V2yi9lb;61?!N~$@79= z@FBGm6M}WTQ|AYhtE-Iq_32}=j9Q?B>`br61;INAee41?l-GU~`L^}aM+KAkv|8b) zV1vr)Qk|t|!g9~_4vY$>#H;5UU{*T~B-Jq>LE5V~nv55E;W5D><>lKDABC9VrH=`A zbY^+C;?qRaKqb;)L=Wq9Fi8ddq=EeEc%iXDw}}Rta;}d#TfjXRR`yTh&Vpy{**`Wo z)2Xfjt9QrB_$l~FFw^TgF4&;GOgYH?KxcLx{?x5{{k#e2=MwIMH9YlNyQ6pAI9AUp z-mY<^Jj;t8AIzs~3daZE2^TktciDtsN57i)5?xueQIpp!|0~Xu)azSP@_S)VLJdr1 zf-DV~rs2L0@ABvh;5_t5Z|_8!zqxmEV(_9GDw^(6*Ar@|Zcw-ywc4|AQm|r7f-|Xe zo1``!I0j&4RVa8Wcm2a}MTWi>7c)0KFC#b4yL(D7KR>xmJLWG5#1mvjQRMzniOC(X^77Y2M>Q^*adeq zDQMm5s*I_XoXPmGEEnk66-#hI?!Hm?ZjY&WI>u={sZ*N{ei5jLig4oEck*@(f06%c z7oYa+@oE$64WAaQRkt@GST+mdOO0tP6pmJcI-+>Y|u z5$n~T9;_9!FV;(*9vm8TIM%y*day$mO%BDlX~X@a{;U7?-L@XYuNjhTw^lIcx`5(=a=yY&I%5#n^D%^-wWE_llsIb zS53Xlua@7MKbG}&5+df#a^9bcv9`QdE0YvzRq%#pqG|0JnZcHgw~%pd@{UwAHBNsj z;n@MJ;(s8ePHj4>w8T8D7>0+&WLNU)&JGUk(u?uTnWCV~$uadJ>u>y(7=%}hU-6+} z1;g7ub!YsGPgnEP@=Fz};;oxa>m6b!D(=(^8~5m0wqi0N)Ow7lx>da|31LS;t-33! znvqm=ZPPzf$6p&Jq*{@Xo2q&j%ptA+WOP!F<~6)K=L8>&XEm;jd)^C!bbz^%b%wnn_M-nlV1bh=gV4Ng{%^3eH!mg$TID@ zFe}(H?gWj=nWMm)l+HL>kCU@m!82*?ekyb0L(Baf{4ublj@LSycxHem{(r4~cU)FS z6E5fV92HcGBJHKxBQ~lrR$@s+5%>}lOB9JMQL*<5)>uI!j*5z1u^}pA4Px(#HHr;O zR1n1yyKGTo!xWLeGQD`Q$y!|lR*g4VC2k{efxeb z=k=S(*PKC(8)^(!CXSpt*{8Ru<}qs6KlOHfntJ}v3Uy31pZX`a|Kgx1>}Qyy4T4bz zO1y^CEMG(@{EK2njcPq}SnfGnV7pL3^z zMM{lOYa2?q(CIwbSbsPGo(VU@&5ofDANIve)WKY182U`q`d^1beLJbPUzr^ED@-1g zHS+F;VKaZc+3$tW8R20Ir!3mjuHLEzJA%HJnuGE4j^H-E>8(0CKZAp|Mjxrw;x5;1 z?GPyR$(!96Tx6|2&`Z^gx}a17X^E|7TU2=IG)n5DIvR?()A2s418#-i>4Qijh#dQ> zL4LP&l2g0PPTF<($aRClmIzO0W?4=e!K7keEDBn-X_e^At419J&=l8Kb^PBYw#Qnt zqm5luO*6@zocpO|rTYJGD)6rw02vi7b++zLms%RxPc1&?^9J+(m$M}3Is1E;i{skQ zy?z+RjCiD04Z7bC!DK20oLBAK;NXq`#tIeuYG3j$_2>D3`2&WUjt=xkf7QFpJs^0A zx&2^=(;oMC=?3Kr6&Zj?_z5)}pgQ`!MLjEh)%hD@mJjbWLRS~8k6J}(yT_{-Gjjr` zud!7+)~?|L@@6hHeE*7;qy9Bzf9GUsti<}pjUZERYw#Z2C9z6C6&c~G%~Ji zN|w`vT|Lo3Evy>oU>nUG2qjCS)Zfwc+CbIUcm`k&3bH~wj|iDsWwZbbeVRwr2Z7ph z>#bHSyq=Lc-KqW*tcAh z%K-REZoN>$%)ER(;+MT`X0I?PPIzLECjqo%D7fu}pR6@q+V0!C$ZD}>P+H(gSv=`Y z!9zfMDt?y2PcMtd*;Sj_ss?2Up0LCVU694pT2j(QOlJV)y;tp2jNFpaK}$YxG|sLe zSMmp4+O@t~Z%-3_Jix`18<_GdgtEU3=L#LEm`r^w@?XzL3xA6#k71P~mYgf8M^t`dEg0LL15q8xS zFdSNft@BUARR^ORoF*2r$P3;(^QJ%fQ85AQQZ#^mZ2{n=dUHj!L#=xg%9sE{^_nkp zM+941Pf9n{5M4!6<8}bbqv^|z^G5qFIGSeyTp^ng;QcjuqA)rk0EN*<&WdtwJ9_Zn zRZO@B6b69bPXKU;(Xd!(xBkB!>0$y5LJfx)F2jSBJ0s6WnrddzdZxV&03M&!&2+D7 zZ;!n-0S;3p^WaBsMyOHBLmD*_aL)Cx@*OS~Le1_)>{S&^n}~gEDG30jDjj271K`R6 zx5!v)$JzUx+nI3RQ62z(-2kuypp<=+`-?UVK4b!n)VtVg_VAlZ_YI9qH8B)43SBIv zGy_&a(d$-<;zvhlW)aPn5=W_;a-Gu8sCxBtI)!SZMI+f+uTD$zF3j8>U?S;G$_KD7 zxr_$58NlqJe^b}}5@z$&P!qT7}B!0z4ANNlX4Vq@T%M^T?KXfv_7v>(ID+@sxo+2(0b*pt8r%wotx z(d<+&FS9t>&Co4?vfuQX)p>Z@!o}Dotilua6?^D00LnQk5sC033s2eOTpVkcWPY}q zsw!T*1@-bbgTrqWsXF*M2Fi8g(wi3tEpl#6Fd@89!-|zSX3V|P=8xu@Y659Gh#NZt zz&nj^Cz=ITTh-=w6JQjjMXEkV0)Rc>A1gK=_;&r4Z?Pu9fZ3I=BC99>wgX@ezzB!B zuYaBNeK%_Wz7&4<9d(F;B^GT#H=?kIi-}U5@_#tTwvesvt)60a;X+aPnF)Bp9Z9&i zaZ<1pPqQ_73C>AhTL};2#TGt-s*lCGGciO)(yb_bETr`XjlfgIn@;4Y9@NNOb5a`7 zt+DETC5n_+s${A^%A1U0 z8+lAav5zu;LvfM|12GcL;Q$&(^r4*t@ni)DcD#iyp^m#-)P@idfxNS zd#-%9W&d)~3Z_(eD~g$cxXzQ-a?{UuD7)|*gE6w>c#v3siEVQ0Dmrc0%IBL(Ua46$ z`dLQd(HQ1B8iB%CJxtn0P33p$cr2V10Pd!SkFQxQB}S`p$}DOT16&;PnQR8Fe>@)A z^}*W3XW5~3k95f_|6N*76!$bFZB zy=*M|pF%qynK9`_3(=quue%*-U+(H4r8D8nl+DFm(q>`GMa1oB%zuTh&)id1qkn5j z)=KEFQms}~#4PY}sR;cxOYNp0`oT{>^9Z?YKN-2cQEI4RBG~YjX{Ji3u|scfzU%0C z>DrWQq6QlcWR0mlqH^PmUXpNH>AHW1wVZVf0O&CTc2U3I;c!prwChe;dd1u0Rhpn6 zl0q`BcOKtc&dc-ObH>_QtSm1mUoinc>wf?@8X>v-UQ5e+#;%=7Kn>f5zh)?z4PNy8&?EWm2!JVXW@LHEpW{T}|3nd5a8;`gKQ1&EU-(@f+WT+!QXKy5(mMq1hT0NJ7a~CN7%GkK_0)j!qtDJ8WJ1(NjXl~X?Cg}aY;3o|rkYlC0>q8o0N?=WQJbr= zmVwFkCO{-9i@?MJiiihp8*m(`2dhSxh!T6l5lCU&ywskjV8%TqH^$ivliQ8PTi;ww z-xWW=gsVjh85ct79~JW9zqFEM71_zZa3R@Lbf(YHl6ZC{&<}QfpJsfc=@Gc~b1oxo zCcVv?)6Jj7-@$b1emWyks%bIXFxwILzfMFAZvZjTb9+bZO`d zm~_nxDDxKB`$&Roh?XIu`sj&}&A$m`J4VHBBD=?kiRNGV$D4SPlAtjwu-W<`VsA5D z=u0S$y_?v-+tcyosH~c;hD?>-rCIt#2jAp3oOobw5B&_Mvoa0#4Pq0XX*WxlexlVeZnI!V;t@?4XA1bq`V7Rces&5^(G< zCQo>~pMDMb0{wCt(d3<(xjJ@22nsv_3*foWaw7Ind12reFHQDs=sG z4~mG{|4HApybqf9PET9CA7-Yth$zvN?hbCmhzZ z7-@uAD;E2&%V=OP_8Y>om6_Cg9W2+0POL!_UrOhe1qi4hu$#gXKRh?KnI%njv*Gr{ z@W5}Y@*YGaYRqJNTCf%os7~Z_BzuzEI#Z9be?vYyf_0YNl68pK4$`B8fL@_T+#;8< z4NVF~I*Me^8;U%FT&Gc+p^^rC2eB3RKU_c}!-0hdjA8&MQ|s5h1n z(FG;P`e8$Lh!Vbz0Idn-1io`&k(&%FUC>m zCe#&>qCO)nVO~P0KhSlStr)6L{zJX}K~lDX=wGxOVsL&PFXQ88YsdDQH1yyB6YoV9 zQ;n^dWM8Ve8?-_wd@G8ALewowe<&xykl#>$D*AI&638mq)czPXP6iV?FBfU|9@OR1 zBTOU~HZh;YmdPk%MBfY7imd7;19PEAE)?_!v{3KoUnXAX8TWlsL04C?Hk4R!AbX&+ zpYN>TfD8QkmsYxx$)U)3aMVX@oV!BCHmw2!sz$atHs7SE$rQZpgB*;LBLAi51p^al>k6Xtz{xLr&eGxgZ*qoR z-#ksAt2;6H&#yEK$YvLK(&_z8VITdHwqguhBdM?Y!q_3{d|Mk6^$5z`1?fmDQly~s zO-1?&`gu2eicVc$ZGNF7wxt+4hQhdUt+;s@xy{yjy}i@wrlxs0Pk8|NJpsT28t`3Y zkkXEpqsjGi@N^l8lXQk5o0cOS7t@i(;%`MiP9$OJw4MTYq7Ux8h2Al13(F<48{!t zj`t6ik)t~%UhlZegcI}3aR?lxPd@bm4~d>&8J>71biVU^(6VJ{sxQ_B`P5tK_N$9g zj{*wH_6V&%0+qYERm%3xySqO=t+1E(`8rQ}W8DYnjb%aKGKay``6%`yGHT^Rx#LHn z1U7WlPUB-}oJM;ZN^YlW$5i+HO$#U2_1y;lvnE9y!}K+!I26YAJEWDk%na<^dGYT< zOwLp60Q4hoeK)|(KYlEz+LG6CH3FYlia(CkarI6a!#>EH*=X-vf=_WTO~wx-+|V=w?%7lh+|7BC)7HKkshCb3@TE? zlUUnTH)?lMZHdj!s*~6TjM^tj9NZWalQHpOalwGl+o@!A3SHrIji+FBiPYf~-qRj< z0Gl>KtJC`5^#6Uz$Z%@ zKHq5q6nac1n#xl!ck%D<8p`;$*4OjHQi@s`OzpRlS31Vqj9Q>@PC!4%DMS`HQxg=- z8d79Bay3;!$(AkU^=q&H9QE&NqEzU?qG&5m6eTCm_4ZXuSMgD%-dbX6@6Kn1eEerb zVT=VQ+|S|Xk!~ZGx5mj=zDOESFyq95sI4Sg=xL|uTAo}=RH4U|0wvBg`GuT!XVk~R zn@-6@ zSq^+L=;JMah4ZSjp7&OCo$GTRsRG>%OrYrVXfJlh_Oyq=dX3n5+fk_t@a;&gTmb40 zHN60XdU#gGMqc&iy*HegZ3aEn*C$Jg`V+Vrv>tHd3*bs%klN)pO(Qm**r@9>SnN%i z02p4|(Ax{}G@_aA6~x5^oE`tEYJP=Wjlg*Wrzl6BlhgfuVtjfv>l^n>2KiC@0(8YK z3?F0hi_*WFjs0Ww;b#30ns_QrdAO$G=L!J3_O(-&OdMP4MHc|{sJ9wwSjGCSylOVM zvg0qNnno0aVH;ZjUV%(Dx*TmprI zmt^M?rtNg?lX`cmiM!Sm3V_m)dNQu>WvO7>JO_>~ndly7aG-#_`=i#Q z=`sJ>OC`{^@t@Yg$4@vm@~-h^K68VqT?WotL?XvWCgAO<U6cCu zs$)c{zD3NJ>T<1vH%3sy*Ck??F0&8cRb;ZY@(Z5W-*U3(4eiWht5WOn~*`Wy#q z1?TivR1c`~^(*jPh2CTl2RB&$Y_B4K`HRN5@d>|=nK*RdjQ)tLxXkw)J+M(9$$EbM z$+RWszzu6ZX4!CE=IFw@JCC|MWDzG(b-NI!3J(5WrGa3J*g0d^rPmKPAsHhUGPF%B zA{|15j)q<59u>zG!TkNkE^2WNa|pJ&UBi8}yc;s|ZayDCiDo zAEKx`ASBegJDqmN&58x&@)sTnp2})`2j7Z9`AH4x$wfn&@Rxc@`HEWKP-x6NSTr*e7dZ4AK_1lh z9>d)Dk<|D;u6v|X^(?R;8r7gdS*n|HKS*Zz%6r7c=5c@c|l>PvbfQWCa)4~Vnwhq9& za2@XLVVQn*YqFRM5k3pBj})#Wx#nPNb0=3ys88;YCU#T4FCxI=Wq@b&T@I$d_+u*R zta;Op9JRE5KL_`mp$9&A5ox-!R*ixm!X3G#^m_=cP#GGuhGU00GebLyLKA^2cBEtkk~Xj&40W5w@R3T$=s zxZqEO;?Y#|F-98)Kq&xL%vtn6bMF)YfW8k}O`RV@+3;!_A6)5*O79=zB2&KB=6?tF zmscYr)rLZ@d@O+OH&W0OQ2*nF^d9c}bBp}x)ihMaRc;|2vx^i3fby8)7+2z@JY;EF z&8*VmOP4yCaFys30Db`g@Y0oh=U$sz@7KOJ0Xm?Da|gE?&zOARWKgWBW;nS#1?{;2 zxB)O?>B7LFKVHK9xqKc{C=>wY0`+9vbKp3AQ}g?)b<#7w{s^bvTo)&r_7qi8bEGp* zu@ThIuEiQ+Pp;2Yf8)9LazSmUY}wU(->kY2CtqNIZ_cJZ&!Dqa%@i?^mnSW%&TF;x zf&d7I(~NdM0~>7sVD&o@*4E!Qa)G6o5TSm(=rI7wI4bcs4-2?5z)h{#JMR09U9y4G z@42p}h5+~-1i%h}_D-#)Ze4e~z97V26JJtNgymU{i@oAie7v*Z!Izz$I1YDoehdH` z)`Rh9UzMZ$w;2z7d)wlb7bXyXg@o?KHMDCwmd zENvx7v7_Ku7E9(-Zw4NOHI#s!Kjs`uyZyiZCb!ig}C0M1~iX_Ez;n>lbff zr4|ON_6|`@EQP%Tu^#k07azZ|Ahrxm@d{_<_gK(Hc+74CsxGfMC~GO{Jw~vDj-fF2 zt}gv~>$49k4DVyz79(ZDgy$3&n;mru?!xhWp-Hg}Pqn>aYg6_WzZ;_J-$S z+bjMZls_8diK6(xFy<&Fq0+tS>3i9-VOb`I3|i?}SIt3*j;*cvDAQtl!ie=(PhuBg z6^T@3c0 zyp;U9z20iyq7i?IeWj@JrQJ-s&<(W!hz+$P{-!_)1JWqsYAo+@U^&gGAs+c96t;U7 zfI{!}ikhl49ZijeZk`1|Y@QvJ=aj*{y2}f-qNWd76+y4Dh3%9DpwL^wqDJ35i+>lo zc@{Nd^XzD_XhiFZV4n1wzoKdeUFW{{<2yn;#nF|PjGVkEbO#ndRM&x_o8EjJU^IuCP*8h%r$Q%k$V&quVFPw4;hI)VG4^;OwYrP#x)NJkHhC}XSEz6m8dp?{ zlICtl#$s9yj-bqoYxm`f=0latHD8#ojRoGf>1VFFVAmUM4*K)S(*iS;U@t$sUG68R zUU7>ny9vsI(PX*`oG}#u4hGtJJ#`N2SCr2w`H&ZDpdgx0$e=k;GYiezuP@d$zWI2e zRkKyu(V1{u!lr=l;2^tNx4UR^Tc^GGl*Gu{x9cn+JC$jnb@xjJoCUS>%wIpR9{z*@$6X;@A&n#&RRSXHPf1+JA=3L2usUgJ#?NzioPtWCja+8( zr86Ic=Q!+Gj@BliQmVf`7-X ziyUse-&IO@*oi|A>_&t}ih;@~gFGzJ>N3?uQP_KHtWyw(d}*wkpRb3cG;{UhgeEcb z`2He?Taf){uAxC6g<$M7gyiy7B2K6_w1N>d05O(-`3qChmMkBM>?pjENE2)vEMw1o z7n?kYx;p~5j8P+eY)hJsrb;JTWu=`mdY6;z#5`ZIc!x_798N(M{COc1_pvzhxz-xu zAiB=Q&s4?+B2A`n8!b+ML$j>)(6shLWJe(GCVal)Or7QO0Zdq8kTW zB|9!~|Et;$ti-w>&!Q8hA>!8n*aHx~YK-rA?-4Q&BSe=-N*QoGpNwU|LMjFGuMPBT z8O_st4L%TOjaG8yFz&!lwuDk0o>v*zCH-f?hA@@=l+MjuD4UCq*QitEW~(`VQ|RkV zVqyyAOpNW*w`MNT7+cLldIm>K(@u~!o~$aFj2xVO?#Dp?xAHnRWP|&IoK=B5&C66imF;V$Ljm-9<6{OtntvotBs;?3|2Ep+}MUTiIV9kqK1 z$XuKtqDKFb+pQJDq9?uU^}VeLXicF2Ahhbq#cZ13q;*GrB8OXjK1Df$JdA+L_qp;D zn=hyj9{$UlW1s4b*i>M2ckrh-K<^n{G-~;qqn2_*R8wPp6PuzS{81?EhkmB|F4}kh z*nt?W{G}}3?%Y0Us^g$`rrgiRx1=1E2UNyY^D%zkwd1jTo_DJezp29j}*Il$8<$7oies=Yw zt%V$_H+$ui`J7tS5ta0s>wm9yGq-f$!yCOuvP3_W!!kU8rj|qR@{#fzrIyo@ox8%P zaIo=1=&@Ge)>{q~rCu2NN+;!@hxoUJW~1YY$#oFF5~x&jBb6Np9bAx0lua*Aq>E;`kyO?Z)U;9PUC_7rl5%by>xW<0GfMHXXe9Q#V=q**J;2P@UVTG%jI!6N?t4?e@@FKWlE{9>h}Pd^Iq)Z9E8;|*k1{fyQlmjAfc-LVyZb7xWZtu6Cx zeXq5nD27emBXi}4r)+w=FC=v3JpASu;MTygzgl-`p0SM508VB zsiN!nO(R2J{xiq;&-w-wie{nbzL0C$(u>K~NoSo$XX7`sI5T7WeCGv|ZJ*;eD@xAV z;-&jV+<9Y;m7mw9yZ{p9~Lho-!)ra2pmaY}1o_u-_}(#lY+npy)lWV!q>5Rx6#-!wafl)jNFPp#I^#s(0=a(Koz**OU}*?V%kl zsHu4r;f8x^!jbvaL_eJZHI*D{Y2Q-6TG|gE^I%VRYH1az{5;J_?jaJY(fe9jN!r?6 za}adWn``Zmvk36fJU(D-@*n&jh~}Q5nqSJRK&`!&|2UtPO4CC$`vOlfXpOFgXeINX UmJHS0CUpmmn^H7DfB*pkp(UZIn1H>2WzZogRYb9X z*Z{GMSW&SDMZt<)tYH1UpIK|ie7&CU@0@$jxqsXj^Ww>~p3mxi&FtBm6W=9Xbu97P zHcdBH+IjEc@yDOLxo5B0-4jETC-7Vd51Q?ZZ(8kL3iY1ZTph!#VlM({txe4)r6HGB_K1McJp% znVXj#3iY>oTF#uQ$qVL%mf|V@Jj?TvbLURUDxeg(IkR&LLU|-E{}ke>0`ZlVZegfs zT5eWBLH5+ptn4KVRio{AC}0Z$s^r=E3kq^_^F!JB^A}|2EeYL0X;q-?{CRoV6r>j6 zPC=heVAU{d%G^9Pjf-6s8bWTe{}>L1YQj^qCoh`-W2df|p@^X?3XHtrJ3+61DGIwhB+Z2Snie7+~z)oA@Vz?3dYHL5Uj`2Sa zt?*F_ql{*v)wDh9niiRvpS&b%c5WyuZ~DBfy!`Alv8zR9G0?;l5~;s3I)On=qz=!b zsV9(-0t|vx(jO>xE%;eGNLyo9fnrU+FFq7H4gClHjp1!*@+!I;t#q!l1^oLUe4qjC zuZ$leHPt||r6=cQP06NZ7NKQ-1Xfd5ZDRaqXXj1N?(o+jyo30v`LwM3g85{Ym%SiA zXWEibe3EI2y|4;Wt*PnKH8ysljHn3KXkBK|VvB zYu?=af+_j=q2Z^SuGm5KRnR$EbLQqu4TZi&E8a)e9`ddWH+J@VJHmAeZ)su1Nx_Wl zIV$8;R^JG#H|}d53NiG8-cVkdXM{qv(L-TXvT7?6zZY8LZ3kL;&CZ#VGcPMYzYBKh zg4QPdbXe(5N)GIWMICWezz}L<869*JnxR#6DXfHTg#R#nn|7vGV&P*G;0`LF0(h{} z+txl5st?})YseMNr0e8SghAu#plzj59Zi95gEg=V@;Y@^3#>t_26=OHbJhM2VO1}! zgB!pX!jq?dDXyo5s@cfzN_SHKL7qM0y5t!S|2WLV*< z!^-HpPR9RDSb7hvnoY~kUYI?nAU`&<_K@2t*qeJh%GD{{*27fiCRopXGUk=lZU5n;e!@00B=nE@gJGd6y z!1|Z7{@~J#)pA8xYsB{h4ZjPkGW%ea@m^S!+yX286^6SOEg5bM1?-fQDZp|(G+GzK z72w$;jGl{j(UTYCPoBFZ6zbtEOK9uldpi zni4mLgSN<-ot->&a%g_O%0sOtnN%-?RfGAkO3oHGchMaDvy5&Dt4*80D$NYSi6>gV zorc!{YBHRTGOKGbLRzBckxi~T}d%jkabvzyb~1myJ=?99f8%n zd)bw>;lGAf;U=&ds|iZr+HiLMl&svWso5{0Rp?!?^4Lds>4#v2Uo+F>xy|a>#(xW1 zm71APO4|BYTf+*=MY*Ps4DG4O^JYzt={B=Xf{(#kcCz#G=H?}5FV+c632wu#3e<&F z(1ml&>hK3#3tceJjGJs&75ol+rBEN%D;zT9W#`Y$U6>vEe!f{=K7-Y2@4#w_e7j5i zN&!`X*qJM@qBpiuBj;joNu}n6y%^(K!g5H{@_+F36j^U^=s)kGG>r+rnnonQY#<*0kGGu#%~S zU9kpT9~*7cvlo;7_xP*WpTKH_OwaV!d5dxibP#U0%2fU!tZ+}lL9t*Bh;ndE_y^+A zNQFi3-Dp;Y*I^Cc-LQ7Ya;r^i9`g;Cz)Gl2u}NSP;p(7ogjN3!OoBx(!OCD4TpOM; zW$psq8||hU)GPTn89oG8)w$vT4keJ6U68$)fOp<(x_vz?d+)WTWwyYo(baI!p6g5t z+(p7_i4CyA4_I#s+G~S3CNzUJWp-h20^hXJ6yQg6dq#QDmpHV{4Z6i7d}5O+c{{7C z!b$jlfL%3y4pu>GY%vKRyVdx=0V|_NVTHTR@|CdW?jyug0XN)k@_U-CtPC8uF}!()84Iz+_|mIP0WW}6;P37=O`qd!tX`*Z%zdV~ zJz>qm1NWP3pMe#6;sd5*rV(4!8wsBR_ky+Ly!@b@zp#qe*7`SEXwrEOmi+ZWgH+%&xEkCVt{O_?P6dY=+Loy3Csr;E&Cg-={Ck#zo7UucvkML$Nb$ z?5rC*+s2Nru_J2i=z3WX)00`2Ygo2t<}G0BX7g5 zk+8sWGt2gHU3A#nTC;JN%`ckAoQ0vct^a&j>rI^_CY57{&4P9ob~TQ6^gOn^R^EZyb=;3XFnRXyj@52n{nwAo z&xv9w;_$&NVu+ls23lsh>be&M>?4pG^a~9`N)x0lF0y#Wy zo64iSR$rSQYz(VOPOErdH^&KT9lPtzpRyo0(tVFz!>%)27hb}%w|r8) zE8YoGS?f9V>SV-LgSqpv=itc`N3&bRc8U5CC+N8|NJVX04^~em!0PGPlgG!(Il-J; zFlTDc6o$+)Z+^YDJ^u`uGE7}CFPGlR(-fFYpKo$ane%hA@@J51FAK-)b;gvuDajo>ghG=U z*lNB!Vl%Rea_3GB+V#=;CiPgV8yXn@9mH3-*i(h8v1=ye97jWrm3mm6>tTX?4r{GN2sXuah$iiVRLupX{J3UdY?6HKJd%aO(O5YW!rFL zGgGKnu&XfBvldKeEebu++zh_h!^;QJD$HG8Mx(}svGZ3uiljDb2CIsbIdA05nV$dn z877wxse&fsOK>eXe>R^`aNX9*ROPJJCe>Z|*T#P>tf4(P*_5g~tn{zMuDxl2NoQu! z1RR>}vF+x`HYS4Rjxrd8zuGDl)(ouE&Iu*Kcf%^k8dwQ7z+cPKurJN(`Ez?y@Xukb zk|kbN<2r?%JDLIa_fH%y#jadfkAsEb?>l~Mhi^~nszz)vZGu*_IGs%{4qA(69!qt8 zK`8Voc7=ZrX2f_uH?H1tH`|Un-~zTCtyHTlH=(wQ+qH`mIs-oJwQo|Vee15KJz8Q_ zPW959;9&#qVCvNEX6mVD(6e*$3(oVFG-+Izja97^dtUMX_Zd-wO=W-7bmMMV?Qt`# zMgKZ$FW1wQW+7VLdly=R@Mg;tf^u<3*oy$_j@U;qfAlil6#EE9pBE(aIm`sYsS%D- zEhV(NkEv$mzNP@bpw+!cVRio*{cJP93SYtUFNBx=JmA4R6}1V)4KO9W1g=DY1F)8y z^I;A2+<~S>1vAVo{YU+sV7r@7d<|sQk{Pd3+IhDL4y<2(L_D-lgEG`rpL;M7q<1g#9_)uuT->q>! z$9whqrpN7xcw_sfyI({?p>Bi;kyc7v^K#xn{H`tM)$5lY_jWmNY`=6jp?oYzR^ODk zKIOfG_!X7+>h({Ld#JoOwtu?&EkXK`isLCr=LGK{euW8My#eWQ?j2Abe{ z2M46P>lmMTCc=Oew;FBJ85Q=jcBMKMyfp*UBUfWf_cHsZ#XVoat2Zd!{X+%Pl_~D!DEWm0wa+R-;uoePQez>#)k7+In+JDtmts|nkhgJgin|9Dv{VqI zGE-P>LU9J9#0{+Mtrl)CAO-s0v=zSE&h%iD8Ja8r{7B)inrsq@|PURQ2i&Pj@RZzItFx2!f18 zDM;8$8kXW-gBlSi>KFHZHLu=?bhkQlv^7S`Ff_&Oj#4qpt3>W*6kAzQoS)RpNexSR zYgeX45*XzDP3k7paIsR)MO}Pzk%w2qO|=}B2AbeeY``x)7+`J6v{OE%_!3a zD&nUorAKM#td7iXH3h??e@fikn%F$dd#|J^^fk+D$kP%*HzchC-u1-O+S^ZMn zyHLs`&f7R7CGMkI-oa7n?isa1+&nA2B!Xn4dZOscAt~+_)abxZo%d^P@8Ib4xL$R< zdSlY#E~w*;g&s%sO^^J@PSC?Uw4+->UDF+=y7!>enN*9B@d?W0uZlF{jHzCU5Bgz| zRi*)UqEuxn`B`e1!)aGKrdK|vK`1l<9yJ;vCB_`z^pW^KBN+v}se~fJmwtuN~<+M}Hg!xzN zRapPm20DOMRSX))t$12&5+}tusb1pbs8iR=m>i9aKb_w84l!QW;ZnVwpx#GOrcIJY zq__>5l_oYO#TnxjPl>vowJ~Z2q&WM%#HmsDcWfGE!4P)Fd&N_u&f8uIJ}q0sMx%!M zM3kB2Nf{}TZK!nb(9pEF<1MsCxoujSwq#x~2Xj%qNR*5Qra0TY;%QMg;S3&OVyoaK zjZbm&Q5rbZmBIZCY5>X%?s~0a^OcLkGcS@OPq!jmdl={=GOMjp= zR!Ea^)U9o44ouXAC_DU6_gcjkfchGxG$Sgh+pV1$n!%Rm7NL};>t&5eaUZp+oOgug z{tcx%1TE-xrr|VALtfJ46z4fFadyOtDlC2Q{79P6Llwa zEL*DGs39gj+B?EHAp^DkBdG}p(^>SabE%gxHyU}1WoVq2IX5lRffXbpa9xFKbl^IS z%lM|z3nK&DN?e(N>kC{tfooKkP$(;KJ%G#j)}U6?1KSc@*@5dlToVIVclvmuw{~7P zC(S!JFB(Rg%+IEQO^_Y9jIBcVQ0N>*bF#d|f~Z@JHf^mwDnSjSjzLeywM*B*z@15Z zn>nI^xz)>95RE)eoIYOWg0x7OwVX|9Q8%Zjw`NIH(s;ayYd{dB5iK<&aLvTkFL2$1 z%Y^#@mkHOccP!lHxQy);T*FK%tWP!-Ts9S4CfspcCcSQbW44QNnHaC&GBIkigbWJO zn}o~6y&abc_d}_zTYsCLTZBs+4D)PeY63!&h#@w*tYB$q=4D(Ebw@KLDT+PlY(Y^y zjX_58ag-vHQbCH--OE@Sb?;}0YL34ZiRSHUdW7f87QFe5%OmUv~iZ6^t zA`H)Sz09R)k<3!p1GvTnwu(bzt}I-m0^0+nE|-ozJFtzz#b!<_cjBTYmZru1Jj|=N zEZs@>GL}W%ONN_5hICkQ9`{O?MdQ93?$ukK?zSHhTMZZ-k<}`K zhL4s#cL*+1AFWYWd&L(;okzWri=yt=_^`-O)1@ixpjUz| zG}6pLv%a*miqT5zPC}`5gF?EiQEg0YP8s`98p1(Z?k^~lGVvmYF!BPWO=20UPoT6{KJ8^(5p^q^YsO8mNjXEjk}IOl3NP`>Xyj3RI0aGKKX54r zN=qu;GE9kr7?A>0dT>&F6qg-CtYLrHQ0C0gd8~=U@nB*~WDcrb5N91Or5uzt@-B+A z(SS6!_Bhibv?3)P;w7$#Iv08wE25Em@M#^KQQyVYF6iw_<74aPk!6$*r52-y8T$oZ z@ye*X4VxVgwAk0EPC*E*L`^eeew-HE$tYVQX4(d?mY!o>x9#f2#4 z66YnYNQpd%>Y#PrIqD@|7j-*LG^sEfhov}qUNLvB+r1KeKEX%hubjr8+jvqeZ~8~$ z^!jMz0JdJ<+G%O7p6jTbv>Gis1Jx@iHKWwM17*ueKOaSP4gA#WO((~cav$$ytctpO zuxZQ$qbhRd6wPL}^a@I0L#YV}+cXTyr%)O$95lGGOPyWn$1PbNN<}b!@1p1{bvi>eeNO3M9>fGjsncmp zhRb7K#=58*Ki4z@195hWdp(NrL*7B(<07&c)y>OXmFC>9_5u@T+lC2+MlPbVAMuEE8L1=rW5uA%4av?JRcxW>ulMlQfb z-VB5BDUnI2bG?R}(;~ZYv7O!4Exc5Fm`oFJjR;)ZN?m{88Wz}wTo`k$!8IhXeNyV` zP#Cjah^wD`-PdrbwHR}Bc=aNq%+4?zr3MPlypa{C9$v#6)8gJK(*3I2cv);ba4Qzc zL{0S?u1<53y^=ekk){_}9eEJf1o=d2UK|`x)}^^)ajCT(2|;bP$6n|hgz z;Vkxww?*B1(EZ3G7zvS|P(y-cz1QW`NvSwRUh(#*`wZHQ5sv+l6DU)YbFR>lLwVed zi>_In=KhImY>=iF%#15z%MsH)at-P%Jx7Qf#x>k)I4mtv@oG*Rx*2!+d5QN%-KA*d z#WqhXJd5guVg!;}^A%=Z2IDbu1*(geS<)>52iv2fD9}n1#XMljK@Gsq%!3`M@ujNr zHRkTWq6VBh0;L8w6X9Z14-{E(kFwYL1w-FGZWW^izt-2r;;F!sQ0;T0Dr2iKq=9hIQhs#tlH$3oPQAhy)^D0L3`vkDKr!L%F89QC*rH3~no)15$# zK$Y`14q|BD7zzzVRSp)3W2j*$)2311ESHLnN{=eQJsR+gK=7 zC023o$TIgON&`O_NN$IlO@2&+w^I`kO2iGCXb(!m#{`UDTRJFczF{aW8s@h7G1OR; zDOlnVDBCv#^-#r`{5Kn1^5Fanz_Ft(u#$2d;UzW(KZrk zw!1Ypkrk`WmRJc^;xb{6m)g#~&BlssD|Ll$XR<0KXPQ_1bd+1klBc8YA*|{@Q?lf( zX6zWX4mHrU42#9@D9Sl7&CR>Rj5lV$tkf`~Pw?0ZttpM}bcg>ny}W|XSF+d`qmrRot>A5@TflnNKswX@LtmpW)jUtsp>qu!S6v-H^=SLtwI z0?)9@90Yfv`UUCfp?SmIrE`ddb)uJeAnNeJC4b-XiVsBHsSlYYgqFA{#ktQ*e3e7) z9&pyu>>A*yTOrP;X))h?s-MWx}#p^~buNA*P2 z3RZ~2D7zC;hW?M4E;fUH1xjg}v;RTVU!|@2xG639U6tx(ycKnC$I>|{0fWqW&nv-} z^n~epntW?&0%9Bi5KE~p$^_Sv`87&e1r6hL@DfX+Zo!kLXr>bPqtb&AM_x)zKtvIo z&96&|w0}wmicIG63S3%HP5ZuqDoxaFzSm^PK2BK>@?v?rCJ?=X)Hd?m;aj}ePY0#B zt)DhEHv7gUs8m96@E(|&UcSE~HN`!1UumV;_~)ZK1ktpK+=5a_Gf%!j zsYxjk9n)i zK~2KIEA#zs;ZjrTOEJ$2VlMY_Txt>Sq9&&%AT+HQOgu=O z_9`9B2ab4wL*|`X%`N1<{_Nk{(or0ysc`Y`rHFwXnikZTPIyoqHIiH%bq~2te z>GB^?>hj9DoW#<1)FCG)!#5B50*Y>xL5Ld)V&g0>1>Sb zMRm}D*Zs-b&0^c`O*0gO)03Nv(h3vYhDL6d3UCm=CiNVPeZ=K z!BD7sX}lXyS%K1eQqwE>ChCmy62FbQ>)tWvT-u7K@o#v=-$otRE5T>VyP;5D;!v!K zDbDR)#<6JJZ|{0*j-|U@51EWv8lFyZmUxNZMV&{y4E`o~#r)mum3$X zIWf!O4JZu-6oq{QrA}r5@({25;aKV{-g+GSL)5(#+ZaNaoi6o==`hrg)C9!LASu=D zn3wTm)IIY9lSIf*if8LZsSSBzNUPn3GJAts^c$2}i4?oJSNszj)Q4uXWDE3D+-)d@ zXMy0+#Cs_9uUW?`ePl*%up2~rpt^a7-b&+@g2dxd=YW@SJnFii#P${~H^WitGn$U| z@e(O7lV`AdaA^**2r{F-LG=oho&&Y_N=`(b1zzGW(a2q&YWd0J)r-1b@h?&LmZN4X z51KCWBdV9zus}~5GJfTG(r2dT^e&G;-t0QI@9QFyu{z5?#wUDMs4nHUPh^tj5_~IGv`T}S#{G_rdBMs9B!gt|23fbm>p%i zn)ZI#s-XQMRliYf^!e^MT>VJhe3rivrPk1tV0fT3bcjRSH2l`=xuypupcIn&lk-ND zY272grnvQwnZBZTh&Kjh%g+XJd8yiXQHuKzO7S>YWTd#?qBLIUBTfUYzbozkKAiMX z+_v+{)Ox=-&WXBjU{F_?4yf~euq5|Sb2D)%kzm9|icy_|#qI-K!?4rQoMC=2Wisp8 z-6(mPDe@~y37bP&_a99wM*JhEGNMr$wI=Zgs>@L0OZ`4X zjg6^D_g^{1`VAADZV9-?#O&@DWmTl-Z=7yTD7i{QeTF)_RHglH7D&#P$5Rs!!A9?A zCG)-pDm9pEb^b7cf_9FKLv`>nGrRf473t3}ktzd&hLx$;pRuJt>(te#KKSuCnn%SS z_{Ei+s58tjf!yVe6ErA;h7VC5@-r%9bmN?$56w6pjOt2sbHjQGssqaGQai05!(w)d z8{!4n4E*T(Z7J?dR7X^G?TC>_P=kWKrhM25<_tZ<;b6yMSL}}HEcuAQl&UQbs z8pZj-8WV!ERjY_&Cz(!-6HzK0n|QyJNHJu5q%lkVF_fCbY?r52FsYac zm5CaGpLw==H>wM&V(`%6JCy27!;)r)iYC9{^ytj=OKMZ0jTnddhiW@%k#BGgG0wC~ zrOwO#a=!MLvvFlQ&xFmvIlwq~{N+6Hm$PRT1!!2`=@t%LL1qX3awb+SO(5$p=T@Bk zY{C9=o>{Hbdj4O|Cvf&LVI$S$%&bFZfh)*t#b3??rB1h24bvVRi#Wy&MWy+fm1&5} zakkOBX6_+eooPV2VH$&mw~9NVcnOPjcr?oFxVnS738k@PX2`dwL4nc(@2)k=gmm)! z#Kw$;jTqJ6)%5B`Lvlf|SH?JHFMQQ4rWUoS*EVDl4(*=|Y7c8Fc3G2tW zr*Q3Sn~=d6iR7a=qVnwfHsj(E$vb{Y62+**>%z*;MC*!D2IbAIKB^naJmoCUo6MRr z<@_TJSh-PVpW~A-_c4@eAFKgRykC4ONvH8jwVI2~h(?%e6^U_RxC_-e*nU`jP9tyw z-nUljX3toFQu~?Pp2tvj>az1z;!SHM8*Ef=50stmU!*1=R19j(A?R5@qZujxfl;*} zJd>a+?^~p3itrXj(~B&Mky?$35PZZs8kZ?r(vztP2-So(9F*d`;3u9z%o7T0 z5@(QgX;M1#+3fRC#!qY5eSTsqB7B1}g$OJvAE!7uelbS%wfv$@%eJbAGQCSoog;MKMzOh%y(KvY}a7jBl15Wd=liGbh;F9DgGpJcUtajlTnz zI+w;LpKnp7L1~}J8O_z|dIB^PmsV4T8lhf7^)mU;!qr-svQgDlJa4tite;n-OmDHI zM-HLPZC`_yrlh8^hM>&wJhCq}0bx&roLdw8jE;1}kTXm=@&1wilpdApHJqL1zJlwo zJ*lpr(TTvBtxTV>0`WlU0IFRO*x{Xb4M-MqDlr~q23XcbsR;;m7i~oyK0%#>sv69~ zS;=ME#Jv?2^n`z;wv*z1h*W8V4Z>~NrgXHhE9awzH2byROuoS)T^%u;!Geln8d@8^sO)IgNk?<%%uQ$htRvzvh$75F9n zp5ol?7k6Pum-kB`cSMI+@98G!daKy7SEWQ=MKDscrL&1gb_}9{s7d+|%h~E@q~rY~2D2dPHHI#JiHx{{O`S8T9un=zgl z9518(+Abr}GG%k$MwzZvx7Y4r<`xgNxr>;F(m;)vPq|SFY0kb?`RajMhTVja15qPU zLG2?Cqj-eIQWoxI1_Hy9IWh#L9XIT6?9D!k8Xb${zKm*%qBnU;RK2&E25kPsn~2hk zcYF@7sR<~16kuq6iW*v)N~b<$>$VkT`fKC*)P%lH@G!)5&@_~$q)}T@Jxf(uKQj{; z?c6+Gg3?r`3JkOTrHW^b3H@VU8@W{}725M}Mg28Y8V+!R`zq5-*P+aiJB*8`OMTPa zW&>j@te&7QK-pnO3AUrueP-kS7&R4T2Ef2UX7vc_;au-$40ERRj1L9h4b<0N^kw%@ zInWxM2586ND$DX8W9{NN|Il!!4u@%8ZM5dH>|h%U;=p+8|1a!k&UYFo$|uu$ixq7G zi1QncaOxCFGPnZs6j+y7cIp?TJ`L6-mVLSe*FUlRX9T{6)d;h!7Rx`^YPdp>!5n$` zmGhj&g$kc92?~HNvGf87uClD!F9Pyk40MU5msmaz)+G*u3njS9vceYz|BOTaG6dH@ zu`*s}{l!XPxz%D9TxGRb{#RQqR{WJ#i{*b!EXQlCM_E?OTyO1VSqZJOc5wo@8OXj4 z=n^Y~^%7iS=?#`Q!V$1VHC4phfiAHEZnb=eThg*zmmJx^gX@2egZls9$jEdNr;gw%W$g#*YmN@VRhDaE8G~JYodGMz zSj*!ixWsafxB9=zh5s&s3O2ze{7)?ZN!GtC%amp9|HKvWpM^i`OkrrA4fx;5N^-tU zw=6ftel2!+T^IP%|Hkp3W37-k5V116DM-MuoVQpl)(U#N)&G`t9{G0xl*U$@(0_)@ z`zy|I8V{^Qw1qvsxz}p3Tz(+Q~KXG*;{%HNha{gqsSk9mMqx$~}E8{<8 z{5$(=&!fIF|A}`HLWR=>OFLGVWhEE3cCoTauv#o#$!f9Escf}a@vFfKS5upk{A%+@ zTvvbo#xm8jcCiv@XmwduMvbh!EX&k{Kk`qq+|=@^aduHWRiU{4iKEyj<6j$IY{UJZ zunMxo7T~;Y)^Wb&3oI{%b%_<>LaW8ng<}7!v9<@7BNgIe%a_UVL<&8K^}#Wn9~a7t5Jwby-%r^{u^>b#J5u8dwjpw0=ZbS6S9LNWw0!(`>lYEjNSZ ze+JCIP_pHAuxi>FR=O#$3epAERVatXQ97&ydcj)Rhrx<4+}cN4Jqp$(mj7s2E2Dk~ zK=Ef<`z*`3uri!uc^+I1T?BLSOM5uvzKB0c;4;fsS-uA5U+8-NC__)evh*snYPbfL z*INFlYqr43_;wjB>o)2hv?}}n?2v!xL2K9pE1@S~1$+)xf%d~1q_123Hmn2=!Men9 z9=7(6Eq@Lx{@3!fEax%)h=1TuWz9cFp)9LLaaN0!u?wp})nV1>6j%kQ3oCpgtOOgt zy2Nre;g7;Mg%$2pSQTt3Ps_plFKdurvJD_s#5Puom2pRF?_~K*SQ(|jDsVciORV@& z%RQ{U44)kYEMxc&wG!%S6DZ57c^{iWUpVY{U+&b&PoO{wTl&Q zgw_AVVSfe5J0X89ltkdrIfPbf88-GknOM%N_@jnfVeS9K^1lXuHR$!Qg5GF#u>{w@ zW6hh5g*L)w%eUExWmyHh-P->hE8JEat}JWGx!2moD){|Y7sed_#7gi18(}9by~{=v z%lWY7$E{tg44$;QEUTrSwstY$3PaD}P{Pkze$IG=Ua{u>#s3Vu zGXBE)i)H^3R#X3A?P58P^Cx%!@{9E-%PQ&b*8Wedg#WPqWw{FWN~}Y{1`I2my0F40 zYJK_}I~xD>@K9QfY{14gpjb6Zg0*((zlzXRmX&Zz8?F^B-P&@p4PTb!-^SX-g=(74 zIGV!e!kXuEVbx$UtV^tjORWB{uv*{(;^~m4pX|~lmi@X2{jY?tw;p9#Epnp`SZw|O ziIvdJ_$!^YHk>%vXszB-h86BMt8a^#^{0#hUmHLHZ?^%(%IHq3#X2hNvHE|TgL}*W zVnP}dkJyaGYN;n+6>zV$i&cTAtrqu2C$P(EqphMpT!nIITGfXYp@H=%%gV43cBOSH ztigDO4Of;`fMjbg%d)q_uJqemf6Ej8ZV0r(q}YIESqY?C`+ti4wO4RA@!}OuUH{!H z_&i#Ff@l7{Y${?^uMe!DKhE0!2iXj{|A`FLJmYNz#A^46ul!7bfY-qqNvmO%^d?v%Y=h-n zVP&)h)>W1j|8{FH%L>2M+QkZYr`0j8C5JM;*LsK@f9TabIKmp*W6l4>D(9p4Ysx)o z!~G-sv#++FcI~yn%CgQLuV7bk55QWh4#Fz#yVicl>h~=lfpwK-#s9#D{}5J?&ulo@ zPg~)*dMXh5!WzYj^d+o1d~5Auh5HUx9e=d;vaCY>VeS9KO7~CeFP5gA?FvhSD}y*S z{NGpspR9fnmv{rH+LvFxtp3a|=V8CIUBz`Dw^@~c&z{FP850TiYQf0R&?jUd*j zYi8}uEw_M`z!|WvvaI;6u&V%Vtp7i;9`vRb+Jw4V?glG??lxjs);#NL{rg$}vaGw= zbFeGpu{PW|8&0eOXTqw`WNR;!Lm5ti6>*yN5X(LtR!Qf>D!>w037v2KFR=PTt5qRg zWm(~uS^wp*f?UBL3Q`zaDa9pL0j{(9pI8OD-iEuuh7-$vqh;UnYFGu|1nVlx>hdkv zBcX|`05*VFgJp-+VkLa9)ne7;epm_Yvi5(+VLy2;w^2%VpAG(>VYS0^HkuXCN2C*J^=K~tz@X8~PewOFnM7ku&!05!zPHvsg(zpj&S z0GxaS;N%+s{}*00Fe`ECC;wWOxuPfE0Qm3xJp7ozT`B#I<9)%~vC*J_zMvHdP4a>63r?%dSCG_LG0vrBA*Apq426hJae~;Y%=-%tEvrYRP)qwn=jZgdc}}m#$U5?%ni$b zYVygezjYkadTHyMc&t{O7^=;mXM=CTbrp+BnXD`xf`hG0Poci8js__y|T z+wt@C&wm{@y!exuiO&9p``?%{EYjr3XZk&H}>L;$n@T?3=*J3!`e@=$Q>o6p*!_eGcvJOLw^%xGx(9&d!*tXPksm0u#m@66g{%#p&+=ijyZ5Vp`Ik#b`dpm~xGW7NnZ^!Vg3`=jv(AR%X zhQ(VkByYvg-(Rv7LyJ2w9Fk$6-|`L&Z_BXa4h)0+5*aSP6GQhqF%0#uxD!L_T^PQS zVYuJrE(}LySbGtrss`e*fWB<$E5Fzu@VDGao){Yu2qbny={+{Ud+f-ers5YW+!- z!jjGH^yS;w%$pd@IrAsntwsK^epmL03~iK<+wiIHo*8*{qh)7}=#h5Usw@APbY$W7 zE^~%o)8^^&i6iQHJ=@QI>*;~nyLXhk>cubo_g*@8LeKg&D*2iBI(3Jf6Z*DY=GoI9 zt{Uk#Z}l_NE3Lb$Nk(d`tI|XFUKQPPd9NpHT>I;9E9>6##Z94Bo41{Nc>f=*FTCl< z;n_tWHU9F2l@EWzFY=TYFUwE7k6PEgk7ihUAI&hue@=#HWk|jsL$<%3+)xFtm68!-@wmoxQ%0s|H5%CczSfybUQIu|{*yYNzdHZ4 z9v%MVSG`IbU{TrrnOkwyk#;SLzDs{|`?IGv-B$Igr0~w@qFMXq*F5q4^N(KB`QF|w z-e{HmOX6ccztewt^C{V#?=AmZyTNZ%*jRgH=Z;0Ej8F8}K1BbV)#>X>m;8KT|Hogx z{rb_{W)1sj{kfMW9u0q0*YUuv*4#OCCA<>|8?$N_ttxI;XRdJJO8xP zj?|q|f5YDQuRdC)cuV|@J=FT#Jv755EV!55v&Y$a&z`sqeZ5J&TkzlRhLf`Mb93et z@QDYv_`EV)q~q4ioPr!xEOeo`dg;$t#V# z!&kJb`p!m?_;PWPP5kgdm7VzacKi`ee9fIb+QyG^$g-xw``sGFCpeq^h85z+`KuG+ ztN8^L;>TA$c)IzYqE&#ecOI$`-`I&e-g4(372~(WMHY493nWVMWhY4Df@<*zk#*^O zyK<*fDSli~Ja=ARc0oZ-cHU9{SdI8oBJFq+xUx#A|6e#9IX;N5b@)%zkH2$gwKnnL zAf27x){Ng(uGR$JIpcNSqA9sKZD#UIGAcre|49A#`_8;&n)$z{=kXev>KHUnes=y8 zg6zh|3$=l5wGH>vsc1vLUR&BC-=ZQw~d*ULS zo7$3}uiwcCeR?S;US zoz2?DpXWFW{f+J7-*MLMT-rXqd|YJo%eF*8+qebUdHLBCXt@7G$M|RBetvc5OHJcz z#4EeX#}1jA{|Z;uV3-)#{c35{Z0{E~o%hwz;TyZfw{r&WY~L;Zo4Cs7GdU_!uEO8> zM!1T9O%TR^JQ}~Da%acB%*Y_t?jPDlM zXXnh$ruL!0-aOJaf&YM834AYKUju_${@zRN_-0N13v2lWRu2!p;=~ z@v|b;TiTMe3hKG@-NEriag}3}V+}vqX3An(;pnjVha-3MLuf(a-&bLrjsA)e@oACs zx~WZejEwK7k(%I`zdr8OL9jUg?ve3n&iOk(8yR1Bzmx07C55jq)GNEX)-#bcYV`i_ z#n!gL+Vqj;rPj95+9YESK{r{OULpRI2cf!du{OOr9wZ8Fwl=-FTTvNl>fUON^m*u@ zpVTybO83(=UAS(;OHO?!p_R35wKhF$?QU&%+9dQ{v0nasCDGS<-EF<}`gA{Q+h%PH zlTd$a+iq>lh|pO72_?}Qr>-5=OFv4|F0k<0u(jzGfX~%zT=!v9YWgn8mwxqAN#ZN( zr7!c!sh`Lyu(q8xcs*TxNsod%$uw1T(GeVQXuI?MZ+PJ;EQA zpfOnO?@$u!Y}dVEgD2soH?(!VX>Cn$pQe81dJCIMb1G=&JExJv92@+g4bGw)nrChA zU{lOyV43axBQ{)fY}@>^l*B!Fv08>cvR*B5uf?X$)t8f1r!&BMo5Uy9)(YDOf1{Gn z7ix8VX1$Ve-=LCmX(Lh+ZNN>|_Jy^z#Wun}rX()Isp~82)gHG)aCM}<60IaUfH<4P zH`dk>Te08sbdtD_FzO(EV_LzrsOkqw8o=LKTW8!QK-c%ymV$eae;r8_wg^1bO{1wN7=TSzeQc_CFEGg3^bxOSe{V3_U)GE| z#=gpUx((hJuPbruYG!TyaO>-?>i6c>)*tsK-0Jrh);0ilKiryGuGsg_!ZEVjZNvy0Qw4wx_7z_mxDX@Wz-qgHWOPK;nW*B);0^bzImjEpJ{Emxc5^L zHS(;$#xR+U&==x#<=TKcF5h5nv#o6|wtQ^rjXBs zooH?OHe5coM*51FnzFzeInsxYYHV;Vu(k!bzX58Yh1RwZ_qRaTB5PZO`@6ux_lB)) zG5UL;xcWd}-LwS!0CW}V(|8%r1Gm_IKi}HU$95V`sHVKY+AhGY@6G92icPJs6ufS2 z`c}QtyAZr-ZAI2bV~5_dHtke|^P{c8k-}}(xZDO@MnHYHPu*~lwJpcJ#)iAt+AhMT z=2zETVr>`W*5Fd}UTSTZ;MN+gR=dpFF2(&bpfw6Zms{gy7%sAzT!BrsyBu6>ZCBZF zS76f@`E*@v!(EB{YinC+!(D|<-zHSe^@9aU?`oj$Jr=>&1-6d-+5tje?^I@tMZ)X{FM*fAE8qZl6}$#s2XBBk!CT;MPy!BuXTdJ88$1N|0KKQFW8~?e z8E6h#fHQ!OlC41-&=$0h3)KsC#L)?y2|9yR&;@k$cO-|~cF{R;02l}cfx%!X7zRdw zv%uM4Bp3xogE8P7zgC-YtLoagl0h5L7PRxXwxRi6ZxgOr*c06g^ag!EU(gTq2io|w z!fEwlwbE~0>&I_{eQ7wXUj+LM=nVP=_!8*Q`8D_kd<%|&?}1(d&ja~DhtLIJ5kDDn zO51QP_dTDXqe4=2BQ%YS!pYuoUtXO6-- z8azU&9tDqq$H7xzFL)a41J8hG!E@k6zhS#@{X%`mZZ~)c=!<>DU=3Icbaq`2HUgbl zuL4&CeFO1S#-`4!r-Npo1!xKM?L~dFF$c^9vp_D;A$Bg%!BszupdU-%2NViJXW)39 z^1K16;I0a)f#D3K-+^8V`3)QgC%~8BYoOny_z-*qJ_erxtw~y2v}`;F_JOCsUho*W z1KbJj0(XOL`W=$(ICg+yum;==)&ZS`Hvp|Kdbjio@Fn;Pd=0(<`njt&fo82{=?y@e z-xQ#|O?%lip#4kxmG&p?N7{dK!EFDA_TjdLS}C-TP6U&H_TD~VBlb;TGuQ%FlGU}! z4y*z?f8Pjvuo|oZI)9%<+_S+*a6h^y+zY&i`+bmxTW5~$fK$}8;Mk;7(o=Zu1^d7= z;5qO-cmcc!UIwoL{Vdq!;0kahxC%@LQ$aSE2Bw1?0PZ62-Qadm1^ZgC9&7-k@E;1&!ReqGXapLAM4%hL8^DcVHHd;9 zAPqDGjlk=qvm9ImigfV0nv8T#(ZNXvFC7`Cf^0Aej0NLBn6MFWoGv>7egRK|ec&1J zEO-j&cQ0K~0aOI>;6vhn1U>kgpjTXz9H%+kZFKA<1y4+emN zU=SD#s)6dD8E6h#fTnfh6YK)J!9(C&;_ANXCJ?7ZP`^Ub6=QQy4^#ow zKo~^8KK!2nFM^lA%Ru)@*8>l%0=h@K5%@sAUNQ&F2YDb0dV(&X8|V)7%Q15)z&!o> zPackZPyiNygfu^hocF-z!fLhp&qV-5h56AQvbpzN0 z_JVytkLex-Bf)4e5lm74w*fV2&RXDgn*4200(4`g8!6o+ts~?0U=z^&(PnTf(C;4U zhbmfvB+wL`4idmo3LFRPKIv8P8qocb?uT^$Qv!l}p6xg`fQ?`ixCLwm`u&rK!6QKT zJm-THpkMaMqtN+a0aysm1J{F&pc80HWfDPca2tix?~dp<5{ke@K({h~mZSf5|MC^k zJlC*HE!Y(+wf;7N0{7`qGr-7S*o&f51 zmh{x`1ldhQ>nWZd+C@Qc&<_j&x?#K*+y^#W+y-w1n?OIXmGbJ>UI*e{L3%tGKf$I-%Y+}%Ms=mGRVt2gKarcltSpbzK^`hosn02l}cfx%!1 z7z&1!^Vf9?cPMN{+}Egto+*_8Jx9`GqxZp4@D-Qzp*~Ul^f+Nlgr^oy5oj4$4n6=!fF1+rwqJfX10|}0#5(md^yT0Z@Dn%z zj)C{VVXzbI0+#~CsT-x$xpMs@>ETmd?PdDy&|!Y{Xt)l)x79KlZtk4tpM@%1OgPnz zsKGf>n~^%K29Tc)IXVPQ1Uh&p0EO=aCV`k;2XFa}2a1yc&IP&^9tMU2-6rdHS+~st zK!28>P%j+aKxd#tdEyZ~4{ie|gI3@S&=Q;m8UY=48-V&C5!3~Bz$riluLvpt7gPn+ zK{ZeXR0frR>{ZA=aMVQ92DLyvphTO1#vlna1*d}3L37Xyv;eI^JJ1%Wz;bs0vI}Q| zG|&a4fK<>GL_v3uPX3`DpeN`HRLee~H|Ph{R6~GDt(H;?sa4JaYJrhJ_cyBf2yiyg zJLS?|09CRun?F;4`g{_Y2ozB6$zUo_%M^e)U^d7F)4&Wc9pr$S zU=~oK^TAv&4=7$9$On^v(pLeLALHwc;Ert)LIYZX;l|a~i&Yd9mV26CGCG`=sLpPTS z?qFsA6!zKh^qu?94NrG!X^iS1u8g0Ap8(VRfn&ps+smY5kv@CXr^Pz6t5td z>7-j=4av=7zj!Q*<0<|VV@a7;o5qC;>6xwL!tc1HjpDBuAMRK|N#9BIb|L@k@!@)v ze?jYB<2#ZGdSGXg)}#tyh5@F@xUaywGP()~X0HESCT-u+Kam+;R9ofJ$AlXQwLuSg zxO$zj^U?|7s&U#5%ykpQdRFvg{)Sy|MTfkW;7mwuliH@8|KOx>;ph%+SblV9rLaZQ zN}~6UPEP$e&Pi?4KJaOSPZNBeeetEw>y4Pu<}aU|>2v1h(f*&Gz3;iVv$xEQb0(bG zremA-G)tU6EH_-Y!QI5IMBJBZ4d}V~hnYtS(Vh@A!|phLd2Tp)R*=QBHuEEwzf-Vd z*z*Yl>(r)wJHj2ohn2hNx}8rwmD9BS<$q=V2R@DQiF^0b3szszan4^px0IUcg|_`TP$1^_@pTA%&=c+a=1g>d11fD zWYW-ii@l*}>}5&kb$Q^Yr%f82+ngCZuvGqC+YcU9Z`u2I;nThi>FZ|6UrF2sFW9*0 z6XG6z{hNgMZHUf#gzrB&IXoop^RQoSO1MLVA8kojZoGH&?@M1EO~_89MS0waKVeF^ zZd|R1zj#V`T3m~We^@$&4-beL*FWO7nF^mB@h8I#G9$qzS~RBKfCG(>-S^yIrCJ{G z@0m)>l@b5NS(I)!J;NSdRIA#KJ?C9BXLS&gT)Cr+_^y{}pX zdA4uE&b=?eA2E$my-o;D7DdmkxS&d%xHlHZIW&VBHPo+yfAKVGn8)FRe??=?dSO^r zwfmnTjn1a6mR9s{zcJj(|9x6GDK4*)-()(4i?8f=ogN<2U^~62XtP^3ntaEq$;0Cu zrdE*f9aa2I)2YtsRsGgYB0*DsJ3V~HX%EsmoK=d3R0|F|MOjZKJ>7qG;*Vt5$;?Y) zrq3V`%l^C>;ZAYqSNFHfAj4rb%*d(m**OiP8?OF^X#Zbl-yN65@%+y{-eIhObPfe9 z*p;rviY*Zfl4w+{SYt1-V*xc13o5p;BX-3`ELdU?YwQvejRh4e3fN;8zwg;S@`$3J z-|Oc;>vQ|w+1c5d*_qwFgL{O0^V?F<-e^|Lmdf=;$CqrW1OF~>N5lEIoMU@8jCvXL zmsR-UFP_2 zmuj|l3KHV*sp5+;TB8F4A%;CA=s8N98%5e{b{@ickAPcceXad;f5LHV{~yt+8bpE# z+UG`{2B}WCem`OmR_J^bKS*uvzsTriTKBmLzg;>8p8%HyZ-V5@L%RQ{{Nk0pcm0wV&(qfm%l_Q@ zk(U>@l&hq0;{|fu_)6L~MBSkzkjHt|fmMDlm_tMz5&Y`lj^EU-iy#NKZ`437m;I#r z*j@sHWqvDjkIR1dcPS?2G~N6Of!-~08>%|{KR`WeTZKiNXRR9DFWi_(EZi?p!|T+^ za(Y@;Q1k{no-JRH$L+!XLlKY&HtZ~g6$Der4b_>x8m8igBV9Y8I-{sPOm)`hAVopw z5wX}l@xIH?zx722UhoL$U;_;vhRNPWv2)S%_hG7^eh6ST(EB0X!dp%&H%@@XyiTJc z!$EC+IcbOAO*y~0MBAW(0I>7NfLBuBa0Jbn0Pt!h@ib$&>f&Fcf*j+1mok=nJ9oK` zM$kuQ;q$gupHjKM=4i@_?p&-`zgDHJ{xX`v?mLpr2-VqGmF!hKv7$yJ)QYvKqI87` zC|R#7u{Z!d#pf58_=vW$U1l z4KD%UFBvX{8s_Ka>+l~Bw4J-!q!h*zmai{GjsnBq;U_Z7i0{KP^u`kwdVXjUd;Jzw53F!Le$WoRvTQLj3yS#%GwMs% z-m4BgR0~P~E&0G%pNwpi8)kM7ZJkSxLf@Z^RLrL_9?oQ0 ze?yfemm9x`Wp8L`xCAJZX)%wRiSfAG9SQjEe$cB-;H0o|RDA{jWgd-R1Keh)3LJ05 zE1MpDv;9sj1P)FaF(J;Yi;w;Sz|W!;g#Z8-*mpG4b}hxCFr858uhFWHz8C(P>F%|2 zDAsZ2!U?K^01HbWc2mhC9E$S9k7|XhPPz^J7n0?O^FDjuM?Yz!n1PjPAb|c&0pR#^ zTN$;ZSNhMkWB~+F$N4Qe{@x5YO^*RkGO5rQ z;0hzGf^|pCj&yA|Zur0D%s4Nq3xIzM061u`n?I!IkYA2??~nW~sd0M$11e$| z$PKe;NihH@t`yHWuewr;m+4-6&fV)4YQ{C9YXJDS1;7FQ7IAENZ`tPIN6ml%sA2s+ zVDaD^&wHkN=9&pqc^tZ!OL6%$J4?~)Itt@Qdugz$+0o2#s-~n+!a3EbPNyxX*54YP z_3N_Y{rQ;Pfo77$DDBT2uqVA^aP@l9N&lj5{IRpm*CWl~rsO>yorO_T6#6jWihD#zoP11}ruRePvUp;x1+GNi$$GrI^6((eXt-DF@XiA%I09`(Hj(yY zTJz|5&mVVHG%4&!U<4KuNHJ*+s<*dAG%aQ58bH|=eP?$YoxF7USd+34PuN%dN+|#+ zM<@e@>lHj@k8@#yLqdUbl~h&n=48SmaDlm|7WIz=6RiQ@K=Rwk7D1KPww+@J45YY7)mNVafHeTWuikd}+fCcQ z#j*qgW^cZb9x@;vfC2!7JJo#MJE~PrYXGVXzxxn>TnCo;GKlt1P@QPd1T6Q)57(%s zvQ_%JsaEIDTf)zbz!UCBB7F2w!BRYpH@si(no!?Lco-y|NdKwGL@YfcTgvpX9tBQ> zv~+5Zr%Gws^g#6>_kx;>;zI`~s`v2vP}(ciIq}FOb+V#FQuE0e_te&Mp86kJIj-*2 ze?pKCaIjMi=T{U7fD%jBrlQzDN;HZclspB+e)9MQjZdI4JK!JE9{6o)TxFg~F|sQ- zpYhXGhZ1m3H-O>U?bE($=)Q9*B3MqCSrHykNEF2Kx;6ESf`hXBK~DOl;I9VMnz%5O zfl^~^DHcF~4*=NJj;Qmn$Nqk^kheqn!kJe^4U25?Zxs{kj7s=g@)3YO>QWY(>Ma4_ zcqO$#;FZ*n*XucB@#oOiLXO0chB4U00lz@G^hj{d6S{rfjnP)sHa~-Ccz9SY^OT7k z4n3Qqwop8%!BqI_UunctwRvvhh6odjO;bxK$~E$y{)u#j@SJUZI!VdBDpGQXeZA$6 zOo}JPPe%xqyOA5|JTv9VKU($mx9uVu6>)eO`e^!f7?VgCAdAkZ;o;Qn^kn$!2C+H0 zFlPEkikkrngDGhyigA>}^o)nL)Sv6z$&HKhRAUClB_HbZyGqC56dS%UdR;3Yqc5-j zC>o6o!t3ZEXy^sHNw@g7>;5a>Z$Gq3v=RwQ?k;638Z;B3U2&QQ*1pi81p5!h7};@T zZmAt-x1)7V?h0G^U%Zm%Ec7#v0%u{E%cwmH-L12U1KE6@XJIUq6c|nmJ2d ztW2VcF~CJ*hmg&nb(@nRJu=6AixFX;f^~cWbq3(S*R4(;^{I38a{UGXpqfLR&1lNj z5%TZ$8tV>U@-vHY4{c)FM*!dvC05S2+Um@~Cjc11(K$*3KuM!FC|o}u{XgkRUb7J? z9KyyW?9RbjTS{@|7uaCmK5&U480@%^Q?H5|e>U(cc)1!3MxZHcaB{Jl|8{OR`vd@9RX8!=cR1$41t)<5 z2MIN&uDIgk@hVwR5P7x?_Fab$kTdms!2Ahz1=o}k6fmdQuoP0V)BKUlMNt;IGx7}5 z=i$7l4f)PfJ@j4!r3^#MCI>{$YW1h+K*r@FG#U&3s%6n876iiPC zQ|Nr8!b1wtjQQ9h7+WY2TQ1Y{R{Y2APGa!j_lr1(q6jZs9O9qC9FG(RTgbF85bX=sDb6 zQ;#-*xZV~34w)XdO`TUXXosU2Foe>Wi5b*m!Zdz7li z0(YCk_kwIoo`Z8evAFdj4MfF8CRbYJ}BhFFSL?m71_xbxR7ir2GfTqayjxV zW4{k;_Zf`AzdWSP7Lw9-!`UX!VsB&eco5L6QxQ@r^V@Z{3%^%?3u-W_Jgvj2cpSJE zHeoLuOEQJ6m>?~}u%{v9y+*ay*d)f& zz!l&p8US|Y^@CdnH;Bfps5>(wi~@_-@o=(H_N7sQ>gAr_}4tP7L2IA6GbzH$rGhv9dWhIUV6{U z$=vw@N(Kej&vR!;!}Oseou|B2Yg!Vvl#3TIy?@^?qtxLS2}9XeSi+hq=~`M#{)2YVPfQvZ-^qx~m5 z8j_d&eMmjWZ|a|))eneC?UCx@`vsp^m4cy9di`nAmo!ef;N-XC4R1WKZ-;(tzyJdOwi?y6B#_+|rY4181+Pi7=XdO0ew@}~)w8k5VCsY^t z|AI7lJsue~M&Uw9pL?j^MxRdTbDO85{q)7%IK+kaa-T+Hqigw#W^6#H-jGr^!1*4e zw0QJ&nI0d*7AKt3omtWZ@2_4Su<>#oN0Ds^yM8*0T5N*d7N$+y#FG*>qR2%+1%WM8 zck6%8^`P0(V7HlWO%4nCwgP7$Vw(o9uyT7Evk~#9LF98JJJNgZ%BYt8n{wC@th2Nt zHz7LPMQ4rzdYaB`LUDsm96@C8Yz{?i1Lu}hd^4W9Q1L%dcu~k^825p>Qh1?#mC`;w z6S_cn#_D>BVi|69FrNk=#IF^Ug;tntk1hE17u7_eU!5=WtOs@dkB!uJgnc~e)a)om zX-vjNirj-Xk4dgk0pGk>dEu4Y5_7+n^q6TIg(E53@yigaWQK-p1-+jrdMj8lCO3t` zeg!U-t|g$z{m^JEA$sf*smkZ)Kb$`Ou#G&O6zURBF$tjfA*ugr#A&M1bF_cqk!lAo!XlCw#BtvOG-&yVf=lb=9R)&(vp~!h~Hb$#YT`l977D0g(B3hhSWLDI* zRCV`%a?pPVjsqvp`;%Q0-7Pr>FbwH$8q2u)&Ctn#h`AiHlY;5wlsm_QRpk;<@x}x%*}#f>V_>E`e$f>@z6|+xinmvLfBh(*4?*Ao2d2l&xZGx z`)KBISED!p@cF8}jOzs)=L$t5#&z0qt=Sp??LL6dv zf3c7|Q0if|xUnFZp8QG!A4UmgoJ$T)@<_}6Kxap{%kXjIxt3r3 z)!{z&k#jhdWGItSDM0ZSu2aUZMS}+gw+G4y3MF}C$)w?k0dsnhk&NDXhYU|DuJ3mH z`LLBM(bQP*a`TyMea%^djVK_uZ1+<1aj4vxol>^9-`#EVwDbYa=?$KYIWT;H(O4E# zjyVjZ1}Bh>h?v!xkK{IbPjHjA1k1 z&v$vYx(+UmA!`*I9mVO?DfBCFX3pJ7KaHnV$p182k57`5wKyoP#rlX|d(fIQTPU44 z!m%Sdt=2${lyVv}a3r@gSle;^;_EYNGo(6EXOIL8JSa&V**a_1<;f4e5)25v9ZL^^ z$0rI4oQ2iJQSGy8MXl#yq-tb!Qgx(BXCX5&B*%Pya-5t)`{83wIPtfmtg|?Bsz^mr zAhwG~e^me5N1U}` zqOf6s8r~{&oL^~F>ZW)1?fwfdOjP`DusegQ{SAfMKz;E`Uv*Z_=X~pkK;Mp=u~LuY zgC8F+i+mKz@Jp1Ojbl^ZUvq zklLj;jrwmrwbjsPu-Ju?0Wjfm+La6NG@_Z|6~wg!oE%?NHUB&=M&Pu8w<8DqC8xX9 zme`a^*4NX`2KhnzTy(`93}5~AdFkIRCj7qckH$len0Zp^8ZK%0TVIf-9zQK^@`NHU zx&vTDy(Lh?DmHjcs>SfK&Oe%Ke5f*pt=9&?3V;CzLz}%=?>Pzpb~Mq7?qMoib49A6o|>KH<>Fr%Lr4=7!PNS8%Q(wsCyrX1gP0 zUQq*-dQ>V^_5CK~s?@hvo%$CUl&`=FL#{ROasq1jvc$Xjr%QwYZ3B?mfJo#yO zkA6dY;QgKXX}!LVp6_I>;FLa9^?)iTrNVPjY)Y+ZS_kAtI z0R!*ex4(*8b?NAVjr!RA=hvQ0kNXSUu=Zn?pP|MYHJy98j=ei#8E>H)b|Fp>oC3Vn zYtkb2&KPy^^@Crr86y@lwEgt{Zce_jnJQkx9D=RJ*Ki^2@pTz_H;LJC`D)6F8O)e|Uh8?Y-gr(WjqRX~6qyEBaS#ArsT!RP{r*MG zb{y>(w>bZ%Gig|FZ&2|Y;9A~)Lmt!j22|%3->q}dAeJ|`X!#9j?u=nlaNA#%xHKzb z*)Gt*J~7VyEW}9%udQt;3vKn@x1|Ynv>ug~a-+ckAbD@M8s2;&kDD0NG60;x(&C6( z7l-*iylsaAq+X~{5^3>GoJ!xI3pdq9r4s?;eZRc7U45(Iwnik?y9Mth;}{xnORcWI zyesc8G`zU-d_dm>&Y0k^YJg9<2h5x0SGbYbLbtQT&5D4WsDJ~ZNGg9DtjwT}w;>0y zm5wcLwwFB=!;el;{B0=VH}|CyuDAK;(JYtk7kL}5Mips*uPZ4H`hcaQ8x})S%s))`VX69dcwv6D*8<&qQMp0)p)uR9?2tcn95e*B}DBMc`!~uH@&B=th zqyS(8z(r?Y?}7zpas+5x9=SnjnQC*>lPvPeVo(0S7~%Q1m#eke!9e5a&z2IhAYBpP zy3yDybXyT%5gQHgD4KF^=MFIyB77ELUnyK?%FaS+bK#Mc(7;C{8ahmEl}~`hE$}&`rkDxnesNG{A zx>EFGc;CLyq#(*YzWVSd$47h)%XuJ_L%yY8&u5j!nm7#D!jQ>{ukLvUwK#rKFeGB{ zNV0l@;Y9;b1c24^mt|`1T>=3x5}!rX;0d(Lg9h_Cm7$q*^$G4R<)~@SXHb89H6}u> zD+I}>0O)=NRelQUTVF_b;eO~*zJI(Mg{ZhhEyQ7QjKTm=Zc;eo-T}u8N~1~^p35&@ z>|(|_(G~#weP7D8YRB#Lwl}lmv(12D)bM7(%?2~396sHAp1GzUy<^%_0dNB#e8tkB zk!>#Gx?Bzq>&g2Wc=&^wqR`WUEI<>`VI7Pi=VUI2uL zsZLA(1sg#C*ny2xo!bTYMJy>QCPe64CrSYT@0MjSZYprLz)dSNU~#Lh-7|nQuC*>D zx91SqE&v<=Xz$Wu+Rlx)Y70W_CM`~*hE2_C;=C)~UrllqJoxeG#96nq>rDXIk}@Zq zdsV1ty`2ESl5kz#@0kUyc&={8{jxSM)H69-9#rq8+QRhSf@Zx`)8!)SL@}?_U}+r9 z@uqFn*BHEuqKGyAw>D2sb??@zm!K=Ou>*~Ljj>fAdX050fNpak9Gh6lq;J~}x0dfM zbkdOcgtrKDI?(R7unl=iPx;=d#dEka<|pUIgXyV4gWh5Fknse?y;J?s`ocSy}=Po>ru1T?sPO`ghXJh{gU?XadnHQ$n%?s4r z6#ifHoT2DR`1}Va2Z`%F)1y-kuvx>b%-rCOm3i5k6ArE&70nm7xtc1lVdEta8mC~{ zT1X4IY6YF*LL~Ff${h+eY0mnDCNf~C9(4SH&tex`8WrRNIG1LCf1WwC2;(Lo<>b|) z_wHKj{4D$55vio8@ua0pdstpMv;c@4+8LkD&j3ylcVRiLf$dZ$w|wYzF`BZ<=emL_ z0C`^I6*aEZA5HZ<^JM`L`LeT;PJ4kvzd$8uAx&}-&88y6+ zmTc+x?A`CCPND`$Ej~d)MKp}Wmda{cq(6V4h$$?aytl!+cSYAAgD`IMN83sY4Xw7W z9U6TWcLc_9bO{wLK&cvZ;u_glf{+EjMB|VcXsP8_^bSv?UU#?KSZHUnhS|b`g%Z0^ zxBOb9GR2hP$A6FVn_Mq z>5?5>`Ym2w)=f|r?@6qseZc7n0Py-B>iyKU^I%Ipn&fj`EPH}z4k6PENAfJB`S^Ez zCRsh-qVd{{nQ45hj;#v#U?k1FC~n+mxuc!SfgDO=gp}~8Q%5r$!b2j&K!wEilVXKdCrL-)n#YSPtWyw(d}FJpzo&@`Xi?ups--+%kjS$}8a-qHy{85bvS7S;GjtK#b*I>ipE?xK(4YAqsCK zb_P}qmk#0Jg@&1tcf)b57&XGn)}j7rs(eRL*4i1pbV`nE40ZL^34Rm5d)dIcD&ytpK!VFBIFiFX#ijn-`Jx6 z1gdI>U(2b9omR2H5`3D)8m;8Qp>M=bHiIG^pO+ijJ*BH)L)ghqO5kQzbb^Zym#AcV zk4N9+`Tmlal{`5UWBc?SnLntry@n}ax8RI9T8u*9k8j2>lM%x+{%R8x@K#>FhHP** zkatla%zO4)=K_22T^SBaLMX%mt@l%3F64Ti&lmAWtOJIey-S8{;-@qIAWIfdx+C&# zzWLek{K18{lAJg>GxVS-c{pl~3bd*$@<#0Nz)`c~ZF$v6bJq`4Q3U1I zlf#Pk*|}|^F||;G5Csn;QH< zyf3`T&P7W{Joe57BJ%l8rdO*+&5U~2ua%t{Xd-VNbOWd<7n7-nuJyux#3}sx!j@zN zDXxIax3_XOGVf6^9)96Hu}^hI|aFbR|H_;_cquQPZ4?@}!i9Sii2J@b_9G`tNRGyN!q2!+uacN+X(+CD@P(yfXw~qU)sFaMN#l45YltlSWlcI; zQgibE3g2I1TWfi=*4#Bu7V%c9fp9WvuKl~ttw2#HKCCfnBuf-f3Tto=>RSrE%SZV7 zO>8M`M_w;$V~>cv8(!8PR2t!lh!mY^MQP1XAA;qRql&6)>+HYtbJv^~41lhWPuPQa zCn{71A{dU3K5|}X5&it&+WK$)`GldiWi%H(1}LVMG=9O`w7^ho$cmSaL2U^|gN*BL z05}9&p0a09O3?u`0AN3lc+_}T9;$h{jMm)$q2OVBW!0cf1 zE(hsGQBxH9f`&3pTQ=j>sN-Jy@%e?^)9s%Q0PE83?RWcG9eO?440w$i4y7;DuGQY* zR2|;vGc*N%(Tck;w8JRwlg=9bx{(ya@e9-QFYpcL>w%nhKnw*b7yy5l#u5ky#lczV(eFz7i32yh6}0jzrkXYqG+ z@$XS3s#H-MYP|q^2^(%d}!@rE%g`sLQ)tJ=i7JJ-W+?kv)=brnG49f3kWG-*PPFYG zq}40fwfBIk@~=QqLYQR3V^r(!w8YlmS(YyQe{b%h6951J diff --git a/package.json b/package.json index 9a76d01..b411071 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "prettier": "3.3.3", "tsup": "^8.3.0", "typescript": "^5.7.2", - "typescript-eslint": "^8.8.0" + "typescript-eslint": "^8.18.0" }, "dependencies": { "@upstash/qstash": "^2.7.19" From b506bab58b2c4b26c5c90a2dc77762a7d436ef97 Mon Sep 17 00:00:00 2001 From: CahidArda Date: Thu, 19 Dec 2024 19:19:11 +0300 Subject: [PATCH 4/5] fix: add context.api.provider.call apis --- src/context/api/anthropic.ts | 53 ++++++++++++++++ src/context/api/base.ts | 49 +++++++++++++++ src/context/api/index.ts | 24 ++++++++ src/context/api/openai.ts | 113 +++++++++++++++++++++++++++++++++++ src/context/api/resend.ts | 52 ++++++++++++++++ src/context/context.test.ts | 33 ++++------ src/context/context.ts | 49 ++++++--------- 7 files changed, 322 insertions(+), 51 deletions(-) create mode 100644 src/context/api/anthropic.ts create mode 100644 src/context/api/base.ts create mode 100644 src/context/api/index.ts create mode 100644 src/context/api/openai.ts create mode 100644 src/context/api/resend.ts diff --git a/src/context/api/anthropic.ts b/src/context/api/anthropic.ts new file mode 100644 index 0000000..5bb723d --- /dev/null +++ b/src/context/api/anthropic.ts @@ -0,0 +1,53 @@ +import { anthropic } from "@upstash/qstash"; +import { ApiCallSettings, BaseWorkflowApi } from "./base"; +import { CallResponse } from "../../types"; + +type CreateChatCompletion = { + model: string; + messages: { role: "user" | "assistant"; content: unknown }[]; + max_tokens: number; + metadata?: object; + stop_sequences?: string[]; + /** + * streaming is not possible Upstash Workflow. + */ + stream?: false; + system?: string; + temparature?: number; + top_k?: number; + top_p?: number; +}; + +type ChatCompletion = { + id: string; + type: "message"; + role: "assistant"; + content: { type: "text"; text: string }[]; + model: string; + stop_reasong: string; + stop_sequence: string[]; + usage: unknown; +}; + +export class AnthropicAPI extends BaseWorkflowApi { + public async call( + stepName: string, + settings: ApiCallSettings< + TBody, + { + token: string; + operation: "messages.create"; + } + > + ): Promise> { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { token, operation, ...parameters } = settings; + return await this.callApi(stepName, { + api: { + name: "llm", + provider: anthropic({ token }), + }, + ...parameters, + }); + } +} diff --git a/src/context/api/base.ts b/src/context/api/base.ts new file mode 100644 index 0000000..0c158cb --- /dev/null +++ b/src/context/api/base.ts @@ -0,0 +1,49 @@ +import { CallResponse } from "../../types"; +import { CallSettings, WorkflowContext } from "../context"; +import { getProviderInfo } from "../provider"; + +export type ApiCallSettings = Omit< + CallSettings, + "url" +> & + TFields; + +export abstract class BaseWorkflowApi { + protected context: WorkflowContext; + + constructor({ context }: { context: WorkflowContext }) { + this.context = context; + } + + /** + * context.call which uses a QStash API + * + * @param stepName + * @param settings + * @returns + */ + protected async callApi( + stepName: string, + settings: ApiCallSettings< + TBody, + { + api: Parameters[0]; + } + > + ): Promise> { + const { url, appendHeaders, method } = getProviderInfo(settings.api); + const { method: userMethod, body, headers = {}, retries = 0, timeout } = settings; + + return await this.context.call(stepName, { + url, + method: userMethod ?? method, + body, + headers: { + ...appendHeaders, + ...headers, + }, + retries, + timeout, + }); + } +} diff --git a/src/context/api/index.ts b/src/context/api/index.ts new file mode 100644 index 0000000..44dcaf5 --- /dev/null +++ b/src/context/api/index.ts @@ -0,0 +1,24 @@ +import { AnthropicAPI } from "./anthropic"; +import { BaseWorkflowApi } from "./base"; +import { OpenAIAPI } from "./openai"; +import { ResendAPI } from "./resend"; + +export class WorkflowApi extends BaseWorkflowApi { + public get openai() { + return new OpenAIAPI({ + context: this.context, + }); + } + + public get resend() { + return new ResendAPI({ + context: this.context, + }); + } + + public get anthropic() { + return new AnthropicAPI({ + context: this.context, + }); + } +} diff --git a/src/context/api/openai.ts b/src/context/api/openai.ts new file mode 100644 index 0000000..ae20cc5 --- /dev/null +++ b/src/context/api/openai.ts @@ -0,0 +1,113 @@ +import { openai } from "@upstash/qstash"; +import { ApiCallSettings, BaseWorkflowApi } from "./base"; +import { CallResponse } from "../../types"; + +type Messages = + | { + content: string; + role: "developer" | "system"; + name?: string; + } + | { + content: unknown; + role: "user"; + name?: string; + } + | { + content: unknown; + refusal?: string; + role: "assistant"; + name?: string; + audio?: unknown; + tool_calls?: unknown; + } + | { + role: "tool"; + content: string | unknown; + tool_call_id: string; + } + | { + role: "function"; + content: string | undefined; + name: string; + }; + +type CreateChatCompletion = { + messages: Messages[]; + model: string; + store?: boolean; + reasoning_effort?: string; + metadata?: unknown; + frequency_penalty?: number; + logit_bias?: Record; + logprobs?: boolean; + top_logprobs?: number; + max_completion_tokens?: number; + n?: number; + modalities?: string[]; + prediction?: unknown; + audio?: unknown; + presence_penalty?: number; + response_format?: unknown; + seed?: number; + service_tier?: string; + stop?: string | string[]; + /** + * streaming is not supported in Upstash Workflow. + */ + stream?: false; + temperature?: number; + top_p?: number; + tools?: unknown; + tool_choice?: string; + parallel_tool_calls?: boolean; + user?: string; +}; + +type ChatCompletion = { + id: string; + choices: ChatCompletionChoice[]; + created: number; + model: string; + object: "chat.completion"; + service_tier?: "scale" | "default" | null; + system_fingerprint?: string; + usage?: unknown; +}; + +type ChatCompletionChoice = { + finish_reason: "stop" | "length" | "tool_calls" | "content_filter" | "function_call"; + index: number; + logprobs: unknown; + message: { + content: string | null; + refusal: string | null; + role: "assistant"; + audio?: unknown; + tool_calls?: unknown; + }; +}; + +export class OpenAIAPI extends BaseWorkflowApi { + public async call( + stepName: string, + settings: ApiCallSettings< + TBody, + { + token: string; + organization?: string; + operation: "chat.completions.create"; + } + > + ): Promise> { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { token, organization, operation, ...parameters } = settings; + return await this.callApi(stepName, { + api: { + name: "llm", + provider: openai({ token, organization }), + }, + ...parameters, + }); + } +} diff --git a/src/context/api/resend.ts b/src/context/api/resend.ts new file mode 100644 index 0000000..db5d8b5 --- /dev/null +++ b/src/context/api/resend.ts @@ -0,0 +1,52 @@ +import { resend } from "@upstash/qstash"; +import { ApiCallSettings, BaseWorkflowApi } from "./base"; +import { CallResponse } from "../../types"; + +type SendEmail = { + from: string; + to: string; + subject: string; + bcc?: string | string[]; + cc?: string | string[]; + scheduled_at?: string; + reply_to?: string | string[]; + html?: string; + text?: string; + headers: unknown; + attachments: unknown; + tags: { name: string; value: string }[]; +}; +type SendEmailResponse = { + id: string; +}; + +type SendBatchEmail = SendEmail[]; +type SendBatchEmailResponse = { + data: SendEmailResponse[]; +}; + +export class ResendAPI extends BaseWorkflowApi { + public async call< + TBatch extends boolean = false, + TBody = TBatch extends true ? SendBatchEmail : SendEmail, + TResponse = TBatch extends true ? SendBatchEmailResponse : SendEmailResponse, + >( + stepName: string, + settings: ApiCallSettings< + TBody, + { + token: string; + batch?: TBatch; + } + > + ): Promise> { + const { token, batch = false, ...parameters } = settings; + return await this.callApi(stepName, { + api: { + name: "email", + provider: resend({ token, batch }), + }, + ...parameters, + }); + } +} diff --git a/src/context/context.test.ts b/src/context/context.test.ts index 2874835..42fad44 100644 --- a/src/context/context.test.ts +++ b/src/context/context.test.ts @@ -11,9 +11,7 @@ import { WORKFLOW_PROTOCOL_VERSION_HEADER, WORKFLOW_URL_HEADER, } from "../constants"; -import { upstash, openai } from "@upstash/qstash"; -import { anthropic } from "@upstash/qstash"; -import { resend } from "@upstash/qstash"; +import { upstash } from "@upstash/qstash"; describe("context tests", () => { const token = nanoid(); @@ -445,7 +443,8 @@ describe("context tests", () => { await mockQStashServer({ execute: () => { const throws = () => - context.callApi("call step", { + // @ts-expect-error checking private method + context.api.callApi("call step", { api: { name: "llm", }, @@ -474,7 +473,8 @@ describe("context tests", () => { await mockQStashServer({ execute: () => { const throws = () => - context.callApi("call step", { + // @ts-expect-error checking private method + context.api.callApi("call step", { api: { name: "llm", provider: upstash(), @@ -507,12 +507,10 @@ describe("context tests", () => { await mockQStashServer({ execute: () => { const throws = () => - context.callApi(stepName, { + context.api.openai.call(stepName, { + token: openAIToken, + operation: "chat.completions.create", timeout, - api: { - name: "llm", - provider: openai({ token: openAIToken }), - }, body: { model: "gpt-4o", messages: [ @@ -590,12 +588,9 @@ describe("context tests", () => { await mockQStashServer({ execute: () => { const throws = () => - context.callApi(stepName, { + context.api.resend.call(stepName, { timeout, - api: { - name: "email", - provider: resend({ token: resendToken }), - }, + token: resendToken, body: { from: "Acme ", to: ["delivered@resend.dev"], @@ -677,11 +672,9 @@ describe("context tests", () => { await mockQStashServer({ execute: () => { const throws = () => - context.callApi(stepName, { - api: { - name: "llm", - provider: anthropic({ token: anthropicToken }), - }, + context.api.anthropic.call(stepName, { + token: anthropicToken, + operation: "messages.create", method, headers: { [header]: headerValue, diff --git a/src/context/context.ts b/src/context/context.ts index b1cadef..8f89ac9 100644 --- a/src/context/context.ts +++ b/src/context/context.ts @@ -21,7 +21,16 @@ import type { WorkflowLogger } from "../logger"; import { DEFAULT_RETRIES } from "../constants"; import { WorkflowAbort } from "../error"; import type { Duration } from "../types"; -import { getProviderInfo } from "./provider"; +import { WorkflowApi } from "./api"; + +export type CallSettings = { + url: string; + method?: HTTPMethods; + body?: TBody; + headers?: Record; + retries?: number; + timeout?: Duration | number; +}; /** * Upstash Workflow context @@ -295,16 +304,9 @@ export class WorkflowContext { * header: Record * } */ - public async call( + public async call( stepName: string, - settings: { - url: string; - method?: HTTPMethods; - body?: unknown; - headers?: Record; - retries?: number; - timeout?: Duration | number; - } + settings: CallSettings ): Promise> { const { url, method = "GET", body, headers = {}, retries = 0, timeout } = settings; @@ -352,27 +354,6 @@ export class WorkflowContext { } } - public async callApi( - stepName: string, - settings: { - api: Parameters[0]; - } & Omit[1], "url"> - ): Promise> { - const { url, appendHeaders, method } = getProviderInfo(settings.api); - const { method: userMethod, body, headers = {}, retries = 0, timeout } = settings; - return await this.call(stepName, { - url, - method: userMethod ?? method, - body, - headers: { - ...appendHeaders, - ...headers, - }, - retries, - timeout, - }); - } - /** * Pauses workflow execution until a specific event occurs or a timeout is reached. * @@ -486,4 +467,10 @@ export class WorkflowContext { protected async addStep(step: BaseLazyStep) { return await this.executor.addStep(step); } + + public get api() { + return new WorkflowApi({ + context: this, + }); + } } From 1e2c2020a09db45fe5d928a3da556e3e771154e0 Mon Sep 17 00:00:00 2001 From: CahidArda Date: Fri, 20 Dec 2024 13:08:40 +0300 Subject: [PATCH 5/5] fix: bump qstash and review --- bun.lockb | Bin 427780 -> 427780 bytes package.json | 2 +- src/context/api/anthropic.ts | 6 +++--- src/context/api/base.ts | 6 +++--- src/context/api/openai.ts | 6 +++--- src/context/api/resend.ts | 6 +++--- src/context/context.test.ts | 3 ++- src/context/context.ts | 11 +---------- src/index.ts | 1 - src/types.ts | 9 +++++++++ 10 files changed, 25 insertions(+), 25 deletions(-) diff --git a/bun.lockb b/bun.lockb index a5b35bc07b8eed74b6c373076f3ca2f6dc80c844..69095210b7e30193c525fbe2bee3781fbcb461ef 100755 GIT binary patch delta 283 zcmV+$0p$LKjv9oH8jvm^qen}_BLX0C(6{8@UuU<&U|XmeP3kSUAhv@5Q}H`7kxohw zYHxF800000`2YX_2><|qv8b3K5NX54JflykGB9k7uq3*g>$6ZI*dYNFlhH#blMqA* zlUPJVliWl+33vej06G8wfCQ6aL^p#NMYkA50kuy+eb{+*{sFk05>gfK-*`U}sQZ9# zpSycOp?roDm|){E8DH1%QIF@j%`Og7)`y-8>!M#V(GpbX$Z8_m)yNCgmkpHxaF^AU z0ZW(2l>rTxeU$-Ahai>#hai>$w;+}SY0?J*Y+-a|b99%gXapRWl4t}Px5j7$ozMa@ hFqdUH1#XuOIt4J7(>Vn?mOcdphe0|8w?R4v!%Wg9Z_5Ax delta 280 zcmV+z0q6dNjv9oH8jvm^(<|qYHxF800000v8b3K5HM_wuq3*g>uJNrJflykGP6)3*ddc-iYSv1LrTxeU$-Ahai>#hai>$w;+}SY0?M*UNSB>E-^Wmt7rrpmy&1%8n?!11f9?VF*%oI eIR$Q)13Cpdm(w`~FqS?A1cyO71-C&u2E$BoE^k-> diff --git a/package.json b/package.json index b411071..8b59440 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "typescript-eslint": "^8.18.0" }, "dependencies": { - "@upstash/qstash": "^2.7.19" + "@upstash/qstash": "^2.7.20" }, "directories": { "example": "examples" diff --git a/src/context/api/anthropic.ts b/src/context/api/anthropic.ts index 5bb723d..b410ee8 100644 --- a/src/context/api/anthropic.ts +++ b/src/context/api/anthropic.ts @@ -30,7 +30,7 @@ type ChatCompletion = { }; export class AnthropicAPI extends BaseWorkflowApi { - public async call( + public async call( stepName: string, settings: ApiCallSettings< TBody, @@ -39,10 +39,10 @@ export class AnthropicAPI extends BaseWorkflowApi { operation: "messages.create"; } > - ): Promise> { + ): Promise> { // eslint-disable-next-line @typescript-eslint/no-unused-vars const { token, operation, ...parameters } = settings; - return await this.callApi(stepName, { + return await this.callApi(stepName, { api: { name: "llm", provider: anthropic({ token }), diff --git a/src/context/api/base.ts b/src/context/api/base.ts index 0c158cb..c3926cb 100644 --- a/src/context/api/base.ts +++ b/src/context/api/base.ts @@ -1,5 +1,5 @@ -import { CallResponse } from "../../types"; -import { CallSettings, WorkflowContext } from "../context"; +import { CallResponse, CallSettings } from "../../types"; +import { WorkflowContext } from "../context"; import { getProviderInfo } from "../provider"; export type ApiCallSettings = Omit< @@ -34,7 +34,7 @@ export abstract class BaseWorkflowApi { const { url, appendHeaders, method } = getProviderInfo(settings.api); const { method: userMethod, body, headers = {}, retries = 0, timeout } = settings; - return await this.context.call(stepName, { + return await this.context.call(stepName, { url, method: userMethod ?? method, body, diff --git a/src/context/api/openai.ts b/src/context/api/openai.ts index ae20cc5..f374740 100644 --- a/src/context/api/openai.ts +++ b/src/context/api/openai.ts @@ -89,7 +89,7 @@ type ChatCompletionChoice = { }; export class OpenAIAPI extends BaseWorkflowApi { - public async call( + public async call( stepName: string, settings: ApiCallSettings< TBody, @@ -99,10 +99,10 @@ export class OpenAIAPI extends BaseWorkflowApi { operation: "chat.completions.create"; } > - ): Promise> { + ): Promise> { // eslint-disable-next-line @typescript-eslint/no-unused-vars const { token, organization, operation, ...parameters } = settings; - return await this.callApi(stepName, { + return await this.callApi(stepName, { api: { name: "llm", provider: openai({ token, organization }), diff --git a/src/context/api/resend.ts b/src/context/api/resend.ts index db5d8b5..6e52701 100644 --- a/src/context/api/resend.ts +++ b/src/context/api/resend.ts @@ -28,8 +28,8 @@ type SendBatchEmailResponse = { export class ResendAPI extends BaseWorkflowApi { public async call< TBatch extends boolean = false, + TResult = TBatch extends true ? SendBatchEmailResponse : SendEmailResponse, TBody = TBatch extends true ? SendBatchEmail : SendEmail, - TResponse = TBatch extends true ? SendBatchEmailResponse : SendEmailResponse, >( stepName: string, settings: ApiCallSettings< @@ -39,9 +39,9 @@ export class ResendAPI extends BaseWorkflowApi { batch?: TBatch; } > - ): Promise> { + ): Promise> { const { token, batch = false, ...parameters } = settings; - return await this.callApi(stepName, { + return await this.callApi(stepName, { api: { name: "email", provider: resend({ token, batch }), diff --git a/src/context/context.test.ts b/src/context/context.test.ts index 42fad44..172978b 100644 --- a/src/context/context.test.ts +++ b/src/context/context.test.ts @@ -428,7 +428,7 @@ describe("context tests", () => { throw new Error("Test error: context.cancel should have thrown abort error."); }); - describe("context.callApi step", () => { + describe("context.api steps", () => { test("should throw if provider isn't provdided", async () => { const context = new WorkflowContext({ qstashClient, @@ -725,6 +725,7 @@ describe("context tests", () => { "upstash-failure-callback-retries": "2", "upstash-feature-set": "WF_NoDelete,InitialBody", "upstash-forward-x-api-key": anthropicToken, + "upstash-forward-anthropic-version": "2023-06-01", "upstash-forward-content-type": "application/json", "upstash-method": method, "upstash-retries": "0", diff --git a/src/context/context.ts b/src/context/context.ts index 8f89ac9..974cc1a 100644 --- a/src/context/context.ts +++ b/src/context/context.ts @@ -1,5 +1,6 @@ import type { CallResponse, + CallSettings, NotifyStepResponse, WaitEventOptions, WaitStepResponse, @@ -16,22 +17,12 @@ import { LazySleepUntilStep, LazyWaitForEventStep, } from "./steps"; -import type { HTTPMethods } from "@upstash/qstash"; import type { WorkflowLogger } from "../logger"; import { DEFAULT_RETRIES } from "../constants"; import { WorkflowAbort } from "../error"; import type { Duration } from "../types"; import { WorkflowApi } from "./api"; -export type CallSettings = { - url: string; - method?: HTTPMethods; - body?: TBody; - headers?: Record; - retries?: number; - timeout?: Duration | number; -}; - /** * Upstash Workflow context * diff --git a/src/index.ts b/src/index.ts index e22f9da..b553654 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,4 +4,3 @@ export * from "./types"; export * from "./logger"; export * from "./client"; export { WorkflowError, WorkflowAbort } from "./error"; -export { resend, openai, anthropic, custom } from "@upstash/qstash"; diff --git a/src/types.ts b/src/types.ts index f8d573b..027f060 100644 --- a/src/types.ts +++ b/src/types.ts @@ -328,3 +328,12 @@ export interface WaitEventOptions { */ timeout?: number | Duration; } + +export type CallSettings = { + url: string; + method?: HTTPMethods; + body?: TBody; + headers?: Record; + retries?: number; + timeout?: Duration | number; +};