From b389c7252836bd7f9bcd074ea7fa8df52501c070 Mon Sep 17 00:00:00 2001 From: oligamiq Date: Sun, 22 Sep 2024 00:27:11 +0900 Subject: [PATCH] feature wasi thread-spawn --- .gitmodules | 4 + bun.lockb | Bin 0 -> 89865 bytes examples/bun.lockb | Bin 0 -> 3008 bytes examples/package-lock.json | 42 +- examples/package.json | 2 + examples/wasi_multi_threads/index.html | 38 + examples/wasi_multi_threads/main.rs | 13 + .../wasi_multi_threads/multi_thread_echo.wasm | Bin 0 -> 91207 bytes examples/wasi_multi_threads/thread_spawn.js | 5 + examples/wasi_multi_threads/worker.js | 32 + .../wasi_multi_threads_channel/channel.wasm | Bin 0 -> 116487 bytes .../wasi_multi_threads_channel/index.html | 28 + examples/wasi_multi_threads_channel/main.rs | 16 + .../thread_spawn.js | 5 + examples/wasi_multi_threads_channel/worker.js | 32 + .../wasi_multi_threads_rustc/depend_files.js | 154 ++++ examples/wasi_multi_threads_rustc/index.html | 75 ++ examples/wasi_multi_threads_rustc/rust_wasm | 1 + examples/wasi_multi_threads_rustc/rustc.js | 48 ++ .../wasi_multi_threads_rustc/thread_spawn.js | 5 + examples/wasi_multi_threads_rustc/tmp_dir.js | 58 ++ .../wasi_multi_threads_rustc/tre_opt.wasm | Bin 0 -> 1043045 bytes examples/wasi_multi_threads_rustc/tree.js | 47 + examples/wasi_multi_threads_rustc/worker.js | 115 +++ examples/wasi_workers/echo_and_rewrite.wasm | Bin .../wasi_workers_single/echo_and_rewrite.wasm | Bin package-lock.json | 804 ++---------------- package.json | 10 +- src/fs_mem.ts | 6 +- src/index.ts | 1 + src/serialize_error.ts | 23 + src/wasi_farm/animals.ts | 574 ++++++++++--- src/wasi_farm/farm.ts | 27 +- src/wasi_farm/index.ts | 5 +- src/wasi_farm/park.ts | 300 ++++--- src/wasi_farm/polyfill.js | 212 ++--- src/wasi_farm/ref.ts | 139 ++- .../shared_array_buffer/allocator.ts | 41 +- .../shared_array_buffer/fd_close_sender.ts | 25 +- src/wasi_farm/shared_array_buffer/index.ts | 13 + src/wasi_farm/shared_array_buffer/park.ts | 319 ++++--- src/wasi_farm/shared_array_buffer/ref.ts | 306 ++++--- src/wasi_farm/shared_array_buffer/sender.ts | 42 +- .../shared_array_buffer/thread_spawn.ts | 410 +++++++++ src/wasi_farm/shared_array_buffer/util.ts | 98 ++- .../worker_background/index.ts | 10 + .../worker_background/minify.js | 46 + .../worker_background/spack.config.cjs | 15 + .../worker_background/worker.ts | 290 +++++++ .../worker_background_ref.ts | 311 +++++++ .../worker_background/worker_blob.ts | 10 + .../worker_background/worker_export.ts | 18 + test/run-testsuite.sh | 0 53 files changed, 3365 insertions(+), 1410 deletions(-) create mode 100644 bun.lockb create mode 100644 examples/bun.lockb create mode 100644 examples/wasi_multi_threads/index.html create mode 100644 examples/wasi_multi_threads/main.rs create mode 100644 examples/wasi_multi_threads/multi_thread_echo.wasm create mode 100644 examples/wasi_multi_threads/thread_spawn.js create mode 100644 examples/wasi_multi_threads/worker.js create mode 100644 examples/wasi_multi_threads_channel/channel.wasm create mode 100644 examples/wasi_multi_threads_channel/index.html create mode 100644 examples/wasi_multi_threads_channel/main.rs create mode 100644 examples/wasi_multi_threads_channel/thread_spawn.js create mode 100644 examples/wasi_multi_threads_channel/worker.js create mode 100644 examples/wasi_multi_threads_rustc/depend_files.js create mode 100644 examples/wasi_multi_threads_rustc/index.html create mode 160000 examples/wasi_multi_threads_rustc/rust_wasm create mode 100644 examples/wasi_multi_threads_rustc/rustc.js create mode 100644 examples/wasi_multi_threads_rustc/thread_spawn.js create mode 100644 examples/wasi_multi_threads_rustc/tmp_dir.js create mode 100644 examples/wasi_multi_threads_rustc/tre_opt.wasm create mode 100644 examples/wasi_multi_threads_rustc/tree.js create mode 100644 examples/wasi_multi_threads_rustc/worker.js mode change 100755 => 100644 examples/wasi_workers/echo_and_rewrite.wasm mode change 100755 => 100644 examples/wasi_workers_single/echo_and_rewrite.wasm create mode 100644 src/serialize_error.ts create mode 100644 src/wasi_farm/shared_array_buffer/index.ts create mode 100644 src/wasi_farm/shared_array_buffer/thread_spawn.ts create mode 100644 src/wasi_farm/shared_array_buffer/worker_background/index.ts create mode 100644 src/wasi_farm/shared_array_buffer/worker_background/minify.js create mode 100644 src/wasi_farm/shared_array_buffer/worker_background/spack.config.cjs create mode 100644 src/wasi_farm/shared_array_buffer/worker_background/worker.ts create mode 100644 src/wasi_farm/shared_array_buffer/worker_background/worker_background_ref.ts create mode 100644 src/wasi_farm/shared_array_buffer/worker_background/worker_blob.ts create mode 100644 src/wasi_farm/shared_array_buffer/worker_background/worker_export.ts mode change 100755 => 100644 test/run-testsuite.sh diff --git a/.gitmodules b/.gitmodules index c9f05a1..2d9d707 100644 --- a/.gitmodules +++ b/.gitmodules @@ -5,3 +5,7 @@ path = test/wasi-testsuite url = https://github.com/WebAssembly/wasi-testsuite branch = prod/testsuite-base +[submodule "examples/wasi_multi_threads_rustc/rust_wasm"] + path = examples/wasi_multi_threads_rustc/rust_wasm + url = https://github.com/oligamiq/rust_wasm + sharrow = true diff --git a/bun.lockb b/bun.lockb new file mode 100644 index 0000000000000000000000000000000000000000..54a53eb6f94104e1f2b38e8878c2a6eefa79a7fe GIT binary patch literal 89865 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ற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 SAI21!-(g~3Px&AC&;J2Hph)fj literal 0 HcmV?d00001 diff --git a/examples/bun.lockb b/examples/bun.lockb new file mode 100644 index 0000000000000000000000000000000000000000..d2ee58d33bf41e5168451d54469ae6874a1c428b GIT binary patch literal 3008 zcmY#Z)GsYA(of3F(@)JSQ%EY!;{sycoc!eMw9K4T-L(9o+{6;yG6OCq1_lNmwan%T zH|I0i{;}^`!?o*HJhy>t-0vf6<2Ll241ZIqZ@>*y1O)65ih%=-Zh-Q$VG6)}DF%iH z10ahZNLQ4k7Ue=!fy6;f5Dml(VnCXik%561NNfJOyr8;?>@`lo$~!D4?{Rc; z@BaxChtaA_t_ghKa8`1H%Ax0fd*mhowNnH@p#TE*K6{y@8sGkK$ z3lpamtO}%_5&+Y$N2Vb#_wNAe_lEkPlrV+aPp0)?Z6Gs17-TOj>_Id$5F@8JkUS?4 z!vJ~u{_+1K#e*=*@XvDlAf5rkgs;{)XMM>1Qeg78*Xfb;Y3J*UahvY?{;Gd=z=P zRAv94TT5fJRWl@!%msxp)c}&Y)JPX_cOjVzOCKOP7GuHEfO``^wHi$Q7^Z(NjzQVR zxbxM@M^D}r*Qu=Y`pF<ccrxMwDbO^QxDRLe@Ubeo^skqgUdDGVc`+PCCDOh-5As z+%hUKfaVTmFbJJbvXe;GKyrjJZh%&LZ=f`nO>t4OUS?i#Nn%cp9<0XI3n@xXwNo%M zP$m zV=>eGoD_240BtZ4H5NQUiT!y&^M1$N2 z6wKgmGeivqSbG3gzcYahgac5E0oDRwVgWT|tblT`wgs%Mz{D75qGxEKXTSh!eZX21 zKp6u)Q=kNf9s!UZ1CR^|P|qG%y9U-yLAd%2G*n + + + + +

+ #### +

+ + + + diff --git a/examples/wasi_multi_threads/main.rs b/examples/wasi_multi_threads/main.rs new file mode 100644 index 0000000..86d14dd --- /dev/null +++ b/examples/wasi_multi_threads/main.rs @@ -0,0 +1,13 @@ +fn main() { + println!("Hello, world!"); + + let _: std::thread::JoinHandle<()> = std::thread::spawn(|| { + for i in 1..1000 { + println!("hi number {} from the spawned thread!", i); + } + }); + + for i in 1..1000 { + println!("hi number {} from the main thread!", i); + } +} diff --git a/examples/wasi_multi_threads/multi_thread_echo.wasm b/examples/wasi_multi_threads/multi_thread_echo.wasm new file mode 100644 index 0000000000000000000000000000000000000000..894878b047f36f52500ae399f98d5c9e85643dbf GIT binary patch literal 91207 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� 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 literal 0 HcmV?d00001 diff --git a/examples/wasi_multi_threads/thread_spawn.js b/examples/wasi_multi_threads/thread_spawn.js new file mode 100644 index 0000000..3761fb9 --- /dev/null +++ b/examples/wasi_multi_threads/thread_spawn.js @@ -0,0 +1,5 @@ +import { thread_spawn_on_worker } from "../../dist/wasi_farm/shared_array_buffer/thread_spawn.js"; + +self.onmessage = (event) => { + thread_spawn_on_worker(event.data); +} diff --git a/examples/wasi_multi_threads/worker.js b/examples/wasi_multi_threads/worker.js new file mode 100644 index 0000000..913a976 --- /dev/null +++ b/examples/wasi_multi_threads/worker.js @@ -0,0 +1,32 @@ +import { WASIFarmAnimal } from "../../dist/index.js"; + +self.onmessage = async (e) => { + const { wasi_ref } = e.data; + + const wasm = await WebAssembly.compileStreaming(fetch("./multi_thread_echo.wasm")); + + const wasi = new WASIFarmAnimal( + wasi_ref, + [], // args + [], // env + { + debug: true, + can_thread_spawn: true, + thread_spawn_worker_url: (new URL("./thread_spawn.js", import.meta.url)).href, + // thread_spawn_worker_url: "./thread_spawn.js", + thread_spawn_wasm: wasm, + } + ); + + await wasi.wait_worker_background_worker(); + + let inst = await WebAssembly.instantiate(wasm, { + "env": { + memory: wasi.get_share_memory(), + }, + "wasi": wasi.wasiThreadImport, + "wasi_snapshot_preview1": wasi.wasiImport, + }); + + wasi.start(inst); +} diff --git a/examples/wasi_multi_threads_channel/channel.wasm b/examples/wasi_multi_threads_channel/channel.wasm new file mode 100644 index 0000000000000000000000000000000000000000..369c3b58a3eda171ef32db01fae02f5968559616 GIT binary patch literal 116487 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%0DLu1CU<{8fwP^%k$}a6L6Th5q9DL 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 P^6MMA>JXq!$e{lhugCeG literal 0 HcmV?d00001 diff --git a/examples/wasi_multi_threads_channel/index.html b/examples/wasi_multi_threads_channel/index.html new file mode 100644 index 0000000..44539a0 --- /dev/null +++ b/examples/wasi_multi_threads_channel/index.html @@ -0,0 +1,28 @@ + + + + + +

+ #### +

+ + + + diff --git a/examples/wasi_multi_threads_channel/main.rs b/examples/wasi_multi_threads_channel/main.rs new file mode 100644 index 0000000..216800c --- /dev/null +++ b/examples/wasi_multi_threads_channel/main.rs @@ -0,0 +1,16 @@ +// https://doc.rust-lang.org/book/ch16-02-message-passing.html + +use std::sync::mpsc; +use std::thread; + +fn main() { + let (tx, rx) = mpsc::channel(); + + thread::spawn(move || { + let val = String::from("hi"); + tx.send(val).unwrap(); + }); + + let received = rx.recv().unwrap(); + println!("Got: {received}"); +} diff --git a/examples/wasi_multi_threads_channel/thread_spawn.js b/examples/wasi_multi_threads_channel/thread_spawn.js new file mode 100644 index 0000000..3761fb9 --- /dev/null +++ b/examples/wasi_multi_threads_channel/thread_spawn.js @@ -0,0 +1,5 @@ +import { thread_spawn_on_worker } from "../../dist/wasi_farm/shared_array_buffer/thread_spawn.js"; + +self.onmessage = (event) => { + thread_spawn_on_worker(event.data); +} diff --git a/examples/wasi_multi_threads_channel/worker.js b/examples/wasi_multi_threads_channel/worker.js new file mode 100644 index 0000000..c91ecb4 --- /dev/null +++ b/examples/wasi_multi_threads_channel/worker.js @@ -0,0 +1,32 @@ +import { WASIFarmAnimal } from "../../dist/index.js"; + +self.onmessage = async (e) => { + const { wasi_ref } = e.data; + + const wasm = await WebAssembly.compileStreaming(fetch("./channel.wasm")); + + const wasi = new WASIFarmAnimal( + wasi_ref, + [], // args + [], // env + { + debug: true, + can_thread_spawn: true, + thread_spawn_worker_url: (new URL("./thread_spawn.js", import.meta.url)).href, + // thread_spawn_worker_url: "./thread_spawn.js", + thread_spawn_wasm: wasm, + } + ); + + await wasi.wait_worker_background_worker(); + + let inst = await WebAssembly.instantiate(wasm, { + "env": { + memory: wasi.get_share_memory(), + }, + "wasi": wasi.wasiThreadImport, + "wasi_snapshot_preview1": wasi.wasiImport, + }); + + wasi.start(inst); +} diff --git a/examples/wasi_multi_threads_rustc/depend_files.js b/examples/wasi_multi_threads_rustc/depend_files.js new file mode 100644 index 0000000..b1ea3fe --- /dev/null +++ b/examples/wasi_multi_threads_rustc/depend_files.js @@ -0,0 +1,154 @@ +import { + PreopenDirectory, + WASIFarm, + Directory, + File, +} from "../../dist/index.js"; + +async function load_external_file(path) { + return new File(await (await (await fetch(path)).blob()).arrayBuffer()); +} + +const linux_libs_promise = (async () => { + const dir = new Map(); + for (const file of [ + "libaddr2line-b8754aeb03c02354.rlib", + "libadler-05c3545f6cd12159.rlib", + "liballoc-0dab879bc41cd6bd.rlib", + "libcfg_if-c7fd2cef50341546.rlib", + "libcompiler_builtins-a99947d020d809d6.rlib", + "libcore-4b8e8a815d049db3.rlib", + "libgetopts-bbb75529e85d129d.rlib", + "libgimli-598847d27d7a3cbf.rlib", + "libhashbrown-d2ff91fdf93cacb2.rlib", + "liblibc-dc63949c664c3fce.rlib", + "libmemchr-2d3a423be1a6cb96.rlib", + "libminiz_oxide-b109506a0ccc4c6a.rlib", + "libobject-7b48def7544c748b.rlib", + "libpanic_abort-c93441899b93b849.rlib", + "libpanic_unwind-11d9ba05b60bf694.rlib", + "libproc_macro-1a7f7840bb9983dc.rlib", + "librustc_demangle-59342a335246393d.rlib", + "librustc_std_workspace_alloc-552b185085090ff6.rlib", + "librustc_std_workspace_core-5d8a121daa7eeaa9.rlib", + "librustc_std_workspace_std-97f43841ce452f7d.rlib", + "libstd-bdedb7706a556da2.rlib", + "libstd-bdedb7706a556da2.so", + "libstd_detect-cca21eebc4281add.rlib", + "libsysroot-f654e185be3ffebd.rlib", + "libtest-f06fa3fbc201c558.rlib", + "libunicode_width-19a0dcd589fa0877.rlib", + "libunwind-747b693f90af9445.rlib", + ]) { + dir.set( + file, + await load_external_file( + `./rust_wasm/rustc_llvm/dist/lib/rustlib/x86_64-unknown-linux-gnu/lib/${file}`, + ), + ); + } + return dir; +})(); + +const threads_libs_promise = (async () => { + const dir = new Map(); + for (const file of [ + "libaddr2line-a47658bebc67c3a1.rlib", + "libadler-38ddbcf07afd45fc.rlib", + "liballoc-1fc4f6ca1d836e4c.rlib", + "libcfg_if-fd15f5d506df7899.rlib", + "libcompiler_builtins-3dc6223f56552b05.rlib", + "libcore-0ec7cb16e8553802.rlib", + "libgetopts-6248a91c42a854a0.rlib", + "libgimli-4425159eeeeb18dd.rlib", + "libhashbrown-243f98c4e4e641ea.rlib", + "liblibc-9149392e3841960d.rlib", + "libmemchr-9ac950afd37fa4c7.rlib", + "libminiz_oxide-91aaa0ee7402d39e.rlib", + "libobject-361b96ef5df8a7f9.rlib", + "libpanic_abort-f91052098501e46b.rlib", + "libpanic_unwind-fc376dcf47815f10.rlib", + "libproc_macro-9cab37e4d11f0e52.rlib", + "librustc_demangle-1af142f261139812.rlib", + "librustc_std_workspace_alloc-f0d62212c413dd0e.rlib", + "librustc_std_workspace_core-ea396731d16229a8.rlib", + "librustc_std_workspace_std-7434133be68a4a89.rlib", + "libstd_detect-083332b3c8180bc9.rlib", + "libstd-5ddf10249e9580fe.rlib", + "libsysroot-8b3608099dad3b42.rlib", + "libtest-8ebd431ae5608538.rlib", + "libunicode_width-7e2396fcd7049a8b.rlib", + "libunwind-e7408208cf4a3c79.rlib", + "libwasi-f0b9e157c50fe586.rlib", + ]) { + dir.set( + file, + await load_external_file( + `./rust_wasm/rustc_llvm/dist/lib/rustlib/wasm32-wasip1-threads/lib/${file}`, + ), + ); + } + return dir; +})(); + +const threads_self_contained_promise = (async () => { + const dir = new Map(); + for (const file of ["crt1-command.o", "crt1-reactor.o", "libc.a"]) { + dir.set( + file, + await load_external_file( + `./rust_wasm/rustc_llvm/dist/lib/rustlib/wasm32-wasip1-threads/lib/self-contained/${file}`, + ), + ); + } + return dir; +})(); + +const [linux_libs, threads_libs, threads_self_contained, components] = + await Promise.all([ + linux_libs_promise, + threads_libs_promise, + threads_self_contained_promise, + await load_external_file( + "./rust_wasm/rustc_llvm/dist/lib/rustlib/components", + ), + ]); + +threads_libs.set("self-contained", new Directory(threads_self_contained)); + +const farm = new WASIFarm( + undefined, + undefined, + undefined, + [ + new PreopenDirectory("/sysroot", [ + [ + "lib", + new Directory([ + [ + "rustlib", + new Directory([ + ["components", components], + [ + "wasm32-wasip1-threads", + new Directory([["lib", new Directory(threads_libs)]]), + ], + [ + "x86_64-unknown-linux-gnu", + new Directory([["lib", new Directory(linux_libs)]]), + ], + ]), + ], + ]), + ], + ]), + ], + { + allocator_size: 1024 * 1024 * 1024, + // debug: true, + }, +); + +const ret = await farm.get_ref(); + +postMessage({ wasi_ref: ret }); diff --git a/examples/wasi_multi_threads_rustc/index.html b/examples/wasi_multi_threads_rustc/index.html new file mode 100644 index 0000000..58d58e4 --- /dev/null +++ b/examples/wasi_multi_threads_rustc/index.html @@ -0,0 +1,75 @@ + + + + + +
+ + + + + + + + + + + diff --git a/examples/wasi_multi_threads_rustc/rust_wasm b/examples/wasi_multi_threads_rustc/rust_wasm new file mode 160000 index 0000000..b3114df --- /dev/null +++ b/examples/wasi_multi_threads_rustc/rust_wasm @@ -0,0 +1 @@ +Subproject commit b3114df16241f3f2d332bbf588f0ece0b7ddfe0f diff --git a/examples/wasi_multi_threads_rustc/rustc.js b/examples/wasi_multi_threads_rustc/rustc.js new file mode 100644 index 0000000..1dd1bf8 --- /dev/null +++ b/examples/wasi_multi_threads_rustc/rustc.js @@ -0,0 +1,48 @@ +import { WASIFarmAnimal } from "../../dist/index.js"; + +const { promise, resolve } = Promise.withResolvers(); +import("../node_modules/@oligami/shared-object/dist/index.js").then(resolve); + +let wasi; +let wasm; +let shared; + +onmessage = async function (e) { + const { wasi_refs } = e.data; + + if (wasi_refs) { + wasm = await WebAssembly.compileStreaming( + fetch("./rust_wasm/rustc_llvm/rustc_opt.wasm"), + ); + + wasi = new WASIFarmAnimal( + wasi_refs, + [], // args + ["RUST_MIN_STACK=16777216"], // env + { + // debug: true, + can_thread_spawn: true, + thread_spawn_worker_url: new URL("./thread_spawn.js", import.meta.url) + .href, + // thread_spawn_worker_url: "./thread_spawn.js", + thread_spawn_wasm: wasm, + }, + ); + + await wasi.wait_worker_background_worker(); + + wasi.get_share_memory().grow(200); + + console.log("Waiting for worker background worker..."); + + await promise; + + shared = new SharedObject.SharedObject((...args) => { + wasi.args = ["rustc", ...args]; + wasi.block_start_on_thread(); + console.log("wasi.start done"); + }, "rustc"); + + postMessage({ ready: true }); + } +}; diff --git a/examples/wasi_multi_threads_rustc/thread_spawn.js b/examples/wasi_multi_threads_rustc/thread_spawn.js new file mode 100644 index 0000000..bed9b51 --- /dev/null +++ b/examples/wasi_multi_threads_rustc/thread_spawn.js @@ -0,0 +1,5 @@ +import { thread_spawn_on_worker } from "../../dist/index.js"; + +self.onmessage = async (event) => { + await thread_spawn_on_worker(event.data); +}; diff --git a/examples/wasi_multi_threads_rustc/tmp_dir.js b/examples/wasi_multi_threads_rustc/tmp_dir.js new file mode 100644 index 0000000..4086095 --- /dev/null +++ b/examples/wasi_multi_threads_rustc/tmp_dir.js @@ -0,0 +1,58 @@ +import { + PreopenDirectory, + WASIFarm, + File, + Directory, +} from "../../dist/index.js"; + +const farm = new WASIFarm( + undefined, + undefined, + undefined, + [ + // new PreopenDirectory(".", [ + // ["tmp-tmp", new File(new TextEncoder("utf-8").encode("Hello World!"))], + // ["tmp-dir", new Directory([])], + // ]), + // new PreopenDirectory("tmp-dir", [ + // [ + // "tmp-dir_inner", + // new Directory([ + // [ + // "tmp-dir_inner-file", + // new File(new TextEncoder("utf-8").encode("Hello World!!!!!")), + // ], + // ]), + // ], + // ]), + new PreopenDirectory("/tmp", []), + new PreopenDirectory("/", [ + [ + "hello.rs", + new File( + new TextEncoder("utf-8").encode( + `fn main() { println!("Hello World!"); }`, + ), + ), + ], + ["sysroot", new Directory([])], + ["tmp", new Directory([])], + ]), + new PreopenDirectory("~", [ + [ + "####.rs", + new File( + new TextEncoder("utf-8").encode( + `fn main() { println!("Hello World!"); }`, + ), + ), + ], + ["sysroot", new Directory([])], + ]), + ], + // { debug: true }, +); + +const ret = await farm.get_ref(); + +postMessage({ wasi_ref: ret }); diff --git a/examples/wasi_multi_threads_rustc/tre_opt.wasm b/examples/wasi_multi_threads_rustc/tre_opt.wasm new file mode 100644 index 0000000000000000000000000000000000000000..67f06dfdd82ced1e8723f359f7e6a23f60c87f6d GIT binary patch literal 1043045 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 %uu_ zujt(-Uw*mc3q@LKD{eSVz$NS1Dy?(_qH|Ry(Oe33b2h?v!=Ht}C;VCZeOLo)=i`Gh zV-*zb6TJbHqsB);w5$byid$%uyZ9^%&r0NG0C5^|gilAgR9ACqfUIYy4^T|I`fwh^ z&5!(*YOBkXyK)%2G1*Eh4sFd}noKMrH(N~|&Na=18xPun*qyPk+?VeFS~yX0ef?}D zT@gz{Y!~qHextXtG6B~>V2v$7T&D8~KoKN-5sOevR(BilsGhUv0?K%a1m<#ByJSXf z>0dD2Ri#1^>%2rc(GVN!4uJ&hD#8`v)jS$EM`S=mJNS6(4wC(9_M(hp9?H;AfuTws z5b?;#lg2Ec9Qd{x2%O>W$24wzZ$eSoW^9UmYu_HbOBj9IXU!Tvf+MN64{HrC2jHpCxy-L*)QvBrwDfWO=db_bPO{91VkC7)fMotf_~$ z-lcHhmxo~C3;9pm)IwJ(`BjVkio|RCJRc#Te+P=QGybM?vp|xU}J&zK_jC7g5?h5 zHX3!`YY;e44)jFENtJ+he9v7dK$_AZ78*c9;b~TIFbf!YgrXsEP@aaOqb9z#NWgX< zdPE6l&p4i0D8+XR&p1?wG9e3x>hfTTZV|*rD z)|{Y;CSsjPuI2P&pXP#JZS15ACR0KGGF@ObT#zovJ(l?udx%=PC|?g3fZt z01u%VvRG8z*94gz!CK?11NbP})5J4EpWgK7d)s(JC53B-7ud#iPfE}G% zP%Yz_ap2};wgE~Be4&VT{{F5)GB;WYRwS1#bNgEIQZM7!0LF6Pj2>t*1SOC0K~fD_ z3aLJkO5`-YB=Zr9*O&Nu+=@8V|LcpXxI=D8GGP;-Tp2CM=oM~q_=1>`$npVK7T`Do zcnDf#(eZ;xLHG*4wL>&2<Vb>wRZqw* zRtTd_M^HdlK$31~Aj@+ACCe8bHO0QVprxYL4$riNn}(Dj{6;?YfhY@3_0|XHmuTiz z94U86;E+Q!!C~cLntdm@DAdm)3MrzulNn!O?{);|p|&NKKVvI2`7{f$d}LYhG*?yN zNok;{00re2R2JM}Zz}5+3p*-H>xGyxiOO{GxZvZaJT7!iDvL#^B|1YUWx`F2X_^?* z7E&tcEa-eZb6-K(I}V*wU>TZN-NGl$P2i3fqlM^dy$1CudaPhN0wu6a_Vm{_|@k#dG00GUu_zzv!bZmebtH=rnixPC3%bpdp6Ul4KA5pm3q zOvs_3T@1wp#Sz3nO|nQbNF?=@h7%2I#+z%<_;{#YVi)y#J`N-{!$hkOPy>hJ0t%RX zL<)>iZ2%%iZwkHtm%X=-vg^7I`|iE(&G!uO01SWuW=P!kFk%NHK!FlPATVX)q9P=k zq|Mk$<1~y-*Yd{#7*(WLRjai{$bu9kp}iP~j#*btxKcV|Z8_#j8Jmvf7_w=bwrEFn zD4Sj7T4qu?3xBYyOc&EKv26AC+vnc6N($WsGqf;GXM-12ooak17lQxZs9Wz8?7tM;vM)fMyEexW+TXDAS+jopP zTaY@18-|7m=^q|ZHUzF^X^G{Ae6yaVF?t!*2Yz0ZPQz^w#~}P;|zjVWo<~$!PrJ! zrnY-)rUq*g({`1Nn2d2(kYL<4gQ=1BN3*tdA@+_tR6{vxD5NsA7OCR!$jg}8Y$DEZ zGl_E?$_jDa$kc+=;F-`xqu0UB=!4u0m3lol6Ols0T1@n)pEwyrSn3PymC)AUVvT1V z*K%WLJwI8tkZWP@Zn#$9`Jmh;EnENya;;==$F42NLX-neb+fkST7W{p!1TLZi^hxr zi;z>}Co`-=-$K$t{0gqM7+ecv8gnfSv6peJ>BO}>q%m~5l5yo}v#_-+-;N2|_r-g&Fe>*Aay6v8!lJz!$2SL$^aX!+h;M|=S@ z-ejfz+?&Pk5-%Ezh4A1`9eNe=Yb$jp!w+*mN!`+dL=ZM-cj|WVxkly=rEai6soNpJ z;y+ZVRqD3le6>;+oNv#c5ze=R<;I4Ti+QMLU|yF6uG8ywuG8y6JCpeDf)`54*Qs=` z!u@tsEsD+WR?Oe1(!Cn@OGq_4MylXcU8I5`jSU6~so--PRk^L0U$_R0(JG8fgAF4r0>t7(2wYm zuuMT78+w=Mt&{t=AbJFmd0is^j3)#4W-@zAABpWW1K3&$>yoOw&NGOT=DN)_=o9ELtB#j8;m- z#>+G<5z}O^F%4y4SgbSKqh`36qx!ls!j2Jo0e--)49qVGA6?4@KxY|~0 z)l0vCIVR#Uyr#L)*esG^2>Q*PS z{zNkCV=URqtdF@Q*)qcR8YeSvW{wZDeykNtqhhG%hFM?jU~JZBkkx;L;+RITtP&SkR$s`9@t5YrLMm&&XU&a+g!!^_Cya<>8x*0xW1iE zgH)K@uBF+91iu`y+~jh)-zMiNk5&njQ><<;_@-Xnp2eCQtJ{bRX=PLM(J*V9G|{YX z<8M@jk5V$vvqquiAdoDKEsQ^XTeqaW&{@(34AnVzu!mn`XHB6NK=B;b%0S?_*2)k| zB7yoC8=_w=>L+l~r9gdB_D_p^SRrgxtZTH^xgil)DxO+HIOsw%RxVOW8LKb2eNb6ycP+XC_$6PZZ{1zb3 z-M$br7Jmd)gx1}ouRjiXSRSVZ^>Pi;d^->2S+122N`XbVpmfU{^kVzB4g!I&;Qs(NWQn zah8RPVLdWo-Hwsbr;9~rx35HCqz$1Nqv&RAC}n78r$vhuBp0Nb5Jfe%Ee>Z23^L%>LJMH`oFN zbj~v4v^xQ!3yl|S_>1jl3=O+L1tRWgw?=M|CqGLw!|jr+EbW3ZypIJaK995V0LlE_ z5qc^u*v~k(p&@_uO=t*M9}O|>0iewr;#(V%LaNQp-RbcSHWT|W z3GVYCP7xY8Qyb}o#*aPs=*Z<;OU=}7m36U(ay%V#Zf+%`uDtpTMld$-{*=i?^@t|1 zU!R)$gMzA&mR@SYfmF<|!}b2)M-Ciwe|oz|(=Z?_SW^a1hx@3Tn~K42X$w6{uc^OkByaC^;|(_EEb1)*|8q) zsu$wH$+PW)OYwmCj_s3|;t7tx?UPsH3FjrXPtMth3OC>O$%S}wseMAzSHo+Pi*lGb z!4l|o?By!_A>)`CN3M06B=?Hr!$*;Wc<2$~@t1cMJCl2)pq<4(a#lmk1h6L5VUPQs zQp#{TJqQmI$~{NCn;-rtB$93CNOc@OSiSPe&xNy#_jt~=_xc9ozFSTWdsXbl$cI=S zkP2D+n4+kNb)^e1T(Nhi2r03E-ZbU0Q*d0E!qXIiq>!O$lwRiHuLHYu3%A}L+ra1M z(_2Q9cq3N@(~pb(oc4S?k9#MnMJH_=I@9JxrVejuqUSaR=)%Mqe$spbFUH=a_7%^t znwK-lQ=CR|n;JDUguuIX2#-mHR-`Iu_K6IWN!dS#A zKoXRl@$o~2p4`*YVH-gndJHWMD0{%f)V-u-k1NYQ6E_sv+#|WkFsK81qQFH+zb598 z2eN?lppP#s!W|tpFbWs9#QG`0UeK&0P=mI@i5)%@T3lMVwQc z4FqiETvt$JLIBrAyYX$O3vgc=k|RGcYMfj?+zGr%v^?o@;-fw=;&`7l-a0R`t|6PB zPP^pTlYuivOaMFqQ+utZoNKLe%#VwrR!UV;j`O1$V*70G{+|0N{2^1 z;+zH~sha&CT8?4(Zhc|19&6BKA@~;?-AnyJ5YNChw|(`c9}=ZW4_z1yge{xY=`6rK zvzF0TevD{`H+ew(OgRulA}Whf=IBuvA4fj-C&wH74ww|;zVlZaLd&F5JWI1SJ&WT@ zcm{dpCp}BM5A7V?GordmN$fjdd!eDGS;g>(fPa`Xa)tq>KP~yK z{y3+B=$g7m88;F4-NPjoGLJ@xxB{yryG~?7l7$mlNkU6jNLZj|S6aFKP;XiW9nm?r zBMH=eHG)QLM_^C)hX2HJ(5=L||5~L(ZBYd(0GA1y1z_{sC+leti!+znyJ+;d3s+Ej zgfx+GNyQm;b}9^~5*P0Cfc-Ryc){Kjz@fyDVl#bH!n?&17#ZKDV8m89)LTl?nHPw?Q4c5WR<-4RZ_|%ifJVQ{X1Mzae}MokN&7=UCM3V#2xG!c z@V+=};N+;N22NV=a`10cG!?FXbP7KWHTUD`EWLYEqM@md)Gsj;5=9K|+sYOXewpi;$Jl5e>s(jtJm6PniFj$SOjnkPR-(By@9W zeI(eNyH}eL2GsRgX>x-4EHFOv6g@^wxhskfA%c2{{y^>09VxQgEFmQCUFaOZ=8ko! z3Mj))BJ3o1oRr%@86HoiorgM_GURwWqW+DK0jnRQZN?5wy&ma+v2TzTnBt!QWwZr? zvPiPn7$v=mJNY}Jjl*A5f5c9{I7E=`xOgC=za7c;8PR{HI(PoU;Ks~M^wbCJ^@4hx z$kwQbWMuLUd5K2iX58(^phOYx3BAL4kA~5zDjAqILwKhVoye+l3;+Z?P9wzZPkW2g z%OV?}K)=)TLFf57iae6_sGeQ(OZQQ+9}ul8Mw|^o#~o$2zc75j0{3>n9kxLvaC*Rg z#|edw4G>af1vfa|h=18VhPGrq0>H6$pCyYe5;rj5+s@B@`*Rk_-Hctco4~8GAGdMF`%|4pE2}hZE9m)cL64B~p7I&FNEA5X6<(SN!{k z(l7Vwza-P6DRE_(3qOkEW)uB)ERL3QW=|W|upn?lA))+wv6c#DPu1%yluro{nx%qe zLzz*p?N~3Fn|QFImLDfj#T%)mTNL9xIh{own33)^XxGGp(wK*dV9rz@Bk=G82n`PF zkCLAHVPNuLd8|0^L&6lhoeorUS>qzX;t7<`)#H1ye5^WGUm&b95ro@TtGkeKM`VUO;|GKmjJ)Hc9ikEi|uQvVi&fx)L zPn_Sylq7v&=MbyQTJfcwtgrQ}$F^ZWB)zcfO!b&&dhWO0$)V244@^WvDLk^K&J6x1 zngp3f7X+?>AmIhLV*QE~=m$3zH<4g-xPj#AV{j|mM0<`EB_E$W3l*vBU>SSjOlT3j zfK1r6)wXB8c!h6+8UV(Znrj1|5oah2;Ge<*r}FqCrn4uq2TbYk3S1f#ovbbv`0_>A zQs$*dDz)X9Do+1es9p&^%k5{l9ruW?Jd(MBu z94d9C5B2yM<)W~bFPwv*l4pj%uX=dfnc-fh%I-u27^mIf98g9gr%Q|-iX3Y1c?_!F zp3_w8&WD}1vXAu~Pl-VWBM#a|FoO&!b?2GkRZz4g{_iVe1B!3cA63DD%56|q1K9Xi zE(P0R7}=T33)HI93n3XXGHb;va|Xtbp1-U>h;cK`8tMCc@RWxjfykY2p_6;zaI=G- z25-{y2&Fn(eU3BAjAgQ4N=Tln{E!)|f6+WA_$F}WLv81g;ojy!PUQe@9Hwzy>-MSt z>}z@%&BPs++FzcF1;DVyLXW~q9_FmD#V!C3Trtom+!TqZ%`ou8rbr?g0i)P96Rg2+ zaph(gX4(TltFZ)X)R4-hvsgu#gf8X28d+8#V6>venNFkA{K9`Q$k?YJL#~Zz(qyQID{}7%L|tg zEHMGd{FzcV2if@L{`fMek+`PeVpBBm;l2EfF=m(k*ts+W?3l_4cDsZf@huwIp-zus2L#GRk8+gDPBpNbZDGgR772FNh(?7BUBeEa z$`0)Gu;fLA&CeUyO$$5Z_A%_DvAJtu1ey?bP#Db24eW4f6Lz~wzf|!=(%4pB<%!PI zOg6w!&a0Bp!}0XMajCO*;=6IsPZWyrk$v&q_#Km@^NzA50A)C&BzPCGzJX34suVRX zKoEv)V|@{$Vorn-2#(^9ZsXZoC7TU-6O@7PB+5WA;F`orxdxvIkw~-jxJ7&DFOi;h z%Pe-6D+*Y2I;e6!_&W_{ik1$3JWqJ>=(bS-F9W+sG!zBhiSTmy;Nh^vMG1rd9^7oo z`UzVC&6nLlm zI-69W`qL0rS?}c`6od^DaKGPHO3K1hjIOCm2QeDn-Y)9b{Nm*a7qp%M6PycEp$ z)V-i)y%0k|Jqo$6QuGi{HVjrb78mB-x>r5cLh}*Hn^2un1WdhsVrnc{_NyllKt^VH zqR#qcWcA6#ARk;j)joO{2X8D#YsIIwQJ|6^K?BsLLBT;PRy4%hzh(Wh8a}8gwW3Tk zQXC!F=5-$?r1>8LX&&FJDS5Jb5@ADg>@#f;N&;9MA|S=F-s27+yXG$v)L|@$Ov)!X za*8uy9!`*$RQi;W*f<>Wt=vK=z<>-`tA4g%wjrL)$|E@L(Ttw@NIBS(YJkow4_*xB z88VO`VB9>C5!{Y!gTH4pZLWs+O`BUc7M(OL*!@5N5 z6f-}G6)(M=ubzk}h+V4aw%9&BHg$~H7F@>?Qr!t;!VSGhkXubt2^g+Ln9HE)P?0TX z5;+I47Q_W-M)yuqj*t~@wI-4@s1UP65_vd~G!JMj*W)rYl2;86Tc|h}F$1UyDFUEU zr6qz<(NjkcEj_K3&5Lt2;QpiQ8;Dc)4QOrAw;F#@kI;0S8lielh)CkWQDdszdRIoCeXPi1S)iV(}$T`41h(pD@kM#!C-@SM-tFGlG z;bEWg`gwi^e`I(Wcw^GnHm?D#Fx6oBEP1YGbN{8ruj~j*ok4fE*9Id6Oo*qei%e)% zxpVMk;#-kgL56MpEH8SPLwLP})sItqauSe%gTAU&=w2N{C0PW?^}diF5u*tpthUnp zU0D@36Vci5E*nbcu`Nht-#qvCdW3q0_B@64oc17fmJui>SN@s2IO<_#(uJ=1L+QQi zp6aBd)~h~vPj#13+h{sEfMMss`u7lk9+Ln|iiq+rX<}D9hN+l^?o)CObT0Dt9GQE` zPBU4Z?A&XfY43~bo9?ORS^L8DQtj0JmG*KFk%qN}UbG!Bf73l678xh+ySFStEvU{t z-uqCzK3ko8@U!L{Zl<--XhEhPNy9nEU9 z=Xy*rZ^q>6eo-8$4wAjoL4Bcz*DL8Oz0vgGXLDY?%&T4S3UB4{vN9r?GkPenpedt# zBHLZD;gA1r_h#fUTAj!^b)cen_PJ{n)afzefJ_m43*jSZpp`3SJlsQKE4hT`uaKZ= zL(Nxt!-FpiH`3>DFGXmG1-HIb*S|8()Il;>Vd;isns)V%WDobT8gh_cmU6|Mvazgi zGp7`PnNu;Nie8puRCW5W-g$a?s4{`MYRIexeu-!^8ph*$Fg@eH{OWhoBlS8E*K5@7$gEKC{6VbY}mb&~nPBSGm) z!XjGkVSmJ z(IU>I^RR+TzY4Yf9jP@PSG8dh$%QG4<*={CyT#!ikT7MU=Pq}MY7hN-4O@`DGgr*`QZYiBi_Ogph&NG6VFS7d)9JyfRb6cj1Z3L3T-VChNC~xtg$I6$^S8uadmc zyk#ikExJK^8;*$0TNZ=kEf%r#cE#S8_ykPK0r%X@%*Eu+itepkK{b%Cz0%HWhG-TT z8P2Cr=IU8{^RGm0GsRu3_GSc#&~B_3bfrLyYKGAv#L!IdilEm5N^oa7R=D5^b!D*- zGY)Mkw_}=2CTcQ3DO}WT?_D_nVcUCTC%u*H`#$p+^pM0*SnZS(83*UOr0^|uOa(&Bkq=VZ>3)r}58YN)61AJ#$5M$k3dzVB& zS=0F*QxTsZ;0$f_{^VI_BlwLy1;cAHEMN)Ki5kDQFBDogxhh^pmBYm?HyFsvrr`9K z2`d&{kN3|vIeX`N$GD4}T$}GgkGkWFFQL|5;F%NmOLEH~C3?ekXvxW%mORjYc8Ske zVTjKzQS@5zVEgVx-aS~qdokWU)V_O(cMsL?UgBM1*04`x7fX@(1cy(jwUm1iC(nzi z&x5It6-bT6NoytNs21W2Ts=le3#D%qj5$Mv|6#LXneD#t!ogpRe>tR#0rpk9Bx+Vj zq06EX3(?E(*K}I3l$Zo`-q%afVm$LZ6ag*<>0b2;%H_HP@t0JT4U%7g`$4|J$Rt_u zK8xm0-knS*g#1^YF?Z}#OAAL z>CZ0Z`}M-aPi+UR!ZweH5p6JkLq%&6TNvDpBZP!(TWmhUFl{S$r2|^nY!D;C$^|Ws z@7Y{I5O}pw=d`|ta8rT~)AnVIz|V6h>-E^rZ=`0+93x z=Swm_yvk&NLCvL);nh7^fpb)Jh5_2lHYyAY-3?_=X~>kLZ5V&>rI>c|lza5xSt$4U zpFpPvu<>FX!jLSTS}3nd{A0w93gkN(+fAl*my23Yq2@R-mV0l7 zvse+-X7|ktBGWbi8Uz>mFEMIqE~FCrzCIlHL1)ME$+i9j`1E)(QAFihgQD}sYFMs*STH}bY7z2MH-(KbmPM#EUtCZ@dT zgENy`e~mmYMdewal|A7z3<8LfU^e749*L!sVktLz`?>!YUL`_c$QN0OUy;;-tG&bS z?;XyY33a8j)=IkqfurbjqC#7A-MFX$noJFhUn-1gY+)>-Y8rN)?x2$`FGJ4SftyQE z$)Y&`afZoe$oJ&W*PzF%r2(E1%Q|BFwyAsy9GQ?SvsapKkML8Y$v3l^n^V@Ae6cc; zh2#Q^r_LNkVTL24ErY7)^N=ffDzSXIAME zeuzxQdT?mSry0D+s+E*8xy?hd=rDtyVPhtZL7*@wo^l0yVV23Pu6cS{Kuv4do~ve0 z-%E_L9k@nCPspZxBoKK(GpUvkq!egVPFvJ;{S6TTQ~ys>0CX)1z`}D25{=)Y5sd*7 zeEQX4VX#v|RBj53K?@5`7kq74XzLk+W2yrV*3;|*%BW(%W#GU*9c~kdaSTA}c!J}A z3Cu2{0H1y{8%+q`%DT?f;0rxgc7e-gZzt=w9|BxN+5Gx|Yv&b#3yo}ZaIGb99ey=% zp#feFuJX+TSCtDf0yqZ5@P>V(2zF(Y?Z6d5?D$p?JDwnR(^e4EtK(=5G5X@nN(gq8 ziQ3Fh=q(=R1Pe7*>DQ;*S6@-LkvX@(l=r57qh)SBvF!KBvk6ny_50+e{YG7zyqRI2 zRoGWA(-3_B>1DOG>i+jYVl>KlHRCb`)?V!x8}fqF=7?iNBX2Bekasd{7l8XYZ3m%J zIi;U&EeRfM(0#Z5Zm{lM=Z^Y0%(2RnNl&%xGD9PJ%2yB{3GD$zjkU!;%uaK4G%YmF z-f}NDW4DHTC}j_0MHn|LL~JBEg;KRqFRE95vo>-lyCPQWq^_{ptDa~i!|K`JxR_OM zsh%@yy_lDw#oa5vIm7hV=|t`j5y?2JiTIT4P!!J(DstS zBvJ9}zlzCtLJO_E+{9$eGUnDM<7rLCC<4Qb>Sxg4P9l*eXW_af5jaolMjR43no9=b zIU>2ok;pjOutcxNd22hX7jA44;}R=F`q#QL)Wc{DXlEJ;)q%xytkDbP0hicV;xprr zk<1SfK|=M&kR(~LR*s%!5do4q!F?RDHewe$hGxXfq24%g5EaM(E-GVE^KeFk6oq>n zaTpvZI!vgm(7uTG0?B~9sMe9!qY;q3%-gX#`^m-lWF>vF#3$j0tQyBB8j;t3 z5>{uw`&@jtn!YRfj%ARkWI_gQ&4FQ9rZM<8Pt6X$Fi*c^kmB?$Z(hl00Hp(U6laD_>JM!5knqB z5drzt^mwPEeK`?KKWF~Lf!Ncdj0VjvQu% zs(?R>?SsdIAdtuK_)fwRGaP({=wUksPINl;hO!woRARu=??8m77>vgdxlGd5YM|rH zRFnhA$lQ9bQ<5LxLVh(K$j@zwpuC#|;Ao2mVvQMmM{1(`d#+-J(-d)>yOnij z@HjkTmL^`A8N3aEj2WCoebv`M4_3(5ip$O5)LN=_uQ!7`{EZo$m#@zZK5>~D92-$> z2FGs0vZ5MnSa8^jPxF!)Tx(MOsy2hyZ^I1ETaNpV4{<_?Qqs3!2InnXhSJ+)1}6r< z8!&@wG8mh|+%5$LGh<6QtYl7oMQs$j@XgR;7P(Dn2TociE?Lc2H$zR)F;f~K-6o^0cHp@IBP6*b~vhN<7!KXEYGv6VrnAt_b%1b8=puQ!8#Vo$!5cK44^RJ7@8a*`GA&|0SQg4s@67Tb)a)ttnoEo%o) z!k#b$1_+l_W+@qVjZe;9 zKN)uCF#(4~m-Fbvm#Z2?dOa3h+C8@D?v^$Wut@SBJI+pQyMxxEJ19L<75lCB!)&x& z3+z7o9czTOMVAer9g8lwBv5in0mV3Eb`y&()|_x|2#YQ^twq;b6roy+?&La)?k?9P zai7*Q2Jzzv1TDH&ggC|dl3H{VycP5K2Zbadtwo?|b<*dDj zd}vK-?;#($A=US_MRz%QR!5j25JQXZULG|T-ThsQ?vA0cc9`sS5$i3w+odAgowZnW zU7B<2u;@c*kz~;gKW!Ho*u@x&3@&)JST-NApTyBQaTLtc1ufZIaq-a81H-Q5Beuj~ zq4y3OxMRecdqP}EhP6^d6wM)jZ0(8TFfDpMjK!&Oypp_I12$X>!v<<$$|{XTH|(}J zW-N3i>_!%D(&+AJ&{$~ks;DirA~yYJ4FR+Dt+2M~WTthsa=(u=Y_PEknas2dux46) z{L$3IOndvXXYSc~P&>(?nkFfiLzPJI)Z5xjiy-0_0lg5yjKUtn#x%*8ur}?O zU?_n!H>O7AzAzIsmRhBFTCHsaUERy*oHkfQ-)?uYN>8EYO{*30JkFC*U%USebesO! z?b)zSOYh6*Ho}v7MD&NJWY}PxHmmCQ0@ENt2P|6OZ4Ik*dvS|ygP~311YCchpKLi2FMUjsr=hrpl9AmpL#KxpM_4xwcCK~mlTq=~Nwkleof z+CW0z*c?b2oB`76YXd1%Eew&DW7G0iZJc9GsWtzFId=oTLQ2NwKaW06_Bl+#WAook zwZZ&1(>4Ep0|Ce-E&Qzpj_bWNGt;r#feD8Xy7*!{*# zna124t6m659o6eHQzpV$hUrBuX?>N`YzmJ-Fq36 zYPG%k_-~LH4Trr6U((9@C*fvq&S`SuSyp}0EW4VVmQa1lN1yS>s1d~TiBJC&a_?>< zyt3a;Gn92#Mm&g6VntP^kYa4c`Ta>fpSk$Ssrur@$+>N6Tc4#&o(su1ad!^0Q9)a6T*dq8^f13FZS1;uEYLfA8^20h5pYs9k z5BS9xB4*kX=G4C-RD71Fxe#e zirjS@E~Y|o8mx-Bp+f*Q?%zwTO_h8VWv24;h}foZ-W%+WM?+*4f#We=@pUil6*r5c z+>Az*&7E>Q7*txAO6%37QEyWkK#0<8G*8`SjNeWwiXuKeQ4o30U=6^3q7e=q0C4ggQP*-st#!wtVPBh)X+7bg%j5`;SO-Sa6~!W6pmA=6+3~WF#uj0jLbTD$U7o1Pl9WZQ&c z#{!D%dlqB1K+76?)*+@oPl1?4o-Gh!HSj<;4j)csyg?9+Jmt*v4(GwF8vJcx{*Mkkb+%TWZSuJ*B1Y8HWD*ziv zLCBrc3&e@M60o`C$={Y>+qSKqJ{_=4`mY8XlMb*M=jhD>n^U#}H*6@`++{%9gbc37 zHpRjQwBL2u13^Jm&BA z?TiWW#uC=`iueb-$U|hsgl2(l8_+BoCYu$_lJ!k0nP#i4VecU&BQ|+Z?rf+riRKBv zH_~|uC(;cOL$0jzHR0NTJ#E)}1(VKx(sdxcO^@txv)@SXH}9^RiI?yFM!|O(zEkXCy;0du-u4Iw`R{uuuWaBIW@iv6$!+3m3* zt()#;&bU9fP|S>7W+zseNe&e|v69IIgBqTa+SS+%tjXyI%GpD`yRe(ghJ|Txtale& zlo!YGl-YKyceLF0Y4&++J5^rzv~HS5&kXh{3EzMRpmtRV4S8Gex)+E6jZJF=g=fc6 zl@E(v%Tk(*DUH>41{nf`?PFTSj7#hu?0*Uu3EA%C>}&ylkv$@1JlX;Rk=_OC{612ZE7@@#5~K9i@E)J~FradC zZYYzRRzPRolnRP=q@QX>db2L!Rr%)BsJ&Lm7=t7zS^r*b-tmkW0t!zKZUD=e0dEY<#IAy@dZHb0 zvCbnkvLZ%+Z6{UsEeD9{hH!pO;ybLb^1zUlhIG;CtaQb8e-D zgiH>eVpm)B?Ek`?yOttO5*_9DxPG3W6c493^)XD`1I^=wo(v$NhIzq-9~R4d6F84D zt5hSIAaTS8-pADoysSg$%&ryhkNvT<=uq!uvb0kaa*UtR9pl+LQ7Y^DNIFFaFU*Km z?#A6UYGJY5fX-a4of-U-eEm#HAX&mTAIFzbJ1TE`UDyIChS8f|Qv@L;?@=BV!c91SWXw+wzDSR~>QtT;yNIP}-O z3Hl957DKjTzif=lC>aDag%eqtQPxm!0|^%OqpXkp5{I9GO%7oMG;;Vc=e9)W$XxBL z0#sCdg7Aj>YoATjQQEsxX&|t}TBNZhl=DoCuE>jPRut$UvDlJoV;-HgHd5ve+Z&Ex zJ=TZF(TF(poQe{N{#p1L)ZaKHr1L}OSDlmDZWkgnHiEIB;Rio${ge4QJV@Vij)J#N z$BDVYvrd&KKF`d!#Ff*=x#@L$ILf1>E;!J_622ZmeiC%LS=v^fh6~}`V@1*X=*0ag z{w$4@e;7)Pl>{x#uq~HCHSeF=cj44mvX7to*bkq-@ZcjC&*dM*1m62JEezg<*-{o4 zAkKz)4}>mb2j@Mb8N=0&=-nqqy;Jvpf}+|oe(2+;&NVmpe|*%tVNu6iG4 z8*|BW<9+&TRnun$R4^9oW7WL3k_3WHyQ;?AIF zQ@!^ISMx58aQ@3G?Na~%YYF&H`G6;l zVk{Ip{M|BCEptPXedQ~?i2V++;!(Y7R!6TNuR43~T?n7uM}x~BO<(?~1oz7N*g+c3 zyie_i(Yncjvp!r#kbB}qM`O5g{|p%;fSTuLj;l&D?6|& zyC#!_XbP7XB6kV6JV`zT?dmo25xyEDQOH+ylj`okGQL-}%J8`ZD-M|RmS2m4mAvT44d61On}{n*4k})yji!qjHP8`9rTc~(CyS+D4g9T zfI;0|aAHQ_L49hvF+g{c`RKm0{c=XJfpb(}YWPO=a&z@B_Z0i?pQwEs7NKs7>UHyO zwP9W-Fp81WqZFDnj#;SjnsI8z%Z4w4($RLm@|*clEE%&gEL<))!Hh5?XQQ-qtjU0h zh|oe8aP5s3eb$v1@GM7qJW0>-3t7_aNa9V@kT9&aTWFv9ZLBUy;B0awnE#SPh4p}kc<-1e<5OtGo`_{zT2 zjbNhsSi!I)c1V}bKhvnPL9FjqCSi<(>X~X0qJB5XhQPOhf#k{UWe=#ar|ge_#yl6j z5of$Y_Ca(at?;vg&lbafW?1U;t0yqum1jqLTXz{A&yT=YNC#jEH|gzopL35<{KF#x zE8fj5q?MR4Y%s~uN(24yroycZM;{WlA3!)!&DhT-3#_I-05re5;(U^_|@R^6SiPrUckzr%UIwl=@ct>gW~2N>}0a? zG^gF+Dvg#f2XOT7XaB@BERC%f)0^p&iyeV5vPtDQL_iX-@57@>^<4IpAPw>{+K2a? zGEfosGTi#Ifll4gbBw^6DGwc;3Twe`9@o<%+uvjXb7#feWx>=t z351YON1PtwQ2-c=R8E!|IIs=E&bxZZ>WDPkLCXcvaPpqfG%=%C0=^6xMfol=N{~aI zVzs#3z8NysSU=m~J19uL4hmw9+X@B2IOM3aAL5Gyn1JX6y^-OIoD&`7+zxWaeWz#o zUmK&AkUE}_gyoG3k9_1o!K9A|#DR<)J@`vJz~%yOQ4QD@55n??}vrYM&w*Yb+feF{`CxR=u#FAZ8J|(gh-}WP;TmCEwT6wnu>-YXaF2b2lg&8zx>v`@@!W<8Bds0#sxKhOqNkifl|`}J(+01qToymlj) z6YVb1c1OdF`tGPKKMj+YXVF;_6-!2?I2q`T>9U-=XEYb;Zdr~#5z~xG-DtS^26b0t zj4z4%(;(y=)GH~x_KPZ16;QOt>h64_?$#7_bf8st@oP%T55h~HcCzh=ZGeqYpdz>~ zbA-9aAqT(+IgJTjc4_YLYBC`%C+byG>Sz^v_^v*ceVd~3)qH~@EytNFucDyQRf<17 zR!}HO>VFNt3jq&LKty&SvYL`QvJ65CA`KGIO^{iV8-#aJ z-EhXUA-Hd>ROo1ahF=$-0U<2dflr(!q!7-oL2WDH^S2mfZg(k9y6~mX*8)nCg6hKl}ZW?f8g^mL-cX^_Qp z)D~;ZKo!S{RXG*GiDZ!cPW$i$?y@+92L8$?E_z@yOrh4`xRd3;E{%3y40|xY zQ%>Di&fm*4foFS01g^0FC`A_aYyL-YxB9uVCZa+5DE0@K9e>#`n!yhtQL!chSMvT8GIpxEDN&of0sn}rX0*H-l3IcU zC3II%daxskk;ff%;OV|_;GyYNgR3;xt~ev-$GDQjl6C_SFaD5iL7&Ugj-dSn1PatJ zkdGjm7(y$tq{Z$9nugyW6w)sd7;R!%!jE(rk>V17rL~av^#XUEd^B-aih^i*f$*_M{s}y04F#=!bzZ4lWaSYU4;Yzvs>W~HpA&b-VqxTJqS~CwIBNo>a#kR z;gg_!^TG?|g}tEQV~Pq0?{qMF>|kYUa6r;=&hKQIB>d|7_xkrajo4`%PZY0)||1;d6~AF+4FN9lLswIU>>%w2uKFu?4~% z15wX-LDryc2|5r}T2dJjdOdQxVmUY7{kEL&bc9wYzAw|g0O+JUrfOGrU>x8De1<;Q z1bB!5{&j&jasoojwoT#?xqW+PH<^#b0Tn6;Q01K4bjYQZKQJ5Q=j2JT-Z=o)dndZ< zX0TX9mBB?5;J-;2AM;+|4r`;Ixgc-6kcY zVZD-C41PMdZ4rw`nlAfe6}RRG+FO|f@e%uh>Xk1Icd_in15E2-Y-wZ)twr=t`@38W z?0`*FSFxf_q0A&nez5+6eQaae%0Lzkr}t3%+p&HYmvj0y4=XRh>3iLb*fx*I>FM{P zhwM;KU!#f*(sh`HoYXpsZbqHiMz@os15M2UrBd@{7DtF+heS%-dSlwg81%=4&mkV0 zq#EaomqiktFD`Si_-%K^gTw5S0s*-q+1u~T zKt|T8qdmV@J^J~Y=*DLw^pp%Z7{e|fQwgruQ;~b`9Ts2~^OtH_tJIWtWuN8n`3fvr zP76}K>Y=s)v^->$E2(~t{Z_0CRvFqA3p=V$u2@mThdhl_VYGMi2wk$r6-iDKwi5Ed zgHa0SeyX2Ox>Yi*XB8*?6NJh-f)KHYyR*>Iob6oqrws6j+LkWc)|?KG#xga<*5}GJ zM@~e6hOZH)iZ*~)6dL*n%HU{=Qgi3*R6qqmm1RhH0@{h;KY=)t zS9+hHr2yKfUpR%M+!%U{D`S1dlB|bT*$Aw+^dF@gB0g<|uw+IzndbZEE4>*o-CzC{ zpQ4-d>F46pMG$~b2Yd>RQP_`ati((NE#s|fH3@?i@e*9VNTHa?K_oF=t)v`FB0^HY{g%T2Gk!u_EoL{Q~|z>^cQCf-1(osX|HQX$W=L(cKkz(Hqhy zyAL1trhlyWSe-snXL`84f3Uv4U@BF$q;uVyS0Itq(>?Tm&SpI`_=TL?7w9?X1Ea-y zYxx(E?xJ$jrkuyQaWsqS@!py0k$Q`$4bMvV^6~;thDX!$JataSo!-ZyVF6tn{I77Z zqWZ$5c7nfF5Odx|pXYln6o(9@n{-iIx`a?g3@pH!NGh1hWsv)DMXAkn;_j#y#s~^| zE{cfv+ZNs6U4Zo0qgr>I z`Q#+bstZ8-59m1!`EuQ$b9JQq!LR0X|6&SyTtquxDeNTq&at8#7hjIUlGEEKn}-*h zi_b>Cij&PBbcK(lq7W6zF$diV@bAw;vj)_vAI8-%EeEG z7cqbViYqC1%`cjA?nvdl@3qQ7-IMQh2mUr4W-Q3f;82XzLQZmr9B@BS!Y8%KDaTPo z1D+hO(;MOqkY?Z+w*>MsZLlTVYC4b34pQ}&=h2b#av)nM!_vX35K9tTQ>|pFMz@6I zAwopcU-eA7^$>tJ=K%qVYY@Vkx8e0vkN*vJCvfEWR^0)JbODLkc0u;&P<$28+w!Ye z2W!5P7S>-S2yayv%^la3CP>s3n7?IRkk9t3O~+bKBO0*uT3EEnoCZxOJ|IsCPZz1A zXNuPNfD&}&OHTN@$g}*5v#=v`&qHj@T%dpzgTDdvtC!i?97ecALIX`<6Rw<@RX`+Es)D#N2~wdS zazTY7;Fh-)MGkEt^IG7vj#mkxqx(J&XmWAeD7Vr;ED^q;LtHRrwro@6bh+3s(tJk# zGz6H;L3x@wX)no9tCAT*bZ^=UL`C&*UW2Im>*t=zwB%6o59$=+#Yd6^HTauSnCE~G zLXeb3*OF+ht zO{qI4qXznQrDSpKa;&+HqFQ{uGnIQ+Q|@MzDh;;+9{y$+kCC(c)l4#LP294q7KE`9 zib4+uKazTynDXnOX)BjEwB;{zZ!ydSy@rhmHMv>q91#pvF~Ue6dG*5YTtr3~{PE=6 z3N(WUFZ!Tg{ZTxR*Mnc5n)^2e=Pe?oD}LpOU;J6Fa7RM1$Bcm{_I3f9GK{VO4l_%P z%WC0CPRm=V2stgU<+SlbC9 z8Ur8J51YkL0eSpW0&d#Pbl{)@h^+y8QU z&)ZlSn)~w!vuXhG2?Om|8{Q+e?lD2#tA54=RIVQP;$pgsDxczd@Tb-v!G?Av0`jTn z$o5%&20t}5cV8kK-C>|GwP2Wn^$jyVSA`mU0!1I{3QxRG{iW$eyp8I<^lOy)Z!j|; z_3;@x4YVj&ig^bAciWJ+riM6T%&A9ypX5P*`qcv_)7AO78+>MJ?prp2!l)jd&-_7T zj&JNg0hgkfCwvZ36Y5WL-2p+j=85VbwKY#vKkGH;^tCnDS)Yyv)l+TOx{(XjFSJ>| zYtu$n6ZJS*!;oc@AqNoDt$=hOmfZ>8T{(hAdvCE~rkleOxD-g0ATQqns=ZBl0 z%OQmc6A;OsPDieD_0(XPF|t(Y@Hk(a;mMe)&^eljC880XFKRf5&!VLob_TyM)a1}{ zp(!dZF3q1ATx;HE23Udota^q}^@klu+?--b-`AH7q~i75++WH{iR^f9=nU?x(sql?2b9v9vh_&+h_ZLQHj8 zFf}O7O4OFBma{>wto=fiEnT%kh)ThZesv3VwXuow4;($ z+uxp=dzQT?Z9FwBi?0^Ktlte`R%{Z&jExp7WEr%KD?*q}q!4DU09l-@)ol)7 zm602>r!luMmLBWrR`>ubKpZddr`#t2mILC3-q=TM0+nW0~DYy znNr9LrnQvXdyX5V$n3{s-k!)FGCjw3obv(XPsBZ^+(Ng?CC>0Jg%NBzX%`-pGb>@WFsdcxnJf!{!Zh zzAeuT?k?XMI{-xn+~gB#@QH%?J276X9Hnb);_nzKhDt=)0lC*?YPA=`a5D7qeUMMLQxJ z=7({I`onj*x=e@Mc!M(jE~+>MjhHIm#X@!YcIX2Ac-NW1-^%Ihy9~yMW6|4_+25`d z<=ex5AS>S`4S832N*Z!1Xvo_Y4j0R}3x@$o2s>|Q+`b{djxun=JIvE}9?7mgk-gQc zx8*C}kgs`ls91DF;tKDCC7Kq^Q!o784Ex9W{s$~NtRNabIw??&YRK!w-pOq6hnfj4 zLB8VR0{dO!;<1G@p!XOo5ARAdCzRyQ)Uof7pFu=QB&_6#>_N`<3`_-^dQTG%zD53v z_BbE>CVijwN-FX8>W4wRaNwtHociek&e3Y+ZotY&9jzYyvEN!{pytO-aWMs%Giic2 zX^7Ad-zKl*1lilFyei6*N3!MR;VsSe{^j8}H`n`?hi#sv<>Bq-Jve%wJ}KYg^;NL# z;a{M%qXY%Kt+Y|2{j>we;^BWrW#@L_wSVvMFLC+f!!yJG+#HL;cl+te@M@E*hli?v zmk zJorH$z&{PscoXvhQW_`4>&X|N;oP%36+fMdhvZcc0>y7CztO?}%O=yqJ3;A-y|bgM zAY50Kcivchwjlk>Hx^Ht-V`d*6I@moi!;Lm%ma4I5C0SXpWy#n_+OsNhW`cszuUP% zL7rPRP5vj?3*jLZqqn)Q%DLC280oqUGxyu1O5ahwt%2qp<=e`)9m&4$ME3rYkBQM& zzAYVq#U0x^xwANO6<8^GHa*N3;*6}!we@lZwo!;gBUeOm7;@-CxPFLtU9M?KAp<_igFO7mir)tDEj2LE%4Z|KCz22aof za+(Kf-P}s9b@Ace#Zb(PEUao?w5?^^xso-{7kK#>=?{BZM>oqPzRdwDaPn03JfHL?GH-4UxDiR5jTSZrX~F}J z_Crp&^n9cJ6-FFyJm825@s+%F;ecTH4u=S1W8l~OhN%RQ^4nz(4u~W0?J)vEeCOb^ zcww+!eImP1kmi~jaMc)PY^FTVlM=BC{ra4jIGcQ#5z~Y3MMtjY7nitZPd#F4dg5Bo z8|gxE>%!G-7uZ7_{pob!J>4$6=dv#7nAJ8t+MAjlO-9Oj#U`ImEbbCp#k^9ld4o;8 zs@v3P_mwvlXbW4QeFaVac-!Q-azehrCPTJr1Od9y{wr=W(2=lz8OGRXb&`S5!@iFmqt4sYI_gQt40{Z+y{ z^IgiVC6(g+bHqWb%G3Bs^6oP}T=OHA_`QXC@`T88bCP6e$Gy3fH? za;Vy$)wt^(*&(GoGpX@su;~iJkTMu1l7Ez)DU_xG}@82spzs~f!@+u)*VY&&O18GKLbma6U6m|a1Q>ni)zsO+b|hLyQf zvib}aFnB$7snmB|zuA4m97kn&^>dxd(p_6wu?Zldy#r;n2Xj)au}}Xq+B&EnWNY7Z z&;A|}o^&-Bu=%5`Q6k9_gE-MqHkQysLEfWx`my}nzTw3_b9a`&n8aD{0(_-+B@^r`2}?s6cJ zC=Op4qOwdA;6R!Hg=1=reqgbwnIu2p39!jmI-h5taAF3W2VL0}lwyLpUfU08r34<2^Q)l1nK>0vwo zCX3~AD;v(2%hK$n@>(g$@P-&gDNJ>OZlrz%#iQ*#wQgA;{cObFL$; zDU4T0eq4_0)7!a`{El_&1M}=zh5>mb=j{t%(sf`lYj+1XG3=ZiBiR=b;aB_F z<^OUX74f*2O=Ou~pD_p6Zm@2+uLQl=u`pHTi~t`8H)Y7#ks*q;Lw-=~(uGG=%;k}~ zUk8~>$!aI}gyN83r;Uv)?EjHaeP@?Y`AkB^_UrFtvzmjR49nLc&opCGURNHB3At8Y z*Bx_d*mW`NlCkUD;dcWG0@Er9GF6%GR`|?g{^ZivRizW+I`xshyY$-!dQrRR(LTV7 zI)e1K57?#{p+VaRZk!cq+6UN2DB)mOYmxk`^Dvx<*i^j?=Ss1gz|Xrz+pE$&nah$W z;ONnfX`X_ck8n`O9p&Dpnkbm59u;9!hAi0t^v5+ z8MKF39f=7Ucxd0NOcr+cbtcOl8z&3;#>^ zp`D$e@=b|awx}GlbBnpTJprCAF;ES8ON&_(_>s_2WCfbGm|Y_>*sHF)N&<~2)19aoqYfd5S5yytQ6XMt=iR5;JL*m=m5pSUj8xU3 zkR?jIKZCU3UD`}cw-Z%)hyc-_N&8c*?+;7&Nu+kEn*L1I{VDg#hyov-N7u-OM(X*U z#&c)m*~aGNjcM72v5XmelnIOEhU{YFr21G&H6F1CIQ7MBZdC>K6Av3f+>=~4rU;A8 z*{?w^mdPQJiuYJSYZ6Q&6cQiLSyM!aK8ZsD2{KAe&;}vTsWOwLd4|wm$eE6p90m6& zO(CQYYiJ>Th($xw2XhD`oUO;V=PR2R5&rB++SKn3EsCrXXY0na)_YT#LQ z2sJo7;Hw>ogGSv!p<$pXk5^6vW^Sf$InjmLwc;)j?co6<|$9!@JUmf8-c~&u-q40gP`Of>s$w z-#pNoH_s;sr_&^1#@n5Ymr;u?)$j&JfpM-|?3PXrT&ifwkZv@pYM|S5vU!Er=-!ju z(Nk9c`RwU5bI0(#IDTMTXtZsyNwmc##hgTF+bvmX$nkC$Ph#F$lB8JV)imHTt|Hl> zI)C}JdL=-X=2%$R6z;I<#%y|tfLJ}29GXeAdvn;-wtr@)O?!#X^_h8>PnL7z$&!E= zK-k1&am7Qm<@D9yF*YbYiy7%DEjP)c^fZ^rqO>5KBsie0%IYvjxg)xz+MRM>Hrf-` z1EyQ3c6(IP&=ysd!hMJb-vL1-!GPIAcGSS|jV?ZgMwzAW#@`~$!`UK#ES*6_+0cs2 zYC+``A&Asc(nFbX^|sq7E32+^>tsAQ;r7_9`rlk4Dq@L<+{EclVIuas!+&g!&BjtU zmt(1$nd?d*Ibtlb&Oo@tOx=T&M14GC~jAEX6;pXJgzvr7wOkf6!qHEO}s+g4C!~TJIin2 z0hX{;5-_(+cPo6ht48%uXK?2qgCDLmVVCY0ZFh9`9Ad!kDi22YRCMNn={FiAG4ZzO z(hfe_UhZ?-`#!$GGT|QP9VvWHbrO#o#2J0-(Bp0=({^kfhqGj8W~_Gj1sdKZ(e1(% zocv(*42nq&!=zpXTp3USkRa*=d^gu{vj(&_euLN(mc$KWTx&@bQ5qlvSIN^sC54(i z1=Jf-(SdpcQySBODSBh({@8=bMd=_DyL!dRbdYj!@owf4kYZ6`+*I}LDg&#csoT2v z;4}F?`)>$FKyZVGP41P%Io$Bx<0SjiSo82`dU!ZJ1VuJ)tg+%?4%BOmxP50wi;9OG zj~T_F#YQ~L0h7a7E-E0-1kj;L2US?sNT_#}gvOL4G-ibajJtsZuq=^)jf?4SK-WRA zaN{`$WggBE!{~lmo}S;7yq;*7Gn|aaBN`6sdF)b}0{;lAh`zc|tzrABof9yd)ixU> zzeSb^7jId{em`Q%c)57C%$8$ig2^IH$i8`*4L?Nc57 z|C07A#;^8g8z`pNX1Kx7T z8H~zC7jrz&@qs*9`sIRgH(2MgSo(XG7sS+aRvkQ4K%#6na>GH5LN(;vBftZ!Z0&ej6GN5oono=mV;Yie9;B!`&tApMgVfdD!}1T(u=XCVe^9w9)v>oK z?cJWh#IWrgW$soF{|>YCd7%(=09=})@`Pte@#u*R=obz`QcZlKabzAkR5@+d(f59L zJ~#B8`HY;=ozFJEkx-&<200Xd4cVc~HOfi$;RaI2wlff}4z_MF=Odz6x5v(WjcYSX zipX3vJ)ri8A|xmfQ;-0xcIj|mkmA-xD(xcbBX>2UAHCrq3gB^$D2U(MHUR+t6^<#VHjHI z3?dVz9>)nZNm?jsX7y<2nf7Ki)6aCCX+uRwtezM@LlQ(Ot+mypmAW<^8tn)Go3_~Nx2N=*Ib&`MY>L`GirKvafmzC2b=6zSMHx4T>T{I%J{Y#=CW}Z6-`8D^qreLU&7WjLsf6TPvN+S>jL*|-k8MTZX14#=2M>bj((Df!kH?)zUqa95H zVjVhLm?~OLEO4V41m{|q7SN*{ptQ7)t)kc{=+x5WIzgwQHm=F96Le~Y3dCr@G>roXEVKLBA@887g0 z)hSfZlU3+8=)Wq$wU2NHF|+uQX49&SceQ$D{GeQA5!7R*SK017Tr_zvYltN8M#vyJ zmm|E8o+(@O<61|os9&!bGhJS9?8H7v_&Q!seXbhM z^8oSYrt^jQNcjs)tA7;9p{G zjQ!#;( z{hFeY!zg)}v#P)1mXQ>0Th)$fN@U{v9-K#`!fA%adZj+^7(CB3vd!dr*}d;n9;`t~ z=?Dj;l(8PD%}Wenz)S|fq!AzLj%UtWk)ge3x`_$xJxp&^4xXlVmWF=}ILHIFJ zj)CO?D`F|A!9GXsq(pU}LwuBkAwEpP5U-ISAgq$4@x6hCamKSzSzRS>C&NBzcQYA? zkUE|W`?U0QaAIHe6db986#GIB?_kBgkkmV9u@9$EKWXuT!^TczKS0BnqVGrIF?xaG zF_E!#hbD460FGxu7yAZq+urzD1nR8H!jtBCee#pOJ|rCXm`Dt^*RB_QU*2^LCJhSF z-KK}v3y4*%b2a9gt9QX%;+Dh*N*vNd^`sOhem}#o^xbht;&LOuQ#`_MqPis1^XU74l(sXs9^FZcT z&!q$Qs3C0!>}$h24mh+8C$<9Z6gv3<$gYzgM~)0rKAKE$O(Db8Y$}zjm9{csCx&T# zFh5x58F;vEOvf`Ymed0Vt!Lm$T{525jc4F&^Jt@I;I*}9;2IQj2mfdIk4`>ROHL=z zWy2xY+YpP-;g`RJT)Z?kjC5@%G2^lOGn<;niF~{jWWz#HzBNr}ZdX#6gSRs0^_CMg zdAbA^>Km_j2OY)7YAH;{hDRM;116w|?@uOoXvB@_DoA>7u6n-3B1&54ERm1xTwIRr zT-+o(7q~NV>%uBj>pGj!I7__6o7P#PPh(zSqD;{Z2~EdaVo6PivBc_ITf0c6gOg=i z7;b7MN2+jvS@XtqEMenvP|{`X3q^UY3XTf0l>1tw9?H|+b#0X+VsPZp=~0faEbHEU zlU94LRaCiw2Yjsq>6^&J#@4ZLSyM$pf7y2vFpCsPhE*i6^WZHD4)H zK964UH068!dA3NJ#fLwrRwqVGe3B&V7DM2uN99LV9nBz>|%j&U?~>J z1aLjymcTvhhE%25Zgs8@e1wWIP$S)TMW!Vgc;Bqxz>*?UBVosPPpfdsDwhOKc}=2| zqwkT71Ppl;=9|&`( zdI@6OW~XgA{>;`*v)|vg`FrE4?jCd>C3#61mftUQ#xjjly}}VaNMm`ilP8V$ljA1> z|8Yl4AfUZ8DTiBUNYQsUI|{&KB+tL=uFuQ49XT6u)Kdz@d%kh>I|wRyHwfADT3 z!&ui-ELdABO6Dxd3Oy%TVoH!KA~li>m?tD`C#oJo+C%>4E*tH@BEm&~v~RdQ$Ran> zqlIlnmSb>n#e|$LzE0quRgifK0s!GHCn3#!B=eL_GEMO$26|4@b04xLopx%v>a(O$&M!z>0|rdz$r?Dbp2A(j zhCSwi1P5Nfr1cZ!ETGPU%%{8zB3L{Ya48e843S9J36Yq^I*^MQ2p&Q3m(-qKg!iOu)l04V z)NSN3_e)Ju-H^JrQBkMWC?e%G`Z)%(L${EsJd_hwV2-&P`b9Wctzy-U1&!E>yP}O( z`zC9iTA2w6Ej7XBp(cVWnwkiQPbq>BWm}w&z?0FL8Uq-!YY+lQn6MwttG_K)ZnyHs z#Z1!AAjX?Mrdt5%qdAC8m)Gzh7%QeaOsW&%YGOukxmki9%8g0^Z1Qi|& z5KZkjvjr*&T_w4K>H{sJ!f8IJtEVx*;2MBaV{f7i<#mI9)Z>Q+A%X$wQACwog13a~ z%OmDrqx!#aD14MxaEhg{Y$VpE8JP!ioaOUB;$z+>h&9>@FnyjZ@og~eA zJ#~_9L6DJswv;qKk_63IhMpc7IuCh$gQwFDp4EaT4c5VSPC+wIf@b67ZMS<+@FZvA zV>4b?MUX7hy6UxQUG-YYiE?I;p}1@0%tjj58#bmK`&@z3{E91`bIA_ojG3snqGH*} z!mv=B z?A?;2D~%yi%CcH{%;!NeoLv}v0^x@&s`3IpOd<^@QIH{-2Mb7K)g+5hND@y_zU$L) zl%!u4D4IMRxhl`a5=I$SN`B6c)SqkF&h_~WsWKJ3a^PL&)uxqJfxakF-KE_m~Qus2q0Qiz(szTQe`E>ZxM<0&WeYnal$)`!= z(M^gv zaAfeJbq(Gd0>-$}d#HY&=EuWSjzUKg2XG&z?BHoU@Pwiex5DFMl~r>_wj>Fd7ZSfE z?n2yRC0&>o3Fbv&>&P?095GUs!Lqf2G%c>V>fxF<&C5V+u|0f6rG#{?#z9bT?NF~g z*85<>;z^S*P`PzF*@)^?JF2~;X3^b;mv?GqCieKDbbN@ZqAoeW|7Q1658iSNrD z8^!0X%*e10ZXml!Nm_&L1F?FVr0KdQGmVLRqhmB*-WZi6Y04Tl+bWc{JW`eiJ6do4 z=qBUD1+|aE4vT38YpB|~iIOU;b{|0mkAN`|iBcS*4Gsv_Nd<_+Y~2SzO;N#+eZ4>D z-ut~Hjch46$+i!1H22=~J@?#mKIilMe9q^{`Hu@lv*(j+0?y30?E7v1CGGaLX1HAO zj=HhpHSx|UTaPM~e~<5|2Z%P?H`ZdanyU0hw9S(4YbO^Dfjv4k$gP)-M1YfG2)R&2 zP6wO_7N$l38|ToxpAa^FjzL8d)W|_?mWEN@ zLWN)W1)W;wPyJ4@S$d+f9dtsf--MJlWqQ+ArpOOhEXM&3hhkPEGXMGrAfLf*BloV( zjZde1Ovz_flt`)k^%W&4CBLzvq|R7mtemfw^8CgAbK<2>{$9U;kKqUPUs+MYLZ5$m zMTx?({&+>nASM5KMai%ig8oHOrsG6>#}C7cqsaf+mp=2a8@o3kAN;T%qTb?Z2Har4 zc5rpA%|3LU&NVEa@VeNsP8zQw{0g+;R?#Lxz<@^tjR`Boqgldq?1P&GsXJy7-Oth< zh*|_H>vTNcXEi40AM3=fcVJ_DDcTJZgE}M%kW5r0k3WA7alMXr{Ap%BtS7&Ahgp!m zW(5gM!&NupkEuOdX}_X+g`{*`;KV|-o*qD#;;dVv-^EkC+lU`;A}l~&==>F|+%fY& z2RDA?w)2dGwKrf&pcwPmT!QnJ4OwnX_HbKN0dKQXU?<_I7&6gx+r8Ok20|^!Ql9nU z&C8qx9XLA1^lvdPinJy6yjDF%ixzdH(+7j%#vP`y^@IaNS?_n7OnfI`aI_vl!uJ$mZhYAB>rHqtUv5}U)@PC8*9eIxDI-*7hx2nVWfMD$$qBz~_1kHwc3y#;tkA*{!gATXN+otIue?SbKFCm{ zD=VwxlvgUKVs-4CIwDoszYJyiZ}Cs7;Kxav;GgBruP0A&UO-E%5%BlFjQNpgAYM6n!qT;p7YoqB z){az>7vbKPUP=|nuX^5IO@K^Dzu)mMb1t!%d1$n>-wLZuzJl_bm@x>$^GR>O13Df}*kSaJI}7 zs!DAjT|n9Tgbf!4j_7r$0O$)*w~`C2FNIa_oE@SN&Wf=(0cSmS>Q~KpsfEO81-}fc z7}M$wdj)2oxP0=*%(AIbRIbvGnOBPt49Ksnbr@!Bp$%F<6<;D4fdV34iUMK?DA-XJ z5Nx5J_KR~KjqwyK%w{)%_G3yehrcJd_^h#0R#5re2`i{{>6jH%x_#6N`a_djkk1{# z)Uzqmq^~bcr#FYyIzEOSopVhbURD0NpOsbdav-Q#9E$D+10AI8deA;C4UDN&L)PKtZ=-qJ^CA(yDvoIEv&f6`7njI0< zOc_Sp?QYa`N%(+t$qzq|cAWYP=V4eO@lHjT46M-{fb_>iJkl?h z$?7ykh4hoWNAlT1D^n+NFW<3-AhgM)-ccD*NINVZAtv&#`$>AjEhL|#XN@NaJAZmJ zPZ!E385%E@Jhapyx>`6l;B0+hsCm7>Ar8cV!*Rl^1LxzvW57A`+uv~D2uyDraM&7Y z!1*hN)3{#ffNlnz;cG$XuU^FrN&UHRJalr^=?y|1e1{c2^37r%@(?0`;A;N&M2s{3 zFn|q5KmMdZJmZ(kg3pJ7%VohiUg>^Ot8W!GbzLsguBoOXBm;F?=z|gL`l9GcHT5=H zhHx{|gJiQZ^Kr1OMO9r3YE@KK#B(t4*P3#x3`7^uue#Li?`U4lAz(?!On0-Wg1qZp z_pRm*;A-xGZ!vAoTmr}ps^i2~@J5-OtT*Dmg?HIlrkG;!Uqy5jty$z7+p=LzMUjG( zQO5~@cM8zhp6tu5df2NBb=H+8^o0>E22~Oy$Js1pS_~qs4Q|H?xY&pmgS3ks0n}B0 z1x%ERo&-=4g3{9$cPU!V_Qh*AKNGJF@%WmZ>)nTrxhSun?IAVbj>{mlNLreuvZD11 zgHYQ8{E^Zi6leq)CFT?$+{o7n6e}XcE1*Dg|9XJJrV~rKH*6EyQ(BmwX>4JZ!>vuB zOz(X_2&=^M`2mEkVtlJJVqlzc-TUOn6|kq7f8Lv=7Cy6Sp&2+~J|IL&Y_O~*qtYP= zd0J3z`^%C%lmT$0S0P}gAN)3_hj*Yls#)-4xJ+)7Siw40D>)kWhqb($iFhHG{)RA6W*XZ90d z+_}0iwWj1h4yQIN9eA{bnM!3tgSawe`wf?LgNlo3Ji}mC!?>>p^{v>YJxDORcW6tA1nsv5jCcognSx#qOgH@PgvUO$BC@Pqr zqed%$OS=_CD-0!=$tXm@)@)q^>wz?$`O=tVQwysD5v5nj8v?(I$$U0OK+q>SlMx}G zNO`ni5|b21Yy*u+kiu`6%NO=%1^FUqt8OyAJvqe3&d`MwQV%^HOS0Mv1r7FU#!C#R zW%_oNwOJG|f%P=EUF28}q@I7u3T`*G+-f{&1@rxaR}r>dR!DL_RqQu9(H|+^oUWVZ zcUW|KRu5po3k+XL*;`!X2r_|*qZE<15dEMHjJk4L^#EgEj0$93t@ji{Rt$|WMkt`? zFVL4_?^I7l8dWi1D)2H_jtyHpmNaalcb84T^(SP>YtH4IW8tqjG*BE>ww5ZI!>Oz2 zWed1xHEtwCWUMt)eu8~qV1ht_^|RJ&`4O)DeRyllm{(2-oLXhQMW$txGN!OB!%Xe5 z#Y|hu$}%i^W^}E8p;Csy%apFwEEe_L+BqW3wx|2y9c#_Bk8Ippb6P7;$675g<-R-~ zE@7EX2uRjxoE~_SiYG!oT;bPT>kso(xHQ*l8LBkU*J|;pG~7`Gc`B^JwdPJ(n|mki zBQge+SEJ~%siJFhG_o4lg476zW(Amo6a-XM0i(nTASaS;wSSfj`D^X$J)luKoA@|g z0cPlB#k`!d5wC}#!B6Z#0y&T+RbClwe`DZu|gDx9=m0}q9Py?kX}1wg(m zK*==Vmj$Sy2LG}^RQ)ChC#P!b(kXMAw9R{A^HbKA_6!&+os#!rt(odzg~sINy;y7J zdQl?p#ac7jixRPpH$l6CsJ$fCLEgcBfmp|zkPbx+_a?hLWI_5;Gv>Jy8n+jn{5oM^1h0cDPl*xjh z+$R6FxudL_%L&0AU{FRQ_JF!%8W^c{HXxUvJ<7KhB{@-O0z4i56Oy0c)8G3f;CV9a3*)nLt`P0Qt2 zanxb5n9H%^%!3Pp;4^)s8Oxo8J91}XM51p7!7eTVmX_u84R>s3%S-8GQObc_FM=HqB?y;Z`Dr$l6VaboaZM3Gl zEDhNf#C5xsJ33f34D^y)XQt>dIwimTO6rDfjY*V;_s&2K+$z9k&FLy&YXbV)Py(e;8n`D2o%zig5h^$`b2@__%~o)eK3NarI@r3hRRGpaiw@IV7xUPkl*mN zrW|;RZjg7;zMxs|x32l^x2&06rPUwI8wG3njn=7qf`0U;=@d_WnpozkShy{Ke@sTy zxE$xhq73!u6X4~2tbHyzNr7RxatLgI2?c33ELTn;2?#NmGu?Dvd&2DL0?e!yZjW(0 z6K=)g^bLd*e5BkMGAtp*Np_Xi5mE;7@^eUe8&_Gt_c>{*@{0A4(d9yYSd5)2;6eEg zERvGSC}hz)`le`gQQvAriQOkoLYN|>+?MSx_)kF24%=vQ^cn@zK+oZNl!tOX%e|y|f7^DI@Q7shJE*@mTRW=BGa@B_Wg7wxoxg=S*lDf zOX5wDcLN~*I=L(b4>EPma>4Kv&hi9$7#$G54;|zXng>E4V1J%?2LCD$0TuSJK4t7Y zgdJhhkB0!^_rRElXwq@>gK;DnAxrtXQL!v5;}vFF$rqC6*0%hEt@i&<1}Jw3-8`*m zU!!(C8ZBEhhPd`svrhS~wJpnnc#;9e*W;DpjQNGIu_3I%>71dPP2K)ivg5HAtp3A?0tL#hGW zAp1;VFot!A!~6$@#=HT;F2s&;lRkJEZVq1ih@yx!QdslVBbAp8>J2`I@&;_UV%&-= zeC@H@iLOR-W>(Nd4udPk4rG^=k_EN+9AOqCD~$(?aunJX#=`}QWMWi|hnFaliQx)O zm=$!26xC3PD8TGR#aR)cfZ^LyRKt$)#oX#R%i5ngGS(XoND&L*Lwvm)C~#H~dtjmfQMfpv_-7GE_h6?3dG2m20?+#Cc~a_+Dp#9xC?WdR(aSxsSnig5_?er$1aS@*nw!?*pQ}LW}Wdl)`38lRRyNcr#$Ax>v!HVQn zI^h0Rj;7<%DGTN?F03vxzKl!PD)OU@OVKLwqu5t)WGJE-@1-kJrHtE>cfpp%Er(5! z?qFPjcdlN3Rj#{&o3$84Ajl!@q5w_!ORP^b=cJY7C`FEy%CTwIMFTi8fENk;Dd(V? z9ED_mtOnR74Yx*DtBujt{neC5X1Wg6^=H~#R09-M&>_#WO z@kBM!2Q;acsHT9UC8{X^XNhVGn7&4$nz64VSkc+Pd0=gPQ^C6C>j+l1sD1OmN|GZe z2M^y3q*Z$3u+T(N;t;l~ z?HeMXXnJOadQ>P%$Yj>w|H8IyO~VX=Bht>@&AT=&HRxgObu*t^HY{sVPD|}rC9Sc< zvF+TWu!c%H6nHiX4IG-g+RoE40T~$Lhl?#h ze9nBNmV%drM8O0n5>Y1jiclGq$pqJa8#Fr?p*UF7(4ch4=}Oq@pfpVTe9p25Sv%#E zGQbA4D{+Pk9dqGn8g-XkMr;vbh*?{%h-vdhN9>j$f<5eiRYEKUb4*Li#r0(R7`+cU z=ZOq`2!P3Ri^if6Wr+;lYrzHKdcBZIf^(u7Ak$zgCy=QmVNe#Q#2~|tb+oP~kV#$( zGKG*_0Ts4vR-nRD0Tqp+A0(Do9E(!c79d*F{Zz^WnmZ?3OnYemGIOlOFZwYp#eu&# zp1Yr>+HCT?wqo7ScUjPTM+Hm&gGoxw$lt(oU`ZDqp=2$SCFLa@tB9;pcKlA}k@R#BQKF-KBE_M2fIed*d zBjUm4EHW=Nd+W$d-jMRVAoFDa&%Dxt9M#~)@2R2#k4Kz7B%3)(?yuJ%^|7LYD^`{h}o=z z-}oL_(2TLfoaj#Glh$*4Y5NThJ} z;veIuh_gDN7^*hLe{9hh;T_zfTHsmy zV!ps5-%}fFKsIR`WWfXAyBX>^(o2C=Rq|uku(CGfyx2Sf>8bvJ&ZHbGLL;`NCyQ|c zTZ&Vd9kM|)*5ShZwYcDCt06FcGNef zv@;5?BD_gsF+sTYJ7`2ubYHk?!~{xz@|Ev z1yF&xbwYu87AAX%d=2t1MfjH@O0MD@wywcL~WBNc)5ocwb*4 zc%_EPmqf*~wPH^=ZH>$}DVbvaS8EP#?tdgSyd{g=_v!hchF@5<)Amw6`S~Xa7O=Edx6b(lzO69*pPzV{oL^*Ql z>lPPh3%Qp4Rsie%PVk?STo`^TcTxduf7S|E0ti^zQfwwQ@C_CPEO1kRXD}~d8njKL zFvznE9cVrOCfH!IM6`}$p`vBUI0zx(J3U0g!%B=aBGI%?ZrSkl{(SZC#P}?m?z)go zm&fTI91%$g#X)I6W!kyin&Q_<7voF=m`xb0WDlg~%urMU^r8UdQ!wHpXPnED8n$y( z(CXw=;{+CMJ$NshiCHsm`%`78)`-@kNIfVkjt!F3HALH`+g2~qwr^<2X;_WE40IC5 z4dl8>LiHvDHgz1+X=Q8y%rhk^PZ|0{$doip1!kLiG{$U}mZEeOdb*GNB3$M{IWDuT zdU8?fM`zR8^cSLXz&5WJPDZOG@?8U|qrpeuZG9CBIUKRUA~keBfG(CF z(Qe9veO6cjf|+XJ^wpxkxj8;&YKPEOiVK6A;lh)1*?kOpQF?I{X5T|d#S&q}T&G%_ zPHc%#({JhUB?KiMgJ>L59={{G0Hz~t%xiUSBUY^+)QJ0vAqXDDW* z(hXBfsExodK$ZAv{!W-Vr~6nV!hpAGQ=^zWR;;rS^TKj)3Lgf)t;HPhq(n=`C3>uKU&)@dT(p8gF|G=O0!o<$z*%IjF{lwSs1;`bK@#Suf-J$W z2;V`z@y{4kvG`)lsaUUJTz$r5hn9Pv<5ju*^|NJfHVz@kXlRZhuel#$R=g|2vBn^ zEA4o>4jBZSoNz76#M~-UY=Frv^Y6Bb6dP8enD|x^aBC%sS8o+zxmKcpby_R^A+#C6 zL~^OqvL(1;ovvj|aD{iWWlM0yY7x-ly<#D$Weaizz5peDD@;-w*E0yJe-spM*(G;z z3l(YMlbDx@ECxR#{^178Mx+NJGc0?Iw$pT7=RSmFi%YS`F(TiDQ6Y{cu{@-$+OZwvS%f}DKw&X zxv6acC8=HXTCQK*gtE9Q<071+99L0eDCdm%w}Ih`ulojSps98GmU*kfNbDeIVt>Ol ziv&?lQsz_&7%0hWDg`YSesl)fo?yiPS$s(g@i(WWYT2|@sTN1q>vXYwGDY$^K8@% zQe>0tDmZJt($|Yngi8J$^FN@G`=dR%21NiOev}+|GPzSeHD$r|05Z)bSN zU^0OXa5g0EO8e75M4@1;$TToQ!wyhTlOE;`?Rq-!fEI5;Qr_`{K_v>DF&KmZp%b3F zQh}L$yv4RD)SqLsh9xKiYPe?3$6>RM1-|rRwwUI6?k&Io;d9Fzta-n?r4-mwe_mjz z?G|-Yj9NX5B*Rf)M-;nCLGWc(3SfQsGAjl0G+3V@Bh*hk3;yEgi>+zbcDok1Z7$bBO}a@~Uyy)x zuON=1YiMb~J#Z5OhMs5{t0)LvD+(k~Thfv)#$2DsQ$f7QgJ1fM&(mdvegS)bgeUIU zK;fU^w)d3U%x_Z6>~Mev~&og_1*p@Dx=*_Cxjf`3Ja8`_`^n9?K!P(LY@&kwPiWB2Q$50kT(Y7TTz|3phOQVAd3yhBo@6lr|^@pym6=C`%{< zq-EI&$^eoFsAU;0%$@)OSc@_S1u)GeNUzX@4S@O;iry%R%U@AWQG&>&1OS#L$XrSQ zU|E9Dr33($B}nUnLN?0WFKB0@Bz-|u8>I&nCd@`@355l-QPKT{0Yl5QU$~n#Y6Nny zJ?!jOE~PHFaQP0GcM|vv7~Fq^NiG-Gyk2a_V!;(J;?+fEsNYN1|VrH-%$AUj-1=FwlMHLD>?(DaM&oGQp5 zk*0&cM_x4sO@pD|7z?N`JWIw(eQ7!vJL;nJmKGPZ7&IH@9gifuQ1BgR$w+reWcNtJ zEcDTu**y_pD2MNAX7m^=0s1Z$t7jrOjj8=V1YcHOlT6^LZ;i$g*~tU68$bG1Tl;R` z_hil#x4CvXGs;jqBO1`MboWar;N351c^REh3)X7PR9_ZB=E$wEUtw8ozf%fv6uCCz zi*9pL{D(H<{$(FM9$tgJE*3#v2cX>_AcP$-A*81P3tyXywr!7Mx;L;uJBb8%+iyQG z7e(87Mlm+kPAak*w+EYxwy}2hF%^U0cI6nps4@J8#sIZkV+@n4k3k^s?y|P15QjBCW7~l!EF<$ZWV4+bZVfL?Kg35!|lk!+GLAPLn z8ts}F4ob8+E=|w{Fff>)!H`nbEx`ocg8q*t&V2TgV1jPZ*J~N?*jHei;_A6YWf&~n zE(h{6sgQZ)U}{F?$ODFG8Y*6Q(FO{+lr~CrAcjmRTk2qgoU#;i&q}H;tgRUj;kLzF zn3!;ZpmgG3Gj;;!Va=fXGgpIAPFomLwgqz1aUFxAr|bPMklJRES|n1V(>bYa1_=7} z=0FfUc6#eEZZ`)_ZWMjvOs;PLj@4_&MeS~-w%Z)SA1%y-_c+@oC#h&_B-=Zhi{k8i z=?Y0|C}?swDx%8X#od72?avz~^aA;VM1-alhkj>^EY<5LvP4%5zVU&cXqYm;)l_237-Wt9r!CpLxK7> zyLiA?&aMog*O^@jpli);qcXcS&2A?ju4xrFFuUYM-vJsjyR0j&I@U)VWI~#&M|Hfw zAjsMMpu*~Ab(MSJzizZ1cwlIh(I7Hco9EVQ^GrbRHxI2fM}G|}&WC#=RE+I<{b>CL zGA%>v#@9I99IY8{Obgeh;sUeleNC+*LQ3teQnt$t+JdYto69APQ#ETN0|~k`o${ff z^OP^=kdY~C^6JzJNslZthvrZR2Q^X+wJ^ja78?`m zjb>|Lu&otPT0%rf)xwBM_GGA`t`-74^c5OM%}_U-!k174uIj7nMGp;4g}zR&)>laV zi4@WI+TWtq7t+oYK|bOQQb6Ad1Q=7UR}^DfbB!^zJ43@G-BA)ZNIOw%u{27#OcK;9 zML$?MK~4$MM~aU5~+0r}D$(stO206uWj!j%X@#F^47f)|oRtgPPN&oD1f zF$xizBX9!Wu1_P&%(JycUZ-MD?iRUq3M+OCihwfu5If*GpMAz{ksr0i1=(KgT^8AwDHy zhvI4g1{|j$k#4j~A`q4!*pfFr%nIpIC^SD5@9X))%c5p9X zSP!Hd-Ek|@E_n5m@1=(h@Ez^Jmvp-^a0(xd&6*u(1-=#MnVIw%~wf5cTz-*>9F;M&qxGX1|$SiD&UO z@C9 z!g&Tc;^8_{V4Xi)-d+A=fs@CIGG4h(aidLWqCupFJ_LCDIV4T@*CaK{R$fo|tkTNi zvXzw{3|4U1*F@R4Fj+d!7JU_zgAxxCxCX}+=XG*D6b=OHb$VM?cZXm_;OJ`>P0E=d z36wh~svZd>yW*|HI7V!hw&G%7O&%a|6$ zsiX39$b(V0E?m(%c_^^r+HN7V&a9|)$V0wj2p^YM+=Fx2AsQ4h*eCJ z;6N$;rRlCvf-90C<-Qa90{!XWUpGf2tPtJ`(PQ~lm{fJ+!K8RRxXR+ zo_LotV;6oUV|PEV^PZOY5E!|8qK2;2i{zG2`MvVin=Pxw;&c`kfGwNy%i6wcqUJXu z0OeGV^bQ_RI+r^tkdG#2hLBv%g$R|~59ky(muF(*PAZEShgM=H zAYgEs<=93LD_~*gELxf%fekn;x;6Vm1!z>m8gyBJQEW-f$^yi&@Gm?|Gk-(dL&G=s zx}5ExC#%C<6@-;waU78uD-&9c$O!%Y@Rh@RgZpFDhBzm}xRR?@$)iB#;Yvc=VL^4D zVhf|Pt{$41nuEh3;15v%|dTsCThq6Um zdkw3)J>ya<*M58EWX)lyB^9m7+J1*2mw#UCk~NoqR|}U-mw!-eo7%TwU)ScCU!KK&*S^)piJ-BRvAt$9eSlmpY;>tP7T9ugo_n7zM9XWrLPIBXrOs(xpM8Fr+f#Yb zvHW_JD?gs!h)6l9vZHG`rWTbaMq6;i1ToLKkBc8qYz9@KcXW-L4tf+Vf6t=?%GlevCZn)DP5=7xN7gNy&99zm|FB1mg5`+ zaZ$hmlocdJL7Eq&MFD|PRs)}SXrrDN)Qf^fUO+%BDw#&ABxase5O_(RVrv2{+rG@| zvm!Jb{_wwgF7jh~VpkZPe6$v!qtx?#Og6T1jQ2J(8D58+nSx{WEmR!UXElN64hXa;-X% zYb5LOWIb$Us07jvm*NCn1MSfI-96vH*g@0HTRVPrYtoHEV~bOHW7f=7jm#$BFG{47 z@21xVP%8pNc@e=oQKrv@2I@IYD9FKj<0JpMsJk|R%pz1GXY7>*4#(nBq0{S8+*OIV zKn_wCr>eWeG~p#Cj~g)Qb6SemobEcvAGkEYmc#-)b2KJ*noVnS#k3L#Ytt(5fZYb+ zQ&+=83F=A!OMHBP0e06#*-%_)eur*uZzCIWFqf=KPN2 z2f0zge8cYUr-3gKpom^B4+qo$!@KWh$_WVt9XgnMygru@7OHU|DC?g60wo>@V>Dfl zXxthrVZs{gIHAtH@qj#9k!9M{V%+^4M7;{wixFNDt*OTqLIi48;KM&L&hY(#nnftW zQT4oMBMIg2P`P%)+z4fsIC#Yu!9Y4i{_D{8+X|MlLw*j*?eQVnGCw z-1$1q>`*g1teKr^=1$X47}1e^J=sCrJ-siq(fv@2`ZgU@Ro;s2Eh;SSdn=J{R+G22 z5Wmg*;_ZHCFsj||JCbFrboUl4a9wv`e(QQCrnas-vCubTwd_O-*v7*A3?X^a8E{dX z4lBi3@x;OICN)GyVb`f&9L0U3MbS?s=H12E?wDRhB=aG3Y@S;^nZdizrN@;VVVuQn zelSJVlyAjxGI|Ss)+^Kwb=iHqT3wBt3ai?eHaivjlFt(qU~XtFG|Mq3yPZGfL4Hm1 zKw-7dDfob4OCPFjPi_A^nsWEkNw!n3ZIk12r-Chk_9<{K+@0L~Inz%<3I7+1%84e{VRGp z_u1vB`v>yimq>_vBgaCwBUqV0noh4Y$#e6k=p!R6FtO;aHZir#`(&sUs|T`c-pfeB zFMu_tAh{U$u67jhMqCu*n`jr5-Nla}FGn0{=Nq<{ zd^-znof2!rkN38)RTPSf9Kp=m5KN&?)!Y)+wI0oy=`P1Q9X{5r5sM>O(vhCVd6KC= z?h;){YrzNK_nrf|UsX>o4bl&WCsp7@UD%AE)>+KL_1H6~0LOIrgjtB3HC%osH2Hot zsRb~-O*34ylaDQSafr+c11EGujYG^VPF0E7=!&hY+9$UPG3T!YVx}(su+{3mE-`CI zUaxK3j?ddi)s38(orqb>WVyBLM9f+y%Zb@3*@O}E5XFI*2?BM2nAznUsO)Q}Wgo~= z4k73>&@z%IkcSu6QVdytr>>Co!@5G&cZcfPeY!%{-YUZPBNZ&|3$E%Vl62dKhPS%6 zJ(j&qKRvyV8CKj0UB3lK@y-bUpToxt{>jBW#RU&DsfOfWCVLP5WfmG^+{=+BDkUN+ zpY)WLWVavL2NeWS=~C2*=}%ohyU|9dkZ%^k*#-HmzVZs`%22R zir=Y94^zqW?`|sIN5wfwvi)vffQ;fCcPc62t=gc{;zC~|9o}Od>9xC$Ba?QC@K}3# z`BsYM?yZA}CmR-Pk@_!xn>^oNy7hqnl@RTfx_2x@7r#v}ZjE|AdH|T=L|=&hfHJ?7 zX~Qn=nvdX1*?*rq{E=SV{htNVvopBSbQTV^@Hn&nG2l<7`BzTk(oOyItl~Css!)iJ zzmR%GB{_yqv6OF}4*jk6bZhj*Tj2t!|BCha-_v8va)n2wo&|?5tH%(bdYO+v{bX6Y z?B0;a5e$OKH4cJQy7!_MOhU(|jP}bu0oU{FJ-J4o{3YwlOSjtYFQi`TFI&l_O35Ny zCMmC!9JZ3h+xl-US;^r_$q_4As+1hHk|X^Rsc{!><>*aK%oEAZ*kDl19!n`-yw%`w zB^>^Cn5GpFcz(Sg@InF5vplB$_~wEkp!=|5vzZNnnzy4>)z7_v9KCN;|> z4%>%LYz|theRrEaL5N^8j`TmRW`PiQB**8uo;{}(l4IP;%XX40g%?<*3NFP94fzzI zTS~ z?|qbCA6tk%rY_*XeB58qqZ;C|@pxI`qw_wM=r?3OHt%hzq1wVn%U6~|3*Pc2RIB{k zP-V^I>=a)0BmG_!{o=E=cK0T^;Tb3yr=&4x$Ph}yW&}Mp8%lR2nipWo+M1+Zm~?gt z>B+W%M1oTT_!!`G*pPC=V8hj5qZAxDY#QaztyhheuxYFg8)S7KHvJY1HulODu<2JZ z*fjhK*sSEPXvp#rYUKtru&%$M{9~e700Xq=>VrOM6aC2SCa(SDXXPuI#Gq6Xlb%=kC z+VZVisGa=&T3<=|-Gpa`!No|4fianBtsziM17PWmejxj@Y=6K$EsILny~sMb38Bbm zqCK!~A^J%;jPXNbH6NgfC1pG3{GS;}taDv>Z^IY<`JbeEe4dvi09 zT)FEG_BPE#Zj-;TMzbpUCx(D*{b1rYIqsW1zWFC>sB(UdgzF}MX-xsBO%h4R*HMw{ zhjraFm%OxQdwP!gbIB`fvUlnF>KX>NiK80FNN2+J!Ws-Xt{2y!6>jp!h9yon`NLxe z{4s?dPwBf2aA}i&s(zsR5qjd6ng_Zc)eXTb=BPLLZc^0AG~Xqe$s`w|^{Td*XPR<*#P(jZJ>Be&9a1w1$sDt1irxBhwF;>76lU;CrdK7hivg2XXIb zc*nIDq7Uf`ZnIEoAebg#9!@f+y~(|4F$uJBn`1>Ze_NMEU*(;I7$x5Om6R=*d{8rk))J{j}2Dky;G8%_f&gNc|AwL!+ZR^!ZZlBIO37{AL`AkfGkeUgd;(fg^#sh5Zx0BwktUl0 z9(X+D#c0XnK|uZi{%A{0HU*5_ycmXHp?B%Z{DWj5(cAPo!NNo#Kqe93ATA@k}GK(WHX?P z>XZT;J8lZJnBTjhH$|cnaxUPdaq|F_EGZEWQ+v!n8)Ss$W^>KmH3Vyy?K*t1?zV7T zsv4zo(~WEMfbmj$I>-;*Pv8hdUMu2?hGonQLeAo^9nBW4>%O^ zgPm-6U`I#>VLt}DL4)0dV26qB27z5uuxl2u+fu@=UcgRYtUDdbki(9&O%>SjbT#ZO zCVUGxTEdQ21iQfp*$=4}39<&cO4xy~f;tFc4uAn(#7=5UYPTRZz~B@=t;Op;dCc>4 z^ym7-!igXy>FBo;*Z6I4#c#AN2H+YRRDgFwECAxiDJ4%v;016&f=MNzn_V_;HDP23 zU*TxvTtFG3odwGvl3N7^kbn^0BIYX2)&0k&Z;Ge(d%M7R*;KwxX74&TDvA`Xi61w* z|E%Cl*3<5f#{n;%9hToj0VQ1EXo2q}63~tAkysdMEp-3);*Pfdxq1S(kGQ~+yZ=@a z@9B=D#bVej!$-s-8{#I&obHpx;k1c|UvT_{k3Yr9jbg==EnyvtKSaDR;G)qOhN1W( zCh;~Lf|clQQZoe#TOQ}|a}dTGtoW`248ial zXR)@4@$D&X!k)6J;5&~p+Sh108`lUCt%p0Dq|xxlN@yMxdlOWf0z(+>$!4LMX(CRd zdh}G~WM1`@RaMC{V#T0*rYt%#EN;$k&kW1`gsp>qqQh6f$LY|l&~O@DG7yM6!Mu1O z=hRBQYMqqNV_JP)@nS%lpE9I5u}={x+AEHDYI{bllw5=;O-Qi()n?)VtYRxGxvAL!?*^(3=&p zzHGwNv>(0D(w_mV*8LYTR~_hb&F+?+t%Z)F0p>kDQS|gMMg6YM+4(N%Vx3N%CZLk` zn*|tdR_;woP`L6?(whNHdaSuUIi9$iW$8s4i|U{aUNMRQxf$(P0-_2P(pQa=;5$Z1 z6c{COg^~giP_x@>2+E*(7MW2g5iPjkIZ)rkawOci&3%;R5Acif2gDsrj!O2X`7e!D zp)yHH7#Ue9i~{%+n+y~Cq*?@{Y@|B*rp5>fPtriaxg2o+)r}3r0h~FsUVCh9W^=hI z(!kC-Hs5>D6YnU`*wNd}?}PtiIpER=giW3E8#N)^ytpy{fSFAFAFU<(5v%I@mdW@W zHgYy0dyDi5Q|gWRCzZ+?)k=A;wS5)F&bGLJXjnBB?7GxV$)B^Ns}5;9%#Bd>Nv>2! z>qcD!C8m_q3iWP0INoulqs+r%r)&o$Xair4cRSR`BPp6PPR=9Rts`}r%M@XRX)m&z zlUvb51|(o9%8!EitWVpsZ`RpA%mYM zdM_(SS{j65n#R+#Tzpn?u=tqAUNsd>O}|<;t?izczLR~fHN)~LJ3MmAbCywWfbj{b zr*yUu!!1(3gC8Xh73cpaD3D++Z z0?Ij4`AC~iXU?hGdH9s=JI2jAq5g!#TK2?H%E^9w zkvUcZ7|iD3}-p?Hoq;&Nv^r<@IVPCgr0@=5WU)tLg- zAv-h#A4_3*PAiS(2=7JRUlDW}Xzn!M8l4-@z6;M9WOsQi=oYr-`RZ6$-dr?IBbCjb z`d7zDZH^C?#YF1w3N`L;XPbPIfz0~PL*cW@xv}0oQVf*aSEn9ncXbpe+KdMQZjD|T zBfk~Glc0D-_^1AhW3~ksAf^6~Lea%B?FPF8%#|l7`ob6pv$uHJ-6NBWFTFCB&GF7< zv=J_scqbsF-br8LolCY9b9fvx*G742ToQmcm&d~@&FOrEJ2;X(jP4Qrd{_8&M?1Tj z(QT`aZb^~XjE?2!D@V7@b{C9i_k__c;_szfKgBk%$dDrSKOBmlMUGTP_v7Q+Q@ovk z=4oEWHs5BWJ2{?B^ZsGw(}8c5YiBmPW4yDtM}0jzo(+Z$+7$5XY_d3tXQCdapq`&o z!Z9T^!vzG<(jH|p2rfiJ4qtn$`=jt*e-fu6PN>lX;qjULiyQ91&>hKVc(%W^~0=d}uVd z9K)+j1$GR6$uQ(&)Xfph|C>Hwpm^b_KOTx`w=%iuQCd79fQ&Ch&*;jTct--T_J=1emR~%_)biJPibY0Q*PIL9L5%$Q`L*@i;D6t*PUvT_BGm19`NF5o? zSkFK*jAl;PrO^zh<<{tZIo-OC+SxkQKQ@+ap~~|H zEC3*$5|+dyTK6!WHU5q8?=Ae(ku3;R{bvr6kdd1uNG6%0CRStb?WBd^?)U%r)b!rR z(CVbWWsP!+I_r=%_ja#r2zN^9YclfGLEka$5T=-y&{vHT`KriW-pAAJi3HMZEwmg)Ny?P{dTd!Dx&Be`jJ z{Z;KIMZ4>VBHD$0*4g$xfyMW87UlAm{Jxzn$R-@mI=XN!2A||+viBV#8q}2Hd*4wV zNBfHJeMf&BZN5jY1rpZUw{ZK8xI5)Da>zBD1(L2E+lv?OutvTk++l@)d-@gZ$ji`L zZI5$D0@sZAj#TzgCX|)bMk7|vZ7wwg9YRW`p20^q(7H-S!Q8-hLi*`0s!INe< zR7l;Hh3NS=1++h_Ri<^2fvy~QvaIW7$Us*Ha7x#VI1*iVEJUB>JzHgSdvY^EIrEII z1Xgl#G!V&&Q6aUllLcLmjfSwDXGgU|j2&d7T0O>o9A!Wd!7q-X1aUn*meJnU=$G)K z7c3Vtv=nm*Ib-=2JG?|g{u!=sQFpk4z{;kc%Hpf%lr|lDG$}&1-C_3D>CNFS7E8ig zgZ#*Z6>rUix9~OTtqV|~z6H;=Z;2x9TLTmlZ&AE8AKsb`>-I~V!dn+NhPPOl2yeA` zi|v2KTepX|wka7GWB%kQ7|L~dG{E3FgVEOLS8^DAcoY*DyF(zK$2mxBQW@?wO#_-{|MXFVGYCKEY#1PIPuih>d}< zyE_;B7j#Ab-OdHhu#L+Wt2XNv2Er`oEyCNui9F;&q|=g}ovZBUucsu#;HjmnkRg#`p+EV6b3{PpHD; zo}gq~6xXP%Qlx7bTW$|?1~k!`ZFM0M&wNsnv-q}O;;HaGa9Ywr^a`q~Xzh}&_bfyw z0j?H@Pv|;Nc#f`{Sk%>ZH;cx)5=nhT*E!Av*OiXJc%na58{D7Y$XVT#`!js4S$_K$ zd9r-l)~|Cs<=#AMzQR-Lf2<0o={u4a)c7M7<(0ad??_(M^V^6!(sdBdrR#SsM3;2s z!)(-!em1|yKuFKp{cNq-!=LKhrCxCBt7jv!o{vE^UEufNh?rg#K0Pqom5ECCgV!C?b@E&j3*m_zWF z>4Yr{RKlJYxJ%4|*1%cT8+uS)GV`7dnfDCb$h~Ls4+ZZT zZiwU0!No0yic)Jor6*fU=2iS?4K)$`XwAMKtx@{X!qOFfw4vhbeLva|JC$tvsvoTgRe3Ex+9)G<9X}clO)ANcHXi(F>-&DRQDkw&kG9_AIDWM8iXUzKntrtL zH`I@2`6V#HzYcyhIn9C__d5J&cxG8P3tr9Z^`jmA6dZdOpe*^>E(7I}-O%8LZ-+~j zMCTV5lx3hK%A@y)I}q8J$2CHBe;cmgDST0>S5d>(ALs{2o`w`DBTlmXlxY4wUVHG4 z3bJ}l>{>zW<|-cQbOB~>6moh{EI@FDP)d=iaEm7EF-l5GqOLT~h2 zrtFHAkpMT`GD=mAmYdr3fUSOid@a~@V|M1;= zH}KKq!3_q#&_Z?(O-Ts-A-+eq&8DEVK8}p}78;0HS(In3hY+;d6aed&#!N@O70v9^ zgqSMg8o5?O9aNOrdu5KizV^o9o2I@AaDAQ8_CC3(p!Wf0^`YWiCJ;#rTI?J-*xP1A zft<0ho+;A=Q-AK)l@dt0R!sBKp1`YHsTBGq+!{7~6py~< z7!8r-7UC~g#oZWRY88(~Nco3q76lFNyzg7LY1k(Qm$nQYv0Y{m^e7RA*vPsBlqZv|HUlj^WxSAhEgF6w-?wzqk{*yS4`Ol&wU}1=(p`O z7TC->$(6qmr~pbP-JcF=FcAY%*b&$N{5eo^7RqGh?{;R3WxicpB5>v77KC_dEz#VQ zRy0Y-(>8v>F~$ylHlLX{FH%hMY#x%VAu7g=tA!+U4I#qU3w2-42_r=ilBJYO$+jclO6 z%^W0rM2QOtHB|C6d+NXs^q;1jBPOnI%F{P~%G1Bzl<#9SWJoR|_-)P$GzfE!n*ZPa zoTs)`sxs%uSIxQOlFEv;r%AY=;(?X<@mc7{k9J>$rTU-My(Ln?O69)$`wjoR$|R*H z%d+mDz~b?8LnT~7f>Ulf;W-?*CZ-~}BVn8~>++^xO2@=TPl=8Gn`V1sMBie+_+`re z;t%*^EbI91^Xswl*XMckXY}W!{@AY{tuoSoT5`OzYW#fO__yYb|9i@6{#7xD$D!O4ph)cyaV3z5%U#7*;dF6-l1j=EgbpS&GX%jl`Ac0M1IoGP%` z1Qv@40f%)|JrMI~`E ze>ATLA*-plXv!+)(+5X5@R|*l(_C%PzGbtGZZ{LP|1Lr{j3r?#sDF|Y>Vx_f`{SCn z!2r@4@4l?Ld{uwI7h3R7euaC3S}OK=zzdMwuL||7{ePB7Fu{!a|JiPm;a0sK*Xv;^ zl#jMh6NGR*rOr>X7=0p^Pb}6JZj?P~5bzV+?bIU7s8p=NbHG!=e&}QfjgdA$vocOs zl#q(G`7#Y2VcB)2iu&=;X?WjlH zKaKgr!`1?oUZ)49CAIHeIZOV@-(E((k+D@uY0L8g6ghtqjOUI?u)Ek_q+0hsqOFaB zri|7)4_tq^+5XccZoR+nz1EiUUh|gt)?!&V+2t>SZRp5#K*1t{G+qK|sUjW&5PB`o zj@VwhGuCdyj-t{N&h8@`wsFvntKgDg%C=sY!aR3Ze*cTmF)@2)T^x#tP{XdxP06Gh2I6R=K!pK zhC4s&so0|);8;x&K%ZnYfy3nHsa`g2}?&gzfxnNzwmqI*VnOZu~@KbOU|Ueccn z`g2ZyKBGTp_|si(w&z33&wW{CVtuD|cU*ryqCd~*&k}#SpDcCYOJAYv5B2AQ{`{u? ze3n1mPdD55tVB7Xj{YCm!qO#b4*Q?hC8zsmx$pjEN%y%5u2R^lRUGzuO+5G67^Ywt z87Qe$rFuRB#;rVh5G&$J9$=)cpL{(C!Q$H*#&)P)PNMSzZYXSxzDt z!#sGyD7Pq^9r|cDt$;vivv8@v2LDW=Be0r~)mQA0K}uKFs%1iYMH$kGf8xo*-At)g z{iVMIcC-G;uL3lomi@eFKeM<4t0Gb^hEZV;FXr(@be2_HF={62tX&tPyXX~)!VZ-# zM0e=2Ge)ge9W-ZCsDE&~>D%IkZ18cE+F^nA#+vX36k-v0En%>R24OmFK0${g5s0SvgY@9mNQi;K`B;YbqU_AnW#!!``UxHtHq=lMTY=JH zx2y$N6Idgj#nOki9%n5dII}IcNpsCa~~$CV~Rh)M*k7pCe=Ww|9eB zDP6|epbKJ-q@Lt`dP94BDFN4T3na z>@D>fJmG{5YmNl`V#xX?Exl&XhVo9yc>=zugJ_;WK)tiZQm_Ax{YTJIZrW0KP$=8P zLKkNNK7cx3(Z|GOMzgIYwxi(?G6-wt2ux3dtzwiQ7Q z+e78!9Y`W(kyYz%{de#N=^eSh^4c%_p=wKWinoG+j6sOBTti+33tG0qo%=|3!s){neg(0bvia(L7qL~?T3m!+oA-4(La^9G1OH0b0F=HY52ATFsR0R z$&kc4Nhk}|GC(-FBlTys8 zi||^s4P!w$>gYRy11p$(Uz2`dXG~V5Xlt}aAJ8%;I}7oW`^wHj6)GN}vZYL)1T~1b z?$u~TuU0?y+Mg1kH`QMVeNdx;u_ImgqW&{Xeu1P}(S-pe2f+U@#Ina3LTzjGsakJX z{&EM0Z~G_Sm(^`4++yB%#eru{I@YUeX}7IA@c=|Pd!|Xow0DCbLr_e~6XJv7`2$pX z|9jvb&@ZeRR*otQM0s=fP>V2d7#HhR2Dx6#wbXD+fCi;#Tf5O)dqUfk!P`^G3mHR- z2&$KZ=%Gd18%nU>+S6-pU|7_4+?XP*84Hel;_6U>{iy<&G8Avz`R)zL?id-jjxTcxcK?v2Er|>a~Dl@Ms@3@YdBygbedVr#?vFawwg`3#6AnH@Im!$fUFU^=I*s3U{S0EIRp zO#vGaHNDq~%Nh|FuZG~VbgmJw12SdVTGI&P{4Wn^4iRgo#P@6=RIBuwbf7F6P*uJv z0I(rZ17n?fSv&xeJ0pvzLUU)BE;d}j8m_mO#i!IyVHKYeN3buw_IDt({w{7~iA3nI z^Yn>G%QEFhhT@8hLTxcK1r_@f!4bGCq%mmClqS7k*J`+ir@Bku+_*yO1^}`Lc zCWte}7(V>7iA6=yrJb?sYr^C0cKbb1-z!2Abuo4IlUTpe2%{w$ol%*1^bsbIo* z2D3nv1nd4pLQO4*FdwE9=c_U1rbh#3K-}mnbGu5979z0Tem}{ey4(Pr+-# zxI$o4S^PwyYiyE4DA~cn1TqY`j??Z0>z;he@08fQBO%@KTrx>wLByUDTOrDn$(ymj zoJ5vUBEgi0r)glyv}{rLi6YX_%q=2~D52dO++c`F!)stMX?O}knA&1j{Lf<2@D*50 z+Fg8~aGxF*Tn>)Qkd^>o^K%I?F91;xxql(LUw5~}J9fr9bT^l5+n#RI-E6Y!j-(QS zn5zU5)F4C92(lOim6{PGEq0D(=Yss6<^(`(kP;xaYO7V>776$8!HOR2bSu7W`!^|> zS22DW5(@yB_Rqv|O{Nfu`OViRLLg_E*F~kDaN08j6 zu#&2u)PB$g5Pxt(FXmd`L+%9BMA=Ze^QB?*fNCQeJ1gcW8XE@IpqkXi?yoi5%l+;( zXQI$A*iE=m2X(BaaAMIg1Ld{f&t)`OrbhkbYP}3#(7rEvPLHKhHKdT3NT;9haES>0 zD~8axatO#(0Hdi<+GtzX)DX@WLx45c{7ZV0miu?`f|Qh~o<5NTWp^>jN>yK(c6_Ot z(kZj{QTTzNspRxbDml|DmA{X-?N8k>fan6cejiNFePh9Nc?Fmb7s|;GKsGDD^nn~q zfD0#qCb)0I)C0J3{T&2a0WL;o-~t&?=W?*gmZ^a4;0kAtxP29=jK%TIE3h6CGHe3x z13m?m?&CvX@dZk2XhP{-d~3zfqAX#uWzy!JonV{LTgz?863WWX{@`_XmL3a(3pxe= zZ>-1Xiyr4hD3e@7_&?pq_vyqH*mYx_c&X^bJFg_193kR>53)L8jC~*mM?(N&jsfC4 zAOI}IToRS}fAfkVL04j5vA_IB@J^V7c;}-0m>-lU%GNmcT=@o^IJ|UH?$3^2)-N-d47-V&PEwMNhf80&paG(UhDTOKg(Bp>i397O-3^pI0n`$4nm zpnNF+z1l4?D=G2;N*?28q>KQ6lF}$V5t*_xjuM27^7_yVe2w)iO?Dys@v&Gvt)!&* zi>#{dNaw4Bg z;(=?8X|OsbdV`M2|9dHNl&dL<7TS}w(p^dZpDV`QP~Wj-HA>u%Vfc9Lis7^N5(5=> zZ@rt=TD=Yr9FS)Z58{+TGBSt&7l;?Fx0$6t1x-sW^Lko&!*yg?1OQmDo8V;)P!`}N z1G?8J;RT$u{&f6L0ff1j0K7kajVGKC22r$BrPpY`7DR8q5&=!M7s)>R=fFOv#i#y~ z@Ag^72jW%UV%>Gu!9eZ*mtJl8U(iKfi@R{B>HeIRQ*d54FX_(!PcsMnE4qL3FZhEF zqElu3k{*tR5@TD(|1*7fq9o9prA>WQuc@QbRWaY9UbMjv(CcVJ_b(dlTj{1W=hcI+ zR*hZS_Xe)*wAYx<2llh8Q@#KBW_!|#{23novi_Xb4`<3BUbyOqkLQZ_B5r_KRu!ui zI89HnzsNVU1SEsHlpoe)EaLYdXh>c-0yoWx8-r4Gpq@XZdZ^_OH9e&HLtPI^{-9M* zP*5@^rZw|<(k@OP{&IS?yl+euL|_hFb}eutz55e!+%TYvUpj_q;n{WwXmlM+R|dEM|8?O z4lPJ1>V4kI7>c%pnD&GlNVYsqTj*5|T?WB0+mf8Lh~)i;h5EwKo`dT+0o=^~6-!6$ z_wYuti{|9>kj7&cQ)U@~G!HmWWJ2{~aTV@x^YkOT(f$1Mf5zM!Ia}PB=(MbgjFLwK zor_ZcVo~!e0xxEbuptE-G)W-DS7TegO2evvf!&~wcNM6_%)l-X1*L(t9CcZiO#{f# zu@LeG#O=mmfWe%B6y7n~F0l#>)9k~?tQ97UUtgmIF`xd+1{C0}QeOcE|5H$_#0tOmz`PdB$o2gSIFN;m z<2^e|9cxWhnQQqL7`OQrhWY_(J^?Wy29z+O`#>qM&m0O=Z^ADa^h{ zEyUZC!~^Hd_qep?l3g+8kl{dY-I4qwUHq#`_Bv~~ zIz$<%!43)yE@Q53a_hk;A6@~Yq}TRq5i))CJjwHr+n~rfQvQOU%N7^9T3i^B{8^{V zfoy}x&}^;mW>e}a2sFa729CT#c=(E~tB$1r!ehNsq89_An`;3M|7T&;#4mo}fm`CF zXDW!@L&^^hjk5L8gfapZCU4@@;Wj8FE8UcGOzZMB*WCs*2D)K$gQr2FmF*hlqtrbu zj`8}?)h+GCkBz3HDc6D`SxWI;Hc6r`?iAXWrM!Ck67MF)uid`X1GO*lq%WA@hC7RT z2kEH;JQy&py;mzZ0E>~utia*|=e$Ab8T@_UqX&sshg+%SaX<&TX>+LZZZ#iePw_fy zO|?PKz%-?}WNYXku`T!kG2Pu7U4{&d_U3!wBaB5;y08qT1qNF` zZnBpg+=m4llW$6~7ak=1O`_Mivs>?5U__8zSu4Eo2l z7Rtv1zQ&A->bUXNc7GZPP1`ibhCS_8C>)G1soJ4p=?%U|2ifGDxGuM;0(hK!P8sV( zp+vYf7zB^S;h5GtXxoZO!v}?=eKyv0gUD#O8w);yhN#6n76ci!T!1>VjDGs?MCn@etDAzRSkZW;k zgk3v^0*;@cVIFz|3Sck@kAe~G3pv>1P)g!1^f5e*U>&uzHw{JI!W@Qtw2#tg-(xU` zQ4V4No5Xjr>2#NyR>K=}?lVfm$w3gSHztsb3K#8hz2)HK@qJ!r?gm~o>c(;oLJzd% zDOdVO_x9Fr&=l9KI@KQHk$uV=a+C#fO1p^DSH#4c_Fl0WG>riUz+$xe-jG6LJs)yo zZ&%Mp+~@%k1+3n4xP!Vqs(#XPJ_M~Y@%ggH+ND=?l4@o52ln>HHi(!+^Oyo^WAq^d zJ^g!#z9v-GOeAhS=&8LM|*7CM(^T@OFwU-K%7>|RG6PgHnLA&&~U78L=Pm(2($^WBUMij#BM~wHq|AP7ElUNa97w?gFslSW69r{#m|bf)>yz1NvDd4 zM5$gOB3FM~0L|aNN&u>JV3{=WUh_dnxhWP9ivkNF2*^kD*%d<2#9}T4$<9y+!L=X= zdZ`X%aU-S-XaHnm09M=t!7;9jB;Y`JEtf3gs<{SI1gh+A%&U(FfeEMA(Iy7z)UD-J z>I|3!LqsYHcT zqtzhQbh4~THR%vlsb=n@T&k(k3aJL#np7iUy`-8o5!3G#O~}neCrqkQqbk*al}R({ zS;G4Vht`_=N78Iu(u_Y*&)EDRRSF^3TU(K4UAHz&d=Pym&0zDnG+SrVY%MWzl4dnY zvk7`5Nk^VolV(&V_r9cA&7>J=yB%k?ib_R~l1-8+;1x-03(+;TCznPItFX>ZNg6e( z(#Rks$p<>Z`b`?K%#M0z8UGPo{V&ry#X2mxH2UI{I)B4^=Grpb;0{cPY5Lq&3-(@%q zNdo8e6VF9{vp@HNT;TW%-1(dQ;s*-}L_8Y`rUa#4E&~v>xXLnsbG34@c9J3pvZg&W zh{z==W-ZLq9*7)5!L;s)POB6XY}F6{F})+=Ba)uL9q$d9xYcbWx<=jr@X&#Wpf5$L_Q#-wtO%I8 zM5(TM5JMM}!H(S-*HH07h=nyO7Ze~m(A(rD%)o^4?2N}DS!|9j7p?qqVM9QR3+Hl( zoJsnDhpXHkTN5s5{)ug<5%t0!kl-mn`B`E)-7xCU@e0g2WLyXqEI1_GQ9YT@D&87x zmcR+SSxYC3W_TXv$7NeD($KOPti=1GhgBkFn2}-wJ@3pKFr~l`-DhjATCHeNYYzqerjuEmT(^DTS z;nKN4_xOjimb1n`y4T98V!2YlF!{qJCkcu4gebPr#sqD;!%Q%emR3}ZI6@nhv}7b{ zRN7#~nAnvb>}IAjN-Ig`_j}&=`}RJkPH{`56NN+V@BUt%_j#W8xxLTZ-@pcBI#1f9 zHR$k#)j!lq^>=^~hi{pcO~JnF6!BDVQi7>?4~-4nQGWFz&74LOoNz_$20N~H@&IBaRXRV+dser1Yk0evH?h3Te`YQd-(Q7vWM zV}}kw$zI@j33Li70e=F+HeC?A&eaJ#Sz_d-QTbDD5LEK8%EfPw#JA`0_T$~#-&{06 zOQK~7PSM_pTf%Xm2e;)@&Hmec;KmlzOd|R;e*VAQk4K{YWe+X^xZjh9{n5V(>wDDm z6aMVs1~%BIJijSl`k+pVy)MZb~U3fI`q=<#teX(kj zVG3!%SzQjbdLDtv9V)o{nxo-55YsAe_2Q%QK>O(g=S{rZfpVKx5g^4E(p`HXAn>H8-`94BX7_XE$0ojb%O%Ex5 ztL$dMu^kXV6vBpco;LWw6}-gMhj?jPP$wc%&xTZh7|~Wt)J$ipvmwiAgd*%6D;Aud z=5oOHE1P~m&fsO3QPxB)THt(E$FMLw29ptaht8<`n9jL)&sxAsz)FsgC3C)^6;;Gk z5NNFqjFyDx4Ne7!fDQQKG+a!tjg{SdO@;$XTsFb8Ki zt&9shfD8M5EP!gisl8*1X){a__i)x;*gnzSpzta>{6EE_N-1O>&0>B4{#KL6^4TUq zde})Ed>CWhEsxqi`NT@OSI&a8O2An|Ag0snx&#Qi1j-QVkz^4hK>!br%dcp>5-GxB zFvmBcn`7M_i@1Mri8QBkW4{2TR5k<-_fj)ZLPOL=>#vS98_=Ny$E~F9ATg?(ZnP_i z!9Lkgmc%>nDhvu%e&YvZQhswA6VIU2EWaT_Z(@`^gHEWkeY#-Vk6W?rag1dIT!F-RZp*3xkynQ;dZ(kt6259$h;L|8pBQ`+v zHM*mujFfG^_8mo$-`5s@&jy5Kx_SA{fj?WC|#x#waB&P14*ey+?qC_fXg4UI;Q(x~GHI_wW<)lkVYljC)Ykc?Cfr zej8DkyoZ~TpL7rZZ@d>y;n8KhHNNZ`U3{B5#E>9VM+O{_(;zuC_Ss$^nm^Wd??FFU z=nE=;_uUBD8LMWb=FsSvpArMO5uFxV0z zK;oplvY=9$sGt(e-r`G6W2CvIbk@>p&xS?3DgLULc4vT`IalCE<{~oV%FLLf@iGBg z$C1Y6pazY3D-C!dO)&s`IC-K%{^Xq+n`E99bR)q|>ckpSu*0Z*`#Wx2xq6Ou>Tpq9 zi^Y#6Lc_Ruj15G2__pJIgEfn3SZgR^97s@7bTDbAik2uTO?FH(P!d}0;3y0();Cn` z_mi{>nu)PkflmPi&{t>BMnO4jbO2MnmNBv&#~6kiu08Hu5LwLYjQ z2@(jvLi^`xL-Z*0=xi|y<5?8mY~`w1s0O}{bi|mfX0VU1W&Ks^`6%_A5hn;GKVEY{ z(qjkacn1Qt;6XPeh;eq6rbD5LVKJP9_h@mXED|iC`ufPR8TMnd=<=8@pW;h{-L`+3 z=_4K!A9#h2XL}tirMsw0B1%{A*Z~_f4 zWh|mGm$GJYX>?sYX2f{>pjHIzvvf65fdgE+o7~x`X&tt{@ZYp^H@u(?46AZvlXApdol@bTYef z;TrRUI8HHAuH2XdD!5q-sQpTA5cy)un+?JeI%--EamTfwkG`8Gh0V}sC;F=>hECB8 z7NZb>0p9H-IC>G5kx!mp?N7_gSb;P}=D^#k))hkeA#4B$Od(B!>slUHX(z>v(k#}7 z+K(WBtsWS$pA2(Hino%Di0{uH5!u&WBPB2J_suRP3C>j&c5 zzQwQuq*4v~(A*UB?h6$I?R5Mdx{KT>iu3w92h{5r&Zv{ERjpdn5kso;5c9Scx$+ni zJ!EzaeWCOfa`w8rXvs!&I))YUQ*(L+l%6+OUid%wJ~5j zlLkf0f9z06Q~{DiIE29y{K81F&0b>{_BQ*`6qFZai8sF|k6(2ph{`2|itWs135DUU zKoz2K66HYE9wKHV<=CYtr`%94Y$jRji>6SmqWs$y<MtPWLEn$+J)eRxk6%W z0>PrSW{k`R^$U&17KJiEclB3pJ^fIBrHD3}oAIN>72+I^2Vf}6(wWnbF%VB`Jm|u(0x~d%7+_*l zO1_6(;!wMC1BZkoS*CtFl6ma%NWudbLm0ywY!pB|-F236sgoO3e4w&%lA^?BfG6OP zJm4M_Wt9*k_!YHUIN0I^${#$7!2>=4a`_bOtG(^!jDCuX4mNN-3fD=Sf=HWZN*ROM zCJo6{M1!E99=dG&acs8Qg0(v+$dTZm0I`wyiBR-I^v(1e@OWnOrH6@7lmYgkg`OGM zBd#8^1I-zG*NL=~ypgFUphUz;0T2kCF9E@nd4(36N02Bn#MPCZQ8fL6U~_T!Qa`6iIY3?F=$1A8sCXa)W%92%6@JIcpt3 zuO)&ePAHe=ry@OW`zRH~$73dFanb@8#4N5Xh}n3e1u-iK!H57I_i1lW$XtPD%zv~7 zM*S>Ayqbu3Zzf`jLr4J#F;kEPx!}BXu87G)UYh3$t~*7XS3s1&G^h7dBiqUXtL~G4 z0;@ng(&BcAhkXwAvNU}>BOhVrfV2tW>i7us6;mc)Tw(=Ftffb)V5!fMwXi7-ePkX= zEdHzHC!0I?iCYBh%1_deGB*&dph8R-h|N^h zToc>%uIdlBAIM-LKk?+2v8sg=tAD7As3j*^IkBmIHC9fAEdVyctA>EK8FSqPykbmL zf*NEVEK(^whqNdSP2w&1;z8yb4hLqNybeES3Zes8-H?CrY|&`(-#*1ON@oVjNUFN4 zE+m^9&LD1B8!8Zm1-XI7D7d}Kmek?c3js`yFM01$F=_Sn&{x1OT001G#UhCDQTv5` zfF1Bdi?~}|Ixpk?YFl3l_uw(ikDp7~;G5tjd)~4E)v+1Ty4_=K?!WqTC zCW2ie1A_rDP>YuI%6a5)Q}v-h4cN?jl=Ta%bD4}Quoe{fO(nEq`cSB;cstlHIVHvC z{18HIEhqweP=Nw`*wAZ1SwlwPA`U=-j51Wn6Ottqq%szXx0p}G+EHLFWj30oESpy# zHyR&<=T25Jc(X7;$1rNg9$ZI`F8CMoXGk!ldUN)sDNN2%X{sayF4{7F4x_Ggy)^3U zf1P8U3<~6E7`HVJFU0`tvTUK z)y8^I^DHs9C4|r;0VvLEUj+qQ$%{q75SY|rWSHnYE5sw<Zfu+OO)2Mr1NqQb=;h(um7sECjFtG}$4QOYL<%oj@M zq7GehYNXCoYgE<{6@d+Wz8Wbd8$bcF!^s(wgI9|$mveTaTq@uZ*rAy!)AC1wW6KQw@AlsfLo1$K?h0AsSyv zQm@79q!OIiG(rG?zMy&|2W-@rr@p?;($~eEp)a5$#t{H@3}~igWwZ(7jMWCNyn%^ot?LfTPj=L~Etn&mmGMUxKdR zmCg}jE~u{JoLlmkm@%qeFae2ycX@qyjR8Y-M3%ZTNA8gR0&BU^BW}4n;_|li5+ol2 zO_2(EqZmOQhpWry@CB-R-l8FNkTD|UA%#3=zP~1v20#}T=O#FH0vt1I({(Pfgx`TB zB-RMC>Um}G#>}j00UMl-`TYn;O~P!{hn`B}>;+Q^U%zNn!njWV1AU>Jkx>?8P=1Vs zoE^=7L-j`V&Y}Zcwq`b`YtKb=@Fi&>By3K|VVmw;{=ABLohqUfAsF#`f8CMr9NbMr zEFJ7l4!rWWoD^aVgA~G3_!21uaXfEQfIVhXNVbsyBn7ub#+-h#LSF3P8fPzWMfWf}%!+m^=XOn7YH@9dw9<6ZZ>cqptM%*K$IELh-e*f&YR%eOaB`Q2Z5YCr zzn*pP$Cg@68@|-#7rrT8=(f~4srbJ3ZcD9MJDAwBr1xQPbO_fGT%v<$0KMS!I!b0p zr;1m-sD+GmRmFq?#P~8SMK}=K;rHd#JG^@e8I16-b-t-W1fvLug2)DCr;!FoeE82- z7R#F3cIjj{&26EmA)%B#o`#*`1>-4Szj%214a2pQO-ayuDoLg0@ggm~!mgvNkCjwM#qW>GHQWjg zp8hCKLi<(4!Q7~YH2gLzni*BGFf$s;N4XT9&5Ur;FfXD@q~sxCW;AFGGovvhm<@8A z90m@Vfp!EutlAl?uC!QPtdWLKu#0r@y)Y-@BB~?lFOl^Sd?SkPctp!m7Oo_%9SR;ddd9}q(O9jQ(O8qg&{!kyv5Bry5!Y<H*wio=QM#CTmMiv?$N zRNq!wU25G@$C5oSf2YY~KIFSVe%Yd-5F^`byqCb`jxIWWsL9AjU>C+Sl}RdNl+4zM z&>?X;j-4@K)4-naf5eTDhypE&5ED*4KhLT_{YjItUGcmrY%5^#S7gyj` zj7&!n=ZvjcxN0&VTxSeb8Q8+&8E@jf!m4W<@tAWGD|8eQ=rac*P?%eiLCZ@zL?boH zfj#=aN+x02O<%x253$1ot_mt6zB~{mQh(UDVT7`?JST0%nI^TcKqpveWiGHXTN>eV zx(~E6SINrEK`V3BTbWxI`cQ5%DK{e3a~`ua3XBu55zFi+qay-_T2)WpkaGi)(GAO4 zTi`{*wRznvflp1V0z|I|BKq=q#&GkDAZ&g#_+s<6KuCA;69x{_+>xJ1p~jGVHefKr z!$JHMKnr4u{gHEVRg6sFX@@;{S@a8GNY}*6SS%y2LWDNXw~(5Na5fMv3$ zf;6ChQ;R;)F~YRO4~Cv9W@DgHg2M(3(F2YVS?ZDvdaAiIoL7{|M_QQ(C}IB~Z6jna z0*NF%YA_WsCfJn50^Gary+kF%x?=d(!gD(Lgn{`jvG4MS1RQp0r(S_$OeXFhfD;M5 zY?jWS44hb4*4r$DvF~x_?OM8uRhqSH0v&eLjvZrH{6?A{;lz*VihrS25!@n-Kg5h z^>aRh;}qLk?>udvj|a5o!`R`23c~A(F%dJE)!~`Vo>mNpZ8gE72jM!453k{I=S9WR zs5RXf|GDN^tduap^NJ>gIENn@3*Gg^rAERVb&%p1=_2#%T>1Jez0STNvt(@}8DITh z*E{Qcz?eW}FL`I5>vD^iytDeaz?u?LdC5B)9uo-Yg-6f99G=ZP`_T!zo8#U~S%X^~ zRzbI+l}1!WxH(oMszNsh3*w%G4=Bpe*EUai`&jjeFF~&vDI0XnS`@2t^n~p2ne5_F z@`D*}o?R-&mzA8IFi+h&;j^U+R+4fh}#OcOIvUj>v7L!(Rb%n ziMt1Nlbr3n!~L7*_V-@X-+OJkr!WGj>tKQ56Fcy^v|D)1vtz?V_Z`c zN*u<@Cu&-}=HPa(xoVGA^hIRH(&8~w7OT*cvw978kuD&woaqAEc+NTLpbdP(qc+k@ zPVIWhNeDBmd|>D4Igm=Lhsx~MFSA>prrY=ql12mp$s9u;9!Xuqf)Ynl*_E~oKmAzq zv1}w(66GaSw2<6wEVZ+ntI5xn_NyTYjG&-SbB@g;`;bM{7U6ok!dh}FTu#V%n>s)) z-gJ^SUgA-p1jj%ZjV8CDRrn=!$z za4?etf)D{HZ*YBL8x#+CDbo%Ggu!JIy%K8(CYnrmK8h!1iXpFI477b&pBFvS?p{dU zp`NeDYB>w)#_N3J7;18O;>eDTv+u2|Y05!E;+L9-nYaSd^6j*`hJc5rG}*EC>xfXO z`{29+4|&8e;Eo^4jUkm-h#-SxgzPCR#C2qoaYk|^?PN{zzevaw!@qaO@JF;GLaDjd z#Q}4z1D-vy8Rb;){Z+-r#bAk*#iAeb)HPFDxraGHMn)PR7Y5?cl*^Pn-Q?*8Pi0*^ zwWD~F2&I`a&H#&Hig5-ZBn)=_vAb*!l8}xyXX~!@8@SeQB{#%S9!H*8GL3xl+fgb( zF^)X(MKSWa-t8)bwo8;v2=9YD^1~Q;I@w_tfD7pHxi!f@$=`eTkZ_AoT8P9c67r5I zK2~5x)CucI?2<7GwXD=A3|Q%^v}$+3fwbTg<$&6+D2(J`DLjHN7As*}k%Oh;5!nOs5|Mfq{AwsPoR6R?b0W}|D}gjQKFARl z;u}v@yJ{!A6g?6_M+4^>V+EubD*|g>a+~5-BZq{8m=f&d`HCsP-Ud>PV&7N-7=k%? z%hiS)O@{%sCgy-b#U*TxM^=R5Wkn8<6@4vgNGofesUqh_aOH_bNQvYxrzfuE4fDa- ziPXUVh=3|19cP*gOch)%n7$E2RqOW4uv}16ZW+0P>)>@xXapo>*{YisQkGz(i3oto zS%QQ2`w?^zD}w-_u`1pH+Gi1{K~*WBt01=PF&l4|thSh(HF<{tLh)|Ip9H&&K)c!~ zIn%=ht`1XhTrIAevQ4s)yaG3?jH^|~)o!tHl>+0o3r-PZ<7mO^Mb@e-EmjLBp>GLU zZCb>F5u|ifs^J>E*&eXPGB5=Qxjbvk!?jmQpfbCTV0j~^1LIaGf|BH7!p^kx{f-wmqk0{ZP`GG zN+}6(8_bC9oJbIMma13`^onRUPOE$oAC7yM6k$B(ig};D7{3$>%c{Ooi~ND(v-R#l z%_}r*f5^SeA8!LbWZ8dqM?MH?b%#l|8c(tMv7a$1UaV+4`2_R+i=p`qQnyS|pm^kc=b zcI%e=ZjgrtKc?rT@DzQ9=ESulifJ_Dz#Pp$F)hvEWFl5fivTmx&$(rUEsDoSu3@J@ z60lwmc7E?Qv$HwZ2zA3XOzR`9UT?i-c96d3o21z8PG8RRt?~-;&T*VxF?)qaa;wi? z*~4Fn7;GFo?H&e3rKofc)^x^r7FsJbi!A7X}kjZgpEJCgCF( ztIIYFZUeM#iHEdNzrH!0eXp23*SHs(U$PA;$UHC=OC*AV=AoZ;_K=)4z<|_*N9PmJ z7V*fSxqPL(!(MJ4&TN#wf8g4qN9R-Dn~^FI(Jpb)F1Qz4yiiu4MA*}rRqrLJY1Hl<%ANDdv}o&yXw2b6u7B$#l7b%U71CO z4B;Rka2p{AoJMvuNTk^pxi^E4qgowE(hl8HCAOK_E@fdNEfYH?7TX}}_x2D+3Y zNRAXt9B(%bR9ADAr-6af0P4o_GdjsMfcD}vP{PdFEv*alhqv*8!{jv3*>ji%qR>1I zC@VM(BoP)qdls~^8d;}QW59VQ1bG2}X`>3{NmhdIGC81l+me_ZPFB1XLxGM`sp!=* z-%~+o-GpvS2yq2rA#<^FBFYr6qFy7SngndW`R|%lMLZt>L4lL zah7H!7Pf*WADP3+^$4ROnGa^XHGXKZoGVr&05i`RA~ufVEaeo>a-RvY=Ig2(jOKn( znEeAZPMQG?15eF(Qa!K@nUGm_p`?<4PY#YAbbXK=DxEkdYInRL*FyVQ^q}IvsO(c@ z41)$cEhGUg6gn3uu+^2Lc3>VM-8J=2Ul!v?V$`F}rhTfh2f?zW<@gL%$-WdLrOukC zDvZ+$>n3sB(!&mp3u%Do)N@W9xljT~8|UPGm2$x<+H{&Acaed_VQ@q24*{pdhhwKM z&P84LHNlmLlTv>yTVxR|#metLLfN7Si((fg)9eR@{o(nWr|O zU*N)tRnk`{^D~M2Ga)i~yZr_Gn?t?i)hf!W9t=lg&vAq*_aVh zP<~%SlJ>a`?Za(?7SgWn0n>VYb5TAGkxVEX$q{uq_CjR$wL*-aatQG|aDv z(ff2}A}=MFnqddXAAqTd`#d_-sZ+56qGB${>J=L1In{p6g0w8<<3SnSProATMq&2< zb*><)zOyxhnY&Y3Bb$S1ZzQWc%s=NNt4gw8Q*k^|>!n2rD;!@)+*y-t9DbxsPo{uY zs;=61SQcL_I-7fmzP;$>{&~67OSv|m_Pq?%VyTzt{<)W^>nX)iI4agVFff@1Gtqy` zfbOS})scXF*r*wp*pjO@B@uXfIdIJ>i6TsJg(-CjJ;i0m1q->Rc19tLG=Sn4v z3x;FwAm_$@?67lnJfB=4S9OO1jRNzLyU&j^ZNl~ioSt44*_69T%L208s09>QNrX@a~1)BnN?J{PI z$XegtpwhEu3uzr9P1sl6!))2CF0}_ar)viEiax!%Xz$Rv;W;X& zN9SyW6{CYVSvO?lLC|$`0GEyK2_HZt1a(e7pb02&>={Pu-KWA^rZp{mfu(`Bp;;{B zEy-QgKM)6$?7&-o#aj<2;jP*Hif6)G)MD+~7}vBLCA>AutEHWUx2ZJ7j<0sdTi}Oj z@fzwBYtet61#5q;WGkAq4mPwu(HBD^G~5udaIib7eWo9V`#=uIO8fP-zin*T+z6c3a|WkKr|ot^uLitc)cR=j?yOwuOo&TXPX(qY9bW56lB^}vExR9OZ3V;FuQE9HpL*co0|NP=^i z`K||%eWIFweRyeL6)V$UN{XIMZilw;7ES?2HSuc%J zG{UIlX@o(6;lny?7SLMOL2|;s&aWz)3jlRfFjp#23OM0#dcHlcxAna1b^Y9X?cQNb zSU_xN*JHoBojqsf`)lfX-e&8rKm1fN{YbwN*GhXEH`4B1c|)(Nz1dr(8+v`JPN|T8 zf>4s>zcww3XVBlHnU-0uYS*qjdvkSEjz%L@5?QbFjV54Dz#MpFIsGggwq+yUS;-eL z`3fE#ZzA?bnOY6Zx-XF^c=|23_Jr))`t?7K8cWXDE@ZPRqpIoqp$u@hy@{t{7+aK9 zxGpRPk@a(YsNQF3^TNw6l`@E!T=|sE(`hGD+oLFdSke{AB6lPqAlNhm*Sv4OU5>g& zQiX@9fqteM64cs6^}s8O>=uv6&JN@jZ?m!sDv~~1GIML(PxZ0=$#SVad0wzxlr{Nm z$(VM7nR;E&EQe8`uF$G+&3|Pr-2}v<_3P7rA0T2_5;SA3epdL^&kjGTU54L)p1!|^ z8BzE40S)rrWkmY{roF;z@-M1{w|y}{K4V565HV>-rw9C34sxeYg6^OA1<@|ET`)Ir zFQF-X_t`LN@azzwuCFOXL`>Q>{ZmGe$%f;^jrP7C)0~q$wWG}#>7HWR>P-+$dD(Gj zBeq= zd_|(#ypkzafK$v{SzN-2xEX}E1A!8$eXuH(ZDfw}#H#M+30O;oLS>DK&@k@prm>TC|=TCUn5ErRu{lNUHSc zB*9Foq4oe{Q)@&3b~QeL5-Q^bqUti3e8=BTGU7>x892a~2#|&8&VpwsL8(2)ZqlCd zt4jAEMGtfcIWTsM1}=4h zfQdt@8imw|x$b&8j1}N|TKzYpBNK+sace@0(H>0lrX}Ndw(qZATq4XG0^mZK`l3Pu zDsJwQ!wN7sK0Qx$pnokTVi#w2OoUBq5QI@|so_t$bM%)vc zUXp}iUW~SKHm@icQRjl?eRfc8$c&yutehkrbAU|*#KZJ~&k7~r`(XQuc>b&;uYBTO z>ZGXGxZ>GZcG<3w92S0q{SLbVk>32RkRVCYHNVyhD}Bmrqh3p3)bY`v_863ie|%GU$-YoT(^0C@W5F5cpGt!fQ79r_F zpUhTSE?|4`GT7D}1m&}&Z*5yMz=%cOvvWr8}+u%|9l z8=j8X(B&s|R!h#~b+w5BH6acAe5OLyJRnlAAzFLz`%q1H;1~^Nu%>4O+Vvw9JaK&% zA+^gR#oirDBjrvmo0uHWbk&BI$QjYQF=TAQNvv-%-{YnQj#q4oP!tyw>~zG%UiWd= z#aXqho?=q1kQY4L3vf4yO*Lc(l;Uo)_rf?^J&NHn&i1lns6NiPfT2#@80iFpd9^gs6cGar8|MfoUJNr* zkaAsAL5Gq?Z+Yd(<@KYyYkAv-cs1FzezC$(CDk-#WbbO-7Z^`_Hw!t*VqtEp>*rLS zTt7qzwHRoCqXW0nei?y;r6X$%Dd!r53xwhyqI?)(NV&8^+0T&7D+)LIX`p7V0jF8*gL4kr@E!&1nNf9L8u%=8U#^mcb~X z;)Mjp;3U1f4m+`61e&G~1PB4fgUn5!@nb)U<7U|YzK3!9Fo)>}$CK02!<&DKySMQ( z{oluvm#2G=zn^=L`tzVaAK+*D)8h&J&EjsmjeGZ7*f09?v;N#^p?CC!-esZpisIV`J=~klqsF?u z+p7c9yT+4)x${fCSZi0fE3Be2}7rn~yQSEyO};V-?9%m2_{{_`K> z@>}9z`=IBC+ed$#hW}fA9XInSEqSH$Cpd@P^jD+Fk5}ZR>{`^di$?9-KTfHc>4}hd zg^X+?U05pWZrX(4nIFRuuSSe`5!XqCK>lWEDTPPL0?C~atrmCOK<-P*`|;tD9r9VN zDtzU9p^owV+R9X?T5OA^PxGl4KeJ2qMzkb(Gv%C9holhxkWrQt><`Yzma4H!f$zG)k3O@3U+W{m$I;hX z2J8HmV5)g-=x`K;5YrJr8)M33fjFa>!p8B$#2&*PRL}~97k+D&y3VRe`h=I#V^|=< z2Z96gOJW}B5?Fu$*YqD$s4&Z)47PvbWqdL{^(UvQrSTJ|iuV5UIOkob`U;~9Jl?8~ zU(>ab^IYRr72n5FRb_S+ivoFH;or!^OyjW9WC?(Ax!-&l@2xkyc}}rVpR znovUU3xlFkiIay$DMc;9#b`UL1~?Ahd@R77_~ZsF-oug%i)PSb?>24_YFuccaQY7} z)>YhbL7&hDpr3T4xQ5;qY*5Ly2qJfryx`y#?6hZ%0Zj17DI!`x9Eei40X-P95X4v7 zce3GdeWW@%i8G05%w%3s7AlpV?#=#YZg z0}6s8%pdIuC6^OOE;<2W^kJ?WNNB6=$Oc=0cDKy@k?^^z=H3pj2_2&SDeW)DuAZ9435VQ` zW8w#+3Bn!;keZM*{Z7>qJ?@HMyyH#7|oas?d2RR z?fpHN0M1H#U%s4K4yM}R=Qtn1*%YbCDB#(U*@yWDv@#$Z!r%*8y^)-2$qMV@jC3Z= z03#$AWxTLy5rLCe^w7R-O>@DN!pU#G>tjXxiuQ9Hl3oYL1CR}c`A;*1M4m6hPBD3Z zT~4y{jrCE+CBm%8@LFS})|_+re)J}w8>obr#x**nk$dyH{bSMgkBc|35W4+K3ioaa z+W%#tJOkSCxH;B70Lq?iz~meYhBrLT_Np1p%;0fLhJTkTiai;C0yd?UF0Uvo3gt?fC~CpmZdIA>npe)$I1T~1Ke(D(YVE*r?fJh@F(mI4|^6C zlzTk8)1O=Yxy7F?f1c95al)TJ_UAEvruUC0=cbbH*PapPo?r3oK3n)pp55ioE&NP> zy*CTpsvYPSe}2%PFZs$BedV{tlW*T?|%+^wDkkmy8g@-BW4R{&`@|Ag{XJH)AD-O)r zs^v7r7>zKD;Xs5ngi!}YTJ_HQPu!h1@G+U%aMX!Tv0#VQNvN1NV*;ff=4>fv;KyN6+yjh z#w-uqAPW5#P!G^|sU(OWY<;HI(tt%%am|Gu_*FF(=u!E$rmhp((u}W+IV0NDO$>wf zF~%)z$B~TzW|siWEP456z|KG%66|c&4zJ~KFnPJWk;acj(QKn^e+S3p!s#8`kX&Gc zV-vn~sqQS`uN>zPOnOe$h6@DuwVy-O3}w86dc=3olkBYBxb*DgLvrZ@bVg{aQ(j=> zFRzq)D9Z`Yo!R!M8I^Dn zX1mmu%bQ-(Il>)u8Jf~I(Uh(O4`Hjlpt27fXqyKcUy;%wb&6F&(Wc)+>r`&JTn`Y| zgMj4W>UAhEUbDJL81s2otj(m6C3u8dK$o-`V(leZ{a!g02|U54PAlt47`0PghN4DNgY46%eSL|l5+@aD0pMY+ zvKBoawRHGfckWT{3Rye6A#`p0Y)=i$Apg`RgbD~b+N;c<{=z3!!`iHj z^N>gbo@exeM0y}gCuH85hvbB*MYW@|kZDI-rI`z(Sz75)AEA!%^oPQP!cstn6UY4G zHA#9=3>uCFcHcOIqHi2<_zL6z>W_q9Hd%`**XMUe)UYR1ON-$XVK&|K3Vx90@y|g% z?S*{%N5#?hwtvROQ~bn4{)ZEsyroWFO~#pdT);y8o+#NU3pD`356-6A0oq*U;o|a* zKn~zSOWu4P2Uv~N1Sf(2_)KEvnK0%G7z=;dP%sshD&BwVtQ0VZc`bC-sKWKa+`?3Rv~5&F;r|(CZE5Y*w9KmZt+AoW!c^DT3h4}Uk+Og|)1#1gaUOT+Y;VEEms{_oA8{GK^W3((jT zv!b;rYZuYMpd{*X%pEbC{HhpFLh%Fz8-7K zrLnEL!j{JNqxZWEh|X6>C#k5I%lsC{Ej<@2a5kNU70_~ytn+zpM)V>>`Cu%{jz$CI zh!#pfw!Ls6*VS*JoUP-jz^Uu5YQ%S)Jhn`vbz3~|K`e8CLRWNTwlWn=&syFLAMQZmh60oq9FPE&A!Sj5}SW^ql$-Gs)qQb%IKMAyN`<(moc>WO&jSQ{A{ zBX=c%xLJEACnCr-tBJhOnpdcKaCAbEv&|M%8q-1+ffZg) zr6Jm!w)CLga)S6rb9|tKX46%Wr*k-TbanY;p zLcNEVp)(L!Gf$E$rVLC8$(Y4EDOo5OR9q1{ivl9t33xGPq&k%MmosRP02nAlc2Oa# z(tL}k`YV*hMN5|20Yc_>3^bRyHD}S@5J;v)!wGGv4X{F|n%oBCyXV7LRZ5$S<#1fEiSJJt(AvZ zH6^Aoa|dakN`*@7k(!iXkyT5je7$n%+0#cDQMemr)XkY1X1e$zNNR9hU~&r5$9^WT@mhXUJ`9ytwDsd|$H$53sV+LgL~rBTeVyCgOT= z*1QqSDc*Pu9UL{Mvj_?#rt>Z!0--EggiL4qBqwrFT_HBWtOFdG?5>!gM!tmxVHK4w z5cdxdThNRM;mw#U@8)42iXrdjI%y;T7BT%z2qYaMYhA{K3y8-w-Yf&O8#{o6L#x-C zeQ!>!M(*54tC^n~7e2{j=pS5TPA!(%u5ag$8JLTGOGC3-Bqa@VBMH=koSVKis{& z2awlqb z!B5xyD(@PDRE#DFJ^c})4jKCy9B%RFttp5b8_1Tdsc-+}A=BSY+AlK`Fnd>?jKMB> zK7$Le;PhJ8qx7fF|1WId29_3O~Er$Y)2< zU&Nb~p#LKp+>*(enPJLRl{6oq#RJ9vX65fDB>zZLcd1uk$ubid2VudwrlEK_1nT|b zt!ewz&$7h*zu{##!yPoHy~h^mIBJ1K`?0Rkzb2coVd;-H)Wh4ukNq+(+@XU};{U(okN@-&zy0SAefsA;}+(uJ_(yeocot-~V}txM%Tmj+64NkWZGhp>u}{6oP|Sw_4}OwZI{ za2)Y;@;em+n87(*fYYT#JHUD4y8)+Q*#^#00;kY}OCt{iICUZ?aK?%>D9TH~$zI@0 zSm-x`^Hzp4h1wtwS=;a=fJS<&;dX#hR^+Y90L@K(W`NQ@0c!gKpeE>e)+TlUwQZ2U z05ya)0hDaZ>Y(D9XoOYZP<1(!d7_^VG#kYzY5junRmhKBbe_wa8 z{CSdPww1tYg28$*AqXl6yCdsiIUH6c&|8zP-VCb z2Wm{&Yq+r=%%HOp0?{^I7*E9MVqlOoVrtbiZ&pP@Y+D?qF{@CJ93i*^6K>B`9#~>3 zkQC*%zw|WktxeyTrgdgCW>QwqW{ydVtqZ|JDK$ql@#^8?^a~2?g$+h=JtA;QUm;Pz zr)vlZ8PL_x+uH|tid1a6&!?*4eD>e%0K$p-g+l?}iXxiUAhzF3mhf*jvmls*AbNc) z43wV6?Sl_~yc4j-?L+wj(Meu2PP~Sg3rPb3i@b1%OkmSEIAKq^Tqe?0EDO@z)AakV1UX3R{7dBE(pd!aw4BBdlEGyKRUYNrG1A?{`*9~xlr}OZAN5&f z)nrzoQBL^KrkXHelYlXrLPB5{>LA?(BZtmhC?%@+LR_YJm?a7byceH>ESSB59-bE= zFhe34C-JH?5S&bcr1DaF{~8h?vu{s;SpuCF@Ir^}p+7=O_!r~J-`}Z+03xBJStaQs zx87%3o%RDBoQ!VwaqFC zqO4M;(ABlc`o`v->E3;(?LYmDGY`D%tg{ck{1vZ+>tSYXZ~H~sdA{cdki_;5iuLZv zLq559`N=EtH+LXww&yHAd3k>F37;HTesVBB`N3b}2^nM;^_<3$kGe7x~-~8R>Z_db1zU(*2tC(SMdVcc$pX13Z zm%rJcpZu~P&xgKn5@#I53+14K|uVTnAob+T(Q2~1j;@3K;4%KT~ zfAp6>#ni#t^-IbN@u5LNu%?g1#CiUW7uJX4&SA(U+DxP>sK7f+l8=to2_%flPEbhu z+IW_S!YmawC>c1-}ksSl}=`>(_n%aQnVrfxKNHwgAY@5YRF}E_vh^KDBlJvp~Y{&qtw| zJc7bugx?EI#kK45toUA>W3$K`BuhRz@znd_PPN$?ihg)b+K>#dT{}Lt>n5nOl;im}@c2F^NC#TwHyr z(Gg7?AgI!JgF(Uhd^y+INx+3(G;vHG9HI$I$<#C7m z7h2?&Zjs!%+wMMxrE;VOR5qz>Joxs-$TGm$C3w`FyiD>I(jFA-J!yG=K4V%`NkD5> zA}HG%u_$1;niV0_U_T&QET%+|2T-SM2g!?}q>K;4bZ_nC<40vBS1~LFKw9 zk56%Jr@rWs>nA-z_=D9%M~PjE@=`8iP?oj#FPwY6VF!{&=S`65A+MKB8} zc3|BFnBq`yl*Mwj$1rtJ7S=q9y4sp3y(^UlqRj(eoj38sckg-;>(z917})KE;?0b% zP`t?_aJ$hXZzd?ZHjD`%Qby4HEm0w$_;f(gzHF68rw|#R020S51T%2+V{%n)hZ~w> zzlN-qPu{+_JS##Ci76vmNPG%9!o`_0z`z=V2cu{GLk(hFE34<1X=5j=R!0b-S!j$5)T2RH^t(dxNh(HhC7lCHFU-2+{* z89{p&$9){{foR9T_o2EanVjZSNXlU~hTi(+qlqcgCRH&a9RCknkUdHLAnbNp`#yk$7>kMcu zQvw<*3Ve!-@iFY2%%lt=Q$a_mDUqL{M>D`=J7eSxvT2{z7#=ib9=`BglnIb&GzFx_ zi^QOeL(XT$NswwCp$S(u1sy~Y?tM+?dgl8}iu(#2*gXeD8F0Z1((75dlo_dz1TO(O($>JJ8?+!Jw6I(8c+UW0(Ys!nd}-+z^^ zozyX@=xaKNJ?Qfg_SY}s0G`}S*dgP0cPSw`ncN+Cz<9EoQj9!?Yz?ll2~mpqVBSZM z#%zd95*KV+v^kA(N_Qms1Z{@j0h@q1kMyf|IgeH?cV@7VDUGjiAq}?lZ8?whO7fCQ zII}1m%s^*OIU;>)9~d?A+-FNath!H-s@@bnb-LHsZjW7&C4NUxUCgGMU|!_O%^Vns_jTRa78T(bkKwB@{qGFmpbN&s4%?nQ4%`YpL+VZtk*U<#llcarcx`@ z%(H7{wB=bUqxC>Qn+`>-GFZ;LjLRL&*pX%uM7To^_Iy&VPXBKZK=y8oIwyBU-bn+! zt0PP#+_^_SAL$-Tx)RBG2fEPqGUwzk<0QU}DVrz~a1Y3-$Rq}=NVZF|;1ATHh2*Jz zuv1N0(poGE5Eav(s+)cM1ih19qnA+N=pmudB;2IYB7NNg=b&nN&8`Jartk?-Ri^>zluHSDSsaK=V5;y^yglG?(*k0e{S(-%b%yTGN170 zaep56=i~l-j2~AgzP;SVe2u0$fTJs*e&Io09=89{1NOUi>*Ji<;?EjaD4%iT{oc^f z$Et_8@h`hK>U`r~Z{U1k{%r5(eEN1TVnNu~Y4Yh0CPeL6VL#yz$nYkb{tU^dw|)5n zlTRN&n*{tf|DS;E2mN^`KhuwmCx79LfmoEXd@UvqCy~gSG)KES)~b4~rbrP2Y$IX> z%l|M8|4z_~VUF(;zeU-G!59|BIm<>h^YOe#fi1^gg_2ip=G<4Xh%Uc!o3E^;SMJQO zI2#6vq>AqKm0|m<9#+$v5BlbpV){as@xh2SsnSTJuS zMT+n0vNLp@U=_~xK9HNCGB-nw^M1d1UVxX;>J!{M|U zMuPK-eV8{m?8UsnVXAop*4w^Aflx7dG9z4ZW_&ff{TbLwCG=eW}>2LS&;B)W6DON9FG2hW@2bp#p>B{!ydWBUV3h{u?k-I%)Mh*5w?BizL9$f z?DZVN!4K=!ap-0j6{m3^D==GO>eFZI;b!Hc0^gA)D?)fs8)5*t6bU&b9mDAfB;;CC zlSs%i9g_=}W)GmOX8oc$hct=y+EhVu0~t6xz0^x~A|ml_)3VX^@B!;_~TITpzV9{m`s>oJUvKmBI7 z(!eE&w_{{Hi7jo%AFnc_B7!SftUFc(R;`w+E922{5SwlEz0p7STuE(^Gb0UhW~AN0 zmK43+_fOY-5<2&+RWYG4(Q$$3HQGSXzd zF`%wGuPEf5=U`aD-u$Yf1T)NrjeRW)&#@UZoGg_K>?2*!YO^nG;JSWs`9=ISOnvp^ znw?f%`{7`aMS{-Jv}&^|N@y4*fg#Nja%c=`O&Os}Tb1*((XO=kdYZ$%r%PElFg6d= zklqsDX%HDdu}7WEE-lCLR<~!|Dh+{%O_m1qBV9Z$r!~)Izsec02FI6T5se%EcIH!p z;=R9?av8)1l41QaN7`IoXL*#7a}mldFc*0cQvqg9&&=e)25sQ2gQh{KZnrAi6Z}Ql z;VH5^Ud3$&mtR(HPrnk1YN5=s#0kRG6{xo%-Z9Fq*hzT|Ddw%w4cbE?HZ}F)_L~{a{!U(jc>p=P-SD0;f5ckLXhjHCy=QPNmvGT?-bz6bv3D z`y-^2nk0(WizcO^%Gn$1*bh)b3xHwsU?A4{AD;M36bN0!oN1gQY;K+LtlOW89rEh- z7LJl!wII2~HSK66T?ffYCK}x&Ii7b+f^n1N96pd6d9;AES-~jDvA#f((-@mbj^#y0 zki-8{xsV)lJ1aYuNbWWuA<1EFU6bV4!grbE%4L!pFO!@X0dq($EdsQ~%OodT3v5O< z8g*o+&G-e9o$NXMzH6Pu-fq(GlgVyf`VbI_sJ4?`q*n!kK}4)H`zpz9HcSfE_)sC2 z>i!sVs8N447TKKbaOCi^_W*;aE@5ncWIL3 zeLMN)tvQkA)-forOVH9*er@n9$r(+5xYQ`|AmOi#3uCP4L>yK zGM>l=+NZjti`-YSl^4j`6Zc5+7842M7`lvXFt|lx?M$bcwTmTSLM)g_J_%$!Q#g!|Q_|6P36U#{Qk+&qCugb553K&;saz z;keGMoj`+gEVd|^iy*LT5}lTC7Kww=gT>}#r^qpotmA_VJ zZ%rJAl2)&X5qOwyl_>;b-9E@wKd!ZR?vFcp&h}2iiuzuG5IbRM)ShSfax+(2VhPK763AFiBH`=79CFFE-W^0(;)F7 zRxqCS>`^<<{1B;b^=B5-Hf#c2s^GQ^vg$lXZWNZcc)}KqA|aWf%Y?R<_DD!Vn3I0& zl76^4oaE29fj^K8yZw52>uj_L^~kx#!#{&3_Z-GV!V&N22LsEn&a>ngq8Ou_g%d)J zeTTu#H=NNnoci{GTly{N$j0{#LLR|SS4mUqwz#?L)5uD#6!YQAo5Y8vhCWaIC;Y|d$3rPPGGiCce zK8kg#L{aArhi?7X+=?ZlH+5$seSWY zwYp@voy->`em5B1Nh~bnI*G(@KLv@ivu~XoeVtg+hL04Fa7*BzcA{?IGE^&8kYHtU z%QFU8eaFX4D^_Ra{{NSzDmDI^pYNry31VX;QEt zgVql*=tZw@4Xjrk0%G(vGqbFI(A|vUS^c25`G%sa7-u{H=w{fM=r(*kJt!`d$sZ?a zKW(FjWu+T-bm zIX$m?N?klb zsgP55!{)E^4UC@fM|(juYGi6l))ND=!eT*+rt^xIPwxs4TmbBEumNwxhIOQ+%EQ&= zZ~}7+@5l};MB7gXPLV~;Y71VsjYlpl{s*2(_rWrfEXVm)&?tGzvOJi<3CJ_(>vM{j z<&AO!fC8DA_2=2~P#6&tw{=`e%d!%7AaE{*hG;u(lcS4Y`O#XYy;?zrd$f8!v40^- zBohRp#5^M1mV}9`P=ZKLJwQZFijPWu%Kr#n2>(I*;QdYujEd6&R{3USX-Y8Dyz`z7 zAG8niYD!`dvjiBul9sta)69E$u~HNUHYgW^XbB-#F-C%kh(@F7JL^dt|3Lpz1hcG2 zUk&e^jueLeLum2qH;`>LW-?bws*BNnb21di_5l{o%i;xCTDg{*&0s$Dy9NC`i|^x8 zVxdWuh&EubRbDg>p4lh3piqb_RXH^ALtN1<+(j;^LKty1Rz_jPT&}xh7AkGjkXH8% z6IsxE^(tvO(+Pd$N*kCHBeS(VvfY$4ntmh#QhDL2QuOuJr%Poa37sLr>XIlNZV>ct z!-E;@1WO<+wzZvT8djv;$#X6D%NUX-5DG+ym4Z2DGOHD_mxv8hQ^f_cjGODb;AR9_ z?!e6mwLBR&hdpj$ug0%vbQj|gqtb3=+#Dv{!~(YsH#NK`+#I$y?Z8bKV#dvo$y^$q z8#+w58E|46Oc;pm5L}(@NmhfLw<%CJAuj0X1SMk9zyW?k6+v)NBo%uxr9dLSF*W5H zh~Y4gNFjJEfNX*@Xk;*byNe1efG@F8N9qM$MGj54OjJ;Z%x?y-cR^-W;x6Hxq(?!K zix9!^3TOr)@iNWo(M)iZr#;@gjf5z^EBb@oW+m#e9qiW}*j?vzL=m07(oEYvi*vIl z`t)hqwL}K=Snc?^Qp4JU8nmDy0s^AUg*%)_u#g~@XTBwj2Qz~)KLf^hvA}`xT`X{5 zd=3TfF`l*K9mb;@Ji0Vd?rc;h)?H?0MpVw5=Z$(7aYEDqK)yJK|LrHIPoyOQ8xMk< z+}f)l&k3PKctW?S!MWeZaU+%B8(*2Mj)y4E%O5cD`@vw>55{XNRgDnN=hw9l6UX7! z4zuwk?|k>ox8A>{Dp6nekxQN`-#OoV(}!lGOWyJBn{M4|8ZU+j@5}X*t1H?tS{W53 zGuawT#3c#ulSM#IL0Z9{PBepY7w@T@9^Cfbns?ukZwI7=Mdpu6OKk~@40Z|}La$Ts zs7X`G&&^2}13Lus`QBo|3h1iu-dl&gg{#F|*`raPQ(ZSlUucvIZYc@3X9b=v{$PDz zd^ibQ-G(CJJ(LR?R5S#gHymJ1g>bO(t_ZfH;Jv|tQ1r0VK@#_S@Dp)5wTTR+2m%5QTgv7m?wNtKPA4x;w)4CBV*>v@qj;UtL70F`L zhD+ISb-24WUL=XzxV@=1F2b#B@L5RFV$24ft0zr5r|5ZeHi zDd*z2=SFf?&PV1N7#gk;kk4ry=I|V#&KW+AYh-B-OIdW?S0JJ~o`Dm1S zODJ@mvB2`9V9R99qcss>vD?S*p-EkKgzcZ(AO<$f6>?=|l5ik~yDRn^;cT(rNZCcS zbUh`aWoJi;X&D;R@?1OW1_imNN{L(h!j|a>Ah!0sw7{Lc-0|gm(oQ8idYC@k4=xHG z_^xTvqNtH#r|Rr=WbN6hizEvURvJw=43nlCBz`F=Fe|}{mWMPV(kAXVoNj?WIVK4? zUz7?~)@f52`$DaGn-NN#-pq96rs^E9W`XVt1I)8%(V>W8UQDvG9=Xp>*9+CeN7SejrVB@!LmBcSMg?vQ1l!WReIHRWp!!rvwtAU>!%q(D?71NZg zu0o_4<}(}w*WsZ52&R-RB9UZD-p=nR7@NVL+p#ap*v(l+wLB{&w!q)8w4KbFJ0XAv zNMysg>4$D}R{u9QPWCp|3qT-&!_el}3`*?Wr4>Wxe6 z?kwlzAxWx^M;5A=xj^OZbPL15;#)8@rM7@%oPPjvvdGq=u5MrsS{^vOH3`fmQoKBA zp4DVG^TSXnZ_*9#1RBQ92vx)0GY_MYXyZ$=h)9I--dDU6{#2_y6uW69L2q zw07GT2r(t(#lzKAP|~6&Da8whTujW#-Vg^TYEuK{-oWC!-f+{_b;|xDb?V+Qm^IC1 zk2L4`!AuliuaAJiahD7pfKnhcQY8FXNc|Bhr__%iH|UYT;^8Wy2-TYI95Y)dHqT^t@H z^!Rz({_p#>&fEjGgpuRHm6T@D1zi}GmUudpP#tkhvAmE*yT$SdedTCec=rJng=D*a zisrS4+uMJG(qqrvVs>(7DYh@IVWZeOaohn!O6xOANxFSzDS0WWffBqp^)e;OsoTeE ztqGc?_@d7&<>!57spZe1MZaDyfu%Jn`tn!uA)TMN$YBqpGh*_4b-Hsd&*dAi8B`8M zwOYw2l2^O5YcXdMi*yx}c36(2{gosQ!eDyptd3At80EDT)R$~Mj`+2;ej!%R`jS7o zA5rW*Owd00Suftj#cQ~@lZ#utINxu$xc%*19QNWPTU%QX55?vBlH1?T1**&e&fmrP z!$@FL?{j;LlvTLHF8RltJ{-a#G1!s^Qbk(K8tl<^hjB;Y5)qX_f=l(i)?UV)-rjtcb*`Tu+FK@HKvUDUR_x{4f?gZcFBc3*o$E|BUz8NCdu_nin5il5I?d+3Uw+ec_Lkv8s&QYCt6I zj<;o=b>p%$)ewjvn5Rp|7_;OaO*$4Lg6@Uz5oQ@eaaEZ$_aOv~ZQ2?9hyh!tLll_B z)n&f<-qM^+b~}`^XcA<`jU0MO1|7VuU@S9G1wTunmrNG6FDb}L*r5h-$tLs=rFDAF z`fFNm7dp6<;UA?rJ@fwTe_KvnCGs%5cJpLj+btW32G94&b(fq@^Z=8Cb9EYvYtim_ z>^^ioBlb&-7^#cy3&A&N;?Y0lg+;P6ZZltpR0v&SzcGWKyJK*>FsA7cKxH1&s{@KS zb8;mVLTx^G(Q7p3iX|8w6ci5GPXM7iT=$W)JS2gg@8@@(Rd=fXi?tnfq+G^f*~V!BM*aM%Df1}T>@8Z7ic$ApNq<+{8<{BD5!o*l z-?d!kJgw%#6aqkxj-5*jIGk_(X51LB#tBu@KyJN8*Hgrbzc!gZPx|CX(KPg~insy}0b!ytRdx!^uqs}2H-mxF%81P`&nuXbuWLrHDmJh_T;oQ{ z;F`1-uBO1;;Nvxmm{O1eh&dsbRJpoZ7+|x=+WPv9)np&|@khbriFiBiMa{1tL35;_ zDdb_{fSh4Mo=!u;9Uu#(AsWb)dO>qt7B+%=r%ANot#hhZW1TkIrI#?d%`O+@QUwg{ zZCdE@c6fr*xno3Ri2(ejW4`s>|0ZQ16;p1@7gTIoRkCy>n&C8PCXxr^E#}q4g|s=h=h!G)Mn@;vOUxSleQ(i-QOsCUrb(NzUr5|ai}Fw-JZwYTR7vpuwXtsgnG z8gqQn0*i?JqpXQ!r5bMy=oVt6dtab94VpdJ7NjV-SE8+rhV4|6(&Q?&xa_ivBCxTq zcaWeTr2L~8?VCyW22kgTcedppbw`s5GEUYD8Ws6RYwp&Oe{?N1CGABcPmVgYcZL4O z4o{x?FXta!AVZ=?C^ayoF&{6)`n*sAyB8F6AaP|jb6b!hog@qR{(2n$4fw6bv4C-ja&aEj^qwEZp#-h0&d*VRkag0 zZqE-+i5o0jc?mZ)RRvn!mW+Kw&zz?OZd!j=<1@yP|Y zJdrP61Z??YSJh5zc``pZCAPQ*_5Ww@ZGbJiuKLb%&$;(~-TU6V-ThkK>TXHrUbXGl zrX{r<*=pJ%^y#uCH7!LVPOt?qNr*FO7W zef-zjYp)$z_CHCI0tADYyQCxm`*snJ_HN%P0R&hwYr1#!AVjj$g;V$A*K+b32zW{# zSDF+LO|Pw*z+X&*FBtC80e{$7f7#lKzPSCUS3h^32P zdhvVXBC&$qi|NU{d+{svlg0eS^kjej;*Ug`gYLy=>(>|NFQ(TQyBB}2esXF4VtR6U z{$l#jO84S(_3Oj=i|KXj_E|HZdojJfI)Cx+N9EVL7yqCxbG>`<`T8P`nOT{C%taP_ zRJ*u{MO##V_dg&r+!00p((dN!N4r<|G*|yo_bPj5rxJd;dv$Mf_2-(a%*S29MU1gI zq9T+tjHXQ?GSE+pjA~XdeEJu%0NC{gEbr0kBA%7Yq}7Zmy(a6v(HQ~}%dT_s1H+q$ zJUBq*-CzwsKj5;9#pm#bco+Ts7lg&x{p&9Xi`xkoh2wPl@#F!*6^8#p3l0<6e~vNP z?UZTlGAhOZdL0F8%F4TFQrcd1vNwOuTSlfgyaVz`ItHB>}T>U zZztH>YYae)5{Pa#bLNa^L&*~iQo!!3k;g_ga=nZHBd*K9`-ET*JY)~twbZ7eRm@^q>BCg{hJGb?Lc zO8#({SFF)GJC#AW5juGO^R3I+%iX}W+^!mRv*tdqKg%Qu-<*RsaI7!WM_4h2s*2xS?$?-7| zrMGmNf;ebxE1z)CrU+L22L4}QOX7HP8nd(J7qxVrBeo+ zSsQ%H8cprjnKE!@tT}fU3xF`PT}#s}4X3k3oU>tWjNVvLZzJVOuX`SSRCnx}-X(H3 z{z#rur?EdrpRf}K`fmP7xkk<-{97!Ma$dCa16HVd{1=$V{uKX={~)?FF23l+ht0yp zMLro9ALYFIY`Vy$2pM@ZVlaMI9Jp<$V;bo_z zl2Ef4Qz927vVywP7xB2uD`HZvOvB8u`DXJH_$lHB9$_B7I#NB|OvnF#GjsXL(m;0z zKjwq-Z3GM7q`3sg)>RdsWVIBM5&CSRDj8Nsmu5M-DZbXl^p1Q{4`Renx?5v2yfLNF z4*&3HPv*mW3v=@ra!~9vf76W7t8q+oW@Z2|m$!S26TXvHcoE^84~u@)_ zz_4YjucMD=fp6VDTZ7%f<-_(P2O;XU+(LiR*;YD z^2!250|AUv^d*z!)1`7fouHjDRu|LC(zTn4$gkoZazhLZn9QJY%I+*5r<<1f zXnKht%j2em0}r`?7w`A23}hX`-bPMDjAtL4W;S3y#kK1)bdm!$8zQ=e^JC}*4x5U@ zLXc#DD;JK+tW1Hxo<{SAA#@y|E!6GB?Ta(( z#7VrF(GPwgQpPzO&PNuTw0B6l_%h=Zg{Nwa*aL{q9?1qbWvnk`u9$ZYH>>lq>MGB# zYRX{GAniCw<0j0f!aMEsxwi`H0aR@ zay0GQLn#{ERRRWtLkl-U>EKA#?uFWo145ds4H@t#u}ej@l?|!hl96az&O<639F8XH9HQjvya>D?MwR1{dJ*}UIKIglfz!F=_$Frr zN&2HanheL|hrN7`zmj(t!db?MSH|(z@;W@|gb|^$I)8%^)s8c+A2%$IDIm+&%WrR8 zU8$u4$e?+omI}=Z-4K=_0vgrhPyft87Kh2_5uPgvP@uvh4@n`>sFk3O6*!_)=J6`$z%g7W!aqT)njHoH0%S0^m4pI%fxthSQZXV ziDOLo zGE)k{w6!eXdl^i;Z|IhEf0<0YmofPUn0SKtAfp)Es7JCM-g!R8#5}}44#3I}{bHIX zf%p2=(=NV)gB(%>nSd;|-X#jeSs)I5Mw(%UZzHwZF;K_O`kerB$YRx8hh+8i9skO_ z>Ttu$b(}ORKD-TV5uxp<{d*Ov0)!Nc9u`OJboZAz90$IE;ef}kdG&`wsT;1umm7|x zVUN<^GAW}WlXgZUQN`S7plP>{25`9XMz9E0T!%NpnSG*72=?hs@)0?$TM(bJHH;WU zo;B$shZe+Z$`~uUx*DQ5zf2GhI2iH5Jcu_Ae#FWd=?EH;tb=^W)R6Ct&wFU=e$v*f z!Im72*`wrl8H{-~KvlVdRD6GLc(tB|S ze4bXbiO;XTl=P;{kEWg%ge$tkyBW(fHIIKi2Ir&;26*)5q-O0y7#D;20A*_)mibJ6 z?})``AnY1Cwqt4jIbd;XiuZh1xLHTLE@p$}voR(MBl~{F%CI^*Hb8Y98;e-e-`HrAE?;^70?ijBS=@|lUW`l`u7~{MhRuI`NQx#*pvcnkHHdsgx#;FF? z+cY%3q%Gsx!)r|^b%zzsXIRPblZF+VPFt%`Y)2;xytMtc)Vi^9iObQ6<>u&FI zGW;(JL)!Ls6ijFfWR`g-V&y@K(L~XJ^@Sryc1Zk~Cczm@1t6;qg;`PoX?8`_U;0OpQPGZrT}6z5V(gtU$WMd8!Penm?*|_Qe)>RR=B?%@ z6C8BFtK+Un+1g@mi#RI#T9*tyd|jJ68pEpB+8ActE!!Fg5Wk3Vv`xJ#AsW#;Q?C~_ zj<%>*lJhzA$=#rOfSj7jTtO|5f3vFh9sojQR+-8Zb~ zV9;e%mZ<*!m$FypDSI2Nu#t$&7|_dyjsdb>IduF+sC!2@Zj8$|)4v|UV8$3hkRjB) zZ&-c0q3-Ij_SeVTUmtFM1*yk`iT_B4-4vQS0ik2f5#*kmsdqHC^oqZc! z8M2Nu^S^KiZ|+=n(gfkDXYB~0-}Egwy-D3$r+yECtFM8Kr(w?|N03MWdrVGVRBYg4 zs4mP#nrMYuun+H~HZ{T^^-rBTD-?mMkVW(mg5QK+bVZth?lj_$gFE{YZh$njGee15 zmzdDEMXwx#xX(&gyhY-y?4lUNRM5>Fm>48dMmtpvMj@GWnzV+=5&BHP)q;(vO8hV# z3{qEpUjNe|obdwL?g+-TjQqS!O1J8238txU4KqLfAC2OSXo_c>th&$* z)8$TIC8-d!6E6M`sl@+$x_z`@f;`RVf4sR?eXe1#>V?_0_Sa+WuXf2PVxw06g}E_q zhU8KPKG&DC9{jEHW+wyRJ3M!_@|*LM)STb-TPdgHWxT~J$Is64O3soP%*wiC4V)R3 zWvGCkr>r&);C)4}xHo1vx{Ez#dIjR$z$2UAf9q3U@6*jCf=4je6q= z9t2T=3Z?iYB8eVT)*xE|R}oc;LymB-o!8BhgM`(Ctvo3hbBQSyRaP%$XDF1o(k>~~ zqwnT*EqQRwNLsFK6=@NxVZap_udYYlMk-QKuZ49L>kQ}W;rd;pWq2eZzxGEf>U{l_PDra#V>prFx8&-#t7Xm=Y;>!?QwN2S9B%ZByXP6dkSH zNztWs=4j9(S!~*t6rGYFZ*o^PwZoMsBKqT%i~tCbv`y!VR-Gpw3IZfvzwfu=|GNB{R-tgKfVN5ot^o zVmH<);9iAbCAg9g1PlEt3p3p__wRL&-Wovp4>NwEHyzl&P|=sXXFbc|f@m52{L#FzFIQ!@FEcLsI#6%30mxSM0Ui zi%;#ack(|e6giYU?TsH*6g;#LrLo5=r|tjF`3eBq~?FIY7F)vIgLEuP%yWRkIX8)=9i#}UQIq&k@5 zdiowPt6OS3`AYhBR@U%)a`Z{678Q$D%M^x**{Oty&F%9XW0$^Xq%uZ21DTJ%Xa}J& z0j;noA#I(3WRz?L#GW}7nD5ZNekq2pu>E?Gw{@?)65ZSLIO|@=bElne|4D?mI})=I zc3_rfr*x~`IsAtq7{30!es>^j`lH!neH&pz3k?;g9=RmJ^DSfJ$yhKL@i8Dac0)D#KKaX9>`)JKc}{TKaBL2~>n***R1?I=ZS(9WyYQ$dZX zCtikla>YY;+vNH*5s$oS&ANRReK`D$o?8<}C)IP6p>OymJR$*1<)3`JAnfo@-zOx| z#Gh4&gu_k3*d&$a#0ExKJW~VdR%~oqh+n;ZtJpBx8P~~A^Rl(!v9?0P|1zR!bLyAW zUvS%Y)r7JOeCCq!fMT@gqN)kHtgzCfDuqwHe8kCNwK^f#JwSB>=u)23PCz(X-znO3Kcp@| zz=gTZpGx!m&t7`zC6-f|=DeR`XxSFCm-Ul7TT{NO!;6b;npzvaPE|s8pjH7^b?i7` z?=ZDRVV4{@BZ*rT2+;Nu><fYok6CpW#*|y`j=Z%$aT@mATtkip_bU_lWiyc8y z%M0A1Gqp7^hawe>{N#bTD6YH&yCaf8!25nO6%WB0bOR!nNzNoQDuU3-_=w9nZYSO~5Q^#D$dB zs@i=IaPfII4C8S#My1EkPZNq{&1CIBaR&G)D&VTALbnTZ*jyUbTQwbHr>2?PgEW3f zwCZzK_%qHK=_RxShhNCa)o4H2nE(*GuSW8HC+oQI4&4G~Sq=I`9seBRo6J^J$Ytv8 zIwNG3EkuG5K8`hY;g{>lsp?rj=`>Y-Z`F%;r$u#Nk8CFg5UczoOBO#_l;+8O#59tM ziasHv=pA;An^NiQT_6bE)RbyXE0TsZZ-%sA_hdb!KY#DHr97(ivdMrc=A{~OwWMdTt-r{2` z>})_AV}%kej_k;mbDI^3#B3a)wub-eRBX4EJs#+!Vmpmbf?!%3?VTp4+P3GuEpC(1 zt;wl&x+;vrv+3~8Aska2He!wspfqOv0_U(LSi>0-r?hp&9EulG9U{HkZEzXufPyK^ z#aJ$!=Wg>AkWG}EzL7^TS!|6bde|FRrONnJE*!H2F_MvFJmVMX_~=I?7);C({Z7aB zT>XZnZsHT6Ut}$5hKFH^1mHeKptx%u+J$D3*)u|`c*~dzZeq(CYh|$_$XJG^>nP-M zCqS)e1JqW={~eMRU{B8+CQ=_JK2nsHkn1<=;hCx{R_Ay;-h4su#{FZnbKG7LV!+D* z8N=t*jdy|`t4Ebt?({y_A7JHJ1Nc9wd4ky|0iZ%$hOP-Np1Ku*zgPz@-BrEBen{;` z*70*D>y+loIu?dTO2x8hBw3zlve+)k@+8TMT9TzND#ZYk>|;PbA-Rx0wS0mb3YC$h z70O7xQ|9N>6QPMzPv_&g&_r~xLX8J{+XY}eONKE9g$JF3@2IW*vo5*K`y=XC0-nS1Sd3cZw2MYC*cwNPR`V z2RjT`^<0NhP42jU*E@=Srbo)bIqVMvH65l7QEVtbXhWSwnx{?;aYi3z zu%}Y1Xf=Iq=Sq#yxh$OxO>b}K&69KLK5x`L{?O3>MODOu*{riEy{q%x%H&fSbCwj^ zKRcYlgk?b+B(akWQYq0j5B2#KvOZm-H+#|d=~1M7ei>4p!dfYxG+`^rTPdHbPUbRwP>!rI7Qg;Vw`Rrr>k+AI9VN6_bkwHZW$DpcU zV^9-SaZOrE8vW9|Aos^`^5oFWw9PTwP)>kbsKmTmnrX|_&~o*O}*0qDa9HEgMkgW360RPk2!t?ds;R2_u<)tB7dpMoWMD>5+X{E;3Rh}7rA>^Dh6nr9Gk z03iyFL4kjeVrgk~Jrltw>xyx7!ab7~Mt_`mJVy9YSFCajq8g${b zh@bcrq%->k5m9JK71_*|W$?e1_ZG#dCA697*dh>@E=Z~!IT}5#RS?VYCNwSWs$wAI zShj+#AV~Z$6wYFQ$giR5BoA;H#j2NQQ`+f*#Rc@P*w>DVLFZDCX*vUmsCAbVi0YNv zf#wE3(7X;a%(z){+sfJ4JiJCs0tBpco!ZQarq>8dqvSvz>otlXLp~aSr*;^{3QPzw zV=}qL7KrKS(sRB(fM8|-+JZ^)E%40o!p{R+%_RrMjS{}_omp@QV4`@Vi&q?u4< zMSmtMasJ$YksrJ_cSigPw(^G8sAw;YIkgiaU8C*hLlN3x9jz%jf-AjOvg6FlZF_F|egL<#+R;UiFNz4kR7lYu7Pb+{RBAWNv z=$=5hiP!36;HIz$UhBzgoxHK~S{*b>Xcqz!7Knu42r?OGP<^iLhw#Hj6`G!s<35dJ z1D2B`JMLW0WXu)nsS1g{S*Tuk=_NL-Ifj8h-$xfaOU`FrIqp=#LWL4rdsE(<{nzjH zn9bvF=fCbrbDyo2oyh*LVJ|DA1v;o6$KFz-G9b~N)gxqfG%mK?8La8nM-7ino&9k= z&E>hZzcCz*`u!1q_|IQk{_Brc$6GG7r}4^Yu+D{r`r;DD<2T4^I@QIkX z5oa1<7txC#gGQv^HCaLEtOP=j4ra^Y2BGtFhS1%LI82!p#B|7iTt@KIlui8(DoNhX za$-v$yR+JLszs-1+36h!qZaMaeN{#_9bo$W$kju1;~<;+FXyb^y|U0f$+8}&N?E$r zh{L=>tg~Nw^~lr7d6p;VnM$c~o;`Iayk}lAXvkm;yk}4FLfYiKH*sI>ig+3RigNK1 z=;iPbmqVu4bd1P7kzI*2Ad<(8a#@p$Y@j1zw-#xG2ng0rui~_r_DHm};j`dkJ$rfh z>EJIj9t^4vLPPN5jE1u60c6j2`Y4Lo!VnfHs_9kXC{Zed9`jcFE4ByKNArd((=1M1 z(?NOFO~r-WB@Y87)TG{oZdFYbLs-3ldPt;F{rlO^U-M`6@V`c{u_wuk9BUNnsCPz@ zGLr03Q!5)_4l%WZkrygs-QWxu3gn8XRcEgfj&dAYJvy+PH1(nS0 z9EeE*1V}dvb#FM_V2Y6M0K<^)u$q0l5?`4Bo1S1varF$O>yS@Il(7iMS1Y((`SnR; z-fI)T6c_!kzHe47_EvG_rOHTopkFOuM2V%KRPaIwgt)`c#$#4eQ*!6e9AwkD(D9f} z@R%_{CA#p@W_N^bFHYbx65>iVb&=sHD`7>l=ME%?L4m;rX5lVbNooVD8(El`w1~SsGv2z} zQ08gumyw#%{!zLD+Ake^r$SaDg_j$QHe;2B9K@Z5JdgjDF8W`6Kk?1V4tztNQ}~96 zZ9V~&v6L$ybnuOn3thg6+y~TMDX$A}lV9lW4&QLr@(o7V4)jIE)j2jmbwgiW7LjOJ z^2#fxLh$h`80@ekR?=M6jzkIm-hn7dYqy0c*XhjB#RziL668pNB%`!`f+2nsnL)DA zH(B;yfzHPMUqWZYJB!vO^fpe2i6?J|Vnc6Rd8lr!p~M;OwIoMAZ%R?fzC5w;Y(p#v zRT8fSKY2kCW64ffm*yI8 zVHsHu0(dZo=J?R++x+MDYCQh&#o)~1I+P52$Mz(Oyhn=nCVxkD-v=MRHwjUVt(sjo z=RjYuZ#Q8J$^<6GPK>=y!@Wb2CdO<9QSTrmRb}q)tyXK~15YdmwXyzc){CgBtt{t& zH7xjYT;~pqAx&M=qAfJ*o$5)vMD|)cNRd$_#wr94wzJXa6OUkGt!Sge=@RWrKyO#+2GIn0sbOUR%1;>pobRX* z&Qu{G1JLBr^yMx@*`y~OR-pAvg^;Yjp8CUKz>N+-IRefgz&Jc5+-X$Ew&z|SFLr>; z5r7PCG-;OZyd8nVVTKntxvc~*#L6gg6V!Ntr|Sv?oY`bJuqWKUN?tC9=c&UC&ZII^ z`O5)kkj`Yy-W!)D^l^NKg|_kbQfLl77G?#SL&{8gqk5!4DT+J)z>U(7MscA~++oD` zNAVy*8)&wu)Za*w!!+nmm4@+&8qzT0dY;UC+AR#2V5*v#H4}nyDFrU1wNN*27{4$1Wl}+kO&3P@oCI?X|}DUOLL7kFtIHgzkp?{&X6E|icv9fmdH?l z0cPloc;PQ;f2Oh`-7ue^b)m7?+Jj2qR&nws8SS6N*JVh9*FGAa#c;v3*FMfQCbp_C z&7Q-S&!6nwRD2Mle>4AdZ%WHtOnPhva#5#JXhfEb{;zc| z(3V(;8h7WslLl?pIyyWF?groIdpbNLbwD@#!Y`DtOyq~(2BB9%!4>1xypGp`B zs>qD;2xUD=%6gQPwU15q)k0{_RS-#XXFdYPs&Nl2X(7dgk>!S2v;@^Uhu{FBLu&WH zQGU-%q#k5h&lD&K7~ZX}0oUi${Dx@8YHwxCPj`#Gy>3Arzr& zAkGc}*h2`^`iXk$2NMBL^awazUAzLt%^diO4mUa@0Lfzd{dOE}(Us(%3;?pghcw)a z27vg*lK25v@z(%Euxqr87nnv%ragJ6lOsIo%`_L!M|37Pdb5nPj^5OcUuIK67}@6< zy}9kVX;Vz2)h4XXSw`W~-L&X-hLA((%|bhy6RbffSf`Y(IwdL zJU5!sojbR@RCb*ff^l6&XZkrK8{!jvM;EoX96D1szOJ~A&Ljx-@NhI8vJnoO5Y{Gs z^#s4F6V;1eh$&bKd&gwMGT%NS6esoT)A9o%5}zHDVhxS6$DG|21nzHoAc$g%HCN0K zDnDlkm6L=}vF3_o&0#;)L_zY0NvcHa6AA`dE=_|DAtW{-&v)1+A+&MS)<|wUU%&@* ze8IB`$ps&1gj!&S4=O|=lC!nuWTq8*^f(V8Rc=hYv7J*6DRBsE4QnngWgz z`1{or7`T>uz>sx&F+T`Z;etFHROMttkgK$tSmt)L#FPI9YRtz!6gF%vQ87eg@@(n4 z?0Reu4o8s`TzxwpBMw+Y5n0Jk7DX6#h#jsUkHf93AEO4igq4>5n&w2w7(45nM@g)x zYuUU8F34`Y1ykk$H){KdKH|JF;`ljZ5ucljx1y=3C3Os7)1VYN>ZFp5b`))N z-9+XKY2X3l0O+Kf(bgQ^IVB_Fxhb9n=#S2vt{Yy=uXjwY@Nm~;cRBXQ@#&T4QimU- z_UMVt$yHu|D}IH0Z<*{WPC8KKReW>z**9d_g@;T`Ku`8XV|~c3SMFMkYBMtdIq>() z!EzV7sPO^*k^piK5AQxZIZ!U^R`8E9zubejvcliX!#q;2k}3DxLApQY=d}9AccOe~ zvxuAq*zhY1?xft^9%FXCUtVcWg;guUibCTfe8m@h`M}x9!FbO?S;6P)2WRi*=Sr^j zX+yLnBp#b{e#F%$zwG=tU#=c*&(>)QrfF7Y?ySbG$J<*tO60KU@^ySL;s0{7aTWMT zKP{IFoD`FsE`=xwOQ9EyM66EmT0VY|9Vpx|IEHBq9oV<@4+a?RJWv4ZqG8m%Iss)v zuhFDwFXh7YVK|ab&Fx(c=(4yIh5@%mMC=Kkt9oe&N&-D7AM7c{m|JP;H8F-+ckD_) z3$m0lx$IeVp&wrBT`bdd!77>$Ss=9)+V%#15_W;UZmYv zrM=E9j?YaOfxrva4bgIMP;u*JBq-uEx&y8I z?}Mt#Sk_>iSVlkH*Iv=p56f52%Zu?0Y-jjhJ=bQ~4QF(yz?6f%5zIR4jRo1QW`{Ww zx5Eyip)NbbyyvV_I_walnohA^!4C0xWZHZnP|Xl?c7DSUu-`(LA)vx73{mAS>>8FE znxDgRZ$kE9d67Nyx*+@VYG+&n=Z`rsDWe&U5rXeJ8IyoIK^AuGu-pgozvV;*2I?RZ z2n`G>SVI7Tkd#@^gew$!qH~f*yBVfuI{fG`5#P~Xp=IgeZ^-(r9)Up$Y{}Ifqc#J`l zI|5W2F+k@*{Q;`Y%N);rJim#+1s*(+9peh_QQQXA_il|A(8DvR9_vI1VEWX-N~7Id z${M_-M_H#VJ zjPlt}p3#J&+SxA0G@GsvY=(Lb=gl!^G~(BB0S~iVZwFi8o4iZ-%N?hnQ0zK-c((p^ zlNpSB2;`cdtBL^8VCN@(4ZHC*)w3MJi&4Gcg%j1Izg}NRC5vyI;=+Msz(Fs75z_Ju z7&vNhbq;XVgv3S>7jX~?gdvp&F2ZsQsDM9P+#FAF0No@6)Nj!fnztZ28wp29T~v1| zCTC-d8|@<`Jjs=|dZX!$>MK;c+NfT%_P?u%frIV3j6q(nKI^UBl)QendeF$Fj~KS} zWglX_l`4H9sr2w9x-(smBEWo?||QtcvsdKsT6L?fVx30R>Wt`!6y_-U-Qz zQNwLsyrUh!dy;&3N6MRki+#@d-ul}e+8NA&HkzrW@Zh(CTAb8EBf|-uz@Y}r-b0pc zHC^iGJNUDrnz)+dyVI-FIUeC1t9=|A>%au60pSZqAWksuj4VYR5a{uiEN7K+w!kVq zkw<8=MnmAy>i&NTO&Z``ea-bT{`$dTzH)EhXy>OeU;DFI!*9j(OLFV=?XPd*SM~6} zf?W+XNO(Z^ z*D{vdI0uR^>&NahBwl#!xHG-(nwgdA`Lt#R7exeYBCCP&>0Q3 zDiW!Nd`zObZsNC^NX{#+)LCNsn8a~|(hwgqKT*TA= zu3ccpD|l8s0g&iBuO+bsZ2%&qiI8<|4s0?7d?>FiIMprIW?4f`vsg7}=_G1>1QQVVghu9>e@j(;6j|_th z<6F}aTs`x6Bf>+1ehT3R)9CzuO!-Z$EX*%G(X*+ZAEV$|nf5Y~+uKX}h_5>=4L|p* zk8#$oK1z`dYp_TvM0yNM5ud%#aS44bEe(pGk%CzplC~fv5mp9kBg9xZke~t_&1?+U zM&+>Pcocx#&RB!?xtoS(8k=48tBP6-Oxw0XC{h zXVK})M$X}uJCVH=7Y$M3Y*6FtSsm4^GR-Np9+gmoMis>%`k00wqt>1yWn)+^139Qh zC6ZnQP>Z6zz3Yl6`e0{ndO2PiG`v)2cB$7Kh1X=unj^2(p1yExnAsu%CU@qgVCK4q z80i^5!AKg5^sM~ES<6ofFBxH}e-hX?Fc%y~I#Q2adqcwE*+TQue5A%)dE0)Pw~ehuPSSr$S0)IQE07+r(g_;C5SNz=gf4x4 z(Od*fa-~0x`}?Mgu}U>-BUAJCSNhQlAD+uh7n3{hJ{PP;KC~^V2XfL9C?Lwkm?$u< zL%W#OjK6|d1#VjJ&0=Bv$bgdwu{IY$O=>tmf=^?a+!IZ(%*7w8i%UAg9*6+3gIC=ndPxt8TcXQHI|P$fm>E$=bZ?#9Oo})>w&F;_8=z2VtaNaK;iS#Ea2I{C8T2Ow#DET}6%0HrwN0B5 zg6(3J+~PoPD_Kj~OIMP*sybdtC0Wrr>9tx(K^%d8bWd`)wm(px2+P`!o6_wJ|Hp-V z`QC+;>Na`)A-ZnM#@CrV@)uucZp2@_PHd^a z_Ukq1d|jRoXCoqcx+>J^D_CnJ>~QuC$5DLyM1Y~b1FV7Ol^PC#T@=1vslgB!Mr+BUa)a|0Oey zWFHKmP%mla6XQ>rW)^xUABP?-S9Nt<`7ayVY?crwqIfwXqykuTV#I@x1V#g3o<+Wb zV36mndd_OdxIaCXLUl+nQIQ7w7zgIbAUdKkbiW_9H_ARrCw!-^KVNUn_s%;;S?0Tg z3H-I(9AIZt9DmE;IF^^`hKQ3itV7{Mawu_NvD*Evt|ImL5R< z89%f*tZ#hGYqJ~wcyYKULqE!8O8DHuaCZ~{-XPwFLdHM4*uC_0ed&cFUr4L^LDb>i zpl_UWxc2H^Os!Mf3|v&Yq3uFr+ehqqa-ofZ)Laei&Y(-tdMUmtA0C6X9rH7 ze;cPP#f+O*o+0;N1*ShAtb@e(jlm@MpMqYXf8IwJ4YI0mr`V^y4-111!6lKM;q#xZ z&&%xew10lOz*x`&(D~rb>ENJ!V@Du14AkKQ%My`o1eydcUU*xRAohhXLOTo9Z+Rfm z42SXm+-8q`cE_8)wX1ifb|XO_`w03#RxM3k+`tF;-JcTOkti^=f(iPHfg<}&X`qm< zOA;qd0eyt=-YR9CIXGqC4#)`kVC2Vig_}O(1(yp1Mnre^s6C$11=TI9U{z8KC|WiJ+?YG03od*cbO8C{Ol%J;I(nLF&xKaK+zfr4X|(4S$sn}>Ow+-k}ChjOZCfAEvp_$#Uk zm-EKiQ=ZWt+y+iwz(o|iXsxi_SUTZ1@2$U=*WY72s9wYx(Mi!gZtQC31bLr#)fa`X zoc7x32=#+_;YejtzapOkVS)@RJ2W$%{px*p#>e?7^Yko{Wn>4(zlIp3WC|XjD&P=UG_d&syrnMj*Y zt&{@^p8O;f#fu6d1{6+5&?e_caSt&GICRE}Y`m8_J`BiEcP6B*^}+soI>jl#C-^F{ zbax;V$Qt0iJ2XPzTW(UNxK)yVBxXr1!j{Yxk@{J&Vh6&hjnNwat@j6Q@i^EbDOS34rwBbxx+l!KsevTjE%GaP{1D zPq~gF@?(bTdT*+Cf<8dW8ONL5&eiPp^E7Z=GS91MS5PlfX?iRqgp?Trt&})jF7oe` zy!A<)ERb_e}Tj6jZoJ_y71{O?`CcovXSXL;oRm&Pd^C;0?Rd%3yZ2m02(M z{52~xGSqZTWgLs7E%=@-NR^1MGnr;3_8`KDEG7K3{iXs!or{cnFEz6(7p;XpeNU-$ z%rsMtH6g`*4rtO5hY!MZqM6i-y2fiR9en!^2oTo4RQ1kRE75=bi!Nd$*ItwON zv@TD=q}0YN&e0VI5CeFdp#TQ(N^pEu?qW3*2*BVi`I>!tKLIEbr&R3zqbn7jrD?D# z8!Y)P=dyTyP<`lw^_Q#9alJZP-R}k01XLeyA4D@se?ndk4I#PYf zuQ+!`vooqURtQ}k}R-- zW=VKS=*?fpURq9gX^`;J`r$0q0YY2ef|r0V_n33(rNz5L#q8-Qo;k?G%$|^GD5S3; z6HNlTpg#byYiG?$;vd8bnk{J>2s2e32#~Cc)BH&Dow59DJ7D5Pam1R?W`Qq6MuPxL zB;pMfgfdldE(J`g_wijyFhr3)n1@PHUUqrqC4kf^GPsaJ10)S5^B^gF68PM+=iG!fEmRTVW8+k|D3Cha-rX)5pq<0Bbn$c*W1Pr;LDCwir#8)3%L9_# zs>IShK?)NHQIOON;kNB@l{Vj5gIHPRyNieCLDHZDl4!^dAPKjmEt$H2l3Fpf7vD_6 z6uPaemq+ykNp?~xhD>JSvLI=2hLqe8Mt~%~lR%OHD1jssDFsXdTyPf#kb?56XF=rv zZ1k__ItrwWKM!og+$<$0h~G$LF03SDK=5xD%wZ!}7zkSCun~m0Gd3DofGpmVZZD3F z;?~aCs3{_KZwDKVYL7s$9+pkQMkoYo+{H$MpagenY!oFI*oc)VaW7#b^=>>?*j@iyF2zRcEjC(D*l3-iI@suP zp1wFXTHb<@Km zyLzx}i-z_D8d~204Y7zNS1=MN0}D31r{*LSuv~7@kj5%3B(*pL2+qLSLsUqu5p)*d zXmEC~kG>rGh}O_BKoX5XIr4;m0}XM94Gb;M zfuRsPfh$}$gf}9<(6V4Cux-g#=E0Em`o+P}gGF!6Dd^~MV>tOO7Md>UzsNB8mF6^S zf{dQffC)o8A^ONaD6K%xbq}oyss#em_3MD5T3JvM{V?>@`WAFPW|MFhIg?N=R~ZIF z6s-i+-vTWOt>&|o!h=FfOeB4TJQxx#8jH@q1Ffp_DEbERgU{eBpN+4ao)*GhC$)-$ zX?c$u=*%D{%UjG3rh_!0OSF$41zl=tIZl&2NB2<4713}C23Up^SOlTE8^|zHQ1$dP z4VtBIs^{7>@4eWbL3XoIu`#w|_ye!quFDN+G^EO4j?QSvGK_|YxVqD5G^8Da zVId5Lq|IO?Sp0H>kz}kNc_o99s5=HDsQWK;F#c@0x2w*Ryx8F9#3v*8BymZ^9tL}$ zP!dx#|E5RL_UdC7&)RJ(Ny*UPL8r#_cv-Q6;}GTRRv?~Wym?sAXW<$V{vzI#dOUOH zpokM{Rjm-a4edbrtB7hi5}Uv`Yb%de{H7j|#Dej%?idguQwEc@sBb5W9k+m(wuxF& z6iJ28@X;uAh{HR?0ku7Yw_Cmof0r_!zf`d{LrzB(xpaEE`)yvl<8B1KIYn?8#vw0v z6W3F{^iu`UVp!exMB(f?E*Y;eKv_@B908n%5xbE03lxwM~dh03{fsh`-T2r0s zV@>S@NBgxU{V|>z-_1v;8nyD*Do!bOC`o{tUmMOdwGSPbKnXx&gwllx%!} zaqPReEb51#-V=UBWS*&sD{x(_b^xca0C=;?nH3s7v!$D_F`oVU%ZfcVsO+>S4 z3CqNn6GOXH&ZcdF3RDp0WDUFx5(Ya*Z+ExywCPYY&C;jgXd?NYeJab1=Fq{Yb(JW| z1K<11c65L@Hn~bhe5pkTw76G2*o@BaF7(!GxezTk=@%6f95e#34}mXF^5SF&k@jD{ z9n*(oK}`Ce4iy5_-2=hL<-%(r^@{p|00sC#lGGEA;m=^a9dl4wl6oVSwcFt_a{`50 z3R5%)S{{vyAUg`2j=cjMD_0bl@#9Wp8c*JN_v)fm_V?*2u3&HhW4annscjO%rw~g~ zbjV-Cj&^A+izjPo=7jIa2MP^VZ8)tHerdnXS659LtKfoWcu;Y`r6s=!u)>^xIiUs= z3V@CCwZyCqKS;ixPvop?N<0Lj6%V095+0HpOrx<>+VHTxtp(qw?aUiFO@g}cDVFCz z&Li>^!ZW%ME|(=+hac>bYC$(p3#)F)l$dz0<+&}DPLJzgWkI8a-qxCmSU}9IEZ@m$ zY&6>_@m*R|O{3{{zZ&ys&{)fGZ~{&|Ta71}Qv4MvHmbqgEqx~q1J2hPA2c7$i!U{qQj^kQ6l?_5A= z!(VK(eHA3rbs=z3jmP1fg53Vro!AQ@#{fWiPGH5SVPzy;>T%18UG@wjHS#ND82ZFC z6nGg!1TcXG`0!TZryjkw2tU>0aj*saLuNy!g3b2HOFpaPnt&!gmNM_Pnu%dzys*t= zyP$9DI)O0Je0+}Nh^dQwAaH)FcGTGhU%K}cH}+k;dv*)S#5YdUvMf2R`J!2w(&+FC z-w(QAmW-B%Spl8P$QN4Qw{qjd%~^GStM=_hZhgGH^`Z8b7UWEL*OWH=+Y58V6cM7f zEfG_#A@)N5zvuhaQ%-Ik%21cuOikPW!D$&PO(?aY! z#&=uw=zN9*Ko@gA(I~t)Xjr<5Qfe$pFfU|h3yW?MDPgQ@UuCzY`4%ExR)S#Rfkr{t zMEzaOm2fY>eG;+ax^_2f6DO?H5H4K-!K8gIgO==hz*&M6HuI%_mN_+_I^t!U?V{g~ zh-i#DdLtpCR3O!ajVbw#@QOh2X^fBrwXlGrP|?tLL+yiGR##@!9z*Oi@Eq0Eh$h8W z3$x*eF5T-%o6-FY?m9r+n$i8I8oKWkg(*JcfDTs1HLKJ$(u-XzzXZz6$G^HTe7!=C zP%$qoSC4r3sQ(PBA5EA3wuk=s;l<&#vDssypqNBQl|+P#tc;`qhz=iKX)VMBEyM(l zki;P>(`1hWtT9EO3ai7p2ugWr{cgjoz~}F|8@Do(0%o%9CtHA?RF1-6wh`eG0lpV~o1qfC z4v%Vd*}ki)-}Akyej3<(flQ_IUb?=d1e^T&`bD`(?g7pgA|YL!2Q;tBUKa$u2X*E z%e5&9>o1-+B1Z4?#d~x;^$9q6OOHf%ip^4fdB&$%9FkUrNH`?9ktSTpaqsycrg}jL zX9(7yA{LCi>-+@AJ!9h~{yGnZTokdjFRP(=`J|6FPlflkeL|9)6))x1nR5LYXRJ7R zk8k&fDIXgZw~JyU0gh=2OIj4d8+LuF8jGHxbJwy=kU>_eeaOqHSh;-m@$@o}*BKvE z#iJk!1LzK?7*Pg~Elb61c{wpFq#q-z(O^Qj!UW4~vRD=PBl5{E&UYv3lTpvD%YVoG55RPF{ z86Xh#5Qvi`iSg#*1RTKIYuHkjunNUk%B~4%JK}A#{nqa=ca+M3Pyw0&h01lj1^!wn zcb~|JLnVkiTe^u0Dfkgj4**fFV8tnFG*k{hP)HVEJtEQmQjy^rY03BEBs&uV+ej8| z72XGsO<1Q$QoiapH8zL;uGcGCKT{O|G7JBNQ#-kP&aExFcSWzr8(TXb8clV(<_Um~ zzlaoeZE#SXsyTfM328`I&P0Pm#HV?}0Zkto^C5CIzBj&<^QFA#@e!Mukl#|wP#ESP z^J`o;(n{gS4ZwS--)#K%i~MBh&}Jh&;Q2GLgvT$Azo_wJNy9z#J{5iNE2t*A=Mg$*v#MonLAO zDYa`hI8`pb=-tX@=WjFWIm&1TVq@!@+XmtiRql+#H^=Xc(q4ucw{_aB?~t_Wt~euQIkGeBPQH^*7F^}+ZY(e!Dda$dbo zLCv4b>(Y87D4|<^Qf4sW_}d_Sr2d57n4>*l zell&ihT;?d_Fw$J5B$*Qf91boQP%JuLEvczz5AqLF}8n7msd>(sr7?X`M1*~xN%cG zOhw?iKLRpD`qPvc!D5_Z-Y6`kT68(}1t1y$9j4Th{|`BTsrWwqxh@B;17p0gG! zRzSwutZ;gz@ff>!p)L#!u3e@Nc^!9<%AD;x77}QdrXV z4t_1%RJT~m zIN+_REHtBI#b>@V>;Ts9M|tsh^%ii(spA)J&aC1$d$M`qTRh>{(uKd8y(txPyBBWG zZmcp^lO40q-z~vx=I;r%=f`*KK#~qeG<y@1=;RdqzoEUquzeqfOIQ&ivwYr2(Z@zaf!icxvVk8Q9$ zEKLXFABHwqYaJaE&3QVtFGwUB{H4x?SnBp%=fb8f1_@Zbc;%QE$Y|4Eh=pJGw+R64 zFP?a?NeIR`(!p<+2lF@OcOium7B~CMd`-U=taTfFYzQR({N>lQH>?7KA0fRrOqRh5 z$%QI)G>)Jk|0cjZ9mJ$F@ncGNHwJ~w*+p8N>0z=D2e|zs?31g)}|T?-mIxF z)WzRSL>m$%U9WnQB=3{k1ibwNMMH#cPB%E5DLT`i)IF}QmFoJ0+i_seKFN>}8uUJO zgf%8hkZqk3G*o4O+p@oindmJ0!vSj~wi0oN@*$p7KC`S*ep`CwEO+~Ad}mH2cfNzY z**=T7m*wf}wEPdq{9innBY?Tx_y z3$;SSk$GKKp5P9Jr84<~`QRGYP>g`ZA}7>ANsibDh-e1mi~W3@Bm&Eq77tTH9_z)9 zFZ|LoomT@qo#7~)u(cdt%BRpZE+cN>@N~B%L!VOmBW@4ldV~((UB4AGE59{Rm(E)L zpRyN|O~TGws%}2#)=aM6+tp7i*!>5w z4)Vq5f$1);aUctB$eaip*lic$5vs50?rC)>J|ejy6ei~xIICb?rKjcb9Xv%N*yG%BE_Ux-$l-2r{N2~i*b zwWH|1JrrNqPiWGH|C7pf@(L_<*JPE>M?JkZ)RRlz-;P3nZ2%&%?+I=penHArHhvD2 zwV8hyWt#MOXs3r~iiED=S#l=XK`J8!*+&B21(K$##(&t9!8{32(e;vu!2($y^-ZnKGHjg*{=-d3*TRGi$ zH=HW_7&n7?eT(r&FiUb-9%3a3VkycfiLS$sW0{Mz*aF^Zd}+Gr{Bo*4R@C46Jx1Z` z>i&NRP5v%HHFPD;&G1TT>12(>L_{RbtQMT*=^~F9jloK@#G?SUWA8p2DU4u-=~_bk zYa)Io-$ndFYRD3l`$s@BF)t8wS|r$SR38Wc@}{7=i9N5phbSC8aWWVLidWCgiNLfgp19O3rWJjBc zU(4axM=CE0wTa79ufSmH6%-qKB_VS&j77~+De2LQxzN=bl@}FG!POd-6J8Lg+~O#J zp(|H!&QPKO2<%;|N6$RkQ_*bZkLi_wwl?!eoOO!XJ)rhETg%ak4z(9~;5#L69vHzK z95(Dz$OI9jHqF6BoQxV?M{qKpZND+d;NjBM*!yXU#Ku%(L{!!S>3+KtdGmgXqO-q~ zGrRT8B)p^cjHe-Tvyt#~jjRpPlC)1L`+X3dp)jD9OS}lim+n|?V|Z;btUd%uR=%j}=*Jg$YD6255LJ#}IM3wP@$=!UR&W(%;0YUHs*N;RmZ06S zrqmi1G#JvTi(~|-&=Y10IG!Ge&ql$8TPunugi8ZvAcNd zd71-NgQ9HTJ7bar5EF8vKSk_9Jc9EA0w+`lnW?^GwgXkp;l|pP4hzuQW45Wdq4#Fw zba7qwCIlx}k2;U1Yzl@sj3)r&kM8AKDR7ay7Wf-3O0F{pfnKL@_O*EM_kUIBR(&uX zQDzoAuKM~AOtORwe5v<=Q~kg0W(2h0_yPaDnfwY4)J4kh;}W^Sp@z?`C5_dRmWO@#!mhK{kU9{vMl{AZN$ge%>g9p>}jL@vQrKppWUxea(A z1k`JSL4~At>2<`dEQq|LH;Fk9RxkvPfsm6J7E@I)WDWqB%-?}%<2B+&-_m2{x4}HS zWGdHil&cgwD>UAiK#5GLC>GT2u=Mc|YbHKCZ1q=gK2*#^C1Pd(*8~u}7A5X5?$jCo z5@lM}5Op$;skYLv*Uo)2Z4aRQd`IR9bt2D%htFv&)I_VwXDFo4w|yOoYUcODs}~fuDsO)5Bx=M=_cugudG2F{Nya?26Vc!<%SX z^!psHE3~r{tW!&%c90?tRgz7;B$UEya#B9(VaJd61t&C!2KPjb6g4-XoK|}zdsICi zU!Vp^G^Lxf*vPg-L1ilqC`qe$VT{!(^U@sH=y+mR>M-9{`t$2%eS-+4J%4PZDlNOIjLQ3TOw4aYEwUjYVEFJbDJ%4kW+n5c@&0eMN z&@_yPEemK+%+x;@8v)3p@1O%X9Gg;H*>iyvu57*EVYxp199V2pJ;focgz81XSy_Fg zx$ucMeP8qL@#*-wIJxTf>Ogr|}nh3PqA+h7FU_`iwkGgjFjoDyzjc2lyCc-}rDw8cJ(GuCmO z`W|eFV57nol&}RoiaATMW*H%>%9qnADRzAb1a70{P3|k1p(K6%GS&3v%==`*meDbv zrw`%nNbX+5M7Vn+RxI}Yr6sg0O}R36mq-^P-XGJp*zqxT6d&`g0WSvC%=3kB`$+z= zaCGtGBfZJBiQMTdNc|BUQOYD7C!RhUD=R7R!#>wsmzNHeSD}KFq}++oUZJJoTNUjWXVIUq@nbGTOAHjsGt(*iyeb5Pd?zRk;PAF|&D zF)g{jR(2!>$o%5w+3BRcgc9cxXe}wk*p7htuPOiyA)TiY_E(Bxg=cI~U_ydSV+Ogf3l`W@G96w@duNmpUqW@i@rnIR1&TgtLTD6AH17|`Su@W&4TJ6P z)Ybf$N4V+1UZqp%0;i}ucF?VYY{>9N1&fH+@kM&qIt6IQ49X)rUH<{v{?Xva9 zWox1)>)JaL#Z*$;8fU9GZw06XS3D)5!P3ur#Qc9QnSoJ_7or+Z0fbU)#dX;WGp_y< zmcKiciKACeWdEEJ%lsuGH_4m}gA=LXW<1FsQ5b*=V_Wm0$Cm{4;g+p7aPOKbkoC5l%O0ePZS3TgULT zJ?ieqh~ZC;VUA+XwVIJ1nP=q3qu87Diw7fHE-lcoezIj`TZQ^N8d zMmAAz6KTAN-sQ>|Vsio(iLCZzK#vsPA@@3fX)L8XZzcBS^X-M;UnB z`uwdEXO3qo7mk=uoXIEdsh*i7g1Qo;W2+onGcsV=8O{w3htE!~wu`dJ2Xzfv68OYS z_28cAE|@POjj4`&B#3%S7PjF@kKopb8Sdkv#UWSlP z*{y-L+d*NhFf6L4e+MVSS9DV|E1%9HgPRIK;%d z{hIQ74x9X*q#TO)Id)!8sjHw!)6KB>F)|v_?Ur}T!E*2T_pw`2V$Xhg4FaZRD?~<} z*b`?;D4=^L*YM&RH&{4DlH)b76$^~(D-s+A5o0OHSK>f}qX>&&VgavV(db*`bUA_* z>5G)+DMUFE85%&?}#|~x+Kys zBaz7gMKQU|;xg3NpI+f|aTbD`ylT0;BBV8GG_CP&Wlf+qs$&d#;ouyz9dyAaYv@3s3h+ZP9Dw;=9EaTl-3W&GU8$ z7LfTl9_F9zvc-(8=o6$1-`|HpL?`Y$OTmoA%E9SM%{vi+vI1+g=inLVr`vP%N6cR* zUZaEW04sq2iI}0tRh-C?GPEeKge9Y)ERU$0NmoSvQdg!-_9+bNHm3R7Y16>fi!=}z zDpcX0of|08kc8x5o5@ZlN3^%i33#?TYfiv7^W4?Vs|B8kOvpxBtKyW6G->9%+z07L z3&+|J``L{?oND9het2KdKRy-NNXL{~J*PZ~X{*b5`o;EXHV&>HR3d~df!@+tosD#{ zTxADsy4N1>r);F_n`J@{#5j z-;4xX%l?RgLbj-%6cgo@VTX+og9$M_+`hJ7mqAue#0u4tggpgn7}7k-^~-V* zrkM;V5?SX8ie*1X0K#)d9z=Rsp~{nFWs%5r87){;IO%2@B+K z56B5qH8NAxcKqOdL^O!ET4IGB zo&&s+i3PL~**cI(6wGtFmIIayNG~~zJ%t2ejZk!gZ$xF#c2Lt%y3na1s53cKGwyBz z{Oca{(G+PH4gy3@V;(xY(#HNoW!CCG*bThVpGRhaedr5N_VjN9}F`sgz*e_4~q;vPv;(=3N{l#DT%tH@;{->YM9+>t| zjlZ8}vY=zkl7`>@(vN-h*Pr|Ri2*1hrjycPd@#LFYz?ZJ@xN@ z@s~dEuOI%mpZKcJ3{I8b|9&W?2rq=p(!c)!URwSBa^U0r_p8`X?fQOBC^7DMec{yJ z?=Kf0VA`yp1S&>Z#rxxX@vH@?j|Nol0eLpQLuonhP#iL&un6i1H8(f;5BFv(8zIDi3`%9XpxS;@S%HMgXD?US~g@A|;0`wVwc&Aa4a(pf{arnp@S)8l_2hyYjnca=FWBfJr(4^_qc0N#A~+;qL#{cdMa z%ZUEesT^0TUFQf_>9N}wz|8zG%hmFk>LrBl`zkiFi`d<`QT_2BvP~uhxE66JAT`bf z3i(e|^y*R(l3+r|sx@{brYf6c`NWaTavExViluV)s#s$7Fq<4M z3-+|nF%ZFe*kL@+OOq>5mPmecy;5u{RBy`_ldF8tn%nel0TEsQmY$Uc-yi2dNXm^I zzD4aF7dO+{A=1!+U}9_NoB56Td^8;nbHGXmdzL(kBrsX}TvWiS&W5EiJ3pQDk2r8l zlof3P%V<^%X0CrxIQKUuod|(4rajqjhKxi`dt$=qAciuuPv{LD&!wO;O>*j$UlO?K zo%E@b=QvM>Qk*+$TN_Go&J;!`8WuejZ*KA?n#dpo>Ta!;rb8;t4~Dd2RS%=jFsK!fa3nvZ z11N&8igvz5*DJFUjccJVV|@%_sf$=B)0$rFRtP0$_8~ zi?))BC$f^mTO6dg=XMv|+el|-#HN?r{DMb-3jA>A(qkNNWbR}uRRxp?-}>hG|7l6f z_)I_m!?c`eYdL7k$?za80$ABfy!FR2glYDjlvpVvM9hsd=_hG9V;-Rhg|1;(bJK2{ zMkr-aRm=`GR0dVWpsR-z^^czwcID0@t%EBP`-rW+KLGC0! zNnR7iFXfYQ(vp&T>?Q_@uq~!SfNjJgF$Op-1V~gqmC8f6)djm+gHkc+NN0mx#nkwb zd_%fgPL*h8O6KT_VB%ytoQxoewd=A)>S=Icxl8K|8mMDG^^Eb{%|zSm zCY(W9+wC?4{Mz8}UjFXq@0I*@i}!>4Jrs8*{93_3>8?Z}aTlxihl4tV95_^%$iH_U zJcnIlS}8+c{v!X-+q;ymYwtdK-Ssydd&3)V{43e<&VRkU=pP>}EG{jt3`eVL>*HO! z_iXIFV&DEN4;<_~cFCWIuDbe~ax%U4`0>N9dF|^qkG%eyj^nDBY>aNwbB)(&kze-N z=uI9Dj&Af2y*c_T{@g!$qldktH+a|>9rLg-y1`NwM%U|SUl?6ya+QVAQKl?7d=q{Q z4zC}Qm1SXcWLV*B9c}u(_us-l-*wCR)z?B%s;3wP{$&u-unZD6+~SAUa25I(z1C_jk6vRnmq&-K=JM!TtGSF3NHv#7 zNUH${ye`DajIObo%cHC3swv-oBh@@~)m7P5RugAJRMXO_%4(E0)cU_771F3!{C*YL&wk!)lGg-eI-QVZ-;9M|*s4d9>U2mPfmMZ+SHK zz2y-b+?nHb&G(i^tG>59BA0DF>Re#rl;u4fCgua{K?6%34w9FK!vTVbIb4ZjhQnSw zG92~`02Zt7b{y|z9DC>yI;hJ`!i@PVv>X?*l+N_jp#F7DwTr<^11F0Lx;q7{ptcml zux+_Q!Na<^vMqQI1ruF{9g%n+S;Buf{jNTdk@Ua3<^+g{)IKH>S}%!P#~Lg*%>S@n z?p5oom-|m-WCAX)Jdq7J95|8bGbGPp!Qqg}t=7wlxd+!vrkkA@DXabW;7T0dLpo+H z$!dvT%je&mtt!))%~7V&KvEm=g3>MhQqvjfRH9EobOCDkNs4FP6rmqqFY+RU{;m4P za@c@=0X%7h_9lDyJLPZ0I3OCijT-)Iof!>pa!utlWwe$ic&v(Yn#AxlWPI$)FquV@ z)sOG7;(K^FwryBM+cUwy)_4J0QI`xSM%pK{$QxN5IF0X;CfgqYBK5~o(HeF@^p(M( zC`T{~`>(^M2HsLNGfw0azS#G=UQE z`}Y}}YeQ8_d&^<^w|+PT2!2-b&*7zEqP1KmvFtJmP+!~v-GMJ8!kx;~Req1V7nbIJ zL@veVn7%r=NA=qG6Cjoi^>4W3RPPk&HZ0+i!)K>Ujsurkmz<}N`L%|hP|bvBMG~xU zwi$=vfaIPBdzg`z`8&E@$ju;?>{|0y1IA;TeAP&>+QDy}18|R}@rI9)a;mwke zL7Y%EHM@~d|K8lKkpjK_!EdsJIXj>&BAENiuclK>2~WRNpCYY2eeUUWmkN3Me0>*@ z@99_TqL2{rZhZ>;_4Es$PVdqtPrq27!u6j1;g{0gm2~>m-%F=-u6Mus%juMM$LX`_ z6r&{G{eyH0g7oxj_33&#{qpnaF0rKE{r$SmEWGygi~m=;%am5!eJY*qNvF^KLOKO| zdH0X&Q#Nw-^vm@ra~g5?E9v3=)jo#j3D)(HFY#v<4h~tOJe=+e5#tu#SWNp)WdC_B zA2jY(BUZ3Gc&pVjK+bl2u~Syl&=>E36#M+$!{6oP&bq$bmz<)<=AEK9=o+}eXU5Yv z%sWMIcwqX*^7=Wa==J3r=AEK%2uHz9<*|-0%Grq`D@ynlL(QymM}zkhl| z-0}JwbspUG!1N8g**G$ey+6Je&sxCsDlBa zpM0ZlzLA?Y%bVB7&FgVY+~9lh7KL2z12)H3uTM_Vs4mar6utg|$uT)iaa=~SGOeJE zBs+E;&R}`&3OGV@4V8dgVAED$4wu&dKl0u`*se0I^WAIhefHVs>~nHt66CRp#j0J{-giED(XtrQ0JgUXsU;6VH2C6X=R+Ks5mm-Oo`JOC(bYq zGe(E0jx%wjZB%BuRjlqBGxwsGTNkffWfYZ``}uyKcdfn8$>E1O&eW~jY0kUXyViQw z`{Q|^-_P@+q*NH(16*<%B|-I^Lfa;TsM%1mW)J-OUrl}o==JZQ zs1(bOlgK+VL|roY>8_3xS}^eji*S!T-Th(vXAf@p45J~43UadR^Q1zYv^@hu9h>`+ zBcL#e4>~M_W3Zz3&*XbTKJ$KRwWll+@EsEj3qRvlBmK}q4+1lxwgz8g$QM&UB`!gHMvr#=D$t^`#Uiax zx@&36eF0D(((11NT=`*oMPr))iZLaAxyMEb^v^3a&bx|9SjfHuxpztPjDsRXO6T!l zQ6U~hGs*N&z3SEBuDdM(twWb^eX*(7^_|u{&o5!9{f-BgR_Xt)8*MA;|85X?-B9d# zba=xP!y5&uHx~OI9p3oFaIfy{1w?P)9-|8--rgsM`}Nd*UivVvvn6jtgBM`WTl@9a zerj(3z5(T8Z@m5JaQsa{xNhE9-yC~W`+~l#c+)#byFxegfL_&4n&CI!pablN>z?@h za4V1`rR@0Z4zFWIfg8;zDo42`YBFI=)Z#ItsSsSa5#BZD@jF1*<2(L(O|&%t z=q#{84d-ENP|1q1riOJNf(wP4KodKJw_Y5gc=?jpD(D9ncgJ8*GW-a8AF!Dr=i$NJYH-<8>P`?|>m`1}} zOfP?mH=xLHScdy95X0974Kg7FQ^;hdMkWDAf+E(j3(51|Jo1}j8ig;7d+<&(>%Xm|OKRtT0h&Qz>u&u8B&CB9VZ6N&f>Thm~ zH?_Ma-|fw<@uoH+j;!^YTjEXaQu3Uy{mo0_O>Jn-u&Up@INsE5$1Jh-n+x%#5CfR8 zesfd2DXalwBYmirBh78w>nZI6Y=q7#kfHz;y`d&mh}?kU8=B+TJ^5QDO2Z*&BcwSW z@aJU3qn4bA82kw%2;zqFfYwZyIM+y|hz=z7twr|m^+`IMt^N>YK2{~C?wx?&z4$oj zca?D;?)mcwnBrIgNwaA^bpEpIqqPNB;m%p~(FxcL3mdN8jb(q=h$^kJ?C;_w^H)d$ zV+Q|SR#Tui(6&h&l+KwrQf{QN*2hK8;q&DSAm&V-Lf~u!aO0AejQP>?#dV)2Av>5sYeR+Brh8nWWBO> z&l8^U2Zz1%H9-w}_6eD5q_lW@RgHSdiWH7+?t0uDjMScwc9g6{#;sQszx2M_yJ=;;owffcqQCvSY&1s zaQ>bZUOU0N%YTkNHg$v^yvu|Ci@vv1P5SsrZ#-`_x#0*2AUSADY7p_O-i++b8Snzy zTUq11I})@j@Q9tz0DKC$u5qq>^gBCS=wszwhL^OqWhMmCspdwzM`m7HX*RcGL`JQm zTry_m%?d4Rs8_L+4ro&bQ#gK^;oHS_urnKm5EPVjSCGP*eFmL()UeVx%zudqNq5PnWOs_1!mRAWk(}>&|nKp&RPfTgd?kJk*&)+r0k*=a?dPG zuq4&B%lHIjZ5oYBZAF%Y7U*E-HuVx+e3?1Y2uP!YRj!}~eE%pdVh8q#8|em6{v;%#^s(%Sp9)|+F{5du z66dcAXNDm1NVl5-@X3r%(pQiGiX@qi;GBfWCS{oi6fo5fGrq?csP?jas>E1_+^we} z{(d^Rw;v{R%V(4>nSDhkS2!awo5LxqaK}`w@8Wi5ZSEQ_t|DXq|8P5dAHP;6UbdfU zF+GV5ZUJr6tcOk$G*t#!$Z_qx{aH=N^B}t@8SYaDmN5l%U zxI$P}Cbv~KHI$sqmd&*Kt^S!#U}K0$*NW$HOx&|&kqxVmb_zV3g?rguqAN3Fco=0> z;9;2>F`zbhm~(%^M@a@eFgq_JEumtTe#deP0V~8?gNsRQJ5%D(Oxv-|7@zP%gNvu| zA)9V+vE0bPwhHJ2xs*KImoGrzVysQZ#drWIf5hZ%{Fw<{%uXs05_60jsGSoo<}(Qw zzh{3T8>7zhO?6gepFR55?5vRSs?N^bsU8M0cE17{Gpp6<|7V1Z@dCma^?u0MVI?eA zgN)l~6GhZm4&mf>ihtvgt-_D;nUZPIw=uzSTj(SYb!A`bN=cva7f{odKyt}_-~ zJ3pM?%W($&Js1}93H0xoA*S&i@w+!HW$C8go{}GlUj)q-MOkbdoSP_HMN!P_2fI!k zxVvaKey1elEJ$Rt|~DM6;q#?XgopxGEOz1kMlwAozxqK#pyQDmCzK&@V=jDXZR)hRV- z8?(JQCX`e>&r9W8et;_u_ti))iAF)u#as!P=~4BYtpW^{H08zvAat@Wu(3S6*kSG= z-k1U@_wII)R2_cVm=CM1_RDo*Ji2pJ3zJ~@bAqEHMWb19SN3R{D|HIK8y!riI`ztz zEwbgpAygKv_1HcX#>7-9ZV7D1QWY!}*G78Us<=7C@h@$C>=+nRa5S8gGvssyCR~OKvta+PH&O_A-#n!26JG^lKS1MhXmnSsZ#aY z@w&ru=tb-cIGF3ZeKC(pMCtqY(a-gHt76dz#gp?m<(|;;?1qW$mzpaXle=4ZsIO!1 zCm-6rfm`>$8$!clDPwViYYAf3N%mGMLF>jJYG%e^#DefuzP)2j!Pm+(r%s12E z%o{CbTw!W>>;$N7G^NiYws=loP+TUr&oHHU33*C8n$oE)bgSw>8Np)ehVXGo$G0lz@hOO#kQ=z>fK1_4g z#RbS~OExqXC6e)}jcMZ%`#8MiVbtasc2_D|j zytcJ4`HX3CE&l~=ZbV}6or$8QY2Z$j6L`D@a}#7*TlZ!y?-ijOVk z59(Oa8TM2>ioofO$<`G#6&+6skLZ$u4esN`Xo7wcoEyo!uH7If&A$1vTr!yeefnX*f`Uw3(}RDHE8Jp!JRiDKPv*F!$pApzu^gyA zpkFg_q&&aoHR+0z?PJo$T=udL16a_klWxTsBo?&$#5QXyBJS^nK;pe6dd!guqQ?{R zNSmkNkwFw_9W+MrppDO|zRir9m_%$dr;_H)$SS2FVom~5LG9e7CdR986Q=wc$)z4) z=17pv%EWM37Y&0tFUW<{Z^#lom0x~|g-JmQr1tzw%bGKNHenTnQGC4=wq z&?QN2#fyP4>jlMiB>kF+|T0SfJv{PgGwDs8|%%#@nC4i{dwl{xKz{K^rRFYK4 zVDxl0q!uj2+Nu|%{@M##(@o)2|Oed@jQX!NOsZ%%n03x4}m0cNU*Rjbo{ z*Hs+qOR|dUcQegmr|QaOwOl8xp*M7nwWfnNbV?~!rtZTJ`MozXoU#xaiPoW}c>({? zaHgy_JPZT))gi6%?n8KV9X)!^i`3%FJspHAT&^z?oV{GMh#V7niho+`H z4r66-dM}1MAn%5T+q}SV{lbRPaQT{t>vtc5vU|AV%@yW_vY&35{7zM06&u=SI2@$o zY^fR-!iF-o04e{U7?-hmiwOkiwS9Qx|AZHz?5DTFgt&ec`b?B5Ttc{StJA3sSu8o@IJ_ z>?`ok=ymm#Y{gd$sgMr$<_nK~Opu`XZ&;J+^qUB+$0y-#XM?Yw6=hg(voJ)hk|?f{ zbU~a7?9cTjbWVEehAobBj@bhX&^=9V047PIFa_^uwJHq?Rw%W~$mUD((g*>OWl6Zk zbElt!etA_OQMiH{i3$t{n?a<8M>7m88W%#T@bBs>(PScNz2YjZM6cK&W{GqrdRi>z zBz7oXiS!j)2h&ukv3;r3NpRgV`yMnfJU%sGY0h zxfWb&Dd%i{(kr~Dz$S{k3i51}-WFj^Xg$d!=SM7_$U$4F0u#-WkxBUaNmiHGGytz% zJ=suRNka5vU;8XWXp11cDVgZS@*F3B2%%NvcY%$U>pIH1 zMcz8|VaT_Czp3A#JwV8l0Cl&$Kyc9Fzx?J_`d_&iiYe5ZEJknX+IFkF8V(iMfl+OE zx{khBNQRnbZc5+)7B7W z(hT3_vnh&ckqU`p5t*rTnspAl1hZ%kwws;ig@>kTfgWH+Az0i7uOW5JjEx0pxh05D zmZ9g*eL0zAvodR86!HQ9*TVz+po^%O%44r;CMQLn_xTFST6Qj_s; zgRYOlSPJ9tZB22xo+U)bs))lNZLE#NfZ-&wsj-zgPdH{&YGz?6!ozTL)cmvs=I2`i zV}6i$HhvI)8b3agN=t$~;lny9y_A$r8;#~O{SUlLfC2t4S`#EovbIRq3_eppO9(1V zGG=1{#vhN*^qfbFX50WP!~522rI)up0Cm&iY!;63roDSeQlUe{MG1=WC|MngqdKXt zwu13DmRq%bw}!EpIn>J(heh)pD5^v~RNSGVfrFSa;hEeZPr_23=8jhMZo}@7XgQsw z1`Q!Jl1Ow=W?Sz(N#E+1j+y3eEu_mLLA2UH_oXL1=zHk)t9>t}6 zV7|OmqqsCiacLpdSZWtt+lqF%J_eo<-vf%nQ-w`NsxUsGBjy0>iva%9M1b66bFubH@%R~RdgavC$;{iXQQb1f1u+S16V{36xHLdYu zKquG^$MSjz-YBMx63e*-?Mw@h;1^?*MluR+V{KHYk)W{vUZ8-QZaS2ppHfgNToEni z9*tp0h(4mFpUg{y!4`fiF|%86c!%+6Fcr#%enAK@RIz2g?aW(6!tjs}h>fRlt zdwG~ZHg^^!j*SP>(4pdz2ueK~cMJ@}SoF4H%C+u}Dc`DP=Pn?Mk6;XQo#Wa`xW_6Hl%*qYT% zK?0Pd53Yjt@kuUD9 zDNg>fV8!Y2(!0fYkxgpcmkHjpC`-<2jR zr_Y2`3KXqtVx8$Mys<2a2{hUN%{}tu(}VkgM!vmuI3*<%zxHETrlU2b_xP4t+ZG=DMPHFvA$R! zBJ}7P(uC^!I(mg&LoEm6h2Dhe&KY@n+MINb>N)Yv)~n=9d|Yd46vs;z7|+=8KPF=D zY5h5+KQHLd8U76Z^<@A1yZO2}Nd?152kJ!c)gd`p)t)k*fOOUytH(ZLM&^eT5GNoo z<7+I0P2y;grF523Zg3j)n^>#_oVUVbw0U(x%#Jm6Y7xRiTRtaaY^BABQ%yoX0WN6) zrU5u zq(ErA{V?tpf<5mrJ05|cHMp=W2=!rSN=rdM=7;T?)*?MV*Y4(jfzLg zYgIg4?ojbyNk|fgjdGWY`^)Pv$}#&E&~eBUn$iud2}0N05RlDOKl7VE^P4TXg3Lh3 zF<`@at+4BXu5H)rYVk^ri6fdINNbl2zEjXQBnM3L^gb`M_{LNDa8}SY>mb(_jAeya zvfpY}o}27V*kqP|l22mwh-N2=9ERSh*$=7NXV8pAvnTW6IssUxoTK|P;Awc=TQ?fT zy0u3!kw!7+QQ(TDK(=3!&`dgs7{d(-PVh;P#g3p;N>2Q^QRP?G0EMrNfdVHH2^4Mt zZp8eRhgH6qmAF1xwX#>`*^GEs%J~u}2eHNQ^Z%nqbf3B}2c+v@aPJs@joAJ=~CP zV%ohrzefkNsL^K`&ex?qYTsRcOvT~ycFd-HUFVoF?a%%5FN5`&a%Gx93&8w~#t8kh z2AT9GL{afSgA-Z~mX~T|Mw>Y&ZUZ7Fs}%vt>^V6LSvOeqoW*YhAb}Qote69od3K?$UiaYD|WtSWK4iCh$7} z^s>2=&54-?!3m4S+I5SME)9O19^+lb*4wQGdKx`nn3Y7ksW>rKfzNkGrl;l!I3Ar3 zHmbl{)X|a2%@eG;4?%CY=nf~6+^-nZt_U+!Q|#`9Nn0*umOQM_Bi~tsc_l0F5Ez`# zN_^t3Zoih5->h<>yo*olhL@qRR!4wlSlXj=v;2AVYaQh#OWoK|97wF3z;Q)+* z<{DCKU|b-%elF4>G3+j-QO=9~VkPt9!(t`#;wF*vyl|edy!ePneqNBX4l-46MBW=2 zRbI9icw$*o!$hFLv(DAEelYotfggy>RDwv2|~LAH}6`{1msw zxk?|~*S?#p+xN8(Q(WwWQi_8*=>z+RPPEFU_STt90SN_D4Up9UBIbFN?^m8#N0F2Z zj_5t6l50uM#jJHidGR3zm9C#siJJXsl{YX6>H4I~TbO*63wyz%l!x}^FR9#wu~OyD zD63VH==%kgaAs#zA}l&U4RKDsB)MvamAFZi16HOf1XulR?8 z@+`bgN4!qI`u&%Fye;n-z1k_q)EMHq5pE!O+s%7nk1B5{`sEJrLc6%(mRWNhcLe1* z9E9iQ(xl@+P>wx8Id+S3>}XJB*hfUddVLm|7!#V_7yI(&@9`?=6*0CXY!zC z*qmokhK=(9bb$xy0!+`UE(Av~+~qE8Iy5`&E|3y_ybGMG`<`9cgyhmMX`{R-Cgj;H zxP~4%=R6_nR!#_pIeK&Qg5Io)3AxU_LD-yfZ`Q5sjRgGnnvjKld7YZ)i1;}sVosm_ zCi6qg19oL@!7O%GQW2a*Nl!Gq*k8Wr(5y7>B(5_3;A>h6wr>x#oN?5_@M5katsrkK z3FQHL&^a#+g+d37=e0r?d3t!Tydj-0$F1(; zmP51RG_zu`vX3w|>LW%_q?80Syzzd0#7)h-`-|CdJ(IS6MTbz7)1h-0bZC8ah&-(9 zuS*WiibufuxMqiNfF;*z>JV?dUxzO7r14<6EhgFQl8hRCNvJER?3IzzAgb$ot zxw0DqrgpoN3Pf@zH>`vyLf_#Z-hGpG`@wIY&xRYBo{cL%jRl%df9--#Z;Vf0?@w>z z2qJ%a!am2!k%lZcxe2_#HYt!&xV(U*ile% z*@$7kY;A_U0EF#MXomgDeo+)x2E#6QKnoofk>1Q|q2sM=SPHF{WAjmbDEO~hufWYl z=$IN8I;NQNk;t(FZks+Yme@e0AZUy94345Fkh;45;E8-V6cBXEs~E4&n<$3k-@aT3`kuF z8J`?3f)}{H2kw2bSmXvQWta{#>(dPw_YSX)$L=d{FRm`GewW9dW|V5|C`@21;4}H~ z@)+$k^=L02AMG`(Mtk{awAYM}_L_RMf&;#ADkpb}@sAGlQq!WXaMH-7*NExHEAj#4 zM9HOk{#kl9zNv)WwB_dkl!?;m*yf`va^4|5B*cSftg%L)0S}wunhIX(6y*Dv<|>HU zG#E2*r~MRRAjKe9S!nM2E1m^>1^r<5#zf5?6KD_F%pr6fZ8xUp@|~aWjfW9jyR*61tN2XnS#m zI1;hYaHemGM}k>1uf(-EWH{K@RS!pMPMPahb&VnMyh=FTucd2q&Uj6HMc0^Gu!C?! zls(Q!lW31Kf(jBR&GlK`htD)84M%<^T|cjq6RXTgW2ZAG&9ymcm`8KcFo`Gi9M|Tg zVK&W4!z@0fdah5Xgc&s_4bx~&n(Je#zaw$daPs1$@nd>~0-`7unpG9=e0%WDFx}#v zKeji&hXPjolN87kpP)dV5GM`)e+LEZzZhzyg_|i57Q|2^oQRV~IN3viaI%{M!C?o* z0fi&v#ohbbu-M|jw^Dpm-YBrUAi05FA&h=K~xQr?Ok+7CO}485Cm)GSPI?|*=LiY~^5BrjgFuEG@F_|VXc}f2)#G4E8!Fb}z!G~G@3yjaIvjrC; z9(pio-;$B=v$B6P)UgjifXGW@3t6AmWRGPM=P1b@j6lxq@gW(ElK3+5-)p+!bU zY}LFY&SG^cP%vRgPXLfsf-46(d=u@+f^>2cSrfB4+@X-f$Yv^ysoU@5F=Ulb=zt+y?nwd^RRqPg{ z$NWhMw6#|AYuvEPBqUoHD6h?)mPGeAbGG|jTX`N_AmnLM6uM; z?y|+mY=}?JES~~c^E;W!?A9YicP*Pd_)EKo`OM9B(f*ETe|Iu?OKJUCre1tu+&SeQ z0YcOz=l@oLd4Y|-RQ(+}rgHFwup;%1_!IEev)G>VI+e)(Z+%1!Oe zSgoBI^z7(CG_0#T|6KDGH`WHIq(zmjx8MJXESp#Z7({j$4Vb%{7ewrADJ*kc-paI@ z5C&v6qmjn^zR?y5q+-sYmau{9xv!T@Qv+j!4_YWULZ(aBZ&HKAYc z*ME~|-IV;Ly}jji(S*#lG!DoEvn=c(y>^_CF|ufDoC8pYSEXAOo{9-xaQF=ZN{|Xx z#K!6{Xw!4Bg{IwY`cqXFB71ypbi>rnAHklbrMGmBRz2Ktm;&^4aWn~fNHc6uKRbd5 zBjN4ssnJvRl83&gj~YA+rY*Uj+K)nW$jb4Kn3qmfq-nGDx@aAgCE3Thiwkhb`uTR= zd&~jr=LxnA{}>&t0rb+=;ERltk>XQuHvnZrw0hneZ}6xhnzT&0x~46GMJ#&3#N!9@ z3G4+U@{WVWVPZbd(_x?`{1bwcX&2Ly?^tc@8Oo<^7br1yngk#sSafLafGZXOgM)PA z0-5?D$&sY>S>%p}kxP-DW0mHxn=fLK&^T(ZJ;8;dOrfdUQKV(2dO6-F z{Iyi!o~sd-LDOKiA{+dO8y-ZaRD5EgPRju}uyo5YD5eFKuuOht?xvc?A!`7pM>guQ zJDcR(6@4~V@KTG-NsTZ!qf@od>*yIyEa)-AUj3hFXB}-1o&OW-3on!n{;XZEY<)b) z>UA}sXusEbnrgTAM_RJZmtfCpfimC-ORJ@eVArPK$MybwId5Iq68#IyMIa zdEJ~iDRig;Ew6L^d|GEDHyx(K--RWHq_w#@z!cu4LQh^VD^r!$jApU{85C>=5N^?m zX$DE*o>nK9qr(L&WUsn#6ML6W#_Fgodr75rsv$`m#0LYhI+*IbI4|b0I0x*TrWNt3 zfGX~WV;9PJl;IHeByXc!yAG3^w=u`(2>eNE1KF&QIR*0EN9wI!A~wQ;uPTbDmy9cT zl_Z?;i~0J|30TSoc-Yh{7BY6UROy2sVSc0o6Vl^H5te6V2BKG))mS4S(SbIaV()FF zEGC#HVB6b#3qTjU#TFL3#TB1Ne267We!~t^GeH#87?@vWK-E5a{Y^{NGyj#}Z}DgF zd-4?EW1h)>MAjn{>SJQfp!mmwHRIQbRP$6*^GvEa+0>j$HK&`J=Tps@rsiy_IoH&@ zlxkjXYFfWa>D4Lo}9dp`O+3gvQaWJNj@hYnd%h^G_S%v)obya z2msxr)(BznlU+aM#C3i~gsnHcNR*pjIBsq}m^o!O*#Y2hRuE^->U~ihrx^*t#Jkd4gLt>(V~1i_X6GQI(M8w|Ka@`9^y4=~SLbRFVex6NlJ)-^K=G3tS_+Ju~w)i7_hTwUAoja`3+&RsG6h- z|J{0SUZx8A53z5mUZILqRq{_6omG6E%4sV1kDhytDp9rOwCKEggDOQ7!_76#ouqCZ zb+3)pouY1zI$Wum=bocZtm4S?#_Y&_R6WhD^(=Afv_N;jBrz2I{3P?wPx<)iuTO|W- z1b&7nEp_WeTfAgv@H8?Lmro%Nq06-*gRY#J6vSl}8ugng-tb}^;1>+kZ0f$9lxCU> zSl;R80=}s}I9e7HI{`ApkOq~UJ92T!WPEs-0^7nP6!hr?eL74R z;AV>TO%sq2A0ZH}13SfBbB~oO2F=ymTzMkvDJ1yGUM88mPeS<(TZ|rE6HY%_)?A=? zKH?0r>U;haD4h%_Jxla;)C82iMzUbmJRiZq8?HIp9@V_%n&V?NN2ig+QV-c%Tmd9w z_fNRyIbUK!p52Ao}g zhToWY+b~#^uX0YD%JXdq0&X}QHweZBQH{Xz^h9YWJ~bgVwync%;`I!r9oPGZYi}Z#d6wfDXab-^DaA!!H)?d$$ab}gCM{?Rsk4#BAX`)RWQ#@1>nd+ zO^qsIsmChJk+Pu8E2}^g2R^o2z$aR1|4u-9hMw0z>d9@|5TJrk##$Ay!kmxQ2w?My z#cJLPpk`GXdKNkd17&QTH4%2~X*8k$+{A1zGbd=DT_V!kO zfC+6?gbWWiRXYd2;$v9hcd)6>id{OD6Q9hKnEe%phZ!LNzOh%A4aJQn0W#++NgO|7f8zYS|gSb8p zozW1sQ|_Wif|_01SwGNmr^vHm++ z1cjQWL!p~2B`LeyB`C37(agZzI@<;GG>?4Jl8o#HX-p{(Pka!p}7x~wpmfb=M;?iw4OgPu~a?9JA*GFe`*f(T^3AJ*jI=* zf3*nxdPErmVnp?nROdJ!g;8kogVyWKG~e1N`x&UFq_cYR#qqGkbb#bP{4)sP|K6&O z{y81_KP3pagH=YjAsVWMY(pwQZc0lAbRu_G8C9gfd-}|mb#o^DN&`|me?U7;%g<_v zZrQuT5~R0_#Cz6-|2zyYhIzQL?tY8sggpef0Ad%weRcM`k}ftT6ojDVGC!r%Hw+)0 zFK5~aVPuG_crXt>*Fi|-bDOG*V;j?*2eo$}c}U`I>Kw%)Zha&HR4+?`xAw9oJP+XY zUWQf%@Cqq1`)MyvYA<(c{z9ox#g)~Y`K?nw`P#WZ{CDr{_Fk@+Ow$pGiR(Q~n}XW& z{yrT#m3t!x=)!|~*TjbfBo}@ZD}phf?OuQuU>l~Z6@!$RM(#riW--_fm+2!qWGH1a zKRD_((~@aA>Sgf|@JCS&1XRX?BEXx~(3rd$nSa8|X*LTCG>kPCMkcj-VT?fuQj6}@ z-LWCScn0W+hKztP-5S0bV*pOmL2wL}(ZMRi(P+FWEn#MxoM)V+y#Rsy76?QZ!k7+% z)V$d;fsNK*z0kJ-+!&U?LmMvPiqT9N*=ZT2NUt~B^UanJ-Au@?r9q$8Y6;aXwk~b!w|=vFqf(m|8mc-3YQK@U$_p;!^B!yLx(}=DXU}dDomAs}Y0W zu1<~Bi18-R!>C5iStlk4D}X)J@3Z_q%Ws@!Cs=dJ7bZ%e9rhXbG(GXkM0q=HoN-HU zPt@vPI_R1=X**QWeAzXxk7{Iud6h4m^cRkHG2PShF?lLb9`C}(Q9jwlJ%X{p>@bDh zr3wwDBi*aF;N9ERX}nA8PaO3_&yUp{cg+i9H78tiZnEjBy74Tc*&E}&G>D#)Kp@|L zW>Ts{_ic;&z(VNp$X~(Q8c71qyd%kLM{ z@00vK#c%Q2{AI33vn+XyiLcf1`t2HKw)vRkzIMgzH#L$AnS#di*PncYS$<1d(8yGO zNOSsPeyEr~guA|#^+z6hNX{DQ1#d)<4 z6vQVvPND;G7!txSBBX!V*#f*m4aoXQ02Ihb9=N|GLam?${UEmtpL()W47RYq0dl@z zUoPgaz)`Av*-4OC1Z?xtG*Cs@$E>ir)HT`xeX-nRN|T8I{|VuC-*}N5yZMQXem8~V zSbEhCDI|K;4;ow~Y!sd-PB03IuqSPUL8Ylcyd$a7*b|0e0Ht{XrH0|8smO`}hczWt z1Qr;HddRX;MUYKE-h@5UPU#LJe?L zf7rn=hP|fdc|QYuHXuH0ICuphx*7&lUZzSl#a|*_(boswfb6spURcRf(g{#L+m0=M zvMnT6o$xDCUcQ)Kxw?In7p`u<)t1Yu3_kR&Q;*veD9MRH97O2hC?4Db=+g8A4N__xiw>BDDQ0uNa95Q12N3EVKZmI>x+Q`6L<$&Ea%SkY8a5= z@KO8~fNR3oG-kE89*gCG7SFfCf>__Q52+i6GD=>70x-CH?YgeyYrY(nfpA~l$ zcOE!I63s3`u{kNN16w}%ijo;jYC zQw>|jtI|TqMS^2J7jspnS2kAk4*(|1OVi5#hB?3$iY{I)Kfbx{S|nE>FKLji2!t^mH%@^CCbk@ey)B5&}C@->44| zuZ2&n+*yZmm)ojA6BRH%=njFABkV*E0C2ky6A6h&E+ey($6htFgSc3VMa9Jm*+M5$ zs1~&;REuAPYF#RFPh%RE)EJlQ%fwHQf4M)?Tk&PSRS$%)L;4W|;goXusNAGtfk0P^ zd7|Jb21LP8%#gK#qDL4RMW-}gY?YO+J~_OCar5II0==#%u7DAP%7_=2HV8**Xb^Yr z9bOra-B*6JxU#tNT^@6s7LOmz%9{g@iPPG)YN*>{sM}T!b@JVYicYi{>Y-?qAT5Vj zgoA>hgT4}$MJ9;D{Bo$)L$lB@+Y-hcz?Bps;#dhO*4*=ADOD!brY#D|x&!jb)ZI?y z=A|Lfk_gR48RU%UoVNEYj$LRbov*RN?1>?_=WIzdR*Wibf`Wv%yR0cn?w zPr^pjrQ?vcaRh02NH&m0&|P%~1;nkC=nERw86jAbKZ*+24&t>A>(h@Ajz{ru`7sp_ zl4F8md+fCWe8-j4{uK8!4)ZOODhk-t;%W;_;%m(C!1Z+%=uZGwSHVXFaQXTTmDr*P z;OZ(i>9utIs!C!s&Z{KAiU2NO6Tn3RZwGL76-@(&=j)eLV#Ih+<UhK3E<-RW(RO}ivn&hU7u13clxZ#(g9q)CV;CeV=e()1g1EE%hxA#O@P>wDhU8P zp01Cnyx9R<-C~bKu5Ljn)FTuh6XV)dN`nU}kjfsQfLXqu;-d=Z>MD}$UW$VX=js+$ zD4eUSu(wZ8kdokTifa|l)h%`?oU5z63O7^il9{oq5V8Ffq*vHOLC%BS6oh*1pdiL; zkplDdb_&@0f`U90TPX;lTA(0qY@UL+u>l3qXXLq6G#CLpiUw0!s!DsjTU_NRt8Q`F zQCHpKdh5Qr$|*rqR=2ptQChyn;)Z_9)+G)OV1m>2NtHzC5%twA4mk?U*GPt4rGz-4 z5=9vTrLPevyN>F*H32UQG>Ll->mr%6@y{aL1m7KSoMe5Z{U%6@eG$?MTVmA@Fh$f% z6pO(qw+1J`XC*mPAq1PipJ8Ua#J@^%HE-e!m%2{B%8iJ2;@^`xa{F)^oC3GKB=JtF zKWnqZmMhWpda%bdcqa6-{5nZ&Jul$Q>?~$;pi>xBYlsmQNLV(Z=JD)bL>ZeOuzogK zqexaJd&nZ>68*3hn6@8UCp(=423m^)06;rTpY~}!_%SQ%?Joz?;M;+yn2x~ZLOC+> zgViib(E2PZT#U^?qOTi=kqia36dpu4ZBM6ZDUq+P!#olWZ6 z2D%|({G3yMh<>mm)b3ft4s(bLnVrgW>rn|9NJE)>6>fxp~#+f ziV$PKA^zg^{RBwpKsC!mQds(a&N`r(!H-L9*W|kGE0irtFI>M@LDmKw; z&!cSD(u9-v7tRxZB?PkQEU)6l7KLkleEwfq;~2dJPfd$I%WQb0bH& zIBF+d$(OW}DrAeGKOnZFnTEw3cpmz|!Dwz<-uS6`-IOVwJ_;|9tsbDUdux>+Ipj}z z#COn*$Mi6xo)R@}iF*=YQ-=hXc_-cB_4pP^E82D$s*IeWhap|BSd$17r`kS{G$pTF z?UK~Y1aD-^9Ms*>sHJFOH?dB`+lxDFXax^-mYXf+jm6ti2&t8l{6rJs1EA9K#zo=j zCNz3`Om~5bht90mnt|6qc=Lu>!Ah7_*V(L!+&3e?(H7n3M~CU-&>UgL2{gdO@bqGo zunz(hF&ade!H%-iDP{zvy}<&qD7-0xBMGqpV5ldD7b?#%;UU#$v5-6>v@s)n1Td>O ze6{uHuoZ@<`1oI?O?eNlY||~0I+wPPLzfCb0NG>k1Mm~-E-`f%bXO6%$~V2Pjys8t z+j*QcZ%c`kF_h@GKY?7KZ_qfB24e(nu!;B^(-Js2zD=3_TFjHOiV|L0Pm!sH`!UdY zYC07o4PuIq>Dv;$)%BPx_6-Xssy`?BdkzgZuClXcM)^Df6ZU8i^EF`&%-}3ri_d%f z>VrDcX{NxvT(x4vPBI0k|I-w(x3qQ^wO33*XmRJ6iW#l2of{;*0A!(l5)OA#QP3mZ z1-iztVPR}ow5y{t4(UL|N&!`{*e36X34*RbV1Rh|59QTWkZ#6jZx|pYUFOx5LEHgl z0jsY-PF1Fjn)QFTO_W>RO0`kXs*$7uq_h0ojyZV|=VQUPQDGh{diNoNWwLzW(U3{o zhm{eLiPzBhVs>Tl(wg$|TzXUf)9KUa^Y74dfuT7L}&#gy9SoWbSsHWQO(I^o0q&#fcOE0^axE;~LRvJUFeQdZ2VGy}8= zxm7rITa%1kRKy7GKvy#je9Vo(Sd}hVzP*w(+S-UGH6OPAkje`qV~c;;;Ad>2*ipje z%9($XuPOgANOMv+z_!!*h%XNhiIUi0CK%p@7eFW}dpO%3PAAf0^SoDKKok$8vloUD z-3K&00>3GAqS&~U{8~?^aT-m{#y+&Ms9n`npn~Sodn0kzYz;&T1I;8Gp#$Ks+jSD%gj6TAuOay4E`Aq4 zqK{dXR>H3_+F-6UQ_2eP9bZ(8+md4zrwDwf8@RG+e$0Bh}xX~*Ljb}!1g`jzK zRpOaASr$Z5Jx#OKwLJF)0LBqM=ctJYAN6YGOXn+u6asUbk9lb zwU0H>H!p0BDU5->EWfbTtr1BWJ$jSX+O$TXk0%SlfMrW|eDl)I80}Im->hN()Q$7gCQ(^Pty)w#* zwDS?hm_{c#jy+>k@<DIMC?_X&WY8(cmbEj*_g zxnO4M!|zJa2KRB}Z(w&gqqtGk;%(T}?rX>VU}TQEW_~apqbl(?(o`=1^JrbXCHOm< zuLlDd9`+328p}*+uu#5OY^-yUF`#;BG*b-mYB+jLRUT9IOmiNQjbmIp{_q8$HJJ%dUR{U)~cCgF~;Uh z^T>3@)Eyg}D0Ua`Cb z5&9*0PF#p>&NtWwTC4Pv#YF#wPEG=qly(w7?M5eQk_jJNlT7VHwu5M;9DJaaP%P0y z@W??eup*?f5nGomhjAp z)ACm64m>(EiF6RqXeb#iJI^pcA_aSoS$IsmV1as2*a|C4(GMvu~->#y>-@k z+Tc9PTd>zF$UA9F7I66`TMnTjQp8L}jvl@)W|>01AReHZ%b@#Glpu=*x+D_t+g+{0 zF`1Z%o>v~E;0vWfw-UloA=W{Lxq`JzM@d+U(c&u|cv5!Hp1r>o=kI|rV`T6E#Aro1RDI4dZLn};>CNm)NZ9*xL0 z?3qLMj78yWu7BWN)T0F&!>|DS2&!2GLpAZ?ZCr7RzO`n8O!Hi5SlQNqj=s}EV+jNJ zRyvf15shc{a4;DPC>>@GAa!@P_LxHwsJS;i%Ql++#GEcXK(szQO_8k{6d5NpC@nO1 z)7VH-H^zOfIkc=ES{6gg#)bwwkA}wH_R$ZBLGB~MeL3k(<3;iI2-pjLwaM_nG{#ua zg=r4o>qF9(N!uhBk`9TPyy(r`n^%@~S)_v=1^Z5WqwOzFOb4tX z2a{7vW;Vu5{i{FE`8B^TAXegO)?zwXNN)$94V<<^Bh(9D5yA50Y&Mk+ROxJQv2frt zXa-Bp`X0}KLdvI8c`B85Cecn7vXfW`EZxd0#)q)^oK8d0;O`TGp!ei@2GjfxCQzQyg&wSE^{P8M&rXwj zHu=J+$o-cm23y2q@dKnPM?KP?iX)$>Ht`+OE@hh9m*G}*-M^`Ye4t+Kh&~ovb#H3j zNWsR&d7WyVc(L2R2K?Gi4a)6qD3*vt2A}#L^(dIIL~+~)+a(JeEd~H^lR!j#*H6>z z&K9Xf>)oP%VTaSKsafBPiEe{Do)WKS|ZELNa=0@}UH~Ypw z-x#ECfCVo627(YLg%|HPoX`M_jfeR)5FmtVK)4F77!V$rYkuzihV((cGd?JLey%kv zfs7UnEsIFGM1LOzBV~&O$9lQ6KE_BG?X_5oY%0a|QpOOgJ+Edpk1--z_?&yG_sn05lq=wctwrcEKGvbBVN+sEl7Z1%vCURI z0Qz0c=|$EP5$l}hj-T`{2YYD`yC93?L4D_h{yer1WZMu(K5Tps_vc5PwF6E|SvxQ- z2sQZr9*U>_;g@N1cT^NnEU@L3h)0M8&6>pM*C&K2(V^!v`$UVWP^EgCVaS+9^#UM!>v-1 zha}M`Pls4+ z%UJpXp0*2}-tt#F&JNQ5g)CC2;7aO@4tx_L+IBkcksqnX2I<9_6sCrMo!hoJO{APj z#oNF%w5#7DxvhOkC1292{&G)@yoD{J-QC5a@R$&qU&(!>VZHnbKenp+;@RX`(XlKOAL*kXBYNdk^qw+>g!n-F{kGu)cTWVU6+JKH?xi&KrD~5l+Mvxh)?x@ za3a9q3zJR~QthvPnBzp6%LT)NF5g*~Zw@}5Rhp^EG;M9Vi*eRkRIam6lM2p4A!iXc zH>#uICWRN9(9!&I$*FYZX80dW9m77a4A+r?DnFoqj9jN$Rh;G7^7SM=*2LO}XJ+WF z3R9~(`Kn02XjuhN=2E8!vii4gK{qJ5sK}R#i7g~*bI6Z?{&wm7VVfXix$;R)hB_an zq)m=2eF>2aFd*HYJ|X!$N*~`wHjj9}{ZKCo{Pm=U)s&Hj zvUjI|NC$|s2ekn1^QSQ&DbWNu{>bjIiGj4N)Nd<-T8X@dQ;?GqpJ6_~LFOr{)(3^b z``icMabl>RK#EHBQ&A6x#0yL>(y?;qaRng1QvaM7H58s{YWJA)-tD~{>d zUm|M$zA!4m8gccquf*|cP&$8yaE`k)uDfJGuHNL8YDabQ9p3yh&uaYD^lf_JcAJ=a zoRi|Th?7OX;y7@y2>*a77QYXgs+b-%ddrrX27O_c{oLm^pSeR%snQ# zhvj`poQjfcqoVimm?d7%Q6tE}dxsf!K2@FqSo*M`WF_!kXdlpS&_CYjqmf`H`ZUFh z%ou&7K>yDHm;e*?#jIAxIU#AfjkO(so8}fkKS2{bgDj*5^t!*h#L@Cq+Yj-)LQo6w zNpz{BTfpe_4BlsMf}E)6f)gV& zLGIL$@Pp29jsty*tN;{+$L5@8a#}G8t>HSM4Kl7=Qu?YfebwV4N2=PSYMGAy8_}Ac8+QA|0Hg9P_k;Hl7Spz^W z6Ri;!GU3FF^8C;*d0GtuH^}#Duw2YZCPqDdCbGh=BmxDLy}GGm(?#c9&~h=-dY3lRL?4D(SvrLF%ZZT1iH^s~*= zN|5t>gEqw7_{wNQz|VjA>Vo4vBCybb$q|yck+T*-nhD^Z_*_*T5_BT)+!X z4w5G@Wtm&~SA!~J) zD52th7TI&DgX#h`bwAu!uE#pe_t`R#8t|4$cY*3n?clXKpdfP%npUN{R7!56a6Dju z5_!-B#GBq0N;KE+v#QTQd8%F2`I-QI|4bY1>QU!p+r2!TesBJ2;Q{MS2V=CR=CAs} zUo9-#J8}2Y7@IW-s>dt34LuB;3`B0T?TfNh@UQ6P$Y3noNrQVz?rV%LgFL6~wvkp@M!gLDi{jef?${`k0tJx2R4o+b2G=s!Z5!LzTOU{g^4h4_)?_==uGXnB9eC_KJ3i%5NLaa6lD=2vPF>LcehW z+cK<^oQbxY6avzMS8)wo59Bat_!ZaJRUbG5o!<3oRzc?;li^;>0&GFziPjYxzgavH z-gcaCOQ*ah-n&KDo#~A}ZP8g&IDJY=@$paBdxjJ?+OF^qru0Iiy5uaEn$k~;(l3hL zm6Sf6DE&e)ElOWdu`o{QKgiS1ifDdGe1UwgN0eT&?}*ap;IE#JtpK`2?t;><4@$qj zq4XOF78D5sD#j^2a@L5_Lk~Y7rTsZVo$*dY z53&e$1S5d-nza>$Z(s@v2WYXQ=u(htjtw;?=6m$S-~KjXdL->};Lx|4Yi86mHsDk_ zN3~TT2wh91$d_7|=???c;wAK$?1I2pa>SMp0tuQ_Hv~>WTiN*1gRVhhU&*rG8vK*e z1bHICS4?CNRwGTMPyk9c$pT4W9wEEiG?&3V!SZQV&68>;b;uDYLYZi5tUFD)`|V#F|c8@&ysjpxt$ z?aFa%!R+z7HJ_jb_6#=0`Kkphc5PQgbU+T!f46UuV24_RfAFO+#^681uwts#bpdRX zoa4iwTD;QLBh%i?)CL>mFQCOnh=eg?8d%q@vew&Fj`~dS0@n<@a9C(~+7%ObfyXD+ zH{2`kf?q>NwzRXwOK>EVY+OqyQsAif#hiMNpM;W*={>#0U<=gG>;1A?X1l44^>qXA z>C3ds{^>e?Zc+due~u?HaD+`23?!DWrB%6&v(Kw%np^CU>h15YAA~y+`uEYqJ!viw zUPK|(P1KeOwqf9{NNs#t1{9|@KGR`a2bnK?7Lpb&++26IbRf6iwi=)}uC`Z?Nznoe!&VXg%Tb;GqYm$nS7lMvW+C-? z?9F@;rYW{P#b_s}yW`!AR^bK&f5#^cNG&>dPS+&G{^=}?5Ma@cC@#PusWU&IpV&;? zIi_0^1BO^X(PGrx)ui$*9rzA(qx&5TFqJO=szNk?%EzGI@H#wKiCcq!x;Ej*6kzVu*z@nc z?OtV?)XU1)&fnd2z9=8+O~vA<0e824nalsT z|MUz07r8xmqekuBMwk&=+^buygMad?U;K$5`-7kO`LC1TGp~L#-kY>{wxo;s+c-}4 zYf(E-Eka3JSOlAF@GnOTTk7dsW{1V>j@Eo7ti(^%@!y-DOM6#)5<5`x^F;0(`FZAc z=!7JZt;!yrsbUTSt&alhue1GXGxV$c7T`0bb0FH!eh-ADJ^1@_CqF|JSU&hEVNPcI zOcom*`J-f?*Qb89+54#9^u$>bFsM{uGOU<>(t6u$d#8Gp*1&4`>r?-lG=-F8APznk z1+NpCSlP(NOjw(qvW#ly7QsR^!hE@rc-gIq)nBTn6|%tQ7E8$v*DyT@50HVtb$CCX z!57J3^C}2Rwh>ec((Q-<6;nr=SIJ@&yP6w`{W_L~pJi|EYN&ixeJyDuKOmn#p} z?!7TlG3@WvjZ;j1Oq5sX^=wFX#qhH@M{CUOROpgG^;{%G}JQ-zEu9w%fubarEP74<=wh58`5!s+@#->wb0vP5N z(d6XaXVfgN*RcJ*YY1emxrPWV@4kH899urFw0x}MUv>Es2wt#!-M{+sIRJ%4!aeB;PyzybW$8pm(jihTAm zy*cSO`AKV&t5y-C7uMl70$4CqRne=#9dv4Y@Q{{W*`q z0t9J8Qd6>XPAjXbm*}$3yvxZ__syn0&C<1cT3@DO> z5S(DFRG`|=>3x3&0)RX62m4qXafZlFFtKm}&7sZ!onu`Q{v7oAEV@>_R^#Kki3Fz} zG+(p{0c6c-%63k*3Xqd7r9`F2jA!Nsxw3KrP9HfuNsJIL30#V>83ElFROnHI3PsGXkGxRF3VLpgWrH|ag zN*jjGD6C`V8u8IYjNTTJ-2XmcV#YAhtA1nra_>33ic8D1wBGi z5q=PbrsOIyM;+@s=n>k_?+DvNq-JSJd6~H}W720MMJY#yr41$#q zX*=jU+7VKySe_}Sc`jHA^##fF3Gt%2oSb=RK@YL&bB!nHoMTbgKLv^DGQTQVb+tTh zSTCi3(2h6vaVyk;O-5RNZRQyhfexFQ%Kojh!|{zZ3na!?V#+VrN;B`bl}@pL(pG|Q zrmggBy_HURy~TLbTZ}Tc z7`PiZr)G;?*xhM$H@fN1vLEX$7M)F7j9k3+7MqDJ=Hk8rBfYlROl&bv_dS|*ZL!fn z_s2r)q3{-)i7mzh+G2idyB?Q%0XnHI=11_{;78hG(R+`VEvDQMG1qJ{58`jK#XMup z7MmGk<@6nGF<`3RVuxS_da)OqeT1S_=7oA6>9+Qft79L{T(FO(ViWaa6Pc6JJ{rlV zq*1tKcH2ym=$v^aczACrXz#41fX%q9-5uNWmf13BqMyBT{KYHAUnC7Q8+OHumyNx+ zee^5dfb2wjJ`t{L#}1-Ht$1)dr~5qf&~vlYOwWo%7xMrxH?;egIVkz_}lkcC9P zDuxaCXX5L$Wl<}SxM^)=dH&5{jFa+ECbe=hIBamgxF_nia?Tjc9c&LpXV{namR~(F z!#n^aT)=lz_h10Y!-+g7BNG87IQ_Jo{8+Iz=mJo27e_D__}AdbLx=PuQ#x_9B{e4u z(SpX!$=}Ab&J1sGW%ZG*+>NKfbfdV{DslOTX0NE({MySb*nCo?CWW~&owkyOr!BJY z!T&9d4Wu(RHn}XBB%$UID@UhD?O5;I2-ADum?nb2MEaFX@r0T(ifZ;+| zPcP}#;f3rT5&{wZKkr#Wu~v2A>pQ#-efpW3OEoogK2 zxshYGhudTx;Mbr(ymVi?@N31T=?Kq_f~CX7Mpz|;w~f{L=M|##5q?qZr(R(viUZz_ z4=yb&(lf#&*d08wdug~?af}35RxR1w#QKBpsDiU+-3EW+k{BS1SaLW}^{~CH65lz* zJams?t^-fA)38}vuk=guaY6W3uv@SCr=&V<-3CfP2!SvWLL%}sv^4HVB;ojM0R z5y=uVK@&JB61XE6qI(noeiK5XONp-$NNdqbj`!G97#$j5<9(fr2IIh`4#xS8I*=LC z1Tcu{!e?4PBbl%^cBxciTD`U>iBM0Si&$>c@rXTip=~TR!#PcOt7xm(Pe)mq-4vQ( zT^;=6U;U3?`uvl>^K);uo?y*f^#}j?2mkm-U;5h5zp5&w@7Q+mzr6Y*fBajo|IQ1q zt4eN9+YbKMU;VYmfBW=TfBuhEB~yWn_;f!Xe3FZI;B@Z-RkW+$z$GM8oieD;-I%uy z?*E=+!=bK=C(sBEK3C9Hpytsb*V_(m`dqP1*9*hTRP-L@nc{Pg4oltS;cZ1xTy}7l zx1JbY7B_Vo?fBc5^1%Afal0ssA$L|cp!>7FU(`28pB{U;zB&4I^Wma-bK4W@vOcID zUFx0{<)ivZ9~j#)@vU3w2Y4^Aa>{u)oCicWvyW5Num)Ebe|mV)&mR2l z&mKE|;^f(**=JZ&9vBcfLLnmoMMs%uWur+5WD~Q!;mC0P5~d_ZzD*r?jE|0*`L4$g z9O%($m zun4^>D3)#hUB#ttRF+G2RGEXC;59@pj{aQjqHq~Am3_~Oj>ri_`v`_@J$?{=8=Z{? zLxyYYVk&$Ailg@DMP3b=!MsAToLMjT2p`QNhRYj#^UauU3;+s7xz zU5-edO-sc^G9S&WPxAy$4DqGrLYE67Xwc*Znr8BrnGBq^(hI6$`2obxpYnXKT+i$o z=9n+oA;1MC)Ox9}axL02ZmBr)_gKDRe+62FCO&|tPJaxo_HcpDnQ{Imw7Q^9twgH} z>W};@7Xq!4Fj;7oVn%;bWS%Zr`FXRi6!PMcC+>Oy==|V;z8faUfW&0fv%0IK_U3h|p;iPyie(jd|IsAd8YZkxYNGNe3VrQze--`yVJNOwqE65UJ z?e>^M8PCr{H}#s%r^pXfi{UP<)-;@kePJhX`X=pj*})v9gxGo{LeaN*MpCh z5I^pjhn}{XdjL{uXInwN#1ef)Y_&~a$?}=`%|cSWVskA)u~w`= zqDr!SUZA!i!fC%A5UL^Lx}@|CLOd{#wUj=k;~ONUD;qmLFB+wm=x=|V^nGlcA+HnH zN_2^ECLM(JunLFDUJ0N=@QpcRIHu@Bf}WK;N@@y55-Oa{Uf_^Q%B=txbs64-qmxLjkueHeFB(*$2)Ev=FpT28e;>_vUB$En6t(VR>_N z_B06)y_G;b`pD2Soks7CT&oK=3l@t$oq~~4h)o9wps>MHK9ml-(SDGHOiS z(h_ej97hh;?TgOetkEtK7oTcu3hMpM_D~weLEQ|=s(4GjQ1VehTTqTGmG=nGvafXHxL<9xr`_|h3 zIp;nkOMXz3Df(8Q|Ggh;uf5)T?HrpR8Sw2K2>{>SLQes87O8|dA-umW;q7dB(J0NR zo5g-Mfek;?lhB>*vD+o4MX2?%T(>#-ik0& z$~u@sdN@XuYdnrYx6O}YLEQSPjRC`h-V?;z6thdQF~FI2We%hI)VX?ch5h^t6bkRn zYcrssZ%{eD*7rv~&^!dJ@@m`WE@&rx$DvI&JB?EnVNz(mgZpvYE&9!%JsBWSdz+ zuC{zQ3&C|ie2roQdw)!;gY0hiwah|v@8l~I=TE;P)3!l*vwptWb`2Apu6h?!)&f&F zh49*!)YsaDPnfi zTzW|zvG)P}TA1mV`^8QjrPC7GO_&e1G^#(-C<6U;kujqpE-8v9m?1iu!3-_8v745+ zi-&c7ro1q#L_EZnB8W_S*&^m5@0PaABNn= zbuo=1$}p4V&Xa&$>c@TN~a>U_E2x zW&zj(l(Kqi03cYev2r{M+d>_i1b|l=08ajmnFwO8j3CA=_AcJ!mD@RJ1d7Sa0v5{d z@;}18A4BHjd>(Cp%FlhBVftV9{5Ya<^CiRdAKW!eAK547$GmfL%Zh^et@Go{(-j3V zFXnSaLH!7@aTUEXH31-O)XpwX55+3Z02xAXyZ%#xDUlhbF)318rIc!Q<|gA!8Aa3~ zx6<^21y_GV?Y1D|OD?+j8)^q`eeH`bv{!tyS6%!E)KLV%*r~$xQVMCkBF?i4k}$6u zXCmd1dC~B>xkZYxlxDi{4MO{WO!HCx@tH#k)N7RYTqZS@izc5)KG`b5HSO^ld#}&D z=7%Jn*mj3ZSljNb&fdWen_h_1?RHr>-U~%t-54c9eUCJl9`KUnVn;9VTm6$C zWeJOs&H~j{5sm$59+||j&`^um;Vzf}&$VxnaNa_~gcZwY&fy19o+Jn!`$sO+>z%59hsILa=jN{j z{aF&P9lecZ73qR8K>`6E%EP>OJ+dpL;5EvVl3>2~o7MlKGHk&A<4 z=HdX)CdoETC4?_wl8eKuow+!;JITc{`!y?l^ZnUe9J4Q&CUkx#7e{%$Nxd~)F85#)%9e{usaV~ZOR_*gHH0KKF3ehVBAVFQH>ZA3W0LSkpI6@XS;|A!6 zZ&$wylS-$q;~e&EPTr2wB#7fOPnf^@7>RwD=GtVAd(Sz(jM;X6gt>qmZ0T)mveSl{ z>A%p$VHTplblC~t*#X=LHaf!Bdpy z$>tdZV6Iv`#ROxS zWK-dQO;kC=j##~+mN6&<5{L-^X>+EgTTIpvQH(TBk^yv535Y~koJ&lctk9+?!pZPm zOa?X%9{zZ*YO8Xv(;gnkPML{OyDmuIhr*0lu0y>ema9ej9O1-w&UzUVZ9PdLOL`%Z zesU=bbDq>!<^X|)(q1fivE5i8yR4Q@cEN0%cklejPVXBB#5YLu! zS7e`!7SELyztX}29wGGDghuY6YG;1A#XAH-Kw_VF@4#emDNIT3D_vumMgjuH#kw5E zcIZJIwIGdBY@-&Srrn^X-I=HXR4tqvr$%i%b$Z-lkenK1nI0&g>AdKg*{l26s`c3) zx&GI`@P)topWHyVyEnfV&^C2Y^|o60v?1AU7eF6iY_i}-5FOl5#pqgGxq=NI#=&3} zT6x^GZ)8*U`~+Xj?Smx3l?Xrdgq$;WP}p!tOFE(mOTP%mGPR6PgiAi!-ZzzW^Xk0{ z0I9Za0}ur?J>TB%8)iBljAzHkVXlCS&jm214Hgn&92jmllHblRJ-5h)f+5&kAeIqv z1tP@PGR}l%hz`gZ0y4DY4>&N8HYd3IjV#iE3yKsyoWQn7?DV$T4q^E4}FG~|=92R;LbkOivIF#Gy;!ndd|Tdm2~j??Xnb~_fhm9F`S zVzn7fdi4BD_voBkwC(6o!gZHUF@Er+(%Lq-HlU(tFGPcSHJP5K5MG&SYkX+0O}L8>5!{`^7UpZ`WV3>wm?M z&|_3hiTW}rxm6tkR^Y+RKr`+Ojc;ZDeCWY z31Jv?CSOS*?d)i^oLw`X^cOWmkt@Wmz+r){9A!3eI3_7s0II3s7i>Wc1Yx>5va3xw8GnU9VRjz0(8MCsngdCnKO{y{uJ|<3ImXYAD zkfvj28Sh~?XfO{Fl#V24o2>NNZ|STirM(EHg~dXI z8E85c)J-i0@>!hPvW94s=_wma89YmLjlt?yr z*o27y5I;&acL=+*IU_N>E3aBEYo_jTu*f9>X^99!TWA6{VJrP%(gZ;$Jboc~hG5NJ1!U+Km~ z1aY@LL(B;yIG-O07hYFZdVtY*91+|!(0?TyM zp$CjtRH9*2BbQ_yjishJfvbf8V-~X*#UL}J84sDMeY*Y%|Jrvx%({y4p0wvl66wpB zypl);v~EP?*r#Q_5#1W%4OD@QxA3)~)S?AJ^0(4Q-tIcl>Symm^7)SX`5z(1^AAz1 zOM8llYUB{29wlfhoW_L1JH4kF0aIAKgJsp`yXOI`NENk9gc~=Qdm-BE(&syt4~R)> zQhiJWQ26yx#G?(tQP_h6A{!*}kF(aKY3lFlQ2;S6_$xgor zg>P)N-rSN-vQ`e#?G7y*q8zBUT!sp=#Ii6Y2!({7Cg!*jGaK7xwV)-8K8-mIxKe+U$X=h&S#wWP&ffMoAH zQxNys3=gAK*~gfxuD>mGuo)f^k+G4$h^MsoDD4E-lEf_1)%(e!5oU5;!w6*Xp@rjlt86sq} zY&p9iBD$(PyCw$4W@^C1&D1_0Xx4DH6Uo_bg0mGJ@`>%7jbV9NUe@4jVQ8?)S)9H2 zDslGUtH#-bGdO#+fl&qpfHu40EJCd-qs7#_F}7Q9RCnRF#5b-f1i>JS}Rk4wV9Mw_{I*7AhmF!XjAA- z@K>?s;Al@lW7?|Hv?}8Wkxdnhh0}qcZmk zN44!X#}76X+LXo1*0FGd+9niWg55T28$m8M2ObbF9VmXh98V-0246;yyDc=bgYJMSh1HE6 zb}Cvj-L5Di;a_ZaD5E-rat0XU+ zO5lE`Wz~-wW-I5-RBd>-iW;p?T9WyLd)j@C(q=$gNNG3besQcdF6Tujac_qxgm@i5 zHNTYU%#qfGB6zR!vEl$Q_vaPP0v1NH!wk3rA-Pmf#m0zOCVe~M!C*%9mXP?#S_at( zDTo=VbQd;bvZZ78Q3oQiNZ2A-0sl6Yr+fl@Bf3vPiE7`;;S)in-vJNpnlo%+^Pcbj z;+b==b#?gkoMuk$yFr~zG+fLx^b(QUToO@Z%PMHIS%Vgiw9a51Hl_{T{ZQA<>suP% zfl9!(X4N1>7Q)ee8^R>eS$mrrEDS3=HPnM2hQ`lCb4HaIVGIj8*m+0NrKMWQA>M*V zb|bMJNod*Z7O01qa1XY=MtDBM`O6m#fwXWW6XpyVny{&dB#Sx{mvhj2Ubr3W1BZ83 zbEn6vo>B6Agq9^d2qMX0yqnK_PHrs3J5n||fQ;g5j3EN2N#tQLv=UfajwH1d0s;jt zCG-#TGs3I_4RuCyP8_X*ow&yv!W&l|;W#h8y@qZ^?;8Hh5(BfKGJ#o}Fpu<|2Sm zGZ4^i3_%LqDsOU4_4H7F5?;KO-f0O&T2iTCo%zOLm~(QO8M-Q=T@Gq8=_$PKB|FKp znND(5(N}sm?PTQTj-EZ(oAKd89uh5`TW>+M2=Ki{bUo6#PLwe>e02X<;B4GrxVe9f zt;JozyDa3u~M?Sh;OfqxLqHiFykU<FmjwS|6veLtt<==i zl4iU^l0mDH*qT^{6ymK?N~e_;C}=|YhQOW~9+tt*@$PX6eQp^M;Et)eKlDs6km{Ib z4v%n?R^*@zY|gcW8;fk6#rKlGDq3GFCDJs)I6Gz|3ms&I*6dR1_-(%q5umB2+z z+X@#ja|Ttzxg4lUzT907z%BPWRy$nV;Gw~pJBrFP*vc#%f&;ER1)40kP*ES5;(8i!ReV$ z)ioiL7uC5lSKnK*NV?rz03(zC&pIV~M_RYZz*Fq%-sWVa(IG`3$RYI2q$xj~Hp~Ml z8WJfa3%Ew1NXo|H&F#B*1}aaZ(48p=k&Pg9Q03y#U^VJ=E`gMg~*7m-SXe2LScIG*r}6c0oA zgk_{)V?D?=fDG8+PYczjp;v@TXmu7uuMC!xG4}%`D1sm!-8#5If*fESA(*4Z2F}=J z{NJxp3+v}w$?r5BwGLyzgoS+3VL7((n4HD1C^f>f&|hY9$~$U}d0my^uW!`;WYAei z*P02L+(W99YJO*GoT}Nbib11Q_jL4NAMD(R4FZREpw`_T1c|`KzK=e^)@o=Sme!up zI?%HLgBCRuWacHn=^jagly=-%6B_i7{_8YgHHhq^T|ygmXxoQ<7|nZSbCU zh-)}vqH3dSE8o+i^;Da~^2QRZ2zr`!PWgD7<*k@3+QmHOK3tU7n5Q_URYMxVq$lU7 z=8FN~$xc)xhX*V;x+kq0Mc~Lxho^6bslVy(;VgOA{<7^F;NS(ioqfc#IMc^sU6h5= zW9;Ql@7O0E@_=Q7n^0OU8#+QG@}$@m!wTG<+7;o!MJ(4e%F*O!S!!SR!C)Efx z+|w}6$QUAIQ`APoW4;dIM96X(Q4Xns*EXyX;Ub8M#)$5y2W|;b zF3QGqg#ko|fE-gX_ygZfmbqKVz?nLOG!4tVFk-%u3jlGs>?SkPDqV^nK!*I`!~)C0}~&-ROCFPH+>! znglUd9f_{;FGKqzsXq1%|K~7y&(-IfE5j7#C{g`9_wxmE%Sbzf1BrXll#S99{8f?S zfVG>8(()JE<35%SS!tbq9zHg1mBTvNgn)^0ytsKpv_AM17FWN%h$I6kDsjR}2Ngvz zu*e_v#lW3|DTyG0R4b+%R6ID2T58NPbsAU0*}+r8ryKDIwI`6*3f`65J#8)cF*c4+ zYYR861+RXUf+?U5iHHq}nH5By{%98)YPfME@N03Hx`l~t1*-f-*tO5_SVf#GP(Rd7Q+gVb$#o+Z zh3OITn_gRZ*lYob?wFZjSCWjv1Tnn?MC@Jg<9M#p_Ok66+?i*34I@mxZHym3>+c0c z13?q>oZ$u2AbcSF^ul4oR`)3NW!3@?k+lHw7JKJ)Y##EQ%}l4eZIqgWswU|i&qo?a z9wS7F=dZN3qcq#vPym^XXGBA&e8h3y4Xx#r;bKJti0jezNw-S~=Z1-$;hWSl?E?^uuVG+bQG*Jk5aM$r6HsIwB%lS*Kw-*Q2Et6ovvEZ88A(&ryHjs! za8XH_6oF2gUQ87*hV$WAv~ev=3|_b^wF+YQPR7}d#W7UMXx{4sr`8gNJGikJCGCjF z!>zHV8R`c|Canq{9`t0w+i?>=1d2{>_Eo5P(1}M+U@ydN&eh;;`_v@!MZ^wf6R9wv z&ar8c%jX&rwiVl}l}|@^HM@&@U2Ur1W`={XjRU4&!qm1vmP(GZ0}f$5(N3^eIcE+Y ziXc4?F(7_CSNJ-|wyA;Sb-NKrODjez+Heu)P6Hn)I;`F^$x(v3H6A3WNngx7As}B} z)Loaif_hLu&8Ex+)B)oGl}}+jF|<#B$#a0YxD&!Y&@`~f1bk%>{_X(ztA%2KzOa@Z z<1zuUuq8e}V4Its$9IRi$AKW&-Dvxwaq8dV?Mv!AQ4|u)jJ^|w0>)TJhGmn6A;g|2 z(b4)E3IyY_KvhzdYgE$zhy{HpFYV58{|udPtq$6qPN&sjZ64J!(VT_lyL$hq?FBhx zS{^gmORK_4%~eGHa|~f-=|87v->E_{;$%N#za=pkU}D;}hp(50D+uvYDbZ-xa_4wH zI1v(({-WV8u#crzx!dWJ|1F$2b~}Cc|895R@}Z>NPUq*vXgcX~Y z*S`pBgo&9L%Q}y=S~a23h$;p!xV0ICB=W8ee?B(uEF%u}yeoae(ty~Flqg~s#HVDg z==k@z@npB$_ypmXw{YVH7QvuOvKO}wt_~z>S@f(Fv3NR^Z%(+tp zzjzqRVpuY^9qQb5br%W}#qdi4y5TR(v@qMb{a330bms<|JXb$Qc4bJ_!Ok;ExEwDS zu-Y2+_#f-ca_I35oB(aN2-O6ku9-fWnc)G877#^&G~M!GylFz^o;jCWb^YeHtjgZnmQ`5=W^CTC1u`i2pxtIw9&*-XRo3D(x?ZxpG1`pu%A=dS zx@L5PhsvMf=w`l%scf*@HRCmwkd7{?Zm4dGT+BCpbbN!Em2aqS{=oQ#kB(28(D-Dv zSzZ5u@%52=`Q%5(H~YrTyt8SBpbwl%TTIKZPo0^ByFDDhxercsv7%j48o7GL^UXC_!P92-{;G@;1_pZ2S z^DC{7OcNr15Lj(~+F9iOr1K#Q#*)gDkw$rQ`qj2H%A2gDj4#O)TWw|< zWnwhv?;MjS{4Nx;B8G>YjC7EjZY@zF8Iw0ZGTtoij!3s(t)F(vyTn&_7E^-O8P~&^ zUXbfSk?rY|)mw(_LI9?ysD{dI@H%WT7r5d&j)|rHa6x`2k&}RFpdghHQh@A;IdR8m z5zMb5AABc>JtPq;(qL>X44!eCF>dyG))a7wH4Hi6s9WX$jYQ2_=Zq>hJm`+S3$X_!*3s!+p!nK#bHSam#g( zgc3^mcq8`SL62UbRp5$HM=K(+GA)m0axblvAJ^Y9I2Ea)Dc&JisMbr!sH4jWv1!IB z1k8DwUpAVcWfD$bvk>r54I49GzHX6=0MiF&zDG&{?(kF<&DJLrg)_9p$ zXegr~#7LN7d+|4x_Nw0LV(ATOtXY_6pgU=57*Wi3T{RV-QLno66baE;Z2(;1Xs4><6cz@C_6g$8`EOAW*Lr{R#+l20Qh}BqL^b5#Y_M#@z6Xqc9Heb z2=@_j@XGKFIE}ZD7wO3h(t&NKXAbCRWJ9!GewZK!!Z&6eSU)>7 zeC_B^BvYu2(b{QYkl#R~$Tc-0A(gOlo~;3s*!h5_^+s!;>!Kg)*aXL0%`1RmljW$Y5LFlpSRg5K5&^xZ<+of#K?6VucA5^MaDHO9LD zrVt@J5Eo0(=8Aq3RI<2ChBp=_9~3_g);R~`z({A*<8u9&qGd3|Uj1DAG)?E7Uj2BS zrrpjP+(!rw;ge-fyl`K~cR{~ieSe(p18G2h<_Tzm?Oy`CTqM_}`h#}{swk8r+|o+? zfzv8Z?&JDmT$3%p?sJVqX$_hV<2e!$*ZXKXbdO~}5KN$tNwb6?QskD@#8 zHh~D1L9hbfGkBQi=9R9CM6D6?24@v^Gc8$jSWxM8KP*}0qDP8OtnjWk|Iqiom%3bG z6xybKuQ;Za-+hxef$g2gwm zWJ5SON_@v8v}2)vjo}FVuXiyQ|yXV+Elizm{%>WVvYdy=beE^ zZj9Hf`APN4aEWo2L-U|A|68Gl4tS`l%##oybpWwVptAwxj3=udZ4wBs8-l7N7;U*%IuA8{d&ikO&AvzOAi9%=l<89{fKK2auW7pZoD=dgtiHJDi?wB`FMlJ zNx z`gv%@O8q?6fgfz=Afe~3=rbCz4*X!}UF?a)ft}*Z)62blypvaQn0|eK*D@aOScXjP z{_f~~dL8lNH52K+~R{0s;Gz~g7!2!P{5?GZbdyY<7U z@_4pA8hL!6JsNwwzdd4mbbIW>@l1Pk$m0h_ z-|FH0qi^$Y*XXc^_l%BsxMTF~9^O5ABlbMZ+N0GN@efV#iiZRzXf(PE31qxiA@#D! zO5bflD#_RpQVD(pC0LtX?bVrl)C!1Rh`tiwus~Ua8{ZY8l&IOt`Me5Gnnn!J5+-Po zd10t7hlxn(H(A^R#6~d3IXm0QR3fV4kp>~PZ9&TQ#y4%9RjafrIIv46Xu z!G>i&+8+HKkB_uR$2>l@3tBuiJI-${<4gtzFz|ePbc@F)+n5#j{E7DHJ3O9ikFN5# zKDye&aCD7_<us<&>OwkLu+)MhsWEaw|IQ4J^H&KOord|8}kXHtaqeZW^7mfa_TO1o3?2XUKGZCGc9r!!ef$3XZ4xk4-6tgh>ea z?;?tMP%l6*Vs)(4eX;%vUg*0${qUzk$cx2oCdjV`3;+U16ZXNo1Mp!l>vk81zlM-P z_m-gKi2F=jN#X)f|Gc!1;mDH#Ty3@5dunNXr41&LLJT`aedv3&goszoDMb4&Xn2H7 z^X~D{clpVQrI9TuPNBpSH&>9RfgyZ;%^jFxz~e#vL;uTzd)2l4?$OSuo;2OApy1j3 zqH~cbVYCV#Mtjmrl4PM*)u)D^ghi=mt>J>@{*&EiTb?z&AMoax8jykub`?ngI3B%R_p3K+ap+gqY8LBP z->E^YUtMGDLchA&fP;Q@RqQ>~ufF4|&Qq3n6C$q1TdtLM%|W<+!Xww`Jl=41_jV2^T}R%pjvGqZufFT5&TSk}p&?<_mBxtmtDCRxzF;*V z&~qL!W?%FOwjAU@?N6~rEIZ53W zMB%-B#?By|$CnTtH~Pqzn`yJ8PC*kcL)M3b(3X*Umn4nE#`Gu%M{h@Zw7t+s!>1Os zK8}dm-iwhi=vk2(sI;V&2mv6OOTY>q)*TJ#1rN@4u>?e2n#QP$l@=jdP03NLzKFWe zYv=>ih^pYO;V1&pq5T?9@Ak-qJQHGBU@oHp^#B5DPcdv#k24e!L3>a81q1(-+yhYu z*)X_BjX!$$5DN^oV=i(}uG1U-4*RauDr~xZX=ip9b5@Ma=jO+<=^yNkgC9JnZ2MeT z7#O8oT?MirBgQ%$DC{h>&|0YSzEF}Cmu8@49Mdy2a8qNirrc;PEvkpnwg+fiw0iiZ zur9_79~`aI}*||mBru&6nnS;CN8GT?r|X6G0G_=ux*?-qy@3Hd7`;H^giFV zcVcYF{G2`B!RlsPNnC*(&*1v}T zPwiUj)8#qVn&ANpt+MO`O=FK@UgUPB<68(fAu3#JyqZ1uURDxxZq;^hLYwm}}S*5EW2 zil&vY=V&IZ+_ZrU1o354>;0!`Ew_k$@+>|;x0~FJV1#lvc1-o%>5IWbx3>Nf+nLSp zqf->?o{~sRZgO)L9qQSs5u(0_d#q=wzdYf+;ir5C!vtg$%>_kqP>0)KPJNwMU*PlH z{*T?JxPxyF+*bX0l&dDz%3`_~DdsVPm^^=hU|l$F=@pBS~N%Z4STFnqHvh&(8?($>AF^!yT$pS9W0; zQ0L{azq|!W@k&e+a0z-Z*{h(~^cS;enlG`&qTGb|=u4xZ>~BN9#NeJqM0hoY>&Zc{ z!OSD&jWe2>_c^>xnmPpl)SbR#-V?IeUIYsF)*xyC<11Zwz++dk z-0^)dhAo96zf!2IgcsM+c+IqYpe>qcc;^CLJQ6UVi?a|lbnytcJd0V02}e-r*=}{> z)6lxrPP;>FYkLImqub?PZ|*=Edh{TsO^-Tr`9JAZ^u58r#Rv^~HU~;T5gPJfE?)Gj z8@Czpn3&6K0u*+WZ(y-2Y*^H`R5ySv@wC!pQ3h+{36*6KcA^1>A00et96Jpbh0Y*Cpa(|6lg4G2#-ZlD{FFfKw_Ah$vzglQv{KtUx;ZWQUpPfo?L$l$|1M2 zWbG zDESrA-7r=ID<>h3=kR?{00izRlm}~7QpYfVG6|KH^~Dn+KMVtCL;mt;EA~VCia8WA zbPI4sJEKRjmtcOBuQ9dX7PFSbKd1uAXe`MzF_|jJ(qvSsHHFfg8?XlnUvxe!uAB~0 zZrgqq`1#C$Skk2`Xym|<;tCu() zmT$q-Z;$z8zI?L5ERn465%?2?Mj8^|R!hvzARQY?Gf1N1ymrn*I;0@D9~uhc&1ww{ zUzXOEPC`QwIHoq=3gg$zRe1}7iWqE|H~wu^v_bv!uV>btL1yi-)%6ALW!4^$}-H5RG zLgLOB+KmW{O*-y8F})+|JIY-X^d z194}tz#AO_gCjTs)QvI+I=LbDCFZ;JE&$cFrDH=9k~PIu7@qCgMSytGNrsg298wI5 zbDUq`JSHFapXMB^M9%*-zyBgHY3f63gn-h+2Rq}lGq*=)k8YW=QM;aqXm@gc`kb4GzjK(Yb zmT_Qw!%Mx=i5;b)Q8#Vn^y_QumCLXFCX{-`^0zEaoGADF5X1Y22mm|ppqUo2UEX#6 zQC|EFB?Y^=)f037jzV_cIs1w26;19))Cxv%c61D*gyD+{iCQiI3)ET+JIOW-i+Isl z42$R`MF#?`Ec)PhUb#@r30%1YvhWx@@hsunXV?{L7+q4xLW`DE5sw`PxjC(buGnI7 zXX*-Oy}Yv_%F=5rG(%*$u-8D3nen4bvf+d#T%y4fA`JQ&+vK;4;Nf`f92OB~obGUB z=b*f6kR;8--ouzs?p=&~eAFJT$0O{?<`=!~g`dD;(+< z5rri$kGL$#V`qf84=^}K>5PR+4|P&3MCw?V0s;DN`Wd$}=Pc>bZpz)W!WDE5mV|w? znY24mCDDX6>Mw&PVN;kzlVvVoYO`p9X&%{peg@Yg5SM$)LuDyB8RlP9P7ppUz;l`u z5p3sNU>Cv=l&uTLlqT1Y1E!?Itox+vPtv`V#ZETH4eov+S8EX23j@NC(yBI6_IYAr zgPE&YC-_2WJTquKUet-bDPYj)JPZ^@_6`3rL&lX3ULpoHJK|d8LSYq7A1T$@y`l}K zf#IwhV#qbeG=$4KAhJY(G*mVN0+hRVqq3X7^Wq7l1dnwQ zl(A?spDKnm#`Oi_qMdMI2rYu{o>V(keYWq|;61hZJtDyfIl5o%Nvp-4M(AZdB0ZBu z$BJ8l$_>odz&ogfKwQ7U&c#BF!AYZDf~qK>gqcyk%`7_OkxBKUk=Wo8gG=^h!Y8YB z@zU~kBHIMXFf2a_((%%h1=&hmxC@LMWU*0V-K!EEj>5T%xEz=}UbasPGj>V?6XGiY zq<{~Y-+uFZ`F+pLY1)!VT`H_#^~#cw>UWxpw^zs%$A(N@x}8iZ0B?RDbCrdTp*9Q| z)B&;L;4KZnSdc0;nI_>1invt6$|@Cj9ubSm=qQ`TjUZv(Co7<|nxg856c|I}4a+_V z?J%_X#!SPw_$&5EN@{d;k|Ut3VOS3RUzk3lMQWl*grx(@iJ|uA5rwP?TgLo8QJxlp zrnRX&ss2>9i(IvcR}n&HW6}S4Z?VG5F#M$w8d0+*-Lbr%7Hze6eIo8$oUwpmK;xa~ zX6~GcJ4~U*N~YZSbQsjK1kZUj#|R6TY-M==OTORmirGj1jyXO{c_n@>RRv@3;Ex zHq#b_2m|ewFA1p((`kyjMtDj)P}evbZLN7`+cPFtK3j^#!?7v)Sui^pZcrGQt}U_3 zM>4%q*i?Dtq3K}Pi4cT-HN#&g(mXbEClL!Nxp_wvF&ONH_7XuMo7?%b*H%lWQqcMI z>f+pdi~e`|z;CHO^KsOLgY_qr^1e8c5({w)lPl!xtW1$9HuiXyRV>9*(t?m~uoU(G z=q+nmVIGhCGFW!9S!ePWq0c>-0Vwt#y9)Xzd z$IY(xHtdExIitZ}t4{XhUj(ONEs$1gq_eHkin<3BkZBXDhuoDYKGn4jnC`h2!PMG!@1&y2H*E68QMkn=eNgjnvzR8V+i%HeGb>o(XjGKe?K_YcWHk%|JhnCjvd z%OG?}=AsBZ?G$nQc&#Vma{8_@8LG3>7>m;6!;ooJ4}2P8I&dOWEX+j7Np76h5O#QN zS#LopZPXQZT>r+B@$*;k&7A4NuC}sUF2}lVh0FygR*tKplW$sdtwFD}& z_$$X3fCUD?trZakDyPVZ;#c^$*W@a^M!mO3G>&IPF$JIDl+Y#{0LEr}wWQHRn;Ozs zgR#(Evz_J382S;nQaGTDca^uxAi=*Ub;P84rFGD^?R7W=Fl73(CVZ@tvY|lu1;S^~ zAWcLP5Sj_k3hh26hge27>ZVu?u`wMa9Di9F%Z8%i$nfWS`PP%XsXE6$gWD|M(x}!QDHJFWS`+&jc#;V+Wm-@oOCE-UI~S2jfov& zR*mEe3m;U|ljcp^ecD7lvqMU=$rcAi2#VA@Md))1gQ?==;mFtfcOpUtanfpX9zD@lB)lP`3Q8IMgbc$ z-xA2r~63*t_CVwHd^zCP81IOz528n|>rv$j>qBK)V=l zig!T*jv<=!^5A)SxP+JqWZK^_$UuL;I%M2NoVf}>QEUM+9m5>Ll=)F88vu_8ZEj3- zZ?saWFJ_G82DSjzD2kry{$;BBuv)2Az}qOGFmof?RE_66C7w0J(=bIK_#iR;km$)r z#7)h`=%6<}uI$7vNasY@DnifVoyWbt_hVWv^oRSIOw?mA&+x7gQD$O=j(bk}ka#$L zF_UN8I7jjDPIqz#iAKXYL2`}L=KSPgICP#2qXsPv`$kvOwWxrp+U0L!tw*kbk|uW; za5BoBrZ(;}Wilwiv`0*ZE^=o{Dhg$Lgv2Ki*!-vl6j##V=S`Zgs|)%VRGiaPB0|IQ zViHl^sR`OBG$#nFT24k)=UZMweAVNMZipj@wTu-Dsu1ZW${MTOqW_#_mv73m- zbhKzrL7P)^QajKg6b6i^Q#JBl(Dp_*XfG`G2c52t1IFrE3^yJx6v5l2<8=#De4{wr z`vZ;Q5QYz>y7~p~C2nf?K%Sf1eBuW(r*cs2pt=Q#nH}{Rm5*Oj`G9va9sfm7t9+iL z0xVACZ(4!;jT)t38H83D9DeC2h3Y}Q!2_UQRy9#Kki2Kr4VK`mw4@5CWiWaO(npU? z@N@h$Gd?tmA;I{88pMt8{5X`J!->X?w0Hn1vLXr}xq*dr6V`(H3>t$J+@rAzN(~VL zt|{Yrbd&!kL%?J6xCsmILE3ZKBMj4N6SgsuYS~w2*rEiB7o27~samc?T4W0Pa8daH>R>#~MglUT4HR(A~J<6hS)uPOxSzyCsY*kdhu0HnwqoHR(6HOsv5r`cM z&ZCCzhh_Hx)w(N)Nc9N3?-O2dTox_Fq(QklI#w?OI_W1!7cem{^HUa_@WN%W2;-%T zh5)4k`Mu+=9(HKQjlmL0&l1r+tVe|U5M?L?Ou5PdD`eY0gD{m#;9K3<|AnDoYj{s-JhiMtBr^H7ZKNL%pZK!#(c6 zNrpvu47N&;2@e)DpdYRx4>a%y!(7wEW*@=;G~}D{Nc~4^t{BI+GW&Jwd5Rmu56l!Gm18zF~n z$)IjD0K2iy0g=ii6}(AgcDzbtwyMJ?BGQDDr_h-80C%7sI~*NHO{MfjLgpiZ;gZOP z6G!hChu(NSWt3t~2}3CN2cu!|9n}cb&_FP_Fjgz&nnrVVadECz>e6d5M~6L1tEiAh8t_ley7F6leWfh_;cG5qfNC-IQ>pmhS0`TqjvUV->Y1m8nT+MGhzAmd4Vu7?nYe z%1~Q+jKd}Lzu!F`x-CnZTP{0RLQmVlI%m6%fCcUx0f$pcM0N^B0G4Lk8SKX7#vdc%lv8iK7ZIVH#TG|H9MR3rFMwNro1xzB2tBB!O2b&lDs%kE} z0u?xv4?(8p8xs^}gVYZ95QUEwVQ<=4Xr5tXwrI9J_G7k5sDD8`cWGK_*k1ZM+Pg%L zBYL+HKbm8;S7^3ILj@2^gQmGsjAX17(9AX?E{%YyRuoxc+Tu5l@Y<#Nek#DV1aDp$ zew?M+Vf!Gpeb_!Q+|hNkUI@0+H?(LSy$tL<5n1<183XzQQSHK$>PT1C?)z878eA?<)h~R};+etF4$Z{SeG(zS)Wy z8(T1g_9bS}q?c?EtH=soOv?vlZP*UH$i(R@@HIrUB5v&!UlJQMycKLHX(m*{!Zw${ z5m9&@;952s8-ohYgVL%DVTOYgAg@BI)aO7nJ{b`9zyXJ>jHkf)6%}P6q5=Cl@*yWg zGEgHXO_pNDa7imCCPK_>P+lDUdhjq2cAXHm4cVC`jyRiHjwiJWv*w;?KZx!$Y%sl= zC+n-&4q7d5kr_=-vt4G4lr;0J!aHjRzBBo*&4srLyx3v zw2ZUmQRQJU8UY#NHQ5D=gYAT!FDt>2{nJ_0+;OIG2O?YUxT#gVy->aOG)Vb9qu28x zT^_xG;{}fUAvLch*G4!5y3!o*274=ep#;qt^WO2(qt{d;8ps%PFv%qk2|@A@^e1wM zBV(-~W34y>kgk+D!~Vr`SLN?@4#0;c(KL~t^&m!&vLU`Y4v4V6QGXYptB_YNmlAPb z>-st{x;&YcNrISCrPqJv+c1TvrWS3QixL1wBVyQtu##9J6e}nrF-Eu&XYm)njD_jxEj-H6de?? zP_-LA=FHTh?m`$&PKWpUSRgIya5;08P-6UcnCEqc^ z4V{&U1qoYLQrIYB%(5eM<>Z24+1FfD%W+mEbt{YRO4v9%H|@{_yr&#Gj~q(csL;bw ze4CF3#sa)$bN@~2h|~qs>dme&X_*q`2U4PZf6AA4abP;Wn}cl|pD>Fwa=3&u4!3ha zT)2ZVcjbZ7+^g+veGISxt2W8)%3wwj`)7$2Fxx*%ssP)506rm9`{S$%#Ip_fWCVR} zS_UrOK4x<&{*j4I)EJOb> zVarW6rqW@jVU=M8xGcM^rf^wO)XS_8lQ@xv&LbE$Ln`|KY=u<^Ou|&mOCg0i^N<-X zla;aeY7cWd^k`|Cs-E-=x(6|x!Xn%ymPUiP?zA-0&A8K0e4h+U-i$jfA~)vh`?_$y^P2Z`qYcuH z)&ol-j7V8Cah=YsJ}48*xLd#%wy(b# zjTZqnXff~%MV}Uye zmpcJmhG2(h!k8s{Oy7t9y+CNYk}6X8EDV1)oaSNZL9L0>8SxXF?eC^``~liOA=8ax ziqiukE#yh!8xl~=9SqK}1`Mc7pmCpxnv3n`l-@EY(jPGp89|8#`9kNkt!CG5)->bO z>%H{It{uj0Tw6? z(Zv{wR4B&yH=J~?$;{ZEjv64(?#UzzoRMU~bR)#3L?)D!*qYBoy7DDsQJ5PqH%S&2 z)VXQG$~4IW;sc5d{}~mAh)zUOslQKu8e10+n+3}Fb*4*_>x+QR{8>*;@@F9gQ$HeE zxKrOl#}W$RKy2X+L_48f`c1vUte7KM#!-!E-qZyI4S8$$M`SVci-<26Z*I0fpkNZ7 z<|m~F=xygD6c<=iLP`@)IqH;dY_whSrNqti94%&Wbyw=3)m4Jx`%aJM{fM{MOY&uJ zqR+Ti%9n65F9*wum626DlpSv3YC6=xaC;HR7>|1)MI1Tpl95O z5#@NMlm0vuOWbR*LUs6&pt>Qoz{QfDpaUj$itb%&)mNx@hm&VxdOG;<|Cn-Mq4WSL zOnewG4F8C1{NRZ^*q1C6B;$0yma4c}rP+TE4P2=9>}e~9QNK?)4%looo5F9e*;lf}_Vc9!-Zh zdCytprn!^I*-6_#j}iM)9mF$;MYvEY1b z_=KJXALS5}!&qlH{A?OY2t(130>j{Jc5zoTy_zGqC@s@P=Q_eyw%99|6D~3{5E^7- z5R>gPnkt8CeUjK%6l*L;z0R%5T+yHrDQh&e}bWMAkKN@IzoAZr%l74 z&-zUI9Lb!DoJ7OO0Wl3taDWk{_$AzWA_+CxiHpKQ;neTRu;QbQ7bBwj9_6ph+X&va z5h|LrjT_=Y2oN%Q1&-cu0))YKAe4FEPaq5@a|`%*ugrTE-@#kIIuIb`+dFO`xho`Q zIv&uV_~?8@R$Oewu78u-MYbBB1f~gTn%GQ!!wJtk8c(2a^xF+J-)QTvZ5{ETd9M=; z=M#eOL#|NC>u}-&sIGX1Ul_5q1k`kcX?neMZ3{67c>h4}+Sa$*4CH~bsv_UYi~1f@ z%q`UHY@UQO%$1*!$YghG z7v?oX=@s+8{?}MqH2)oJwXSM;ib8Va*K2?8T=gneG&KLwJob^G8n1wrVoTzPae6rdiC$D))jUHy8IkGx2 zxV`5{dy#?(@hJyDQUvFk!4j8AA~b?SO~ytfD5vq@n=bm)+OKD%vlY-`DxGsjEJ(n2Nh;BIHvDz8uRUlTj=HGdStu=THKs>yjBxXX+Le$u=qu z(yS?kWJU}xNYD!(#L9;xBc`AoQ3qj=7#r>&ROs5)h}nST+0Zxq zyEpfaZ~n?J{pmdeti0qpRBBtS-+$+5Vdid#T5oFM*?UuqSo$}$AoOo)!Moqo0{U-i zp}W1Qg`Lqu>!X{W{Rkwc`ry}jLVKLo<5d`phLMteeLg~@HmlXys(2U5bt;vHM(N#j zQ>4FOPkz`ScZ(I=BsR}cSF-rxj;sX#8W(Z zRWcg2#}vk5g1n+I&Dnt%BV-T2bed66EYYeItfE)e?9x4E>TOUh4$Us^?QlJCOWHp? zhma;&3PDESn5I4_rx^Z<>SN%XeOPNGJ?*p;!gZeQRCKyJQQgQi z{F$II7gAYf>OIq8wxw?Jl7^WX-GncmhCPPT9~qyCQOedS3=F|U$V zApOS5(3B?UlMkmfSuR$D3xSbjjD2rxEvb>Qtj`Xry?uT5!qg(yW`gGWY$y{_3Ck6e z1|xKUaQs~WHA+TjwkZXNfH$KdcKcf?{(95@r11ZKL2CN9oA_PR*TOvw#IJdkP z++Uu^MdB1wHl+YTiMXXH!ed$+#D9nc(gmv38Q2);&vgkDjQo>n7k9PWGPZFg*M$Rs zAcrNG7__{&l@>I+x&PPX8p>pt{Nx(q)Zx>~_3_hO<1cEw<`6+b6?Njn8$d7b6Uah+ zuHL?hBa?7YJo&i|H~6tY6-?)DeeBfm$zma~A0*i*N(D%`(@^Zhh`ozfIUH;Jxa>cC zsB_qyKMfrh&8um|U78;=GZE`sB*73l_Te((uBV@86;x4(?I_DGJ9F$7Gr(@CyX&Wl zjpFhx1gPD$?zSX_d`^#qI^34V79W+BM+WEdd0@nuC_NU!_?qmD6}TjjVH}1St;MN7HeBmA#%I;Y2OcbsSkD){Z58&S z>S7TSJkVB(4z8XSVVA43u@AU<%)M_@b&qAF-X6NuMC##44E}-TG=OW;rNXt16iz2+ zAQQpC)944ao3TN#;)?mMnJ&re{R$+>3xz?Wipz&!Ve^gosj@{f-pg=gaXU0-#aBu2h07Lc4rn#EPy|mWE2q`QY5-~t5u}Zs5Un`DPrK$v6 zwGn+@Ta8L@ZoUJRJImnl@BPIdAcBT1CkLhs5AQueu(L8i>K#mWEUM^JVb5knOP=_! zrRTCv-7>LccV^FYSDJ#pIiTt$*eB8xbb+n25k4ce2U2mh2&#nT1L7I!R-R%hLDJDl z1`KGy>>7{@(%Mu$Ae4HI5UP>-#r&Bha^N4%*i10zC^ASB4^Q+iTr3zA_y{`))(vK9 zu+g)zdNTRggV;8svxZcl8P24~Z(~AFnc&>0}2r63e0u0yE<*pJ#!o5A`q+bH`{gvaOG=uiQ0lRcV*B#gF<=t$;=q7|IO z$oKYvX?Ud=Rg5q0`fg}48$)0%Fi#vtfd9^6K2Wtc$pCn?LLy51xH!U7h&iDe%v@{J zXfuo4th_B%Y~$f);3p)cETAYJEDREF6gb*)IB3i1ZL{U%b=q>|9oll3w8(k6I0|k8 zg_+oLcxA?xv!}7;cVtSx6nTMp<$9kEloE>GZ6 ze+tZO7c$&xaZ0x;0Kvey+bb+kFhL5mx^M-M>aW0-7MKSU#e*S+pW}}ocZEkS;nE(50y^{ zb!5>ijkl6OexJl0yoe?GonkQnscC+B@iH z2Bg7#3O!@;TI4R#D^tRw4Ypc*rOp^BZ>BvleZuS>FkTlAZ}ApU=7p4M$MYRaf5 z5RlV`()D-*=wz67Ys%+X3NAatrUEJ|7U0e*Ofkg^NK<$K!e!pdkvmzn*hDGx@=&Zo zU)teQN1UN?Mf2Le=`k1`?&M~>V+F}9JRH|9*GWDXRuI_b#0p}FL1P6`+5F~OL0(zS ze=SxJ^s&@ulZpV_uh%FN15~!bnyW9EkbRBdwQ~p>zsfV|Tm6DpPk$aQ{P&d*LG73= z$c(ub?q9F9FL$%C^C+aOV`JE0Vy*F&3>YUp*2bX)ppA^lNwUm2yO-z;3K=H2Xg!<| zs$_Lu!w#$NzHn;HyxHW3$@iN4Fq)EG;1h@aRFPja+VlzTY*nUj;*KoNT{$8^{ZiUb z^cz9kQ`wd$`;oHk3x*AsV`;VE8rGXK0{U$gzHV;fx#S6|FXtrtxrNuc!8bt3?7_AE zf*{RKGDx)6>N&9*IZN|9`Ml6xn}Sl7kdACvCQunJ>*? z2!-)E6(3d&Kq)K&x|H{EXrMAi$MK5Ah%6bkGz$fcD_h2JqZz}Eml(tSyNw~S9Fs9L zyVAizNRq@2E2U?!Ou&TLI>5QA%zyH(_vkYu0_x3vOth0E`!SzS;1DPI&xiw zHsu)m|$gJX~8yAO?$QKo~Vt?ah}*2T9M))qZxC=dh8kp!Lxe zUJc3J$zhq1;lPSfkeo$?;=+Qd8fNCw>T0*$0`Ft&!=xQ3!%nr6nc^O=k!QP$8s!qZ zA-TXA#yJx(RhP)r{O09n1`1mQw=>hq%(x_dGMC`@S)!qAc2S~}A|HE$NPEOpXJAx8 z+tIk05VQno&$-|cyf=Xpduhb_R=$X-G3^4^rayy1Hd8+Oi{r1dQ+5bt936WL+Q&`` z)EmUuI0ZkCMMeefF}0;@rn+QA$J`1g60lG>fjlY#l%Bw@u9yNEC0F`lkN9F^0%-gk z**-&)w2&}Zl+df(<(l%BZ$S0B{G{pi0vcUfi%Yyr((Z&55j13LrEjsCz&)AAe3<~h zl)auZX7o}83RX}Q0V7gF#C)Cw4(F@JY3IhyVlsEgpODR)%ymYQM$_F0QFhBP(83iC zED9kTR;-y}ogx^&uI(Ip4B?`Usz3(LyEJ5s(#nE(Nd@sJttGIsS63+l8Vik4l}HbA z_ggk+I3~oq$Z#RVxkV5bJ`25pAZT94M+RjT_QN;C2+AJn7N(vn_t6vXVc^xyaiMcZ zp&$A)e*{3x;fvU~z74t~1x|vSA)HLjtlv zUpefj3?vRIA)7b^CB(FQlsn|FVXG|D*RaW#&ku0Ow z*R<&+OB#>59-sx3cyLWYPqgujvu!#;J08UH+*7%_Iq(+UEq*znsRFzYH8JmX8_n}|?n?qW?8)oC%9x>Bu1 z?k3V4gq2ZyQFMkjEKyC9B(9u0)~r0>OG@=UkPf3NLklMBiWl%jlt+wrbhO@dm_wg; zwrCJwF&;RBSF1@}(`R|w_PjL=c7a58uz>{N01_b_aT<`ob`B&u4G7xbNDvrg%Qm>K zU8u^rAYjH5g9lfNc}kx(D{+YMNK$wP0ur_aGJtGpDW&HXfrPZ0V9K`RszE-wJ>MC8s9R=87wW+*ygzJ!p551$J;qSeb=0}x|0Tm_R7v!!&mG~= zi72vGRd>Sf6-=m{fiQz#~VoaUXMr3q|uf9ZU@@vT;?^9-PG?$R0 zDG9t@0*@^>0(b%_Eiw>g2soZimP`ONeWHSDysS@j8J{Qs4nJ16KGS=1`x-8L?(-LS z4^E-qWhA6A*D@EP3x7t)ayau#urf?KF}%L)eW;)j0|LDr=0ydtI$%rhNNbE>!Rf90 z`0bwDcP+yE@f<8hteGO5GDRpehPO{|omC@xRj5Ra=ekUOI)pC;dnW$0_r@QLm+bx0 z*VlV}aotwwJsol`?AE(Vk$}yLV=9*O#P66ZA75xMsw~1w=9wvErI9#_-4Tv=0UeSV z1cAne7Nku{G z=Oe9FU8%E01XSE;H#bmE<3^{sfi@X8@LlF7y>bIdCvVJ^8@ToJ#(cRkA2+0=@}9b4 zdJf#2i)l&C=5P>BJOl_prQyo--gv%ua;RJo&J1@!c)TW%xOyuGRz(RzUIBpVEfoUy z_9!%_{y|(PkW4OR6;$djdK`$3#J=De)0tgUZiyi=#0J#9H14CS@c23#cd&Cjy`OXV zTS-jHJ8Zp1{k)A*Z_7(|K8FXXvz=vZ|F}M)QJT-BR`J=EMyKek#|xF-rinmEZ>K>$ zuy(eQova|5Wh?PN0oetbmo3A8NK5stTOV%YYjkS7G}7&gX&VL8&bxSOcTBUHu)MZM zSze<5HxaePBlrk@9wb-b9;|F3Lar~v&;#uz78^TLbAi`HmBvg=FgNDu@W-$p2dNnT zvvfL*l#&kWb(nbKNz-+xGrStYJuhNjSItj2=`lpSy>MO-+fRs0_>z9Tphy3x-EK>d zs-Qan-qt~f%XXQ-s5PYkL8btl73?pVuV%hZ1^S!1>LDijDVt?7ki|nAMpj3R@*Lo> zu{Lo6nuC}T3fs^3JN*QM9_)It-3;rj0M(9XlFXN3kFi`SpdR#6eh=i`g%j zRrMJwG-xJ_qHl~N zauZAp0u>?@ObjbdFfm+N3Ke^p!?BA5YH#6X2&$d`A4mXXo#&S}P zT{}Epj<(Zkcefg%ve+TiHM6hSSS-%J&MFf{-Y#XeUU8##?IQ>8_NGc1*sxM7$yI#F0G zW{b`0R$ATTf~C2F32wkhXDU(hx03l%12z)@Mh*KB+Mj2Hva4B$y@ z*+%IOOxS)CF@2nEAiSTKBV=6Ne^u3 z>p?bqh%F-8Z9vJ5!?c6LQ58zG%n)C%5vRC$U1*t6@Z6~}f&CKhyU2emxcc6Nq9f->y3) z&d3>5d;&&NAffsAosNw;fP_u-r8E4OiAJ)3GJOt4mz~sKy`3Rh27rv=Pu!Gj28KkS zz1!#Qk2EKoY$y}f-8&_KfqJ0+=PM zi(fB*LnGHmNAs}dHB;)J_pm^OjSe}ck6y)}+%|GT2AXoYE(BrLF+7|yQU>d4P+;Yc z%z90555{g99B7CNitEXOFaU&!l8xPhZDYZ2L%v|!kbP;6L36P1wPK{ofOwe`d=3j; zqa+MzxBQ(SFc*T!`j2Xnb`S&?NLkJ$ovkI%9bJP(%eISs?h#c>yS|221#a|~vaZO+ z^Ns1_G@z&r09bcT1RHid#s@h;tpfz<%M<~FW+S#}@ap9u0pn;O0f8cUqH|~x0NQ8H z6ZzM*4C(v0y#=1!jNykxT|@|hJp{(kxUg|Q+i48C1zEBXa6TBaR zCt+E*CMhoU(qEnjb}*D+STRtPm@2R%OiOMaQOrY&)l$I_BGT!BjI=Rh4yXo`V+eKS zTqKO>y>2`p-65yb%uZMmj`6%p4@i=@yuVbQAx1+1_pOALx)^a zmhNCZ%oI&f{nMsc#!63WZkn5wel;6SVeUUDJK}4Sa74N?Yf(({HmzaM{12K zcq>eoqcElPobpHsJrpgC%8E%83hDL`{u(2*hj#?4RKqox6&`7FRk(Pp0qafEuEKJH zjuDWjjH@zY=W=`XczdGBm&rva?U9!!5W=fUeD4+&do3TTQX#akmtN;eOl z;=W>G0D!UcB}ggegJddG3-&!ZEZA27e$nxl`N9?zvX z8Rj&4NL3WjP~+0a-ow<1Ta!%QV*bM)951nztE)wpJ`H`3?6bNih&td6dWkL-vzDeK zM%~IelOY&i{VXa@{T=o5KZ1~L>J1S!khP=)>jPF9GR$M=n#oKFh7cIrcNxe@bG9#t)fqk^o)sEDN{s8Nuop~_Uh0_S-zOf7ISF2|53DKo$hliQ@F zz16v1x6^L%S;w`8tS$v#N9_QT0O&EH=IidQD;O?Q)@0TqK^fMdnJibynm-+8)45sy ziU7g@feFhxH4{M7XiSB@U8_ElY3wu8)QM)XTb-R-S;n+moo{Tl-rPb3C!QSS?3_B% zLK6lOH3{RR4Su$@4c(V&0}jmSx6R(A-|bu3u={1&z+U&IPG8$vC#~DP-$?0ECsu`B z>NH)zZZ%GNDG?UZzP7c-_Dj_W35gnIe)N)NF$EmmE~ATct_4$_2dQGSBZiW(H7hYM zGB$}h5@skeqewh61MetyB~RU;P#|Ucl%pQr+}g8_WSJ^-Bo{0KpTr`>CMZ^fg}W(W zpwZywc&~IWP#4xNP7iE=NNf+VJBIuTJt--ZgQ|h?5Nn8qvTX@! ziYRmVL$Hw`8=tD5brSy?llWKudMFAE=$lARB)PNXq#+_Q*#P`tjNx{Mj0_qw!k1`- zBjzS^w*fiXQn>sZGV(WMWR{FfnS^A-*^HpkkP)XjGUGN9rC0;gpD=@ef62)AqbEWJ z6?I{GKle!_g`e@~pZoKWKM(rzPyG3mKR@Qr$J{RD!~UG{=Y=2R=g(9^m^V9x3e_J6-b>amecfdT zUVr%;Hm=yYhb-Ijf;GDJd|cJtc-o=# zyza&Iju-m*w7s>g@^$-83oaE6?yS4BMQy2gQje|JQszvJSxI@Ct?%7gccM_gE7fJo zt2^tttS;ZohrTxXCZ)D|+OYg`(y;P;`}@=9`Tq3#Y~b`dVYa0^(`Mz%rOkOUfkLTy zrtcwO*3+-^x)h!DOux?SXt#d7PK-i+v1Lf6Uu6B0o(iUEH}cDPdFjWx?cNseUBtI4 zP#N%rJ;T2s!*$2_Q9W)DpziPw!qq$+chYEp)j@B8U+4P=i8R1oix!79cZ{pNB{@gJ zGJG!FO0j+_s9D5^qGw}7(=KBq07M?)0QvA9rAnHDrRF88h8XHC*8b2mg0>)&YLB6Q zQe;osPP2Dydxkn^XNZg@C=q2b^xEaBMOjq8ztJ>(V!pg|PrQQH^j&=Q*L(>8V$lhM z)6xT7Y?AE{poZdD3pF(PVW>*IvBvsIdxbvIpW9jmoCgdH{tW#%o#SBu$yaChYGQbd z91kmrKe1I4g4(jWvxN~-7sJm*udxmVAlZ#Abo;Wf$*WLFJ3AI@GKOK#!=MG`YWz-T zJz!BSN&k-`V_>w2+gHa9N z&x5lW*t9gWEe>CboVmg$LjPLL%9#j?k8v<%8wLV~zgl7soXO~z`p2lwcKW@E!^yS# zAsTlY%K$6o4S%|ZL#6qjj%e=h)c1W#J>h8HsPe$p%$yj3ei*!W8UOId`#^%KnGdmX zOK2e-5D}O$sJx{2ouww9p*;4)W5aj!4bRX01WfAp0m$E?fs}wjlGqF4SG9Sxqg1`T zSTSr8Q|2c2W9LHF6HDL~x<*XQG!B?kp%q>Oz!51Ax#8+JG3LrDletFD&!tsAI#2cW z-0&~wmwu+*?tVzL1fdd>3O;eGx7um7rDcS;vM`LX_89Yyp^5pzI?#D2ovj&1lb}j` zh;1lP1c0VdslCGvqJ$`lWJwB3>X=|P?MwR))2x?QdIESq5a(yxSR4ahsIGtw(NlD1 zL=4gs=IdniKvSIW9xq+N#OKX%`$!84LgvZn73~bSJjZ2BnoN%Z1`p(k5_+Q+6V*z% zfQdP-Vf{3i7U;*2Y0=1u9keu_ca5XL92eAX>7RBRQx&G@wx%jMKMOnn0i(+*)r!Ng z^Fbfbs;CT?z43r>*lSzR+@Px<_3+O$SYRmUz^l>Z;fr)!bRj~w8NDN|jWKpO?Zmvd zABDNS`C(1R|LU`gtaI}t1$DPbN}9Z_r2G*U%zfWbw5exUN==O(u&)I zkUFvW)!Q9B&S`afCz$^!ol(dI7R^x zw}~+Ri&3x{M9_d38^+Fi zqcjrq66G^;_!eh13(NFb8-dbwO(37cGN9!^6`(XLP%dzLCB0j!_PM5n=s*6bP`QC5 zisoZv$hHwv)&h;w{7X27pr>eBJZI>>mTVy#vk7RBGrq@^q`YkEhrYOg7DpBa&15xv zVX@((F0?=a7`&3u*&qKF%GTBO!%qY8kE;Xo&|zrr2=L+HsG5Zr9H5Y=*%me0z#Mp_PUPKnnN0@10!n4{K70Dic)I8(pDB&j`OLRhNA1f@n z`u`%tjiSNF?omVYo6H=KTAJ9<&xJn(BE~A`5N-$RKJVu1*gtzyWhq(saem2q&x zWCQROlQXt4#z0G8t5&zh|GS~PRocgDTAy~}8}j4&{3k!&F^hyu(}gKJw5l`pZal(v zh@B&bL>E)Du;ybmDS5$?uMOf4K{GF8>N2x7Y>)1->$@lG^T>kwuR%N~&(!bn_aoGi z2@~T-UqH5PL`u!P!w#CUuS@@>28e{MrS!-?fRGipSDdZKFZbtPH-EVtKg^%{A5e)G zw)Qrp>R0zK+U9HMrw5C2|D2cY1^n;G3tqq^G^P)R1Ee62vck`A^~ht=~FCFSXutMwzJKHsiR%)o!EV^6HRdMukXGW1MIG>E+2oEdtWQn zT{3teq6`!$B7WVtg2_rD&idCM{y0JG2qs`+jdd7 z>tFZ@pf=hG%MW<UvxiO=5&+#vc|p`s25X1wZW*`+b7^2j82& z`90qJF8;tNid&}LBlT(xS3Kg7o(-6JNDK2rTKo$d(l50g4$R+UNFQ&Xc%DO=;o_yu z(%>&>NT0I938yYHOMmDSD__Md{k0j&UyQ$$d6rf#YZ3i25Mv&pW=!KtcI2QPN#ubO zVzf-bnoOk)RW*EJd3n0~UgitS%ZQ_kzIUbi(|60F0)4@A>Te)@`LO`IBN9#$f!H$vX?tzr+WA$ezC0s~cYJ z=VJ7-h`9CL-U{etPKr*{j$U2Qg#;nFR=%eF>enz_VHz%Wrqq2fol!e=&5bLUEgzXd zt>XJn{um!gP)ofE$@Pp^gWFyVQpn4d%kx)l_VV4Bmay<;J7no|d~o>%v;JK{|K^Eg z#`ixWFFrOmlPy^^Qgxd8Mj04!^XF1s4=}38S!R#@Q{6N=| z!7ai%4v)DeOm>-fce~7k^nbK38!YP|d^f|mMzCGw>GygX)RhQkhsw4b?D6}2NcB`2 zittt6E+-2Q zZ7bQ^0OkV@FkNEGE zoP98z!L&bMqu&*$vkG0X5qV(jKZ%PaGCr9ootsRXOpQT#mhg-D15aogpL6DIz-A@G z2C6d*Xngdi-Et{8X~-iekiNzE|B1?UMUcq& z%bYAEM`ibDr#zMZMfcN20Z5PKMDX|EJUrb~i(u7?i*z6oJW-Q{E;_Fhz~U+82~H9- zJC~B&#hVB>8NY21Ex%rG;|mKzk!0z9& z(cI4A#tZL#d}%~ijJ*-VCkx=`$N(_YePeVQhgvm?Kwj^gj!Z^TbFS(me1jZ}0ZMXD ze-=O1)4Kbhky~JSe8Sf&mMH^5T65?j5|<$tqX0@q3F^t;&JITXNq`gqOIX0;!uTUv z2`R9GJ97@m<*CSdFr=OV%IA1Q=eaG{5Bx#Xp}ks7bHohRPqsk@aYc!4q1}CF#{Y*% z6dkQP<99Q%A1n1aH&x$r$>u(9VbfT#nUr2DHb-Xf(R6SI=ojA0VCAWD9`Y&#lB+`_ z8>Ydyn(#f1l~K)E1EVRKi>bgm`nH-gkIYqb9$dVdb9YwF8B(5Ab7oOzDt3?>p0DN% z>xha6d_xgLUtL&(_bGxD0EFBI?HgS5%#TCkSCX%|qk3o%PXMZq733?#aMEDVl=xsm z{AMVcT+DIo?CgGHNQ1di^`HN!$P<6AQSl8&1y!X{r7bp*aHkXoLvienFUwBuL8Lf9(^q#^uJ1s~RTP@; z*3{nU)d!oFBoNL?lj_7SXR&ZyZIYgD>)Gy}vwAXVJH7Bzj~?sdSMKK(I8En`caLc#*tlkxD^U(( zx{}^vy;w85aStUwR&$XP zCo+;IX8;4lwSEILEvQ|)mYFaq@(K9c@=G)&Q2T>3=KKmE*ICis|jTP_CJ%nBJ}mWQn@y)W!5hnIJBm zh)XfQT@+!Tin?{mEfK|J9;RV#%9+&YNlbL~AV?^_90(C#bj=}X5J+-D)QDdvS*M$1 zAhhdZQ_#reSPVVT1FKgSr8PVL)!y@fHoFssZ2wnfF_gv)zbrJsW9@$=Zxbx}YP=eqC8A_mBCz(=q+4>hl@a8l$|`zfEJR6Ck$S|~)kEL!WphDC1Hzgd(3Hbp|ZSG6PKkCQ;G(FH{{!)xB9PIB!jI) z#i3#Pr1C`x(&^YdDEO0z6=g+N>b!R**OIQV#I2~TV+;@NZHf0NXIqY_4zol1$Tb?- zrQn62OsF3mTtzhqg=4n)XF5*`h^|aGjDT^qDhAnx^C||9%n9RRBaG8i^BYEtP%-j4 z$`I$xh7rW*lQ2%N%&QobRwt?x3z!tfl=xE^_iILhCJSj3Nm#X}4k>5qU)}j8cMOG|LoK+2 zTc=>z2Ce(@St^NGUs-jAe7Qs@i_oZTjV#}Zzzp_}GM_A(lBBOEZRF6L@t;fPVs3B~-RPb0oBMaS~d9gbGa-9G8mthJ={=LTAcsr|8xm-7PHo8Pn&nytPGl3kqCZf#tL>mZLt2 zd<&P^iVd6?w3)G&|iICSxCu*C>PLiyq44;>p z0-trodBQ%cF*M$g9oV;BRav|^pB>KlEPQjuXQ{<^F;!)lF_3R0RRzw9s*-gSJ-zBE zDee<1wg3mCM2)F`8y*ya^+q}P11@MdA8Rf=hx*VBr2Q{xKcVk`w@s0#g#5p0d0uE6 z|3zpUXc3K$fjCfofa~__&&-~!ui?Vgoxdx4oL5P*(s9Y!1~12ciowe^wr_9#u8SfS zXmvEuY7l4zG8H0|tNasMg}!!trsb&{!kb^ip|W6W+*ct>^6A!eK@^1*oCHdJ3|-f2 zy&{Y?N)l0hF^4~tT_EYv>q8_45RW&UI@rBxELMRqg z*$MQ_UBU;8hN4^xMdi|rAndkF<17mo=PZkR$hC!wa~0w`A=g^2f`;a-GJ?6OhU0KC z>2lmlr7_$QZW|MUSQ~0b1A@8FkRng;e?!Z-aQgM{w$l|j0gm}aaSXzLDW6Ja%57=h z|Lf~JU(c-%rFs7!(!7IJT>IQyLkLCF^e0H(vHgCa4N!Ui0jMyrsk*z-AUsoq6%2*clZHtG{!7Ich!8;L@q)@ zoNpB^d}mwXi@QtH3ZLBFVSVw_6|YcwXo|AE{8l)j?QGT*`x-8>Fp;!@?cDY6qy>}I zRMIVo6FFR83Mst^97qVMzeoT*TxEg~B`@HgAb4)Ntt7Lh$hv%3__+fy?wcRXCBtTA zo0!zOMXCbW0yKsGCHx&!M?db`gH$4~8=fBA+^8=R=DDU*)PIu-i8O!JS-d6P`oGng zHmC=8RKweucvP|GN!DMUg&_{^xILbK9rYBUeB3Nt@WF08IH=c*uYay{)`U?KQ1Uys z(+5kN5eDPg-kDKaa=;fUgpF?c%9@yMHMpaG>$!8ivux_copUC;Gl=-d`NEw%d1!0( zh?{|={}s)TeC+7Zsn0z_dVbGXb&R;a_sL)HH5dNV0+%>V- zJ7O)%pmWS$kia^K)y!W%&7au5kSQR~pO;)g2M zIqMv{rx;fEMV-$5r+@Zd-S@B8vkq3oOv3Bax=dIafy9cQP@0N&cmq^e~MRPzh1^9Db) zTJhX<6b`LV_|upJI>Ryt7g>u4w3=e`sh7qx<#j3U#zZAXmnKW(GVhXSaChPhW;Ky6 zVYX}1(vhel9V8N(9IBxex*CszH+WloM+m5G#n3y`CGMvsro}uE3chXhhW_jV1Tol* zoPdG%F9L`iKmaZbI4nhj1E^BO0s;`};(|n~sqlV0R8`5?Qpvs9xSD0_2qB&4MH(=x ze*kE*YXGfA+MLDXohV-*uIG8cA_zlkbnmcSPUbkt0%2$OzX_JX$puJInR$WAY5jI}5MT8*{%`VWpm$W%T>@*s z4dQlg5#*l*YH8mGN3#m^64-CmIvS>dSw%(ZECo*)5|VXDc+c{(AP=*fh{uVkfCQO=LSpFe<>`uuB5R1yD#!T$G3JzuAK@ASdsoTD4XLth^(j39oyx57lvd{_{H4tR7%>24p zNe(9cKM*q|dM*zuV#8z(u0{nbW z8Dcf&t3D}MBt3A-%|j5Y%-T2Sxs~E}g0}0NG4fLUpL0z}J~yh?I!-8>vE` za(=ReOyrOt%c=#50j)t|VE2|FhKqo<2)q}x;60#)V>X}_^v#EZwb9eW+5Z0tT1J&Y z3mV{Y4$#73!1?~@)n$R6RX@eLa^OP^)Fcl&Fs9D0-&*$_&OmfRvmJKc*f+knKf!zv83&Y+g^6ySzWn^@uXOG`{f6(l@BD)gUpQC1 zesX2C`3@+V$07(E%#}z;wS0Cu)UPqUqPp__>E`Ks?&tOPy}y6&>2uA=J@-yF%TwUy z=B+BRoB#9VDjqHVeznPsY9CX8I&#%J>h7IZUR*v~-+J40q_NhJ+ZELnr;9gkYw^}_ z2q|p9bn0Tlqf|ox_Azu{XEmq>Mc&^>V%}v*ORiR$PK+``+jI+%gjzCCZA&AxF?cQ8 zl4%`%h5r>)j0AalF!q^~L@kvVSB`bV9U{RGg`czq-AZhZrn|n zzk|U0-(#yYRfPb;D@lMHzkN_0B(d@^RaEdYsgw0?J~En;33=l6U;#mR0KfT;sa^o) zW<~$SP#c8oZd&1IG0KfB97Y7y3)T}ygJ28ICW`2^0@i_VjX%=&gJYj%f`@0Y`KlFG zu}|1o+|+;r9J+Tp#D2Ya^AUEU1^{gKQn?M_3VmR=TK0zAVy9d8o&is{VQeBn4MtU1>^v>WTNFIU}$2doN@mR_! zT{%;&)tBEnT{IMKglA!kmkEw|zQXxE-&vn9x5#MDu-a(O7dg)k%%1L`MgFwsIG5dX zr#(kwb;F(Z95vQxadXb!ixG8o3S;VW6UUPuUnVLF>n@8ACH2C>t)nJ0}UPJ>*C}uG1=^+$* z{4$y-moeoa>VzP6JNf4S0Inr4dLuA+{p@rEhRRx*xp~Y2|1W~a77t(A3y(9!3>sPi zdwFgSdsRf|zcGisqb(+SwDq05p;IFQ%A^l59JH%-@fxO@>@M(n3B2|kZUHXTw?fMf z(&4T%zJ6>F$Gej?rib^5WpHK#i`AM3J#5o8pSZkQ1BLUMx7Mo5(-YWFb5G>6ZBKNe zrsgY)IN0JWUQSNswZ`6P4$deZadE&S+EV@^+pyUF=?=q#Imp2mY<>&#kM4gYs`NmuyQ)qA!&_3pI3kRO6Tmf zFX*_?%pbsxOHuy^wE&h7ye-a~w0)lkGozHhym!Irb>|Fu84P#9>21zoxP(Av=X`s? z>22=wMK)_uX9deqCBk8a&NZ3Sxvrp#laN*cndal_P43(gM*OUqkOy;pa%TrctXQd2 z#or>tTsQI#3xGTlQRh0`OBHo6tCS_-)&d*M^qd=GxWsfctIrHV6Gob6L_vjf1-GxJ z9i#Y>EZd9cWP!U)DzSDst@=_l440NWvp0D?{%lyjCnf~~sTnIf=;fCX2>I8(yn!H! zMF?7Z)T>%J+Bh+&*J6@^vEjedJOlm*X@H3`hhuuc-&gV*Xdm+TRs5zi>;A5E-Yh^y z?y|tpn%=Bbl^+{bS9w?xfDPqQ+6E0@s7@SMk%ve~w;lF+3y?!CpR}fdM?yAWTV2wQRNs@GSx}r;mv?q;t73#^RyH}JLsleJUMuIYCmgJ>* zOq(oy;eV}(g-OuZ0oY@6CYF2~tC5K?q%$v>5!JBcpK8ig$_EuAqh zEIObMy!VFAH*eEbn*jj^XzsA)fOMy|V3e=2u z&-BLEgALqf*8mR-@H7sw(ZHlsjiO_$TdauQgz_}Ks+!zCy#nxJ&o;(!vE5RhUV%{& zD%dh=z!gc!AEAy@b@~qd%u}`pDXJ?$G(A_q_t-as1=z=bzq;aH-!?*odD}b?6Qr35 zi(-_4oXVI$_y)T|$^{s&c;@SKKSOHk#|#`?Rb92q#FzK`J#|m&t~#v!eDq3;!Y>f#hu4LiFhT>`(X2j1 zTyuBL#~3(&puiu;@w|!w$NP$^plyDo$Z^?<78$jo1#ejrE&O;MqD3bg4g1o(Xo;-* zD3X{iZ&sC#4|eU_nvO&2EYuI@i1ecuSWEc&tKs?7(Z{J-i3FcxsFR z&0zt9n*%E=Gio0K#jp;RLSZ9nc>lB%wabg5b{VK0$i0H`Q6}VGI%6vx(R;cUEJ6gA zJ0$e3dLno!f|vJBX~U9a#FPruhC>WR=Fz1A@e-wt+|!+il)mG$3tN1P`ezq;@PASz zVqaY&=&KHP9o+yA4qEucYBkl8+8xcHP9_zZXV`!bjc%igz8|bsjH<_;pVJLSanMn~ zn2|1PnQYhX!NJ)^i4Ju^C-P)Y^=&x2CG5PBpGcTY(jJKPd0^#}hkdkL4gG~3DEHi_fV5A1 z6jb%jYQzWNya%cISM3Xb=1!#QAwtH%6`2bsy$IAHsCY@JgStP5Hn^qMgC|Zw{f_oN z^PW)zeGFUJpv6I%jpDNE?!*d}f7En!6zm$8wvOtD;Yanp`cc`^XP`J}1`*ehWTF^e zZV?n9E)12`PySp}ppUisl!D|^FQ*cmh)fW!q|6Xct9ZZ#`^1#_bp60j^P#Bahfiyc z8!pPBHvsT7ft~5BR8FQbANpHD-I>NL>23kzP)VGUX)jF_>dA>IbBeNImXfP?`DH>{ zH~n;BSwH=B2g{*9mj#$R0W;0cHiNpBvqckl81J%C+K#zCK5I5DOK9>5OW+Q)C#<*F zXivzJTr@YGX>vC3W8e#Umf2WhL&{+G$OryMr36+xFT%VG93o&Vm_^($7{d9rFai!I zFy%QMuVlgeI2tT?sdoyz!D0`-en7r1@8?Hv(&3KC!@1MOuXrU_w=Sf#BG@xe`;afi z6PIf;TwX1OIiQDUEiUhm1mMv-29d^*xN|?VTPP(s>aaXD|1U*OQL5)S_RuizaQr7d za(}{m&8KluucvAxQO?2*0lF3yka>QfMLLGfL%N?K|-prVm`S3o%hW4yaCw5 zOE#3Ay%!f`c(Jk@nvSc-I0#xY)Vm@pi3&VNsrN5X(>zeN{bYt%V$&mf)wQbkl*b|~ z$ApindkayBx_jf18#>dOQkT*Wsm@8i38g0lQn655%UI&PSV5FSY$j-afSU<+3~hu- z(CjJLsge8(_BC>AJd>8eu|F3~O`%9dy#9m1l>X*VhUmKlm?kIzNnS+|(Pfku_Xp#Q z>=-Y`GU-kN9hyOaj=+6T13W)NKSWyDLSIdz8=_C7Nm=bcxK}^+vyHx{?)PA$y%7jV zd34YE&@=xW=K4wWna4ACeSbMeD6v5S5P+9$S6*0L0zLGkhg1B!C$cYO-UNPUG{MP? zCc3Xe2JM9D|XUEd~)afiNlc1 zP8@EhYTDJZCbO_1I@l_R9FX7SBQ4~++aTYaLH^h0LD+-WFu{9(a3BZ=GZ1PC2tu47 zGZ1nz10kD;?g2s{0ff9x)F$2rgd`3M!d?O)b;X0N^b!c;>ap1}lFU}L33h@oKDiTw z&&5`RF1_{;=~QC!_}gI=XtzMJyaTQRM`*#SL#hR9e;Zgy3vCek-6gv$)NJlqo{Be5 zQaijqbt#`0oYu(LM1_*oaA5;*fJ$f0iR4G#sygltST_)e#x~XDtxw8sG(nf3R0x#g zMn0x3s>|4-y5u@GsLsSLY+*_vt8mOIZX{n~3JkTCVO3Gf8NxxTZtG zLwWXP%ssgOau*6qNmb`{gily*@aUt^=06@{Yw)7(g-A+SznKTQu)(*B`sdT;Jh3NH zil>hmL$M>%X(azj4oL^2Ds zuBU>Yy}z@Cj(@g3d~@Buqw3wxt=MR3k6U(1D4+pEMq@>Pfnrs>(j#A4Ps+*d>7Zho zw|QXH+it18q7RKXmlacZU)uiWFqzTGo)|~!C;)<_t1zwg82`|qdWxU(Br66bauKS zQqtUdI`k%&q5Lp{eVC^Al&8`^@g1+3R_A`9XT}iWPi6|cCxX=^Dw!YL2CFfU@6;C5 z1j6#ioyU6~ZaFgk5>>%%3YQeau*^^Yus_FmX*g`+663Hj!OWsxsD{SR(P-Dy+ZSCI ztQU@az~};Y31`IYQ+B6>wVu*0#~R27yNm%nIKl#ER%(eIL<27Gm>vqJOpgQsU}Z!N z4NU9jazXjrvxQ{yYt9x*-`;P;Z0$8kDL%311m!A1XHa~Jj710{M|_7w#^PKajM2>i zvG)#nJQgdcBr=V}54OU7san2~(PAc<=y!{qYLGOZqm> z4n{>83d^e#;($UR!0U;}0;O1f$VKC^3*;|=M$Kh>Fyw}8P1XfZpbtJVf?E+VO!3!f znb2cQ17$F#q&dKh#3ZBKzHQB_Ih;CRfNT|pN5uO%`9Od69 zWk{r1@WaP=-2>MV!09?sQM3-P7hWf6HC<;#3XXBFM?2l-ItmG11+RBa9s#P=h#VB~ zU^`;3<@l=W&r;9w1^t9AF|4IAL{xP4WR8l0Sc!a-H3%CSSNjd|Y3T0FZ-UX7-2e*l zFheHlINsPbRz_VzsQ=H-w zi^6Itu>iorb3$r6uXAi?6q=c0Xi%Plr7}{c3PlIN;T9YiZW=LngRNKEBhU&0l0a%` zEk)+!x6C@VB0u!V+RfxGVeYO}BP17px##Mx6&p4at6o5=@zIS4fQz#Hz_1)wD|7<7 z<3Ml;DUurZl*U2Hq(Ty7z?VdSOx*8`e~=Sf26=SyVKc#1bev$=y2J`QA&M&Lz3K9& zxvTreg0Ss5Hjk-$?KxZ~s$Zqnf{DgrWyAa^1*6eVSW+j%Dtm$Pnz}qaX>|Fp^4RMK zmj6_r^#4FFMQ?=@*-%I-3yvqby zXmfh_aDFMCC`Ac~G;6T{OcsI8L$4tOs^#-o)lnhk3QuytNrs_8>NMU5wYxN$!qK2& zJ2W~0_&LUH&S4WL6^9LCZ5-CoQu5|`Xd=sCnAz1F z#4x)+S_Eg?6cV7}Wa2&9n(PmWf}<|weMzrf8HozX+Ln(QPJ?2!;qVFABl6_b?RKh< z>q&hqm~vRGtV~zT#Pz%|(7oSC617@STBEyv=*w-z#@?(0W=ErV31uC@OL4r)b^FMJ zIM?Tr6_Vv@ZM#CETWO|{pu643XyLq+X=)V`0Gkz(BEeAO0xkGi6%vFq{pz!>+30L% zy1rW>S>L6QL|Llm^Ma8yV2Z-k7-o$^65lSuIe1CmP6`Q{hv=%D#mUzyB&J+?QH5j} z3P}W7y-XH9shV5VJLWX7AsO-*LxNHALy5)f9=L7*F|LO~64!B&s*vRCp^(IN z!oIAYY_5kw64#;AfNIrE3dwfFUd{T4nL>~TJZs(S}YU8Jrokj zcQNr=^{$mhAwePAgWn{D#Pv8ii@Dm@C?res3dtzs&*(pOhDwQYIsIQT)IBY{zhbCg z4MWX1^;ZnF^PeC?eW)yZukWXQh^I?RY2BPVQZmS#MfxTEecX6a(T-Ki&7lpUu5N4Q zPen#VEIcq_@BXPv7x2MfEa#}#Pk#!)piC8KA&y?5`F zwY%r_;Z2my&}CPu8)w(sPv)jM(U0ZX0#Oaa273ml9OE6~N`MCmDPHz`g>-qQ-s&RO2mUH}5NS{UR~l9ilRHU+GjwoVsO z!8h7pcSmb})lccI`_ORP>4%4-KeECM% z^iX`zMeo8TMH7ruqrM{g!@{8S846{GAKx^wp8nQZX&TO58WhG;tPP?&>*?{akB8@} zhtfp2%bhN;cjx8TiTRadT}b=P^EQ?Y z-y8k@h#h`oeP2_UIN;-oRq&hGg87hZh|Cy-?k=Q|K@)e-P85^r8POrSFI&}YZjc2(@o&EcH z%m;WYJ+S{x+-C9CI(H641JP=H;y^Uu{X@-7T0i8=hj?Y}bb6Vdv~M2r(}&WB>FZjx z-rQWj-}ii{@`gQIV-WtN8GiHR8cXN+dH*}6i|Y0(+tN%AhEoBb048n^-$BG-aVTTg z!$>*w@GC5enbW0`-J79uaNc-AH(1|+ijl1;1lBGp1lAfMP+$SBB_Yr?ASCOP>zQ~; z!}~y2H|a6ckjsPy;8&~F{_K%iHd3b{v8H%fyLU>vDJ8X}tD5LOu1^Sg5ow?lglOWf zK=#01nL#-XwA-YCLgiYJF}QhqkdH+$tPC@i$H6YT31DDfEjV_(q0Jcpn;-PFj3pr5 z6a|Az?`3)N5V{^sM-(jTH!v4Q!Q79iCUS-I>W_&wB*zd3qj+>Y7P;)`#$3k-);(@J zjw!$Q8`)US-Nv=TbJ6V-qS~{|6TH$u1NW6CZFG&2MtJRX-o|M-Z>bJUhLC+|owxCV zm$Hk-M4NvYwNX^Ab<3o;N7NRC{RdUbAcSoTkLd6A$ez)cnVC% z(_l&Q;;c`EWZ{ZSBv>Hzy(P61y4FrWXE8XT>M|YP2<$?$!4YPML%Ca+SPlm8B11{> z(-X~miUhiQ45x;f3Dgqcl=Lf)3>HrzyVcGLOYoCDTbN9Mu%s3V!b>6$Dy>|I5))Am z#F>C$!)dx)mVTn@0d57BO_Nz-4UmduHspNV0adx+CKXK}x_X-8;pSS3G_oSUlYlpC zMn~j|cX>;mRjqY=z9PWzXXaT-7(h~A_s6MY`E?69K}NdFt1cxRe&VtV-jM}s4B#_0A; zNWBNQGZGe!7H8pdVX$H}`t^cJNi$^WiW@`{O)Lm3Ne=x86{3_TED_DY5-}lR$>J_7 zNo6Ra@alZU7#D#%d#-M=R0osFoSCa<1se;yh%doW6P`3^LyXv^V`8CrLX|GFZd2Wb z(;%DxU~>s4TGzoWi+09C&dtxYb|xO z%8QQe&Cw}aj0X`P%S4FMmcUDiMei@x4;5RGMRa|{w;*2T9J-4|N&6}*<190h#isl7 zG}=@V3K~U4%QU*r(E$6*gpIJJ+E9t15nEW7)@KlmWe_M5e1DKYH)ueo?!DT4`#C_T zHj+T6T+fVPW#J;=7IbVeo~R!_No$xPdziWC%Vi}ed@1* ziEgu(lckQBQj{b~C6cCkE?1YmE}+{(h7wemD9jQ=H9QPU(n2hhN0pK;ZqXd2JEWI! zqL+Qr%lo?JfNiPJlC=#~lNVI|7uEUsom79Q3j#3h+a*r&PgBH?@w?n<1bAtO5nv+X z4kN%zJB$DZO}p23Z=wUp#RXS0V3WPZ@Cmh=J#2tOi<$zYMaU&UH%$TlxKt_@3etb# zrlHq|e*)DR$#D0ycR$t)$};p&b?=^bLoJ6}4^^(wcMK3pU>PEZg}bL!Occd?CO$mj@v8&}Z(qeb+)NY2`NX%=15VTxE})0FDEETZ zO#@fi07ZQmnZ(5cx75Jh)2r_1GrU~U`ew{BuQoS%v+~V~TYQ*qZdUozzUh0u6E}Ro zS1k*m(Hu`&Z-$@uzhkmLxev^lj8%)sayCFquGIY+)R%8FsIQETeBe(!CjqDg;IY^b z|60rjG{%A&BTJ<^msH~@mdS?3;p(+qcz~IjX^dSp#uDFzHjmjJx(#zp7vD}AV|P*{ z%NUBEQyBNEfyC>Eb}_WjAky0~)oTA<$zHiwhw2TnQ56nZ0prCQa-6%u;1%etq4&$h(S0_RdBhDK6%7`#kLo^v%^%0TTE``$J`k%y7z z=c0KSJBz8LJdBu~XG;uCdij~^h*S}QZ7L?A@XY67bQ>doOk$T#?>6)-QqJ-)Fb&DG!5m zwcU9bOXguL%@RW+55p`-Q0EXK8;B9~ff99rAJA}$!aSu{3tWj#gLxR2safhe;n|dj zfn_$2Q|l&rucBv>n7J#%=c1UULxlHs=V4^bqHaWT1AsTV9QIjkpW5Y3cp7Su=aCVd|o(0{i zO&-SH{3hjLuu>dTfQRWaThpb)(6#wIjD5+|lw@2;GS&$Eg>wBpd46&$?#b^h(hFEg zHy0LE%z@cghj9UFdd6wE71=u?Hkgs!3{p;LDy0;tE~klLpsz1XdZkprPb%>MLU0>t z3N~tvfBpm|5$YjOUrvubTm4C7W)Kj$`w^Xsy^c~Qpa8?K>v0OL-GP+bumxIUIJ{X!qx#kAA1QPPhu|tA541*^k#br@J{R{5bxYhAJSd| zKI>irMF_ppy##vAUIM+jy##oE+g<{tdkOR|VJ`t*Z1)m~5zqDuU>zJfH-4C21g-bn zOMutYUIN`3+;{hfr&z|S*M@=uY4?Z4cc+Rt$ zRuT_To0LcNBqc>isJetY^&5zcum~QJ(q%;;R0TGHPxV8tr+vgf@A1zE{qqEW#_t`D z9x2)dczw7LQ>1!JKqkH+YTzPBeGv)ewIC5c$CcGeBKi(xl?3xpUy3j;R9LE<@&!xn z1pQ@CV|t4q3LTq&OW*O*!9qYA|}J zU`KIAPX{~7Qnq?c{4$U{`kjhU6>0GJ(lo+#w&3^e8{^-0+AyFB(?>al_&tC=R z-RIu71FrI-zrcMvjLe3Az<^L*M8}d%`m*CgvNI$I^fkBac%bX3*_ot&`nx~=rMJBI zw?6i<%@I#`>hi_K^MU!B z_ob6392uX!n^8lSuSA)T} z5j#l-B#397(fhxy9A??X9cuN_za1h4>m}Nth6^Zh|kusFeg6>pyT{Jfacd@ zW-Cqkb*y}xyH23LSx;WwejSI{tZpH&{VjbrchS|2;sR@rti*PEg0%d+j84~8h?eq{ zO`RiMAk>1W=931+1?0YL_T1Q_uRh@F`ry2O^DK97zoElEk=$6mvwp@iL>Om-JK4D? z-QHizfVaJIAkNnAtUtHs8*PKLCftmu{^T#hl|Bh$`WIR3Y-@CX^Wh88XdTP{=?h(| z3oyT(j`9=(#tvXgASoD32`49E4K4%Yj=O;4!E)NqTU}>P#=Hu2OBt3uhh()fLW-T6 z_|@#j9irs{_A+QcN1g>)CxHP-8W&G3=Nd(izTiHT!>FY;NlQBrEarJK!GsL!hkq#P zI%U#zu%-2B+d|qM$zMsok?V2Nus$&;Cs8D(&x`~&X$x^O5Zx6x*TzraL{vW&2RbtA zBx7UUSbm!#orwvNtwC*0tj+Bp5rgA! z(=v7j%#ks-PFDiA2$`N_oLqUebp=c5;wXownRs_B3xFICNSw^Dyl@p2p2R&t!lr_C z;ds{lv%$6M4AN<(ci1-X4lKWMvKk5==Na# zo$3mew>)gu>Mzi6{dxX)bMs~X-Jl2rwF-~a|IT}#^WMm+^)TnNM{0n;>G)6CdFycQ z_+zZZtqZnWXY-^{P`OowqP#>Y{Z@6NZyP_ii@Gb2BD8vsWBq7*QukDtwA2mkIh&*I z$!_X?K|Iq?_pUeE1{><0)Unl=4Y!w?&jc-3&~iB=|1ScW&^mpHjc%px8M%o|{-d>q z!nNvwAwgnkomz01*i!qVfHAj|1LW?WW-bf%)Kt%)L(%R56rpWs2WOo}J8{+YAosEi zUb2AAK@TAJ4s+8{la3N4Af!4Rx6r(xl0S9Zg9=g<^$Ma@T`#Eu^9HqW$*hvz*i@cp z$k64$kDE1Ud#uStVNK7WRMK=JP0%FojS^w~fnm*itLX*9ZF@o02o&LrT@PqDLgSCj9=LSf^5Xj>J9tVuPH;46QMi!;q zp9}3-YA!AVz(9LUs_kg6(*P5P@J2#;=6W9!jYz-IjSp9x?^W=mJS#_KMwU22`-5A; zr(tPIGc{8tM-rQ?dA^EcZ=%&26&pcUW zP~OaZ!Li}Zcs&zuRvk%6n3*@T*cg(RH~VNHY`5jj;SV}a*DM*GTtcA|5S-`Xgr%Cu ztj-PI99vZ|!<~t^3eVIM4-XNX8mf%GK-IeN#_#OW=k7I#nqHW*RbPhfU6!eg-;OUg z-IH^73}RK&eJ|;NwJf=)_MJX?KAjN2-FN!f`ET$JzZTAaV<$e$5`0*KxD2O9GRW!u z*N4;dH*tD8$a4%vJ`+ky}CVXun2}o%H0`MW^HyR)q1c5)yM8cm2fLcWW zaTKUyuf%hw9t&cgz^wj7%r{)>S%R)et7b78P`Oxd|J?mU!D{=rB7*MSyOQ7xveh+a zb~4G|rs8Xjkn@&;S8BNpgs0i)?6nz`yz8&A)w{Y-o0~khC?i>3|wg7vszTuPJ6 z@J&_=H*|DZ#@ZRIpA^DhK7T`J8AQeU z#k1LZbTK@mF{0`}HJtr^bT|TGcnMf^#y{QODdwIk#yoWgF@jbntdl3MP<5!^@KdPP z;fX`(2RqR?Bm&ioj_ZUZ4O%x=PBhfc6*V(MQgkE&q_gOMik#yW<$)Mq?sCu0wB78@ zb+c#Jes{>)pwQpV^Ts_@cVQ-gjmqyYht5iRc}-_o3j>)p{ug=bDOB<`^y?w^rj+zb z-A4dX_k>oJuJBYyyTo-zgzkMUnNcWMGDDumW*m%992A7dV_8D|OKg!r>S_Ir2oz*p zNjdR4>Y|i2%b!kj;SGmg-1!EMeEMWfWQYHN=|o>9)<^RX*hJMxaC@~^lwBQkntjDL z%A`xc$S-J{zTeQn5kQUg;v2!?9{pB4%Y9~bx=BH#Xdau z`yZNrpN|`brZ=%S0Q|KMn{oUBrt+H3O-aAy*XepBY5IUg(zxi|AbPi#U8GAR=eG95opspGyd0My+Vs;#!sd$ z>+bUXq1|h>h{TngYZwGK(+f+)2nWXpN*qQMKc=BJ~H={#-Q^Zco|4je5Kx$w8 z3EX-vDja>XNa6bAkmkYTMohmyqR0=zlmp3;c^L7U;X0oppc~@WCHEvW;%0z)AiI1K z0?}$Ao0zhQd|W1tC)*gN#D%DnO?=@4dKT&AX=?p94wX6Uwc-uClP*0t!Q;FUmo~r# zSTd{xrBL{719c{Zm_gnT)q+56Q9tr8;jevM7mm4W#J(cq11{I@`SX!ZYnu1#C!Y9t z=jteL1;(@Y=SMg{7WsF|b6r5a`XdU5+Q?$BW>vlwp0To-YjF3+$VmYWQ2#k>!m{7r zc@+wdEUtz$z<92kDZpXbbYsm`5&?grp7N3iek|Sv*Lzs~Wk(Y!SSxC(q=?eroL|R6$z1)z&z^Vv1~L zy#%*qWL;*9e)DvaapsL>B~94kNAJUJ~9{Ph=$`lArz z5ph%)lhB%ev0#*su;ACjI+bMQ=&nEqPKyaBc>UuUMIaB2QESkKDRPn#od?NO6ca+Y z%(svyDYr15D4~5Bu(nh}+BS2vE*94xEY8$R<6nuyok9I%bEYV=mrPn+D4C;!=uiy} z28pgG94OD!4}Y=qVzB@WD0AynqdrzXQzWJLV=%5sS-Vq+mp@gErfGH$|7AIMS9z?++S|ifJHR)%G zIm>^NsF6+z!1dqLb=SoPH9%$B8)F@IVD|DHLy4`_#QC9SW%e=Sib%O6(bW6Zo@A)S z_$T06z51D0S^nN{pn!O3^^*<+YrC$zi31b#QV!I_eN{CmXS<)2x9^qO?%op4)Ud6;8<=Pmx^r8j%ax7@byK~8+_yhk=Z zj%3Hr?#wld7ibAkNSm2Nnb&O2v9v9 zQ<`>(VMcpk6&s_G`b5o5o`6O!_zKMv%>(gXDk*veCIsgh)E8)MkqIF6VF~!-`IoGg znn9P#EkA}6lRgJK?}*z92b#)WGSL15UsKT zlq(jbvDKu17Ap7eavzPg@fTT5 zz*`t(^nhP%0qUz8)Ad(Dul!<^rVm51i{tO^%la&;>DFF25D6x? zlVcY=cG=-NW=$3A3pWEwRDcjlX*TBJv>1S)#?{_%T6CMy7{{=JeP}1E=!^(H1*vP~*z1Ju^J5((;jlR&{YNm7f}lxH zQIS9tR~;}T6e@@{Si(BRMQ}JGbZSbg%i~?1)$Cu(@7{D@#Fa3iya5@obMI}0YJ(tx zmPj``sf&swr1TraBq_u%&xm+K8n*Zhv@0l4JsQ$Q&vWuu;Uj)}nUC;)h~yu|PJ^Pq zO#Uw2?{GI+AWQOe!|;1OU2;Jltb?~jLaUC0!U4%}#IY|#nm4w^<69%3%Qn1Xq+FIC zN5N_i$K`6Y1acU7cJ6gUa7S$|?ei6|s@(5@Cq<)%e~l(A+nihh+DZiMRG+riU4?j6 z@nr$A-vo24m9)Q+U8Ohq1hXjf;#X{)k!L2zMgq4JLFh?;sAHy&PY-(I=yV^hjXUdj zyPB>a@#5w*s@<%!SggG_p7xKxaG+-?gq0>iCyR6-ZMfRGg&x4z#$aD-A?QbCeK9iW zfE_%LXdKs*l48Y0l9p3X6GJE2I^HoLemE?%Q#uC=eQ}U~asaQvwKcG#|1!mp=xG-c zda~&<=mWgdJ}A_^;9=u-`7sklAPxC=waC0hiJVxs)u1MOvidC@Q^P51HWU=p84xvB zLBpk#vFz6v*vkZ@ag8mT}2_|$wdo8N6y2n>f?!f2=>k!Z{`f^@xgTV5N8nk1L^Es=@-K> z!ZZx(`?%{8JoK{hXHeRDr@#mpa#P!epGU=x%$YX1i?;}q02#WK@k5cwk>Kg~|9*Od?FOZMAa=Q;B0i}v^}7$^MN;+&pN zi}4TiiRBIIca|ZDx{Y|`g{%1%%CO&KS`h#kxr6%Q^33?lyrH)_z|;U}7ihqPB0v%5 zZS>?Z8f*2?M@s?cq$Xy>Pi9qZS5;~S0C7d_Rxv=9FZ(Rec}3o2k(+&V$uM=@Bm`>f zDibC}2m&Ch7I$(RU<3GB5CjjP`J3{m1qLe8P)g%6VqQNtzYy`1rA9)4Op|4<(E<5$ z_z#hMA@lRK0sXn2i#hwIGTaFnfGH zq*dO#ljO6Ra5)ji&MMQl3Xe_}?O|<0`iEE=!iH~prAjvW8P&Ad6{<*f0IQz)S1M4g#{WTLupqWP@a?M_R2ry<`9DbD~ zOH+N)EW^hi$F&Yia}61{)#a8fg+k z%aZs}pc)bq7=>))cwUJk>Cy$o1biZS+4+8m9e9GAv_ql@hvg~ykPL%OrNK-LGp@&FnyEVkZPhqpy#o83=&1-ka-kD-A#q4lt4SlYDl#3!kchgFjFoSr zoqG|9=vJse+fCgHcncf+Funyo=V<+tmqmMumId9*R#@=|(@{6njjxj#8$lka0Cr&> z5c4@)H4-4n{z{3Ua27!zm06CV;g}Zu^R<;g{1g>nM$m;mrJlo#J>!viMB*}EPk9Eo z6~;-IdOGfFCtg>6A^oPt?seto@^$P=-urAi3!?b6zq$4aj`asoVtQH5IAc!bC(w{e zMmA-v$GB3mEH5k{eqrwtIjQ1mEaLMQU{tR7k4LcB(3w%l#-9%LO6PZl2Gz26FC4`h zt%A!-Zp0^K;!#CY{HJ%}UpCUfI1Mzg)2;Omm0Ci!fTB_3qW-2*JYv=0T7cVgr(V4 zXJXrDgJ~~8G_+j`UJA3xQZn#NOipluEx_oj%;=Mi*_&tVL=bcb``lZ81?SSIrKoV=ewv>L;foh%UDXPMWDcHeehL4sxcLzJwha3q&_$mf^}l9 z&E2feF~3|RVHsV-jI<37sEh0McycHtEU`x9O!p274@IKDDT$l7IXGHcARMl;pHfxWyaLGxlLJ!x-8Rxp4! zzDOiJzZx==x55Gyc`DTO(s%`B5pUsn!V&N-kVQWpw69eyX%y6K=4aYq2OCQ@)6gk; z>mp|sM`zimPGr#ijJ~LSU@?mGKKcdQ@GKlp7f0IxF#sLm<`L?=oQY}_~t$NdqgOr zd(?uWd&(t&6yTY7Qgv?*2oYqL(CVc)y*VufVp`MMW3meCCDm@UplUU$Uohh+NHnA* zJu-ePlS+fMF{}@Y!Y$RwXX{fva zrwN5%F)*z0Mer$|3!%ekX3#xwj<-3$^g@XiQOO*`!7$$PCWuB(G}wjg5GmpL{9q`e zfJDj=VFPDCuv(WT_g=|E3y5KEin!jw<`^y$yon|p$+jkpNYDvzE}kH%GjLK`q|3OO zL-LAf3^moP2wZg6re0EfFAr(NBaX`5>!PV}2!TL|k?ZL8IB@ry2<+G+-bX--c)8FVnmD z@^W<$J`zlUPRh1B_{$JUooRfrL0_pI@W*#!^nBt~e6FYt$7w-Pmi)cYn2o_8x0X4) z>(A6%RiRmEJmvzC>W8GNk4Q(C^7JF^(-3|Ao|Yn+kaU(Pk`9v6XKcXn_qQTK$$qwC z^M0n~ayYfVxdZe-M5q&yQfvygr2noEWI^b!TG7orsz2qoLJE9=U-j|&;jeJvzGyfNogcD^caO!$xR#u%~F zXM`U{CFvY~2rkU&=;-g~@WX`PClvVPhryeJ#s_6uz(9|pPK5gRNKbKn@B<3n&jhn& zSV^PrxTWT;kp-Dz6hvn*Jky1ULws)TLb!ZBJ$Jzc!UlQUSE4gdwHJWq69pd&s5)UV z3D+WV{uoMTy7L~Dm@suPbRAtJ-$-vdtH^Eb+k6t{j*Q*tgJXlKGo zR~(=YOG;Sj)+u2n=zX*+xq{&Jp2-zF`N1+<>(hlJBowCPiUpD@M)Gfb*a(#1^a|5IXVP@*^8^9hzu6Rz4lQ)AF27ax$vN1t{u4N5qFX>vnQKfL$Bqr?b$TkJa-KKx6LxGVG|Ma~Su8%E_`t^O#cRg%& zx)@y3!9TkHY=n^MhAXXekBAS#!SS6=m(HkgC(bvF1zzkLtL90+Hsq2dnM71CxM5_m zXAx)|Gb~LoVlyJ(G}DsR<%#$%b;Q(p@1=s3don_{^J4gK+oWHOWIXi0OOVWU9 zBJd6O1@xe^4i^q+xIzlxubA(Ow+3fJK8eq_eF*g?Y%Un+t{xx=movesK1*<&$wrG2 zYr=m`Q~*YS8T%+;fo{_5j#7WR*kYb}s!v?jpRfbgKcdwMutI><i zFFl1juO`_E5Z=WKbJ4$krUA=4OR~*EWAm$l_vqZT5FALn|Lnj2wGPMJ@oTs0BWdFL z_3`vOcjTE2pl8|*PFL#X`8oEay8L#A6pZvYm6ZMQRqPX!XXz3FkUI(n0)!Zin+*hA zlHhZ$pyr1~G=XzWJI-}E!~s771xn=UUveRsvxpJ= zsQND~AouU(Q*#6_VEGdCz65}wcT7z-HBR)t6jtXV5tE>JQgnjipgaTqQqi#IEb)11ZGbT z!2|+Huw%kW9IP*cqM^xvONSTAzb!D!m-+6?G4BE{nB~HSL&HfqnS+b4fDO)|0-wuV zkT8CN3dR@%88Va6`9B{YTugj00dYGcY}p@Ew+$-8YCS=vTYmu|x?sXJBO>9NDFM&; z%^29u?p&L2jiCcW0ryP0X1nD!>3Z%48ge9FV@7Gib+tcV!2#KO6UdLZh-g_(yr$5W ziPuM!$vU^^GOu47*XY<>>b258B)-nNZe-D_Tf`dKW7LX8f#rX9-3WTzE_x$j?+V>6 z>bLX8(;?kjCE(R0)0!r{AcI4A1~#->>@%cTCM~v`+GPM)P&QNqloH^88=R$o6yO=RWbn6tBA@0jzwdw{%_&N zBn_*qblrrrZitQ#KNZq=9-MN>Q^z!J4E0y+4q_lOGj@|#=%k>k3SfhK&q83khlBw_ zo9&Q}^POvFL%KHO1+bOnuzNPsH8f2gW0ByL97$Xygd1TCZ2POrYaLAN@i4?w+6=}w za@Gx9PxM1_-__;1k4Hpmh-W!Ht}Djee}UFUrUKDL%}o>$4pm*C6ccJ%8c#hZj{@j` zwk}35#Uxp^geR&7C!a7cDd{L6h^s6@6?_z?G^oFnbhs?gxq#^B9+eak5BlY>W*ZI| zSa$$n0{`Sdw9PN^-$2GWAjZd=s%fBzzfk8GC3=AQL)Z;bs+-ofyvBduktIiOreXAU zXc%E~<<9VV5aywB%eF1h+9U13lPMdy)c|zMB;bxEd#DVe;>9aag{2;9jii(#YYE!2;9 zRd^26uRlA9FuQl)*0%fE=pV~e9Wgxxx1Q+SNZn&~0?xTJcQv|lE(*>IMA%G58iz%D zjmF;2;LCVwZUSjIxTr)V`-6JEO{Pjz^FBC*s|?P0>}m+%!Oq-c5eGK0akxj26AVo2 zN4R3H=n0d3_zNeq;lHKwR0uY$1aW9yuyIl`*&51nCr*!=s7L}8xH)L09$r)tMotQM z3cNy|zyZL1$=o}M9}q|wWMclA%Ct)9{VZ&vXfH zD+@e213()z57q=m1Zx6~GhgaWNSQJuZa5VJ$w70qBN}S+NhKU+80@gLa;~XrYHV^_ z>*eS1CWNQ2rsYTAw{I;5QCNl$F*Hn(@m;J+Uv*+unq1Ffx8i2eUYNIABR?$cR;leK z>@=y6Tt`s$SosRlxjEdLcw)AKQjzPh!_Yb!D@Y0^gjwNsfO=ZDgG-gxU7wFpEB9m` zc&xRj>cN~%mkoRtb>z0fru%J_a+H0SMdDUFQ~&PlT$^s_2Xrf59ub39ai4MGy|m?| z2r^dmWvyvZBVYsfNVZhtHG5a1ZzLRqCr^h!Ielk&0xajw7cO8Q~D)3H4l?to}I&t5=^vnw>8^uK}|WFJ)3=e)(rlhGxY_| zTl1Nh1a-`yUZ)RnGZ{0X$|K~K^Z9qZ<-cKVB_uS5XrG1k#~>_ zd3dSH3OyQMp3#P$yC?<*!lNw-f`y?*FT_Oh8#Q{7hO-*2ydlp=6`D{?R-xOAs0v-G z%7qFY-;aF85|=hS9?r>*W4j@W_{;0N6j3k=M>XUFF)agmiZ8eQ9-OKFw^+k$j$W)w za1M9l=BP58C1|K6q!zw79-5xa$Y{4?B0NjzDWhb8EA}p8g7Xl-!ue!>pPvz~h{3K; zl=VzdR?>4rf!f0s7o5(m@c|Od>D)7v)mPDql~seZvWm;Btg>iw^ACN0-<(|!7t5!t zIZ4+ELh>V2)PTO9F)_I}M-;Bri_gz^87=*r8Byp3tbdzxh}l(FB3C~cT>egDvd2f0 z(8tBvVKtNuZ-QbRDuaM64@^s)GdIl+(+0VNn-ZVM+!Rwhgh?U|xbW4xZcfiqCf;yX6)V8?LA%v_tQqwgn8{Y zia~Un?227@kF%}8d;I+24_;T#rJVWRV4AtRTZ-S|>yExQ3?i@Xd$w_=b$x&NLZDe)9lxdoS&t?*oRBYzgR>i*4o z2ayv62^I`1>ThLVOyWM=Y^(kk3(fz!&5wLke>1mR^O4rBF^`V;B|o3RkI6D`e{U=H zA2J9|wBxc4K8XW;N^PDQ(aRG7C4R@_sI zb?R?(Ymqq+((NOp4$K~T-#vdTp4rzvLnCZ_;uG$n1Yk$)pA2D*T7g8#HA47+h7UM!Wk>%!-W#iOR|VC`xYE(0t(2h`s{{76b&p_ zvkZ9zcw-cxJ(9k0u7@vXc2W`7To0d0mcj>vfnQ`je0310?uU&hX2prb zmCox2i-=Jo>WfIL`rLjN()L|Qiw|lMA5=sb$!ZEGz-4hdamf}TuQhH{F?xE$r9fuI zPuT??TVs50pCAEtmTQ4{l=R7cvxKTVAKYFh9s(~e=n-ctxu`;xw` zF&cYxp$)qxFp5b?)#0X7MP`q#!AdEHaXAC8a~PI^iD-UT@8%=G37qu}RBjGilLJC6 znIaW>)0ydhi8HqEA~QpnZ%r(#P>`I#30V>4DLBOvyLzpI7w?#^QfOH-$bwXz&in>? z(=u&hPxFj6JSS$e%4Rif_u8sYp9Ky;7L=zAyIkAvrZ|X%BoGV-%zq;uO9@<~Efk2+ z)_3wo0#uq^hQrrZ-QS8O{ zmkVfdUZ*41bg+h4KVU0=SjU;%*FO(`Csy~mL0twRQNa>$;`uy?oHfX#2U7r@m-E%7adZ|8+r zuGi{ySY6aG5;LZv1q4CXAIqn11F4sqKQ=#*RV5t)4h=&!!(0ag-p{z6eS+gb6rk>} zlc5Cm7A1dlRUHpmO|dFG2y^kL0CxHtboS5WiUoC*5M+$l$eY}=Li@{%3F87 z{oMJxFI?QZ<1YB9yKJvddJ+fNC}P%2p>?<#L-y;!=ok!_cf1ZB2UZe-1M8`{pSa1W z_emZ>1^X|D%?F_zxYao3!?zKu0F2j0sJDk&!GOpI)T zxv$sTo&2T;-7i(P3?uF)v;2X(76&~!5UlG!u$ubd_FIj{Jm@3aKafzw)3kn;0^SEs z72iHVejebR@*Q`H4*hylTqa-xFNIHP(2)V7GTKkx1L0l{=F_n;_V6w6JXt8sGX*mx ztZ6{lujdYNaVhqYi+ zx|7MkE4E~XkL#FgJ-045RYv0zJ%Sg>1tWTZBgq2LlOLt<#l7SWn+{JWAdKiMs#D}E zrFW49gsdnrV~u@+T|USL!QQ`)!vo}$xGW|v)Opy%u}?&XK^~)7*A1>1?ju>Ps!^2} ztA?!1vcuJ54Z4tV_2jSOIQmS{JpOBKB(M3fnJd@x#LG`NU-I|kkF+URkCxP9s$GvQ zizup-6@wES$%KEb1YJ2k!BIBoBNz-foF2bpz@2yl0hf|Q6`YnN6UDO_R5~PUf4th?p3~nV5X(h*-~b% zxjS1^xHC}Me3tRyJEP##5B+%Ad*L1BTcbS61vGBTqdZF;lyBNz2L+H{whl@?{U*tu zS>GH@oS_q^n@4}0idC7`w^SdarfSwkITm$Fc(&#hm}v7z_uLT!3nwNo5a5^lS6A;f zEX7#FLdZU`5KYq+3M({*Hx2cl1I0F47Zy_^D)vkOU|v)lSY@+HX5$%w7qJ)KziMif zfghU`GZ{9hcPl*2synnySj*74-i4DLX*q1(N{Gyhe$n}7wTs~%j2U{y#PlS%3<>pe@tF2r1lsj7eR9X znKRZ{5owPuF<~8fCUIu;h^gNUCpSO#5i%BDuC!GtXKDqvlNWR5+aNruxgn9r@?u(; zS4{K~nIO{P|7{@oIx1lUur(ZZi%j65*tZxeT4F?w+TMZ^EsCfg^kvy#X(z4D=%Ttgh3fA zLyY7y%{%t~@|p%E3s*oqHR{+a3Fs-%F9Ib8z}`o3F4Ue4l?3zxDg};CT$5!XILyGA zLRXz^(+DJum1h0M;#v;q&&NHOIgqmBZYSoB>$gX$kPid#%SC&F?2e|y%nBUy93}dg zkBt92^yQZ%OK+~^29%UfauEQM7i}=!^oYNW^?hCJZXL;UV*lCh476K zW`>v#!!j5J8*CeQ9&^ShSZpvu6H0V69|b?Or`piUE?FlQfeT;AQDGM5w_2m^72G0j zxU2b9a-PGA<2SFcf<|aU1{a zM^O%TDOw-5b3~FOXMt)BT8aVT@a{^%2{&E5fg@ihQsa}ClG^K^6R9zf=T2&Jw07N? zZh69{a-em14i#xG6+ig7E0$knKX%p2QD|copA#utxi~JChlXARGg2>76M`!p?H$pV zqp&a{sa!JaXNVT#^cn<|0n}CGw+)+L%A`o5glZ4LTkc=vE%NA~HEE8e5EnSg_gOs% zp;0id<=HVGB0vumDTpQlj23#qLgG_15`+(k*Q!nUdCg*W(IQw!fxdNtx#GdmTiXZ@-=6=0|7BMEkXoe;GH?0M&g z*`1TKJ1hm{`%&}M+EjeMt9go$oUzM!N(I>bu2NlfZF<$5UicYi6Di?AImsK8U@dRp zD&td48NotAc?APk+p;m>?!7HWMoAeaGs?%PI*G1w1PKe=k)6HFZ6saUdN1w4Fj%VZ z+1)BZFLSF&&nPPMvg&?*y9j8~;dD53ozvhfEO&cGWnvE_Q2=biWQ+2JNknzH6O)Bv z7j?L4$l0RypJb?un30&yK*w+50BYXMA=vi}o?H++O;u@;X-_7xpm*&71Nnn$MTaa$ zw~1vS*6_3D+axW6P&#Vp>P_`p+#+=^mWTZJym6#DIaw8>R#`@!U5Zs9u~1qcEeu-6 z^|p^t@zW0s{g(IxF6=p4-6SpsF6^<&S>mGRbjVHs2W34fTsb}xu(qs=)AYD!97B0R zdAG=myvTd8?44t$U_Ifp%-x4QvM1j~j?F#H6k2U~-=9L68XqpO|7&MUd9Y{vb^>C- zfhhV@J7YX8;jabnna$X^6;Z;aNZk-!rm5LB14h&HGU^}7ntpgnlCXyJkdzk7BUe!q zp3-N>I#AXB8DFx37XEs4NaRWhumaF5rnT%c6soaL4H{8k+_1n4kj*kh$3l+_GsZIx z>~P*&WEcl_=(Lz!P}6qOx(m(@yyqm%<5n5N$^b~sV8<=C@RNebU<*-(u;u_0wa>*C zex0QMx%IHu{1z^BnrJOIXb>_&vq;A zomgpah_|#peNF4LeNnP}!7Ew?CG1U;GSV7I%gOT*CD1D?kaeH9j3M|2yeT3nHkwx3 z8^UPQT8np>AlV&()v$vupx~tfc|a_I_kb2&*hf`_1EEub_`#9zT&Ocr!YSbfvkon5 zWzn?7bhUxdv+!%Dqa$40t=x#BgP~uf>{!q%XR>2Ka;R+LEo3G_IhpL?h^nZXrEP}Y zth6~3oP=c2y)Y8uI;KzTovA68Dc9O&W(p+g`e>n%IBa5LynL*EIm@*&jKgpY%e7*t zbYs%hVYyc7W6FE3hEgXlh@u1niG>!E5d&md_P*(EE4HrkA!v(yRuliZPC7Z)WxJDu zutL(J(VukQ@Y-tBEx{xkDX0mzBIMN&>x2Bk?FqYz=hy1pt{~jY>{7AS25=HVv#0BW zIW&qWAszR{d+51CKC=s$4N_;3yNv>TIvf$&+;U|vJ@bTRi=o-CWXLp?iWNs|cBLi8 z4${}FQ>OAum4aKYQ^DraYvo`9UE(2>6vjcNKMy8k@2y`@U+u8?Gpw)Rmu0@Lu*?@@ zDbi=guRco_X#suG;;j7IM-<26tSj)2EY5nc{kqwzu8^Z<7?GE_$e69a>dtI~Fn%aU zX4;x)!+6`Ft~zeLMB-MCdwEuUwX{Dqb_$26zPeXKlj^ISW86EB%0rO}&leD{B?3Y< z3x#2M^cXyX!(sXKUM%6L#>#~wJc#&I#kYy&XyO<;Z@c7&N9uG9?Wy;+*|Q-qFQI><@qT=<(A9i6g{OhqYOCaO+;p}k~KHkAdv^&57G8S~Z z0+%^)7hol<=-`Eb>8V-TkNJEub-Yz)J`>BS50SiX9b}NgC zG+R-HC*xk1wvR{@KtnFDIvHMS-FJKdAni1M!Sh&CnFc;QYYjexdeqho7EB;G2P@9T z`dzRDWSS0*LoJIF8qGr^4g_2@E#M}dh;UZu99Ir^b0;Fr?24Ve!ERKQ#OKRj6n%1= zX7;!)O?{z!HjrEi9Z!R1Gk2%lUAzz1vyu5|Z2Z3tVh2Tg7j6Mq1f2v!RHAUMnTNz+ z2qT@ISc8%dKb&;KFV^XIym1}ORb282>~0Mz;ecuhOvo5eW`dnaXhrpTq+siz2(RRQ zbW4VU*uyUxoD1@%2@Rew;#-3r-6jnBhz3A3rq~CMvzi~!2BrD+M$upD%?1FOrdG1& zjz-p`5gM-`lJOrhOEzHoh#u56r)*v)3P+9Faai|+#+kTuT_8b)Zs%}NqFx@r=#^ka z%_0U1r$N@V7c8k2Az3a>9%F%tDN_yeusQpQO@w$KFwDD8p^;VuSEgI=g0y*o7vKQ2RpBoWVNwJHaJ~E4)K6sH(;;%q;It!YoJ$syruTj7v zIg-RqkCXIgN-`J(GDD^;+DdH{CLnVPCxw^8&cG>=zab->68vVV6`T-98_MY_%4w^& zqEBWOP{`W=5eKR*w-kv#En&1OC2az#P*SwKjGi4cP=@;PKKX~-CIW?%OB@%9@>YsQ z0UW&;v}f5H+!vO^p^}`Vm>Hg{x!4GEmzp^a^avzay_d8vbX)?BI1i9H>u@xlG@!jI z-<5QElDzAlH?`P=Wy+dmfgR2XnG~HO41~KlrvvRDbF+X>I#vh zm6H*7=E5fRDbXf#2_pV|SShB1@rZTMMna3AG$xP?mb3`D+gCpD= z$^?q@t}sY1V(twfdI&;-1HPc*jExgDJRH@~#(bN!WW#QQKvQx|DBos|$!j>&x*X%a zRl4r^33E(dnHO%z!wH%m;4-%^B>qT#Q-g72j>%qrQ}IzMr?N0*%L6@4pT<9fWbpdPKS9hQO^_g9#o^8VctrIdGACwA2i^DfG(s1 zri%$E&WQ{UaM#-UM{>C$HC5bn6#w^)#R(qW9id$a4#qG{5oxB#KyNtS7&vQ&er>e4 zlSW_4W&Ca#gC2w*7Fh6ABQ3E{E(iAU~+5EnNQXvr6a?yY%+BR0nu^HngB2U8reP3kzS5t9ia)r z%HvlUQsf@4L1ysy-L64jm&a#Sn&9==r}FEyGhB_5j2wgcW39F~P`W9RbSTusa42X~ zb$Y6qyrrz$bUa?rT8o@Y)ThM;V)3!POo857{Ma{OUR8|$pcUt>9)LpxBPm@WT72c? zFy>$qV&p>3xdrteAVgD54zCm4ogCIMJRH94<~*rk%{Md;aLDo-SGGw{ZpqX_j;^-? zl0fd+$sBm-XSZSVaKDw2t6v)q=(kIq9@mMjC7?n?;sjXfgf1deMI3t%38jm&P28%- z-^N;vZc4w-9dgVT>0Rv941jbg66zVI$YE4$ z(=*U@F}INS%WYcQ1u|Ljps2v2!gSWp)1CFxHjU~MO@D1FjJqAoXyD(gFwo8Ol9jVK z?VpDV!!F+cA5dW!#lKf!o~H`KnwUSM3R543wOFZFd8kr(w|oQD>75=q*DO|dyq{yI zJBC>VJv`;T`eh`W=QE%8nA!24Z7=C4^z}zM@(UZv$k>x5>?|#-p;{z`%~3zJfYHNJ zUH9>$7+|@v&MbE`jWXSIi>4SXG6TTDJ@HNbHr_47yY(I0G@jIPjP4yud7PRJs%8X8 zKWzW-{k(O?!&QlbgHLO-lifgzucCpl3hGLn0B7jubfT1fA?H~}aQY(8_j3NJxX;3} zE1M_t=QRkd0jK0Cycq3fa84@PsZ0YjAPj<;;KgAT7^TA>y zj%@XVQrYfq_+q{tLX3K+k-P)Li$F2j1^z$ui>9!1u+&cqc#sSX3cn7q|Ye`{KAbbQf(Qn;$41IGO^ zVBF&`g3AZ#Xd>a1&hQ})xaaDr2-|lQYVR1B{VB_6IN*xnYDCZ(y`SZ3!D<_g(5Q5! zvPHzj_z9Tzp@MygC}ef;HZZ6j+|I37N^_Z8c!NK=COJpH z3Kht2u&cv%!zF*OWu+iH$wIN{6{E8=p$0mZ76&XG$7#DeM+_o*e}HDQ_Xnc);~l*p z+xvsha;xk8M%(|k_q?&eqB#els|`~s_0$-_s@cd>9gMi9zrpb>>#1C>H+`E4J<|H} zU(kADBPny{dW{V?WJ-}`w1Vr^t(wC3N;A%|{)zFOxW4o!Ms^W8qfWxi(l#y>`Cx>E zahA=LohI|ahR~J8EP7aOFb8^7JHYY~};L)xu zoZ2&KYj~?5>9-oNl3e+HzBjdgqSgJNgtb6#?(9zMNIYTI*dWnF{QewRsL<*uML<(ANP0f~e(Z~JmWf{@eayl3G7ieGN}=8|-A;f(h?ZhjJh9U87S!&M<|e#}phQ z!+{J`N`37^77+p5@9**CntH&*tYnN(=ENLL-1WPQgtKg-06b*eUSjTg%?aHHLx$g5 za%4GEx5&pppG8+#rYiq6dPP}6Sup>)>hc%a`Ou2VpRN_1^niq8npncW32st(%(a<_T-!1%f?-1Rv^WLrir81uKjCl4oPjov zVEhY%$v4vYazu;A{<;ht(`~>yACQq41#%+cNWxF(T=h5J{9`}rf4}$g?_O`WAZMOd zwq2KT()HNmc1O1l38ryb{-81rvnrxFhjtxRCf%IR1Uf zdH2oOM7^)xCj;qi&M1Zp!6%;}R*~e6yp}w{vy9}d_y~Jx>Z!r+ilh&Wr)Zt?MJ-D^ zyDy?r04%2DKsO}_+L#0--u~Xn(2EHCW-3uk#FS;WDZ@zfeIDQ+2KeDcBsM1aiAY}x z{)h*`b?IVo84`#y zKN~Z&k7r;D)QI1=(6&^uSExr7!PqfkA7D%%Iz?T1&LKX}9LT00Whakd;}QgGMfLfv z(x;z*d;+VXatPml^?sQ-^d>X!(qQS!+8d_?YnW5=09e3J|4FRj(&k@BmE9!vhswOF z4%ckzXd#8}bQY&@p)queAloz)v731(-8DngASGaHPnPR$&k%_VEH=TXMGxOP(mm)~ zBuV8bkHYj~ zH40NBzdm^obsx~Tb(Z-)pJYm${0N2%iLd}{BQ@S6>GpkJ_B(-rzA>BLHrSCl97Z{= zrQry6L^2lHi93QFd44frP8P-^Vk+{W3wEq2iQ_z$tdSS85bW6B1v~Po#bC#fV8{MW zi(nVAF4zIOWw0Y(Sqydz4R-7|TnwO(Z~*LwksNg2Ex1A_+o&fYwv~=26t2*MA?pz5 z7@;$H{sh0DuRwo7;XRk>(};MuDHF?X_^WIWCRem#9id&^<9Ggd?xRL_F^`S9j^M&C zme_QI`r!B+dnz>_<)PW@rjKVxV!7ic|<$HN;q zSZ{ly`PKQinlEH${$bmhEzlv>18%sg@2xz1KA>YzJVQ4d&7EF3TKs1F3ZY7MqGM8D z1XlLVHBV}eT(2G`sWG88?ZU`mV_5Bz!mYML=-#c`y&++5sMNM}8yeP0MAxW(p{i8u z?)*YkavyCUdZB#Cw&XQX@dg^Ap&d*vHW7?0rC20mx>EB1!C02!Z!~|vSfBLd;!k$j zBZkC&c+)j;<}(=mK!}nTh0sOV-JCYVKv6z{}$&`o4t1 z-Ljeb#m6!Av9sZKt!>Y*etn2MF0Ww(?bNa(>VcNsI-o-($EOl1dG~GRZ>M)VnFbGz^C_aYtx+bhrI9>DoXS2}G6c-ha0n|^hibu^GpkJ&E33o&6f*XCGuFC9m zIXF{Jn;qxaJ(J+%Ft2@TUurgk$Icnrrbp`e!1_1u$lAJxQ906{ytX-!T~y z%Zc{snbzR=6Kq^1gJp!GGFm{Yj!fL`pfwlo4Mi2yUVQEn43AZSq~=f;g2AM^LTyW9 zPZN=63ED(w!iVv!*g{p%b@~UL1~%x#+JP>ib+tG_O9|?%Gw}7q31z?nRt&W5bU4ni zViD#S5+?@Ra6+~}{yT)QdCMtKWnP|xKVp;H!LL@H0Ol7nc!@95GqyO{~q&LVnQ*4IY z6&oH|P;6E@#U`IxRBYB!Y(k@Uk6vu}PO%~7Jr$dLWl^zNSFyn&;Tyt;bPg4pHAk@z zkYGxWIm2oKJZWLYnHzL6v^US8{YI_;?R%L3!3{5pC(uDUfa80a&5PV^?Yf9>?cm_rv^LiAK z$%6hhQz?q;aipxFk*B7xmh1o5$Xny;lM9Wq_P`fo2KC^C#E(uZg1w=t=>- zmIAt!%WKU~T_TqeEyVkS0nZgqv=ifr=Sd%7~g`zt>H=e-i{7~}*_UfH}qexu8i zE6EZS>4-VHZznxnk}D=XnJXqe&2zcHIwg%1@c|09yeVuZ}HfZ?IGgr*- zksE}n*X3#F*Qfsj$H z0M8<4ssYC=$%O)F{(2~B*G*0OF@YFmxIin|QQQwt1CD!qG(C&Jtwh=^iz&-9IJzwJ z$)wYmW4Cn8xF>21@Oo z#+hUlz3uAoXNT>M z<;vkHI|;lNA`vy~vZlJ__~(%t7$}4RDA*UPiwThF;KZ&1x!YaVSPF+}L<^CR4oR?( zv0jhmtvu{DMjZC(x*fpoV__y2Ht87Qg?i03HLAnrxw2ZucEIF8bYawXfn5#k0K0{L<}1_^i68sLa7*I00vmk^kI2_Qd=# z-r%v%E<9!sx_$1c`E%qE@f@oCtU0UO#B-(Y!-)XJsB)D}N*Sgi{MH5r(Y>+N*$Gua z6)Qc+-OwU61BPWh5s__YW6#dGQ}lFgn+p#*!5` zt;5f8CwOD%eRth|DMk9nr^?r&y+<|x%LNc~CUA^nMM(ULnw9{FJ|ZJS|CY}cQIOsa z6Lp1~+zKK~Gxlv?UCAwWE8H%9(Z|_TsL!hCbPM`DA=t!9SXd3Mo|#gupTge|LR-Hi zme#HEg|>c4X$U@Cl#{ZlDG)Q)Q%#-6R>myH{aC_kcgxF=z?#;qm{kMh^BNTWNL;Wy zDae;kQA8<1H{Cfn8_}Eg98T!36HQhksUkXu>>xYAO`qF;Z*!T_31Fh+KXE#s{!+rO zg4?Ss)fYN_!Fr+|Q^D1w58gSc;OP15W=7B9Th$imZ9w+sn$pF^2nNA57Bt;THnA^( z!W>SpUKLRbY!Akp{<%5Ip5USKu?T9#&sU1s7K4gFCqLGy!bBJDghOkFP$Y#cgc8t|nzqgdMpE%w^h;^XRnc2Z+ei)1K_t6r7f25TH6*h3}jdSFVjM z)$K}kyZL9*2@}C9Vq2O=C@L&j*^IOL6(k<A}(7Jk&`Hi=rT|qMo_el7#Or}66e#Bh|BW7aFZ~rnQk!C`^2@^L5XdsqJjS( zw)U_b-8jeRuBrCrP73Iu>*x{dS*pSk|Mj|iBy6ff6w{G~7obnGDOT#u_fD@oi)h}w zY!Pg-Dz^Uv2dNEi_os*I13x(3wEp$xv(~@1_K0Q1>qGS+D_JjA!1gi%3~;k)cfCR< zG@N?bO}*^kELy`Ask_d0bVx;rWE9BCXB>tljyR8<9F{G^&f+q5av*N;mf9M-F$T5> zF_Ph~>bu#`0X2_!I2$)Gm9vc-yuF+|JiMAhO!F-sjAk|=KyN!VnhxG~YV&Q3y*~e5 zXc`c@x`=TsBfR*aBI$CK=Gg;+;x1~*u!0#G%B-Pu>@KGK*P}QFmFDqZxo3fu=9jb5 zJZWcmbNNtKnjf^4=ABb)NBy~xwnL_d6TCkZ;2l;W+hh=>u2-W}$N?u{IrfXSP6<_e zWb$x62QumJcy)T9Gbq>a((LalmhU;u-iFwgQDuJb#pKNX z+U4H}6ZC*~>4CfG^RV8WRhj3F{(Qd$m$onBR92Z+c+~L2y|XIwY!N}eDW5~JGCbli zsWNY_hngjPb)!31>u9O76)z-0q}x=%lfM=$WjL1XrPNP@EF;Nkm0CzFfl*^Xao2{X zTopDnr2;5bl{y5hE=Z6F68K>Br`-%BvsQCu)=IY-$esY+nr=AFqoBGSn}KXzvKfeW z%=3C7HwmW5nahS_3h=N;coN_B^J+@FIW_}X;zfPJxR7=JA~Tp4ESTI3M9HSkHQx-R zeT2jaJjZ7yrB5n@tGUHgw01)LA1ml$(j#3RXtd+p@4wNl1l=-$A{fxCa~ftjv3 zhl`j3J}=mJRO6lalSA#HHoEJCa4?*`zTx#< z-E~qU2pM{vg15(uad&-uW1(rzbyBI07rVRbyKgLrBY1tc*Y|YS_uNukY=y z@4d0uo7X9HcD!K2x`fX@HI{gu-Q15C`@8FG)3QIW@Avu@-SsPOEGThn`&W4V%I^A= zHx^gs^(!MFxj#{k=R`Re#ToDt!N|E9?|x8i`>pmuME9d0YqG(J??w`JdrlH{{L+g; z+ysqgR(Pmmj8=Ql^FiVYCKqWQn2lX|A$}gFH2OohH+QLNxO~v!6qdc&#nFmS2&o&8 z3EhsPz4}17X)Gh*9428QB)&6kwT~&kt6p;{gqi8 z#eg1q7^_{~Hr)V|ih)B&7s#t%7sX`5WsOv3KqcpFA?!cQEnbYQ+Us~1b{}$&I8j$k z1(}ETlo@i07X}u4nz3LUUsWs&XIZ{sLv|W5O#qW2qQ~Jk=I8q>?AJbK_H;yk8&F&@Li>&F4c5co<;3#ff@BSuxsBO z`43eK2$(Mh3rfdM2&^(}RTHthxKBBr+cXC-#%2f=BmTn3j!is0ZKPORqD5f8vx7GG+Ik5cdOr!WiwkeFo5 z(&6n#YrF$F6dpS?JcCilZ}7mG!Kq126t20rheO{vV3H_B%E>6Ofd#|DKBu_pscr%~ z)(Nw(74l0Q0rbue!%;b6L$g7>pWK@kOcD1oL3?(NuCiMNB{Ap;GG76n9bosVt}EG%Sz|4F2263Q=ElA@l6YE~K`?Pq z2~8UA1wh6(I1zphTLPj{_MW5B>49$-b^%76xa;A;6so>iHg3I-Wx~p(@9=o0ha?t6r^QcdEx&gO|c??v= z0VuGjSe*7@+Egp`mF-SPiz>~u-84$iZ>aN@e+xVTRB%<4^PP%TyJ?jC_`Pyp>|LH4 zEN)!{@1?Vg--$BDrR_by1`%mUdDtzRZ1!0#)#X0m74J$M3jqE-#|%T*Vcwm`oWuibE7(N2fk4E4t327i|d&D z9+oP$_bQG}Dkx4tI}@()jE?^}3LxS}9skJk2S)c;-mQ<+@dlkq#P)I8x@w_ z^bkQSv%uR!s){}o)7;5m=`$R$2zHAhrOGs^ZK2Q*E*r4=!w*ss`+~sqxP3u?>sqRYvmqr$OE-L z^l@-WAC)%Q$3fdi_he(2S3mt%Uk#9KwI1Fc{`u@9Peva}pr%VcAAQu5U>|KV`?x&c z+Ld>rkMYj!z^P3E<5~M?K&wxeF`OifJt1Ga&hmlpy6yJ(jE=@7l^rix_dd@y_jyZ zY_?A~j=Y@i-okVPN}t?5-5n^MUCf+b2hp5$79@luo)20h%PDWcxw{4De9Ec!`YK?h z-*7LURHW7TRfi^5g1eiJ_3C>4p`YgO=%Js!z~P#A*H{1ag`5B5`0wK{f6p8^SI>U_ zmw+i~M<0L`(*_P$-6OrgcqoRn?Q_#B=|ZbD<2ThmWT8zgE+_}jmGg_fm7Cg1FmnBb zV82C1mv4fM`hNl$_c^^AZY=Cp*8!9k88-qMHK2hYE}?`VN!#td!v}nL-yDJmS_sB_ z-Co1t}MJ~ZBm+C^!xhx|BphZV8^e{P4Sr;upix!{|ngC@lwFGD{=tZI}T7dFoP&eg> zAZDKr>P8^6)XnZ}0r}n>n7k9z9q-Jk+eW2s1XI0~Trzf=-bOaPx@!AawS6QwWFP%v zOuDVs{oCnu)%KAmqmTXQqt8bl5#G^9AIv@u=6&Ry=wrNdJ8~j9P|36Q(T(`xO3mEG zTpx5s4g%t3xd)>Dp>}QD-+%dg1~al4z30Moae8Jm^*x71x0U4`DL*SFk#rNjq*N-K zr#?!`KK@h>=F^<}4Sw9?AH#Q~Qe5Eo_{&J*K!DNzQkH|ZsUA%!Z!n15uuPRfksLyc z9b@Z~9cP<6&Ce0zdweo^!GCmY5EdiivM=v{kTe-c9)1EelGj;w^M)pxro-O@+gLc(U0lPi4 zZLVZ@xjp(10b)M0hPLaYbwz)Cs(MBHeuHnEtByw%dw17pKxh0bOQU-#;1>*Bcx5|l z#*&?WxEDhjRwvyQkezZa!jsxtCL=rO9jFPUnoq|b@Jk(T3Tzwe&EMF8qEE&C%Sv#i zq_LrRfgJMq#L`zsRbQb0l#{EgGeAmJBr@%}NC;RBiwOfJsC8%}#(=rAX-tWU$;pej z5nMsgZU&s1cm5`Lciune_%nX*^60nAs(f2@M}*4U!$W*yt{niM1ZvUwW-IhPk-&fi zPrUpr58dtq&C*-CvtBgA1}9uydkb|cZdU@4zVK$T=jk5rh(szki?7)TkGD-`BNrJj zm-nzO?OF25Z_jRQd!(LJ*+qMBvAkXC8p}SIvLX7w`|9eP$z1XVM$rWKJR-ULyma7-TU1(@16rt79qO?fY)5z;=a4)WBM9?vM^6b`Amh-2yrx z1&h9q-?PN?{cFpJGT|?KX|;B$e#fc4qjh}!zf`VHS5FPKSIKVTUV8&AQ2_={Lsf`t zmw>ef1Fb86c)j`3=Ru86LAEIK{tKKy(Q^O#P^L*gTEm{Ln!6wSm~Z4`_6e%$Pp=ko^ER{+ zz@TS^volFw;nD#Xz+P78+O}MjQLpSS;Xqt4-o{~g5C^`2_6F$Qg>kVeSQbvrc^UNLgBk{&;b?v#UxX>!og- z0BMgX#YP3BBoFM7FY-kq=AVOE%OTssF~PRv*C46@3F!9-?>0|6VEAWK_8g zNhK$w2IBIB)YV!*+4a;)~++v)p9@f;$tY1erqu zPh%9q$vh;uB41``1{63j25EuZhd{X`UIq81uf+t;U$YN^xEtJ{fd?4L_*a+R>vnef zYs;fQT`HHITaqi6lYs?t0u9CuepXUWbcFr{W?T$9WQ-6%0Pn&@_NeJplI!zc+|MNd0(GG{=D-q$@a3 zZd9G?B_AH4b@wK)#QDE^xKRxXL8mh-^cUu~?!Ov-BIk(atce~T&w+bYdl|ATE!R6O zFHXrJ(OPkp&QOIYnA29N0$YxMVtJj39sd+d!yTdBZ}&ASn;XwG zZ@JAJtoE`3xIK}AqUrw5rg=D;?q}2e%Qa16*qLUPf}`6T6!oq`C*=^yxi0p1-xbbD zIf;E&!sDi!Byw{VLIZY*u^EX#74iO0LSW~u$Nx)r5PS%oM=xM-f5{mW*iA`@iGzrv01yW4I1j00k zUt(T=^gfNCx|;N)7RKMpz0_r;!Q`e0x?;L?ku;*>l>lbBV_)P>%x?t)TWUGn>=Cv^ zpFaXG;`OB_nVioAlZz)VVRHxoDIM2~WP*bg+G%QdmW-MWg9i3jPAs>}zQVgc$eNG)<_F>Y1aHE7Wb1X@_B_{Ykf}pIw#Q>HerQaCr!D=*ae>a<k30s9|m5&;hYoma&Te|RM4jb za_^v1k=isyWZi>ou_IXi+kh!eed{53uWrQp7PB`tK^KH1L$}nNNTl}Xu*c|0956fe zGln`4W@p;;J|L~36*B(NU-wPX(Mtdn(KH&=xy%9f9XWDfq4Ro@UA3jeC>MaHkWUSe z%gQR+YNg$`iZ6;c{2N5&&WwLqmj+4_?AdwUrwtsR57`jLaW8YmVR0b*42f)p7Jx>y zAvX9jE!(~3;&08FIOl-x!S2e*^zWc3;oqUpW&b2-;9S(j_*VvMf(%yjRFwmMp~--< znJiF_UOj6dv}l^BqKTeOls2JaXA@u&U$F^#>m8wyP^YUYIaUfVTUBhdi`_;3F>31P z?deCBN2_T5bjg&;i4Q&eo?qNL_nx19|IgiVJ=t-^sUQ8{{^a5>{N|T0{-;ES{6KN) z6aVVBzVM-se(aH5`M^ED@ZR75rB8hD53ccnA1-z7plEB2bLfXPL!qox-$AD}y7tbG zJch1n>n_OQ!WIhajqUL|KhhjK{k~IL78hP}?)qNMC0;$|feB)~CT06rt*axD%|DPY zs^a)@oS#wWrt@Mv_$dZ_->3O=fj@dN{&IMZ>?R;noL9{_;z__ijzaRsms7}&f2{lQ z`K8fSd{&D059p-$;1}4myC_Cm<*eNbHTguhLQ307hG6Td49`g~JSQ-Tx7EGY zdjip=E90TxkNvTO^XNWVI(5ih=9X}tj5v9wyz3OJ!g@&r;K}gI^`=@#cjXCKPPrSp=Wlx|*@<*KeM(pfRy#Y=+}7ZhVAeIzhzy+Hw!sNN&NSR)Fjzg{msi@*5rDnWlG9_Ao6q{*)?V2g}lg7HZktfz^q62a0M`3D$OAh5?JO|F#? zXX^meaUyX6kd`eQKd95k1^KdgseC zdc)f}!+c|oEtVsU0Z>U6x0ygzc4BTw;)rZ*pZO!y5Hd0G=)ryq6Tn;_$F950=R5Cf z2Ng42u#?eT5;daMZ$bu>lq$p>GOWhtJV)Y7&yEb({vrd}Jd4OMN@N&qM+PT4aAoN- z$goY9>+~K22esx-O^BGM3f5qZ|>)$4e|DUR=A|jR=6f2sOy(e48C$t!! z>A`iN?J%)3r~7Wc1*=DguWhwo&^gdQNrL;$yS@Ng z8|AUB1(JXno!a{HGtcb0i}&kyoI4d^B?-sDhX;(LbO;0O^k*u}gPp48^U*r~V(OTv z6J@9zQ`AEYPXzX~h_p-DS~=bymnMKto2_PXvx+}AB=C47H2TyVa8T=YZ=S+b;gQFe z^7P{N)ALVkyZiX|yZ6sd`M#D4`nqw{Jak%+%H-&^VXy_(FxRi=qnNaiUx?BfO5NNU zrc=vt&^tQ^QS!^F1ENK9hvCEc7%3NFWWz9W!}ECPD=y^~Vg`#*n-Fa2>Vg;##ZFWg}Jc_HP?3j0TvTF+4pi+InIye)4 zrnu4e0pRIS4W%SQLrySWE%XBw3FCUv#kv>H7cPW$)JwldTwKcrS*Ijt4Q~y2)ZF)n z!0WTYZEfDb0xHKEho|mJ=Siu`k%cIldwg1zL)eG$fyMLU^=0NYMomW>$qveIp6;NE z)7#(CRZIq<6A!8Q5Lo*n=e~!|4T#xq%nOoi(R?XyX@~ezlLe0~ zyVRV^lS!`^gjut098cOYh!hy1rKzZkzYXGP!6GqIP+dzx9Gbd6HZb8(@GK8}5cO{_ z)=1cuXj80FUC=nGJ76-sx+yY=R^ugF1b5TNM42z;j-TzCLv2Y6%|uCC}vnNRAqxr1w(Bu zN@!E1kbV!{EYZVfTPjS1tvcPa5*uBg!z@08Yzk~V7+vP#gMR=gxIg~L2j0CrIyMsu=^4cE zkr_V1tIcTqCA6aPztD{rYQwMfGwghUP(o`%)95pmRzcr_1F%G1P@0B+&<=CMx~=$i z829+MnVzV2>l;xP^!-awI3pz@sZwfXFxH2cruu`MvU8r3UcPMy2{cVY{870A>!ABE z^9qWFC7}5ko6u8J;fvuT!q=BscbSnDt9E+HoCYu_oYQpvmm?spUJub^uM{Ahn|;Qi zKdr`ex=kktdCqKr9o$~B-w_w2bgKx1yZe=_4D0HqGaLdE(QhNDDrcCeR%t~GwZlZj zwU;Bm!8vA-0x?*tIA{PS$G}~F&PIlWFwfrpwYbWMB3C->ErtiU+3~|(R@p+RA6T%~ zjyJZV{%fDHZ>gB%pm}9H-QgY!av5+Fx51_4vduk~(2HU8n+t6{E9Nb_^|z|3Ov!^+ z8Yduw(V@=W&kg9KL^y|jaq3P1?SFTu5Yx*Z42nM?L(RdUfw~t9Cu%OA;2w+m0KxAN zjKv19nb4~OUL!2FA5Jngqi10cuw$$M|5PL&`@d} z*}?oDUz&guAdR7Zj!}LZltto~-jPlF$)`WleUczTesZ(@g8i;w+acb@&QCeCI1(Q0&zoVQbZE60CxxsA;RNW4+TEs&NNfMTW!=+?z3v@XU6 z?K;dgQC}Ii#s>rSBTI>vfhm_G>z4U3>@Y{-7kZyT`+|-5r*GvV(GQ(6f|H{WPX!wP z&eG`Z1DuYPnT9itN$U&zGFeXY%R#H6B)<&ywu4_vAi*^K%N{m=H~2wICU#+w(*-4W zB=vVfvy=l6IF^cHzaGwAg2rJ@lNGp4+Gq(1Sdat3&!}M~(LzWk{pYYZr6G=W##gT* zBL&C&izaXv9subJR=J;g`&N01c8(WE4&llB(A&4Fb1Ven{HTAv@%BTf9{$sx{L|vx zbOSe~g!39$Sg<&J!t;w}UvZb+!Z}`B9-gcv&(>d#=NlqGKf&wB5+ePal%~hQ<=l=t zE*gq6=6BMP@i4ukh&dw! zG}+N`teAlcH;OJX1NGoloH8iZ&NZ81tctkndeT`I({J9n^;pqd+dRx+{4rtepr!-@ z@O~dD#w^z4y)$?g3F^ld#9VdkEJhzrK*3m*K3xwMm>n`Wy~NT$22XFRliUB*OB=mG zQG#OR;1z*$O@~3;?eM=P_vy2XVU`(h6cw1fc~>{0R@CjMhQkAw~k|pqEwGjlfUD z0;7V2zp93@U0~+?~VRk;+78^~bV z>Q8{x2qn{w%^YkUtyGZp!KX4gM(QObgi4~7)CPuk1`c+%Ym;NBfqaV^uWm|l&+30p z7tu5nUM9sn6v>4Ct0Y8lUXKY1kNAJ>t$1E4K4w4+Qvl~|TsHi{T-cA^BqN&2IX@Cu zLWI!?$60&2xmF8=6P*F*-DJ}6F@i*)V22+^1&N96x9`fVf~&-AgQVP1K8I$&V?h%% zsiqm!5$G#JXILKsEk=8pqfTU$6xE>A$>^7RRX>$o6@dtO1H)7VggitCJmN#Jh|X6L zhLe0b4JS~HZ9*Ki*miIHooNBRPETQEbF0A2TpqXWPywowz>}BJgBEbmdG|H?5!o!3 zR^_2JM83yy>@w-pG0k3p;z6GAPji{CJ+D>WKVK_Y<_;& z^Xum4$2`AjetwyrK~PMwp}Smg&`axO^a_2n5QdTJT$vT>Bwjih6;N(I zi!z)G5NH7Beh7a$8>t1v8Px**i&)lD0W~KAvyCpOgCV#fVf77lM;(W_@?J z7hFXn*yAz{sli2=CW2@}fb?prC@rLM!1OQxBOpku5#JDfeU;Hkj$|K$0+D3KyJG%o zObi1kP<1iAtpoAQ_D%+)FjuDIVs?F0SzPLSTy*gdXc#unb zM$--BLF?`)^|rgFYxPEYrC>TZ%?_TToPt9G*NDIp^O;tMChMmP_18m_HKU^lT%*~h zkfU>QHj5XHP7yO|13m`G&rQ}&Q2`Q8l)$%@^>YAAT~ICsqNv);B9lzoLj36dUYej? zrrZo|u=k2fOi&@Doiqgrn>+s>#Av0nsA%r;xA)*;=lMPU4CR|AAYpJ}=;oPc2!KJL zG?`~-n_n;T3b)QS7yl-N%_qZtt3ji^&AnZldrvp-$~O4`?xr#t#Q<&|@DW4A@6Y=< zttL<)ysEWcH`S0~4e0I13!K6T99yvaACBh7Z#Rj+G37V@aB2KS+UP7#Tk{3Q$RoZm zaJ;>)Z=tBSed{_yz1fA%$cg#5lniNOXg5#T%+e(-H2*A`kIyxqw}mg$4_*$RG{)?g zt6bP~0UvB9mBIUFYiPl~s(IJr>GJKdkf}F_)8-u4K<7A)fC{QoZ*DIB zJW#*3ESmTIkNkkY;KxFw#IjX5PV!^Cht ze3b88-@A9%{G8FRZvt@lGN}*Ui8B9r{)~TDRStl$ZMj%L1Lr*6{dWENTl_qQXg}{I zM$+8N<;)^b4OPN#QfWPX?1bq0C&zz++O5;xsA{+3ih0@g5RG+F4;?NM>)=SLm=4J8 zA&+Vv^nk1)XQCnKp~|`t^g!f6Bf#Hzt?>|+bDe7o+c90EU|dE#3YmghB9EKB2=qw! z4E=4(GQ~=6Myu(1nLr3(=UE^Gy%$Uq5aN)nF;gmXUo|9B1sh`J>WtI0;weRwg0+i| zn7kcX+eSrjY*;uB=A{PNcR=KPgiFx%N-Vc*?juO4xac=j7*bA+KQpj{kQ)d(9fWws zCQ$4*?Ssul7df%Huw>1d6L zKzt##u)|boZH*ShCTY{I5sM9#n>DeW@bCE*Rp1o0+H$`+eWn#qr&iR zZ&HH$BeSR%xqxQp1IlPB3U#1@c#SE{*+Ub#WN<8M%PE64oH7;XO z(D|w~v}5+t)zTR%e!Oq24t38p930Rc1v-|v(Vfa{y4e0mt%;j-5bY_h>r*v9l6I3M zm{n|iPJ{M9L!2q8%Ph;yvaM)_C(&`VKA#|gD-~zUbYZ1q?~tZ$DsETKduiV7DHH(DjR zEHlL>Wm?3;j;@(JOedUC1!cN9u-^Jis@F4eMfh_A^$g0CovpPzgqkas(T*BX7Bqx1 zhl^x6O!c~``LR0fa{pKeqI$hE_m3TZP_HfFows+8rSV%U$Q7dQN+f;Mu#yGz)x-$& z<)XDqC&6XbLcONXsa{h~Rov`bdLva`t3={YVk#92b3BrN zEOxThAA&n&KmCaPG?|yDyNszpaP%;;7TWu{xeO~44Q4jnT!x`(5^H)-Wn~y&5wx?^0i|=)yDUb3u$XU8Vw{+d zz}}{KfWr|=3n9awnII+_s34{b3SyX&%XdN$#~={df9>%Ijl`sbcJ8ckqUF`=D%?uwxDLB9*w{brodyG6O*m&VjLl0&qxZqw`D-P%&5 znuo84VW`{)+e?)kp%$eB7?&v^fmV2Hw!p z{8$HGs4D=Dcf#-DPeLC>(gfHeWhS!ODpKE^fL2zZcdktU6KH|VAyJL}CT=||U>V+o zL;5<5Eo@J#;DSBmK%Uz6v8f=XohVkOw|4ZiLe>WSTCUmN`dE1p@7P z;RpvF6

yh$KDr`I-wTJ|;kfHveXvFv-TD-{#TO=O?&P_~mpEoXoV2N&bqDfp)YA z%8PwbjOG<+ffk*Le&WIbN#txCS&Ii~h-&;U5-!6Qqkrh?&TVAZ{3eFOaRdCbP5|ri zog|QS-^bHspByaCS6UTX`T{zNOt!)d$TPT1h`AWw6&_q?N=*_^Oq{PtM3vD1L#p|sBoOjr0UGZo6+gJ=*s?znu_98u*KxwXJ% zY%(TAWu;}4b5f469bRCQaIYCD$CSw{la$4IdA)=JJ9suy4ixueGg5A4Zb(|WwArF9 zDa(A+EFzD!Xo;CMF?z<~Ml%$F`rE}f9Wi5Uw-};o*L5nAK2+}LBL|2%*WQRB%53p1 zi5at_BW4Y;X%I>9(a-|Imknaed^mta;=~EXx6LFq2iFo}9W_U~UCo6>YIb1}Ycj~% z(6VR0qwsd=3osj_<{AWhjKhZm6OPo?JU^mtlNGjJOtQi&WBR+Lf04fc%i_h8vDDGo zZyqxN+a$jam6<#xzJVX~De$dqKDQI!xOERioRX_-(MzVljU$rl7UVh~0%~nLgi;X3 z5QsK81l(2a5Xu|^Pe4bR($NmVOFM?(r5u7EoDbp0$}TX0vlv+gPQgP!Z;_}Plg}?= z?^v=Wi=LoI!nbxX7Nr}kN$d-Z@z0V>|8h&Vw&e=xlb7j-`i6DNlC7`OHmTToF$4=3-{B0F6)*FKTxXt{C0BTy8`(?s#$4beXIxcqfQ(^>lqo zmBd?6J(h1nzBJ1Xj(cZfNHyR?Xum+3<=w!U3=HI=woe7;XyAH>;2+H5L~jJE3=mh& z3J)DGuAz`QX9N>s4>htss*~IQ)fk`@kSU#vl}ROfqB{$%RM|@Gf=S1-6}w0)cF|T~XbLO+Ur;LkubQ0z0CuBG4-Pp_~)@9V@*|L%yos<@&b)*p64XZ5EJ)+Jbf+u^;x$fv+|1 z|L1U!kLr0spjQnfV{w8ezYbM3*M=#dIg`^Wmi6~0JjgP?W@WNE17$@*c2VM;VQO18E@jA-B^Kum;CIp;UlFL!_g zV8^h>?YioE#!|apx%1)K0Khje8E^qm6QkHFL69(M%{d=xmxT?QduFeoFaj=S+s1P! z)cslR^?GI5BUlN#nOowVY$r}gkR#=|p z0WU#a6Ocxd(}B0dHOhlP*NnC&s<22Hl&OQ%ai!p#WOPwLgDOTwVD(Sjg5RRo4LGtv zL zhfd2mf|lk_(%;KI=@KTo#K7is2JYYqI1P9e1CKq`BKqH`$Q(xN{~^+PlLJL<2{{wN zW*TC>E#OInkQVT~*2_r+bd6g&#=u49fyg8unGSSLd9oXN zoPDu73&(-rWF3j|8GjNg>oOilqR5I&mUG172M)09mLWiUVH^5Ru4(}hOnR`n=ooDw zS~BZ_TckU{?(o!vq@tsmb+5uya#D^ihv#k82Ks$aa)$M@v z9SxcWt`_9f)E}EuYVwb#>m+1mg{!U}T&40;(Zu*}$pou#JT24|nrmBS=82b_o9ynz zt*fkrPh*o^`RKkVW7o(cU>D58=_vUPFek9rw%9H_ZMs4Q5rkm`rjSN>nVA{O7>A}x zbzm2|$3+UgfK^%OB?^X8BNH!~0yOFh@oW@&LC2%63vNE^y4YG&WYQHL^t>4$cM5-glYhRk3|_Uq!gFZ| zQq2mG!E5CWu}-_!6=(?tpR14SWf?r-@mtqN39sc@ffiitfx(oi2RqzAVQqK6z>i(I zTO97pD(xLbqUv;2PxoBkdksC<6OnBD3YKn>rr(p{5Z{FpvQv^%dA#_JDP(uN_|Lx0 zmEi!ZJbh#F9kl6=q*2WcMFFZ}A^}lYxJ>iw&{Zl7!rp7_9Iked2b*%Fe|n)!e7%S) zlp((CFJLfhnF;b^G(=V?^fPaRr8wd!wRT*Aau6=XPnN9l69dSTE!xB<4bRaty>iCl zUT8LMC}WK#trj~hB!Rs71qC!WExTehX!3-O^RC-YdUpcn70#%vb0Amlr67XWyXd0Z zAXaX`i3y?y;%JdEq7wFq}7XpqjuNfK+{b^<5lHuH)zHxdD564UGky zUsm~r%I!N}R^31^);M9K&BvFRlU)L7S3TRDL4=&sWlNPI6^G3?;DmQZGVzn)5D2f)3HvO>W#&>FuCYuNAP|EpTp?{t)21yH_u@0iZfCN>!cTS5KGmgQ2RI_2{I;MnjG$0w>3cavZ~V99QkZD^&W{$6BNzn=y4{g_ z2+rn8?_b$%CkYX>PeOvOaacJ66v>{A+!*YK3KmD+2zu3F2nR@`%Bh>#MHN4}OQe?C z9}x9w=5T#uxh%`2rLsUJj0r`H%?U+eqgkc}!OKF2nphh=!C9(H1sh-U5fAXoRKzK);ZPTC_04h-pOqJkGWv@c~67V;ZMjg={1MV>@$^p{Eq}VX2#M? zK?rzIPmJ^?9ngK;G!@}7r5;jIzbCT@(av6I^5K{=e4jd-%jRh+?>S*G_h1Sv1T=O|nVS?QSkP10^?)hCKo2b8f>2VQp&VIEXNZtF*$Q(tY_+{!S+Ov<`5B^1l711t zG#coF+0(!Xw>M^lCQq+jtV{2m?qe~Cm$%dXpd;liMcm81lfm>Hl=8%JW%JQ)jF9IY zA#>a%0;H=+jA-XQ$iNZ7Y`+p2$UMH{Fe2pr+=l@S{tUyQ|IX9bFbwGP!6dXehQ<)8 zfRY>BnoUJup;JM6f*7XEYr!0v$0UHON-_g3v-!34N@1)Pt!v&`J5xVPEfFs=ZHLZ8 zA0in2G?=wm8b%R=Y~a7|S3Ba&y1^Aod*F;gPw9i8-o;@qA143b+DJV-4U~g$WMaM! zNf@}Uq{GvJ3(%F>A{(5!9w0=p1rX`3;s|oHdqlwA(p zAZjplQk;fefNDeeG5TQ(WI8{cdH^?~Tfulnch5#%XClF~jGPU|c8=Ut!~1rO9EEDf z$kC=;z<24$FVmx1$H{+$<77Tkx}%L_uO?_xivu2p+Twsyy$QG$&4q2_9K{l~9oK$z zk3lHcs_W0ihtfP`+KGRhHtcc3Cc%VSwX|bMbym`DK9W3$h?Bp92Q`oQ%RjV{EuaFC zLUxn`83;OK=%UUTI$SpoJPf903|{vEHC&XFl7gGYPysW1G} z`+o7GKls?c{7gY2UF=b-${p>|K=U{P7oH`l&8t;^`+Dh>@j^XoFR2vJFp5~I!VV)5 zLv)kE<@Hk{Mz9^4r&@$CvyX{`9#e#~;ClRP;Epeqf;KqjbihWrovw>OMf2v*C;|(G z8V}k_ust#=ismA1<9~6-r+Rp*eCu@OHK?Or#XHsB!~>28`L)yXkg{=AeI8z}Hn}3R zX}f26mR@U^$=)&Onn$U19om8H9p{QF$^D>It|b9#L8;^4AqF1JI9|9Vd=k=Y+Z7(L zDF%rUn9(1=%au01auY$WvUyU_gJO|<72x2dv3SPBimVt3oJ|55_l4)RL2GO71%LH( zgF)eO7WOEpV9&Ks`|IM@b^JIyuW=16L|Viw@{d6}ZnuR@2*( z6Fi#a#XOqb#xr!@N82WQAngtO6BaQunUdY=qya?B%lP2FnLh+gt+a6RHH(F%gS;aLRxNe=Lmo3hOt>}ue_ zb^HPknA{Ezp12ebPAuZVYvSVz0FxEWAtoYxYa+rc7ZD-ReNsMeL?}ki-SL7h9;vPy z|29ZY;UC&jP)8M`cb(6r=QREFJM!oFPnJeMR7P}5@T+pn<6D>Pi_L80>O44@YQJe= zDFKg7`4EK{RIm$F=(-x@ zhizhfnrTIbnU1RN$t5Jxcua0E%l)$z~5NUW1JD_ZM9>`MY>dMiQ+fWP{I-l{0TdX6K@ysnh@VkMl;moc5hR#BT=F ze3px>9i~^I`4=xK1N!~uX>O#C59=Ba$OAvwodc6lHLkDf=I(5#qOZ+8{LZGZ9vD#D zRM9+fp?lS)*xdD}yYsdwOok)PeKy6q4f7`3rYwnP5Eae*KsP`{v~Xm!3CGbb+x*Pt za|mONJd(m)_wO95w#-Z2@bbLWjhH zUIpX^i6(T z=ncni>ov3w1eUw5LuStcfp#?ob!_itRdVy>&oGbFvHiuDWT+P{eidEmosYE^id6TJ z^gw5R$m5)xvR+*CsK2(h&b1P)i06pdK>=?%+dTfWAOG3G_v+yWCwNkxMzON)7Yj!H zd7)cE&G%*}_j01|9pv$H6ySWwr=NH)1X}b?f({RINB`%29xW{;c9qS$;uQK7W$uq> z+LMRc7ao{DfuWrbUTp8ZKkl`SweLL~_u2=ERF}o=z?x*WmCGWOReK!B3f1je0 zaDN(YwmiQO{S9EoLYTb39a1Cp>Qy%H;Cn=iFJ9lly4#11vktgrF@88)!z@_Goq}m2iIgAk>X?# zhR|V>fo2!X?1f29su2_ynG4h2{6UmxndyYdiN`hI@L4!)mg3$qQQmy;j>z5wdBMmx zot+?PI#fXk2Rj^jO9Xd#3T;K!&Nl!0@%6aSXo(J*2zyTr%5Ws|l2nZoe{tzILzb{e`0xIJ~OgkzgJba?mhSXzvrHNFY?elrcH;zZXY`+Fkz&wpx^q4y-QU> zbCzm~+`LGBmddmlgcBa&ro-3r!?rw;t(MCrSXS2{ljgJtMv5(>KDMx@1zSMGAv>3( zM{V(=(^-H!;hilQ1=6vCe`v^=M%)J@i!IEb)o~tBBi9wmk1k{}hVQYxM42)_Sz9tp zpMwn3Wd^Dylhk0MA5>P*11dmyS`2y#oP%sQ*V?mpT|mX3U`xtPE8<}|myB+tydAP* zHA^bKq)({jf2j@v z+38U-#JDO4h0z_#G{R^}jHbY}Ht1yAfn!WZi%~dg0jUR(_1$yBN`DJ|0ED~?=x5e; zr#0qAY#oQ*Q+v=&*-*B55mkegygF@-U=SJX4zz7TX(9)hNOe`wkliM)fnG2ax?oE1 zMN>#@fDO=NQW0rJy(9&I8;qRnSRA`g`T7)(F4726vO$)B&a#3-D!j&*r7zii7}Pu> z{Q<36RhCDg8OH-ABQd~%(UD4``p!Api$PBe0u)sS_G=Dfdf84ybPRYBmatRoOzm~2 zc8I+$jGKe^Q8;=@naC6okxj>N{Ptm%1@y?PaBZ+Bm~@Z>Fzck}bkpQRePl(fnvw}O z=CKDQe@;GLE+Z;)R-j8dE2GHgKe=~@61x}Va*`(--eGX-*){kV+8+Z~OP9w^kXn3y&W43K zS5@W&X%UJy3|9nVr4f_*B_aU}Tw4jEElE#CLB0`P)*+|3;`1=F_OEUplPgjvgG5s7 zoPz%GH&NWkJZlDAA)p(T-`j^xtv6VNO<)O_lA+7Cvri=$;jmXB9lsAti`!etUUp6d z7^@rRZQBP~sO-b=R7hm;ZrVlD?qkEWF*0*8%dly|jFj4dem9=9dKF?v)70=%jG~eZ zv#8bVeq3n{c>&j!{6Jc|;$CQt3~tL8?|Gt(-U=5Vo}#Gy&`Qq_#i*GdYA!I^0Y4OV zAkUMU-4B(a774hLg1NY(YNSEEt#9RO8MjGV&t76#uA)*pW+8W@Fq^rHRspDZ0qY{$ zZ%z6$I_M5E8eG9E;sXwiV3WI4!{wq!=5lcuvs^9|6$-_Z%DZN!@nlJ`2Ml~EIWsm_ zBQ^+*RXE+s+y@t?a&zjnT9sT;H+19+PDIg5Mtc0lik8AwSCF)d@f9pe{w~9WDXrDZ zbszvCAjU(MJY++-;2%gHtr^vAG?h6IV+nsz7rg;M?&vIikxpVWRhgU^OM=ljj)1ac z4hHEAB>E9J#+)@3Bc_y(-EziZ1jnl_rP#iJYDJIN0 zQN1j>*vQ)18m05FchAmsjz>+2W zOsGMfgqoIuP}dm?F;}~EEF^I4rS-m-*Exh5ms&z?YQ~!kLX8?Tz^r}Fddr~^Y~rN) zIfWXUq8}sC(FRj2%cBj6HOO_bhOoIy_ns z-G^jLd0pdl>mVYxl-Gf+mW{|pSio}*InLuLi^fqR1Z9Mk+>~({N^_5}r4aI*&0DoB z3Fhpk&(XXENqE8L4J4Zc7$i_q1T{qiKQ&DPj4F%G8hALjS!0-l1d!AmBtR?2Tmq2D z+_15%+#&{U*s9NF*l3XIo)bHpD`Sopgk@hh1XAxVWjf`VB1`5WR)UgETYc)4ox@SD zY(7QIQ7q?WO}(<|xTKGou?EIFLA_Fj?b@VK3zifA_X5j3Q(O-UdsGiy-D5Z|jJ~C~UeF|_GD>khDH}KL)_;#7 zh|$$cDVr8iZp|a4af`D~8p<@q1VwsE41=%gl%WE{fLE^&m-s;5K6*etwA>dfp^!)L z&uxcdt&4+xNf8@KZQ)Mt4anLPS>xRyDLOGo5zs9;1ywhfs6?DdSrv@6^texHuEoq* z`_y56eyFHa5HHR)X7v;+IRUiQ?rLE@4{!pi3jS0TPJ)s+0bbBLsHdVQ#l_?yCWv<; zt17x5BWaU*3ghbdHPcUQK>9=|G}5!;ITE_b^cGhG#Ck>ng(_96sk|b1N;+DJ4U1ie zO5r*XNQbwX8ENwlyzOroZ)0M`+ulj4GqjOkqB7d?KJd0J5LJJJT;z{Eb{P5>LtudQ z|D52#trWC9AJa5XpO47^u)q5>99+y-bI_PVXXa7aP5T9YminMpu@w%%wsdL5pv`?J zO*z7*6ftw{9!+2~IwUsZ>v^*o?}*KU+bK57+1$<(up0aM&7962zfnQpH*-3_A%3H0 z?!6Vg?QvGH*#&FS-cr^Qv7Rq$nOC}$wY)z|Su6KS&%s*DKwf4F&On1HOlTlv6dY1U z+r@lGX_Tn}9hRO^X4KP)jJOtSMcR~qg?8 zDK_s3P$-{bklB;lPMnP9&V3iPpE57h5J=u;VUHWZ9!m%TAb=y_^nyNByfR-=-p+R+A?W#ellSiud zdEcSQ-Amrcan$lCm!>YMSrJb{eT3{~KU#YeozI1C&~%4v28SS=VWG_Z-O3}f9BHg| z2imdqB3{B)YYoIYqP^{(BBJUxrfLT{;KG~50U({y0X|wktmV4YDnwG=M0>O^GMs6P z4h;>MPCR;yZ)OvXo&>xN51J~oRZ^NY^HBmZsbrTxAv(#nIk1IB(IH3*Hg93i5F-b+ z55pquPYDHtR1k&FLU7_yC{tXoV{@4gfCwU(uN~X~#v6qPzsm0ytzw4LCpv4#S`s zQdQUI%c>ziG>LabR~CLRw)(w*0iGIGe~>nK2dnRInAK+;wglb5HGT!_3K&oZtFK;p zpA6QXN9&JUK7yO5hmrl{{)>^>;3;1#GgaR~`=i$(5%k7f1Gk?hY)G@12~6d_r!;_A z-4hQq?_q2ioKc`!>M__5%Z$UaY`Ls6Y6Go4wlrtddu?n96mmwL@A83`c??28?u^=F zCm#e1J@(jBu10&_ryNbwkA+s%IIIr=VEY^JKCNP@Fheagv;p3tin(Xl7C%d;iSZUQ z7#)xn zv%|10MzZ96GC&G834P_>r*Corr8UO^2j#vL5YU++0Rp{(_sL*5c%L!eCzJU^LlgHt zQEP?wiDxVCGx8~pN-=8eaJnY!Decnddzy#4$oI77wX>a^U;i4it}f$xV#ZJp=6WWD z>q(Y)a6Mtt-1THdXUX+U-1U^)(1N+1)}DH;W@!&qs7R0@#>1YFfh$2~o~Prd)p}5y zwW0z@i_F>@yvT2qJ=L;F4ZZnOH7AZh#0kx<;h(bMS+wjC;FWkMwV_$VcnVhY_s2!EnnfQ%uV&v>bJ* zIlz-cM97)SF%m^RYRrPH6yS(};1sBLB2f`h>GNBEBrxy^aJaJ?yI&g zj@rK<51@sdRFrB|9Yu1K;~@@;T1~#&KSv&MLqAqTtuNKexu394@t-AVYn?rF#q16U zLy;C`q4w-&$sTS0nmr=Nz%Mj8{3wf4Bnfu{mraJ%wU#iTdQ*kZ z^LlmA6)X4KAL7U>c5>MwN5*R3!qJXW(rg(+gAoN7LeNd!|1^1pZ(T%BU#NXe-_TNlsr6a)h%k|+nRi+m^OHHxw5y&+)Lyrzy`{cbCXx$os z04SY?q&gD@Uurd&r$GxI)^+#>q+h*TFvuuvf3yG8Cr) zNmiIYa+vgtw!}{0i4C$U>}Sd96tbo(8z5lz6l51kz&N0BwcUS5mOxi!43xB*nNY`dzm!1|OO!wJd7}mF=HbHkFkfgMQHAl@ND9R5!Hq72RZ;Q*islXq0n#k9!`lvU(+I{Yot! zcp&?rD?}3qXBA&dtHYF`7925Xb&KdQI}ulYWq$>lk&6Vq0#Sub?t?T+G;>qQ?Wzc- z6M1bpYtdg_4|uKNnNzDkjDYg-PU787;h{iB4JxfEZ49U(z1RWy%3eXjhE|;mmfW2B z{$wIO)*C#(VyA_OAnmi4!Mr_dJ*;RI4onSDnr&J+8t<(SHL>@n_`Vk{i8_k2kNmf< z{&i)3`4TZO%e0>_yuv~*>73;q@VNynOkZ-7zB4f&R@X4{fE zp%$~lV=A^W6Kkq?8;P=4HQ}P#0M_4|Y8h9Vb3sW_5JiqlgQtqc5NwK`z-DsUsDr)a z23oJOvouq60CX6fcqjtHh9seB0~ag+PdBfFsl6#hek-ltXmD(sdQDH0EY)PQ(VAM- z3ot`{wvz_UT5q})@s!tBqY$iSrC5bZc^HaPa8+Ik$F5w8&7u_2fm^& z!Ox0qj=Li{-pFRTxTUHzMXADk**soV>9*W}>QdXbzqy`6eS4mS=YHNb&nW6a}p^1iSvwrxJ7$m{vf(QI8@VI?~ zK)p2-6xmZ^f8ZP1t~fy*jbs|uQ`0G-F~cvLWK6%1>q zMk*Mw3Ra57vXV|ft<$ufGN~o>O7%tY)eh$+QEfZE6Zf`6!`DS@HK}qVJE9SQftUie zeYn-Z3M-4#HqBN?+jJCL(%0pNLrl)NL);X^YXz}}U#kW2h(SCOARab|S5v*J!aK!G zVa?INm#{Y_3@W3+GmQc?If@*6LUl}!**u-+(waQy%bpvBxe+J~b^JMB_S~i{)qvvy zVQ9U3z~xu8?1<-)56jo%2U1wopew;|;G}k{D1=9TA{X<>jPK5%E4{AO!U=2%NkmE{ z)ublBB}dPeMC352@+p-^J-EzMfomQ~D@qjMRAEyO;x{XtD+nvB?)4WoErEUW!nvNX z!j&b3O<71iAajmOfI@ZTyOo*8F6|&i5A*p7GU(2vsUOVuAuP4DA$W>Z2BCF zqQ{xK;*kN<%ao2T9k`Z<7P{!TMOGk9r5k&5nHrsj?TLio(hi z*TFXB*9CW4AVLT+{&M`%Cxy%%zYS~#Kx>qrEC9E)E5E=zXOm3Bgz0m$pz1RRdxPA* zvhW^?QeLn9VsLBe95{+{UhQ7n!^4zYqZQ|NkCVIEcTn%HR}?Ik>5zsr3xYkdFoPpn z4oL#2nP8T`Q1!vP=1%QI3##ei*rmaok3^_W0#`H(!1J<&blUqSdiKlY%6_q?-MY0Y zVv#%J8NIVySh?H2AKQbS!63kPh`)A^vM-`^x>5!JUjiK7 zkucvJ7(>zKj6q|N03h-`4krbJ_ z%2eww6LUi$Cgr*nnG|UORUtL1`_ilGinj@e0j0DC#CA}z9j2gpF`;3SdZmErF12*a zwu~XyQxl6uY3uKiXoSwgfWdPOO$yS!d3jRj=oW#5FrLLPP1_< zxD^u^g6PXsYX#z(efgJ&QN`?@rpq|{GcMUBfsH2Y^3QeI(&eM-Fr#&Noxl#rkUi}t zT0s*LCiqPS7h*g&CIv)HjLrf&fEiqEp3kfmE*f!j(Kx%9j6ImOX1H<f!5uX-8P zzD6V@f~$>UWh<#g36$;MLJ>0DhZuaJ>zR}a`?ho0F#?HG0ME<=^2yc)JGntq4toUb zz-u!F8Ks7}dglkVa|(d_9!kn+%s$LL-$RMYY!9WM6$0oYiUS1^Yh31$4-XT-F>=2h zH0CBu0{BA&tG8Da6lhP#KvI-?GjP~GXacB`Os5vRN?A#US}=qBN13}!(H$|Ce#b2U zX-ZRR45fujo_K6UqZYv08R61Q>aj>79bo3HM=%WMv(O1L>i`k{n$gVZlf^8xB)}Z@ z)f0h~1tt@UiPcpmEWaDXJ}wOnX>BiqWu$D>aHs6P}=LD_O;Ep}MUwu%No^7NpvJ~X>K5mSu>OrbLX zh6`kUJc`o(ZQ~xS89GmHE4D;(sn)vO2$5ZBa6i_^M-LVzkEI|9ze+@?9?7b*Cojs* zen~rl4K?Suku?$TNpiHu2=^n>%xr^g7c+sV2~IGmu?erLFl@_y3w7t)-wV5JZ*`Rj zz4VGHF1!-T@Tcl0&m^X?Qlh=aVMxB84TB!o(1BAoCYPbGlTpf9UQ6r_XR?IBku+m) z9gVBVmKs8N$;X8@AtwUCOQo54rWh`WIctiu4QtWV8oedn*RT<^f)YQpS^^`xqxwMS zRF>G12#sN|MT;vjOylX1=<+L{ix^3FYfK>lUvfD6d+uP$x?zWX-lm*`NeG7>rli>o zL7YkXFix!wKd4tnD~6}bbiDzR3rZ#|^R5V}0L2;s&tp!f!w&WJKxT=i)O~-w)D2wS zq8o+;t4H3R7);J zoThrWN(Fvh2UmG4oIt$z!2fgJN2yQ)I=mxIMj)YKHFJVQP?2_rPvVI)teX&2Pz3%PTXdFbqIS!%8W4 z-bjpFm4{W8b!_j#d*PdTaA-w9R1QKV0L+)v+*18b`C`|qs#v=i5s&Q1*L18n)eeoTE)wadX)fn*6T|Y^^2{lP;G%blh(z!vuPezIB>P2PsUY~OrY_5 z;sT8(3LpV4q$FDoXwcc5(qK(!$E&n~YvP(alVQPER(b|OI0z}JvoBOchB~uKB!NzK zWz(XkvP+$L9@X!Me>E`A`vW!cJbW85HlNa|y;P~;py}Ksd+Jki9hJVp{UIm594_^- zYdAJ_eu`b`++-V`EKtEOVHybmB7alPX=!*P69HhWuC+;R8b2 zf6Qzfx*AzrZ5^vvJd_mJD+iWIwPB>S>9jE-ZkjcAT3rrL!J6m2UyUfY}O;~ z@GGIbN>6nLvnP&s;>su}8$8T!PMqN<28f-6^b6NcH^r(?{I7DK*w90UOG9m1Qb-G9 z(aQetV?dz`d^S1@zS8Q=1j-bJ6-e0=6bR>L!ZkcVbDiPEYpDY;-WpQxy)dwofp3|*f+RDDlZr=Q-$z{gb%r^??%`pWNxC=z9?9ZD>p zhnS66TW1Jt)FsxccPF(wew=_gsELi}eobdvRPU$fFd6|{Nsdi1x{^BsqeY!qbku*w zZ|=9#U1iItb6wRZnhuN&-p`i4>EP+H=yvfQE2+eKnoxkW9Kh6H3Y0Tw$oc83J>nXh z%6nydU>KJQZ<8k<0yKOH5G!PDT9dbxNrZlr0}t8+Hkf_O(OavdW8~_*ZR~;X>5xe- z7n#v`7~`D6>(i_mw4-CUtka;DWGh?@2^E5fOc8dVS>npf@^afaHG2rDbRocPuKFPPg`}D&(%zH7JGS)A{3npz@)0=&b>R6h4K( z*>B%tG1-iL!lp1GXHGAzcjOI*-T1V!{37MMX~0%hXm${<7PtBr>!kWa6O(ZsnrAm> z6W7YDgryPFh8GyJ!C6Xx$HtI0LBR>uIv!R#0)PYW&93|EQH_Hu%-_puDjUGTDKe$icVJrl*1eO}{=H&H)-}e8*rn4qZKJ@k9 z8pN>C2;~ZW#DKtsZpcS4^fI4ok&#!=**@9wP$tod2sNz0uQVLx(nUA~?*WsD543%i(7S*L+ z%3M>m*f55vXji`0y1iM`i3EbE3mZxWkw{6Ql?whUjyj@QvK(s5bkOz9?h`dsuC1l+wyl?V{V8;oR{8NSiz!>h&@C15aL)* z^E}g>n$Dz=iHCE{!m^d>S3h}{!0MxaY+I==+S&M>q*`gN6CM9h_}TtL3pnfan=EFK z|ISA1w>8^=UwjHI*+2m7OO|n1*LUGBpJT{U4KhpbnK6(99D%3=G|8*cmhQBM&&haO zQuBGPE7{<#bv{iXL&x*>F8);6rbASKH&0=_1ONxaV2?;NXwuc5`GO?TB3e6JK&x;f!G>uCco}!&H2HNm?*!+tdX7oG<^ZEno-o_R+6- z^G%$XB~Zllp$7%pi%3&|0>y?W!{7qH+BUKb!A?Reo0RAS;$VZdK25)opEjd!%3%Oz zL!X&~(9A5IaUGGM8krDV(B?`Udt8NC`9fnzycu#M!XCCGGQ?oOQKjh-uWH$P2w1Bg zCEj~II?q-0NEX?WVhx&4(RjVA)as?E6|);oHR4Ih*LM|ZM62$mZo`mpm$FQNDvV_O zDO1fNkeWVZ&<^D+j&&W%gN`N0DVnSOd5o7RyC(a{zcbO{chEjO5Mx-O4vI9<9@kd% z_f^ywA`~s2{F$DtP^tWhj+n6#z^TpIQ#@_|a>I_Dv3n11&ffD$zc)lVaPoO}C~UOe z-SSBVaw{xH*^#~6-!xvau^xwiNi~iu`9=A=sfz|kh&hphQK@;3B<^Ya#?q1o-UI83 ziGpPvj*Rb!Q4kBXI%Wb@!Z?`y8@~2Ct`sTQZFo|?rlA{5o>`W?&w@2>X0KzVnP99K zGNSB6K^VTO*gshea&pON(P+D<@$)sawLE3Oi&}e1O?7R=CK6{CoPZPc7sW=DU$19h z&B2lLcTAH#HfIM&%n2Npzu<#~?DO&k622HgxW~fwmhh$bP+pBf)=zz$CJ`d+c*^FO zFfTVXT(RM6-57uraVhU=*2zBiAM+tbjheG3^2-~CHKfoSj`VgVi>`~68uyP}j+k(c z9Lqim8@Rl#uv^s==>5{&VY}O0ba%+^5_{__E4fk*TmRibySrx5U7Zsf&)uCRC&0aB z6%6hk##WNy$AA&eFjJ#36cZW$_3vW^o9V+Paa|c~l1Iv}PQKUi|0@dxTn8`sguxWVRQNcUj)u@z7)2IP zLcpbEK4WDpqm$s~F?K)=5m04UAYD2To#9<%F0uzeZB@B`+Uy*=T>kFRRQA~qUAl{c zpZqC)*YI)U?8m;^n##V|(%t{?7(ah}^{zSH|BKIaF{0Z){%`oT!V2GiEc>x12X~Sh zT;;)C$Fj#iJ*aI^Wn;1r{23bLvh4K#$=Am?LFzHSf2-2|p@wGiq#-`^w}Vp|qJH2?YF zS1f6q4Q3Djr(BHtua@%8$HY6rm8~@RXuVi|MeG&-1{=#Cn4hH}{IV#F#&Uz%sryN* z)cs*x4!(wDRLxMyWD#QE-iqRtcmA%PTv( z6>U+$1JrH*gW5U;iBMvdb^d@0G?QQ0bm7g!Q{eXj#=Z8%gn}G}bSULrVlgRtdmV0z zY#DBf44-fOT@eo{-jblmrDvOXCrT(psUk)8*wXV9M1?!$Z~fa?YZUcHoOL;x+pHAl zHF7C~B&AA^=-SIAB?OI*)9_C&Zcjq=!I z;mWM*V~>U_7>)NngUhP-39ZCs|>2363PmO*A?ix|AcaDvacDAvFoy{#IB zO%b;@>g!021QJ(0()diTnDvJ%O!>qe^fsd+#sq1j^{*=-SJ{{%vE+wD+=2Bu$tqDs zRMk;f32~RH)Oq)KcH$5=qJnrb*>bkoQAAO3U65vCFKCi5IP?|I)#Akm=8u^>3U^o% zlHVe*;R{mmD==?e0voLK^k|fZy}|%P3dojesGF41E12LQr-55UQ>~!Fc-fM?3jAd& zRm!V~m*!P4i)N+Bsj#}VBkB(oyRVY6;;e&62qDl{N4{Gh8xuhgpaI>e0vMaG7>>QOxPot(^t= zb}Ac=g)%Jxh&aXW;lz4@jD|E~%OEcBuMxT(N~82mnKE~o)6Ss%Xls8}{sXYZ|KVJ| z>vQf;;nS?BL~(+{VVnYwkV`xkQ3-mM-SPEv(W3#jxL@`*%&Liz5P})5YxnSQ!v{Y! z{5Wh{!=%=-VbtMJqU0Cxrfm9q*h#%A)~sgle&98}+@PLa%s?M?IHb@Mhj|>!X0)vu z>$qvq|j`<^&?jVE(#(2 z96nvj(x)m(&5wW@WgvsGMiGHc%qn_OUp3iaOtBWJukSX=x>Xc`i#6F#D4g;h{$M7v zBxCHlP7m?{qK$ApXtm^S_T*=Hmpt5Zapoz+_d^5^OewPUW8TzHswtkAi*vEQgCorN zX-BjUjaf|#0+7zWb zqU-rJxSi}Pz052y#kOidPHgN+4Tm|-(O~y00uF>1aR zGEV4s87DsgDUB?PlR2g=W++YA?4*b9oEpFY{ppdN5KOk z`RbtHZs(^pZ)Rpqy(IXOAD5#(DZvRe5#sq(zgnqL-J1Ylqgaq3Vv_M_2x*H1Jx%yEun zKH;xJy_F9TW*`G3QUXJzDadO~oN{nAO}UjjNw$%N@`9IPJXh_*j{a@PQISR& z;tNVQ`67hHPS#@5c1qMldRaIyeXEFjEX~|tKxh2w4qqetVsVKUZe&k{%Lem7>v>&k zJEaE*Wa&uAM)oda_cx{uk?;WRv8!;I-EXp6In6#G78{kOZxG@#(FiDRKt+>_{5q}K zuauJXL`{9RXo|S`GELpKv?*^r4FG-CTGwt_4Wz8Z^w-#}Yhe1jc*FsX9O&^$Bx(%; zCz2TJ2W8ljD8S~%-AEp}-ak;)#&~$LwtE8P)8LBtIyQJ}`UVXk59^7`U?ze*FyzJW zLB8ClWS4&VlnPSe%-95y%0qj3mf4_AJb~HdP5I~pe?`7!6nslvFdpHR+^rnQzV99H z`)o8HTuJte$i2(uo)k_F#sKzbo+bD?G!T4E+&t)?;D&3E-&q8ncH%36r(*aOK$*W( z5pbH~_Wn>+rDHS9ibds?(yC|tfsDvORzxll`s&)-q(BDlq~wF0k=ZUm&46D{A|f9E zWt1jetb?WCg%#C9w5TCqD|?p=Le+MQKs9hrb3|07@mte}3cmBj;7&_ZONCUJ0E9Fc zb27?`(mLZzaS|Sa8x@+X%~2Onw|3i-2QdP%B{4!Jfr!#R*l+^^MeIN@DAHt90D|fm z-0!q_91ZeN1De*oRv%t~>cb0=1ST9=2-I9D|!tDclU1GZ_g z95CM3fXT~!SRs9Tr$lUEYyHL|I%aOJX|8ZAWxkDvgyNi#n#@M8NyrL%B4q^$gBf(P z<)wmc?UmB7!RcmIA?I=tUp(3^rW}M^mT*2tUSdI8{gFF{tQpiWUZ%IT1yc*`Mj)d4 zOdLC|K-ik>7o0l$4p?us{(Vi`c4HF)iE)jyP4aW$5%@g2)S{uPLtZ>lGS(yv0(Om6 z*>wmJJbQGKhDF@KIng)_k4Py1w#-a>7gE4~D+PdYC*?v4K)B8HzjBpglrBt026DHR z&(xy`OH=X=SInw(9wGhFoYLzxft+AST*QJL7V8twrSU3nK=C-+DbtSY^gsEFZdL) zI?*Bsu~l|Z$zllQ2^JlU08jvvMlLgB7SowQQBhl5m$%qoouPthG1&<|+EKxHUbXmI zHx26;CE@>kyv{a7)>rTmJQ!^0R9B03Q*cJ!jjv%Q4gOfCAv7hUKvvl)F7cm4(Xx}a z0M2tnF`CA-lwyRD^OzK6!J1r@n3geb@dTVA2?XGrV}U}|SO!C!7L`#-)nQaMpbxP} z(8`D&m~_5|EC&7<-c|qr9S4tV<_~OK7R8oCV>gLsg_}vZsklc1QNaKyfK_@^>EJjJ ztjo?qbDo~%Xfq}(g%eam!WMU+My^*?!cObilMRlpgAYuC30cU<+d`to31F|Em@~ib z7?WbM!RLCy**^Gv*)s321?DnOfI*Y?T}bCLFMpJd7!nmoWWw+1w>;Hgw_yK1oW12# zmE1SYz>@kS)M+~m8O5g*_6d{TO0hLCl!_lfrxC}foB{hp-K&cGEyZlSguYQ>?hrBY#^rWezTZg{Y z2R&Ek8G1HJS3>3Q_Mjg*C-fr@{fI-)etm*|FWqr=eZ*z-jP4- zb!7E9JF?n4vf4Yc+B>rPxpahG3ft+*bd~pMbzh&jI?sJt?S1<9y*^!d&OTk}eY(*5 zbfNd@!spqibalEWy&!#wckjZ!?s0XVyLX{??{WluIpyGE8T5hFLgmIC%qyZSq#i!e zLkOX1_XZYg90?d|MJ$RcyNl!9!w1SdUPk5l7)SbwDsUr%k znEUt@^NFlK=(##Q!up`>miC4aXtRTE&wE2z>rK#ria)rb3*)?=qO;y`S@fp&NZy6@ z<_fg7Q8N3<5Y&8DO;4w3+X8tk@A(4;jWt5LW)=ThR~F#?Qav6CEATJ}S=<>?4}gV4 zfv$e6?XJKwbw^~I)H}DWHe$&j)l{dA-$JZDq-fRUSgp)(aLkcSxa`6QQJ0+rdsFX> z9l9JrJD>?~?c~;%+64A-FEo#$ffRM)xiPxHYVu!N!@N?N&FE2Qj4_u9Y0?IX;*1Uk zvWt(gzbT%U-W|y9RDRd6GRRwVePyu@^@Ta!P(03x9>qsMwGLe@8)LiNHF;2E ziw`I}-71*Fw^P=OIJgen0Hc8v@8B)9|J>k~ZB#x6u8n?<=+6pIM6i1}pd5cp??Q^b z4z^D5Zk1AQdlk6!wqrw%+Vd$b^r^=yZ8%{AMRg2R7#Czu!np0zBo5L6^vumR)PdFd5Lc0B z>&SzNbR{$hFP@KYtKTDMG2#NkbwXH>pUid(le!W%9hEj!=`cXUKMVjEazQGQttrE- z4ZKK)=^7q8ta*3$g?(&4+4Ss51@T?05?7ZF)$E{gHTzNO`0Z37H`=}|I%VSvM=zI8 z+ZaS%6&GK(i&plJ3}@;Ey`hK#Uz&GAg|(T}Z)AV^`Oj$#Dp8X6S3E;nonz2t2w&Au zN*N|tGzmvFYhB!2D0gkw?F)Y=^gbf5|b5e!j`Mj|lNpmMGAv7Qx3 ziULh9Kw@EEfy&|nK-E`(Y|+q!)zHW^EP|1wmtbcxn@D9kP&mRa0IJLrr;EoHg#LE84L2G*(<^HA-Xc9Hv*sEmTSkg*@}KC(kM?d6q%fJkv(K z0)cD-H)96{=6tg!zM%OfrZ~rH+Y?RaYKHU780!pA*)-oFyOqxw*{!?m*2YlkNzK~4 z(Qa+XUwjF-ZnInY+>T}gZ&I#P1>PbS11y@N5(Mx4(;Nb(sFs1i>+XZV>&_wYy3v{_ zd$01LqEk#oEmNiUpsz}Ar97SKjpS2f-iS|@WM2T}_J305SJhWKyOKc<k5f$}zI zu8B0CFm53e5Fpm{><`DjXAOfnpPrQ@$uH_wvX|RnP$%kej*eMxfA0CYt}Mq^fIS8SYaRL6&oa!V6m?+8%{ck_te0C<~WE0?h0k zu{Tt*pwNY-lPj6Vrh%1SHl1geqi-RmC{dj!D6MBx1fn%xsKbDCw-N3(bhnr*l);xT zXVY^nv>=?u3?B;Jf-QM^3^6cBTYygh#K4En*i(Eo%@8VK%tWBq3r)x6JfGCl!B1pk1ELg!>z;j^% zx+Wbl$nqSSbH%oTS>>x$$lF4(LYC#8;Y$(VT>e>A&)C3mx%X;%2ELYihHHgpUjA7_ z&&YaXJkf*G&PV1f@;ST=r6$>gDyuZBjCKN8PBHuvfUGE zX^UwF@5FyU z)EUvR3tgPgxM>GC)uP~ZsRGK`FqqDW4Vj9E4O=+vL+cz-4=|_Lg3vl%17fhPjuC}G zhEh`KOTEjKB*YQ+>9W*`lCYtt7TeUg&`@oNxjfw&ptJIH#aSeVum)Yf2IRjFi%Dph zEl1Rdu)vvfN~IVSC~8sc(1Zp$2Qa4_b0BGxIUrx`q|8Ou3rgD)jnxq$i=h@f6;Q8O z4r)!YI@AMG&U9sY5Y*0a)@6<)5!3^HP!BH)wTWC1h5+?&4)yS2sDV*D#oi6O)*)!1 zt>KnXVj;1Dx-gHhGN_07oUI)L+7S1M` zr`kfoBjt{rOLu8!w2c%Q)G}AoYpE+c&cgB?@|Y6UfHJZvQNBjB%PR^KgH4DDMU_4F zCn$W|`31dDx{~aCSkGh(V1ioqDP5T(EYHTS>=`VYeYvOw_RO9tuKJ&;h2q)iDl?Vx z!#ML2=Hv$sNo6#FvBjs_nm}_U=8trnXS>khR?L4{4flS7<;CgTL#^x!46NmEC`ee_ zy$%s!nooODy?R(KSaO&}W{V49Snx}lnUb`XT8JDDE8xKXgo~vUcYFH9?L$MM9UZo`N0Z-zlfHJVHfPRuMj$buUO3|)cftrkUJu9VXTLi0a zDcU(?%8ztGy-Js6aNbaK@U(jg@M?s~ z$8=BWMr_E}J&~cpy&;u_AVgH)Ka8(D$CjSQ+4lA?Hd=qI{o+thD7a)awbcaF!Y)gP zQJ@SxzRtOh%@ZBHE5~~nEo58LSh6KUbUKG>!v&B&3}>FVw9LH;Rf!6x_>i8*LG{pC zK4~>&a@>uB`7E?*Q4g)1S3R@Ve;rE<9^}vI-X+=$Y?9^|4e#`xo z8`PiX>66{|Seu2(>l2@C+<%gTl}{1?$KMtOl$QxC z1hhmOrpM!!V3P4wcp55@wOzL{*?<_QttRVd#-5HJR4vkkn5uwWVPGt>P&(0Z8CD4} zWfoHH5ua5;Lpb!7|Fu zO6Ch!Yp0miFqXl9qeN4#DO#`4TuD?@Ar zc0yBRt8HiuE)b=P38MDZ(caUXxmAhcNNx+|w%}=k6`ao9I5!|t5TITK0UIfZy|ah~ zHIzvh`oXAeHAE*Xs(fij%|je?GUok7qMrVNU;ogboOyEijZ`F>(sBAHS<9ciL5@1- zUJWM{sZ6;s=bIciudfY7~Dt@nd^!^mr3La~~VO-9}hwg?0CqHW&zS`)r3g>D8cPQ@MHynDlcAuQ;^Zsp5q6*B2{1TUMi`3Aqhzej7~;=A z`gHw4RMhXi>qio{xVj;-e@{Npxj;+a+hd=3>#rs3suu2lP4`)THgHL0Yj@SyOHPhm z_Xdtj)%7)0B1Oi(_8YYFo5$Zl_g6iFL27@fa{)J^JHS4nmWAx}@35rpQhIQ~kGmt0 z9%j0J)gyZL1wCUigm&4Y;*HvAjIF6Isif#)Z-FMbwemwZ{LmlYQvdxYPu=k2kgNoI z8l#rfx3B->|N9UB_ni-_d;jiCpWPBk$8AI!9mNG`6en71@QY%*Pyw%dQeKtS7ttpv>#=tqj*S`Z)Ix=zD+eqiU! zr&8&$_@rJ~saLdl8q}sda{}f`5s>xKRvlyaFvhO20oNE;2NwC>di&A3Ih5{bGzfCa zf+@@}h&D$b=)cOShDO9NB!X-QBCE_7aiGAlT$3oqLQ;g<95|a^mBXfe{||RoaKEZ& z)Wo3Gj1Ui>W?L#It5Y^1CchP^aE0*_U|&W;a-XW{3bobKqBh9uYnru!5_1y*KwOE;UZ_cgD2kcRO9T51$9)lv@ojJd>7#YOmH2b zQ^<+a>Cg&;HoK}CpnEW9wmms}Dx!a@&&#s;-h+h0co*CVS1Yxv1j|OimO`D5DcLOr zW3gN04!CJo?x;+=!`er#7({`M06Tf7&rXb@gHqk*|A7!ZS{o?Z9-8ma_JPtk^gL{b z9VV!Bya6}mmRo27@6uzK3Kl36(y;}v2(8lbaWyjXNS{Ns9Jvr15+>Pu)l?Xm*`#n? z9yM5DRE_f@<`GC*qQQZVc8zt~5xre^8Po%eZH;EA$?d6`6sX9y_)dRH2}50`6e0{w z&zjS0A2@;>kJ-)Z50kS6#+31ie(hjX3&9Mdrwqv>JGBC8g>gKr2X*{TEVle zsGEx5nfZV}vq%O4_gqQ>=|X!W+3Ko%MZW#CN7ffmy_2(7Pd5$g*5*x!E73(G&RAibS%4`3OLNzr%1mV zwptZ+c{`)8`ulLkZ>Z7l?OCpvmu%uKVXdLIUM%zMTfW>Zdslc>q(U4af4nuPd z@G)_oWZ;H6l3nYBl zZH~l&K{MS1D{{CSv&a^c1<`F;DEN!`oW3xs!akm|3Fb>ZCL@Zpfm4np&Nm|0jc;a) zQ|$-O!NJ!kOn0)Dwp;mg`iFZWmsDq3Q{-AJ(rJrRD)vzNP=drZCyL4&%^9m(6DvVM zVyC?g-U!6-sHVDB0xU1^5Idk2sSc76rh^RpfRU+rr#Q9POro~a)&n!DhD}9wi25jj z9qoM)8yO@hcHo}cj#Ve$xgp*o-WGDvXQGGj00UJ8EiEcqq7#t;(E=!j;IRjUA|cs; zf|K-?AjeBOrawDbFA-_lSLoHl9%}KOgg2p9oQp#3N3E?}#R%r8rHE|-YjB&IK<5ax zIU*~DNO|ti%C^Djp^@5YBVZErH64$Na|(~zXiN&joZc!YNf;`bBMGQvP<~pd)Cj?} z#!^(eC?we__EdsvDTg3QRRLbuy|eKk?DqAB_5&^O-ekv5G@9g9n6?mwdn>rZ+uoM0 zeCVUye!m6mE^=iMaCtZ)-&v`i);kk|S@EJx2-0LlQpb_cVnmh>MW$al6@&`?5{VF> zxDpxMr4FDTIp@aMN!c$+)|3tuUqDEE3%4Xe>!Q4vsHPDh+{d8XxgRDdfOasZO z0upGb-U&;@qf|DnobjRdnY4L-cOcNCpfDLe+G{2qc%*Byq&86!x`qhh>qy7hqR?fl ziXCN%dJA8O$jWt3IW>%}c*BZSuI;c{) zJJz3;5|SXH?ePE)kTM?{(w=p244q)RD>Vdd;4$1h2_1nF^YH765U!OYD{9oU&$8{E zJe|6qXk>on*R&O$p*p+=Bt1;_*qaF@sz=ydrnpM0CJ{-_yU;|)53dj;0zI`HJq@9U zUE6>f?-Nbs=Uo zF?JkP$JvZn2gaI)^j@=`u;%MR1udS=%YBLK*u$TR_EbkxW-n-qKH-f?>q2mxD%e#8 zPIa65y8q3ODC9+CGJ7JLq2uvF_Bd;b4)+d67E@(bNb6<+Y^VkFQjzMua)qP24-eUEfHJhO|8uZtI$?1bp@>CHa^CpPnao7X` zC=LUidH=JQ<0G@VDc4)2or~x*8z>gPS<}Bkxx7ll=}NROKHg0j%uSu)x1AkCY7d)I zD6UEoE;|{ z-{L2AH+YYHkCm~gg+IfkvYg0U(7E$0?Dyl3R9P1GkK%A6RufwSo#}{;zyUxy8VXrM zV@OU?ZnA|(#kE7->3v&~_f$pBz>frsv7@AmOa}y&zP58Kplye`@g?jy!Q-%(A>;-+ z@syn^p`>qrr9p*cL((r3T3`_Y6mr&KsqKH11X-T=_r~RSa+?>pjo0Dhd{YR+l02k{y~*j1W)jBKJt(U!HsCK4t@c}WtB(AyaGZ=hWUb#OMW2iI zR}~z$jm%$DAOh9J_{RkfSj0;jUsi!YvR$JKTGXxXpls-`;q*az5|$E#Jy#%|PE=b| zm2xl3s4}jt3XjyShvmBKy}CnU|6WId*X=-x5*@X}nAD)9mL4e<*PjDU5MxQ@yUvA! zOrgfbSjcNy4h0JZm|!#D5+)GE905){TL2QbzlV4M^+SsV3+jMkRc=oWy_NQVOwMcO}r2Hk89)L?cY4;blqDZj{0|NI|e)U$dX znZqmCn7m(e2dHBXSSY{Z7uomQE3K^BG0lLo+elOF;Iu(XYDct&FVf1}u0^%nhV7QM z+=h~j>#|R?4@)9WirC%|wXU#%okUt^aR`c~^oZ?sbawfT6xzV%E!po8b@s!|N!HsD znTFmG$*1Fx^~-3fVvqOmtA0r|wmtf09$n6xmqf2qsIRUKf$G``CRC$au!2;3`wIf@ z@d!K4Km(Oz2U_xDtNl1sh=VvQFwhUi;!v!TF{%VCYOgh}RRFQd@>o>19pz@$L5q(R zXyoXn4hP9 zJLc_Q$GsivYm!m)bElF;ou~r#G?k}q=(Q0g-X7b~V^o#s7j~hC_otA>iX2ZrN1&~( zVUSUFdhb^F>+a#H@^0_4D`8i9Yk;B|4F|`KD?GO)V6nyUKLfBHUW_f%UtkJ9%Q0me z_Ai5}iZBHSE!wYNC}P=rK$N~q+v1lHW%WCvau3%Lb)#!&#s@A32sIkhsbA56)=nJC zwj4f_#tddto>ef<(g%`k1VqEDr>jcvwaAn0KNnf{hR)zF{U^3{*0sQtsiq;#V#Gvo zWq_-yVGRiie6?+}S+)u#J(8S@i%?0Nm@VZxpezlAD>*;1t2s`qXbt;NtYaR)US&#} z!5letsrESLoxx&}4f{ju5^Tb##Ex4X-SE104c8Oq*A$Z~ z!wro)w02&=s1#pH>M`}%YYFc|FIi&QGIjEJh%_OsXtJRDk_yfJD1(l>t5g=|F$UTn zs}ULn8?50#2S8|4WNV$$Ta@CV1h$rfrIeNcahsj^)!IiNU|pG2;^2~eMg&e1Pt10< zKs_08Mdc>!mkBu=m_g<%r2)RygEPL?nvv13W>>k71Ll$A`YLe;*&noshhS8e83v`z z7i&I-_%fF|k|jYEDG^OMX9h38)qM5DAVyY(F)XIYFDu1UXit{1T^=mh*gbdCn(&kA zXCgw4qPnHhs(y@?ZkNx^+Q@SvT(Zv!+N8P+d~Pb<_t*PXtph*^+1Q>{jW!bqGa$cE znw>#(-p?SOGV=~Fu6DII{wBSX0%RF>eUjVyHN;W@QX17O(pwd`3p3yYVlOt{Rr=9@ z+-`87>e9Fqp6oORB?#(lrKZ@(o>>I`!m)%^^d12jJ?ZUbKR~?zqI3!|FW4vRQNqW6 zF+14^QybaYEAA^4QM5O^M{Mp;Y{>s7; zl#xJ8MG5b zFg>$A;e>7+8s_Dv=k1{Qw0!u5C`{e)m(1ft>vFphi~4NMS?2C--W`HcouXkhzQk#Z?jg#k-r zqk*|mP6Gz5(lKU;m|)?D(SU8FEEiie;CK1BbXYE@0SU6G1gF7y>VPQlj2$ovyciw$ zVC-X-XQRL~VqYV5u+PypicEyVuNPxIYihQ&gmz@(8%6uiC52j8rEz)5Ss3--=1-!P zRy5aHI%VvAhv2E$)SKLtWBi+`xO-|zTjkIVN zy1t;FLvqfDpUw|56n7IWha(yLtN!a6!tl$ZohcJ51YN*`PpGv{6dXZ-F-Kl9nwgGa zlP|IW!B0S41sO8&sb>QcA5F`k5C-)d=2S?{?xSuS9y(DxO-qT2cv^@I{#m6stU~RM z24Te&9O{}E-_~+QRIPi5xD95TH$`i^OuDXCE(?PhidQ@G9&81_PH*aPP>nesmJ2lq z1uztvXt7CRi(zV8xLW(|mgS>eik0?(fxv00WEwxSur9iYoD638QDSxiE-t*nj1^fV z-|N4o!Y%40-5+=H}c)I>16oixIw{4uHtM4hZsF1oZA>Ol}6Sgdkfg0Jia&EkTGu1O1h& zjxEHOb{V(`Qo(RoZg>S|a~Ba%8xVOq^8^uxK$B@kn%^~;GM z<@{=&FJsC_v`c)lEa{D5|L(HFgx1)fC-W)3ZW+rA}7UPR=7~I#CYu?qX`32$N zrgEjP4wbGyAK>mR*L-8I<`)F+4dqH-6)I&LmKToQv2x8>ujUs7?r6EvSB6T-uzTU) zetWs*SM+LrLEv6ruJpQ4={KDZaCekzzP4BM3j+6=a;4itrNp9NICift*L+p4<`)F+ zwsNIchDt9yAK+e5uKDs_%`XVtt>sF$gi2q+C=;{OB|&7S`?_rKs11YoF+J6Jog@A> zwyegQU~q0@8F;ihy^WJCnfJieye(~6r6V#KDC8$1tuS_ka!c zT0FW9&r0ENOGn@_?j259H zR+mEmY&?`(3+3uyEr#guG94N$IyB%NGO%|IuUgyzlDt+2lo8MmD7ynV9A$fi%?g;~ zE9u;RP6RfK_8KJwD(fRh;2i}5b$1yA-mwe-h%Ezm_Sl*g(8Qu;lpVTp7GS}LQkpH z*Y&r`diA0fO6J|ARd-((w;CGkk_Vh~NCJ3tCg&+*q@J{VI36+wa`oh88 zP_Fr9y_#PTxZQH4olq(1%}c?3zI02=HD4U)M$LWTKHo}TTCVh)L#43sQgELy-PV_D zUKbES&3)iL-%2kkSNct%QkF8laB$a_Yre2o^9us^CFM#l2$iz_{)L0Prd;#tUd=BE z+*RdDSB6R%xV><2+vS=^dNscwa95No9S)T;%k)2%lS7A}hm#X8_ynk+dVPbys`Se$WdX89%z|^3B(7-fHh~wRivQ+{EU&`6yZ&wWEEs)#Wq7C+4Gn zZ{m~xeg|dr`@7O8dLO?Neh>2bV7UMKJ8ryv%fgYPTNdUf?i`<<9G{<+w?b&_%V2;nf zZ%-xeSV0`jGdSLSI$%XXb z?D3fc6b=t(jvv{_OAE8J=`_T;^6Z{K{GN0CO;Y0lrkBad{)H{WF5Wcn2hLfV`H~EO)^6U5V zdvodf7x?{6rR)EV-y2HTpXB#T_m4rwb>FN$9iE?^xf5g@8DCg{DD-SawQUf+ zjIty?NBQ*?{C*vuJ0|8PA>4P5@0*_312T4km6`D)6Gz7v4lRE6+R2%zX+DeZ-!M4` zE6>i|w|^G)m|2)#T;SH(16HvpBebic;-v%m+v2Uc8RT|C+_)p9rinS^{rJq>#Q6S0 zf-v1rP3J?Y%}>l7n7C8uLalAxe9h&i*SIU``v-7#7r40&H7fk(*ROzut}k6*$@M7L zXqmlx_w7BncV_S0-UV*(FXy&3{Fa95=`PnT_Z*s~JNu3wJUB7;{#rX)Pniq(NHczd z>u*%U%r6`;{W3Yb<;d&-^(KlQqrP2y|1|v(w~9lh1tbk>b1ffn^|<6Huui%#H!cZ1 za&&s)2$UF?s!Hc37LL!&K$Gzqr&4;)AvE#Ap$VvTU}A3iKDbUoKQVp;Rd4{I1RuB6 z+tC}SKZj!*YDqXbJ~MIeQ8%`sp z&+kMFnI#ckrDgRIeh)O-(IlVad`|KCSA3{tdVZ4xVSdx>ru~~XP29VG`uKr~P4f%m zGY7`!4)9cpY17=M1DiHU8aK_(Oy76YjoA&<*wfD98EF}P0*L8}apZYsVMofnA-n-; zGZr?FA77ZImy`R)r|%iRZ+>QiF3`lL{j*1osLko=c_Vc$jFS`d69*=dX^F`6o7Wg z8Qds(sBecR4;+BOXJ;nnair)J@-a=nRKbCX`J-|ZAm`-WJef%6Crs_mZ%$vnY5e8s zA<%GW^6o>JKHiwcr?_u7bOh#k-tILhJ2-oM;pp)NH}kJTe5lua55QA5r2u(l{^<1h zePDWSV*dE_!es{e_yI7V2IEOhm}Y>RJ!qXv#XT~l*mj67rv}=&SEEOp)19jQ-f_t} z_2u<+w_VXqk4%iu2s`Qgp$U-XZ*?d1NL|}E0cQ3atOquyw;!LG5yt%aJ(Ik!fBZN& zvj*qqXZKIi`~ioGHuL`9C+M)_=F;6Wxo{{A&Q7|KQsZFx;5dC1FWo(dRuMK-rATLP z1H?(cgYM1VGk?itsl5}pI-N(mOdgyRYfjGsn^nJXXmTEYG`@e;?ptojZoOf*AwPZ1 z9lLJ@QS%EE;|GL5$sll!tKHY`x@Fg%*Gdq8=qOO?Ibc|s9{t|-snl7Q8EeFuV{>{} zA;xzF;+Xn1c2om$SW~J#GKm?zOt8^q2;uxJ>xmT3Uzg4T`P@B|^5+m%m4LN^eN~C? zxar1QUp+B1p+Nz9*rhhzIKFRwcKZ0j#3i9)#+arha$en>j@_423~q8qJ{1?tO-!SH zPEeiUM6d2cS|l1MQ;F5geqrIJ%{PqCOioOvHynrYu0LQGqX)QP@bc|jH*ed#b&tpr z2#Bm6k(QY_u=#wLiuvjBeVf$C)n+Mh+p!7H)h~%w47a0yfe!l9ird)y`b`Wmf zA9-rxzViXBjohALU>5y4@a&`AZ{zbaKIhY?cq#SeKE%cRPWg2ByjVWOJ65<4v6XN6 zGPw`2*sqdIx>tqNA3(S$TODZ|Z1Q!!Q5;|`p3}%}8*ORi_Pcyu&S%}5wrxGK?oC(f z&$ey)r9a!Q&@cVjcDa7(&$g@eOMkXqrC<89?MnU9pKaUqYx|M&!8peHA&|1|a(TX#(A_+Nv*|m>=l4%e_TE{~ zI~r=`b-bVJ6{YK63fD{P?97eN+^vw{{GAr(>DBp3-cdj)uk)|D7FqM_OW`98Df8>E zaJ`P}@r87HVjR~OZ#s9MaAYn}v=?0uExO*owb=T(!yuu95avhD9rp-ddJlmNxh&#`108%=g~yK1 z`nCJis_!V5p3bX9o1ph3#mj1n18!g6q$@zN+**W=uX-y57X~ zb*1YExGwYd2e{tM^H&Ah@zeAYx1&q=yuP5Jp7frH2My=;=kmU1GKqHkiaW+nOw3Qu zE?AJ^wX?HR(|r2MUdGj{4vo+4x4XUi$tQ_!Hvx4q)nmb=kKi4X>L8pj7s649XrvEw z`O!oO^XBChU_KxEZ~PF!jM=&I`N{oLIMLhlc+1Seao2(08?bA^G**WbVB`rTZcehuxtWzqFda4p>kDIf?27$rE4F0e5nfikZ7Jt2%csUT{?>)e@ zkG8%K80329*N=0(x^z8;JjyN1pMQnt;(`47zi=)4o?rjvqW6b+U!lqT`4+C_x8&FC zd(~I}w{a~Q$)8`a=>3bhF1NofT!)FN`9lQJi3RnG)IkD96GsRfO=9_QW^dS;<@G1L zFCCFzpXOTaznC;QijYnm*gJl7(uV;XUh4K$xD>AbxyjEbfKT$X1Kh}7<=0>4_w}Xg zT)y(>xqRig{WxXIyjG#VybuD33_zJAelw&?mgu18Dne+Sp=xPCG4F*!r@8BBaCZAW`) zT^5<9c`^A9u=;YMIi6cSgyFT>aM_a6mdcy*`X%$5D7pcWk`m#X#!3&EOeQ?|Yf!RC+=>J--(H z%h&3cY)~=w-=MMoCm8$xQT4?DF}JxX?R+Qgej79r&GYLkxHi8sJQq#n)926M!?kov ze*Mvk)BL&GiTu6av^R8&+{RA{JJXk=7WSg5F&sFYMxl&GMnsHmt| zSeR&3RA^LGRH&#}SXij2sHCW~Bo%=bzbKl+TS?lLo zm-E`gFf$CB`Lp-_?#*<^pKpPt?KRCckN3tml4BnCk8rMZ`@gRVKejeId6rwB_G;#> zx%M>ab`$;g7dtyQv$2^zv#Yn;V6O9c7L?iR&HwgmXJT67XzoX!e*Q<_ar60um3ZUE za&L}3j^VhS`+7I0_wzv5d}Q+ivy7v@oc2@y?tINwA+AjZ^b#KAKbB97h26Xzua&Ob zyNchdeXje@uh-TjvONpyOr5vD&%$lo%yqhM<63URekS|pN%nI^P=6X^+pe&Lba`2X^brBBvg=EdE| z*}Q1;&Huo>IBSy40bG}NcjxMu(vzIaL!3)8oNuo9^3nSoh5IG*ieYE+&-FMA!F?u; zPMSQ`arV*khcbD`O8-!lx`n$uLr=U@BEv9Cqrfm0_>w@oB`kDY%f(}P&hXG@y+JNbwC$X=Ih>67E@wtUboaHaj%%g#D_w_FRQT=&7ApNHF` zB{t(q>^~{NP8`!QiD{`!+sV+$sU3fP9o@&4Q2*)cj`QqB|JAZC`|ZVOviAqfwvP7+c52W6XOO*5u-E3;%e~!3QW8y}GUoL(P9LT`(&taM z8=1~Z;u(o-*)ejoV^bKGWU;+WTo4=haXtU>ADnAju4%KTT``S6xhou3d&Q*5BT|#t z>>^>B^KWn-w_`t}-Dmrm{?7L^t=yK)H`{qKvDaDGbmO0<%a3!e{&anP0n;HJE`J&C zOS*NKo}kxt*X8fi>-yjEv*`89t)hqXwP_Fc{Q~ZbYkCv+)xX2^R;DlOFuj}UfDY4p znLew-^m|O(XCK$~#qhJ*@(b7WV5aT;s^c^1^(?ou-=+Vc2wQD1nb#XzsK;B}(JTZ_ zOJWlm-iiMm4@1i2$;plxXh%=y<6zH`r;+`0{cYK*O8e)UzSlWxhw}tuB?%&_?*mc;*J?zSV+{pd5N#ktu zUi*oT&R-+(U%jr4;(XWZ{Ald0?@8b^X`JIF^XPThHU8gTub77i@iuD|e-njbk&0p_3;$FUQIQ#~V23t88MbUGuT)9_O4q`u*dX9?N!G366Je#|9-#;C#o` zbogbv9_wVjrnA|ymSq=?cLmP33yx{q$adJ&VUrS_7{Vr(ObnZ9aJ)Hi-U-+BO=Plv z+Q`wV$+P;TM%kKY$Gb^ewe0xky4)nD?DgNC`|R)QR4QiPEV;_tZ6j?V`+Kmke6n&*lKUKj#UTt!r;(-I>jR!^VtZiaYoyx9^%~AH)Cd=e>lh zoy)iT@Jl<3?{iHDF@0u->Df$Q(P4TK(_K1DA7r{$hv_4Ky8H<|m)f!f*Y%&wbjRzn z_XZbr_7dR-ZOMb92%zw6uYlc38l z>mJyxYnOmaJ9i58zvSYJ{Qk%-d^)S(g_Q>n&A+c{*M|)?_0=2JzPYOCjjE5fK413Q z18JLI-15rC#fzSK>xoBREm^mGeah<<<@wo9-ajwnsYe%1J^bv?bze9C_VNBte|os| z+s}V&{p_(HzW?>hos}&g^bF(I7 zPMnlJ`PSqak58F1bN15dapQ+aj=rbQuw`E@*|F)!ySumVJMi`wZ7+S}`mFVzo<=*? zx9~vl&-HhnjsI~5axUNOc$vpLTxJ?iE~A*)c;$Bdv%dlB37YJf0Uc)_z5XYebY1_n zn3Xgj%3>2Uj) zYx-uUZ9a8PKf!c(hv`zL?Rs5b-@>$g-u>tIM0|4dzmYdn_JPyCYga}ECHRN+w$=Tv z@9lAd^Lg7feIwJ||MI$=zY+gVz5Rpjsx;}mwqy6@1-_T7_vDPc?|lAe><-WS&JVf?H+Z|*`>`TAn_Sbc;4?Z*ufykdm|l;2(%*SM z|Ga+JE9@WF??!1$i~-}OPUF3ZbF+*n#w4(!WyA=3q@5r2Sd741yD{U&b{LH5dfs`C zpMecGM>~EY*meH%uJcFmNikv8h%qCb?>1atxB1!eeIrKBu=f=9&-MGu$1(O@w~ib& zZqne9Q&WaJHWf*n%Cb-HhU>C+T`!Vm*l91}0J7_OnWoyePvF~e0l7X0F2c@@PevU5 ziCp(sk-E#Yg0*ug}!v68{>u3e1(avEO z(?-o2F)o2+iEQ;eGHrx@0?taEoH{c3=(Ig6Pjg$x@6B%P8<86T5mKa}INSIT62pJ)GE_qQ0^>%7gkRu;GWG!>HV z?8*MQE^B{__RlqKf7^fcw`qTi|L*&rzw>W__j0byz#Ok3zBhTh+2?_Qp3ZeS|NI=^ z$?@QK*wpmzynFgnJ@(YQmiuSVyEoIx^w0Otv2CtnHqys)UNWX%dCm3L59t%@&$g4( zr;WQW(am)|gLOTwX?xDPoLtlPKE!UvHEn-C_FC$i-iN!;Ki?16U!U#;FN;_HFFaC5 z|F-#U9trn$e7+gL{rl_3$~EWPi}sanuFFU2@~&xntq&sCbSyrP98W_%?0M+V8?idZ zZcVe%Y_3PaF?h+wp-tx#f@5r#n_EdAZ^!#z*Y(!Ik)b;-R0IIB|5+)E>RqXk5EiNSw%daYsM*#EoI8pl#yk_)~I= z>&voeZrk4DU-dWNhpBwna{ggXoz}qZCUJW)WRHz&Iu4)mr|CeZ|Ns8^qvJNIX%Wul z2Y=`Mk~(uT<9eO*NH(`;^YA8KXze|@YkD)&mvor6?Qkz-`hV+w1@w2`uh+QE?&O+& z6Nhw|-eCUIw0#D1U49ep{HJOATX22d-Y3}mJ=b(S?s$7gnC^IcO-$SS71!l$+Ma)1 z)9>T|srQf0?a)}6lR7euZKSX1*~>Xrgk_d-u5Hp> z+)|=rA3CF1&Ch~reu?_P>lh^9xMJr6_`mtS{=fRYyPlg`Zgzeax6gb2-)C4zTV-RU05c?ba^N|2J1s9lh<{e9ynLma3Y|{j0TTCoYVep0k=430{b{; zzZ3fx!g*%4NJ(ZZFMt0)HourYagu*`+iYd>^s!0K^X=_*B$wq~i(53OHnZKysV&-a zO(*HPT=&iXSk5QcbThWMt*+^lxZ#_a9>A{VZex>w$Adn~v6Rm3L(X^2jCI)YGjMAE zTu&;t7-b}lqS0iJhdr~|B7w1#MB`{Y+1r=PI=MN9-P)p{No0!(?B&fqZcin9fq9Vo zWKV0;X$H+CUdxWIrtO3KQa_5I{xpCFQX~zcn`toF?L~1qgocvMOVM---AcpBZZC$@ z+vs+>gJS7Ux{LCUXZQ&<;3M=AeN2t?30=-@e9Gx()I^`t7xX3B9!vBpVWR8TFtb;@Hw|J?Sd4ApuuY2wh7yB;b0wj%=uq4F|fBdQ&*vM19GI4Mk8t z8bCJmCXxoyV7i%xP!tWLp>zvH({Q?#Zlf5oAx5{;ofJ!V(_M5A#nA}5mqt=NjiynQ zNC`BS#?UxQq6svfCQ>p@rb#q~QfL}YrRkJPGie6>!LRc^PG?a%+2-R9&}_25i)qyF zI81Xn?;)B;nH0l$S)4vhx8pk~8$U(|$@ZyvH!Z{qC?1cdAMrR&lju2|N4@c6no9mO zofdI^0WG1$w3G@dgRd2Fx}4_Xm7Ern4KFO=^mTd^KSrhaO0PR&_viz9pX%sC+E4qao(|9x zbeIm&5o(~1=_C4t8tF6ols=~>`jWn&uc(>6p|9yX`kub+aBAoMK&|vNZKj{8jeezH z=r?MoKj?RI=P`4mb-#?L3 zXb#^$->!omr6(zeUS00|=w8feF4K>5`U*XZpP|?AD87Fsr}<1z!Y^|AG9}<;oNnW5 zD>z-n>1&)uaNDameS`YrwPwCnLbeIZI@-jt$SItr&@`G#Gie6>M!(Y^^gR{RO0wNM zyiV1$hu)@D^aj4(+2lIzapBAl1`hIz&gPfj*{> z=o4zB&*)S7oSNuM`hvcqX8MM{Cj0sA_hmny{XTxC2g!B6>@l;)ay7NlPxKxAO25$k zluolL+Jo0Xx|N1g4BbYz(;XB`chX&SH^tFCbT5sdV7iiQI9-Mxf5)7L&>Vah3m;Sp$VhjbR#{)WpCm%ochpQru%Z5$>}`mha;#z4WNN!i&Je8sx3C1&t(R4 z8bw2BC=DZTI+M;KyKiT6>O*$l&f)Z2I*)wme7b-xBtN={E+)HgmvHJ&oyhK6XHH%B z?NS^-U8pN{qd@9TmyzAK%Q+1q+r>&xx`N!uosOg9$%9Uy6X_)Kq?73sI+eWWG&-Hm zppg_$qv>I8W0X!4IZdFkG=|1e5>24-G?9{NGEJf>ltR;JDov+Unn^Qg7NybsbRW&8 zbh6#UJV0|OgC3(t>2b=YC+P`VKsodjEu^O@m!73(=sC)x7wCC2-RIR#6GPNpH|w2O99HSMOiX%AJ?WBe(j=Np zDKv$q(lkn?=`@38QX0)78=`YRrPFMBfF7g_nnMrKT*{<*G@q`dUUU_O(A9JeT}z>K z9ocSuZlEygO}3iGcHqX_Cx185*c(jdB-22&Ibp`kR4qUjd8m4;Ic-A1>Q zjY)Q=_nG(AJlQXV}=&(jN(PcPC-^fDFDB3evK zsF0S@GFnbWw1QrtSE-m*(rffOmC!1BgWjZ4T1{(cEtSzaT2C8k6K$rHSDBY+DovwQ znoculCZ*9Vx{vOsbec^M(1VmgbLb(OOPMr}=F`KJMUT*<^cZE+73{y+kil0WG4%w1f(2DJ`SrR75N26?&D5X(hczuTu%FqBrPG zDy7x5hSpLUt)um{fy!wkZKBQ8b~evd^b7q;?erV9(6{s*eNV0Q1D(ZlS1p8A5$ZJLZ8xS)I^`t7xX1H(^vF0eM2quEqzDdQ!D*IKhjUsMnBUp^c($7 zf6#0`XN=~v$#zcNSw3a!$B(Du=mhehljuY`nLO!KI)zRnFFJ!xr!&c$&Ze{I9P**_ z=v+FVeCa~EfG#3Gx`ZyKPUKIQQfKNy0o0AUQg;fZ%jq)eK|yo{^`t8)n69E;bTx(0 zwR8<#N1=2BT~EC!jBcVEsSkxyKk7^UDS`&l02)M*G?;FtArwW!Xeix6(KMWHrQ0Zm z?x5T0PKu?w=`Om5;%EfjOC#w8ir49APDfE9CD2$JL*pokCeV1ANXayrCeaj1p=mUg zrc)}-q!~1e(&&D=k7iRkJxCAG9Lk`%^bpOXOnR8+(<78ckI|#_IAzn5^aL%S9D0ft z($kbn_H)_Kc$nF25vK*Tgcj3MDx~GKj8;$)y-KgpN-Cz;=`~tKCG;k}L93~h*3ueU zM`g5u*3(8Rr_Hp9-l7WHN?T|fRniXHPCKcJcGE7}L)G*Sy-n{@4ZTNu>3yoD59tHi zM|E_7_R~SCr^9rJj!*-AOdruF)JUJvr}Q~B(UITI+0EyUpk*IpbN>5 zE+TI_lg^^E$%oFNKi}D1!Raopd+dLnG)G8cw&-9h5}lXgp1z zWSU5mXfnmqNE$_>DS;Ac42`Arw1KKq)9ZHGHEW=1n~3H zUV4ve>3#ZuKBPL@NBijj)zd*bM2D$?j?hQ+F*VXB^eKHtP4qdfp|w;->u5b~pmN$s zn`kpt&|9>Hwo)Z+qwTbVs%R(eqTN(Yd+2R?hk|+EaV7Plt0;u7rfcY03Z?7ldb)wa zs5jk6H&HnCp}y3QBB(zNpn()ggXm@&Oi?t1hSD&Krd#M%8cs2E8{JNKP%Pa^chTJx zNB7XZWZPuB({Xe>dC&=TBArB@bTXYnr;-<)MyJym8{dYW?SS$c+^qdatV4Q$OlU{V9S5(f}Gnku;cYrXdtX z!)PeoLeVswZl&8OhVG!-=}wBJyXh{vhvH}i-Af}Wo<`FsN~8oDOJispCD8;LPZKGb zCetLkk7iLi-EZc3@Ig)=pgEL5bLkl9qpt2bb#vVARVH^)Idk*Bl?&c=@a^tKBFf3 zoW7thshPf_ujw1=^9O$?)Q=*lKMkOP6iI{VW*SUUG=zrIFp8#I=vEp|F?1WQUG{&&x|*(`Yblhjqw6Wq!<}_l z?ko>;XZ@8s>#y8df91~lD|gmkxwGESo%Me1EMs$Lou50)*xXs)=g#^*ch>j0v%b%r z^?mNF?{jB;pF8XO+*#k}&N4W6*7dowuFsw2aPBOFb7%dYJL~t{S--OAPx985fJ$Kgax$}n1-OZhjqvOegPM{O%B=V$_=@dGZyy!GK zoz5U{I+M<#v&o0fp>ydx@}=|X0=kg==pwq9E+K#FM4jnU3ZO33mAX+K?W6s4fa>WW z9iqe3Ku72!`j{H&6Z(`sqbB;CzMwCunZBa0=^JXHZ|OVwo?7V#`jLL3Hu{-uCY91^T0?88jMmY5+Cb&Bkv7q0s-U-M3vH!J+D6-H2UXEd+C{smn)cA!^bXa~ zyR?_yqY5vskG9ZOs-$hSopw+a?WA3_o2qFKy-n{>4ZTZy={>5Y_vr)rkm_h3?WY4& zPY3A`9i|34LLbq`)JUJur}P;$(dYC9eM!yq6@5+LPz!xa-%$q5p@(QLWzsyFPY+WT zJwlJtW0Xyg(-ZV0<~t)OQ?{R(lT03MYMump;xJxR?=(qI+f5WdV}7i zQd&)GXf2h|I$BQ~sGK&^CfZE#lib}#(kL2D36w}`g;-gG0~MB&tj`cgl#jpy9yI69s@=ma{EP9je_nNFco$%{^- z)9DQIrZed*I-7jx96FcIBVRh7E}#p^k1nE%=@Rm%PSl4*0dBWCxBc!5J>-7aQ;xu1 za)0bC55PY1Km=E>!%mh*;uLul zPL)UFG&upM%ZWHc9)mOGu{cXk!rAgToFk9Nxw0+a%ft3_B~yXUpNI?PNw`R!jEm(I zTp~}wrSeo`h$n`i@w(aEODV6gPbpL9e}=Q< zCY&vQj&tNMaIX9%&Xb#QzWfy~kiW)-@;A6hZo$R!x41<94wuT`<1*RCHk8Xh;0pOi zTq(EVD*0zzE&qaRWE%@nE4Sl1`8QlI|Bf4EK4Q2v%5Lt==dwF)mXE_N^6|J;=Ix_f zn|uOpmrulQG0yq?B?NOqz2#G}kIdU3H(&WQ>?fa&{pB-ofb5L}j!C~^bI9xstN65S_af_7C$5HYHI9k3C$H;y-R=x>OqlW~?j z5ogQ1-FC~7C*xc>1?S0AaK1bh7s%6ap`40~{QJ#yN?<$8e)2->FF%C?Awy}VXvW*RFl5K2YvutApTVxw6 z*ecuD!8X~(4z|lSme4KMIS<=dLJ!%-7JABF*h{vthTgJ`HT02f?4hr0V-Njg8;j^K z+gQW^*~TUY$~HDJNVc(x!Lp5243TZ@VyJ9m7sF&5%NQ=(SjGt1#x_REHnuTJwy}=U zvW<0&k!|c_tn82DWE%q+FWZ>N1lh(!CdoENGFi4Uk}0x{nM{=fahhynDAQ#dLzyAl zn958!2xrMQ#xh&BF_t;9jk(N~ZOmn!Y-2F>?TV)$F+9ul=(stRlk8!)xIse->Gaj;SGvg@_$6m6H!S9PB~Og!eR0_94^~><_Oug z6^fK?9dwjD8Ar>ueNc=%701dp7CcV2ZH?mP44fd_I_M;ME>4zh9e0YHg;V86aGLxm zPM06U8FDtxlo#SG+18n7%eEdpN49Mbb1^55v9<*|e+p+5%2RQXY-4eY&D48<~ClJv9Y^J zI^V|dCd;)9xdCU(M{tg8W4d!?8{?fP+ZgYB*~WYq z$TsG?P_{APMY4?nFP1;YC9;hPFO_YKc$sWt#LHzHGhQLvnDI*4#*kOZHio_$+hhAJ zu9a=9c)c$3J#LU~yn7?%34MVJ4HGum_+8*kn&|7;hGbN()D+_{JREB2Is!(Q_5 z*jxSs`^at{yjIHY*iSwV`^(4U0NDcv$|v9;`9vHnpM*nXPaG3MH9{;m(lFqj=YsotQ9Gt52&&6r-c{pA6#ToMX zI8(j=XUP}hY}pUz$QR*U*~ZA_VY@$<-~yfRj|=5axJZ}jj7u=TDz<@P-qU3QaE06j zSIS*+mD~+i%YnE??v86^8;e(m?fzVj8+3jUZj^iACb=hWmao7qaxiX{uf%P#jSp{;emGW_iNJAke;h9lzzOm|oFqr$WO)!yk!>7gDz^JG z7^my}D4Zb=!I|<W__k#E7d@~t>e9**8r5J-AZ77gxz6aJ3wdYvhr*Rvv}xusuGbaf6(In{=5(+$@j5E%I30 zDktGKc^qz+$78p9o%7@b>>(#(PkAEtk|$wrc{28qQ?Rc*1^dZUvA;YG2gs>7P@ay1 zY8ciEI)x$=X8 zmtkLd9rlygV}E%A4v@=npu7EI?4Y*7`g3INPaE1Iau9O>b zmHY{=mOsTc@@KeKZo+l)=eS<}0yoHC;zqd{H_2b&X8CK}B7cKhGxd&sTWQ~m*a$v;TYNWFB2=<{$}E2+uuyQZ2O-{kZu1nNwV#a zCRw)q(WJ<>f0|U;_D_>0+x}|OW!qm(hHU$<$&_vXHCeLl&n8>8{n_Nmwtt&k+4gUf zC)@sR@@3oKO@VCtzbTY$|2IXl?GL9|w*BFh$hLo+QrRDu$(?Yy+!K@F{qHo&w*Q?b+4jfNEZhEgT4dWlPpfSE!fBIj zpE&KZ?Hk8!q~4Qb583vW<0;!dbG&5RcaFDg`_S=`ZC^URvh7pHPquyQ_{+ABodDVP zwG$}YK6ip-+xJee9F9ZeJ~&jiee#6Kwr`$r+4j*BA=|!sB4yiWPn2x??unLdA3ia% z?aL=twtf1<$+mBwc-i*xlOWr^ev)L{=TEY1`~FFhZ683Xvh52fO}2dkrOUQ&pbXje z5tJ$0zJju3+h_GxITQQI^RT}> z9|y<<-pv2egmh-Z{k$B6sO6nak{()XUJ=Drd)=z z0D%%*;GTFwWmdiFKwL-SB zsg<&gQLU0~tZKDvV^(Wq8@pO7+Zfh5*~YTg%QmL9LAJ52jk1k#ZIW%QYqM-)URz`v z``Rko7}z%1#=^GCHYV0B!8!li*jNwQ#>jfgHdfY4wlTBbvW=bfk!=jEuWVy!{bUo42b+5p+c*apfr);37CF}K08jlB(#Z47RxY-4f5WE+zkF5B4L2-(KyM#?r;H%hiK zyV0_Z-HnlL3~#J#V|n9b8`B#v+t}U&*~a)L$u`zES++61DYA|IO_gm7aGGpmfzxFh z6PzL2*x*dr#t3K0HdZ)WwlTvwvW*?im2C`ho@`@@^JN=TTp-)n;zHTR7#GPl*0@-< zF~=pcjXf@vZ47dmY-5qjae&hu^mx}LJ_kIx(1@@?BspPy{|)D6^SY~Q!R zvh5=xRJQ#@hGSa~X#0zdkZr$_k+SVSGD^1nNJh)HKgk%`_A41H+x{ivWZTbVylnfM zOptBAlS#7ee==FN{ZOXJwm-^L+4f7BCfoig(`DOFWrl3~tIU*bzm-|C?Y}Zxw*6S< z$hJSrT-o+(nJ3%+E%RmD&t-vZ`@1ZZZNHaAvSa_3vh4@6M7I55mddtY%re>bk6A9; zelja$+h1m-Z2Qful5PK))w1nJvqrZ4Y1YcNU(Gt%_ODql+kQ41WZU0nqip-#Y?5vN zo6WNAhqFbt{c*O+wqJ-g+4hywF5CVR+{QTPA2;@=<{`V=zSZR8u$O#1_Le=ck9-35 zl~2Te@=4fV_QV15$v99x1qaEe;$YbehsdYlQ2BHmCZB=BWp5lIpNS*ovv8DrHjb8k zaEyEoj+M{Faq@XMUiQTa^7%MPz5pl77vdDz52wl(;WYVToGxF2Gh~09DR;tIa%Y?^ zUy5_&0Gum#!Fh65oG*971#%!Rl)K|1`7&HAUye)UAY3ZE=S`C`4${0--@H;;W%23!7=h}I99$L$H{l#csUj)$amr-`7WF+-;Gn`IGifq zgVW@Dak@MLXUOq56Wi$q4h!6ou4Tq?hT%j7q4xm=1XzK8}z-z>)HYI7+U= z(egeVBk#wt@&Ozt*W-BkAWo1E;UxJmPL>;RihKm8${*o0`D2_eH{uNW6Pzi3inHX; zaJJlpbL7u)uKWeglfT6Iax*TFzruy`*SJXj1{cdMxJ3RIm&)JaGWmO4F1O+e`3GDn z|A?#PpK!I@hHK=XajpCdu9JVo^>RCIkblFC^6$7w{sTA5ZkI6s%kH>UJ`T6Z$K!U{ z1G|lP&i^N15BWswDW8PBWKZlZpNxIvQ?RdmD)y7Tu)lm74v5a#x%tcf;v&AkL7x<4pN7oF!k5v*jS1Blp0$a!;HmUxD-GU|b+yi3{akxJbSV z7t0~IM7|oA%GcmB`C42qhvEwPI$SAVkE`SxaJ3wUYvkUzR?PlVz2)K9N4^dF%6DKt z`A+OF-;D$0dvKsU0tdlWiZ^`LgZ%xS94~&c$u=)3{xJ2D>FY z=l^H1hn$B!<>#=M{5gboP}+9?^c|v^Q&;4yc6fkyKsTL8yCvexJa(S#qztjM6Sc7 z@;+Q9@5klx0bC(B;7a)ju982&)p8TAkw3?^@)x*H{u0;A&A37S9yiKuxJmvQH_N}^ z7Wr4)D!1b{xoaopb8Mf{F2f!ZoxU7<$-S@-cIPrfv9BDD{p69@Umk@6HB4Ps2%a zDo&QC;}m%YPL*fkG&v2Y%d>EXd>_t~@5fnkI?k47;~e<`oGU+w^W?cWU(Un@@|pnV zZFwy&lFM+hybhPh>v5^P0hh_;xLn?dE96bMQr?WK>?6O2 zedSv0C%=#VmM>u`{~4+qQpafo~XhsyOhOg@Oi$$I6X3PW}YP%b(%|`7@j(H{oRYbDSc(1u_52?l?_84yVh<;|$pYXUZqwEcry7 zEuVyQWKWzcpN#Y5Q*gd~DlU+{aG`t}E|O2j#j+i9p+vT0FOi^wb_|C)*^cEZjkT6jq<&?Nsh?2RWzH&15lP6+-c@hqgC*wdl1qaDfaj-lMhse`$s5}FQ$q(Rg`9T~ZXW&SA4vvx^ z!qM_v93yAqSa}|fljq}j`C*(OXW=CI5u7YPic{praH^b*)8xl-y8Hyrke|evat_Xt z7vOApAP--c?E8kU%@T%tGHDz#%=OS+%CU{ z-KIF_|JSjHT!KC2RoF{@1AEJFVjsB_`^u}apS%Y9%WH9fT!sVXbvQ^~kAvk6I7BYT zq4Gu?CU3&w@@5<%SKvtbEgU6p!O`+o93xlaSa}E+4`b@?l&lH{dGy2(Fet!Zq^8xK{oW*U8PeUj7O<$Y0||`8(Vs ze~+7GJMM6cY{wsNmF+mhZL%GYxLvm661z=x&i{6NVh`DlQ|u|*@ru1?S><06O4 zc6{Ur*^ZMODckXqqhvd7aW z?sAH3$6rpB?KsS7vK@~(UAE&gXUKMZ=1kd+)0`#S@tU(`JJwT-7+-m^9rG(+wqt%3$aV~{LfMW1RwUao!HQ)&CRmAV z#|SHx?HFNYvK=$5T<*M_d0xI0SIPmnO74QI<*v9!?uKjSKwKwx$Mv!ubF4wOV~{n< zb_}v6*^WupEZZ^3T4Xy$S*vWvC~K4Lm}Tv<9ka|W)j9v$G0Z&VYp|zm$29Yj?U-iX z@^#opz8?F^H()S`{M|C0FIOg z;wU*1N6Uk7jBLkPi7WqEhD&LRWP&Lbl`5Mas|M zDA|s!7cJYd^? zDKEuY@-mz)FUL7@5zduY;5_*ioG-tM3*=&4D6hmt@@u$QF2N=8DqJeRfy-n&o?p3K ziYsJ0hG3<<23N^;Ou=f|jwx6pufw(SdR!-O!1Z!DZjd+PMtKu%k~iaKc?)ilx8hd0 z61U0QaJ#%6yUlRU|2wdUT!lU5o!Cp>g}r4vwxN&wBleZ;c#3{<3ig+$-~f3l4wR?i zAUPEW%hPd)JOhWyGjW)lhQsAqI6}S;N6Po(C^;QR%d>He`~Z%XAH;ET29B5K-~{<0 zoFvc1$#N!6k>}x5c|J~)AI9l&7S50#!I|=-I7@yEXUo|*M}8dV%1_`t`AM8F=imZ) z0WOpm;v)GeTrB6}68ULdDnEnEB%$do| zB#-)1e5Lv)@H^B$iQlFEDf}MwOYl|dpT-|h{|x@H`e*US)i1?cMRxmNhOeuBIlh7V z=kSfyufWHue;(gl{R{XO>R-gSQeTFTQ~wgao%)sdj_O~=cUJ!jK3@H+_+IK?!}nAF zI)0$~Rrmz;Z{U;Ezll##{}z6f`qlV!^>5?Hs$YYjsD3SeiuyLyw14%N;@#@o;&auv z!~4`bu|(md%Z%{u3 zzfpZ6zCwKx{&V$1@mtjo!*5rgjIUImg5RNjIDVJ<5%@joN8+p0kHQ~NpNc=Mel-5L z`ZT;X!*2iS_`2$^!8cGp2H#kH20m8(SbTH!h|`bqeX>L=qn ztGDWs>rQX*)rIOMpXws@l2^4E>$o2R#&Kx z!sJ# zZ>+u_K308yd~@{!@GaC|iEpKTAU;n0Rrq%5uf}&&KM3DheF8pS{a}1A^+WLe)F% zaD(b4A8tgwLt%_rFzNtyF;`h9q}`u+G^^}pkN>JQ+9>JQ>0>JQ;(sQ&{$OZ{Pd ziTWe>Tht%L&sBd6KTo~nLSCR=aw0#VUUDNZR4+M_7pa$A$))NgXYvyDk~?{+ddZ=@ zLcQctE>kZ#m0wXWxs_L`mmJHh)l07Ba`lpPd7XO6y}UuaLs`HVfB*Z`M7$?^=w^l zw|~j`Tvxs1er}*%azHm$FS(#&)k{w3=ISLkbPM&8Bf6D($rT-^UUEjaQ!lxrJF1r) z(w)^yF6nsnl2f{uddV%_Prc-r9;jY&O(&?AoYP6_CHHiSddWdOO1Oa6o)UU_SP`?2`OZ|uV67?V9Z&Cj- zey;kB_<8C#;TNdijDJA=7W_i>75GK!Kf#x({}jJOz2r1ss$O!NuTU>J&dbzGuJc#a zOV0CE>LvI2YW0!>y4{g3!v>UZGxsQ(+jO8rj!0rfxO53ApWKd$~~yfw>i|GV*Z)&GKTpnea&vHD-} zvFd-rH&?$G-$H#AzLolY_&D|Z@$J-09`cUrB_DZb^^%u7UcKZe@1Lq`9l6uKwo}ymznU7L0dCk++OMdgQ>Lt(lMD>#Ie2RL>d!DIY@}IlaOCI!G z^^yT}ggKJ|I(C9nDd^^#xx z0riq+eW7~Ex4uZdLs83M)i`{zCyj^xBpzd^r(W{VcT_L==sT;Iy!7$vB|m*H^^&K)pL)qxKTy5otxr%d`RkL^ zOCI|a^^(tilzPc)pRQi=+mBT*dG05wmwfkA)Jxv`O!aAaxB7H^uKH{6KJ{bpLG>B< zi2AYk8S2O3XQ>~LFHt`Me~bEw__^vQ;peHJj9;MsTKog*r{EW=zYf1h{ZxFZdIx@q z`b_*%^-lZ>^;!5b^)CD?>fQKN>OJ_?>a+3X>T~ex)aT+isQ2PGs-K3hP@jkYT)hv! zRee5wyLvyqQhflwLwyjxOZ{~G9`zx7mHIILfcgmju=)c0arK3G>ju017vbxwpMh_n zz8K$F{Y-qU`s?w{)z8AWP(K^rO8pJ^IQ4Vz?bKT&7wo7$2H#nI9elj{Gw{9C*Twf! zUk^V}eSLg_`ZMuK>Kouw)SrbPrM@9PU40|`SoMwZ6V;!MpQ64AK2!ZUc(?jke6ISY zc%S-n@j>;?@DcUR@iWw)ho7bXe0+)e3-Gt7Z-Jky{zCjb^)2xW)L(>uKz%FxLiHEp z7pZTJFI9gDeu?@x{8II8@GI0`iZ4^&7XOO+cKB85FT<}^-yUDCz5{-p`i}Sw>MzG{ zRDT7&LVYLv=juD-x2o@g->$wZzEXWR{0{Z;_+9F|eh|K$`UHGO^@H)9 z)ephPt53xDGJe36abZs=JjFlLJH7Xmt}bUNCom=C$?=9Gq2ejwkZX$9@Ak~->Iyj{ zo^V%hpi7_Z?tR@odSqoeyZ4Td@18AVduDVA7yBd58C~ML_UYQAcXYx6ztP}Ta>yCX_2hdTiN1nx#1nE133;4(86H0)xIA_=ArNxg zj%OguzdsCy$>30&=uB9yyow5MD&^>xuoVu$VR(m^(>{Ptpb~b#9_2Swu=rAB1SAh# z5zK_yFh{u!6(pyeaYXqdiOHd96 z;i&Q_Dp(CHs|zH+wU7zZpcGz#*I+$-2H(Sv;G!{PLjb13&2THsgZZ!k?uVtY9Liv& z@*4UEtcG>49yY+ouo=Emwxi#`ckm4XH|~2MysIh=pd*5w3uE=m9;U zH}rvi&>sdWSEEB98B$;*q{21IByS+S9zKMRVG~p+mFSPK6ZXOpsD_wEY%kP<#&8bALNn+HS3o@UfS%AB`olm-f@Da6 zk&p`GU;<2m>%ajn$c6w+S8hUYhFjrIxCa)%eef4}7#@K|%H!x_cnX%lQdkZzz#Fgz z-h~ff1AGLVphEcy6?Vd2up09pnm{a^3mxGK=nq#x5)6YB7y+p;4#vYom<*ZVf@}yt z3ET{~!aTSK7QlV56qduw@G86kt6?2{02|;V*aTm|m+-ApiT(&XVK3~1{a~HVc0dz| zg>xYZhCvF9fYC4(CV&H6kPQKt33K2^xEXGR2jLNT30{V`;BBQG{Qy2vwxFNGm&#W3 zJJ<<(VL$v1F-rbk--dEn2OlUK&`nSQU&D6z z4y2M3&1`ol*uo^y4EPjW1IHbd4Aiv4}KCD+Z zp+W^5h2xNNF7*MakPhQvqB0r14l-db+zEHX0w{x(@G7i=HBhd+i@pyV;7iyFvHYg% zxo{q|fXQ$jIG_aPgZy^1{D!RjcC7pcY)o^u`+V92%z+!>5h#V-@EaTk>jK&vG=b(2 z2fZKxG9VLt;D;cDAPgn&8GNN|N56qe_!%0tpeaKvTnKS614>{yl)*u;F0`!H5C@$g z9;x|kCLIMnjRG1C&o4WG5xAJ?p^4q8Ko2T;orWNohd=5v!;`dCCz%e-Q66y^u zhBz1sDUb^3Faahh*P_C8iu`WNY$$C=1X5uU zIx6xT30I(5N6*6H5`~vd57WqDld@rJd zBHx7&;vokD${h4TD1~QWDZBt>@EWXwHBb&8zy{b174Ri&g>Rt}s-as~n|kr=4`>73 zpgZ)2elQRQ!-McJJOYowVt4|M!f~jEdfk~Gy2CwC3TvSXs=?|-oQjTSn#E`-ed`j| z5B>z}Y3lYFjyvcC@;#6cL|`_|fqihnv*etFOJOd^JE!vApu8_A@AS#Ld>xju+m!?~ z3?=YBRKV9z34g#b zF&qQy2>sDfrh~7+I>vIL8C(DtLr1s*`anMz2v;i!=wL{MBp3!S!Dn#QpKLeGhx=eX zRKYQ@PH^gjIOqmFp%W2VtLaif-qRWYgA{rHXfkBO8h97h!$+_MK83Gf z8*B&mtknq4hW5}A2EahL3I;(cq{DSk0!JYshI<_Fr&3afdk;_w6;P>IXT(^SKo=MR z=`a&Y;4vtL_h18TfluHIuz2?Q7?i>?koODZ`L#T^mgk~Yy%?(l#Dfd0`Y~3YGg&Vf z2bquqR)ZL;9yCxIqP?Ln^n-!QAaopLLLrpE<4_6v;Q$;2>#P{-Jcxt-Py(;R8dwWf z!x%n?uuP~AjiDKw2N%GF&>Q-}02riXqO+g`7C||zhYw*VSdEwt5?~x;LI_IWUa)w^ zk^&_l&-CP3o;-K4&SpPBJoJZ>ChSjm4pu-Jyad)c+`E7dN<5klWv~t^;SgA{G1f51 zh5*cgH=zP{K@}VUt10&|pbrd!BuIvI2t%P#g06!PVIypYZLnRj&W*8}LNn+KS1Tpx zZ7^546TKVe!(*@*mO>fqhAKD$Rx|1c>Oo^T2V$Wabc8D)9(q7e=nehhN=SlaNP&@% z3hBxORJaaYkPSWvLIkYlw0}s4NiY?hPy+A6dZhyW8cNQKv0jB$P!3z+8?er&4M38T zj!uFSSOw+qAy^m0SS{gV=mhc5A1t0l3;=l!_cK&O{R?BPvy{eYGdK^R>p}B0!G`0n%LMC{j0)B-mH~>~2>kSEz z2`ei z(MtIb^nYOOVx6D@z65z5GZNBa5?H^{KSDjY1lqu*&`#-q3YS9<=mmYDzj7ri3{jF% zVYo696;dG$u7NQyR+)eblay;w;X1{E3QouZw~~WS10RGS0!2^^v)~4$1ib_9f=A&A zcnY3|W$+xl1@Ze>XGjMx1mO;-I>vqkJ{?)#Ji`s-XX{wKUaw;%z{RWTSaI;g<~mjx zRQ^KwVTK>IZ#0i+#!X^wsO*Kan8Vo+r`(DPrAi5(*##M)A#{Yxp_}4Bh3E})K2PvJ zdfz;=zI}hV3OxelXYx53%zaw9f4UdszGVQ+eMNJh&)jD-_r=V8t87*_0OtOXxesLS z-pZZX#@6-_x0gSl=n=WTO-Hs@V) zzBT99NE})VV2;}=JzmXmY1*CBU+fIKyk7H6hOXC2pza4} zBn}@wI2`uo_&x5y{$f-99_4&=wVXK~XRc>PbTmhbXNDumo8yf*eZgGkVEL2fiFjSn z&~~y6#&^qDS*{^ox0fe4JSNJ*X&CTFLIGcNKuyWXVfoQ%QoW&2Amnk&SoweFz5bjW zUvV(E)~F0}B+D?FBIxwWv>~S}&l8D`lpY3rp5@CM;tRO) zvZ8%_I^# zhS^>QQwf2PGt1|R77RC$i+>*G7Yu~G^01A^WGagoh?hT2RbG& zlxJ=B(pc`PoI!R$i#oVG7)dY z=lS~ujI9}5YXJqU^FLUbaW#WoUe~ldr^^*6@JHCe{(^i@$m_}*Tr*^}J%q8SxS%uQ z&GP!Zk>WyU$m{e+@? z6{OTIm{zM`MD2pSV6Bpo>8BLcE~#CRU#lRsc0ssSK}PL@NUeggwF?UJYL$!|c}h|3 zlG+7@wF<`96a*rR8e*xINj<0$-%&n3YH3!GPBvNwNzZHODV&@Af#-rHoOMJVDwJkHFmo#?fgx zle|tIh|`_o)#SS)9_LVJIN}%_rhPglc-`z(VyA>f(I|^!b7+2Gn%9vUaC@`8@~oUe z(XFzFM|YlI9-Ze0+^3GpkZIoNps0)P9UXI;m$9Ssix!zc78f1Bx`&x3M@zsTor5F2 z))3jWuxEOK*X;=mMGBohMs`rMtfAX6oWVKKNBlKqRKFC-1a`@cpwsUT2mJnQ*HGI# z()^Cm!xB9wOWdcFB-JX(J9VOwwWrEEb+VC67m2=l;P!;Dyt?3V2feO{y&_)bWDj$s z*BYoJ$^YZyX0K7r==NHhLZ8>4S5q{KASWa<&yn@d2}!A(9}0Zo zVxLb=LDJ|`qC*@RIw*QNAR^<94gKASI-7`HQZs>{ zD-d(+bKcfHJzNHJaN4KVT5qTDdW_d)?+q_!HM?HyvF#ngWQjW1>kqoTey)AOuHhMJ z(p%-z+NU}51L532DB^eKdqxmAG9+@0CY+Wtg8qQ+$B`Tg6a=RcxMWClw{dwC9bjJ- ziDkqbGag-PmbqXIc{ zDdtEEaRAHJktZm#688PNTlvIvIOT1H-UAtO&)3PVqhQ)~TePHO&$o~onm zP0!-e4As)V7kJDl<0bGH2BMz}qSpcJ9`j)#K%Y7a>D+QX!h19GWy@*WQ$pws0s<4%wvjtm*ZI7Q*0E1y#{RmEvd`WNZU{L%9^2U94IGqqhtKYg-@i?zJz z^5>d@fPIpWjy&B&QWSF1MLK}4>1AdMO={Tj&9-{*s(Oy%AguLObuq*7!&hX|3 zeZ1Vq8OVG93P;}twEsqTYxF(9uxm!xoe{{6IFbTvyIU?fG2ANj_%*U(M@* zV|73{+ZB#3$$ToI!?Xv~REZw%xxB*VOB&W7pJg&DcIy zm@T9E$c9OE)vCF0#3d*A{BVIQ;`+MXs}Bt3N4!$&{b zMf8)F3~*%VkV1K{l(xm0pBj&D+jt#BH(xWXFi;pS$~t)n6w%p7n+C0({W*h!a$>FS zL1Mia!G@(M+DS+tN9&9LJ+l09%b&cc&2ukp)zsn+oYnXYTc0DYOZ+0r>p|8Uv>y5% z%B?YLld6foB9?o0X8aw*a%XR+j#q`s^as(#Xw1b;qxbntc|+nxwaU*UmhoGnGT#oU zOlRVr#Jm<{4Mlm)hvybet)}QSlvjVO+30!beW<)*vmBM}dmfefu2ePg>soH+_ol{X zes61R=2uR90rU9^l~-`8(CGH59z|t)>b17lyD2K$(Hd=nc1C4=%=F!eWq)-?WxX3x z4-%W{hw1QZQCV(C4k!Eo&vAvVTl{O(d4%#njIfjZOVz5=;9q_2D6w`Zx8JtFft{JdI8L_=#oy zA=N@umVYNI^|2V0^)ExEzTQQp{{MXjLQD0L}mFV{u{Bh<2|VCuLf=HdN%Q;#L_OiqOv{% zHBQlZJSxj~p|buVjpt~54=VffUbF%FFe>%;JSz3~t`0Zl9}&y?nDS4ErTu+{%KUet zvOE+2PAvVLX`hYS+4Xs#j=lfSCYI&Lozc{iM<=nwG9OcZ39)QnCsgL!50&*ZUJ&v4wZg)H!AJi#0Q9_JssBaGcL2oGjS7QS$l7E%0JcElz&Mq>-RM( z+qVOi{k{*C`moyD^<4**;pd>T|C^&yPjRSBXW~ve+>GB>%ZKRj(WorX%>No<=^spa z2C;0PIX`%aWqZu|VJ5Nc4|9IFkyw^*&JXi6Hs^v*qk4Z6U%-y=ZCX8*!$U>A6gJg`)aBE>7~T7 zf7b2q-R-I-UO+7Us+oT&v9zBh zs!LH>pXD0AfXeb-LghGKtHVwCd&IJwji_wbm#8fNuc)lwevSV?rM=bfXzw2rHzStu zTcA?jLCa0ti&*x5f(}nb<@hymhQ^an*)A_C>uKU5EuXFBcWb$cA0?LkXV$ljShjy9 zD$8AiO8YbMhdTTVRO)4q{oq-Keb3QB?W`bNto0+}@w{&`TNK0hRH)pt2rA zP^ph$sMP-ijju&zyS%83A3$Y)-GIveyBU@Jf42@d%U?v?n&D=7ZxTztWR|x{$2ZH{ zPAuDPmbZ&omTQ)Gh*;{|EU#M2&%VN5pH`@>pNTKkxFag_>4VCCGjSrZZ0A^1)++~< z?J=>BSlV9zmGkRes9Z;x_-P$~IV$sCh06R*{64YtCmU5iLuGk8Q0a#bp;CV)KCE#c z&UZ4uqZ-#GmhC!DEbCK^%KDz$$sTUXTM$dVpTqdFoQ}jYzKJ^#%ksLQ(yscUvc6_{ zLy2Yjai~n6jn-bCSBIPB&m@-f@&Z)O<4ZMOqw$v-@6ot!XM28T{4T zd{ox2jgD{T*G|jL`dzN&X8xUtW&66Kvi^fmY0rtMobM)}vfoTRjaatVj6aiDrk{n% z^mn7OKKE(-6e{i0^hYle%Y03L`W~^&&y4>Wu}r@em3I5Rs)={&_-1)WiDiGA`Ta>O z>(Qi(-Cp8QS^u7>EH@dI^)>Nujm`KYHBO>E$bL>G7B%~K0BucqB5U*Q0Z?>{2;Mxzq$T=RAY1fSxPL+GuNNbXl$-OyLatAzPqD) z_xP^y`?(9|rbubmt4U2m^Z}J^NDD*Ad?j>F0>=kMwuM zkMr}A0goI#?t&Uu*gZbJuzPp@BRvFs&-g+t4%3srJqmlp7xwC2*gL+kH-CE+_K7d- z)4i|{re|T__`-hih5h5%NAs?-+s1rU>g0aahfvwai!?6P_-T!oY5ao5D>Z&ySMgdramTXZ0cjG#-={9h-=q}M`KeTxf+}L$kW)=hhJk;AJa89^%2q7 z)JKuVraoqBZ0cjS#-=_>G&c2dv&N=AZqwM*#~m7*`k1G&sgL;@oBFsb~{Ezz01Yjb9s4bSRlk*e0i?xsdcAS9{Tc}|KzP#m*2(cJoM#lheB?; zJNQaIPe1JUh2#c$DsV&6AH4}$droH9DRZ-z?FwfU@N!fR^K)Ui8D1PN&d&kqZ(#v2a2km2L;O_nFb+YJ&pcz{C`eR+%dvN_x@m-QTKg6K1V?9=Wr z50kj|ytAXbhsTopfrgfjqXcceFe*(w&^|lE*Ca z7*?t>-;?j>>7U$st{J57P}mDIFHz`x%=;R4h57Bh?|1useqCc7QZq|g4}16URNG&x zc6m(huf1EN&zGWq>;*@yPALzYYEK${_>_LK)kep)*Dx(wX0Kkb)+kaF(MMo4m6C3T za0g%ODd-BigPve^&>IZ!kXH_X0>%$VmtAWG!uI@YW>qtTa9)@v&CwhACky4a{>f$N zu9p46`xf?5VXu14BO7}M)I5c-!WRv7&GZ9^W&Q(ExfU9V$~AljDxa0IRHvh|UN@pL|9emwZxJf%W8x>Y z`~@vvjmmTzQQ4kvP}xqiy+0DmXNrTUTq8C}wD;dxsElVm+nfD&jt)2F=Ml?(ZG*~s zbyd9*mGv8r%Jz*!Wj(Id_&QX!&!@2;mHEun;b#0hwEQkqrhio9$25K(mHIaO`vqdT z&N1;yVmS}5Mx}n%qq069qO!a%G&cL|D~-QKW&L)cvK?l94{2OC$u4h(%JQ3|vcFoQ zGJjJatu!|Kr?tj$s4TxTD)TqX8$c}cG4o3xmi0(OW&0hd)VFEhZerOkv;P7boB7Yw z>Fz|O{vXxyXHZ%GN>tYWWgWf-mG)49N_+SbmF+R@_iq}T_V|;==6Ly8W7FP#(b%-F zUo|%CvzJ)vr{?(4aDVp;#jsO&fM+1DID=Q3Q5tBX|Ip|U-u z{@QD7+DAu?&HlN9Sn8)AD)o?z%KkR(XAH5--yFZ!63cp+^>ONSrv09NJs8w-)1K!L z%l4S{Eg_cmHOJFU8k_pLMPsvmu2A9_Pu5WTmBHu>Va}O$2)I0k2Pz2ul&G%bh7DZ$L5X`_7EqlWnkM~(LtMn;Vv8w~2J z2>RB6o<8O585vtRe#Q(YnLJ@cO+RY-z0>=_xg+fDyi;|a>OH9JPxB1L#1AlBJ~J*t zrTsjE%5|@aml4Z;drr$=MWvohyhh8*QJMb-swUn@Ec4rfO8tL>%JE`i(@*})aH+4| zs4Q=f>Tjx5s{2uy-$B*WkK@BS-ceM}4>2QcHSxc@2V~lD1E!PqY1*lYn=xG0v$^Vd zs^_a-fXe!te&s@9S>INwPPfmQKUn_Y@|`)kS&7a9F017&*1^6kryt|Y4df37TqMBj zQ~q3DUJXRw><zY05z`G0+3MuwhvB?4%)8t^2P5V?Wz2lP zv(Urieg9xvoQ2^?7O$xckyll?tQ2o+e!&oDK9|7upKzELF2hd8cxNsLM%Y;>8gb?g zkw3V+ERR2D2r#`^kzA*j3z0nU5M#1(^TJtyU|X3A zy*?kWw%AgT;~fIgRjbil_mF~IuRBZrxSV12CS0ETk1YVr9{{};m#9}T20})q&-{X}J2#LnHw4gY|)_Yxvs;=UY z&rS7&JiJjI6}P9*nFM}k4l6H_Iuie^YxD2b+Dn0C_p%8ZZ#YUw#f2glmTAD{ClItA`0p1Gs zsOESAp=8KmcH*PzbLJ!iEua0AbJ7L;Imre7X-=QhksRP%s+@p7Kb2+Cp3Q(rZZcQt zOlAKKIsLpG=a1ydMY$~=4{!VOhxh05atfv~am1UfO3Z7S(Iqf%7Eln%FUZTK+*aZO zUIymvUwI|iehFAyfsemlA=?`YHIjj+jToXXoc`0tw1>)cmdH3(#~2-{y z@9;STqnrW$0xyD(l0P`V&l7Zwf?U245dG`T=S|=ItOB3?$M2L6_|A~LQR|Ps1B@Rc zT{QJ(OP0?YE*J&AVwZOmIQ`<}ubWtULUB%iJ`HFZEi_e?cv?OUB^5ZJ#74!(ZsSyy z%Acs=l;lnYT8UU&mPd%hSfS% z%5WKvTSR6w32XIb^x%P1$fw(q>pHn#^=geJBy0*GriwaM}})m|Y&I*)v>D~(l6k2-shT+!$-u?!3c za-{9azzo|)2Nu-K%Pt`{TT6MQAe3j%d~DQl9xrzCqGPc$Aje<`4f9>hH2D(<3;E78 z;A@>?5&A1S%jgydoxc2ZDCX`UcVlWyfh*lv;7H_K1}V;hAg6x1Knz>M%h@^U5T=I{ z&wZ63{Rjlp!%m-E*K5}o%=OPm&kb@1Mxu2*(UxW*BP=Q5KeK=pqg>qx}48^w{ultkBZ(kwUL0BE!a`oE}4C zfju1k!)-8L(vLXvy}q&X2Pele%iuiE*!JH-?tuFW#sUNFzuAn#8K3pcjpX=pSd?=t zaJg>&dWoqKz7Op5kF|v;5;0SGL%Cytg-2{D;LsZI9m#x-tlaY z)9a->aODOjME@31;S+!hf<&f~kgws2W0V;|Phdv4U`DZLrgsv!z2f-modjO*OjbF| zInx;mPcLwWJd;i6$cV-iXU(Jq%q%W0p2@$;QTBa>zp3s<<-U=Lf75tBD)&R`rrPBV zR2!pmUoQ@o`+B`~cz;wrPYzNw@laysN6qUq-x?PwESsQJ{P}$%6v@xnvVaLYB?(FYvOepZ$M=|x2T%< zOJbStcdENkncl>EG_FErxrbFvY>l?ZuZzn5Y^ZADSS@dk%JMH#HSwid-X4|tcU3iU zA1xn%%KjOoYT_gHSz7la{tY=r-fQ>=Knac z?4Ku9pHW?o%KEQVHSwFoa^GW}>Sk1?H}R*$vL0Jizt!>|G~T6Z;@`A{y{Oce zU)986EjP<6()fB**7Ign6W^uf^HDjDpF*WxP5hdczlq9rzoTm64O+fYhkvGO;%!>~ zEh@|3scPciw0yq~KdNftI_dWQtdGk6id8jnOD%7W%6<1v8h6uppvDQPw1Z))CLX2b z>8Nbq1XUAHC6@i{Qq4uBeogEnmhFnD&eC!dmk`VSGP8d3bi4;t7wPyWE+v-xO;4#l zqvgv{S^qLs6ThbAX8bpaVad-_A;W2mhE8DnfUaU){cFHKc1KxO)i zbiB42chI;SD*L&Q>Qy@2ln*7A{?lyV1Rc-JZz{3OKMR%h^QoG+kXZW9+fg}AA3>#k zE>>NF%Je2)s__a`wqvELiB}QJ{(DFDBUGk0^WUto*`7}|Hv8jCjklq)|9(KF{r*jL zmzJA&53#K8KGj27ZsMaFpFm}O>t@($;)cYseoauBPcu~$x6txdsH{&rjXP=_k4pWR z^1d3I@~d_HA*#bvN1(Dk>8d6kujP|vgNDiRTeZ z{rpAsaa5*%Qpa1SYT`02e+8BHvqsg#8?<~QD$Dy!)x_I~<+wEc=T2fd5A9Puj>_^) zY>lb+@d{#TuP>^uL}mR={F=sQ``*-e4J!NZeN_{0)c7;iZK%x8 z#NQIjdiCYDu%lexB z_z7aEf3v-1TK)zq?fE^`O{i?&R*iqq_*Yb>KaR@&I(xi5|MO9qJ`R=byiD~9RMyXw zch%UG_t5eBst(k06DMe#gvxf0R5kG!Vp&gfzPnDxccQZ0(^O3y*771$rn^bYO?;P@ zoBc6g5)c>6+Qb3Xl=SgtqB z{C?7Mb3Ofw#^(IImstAIgQ~~0+{D!yo9mY|CfN1WK=o`?>dVAUiDf^wRBfx}ChnlI zX%C$=?uN?t_E$A=qLwG4vj4}RvOg!OW~%0>`cYXQ6NfZ5;}>c?Q^&ti)x>j&WjSVf z_v`rPeEg8ckLq+!s+xG2mOrn%UIpUZ`y628}nOvb;}KO}tghx2sm7GTl$A zzv*xj?hD`!g1m=~}3oI8Mj!pxPCc^HF!zUZ_lO;(o-k z9apO+X?Y4N?I;74t<<@x{hs@=JQ2v{BJF zIiv4^`gs_@vk$L}mmNhYmbZ8_w%=FP!~?bbY8{@aYU0!1P5F24j-=@P%sY0czjHT2%SWNoCQpBN#Jm%iq3dD3 zA7|o;I{jpw-l=NhT#e2APk-0MydxE0Jn743sG9gjVrdIEqta$?Q#J7&T7H-6-Kz6Z z*}vxdHYR>R%OBKo^ZgbRpZ@L%4-%!02iwiS9Vp=EtK@e|JV{Z@ui@a`)9qK5XdaAb zzqmvjVN&}!v^@{|$+W)qo9oMS=4YjP-S#y3Ubj6GLzsoMM6a7!*dy4U5%PUJu#)GL zJgyRvcc^uJc(Q=C*C#x^h+p4|zT7$?!;>TLL3!90qXKpvXQ-aumL@Y?j&Bbt=Z)#8 z?0XacpL!1}tjjey(WG}V{_l&^!o_r*fIO_ z^kZkKPQM(Lw*9i|YSs5q>Hj`f{X~bG@wXAn`k3*}`=Dn0?Uc(g`=hFPzthD3?$|v2 zSp0YIb?s(3(moEN(mrB>_WGIl3}V^N#;T_uOQ*lb)%Xnim|n>DB;uLQd?$V`?-8aG zoA1EK@!pqwchP)Du#En@A1{!Z?*y9IdtH=>fRAA#RKPFr8ytkga0F`S`*YA4I^lM>Ln%YwfVbd1F!}we z@CTqVjZ?Ttxdav3zyL^qF^~!Q5QNv^O;`ivuo)`gS1`Z-977{H1L{G47znA54r5^= z1mQ;bf1AH=HPfzv)ARUkV%WdR<9C$uI$Ycc^`IgAuk-f(qkMf4mQy=l-(AF#v+sYM zx37|Un%~#{Z}au_;ovv<`V#S{=j$8Ku+#JPITep{!9UB_*ORi|AbI<)hJTf}FOza7nBOJ83IE^Z>s!P4|7pIy?-|$p?s*+f zR%bvxI6YrqM}}Pi{o!gzgkfOv_od<`cb||6PB6ct&QHKc^Xd&kuZ0_-c0Rq^iRXgk z)D!Mj9zY+0hhZ^10jKBNlbn0Y;W>C7-hj8@Kh4AU4da$_u`hY?BoE#pIHt%=CQb>K z1D=GXa0KLw`;R~=9FZ^aU-G}thi3Ah)y{kN4a?aJwey~xAhzOo_6zYa45mR4B5)6s z!g8p9@4;%rJy^(qn_vO#2KnKGePFe8h=Lyfn*_b?LC#uOW0w=2LpmoqQ&@<4wXkD}(S`V#{)<@4o&qN!b z4bZdDv(ScUL$ndv2yKiuM$bmiMw_6q)(Vy{9A{gFLopop(1L5aOW;!I3CrMl_)gi4 zO5WvRT!W2xWmGUMk z`ApZqM%bdr&6zgP7COM?a0PUR9?%E+Ljp_!c_>>S8o)4+9H+v6lIQd`#+$3u&Ug9( z!zAbFf13AnGvii($$$DAz6zQ&V#QP3I{;)p%(Jsy95?N zDO5?!5Bx~((n^rLrSbzLO~B+OiNhB`2`qzdaW*MvDm)J_!VmBx^yl0#0B%-(L4Svs zwl>$J!fbd1E^EiB0IDwI89ZFr-X@4n2NLgD)lkxvz8W5d-@)p}cNL)uj)CNv8~|4< zrS#daOTXQV@3^L-rL_Ge^e6BHEPa-IB*7^YoLO@cCX|m zBo|+6h=aBe50b~vsvBcn1|1<4tP1kuf%OSFiQo$O2L2a$p32Gb^zQ!;`JSF4r<3G+ z`mlC>CaaG1rR4R|yge~I?GfT&jwnS!8v96aK>)VG*KkO=vo8HQybmA1hwu?>g3Vyj z7o7u=$2|a&n_c*WWAiY`4^o|;ueT4w65wCu>rIa1`~st43`|fQs0*emW#~(=19rnz zZMgn`15ge7FGXQiTboDG&G1V*`bT*1GOickFjT|&?OA0A!E7jjJ0Q0MpXZ?het{~e z2DwR4eFfidjAz;K7m&QEk}I_oBuA=HMcb~1YkF|a2`|A~cybBnR(M5u2Nm8|;<@IS z2FGc`g2}Hrlym$r2rCZSd?vJ^PK9332VQ^|VJ~nxC2uAB60QRW`~k8r0>pukf}a`Rh#%d&y%zPx&5|{O|je-h8$aOg{GC@kc@O zk-rU+n^~xWBOpJ-*9zjGcHZR#Vj&4?=U=WQt_I0#oCg_kTtmT?vpTNb`RclCBW}&lTBW!`9o?K7Ex9}ZQE9LZM)$k{ECnQr}DZpOh zzSw`Cuhfc(vFgB?&=dN?ASj_PlRTu0mG<;y9bh!n&OiF!DleRdg zUjVJ(VkoC?+X6TAuz6-NpVh&7mOd4%r5s9N@)5^!3|t5awB0+Qly+gdvk- zc{+T=wSwex46-l6PzXh^MY)}QA~a`zw1xWhxvvT5Lrb_427&)f_6tmB--O^A`gfr~ zNoqvj3|ZiU3gxQCoG)P_OoA+M!3>xKSDkH>gbG>Uf*=$?G0cHH`UD?rRz5{PhfC=j zgpNulROku4VE_z*$?z~d4vS$q*UUl*b-5f~0LkAc4-@*rl`tGqVGevu9q)uit(hK< zLN&OlbD>H}quzyEVJ+|3k zRD;x$ zEcvMiDVK9CE?8CM1BQ6GAKKAIF9Ug*p$o*r)ewESM7tcVj6;QDmDnJ^3HK<)gHrNqxe z1#M_Q{7D-UUW?;1GNjW+#=srQuD0Bpfydj^&fslW3+rGLY=Q6LM`agU4HG)pjHAs= zf*@@~xB=$CFR%}~(?*0O`tLMYN89)qDwZ%GD1CayKGb2>OG00rT_CX13f-Ueh zd<)+}CUt#1l)$_2SNIOfpW}W8RDtBNKRtha-ci~(BybHP`OGJP16tA!E`m(@_&L(g zH?s4I_eUk4_(YI=;xk|ln0(@yO~{=JC9zz`Kuvz*edODPSm+Afm8(!;kTL`nhAAV^ z(J(=AphB^7Jvs~KD0iZF!ve+H&pJRXbcX~;0h5QdJ#D!I#MQTPph7|e?z6*GWx!eV zNsy+DM<+lSiXhYoh0EzHg#pTFRG3GbpATQdHn@&!pQ%tzpZ7Z)hiXyUrtlZq<|24Q z`I$EPJ8W)m^8+gEfS;fq?N4Y3ji9443Kd2x8R$50KqmYJ9)dDuEh=n=EfDNtGY1t` zb?4j-na^036YhSN`@ygP?uAlV21k_`+FX4&3z|SvI3MDmJ#>Vwu<{t6$3XJMr@|PJ zeDNk9w&b0Tfzm2+JHtz`2Ht@!@Ckee@zlG}0|vs?N&-3<5@9GLgXHT?gYhsCra~r| z{Jk^qGnLus4NwA-*Y_Tn5BI_&uoJ2whPG7)dcXikhikz4J;sWIc<2p%VHT9Y{ZI<) z-~;#wDxnIj18f5%C_~Uc;0PQCd1!tWq(crIgKCI5M4N|mp*ftdv_OTHN-MNA#KC3I z5jsH^B_8bwy&(aHLK>97`(XXS^$wVP#`8Irgu3-@N;!UnCt(HbfD=&F(B|7F^i!~& zbAhl)`4i=~vGp9s#Pjebtc7y=@b&OJ9D<57YL=Sb2~@8&8Djg9O@P zQ{_BVxInoO6)sXPL523v0Xi#P(QeR7d6RxuXhk~~vhiM+bB0Yv+ITm(8}5O6j3Ycj z+ZLXOmB6EtC^I-m2qjANC7s6HKT>W)g_yH#cA|S>AJ;yI;bN|LT0>b&?&ZT_+Wryv ziF3t4c#Cy=8xC-eI0{w=o77I6vtTlWp%DH83*ilT8#cg4@Cgj$*cbu}pW*rp9-!?n zhUegUD1(>a52bP$$1}|0*q8(H&v9-6H+Y}}*PdPAF0MJ}L8(&7_2)6TgwLZwI?M#C z9`yq8;DUf+)#q3`lX{17kO?`WT&p||&%%pP!nMj`D2JW!3mk$Hu2JrVhhY&cgBM{A z$EuLdu~`V4lx?W+Jsbe*T-q2kgR7tnc7w_H9n*}@(NGT>!#NNO&7dP(0rAiSdO~mL z4+9|yk|6~~LMlv9u0vgr4L%4$1WKC6SnI*$7cV(4#(EW2!G~a-&wRn;9WN!%_CeoD(1&Cc(Af1Q!&+Y?u!g ziN~iw5N1IM%!LK;Ff4+nz}m%m5Z1$&u(ryk5t$&_|h#3J<_ycwhM# z-3*_@cd!rsfI*x)g~7^URQMB4z|{vSha?yQxljz(!&C4y9EHL37egQ&=D-KA1u9_= zRKf31!a4GDunw~g5DUqW4wE1gZifZ%JiJW5@e2H?9BIh$4wLC41P6VCaFAoyYScur8o~hl`;T#KRzXm^Lkx(4G@7W4t6jQw)o-zWs#rG+0|>th=`H znHUzs6YwH*p>1@78(fzRMDR135XVI*~*28q;d5>zO$Jk)LhC2$LrD{-spSWj%O zW4%Uwz73zl4^To~3Tf1(Fc!wcM3@SNFat{H>*vBT`uZsJ@h2dWzB&nBpbmxim)hJ- zKYI_9)n)x*D;$HX*_VRVoOTD-D%YVx=K1t9V6}>|8bCwn1N~qqq=OHFFdy!NXJHw< z29;d12v(5xe>*yt`o9ycjIruN184ykK^tfb?Vvqe0oKnPZ;%d?U@AD^(S0%23b=B= z%}n;autfQU{r@Q(fJ1O0`@J>9K?jIedZJfD0*r)omo?1z`AFF3Z6?PLFW;4}8o z=kNy{28(TP1eYis(QeQkdcY{ff#$(|@DNnMPAH>oSN>AR%H&!|n5*nXg+I?^zrbhg zTj2!zRw!iO3UxUKgjFK!g?Y+7=>4!zDMf{)unblxZ=%9c>QeZSx)Z9Ew664n@FsP&7T$#qAp1E! zzd~n70NGRKSH$<--|vCh6d{htZG*rc!>HE(y6O4@D|71T6irLg({A{d9Wyk{til-(Ei~$cpl2&CDC(ueger&Z8oD@U@~)*o^#LtTzH<>^O?m=CX*?9_F8+b@6Kj&l6N3K3ZM{bpcZPQ z9-1K>oe|IbLcZfQmoqqv^L%%GIf?t9%r+Rgc-``#9|mBt+0W~D09SDh@$ADbL(a>7 zgGhM>L-7vY#Ud=mCuRt*g^b1vcn$Lrk5x#(RwQCSysK=B@d`f18C=Ez=A<0ayc92k z*XoW8|8?GwLW2XmKz_`fho#Uk|N0Gg-j7SP^;7P=A6bV7c+b*y=lw{G3GhnMcIW*# zGcv%dN86qEW7p^akC)$b=luwJA;9ZE+nx6#X?%dk*Q4jo`*CSPfY+I}JMTxrqyVoA zZFk;}X;TBdzO>zWKa!^VZ|~0gG5=M6y<&IXk9gX8{O-IT3A88EcIW*lH_QKc-FZK} z*#Vjg<+<~$#LWrN)GE)NS0(99|Lxs*Ro27>c=fs7omXWBlbU%tJ$GJ}INEwX8bW_Z zPdtZ}CV||KgZLGfu#P*}fXm-z!;h31o_J#OfZtGaQB7c#It#(4bRdKb;l()^Q= z9B0%#BaK_Q^(XGTI*ze6&EHNt4yXCtng`&<<1}wBb$`R{m!|!m)_jnAp*bPX;91Oq z=6&Zc&etUFMj)D^1==7S9nslzC8fKGAcrFcA7B+WV3XNOx_RH9ayb#H=YJ>B{u!y~ ze_x}WzJy;EQnKR?BYy74Q z)DP4)+VumytBm904irQQAICV*5M7}8ePKx3-$>gJ)HuXZX#XY}f5m*i5BJgEN2V{C zuY>H!g*#CIccB>SpdNw|iY91gT9M&+0Gh|3d437lim!1PS8xq?9^iga9W~Jw;pmSj zjK@UG$3kqyHfSDz`ZtYHo~KN@o8hF?w;KkTS(&E6KJJIZOpo9xv(#3QmrH9GJXGt2E?xbkWp*&(DJjQC~kg0X8MSdm*1Hm znkywmOkGmPdqT}!yrvRlGwrJk~XY%rz zOFmRV8@z{Q=40|lT);(KF&^)c{3v2dky6ftlAYkj!{WHC@o0@-s(+}t$aT=bXnn9~ zeQ-}`o|=wzjm0EP#WcK(`B;c}EH|sjwb*Ff{M5s=kKibd;SA0~<8zWJJD(fe>N?=g z{7g6WFoQ^~^Bs#@S=YOf+e@O+8eYx8cH{M#*hc0=9^}OxD2ECN!hNWQ8mNN?rW@HE z5$Fjwe|t2SWh^FQ3Z`K?Ud2qz!ff*<8H;!DF6Lt)mS8Os%^$71)q301^9XhP!L6@# z!z?Vr3arOQlR)kO)2qE8+=priMKg@VD2y>0@6vi&jdQ(&_l(xe#$!2FV53PO zw_%4lOlp2ZN>Lp4=|bVw^JzZicxY~r)?;b?mF7xHINGBNx}&G*P4+>5MByon#1!-Q z`f-}e{b$#0Y0XyZ^;+??mt!T?U=tF|R&qOb!L85Inyl38v9$h5^S-AdZ9h`$u%2W; zcK|fsZzN_x>#=@>I}V-+75&xo{;O2x`y82q*yTf2)IdGdM?+}+(;UR&EnLAhXdRT+YwI|O zTd%Eke;S{4>!UR2rEyxXEk6@W#<3lG*FO*SI;l=U&be%sP#hKD<}df>ax^qQBn~G~ za2~gV#vR5(;|*!Y8Pd&XpBI^s1=*1k_dxUO2V)dg;2eH~=Dv!KP3zcA_679)5QJuk z#4wD(a%f(xB;h-pL^7^G^Hj9+SPr3RgeGW>NIZ?_%m{KRmYJ30Dy+puBpA)Lb@OeH za5)J-;v6pE&(42z<1XD6(NBWLU5>+hpYNRmY-g|opWrII%l>)0Zk*H$UqzmnHT5tb6nEIPv%9mCWZh zn#c7GZgt*P1CIZSn~$P-T0Nn871hxkt)OF+IzAPHrPzk;(A+K2ysafTh(pl4tt!ym zEs4QGxZ|9f@8XU#-^)0v8&B1|uD^Hut4d*xCz^(&q&{w%Nc))imK4oTkQ}%Vb&cjL zNH!NuU zI#w*2_oCy)n)j0WxS{5+YaT}03TF~)z9ak3}SN{oa zo}e2~cgNRn&zJVkmu64efBbh|dawHG^#3(K-_1jF^L1R^0=_^~juZbvUrY5bB1`z| z8jU5#BMbYKQUc}S>Pnns-!B=V={RnUhJ2@rYCgzbq^vV7<)2?#E|C2Z^kf(2Ik<7W zqg?(Km%y%r$6cl1$34kpvXH`8WQrW5@YR$e4=MUe5N(o0n^s}-nL?X3DQeiHXp`hI z1f8M;DJ4y5Qp%e0q}*#Nky6D}C8e6FK}s#uMqN{%lwcD|N+ZMOOPerHn=omCmS}C- zkP>Fvk@BEvPfADAnUt=kJ1G&SCn=AZ-lRNg9w+4q(~pz^W*{kp%~Pa2W1b^rm>EIF zV6+)a3Y*UqHub`rPFr3zGs!pbrg@8$cg%aF%r^_kMObXu9BY&8ePC9RvKH&G5u35Y zd_>Bp<}*?f&F7@-Gy6$7Xuc-pFpl7;IY!F2<^(CY%;}Aw!|{=hED?B&D@!LrNG@&$AfFn7?R^wrGvExcL^-xGe9( z)eqgv^iMNjhx zDZS03q&#k(Af=xfK*~Tfn3Si?Go(Cgo+o9vi6&*FQ4JfJY^IX(l6jewSIz6B%rtM1 zGRMS{@|Jmrl=sX$QWls+q%1Z|Nm*uAkh0ROCS|QzPs&EKnUt+&8!4*MBdYZ(s?{T^ z`6{Z}vj=<47o>b?4v_MdIYi14bCi^0=37!unD0sX!TdzZX_HLKS#zG0i{>{{E}N^Q zTsJ;a(s7JRGMG%HWHH%D$zgJllE(y)qM8qq-xMUJuqjH)-KIDxB}_?DN*k@&mGb6Z zQYx7$q(nkJ!i}%~-h8EW#rXS?!DJ#Oi^)bx4wH+NJSKpYJ4}93 z3Yx;C6g78~QrwgvrKBlMN?B8$lzUAjQmUA$q*OCCNU3G&kW$YyASJ{!B&D%wN=kFn zl9bk_4Jl!!9Vri*_M~()ok{6xx|0%NdXn;p=}pR`=5bPpIz1c|0X0wHq56yN`cAAe!`NZrdWsliQ$`|HKQVy7}NI7JVkaE-`t_~j<^;0{xT zl10X;zc6 z)~qLGquET#7V{w~+s#f=J~E$>vfJz-Wv}^ylrPNzQob^WNI7DTl5)&^OX_&l&qi}a z<-Ga5`JxT!vrA*sl$7SCB`K{<8&bkdJ5nAr?MdlqI+N1XbSEXksCI-rVtSMEsCk@} zCyeH{%1ASsl(A+UDHF_#q)awbNqNbk!Y^6yku09;Z?kDW|H!TnL|pf zd5e^H%zLEFGYd#rYF3i6+N>pIz1c|0X7eE_yNu>ii`KZvtigyu=7o*#XTcIx@jMGyS#{OI_+%Ug~K2A`|cu`|=yH*=!-VLbbBDW2ecRnZp)n4b}6BGW*HHIEwG^Jx<|A z=sXw!S^R>?R+x);{Dkw+Iz}mwmHl=UMM;!KS(JzBVs(b<2WhS2F=!pP&a0t1LiG_0 z)e>q4)e(9ak61a`f*WQ9tc-Q zZX}mSV}sd5ZpTi1gio*=$Dul-ZhdUJ9Q=K#Z-PnHqf2`piuU|pN4Pq5qqr=auoXM7 z3m;=Q+<79roE)k}Fq)tlTA&r$pglU^VW_^HYH8?v4;#!TavOGF7e2;re2M)y4%Hjf zI$xc?!L9QR=5iA>!_Cgq;Oga#3U@`=%4?hMkU>qjH)rVId@Et}q`hw8`ozVl4co@C#DEeU_ zhF}yXW2%`&&VlM!sitSXf*kt9eW;EHpt{3@Fc=@;3%Gi-Ihbpe3uEyDR6|<=nNyXz z?rcHkQK|lCd!()Nrdn^Rhobd}st=hF)zJh`U@%l)a1`Ex>Ij{L>TQ)`u9WHwsxI8; z*oRX%Z7z_aHQuVTl5jT(t-V*h$;3d$Uy)pq{s&xrtfWd@j|xHTpF`(Sn1umz{qw?A zZ)iAFgCQ1Ya2Dz3`(-92hbc*xg)Kk#`BN4!~1et^|jgH70sE#@aO85g1YNZ&4ETZ*4?8ai)-csJ<3 zAP}l2p&Epe#M}*eIs@~{k&ZbEY3q^Z;r~+C9}S^>0;=y)DwluVw$_clk7ju|#tPLD zOOM)U2Gw{Og?Oxk4i2S9S*T7^Q)pfHV553Xqp$)AaCIx(`qPT}I5r7aPvIz+RS!l7 zn^Xrz>%&#sB^ZBH-{oPhzgc~k8h7$|;MSMNbNNFo&HvwZUJ|%`7^;I2RDfgHSOnFT za`iAOvfoe_L52V4`qyCoFVr+58)Glr`spMtYYnxeE5f=eR6`xqLok|~c4Svf#7tDV z>%Z$pgm5`+ortP;|9%~Vrd-$DOeE8;mw%oAJI}HIU!giQ7ZAh&shV)>xZ4fzuj5u7 zt?AI3UUBPs=WJm94SMgT-W&R15T3^U;YmDY#*p#`Qr8pt zvvn`Dj=Uy*=Gb;J5>NT--!x$#NcAu@VL2K1@==od2*xlof|U2oGExqh-$-%w<}+ue zgeRH=`aM9(a~Ot+n1n(l{6fhlXlc|f$!?qO(W%+)`PMp9Q_~4ai`;VD8fWx?o8}Lmy^`%^G(;`~WB5oZ@D6hG=btMjd}sE>Q1b?<`N;!$k4dzdM$X1CzEg+8&8tm4A69c>Q_qLh zoLJ3+eG{7hdIS06{4TxAcMUX`RWxr^W<&E=3(jM#9Z^PeSLG5e!_6l>xxhb{G>Y#y z(OgeC56$z`yiL_T)7;IJ`J224qVOhS;pP|p-n=0<&&ADS>EZFdLZsoV-IJx}15(zQ zt-L3;<8vIv3H*f9CYki%Dc%dB^COPM#^QdP$t~E8Jvf4+IE`dn#|^x}b2}Rz&rJaY zq68*jBD(VTOJAtIgRAQq>|=X{Q1dM*SI@KN4<3(2=fzMzZ`}XS`+4d4oT#7Y`g-c` zHAD;OT#9nDexLe&uHUzX%j);-HaF|%={$(8pVyGfx7yDe#m~5Y-WD#qe%>xFtB?14 z{XF&cTt6>_%hC|)@3k@N=XF5ZeqI9qC+gdY`gN{v=lXY{{NJDH->Hx1`gfbTEb8CM zr%?Ycb-ykh{Vvz9Ysh8w>vYaNN!^cAU(WU8KId}ke%xQ(Z&QD51Y+=K`fZi+@|^{p zqp23^pe`Cf{kcv^-JeU{e^VcBEM9>6a-u$*+)6)gCH=V7*oYnGBl6Go@9v?GR~F@P zpQ%IEgZg`gpgx~;Fr7%(|BK}E!=^X+BnHFP|91Vtjr^ahSEK%62B?21HBlG!O(RlL z_ZvsjejD#$J{G{$qg6jrPT>cfHp%2!ROCCa8fqeKKQoE{JC2+6H(g!NoAoyj2eL0@ zPLO}E|5+*MZ~LF>gWhWYv$Xn@aQ)A1T>g9g&UOp@{mxOO`kk^0Yq0?vk-8sRc_H8D zxDPc@6RG>9>YENTf3{!xGq*nt^-1N#BEM6lsBike**{H3A5>EJPe;;TfmK+GwEfh3 z16U6a^;c8(Q%BNXg-vk%RMkk5D)dRKqPnR`rtP(d%aXSKXl?qU zA!vjqP+v85e{}`zHCSghlL^=g^<$Uk_xEErkQ=cXsr$3l3eayw0~12J{;m4Bi%mSa z66*81esA%Dj31*k%0hJ^tI!9og*w(BR{f{?P#;*-_mzEc{og}eRv%bW_kU{_xq1J$ z1OML{t{?mwmuEoz;he0EXNA0gz72&*?zLCC-*9SV^JU3^^-6B zK|eWd|Je15AKmNk7yrBWhuOq=b+8;Ou-0rKHz6`J`{Ou+%Sgz=I5zrZV}BDTk&Fwt zj6T`{|?g&Z9B{Cy@+Sx3drX4XWFD5~|}IPM@hW67dxR z`M$4)P`-OxVj5=RamG@0enK}7JBjaAoqy1spUa(puo>T#VMv6|g%QJdUF!2*g!3KL z8S&70RYLi`(fL%u(HT*JenZG-5rYW`r$0UlV=)1drP$}kkI*^1bROB4alNA7@68LJ zUX|l@(0O6YqXl%n3wK_&7%oqMJ3m|CTy6(9pIqm^sDVVd^PXf|KpS7-3@#&lA%73f zETWCP^eGC%owqAA9rf0rb04V&^|AEy!x6|>qs~wGd-K)fI0m->owBlq2hSoJuFkZp ze_J4%|2!GLR|hwgF-p~#9F7r~1J$QiUFu}$JQ@*j=h1L=sa?HXSC7)2SL5zHtd~MN zJcR8~eLQ!*1Xq8)CfoiHxO(%)xU4$Xu3mLG+hEmyO~h9SXZzV13HS)AqgxM2Y%f(e z+SSQ(^Rv9wVl2fns1By;Dpo=jsJ^0i)?X*u)x#_2vA>C~=6O=;@)?x+<_*?9 zNRdFlVx%-R!%3NJvX*2V4cSe3QXbql5)!YNXpOV7g9!- z_Zv&fI5UBi7tLf+rka;XdD*;5%IoGJDPNmwq})^4uM{a|OgT~-nXExPFUW3kl9Jox zCFM?2fRsX}2q||Poy%DY-tenIN-a}|lzOHCDIumIDUD5YQaYQiq;xk~*@j3x)0LD6 z^Drs;R~*rZ#bPrw1KU-^U^HGdlSz5o1ZAQ>hmPok7cmLb%r0^de!?%fh)jHs-G#g1 z>i^`+FoeD7v7Imp}yKt7Z=RY|FCYLQYG_0YgH zCYzxpTA?k%@c=rZyNMus;~B(YjG02pbhChzW#$7?)?qz%n2$;M412H_NAVp_;2bW2 z#m^}+l9CI#5rBLsZ>o|~-P9%Pp(&c7C0d~^9zrK{MGw=9?2Vxqi81Cyaxz{ruaPtG zhM7Z39Nxxzn1@AJjCI(E53wB|na{{Q*o*x*h!eO9A9As;Bmt&8DRogFO-)Nu+TtN} zG+oIE^g?e$;b}}ZFOjmqd_c-NtjBiq5hh!9Z~|v=78l{=<~@O6bVCeAo3W(4 zXx=4duGvIx#&)xll+UmSU*iyx;6n?(FQp%%FvDylWw$v*`miIf-!Ae~e1<(}na{5+ z8HSFgGbud~feB^`ITg#yDsnY8n=Pd5z)l=60qj#t0Te`6bi;5&V-{lZD}KWb_%Mfk zfmmFI54qSEm;5M>S_r{Ih(JFxkdz^a#y2>MACZhJ@If`&@}LNc<5@&w5tiat_)wgE ze5r^ksE-gdL}T>F06c|gypN^$7<+ICM{pPYgu4-8hLa;O5mPY>u~>qo*a9E!FUsqK z;fTfsTt#jA5_QoE_hSO4Vm&rs7xv&Pe7JJAUje=}3!)f`qZyi`EyB>rbRngi=|Rc} zL}R7dPRc%fiNod$c@`IqkCYsNJnyK0%80}O48mYcHFL;VBw!ED!iPyExDCqECkjDp zL}19hyass9RH?}8g$Q$jyo559{K}CPQ5jY682V!%M&NbCVxCz_%4)Njl$~Y|DF@6^ zQXZ_#^MzUF0_ns4D!dC=Va5`0LQ$9oE&-~uYm=kG>cgkUJ5u>-sDHICw;1-$MUj%a*lz9x^rXKF3ve$Wwum37}wyt#A|nj+v98a zkmV}h<0yo?P|GwRCB!r$rK#CUevVM~dBZRbFJTvwaRWXSVSlwa9yE`V@+1b}DRZ6l ze7sk%1-tMO60sKt@fD8XD84tz>*hRVZufkrHg$l40n9Xk3L48R&awMs?K0 zR5OQ+#aq~e8;GWVJ_oVbi=(&(A4<_@uZY$N!}Ey7n`Rri6Z_%Q|Ivq!#X>B_J{-U` z_)snreMa;`e?-BDT3P5nqXQ!F7<|ag7(fv z@q=Qhi(rHz8f&l~iP(#bj1@>0YNcY{q$9M!8%(kEn}?+}y@2BxMPfVmW*$$CyPGbiq=5 zilg`qKD1^0yB(r10SkGOkh$;w$5A_-Q ziN$%`Ko-Wrvm!fk;7(JJl$xdvSr^R_hAxQ3d@R60e1#M6p#@{)VR#3daT&g%e9jmH zms+M78HRosfN6LM^UZ3~hb)YLOLkL>tb=+cn3NU>Ll;D#k9nMwsb)GUGZBl0ILf&C zWh`afYZ*4<9ByD%Ngf9Vl=6Fuj7F2v{C^dmw;9bnad@MHWNZDYvk&^jKzZ_&v)3nZnaDNU9^ zIa7_4+NLfk_0bTG(F`q2D^l(^;iNoh+LIm7$#fy5o9RJHql7w_lp(?Ll;C~Jf>m^mSQ=4c=od2r=&b| zh1;V)2H+_?gXa;AahQq)Sc=uyj1RE~2jIiY6cLe6kc=zv`S^a}+%i7Yptev5igA9s z;&_|$fGx!_CZG9!xXh5t*&6L?n=xYi6?L%x)%CBv0LCR5^J|4R2uBBWGF`~-h{SmOv+7&_v+G%>u4CPZ z@xdneXV$aMRFwG&Xo_2{WBm-{et)lCb&V2?CBoHHj$zE|HN;^q=3@!su?lOj2?^MN zUHA-%*pGww2CAJb^-V)kb(3SwTcqkH`^-O5H~G#u#+5ON@vcPt2Jbz_80WIBLvgtJ z$*P?!u5R*F#=zt^bCvv8)JaZayzD!Ck3U-rJ71MxJTGyh1P!4~ zx96w-cd2uHyT0-NTYclSb&XZ9Q|G;P^^E^%b&DCdP#xdjt=~)kI|DMII7;9ilrm*W zDUbV59ko!$)FY*lX--N@)0&hv2tzwOfQL*+QaYQiq;xkCr1ZqY=w%)y`{GFq!Vo-z zXE6*TObj^zFX9cng?I2C7GM$9;~%ZpyPTg~fwg7>xe0DQtDCoaCWn9Cs++Is=BY;I z^3PMPkjFnC)y+S3^G!9kRH6d?ZZ=;ug8jA$=I_lHz14Z4ZXT$c&-qk3#(eO5^Ev;w z=W9mh=C#Kk&C~3imwBiG{`r`73-bQOkA?j6EW6yrdkStoWmm>=dm^U)&F4+J`H{Ce zFOrwbD~Zx5iwcHA)1Gi>*yC_8`yk9IK?p+8&AdelyQ?Wyk*l%Uj9`A7j5A%Bw-$j3 zCV`X>%??t|;{vi}W*QiBA{UC9Vq|gjML+B_UKVbL-*6d0jN1gGhv~)mOK(J(>!i5z z&!5T8TpH*c=Q74z;PWA2^oOMjx*{W=mwdR>j3p%z`|uUMMytI19Il#3=9D~!{>&wj zpKuyA3bO76`>-De@ijd9b(xR_+0lg0Vp9|=!t;PQ%*A{xMi=^Lk+=pQ>e2TK!3abn z0Xy-9DG(&f>0av5R8UsjOJ*E2Tgmj2QKqwxrQ6?A&Nei=na$(nUNJaOm4CO z3ZXEHnqp*eR6u0}p$_UJ1Px7NG7LKBxTFhWT^AadtEAkZ59ULzxr{ksuo*$hIsAqp z^Lf4T8TQ~3uHc%fynxREBFq+YH@?A9bffPQfp2gWXK)rj(NB@Q9Ct5(!X}86rf7zi zxF6wo01u%fBG40$nZD!`Nay44MJ8lHc9WBo+{l9>D2n0;M19kflwRl!k8Nps#AfhI zBxL~o0O`nnz7)^q7eY#ScE<1#ZO)LtqD~I3$4tyd`#gNNqB+~VHdv1h*n}+zWjojy zL+})~V;6RtL!=zRQPj>ye+Uaq>pS^ght37x72VAaQnuu0EE^3A@Ou!6CsChmZm_n! zYnQ5cBdIR1ADK92cG6vz06pnqSUKU_4mp5XVO ziFuvv`79h~A53C5_>KFTeFgO3xJ?9ji>BbM=E)KhPs*r_ev{c|PC@R>y#Dyc{6NZe z+`zAF8|6wizbN(#Y`D`DAPb@x zN}{wWOG_#H?;tTU7c^>)_ z&VrmMj(boJ_u_dB$1Hq+LpY8yrFc%z3bXM8^hLf3Ymk7g_zesuc>NKDN6T_d1)HJ8 z5I%VKvVB8SG(#H<#?yEeufvBEY}DSmyf&yfu<%| z3&9A%w5rT&!fS{{0=|WJAFmlIpgF=#BpHo~h(`i^)yOs^roGF41j@1fz85u73w6vh zY@46Ob>>dVcWeXYlsQfQf@`>rT5KCb@GK@^5~g4pW+TodlGpGI+sdKXmEA9dZH#=$ zw&5_2;VkO29SA{FGn>!9=!60n;q7G{2<6cWeeonlV+xNy6A@?cp9TI7B3*|nBV&xCzi?_BNm-x;9dmbWyE0#mSHotU=Q}CO~A_fPMgrDGDV!RA_ z(H!CEj7W^bG%Q9umO&>*7>eic33lVbE8HIa5QQNaisul67cdR;5sy_!z*Zz;KXj6X z>39VnqkJIS6nIIzA1{%d`186ZKzn(~yj}?|@e$U?HD#ZhkJL@~v%B*D-4S7)CuO*K ziIlq(GCxy2Zmz=CSwY;CM^fF7Oeub7VRl$ec29ZZCNt3eryJ`*6R?o#_Kx% zXusa=pWkdhTx-4ppmklv5oFx{c^qx|ciT@7=DR@a%e23)eRb`lyZv$Phr9E^|Iz-q z_QkaiezX1Wdi;L_gqW_RbT<*?zhZxUac;JYxV>NQ-#7n9_sjW+c@k%0*fxm%Gds#b z-vd=l1SuZxebGgUGiiVR_kJ!zHuiN<&!~=UC|crvw1w)*j>2fDery7EVi!Kar#N6T zWas`6j8Kd=o5%!wWK{R{Q>4$q?GbE3Nl9Jj^?uqN%_ed)wqPrEz}0vCl*H9SHCqq{S(z~4Mr%M!PRTMpUWN1C{lG=_h2v5)@5~d zRHOOM5YqhPb=}n2v{x~Eo0^ zdAK^LRk>UZwNaQco+3~^ROx7XlJW?8p&tf8HBqI8sYgl!G(=;lUg{|G7AbQv4-3ur zr2L4V@ryY}x_YYjGNx1=HE_(ReyUUs;l6$AWS{m@agMRh}0Vlz}fRCPl|bwexTK2$>ulSCdz`a3ut0@V!-K|}nR z`k|^9S_`3Qh^9t$LziQ%Sx;`l7NdHi%diIPvB{{O=zXY%`Up1fld=R$vC0G%Vm3^E%%!GWH5S|NK%HG5v070x!|pxGJf+u zDNC>nY3ukM;Q!<|^N-f`b9Fvbj}J{{Ki}2;%#oS>L;TtCq8nN0&){4(KJU=@(N&zy z?w5KTNn=RAH+~e7n|&bstH+TJv2B&VH=eYyIP>zb8C$R$dvF9taT>|EjvHta==T6A z&tVuQViMx88S40@!yk=P72^70xRr6LP;TD@tmhQ+D5-1 zbsg1F{S-TUS;!G9}b>Bc+E)B2Pl&RsXDUs(z-W`%f7E+MbU6S?n^OkaEt9FV4O&W*`>xu@oE3r=(mn z|I9inKE4lCLq$|SMgHpgDXN(wx9g_duA6eZZVJca>2u$%n?nDbv4z`pQ~vR~DXN)r zyKc(AzHUly`Z6*IgE7_2A!Ct%Jva*=CY9hexLqfO;~^ZYz8=f-g8$QXQW)U)cdnCi zgZ`Q4^V>|`YQ2<8{LBsbaJya#>)x3Ual2j$W5GH9b@ftIC*@OohTHX0Zr4lsPpFro znkjYgf2nTDyBqj>_x#VgDYxsT@Vq45u9tGVUJCC6<^%pG)=ObT(o2uxh{1o?Psz>x zWghk~^N@K{>ZvqjceM)=upbBU4ZL)I=}F0GGLyotSqi4BdcrPB3Z@8o!tO%~4o!Q) zVdE4W_Vt9ryD2yv>j{TiQ*cPtlR$G1DNKz|QHGRqrUEGyO=VJo%zdP=`A<=klscv! zDGf{rDGg0yQkt6Pq_i^klhW3Nlk$Lhh?EYd6DeIxH&S|-NKzg)y-4X}9wVi%d6Ja= zCW@3nW(X-yo1x^hc-{;rWh6#njCp|^hY5HQQ}7aA#w&OYGcX%-5Q{jxZQdniF6Lo@ zd7qReSc+v>ft6-8xdt1|Hd1z)k4f2W_==CA-N!^~E&$4-#lwPI}DUX@Hq&#W*lM-bHkutp95i2(a@c%BN|HHF%6H}@DW}Yjr2K4t zA?1uYN6H2BD=C-E6;iI58>Dy~gOv0pBPp3pR#LK?oTTJ7c}dA(PSni ztI1AEPLrFIye1zhcbWpE6f#9fxyuwICD7bMN-0x@lyas5DHTm+Qi9BVq*OOGNvUn> zl2YFUlM-qgk6O{654t)y%-J4o4OJ|^W;^BF0L=5tc^nf;_3 zG+&c)*nC4uk~vPwcjhE1r_7I}{A_+9<%~H;$_4W)DVNL@Qm&aBq+~75@i`R2-6)4D zsErV`KpS*6T}kO~B1m}*1F#0`u?wHzAP(Uae#RwSMfwtcSxCu&T*!-j$ZrahccYXk zLrOVQfvkieR6{UA(A113Ma2>-Bhoxf_QIp)aZ;Wz{m3W`GEb2*0x=k6#*p%Y8BfYY zGl`TbW*RBe%`2q5W@eBw%giR_O%q4T+vZ(T=9>AWEHv+vvc$xbvfO+?$||#llyznU zDVt0JDO=4pQg)bKqhIxqgjE zX=0j@(!#VN<$lwalyLI^DG!+rq;xV}Na<#JkP>MgCZ(6@L&{^OFDXx&7*a-=F{Hd; z#*;G9Od@59nMTTV^9m`inHi+aGWRf_Qc9UJq?9uiNU3NllX9P_PD)Kvo0PhyJ}JQ_ zl$1uM2`SA?3sPE{`$=hQ!by3+JVZ(d(}|QWrW+|eOe84}n_i^!F^`eb*E~r|fAcIU z&zs@o2*j9Cq>M2ykn*CLOv*Gfos`$i3{qy9*`&N_;z)Vhyi3YlGoO@&Sb}(bfK_G< zDeKGzQZ|{bq-?`Zd}JAg&O{&k)+5x(M+0rSl4-I@;hd zjKpm7CK-#j&3oirEWrC%f|W?b56H+MLndTFcI3jHD1f_A8+A|*!3aeYG&8Npa6E~z zh{Ia!!)avQ&-w_|M|(tJ0_GzD$8iOBG0;&R9nc@sFdrWq?+5M&3mOJ+Y?<%B_X4~z z$8wUY13Wz9^`taAbI0y>vjWav%BsEEe`PV zkyB_hP2U?|B!K#Zyyn(U;CgoVy-#WD_no565&&-#_pjemdr3gb(%Fk#&u+hWkai9- zTVwzAK}!R?{ycyZw3!O##clQf9rbAI_jw-%c)Yq^Yub7|S!s{u_L;dqb(ew;1f+~3 zZs2;|Z)j407fN=gt-mMqxc~8HY~pX1`!2v^cf|Y3t}k>VAZ6U|POjJE4NvC&$uQdb zeM8R&c&*8q{5|?R6E6mM^Z5P!`FTCxS##vmOW*}^d$q%hg7k_4<3(RLkd`AYbHq{XI!_^QF8#wSxVxQ&7Ep-h2E# zbL{#~6v!PxTYpq*xbtkf`XgRJ>eb_J=se0gFR1DncujckHzWC_8KHG0T2GP-MWFK& zit05&^N);xCU3BOM`wHkO}{n>(06P?XDl+nK!-a0jQpg)(hRi^IH&J4%Vu{ z)%Wp=`s)DeJj1HP5;vD|GiXq|c3-xuIE^z<4V(mSqjiF=E|qGcYklfi+)7>a4cvYk zQm<$IjJ8|PdYH>ca1`G{=XbsV9hAt5?5K&_P#qt4KHDGp3{bM(%T$$q3gWOCI{2Zw zMeh8%(Oed<9PdMTtg$Q#SC1={HAW9Y8^LJS1IIH@@gm~V^PC_k6X!F4tFPn*u)T-Q z*V`N_ieD3<(0WF9eq&c>%8jR7VqYH5YZw95%Gm>-=~Ru&aP@M$dHksu zkBLydMXhsE-80!^(yn*!V~bBbnM#&q8>t_+6St45M|yZW08c^>zgjq zRvjKMoxe_*s{`rk^0+!YuKvz3K4Ut+w`yvAi?|Kc+r-W4>S%qZ>gwqHGrw0?$DOCz z)zgXOz?9Bct^Lo3&;i=#{4@KTYq{NevyuD|+wn*HoyFL9{4@KV4{*Ep*niaiZi+$$S>iOuvn5*aG<8r!lf4;8If5Lhucm8nB^2L5zZZ8ng&@rZD z#4sjs9;%n3`iDB;J+mb5k5cTv!_|X};d0~B{C`$nZ)7#u$r`AI+Nf_rNYPI37>q*| zzK>(ro{h)7cl!+`C8-j>AE9&k9HBCwyDCtBDh%403`cuBfV!fNx(!VHjdC9@8)rs&S=ScRH|NxjNs6s11+r zMAaQn;(P2@s1x$Pc^-%Ee76om3{;QquR0&WpRIErm-pt!Qxf_AE4T)xe*DklD!d0u zqpYb!ipP6X+O|&i_kC)17<-eefirFht2`Y%rd}Gk6Ze;f^bh;j;YE@nv^h`53o5 z10TxpnW=#8=!rh)i_L~fH(q`eg2t}{(G+gnI-JWL@kis=!?`{NA7B->VF$jzerWvq z2$FFQ7w{{zuH21B_h!dULizqv-MKiUdT*-rHZnW=(HM)#n2MM1GUj6;;;|enuo7#r z0o$eDnrbF@Hfv_U)5ne2uhrVpvwzQ0$eFjEkZ30X`D zvOH>|9=z(j7ut|*`K-l~mszuQh5Z$L1y?76qYd5>&V!{vg6fK>}j;Rr-7U^@iwedb26(;kl<_ykuG z=VR;zTd@-#V-Nnv`6Y6(eMJ!JAg~~RB9i!yIfo0lh^z47CBAERBK7&VRF_%j)2NBs zsE=S1N;X7eG(j_jp&`$u&bKlLu}Bxs`A(Pd*~bHL3xh-Xo$aAovk~BF@&;fm-+M2h zHGPNnh%)W??s^FE^t}?0$amuB*oPz>$0?jP7f88;%ShmJei>KcL(V|PE|7>bsK8^b zgqfHHkMGhv2t*}Z=W{4Y>}yIrwpH@zUd|hd=P?Rn@gf#tF}!rSy<|kvmmY+nh(;*d zqZ1+!!)vZO!-@C`uHJA=UTU{sw~5I~{~1#-4bw3n3$X$#u@)Pk`bj(B>L=~y@|W0; zZ%h*TElwgCXK@a1@f=*ib@*_G_o@$xyhm@qtH$;aeR%H;fII(*$LlScPCs8{| z^@~gX`C!WJXvyPMm zxOtnua`_V2gz(G}!6Gz(BufQl?=xDwJTq5%-z4 zq(ox8vLd&~J@f^~LB|(1Lu2MjKeegIuKJ%I3#`7EUUg!dk&s;62 z9(hZ&K^QzYax{lT~YG;d6rah{U7N1lND$yg52glMnI5c@H3l z&#=y;6PS(dBmS$-bpW+ekyOlI=UIc+IguNAkq=Ffy55-TB|n5m&BL3OiLPkJh*V;)q)XcauZLo*{QvLOd*qOPe=Hb4lPBOINf<0Pstox~gMSLnP+ zr*Q_C^*Wv6JgC@-{fOglUX2adgU{hZ3}WHV7ZS#2Z5*Z|7McXy1mWlm)vHg3j3zUg z8+lO}fpF(3TgYWsk2|z4HLnqg$KmQ{$MBha0pra?ax$i34q~BN;9g$7Uy#H$sD+(xz8J?^6g(&gZ;kO?{QXV1e}pW8M;>iT|d zXt#%I{B=WjMBowh!835j?+()Uyowm;{8DjP0PhL*UlESZaOb&5d!Cv|UbAQlf0z}1~!z~!X~;=Q1HauFtu=lnnf?a=uE zzCsM2ebt@U`LUuAlb_>;P`$JxP`w$|Ykvc=cneE0lFz*A435QXn1y9nf%VvE6389+ z*r+byKI}KHKH*8)$v6j{kK!1Q=>mdytyNz?k^O;FID^XwFXFFPA5)a=HxhV{>AVjr zL{5{(#Mn`L0v(W{G4=sYAkDA*h=@gxS~ zb-8eZwPIkE^iHO?LLjR>vviEb=q`iyo1($ zk9IcNr>wo+uD@jMU9@$7Ss%~G=pXM{yZunw`h90;r~H1}bX&ZPZT*ig-r9H4*3a*v zt;b)6wr-zDTaT|UZ9SeOyFQXO!%p5QyZ(9F`g;8jiD=X2~^-;8S|FvoB_YI}3pAV~+~&$;#>|MBq5;r4iF>wZFM>-mkRt@{h7 zt^Z#`n~#w92yH!%puzdPQsfZYdVJwS{O^Ziv~$r;pso9P#jZa?o81!c9ol-{qn^r_ z^13dht=naN+W+&rXzTY3rLFhFA=>)=<7w;hoVMFfqpkb7ZteNB^}fy3&i{DM(AMMZ z%==Nlx6m{G`07B+TOGN`+u0WUjMwbb-Qu2_5KdG>tku_aYxeD`{RAudVXT; z`Yp6|ztgOJg0>!49BsXi&f3pkq8&*4hW-4d=lqX9_k;fX&-=Xp`MHa>9!G83x}S2^ z4yUcZs}XHIj`6hhdbFag$1{VrUXL!;j{(&pN{Y{KU}K>z&uyk8*oGKZR)PeoxcZ^B+W8k1sd34qz*Xt2PTd)5!wDovuTl;0&`g=pIy^(gx5pS7#d*8RmWKRa!w;^jO zBUvhCtWoxTpa1Lae7@bMbI&l`)!py$_jq_d-shSbvz+BR*Y&wR-|yGHK7?)EUyIn* z@AH&>eXM={2lglWd>q?)+&bCUr|#$deR{C1kLR%Mw`@B<+j^h=z`oxiw)OKrwe6j3 z>+jlR+hzNE|K43}>+3?<*5CUJ+xmUO*j6rMTffg>w)Oj7v(HD_*9SKBem>f^i?OY* zi(y-jPi3}se{8VN*JfLf$4=YsVxK?6w*KF1Z0q;%4DkLwBiPpdB#>==zfiuJB-%&D z=Uktd>kIok`@U48RbRlJ{x6QpkNtbyQP=;adioP^eL0cb{yY1#RKIsMeAV%{VLNsj z*XQ#q+v4i_r?@R=p?;r})4W_iS3odz54d$nv=)`tC2{qAw?2t_Y()Ju;@<~W;~M8~ zXiY8i`Z^t)!}|7pxjq@Uj$+`gh+{5pD;g9XcQa|I7ZVszrF8gnu8E>!ngZmDV2<^-_t} zACuZ#vuK6BW)8U$o1lKFZd}XgiAd~*dZv8)rczI(#tqjum6ZOd>O6mH!L2Kk)IO7`&;l4Z%HQQV5bGlJ~(*>?= ziR*LHI?wSb>9>0v&8i|y8b7-~WHzPvrid zNcKGmt$*r{H`QCDb@1HrW-e~4pTzfgQ~liTcymNCu3sPq`w+x2NG(Jn8Zr0^@kV{z z5qJ%K5r=E|kG>_2QBuLbf64!N*7Y-~zquRSI-UP*f0MgE{ExrY_vCupeUH0~@wX3y zhrjb7grkpg`i=Xb{QsV$_C?)n+`{kc%hNOE-#=BF`~Uv_eesF)P3h#k3aX(xYN8FERZzJkZ<3T`i*_xU;X=-{9osh6h;1yz9!%IKb?2}VBC47>l@SSz7%ft@z&$4 zb!+rk->7fO_wm;_h=ls4)Gwue%;RwTA^(0Rx1V*N_wR42!nbaQ*64{DW(g@V*p8hz zhYRrSLu$)&%eODjJ#KE?&aL(-6%C@cjc%qdDI+irCrrUyN$XqEcoyyNZq~o##<$#R zA5(jt$CA{(B{yE>&+cDJ?6}+iI5vzP0rfAr$H_fERAjxKJ|_42(DSP}RP(zo^&k72 z+{gXJRRUTkS7$&zm@2i@tqE?(cGalNygE zZa?D2q3QS6ek8FzqyZfBi|g<4f874=J|6dYyT8MK9G>gPagTRmeK`6%WC!<&d~bG< zKS4da;`(je{rPwG(YW8=_0zbY@9KB1Z^rj{L3M2ZagP3d%AQm=?z3^{wf_A!u8!z3 zvHqLTKyO{qzYoX#{_geS-(TbZy!v1F+qmc1X*`^W1nAkv#tD+c|aBOJmZ-|Mzy^@At>cuMfxf=V*+rd*1#2bLg!} zsNY7%E6L!FzqKy+{cz_Uo~S?e&Myow)c8fQu}c(@bwIx_}lt%J{Xq8b00r1 zv3{IR!@bwnlG=~6fv@Kf=imJ}Z0ow$?e^oG;Qy z66?o#mCw^=_t-sIp;{=cK_TRXEoDFQ};q$H^ z=g@~)ynSZ$Tj=`uh_T-P@A`2zupPk1liH6H%hw0;^@;W4gpKoFA5LmNP8?sa$HVpG zTwq(zFV~NgW4!nGcl|gqZ0qlE{WxVm^8Ws}+m92<|JToR{W#&aomf9kB%jaE*C*DG z6EnfvFXj4iPOz=-@A`29qrClEx7&{s&i~i_l~_N{t9)M9yz5C}s zs~;zr@0W$Y|F7!DiQ)U}@k^{9XD6T6G^TH{W$q2dHa)GKh6hi>;3R{ z`*Ei6|MmB~ew-M#_4;%DI5|G?e%|%t1hcLC!}a5Y+2@nmkJHKizw5^t%(mV?66?na zo9x|RyMCNlw)OsTyZtz+r+DxGKdT?7EZ+FT)qm!5TT}y*82HzLR`I~E!xqFrF~p;)?liug@ej z&buCUn#9I=NAS6qaJ$#Fmh*qt!gn0}Cbs>@!E5~c72Iz9r4l1C8ezPYue)CrAP>GG>()g{@@EylfGb8&A(~nH*_~XTV z?NTH(4q0Q6#f?9{eiFcmKq&mj3-#k;gW)@FNGC0&QPxx-LlB1H_z>d}g@opP_noJt zHV0IXp+3U!G@6)ZWDA62Fos|#IPGO@HuF|sJ{DmGV$5oCEjC~~b|Nq<0H9j{EE-SZ#Py(*MFR{8@BwsTR3$Ot@ z%q~*=$HBUJ;u5;9P?iH0|N34eAM+irsv?N`5rd%dcdgL_Q_V^;2Aa381WKVAYM?GO zPH;Lt#cV9W0sMlK(4djhaO1X{al5zbwa|P-Bd`Q+e*c8#V^bf_C8O&^nrr13oPoxz z|Jn1cXifPQW;N;NU(x#VvGARTC5~;)Bkns7i`Jm;7UboBT`F0wKh86rmhG&_X6_{) zL>`lul>A25vkIdq%Aq3M{Ni=E-N1yCgRvkF@Bi@c2hw=`{m@+1$Dlc?H6N9yaKiHd z`HuV3*uO};k0?yRG<=3=EWjeHKn&Jl1HM5lwqqxLMjSN%RM8?{Zf=!a!QOdQijle= zuK87TExZbR=LMO_w&s_(0$nF{{kN_kz|F^ag5ChlJMkZV4pH7ZrpEPOg~lnSpTa%? zIZ+TAx2S%x7tjN*p)Zaj`&7OTx^AeR&V=SYNHL9Ti^vCE_vnsDe1Wy*6nP$(%~ewK zYo(pe?*NTQegfgpye^TLi_ftVu8&yPmyY8Sbe%~D>ZK71%?lZhm(dd|5Mwl^){U$E ziQ92Fj#D^`q|QI(dtFrXIz-@Ccs@;d9vc7t5;qTon?F?Z#^gsqBz69nIehJn=6Ah( zmEY?ck0spvuKx2*Xg-o8&5z@`y?G=;>3{5jNX8au{)i}Oo=*>BW^+R0_BDT&yPg-x zZH=dmf*ZHLncG`%ef&OS%r#ElfBd|gAI;4ln&|c9Tj;ygd^;Ln|1#V>331%^oexOk z?6V;VnioU!L1>ZA;?e=3< z;u@NNKW05Xme_o3n)jj#s-XsI;W4y==E2Z-@l{xZwb0mc@tr4O1@k2Abn_)Jw!bn$ zjphy!U7wr}%>f|3^G+AkeAA36FAI$`-wlm1zt#B)D>BbV2&y8X>+iey_#U&5)Vv@X zpI#iLP#Kz6VKl}YH!np(^9xsI{+3YlBKhCW?^1=HiE5@Msrg=#(ogw5U#B_QMDy63 zgPZrp6ZFUVDu17+GT1vm4rGB4xW!a7ApZti=%RhPkR;>rH8b4qc zv@XCE+|7Kh_dx3dltu%DLF)uWU@(S2>jlifYOI0ggH39mxSO}8%pUK&HJYzRG~dH- zaPtOfoL@E6GMYPH?#!#s9KXkSpE=2VKM2FKh`^h;-F{m2nn=bV`ZG}wMbH7yBERSQ zRMVb{q*OM|NoiqTBc->|A)PEW<*5Ty!dT9QH9t|gAg+a@25O==`d}!AAvBj)KyJo& zA~iA~v&lx@gZuCxaw0eKn7pJELJ5>J707yc0*%lL;b>#pk_7ay39$w`=k zMOcBA*odzYi!IoWqd0+hq<)w~5d56wltM*RMq@NVJG94h=z^|@KzH=Ozc2|?FblJ>9lOlWr0m5(9KkW1Hs{I9 zxN5Ey;(Q0mIFC$$G)Rl|$bbj%Ac9Z;{(UV?ITvV&c4&{(9RH`m1Lh%8G!MB{GR;Y8 zVOo(Ich?4O@gw_R$;Q4^8k#pr`NHr}dxT%@y7Hv7G~uLhN_gEYQf8aaNm+b1(LA0>xh|r)J;lR5M)Uc*>mqKy6UxU#{cXBF z;^yJp&TWk)-3?tI`4zfGqIsnxvk4|O&(st|<2U$T7tuUwa!+bX7ibF2m#1|bimETyyiT>6$?sXudUF zACMTMIjuzXd%4S0CPR_f{8MfCoaUYCXEa}^tTgLLQSDvxhVI2asLmdM3aE%GP<_3= zX+x@x-p{ys&c0>acb>Ci8M(HHlFH34F2czQ{ z5BX8tlp{6YW_D`BIiMP{JZ+kgZa%kgZnrV*$oaL^ng596pgPO47*DD~wMP_0_?jlK%isWr~yTYLxg z8Q*MvV9m3t`M@=|zKn(MxS8cSd0em(tMD~8L-Tp>#!+Zq@2k*!-syt8$89;tdy&WF zBc&jUARO(`0bS9}^d-fOi-_g+3G{lDzYoW85~}Hno6jwwx~yumZvF#Tm#x6ZMB`OH zg6go>kS)sV0yS0DRaH|JjXix4s-yOX>Zmdf6L112;no+4n96$w+<5s5+`fop)4WoW zlFmFr=7r`elr>O|H4d8NK{Zv$JDt}oYT7Utkq0CQX)(*QliaV@^dW2BB&O-603}AuyO=PaT;f!Iax*X2DE}|tk2_sIYf%) zY?X&Dd(9=a?v)#-m6c;0(Y(}J??H15NF(FcUr7~D?HU=)eWX-2p``eaJKM*{MC-6z zhX1_RFH^VFJfs2C@ciq5nfRFRyv>@s`2aNUZ62%JX?{S}>uP4=TnPcx-lQyQLTfGc z!#pg&Vl2UOne3Os?+tu0<6GBY=UZaQk0rnF{m~trJ)*~tIzG` zw(NuEi&p(j{pqeRJ(SzxzkWekYGEO$it4CoT9Pski?GD3BxA4|UtlhEGtD=;49l?+ zG1vvoKU(4*<^o0~6GE!CHq*=^B^s))Ei_usEhlp05#)o`cPmO=tqjVcJhaY->SmQq zHB!EVn?LtQZpWDb>SAe80%cJFs+(z!M|m7iqbZtW2;RpB7=vKyWNv+~O56@HZeHXW zY)4}*=3zcGPjWG8TZzq!T!YW4Rwizpf>GR-(dINYu`_V%k!anrGYF=JRa$i{sJ^B7 zkHyV@>|4LmJmlk-dFxAV-61z_vip{V=Yy~MEzb*he&FYz0y^U*^ExU1^UEf+p5x{p zK0@v0IARZZ=X}r~!HF| zxy&eNJYfu0Ar9&z^X(hcdLMsP-&i>3IO-RR3grC+{_EAdzJ;rNPV+YS_YEX=z1v;S z{{Q(pcF9~EFPn;F2x_1X8klghF9zUs{8`tvbzQd$A~7Dm<3ERSoG}6`u^L}O^Vpw* zjzccN_j+e1-fwliQ|s#aU&r*nzUbjvoz_?Kzh38moyuLe_`M$f-9LBzu)n1K%>G98 z;>7BrRk*9QpK<$@7;bOJPV5FdsOyrE!d-qH%K~_W%a+%1XrW7zx?Ff2hZY{;aN#<= zbqjB;*YS4f5#H*qyN?v!Qm*4I!6QK?Hz|2cUQ+U#f}}iZijWd)ijz{(lqRK|sX$64 z6GBQAQ;n1wrWPr6@EGcu2Bd_UCrEk9JWWay(~Oj7OiNP2O&e0$nGU3MGS89H*}OnX zgn5ya9_D3IUd6xgn(0kSU(=85kJrr`w=fLvU?kqd`}hFkFdh>Sg^$fAq)fq7 zOgEpB@)>4h4(4ILSx7E|-p^zW)?z(2;7fdkugzvsc-y~jD=FK|4pP21Ka%pZi6dpN z*-y$rbBL5*%@Ijr!P!^L6iFA|_!bR-4V_7Hq?I>@+`+vdjETN}SnC%6@Z@ltboM zQjVBoq-fo0w?b2DE-CMs_euG{d`QYT^ARag=3`PmF;hsHW@eD`srihQXfv0T z&&>i-7MUfaEHf)eiNPv-Vb+qe-fSf0EAurevF2M+zBAiN*=c?tWtaJxlsL1Ol>O!) zDTmCjq#QBFNI79nk#feIBjtj*M9LL&jT8^Z+>*@PMM_GOnv}FAJt-MYASqeQ-K5-O za*%SLd4QCMOb{u#O&(J6n*5{`G>?)}#JF)MgV>hD&L3QVaiZr54{<*rnYoLUlqNMP zX-#@kGMYeAvY5L`xyR%nXFjGgpu-ud5V;$O%qa@nP*68X~IcqW7?6@!E_?!In$Yx z7fb{xFPa{tylh@2rKjmdN*@zRN`Lb@DQ}p;qzo}{lQPVVAmv^29w{GUEIu+(qEHDJh?sXj0~y&q-Ne7Ll^VEF)!wi6LdRSwqS?vw@T^%_dU5F|nk4YrZ38 zyV*&~4`vrBKbtsG_L}{q95jbW`PCdD<(N4^$|-Y(lyl|+DVNL@Qm&cQIjQ%`pwm6E^W{b9nG_(Ja4*?5qQzOL`ok-qQ7~alsC*^Qihnf zNf~BFkn*m1kCgY#2c&#x#*y-oi6Z4=^9dR=q zY=)5Xwi!ms2=gu}@0s^W`M`Wgit0;}$K)j?zbQz{qoxQc#Z5_4N}IBzls6Sgscb?? zscNc|Qq$BXubVeW(KrklYE;LQcg_2xd|*B#Wt{nllqmBtDW8}rq)an2$j=as&#}NP zB4vqLM#>7anv^wIkBvrkM!8u%QN^r$aCJmiKUCdtB~&+T1@&F#LKSw+zIFM8>SpKo znhPkye^Y(wZ4ASQ7zfopRP$I2)ijo4rCCD;aUQJm@ei5>A@Ch<-ufoT{kMDFK+ZEae4T9UJXkYRkv=4Ew`-H9&Jjt~Hx!LQu zN<6Pi-1c<=UfZgZSK(Xe^&JCO2mhJd9$uG{%&^P2QwQfhsAV1_rJiX(%Kz0m_?`MU z$E-Yl`^}yDx3>na+PC~w^>5X@|IE6#>fQ2J*SS^S7S*=z)VJ@{x9`-qIWOhdHL3OO z#Om6v55|9<2OXzMGIJLxDNSlp(wg+7WHf=KWHEP>a*xSD%6;YmQXVovq~tbvNXcvR zlTy$;N=gwEOiFQ6l9bY>EGgwpMN%r8P*SRz>ZH^(wMlu*)FY*V2_xkR^Asshn9^^ls+bsl>X**Qr<9wNf~0^ zCS{lzLCU-4JyJe0QKWoqJ|Sg_nMTSC^C>BxnP^hxn$JmDU>1?G#4ICag^3|$wOK>T zI?+d~3cVWxLr)$`582DLF~UsbAlzU#o_F zr+)3NVgFtAYuERBt99zu93HA~+|{RdbKBLWgQVm%xk!1~JVHu7Q-G90rZ6c*O)*kRm{O#u<}T$;MN%r8 zP*SRz>ZH^(waGfDYwDBI&^%7clco_VjZIThnwu7+v@)$pX=~b(($PFi%JZfRDP2uB zQo5U$NO{HdB&C<>Lq=kN8A!@tqiYlLt{Fwj80dP%M`j`^lgwmNrkPo!M4Qh^Szs2E zvfTJy?^wgf)?qz1;!A8Y-;fe(z9r>5vz?Tk<_A)C;V0}idq~-54v_MTIZVoL<|rx0 zaT2G^SyC>V%cNX2@uUP$Ba-AM1u3aa8dB1k45VZ-nMuiNvXPSA+)K*+=0Q?&nukew z#N;ETfGI>uVN;ZpVn)}Vq@oESLs8Y#BBhS0OG;7M%Tn7nCoG!(Au;m zrM>A$%CqKqQo5L~q;xagNqNb zHPjdC-~XA|_1yr@uO+!jK}srT`6Y@}p2_mXnId61NxCKo9Wn@32= zX9|!~$P^}}s3}HD2~&!cGNv3U6-*^kLQEA>s+k(3)G~EQscY(!($G9k%9ExMDUD52 zQkt6ZV{EL*=Om9;9ntr4VFat>$WZop@ zEi;sq;pQDuMw(INSWGmNNSSP=k}}=QBxRPFP0AcIkCgdlAt{T^Qc{+im87gPUy!oa ztS4oo`HGaU&1O=zn60F2GdoE6-uy_)Pi8kMd(1vk4wzp^Ic$C-<)}GM%1LvYl(XhM zDHqLUQm&eKG8HwdK&Ve62>B3i1lLg-B>V z;iSA{Mv^khj3#A_8B5A|Gl7(eW)dlr%~VpRo0+7{GP6mU zW9E@E-z+3$u~|yWa@i0foBgkh8lTwAA8L4J!kW$OkA*HUVPfA1cI4Mt>Mx-=0O-X5PT9DGp zv?iskX-`T=^DHUP8}<4~KQn-ofo2dXZ<@DA8ES@;@{Sov$|y6Mlrcs zBc*^TL`q?!9waGYN|92=lq02rsYFVMsX|IMQ-hRRrVc4}O?^@tn#W0b(ljEav1v+5 zbJK#9R;D#6ZB2VpI+|xmdERs(MLk#2)AS;xujxn105g!3LFR2z-Z3Ld^=pkbV@Mfm z#*;F^OeAHJnM}%5Go6(AW+5qy%~Dd9o0X(|VK$KRr8!5+&HBY$pIH98yyM4rl9v&a zp81y%L(iw?xeb58JAZ0!iUR5jYkjAlcD<%{r=IrDuBWXH@Yd2ckQ?z8R7?9O)X`4x zduVL5YH4@sXx>`dojRJgmUgF(=B=f@Lrq3Tno*>THe*N`YsQl@!Q82%-KnFgmUg>! zH2?7wcj{{1+FCj43{t^VA|=FBA*GtBK}s!Chm^XeJ}C{&K0w+h7V*42FLXX-JN#Oi43J(Hx?)6|nDcj{{1+S;AE+MT+ZYHN4uYTnwKYHD() zuJ+Hat5Nz^N!&ApV^&#VJggHcDVaxI0)u!T!jtATQrTFMK+Fzf33y zH_v!iZnrDu<>6;!LcEFM=gA3N(CuXbo=MO=wmrcJ4o`fhjMsbA>af{8rPnLWp)db3 zlbDs03lcKdSWFZzIntq-J{Jmjlj238v#MZ|c z!1?GPxOFkK9>zpWLSpM;tl@K7=i&)8MiXd#i#Qy>LHvp%2u{V=4opEbe#2ShNX_+k z?87x^%?j~dui`1T-8vOon?l^W6mI>A`f2$;aO+99^&_tGF|8Zn){Cg0j;})_^ED~; z(|au=FOm3iDl&>z0*Ex7d+w5EdZx(aRC zZii>l1%sfq6ST&#TW5GIx81r4Zv6wd?txps;HCSxt^ln;AX5?UwV5bFaRHD^dUkBe~Y0<2+-{$`wo)&;nVcr4H9wUSKAx&X%?<=7Z*-BiuX zUlf{$e;lruu2XpZpci_>cfS4cZ2Ql*KX@wpF&4XU@K7LQQdCxVsxw!evt3JrjMRjO?ayJjT|GeXFo^iJ>o|{j+%NEw5 z#B1n}fp`luFbkUZyEGD-_q!(7k!s^HJj^~-3L2hno^s%!zwR?qDh7GgAtiS%uX3ck zhcTFr8Mu#cdOz};&7>U0XLC=VICwU z$mAv;MqX2plp-jKvM7&GQPofbTo3>;-jKXM4G|{B2G$jjgJsc?talViH@c_b1BU0S) zQYD_KGP=0e7*g)y;*M-KT6eD-`k*g{nRmz!aS-tcIK}!AxX%jdCFm zM&f;p#u$vnM>v7gIE(YRdWN5YN?dHJg9ZpgM|4F5x}zrsnIYs*j4-3f_wflPW15*m z&c!mbnp}e|*os~F8GFn=QVyBpq?|UF$cEX0+=Qw;&ec#8 zVd#KY(aZEB2VfuuVYqpRlo_T6kHbsQb3*)|2Q|2lYoRXmcug{&lM4`IHj$#oK{A;f zWKQHY!DKn;ajJ}0%zSbI7GW`#8a-~Cu?0WD?eDdJKY|lR`+B)*`*F9wcKcWDGi9XF zK2qHN(SN_F{h??dDB1_gDV&D(g`$0-@BYy32lY6ngWIp&Z2#r3@qtju#O)aZG71#Z7o zm*<%8e#t%WeD^!r_gseW{=q%JVtJ1F?kC)S;S3-DJNE~F_HoN#p1bmA9KWRCIhhJs zpx41bjDVh-dVl`A-j6%-v)uFguYN!F@ID-m47|r?LQ&J1ywUseEIxk#dW~dCv|Ht;-hR*#ND>Bvl#sr}d6}*EiDo z+!Z;es06Jar1J>gUOjyfg-@Y#g?R3Vh~(6P&=Z;~U+a|)!P{mSIT4x{zd!XE|M~V* zuTdRtD2Bt;<6^iiUzl~I#Nt;Rht@Go$>Wd-_nU{v#}JOL=!R|h*|@sSVYcNMGVu5X znk-~d)W>AZF)`$?I0HT2*N`nW=RYP7Dfvw>Ss9^df|e$nd=63g91E}>$YscVkm~= z9gM^@%s@2eVjkvWF_t3+8_iebCd8UJat{vTBrcj{>G=DQ0_l+nfyj#dD2QMbM+uZd zIaD&Cq|`!f)I~i!gBECo*64s&Fu)8XhhP{+;9ZQu7<`Cv<|A?fCgBrI!wh_e#aL-p zk*l!|8}KDIA=VruFCid3e=kxXJu)H?S&$zEQ4W<%6|y>-pc%r^8XeFTuOJfr@ivBG z1m49o%)mU%$6_qU3dCR)zQ7u+#|C_fukf>pBlqASj^iXwAz21~e`G`;vYd;}p(-W!F5x zD2@^cf!;S7qB;7ZKVCO)kVEh`CSkIfN=9QY=3%*sA=kjY55;o(d+fq)c&OWE$9*V? z(xxmaS|7d^>Yy|Fnt`MY#@kqdwOEf$_y#|~6G#me#Y|aJDxe}l&=}3o0<95&m(ULb z@H$i{ejCFu4j&=0_1tP_;qgR$gyCs4G0n&p2*+Ry!BC7qH0EMH7GVWq%xZEiHefq; zB2er4A{%m`8N$&Ekr)FvkCy9a(zT^=_waFCfQM@(>5&nc5rkqWh0+Mc;|ND*ynqNq zVjdQl735m1#|C_dU5LYBoWMnR>^LNlyca=u6_I!ygD?#ZI{G!|eHRv-rJumRs77Td8CKf_am>w$>G z7>vbfc#3iyi4(XCPcW|qs7@JzDtI4b5swsHZ!L;q7={tphZA_HICm?qOyK)Ov48u7 z&tn~8QD_SH7hXVj(}&dcpC}y1DV&FAD)%=uC;68+i-2jomm>vIAuZA)5AvZ9f>92k zcmY~00Bb(wGxNB9jxjo0sCl_EbmLtaKT9*8X-*60P5ipZ;2c$tp zWX3%RLSE!Y5d=f)HAi4S4&oOahOUL3z(we!XwnXzZ&-(~a2cM9?7J@U|M5Ni*O`3q zGPQW*L}`>oMN~GSWEE6Hb<~8`h2DygtL)b>9PeU1PT(p6se#^$U_61R&;gzBJR;Bo zFXIXV;(2~Sy#On)8td^THsf3Dzz^7kI2^eb&4jGUa`B5GfQ3)Zak1(`A zBrd@dKwTcGPy%Hz3?ncOQ6`qWf=I3*jzbh;u?LsoNlvX8h4C1|@Dd_19ux2dHeee( zjKvy{C`^Z&m*0)k@}%JUB!bZvU5zIt*WFT4XG0@|qa(C9WeTJ=X~|M3gR-b-LdZsF zjE^uCvk`|=ID@mejQi72!$moSm`HLVmSHo#g%-pNL{?-&cHE0n2t{p#p$Wn<0WsK* z-*66^fToDWdTe;&2XbfzM=t+^498`gj6e(I0cM5R0%B%di5g5Q{@Nfs06< zndd1UHKoZ~2*Zo$ftS%A^RW^e@HM_cEOuiL&OnQfW=2*NL2;CTu2)N0R6-=)z+f|k z9E#x>j|rHLX#9*g?8OOOL^A3*$&mu-kqLpwiu@>uU=&9QltMXFG9jc?L3PwZZPbOX zpNARMjoLzssFpz}s-T9cMK(tZ(~4}3NX*6@%*A4}lw5`tW)&%GupY7a9+A|jK0`F- zU=fyLg;_=Z2rcSb92HOzl}#10I>OKt;pmJ=%)qDSGjcX`-Cq`&7;+;t!PtEWLN4Sr z!DI-um~0W0H5EwFdLE|`kCgWYc+!~kWL9LuJ;;HgD27rfgR)S+frOwcs-q^t&=gUa ziW%67UD%C1*pKUr+fv_4hvF!Q@(4jqgqg-<6Fh@AG1`1cevBAgfELM3jkG9=$|jVo zfiQGN1cqa}nM2CwMw7CoL~5i#Is~Jp2_u^#9PQB&o$wrnVI>;0M84EKo3Ns+9P~Cn8&juS)JcWleBf>@pz8sJz63h&*BAi zMJ$futkFbjMNtMd5Qe5`j@D?4SI`^7q4i!qgeF{j3}G0Ak(dD0WmS)LeIZ(C_xvEf zelYJ}Z<9m0FQJLh9-71d#}jCWj)=hJxqN;Z_aP$C3y~O%5g3DUW&$ai0PQTasBK;p zKs$6W&yng)8GzUEHm2h<9D?Ut_7kXK;>gp`;+$KnJoBHn0m-!)i|&CsN98vk9_ zgpp0r60Okf2(Kjs9OdUg3jrrb3gkpCX^Eu)JH=+ zjwkSxX-rB})0~tRrWGlz(FW~INAfvz#*65ISMV?NLLU=JzKORm785ZElQA7Lu@on8 z61omm2*DVMD13%FScz3o&&U>>g(ln6H7NB9s4pZC6%dNraQz_R+-?ug>3{b}xPAy- z_w<~nw*!&b3D*~)#hB9}5Va77rU=I%jKC~JV-7UY->dNLn|SgPUym+`!0q%;XwtxU z@gBa!30wpfQ_oLRxR5h7nWyB!WS&qwxG0$?2ot|a=7~n!Z+!j&AHPI;l6xM@%EcW1 zb%pwF--P;Y6YH~G%jedcz?8f-p)Oh>!fYpZLH)P;@e2;&R~$v=R9*@7;hyGmSIs@C zIq$*!co>f$9}1u_nxZ+jVh_}}n=B3WPE(PTDyR+LKHkP`w?SLVOEiA;QD)a za9j3bAFi2zwESFDG*!r|sD;|73-tp(ZX(ETc**o5`(v3|MXtqqY=G+@-plQMxCHeP z2c+|I{lt~o4nY-EhkA>p5gMZn+M>T%K}w8K@3HJKp7cCLaF?k}hN32F<1wgLxe=a5 z8?;3~H34CNk&hki=!EzdU`AS1fq~u7A95VXnm>4)O5qBmXd%eex6@EA&8b ze1r)&fs;r!%_}7->C7W!UOZ~lL%tTSk362+l6N}$QPjfYh(v$5zVZd!UW{c}jsvE^ z4C-kphTWANKie}+l5+#j#%s>Zz{|*H_zxk8}HJG(~d^!TV4Tj>ZcF zKR`VZWl;%k{J^{1o{AZW#$3$9d@MjQ&Us6tys1c5LI^b8pq3dyzJpQ5jYBxiIr16! zk4I?8Ij3k`!n@dS#xLU>4ehshbtIp~3%JoZg{t53Jb@<5E{zK4jF-&oq>RM`OvG$> z;&|O5HFDs7i92r6F_7rkM%?(S zn~kf|F@Y>GdQX>fyw8@0-djcQt@5pL?`v-SlCDMSy~kZ|bo+g`-}c>4YhSHvG7@9l z{?P6J+?9=HF|K1ll=apP@bGV{8Gt5<3tA*uaSE&-W5t_dAI*(DlDlI1S(5s~JD1mC^6l6TB^5=hj77$hIsoG30ja z#5r8RDo(T3L4AgC*pDOT7%4jc(pbos;rj3V*Tqe&56`WG+mG`$H*PYazC88jg<~+1 zdVc5IpLdG?=g#+nQZn`rFJLRwljqL&+cdkHUJNwe()C-q^F2>$ z9%qC?=XK#osK3tld{5_Z9ncjTmpK5p+CQgrKAq?J_RXnh&Ykb=;Q_2EKiEI+xUWAcgOZ>qOWeRbM*#v1k2 z>AX{Yb;qH;I(Pn=oc-yo_SNZpRp+O^{dC$tyYtj%xb6DtbiS&-x~}MEbpAR3e^!5; z&Vg6Mx35m`6Rxk$oe!(O?l^Q#e6zkf_0uJGp6uIar}O0wP@i2S24EnP(r2ghYxULX zT-x>3`JPYv_SfmW`XGG!>vW#&-(RQm>zZ)=bn2y3ADzy#TS4d99ncj$(HH%2EB$o7 z=jXoXZhxNFzB2;3W@c>UE*_B@W1SbbM=I0>4ocNeR0DR z=!*-WFRnBFa9zi*kRNgr!nPm zP=B1OQzXo1IZr4Oo`rSO#B2?1|f~#Y=dWCO4n;ReC#s=kg z^|3YOxX`z5p?)+EHH0z&Fx6|_oJ=kW4`qX^_;2S%+(+MiR;gY1o5}wDbtOV zzGehD4yu>z!X9&gRQ)7bF0WLiq(xR_Gdaiyk;mjECBG?1mP18^pa$xofe9xE!}BP0 z4*2%7?PvQpsGm&-r8nzmQ%{?Y_uoep{+oWbIR3xtL>gO?3b~+p2i!Q5vfQqSDp3EL z<|CMZiMWI-NT{DJsu*<`sGlt!o|0_WCmZm8CXi9yzBcu^d?;BG%9)#;}Q?1I? zsrqtT^{MPr>4idW48~jV?{8BNn>+te|5|sbe@*qOSg3zZb*uBZY_5{3TLnYsN#Ric zn(9|NXL5aNaol$OX{t|!LOp07D{ce2V9*mk~*Jn|Cp=$sedddeEY{#2Xy^oQQUU@W1G3X1-H{j z_Gk5vg{S6PG$NrsGXMTDEvlCdK~Vpg>l<6a?Uhi^n16jUq5d)ddZ+rwdLa_ypgywo z*ocF0ePp5OynSThr25Drp+2(2`o^^ApXLK`ePfZ-P}MKy>Z#G(cKu=xWa4X$`o_Yb zez7(1?H5zMqXX0*rkckR`1gUS?y5Sg`oBU@9j*^dwO93kiR!Ow;OegG0s8^FjBo#! zZ{0O1{a(|kv#8%o^%mFXrTXmc^m(bCd!xQCSJ!p@UHw0Q zwfy_FRJT>1Rt$DR^;!?LAk}Bpi{;yo70I@GtzzKYXQeu=YDem?DhKsfm52JN4kIc3 zRK9&ws^hA5n^51BtK+I?Y9CzRlyBWueNw8=jyDPQL%F)GdZE+@)f6v6eNe7`t9~fe zYZK~!O00gX+U?Eyp8eNp~>Q0IL5pFBZ-?0dS^eka%Gomwn@ zz%E?E72Lgp{wI_~X*56>UO)r}V+f{U23BJYe(!tY_Fq-6cl}bT+xz!Rsb@<4QtFd( z{ZX-pmx;V6|7877|7|~yT^FgspuXbYkPgzvOdn zoVahjT6O9hjTcw_TI0kMt6$%hhVxHUG8zjmZalc^*cuN$5Vtc9JhAcKC-{E8b?X#q zZ?8`6Uw?Mvy9e_9hT>Mnb8AeuZ=HD$+o~_it=5&@cx~VMaqD#dt{ban{AbpUU41yI zq7@MTldo`|FeCxV<*mmQk@5=C>^<3Za(yHaUdalMrtDf5$u8y13@zAQr z2E&baR$W%(oo}Tc8_n0>Y@D<2_-55(L;dQkZrrjbkaJ>a9I~jc+6c|i0veAj?a=`* zAOdcDvc@Az6#mI|SdB;iv+AzC?ZY8)loHWSasB= z;OeC*?)Q%WtwE|zIsj47c;4Aq0*&ico%CU7oNhxj!;R{s360Y|$N%{|#_1+Df4%>_ z^%}pcbs&$xcl@sAtM3++aGf++uK#^K)OVb3QtP6Th5wwosBb+~<9HLRhmPfQe|0@H z=M?ruaCK3Q`&B*Ecf4;>>Y|B_`^`=5)744)b9){%zSqA#s`0*Qr+dfys!m!H;ZU9Q zb8{Wyr@xCB=>%|F9iH?2xmhsN=S!_`eyJMDv89lz`9tiSSqRcAee|EA8m zmpZHG)Bk?l?q5+~^{=0*zeRP^zq?-QUnliY@AR*a`i`%S;`2AEkKSy2?LVn5s@iB` z<7sbH|I~O|Pda+25DJZ>4M$SzpBgvo>Yg{McWRuhf4ws~wM~tS9e~+Bbxt?VRdr2Q z+jR9!jdOMN%>mq=i&apaQ?<>+>YIhAQ{GBlQ{z}~cf6|ac+}R^HdUW235`Ehozj2Y zsm7D~)+yb1Qq?8hxY45b{JSoxdZfmMy78ZG+^6b~g{=Olbvlz$f7EzRjoXwe#&^7C zEFV+N(bXMQd-NZ#sj-^k#%a3onK!CK7NNeV8l<@TV?y=DU}}YKyk$b;EZ?+RqUwom zJf#~)dAoH)S3h*)BVFC_X7xgihm?`Tnvj z=<0C(;}h@H-@NrVj;3#G99>F|FWq%{9f#_Ae0luG_4JE>oJYjA zId8}Sou^la>w}ul`Po7&G4nYFTY$x8DY*=-`4f7Ao7ef*4|ntNb5Or4hc%u6o?^n` z!*xuvp{X}Kno>h_sZw|wy^gm?T`KfsGQ3Uc5}q!XU8hS=lHF(*EB70AZQ3<@7!H12 zE>a#g8VWA?OaW2~nZl$LHN{9NVM>uw24zv+R3xRc2_>bfVc5Bbo_jR(Txz2Z>YDnb zG&GNs@}y}*N@LTMl;)-dDXmOvQrepKq;xdTlJdOiLW*|1(#>=yT%WOJuz5?IHqoFH zpW++DVhgrm2fjBylJb-JE7u#o!p{h%m%kNSo3^C1HyufN);v#27t@uLZl*gaFPT?J z`ImW(l-{N*ieyc!<9j$xRAUQkgWQ zq%#>v$z(E5ztq~tWYNO{;iLP|bUfRsX}Feyb%F;YsHQlykIu4UY?_kN+_WI2m1#{%ThpGDj^1w)>(%rm7$}8qyq`YQ&lhW7pBV~XYNXj7dCMj>3p`;8q?~pRmj3UQlf|*FlBr}KJ zJt;q$pGetl_K>pA93bTvbC{Ih%u!N~o0FuRHfKpWZ!VH@*<2+h9;tHDhm6}@XLu0* zcLYWw3R4jc-}Q$RTX#5?uXFRR?%=kr+x!CG>o(`v?iS?Lmy{7ue|y?oUKzX1^`)F-8(d7P9dO(Rkoo2I1v73&zk%J=PQ zdXduC^dn_}8A!??^EN5N%sZrv#3+n5V@Mfm#*;F^OeAHJnM}%5Go6&#W*raCE4 znAT)F^h6&F!7#+ae_Yx@KK2`qBN^|*qOobB_j$dyXEQm-2a(6*Ckxl}CHjr7hN8OxZq{cdPvdcoMXus;Ej~G!oV<&?i%dbLAXAbl$y8)2GBuf+ zOhcw2(~@b)bYwa*J(-@&KxQCWUme%tGm)9dKr-<6dSrA8-e0iNtRh!KYnQLZdgJEV z(7cLT%e*OCA;P%%75A{cA8vj{&8_G^zhX!##+)J=nolu15}Hr(Q9k}1c4Hq7;{=kY z;d%!upfcS0RSmh_2#w)8kKzEfHGiW2d>UGZ%FUAeML|I+ zHdGKSC{@1SGxKhoGY1sU`Od#x;o`oYS<^Fn_MY9=yE<_FpVdoLor?|F0@X=$>sDwy zDE~T%=V=EOh=Fw{I&fV#T&X@{U|op!xUX9e!YRb_qA6OUHQJ&*I^c435mnz| z12$tTw&NYVhs)JL%+2|^O%Yg^LE{`lgN?9gBe&0{?o3s$b|oe*A3OC2rt% z6SYwXcR}?5+E^R6o!i zQ$}?IUxn%hY8)BW2Q1GyqpA(~O=*5pvC_7;4^?M*1NDO*3AbLKTc^*h&v)wrwkx21 z&f~Bg8m~irp2fdDUzLUY&fzYkLt}I-$42*T4fziRrcK3*%Rj=y9=b^LX3*R6|Jo6D`x8tRWZ9?PKG z{OXUXT6on;_-f#(52k-VOx3fHtQlkC8CZvV*sTvq-2dLh2L_btd)P<=bq ztyj%Dx8I{`)4O%*La(RZ71Z}pRG&`u=+wWl3aYWruA1?xH5b@lQFZ4cjB3BjZn*sw zRp(uO6~(PPSMMhJOTw)?r+Ra4ojKKXSIu^}pQ38F2lh++vpRCkO0&*w+UXGqesU+={(h<>=l1VY4LP~m`fhDl=aU-tD7tkM z^*s`|E}vVE&#im6ioa4O^BIX-mqlZ7iMu>3$@;$3FgpKv7MRVw-XtZHW2S$09983i zN;Q^s_hPu2Np8eYkIz_ArehY8d0p+7boWP&s^;6DIE!VY_O~R@_tAFr8K`bTKiuQ^ z{Mq)L>YiQCYe?XBTr}6kVl>9!5&ZwyZo84cr8NG|c3U|2Zv}0?J&oru3v)0RFJc~E zhPLV4?Yh^voQb9I->%z9I~%+4q4|j1kI#&|z2|P{Ex+~h+jZKe3*4?-d7E#$E{puT z+jUp7J(pO4-?)lAH@?OROsMQQGq4Z)aUK_-?KyGl__^D4f!lHaleg3U6X*AN$1&I& zlrvrc+q@btAd2sO60{z+3s?GG;Vv5bjWMj)=YZbOvL?!mB*$Pb=3}8@k>uU)^g1b- zSc;WqEh!t#UQ&KD#XPLP`Qa&CtV+8E%TENc%+8H` z@Id3#Nz)7LOGYc^k=Dr1L--kTJZ2IpMYy6UDxor*YuWdL&rH$0+>RspeAcs$COZwg zj2z)@dFk^I_wO$0;aE2sq7j<&o~01)u_#KT44UyCTO!v*pS+~>M-0+=%;m=E`}#+= z-=XOz+|4VTl&RPF+``{e278Rd-;@hyOnv@7X=s{|8rM0N4=xVvi?NRl{pn{X12G7R z)GZTtJkQ+J5|jK!<7BqN0=6j@qu0%Rw{Q>oLE}k=VGPFVvWMdUXoGgB!5<`HCKsQT zT%6}q4xqI;S3S_-;1_z$Kh&LoOMcU!B%KIE%_W8PfO!uHAG{CL1SUb9jtSA zz$VtU-^LE?g~oeojxg4(o1!J_LZUH~q&e%rEieqsRT`(>*tE9w$CExtL$C zLB7A3Z~OYqx8Z+dzHP<_Cml>DvNN>&*8Kdt&Ci9Icis8<&*tN80rT-e=3xn(pCg%v zH9vQO|NLBt`B&We`X(;ljKKLjmg_|0DN44{c!r|!3dLOxoMc&W3XKZVF9z;7g8s_~ zjpO%smJfl;g^nS7pP}*Sw0zite|7mVmt};;Khtue1%?`TdEt&5cDdz7L%-$5vjNME z$t*J-Lg4xRMb0vPQQQQRAt+MsY%R@>zQ=XIx zrV=StOf^z!m{3w`o4TajZW@x(*fb#}+%zMlg=s}f8`GYY4yF?+k>)N^x|nXH^f0|h z>0|C8CCcd=z4@u#t z%1fI#@`>3`%ID?~DM!qgqN7M^b(@%N|a=?5} z${}-vlrPQKq#QNhk#fxZK#I-_kl)N1@+>Z(ChKugroYzd5NigIGRWLZN`grwCE28q zl4kBBWw?2Olu>33Dd|Rakz|^Al$7b_2~wUi&yX_1JWt9j^8zUu=0#HGnO8_zU>1?` zs(GE1O!EdQ%gstsR+~3TS!Xtol7+YMw%J0;HnW42cg;>xvdssi>@gpcvd?@<$^r8^ zDTmAvQob}_lXBF2N6Int11TrXPo(@}ekJ9!IZMiU^E)XH>&lYL9&;@z`Ah*)3Yj9L6f-4A2{G4`QqtT+N-1*-DIQafl=7wmDV0nWQmUC6 zq=cHgOfZlv@uy-4X}?ja@0 z^d}|O3?OBYxtEj#lSoRkNg*Z8+(*iA^8hKM%otMA&3IBKng>alVjd!8nt7Cz>E;Pi zo-!|xl3`vXWuAG3lm%uHDX*H>Ny#*Ckh0vYBxSXElazI411VW%6Dga`R#LW`cSw29 zyiZED`GAx?=3`R!nNLYMU_K}1kU2uim*#6yj+*aCIc9z!<)rzElwZuRq?|TqNjYzR zCnaAQwtG+#rBMkr(E#CSi;n1NdXv)E^dn^ulCTpS+|L zL}3&|30!AxBuk^bsX$64Q-!RKP}D(Fgrk*-B9kz|xci&6(?oURqfCD?76VN@DTB=r zG8rjm7%5|rj`3z9DG!<{q&#G%k@BdSPRbMJDN>#>Ge~*f%p&CllR?UhW*#Z8m<6OP zGOv>Iy2&Kv4YQn-m1Z?5Z<=+aY%p1*Y%-fk*=n|v@{W0rl=n?GDIb_Uqju zZ(>OqU(h! zlw`j*A`;nu4ITHr5p~fKgD?&nd;V(2pI^a!v+*tRu;by+#+`4#?N>AId;<5Igbb{~ z9vnx$kJ;CbFmy#Srb6S>>p1ZdsNQoac6zAJb2q5I^K_`L^E*aG1{|A6>wB!CEpM7E(%sMaE0<5>E%pQa-SO>4vVA=o z{`(28ratflww)&9A*dg)yB(sj?Ia3Q@HnpKJlnu}!tQyuo@@ENMk3sL!Uwo~5J&MH z&f}sfmX~D;I$|lZa0+M51yY=RtY07kIpf>0KehnNV+4+m9#~&^0QVV&obl~Aho~UO z$niX8nHR`8cnR~c0E_TC)O%jw#*5`X!!&Tdz51d^`4)upi=As7`aZhu?T~F*>(H#v1qh*lgMdaM*lB zo7kSF&c88Fu40K+Htv)(SD36aM+gBev44tgD89nZS$&6`IY*U zhgN6b1~j&vjKzP~_;$~;Qac;}>AKEUU-518Cz0ykF&e7t{3C9d&#`@!!xU(HO#O$o zt@94FZId(39sBV1vcC?_8T$X6Wgi$mL0~`W(&yMmfPZD2yT0ey=EjxAyE}7%*R$;+ z4_Om+P!}E18ADAfDfgQZq>MD9Ng0dtD0Y!LKybHX!?`TY&sd(r!PSoN@8~s86ka zW;$srXIwn?Bi_rou!urD+`85|K>M?47+;ZaP-6Zlv5H|LCt z$1&_8>@UE-Ixe2Z##?W)$j#Vla>m7DUl{vmOQIKY#>L}&eEKZqjEm>n$Lj81{hzQO z^#}H&>YSm!vp@B}dR)B!iv6cKwG!Zy5vUHAZd@hJ{Ko#YClFe;!D8X*i#5RQ(BL|>%iEFyx~mO*+h zwv&;8Y&f}d#?z};fc+^Lg>=k97Pesra>mo6Z+3|wXEx?w0Wy&@o*s2#**BRpo*v5= z`W&}F4DQEhJO-WjI2IbLsXcPW)8jK>AK`y`KVi;zdjH;jyMJ|m-I7wpHSD`HD6<56 z@aQKrOATcBP+6I6b*Nq>S(WC-Ve5_tK8A zb_5%ugK4LfE$)3EGpYtV*YmvlX{*~?+iJm1aq=u}z5i_5oC4|umn-hA*;A}~u(zhr zG}?N9(`yGiGspq7_4h~C5B5H81a1928MOIxoKCda{B;)4u0Xy|y9BwfL9lZt`P!|; zo$JV`#=%Y}@^RXF-Rvg8j)$yT-uHQBHw|{0^8xpwt=Bu$BiP&5eVE;z5fkj(&h_hP zv%AcRj0<+yrRaQ2TbWKGELGI5kCFdyZPq{;JZrA%+ zJu28qq`Y&s-Sn{an7QRNN`X^%0ALov+DjDi?Rkk;zMgz3;0!ZGB$bX;aR}X-!+xZTcI* z-skO2Tc3ZXwUcP;^U9{JzjFd@eGbXXf}ID+!c}~?XRHeLPS;Ab_4w_y^}Xmq+dKVM z`)*I7t?RRC>vLUX_jlF=d%xH3(bnHRh_>d3FKKIfr_+kbq1$+OFeYEv?&Y(Sk&$CE%-}7hg@x9*l+^*+qaFg%v zyqDWG|83{?!`y!oZ9P8w`(S4n?ZR9Z{nPb&tnRPRK<{TP=HN9`ia%P4P@hE#dVGqI zMNtVg5QQXM z@3kKS>oV&+asRr^I$!)aiZk&f6gpqrt;_s9mw$$Pp1A5X--yfAY1aAUJ)!f*Kg40E zUUM!!VAW}sFw=}|i;m__GO%9rIIde~RJU2)g6cQ#G;Y1jBecK3??&~Tb0N$$Bb(z& z=XED@+fe9SZufld@myYK-XgbP8@6Mo@vrAh`E74KXVr8LGfl~GG=u6pcQjo|)%EO; z7>qYMA6l}E&V?4Y?x*)l$`>_{QGMqK_}6#tNV_Y#p+90U&a5M4qjBqqs@}7x*7Ht$ zgpY9qUqCZU5E>&4ZoScFTvq+(j>fG&+Mjj|#+i3WaqE(Pz-9kB&~Ba5!1~W^m?1mC zzy7o8K5vKWK9^)6cO$NJez597k3l*n;z3MCV4di#Tqo682#2CJ>Z2hVp$Swsx(EF0 zM*G)^9?xx)@E}w(T2w1q`m!+X2i1)Zf$B!rMPS`%x1Q`OZd;G7W(WBpJ~M7V8n>S6 zLY7J5;m4sIDxwlsVwyuwCe1JVTgd;eL zDJS}b^&z*;MUc?jms5K&1@#O;1GUUun1-^soe+Qv4!r<0fj^MJm z=Yb92asrZ(h6W-0?P!jcXl?Ex#jVf0jLWO>rg7^vZ={`tO?Vq_{pL5W^VJbwN3O?4 zWWlW`Ugvr~cQi5Kq+3^9wZ&gEnWXBBuQIAPUIyiG8!DnIYSJgNJ{qDC-1^at*`K2N z<4sKqQue^DKfa&Khm2c)ybkAwHGo@xybYH{b;!G+C)|4E&v1DLoys~{oryQF3@fk_e^#%&RcT(^xb?}OrY+AJ)hYi4?s;3G>?^q)Zr$?7*jJ)@QCgEW$!fR;$0pAm7FzDOS7zr3=CXzA}b1)Z6aJ6;O zLl5)3ICdn+If3k>LC(i$Nng+QIQKJkP~l;HcC6N-tzV~B;=Q%fSx${Y0msLAl?y0k z8j#Y(B$G1DEFfjGIYi2NQ}Q)_*HG6)l9FJikTTC?k#fMCCMD!`pHNadm_ejWG#R9< zGy6#S#S~k@IoGIW+L97$(n*9RQqs(HQeHLNN%_(^%b5NsWg3vu#Uzt5%`6~g zvpGb{c~f#Z(;szBBq<4I3MunU7AXhJX;MNs(Mm#12T}%^iKJwhb)@VwzmQUFrB5|d z+L~BW(#RkJW{gE0a8wzkaw8=2sIr@8Du7s zl3~`7vd{cNO0jo+s*%#x#FCP3W|6Ym>>=f(DfAxGAC*i?QliW#Qf8Rtq-2|8q~zP_ zQ=XIv(}$Gd<|$G#&3mLAHF@4=`om+wNa;s=_ zq_j1$q@t+2$B2`S$pfCndu4A!WFEij++A z9w|pno{yOR@R%@CdYCj)rkhtu*>1ih#e4Gl$4qXfJvBxxmb(!*o#l_GftuC5_WH( zDypLm+93vU7>jY3iP>0%HTV!8;RJp}!Ay4dq9Q7z1zMpWqA?Pq@hqOhGOWNZ?8f&v zj=W1bwt`!68^X~Hz0nu5rPIg*(s@0}+o2n1nf)i?vvfz4!z_;}nXnWcs5j zs-q3sAqH_6i*cBV*;s`&_z)lA1b#%pRZM?WL}j!-heQ`fV;7L4 zunjx#1-`;X1hK7fGfJaA8sctrMG}VMVLXEQSctc=1qX2$=Wqcxu+4BI>YyGv<4z35 z5KP8Yyo8sr5pQ8XKErP~gJ8B7u0u`K!X4;{fr!ThOu`(@#agV#UVMU|aSBD*W+;xT zsE#&hhZw|REXH9bW@8oB;6r?b6ZjDY*6Dvv>~6umZcV8{gwN z^0Lj4AGhK*grgaHqc85q2t0|Wu>?!;E_UJ@e2d&!On;O?Su{oybVpC5Vi+F7<5-N> zunjx#1-`;X1hK7fGfJaA8sctrMG}VMVLXEQSctc=1qX2$=Wqcxu+4BI>YyGv<4z35 z5KP8Yyo8sr5pQ8XKErP~gJ8B7u0u`K!X4;{fr!ThOu`(@#agV#UVMU|aSBD*W+;xT zsE#&hhZw|REXH9bW@8oB;6r?b6ZjDY*6Dvv>~6umZcV8{gwN z^0Lj4AGhK*grgaHqc85q2t0|Wu>?!;E_UJ@e2d&{FI6=u1LaAJd8&$9}Dp|w%{NR;~XyF2DTY)L><&aXWWUw z7=p=|ikI**HsUSp$7lErXAsQx!gZ*LTDSupF%a>XfJvBxxmb(!*o#l_Gftr>+YH4~ z71hxO?GS@FjKw(2#B8j>8hnV4Z~{M~;CoDeR77R8Kr8e^G)7`Hp2c%mh85U_-S{5I zk#{H4AGhK*grgaHqc85q2t0|Wu>?!;E_UJ@e2d)gGyPEpWziT-&>cOIieY#Rk7F@j z!#3=|7x)Sn5wwfxkJ6}*hPWGDk%Xam7>{5+7UFGe!9g6xIb6UE*-U@bK|OTFofwQE zn2f1-2`^(K-ok!-hTm`o!MmCMsEJy*1069C@tA-~n1i`ki}l!xPw+ENq38!pe^fAP!?O4l^+utFQ(i;v<~Ek0|&d(;pR487#G~9F}1Pc40TZ$8qG{ z!}Q0kxDDZGhTiCl`!NDf;%O|wQoM_u_y*r1_eV^BltEcEMiX>LPo!cP9>e2UjMuOY zJMaa*!bJpq%=AZT)JH?yjjl+-P&|xBFdqx?Hn!j(4&xjy;D)_Sf7C%ebjF<+j3Jne zsdx#_wfqhE%oNSb^um#RKAj44o&y5Mx7$>l<97(>IG8jujc($28YW^YT64Tfa_8ss zg2qI5$3>6eay$5sk3OFE1Z+eWwqZNog~mhI*yqv|5tv{$kXhJa-X%4zd9H%o9}%Vv z*%o&|NdfDI;#d<$=5Gq%AUpZr}e=i;-|c;w-T zKx?!`duTlJ@zD6=+1QPJ_#8h$j(V!l3cPyJMnRc?11t zumM}J4I2OZ)*CtQkIHbz{jSC3I?(vvH{Qg#q0so>(%lRpQ=qZGrLk#3HiO0jZ;A0{ zE-9~IJ{B2`3ohT`7=AE6kv~J@g;zyg)Wc!(8z~wOygXDRN&?3PziT1$4>b0-JO1|y zF29Mj*nlk5T*N*V)InWn3~Xgu#4sEs*L%S3AV-Fn1;tsu!>!{L#pU_P z+{>~Cg*`qGwJ+}EVsYFccZd^2u4?8xZ#9B;FzqaEXA#Z#J|Rv|?(i*b-7lj^i1%^F z?D3hjb^S?eucrMNSDd1qo9jbw_O;K_W-;$9s2Jj~nE9vkV)NbMJ8!jEr4aA=rXjTT zy!op8UhjHqm$Y^%+Is#mdKTbs_p(!#QRqic~%1hs@8Uc=+(!Bd0zD>t^{`A29Eel2ado?|MPj)64`? za_U2{PQn7FAENO9#$pnl!Sh&(Wmt>#CX3t(?@9Ko>qMXp+93f`Fb!84Pbr)ApR+iR zwk4Q%(Gij8h90ID*%wimf`{-3rh_gs&Kp>P)!2Y6vx(e-?f4k`P>cn23H*1~S@4wP zmat?s{CqI#(UE!X21^47`qHASP43eWVF-uD&1r{DCW=(uS&f_XEu3ncPm9adpZ)Kwn^3a`>(aO; z)Tc2SrpvXs9<}f&GO!U&2J`PcwtH{^&dVH6e1&-kS5x;O-+Z12{`F#m*bc~zYmgTO zPzdD^fmDpgGW>+!aL!yHe@B6Z>=QsJS|bWNKX4-6z%HYenM#O2bF{=AIE3%;6MjL^ zVm7gnA4O0c*TaJfsDv5_MLd#m1Ud&%+vo0jqPzYWSobyZ9LrC9h%41^J$HfU{hi~V zxDTqk8dwJ)r~m(dzMiVXdE&(ojO%a%ZbVN1e?AkoVXGn?4`PaWh-+z+En5{D zkLMsR;##&<^P56sFs{S(D2bW~+`pE=b@P$a@1M_y^VR>q_4{8(-9;p06w)yT)A1ZM zZc-O?!_|(H^uM{zXHNh9f3N@kmByJW$4|RxXUYGSeze-J@Ajc>%H__uT)$cE*Z1!? ztNyb7`}fs%_RspwYQMkRZ&v&No8#~Fo7J%bx8JOe7i@w0&FYweju)u!?B)8+<}S$V z8ugo1e_8+I2pwtvS-;u9;|e>uzkk2kJcZb=4;^1UhOLxW_AMag0Lh zq7nYxezNZI4)vG4ntrlX+1^)wSRDuP?+@Fbb}R;B2!hkCjGr#go6KcWAr zj^pU~jobg!|2WQH^+VP19rZ)i@g4O;)$ttvey4%`Om$pmBt}DhOy#fond%sjd;CXz zO}|+D$MK&33H?iTyh+EI{QH->$D0ECm8w6fd%VfNU#WZCNynSqex*9*q<*D3?iARM z)a^g2<4ykkM=y80$?Zq#9(M}tPg*a;*N4=<|ESw9bOpzgbbQIbAE=Hmx&1!X$5Z_~ z)t^(xjof~m{>O{dpHqD~{f`%^Kj&_^{W;Z_Q#Jm@zdxsr8(pqHr`wP7Id0c6q}$N| z>bvRo+tl%-ztd0CJtQa?@i_)}niP4{?|f4@!j*VJ*T6#Q@N zui1}PCaLN12`3}a#RQH=K}$EP!osTIm`a?HdmWZ*2$<04M7&+Q_z zYqOsVP91*hq49N8|Ix{08wasV8E*!SxJp);$*iwRKaPdTFQ%f00Yniz&ow$jzn(uOlUS?2RaI?&AKE zm-|T(!>X9Ws**FwRO0@X!AIsaL=^8!8w}yk2@E6GtY}mtU(07|LqWop76ZF>mZxo;!of#WS=Fn@d-}i3?dhC zf1F%Q8}9f`8H_!=5TS)R-i`tMCMDq{&fxaqEFY1LPjHgol{1KB`QH=S_ymzG(|aNd zI}pmUy&(>K5T*Yg=dS6qvHD1d&(`vnQ*9Frv9adf9fh;u8)s{@bY$8kH8*(n+B zJ1*`X$M?{#z$}+)w@0=Oarinp8#wOI*UOngn?p&?v)sto6-)fmvxH! z>+i|z;QMo*>TA?*YV+bs5$!?a`rQ5rp?*UzkqLtXcv!9?K%PuK` zqNsuzh(as|APN8O{(@-d&(EVh$nC%4G+6y}f>`yF+~yimG?c95Hw8&ylg+CrDQu#7 zv5QZo;v9Cvd9f+x2%BJDHkAxy@80rLw6?N_A6{lv<_^DfLW!vH=>I zFjAVD2vVAxmZY>cZOL}H!*nF2v$>O$yG>V8x|^P)^frA->1U!zi7|1c3^ehi3^qeZ zNisu8Nj1Yrx!*iM$|y62OveN>iIgd38u5p7~fi8BL9i8q5u8Df%18ER5V8D{P$WrP_?%4jo|lyT-^QXVmnk@C2C zl9Z>-v!py{W|A`7%pqm2d5M&l&3sZ8n#H8NW|ok$)GQ-qg;_<)8nc#^^=2a}o6KfX zwwmpvykp)Y<$dhJZu222ADO+Rd}8*K@|ihE%3<>bDPNgyNcq-$Ps(v~f|MW4&!n6( zzmamroFnCexkyUTH9omXxyIxrCBG?1N?}u!l;S3sl?1e0=| zxq*}$&CR5gHf2aDYi=dwHdB$5%BCtQ)lE%OYMDBu)HC%-X=oag(!_+5(#*6VrIl$z zN;`80DIHB`QtmW&lhW06C#9$9O-f(WkCbQ=LrR<(NJ_jJOv(_GM9NT;O3E;EKPe;3 zNK!_dv80SM6G)k4CX+JNJWR?X<}p$pH&2rCG-hLtnM=w`=4Ddmn}wt-Hm{Mg#4IIc znOQ-~Dzk=^wPrmj8_ip!ylu9Svd!!uwDIc1TNZD&XA!Wb$jFf}sFezV{ zuSogEd`rsr<~S)Q%#Wn}Y)+B#n>jLUWJ5Q*-H!ayWr zG}18{)A1}aFdvy%j+I!24Q3O$8C$Up+4vA2V=oTj8~lV{@GE}9P>;`8Ql?`T3Y7IJ zLKa1^QU436YZ{Ugh9+nY|Na=sw8vti$u7_54Yxl=bT#Hd#9;sinR`h|Fhfa6MH=qI zXpA!xNSS0NlQPvjOv)qXF;X5kPm=Pqd6tyt%uG^dn>nP+H7}9!vYAiHLbI5Z*US=9 zmYQXxtT3xcS!33cvfgYYzYIk7G&W602{+A1X<=HC(#EtSL=9;eJ}{> zFSQYY{i59QO)GIuLTBv5Ib;X+ zc634{x*{1<@DLuuB5cBD?7+LG96Lc;fJ4v!bY4rswd@N)&Ur2W_s(ls8^k<^EWC}U z*f%3jL-^yx$PML*=!L*O$h z?Bmwa>O%Y9sfQ3$gx^5ahH67apf$!}JSLh4$%ilvFX3e~pUlJ?P(7*jCX3vRt>yrE z5PwyFL4!k9LAZ$|yP_BRBHF}}1CWSh48u4)YO=|*_@7d*At;1xHO?nX!dQ&M^T@z= z_yMP(!B7jK2#UjlT8O}%h(ZDqk&JXK!(MZMl)qcIA(C@EhaeegNXKGiVh7y14j#?} z?SlE{->vg7oqc_8Vm&tETO7j=_!+10E6$pFWjS7lbd1L&OhG8yN&}H((#dC#fmg5q zuOkyHu^JnYg{|0*_mPc{u@9fazYam(Q1%C+GHOBRM>jwin&BDD#vIIr|M}8as$1Zm zNA1+*@9)Ux+==h(95UnT>KP=m?IUAN26+NEux?uhQ_N$e{ASLP|CRL(4lQK+7hmH9 z&f<4msqR4(=LFw}2h13936`1_~%o3qR} z_yqsXdH4TH-39l2`;3cxpRozs@D6t21MJ18H~^-)QxJtw0hQ1QVQ7MIbVMZjA{}QD z5yW_HNY6!oWn>^5PHx6SLv^%AB!(d!vyp+fu^qdx8y_K(ZKv6Au3-!{gdzscwQQ5* z<@L}NQ5Xm(UyySR@|gl;J=8}7gqd)%E23~8((wWg;V1lpQ_u+u*TI8^NXIH{z(%OH z!hc151)U^uE7FT_zBw|n6gp|56e^lfvK2D18HeyIau?$>zyvHoHjW~9ai%X?nl_|F zA_e!E3FI4i3!Cw&IY5e2BFHI@|MT?}ZU}O2g2Q&a>MG>aQ=m@4t$ZHk8Iup`XmK0u zQ0ghxC0o+ZPA9<(V*b0A`4#sd8^@s&QvR%-f=*Crk4W<*IR}Su7+)ACImr2KGS4@K z<%XSnlJ61Pnd}=`%Hwet+(x3Bw)`U{8Y~ZaK_Zn$G&1TG)>5+h|SM_ShO$3zF+j`n6?bWASAMmFZEbQza6>xJ0-tq$+~tc zEMWb5F?!w1K49E~erU{ka2Up5tSd6TYsST1$im0ihtI((nU_|a zW@?ZUYHE|BpA@;>G$f_5X+lc4X+}y5(~6WfradVgOeazz&0VB)G2KY%VS16$$J|3o zl<7}OtQkPcAagG%2_})0WRpTlnz@gZ;TVCDW;7||Fdh@lgQR{Ir{ZBeipTLJp29Pj zfmxW1Imp0^W*#Z8U_KU_S4nvtORyBnu)?e&SA(y<*Jg4HwqZNo!MoULc9F8%d`QYi zW-lq9nEj-DZVr)h#C%E0*XAfG-3SMoH@n)9UmZuog)hT^};L&~)# zA1MV)AySH%Vx*KXA*5VyN|JJuDMiXH#zRUuQ=XIxrV=StOf^z!m{3w`n?__~G(l4| zGcCy0XlvS&(!q2hMfH*;#oR~ASfg6WSE`r%7`Hu+xp)bSvCDiw?!i9uDJcic=cF7m zM@ae7d`-$x^BpP2%nzjeVtym#49?;LYUW{nHvLJ7H3LW)WbP#;!6cHBY*I)`Gxw1) z+&n!f6w zH%M7-R+6&Xyh+MBvw@T>yoI;T7E-pE9i+T#c9N29J|Ja}`IwY_=2KD*n9oT$WR8&X zrTLnaqvktOj+q}wIca_(k9 zTuVwmQ-G90rU)s;ObJp#%=M&{G&hk_%G^SV$CM+bys1D+B~yizYNiG$p{6z|b&CNQpB2Nr^QBNEu}A zB_+Wml9FsvNJ%sIkuuyoK*}gHhLm(Oo|K8^K~koehe(-b9wlYEd4iOu%nPJsm={Tz zXI>#?fmuY#tLAl5GR+&LEH^7jS#91VWu4hTN|xC~%4V~blBYK+Nr1UlYNEw7AOu=KAfjL-!C0LDh*pBzG5BqTx$8Z|wk*lmvUQ!C8 zFp8lBt}{21rBU8gAf=M2LRLp8>YypY(aJ=TNtj?(mS^1sZoTX%&fAmzh{Zq?Ps(63 zgiJIYi14^F1lY%}=C6ux~_~o0g=sHf>31Z#t0D$wZQJm+3-EH`9ZZUZxKz_n0VB z`kPo%2ADyl+-nj@NjKw3nP?s)Wr}%-lxgNsQl^_HNO{UUL&^;EJSpYo`;;f8f~iDG z6;q9r8m2ZWb&C zNQpB2Nr^QBNEu}AB_+Wmk}|@KBxN+lAl-~7WukeIl!whDq)azYkn)U~LCW)H7AY^7 z3{qY+^GJEcEFfhOUPmUDW2IS5%9~~#DI3ftQZ{27c9>J7l)cDwg?3z3L?%8&dLfQS zA)_S6;SiC?er>2D=Z&a~ju?b-Q0?Tat)IMt`)1=?kY zh(JrUHtoqsBw!LUum*c@9Qi)x7y-i270H;21<1k?oJA>ie$+)bBw{)i;2opRre$%Z z`oFcQuf%G)ldn^Vqs@-MdQna7_DbB&;_TA6Pg6RFc>7Sh^`SC*ggBg{;sn-zy4xNf z*)znM%KiYip3{sWzIsj_tiIEfB9oWbPU&dViKZLQ{5*R6gNCNHZCT9NOXcHHhy4y+OWiwxR|7YiSZBc zpt#hS=;Sz0YTVFaafvZ;vAkMBeBwaQfQ0CQp2WC;(P{B~Hc836Qd&|O5ye5dC`fnZxV=X0dfo>{r>6B8k`!Ab zC6({XMgGMNkBN(mP}+ zOglb5-kd(LGS%BuluD>&o>FLFaZa#)#Hn$qHTyHm4~|P?S~3l1&I<7!6Ahe}ese^O zW|ym(IDU^AIxIRdEq*{e-y+}N$NZqrlBJVPt%Rhc!PTRg*Aru_@g0dt7{&}T(Br#$ zP+W8@OV?Omvwz$mzVO`3H;pdMP=om%YWb?;Gz?eeTxzr2F6Y<2)7sGqe6gbwk_Sac zr^dv`_fLpU92}FFmXhFI#tme-J}4pS{SrR7-%-y+!mw$(IRX!)xv`KSBK z8Z=9c8I+X51^&6$zscq9ELofD!($2Wf7@CbcU@Yp>6Skpw~otgv~=}e`^WX`X}3s9 zWFhUl!F`<#G@B)O7g}0Kc1lW&yE|z}ocB)deGbt|ONrM4B#9-NejL3^OwWLnq#+(Y zoz^KV$*bu*-N?gzOU()K)(6pnGxdD^n0F zzbUDeD%Tk1TNSBP*?rtStQ%@N|MTO@UjBi8uc`hqdTb~fq8W7TKN=5Qrp;B(Sm-h0 zF@#eFx=q~YE6e3EaG%d(ZC$U=x)CDK8&Mbu-QRuw0$diI)8L-hP>9P~Hx`d+M(TaL zuj{t^ah*g%e~4TxSOh-Z~0Wkk)Gq?EXttp3(yJ-DW= zXlYHh!^EBWV6x39VEK1Um_ zEKmDC`Fo|6a#qk%^;_k<654b4%0*J@kZq!lXsLz7!8*4N6SO_yT!TyFbD+U2>~w>{{6W!vT8u8I3^eE;!09v-K8SpQhu zczvUWy-sPn{R)4p-;^GH*(p8jve$OKG%afc{2h1EuEoob_InS{1l%Xx?&H44l>zN< zXzROQp~4m3b^l>QlKaIEs8p^(g>seu_*;MFahiv!SO2TWRj=;^6Z*6%x!eA%fVS@DnOI&1I$($d-Y1&)kMNw7^mckfNb ziiKWh`~)6alhk+BeLr{e{z~|@$J5rblAjsx`Ug$#I!rOrrRAIlEFzp9&_7+4qiXQa zZGY=)UTPl>XlDhqzYAz@q^(_8?5fZf{k=)-zT>wqi9M6-2#@)H#C-)^R9n~gnH~mF zK`>EAMM0%o5M?MqDG3|tl9UiJQS89(_S)Tz-2q;^yA!+h`>%86z<}N-?&E#G;kVd( zpR+sGUbXjOIgy;itOR8;HilNf#}ElSIr*tNr9iaPik^bTTFc4O|1O;ek$W15JdV%< zO=OGwyiuWYX`~f|C26zr2ew%*O&-DBS;3eRnr0+-` z!O{@O4`UKdmc1tcOWWG#nqUjId^1s;I;N zx-L`^u58V+>LV@T53VA<7xUR-~vc1&|lRd3wztP>M6~oR*??YXHF$s<(X;D1S zzLl<>62ze&%@cxG0F$PnS#gdm=fJN1@a**PtTep9kB|2nepbdG&Mt>?@7^HvPtLV$ z)Q;teHs~|aC~G_Vg8I@|9o~X4?V)^_$xBy{SjWF4&Qoelr{RnqJ_~$i2(*9PUsaUNCs3{7Aio*2a)0#;* zlg^*hsu{WlE=o%!lB$DT>awy4S0W20Co(xHCK1}FOo(N};~-KB&&-92AO)m8i`>hp ztVqe3l>oVWIz*{)X&EVQp>2?q*bil9LRxlm3=!q2X{l!HD*hc4TU|jjYjYcOYgT6k z_MaUlrtxOT6VQfDSkJVFvXzM;jT_Wx;b>LnuPTKxQl}$5EA1bAnC!}FeEIM+ggrFE zsR+CC<$w#Ju1QZz=cKZ1gSoEY)6YSC!q05IlA*05Aw>cgCzGGc(8)z>lrax!8X-)> zVMfF8la}MBF))wV!s*gk6#gG56rGf?pFtYhTYkq7mDbhF${e~yc961DlTy=iQrUqz zin5|m7SS(+do0Y&&7+euGF>d4lA~Q18=J098PP5&PSMG1pq*1}Zx>4|XB%s$%y<_Y zOJ`dfr_5{@8wY1wE2o%5_LZ$uW)}Oz)+sH=#m3gz*4ilx9z?cwN={|t*gHkVupS$y zXx6mLLAHF5)qRrw^Ym7IM)m0B8Af}f#5XwHJ-|00D3}om1VW)upd}Lg z@3^MCtm-SuBU#lR;9Upmo8K%8>$dHm&3{*g{C~%M%8KosMT#RRs;%tIE!p{$1N~Nb zCQJuNotnw5f5YwiOd|ShAHW2_hY!F{c$g0#gx>-{`x^hO2!4w5Pt}+97OLe*)RAP& z)iAzI;qu{z2vhk#0Q{avjDY|k1Vk!564BhqTxB9@np2>ytt}{PB+FOyB;Hec>IAX-~CF ze)?5(&AcKZxFHrz!?wg+8JHXk6#|$xC=gAVQ@lLR(htB zg$3xngzPADG}MCaf{aYowSWmsc5EhJzdjIH(Y~u$=e~HRgJ%&mToIYd2(yF;DmD%z z7EBCSRxu*NT%ia73z@(gCh<{0KxAZ@LcEuptc-|Gi7|(ri-{^D-pL7S43mbGVZ)}_ zI+{k9gSRNuXK61LTouaW>of%A*U|`2LYVe={{3Nfow;el(lRNq=81%XR9XgWGr`U? z5Se5E6AxWWDlB%Q)I)BP*|aPW9O~vC;OD3E_Xt7MvggX21Q=6s^OesV408;(p0RfL zF;l3=(q%U{w*6YRVmhn+UDPgL??QAm^)>xypQ2wL;;5#7!+KvT`W1aV9q<1M`gjxa zB|4U;kNGf9AM;_JKIX$beawe>`j`*%^f4d)JM=N1_V3cie0rWfmSC`W{49l^5bOVh zpO5C9Wwa+LXb#Bn@9*N!U*YG#z5ghFW>z78qE&dknr65Gp7UW|uf`&Djpw}XjE~3D zJbj~Lfz@NpXyx_q8I zNG`#@Qw6mNc2WcchWG^d!&8RC5#Z~71!>s!q9dNE{r}D0?t(svLYeDDSl@8bg^cY% zjz-|$ZBoA@yVm~P6jwXtXSI6vs|9oY*?G_XuMm%25PY=qD}fF5FP)O;LDtAMGC8w< z*{+q@Ut^7wTaXN2XG07)?d_q#sy3cbUQvhfxKW$@fd2_M-Wvtn_=7}=?6-0bomZxrJ@{WMmQvI(M_^8&>{zsk=CJ|5Cr+tKPj_+(XUR!r zLS$yDF&Si&Y89gt3)4o>m)Y>N@f; zN2hvYff4Usp0NC9jg~7`k5x``mJyIjXEG*7IGHBRJCegiWTk~Cr=`Y60Da^{=4MjQ zvSb`_qtYCctAf zr};3+%t(etdx*&~4&M`xWD7r%GHS6I%gK|rh?o#CvaDsldd>Wfnf({5l5A~h=Aa&^ zPZZpS0GikTV4)e2IfNp(axbA=!Ub>9*Ho^Cnv4lN&gseimcH$`AWN=}Gf)pr{Td&h zh5CYh`6v5I6Kyi$6Xo&d?--+B$(DG5azB*U9ql`zp2Kyz+FGX6>1sp&Y;DO$|7@+v zNB?ZC$VdNd?a4>~Z0*QL|7>l@NB?Xc$mfvqd+MK&0@W)BVhAP7ZP>krt3S$dbhdLw zNt}a_H5amW{!cL-=(&?zA1sw{dLebLj?@Cmmpp7aR%|!WBi6?~W4nue#`YQcTJR~! z!^L8|l8wdoC+lN7tJKHEW4o7q#`ZDmW4l-Ff-&Oxdz`aQzn4qLv}P zMZGm;h%6lzkP7Kb9NSKgs)y2pNFr{Wz#GyY0d^{z#Gqd6DI$#rkhdg)M9SgFC|(vy zo0w)Uuv=iIJ&;8a4p5a7*l?m2PGs_T(MLldzvd5 zM1?0#xIpZN6Di#Bshk8*b5PDD;*cEnICZlyq?AzIR=!15LBY#|M z&M$IQZ|_h7vX*(QxQ}g3hLWv=y5+24fwGh$D;?X+0O}oeTy@8zmFkg)_z+8gJ(rc9 zk=6@>%$Rb+h~6(vLxV&G(-^UOIzEBM$kIDLBd&T`kVqm~G&jf<8pE1cLl)0<5aQsOwhaK3&Kth^mgT+WZ647i?7OXX3$gkv4 zKZlSo?wBdCXUoCR<3MW~#ZaSR_LMM1)5u1h+LW!FF;)a?bWjex8auI)&T=T{-=SIR ziZ~eXrR7iqOOYl&Hori$P8yYp)Z9C{cKwWK*@;xv#VqzOMXy|YDzv6Nel4AdEQ)03 zI;Jb5VCR<;PzXsp2^0!1e#g+z4zd#v@i|S&k00wULRWHhE$Esxy8i_J<75-)K=s)h zV)u@s%mmcoEP#0A|DBHN6&r2A9oKffgflhB^DSs!9k{=vO*pq2+dBmsPb>2lYPCB; zP~71A8ULQ_8h#hw_%G_%4U9I+z`9=M&H?A6 z+}Z#>ya0ZxCtok({i^`z$M28TfmHc9^E>*qB14dp6q}1qW$RgjdJ?~x3Qz+0a@Fes zC^j1^?p`=Du8fRkDLI^g2l1M4MW2oTwP=`nq z-2_l^Zqz_Mh=!pb={^W*RS47F#J{7Szmik@$_B>dT6r57K70UmBU+CSAB3ND5wz#? z&x+uuIO-<+U&tCYxRw8VHe7uwvRfIJ<|caFb$uos{XllcB-{KQ<5zLrbNd5d1I~>J zM@=y89;wUsL)nC%3{elBpRWslJpl3Z|3tkwix#dPU@`tL#LZ0J4URv!0pkQ#R*Xs6 z=_W_})BKEqAI)WyoWij*egO~>$va5SGeR9_q}pwRdtK=IlbBMEUp5_giwT8j9cc)E zk^Y6&>};f24A`trOK*tp5W=PRv=>lZCBPMs2Vf)cFMfJSwI$$FyTYHx%eo_@as3NX z`XMZGRr;oZc~b`CE*!Et;V9CWY}h!(6Z^rj5iz)?BO{wVUcspH_JM5KDxd;rivC?P zg2(zCj<>*>3hwy9h+CXmAGckxXjciBpMDMCZwUCG#7TSiqy9U|l7eZ3e}A|BL^hWm z13_;Q!uG!X3vm+4p&!4U{*GnyOLPnq#qh}F_%sOV5>hx+vJLg=fwJ49owSAV;dTfU zxxuMUIfA{bS_>Vf>}qC)f25iY`#)HKzoS1YqBpe_0;_4JaXEU26LS*zOXgS9L}g2^ zp)HC3Z&{{!S9WFlqcqJE#3waW7@*T#4lSg^rTL>a3n`5|0S`^^oG)(^!bF-H!R6<0 zWB8i@{--%SP5lQnL}?njR)i%bk&ed)d+&o4ymSKN zd0m$;djjykGvfS?ZU^ShOiUr;WlJ>|#VKeWpp5en`XfvsE`0##&jS&8C#I%TB%7!*WdOk0@ipCx9es!#| zIlcQ0_rv`s^Jw;?@~Z3q9S4?)GxQ&G;*2REv8dnv!8VnfKj|np7UdB|M~Nfi4*FlfQp;2~Ue9rm5vQ$gd{y^MSh@N2#d~pbYTy58#fVs6_%G zfRaE+mMQ~r@``T!iouy8@a_Mwf_Vw*N8*Z3m~(`eNu)zRqKXM8nBut^fPVZl^WQW- ze@TD+;z&r#ryM&x6Lt7q^XOM)^D?n*D36YJ&{0O(Kj}wvg!+SysagW80M`F_Kg42p zr(K<+Lp`2xbm(H#!xX@W*TPTql6Pb#jLNtxCL?jFT_P^lgwlXL-gz2nf7kv53#^2w z3>*Zb?a*3n8;9MAzjX2~%8EvPBGmP2g?{4cws&}@877rEJxh45&wh5v6>;f^XluAC zz~9A3G?uJ542v-;4SK8`oF2py10DPG=}H`&p!;9>3oj^IVrpX6BGf4ube>8Jj2yXxL6Q(Aj0|}F$-+v3;o}7geE#RIoX0VmPB=9Z6aS1BM|-T#;EpQ2bD9m z4qp>@Jf$BW_CWYQH4XW@y<5h$m0^4F%ktR%-%%T$sOMi%8(w(F?~HBW=Vy;M{62uT z0L|ybiTMKjDm9j7;jCsJ^F@8EmcQ^uO;E5pYFtC9 zP6AXMjIshyM#Z|QxqVJ+P`16rtK}s)J(h@jd)4_UeLS3$QHk6=m$vyQ z65_9dOGb~oF@dN(DUpe(Oi*ZWNVuEIyxz9s3teqbLmoC0Vu$u34PnO<0BR?O zmi_&!^mHD9%OEo$F@;-&%xg}$+8L?oFcKf`2QN|Ae0Tu7mKxz4_*ssp?CuOE9eJ@B zMV%)ZT{lHM;1fdHWZS@MTQC{e8;Ws4J0><27Afe@RP_ZNxP_R^G0Hu`9K$iCEQ~*U zV=Zk3sj*oQF(+w0(ntc+bFxvT0@Y7()pJY?Yr248Ljin^@N(4#$Xe`PLKq% znDoSSLWflS$Yh%FxtMA=9-YbE5sgEA${g-2Ing_8ZkQ!dhhTflg|<1eEL8fK?FiP4 zlrl79mkS-A<`1)HfJEX1ZYj8VIXgw;9j=&7XBGdcTy9i;a$*Wp!6vch@#f0R+!PFQ z65TzU-V_uU2tvN6C>K~6r^Y15^5X2oRI&%4%{T@2Adu>D^O?-HXsP42s%#u?C9|$R zxH|z?YVq}A@0QJsjZK0k7ehckc7LWaG-}&3J1r{`{l#6=%vONRad0OD%wl4D;obwZ6^(=B5jO%;oq1CrdR%$~IORZZ zQ3`8>g+!P;Y{4+NE*m#?H_6CO$3#IB_?xaZICk|t#*`mAf-Ip@V6Kpn%UJ}mNFEpM zLU2oBHTHIK!j=JgE|tU_3hN|7RtkFQrDY@iOSaU*+YF^QC6+u)=`x>cwLmA?lr z;ZZ)H?np=Y1r^4C;6J+I7wxIIe{fS+lRZKnS|7?dBm~)VOz^A(WfC6bIU5+bu%~!o z*n|pZL}ID^+f&Z0L0uN?7I4QgE?CN?q~&)I?A<7<1Ippcvz2jN9UpeWpxfa+w?_GE z@Nq?onIm%=X{mn*|5t2(TBb!@j0F%_EFJo-_%=Nfm#(sizw$@!62-5`gCv-7*~!U2 z$IeQi$So0<_NH?fj0SM|@Hd1>`N)UAAWRfIAI`(PApFmV2O->CBRmyhQuOif3o3+X zSBQVG!u!Gs;SK8e|4u0_{=_MzE4CL1_%C(Lrbt6=qj^np@aMG9O{|nZ;hRp~V6{cO;*c$1!t%&kemkZ6b2-eaGW^%C^QFH*gG+%QChhtg8Bj8rr z;DC79%4I4!grV4n`VgIU0WL`i%e_UIfBzQmiT115b1a>YzS94~t$`>Y%U_KtyIO#_ zNqys%*1Kg)ZmLq1n%k-+EXB~9F|9a)l?<}DsMN1nN++B-WKxhf;q7d=RL6X{)R#ly z5^m9{J_ekUjH zFjF{7f0;BjRk9xHKoY=ETKXk?<-Wn7P<*x9)nn5s8bq%--Z&!T0182!^Y zBX3-!rzUAVSc=xYl%fsd2wKetpl7{7&xV$fv;G`8tMQ~PzKSDeQIh%@Oo>6u`lLc# zOdh;Y@f55&9}nPvH-z{?dnt;Yp{RfsYysTP>Y_W6ePuB8HZch@qvIn0Thep(O!vek@%WfGs~G zRFfjae8W~v%Wxs!S15+Iobou1E+SWL>VY#qrPv8i;i!C0f9Rq<;)zFVeOR-qw z6;XD%eoEu|=_t}RL^^i>DdUL5BDy#nCljzA;R7c4?jhn3dBew5!B1NP{RkZs#GyRM zyJFH(!sBthv^wp-tN|Hwmfr2tR$#!g%9+TkF(819@^MZQ0&jTeU?)1NS7KUrCamMw zqq8`}lL@o?7<{7)X`3MpLT0RZg~L3_iG8@eF9o;iq=H9{0xE*Y6Qn5i7!7N?ZAkA( zZTOXpCL@QXEa)FnAu)SM2dGhj?|2)qq!;x)jV<*N`3Z=$q%idpZC$k0k|;@A?Wb@R z0KKEQL~c+Wh-@Y@k>b)^C!A0D(KC8S@hMLtEoiKX)u3k-r#gW0r83A*@yJj4Plh;Q z5nwam2;d^%A>cEh(i@QL0AoN)fHxo*kO1fp7z3CISPeJ}(0;4W7y+CCZ2*CQE`T0@ zL4cWnWq{3qV}L&a&j6nR3b0a2fE~aU&;bw)NCi-Ps2$Xo)HejwhZN@fgWgk{s9&gk zyi4!-F`)jS_VfKs`BGm}Is(3b={@C7?G?G=WYGPt!g0Mgvu8D3f#-zGoeF5>|gxJyaQrr@cwXSBn zgG1fjJ%fX--F(`p$fxq~2=eg{4fZ6De?W+;gUZKO<>em`92yuH5EP6Zf~gdrU=N=l-++KXKQA9&Pd{HD|8}Tbuum6HKV<0R9T4cR^79M{ zz!h=+ZTwM-fR6rfke6o&Ty;tQl-NJOEz~R6KfuGYgMR>y`QTqCPj~+SU-x$Shm8FL z{5+xTL;n5&s1Py@M5N$A#0l<YAP;MdU zS^UTQPCfzj*2_1bBWmUuM7%8;*icAk#8COS@eB&^3J#{2!9nic z=vQCQ5FbBJkATpSkWL|P!JRv?O$l*V1+t~5si`^sM47oVn7c)iVSHRp)~WjSGzc^TQKmSma}MMfrcoS3mRNI1My&RF_1E;1z%djh>I6+oHuWDTST zr776cK4qdS4UwaH8KGDzp+wmrqVWxl%uI7Pe2uEY=FC1*F9LIpF5+Zr8WK740Bkqh z76fh@nj44{{OKAjTq?#>==gq{X5k!}s`*GQ%Ps#1#BW&>c_E)#h{_HLs+0+73s*QV zr{&LmnETP;BiN)SMialOmhh>?bJ)R2Di3}!j=q2e-jPbeJ-MhnQF&_7E!%!|#@usO zI7lR=Inm{GbVozfZ0-XzqW&NlcU~#R+y|PqcvwcVpG@MvCaBS8nj@e=M3&V{O?#F$ z!Q96pfSZ@*!L(hom5An;2-M!EoFv&Cq(P>{A2 z&UCY^on<+&(fu%0$ilNM0#6l}3Qo<{1U~f+3CJ}^RV{Bvcktro(%70ESz0JfNYt7> z(14!eSPGh6oTdYZEg@mhST1;j#h8F4MnYhU$OhSI4Wfn+Y5dZ}k&g#{jhY%@y-nHGQ9KvRu0bOx-IZTYb!DXB&b^HOe&ErnGpn1dk$?@Bp? zR3woS$qv}o;ye^vG8-txITg?gB`keM?NO)kNsUYgVu8GtvZon~if3h@KT1&(^`ORB zvGwOLqIn0p1gUI>Q9D4@l1c&Hi)lb=2fmv*a#=}YOd4OTfHHhUwF7eE~6y?_pLV)(Kb%XaEzV6M=@zJu@;= z(}c{-8e(>n@_0Q8Or5&_Y3a_Je- zth}FiCrU@p`Df&(@~8|-$NMQAz2oC+`Zb^N@%Vh`9Z%y@UVL0CkDgQA$3z!aA09Xpx0N4!J z0oVgL2sjEj3%Cfl26zB?0(c2{1^58?3SguLj0B(n=mKg1i~!96HUJlZ8^9aj2M7Xm z0)zpg0SSNYb(GC&_t6F_`6@gT%|5WhjZ3aOth0QCXH+tJ*kvnj-jXaey#Bn#o=^YfJFT_`QZ zr#uOWAEY!iR`ia_BYt10_EQ}w4|0jOqP!^{xnxL7@yVs~C|`<8`B6Qo4OB;RNnC0T zptMvj@k+J;BLJmu2B3EopRX&WqkJeoJ`L4@%Ha89s#jw`L-boGKpJ2WU_4+6-~iw? zKv!jMzEN)^j0V-pRNOyFo>RJKvME`z zsXPtBKt4&N45wA0W|V2&8BNNRBf@ZMJ2|;57JW+vmIxWdq-by>NXS_V(B{Ydw2>kG zFLq4k7laCZLa@y61DpX-kTAH&(CE6-4YYh@)=Gr=1-Z_Y=fD^Z0)Z(dvP(N!ZC8M< zR5Jt>-XK_xAY;l?;!OEX9iLx}jaDm+IjXa?t9V|8`86lW1Z&doto;T%_^j5BrOH98 zFr@@EOFDB@bSVK%HD^iUGO}NT)@6Rd2vUl2932~p?+AA8l`;fnWwQ(hC9ObBmra{r zadpfuX;KE)iLjDU4N^~I?0MFcDMv|{>fa$iMKv@Cc1>cP`I&8FNbJuFWLYU}CYUGC zo~VPGs^^wEb(A_!WKW~dQHG4izu-%mpE#(pY=22-mc1sNQp!t|e_Tq0vlS@|@l*U) z@&k4WsasUK7Rr}VfsA(D%sI(IMo&~vv|n&TBxhDh7(tBil^|AP zD;y&%7Mh8C#djt1gdfF*61il(u${y}*qaFwwiLY*-D3`j`ioC8D@3^xBVno_MbuEd zQtZKe5v*bIMG?$>flNGE++Exprt2*P6Pf*zSps*Vm*BkwgnwFwZzL`>;XeM!eP@&C z5u#_4zylrNOS zZ$S}xbgGL<`(+uhq*2=~d)F~wslpG4M^xj>J%vA4iEb)DopKPDdNWfUm;JV_`pz5n zb^)acq$y2#!&$JyE$PEK+*72RkMu-cZc)1@;ZhyBOE}3k;xBSxzrVv~!#qM7qF%qk zC90LrgRgX{NjW|+4`M3XIxabj+(dkC9!+3O4LR*rd!#i6@ZtXO6IIQJ7r?L72ycU* zs9*m5efWto=EE=Hr}4s1E|81l(yCfjb*k#stWmRWO(SJIL_XonbmL%RZ| zkytJkYsu78RDjov9JNCik>(o{OC}Zy#d3*y=E?+&M2rferwGqrrpaaaoRCQMRA((X38AvUZN@YTf7`Fzo^u%IJcT6uV4iR+;r5A}X zA>``yBM=A}OnycvrnM}QO3*Qs0|r?RW?j9kB$zh>0k8lqWSLwj!vSn$f#F7UiCDeZ zgjiG(j3g#HOF$2Frz8+;aG&0!&0qEOvU!Xd+566&RF*VnkB)k}t#8WIU#c@5z9f zH27G4S~^v$)u>&!fst`@dey z7tOjuE>2_J*i)y-Rff+Oy1{+a%iDq6g_CQiz;(Sp+j1e?@%0Ywx&YU<$-AUV?o8e- zhui}ycV_;jp&e~|xid%o<5TvnbZ1;9MBM9i+ue1{=H7MJ8h8Z0ymR4R?RFj$&-+P> zOY%Gz)rcb?1YTiaxgUw1=oiB|%p{ zMi2$TT??SWQCq&UF+dx@G#&EuxQw(E^|jS7k%9R~B5&wVA4>$$1~X+uCKF}61Q`%T zhjn;EeUj71AsQm!6MtkNLlSe1SeYOclK*8awYri!M!?G2Q(>q_XA0Q7sDA9l^cnaX zMsNDMrxPxZf*uZ6__4)8U&4OmQW??J+Ei&{9~PlBQ&$^peuqA22^Zhnv9z+bv9+^z zaBLA76^*YtxUom%Sjw66;-VEc#B&(XS+Zy7oRlz2Y|NPo@$X=C3$+O>b~NG)K^zhZ z;`a6!>O3b@40R@*7iZ)$__#|%niP)l#_gdftLqZyRgViO( zLlu~Tm`)^qYzUAy;fOun<>#bRSDv&DU_X24 z!>2P+=f}IHW|uHoRWPa{r!e!U15xAL68>?7rCPDdeZ-Ouec=cODeW?0kqf~Rg}I1$ zf)6&L1USqpxFr0fA2BBcxyaMSrGbn3TA?!AvsMGLiY1FB`^h?J(c7?*vGgW=? zvM-lt(m@4`!``6U9V&X$&zR+iS5 zHkP)Qc9!;*4wjCVEvzi9tgNi9Y^-dp?5ymq9IPCzT3B0JTUlFM+gRIL+gaONJ6Jnf zx3ICav9htYv9YnWv9qzaajtO3>+rrM$&dSc(&c@Ex z&d$!>&cV*nu7$m&y_LPSy^X!Cy`8x?q->aBZfKV-sSdAH3`w zAT}rtpYp&rYqMkVjE_4I5u0d)M<7hA?5A>AE)2^iB|3r5z*TL^&9`}oOJ(uleE5km z<&XyK@bJYjZkqC6vgF>71eMK_B&3+v@vv48M4mKvqu|miqII}`HOCA1YdC4#b&gFK`F({9eL&E@#0Nr{s%q~15Jixyj2!C?`(-l{ag+;|; z^Q05iG$BmL(-hb90wdBiz~+gYauM|g@*ok!Gq{BNO5oC*VN5xU&RUJACnOLjE1aV* z%w=$23y#dlb*9^0@d}JSu8vkJP1tX?pfF6-2*wEckaE=mZWFknaA}Q&!9~+c%b^^~ zVQ?;aY5FmUPxF$m*Dw1^y{>m5F5xmFjc7jp6c>kc$>7d{JlT_2y7Z?a@2y5vWO6tn%3ycIk#7V-n zqV>XE5VQR$JXh(w)&=23;T6Fx$!+07@gw02Wr_Hs@U!TPppvn3EB}CTbLYNT~pb@KG`Y3m;l z6WeXe);fkVxk6jNhJ6dCWy>#J)^Zp>VVO+f+$t_{+(g~9@I5bHc8PlX^+#~X%vt6Z z#wMY2<}dhT(b8qBckDVS)vjbv*QvE<`z1?Ho|-SKRl8y1R;?dCd->zgVX?AN<0d9H zj!xcfeFK9-J9O&Ot$RdtY+O=i@BRZvEn2a5-QLq{)~2TIp47czUx`R;CW;dYEX?x; z*A-b+F%%nV)sr-rc!(=E%UdBe5*vw4h(sw?C*ojqHKqUBna)g=u?btD2; zM{zreg;)U=*HvjOuB2rza+1`Ri7UwheH?6bY-Hwg#h@lZ?V8J*Rj=K|P``$jKML^B zsU=fLz2(MQ+1hTcnn|4{3TbzD~siW#*7pvNpwV7vZ@m!+Gu69%zLlMl&2eb_0g}SU#X*3t-Rrb+K7g_RWTS6 zSYIm5JKtQ=s(~QgOjKJe9OPPG*GVE6bh_E#2YDZw`id1|VZN@1uS?$kmSC|$C3S3t zgDRVfV=8q}Y^_8 z^2&&+CCfX}STO`#G_l9v)1-2lmaf83yH=&zI#nxIsv@o`($lM^Rb5a6V&+<++Oj$V zLt*{uN>Ou>nYOvWQfwu(7AzGm7p@Smlz$d}k$e+=7yZy$-8*;m*oBrIJB=PQ-tc$IipY zi;C~vXG*8LGtKwzF|k7?%$jqos8~n0sgtv(Psgs^x`)Taj-9X^Ne&&mdGCISj;<#( zDtSXT?ApEO{Kb-2`9nu9TC#i3p(Djtu6j=|JaxFJ*vCJhW9RPSBMZi@-?DYjzQac@ z>Q=AOwcGm--+$z#^t^Gia{bga!@A-92dr5;aObY-HR{#(f(z*UU7jMpFT&GR999RF$xuPHb0bRPvqsLDFdFk@Q??1pMHXM9YJlI2CM=aGHw5oF6N=bdKL3Kp6z=~UlZ6THs$fPn| zMPL;@St$5rLj|~S2xK6F5LJSBLR%`RY#{NM)sc0CD4|BBK(V{X4ERY`TBVYcxNhTc zWs0~*6Gls4GT^y8g+9*vwu&fUhds>>VI zsq-ykVDEK3#-tQ{P*%SGuEg?tz`Uv5hQ5?6#cQhl`5$+ZmvPdNKds*%+4(e`VrUG~&zX0*HQ&ED6Cwu^ccd|7AhLfh3T zbuT8Zut{_2d2V>Z>ie!^VlswFr!XhRj6Jq|f6e;s*M6&<;Jst-x0fZ(=U(54Yh0&L zPneQ5{ri+&i-&Y<7xBSzOFO}c39SY=pDS8y*4@#r@Q=BwCw4_)ZAZElZ_ge!c$Kd- zXv6LKeTt@x95hL5@}Ey%x@Xp}?NiI`%hLrPwLcwt@KnF*l89OJ^ghQOfA61@bE`@1 zbEh2#x0$w$`L?NH=#=T}lp_a6uOHJrQ#p5?U1(T%>ZZ`BUDqw_$1ginH-Clghmj4Q z_HBNCr~4+o5BD0K7i2$syx7b+Hgv_hq?xJqjT;=Z+0f?W$lXuQ&6e&{3`tGgxp(f2 zUZ$yy6&~KNbQ&Lbf08cUd;Drl$6?J*O*QG*y~jkU*m0L$tLMhqdAnXedna~~OAaSZ z8~do|#Q9In6KoE9v>o>0j{%*mhIjRtRJXycFFjst?BhFk&9{UMgKaTQFYS;#iRgUO zv$l(y0G=eC?(JayQv;X7U(+?ZT5XZpxR-s4&> zTiLX!`IcM5Z%qEa@>Fe`#y;9RE??_8Mqj(`z|nh4=B3psFsT|+u=cXwz3yvDp2^xS zTyL%axaZZt$T{yXn?5?0Dp@;km6h?xGu;|G$qlV`A3r?vNR995E2VE&cq^g{Q~LKF zw0(|?-v#;l^H)ypG}ZEdS~6*{SIN-D1&8Dj?{+qB(B!#eqfW_7{a?RVYJ?b`iyea??QRd!aJ{peBS^;-5HT#8rBTlF|(Oyq?1Id#W~ zvUT#O9I0W{IxWJ=oQ9O{uDRrG9@^)rS0r}(@6=X-e? zeGxp`-+Jk(Ngq_R8;&~H;d!ob;hQSD`+8>wxhGxl=wLfWB zoX}x+@c9mhlct|+H15P<-6Z>G&zFsQwsqL9Yn zKkC-@;FIfGUq1Qn%CUys#u=^d^eExS>~U3GH~zVM%8bkQ$qo}1)Zf2dOJ22+*_R*V zJlYK1JZh=6NhQU(m7hNS*k~~0!JXvxt*ysZI#%8J>%j4=>z^KbcVhg&%S&C>wEZ&g z?Q~<0^|NzSH;Z*o&8YkNh}A%=DcAGQ>t1y4;OZLm)o|d;R{ck1G){_pVrSwV=X|gG z$^ygH#V;gGth@CU*S2%)J8X!)G`NS%wbi-Z;}iTF-pLMVHGINC@uMXkIbDQzR&)uz ztFzqxgk<4q1B0IVGefORy0t$mYBl`0N7pVo6Y|d2n{ioh$o^rIzbkS(J=$_>RNRko zH5O+qYq8sJT58nY>1M7!GQ*0-=^Zs|;G+0aFwk(sz=Y3vGqmUIvW*(ydSUHZ9cYS^|)0% z=Pcjk5^g_;Pjq8xj}cY@EX~@Mon2T z@mRfD&qkj5tZg5rr~mx3&(^+i_2ZxAeJUFAwtDAfxrX;^yFSb_zP)wunNDjQv`$)$ zt2$!*x^2%k{3&}mW2koP?;8wOY`XSfY5ifxdNA=tMTIwKp1VEi)`X?;g>DgyYQcrk zw~SJ{neIG#Dja;ZYig#B$o%m5b0_bFspH>u9e8E#$R2^&i(0HT6LjyBJ7e4k z(NwpfW6~ihy$8L!baCLu75UC*m-Ln2KYHP|b@8e2i1RUu5#wjJt@owLseub_Id>a6 zP#QXO{)^Y$()QjwcB$>gCH1_Y?Dbw@@pkmOj$aGvMx1VP#put7sZF?qRATT9y@B<#Cy zzc6<@=TB#EFS*}jY{=)iYg1~s6&&h&aAwtc>FXYEJ6uO=!EDu*nRa{69Ufz76#p@* z-7(RbXu*Mx9$zm`=;b=AZgH4f^o?7&_8q?X*-x&z|DM}By{`tHryp$I=eGOy$*<>3 z+EAl!*R)n$x;{%j{$};2H6ld0ny^m-X~^h`S{|H~-ADGk%9oT^NBoMO-kxl7 zSg*6sqqBwg-p?+Huo>I!^3IhP&3eW>n`3*>v_;;!jm0ab`sI!-j6bA$m(yncwfXs> zU*}&ec@|N}=hF()dm}wEHqSXYtoqv)QM0z5cL-Z`zNq1$Y!gGPBTj=GpBS2TarEFM z`$^W({ddLm{4n?IvSHJ#M8erW!qz-3^xHg49=z=9w|rs#z;~D9%oao~J05?g?>D0Z z(KjTz8uscu6_EWuDPd1*Pobd zY(75z{Y`7Ho|lvIwgg}OD5~gGjD^?FB4xJdNbNgqFZA|TSGrHgX?v&x0Jl-?RCD}p0Mcoy}O)? zI&*JTvl`PCwl8h_9j)GT>QDw zHS*%BdBZxLnf|!lvDWF1i~ejbJ=rKEC;!KU;_Jpj3}`x5WC!F@%efSHkV zA6wNw@b=T7!#B=Nes+iXEQuNL=96Pf-Ik-p*Uyf1-Iaf%d%9zr(FWRUJkNQr4_s+9 zwbvMFtru6uUhb$h>$=f})y~IiEGj;??BnnY_wy7N7yI7dRd=jNarXUk-}((s`4-RX z-aIya$jRYZ=jz8NGRgyOdO5c~eCFo4qeC)pshGEypEcDg&N)&;@n!M&PC-o1stIpT z?hoBQ=VWg2rWbLpWAz93+%x0+q&xLj4YCY%^}gi$>aYcK!tttcjfMSs1a_%BfAu!! zz2Br~Ud=vkIP_kLuKeyv#kmMK7tFQoZfC@#d|189bZacJBA#)?)vH&NFwM zI$PV=gD-I!L_C(kVERLk;X*3Q8X zFIZa^=sWEbtgYYDKB&jt1!G$8T0djNt9>(#PaJsQaqa%rr3O_Z-c8-U_hWabsw2{t&idnD zoL?sHAMUlyZRrcwfc9Z7pA|{sjZHf}&}-jJ_m9P!DqVZ9|4xPil!cDH!^=~f%TXjqmu%3 z-wo=wY3|CHSnJjn%TuKbLo*i6iX3*K@cZ}5eS;N8hh`7=6nv{T%sxE)v1yjH@L|y7 zsj9Ejmx>*>HgeSUHl4rpkFV{W2mX0Tyx4S@L6;8)y&t$#8~Sqamxd3oX8KK^`R+=% zPN%q)f9!aA>&)qhR{J*oxwYzx)>BU|YcfM7`83w5{^9$R9~bZZ5tKgA$1CU6x3jaV ze0vpnexA*em(NE(+4BA9;NX6#JB}aOJ1*(5`Qn)GeWMfVC=v@lt;;<8N1vi^E@rJ7 zv|kcgeYU^6+mcEPc1yR7O}t;_bDaZGiZ{gpKB?YKULCkG>EoR@pHIF#@W<7WUAFde zO6qnsWxC<5>@HqSr+$pp*BWLMG;(*NPSsvb+qm=nz|N!N_bzGv!qmLe^ZxUDWWB7h z)z#7a>f~#N9XI(e+Q01S^?QL{we@yXyN4^r{N7BAGpKj};{2(PYScaYX@_!MPQ)qe zm&1&@PcYZ3do4@9NU<&N$BJdEH*en2!Km8A8H02lMC>`QSF6$8#N_AG-v78=b=>S} zhgQCPH+En2+j^f{k3GII|J#{l?X>)9*L-TXnDU z``tRG3r8g_cXI1faw=)g#Es^X?g$ZFJ4TW*s^F-f4O9tV=FB_okoEwH=(>d(+6X2lo4qty=d-+Y=G5 z+MTFsKV(OX_MMt#+${RO?RmZLlie4ajEH@)$$#4ZR>sShxb&G^Wc}oO)2N0nnZvg= z9T9iZa8P(q>n{E6r1E7=Y@6l%h+goaN%6XC`(?+2Ece+){MdDDbBXZ!q>UrL#`k-r za%^q-_0B5ybG?SwNSZI?S6UGenpPKfu>iLhd9!^iznrwO5 z%5_(sm=Ae!GHaD*^R#0DUP)_?PMkAQk2yA4+xf)KyEUX&`fT-ZsNuRZwMeUQ#kD!Z z$9KMOAgNomhr;dTmM6>ihkWih&a9DM+reJT=f%W^ym|c5Y~!buQ?E6gKB-ONfTrn2 zIiGHR=&);2^8vj(+rO-JxYv^}qq}SgZF$xIX-84g{2cxJpVz!x{k$tfJa-#e{)^Vf&hn=ETvyX5?{ zO>b&z+izLpSkF4>x-wbYb2N{kI9}^_dX^WRN3>fL_X?Ar#dkw<`&dBbmhzod$ZB2 zT3a-98Q_(1CuhR&6+=F*zF1{vkCSyTRqpy^$K)qLJ5LUKylMYDy*7`hFMix&vGJ3E z%Z#Enwz)XHQR~VvBMR2vn|Efl)BIXG1D_R)Y-RB2#fv}kR~d;d6N-atH81G0b;Xl0 zi!Pc;TDl!r7QV&GDmJw7x>J6+(i3`bCpzfvX%!w?qag3J_PyPsFYUZ@A+_?>W^>lh zKUjIrnl(i|x{g+yiOCkg(WT2^&)4Q-rMo8%HTa?zf4-#T&V?5)H4kp-oB4cp zQpC`y7yP_Jed}c}>T=rT;IM5?TKe9ew&G^&M8BS5n|I6NEZfby>~enPz`mys-)TLg zsq6Ow(K4_5Q^RKt>3wzF9-GsJ8RDSnH~M|pyST%d%$KenDdUF5wVJwm=5*s;(aWYR zYr8178uRda=Y0d#2lvz485E||spj5@(6v2p%t@$o@$r&PRa5JgY+IotTN%}$XOoGK z(vOR)P2G6>&!eF`6Lr>YX{ht<(6qi0E)wVF%??)WcCSZZzpedeZX0t~+;wK3QQHgL zHmsgl5b-9*@bD|wTF>J*oUPZ{VS{5y=pPQ|6T%+}ZjOkvICR4+IqC47T|1nuB1ap{ zcX4jFs!^kyI?2mN^>4AJwp>TiecH2?p$(4&KfiY5a)Y+x$JiAUyANlMTe{D$*6CiVmd9%XL*!^vmUB75rl3p%sEeUkFCR7fBL?{=!EuCSB0mKw6dJ?afBkl>T6Nt5Z#=UD_iy3Vc%S5|F>OkeeR#1yyt>nokVf3 z@zySz6O-3U3LS=3UB7R?&&<|K8VzYvr_HKEOGD~r*j&piuF^cV)}2l@w*I+%k-uxT z$OC7cZw8E=ma3Qkq=}V$m0_0{#l=6;UGQ%a`#;^~r22PC?Lx##zdS}YZNhm*TQHwd zEoD7N8P!(S^O;c{CXdi{Hlw=0`T`Fyst2sk=q;mqM?MjmGO316B(HMUZbmhQ^_nET zU{s4)?FUfnWe6X2OyN)Y#hO;w46Pn+=X%m1^C4*lWZ2X0l<|fh{*0$d2_bnzok>SDn{RdDVMo?fr!%Z1~); zdT&SQYz~~!Ybu5FJoKwsJq^6GsI~qs3eOL{T;p5g`?U)KYCWZ}d}VRiZinL2+x~nx zk;3SGA6~A6~b0>V1SyOHR#BN$d8cZ;|zYaR@JL#0&_qtxGWtCG#Z<_bIG=e$W<4dAq#NuG)#mg;| zDz9Yvc=i$NJSj-Xd%SXy&1w7BLeGXXYcw$q zm^VIlvZ-6tMZtv?d2?QtG(7Td!1k?Yoc!EIpT9Mv`Rb=1H{4hnJACA=GdV*m*+7#p z%i`&Xd2d5cMxS3&{KKby@BLpICmrdTw5R2$@dpMP8drbQ=cQ*0f3KILJ2+h_?s@6? zv{jo=+$|ZMJ?+`i)9wZSj|*%3vD@(Ziy#-{F9*+AEsTDCz1@rGWh<8Yel+}I6z%cj5Htl`E6z-wE?c0?{n`W#k z8TLod=Po-<<|ppbZPak@#Z}8H6(#6Av6dffeqm*^bvl>Mj29djzo@n1-PPEYwF~4& z@;~3oy>d9dNp4W<4hz;F-?qrHbIl3c1nC`{6tC3k{_Vl3VQJkrHxc?i?;WXqxJ&nS zd7C6%tvU?~2)WRrAm>%~wfPN>tan+14+{7m?Rh?BQnh1`9qXN{<+Mu_?o`y)r+23> zjgG{+&i7s^?t5=)oA7EX0da*MTt1~GlHtSt( z%-sRcJjNYYhCkZbV^6}26ZQOytBsy9;8CwTJv?9T-!ouIg9DeIx1PIDf7YSuD>uHZ zSM|vo|Hs9L?mx?Oe$n>y6uq_?o&J2aU}t@k$m7eyJa$gIR9Yy{udFkHi|Kp+_&s;F z=FU{pqG_LLp?%-2?POOU0=k|Se?{xWIo4sb%o6m180xJTw48p!1b5~iFv^TPU z7uM9Vxh8o-?b+ThfoCO3PQ}qZUi9_u3zzrnM=#UU9`Wa`7yD4|o^8wjI*@ zXiTHm{e`BpcP%TK^7MqqpyPs?jE{{s|LN*^Du165UM71y?6|SovD!1@iRas?cS9Sx zC=L^$Hw=%t6evzfs&tHhl^`?WIIwlchX&uQKz~_3$#?6#Qm33<@@41tTJJdrwm)3r zv}qvg*r~NAa|bQOP1an0tLR#a;@HfGcXS!eH@=-&?W-+==Ph|S{{2V&J%fnWi0v;I zq1zHCj*n)ww~fCK)Kpp~L}t$&?}B*R^6}1{<^HFcwzu}a_%Y2^zIf|ORh}2aG1z0p z`z-h1^S%3GqD(CI9IZ3Z6W%-M zIGSfvS6YuujG@!~0B%j@i@F)bJxePlw%9%{n&a7b{qdy~DPGU1H>tgG_vcn0u|OBh z!%WuSi2dJaWS@u(FoI4sqDPyVCbL4#L8XDl-7 zlQ+q>Zx(hhzceOMm+5f5S}SeM@)!4&LOQoRAO8J(t=3nitEL*qox4)m0q$M}-N$6R zd(j1l_wwft?9l(w;90xI)6Z6kD^zKV;EjH@iwcjf-tM&VEH!;kk&EKy`A+nZ;McFj zUOJ4H9uD&5=Dtd%Ql1|^ytHNHd4=sv&xEF8hg)~DR~=4Tl~i8rP<>b}g=Jj1Ysfrk zs8CtDC1_Jw*!~GWwR86PK;yJlwq1G)!o&D|5e9s&RXc>b_j=v36cqO(mx! z`_<4a&y4yzE@t)j%6ih$b{$@y`t|Dc$|Bp*pIlzGmD;9BU7-Yb!^Tig8@p? z#C-R${_CSJ8b-xk$4U|cZ+Plgm-JgU#Q${Bu1+t{J36}hl6HE$U??_nWm@~2-LtGB z1yR-AKl`&JHvCNEeoCF&ctx_;v#JES{bRAEU$W|v>ZQ^{(=QS?T|0crO1STK=m=#h znBI$wLNjAmq~*TxigwC*%c{y7Pu#xp^R`=`#(K}#>}NzIT$eiFF0FX+-4;K&rVI54 zrk;IKzRu&VSKhIj6OOO14xeq^@AY7P{|su}bG5#dMuEf5c+B=`df23P@Cgdz9 zt5DwUTz)QHbK(c5mHIL*ZkbR=AxV|Gc_OPM*;d4Ju*rVxpr($)iW@fR#V+$B%NR1# z&4!|6^b8JjkyuQ+O0l*M{Z;% z9y+P{;CEXCCF(%zwwQDHd$Wh-zh*zJvv-boxw`a>;5@o9kXz_C8X~n@WV(#p7R6g< zL+?BpuX2zrNfB9fBJBw{hMR}R2cIod6rQwS>u>koBj$GH@rk_d6ji2+z3e?|7}B z_geIX=d5Ip&Fo*Q6DvM_EOc$8UuGA-c$nNCH6e3kX!kQ)^)H3Y$Jcw8yWD82H29R_ zvi7qCd#Ap-w&p-{&*{dBeO^KLo3?_ybTdR^Pj z`xYUt8dm#$gm-YIW52p|T}|{!ud=Jka!lRd_b4WEZTgX`)dkA~Y~0V4YhXtk>$g~j z1V8D$u}uHfaiiK_wAf?xE*sS$?(nbO6y8Y9+diKC%BGV3c7vIvbR(wTE{8t$+ve^-PlSKx@(_9b|qx0Ttr=+r^v`LhKd)Hofpx;gtX|It^Q zOF#Be`ivfDnAF?iS`!qy59>Dd3P!% zw$|A}u*<@Xt^adZ%9}@SS>c5bw_dOn-n*84sDfo3?Om|@_bbmMdw!PQGRqfxa%7|- zC}I0L7!iE<*+%oMQ3*U+GEu> z?<6Zqe6XOlKdRU_TAwFMaQI%Vo~L*CK0 z%XwW&&&3n`&f4p%Z;yCgydi&IQ_r5J-+dofpYi0lN$(fEFxN{rd3Mp%NZF{g&|_bg zw##k$p}APnpwZy|%(oL6&ME6lvRcDKYj(wsvD$9Td|$?LMVv)*;FVy9`}XqkV;#kZ?n8e5A*7YS_&tz>s>%~Lcja^N&C&0|VR z%zLf8sQVCqkIu(Mc3d zd^qNDZ~WP&I5}_I(5*TxHx0SA-RdhDLf(jE(yH$Z%YWrKE1flTy01}jG;qkISN9Q@;ZwzZUyA#ZD?*6otiMF)i zf%D%O0}B`YYH!V{;1RP%()a)Lo5DF)Ghf_3zi{Eg=&N5WuFF4_Uz;oCy06jejmyW+ zch;)x5!5H>x{h>ZhejU0l-+&l+stv}O(7Mpb|pzv3U4W?nxtNvGliCaSnb2J?)fIC zKh8NqjASvJtipB?#K*R-a*JLZkd@~NTf z#fuKf=U7(^>@VHBfBBDF6?>k@^Xs0RD&3fI_JY>s2=%fA;fLYdsczykUn)nQJgC>w zbAN;E7&l{&|L()P{kLo_FxbBD_0Qa~Puoi>KmN{CIC!<)$So#uv_Scp|LNH~R3o)r zUz>#Z3=%tZ-Abt1rXKob7s)(T-1r}d|hO4#rr06EBDBuk6o+Rqooez%E(aSFX z9vJdXYFETBEioUh89BCIU(ubR%##OVFCD5Lc8ZtUw81voV9vvcEEV(Oa7Fc&r=ra+ zV`9HKs3g8QRqZqV^ao#Q&-=$qtmhk3EzQ5qd)&3v<5KM1XHVK@)9%_`c)3%dZM{%_ zgrKGEPpV97*EBlR+mp}9o))htcWG$rgN@t1`SKn=y*YTwmnSe#9B*hFnpueE5A~(a z478fzdksC{CW+XrJ1X@ev4cXp{%qH^+`{>dPBpTN3t!kL=`A>^lejF`A*b)SN~75G z_ap5NGlrdam3AJXT(-U6bMWc|E^+?7kIc&|JD(#ncu^sAo zu4Lq}O%QVMj{4q!IGr(#m%TO_Z9fw(egCW%=l%WXg=KzCS6wU%IwOLu@y_7AcTN-C0@kj}QHb3cZ6|R=16DVjfuwZKA8Sd=)w` zUfGjNJls)F?Jd^&I>V=xuUTgQPtA!@2jAr;UmjG8YZP_WAXv#U4A7 zJm)=nRJ#AOQ+R5>le8hPD01b*4Y#47)u{#{tL1)8YmzXUSl_1~A5rOftM!1Vdwl8k zi90UiM)gy_89y10)X#Tav!k+T>+I_F<#TQuN>2ahlbKgflfq-o#D>BxYZlnYUEH~< z!M8DPb3olPIrBBHc|0HEx@)w~7HiXj6LptE>I+AI59`cr-M94Sfn-zP#L;C}eh+@n zTyml5#g(Vnnj<;QCMVpoZZxiAEcw9PX;xKNkIn6iGe{!peS8*n+7^5rt##KBT-Ere zW?N0equ%$KIWb486rWkf>9&_qth-fi)VbBX^CjkX#7JjSmwJBek1Px8`1QzL_96QX z?!3i0z5bIOTRF}`e7qqe{+(=Lb@jXD2c~+{n#bd}s`KA0?G5H@59?Rmox8p1ADPI# zO^0mYhY=-{wuMS_cPcK^pIhPFJ94Ibj#NiarqH+N=Zm)mYMWZy#bwRQ3*%ww`oHW2$yxXXN0W=|L2`yf(cs!INK4}S zfB6hD4WL%OQDLOq9mzTYx(@=A@Jx?CPc|TB_@Y6{c_X>5{%;xl)l)DlDB~7D1Wu9| zzE%b^mEqM|R;XJ$V7mOpG(+#jm?__-b`jrgU%s`QXhED?ehan&`)Td7ZnVQ^_BiGn zhu`$KV04DWiR}!>6os2Rl!g1V)H;tGG_XlGH0?~s>}@jUItnwepqm+1A)Oi4>(J4W z9?)GMs`&wkDjc+u)2x`Qg18Ht5GV?t1Yjz zk*CWWAObK{8W-^pMrDi9fDuM+NE`TB9Dviw1^oy~BNwz+qyS9=l37bb43gmRLa;EG zs>GsMB8FH10*IALA%Ohm7>fGKssO5rXtKDJlpKRalSOn1ZGuf<&=(>OFs|aFQUHkK zxC~I*a0nzTY$T-%P&18al_`cjZM zbqa9U|CLK#nJgDt0^dau2O3X-<-gEGX#an!gn>4O%8;fgl)^NXal>u}eNm68?Z3tjqFdY(+#6_o*sJaPRCk@HM zyA+fR>@ciNrt;Ao5u{F)0z^XH&H{4LIM%RuecB|xtOKMn@Y|4sifh5H^52m-sEJT< zyQv(G8xYbME`j7}3n(mxG;0bhT_)RwvrTa+G3ZyjKTDW-h)rd3m2n!mh}m3`ItQ0F zMqHdlF)~HsNW?@NrxLn|C1xQ*A=H6W*TE@TRA?etl~$`E#=>wqJ`HveXbrjXaI?vt zg9X??;M1w1z=AU(5!hJNA8LgTgthXd0brvd7IYtg*AiNw#MT3f0XX~59a=IFhsy+R z{eND315gBzV={oPrn&*#y%LlFbkG_Jz9C>Y)|j0>u>KqZmo@;RdxHiO55%o$lh&1$ zMk=zVYx3%G0`v&s5(kQhA{ zWX)iuHK6VxlPj&+a6=?ZPL9AZ6-?3^H`ioG(onKG_zla0GMO8vsIiee^eT?TaWU0c z2Qv)V4gjX>cDH$w2w>vg*(_Rus1ns|9;wGlcWb7X(Ofs3@oHO$*pqg>t!1#Kc2R$LhCe|_>l-yuDN#>laS znyJzhWn0oqtITnR99?w|$@94c=LO$xJ)`-7H1+t|1m&{Nt>3_=Bzf&pFvehh#KsOn7O zB?JfnxT3jG71=~8Vngc~$OilgbPSLp)Jt;xpq+rrAvuVN|GSG|0G~W#0MJC1PW!{4 z5Dd_oQI^yNy&VQQ_`#ZYX4sQq0a~E|$K*dU$ihY<|C1Z|=;Zl7N0VR4@CKL31O$=* zkD?(73`QCqmfZ6(`fD6GG;#9wC)eJS>YnjbK6Z%ajd@DtVUk=vkInby4d~|SXdCi% z*B5l?;zizi%46R8*l)i1@dXh(0Xx80I1>lExvvlBuC==qd_5ZaePq-KlwfK&*J;e;zdc?emEf#o4oB6TJT zn2drrE{9Vo9I7a^j}F}nwx=lJ%J8xVjSd*_EEv>KUKFm1q9GtMVWN2jMu66m{slfk zCvarQGol*8F%4-l**G6=5`?JWB4ngY2hYo-K)itoj#NOoYmK2g6^ybEc|+F+gE$5v z`1n#B7$j)B984fbad}BmG)+W~rB5-0d&6-JWCxbVaW>qS0WyJ7LCOX0TN{RUKWR3Y zP%sXM14tz5Lg}Q=2838m&>%St8_K(i?7puI91Jj;{` za})9+r%$i~j&fm|oHA)y1XHmXD2>#CmIZ=I6s!t;MW#deCukc4He3OBh3J6r5YirS z)t>^LN`q*Ce}kSUr-_459~JQlcvb+}Q}Dz9eK0uq6r^^Rne;e(3mMtL<}ljGs=!TI zxap+e2Zre47|=EtnnQ(Wr{b7C&IQnx0%|Xy0isMzqhJiwGq~*(y@rVx2Ner3KujGM#cAvI6;~ ziYf|Ac|rwDU7+Y4(y17?PDQD?RL>PfY5Q8DLmhgsij_||=M*=jX zC<6o?CJc;-W1WU?6@(k)rxP%q=yc+)38=2jTr2~iHH;BCrWk0>q!7v?NSse-h-1Vx z0;6XU)1W>X$Ojs(1g6KflE5(qb*d7Kwj|mE0uzyAXfPMRUqN{|%&q#?OjBH$vVayO zA}gZB!03hq#yd`EQ^Ofa%5lU@;vm709-C}GMg$N6Y)s0Nz?9ySttA3LGZmX`A*iu% zF#xi{hGuLvl*xPl9%0#EcK1_jrp2E zk&)pM(+vzjg(4`*M<1SBU=S7-{pU>&GKRo2NcqO*0wX_jb3-FPVEqMF<^iTA@ZHeQ z64U~G%mk*!7UqTme?wm_+D53*SIJ1<5*~id*E9(*3-Gh_^E2gx7J;drp{1UoxfW(6 z{zn1CE5Kh636Ix_py-JIQOWSv3k+ND18Bbv%O@% { + // If I don't reset memory, I get some kind of error. + wasi.args = ["tre", ...args]; + const memory_view = new Uint8Array(inst.exports.memory.buffer); + memory_view.set(memory_reset_view); + wasi.start(inst); + }, "tree"); + + postMessage({ ready: true }); + } +}; diff --git a/examples/wasi_multi_threads_rustc/worker.js b/examples/wasi_multi_threads_rustc/worker.js new file mode 100644 index 0000000..d6fe3ae --- /dev/null +++ b/examples/wasi_multi_threads_rustc/worker.js @@ -0,0 +1,115 @@ +const { promise, resolve } = Promise.withResolvers(); +import("../node_modules/@oligami/shared-object/dist/index.js").then(resolve); + +let tree; +let term; +let rustc; + +self.onmessage = async (e) => { + const { wasi_ref } = e.data; + + const { promise: depend_files_promise, resolve: depend_files_resolve } = + Promise.withResolvers(); + const { promise: tmp_dir_promise, resolve: tmp_dir_resolve } = + Promise.withResolvers(); + + const depend_files_manage_worker = new Worker("depend_files.js", { + type: "module", + }); + depend_files_manage_worker.onmessage = (e) => { + depend_files_resolve(e.data); + }; + + const tmp_dir_manage_worker = new Worker("tmp_dir.js", { + type: "module", + }); + tmp_dir_manage_worker.onmessage = (e) => { + tmp_dir_resolve(e.data); + }; + + const [depend_files, tmp_dir] = await Promise.all([ + depend_files_promise, + tmp_dir_promise, + ]); + const { wasi_ref: wasi_ref_depend_files } = depend_files; + const { wasi_ref: wasi_ref_tmp_dir } = tmp_dir; + + const wasi_refs = [wasi_ref_depend_files, wasi_ref_tmp_dir, wasi_ref]; + + const { promise: tree_promise, resolve: tree_resolve } = + Promise.withResolvers(); + const { promise: rustc_promise, resolve: rustc_resolve } = + Promise.withResolvers(); + + const tree_worker = new Worker("tree.js", { + type: "module", + }); + tree_worker.onmessage = (e) => { + console.log("tree onmessage"); + tree_resolve(e.data); + }; + + const rustc_worker = new Worker("rustc.js", { + type: "module", + }); + rustc_worker.onmessage = (e) => { + console.log("rustc onmessage"); + rustc_resolve(e.data); + }; + + tree_worker.postMessage({ + wasi_refs, + }); + rustc_worker.postMessage({ + wasi_refs, + }); + + console.log("Waiting for tree and rustc to finish..."); + + await Promise.all([tree_promise, rustc_promise]); + + console.log("Sending run message..."); + + await promise; + + tree = new SharedObject.SharedObjectRef("tree").proxy(); + + term = new SharedObject.SharedObjectRef("term").proxy(); + + rustc = new SharedObject.SharedObjectRef("rustc").proxy(); + + // tree -h + await term.writeln("$ tree -h"); + await tree("-h"); + + // tree / + await term.writeln("\n$ tree /"); + await tree("/"); + + // rustc -h + await term.writeln("\n$ rustc -h"); + await rustc("-h"); + + // rustc /hello.rs --sysroot /sysroot --target wasm32-wasip1-threads -Csave-temps --out-dir /tmp + await term.writeln( + "\n$ rustc /hello.rs --sysroot /sysroot --target wasm32-wasip1-threads -Csave-temps --out-dir /tmp", + ); + try { + await rustc( + "/hello.rs", + "--sysroot", + "/sysroot", + "--target", + "wasm32-wasip1-threads", + "-Csave-temps", + "--out-dir", + "/tmp", + ); + } catch (e) { + console.error(e); + } + + // tree / + await term.writeln("\n$ tree /"); + await tree("/"); +}; diff --git a/examples/wasi_workers/echo_and_rewrite.wasm b/examples/wasi_workers/echo_and_rewrite.wasm old mode 100755 new mode 100644 diff --git a/examples/wasi_workers_single/echo_and_rewrite.wasm b/examples/wasi_workers_single/echo_and_rewrite.wasm old mode 100755 new mode 100644 diff --git a/package-lock.json b/package-lock.json index 67a7fd4..7967411 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,9 @@ "name": "@bjorn3/browser_wasi_shim", "version": "0.3.0", "license": "MIT OR Apache-2.0", + "dependencies": { + "@bjorn3/browser_wasi_shim": "file:" + }, "devDependencies": { "@swc/cli": "^0.1.62", "@swc/core": "^1.3.37", @@ -16,13 +19,15 @@ "eslint": "^8.50.0", "playwright": "^1.40.1", "prettier": "^3.0.3", - "typescript": "^4.9.5" + "typescript": "^5.6.2" } }, + "node_modules/@bjorn3/browser_wasi_shim": { + "resolved": "", + "link": true + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, "license": "MIT", "dependencies": { @@ -36,9 +41,7 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "version": "4.11.1", "dev": true, "license": "MIT", "engines": { @@ -47,8 +50,6 @@ }, "node_modules/@eslint/eslintrc": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "license": "MIT", "dependencies": { @@ -69,21 +70,8 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -93,10 +81,17 @@ "node": "*" } }, + "node_modules/@eslint/eslintrc/node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "8.57.1", "dev": true, "license": "MIT", "engines": { @@ -104,14 +99,11 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", + "version": "0.13.0", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -119,21 +111,8 @@ "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -143,10 +122,17 @@ "node": "*" } }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -159,16 +145,11 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@mole-inc/bin-wrapper": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@mole-inc/bin-wrapper/-/bin-wrapper-8.0.1.tgz", - "integrity": "sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==", "dev": true, "license": "MIT", "dependencies": { @@ -187,8 +168,6 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "dependencies": { @@ -201,8 +180,6 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { @@ -211,8 +188,6 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { @@ -225,8 +200,6 @@ }, "node_modules/@sindresorhus/is": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, "license": "MIT", "engines": { @@ -238,8 +211,6 @@ }, "node_modules/@swc/cli": { "version": "0.1.65", - "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.1.65.tgz", - "integrity": "sha512-4NcgsvJVHhA7trDnMmkGLLvWMHu2kSy+qHx6QwRhhJhdiYdNUrhdp+ERxen73sYtaeEOYeLJcWrQ60nzKi6rpg==", "dev": true, "license": "MIT", "dependencies": { @@ -270,9 +241,7 @@ } }, "node_modules/@swc/core": { - "version": "1.7.25", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.25.tgz", - "integrity": "sha512-EWTWdb0GD+Z9CByvW5j5b9d1cFr9P6hy7TkGgAwnhKxGwzGu8BHTG3ou28KY6P57yZXDVKB0exWmSNRIv6LYCg==", + "version": "1.7.26", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -288,16 +257,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.7.25", - "@swc/core-darwin-x64": "1.7.25", - "@swc/core-linux-arm-gnueabihf": "1.7.25", - "@swc/core-linux-arm64-gnu": "1.7.25", - "@swc/core-linux-arm64-musl": "1.7.25", - "@swc/core-linux-x64-gnu": "1.7.25", - "@swc/core-linux-x64-musl": "1.7.25", - "@swc/core-win32-arm64-msvc": "1.7.25", - "@swc/core-win32-ia32-msvc": "1.7.25", - "@swc/core-win32-x64-msvc": "1.7.25" + "@swc/core-darwin-arm64": "1.7.26", + "@swc/core-darwin-x64": "1.7.26", + "@swc/core-linux-arm-gnueabihf": "1.7.26", + "@swc/core-linux-arm64-gnu": "1.7.26", + "@swc/core-linux-arm64-musl": "1.7.26", + "@swc/core-linux-x64-gnu": "1.7.26", + "@swc/core-linux-x64-musl": "1.7.26", + "@swc/core-win32-arm64-msvc": "1.7.26", + "@swc/core-win32-ia32-msvc": "1.7.26", + "@swc/core-win32-x64-msvc": "1.7.26" }, "peerDependencies": { "@swc/helpers": "*" @@ -308,163 +277,8 @@ } } }, - "node_modules/@swc/core-darwin-arm64": { - "version": "1.7.25", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.25.tgz", - "integrity": "sha512-cbLNV4vsqSbll7kehJ58hZ9lt+nLlUPF+fmSRVsb4Qasnr0IRDtpT+3Rc87bDNXfkc15Ii80xdp7sU2MVgHn7A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-darwin-x64": { - "version": "1.7.25", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.25.tgz", - "integrity": "sha512-kZswLBI8KWWV8VuGIJZd8GM7eWFY5srmlomiWw7j/OtRyRgr8qfX3EmxBAYYZqTEvWdooSc/y3I61lHn/a1tRg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.7.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.25.tgz", - "integrity": "sha512-DV/8BHwdtymoelC1KvefOoyXraIDK0rJIBqjPvtzW9YbkN1hepF7au1deiieJ6+A0smP+4fxtYhrnJ5EjPvylA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.7.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.25.tgz", - "integrity": "sha512-lIx8BeKzpulL2PbLyMUln5Hk164M/PHXquHt6y86sD7Spza6zbCme+/Zr17PRiElqrP8byKC09UZj0K6hONDqQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.7.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.25.tgz", - "integrity": "sha512-+/I7AzzY4066bvKLTyAZXLL0dPpWhRUh0ja4cZNZ+0Gpn8FmtWDwZKCriIWkDlD1gSuXm8+iOaaLGhEwIquOpQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.7.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.25.tgz", - "integrity": "sha512-BPtnKyiBVMZyN6ml7oHGX9wuSLHN06nT1x1TM9wcSKSx6y+BEKb8jSmzrKzM7K5LnfOiy4+ARCb4HrMkXIQjUg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-musl": { - "version": "1.7.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.25.tgz", - "integrity": "sha512-ZlZztuvy2hvfoYg5gYHYuc2mssgzGq1kKanF9kPdICsTmze6t7AvkSfmlTN7/YGuO//yDDJR1GR0EuXwOAJqPw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.7.25", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.25.tgz", - "integrity": "sha512-k3QsHJ+53BVhRUeC7NJOMxdMGexBIhFmL8Ex39vqWVvDZgnOepMFu9/G1pm04xBHSqcb0lioDj5WirAoy4VusQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.7.25", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.25.tgz", - "integrity": "sha512-3PW8LDgS7eIdjeGLNYhO1XLXyZJZ+aLjf79am8+HqfzVkmz+uIK39FcFxeF6A/LUsuQBMa3Geg++rS38kviMEA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.7.25", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.25.tgz", - "integrity": "sha512-iYpJNfIzPwahwPgddb9PHYichdFoS/2NR4Gaemv9s6nzTguS4vx/YT1oFGwuGMP0RyOdmAN2rEfPh7sJktqWfA==", + "version": "1.7.26", "cpu": [ "x64" ], @@ -480,15 +294,11 @@ }, "node_modules/@swc/counter": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", "dev": true, "license": "Apache-2.0" }, "node_modules/@swc/types": { "version": "0.1.12", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.12.tgz", - "integrity": "sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -497,8 +307,6 @@ }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dev": true, "license": "MIT", "dependencies": { @@ -510,15 +318,11 @@ }, "node_modules/@tokenizer/token": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", "dev": true, "license": "MIT" }, "node_modules/@types/cacheable-request": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "dev": true, "license": "MIT", "dependencies": { @@ -530,22 +334,16 @@ }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", "dev": true, "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, "node_modules/@types/keyv": { "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dev": true, "license": "MIT", "dependencies": { @@ -553,9 +351,7 @@ } }, "node_modules/@types/node": { - "version": "22.5.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", - "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", + "version": "22.5.5", "dev": true, "license": "MIT", "dependencies": { @@ -564,8 +360,6 @@ }, "node_modules/@types/responselike": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", - "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", "dev": true, "license": "MIT", "dependencies": { @@ -574,15 +368,11 @@ }, "node_modules/@types/semver": { "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true, "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dev": true, "license": "MIT", "dependencies": { @@ -617,8 +407,6 @@ }, "node_modules/@typescript-eslint/parser": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -646,8 +434,6 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, "license": "MIT", "dependencies": { @@ -664,8 +450,6 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", "dev": true, "license": "MIT", "dependencies": { @@ -692,8 +476,6 @@ }, "node_modules/@typescript-eslint/types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, "license": "MIT", "engines": { @@ -706,8 +488,6 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -735,8 +515,6 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "license": "ISC", "dependencies": { @@ -751,8 +529,6 @@ }, "node_modules/@typescript-eslint/utils": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, "license": "MIT", "dependencies": { @@ -777,8 +553,6 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, "license": "MIT", "dependencies": { @@ -795,15 +569,11 @@ }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true, "license": "ISC" }, "node_modules/acorn": { "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true, "license": "MIT", "bin": { @@ -815,8 +585,6 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -825,8 +593,6 @@ }, "node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { @@ -842,8 +608,6 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { @@ -852,8 +616,6 @@ }, "node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -868,8 +630,6 @@ }, "node_modules/arch": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", "dev": true, "funding": [ { @@ -889,15 +649,11 @@ }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "license": "MIT", "engines": { @@ -906,15 +662,11 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, "node_modules/bin-check": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", - "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", "dev": true, "license": "MIT", "dependencies": { @@ -927,8 +679,6 @@ }, "node_modules/bin-version": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-6.0.0.tgz", - "integrity": "sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==", "dev": true, "license": "MIT", "dependencies": { @@ -944,8 +694,6 @@ }, "node_modules/bin-version-check": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-5.1.0.tgz", - "integrity": "sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g==", "dev": true, "license": "MIT", "dependencies": { @@ -962,8 +710,6 @@ }, "node_modules/bin-version/node_modules/execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "license": "MIT", "dependencies": { @@ -984,10 +730,8 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/bin-version/node_modules/get-stream": { + "node_modules/bin-version/node_modules/execa/node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", "engines": { @@ -997,10 +741,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bin-version/node_modules/is-stream": { + "node_modules/bin-version/node_modules/execa/node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "license": "MIT", "engines": { @@ -1010,10 +752,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bin-version/node_modules/npm-run-path": { + "node_modules/bin-version/node_modules/execa/node_modules/npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "license": "MIT", "dependencies": { @@ -1025,8 +765,6 @@ }, "node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "license": "MIT", "dependencies": { @@ -1035,8 +773,6 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", "dependencies": { @@ -1048,8 +784,6 @@ }, "node_modules/cacheable-lookup": { "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "dev": true, "license": "MIT", "engines": { @@ -1058,8 +792,6 @@ }, "node_modules/cacheable-request": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", "dev": true, "license": "MIT", "dependencies": { @@ -1077,8 +809,6 @@ }, "node_modules/cacheable-request/node_modules/get-stream": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "license": "MIT", "dependencies": { @@ -1093,8 +823,6 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", "engines": { @@ -1103,8 +831,6 @@ }, "node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -1120,8 +846,6 @@ }, "node_modules/clone-response": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, "license": "MIT", "dependencies": { @@ -1131,10 +855,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/clone-response/node_modules/mimic-response": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1146,15 +876,11 @@ }, "node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/commander": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, "license": "MIT", "engines": { @@ -1163,15 +889,11 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, "license": "MIT" }, "node_modules/content-disposition": { "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1183,8 +905,6 @@ }, "node_modules/cross-spawn": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "license": "MIT", "dependencies": { @@ -1198,8 +918,6 @@ }, "node_modules/debug": { "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1216,8 +934,6 @@ }, "node_modules/decompress-response": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1230,30 +946,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, "license": "MIT" }, "node_modules/defer-to-connect": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, "license": "MIT", "engines": { @@ -1262,8 +961,6 @@ }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "license": "MIT", "dependencies": { @@ -1275,8 +972,6 @@ }, "node_modules/doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1288,8 +983,6 @@ }, "node_modules/end-of-stream": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1298,8 +991,6 @@ }, "node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", "engines": { @@ -1310,17 +1001,15 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "8.57.1", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -1367,8 +1056,6 @@ }, "node_modules/eslint-scope": { "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -1384,8 +1071,6 @@ }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1395,21 +1080,8 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -1419,10 +1091,17 @@ "node": "*" } }, + "node_modules/eslint/node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/espree": { "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -1439,8 +1118,6 @@ }, "node_modules/esquery": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -1452,8 +1129,6 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -1465,8 +1140,6 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -1475,8 +1148,6 @@ }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -1485,8 +1156,6 @@ }, "node_modules/execa": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", "dev": true, "license": "MIT", "dependencies": { @@ -1504,8 +1173,6 @@ }, "node_modules/execa/node_modules/cross-spawn": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", "dev": true, "license": "MIT", "dependencies": { @@ -1514,10 +1181,8 @@ "which": "^1.2.9" } }, - "node_modules/execa/node_modules/shebang-command": { + "node_modules/execa/node_modules/cross-spawn/node_modules/shebang-command": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, "license": "MIT", "dependencies": { @@ -1527,20 +1192,16 @@ "node": ">=0.10.0" } }, - "node_modules/execa/node_modules/shebang-regex": { + "node_modules/execa/node_modules/cross-spawn/node_modules/shebang-command/node_modules/shebang-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/execa/node_modules/which": { + "node_modules/execa/node_modules/cross-spawn/node_modules/which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "license": "ISC", "dependencies": { @@ -1552,8 +1213,6 @@ }, "node_modules/executable": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", "dev": true, "license": "MIT", "dependencies": { @@ -1565,8 +1224,6 @@ }, "node_modules/ext-list": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", "dev": true, "license": "MIT", "dependencies": { @@ -1578,8 +1235,6 @@ }, "node_modules/ext-name": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1592,15 +1247,11 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "license": "MIT", "dependencies": { @@ -1616,8 +1267,6 @@ }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -1629,22 +1278,16 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, "license": "MIT" }, "node_modules/fastq": { "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "license": "ISC", "dependencies": { @@ -1653,8 +1296,6 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "license": "MIT", "dependencies": { @@ -1666,8 +1307,6 @@ }, "node_modules/file-type": { "version": "17.1.6", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-17.1.6.tgz", - "integrity": "sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==", "dev": true, "license": "MIT", "dependencies": { @@ -1684,8 +1323,6 @@ }, "node_modules/filename-reserved-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz", - "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==", "dev": true, "license": "MIT", "engines": { @@ -1697,8 +1334,6 @@ }, "node_modules/filenamify": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-5.1.1.tgz", - "integrity": "sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==", "dev": true, "license": "MIT", "dependencies": { @@ -1715,8 +1350,6 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { @@ -1728,8 +1361,6 @@ }, "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -1745,8 +1376,6 @@ }, "node_modules/find-versions": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", - "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", "dev": true, "license": "MIT", "dependencies": { @@ -1761,8 +1390,6 @@ }, "node_modules/flat-cache": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "license": "MIT", "dependencies": { @@ -1776,37 +1403,16 @@ }, "node_modules/flatted": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true, "license": "ISC" }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, "license": "ISC" }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "dev": true, "license": "MIT", "engines": { @@ -1815,9 +1421,6 @@ }, "node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", "dependencies": { @@ -1837,8 +1440,6 @@ }, "node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", "dependencies": { @@ -1848,21 +1449,8 @@ "node": ">=10.13.0" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/glob/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -1872,10 +1460,17 @@ "node": "*" } }, + "node_modules/glob/node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/globals": { "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1890,8 +1485,6 @@ }, "node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "license": "MIT", "dependencies": { @@ -1911,8 +1504,6 @@ }, "node_modules/got": { "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dev": true, "license": "MIT", "dependencies": { @@ -1937,15 +1528,11 @@ }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, "license": "MIT" }, "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { @@ -1954,15 +1541,11 @@ }, "node_modules/http-cache-semantics": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/http2-wrapper": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dev": true, "license": "MIT", "dependencies": { @@ -1975,8 +1558,6 @@ }, "node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1985,8 +1566,6 @@ }, "node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, "funding": [ { @@ -2006,8 +1585,6 @@ }, "node_modules/ignore": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -2016,8 +1593,6 @@ }, "node_modules/import-fresh": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "license": "MIT", "dependencies": { @@ -2033,8 +1608,6 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", "engines": { @@ -2043,9 +1616,6 @@ }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, "license": "ISC", "dependencies": { @@ -2055,15 +1625,11 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, "license": "ISC" }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "license": "MIT", "engines": { @@ -2072,8 +1638,6 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", "dependencies": { @@ -2085,8 +1649,6 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", "engines": { @@ -2095,8 +1657,6 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, "license": "MIT", "engines": { @@ -2105,8 +1665,6 @@ }, "node_modules/is-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "license": "MIT", "engines": { @@ -2115,8 +1673,6 @@ }, "node_modules/is-stream": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, "license": "MIT", "engines": { @@ -2125,15 +1681,11 @@ }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, "license": "ISC" }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -2145,29 +1697,21 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, "license": "MIT" }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { @@ -2176,8 +1720,6 @@ }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2190,8 +1732,6 @@ }, "node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -2206,15 +1746,11 @@ }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, "license": "MIT" }, "node_modules/lowercase-keys": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, "license": "MIT", "engines": { @@ -2223,8 +1759,6 @@ }, "node_modules/lru-cache": { "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "license": "ISC", "dependencies": { @@ -2234,15 +1768,11 @@ }, "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { @@ -2251,8 +1781,6 @@ }, "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -2265,8 +1793,6 @@ }, "node_modules/mime-db": { "version": "1.53.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", - "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", "dev": true, "license": "MIT", "engines": { @@ -2275,8 +1801,6 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "license": "MIT", "engines": { @@ -2284,19 +1808,18 @@ } }, "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "version": "3.1.0", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -2311,22 +1834,16 @@ }, "node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, "license": "MIT" }, "node_modules/normalize-url": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, "license": "MIT", "engines": { @@ -2338,8 +1855,6 @@ }, "node_modules/npm-run-path": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "dev": true, "license": "MIT", "dependencies": { @@ -2351,8 +1866,6 @@ }, "node_modules/npm-run-path/node_modules/path-key": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, "license": "MIT", "engines": { @@ -2361,8 +1874,6 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "license": "ISC", "dependencies": { @@ -2371,8 +1882,6 @@ }, "node_modules/onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "license": "MIT", "dependencies": { @@ -2387,8 +1896,6 @@ }, "node_modules/optionator": { "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", "dependencies": { @@ -2405,8 +1912,6 @@ }, "node_modules/os-filter-obj": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", - "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==", "dev": true, "license": "MIT", "dependencies": { @@ -2418,8 +1923,6 @@ }, "node_modules/p-cancelable": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "dev": true, "license": "MIT", "engines": { @@ -2428,8 +1931,6 @@ }, "node_modules/p-finally": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, "license": "MIT", "engines": { @@ -2438,8 +1939,6 @@ }, "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2454,8 +1953,6 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -2470,8 +1967,6 @@ }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { @@ -2483,8 +1978,6 @@ }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -2493,8 +1986,6 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "license": "MIT", "engines": { @@ -2503,8 +1994,6 @@ }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", "engines": { @@ -2513,8 +2002,6 @@ }, "node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "license": "MIT", "engines": { @@ -2523,8 +2010,6 @@ }, "node_modules/peek-readable": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.2.0.tgz", - "integrity": "sha512-U94a+eXHzct7vAd19GH3UQ2dH4Satbng0MyYTMaQatL0pvYYL5CTPR25HBhKtecl+4bfu1/i3vC6k0hydO5Vcw==", "dev": true, "license": "MIT", "engines": { @@ -2537,8 +2022,6 @@ }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { @@ -2550,8 +2033,6 @@ }, "node_modules/pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "license": "MIT", "engines": { @@ -2559,13 +2040,11 @@ } }, "node_modules/playwright": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.47.0.tgz", - "integrity": "sha512-jOWiRq2pdNAX/mwLiwFYnPHpEZ4rM+fRSQpRHwEwZlP2PUANvL3+aJOF/bvISMhFD30rqMxUB4RJx9aQbfh4Ww==", + "version": "1.47.2", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.47.0" + "playwright-core": "1.47.2" }, "bin": { "playwright": "cli.js" @@ -2578,9 +2057,7 @@ } }, "node_modules/playwright-core": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.47.0.tgz", - "integrity": "sha512-1DyHT8OqkcfCkYUD9zzUTfg7EfTd+6a8MkD/NWOvjo0u/SCNd5YmY/lJwFvUZOxJbWNds+ei7ic2+R/cRz/PDg==", + "version": "1.47.2", "dev": true, "license": "Apache-2.0", "bin": { @@ -2592,8 +2069,6 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", "engines": { @@ -2602,8 +2077,6 @@ }, "node_modules/prettier": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, "license": "MIT", "bin": { @@ -2618,15 +2091,11 @@ }, "node_modules/pseudomap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", "dev": true, "license": "ISC" }, "node_modules/pump": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.1.tgz", - "integrity": "sha512-2ynnAmUu45oUSq51AQbeugLkMSKaz8FqVpZ6ykTqzOVkzXe8u/ezkGsYrFJqKZx+D9cVxoDrSbR7CeAwxFa5cQ==", + "version": "3.0.2", "dev": true, "license": "MIT", "dependencies": { @@ -2636,8 +2105,6 @@ }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", "engines": { @@ -2646,8 +2113,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -2667,8 +2132,6 @@ }, "node_modules/quick-lru": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, "license": "MIT", "engines": { @@ -2680,8 +2143,6 @@ }, "node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", "dependencies": { @@ -2695,8 +2156,6 @@ }, "node_modules/readable-web-to-node-stream": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", - "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", "dev": true, "license": "MIT", "dependencies": { @@ -2712,15 +2171,11 @@ }, "node_modules/resolve-alpn": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", "dev": true, "license": "MIT" }, "node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "license": "MIT", "engines": { @@ -2729,8 +2184,6 @@ }, "node_modules/responselike": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, "license": "MIT", "dependencies": { @@ -2742,8 +2195,6 @@ }, "node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, "license": "MIT", "engines": { @@ -2753,9 +2204,6 @@ }, "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "license": "ISC", "dependencies": { @@ -2770,8 +2218,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -2794,8 +2240,6 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -2815,8 +2259,6 @@ }, "node_modules/semver": { "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "license": "ISC", "bin": { @@ -2828,8 +2270,6 @@ }, "node_modules/semver-regex": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", - "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", "dev": true, "license": "MIT", "engines": { @@ -2841,8 +2281,6 @@ }, "node_modules/semver-truncate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-3.0.0.tgz", - "integrity": "sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==", "dev": true, "license": "MIT", "dependencies": { @@ -2857,8 +2295,6 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "license": "MIT", "dependencies": { @@ -2870,8 +2306,6 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "license": "MIT", "engines": { @@ -2880,15 +2314,11 @@ }, "node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "license": "MIT", "engines": { @@ -2897,8 +2327,6 @@ }, "node_modules/sort-keys": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", "dev": true, "license": "MIT", "dependencies": { @@ -2910,8 +2338,6 @@ }, "node_modules/sort-keys-length": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", "dev": true, "license": "MIT", "dependencies": { @@ -2923,8 +2349,6 @@ }, "node_modules/source-map": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -2933,8 +2357,6 @@ }, "node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "license": "MIT", "dependencies": { @@ -2943,8 +2365,6 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { @@ -2956,8 +2376,6 @@ }, "node_modules/strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", "dev": true, "license": "MIT", "engines": { @@ -2966,8 +2384,6 @@ }, "node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "license": "MIT", "engines": { @@ -2976,8 +2392,6 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", "engines": { @@ -2989,8 +2403,6 @@ }, "node_modules/strip-outer": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-2.0.0.tgz", - "integrity": "sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==", "dev": true, "license": "MIT", "engines": { @@ -3002,8 +2414,6 @@ }, "node_modules/strtok3": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.1.1.tgz", - "integrity": "sha512-mKX8HA/cdBqMKUr0MMZAFssCkIGoZeSCMXgnt79yKxNFguMLVFgRe6wB+fsL0NmoHDbeyZXczy7vEPSoo3rkzg==", "dev": true, "license": "MIT", "dependencies": { @@ -3020,8 +2430,6 @@ }, "node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -3033,15 +2441,11 @@ }, "node_modules/text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true, "license": "MIT" }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3053,8 +2457,6 @@ }, "node_modules/token-types": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", - "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", "dev": true, "license": "MIT", "dependencies": { @@ -3071,8 +2473,6 @@ }, "node_modules/trim-repeated": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-2.0.0.tgz", - "integrity": "sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==", "dev": true, "license": "MIT", "dependencies": { @@ -3084,8 +2484,6 @@ }, "node_modules/trim-repeated/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "license": "MIT", "engines": { @@ -3097,8 +2495,6 @@ }, "node_modules/ts-api-utils": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, "license": "MIT", "engines": { @@ -3110,8 +2506,6 @@ }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { @@ -3123,8 +2517,6 @@ }, "node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -3135,9 +2527,7 @@ } }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.6.2", "dev": true, "license": "Apache-2.0", "bin": { @@ -3145,20 +2535,16 @@ "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/undici-types": { "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true, "license": "MIT" }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3167,15 +2553,11 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true, "license": "MIT" }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "license": "ISC", "dependencies": { @@ -3190,8 +2572,6 @@ }, "node_modules/word-wrap": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "license": "MIT", "engines": { @@ -3200,22 +2580,16 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true, "license": "ISC" }, "node_modules/yallist": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", "dev": true, "license": "ISC" }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index f9610a1..5684b24 100644 --- a/package.json +++ b/package.json @@ -5,12 +5,13 @@ "description": "A pure javascript shim for WASI", "type": "module", "scripts": { - "build": "swc src -d dist -s true && tsc --emitDeclarationOnly", + "build": "npm run worker && swc src -d dist -s true && tsc --emitDeclarationOnly", "prepare": "swc src -d dist && tsc --emitDeclarationOnly", "test:node": "./test/run-testsuite.sh node", "test:browser": "playwright-core install && ./test/run-testsuite.sh browser", "test": "npm run test:node && npm run test:browser", - "check": "tsc --noEmit && prettier src -c && eslint src/" + "check": "tsc --noEmit && prettier src -c && eslint src/", + "worker": "spack --config ./src/wasi_farm/shared_array_buffer/worker_background/spack.config.cjs && node src/wasi_farm/shared_array_buffer/worker_background/minify.js" }, "repository": { "type": "git", @@ -39,6 +40,9 @@ "eslint": "^8.50.0", "playwright": "^1.40.1", "prettier": "^3.0.3", - "typescript": "^4.9.5" + "typescript": "^5.6.2" + }, + "dependencies": { + "@bjorn3/browser_wasi_shim": "file:" } } diff --git a/src/fs_mem.ts b/src/fs_mem.ts index 261743c..dcfaf7d 100644 --- a/src/fs_mem.ts +++ b/src/fs_mem.ts @@ -128,7 +128,7 @@ export class OpenDirectory extends Fd { super(); this.dir = dir; } - + OpenDirectory; // eslint-disable-next-line @typescript-eslint/no-unused-vars fd_seek(offset: bigint, whence: number): { ret: number; offset: bigint } { return { ret: wasi.ERRNO_BADF, offset: 0n }; @@ -151,10 +151,10 @@ export class OpenDirectory extends Fd { ret: number; dirent: wasi.Dirent | null; } { - // if (debug.enabled) { + if (debug.enabled) { debug.log("readdir_single", cookie); debug.log(cookie, this.dir.contents.keys()); - // } + } if (cookie == 0n) { return { diff --git a/src/index.ts b/src/index.ts index d50418e..a3ed42a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,6 +2,7 @@ import WASI, { WASIProcExit } from "./wasi.js"; export { WASI, WASIProcExit }; import { WASIFarm, WASIFarmRef, WASIFarmAnimal } from "./wasi_farm/index.js"; export { WASIFarm, WASIFarmRef, WASIFarmAnimal }; +export { thread_spawn_on_worker } from "./wasi_farm/index.js"; export { Fd, Inode } from "./fd.js"; export { File, diff --git a/src/serialize_error.ts b/src/serialize_error.ts new file mode 100644 index 0000000..0672412 --- /dev/null +++ b/src/serialize_error.ts @@ -0,0 +1,23 @@ +export type SerializedError = { + message: string; + name: string; + stack: string; + cause?: unknown; +}; + +export const serialize = (error: Error): SerializedError => { + return { + message: error.message, + name: error.name, + stack: error.stack, + cause: error.cause, + }; +}; + +export const deserialize = (serializedError: SerializedError): Error => { + const error = new Error(serializedError.message); + error.name = serializedError.name; + error.stack = serializedError.stack.replace(/.wasm:/g, ".wasm\n"); + error.cause = serializedError.cause; + return error; +}; diff --git a/src/wasi_farm/animals.ts b/src/wasi_farm/animals.ts index c0c06cb..96e5d40 100644 --- a/src/wasi_farm/animals.ts +++ b/src/wasi_farm/animals.ts @@ -1,24 +1,43 @@ import { debug } from "../debug.js"; -import { Options, WASIProcExit } from "../wasi.js"; -import { WASIFarmRef, WASIFarmRefObject } from "./ref.js"; +import { type Options, WASIProcExit } from "../wasi.js"; import * as wasi from "../wasi_defs.js"; -import { WASIFarmRefUseArrayBuffer, WASIFarmRefUseArrayBufferObject } from "./shared_array_buffer/ref.js"; -import { FdCloseSender } from "./sender.js"; +import type { WASIFarmRef } from "./ref.js"; +import type { WASIFarmRefObject } from "./ref.js"; +import type { FdCloseSender } from "./sender.js"; +import { WASIFarmRefUseArrayBuffer } from "./shared_array_buffer/index.js"; +import type { WASIFarmRefUseArrayBufferObject } from "./shared_array_buffer/index.js"; +import { ThreadSpawner } from "./shared_array_buffer/index.js"; export class WASIFarmAnimal { - private args: Array; - private env: Array; + args: Array; + env: Array; private wasi_farm_refs: WASIFarmRef[]; private id_in_wasi_farm_ref: Array; - private inst: { exports: { memory: WebAssembly.Memory } }; + inst: { exports: { memory: WebAssembly.Memory } }; // eslint-disable-next-line @typescript-eslint/no-explicit-any wasiImport: { [key: string]: (...args: Array) => unknown }; + wasiThreadImport: { + "thread-spawn": (start_arg: number) => number; + }; + private can_array_buffer; + private can_thread_spawn: boolean; + + private thread_spawner: ThreadSpawner; + + async wait_worker_background_worker(): Promise { + await this.thread_spawner.wait_worker_background_worker(); + } + + check_worker_background_worker(): void { + this.thread_spawner.check_worker_background_worker(); + } + // Each process has a specific fd that it can access. // If it does not exist in the map, it cannot be accessed. // child process can access parent process's fd. @@ -26,7 +45,9 @@ export class WASIFarmAnimal { // [fd, wasi_ref_n] protected fd_map: Array<[number, number]>; - protected get_fd_and_wasi_ref(fd: number): [number | undefined, WASIFarmRef | undefined] { + protected get_fd_and_wasi_ref( + fd: number, + ): [number | undefined, WASIFarmRef | undefined] { const mapped_fd_and_wasi_ref_n = this.fd_map[fd]; if (!mapped_fd_and_wasi_ref_n) { // console.log("fd", fd, "is not found"); @@ -37,7 +58,9 @@ export class WASIFarmAnimal { return [mapped_fd, this.wasi_farm_refs[wasi_ref_n]]; } - protected get_fd_and_wasi_ref_n(fd: number): [number | undefined, number | undefined] { + protected get_fd_and_wasi_ref_n( + fd: number, + ): [number | undefined, number | undefined] { const mapped_fd_and_wasi_ref_n = this.fd_map[fd]; if (!mapped_fd_and_wasi_ref_n) { // console.log("fd", fd, "is not found"); @@ -54,15 +77,107 @@ export class WASIFarmAnimal { exports: { memory: WebAssembly.Memory; _start: () => unknown }; }) { this.inst = instance; + try { instance.exports._start(); + + if (this.can_thread_spawn) { + this.thread_spawner.done_notify(0); + } + return 0; } catch (e) { if (e instanceof WASIProcExit) { + if (this.can_thread_spawn) { + this.thread_spawner.done_notify(e.code); + } + return e.code; - } else { - throw e; } + throw e; + } + } + + /// Start a WASI command on a thread + /// If a module has child threads and a child thread throws an error, + /// the main thread should also be stopped, + /// but there is no way to stop it, + /// so the entire worker is stopped. + /// If it is not necessary, do not use it. + /// Custom imports are not implemented, + /// function because it cannot be passed to other threads. + /// If the sharedObject library someday supports synchronization, it could be used to support this. + async async_start_on_thread(): Promise { + if (!this.can_thread_spawn) { + throw new Error("thread_spawn is not supported"); + } + + await this.wait_worker_background_worker(); + + if (this.inst) { + throw new Error("what happened?"); + } + + const view = new Uint8Array(this.get_share_memory().buffer); + view.fill(0); + + await this.thread_spawner.async_start_on_thread(this.args, this.env); + + const code = await this.thread_spawner.async_wait_done_or_error(); + + return code; + } + + block_start_on_thread(): number { + if (!this.can_thread_spawn) { + throw new Error("thread_spawn is not supported"); + } + + console.log("block_start_on_thread"); + + this.check_worker_background_worker(); + + console.log("block_start_on_thread"); + + if (this.inst) { + throw new Error("what happened?"); + } + + const view = new Uint8Array(this.get_share_memory().buffer); + view.fill(0); + + console.log("block_start_on_thread: start"); + + this.thread_spawner.block_start_on_thread(this.args, this.env); + + console.log("block_start_on_thread: wait"); + + const code = this.thread_spawner.block_wait_done_or_error(); + + console.log("block_start_on_thread: done"); + + return code; + } + + wasi_thread_start( + instance: { + exports: { + memory: WebAssembly.Memory; + wasi_thread_start: (thread_id: number, start_arg: number) => void; + }; + }, + thread_id: number, + start_arg: number, + ) { + this.inst = instance; + try { + instance.exports.wasi_thread_start(thread_id, start_arg); + return 0; + } catch (e) { + if (e instanceof WASIProcExit) { + return e.code; + } + throw e; } } @@ -81,27 +196,30 @@ export class WASIFarmAnimal { override_fd_maps?: Array, ) { this.fd_map = [undefined, undefined, undefined]; + // console.log("wasi_farm_refs", wasi_farm_refs); for (let i = 0; i < wasi_farm_refs.length; i++) { // console.log("fd_map", [...this.fd_map]); const wasi_farm_ref = wasi_farm_refs[i]; // console.log("override_fd_map", wasi_farm_ref.default_fds); - const override_fd_map = override_fd_maps ? override_fd_maps[i] : wasi_farm_ref.default_fds; + const override_fd_map = override_fd_maps + ? override_fd_maps[i] + : wasi_farm_ref.default_fds; // console.log("override_fd_map", override_fd_map); const stdin = wasi_farm_ref.get_stdin(); const stdout = wasi_farm_ref.get_stdout(); const stderr = wasi_farm_ref.get_stderr(); - console.log("stdin", stdin, "stdout", stdout, "stderr", stderr); + // console.log("stdin", stdin, "stdout", stdout, "stderr", stderr); if (stdin !== undefined) { if (override_fd_map.includes(stdin)) { this.fd_map[0] = [stdin, i]; } } if (stdout !== undefined) { - console.log("stdout", stdout, i, "override_fd_map", override_fd_map); + // console.log("stdout", stdout, i, "override_fd_map", override_fd_map); if (override_fd_map.includes(stdout)) { - console.log("stdout defined"); + // console.log("stdout defined"); this.fd_map[1] = [stdout, i]; } } @@ -120,6 +238,7 @@ export class WASIFarmAnimal { // console.log("fd_map", this.fd_map); } + if (this.fd_map[0] === undefined) { throw new Error("stdin is not found"); } @@ -196,18 +315,28 @@ export class WASIFarmAnimal { } } + get_share_memory(): WebAssembly.Memory { + return this.thread_spawner.get_share_memory(); + } + constructor( wasi_farm_refs: WASIFarmRefObject[] | WASIFarmRefObject, args: Array, env: Array, - options: Options = {}, + options: Options & { + can_thread_spawn?: boolean; + thread_spawn_worker_url?: string; + thread_spawn_wasm?: WebAssembly.Module; + } = {}, override_fd_maps?: Array, + thread_spawner?: ThreadSpawner, ) { debug.enable(options.debug); let wasi_farm_refs_tmp: WASIFarmRefObject[]; if (Array.isArray(wasi_farm_refs)) { - wasi_farm_refs_tmp = wasi_farm_refs as unknown as Array; + wasi_farm_refs_tmp = + wasi_farm_refs as unknown as Array; } else { wasi_farm_refs_tmp = [wasi_farm_refs as unknown as WASIFarmRefObject]; } @@ -223,17 +352,47 @@ export class WASIFarmAnimal { this.wasi_farm_refs = []; for (let i = 0; i < wasi_farm_refs_tmp.length; i++) { if (this.can_array_buffer) { - this.wasi_farm_refs.push(WASIFarmRefUseArrayBuffer.init_self(wasi_farm_refs_tmp[i] as WASIFarmRefUseArrayBufferObject)); + this.wasi_farm_refs.push( + WASIFarmRefUseArrayBuffer.init_self( + wasi_farm_refs_tmp[i] as WASIFarmRefUseArrayBufferObject, + ), + ); } else { throw new Error("Non SharedArrayBuffer is not supported yet"); } - this.id_in_wasi_farm_ref.push( - this.wasi_farm_refs[i].set_id(), - ) + this.id_in_wasi_farm_ref.push(this.wasi_farm_refs[i].set_id()); } // console.log("this.wasi_farm_refs", this.wasi_farm_refs); + if (options.can_thread_spawn) { + this.can_thread_spawn = options.can_thread_spawn; + + if (thread_spawner) { + if (!(thread_spawner instanceof ThreadSpawner)) { + throw new Error("thread_spawner is not ThreadSpawner"); + } + + this.thread_spawner = thread_spawner; + } else { + if (options.thread_spawn_worker_url === undefined) { + throw new Error("thread_spawn_worker_url is not defined"); + } + if (options.thread_spawn_wasm === undefined) { + throw new Error("thread_spawn_wasm is not defined"); + } + + this.thread_spawner = new ThreadSpawner( + options.thread_spawn_worker_url, + wasi_farm_refs_tmp, + undefined, + undefined, + undefined, + options.thread_spawn_wasm, + ); + } + } + this.mapping_fds(this.wasi_farm_refs, override_fd_maps); // console.log("this.fd_map", this.fd_map); @@ -272,12 +431,12 @@ export class WASIFarmAnimal { argv_buf += arg.length + 1; } // if (debug.enabled) { - debug.log( - "read args_get: args", - new TextDecoder("utf-8").decode( - buffer8.slice(orig_argv_buf, argv_buf), - ), - ); + debug.log( + "read args_get: args", + new TextDecoder("utf-8").decode( + buffer8.slice(orig_argv_buf, argv_buf), + ), + ); // } return 0; }, @@ -311,12 +470,12 @@ export class WASIFarmAnimal { environ_buf += e.length + 1; } // if (debug.enabled) { - debug.log( - "read environ_get: environ", - new TextDecoder("utf-8").decode( - buffer8.slice(orig_environ_buf, environ_buf), - ), - ); + debug.log( + "read environ_get: environ", + new TextDecoder("utf-8").decode( + buffer8.slice(orig_environ_buf, environ_buf), + ), + ); // } return 0; }, @@ -351,7 +510,7 @@ export class WASIFarmAnimal { BigInt(new Date().getTime()) * 1_000_000n, true, ); - } else if (id == wasi.CLOCKID_MONOTONIC) { + } else if (id === wasi.CLOCKID_MONOTONIC) { let monotonic_time: bigint; try { monotonic_time = BigInt(Math.round(performance.now() * 1000000)); @@ -383,11 +542,7 @@ export class WASIFarmAnimal { } return wasi_farm_ref.fd_advise(mapped_fd); }, - fd_allocate( - fd: number, - offset: bigint, - len: bigint, - ) { + fd_allocate(fd: number, offset: bigint, len: bigint) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { @@ -436,13 +591,21 @@ export class WASIFarmAnimal { } return wasi_farm_ref.fd_fdstat_set_flags(mapped_fd, flags); }, - fd_fdstat_set_rights(fd: number, fs_rights_base: bigint, fs_rights_inheriting: bigint) { + fd_fdstat_set_rights( + fd: number, + fs_rights_base: bigint, + fs_rights_inheriting: bigint, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { return wasi.ERRNO_BADF; } - return wasi_farm_ref.fd_fdstat_set_rights(mapped_fd, fs_rights_base, fs_rights_inheriting); + return wasi_farm_ref.fd_fdstat_set_rights( + mapped_fd, + fs_rights_base, + fs_rights_inheriting, + ); }, fd_filestat_get(fd: number, filestat_ptr: number) { self.check_fds(); @@ -467,15 +630,31 @@ export class WASIFarmAnimal { } return wasi_farm_ref.fd_filestat_set_size(mapped_fd, size); }, - fd_filestat_set_times(fd: number, atim: bigint, mtim: bigint, fst_flags: number) { + fd_filestat_set_times( + fd: number, + atim: bigint, + mtim: bigint, + fst_flags: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { return wasi.ERRNO_BADF; } - return wasi_farm_ref.fd_filestat_set_times(mapped_fd, atim, mtim, fst_flags); + return wasi_farm_ref.fd_filestat_set_times( + mapped_fd, + atim, + mtim, + fst_flags, + ); }, - fd_pread(fd: number, iovs_ptr: number, iovs_len: number, offset: bigint, nread_ptr: number) { + fd_pread( + fd: number, + iovs_ptr: number, + iovs_len: number, + offset: bigint, + nread_ptr: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { @@ -483,8 +662,16 @@ export class WASIFarmAnimal { } const buffer = new DataView(self.inst.exports.memory.buffer); const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); - const iovs_view = new Uint32Array(buffer.buffer, iovs_ptr, iovs_len * 2); - const [nerad_and_read_data, ret] = wasi_farm_ref.fd_pread(mapped_fd, iovs_view, offset); + const iovs_view = new Uint32Array( + buffer.buffer, + iovs_ptr, + iovs_len * 2, + ); + const [nerad_and_read_data, ret] = wasi_farm_ref.fd_pread( + mapped_fd, + iovs_view, + offset, + ); if (nerad_and_read_data) { const iovecs = wasi.Iovec.read_bytes_array( buffer, @@ -501,7 +688,7 @@ export class WASIFarmAnimal { } buffer8.set( read_data.slice(nreaded, nreaded + iovec.buf_len), - iovec.buf + iovec.buf, ); nreaded += iovec.buf_len; } @@ -530,7 +717,10 @@ export class WASIFarmAnimal { return [undefined, wasi.ERRNO_BADF]; } // console.log("fd_prestat_dir_name: fd", mapped_fd, "path_len", path_len); - const [path, ret] = wasi_farm_ref.fd_prestat_dir_name(mapped_fd, path_len); + const [path, ret] = wasi_farm_ref.fd_prestat_dir_name( + mapped_fd, + path_len, + ); if (path) { // console.log("fd_prestat_dir_name", new TextDecoder().decode(path)); // console.log("fd_prestat_dir_name", path); @@ -539,7 +729,13 @@ export class WASIFarmAnimal { } return ret; }, - fd_pwrite(fd: number, iovs_ptr: number, iovs_len: number, offset: bigint, nwritten_ptr: number) { + fd_pwrite( + fd: number, + iovs_ptr: number, + iovs_len: number, + offset: bigint, + nwritten_ptr: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { @@ -547,15 +743,16 @@ export class WASIFarmAnimal { } const buffer = new DataView(self.inst.exports.memory.buffer); const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); - const iovecs = wasi.Ciovec.read_bytes_array( - buffer, - iovs_ptr, - iovs_len, + const iovecs = wasi.Ciovec.read_bytes_array(buffer, iovs_ptr, iovs_len); + const data = new Uint8Array( + iovecs.reduce((acc, iovec) => acc + iovec.buf_len, 0), ); - const data = new Uint8Array(iovecs.reduce((acc, iovec) => acc + iovec.buf_len, 0)); let nwritten = 0; for (const iovec of iovecs) { - data.set(buffer8.slice(iovec.buf, iovec.buf + iovec.buf_len), nwritten); + data.set( + buffer8.slice(iovec.buf, iovec.buf + iovec.buf_len), + nwritten, + ); nwritten += iovec.buf_len; } const [written, ret] = wasi_farm_ref.fd_pwrite(mapped_fd, data, offset); @@ -564,7 +761,12 @@ export class WASIFarmAnimal { } return ret; }, - fd_read(fd: number, iovs_ptr: number, iovs_len: number, nread_ptr: number) { + fd_read( + fd: number, + iovs_ptr: number, + iovs_len: number, + nread_ptr: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { @@ -572,9 +774,16 @@ export class WASIFarmAnimal { } const buffer = new DataView(self.inst.exports.memory.buffer); const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); - const iovs_view = new Uint32Array(buffer.buffer, iovs_ptr, iovs_len * 2); + const iovs_view = new Uint32Array( + buffer.buffer, + iovs_ptr, + iovs_len * 2, + ); - const [nerad_and_read_data, ret] = wasi_farm_ref.fd_read(mapped_fd, iovs_view); + const [nerad_and_read_data, ret] = wasi_farm_ref.fd_read( + mapped_fd, + iovs_view, + ); if (nerad_and_read_data) { const iovecs = wasi.Iovec.read_bytes_array( buffer, @@ -597,14 +806,20 @@ export class WASIFarmAnimal { } buffer8.set( read_data.slice(nreaded, nreaded + iovec.buf_len), - iovec.buf + iovec.buf, ); nreaded += iovec.buf_len; } } return ret; }, - fd_readdir(fd: number, buf_ptr: number, buf_len: number, cookie: bigint, buf_used_ptr: number) { + fd_readdir( + fd: number, + buf_ptr: number, + buf_len: number, + cookie: bigint, + buf_used_ptr: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { @@ -612,7 +827,11 @@ export class WASIFarmAnimal { } const buffer = new DataView(self.inst.exports.memory.buffer); const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); - const [nerad_and_read_data, ret] = wasi_farm_ref.fd_readdir(mapped_fd, buf_len, cookie); + const [nerad_and_read_data, ret] = wasi_farm_ref.fd_readdir( + mapped_fd, + buf_len, + cookie, + ); if (nerad_and_read_data) { const [read_data, buf_used] = nerad_and_read_data; buffer.setUint32(buf_used_ptr, buf_used, true); @@ -626,14 +845,19 @@ export class WASIFarmAnimal { const [mapped_fd, wasi_farm_ref_n] = self.get_fd_and_wasi_ref_n(fd); const [mapped_to, wasi_farm_ref_to] = self.get_fd_and_wasi_ref(to); - if (mapped_fd === undefined || wasi_farm_ref_n === undefined || mapped_to === undefined || wasi_farm_ref_to === undefined) { + if ( + mapped_fd === undefined || + wasi_farm_ref_n === undefined || + mapped_to === undefined || + wasi_farm_ref_to === undefined + ) { return wasi.ERRNO_BADF; } const ret = wasi_farm_ref_to.fd_close(mapped_to); self.check_fds(); - if (ret != wasi.ERRNO_SUCCESS) { + if (ret !== wasi.ERRNO_SUCCESS) { return ret; } @@ -641,13 +865,22 @@ export class WASIFarmAnimal { return wasi.ERRNO_SUCCESS; }, - fd_seek(fd: number, offset: bigint, whence: number, newoffset_ptr: number) { + fd_seek( + fd: number, + offset: bigint, + whence: number, + newoffset_ptr: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { return [undefined, wasi.ERRNO_BADF]; } - const [newoffset, ret] = wasi_farm_ref.fd_seek(mapped_fd, offset, whence); + const [newoffset, ret] = wasi_farm_ref.fd_seek( + mapped_fd, + offset, + whence, + ); if (newoffset) { const buffer = new DataView(self.inst.exports.memory.buffer); @@ -677,7 +910,12 @@ export class WASIFarmAnimal { } return ret; }, - fd_write(fd: number, iovs_ptr: number, iovs_len: number, nwritten_ptr: number) { + fd_write( + fd: number, + iovs_ptr: number, + iovs_len: number, + nwritten_ptr: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { @@ -688,17 +926,18 @@ export class WASIFarmAnimal { const buffer = new DataView(self.inst.exports.memory.buffer); const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); - const iovecs = wasi.Ciovec.read_bytes_array( - buffer, - iovs_ptr, - iovs_len, - ); + const iovecs = wasi.Ciovec.read_bytes_array(buffer, iovs_ptr, iovs_len); // console.log("iovecs", iovecs); - const data = new Uint8Array(iovecs.reduce((acc, iovec) => acc + iovec.buf_len, 0)); + const data = new Uint8Array( + iovecs.reduce((acc, iovec) => acc + iovec.buf_len, 0), + ); // console.log("data", data); let nwritten = 0; for (const iovec of iovecs) { - data.set(buffer8.slice(iovec.buf, iovec.buf + iovec.buf_len), nwritten); + data.set( + buffer8.slice(iovec.buf, iovec.buf + iovec.buf_len), + nwritten, + ); nwritten += iovec.buf_len; } @@ -723,7 +962,13 @@ export class WASIFarmAnimal { const path = buffer8.slice(path_ptr, path_ptr + path_len); return wasi_farm_ref.path_create_directory(mapped_fd, path); }, - path_filestat_get(fd: number, flags: number, path_ptr: number, path_len: number, filestat_ptr: number) { + path_filestat_get( + fd: number, + flags: number, + path_ptr: number, + path_len: number, + filestat_ptr: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { @@ -732,13 +977,25 @@ export class WASIFarmAnimal { const buffer = new DataView(self.inst.exports.memory.buffer); const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); const path = buffer8.slice(path_ptr, path_ptr + path_len); - const [filestat, ret] = wasi_farm_ref.path_filestat_get(mapped_fd, flags, path); + const [filestat, ret] = wasi_farm_ref.path_filestat_get( + mapped_fd, + flags, + path, + ); if (filestat) { filestat.write_bytes(buffer, filestat_ptr); } return ret; }, - path_filestat_set_times(fd: number, flags: number, path_ptr: number, path_len: number, atim: bigint, mtim: bigint, fst_flags: number) { + path_filestat_set_times( + fd: number, + flags: number, + path_ptr: number, + path_len: number, + atim: bigint, + mtim: bigint, + fst_flags: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { @@ -746,25 +1003,68 @@ export class WASIFarmAnimal { } const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); const path = buffer8.slice(path_ptr, path_ptr + path_len); - return wasi_farm_ref.path_filestat_set_times(mapped_fd, flags, path, atim, mtim, fst_flags); + return wasi_farm_ref.path_filestat_set_times( + mapped_fd, + flags, + path, + atim, + mtim, + fst_flags, + ); }, // TODO! Make it work with different wasi_farm_ref - path_link(old_fd: number, old_flags: number, old_path_ptr: number, old_path_len: number, new_fd: number, new_path_ptr: number, new_path_len: number) { + path_link( + old_fd: number, + old_flags: number, + old_path_ptr: number, + old_path_len: number, + new_fd: number, + new_path_ptr: number, + new_path_len: number, + ) { self.check_fds(); const [mapped_old_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(old_fd); - const [mapped_new_fd, wasi_farm_ref_new] = self.get_fd_and_wasi_ref(new_fd); - if (mapped_old_fd === undefined || wasi_farm_ref === undefined || mapped_new_fd === undefined || wasi_farm_ref_new === undefined) { + const [mapped_new_fd, wasi_farm_ref_new] = + self.get_fd_and_wasi_ref(new_fd); + if ( + mapped_old_fd === undefined || + wasi_farm_ref === undefined || + mapped_new_fd === undefined || + wasi_farm_ref_new === undefined + ) { return wasi.ERRNO_BADF; } if (wasi_farm_ref !== wasi_farm_ref_new) { return wasi.ERRNO_BADF; } const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); - const old_path = buffer8.slice(old_path_ptr, old_path_ptr + old_path_len); - const new_path = buffer8.slice(new_path_ptr, new_path_ptr + new_path_len); - return wasi_farm_ref.path_link(mapped_old_fd, old_flags, old_path, mapped_new_fd, new_path); + const old_path = buffer8.slice( + old_path_ptr, + old_path_ptr + old_path_len, + ); + const new_path = buffer8.slice( + new_path_ptr, + new_path_ptr + new_path_len, + ); + return wasi_farm_ref.path_link( + mapped_old_fd, + old_flags, + old_path, + mapped_new_fd, + new_path, + ); }, - path_open(fd: number, dirflags: number, path_ptr: number, path_len: number, oflags: number, fs_rights_base: bigint, fs_rights_inheriting: bigint, fs_flags: number, opened_fd_ptr: number) { + path_open( + fd: number, + dirflags: number, + path_ptr: number, + path_len: number, + oflags: number, + fs_rights_base: bigint, + fs_rights_inheriting: bigint, + fs_flags: number, + opened_fd_ptr: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref_n] = self.get_fd_and_wasi_ref_n(fd); if (mapped_fd === undefined || wasi_farm_ref_n === undefined) { @@ -773,18 +1073,36 @@ export class WASIFarmAnimal { const wasi_farm_ref = self.wasi_farm_refs[wasi_farm_ref_n]; const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); const path = buffer8.slice(path_ptr, path_ptr + path_len); - const [opened_fd, ret] = wasi_farm_ref.path_open(mapped_fd, dirflags, path, oflags, fs_rights_base, fs_rights_inheriting, fs_flags); + const [opened_fd, ret] = wasi_farm_ref.path_open( + mapped_fd, + dirflags, + path, + oflags, + fs_rights_base, + fs_rights_inheriting, + fs_flags, + ); if (opened_fd) { if (self.fd_map.includes([opened_fd, wasi_farm_ref_n])) { throw new Error("opened_fd already exists"); } - const mapped_opened_fd = self.map_new_fd_and_notify(opened_fd, wasi_farm_ref_n); + const mapped_opened_fd = self.map_new_fd_and_notify( + opened_fd, + wasi_farm_ref_n, + ); const buffer = new DataView(self.inst.exports.memory.buffer); buffer.setUint32(opened_fd_ptr, mapped_opened_fd, true); } return ret; }, - path_readlink(fd: number, path_ptr: number, path_len: number, buf_ptr: number, buf_len: number, buf_used_ptr: number) { + path_readlink( + fd: number, + path_ptr: number, + path_len: number, + buf_ptr: number, + buf_len: number, + buf_used_ptr: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { @@ -792,7 +1110,11 @@ export class WASIFarmAnimal { } const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); const path = buffer8.slice(path_ptr, path_ptr + path_len); - const [buf, ret] = wasi_farm_ref.path_readlink(mapped_fd, path, buf_len); + const [buf, ret] = wasi_farm_ref.path_readlink( + mapped_fd, + path, + buf_len, + ); if (buf) { const buffer = new DataView(self.inst.exports.memory.buffer); buffer.setUint32(buf_used_ptr, buf.length, true); @@ -811,30 +1133,66 @@ export class WASIFarmAnimal { return wasi_farm_ref.path_remove_directory(mapped_fd, path); }, // TODO! Make it work with different wasi_farm_ref - path_rename(old_fd: number, old_path_ptr: number, old_path_len: number, new_fd: number, new_path_ptr: number, new_path_len: number) { + path_rename( + old_fd: number, + old_path_ptr: number, + old_path_len: number, + new_fd: number, + new_path_ptr: number, + new_path_len: number, + ) { self.check_fds(); const [mapped_old_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(old_fd); - const [mapped_new_fd, wasi_farm_ref_new] = self.get_fd_and_wasi_ref(new_fd); - if (mapped_old_fd === undefined || wasi_farm_ref === undefined || mapped_new_fd === undefined || wasi_farm_ref_new === undefined) { + const [mapped_new_fd, wasi_farm_ref_new] = + self.get_fd_and_wasi_ref(new_fd); + if ( + mapped_old_fd === undefined || + wasi_farm_ref === undefined || + mapped_new_fd === undefined || + wasi_farm_ref_new === undefined + ) { return wasi.ERRNO_BADF; } if (wasi_farm_ref !== wasi_farm_ref_new) { return wasi.ERRNO_BADF; } const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); - const old_path = buffer8.slice(old_path_ptr, old_path_ptr + old_path_len); - const new_path = buffer8.slice(new_path_ptr, new_path_ptr + new_path_len); - return wasi_farm_ref.path_rename(mapped_old_fd, old_path, mapped_new_fd, new_path); + const old_path = buffer8.slice( + old_path_ptr, + old_path_ptr + old_path_len, + ); + const new_path = buffer8.slice( + new_path_ptr, + new_path_ptr + new_path_len, + ); + return wasi_farm_ref.path_rename( + mapped_old_fd, + old_path, + mapped_new_fd, + new_path, + ); }, - path_symlink(old_path_ptr: number, old_path_len: number, fd: number, new_path_ptr: number, new_path_len: number) { + path_symlink( + old_path_ptr: number, + old_path_len: number, + fd: number, + new_path_ptr: number, + new_path_len: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { return wasi.ERRNO_BADF; } const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); - const old_path = buffer8.slice(old_path_ptr, old_path_ptr + old_path_len); - const new_path = buffer8.slice(new_path_ptr, new_path_ptr + new_path_len); + const old_path = buffer8.slice( + old_path_ptr, + old_path_ptr + old_path_len, + ); + const new_path = buffer8.slice( + new_path_ptr, + new_path_ptr + new_path_len, + ); return wasi_farm_ref.path_symlink(old_path, mapped_fd, new_path); }, path_unlink_file(fd: number, path_ptr: number, path_len: number) { @@ -858,7 +1216,7 @@ export class WASIFarmAnimal { }, proc_raise(sig: number) { self.check_fds(); - throw "raised signal " + sig; + throw `raised signal ${sig}`; }, sched_yield() { self.check_fds(); @@ -902,6 +1260,24 @@ export class WASIFarmAnimal { self.check_fds(); throw "sockets not supported"; }, - } + }; + + this.wasiThreadImport = { + "thread-spawn": (start_arg: number) => { + self.check_fds(); + if (!self.can_thread_spawn) { + throw new Error("thread_spawn is not allowed"); + } + + const thread_id = self.thread_spawner.thread_spawn( + start_arg, + self.args, + self.env, + self.fd_map, + ); + + return thread_id; + }, + }; } } diff --git a/src/wasi_farm/farm.ts b/src/wasi_farm/farm.ts index cca48fd..7966339 100644 --- a/src/wasi_farm/farm.ts +++ b/src/wasi_farm/farm.ts @@ -1,9 +1,9 @@ import { debug } from "../debug.js"; -import { Fd } from "../fd.js"; -import { Options } from "../wasi.js"; -import { WASIFarmPark } from "./park.js"; -import { WASIFarmRefObject } from "./ref.js"; -import { WASIFarmParkUseArrayBuffer } from "./shared_array_buffer/park.js"; +import type { Fd } from "../fd.js"; +import type { Options } from "../wasi.js"; +import type { WASIFarmPark } from "./park.js"; +import type { WASIFarmRefObject } from "./ref.js"; +import { WASIFarmParkUseArrayBuffer } from "./shared_array_buffer/index.js"; export class WASIFarm { private fds: Array; @@ -52,10 +52,17 @@ export class WASIFarm { // Failed to execute 'postMessage' on 'Worker': // SharedArrayBuffer transfer requires self.crossOriginIsolated. try { - new SharedArrayBuffer(4); - this.can_array_buffer = true; - } catch (_) { - this.can_array_buffer = false; + new SharedArrayBuffer(4); + this.can_array_buffer = true; + } catch (e) { + this.can_array_buffer = false; + console.warn("SharedArrayBuffer is not supported:", e); + + if (!crossOriginIsolated) { + console.warn( + "SharedArrayBuffer is not supported because crossOriginIsolated is not enabled.", + ); + } } if (this.can_array_buffer) { @@ -92,7 +99,7 @@ export class WASIFarm { // console.log("fds", prop, value); this.fds[prop] = value; return true; - } + }, }); return fds; diff --git a/src/wasi_farm/index.ts b/src/wasi_farm/index.ts index 9dc3946..76b6389 100644 --- a/src/wasi_farm/index.ts +++ b/src/wasi_farm/index.ts @@ -1,4 +1,5 @@ +import { WASIFarmAnimal } from "./animals.js"; import { WASIFarm } from "./farm.js"; import { WASIFarmRef } from "./ref.js"; -import { WASIFarmAnimal } from "./animals.js"; -export { WASIFarm, WASIFarmRef, WASIFarmAnimal }; +import { thread_spawn_on_worker } from "./shared_array_buffer/index.js"; +export { WASIFarm, WASIFarmRef, WASIFarmAnimal, thread_spawn_on_worker }; diff --git a/src/wasi_farm/park.ts b/src/wasi_farm/park.ts index 94e7600..03e6119 100644 --- a/src/wasi_farm/park.ts +++ b/src/wasi_farm/park.ts @@ -1,7 +1,7 @@ -import { Fd } from "../fd.js"; -import { WASIFarmRefObject } from "./ref.js"; -import * as wasi from "../wasi_defs.js"; import { debug } from "../debug.js"; +import type { Fd } from "../fd.js"; +import * as wasi from "../wasi_defs.js"; +import type { WASIFarmRefObject } from "./ref.js"; export abstract class WASIFarmPark { abstract get_ref(): WASIFarmRefObject; @@ -49,12 +49,12 @@ export abstract class WASIFarmPark { const len = this.get_new_fd_lock.push(async () => { let ret = -1; for (let i = 0; i < this.fds.length; i++) { - if (this.fds[i] == undefined) { + if (this.fds[i] === undefined) { ret = i; break; } } - if (ret == -1) { + if (ret === -1) { ret = this.fds.length; // console.log("push_fd", this.fds.length) this.fds.push(undefined); @@ -68,17 +68,20 @@ export abstract class WASIFarmPark { } // If it's assigned, it's resolved. - resolve([async () => { - this.get_new_fd_lock.shift(); - const fn = this.get_new_fd_lock[0]; - if (fn != undefined) { - fn(); - } - // assigned and notify - await this.notify_set_fd(ret); - }, ret]); + resolve([ + async () => { + this.get_new_fd_lock.shift(); + const fn = this.get_new_fd_lock[0]; + if (fn !== undefined) { + fn(); + } + // assigned and notify + await this.notify_set_fd(ret); + }, + ret, + ]); }); - if (len == 1) { + if (len === 1) { this.get_new_fd_lock[0](); } }); @@ -86,44 +89,40 @@ export abstract class WASIFarmPark { } protected fd_advise(fd: number): number { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { return wasi.ERRNO_SUCCESS; - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } protected fd_allocate(fd: number, offset: bigint, len: bigint): number { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { return this.fds[fd].fd_allocate(offset, len); - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } protected async fd_close(fd: number): Promise { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { const ret = this.fds[fd].fd_close(); this.fds[fd] = undefined; // console.log("fd_close1", fd); await this.notify_rm_fd(fd); // console.log("fd_close2", fd); return ret; - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } protected fd_datasync(fd: number): number { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { return this.fds[fd].fd_sync(); - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } protected fd_fdstat_get(fd: number): [wasi.Fdstat | undefined, number] { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { const { ret, fdstat } = this.fds[fd].fd_fdstat_get(); if (fdstat != null) { return [fdstat, ret]; @@ -134,23 +133,28 @@ export abstract class WASIFarmPark { } protected fd_fdstat_set_flags(fd: number, flags: number): number { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { return this.fds[fd].fd_fdstat_set_flags(flags); - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } - protected fd_fdstat_set_rights(fd: number, fs_rights_base: bigint, fs_rights_inheriting: bigint): number { - if (this.fds[fd] != undefined) { - return this.fds[fd].fd_fdstat_set_rights(fs_rights_base, fs_rights_inheriting); - } else { - return wasi.ERRNO_BADF; + protected fd_fdstat_set_rights( + fd: number, + fs_rights_base: bigint, + fs_rights_inheriting: bigint, + ): number { + if (this.fds[fd] !== undefined) { + return this.fds[fd].fd_fdstat_set_rights( + fs_rights_base, + fs_rights_inheriting, + ); } + return wasi.ERRNO_BADF; } protected fd_filestat_get(fd: number): [wasi.Filestat | undefined, number] { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { const { ret, filestat } = this.fds[fd].fd_filestat_get(); if (filestat != null) { return [filestat, ret]; @@ -161,29 +165,36 @@ export abstract class WASIFarmPark { } protected fd_filestat_set_size(fd: number, size: bigint): number { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { return this.fds[fd].fd_filestat_set_size(size); - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } - protected fd_filestat_set_times(fd: number, atim: bigint, mtim: bigint, fst_flags: number): number { - if (this.fds[fd] != undefined) { + protected fd_filestat_set_times( + fd: number, + atim: bigint, + mtim: bigint, + fst_flags: number, + ): number { + if (this.fds[fd] !== undefined) { return this.fds[fd].fd_filestat_set_times(atim, mtim, fst_flags); - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } - protected fd_pread(fd: number, iovecs: Array, offset: bigint): [[number, Uint8Array] | undefined, number] { - if (this.fds[fd] != undefined) { + protected fd_pread( + fd: number, + iovecs: Array, + offset: bigint, + ): [[number, Uint8Array] | undefined, number] { + if (this.fds[fd] !== undefined) { let nread = 0; let buffer8 = new Uint8Array(0); for (const iovec of iovecs) { const { ret, data } = this.fds[fd].fd_pread(iovec.buf_len, offset); - if (ret != wasi.ERRNO_SUCCESS) { + if (ret !== wasi.ERRNO_SUCCESS) { return [[nread, buffer8], ret]; } const new_buffer = new Uint8Array(buffer8.byteLength + data.byteLength); @@ -191,18 +202,17 @@ export abstract class WASIFarmPark { new_buffer.set(data, buffer8.byteLength); buffer8 = new_buffer; nread += data.byteLength; - if (data.byteLength != iovec.buf_len) { + if (data.byteLength !== iovec.buf_len) { break; } } return [[nread, buffer8], wasi.ERRNO_SUCCESS]; - } else { - return [undefined, wasi.ERRNO_BADF]; } + return [undefined, wasi.ERRNO_BADF]; } protected fd_prestat_get(fd: number): [wasi.Prestat | undefined, number] { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { const { ret, prestat } = this.fds[fd].fd_prestat_get(); if (prestat != null) { return [prestat, ret]; @@ -212,8 +222,11 @@ export abstract class WASIFarmPark { return [undefined, wasi.ERRNO_BADF]; } - protected fd_prestat_dir_name(fd: number, path_len: number): [Uint8Array | undefined, number] { - if (this.fds[fd] != undefined) { + protected fd_prestat_dir_name( + fd: number, + path_len: number, + ): [Uint8Array | undefined, number] { + if (this.fds[fd] !== undefined) { const { ret, prestat } = this.fds[fd].fd_prestat_get(); if (prestat) { const prestat_dir_name = prestat.inner.pr_name; @@ -238,17 +251,23 @@ export abstract class WASIFarmPark { return [undefined, wasi.ERRNO_BADF]; } - protected fd_pwrite(fd: number, write_data: Uint8Array, offset: bigint): [number | undefined, number] { - if (this.fds[fd] != undefined) { + protected fd_pwrite( + fd: number, + write_data: Uint8Array, + offset: bigint, + ): [number | undefined, number] { + if (this.fds[fd] !== undefined) { const { ret, nwritten } = this.fds[fd].fd_pwrite(write_data, offset); return [nwritten, ret]; - } else { - return [undefined, wasi.ERRNO_BADF]; } + return [undefined, wasi.ERRNO_BADF]; } - protected fd_read(fd: number, iovecs: Array): [[number, Uint8Array] | undefined, number] { - if (this.fds[fd] != undefined) { + protected fd_read( + fd: number, + iovecs: Array, + ): [[number, Uint8Array] | undefined, number] { + if (this.fds[fd] !== undefined) { let nread = 0; // console.log("fd_read: park: iovecs: ", iovecs); @@ -261,7 +280,7 @@ export abstract class WASIFarmPark { for (const iovec of iovecs) { const { ret, data } = this.fds[fd].fd_read(iovec.buf_len); // console.log("fd_read: park: data: ", data); - if (ret != wasi.ERRNO_SUCCESS) { + if (ret !== wasi.ERRNO_SUCCESS) { return [[nread, buffer8], ret]; } const new_buffer = new Uint8Array(buffer8.byteLength + data.byteLength); @@ -269,24 +288,24 @@ export abstract class WASIFarmPark { new_buffer.set(data, buffer8.byteLength); buffer8 = new_buffer; nread += data.byteLength; - if (data.byteLength != iovec.buf_len) { + if (data.byteLength !== iovec.buf_len) { break; } } // console.log("fd_read: park: nread: ", nread); - return [[ - nread, - buffer8, - ], wasi.ERRNO_SUCCESS]; - } else { - return [undefined, wasi.ERRNO_BADF]; + return [[nread, buffer8], wasi.ERRNO_SUCCESS]; } + return [undefined, wasi.ERRNO_BADF]; } - protected fd_readdir(fd: number, buf_len: number, cookie: bigint): [[Uint8Array, number] | undefined, number] { - if (this.fds[fd] != undefined) { + protected fd_readdir( + fd: number, + buf_len: number, + cookie: bigint, + ): [[Uint8Array, number] | undefined, number] { + if (this.fds[fd] !== undefined) { const array = new Uint8Array(buf_len); let buf_used = 0; @@ -295,7 +314,7 @@ export abstract class WASIFarmPark { // eslint-disable-next-line no-constant-condition while (true) { const { ret, dirent } = this.fds[fd].fd_readdir_single(cookie); - if (ret != wasi.ERRNO_SUCCESS) { + if (ret !== wasi.ERRNO_SUCCESS) { return [[array, buf_used], ret]; } if (dirent == null) { @@ -331,9 +350,8 @@ export abstract class WASIFarmPark { } return [[array, buf_used], wasi.ERRNO_SUCCESS]; - } else { - return [undefined, wasi.ERRNO_BADF]; } + return [undefined, wasi.ERRNO_BADF]; } // protected async fd_renumber(fd: number, to: number): Promise { @@ -351,51 +369,57 @@ export abstract class WASIFarmPark { // } // } - protected fd_seek(fd: number, offset: bigint, whence: number): [bigint | undefined, number] { - if (this.fds[fd] != undefined) { + protected fd_seek( + fd: number, + offset: bigint, + whence: number, + ): [bigint | undefined, number] { + if (this.fds[fd] !== undefined) { const { ret, offset: new_offset } = this.fds[fd].fd_seek(offset, whence); return [new_offset, ret]; - } else { - return [undefined, wasi.ERRNO_BADF]; } + return [undefined, wasi.ERRNO_BADF]; } protected fd_sync(fd: number): number { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { return this.fds[fd].fd_sync(); - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } protected fd_tell(fd: number): [bigint | undefined, number] { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { const { ret, offset } = this.fds[fd].fd_tell(); return [offset, ret]; - } else { - return [undefined, wasi.ERRNO_BADF]; } + return [undefined, wasi.ERRNO_BADF]; } - protected fd_write(fd: number, write_data: Uint8Array): [number | undefined, number] { - if (this.fds[fd] != undefined) { + protected fd_write( + fd: number, + write_data: Uint8Array, + ): [number | undefined, number] { + if (this.fds[fd] !== undefined) { const { ret, nwritten } = this.fds[fd].fd_write(write_data); return [nwritten, ret]; - } else { - return [undefined, wasi.ERRNO_BADF]; } + return [undefined, wasi.ERRNO_BADF]; } protected path_create_directory(fd: number, path: string): number { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { return this.fds[fd].path_create_directory(path); - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } - protected path_filestat_get(fd: number, flags: number, path: string): [wasi.Filestat | undefined, number] { - if (this.fds[fd] != undefined) { + protected path_filestat_get( + fd: number, + flags: number, + path: string, + ): [wasi.Filestat | undefined, number] { + if (this.fds[fd] !== undefined) { const { ret, filestat } = this.fds[fd].path_filestat_get(flags, path); if (filestat != null) { return [filestat, ret]; @@ -405,16 +429,34 @@ export abstract class WASIFarmPark { return [undefined, wasi.ERRNO_BADF]; } - protected path_filestat_set_times(fd: number, flags: number, path: string, atim: bigint, mtim: bigint, fst_flags: number): number { - if (this.fds[fd] != undefined) { - return this.fds[fd].path_filestat_set_times(flags, path, atim, mtim, fst_flags); - } else { - return wasi.ERRNO_BADF; + protected path_filestat_set_times( + fd: number, + flags: number, + path: string, + atim: bigint, + mtim: bigint, + fst_flags: number, + ): number { + if (this.fds[fd] !== undefined) { + return this.fds[fd].path_filestat_set_times( + flags, + path, + atim, + mtim, + fst_flags, + ); } + return wasi.ERRNO_BADF; } - protected path_link(old_fd: number, old_flags: number, old_path: string, new_fd: number, new_path: string): number { - if (this.fds[old_fd] != undefined && this.fds[new_fd] != undefined) { + protected path_link( + old_fd: number, + old_flags: number, + old_path: string, + new_fd: number, + new_path: string, + ): number { + if (this.fds[old_fd] !== undefined && this.fds[new_fd] !== undefined) { const { ret, inode_obj } = this.fds[old_fd].path_lookup( old_path, old_flags, @@ -423,9 +465,8 @@ export abstract class WASIFarmPark { return ret; } return this.fds[new_fd].path_link(new_path, inode_obj, false); - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } protected async path_open( @@ -437,7 +478,7 @@ export abstract class WASIFarmPark { fs_rights_inheriting: bigint, fs_flags: number, ): Promise<[number | undefined, number]> { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { debug.log("path_open", path); const { ret, fd_obj } = this.fds[fd].path_open( dirflags, @@ -448,7 +489,7 @@ export abstract class WASIFarmPark { fs_flags, ); // console.log("path_open: park: ", ret, fd_obj); - if (ret != wasi.ERRNO_SUCCESS) { + if (ret !== wasi.ERRNO_SUCCESS) { return [undefined, ret]; } @@ -465,13 +506,16 @@ export abstract class WASIFarmPark { // console.log("path_open: park: ", opened_fd); return [opened_fd, wasi.ERRNO_SUCCESS]; - } else { - return [undefined, wasi.ERRNO_BADF]; } + return [undefined, wasi.ERRNO_BADF]; } - protected path_readlink(fd: number, path: string, buf_len: number): [Uint8Array | undefined, number] { - if (this.fds[fd] != undefined) { + protected path_readlink( + fd: number, + path: string, + buf_len: number, + ): [Uint8Array | undefined, number] { + if (this.fds[fd] !== undefined) { debug.log("path_readlink", path); const { ret, data } = this.fds[fd].path_readlink(path); if (data != null) { @@ -483,57 +527,59 @@ export abstract class WASIFarmPark { return [data_buf, ret]; } return [undefined, ret]; - } else { - return [undefined, wasi.ERRNO_BADF]; } + return [undefined, wasi.ERRNO_BADF]; } protected path_remove_directory(fd: number, path: string): number { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { return this.fds[fd].path_remove_directory(path); - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } - protected path_rename(old_fd: number, old_path: string, new_fd: number, new_path: string): number { - if (this.fds[old_fd] != undefined && this.fds[new_fd] != undefined) { + protected path_rename( + old_fd: number, + old_path: string, + new_fd: number, + new_path: string, + ): number { + if (this.fds[old_fd] !== undefined && this.fds[new_fd] !== undefined) { // eslint-disable-next-line prefer-const - let { ret, inode_obj } = this.fds[old_fd].path_unlink( - old_path, - ); + let { ret, inode_obj } = this.fds[old_fd].path_unlink(old_path); if (inode_obj == null) { return ret; } ret = this.fds[new_fd].path_link(new_path, inode_obj, true); - if (ret != wasi.ERRNO_SUCCESS) { + if (ret !== wasi.ERRNO_SUCCESS) { if ( - this.fds[old_fd].path_link(old_path, inode_obj, true) != + this.fds[old_fd].path_link(old_path, inode_obj, true) !== wasi.ERRNO_SUCCESS ) { throw "path_link should always return success when relinking an inode back to the original place"; } } return ret; - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } // eslint-disable-next-line @typescript-eslint/no-unused-vars - protected path_symlink(old_path: string, fd: number, new_path: string): number { - if (this.fds[fd] != undefined) { + protected path_symlink( + old_path: string, + fd: number, + new_path: string, + ): number { + if (this.fds[fd] !== undefined) { return wasi.ERRNO_NOTSUP; - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } protected path_unlink_file(fd: number, path: string): number { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { return this.fds[fd].path_unlink_file(path); - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } } diff --git a/src/wasi_farm/polyfill.js b/src/wasi_farm/polyfill.js index c468f91..bde01dd 100644 --- a/src/wasi_farm/polyfill.js +++ b/src/wasi_farm/polyfill.js @@ -33,111 +33,115 @@ * when possible. The worker communicates with its parent using postMessage. */ -(function () { - if (typeof Atomics.waitAsync === "function") - return; - - let helperCode = ` - onmessage = function (ev) { - try { - switch (ev.data[0]) { - case 'wait': { - let [_, ia, index, value, timeout] = ev.data; - let result = Atomics.wait(ia, index, value, timeout) - postMessage(['ok', result]); - break; - } - default: { - throw new Error("Bogus message sent to wait helper: " + ev.data.join(',')); - } +(() => { + if (typeof Atomics.waitAsync === "function") return; + + const helperCode = ` + onmessage = function (ev) { + try { + switch (ev.data[0]) { + case 'wait': { + let [_, ia, index, value, timeout] = ev.data; + let result = Atomics.wait(ia, index, value, timeout) + postMessage(['ok', result]); + break; } - } catch (e) { - console.log("Exception in wait helper"); - postMessage(['error', 'Exception']); - } - } - `; - - let helpers = []; - - function allocHelper() { - if (helpers.length > 0) - return helpers.pop(); - let h = new Worker("data:application/javascript," + encodeURIComponent(helperCode)); - return h; - } - - function freeHelper(h) { - helpers.push(h); - } - - // Atomics.waitAsync always returns a promise. Throws standard errors - // for parameter validation. The promise is resolved with a string as from - // Atomics.wait, or, in the case something went completely wrong, it is - // rejected with an error string. - - function waitAsync(ia, index_, value_, timeout_) { - if (typeof ia != "object" || !(ia instanceof Int32Array) || !(ia.buffer instanceof SharedArrayBuffer)) - throw new TypeError("Expected shared memory"); - - // These conversions only approximate the desired semantics but are - // close enough for the polyfill. - - let index = index_|0; - let value = value_|0; - let timeout = timeout_ === undefined ? Infinity : +timeout_; - - // Range checking for the index. - - ia[index]; - - // Optimization, avoid the helper thread in this common case. - - if (Atomics.load(ia, index) != value) - return Promise.resolve("not-equal"); - - // General case, we must wait. - - return new Promise(function (resolve, reject) { - let h = allocHelper(); - h.onmessage = function (ev) { - // Free the helper early so that it can be reused if the resolution - // needs a helper. - freeHelper(h); - switch (ev.data[0]) { - case 'ok': - resolve(ev.data[1]); - break; - case 'error': - // Note, rejection is not in the spec, it is an artifact of the polyfill. - // The helper already printed an error to the console. - reject(ev.data[1]); - break; - } + default: { + throw new Error("Bogus message sent to wait helper: " + ev.data.join(',')); } - - // It's possible to do better here if the ia is already known to the - // helper. In that case we can communicate the other data through - // shared memory and wake the agent. And it is possible to make ia - // known to the helper by waking it with a special value so that it - // checks its messages, and then posting the ia to the helper. Some - // caching / decay scheme is useful no doubt, to improve performance - // and avoid leaks. - // - // In the event we wake the helper directly, we can micro-wait here - // for a quick result. We'll need to restructure some code to make - // that work out properly, and some synchronization is necessary for - // the helper to know that we've picked up the result and no - // postMessage is necessary. - - h.postMessage(['wait', ia, index, value, timeout]); - }) - } - - Object.defineProperty(Atomics, 'waitAsync', { - value: waitAsync, - configurable: true, - enumerable: false, - writable: true, + } + } catch (e) { + console.log("Exception in wait helper"); + postMessage(['error', 'Exception']); + } + } + `; + + const helpers = []; + + function allocHelper() { + if (helpers.length > 0) return helpers.pop(); + const h = new Worker( + `data:application/javascript,${encodeURIComponent(helperCode)}`, + ); + return h; + } + + function freeHelper(h) { + helpers.push(h); + } + + // Atomics.waitAsync always returns a promise. Throws standard errors + // for parameter validation. The promise is resolved with a string as from + // Atomics.wait, or, in the case something went completely wrong, it is + // rejected with an error string. + + function waitAsync(ia, index_, value_, timeout_) { + if ( + typeof ia !== "object" || + !(ia instanceof Int32Array) || + !(ia.buffer instanceof SharedArrayBuffer) + ) + throw new TypeError("Expected shared memory"); + + // These conversions only approximate the desired semantics but are + // close enough for the polyfill. + + const index = index_ | 0; + const value = value_ | 0; + const timeout = + timeout_ === undefined ? Number.POSITIVE_INFINITY : +timeout_; + + // Range checking for the index. + + ia[index]; + + // Optimization, avoid the helper thread in this common case. + + if (Atomics.load(ia, index) !== value) return Promise.resolve("not-equal"); + + // General case, we must wait. + + return new Promise((resolve, reject) => { + const h = allocHelper(); + h.onmessage = (ev) => { + // Free the helper early so that it can be reused if the resolution + // needs a helper. + freeHelper(h); + switch (ev.data[0]) { + case "ok": + resolve(ev.data[1]); + break; + case "error": + // Note, rejection is not in the spec, it is an artifact of the polyfill. + // The helper already printed an error to the console. + reject(ev.data[1]); + break; + } + }; + + // It's possible to do better here if the ia is already known to the + // helper. In that case we can communicate the other data through + // shared memory and wake the agent. And it is possible to make ia + // known to the helper by waking it with a special value so that it + // checks its messages, and then posting the ia to the helper. Some + // caching / decay scheme is useful no doubt, to improve performance + // and avoid leaks. + // + // In the event we wake the helper directly, we can micro-wait here + // for a quick result. We'll need to restructure some code to make + // that work out properly, and some synchronization is necessary for + // the helper to know that we've picked up the result and no + // postMessage is necessary. + + h.postMessage(["wait", ia, index, value, timeout]); }); + } + + Object.defineProperty(Atomics, "waitAsync", { + value: waitAsync, + configurable: true, + enumerable: false, + writable: true, + }); })(); diff --git a/src/wasi_farm/ref.ts b/src/wasi_farm/ref.ts index aa5837c..1e86f03 100644 --- a/src/wasi_farm/ref.ts +++ b/src/wasi_farm/ref.ts @@ -1,6 +1,5 @@ -import { Options } from "../wasi.js"; -import * as wasi from "../wasi_defs.js"; -import { FdCloseSender } from "./sender.js"; +import type * as wasi from "../wasi_defs.js"; +import type { FdCloseSender } from "./sender.js"; export type WASIFarmRefObject = { stdin: number | undefined; @@ -8,7 +7,7 @@ export type WASIFarmRefObject = { stderr: number | undefined; fd_close_receiver: FdCloseSender; default_fds: Array; -} +}; export abstract class WASIFarmRef { abstract get_fds_len(): number; @@ -66,34 +65,122 @@ export abstract class WASIFarmRef { } abstract fd_advise(fd: number | undefined): number; - abstract fd_allocate(fd: number | undefined, offset: bigint, len: bigint): number; + abstract fd_allocate( + fd: number | undefined, + offset: bigint, + len: bigint, + ): number; abstract fd_close(fd: number | undefined): number; abstract fd_datasync(fd: number | undefined): number; - abstract fd_fdstat_get(fd: number | undefined): [wasi.Fdstat | undefined, number]; + abstract fd_fdstat_get( + fd: number | undefined, + ): [wasi.Fdstat | undefined, number]; abstract fd_fdstat_set_flags(fd: number | undefined, flags: number): number; - abstract fd_fdstat_set_rights(fd: number | undefined, fs_rights_base: bigint, fs_rights_inheriting: bigint): number; - abstract fd_filestat_get(fd: number | undefined): [wasi.Filestat | undefined, number]; + abstract fd_fdstat_set_rights( + fd: number | undefined, + fs_rights_base: bigint, + fs_rights_inheriting: bigint, + ): number; + abstract fd_filestat_get( + fd: number | undefined, + ): [wasi.Filestat | undefined, number]; abstract fd_filestat_set_size(fd: number | undefined, size: bigint): number; - abstract fd_filestat_set_times(fd: number | undefined, atim: bigint, mtim: bigint, fst_flags: number): number; - abstract fd_pread(fd: number | undefined, iovs: Uint32Array, offset: bigint): [[number, Uint8Array] | undefined, number]; - abstract fd_prestat_get(fd: number | undefined): [[number, number] | undefined, number]; - abstract fd_prestat_dir_name(fd: number | undefined, path_len: number): [Uint8Array | undefined, number]; - abstract fd_pwrite(fd: number | undefined, iovs: Uint8Array, offset: bigint): [number | undefined, number]; - abstract fd_read(fd: number | undefined, iovs: Uint32Array): [[number, Uint8Array] | undefined, number]; - abstract fd_readdir(fd: number | undefined, limit_buf_len: number, cookie: bigint): [[Uint8Array, number] | undefined, number] + abstract fd_filestat_set_times( + fd: number | undefined, + atim: bigint, + mtim: bigint, + fst_flags: number, + ): number; + abstract fd_pread( + fd: number | undefined, + iovs: Uint32Array, + offset: bigint, + ): [[number, Uint8Array] | undefined, number]; + abstract fd_prestat_get( + fd: number | undefined, + ): [[number, number] | undefined, number]; + abstract fd_prestat_dir_name( + fd: number | undefined, + path_len: number, + ): [Uint8Array | undefined, number]; + abstract fd_pwrite( + fd: number | undefined, + iovs: Uint8Array, + offset: bigint, + ): [number | undefined, number]; + abstract fd_read( + fd: number | undefined, + iovs: Uint32Array, + ): [[number, Uint8Array] | undefined, number]; + abstract fd_readdir( + fd: number | undefined, + limit_buf_len: number, + cookie: bigint, + ): [[Uint8Array, number] | undefined, number]; // abstract fd_renumber(fd: number | undefined, to: number): number; - abstract fd_seek(fd: number | undefined, offset: bigint, whence: number): [bigint | undefined, number]; + abstract fd_seek( + fd: number | undefined, + offset: bigint, + whence: number, + ): [bigint | undefined, number]; abstract fd_sync(fd: number | undefined): number; abstract fd_tell(fd: number | undefined): [bigint, number]; - abstract fd_write(fd: number | undefined, iovs: Uint8Array): [number | undefined, number]; - abstract path_create_directory(fd: number | undefined, path: Uint8Array): number; - abstract path_filestat_get(fd: number | undefined, flags: number, path: Uint8Array): [wasi.Filestat | undefined, number]; - abstract path_filestat_set_times(fd: number | undefined, flags: number, path: Uint8Array, st_atim: bigint, st_mtim: bigint, fst_flags: number): number - abstract path_link(old_fd: number | undefined, old_flags: number, old_path: Uint8Array, new_fd: number | undefined, new_path: Uint8Array): number; - abstract path_open(fd: number | undefined, dirflags: number, path: Uint8Array, oflags: number, fs_rights_base: bigint, fs_rights_inheriting: bigint, fs_flags: number): [number, number]; - abstract path_readlink(fd: number | undefined, path: Uint8Array, buf_len: number): [Uint8Array | undefined, number]; - abstract path_remove_directory(fd: number | undefined, path: Uint8Array): number; - abstract path_rename(old_fd: number | undefined, old_path: Uint8Array, new_fd: number | undefined, new_path: Uint8Array): number; - abstract path_symlink(old_path: Uint8Array, fd: number | undefined, new_path: Uint8Array): number; + abstract fd_write( + fd: number | undefined, + iovs: Uint8Array, + ): [number | undefined, number]; + abstract path_create_directory( + fd: number | undefined, + path: Uint8Array, + ): number; + abstract path_filestat_get( + fd: number | undefined, + flags: number, + path: Uint8Array, + ): [wasi.Filestat | undefined, number]; + abstract path_filestat_set_times( + fd: number | undefined, + flags: number, + path: Uint8Array, + st_atim: bigint, + st_mtim: bigint, + fst_flags: number, + ): number; + abstract path_link( + old_fd: number | undefined, + old_flags: number, + old_path: Uint8Array, + new_fd: number | undefined, + new_path: Uint8Array, + ): number; + abstract path_open( + fd: number | undefined, + dirflags: number, + path: Uint8Array, + oflags: number, + fs_rights_base: bigint, + fs_rights_inheriting: bigint, + fs_flags: number, + ): [number, number]; + abstract path_readlink( + fd: number | undefined, + path: Uint8Array, + buf_len: number, + ): [Uint8Array | undefined, number]; + abstract path_remove_directory( + fd: number | undefined, + path: Uint8Array, + ): number; + abstract path_rename( + old_fd: number | undefined, + old_path: Uint8Array, + new_fd: number | undefined, + new_path: Uint8Array, + ): number; + abstract path_symlink( + old_path: Uint8Array, + fd: number | undefined, + new_path: Uint8Array, + ): number; abstract path_unlink_file(fd: number | undefined, path: Uint8Array): number; } diff --git a/src/wasi_farm/shared_array_buffer/allocator.ts b/src/wasi_farm/shared_array_buffer/allocator.ts index 95f6ef4..8cd3edf 100644 --- a/src/wasi_farm/shared_array_buffer/allocator.ts +++ b/src/wasi_farm/shared_array_buffer/allocator.ts @@ -1,10 +1,10 @@ // @ts-ignore // import { debug } from "../../debug.js"; -import "../polyfill.js"; +// import "../polyfill.js"; export type AllocatorUseArrayBufferObject = { share_arrays_memory: SharedArrayBuffer; -} +}; export class AllocatorUseArrayBuffer { // Pass a !Sized type @@ -40,7 +40,9 @@ export class AllocatorUseArrayBuffer { // Since postMessage makes the class an object, // it must be able to receive and assign a SharedArrayBuffer. constructor( - share_arrays_memory: SharedArrayBuffer = new SharedArrayBuffer(10 * 1024 * 1024), + share_arrays_memory: SharedArrayBuffer = new SharedArrayBuffer( + 10 * 1024 * 1024, + ), ) { this.share_arrays_memory = share_arrays_memory; const view = new Int32Array(this.share_arrays_memory); @@ -51,9 +53,7 @@ export class AllocatorUseArrayBuffer { // Since postMessage converts classes to objects, // it must be able to convert objects to classes. - static init_self( - sl: AllocatorUseArrayBufferObject, - ): AllocatorUseArrayBuffer { + static init_self(sl: AllocatorUseArrayBufferObject): AllocatorUseArrayBuffer { return new AllocatorUseArrayBuffer(sl.share_arrays_memory); } @@ -64,7 +64,7 @@ export class AllocatorUseArrayBuffer { // ptr, len // Pass I32Array ret_ptr ret_ptr: number, - ): Promise { + ): Promise<[number, number]> { const view = new Int32Array(this.share_arrays_memory); // eslint-disable-next-line no-constant-condition while (true) { @@ -83,13 +83,13 @@ export class AllocatorUseArrayBuffer { continue; } - this.write_inner(data, memory, ret_ptr); + const ret = this.write_inner(data, memory, ret_ptr); // release lock Atomics.store(view, 0, 0); Atomics.notify(view, 0, 1); - break; + return ret; } } @@ -153,7 +153,9 @@ export class AllocatorUseArrayBuffer { // extend memory // support from es2024 // this.share_arrays_memory.grow(new_memory_len); - throw new Error("size is bigger than memory. \nTODO! fix memory limit. support big size another way."); + throw new Error( + "size is bigger than memory. \nTODO! fix memory limit. support big size another way.", + ); } let data8: Uint8Array; @@ -183,7 +185,7 @@ export class AllocatorUseArrayBuffer { // eslint-disable-next-line @typescript-eslint/no-unused-vars pointer: number, // eslint-disable-next-line @typescript-eslint/no-unused-vars - len: number + len: number, ) { Atomics.sub(new Int32Array(this.share_arrays_memory), 1, 1); @@ -191,10 +193,7 @@ export class AllocatorUseArrayBuffer { } // get memory from pointer and length - get_memory( - ptr: number, - len: number, - ): ArrayBuffer { + get_memory(ptr: number, len: number): ArrayBuffer { const data = new ArrayBuffer(len); const view = new Uint8Array(data); view.set(new Uint8Array(this.share_arrays_memory).slice(ptr, ptr + len)); @@ -203,12 +202,14 @@ export class AllocatorUseArrayBuffer { // Write again to the memory before releasing // Not used because the situation for using it does not exist. - use_defined_memory( - ptr: number, - len: number, - data: ArrayBufferLike, - ) { + use_defined_memory(ptr: number, len: number, data: ArrayBufferLike) { const memory = new Uint8Array(this.share_arrays_memory); memory.set(new Uint8Array(data).slice(0, len), ptr); } + + get_object(): AllocatorUseArrayBufferObject { + return { + share_arrays_memory: this.share_arrays_memory, + }; + } } diff --git a/src/wasi_farm/shared_array_buffer/fd_close_sender.ts b/src/wasi_farm/shared_array_buffer/fd_close_sender.ts index 2f4ec40..a137e77 100644 --- a/src/wasi_farm/shared_array_buffer/fd_close_sender.ts +++ b/src/wasi_farm/shared_array_buffer/fd_close_sender.ts @@ -1,5 +1,8 @@ -import { FdCloseSender } from "../sender.js"; -import { ToRefSenderUseArrayBuffer, ToRefSenderUseArrayBufferObject } from "./sender.js"; +import type { FdCloseSender } from "../sender.js"; +import { + ToRefSenderUseArrayBuffer, + type ToRefSenderUseArrayBufferObject, +} from "./sender.js"; export type FdCloseSenderUseArrayBufferObject = { max_share_arrays_memory?: number; @@ -9,7 +12,10 @@ export type FdCloseSenderUseArrayBufferObject = { // Object to tell other processes, // such as child processes, // that the file descriptor has been closed -export class FdCloseSenderUseArrayBuffer extends ToRefSenderUseArrayBuffer implements FdCloseSender { +export class FdCloseSenderUseArrayBuffer + extends ToRefSenderUseArrayBuffer + implements FdCloseSender +{ // Should be able to change the size of memory as it accumulates more and more on memory constructor( max_share_arrays_memory?: number, @@ -19,10 +25,7 @@ export class FdCloseSenderUseArrayBuffer extends ToRefSenderUseArrayBuffer imple } // Send the closed file descriptor to the target process - async send( - targets: Array, - fd: number, - ): Promise { + async send(targets: Array, fd: number): Promise { if (targets === undefined || targets.length === 0) { throw new Error("targets is empty"); } @@ -32,9 +35,7 @@ export class FdCloseSenderUseArrayBuffer extends ToRefSenderUseArrayBuffer imple } // Get the closed file descriptor from the target process - get( - id: number, - ): Array | undefined { + get(id: number): Array | undefined { const data = this.get_data(id); if (data === undefined) { return undefined; @@ -51,9 +52,7 @@ export class FdCloseSenderUseArrayBuffer extends ToRefSenderUseArrayBuffer imple } // Initialize the class from object - static init_self( - sl: FdCloseSenderUseArrayBufferObject, - ): FdCloseSender { + static init_self(sl: FdCloseSenderUseArrayBufferObject): FdCloseSender { const sel = ToRefSenderUseArrayBuffer.init_self_inner(sl); return new FdCloseSenderUseArrayBuffer( sel.max_share_arrays_memory, diff --git a/src/wasi_farm/shared_array_buffer/index.ts b/src/wasi_farm/shared_array_buffer/index.ts new file mode 100644 index 0000000..0e2d34a --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/index.ts @@ -0,0 +1,13 @@ +import { WASIFarmParkUseArrayBuffer } from "./park.js"; +import { WASIFarmRefUseArrayBuffer } from "./ref.js"; +import type { WASIFarmRefUseArrayBufferObject } from "./ref.js"; +import { ThreadSpawner } from "./thread_spawn.js"; +import { thread_spawn_on_worker } from "./thread_spawn.js"; + +export { + WASIFarmRefUseArrayBuffer, + type WASIFarmRefUseArrayBufferObject, + WASIFarmParkUseArrayBuffer, + ThreadSpawner, + thread_spawn_on_worker, +}; diff --git a/src/wasi_farm/shared_array_buffer/park.ts b/src/wasi_farm/shared_array_buffer/park.ts index b242194..861b807 100644 --- a/src/wasi_farm/shared_array_buffer/park.ts +++ b/src/wasi_farm/shared_array_buffer/park.ts @@ -1,10 +1,10 @@ -import { Fd } from "../../fd.js"; +import type { Fd } from "../../fd.js"; import * as wasi from "../../wasi_defs.js"; -import { AllocatorUseArrayBuffer } from "./allocator.js"; import { WASIFarmPark } from "../park.js"; -import { WASIFarmRefUseArrayBufferObject } from "./ref.js"; -import { FdCloseSender } from "../sender.js"; +import type { FdCloseSender } from "../sender.js"; +import { AllocatorUseArrayBuffer } from "./allocator.js"; import { FdCloseSenderUseArrayBuffer } from "./fd_close_sender.js"; +import type { WASIFarmRefUseArrayBufferObject } from "./ref.js"; import { get_func_name_from_number } from "./util.js"; export const fd_func_sig_u32_size: number = 18; @@ -112,22 +112,20 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { default_allow_fds: Array, allocator_size?: number, ) { - super( - fds, - stdin, - stdout, - stderr, - default_allow_fds, - ); + super(fds, stdin, stdout, stderr, default_allow_fds); if (allocator_size === undefined) { this.allocator = new AllocatorUseArrayBuffer(); } else { - this.allocator = new AllocatorUseArrayBuffer(new SharedArrayBuffer(allocator_size)); + this.allocator = new AllocatorUseArrayBuffer( + new SharedArrayBuffer(allocator_size), + ); } const max_fds_len = 128; this.lock_fds = new SharedArrayBuffer(4 * max_fds_len * 3); - this.fd_func_sig = new SharedArrayBuffer(fd_func_sig_u32_size * 4 * max_fds_len); + this.fd_func_sig = new SharedArrayBuffer( + fd_func_sig_u32_size * 4 * max_fds_len, + ); this.fds_len_and_num = new SharedArrayBuffer(8); const view = new Int32Array(this.fds_len_and_num); @@ -159,7 +157,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { // received and listen the fd // and set fds.length async notify_set_fd(fd: number) { - if (this.fds[fd] == undefined) { + if (this.fds[fd] === undefined) { throw new Error("fd is not defined"); } if (fd >= 128) { @@ -185,7 +183,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { (async () => { await this.listen_fds[fd]; this.listen_fds[fd] = undefined; - })() + })(); // console.log("notify_rm_fd", fd); // console.log("fds", this.fds); @@ -206,9 +204,8 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { can_set_new_fd(fd: number): [boolean, Promise | undefined] { if (this.listen_fds[fd] instanceof Promise) { return [false, this.listen_fds[fd]]; - } else { - return [true, undefined]; } + return [true, undefined]; } // listen all fds and base @@ -232,12 +229,12 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { Atomics.store(lock_view, 1, 0); // eslint-disable-next-line no-constant-condition - while(true) { + while (true) { try { let lock: "not-equal" | "timed-out" | "ok"; const { value } = Atomics.waitAsync(lock_view, 1, 0); - if ( value instanceof Promise) { + if (value instanceof Promise) { lock = await value; } else { lock = value; @@ -248,7 +245,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const func_number = Atomics.load(lock_view, 2); - switcher: switch (func_number) { + switch (func_number) { // set_fds_map: (fds_ptr: u32, fds_len: u32); case 0: { // console.log("set_fds_map"); @@ -278,7 +275,10 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { // console.log("listen_base fds_map", this.fds_map); - break switcher; + // sleep 1000ms + await new Promise((resolve) => setTimeout(resolve, 1000)); + + break; } } @@ -292,7 +292,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { console.warn("notify failed, waiter is late"); continue; } - throw new Error("notify failed: " + num); + throw new Error(`notify failed: ${num}`); } } catch (e) { console.error("error", e); @@ -310,7 +310,10 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const func_sig_view_u16 = new Uint16Array(this.fd_func_sig, bytes_offset); const func_sig_view_i32 = new Int32Array(this.fd_func_sig, bytes_offset); const func_sig_view_u32 = new Int32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); const errno_offset = fd_func_sig_u32_size - 1; Atomics.store(lock_view, 0, 0); Atomics.store(lock_view, 1, 0); @@ -322,7 +325,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { let lock: "not-equal" | "timed-out" | "ok"; const { value } = Atomics.waitAsync(lock_view, 1, 0); - if ( value instanceof Promise) { + if (value instanceof Promise) { // console.log("listen", fd_n, 1); lock = await value; } else { @@ -335,7 +338,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const func_lock = Atomics.load(lock_view, 1); if (func_lock !== 1) { - throw new Error("func_lock is already set: " + func_lock); + throw new Error(`func_lock is already set: ${func_lock}`); } // console.log("func_lock", func_lock); @@ -345,13 +348,13 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const set_error = (errno: number) => { // console.log("set_error", errno, "pointer", errno_offset); Atomics.store(func_sig_view_i32, errno_offset, errno); - } + }; const func_number = Atomics.load(func_sig_view_u32, 0); // console.log("called: func: ", get_func_name_from_number(func_number), "fd: ", fd_n); - switcher: switch (func_number) { + switch (func_number) { // fd_advise: (fd: u32) => errno; case 7: { const fd = Atomics.load(func_sig_view_u32, 1); @@ -359,7 +362,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const error = this.fd_advise(fd); set_error(error); - break switcher; + break; } // fd_allocate: (fd: u32, offset: u64, len: u64) => errno; case 8: { @@ -370,7 +373,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const error = this.fd_allocate(fd, offset, len); set_error(error); - break switcher; + break; } // fd_close: (fd: u32) => errno; case 9: { @@ -381,7 +384,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { // console.log("fd_close", fd, error); set_error(error); - break switcher; + break; } // fd_datasync: (fd: u32) => errno; case 10: { @@ -390,22 +393,22 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const error = this.fd_datasync(fd); set_error(error); - break switcher; + break; } // fd_fdstat_get: (fd: u32) => [wasi.Fdstat(u32 * 6)], errno]; case 11: { const fd = Atomics.load(func_sig_view_u32, 1); - const [ fdstat, ret ] = this.fd_fdstat_get(fd); + const [fdstat, ret] = this.fd_fdstat_get(fd); if (fdstat) { - Atomics.store(func_sig_view_u8, 0, fdstat.fs_filetype); - Atomics.store(func_sig_view_u16, 2, fdstat.fs_flags); - Atomics.store(func_sig_view_u64, 1, fdstat.fs_rights_base); - Atomics.store(func_sig_view_u64, 2, fdstat.fs_rights_inherited); + Atomics.store(func_sig_view_u8, 0, fdstat.fs_filetype); + Atomics.store(func_sig_view_u16, 2, fdstat.fs_flags); + Atomics.store(func_sig_view_u64, 1, fdstat.fs_rights_base); + Atomics.store(func_sig_view_u64, 2, fdstat.fs_rights_inherited); } set_error(ret); - break switcher; + break; } // fd_fdstat_set_flags: (fd: u32, flags: u16) => errno; case 12: { @@ -415,7 +418,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const error = this.fd_fdstat_set_flags(fd, flags); set_error(error); - break switcher; + break; } // fd_fdstat_set_rights: (fd: u32, fs_rights_base: u64, fs_rights_inheriting: u64) => errno; case 13: { @@ -423,30 +426,34 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const fs_rights_base = Atomics.load(func_sig_view_u64, 1); const fs_rights_inheriting = Atomics.load(func_sig_view_u64, 2); - const error = this.fd_fdstat_set_rights(fd, fs_rights_base, fs_rights_inheriting); + const error = this.fd_fdstat_set_rights( + fd, + fs_rights_base, + fs_rights_inheriting, + ); set_error(error); - break switcher; + break; } // fd_filestat_get: (fd: u32) => [wasi.Filestat(u32 * 16)], errno]; case 14: { const fd = Atomics.load(func_sig_view_u32, 1); - const [ filestat, ret ] = this.fd_filestat_get(fd); + const [filestat, ret] = this.fd_filestat_get(fd); if (filestat) { - Atomics.store(func_sig_view_u64, 0, filestat.dev); - Atomics.store(func_sig_view_u64, 1, filestat.ino); - Atomics.store(func_sig_view_u8, 16, filestat.filetype); - Atomics.store(func_sig_view_u64, 3, filestat.nlink); - Atomics.store(func_sig_view_u64, 4, filestat.size); - Atomics.store(func_sig_view_u64, 5, filestat.atim); - Atomics.store(func_sig_view_u64, 6, filestat.mtim); - Atomics.store(func_sig_view_u64, 7, filestat.ctim); + Atomics.store(func_sig_view_u64, 0, filestat.dev); + Atomics.store(func_sig_view_u64, 1, filestat.ino); + Atomics.store(func_sig_view_u8, 16, filestat.filetype); + Atomics.store(func_sig_view_u64, 3, filestat.nlink); + Atomics.store(func_sig_view_u64, 4, filestat.size); + Atomics.store(func_sig_view_u64, 5, filestat.atim); + Atomics.store(func_sig_view_u64, 6, filestat.mtim); + Atomics.store(func_sig_view_u64, 7, filestat.ctim); } set_error(ret); - break switcher; + break; } // fd_filestat_set_size: (fd: u32, size: u64) => errno; case 15: { @@ -456,7 +463,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const error = this.fd_filestat_set_size(fd, size); set_error(error); - break switcher; + break; } // fd_filestat_set_times: (fd: u32, atim: u64, mtim: u64, fst_flags: u16) => errno; case 16: { @@ -468,7 +475,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const error = this.fd_filestat_set_times(fd, atim, mtim, fst_flags); set_error(error); - break switcher; + break; } // fd_pread: (fd: u32, iovs_ptr: pointer, iovs_len: u32, offset: u64) => [u32, data_ptr, errno]; case 17: { @@ -476,7 +483,9 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const iovs_ptr = Atomics.load(func_sig_view_u32, 2); const iovs_ptr_len = Atomics.load(func_sig_view_u32, 3); const offset = Atomics.load(func_sig_view_u64, 2); - const data = new Uint32Array(this.allocator.get_memory(iovs_ptr, iovs_ptr_len)); + const data = new Uint32Array( + this.allocator.get_memory(iovs_ptr, iovs_ptr_len), + ); this.allocator.free(iovs_ptr, iovs_ptr_len); const iovecs = new Array(); @@ -493,40 +502,58 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { Atomics.store(func_sig_view_u32, 0, nread); } if (buffer8) { - await this.allocator.async_write(buffer8, this.fd_func_sig, fd * fd_func_sig_u32_size + 1); + await this.allocator.async_write( + buffer8, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 1, + ); } set_error(error); - break switcher; + break; } // fd_prestat_get: (fd: u32) => [wasi.Prestat(u32 * 2)], errno]; case 18: { const fd = Atomics.load(func_sig_view_u32, 1); - const [ prestat, ret ] = this.fd_prestat_get(fd); + const [prestat, ret] = this.fd_prestat_get(fd); // console.log("fd_prestat_get", prestat, ret); if (prestat) { Atomics.store(func_sig_view_u32, 0, prestat.tag); - Atomics.store(func_sig_view_u32, 1, prestat.inner.pr_name.byteLength); + Atomics.store( + func_sig_view_u32, + 1, + prestat.inner.pr_name.byteLength, + ); } set_error(ret); - break switcher; + break; } // fd_prestat_dir_name: (fd: u32, path_len: u32) => [path_ptr: pointer, path_len: u32, errno]; case 19: { const fd = Atomics.load(func_sig_view_u32, 1); const path_len = Atomics.load(func_sig_view_u32, 2); - const [ prestat_dir_name, ret ] = this.fd_prestat_dir_name(fd, path_len); + const [prestat_dir_name, ret] = this.fd_prestat_dir_name( + fd, + path_len, + ); // console.log("fd_prestat_dir_name: park: ", prestat_dir_name); - if (prestat_dir_name && (ret === wasi.ERRNO_SUCCESS || ret === wasi.ERRNO_NAMETOOLONG)) { - await this.allocator.async_write(prestat_dir_name, this.fd_func_sig, fd * fd_func_sig_u32_size); + if ( + prestat_dir_name && + (ret === wasi.ERRNO_SUCCESS || ret === wasi.ERRNO_NAMETOOLONG) + ) { + await this.allocator.async_write( + prestat_dir_name, + this.fd_func_sig, + fd * fd_func_sig_u32_size, + ); } set_error(ret); - break switcher; + break; } // fd_pwrite: (fd: u32, write_data: pointer, write_data_len: u32, offset: u64) => [u32, errno]; case 20: { @@ -535,7 +562,9 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const write_data_len = Atomics.load(func_sig_view_u32, 3); const offset = Atomics.load(func_sig_view_u64, 2); - const data = new Uint8Array(this.allocator.get_memory(write_data_ptr, write_data_len)); + const data = new Uint8Array( + this.allocator.get_memory(write_data_ptr, write_data_len), + ); this.allocator.free(write_data_ptr, write_data_len); const [nwritten, error] = this.fd_pwrite(fd, data, offset); @@ -544,7 +573,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { Atomics.store(func_sig_view_u32, 0, nwritten); } set_error(error); - break switcher; + break; } // fd_read: (fd: u32, iovs_ptr: pointer, iovs_len: u32) => [u32, data_ptr, errno]; case 21: { @@ -553,7 +582,9 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const iovs_ptr_len = Atomics.load(func_sig_view_u32, 3); // console.log("fd_read: park: iovs: Uint8Array", this.allocator.get_memory(iovs_ptr, iovs_ptr_len)); // console.log("ptr_len", iovs_ptr_len); - const iovs = new Uint32Array(this.allocator.get_memory(iovs_ptr, iovs_ptr_len)); + const iovs = new Uint32Array( + this.allocator.get_memory(iovs_ptr, iovs_ptr_len), + ); this.allocator.free(iovs_ptr, iovs_ptr_len); // console.log("fd_read: park: iovs", iovs); @@ -576,10 +607,14 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { Atomics.store(func_sig_view_u32, 0, nread); } if (buffer8) { - await this.allocator.async_write(buffer8, this.fd_func_sig, fd * fd_func_sig_u32_size + 1); + await this.allocator.async_write( + buffer8, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 1, + ); } set_error(error); - break switcher; + break; } // fd_readdir: (fd: u32, buf_len: u32, cookie: u64) => [buf_ptr: pointer, buf_len: u32, buf_used: u32, errno]; case 22: { @@ -587,22 +622,30 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const buf_len = Atomics.load(func_sig_view_u32, 2); const cookie = Atomics.load(func_sig_view_u64, 2); - const [[array, buf_used], error] = this.fd_readdir(fd, buf_len, cookie); + const [[array, buf_used], error] = this.fd_readdir( + fd, + buf_len, + cookie, + ); if (array) { - await this.allocator.async_write(array, this.fd_func_sig, fd * fd_func_sig_u32_size); + await this.allocator.async_write( + array, + this.fd_func_sig, + fd * fd_func_sig_u32_size, + ); } if (buf_used !== undefined) { Atomics.store(func_sig_view_u32, 2, buf_used); } set_error(error); - break switcher; + break; } // fd_seek: (fd: u32, offset: i64, whence: u8) => [u64, errno]; case 24: { const fd = Atomics.load(func_sig_view_u32, 1); const offset = Atomics.load(func_sig_view_u64, 1); - const whence = Atomics.load(func_sig_view_u8,16); + const whence = Atomics.load(func_sig_view_u8, 16); const [new_offset, error] = this.fd_seek(fd, offset, whence); @@ -610,7 +653,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { Atomics.store(func_sig_view_u64, 0, new_offset); } set_error(error); - break switcher; + break; } // fd_sync: (fd: u32) => errno; case 25: { @@ -619,7 +662,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const error = this.fd_sync(fd); set_error(error); - break switcher; + break; } // fd_tell: (fd: u32) => [u64, errno]; case 26: { @@ -631,7 +674,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { Atomics.store(func_sig_view_u64, 0, offset); } set_error(error); - break switcher; + break; } // fd_write: (fd: u32, write_data: pointer, write_data_len: u32) => [u32, errno]; case 27: { @@ -639,7 +682,9 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const write_data_ptr = Atomics.load(func_sig_view_u32, 2); const write_data_len = Atomics.load(func_sig_view_u32, 3); - const data = new Uint8Array(this.allocator.get_memory(write_data_ptr, write_data_len)); + const data = new Uint8Array( + this.allocator.get_memory(write_data_ptr, write_data_len), + ); this.allocator.free(write_data_ptr, write_data_len); // console.log("allocator", this.allocator); @@ -654,7 +699,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { Atomics.store(func_sig_view_u32, 0, nwritten); } set_error(error); - break switcher; + break; } // path_create_directory: (fd: u32, path_ptr: pointer, path_len: u32) => errno; case 28: { @@ -662,14 +707,16 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const path_ptr = Atomics.load(func_sig_view_u32, 2); const path_len = Atomics.load(func_sig_view_u32, 3); - const path = new Uint8Array(this.allocator.get_memory(path_ptr, path_len)); + const path = new Uint8Array( + this.allocator.get_memory(path_ptr, path_len), + ); const path_str = new TextDecoder().decode(path); this.allocator.free(path_ptr, path_len); const error = this.path_create_directory(fd, path_str); set_error(error); - break switcher; + break; } // path_filestat_get: (fd: u32, flags: u32, path_ptr: pointer, path_len: u32) => [wasi.Filestat(u32 * 16), errno]; case 29: { @@ -678,7 +725,9 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const path_ptr = Atomics.load(func_sig_view_u32, 3); const path_len = Atomics.load(func_sig_view_u32, 4); - const path = new Uint8Array(this.allocator.get_memory(path_ptr, path_len)); + const path = new Uint8Array( + this.allocator.get_memory(path_ptr, path_len), + ); const path_str = new TextDecoder().decode(path); this.allocator.free(path_ptr, path_len); @@ -687,7 +736,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { if (filestat) { Atomics.store(func_sig_view_u64, 0, filestat.dev); Atomics.store(func_sig_view_u64, 1, filestat.ino); - Atomics.store(func_sig_view_u8,16, filestat.filetype); + Atomics.store(func_sig_view_u8, 16, filestat.filetype); Atomics.store(func_sig_view_u64, 3, filestat.nlink); Atomics.store(func_sig_view_u64, 4, filestat.size); Atomics.store(func_sig_view_u64, 5, filestat.atim); @@ -695,7 +744,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { Atomics.store(func_sig_view_u64, 7, filestat.ctim); } set_error(ret); - break switcher; + break; } // path_filestat_set_times: (fd: u32, flags: u32, path_ptr: pointer, path_len: u32, atim: u64, mtim: u64, fst_flags: u16) => errno; case 30: { @@ -707,14 +756,23 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const mtim = Atomics.load(func_sig_view_u64, 4); const fst_flags = Atomics.load(func_sig_view_u16, 12); - const path = new Uint8Array(this.allocator.get_memory(path_ptr, path_len)); + const path = new Uint8Array( + this.allocator.get_memory(path_ptr, path_len), + ); const path_str = new TextDecoder().decode(path); this.allocator.free(path_ptr, path_len); - const error = this.path_filestat_set_times(fd, flags, path_str, atim, mtim, fst_flags); + const error = this.path_filestat_set_times( + fd, + flags, + path_str, + atim, + mtim, + fst_flags, + ); set_error(error); - break switcher; + break; } // path_link: (old_fd: u32, old_flags: u32, old_path_ptr: pointer, old_path_len: u32, new_fd: u32, new_path_ptr: pointer, new_path_len: u32) => errno; case 31: { @@ -726,17 +784,27 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const new_path_ptr = Atomics.load(func_sig_view_u32, 6); const new_path_len = Atomics.load(func_sig_view_u32, 7); - const old_path = new Uint8Array(this.allocator.get_memory(old_path_ptr, old_path_len)); + const old_path = new Uint8Array( + this.allocator.get_memory(old_path_ptr, old_path_len), + ); const old_path_str = new TextDecoder().decode(old_path); this.allocator.free(old_path_ptr, old_path_len); - const new_path = new Uint8Array(this.allocator.get_memory(new_path_ptr, new_path_len)); + const new_path = new Uint8Array( + this.allocator.get_memory(new_path_ptr, new_path_len), + ); const new_path_str = new TextDecoder().decode(new_path); this.allocator.free(new_path_ptr, new_path_len); - const error = this.path_link(old_fd, old_flags, old_path_str, new_fd, new_path_str); + const error = this.path_link( + old_fd, + old_flags, + old_path_str, + new_fd, + new_path_str, + ); set_error(error); - break switcher; + break; } // path_open: (fd: u32, dirflags: u32, path_ptr: pointer, path_len: u32, oflags: u32, fs_rights_base: u64, fs_rights_inheriting: u64, fdflags: u16) => [u32, errno]; case 32: { @@ -749,11 +817,21 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const fs_rights_inheriting = Atomics.load(func_sig_view_u64, 4); const fd_flags = Atomics.load(func_sig_view_u16, 20); - const path = new Uint8Array(this.allocator.get_memory(path_ptr, path_len)); + const path = new Uint8Array( + this.allocator.get_memory(path_ptr, path_len), + ); const path_str = new TextDecoder().decode(path); this.allocator.free(path_ptr, path_len); - const [opened_fd, error] = await this.path_open(fd, dirflags, path_str, oflags, fs_rights_base, fs_rights_inheriting, fd_flags); + const [opened_fd, error] = await this.path_open( + fd, + dirflags, + path_str, + oflags, + fs_rights_base, + fs_rights_inheriting, + fd_flags, + ); // console.log("path_open: opend_fd", opened_fd, error); @@ -761,7 +839,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { Atomics.store(func_sig_view_u32, 0, opened_fd); } set_error(error); - break switcher; + break; } // path_readlink: (fd: u32, path_ptr: pointer, path_len: u32, buf_len: u32) => [buf_len: u32, data_ptr: pointer, data_len: u32, errno]; case 33: { @@ -770,18 +848,24 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const path_len = Atomics.load(func_sig_view_u32, 3); const buf_len = Atomics.load(func_sig_view_u32, 4); - const path = new Uint8Array(this.allocator.get_memory(path_ptr, path_len)); + const path = new Uint8Array( + this.allocator.get_memory(path_ptr, path_len), + ); const path_str = new TextDecoder().decode(path); this.allocator.free(path_ptr, path_len); const [buf, error] = this.path_readlink(fd, path_str, buf_len); if (buf) { - await this.allocator.async_write(buf, this.fd_func_sig, fd * fd_func_sig_u32_size + 1); + await this.allocator.async_write( + buf, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 1, + ); Atomics.store(func_sig_view_u32, 0, buf.byteLength); } set_error(error); - break switcher; + break; } // path_remove_directory: (fd: u32, path_ptr: pointer, path_len: u32) => errno; case 34: { @@ -789,14 +873,16 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const path_ptr = Atomics.load(func_sig_view_u32, 2); const path_len = Atomics.load(func_sig_view_u32, 3); - const path = new Uint8Array(this.allocator.get_memory(path_ptr, path_len)); + const path = new Uint8Array( + this.allocator.get_memory(path_ptr, path_len), + ); const path_str = new TextDecoder().decode(path); this.allocator.free(path_ptr, path_len); const error = this.path_remove_directory(fd, path_str); set_error(error); - break switcher; + break; } // path_rename: (old_fd: u32, old_path_ptr: pointer, old_path_len: u32, new_fd: u32, new_path_ptr: pointer, new_path_len: u32) => errno; case 35: { @@ -807,17 +893,26 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const new_path_ptr = Atomics.load(func_sig_view_u32, 5); const new_path_len = Atomics.load(func_sig_view_u32, 6); - const old_path = new Uint8Array(this.allocator.get_memory(old_path_ptr, old_path_len)); + const old_path = new Uint8Array( + this.allocator.get_memory(old_path_ptr, old_path_len), + ); const old_path_str = new TextDecoder().decode(old_path); this.allocator.free(old_path_ptr, old_path_len); - const new_path = new Uint8Array(this.allocator.get_memory(new_path_ptr, new_path_len)); + const new_path = new Uint8Array( + this.allocator.get_memory(new_path_ptr, new_path_len), + ); const new_path_str = new TextDecoder().decode(new_path); this.allocator.free(new_path_ptr, new_path_len); - const error = this.path_rename(fd, old_path_str, new_fd, new_path_str); + const error = this.path_rename( + fd, + old_path_str, + new_fd, + new_path_str, + ); set_error(error); - break switcher; + break; } // path_symlink: (old_path_ptr: pointer, old_path_len: u32, fd: u32, new_path_ptr: pointer, new_path_len: u32) => errno; case 36: { @@ -827,15 +922,19 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const new_path_ptr = Atomics.load(func_sig_view_u32, 4); const new_path_len = Atomics.load(func_sig_view_u32, 5); - const old_path = new Uint8Array(this.allocator.get_memory(old_path_ptr, old_path_len)); + const old_path = new Uint8Array( + this.allocator.get_memory(old_path_ptr, old_path_len), + ); const old_path_str = new TextDecoder().decode(old_path); this.allocator.free(old_path_ptr, old_path_len); - const new_path = new Uint8Array(this.allocator.get_memory(new_path_ptr, new_path_len)); + const new_path = new Uint8Array( + this.allocator.get_memory(new_path_ptr, new_path_len), + ); const new_path_str = new TextDecoder().decode(new_path); this.allocator.free(new_path_ptr, new_path_len); set_error(this.path_symlink(old_path_str, fd, new_path_str)); - break switcher; + break; } // path_unlink_file: (fd: u32, path_ptr: pointer, path_len: u32) => errno; case 37: { @@ -843,21 +942,25 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const path_ptr = Atomics.load(func_sig_view_u32, 2); const path_len = Atomics.load(func_sig_view_u32, 3); - const path = new Uint8Array(this.allocator.get_memory(path_ptr, path_len)); + const path = new Uint8Array( + this.allocator.get_memory(path_ptr, path_len), + ); const path_str = new TextDecoder().decode(path); this.allocator.free(path_ptr, path_len); set_error(this.path_unlink_file(fd, path_str)); - break switcher; + break; } default: { - throw new Error("Unknown function number: " + func_number); + throw new Error(`Unknown function number: ${func_number}`); } } const old_call_lock = Atomics.exchange(lock_view, 1, 0); if (old_call_lock !== 1) { - throw new Error("Call is already set: " + old_call_lock + "\nfunc: " + get_func_name_from_number(func_number) + "\nfd: " + fd_n); + throw new Error( + `Call is already set: ${old_call_lock}\nfunc: ${get_func_name_from_number(func_number)}\nfd: ${fd_n}`, + ); } // console.log("called end: func: ", get_func_name_from_number(func_number), "fd: ", fd_n); @@ -867,7 +970,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { if (n === 0) { console.warn("notify number is 0. ref is late?"); } else { - console.warn("notify number is not 1: " + n); + console.warn(`notify number is not 1: ${n}`); } } diff --git a/src/wasi_farm/shared_array_buffer/ref.ts b/src/wasi_farm/shared_array_buffer/ref.ts index 7405a7c..acae92b 100644 --- a/src/wasi_farm/shared_array_buffer/ref.ts +++ b/src/wasi_farm/shared_array_buffer/ref.ts @@ -1,8 +1,14 @@ -import { WASIFarmRef, WASIFarmRefObject } from "../ref.js"; -import { AllocatorUseArrayBuffer, AllocatorUseArrayBufferObject } from "./allocator.js"; -import { fd_func_sig_bytes, fd_func_sig_u32_size } from "./park.js"; import * as wasi from "../../wasi_defs.js"; -import { FdCloseSenderUseArrayBuffer, FdCloseSenderUseArrayBufferObject } from "./fd_close_sender.js"; +import { WASIFarmRef, type WASIFarmRefObject } from "../ref.js"; +import { + AllocatorUseArrayBuffer, + type AllocatorUseArrayBufferObject, +} from "./allocator.js"; +import { + FdCloseSenderUseArrayBuffer, + type FdCloseSenderUseArrayBufferObject, +} from "./fd_close_sender.js"; +import { fd_func_sig_bytes, fd_func_sig_u32_size } from "./park.js"; export type WASIFarmRefUseArrayBufferObject = { allocator: AllocatorUseArrayBuffer; @@ -35,7 +41,13 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { stderr: number | undefined, default_fds: Array, ) { - super(stdin, stdout, stderr, FdCloseSenderUseArrayBuffer.init_self(fd_close_receiver), default_fds); + super( + stdin, + stdout, + stderr, + FdCloseSenderUseArrayBuffer.init_self(fd_close_receiver), + default_fds, + ); this.allocator = AllocatorUseArrayBuffer.init_self(allocator); this.lock_fds = lock_fds; this.fd_func_sig = fd_func_sig; @@ -216,7 +228,7 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { const view = new Int32Array(this.lock_fds, fd * 12 + 4); const old = Atomics.exchange(view, 0, 1); if (old === 1) { - console.error("invoke_fd_func already invoked\n" + "fd: " + fd); + console.error(`invoke_fd_func already invoked\nfd: ${fd}`); return; } const n = Atomics.notify(view, 0); @@ -231,10 +243,9 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { Atomics.notify(view, 0, 1); console.error("what happened?: len", len, "fd", fd); return true; - } else { - console.warn("invoke_func_loop is late"); - return true; } + console.warn("invoke_func_loop is late"); + return true; } console.error("invoke_fd_func notify failed:", n); return false; @@ -263,18 +274,22 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { } private get_error(fd: number): number { - const func_sig_view_i32 = new Int32Array(this.fd_func_sig, fd * fd_func_sig_bytes); + const func_sig_view_i32 = new Int32Array( + this.fd_func_sig, + fd * fd_func_sig_bytes, + ); const errno_offset = fd_func_sig_u32_size - 1; // console.log("get_error: offset", errno_offset); return Atomics.load(func_sig_view_i32, errno_offset); } - fd_advise( - fd: number, - ): number { + fd_advise(fd: number): number { this.lock_fd(fd); - const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, fd * fd_func_sig_bytes); + const func_sig_view_u32 = new Uint32Array( + this.fd_func_sig, + fd * fd_func_sig_bytes, + ); Atomics.store(func_sig_view_u32, 0, 7); Atomics.store(func_sig_view_u32, 1, fd); @@ -291,16 +306,15 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return error; } - fd_allocate( - fd: number, - offset: bigint, - len: bigint, - ): number { + fd_allocate(fd: number, offset: bigint, len: bigint): number { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 8); Atomics.store(func_sig_view_u32, 1, fd); @@ -319,9 +333,7 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return error; } - fd_close( - fd: number, - ): number { + fd_close(fd: number): number { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; @@ -348,9 +360,7 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return error; } - fd_datasync( - fd: number, - ): number { + fd_datasync(fd: number): number { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; @@ -371,16 +381,17 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return error; } - fd_fdstat_get( - fd: number, - ): [wasi.Fdstat | undefined, number] { + fd_fdstat_get(fd: number): [wasi.Fdstat | undefined, number] { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u8 = new Uint8Array(this.fd_func_sig, bytes_offset); const func_sig_view_u16 = new Uint16Array(this.fd_func_sig, bytes_offset); const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 11); Atomics.store(func_sig_view_u32, 1, fd); @@ -404,20 +415,14 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { this.release_fd(fd); - const fd_stat = new wasi.Fdstat( - fs_filetype, - fs_flags, - ); + const fd_stat = new wasi.Fdstat(fs_filetype, fs_flags); fd_stat.fs_rights_base = fs_rights_base; fd_stat.fs_rights_inherited = fs_rights_inheriting; return [fd_stat, error]; } - fd_fdstat_set_flags( - fd: number, - flags: number, - ): number { + fd_fdstat_set_flags(fd: number, flags: number): number { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; @@ -449,7 +454,10 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 13); Atomics.store(func_sig_view_u32, 1, fd); @@ -468,15 +476,16 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return error; } - fd_filestat_get( - fd: number, - ): [wasi.Filestat | undefined, number] { + fd_filestat_get(fd: number): [wasi.Filestat | undefined, number] { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u8 = new Uint8Array(this.fd_func_sig, bytes_offset); const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 14); Atomics.store(func_sig_view_u32, 1, fd); @@ -504,9 +513,7 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { this.release_fd(fd); - const file_stat = new wasi.Filestat( - fs_filetype, fs_size - ); + const file_stat = new wasi.Filestat(fs_filetype, fs_size); file_stat.dev = fs_dev; file_stat.ino = fs_ino; file_stat.nlink = fs_nlink; @@ -517,15 +524,15 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return [file_stat, error]; } - fd_filestat_set_size( - fd: number, - size: bigint, - ): number { + fd_filestat_set_size(fd: number, size: bigint): number { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 15); Atomics.store(func_sig_view_u32, 1, fd); @@ -554,7 +561,10 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u16 = new Uint16Array(this.fd_func_sig, bytes_offset); const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 16); Atomics.store(func_sig_view_u32, 1, fd); @@ -583,11 +593,18 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 17); Atomics.store(func_sig_view_u32, 1, fd); - const [ptr, len] = this.allocator.block_write(iovs, this.fd_func_sig, fd * fd_func_sig_u32_size + 2); + const [ptr, len] = this.allocator.block_write( + iovs, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 2, + ); Atomics.store(func_sig_view_u64, 2, offset); if (!this.call_fd_func(fd)) { @@ -619,9 +636,7 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return [[nread, buf], error]; } - fd_prestat_get( - fd: number, - ): [[number, number] | undefined, number] { + fd_prestat_get(fd: number): [[number, number] | undefined, number] { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; @@ -679,7 +694,9 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return [undefined, error]; } - const ret_path = new Uint8Array(this.allocator.get_memory(ret_path_ptr, ret_path_len)); + const ret_path = new Uint8Array( + this.allocator.get_memory(ret_path_ptr, ret_path_len), + ); this.allocator.free(ret_path_ptr, ret_path_len); return [ret_path, error]; @@ -694,11 +711,18 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 20); Atomics.store(func_sig_view_u32, 1, fd); - const [ptr, len] = this.allocator.block_write(write_data, this.fd_func_sig, fd * fd_func_sig_u32_size + 2); + const [ptr, len] = this.allocator.block_write( + write_data, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 2, + ); Atomics.store(func_sig_view_u64, 2, offset); if (!this.call_fd_func(fd)) { @@ -736,7 +760,11 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { // console.log("fd_read: ref: iovs", iovs); // console.log("iovs.buffer", iovs.buffer.slice(0, iovs.byteLength)); - const [ptr, len] = this.allocator.block_write(iovs, this.fd_func_sig, fd * fd_func_sig_u32_size + 2); + const [ptr, len] = this.allocator.block_write( + iovs, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 2, + ); // console.log("fd_read: ref: iovs", iovs); @@ -787,7 +815,10 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 22); Atomics.store(func_sig_view_u32, 1, fd); @@ -854,7 +885,10 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u8 = new Uint8Array(this.fd_func_sig, bytes_offset); const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 24); Atomics.store(func_sig_view_u32, 1, fd); @@ -880,9 +914,7 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return [new_offset, error]; } - fd_sync( - fd: number, - ): number { + fd_sync(fd: number): number { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; @@ -903,14 +935,15 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return error; } - fd_tell( - fd: number, - ): [bigint | undefined, number] { + fd_tell(fd: number): [bigint | undefined, number] { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 26); Atomics.store(func_sig_view_u32, 1, fd); @@ -934,10 +967,7 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return [offset, error]; } - fd_write( - fd: number, - write_data: Uint8Array, - ): [number | undefined, number] { + fd_write(fd: number, write_data: Uint8Array): [number | undefined, number] { this.lock_fd(fd); // console.log("fd_write: ref: write_data", new TextDecoder().decode(write_data)); @@ -947,7 +977,11 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { Atomics.store(func_sig_view_u32, 0, 27); Atomics.store(func_sig_view_u32, 1, fd); - const [ptr, len] = this.allocator.block_write(write_data, this.fd_func_sig, fd * fd_func_sig_u32_size +2); + const [ptr, len] = this.allocator.block_write( + write_data, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 2, + ); if (!this.call_fd_func(fd)) { // console.log("fd_write: ref: error", "wasi.ERRNO_BADF"); @@ -975,10 +1009,7 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return [nwritten, error]; } - path_create_directory( - fd: number, - path: Uint8Array, - ): number { + path_create_directory(fd: number, path: Uint8Array): number { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; @@ -986,7 +1017,11 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { Atomics.store(func_sig_view_u32, 0, 28); Atomics.store(func_sig_view_u32, 1, fd); - const [ptr, len] = this.allocator.block_write(path, this.fd_func_sig, fd * fd_func_sig_u32_size + 2); + const [ptr, len] = this.allocator.block_write( + path, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 2, + ); if (!this.call_fd_func(fd)) { this.allocator.free(ptr, len); @@ -1011,12 +1046,19 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u8 = new Uint8Array(this.fd_func_sig, bytes_offset); const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 29); Atomics.store(func_sig_view_u32, 1, fd); Atomics.store(func_sig_view_u32, 2, flags); - const [ptr, len] = this.allocator.block_write(path, this.fd_func_sig, fd * fd_func_sig_u32_size + 3); + const [ptr, len] = this.allocator.block_write( + path, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 3, + ); if (!this.call_fd_func(fd)) { this.allocator.free(ptr, len); @@ -1042,9 +1084,7 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { this.release_fd(fd); - const file_stat = new wasi.Filestat( - fs_filetype, fs_size - ); + const file_stat = new wasi.Filestat(fs_filetype, fs_size); file_stat.dev = fs_dev; file_stat.ino = fs_ino; file_stat.nlink = fs_nlink; @@ -1068,12 +1108,19 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u16 = new Uint16Array(this.fd_func_sig, bytes_offset); const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 30); Atomics.store(func_sig_view_u32, 1, fd); Atomics.store(func_sig_view_u32, 2, flags); - const [ptr, len] = this.allocator.block_write(path, this.fd_func_sig, fd * fd_func_sig_u32_size + 3); + const [ptr, len] = this.allocator.block_write( + path, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 3, + ); Atomics.store(func_sig_view_u64, 3, st_atim); Atomics.store(func_sig_view_u64, 4, st_mtim); Atomics.store(func_sig_view_u16, 12, fst_flags); @@ -1106,9 +1153,17 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { Atomics.store(func_sig_view_u32, 0, 31); Atomics.store(func_sig_view_u32, 1, old_fd); Atomics.store(func_sig_view_u32, 2, old_flags); - const [ptr1, len1] = this.allocator.block_write(old_path, this.fd_func_sig, old_fd * fd_func_sig_u32_size + 3); + const [ptr1, len1] = this.allocator.block_write( + old_path, + this.fd_func_sig, + old_fd * fd_func_sig_u32_size + 3, + ); Atomics.store(func_sig_view_u32, 5, new_fd); - const [ptr2, len2] = this.allocator.block_write(new_path, this.fd_func_sig, old_fd * fd_func_sig_u32_size + 6); + const [ptr2, len2] = this.allocator.block_write( + new_path, + this.fd_func_sig, + old_fd * fd_func_sig_u32_size + 6, + ); if (!this.call_fd_func(old_fd)) { this.allocator.free(ptr1, len1); @@ -1138,12 +1193,19 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u16 = new Uint16Array(this.fd_func_sig, bytes_offset); const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 32); Atomics.store(func_sig_view_u32, 1, fd); Atomics.store(func_sig_view_u32, 2, dirflags); - const [ptr, len] = this.allocator.block_write(path, this.fd_func_sig, fd * fd_func_sig_u32_size + 3); + const [ptr, len] = this.allocator.block_write( + path, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 3, + ); Atomics.store(func_sig_view_u32, 5, oflags); Atomics.store(func_sig_view_u64, 3, fs_rights_base); Atomics.store(func_sig_view_u64, 4, fs_rights_inheriting); @@ -1180,7 +1242,11 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { Atomics.store(func_sig_view_u32, 0, 33); Atomics.store(func_sig_view_u32, 1, fd); - const [ptr, len] = this.allocator.block_write(path, this.fd_func_sig, fd * fd_func_sig_u32_size + 2); + const [ptr, len] = this.allocator.block_write( + path, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 2, + ); Atomics.store(func_sig_view_u32, 4, buf_len); if (!this.call_fd_func(fd)) { @@ -1201,16 +1267,15 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return [undefined, error]; } - const ret_path = new Uint8Array(this.allocator.get_memory(ret_path_ptr, ret_path_len)); + const ret_path = new Uint8Array( + this.allocator.get_memory(ret_path_ptr, ret_path_len), + ); const ret_path_slice = ret_path.slice(0, nread); return [ret_path_slice, error]; } - path_remove_directory( - fd: number, - path: Uint8Array, - ): number { + path_remove_directory(fd: number, path: Uint8Array): number { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; @@ -1218,7 +1283,11 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { Atomics.store(func_sig_view_u32, 0, 34); Atomics.store(func_sig_view_u32, 1, fd); - const [ptr, len] = this.allocator.block_write(path, this.fd_func_sig, fd * fd_func_sig_u32_size + 2); + const [ptr, len] = this.allocator.block_write( + path, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 2, + ); if (!this.call_fd_func(fd)) { this.allocator.free(ptr, len); @@ -1246,9 +1315,17 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { Atomics.store(func_sig_view_u32, 0, 35); Atomics.store(func_sig_view_u32, 1, old_fd); - const [ptr1, len1] = this.allocator.block_write(old_path, this.fd_func_sig, old_fd * fd_func_sig_u32_size + 2); + const [ptr1, len1] = this.allocator.block_write( + old_path, + this.fd_func_sig, + old_fd * fd_func_sig_u32_size + 2, + ); Atomics.store(func_sig_view_u32, 4, new_fd); - const [ptr2, len2] = this.allocator.block_write(new_path, this.fd_func_sig, old_fd * fd_func_sig_u32_size + 5); + const [ptr2, len2] = this.allocator.block_write( + new_path, + this.fd_func_sig, + old_fd * fd_func_sig_u32_size + 5, + ); if (!this.call_fd_func(old_fd)) { this.allocator.free(ptr1, len1); @@ -1264,20 +1341,24 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return error; } - path_symlink( - old_path: Uint8Array, - fd: number, - new_path: Uint8Array, - ): number { + path_symlink(old_path: Uint8Array, fd: number, new_path: Uint8Array): number { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); Atomics.store(func_sig_view_u32, 0, 36); - const [ptr1, len1] = this.allocator.block_write(old_path, this.fd_func_sig, fd * fd_func_sig_u32_size + 1); + const [ptr1, len1] = this.allocator.block_write( + old_path, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 1, + ); Atomics.store(func_sig_view_u32, 3, fd); - const [ptr2, len2] = this.allocator.block_write(new_path, this.fd_func_sig, fd * fd_func_sig_u32_size + 4); + const [ptr2, len2] = this.allocator.block_write( + new_path, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 4, + ); if (!this.call_fd_func(fd)) { this.allocator.free(ptr1, len1); @@ -1293,10 +1374,7 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return error; } - path_unlink_file( - fd: number, - path: Uint8Array, - ): number { + path_unlink_file(fd: number, path: Uint8Array): number { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; @@ -1304,7 +1382,11 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { Atomics.store(func_sig_view_u32, 0, 37); Atomics.store(func_sig_view_u32, 1, fd); - const [ptr, len] = this.allocator.block_write(path, this.fd_func_sig, fd * fd_func_sig_u32_size + 2); + const [ptr, len] = this.allocator.block_write( + path, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 2, + ); if (!this.call_fd_func(fd)) { this.allocator.free(ptr, len); diff --git a/src/wasi_farm/shared_array_buffer/sender.ts b/src/wasi_farm/shared_array_buffer/sender.ts index 42b54d1..252e36b 100644 --- a/src/wasi_farm/shared_array_buffer/sender.ts +++ b/src/wasi_farm/shared_array_buffer/sender.ts @@ -1,7 +1,7 @@ export type ToRefSenderUseArrayBufferObject = { data_size: number; share_arrays_memory?: SharedArrayBuffer; -} +}; // To ref sender abstract class export abstract class ToRefSenderUseArrayBuffer { @@ -53,12 +53,10 @@ export abstract class ToRefSenderUseArrayBuffer { Atomics.store(view, 2, 12); } - protected static init_self_inner( - sl: ToRefSenderUseArrayBufferObject, - ): { - data_size: number, - max_share_arrays_memory: number, - share_arrays_memory: SharedArrayBuffer, + protected static init_self_inner(sl: ToRefSenderUseArrayBufferObject): { + data_size: number; + max_share_arrays_memory: number; + share_arrays_memory: SharedArrayBuffer; } { return { data_size: sl.data_size, @@ -121,7 +119,7 @@ export abstract class ToRefSenderUseArrayBuffer { const used_len = Atomics.load(view, 2); const data_len = data.byteLength; if (data_len !== this.data_size) { - throw new Error("invalid data size: " + data_len + " !== " + this.data_size); + throw new Error(`invalid data size: ${data_len} !== ${this.data_size}`); } const new_used_len = used_len + data_len + 8 + targets.length * 4; if (new_used_len > this.share_arrays_memory.byteLength) { @@ -135,7 +133,10 @@ export abstract class ToRefSenderUseArrayBuffer { header[1] = targets.length; header.set(targets, 2); - const data_view = new Uint32Array(this.share_arrays_memory, used_len + 8 + targets.length * 4); + const data_view = new Uint32Array( + this.share_arrays_memory, + used_len + 8 + targets.length * 4, + ); data_view.set(data); // console.log("async_send send", targets, data); @@ -145,9 +146,7 @@ export abstract class ToRefSenderUseArrayBuffer { this.release_lock(); } - protected get_data( - id: number, - ): Array | undefined { + protected get_data(id: number): Array | undefined { const view = new Int32Array(this.share_arrays_memory); const data_num_tmp = Atomics.load(view, 1); if (data_num_tmp === 0) { @@ -166,10 +165,18 @@ export abstract class ToRefSenderUseArrayBuffer { // console.log("this.share_arrays_memory", this.share_arrays_memory); const header = new Int32Array(this.share_arrays_memory, offset); const target_num = header[1]; - const targets = new Int32Array(this.share_arrays_memory, offset + 8, target_num); + const targets = new Int32Array( + this.share_arrays_memory, + offset + 8, + target_num, + ); const data_len = this.data_size; if (targets.includes(id)) { - const data = new Uint32Array(this.share_arrays_memory, offset + 8 + target_num * 4, data_len / 4); + const data = new Uint32Array( + this.share_arrays_memory, + offset + 8 + target_num * 4, + data_len / 4, + ); // なぜかわからないが、上では正常に動作せず、以下のようにすると動作する // return_data.push(new Uint32Array(data)); @@ -185,7 +192,10 @@ export abstract class ToRefSenderUseArrayBuffer { const new_used_len = used_len - data_len - 8 - target_num * 4; Atomics.store(view, 2, new_used_len); const next_data_offset = offset + data_len + 8 + target_num * 4; - const next_tail = new Int32Array(this.share_arrays_memory, next_data_offset); + const next_tail = new Int32Array( + this.share_arrays_memory, + next_data_offset, + ); const now_tail = new Int32Array(this.share_arrays_memory, offset); now_tail.set(next_tail); // console.log("new_used_len", new_used_len); @@ -199,7 +209,7 @@ export abstract class ToRefSenderUseArrayBuffer { } if (offset !== Atomics.load(view, 2)) { - throw new Error("invalid offset: " + offset + " !== " + Atomics.load(view, 2)); + throw new Error(`invalid offset: ${offset} !== ${Atomics.load(view, 2)}`); } this.release_lock(); diff --git a/src/wasi_farm/shared_array_buffer/thread_spawn.ts b/src/wasi_farm/shared_array_buffer/thread_spawn.ts new file mode 100644 index 0000000..dc3ba3b --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/thread_spawn.ts @@ -0,0 +1,410 @@ +// (export "wasi_thread_start" (func $61879)) +// (func $61879 (param $0 i32) (param $1 i32) +// (local $2 i32) +// (local $3 i32) +// (local $4 i32) +// (local $5 i32) +// (local $6 i32) +// (local $7 i32) +// (global.set $global$0 +// (i32.load +// (local.get $1) +// ) +// ) + +// (import "wasi" "thread-spawn" (func $fimport$27 (param i32) (result i32))) + +import { WASIFarmAnimal } from "../animals.js"; +import type { WASIFarmRefObject } from "../ref.js"; +import type { WorkerBackgroundRefObject } from "./worker_background/index.js"; +import { + WorkerBackgroundRef, + worker_background_worker_url, +} from "./worker_background/index.js"; +import { WorkerBackgroundRefObjectConstructor } from "./worker_background/worker_export.js"; + +type ThreadSpawnerObject = { + share_memory: WebAssembly.Memory; + wasi_farm_refs_object: Array; + worker_url: string; + worker_background_ref_object: WorkerBackgroundRefObject; + // inst_default_buffer_kept: WebAssembly.Memory; +}; + +export class ThreadSpawner { + private share_memory: WebAssembly.Memory; + private wasi_farm_refs_object: Array; + private worker_url: string; + private worker_background_ref: WorkerBackgroundRef; + private worker_background_ref_object: WorkerBackgroundRefObject; + // inst_default_buffer_kept: WebAssembly.Memory; + + // hold the worker to prevent GC. + private worker_background_worker?: Worker; + private worker_background_worker_promise?: Promise; + + // https://github.com/rustwasm/wasm-pack/issues/479 + + constructor( + worker_url: string, + wasi_farm_refs_object: Array, + share_memory?: WebAssembly.Memory, + // 16MB for the time being. + // https://users.rust-lang.org/t/what-is-the-size-limit-of-threads-stack-in-rust/11867/3 + MIN_STACK = 16777216, + worker_background_ref_object?: WorkerBackgroundRefObject, + thread_spawn_wasm?: WebAssembly.Module, + // inst_default_buffer_kept?: WebAssembly.Memory, + ) { + this.worker_url = worker_url; + this.wasi_farm_refs_object = wasi_farm_refs_object; + + const min_initial_size = 1048576 / 65536; // Rust's default stack size is 1MB. + const initial_size = MIN_STACK / 65536; + if (initial_size < min_initial_size) { + throw new Error( + `The stack size must be at least ${min_initial_size} bytes.`, + ); + } + const max_memory = 1073741824 / 65536; // Rust's default maximum memory size is 1GB. + + // this.inst_default_buffer_kept = + // inst_default_buffer_kept || + // new WebAssembly.Memory({ + // initial: 1, + // maximum: max_memory, + // shared: true, + // }); + + this.share_memory = + share_memory || + // WebAssembly.Memory's 1 page is 65536 bytes. + new WebAssembly.Memory({ + initial: initial_size, + maximum: max_memory, + shared: true, + }); + + if (worker_background_ref_object === undefined) { + const worker_background_worker_url__ = worker_background_worker_url(); + this.worker_background_worker = new Worker( + worker_background_worker_url__, + { type: "module" }, + ); + URL.revokeObjectURL(worker_background_worker_url__); + const { promise, resolve } = Promise.withResolvers(); + this.worker_background_worker_promise = promise; + this.worker_background_worker.onmessage = () => { + this.worker_background_worker_promise = undefined; + resolve(); + }; + this.worker_background_ref_object = + WorkerBackgroundRefObjectConstructor(); + this.worker_background_ref = WorkerBackgroundRef.init_self( + this.worker_background_ref_object, + ); + this.worker_background_worker.postMessage({ + override_object: { + sl_object: this.get_object(), + thread_spawn_wasm, + }, + worker_background_ref_object: this.worker_background_ref_object, + }); + } else { + this.worker_background_ref = WorkerBackgroundRef.init_self( + worker_background_ref_object, + ); + } + } + + // This cannot blocking. + async wait_worker_background_worker(): Promise { + if (this.worker_background_worker_promise) { + const promise = this.worker_background_worker_promise; + + await promise; + + return; + } + return; + } + + check_worker_background_worker(): void { + if (this.worker_background_worker_promise) { + throw new Error("worker_background_worker is not ready."); + } + } + + thread_spawn( + start_arg: number, + args: Array, + env: Array, + fd_map: Array<[number, number]>, + ): number { + const worker = this.worker_background_ref.new_worker( + this.worker_url, + { type: "module" }, + { + this_is_thread_spawn: true, + start_arg, + args, + env, + fd_map, + }, + ); + + const thread_id = worker.get_id(); + + return thread_id; + } + + async async_start_on_thread( + args: Array, + env: Array, + ): Promise { + if (!self.Worker.toString().includes("[native code]")) { + if (self.Worker.toString().includes("function")) { + console.warn("SubWorker(new Worker on Worker) is polyfilled maybe."); + } else { + throw new Error("SubWorker(new Worker on Worker) is not supported."); + } + } + + await this.worker_background_ref.async_start_on_thread( + this.worker_url, + { type: "module" }, + { + this_is_thread_spawn: true, + this_is_start: true, + args, + env, + }, + ); + } + + block_start_on_thread(args: Array, env: Array): void { + if (!self.Worker.toString().includes("[native code]")) { + if (self.Worker.toString().includes("function")) { + console.warn("SubWorker(new Worker on Worker) is polyfilled maybe."); + } else { + throw new Error("SubWorker(new Worker on Worker) is not supported."); + } + } + + this.worker_background_ref.block_start_on_thread( + this.worker_url, + { type: "module" }, + { + this_is_thread_spawn: true, + this_is_start: true, + args, + env, + }, + ); + } + + static init_self(sl: ThreadSpawnerObject): ThreadSpawner { + const thread_spawner = new ThreadSpawner( + sl.worker_url, + sl.wasi_farm_refs_object, + sl.share_memory, + undefined, + sl.worker_background_ref_object, + // undefined, + // sl.inst_default_buffer_kept, + ); + return thread_spawner; + } + + static init_self_with_worker_background_ref( + sl: ThreadSpawnerObject, + worker_background_ref_object: WorkerBackgroundRefObject, + ): ThreadSpawner { + const thread_spawner = new ThreadSpawner( + sl.worker_url, + sl.wasi_farm_refs_object, + sl.share_memory, + undefined, + worker_background_ref_object, + // undefined, + // sl.inst_default_buffer_kept, + ); + return thread_spawner; + } + + get_share_memory(): WebAssembly.Memory { + return this.share_memory; + } + + get_object(): ThreadSpawnerObject { + return { + share_memory: this.share_memory, + wasi_farm_refs_object: this.wasi_farm_refs_object, + worker_url: this.worker_url, + worker_background_ref_object: this.worker_background_ref_object, + // inst_default_buffer_kept: this.inst_default_buffer_kept, + }; + } + + done_notify(code: number): void { + this.worker_background_ref.done_notify(code); + } + + async async_wait_done_or_error(): Promise { + if (this.worker_background_worker === undefined) { + throw new Error("worker_background_worker is undefined."); + } + + return await this.worker_background_ref.async_wait_done_or_error(); + } + + block_wait_done_or_error(): number { + if (this.worker_background_worker === undefined) { + throw new Error("worker_background_worker is undefined."); + } + + return this.worker_background_ref.block_wait_done_or_error(); + } +} + +// send fd_map is not implemented yet. +// issue: the fd passed to the child process is different from the parent process. +export const thread_spawn_on_worker = async (msg: { + this_is_thread_spawn: boolean; + worker_id?: number; + start_arg: number; + worker_background_ref: WorkerBackgroundRefObject; + sl_object: ThreadSpawnerObject; + thread_spawn_wasm: WebAssembly.Module; + args: Array; + env: Array; + fd_map: Array; + this_is_start?: boolean; +}): Promise => { + if (msg.this_is_thread_spawn) { + if (msg.this_is_start) { + const thread_spawner = ThreadSpawner.init_self_with_worker_background_ref( + msg.sl_object, + msg.worker_background_ref, + ); + + const wasi = new WASIFarmAnimal( + msg.sl_object.wasi_farm_refs_object, + msg.args, + msg.env, + { + can_thread_spawn: true, + thread_spawn_worker_url: msg.sl_object.worker_url, + }, + undefined, + thread_spawner, + ); + + const inst = await WebAssembly.instantiate(msg.thread_spawn_wasm, { + env: { + memory: wasi.get_share_memory(), + }, + wasi: wasi.wasiThreadImport, + wasi_snapshot_preview1: wasi.wasiImport, + }); + + wasi.start( + inst as unknown as { + exports: { + memory: WebAssembly.Memory; + _start: () => unknown; + }; + }, + ); + + globalThis.postMessage({ + msg: "done", + }); + + return wasi; + } + + const { + worker_id: thread_id, + start_arg, + args, + env, + sl_object, + thread_spawn_wasm, + } = msg; + + console.log(`thread_spawn worker ${thread_id} start`); + + const thread_spawner = ThreadSpawner.init_self_with_worker_background_ref( + sl_object, + msg.worker_background_ref, + ); + + const override_fd_map: Array = new Array( + sl_object.wasi_farm_refs_object.length, + ); + + // Possibly null (undefined) + for (const fd_and_wasi_ref_n of msg.fd_map) { + // biome-ignore lint/suspicious/noDoubleEquals: + if (fd_and_wasi_ref_n == undefined) { + continue; + } + const [fd, wasi_ref_n] = fd_and_wasi_ref_n; + if (override_fd_map[wasi_ref_n] === undefined) { + override_fd_map[wasi_ref_n] = []; + } + override_fd_map[wasi_ref_n].push(fd); + } + + const wasi = new WASIFarmAnimal( + sl_object.wasi_farm_refs_object, + args, + env, + { + can_thread_spawn: true, + thread_spawn_worker_url: sl_object.worker_url, + }, + override_fd_map, + thread_spawner, + ); + + const inst = await WebAssembly.instantiate(thread_spawn_wasm, { + env: { + memory: wasi.get_share_memory(), + }, + wasi: wasi.wasiThreadImport, + wasi_snapshot_preview1: wasi.wasiImport, + }); + + globalThis.postMessage({ + msg: "ready", + }); + + try { + wasi.wasi_thread_start( + inst as unknown as { + exports: { + memory: WebAssembly.Memory; + wasi_thread_start: (thread_id: number, start_arg: number) => void; + }; + }, + thread_id, + start_arg, + ); + } catch (e) { + globalThis.postMessage({ + msg: "error", + error: e, + }); + + return wasi; + } + + globalThis.postMessage({ + msg: "done", + }); + + return wasi; + } +}; diff --git a/src/wasi_farm/shared_array_buffer/util.ts b/src/wasi_farm/shared_array_buffer/util.ts index bab95f3..4ed230f 100644 --- a/src/wasi_farm/shared_array_buffer/util.ts +++ b/src/wasi_farm/shared_array_buffer/util.ts @@ -1,36 +1,68 @@ export const get_func_name_from_number = (num: number): string => { switch (num) { - case 7: return "fd_advise"; - case 8: return "fd_allocate"; - case 9: return "fd_close"; - case 10: return "fd_datasync"; - case 11: return "fd_fdstat_get"; - case 12: return "fd_fdstat_set_flags"; - case 13: return "fd_fdstat_set_rights"; - case 14: return "fd_filestat_get"; - case 15: return "fd_filestat_set_size"; - case 16: return "fd_filestat_set_times"; - case 17: return "fd_pread"; - case 18: return "fd_prestat_get"; - case 19: return "fd_prestat_dir_name"; - case 20: return "fd_pwrite"; - case 21: return "fd_read"; - case 22: return "fd_readdir"; - case 23: return "fd_renumber"; - case 24: return "fd_seek"; - case 25: return "fd_sync"; - case 26: return "fd_tell"; - case 27: return "fd_write"; - case 28: return "path_create_directory"; - case 29: return "path_filestat_get"; - case 30: return "path_filestat_set_times"; - case 31: return "path_link"; - case 32: return "path_open"; - case 33: return "path_readlink"; - case 34: return "path_remove_directory"; - case 35: return "path_rename"; - case 36: return "path_symlink"; - case 37: return "path_unlink_file"; - default: return "unknown"; + case 7: + return "fd_advise"; + case 8: + return "fd_allocate"; + case 9: + return "fd_close"; + case 10: + return "fd_datasync"; + case 11: + return "fd_fdstat_get"; + case 12: + return "fd_fdstat_set_flags"; + case 13: + return "fd_fdstat_set_rights"; + case 14: + return "fd_filestat_get"; + case 15: + return "fd_filestat_set_size"; + case 16: + return "fd_filestat_set_times"; + case 17: + return "fd_pread"; + case 18: + return "fd_prestat_get"; + case 19: + return "fd_prestat_dir_name"; + case 20: + return "fd_pwrite"; + case 21: + return "fd_read"; + case 22: + return "fd_readdir"; + case 23: + return "fd_renumber"; + case 24: + return "fd_seek"; + case 25: + return "fd_sync"; + case 26: + return "fd_tell"; + case 27: + return "fd_write"; + case 28: + return "path_create_directory"; + case 29: + return "path_filestat_get"; + case 30: + return "path_filestat_set_times"; + case 31: + return "path_link"; + case 32: + return "path_open"; + case 33: + return "path_readlink"; + case 34: + return "path_remove_directory"; + case 35: + return "path_rename"; + case 36: + return "path_symlink"; + case 37: + return "path_unlink_file"; + default: + return "unknown"; } -} +}; diff --git a/src/wasi_farm/shared_array_buffer/worker_background/index.ts b/src/wasi_farm/shared_array_buffer/worker_background/index.ts new file mode 100644 index 0000000..eb3e67c --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/worker_background/index.ts @@ -0,0 +1,10 @@ +import type { WorkerBackgroundRefObject } from "./worker_export.js"; +import { WorkerBackgroundRef, WorkerRef } from "./worker_background_ref.js"; +import { url as worker_background_worker_url } from "./worker_blob.js"; + +export { + WorkerBackgroundRef, + WorkerRef, + type WorkerBackgroundRefObject, + worker_background_worker_url, +}; diff --git a/src/wasi_farm/shared_array_buffer/worker_background/minify.js b/src/wasi_farm/shared_array_buffer/worker_background/minify.js new file mode 100644 index 0000000..eecb571 --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/worker_background/minify.js @@ -0,0 +1,46 @@ +import swc from "@swc/core"; + +import { readFileSync, writeFileSync } from "node:fs"; + +const old_code = readFileSync( + "./dist/workers/worker_background_worker.js", + "utf8", +); + +const { code } = await swc.minify(old_code, { + compress: { + reduce_funcs: true, + arguments: true, + booleans_as_integers: true, + hoist_funs: false, + keep_classnames: false, + unsafe: true, + }, + mangle: true, +}); + +writeFileSync( + "./dist/workers/worker_background_worker_minify.js", + code, + "utf8", +); + +// \n -> \\n + +const wrapper_code = `export const url = () => { + const code = + '${code.replace(/\\/g, "\\\\")}'; + + const blob = new Blob([code], { type: "application/javascript" }); + + const url = URL.createObjectURL(blob); + + return url; +}; +`; + +writeFileSync( + "./src/wasi_farm/shared_array_buffer/worker_background/worker_blob.ts", + wrapper_code, + "utf8", +); diff --git a/src/wasi_farm/shared_array_buffer/worker_background/spack.config.cjs b/src/wasi_farm/shared_array_buffer/worker_background/spack.config.cjs new file mode 100644 index 0000000..2b498de --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/worker_background/spack.config.cjs @@ -0,0 +1,15 @@ +// https://swc.rs/docs/configuration/bundling + +const { config } = require("@swc/core/spack"); + +console.log(__dirname); + +module.exports = config({ + entry: { + web: `${__dirname}/worker.ts`, + }, + output: { + path: `${__dirname}/../../../../dist/workers/`, + name: "worker_background_worker.js", + }, +}); diff --git a/src/wasi_farm/shared_array_buffer/worker_background/worker.ts b/src/wasi_farm/shared_array_buffer/worker_background/worker.ts new file mode 100644 index 0000000..9db336e --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/worker_background/worker.ts @@ -0,0 +1,290 @@ +// If you create a worker and try to increase the number of threads, +// you will have to use Atomics.wait because they need to be synchronized. +// However, this is essentially impossible because Atomics.wait blocks the threads. +// Therefore, a dedicated worker that creates a subworker (worker in worker) is prepared. +// The request is made using BroadcastChannel. + +import * as Serializer from "../../../serialize_error.js"; +import { AllocatorUseArrayBuffer } from "../allocator.js"; +import type { WorkerBackgroundRefObject } from "./worker_export.js"; + +// Note that postMessage, etc. +// cannot be used in a blocking environment such as during wasm execution. +// (at least as far as I have tried) + +class WorkerBackground { + private override_object: T; + private allocator: AllocatorUseArrayBuffer; + private lock: SharedArrayBuffer; + private signature_input: SharedArrayBuffer; + + private workers: Array = [undefined]; + + private start_worker?: Worker; + + private listen_holder: Promise; + + constructor( + override_object: T, + lock?: SharedArrayBuffer, + allocator?: AllocatorUseArrayBuffer, + signature_input?: SharedArrayBuffer, + ) { + this.override_object = override_object; + this.lock = lock ?? new SharedArrayBuffer(20); + this.allocator = + allocator ?? + new AllocatorUseArrayBuffer(new SharedArrayBuffer(10 * 1024)); + this.signature_input = signature_input ?? new SharedArrayBuffer(24); + this.listen_holder = this.listen(); + } + + static init_self( + override_object: T, + worker_background_ref_object: WorkerBackgroundRefObject, + ): WorkerBackground { + return new WorkerBackground( + override_object, + worker_background_ref_object.lock, + AllocatorUseArrayBuffer.init_self(worker_background_ref_object.allocator), + worker_background_ref_object.signature_input, + ); + } + + assign_worker_id(): number { + for (let i = 1; i < this.workers.length; i++) { + if (this.workers[i] === undefined) { + return i; + } + } + this.workers.push(undefined); + return this.workers.length - 1; + } + + ref(): WorkerBackgroundRefObject { + return { + allocator: this.allocator.get_object(), + lock: this.lock, + signature_input: this.signature_input, + }; + } + + async listen(): Promise { + const lock_view = new Int32Array(this.lock); + Atomics.store(lock_view, 0, 0); + Atomics.store(lock_view, 1, 0); + + const signature_input_view = new Int32Array(this.signature_input); + + // eslint-disable-next-line no-constant-condition + while (true) { + try { + let lock: "not-equal" | "timed-out" | "ok"; + + const { value } = Atomics.waitAsync(lock_view, 1, 0); + if (value instanceof Promise) { + lock = await value; + } else { + lock = value; + } + if (lock === "timed-out") { + throw new Error("timed-out"); + } + + const locked_value = Atomics.load(lock_view, 1); + if (locked_value !== 1) { + throw new Error("locked"); + } + + const signature_input = Atomics.load(signature_input_view, 0); + switch (signature_input) { + // create new worker + case 1: { + const url_ptr = Atomics.load(signature_input_view, 1); + const url_len = Atomics.load(signature_input_view, 2); + const url_buff = this.allocator.get_memory(url_ptr, url_len); + this.allocator.free(url_ptr, url_len); + const url = new TextDecoder().decode(url_buff); + const is_module = Atomics.load(signature_input_view, 3) === 1; + const worker = new Worker(url, { + type: is_module ? "module" : "classic", + }); + const json_ptr = Atomics.load(signature_input_view, 4); + const json_len = Atomics.load(signature_input_view, 5); + const json_buff = this.allocator.get_memory(json_ptr, json_len); + this.allocator.free(json_ptr, json_len); + const json = new TextDecoder().decode(json_buff); + const obj = JSON.parse(json); + + const worker_id = this.assign_worker_id(); + + console.log(`new worker ${worker_id}`); + + this.workers[worker_id] = worker; + + const { promise, resolve } = Promise.withResolvers(); + + worker.onmessage = async (e) => { + const { msg } = e.data; + + if (msg === "ready") { + resolve(); + } + + if (msg === "done") { + this.workers[worker_id].terminate(); + this.workers[worker_id] = undefined; + + console.log(`worker ${worker_id} done so terminate`); + } + + if (msg === "error") { + this.workers[worker_id].terminate(); + this.workers[worker_id] = undefined; + + let n = 0; + for (const worker of this.workers) { + if (worker !== undefined) { + worker.terminate(); + console.warn( + `wasi throw error but child process exists, terminate ${n}`, + ); + } + n++; + } + if (this.start_worker !== undefined) { + this.start_worker.terminate(); + console.warn( + "wasi throw error but wasi exists, terminate wasi", + ); + } + + this.workers = [undefined]; + this.start_worker = undefined; + + const error = e.data.error; + + const notify_view = new Int32Array(this.lock, 8); + + const serialized_error = Serializer.serialize(error); + + const [ptr, len] = await this.allocator.async_write( + new TextEncoder().encode(JSON.stringify(serialized_error)), + this.lock, + 3, + ); + + // notify error = code 1 + const old = Atomics.compareExchange(notify_view, 0, 0, 1); + + if (old !== 0) { + console.error("what happened?"); + + this.allocator.free(ptr, len); + + return; + } + + const num = Atomics.notify(notify_view, 0); + + if (num === 0) { + console.error(error); + + this.allocator.free(ptr, len); + + Atomics.store(notify_view, 0, 0); + } + } + }; + + worker.postMessage({ + ...this.override_object, + ...obj, + worker_id, + worker_background_ref: this.ref(), + }); + + await promise; + + Atomics.store(signature_input_view, 0, worker_id); + + break; + } + // create start + case 2: { + const url_ptr = Atomics.load(signature_input_view, 1); + const url_len = Atomics.load(signature_input_view, 2); + const url_buff = this.allocator.get_memory(url_ptr, url_len); + this.allocator.free(url_ptr, url_len); + const url = new TextDecoder().decode(url_buff); + const is_module = Atomics.load(signature_input_view, 3) === 1; + this.start_worker = new Worker(url, { + type: is_module ? "module" : "classic", + }); + const json_ptr = Atomics.load(signature_input_view, 4); + const json_len = Atomics.load(signature_input_view, 5); + const json_buff = this.allocator.get_memory(json_ptr, json_len); + this.allocator.free(json_ptr, json_len); + const json = new TextDecoder().decode(json_buff); + const obj = JSON.parse(json); + + this.start_worker.onmessage = async (e) => { + const { msg } = e.data; + + if (msg === "done") { + let n = 0; + for (const worker of this.workers) { + if (worker !== undefined) { + worker.terminate(); + console.warn(`wasi done but worker exists, terminate ${n}`); + } + n++; + } + + this.start_worker.terminate(); + this.start_worker = undefined; + + console.log("start worker done so terminate"); + } + }; + + this.start_worker.postMessage({ + ...this.override_object, + ...obj, + worker_background_ref: this.ref(), + }); + + break; + } + } + + const old_call_lock = Atomics.exchange(lock_view, 1, 0); + if (old_call_lock !== 1) { + throw new Error("Lock is already set"); + } + const num = Atomics.notify(lock_view, 1, 1); + if (num !== 1) { + if (num === 0) { + console.warn("notify failed, waiter is late"); + continue; + } + throw new Error(`notify failed: ${num}`); + } + } catch (e) { + console.error(e); + } + } + } +} + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +let worker_background: WorkerBackground; + +globalThis.onmessage = (e: MessageEvent) => { + const { override_object, worker_background_ref_object } = e.data; + worker_background = WorkerBackground.init_self( + override_object, + worker_background_ref_object, + ); + postMessage("ready"); +}; diff --git a/src/wasi_farm/shared_array_buffer/worker_background/worker_background_ref.ts b/src/wasi_farm/shared_array_buffer/worker_background/worker_background_ref.ts new file mode 100644 index 0000000..4d570df --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/worker_background/worker_background_ref.ts @@ -0,0 +1,311 @@ +import * as Serializer from "../../../serialize_error.js"; +import { AllocatorUseArrayBuffer } from "../allocator.js"; +import type { WorkerBackgroundRefObject } from "./worker_export.js"; + +export class WorkerBackgroundRef { + private allocator: AllocatorUseArrayBuffer; + private lock: SharedArrayBuffer; + private signature_input: SharedArrayBuffer; + + constructor( + allocator: AllocatorUseArrayBuffer, + lock: SharedArrayBuffer, + signature_input: SharedArrayBuffer, + ) { + this.allocator = allocator; + this.lock = lock; + this.signature_input = signature_input; + } + + private block_lock_base_func(): void { + const view = new Int32Array(this.lock); + // eslint-disable-next-line no-constant-condition + while (true) { + const lock = Atomics.wait(view, 0, 1); + if (lock === "timed-out") { + throw new Error("timed-out lock"); + } + const old = Atomics.compareExchange(view, 0, 0, 1); + if (old !== 0) { + continue; + } + break; + } + } + + private async async_lock_base_func(): Promise { + const view = new Int32Array(this.lock); + // eslint-disable-next-line no-constant-condition + while (true) { + let value: "timed-out" | "not-equal" | "ok"; + const { value: _value } = Atomics.waitAsync(view, 0, 1); + if (_value instanceof Promise) { + value = await _value; + } else { + value = _value; + } + if (value === "timed-out") { + throw new Error("timed-out lock"); + } + const old = Atomics.compareExchange(view, 0, 0, 1); + if (old !== 0) { + continue; + } + break; + } + } + + private call_base_func(): void { + const view = new Int32Array(this.lock); + const old = Atomics.exchange(view, 1, 1); + if (old !== 0) { + console.error("what happened?"); + } + Atomics.notify(view, 1, 1); + } + + // wait base_func + private block_wait_base_func(): void { + const view = new Int32Array(this.lock); + const lock = Atomics.wait(view, 1, 1); + if (lock === "timed-out") { + throw new Error("timed-out lock"); + } + } + + private async async_wait_base_func(): Promise { + const view = new Int32Array(this.lock); + let value: "timed-out" | "not-equal" | "ok"; + const { value: _value } = Atomics.waitAsync(view, 1, 1); + if (_value instanceof Promise) { + value = await _value; + } else { + value = _value; + } + if (value === "timed-out") { + throw new Error("timed-out lock"); + } + } + + // release base_func + private release_base_func(): void { + const view = new Int32Array(this.lock); + Atomics.store(view, 0, 0); + Atomics.notify(view, 0, 1); + } + + new_worker( + url: string, + options?: WorkerOptions, + post_obj?: unknown, + ): WorkerRef { + this.block_lock_base_func(); + const view = new Int32Array(this.signature_input); + Atomics.store(view, 0, 1); + const url_buffer = new TextEncoder().encode(url); + this.allocator.block_write(url_buffer, this.signature_input, 1); + Atomics.store(view, 3, options.type === "module" ? 1 : 0); + const obj_json = JSON.stringify(post_obj); + const obj_buffer = new TextEncoder().encode(obj_json); + this.allocator.block_write(obj_buffer, this.signature_input, 4); + this.call_base_func(); + this.block_wait_base_func(); + + const id = Atomics.load(view, 0); + + this.release_base_func(); + + return new WorkerRef(id); + } + + async async_start_on_thread( + url: string, + options: WorkerOptions | undefined, + post_obj: unknown, + ) { + await this.async_lock_base_func(); + const view = new Int32Array(this.signature_input); + Atomics.store(view, 0, 2); + const url_buffer = new TextEncoder().encode(url); + await this.allocator.async_write(url_buffer, this.signature_input, 1); + Atomics.store(view, 3, options?.type === "module" ? 1 : 0); + const obj_json = JSON.stringify(post_obj); + const obj_buffer = new TextEncoder().encode(obj_json); + await this.allocator.async_write(obj_buffer, this.signature_input, 4); + this.call_base_func(); + await this.async_wait_base_func(); + + this.release_base_func(); + } + + block_start_on_thread( + url: string, + options: WorkerOptions | undefined, + post_obj: unknown, + ) { + this.block_lock_base_func(); + const view = new Int32Array(this.signature_input); + Atomics.store(view, 0, 2); + const url_buffer = new TextEncoder().encode(url); + this.allocator.block_write(url_buffer, this.signature_input, 1); + Atomics.store(view, 3, options?.type === "module" ? 1 : 0); + const obj_json = JSON.stringify(post_obj); + const obj_buffer = new TextEncoder().encode(obj_json); + this.allocator.block_write(obj_buffer, this.signature_input, 4); + this.call_base_func(); + this.block_wait_base_func(); + + this.release_base_func(); + } + + static init_self(sl: WorkerBackgroundRefObject): WorkerBackgroundRef { + return new WorkerBackgroundRef( + AllocatorUseArrayBuffer.init_self(sl.allocator), + sl.lock, + sl.signature_input, + ); + } + + done_notify(code: number): void { + const notify_view = new Int32Array(this.lock, 8); + + // notify done = code 2 + const old = Atomics.compareExchange(notify_view, 0, 0, 2); + + if (old !== 0) { + console.error("what happened?"); + + return; + } + + Atomics.store(notify_view, 1, code); + + const num = Atomics.notify(notify_view, 0); + + if (num === 0) { + Atomics.store(notify_view, 0, 0); + } + } + + async async_wait_done_or_error(): Promise { + const notify_view = new Int32Array(this.lock, 8); + + Atomics.store(notify_view, 0, 0); + + let value: "timed-out" | "not-equal" | "ok"; + const { value: _value } = Atomics.waitAsync(notify_view, 0, 0); + if (_value instanceof Promise) { + value = await _value; + } else { + value = _value; + } + + if (value === "timed-out") { + throw new Error("timed-out"); + } + + if (value === "not-equal") { + throw new Error("not-equal"); + } + + const code = Atomics.load(notify_view, 0); + + if (code === 2) { + const old = Atomics.compareExchange(notify_view, 0, 2, 0); + + const code = Atomics.load(notify_view, 1); + + if (old !== 2) { + console.error("what happened?"); + } + + return code; + } + + if (code !== 1) { + throw new Error("unknown code"); + } + + // get error + const ptr = Atomics.load(notify_view, 1); + const size = Atomics.load(notify_view, 2); + const error_buffer = this.allocator.get_memory(ptr, size); + const error_txt = new TextDecoder().decode(error_buffer); + const error_serialized = JSON.parse( + error_txt, + ) as Serializer.SerializedError; + const error = Serializer.deserialize(error_serialized); + + const old = Atomics.compareExchange(notify_view, 0, 1, 0); + + if (old !== 1) { + console.error("what happened?"); + } + + throw error; + } + + block_wait_done_or_error(): number { + const notify_view = new Int32Array(this.lock, 8); + + Atomics.store(notify_view, 0, 0); + + const value = Atomics.wait(notify_view, 0, 0); + + if (value === "timed-out") { + throw new Error("timed-out"); + } + + if (value === "not-equal") { + throw new Error("not-equal"); + } + + const code = Atomics.load(notify_view, 0); + + if (code === 2) { + const old = Atomics.compareExchange(notify_view, 0, 2, 0); + + const code = Atomics.load(notify_view, 1); + + if (old !== 2) { + console.error("what happened?"); + } + + return code; + } + + if (code !== 1) { + throw new Error("unknown code"); + } + + // get error + const ptr = Atomics.load(notify_view, 1); + const size = Atomics.load(notify_view, 2); + const error_buffer = this.allocator.get_memory(ptr, size); + const error_txt = new TextDecoder().decode(error_buffer); + const error_serialized = JSON.parse( + error_txt, + ) as Serializer.SerializedError; + const error = Serializer.deserialize(error_serialized); + + const old = Atomics.compareExchange(notify_view, 0, 1, 0); + + if (old !== 1) { + console.error("what happened?"); + } + + throw error; + } +} + +export class WorkerRef { + private id: number; + + constructor(id: number) { + this.id = id; + } + + get_id(): number { + return this.id; + } +} diff --git a/src/wasi_farm/shared_array_buffer/worker_background/worker_blob.ts b/src/wasi_farm/shared_array_buffer/worker_background/worker_blob.ts new file mode 100644 index 0000000..8a1adf3 --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/worker_background/worker_blob.ts @@ -0,0 +1,10 @@ +export const url = () => { + const code = + 'let worker_background;function _define_property(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}let serialize=e=>({message:e.message,name:e.name,stack:e.stack,cause:e.cause});class AllocatorUseArrayBuffer{static init_self(e){return new AllocatorUseArrayBuffer(e.share_arrays_memory)}async async_write(e,r,t){let o=new Int32Array(this.share_arrays_memory);for(;;){let{value:s}=Atomics.waitAsync(o,0,1);if("timed-out"===(s instanceof Promise?await s:s))throw Error("timed-out lock");if(0!==Atomics.compareExchange(o,0,0,1))continue;let i=this.write_inner(e,r,t);return Atomics.store(o,0,0),Atomics.notify(o,0,1),i}}block_write(e,r,t){for(;;){let o=new Int32Array(this.share_arrays_memory);if("timed-out"===Atomics.wait(o,0,1))throw Error("timed-out lock");if(0!==Atomics.compareExchange(o,0,0,1))continue;let s=this.write_inner(e,r,t);return Atomics.store(o,0,0),Atomics.notify(o,0,1),s}}write_inner(e,r,t){let o,s;let i=new Int32Array(this.share_arrays_memory),a=new Uint8Array(this.share_arrays_memory);o=0===Atomics.add(i,1,1)?Atomics.store(i,2,12):Atomics.load(i,2);let n=this.share_arrays_memory.byteLength,c=e.byteLength,l=o+c;if(n{let{msg:r}=e.data;if("ready"===r&&y(),"done"===r&&(this.workers[w].terminate(),this.workers[w]=void 0,console.log(`worker ${w} done so terminate`)),"error"===r){this.workers[w].terminate(),this.workers[w]=void 0;let r=0;for(let e of this.workers)void 0!==e&&(e.terminate(),console.warn("wasi throw error but child process exists, terminate "+r)),r++;void 0!==this.start_worker&&(this.start_worker.terminate(),console.warn("wasi throw error but wasi exists, terminate wasi")),this.workers=[void 0],this.start_worker=void 0;let t=e.data.error,o=new Int32Array(this.lock,8),s=serialize(t),[i,a]=await this.allocator.async_write(new TextEncoder().encode(JSON.stringify(s)),this.lock,3),n=Atomics.compareExchange(o,0,0,1);if(0!==n){console.error("what happened?"),this.allocator.free(i,a);return}let c=Atomics.notify(o,0);0===c&&(console.error(t),this.allocator.free(i,a),Atomics.store(o,0,0))}},a.postMessage({...this.override_object,...m,worker_id:w,worker_background_ref:this.ref()}),await d,Atomics.store(r,0,w);break}case 2:{let e=Atomics.load(r,1),t=Atomics.load(r,2),o=this.allocator.get_memory(e,t);this.allocator.free(e,t);let s=new TextDecoder().decode(o),i=1===Atomics.load(r,3);this.start_worker=new Worker(s,{type:i?"module":"classic"});let a=Atomics.load(r,4),n=Atomics.load(r,5),c=this.allocator.get_memory(a,n);this.allocator.free(a,n);let l=new TextDecoder().decode(c),h=JSON.parse(l);this.start_worker.onmessage=async e=>{let{msg:r}=e.data;if("done"===r){let e=0;for(let r of this.workers)void 0!==r&&(r.terminate(),console.warn("wasi done but worker exists, terminate "+e)),e++;this.start_worker.terminate(),this.start_worker=void 0,console.log("start worker done so terminate")}},this.start_worker.postMessage({...this.override_object,...h,worker_background_ref:this.ref()})}}let i=Atomics.exchange(e,1,0);if(1!==i)throw Error("Lock is already set");let a=Atomics.notify(e,1,1);if(1!==a){if(0===a){console.warn("notify failed, waiter is late");continue}throw Error("notify failed: "+a)}}catch(e){console.error(e)}}constructor(e,r,t,o){_define_property(this,"override_object",void 0),_define_property(this,"allocator",void 0),_define_property(this,"lock",void 0),_define_property(this,"signature_input",void 0),_define_property(this,"workers",[void 0]),_define_property(this,"start_worker",void 0),_define_property(this,"listen_holder",void 0),this.override_object=e,this.lock=r??new SharedArrayBuffer(20),this.allocator=t??new AllocatorUseArrayBuffer(new SharedArrayBuffer(10240)),this.signature_input=o??new SharedArrayBuffer(24),this.listen_holder=this.listen()}};globalThis.onmessage=e=>{let{override_object:r,worker_background_ref_object:t}=e.data;worker_background=WorkerBackground.init_self(r,t),postMessage("ready")};'; + + const blob = new Blob([code], { type: "application/javascript" }); + + const url = URL.createObjectURL(blob); + + return url; +}; diff --git a/src/wasi_farm/shared_array_buffer/worker_background/worker_export.ts b/src/wasi_farm/shared_array_buffer/worker_background/worker_export.ts new file mode 100644 index 0000000..9f831a8 --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/worker_background/worker_export.ts @@ -0,0 +1,18 @@ +import type { AllocatorUseArrayBufferObject } from "../allocator.js"; + +export type WorkerBackgroundRefObject = { + allocator: AllocatorUseArrayBufferObject; + lock: SharedArrayBuffer; + signature_input: SharedArrayBuffer; +}; + +export const WorkerBackgroundRefObjectConstructor = + (): WorkerBackgroundRefObject => { + return { + allocator: { + share_arrays_memory: new SharedArrayBuffer(10 * 1024), + }, + lock: new SharedArrayBuffer(20), + signature_input: new SharedArrayBuffer(24), + }; + }; diff --git a/test/run-testsuite.sh b/test/run-testsuite.sh old mode 100755 new mode 100644