From 90af99abf401d61df948e7807d89e7964d3820d7 Mon Sep 17 00:00:00 2001 From: Kevin Nadro Date: Tue, 8 Oct 2024 12:25:37 -0400 Subject: [PATCH 01/11] fix: added more documentation on the cut and release process (#4048) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: added more documentation on the cut and release process * A snapshot a day keeps the bugs away! πŸ“·πŸ› (OS: windows-latest) * A snapshot a day keeps the bugs away! πŸ“·πŸ› (OS: windows-latest) --------- Co-authored-by: github-actions[bot] --- README.md | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index b46165faa..b20c5f0af 100644 --- a/README.md +++ b/README.md @@ -128,7 +128,18 @@ Before you submit a contribution PR to this repo, please ensure that: ## Release a new version -#### 1. Bump the versions by running `./make-release.sh` and create a Cut Release PR +#### 1. Bump the versions by running `./make-release.sh` + +The `./make-release.sh` script has git commands to pull main but to be sure you can run the following git commands to have a fresh `main` locally. + +``` +git branch -D main +git checkout main +git pull origin +./make-release.sh +# Copy within the back ticks and paste the stdout of the change log +git push --set-upstream origin +``` That will create the branch with the updated json files for you: - run `./make-release.sh` or `./make-release.sh patch` for a patch update; @@ -137,28 +148,32 @@ That will create the branch with the updated json files for you: After it runs you should just need the push the branch and open a PR. -**Important:** It needs to be prefixed with `Cut release v` to build in release mode and a few other things to test in the best context possible, the intent would be for instance to have `Cut release v1.2.3` for the `v1.2.3` release candidate. +#### 2. Create a Cut Release PR + +When you open the PR copy the change log from the output of the `./make-release.sh` script into the description of the PR. + +**Important:** Pull request title needs to be prefixed with `Cut release v` to build in release mode and a few other things to test in the best context possible, the intent would be for instance to have `Cut release v1.2.3` for the `v1.2.3` release candidate. The PR may then serve as a place to discuss the human-readable changelog and extra QA. The `make-release.sh` tool suggests a changelog for you too to be used as PR description, just make sure to delete lines that are not user facing. -#### 2. Smoke test artifacts from the Cut Release PR +#### 3. Manually test artifacts from the Cut Release PR The release builds can be find under the `artifact` zip, at the very bottom of the `ci` action page for each commit on this branch. -We don't have a strict process, but click around and check for anything obvious, posting results as comments in the Cut Release PR. +Manually test against this [list](https://github.com/KittyCAD/modeling-app/issues/3588) across Windows, MacOS, Linux and posting results as comments in the Cut Release PR. The other `ci` output in Cut Release PRs is `updater-test`, because we don't have a way to test this fully automated, we have a semi-automated process. Download updater-test zip file, install the app, run it, expect an updater prompt to a dummy v0.99.99, install it and check that the app comes back at that version (on both macOS and Windows). -#### 3. Merge the Cut Release PR +#### 4. Merge the Cut Release PR This will kick the `create-release` action, that creates a _Draft_ release out of this Cut Release PR merge after less than a minute, with the new version as title and Cut Release PR as description. -#### 4. Publish the release +#### 5. Publish the release Head over to https://github.com/KittyCAD/modeling-app/releases, the draft release corresponding to the merged Cut Release PR should show up at the top as _Draft_. Click on it, verify the content, and hit _Publish_. -#### 5. Profit +#### 6. Profit A new Action kicks in at https://github.com/KittyCAD/modeling-app/actions, which can be found under `release` event filter. From b745cec079b63f2be57e9147fbeb75f7ac382df3 Mon Sep 17 00:00:00 2001 From: Adam Chalmers Date: Tue, 8 Oct 2024 22:56:38 -0500 Subject: [PATCH 02/11] KCL docs: Better docs for KclValue (#4096) * KCL docs: Better docs for KclValue * Update docs --------- Co-authored-by: Jonathan Tran --- docs/kcl/reduce.md | 4 ++-- docs/kcl/std.json | 18 +++++++++--------- docs/kcl/types/KclValue.md | 10 +++++----- src/wasm-lib/kcl/src/executor.rs | 2 +- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/docs/kcl/reduce.md b/docs/kcl/reduce.md index bf47ce401..70de7bfdf 100644 --- a/docs/kcl/reduce.md +++ b/docs/kcl/reduce.md @@ -18,12 +18,12 @@ reduce(array: [KclValue], start: KclValue, reduce_fn: FunctionParam) -> KclValue | Name | Type | Description | Required | |----------|------|-------------|----------| | `array` | [`[KclValue]`](/docs/kcl/types/KclValue) | | Yes | -| `start` | [`KclValue`](/docs/kcl/types/KclValue) | A memory item. | Yes | +| `start` | [`KclValue`](/docs/kcl/types/KclValue) | Any KCL value. | Yes | | `reduce_fn` | `FunctionParam` | | Yes | ### Returns -[`KclValue`](/docs/kcl/types/KclValue) - A memory item. +[`KclValue`](/docs/kcl/types/KclValue) - Any KCL value. ### Examples diff --git a/docs/kcl/std.json b/docs/kcl/std.json index ad7c572bd..e271bd2ee 100644 --- a/docs/kcl/std.json +++ b/docs/kcl/std.json @@ -80912,7 +80912,7 @@ }, "definitions": { "KclValue": { - "description": "A memory item.", + "description": "Any KCL value.", "oneOf": [ { "type": "object", @@ -84468,7 +84468,7 @@ "type": "null", "definitions": { "KclValue": { - "description": "A memory item.", + "description": "Any KCL value.", "oneOf": [ { "type": "object", @@ -88028,7 +88028,7 @@ }, "definitions": { "KclValue": { - "description": "A memory item.", + "description": "Any KCL value.", "oneOf": [ { "type": "object", @@ -112440,7 +112440,7 @@ }, "definitions": { "KclValue": { - "description": "A memory item.", + "description": "Any KCL value.", "oneOf": [ { "type": "object", @@ -115993,7 +115993,7 @@ "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "KclValue", - "description": "A memory item.", + "description": "Any KCL value.", "oneOf": [ { "type": "object", @@ -116389,7 +116389,7 @@ ], "definitions": { "KclValue": { - "description": "A memory item.", + "description": "Any KCL value.", "oneOf": [ { "type": "object", @@ -119945,7 +119945,7 @@ "type": "null", "definitions": { "KclValue": { - "description": "A memory item.", + "description": "Any KCL value.", "oneOf": [ { "type": "object", @@ -123499,7 +123499,7 @@ "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "KclValue", - "description": "A memory item.", + "description": "Any KCL value.", "oneOf": [ { "type": "object", @@ -127037,7 +127037,7 @@ } }, "KclValue": { - "description": "A memory item.", + "description": "Any KCL value.", "oneOf": [ { "type": "object", diff --git a/docs/kcl/types/KclValue.md b/docs/kcl/types/KclValue.md index 6c0bf166a..280a85263 100644 --- a/docs/kcl/types/KclValue.md +++ b/docs/kcl/types/KclValue.md @@ -1,10 +1,10 @@ --- title: "KclValue" -excerpt: "A memory item." +excerpt: "Any KCL value." layout: manual --- -A memory item. +Any KCL value. @@ -80,7 +80,7 @@ A plane. |----------|------|-------------|----------| | `type` |enum: `Plane`| | No | | `id` |`string`| The id of the plane. | No | -| `value` |[`PlaneType`](/docs/kcl/types/PlaneType)| A memory item. | No | +| `value` |[`PlaneType`](/docs/kcl/types/PlaneType)| Any KCL value. | No | | `origin` |[`Point3d`](/docs/kcl/types/Point3d)| Origin of the plane. | No | | `xAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the plane’s X axis be? | No | | `yAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the plane’s Y axis be? | No | @@ -183,8 +183,8 @@ Data for an imported geometry. | Property | Type | Description | Required | |----------|------|-------------|----------| | `type` |enum: `Function`| | No | -| `expression` |[`FunctionExpression`](/docs/kcl/types/FunctionExpression)| A memory item. | No | -| `memory` |[`ProgramMemory`](/docs/kcl/types/ProgramMemory)| A memory item. | No | +| `expression` |[`FunctionExpression`](/docs/kcl/types/FunctionExpression)| Any KCL value. | No | +| `memory` |[`ProgramMemory`](/docs/kcl/types/ProgramMemory)| Any KCL value. | No | | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| | No | diff --git a/src/wasm-lib/kcl/src/executor.rs b/src/wasm-lib/kcl/src/executor.rs index c78f5375e..2612f5686 100644 --- a/src/wasm-lib/kcl/src/executor.rs +++ b/src/wasm-lib/kcl/src/executor.rs @@ -292,7 +292,7 @@ impl DynamicState { } } -/// A memory item. +/// Any KCL value. #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)] #[ts(export)] #[serde(tag = "type")] From 01c6774c54ab8e77f3ab466e80f4b1abd7744a58 Mon Sep 17 00:00:00 2001 From: Kevin Nadro Date: Wed, 9 Oct 2024 10:33:20 -0400 Subject: [PATCH 03/11] Nadro/2608/sketch mode scene state improvements (#3866) * bug: fixing multiple state issues with the engine and modeling app to enable/disable planes/axis/delete code * fix: yarn tsc fmt lint xgen * fix: adding a comment back that I deleted on accident * fix: adding formatting back? * fix: reverting syntax * fix: removing click line tool because the line tool is automatically selected. Clicking this will exit * fix: Fixed a E2E test that had a line tool workflow with no points --------- Co-authored-by: Frank Noirot Co-authored-by: 49fl --- e2e/playwright/snapshot-tests.spec.ts | 1 - e2e/playwright/testing-selections.spec.ts | 12 ++++++++++ src/components/ModelingMachineProvider.tsx | 7 ++++++ src/lang/KclSingleton.ts | 24 +++++++++++++++++++ src/lib/toolbar.ts | 27 ++++++++++++++-------- 5 files changed, 61 insertions(+), 10 deletions(-) diff --git a/e2e/playwright/snapshot-tests.spec.ts b/e2e/playwright/snapshot-tests.spec.ts index 6c0805f8b..191edecc2 100644 --- a/e2e/playwright/snapshot-tests.spec.ts +++ b/e2e/playwright/snapshot-tests.spec.ts @@ -521,7 +521,6 @@ test( const startXPx = 600 // Equip the rectangle tool - await page.getByRole('button', { name: 'line Line', exact: true }).click() await page .getByRole('button', { name: 'rectangle Corner rectangle', exact: true }) .click() diff --git a/e2e/playwright/testing-selections.spec.ts b/e2e/playwright/testing-selections.spec.ts index eb3aba829..c162f910f 100644 --- a/e2e/playwright/testing-selections.spec.ts +++ b/e2e/playwright/testing-selections.spec.ts @@ -1208,6 +1208,12 @@ extrude001 = extrude(50, sketch001) test('Deselecting line tool should mean nothing happens on click', async ({ page, }) => { + /** + * If the line tool is clicked when the state is 'No Points' it will exit Sketch mode. + * This is the same exact workflow as pressing ESC. + * + * To continue to test this workflow, we now enter sketch mode and place a single point before exiting the line tool. + */ const u = await getUtils(page) await page.setViewportSize({ width: 1200, height: 500 }) @@ -1228,6 +1234,7 @@ extrude001 = extrude(50, sketch001) 200 ) + // Clicks the XZ Plane in the page await page.mouse.click(700, 200) await expect(page.locator('.cm-content')).toHaveText( @@ -1236,6 +1243,11 @@ extrude001 = extrude(50, sketch001) await page.waitForTimeout(600) + // Place a point because the line tool will exit if no points are pressed + await page.mouse.click(650, 200) + await page.waitForTimeout(600) + + // Code before exiting the tool let previousCodeContent = await page.locator('.cm-content').innerText() // deselect the line tool by clicking it diff --git a/src/components/ModelingMachineProvider.tsx b/src/components/ModelingMachineProvider.tsx index 0b0d73dbf..dfe76e2c5 100644 --- a/src/components/ModelingMachineProvider.tsx +++ b/src/components/ModelingMachineProvider.tsx @@ -149,6 +149,13 @@ export const ModelingMachineProvider = ({ }, 'sketch exit execute': ({ context: { store } }) => { ;(async () => { + // When cancelling the sketch mode we should disable sketch mode within the engine. + await engineCommandManager.sendSceneCommand({ + type: 'modeling_cmd_req', + cmd_id: uuidv4(), + cmd: { type: 'sketch_mode_disable' }, + }) + sceneInfra.camControls.syncDirection = 'clientToEngine' if (cameraProjection.current === 'perspective') { diff --git a/src/lang/KclSingleton.ts b/src/lang/KclSingleton.ts index d29d953bf..f0ebb915c 100644 --- a/src/lang/KclSingleton.ts +++ b/src/lang/KclSingleton.ts @@ -295,6 +295,12 @@ export class KclManager { this._cancelTokens.delete(currentExecutionId) return } + + // Exit sketch mode if the AST is empty + if (this._isAstEmpty(ast)) { + await this.disableSketchMode() + } + this.logs = logs // Do not add the errors since the program was interrupted and the error is not a real KCL error this.addKclErrors(isInterrupted ? [] : errors) @@ -553,6 +559,24 @@ export class KclManager { defaultSelectionFilter() { defaultSelectionFilter(this.programMemory, this.engineCommandManager) } + + /** + * We can send a single command of 'enable_sketch_mode' or send this in a batched request. + * When there is no code in the KCL editor we should be sending 'sketch_mode_disable' since any previous half finished + * code could leave the state of the application in sketch mode on the engine side. + */ + async disableSketchMode() { + await this.engineCommandManager.sendSceneCommand({ + type: 'modeling_cmd_req', + cmd_id: uuidv4(), + cmd: { type: 'sketch_mode_disable' }, + }) + } + + // Determines if there is no KCL code which means it is executing a blank KCL file + _isAstEmpty(ast: Program) { + return ast.start === 0 && ast.end === 0 && ast.body.length === 0 + } } function defaultSelectionFilter( diff --git a/src/lib/toolbar.ts b/src/lib/toolbar.ts index 6917de76c..988a29d47 100644 --- a/src/lib/toolbar.ts +++ b/src/lib/toolbar.ts @@ -295,15 +295,24 @@ export const toolbarConfig: Record = { 'break', { id: 'line', - onClick: ({ modelingState, modelingSend }) => - modelingSend({ - type: 'change tool', - data: { - tool: !modelingState.matches({ Sketch: 'Line tool' }) - ? 'line' - : 'none', - }, - }), + onClick: ({ modelingState, modelingSend }) => { + if (modelingState.matches({ Sketch: { 'Line tool': 'No Points' } })) { + // Exit the sketch state if there are no points and they press ESC + modelingSend({ + type: 'Cancel', + }) + } else { + // Exit the tool if there are points and they press ESC + modelingSend({ + type: 'change tool', + data: { + tool: !modelingState.matches({ Sketch: 'Line tool' }) + ? 'line' + : 'none', + }, + }) + } + }, icon: 'line', status: 'available', disabled: (state) => From e525b319d0f73a411e229dd9b9c7e57435d56519 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 09:43:53 -0700 Subject: [PATCH 04/11] Bump clap from 4.5.19 to 4.5.20 in /src/wasm-lib (#4122) Bumps [clap](https://github.com/clap-rs/clap) from 4.5.19 to 4.5.20. - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md) - [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.19...clap_complete-v4.5.20) --- updated-dependencies: - dependency-name: clap dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src/wasm-lib/Cargo.lock | 8 ++++---- src/wasm-lib/kcl/Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/wasm-lib/Cargo.lock b/src/wasm-lib/Cargo.lock index fb4b537e4..05ff04d4a 100644 --- a/src/wasm-lib/Cargo.lock +++ b/src/wasm-lib/Cargo.lock @@ -434,9 +434,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.19" +version = "4.5.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7be5744db7978a28d9df86a214130d106a89ce49644cbc4e3f0c22c3fba30615" +checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8" dependencies = [ "clap_builder", "clap_derive", @@ -444,9 +444,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.19" +version = "4.5.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5fbc17d3ef8278f55b282b2a2e75ae6f6c7d4bb70ed3d0382375104bfafdb4b" +checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54" dependencies = [ "anstream", "anstyle", diff --git a/src/wasm-lib/kcl/Cargo.toml b/src/wasm-lib/kcl/Cargo.toml index cd4d8193d..626565a8e 100644 --- a/src/wasm-lib/kcl/Cargo.toml +++ b/src/wasm-lib/kcl/Cargo.toml @@ -16,7 +16,7 @@ async-recursion = "1.1.1" async-trait = "0.1.83" base64 = "0.22.1" chrono = "0.4.38" -clap = { version = "4.5.19", default-features = false, optional = true, features = ["std", "derive"] } +clap = { version = "4.5.20", default-features = false, optional = true, features = ["std", "derive"] } convert_case = "0.6.0" dashmap = "6.1.0" databake = { version = "0.1.8", features = ["derive"] } From 0fb5ff7f10cd9ae80cd2b6ffd387c192906c879e Mon Sep 17 00:00:00 2001 From: Jonathan Tran Date: Wed, 9 Oct 2024 19:38:40 -0400 Subject: [PATCH 05/11] Change artifact IDs to be stable across KCL executions (#4101) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add ID generator to ExecState * Change default plane IDs to be hardcoded * Fix lint warning * Add exposing ID generator as output of executor * Change to use generated definition of ExecState in TS * Fix IdGenerator to use camel case in TS * Fix TS type errors * Add exposing id_generator parameter * Add using the previously generated ID generator * wip: Add display of feature tree in debug pane * Remove artifact graph augmentation * Change default planes to use id generator instead of hardcoded UUIDs * Fix to reuse previously generated IDs * Add e2e test * Change feature tree to be collapsed by default * Remove debug prints * Fix unit test to use execState * Fix type to be more general * Remove outdated comment * Update derive-docs output * Fix object display component to be more general * Remove unused ArtifactId type * Fix test to be less brittle * Remove codeRef and pathToNode from display * Fix to remove test.only Co-authored-by: Frank Noirot * A snapshot a day keeps the bugs away! πŸ“·πŸ› (OS: ubuntu-latest) * Move plane conversion code to be next to type * Revert "A snapshot a day keeps the bugs away! πŸ“·πŸ› (OS: ubuntu-latest)" This reverts commit 3455cc951b0add326eb986510a1f1e8190d44f70. * Rename file * Rename components and add doc comments * Revive the collapse button * A snapshot a day keeps the bugs away! πŸ“·πŸ› (OS: ubuntu-latest) * Confirm * A snapshot a day keeps the bugs away! πŸ“·πŸ› (OS: windows-latest) * Confirm * A snapshot a day keeps the bugs away! πŸ“·πŸ› (OS: windows-latest) * A snapshot a day keeps the bugs away! πŸ“·πŸ› (OS: windows-latest) * Confirm --------- Co-authored-by: Frank Noirot Co-authored-by: github-actions[bot] --- e2e/playwright/debug-pane.spec.ts | 80 +++++ ...scale-Inch-scale-1-Google-Chrome-win32.png | Bin 50305 -> 50495 bytes ...scale-Inch-scale-2-Google-Chrome-win32.png | Bin 47037 -> 47199 bytes ...ld-be-stable--XZ-1-Google-Chrome-linux.png | Bin 40327 -> 40388 bytes ...uld-be-stable-XY-1-Google-Chrome-win32.png | Bin 40306 -> 39525 bytes src/clientSideScene/ClientSideSceneComp.tsx | 1 + src/clientSideScene/sceneEntities.ts | 20 +- src/components/AvailableVarsHelpers.tsx | 4 +- src/components/DebugDisplayObj.tsx | 111 +++++++ src/components/DebugFeatureTree.tsx | 45 +++ .../ModelingPanes/DebugPane.tsx | 2 + .../ModelingPanes/MemoryPane.test.tsx | 4 +- src/lang/KclSingleton.ts | 34 ++- src/lang/artifact.test.ts | 13 +- src/lang/executor.test.ts | 4 +- src/lang/langHelpers.ts | 23 +- src/lang/modifyAst.test.ts | 40 +-- src/lang/queryAst.test.ts | 16 +- src/lang/std/sketch.test.ts | 12 +- src/lang/std/sketchConstraints.test.ts | 12 +- src/lang/std/sketchcombos.test.ts | 16 +- src/lang/std/std.test.ts | 6 +- src/lang/wasm.ts | 66 +++-- src/lib/testHelpers.ts | 35 ++- src/lib/useCalculateKclExpression.ts | 4 +- src/machines/modelingMachine.ts | 1 + src/wasm-lib/derive-docs/src/lib.rs | 3 +- .../derive-docs/tests/args_with_lifetime.gen | 3 +- .../derive-docs/tests/args_with_refs.gen | 3 +- src/wasm-lib/derive-docs/tests/array.gen | 6 +- src/wasm-lib/derive-docs/tests/box.gen | 3 +- .../tests/doc_comment_with_code.gen | 6 +- src/wasm-lib/derive-docs/tests/lineTo.gen | 6 +- src/wasm-lib/derive-docs/tests/min.gen | 6 +- src/wasm-lib/derive-docs/tests/option.gen | 3 +- .../derive-docs/tests/option_input_format.gen | 3 +- .../tests/return_vec_box_sketch.gen | 3 +- .../derive-docs/tests/return_vec_sketch.gen | 3 +- src/wasm-lib/derive-docs/tests/show.gen | 3 +- .../tests/test_args_with_exec_state.gen | 3 +- src/wasm-lib/kcl-test-server/src/lib.rs | 8 +- .../kcl-to-core/src/conn_mock_core.rs | 19 +- src/wasm-lib/kcl-to-core/src/lib.rs | 4 +- src/wasm-lib/kcl/src/engine/conn.rs | 18 +- src/wasm-lib/kcl/src/engine/conn_mock.rs | 17 +- src/wasm-lib/kcl/src/engine/conn_wasm.rs | 14 +- src/wasm-lib/kcl/src/engine/mod.rs | 33 ++- src/wasm-lib/kcl/src/executor.rs | 151 +++++++++- src/wasm-lib/kcl/src/lsp/kcl/mod.rs | 13 +- src/wasm-lib/kcl/src/std/chamfer.rs | 2 +- src/wasm-lib/kcl/src/std/extrude.rs | 44 +-- src/wasm-lib/kcl/src/std/fillet.rs | 17 +- src/wasm-lib/kcl/src/std/helix.rs | 13 +- src/wasm-lib/kcl/src/std/import.rs | 9 +- src/wasm-lib/kcl/src/std/loft.rs | 15 +- src/wasm-lib/kcl/src/std/mirror.rs | 4 +- src/wasm-lib/kcl/src/std/patterns.rs | 37 ++- src/wasm-lib/kcl/src/std/planes.rs | 12 +- src/wasm-lib/kcl/src/std/revolve.rs | 4 +- src/wasm-lib/kcl/src/std/shapes.rs | 2 +- src/wasm-lib/kcl/src/std/shell.rs | 4 +- src/wasm-lib/kcl/src/std/sketch.rs | 276 ++++++++---------- src/wasm-lib/kcl/src/test_server.rs | 6 +- src/wasm-lib/src/wasm.rs | 14 +- src/wasm-lib/tests/executor/no_visuals.rs | 18 +- src/wasm-lib/tests/modify/main.rs | 4 +- 66 files changed, 961 insertions(+), 400 deletions(-) create mode 100644 e2e/playwright/debug-pane.spec.ts create mode 100644 src/components/DebugDisplayObj.tsx create mode 100644 src/components/DebugFeatureTree.tsx diff --git a/e2e/playwright/debug-pane.spec.ts b/e2e/playwright/debug-pane.spec.ts new file mode 100644 index 000000000..c59a354f9 --- /dev/null +++ b/e2e/playwright/debug-pane.spec.ts @@ -0,0 +1,80 @@ +import { test, expect } from '@playwright/test' + +import { getUtils, setup, tearDown } from './test-utils' + +test.beforeEach(async ({ context, page }, testInfo) => { + await setup(context, page, testInfo) +}) + +test.afterEach(async ({ page }, testInfo) => { + await tearDown(page, testInfo) +}) + +function countNewlines(input: string): number { + let count = 0 + for (const char of input) { + if (char === '\n') { + count++ + } + } + return count +} + +test.describe('Debug pane', () => { + test('Artifact IDs in the artifact graph are stable across code edits', async ({ + page, + context, + }) => { + const code = `sketch001 = startSketchOn('XZ') + |> startProfileAt([0, 0], %) +|> line([1, 1], %) +` + const u = await getUtils(page) + await page.setViewportSize({ width: 1200, height: 500 }) + + const tree = page.getByTestId('debug-feature-tree') + const segment = tree.locator('li', { + hasText: 'segIds:', + hasNotText: 'paths:', + }) + + await test.step('Test setup', async () => { + await u.waitForAuthSkipAppStart() + await u.openKclCodePanel() + await u.openDebugPanel() + // Set the code in the code editor. + await u.codeLocator.click() + await page.keyboard.type(code, { delay: 0 }) + // Scroll to the feature tree. + await tree.scrollIntoViewIfNeeded() + // Expand the feature tree. + await tree.getByText('Feature Tree').click() + // Just expanded the details, making the element taller, so scroll again. + await tree.getByText('Plane').first().scrollIntoViewIfNeeded() + }) + // Extract the artifact IDs from the debug feature tree. + const initialSegmentIds = await segment.innerText({ timeout: 5_000 }) + // The artifact ID should include a UUID. + expect(initialSegmentIds).toMatch( + /[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}/ + ) + await test.step('Move cursor to the bottom of the code editor', async () => { + // Focus on the code editor. + await u.codeLocator.click() + // Make sure the cursor is at the end of the code. + const lines = countNewlines(code) + 1 + for (let i = 0; i < lines; i++) { + await page.keyboard.press('ArrowDown') + } + }) + await test.step('Enter a comment', async () => { + await page.keyboard.type('|> line([2, 2], %)', { delay: 0 }) + // Wait for keyboard input debounce and updated artifact graph. + await page.waitForTimeout(1000) + }) + const newSegmentIds = await segment.innerText() + // Strip off the closing bracket. + const initialIds = initialSegmentIds.slice(0, initialSegmentIds.length - 1) + expect(newSegmentIds.slice(0, initialIds.length)).toEqual(initialIds) + }) +}) diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-1-Google-Chrome-win32.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-1-Google-Chrome-win32.png index 87647572aa51b0139b61d1a8b3adc58af796b898..8cca0627274b7e3d1937dc2e54712bbd37ca5149 100644 GIT binary patch literal 50495 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

= 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 literal 47037 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

X=#xVQ-G=lnhLnulU->6v)spaC29v< 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 P7+rZ873m^`Y2g0=!!0o+ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable--XZ-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable--XZ-1-Google-Chrome-linux.png index 127b0f318c5f1c198496b00f739cb71cc4ac8788..5847ff9bc8fb48e4f8e11ab111d6311eb5f3b29e 100644 GIT binary patch literal 40388 zcmcG$WmJ`I)GdsPfRqS=bc+ZAl1g`%(jWqYlG4)MB`qy2-2&1e-CYvW9RkvQ7C!I$ zeZS7nvxj3S+sz%$av~nsqbeIhN&LqiJ5Ss59bncp%p^bJ0+tIPlY$Dv`d-+h%V znM_cO&Zu2)&$1<=qM~ACbWfq)(M}Unm zST1XL{S%T`qt0_IAygls)K|1oQW*+43OR(Xfx!u`SSW$~`-!xXox21%`awZKfk8o} zypEMlS<#S1TDE{Y`%Z$;Hyn6LZCqCi@`CvszWqkPeQpkBo z(V|}u`B;>*<2nahAj4|D-`w2CVb~x=L6A)@U=Mr^HOiT<6+86h>wzsFsjGE^y;%mfr z8Uh0YJv}|Ar>D2JKJq1NtEv488ff({dGh^e-TQWNFy^dM(luxs6HVE>r)li{^7}mT2)O` z-O@Bs1QS0BhS99bQlOyAOQ|TTC){`9*v%k+)6Qsi0_QRNUEp<$k%5b!})^gEK zVZ4cxS_Tqs+fR0Op+Q029UX>$>fNi=)zrwnrKF`3YN)v0vBa59{a|NdVPRu?#=y|q z)01zGhA8-HbF8$Q!IYNO#yD)Eq7`#quK;;=>?d_qE0pC-pd4aOKWA0bRX zD!d?@&-Y$@Jew)cE5+$=beGGcrB|8cRC{C5exFE_5j#p%N<=w|E-H{ZTp@=V<-MWK zug=bQTLTm_cS2I~W97m=;zU+i8}K`veH`hSKitR-`FFFpdTpQMxb6NdcgNW6%#dJX zTV0&&t^9c~&^9z=wa^lPlFDk(_vOnMwqo`tPqJWtSyySo)r3n#L`3|Vshg7Eb?N=} z%l=pKyO&`#w%hTfyaxvdOZ%r!pFXWHpJilX5=V)Pi&NLouw5INUkv3B2@LG&?>C?3 ztFS;6w70kCvELOqcABwC8(zP;ed|@ZW`3m|)E6&aaC6s8RhW+-W8>7mk%%DX_!wJS zx?k^dZefHqP>YR&Gdwg@TUQqu5mBh!P$(_aq4WIn=g)L>bO+peqM|+_%=2xs{GSg9 z(-d+H5m{2g(;|dYi}4>&j}PfCxob(r-NlYmpj7T!vWk*Z?Y@F^<5XJU6 zo$%H)?s%W0lv|Q6UN}{3H0*10W}}8iOLqsso?gE!&ZH*?f~!&_O&uErAGvo6Ppk&%jtekE%8hnwTtRaTGb=r(?O z+%cUjYn*CsZca>0Bs$iNd?J5!b-rWsv2^~|$0G>%$JhZPlyNUDDU+m9$vnxC?vwJo z?+BZo*5pdOnrrmx=#YSCBA3X;uIs1%Oy&COlAfNPijs24iqpnV%?_@x7Oo|VUNwo| zO-n&R_ub8l0t*FxbY1R>+8i&skN-U70r&LZLBq1w>0-=rJ#E2A?VkzKU(ssFv-x8| zkmu&-w-D%)ktJI$wmI0_zvSZLuxk*|qm;Bd*`0^f*&a&fXIQ)(CY8}1Lb7O8CG3Y; zVEqMIGU6l0n;k=}yzFe9(uv7_cKh9dCLvc_TaGIgHjd|W_=G5^`+-5IaY$lg(ZosR zId#Fx$l~XWBwsbT?M{jlN%{k2vpW_Rh7<%#l$1P_AjgJa-P}xZ*+Ha762^L|SQzBb zT3m%3r5q(nZ!2r-hLeRLZMREhnn)i%zs=t|Iy!Ud;-Pp98t-*=znjn2=O|`f9gb_G zq#kWgy(rG(`muYun*2sxJ(%c)T7qziXx@CNeTI)YaARA$l4+`C*d8!zp88REs#^0_=ITtgOBV1)(MP7vbSm z*VF{HE@a6ka}=+BF*av8+VAIop>oa@7##eeMD2vt;p)PHr@gbY^C>-jQ2XNHpWo+u zi|vk|Esz+b;J{oq8wba;ZZGV_AyX)d%fSW>yxJH;qi} zbL$luB(LzKqaV9)pn0a4=02)hF$3jjhR8eo0A5PHyhx57Q|KS}Y;L z{txfpA3(S|+1n4SA4tbAZcmgVSG4Io=P;j{u5&uRxVXTjR~e}lGuPzg??z<-VIJ7O|ACUJC0qK22hT#K1t< zGW(W>hGydyMbi0mx2p?CqT?JEUmA6=5C>@|-d1V$>6XOG&?pBeC3>Z&%h08ZX~kOg zprfe2whdG#dJ=t)m7TXPU!mz;00J4nGA`KVPwz# zQD4G~qCV*|sHR2Q4fVOXbTl+8aOlytI4HpOPEP$vyhLt0*SpR4=jZ34M7*v3G*M-} z8q2Kro+Yl$x;L4B_UF%=b3rzPoY4ho&SL(yP&Oph{ndVXSy>EB%%j6YUW++*QgaQQ z((-Z!div&=1_-y^!$WpvW@c7aX<6CU2dd4STwE-1Jv}`#ckbMQ`l^s~&~2b^U~mn0 zotc>#6%_@+VP#_@it@J3QJFIQAs(KuxAz=3X0Rx)JnV=Ohd!7o9|R9m!rygOeK*YCHNN&!kNSFTw^rD8%$Cj z!w(;Pu)2DBzP>Qmg31io=g`o!JDNc}lr-_B}KvM{vWV~Fwy9R?C0Y%FB+`hpX9RKg&gOUnY0NF_;6mzrCWW4Yt zWs}e3h_*&uY+M}fqeqMFLaDn$8PfXt`Y+69zTL(p4PD*X$UXnkZLIbzIw}f~L9~}w zbD7cbff;h7R0iZwHp1SHwZmRHJv}|bU=>Zx>B>PJcHNSbnL4M+F1b)rUc#A4IJb|` zI{<9u&OIC6dZnTKSN4#BwVn5Tva+(GqDEm~DJm#@|Ni|T2+7hlwowP2faU$w#ZBJT ze~!QR?**Av76*gTHN6jzGqL1b5^O|f-4>KO`P}7r>w@54I0I{t{d;Nld}&Yj7f?L&qY%?KT-mZX$MUMricFdP3`TiV-x5u|zPi<{7BklOH?jN(J05F} zfA=u?gCC~m4>^VoGP7j%PIJZ2zLIS`6&{80S6y$=540y^+{pa{kxcdv))ir|nV4+G z*BC;hEH?a@aJodV9UlJ%&u4O!Y5m@}eSKsL+`4L#>I4mC-xTQR9^err;HyefQ|msA z{=#K%Fe060NdGhFaVE=ky}Ws0xyVae)uN$z1Jh{qft|>mzejGbq}~AiecY zmu8QeWb|UT`}Tnc35(mlJei}HeYhW%kaT+v*TnVt!O3dN`c%sVw}>1wwo00^+khx` z*}U~=4=j8f!KNJM_1bLF;0W=jdA_}4S<0tqITB@mm^2*u;(vusb81gWP+T_beh55^ zP8Ifpq$S2Divh_N(2!{hQeAB=l)Bp5TEY@pgaf=sk18N`ypZoNoG`GmTF*E6Y>pKG zzSee0pp^VOlA~z7(nG*$MV%<8U7{;$Dn4Xbre3N~!fCYx=v)RG~d$g!ZFxaPYPCiLsuZ zurgJCZf+V<^p~ipd1Qdgi^*|f?>>B3-rSrjHIO%+`yePN2#LO~uFeu)n~9AO!>>h6 zOG`^c#5*TvJw?!KSK7kTvZT296~CA`M0>heFu)&Gb#>_8CIFI{{jMIZFxMs{BjY`j zwEXnxD~Bne@^16s;9!4$Xtmd_%Ht+b3z#Ku|B#)+UV(yX%D`o#=c z7Q(-#vXX5VlS?uJn)D9{k5|=MFYkOLJzTz(>2vaW+j6)?PfGq#w0cJvC==XMrYYAmVa2<dI^BULZyzIGDf7XO@IKT4rZ6f2g_P{_SV;NnUQF<@h(%utZbGLbN_*_h^B{J`ZZ zgXK-p{j;S*f-z=b9o<^dnkI-LCg68<6+Xd0%_j>hvz?`u#Ri15xAb?9&im%?Q>S2phwwP;dSaP31TWSG)6IWZLxVOa#uFqK zTFcx22`K^Yfn(C(ScB z+9}w{(3AoIVPs?sCF2hX4Sm7N3Kv2o8DV5(1g+@iXkJWF(M<^lmLkt-qH}5KJ^cQC z{)^|2ANz=<_r@{{(?sr_0*-e6s$1=NNJqM%UgQexl->H!@*qS!DKDku(C{$M{Y#8{ z_tt;cydcGUUF5nD_dMD8@4e9Wpx|Ixz%(xgDXFL)V|R9hQ(0SC-RzRE1umN=T$Jo4 z4h(9%p#HC%i?9W0^~B-R>d&Gvk;j6`QLL@^p=Hwtp3lI5`{m1njnPd&Fu_Cii-B+_ z92}(lt~`ly{XIROLqo@l5@CsgsoI}&CBnv;VdK4JekZg&&jx|VWWZBh&T_NP?K2*Q z_bYvk6nE?0EX&JZc9f$2+Z(0&hn|9R#Bt<%(|-<~DEB|0q;iyElI=vb>2@ z2wb#9MoN;3qE0WY-u>* z8WZ%fW1Nq|$2n%i)Fsg(KQpU83w!Ng>-f~J$#akyIr@b6Spij*Dw@i9{~i4Vk%Hg* zuiA@Nnwo@=k^SP=rz;*|ja~fSnVyKNUhPg{ebyrrE*14gO~1W7s;lGk#rKE>Vy6CE zZ8XHfURH5|_NR2*+%NijrsF%6vcE-%A<0xJJdLDRT532g1*B`D@e8XnKFPY6X&?sbKG zvHv}b6+sy^>ZoZzr8tm$5h2A&S||AReCI$&@NU`z!#^mvqpre^T8c_aP}0-0Uv~f~ zbvZw(bG@uSV`kOwx#0+$oiBjz1TZaS`UFK6()oi24Wtd=CoYr0)sU158{v%i1; z{_);kj;)sQ7Om@ZouBSN#d{<72R(ebiFnpU*J^P^{AAdK7}h=)9Rs)s0u&>3$IWuRT@ zW1%3zc0D=%Jv8*Uoy_eUo>jI(A=FLzc(!{Dg#h+pKW?5Ru?>8ajI_8F3wM~OM2C!w z44@xQB`z)wZ8l^ee}8{q*+)$3!UVmL92^|xt+=TreSLf&=g>fcc>44n+1$nk7f_v! z81=DiMhZ8Zn~G|2aZ#BLS299|CQ>d7*w43&G3~9bqGDoW70J*8onGwse_)vaPAMuP zVh9?d5c6-}z7g{}K9oQCWNA5A*Q*cp5lCGlZ>*4ehhv3rYr?6-lX#telr;VD^t`QE zwDxzo8)#q-4i4GpXJY(-ARh*Z0J8(k=vYm7ON$84uQyaAtcAftIJ+Fbrl$5!or7!C z3NJNZPghmC?fmV=KJFpJ!G9{`|J$xr9xb2pcDp@haus*cZ2UG__7X7#?~U7q$@+6W`-J32UC zhpp6poIv3a`dBo|AN(Qlm~4@An!m}xdn%zS-_*H5O9%J(aIHQ`(RP*d9COHq_-R7# z7v&A&Nr1fHUv&it+lYE?8|+}9-M`OYRTk5{wj=NB=jT@^$MU^03617u@iY5cu85%P zh5gf$?kqwiuT(t&033ySlVUkaW9nvpW69GxU9nE9U(4^%jb&Ae`)j`{zj;sKME$~n9X86)#rBnQaHcKRD;j!eC6mwW`IpG zk~h4WCGmc3%?5)+F??++fp)N}MEn4Hm*!u;Vm0hHhUNKz_-bE9Edj=;2kIY?_pmjA z$N2sI0~)R+gLb_$Q2NkUC-XSKqmCI3dgHv;`Uu#X-|&dPJXHi3r|RZ*4RGINy{*<^ z-_y(M5fGAQX7xtHG_`wf*XOfeIjw>9VE@qd<=3xYHk-z8LvNT>=$TKJvqK3%XMij< z4AuIHd=fDp-qCNnSqw71+P=4h>^$@s8d(54N%)*&1MfvfM#eB{*F%>J&4gM^7O;XJ zx}$^1`1!cFxOjLp8Dn;)t8jLJ7X-lyB9X`G=;Lg?i)99ZqT(<#5c$wb!TphvlCtl# zW^-FDbyUo{Izfh*o6}+ND|lNo*3+{Eoe+HHd?`{sH&{KY^F7fEGjtS`pYsFoS#C%} z(6(Fys|po4(@K`T-)8RTEvW5~-T*a2YXqB0GUmm%`Df3bF>2MWt*>+H{6qj@?C-L4 zfQSNM&7`Eh_bkZh_;c&)4too&@vTbb{vjcdu6gQ7q$9oo77Y#Ue*|sPgh4W})j(Ep za&woeJp<%XcOHP%wEcvJX2I3_uXE$P{Y0Lk@=1`U#s3LW6(*64E23lPe%dr!Zvbn z2IJQu%07dxFj{8D0!k)kMp@tYaeD!+Do01p-ePv}UmuP<_9IiV_?rJp^se#Z0T)6< zW)lAwS|M8gGtIOz+12}4d9(gnxDT8#`5$(O7_HhR%VdZdcVGqS?HmXaeIcuQcQu~% ziNS*&yHmZINrPS(Ww|!rWPwbG={`doo9l)BEbrdLqlQBge%Fg{J84?imrL50wxg+E z|CByLA7-W=!N%Iae+E3=^6F+;lZR0106tb`MuvjdZ9}$rkxZrRju1JXxNo`S*SHZV zzDLK|boA8kDXHQCR0OIi`6{7Sl{Izz@}@STEXh}+jga_2H`<_00(H;GXmp3GbNMf9 zSHMQV{vaVEkK2i=UrM(Z?kgU;;vCj>2FAJ~?E?w_k;4f}qWvCQ zFl^4ff&(Zz3j|Wn@JwK5^Ix4%F^*kdoLYkz1r6J%b0JU$H8tFYUe1?ihfvf@CO%#~ zO6-Kze82zo>(`Zcq0<2zJI8XVVQVz9o6lxg4v`MpljzUeuT(5NqjDZSt@1pjErM1EiFNvJ81+K zAp87jRn<)sII^q>+-LQ<@ag$ZLk@1CToUA>rB1FIRc(-qI(pU?3L^j43(x~Z!1j32 z?7{jlB!hkUg~i*ffByVgUtb6E->Ry%ev`6TEgz&F2oz$bY2rtZo`g%}=jY?2w*lqq zbhx2haP*nT zi?r%;r5{HeBVj5k7N2Ynczfw31LRa@Qg4 zMa{mvnc7a7?$M9oJdD5CRG1f)>@12gRk(j+o=#+s`;oDvV=tpnMAq-eSect~C!{ef znMiz4A-FbD((UTzrEsz9(PG)1w|gOdXfADVdU}dc>v71#5ZrD}%fR4LM^_hKl2}l# zK!Fq3>KQ?aqlY8-+CxesJTW};RY&R2a2)l<)(BosF2MfxdZvfB`We?9#Ee9vgbKdL zc%|zZ2l~E4v8vMS9#WrNC%|%Lf4#hZb`~mBU2fzRWi!8pDoKpFI^XO!(g^tH@BV)C=v~NVWc;o&+tqeEq?jmx z>miCNzJzoKmkx@c=} zhhhWB>-D>Wv(X#=|7`ht^jr4%{DWNOJZBe|y|wQtDJf?&eh39BAR$I}UM$CGYt=g& znVUC2GYMDJ58F4vyx!uv;XeEN`heYqDrk1(xjAMdS z&qHbs`wA8Vst|{M%$s;>uD}Uh8W_&Sv*GR`u zVBM8WT%so9{VAZDr0!LGqi~@u3uL|w!kuUGxI%aUY+-@Qe?%X3Ss!`Sqspk=3D#~@0NyVD4 z@<}vdik{i-rCt8IFfQN7S1gQPy;59kQZv4)T<62~4ronax56ld0Uzz}&Nl<#rX$a{ z9%yjP2sGZC0nRNCqjr$RqH3j1O*3A;ZpqGcFa}=1!5D|_QF2*M4i2wxrJhNr3>t1c z8Tu|w^)*VXR3DTK3PQv~Fs4Wn2LI4)4Fp6V*t!5MNs&f52p`!Lt^9&_a34M-=C(yw ztqAq^A8-o3wFTW*vo8jGYPLIuX^&jq$;pW@7|Nfow8@V!*M$Qsd;7}LQdYAY2~b1d zZN1>Zo$iY9708UR`#$RFH7{EMitJyu!azqqapntZ1?3&If5(d{IMv0`lsPEvnvCPn z)Qyggg5v~eI+{qJy&>ijq2I97zI((mWAPjKgn7c(Cna@tF0jLSczEQ#zHFSg;5%ER z@+99~!rW!->g`>&sv^82L>HD*7;(!j?w-iGUUX(!;VV-N?iKrGf`yUOpRc* zxlQlgml)AgKcg``f(}og7!$9Bqogeq=WT=14bFC~b8`L_7|Gjve*!iWa1^ith_^3Xb z849wob9G!g86hOYuj}qKg_|usGB@^6@gG!0Ui0}th*^^?=B#tdoD?uf8Oz}V{v(4~Cd};Y)gE zPo?4K0pP7$FbX!OB6Rl4R-)remdEYUDNzIc7J{^;1@V5)Xpy>yfB3%&a~e6hZ0e#Kd5~dXq1B)$ap7wJJ2E@T(TT_v|_GKiof> zen8}8w)IeQ-F}Zoq959^ZMpW2e3V)#A4H$LUK$fv z4bH33R{M#~!(+kHhoRaO#*6+Nr^2!|nVCradu@w9*_imo)rYrnR!23D+08dQ6q{6f zQS)rqGL#oh;wZH74}a%tc=G4ACd|rKOJ07lwjHH@Yer*Pr5Ws10c}%AMgepI8A^1Q zmzSG75pr23GFJu$A3B#?Yhn38`|PQK{s+r~XR$Pa*aV85CCZXU ziB6bd%28bS18Tl2Qn56nTRCSt0gMRyxl`CoG(e+gT6*ZQ?GLee303^2MP?l zQ;5~$(hi&-UVfRwrwBmroLw5)Vi;^&ms)%g#V+5*;VR&d#bx(LQ%x;aiLQVnK#nF7 zgoyWG2(qf;f%*hB4Vqkgj&LP9UdIDN0ReY~9A|Kmfbj2&LFAkKI7;doA{DF+#S>fK zzEOh(NjXmix;rB#&DX(d&p@zlP%Y959=AAOOAlpZ9dZJPPf zV_zgWjDmXh>)rf%zdd2~PbsPgo4rO(nU3rB?zGIG0{R=a&GN3EQP-5d>)HHn?CIwe zeX`|Xy*B?sd`bNJCI6ZDTdhlOXfs|9qmDd{l7dy@O77EnE*474fEQ#*t+Lu!{(GKl z?|3g|j-fl6kw!8?M8q=SIVbxl7-gu#aqm@;+1mDY_9{O$qE1^~#+#UoWexs3%&N`j zw)a)9iDN-cBGAXmCt~C0kL{WevZ6gf<6=idZ?nXX!(pYe7ap+^o_Mag4r_~j7LGJz zB%u_vz>syyf3vz$o+(Q8@1y(vJIL0cf=K#zg>0Df178DdfQ>|K{ zAsTf(S!xg}LU{@(5?TQu+8*NL+aIjGuHA$V8$?LZw&wTjK_>;Byy5cbjf+#c%eifd z8Zkb;;k$R1z|TSV_q)bUm0KT}4IoBT8jzVHJE0$hU-s#*biF(?Z@3(5Y@CND4_27e zzrmAsw|0*}{9iz&M-(*7zk?M2tHvtsisNj8MYZh?LKz!`8#Jk-qslJJ#sjwxLBq(- zmRPK=r;9>m(*5Ql7Ausx_NyeFag|aM9AaY}pBMCH4(2F?xox*vnC6HG2%dh)9s0{s zqSQ1WTQA|3`U;D;x<*}n;^D6K8hUkh8s**uzk`E18)1Qx8eL@fIvZhRCp9%&gc2vG zivSkwAKUyk9CpOlrh`0z!%JJnZ~F3;HHsgEOq14=XZt)h)~F4=+QQXk4pZWTRrjv3&)V6Qj_t5sLphk=EW`h z$W5Q_Wtzv2*DEI}2JTBnfR-}Z;O0hOYuofV9elu}K%5zSBty#utP_XXwA$3p?a0pe zC2AvquP}i8pp5J+lb5O`e!%{5SI3XTbi0Z};;|^*<6tpyw(6(t`H6a9HQ|!VP`>c| zIz3JNS~(;2!5eZ~AXsUz6vE1gUEf(61t{cvcKh;N|4U4C=~@Blb+!yr)8Je@zY!*f zgtUPFtdr)0ks7ibX2Sf4v}RSKCwc+K%kNqgmd3(I@G-g`u7yfW?!~Gcvsc(|YZw@; zg3%zZf0Y}S{cu#(o&*g6Asa(e_~u@349zJS6etS-{$^%oK=U#AQ_ofo8xE2&9xe`e zed8??D=Lm}yb8;G{+f&iC2AY%cy%Re&myQdKN?(Cn^&04x?b#R`^q><8mS{c5tmeU zP%*17{uZkwrNk00LaCCYq=KjKE9NWeiTygmU*y}pDWzxOLq=?bg6D_3WSirKW;*63 zilJ_U1BQe_ay0dnqRx#dXpaYMQBHcheha!|^i$+R6s?zh%i{;C zq}c2xk-GP_vCxi(ve1>PY$!R!vZVrttX^v{T5fOz&pr$aDSHV*uogIiA?*U%m6DPI zhWQ5&ek*?--dLywOb&o_gbWO#8|Y{&f21QLz)>9Vt;*@O-vcT!YHI5D`ufK5Q9&Y< zAbqC3%3j8Qi%&!p6CFJk7v12t!zhTwy4uhA{rZuhC9@#;lcYr6@iXAPEZ-$Dqdmoy z!t0h$Q&FMGeTX7;kI;B^j{I4Xh(zYAE;sH^Crbf~_sQB`6jzkzw1*8w@9>hcpbB)~ z5*E9Kkn+KkB3%|@6g(Gp+mnYqajXpdV#bfbo(qOu9BgcG-+Ve{NEu!SJZnF%erfUY zD-=(L%}(Xvn$YuO{)@6teV@N>5eo|o`~5IolX$1w0mc{|77S(oFv$;=d>yp?X|ExQz(93K@VGNxRAeL3JsZ02BQ=TOS| zB89CS_*e$1x#>$Y_?u|y3bL`?a4LO2816=|VB~tCQy`?c{&m)0>f_V!O%J4t?_tc-^ z$uW%46Dl2d3iS8W$TKfnP!?&{+pTgy^ZGsQvoA_Wm5(&D7n+Tj@QacN=vJ&t1BxYKSFn5 zsQFIF4j#lmH~n@4AGPH7iI1AvSrl2#_B?)l;7sPfC@w7pUbzn?wXAGp+f`5o< zyJ!Vz_#y3h25in?tXzhD$sUrH-c+uc$(yvBNP=~mN;TeKe;UW zho~?xp+tv^dRLAD<`=jUp^|=)$`GM!oFZa;@`U@zlk>B~6>WsCX2!<3mVQzSJuG&q zL~0xkF$WYy5|3!iqGGbx?Zgobae+tH!Q@3iD5FIb#K*^n6Lw(TPC<^6@`=F#TQHa$ zLebdS*uD)K(nU$7zJkq>qogr)`(UR`gVj4~;t^db6Pu|4OiCcd$+YQ~Xw1jgA|MRt zLV}2s8H3@Kx!;)pgimfvhzeyZe-PjeMNQ2f{n90OivDN$ZF zD7O#}g|QGNBPhdBv>jme3^~aO5fMfnp&#Ey7$MTMfSrzpsNIKvz$@U3g^+T;a_ip` z+uy(W@xPbGQxrJNzgJ3>=S>Lwd;PzCTg=)nMTJ_D!|stlkQkPTwcUSL;BNOO2nB`W z=#JySNr?yTga0n&H!~ii<}a}CXL1rG_qzeP3W$K7j*c7?(frO~s%OW4*X+*q0GLRy zs>oWifSDb}h{VO)p-oQM<->D1- zN0h}t)svL8w6QT=*!NUH)BT@cG#>sY`e8StN`Sn$ynM70&D}TK)SXr`;<@d=jEdkM zAJ0gxbpLdO3`ST$VdP4bOK(i`7jT34fl{EX3Xbbt@|GG2AQ<9I^ z+l0Je!I$L`<{SzZJ6tL%$*}b?L%_HWWG#w9lVK!YkFz_na zDTgB6u?+o_fsW44_bi*}-LnjEhcuBuXM2)=Q^;x4OYuhk?=aN^(b8ZG8eoF_Smzk! zr5J>D$bO@~28awz*V)rU!2!=5sl4}n>i>S>A-?7@pWbtPsf_PcPJ1da9~J9({4uP?)!=OGE-7^NCqNhsKW6bFSBn2_<0H?};e>hNExvoGPQ z0VINw8ujJN$LY!k=9=Zk%HT*|JaPjkA-I@el|V;!yF83J`=uH|{jQMw-w6>g5O2Ms z7s?u5?M(pOSr4K*2>pecRewPY0FGHBDIz-hXtSsx*PNN1orL4#FYv;{^pk`s)El-J zFUISh$jQmw40$~?=4_joaA@+r2YNXaTM&_lfTjmJC+qy_f9FE5F@6>DVdIM=tAR}3 zPN_shzBOqKFflSR=!fYQ6?RHW4@29V`Kzm{E}=z&%K=&I0vdD+ie6*+L5W2in{U$R z48(rT@1ElW#fXv$s?_#W1!%&x-7t&O8i)(q;zs{}gN}jW<>?9d?Ip-~xjvvS7O9u| zilv{PpCjMBd%5FwEsO$Wr0H}etS=&rBHg`vxHH?(msD9(Gc`3e?jYmr> zZV5wvVn%rXt+_ysxWG%t0}1V&d+SWByP-5RZEve9TiW>*=%P+f@AB{b2AyYM?b6!D z=JHR?j!J<>)Yq?{E1m(W0$v$N4eS7F@CcKWr+`DL`dM`LasbGFz!lfpY^s2N1Kdj4 zxM(np1HK_Fa5oYVa2gJf=RSq4%x*FU26_=OF-DCtf4Qu@ak~+2zJKV>)`QBODVG@Ng~1?e+Ae1ztKVZ{S4#!HvlcDFw-KI|#Dg=a@hzTAzxdSTwCz<*_P@GFt~_-On0J6(li z(OO22wA9pjfKV2h{*#6G zC3_3KgXjllcyA9KX%V~xHxUSLzI!(hWzhFNnO1=;tPHRqV4s2O=Aa>%i|mP> z8Y0Y4XuF<%0PzzB3_uQ#2h=Qt&I>MMl0+ z1mS8yRkX+Z>fzx5b4pQzL*X#INiXOR7fscI6!u3P>G*&uew=_zr*D zfGVWyy$|jC2zd{aH_1Z(&Sy>h3`R)u5X1k@s zAObjpsJub4HR$^a+vXBn2PQ?>|7zB&CyBS46tkKiE398>+xBV~BR;vuzcE1tLkP6b z(nIzV&eR)R|BU*6=D;G=ci0%o0R_J|kvoQ3GEU}bsS^j92nLt!)-MQ<$)rMv;IO15R{%h9tOiyuL4F~I#6m`#{+7z-E~wH_ol=zO78e#^aM;%ehXaiE0s{l_!ULPJ#s2}A-axLMEH{b4WcY{K3^Pr9cNbde zQBqy_cQlJF;?$mzzAU~j`1R7bsHndMrhC}U*d$toz_*2V?_L}@>Otu8z&e9PuK?@( z>(`d&N2cKX25UadO2M$x++gU)i9!Um^H`tobfR-BRhps^dYWKTlBuu~3_ni^o z5?w5#3l;;N6Z8Q1Y5eb`4X2OmjoqYFGwWwf=+X@MvuNv)gQ>h72$ zei|0^sOT#f$xP}cGD@n)9pskUI01?DL3^I_R_Tk`A%8v}p%P$;nd(oPCMF0dZl)B> z>rdPI`*&c)A#uaJ%1DsE=7!}HG15D`4>o5KSo$xIz3@cU{ z=Eo5bF0lZN+Y9K(20db$snBkI$%}>-qUL+VABIX1RR;jH}p1KMN0jFx=u=2Sy`VUGzsoA(M;MQ>5Z@$0DPWM zQ)kb%{#@+OQMxH4nKE%K7IQyiWAP<$|NW}gK|TwB&pC!v)WE-|7qI12qzx4V1POzo zvqSNGm80a$cb!*MAJ43Zq-Bb$;B#}^1A|i7b%9DD@S-$hC#r< zfcwLw-RV#&*?47pat|iZi3XSlP@p7(kz=;Ii`RaydF9V-gy6Q{zj@i%9`efp*hEKf zA#jb763rTpl6owNWuNGHc&+e`G~}M;Br%f|?8FinvWAf<7($#EeVP)DeRDSBAv`Q! zzhtm|G_A?|Z4R0lSTkwHuwg*otfA4RUkXsrDe?*Q*6^sPu{+;`&&55I z%+M&?5d59l+1aq!un;}m3`R@c*p<&cGxTvIs5@8p8z8cPk@EKSZ8|%=IbU}05BFlQ zHM5n4#}F2+@Fp#d33a^x4hG$oKcbPIRX%gSzXQ;`kqBrR>FA6Bt!>PcMIn5nLPPd5*!SG?(a( z7I=1YGFQ|BxES=>+8=Z*O2iUTxCJVo$|m1!+=8)=_M9e$H$R+@CJey2$3t3Fr46(M z5HW!(Jy_U?6p@|YLa8z|UhiB}Jb?K)wDg=NH=G|q3yh$y0y|;D_0=0E+UyW1Tw_Um z1@VQFOq5h_Z$vs}l+E!wH^(ta@>w5c(p|E008DLqIFKsGm7Vj$zUYUEE`r8GO`#PS z={ac!i_SHS|BejBkBC>Sd=fO~c6Coyn0lw7j|;I6{w0`mvIP>X65(IVqEVoahB8W) zr`@F#gfRb|bR=i8JxBfgwg5@CVKG2-lvL1os2@Lm-7J{XA*=T(>xx%$lw6ri>$UY; z)QjLilW2txMwFD4kbPKmTl^t|LJk(b1>Z}8kiu?~`v2UG^G;1d$pE_w8H>awX^FSD^h$n4ECNMtVbp!Y|hWWR#H0XW@-RA%H%>oMH<(* zN>Ro1B)e@sb0bISvlQ-v=u_w^fPhpj)O3L4Qn5dDQ~L(2*!REVY`ih1PeyRZ+wHuy z;|&cm==a1Jl-}S~g6|g?;s43L>7!s$Humg!dIo|~qTk^9Cuex*Pf$GjSE1tq$1v0{ zl{~gPij{Co_py|xx0}wia!j6#n7;i)T&@2bG=7dq=V{2-hK7BfX@=7Bc?~T>f*LSsDF$-sf6@$(drY=nM z^q@GE0*8I5l-kCernDh{j*ogsm6w59PApUYnZ7q)t>pGt(GA<75$b4wGV$@~KZ7X| zF79J26lib(ZYPC>k;inG^S{2dx`>qL^FXICl-hlFN45tH{4k~sJsjvyf+(<@&v#FjgYALosMK&)=>_T!JzcwMMYX#6Og>X zAocbJ_v&Y5W*W=iF_yv2l}E`}vB}ivRUk3I1(V6mXAH{#uORi)d1vU}MDuZI;jMQd z%ihc=?#>COzVgR{f(V{~*49>NOp%a~pk;_*eA~3#4f$A}VS5hkAqtA%aCS7^t+|4Q zJ$t}BS*U?9ED2T>n0l(|D@g?T4m^hnIU^GjRnP(4_=4dn`G}P27)eg+1J840*G3`X8EskZ4Z)Bdh=9kF%+~&C=mtO*%o$o zc9xc>V7dX43${@9@_Jq(CVx!V`8;jeWG?o`J>J?xjlWupU56X;s@m&(6cmlKvu^)` ztL2kt%1u-wYt!NS5DZZd3t2W67IbxV;7dd@!D$TNxIj%q1LF~m@Z}w$*1~EiGe{?z z9+|6u{*dC}2;)BN?dk%_j-OOsFo(nA)ne#IDJrDQN)W>sWAf^>49k<&Ugj157&Gpp z`!+^*6GhN<#X#)=sQ({ot9|ha10_e=dueG2=p(9sB+a8oc9&;1+S;=)?NsNKa=C!y z&ebT6!o~z&>;bI-EXdjU`J&--zz{o4r@VoT%Qx}A_F_h5_Hj&N6MMY~Q z9rn@a;-XV&kI4c#-R{>^s*!zI30i9tsn8D5ebV?x=7GuT>8U>mHo*{Jm zU?I?WhDRUOCANj7`3?d4RIp3I7cDIS7i?*^3+Ws-(nd2oOl9EauCv&FAxD7$52#o$ zyaiM+OvAwSLbPnnHZ){s`xCb1JRn_FpL+C^eZF|||FHL#QBkh(+vuoBDT082Ac6%* zNQX2ijg*9dFwzauNJ}apC4zKGcPlj_QX<_gB3&Xq)cFnU|NDMC>#X&j4`;12A2xgK zJu}Zd_jBLBysqo_w`Vjoe~{Vpc5+t>NfRtd0Flo$<}rM&Q5d>>%hBU6oV6o(tU!6; zVq=qj^2CTE7V_lTv6Wk3>y#kWg)FPHqob+k7v!+u0CiYqvfPrweX8=Z@Hg_mndgX` z_k1%q6MeV%cy)PVNS@IAhOn#^-2EF6JODvDcex^uabaUiP&kdudN&M0k^=MjmbV2NqZ z?Kx-gN{X?G9E?F=8c8q(W`GZa=NcRuIygE8g9FCY)Pxw2XeIQ4_y`j$r~v(7DzY3c zhx2X;B|vaaHg(&B5WSaUWssq_%0!=ZQWMlYXfGXGRqsMDv$E2_w>}~iD%WcafbOo9 zlWF&cH=01Yf@f5|r`QCKF-V`ySJi@qt4DRhYz_z#M~yVcFFUx0K%gT9R0T{tXCWfV z`Y06m64G^%{We96gpb?q8n7PrjyyG^0f05VxeqNQz`LY}3A^@4kPGeo^2NsKv)~IP z5)}c)%MR=tjKB;WgBn^~pj*E>-k;aj((11f+hAUJWJ(e2z>#{KhgP++T7@oct?s&} zNn%E#+VIFo&XXGi9?wzwY~|X%W%x6EC|%MfFjpoKzQshzxska}yFk_uUC+;L-joX}QVy9vjaOfzAQ9jyzh@fKp&z?=R#DT4Os} z>~5de8*Y-NzL=q90B@*~HqF}2&d&pyM~H>R3Mw+A*6a}qu|uqUm*bcz%>*M{`%cu7 z@i39OqVWEo*Elyn&qixcx~&UsBP5UM2oYanyDVu{G1vp}M3@J^UF4M*8EFSMF0wOh zfH^sUzwJntRiwr0reV=4Uzm%xDJ&?!01|0&sdy}(l^H)V6=ExiRYGxRy9#BieoRjG z0^G=E#<%RoORkBw50z=IRH#fVdZGKk^n;J{J4VBTguP)Q!uR>L?JBbW=lw4HqEU;Y zj@DL}U$1e1W3{~PYT(NBnn?5{&HC1iQw>xKZ{dCeu4wt!K9X2A6~6u${DFaxd-v}3 zWj>KpROEfi*iT6zPcTr$oAfxB=3~7oc(De6;xEZTviB?Gnmw&*MR|EGSOzH945)X0 z_Y=iUK|yTRC47)COn^y>VXq8SE%wM$ILV}HF^&Tqre%g5$#^-)zxlm*x@3#=wI(p3 z<{9EuV_-to{ElD4`F|X=Ka7WvzWE@=0*G`=S1>2MqoacrRvZw|+c?;{hMMZTll{p| z6kB3eX6|JE4T0S_u%}=l`n6{L$#p4Q)%Awo(~A>k;PQXJy;c5J+DwU5!jVnPL?e5C z2#hIzj~6ZE^9{Iu2qIlD*Z>p&;SX2fj)S!XlHeYp*Ipx(=F@~JxO=V}ev@W-#F@Hd zsirmnk+_Aqd4C!HdiC;y)%8Qu5+n_llmnK@rwtspexcccmeS; z;11DwQ3~*xz(jxc#ctMdNQXY?Hym29_l1)|4k_-YiEN?r6qU^sJJrXURbxlZR5pGr z*UUMkeIrw&r*2C$q!gJO1UC_D+4W~h6{xxZAtFzY+t!N??qK8RO?g5@n*k`|U?@ae zeTqdjYy4tF!f*^Rl-;epJ?Z({yvtV-3ALQb9gOQ@rM?MktEoZ3x=@a_u7B32Bnt) zE&btV*$hE}QedU}*0=17Sa(>eK}&SunQSfw6%m6kMvG%hdR!OL`fvL&V59{`$<3u}{)K5o3OK zw#!mZRw1mVRbNc^6aDf;V;`q~1}OEMzb1~@<0rT&;3Us- znTMPE=y(@Jm^+l?TCG5_9QiGUusK6qCK3v8Ijq+LLZ1i6h)JMQ8n8a#Z&y92St$j! z?s;&dr(e_7IcsM%Ts#dmZ?(Q(u-ON=D4d46g>y)p=50N4UV@H=SjM;FKpDS5yvD)H z1IHCAsZO@wK9&kbM@OF>-+*PKp(Q#mZN8-EI~tItU1jY7R;RIYr9wX2^GZD4_T@q> zYE{hf=-%Jfd#`r`=UT2a>z6;oj_33iiXe|qFoPoz8RI&fLW>JUaV64>(o&3pH73?^ z=FnSE`PzK}yD^}eHr0lmLUbYb8#J_Xuk)$Usml3BP+|=bR>-@I7{$Czd#0`3?yihL zpf8@k<$YI8SvfURYye2NpN-ndw(Y}=zZFaUj9+Z{RfpC_cg~)qa(B!61OF6)P%XO4 zxme~@&3?w>GmGiwui)UGtq)i(j@<0*XQhU3(O;km0yR{Tm%l`Zi?d{;=|T)-Qg@`g zZxKZpzl+mU!*o3Xp(3FS+=S!37LkBx{B2~#J^$vKuv`MD2Ayn#d1XsEQyk-gz2Q7x z6LMbqK^lYb#&?pXMR#*b_up^nx8^$olf;VfCb+oVUx>~1MMnOU!tDwTk%dP({S#7;6qzq;7xwe_$oiwp@CR@y&16!A zBLWm?jwW~O0ogSQ&>&7EDZ=~so2CEXUOCpI{VuNuxZj{IEPVL45&kH|^RSeUKtxy} z!H0M$c~xR#Km!S~LQhfFBc-!8UI+2Q!+t_*T`3Bt^@0?ASN&}hR4B9tLLAgn)mc;p z@U$60c_QODhOFPJd&GA%%pQ1|4 zx=bWIih*EeS}a5g4ZHTO=fD~PgsZ#o6d+-Xj$<4dUn9_$Acr+*s|9XQ;NSQ(2muqc@XJ@-xMJIbNhK z`H7J?7SeNl`NVcBL;Ri}527L&$O%v`vKcLx0Y9eoAp0cco{FPDtn-wIGvJoa?nUqE zb;O0(_Sw;5J>T|OVl0S|r>js$R*sI2!?fhibX;%j>B7?AMBzP|Yb=iK{XX%@l@xC+hlpHmqTS+BF7e(;I$GkH*61z)90yc!&Smd& z*=cF|7_UBm+K#PyurkLWq(jezdK6+SGI~eM#K3RDj7}woZ9)2x+HhfcS1EJN#2W9U zivfhk5C;tDx~+o18EE4Gp6|g?D{8yI2C}3zh@c^m@La7J`hD~WDt{hdAq3<7u-F!X z5Y=af5Uc)R?Wu^!=1)!>!khh_*H${@P1zbbdz-S4OuHzZZ&sf(`}8U|A}z&}*bLMz zfXwd%Wlu0$(f9!6tuP;8tO$fUAjE|>W0g;oqo75KbX%=pKemN^RR2Ab1A!d{ZZX@e z7#?-3Nzy~GOiGt8d3*|-3vDj3FjW#MS>qycn(3xhrVo}xkN5VL!go4e=(Q-SQy0j4 z3GBq6wAzEU8YqGo)0>0gq~`f>j_oBBdc=ivp^vIJQfdS}f+fez4|U%M@eCLVn>FmX z>P_vibK1HfY(=X~LjYd~kv{y)98Np>Cvp8fJ$f$}ZX*zU7fLWoFD~Z`d8rqW3#lk6 z)1nWyh;`{#I%SCQ7Js;u#Xe*58#O7wgqlSPL~0kNVMPH)B;yOajTLrV$`t6A%0)9P z_koP;0Q_p>=fCAt6T4k(D15Dqzui21@$$C+T^VKP{I{y(eX{Qh#FhZ&3%&ZX8Zco95Tp&Sghb(0Jd9>{B<5+Ah}+CDq0`Gv=NLAV zl=B!hBTAhxcN7QL93rxeGBz~C^(po|a+OeiCW?y?6}k3^7R#ISUHhyS2m}E@j20JT zWT3tDjVJg%iKLL|?OXmWAJrM-Zp3fkKbrCPr!z=BUhYnPH1IE_+Pk>An*SdSV3_zG zH5IorAQF^;bpd?XXCOb--TfEhDJbDhy)Z+{FXJ`dB(f=37|>5o@uygc^k z)8uUy<`9SQx&}(|qan!Pa$YM%&w`LLBj!e>u*4BZz|Y16n2(h$O-)_E3qU2NNOwI| zo`So$sj4F+mPPO97TGpKuypbxPQ3*@vQ(Y>K^)LU=4G z{bKhCNEH>p#vpA14giZzwQ3!OqsYg#pVX^wt&BseUcWVaoz_NRtRE*v=}3@T?X5(F z;mKOe_e1J@?2muT``84Ipbzar-;401Y?3(l!Ox}SQgG&qnj3?;1h}@Ut2@lPFZUMT z;sHCaEt<{n19pSR!Ae=N2s12I<5k>qTb!VgJZlG4KR~xH72&W1!D?e)Yw)4SuLyR$ z`oc8Xn7?P}a^nMLuH%M^WQ8e{;d5B$&&|-NTRen&6C=XFRoef-_da}i9^vg71i3>p zq;bl-tY08?d9>afgVzzY{d3D;ZlL+mJ2RcM2HHDEkBvK1c!zBytzLCLoX<`kxabE3 zu~VCye4FU}f)})h7a^*HCO=c*=i6J>} zmHy!V<%5yWFHDW~Qf*_o7|5{iJ#suZ4HezfE$Jl%c^&IOe?PNMHB=Ct8+379K4WF9zp764a(pZ{j#Wf5&X$s!4Ey}Kf=2k=xnphp z0|RZPpb-3m3=@cWVV;);gzM0aRHqNswQahFW{l1}h-F)w^`dL{5c7y*z7|l(7?M7g zO(NUq3B7SLtkl9n1?8yr2Q~5&zo5{(^%S!#AB9PB#qO!P#}>zHfBVR~;ZH`@kQHmo>FT2#A= zCnWjlyAPSRgg(*~d$Pt#8_94JLJ$KutXwoRw3Ul`aC#&;WFYhr9(>D&5%mjK(JI$CoEpv5787(miY ziL?o7UW-(!8XA{;!ee5pK=l`pKPB{1mk?JM6;s)~^!;q<`b~0+hX~NT4;EsR=W`q_ zjMenqU-uo3euI9X)eivOW*-NCgSN#N&_4xQ z-xjQS-_$=BLF+03R@QY8jlz_pT#XYDM2T^Dpt!{WaF(T|C1@vg3zev1$9B7`2H*K2 zfp6Dr%bq=-GMq{1iT#>0Gy=yl?*VOoQIQ5~DWHA5&(T&I&|{u22$g_9jjC7A^vgf9 zvl#G6sK6SZ2ihS`3KzlNt&sYx+%$qAXrqJrdgKkI|G@%qqpZ8VZBNk46G%0RmT%&| z$41m124D-I{b8gDP=ni>66X*U2>nZbih>)D0sRKRI830PqMgPNiG3~suly;)+|O7N zM=FX=}GBofY_c!&h^2_(Gpipzj!(nB=`yQjP*EP6BXc3WWSch|*SV zAitXcyaHs$)xfv~#h`Jx6L5d!$5XfPFI^hoDXK@CD_)^Mq-E#ieA#HG8hFak$-m4z z1L?B2n`soj`Hh{jjRHOn6Zwp9qO>pmMz!6b0z<+=i`i2cWA+vCf{|$HgeCR!=RH=h z{dPDKpP{{6vsRr4%?tWK9K;5n)5=FDe2HPxEIgs}!lo9{e7B!}>M*`7bj>+ONqdF7 z<*ko#{Zh`R1XybTRDv0b*jYITChkp+=w9NwyU7nIfoIB_Sy+%@-C|)`#gtx*Vsv&O zzw_FynVJB!4J|I9>CLIOktjfM-w%S&2}(V=wY7q)r1&!#-pwt_ABza$G`GnuI{R&~ z(^1zPy4{rm-@fw)0JMfiqy>(`_o{Me*C#0JYd`u79l6y_C>0t50BYM6V_KjS0F52M zBQo>`cp|#vA1mh<6u^crNn?PR6HM^Zb~eeKZRAY+q}e~_hL5uTrOYj^>ZxrSA5U^& zJLToQH^OK~ShC|IzJ4Wocu?QpZLD-W$U1E}+Q)nm5bS5f{AggE1Cz zT6qRu3-CvUT@n!ro*GRavZ=zd+vAtjI60-$1GG7X^1|{i;R1g1R(ol+H(M_iR4`BU zxkte3z+;^ykTP~c4JJij`KtXC?5cZ^sYlTf+!4}ee%(Y3Dnj=bhjCj z<6Qt2PXxu`Z7-))G;293qlSX()yet`8npXAXVl#*r{SD1cgt?xC7apJP0X`62R6fJ zE*K(^W5{X$4r<%f&Ba+zLVR4QN@@f#H{>uLRV~Eitl>X{cVL(ov#os798mE%kYtujeeTM-?- zQ-D>%SC!QLXW5CO&$P5;F>c5ks%z4>(N7sd2m^7MO0LzeC8&K27m`+ME_n$%*@w0k z1e8I zHt8|ja)=l6^X0vmLVta-vHZ7DtUc;rf8pb^tPn{ZZ9Y(z6CO2=;hp6rDhz7?^QHr&O5a4Y<^^? zF)X?F07?wnZ6Ej3{%4&Og#2%V=Y_Ios7+A}?Sx>|?NIxx9V=p#ebxdpgn&e_9?9_X~$cQEb1nZTSY3&Ag|QU=yF8dV2~?Re9(> zDcD-QvAgc*>^2v&WhxS4_~F@-v!kP0zPy+e;T`xRA5Zq_@h=cc+7ATV8dky%*BXAx zKwJ~rbC|EXn#PY*O;n^>4$*|TF^mZJ+%F5LJp+Ie)EkbV4{nP>mV?=ID|;yu(CUXe4H zu#uGWg}S$~7gRX0dEg!n-&cNAf(2S2LRqg}q};7%W#^Xece^OI2N`7g4xnq%+?cnq zg24yB2?%d{_YLM-2lakDZ_E<)#@7eB$P4oGxz<}kgZD1aSPF2`zw=-w6|p zOu2RL>ved7rO;kVOZyE@$m?$d&US<%sxL%XGM8XWLww9nv9NfY(I5$r!WMiwLSiEjQP6wj~Aw)Zt7cT33eZR8SKw-i1%SbU{h?920?KKv-=@| zG8dl@4uJA>Hko?&jn0%L&@bHz1JJg4a>cBd*w95Wr5Ld#5sUlEUUI9iG0*GYn}7@mVN)jEzAxv+#E`X!TB5;2Q*Nn-fmOUe z)`mcY3+i9-gCIPS$4aZa2@o3ZiO*eDUHaYwKr;}*-GpduuyEH{p^s4Vq@uEtXNBd+ zaod8HNGUHAGMk{Z*3x`WNRN7CL&Xv?51e&Ql+Owp$xpMEW|I3BRYg8etoel!AUa9S z=~Q{C-}Q^0sI?mer7e`j9+xq<1A1==r!3{lKmr-m5D=p0o62&2LJe-KCM4Gm#9Kd4 z2VlL!M|ASRX_MOAT~MiF>IK39;CQ=P!!`Q;#<1 z@x$03pTLL1L!Ixk4X(csJN7eS5+PRTr9fD)^_BMYoo~q>(e{@jvjG?hshk<);7hN5V7|he6R974 zh!Jjp{|09qZxI7JKy+UsuEe=)hCve{(BwQ9FT!8%yAoi?{-69Ez?;ZZ@-P5Oc8_6>7rb2SC_%>79>DyEUupuOU>sSa$^2PS|I^5 z#R`FtfuhR)|M&kx>+oar47KX**%@clCEOk-EMICQJ?PM*zwYnMc&>=pG^WnF=pY=m z8vffVD4hi3JrRiSGUfB1t|S@BIlqeEb)l;KF=;$9uWpF6snsf#sg!R^GHSn(sP0l< zbo6Y#ji97iyl2*Kd-#<0`ocT%#{G+&RMbd6cgAz-2bT)b ziWf%=cEtX>QuC6$bBD5_VoQm$Yt~KE0Mn8z!lTODTKu8)cUlvTZBG{GxSVZek|2d<8ym=`=vvach##Z?u@SyB28npQlwGYikO-!yuQsElm}UkER@_TM+m94{|rYmNR zD=RxDnc=x(oy|U_C;zTvIsb&K;zazH?iTUy2%xU;yqtvZ&XHva@r&3KNFl@2Z4&>IgpJ5HI;RQ}Z! z9JsDJ^2`@U2I-6j=9jHAC zLFI$B6dA(!SKp^JSx0))9pY1_F_z&gf_{YKV1>f9X{vPhi+9z4#|wY%JLsKMA6kY| zWU0hMr^&dKp3`@V(rZez8Pk!_xvwjYOr>H8`q1K*YDCG;@+pVtosT3b|p0);gJ1P__Wyy({_S~8dUWvjJt04d}`6^Lc|aIEgBzTsU^p$l(2mzX1tsDtLqZ8>{pIckPaasH7BQCcew9o7ZM!D(1%SLUm4 zBf0H=T3Ja=Mb{`$RDBXZwOYn)i50rLuls+uqg`nwd!O6a796By{?AU#ocS&l$#Tc4 zmG{7vb~@wAai*!vBHuW*tS>i8Ow{7z{ACvY>RRM~2`*V~}3 zKTn}^fw{?zaHFQ^hm7~Us#98D?-$ zsF9aj%5oHu>H7Ny;!|6aqHU;Il1V>&-_d6 zW?YMAT(OtfFi zYDt8O3jPo3ha`uIj-I<>$p%?IY@z527aD(1Z?Xfl#-2XIJf=Q4YyZ*L3o6 z(@^OOr1EOin3xWTh!B*SYTSJFCjwBu5R(R40niI`KMSN14u2FBXq++_aH+Z1U8tNH z><9Inyk#*kT>5qC zysq;>NtMJs{pP2f(-_1Y#O=V8o|<82G&pgKjGfB$vNsodXc5&lEe319-`&LPXnL-Ue8uOoDk|v zI(u{t%!~Ir^)~qxYuByNxd(Oc?jPtCTDTTkR5Rcw7EJRVa&=89GaZce>ewIYWRW7} zoU2Qn>`#3O+t*<`x=ga4rXtm&Q?_aGIzZ5Qxeh7%`$`d(w`lw@mVsUV& zv}j@|T6iV56aAz<)5>QGfusVyNcMieC)gIaxA zZ4p{D^ZB=POOJ1V$Eg|oiqLb+B&;hv8Xh~R_*5L-*F{QTr#?bR@-N6ctE6sjeen^B zWq9f8PIXOV}Q5VO-m4G`63dvT3n?UY(Fe07V;{L;?x^@8`8JS z!n4GwR&Y+7jLa5Jx2Edr@G#n{R%> z`QSY!MTZaEWtDS%D`fC^zAel(`=oiaD=+W(Q`0vOHLuaF=G_{vUytvWX0dbIn13Bh z+td14jzQNzn5$BHn=i0qnQx>1ckn!s$R?$QNEb`eLfg9n@LNJyXu8Xz`PS=w8 z_=BJxsm*ZnNjV~>UHRhhfw(Ae^u1V=XF98?0<66oqelh5N!tO&jrCRB}F)q zF0f7Q{=_iR{nq`7Lyo!XSH!Q@MB)X$n+v(iJyi@&ZO%i_#EAafdgVjwp!4dr)vJo~ z9NjHC7pbRpqVqB%eemwzR>PL#k@%Qc&HGdOo6snq(n55Y+YU?QuNsT|lghHgs>BT4 z2>N-~=;(tr%DiDWp5RwYA_{FHiV-UB;-PtmStDwT(HBi)#0%yNJyor<7qv+HH>aGU z*LT>4NLr^}$!>fp$hp|uapoc-Ls{(0yF5~|rheDVtVmb=S=<*ocG^9s-TZQf=PaU< zX_>pRW;HU^X9E|e99MDWd-qCvS3B|S|8`$peVAs5=P?e zzW;r`ttpy4m;8q>#3nkPzS_~ORBo<_$-$$_5M^wF|9(ZVkcB)eGc74r!|{AwkjT#s z;vi(@$txSy%U{=p0d`@~?R|RMX=9)DK0cuJIw;X~`2Z`Jv81X*r&@g&9ky)Qp68~A zsIR<}<`MovCb-|*_f)9p?o~P2`ri*(7+z1lN?hHq^Fc;u&F7UUnQf28XzVIbl46M| zoe!$&iHxK%6(QacKHKfYR}0KaiwcHxP4-KBO0yZ+%)*Tf{b_L*36JWAbPFOqtkOQ5 zJ|+Z2Nl!EmS0mO&Veno@rpNZayKr*R0c(Z(2t&w zr0k8|vvB?7`QNR-F_eq(SSzl&aYd@B0+5->Svs0^t{p#6YIJu==#+BrP6*89(}W(+ zTeEwOB9BzJ>x*NRb}D2r#UyxPuD|Oz=&xHfVo4~x6}0vsjr&GGhhHhGBRY~ihu7&kCT9(o&o_gmru=5XSa?O&Hy0@2I?f&vMIk?<+$7&& z{tJw_D>MD6nK}gC`0JU$Bf@IXZ^y66`RRu@b4Q57>$sLznMJ~6^9;oYkvQx7x~Q-?GP^S4|CQ-_X@zlKsHw|{iYzshw*#)!yA^s%DJY1vXMki}rSs_fuPJeR! z-kGJjU0S45>L1IItF<|&Efj~iCllFdeMFpYLU{8{6vB7P^hr!z!PRvquT!_yjfB{% zhj=4pCkY0_0zH5kW?t#X3cgbLRAAxy#`MX157kpkAxcE*6=)dj@&Nhm;f>HB3)p-j zibv>8bdEhbMluA<#25Lu_EU#6)DT zn-zx9+JuObvgG)`E<{W3V$eHKT$D+9v{Rwg8{|5zHl%}OcUl=q9cl>`I;dV|a@9i& za>cAz5nn@o!ajSNZB1h;R$Y{RU~2B(&*sTCdCBzJ@_KqL%fSD(6kQ%)lh{WeH(Fok z%xpnk{UCH;nLK97sdDCi{-n9Y8{T^%(*`DYWum5Qo$ztB#Y-k-=KK40U(;RUFOUA` zNT|KW^t6q`H2%V%uj`A0fXHw~ukPft*AFt7Tsw9LW{oLWCaOE zMva2C#VUwg55@yS#{TzrDYqqA$+WHaROP?gEcn301d1mWcxg8Q#J-XLT=R?bdi_n0 z3T|#>xd}FZC>3uRCi`9B!z|G+`8z>AX$+wWc$3jWLg=(Qw;dqs3kcBXrKBiDe*i4t zEC8Q|YWLN{>Q#yS%73@lb=3S(I6M7*f1Q)$@7I2vdL_Q`#cfN1fPjF;=J3zBeG4xa z*Wv!i{O;P~$S5FmqswngO-6+ptiSQmACJ6$nkGa>FtqAq@njI}t0M{TZuAB`?^ip? zVQ5v>{_p3?6bAipf6Yg{=!^RlM2Hv%peDmh|GtP!j(h zRZ_E+&=!6?n3+fw+ttHM5BNk_SrtpALDU8eZFG9f`tMsoosoIf3ZD5cR6n`?^Uu1a zRSik@g(-U%bh3yizuc9X`Z8UOJha>RY-=#U1ZeO?5w9e}2zXQ(49aACO$`zDg@0N% z`aKMt{P1WnP7i>N;DBYR1m#Na)vKy&xvqgIop=#!Xq#_-8xTx1B_;A3s?WE*o1=k# z7JNY3{PoVAq-YQLH4^t5E*&x!Cekbp`q`7*z?Eo=*5#P$tCd>I=RP6*FaBBPJATdV z*84n$zF1KvvN=>ppmzdHri{w%nP->~%DsTPMdZ!@gh7V%Z)L}(xg+ne-a|1fdxTzJ z*n1a(Ku{~lJQh>std1x6DaZ2h*2B`Vu=;y%OA6%fp8h6pTE?WEJ2w3PGDkQh?|y0o zro$`2Bxz?bNRxGMAEr(&-LURT>~(Uf$llZUh&~H|A)yZ{`f@ZZVAiDZ?1nFK@AQuk zA0n(h0Q`^l%D;)7VS+pBXkjd<=w4{c*{S?nA$kzei4IG=x5*MZzP4LA*HOhUAaHc- zeVhh{cV)%>w=-(p^CUXz`TXA?c;f|XshO46_Gd=pj`Kj9EbWBjm+=8wxA>ZoG1#7E z_N7qWHPpNU2xrk3pkdJ^vaA2dH^+B|;8`LjJg-sk_-!$I)tNr6eRgT?bmPD9j!+5s zL|F4A z5{1$XlaSB45gw~j>X+;^b_LEBUeqNm#U*a{&0x91&^4diIMqv7w<>*)iFrxy-?K3v z?f#OKS;TKXMQ$Ky!=_&Z$U4lHGf-Iy?{Aoj%FltV_pd^I_urV6rb)&%U829vPDzJK zYl0D9lg?J0D3O_|GQUg(2T8jpz#r;Gv@mJ?fDSBaUl8k6=KDJIypSWxMt&SVK70R* z=(IPX<1+Uz&K_4{Hg=@P#Ka(sKuh|d)I|&o;BDC23ERic&O( zX&S1mb6xnC)dZ^>)X>WeyGl($ON>LxGs&E|t=Ds>?lMmLZQUR{-PDNRsc)PhXLg%o z$g}_a+h+F*p{w>T4!^?p`i&6NCrqVAp`}J4#06%;yL!n7-d!HqQt7{jSkJ;=QRmhm z(hV4WJ*CT}u9Im8nA*z@UT#Z*Qq+oLyJyvJ zi%af_6i^$;`)xyRsF-|taFpKWwEX^BW`{vn@$1;|&rNeNPmsprB*bsj8v^ zj6nU(q3gF$D>8ECsVi0+JnR2>*0*?8x10xew^OR`arb>-cd^r&d~7ku*Y-QAZu?+p z;#QEpeB!Bx^7d3zj)I9T5DEZ@0eEIx+b=trbNuJY-Dmup3r<=*7Hm9(qHl6J{187_ z@G{#!oa_snysXdAynYY2b)vl28VU07$+~4qbRiat&?_{myx7n*rTiLTLRX?l>g&cIrJ)GSmpb z6j*2*nnS6zwY8U>=$qVIKmLgkTAVxy%9;+YzbQTS*G(WHRP@+SfQqozsP^Moyw}YN zg6x@}J|%z>gNiRqMFMUh3f+!8{`c(?>o@>Tpjn%01;a2v2QSO>0gSl-B#x_HtK_%( z3G1qp-{hz_6-;hBBhmfeirs=n6B;GQmC}!qZQRJ&#Hz=onT`hiZ}mz{jFRn((3+*E zHRs&}!Ai&2dlh`?FKTT$&(?(%hQ90_9ZNd{KXN}9d8iLKLk!yG0-+!V87_76)m<3e zmK`fhl=K=Hk~UrkW6zRHjgna0v~N#*@F)n>b*6TmP&)_Gys`Q**{M z+cWwok)C(_W4N^uGME$9|C!(^2+cw>JtrmQ>&yngQv>S`(rJ!NAv#&F+fABU-*piL ztzzKKPy(qFU~HH0@sr&DwLv2oxR=ORvmcylj;fan^PoXxVNvrZQVynM-E{xk5d5He z0jRtH*zuv|yAcX4x=BDiX*{=;kd^&`5vkJvg`9B!aRMZ&tBD+mfmaV3gcWF(NiH8| zi5xA0iV&z8k+EoP`O+M|08|4^YyjFHK*lhDrls8jfS)0C9S77DvOvr+F(~a*R#sp= z(D{FXW*AJMc!%b9qyYH5I%x)gx_fP!H917OmB$>H%DT15+|-*FsI;9#?tsy;A#~_B zOx{c%^k9Y9SF_J9OE^iyz-&-cBzz?{sV^BX$kP6beaC)xq>7SDgB+~ir_20Rf2q1= z2$6y1H663i;r<}uJBMjfda-m;qZQR4@YG0b>HG)PnhQx2;xREZ|(|Dzq}jEwa}@2xfB~{x^&zbce4W?IQjW!8tir+c$2bOzKzUtlO6O z@6Dgqf>-lCGt2Xt*L0$|*KTfCH$^bHQH2#g*sh}fk^CiJZ@IB$GT~3o$?(H}Zsr#( z(BViap7z6~f^IpIhH1kRftO>}V6V}c;Iuihr6Sf#+ z79+}6Uj{fIMmi2)D@Y^~_(zUu>xW@phclo`apAQnh6E@YFr&xsb|TL2EHiC}2Kx$%j^J zW$~T{ujR33N?rpLI?Y#Y1>Fd@ydFesI=b)Bw?p5Lo%Y8R z{V&2hYh+%yxBSR?@!k-H1B2F$#l}L*!`~-Zf*q659`u7<1A(GK$mMfhW7Fjg<+TH4wJU7jdpbmLD> zNV{Reg%u3A=(oHd^c&Cy{n!8{(6HA5-Ipf)oV>iJMId4zzWjJ<|04NwHW1|mPI;2x z;!D1AY)E=WeE|d$FLxK!g=+5N;|%?Nsr= z@Q3jB2~(*?#04MP*5lCX6KA=>&u(^EN1YHkhdBVhnJ;?`PQM%nOd~+> zg@LgN{1ebNNYSm*D$oi94g(9zRbKD6Tp{4kLHfElR-FjTW>dkf)5XigW4NZYXj^*r zp&0pvB)WUujw`6F>-1b*IbBOjd5_y7AI=T>#CG)`&Jc?cVYL~{Iq#2JV2KqQg;Af|p4cGAa^D=SDg3*UT;?049JhlJD?bUo#h1or`Dif=wRFaWbXBje+lWTw+!cg-IF&IypT z>REl7N=h#Q66(G;9k_Iy4B8{=MF5Ri8X_`(tQ>XsJ}9toa&Cf-L4P6OTH9Hw_!2uo z^@a*CB%mM=gl^1j{0!XMzP`TTpdinqWh6{Ay{}@R*r(v;6g5NU!*EXVpoja_tXx5k zKlJ~c{}tJT5mlnnb}d;ROXkCVLV7QdVdVJXn0f@x6VLCzTT6_h{zM(;ufEI>3zYrZ zXS=eR(1xlUF0+hH$3bpMj)vQ`9XqwfSuk z?^2xnIt^x1kSa`m5o>Exs1xAxt-?`FUYCjeac#K~UR2?Hx@ zSU-mL3Tg)XEnqS~X4uu15f+RwA9naQNZI(Eu(A5FQ>F*aj}O@ZYZ&051L= z5TO;zfP4o1!()s%Ex@JbKvM^1U!GXc&3iy70#r%PF2T+2M}&0%PXajjyMC1dqPWGU zMSAUzUWbx2Y1E2r{df{x-mrGWio^Z4VyJROQ=QFzr2Ccj)8Gd}MrDwdKmu&I+K51DRt&sHy$-I_wP?jEDchw8}}%uNf9rd3$LRn%r@~UD|9{ho+V--P}iP9a7`S( zF9o@@va;n`Cst#-lL?<)1*SYGYr?A*;F+LyGNy3{@3+|`)q-Fw`@aB)`jC|T+exBQ z?`$d0GQy)_h(tgw#HwPaLp=hsVL?TpuA>6WM5RgveHy&3Ll9 z+3IA}#qd#oG})@9EXGtGDQIZKbQn_!x)eK=(x@KqP+FL$0z#r?WB0(7xz2nmqYF)i z;@cQtN@I|;I;+B@(2z)MfC7q+jt*etL1o%QD1lRMvrq&*Y7zLn_Q&tmMF`We1Iu3i ztaTLLO>K<#G@&CjKL7#=LZzq+_vig=XmPBgk$DzPlwifc}6y6Rf~D` zHx&pmYm`uG5?6VA_+6tYPTn{F^yApLj?V9aP6Pom+Pxk?WmRLVPBnG9Hb}zNkZ|Wo zV(1roS2YdQ_Vtzbjct8EmDLyF46xjfZPI*{nK2hVTH1VxC#zSp#_LFYTZHK2I^de& zS6ya+%t0ZGbH)pz#QK{(vENLt|E{PO93(EP_-;T=7Vhd!*n86mk1IHF;M{IfXW!VU zqQ|Uo1!w4g-ShBI!>38e|M|@C|1P8apUeY0mDM!~_N6;#50f}Q-c0F;_W%%Q^wy6Tia0nq z!M^_dB=!!3#2Fc3KpR`%$J6I?_Ze^Bi}M0vs5u9Im~VCO{#-vylaWuODsKA0J)va-|BHXsA(1Hkb&F%}N!G;eb+*~l>l*q|`7YkWCRI!K$ zva)F9KQGZqc|?uGQ!10f@Nmi;!M&5Qn%$3dLjqTRDQaWokrG`>_i-UodO^fWk{b0` z=!Yf`ua17~z}L)REmr$YVv@vXtQ(Pu676jpM0Y<*{JbT~eI2Mpb4DxQlpw*!7s4+Wdz^d06B7i{Fmu9~>kjB?XmqB5@TJ z6_7OsI&JpqzPqQF7pifZV*7#QX+aJlTny4rAU*3o>Wm-WYj^=!R`6z6`z(g3 z!phq9)Cis-?k(V5!MF;L2iF2))>^|6`|~OFJJPG<5&!xOdjunpDc(dJDV(+4^)4=X z=qW`lA(g4FuC8{Atxt4h!4Rqf#lRCpq33=8uC%PIY$#t7)cZJ>8n)nnoPYfyzY*`O z1&I*;1Uvl8^Q73=hf7tjOm46K&M&oW|tucz#_wPNN(P&2QA0y>S`EJ3re#fwKdc{ z1!^g&1Lin5I3SDnG5nEoKXCOfo_{TUx7zEZ{t~xTWSgN%jsu7ez*umuCyFZPZ_M$w zD^{MwJby6X!|Uk9l+#_;eO3JYqw|foABlV@L|fWxP4A~2YZ!EPIbbB{o2%6{G@M~0 zRe1`Vnwe>SeyOLV6t12}y?tLeIqa+o`?m*=fM5a&wh-0n$ocw(1MLVl<=3yGpjOpPNgtZ0(Dc2KZoohvPbsW*{2x(Z(mg$!dko7C0 zs6#Tiq)LvUN|4Uu=ikv*B1{Km)!S`VcZzn+-P|hb9G#a$-X>OUFBHjcw%2=%&M8PS zXI;@M7zE;bts^@h-$$ZvrApyOMapO8Id8(o_I99WE<-d6^t}hyG;k7fe?HFa9XP#BoV*!MVa94v$TYpqA^{0ZA_qXNGDvQJF&g_LN5d&r|%`dE<%wMu{NkeyiH zKw}Q3|A78oaWPwgdVBpb$yxRD*G%NckDv9M@V`749^47*%quE_q8bdlS^$*!6&m56 zy>`%GfvL5_B?eqiU~&xafg>?=GDj@$6g^`mi+=O_it$OWt)hXm*!2Ewap@O-nMdm1 zy$W(aT0VKumL8(oSl1G^&RsaNw^(!%9$~+yqNp7vVAd_u(9i%U8^p1I-}ZuVXXUI} zhM=1OVxu9)2rv{OQ@Zt-f%GN__P`=CFV`oSl#Kvs$dDseGF>m3@jel5l8Bc=pM$EZ zs*B6sGx~{F;j$UT!A-X#vI|zd+Ls>R?g85_$l<=L9s&6f$nimfP+0h2Hy9Pnq1=Rw zVl(UZsytagE)OJ%^!O{+NcHH|1}}A&fRJ5Uz=XAlrey02Pbmgq9MchSq<>Ghv;A{6 zTPI;?baZKECS8dEW`6}XK6Kq$zzim*q7qU=fut@w`vydZD;@pj+c16?q$nZ7fuX#$ zps4@?y}(0->6tM42MSV{F`9F8_*mx^>nLtLE*gRen*WuXx%}lfuKY`ldT|#eb^we0_c4peY=ud{qf2AtU2yI0G#r zcwj8Zy6&G17kq!8v}}kR_V)HbaVxvYUESQI>io|P-!Hv%Y;j|g7=W*VdMOb7eH+-U6W7IPFB1}afxIxdE|~X# zMAC${T)KR@7SupJJdRdI${^Sr&p%QBWO!v5WcYtx4Sql)w;)fOz%YMd8g>K7a*m9B zZ)#%EEd2zdk;e7(#HF>h<3}uSZj+t$KD`6qUBjhcawEbGgoVC$_ii`WM1TLMzD2t9 zOF635pz8zm?p;oCKIKjv@xVq94{ey=)Es>d?uCORk|;7M$(oB&Q!B1xF5(j3l+PI! z0P&)CdwUy5SMuiM>#Kg~w&v-VAcVpV!yKb|v<;#cbI*#thoUrU=p?M5s z%K!tzj~5X-)84(yn=W5&Ap>l_KlamrN`2T+xWCoJXy2g;fCs2 z%YdPGL%rJwnx|~m?A?3!tOYRl90QK{2RB~KxRPN4ob>;!HOGBC_o1oaHj%2xbmu-^12Zu=Hr P@MS)pu6{1-oD!M<&!s}$ literal 40327 zcmbSzbyQVr^eqYkD##&48bqYKrMtT%r9+Swq$NZ^T2i_@q+3xyx!zcwO^mefT!l_)EFLvmq@z8qdrLa^ zMX?q`25qRTYK=xAFL;QoOhlR|2{oUrAQ)J#reX%f8?tA`6e^c5RJ?34?bbxwp`B}NJtA; z`=@`k%MEK>SdftR2zBM%kdXExC}lt9Ho^6ZaGbnFMH<6L34|Z6k0B{h5%hom7s(Fq z|MKhX+$aCN1j#NewWTFiJzptRXlr9-Wo7I(<@=PB_c8F#`$YIxT+)=S;A=m`f3HvO zUid6N`&enjbkm^Ki|yxOVP9Y0$OukgR7gl+OUuQlLDW*cKLHX{LatjYrHLQ< z;V%9;hOIdHQCzmUiYjZ+3VSiFsUvCxDg_5N3W>AJp zPeVgTL*wM+AUpL*En8Awy3ai#0ke%W*Bh9^g)doy|GTE4JT^iM=7io=r>BerVlwn` z@p0FOY_3`$BCMm`)A7BI@WmM>?|nzn#PeEC!TzC7NR$!?l-TYPAL>*kc;og>E%NEQ zb(fQ=)&XYB^EI0r55$m=+_4T$|H2W!+u?c7aK!?Nh28zJj;^lm)2CC@)4F&iw{Brt_ka3?R40p&h%<0%&}U9q?xL3c z_XsCs%Olk10_`2iX-C;Y2HTg`pTCUP-}SwVz0X`A6GP2K()WyYgLAs##s%7;D_@0q z>VG}jn{ zsa&qd$%2nTo2Y>Z#GVyBDZh)u%a;*hVe<0w&o^8BroHz+qoHTItp<0PvD?|&9v&S{ z*}k;4wuZ|$(4#=l(yMzB5fR}fWTdQ&g@x$p?S(gbp8m>R^Q?tnXNjRsO-X5PX(=~o zA|NH59htRu4iw8&q4oN`hI#qX^Up3Zw=J*7;l}o4xhvLPh^`O)1n4NP{5AT__t8-V z$dnlgwh3`jUz}8WPAWyzzVvX>m3$gK(lhWQP}t}Df>UNivlMKf(W80kBNe}>6DG!5U()H}-u-N8%yM;YSCku+NEx#4NT0kMNa0IhF`8>| zwv>_i)*bs;uTfg$!#z^|zsEE7=#=E->67I~JQX#f0jS|*f{k#eJJU6|=qQ$hX|pxY zwI3cGl9SxC{9a+q8`bo3N7o>IcVlB?Yb!ZDJv}keeSIMH*Dt5QsOaeE!b0ow;~nAC zl~{Pej~_oecbpld5rJW0y{m zIJ7i0HVARc=J!Vnu*Eg#@xw(tIMsC2C=hs*{wp7n-w~Z`_8tm^D9}aIn>#fq&^(I! z6+!;pXS$}PGP*F7`i@f-dc*sEvqFs`maccY#P!DF3)5$=I(KR5k&&!$I4t_mF))6# z`Cc`@`fV|oCg`~I6_wk{(z4F?>Jo0TprGK>ClMR1y3*1embSkmQSrVfi)hl)UAkDK zqoaClKHg?#W-cy=mlx-yrKJbQZ{NOEO6BL;Z4eL?^!qS< zhy4Xnp>(6YJS$FJ5fPDR&z^aC3B+~_I4t5bv+ zBn69QsQ}Zi2u)f%yT?Ql=$qTy+FDvm7*$P8=k<=u`uh4mcXsp|jWXDxsrkH495^_t zVjnAuaenuZ$sNIctON-^Q#^QrzbAlNmN`Lh&k9joP_W?CFg?iSzCYye|F@)s@o(X` z;nC&FqtLr^1o#B3M~D52uWHxcOb}S??36ZDyZzi9yL^bopvS?SNfj0%%Q( zOGmB^q(Xvq+nd{2U3ER&Pz@XkCinUNsch?ed$skbf}-NVt=*62y;>zYi|gx?66-b= zkPmy~na)>Yl@VgfX#&aDZI!;>8O{ z3b30l_rGAxw|eVE-er%I>#(RgFjZF{g&@G8ysnHSjSjpdDW0~Bt*xzFMi%Dgg1(o{ zWR4}B+~fl8`}>Pu-nb&X{~mN{X=!zLcUxFkbaZrR9>bPA952?kpKmQy|M2qV%i7x7 za>JIb9}UhvK0a|3LsL^wKCUkQ%wzuK%k2q!w=>t$R5?AVYHP~~Rb;RG_xj*6pAw|0 zq@*NxulL#Et6wX!f>OKzTDfp5kO}_&9u(GVeApk}Z$V5*$eGh;k*!XP2c-xnBybw% z!2>??p7WAEN!Fe!7gvKB}iCvMR*Fx2pHeV#Rq=?e7qWZ>XrUwiNioj|?leKJwS z?_Y#8ot>PSZz(oV!lUHyYVUDN>C?oTM`X@ zuWxPb<6fBO$)y+a-BjwMIX1{T+7p7hK7b`XJ=$&WblwMZ{OY=D;$M= zpg}*L`o!%fGV=2+Kgb2}91dRn`8j23W23w3SE!!vb9uTBztpD1J3c-x)-JEDu7+YJ z{C6L@b!*(6`Cf39S$7OXS}gUe)t)%`sHKTSg|*IbV#t(f2?=#Bny$c`>|jKt(&)nyvb7Yq z>|V{G4A#_odRDuT{!I?*wB{W>y{4Z(OWwGpsRfhU@Sw%ym%mC73*y(!CU4W)tU`#r zJs&jC&KVSA5Y!B4yf7lP?h&68mo5L?lZsva)>G403FY;gPo@*O4EyGlof+FuV(Us` zYmYouNVqX;AHJWPh?rPAJkdXU^TL(`DN9RB@7}%Rb6&fy!8jo~WE`ysF-J#72o52a z4HbQT5`1LHYeBuMfQ~#ND8{1m^70^C5exfxiHd$6NPY5HDaHL{-#Adk!eY&B-un-v z^-9yO&<+!?{joxI2xu=aFPj#Lu&}VZ=;#15p(Z?d@IbROsUD7ohW->jT;E;$>FQ0$ zFYs9#b1ml(K2ninr7Egp`nlQuUuA$h75YUHXd zTD6sZ{P;0~^ofO)mCnz1`&NTWknW z--{#di+EFl5DBQ zX7?L+ahkWGK4)iV&#cJ|(+@wJEHhXiOt-hROo)!Id_GyWvSQZkJ@wK2v2xnj>KCX( zJ{;`q^t7}myG?u5BonX+V8<+*3Y~3aV-j;S>Q>V}ek^TTju68MSy}7<0J+21*qF#v zjQc~WV^GK$_MISrf2JZED`T5IaaX$mqv#q`s=rQO%JC;9#Y$4eCpBmq?#}%E>lOIE z218DFZrb2V~cilSZwtIwU8vvQtv{xn79q1TV<-hFNqziQ@twP_wp2;z(JN2hvh)C)9RhM%RlqJ%fe-mWP%?n zD+{HAUDtPagisDU(@`gEFr*bZS~bZMHb(IMrQ+(1w7GoVP7G`rDpt(wY3o;)SPO42uZeOaBk!i%T=T97(qjAd1NY0z%O@{?W@LR%{tNg6ZhCEP zZQKpIWuovrdCq#fnOemU+~XdEqKNwbttNigGxT}vFLFISzvSiVbK7x5vAg^p#>mKg zrKP3Y8M{Od5~GU^xviF|fgNY^AogAASd>Z(V+_P>VEw7w;t4;p9kyq&bi7PI=yt0`T>_wa!3Ytoai4NVd+v2irA@Y_a% zaPW8)kB%y?F8jPT74GdF&39R;aX0S!o%|*^V8<<#sXiuT;<~T6q5R@XYD$Lk!q?W$ z?ts*!XDCw~pz*`>ykvk6bn1DWCIJtn-a+{!VKb4q4)YcOYCGR6mp{Em=Jk2M;z6bVdvTBFe@qL4$EPY#x)BS;+G+_bNT2K)L- zj5uYypUB5EK43SK(bxYmQL0xMpTKO;W5!-cr}pN}8x+x$CvLm#ka3yyD=I5LQ&vLb zEM;zPeo`qzorM~&LX3YWs8g6DJPS%JeDcBZv676;Cp{b-9OyzJZ(@b}zN^U|-P{`O zBNOzfHtD!SO#FfC`NTrxsN-@cA208iD?O1<9Hje;&HQxWBcL`2`usgP-kG^LJ92h& zoBTCB(K9#a1ED@v69$MVA>qC&TBhvcdu#EnKPnCiI$By2QHhAQq=WiZ=m;P)9K*JA zULU}04p53QgU*hRM9Iu7CpvogzLD23fBrC4U}$J)o>FQkx#z1_TxL#IhWgFnvX?FYG+q^;zbmYOC^gMprx<&mQX^;uvN!S!B$HvZ}e&& zYv)J9?@1%y(pGb5&y|#v8vnH26PMDy%v=l&?3HR8xZ2}tAyFo&7ZXRH(#vA=zP!C7 zM?dsNWqOq7%3CP;LDrH}b&vYdQ*E`W2dNDKp$v$y*A|f{k9jp{hX>lMdOdB8!~-G$M<{848u0GVmAxirelFfR4Zl41VAN5a=kVWy}dywCt&&iF9jJ!sp#gqYFG)gIi4<0<#(xQozizMM=_dK>O z5}A5~Nqly^v%R<1=5b`>l`TyZdwrD&7JyU2!^01Th)8BQ2am{uzdWsXSkyN1c7>0J z4taWJMmd@Db{8_#Pkw@c{)T_ErdT>!3Nq1g!EK?p2i2Pmftb-dmM z1doY{=}4w2tw1w6HPs-Wz#K^~41vxj8&g(R2B-!KjH--`OuCTwe#Ki@wDCfLyw|Tk zTc&$kJbz9MyXO7-K>I97DJePX7)ZJ1mX@$0O+Eptu7L~)6`nC-8AgJ1LC=XVU$Rv@ zBcN1qYv~41pqrX5w_RO6;o#t4VCWqf*d0|Cw)-Y9o`*|LKDg-68A-034s~XBv6famkN~hF6ciNX*AxM00Qllc53(mWxBDkF;s#|AoeCPufqc5 zqM4fKf0jDJfKAx0Uy1;T^J3?}!qo*&L z58K<_ePL!+ZTtn5G?ImuwxX)4IBmeL(XZlcuQgWvvCS6a9xw6q5F9-2DSsAtA#ZEdry%H=AQsYG9`4$8^NrKDW4 zP$nqQ5*1i#pE22XL=J@y1Kf8gMu(g`QJ|~A-<;YIYU!*28kcI39W{v zpTJ5SEOnfmoB$29gw#n^!pDuSr4yHbl4xb$Pc-K$LWqYC&PzO1$!>6Gk z1m)q`(e|yo1h(HRG9gI#Ybj#8y}Z2vhbbdaKJ=6EIZ+>B8$Erxxv(ITKYGvyEM7yy zD^XEV*vF7bi;Ee8zYNd0L)C%p<@mjDwc>LC8jF5C;%Y0Lm`BN*$k@^G0I+qV%cj5Z zgV3-rqc)$NwY4`0c5ZIyc+(s7Uns6OLb=J2jYan#nw*@kc|Mt+?o+h^tg`#ao`$yEcSVK-6o z6z~YI^BM-31P`zru&u|>a8-GLp@VWKAtlw>)m02+DRq(pO{&s$AF=B63Qhrp96Z0R z>M~iVwt0#lXkxpe6Nyhu1Yu!p(I_M&1Xd@Z+YHnONZeJscD41;Qvi^p2!x7f4;?Es z*Zgj~`ldm40LAJ%f3Ef>jE;;jGBPF`A1Yq_XmpjQ#e>M(O7tDtn5wcI`?R^`(pS$d zr!1mgQCnM9c#k8t`{#IZ!r7f8s%Wd8_jJ(0pi}z#`a;5h{_VP$!6|+n9)9iG*xs(1 z`U&f2(CA`)b$J2tM#g0`2EA2*Dr*fHE8tRCtVlvOlbKq(Vy)74;#UG`X=!r+D(!#N zS6U5IH9JDn@aRy{(6E4O0&suAlE7TAU$(2sFG+`gq2t?8fbZ71sxAihFf+_2J>+%J0(?tQO{9zkhQP)LXC;@}mZ>uCDUu z*#Y<|U44n}uTu2wrf9ClYsS8J_;MrP#)_z7!_Cp1ot-+{DYg6$IY(INo1BNElSKnp zos7!!h#Os2V-=^ZN-J$M!^;|&cvZWwx^T2L=KFO@CJP1$Z3Rpzo#>-t3q%a5N0%|t_ zO9o?+=b5yFoCYe5-Fz#lc5O+V4x=Gl0OS(;x#m+Sa&&QWMMRdiwj~<$Ew0-W9bxwm z%J(5-V_;%JrNu!YD&R7FF3zkY2_k^fx9A56hOkI6e4@918N>E5tMA#G{T zGsJcS;NRQZi!6>Tg9NnlEgBme8>*Kl5YR{WbI%%JHx{cELO$~VI0%@4TW_`lOX%d; zaF!&*o$g1o+reKNd@ejdTT)dWhF$KkII3B!#iUzZpoIL_=WO#aR3wNZ5(F@Cq>y*$ z>9@Xy;G&|U&eYihKEVk7QaGAyOG86*pT*F{)s>Xjf#M$Zev2R62FPl!kL8`(c`tU?=-ssuU;^h?7n{Sz6gQbD{=p1}GO;NfxhY~aUG zLxHxix1X=FRL)gPijUXQ)h&ATdIHgOH6A5ZX3+E!+S51H&y0;TSN%2rB*kLx-L|>| zDoC+4K>=t_!0++q_;;H{0E(fd1?rvg@ncJXtL}xwe=D80#^|DDTp(1uy)WP%D|Mi{ znr}IOoIr*w<-9ROnX5*JKrc|;xD&MWz0y=Hb01m+_X9neSU!jaBcD@A3dG9lDnPVI z8>2!EkmBOxT;XlAz5$>i?N&bUSuZxyo-_l_0l<%5t?lP*G64aB{l}0=puaW;o)Yv4 z7lFcfKb5X$g%uSlU0#J^nL~sKn#Ye-18!PzCQIaL6nwiEQOh1e%ff>!8ybAi0Xq&K z!Ja9k7=1~j%E%~AAEd9FImkvKo2ElKWZUOE^g9Ve&pCMBl^0bbsE0Ej?f z!Y*|+P_4bpHJ$V*Jo`(0)Z!DS^;b!~;MUAvUo;8o^)Yu2Mmpl7-M0v_i9GajrPsM@ zRFasEo^tnItHdgZ-@g+CTol~*YX1iwY%$m@nk*b&Oe!t<5)S|+EqY)9!36Z+yw~r3 zc*T@$Z9>8%Y>WeQeL1<%hK5tX{|BCKplUH_mwmNs^|?syU4@_2drAK+EGz&yPZjtQ z9v)~mUN-jjdq4<0xWBC|D_i;TV=|km)X_SCH2x<~mifN{#D$o^O6cwI9ZphMgPL<- zQ2hQq9*{(kyO-H7bYEJJ?U!&`RWTbje|yFX`{0TFoIs|^#^z>Hax&C5DGS)nmX`q@C&$J84Hz5F1SIm+*><^mU^C=M zK;OVpfizb6iweZ@f4u+_RH_EWABYGEf6g{dj*hD5s$Br-54Dn(iOJQ;32?++42%>G z%X|0maB*>6Z9$6&26hfq6~GODj*nYC|1e+j!SapI%sk=Z;^O4gU{08Hy?6r^@#yE2 zGZZW!YhD4oD%Gpgpx4yZoqn9|H3Fy+fDzo-rdr5K%WIZNNELDE>GSY=*sb!pBTzk1 z<9#U6#d6hBg?)YY7e2%J277u!-@b+NV$~c`#}Be!Oz$cXq?7eLY;3B3c!b^S-p9qk z)j9H}Y`x+D0OU_mFhnINm>T+{fXh=hCWm=RlO8`#q3p;H800<(0p^7Dl@*ojp$-$a z*56dI-TSHK^xhevA7!X_;bO~S>DDoQSd3#;mi~^73|Jw*m?SbZ33CRNVLtc*h0IlJ_fSdU{V%9_5X0l6XhNM6KP9GdAJ|eI{KqYwHlVshOGI?#;0Ns%X&JeDCeOt9^gPfft@r=F8bOUveXKeqLTe zBBI^tny_TwcW581Q(Qw;qcufEZv=cE8XW~ne)+&1^4u63081j|c1rO#=qNXve?0Z_ zYSv-Aga9h6(7NDx3{iaH^t88Z%R$SdBNQL9(TS3;ii(QCp12=30~HmdNZ3MuVAD=a zOh82?74kZH_kg2Xy=-o^zu@!j?q+VKKeD_2Z(fKmIF z)}WUH>jA(uc&{9jgx3Ms6Run1x(lzvAO}H#prfS+n-L;+QA6)xnYE$1?NpRHr^g2n!Jfm~T%Tublen=Z6Ha0CWKm0o5~ zDvYjf$cBVh#fh<#c%AFCI19G6G5}^en zF#Y*I|Gp8=Y`||bMhm4H$S!;aEkN2lIVX>;GJs3=aCb*RLwgtqLhz)r)3>W_b{0dZB` zcUe>?g~9lttpB=keD&*Vd%OSOI`{;F|M8Nr2n(lon1K3zH>lmCggOa64&*%`4TRF| zjg5yv7-?QeRG@(!3cq{4aGpt{c;LUy3_oyi#Cia0Ih!qwb^m?>#Q1@GGh7-r%J3(r ztBhN#D=VPUC;xf|65`xPb9qV04!E4Y{(dNrY01fhxrL0GI;X(9=CPl$mU{N*+#W=B=jJ}I#G zI!F3%8^J^|D0GgYygV`|4w32TdhNKXL{e~VoUhCp-6Xnl0Tgo!1?BSPGxF2{Jb4NH zxK;LsCGjU{+b<`M?~x}FIaN8$>DE;V-zPJSGJ3Xpa%0lZkOoh0f2V4GEwANOYT~aq z17>pOCj0@S(ilNvWom`3XFYatS5As81#SFjf!Q9hRhOl=bSb66jz{nIaFQHTB%OTP zN>6%y98X&{?H!dy9y6Bn8BG>NY{QtHEsrGx!M>8Q*z&FSK+}|!gDm-QN?7?-mbIY? zGF@B`bfTDK0*Qm`Kt;%T-!CIO=zg5O;P~O>4AqFo%)%m6A`9TGTJLSOqr<9?9|7S7 z1>MqYt_BLtm5DqZgw<#nsIKCQ>J#qg!ClJ@_4T&1jYq)Cx`!1PZ$r^9R3l(!W*$4U zKt{W#(Y7)Cv6u$4TMpR)a41deE2ylX??Gz)`ST|z5R>*b9z!~KcWxOTSE#-?C^2X{ zKK;E8CG9pkx`UGwuqQSpPCfK-ceIV|+&N`r<>cDAe3Ge%yn+ifia>NKdWIU-0eW5g zBa;27=`$`pXw&fraz{74gyu&^)G}3mKu&CF!^|NgS$ggURH9BHt=|1%HiD0ZMvV!?YT&vG z=EzBv4;MZo9~o2dGp~JK|IKx8PK!Q{KfZRl(ll7DFo$4p$X_Y{xx%HTxkb+kJ2EnI zw9MBG4r-hR{U9BZSpOI&3k#b0zCh~?+Gw^o0r|N1Yh%tC3K}-~(x#Q+ar8uCN({_& zbo98PkJN(1ln^MgF(mi$6)3)ScTePAH5TiM@D>m^cr6M0;!v|!|3nBDztI)7T(ZIy zRv$sfJ5Bt?cw(7)TW%0bbz#hRTD52>D3~*FXy?9!BOg15L}A0m+B}LfxvZJYr9E^1 zG+yZ+EvL)Uk_QAcCpRd?Hp<&B`MuAoHRwy(LzHM@Nd-Ni_gIDE$i!3%WGy%pAOt&1 zn}Fur-P>lm&xYY2Ex00^4ySl**Coqm(4sqnwS2rKH??xL?8 znE4v?0I>8TgJ|cmfMy!AGvAMBw{~Vi695A2_~+DkU6@3cpPwH+F}!ShYpZD0u@sFW zaNr+7_vv54t|Tr}@Mw7N@zFmDmpH8B3yLS` zRPa`^Is5Q_l1>1*OlVL-jXH|qy#`vX?X2T3vw{~aBBW!K6hCL9^?5WU&v_8Iazo85 zoLJsJ$V8O~r5~H3Ke>zN5;`$}w{xU<=Mk+?5CUEGvEEquZ(o*e(5rmt+M^e1ovZmC zYR>QFGiX|cMUG5kbUenL>i9N7h`BBM@p9*90QJ&tG0kms$k%ZxDJjsrURWH1WG+cH z3}kG7e?PFuK)#B`U7a0G8a=}4&XNoR$19nz4~U;Vzz;4PfGA7L!U8>TEl|WF6zF&F zX7A!}zJSzkQt1v15x^=eG6D2^_sR_KIs)GgyrL?31AT1wi}_YTldtGroj@{_KCS8; z7+`+*(DZ0)e9Jt#=I70fO*}ljg*yx=qE;oysL4;WrC%uK(6xt5G_aE)Wz^6yGUB15 z08y!J)Id}%21XHDM#i!FvU0iH_Ao;0bnHA8T979*dK+Y7z+=mWnO%?X?7Sb938H1+ zVDIGQq&BT)?y9*-VPF@BSL&H=CWVLBkD0zcDi+}n0~vQ2=+j!>Hq}K8UI0oE7Z(Qw!9Xyf)cigY7dW6{D{?V?MbW)2l#V5w zorlWe#Nl_pLFvTn5&(p&{tjXcOEw0)q2KH5jfk6Hf<33$wWeha_|PI0A8;B0V{ZsP zLdCYb3N*1DCYoAW+;V6b7#L>kNyoAw3FT5)!~);TQp36CZx-gr5#cK)YK#>awx2)PH#!(K9b92zjSQ>KK!scC3kLXU)-D> z5rL{ro;mfDg6RgO&yJ&{O5J5nrhM;|d$GpD2{)C^OS+^R!+!PGeT(6&RfF=3*jvrKWqlg0V{odbSTDf+kRUAxZ zm>3wknhFJQr(LdKs{;{p*vV3YIiX62@yJEKrBa76hWfdkRop!H%uU!sP3O<$Zz#bcP^mD$M#fCL!;YvWL;9?Sp-d z?pGAOZYh-|^~uWQv1a5yWejkCFZMocXt99E$h^pqR&3+DD^+pSv8M0GD$>F(3G+Bw zru4U-vih$iG|Cl21w9n|W+c-EWX78wc8^L^(a8;ncJoP`kP?yUPfz^((J(qW$-~Mz z)ZU(zld}SdwT3|JU;DG-B6LD5My=Q4F%Zx4e{!G7Qsab3jEuAtbbucV7fcPKqc!a*?u?$kh6Li<@I+6t{Ur@kX~6V}oz zvv0IWNYzTLX4O+s)O_yy3qXBADy=>0lCcW}2>9WH9wc%Fg?G$tw_NyBzbtZ^4O78H}|XNg`xsw}2X?(YTtA$)c|IN*`JLo?fmRy{raZ zJnI7tTye7b5%%(mYB6fVS|_fs(n*QmsNGUX z&{a|KyZ_s^#O9I6UBCfC>5&QC|{VP<1rrf*gD0^`Q zzmRG6*1zk&hIjw^5C%(X?vtBa5Rz<33S^Pe`J><|0FM@c!JwP@h)sw9B}-O9Xn3ij z7j`hgdJ~tL>U!bP%YvlD!^t^TFaC(mb`rN|!j`yUG`)N6Q^T|$BcwMn6j|BW zUh^HoutyOBB{M%?TVEdoCKk3t!2q_30;Em2)R$$kDO>JvDfL1Pfc#X^U@T51$neb{ zPoymAYg9>c&3yF)8OfdJn;APn*f{Fs$}J>6t*{Q0ZnKZ^ySI?`xZ~u4zO=>f%2Z|5 zxS+w{Nm^DG6>~zE{f8PCBP67Z((GX?Tke@}-=M=N$UVP_9jPmR3-aOvKvSuAM!Nl!3?0P8m&TGA{{4*Btnd~4Py*jZz#}XsDs2PTYtgo4S9%g zq9YYB5W)o%aMUj#!6l&!rQAR|LV~*!@&05E7lMTJ$rFkF|7qIg|1t#g|NUz=-9}_C zs(%J>bh-Q~bQ|wpUltNl^Ng;f2zn)X0a~~{@mrjKr(T9gO@WUf_c<~Cox&(Ae6`nh z1zdumq~xuyuQTXW?CIZP{QJTJ{A(u`9^RP1V`x9OK_7#08sHBd70^Xu{VV<(c411c zDNq0&37UA|Pe8V!6hu$H(cJ&<6%1uH6u$#mE-~>tbk-I^ELK$%G${Z4ErX_CR|C~3 z8DdipsFNSJM8wB9Mcz}(5k+x&He{Bn3SIi)YVReg3-R z;>LPZ!xf)_FmpRdY$y1$%y3?(NhLxI_K~IeJTfN{X0R8`v*aNsx2XU7_U72?TY-Sh zBAf1~M@Jh(z9c2F1p~uequKj!LHH4sg=u61m7_K%J>*jcRvUl$#yab)HHWXS^Sc`sN!@^L#c&cCO92iXfD*fN?pCLlLDIy(a;2n`i9^gxnJqo1CfG((pK zR&7QGY?s`s@=pe?BidsHv#| z+ij?-D!M}@i?ep;e@+RhkP_G$;O+r6DFQ)XU9Atj9Gns2t481vAKxk1E7j*stgLvU zT0w|r78Jal{$^1HO`z*u2+-dm6bN(_-3Uh~Cnq zNEup~J(UVc0tefh>f2}6z#_HF+|G^^7gyYSb8QVqcI?1#(FUCPAFx=!IEwS--&5$5 zm&KAb)3TyFA8*Md9P9A`yrYQ)`REM-{GQ*NUpX5ZlFfns(r7#N@mkN=E^q79`)>OZ z+FMvR@X-|zfR+f|lw$rU=*_To4#6)<6$tPg1h>KE18|wafr>$>@?1G3H5Jf#4f!ZI zNI?UndGts&cLcccYoF=SdC;c+zmL#LyUx$y?@8rsq0950LWz$Pw)d82#5djG0wXWM*Abx;U2x6i7OEAN25p&%W zEJbs6{+*IS@>hpG4&Gg-n*86ot85_<5f3i6Dj^XF z11^BduJv(;MKPONJ@Am-BjH8dzwZXpW~9*BTR8z3(m4W0-nD@k44kffk{40b4PbFR zJapmVsRN1WHZF|{Dfot>VXUp&44iY|hQt(3kOIIC9}UU$x8Dt9(1y9~=YDQ)>y3Wi za}3e=_wni8Hdw!25}RMtk*BRbCY6Nt4_Gti1A-4ASx_FX7djAx)mZ+iwfDYX$bvcf ziOmyk3$QWJHT7|k@PfotC)jF#av@4+LnwX&A$#l;o_k7j3QC&+0)27tZ+ z5c|oiU({k&|Jwp!%k2qm+?X>M6D@3Q1t4|7x$I`RgTz$Lvq;ki-5ecHfAz9}Ukdzl zj}Yh}9fu-7G3x}W1~jf8kg!42RZJHmrTn^l0Qe2ugFB$0TMcJ{YP{(bdR7QiNe+wG zw#AatQjo=sbaV)biNlOAz5LV)Z5vIPpx*?mDLN(a+@P1Wc%75v7|ok|VWL!LtJkzk87{$hu*?n>wWj=DzI+BG07aMMkLln*QR01rcX#%+uqO3E2YCw(4Tzl!5YpWFL19k< z*aFp$U6+64m&8A!n3J>fK?0NuUX9|9smX&DCMNALk>rm_s1#cS^F3gzKdC&U==(o3 zvMS~dlS+MNY4mP0b^%U}1obiG5B+J}cF7_XFzLYx4#AP!UQkkq<`~nKyA~b5TF~3u z3%hR{yHeW?5(&7=z%a_o#RbDw!!Vq%)oqD1ee+0pY-mWu($X?e#lc}8Dk2zyxZ%!W z7AJo9;q{%)+40{BT(qR3R@-cCdD5D6PO5}+yfyVuP*9zMHap@VnZ3~0cb#5biWnWM z3Ihvk9_&wGrjm(y-)#mQ4=J0;SJ?LZY~W4@@e&MtqjT@$A1`%a!6_WN717YpNP2Ih z+>D`yF-`|s8S`S8t<#`~w*{Vkbk}4h#5h6)>!70m0RpiADlXVlA?3p?z}TUSfs!f~ zY~R~hSm|u0sF7VT@B{35cw}Vx<^s5Z;XVVTvVp8eyLF2)&<9$TOcfpVU{GPm2?=Qv zddY>n2nh)CS{{P~-LkX=s2SKwFm%Jo$*CYGcLuWzE++&x+{+iNh9)MiEeBv{1(*+d zI^35xaAeREio=-5moIKVzh{ceU#}KY@@6t+v-`mvF{{Dd9p`l>ys(Y{RLpu(V(FbD zhjdn#jrDM1Ots1(2t?@JECy0e&-dCM2EGLUEj%HRzraVF_~8Szp#of7H90vbET$si zERSSy@@Hwe1hFYyfXx8~q(rYSqIVS%*qh+shk+|jufVz6*5)fBf&@{)=S=fLnmNG; z2JJwb2124mhcS)EK23&ty2-8ltO5KHAPPYL^h#h3Or>sXeGgK!a)+%1$Ogfq4^Elh zKV`jiTkB98#sU>W&wfh$rFs~sl)?*kt&lCImG$-W^KE`BUsCu=q!*X(R zzy$9_9og0NryNLh`W>rRCMqgXDzwcofi;{h4S1tagqD|AhZfHeo(YV_s6-~i$XOzI zqX`IJZjL+>O812_Lcd;AQt~b`66@~WCtx)N$CX14H2#1P5}@{^3%p_nef!+aV4Duw z7C}qPb*LI@!wW$606-N*@H!_(MeT#nzRl~DothfO0{oh3j~!4F;KZ@no8XbTKBc`MQLVitU8}oX9&V94Es2^ zy4r0YZ~8nSL3-WRruKF*uMYjucUlGPcXWl_-2T92FL_;i!P11h<#wPk+!}Al zgGhy8IFORs_f@YKeoWJwfDpU|rCdaS;#KTnQjwPkl-1w=7}8bR!d`c!s~5I|FsTH# z0eC84{fMH!2K*waV^uxCNBGf*;p6oW{$p$?rmimhO7Txmh$8xr0P$BcjNrQBl-J%V z6uUm*MnPdbg?;Z_tM?31XV{XXxnf<9S8sblJJal4B%-9!QYL)NOISM%PMuX>dWoEi zFgbjWSFaW|C|~^3W{5QX;m}1&6w74gI>*-TXvTRW(ovu80r9?q8NibS1s)NB9QRx#HHlrZ{53B`{2P*p~ddPGiU&&{UTmV zQQ(BU3lE>~?Gbc8_!7T+6DhoNYKo7O6HnL&stc$dj&F=|)rL1+a@AxJD2Dll7ryj; zU)U&>J}gVpfy1g1?7M(6fKgkLq|1o^2e=oF5+I}`Qiz2wi`k4Y%B5j4!@un^^piHz z_@8!H+22ue;9SUs{y-_ejpvmZd|QDAJ#b12G{r`D_m7cFG4U~RP_Ri!TcFtcQ|#}R zcpR5E(vw$=m59Yq|Ni|ORDp94S77d-{p{%a_6kC3{VG0wWaq4oP9Q2@5=>i}ko#u# z5e8J^cO|R*8-f;Qm)6(o0ELirfF*YCd!@MG-)tN|jhy^6vagj?LU|J!i!gNyeCFbt ze=7S}jRLEbLG&k1)}f689(?^1{|S4@fc4C@vN3>g0dZR%;jo{4qnB44I}~GzdB-IAQ0ojs6V0?Qp(9-gY> zKcK&t(-W#i$FIA}dW00Cl)tR8cGS6^BlCjScc~i|--p0Kfw@E|5ehT` z#y%NPDe#Y8`v0J?S{=I^8bf^wkp5b4pB5K&)hJStZ;#@~iR6+*e?(2KQYfa=Mt1!< zI=zevHnc&3GtvAF*WhnH@BX-Un{FakluX*C3oy=VRR0UOc$cU~F|th?h_TD}<(y3t}6 ztVdVHgQEk3gV$38pliXU*B{gU{RhR_p+G1Ka&y-v4e~oId@3lQt)E8f$Cz`0IVC>D`7etT(e*{U}j_lXA~zF7fd-SH|Upn6jjJA6Z)>&a#l5X^gQIdKvf( zI5+gT0Mi!@bVoeK)q}YD#lG4oGN}cta#=$!aBZB0v258`n%U-8xN1Rg0iQe-CNYcw zSpmd{SZ%c#FM9hHJz6I4TBf}2{8~IG0VMzHoCEVwo>Tz?R-!n1GH&yzi1QsxOz6zu zdsy5nKSQc&bw3dE-b6n_Q!9k2iTtcAuw1u~ja5Uk&}ZhMqm%U{QZX%3@fLd)SHz)d z6Tihne=Kg2I&KHO|GNhPh{B*WB6tdkY~MM4&=3n9|C6lYHMnk=;=RJ zSC5U3_I7tSxNPDu8~Ln!!)Dr9xQmC5F8aG5hW*ucFc`qMoU8jaJtBVTvIg$UtHD z{fv?l44-^hFTX#sqy%}sFwo_*u)X~p29-B9bl`we+2m$VPEHOSL{wCUsk%eby=0>1 z&mtUEH8m~Z+l01}nNl4t2>e;i-z4JVmbiSL8XEe*(uaoL0l)-26trYC+}y{I-o}0% zYAOY%%dcKI;OUxc-aZN>n^R(XRqnXzag<+N?vfrARpEZH^uM#916Au4UNEWzy78I!FkKw==IwA&z~f~7Xeo3>-zz&Win;a zLiX1x%L!XmcOEMwA`pmA>%VIz@0O0>l3LgHL3Z{Ph6dF}Nv!I-?AP5sZ%({X~G;wm6WA3qA&V9~s^8Qi#i?tHvN7 zcV7YU3dK<$_$nM6sN866Fa8PV3>ZaY19ly}oPmLXkQAUsNHG!sJ0tZIp>GV$8YKWa zTpERI?qL9PuF;hNJb>Qy5E)rwTn3#HI4GHFh1Z@xus^{wX#&*T)a14~Vh(yeOoETG zDuwU!4kio96y6Tjd=ok0Visp{fD4f0K;i&c0;<4gCjbGF_RB`O#AOV~6_PnO;g+Dm z0bxvDPR@iq35-|X>c_DCbqj}vhTsyxo4H`M4_5B%e&jfKRX6JAfuA|{&l>% z^lsM5JS!1nQorH))UzV*nX-JL+R+9Z4-XG5EjaM#d3nDN4q|n}H)8?hr!@$Ehl2vo zBoaCsIDilI_rDn=c5u)|{+NbF?K#ddaIADqKzo<^!xu^%EO+hAHbDT|LgIv70puh& zGU)x=Lxhf0Gx#G&OIr^KCe*q$#e>Fbv-Cy`&ryGwD4S|nCL%3L(R(Szbmb)Rt?D~s zwvdh6@4h+S_CI?oj4yQq-;DI7h2IT}ohgsvvkTRQM$W9xF(y63- zjCYNDZ13$}*R`&g=RD^;<}r_%VF+8LP~v)NpLAarv$>Vk(7oVy!UbBKwkP10Dfg_W7E%905(!_pBys;fKT1#006u|QO2n?lm?!d@^xQ;RiHf=;KegYeyN=Q z5^$M>iXbnDgX4VF%CiR6BO9b5>z>M1x1T;ZeecATEaZOZRv!~XhL9V#bOad(5NZJN z0C2n6t0aW0Uz|^UnnK%BdRqwdc}}%nzJ6b8}24#VIkij^Fv_=_E`>z$0qT-G^ z(8UG-BvmR<=Yv3G>U7N!D#u3g_Jgz`kGBStwb;}vdrq=<(8N&cdZ9(nvU)KiCME_b z(AYj-0rCYT@9hxk=UA*=HQ$_}Cz5aBb^r@~pv4@-R~tHXJCbmBT9$?QY=*P}cufH8 zy;!0WhV<*^<~1=1pw4@VDwjXB|her9TLlmeqsV;L5_Ya!#j!;n*i&=ABt(LlpZyY9-KNJf5{^!YoFW409fu{LeakgDp!nyZn z+6brL%llF25_pV0Eq%xskis7oTEf!5y$qR1^vcCAJ-AAP@)W4JAbL;@BtH%J-2sq2 z07}k5U*cJ*=lNL_UdszR^yvGl?Hez$1l3ejV6XlSiU7NL-v!odUkT*ir<+~m(s|Ar zbc?#o`)#6gR$0Ys)+56s4+z)46+yxlH-qVif-efHZ$P(;;L!3IP*nC$fr?2ZY}`2& zDR&sDG#Oq{6F$r1d{$fFIXJsnyV*icAoX_i#_v%5tbY~8a`*q{jt=V<`9)IfF3PbG zYXT~2`ugSMI^@iBi6g#?SE%h-Uw_qx00F8q4NEz>Xrc$e$`gh*{f*h#)cEa!2fTJd z`V$(h(YuC}{s%|`FF>puwHsm;V;Vq8gDhH34)7i!ZhGyF3`lfzfS&n@oL zcn+v)+Vvv9R#Bwg;hzUuBy6g7bJ0dh%F4NFtso--xOBsfslH}vLQ|T~BvhgocYZB^59gM@#FS6Ww9E^JT{a@z=I??|f36)Q# z#yom)%Z56c`7zwnC~mRncvM1pBL2H@QZTX$+w_iNZmi1gt31o-u=Ps18dst*?&_b8SE%%{v2lc1Ij7DIP zW|`cdDM%KSXISZ&J(8b>L>znp0p4fKLNJ%xIj3gnVyiQ-+YYEfH^}A*B)lSc)c9AQ zn=I-0j=n=iy<VN$-}gl)uRG2#&(qy;0ytp>WGXNvHL2m*BI`RSe=BM~=!rSM9Ip z98f`Bh<5;%a2osWS5Z-XfRhRsC4rj^Jj4#V>Ms578|hxt7&o5Xu&4PxrF-9NL-8%- z4N6>ZN?&9}V5f3pW>c9)Z@@j>L=Nn-i(&VgfnEq&qxTOg2$v^uNA_Q{i`>m0RTAsqjpBlGzSEVVGP)lZ>Ms8c%0xJz>0K!*|df`F7Sk&)+z z-JZA{#7hmPQrI6IsT9eB$a&VZ&W|Ep?A}jX!FC#VbJ&1L#FPMm+~JjF=3n*wL0YM> zqtM9>mzM_x$(w5eWb1>eOOy$!aa@z`4@WUh(bG&BfO|8l@|Gl!{??6mcw>JyTsi@Z z;K2M2p#z^cK8n}m-C*o#Ft_|fbu@7EuwCS&H$pa;ZE{~%R7OBul*5fXsqLk1iv7*} zx+77lCEYb4G7nvyA2#WO{z}aKiHcdzdW@y8cl{r_9W8`-?4&}H1RXeu7Y~-ikj0Nw z(`mZUW0yq~AK==}UU90I0ONu0p6&$PGmGu}6|YwTi~+DsnL=UW$R3{k`N_QSZsWZf zYfp50vF(42mBEZJ{(Skqkz-g|f?Z~sJSy=+ej0YnT~A}0iFa{=S*N@JDtkcRAT)F+?t8C-lH2+2 z+i3aZ&5+b}x-^9YNTd_3TW-Upyh% z^LGAl5tO>OW2>4V`=Uhd23QZ2{BqA_G+G9#y85wF^XdBedzFCOh%wv-Yb&($N>=)J zfIkxek{J4@u zvoDbtaFuxxj4^;HCF? zek>n(@gtQ9Hhlm&L1JkK7Gij0WTI^sA7}xLRM}>ZQvbzk)GdOJpgH05ZKMnq1P*Oi zkxP%@QTUY}9upH;xi8S5E0&0^D3M3lqBtX!MCH5b7kQAv`O2o>aiFIsDFQn-CZ=D0 znpjz#VAK2vOkR}@kA#@`6FNK<4dhdy`ri`Xjsd}wJQYG~+b;zLgfUYzEtOQTf=f8> zu015oSGZ-9mdvcHJZhv8AxPOxZdJ<(+LUn78W7RUC%CRbV-i#a3aAe8JT`pcOccPh zhI&O|-JWVn!$UwLQ6U7ge-&LofrUc%6GE)Ds(H%YZLaReC00{HtLlww9e(Isk5e^* zMnd-Ttmmi6L!ZTFlCfbgF?@Q&&20fnmyn184rH4B2I&Bm@?>3k_s4CoV`JB!9ho8I zKtRLkU$}D1;qp}!6hZ%&1}HmBfh275ecBot6Ud(d-xPX_#xhrqg`sB z!b#zlmzI|YmgiVp+w$T0Q@+UiYwXth_lErE#Ms!_-SqE(U={+9Id0pnX!KV)>V9&5 ze&?Sa1PaOe}}{dfS}O-^Xdx0l#%gRMk4?~Lz=Fgl|Lf$_>(s$@1u`(Jbir7_~$9MM40Z{ zYr_1>%y8@`W#W74YzoT6$S}cs1F%|Lw5vc$hy#sRk;0~o2PiH)?quq9E)YBBzMT7J z94#BGcUzf(z*oJLFVV&DW(GgAZ@gh?e`Y*7!DPM?!^26dmV=TrGpHL=V?x44pPcXyxKxEUycZ9@|qB10xp&{RKrNva>Lx;f=ka(>K0dB^W$H4N9Q+Q-16{2I4K9D z1W^jA=HI4-Lblu&xRxalX0*PF;`NH+)w3%*LO|#N4IM&+HF!kiCd|9cw^CS^{O%=k z7p&0BGT%7N-P}m&#KmbSu(Tz6;QLVb!^hV&{UrFz0S_RL0sr)P1`p_J(#S_%7c{o& zP&45}T?@U;pU&W;L^K|F$(sqjt~1 z`vFye?^N;q04QrMMlv06fckTIn1%-FXL*IpP)mk&?=}1clgFy}E$;nXbBWa*@r0~wxZGme~ zb-EzFwDtgGrZBCv@k_(h`nZG*9**wxMoD4QdOTvk6{GUnSp6Q3|67_iSq+g&0E{j+ zvoQilgd_(B2H@2=RH;Ly-Teo8?*pCrdFOY3E28Kd{n|tBnT2rLW^6ij{1B4}E5${~ zQ9Lvbb)Y+i)_WD?5?KdN-^1dc0x_%{$bi^XSyoP?@21d69L*9|GZKWojCv7H zcJ;d*a*hV|MHNB)-1H9g!OKrbXOx#KMf`&vqY}{G_L>ZY+_xg9pg^Rg>@iIXMUG_$lUpvEjKD+@?bhtPis9g@q-7u38H zEsMiEeY4#!e*9*On?FbGu(6?{PHA`mSb$L{0}DycHe%qKAHY)D^?)ALks+U@65NBF z+_X&Y#?8ZJtM+)_h#{Hdog^NFYfAqO8(h(*pG^<6}cnJ zzg*$=gWiU^wd!T?V;kV`0U47aY6dRQGP#1HB9;%(#~R>AAmq+w5xy54;!qu&9HxA?_~3|xi2nP$j=Ucw#6@y+eTb2s2j z0VEElqvP&gS1;<}aR!}Syv99Ako>cgGo##+bEMD!!VJ_DA;Lj+4=ni|rT5ZE&6U!- z(THJ(5G;q9=KbEc>TzymBTyu!k;Q41Z9&( z2n0Pr+2IuNzUfn9q9+jSKuzQnib!pgG$=nr1>WicbuWeS-Xq8UlWI}ameb`zM-Nys z*RSIoMcVIt1gi)AhffC1CkLAyq}NcA@IG+hBNZF%?d{>zr{YxZL^e`Hh~Ly+ue=?$ zmTlJl#|6M{2HJzJC90kW!>!Na6|pPA1w=;URZ28LykgwM4EWcZJpIPU)wz*w*mmv( zU=}FuUfCiC-JWN*P(^|?4~eM(bL^4!H!oL+AwV^5@Lb?2WWS?xkb$iJx`HZl11yzi z{Ee>*cC$%lykQ*H6Wlj=A@VdI!I9O6i_8V(DnJh?PQrs|J-wFiq1XIiaq(R^R@4{Q z#7-ONzkK;}vRmjWI3H&VExIoA@s7ZLbNIJ`LQMda$U*7k54TnyPK$qgZ{8Uu;ui=J zXKCh5c4E`O)0@0ss#vgdF>U74j6jv{`22 zU&R#bDsS&;>73=lU0t|a==Cmc2B+u#gyOLCpA9hy$xO5%NKM76)(Jm)&s?gkb0AiGrHtlSH&mR?@9~D9x>ey*~g<9z76=Ofk zG)Cq74=O+Vc!F=Gi{YXN4SNNH`1?ONv?#uZV9?%ypl-Rwzi!7Fxk68-19ekz61h};zD^ZBW_JDl=7-e~*pgpH)zB_K(A} z3Ru3NaJUYa0};_^epIw<1G}nOo+9b4Yu$pG0nG$iE#jlvsM_~q&c6Ke_olj5oF0Xv zRn;U(<>im`kz3WmDrB`*RsSMb3Mx|y3fK*$5ON^1WCJ8>M;CLHPztaD@blJedt919 zMzYKgg)2(7)5W&0wHafKkcT*b_rpqIgn-hjcJtZA62*%3x%wPyiHV3kav64$pj&=7 zUk8z%J#QtRO*7hvpj*QwJ4*@mUD0b1v#8HXVFd4OguD=UEZ8$8Wo44_(R4<^sb;+7 zl72ZYmJ**JO8IJDEk=EPC|Xc@c4F>fLD^eV>T$po-S;QNosq8lod_ni;(|=_n<{lq zp2-^oT%yq@rZ&1pKUySMiDN?Ej$-*i>7N#vasNa@J@}_gL@n>1JpD3`t!dQ7{Nfj7 z8uRRH;C=xTCv@<~7j{V^V&V&+>*CyHj{z0~PXZ4Ds~<~1t1-~oL93$#dloycC6Ers zgZ=dC_v`GHUR%^~A9!#droAMD(!ijDuK%UxsIjJ7%lZmj3nNakeNnbg2@{^?)H%XJ zG^M8Cu^fk%Nt^^gp)P{vU%k@Fm4Jkn1#(KgaY0uLd3HP+?JlZU-~NX+0L?IWNh_0` zT46pA(hKs(aF7e_1wtezmmDva+%VZz$NwbZWAu0sUeSFI<&NYQR!Xv3X?LX9=d}xT zlnD=>fieVYX?HDt_FgXXMS#cSc0RroqO_KZm9|77T>sJ=Wp*8)cV^7*JX3DqFK%4~ zcnrwn7}*G+*|i1`izBu8XuXj(rg+XN;`Qa5j2fo>*Ze>t3V`H`D9Alb5#JAba1$ue zQFgq5_Xj=LP_aq`I0o;7W&`a)uZji}At`hJ^==+m%ATKtIb!y=~C zfRwCl1Q0O+D0np&_`m1Gze^MVJd{|=YNnz(O)g<*rU`IxuhozfcQAjhwgo~(Gl#?q0h1JORU5I7WJtsPLq-PVF2vsY) z3b}4L>-~6bJf7)b4Fu06<%?UbKwgUgU?d=QRo4CwV2X${m#b1|Vn4?B>6yek#NAA4 zk2{S`kW{o44r~;WDYz=Hb>l#+fme)TxSPv=HIuN`k8djb>engb`@sYFxpEsEn<=DB z2U`8F7(rF$CC|i{*N>%s)pJba%%~bgZMg1kBUqT3gN`BIt-Ax4Ed~Wc$Qolh{3Mu& z?+se$zSsE?^cG4K^f*^hLhnMVv%$tjy2ua=YpaeWI4mT(vmehtpKGNfcSIT;#p{b0 zT$Ghb`?cL@_)_`V>tpZba4_rK9(aRsVB1GZ>hf74ugQCc39a0zrBKA{yb*F)GOoY%u z`bnm{^&(j@kDZIju9p>_AN&*s%DX$zw~^Vq#2reM9Xk7&1#pf4WNRuambva*?p8;u z#zim1B|LI{MKyWzdF-^P91-HP|Cdt)TrIaX#&_UVzEd9orwfDtWQqaW2*{!qCwOr{ zf4bqtrAbo^_;r)w06s0pmJ-SrM!I{4rx`B=&jabtC4lV#-t<81M^O~~=l7XEoFNhHCzkW|)x0xIj9*K+9 zzk5884qDnB4i8XJ(t;~dry&%D4CJN_vOzQLDT;eIzqK7SgMd@w1%^`D@y^=;C-c~2b*8FBzHW?j-OeGZiCYIkccqjm`ETN$^Z3i7CGeamE zlI)`d^zhb|>ds5IuC^8*kG+IbGeGRVId;en9a zbQ9Ud0ipRGpv1f;zv*^=L2=r#7eSh@T9$Ji9ilv_A=dL=O^!JI4wH)}on}8m{9Wgg z01pz#{QZ$}^qwHNTYGl23~+DQZ$Px+nUK?2;NAL7jr{*R?B>`PU2RMOkcq?R|K~q* zFs>%I|KkTtW50nEd1TTMs`ncpl|g2(c(xBvA)LLM8^2n;prni642pnIs8w;SzxXb` zwA)UvIBYhff*iT|`S5C&p^iJZ>4YYVk0^4TgzOXr1(N~B^Xzm4O86rGttZvRFjDTn ztL9}Hfl?QwhlKOsRN-j_AS+A%@1OtAc@D*U$mIoA6In7hY%5b@h#O|E62|?ibhu_Z zUa}_>P0b+j=llqj@krqT+06yNOY6kCx$3-l+FfQ)?fy}~-9FYpD|Ka`vA97%lWl}f ztz5sm$N;aKk-vS)rSf#R+DR{Y!J($c9H3LMA90D`((kv+S9B&n$GYvR5z+Vf>JiZA zrcOE4m=!lv<;)(qi0;L>19t-X_01xFu89(&kuisZ__b_|7#h`;XjIRv4-w^0)-i2r zqQzOEwM|3#KJvQ@v_y?FtnuV4yrW8|2}!Mjf)sb?7tF?WUb5H`z1ZSjBf3UEN4WCf zVxd{LzR_YmCL0YYSYGsgI_R-NJ2DhEonVr|340-YI*NJUtKK;s%~9Up5eX_)Ja3Ot z(zeF^I1+YwVTS3XoyNjv(blmvLrSsh_X}F)%BZvwHF-56^g76pF$NTrndDVJ>38n% ztS@E^sq`Hu9*6u$*yUL*9xlnheX3V`w`lSTe2scwxLEuk*1>*k`LD=vkv$LHNoAo) zG|^9}VQei$+kV5h2l_9 z5W9pU80&9YG1452{6^?Z+Rn{P zS3}zYEn@oNK0SZQFL@)hmKJS`h{mB>j=F=Z zYI7nDMukW#OtJDOsVT7w=1%=#tNoS^t>ZC-O7L@D2OlKAsqKfe&F}1_+!nQpH=oHm zDloKF7A1e#28k1|Ut|4&CDfcSw$emD*tjp<_IOlOa z4b&($^naAeR`Mfkn&fGlt4(U5NeG?4wcUR|)rG(6T%I?rG*2BUC{?N-K;p_%tAKU% zMLTz8``|IgNvEry$X!Lr%jcQK=x`gNSrjiKWbN<&=AQQSbC zCsE#Qa6rWd0TDOa=7@+8xTVbAoI z=V8MZw4@W3jumwm8`;qfMCn+ZuZ7B!Je4PCBjg(^+uZ9or307&6k6gb`kjnLMtCKL zID~X+-)z6lkB}PkF*4T|kX7#)UOu@W;*wGf<`_{3K7F2N_&Aj?&-d%wW7z?DJ zjeQ>U{3-~mW2mxosI)zTn=bXh4S|npQI?{evjkihhcSx^U~Ed)Y(X4dR$58{g1Wk{ z|6NZ8V@eY@r)^Jq3U#Ss!))$UPOHZ2npZxWp4$l`?H;a^3p;1?j5gH69_m45)kq#? z#e~Bcz;%0|QwDXdZ>V@TZa?_@mQ*wJU#oK%Q!4UOwVy^1yRO|{L~wl(F&q1Y=X6!6Itc$GxKm6|K z1B|mCUEA^@kD2|I<;G9L#qToqg#{M2ODR3n6jBTya}y#db9iW1h0iua>NHay+`IG_ zcM0>Q=l^Vpj1`r~?4yY;E>2_mFd7nR8Fw;T^2sKnsq#-znO&~it4#SlDynN{#jwcCqDa{E&e|$vL%5E;KSnole1RqR;HdcGwm_CmkRIMhS_;rh?BQhFm+3foY zazvxCv{nZuno0T3a7*>8jWGD78P77h>SYRlk1QuPt`Rc1bdJi^9EcQ_2#F%T# zC;js(wES$_Lm?XE8glEx(7Y5F+9l_{QK1V+JH(BD$rIAEB=2i;H`w8qw*2CbbDN&D z`I!3R&57hlt$UX1zckBL`3$T_Wg+rarJH?8Ir%PS5H`%q1THgOp7G1QbYi}(E@Q!i zjHK4K)e-HnsGROp!{#51l3#cK#F`XX%exdEW&)E2?n^{c%2DgL+_A*hS*PEwO5I6# zS}c_{TO&(%a>LH}5qs_R_rx2c&stXRQPEs%&CfL=I^sv} zPlR_{I?eu!7k+b>Y(yeSCG5t+5=sT0`}*ODPn5?gZCz zbv(Rxc`b+l>U3ghE8#r}89chf(Gd3)#;A;_53bf!>K8$fyH^u8)35{Gu-sU>mE20$ zdDkZ&>Q>aPYoZI4JLY4*nN6Ckdn5nedAaMe`cvO3zKOd{xuW-fyBd=?!5x#g26ui6 zuZ~tc_kn}G)nu-ZyTrI45*D`D6XqIh({$HIS?2`LOjH}A1HM>}2VKNC)c;;{9kJAB zXp3t^)*}*>vJj$m-|{mLtpeW&`d?jTAZqv-qiOtqzC2v~{#ekp=7{ZVOeVxZDnYg9 zpVj_KnE}qD|F-f_8}qKl`V2vhQxfNt_CFE7n@u`~YJV=#T?R|R#@&SUQt$%1ai35Q z6-piBl@CcqJnT&{>H&-q`5eo@J=i~Smc>U)r`3MbzNP4{jQ0)B5W(G%bmh{zU>68l zcy|q!!0>so6xLH-O);$2y@r*gcURCJAFuGy-XMeQ8cvpWQ|g`ZI;pYXI8I?PTYj-Z z0%n_^r1-ZjlY9#kMV=eqrfg(O_X$~V_maK2kL(ZgBGQ#$k*#I8Mn5cASW@>@3bS>q z|0*{LbEnYp@0>LWUmt2rN!iT-wcpr2`53g5443bg2I8T;3cImoR;>Xw5(RXIost`D zq-ZqT-i|e^1I!~+cU7}5@1Oel;0yX5vekl4!;%s6QRRlI_5EXkbNP1V-S0hJj@x%? z==jpsNl;u2Mi|6j=P_dX+%yi)i|#%8&!TC<*k0|q-kpTOQ~#8KeeW3TVDRskV*9zu zC!ni6T@16^|Ip{be^N7{n=k>5Rs(AvqGk6goHEc(6q%`~VZ0OUzDQ{2|)<2OzHa1~ZtIJrLI{YbGiXY0L6;aU}( ztV`DqSrUdPg&C}xqs1mrm5uNBP1By)4t0eFBI%Uy7OecsJ3e^d*L9ZN{xzk!^w-ra z_Q9B=^Vy^AFzG!)j*<1tr{M+Xr^c9Zhwgp{yHdxkvVsonh~uYyk@eDhpY7o)Z^p{PF7DSj*cn zOfrhAYnV?NZP4`(`#yiVn#|otjW2(3N1>8eEeISZ)OY99e5lp!6|3r{7j|7LEKi@+ z*#|gTPHBqblLYa;)M8k{L=(yv$ezSD=p?#o(d&YQ)FCXSvDwk!8TjJ}-NYu!lWyA$ zGT9HaXk+@GCG@G43Z0#$ouC66V*Y14NUXL!fDQ+fmv2TT{y1i7~iz5I}BM~NM>g$4D5!MP` zVo1TD$Ll{|avU$cU#8@-km6V+w8Q%mmm1r() z>({0$F4A@Fs+C)w-kaIHsaaT|+x)A*qlV3_a;jwNzqIY*TwyC!5v4xxqd7cNs`a%g zb#)rC)JwZAb(-s7RnVNb_FGx4@A^|$hp($2thuD1Nh2~C75TQLxl+)uYGXn~{Uf5pRcR&5{(u%X*HG2FN-cLJS^b*x`qq!cZv2S69ib5f8?_8NLr#k*|LVFoEGO-Q2^o*5`skl@z(mQ)=9fsScPLOduYV(%;Vji7t zTlZ1m-yYev450k*meQ)rX{mk{^EA0z-#iAEHrR0L1kzd4(Q^eG;GXF8OpQDIZK_PT zMADwyhh>#gyr$>d>cjpOHZcEzph;llTkX#G#W326-5#~DTT|6f|8w9eGZqjm(Rv23 znLU^1A1^bj7+U`5z=MyuHX0sBxRl@3=rEKPfy#ntrlKEF0#x=6fy7f$h4qrl`@lyN zl|A{G|9+~CvFgXnLgW|RNRGk}4$Hu)l>EiQ8tf6hrjq}DQt9O7|H4Brt7~d_I;Cu%s{K~)YW%nQQy8cGj^tO2t_#11@^M^_ zg{ASuezT2u{EFF%zSUU8dTVEUTYLLw13n-I_%;Gvt9Ii=%HBQ$H<(A;K7t>kbCq{9 zxiki=}NV^9-L6SU_Z{dN~L`(2za)GHaAR|1o>8}t7E^yh-?{bV%k~LiC zDcbFcwGp>4`fs}wp(DvGv6Jpm8&WEHChK#LasfBRxa}6NRPlT{rFuHr{U>zGqv7{U;huU`sD93V=>O8%JpC( z5|YN1EMmU{+#{(;*|gG=w%e#iuH^M5xrZV_+qI2Zbq_9LSCk-$MbzKNo?68j6;#K= zQ|beqRu%u^BIN8G?)OXrFjaMGeAD$ZR1`5U&KtIoMuyP%#%2OrI$v#Ts-pBISbi~9 ziF{47r#SvGR4NtrR(-w?TGt`8-`Z>YkLMA3bsXYqUJ)o?~nz_h{pGE}F zl0R*Z{E|TXAKrVHsMiv*@NP;&dt9Zf`5xUuTH6WQW4#AF2?Y7Kn*p~d&(lfaZd&L2 zv%j+Iy60#@bh6icX?F`ZR0#5;>Gv+a6DBCW$NkGAWM!N2O32DSntP{Y5@L@V>f9s6 zh}=HiZa`pCxTT7XB+AX(Vs76kMStw--sy^(&n-XHf&1~pg>y$~qvd;QmZ9HHk{=x= z*sj}t(?Yr}hJK_330YC{{gFFiYqTQN%U!X8YxP-K{nV)H`ZphGOFcYon$7b#M@z0Q z6dBJ2FLVK*?g}{B-)eN{ zZy7GOWEEga(nV6GVvHd^Y+(1Ea<_ zHZj?B0!3&x*myF3+DkGry8aH+q&tpr`#9$Qam)>8?CR=IR~Om%u!PmFC1Fll&suJy zFZ$NM>StXC$JqmP)#ERsW-m<{xi916<4_M$R8$15>C(*iwx$vs{J9&h9D`P8!U?D6 zD~m;T$=;vmM&6&R^^rOzj-S^bzJ7jTjV?S0IdnYAIGAA#TvF}(!+lMBWq%W_WmJ2E zW)sKRj|Bw9lgL5sPgCDS_2kTh4j?kBCLe$Fm*?x&MJ|E=6#?F#8BO9X%7n<`-OSyBzQ7-;85d z7wQR%?&EEX!>M*EoBHUM3v*1WkS8*LCIMvmWYIe=0J~v-W>dy;eNk>FsEKMaifi{a z7eWlV?N;1C)_p|6K2q=%XJoX@O86g!S~J0uEt#j9tmc5z3)22Ev*q`>rnidw0@3-3+~%VxybzxL|Al*J}JmoIxpM_u-fWYr&HnL=Un>xb=cOX zyHf3x^%8aN+IM!^zA5D*p)_qgYj}B|%23G1M!VX(hMY4$)Nr;7S2EX~=n1ozuXal)jD^eB-lf^G9LL68n++Pff8pmA!m+PkuhX;wjjA6t!p9@sN`;!p@#`2@ zuM`f|K${9o!G?};tC8aLuU|I+e(GpzQ-Mb5^hiz9im}4#B_!7lW~l+$BMG`-;YeX% z=D-XdH7zX;OrNIdD5&3QI8NBN(MP7Gr^8&3Z89)%NKR340E87@zdoQk--LejKRgYGod%H_b9Vd{7GoKV zl7@zc2V=lf0EM|l=$XteeD$6a2yzHHxVDtjHeRWD^f6O@X*WubcHQnaGLI*H!A9V9 z0J$t*8t3vDtUX2m9&Yx|Y%BFzAL)GD9${O;s^DQ&QtP96>ixVBR+F~~qlR%0a}Cvo zBE*!dkkyG5>TuISAs$1_NE2eJ&d{(3a5ZK z1}2U)14`$=pMU^$S6|z4-1;XFh&gIjiUH7^be@k#*4Ql@PRH0Zfvv^^D+cBlp6pdL zfDFMBjLjNYCYUOKAMglENbrD)tRU3k;q?6;5pRNPd+S>)=FW%^q6ZH1#6xNC>E7oa z#g~NS#mCFJX?A7R^e>aVm)aYkQsrasDQ?hi39IhJqx7)#*+0naN*0zUf6axFMjWqk z+O;2?cdGO5cqXoI{r*}H_n}-{gd)^bR>g&Xk!|X!buA89b;~YCScsn`J}QpzwbK8h z&ZtV^L(QxH`5Iy~;b1&z?9HmZ8mkKJM^BH7ZMKJnFTM***|-A6ez>~UoasJ!;`>Oj zXMG=P%wu=%+@T?tL%-^cTKtf4%Nv(5pqHpplmgPJI1mUFOZmM^^8`xL~p4 ziu=g?@QL9fG5VbV67jhtspW(S^}gPZl1CqId17*&M}bj7wH&rGhZ@)|G!n74x3*$pV+XpuMMNTKJGh|R*P}tp zLc8d7zd2LD3?!@l=pg?mXR85S9L>7f`T2^4RDv!F%TK2cM~o5$jk+jQBA}&v?hS7# zI`C#keL--!cd`KM_A@gxv+tg~VQj9gWdne>)wc{TIg*#3K=vA#nrJLRWmm-sPj`>vM5(j#U{ajcWS_O%XrcU)JUnN!N~zY1z9$h+p#E?c z(X>>S#IqHorP%Jx^8iC*)ZwphkavlhaP_29oc|?+Q5W`e)|x*a2_!^JtxrJ@{C@p@ z9Zb_RCGF;4&Vwd9=E;gIL@N-afGmye1Ny2c_5&$oZJ_)_whBzB?}_%j6v#CN9qb@Q zh?JlKa$VL?zEbWW^e|Yzdex7koq|IP`cfb>t(yU+1T}^P9{wJW$1@ruQ*K{pfoHclb^}B;=G@bnX{4j?Y?v4%-jPB9k2^1qB(gyY|!l0j8 zV1xn-ht~eQ8wfQyLmKRn9yrO*h!7HCpgIKub2#dD-iz4p2=fwt9_s-a@Ryf2) zhaX6d3!ilKTGcZ0J#E{YFjqsY@odrr(soBE#_+5~vSBda;8*aOEN`-!e|Zw$oS@fE zIeA{o^8o!s1h-Uj@P(RT5#woLwQ91n`76#40@G!OeSH77DKd@RJJ*blY; zq?5DWJ{5G;#4`C~m2WaymG-73%-i-+CaIRw*0$@wvQ1L@?2n_cKw-xEjn#6vvV?T> zI|<_lYBa;s^()&~gbz5n6B^0~YpGVU%nFXo+Vbq7E^%w?cZ4s?ox@kExCIY{r9ZM6 z*&VkbZ75}IHF#bI8H{~nq7f8C5wy3y2FJ7hxp z#O^zC%T|yK>FPqpWFU(=@QM~|+G3p8TsVSzXB4W>GGx4m1=?z5)?}BccHJOGA*{sUTEieN=Rm&$F{EGd=6w|%xh$6a@tashM^)cz62y{mODe%ffysis<5 z!i2;ccKBf{c@&!ussf{J9yw29rB3DdaY`+w&f2cMv_zh*inbH|z5*?Cjl^R3PCU$|i3 z*F$CT2Im2NGJTwj!^N{|VuN6)rl8=&`hG=esncW1ke{>Lhb}J0nSLi+q$3Y7(A{62 zwOCBPv#5V(^}n1YLL-bzTe8|Lj?Ji4+m?Bi+jX$()j6v7p)`;dA>K|5i->>#uH@`} z)AYh3K|J$G#1*03F*CMZ6{)&GQPJ%7ed<;D2<_BiP2!yubKyh#Wq+&34CVAaK#PVG zpvV(lrXc_K62Sj&w5k6khJX5Jx;I^~*A+jJmb3~}wxMtwjxmp4X9i4m(JmuBT_s;B zw(}mQ&(u1UO5vqbhGf>&2~Of7ARj!`LE3^yV()_#dKD8{dS`m0@DeV;zjJfd>g+WW zmOU-=+c1=;I6J$|twI3_QhCwA)D4)PDtDdNfAi1{m}@uCu1ee??U1x2TY2$5AVuE@ zrfZOpiHn9$SaPtlLkkqBNE%yOk{~$eXfJ{Ku)NPEvZp-9&<(+0^>iV>xTGX7Ft9UC z^dlg|?Cf2?em&@mx^QrGDhz$vHw8os;T?g<4;|B5Kd?NDkrnV(yy9X)S zG<2smKz|mJeF*9G;<~2mYFV4hr^!&RcO6mO79xvYD;_F7)DMSTgYWQ{>)8KG$anqx z+tb0Je1MEE8)P+4JGi>l0b&OKl&$Fu8ZPHMnZg=x8n3}fw(|%3)Ko9NYy54|jq#J9@dy9ljGMkORgCOIW^Wo=G^VT9=3JNy&6jv546os}&AmAqv>qvN`GoIqG+B-va*u=2?JD z04NtsRa(;u2-HBho1g!&S$B1+LF?XU>#A|kgz4Gz@16(kBpcp1m@W%L#(L}_`-Jgl zJ1*{GVm{C5pmPz|{Dh5#r5#|3)jiPq=KmW?2lF`?iLle<7vUwNW*wG;OjEji6~OAy z%NLMB!g!_Yb&(CCu{YlQ(ek>MV+D6~#loC|XV0F&fcBrW5-(n`!XP*%CjSo~phab}%uHEL4P;1FL2e(0T7rr# z=yNJ7D|>nhON2pJG_;@c0XzSN3WQ$d~k`HvNWI^El>w8R>vgL@+7% z?Tl?~04%!KirkqYErXdVFf*^(KCm7bl8bmdxa>Q)^jE#Lp#dBQu);fF4tKD#yZ


Z%0{vaWZpk{aiU zl})z`pQkPSEF)dIy4Id3!uaVqz&4*hf7a90y@8IpeI)bW8^Z(hRRc;n42Y>%r8>`yU ztRC|FP~W9zxgPxYT<(>H^X?SAbJ|BYr{&&MwGhuQ=WX4dYEFj-#C={&Q4bdw{GWn` z`Zf^LK{snoyZgrF4z1k?`vWl%5eU}3qpT$Ke+p6x0`5l-o2og^K}Yj=e;uY#;o;&w zkO>D-NGFgWM96J!ZbDB#3;@x_m`IM^`YDR|OxD~ynP+>)p1ff(7T zfEa8#!X|HATt>(8QN%qiOyHa6>FFuV4@&KY(iTY|%%o z_iVZ1r2%Xz2d@UIy#uC@;NB!8gmyPsMa6Wb+-6;Cz+M#>h}EeW zb9He!IT7_vre?W!&oH6zVpt8z3wXX$b*S@(SZ%lYJ3o9RtxPpu_G(n!4ui%x8JciEBdA9#d3qO_%|F=L*++$}Oa6io9 zzf8-H^0oyr{UB+DF_6z?WH?w^DX6IC-|&9=^a%vN`j&TL@H`nMC2sLq-gAjW*+Tj3 z1zHkRp@^PD5nin`jPD>E`m?#2vqC~b0*ZPt*kp%~^#%TqZ{NHCH{2$^iSe<7EVb^7Rimma(xhQt0Y-5IYsqD|!v`>!1p4V61ol799CZ zTs$))BPy43o$Eh-HOhugk!n7j#Dg0*69gO!l9P4bya}xeZkpDn6#l`Uiu5KZC{!dQ zfd&tvqwtD0qS2WGwyLI?FK+|o8^%wFh=POBPbz=T!aRyizGR}ybwd5a&Exw1`}Tj> z%{AZ7Idcd2A3vt}rn66kz`?`gk|9aIgdR}*hCy6B)Vk}R&0!oqW}tVcAvpyFc-1rE z89ROqbaWWPdTJ7+$8dQi_08pz&o<`-*?)Si>R(U5^2x@hq-4M84@uXp(HAdYA{95F zE9oq<`G40w_1(46Rx&R6m!CO9?7k1FJ^|E(i(VhN)yp!fSKBc~wrdpYV+lsBIMjet z!H7AXL{|mtvx@>M3JM9+Wrzt<%W0Qn9^~I$+75~r0{ik-QM5l@a$o=d_}UpN^*X_T UhQi+&6C7eE&=J1?iML&1(A~O4gm@2?mPVa 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 literal 40306 zcmaHTbzD_@^d%|+(o#x;gf!AfgM=WRN=ivfcPSkL0s_({ARrwA5=sh4mvnba_iXh2 zX6B!n^YH=iayjRoZ|uGHT5F$RMR_RV}E=PDyt$UFAdNbj)&P$;njK2tov#8yq3X;!jT z%)czxyjM_BQ8}!}G~`9c z*QN-0Hg;7nr!)t-PM4twrABbtCaI+D9)~g=`RQoz+;}q*o}ZtuNVl=3j)3spBBXOM zJ3HISkr4rbm8~?N7y-d0SP5@vNDcwv%?Rl^0}?{{ZA3Bn_}7PvoG1n2zaQU>;Qc>d zuDd?TzoY0Lzq`AM$-R4VLUqY-=wOQx60XL>f2(Hj<@U)*@-PmH-+%A!mGqhk$ zcw>f5=z4Ob@^Ei&kCBlPTWo1*a$|E->K)0!$+8wr)M@m?i0OLAGTgCSZ?XUTV{GXt zPNFc$%)V6zzT|LhWjZ`mf3aLuh8UR`nW4jH9wm$3i;KqA-6@pO?K}8GL$NV2@Q;>S z;P}(y#eHgG?>r94dkkqy(BTO0Xm=~9pmR43S?VWIQa|@6~G|f6VhU(IDadFYm z&`3x~+`fHVEM1Wrry`4+J27mX8YQDo#jaYLC2qbAPr{a$Bt}L}LnCLMCg21;mACI| zrkhlyRc?KKAt5f+`MjS7Uqb0aKqHKfWYm1X8Tt_!QN78?FTyeupQ+UtL-__JRr%uwGHl%3mGD7JOaJWe8?nd7#Kb&Q zNU5K4$15Fa1^oJpMyPgB?UckwLl!xQWC{pfgH+Ml1; zsTjwD4bLyzWff$4K5=3^QKQ3a5a@%#*L0S9Nye;Q4m!jR*?D z3VNN}0TH{=Q(0MAd3kw_ueZ-TCniWJRbRXq9m42C_5D#?QNhK|&d$mC<;#~}U0p*J zNIn#&2kXl#D?bJ`us5HvICIz~rbfB4+?zBm}Euo$VS zd0fO^@|=kvw5+UbH)3mRORLiIWHC-JMZh(~lj+mIYCu4MnwlD)jwVZ-hMJl!Z_??h z8#9Og&sf&UNo|r7CnV0&>>61!tC7hhe$S+Bm6Bt#0PeC1p^RQebhACUm0fI8C6 z?63pF`!*flxliw6lg(Oho6B3-(hYL)4Qpm{2MhbOsQ4lxBm+p~> zVm}GQ3=0h%xD;~EH{~4rBpq#FXgGeE?)JjP%}rBFYr4)|W27i%2LFlDV3qB>wzjs| zlP9}wlxYLh4Oe)6nUFwqQTSX%CDWMp+@SM{R&GZn zSC#rL`coNg%Dg;=Cx|VZuY}B+XWFW1aN?C8sC6vZ#mmajFV?y5Ab&gHiX){D|fDs?M9g7Lba8Zhf7_FUS3{n-x|k=xy%Psy)R#AYrpd@FE1BIiHVJ!a~c~P z3%}1cS8-|-MZLPct*4?gP;X|lHkgYOyl^1xi$V!Q0N0#o60jI%f{lw491{4$HWk)%Z)B)l+UFB)kRk(qX$?b)KU;c6 zM+d_yda$atFC7FhDU`*&5CdV;PfXfM{6q*rK+~}7iS`I6d0$`(NR)Cx52(XHXa@x78Xp({e|{u zCvDLm-@m_H`W659@#DzINZ7G0EiG;no*KETu!W9o;bybt5(BXLoVQ5AS(pgWjsz>? zVi+~J&r8zMC?MoTkmQ$ipB-(_A5}A-9&KA&StUnC>g($(>FQ3cjFuR-LFUTaD~sLO z*f{p^GB?kIz^q7TiH8=5PN=M>m-^wuU~6nXms@m+b;Ctv-P(wQw9c$aU5=%8~L_{gr`vE88r#Y=A2L zW-B)neR^VIeB>OTPug8-${4z1%*yOmbfoCyRK1tqjq(<7qQcGBQ|rEm5f3Nxx@I%p znmue`pbA(z!8h|4|Bc^YcCX^Qfw?DhoXCiPkdg<|uIq@;-~kZR0Lq z(srhDyE9YWT3DA4bI5VqrF*7At&%2;8^pn8G`!9gi~L5TSwqjW!gX&6Mma=0!^g)5 zpHcmMrwI$yf9}s>=c(F#5|Vdqd~>tmT3=sFp!oayQ~JT1_CN0o=Bh|bOIM{VxwyJo zP1X!`bf8jF;{^No`WAfoqF$isIP?96m2MDsoN4E?-Y5F{l$d_-*KQhOQJ=njb5~XU zpvtgl!^?Yui>MEHfRuDnS1y^;tUvmpf(>FvdpkWneP3o2TvRTJx9|IR3SnXIKMUcYAKSO~_1UiUrYk8aZ4S+3i?(!MABD`Kh5E@;Q&V=;=d(?LR%X=6@;#lM z^ESMK?uQF@)fE*L`1tt7#>O|_zWn~?h9$RFgW4Hvxo6Lw!DJz0l9*arGI$ zuXxb?jzfRIzzJWS?=A6dtvK+BVsEm4(O`+=h?hn3P1g-BrvwBPubNHfuiwbVMPZb6 z+bml^iZ(GaB}Pq$arS;0K3+%HJqHdB{MZw#DKeXgdv@$nONJ$CD)fgWgALqFL4iLqyTeosm z^OSS<*L#@g=#C*P$;rx^TUbCc+T7X-$3ETb5vIWjeoD>fwof-@nODcTkpn4xZMxxV z=7(=xUEMPonVsL1b?cn$>6|?%~2RH<>a&>hzOt~fZIK<-qe!E7$JFp1u zv1s>Nqb=3c)GS;dMzxsO5p89qr9=WQkEEk=D|y45=<#W3I`{r zllchmhWz)4dGG0}wfSknI#?Ofum>`}IR>Xar^9>jiK*!G`%Ys-X%*%DFJCOFsBrnD zSy?-{Dp%yGuDT?=biNWdw=7W=U!o{5|Jt+ zi_{4DT}~XftFyo=+wir5zAI^8a~wiG&$#A`z|GF_ard!uGuRnn;YS;z_8lMS=Uc;? z5~EFX^%}gGQyUlUE-o(44%P#)HLGl9Mf zHvUf=xi^WR8y-0p=Jg@}^y$iI+44I=4x-q>;JCOEa_{q9cngG-Sxi}NVWIvBnw=L_ z)LX>jD1fT?owul|sU7x>xFM+|1?|jPzJC4sbjZ-$TvJ^=fE=KgPPJXj;Nbq@=J;A# z4UkBfeaE%NMvRe%JYajdBvCYZ_c5q}Tw(|xn$Pd{RMDm3l-KS{4y`yqg;OD6VPSQSd>->my35=OXl0nX zA%c}9`C5I209%=unZH4-+NY1AmW~>v#qa`1_swb3yyCtnc2#$_LUq;t59hYxkTr9C zV~GM)Z6&ogj{nus4~)o@j>_>WG}a6 zw~=>uSv*h6#~6}Vuu-Dzg9BfDUiBWO`5ef_&f%rbG>5eN={}{OdR_XO)!z2%ZhUk6 zx8~~S8O7*oLm7_3{mnRdf4uX)wq2YlbeB^O9*bUG%E+;b$8F(0e2p8i7a1a!=uK0G zXc~Z3VO?FC{NREEhHbju)7{3V*w^<-<~+aC#_wW%UwOTlo40Oh3AK!mpFu3ZLPr-z zIXOE!J2^QpYY^6$SOSo~hG%eN1(A)74bTA=7FL@U>B7!KqvIsQ+xR`E%5qi8_L(X$E@jxRyMi;_!J8( zVrR#Oq+LKj0G3F1is1U}ESufJ&m}&xYak}-iPf2CshONy7hvMKxjD#?00h*( zJfEGNjZ92DTg^#*Jz1kRPh%5D^*X(#Ter>)&=DsuZxtjsQckDAj*hi1p6QM0h6cA8 zV`=I3?{9BGpb4I@k$)Q1-05flFbNVJEiJ8K>$@LUd=R%15)*ltGHC!%LOR4E6R4`G z85#5poT>6TU#>8P*h3eZk%MG82EYI({Fi$8E5!jtB%L)Bjn0EHQJeeit3LoGm z#Y!Ei#;}aJ5pDS0$Xu!TwnZaVDwk>~HV*a=g z_49;DHkA>NMJnfh>f>}UIdF37Ztrf4xa0H4h^RR1-GbenFi9Q`Hp53@i=}QoUWJlK z<@JK3I!Pp?Cmt3oai2KU@Fa4g7xA-#QazTB=;($EpsHnJu3 z9zQ?7#k3bGp9jzRCrUvg;*49{muD%Gt+=z^?@=h-897_lUzF#67S($2GjR0kvatM- z=%PYj>*Ku0*B|=vldD5JEU=@)V`W_kF!5#fyKesx^SzNpK%%Pao9(7TF0Vo92jA~) zSD4VL=BmcV#x@0DsPu?zjucJ9O!LD(NqOY$nAS88lf{3<6ZY!cM z_P2F8zgkaAqL2!CxU_`eLtaxz5x9ejii(CdUh8TvEBo&7VCIaz>XxElU~z77@gqm; z>Qn0%R#uyEYrAD@UXQJ2{)mc-0>;HeK|#U9Y~8hk0uQcMC5@8)_7?J=lXHk~JT{p#$@XU?zX4E*sDom^<5rG{ZGcH+HPHuC!Kr2^MoGhoh ze9n>IB!SW$HoWZ-y@XPxR0Jj}svDfCFH@?nwidR$in6kU`NPX5qQ`dBsXYUxPhh?Gs>gnQlTPUa`wt<0ZQLmosMFIV#PynxIFwd*8{p%mbVk5(5#$LONi zP`CkH1#l0XiIbC)FEUoW_m$T-)v5Zq`FU97`>O+HoSKkNJUnW>4pcQXEJ&CG`b;@F zILf-s?yTT=2sNDC{S&G#yP@QvKl*K57UfmE^u~MtYJSHB3bKXh9}R zwop;&>M&JJRh5_j>f!ZBb|-LIT%MmuMUb^LVFBEC&}{l5x3~Mzq1+<3H1ME|+)(8z zd4^|5E35v+;bO_vCs9Ae6BVNoQn{TpY%xxpE|Nkql&}q{+;4>5-$b>KxAz?+hLucvBVS9&Q0xY6C0lbvDy zozD(8Zy{rHl5|Y$e1M34v_0L>=jiL>GhC!MU8L8blqm_})&asIG8S2_=hRy<=QOdoTl$jkL%%`+tXJNyd{BalaTN{UCpVw zDqfX<&^$_J{Scw62HpY4psA?|R@%;&GPQhltI^V|Sv@-D+ek<$g6>X0I}r6?prYE@ z+oNG&9qsJ!0t)8mB8O6_4)_?CpnKtQxw*L{m^u2yHc~X%m?5k_-@l9S@O=IJnJ%dm z>ezSh-aTiE1z07MRRb$lRdw*qjav@pdmq^hX=Ok57HIKIa5(^@0Nby%xmm#L{Qf-~ zXJ@@C8%p0Fy}8M^kkG5#4$NUy%VcHHh5UHgYg!IjuXFLw$B!TLHHy~8y5T-Ar>`zj zWogd)ym)hZ^W$>3U34_Z`?FeBq7;rUk@t~W zh8(X3rZ!VhD5u)m4!vexzfX)*vfMZe;7?iXICI&)x2N6AL&cJ9@4-VVz$@43{8Emb z-?qOmz|2O@1!y)Gej}cG{iErGou50&V+SbQ0}WNQ9s;K-iJU>$IH>-|_mrp{_;fl& zj`vqpN}hj_lg?5eU8|Mxq4>ZcqpHTJM)3@d!#|3B^VJK++-LHgrHi(NvPf|jS`SsS zj2Bgh7SkH6RFOsH4WeS}!jyR)71JFZG>|j}McO-3UlGh|7R) z?3aE4frCsIIRq>D%^L(_;>3?1?>~9cgh9;B^rG}rwR7&KPCvp-NgQM+C6mU%!9m!) zHjq8w1J$S-TUd`v{2M=Hi0>2c(aSi3& zkG2YI9~d+}n|UnZvg|8w`1-ZiVn<9Ql~gz(M?lvrAWolAM?uB-E*m z?ovt4P`q7Nke6@WY;Jn(Xr5D4WNmCr1JEYZZEzaNhKKfAt0>6J>*(oGIOEepbhFN# z=zUN5BqK9Z;z4Aro~NdylB%6uXnLuJOgG{Ig zDMx02wcE|RDIntBrkCQYc>xT{9t95_^Vc3iNAnoOLb~M}t!10W9@>`ZA%^vjZBC#5 zoG`YApeM08^#-A^nwS4jIN8@d4siU{i#Mp3`$uqGeU<9zzC(HdKME%q32lsGD{f+- zk*m8t@8tb$KrzV91hgtDqUNSenj#%1QscXK4hIM~qNr)uv&1A0>=rty9cg?7sOic1 zJxp~fg5C#*J(YOvq*+%*l#6F)7IrsOPU%yXuDUu+>{DZgp@s&@8prk6$i8FD585o# z)%GS0UKb!M0hO1#zEygP+}O3Js@tP79c@s)C8gX)VQHU=757HY^RSjh= z|Ls^Bk&st*?yvSLDs+G=NKc;yR$^Chn@rFRXz%<6PFVm!KsEuBu2o{tGFD;HaJt3_ z#4ltaK3?8;WeX|l z7FJxNw>|-!!t3G`Kz*oq2EkIP$*Wg$j-)#gZVuA7-sseOoB+QZh)FtU!;2{TE1u&a zBjb90QGNfb`a-w%SU*2R$V`xGXB^L2b!$zntO|5hB?X57v-uWmWd$rFR~CPkZMyvu z%B<5K;VVv(93nhCRTY&os8Z=wvVj3Ke)a0Q6smh2*7~furG=E&=6hFHL0<+tDFXn@ zhYy$G`l$W}km6y9Lw0V0JxM}JdbNFZ86lZDYm>iTk0MKJ4^jsb5)%9X@#6@>m(8r0 zq$EYT~1#=b^-dRRGWx_{cTY*-lL47zj9@K7E36k6EV%?+WdAYnC30 zk7BOsJyzZFk`jR9Ac&1HHmrUQ4GnG8=YOuLIaZ*xS!;IR#q7ffCy(}2i;qh58O7nK zf|Oloq(sCW=Ha2Sgb*YYN|U3}d`#UseB#9SkER!=aR<})%?axR7aGlM97QD`3%Q-< zeBR$Gi+I>PRpVgPA}(d6(O}EYGn|2^jvdO6(^G(kZu#oXYT0Pe)gi0UIvwZM^tAl^ z9a2dO?3J&bk(#e0ky5Rtun|SEK@c@=F0EWERQ;Kkm*2@KgMlLLY8EV`sq#LWvVgv) zN5)tY$3#l2CJ!+F+fRLNI|b`BrTra5625Bn8ylMg1Dxp6?>iSMDJk{5PO`{&X7;r? z4>Jk#`nGy5f6%c=S=47rU%8t(hFh_WQTiEObrrfL_1ELz;COg?dU|*OeFV{4IhD9{o_!$fb^hE?3YCmC;p4|3>>3F3KvNTk69IYI;JQca z1*^r7oIDjyw!FMd<<~zjuv<>(I1lKG3zMW#ryr`KL_v3MvR9RcZJ0XNVhC@Ng}qaL zyd>dspyTHsZ*6@A^%ra~y>in&*s5AWw(u834>5G>J*xZM9?1pbaWnf?@TERtVJVyq zz?HMGaA6J${lQr$KG6DE;azB``+OLWrfG!N&a{QU*j-Z6mX&{ji>f6HuY zf+5bTTKwC{>gJ{nFk{NfQ6E1(fAON-h+P^Oh)4VDBMNkQYc_+Yp96=t!74X=%ia_T^g!(FR!w6%5tf7J!2-VaIU`6 zO+q{Sl>3d~7BOWoU2w_l4kI&uhr4&+NAIR(Uud`&{LmZkLGtW|%cz6e2f_|Z&ue!GO z%R7s%irL*fbNgH*LBA%CfSjBx^8tp zqn1(B#FzRb!^3vGB;1KzFCP(wOQ^GEx4kNhmwgpMCOAl*4YZ)TI|GrKrnmi7A^QDC z-+%vh0d@hPeybFSwm&1OwkN8610{0rJ$wI@8p9gFLZzB$D{89T3>P!-J(8%_ImpD+ z(q4bsA4b#4d5E!KkEukdjU+rld}_;>Gjf@1iss%nOBd#Y}{af7w4!mxOwijQ2t z<^9Kxre`raD0lXS~eDv!41~0K}Z_p1niy3z9DzTLNRrd127w| zE>~}rw1lTj^O;wBFIE5EIALrJEE*l>{2Xt83){S*VSjm;l+?+*B{zAr>wtwDJ`pj? z?Tlk^)>q+W6S^fH04@PU@9kgy7EX)wIKcX1$qY5@9}RB)#)1Af3Cfi|KQd?bK!84 z5-(0vb~hVajFySh3mczs+Qs4XZREPge@5wp6P9QyC%Y1PF3!&bu*hGVnYo_suLdaK zlXn~UF4h0 z4487V#90^{XDQNcO;qo7OmCUp$K3rwi5WPsCgeAhrLL&>CQ!=)uf#);)nj0THN0W> zwiwFLg7~JF@WKtTm7f8(d>gb5ti-;kn!luYcI9~yfNX`~rx7uwU2Ax__?u0cnz6^q zHefdr1KGpta$($$O_@Hgow-#a(}4X|(U`;IL)_fAHyFYn+dS`FPtm#;cP@kDYusDkbC2gm+>h6cg z)Sik*CdK&p>;X}RSy55lx1@fqF>Ing%}$S3mS8tCa+Q#HQBkG)K#gtzQB)DH#h@fF zKQAN%m8(L`yXJPI(#2+oN)rUPmsb@qY!HnL>59*HaXI{d++%F z@>Y*f_Gf8{L`mnr!d_H}^uN=Ala?rr*oGo)^z^cJyCa+U)ZlH@fd}XQb{{DY%I?o! zko3^}8zuFmttV@^EQY^8t`i2^5`06u$HK{V9r_o522@s20aoaI>)SRNpMxoIM4qSn zKa%}4igc6t9M_1gYazUEWsMH>voEg4kfbfd}}Up94Jt~QiX*gg$}syYU+X((yZ* z6w&QOi}95z3^7ndZ(c^aya4i&=W7MMi}8%t!BT3(WSPernO~Bipaq$LX|Z@P#oR^i zU4b69tzUEbB|Y3OLC=LwPiFd&u#|o>MPL`COmjQ$D_j-qHr&2`VOc{@h_cc3H)80Y z0ExuPr_WrDg48k1J6w8@g4PrpVofM$qjPPMU|)gyYJLD_G9lxR58!`FYSv_)n3yb# zei**}yL#PMjgdYi16xU5DJCK1HP``Sf6C-nc_vMwg@&lgM2VHpWhgT~;|RFR$jHOL zCruk@W!cOY_d%^4U&is);l`x*xr<*bT7^I6+ukysgA)(@6M>*$8oHl)dzKBJ%VyPL z4(9~=Cc#cg)UK1g=`k`Th%F{KY6c69Qcc=do?1OEIE^xX(X%7VKeKSv^05X!FqE6b z_qX0`F~Rm<{MmsXM*Ng5mFLil?{4ClQhuknl+@As2&@I`{pd#yzrrbd~ zLKFp!P!ELgKyt6|iF}r$rHk+zt!g`CM@L5w4*^}5vOaqD_zjrdKrHfMNBnP4Vf34p z0}biw=C-u7G*#o+IWSPBe}g+w(6l!V0B(R@CUD)5<~%$+c2Eg#zWv_bz6t>Ico&x4 z$GEt_Tl#Kpr#`pQ)C;x2!Uzg0P@y^84WS4tlGHfKAbLZshA3*Pjf?K^K5o&%O{#pa zWr7e3VW*#-nHh)$J7;HW{YVr)#a3TrqHt8Qi9vJ1XPc|ahLRgY@}^1}_aD6!0qwD= z>*k;;1O8O+=S60HJXDDy-MaE>0tqFVtkP;q{IAxN`v=71`5M;x!M#6!K229u6DlZ- zli?+ae)vKG57j`#TLBHN6GxviOdfY+koqcGSvyG~%E(wPOO_=klG^tN1vRxqE(xhS zHeyIMalyfO8naK&NbOtS`6M4nsct03-3MYa_-;FXiq=ehgB^-v!mdHmQZo4LMj6Fw zGT*imp3yF6aLsbM`f8gQy;;jL?Yuek*(+f^qKBIMN@mzBVKvr0gM)zl&*33A8(VN# zm{qyAE#Q|g1qF#@Z8^`MKL`D|TmY}^G57(7hq&bbu1xMTt;Q6Gc}GPvT&6T%!St+tgW`<=!O|AJIR< zX0lE7#I=vGdYp2F0#5?CU>YW-4Xzg=KN}k}hOCbG!o<=|@y;PS#4^43({fLb^XSOu z$ID0Yzp|%)A2hux1M;df8iy*gFl_IjVt#bYhB;E^dV74LjC$3`=2+}(W3xgNGkoV6 zYG?>*i(^HAWGi@B!O?;!h8n_z7t+DN_(8_lqcJl#T1z)XU4ifX1^Wt0&JQ`^Xs6iE z{vtus?zInAWXWX=iM~WF*xQ?dvE%&mG8jm+&~6bSA+xS?$l-t~*K*OMm+8*?{BYilqQ9M!XQvXh#-a z6I|P8MUdOOyRU0czdN|Pf&3dd!Qu}h9UK`s6M1dtAl3sjskOy@FSG?>0~k)2KlCAm zw&Z~qq$2e4vaaEdkBj?BlwKodOkB)eM7ss8ahq=@%L^ZZLte;!Ql*QR&CFX{Gq<&J zb)^w~fXx3bFQ)>f9Z%-uNSO5GVqq5wv7`?~MS_hQcyX$!Y?+u#GRC#N4 z*474koHT6a$1*W7(Q$HemX|H|z4x*D`G}MApp!d?ocv(@5^h&N0bxCfTI#$MA zXQztC%Rh+uSuoZb*aZKXv_--wf{1xugH+F=SAX6bM$BBqc56%nC@mlXE(R2Y!H;O> z>MfqDIy^K~GHQ82i@TP9bXUywXj_hC`|D$)P%(zdy$0q8jxyd>OWfFWnJiW1&y~83 zX#-tyyxNTUQT-hWHK!HC+-w*ae5O+`pY%RKLFgsl$G(XmGU7wlcn@QWlH$>$VqglC z!FY-@J1I17aR>JeT#F?x^y_1;M~|?B#a+;Bb*@-?R~;||sR%+VQWbt0vD=Ph$eR_X zM`lVkJYHtT#avz^k32HiM!oGbmSB!^mxRNfSWAmFb=J%9p{kk&xv*0?)i9nF>P<=n z5$|hLWtxR3g@^u&=g)Us1VDb)($XS}Xq&aEsgWr903i6Sh$498Qd9Mml{0Ju?`(qq z*oUIoz_!ynhAxDio4d7ht$fk$eya8I#>QNKPDEKKxRcSu=%}a!1)1R=7Zp|Aq;smZ zXxS6VMXnd<@;&kvQseCwFB|^Z^>@VRSg#N3*LU1@#9&$tAKfRx43x~I$3xA6pzD7@1&kpNOy5jx&Az9|!9rV_B7zY4K3Ed5F=_8zxluqt`gPMekD< zwdcu9F?%QU4Po4vsQ_LbQ)L-$_8B&!{>zt&y1JNxehB5@W^Ek5lc&lMMZH_4_~glx zC~7qZaJ4}}s+?P1jj^I<-gSsQOrV{|Ts2r7b_1c-!-$gg=!GT!PYykWvVj?d(TDZJ++yssp(&b(D0BIoM|FKM->TN z-u@%X9NgSnQ+40ozP%A9xxPkl1DYR1b5&)s`b$f}@BO8%BLuF7bOvi>AJ{VqC4-Xt z-c(?S?>(WwxQQ@!Gr;8r!Wd$G5bW@KK6;G^Z@7KP#1KTZevI6`Ufyrw@UGX{-{ZT* z_00b}YO^W+zb`vH#;K3Fflz~ZzV^?34}BMSmi&Kz?p;*XnY`}OKy~}invXEUb^Cw! zJm~)Q>;ApW|9&~G^9MsF!kfa~ITnT|N~+NC;lSoYQB!m0zfaSl8zh1s~*Y^fJ zeDLr2DC&f_5gahw6cyh`N2@Gr%hKV|($HL798E*#!TVcpy#~pNp9cK<^YXiJfbllG zyZR&4S>U$?jRH7Z8(PG)FbaZyx1aV^KDl07SCUa`h?gVMb`H$ldMs)W72J3WnP{MfU-VwM`pzkA0;YM%i5>k*d-fcsve`C|DwtTxW zAhKxIkT1F0pyZmoX*}dlqXED2-=IN{7n0p0M*DBki)bW&_>r)VVD#udFly*XxB4ke z@uj2Iu->)a?CnASdq;2NYiI*t{huF9_VyM(BSO$M2XFHGi+{Ik`mGzqkEr3>ysv{> zj=TY45z={y*{uETf4}XOeC7&O5*QaJ!Pgk!1|OMKyNZG!REq_PN`n7pbh|hT?5_#j zvwlix94R4K#oBM>tsxj+A4O@gH)kQg8eWF?bTSTR>LMdwLj3{bo4)(v;JuQdITAC+ zqem|v-7k>by%#T&71eG8rV&KZr&-Ej#xL&>{yWWBVO9!(y}doS(O{1kVLLO6t*sj| z5j^{wbH?6^KhQ6E?v{i?{`lYf%MqV!>vDmJnX3v-KVxr|bN%SE|NY8=4#lsCD2iGy zjDur3!!AJqV-xJq)@w&+CcaOYP^H5G~+%Q`yUm4Z;l9y0lY=aKvszrc@a3pH3yBu*$WI zwBjb=@_9{KD1TZE*zTkIy^o0K0f(T<^XD#LRe+pf(nAK)3FJCJpznyd%%QymgmP#k zVT0@ml~bV@@Y3L<1y=a(T_r6oegK|wiQFZl8^D@<9lH;ltwD)y|A{3S*PXx%1{OJP z|E9)9BGTQ117r4h7%R9{(!ScXw6tq`8Lv%R-5kxoc@c5v^Gl*vq3uc`EEX`uzl`j9 zb+EZkM4p=%L*rrhhzaP^IxsTW0R9f@84gUo5Q(#_ibh;SODO~ zrTO{!#l;~zL1;svK`{UWsI9FnO8Uym3doOR)6-YyCwtIbvOCuT_z(=_Fh>oSr;I|2 z&@e#CX5gpF(AD0qG%~-nCFH!N{qSK9=qoVxzkmM@&={?AcZS*ubY$?CDl0347Nen| z0dCadmp?!kgYGGF^ED{xB_8xai@<#_%C|e%*>(K<$?LL{25BP>+HipF5x&^R6{@4! zIXMR(2nYs_4bxFH&p@NDxp(&-2M0%VyU`l?P@R9idVv@UP=(vSOERmU?YPv!`kJh^ z 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 H9(?3Ksw { + }).then(({ execState }) => { const resultDeclaration = ast.body.find( (a) => a.type === 'VariableDeclaration' && @@ -166,7 +166,7 @@ export function useCalc({ const init = resultDeclaration?.type === 'VariableDeclaration' && resultDeclaration?.declarations?.[0]?.init - const result = programMemory?.get('__result__')?.value + const result = execState.memory?.get('__result__')?.value setCalcResult(typeof result === 'number' ? String(result) : 'NAN') init && setValueNode(init) }) diff --git a/src/components/DebugDisplayObj.tsx b/src/components/DebugDisplayObj.tsx new file mode 100644 index 000000000..55b6ec244 --- /dev/null +++ b/src/components/DebugDisplayObj.tsx @@ -0,0 +1,111 @@ +import { isArray, isNonNullable } from 'lib/utils' +import { useRef, useState } from 'react' + +type Primitive = string | number | bigint | boolean | symbol | null | undefined + +export type GenericObj = { + type?: string + [key: string]: GenericObj | Primitive | Array +} + +/** + * Display an array of objects or primitives for debug purposes. Nullable values + * are displayed so that relative indexes are preserved. + */ +export function DebugDisplayArray({ + arr, + filterKeys, +}: { + arr: Array + filterKeys: string[] +}) { + return ( + <> + {arr.map((obj, index) => { + return ( +

+ {obj && typeof obj === 'object' ? ( + + ) : isNonNullable(obj) ? ( + {obj.toString()} + ) : ( + {obj} + )} +
+ ) + })} + + ) +} + +/** + * Display an object as a tree for debug purposes. Nullable values are omitted. + * The only other property treated specially is the type property, which is + * assumed to be a string. + */ +export function DebugDisplayObj({ + obj, + filterKeys, +}: { + obj: GenericObj + filterKeys: string[] +}) { + const ref = useRef(null) + const hasCursor = false + const [isCollapsed, setIsCollapsed] = useState(false) + return ( +
+      {isCollapsed ? (
+        
+      ) : (
+        
+          
+          
    + {Object.entries(obj).map(([key, value]) => { + if (filterKeys.includes(key)) { + return null + } else if (isArray(value)) { + return ( +
  • + {`${key}: [`} + + {']'} +
  • + ) + } else if (typeof value === 'object' && value !== null) { + return ( +
  • + {key}: + +
  • + ) + } else if (isNonNullable(value)) { + return ( +
  • + {key}: {value.toString()} +
  • + ) + } + return null + })} +
+
+ )} +
+ ) +} diff --git a/src/components/DebugFeatureTree.tsx b/src/components/DebugFeatureTree.tsx new file mode 100644 index 000000000..df9e53bc1 --- /dev/null +++ b/src/components/DebugFeatureTree.tsx @@ -0,0 +1,45 @@ +import { useMemo } from 'react' +import { engineCommandManager } from 'lib/singletons' +import { + ArtifactGraph, + expandPlane, + PlaneArtifactRich, +} from 'lang/std/artifactGraph' +import { DebugDisplayArray, GenericObj } from './DebugDisplayObj' + +export function DebugFeatureTree() { + const featureTree = useMemo(() => { + return computeTree(engineCommandManager.artifactGraph) + }, [engineCommandManager.artifactGraph]) + + const filterKeys: string[] = ['__meta', 'codeRef', 'pathToNode'] + return ( +
+ Feature Tree + {featureTree.length > 0 ? ( +
+          
+        
+ ) : ( +

(Empty)

+ )} +
+ ) +} + +function computeTree(artifactGraph: ArtifactGraph): GenericObj[] { + let items: GenericObj[] = [] + + const planes: PlaneArtifactRich[] = [] + for (const artifact of artifactGraph.values()) { + if (artifact.type === 'plane') { + planes.push(expandPlane(artifact, artifactGraph)) + } + } + const extraRichPlanes: GenericObj[] = planes.map((plane) => { + return plane as any as GenericObj + }) + items = items.concat(extraRichPlanes) + + return items +} diff --git a/src/components/ModelingSidebar/ModelingPanes/DebugPane.tsx b/src/components/ModelingSidebar/ModelingPanes/DebugPane.tsx index 40f6169d4..f96cb9ef6 100644 --- a/src/components/ModelingSidebar/ModelingPanes/DebugPane.tsx +++ b/src/components/ModelingSidebar/ModelingPanes/DebugPane.tsx @@ -1,3 +1,4 @@ +import { DebugFeatureTree } from 'components/DebugFeatureTree' import { AstExplorer } from '../../AstExplorer' import { EngineCommands } from '../../EngineCommands' import { CamDebugSettings } from 'clientSideScene/ClientSideSceneComp' @@ -12,6 +13,7 @@ export const DebugPane = () => { + ) diff --git a/src/components/ModelingSidebar/ModelingPanes/MemoryPane.test.tsx b/src/components/ModelingSidebar/ModelingPanes/MemoryPane.test.tsx index 65ac1db1a..6b1931875 100644 --- a/src/components/ModelingSidebar/ModelingPanes/MemoryPane.test.tsx +++ b/src/components/ModelingSidebar/ModelingPanes/MemoryPane.test.tsx @@ -29,8 +29,8 @@ describe('processMemory', () => { |> lineTo([2.15, 4.32], %) // |> rx(90, %)` const ast = parse(code) - const programMemory = await enginelessExecutor(ast, ProgramMemory.empty()) - const output = processMemory(programMemory) + const execState = await enginelessExecutor(ast, ProgramMemory.empty()) + const output = processMemory(execState.memory) expect(output.myVar).toEqual(5) expect(output.otherVar).toEqual(3) expect(output).toEqual({ diff --git a/src/lang/KclSingleton.ts b/src/lang/KclSingleton.ts index f0ebb915c..4126847ef 100644 --- a/src/lang/KclSingleton.ts +++ b/src/lang/KclSingleton.ts @@ -8,6 +8,8 @@ import { EXECUTE_AST_INTERRUPT_ERROR_MESSAGE } from 'lib/constants' import { CallExpression, + emptyExecState, + ExecState, initPromise, parse, PathToNode, @@ -42,6 +44,7 @@ export class KclManager { }, digest: null, } + private _execState: ExecState = emptyExecState() private _programMemory: ProgramMemory = ProgramMemory.empty() lastSuccessfulProgramMemory: ProgramMemory = ProgramMemory.empty() private _logs: string[] = [] @@ -72,11 +75,21 @@ export class KclManager { get programMemory() { return this._programMemory } - set programMemory(programMemory) { + // This is private because callers should be setting the entire execState. + private set programMemory(programMemory) { this._programMemory = programMemory this._programMemoryCallBack(programMemory) } + set execState(execState) { + this._execState = execState + this.programMemory = execState.memory + } + + get execState() { + return this._execState + } + get logs() { return this._logs } @@ -253,8 +266,9 @@ export class KclManager { // Make sure we clear before starting again. End session will do this. this.engineCommandManager?.endSession() await this.ensureWasmInit() - const { logs, errors, programMemory, isInterrupted } = await executeAst({ + const { logs, errors, execState, isInterrupted } = await executeAst({ ast, + idGenerator: this.execState.idGenerator, engineCommandManager: this.engineCommandManager, }) @@ -264,7 +278,7 @@ export class KclManager { this.lints = await lintAst({ ast: ast }) sceneInfra.modelingSend({ type: 'code edit during sketch' }) - defaultSelectionFilter(programMemory, this.engineCommandManager) + defaultSelectionFilter(execState.memory, this.engineCommandManager) if (args.zoomToFit) { let zoomObjectId: string | undefined = '' @@ -304,9 +318,11 @@ export class KclManager { this.logs = logs // Do not add the errors since the program was interrupted and the error is not a real KCL error this.addKclErrors(isInterrupted ? [] : errors) - this.programMemory = programMemory + // Reset the next ID index so that we reuse the previous IDs next time. + execState.idGenerator.nextId = 0 + this.execState = execState if (!errors.length) { - this.lastSuccessfulProgramMemory = programMemory + this.lastSuccessfulProgramMemory = execState.memory } this.ast = { ...ast } this._executeCallback() @@ -344,17 +360,19 @@ export class KclManager { await codeManager.writeToFile() this._ast = { ...newAst } - const { logs, errors, programMemory } = await executeAst({ + const { logs, errors, execState } = await executeAst({ ast: newAst, + idGenerator: this.execState.idGenerator, engineCommandManager: this.engineCommandManager, useFakeExecutor: true, }) this._logs = logs this._kclErrors = errors - this._programMemory = programMemory + this._execState = execState + this._programMemory = execState.memory if (!errors.length) { - this.lastSuccessfulProgramMemory = programMemory + this.lastSuccessfulProgramMemory = execState.memory } if (updates !== 'artifactRanges') return diff --git a/src/lang/artifact.test.ts b/src/lang/artifact.test.ts index bb20262b6..099a752b2 100644 --- a/src/lang/artifact.test.ts +++ b/src/lang/artifact.test.ts @@ -14,9 +14,9 @@ const mySketch001 = startSketchOn('XY') |> lineTo([-1.59, -1.54], %) |> lineTo([0.46, -5.82], %) // |> rx(45, %)` - const programMemory = await enginelessExecutor(parse(code)) + const execState = await enginelessExecutor(parse(code)) // @ts-ignore - const sketch001 = programMemory?.get('mySketch001') + const sketch001 = execState.memory.get('mySketch001') expect(sketch001).toEqual({ type: 'UserVal', __meta: [{ sourceRange: [46, 71] }], @@ -68,9 +68,9 @@ const mySketch001 = startSketchOn('XY') |> lineTo([0.46, -5.82], %) // |> rx(45, %) |> extrude(2, %)` - const programMemory = await enginelessExecutor(parse(code)) + const execState = await enginelessExecutor(parse(code)) // @ts-ignore - const sketch001 = programMemory?.get('mySketch001') + const sketch001 = execState.memory.get('mySketch001') expect(sketch001).toEqual({ type: 'Solid', id: expect.any(String), @@ -148,9 +148,10 @@ const sk2 = startSketchOn('XY') |> extrude(2, %) ` - const programMemory = await enginelessExecutor(parse(code)) + const execState = await enginelessExecutor(parse(code)) + const programMemory = execState.memory // @ts-ignore - const geos = [programMemory?.get('theExtrude'), programMemory?.get('sk2')] + const geos = [programMemory.get('theExtrude'), programMemory.get('sk2')] expect(geos).toEqual([ { type: 'Solid', diff --git a/src/lang/executor.test.ts b/src/lang/executor.test.ts index cb29934ea..0049d15be 100644 --- a/src/lang/executor.test.ts +++ b/src/lang/executor.test.ts @@ -443,6 +443,6 @@ async function exe( ) { const ast = parse(code) - const result = await enginelessExecutor(ast, programMemory) - return result + const execState = await enginelessExecutor(ast, programMemory) + return execState.memory } diff --git a/src/lang/langHelpers.ts b/src/lang/langHelpers.ts index d436a6120..138b75809 100644 --- a/src/lang/langHelpers.ts +++ b/src/lang/langHelpers.ts @@ -4,11 +4,14 @@ import { ProgramMemory, programMemoryInit, kclLint, + emptyExecState, + ExecState, } from 'lang/wasm' import { enginelessExecutor } from 'lib/testHelpers' import { EngineCommandManager } from 'lang/std/engineConnection' import { KCLError } from 'lang/errors' import { Diagnostic } from '@codemirror/lint' +import { IdGenerator } from 'wasm-lib/kcl/bindings/IdGenerator' export type ToolTip = | 'lineTo' @@ -47,16 +50,18 @@ export async function executeAst({ engineCommandManager, useFakeExecutor = false, programMemoryOverride, + idGenerator, }: { ast: Program engineCommandManager: EngineCommandManager useFakeExecutor?: boolean programMemoryOverride?: ProgramMemory + idGenerator?: IdGenerator isInterrupted?: boolean }): Promise<{ logs: string[] errors: KCLError[] - programMemory: ProgramMemory + execState: ExecState isInterrupted: boolean }> { try { @@ -65,15 +70,21 @@ export async function executeAst({ // eslint-disable-next-line @typescript-eslint/no-floating-promises engineCommandManager.startNewSession() } - const programMemory = await (useFakeExecutor + const execState = await (useFakeExecutor ? enginelessExecutor(ast, programMemoryOverride || programMemoryInit()) - : _executor(ast, programMemoryInit(), engineCommandManager, false)) + : _executor( + ast, + programMemoryInit(), + idGenerator, + engineCommandManager, + false + )) await engineCommandManager.waitForAllCommands() return { logs: [], errors: [], - programMemory, + execState, isInterrupted: false, } } catch (e: any) { @@ -89,7 +100,7 @@ export async function executeAst({ return { errors: [e], logs: [], - programMemory: ProgramMemory.empty(), + execState: emptyExecState(), isInterrupted, } } else { @@ -97,7 +108,7 @@ export async function executeAst({ return { logs: [e], errors: [], - programMemory: ProgramMemory.empty(), + execState: emptyExecState(), isInterrupted, } } diff --git a/src/lang/modifyAst.test.ts b/src/lang/modifyAst.test.ts index 29fc9b97e..7cd97d191 100644 --- a/src/lang/modifyAst.test.ts +++ b/src/lang/modifyAst.test.ts @@ -220,11 +220,11 @@ yo2 = hmm([identifierGuy + 5])` it('should move a binary expression into a new variable', async () => { const ast = parse(code) if (err(ast)) throw ast - const programMemory = await enginelessExecutor(ast) + const execState = await enginelessExecutor(ast) const startIndex = code.indexOf('100 + 100') + 1 const { modifiedAst } = moveValueIntoNewVariable( ast, - programMemory, + execState.memory, [startIndex, startIndex], 'newVar' ) @@ -235,11 +235,11 @@ yo2 = hmm([identifierGuy + 5])` it('should move a value into a new variable', async () => { const ast = parse(code) if (err(ast)) throw ast - const programMemory = await enginelessExecutor(ast) + const execState = await enginelessExecutor(ast) const startIndex = code.indexOf('2.8') + 1 const { modifiedAst } = moveValueIntoNewVariable( ast, - programMemory, + execState.memory, [startIndex, startIndex], 'newVar' ) @@ -250,11 +250,11 @@ yo2 = hmm([identifierGuy + 5])` it('should move a callExpression into a new variable', async () => { const ast = parse(code) if (err(ast)) throw ast - const programMemory = await enginelessExecutor(ast) + const execState = await enginelessExecutor(ast) const startIndex = code.indexOf('def(') const { modifiedAst } = moveValueIntoNewVariable( ast, - programMemory, + execState.memory, [startIndex, startIndex], 'newVar' ) @@ -265,11 +265,11 @@ yo2 = hmm([identifierGuy + 5])` it('should move a binary expression with call expression into a new variable', async () => { const ast = parse(code) if (err(ast)) throw ast - const programMemory = await enginelessExecutor(ast) + const execState = await enginelessExecutor(ast) const startIndex = code.indexOf('jkl(') + 1 const { modifiedAst } = moveValueIntoNewVariable( ast, - programMemory, + execState.memory, [startIndex, startIndex], 'newVar' ) @@ -280,11 +280,11 @@ yo2 = hmm([identifierGuy + 5])` it('should move a identifier into a new variable', async () => { const ast = parse(code) if (err(ast)) throw ast - const programMemory = await enginelessExecutor(ast) + const execState = await enginelessExecutor(ast) const startIndex = code.indexOf('identifierGuy +') + 1 const { modifiedAst } = moveValueIntoNewVariable( ast, - programMemory, + execState.memory, [startIndex, startIndex], 'newVar' ) @@ -465,7 +465,7 @@ describe('Testing deleteSegmentFromPipeExpression', () => { |> line([306.21, 198.87], %)` const ast = parse(code) if (err(ast)) throw ast - const programMemory = await enginelessExecutor(ast) + const execState = await enginelessExecutor(ast) const lineOfInterest = 'line([306.21, 198.85], %, $a)' const range: [number, number] = [ code.indexOf(lineOfInterest), @@ -475,7 +475,7 @@ describe('Testing deleteSegmentFromPipeExpression', () => { const modifiedAst = deleteSegmentFromPipeExpression( [], ast, - programMemory, + execState.memory, code, pathToNode ) @@ -543,7 +543,7 @@ ${!replace1 ? ` |> ${line}\n` : ''} |> angledLine([-65, ${ const code = makeCode(line) const ast = parse(code) if (err(ast)) throw ast - const programMemory = await enginelessExecutor(ast) + const execState = await enginelessExecutor(ast) const lineOfInterest = line const range: [number, number] = [ code.indexOf(lineOfInterest), @@ -554,7 +554,7 @@ ${!replace1 ? ` |> ${line}\n` : ''} |> angledLine([-65, ${ const modifiedAst = deleteSegmentFromPipeExpression( dependentSegments, ast, - programMemory, + execState.memory, code, pathToNode ) @@ -632,7 +632,7 @@ describe('Testing removeSingleConstraintInfo', () => { const ast = parse(code) if (err(ast)) throw ast - const programMemory = await enginelessExecutor(ast) + const execState = await enginelessExecutor(ast) const lineOfInterest = expectedFinish.split('(')[0] + '(' const range: [number, number] = [ code.indexOf(lineOfInterest) + 1, @@ -661,7 +661,7 @@ describe('Testing removeSingleConstraintInfo', () => { pathToNode, argPosition, ast, - programMemory + execState.memory ) if (!mod) return new Error('mod is undefined') const recastCode = recast(mod.modifiedAst) @@ -686,7 +686,7 @@ describe('Testing removeSingleConstraintInfo', () => { const ast = parse(code) if (err(ast)) throw ast - const programMemory = await enginelessExecutor(ast) + const execState = await enginelessExecutor(ast) const lineOfInterest = expectedFinish.split('(')[0] + '(' const range: [number, number] = [ code.indexOf(lineOfInterest) + 1, @@ -711,7 +711,7 @@ describe('Testing removeSingleConstraintInfo', () => { pathToNode, argPosition, ast, - programMemory + execState.memory ) if (!mod) return new Error('mod is undefined') const recastCode = recast(mod.modifiedAst) @@ -882,7 +882,7 @@ sketch002 = startSketchOn({ // const lineOfInterest = 'line([-2.94, 2.7], %)' const ast = parse(codeBefore) if (err(ast)) throw ast - const programMemory = await enginelessExecutor(ast) + const execState = await enginelessExecutor(ast) // deleteFromSelection const range: [number, number] = [ @@ -895,7 +895,7 @@ sketch002 = startSketchOn({ range, type, }, - programMemory, + execState.memory, async () => { await new Promise((resolve) => setTimeout(resolve, 100)) return { diff --git a/src/lang/queryAst.test.ts b/src/lang/queryAst.test.ts index f7bd67fab..f5ca44ab1 100644 --- a/src/lang/queryAst.test.ts +++ b/src/lang/queryAst.test.ts @@ -45,11 +45,11 @@ variableBelowShouldNotBeIncluded = 3 const rangeStart = code.indexOf('// selection-range-7ish-before-this') - 7 const ast = parse(code) if (err(ast)) throw ast - const programMemory = await enginelessExecutor(ast) + const execState = await enginelessExecutor(ast) const { variables, bodyPath, insertIndex } = findAllPreviousVariables( ast, - programMemory, + execState.memory, [rangeStart, rangeStart] ) expect(variables).toEqual([ @@ -351,11 +351,11 @@ part001 = startSketchAt([-1.41, 3.46]) const ast = parse(exampleCode) if (err(ast)) throw ast - const programMemory = await enginelessExecutor(ast) + const execState = await enginelessExecutor(ast) const result = hasExtrudeSketch({ ast, selection: { type: 'default', range: [100, 101] }, - programMemory, + programMemory: execState.memory, }) expect(result).toEqual(true) }) @@ -370,11 +370,11 @@ part001 = startSketchAt([-1.41, 3.46]) const ast = parse(exampleCode) if (err(ast)) throw ast - const programMemory = await enginelessExecutor(ast) + const execState = await enginelessExecutor(ast) const result = hasExtrudeSketch({ ast, selection: { type: 'default', range: [100, 101] }, - programMemory, + programMemory: execState.memory, }) expect(result).toEqual(true) }) @@ -383,11 +383,11 @@ part001 = startSketchAt([-1.41, 3.46]) const ast = parse(exampleCode) if (err(ast)) throw ast - const programMemory = await enginelessExecutor(ast) + const execState = await enginelessExecutor(ast) const result = hasExtrudeSketch({ ast, selection: { type: 'default', range: [10, 11] }, - programMemory, + programMemory: execState.memory, }) expect(result).toEqual(false) }) diff --git a/src/lang/std/sketch.test.ts b/src/lang/std/sketch.test.ts index b3c35e831..37ca212c7 100644 --- a/src/lang/std/sketch.test.ts +++ b/src/lang/std/sketch.test.ts @@ -117,11 +117,11 @@ describe('testing changeSketchArguments', () => { const ast = parse(code) if (err(ast)) return ast - const programMemory = await enginelessExecutor(ast) + const execState = await enginelessExecutor(ast) const sourceStart = code.indexOf(lineToChange) const changeSketchArgsRetVal = changeSketchArguments( ast, - programMemory, + execState.memory, { type: 'sourceRange', sourceRange: [sourceStart, sourceStart + lineToChange.length], @@ -150,12 +150,12 @@ mySketch001 = startSketchOn('XY') const ast = parse(code) if (err(ast)) return ast - const programMemory = await enginelessExecutor(ast) + const execState = await enginelessExecutor(ast) const sourceStart = code.indexOf(lineToChange) expect(sourceStart).toBe(89) const newSketchLnRetVal = addNewSketchLn({ node: ast, - programMemory, + programMemory: execState.memory, input: { type: 'straight-segment', from: [0, 0], @@ -186,7 +186,7 @@ mySketch001 = startSketchOn('XY') const modifiedAst2 = addCloseToPipe({ node: ast, - programMemory, + programMemory: execState.memory, pathToNode: [ ['body', ''], [0, 'index'], @@ -230,7 +230,7 @@ describe('testing addTagForSketchOnFace', () => { const pathToNode = getNodePathFromSourceRange(ast, sourceRange) const sketchOnFaceRetVal = addTagForSketchOnFace( { - // previousProgramMemory: programMemory, // redundant? + // previousProgramMemory: execState.memory, // redundant? pathToNode, node: ast, }, diff --git a/src/lang/std/sketchConstraints.test.ts b/src/lang/std/sketchConstraints.test.ts index 92e83e57b..08869ae91 100644 --- a/src/lang/std/sketchConstraints.test.ts +++ b/src/lang/std/sketchConstraints.test.ts @@ -34,7 +34,7 @@ async function testingSwapSketchFnCall({ const ast = parse(inputCode) if (err(ast)) return Promise.reject(ast) - const programMemory = await enginelessExecutor(ast) + const execState = await enginelessExecutor(ast) const selections = { codeBasedSelections: [range], otherSelections: [], @@ -45,7 +45,7 @@ async function testingSwapSketchFnCall({ return Promise.reject(new Error('transformInfos undefined')) const ast2 = transformAstSketchLines({ ast, - programMemory, + programMemory: execState.memory, selectionRanges: selections, transformInfos, referenceSegName: '', @@ -360,10 +360,10 @@ part001 = startSketchOn('XY') |> line([2.14, 1.35], %) // normal-segment |> xLine(3.54, %)` it('normal case works', async () => { - const programMemory = await enginelessExecutor(parse(code)) + const execState = await enginelessExecutor(parse(code)) const index = code.indexOf('// normal-segment') - 7 const sg = sketchFromKclValue( - programMemory.get('part001'), + execState.memory.get('part001'), 'part001' ) as Sketch const _segment = getSketchSegmentFromSourceRange(sg, [index, index]) @@ -377,10 +377,10 @@ part001 = startSketchOn('XY') }) }) it('verify it works when the segment is in the `start` property', async () => { - const programMemory = await enginelessExecutor(parse(code)) + const execState = await enginelessExecutor(parse(code)) const index = code.indexOf('// segment-in-start') - 7 const _segment = getSketchSegmentFromSourceRange( - sketchFromKclValue(programMemory.get('part001'), 'part001') as Sketch, + sketchFromKclValue(execState.memory.get('part001'), 'part001') as Sketch, [index, index] ) if (err(_segment)) throw _segment diff --git a/src/lang/std/sketchcombos.test.ts b/src/lang/std/sketchcombos.test.ts index a09093726..c54c4899b 100644 --- a/src/lang/std/sketchcombos.test.ts +++ b/src/lang/std/sketchcombos.test.ts @@ -220,7 +220,7 @@ part001 = startSketchOn('XY') } }) - const programMemory = await enginelessExecutor(ast) + const execState = await enginelessExecutor(ast) const transformInfos = getTransformInfos( makeSelections(selectionRanges.slice(1)), ast, @@ -231,7 +231,7 @@ part001 = startSketchOn('XY') ast, selectionRanges: makeSelections(selectionRanges), transformInfos, - programMemory, + programMemory: execState.memory, }) if (err(newAst)) return Promise.reject(newAst) @@ -311,7 +311,7 @@ part001 = startSketchOn('XY') } }) - const programMemory = await enginelessExecutor(ast) + const execState = await enginelessExecutor(ast) const transformInfos = getTransformInfos( makeSelections(selectionRanges), ast, @@ -322,7 +322,7 @@ part001 = startSketchOn('XY') ast, selectionRanges: makeSelections(selectionRanges), transformInfos, - programMemory, + programMemory: execState.memory, referenceSegName: '', }) if (err(newAst)) return Promise.reject(newAst) @@ -373,7 +373,7 @@ part001 = startSketchOn('XY') } }) - const programMemory = await enginelessExecutor(ast) + const execState = await enginelessExecutor(ast) const transformInfos = getTransformInfos( makeSelections(selectionRanges), ast, @@ -384,7 +384,7 @@ part001 = startSketchOn('XY') ast, selectionRanges: makeSelections(selectionRanges), transformInfos, - programMemory, + programMemory: execState.memory, referenceSegName: '', }) if (err(newAst)) return Promise.reject(newAst) @@ -470,7 +470,7 @@ async function helperThing( } }) - const programMemory = await enginelessExecutor(ast) + const execState = await enginelessExecutor(ast) const transformInfos = getTransformInfos( makeSelections(selectionRanges.slice(1)), ast, @@ -481,7 +481,7 @@ async function helperThing( ast, selectionRanges: makeSelections(selectionRanges), transformInfos, - programMemory, + programMemory: execState.memory, }) if (err(newAst)) return Promise.reject(newAst) diff --git a/src/lang/std/std.test.ts b/src/lang/std/std.test.ts index 5f9d22cdc..c351d0129 100644 --- a/src/lang/std/std.test.ts +++ b/src/lang/std/std.test.ts @@ -17,9 +17,9 @@ describe('testing angledLineThatIntersects', () => { offset: ${offset}, }, %, $yo2) intersect = segEndX(yo2)` - const mem = await enginelessExecutor(parse(code('-1'))) - expect(mem.get('intersect')?.value).toBe(1 + Math.sqrt(2)) + const execState = await enginelessExecutor(parse(code('-1'))) + expect(execState.memory.get('intersect')?.value).toBe(1 + Math.sqrt(2)) const noOffset = await enginelessExecutor(parse(code('0'))) - expect(noOffset.get('intersect')?.value).toBeCloseTo(1) + expect(noOffset.memory.get('intersect')?.value).toBeCloseTo(1) }) }) diff --git a/src/lang/wasm.ts b/src/lang/wasm.ts index 59e397d90..f3140cdf3 100644 --- a/src/lang/wasm.ts +++ b/src/lang/wasm.ts @@ -37,6 +37,11 @@ import { Configuration } from 'wasm-lib/kcl/bindings/Configuration' import { DeepPartial } from 'lib/types' import { ProjectConfiguration } from 'wasm-lib/kcl/bindings/ProjectConfiguration' import { Sketch } from '../wasm-lib/kcl/bindings/Sketch' +import { IdGenerator } from 'wasm-lib/kcl/bindings/IdGenerator' +import { ExecState as RawExecState } from '../wasm-lib/kcl/bindings/ExecState' +import { ProgramMemory as RawProgramMemory } from '../wasm-lib/kcl/bindings/ProgramMemory' +import { EnvironmentRef } from '../wasm-lib/kcl/bindings/EnvironmentRef' +import { Environment } from '../wasm-lib/kcl/bindings/Environment' export type { Program } from '../wasm-lib/kcl/bindings/Program' export type { Expr } from '../wasm-lib/kcl/bindings/Expr' @@ -136,29 +141,46 @@ export const parse = (code: string | Error): Program | Error => { export type PathToNode = [string | number, string][] -interface Memory { - [key: string]: KclValue +export interface ExecState { + memory: ProgramMemory + idGenerator: IdGenerator } -type EnvironmentRef = number +/** + * Create an empty ExecState. This is useful on init to prevent needing an + * Option. + */ +export function emptyExecState(): ExecState { + return { + memory: ProgramMemory.empty(), + idGenerator: defaultIdGenerator(), + } +} + +function execStateFromRaw(raw: RawExecState): ExecState { + return { + memory: ProgramMemory.fromRaw(raw.memory), + idGenerator: raw.idGenerator, + } +} + +export function defaultIdGenerator(): IdGenerator { + return { + nextId: 0, + ids: [], + } +} + +interface Memory { + [key: string]: KclValue | undefined +} const ROOT_ENVIRONMENT_REF: EnvironmentRef = 0 -interface Environment { - bindings: Memory - parent: EnvironmentRef | null -} - function emptyEnvironment(): Environment { return { bindings: {}, parent: null } } -interface RawProgramMemory { - environments: Environment[] - currentEnv: EnvironmentRef - return: KclValue | null -} - /** * This duplicates logic in Rust. The hope is to keep ProgramMemory internals * isolated from the rest of the TypeScript code so that we can move it to Rust @@ -217,7 +239,7 @@ export class ProgramMemory { while (true) { const env = this.environments[envRef] if (env.bindings.hasOwnProperty(name)) { - return env.bindings[name] + return env.bindings[name] ?? null } if (!env.parent) { break @@ -260,6 +282,7 @@ export class ProgramMemory { } for (const [name, value] of Object.entries(env.bindings)) { + if (value === undefined) continue // Check the predicate. if (!predicate(value)) { continue @@ -293,6 +316,7 @@ export class ProgramMemory { while (true) { const env = this.environments[envRef] for (const [name, value] of Object.entries(env.bindings)) { + if (value === undefined) continue // Don't include shadowed variables. if (!map.has(name)) { map.set(name, value) @@ -356,9 +380,10 @@ export function sketchFromKclValue( export const executor = async ( node: Program, programMemory: ProgramMemory | Error = ProgramMemory.empty(), + idGenerator: IdGenerator = defaultIdGenerator(), engineCommandManager: EngineCommandManager, isMock: boolean = false -): Promise => { +): Promise => { if (err(programMemory)) return Promise.reject(programMemory) // eslint-disable-next-line @typescript-eslint/no-floating-promises @@ -366,6 +391,7 @@ export const executor = async ( const _programMemory = await _executor( node, programMemory, + idGenerator, engineCommandManager, isMock ) @@ -378,9 +404,10 @@ export const executor = async ( export const _executor = async ( node: Program, programMemory: ProgramMemory | Error = ProgramMemory.empty(), + idGenerator: IdGenerator = defaultIdGenerator(), engineCommandManager: EngineCommandManager, isMock: boolean -): Promise => { +): Promise => { if (err(programMemory)) return Promise.reject(programMemory) try { @@ -392,15 +419,16 @@ export const _executor = async ( baseUnit = (await getSettingsState)()?.modeling.defaultUnit.current || 'mm' } - const memory: RawProgramMemory = await execute_wasm( + const execState: RawExecState = await execute_wasm( JSON.stringify(node), JSON.stringify(programMemory.toRaw()), + JSON.stringify(idGenerator), baseUnit, engineCommandManager, fileSystemManager, isMock ) - return ProgramMemory.fromRaw(memory) + return execStateFromRaw(execState) } catch (e: any) { console.log(e) const parsed: RustKclError = JSON.parse(e.toString()) diff --git a/src/lib/testHelpers.ts b/src/lib/testHelpers.ts index ad9540810..e93b28a34 100644 --- a/src/lib/testHelpers.ts +++ b/src/lib/testHelpers.ts @@ -1,4 +1,11 @@ -import { Program, ProgramMemory, _executor, SourceRange } from '../lang/wasm' +import { + Program, + ProgramMemory, + _executor, + SourceRange, + ExecState, + defaultIdGenerator, +} from '../lang/wasm' import { EngineCommandManager, EngineCommandManagerEvents, @@ -9,6 +16,7 @@ import { v4 as uuidv4 } from 'uuid' import { DefaultPlanes } from 'wasm-lib/kcl/bindings/DefaultPlanes' import { err, reportRejection } from 'lib/trap' import { toSync } from './utils' +import { IdGenerator } from 'wasm-lib/kcl/bindings/IdGenerator' type WebSocketResponse = Models['WebSocketResponse_type'] @@ -77,8 +85,9 @@ class MockEngineCommandManager { export async function enginelessExecutor( ast: Program | Error, - pm: ProgramMemory | Error = ProgramMemory.empty() -): Promise { + pm: ProgramMemory | Error = ProgramMemory.empty(), + idGenerator: IdGenerator = defaultIdGenerator() +): Promise { if (err(ast)) return Promise.reject(ast) if (err(pm)) return Promise.reject(pm) @@ -88,15 +97,22 @@ export async function enginelessExecutor( }) as any as EngineCommandManager // eslint-disable-next-line @typescript-eslint/no-floating-promises mockEngineCommandManager.startNewSession() - const programMemory = await _executor(ast, pm, mockEngineCommandManager, true) + const execState = await _executor( + ast, + pm, + idGenerator, + mockEngineCommandManager, + true + ) await mockEngineCommandManager.waitForAllCommands() - return programMemory + return execState } export async function executor( ast: Program, - pm: ProgramMemory = ProgramMemory.empty() -): Promise { + pm: ProgramMemory = ProgramMemory.empty(), + idGenerator: IdGenerator = defaultIdGenerator() +): Promise { const engineCommandManager = new EngineCommandManager() engineCommandManager.start({ setIsStreamReady: () => {}, @@ -117,14 +133,15 @@ export async function executor( toSync(async () => { // eslint-disable-next-line @typescript-eslint/no-floating-promises engineCommandManager.startNewSession() - const programMemory = await _executor( + const execState = await _executor( ast, pm, + idGenerator, engineCommandManager, false ) await engineCommandManager.waitForAllCommands() - resolve(programMemory) + resolve(execState) }, reportRejection) ) }) diff --git a/src/lib/useCalculateKclExpression.ts b/src/lib/useCalculateKclExpression.ts index 5f5e044d6..cb195cc6f 100644 --- a/src/lib/useCalculateKclExpression.ts +++ b/src/lib/useCalculateKclExpression.ts @@ -97,7 +97,7 @@ export function useCalculateKclExpression({ }) if (trap(error, { suppress: true })) return } - const { programMemory } = await executeAst({ + const { execState } = await executeAst({ ast, engineCommandManager, useFakeExecutor: true, @@ -111,7 +111,7 @@ export function useCalculateKclExpression({ const init = resultDeclaration?.type === 'VariableDeclaration' && resultDeclaration?.declarations?.[0]?.init - const result = programMemory?.get('__result__')?.value + const result = execState.memory?.get('__result__')?.value setCalcResult(typeof result === 'number' ? String(result) : 'NAN') init && setValueNode(init) } diff --git a/src/machines/modelingMachine.ts b/src/machines/modelingMachine.ts index e53700d5a..adbbd1cc0 100644 --- a/src/machines/modelingMachine.ts +++ b/src/machines/modelingMachine.ts @@ -666,6 +666,7 @@ export const modelingMachine = setup({ const testExecute = await executeAst({ ast: modifiedAst, + idGenerator: kclManager.execState.idGenerator, useFakeExecutor: true, engineCommandManager, }) diff --git a/src/wasm-lib/derive-docs/src/lib.rs b/src/wasm-lib/derive-docs/src/lib.rs index f57af4b17..590fa5181 100644 --- a/src/wasm-lib/derive-docs/src/lib.rs +++ b/src/wasm-lib/derive-docs/src/lib.rs @@ -753,6 +753,7 @@ fn generate_code_block_test(fn_name: &str, code_block: &str, index: usize) -> pr let tokens = crate::token::lexer(#code_block).unwrap(); let parser = crate::parser::Parser::new(tokens); let program = parser.ast().unwrap(); + let id_generator = crate::executor::IdGenerator::default(); let ctx = crate::executor::ExecutorContext { engine: std::sync::Arc::new(Box::new(crate::engine::conn_mock::EngineConnection::new().await.unwrap())), fs: std::sync::Arc::new(crate::fs::FileManager::new()), @@ -761,7 +762,7 @@ fn generate_code_block_test(fn_name: &str, code_block: &str, index: usize) -> pr context_type: crate::executor::ContextType::Mock, }; - ctx.run(&program, None).await.unwrap(); + ctx.run(&program, None, id_generator).await.unwrap(); } #[tokio::test(flavor = "multi_thread", worker_threads = 5)] diff --git a/src/wasm-lib/derive-docs/tests/args_with_lifetime.gen b/src/wasm-lib/derive-docs/tests/args_with_lifetime.gen index 36f40b933..d3cdaa7d5 100644 --- a/src/wasm-lib/derive-docs/tests/args_with_lifetime.gen +++ b/src/wasm-lib/derive-docs/tests/args_with_lifetime.gen @@ -5,6 +5,7 @@ mod test_examples_someFn { let tokens = crate::token::lexer("someFn()").unwrap(); let parser = crate::parser::Parser::new(tokens); let program = parser.ast().unwrap(); + let id_generator = crate::executor::IdGenerator::default(); let ctx = crate::executor::ExecutorContext { engine: std::sync::Arc::new(Box::new( crate::engine::conn_mock::EngineConnection::new() @@ -16,7 +17,7 @@ mod test_examples_someFn { settings: Default::default(), context_type: crate::executor::ContextType::Mock, }; - ctx.run(&program, None).await.unwrap(); + ctx.run(&program, None, id_generator).await.unwrap(); } #[tokio::test(flavor = "multi_thread", worker_threads = 5)] diff --git a/src/wasm-lib/derive-docs/tests/args_with_refs.gen b/src/wasm-lib/derive-docs/tests/args_with_refs.gen index 93479ac9c..7a5013323 100644 --- a/src/wasm-lib/derive-docs/tests/args_with_refs.gen +++ b/src/wasm-lib/derive-docs/tests/args_with_refs.gen @@ -5,6 +5,7 @@ mod test_examples_someFn { let tokens = crate::token::lexer("someFn()").unwrap(); let parser = crate::parser::Parser::new(tokens); let program = parser.ast().unwrap(); + let id_generator = crate::executor::IdGenerator::default(); let ctx = crate::executor::ExecutorContext { engine: std::sync::Arc::new(Box::new( crate::engine::conn_mock::EngineConnection::new() @@ -16,7 +17,7 @@ mod test_examples_someFn { settings: Default::default(), context_type: crate::executor::ContextType::Mock, }; - ctx.run(&program, None).await.unwrap(); + ctx.run(&program, None, id_generator).await.unwrap(); } #[tokio::test(flavor = "multi_thread", worker_threads = 5)] diff --git a/src/wasm-lib/derive-docs/tests/array.gen b/src/wasm-lib/derive-docs/tests/array.gen index 56e02a823..21c2e4b18 100644 --- a/src/wasm-lib/derive-docs/tests/array.gen +++ b/src/wasm-lib/derive-docs/tests/array.gen @@ -5,6 +5,7 @@ mod test_examples_show { let tokens = crate::token::lexer("This is another code block.\nyes sirrr.\nshow").unwrap(); let parser = crate::parser::Parser::new(tokens); let program = parser.ast().unwrap(); + let id_generator = crate::executor::IdGenerator::default(); let ctx = crate::executor::ExecutorContext { engine: std::sync::Arc::new(Box::new( crate::engine::conn_mock::EngineConnection::new() @@ -16,7 +17,7 @@ mod test_examples_show { settings: Default::default(), context_type: crate::executor::ContextType::Mock, }; - ctx.run(&program, None).await.unwrap(); + ctx.run(&program, None, id_generator).await.unwrap(); } #[tokio::test(flavor = "multi_thread", worker_threads = 5)] @@ -38,6 +39,7 @@ mod test_examples_show { let tokens = crate::token::lexer("This is code.\nIt does other shit.\nshow").unwrap(); let parser = crate::parser::Parser::new(tokens); let program = parser.ast().unwrap(); + let id_generator = crate::executor::IdGenerator::default(); let ctx = crate::executor::ExecutorContext { engine: std::sync::Arc::new(Box::new( crate::engine::conn_mock::EngineConnection::new() @@ -49,7 +51,7 @@ mod test_examples_show { settings: Default::default(), context_type: crate::executor::ContextType::Mock, }; - ctx.run(&program, None).await.unwrap(); + ctx.run(&program, None, id_generator).await.unwrap(); } #[tokio::test(flavor = "multi_thread", worker_threads = 5)] diff --git a/src/wasm-lib/derive-docs/tests/box.gen b/src/wasm-lib/derive-docs/tests/box.gen index f9692b8ef..18a2ac2af 100644 --- a/src/wasm-lib/derive-docs/tests/box.gen +++ b/src/wasm-lib/derive-docs/tests/box.gen @@ -5,6 +5,7 @@ mod test_examples_show { let tokens = crate::token::lexer("This is code.\nIt does other shit.\nshow").unwrap(); let parser = crate::parser::Parser::new(tokens); let program = parser.ast().unwrap(); + let id_generator = crate::executor::IdGenerator::default(); let ctx = crate::executor::ExecutorContext { engine: std::sync::Arc::new(Box::new( crate::engine::conn_mock::EngineConnection::new() @@ -16,7 +17,7 @@ mod test_examples_show { settings: Default::default(), context_type: crate::executor::ContextType::Mock, }; - ctx.run(&program, None).await.unwrap(); + ctx.run(&program, None, id_generator).await.unwrap(); } #[tokio::test(flavor = "multi_thread", worker_threads = 5)] diff --git a/src/wasm-lib/derive-docs/tests/doc_comment_with_code.gen b/src/wasm-lib/derive-docs/tests/doc_comment_with_code.gen index d171b4c95..7c98fdfb5 100644 --- a/src/wasm-lib/derive-docs/tests/doc_comment_with_code.gen +++ b/src/wasm-lib/derive-docs/tests/doc_comment_with_code.gen @@ -6,6 +6,7 @@ mod test_examples_my_func { crate::token::lexer("This is another code block.\nyes sirrr.\nmyFunc").unwrap(); let parser = crate::parser::Parser::new(tokens); let program = parser.ast().unwrap(); + let id_generator = crate::executor::IdGenerator::default(); let ctx = crate::executor::ExecutorContext { engine: std::sync::Arc::new(Box::new( crate::engine::conn_mock::EngineConnection::new() @@ -17,7 +18,7 @@ mod test_examples_my_func { settings: Default::default(), context_type: crate::executor::ContextType::Mock, }; - ctx.run(&program, None).await.unwrap(); + ctx.run(&program, None, id_generator).await.unwrap(); } #[tokio::test(flavor = "multi_thread", worker_threads = 5)] @@ -39,6 +40,7 @@ mod test_examples_my_func { let tokens = crate::token::lexer("This is code.\nIt does other shit.\nmyFunc").unwrap(); let parser = crate::parser::Parser::new(tokens); let program = parser.ast().unwrap(); + let id_generator = crate::executor::IdGenerator::default(); let ctx = crate::executor::ExecutorContext { engine: std::sync::Arc::new(Box::new( crate::engine::conn_mock::EngineConnection::new() @@ -50,7 +52,7 @@ mod test_examples_my_func { settings: Default::default(), context_type: crate::executor::ContextType::Mock, }; - ctx.run(&program, None).await.unwrap(); + ctx.run(&program, None, id_generator).await.unwrap(); } #[tokio::test(flavor = "multi_thread", worker_threads = 5)] diff --git a/src/wasm-lib/derive-docs/tests/lineTo.gen b/src/wasm-lib/derive-docs/tests/lineTo.gen index f066c4161..d46cd45c0 100644 --- a/src/wasm-lib/derive-docs/tests/lineTo.gen +++ b/src/wasm-lib/derive-docs/tests/lineTo.gen @@ -6,6 +6,7 @@ mod test_examples_line_to { crate::token::lexer("This is another code block.\nyes sirrr.\nlineTo").unwrap(); let parser = crate::parser::Parser::new(tokens); let program = parser.ast().unwrap(); + let id_generator = crate::executor::IdGenerator::default(); let ctx = crate::executor::ExecutorContext { engine: std::sync::Arc::new(Box::new( crate::engine::conn_mock::EngineConnection::new() @@ -17,7 +18,7 @@ mod test_examples_line_to { settings: Default::default(), context_type: crate::executor::ContextType::Mock, }; - ctx.run(&program, None).await.unwrap(); + ctx.run(&program, None, id_generator).await.unwrap(); } #[tokio::test(flavor = "multi_thread", worker_threads = 5)] @@ -39,6 +40,7 @@ mod test_examples_line_to { let tokens = crate::token::lexer("This is code.\nIt does other shit.\nlineTo").unwrap(); let parser = crate::parser::Parser::new(tokens); let program = parser.ast().unwrap(); + let id_generator = crate::executor::IdGenerator::default(); let ctx = crate::executor::ExecutorContext { engine: std::sync::Arc::new(Box::new( crate::engine::conn_mock::EngineConnection::new() @@ -50,7 +52,7 @@ mod test_examples_line_to { settings: Default::default(), context_type: crate::executor::ContextType::Mock, }; - ctx.run(&program, None).await.unwrap(); + ctx.run(&program, None, id_generator).await.unwrap(); } #[tokio::test(flavor = "multi_thread", worker_threads = 5)] diff --git a/src/wasm-lib/derive-docs/tests/min.gen b/src/wasm-lib/derive-docs/tests/min.gen index 8398837af..dfe9681be 100644 --- a/src/wasm-lib/derive-docs/tests/min.gen +++ b/src/wasm-lib/derive-docs/tests/min.gen @@ -5,6 +5,7 @@ mod test_examples_min { let tokens = crate::token::lexer("This is another code block.\nyes sirrr.\nmin").unwrap(); let parser = crate::parser::Parser::new(tokens); let program = parser.ast().unwrap(); + let id_generator = crate::executor::IdGenerator::default(); let ctx = crate::executor::ExecutorContext { engine: std::sync::Arc::new(Box::new( crate::engine::conn_mock::EngineConnection::new() @@ -16,7 +17,7 @@ mod test_examples_min { settings: Default::default(), context_type: crate::executor::ContextType::Mock, }; - ctx.run(&program, None).await.unwrap(); + ctx.run(&program, None, id_generator).await.unwrap(); } #[tokio::test(flavor = "multi_thread", worker_threads = 5)] @@ -38,6 +39,7 @@ mod test_examples_min { let tokens = crate::token::lexer("This is code.\nIt does other shit.\nmin").unwrap(); let parser = crate::parser::Parser::new(tokens); let program = parser.ast().unwrap(); + let id_generator = crate::executor::IdGenerator::default(); let ctx = crate::executor::ExecutorContext { engine: std::sync::Arc::new(Box::new( crate::engine::conn_mock::EngineConnection::new() @@ -49,7 +51,7 @@ mod test_examples_min { settings: Default::default(), context_type: crate::executor::ContextType::Mock, }; - ctx.run(&program, None).await.unwrap(); + ctx.run(&program, None, id_generator).await.unwrap(); } #[tokio::test(flavor = "multi_thread", worker_threads = 5)] diff --git a/src/wasm-lib/derive-docs/tests/option.gen b/src/wasm-lib/derive-docs/tests/option.gen index 666cee018..a6d683cac 100644 --- a/src/wasm-lib/derive-docs/tests/option.gen +++ b/src/wasm-lib/derive-docs/tests/option.gen @@ -5,6 +5,7 @@ mod test_examples_show { let tokens = crate::token::lexer("This is code.\nIt does other shit.\nshow").unwrap(); let parser = crate::parser::Parser::new(tokens); let program = parser.ast().unwrap(); + let id_generator = crate::executor::IdGenerator::default(); let ctx = crate::executor::ExecutorContext { engine: std::sync::Arc::new(Box::new( crate::engine::conn_mock::EngineConnection::new() @@ -16,7 +17,7 @@ mod test_examples_show { settings: Default::default(), context_type: crate::executor::ContextType::Mock, }; - ctx.run(&program, None).await.unwrap(); + ctx.run(&program, None, id_generator).await.unwrap(); } #[tokio::test(flavor = "multi_thread", worker_threads = 5)] diff --git a/src/wasm-lib/derive-docs/tests/option_input_format.gen b/src/wasm-lib/derive-docs/tests/option_input_format.gen index f2d5789fd..8e0b43ef2 100644 --- a/src/wasm-lib/derive-docs/tests/option_input_format.gen +++ b/src/wasm-lib/derive-docs/tests/option_input_format.gen @@ -5,6 +5,7 @@ mod test_examples_import { let tokens = crate::token::lexer("This is code.\nIt does other shit.\nimport").unwrap(); let parser = crate::parser::Parser::new(tokens); let program = parser.ast().unwrap(); + let id_generator = crate::executor::IdGenerator::default(); let ctx = crate::executor::ExecutorContext { engine: std::sync::Arc::new(Box::new( crate::engine::conn_mock::EngineConnection::new() @@ -16,7 +17,7 @@ mod test_examples_import { settings: Default::default(), context_type: crate::executor::ContextType::Mock, }; - ctx.run(&program, None).await.unwrap(); + ctx.run(&program, None, id_generator).await.unwrap(); } #[tokio::test(flavor = "multi_thread", worker_threads = 5)] diff --git a/src/wasm-lib/derive-docs/tests/return_vec_box_sketch.gen b/src/wasm-lib/derive-docs/tests/return_vec_box_sketch.gen index 9c9987ba8..948b7affb 100644 --- a/src/wasm-lib/derive-docs/tests/return_vec_box_sketch.gen +++ b/src/wasm-lib/derive-docs/tests/return_vec_box_sketch.gen @@ -5,6 +5,7 @@ mod test_examples_import { let tokens = crate::token::lexer("This is code.\nIt does other shit.\nimport").unwrap(); let parser = crate::parser::Parser::new(tokens); let program = parser.ast().unwrap(); + let id_generator = crate::executor::IdGenerator::default(); let ctx = crate::executor::ExecutorContext { engine: std::sync::Arc::new(Box::new( crate::engine::conn_mock::EngineConnection::new() @@ -16,7 +17,7 @@ mod test_examples_import { settings: Default::default(), context_type: crate::executor::ContextType::Mock, }; - ctx.run(&program, None).await.unwrap(); + ctx.run(&program, None, id_generator).await.unwrap(); } #[tokio::test(flavor = "multi_thread", worker_threads = 5)] diff --git a/src/wasm-lib/derive-docs/tests/return_vec_sketch.gen b/src/wasm-lib/derive-docs/tests/return_vec_sketch.gen index fee2b7f97..173c22ee7 100644 --- a/src/wasm-lib/derive-docs/tests/return_vec_sketch.gen +++ b/src/wasm-lib/derive-docs/tests/return_vec_sketch.gen @@ -5,6 +5,7 @@ mod test_examples_import { let tokens = crate::token::lexer("This is code.\nIt does other shit.\nimport").unwrap(); let parser = crate::parser::Parser::new(tokens); let program = parser.ast().unwrap(); + let id_generator = crate::executor::IdGenerator::default(); let ctx = crate::executor::ExecutorContext { engine: std::sync::Arc::new(Box::new( crate::engine::conn_mock::EngineConnection::new() @@ -16,7 +17,7 @@ mod test_examples_import { settings: Default::default(), context_type: crate::executor::ContextType::Mock, }; - ctx.run(&program, None).await.unwrap(); + ctx.run(&program, None, id_generator).await.unwrap(); } #[tokio::test(flavor = "multi_thread", worker_threads = 5)] diff --git a/src/wasm-lib/derive-docs/tests/show.gen b/src/wasm-lib/derive-docs/tests/show.gen index 91fec8682..c899b3105 100644 --- a/src/wasm-lib/derive-docs/tests/show.gen +++ b/src/wasm-lib/derive-docs/tests/show.gen @@ -5,6 +5,7 @@ mod test_examples_show { let tokens = crate::token::lexer("This is code.\nIt does other shit.\nshow").unwrap(); let parser = crate::parser::Parser::new(tokens); let program = parser.ast().unwrap(); + let id_generator = crate::executor::IdGenerator::default(); let ctx = crate::executor::ExecutorContext { engine: std::sync::Arc::new(Box::new( crate::engine::conn_mock::EngineConnection::new() @@ -16,7 +17,7 @@ mod test_examples_show { settings: Default::default(), context_type: crate::executor::ContextType::Mock, }; - ctx.run(&program, None).await.unwrap(); + ctx.run(&program, None, id_generator).await.unwrap(); } #[tokio::test(flavor = "multi_thread", worker_threads = 5)] diff --git a/src/wasm-lib/derive-docs/tests/test_args_with_exec_state.gen b/src/wasm-lib/derive-docs/tests/test_args_with_exec_state.gen index 84d99382e..7687cb39e 100644 --- a/src/wasm-lib/derive-docs/tests/test_args_with_exec_state.gen +++ b/src/wasm-lib/derive-docs/tests/test_args_with_exec_state.gen @@ -5,6 +5,7 @@ mod test_examples_some_function { let tokens = crate::token::lexer("someFunction()").unwrap(); let parser = crate::parser::Parser::new(tokens); let program = parser.ast().unwrap(); + let id_generator = crate::executor::IdGenerator::default(); let ctx = crate::executor::ExecutorContext { engine: std::sync::Arc::new(Box::new( crate::engine::conn_mock::EngineConnection::new() @@ -16,7 +17,7 @@ mod test_examples_some_function { settings: Default::default(), context_type: crate::executor::ContextType::Mock, }; - ctx.run(&program, None).await.unwrap(); + ctx.run(&program, None, id_generator).await.unwrap(); } #[tokio::test(flavor = "multi_thread", worker_threads = 5)] diff --git a/src/wasm-lib/kcl-test-server/src/lib.rs b/src/wasm-lib/kcl-test-server/src/lib.rs index 397a0c8c0..c4e55a518 100644 --- a/src/wasm-lib/kcl-test-server/src/lib.rs +++ b/src/wasm-lib/kcl-test-server/src/lib.rs @@ -166,15 +166,19 @@ async fn snapshot_endpoint(body: Bytes, state: ExecutorContext) -> Response return bad_request(format!("Parse error: {e}")), }; eprintln!("Executing {test_name}"); + let mut id_generator = kcl_lib::executor::IdGenerator::default(); // This is a shitty source range, I don't know what else to use for it though. // There's no actual KCL associated with this reset_scene call. - if let Err(e) = state.reset_scene(kcl_lib::executor::SourceRange::default()).await { + if let Err(e) = state + .reset_scene(&mut id_generator, kcl_lib::executor::SourceRange::default()) + .await + { return kcl_err(e); } // Let users know if the test is taking a long time. let (done_tx, done_rx) = oneshot::channel::<()>(); let timer = time_until(done_rx); - let snapshot = match state.execute_and_prepare_snapshot(&program).await { + let snapshot = match state.execute_and_prepare_snapshot(&program, id_generator).await { Ok(sn) => sn, Err(e) => return kcl_err(e), }; diff --git a/src/wasm-lib/kcl-to-core/src/conn_mock_core.rs b/src/wasm-lib/kcl-to-core/src/conn_mock_core.rs index 589e5de72..7ad3a88c6 100644 --- a/src/wasm-lib/kcl-to-core/src/conn_mock_core.rs +++ b/src/wasm-lib/kcl-to-core/src/conn_mock_core.rs @@ -1,6 +1,9 @@ use anyhow::Result; use indexmap::IndexMap; -use kcl_lib::{errors::KclError, executor::DefaultPlanes}; +use kcl_lib::{ + errors::KclError, + executor::{DefaultPlanes, IdGenerator}, +}; use kittycad_modeling_cmds::{ self as kcmc, id::ModelingCmdId, @@ -357,7 +360,11 @@ impl kcl_lib::engine::EngineManager for EngineConnection { self.batch_end.clone() } - async fn default_planes(&self, source_range: kcl_lib::executor::SourceRange) -> Result { + async fn default_planes( + &self, + id_generator: &mut IdGenerator, + source_range: kcl_lib::executor::SourceRange, + ) -> Result { if NEED_PLANES { { let opt = self.default_planes.read().await.as_ref().cloned(); @@ -366,7 +373,7 @@ impl kcl_lib::engine::EngineManager for EngineConnection { } } // drop the read lock - let new_planes = self.new_default_planes(source_range).await?; + let new_planes = self.new_default_planes(id_generator, source_range).await?; *self.default_planes.write().await = Some(new_planes.clone()); Ok(new_planes) @@ -375,7 +382,11 @@ impl kcl_lib::engine::EngineManager for EngineConnection { } } - async fn clear_scene_post_hook(&self, _source_range: kcl_lib::executor::SourceRange) -> Result<(), KclError> { + async fn clear_scene_post_hook( + &self, + _id_generator: &mut IdGenerator, + _source_range: kcl_lib::executor::SourceRange, + ) -> Result<(), KclError> { Ok(()) } diff --git a/src/wasm-lib/kcl-to-core/src/lib.rs b/src/wasm-lib/kcl-to-core/src/lib.rs index f3a2674b9..b2e6ed699 100644 --- a/src/wasm-lib/kcl-to-core/src/lib.rs +++ b/src/wasm-lib/kcl-to-core/src/lib.rs @@ -1,5 +1,5 @@ use anyhow::Result; -use kcl_lib::executor::ExecutorContext; +use kcl_lib::executor::{ExecutorContext, IdGenerator}; use std::sync::{Arc, Mutex}; #[cfg(not(target_arch = "wasm32"))] @@ -23,7 +23,7 @@ pub async fn kcl_to_engine_core(code: &str) -> Result { settings: Default::default(), context_type: kcl_lib::executor::ContextType::MockCustomForwarded, }; - let _memory = ctx.run(&program, None).await?; + let _memory = ctx.run(&program, None, IdGenerator::default()).await?; let result = result.lock().expect("mutex lock").clone(); Ok(result) diff --git a/src/wasm-lib/kcl/src/engine/conn.rs b/src/wasm-lib/kcl/src/engine/conn.rs index 286c969e8..0873dc706 100644 --- a/src/wasm-lib/kcl/src/engine/conn.rs +++ b/src/wasm-lib/kcl/src/engine/conn.rs @@ -21,7 +21,7 @@ use tokio_tungstenite::tungstenite::Message as WsMsg; use crate::{ engine::EngineManager, errors::{KclError, KclErrorDetails}, - executor::DefaultPlanes, + executor::{DefaultPlanes, IdGenerator}, }; #[derive(Debug, PartialEq)] @@ -314,7 +314,11 @@ impl EngineManager for EngineConnection { self.batch_end.clone() } - async fn default_planes(&self, source_range: crate::executor::SourceRange) -> Result { + async fn default_planes( + &self, + id_generator: &mut IdGenerator, + source_range: crate::executor::SourceRange, + ) -> Result { { let opt = self.default_planes.read().await.as_ref().cloned(); if let Some(planes) = opt { @@ -322,15 +326,19 @@ impl EngineManager for EngineConnection { } } // drop the read lock - let new_planes = self.new_default_planes(source_range).await?; + let new_planes = self.new_default_planes(id_generator, source_range).await?; *self.default_planes.write().await = Some(new_planes.clone()); Ok(new_planes) } - async fn clear_scene_post_hook(&self, source_range: crate::executor::SourceRange) -> Result<(), KclError> { + async fn clear_scene_post_hook( + &self, + id_generator: &mut IdGenerator, + source_range: crate::executor::SourceRange, + ) -> Result<(), KclError> { // Remake the default planes, since they would have been removed after the scene was cleared. - let new_planes = self.new_default_planes(source_range).await?; + let new_planes = self.new_default_planes(id_generator, source_range).await?; *self.default_planes.write().await = Some(new_planes); Ok(()) diff --git a/src/wasm-lib/kcl/src/engine/conn_mock.rs b/src/wasm-lib/kcl/src/engine/conn_mock.rs index fa951eaba..97f7ecf4c 100644 --- a/src/wasm-lib/kcl/src/engine/conn_mock.rs +++ b/src/wasm-lib/kcl/src/engine/conn_mock.rs @@ -17,7 +17,10 @@ use kcmc::{ }; use kittycad_modeling_cmds::{self as kcmc}; -use crate::{errors::KclError, executor::DefaultPlanes}; +use crate::{ + errors::KclError, + executor::{DefaultPlanes, IdGenerator}, +}; #[derive(Debug, Clone)] pub struct EngineConnection { @@ -44,11 +47,19 @@ impl crate::engine::EngineManager for EngineConnection { self.batch_end.clone() } - async fn default_planes(&self, _source_range: crate::executor::SourceRange) -> Result { + async fn default_planes( + &self, + _id_generator: &mut IdGenerator, + _source_range: crate::executor::SourceRange, + ) -> Result { Ok(DefaultPlanes::default()) } - async fn clear_scene_post_hook(&self, _source_range: crate::executor::SourceRange) -> Result<(), KclError> { + async fn clear_scene_post_hook( + &self, + _id_generator: &mut IdGenerator, + _source_range: crate::executor::SourceRange, + ) -> Result<(), KclError> { Ok(()) } diff --git a/src/wasm-lib/kcl/src/engine/conn_wasm.rs b/src/wasm-lib/kcl/src/engine/conn_wasm.rs index dda6b73c6..8d6f1edaf 100644 --- a/src/wasm-lib/kcl/src/engine/conn_wasm.rs +++ b/src/wasm-lib/kcl/src/engine/conn_wasm.rs @@ -10,7 +10,7 @@ use wasm_bindgen::prelude::*; use crate::{ errors::{KclError, KclErrorDetails}, - executor::DefaultPlanes, + executor::{DefaultPlanes, IdGenerator}, }; #[wasm_bindgen(module = "/../../lang/std/engineConnection.ts")] @@ -68,7 +68,11 @@ impl crate::engine::EngineManager for EngineConnection { self.batch_end.clone() } - async fn default_planes(&self, source_range: crate::executor::SourceRange) -> Result { + async fn default_planes( + &self, + _id_generator: &mut IdGenerator, + source_range: crate::executor::SourceRange, + ) -> Result { // Get the default planes. let promise = self.manager.get_default_planes().map_err(|e| { KclError::Engine(KclErrorDetails { @@ -106,7 +110,11 @@ impl crate::engine::EngineManager for EngineConnection { Ok(default_planes) } - async fn clear_scene_post_hook(&self, source_range: crate::executor::SourceRange) -> Result<(), KclError> { + async fn clear_scene_post_hook( + &self, + _id_generator: &mut IdGenerator, + source_range: crate::executor::SourceRange, + ) -> Result<(), KclError> { self.manager.clear_default_planes().map_err(|e| { KclError::Engine(KclErrorDetails { message: e.to_string().into(), diff --git a/src/wasm-lib/kcl/src/engine/mod.rs b/src/wasm-lib/kcl/src/engine/mod.rs index 900d717ec..792c9699b 100644 --- a/src/wasm-lib/kcl/src/engine/mod.rs +++ b/src/wasm-lib/kcl/src/engine/mod.rs @@ -32,7 +32,7 @@ use uuid::Uuid; use crate::{ errors::{KclError, KclErrorDetails}, - executor::{DefaultPlanes, Point3d}, + executor::{DefaultPlanes, IdGenerator, Point3d}, }; lazy_static::lazy_static! { @@ -52,6 +52,7 @@ pub trait EngineManager: std::fmt::Debug + Send + Sync + 'static { /// Get the default planes. async fn default_planes( &self, + id_generator: &mut IdGenerator, _source_range: crate::executor::SourceRange, ) -> Result; @@ -59,6 +60,7 @@ pub trait EngineManager: std::fmt::Debug + Send + Sync + 'static { /// (These really only apply to wasm for now). async fn clear_scene_post_hook( &self, + id_generator: &mut IdGenerator, source_range: crate::executor::SourceRange, ) -> Result<(), crate::errors::KclError>; @@ -71,7 +73,11 @@ pub trait EngineManager: std::fmt::Debug + Send + Sync + 'static { id_to_source_range: HashMap, ) -> Result; - async fn clear_scene(&self, source_range: crate::executor::SourceRange) -> Result<(), crate::errors::KclError> { + async fn clear_scene( + &self, + id_generator: &mut IdGenerator, + source_range: crate::executor::SourceRange, + ) -> Result<(), crate::errors::KclError> { self.batch_modeling_cmd( uuid::Uuid::new_v4(), source_range, @@ -84,7 +90,7 @@ pub trait EngineManager: std::fmt::Debug + Send + Sync + 'static { self.flush_batch(false, source_range).await?; // Do the after clear scene hook. - self.clear_scene_post_hook(source_range).await?; + self.clear_scene_post_hook(id_generator, source_range).await?; Ok(()) } @@ -265,6 +271,7 @@ pub trait EngineManager: std::fmt::Debug + Send + Sync + 'static { async fn make_default_plane( &self, + plane_id: uuid::Uuid, x_axis: Point3d, y_axis: Point3d, color: Option, @@ -274,7 +281,6 @@ pub trait EngineManager: std::fmt::Debug + Send + Sync + 'static { let default_size = 100.0; let default_origin = Point3d { x: 0.0, y: 0.0, z: 0.0 }.into(); - let plane_id = uuid::Uuid::new_v4(); self.batch_modeling_cmd( plane_id, source_range, @@ -302,11 +308,16 @@ pub trait EngineManager: std::fmt::Debug + Send + Sync + 'static { Ok(plane_id) } - async fn new_default_planes(&self, source_range: crate::executor::SourceRange) -> Result { - let plane_settings: HashMap)> = HashMap::from([ + async fn new_default_planes( + &self, + id_generator: &mut IdGenerator, + source_range: crate::executor::SourceRange, + ) -> Result { + let plane_settings: HashMap)> = HashMap::from([ ( PlaneName::Xy, ( + id_generator.next_uuid(), Point3d { x: 1.0, y: 0.0, z: 0.0 }, Point3d { x: 0.0, y: 1.0, z: 0.0 }, Some(Color { @@ -320,6 +331,7 @@ pub trait EngineManager: std::fmt::Debug + Send + Sync + 'static { ( PlaneName::Yz, ( + id_generator.next_uuid(), Point3d { x: 0.0, y: 1.0, z: 0.0 }, Point3d { x: 0.0, y: 0.0, z: 1.0 }, Some(Color { @@ -333,6 +345,7 @@ pub trait EngineManager: std::fmt::Debug + Send + Sync + 'static { ( PlaneName::Xz, ( + id_generator.next_uuid(), Point3d { x: 1.0, y: 0.0, z: 0.0 }, Point3d { x: 0.0, y: 0.0, z: 1.0 }, Some(Color { @@ -346,6 +359,7 @@ pub trait EngineManager: std::fmt::Debug + Send + Sync + 'static { ( PlaneName::NegXy, ( + id_generator.next_uuid(), Point3d { x: -1.0, y: 0.0, @@ -358,6 +372,7 @@ pub trait EngineManager: std::fmt::Debug + Send + Sync + 'static { ( PlaneName::NegYz, ( + id_generator.next_uuid(), Point3d { x: 0.0, y: -1.0, @@ -370,6 +385,7 @@ pub trait EngineManager: std::fmt::Debug + Send + Sync + 'static { ( PlaneName::NegXz, ( + id_generator.next_uuid(), Point3d { x: -1.0, y: 0.0, @@ -382,10 +398,11 @@ pub trait EngineManager: std::fmt::Debug + Send + Sync + 'static { ]); let mut planes = HashMap::new(); - for (name, (x_axis, y_axis, color)) in plane_settings { + for (name, (plane_id, x_axis, y_axis, color)) in plane_settings { planes.insert( name, - self.make_default_plane(x_axis, y_axis, color, source_range).await?, + self.make_default_plane(plane_id, x_axis, y_axis, color, source_range) + .await?, ); } diff --git a/src/wasm-lib/kcl/src/executor.rs b/src/wasm-lib/kcl/src/executor.rs index 2612f5686..dfcc90f7d 100644 --- a/src/wasm-lib/kcl/src/executor.rs +++ b/src/wasm-lib/kcl/src/executor.rs @@ -40,6 +40,8 @@ use crate::{ pub struct ExecState { /// Program variable bindings. pub memory: ProgramMemory, + /// The stable artifact ID generator. + pub id_generator: IdGenerator, /// Dynamic state that follows dynamic flow of the program. pub dynamic_state: DynamicState, /// The current value of the pipe operator returned from the previous @@ -292,6 +294,33 @@ impl DynamicState { } } +/// A generator for ArtifactIds that can be stable across executions. +#[derive(Debug, Clone, Default, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)] +#[ts(export)] +#[serde(rename_all = "camelCase")] +pub struct IdGenerator { + next_id: usize, + ids: Vec, +} + +impl IdGenerator { + pub fn new() -> Self { + Self::default() + } + + pub fn next_uuid(&mut self) -> uuid::Uuid { + if let Some(id) = self.ids.get(self.next_id) { + self.next_id += 1; + *id + } else { + let id = uuid::Uuid::new_v4(); + self.ids.push(id); + self.next_id += 1; + id + } + } +} + /// Any KCL value. #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)] #[ts(export)] @@ -599,6 +628,82 @@ pub struct Plane { pub meta: Vec, } +impl Plane { + pub(crate) fn from_plane_data(value: crate::std::sketch::PlaneData, exec_state: &mut ExecState) -> Self { + let id = exec_state.id_generator.next_uuid(); + match value { + crate::std::sketch::PlaneData::XY => Plane { + id, + origin: Point3d::new(0.0, 0.0, 0.0), + x_axis: Point3d::new(1.0, 0.0, 0.0), + y_axis: Point3d::new(0.0, 1.0, 0.0), + z_axis: Point3d::new(0.0, 0.0, 1.0), + value: PlaneType::XY, + meta: vec![], + }, + crate::std::sketch::PlaneData::NegXY => Plane { + id, + origin: Point3d::new(0.0, 0.0, 0.0), + x_axis: Point3d::new(1.0, 0.0, 0.0), + y_axis: Point3d::new(0.0, 1.0, 0.0), + z_axis: Point3d::new(0.0, 0.0, -1.0), + value: PlaneType::XY, + meta: vec![], + }, + crate::std::sketch::PlaneData::XZ => Plane { + id, + origin: Point3d::new(0.0, 0.0, 0.0), + x_axis: Point3d::new(1.0, 0.0, 0.0), + y_axis: Point3d::new(0.0, 0.0, 1.0), + z_axis: Point3d::new(0.0, -1.0, 0.0), + value: PlaneType::XZ, + meta: vec![], + }, + crate::std::sketch::PlaneData::NegXZ => Plane { + id, + origin: Point3d::new(0.0, 0.0, 0.0), + x_axis: Point3d::new(-1.0, 0.0, 0.0), + y_axis: Point3d::new(0.0, 0.0, 1.0), + z_axis: Point3d::new(0.0, 1.0, 0.0), + value: PlaneType::XZ, + meta: vec![], + }, + crate::std::sketch::PlaneData::YZ => Plane { + id, + origin: Point3d::new(0.0, 0.0, 0.0), + x_axis: Point3d::new(0.0, 1.0, 0.0), + y_axis: Point3d::new(0.0, 0.0, 1.0), + z_axis: Point3d::new(1.0, 0.0, 0.0), + value: PlaneType::YZ, + meta: vec![], + }, + crate::std::sketch::PlaneData::NegYZ => Plane { + id, + origin: Point3d::new(0.0, 0.0, 0.0), + x_axis: Point3d::new(0.0, 1.0, 0.0), + y_axis: Point3d::new(0.0, 0.0, 1.0), + z_axis: Point3d::new(-1.0, 0.0, 0.0), + value: PlaneType::YZ, + meta: vec![], + }, + crate::std::sketch::PlaneData::Plane { + origin, + x_axis, + y_axis, + z_axis, + } => Plane { + id, + origin: *origin, + x_axis: *x_axis, + y_axis: *y_axis, + z_axis: *z_axis, + value: PlaneType::Custom, + meta: vec![], + }, + } + } +} + #[derive(Debug, Default, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)] #[ts(export)] #[serde(rename_all = "camelCase")] @@ -1836,8 +1941,12 @@ impl ExecutorContext { Ok(ctx) } - pub async fn reset_scene(&self, source_range: crate::executor::SourceRange) -> Result<()> { - self.engine.clear_scene(source_range).await?; + pub async fn reset_scene( + &self, + id_generator: &mut IdGenerator, + source_range: crate::executor::SourceRange, + ) -> Result<()> { + self.engine.clear_scene(id_generator, source_range).await?; Ok(()) } @@ -1848,8 +1957,11 @@ impl ExecutorContext { &self, program: &crate::ast::types::Program, memory: Option, + id_generator: IdGenerator, ) -> Result { - self.run_with_session_data(program, memory).await.map(|x| x.0) + self.run_with_session_data(program, memory, id_generator) + .await + .map(|x| x.0) } /// Perform the execution of a program. /// You can optionally pass in some initialization memory. @@ -1858,11 +1970,22 @@ impl ExecutorContext { &self, program: &crate::ast::types::Program, memory: Option, + id_generator: IdGenerator, ) -> Result<(ExecState, Option), KclError> { + let memory = if let Some(memory) = memory { + memory.clone() + } else { + Default::default() + }; + let mut exec_state = ExecState { + memory, + id_generator, + ..Default::default() + }; // Before we even start executing the program, set the units. self.engine .batch_modeling_cmd( - uuid::Uuid::new_v4(), + exec_state.id_generator.next_uuid(), SourceRange::default(), &ModelingCmd::from(mcmd::SetSceneUnits { unit: match self.settings.units { @@ -1876,15 +1999,7 @@ impl ExecutorContext { }), ) .await?; - let memory = if let Some(memory) = memory { - memory.clone() - } else { - Default::default() - }; - let mut exec_state = ExecState { - memory, - ..Default::default() - }; + self.inner_execute(program, &mut exec_state, crate::executor::BodyType::Root) .await?; let session_data = self.engine.get_session_data(); @@ -2029,8 +2144,12 @@ impl ExecutorContext { } /// Execute the program, then get a PNG screenshot. - pub async fn execute_and_prepare_snapshot(&self, program: &Program) -> Result { - let _ = self.run(program, None).await?; + pub async fn execute_and_prepare_snapshot( + &self, + program: &Program, + id_generator: IdGenerator, + ) -> Result { + let _ = self.run(program, None, id_generator).await?; // Zoom to fit. self.engine @@ -2175,7 +2294,7 @@ mod tests { settings: Default::default(), context_type: ContextType::Mock, }; - let exec_state = ctx.run(&program, None).await?; + let exec_state = ctx.run(&program, None, IdGenerator::default()).await?; Ok(exec_state.memory) } diff --git a/src/wasm-lib/kcl/src/lsp/kcl/mod.rs b/src/wasm-lib/kcl/src/lsp/kcl/mod.rs index 45215c096..31a393dcc 100644 --- a/src/wasm-lib/kcl/src/lsp/kcl/mod.rs +++ b/src/wasm-lib/kcl/src/lsp/kcl/mod.rs @@ -41,7 +41,7 @@ use tower_lsp::{ use crate::{ ast::types::{Expr, VariableKind}, - executor::SourceRange, + executor::{IdGenerator, SourceRange}, lsp::{backend::Backend as _, util::IntoDiagnostic}, parser::PIPE_OPERATOR, token::TokenType, @@ -588,10 +588,15 @@ impl Backend { return Ok(()); } - // Clear the scene, before we execute so it's not fugly as shit. - executor_ctx.engine.clear_scene(SourceRange::default()).await?; + let mut id_generator = IdGenerator::default(); - let exec_state = match executor_ctx.run(ast, None).await { + // Clear the scene, before we execute so it's not fugly as shit. + executor_ctx + .engine + .clear_scene(&mut id_generator, SourceRange::default()) + .await?; + + let exec_state = match executor_ctx.run(ast, None, id_generator).await { Ok(exec_state) => exec_state, Err(err) => { self.memory_map.remove(params.uri.as_str()); diff --git a/src/wasm-lib/kcl/src/std/chamfer.rs b/src/wasm-lib/kcl/src/std/chamfer.rs index b58c08d8e..e3deb4250 100644 --- a/src/wasm-lib/kcl/src/std/chamfer.rs +++ b/src/wasm-lib/kcl/src/std/chamfer.rs @@ -133,7 +133,7 @@ async fn inner_chamfer( EdgeReference::Tag(edge_tag) => args.get_tag_engine_info(exec_state, &edge_tag)?.id, }; - let id = uuid::Uuid::new_v4(); + let id = exec_state.id_generator.next_uuid(); args.batch_end_cmd( id, ModelingCmd::from(mcmd::Solid3dFilletEdge { diff --git a/src/wasm-lib/kcl/src/std/extrude.rs b/src/wasm-lib/kcl/src/std/extrude.rs index d130e9b70..a8724fba9 100644 --- a/src/wasm-lib/kcl/src/std/extrude.rs +++ b/src/wasm-lib/kcl/src/std/extrude.rs @@ -18,10 +18,10 @@ use crate::{ }; /// Extrudes by a given amount. -pub async fn extrude(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn extrude(exec_state: &mut ExecState, args: Args) -> Result { let (length, sketch_set) = args.get_number_sketch_set()?; - let result = inner_extrude(length, sketch_set, args).await?; + let result = inner_extrude(length, sketch_set, exec_state, args).await?; Ok(result.into()) } @@ -75,8 +75,13 @@ pub async fn extrude(_exec_state: &mut ExecState, args: Args) -> Result Result { - let id = uuid::Uuid::new_v4(); +async fn inner_extrude( + length: f64, + sketch_set: SketchSet, + exec_state: &mut ExecState, + args: Args, +) -> Result { + let id = exec_state.id_generator.next_uuid(); // Extrude the element(s). let sketches: Vec = sketch_set.into(); @@ -85,7 +90,7 @@ async fn inner_extrude(length: f64, sketch_set: SketchSet, args: Args) -> Result // Before we extrude, we need to enable the sketch mode. // We do this here in case extrude is called out of order. args.batch_modeling_cmd( - uuid::Uuid::new_v4(), + exec_state.id_generator.next_uuid(), ModelingCmd::from(mcmd::EnableSketchMode { animated: false, ortho: false, @@ -112,21 +117,26 @@ async fn inner_extrude(length: f64, sketch_set: SketchSet, args: Args) -> Result // Disable the sketch mode. args.batch_modeling_cmd( - uuid::Uuid::new_v4(), + exec_state.id_generator.next_uuid(), ModelingCmd::SketchModeDisable(mcmd::SketchModeDisable {}), ) .await?; - solids.push(do_post_extrude(sketch.clone(), length, args.clone()).await?); + solids.push(do_post_extrude(sketch.clone(), length, exec_state, args.clone()).await?); } Ok(solids.into()) } -pub(crate) async fn do_post_extrude(sketch: Sketch, length: f64, args: Args) -> Result, KclError> { +pub(crate) async fn do_post_extrude( + sketch: Sketch, + length: f64, + exec_state: &mut ExecState, + args: Args, +) -> Result, KclError> { // Bring the object to the front of the scene. // See: https://github.com/KittyCAD/modeling-app/issues/806 args.batch_modeling_cmd( - uuid::Uuid::new_v4(), + exec_state.id_generator.next_uuid(), ModelingCmd::from(mcmd::ObjectBringToFront { object_id: sketch.id }), ) .await?; @@ -159,7 +169,7 @@ pub(crate) async fn do_post_extrude(sketch: Sketch, length: f64, args: Args) -> let solid3d_info = args .send_modeling_cmd( - uuid::Uuid::new_v4(), + exec_state.id_generator.next_uuid(), ModelingCmd::from(mcmd::Solid3dGetExtrusionFaceInfo { edge_id, object_id: sketch.id, @@ -192,7 +202,7 @@ pub(crate) async fn do_post_extrude(sketch: Sketch, length: f64, args: Args) -> // Instead, the Typescript codebases (which handles WebSocket sends when compiled via Wasm) // uses this to build the artifact graph, which the UI needs. args.batch_modeling_cmd( - uuid::Uuid::new_v4(), + exec_state.id_generator.next_uuid(), ModelingCmd::from(mcmd::Solid3dGetOppositeEdge { edge_id: curve_id, object_id: sketch.id, @@ -202,7 +212,7 @@ pub(crate) async fn do_post_extrude(sketch: Sketch, length: f64, args: Args) -> .await?; args.batch_modeling_cmd( - uuid::Uuid::new_v4(), + exec_state.id_generator.next_uuid(), ModelingCmd::from(mcmd::Solid3dGetNextAdjacentEdge { edge_id: curve_id, object_id: sketch.id, @@ -216,7 +226,7 @@ pub(crate) async fn do_post_extrude(sketch: Sketch, length: f64, args: Args) -> sides: face_id_map, start_cap_id, end_cap_id, - } = analyze_faces(&args, face_infos); + } = analyze_faces(exec_state, &args, face_infos); // Iterate over the sketch.value array and add face_id to GeoMeta let new_value = sketch .value @@ -252,7 +262,7 @@ pub(crate) async fn do_post_extrude(sketch: Sketch, length: f64, args: Args) -> let extrude_surface = ExtrudeSurface::ExtrudePlane(crate::executor::ExtrudePlane { // pushing this values with a fake face_id to make extrudes mock-execute safe - face_id: Uuid::new_v4(), + face_id: exec_state.id_generator.next_uuid(), tag: path.get_base().tag.clone(), geo_meta: GeoMeta { id: path.get_base().geo_meta.id, @@ -291,15 +301,15 @@ struct Faces { start_cap_id: Option, } -fn analyze_faces(args: &Args, face_infos: Vec) -> Faces { +fn analyze_faces(exec_state: &mut ExecState, args: &Args, face_infos: Vec) -> Faces { let mut faces = Faces { sides: HashMap::with_capacity(face_infos.len()), ..Default::default() }; if args.ctx.is_mock() { // Create fake IDs for start and end caps, to make extrudes mock-execute safe - faces.start_cap_id = Some(Uuid::new_v4()); - faces.end_cap_id = Some(Uuid::new_v4()); + faces.start_cap_id = Some(exec_state.id_generator.next_uuid()); + faces.end_cap_id = Some(exec_state.id_generator.next_uuid()); } for face_info in face_infos { match face_info.cap { diff --git a/src/wasm-lib/kcl/src/std/fillet.rs b/src/wasm-lib/kcl/src/std/fillet.rs index d238e9ccc..8e0f0fdc9 100644 --- a/src/wasm-lib/kcl/src/std/fillet.rs +++ b/src/wasm-lib/kcl/src/std/fillet.rs @@ -142,7 +142,7 @@ async fn inner_fillet( for edge_tag in data.tags { let edge_id = edge_tag.get_engine_id(exec_state, &args)?; - let id = uuid::Uuid::new_v4(); + let id = exec_state.id_generator.next_uuid(); args.batch_end_cmd( id, ModelingCmd::from(mcmd::Solid3dFilletEdge { @@ -229,15 +229,16 @@ pub async fn get_opposite_edge(exec_state: &mut ExecState, args: Args) -> Result }] async fn inner_get_opposite_edge(tag: TagIdentifier, exec_state: &mut ExecState, args: Args) -> Result { if args.ctx.is_mock() { - return Ok(Uuid::new_v4()); + return Ok(exec_state.id_generator.next_uuid()); } let face_id = args.get_adjacent_face_to_tag(exec_state, &tag, false).await?; + let id = exec_state.id_generator.next_uuid(); let tagged_path = args.get_tag_engine_info(exec_state, &tag)?; let resp = args .send_modeling_cmd( - uuid::Uuid::new_v4(), + id, ModelingCmd::from(mcmd::Solid3dGetOppositeEdge { edge_id: tagged_path.id, object_id: tagged_path.sketch, @@ -310,15 +311,16 @@ async fn inner_get_next_adjacent_edge( args: Args, ) -> Result { if args.ctx.is_mock() { - return Ok(Uuid::new_v4()); + return Ok(exec_state.id_generator.next_uuid()); } let face_id = args.get_adjacent_face_to_tag(exec_state, &tag, false).await?; + let id = exec_state.id_generator.next_uuid(); let tagged_path = args.get_tag_engine_info(exec_state, &tag)?; let resp = args .send_modeling_cmd( - uuid::Uuid::new_v4(), + id, ModelingCmd::from(mcmd::Solid3dGetNextAdjacentEdge { edge_id: tagged_path.id, object_id: tagged_path.sketch, @@ -399,15 +401,16 @@ async fn inner_get_previous_adjacent_edge( args: Args, ) -> Result { if args.ctx.is_mock() { - return Ok(Uuid::new_v4()); + return Ok(exec_state.id_generator.next_uuid()); } let face_id = args.get_adjacent_face_to_tag(exec_state, &tag, false).await?; + let id = exec_state.id_generator.next_uuid(); let tagged_path = args.get_tag_engine_info(exec_state, &tag)?; let resp = args .send_modeling_cmd( - uuid::Uuid::new_v4(), + id, ModelingCmd::from(mcmd::Solid3dGetPrevAdjacentEdge { edge_id: tagged_path.id, object_id: tagged_path.sketch, diff --git a/src/wasm-lib/kcl/src/std/helix.rs b/src/wasm-lib/kcl/src/std/helix.rs index d62696fde..5d340a5fb 100644 --- a/src/wasm-lib/kcl/src/std/helix.rs +++ b/src/wasm-lib/kcl/src/std/helix.rs @@ -32,10 +32,10 @@ pub struct HelixData { } /// Create a helix on a cylinder. -pub async fn helix(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn helix(exec_state: &mut ExecState, args: Args) -> Result { let (data, solid): (HelixData, Box) = args.get_data_and_solid()?; - let solid = inner_helix(data, solid, args).await?; + let solid = inner_helix(data, solid, exec_state, args).await?; Ok(KclValue::Solid(solid)) } @@ -54,8 +54,13 @@ pub async fn helix(_exec_state: &mut ExecState, args: Args) -> Result, args: Args) -> Result, KclError> { - let id = uuid::Uuid::new_v4(); +async fn inner_helix( + data: HelixData, + solid: Box, + exec_state: &mut ExecState, + args: Args, +) -> Result, KclError> { + let id = exec_state.id_generator.next_uuid(); args.batch_modeling_cmd( id, ModelingCmd::from(mcmd::EntityMakeHelix { diff --git a/src/wasm-lib/kcl/src/std/import.rs b/src/wasm-lib/kcl/src/std/import.rs index 13155475a..3167c7fc8 100644 --- a/src/wasm-lib/kcl/src/std/import.rs +++ b/src/wasm-lib/kcl/src/std/import.rs @@ -126,10 +126,10 @@ impl From for InputFormat { /// /// Import paths are relative to the current project directory. This only works in the desktop app /// not in browser. -pub async fn import(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn import(exec_state: &mut ExecState, args: Args) -> Result { let (file_path, options): (String, Option) = args.get_import_data()?; - let imported_geometry = inner_import(file_path, options, args).await?; + let imported_geometry = inner_import(file_path, options, exec_state, args).await?; Ok(KclValue::ImportedGeometry(imported_geometry)) } @@ -170,6 +170,7 @@ pub async fn import(_exec_state: &mut ExecState, args: Args) -> Result, + exec_state: &mut ExecState, args: Args, ) -> Result { if file_path.is_empty() { @@ -286,13 +287,13 @@ async fn inner_import( if args.ctx.is_mock() { return Ok(ImportedGeometry { - id: uuid::Uuid::new_v4(), + id: exec_state.id_generator.next_uuid(), value: import_files.iter().map(|f| f.path.to_string()).collect(), meta: vec![args.source_range.into()], }); } - let id = uuid::Uuid::new_v4(); + let id = exec_state.id_generator.next_uuid(); let resp = args .send_modeling_cmd( id, diff --git a/src/wasm-lib/kcl/src/std/loft.rs b/src/wasm-lib/kcl/src/std/loft.rs index 37c8cb6a4..52e70b884 100644 --- a/src/wasm-lib/kcl/src/std/loft.rs +++ b/src/wasm-lib/kcl/src/std/loft.rs @@ -50,10 +50,10 @@ impl Default for LoftData { } /// Create a 3D surface or solid by interpolating between two or more sketches. -pub async fn loft(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn loft(exec_state: &mut ExecState, args: Args) -> Result { let (sketches, data): (Vec, Option) = args.get_sketches_and_data()?; - let solid = inner_loft(sketches, data, args).await?; + let solid = inner_loft(sketches, data, exec_state, args).await?; Ok(KclValue::Solid(solid)) } @@ -135,7 +135,12 @@ pub async fn loft(_exec_state: &mut ExecState, args: Args) -> Result, data: Option, args: Args) -> Result, KclError> { +async fn inner_loft( + sketches: Vec, + data: Option, + exec_state: &mut ExecState, + args: Args, +) -> Result, KclError> { // Make sure we have at least two sketches. if sketches.len() < 2 { return Err(KclError::Semantic(KclErrorDetails { @@ -150,7 +155,7 @@ async fn inner_loft(sketches: Vec, data: Option, args: Args) - // Get the loft data. let data = data.unwrap_or_default(); - let id = uuid::Uuid::new_v4(); + let id = exec_state.id_generator.next_uuid(); args.batch_modeling_cmd( id, ModelingCmd::from(mcmd::Loft { @@ -166,5 +171,5 @@ async fn inner_loft(sketches: Vec, data: Option, args: Args) - .await?; // Using the first sketch as the base curve, idk we might want to change this later. - do_post_extrude(sketches[0].clone(), 0.0, args).await + do_post_extrude(sketches[0].clone(), 0.0, exec_state, args).await } diff --git a/src/wasm-lib/kcl/src/std/mirror.rs b/src/wasm-lib/kcl/src/std/mirror.rs index 92a17c2f2..21ff9d50e 100644 --- a/src/wasm-lib/kcl/src/std/mirror.rs +++ b/src/wasm-lib/kcl/src/std/mirror.rs @@ -121,7 +121,7 @@ async fn inner_mirror_2d( let (axis, origin) = axis.axis_and_origin()?; args.batch_modeling_cmd( - uuid::Uuid::new_v4(), + exec_state.id_generator.next_uuid(), ModelingCmd::from(mcmd::EntityMirror { ids: starting_sketches.iter().map(|sketch| sketch.id).collect(), axis, @@ -134,7 +134,7 @@ async fn inner_mirror_2d( let edge_id = edge.get_engine_id(exec_state, &args)?; args.batch_modeling_cmd( - uuid::Uuid::new_v4(), + exec_state.id_generator.next_uuid(), ModelingCmd::from(mcmd::EntityMirrorAcrossEdge { ids: starting_sketches.iter().map(|sketch| sketch.id).collect(), edge_id, diff --git a/src/wasm-lib/kcl/src/std/patterns.rs b/src/wasm-lib/kcl/src/std/patterns.rs index 9631d218e..6a9b85fab 100644 --- a/src/wasm-lib/kcl/src/std/patterns.rs +++ b/src/wasm-lib/kcl/src/std/patterns.rs @@ -296,7 +296,7 @@ async fn inner_pattern_transform<'a>( let mut solids = Vec::new(); for e in starting_solids { - let new_solids = send_pattern_transform(transform.clone(), &e, args).await?; + let new_solids = send_pattern_transform(transform.clone(), &e, exec_state, args).await?; solids.extend(new_solids); } Ok(solids) @@ -307,9 +307,10 @@ async fn send_pattern_transform( // https://github.com/KittyCAD/modeling-app/issues/2821 transform: Vec, solid: &Solid, + exec_state: &mut ExecState, args: &Args, ) -> Result>, KclError> { - let id = uuid::Uuid::new_v4(); + let id = exec_state.id_generator.next_uuid(); let resp = args .send_modeling_cmd( @@ -473,7 +474,7 @@ mod tests { } /// A linear pattern on a 2D sketch. -pub async fn pattern_linear_2d(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn pattern_linear_2d(exec_state: &mut ExecState, args: Args) -> Result { let (data, sketch_set): (LinearPattern2dData, SketchSet) = args.get_data_and_sketch_set()?; if data.axis == [0.0, 0.0] { @@ -485,7 +486,7 @@ pub async fn pattern_linear_2d(_exec_state: &mut ExecState, args: Args) -> Resul })); } - let sketches = inner_pattern_linear_2d(data, sketch_set, args).await?; + let sketches = inner_pattern_linear_2d(data, sketch_set, exec_state, args).await?; Ok(sketches.into()) } @@ -509,6 +510,7 @@ pub async fn pattern_linear_2d(_exec_state: &mut ExecState, args: Args) -> Resul async fn inner_pattern_linear_2d( data: LinearPattern2dData, sketch_set: SketchSet, + exec_state: &mut ExecState, args: Args, ) -> Result>, KclError> { let starting_sketches: Vec> = sketch_set.into(); @@ -522,6 +524,7 @@ async fn inner_pattern_linear_2d( let geometries = pattern_linear( LinearPattern::TwoD(data.clone()), Geometry::Sketch(sketch.clone()), + exec_state, args.clone(), ) .await?; @@ -600,6 +603,7 @@ async fn inner_pattern_linear_3d( let geometries = pattern_linear( LinearPattern::ThreeD(data.clone()), Geometry::Solid(solid.clone()), + exec_state, args.clone(), ) .await?; @@ -617,8 +621,13 @@ async fn inner_pattern_linear_3d( Ok(solids) } -async fn pattern_linear(data: LinearPattern, geometry: Geometry, args: Args) -> Result { - let id = uuid::Uuid::new_v4(); +async fn pattern_linear( + data: LinearPattern, + geometry: Geometry, + exec_state: &mut ExecState, + args: Args, +) -> Result { + let id = exec_state.id_generator.next_uuid(); let resp = args .send_modeling_cmd( @@ -745,10 +754,10 @@ impl CircularPattern { } /// A circular pattern on a 2D sketch. -pub async fn pattern_circular_2d(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn pattern_circular_2d(exec_state: &mut ExecState, args: Args) -> Result { let (data, sketch_set): (CircularPattern2dData, SketchSet) = args.get_data_and_sketch_set()?; - let sketches = inner_pattern_circular_2d(data, sketch_set, args).await?; + let sketches = inner_pattern_circular_2d(data, sketch_set, exec_state, args).await?; Ok(sketches.into()) } @@ -779,6 +788,7 @@ pub async fn pattern_circular_2d(_exec_state: &mut ExecState, args: Args) -> Res async fn inner_pattern_circular_2d( data: CircularPattern2dData, sketch_set: SketchSet, + exec_state: &mut ExecState, args: Args, ) -> Result>, KclError> { let starting_sketches: Vec> = sketch_set.into(); @@ -792,6 +802,7 @@ async fn inner_pattern_circular_2d( let geometries = pattern_circular( CircularPattern::TwoD(data.clone()), Geometry::Sketch(sketch.clone()), + exec_state, args.clone(), ) .await?; @@ -861,6 +872,7 @@ async fn inner_pattern_circular_3d( let geometries = pattern_circular( CircularPattern::ThreeD(data.clone()), Geometry::Solid(solid.clone()), + exec_state, args.clone(), ) .await?; @@ -878,8 +890,13 @@ async fn inner_pattern_circular_3d( Ok(solids) } -async fn pattern_circular(data: CircularPattern, geometry: Geometry, args: Args) -> Result { - let id = uuid::Uuid::new_v4(); +async fn pattern_circular( + data: CircularPattern, + geometry: Geometry, + exec_state: &mut ExecState, + args: Args, +) -> Result { + let id = exec_state.id_generator.next_uuid(); let center = data.center(); let resp = args diff --git a/src/wasm-lib/kcl/src/std/planes.rs b/src/wasm-lib/kcl/src/std/planes.rs index e101f5450..436d19938 100644 --- a/src/wasm-lib/kcl/src/std/planes.rs +++ b/src/wasm-lib/kcl/src/std/planes.rs @@ -48,10 +48,10 @@ impl From for PlaneData { } /// Offset a plane by a distance along its normal. -pub async fn offset_plane(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn offset_plane(exec_state: &mut ExecState, args: Args) -> Result { let (std_plane, offset): (StandardPlane, f64) = args.get_data_and_float()?; - let plane = inner_offset_plane(std_plane, offset).await?; + let plane = inner_offset_plane(std_plane, offset, exec_state).await?; Ok(KclValue::UserVal(UserVal::new( vec![Metadata { @@ -132,11 +132,15 @@ pub async fn offset_plane(_exec_state: &mut ExecState, args: Args) -> Result Result { +async fn inner_offset_plane( + std_plane: StandardPlane, + offset: f64, + exec_state: &mut ExecState, +) -> Result { // Convert to the plane type. let plane_data: PlaneData = std_plane.into(); // Convert to a plane. - let mut plane = Plane::from(plane_data); + let mut plane = Plane::from_plane_data(plane_data, exec_state); match std_plane { StandardPlane::XY => { diff --git a/src/wasm-lib/kcl/src/std/revolve.rs b/src/wasm-lib/kcl/src/std/revolve.rs index 701eff1d8..5ba5df96b 100644 --- a/src/wasm-lib/kcl/src/std/revolve.rs +++ b/src/wasm-lib/kcl/src/std/revolve.rs @@ -263,7 +263,7 @@ async fn inner_revolve( let angle = Angle::from_degrees(data.angle.unwrap_or(360.0)); - let id = uuid::Uuid::new_v4(); + let id = exec_state.id_generator.next_uuid(); match data.axis { AxisOrEdgeReference::Axis(axis) => { let (axis, origin) = axis.axis_and_origin()?; @@ -295,7 +295,7 @@ async fn inner_revolve( } } - do_post_extrude(sketch, 0.0, args).await + do_post_extrude(sketch, 0.0, exec_state, args).await } #[cfg(test)] diff --git a/src/wasm-lib/kcl/src/std/shapes.rs b/src/wasm-lib/kcl/src/std/shapes.rs index f0ac60165..96feb777e 100644 --- a/src/wasm-lib/kcl/src/std/shapes.rs +++ b/src/wasm-lib/kcl/src/std/shapes.rs @@ -97,7 +97,7 @@ async fn inner_circle( let angle_start = Angle::zero(); let angle_end = Angle::turn(); - let id = uuid::Uuid::new_v4(); + let id = exec_state.id_generator.next_uuid(); args.batch_modeling_cmd( id, diff --git a/src/wasm-lib/kcl/src/std/shell.rs b/src/wasm-lib/kcl/src/std/shell.rs index 80f0c4977..16162beb2 100644 --- a/src/wasm-lib/kcl/src/std/shell.rs +++ b/src/wasm-lib/kcl/src/std/shell.rs @@ -229,7 +229,7 @@ async fn inner_shell( } args.batch_modeling_cmd( - uuid::Uuid::new_v4(), + exec_state.id_generator.next_uuid(), ModelingCmd::from(mcmd::Solid3dShellFace { hollow: false, face_ids, @@ -314,7 +314,7 @@ async fn inner_hollow( args.flush_batch_for_solid_set(exec_state, solid.clone().into()).await?; args.batch_modeling_cmd( - uuid::Uuid::new_v4(), + exec_state.id_generator.next_uuid(), ModelingCmd::from(mcmd::Solid3dShellFace { hollow: true, face_ids: Vec::new(), // This is empty because we want to hollow the entire object. diff --git a/src/wasm-lib/kcl/src/std/sketch.rs b/src/wasm-lib/kcl/src/std/sketch.rs index c725e4cd4..2d0b622ef 100644 --- a/src/wasm-lib/kcl/src/std/sketch.rs +++ b/src/wasm-lib/kcl/src/std/sketch.rs @@ -16,8 +16,8 @@ use crate::{ ast::types::TagDeclarator, errors::{KclError, KclErrorDetails}, executor::{ - BasePath, ExecState, Face, GeoMeta, KclValue, Path, Plane, PlaneType, Point2d, Point3d, Sketch, SketchSet, - SketchSurface, Solid, TagEngineInfo, TagIdentifier, UserVal, + BasePath, ExecState, Face, GeoMeta, KclValue, Path, Plane, Point2d, Point3d, Sketch, SketchSet, SketchSurface, + Solid, TagEngineInfo, TagIdentifier, UserVal, }, std::{ utils::{ @@ -93,10 +93,10 @@ pub enum StartOrEnd { } /// Draw a line to a point. -pub async fn line_to(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn line_to(exec_state: &mut ExecState, args: Args) -> Result { let (to, sketch, tag): ([f64; 2], Sketch, Option) = args.get_data_and_sketch_and_tag()?; - let new_sketch = inner_line_to(to, sketch, tag, args).await?; + let new_sketch = inner_line_to(to, sketch, tag, exec_state, args).await?; Ok(KclValue::new_user_val(new_sketch.meta.clone(), new_sketch)) } @@ -119,10 +119,11 @@ async fn inner_line_to( to: [f64; 2], sketch: Sketch, tag: Option, + exec_state: &mut ExecState, args: Args, ) -> Result { let from = sketch.current_pen_position()?; - let id = uuid::Uuid::new_v4(); + let id = exec_state.id_generator.next_uuid(); args.batch_modeling_cmd( id, @@ -159,10 +160,10 @@ async fn inner_line_to( } /// Draw a line to a point on the x-axis. -pub async fn x_line_to(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn x_line_to(exec_state: &mut ExecState, args: Args) -> Result { let (to, sketch, tag): (f64, Sketch, Option) = args.get_data_and_sketch_and_tag()?; - let new_sketch = inner_x_line_to(to, sketch, tag, args).await?; + let new_sketch = inner_x_line_to(to, sketch, tag, exec_state, args).await?; Ok(KclValue::new_user_val(new_sketch.meta.clone(), new_sketch)) } @@ -192,19 +193,25 @@ pub async fn x_line_to(_exec_state: &mut ExecState, args: Args) -> Result, args: Args) -> Result { +async fn inner_x_line_to( + to: f64, + sketch: Sketch, + tag: Option, + exec_state: &mut ExecState, + args: Args, +) -> Result { let from = sketch.current_pen_position()?; - let new_sketch = inner_line_to([to, from.y], sketch, tag, args).await?; + let new_sketch = inner_line_to([to, from.y], sketch, tag, exec_state, args).await?; Ok(new_sketch) } /// Draw a line to a point on the y-axis. -pub async fn y_line_to(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn y_line_to(exec_state: &mut ExecState, args: Args) -> Result { let (to, sketch, tag): (f64, Sketch, Option) = args.get_data_and_sketch_and_tag()?; - let new_sketch = inner_y_line_to(to, sketch, tag, args).await?; + let new_sketch = inner_y_line_to(to, sketch, tag, exec_state, args).await?; Ok(KclValue::new_user_val(new_sketch.meta.clone(), new_sketch)) } @@ -227,18 +234,24 @@ pub async fn y_line_to(_exec_state: &mut ExecState, args: Args) -> Result, args: Args) -> Result { +async fn inner_y_line_to( + to: f64, + sketch: Sketch, + tag: Option, + exec_state: &mut ExecState, + args: Args, +) -> Result { let from = sketch.current_pen_position()?; - let new_sketch = inner_line_to([from.x, to], sketch, tag, args).await?; + let new_sketch = inner_line_to([from.x, to], sketch, tag, exec_state, args).await?; Ok(new_sketch) } /// Draw a line. -pub async fn line(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn line(exec_state: &mut ExecState, args: Args) -> Result { let (delta, sketch, tag): ([f64; 2], Sketch, Option) = args.get_data_and_sketch_and_tag()?; - let new_sketch = inner_line(delta, sketch, tag, args).await?; + let new_sketch = inner_line(delta, sketch, tag, exec_state, args).await?; Ok(KclValue::new_user_val(new_sketch.meta.clone(), new_sketch)) } @@ -273,12 +286,13 @@ async fn inner_line( delta: [f64; 2], sketch: Sketch, tag: Option, + exec_state: &mut ExecState, args: Args, ) -> Result { let from = sketch.current_pen_position()?; let to = [from.x + delta[0], from.y + delta[1]]; - let id = uuid::Uuid::new_v4(); + let id = exec_state.id_generator.next_uuid(); args.batch_modeling_cmd( id, @@ -315,10 +329,10 @@ async fn inner_line( } /// Draw a line on the x-axis. -pub async fn x_line(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn x_line(exec_state: &mut ExecState, args: Args) -> Result { let (length, sketch, tag): (f64, Sketch, Option) = args.get_data_and_sketch_and_tag()?; - let new_sketch = inner_x_line(length, sketch, tag, args).await?; + let new_sketch = inner_x_line(length, sketch, tag, exec_state, args).await?; Ok(KclValue::new_user_val(new_sketch.meta.clone(), new_sketch)) } @@ -347,15 +361,21 @@ pub async fn x_line(_exec_state: &mut ExecState, args: Args) -> Result, args: Args) -> Result { - inner_line([length, 0.0], sketch, tag, args).await +async fn inner_x_line( + length: f64, + sketch: Sketch, + tag: Option, + exec_state: &mut ExecState, + args: Args, +) -> Result { + inner_line([length, 0.0], sketch, tag, exec_state, args).await } /// Draw a line on the y-axis. -pub async fn y_line(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn y_line(exec_state: &mut ExecState, args: Args) -> Result { let (length, sketch, tag): (f64, Sketch, Option) = args.get_data_and_sketch_and_tag()?; - let new_sketch = inner_y_line(length, sketch, tag, args).await?; + let new_sketch = inner_y_line(length, sketch, tag, exec_state, args).await?; Ok(KclValue::new_user_val(new_sketch.meta.clone(), new_sketch)) } @@ -379,8 +399,14 @@ pub async fn y_line(_exec_state: &mut ExecState, args: Args) -> Result, args: Args) -> Result { - inner_line([0.0, length], sketch, tag, args).await +async fn inner_y_line( + length: f64, + sketch: Sketch, + tag: Option, + exec_state: &mut ExecState, + args: Args, +) -> Result { + inner_line([0.0, length], sketch, tag, exec_state, args).await } /// Data to draw an angled line. @@ -400,10 +426,10 @@ pub enum AngledLineData { } /// Draw an angled line. -pub async fn angled_line(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn angled_line(exec_state: &mut ExecState, args: Args) -> Result { let (data, sketch, tag): (AngledLineData, Sketch, Option) = args.get_data_and_sketch_and_tag()?; - let new_sketch = inner_angled_line(data, sketch, tag, args).await?; + let new_sketch = inner_angled_line(data, sketch, tag, exec_state, args).await?; Ok(KclValue::new_user_val(new_sketch.meta.clone(), new_sketch)) } @@ -431,6 +457,7 @@ async fn inner_angled_line( data: AngledLineData, sketch: Sketch, tag: Option, + exec_state: &mut ExecState, args: Args, ) -> Result { let from = sketch.current_pen_position()?; @@ -448,7 +475,7 @@ async fn inner_angled_line( let to: [f64; 2] = [from.x + delta[0], from.y + delta[1]]; - let id = uuid::Uuid::new_v4(); + let id = exec_state.id_generator.next_uuid(); args.batch_modeling_cmd( id, @@ -484,10 +511,10 @@ async fn inner_angled_line( } /// Draw an angled line of a given x length. -pub async fn angled_line_of_x_length(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn angled_line_of_x_length(exec_state: &mut ExecState, args: Args) -> Result { let (data, sketch, tag): (AngledLineData, Sketch, Option) = args.get_data_and_sketch_and_tag()?; - let new_sketch = inner_angled_line_of_x_length(data, sketch, tag, args).await?; + let new_sketch = inner_angled_line_of_x_length(data, sketch, tag, exec_state, args).await?; Ok(KclValue::new_user_val(new_sketch.meta.clone(), new_sketch)) } @@ -511,6 +538,7 @@ async fn inner_angled_line_of_x_length( data: AngledLineData, sketch: Sketch, tag: Option, + exec_state: &mut ExecState, args: Args, ) -> Result { let (angle, length) = match data { @@ -534,7 +562,7 @@ async fn inner_angled_line_of_x_length( let to = get_y_component(Angle::from_degrees(angle), length); - let new_sketch = inner_line(to.into(), sketch, tag, args).await?; + let new_sketch = inner_line(to.into(), sketch, tag, exec_state, args).await?; Ok(new_sketch) } @@ -551,10 +579,10 @@ pub struct AngledLineToData { } /// Draw an angled line to a given x coordinate. -pub async fn angled_line_to_x(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn angled_line_to_x(exec_state: &mut ExecState, args: Args) -> Result { let (data, sketch, tag): (AngledLineToData, Sketch, Option) = args.get_data_and_sketch_and_tag()?; - let new_sketch = inner_angled_line_to_x(data, sketch, tag, args).await?; + let new_sketch = inner_angled_line_to_x(data, sketch, tag, exec_state, args).await?; Ok(KclValue::new_user_val(new_sketch.meta.clone(), new_sketch)) } @@ -579,6 +607,7 @@ async fn inner_angled_line_to_x( data: AngledLineToData, sketch: Sketch, tag: Option, + exec_state: &mut ExecState, args: Args, ) -> Result { let from = sketch.current_pen_position()?; @@ -602,15 +631,15 @@ async fn inner_angled_line_to_x( let y_component = x_component * f64::tan(angle.to_radians()); let y_to = from.y + y_component; - let new_sketch = inner_line_to([x_to, y_to], sketch, tag, args).await?; + let new_sketch = inner_line_to([x_to, y_to], sketch, tag, exec_state, args).await?; Ok(new_sketch) } /// Draw an angled line of a given y length. -pub async fn angled_line_of_y_length(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn angled_line_of_y_length(exec_state: &mut ExecState, args: Args) -> Result { let (data, sketch, tag): (AngledLineData, Sketch, Option) = args.get_data_and_sketch_and_tag()?; - let new_sketch = inner_angled_line_of_y_length(data, sketch, tag, args).await?; + let new_sketch = inner_angled_line_of_y_length(data, sketch, tag, exec_state, args).await?; Ok(KclValue::new_user_val(new_sketch.meta.clone(), new_sketch)) } @@ -637,6 +666,7 @@ async fn inner_angled_line_of_y_length( data: AngledLineData, sketch: Sketch, tag: Option, + exec_state: &mut ExecState, args: Args, ) -> Result { let (angle, length) = match data { @@ -660,16 +690,16 @@ async fn inner_angled_line_of_y_length( let to = get_x_component(Angle::from_degrees(angle), length); - let new_sketch = inner_line(to.into(), sketch, tag, args).await?; + let new_sketch = inner_line(to.into(), sketch, tag, exec_state, args).await?; Ok(new_sketch) } /// Draw an angled line to a given y coordinate. -pub async fn angled_line_to_y(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn angled_line_to_y(exec_state: &mut ExecState, args: Args) -> Result { let (data, sketch, tag): (AngledLineToData, Sketch, Option) = args.get_data_and_sketch_and_tag()?; - let new_sketch = inner_angled_line_to_y(data, sketch, tag, args).await?; + let new_sketch = inner_angled_line_to_y(data, sketch, tag, exec_state, args).await?; Ok(KclValue::new_user_val(new_sketch.meta.clone(), new_sketch)) } @@ -694,6 +724,7 @@ async fn inner_angled_line_to_y( data: AngledLineToData, sketch: Sketch, tag: Option, + exec_state: &mut ExecState, args: Args, ) -> Result { let from = sketch.current_pen_position()?; @@ -717,7 +748,7 @@ async fn inner_angled_line_to_y( let x_component = y_component / f64::tan(angle.to_radians()); let x_to = from.x + x_component; - let new_sketch = inner_line_to([x_to, y_to], sketch, tag, args).await?; + let new_sketch = inner_line_to([x_to, y_to], sketch, tag, exec_state, args).await?; Ok(new_sketch) } @@ -788,7 +819,7 @@ async fn inner_angled_line_that_intersects( from, ); - let new_sketch = inner_line_to(to.into(), sketch, tag, args).await?; + let new_sketch = inner_line_to(to.into(), sketch, tag, exec_state, args).await?; Ok(new_sketch) } @@ -891,82 +922,6 @@ pub enum PlaneData { }, } -impl From for Plane { - fn from(value: PlaneData) -> Self { - let id = uuid::Uuid::new_v4(); - match value { - PlaneData::XY => Plane { - id, - origin: Point3d::new(0.0, 0.0, 0.0), - x_axis: Point3d::new(1.0, 0.0, 0.0), - y_axis: Point3d::new(0.0, 1.0, 0.0), - z_axis: Point3d::new(0.0, 0.0, 1.0), - value: PlaneType::XY, - meta: vec![], - }, - PlaneData::NegXY => Plane { - id, - origin: Point3d::new(0.0, 0.0, 0.0), - x_axis: Point3d::new(1.0, 0.0, 0.0), - y_axis: Point3d::new(0.0, 1.0, 0.0), - z_axis: Point3d::new(0.0, 0.0, -1.0), - value: PlaneType::XY, - meta: vec![], - }, - PlaneData::XZ => Plane { - id, - origin: Point3d::new(0.0, 0.0, 0.0), - x_axis: Point3d::new(1.0, 0.0, 0.0), - y_axis: Point3d::new(0.0, 0.0, 1.0), - z_axis: Point3d::new(0.0, -1.0, 0.0), - value: PlaneType::XZ, - meta: vec![], - }, - PlaneData::NegXZ => Plane { - id, - origin: Point3d::new(0.0, 0.0, 0.0), - x_axis: Point3d::new(-1.0, 0.0, 0.0), - y_axis: Point3d::new(0.0, 0.0, 1.0), - z_axis: Point3d::new(0.0, 1.0, 0.0), - value: PlaneType::XZ, - meta: vec![], - }, - PlaneData::YZ => Plane { - id, - origin: Point3d::new(0.0, 0.0, 0.0), - x_axis: Point3d::new(0.0, 1.0, 0.0), - y_axis: Point3d::new(0.0, 0.0, 1.0), - z_axis: Point3d::new(1.0, 0.0, 0.0), - value: PlaneType::YZ, - meta: vec![], - }, - PlaneData::NegYZ => Plane { - id, - origin: Point3d::new(0.0, 0.0, 0.0), - x_axis: Point3d::new(0.0, 1.0, 0.0), - y_axis: Point3d::new(0.0, 0.0, 1.0), - z_axis: Point3d::new(-1.0, 0.0, 0.0), - value: PlaneType::YZ, - meta: vec![], - }, - PlaneData::Plane { - origin, - x_axis, - y_axis, - z_axis, - } => Plane { - id, - origin: *origin, - x_axis: *x_axis, - y_axis: *y_axis, - z_axis: *z_axis, - value: PlaneType::Custom, - meta: vec![], - }, - } - } -} - /// Start a sketch on a specific plane or face. pub async fn start_sketch_on(exec_state: &mut ExecState, args: Args) -> Result { let (data, tag): (SketchData, Option) = args.get_data_and_optional_tag()?; @@ -1089,7 +1044,7 @@ async fn inner_start_sketch_on( ) -> Result { match data { SketchData::Plane(plane_data) => { - let plane = start_sketch_on_plane(plane_data, args).await?; + let plane = start_sketch_on_plane(plane_data, exec_state, args).await?; Ok(SketchSurface::Plane(plane)) } SketchData::Solid(solid) => { @@ -1125,11 +1080,19 @@ async fn start_sketch_on_face( })) } -async fn start_sketch_on_plane(data: PlaneData, args: &Args) -> Result, KclError> { - let mut plane: Plane = data.clone().into(); +async fn start_sketch_on_plane( + data: PlaneData, + exec_state: &mut ExecState, + args: &Args, +) -> Result, KclError> { + let mut plane = Plane::from_plane_data(data.clone(), exec_state); // Get the default planes. - let default_planes = args.ctx.engine.default_planes(args.source_range).await?; + let default_planes = args + .ctx + .engine + .default_planes(&mut exec_state.id_generator, args.source_range) + .await?; plane.id = match data { PlaneData::XY => default_planes.xy, @@ -1145,7 +1108,7 @@ async fn start_sketch_on_plane(data: PlaneData, args: &Args) -> Result { // Create the custom plane on the fly. - let id = uuid::Uuid::new_v4(); + let id = exec_state.id_generator.next_uuid(); args.batch_modeling_cmd( id, ModelingCmd::from(mcmd::MakePlane { @@ -1228,7 +1191,7 @@ pub(crate) async fn inner_start_profile_at( // Enter sketch mode on the surface. // We call this here so you can reuse the sketch surface for multiple sketches. - let id = uuid::Uuid::new_v4(); + let id = exec_state.id_generator.next_uuid(); args.batch_modeling_cmd( id, ModelingCmd::from(mcmd::EnableSketchMode { @@ -1246,8 +1209,8 @@ pub(crate) async fn inner_start_profile_at( ) .await?; - let id = uuid::Uuid::new_v4(); - let path_id = uuid::Uuid::new_v4(); + let id = exec_state.id_generator.next_uuid(); + let path_id = exec_state.id_generator.next_uuid(); args.batch_modeling_cmd(path_id, ModelingCmd::from(mcmd::StartPath {})) .await?; @@ -1375,10 +1338,10 @@ pub(crate) fn inner_profile_start(sketch: Sketch) -> Result<[f64; 2], KclError> } /// Close the current sketch. -pub async fn close(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn close(exec_state: &mut ExecState, args: Args) -> Result { let (sketch, tag): (Sketch, Option) = args.get_sketch_and_optional_tag()?; - let new_sketch = inner_close(sketch, tag, args).await?; + let new_sketch = inner_close(sketch, tag, exec_state, args).await?; Ok(KclValue::new_user_val(new_sketch.meta.clone(), new_sketch)) } @@ -1407,11 +1370,16 @@ pub async fn close(_exec_state: &mut ExecState, args: Args) -> Result, args: Args) -> Result { +pub(crate) async fn inner_close( + sketch: Sketch, + tag: Option, + exec_state: &mut ExecState, + args: Args, +) -> Result { let from = sketch.current_pen_position()?; let to: Point2d = sketch.start.from.into(); - let id = uuid::Uuid::new_v4(); + let id = exec_state.id_generator.next_uuid(); args.batch_modeling_cmd(id, ModelingCmd::from(mcmd::ClosePath { path_id: sketch.id })) .await?; @@ -1420,7 +1388,7 @@ pub(crate) async fn inner_close(sketch: Sketch, tag: Option, args if let SketchSurface::Plane(_) = sketch.on { // We were on a plane, disable the sketch mode. args.batch_modeling_cmd( - uuid::Uuid::new_v4(), + exec_state.id_generator.next_uuid(), ModelingCmd::SketchModeDisable(mcmd::SketchModeDisable {}), ) .await?; @@ -1478,10 +1446,10 @@ pub enum ArcData { } /// Draw an arc. -pub async fn arc(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn arc(exec_state: &mut ExecState, args: Args) -> Result { let (data, sketch, tag): (ArcData, Sketch, Option) = args.get_data_and_sketch_and_tag()?; - let new_sketch = inner_arc(data, sketch, tag, args).await?; + let new_sketch = inner_arc(data, sketch, tag, exec_state, args).await?; Ok(KclValue::new_user_val(new_sketch.meta.clone(), new_sketch)) } @@ -1514,6 +1482,7 @@ pub(crate) async fn inner_arc( data: ArcData, sketch: Sketch, tag: Option, + exec_state: &mut ExecState, args: Args, ) -> Result { let from: Point2d = sketch.current_pen_position()?; @@ -1542,7 +1511,7 @@ pub(crate) async fn inner_arc( })); } - let id = uuid::Uuid::new_v4(); + let id = exec_state.id_generator.next_uuid(); args.batch_modeling_cmd( id, @@ -1596,10 +1565,10 @@ pub enum TangentialArcData { } /// Draw a tangential arc. -pub async fn tangential_arc(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn tangential_arc(exec_state: &mut ExecState, args: Args) -> Result { let (data, sketch, tag): (TangentialArcData, Sketch, Option) = args.get_data_and_sketch_and_tag()?; - let new_sketch = inner_tangential_arc(data, sketch, tag, args).await?; + let new_sketch = inner_tangential_arc(data, sketch, tag, exec_state, args).await?; Ok(KclValue::new_user_val(new_sketch.meta.clone(), new_sketch)) } @@ -1633,6 +1602,7 @@ async fn inner_tangential_arc( data: TangentialArcData, sketch: Sketch, tag: Option, + exec_state: &mut ExecState, args: Args, ) -> Result { let from: Point2d = sketch.current_pen_position()?; @@ -1644,7 +1614,7 @@ async fn inner_tangential_arc( tangent_info.center_or_tangent_point }; - let id = uuid::Uuid::new_v4(); + let id = exec_state.id_generator.next_uuid(); let (center, to, ccw) = match data { TangentialArcData::RadiusAndOffset { radius, offset } => { @@ -1723,18 +1693,18 @@ fn tan_arc_to(sketch: &Sketch, to: &[f64; 2]) -> ModelingCmd { } /// Draw a tangential arc to a specific point. -pub async fn tangential_arc_to(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn tangential_arc_to(exec_state: &mut ExecState, args: Args) -> Result { let (to, sketch, tag): ([f64; 2], Sketch, Option) = super::args::FromArgs::from_args(&args, 0)?; - let new_sketch = inner_tangential_arc_to(to, sketch, tag, args).await?; + let new_sketch = inner_tangential_arc_to(to, sketch, tag, exec_state, args).await?; Ok(KclValue::new_user_val(new_sketch.meta.clone(), new_sketch)) } /// Draw a tangential arc to point some distance away.. -pub async fn tangential_arc_to_relative(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn tangential_arc_to_relative(exec_state: &mut ExecState, args: Args) -> Result { let (delta, sketch, tag): ([f64; 2], Sketch, Option) = super::args::FromArgs::from_args(&args, 0)?; - let new_sketch = inner_tangential_arc_to_relative(delta, sketch, tag, args).await?; + let new_sketch = inner_tangential_arc_to_relative(delta, sketch, tag, exec_state, args).await?; Ok(KclValue::new_user_val(new_sketch.meta.clone(), new_sketch)) } @@ -1762,6 +1732,7 @@ async fn inner_tangential_arc_to( to: [f64; 2], sketch: Sketch, tag: Option, + exec_state: &mut ExecState, args: Args, ) -> Result { let from: Point2d = sketch.current_pen_position()?; @@ -1780,7 +1751,7 @@ async fn inner_tangential_arc_to( }); let delta = [to_x - from.x, to_y - from.y]; - let id = uuid::Uuid::new_v4(); + let id = exec_state.id_generator.next_uuid(); args.batch_modeling_cmd(id, tan_arc_to(&sketch, &delta)).await?; let current_path = Path::TangentialArcTo { @@ -1831,6 +1802,7 @@ async fn inner_tangential_arc_to_relative( delta: [f64; 2], sketch: Sketch, tag: Option, + exec_state: &mut ExecState, args: Args, ) -> Result { let from: Point2d = sketch.current_pen_position()?; @@ -1864,7 +1836,7 @@ async fn inner_tangential_arc_to_relative( })); } - let id = uuid::Uuid::new_v4(); + let id = exec_state.id_generator.next_uuid(); args.batch_modeling_cmd(id, tan_arc_to(&sketch, &delta)).await?; let current_path = Path::TangentialArcTo { @@ -1905,10 +1877,10 @@ pub struct BezierData { } /// Draw a bezier curve. -pub async fn bezier_curve(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn bezier_curve(exec_state: &mut ExecState, args: Args) -> Result { let (data, sketch, tag): (BezierData, Sketch, Option) = args.get_data_and_sketch_and_tag()?; - let new_sketch = inner_bezier_curve(data, sketch, tag, args).await?; + let new_sketch = inner_bezier_curve(data, sketch, tag, exec_state, args).await?; Ok(KclValue::new_user_val(new_sketch.meta.clone(), new_sketch)) } @@ -1937,6 +1909,7 @@ async fn inner_bezier_curve( data: BezierData, sketch: Sketch, tag: Option, + exec_state: &mut ExecState, args: Args, ) -> Result { let from = sketch.current_pen_position()?; @@ -1945,7 +1918,7 @@ async fn inner_bezier_curve( let delta = data.to; let to = [from.x + data.to[0], from.y + data.to[1]]; - let id = uuid::Uuid::new_v4(); + let id = exec_state.id_generator.next_uuid(); args.batch_modeling_cmd( id, @@ -1984,10 +1957,10 @@ async fn inner_bezier_curve( } /// Use a sketch to cut a hole in another sketch. -pub async fn hole(_exec_state: &mut ExecState, args: Args) -> Result { +pub async fn hole(exec_state: &mut ExecState, args: Args) -> Result { let (hole_sketch, sketch): (SketchSet, Sketch) = args.get_sketches()?; - let new_sketch = inner_hole(hole_sketch, sketch, args).await?; + let new_sketch = inner_hole(hole_sketch, sketch, exec_state, args).await?; Ok(KclValue::new_user_val(new_sketch.meta.clone(), new_sketch)) } @@ -2025,11 +1998,16 @@ pub async fn hole(_exec_state: &mut ExecState, args: Args) -> Result Result { +async fn inner_hole( + hole_sketch: SketchSet, + sketch: Sketch, + exec_state: &mut ExecState, + args: Args, +) -> Result { let hole_sketches: Vec = hole_sketch.into(); for hole_sketch in hole_sketches { args.batch_modeling_cmd( - uuid::Uuid::new_v4(), + exec_state.id_generator.next_uuid(), ModelingCmd::from(mcmd::Solid2dAddHole { object_id: sketch.id, hole_id: hole_sketch.id, @@ -2040,7 +2018,7 @@ async fn inner_hole(hole_sketch: SketchSet, sketch: Sketch, args: Args) -> Resul // suggestion (mike) // we also hide the source hole since its essentially "consumed" by this operation args.batch_modeling_cmd( - uuid::Uuid::new_v4(), + exec_state.id_generator.next_uuid(), ModelingCmd::from(mcmd::ObjectVisible { object_id: hole_sketch.id, hidden: true, diff --git a/src/wasm-lib/kcl/src/test_server.rs b/src/wasm-lib/kcl/src/test_server.rs index 5f5a51b96..927eddc4e 100644 --- a/src/wasm-lib/kcl/src/test_server.rs +++ b/src/wasm-lib/kcl/src/test_server.rs @@ -1,7 +1,7 @@ //! Types used to send data to the test server. use crate::{ - executor::{ExecutorContext, ExecutorSettings}, + executor::{ExecutorContext, ExecutorSettings, IdGenerator}, settings::types::UnitLength, }; @@ -29,7 +29,9 @@ async fn do_execute_and_snapshot(ctx: &ExecutorContext, code: &str) -> anyhow::R let parser = crate::parser::Parser::new(tokens); let program = parser.ast()?; - let snapshot = ctx.execute_and_prepare_snapshot(&program).await?; + let snapshot = ctx + .execute_and_prepare_snapshot(&program, IdGenerator::default()) + .await?; // Create a temporary file to write the output to. let output_file = std::env::temp_dir().join(format!("kcl_output_{}.png", uuid::Uuid::new_v4())); diff --git a/src/wasm-lib/src/wasm.rs b/src/wasm-lib/src/wasm.rs index 03c8eda73..b0d807b89 100644 --- a/src/wasm-lib/src/wasm.rs +++ b/src/wasm-lib/src/wasm.rs @@ -16,6 +16,7 @@ use wasm_bindgen::prelude::*; pub async fn execute_wasm( program_str: &str, memory_str: &str, + id_generator_str: &str, units: &str, engine_manager: kcl_lib::engine::conn_wasm::EngineCommandManager, fs_manager: kcl_lib::fs::wasm::FileSystemManager, @@ -26,6 +27,8 @@ pub async fn execute_wasm( let program: kcl_lib::ast::types::Program = serde_json::from_str(program_str).map_err(|e| e.to_string())?; let memory: kcl_lib::executor::ProgramMemory = serde_json::from_str(memory_str).map_err(|e| e.to_string())?; + let id_generator: kcl_lib::executor::IdGenerator = + serde_json::from_str(id_generator_str).map_err(|e| e.to_string())?; let units = kcl_lib::settings::types::UnitLength::from_str(units).map_err(|e| e.to_string())?; let engine: std::sync::Arc> = if is_mock { @@ -58,13 +61,16 @@ pub async fn execute_wasm( context_type, }; - let exec_state = ctx.run(&program, Some(memory)).await.map_err(String::from)?; + let exec_state = ctx + .run(&program, Some(memory), id_generator) + .await + .map_err(String::from)?; // The serde-wasm-bindgen does not work here because of weird HashMap issues so we use the // gloo-serialize crate instead. - // DO NOT USE serde_wasm_bindgen::to_value(&memory).map_err(|e| e.to_string()) + // DO NOT USE serde_wasm_bindgen::to_value(&exec_state).map_err(|e| e.to_string()) // it will break the frontend. - JsValue::from_serde(&exec_state.memory).map_err(|e| e.to_string()) + JsValue::from_serde(&exec_state).map_err(|e| e.to_string()) } // wasm_bindgen wrapper for execute @@ -93,7 +99,7 @@ pub async fn make_default_planes( .await .map_err(|e| format!("{:?}", e))?; let default_planes = engine - .new_default_planes(Default::default()) + .new_default_planes(&mut kcl_lib::executor::IdGenerator::default(), Default::default()) .await .map_err(String::from)?; diff --git a/src/wasm-lib/tests/executor/no_visuals.rs b/src/wasm-lib/tests/executor/no_visuals.rs index 87d66f70c..fa9406129 100644 --- a/src/wasm-lib/tests/executor/no_visuals.rs +++ b/src/wasm-lib/tests/executor/no_visuals.rs @@ -1,4 +1,8 @@ -use kcl_lib::{ast::types::Program, errors::KclError, executor::ExecutorContext}; +use kcl_lib::{ + ast::types::Program, + errors::KclError, + executor::{ExecutorContext, IdGenerator}, +}; macro_rules! gen_test { ($file:ident) => { @@ -22,12 +26,12 @@ macro_rules! gen_test_fail { } async fn run(code: &str) { - let (ctx, program) = setup(code).await; + let (ctx, program, id_generator) = setup(code).await; - ctx.run(&program, None).await.unwrap(); + ctx.run(&program, None, id_generator).await.unwrap(); } -async fn setup(program: &str) -> (ExecutorContext, Program) { +async fn setup(program: &str) -> (ExecutorContext, Program, IdGenerator) { let tokens = kcl_lib::token::lexer(program).unwrap(); let parser = kcl_lib::parser::Parser::new(tokens); let program = parser.ast().unwrap(); @@ -40,12 +44,12 @@ async fn setup(program: &str) -> (ExecutorContext, Program) { settings: Default::default(), context_type: kcl_lib::executor::ContextType::Mock, }; - (ctx, program) + (ctx, program, IdGenerator::default()) } async fn run_fail(code: &str) -> KclError { - let (ctx, program) = setup(code).await; - let Err(e) = ctx.run(&program, None).await else { + let (ctx, program, id_generator) = setup(code).await; + let Err(e) = ctx.run(&program, None, id_generator).await else { panic!("Expected this KCL program to fail, but it (incorrectly) never threw an error."); }; e diff --git a/src/wasm-lib/tests/modify/main.rs b/src/wasm-lib/tests/modify/main.rs index 77880d86f..862e4ebce 100644 --- a/src/wasm-lib/tests/modify/main.rs +++ b/src/wasm-lib/tests/modify/main.rs @@ -1,7 +1,7 @@ use anyhow::Result; use kcl_lib::{ ast::{modify::modify_ast_for_sketch, types::Program}, - executor::{ExecutorContext, KclValue, PlaneType, Sketch, SourceRange}, + executor::{ExecutorContext, IdGenerator, KclValue, PlaneType, Sketch, SourceRange}, }; use kittycad_modeling_cmds::{each_cmd as mcmd, length_unit::LengthUnit, shared::Point3d, ModelingCmd}; use pretty_assertions::assert_eq; @@ -35,7 +35,7 @@ async fn setup(code: &str, name: &str) -> Result<(ExecutorContext, Program, uuid let parser = kcl_lib::parser::Parser::new(tokens); let program = parser.ast()?; let ctx = kcl_lib::executor::ExecutorContext::new(&client, Default::default()).await?; - let exec_state = ctx.run(&program, None).await?; + let exec_state = ctx.run(&program, None, IdGenerator::default()).await?; // We need to get the sketch ID. // Get the sketch ID from memory. From 05b21f100c5bb9cd017c460cd847ad6dcf3f7c29 Mon Sep 17 00:00:00 2001 From: Nick Cameron Date: Thu, 10 Oct 2024 12:59:19 +1300 Subject: [PATCH 06/11] Update README.md (#4130) Signed-off-by: Nick Cameron --- README.md | 25 ++++--- src/wasm-lib/output.txt | 142 ---------------------------------------- 2 files changed, 17 insertions(+), 150 deletions(-) delete mode 100644 src/wasm-lib/output.txt diff --git a/README.md b/README.md index b20c5f0af..e1b722094 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ yarn install followed by: ``` -yarn build:wasm-dev +yarn build:wasm ``` or if you have the gh cli installed @@ -66,15 +66,15 @@ or if you have the gh cli installed ./get-latest-wasm-bundle.sh # this will download the latest main wasm bundle ``` -That will build the WASM binary and put in the `public` dir (though gitignored) +That will build the WASM binary and put in the `public` dir (though gitignored). -finally, to run the web app only, run: +Finally, to run the web app only, run: ``` yarn start ``` -If you're not an KittyCAD employee you won't be able to access the dev environment, you should copy everything from `.env.production` to `.env.development` to make it point to production instead, then when you navigate to `localhost:3000` the easiest way to sign in is to paste `localStorage.setItem('TOKEN_PERSIST_KEY', "your-token-from-https://zoo.dev/account/api-tokens")` replacing the with a real token from https://zoo.dev/account/api-tokens ofcourse, then navigate to localhost:3000 again. Note that navigating to localhost:3000/signin removes your token so you will need to set the token again. +If you're not an KittyCAD employee you won't be able to access the dev environment, you should copy everything from `.env.production` to `.env.development` to make it point to production instead, then when you navigate to `localhost:3000` the easiest way to sign in is to paste `localStorage.setItem('TOKEN_PERSIST_KEY', "your-token-from-https://zoo.dev/account/api-tokens")` replacing the with a real token from https://zoo.dev/account/api-tokens of course, then navigate to localhost:3000 again. Note that navigating to `localhost:3000/signin` removes your token so you will need to set the token again. ### Development environment variables @@ -91,13 +91,13 @@ Third-Party Cookies". ## Desktop -To spin up the desktop app, `yarn install` and `yarn build:wasm-dev` need to have been done before hand then +To spin up the desktop app, `yarn install` and `yarn build:wasm` need to have been done before hand then ``` -yarn electron:start +yarn tron:start ``` -This will start the application and hot-reload on changed. +This will start the application and hot-reload on changes. Devtools can be opened with the usual Cmd/Ctrl-Shift-I. @@ -334,7 +334,16 @@ Which will run our suite of [Vitest unit](https://vitest.dev/) and [React Testin ```bash cd src/wasm-lib -cargo test +KITTYCAD_API_TOKEN=XXX cargo test -- --test-threads=1 +``` + +Where `XXX` is an API token from the production engine (NOT the dev environment). + +We recommend using [nextest](https://nexte.st/) to run the Rust tests (its faster and is used in CI). Once installed, run the tests using + +``` +cd src/wasm-lib +KITTYCAD_API_TOKEN=XXX cargo run nextest ``` ### Mapping CI CD jobs to local commands diff --git a/src/wasm-lib/output.txt b/src/wasm-lib/output.txt deleted file mode 100644 index 44a1780e6..000000000 --- a/src/wasm-lib/output.txt +++ /dev/null @@ -1,142 +0,0 @@ - -running 0 tests - -test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 16 filtered out; finished in 0.00s - - -running 0 tests - -test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 824 filtered out; finished in 0.00s - - -running 0 tests - -test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s - - -running 0 tests - -test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 1 filtered out; finished in 0.00s - - -running 0 tests - -test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s - - -running 0 tests - -test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s - - -running 1 test -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -test visuals::server_rack_heavy has been running for over 60 seconds -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -extrude -test visuals::server_rack_heavy ... FAILED - -failures: - -failures: - visuals::server_rack_heavy - -test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 142 filtered out; finished in 279.58s - From accbc1fc3b0476dcff62ceccb97c4174498fd774 Mon Sep 17 00:00:00 2001 From: Frank Noirot Date: Thu, 10 Oct 2024 11:38:24 -0400 Subject: [PATCH 07/11] Remove a few E2E workflows for test setup that have proven flaky on Windows (#4135) * Remove a few E2E workflows for test setup that have proven flaky on Windows * fix lint --- e2e/playwright/projects.spec.ts | 75 ++++++++++++++++----------------- 1 file changed, 37 insertions(+), 38 deletions(-) diff --git a/e2e/playwright/projects.spec.ts b/e2e/playwright/projects.spec.ts index 8538c506f..6f3402c4b 100644 --- a/e2e/playwright/projects.spec.ts +++ b/e2e/playwright/projects.spec.ts @@ -1,4 +1,4 @@ -import { test, expect, Page } from '@playwright/test' +import { test, expect } from '@playwright/test' import { doExport, executorInputPath, @@ -618,31 +618,30 @@ test( 'Deleting projects, can delete individual project, can still create projects after deleting all', { tag: '@electron' }, async ({ browserName }, testInfo) => { + const projectData = [ + ['router-template-slate', 'cylinder.kcl'], + ['bracket', 'focusrite_scarlett_mounting_braket.kcl'], + ['lego', 'lego.kcl'], + ] + const { electronApp, page } = await setupElectron({ testInfo, + folderSetupFn: async (dir) => { + // Do these serially to ensure the order is correct + for (const [name, file] of projectData) { + await fsp.mkdir(join(dir, name), { recursive: true }) + await fsp.copyFile( + executorInputPath(file), + join(dir, name, `main.kcl`) + ) + // Wait 1s between each project to ensure the order is correct + await new Promise((r) => setTimeout(r, 1_000)) + } + }, }) await page.setViewportSize({ width: 1200, height: 500 }) - page.on('console', console.log) - const createProjectAndRenameItTest = async ({ - name, - page, - }: { - name: string - page: Page - }) => { - await test.step(`Create and rename project ${name}`, async () => { - await createProjectAndRenameIt({ name, page }) - }) - } - - // we need to create the folders so that the order is correct - // creating them ahead of time with fs tools means they all have the same timestamp - await createProjectAndRenameItTest({ name: 'router-template-slate', page }) - await createProjectAndRenameItTest({ name: 'bracket', page }) - await createProjectAndRenameItTest({ name: 'lego', page }) - await test.step('delete the middle project, i.e. the bracket project', async () => { const project = page.getByText('bracket') @@ -744,8 +743,26 @@ test( 'Can sort projects on home page', { tag: '@electron' }, async ({ browserName }, testInfo) => { + const projectData = [ + ['router-template-slate', 'cylinder.kcl'], + ['bracket', 'focusrite_scarlett_mounting_braket.kcl'], + ['lego', 'lego.kcl'], + ] + const { electronApp, page } = await setupElectron({ testInfo, + folderSetupFn: async (dir) => { + // Do these serially to ensure the order is correct + for (const [name, file] of projectData) { + await fsp.mkdir(join(dir, name), { recursive: true }) + await fsp.copyFile( + executorInputPath(file), + join(dir, name, `main.kcl`) + ) + // Wait 1s between each project to ensure the order is correct + await new Promise((r) => setTimeout(r, 1_000)) + } + }, }) await page.setViewportSize({ width: 1200, height: 500 }) @@ -753,24 +770,6 @@ test( page.on('console', console.log) - const createProjectAndRenameItTest = async ({ - name, - page, - }: { - name: string - page: Page - }) => { - await test.step(`Create and rename project ${name}`, async () => { - await createProjectAndRenameIt({ name, page }) - }) - } - - // we need to create the folders so that the order is correct - // creating them ahead of time with fs tools means they all have the same timestamp - await createProjectAndRenameItTest({ name: 'router-template-slate', page }) - await createProjectAndRenameItTest({ name: 'bracket', page }) - await createProjectAndRenameItTest({ name: 'lego', page }) - await test.step('should be shorted by modified initially', async () => { const lastModifiedButton = page.getByRole('button', { name: 'Last Modified', From 7caa0aff7b022f1390476a7018bfeeeac60306ab Mon Sep 17 00:00:00 2001 From: Frank Noirot Date: Thu, 10 Oct 2024 12:16:45 -0400 Subject: [PATCH 08/11] Add a loading toast when auto-updater download begins (#3995) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add a loading toast when update download begins * Temporarily turn on artifact builds to test * fmt * Oops forgot to rename where I used a type * Update src/index.tsx * Update src/index.tsx * A snapshot a day keeps the bugs away! πŸ“·πŸ› (OS: ubuntu-latest) * Add an `update-error` listener * Flatten autoupdater hooks * Revert "Temporarily turn on artifact builds to test" This reverts commit e2e199197702a1a79cab933bb4a3c63ae5152ae5. * Switch branch to build-publish-apps on to this one * Make the loading toast not attempt to display a version number * A snapshot a day keeps the bugs away! πŸ“·πŸ› (OS: ubuntu-latest) * fmt * Update .github/workflows/build-test-publish-apps.yml Co-authored-by: Pierre Jacquier * A snapshot a day keeps the bugs away! πŸ“·πŸ› (OS: windows-latest) --------- Co-authored-by: github-actions[bot] Co-authored-by: Pierre Jacquier --- ...scale-Inch-scale-1-Google-Chrome-win32.png | Bin 50495 -> 50730 bytes ...scale-Inch-scale-2-Google-Chrome-win32.png | Bin 47199 -> 47461 bytes ...hould-look-right-1-Google-Chrome-linux.png | Bin 44483 -> 44736 bytes interface.d.ts | 4 ++++ src/index.tsx | 21 ++++++++++++++++-- src/lib/constants.ts | 3 +++ src/main.ts | 20 +++++++++++++++++ src/preload.ts | 7 ++++++ 8 files changed, 53 insertions(+), 2 deletions(-) diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-1-Google-Chrome-win32.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-1-Google-Chrome-win32.png index 8cca0627274b7e3d1937dc2e54712bbd37ca5149..60d5ffd4917adb53096c1f9bcb72a5d53be29e3e 100644 GIT binary patch delta 12295 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 P`Ms2wylB3Nf#3fDT-ggc diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-2-Google-Chrome-win32.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-2-Google-Chrome-win32.png index f6ea762d5d211ed6e0628ef3678efbd278bd0b5f..49764cce277be0da21736b7a4e34b99e0ed74671 100644 GIT binary patch delta 28594 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 delta 28397 zcmZ5{by!s07w*^~NJ>dJk^<5x3?MBiUDDk-)WMIIQYmQx>Fx#v1f&~j>F(~k2Y>he zanIxPc$nGyoW1v|cfD)P(*E7q-MhuKGSK6UM8?=VuQ2fJ9uUahdElheiZ_fWA(6M? zMO9mywtr+G^!}Ay&Hc;g$;Q|WRZ*IZ8E;k}2n}YM$2%^cw7(A(8l;iuus(1Xc02tl zCwvg+dY9X4<%$pHUQ8B^rP-aib#ql^=Xt%EGdy#J_wfxjZgbkn49R|fq&OMky!9hw zs#E2}I<=L@s8Qa-6Admbi1}}<8S~T1A97?YsNZ2|)eUtHGqU?D7NLPjsKQCox` z!QldF6EDsr+ZzO*k*;43k{tcGgFVm#aZipJo3_(te9spb%w?K)RJBwJF|4y`9C5R>BJ6u^NZW`kzLXVb2ol?bVc0qJpH;2mP2!8U{1o z_eOPBGc4tXNeLiasVuB2S3f`Qpq+D>4%|aa{f`USZ9mjoYA*3kS1HpKG$69tL#RM}9XNSJ=z8;fSj*Y)R zacT=tY7EU~%dX@my-|3IVIiL>PuujkW_)UAA}K}^&Q3`wX5WVpBBVMmyiBxXZvB*| zjQhEt9(zeOsz*@990Wlcds9e*J#97XB@EXc}JSRyS{wypwn2FcE zyGOu9oy@8aC|3GI`XWy!4(z0YY!NLbJ(Wp^sC>)L;qsrdM}(RqB4{ zsabox%UJI2sYNJ;21$K#JJHF{@LAEV@i1ech->55hG(fhqB!NqX@6 z_qjD5{`C#fOziF|`daViYj?RmC{3^tS}35w;R<(1oS+B$ODH$5d4PxekY1$Z_(yhV zHF1%g$IXTq`7tJPW7Gb19t$tfsYzbb;6QCd8tLtNv(BZjG~kQHE7#I+sTB7P3GUV6 z1#Ree&#V=FTJfyv9TxNK2vpQ3v0bFr$|~!cZ_8#3fD0;;UmNi@g~P*CWy_}Nx^WKQ zrH_cgfjRk?E_NS=8di)X&GOG1lTwl?VbF-al!!Kn^ z3kBPX3PWpaX9MMr0#yl|w48hj4F}LKsF(iYJKPH4wal|KlTRAIsX*_gOyz(d$|_vs zIJ{aI$8i;=V!1p$!!dr)@uh~kup{(lr>e;`w}>?g-@N0kZXNszh zS5k3lS7WY&eyKqM$s`WWKrF;#geK9u7aTuIkNHlmpj(8|k0xKG?9wb*67TqIO^>u8 z$(EyAuJ4bIN+wXKF@Y@G%!4!zmFT4j_Jx)fYJo&a-mP`-aDRPmyG_1V@Pn);aa@QW zlPRS9>Tj0*kT)aP9#iEO<#8qS%seS@vNBe(FWDt(KJ#5>%8ir)z90ynb6Ht00 z8#^V?&#;!jWV+V5E0zs&R|l94 zncLqx0s3yquES&!G?BmgXQel@^S)%t37j40Z9l!2%GumPy`yvPHq$uWYnjqr=cObk zr~SV2JHcHB;F+c&`ke=VU954ADYdV*iNnLz1jt9Y-ey|1he9i1vBg{WoxUuXUi|oQ z4-Ji-f(S@(V?8dUQ?xI0Yz%5}?CMUqq3UE^Kd{kzDI>7`eufOY?B^&yxyna6>#5TX z7prL>D=e^P3b(@_62=sSBz)y;9Q-Dmrr!zW#9k-e}O&QTaB-~lK z!n?LzVhShyGkv%@1z}Tj;wY$bUm9-Rp>p3FWpX89o_5aPjDJ4#2(#vHhy^lizz)kL zj5Dth-kR>2c8M1~qiO$98%Qn27+<&wIEbXwUG+8*KRfCbc&W}D({rP{^!h<;Hz_+b zfwdxgU3Spgd1Ot039MQdTAf%teL*$hbvjkb<83zW8`1?$rjy2BHaDmR=7}e=5ge-# z0tp-@*c|Ul3>6>#dE>v?Tjj0IzfkHejh)UhuaKBG>6|b3r^o=rwB_kWhS!xj03cMN z_ivcBs1sKpMQfDA#lRdb;^Ht$1KNqZn&M7;xbQ zTwJpUO|}4kG@tQ#aRzss8M(QAcj-Q@_o_QOcjvL?->B`jNE(pfpo@a;2d}<=H8QnP z5X`=gabb0^GsY)dZ|^BWHPKl2HK<(tivd+Mh{diPl+1-zD4(T;>un8w*6>^3_>n%6 zB~B;^H|^?@2~orgCxuvW#9%(}{U<13Fhu2+Uta}lkh8A3+i<-<=IqfA$2B7HK@RXgP+t zGD6@_d#y2Ow`=cF00x0(fWH)$(g53;&5V-3ON8C*pQIZmm#n?)pTUo7Xm;QkyD#{J zH_Oy)I<-75V#Z95rGr;@9afsIhFk5tBG2RyEqSu^^3S4UVj(>;@&YH$<>Qy!TCtwH zL**-tV4wX&a?S6ROzF|Wr6k%j%?9}q)JVzrY|AG4^{*hliKpvU*&JE!+-&5uTr@S= zACv0ODP32~)=ju8(W?qhx-AbEujoaPI;%WVt8)Buv(VC@veewnxe|~5EIK}@jowm{ zKJ#)Xv*re>Gv7{csTiP4opa#Brlp}vkjs?x>e5f#YB(DoGttd=R3UTf$B=L2-1vBN z@>W{c`vG==Hl*&cK|i4-QnNHrAgHLw_H0Zav-c;;p6C8$`Kg)lsBc0Ke%(cE9XGR( zi_vVgNr>0VTb_Kc-T3d>vj^R1DtM}Su^WfTEkUqDbSiYBqqmHIn&am6I38+~kr7R2 zj{&EAsAV#Ae)u;qB`T*SLip@kMXIlTg0=1}6~e`Pm3JB8efGINNuevU5>c>mP)2{! zln+g>WCvIb*y!#csHEU95jW#wDzY zfJ%B-l`ywzq!VJa-mvT2?c-WvhIR(k?RA!)G_f8^_aPSv6B7N##F%^F~y0?M;RY8#p)uTM|?kcmT5L#FYbdY!OTS@#&qo>Dc8y=@Sz1}*_MeQ}) zG>`X1gtd{c*hMN)N#JAFFzP30A?n8wvB?N?V+R>Ff+C?ExUqG^-j84hD&P(Pr12{L z)+}-HRDJ@DNmc0h@Z+wX+CBR$?NrLNod~tB`NxbpUFe*Y?BiD4RjesU*9yVzNBF3s z2y{Obh+_p>eZ7|1l-=AMoLyP#a8Rpa!^*gjpd!f^UN)H+Vta)@RUmR@`FjFW07Z)x zlJIbD3NoXry(z^$(c_*!O2PDYzTTYwsn)$2Nm+j8K9PTqfH9f(G%{?#x+%jke4*+f zf-ZnTB>s>-b#Iw7Yleka5`v!xxYtdOvN?V`!0;CAo3!S>j^LZ?w&a|r5*L~AuK%U= z)4qPBQ^S99R}fo%^w>m$&ST$a^Y^`=?9z$dKUyN!=2quDZy%w?TAiN9x{5TtGa264 zI6C5w=4WPQ{mB=AzY)H?q~>|~Yp-dRV?VViv{HS`7INu0Djt#a5{KSKzRFMz^p`5H z((MHfUqdZJq~ZEaMz7nv_H^Kh{4kMRm+-`n*^BqP#;PIXS4%Fp3gJ%ne?iEPq(sgz zDRM8TwZRPZmR-T3Hw?oT74I00HQ3dvKlse?_S#ethe;;%jGFl3ucZ}Z&aJ!7+9^C= z0l}jH;6K+Hx8HT4tP+uxc6)=QT0HNgm0-|cgzhOh;_r_S{{DnnPhhZq=Lgwhe{@k5 zQs2O(q#n^dT%}TvG1lOwq7o|_(<&GpeL~VCQ)zzM!S1-sW|duZz)wt*7UyWgB&-s2 z3qWB1CGuWiIgrp_&J-zEBpyHfNlio3YEa??eZ6@8^dp^k`oiL8@eBUA4iJR+u?sF1 z8+x5?LvR1R`&5)p?Ba@akq;&q39BCV>z9@9G8FSvw{{l(}aYhGv7JqTZ5 z#t+dfFd=LMsyyCywDH;53_GQ-s2EvTaAiX7Ou7}*D=|jXMQRb7IC;@U zO6MF}rMTa@Ub>wCooYRDM5(g9@EqfrZ7N%Dz~^dcnm!x*Of7{qaDDYi_}neb^`y=A za_h59hD)8!CWB{-O%>WbsXNH&-}2V}@*IuaTp#YWlQqtNOy!FZQqj?&PSigCF>9Ly zh1dx?w7&2cyWaN5yCS#1($}bLH|i4XGc2Tl!A^<0aIqo#ul@j@rDAx$ovpRLXl|O0 z{E}FIEkdrtXYt+6VWNB^X|nq(`*aHSf2I#HNKPj#i;RtpgGo_tSMTIZ8nM*X$M#hK z`uTCG?`Ad^YPk8?G<)+mz06c5JwSs0St7r4e2{^m;S6-bl2qtDH@j^=P1$!q8q<`i zkaYeR^2L1Y*oXd5TuEslp34%0TzE?N!XJ%5Az2Xd>m#02ILX>Bp0m`wM;O}GcB#7o zi2|-RXZuT$bn><5>vb6aeXC67>iO_jE##p6~x z-Ubq>lbf?rld_{eADyFlqmjUV7&eVO^e18^jJpf_ z%UVU}y5>|X;mTG6{T6b)+6o8x6^q9qYLddr6a_c;vhT_4T6C_tS^otcbIv=6F4F64 zDYiX=d}p$1$9YVr%HY?>XeKqA$;yJBV~#kvoOd!bI4M&NdD1d6@jSLOiXvC##$7QO z#02>G!k4=(ED8!=U!+!7|Dj*gOCUkKS3q9j1bq6IvH=)PHM6i4PGUuZf^OI7T}*Pm z<@n!2+_tB~e0!EjkG(;(gzk751g|c}#ZRV8Jx?6QkoTUO$!i&*yctIrESdn<&0SpmFK9KioS}PH_JU#DYY)Y2Hm&wI%#+}v7 zlGQ!lzmuHG4&|j&PM>?*K`Y5}2}HMBKV6B*>P`KQG5Y@gV+Ug;u>RPt2$ECRNsshF6UI5~%UNZ8oeY}bc#fJrbjGjA@+YQ;f|1-Mdg z->r{HD!MJ4&fObPDVz)plu}5FIlAHz(AhC=GTKI=8k{)~{&a^mP5=nD#WB<9+Iksp z5^@Z&P3$l7%^oFpp?MD|7yzcUR5pC4UzLkT(uc`t?RWAZ&hSzMMYfXpTD0l?WS7GU zr+6wWXa3Adr=Ud3u7vMYdAr&hmZ|WTAr|8OLt-(=`FeVXOhMKOlZL-~*LGC*1cqgo z{p2ppt*vZ{yy@b)eTdd{#_cLvH|H7DF6}Rt`i3DlmvyRQb%%?qqIb)yfVD*kdPVncv`u%`a<<3|f| z3jnW9Td$rFlW)6XFG=bn*~F{TGy z-NO`oVLuN~eN*Fpw7xZ2m6egvaJHO)ORw;h(St?XW2@q^Kk$xtvtB3DK&*P+XG^2j znywYrla+~yBz4oe%E}z(gWmxdIxOvC6@aemLDpZa-xBbIxUg=!7I;n6oH0OcHl5Cg zRL!`D1kHFJKs|d4?I5|MNn_Efv>Gp^Wn$WByx4XO?aMDHz>~>5I@(eQbNn78AtA9H z%Ih2x899`v#y00RlB*KVZ$z&ri>5|Pvs0&jHnECYk-5A#DeO3{-tjPEM0Iv=VGMq_ zzPhJ~LEd0>V?!k)C-Yp$W8zBVKVW9|N}V8OJ7$Hfw)z);dKrpb&sV#~*1a%zW3Y$N z@ffGTp5`=F|G5^wgPG{udo>|AF1-WkoL-Olw+tHYG1c!$2?{8FOv#||cpsb3Hm)`A{e5+h+--Ltkj#6t2x>UmIbn9lfAHlK7IgZTjEWyo z3YlG7qj`}rbd}p}_Vw#G3{S)5@A8Fn5~9P0`}^N>Cj>JvGRkBq zPdjw6I4*ZnQU$}6b#=G%c=WqsSb+W~*Iyk^(#yv$<_YUy4Jt$ggwoN`@vr-ByV>nT zptppE%A-WTP7$&%Z#mZI;KR0NJX3M|s-?uuDMYQ!I;O?U&TjvJKHPcuC++`uQ(m0~ zXRp4E{cp@v4jtl(0d#cOpGW%DciUv!4w~rS0p9d!p|aqCO`WrXe#Zs`h?vz#oVoMw zihll`_}U2?cDg5{I)>tSr94f%jT`E5yTksukMl<6Cnu4oE9z4djpZ=4^PpjI@q5J0 z)wW2o=kY?s82;0ztk7CbM~BEI#(LJ(K>#MXu9}+bYJV!?VEJmli_LY)KJcI{gn$kI zi}+lsHfxpo^==+x7gQ>?-D$7=`gI2gNobEBN68o`Xf0N3TO4nWLuXxj-j{prrpXA& z0#%W{R$Nvwz+>jA7EBcD`?Be}$_57qH%_bwac~TVsgk{xk*Qsdx9m+8+BjfLvptdy zcDqWo4C&j5X&BhUqLX<*C@Nbn7siu+M}VNK@MG(yhyc~C^ttS z5Fmgn$jVOEI_FK>#Qrw&efVUe#&P9zZy`NBJ$SV>7QGrQ@qtKO0VFHmIOze&BKp4Hv+yD%)8Fcv0hdu5J;uS<=pbfWf=N zN6Ach(1Iyau0i93zP~w=HwFgkiMirO+natfFVbyLEzp#J0~mK=pgUjW zo-|<7wH~?WA|=r*ndct_XdFlk4ME)ne(U1l~nKPG)Tv(rwn{X#dDs8~5aK z2(&Hi*;{i}o_C@0j#xA5(c72iu55_%oZo+^ukk?$X3@?tOZvsfM&b?%V(cStURy%E z>g)BLW(o9KxTB;hIm0(q`*;NRgd@|UhNLnYE@#t2ipbrL#SBACad9GhOdQi2%lPP# zxGSimOmpaWqy$7Qg+UPRak4FB5_)W;Kk%P_2zeJ`HIs;kwPt6#Y8DZ(z?%Z6i|szZE-jO3}EY)zg3)b0KE!=vxYYu8s7t~)c+b*?)AKmobl91bZe z=NtlOou^jB{VeQlmO_${hl{GJDgsectkPC#4NZaoY142tswjN62v8OQtG1cf#;6W0 z9i2k_%jY0$j+YwqC-s_Hxl*@6=mE&c8)++%ARr9{jTz3|``NdG zr?~9sjQip+{6$jtu8M}Whp$2 zA(ycWBnAL7)he`^=)@8gVi1X>#lBI*J$9p@((gk}t>?Df_o)&Q7@o1~=X=W$xiDPN z(yp-f*)t&L{FN$yH`W15;-2_#eg?ta&9X?WZZlel7k32))_D{2tDIQ3@|DSZaug=Au_q&GR8guJI!?!aS#j* z4!-`|P&G8jTEMYCb8$nL7N-IAA}(_PlZ}010Ap}W%0N5%(SwnbFpH^3MQ&Xqc*H4+f zWQ^|QvK&RGS%6RoHzi=x^=x^~wRD zP5-SGTZP0xsbX$EL!i>;2V;6aUGj?m4Z^Dw6_5_F(}+5}=0AVFp3Hg(6sY9_K=$#Y zLt;coh?na~LYZwNi2I~j3V2PG^BH}kUi-VH?P%V6JGL;e=BM}p=BX`KTLHv2>a|Yh zIyyQ^N=gf8;zbmd-_(E?oi;mL? zPLe{_&|3J_)bX+9lPBjM+d5F~YN7wZ%Jk(zgf8pcs_n%w0A5AYv(t{Z*F9n-S(5e= z=8e4Zuk(+0(ayZbFjhW%W+8h>+|YQvWJ2#zEG(B3|#Q&%-L@8{+>#}6zm zH~6i7A6(Y$c=4{pG&%8C{xvQe2YnEeQ#k1!`WoDVf>S1C!O;Jhgz}#%{%^AK6lI5^ zVgLzls~In;K7w2S{^c`jYU+jg`Bscpp7o8o!$f}MrhL9FF;Y%dT5p6B@yK5c8L^#@ ztgSbl8W6X<@YEt6scUjFvg1hT;ZIU1P?e?mvaLnGc*}#KKa|xXeqDXxj;XB;f3)giDP;JC2B=}+fqUw95$Q)2$vZGX>Rv^; z_EAUGJe4TeHzvDo7C0@k!Uhw4N=4(>+jK>Y9`NH4Ob71hSoVh!d>s3W|0<@r_KG;< zg5?g(r!^nzv3csaRbfE^2<3!A5TPJ%c$qr$(a{lp$b*Vk$Vb7jYw9plZTYh9n3Msg z6s_I5P;@~!PMh6)y?Z{g9TaoioKoL0_FnWaRK)J^wV@lAYd zG_v{eA{0(#tUfyA{VDQ(z`;f62?=tPs1uc18;QmT#ld?4`rjetwQA|1cKLV(xQFA- z>{{9ang5;ZfW+H9ecRae5c@Nu>eu_k&liviv{ZS&>Kza0o9)|vbV=z6Wz^)9q-}-@ zymHwe{fq57V|ST>d;{z>Au0$52j|i~Vl+-Sp=slS`%X5a$e7j3LEF4BpVeIgB$9&l zkGu|Eg_`}*t{df7@}T5rPG`|1rg;U0PFd^@(S;A8+nNLHPJg=USQL|(P4!yk*Hap* z+y-@k`?>JTq&L4I9|J0~*)Uo^(q5WF)R6IV=axs;jcBLDoxZo=G}~qt>mB2gZ-H%CMbv#3sOp}_!^Y!cOZv?ZQf1a`UDS{%zO9YPsqj_g73=G zP2Jb1sKGs*PZN6RtaE|bGKN+P@MYa^uFcIGdaOEf^c0n_LE#66f`3OI2t>3ddvPV~pIpVBVKh2U8huwLC2E_Mn9-YXzScu~C;SCOq z;)TUqy2N)hw0{^GAEUhunT>r-o7oXMJUmR@utP(IYD=B=szOh7<2Z!WT=7?hBPgyK z;5cGXa(ti&gh09QHKZID8YD-DnXR7Vy{`)u- zLTZ8;fB<69`Fx71kCwKG{`wsZ_MeQW=jFFozWY>$L9f-+AX6dx|8g2AT;725rdoAC z1vcX&V%LhJ<8 zAq&tq(D7zj-#G&?bC@0nCnb7|Hc2sWBXpyQz`>U8+bO%+5BZ+s6C@X^Y`Pc{ZCL$A zn18>nt*yiPJo&a(_D3{ zcG;Q$I0}jV+3I)yQ)~gRT+MfvE*CTxt$6u4Xpn_IIQwO}h`+K@GXoWlDqbWOHnuo- zj1^TN&=oAv{44?zey3HyYV?`{ZnfTaw((-830m%s6Al9*_QxZL1}9jKm7Yq#RHVYy zcCE%yHKD?pvu*^$?m^A;Klf09#QfUvnp*-ft6rl3yR9v?%MfeU2;|ur+c=UZs2Y?g zU4o*%Bn~F>b2Bq{Gd@|^bjjRyvbVSYy5~uVT}gcx=JR*XUX0hEH3*Q}mAvD%Rv=U8 zmsmYIw{5zBDm5lT+;qj^aPB<7?KzI9I8aeZO2dtcDAQ0rQ-gvq%F77cW-v3HkiD7j z>TTXg^BubRdoWRgr}1%3+Hi&F6Vqe88CgUv_r3 zmQBqsDWzMN1M`_h)Mv{jynNP^mEvu|o!|ux5(9-JFK#>^zDGqhAH-W?2>$Nf?~yXp z&={|E-q3}voMV2OvH%4EvN`$N^GV4Ru+sM4yoPO|fHQC^RlNNQh63xu5tBNvG8;%E z6>t$e8h#7TjG(t0u!Wsb&nGLb55zzH8~N9RjK(i~s;Hv8yd0Xesk6SmJR=EQyAQto z35$foVD5KkFJH2;uq25;l>R=A_kB6xzd{_7L1t;Jic15?s)KPj8*q<3z_-pMrv{ zXsSL>5kiQX{8)A5kp-dMKDuaeaS^l(m863iSWo^$t(Jl|b~OSom8jkrG4jbgaNAD9FLVp%nwD zHAR1OE4fX^F!Hm0+-mmftKb2L8f|mV}w=(_hYVK6(? zWu$He`5KQS=~`NPfs}U)PZ?F?q7oN9IT$&<81H=sex@<-F(nWpcJc~Q05*mgpCN;- zTuE|XX_DpikJ&HX+9o&NCn;s02TrAxUqc`@3@`*#DE%t45+$~&*pg{qBH~3W2ZiI0 z1k;4z*Dam#EIrYWSIV)FaA}qKR^#9#zmsJ$_*LG);m&Zlle|ghfSHpG7OcYA89o<4 zC$2w7R5qT7MMj$#5f&`;Mn`8XyG&LbUH%~zDz>zG@B;0wAbByx9oRQhNF1qwuYT4X zA`@GMB>oY;lLf@}Mp0AaL9ak?P|y-0S)X5_HgouE(CW$yK5U&gZrtC?7~#s}>O8c= z6Yp)Zl}h21)bT`oiZbCV2yaAo37^t$cB2IrMR*|S5RyqBVKnrABjg425w`W}-`hT4 zKaZA?;wB^}hGgM@azk&iBguNln6&Okx}sB3Qo^0U0&k1!F;QH=-meAGteq%Mn>Dd& z(i#*Lc@cBX{zLA>*c#M};ROF7v76_ETf2<~#f0{kV(roa`sy)DEXS!iIW31V7y_U7 z65laufX?WF1~|Nw5j8G9({{>3WMqDGq-1{W6Pbod?Wpwg2IvoXDI6xKn z)#D6~m$bAs%PXbT)x1<+ejCl{&zU#4OQ@*_G0@P!J8PeLf%?{8u3P2Q=HTS?ZzgSd z5iViuSA&R)i<2ZuAZBqLzas@_?kmON78YzZsk)+~_x<@M4T{2%p1yf6L}U8&@h`gu zgqua1wrX>VbtB7g)aR%B^F+RyIWtCT2ek58!yioy9m5MIzI@yLZ3(=S*_~UdKWJZ- zPailv8q+%v>?_Srf5BiSK*`L$PS@KzGCYd)`PEuapt+87ek9nMK@J-wY% zGf>R_VQ z1o1u$c^1|-Jp3-@aP6qgCu61eO4|~mN!u@$^?kR+?O|`vjy+Bo9>h><+zf!oU#)-B zs@0c%S@w>96R3FgL01M|{`}SW{AHo~7$+f67SG>TimYJi;96Ds*YyoN&vT?4kk`Lh z32sC`i6JcyTv*?c!+drSWvJpzQ?}6LIe3gu3Q{|e7mD(qK%_ReY%j+Pu&V4vMu?vxyKg3_WUG6k3IduUdfT`1oq7ZU4=ytFZqH&i?j3056i^Dt0nBOMH;8zZNn+4{VJ z3N_S2DOttI(<0-s_5;C|!yvW0FauG4WCZy}EY6JrOZtHHyg}cbz1oKOOs)sGEPc0& zyw}J1b4XQwd++qPvS`il>{k4g#XjjLVdUXao@&yn`qRBM8dL zC164`%wUwH!u%nGsPnJlv5%3IT_8%BL$@73450p7i47YQQ)owq&AOV=3H3qkvj(bj z2j?9P)vM=2zr0%GrZ?|9{@Zec*TwPD(h|0khDMwn40cVclIPy@erYZ&OPG6%4AqnS z&)vRpIj%tB5Rn*$w5SFf8t&nq+og!|wCpo?xsLa-g$F^n0uNCnk;Slbb6jljyq*Le z%%xYbrg`Z!nIsz?6|QKTC*7-Wc=lXE<~B_VYc!)>s1bp4ned+P>~AQkB$2=-89_E5%0GsAH;gGcipOEzz$#ph|(4>7c; zZf$iHwOo^>@8GK_%3s@5R5dQWsf}9s6fMD1i?;N(ZOg`LwwK=M?asSGxc}bWj@2GS z>ZgcW)Ina4&#a9Oh(;-om>hjsm-;Mh)g1yKnQJoBDGgO=uZ+G98q|kw3eYnLC|Zp5Qh!icj`!~QB~;Vjc8IsY2HnH zsGj=N_0)QrzxJH^s)B=n2gXjuvz2m0Z*c!_(L(wXaaR{7;D;}wnC+d-zb4#1l?_81 z;Z0V&2eY;5eOP;?#o=mLOMJvkXs*)_#R2~XEUQYR%mme0%t{R9uWNpkzVY^=U!$Ht zRMnmfF1Ec(*|hRbFCO}k{S_wCNdPxOXC>W)I4~)>cW3oI6QT$p+uOc?GdD|IYL)$% z01U0U_|AN%xp!hN_=l(Xu6OhWme17y>RHz#~rFh|1r<4|iC-B&{nU5J(~C-qP0=7cW7ypvCi$QIGlEI|>x}fx6LTh7>O0MQH%-f(_9=I$ z`C_{F;Je5XdrRC@LuVf{BQ5_~7c94}XM9k66Fz}9n^Mcl$_KTtclk^5RW&u>Y1Z0o zU3;u5*j`r`{fM;9pSGQ}mtEn#U8?8U;57GL{gzUP8kOvw=x`hry-)GEZ19C-W=xJUjm#7F{F41gvf}Jr?z@}>|I=*hs7IjJ zK*^Om5e5^{*J!h0Fz1MRvCp8PE+VnX5G)w_Ih!z85aznFg+DXXs_~2^%v9dEu49zK zZ&8W{8d+=e|HIuOdz2Nsu> z^!bQjt2DO;0GkedL)PlR0qaNn&z^Bp1=Uqm13=j3|DW->Qbj##P}d%=yArwc&Ga_2 zf%RL1SczKpNQvw|ECm!@fLXw{aAYjDH=nFd#`HoNf-5ma4ad*0k0=K z&q3W+v!F6Re-o6j_J&vzZ+3P^ZVF)iM@JngamZy01%gmM`USE0S;~!!SPJIDc1s`J zna{HjH#M<9*jWqA##O5E8L_EkY3po|o>)e2ms{Cxbrw46DLP-BWE~)JN4q8mx^F2d z?DQ6j0a{dN?CNAz#Qo5W3Uu5hBe4+X?S4gxClbU*bR{~VXsQzrmn>sbi|<=U+X`L1 z?;hwhF>YgWicDLN+axHAee#mc8)4NbrFk*_?ZC2q^OcXn=WH6vl6<)y85J6pQe`}* zx9m8yOmA`f94qN&OfIjQM(KJ-jd)Zdp$6%w_y5BOO3iJ)OlpO#ooO%~lJ-4im5Txo;a+O-o^24$U&N;aa zA9Ow3)*`x98|z|JOBP-CVPCZ(Kh}@>Un?xfEMCUf*9#W$0EK`SAfg(%X)XLwsb`~s zyk!L?-)r_CC6pw(6*kCjnj}r@zleG#^4yZc4p#2A$ zR~=%QH8{ZeC9hmn_1%X#JtoG%5z)lvY900bIjTPR&hdv$;Xxx$av4`r6<1PLCpqm$ zGYxh3*WE92OrTti*jZ0~k(LB6qBHWjE>NoR;Vy11Z5<@P26U_8`d?7l2d$m07>{7r zKJ+<)Hcs#x|4?|U$WicIx8&QNR0U&S$cSew&H{s|*Q%cY>U=Fm#X-<%ShP4@xM*H6 z0jR%;v+lA!VF8E5j^l}ig(pCjzM&BbxgP?;5AxG_#O{psO?D0;NhZWB=$QKQW$IqH zJ3t+YDmzV+_Aw8^Z2%|n_s;LT-TtN7U5Lho8h^kE{_gJf1bqX3fuNRcq^UX4Cvr2T z>mdnJv6og==p?+mphE%Pdf=({M?s1%5{Xtt`{qu^h3)?SXl@n*wB4%0%V+YCjZIQ0Op@dp8xd*u2)<}c&%m{h-KW-c!+Rm?bJjUyd;4u8IDWsiCW+q76~oxKDx zNBPO&*vx|4spU-WTSQ*{YWsw`0av0Dog&7LK%bopt}SQz*dS!Z-51B%o+QkUOuJyB zMq=FABNjm5cZ(kh!K#Cw1go9Y{8H9?&wSIlVP$vN9g$e}ifX;6!4%xqhX${NE!8m} zHDzB+H3zhMj0fZ1YW=G)!zq@ivr1$jjrkDq;(cP-PgGpGAVAA$Qz>QS43#G2dB0F0 zKdgl!(YJ)ySCx&FV*T5~ zUPk3tX|4YX|Am)O(rmZP2|zu(UIlWUs#5^i6HLJRpqhtQ`V-hDNR4zJ5ywA$21U

;7-6S&=67+L~j4b(g@`NF4$ODx?5z%SFYndaIzs==K7?E|~ z0J&k&*tVLhtpWj-X+6!i`4{dV9WP>uTs3QNavK)Z#R7tsdlF(}V^_u|@AzEshO3<< z+whEhwSX`#iYI}37${3t=$e&RZhmvs!mez8=lB{Y{+nE!0rSORI-1h$`Jmj_AN*!m z_6m7AGG_B5`7c}58@pD7c4q6pNwDvZ)vH|auEsopecCBIU={FtZce@~0>YyS4>NuhR)!%RJbrSugHOXv0cNZY6UlR;Z@Y;<%m=~GxajZ#Jlls`40PUS+;s6Rpw z*cS0QdvH@eW4m1H-@;D-eoaF2#if%Iw#C$|gwEjMhG55sw}R;?!DG*4Mng!0 zn!d7Ke_t1B&u4mHZ9>ok{UdGMTG&OS^a+z!)WEr#4`pr(=zLoGT|%99P?9xv*NH&c zn9A0?IKko0MuP zJb02W#5Nf&yVBTHEw15F8)>(t5ZG$W-N+}E9rqB)D~RiYs+kGU{{)J5_kjC4y+<8k zpdLK!1oYstYsT|Kv>(8SGijDZw^Mi7XR;*3PVx}j<>(U=-z3w`?K7bZ1!puLP{EDk zG{yOBm_tZ;*4>4?HgW`{d2eRt)^47^x`6PV^h%2xV*(6H(oyb*G^*o|j{VY1zZIu@ z{g*H4sL%L^kBo2h1uo=bFN? zQ~v|X$f5;R?h4MnJrMQzOB2yy)>y2z$#540Z4khp-NN2WePOMQczqtwC6pf(^)x`= zFYyH%TTy;~eto@m#|MA42AkHv8W^mVPfIBNHOrmm;F4q*MY*kf3$F zx|in8H?1!WM2PZ&wfaBy_x~Gt^DMXK1C0z+N<3+GOFdB#UY#yP2w64Y0;0J4#PUEx z%6s*1{dLwSaWY=JZ{_8Opl6a$5v{*WT5R6U@yVV`$vsq*nO?1R8cO@E0eU7Y=PY;mdstue+Z6}q!+Sy|Go1# z`8GYl3iYFm5)uUw8Q@GAPtbZ8{!2tL<+|nAfK}JlrwSyq10~9Mww4w<8gX)Tk-teW z3sgZGw6#d;FN_B&nHkD!k-|&NdG9sa#W~wGcnf=C>I;ISb0;<)ArDiu&-MBev2rI( z==sgrSktu%_!SJ~o~Z{K%Sl@d=oJ!I(*lzZZD2kE>Tw^-xGT@1#8Nwwqobp_TI@}_ zVyqLc>wZ~rdwA8wc=c*dp9za=9Pbca?X1Pl@s{PD4o_xzTiYWd*yj}Z7Da~`)WRz8kP-{jn3;_?0FP0P_Qg{ls#)}`-l3QD1DX7ysR|Z z&6k}Cy?fr8G6%*8Lq+(+e*7*Yqj@9e(h)l7!LrD=)+`G}$%C>TeM z82z;L_DR}`3{EcoD;cL^e6i8Ii_uO948(&R(VPVvKC-yg>bTX>!fxDrsP0kNwrCPA zKD{k}_9ks$;Z0eK4%yYl26k5*9P{nz27URszrQnAL|nc3C^)I?VheyXR@miVvga@;w~#OV1C7WDsr?TV|Af4O!6bh_d+B zuOn?7I$vY0p*ZZ5P@o-vGo)%5j@8bp+&x5!PrfW3evT*~UPVB)zpGv!rXcxMPOYr1 zUt^NB)_5#Kg98gXS(hc%b8@Ft0QV`sg65_L^4k|8o^VYNdu7ja~XG!QmdQCT-R?3nL(t_2-9nAHU=>4Z|M!v3QUdm zEBCP#7|=SqQD`-vj#2#NoiGD96VzJ!;C8{&?_8G_C76V?w5xh44UGX<3H^*|k}zF+ zoA(mr{*@2vo9t%4dj@gotO{Izl->7=ki7BvsP&b04w@%I(xyI(Jdgr^`Uou1J+Ini z(Ec0PdLTQSGd^t!djOw}_&U&1#z%jGjSDrLPfpad@@r0>qn&?q`t&WeA}W1}7hi!j zl~v=;=cf`C79@&(S@9j5b z8NHJmRJSkm3Q!x6p~%zC>j-uwjG!Gfn3>8xX-%ZM2x;FHe89f0$6CEds*8hU_|UCP z^YkUt!?do$`z~jVsuwZ?$iF52Br$aNdr3!$FpmUD2XifXYV{filg=*Ry?Xi|iiw`* zMBohQDH096tOauwNh8Q`xg0D@n1bwCDS2?w!J+_;rU$_odGk^ZSxzbO@(0anold;u zsev38G#5|v&cMP;ToUWH=^t$C;D-JX`(n7PV8gQ*C}O1uvvJEdTEctN@1o=ngK-9@ z2j&Kg>yskdJvY^?k|g7 zGL~xb2tJYG>lo~YgEAAY&$#FLg6~3EEk&zEb8gjj4nD&o^)?9`XD!(6(UbK>HbcV6 z78Rab1_`ng^S(`V_`)gPM3Vyr`CB4!$azLvpii z-`duWc}(!)I4xlskDGbOCN+zFC~WAD4F0_|46ZO+1+m$g;AOOxex0%^9vm`yr-J?@ zog{}tu}tec9#^zJA>?Wx-o*cPBKy8ek^|C|6{0ZuC9NW-h01VP;^(%JEOElbZ=}mq z3aPXb!x1f`{uT!5UfxJp%wZ*)P~4t%%UEZDzr_NVfUIR#XiejA$>c&NiS8W+AcKPO z2Wltny><>|_xoS6#aK($xP4wYq!uBd`f3(xwi*vcRDx^!N3utcuIh&ytO>3mr_-*Q zM{b{k)TJyJ@}bkX!IhQQV=KF-yZO+aG}E*~2DVeP+KIIU48F$)wo0*ZIc&afR1>2qD( zE-S<1n*Tb-AkQTdlVDLxDarWZ5fk-uoj?legI~l%1n&A8K z^!V<#qf!1pzt#0UL}(JoNg!tAVuh6Wa#c08HOk&kdi@Y|d@XA5=tefhZe(l-;#OOE_3 zmJXe;PBQMn@7#bMY0wccVn^zC1RR#lNQd^s5XmrON9xS*Xg&Fwv&5kkuz<*9VadI^ zp`r3TN)^w;+^eiK8J)DH-WMC^XKcqYfAi537h^m0L=0Ni{ZM)}5RgMEeQ~=Y2Aqm2 zIeyMW7$p{d{wasN8NB2nf*XOhM8>Te7ZHfXN9PDdz+kxbI>`7*mcekXw6R3RZ_AmZ zs5>5K22{kRj(SI44GiSi$75w}9MRsm_?MX$4Ca$!+1C1|(IvqId(e_=ePe`Oh-~jR z1>4hc#+~fh71LNOu!Pm_63YY`=ij`T^%AMO;E&P zLMP47i(xyvBo}WTj$R*%t#F-kGvsWw>8G65^$;xQCiaggKOYkGBYW#4xx2PImKILr z0V>uJi$pMg0tM&S!pt@CQQq>u`<8C&M~^sj=XTv$yIbFgX{Ws7=pC>PRS3)E>%SVs zkm+_Lr|spqP0l*_l#4aDtH+U?RsFbH-(by4Yn;t~kTw?gwQWD1;Kii9I3y+2lm8Y} z-hZamNFiDLSrIIz;0tp}D3eTjm4CFQrC&7s!4JXu_8^KXWFw~jv+e;}cOe;jBAkPB z9v2yIxvTjM!Qf)o*(*H|RjeZ(H(qYMz9{*F!$?~4--L&!{I^~;G5mM`IdA{lb0k6= zE+uuGNBcvchtAoYp1!0K?v{Cg3p#H}WdEJ&3;fIP9z59Su2_@>gMpbsZbmAo34;kHedqspYx`eQ5-}mM5fb!(O&8Tpr-@GP zys~_9)(jys6|5wjf7j&USB7A-Vx24v&l-cOal2Aol&dguyStOQEmS6-EBj@=t&`g~ zXE(1!JMlReJ{jSxznRW-whGWAz3I~B?vN6b7_xDt1=qaf%)fby|3)nFS827-@Ngs& zc@7kc&ToQvC};mWnp=NTb=FIw#9KAr;G^^;r&mjagmY(C?=C@dDhBbTC!wgxd*vFa z+tn+#4tD1 z{^k6=P}<^jJrUY>%)%=`)ld0{!PCH|26}XW(^nPSl`LvMQ!%PruflaDUWIB zd($5>G)&p6!N!psnEVBS0L|IS@xL}c@vOwBzsX6CZzgzJ^*XI~Bm6xUZt`Vd1tV7b zW3~JAweDlN%cqiqPXEVtmjxg!25?%g2z|s@hZ2!u?7=CBZn5vsXd@=I960IL~Ji0 zW1^!CDxDcKU1uvXy+;Smo$#gFd2LOR8z}m@Sk9C!h;7icJX)0eZ!pVLGehJjv+7~U z`7d>TN-e4>MEd^50x?y+NiXp>sw3mH>Ax{32!x?=yY>C7KY#vYsb{PKzZ>uv`+nTo za?I(!Xj}!BHqiTdr+_9nc1>l!&bsh1?ckN@xT%Ns80fc^-zSh!vpu@o%s?_A(Oz2Cw(G09 z97@}k`XU^~;&yg^G!}2w>xPk=ND{^6;h(eluEs2G(FsqI*iSjmC0|c`qTjh7$1LEl z%Z?}{&l!AB-TE@N5EC6a%ydQ*@`TzKuGSa&yxYUo2idQHq1F^PqZlHDG4BaF4~fPv zAOp;UcxsFNE_L~TtaDUp=kbb~k?dG@{|zZ;A@bH;arI6czGJUiQD9!96m*=$Xmv0v z{t5?Wszu<2+ZHj@*S9Uz1-$|J;K<2|lwA%E30YZQ?z7qj)j)s_$QoRs1eHcG9kR2t z4-O785UpXkC|S>$Tv) zm8?A;UuV;=ECFzWl$06ZP+xIzvQ$~k6me_KdN(1aMkP(-%Yc_b8gl-3s%$DKA z_M0URwR9fx@s|^kT%N7m*1*LlKh|_KN4z`R%1JbX3lG9eSd_u<8QhgA>|OcR)Wa)S z9hRYXd{%RO&zaD2i?nXzQx>*UVSh&ClUtEywyI4FLMwF|X{;QCb&u4rCUx1|1+=z} z-`hv5IL#j2N96b^F{qMe7@kd;K?pN#wO3^6)rktV6UL{C=_HXn+qSxSsQrF{=d7Uv ztLFqJm+fURquDMC9<&c|IvScT9+YDRR2ly2{=)WQ>QOM zy)Syg!v1~=_=6(Nu0!BHjXkKO}V1(e_s9$oPc-4pvs&a6sVfzGBCV-zZz29mu zPhS}HXn~n+Nvy80q*Zs+52ElYZseaoz@`lR9qg&Kz)aD*?XsI3h;%Byrw4z^lcM;! zIqhkvq`3jgPMpzQVBA+TKFZ!n6QcDEw2Px#F)%;1lMJk>EE(S-196^Kd&$=^{`GBC z##oslPB0X46YX$b3e}1rl8LZqe3GzRrWey37E9y)V-Jr#$UDGZG=XP3_xyedKjmTJ zqLc8lE90~idVcS4ftIkHU*k~)n5JoT?&SKsqx~dL$YWf&Y`i7y?O0#O^5XyMONrY% z4M*BK@p(n@IMwuMFJ_L8??(+Uhg)qM?wsH8@rEw*d@4GD`*$C~J@Xz&_3|k7^2Ox} zCr;v_Kl+$ZG>Q^IKH(;)s;mUGi?r;btgPP_JT1-5IFgn8;x@LnC^n3=Vhn1Qb~e2q z1&N6g`Gee8y%Q5`(ia~5%>4(G2FR`xzfGK-7YzEY4-L4I& zySVVS7XdZ6$4lH2U9D6XEF1w{IPFEUDQel%pwn7F8DAzg9S;{b754QzLf2%jEeahS z9rV|n*-R-M4x8|4dWn8qfS=#sFAa<^=->cZq$H+7AQ=qNt&h)nkf*SpfTNI9^ z6f0tq?WM`#_F@MG#SV1{v#Rfg0?V$y`%Fp(zbn?B)%c62$kflA>%CdlXgmCH zPJC4@h7m)80%5&Y#|X6x$_{YaPk656a+`P3_$q?NQ1C{`$;ofsy}w8{RxG))0vtQQ z=>y;xz8^seJMyKhTwIj_XE&c}YBoFQLB__^O1*$Fkrrd%3Frs6ZqJXZFi!gn@kwpG zT5}Ddb0TSGz@U!hEN@mhad1ncH^vv5DRBW?)jhZO!gY`F$M9(%`hoC5kzU6w&EMQiChlBdffi-WFEqF)&uQ4WqL3w)cc@vLT3UQ zu=43eI^-xuOeBebdO$=>@xDk_4Fa)bF(hs}J7jJ)OP3c`hZA{#$_K>Pyw zSlw$Tzz&jYSXX---E9ZCxVSvaaRHnY06sanaHo|y9c)a2`U(J;M1B6;#q(xou^Y4) zNW*;r#l#wrNG?K%al1OeBQP^F%f|z9KHzQuN{ap?xUR0QNJ6`b9twr3sHnIgN)Y=C zf;&r(@Zwr*A1g9#2h^1fU|dtf@9*j=0G4X#z4thIMqdiip?v|-^X52z%N4HZ=n!wY z4QF0Ty@$6aM{Y=Nys~?4+V<_7-aWoVvEN~NUrY;++Si`-N$eqC2c4>~)kt02LK$X< z+^S}p9y}W zkkB#)HN|U}D9f~DZ#72Es9yQ5#D?{+AQiLJ3T3QAqf1GHz^(l^NUV# z5!(DcG;1TYXfqTkusdf#kLxhV;@;l-qpDOWv4-SQn}_3GEZG2^NsYy9d89;T81r84?!u+!EW#1+YBq@>J0+!Y>Xjm}Fri#W zQF|8VJS-cma$fqpS=;AqKZM6n^eOSm0v{5J%rv?wN82F-$Wi?-Btv+aixCf4MBH^3 z{Vnk@z^Sgj;TR1FO=^5`w(Ao$X2pWEw9PY{Lnzm<8G*2nu`Sj{MDbErb8aMVMoseX zAN>nu9zx2SAfiFh*L0>^WDwp@W79_nX`23uS=kQMdnm*nf6Tx?M9u$SMjEX_rt$0< zQ(Axd^w%q2H8Y5wN|{NCfBK5p@YdW(OKW`Lpv{Vv z*l%70X~THTvyFUy}-{T*gBq{e{1w6yeoY;Tx7I2n*%w4-+^{r}x7qoGZ4zRYfm zt?i5B6br3~Cq6oQzK)263GL#PU>wy=t*y*aZEq1TboMq|DG`7=vmXKc5g@M)TR5z( zS4iU$6RS;0F-Z*jC+0~s{eD@*sGbhNCEMEC8mcU;0D}&6a~y#`2Qq?x;V?roLz@N9 z-JR856>(A9k&+a-aIic*$$h30$7eh6U571Z#jWmGzit!A@WsXI@FT-{{Hr(p^A#rm zljYZ)3F+2|AI?UC3wGFH|JI~bw{ha&9&{k(Z)_1;yEkGzm~RMC=9!h-3`=6@)V)2` zcN;HtSs4Jy&yoWeG^3om|Tyo~p zIgiqHaM%Qa)!88uss)_Po(Skwms>E^m7c3}RiL1Eni4Sw1+ zp3rVv6!Y%G<3Skiz-H4P0K0zu^rC!izf=JN6Kx_|}+>ascjV*|{^b?E%~ zQca+iBrxJ1XBZD|jp^mtT|Z|X-R)j0^XHS4msId(WPW4tdn|6vpy1H$xsdM7YH@A} z5IUlXYCe0m*Kmh@r_xGQM@P`O0lJaWt*x%!yRO3&^-om&xe=9+aMmStuV$m+j@tK| zgSpR%_V{WH*1_h0{s;&n_kg!u5#uZPWDk%?D5~`V;#)(HjHTsLRD})?H^0-;`B>3R zjS3QaleDne659g)6+uzq9VFYQhF)&R!oqCdvTvt76t9Z~#@gWGpQtOS}m$Nc3s1FYhFTh-&n-*MROllCn0%Z;S zP%fN8zuaydumg)<{>EMU4!q$uBPERD;^*CRlwe+VbaafDhXVLfVg& zvgV9{E(w7_1$c#LAkB1ia>AqrAj2$$G*W&$y~zeTXD~a!t}f=hs0vUm?$4FU;~Yn` zX(5B-FdwJP-Q{F-zj?;_+3v>%<>h(VXHD1I3q@OVnAy%eP{KJ0RnUw*Unzh2y^8$z zYecBQZ-P$gDu}lrvV?%{_x=U3KS@FU-`>mF^zPMB{k^wc{r#m5GcBs5!$642*31EO zkCm_;$a1T$uQfF__4M>Wfxq5JUP)=Z)LQG=GeYW@K!pM`V>you3_RA9E$LXo$CpIL9F`Sj_hxH#w-#9FwLsoonqOTD0z>Ow+!{P^+W z!`HO5wBzAmT|u}{2OS+9UEn_}Nq9rS{4&bMyq-P-S_Ja^r0Teo@Z(*E)Ib}E%3z@`Dv68IVQCu zH&6d>wff1SsjUsfS^)mi3P~nb5GD+1wkubO<@x=h@PaW4_G({vKw}|@-vJzJ1?Umu z5qF5#s)2Tyc8m*BZ6`IIV^(P`1$QHA%xz%3Q*54HXPNPVB5%^4!G|SlJOv4jsnh3z&HiPi! z8+s0YN757AZpP*x>lztZhE@WPjyxrQDe;fbnm=lP1$vUfiHe5*`6k$l^etD_&K&^z z1cs&$$ZunE=52C!+P1XAAw_}4(R-rBrAkBR#4jK+1xAgRARyJv9hiD0&mRG> zvYSASd!nLZ2xj?(jFIW*MfMr*rYdcgP$iT=r{KLTnspE&^ zvi0}zt%XIK8D$C)f{AE-w!uVBFptEc<6-3W>d${O9<{yXLjP(&4A=`G&9O|3OwMFR zNU%Frh>U>dmeBj-2$Z0pAOQhExAH9*RV?5r9EmFT?tpU#JgFMbU8}H}o3;zfrve?n zegTn-iHYfAoX5q*k@!EBmv;w-4A4}FeN)QT);19Jgsj&s(lyf%tpBAYQl}rSJ3E7> zD1Y|F_n{MKJd@?(8O{@&4B~Csa0(QCdU`q?GjmQ}UMI@+ z*uLXDI#i7fBcSmVw=tfxt9{8LbvaO|L22f0} z>>^X(yz2ddGy0qfzHKIbp95a2w6s)eXw?AjJ2Iks&L5(XEFPd*>C2)d5Hv9NQm+L- zA=HrJ4ojTvMel7=ZooK-`uqBT&z%83n7aJ$rhBTN5H;U0YHt}@Uf$Vpjy6RT@mui7 z=_mc`;+sj}D;jfu@$LOw7mR{4;MCG~Hk^OxyXaim*|}jqeFOH&1*|IzNJO|RA)F^R z1D$WtLGT>=?x9}70=wRi#K9FjJiJpwy;oJ^xw*MOza{OEfdV*u9Hua1$JEUs6dRK(+|FYe#e;hw2-?7 z`5@*{s3N*K$^uYDl7DP4fSdzF^Qd(q7%UGK)80QkJlx$qwSAZz4?r5Q1HAZuQ5-D! vZq8ME9PEE9q^kX|O6vb(!S#PV>`Yw0bo1|>o7w=U1cN=6QI^h=H1hr*aVxZS diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-circle-should-look-right-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-circle-should-look-right-1-Google-Chrome-linux.png index f94bd2630cac80de1efb7860446674d0213805dd..ad78a77e515f0fc18d7f561f3599ed77b0050248 100644 GIT binary patch literal 44736 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 MX(g#bgyD<-0qi>PGXMYp literal 44483 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

LKLm3`ijV{&RZhOgUY0Tu;Y}X;G zmD2ODgbuB^o}XE)o&U=#-z+nR=%FqyE?|4wQ)Gc;p3G$jc2If(YIZoVWGKcVXzz>? zu2cWi_XMHaw(XlHm=8Z3Ix_)DsR+}_bEoo6Yk_@^D;2@v?WpIC2xb*dR$44bD8eZW z!;dVCNIJ8tsV&~c`{uKRB8*GOm&EWHbygY^GL(?sz=5RY&XJkl7$RGiIr;-xN^IC+ zWqVUj`Jo=Zs@KBey0y)4vI_aV+y2E0fvQxpMWq43J+nL-G;}9e@O-`-Nl~jiXE$`K zs|BU0S;A7UPMKdrDlk4k^2=gF3sOUs(h_9c^5zcse37ZY>j)s@g`&^L#<`b?)9N$D z-@d&1@s-J@xm@Yk!%)1jIk7a)|EIay=xE91Ve7{BkWr=W-zkEFE-yS*iJ#i!PN>fRBu%(XVcC}$dzcb2EMcoNEkc2;{1;nKrrE5=q-({&Fbm1_IUB&THg9#bo_U= ztmcT7wF~x)4+Al7hgUBLPfu=Xj^o}W>2(`!zBARdwvH@RYzRt3kHm!Z`o2}zu6|=W zMUcu5u5e;%_WP=%)YXt7{*4v`o#k(Xn7}os>^EAuOY&RQn1mXSGhRn#A8@9^QzfXS zkSl7m9C<$b(-;wxkezAXIdE60+HLw}4CJd9y^EN6zcaThBq(KCBXPbw^PKEg*D;F6 zt2dMVm-@Wv^AEP9P^F859?F0>2o+PRp>4iwm|nA>+0>PoB29Ob^s|0)EGy&5P>VEeKbFh|jq zHCKAvI(BxP0Sj^l$tcpq!rYwj=g*F+`5ND{Y53c%SCDMqoP>yI?V6-MUs1pbf5C-k z4|oJH-0QDH(yGQqp|q?!RXM&CdwXEE5{ujeN?KAgJ^RG+ssfO5!lR>KDUS0nBS2_W z)lW*bU?2gX(Ba9b3P?;gBb4c+3*u}NkfG@QKX=buiG5ygY(*)`D;7;9p3YgcNbp2< z{`Ng&r)hp|x4vAoIe$FJs#GBRD1TD^b7NwwZJvl z^%iSOvXvBrAfGLWwE^aruHTOV^j9dVE;g|`M>3XUAcQUfSw)Lip zos+0!+48&cR;+v11@gNCC;FQAgr_6{1m-7uMu*b_7nhI196z#}IX}(+%_*3o9nK2- z^&eO7nJqNqCkP;P-C6_DA2cpu8T zS^gS(vSaoLY)viub+){FcgsybH_F5|+szL)P3j)nmsUqGRIXV!Aa|zn{@>cEr5YD#m^mP$5;q9ay0$(cHUGpT=HLm_!?^c&<5 zn%Uu01}jW4->as@G!7btcd<5br?dRLvEm^TQ_5HD4PYxa zz&~#-p7i)yz-~Ugu+*Y_fv5fBeO_ITgZ)<<0XhOR?4*O~h3WXtxSb*k3KFTRY$`E!Dcl{|!WeVZys3d~7uWzoH+B!a;Bzh;egp-5It)iR#>q6k1>NuN6~|S7sL%(BJjT}fDMI&Z{9c@{Sm|t zW&<_^0IymAvO^T!)k{c)k!*JU?NGdE} zGlfdH<<-%*FYAMCo2&0mUpaxI)4W`?JpW5ge?cn@u?De|>9xO_q0oVXdeLZPHj>sy zG-mttq&G9P_5tLo>Pq$1_1ahYdH?S(>Jl+Drp64vMNMkS$>x zr{`Ap8Y1Kh1#&J3gF85_Q&sVKKSKg_YTsW_;#^8}t(6wKMhU_1i?vy`>$dHzEQZB@ zDwJI=q)}Vlwd&Hv#NDvcF&J54$4QNvT#gISvN<&A(rr4ricVfE#jWTT)0CnXiwct} zEji%YiG>l9b(k+9Z;1=xcelE#ULxejB>T%T*)=`4cXRxT^ZVE%6NRTwi|bW(-jbPz zz`vX_dSC4lC#xzb*beqRNfJqjtZ;s?Tj~@H$@pJ%{bgKK-}?p%j|o^HAWDM_C5@z{ zLxYq^r*sb?-7=Ik2uL?5DcvC5-7O`OBi+oihVSqHdCrS-<_+wbz4uys?R(v|uKQXm zCKL!c@_I>GG;G_xnQ@#3@yxJi6s zb#qTC8IGLB5rNlTdtj1v>SQsM#j(+dbs6gGo^;BcwkU$ zO7~tWDjzwgHq?sD{f%?qe=$btQR~yhLwl7Oc3qT*uY{S@{yVc~KMA}H_k^T>Metwb zRILo-c}yore0uUHt%)m30;8FR^MByFCcKti3Ch42Q%JpMP%g4$8^@oDE2XbqO4k} z&pVUa*in&WRK};er)P4->8QblQnf}KQC#I_W-?Yjm8`AIcEJx` z$vjOTW}v&hf582=D8uF`BkiOITkQ3#&#G^S?%sR&L0H{zk^L+F%nZRyj_m9wsYGUV zWA<6z^^;CBkuG-L*YWYMk%X!?+w0tmAXH-c>N-j zBstKiEZeH=fgTT6-Iaf>ChA|)^)0tilL1a{_pNr5)VYa$AD>F$8PkNErWU|8VKwu0 zbWtKnQ;`zkY=-hI1CjkN5_%QP&RR}cmXK7n;kd`Qr=JFkZz0d$at)r=xp^k^kAi4H z&r-_u$w$vXgxl=NHY?vva)4FI=YQ);|1BxeDdhB1Ztw2KLVv)QZjF|Fe+0>r*{!d< z1MzPA4i-cqhJiF~KW9nr2s8h;WZ`{VIc-+XaBMmCa^H9HlE2zOljaRd=%L)J%IRHq zxPv*juAu$EbMrr8Wqc_M74uDk!yQ|9l00^48EEA_4wo>_$qT+Gog;M{(yOZvyJ@fI zE{_v`_;Ju&b}~7Iq_Uc!8U>o_FC>gR+3&j_ox@egRq<4pt5EBq(?SH17u6EXtct%DpQ~b=VGp7DxXt0M6{m{zv476* zp}e5gW!t_fwBG*WPtIgYXlI5oMvQUs_Owwn6aAw5+A$MD75r>KDi`XIpYd|??75cv zWH_AE=JK#?V29@?Di?Lt@O4FMVr0KZQ~p@%d~UJSu|qIiXup#aSwDWV6@^Em>oMGd zXB@-3Gcnr4|Ifa@{}t!ui5Q+VX>SoKIC6l6$9}?UGS%Tk#HWe>#1plGa@Zk!4$7{A ztFEnj2U^X}`Pxo#JGq;jH?I?O`P?D{c1`RTtVm! z|4#OLYU3J)6KBKqNF-Ij`@bX*$ZAzR5&I@Hvj_ahB3$sWw@K)_vs=j|X>adgUl`rh zwZrM}I*b#Ov#ea_!I=^di}gq!-k`eb)uHA)>Q87S4*d<}8%vKSy$EZ2T>G_Ti&fne^~PgcM;!J zfqd2kF9gyBcTuL)n!M~N3D!o!)$Cg`RyXws*-?pAB%UY9VO5JE0iW-~->=zu87wV> z3e(b_{n;Hiuc6CWoaJr$(MHb}sg>?wO@Szi5CGrtMMh;N2D5 zbhEhrH`mMY_C3jB7%dIgM-~f$KjBkK<}=x4VY-4_r&x}iu>-A6h1&B3+Z%Ou!`->{ zlO!+PsiY+H@`%oYzZ6zl{9)qv*dN2KYsk(&2>Vkt<0b+NY&Uu~$-?uaM|tk)ZiC5+ zo9vF8AI@ao#Z;0lUY-7M%?eFd)M4u%?y65@KkS|_t_gISRmgqfAs0l#DBG0ysyHpD zp$NKCwIWTMk@y%TQk5;ui{nduZF|We+FBEY+NXW`=kCX)7@nGoje`odmOn#hpIFa1 z{yW6WebQ*YYl|nZ&6>SOP7H7CF~|ZK+~e!(J%>pxJAITdbM8^cjFP7f(gJ&7Z+h${ z$-sce{E6Usif0YDpjg{;a_-SOjh5}|jaYbgA14m#v7kJQ)a_Xad|lbeQ&Dk?sa z*3@i_C z9*yREMg!?61x{JabaRcxkrd_tYJA1R-bAhf&Ep?~S6AIlITOIHcNw_E;2f*6)#MqV zbjmVuV1WXI0@}7S)5@uJ1@@)< zL!It?oo4D|&Qq1=JGk4A6$3ZPc$|CJ82A$RUXYx^*ArN#ZCXpuAisKc=jRriyFMf zsy2(rtSw!SYe^0}JN0bYSU;Tcc4{Y=!J5poLe=B#Hzftjv?*o9o@en5pwf>{=V&hj?JYar*d6w@!6oFcQ7@X>9wUu%u z(7MR+*jSEu{io(4T;N;vv`w?&8_7gVUVG_rRUKDQJ1{!m4#TW#AE|a(;UnG2%kel_ zRcfl5y6CUcA%JOdIyLXD&}f}qDsibFr@H9qVh5#i-r+IqEu?j896j8e#W;?c*%{vr zAKPL-`8G@{IA(h}ch8DXQ>l8V47q#W;rH-Lm(SoJg$izIjv8Cupe5tp$UdrDT(B$m zZi2&SSLsI!R5ba?WSoAZ&0udnWu}L5|C!p_S3=ohK?6q$80K)z$NAXBtIc`T<)28| ztz6H|GMVd6U6>ndE=9wIZX zTZ0=v=N#t=u?sY2YjYXimMwkmhDDS@udGLFzvVojbR_lQCvk4@kXKX8$UCo^h^<+n z-DDa}d2>~=qxr^QI85@i#41sVFImSVahI97WV$Y6_$WYVKlNKpXUJ}e1lb$ZXBp2= zlklD%hUf+>j-vSn^LcrdqK(j3x_n;Ojjic?ZzBVc-VfQgT$MS;zx)#=NlNtDqA@#dX(9C-}d&roLo>) zfY#(5?Ee1sN>(h=;$QP!+6KFUOBrL*Vib{bjFjB^1T(;qD^ufQ@dXRM*Soxk_VPH& zHi6f!g+<3YPZW4s{FS?KC^DPbP1(KW^}#4|E35R2{{i!u7gMR)g3$5P`im)ZVK!w4 z4O{_fhF~pN;H*5alKhdO)CgK1yM{lz6S|0%$!%Z<5b=T+GF5_RKd;c1Jx{fA``Xm6 z-#Es);ZF$PuA4R+2a(g=g~dxn^1$kiNg=-a${J*KtM%EmS5lSPMe|~jR^snJt@olA zC<5?Q$34hBnBOtmY4dpvW8w80Qf?CjuS~t@#d4I8SpDlnaM7ARCih(BEAqZhL%s2W z>N?9N=E*{p?GEt{eHfiw^S#uI%Y2YDocS(S)p~yPkYJmSMC;j9quzO2z93uGYmS3P z6Rure_rs#0)F#T-%n1N{T4GJWVb-kNu3Nk+!dd?1a|f{B>_-81JZ9}T)zbiJF*-NL z{{cgt-QdrjNz%o%iOSVpSGtz^cAGj|&Gy)6ue^YWa?BOHet!YmI?RdoRag0me@^ur zY&5C|Yh~t_2mAya*90#Tn-9l*%XmWfxa!28sHzb)IL~*Vn*dh6Go#4sG82o68lH(j3nNBipJW#}GhXslspVakf zT=U7hKYgjZX8T#o>&UuNq~vdT-Nwxed8--0PtE@fIE|hssUI8-vP^h2Y%B`oGAEr! zUo0lD)f{@kFKnc;gsx83H;GlauMJirlA#laM=Xy8|NhkUJSI<_s;N2{z(~Ml2@-5< z<27U*T(rdY98%vbRR)9$)&L~XL?aw~MGS-pdg6F3jq*#eAL0bMK5wcY z4Dg)19uydNUR4Nyb|(yp5=8qf^%Y<2Mn1OSUi6axSr#D{A_>kA(s=`g59c(vaM8n*>@J+x#7{Hjg8k^ykn*5p_i&0`#esy^5|0)HRE4WOuvp$2_n$+k4fNDytRYx6p@+wZEQi{o7~w(F0kj`{7z zpc->qMIBFru}I)TWvdKMO1gXzq+~p|KRybQZ;HI#NBPJU)Q}R&bw8%?JaW+MBB;@V z7`1MnuQO8s=UX~k_C0TYUv+hMQAF}{v=y}S#$*?Z0kxkNJJMR$^|9eXbA5+*=;}bI zuu_u=7Wgg0bY__Llvb|r`g~pfdVob|rm_w=mA`F}HqFo{c9JUjJIlT1i;LB}x?53d zK4nd~i5{9xCLffUU|Q~T+l?zMl{@@RdFN-^vrJK!8-%YV{)$C89)Ds=`cPR|XFpKA z$GOr$ekEdgj7J;O)ZnEns=S;qlizk>;@iz{?C)$Da+<4dHE~+f9&!FInd=I~GHyrN z>&M|A^2cNd>NKoj;5(L))OPJ_6FL*L%53oid?fU2nU!07Z zn&~;|-w|?JcE+|+8`-KlK$nJh?xMy?jWMVfuCBc>mDv^qUxZ)icrBrrwJ!gjrABk^ z$w}0u;4A=tCx$nP+Odu?i`poLlG<}zCWuDr+Gy({FXu{cgK$l5-N&Zdb3Op2E03J3 zEZ5&xN^KO4YRewHE~F*XtnkPei$d}o_1T#yN(L2gn0gtnA2-Uk<|pd#p*{z9hNiOW ztz#)GQ5zgZ&n7O`Ixb`^rr3Ly^fwmP9UPQ?limt$d(cyJR%MX@#f z#C~h&DP?ly_s!?rs6@}R3L*C&`Lz7YvA&M^Mjc;msf)(s^Ab7Tiq;S9$=p`c$8cMs z|EMsh2)XQCcBk^Xg?X+{dRcq^{o%C{7aVN)Iw!<_>UHVd*LiE9mF)w-*!o@$)2p%Q ztV2vjkki1Jj=-%d^D2a1;^COrTUDR%soYr~w z#%pdcL!B+tN}+A*7GX_mt4f@*+q;h!D$hf&bGfd+NiCI7A|jybq#Tf{g8KcCvO%}1 z8nZTpf)mdR53AONMfa;DN&f4t+;BPMr<%Eg=Sin!jJwZ4@}L993=kZEI&*bF3jk{e zz!Yk!k^7+#j^KXb?B29?p|drNrZX3t&dN^?-yRN}pPnh@s0fTWd!c-vyYC*n&NG=m z$w$R$7_Xqt)>!L^i=MxcIWLSu4yts;tk3Pa3a|ZjD|F+7GWC2sw^u3pF}$B+wbbq8uTbAeTNK5_iuS*BH(m74 z8)HOu`8HjwMRbOzR{cIwy_VwQ`E}HY1mL6%q?g;Le;F*DgBMdu@*!H<@3uFT!$V3j zAeob6W2+|@q2-6pk9Iyjgly=S!>TQ(OMxW?x?xn7JJeG#{;~*1P7pbYvFO4u;Q|E^ z)?ZUFKOC2it)oqsgwB;cXMRu?WGumP8$8L_n4u#+q{F{n;{%Pvw%Zc9aRA6hiD!e7 zQXfHH&-MCppUN`QfY(hTV4u-kUKuVUiAC`K&PXo z3?zJb6xOsTR^EYV;ACy z?gwOaV`Jz=;oTfP8@s7ELV$OV!n^GkBnDvE!akd+6weYGo3wRBD)f*T5SNPYeRKDM zpQpHMbXQ{yOFFA=O@M4pka&wR#ytomqV54N!~F<&a1V*;;=y2(5YYq2>7B4qA&2rD4I} z|GvlKlU*0RcfC!Be{{0So$_>LY6V|#x%ogvO$67S_iz1!5~x8r^X!W#g4+ffI@AbS zW?uV~BCBMHC$+(yOaeRgR~L@a0NE75EqTvApix~6HNPYE(1-0+F)qwWYQyEZmX4Md z(Gx(>1uC_+25%l%67*qitSaE6ws!L1Iu+C1j+g&06P-ggDvL4I0{|%cw{aj8@`nwT zfY-$f;C_q)qPzY#wUFF=IM57Q;;hd##YnF&gAmj(7{!xI;rjK{*5Rq*$%wB@X5{(xX|^xG9FOhSKRFGb4>o?RXcqBd2V-YZw2_KH1rEOL|VzFZ$R0zBqx z5-3{oD6YgMG0^}`fc!nmik3ScaB8&w{p;4%Z&~j7!*&)=#in{dR9!dkiEKDA7W{y| zM)*xAtKs2ZCpoG|wUOOwraXY$^K?u}ejHoJdCBi;R?B^_JwD_Hi5BscYLHT^$@3~k zRR?e^x`LbNIL$jmL9H;fV9Ec71z2os@bU%xKA4n%Ym^M|?=GUQPvS#>45Fow>Ji~M z>6=e~X8=riuY#sP+@|U2j?>Io{a%sD4(DSzsMiD671ze7X>;N*ys>KIBj&C_RIpE(2yxY?s0r@x9ec$_3O2as%rYTNIWGkrV;pd2wGc`W6VGAx z9x(Ews6hGf7GZd&2v^{6esS^1 z#T8k2Zb?a`k+Jt9wgj9_%|XC6hCLP4SYLm+;D$^V^f z!4!}`*DU^d^u zevu7c0x-ib7;!LvHry>0Sqy7g+50=4h6DZpwDC96=dAvbU~R`+(ahXjACtVVeGW!p z1Vw;ecACLL>U(XYnAlWY_{n@RZoT+l4bin%Nu7rhnyBBih+0=ON-c}Ff2U{(h0Qgn!%Pqg= zn}N-_etf9KhJ*Qt=ZT)^2Q+#%A`?t!4M6Q^;wxh8aej?>{P?j>G4~eRZ3E()QXRYD zh}ZW6G(U(7Ees7s#0+^~etZV|prVpMipJsEjM)Tto?cxq-S^|-KqFonYh_tmA|g0@(*?#cvBOit2Pe^gS6UPPXpxvwI;Z66T=UqV>!1;4>h zAu2u`aKgovC#bH=$n<_&zz&>Y{~WI@Ij!hhBSzINY0S-f!?zA43KpJ)>*$Hb0wlT~ z>$kNsg8$7bC<1WNC%5af@!f@Vk)K-txTuSSM8I?jNj4TGB2davtduTFB+~MWVf-31 zE^LO4@n-HvMqXHco- zTaTa}5sDDu^auoCpa;;vqLGn|DBQSNrrz_asHoN@I(jB1W~Pc6QsaPlyn3DDl*jM& z-g0f+5yT+pW>@=Uqw1O*5lZLX_5wT`9VT11`l_AZ4qk>w03$5M09M(a6w_iH+^wRn zv;r$jBr*vbn%tFNQsQBizQS|+)OakzNpN5z z1y6zv>R--sP;S{jBHi0{=AS*-w3h{1w{wN9(HkQI%Y&EF$edynEr0jk>aL3`DL)N0 z&!d4dk%e1a_4sIT5IlP3%GEXYb~Owb=C2sRw^_q(TCx;yJG_cGHEWzk-O;*-e{Q1A786p7AsVBdO5YZO7J4*$!+0g=?qvkutiHn8WrZ_ z*j}ft9Da9!t^WbTg|#KGC5--%!K`)3WA@u>K_7j8ab`qD#C-!IW2m4V4#gQAmn>P7LGdY6dDi)(=|jTvW#x~)A1D` zog2@1si_r1EoBN*#Frffd$*vSP}wOZGX0-)5d6{)e{h)9OGV`$UU*)Ore2o=vNEIx z(oN`mIDCYN3_Xg@1Rb^X({sa!%>{3H+))Bqb&0d^C`J%;UMu>1Wi!O%(s;0 z42Z(-s1%XY0X`%LH}{Fq$lToJgeDxY6KlI}WSap#cyEq~EQ3TGbB!$87op;uR)Gcb zqvca272*Mw5pn!v*uG-7(jus}DJ`w7$MKzDmER@sU;;jjcek$|L+&weAZ!3I3~a_iYGY$FjRWx}Nq;5n+irvhL)6y!1wN!?G!8I-0Ne>WLn&-RZNTOSu0AKHXJ(#Y`Q+r3 z%fbqQjI_R5R$;Q9{Ori|ojlTy=3#%4pHX@btipn_j-bNgURBZ~2;>LjE08vw^NLZN z2dq{_)yrQv#DLO)7{&rG1(=76E51h157gTtgO}LUA#Wd5DR9m{hPsY z53MB)V+Ga5)(_%IG4&Ew0qd~EgcfiGC$*jC6F4obfuBv;wrsEqga-I)Kn7nKq@xjG zW;w`KsYslA3?MioVA0{9QwDEK_k1J{1dhtevPydB_B)QAVX14}_oEk3x(0roqNb+X z>A$7&!<%La#bEe3<%PFIxX}J_$@j)a9bN4X;OXK0q@x2@KS&nT`TCOb0S;P^q?y4? zjXNO}&wt*#_W%!k15A|Khx>j(=vg@grG%ClKq9E;_P7zzsBjfMzIg zVG!ZBFZfjz@SK3^F3t^TN76_MbBJ6nOLY)&%x8obBS5BnZI+Z z<9;l$SUM%B7Qja|+uwWkG14%YMjf%r&XD)+z_sBfEJ-BAWQ|pTioU%$jYBF5(XQ`^ zAD`j%-ADsJ;(wt)Stg_uf$nPBhfZhZQd1Z%7ts2K2pzIVcW)bG+y-uo3Z*EZ(4GDW ztezD?;?Y$0WdY9S+S`uc+YsEJz)fPiFiGZy>m18JfOyN{Md83IYLuVi!7!)uFoSVg zUgDRD$j~z*?8}}&I-a>@+Rg~;r|A54v z-G{6)im6#ng!d7L@O98jcV##xKL3z#<}TRd3-Nxc{XtmQ#1B%WXuc3L}rFl#eDgg|`vHy;8&dHBMp>x;wOL~AToEfx#d8Shw zx0eC#iUy-ZsG>`$JJ9bMh?&nzbUg<|JO{aPdzBD<{rfbm^z3|=y1Z#+EBAM#rp(|!V-i6h2LUP_cd0?Uh5qbUhH&>3MpQ+ zzJ|J1AI?P2H;wGB@q~((MKSGTKWy1V)J8R;?nacKpSzZcK-gPWt!T4I&if)n(jmXT z(MS=o-y9R${7;Q@t$ktXlnVcKsoF$Gn5L4;um zG*GEkW8Qq^_=0{(pYG3J)1#SKCI1ZUt1PF|^2}owpL})J!VJ#HTUrRrF;fW^6SA(* z@ZEFP3bG(jS5&?tRlj!Y{&)h*12%Iy-gO91`2k77z$nL2?PM^nJ1NU4; zMkX;au{THV8LR;H+ZP0spfYS{s$@mYKx8lORUXbus0=KyI%$raBs%+Bo@FG57@ciC z6v3e!1Ks(%dhJn~H)BYNpedgxNH^1XH(st)C-3ulbDG`Rkn?*T<}UjYsov4Wu|7oF%X;uhqL!XzN%0VM&WTAGP3xF!AW z#xM)8YT(17Uhlkee#A^|`}h39j|M@fyZo18I8BV4Eupav^6T%|_;^YAqkaF1jAgCY19kGT zR-KMVJ8p~p<7Oee**EGXRH+vLGRX zvwwg1KstfOLL(AK3}%Pf9b0y!lJ;+V%2scGl?bTFk&ap~l+3iyR+iL(GG`7poxY1a zr0cosd8WBWJ-q8XJ(4|$32+npVuw8;eC%}81q0zKxj?D&-hkCsFn;C%Vb1sS+O!0m z`r%|Ge zBn$9$J}nB``s?$Tse>mV2Qj@Z?0v{;|75A8n9tsjl-nya?Yk(j3h`vuN zn@EE&z5abiKxhuIyu6YUP{~9}t5E*PBZ{O}R?aMiA`CA{nV>RJ&>H-HBPTf=nCQ5Q zy8YCund10MO>@N1OX;?k`FXXP!CMSrx4THU#RKa<>cgBFNyoCZBs(~m+V3p`mG=#m zC#beqiI!$1};}ycg4*Cevb%&Ro*B#SL zr`uA&q{D5JJDZ37J7mg8R=+k45OFy5aCzcEGM{7K1$EuP)@*#VgMBx9X+l6qO?lV* zaEOCas{Z@!E=?cdG!UMkl|5?%>|5O;sIz(BZs8Vt>Mlrm7Z1~iaYZV?y@h=O7^si$ zDDFZ+ZZ>2z_}alp1NlXVwl=IZ8w@=Pz*5}&L?K~TaKd>T?S!yO-^9AW!oSls!iRXL zmnfL&GqOE^ybu6+Mo5Tq$n$%U5ZoKj1%eOUbYKvn$4TH9GJD{A@JQ>9eR|ZdP2$@1 zJyIwWbzUg0K~$sE_l5+tj9mWwG>R~|Lwx1#?#q!!=&M%1J1-{0}mlDIByz} z0(pjQ-dm6t)Zoy2PQ<|!Dw6xT16gH=TxvUNXqNELCnSQ$TPF5Z-1V*(|BvS50sb=> z#GCN`q)Ak=fr>D@%CYq9T$3j$wdP*0r#YLSh1XH&9-ZPv$IU_t%{JV3i>5f6@Ui;?{wToj!=1)qCgc+pvb>7kJk zcKt*UA{VrME(ePkV5Q>buHZL1h5s8&v|k3mAHr+_H+f6(&Nl;s*UtHF{+0}ph1T8r zgDt$A)Oqx8IcG?B7RZp(MPk^wLsE;R!R7c>Te$~*Ef$W_Hmh`vb>;Y%GWca9w_{=r6V zrw~LE;sD>8zsN9H4r=ezCfJ(6T|mVuP~GSI_~gG!yEV2`Y$GjMb{6&nx|%ts2k&DH zjX76m*0^nvGlpRm5vD$~i)<#20&fvGF1Q>YZRJrRxC_tc_Cy`U1BkNdhf^jx#}@AF zZVsBa=&#bC$00-jj5$bzgJFl<>rp5qUGTMVS8Z~FF?m4agKYZ>{M%#>8^` zFanEGL>w&&zi@)f_-873Epp4A4Sv^YEJ3zZ*XZW!H2&Cp4d>}4Ag*yKuqYenq_!nS zKTk)BFohmSohbwwCTecX!$*F|PzRUoNXeU?l;O#rvrusdo$SV0?LMuQRYK#oLFizp z`NNDD+k9^T+cRIZu2z$%keZ5xJP)bDGAoT&b@QSPaKW7Yb+=SG%1Yd>rM#FluR|mO z_bCjM^HsP1K93Yp&9wv&_Fq$AzZ)RI6c^=c3Z=E>rt5)BRj8UCy;Q;(M_}1!zl=NE zAh-zMaHCsZC6vWdCowXX`1p03?#4e3=Aaaxy2W!A+X{k>%$*DfVab4Fvd{3i#7eez)TA%4$tSpTH&O z{DH3W{xrnE6@?R3a@?W$L~POVvl-&0ACdO5TcZ~osGT#fcSx7eDk*mY2)$zKjyb=f z!yqePM5KCf{dP(Eg)F^tf5e#jb>+GV9ye5rQ>|LvnV!CKc179d0+C1)F zXebVw0-giJd-ZWq`J{ zUFJNK*ysQ^UxcWZ@^jHTuKcA2s!AvjZoLBiE;`7!m*pqQ(<;je`?h6w2sMUR!(|9e zx`bUKKr?z#W1Fh+n!ap!2SX!Vb?@*JxT@E1G@ouVIkX;`tqO8@3SkSvYtP@oI(l-b zIFL?9n5b|t1aIJf{@~qyaZi23)ltxll)Je499OC`o^&7p8r*PNEn}5k=H@6!FXOMX zht@|gqAxwY!2S-v&szYlI>$EcxbsYeiEq04P2Mz1QjuPMU4F%)->V) zOCSDG8gE-q3!`>~8U%7{s?v!cmlXA}GDQnz`f$bbz`u;RI?1$Z$<1+CF+Hxj6>$fe zepoJO%}{8ol0?%ZAZ??{SS}IlkY8dg8)`%a3D&NRm8{fHbW3PgriSvCpJbb^tEkH@ zJD_7s@Oe+!8#PkKG*u>BD*rR4&+%)reo34pL6u>N$4GUnnc zw({`a>ui2Unm)F76rzIZH`W2#yt2otgYV)C><2|SA&F?Ot1G?SJRW9 zoPS~WY+6KnW@-OtPtfOTjwpM|=;y?8{9MDVlFguxfS(Jkx}0JUt{;?SJleQg<1l+@rD^}3;;aLE9K!AUq>9Ip^O(vEK!>cg#FYYEvUQp}mLgaOcAz3IIghYt)rCK0 z*1E0`6$$pi3P5M{iUiQ6=8OU?nfGc#x*~v;YILW!NuZggP0@ODl0T8rv%7;GFq5Ka zpdHVbOtkZ;LSVG)ibZAe>j=23ERW)-_;n7NC>501H>|~K9_lusu8<(J1~$QRtUgAs z5>SwXlzez6m_zis5aAi{%E-N7ifbDh{4Xp$w6Lm7cE+Tusj647f-Uka_Iblfsh6(c z;@EKMpPTQ%?jC>`lHB>X4>7#HBrD4h?Ek8Jy&q>#GG(*#12_v2*oQ5CAmPo21L@*U zFk}$i9m&|wZgA7xUO2YlDr**$HkCiA3}|)Jef3JH0_ZHx?$|V2C~gh7E!gt%5P)BF zJ&wk)O5dU##Z_#NF*=bM2t_E=!nWJCcO~6Jn~zMWQp{@PkFzz;g1yLMapIj5ORTwQ zm{7^CRY}TD(T`qf3zft2qOoOx)`}3(m*}klBL#2zMtj(feI&bi3zA98$MD5O=czy` zW%)(?*Rr?BZ0y6q`+hi`Zr1;F&V|3QnQ54w*bh??2b<_n@-e*M<%!>HWLF1)vCJ z+}&K>Tx+<{c|fj~Y)5O)&;2g%jnTh7DdpV0Gt<~_U;p`3xy|a*7d4J87s=J&p;J(h zGv5kuEt4gl+$U9!H`NDw!08x1w7>kPuKPJZB+$Y7$*$H~(fL=amY~cHka&Q2Up9YN z1aA2(LQHH;#;sC-1bc^*FIIFpT|i(KrS+k4jO(LfPx4I`S?C4l14t(Hxh#DiPeZOl zHm-oaBO{g4O9@vEa)vw}5$1#hjT;rW8q-3|nMbIz(JU!bxF~O(@?4lkJ$Qaph7m+4Jln`jP>ArgDIN{8d z){L9A>-OfY_Fw%zZV6;{Z+2)ORMa4v0058zA|?9vg8zq6Z)Bc&G6^_-CS!HrugMNTyNqaJCTtreVR7yV<=sJ;!UtsNud0n zI|hM}WXE9;vS?shW|tYvGZ{-ns+a5%Xm;EF=NH;(x|$@1w!iV;(@>|;*u+J#JleH7 zWQw+mu8FNNE9gwkr^6<|*W9xm9wdG^uoWz58g+tbK1}AQm(ZHzKFyFp)!R?AD+et8eZ((HoJ@KJI zR#jWnPJh9sF6sh0Z6dAHcb3JkreI0U>7q+ECRSHDBW;e$@n5hA`a*C~&FdoMqwpNL zU`)`8vipwL%XeN0+HSxnK;V ze79q z$-_lo(x(n={`9ymUGwlrxoEHB61wc5^3o;@Z+pL6CK=nrwth-%>{YGNC!kq%Y2N!s zN11d^E%d0X@*^G$Z3FOe_J#FWn-&L^GSfhp-+b^JGA{E#UR2#E>^Lnu0IT$p>ERSe z?01|FFWy;P|7X zy}e-n-=p65ITMC5VgD~{-ca_@9f0V+A3)0UH4chKk3>O1uBy!7R^Q~rM2CI)&=gI| z_d`piOzk^iy0&X;Cdm#RzmEaEe5sgD)3q*r($;~hj^nghDvA3gV(<0)-GiK!bshdf z^M8A0V$8wN1{a&(e8q+i>M~)$q|-cxa5ScXj?tA`l$_@QMUz{{;i5bV{f|ybbTlM?1d4c^s6YWY(uSgV2Kfe1mT!-nXICbMyu5uDylaxi&@j zmP+qVE_mh9`Uys7chsV_^RIyO=UClXx9~|gQ(8h@-P}gWBw16Wp;Dv%YGyguXl>Hk zTQ{SZ3dALKaDC5krPmD7MQ_eeH#;Z2+U30xDcQDU^T;Jy5^A?D@0rk2b3OJi;I4@%Wq`a&&a$ zF^l^WPUyvd0*~J?d0Tq*ysr#b9Tyub-{RkrvOND8K;S%{vSY;!sy|t9%TIA;uTV0| z0O;Y0dOJOox4s?^nb+E{YjFI?_D;TLn@HS0AYB+5@JGK`fEAi6^HW1JojlHw~m*RVhliHiHEyvm(Y5m>V!i6eDd(< zDHT($P@v;D7erN>glCvN>^pTw-;a=n?+C8}Mx7rIO`HT$oD*fhTR0^^sk zIV0Vy{|oj!&7-zx`pI3~lQUm(PhHGC-`QPBnbZ?&3&L75o zb8~C!4myDeY=kl3P@7Kc@QpGGq|7{%F0CDVfzI~5VCqhq3562A!X~n$Kf2)UK%RIR z=AWm}pgR&Jnnnepk^!Gk|E5Tv*!ViH_jPXUS9AkaY3m=y{tD}|?ga)SJ z)9Hpuyo%W zE^zyw;i<%1a^)}R(ee!0SGj>>pp$qQpXV~fu=5l2ZDZp}C5_dS*79(NGXn6+Z$ivp zYMCCN4mv)9l?$-U2$T<_`Xd6QSw+krm&hSOYqnUm)>4Va;ZmsySg>7Px?%+;V=H_^2EM_XA=;Ea@2=k$m@i}bY+x0Jd$`?49v&MJp%ekvSo(Nlx= z8;a;tF_B&}xSN4Y|2>Cx#{{NqdPB78o_O=tQE36)dpzVqf!P<27A(*WvamgJkU-np?Y}>JRwDB0Y34z$ zCfc1iyz{lF+_$2GFxw5LAAf2-3E{d6l222Ji(u^rezImRYE+9FP0iya2^-XHylf8e z6oN0z0bX9g(;=jg*O^^FYveJWRB6Aqhtz7JNUs^tzh$BIu`Rw7Z8g}|7IqkI9!Cf~>A%Sl}~5oHOTdt=qW&;DV~QN2YjMXd%! zNPv{TFi|AVpZvxo0Q5zt5_xK<8?v?B5m{JfQz140J`Hy1Hda>*iGl`!9E?egL?zF1 zI`oxgkT$SbcS_%CgI%mFBPWYds#Zz*`^ z?t*qO!}%d{B7oy?rhCZ*O>e8!)K*UYKt*bPD5-INSv-4fU!DJFF!kgw)dszVW^gzI zaDNAnB@npM=aptbU?So_X~54MoXKE}7CLkZ9ZBo$Uf`m#%kcDurL~9MbrRSqs!cPw zNR8>DENf+JTmJU9sFtGofSze0zNH^6uEHZ-ShrRgsH-!bP{i%yafjQ^upkl+zNDvW zNzq^OS$5`8{>ZSZ*b6F~g>YbtQy28HC9P$DX-XS5wYI-@K~T7L|R z89rH31e)8ML;uOg^R?CG7>RYfiL-h#WKZWi?cZ#8C*hH?#>q|`OcK?~xUx#&7+o&r z)dB=_I|-iY&>&}1`JOAfJi8Vw+OGXy^ViF^YmpLUSHG{uR5=`C-I8KV?l}pPk!$xz z!<_Mf0?T@e_3;h0mM&X+>;}l#LZ!adJQs6Ck~j1Z8wpcKrsZ)}R}Ghw?AGg73rdt^ znbF|3WRbglpkTXix|i}d68p=m!SdSN_S&l4N}s993% zb?xLO$;2vET5aOqv6(_(d6iE$<|jANCovVx z9H{-XmXIopQn_I9C-Cy{R3sxG@4|e>j}rWI=anPwXUg%M7RHC)I?3E#u30Kn*2oy^ z6#Xdq9oFebBv%-HeUrZv&j;ul%reLHu759v7^$5JLIeV|Y*4k@*Kl8~`5pB}~ zd|;_E8_PKCc@MrPwibMA;HWz|7wEYv6%@8}`Zsln7S1&qxmA}-FMarG9>?GW=D|bQ zJ)yZ-Bq;eYVI|q4idwbFdoi}k6(s^=qeRO?nG$@xJ=Nxv#;h?0ED=U5nU^TlNe(A4 zLB#DNqS2?JXfriLm6@xm#T36BP`Ojc zy(hp(mt~fjUD&9iK&z&ex6sB#}6yhtvg)b`>J)H({GwIbvdzVrku4Kx!?O2;`y(e8%Ng7qJ(D1is>b}o1 zmL$RFP1jPa(4uah_qDZ{s70M-_!;bKnAsFNC`92r7K4GEOlfP5n-@Knq2^zl_o?BYxwKhcbWVrvAxEQr+_7$glWKIB7&XF!ooN=n1r=H6+6`k8CF(S2GKr@b0t{xDd`A z@rnBHKGM}$Rd@K8p195h=z#qE+4@&j5>C~z6l89jF{`T_n_HJE_r^F${Y(7b`Fh== zMC}B$G&k4ic_PNVg?Bk{V4e{=8=j-K{hTXzs7t!WN!mVH@2ke#55m|0d~4Uw1LB5f za&j`E;4b2vC!*?{$C@!7_-UE{evYsRV&Hcf~G?2?MErQ&i$)z-o0va9!1xC_ME zBQ%F3W_fsS*#_D(n9(H!a1!yKs)U3DU}W_56H5rdH_k=EY(UgF&dgyCmvVgfC!e6= zQIZZcph22CMZrUOV)^46@6fD#YZ~Se1}5&-I)9tonK5*_9M5N!uz9qWW827^r0n%n z^olbpuLuKcTq8Wuw`+u$e4iL-}t+C}TEsapTB?P+q&$n76LntK;((fv;N)E)`cOV4N( zo8O`q&sH(GK0wmN$?~;rdU_ganJh=kW|nQ<_%RqJvKu+tP9E&L;8tq+-Hos#4VD#K zAvZoI-TP7ZpUzm1wtA1#suIS4`YhI=M%cY@aDcMj5AOg(@Uu|clH|Ns>O7cuW-6+Q zI&Xq2zV*X1yTq?Y*!7ydS`FmnxhhM{=5<27`OcSIc_MS9NgnBRGIe6dag7H19udL= zp!yv_-YhQi^ZNE}P8q^m>|UL7I+f0S!$rH%?()CM6B2jI?JP+)zNik7J_``wd$Z6K zAfu{$Twk_gC`x{c3^{jMwh$8!0}Vvf^Yhu~(sk|ZID6vd0^4RhJUl?(a@~Pi@X2*{ z`FLrIiu~4LZ+>$}IhNV;X*h&2Ju!_pvDrU&4-~YHg5rEzOG~YJV^woUhpe=;;pZb= zlrIhLK2>BYJUCX(?-R?SZvx?w&E%z3Xn8v-#lF5bRch;x(Jv#X6UV+#_cP6}6D!rT zCD@m)4k*71zrAn(NO2$rc-ng|-y`DYBB>IZ7`W`vX#O%640=pi7W3*uOaxL9yNj$F z4>Roj=g+Zxj%f94RFEEsj05*2HOS$E8bkA^9DRrM)oUNbfv;0sTwHLWySp3PuLOm& zCE)I{Y7{dA^6@QMo+`gtKl5y!LdM~rV7dJQLr2~UzPL`exfn<1p&L4aLA3buR&w&O zbfz!MeD;i+34|^PZJ&u+9PrH)@T|vtZDP@*C@4+rYH?e2i3|0nv=zUqFvEapKOO(N zx~-j^oz2bReDGjPZDS04An_sTV*$;f4H4(Ao_`ys1by|(F#>$%gSn1lukQ*8xk1Me zSg;&4TDt({uf+H^KEjM@OGG8h{%C(&;Oz}LuAqEVK9{ik`IY4tqr*9w`zZV;NOHE~ zCXe3f!8dLvg98ywA)`tz4zW+lQq0vq(2Tt$`z%er+1&0d4nq5VeGdX$oNe@lCarkJ z?!!LKgl^UF4gAMor%TMNjnh@7@$PYxR%+pG(fUh3W6c#xLCxpSt^PD$4V4N7Jx;(B z!U5waGZQ1R zUFq=WK=mCO%2Z-J*-8_FVljv`KxSEyCUB(Ub#SUlp6bZ)3J~-b`?G;}VPw%1^5E4F zXJjf&eZB)jI9Bz6%SDo{KfI4^ zKA%*#8*dtgHJ%k!-H3I5 z*VW&ZW;>JT_vjE|TTkef%D4ChSvULiUEIDOjftPRIKAKVkW!V0v~dkraXz{B4!sHO zQu_1BZz$;183Pqb-*%JUXhYXri4G+V4U0j42KcNK@*bq6ZPX6QpO@99V0&d3@iw)4<_31WW|8@}plsy)kM|8i8 z<}mJnM;UQOEKsu0uq6mK;VQR!o=H!`M$|L9ARwWkwJV+Lye>l9r~%p-h5Fbqg*~ZN zzT*u&e(|{j+Ae@Hbb-rM009jO){l=d)vT(y?k32aH+cXa0YeE|7#t6G*8$CCjCOQ# zOoM9!A@$q0Z{Tr*Dtr5$_Ruw)Px-}TOJixxG+ro*^8$H3EO7_#-Bc5uquPz}6`|JnDDxcQ49lkm8Tn z4aa6=yr=cIJ~_U6`dF>3>BZ)F#iG$y0vJAs>$BbDb!jy%ij<}w@Pitwj(HERsAXu( zV2^6&lqoOH8(toNvnivYF$`>sy1Ke>^N8r^!}+whh3);ava+KCj9e^#1hQ_%28Qe! z_Pkvgw7LMknvc(V`7j9(B~yN^Q2HpFMsVqpAt_9oN*4_DGr%vq9ZpjQ)5|O@t;q6I zu->~jU(hMYLFy0Q5H!RZ5}Et%ZpinCq0dpjNZtx~Tba!mfUKKZYY>aIEIV}ZEo~W7 z>9v^_d-_W{^_GlUQHjIz9j?gy-Vo3B;GV*ync4oZL?MpLs^%hXMGvn$%aU=cPI>9+ z)J$N(YiNx#m42)J#kixYdiD_C!`Ho9V)0B-=${r07=j~5(f2&2K9k2^;r=rU1YWfp zsdFa!5hk<+K(`IcNl=fU$Fr^=Onxb&UcUluqMNx5j=||Bf@I_#U*Do=B zXh_<8Xu3%`^He}L!bJj4WiJWXfHYRQa?co ztoLKmgxq^f$ez%=lK zp@@ixbRogTizX*aWtsYV1^epyzbn?lwwY z^nKAby^t;}3*(aoAu^69RwL&~Zif*M>7n_W&@Fz&bsXl_iJ9j|Lm^zeOL@7@45zjJX#LcYW{V zO2?oJ4NtvJ#1^=NJpj=O@0!^+7LpM*@;MG)nmg(Q?rcj%fa z8Fw8<6@ag}xpxQ(17ItPgz9R|xd^=LfB*wn(<=w?_Cc^1FhnDH2EG8c0Dc89V8V}t zSaqtRBO-v5B@1u6%%|(a=|};%UvLW;n8^xR`Co0U)fMo0o@#V#tm}SZxt5$}+wOLb zTP2)C@kPTd0%VHA;9!qUFe_!>Z>67Cy07@_A{ zjx)Rg)^5TF56XZDp#9_VtdsD7g{_TEbO7$)w-^5jR%(w=ekY%X^c5%^#&HXpt#wyo*GvT0a-Y;Ncx2XSYJh#Us{Aguw(CoBV2jX4aAZXEyXpwcQJ!2pBI ze7s64XMmE&ii(3{(}N_keOAC_hZ&wP(grvlUS2q}Wi5t`_wMbj)f1L#u7DY<0*diU z#W*y>|KYCQYX>F?Fjn&nns}di{=`e**(hDvn$MhXb@7-U3vk-uq-Iteee`N_0he^} zlk$)TCDYwEKZ$YFH7vP^D_S(umM+-VH@rXLZ=YJ*GCI-SVYctpo1Ss>yw;zEBJSey z-062P=({KS9=&CGwKL`w^KMMaeCDFeWlZ&RIt%oPo;7CCZfY-pUFpsIu~q>f>j;Gy z2;ckrvoJE!cy)0u(>BRMuxa@f>LZ1Ds)r2>3}Q5b4^nj)LcPAMF7U-F;&jn=yp@VE za724Lbu>ZK2rX^Wz!B|%2UDOVr~VH-ZkH^6X~xh6=nU5QZl(8?B~)t0=Q5c#6lEMU zNl;PVV%rgriDfo8OPyaVaOx`S6Cl ztvl5^?t=9aHYP&U(0+qj6Y#Ax(T+Z^KT`@(5E13W6pD@}7mTZh;Buv6!Nc?Z{!_8q zKEK>Z1mdy?wiaOZETvAv)#if(3BtMMtq@_Nx_}NwzM}NDuyFQ$4r!=`S-Xz?*D2hP zT@C1~I3IC{@o2O~!8fbANFTlxdWBwOX+2s7UFAC>1l>3J>@TQ6Jy-!19@KS-%3CRqt$bjAc#)}0X zmBQkAm@sMt+^w}M7y-$H8%^Dp3)KGc_hL~3_fx5D$sXZ6^e?VP)SOJ$a!TSQ z;DkIjnKz&cX`6wS5fFwRi)THAsgUm*rsCtNvigPw2h;mZ%g0&%-n6@~vMHlLk6bci z5ABh#+-tVWJ9%P}sYdJ(3K`~<=ZB{^_h9XWD}i&t8w0!D_IpHsA1hRt+zD=}tFQmP zL}7jm0w(ZZlSr_ZxD(L4HXDChKnr3lSFauzczve!Qc|tZ z4a;km^PFMi6Q};a%Su{XuY)MYe$ELqqFXBKm+0SLGWU`m)EW0SR8n)hEYhB`R#{2K=~v>-=g5AG85Q&Walqfn@g zy~F9I07yM_z2v-ri|d9Nbp+*%yK=EV+u98BR3o5|Na&a+s=dl-o#tAcI88U)2rwhN zUmh-7y0vXxyKw_#zU@K%0g z+zgXvkL}&e4AM3^%3C@+a|+Vn1>^(8j*Q#lyLJWWp}^CFupAEG954+3Ch)l~c;-6L zPF+(|Gdqg{{1K4cKu97o^~tB3dB9bM@T+yk28Cc@WwnH;>cN8tmQ{Q7ah>CZCc*02 z_nDYr#qlF%A!Rpgh9bqurLa_!P$_$my8v`$YI1VL?vx+E=I0;3b|`-fG9}j^zdhcY zgO~=%4sI#Lf}mgoK7rGpYdohK8NU2Ip)O+6J{|k*Znsai#DDw8Y32+l|LRlzrL~7% z%NwN5sW@0nDi1iZ+tk*v_%nOSIjheZ5Mj9YA$uVDKFa%@#SZCXY%U19cHFw;lbDzY z{5-5o9fbfGS|H!?adIkU^(|~W$H;<0PfDLDh#Jxy)4$bbB4IUcD;E zzb@|T>MADYY3y>vg?Vf5Jck2%Y&6yK+JWCS#il0yTi1v(3N@DdFsA5}=XTpmMH@i} zd@okD*N(GXPAYOz5>f^*3*GE(X>qQ+5P3mC1aAzwfQ$S}TCdA?1<1s}u|^GIH&Ksl zXFpuKOD`L}3u_4nNwx~pX3eA(+g&75^zi6tu04u`ft)LR8XPW96DwM(;2xzTIDWe{;TU^Z*cH2?Rvp>+@i)dZpm%eofMN& zG7M&4d-S3gq(flpf!+rIRAG5O+L!y^1tu#u*Q)m2d3bUcFJ1%%r{btEV6;F;26`zJ zkL7_M>&i1@%|jm5KI;sw`1cPCZ$;!o4sHcih8+wXd3_N!65h9*TT-vo7~a|p;t#I1 z+deQGsHzsU@8Dp~i7q)>j(LbN-4D7@{xm}g6mZ~c*aES9#k11o-y{ftRRPdg~y?B+y3y+{i9j06PW^`3%KVt>TLF@)% zd09!x2`e5LXM7GzR9?X0tMe=ZPwCGe!vSF)>nU+=g0X$kr0%W73mo)GrBkwZHl2QY zbrY3(A=&9)ZxQO~(0Pq8RxAgWe{Zpr1tl!73l>~K^C(~DP^rH94Sp&vuHy9c_bo-t z#EX+8UC`9N=>ReIIj_xf0r)66`N#0g_f3M7AmoPD+e%2$yL+T6D9#7E(kKT~%s2V5 zv$HpTx|Q^tK_y!~G$^RfoMW>|=s2&mbZ?*u|9u|Z*BT=1SDj@TBswjkjc^J1p< z__v#uY00Bv^kAyld|Bnv6E*Ht3aEKUBD>lfN4rNxG+(?Jm{k1d8oD3bKtVKUC(+T< zLyD+4A;F`5QaXxj8FCd&%*>bY@fTc92*q1*Wz$y&3@&Pr6`5&k4^Rp$Ztveer>Ch2 z#Nuh#Hi7+;@}=AYF}!~sWIW}ACn<3PF2&!!I{~5e`r{inZan1X<_M-Z7^^n>;}U-N z7lz5RR+l|OoF*`eE2sL{88Y6sN|m*`R=qt~Z)vt8_MZiEcOB^JvYP!F;ab@s#+Oi4 zou~Q@oY`hc$7?=JjEsp%Nm*H0F>`))jYooF+E=^;^W9++g&%Kx8Rq!g;<)r}ENKs#@bMZp*Ax_!Yjp`wDHhDMYMX}5U?Q1(gPc8|E4 z*VL)(Mr~^L2K^3@x&$}~_bS`t$N(fwaEo0TT5kS4;^vnNH69zDQ>x$nLw2oXJ`8kvdB zI7uyEfR*ned*|%&*koOa-cV!k-TunwReOmnV6dwPO45Z&0gE1(IqObdNbvbehGpol z**fdVm2b;Z!Oq(H`nq=MLj+=ryWsb?-g!7vKe^@rYEg*F+TIN(_1KcE|J+*)7alLz w*7JGfg4JTeoI3Cb#N8#V$PXO any listMachines: () => Promise getMachineApiIp: () => Promise + onUpdateDownloadStart: ( + callback: (value: { version: string }) => void + ) => Electron.IpcRenderer onUpdateDownloaded: ( callback: (value: string) => void ) => Electron.IpcRenderer + onUpdateError: (callback: (value: { error: Error }) => void) => Electron appRestart: () => void } diff --git a/src/index.tsx b/src/index.tsx index 6e9b4f4a7..4ce2fff5a 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -8,6 +8,7 @@ import ModalContainer from 'react-modal-promise' import { isDesktop } from 'lib/isDesktop' import { AppStreamProvider } from 'AppState' import { ToastUpdate } from 'components/ToastUpdate' +import { AUTO_UPDATER_TOAST_ID } from 'lib/constants' // uncomment for xstate inspector // import { DEV } from 'env' @@ -53,7 +54,22 @@ root.render( // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals reportWebVitals() -isDesktop() && +if (isDesktop()) { + // Listen for update download progress to begin + // to show a loading toast. + window.electron.onUpdateDownloadStart(() => { + const message = `Downloading app update...` + console.log(message) + toast.loading(message, { id: AUTO_UPDATER_TOAST_ID }) + }) + // Listen for update download errors to show + // an error toast and clear the loading toast. + window.electron.onUpdateError(({ error }) => { + console.error(error) + toast.error('An error occurred while downloading the update.', { + id: AUTO_UPDATER_TOAST_ID, + }) + }) window.electron.onUpdateDownloaded((version: string) => { const message = `A new update (${version}) was downloaded and will be available next time you open the app.` console.log(message) @@ -64,6 +80,7 @@ isDesktop() && window.electron.appRestart() }, }), - { duration: 30000 } + { duration: 30000, id: AUTO_UPDATER_TOAST_ID } ) }) +} diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 4c906dc9d..ae6973df7 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -102,3 +102,6 @@ export const KCL_SAMPLES_MANIFEST_URLS = { 'https://raw.githubusercontent.com/KittyCAD/kcl-samples/main/manifest.json', localFallback: '/kcl-samples-manifest-fallback.json', } as const + +/** Toast id for the app auto-updater toast */ +export const AUTO_UPDATER_TOAST_ID = 'auto-updater-toast' diff --git a/src/main.ts b/src/main.ts index c561910b0..7f8c9d614 100644 --- a/src/main.ts +++ b/src/main.ts @@ -261,10 +261,30 @@ app.on('ready', () => { autoUpdater.checkForUpdates().catch(reportRejection) }, fifteenMinutes) + autoUpdater.on('error', (error) => { + console.error('updater-error', error) + mainWindow?.webContents.send('updater-error', error) + }) + autoUpdater.on('update-available', (info) => { console.log('update-available', info) }) + autoUpdater.prependOnceListener('download-progress', (progress) => { + // For now, we'll send nothing and just start a loading spinner. + // See below for a TODO to send progress data to the renderer. + console.log('update-download-start', { + version: '', + }) + mainWindow?.webContents.send('update-download-start', progress) + }) + + autoUpdater.on('download-progress', (progress) => { + // TODO: in a future PR (https://github.com/KittyCAD/modeling-app/issues/3994) + // send this data to mainWindow to show a progress bar for the download. + console.log('download-progress', progress) + }) + autoUpdater.on('update-downloaded', (info) => { console.log('update-downloaded', info) mainWindow?.webContents.send('update-downloaded', info.version) diff --git a/src/preload.ts b/src/preload.ts index 1f458a424..52e37c1d3 100644 --- a/src/preload.ts +++ b/src/preload.ts @@ -16,8 +16,13 @@ const startDeviceFlow = (host: string): Promise => ipcRenderer.invoke('startDeviceFlow', host) const loginWithDeviceFlow = (): Promise => ipcRenderer.invoke('loginWithDeviceFlow') +const onUpdateDownloadStart = ( + callback: (value: { version: string }) => void +) => ipcRenderer.on('update-download-start', (_event, value) => callback(value)) const onUpdateDownloaded = (callback: (value: string) => void) => ipcRenderer.on('update-downloaded', (_event, value) => callback(value)) +const onUpdateError = (callback: (value: Error) => void) => + ipcRenderer.on('update-error', (_event, value) => callback(value)) const appRestart = () => ipcRenderer.invoke('app.restart') const isMac = os.platform() === 'darwin' @@ -144,6 +149,8 @@ contextBridge.exposeInMainWorld('electron', { kittycad, listMachines, getMachineApiIp, + onUpdateDownloadStart, onUpdateDownloaded, + onUpdateError, appRestart, }) From 746ebf80d1275356985e0d2e17dc0668b9720da8 Mon Sep 17 00:00:00 2001 From: Frank Noirot Date: Thu, 10 Oct 2024 14:57:25 -0400 Subject: [PATCH 09/11] De-flake another text that could be thrown off by toast-based selectors --- e2e/playwright/projects.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/playwright/projects.spec.ts b/e2e/playwright/projects.spec.ts index 1ea94a3e6..b9c1d3e91 100644 --- a/e2e/playwright/projects.spec.ts +++ b/e2e/playwright/projects.spec.ts @@ -1101,7 +1101,7 @@ test( await expect(page.getByText('No Projects found')).toBeVisible() await createProject({ name: 'project-000', page, returnHome: true }) - await expect(page.getByText('project-000')).toBeVisible() + await expect(page.getByTestId('projectLink').getByText('project-000')).toBeVisible() await page.getByTestId('project-link').getByText('project-000').click() From 15bedd56f487be4d1c642a23754e10cb8b58f3a4 Mon Sep 17 00:00:00 2001 From: Frank Noirot Date: Thu, 10 Oct 2024 15:04:25 -0400 Subject: [PATCH 10/11] FMT --- e2e/playwright/projects.spec.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/e2e/playwright/projects.spec.ts b/e2e/playwright/projects.spec.ts index b9c1d3e91..abe3a6256 100644 --- a/e2e/playwright/projects.spec.ts +++ b/e2e/playwright/projects.spec.ts @@ -1101,7 +1101,9 @@ test( await expect(page.getByText('No Projects found')).toBeVisible() await createProject({ name: 'project-000', page, returnHome: true }) - await expect(page.getByTestId('projectLink').getByText('project-000')).toBeVisible() + await expect( + page.getByTestId('projectLink').getByText('project-000') + ).toBeVisible() await page.getByTestId('project-link').getByText('project-000').click() From 1ce3d8ccd046e022354f90b63bd941c539154989 Mon Sep 17 00:00:00 2001 From: Frank Noirot Date: Thu, 10 Oct 2024 15:34:07 -0400 Subject: [PATCH 11/11] Dumb test error because I was rushing --- e2e/playwright/projects.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/playwright/projects.spec.ts b/e2e/playwright/projects.spec.ts index abe3a6256..153ce8313 100644 --- a/e2e/playwright/projects.spec.ts +++ b/e2e/playwright/projects.spec.ts @@ -1102,7 +1102,7 @@ test( await createProject({ name: 'project-000', page, returnHome: true }) await expect( - page.getByTestId('projectLink').getByText('project-000') + page.getByTestId('project-link').getByText('project-000') ).toBeVisible() await page.getByTestId('project-link').getByText('project-000').click()