From bdea164efdcb8c4fc9622769a166329065f1b55a Mon Sep 17 00:00:00 2001 From: Archmonger <16909269+Archmonger@users.noreply.github.com> Date: Sat, 14 Jun 2025 22:50:44 -0700 Subject: [PATCH 1/9] Sync Preact build config with `reactpy-django` --- .prettierrc | 4 +++ src/js/README.md | 3 -- src/js/packages/@reactpy/app/tsconfig.json | 6 ++-- src/js/packages/@reactpy/client/bun.lockb | Bin 5001 -> 5001 bytes src/js/packages/@reactpy/client/package.json | 2 +- src/js/packages/@reactpy/client/src/client.ts | 2 +- .../@reactpy/client/src/components.tsx | 28 +++++++----------- src/js/packages/@reactpy/client/src/mount.tsx | 7 ++--- src/js/packages/@reactpy/client/src/types.ts | 2 +- src/js/packages/@reactpy/client/src/vdom.tsx | 16 ++++------ .../packages/@reactpy/client/src/websocket.ts | 2 +- src/js/packages/@reactpy/client/tsconfig.json | 6 ++-- src/js/packages/event-to-object/tsconfig.json | 6 ++-- src/js/tsconfig.json | 23 +++++++++----- src/reactpy/executors/utils.py | 4 +-- tests/test_asgi/test_utils.py | 2 +- 16 files changed, 54 insertions(+), 59 deletions(-) create mode 100644 .prettierrc delete mode 100644 src/js/README.md diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000..32ad81f35 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "proseWrap": "never", + "trailingComma": "all" +} diff --git a/src/js/README.md b/src/js/README.md deleted file mode 100644 index e99df49c0..000000000 --- a/src/js/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# ReactPy Client - -An ES6 Javascript client for ReactPy diff --git a/src/js/packages/@reactpy/app/tsconfig.json b/src/js/packages/@reactpy/app/tsconfig.json index fb7013663..e7c43004b 100644 --- a/src/js/packages/@reactpy/app/tsconfig.json +++ b/src/js/packages/@reactpy/app/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "../../../tsconfig.json", "compilerOptions": { + "composite": true, "outDir": "dist", - "rootDir": "src", - "composite": true + "rootDir": "src" }, + "extends": "../../../tsconfig.json", "include": ["src"], "references": [ { diff --git a/src/js/packages/@reactpy/client/bun.lockb b/src/js/packages/@reactpy/client/bun.lockb index 35e6ef1c57158ecb8aeb68e2ee78f2933b6e6d6e..a75db272d8602b09cfe3026e8daa4a82ed4eaaa9 100644 GIT binary patch delta 170 zcmV;b09F5qCy6JJE+C@Aq-P9Xih{yCxJ?4h<-X8CjvzJA<0BP{Gq(u`_Rq0SMgavH z00009lR*I|v%mqZ13yV9#rF3n7jEVxtyjoX4JR>O=I!Z1AQKj<8V@ZuUgLDq?lX$_ zl~h5klV1`avt$q@13VN#NdN!< delta 192 zcmV;x06+hUCy6JJE+AK@b&og|kLoBQYC8v1E2=H;FRZLu5D}hkNXZsTBuueRMgavG z00004lR*I|v%mqZ13!$nSq;CC`iEp3pNyq%{Zp3?4?3p@=knM{he?qV?pIahvb)MT zRn0nkN5%5#ZnE#0A1la~V$oF}xo?jO!n3Re!UhC$a$_!&ZVWQBqztbC12rx*lU5F| u5prWLX>N0LVQg$Jb7gIIWpa}l4<`Zu0JA?20|5gyE;N&05+Ac<5G4bDQb?u% diff --git a/src/js/packages/@reactpy/client/package.json b/src/js/packages/@reactpy/client/package.json index 95e545eb4..73d48a457 100644 --- a/src/js/packages/@reactpy/client/package.json +++ b/src/js/packages/@reactpy/client/package.json @@ -18,7 +18,7 @@ "main": "dist/index.js", "dependencies": { "json-pointer": "^0.6.2", - "preact": "^10.25.4" + "preact": "^10.26.9" }, "devDependencies": { "@types/json-pointer": "^1.0.34", diff --git a/src/js/packages/@reactpy/client/src/client.ts b/src/js/packages/@reactpy/client/src/client.ts index ea4e1aed5..8d9333094 100644 --- a/src/js/packages/@reactpy/client/src/client.ts +++ b/src/js/packages/@reactpy/client/src/client.ts @@ -1,5 +1,5 @@ import logger from "./logger"; -import { +import type { ReactPyClientInterface, ReactPyModule, GenericReactPyClientProps, diff --git a/src/js/packages/@reactpy/client/src/components.tsx b/src/js/packages/@reactpy/client/src/components.tsx index 42f303198..df6d0014f 100644 --- a/src/js/packages/@reactpy/client/src/components.tsx +++ b/src/js/packages/@reactpy/client/src/components.tsx @@ -1,16 +1,8 @@ import { set as setJsonPointer } from "json-pointer"; -import React, { - ChangeEvent, - createContext, - createElement, - Fragment, - MutableRefObject, - useContext, - useEffect, - useRef, - useState, -} from "preact/compat"; -import { +import type { ChangeEvent, MutableRefObject } from "preact/compat"; +import { createContext, createElement, Fragment } from "preact"; +import { useContext, useEffect, useRef, useState } from "preact/hooks"; +import type { ImportSourceBinding, ReactPyComponent, ReactPyVdom, @@ -67,7 +59,7 @@ export function Element({ model }: { model: ReactPyVdom }): JSX.Element | null { } function StandardElement({ model }: { model: ReactPyVdom }) { - const client = React.useContext(ClientContext); + const client = useContext(ClientContext); // Use createElement here to avoid warning about variable numbers of children not // having keys. Warning about this must now be the responsibility of the client // providing the models instead of the client rendering them. @@ -83,10 +75,10 @@ function StandardElement({ model }: { model: ReactPyVdom }) { function UserInputElement({ model }: { model: ReactPyVdom }): JSX.Element { const client = useContext(ClientContext); const props = createAttributes(model, client); - const [value, setValue] = React.useState(props.value); + const [value, setValue] = useState(props.value); // honor changes to value from the client via props - React.useEffect(() => setValue(props.value), [props.value]); + useEffect(() => setValue(props.value), [props.value]); const givenOnChange = props.onChange; if (typeof givenOnChange === "function") { @@ -116,7 +108,7 @@ function UserInputElement({ model }: { model: ReactPyVdom }): JSX.Element { function ScriptElement({ model }: { model: ReactPyVdom }) { const ref = useRef(null); - React.useEffect(() => { + useEffect(() => { // Don't run if the parent element is missing if (!ref.current) { return; @@ -181,10 +173,10 @@ function useImportSource(model: ReactPyVdom): MutableRefObject { const vdomImportSource = model.importSource; const vdomImportSourceJsonString = JSON.stringify(vdomImportSource); const mountPoint = useRef(null); - const client = React.useContext(ClientContext); + const client = useContext(ClientContext); const [binding, setBinding] = useState(null); - React.useEffect(() => { + useEffect(() => { let unmounted = false; if (vdomImportSource) { diff --git a/src/js/packages/@reactpy/client/src/mount.tsx b/src/js/packages/@reactpy/client/src/mount.tsx index 55ba4245e..281f8291e 100644 --- a/src/js/packages/@reactpy/client/src/mount.tsx +++ b/src/js/packages/@reactpy/client/src/mount.tsx @@ -1,7 +1,7 @@ -import { default as React, default as ReactDOM } from "preact/compat"; +import { render } from "preact"; import { ReactPyClient } from "./client"; import { Layout } from "./components"; -import { MountProps } from "./types"; +import type { MountProps } from "./types"; export function mountReactPy(props: MountProps) { // WebSocket route for component rendering @@ -36,6 +36,5 @@ export function mountReactPy(props: MountProps) { }); // Start rendering the component - // eslint-disable-next-line react/no-deprecated - ReactDOM.render(, props.mountElement); + render(, props.mountElement); } diff --git a/src/js/packages/@reactpy/client/src/types.ts b/src/js/packages/@reactpy/client/src/types.ts index 148a3486c..49232e532 100644 --- a/src/js/packages/@reactpy/client/src/types.ts +++ b/src/js/packages/@reactpy/client/src/types.ts @@ -1,4 +1,4 @@ -import { ComponentType } from "react"; +import type { ComponentType } from "preact"; // #### CONNECTION TYPES #### diff --git a/src/js/packages/@reactpy/client/src/vdom.tsx b/src/js/packages/@reactpy/client/src/vdom.tsx index 4bd882ff4..f54111de7 100644 --- a/src/js/packages/@reactpy/client/src/vdom.tsx +++ b/src/js/packages/@reactpy/client/src/vdom.tsx @@ -1,7 +1,6 @@ -import React from "react"; -import { ReactPyClientInterface } from "./types"; +import type { ReactPyClientInterface } from "./types"; import serializeEvent from "event-to-object"; -import { +import type { ReactPyVdom, ReactPyVdomImportSource, ReactPyVdomEventHandler, @@ -112,7 +111,7 @@ function getComponentFromModule( /* Gets the component with the provided name from the provided module. Built specifically to work on inifinitely deep nested components. - For example, component "My.Nested.Component" is accessed from + For example, component "My.Nested.Component" is accessed from ModuleA like so: ModuleA["My"]["Nested"]["Component"]. */ const componentParts: string[] = componentName.split("."); @@ -206,17 +205,14 @@ function createEventHandler( ): [string, () => void] { const eventHandler = function (...args: any[]) { const data = Array.from(args).map((value) => { - if (!(typeof value === "object" && value.nativeEvent)) { - return value; - } - const event = value as React.SyntheticEvent; + const event = value as Event; if (preventDefault) { event.preventDefault(); } if (stopPropagation) { event.stopPropagation(); } - return serializeEvent(event.nativeEvent); + return serializeEvent(event); }); client.sendMessage({ type: "layout-event", data, target }); }; @@ -228,7 +224,7 @@ function createInlineJavaScript( name: string, inlineJavaScript: string, ): [string, () => void] { - /* Function that will execute the string-like InlineJavaScript + /* Function that will execute the string-like InlineJavaScript via eval in the most appropriate way */ const wrappedExecutable = function (...args: any[]) { function handleExecution(...args: any[]) { diff --git a/src/js/packages/@reactpy/client/src/websocket.ts b/src/js/packages/@reactpy/client/src/websocket.ts index ba3fdc09f..4c72620f0 100644 --- a/src/js/packages/@reactpy/client/src/websocket.ts +++ b/src/js/packages/@reactpy/client/src/websocket.ts @@ -1,4 +1,4 @@ -import { CreateReconnectingWebSocketProps } from "./types"; +import type { CreateReconnectingWebSocketProps } from "./types"; import log from "./logger"; export function createReconnectingWebSocket( diff --git a/src/js/packages/@reactpy/client/tsconfig.json b/src/js/packages/@reactpy/client/tsconfig.json index 032152ae8..b6bb436d0 100644 --- a/src/js/packages/@reactpy/client/tsconfig.json +++ b/src/js/packages/@reactpy/client/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "../../../tsconfig.json", "compilerOptions": { + "composite": true, "outDir": "dist", - "rootDir": "src", - "composite": true + "rootDir": "src" }, + "extends": "../../../tsconfig.json", "include": ["src"], "references": [ { diff --git a/src/js/packages/event-to-object/tsconfig.json b/src/js/packages/event-to-object/tsconfig.json index 9b0e0b6a5..4fec695a9 100644 --- a/src/js/packages/event-to-object/tsconfig.json +++ b/src/js/packages/event-to-object/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../../tsconfig.json", "compilerOptions": { + "composite": true, "outDir": "dist", - "rootDir": "src", - "composite": true + "rootDir": "src" }, + "extends": "../../tsconfig.json", "include": ["src"] } diff --git a/src/js/tsconfig.json b/src/js/tsconfig.json index 9e7fe5f74..aa44c2023 100644 --- a/src/js/tsconfig.json +++ b/src/js/tsconfig.json @@ -1,22 +1,31 @@ { "compilerOptions": { - "allowJs": false, + "allowJs": true, "allowSyntheticDefaultImports": true, "declaration": true, "declarationMap": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "isolatedModules": true, - "jsx": "react", - "lib": ["DOM", "DOM.Iterable", "esnext"], - "module": "esnext", - "moduleResolution": "node", + "jsx": "react-jsx", + "jsxImportSource": "preact", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "module": "Preserve", + "moduleDetection": "force", + "moduleResolution": "bundler", "noEmitOnError": true, "noUnusedLocals": true, + "paths": { + "react": ["./node_modules/preact/compat/"], + "react-dom": ["./node_modules/preact/compat/"], + "react-dom/*": ["./node_modules/preact/compat/*"], + "react/jsx-runtime": ["./node_modules/preact/jsx-runtime"] + }, "resolveJsonModule": true, - "skipLibCheck": false, + "skipLibCheck": true, "sourceMap": true, "strict": true, - "target": "esnext" + "target": "ESNext", + "verbatimModuleSyntax": true } } diff --git a/src/reactpy/executors/utils.py b/src/reactpy/executors/utils.py index e0008df9a..b68d56627 100644 --- a/src/reactpy/executors/utils.py +++ b/src/reactpy/executors/utils.py @@ -43,9 +43,7 @@ def vdom_head_to_html(head: VdomDict) -> str: if isinstance(head, dict) and head.get("tagName") == "head": return reactpy_to_string(head) - raise ValueError( - "Invalid head element! Element must be either `html.head` or a string." - ) + raise ValueError("Head element must be constructed with `html.head`.") def process_settings(settings: ReactPyConfig) -> None: diff --git a/tests/test_asgi/test_utils.py b/tests/test_asgi/test_utils.py index f0ffc5a73..7b65b2d80 100644 --- a/tests/test_asgi/test_utils.py +++ b/tests/test_asgi/test_utils.py @@ -5,7 +5,7 @@ def test_invalid_vdom_head(): - with pytest.raises(ValueError, match="Invalid head element!*"): + with pytest.raises(ValueError): utils.vdom_head_to_html({"tagName": "invalid"}) From 8e92bae3d9fa5335dbc5ed54e396cb1b45a9d85a Mon Sep 17 00:00:00 2001 From: Archmonger <16909269+Archmonger@users.noreply.github.com> Date: Sun, 15 Jun 2025 00:02:18 -0700 Subject: [PATCH 2/9] fix JS tests --- src/js/bun.lockb | Bin 105515 -> 130638 bytes src/js/eslint.config.mjs | 43 ++---------------- src/js/package.json | 18 ++++---- src/js/packages/@reactpy/app/bun.lockb | Bin 26230 -> 26650 bytes .../packages/@reactpy/app/eslint.config.mjs | 42 ----------------- src/js/packages/@reactpy/app/package.json | 10 ++-- src/js/packages/@reactpy/client/bun.lockb | Bin 5001 -> 3169 bytes src/js/packages/@reactpy/client/package.json | 36 +++++++-------- .../@reactpy/client/src/components.tsx | 2 +- src/js/packages/event-to-object/bun.lockb | Bin 17949 -> 17949 bytes src/js/packages/event-to-object/package.json | 36 +++++++-------- src/js/packages/event-to-object/src/index.ts | 1 + 12 files changed, 57 insertions(+), 131 deletions(-) delete mode 100644 src/js/packages/@reactpy/app/eslint.config.mjs diff --git a/src/js/bun.lockb b/src/js/bun.lockb index ff28eeb7f85e566069e72330dfeb61f50556011a..f7556b64c8daedd21b636883e016728b9bd3323c 100644 GIT binary patch delta 41568 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 YV<<^ZG~Lf^{-SCk3P{!ZcWnOu0WWi|ng9R* diff --git a/src/js/eslint.config.mjs b/src/js/eslint.config.mjs index 7509afebe..12494f73d 100644 --- a/src/js/eslint.config.mjs +++ b/src/js/eslint.config.mjs @@ -1,58 +1,25 @@ -import react from "eslint-plugin-react"; -import typescriptEslint from "@typescript-eslint/eslint-plugin"; +import { default as eslint } from "@eslint/js"; import globals from "globals"; -import tsParser from "@typescript-eslint/parser"; -import path from "node:path"; -import { fileURLToPath } from "node:url"; -import js from "@eslint/js"; -import { FlatCompat } from "@eslint/eslintrc"; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); -const compat = new FlatCompat({ - baseDirectory: __dirname, - recommendedConfig: js.configs.recommended, - allConfig: js.configs.all, -}); +import tseslint from "typescript-eslint"; export default [ - ...compat.extends( - "eslint:recommended", - "plugin:react/recommended", - "plugin:@typescript-eslint/recommended", - ), - { - ignores: ["**/node_modules/", "**/dist/"], - }, + eslint.configs.recommended, + ...tseslint.configs.recommended, + { ignores: ["**/node_modules/", "**/dist/"] }, { - plugins: { - react, - "@typescript-eslint": typescriptEslint, - }, - languageOptions: { globals: { ...globals.browser, ...globals.node, }, - - parser: tsParser, ecmaVersion: "latest", sourceType: "module", }, - - settings: { - react: { - version: "detect", - }, - }, - rules: { "@typescript-eslint/ban-ts-comment": "off", "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-non-null-assertion": "off", "@typescript-eslint/no-empty-function": "off", - "react/prop-types": "off", }, }, ]; diff --git a/src/js/package.json b/src/js/package.json index 26962b2c6..3989e4f4d 100644 --- a/src/js/package.json +++ b/src/js/package.json @@ -1,17 +1,19 @@ { "devDependencies": { - "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "^9.18.0", - "@typescript-eslint/eslint-plugin": "^8.21.0", - "@typescript-eslint/parser": "^8.21.0", + "@eslint/js": "^9.29.0", + "bun-types": "^1.2.16", "eslint": "^9.18.0", - "eslint-plugin-react": "^7.37.4", + "eslint-config-preact": "^1.5.0", "globals": "^15.14.0", - "prettier": "^3.4.2" + "prettier": "^3.4.2", + "typescript-eslint": "^8.34.0" + }, + "eslintConfig": { + "extends": "preact" }, "license": "MIT", "scripts": { - "lint": "prettier --check . && eslint", - "format": "prettier --write . && eslint --fix" + "format": "prettier --write . && eslint --fix", + "lint": "prettier --check . && eslint" } } diff --git a/src/js/packages/@reactpy/app/bun.lockb b/src/js/packages/@reactpy/app/bun.lockb index bd09c30d60ad03ffc5377a84c0cafdda0a5ca59e..5c921795bdedc7f04b09b656a943cde321df8552 100644 GIT binary patch delta 3218 zcmZ8j4Nz3q6@K@@!t%2$%YyKB1w@49cVR*P1bIRPS(Zi6*jG>#5UM2d6Tm2mQH+gE z>KJ8CYNd%)Ow&{&nGrOtH9AH|tBI!CnY65?Q%PbPjoRw8R%2rN-QBm)dS}l6x%a+v z@44rld*|6NF0$>`Ify1);yIyR~U~uOKXjN)P$?z>v&L1LKh!-trZMDbQ?F>2shFkXuz+ zqtZf^CaN?HG#q}9d_44PP$T3qm7W0&gM3J(dsVt!rRzO(Lw`FM100vA)S=Qs&`{`8 zRcco0s?L_Co|S@d7@-8fu0?!2qRq zLca+U0-SQ_t>b78b=G z>D(50k}){^&w#Ich${V1pv#(K7D$qx%;r!Xa0d+n|B_sOvUr}6$-g+@5mw2>E*cv5 z%VSm=^yh9a;Qb_NW$|;7>b1q1qezJ#(5|2&UyUF*sX<$)Sqkn+H#aiD`T2Qu^%LB? z6P)NT2n*aZo&;xibGyLRxVc*s+-$8NRJ(OsCOFpwXTeEVQ*=-f3!wTS*%xA!+gXpB z@^FhMxVOPox~+F6xI$!;TgP4^DMV&RsV+ngh{XMt;~;!!NR!7J$Q2^n_d&<+^`pWy zjpnh#=IRIg{dOFfze!kk^U}{&{O9)LR{-DtyMl4dFU5Q#4f*G>cpB8pd}UxFDO47( z=%_xlSQm%%DB^d3$y$ojrc$UzD>j5sy(X6~h6K=HsLYm-3-}O823hkh@~o7i4TY?j z1`RUXL@wZyB!$V$Np)dzz*c1198WaZ`2xAZWYH&#OvYj+Q=L&}t7#B;m|R9#^En=K zJ~f0E2FySr&%!i;#`Sq@DGi3pY%jUO<$%A#QsTD6`R8eqkkt-Iv{BBai@E?Up zzCI5h;)-yLrcG&N?gPo;XF|i$VVV^c_LzEfSX#qqowYJ+2 z+NnDFD9k_NEq%ladV;n4qUWrlYvtIFf?h5hs%i z(pVDWNOrJPdLTRWY@vm-V{OMn}d!9LF48Cm)KJ}A=B{$?h zCw?@(M{8>7|Lv88DyOn3q_X}-?By>$em`lp=2cgD#^#mFjvlromK&D$;cH9i$wxrzvzF(r}uC<rRP z(i0@vaNUqzusK*6owJS7_N)Wqm^fOTy;(#B^wpr|2)<;?eK@)&w}Xw!`Q5?PnB5%q z&oZ7-s5E%5d;}KJALh=Cc=Wwza1~M&VGDu}8On^Md?7yY7Cl-}bq(PORmXj*0DQ~^ z@Y((92CvNhMnk0#KsJE?JZ%8}9Ou%&JY#V&IJ|bD0FV#J19&~T4mC+A1k46-n+(Xe17UR6 z(wFnBHhg6N-P)@imV2-K{o0iRuY5UFZ$9y*FwU_=_Ddl>b zoRQ!|FMjWvzkSl~ZG%>=HVD_AJv2UP8S|kSM^w(&xFVFz{u_;Kjkx9GmPrS1XLZ)U z=I7;KwV#}{gwfLu$?WaKO8s2x5BfiEoU|9xZikfP?c7GM%!<%{njbc4_x5&+{{3>_ zGs-l>d7FA{Edi$wQHoY#6Z0i`t zJ=(09*6f*rxAQVZBp5cvFFemJ1u*3amxAdy7I0sv`!ciHX-aTrdoGq;q=9OQU8Ai| zY3f5{4{wi7e%rX9=`T%pMV>%5D^gIer>oUbVzizU7s&nJG>K*se<)qXe*7j#xyRBtwdt19ZnpQ3B?QZK>K^-*~+F6qs+Kdu{ zs?q=B{G9V_ZO9|8G(E2DQWtx11$|bN6*Z@;uV;C8TUT$!^3Lv7-WPjBN~>KrdbRcq b9i3ZfazDX?^|5rSHkuCCn@86z`^N9T{Ga>X delta 2957 zcmai0du)@}6~EWmi4C!1lLvOxO_eZ5;?N{9aL{xNA74s1Sz!ANgn zM0ez=XTv>P*>x>r+0dU==x;%@Adf3_RG|@twkxy=G!uSR3M~Z9fNWOiqj`)ignTPW zhe!URD9$PLb%nkPYJuYch5kUH5l}PqT?*Z#(4M}nosn&f&0re_*nQZU*rf|pOz2g1 zZ7?Rse+_*a8%Cf=WN@gzn@vL@R;nHkcF#RT~)j8C+oz*}o zCYpj?oTLt`MyQed&h=Bh{6iA%? zHH;8vc>uCF`*$HP0zC~`=v$3PepoTOWW@i$%%y#&)=w^-pSAa%|9p1rjHZLf+*&uM z0-auSn9&Jy6?N$J`YYIzh(uFbHxr7-Zv6itydS`AI7 zG#aWjjJYvNM-wU4{M!^x6>d@Bzfn9@(&Wyg5`ClY4zBncV7`UeLBmnN@Z+gV#H6u`4ikn;93*ha=qYY7SwY+m83~ph#~6L*K2Wpp@he` zX1SBI+(U593F~^?K$4?b?h|lL39Dm)%0*O;zfEzY#P5*9BpF(8pX+cC^KgFUG-)5d_Gu#BX3d0ypq*wE$6wj1!kB%(K@ETHnb;5ExrCM_Y zKsL8bR=1I!cL%sc=OLYgyREJhgYUzFLvZTMxSdlQ5v*VQ*m5x zMgc{(kHnVvE^1HPZ0K$nZotX)ZW z)@HdBtw<%t0jL*-F4;0O2e4>;nkj20$&K22c&C5~0IG!HLQzP2W&h- zTLQLR^*cM*Y~RpH3u1F#2k2)3Tc!G4-h1Ik!RnVLe=}!Szud7`_S`t~)rHUJEa&Jt zBCB8e!Uq4+1&vk5=j^x0(rn|8sI=K;R~v;$xaf%&zhsx^yb86{(QK_$JBxFvtuL*+ z+53k%2etQDS$6PYLwWQ+bCz~G*=);IdzFi;zsL{hp39oEkJ1ztFisEQrFJ^Te@B*w zEPb!cd7Y*5psiBvjMo2oV7KYczVFZ3)mGz3$&DAE^*fqyFV!x$3;E)s=Yth|nkIra z{xw|)+H%!4Wc010A6mb6sZ7t?J+*MIV2P_!uFV_DfqyVmk(BuX`en$*qcqcEL>Ui>_T$9FWNOO!WI!D?X&pwAk!w z7t{HE&8ba>>4OQkl`iDfyJkAvVogq+tF|OXyHY=1HRdxa(eOkPi_%;+k-pWd`OHl9 zAotDGj~R3%wb}mPLPnBqjcPOW*5SA{_fLB?$_#jbhgwCFGj>Ix$r2Ra9vSTH>2XE6 zd%xQ~Kx1u18oY$lZJwN$!QhRLyiim59^Ywtq;E@(ztK%i8@*Q1^hLS`!u^B3{-GpO f-qknIO$RnUNB`WCOE)|6V&+Z1GR6uzAEf*blax;Jd`^0d0 zqil8v2SV~QFfoZF*e%i4F-O}{N8e)q;7{FOkf85#cZ{{zyjlPfvGCrhyN zPQJ_Wf3pLZIwRKxXxJTLpPa^HC(ZEhKLmgr3-ZVZs5}S9!#+xJ#3gY>y4LaJbsYx7+ai)3}dd9%Wn5@j_s{)IXwK21A@WxJI zXJU*q&@AEQ|pASAwnp delta 1759 zcmb7E4^We382`R+gZ+iE1qFiyLmb)mu`$QSe@IQJpia_}!ixXa!LbG=ps@*YB4&c0 zsHKNqaOg!8Fe*4vH2cRTBo?yj&VzLnM(QER$t7FQyY0iB-PQHnz2Eb_&+mDE@ALlq zP5SSXG?Gt#aH*|`uWP9JBCaou7@j(RCHdVD)sI<-@ zGn(-Fv+Y;?caBQMeqq8rp&6IYy)*xe@9oO3pC8fJ>|go%ndpUbKChB$YMRKz^QdS% z5r2=WgzryOKb|NI1jaaE^njUI&=^g#5=xGl3SH)*4|-9J2{* z;L!om#w@zo{6^i-g+Cf^kIqzlnmBg9aqgR=sVj4)4-CE8%}Uy9Njb2J!_5c~&vg{1 zxBBKB%j#gA^^EU*bnsGh`1D6JB1-1rZ#W}fAy% z-!c-m-xf}s9<8eQ?WBOznOh4b1CfDg*E!P{g_eLLM)kpr!2Tt2F|tAA^_BI=+|6I! zlJ)Q-vWMM>=@WJkzkJAgF+Ar&Z(*g*96Z@pJehH$rTNf{^`CWFTm2-1GkxSM0|Te) zhSqp|`^mgvT-bJ_i;ys7i#_ITjIw$CJvUysDO(Vy!SUNn`cz#(E+8sWO)5dksBw0hkrphP)5pmPth8j&azx-dB`GH( zF^m>9TCf0-lM3|iXxXDBjlkDH6d5g?oms~%UfG9PjxkZB7tkdk{Q)xxs1(k6s*xiX z3*davO5fI~F5?y6wk}u7tcd!VqYX+zT3Qz2&}8?2S$=7WS;1xC3|Jv$$rQ zN1;p^+B`Bc3MD4HCoU&B5;RJ(yr{~Bm*s6Q$lp<1U~u*IhEl!EQ4MA128R733RDkL rWD2zP3aXkH68bP7BrbEy&~B0%RM%s!QvlfYCsUFN=iddfVbNvOifpV z4oX_;AKK*3yeK^dj@d>phG<{AvG@;pvyBya8IuVwGqX4^lL7%av&=D%1Qca$c4cxd hMR;^&a&BR4Q*?4^ZfBEhHYu~1Hg^I6II|Er4GkBtNv;3@ delta 181 zcmV;m080Ozi~*gD0gx^rqzHCI39^@xWJ2ec^BWzm$V%AV@}t6rP`QZxEHep+u}*dc z0SA)-1}n4h1zit7^Me&iGXxy}g+UYY-j)5aHC6nBNP8ajv((GjX}J_{)*Do+UE;E5 zNjv?ySpR`tJ2ExcAad66oZ^T-dh0ZQvyBya83c23V=j{gFEg_|FOLENH?zz!j|35N jV=ifKb97;BY%X(UZFXgHlW#UDvz0b_0s%L(5IGGEAwEsk diff --git a/src/js/packages/event-to-object/package.json b/src/js/packages/event-to-object/package.json index 2f3852120..6d2af6dde 100644 --- a/src/js/packages/event-to-object/package.json +++ b/src/js/packages/event-to-object/package.json @@ -1,34 +1,34 @@ { - "name": "event-to-object", - "version": "0.1.2", - "description": "Converts a JavaScript events to JSON serializable objects.", "author": "Ryan Morshead", - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/reactive-python/reactpy" - }, - "keywords": [ - "event", - "json", - "object", - "convert" - ], - "type": "module", - "main": "dist/index.js", "dependencies": { "json-pointer": "^0.6.2" }, + "description": "Converts a JavaScript events to JSON serializable objects.", "devDependencies": { "happy-dom": "^8.9.0", "lodash": "^4.17.21", "tsm": "^2.3.0", - "typescript": "^5.7.3", + "typescript": "^5.8.3", "uvu": "^0.5.6" }, + "keywords": [ + "event", + "json", + "object", + "convert" + ], + "license": "MIT", + "main": "dist/index.js", + "name": "event-to-object", + "repository": { + "type": "git", + "url": "https://github.com/reactive-python/reactpy" + }, "scripts": { "build": "tsc -b", "checkTypes": "tsc --noEmit", "test": "uvu -r tsm tests" - } + }, + "type": "module", + "version": "0.1.2" } diff --git a/src/js/packages/event-to-object/src/index.ts b/src/js/packages/event-to-object/src/index.ts index 8790add04..3f263af4d 100644 --- a/src/js/packages/event-to-object/src/index.ts +++ b/src/js/packages/event-to-object/src/index.ts @@ -11,6 +11,7 @@ export default function convert( ? P : never; }[keyof e.EventToObjectMap] + | e.EventObject | null { return event.type in eventConverters ? eventConverters[event.type](event) From 1e7d5d21622b37eccf1f690ab1e7f65931511fea Mon Sep 17 00:00:00 2001 From: Archmonger <16909269+Archmonger@users.noreply.github.com> Date: Sun, 15 Jun 2025 00:19:40 -0700 Subject: [PATCH 3/9] remove incompatile plugin --- src/js/bun.lockb | Bin 130638 -> 58956 bytes src/js/package.json | 4 ---- 2 files changed, 4 deletions(-) diff --git a/src/js/bun.lockb b/src/js/bun.lockb index f7556b64c8daedd21b636883e016728b9bd3323c..d668a44031eac5fbd9e34cb983ae613c37d97763 100644 GIT binary patch delta 7976 zcmeHMdw5mVmEZd&mv9IY0ynw2+&q9Jgb)(QiZ;l%#`^dfd==wJ{b1{yZqj=i3c_KWM*J2zH?}0Q58z`h)HVjRmc0 zOsuS~D`R5qN=t$vALdA^fktdOXTe91hZWVOO-;UXw!+u4l052wkQCR8P2A}f=o)dTZ}4H;W=uzn+6KT@ z@~3oZT>}N83UV?({T@SJC{A%_aJFe=IXt8&bP3HC*LodYa(P*4VK^)|LA*u*)FG6F_Oc6O{CNIb)Ha zXF*9G2_b0fZH40)pos@S$#`;~Ha-lVV)R^y;q3Cp#Fo;UYF64%Szp@F=<9%-^m{@L z+6_t@EOZ*q)4`QiH?kdAhYX1dV+>Q;Hi37sV%FA(4q0a1u2)@*xxtTso8h3(fyY{H zRKXw_Rc46-O4&61@(c4;0=IowtYuu@4tK)Wf5M*QxVmq6MFCiY}*a_v^#hG_k*Ug7Ajv+B$Fz zO1sf9xODAP;-T6{@Gy@Si%KvKoL%sd9{U5} zvc!$JOl=qS46TtK?HsraON+;f-XXeHfv}MV6Ws05o&)ziaD8bV?F(=d!1)W9qop89 zw1=N)cX{B1H(b|#3K`AzBMp8^bU_w}{3bn{=nnJnMZz1Q^QS~h1cHH)bd2;9?GYaC z6ul9;-G}2JFV?s+`Rk%3QrE74p9CFP5b4pfkZR+>`O^&hDsZ!uUx(1cF++~9YS+Mx z28SKPJ=zFd2(l?aw1;@KMsRchHs#T8!A$|@r?|c-MidWlE|0bV9IXk>`!Z4H3QI0d!Dsau74{oxW@fdoA#_BkR zkAyc?=Lw=ER@Z!}Ns}>x^thGXsEjCpjX$3<_Pt_?vwBiG@q(_{C68!v7Q$<(%?=Yf2H zx~1=fn<3W3X7V)Qjo0}jq9tC}-b7Z;R(p~2X`&Y+?+foJU7Lb}SzzoN=CKQKGsQ&Y z!)eir(XmK!y19K+xL1Lra2wvd1daj<4ma|TqBlX;Qo{{>Wux{mI669{=|~Un5?!Np z?IL94C#QR4k4M!=6E~ch+9LGE8oCJLM$wh1+fPC^T}+J62JB7uzYnZqepQU{SA!U^+N?PRb+gX6xQ3S3?tZ`)8 z9jL+IQ@sxK7OUQr7{(T;-oKzXPxUUNcdzP=$HUAV>S>RnXZS%krUxADr-{i)9P zD^=rEGj_ABHDMzz(49sYVpB zWJv&x!9~@G+5lVx#sMUWYTrgl4|}V52!LvLP}C5#I|Pi2i8XP-v<+gS8c{Ab);N=i zolG1s1t2ZNST&*~pKh=Q75i(VlKmi=VM>XTR<_9#rB!kPlIH-$}VRTJ9A8UEbG1E3I5&YTijnUJB3- zW#%|h4On6FL}|R*x~CnbLy@DQYi(78=%fhGXAo^1h0@hO1XH&NQ) zX@K;e0f>JVpqunFfZ8`v+Ghtn+ECj8(8Qep4ZL8|U7*y6a*30Lv6cvl=o!2%uRX1JsDps-FT}oU3rU zD2XnZ(u<(fh;k88=_EthW%>|_l}>feSHVzNZkW^$%hQT>+U72lhWg-xXn?6_QJO>R z5y%#@o*L0;;Ese|PI8smwBg?{qt&|qNa%kgw7SXve-b*M^5}1u(4AXWUQZEEoyxI2 z&cvBhMIvLzJtFUPj!iPL<@6Igxik3>S8et#6f8}&U)(3^9sb&+AmjIDcIU-UE^)g( z6hAvL__i9fe%U8?cK<2bAI~zoFRY+}d+_7Bsj14>Fntt$ltW#LL(Y+%ldd)Kzw1W~ z5B&2Js#>t$NhXhbxVQD@Eu)dR8KC+`aiw-AZxyzckdqD-d-$%}gZLyFmFz)E!q_TP zMn$o&DQhuhR>1^Y&K@#_RR7-vs67nOf;90aKoeF2B%`AKUjVf=0Ll6R9{{w*BLK-* z2YoR1<&#VndwHz(H+RmH|}5 zmjH`_VqgJ44;%LbbAXw^EFd4C2b*jl2e=ow510(#ft5`JsA7A7F#sO>>8qlZ(E}HL zL$JfZA>b|G4dBszy~Y>UI%UhbR_fz zdlvMMz{oB5K%4foI+9_U1hX0N+c!On2l@|w9DTZ=tDeROT2dF2o^1Z0Je1AT_+WV> zo4ed~7zo3&bwK{Z57x(@pJL+~NvUZ`h}t@toWouGCo(68Cqy5FUNH1dg7yR57TY#D zVXd!hAb$sv0gyDxcjiNXlia*ez7d>-buUOHYr9v$+`&;Ot+%`~jb66904STRHH%jJ1I zTPDxrq0*hlBhm|zZ4Mao=rel?Z>%|1h&gbE+_7G|ZGAH4K%Urs86z3k7bDHGCXZM0 z_44REEGp%NJf6z8%N%fWLOvhD_sF^V5bc*6^0_PgG`7HnZ>#O~{yA^?Y`5BCTv7^7 z+9nU?!-1*fu#WS&fiEIX!ZoTzh)pf;VA3tL!R)H}|`xQ!1a2#Yi#?h1(_a1Xgh0U17cqo`o%T$pjF$dLfR5-rBf&fYbKgDjP>2 zXdO02mdxU*ZtKN%QNi2!r2}7j6FZGFf>j}3n1#p|%j;Okc2<+21w7Yny~nPJk1X4< zxooD5rUxm$zn`bLtry#655!EI6d06Yh7ZmSk_Gp} zxAi!sAZ+P6v`IU$_C<zBd_E7i-Ua`9{@APi{`r@W zsfAUZ!h#p)A|%%TDMMFgzu4f&KB!#qCZQNM$QyI9we`BW@PktcgQ9XCQVJ>qR0g@s zJMXss7a0@Ow=8N?=NYA!oRo$flC4OJ^t)$(^@iKA;rQvoBft4qOr1Y8v&$Ix-K zjP-B8#Qge}h_$azFkFIZ%&1yc%`tOaMlRq(##wL6qim-a7o0y|Z#siYW&Np;wZ7ol z-jeFo7@_2an@E+~1-!>R#gIts9Tu*>B-`wtK0dCt;}`vvh3dqkb&?duDuvhNhjLfMXKe=$3ZH_2lqJYo1j#3UF=efKXR`J<(Lh#a?sr`f)U zmeot}HS!I|=tcN&oejsnw&Sg6c^=c!%s*Ay;>x#f->~AqlV5!?{*~Rst$$xO{eA}D z^UjiWIB@ej6>Ha*^04%~uW}7s zShl)wDReux%f>QuAb7p>j{jT@9W^#efInht8pYH!sJaAXgXMe%G)N*q#!Q3G3y6dN6L+ zz~CTHuRxq@pntGyKp5^SD1p(xJ1F-Kgx+vCJCG0kg@R6i{#pS7N|c{tkcT7)>VSu*vj?c>8R!}c+~J%( z9KH4fWB`qT{pR5qC<)r&jt6O|(+LprMZh4!I34#bHw$+Iq&Y!48z77$IKWeKABe#( z*eA@{*TvNk#K8>m)c``i1R-8Jfa^gTN6420WNi5~m_U&C5+H0Z2yNN#07%1ru3}s1 zpM8OnVUFHjIL82YKgWPT*AkEq>kqG8!481S?Pg!;FF5#)px))M?b$X9M0Fr84d%k0O-T|gFGwk(*nW3^j3hdUF`tjc)B?T z2Kj^f0j|M;o^D|{)Gw%gYxq{$i{?`n(1qiQ=1&Sp!*PryU?l%a8pZ(gBSHT1dh>M- z3h?xCEd%*LGAbJ&D2j>~#NmVh%7Z@w09gP6i6}pi54tpJ3}o^GtOW?;{_8rW2KAwS zj>w9?VSq606yWIW3g(YB*f3xm7XZSzKLLd0-mU@eu5y2_(?D165Z3^(0|CD)o_JOFEKc^+JpSlJ)M0K#!HmRxDiH-K9qji{GtZ9JZ^vo;}3K6^70G}!lAgOK|bs! zA_O}f{R)7`TR??RM!gM-7sH00LN9#vY8HW=E`Dk9EeNZ0M17j1_ zp}NwZgK8_|(yO`BA6vGs#LcR)lJD;8=K{jQHL0)kQwTuVE^k6wUTdZOIPDcZZ-B7< z;QlA+>gepDM9^Ue_2GEl2MEhEK|a(0`=Rdv9~{mG36ANf%& zjH?tNoIjTV!tqK22>rh_T}kJIcEa-Toh$9!2ighCD+v8}1R&()f%srO8bW)L23?Li_O{25ds{@c0;6{K@XAHC#_D?%NsFMK@=Enep z{jUR%4WKLm`2j+me$X#)Jw65q+jkGlW4KNNTmyZ*LR@iGwkzwt2q5gQivXdYE1(|4 z05BHPssn`u+mRfj)ZxsvQn-G%Hew2;k3eY zA?)iiARorJ4j}CJRfIH%VYxpAz^a1t4IE{b`vqh##|IHwUEsy4PBp{!3&K$wC1PBi z?wCa#yunzoz!ze0Gl12gHuTQdEfm}Ii#JgT8|fR`By2q+na*F&+<3e3@F`9A65(3< zkwV?uE}yyuTZN2sEsY}jt+^t7M#gK3JKfhp0(Uut{9{ zs%q_r7^g@%uiLXtZ65AV#q6UF47oA9xcKJP^$OmipQ8d_=7ZQWy~Wl$6{S0wtZPVJ z(;suQI8=O)E28$1&+AQJN9k^hy6#s=kN0oydz#O#y>IQkc)5}5VX2nG{_|(k)gQg8 zvf}8TKj~6^@!hBFOraX1w5wkn>-Zn*o?Z9#L~g11kH|Lj6UT7!L!3=dE|)#(DDOO} zXL`u%Uf-?TCF*Q%&Te}^6-hm2$)k2L>D$Y|2R}P@DX(eqJ~5wX@>!=~qh-%-=JC$9 zw?||Q*Y54ou6K5B-7p)F*5^@8XVu$eEM0eLT~j@)lfRIPIt|0t7gj~j^}k$r|J5X& zUcJviBUA!_d`a-lfk{<6vU{&) zsNQ_(5oF6Pe5IR++R1`Bf@49kv za>1$Jo`p)jnBVHsx0qi-6SREmXpRcYN!3(IY08Pd9N=HaOszsswxjQepvvk+{h|2Y zpj*aGRDt)*i?5S0d_wb6#n>;5C#FtWHGb!%MSHJ^(sjH$9aW7m5_xgHb zhrOF+@-(NlvG(KU@$y6VhW->Ir#JhYy-v%NHO|iQ=9N3!m5p^1!_Qwm%ISW#AtGd{ z;ihKh*-%I72OG0{l*~B{T4{}5?J1uTOLR%Ub+4!KP26g+^G124SCx46?7~kO>gPw+GV|0)6(m>x+#zdwi46Gd4Yq%U|}5{&k(os$CY2 zIL5>|;r%GvYGh}#xx?hIZz+y*wX9u~)%7F1Dzmk>niv&4@K$nWt&~NN#ijMWFW9ht z{*up}Lw3q71+7yy{r47hr-a`6te<_*(IupqT3KK3DIgoa+W6oBKe1^|G@fXE_u0wp zDwVjCjQT01zn^(sgwC#?QoPAT0d*5UlmV>Ti2m^iT1(ak0SlzTYP&b{nu4rZL)Al zY&b;I**dUfRkHUpzt^r;yPfG@OXS#9uFgqq5j^(c(hs$rja42QnSOrsYX_7!{ghI! zcO6aGZ6R#LfANu8A4};C%CuLqI*I&rpDry@@|?}iY~u9yuA;#SjKw6@JU>Iz{pGY( z1&x2%nL_Tqm-aD}H&k+2%gsg42sgL}Gw-g~Q%hWP++grI$AyEL$pvO|YIdJPzHPry z^06{LC6ns?)=Ttf?*u2`Rqx=g?b}`U=(2BS^yuaFwL^D9$9Hz={80Ny%f8R!RnFy^}O^Fwexm@p_9#rA}T>!$t)I)>lc}Yx0|?$juKVd^p2BM>DK6 zz9TJ_Zrt%Yg-TF<2Tt)z$R*vxgA~j`RTr~$vT)B$AN|mM`?f*rL0jcXRpa*jTr<;6 z8I3<}Pg+jA)aks~ zs~bZc%1f-I&hm?mYY0ej>l_Ig?IPnnIR9Dlp?$vF=~dUrg@>(2?TiO^kL?uI2>4n2 z?e%byu-+q;wZ;L)mV&G`=Pq=nn$3pc5>gjtq&Q+4GHa{~ z-}YHni^tgA{J^ob3nmV~(6+Ffi3Dpev^TYOX+)-05@5bih4;s>| zpBd*mxZA4d*h7xB&pt&y-#od>xS7qMsUVJ_i$b^mV^p)LxX5Cb*5mJrYR&!$mmUs> ziL{?k5S6{s#x)u||Gjq0VzcW`m%M!;!C^mbc#hq4Z4*~Cxg&Y~C>_629q&mtTgN-q zS%SNczrMcS%7B`z(?2RhLry}1-7jtL?y%|Gskg}JQl8=F3!Dt2yLqF`dc#E}xVO6P z^Uz&5FsM{*X|sy^?m*=+HjZ-}*OIlWvRSmg-6;6TPD6^!!^?f18|~{gC0{GV8W`HA*i;o$46z|!AbYlc;*R#ROvm*BIPQIYkZZTjPK04i|!ArR*rT5_%9iO zxfS3JaBidmC_sW5;;#XLfJeh93c!UL0!}#I6Lv0`?0K|^~eDG>u zx&4q2o}q{`#P0=sG=7i>HHb09X9p8bi{KyfQ2y^UP(2&KR|kC9cW~~ad}8_8fE0l7 zPip*ht5?P!jU5~ZVhqJ;1o*K3U>f=+)&Ft82am#0&?n@gIAHqk4EcWw`0{`c=RJ%a z<^LTQmZ5q}1plz_p`rYh)c^e#)l&qUCR{(zKPiUzF@O)-Pi(u955%u0@KOAz{C9}> ztH7oU?jip;enr5C?MLhPcYaYh@*fWP*zrf@zeB{Y0(`jtgKi+n5T6>nfPwQD^*^ce zR|oJ>`~S)OivWCh|AGGD971vYt}!V7O2CKxht@5r@qYz;9ReS6kq)u`mB5Az+mGTQ zmG4jBL*Jy#VdU=?;KT7l>;HFgqjJQb0(^LW0o_1!+o1;HOMsV{#()pU4dub|-x;bK z2Key)hvG;1#PVMQKKROFdH#dQG@x%5LJN8f?@sj}G zl)xv(FRFw1eSj}V;1j!cu>R>mr)>m$sP|9i|2Dvf>kr&UmW|jsjN*?2e7OElnjrIA zK=pe7UlZ_2>3b-S_}t(nJKX;vAGRM}#2DiH06y%0lt%bF4OH*qU--Y{p>o83N#Mh= zhq0r4RPX;nRF4OIiJ%4IhvSFx{x1$TAJugPeAs`a%sr@s_?du@?*F8WA>zLSd`(RM zlRADf;L97hf1-%E&}*x0fCCk!4sO#vU~!Ptq_ zK>mXPAD$l}_n+_!0UwS()I)0seEh8;|3iQe*FV}nz;q_c5Pt*svPlW>QM*aqf1Chc z1Ms2Kf71Ruz&FSEM{)eF5h(rzz=!t_SRYJflIM>a__7l5ffUK(9|riS{r_bAssUe% z5I<}avCjdh{XYR;k-&#%5MmASw}3B2|IPasFThs^{$bmZCNVLfy3K%ZOyI+@Cw2Tc ztX(-jk}~&Te8|5o;G^{i^GWr88t~N#@&A+kcbdS5@snaGekt%}uqN=2;zsy8EyNE4 zd^rC}nY&OM@oxkE7QhF`2$Br(#{pj-@FDr1tUo;t9L@mnp&o2Isq5zy;6wkg|Ka_I z)c)%Q{9Ob-DRU6DUl07)0Iomy{0Y`E$^ORyAKkyeQI=>!{w+9hxSha1N)tPWQT?lc zZvyzR-(Vi8{Wk~rX#K%<8KYsZ2)|E0w0o4 z{_g}(z3+f81Ni9tNNW3axmVhc+KrG{|0e+-o*#+jAzc)IE8t`IPdJ9e7~)g#tniV4 zG>*U1KztRzhy9QED4$rqKj6duhkRmVhuX+bF5rWo4lVOx9XHh{mG;2)BS z9Ye%V1$=eDhiOvg0OG#@d^rE%-V1I8L>uBW^R1k}ArTzqmirKX{+%Jd5#P%E2d^=g z&%Uq?#2Dfq;afR>qH#m`I}OBt4EXAx{b>I}`NZ-m_*eE{Sf5xfwyp+&kM<2x+aE{Z zqjf_nzaH@a&HZ};@ZtFj`XzSmV%sk#urmLM9XH5@hWdIR;9CIyaNhzSi8jO+75wx4 z`9I;80KVP7@NXf6!|nMO{F{Jp^)L8T!YljVKkYwbz&HCB{x1Q(I^e_cAa?G;K}O>@ z4ES*V!Tkdo#R~lPFXD5H{O9{eVq-vjC%}jP;rvC{Z=Hh*h@TJm@cf3>4ypIw34(v9 z2mO;8zwn0tJpVxrVhqLa4EQj9xPL<5r24-G_*#IE#*I||H^7Je5B-y3D1Ld-KhIxq z3`q6w0r;wf_#qeR{w@|&?>50djGq!*r1t*^;QyQbPep9y`HKqp7WiGzm~s?59JqC8UgqTu0iJMfRV@EsO0hU)JJe7JsL+_3Mj5<>=c z5dS{l>k{~os?^j-R2LvVUUp^whrUrCLY?0k;;RBaeEx#t_D}dhfDfPF(cVo|@W2=H zUjXSYl4us)0*o&$(6#GeCvxPQZOhk2xqzcN_7===xoKX4rqW5|Ch z;KS#qe>(qv0zNwbLjR=BpKajF2X%~p6xZ+Cfa-+OqMeAxdm zP3+zSH4uLR@C^xkq)iMWz7_}`o}W?wlRAD!0bd31|2l7+T!S2?z`{I!j{no>SAF%r z#)SMg0zO>7Fbywa`vCEm0N(-=|6k+yt6!8x{GH%S6S)7v{R_4o<)eE47ovLa0Uxe^ z)PJP<-vSm7Jbyy}Nb~>liOolKzXSemz=!i5#z5-$nJE4F{SVwbNR9sj;A;`$hg=jF z`1rSm>b(Vgxc{O4BX#}yg2itP_)w47*kNGE|9!yUPv}3$M;amETmUVX{-Y*`d%4X@ z>d(K3FA65V`hVg7S@XYtLVORvhx->Ce`4o8R7CvCfDi9qu>XX?MQZ=Cs;#Ua)NZIv zj3NKAfDis#UjH1#5D9ea*!R4)ne;r@sG|Bi>s z5x)uW!4Z0ykMdBRze7~_8{otHC+dHMf5(Moh_4P7AH08{_(|o*0zUFj{yV3ba^$}j z@YVlC{OsEQIscF@#?^oQi0Xv{z9y#qDF45bFqx>{J-`RIkSJIL+fVBH`2zT8{yog?@WhZo9mMwmd`$xXpN!v4z{k!XBHjPte-4o0^B0N-;qP=%J#pQY z^9yP}LSp$LfRE-c^>>Eq3G1z#Us2pB|L?f44AqMSe0cwd ze0Y&M{;hy-M&LtTQstwkk$17_pjge8!AWbp9XyR{EB>&>R$`oJhU);r2jia{^J23u78+DG5n4T z%MpJNM8*~)<3EJp9=Wc{hL&NKj7~r z^dF3u)cKAI=}-m(=r*;+{XxKhPhk?GFZgG=ESV{w{7*hT?Aod^G=2 z8&I9UL&RqQZ)V~B1E&9pe;dF@=Qrq&SPkU=+F$r6|L1@05{Sitdx{qsUkdy)r*V#tl-SaWT z9_1rM^*aII4HG{q{~aQ}3g|p||A1*maFIIxM*&|M2j`9q=I!%>nT7w}$$Ekl-KkVIHae1swid|IjJy zLt+g1_i^~o=Ord456~K<2lG;@=PW;1PPc|B3B8D317d z0AGs`Kjf3z{vR0sP?OjgkbhgJKhOV=OKSfW0zN!Hkm4J-`J??qfRFY+=%3g*4E;e< zbpG@F{!hm5B;X_eP?Oa5j{v?BVf-NIBpvpe8_Q5Fu|nxL_RG;DQDb=7Y1- zvi&!N<+_A&h~(e`XZ2-+2+P6i-(`ac^}*}N<$SQGEE_~v54@&YHi%FMoSByM!L#qO zVG-5`XToKJ2z9|@)^dIDxUp;yVLdSSmk}IemklCZgW$HlY*>W#!R>O{h(YMrVWs+i zAk23H7u0hmltYAjpBEtw5te%s(hwofmym`C%l!yxERut~KtetiAwL*gBH+pf7p!+4 zT+sd-Lj4Qig7q$e3#RkH1?P1kxS;(vgno*bOIHx`O27s4uM_YlKxhzQ`7M|L1`(!9 zVFDOL*e`d%1@rHL3mQZi*8`XU1`+B%gb82}Vf{Lo0QTPyme+#|uGuzl!L|GvTr}Vs z0vDVI@4*G@eE=6Uh|td{xM2Pm0mlhA0TAv7AHfCdeFhgah_L=F0lyIND?n&ig!Sf@ zb5{`REPxC4`%ePmK_!?^2`m2}2=_yJLOn)+3?R)55XL7&;9(KAR}|#Kew84U6N9ko zMnZioLOmHmK13L=96;F5iU6S>WkNYb7?%bi4H4GgPDo=B@^lFK5Mez%LK-6cs1N?Y zdWM92h_Ie9Aq^3xO$q7$hOlTSq26wQus>}G^&!HKdkJZXFn&iu8Y2AY1pYujE`)rD zEFgV=kRJwcGf3Y62>Yc1Aoveg3IF^Bq0Svbc{QONB5dbHt%Nj0IBqWh!ui$-5EgZTKhRGvA>9WvfkA}z2LZzNzXu5GjS_HzP(A|? z`u{}0Spt3q2>!#(!9N6qe!qh>>~B0E(E(%v2>q}DggWf-&udX^5~Ll7uuw$d>{L$4P;Z-V6}xC;^1^RSBp85XP$w5Y~tPezY;JPQKa0EG4J0YZZaKRSXxu)Yf+?FJC?_5+0R`U8Z#V1Te*C?Wq4Kp5{~ zfY2bq@}mTd0SJrY2feT$1cd&} z2x*A0ypoW{BCJ;h@}b{*1gs_CBLX%MumvEj-wF`Uj}Cy00N(?I{V_o(p9Bc|=@USx z`;}0>L@57Gz#jmiA%ve{```un@ZJCoq9C}W!3F)m^BgpYP~v~*I@lX4=Q}t)@H__% zBJ3X{aKZflo$FTm0iNfeL4^GS&vVcq!hZ6D31C=+>j!(DgXJ&{`N7~40oVV|bu0Z> z5BlPN=em`19^C)_cdi4S01Te<;QIRCxo)K&{&%ih>4*QF>;C_KuKUUG6E6J!FKu}* zS<%Hx<7GMRx7RgeI@w$vmwx$WI?(?<3+*%uZGD{L-f^|p zBF#e=sW@GtDtmZ2#CpQkg-4D}MS!8r>E7r1r7Lrr;+uHr23sY)q#Sd* zl;N{C(uHSvWcbChxvE3>cekRac}Myu`gSZark}36oDkmROK)}F&hkd}q>^~X=N?bh zaUn*@o_lX{Z!D@a9f@Ncerjo0>B%UD(S^?s$nbWS>A7t_wXWmIUhJM)-DF-ZeimV~ z7Z}O+&pb7k7-8m4WNT2Hp~*2F)X6k^v!i6Zvna$yh;6CHbDDalz2G257e4bK!`JAN ztCm^knXQw&v#53JWIn^|v(ei=6s_IEPAT@Q_x-r*DV<__{rhcAo@caOe%-O!bMw$8BdBp2HUQUxm9@7^3UNa<+R3#o;?YXr)EF=G^*@34;rVgHGq(nwTFrYCS&BxMyEPo3a@@5{Q~WnB09mHP`DGKR|3JtJ`!xPmHqlCGzF+Tc0W$b|X%*Tlpq zs$q2DvpO>T^CIWMAoH3EIqJt>Z{rW!%9Y)}ep*wDcC_AO^4po2n*m8w9;+CYnZC8X z8c-GAmG>#S%vJrGwp!P&(EtafJbsKW6A}f8r+7WuJa({*?%6t@n3Mdvd$uo14F;Sv zd-o>bZPPW*ryKjz-ux04t+;!jtplHbU{`Y8_0wDPDbs20O^TLSh=0Sz%Z$~1Jhp2; z|I;`54lETGu~v7lcrQf1Zq2CAdvNM>mge?hMq7r1j-R%?o15djd0RCz_=Fpi%aIHa z^wk^q{X=8B3^4J+cYw(7`lZ>pZn_Dhj>Py!Za-Bd-|NdAlH;P`YRwTXF_2@HxOTID zL^#ey>Co*%OvlGokzf9xw^n`X{B?cZbvH6XCv!2ntVk3fUc|MLItlwL}~7i%6(R!7Q)}Vv(EFBF5^{x zc4?i%`7)p1`MJr-Yi{rm|Ax_Bi`BK~ruw)&*PLqY)q-QvQ@t-AY&#qmzUt6zed92m zkD-mvqwfTC2Bz+He0%*{*poxAstom}f7$M@JbGMZ6QB3ujX{hqJ63n5t<6@&FTJ$> zh;seyyMo1Cfo(fF874=T?#W%&t%?kirFM5K{8YmDMK+7?lzMVcl6hoD`L5Dg?~-&U zo5CmOF}fUB-F+se&FM8 zueWdd=5tM0W_4t`^4hQ?gAc1Dz3%?P=&r-+#?KjyeGv3z^%)op{o!_i`5~1|s$l`O zXuj=>C8eSldVOTRElQV;J{%lWnVk za<+7elQk{t-C1V+{EKLt%uc4gt8od`=uqzWsx!PGb*?E~opYe`XZK-^gi6D>=GRmwGO+l#HYQ$ftnM}IjWvy}YhE6{#FR6^!B8(4 z5zc<}NkihM##>b;Q$L+g7i8R2eOsO-FlHDepo4Fss=OtAY(36=&(U6`_0HDa7+vgl zyLj86SG5wux2}75*6V2f+7;1jg?~<)_|Bx3$<4*q>+f8DD*VWvk)wJtmsUM*RbAJl4--2d%i z-jNZB1DwqrS~gnY4RaLSlDMMF1 zLMTR;538HUrkfIUm@#9Hs$;~4b%#yi#mStbYji1}D`{~$%>{IbzM9>g5NWbY?9h#0 zRX5VaEN~AFMY^15IhZAXJ*g=EDn^$dt2*{mE%o@vV6P3=NZrQoo=IlkyH70|!V@>julpnZcly2@2S5e`4rt8r6!_P@|X`Lsn03Th! zHH+3QtK=hwFuL$vE;4+o4R>MK)~({Bb~+ApV>B?m z5#;vik`Moh`^-i@iq6h=m8x$nI!v!p+QLzm75%s`a_&~R$LbBbOdtF;`r3*aOEJ2_ zSY4T?>N@YWwr@=~8s7eKD{Ya7pRTQjHbWo&SE1Bv9(~0(eRcGoKH0?|)AEk|=GyKW zX|hD#Ie)}(>ldC;&E}7Ij4pgb_S!n0f_>{?-m%*A2q7H z7PFT1W^$%(=D5%m<~wthn|ix`vfKC2Q@-8;UrlcU(#5p%khduo$r$6)ITUO5#%2r!J946oL*(85r94aieq(^!z^}w zsy;K@_eP@a9X-Pqz8xLDyeSIY0ZyA=otFAFl;Fa-`iGCt_yk@dSi;K8t10FVPFRrD z1II=kc0}I>ekX?3g#=bt+`UOUHeOi>HOszo@~@5BzmaXbADZodnU)voGuUk7i^QKW8*)axl{ADr23=Zw%GeD zfvYx_CK<)cvI#U6t3G=Ot2D;U z_}!JxwTKhBF*(B4F!8lhtvGOs*B>{bdrt5{`9bY|m)+?YUHCl@GW;Fe6h-H`b6%6p zZb?_4q#mzw`q~}Ho;nzp9_PVpd|WoVL4H^$=hn-~I~^4Ljc!x8K%f0FjjftF`vY%_ z=^nU;(Un1>0P!gi`+GNgI(530^zWnJHeo*(e2vG2tM=2kHDVGwtHQ!=*tLlG895p` zSU4KKzm_l4`91S$z7*YwC8yrrExK;B7+qPc?##@&wOo6jMlKEv?kTRV*FEO*i2d4X znY*s!xta1*IsQCjWyQ8#(akb9xQx5s#&86c@Qar!K z;M|g=;B8sS+!M+-wht6%_{r!~r3+pkqql!+ZGWnTy{g#iI)|w7sgZ`b)!9C*u_cGz zZ_DpG{<5}8YYd~i39E}Q-C}IJ+a_=(-UdGt2< zlIYTPwz5-0DGLU~rE#ENgh0&GA>S{$8N?mZx$$i4JZt&|WM=e1v zht+KPhwhiU#0Fe@^QOf4h`EI^$3oGiUc)>4rX&PE@?PMl)2ia96!bK>Ewo+`ql>=p zgYx)`g}u>xQ~ATq?o57-SV=m{O*H zKKJ>iS7v;0qY8Dp{Df82S&T0H?jISxC?)Fty2#Sr6YJ*_N)J6fSGTj~XVB|QoPH(G z(`SB4)9#(067MDZ{2=O0%^Ugen?`!FPEgj_(u?!$b%|V<_^6A~h2KXa!?TF3G5Mk( zF8?~9$1^I5FH*3q?23=8-cVH2*J*>aYG>im)iZsX%%|Tg6`tOd>-X4jRXeQ|-L@kS z+}XA;FB+;~bkXnCpfy1liRv4){ntId~=_T zZ93Wcpi8gr$Sy>U#6^hBIg9fehjlOP zXpYWJP%J*;KlNH=8=le*w^1DvuhJi?Al{P)I;3dY^UmGf7jd>BE!OC$4cElTIZA03 z{X1En+#PZ?7Z}Cz)e~ioe(^ld<72M5`N*l*bv0?STU`w=Qy$|R#^|Eo?Lm3`8TP}q z_K9h4R=Y*lRhaMhIA|Ytx+_6WaG!Z!+Fj0Fy;OdvoTSOkc@} zNcFLInrKhS@$NA%ckEH#W9yV?c7FYa^KlwaBjyvkXW1o6zTAGABi?3TB9SPv*bjfp zgzj%@Sl#=H2TfJXzItryJiIab?v8Eq>UU?zZ%PlR+h~~`SiMAh&R^V!#TyqXc<#>6 zq*SIo(KXu6W+-Gef&ks`n-l*M3aH@VNd2d)=#$!Dbk;% zpRazuqsEs_wn;)E_6B7UMIiG%Z`uXTCnLi#c&4$cTDdoY5|r5IV-2kCs^h({gXEk~ zdLMkhbCs1y>pWj_^!?XvifUR-rZS0)Z5KEDsrIWDTSa$jRghgN@GKPK+LD3)wrVWr zdqz_5tw2n?npoYyDkElVjniX~4gFl2ue-(GSj*tawdK{eqefiDCc=7LeIw@uuLNDz zS8)nmI+s82ll&uN&CukR?czy(owCWUB^cf9SY2PP0n3<(2WPm34^SAXOsI&i!;fp8 z+S1f6C2DT2Uz>Q$jMb1Xysa^4$9$W>`=ZF~*CP!Yg4T<7_Ncp+&o@V4bhWU$PQ#mB zf@o$QDe_cpk7rb{Kl;J3qfS(ik^j5=Rr;~`0KY~iim+0%nlief`i-~wnJ0K}MCyEc zB_QTWLGAczof1Y@8>{bhRFt3_D-AcJYal z^;v&PQIX?s!!#pQ+!C1;Oz(@4mHG~)dw3#C`F?P2cZst?#+M z@3Kp@(0{p<;yK1aPBVKiO5N<&hPd~7cW7p>>?!LVzbZLd^)^y9^`Nu=YJK;15jpIA zNEfS{&ZD^2AUarYGmcJ{seIE5v3IsAJN$%t-X2~%7?ZYZJ%7+xhd1qs4Xwr{3X>ux z%?1Lxcd95E_b|QF7=P8f8hbz1!|F!uY+PbA&O1_Ry>4g6%sf}^w(t4syd`}s3oeq3 zna0u&zZTbW9lE2*r2hGBZ0jcRBU}0N5B-W1oAmds2}xrn$Mmm0RyX2$;`F_}#W!Xb zC{yIRVvKk6u2MU}2fKTgjCoNB>L;r<;MFVIsk&uz{pdslXJ;%5KlHM1v;6YzkoENwy{}6I;@4}n^l?6?Qs^<{j)*#D z%iDhD6q~7ypF!;5+0Oc%f~zhR_0Bz_q^qwPZ|cYBqTkaj_rv`U95IwN3}&k&6lY>I zKKVZFd9vr@t_ZJC87{K(ijzh%8@md+Z=Vtm?V@K9T#Sz@zUE)@Fjv#W$<|tteJkT8 zjIIeb-YXAUoLnc%*2vvr^8b7`S-Asznlj0*%S~=|f%@nJ8@ENJrm0^QNfycN}shOzTkf4hg!GfL#oBRhSiH+A0$4@Z{J(Fe%oWR=lz$b zS?+H1#Pq{1tZr_BPR(0N&D|e=N;EidbQqLJMLInU-*KlR?NRsaNh#?wJo63KcXNB5 z=fw%}8?v+gT|Kxv-zc8rVd+im_j*PV( zRW~VBRZUlhQ(~gsS37&Abzrzs_EL7(I;QGj{HpavZvyteKJ($N?O|n1yzuw#$nbeO zLr(&}&#l++oZkJ$e#6=$fn3sOSSh%jn7Ncv9L;>QdL^Nr$&sFgn@6vE_cH+xVvzC**LP15|Q}WSHLtwvM z&XK9Ygw1N6q4!4x42uR^E`&9P?Cy9)Z%~rT{_t}v{EaEP&s$)1ZwFRB%rz@{9HI8L zhy7Qk@j1({e%3Y?RjUWO&&yME<*)THog=R+W#y8%^(BwlW2B$y3@-7;nFH6|yz5M_ zy~Xao@b~@5@J(4V4a%P8B4VlGKdhGKlqogKx(Z)4FN!IY=}8pZ{rV9tC#$SARQafb$TXGBUyNkBfqH|eMtNZ(YEgaEz>{BlJ5Ra1>l1+Ri z_ssPB(;v!i10VUWl4IXLfPdclhv6d(+blzOr3wmH7%GhH*B5=x6g^Q`ctnWWxpTT*C!lZ>7v-Pq^QVz!B$kvEI!nEX#uiJ1!c+hsIvHh-vs`B0akDtX{i zlW57KMXglBSL4l}cUVsFO|=~3_!`-FSJju}*jB0iJjs0)4;bbycI?aEmensfadv{7 zHKVPk%l8uY{li|Y?&LnNAHk)WrSH1Qx+IPTUal{8+Qc7}WLcH?xf|!T(fG=VaUSt` zmpyHLR|WL@g!L>^zigA#t)cU{e|wYU3k~df68$?4D34zghgY}}Q~sD*%EPgEgXEP) zui`R_H%$h~sgoRCr_}BC588N$Dr9+?z8~Q3VIr3{+4Yn~LgqsspVT)i#~Nv0Oh4FR z;}yV98lx&}_%WM>%udbH=t z<25$a*@%rv0pRf;Op^; z#Fw7Z>e;$)5AN>yeCA1^{AA{V9sxnI^EKPkx7rI$B%XYAVg8JXnG9?A%{R;@$})>5 z50;Z@V&Zkg>TaD9z=+R_uxLuyVIl{U&r)L)(}hOFm1IKH*m zy@1`PRd(!I`nnbxA<+iwt{c%g9H%z*Jux^+5!z%av9>BWE|Z`7{6mbc^MB~}$N#vm zT%07m_9;8n-SI;Y>#lEmJR_QMizeRUtJdV3%{GU#igKoRKDRlIg(v)|t%<>Vwog!^8o@l!fk}O_6qb{DwLmUkXij z>@~Y}ZhGc3qf(M=`9qDNDlzphdv$}z?oYP)V{~1yy6LZvN1d$Lews;r9k-umoDum+ z&jV&pLadq1SX`57+0>;x49>qYNp4!;X`730=&E*a-=vh``|9w9k+vs{)d!X^x^7tA ziw=i&uXC_&U_3=D`q3TFwK_jn*1K;P{nz{+uXR~m6b%=dGZ$PwzfAi&duD)>zWI#k zVFmt|maet8t=*r6a~oiE-Lbkg*QzM5ea=pOr0Jb3Dn8%n_c8g|jPXO37{-xP=Z;DA z1Xo{ru^>Br-M3Y7o4lycQ-@%s@GJv2m6oP_DH--}Js4dNtgeopiR!uA*DuzpGt4D* zxj*Y4bih&Ie9z2@Q1UEk!J9s59Fmidm+ti8?nVs0+9IZ6B+(XZ-mxL8Xm0BQ zM%NRo`@xQ_F+F0m;&8gMwbA;#f(JNOqf^h1?2!3Uy{c+b(v(ctN_u`q~bxsDT{4zC z8oGj?t@nF*s~q<*+3gV0el++=;DB@^W9A+SgO(bDtzSz`_yk46{SCM|9T%jvrJ~6K zzA+nW(ThaUi?Cthg}=i_hF6$5&yw)vr|{LwwA*LT-R@&Ze$Ex9_2$=RIX~_G)2#j? zH#W*1&YpC$3e_!idSZ8EiT2m0H~F6OQ7Qe}0-9SSF}i+86d?Z6-AoT_!AoUh?2(u0 z1QdVOm?y3}??!c%!>eNRu~Wx_RD2?Y&pUh=3>Z0O%fu4)^Sn%_uF;Zb@}Z{}*8P&T z#qMYRSY5UOKHS=$jSr*F7D;`2%UdQRz%l=g$&*RnND)0%&+ z*=t-9aAUpRy(ucEmoy^D*y_nE&HTFUAhYu%arziSYc&lDYMI_>; z*gY*Mb79jixA#u#hZR*%EanC#Ty{?z%PqbUzGYpT z`e}=5A@)~#gI9f-VqNSXyiA~)ENZ)>b-P^G>>Vav`1^Wf_@ZG`JF}OjPIDU%@7fuz zY)Qj0+{AgFLv-}^uIy*{S2y>vG;dKd6blgwY~&66aYkQm_u2=C#apk3}tOhl9 zo`oP$fcOJ_J+iE6d>5Nznge-llgbY^iV3C1T9((RTwdTW~&qA@fjnXL}B!?(| zKB3eN74_wu8Z=UH){)#CT~E1omuQ2-v)StwERT!dGG3%Kh8V8+KGL>IEd9P z8Lbk_(VH|<#W%%Hjh)oHX0tk4k4jv73O6q*(0Spt@17&fH{S~LikRRcV%rn*EHX_z zLOw7rZ5j5xd4k5g0@Du>SlxI%a$K4H{C&06ZulqrO=LcW4R&62)m?aUYQC;E_35I+ zN!9Bai^2W83VEA;x%6fn3aHyL&T!VJQINe~;b^opMmG|xyXb4~5D+6Mqv*$8aOtva zLC-Mm2V)rhCu6>8zVW5k+=G#em5ldupHdv*i(lXz=jAWG#qqlMa#4KoyQ^AKvF*kzn?!QlcWPUu6>m+?QNx40M>MuDj!%ldS%~kk|Fx;s zyv7w1?-8sn*X1v+hm@aCZ+co2F>SEk{`JPL*K(ttH-622pL-~Iup_dLne%eJ_V5OS zC&3k(&vT@NUY~yOF+wDp>^a3A4vjpF?oq6+ogdYGhV`4q$i}YFJS~yZ+{jiMF`3wT zz=pe{Z;yqcgTfcPir0obKDFGeR|ds2y7#oyWS+PrZL`{hEt+-XHCl}BF|6)nlehF^ z`GBhw2jn)@zI%E}%yNFcMoCZU!HUCDgLhK|nG%wr;Y~o>XTou2qYs zo8ePh^ba%*jA-)5e$N|+)pdGUcrZ9_2Haeyb~1X?VeD7e|S8$QeSO&_30U3F*E^WW*Vr75D1X|aCe7F0zIQvNt?w$WBK8N? znWBPQM}7r8VW2TylW57sxJ9Yihl^TPY#kKh*(Ej%+Wm8D_*UNl|q-t{^2Uy3&gDr$X^Nby?m zl(xpMwtx)<)fJUhZ_ z!Or9$wP>@?UG>bf*BkkTlUt>ZJSs2s6Bcweqx7jOE*sgrS1jc2r&ojpn|++9;7a-LVp zK&DXR+K(^$v}>)nN4mumZnj_3+itO&N(uWOF$Jr8U}LtgANM|)yVYx}sTXX`nfG~= zT%DmiD}JdI*S{p6&*!T0t$sAsSN(IAyJCT6*xOFE9g%xw9>pA}u_+%cq`}0Siq&2J zEb>61Oh=l(<$~yYCv6Gs_dH+3YJ+!!9hi z7G6D0ulG5=JKZH8vlXj`vPkuOl&5ZK3F|GW&(K@>xBDySk~FODHmy;bLv!@qrr}%e z|B`LUOG*1|X7b&fk8$`2GuzgKI@!{t2dPx5BGf!$1zJC>y~wq=c1`?(L>A{$F6ZuZ zh50e$1i&BU8wxmy}lLMSNwcQIH@?5G5&!WF!X>5K!?} zFIfAVe}A&?J?A;kfA>9yd3>E&Q`2u(S65fp1ZKRdo(*;1*R6i+@nF->uef`+u=fKJ zvAmzg-6I_s_dC}aMby$AkZZbcQHYFV0Zp4wu&jjPm76rqS2o#n>0_^#Bw=}l`L^Aib>_dFk?_8> zN2TT1$8^6Z+x&&|OY2?P4;hX8tWG1o<6I;t<2{=|z4KJ9|K_E`B$rABo*0PjWn4>X8T=ja#td91lUCp6k#Mt3Fme+(;&w(zU$L~-{;5wqrYj1uu{~mlVaWUtC z=Kf39ZwFlwA4&|)ysqV_f z?&ik>9C=mPdHx2Lcfa0T*1-ds%|#LEBLfZ3*c6yqRc}m-?EEG>5Op*6!vvV+&Ic zI3_AA{b~5zs^f#JS;_BaT&q(2a-U|YNh{AWDJk!HV)4TGjt~wjcg~H^o?>`Yu)Gp1 z8=m{q4vfvYRYu)@nrq%oF|f|cZhyx<5$&J1KT6y&Iw3dvYGIp-ev=9hd5u#m@qkcH z?fFMDpUs&_oy42CF}%01ysey_mtKtru~!GFdL@ln9i%=Ge3^ERFP}Ly`saDsApzo_ z4AZaJ~u&*;vrC(NpiJCY>PiA9psEU|1tCyZ(T#{-5e4N!S5J- z)3Cg*QDob1pXW?*RPtj@CVCP~*|A-mr`t-w_}A-O>(n1PXc5~#ldmXckFOWci&5W6 zx~u4zNXDB~EvJuHe&|Gf#omWZ$MTYLw3bR<-aMK0iC+7_YpI>LUT-{b;l}gI8aa_P zvL7w{nfmj|qcgqW-<5sPcO}1TbIBsnZ>9u612rO&FhsWx7t=i zxy}J)&-u7>b65HsEsj67X?t8XdI_8F+`;lTkwop+YB=~&D65H1b3tpsnZ^2?j-3l# zd-;P@4L%>mPseK}cr2RTtFudX&r(FZI_xa=o`Ty=_3<}uxx162T^N1uVtH@97jGx4 z$@-*5)_g_aG_C2Cdj}-7c5VpIuTHy?=0h+u5A9lQDV|kY<6@15|ROI@EDD+Ft(!YN;b;9;sdR+i-T}|D+9dp+h z?>?#BwX0$CE>5-Mg&O2NDMFlCUQenw8{asnWYrUk{rk-vEN^MMva_MIo9lrWF8M!y zP9@BVEknEOr4yz*-#6YiCoG;bo?{Tg}D76g|PF`11xWx^(GRRO$%S% z)-l|Av!wgf<%{;1GtEFvOan(5i}S(e>{80sn$q6u3UbQlY-ZUG?>pUiC{;f8jfrMPs`q(LYqvFxF`x%o)wQTm=c+C!#PP6!W z%$O$1XRMR#c&p5pwh+C+qpf1!+t-6XF}x44yc<+w7>q7&4jz~-v$J2)+dTJR%PFNX zy#qH*_Y~iKc2L-IN!^l0pi#B*WC(xi&BH(FrG1*DXs9IKMb!{*tesuJ@aAKAGhgqm zx-+b^TjbQ+s+YU`ZwPOCrQo72*phACHWD_t_pWbj&%-2&>8yNUii zpKc4b-Q!b274c} z0LyF9?ecRw**IVAjgAgp)_E#jKv4(5SE}#8nFQxYG;J< zqfh>tTOTOnyR`kbF0>Kg+{%YBDFTyuaRGifgV~0X4ukd2P;JeX%HriWv zhvkbIJnduc)XCvIY{DY6vC+-^YE9N~vAmqod#mrS7ibHv8`>ARiT&8qWb^B_W7U^O z{ucx=yhT{vYdxyQT{NFO3a9)OTGm&boVnyJD$_c@&1jM7h?tV|?8~&W-;}Kpl*I#f z2Op3u%1#7Kn0B9K<-7OOe*C?QUI~V`7|YwaF<35}&-U9oF*2nulx-a?>Pe#{L?b3y z7V4%teUqvq^yOyqn>*N|IWiAu7@Nxs_wz8-`faHrwx7JqPEz^?!&`#owX(YsT$sP* z*2;E-gYg5|W?%M&>t%H?DN ze3(x#=hR|&pJI92C};QHw6M}Cva(?|38W7whx*QjcfTXp$>MZi+A06*gxBc`fGi{GPj{@O;%4&Q2!rxK?%H zq`j2J1dmew0L5>NzR$6|+R_QuY6329#Scn94OGYP98FMbD7m)ok#E2L^kzMAhcn|6 z4L+38V=TA=KZ`GXmco*UII1swja7+SWINX`F^SANyS75O(GsdA4^HP)5(eo|9e5biy+y?#O8`lu*Ra~)w5Ebr!G*6lNTRD(WVqjsAp z=}MiHk`Gz-TGTmi(bHC3XfoYDd3ZhUwzXygZqJELp|rWbMG}P0){Pml)<=b^u)jd> z-Xq-St;F&+J-(y8`F)t`t335PY)#fdKf8mamAb-iK1ldo#>>*Q{oAhjUh=bjIxNR+ z^bOg<-`2Se=d@?;s=b!Sec!I19XoGUVR;A7zt&lx=2fjc@Je(4k5rfUqsK4riq*H6 z+Q)Tmy>9MF{<^R04C=o{(u*F+%dP4D9Y4x%#Gb35lFue|Nnf@GdmW}4%lo0j%k6NF zljgmkE9>7?TBi3H4F^$;ImTS3u&$ZcbF{kbs#D!}X}97Sx9FMD%eYTPg4g_bD#(t` zQJ4#thy;3K?C=uH+tofO^u4XI-l&C1qy5dVl=c@hUftV8x==FKymqK3L4+^gTWtDjTz@bi7T}C>s#Ek8~O)vcZ z;NE?9=bq0O(@4h?u;chOmUq8sV|dNZ0tNaC4`S`XrY|Z__TS&Vz1nJ5Xdkn@jPJqO z2W_b?Z%fG=KlbM6S2aGKITR8%9PY<<`$1=tt+oXA?>cI+yg55Zzi&HuF)FF>T@9o7 zI=(vI=M!HSpI_&3oB7H9Y5()`_7AV8+1jNG?sA;pF!7{s(b6(4>6Vcaa7WXR_d6Orfms7pB4~o(8-)5p)MT2XJ=EJLVk-r zhm}h^%SG@o^`K|#y;e7sbCuZmTaV>!EpIqR?9ZRYo%C!hBI1rvI#ES;(e%r$r!TZr zT2JOlP@l1{6ZsGt_-xNMNw*uqWmS(!UEB9fs%u)GeM7h)dt?>>M# zB`IbU(Y`gn>-)N+HQjn7L+Lm7JW~&Powt?YT!U8~*JA0l1GXQw)+^WAFlL?bIXBGm z@q37y4#o~|u)GgtQ^=HA$WqhY%g(o#o6grs&=?Z4NA;cdk7GCGrg;;WE~+lKZkxWG!l`B{M&>S&aUxNYa?g&2w^1<; zO%x`kV&chQS0Wsz*krndQKG&YmKgB7N4_ zka=KN)oOqOBxM6U1 zGU0{($4Vlm#gZC>=_t|@?Pay)`<}E`3SAA}r6ia>_2Bq#l9XFJFDe!1N@4VE#`2CI zZKw(zIozT1#a8mAo=1|h)X$0ya+SAeOU?7@{4=QLKHCfr)xNvbSxw6ALUnB^)#NeD zbH!778@{=`miqcc55wDn<@L?+Ywy=IJu^bRLFdlFD8Y+#r4O0I?cDd4n8YS*_%az> zueWDYeL`;AkgET_n!*DTj7+&!MW3s_x!;+4qRsmf!`q7GZJ~cmy2obcqHk7*a!^o6 z@FXqW4iOOpQVEs4XF7VkZYfx(oT{OxJ1jGy-js1hM{SP*$pN$9U+1ZU#uKI`^s)11 z8g8UJ#rVib&~sD zOuq8mjr-eUar)|K1(X%PP1$PgVa~qF`|@7q<%pz|vt=Qa7~T(9-k(w9ozZ|8l61Ui^zv=nS77>+wNR}m*_0A+#Z;D zIMIgTZO8I9F__MBoquj8!^N_nIeph5#}fa{;QjAryu#J$y7PC|zU=g#pJL&^|3LR@ zrkUCHX*E0DfpcH!a75#U-3CgGSU>xSPD&iB%RJV5+W~Uv_aB&|pjWuC;dZ^~eo}}toNlKdbP0v+q zyqwyEo>gLaJFvWWNDlTg1T0nBS@0#yP~P2nR_gO3!}UsAIfxhbq!Ss|pSrQjmw`03 zb@P&>gcb7yQBhaRi>tMoUo_f&jmkW%55@3)#_|p(7zy_>FD@1djc-5G-zVd^xqw)L zQvD^1)Kt>kF7|U?H;edAeP-2cFTdQgH)}ZQdi0~t<0p3xW_ya;W+YnYVt6~Tyg3^s zc$Hk%)h%x9Kjj#wKJUevRWX`CTdzOOlU!LH?IQSq_WeS0qUj~k1(L<@QW^F2DYV`+ z3Jz(<4xe><){KoiU0B|VSzfZ1Xoa$;1~M+$zYW_J6$W>((FK)!IJsZ!@itxaCh6Uo ztygYZcI(fpslA)v=8E1)T2;A!f+i+*a<_as_IdkmEbs3LGbROYK4qr!{yk}#C40v1 zc&W+K&}?e+_B!I$Sb9{n{w8ULRf23=i(7x`t8+n_A)oiv#5JXIDhX!#Yk$VZhaN2N z4cp@_ik-^3>AxgZZ~H1-7oHGKh_t18aF@=ZG2%RjMuUZkLvdW6r-ohg?o;1*;*U8i zo;g4pAE9aF9^3zrqz+@>UM#Os!S`z#Tbp7uNz5GV%B2$Sk`sw4NZjY;=?OVw^5bjH zcWOuOtF9w%UM|G4?>Ifb-aCCaC&ju=Hvf#^aH`uYNPhp3|Mp>d=ZGE-*^g7MQ|Vw8 z*h1PxYdapQ*t}adKb^6{n+AWWhRwh!>`^xm~^3C{NG5QW*d8Oq=1$~NDio^5mb*i1H53odKc4=+>b@5t& z#F^W@Q4=?hTb#ew@U*Yz=h=ND(XdKgMsOb*^>8hNXbOa2HOcfMeG$=-1o)Us)xl67>xbr4JXctZ)2N!Q0t?8KZoB|7#q(*mA-(@m z0nO;t^u!W;^~;9HlG6OBrus;;wtFO*j5_*3%p};qV;#rxj&L1(6SWjCtKxd%Dj!?VXN@?A&4x(v61vy4lA zk$-6|I~F&YuXrjW!m!3eeW&c;`ZCihoMKWlb741!F!nje2`sNjY-_F33xDd4Z+Dc* zbWYoA9q;nZvmQOktm{ZNxj$4F=iX|W5jjZfJn1wSf0pTO?vl2;_8^_5!i;m;z2a_a zj6Y0bd6T|NdZx)}@x~c9DpIZ!Q6VilNzQKA&Aip{8=sK>e%{LaE*dJ5A9)<2IFH#` zG0*kVaul~67Gswo{`Rsm=6Do_cM8iZa&4dW@Ux0Layk^l68;wd+-eZ5Kk4Tb?=*?{0Q`-Wqn+rjmQ!o3r&=B=$M}uUOvLDc+!xv0#ti zwM3_D=psou4}|}=80qb_*=zW;e?3*4_}0U-xnctBh0M37vY4(vYTVLxu0v|mu8_mS z^UD49>KJ{evAnJ1H=4hWe)PPW%~s$1HhrDbiPLx3*<@>T`(&_3&sWq3@kV9L+?-Z6N$3Fnvc zs$yMQ+=R*N?>k=NCSvt|cdE*Gr0?v>{9?MWZ9yPzOF0)V_0pD(ePP(^4>MTa5eY{& z``g(vh74JncR$y@U@R!s%JernxAo3aer~&}Y<|0IZ2vpGmnn0Dk<$g7oCSlOFL&G> z+-SQ+%SCmtDHx;gES5KUmgtLqQPTsfueuGt66Je(2O3&ZW(I4?xx8k0wp5;+4d<;7 zSWnA!{gd}5;-{yEL(ax~Rd3I;A=-Q=xcqTj5{7pU%i9)TqELH0Ge}*#sQ=e1XE!nOW9GK3>@P5bg zYS3_RxJPc9@magoxN`Dk?G|+zCC$Xhpv>(4=+U~z-?+lgn&X0x=Z&#d6F0G6W~UAM z{7OaeTBNnSSBhXuq7{aB9?LuXf#%oC?a80|8q!&}9FVI1*4Iut{>esSTqIZhsd{zx zOv(0>@5FEPZQbvycc$+(bxqQ`ef>o0C1%M7Z-$idUBK`zV0ojf<)+9>DP-RbWs1+p zbH3H7craHSYdiBmWH)Ve%h8V(idlRYE2_>Ou(=VqE`iFnnT#nv>wVF$O->94jPF|C z!tgF)d4sR!)y5ceFxNl$dG`LBuJtF2vdmwVp0hrp`bgb>!BA8>T2knZFL%pE(zHp- zF72Do&MAcP7#!XzNWog~QFrAXhW7`SxB4~Fo{)8XFsvLUn%2-Q*nBQ zfhk)UTedjIKje4cnfs*a1hK!s4*ySX)@?D_37>Y6oKa`VdhqHy@zbX}7gct#M9JMP zyga_)aS$y=-(Of>`EC+@txM9ydItw3i|iFIx2lWWn_>ap6TZ{!(Xx}Rf) z^48brKI>w!#7#Zv7kMRBRMrn9iSan~h+=q`u)KGVZqDDza!w>zKb!Ahuv{dapBC%J z%5za=sicCb3H`D=L^Y&^gSgKe>UkME@jd#tQYBj|b;g^E!z8;r#P&WqiQ)Z?<#kuu z#>iPs8nLywS`3U+rU6^n&jAqmP)GA@7vy{#QMmSyZ$)H zl4?XHte#!`qiDjyV(iXqUF(uv56++9_1%y=b%F2sJ&e9YSYFcG-O9aEjjw-Z#1#hT ziA5}p%`4m5mOAx*cPkWA1=6dy|GJI7f`!` z;YHVi2@6Rw8S9HVg{+YGU7CFBZqYl+Sw7CaQFLT$L6tzOeRNCtub%J`5o5o8yKT1v z1*_7pNRKk*my=r*9oPSo88}C}3B$V%%e%)n=F|Of{VQ?>KMFVb-t>N+%bFKu`i+|> zweJe<(qpdVa6t>7p9YWK+eyhVDm_bYbJ!cWi^L?|+-E*s$T%9Cm!M~M2@A=lM;ZO% zkxS|fY(Gy^9bhpo?%o#3*fD$mpsQFHuL|jxXG}~RPM8+8Ul?$>?k1mo^Mi@MdKCBZ z%O6Br^BA6Q!T#M0DVA5~O$m$E?>5~V7n8j0xPKLGo`^l)FUOY0M{+!?x5RW*@Ai%8 z#f@yodfvJ}o$G%^ye^aE_#%zN83*H-fc-VDf*3oHVR-{eSS+V%YOS6$GArr{#D@FY z6xA-~it`rf;C4umjFd-aOW#xGR{CVNIraO|`FoX)R!6UWz3P${e({2~3WH`UhL;@6 z+e;p7e);USw*kA;!WqpD-rdbq)?=tlttOk(w>dk<=T);bOJKk=qkB~6GK{F|YuvsW zYrG1yzH(#YC8dY*EjsMHNrB~cIB`5Ud(VpzMyrfaQ}(edEC&WnZ2GI-R-7(=;Y9346U7UE?4uBo;Ge9ADoWovMke z7@DaOCh<9S(Z+uB_CO(H5IIoo2PkLT3Ddq-0bq{T(d?n)yEN;nroMOf&w?%atdwwlZ1 zrzdqthc(EQjm^s|q{GXXL{18x+^3D7;Pv59%JGqM`$tFC*T|)K;~AFtEhV^E6mqMxL4i z`rqL}nz7tfu?cTpv`1--$xvBWU1;N9!S3f!*>=SIuj?cU)SsFjR zBPBFryr1m|t-pis*Qy8YX=d1bogT~U7k5iez>g43zQxo2lnY~r4Orf>uTfWAz4ErL z^W1T@cIu3)WoWH#iC-F7k8`%mkL)kHob#_tlNWMYbuYZ-iT9J&`gSmK=Q?ta_9Y|E z8`AUFuz3l(mqA!aGEMSDF7};rJhVVU5i@QV)%Hs~*@VR)XKbM~{Svv&4VupBEcoS+ zN;DF6yE-N7W5ssK^R-XN{S~fwX-4W|acfBZO!VG~l>GOR zZznc9^%x^3pPFnO^^a1~*7g~~@UmigX%lMQS`{sYT&j{YG>5t<>sb%*pAcXxetSf) znW~j5PvVPA_H0+og7z_W#&EhL6%?9WO@r#2hI2_(*A0f-V4o{S&omJhlFC+^dv26f zKE}@@eDrQ)s#VMYI%01=Wgya17q*|Ct4)*1&tp~d|e-%(THS>JFOq-6?kQ#Eq3Y;=YD>Y+7PG zKpaG+;<*s+M4nDF+Cp|2!@C8``(#MR%{ctHjM|U*^=!X0w?Cf~k(gO*_$p+e`%Lig zX|)SgFRU5o$E^BylA4H>*2xXzaP(ce;Mq_)N;Dr#n}_A)!16NKo*OvyMl8TDx9Ld* z>ANGr>>`K16zntEtry9=qf}>S_by}m6U;H6ng?QwheemZzm6z*e>Q&7e!Xk;!=JR8 z*nE-`%S-Z+*e)aS;EYPxq0EekdDac;hiO|DFVtISKRSmy+u_FJ9O*l|gF|TE>Q&tI zvAm+vK5BbN=x0Lf&dYrFlHKrG`cRn=Zgcd3^Zf(STWqN; zKK+W!8|BNpHZoxn^RhJCba*yMs^k_`$dOHNxN$$R_f65YKf*$irlCSbrbqed_TE_M zle;&JQ4CNU&5av#B!({rP`}CCn(JHMYNBNl*>-uMOzT9FcMLDe-3bdx&ee^YfsDz=-B{?PcirA=5>nY&edlR5 zTjXgDyXt-O_8uKeQDc_R`Q8p4THt3euj3c$=rE(-vajfmTXbNv8G91q5o6E12~r-zt8e>U_J2 z%|qe?^@i=5&l71_q6JF?%@39w-I~NNXnRxBO5p2b3@^IoMOa8KrpmV*oHnS68@OK} zM8A%-tAYL4g&-p1F9|irTc~f-R~c#P7x%t@nNO!3$G+Mt z-^cKxb9=%u-zYN3hVpPuCbMm>{&?S-pIM0QKr-b zdnIVrGY+3VeeI&N;H#M?*@X9pUF1;=Bg6+WEU&{g$r&%b{)tF+l2c+jKU3@s!X3AlG4`Ae7SSXLl=-dR9yOYYvRS~o@PSP{|luH-;g-@Y3!aEeo|c}uNX z0w15QH=CZOCDjNLl(=-^RC8r~ABI;N%gd>2uNijj^RvqvdgDpPcHH4SMN}xV{hf-S z7-K??khtp{y*OQ;DT~I)NO}ir>RaMij}sPe+~&f{Z_BBcbnwn$cxAA>T}cTE6Kn_X zON5BT&`U}d-aHiH+;Bvyy)DL*WsP#B?4aIVT9b~b*cTc z`i3+`yDY)a0Wl|362g8``54pKcE*KIm6c<7<*>YV1@{N{#qo=#ebd{K6Ms|H=4^VB z7@r6~^OvE_>zhv8tf2TVFsM3yrEkFJ{71Sv=Dh5I7ui;CE(e(GOS$-3=p2Su9?MH< z`FUthck7Kt<@lXd6Op6JOZRyqwVD?1UnqAuHy}1|@X(QwWMi&$1IOIiqO>@>p%b?P z=@Z|DhZ-il5OIomjp0?m@_O^v<@g1t`9GZdI=Q!4qU3~`+MaX!$UeDkIKlAi;9)iY zL~b_ea2Kw4BBgH~3Ln<-Gp7k2HZ*&jA6BF&7hH&a&Rh}8D;3HX7kg~>mF^{JOJN(X z*G*bGgWWPJe_!z>9(`D-@4E3unNeVrxw4W}Mt^>91gH8NhJxyta`wqR&!ycLCR{Q4 zDq(qNHT|osC$-Lw+wmLT=^4n!3B7(BVt=>QMunP|sh_cI@#KQg!Y(O8C!6Vulx3#( z9Q_|RZYZFmrgE(96f1avJr7XE@^(y<_LO`5mMC~?!``r3b;`#X5!aCZd%|I1lXyIF-us3B{pMPvUxyg}8}ngyZZ7zE zh4v{(;BYWa{9_;N`nOsBZ}sK>sR59FM|>Q7>|m`S`|p=0qSL=&c^r=E-yjEAww0%c z9OzW0xSW&1=GwAmfi(-PSzyfqYZh3u!2e(ip!~qw!N=3h-vMWF2#2HoznHTiU4B^o ze{<#k!Cmuj)Aawq?TmjLo!1muv%s1K)-14Qfi(-PSzyfqYZh3uz?uctEU;#QH4Cg+ zV9f$+7Fe^ung!M@ux5cZ3#?gS%>ru{ShK*I1=cLEW`Q*etXW{q0&5mnv%s1K)-14Q zfi(-PSzyfqYZh3uz?uctEU;#QH4Cg+V9f$+7Fe^ung!M@ux5cZ3#?gS%>ru{ShK+Y zKnu{XyytcI%6nOgX46sQSrBtAmYKwf1s3qzkeivKO)s zvd0hDiS&c_&7$`g;_E~9WdIDOqh5>+l1bvHVKfnTD z1~3Qg1K0x`0FD4BfHS}afZl)X20-8I@C2am6QFmSqxb0h0{j4VpwnwWEuace4R{Mc z{^t(x0Js6*6%V+50CT`zfC)ewpaswXC;^lK=$k}F02KgoG4y`qZ2;tV=snt80Q6pQ z9RT{~0Qx=vdY69#^v4@OBj7FI9iR!&3}^w&0~P@v0iOV$0iA#@KsTTV&(>2oMZF-{Cm{2m?d`q5-jhQ-BMA1i(eWCBS9C6+j{&32+UN3`hZ_0nz~( zfZKpOfV+T9z&$_~ARCYaxDUt$OabITpCbStfC<19U3#g&*PY5+T7 z`B$+E`JVy+#jHz!i+}_GDtR6d1PBBmIjD#CZ#3SKf1`120MG}ZaZd1eP1xQJ*akpj z9lawBjd2u%L;)x+p*V%&6^dQF03HB}aVY+wIEdmQBY**b>_HEp0Z;=-0BB}Iv5E>n z2_OfcSc_sV+K+yt^?CpufEKV3fcV$|D8^#rD~hdL08Rim0L4=wfFJ0NDa@2LO%%5Qjei z+1D4~13>+T`UCZaHvsj+Q2=TW>I-*(BY-d`h{E;(fEfVA33GrJ0QDh3&;78C;w2XV z`8TrpVSod`4qyvFy4V1$0cgMd3S43B1aJX31C9XP00i3++KSp|2tYi@hRAlF079Q4 zTZsTrU-|)%4_*KuJA?sH+s*?}JI(=40L}u|0f+%;T%h)Z0tm8T*e1x4>o&ib$mjTGfo&wM@h`$7o4k!jZ1Uv#10UiVH z0wp`8WB@uQ4S@LW0B!?N{ir^)59v{` z@*CBU>L%2C54I5pDuZOG%mY9UARCYixDUu%S)={=0CYS$me3~D20}T+kM?72f%=;T zfONeDcmXH}lmXCjXk7)U1faGf{nr7i0mv6$0?_wK+h z_9Fnq*$Ws33;_lK$X0y-bPSRsd!TK^jckgx3GG9+N54^9|9Or0Q9mP_pyQGKy8&YW zw4dM?h!@$1(9h$rjkr+XBi?zycfcHA7Jzg>{rC-lbe{mAewYTJ{+sTnA;AyPJ~aLbW&U{^#UP{$!JY&T6gyBEw8rX+;ubmv>5S?^ z`XJqr?NQ7??MAle2k-%S0Z11iSPKHS0#Mw?aw0CQ4us#Reu8~a{1peF_=I9B_IUJ7 zDpUuS6X{9N5shCIBmP;A+JWLKiXEsee~P83UD5y)3sHX(I8i^NcBA(4!Wyd&;zc@P z_x^=4or==7SS|UL>w5E!c!4a^h05;*x~7k#|^0?#&k|J_`~V zaanQch4uvPfnDtfPB*bEXyaTzFr&%9VcLT(&<%u8rOlbC2lfX^-1K;qc0k#8oZ zIPjO`G3dqxl2`R_M%Z^-iT@=bd^?EH9(p1aeNfG4bW*`Og+EMGB+9{-o(RQCTG$f< zCgy;(PpMgUE-~F#Vj?Th8MPFhu_6t6Vn6vlG_IwK=6G&)4!bY}_Z?m8CfLJSYcDQA}(#2r07~HBM%umNRS4vhGld7@;b*r zqJY@sa5hK$k>a@7U6*LLbr@_1iM%*iM;2%2Y~$t%lE%K1l7`F&KY#?f8d=l|*rDGGHG#k66+ATx!1Auj7qof3Y1039|L| zB);cH7w^u1L~+@or$7Q895$F6cwt}f(eL;&_&#;;0WWoc43%Za5$4iZX^==sipzj< z4n9Zy9J~W@Z8Eb%>mLa^Ac;8M;~jkbd|klf1BAObg_Ku$fCRXZZply&9n{12>H_8G zsJv{D$cRgc%Rtr&64cw$ZjZjzHaa_j1cnu|fuoCuy_laDj`oWSEqlQpACN#TNb(fQ zAnV+WeyWxEi}nskyf=LUw?48a|B-o-yU>@2$hkbqp;7WG(Anm0PKcN4yh zJZdR1q^p!5;Uw<0+A}fX1rpR!kWhmJ*?@`u;nSe=9#`>fXlUcuL4w8{m%l-tH={v0 zNF>FTkado@__`q9IhEYDkHnm&oRLTv{e;DOrOcz(ClWNBa`^FVXvl$wICzP<_~6=k z8~7vj#RG*vJL$6B_LohNCU=et z;QSq3PE>cnRJ^-hl*J^!3>gS{CBg0AeE8jf{iSB43tJ-RSuk zN!}-e*IEjRR`CPq1y71)-!b1)XKX|NxCY7~e*^0Ttw?l3Hm2HI;bYZ`?|6y9?F}1W zhxfdyg8XeY>$Hk`6$$b z8iU$XBXl_ISdSweNLK1`bqK_Vm!%<|neV<#NqC7I@@q#o8(&`sd)&KQT`jp!IJ5Be zNQ*1M*&0|9yb)l1u|T8b=K@n!H4Y4zyx&usKWkAQ_8SoGH~v)NQ|SLtW7>;ORalVDM5lpFxVgfoDGfOZA@KPmCGnl{~(VCNdrhg@i404eOokcoms?} z!Ao3x90DAmo=nkwA59oW-v3pGgnqdfj3p}4*lH^oK>~9OVxt2I^6MRyc6JS0zj=d1 zVOipA<0A(B>U6Qgxn#Y?r&@d&d_C`>4AQ{%D4*IkYC6T0dZ1GUHZ1q)JBzHh`ZFm5 z#6+Rs@5n>^yj{f5*O9ia4|{n~Bo6r~n$cH}*T8li*wEbA9xJeHJCJ%pFwTl&YD7ELlZX{ZFXr-}NDZSY00 z7x;Q0bCCKMnZxR_>OV6(uRhcMd2U3`^UpaSXpIs+Xwd32Qx4PeT+;a@o6c_U?ORX= zviwV$S2NY6pp(~5_zKFbsV+eWb4uKVwfjlX9@vl;SUV6*Xd^0M*vaUiCf zXf?0sdu3KOf#mA&b`lFY#ho9;c%; zTx`_g{3t&_K?KUkK$;3lgzfA&$*V@bppUNyGK5ug7tmn!_WU7+pj;V7@ZWP-F-Sr; zLCvdYT&sJ?>bcl|$PbjnA-99MWYs+6kJ%GG_g_7GT0Il`lfOZCLxR1^YzFwnI z+WC6BcsRtF3F(Nvt(^F)PmhCTQH-zJFZrG7%#-sVfe3StK?NshVX5{d-FkVv*&gm1~ya%{B8A&3x9$E)j94vJHfu+cn6e0 zGdi$&df1`#0QV|SGwEu84HZaWKk{oA4@Yf0$uRyp5klg-eYl#03Vj`#lzpO5CwDIvh3di{O8Z=89pG8@K6huqVpnJ>moYg>M z)N-I;QV7}u#(|E*DZ&Xlntx)*g>D+9=ikMbkwQ7FHb{`xr|mC2EdBTz&csodqB6}O zL0Os#r=C?%g27IF8GKgb?cnF*;uwgdN=u=)SD!If@i#E|AF==x{h>Xp zNB`C1_3BZ1l|BUxR?i$(&jKj9mLvHK29?>vh6#0G1MpqszWT^~(&$3s&Vba^4F>_=H z>Ol?%Wmb>M5#U*WzW(;dmT2|BTkLz{Uq`_qKd~)tbL!?k~3gOnX+>n($>wCj9~P z^$C1^(5DJ3qw&wzcOdpsfnq4Dk=k)~1>b!D9q$)3Ou{*Wi4s~%9s-ND<* z0oF5j7?Oz-9OJ=5R%Yj9f#oqb>Rxr-VsH zAX$ltUqOP{geCNT&Ra50u~y=wKbuzIxouZ;(*x95*pC(I0R zuWi)``(LZuAI8G}_RLjCWI0QFyuk4>KI~@EvLAqp$jgFcBlLFfl)z_U12e|c}1+ds<4TCPYKGVKoR+97`rBr8`9JwbwE{CC6ilT!V>EB*$PpiB%% z(2Qa3I}y15H&Z3P3_c&d1rmOcTypn&!;*9qoq>UmqB4JvtKJ0I~`{z|E`x2=^LYxXf5!5Zb3%p1QL3dZW8D@<^vrvP-hD@V|2>3pJ78%NjD z@Df?vQ;?w1sN3tdL-<7@IzL^Jyaox%IyHBh?J_!h@i{>vjr*`7VV`#&zqgYojv$f6 z4T6Lo%8VWfj;2(WPa#NTaNj|K>}OE$ySwvXH@cUDuSW_;A+~&{n?H4}+SLy(}D z2!72D5+*2vb9`Pk9)Gk0F98|cSp^BoHueW)Jey_e%q6hN;EX|n<{#ORvsb4>@;eC< z>3?C-W+;Q=&Q#TLujKdj%}@qKONcInuNZq?ZKMm0HB1BvM1ORdUoU*gL>#|#qW@uMm> zHm{|P(KSeP2TDp_QWzxbK~l(C-SPJAQa?!WGltSXzNWl;GWG6(S0T%}KmH61z7lNX zW@GR0)2;HCk!8U0`5fMEslbNvDxXt&OOJ2!q4P#`<@66Nr61e`ubdsO<_9u33YcNg`KeX=l(_LN_ES)1rMLM&g0g@wyMxvlnI#qeC0T9! zz_VrGJ2X({pZ!{DRZo;!?XDuU^iO9j$Ow|F*7L8%&+4P(KQk8MVB{m44`s&DwY8C< z^M#f8wtCO4Zqe07z1+WODIH{l=t{|Tros{Ss8UzZ0No^o(@+7Bpg0=%wcx`ijndE+ ziL~55zDqs2*Fb%=fA1(rRy^eO3Y)dQ9W~D>vyXTQKJs;g1YKQO*x=y0B-;SlAb292 zXUXDvpe{7(dzKn<1!dP?#Y-S4!&&tzWh7VCO%~@5ckfU={MC0%wr)B?0&M?VPh8F4 zWLCAC)T$9y`d>u8|G2GXajW~=YFhvOSq~W7aJ@kptn$a%3}y@|+-jpyO!5yilLEvl z=$qBA>i#*7!l;w{drXW0#Zbh%1Zy-iRmW4G*DxQVg`PwA3Lt)@frJqx4<3ito)gxK z0tw`)XkK^%5|jm~U7_EbH7sif|$S5A2Okp^X)%aXJy|0qeZ3AVEB8sVFop`gKmGncDph${l~6GAiKf% z`KGpPQ6|R=tP4a)F|)R*m+$g3gx(L;?5BrEsP*+7Eg!T5Gd3%Om4N_YvJ zQ^M1*D`lSN%zWu`UogQ-@K<&JaMgXqI(kqB<$O%$4Sk}#RaPtYfNp=hPkH#EM6B6ngpV|2*^61^=*)#`BW@7 zd_A{H1v)c=C!*js@;|;WD=2llanq3BcVeOkD=e#fNGTkFB5c}=-avuobA;zMq@;1J zAVIw_c9gB;ZmqdJUIToN^mpGGgJT8Z*drRt8JAv_8ndyt@jiSRe0~rN5^6Z&^s7+n z_YIwJtrKMdFo<#0AVK3tyZWb+M%_`A*@1&1yL|=;ilb9ub-RTH7Ot&GVARip1a7K@ zc_u{;WpI=eo>@=;J8xT_%`~j0{TH=T&@(@X4J^t65@ff>SMF`@XgZ8WFp>ZpH%L$q z)@H`geIV6E`SpqhQXoO|!dv+wYA0u9{GQar>c@@44^p7P-P@l4< z1Sg%%G)4FH5F1F`L4sylek1N%RT>=|@e;hh`GbTGB;u--4nuJ!=6DHy{6wv=(Qdmk zvMJca0wgPbow!nF+`fN!E;bnDuq$WPcR+%A&dRvkWO$F@_7yg;!84E`?;U%fmdaRQ zCiqvGT96>!yu4_cJ5^JJ)Jac%B`UY3?mO?jyWD%v<(_lj&q7KmV`%~gEFuI+N))9mHA-3GzX~C-EJP9r$ggoj zp^1PR2%3ODQ2Dxh&N*|=ou0Y-io%Gs@0^+Go}Qkb?w+1Lb1!+@?bm(hr(DAlauI4s zyL{=v?O*!V#n)5*0m><7?o!my{5*Qlm5u#BJV$;!*Wl|4)DRD@c=KKHaQ`!Ce@Zpr z=obyP6IV|7^lf*ZxUbY;%RO-;YG@V?Kj8Mi`^>}t`jZmdov0yRZ#re?k&Vwh(?AVr zfA9@Tl#)QwlW#odW8d3x&g~4tQuQx@p^+Z`p>1#d*-zF`-UjVHFw!5Q<_)M>j*k5C zg-0Cxr0EA7{U6j2)&Ji6;nnL7|NapM8>rsv1gW{;+Ed@v{OUcl6F1{|BWj3my+3&7 z3y;6BOI8VMu|rTptK?6vyWz4edw+`dOa^8OHMHu#_}ucxwqLcD_6w|g*G;?wH6*?L ztrvdzjt?D8{sGMoH2JxxA?x{jZ~4*MU6+0Oa8rXdw-Ys_4<2}W>5(5CeCpRs4aRc` zYKVdZj-NhZ_>cEeG=i|9=2}y8(dYkZ|HtGJTLo^Rsr}|Nh)B_C8d01p!U2k4NvPi+*VRTz%Eu2cO@)c^@-# z(22T6QfLE=uH$u>m)B|05 z_MM_FZ(Dx)^hdV6_(x`)f};mvH9EXB=)~^>hV0M8mY*+v?xc$^FffpKT|%A&3~BNM z|7v;dOOO8ZF2if+gHzuntN!WcS6_W>cHM)f1{7>Z4Qb1Lo;dpHlP~|ISU|DcsM!xS zuX^9oU;gJ6hx~7eO}EY~rk`uBdhMn+-Ezq@C5$ps?|5`Or(@ISNB2;4Y|c4lFHP6i z`Z`tm!EEc;UMUz|-jqECY_MVhF&-!1cr|MN+th@Iyr+r#PW$GIC;cGz6F2$x zKhC`w%e8ZFwqXixjV?R7JykRkxT9355dbl2Ozaqmr+9`_zzB}|(#+gK&aE(bi& zW#@AALu>nj=bwx2Jm)&>-q~Bns{cG{$csK?+eM2{KC&n8s>LJzI%>!ZX#CCEw?2LR zVdUK!Kk?hBIS@6^zvkPE=icxY+MAL8wjOz^s_*ag$=R!Er_I5jxiay_U4QnC2U=V9 zH?&RTdr-F)1J%1g0coTMuKVmCpEh-+?3oyw=JRbL+Pcj?e9SX%I`K!3oqeHX;AQFImdB{~JVrr3G9 z_%4H&zWmFFp19=Am~Gk_fofgH>pra06Y_Z|m{WZhs!RN8qD8x@$=L$x5e!YoPfsYC zd<(wzckgAu1AR_k8LBsWWJk9c8V@#V`f*A;$FFq?H0wO= z+0*_^jk4+Uqeski7=6`W_&(W*@B6zieBjwj9+&ti@7i>1TI^|R;x1q#yS;etWuHCe z)bG-1Iayk)g-21dA8Ow6!rZxrHBar^I(+cxxxY3wnC*kydkoa* zv?(@gT924bd1!m3DA32F^IFk6;HZvGUyVA9?(eK-1uOFdpF-aqu7(1Ao$4diExL18 zz_#Rs?IQ8l@AFu9`J*?I#8X@uGOFtkodVr%>zYF6sBVMx2<>jqDSQf@*Sfsvv#nFD ztVXZTr*lWMb5oj~^ZH_XKRS1uQpJ9iK2lwFbP9CO&bgc74-1^}5I*5p4F$SKtXn39 z2VU*3oc};4D%c=9`gjyj2hMfM+F#dVx|gP$s6lpgTcUeu*PJCg{*PQA-+RQCQ*SZe6MXV7p@t$Q z*X~#xuDtZYL)kL%H)=Pd=1r*i^&Ojk@tyc|D`P-kjlViu{KP#UKL5j49>3v8?uU{c zCth=ooQk~nFCO~p?{9zCYf)ozN(MM&%5XWur3aqXyyaFoYeVu3vMok)+3o`t@(*>1 zUyX$5v#s>w-OFezYlFwbSNhRy309Ua@y_ue%BAM-z_0rGx#C~%SUBm0rN@t!(|^nX z?zwZH2ZI7M~+JgDo>v3z=mv_J&Ro(%Yr7iC8j$a+{g~4B6 zcEC)#H%Vo`v+LSp{_D{5Z_Uy)9xTR#vmRJ;(R=4ke&I#5Cc6IosOfw5SbqIW_Zcc~ zd~pxPgFC5l-`sljy1A{AbU3*qof-C`Y^5KkQWCY2-duY=!bMx~3b>**X!o;7su!}X zpZ?+GBvP^PLBU|9(d&12q>W@SKRMENG8!$52EoZ>>`}ypdx#EMavTP9N&jLSahM z#NB3Vkfcb;>o=Er^dU<>j?fT`K{EItYn^s4L))Yuo9D%L+Rl*gMA>chO@71|hQ;R( zn;rT!jwtS-*QkYTsF*(fh#(OtYIlbN{2xxpg7ls>XV6$W!$Im;;=70_; z1bx%zJAN#MECIfFjyPSNAo=6lC|>S2dnshgGflOYKvydPIrxuf5BGRBaZkrAj-MgL zPzAWzjgF!{=*vdHT)u!)#4G<8tKAW0mHt5(!l?lq_WA<``!(7K84kgZwa9^ZtaeOs zXw*2vCw&8)<_UCC5+-cTf-@U;7l% zM>HY+TB;R*)>}ju_k^I$w?lw5Pw0~*3!{{42cfmI1-{8HUWWJJGnrN^;IrPC|DpA0 zbq8qcjmHs!&TmPij?IOMvj?->P7Ir%!JUbKw?fk^puSVR{_CO5E5Q zu$plDQ=izBjTl7^!7Dx_G;&`M!@*L=kzA)sUGvR5aGaLC<7G$AcHS7(NGT?hycD4I zU@LkAj^er0TXMZAd-wcNK0mQQlON6iA>;*Oxg|6}kL{+G!(y)$3(1TpP6u&o7@8o{ zhOwAuu!IED&k~pS%t%I^YF?Ege0+@o5b$3>jN#g(Xx>fPV1)$Pa{B>fy+t%(?4qU% z@k|pN0ow31d$XPitF;8eS_!W$9&ld4yQ48sayttlzq6VM@sAA=v=e~yM^+514QVSC z@fEI(NfOEO-9r<%2Ri=CLkgK$zPuF>{I_I+rw_hH5)k|svrdjUt#Ejw*ek7c;xrxh zX|tDNUOL{5PqiU%RtqrE;dPGf8s8TS==^ak;kD=msPzVDvy_;83SmHJW^e#=G$B7$H~J+%G66>l_@9gA>GaBB%K5piC5A06eooQ;uG)V8>u zLFz#0Q?JDE$(Q#lCKr*w>MDlw65emht-rt^53HI(E=J$n;0vhy5wz2;%TN1gyrM=q zX)AmKJQfxSfdGL#@TMZP8FxigfPo_`V{xm7pcb$Js#?idTOC1aLPEg7>I;m(&k_(T zis}|Fv-e0{r5(^vbMjvi^a^p5V^T#JirHbYWsHdxi#=I}xd2|ifQk+9DFf4La1hxR z^~P=XjoSe3AcKjE6U!jq7(fC$XaO{Tgk3SJR046)+#pUDD74k*a2A_T#K3&JC`W7b z;3zGP7#S{e?V~@aX&T93SDM`p8@?Q*P|)g$=!40&eqR+ZbXIw1jS$*wD4YPUI&-iJ!=hnkevGXw-}=4^SlG5FV)yKyc)bTzQ@Zh#n3DJ0z7NnQ7FV zfpQ&YK0lz|6lm*3rF!%X!|I)QP}0KCAi$SbJ)Ci z_*Jw)&&4x&(_w{Dk1z61Q3S?YwSefeTEL1dG&x3{bFi-9mz+3rj3TrqOM6UXE{rp8 zAwsiUT6MsdFQvlg&;>g#9;TO#fTeullZcSn$X%~|FH*W5o(>DI1pO7y5YVtf$}bB8 zVE)LH6k=2;p#%8LJeo~hnLL6}RkPm~zs-S$rBur%v2DBqRsy_;PB!Pg2M!KUXhvj} zfNXj2C%X`hsRId@=Q%f&U*Vavalk>&2uh1G4g`^kaNzu|DVQ0XrswhP|v7D@Ee!@lxYDlSJOEBKjbSY8F`^p0h)Tz9z8efiz|Bi{p zm{E6{Ax3KI1?9#D1;G8>t7n%G1S=1kGMpr5SvwvyTHaa9o1y>w5$lLfiv4{%{8>m$ z*i9*zU?sSgV>gx#l+f2Oba@{0VCzhCChl+)yXuQ@J5!t2u=&qlI46}tP1yFDcE*jt z-S1g*naStwLP#?qWE&Fe zJ(7k(EQQyW!MG52Ku%=fSb{tn*8thkb-v4)_b~DidNdPf&Bg}Pl2>U?JoC5GZ_cPJ z?)DKLiE}8EHDO+H-+nxxluq+bd9DZycF7 zgJcPAD3WZ`T<}B+quFNGtoFCq?6gse!%)d$4Nsk+r4Cq9S+5ZiL)M^}8Cot(C@@-N z3zo2dQVt#PHYea2Y%pt@TzaR-s@0Zm(iOkKDX?O~UX z!H~@xH<2Mf?1NcxRKYvz%l~r&fHZdn^bTD*3;jp#2%jvc#~r%{q$5z^nVYgTP?s-^ zF2wo#rv?C-KSB+MkMS#v0dVDA{J<>%P4411k>QvI*2wEOZ4O|xXA_w0S71QqCeJ!9 z!8Tb+=fX2>WEAP^MKLIkVStvd$o+4*=W?sTZ0 z>>!&xs~E!<14$KfN(^=3k$@f0mvo@be|Z%IiPgFTmP+>s!$CuhP@W&&B8S8tkl1z% z3C`GT>?7F&1rlm_SR?JukSy|m&3a?zguGsxHfxH2$$DeP$N_-GOWckf@oBDSwruo8 zdm3~Oi{XY((TupU(*|JvD`F-&B;rh)Wl5n?qykE;%tx9Ig+5%!tmP%Cc#OgHtBk3vvriX9spn2xX|cDk(Sy>MSSq!AL;QCAo!Mhn@phj1BA z$lR2gIJIQKGvN?u`gtsLZ=Tq6uQMA1GK+K~-s-gdQ%T8a(?G(1LAE*0^mJSyyRxML z8Y5`-M#qvf4_0-P2c&8pw7dBphOg6?uNrBOD^L7o1!q80rnr>R9$cO{H6ijjjJcRs zc6->6f~4vW5M`?wrFiZm12hhOkqusY;?o;87M}xkllD%y+xVIZJ3-pBL^zI(2ly1R zJKM{hdb6|Ut%Cf*60>6r#(1Vm>i`2WKEK^9972jT`CUoZIDpPo4DF4?^Z>ppmw>5S z0J$;2Gv6>pqvpbwpITJjW!A;U_OKc0ASBtIX%1(TTxcacHjT-V51v!}EECvY=H>Gf ze~Ig%#dK;%!Ar5ROR<8(d8u2+B(>~fWEA4&;}?Pg6JZEv_z`qt`25;u8$~j6m}zFI za@?pS!7jxtPSLDDMkSxC-D}Z@sd71P1A&e#AuHXWPqq+VLc9W(=Gx^5WWaT*7iURI z9|r?bgncu|RwASAaj_a?kmsIKPS%kIA!+B(kmUI^=yP5Ku*@5!=v7OwBN)=ranhG> z)8$&>sE32t#+>e{t*;7o+M*er2|J}s@ZsvcF;(xa^HhcK3 zU=iqL~#0COUC%K3m{& zDYlq_cu*^DE;bRGqK~9$)@Q{nq~99sMDXcndHYd>zaM{b9NgVSCqE;a53k z!lY$170k#q!?KfAO(D#DeUC^wCZOvqjC-@ra?&n*r9_n{79VUW9w`>_vWrFBhrO9( zxfB}tlE!N0S=S?NvDQY)u;TEa#IhhFmbiK_lQ3B=fwxw|8X~kKutd^eFapXng}iXO z5Dj4ThqMNivENlGmJ$Kw(!g}GEu4i~ph!R24A01GiyXLWB}{wRx*DA!@S;BeX|hl~ z{o7;$*nTa?QfNF`3c2m_pj9BygHpqt@dW2;j8&|si%L5nuDmnXLh_PdSWUp@*Mm4D z5Zbvy|KvIipw=6D#V>XR6v9zk-n23kicI-q@V z>87wb%dMoR2U1LVGuxO71D#bom=H@1KPzMar>hwF!uNZ){T*O*S1^q%?tR=~)2{hR z5jh{eFF14{^r%n87~64=LO#&%8R@qc3MU_sD_` zjUgS%=a>XQt!A1`G##Ce${W^Nh?5fL`1c+!L-vfQ~eaVA$?tZMihf z)6HmObTL{8^hU72@g{{m3q6kl=)t&LIM_(yxPB*R7C4kkstJa|+NK~LV4h%7Jh;n7z*@erZ4LPaWmhFE`W?$I0~Uk{92q_G zd_yO`fB|}e$@>Yz@YarjWRpidjp1vVy|#j~5ikX7D|@gB3&+}77SH&{SK`1`L)_hMk{ zMT{q;E{u9HaZpfHEg*(a>agE>R(d98)kj8UOioaK^5__0$e+i9q@ZjWgC+QC$@o~r z<&e;Bj>j$|rUd;S-re*qJI0}7pmSFMr@57lhMgNHwqic1s<$<4tH6)t+95{6cfTg)PktH_E+=5V#K64snQ17<1^eWP=L40yf~g7#BtR=?27;|pG_Lc?5feJE5gf%U z(-DfgfDREHIqMM=b_p_+!j5fu)B*(M%UGPCu%GPti)a$|EriEe0i0oVj7Xe)m;_|C z5?~337Xd?}UXA6C7P2E6QXA#0@M&G)tvJh>Zy~v^K^Fdovz#%8WWj>WeT{n2Sa?`` z+=q~u2~RC!53QVva9T&7IcjriX`d&JMfHfUk)JICv0BHOn8?$D^`XQ_liBCdho%K^ z=2?KWaa?E4w+RnlmB2}8Setx>lH}$V*RA0@6~4fnRt-L0I!~@t^Yj^jr19mKz`1cV z|3VU8r4~r51++?V(^na&0Kv8*z>6)? z(RY5{pPz{eMfK8BQ1Y6RRUXk9Z4C6Ig*@KS?mxe402uPev8-@?24UJcmnr91IgmzP z#q^A2lPqAmuSd2#^&U+Puo|)PaBKwDBx*URMYxW0xOi?t+$( Date: Sun, 15 Jun 2025 02:45:40 -0700 Subject: [PATCH 4/9] Changes to v2 to encourage docs simplicity --- docs/source/about/changelog.rst | 10 +++++----- pyproject.toml | 3 +-- src/reactpy/executors/asgi/__init__.py | 4 ++-- src/reactpy/executors/asgi/pyscript.py | 8 ++++---- src/reactpy/pyscript/component_template.py | 9 +++------ src/reactpy/pyscript/layout_handler.py | 2 +- src/reactpy/templatetags/__init__.py | 4 ++-- src/reactpy/templatetags/jinja.py | 2 +- tests/test_asgi/test_middleware.py | 6 +++--- tests/test_asgi/test_pyscript.py | 10 +++++----- 10 files changed, 27 insertions(+), 31 deletions(-) diff --git a/docs/source/about/changelog.rst b/docs/source/about/changelog.rst index bb4ea5e7f..ad36a447a 100644 --- a/docs/source/about/changelog.rst +++ b/docs/source/about/changelog.rst @@ -18,11 +18,11 @@ Unreleased **Added** - :pull:`1113` - Added ``reactpy.executors.asgi.ReactPy`` that can be used to run ReactPy in standalone mode via ASGI. -- :pull:`1269` - Added ``reactpy.executors.asgi.ReactPyPyodide`` that can be used to run ReactPy in standalone mode via ASGI, but rendered entirely client-sided. +- :pull:`1269` - Added ``reactpy.executors.asgi.ReactPyCsr`` that can be used to run ReactPy in standalone mode via ASGI, but rendered entirely client-sided. - :pull:`1113` - Added ``reactpy.executors.asgi.ReactPyMiddleware`` that can be used to utilize ReactPy within any ASGI compatible framework. -- :pull:`1269` - Added ``reactpy.templatetags.Jinja`` that can be used alongside ``ReactPyMiddleware`` to embed several ReactPy components into your existing application. This includes the following template tags: ``{% component %}``, ``{% pyscript_component %}``, and ``{% pyscript_setup %}``. +- :pull:`1269` - Added ``reactpy.templatetags.ReactPyJinja`` that can be used alongside ``ReactPyMiddleware`` to embed several ReactPy components into your existing application. This includes the following template tags: ``{% component %}``, ``{% pyscript_component %}``, and ``{% pyscript_setup %}``. - :pull:`1269` - Added ``reactpy.pyscript_component`` that can be used to embed ReactPy components into your existing application. -- :pull:`1113` - Added ``uvicorn`` and ``jinja`` installation extras (for example ``pip install reactpy[jinja]``). +- :pull:`1113` - Added ``asgi`` and ``jinja`` installation extras (for example ``pip install reactpy[asgi, jinja]``). - :pull:`1113` - Added support for Python 3.12 and 3.13. - :pull:`1264` - Added ``reactpy.use_async_effect`` hook. - :pull:`1267` - Added ``shutdown_timeout`` parameter to the ``reactpy.use_async_effect`` hook. @@ -72,8 +72,8 @@ Unreleased **Fixed** - :pull:`1239` - Fixed a bug where script elements would not render to the DOM as plain text. -- :pull:`1271` - Fixed a bug where the ``key`` property provided via server-side ReactPy code was failing to propagate to the front-end JavaScript component. -- :pull:`1254` - Fixed a bug where ``RuntimeError("Hook stack is in an invalid state")`` errors would be provided when using a webserver that reuses threads. +- :pull:`1271` - Fixed a bug where the ``key`` property provided within server-side ReactPy code was failing to propagate to the front-end JavaScript components. +- :pull:`1254` - Fixed a bug where ``RuntimeError("Hook stack is in an invalid state")`` errors could be generated when using a webserver that reuses threads. v1.1.0 ------ diff --git a/pyproject.toml b/pyproject.toml index 173fdb173..d6d33bbc0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,10 +40,9 @@ urls.Documentation = "https://reactpy.dev/" urls.Source = "https://github.com/reactive-python/reactpy" [project.optional-dependencies] -all = ["reactpy[asgi,jinja,uvicorn,testing]"] +all = ["reactpy[asgi,jinja,testing]"] asgi = ["asgiref", "asgi-tools", "servestatic", "orjson", "pip"] jinja = ["jinja2-simple-tags", "jinja2 >=3"] -uvicorn = ["uvicorn[standard]"] testing = ["playwright"] [tool.hatch.version] diff --git a/src/reactpy/executors/asgi/__init__.py b/src/reactpy/executors/asgi/__init__.py index e7c9716af..e43d00cb8 100644 --- a/src/reactpy/executors/asgi/__init__.py +++ b/src/reactpy/executors/asgi/__init__.py @@ -1,5 +1,5 @@ from reactpy.executors.asgi.middleware import ReactPyMiddleware -from reactpy.executors.asgi.pyscript import ReactPyPyscript +from reactpy.executors.asgi.pyscript import ReactPyCsr from reactpy.executors.asgi.standalone import ReactPy -__all__ = ["ReactPy", "ReactPyMiddleware", "ReactPyPyscript"] +__all__ = ["ReactPy", "ReactPyCsr", "ReactPyMiddleware"] diff --git a/src/reactpy/executors/asgi/pyscript.py b/src/reactpy/executors/asgi/pyscript.py index b3f2cd38f..69973517c 100644 --- a/src/reactpy/executors/asgi/pyscript.py +++ b/src/reactpy/executors/asgi/pyscript.py @@ -20,7 +20,7 @@ from reactpy.types import ReactPyConfig, VdomDict -class ReactPyPyscript(ReactPy): +class ReactPyCsr(ReactPy): def __init__( self, *file_paths: str | Path, @@ -64,7 +64,7 @@ def __init__( are not applicable to CSR and will have no effect. """ ReactPyMiddleware.__init__( - self, app=ReactPyPyscriptApp(self), root_components=[], **settings + self, app=ReactpyPyscriptApp(self), root_components=[], **settings ) if not file_paths: raise ValueError("At least one component file path must be provided.") @@ -85,10 +85,10 @@ def match_dispatch_path(self, scope: AsgiWebsocketScope) -> bool: # nocov @dataclass -class ReactPyPyscriptApp(ReactPyApp): +class ReactpyPyscriptApp(ReactPyApp): """ReactPy's standalone ASGI application for Client-Side Rendering (CSR) via PyScript.""" - parent: ReactPyPyscript + parent: ReactPyCsr _index_html = "" _etag = "" _last_modified = "" diff --git a/src/reactpy/pyscript/component_template.py b/src/reactpy/pyscript/component_template.py index 47bf4d6a3..6855858fa 100644 --- a/src/reactpy/pyscript/component_template.py +++ b/src/reactpy/pyscript/component_template.py @@ -1,11 +1,8 @@ -# ruff: noqa: TC004, N802, N816, RUF006 +# ruff: noqa: N802, N816, RUF006 # type: ignore -from typing import TYPE_CHECKING +import asyncio -if TYPE_CHECKING: - import asyncio - - from reactpy.pyscript.layout_handler import ReactPyLayoutHandler +from reactpy.pyscript.layout_handler import ReactPyLayoutHandler # User component is inserted below by regex replacement diff --git a/src/reactpy/pyscript/layout_handler.py b/src/reactpy/pyscript/layout_handler.py index 733ab064f..1c2e6367a 100644 --- a/src/reactpy/pyscript/layout_handler.py +++ b/src/reactpy/pyscript/layout_handler.py @@ -11,7 +11,7 @@ class ReactPyLayoutHandler: - """Encapsulate the entire layout handler with a class to prevent overlapping + """Encapsulate the entire PyScript layout handler with a class to prevent overlapping variable names between user code. This code is designed to be run directly by PyScript, and is not intended to be run diff --git a/src/reactpy/templatetags/__init__.py b/src/reactpy/templatetags/__init__.py index c6f792d27..c9e5f28bc 100644 --- a/src/reactpy/templatetags/__init__.py +++ b/src/reactpy/templatetags/__init__.py @@ -1,3 +1,3 @@ -from reactpy.templatetags.jinja import Jinja +from reactpy.templatetags.jinja import ReactPyJinja -__all__ = ["Jinja"] +__all__ = ["ReactPyJinja"] diff --git a/src/reactpy/templatetags/jinja.py b/src/reactpy/templatetags/jinja.py index c4256b525..e2cf83489 100644 --- a/src/reactpy/templatetags/jinja.py +++ b/src/reactpy/templatetags/jinja.py @@ -7,7 +7,7 @@ from reactpy.pyscript.utils import pyscript_component_html, pyscript_setup_html -class Jinja(StandaloneTag): # type: ignore +class ReactPyJinja(StandaloneTag): # type: ignore safe_output = True tags: ClassVar[set[str]] = {"component", "pyscript_component", "pyscript_setup"} diff --git a/tests/test_asgi/test_middleware.py b/tests/test_asgi/test_middleware.py index 2ed2a3878..fc76571eb 100644 --- a/tests/test_asgi/test_middleware.py +++ b/tests/test_asgi/test_middleware.py @@ -22,7 +22,7 @@ async def display(page): templates = Jinja2Templates( env=JinjaEnvironment( loader=JinjaFileSystemLoader("tests/templates"), - extensions=["reactpy.templatetags.Jinja"], + extensions=["reactpy.templatetags.ReactPyJinja"], ) ) @@ -60,7 +60,7 @@ async def test_unregistered_root_component(): templates = Jinja2Templates( env=JinjaEnvironment( loader=JinjaFileSystemLoader("tests/templates"), - extensions=["reactpy.templatetags.Jinja"], + extensions=["reactpy.templatetags.ReactPyJinja"], ) ) @@ -124,7 +124,7 @@ async def test_templatetag_bad_kwargs(page, caplog): templates = Jinja2Templates( env=JinjaEnvironment( loader=JinjaFileSystemLoader("tests/templates"), - extensions=["reactpy.templatetags.Jinja"], + extensions=["reactpy.templatetags.ReactPyJinja"], ) ) diff --git a/tests/test_asgi/test_pyscript.py b/tests/test_asgi/test_pyscript.py index c9315e4fe..0ddd05485 100644 --- a/tests/test_asgi/test_pyscript.py +++ b/tests/test_asgi/test_pyscript.py @@ -9,14 +9,14 @@ from starlette.templating import Jinja2Templates from reactpy import html -from reactpy.executors.asgi.pyscript import ReactPyPyscript +from reactpy.executors.asgi.pyscript import ReactPyCsr from reactpy.testing import BackendFixture, DisplayFixture @pytest.fixture() async def display(page): """Override for the display fixture that uses ReactPyMiddleware.""" - app = ReactPyPyscript( + app = ReactPyCsr( Path(__file__).parent / "pyscript_components" / "root.py", initial=html.div({"id": "loading"}, "Loading..."), ) @@ -29,7 +29,7 @@ async def display(page): @pytest.fixture() async def multi_file_display(page): """Override for the display fixture that uses ReactPyMiddleware.""" - app = ReactPyPyscript( + app = ReactPyCsr( Path(__file__).parent / "pyscript_components" / "load_first.py", Path(__file__).parent / "pyscript_components" / "load_second.py", initial=html.div({"id": "loading"}, "Loading..."), @@ -46,7 +46,7 @@ async def jinja_display(page): templates = Jinja2Templates( env=JinjaEnvironment( loader=JinjaFileSystemLoader("tests/templates"), - extensions=["reactpy.templatetags.Jinja"], + extensions=["reactpy.templatetags.ReactPyJinja"], ) ) @@ -93,7 +93,7 @@ async def test_multi_file_components(multi_file_display: DisplayFixture): def test_bad_file_path(): with pytest.raises(ValueError): - ReactPyPyscript() + ReactPyCsr() async def test_jinja_template_tag(jinja_display: DisplayFixture): From cc3dfbdda6f694bffee43e717fd8e3cdb1802e29 Mon Sep 17 00:00:00 2001 From: Archmonger <16909269+Archmonger@users.noreply.github.com> Date: Sun, 15 Jun 2025 02:53:17 -0700 Subject: [PATCH 5/9] fix missing test dependency --- docs/source/about/changelog.rst | 2 +- pyproject.toml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/source/about/changelog.rst b/docs/source/about/changelog.rst index ad36a447a..d5215177c 100644 --- a/docs/source/about/changelog.rst +++ b/docs/source/about/changelog.rst @@ -61,7 +61,7 @@ Unreleased - :pull:`1113` - Removed ``reactpy.core.types`` module. Use ``reactpy.types`` instead. - :pull:`1278` - Removed ``reactpy.utils.html_to_vdom``. Use ``reactpy.utils.string_to_reactpy`` instead. - :pull:`1278` - Removed ``reactpy.utils.vdom_to_html``. Use ``reactpy.utils.reactpy_to_string`` instead. -- :pull:`1113` - All backend related installation extras (such as ``pip install reactpy[starlette]``) have been removed. +- :pull:`1113` - Removed all backend related installation extras (such as ``pip install reactpy[starlette]``). - :pull:`1113` - Removed deprecated function ``module_from_template``. - :pull:`1113` - Removed support for Python 3.9. - :pull:`1264` - Removed support for async functions within ``reactpy.use_effect`` hook. Use ``reactpy.use_async_effect`` instead. diff --git a/pyproject.toml b/pyproject.toml index d6d33bbc0..14d9db381 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -86,6 +86,7 @@ artifacts = [] [tool.hatch.envs.hatch-test] extra-dependencies = [ "reactpy[all]", + "uvicorn", "pytest-sugar", "pytest-asyncio", "responses", From f56cc67730551dd134c26764fe62f2d48d94c52f Mon Sep 17 00:00:00 2001 From: Archmonger <16909269+Archmonger@users.noreply.github.com> Date: Sun, 15 Jun 2025 02:56:55 -0700 Subject: [PATCH 6/9] Move uvicorn to testing deps --- pyproject.toml | 3 +-- src/reactpy/executors/asgi/pyscript.py | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 14d9db381..363f9c784 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -43,7 +43,7 @@ urls.Source = "https://github.com/reactive-python/reactpy" all = ["reactpy[asgi,jinja,testing]"] asgi = ["asgiref", "asgi-tools", "servestatic", "orjson", "pip"] jinja = ["jinja2-simple-tags", "jinja2 >=3"] -testing = ["playwright"] +testing = ["playwright, uvicorn[standard]"] [tool.hatch.version] path = "src/reactpy/__init__.py" @@ -86,7 +86,6 @@ artifacts = [] [tool.hatch.envs.hatch-test] extra-dependencies = [ "reactpy[all]", - "uvicorn", "pytest-sugar", "pytest-asyncio", "responses", diff --git a/src/reactpy/executors/asgi/pyscript.py b/src/reactpy/executors/asgi/pyscript.py index 69973517c..80e8b7866 100644 --- a/src/reactpy/executors/asgi/pyscript.py +++ b/src/reactpy/executors/asgi/pyscript.py @@ -64,7 +64,7 @@ def __init__( are not applicable to CSR and will have no effect. """ ReactPyMiddleware.__init__( - self, app=ReactpyPyscriptApp(self), root_components=[], **settings + self, app=ReactPyPyscriptApp(self), root_components=[], **settings ) if not file_paths: raise ValueError("At least one component file path must be provided.") @@ -85,7 +85,7 @@ def match_dispatch_path(self, scope: AsgiWebsocketScope) -> bool: # nocov @dataclass -class ReactpyPyscriptApp(ReactPyApp): +class ReactPyPyscriptApp(ReactPyApp): """ReactPy's standalone ASGI application for Client-Side Rendering (CSR) via PyScript.""" parent: ReactPyCsr From f4ec27d96857d9fa16e075df919ce26da5fe6982 Mon Sep 17 00:00:00 2001 From: Archmonger <16909269+Archmonger@users.noreply.github.com> Date: Sun, 15 Jun 2025 03:00:02 -0700 Subject: [PATCH 7/9] fix typo --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 363f9c784..26312f8da 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -43,7 +43,7 @@ urls.Source = "https://github.com/reactive-python/reactpy" all = ["reactpy[asgi,jinja,testing]"] asgi = ["asgiref", "asgi-tools", "servestatic", "orjson", "pip"] jinja = ["jinja2-simple-tags", "jinja2 >=3"] -testing = ["playwright, uvicorn[standard]"] +testing = ["playwright", "uvicorn[standard]"] [tool.hatch.version] path = "src/reactpy/__init__.py" From caa9038fbc7c44fe0b89ba5d7caf98f276fea75d Mon Sep 17 00:00:00 2001 From: Archmonger <16909269+Archmonger@users.noreply.github.com> Date: Sun, 7 Dec 2025 17:55:29 -0800 Subject: [PATCH 8/9] fix merge error: duplicate json key --- src/js/bun.lockb | Bin 58956 -> 91386 bytes src/js/packages/@reactpy/client/package.json | 4 ---- 2 files changed, 4 deletions(-) diff --git a/src/js/bun.lockb b/src/js/bun.lockb index d668a44031eac5fbd9e34cb983ae613c37d97763..2bd0b800af4422db09885b0b6279ab8f33fdacef 100644 GIT binary patch literal 91386 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 O Date: Sun, 7 Dec 2025 18:21:29 -0800 Subject: [PATCH 9/9] self review --- docs/source/about/changelog.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/about/changelog.rst b/docs/source/about/changelog.rst index b6ce23239..6713da0d8 100644 --- a/docs/source/about/changelog.rst +++ b/docs/source/about/changelog.rst @@ -74,7 +74,7 @@ Unreleased - :pull:`1113` - Removed ``reactpy.core.types`` module. Use ``reactpy.types`` instead. - :pull:`1278` - Removed ``reactpy.utils.html_to_vdom``. Use ``reactpy.utils.string_to_reactpy`` instead. - :pull:`1278` - Removed ``reactpy.utils.vdom_to_html``. Use ``reactpy.utils.reactpy_to_string`` instead. -- :pull:`1113` - Removed all backend related installation extras (such as ``pip install reactpy[starlette]``). +- :pull:`1113` - Removed backend specific installation extras (such as ``pip install reactpy[starlette]``). - :pull:`1113` - Removed deprecated function ``module_from_template``. - :pull:`1113` - Removed support for Python 3.9. - :pull:`1264` - Removed support for async functions within ``reactpy.use_effect`` hook. Use ``reactpy.use_async_effect`` instead.