From 9bef9977bd12a071b877efc2d459432e7fa9ad63 Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Sat, 3 Feb 2024 13:09:11 +0530 Subject: [PATCH 01/32] feat: support full web assembly for the demo site --- Cargo.toml | 5 +- Makefile | 18 + asm/.gitignore | 20 + asm/Cargo.toml | 15 + asm/src/lib.rs | 62 +++ asm2/.gitignore | 18 + asm2/Cargo.toml | 21 + asm2/makefile | 0 asm2/src/lib.rs | 63 +++ server/Cargo.lock | 10 +- server/Cargo.toml | 23 - server/Makefile | 19 +- server/web/package-lock.json | 8 + server/web/package.json | 3 +- server/web/src/app/page.tsx | 2 +- server/web/src/asm/asm-9dbf0d2.d.ts | 49 ++ server/web/src/asm/asm-9dbf0d2.js | 571 ++++++++++++++++++++ server/web/src/asm/asm-9dbf0d2_bg.wasm | Bin 0 -> 174522 bytes server/web/src/asm/asm-9dbf0d2_bg.wasm.d.ts | 10 + server/web/src/asm/file.txt | 0 server/web/src/asm/index.d.ts | 1 + server/web/src/asm/index.js | 1 + server/web/src/asm/package.json | 14 + server/web/src/components/date/date.tsx | 43 ++ server/web/src/components/page/home.tsx | 4 +- src/lib.rs | 106 ++-- src/model.rs | 13 +- 27 files changed, 995 insertions(+), 104 deletions(-) create mode 100644 asm/.gitignore create mode 100644 asm/Cargo.toml create mode 100644 asm/src/lib.rs create mode 100644 asm2/.gitignore create mode 100644 asm2/Cargo.toml create mode 100644 asm2/makefile create mode 100644 asm2/src/lib.rs delete mode 100644 server/Cargo.toml create mode 100644 server/web/src/asm/asm-9dbf0d2.d.ts create mode 100644 server/web/src/asm/asm-9dbf0d2.js create mode 100644 server/web/src/asm/asm-9dbf0d2_bg.wasm create mode 100644 server/web/src/asm/asm-9dbf0d2_bg.wasm.d.ts create mode 100644 server/web/src/asm/file.txt create mode 100644 server/web/src/asm/index.d.ts create mode 100644 server/web/src/asm/index.js create mode 100644 server/web/src/asm/package.json diff --git a/Cargo.toml b/Cargo.toml index 32ea5dc..d318265 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,10 +1,11 @@ +workspace = { members = ["asm"] } [package] name = "timex" version = "0.3.2-beta.1" edition = "2021" resolver = "2" authors = ["Jawahar S "] -license = "MIT" +license = "mit" description = "Generate date times as event similar to Microsoft calender or Google calender based on the given parameters." readme = "README.md" homepage = "https://github.com/jawahar273/timex" @@ -25,8 +26,6 @@ env_logger = "0.10.1" log = "0.4.20" serde = { version = "1.0.193", features = ["derive"] } thiserror = "1.0.50" -wasm-bindgen = "0.2.89" -serde-wasm-bindgen = "0.6.3" serde_json = "1.0.108" # reduce web assembly size https://rustwasm.github.io/twiggy/ diff --git a/Makefile b/Makefile index c2c1822..332990c 100644 --- a/Makefile +++ b/Makefile @@ -30,3 +30,21 @@ pre-release: relase: cargo release commit --execute cargo release tag --execute --no-confirm + +ASM_PATH="./asm" +WEB_PATH="./server/web" +WEB_ASM_PATH="${WEB_PATH}/src/asm" + +COMMIT_ID=$(shell git rev-parse --short HEAD) +ASM_FILE_NAME="asm-${COMMIT_ID}" + +js-asm: + + + echo "version: ${COMMIT_ID}" && \ + cd ${ASM_PATH} && \ + rm -rf "${ASM_PATH}/pkg" && \ + wasm-pack build --target web --out-name ${ASM_FILE_NAME} && \ + cd .. && \ + rm -rf "${WEB_ASM_PATH}/*" && \ + cp -a ${ASM_PATH}/pkg/* ${WEB_ASM_PATH} diff --git a/asm/.gitignore b/asm/.gitignore new file mode 100644 index 0000000..d1f05c0 --- /dev/null +++ b/asm/.gitignore @@ -0,0 +1,20 @@ +# Generated by Cargo +# will have compiled files and executables +debug/ +target/ + +# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries +# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html +# Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk + +# MSVC Windows builds of rustc generate these, which store debugging information +*.pdb +debug/ +wasm32-unknown-unknown +wasm32-wasi +release/ +pkg +.rust_info.json \ No newline at end of file diff --git a/asm/Cargo.toml b/asm/Cargo.toml new file mode 100644 index 0000000..af9785a --- /dev/null +++ b/asm/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "asm" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[lib] +crate-type = ["rlib", "cdylib"] + +[dependencies] +chrono = "0.4.31" +wasm-bindgen = "0.2.90" +timex = { path = "../"} +serde-wasm-bindgen = "0.6.3" \ No newline at end of file diff --git a/asm/src/lib.rs b/asm/src/lib.rs new file mode 100644 index 0000000..2df9f7a --- /dev/null +++ b/asm/src/lib.rs @@ -0,0 +1,62 @@ +use chrono::{DateTime, Utc}; +use timex::{ + model::ScheduleDetails, + schedule_date_times, +}; +use wasm_bindgen::{prelude::wasm_bindgen, *}; + + +#[wasm_bindgen] +pub fn show_detail_in_display(_detail: JsValue) -> std::result::Result { + let detail: ScheduleDetails = match serde_wasm_bindgen::from_value(_detail) { + Err(e) => return Err(e.to_string().into()), + std::result::Result::Ok(v) => v, + }; + + return std::result::Result::Ok(format!("{}", detail).into()); +} + +#[wasm_bindgen] +pub fn find_schedule_date_time( + _detail: JsValue, + previous_scheduled_date: String, + start_range_date: String, + end_range_date: String, +) -> std::result::Result, JsValue> { + let mut _previous_scheduled_date: DateTime; + let detail: ScheduleDetails = serde_wasm_bindgen::from_value(_detail)?; + + match DateTime::parse_from_rfc3339(&previous_scheduled_date) { + std::result::Result::Ok(v) => _previous_scheduled_date = v.with_timezone(&Utc), + Err(e) => return Err(e.to_string().into()), + }; + + let mut _start_range_date: DateTime; + + match DateTime::parse_from_rfc3339(&start_range_date) { + std::result::Result::Ok(v) => _start_range_date = v.with_timezone(&Utc), + Err(e) => return Err(e.to_string().into()), + }; + + let mut _end_range_date: DateTime; + + match DateTime::parse_from_rfc3339(&end_range_date) { + std::result::Result::Ok(v) => _end_range_date = v.with_timezone(&Utc), + Err(e) => return Err(e.to_string().into()), + }; + + let t = schedule_date_times( + &detail, + _previous_scheduled_date, + _start_range_date, + _end_range_date, + ); + match t { + std::result::Result::Ok(v) => std::result::Result::Ok( + v.into_iter() + .map(|x| x.to_rfc3339().into()) + .collect::>(), + ), + Err(e) => Err(e.to_string().into()), + } +} diff --git a/asm2/.gitignore b/asm2/.gitignore new file mode 100644 index 0000000..cc0b001 --- /dev/null +++ b/asm2/.gitignore @@ -0,0 +1,18 @@ +# Generated by Cargo +# will have compiled files and executables +debug/ +target/ + +# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries +# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html +# Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk + +# MSVC Windows builds of rustc generate these, which store debugging information +*.pdb +debug/ +wasm32-unknown-unknown +wasm32-wasi +release/ \ No newline at end of file diff --git a/asm2/Cargo.toml b/asm2/Cargo.toml new file mode 100644 index 0000000..c12ffa4 --- /dev/null +++ b/asm2/Cargo.toml @@ -0,0 +1,21 @@ +workspace = { members = ["wasi-hello-world"] } +[package] +name = "asm" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +extism-pdk = "1.0.1" +timex = { path = "../"} +chrono = "0.4.31" +serde = "1.0" +wasm-bindgen = "0.2.89" +serde-wasm-bindgen = "0.6.3" + +[lib] +crate-type = ["rlib", "cdylib"] + +[build] +target = "wasm32-wasi" diff --git a/asm2/makefile b/asm2/makefile new file mode 100644 index 0000000..e69de29 diff --git a/asm2/src/lib.rs b/asm2/src/lib.rs new file mode 100644 index 0000000..97e54fa --- /dev/null +++ b/asm2/src/lib.rs @@ -0,0 +1,63 @@ +use chrono::{DateTime, Utc}; +use extism_pdk::*; +use serde::{Deserialize, Serialize}; +use std::result::Result::Ok; +use timex::{model::ScheduleDetails, schedule_date_times}; + +#[derive(Deserialize)] +struct Props { + detail: ScheduleDetails, + previous_scheduled_date: String, + start_range_date: String, + end_range_date: String, +} + +#[plugin_fn] +pub fn find_schedule_date_time(Json(props): Json) -> FnResult>> { + let mut _previous_scheduled_date: DateTime; + let detail: ScheduleDetails = props.detail; + + match DateTime::parse_from_rfc3339(&props.previous_scheduled_date) { + Ok(v) => _previous_scheduled_date = v.with_timezone(&Utc), + Err(e) => return Err(e.into()), + }; + + let mut _start_range_date: DateTime; + + match DateTime::parse_from_rfc3339(&props.start_range_date) { + Ok(v) => _start_range_date = v.with_timezone(&Utc), + Err(e) => return Err(e.into()), + }; + + let mut _end_range_date: DateTime; + + match DateTime::parse_from_rfc3339(&props.end_range_date) { + Ok(v) => _end_range_date = v.with_timezone(&Utc), + Err(e) => return Err(e.into()), + }; + + let t = schedule_date_times( + &detail, + _previous_scheduled_date, + _start_range_date, + _end_range_date, + ); + + match t { + Ok(v) => { + let temp = v + .into_iter() + .map(|x| x.to_rfc3339().into()) + .collect::>(); + Ok(Json(temp)) + } + Err(e) => Err(e.into()), + } + + // return Ok(Json(vec![ + // "sd1".to_string(), + // props.start_range_date, + // props.end_range_date, + // // _start_range_date.to_rfc3339(), + // ])); +} diff --git a/server/Cargo.lock b/server/Cargo.lock index a4c5cf1..7bc9fdb 100644 --- a/server/Cargo.lock +++ b/server/Cargo.lock @@ -384,9 +384,9 @@ checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "h2" -version = "0.3.24" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" +checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" dependencies = [ "bytes", "fnv", @@ -537,7 +537,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.3.24", + "h2 0.3.22", "http 0.2.11", "http-body 0.4.6", "httparse", @@ -1224,7 +1224,7 @@ dependencies = [ [[package]] name = "timex" -version = "0.3.2-beta.1" +version = "0.3.0-beta.1" dependencies = [ "anyhow", "chrono", @@ -1313,7 +1313,7 @@ dependencies = [ "axum 0.6.20", "base64", "bytes", - "h2 0.3.24", + "h2 0.3.22", "http 0.2.11", "http-body 0.4.6", "hyper 0.14.28", diff --git a/server/Cargo.toml b/server/Cargo.toml deleted file mode 100644 index 2445768..0000000 --- a/server/Cargo.toml +++ /dev/null @@ -1,23 +0,0 @@ -[package] -name = "server" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - - - -[dependencies] -axum = "0.7.2" -tokio = { version = "1.35.1", features = ["full"] } -tower = "0.4.13" -timex = { path = "../"} -chrono = "0.4.31" -serde_json = "1.0.108" -serde = "1.0.193" -tonic = "0.10.2" -prost = "0.12.3" -tonic-health = "0.10.2" - -[build-dependencies] -tonic-build = "0.10.2" diff --git a/server/Makefile b/server/Makefile index b8dd9ba..594de86 100644 --- a/server/Makefile +++ b/server/Makefile @@ -1,4 +1,7 @@ -CORE_PATH="./core" +CORE_PATH="." +ASM_PATH="../asm" +WEB_PATH="./server/web" + install: @@ -32,10 +35,10 @@ go-grpc: --proto_path=. \ ./proto/api/v1/*.proto -# asm: -# rm -rf ./web/pkg -# cd ${CORE_PATH} && \ -# wasm-pack build --target web && \ -# cd .. && \ -# mv ${CORE_PATH}/pkg ./server/web/ - + +asm: + cd .. && \ + cd asm && \ + CARGO_TARGET_DIR=./ cargo build --target wasm32-wasi --release && \ + cd .. && \ + cp ./asm/wasm32-wasi/release/asm.wasm ./server/ diff --git a/server/web/package-lock.json b/server/web/package-lock.json index 396780a..e989a7c 100644 --- a/server/web/package-lock.json +++ b/server/web/package-lock.json @@ -19,6 +19,7 @@ "@radix-ui/react-tabs": "^1.0.4", "@radix-ui/react-toast": "^1.1.5", "@types/dompurify": "^3.0.5", + "asm": "./src/asm", "axios": "^1.6.3", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", @@ -1779,6 +1780,10 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/asm": { + "resolved": "src/asm", + "link": true + }, "node_modules/ast-types-flow": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", @@ -6050,6 +6055,9 @@ "funding": { "url": "https://github.com/sponsors/colinhacks" } + }, + "src/asm": { + "version": "0.1.0" } } } diff --git a/server/web/package.json b/server/web/package.json index 5b0bb0f..55092ed 100644 --- a/server/web/package.json +++ b/server/web/package.json @@ -10,6 +10,7 @@ "prettier": "prettier -w ." }, "dependencies": { + "asm": "./src/asm", "@hookform/resolvers": "^3.3.3", "@radix-ui/react-accordion": "^1.1.2", "@radix-ui/react-dialog": "^1.0.5", @@ -55,4 +56,4 @@ "tailwindcss": "^3.3.0", "typescript": "^5.3.3" } -} +} \ No newline at end of file diff --git a/server/web/src/app/page.tsx b/server/web/src/app/page.tsx index 0d393c8..745ea51 100644 --- a/server/web/src/app/page.tsx +++ b/server/web/src/app/page.tsx @@ -10,4 +10,4 @@ const ComponentHome = dynamic(() => import('@timex/components/page/home'), { export default function Home() { return -} \ No newline at end of file +} diff --git a/server/web/src/asm/asm-9dbf0d2.d.ts b/server/web/src/asm/asm-9dbf0d2.d.ts new file mode 100644 index 0000000..1dcf687 --- /dev/null +++ b/server/web/src/asm/asm-9dbf0d2.d.ts @@ -0,0 +1,49 @@ +/* tslint:disable */ +/* eslint-disable */ +/** +* @param {any} _detail +* @returns {any} +*/ +export function show_detail_in_display(_detail: any): any; +/** +* @param {any} _detail +* @param {string} previous_scheduled_date +* @param {string} start_range_date +* @param {string} end_range_date +* @returns {any[]} +*/ +export function find_schedule_date_time(_detail: any, previous_scheduled_date: string, start_range_date: string, end_range_date: string): any[]; + +export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module; + +export interface InitOutput { + readonly memory: WebAssembly.Memory; + readonly show_detail_in_display: (a: number, b: number) => void; + readonly find_schedule_date_time: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => void; + readonly __wbindgen_malloc: (a: number, b: number) => number; + readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; + readonly __wbindgen_add_to_stack_pointer: (a: number) => number; + readonly __wbindgen_free: (a: number, b: number, c: number) => void; + readonly __wbindgen_exn_store: (a: number) => void; +} + +export type SyncInitInput = BufferSource | WebAssembly.Module; +/** +* Instantiates the given `module`, which can either be bytes or +* a precompiled `WebAssembly.Module`. +* +* @param {SyncInitInput} module +* +* @returns {InitOutput} +*/ +export function initSync(module: SyncInitInput): InitOutput; + +/** +* If `module_or_path` is {RequestInfo} or {URL}, makes a request and +* for everything else, calls `WebAssembly.instantiate` directly. +* +* @param {InitInput | Promise} module_or_path +* +* @returns {Promise} +*/ +export default function __wbg_init (module_or_path?: InitInput | Promise): Promise; diff --git a/server/web/src/asm/asm-9dbf0d2.js b/server/web/src/asm/asm-9dbf0d2.js new file mode 100644 index 0000000..3e6ecfd --- /dev/null +++ b/server/web/src/asm/asm-9dbf0d2.js @@ -0,0 +1,571 @@ +let wasm; + +const heap = new Array(128).fill(undefined); + +heap.push(undefined, null, true, false); + +function getObject(idx) { return heap[idx]; } + +let heap_next = heap.length; + +function dropObject(idx) { + if (idx < 132) return; + heap[idx] = heap_next; + heap_next = idx; +} + +function takeObject(idx) { + const ret = getObject(idx); + dropObject(idx); + return ret; +} + +function addHeapObject(obj) { + if (heap_next === heap.length) heap.push(heap.length + 1); + const idx = heap_next; + heap_next = heap[idx]; + + heap[idx] = obj; + return idx; +} + +let WASM_VECTOR_LEN = 0; + +let cachedUint8Memory0 = null; + +function getUint8Memory0() { + if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) { + cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8Memory0; +} + +const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } ); + +const encodeString = (typeof cachedTextEncoder.encodeInto === 'function' + ? function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +} + : function (arg, view) { + const buf = cachedTextEncoder.encode(arg); + view.set(buf); + return { + read: arg.length, + written: buf.length + }; +}); + +function passStringToWasm0(arg, malloc, realloc) { + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + + const mem = getUint8Memory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8Memory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +function isLikeNone(x) { + return x === undefined || x === null; +} + +let cachedInt32Memory0 = null; + +function getInt32Memory0() { + if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) { + cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); + } + return cachedInt32Memory0; +} + +const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); + +if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; + +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); +} + +let cachedFloat64Memory0 = null; + +function getFloat64Memory0() { + if (cachedFloat64Memory0 === null || cachedFloat64Memory0.byteLength === 0) { + cachedFloat64Memory0 = new Float64Array(wasm.memory.buffer); + } + return cachedFloat64Memory0; +} + +let cachedBigInt64Memory0 = null; + +function getBigInt64Memory0() { + if (cachedBigInt64Memory0 === null || cachedBigInt64Memory0.byteLength === 0) { + cachedBigInt64Memory0 = new BigInt64Array(wasm.memory.buffer); + } + return cachedBigInt64Memory0; +} + +function debugString(val) { + // primitive types + const type = typeof val; + if (type == 'number' || type == 'boolean' || val == null) { + return `${val}`; + } + if (type == 'string') { + return `"${val}"`; + } + if (type == 'symbol') { + const description = val.description; + if (description == null) { + return 'Symbol'; + } else { + return `Symbol(${description})`; + } + } + if (type == 'function') { + const name = val.name; + if (typeof name == 'string' && name.length > 0) { + return `Function(${name})`; + } else { + return 'Function'; + } + } + // objects + if (Array.isArray(val)) { + const length = val.length; + let debug = '['; + if (length > 0) { + debug += debugString(val[0]); + } + for(let i = 1; i < length; i++) { + debug += ', ' + debugString(val[i]); + } + debug += ']'; + return debug; + } + // Test for built-in + const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); + let className; + if (builtInMatches.length > 1) { + className = builtInMatches[1]; + } else { + // Failed to match the standard '[object ClassName]' + return toString.call(val); + } + if (className == 'Object') { + // we're a user defined class or Object + // JSON.stringify avoids problems with cycles, and is generally much + // easier than looping through ownProperties of `val`. + try { + return 'Object(' + JSON.stringify(val) + ')'; + } catch (_) { + return 'Object'; + } + } + // errors + if (val instanceof Error) { + return `${val.name}: ${val.message}\n${val.stack}`; + } + // TODO we could test for more things here, like `Set`s and `Map`s. + return className; +} +/** +* @param {any} _detail +* @returns {any} +*/ +export function show_detail_in_display(_detail) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.show_detail_in_display(retptr, addHeapObject(_detail)); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } +} + +let cachedUint32Memory0 = null; + +function getUint32Memory0() { + if (cachedUint32Memory0 === null || cachedUint32Memory0.byteLength === 0) { + cachedUint32Memory0 = new Uint32Array(wasm.memory.buffer); + } + return cachedUint32Memory0; +} + +function getArrayJsValueFromWasm0(ptr, len) { + ptr = ptr >>> 0; + const mem = getUint32Memory0(); + const slice = mem.subarray(ptr / 4, ptr / 4 + len); + const result = []; + for (let i = 0; i < slice.length; i++) { + result.push(takeObject(slice[i])); + } + return result; +} +/** +* @param {any} _detail +* @param {string} previous_scheduled_date +* @param {string} start_range_date +* @param {string} end_range_date +* @returns {any[]} +*/ +export function find_schedule_date_time(_detail, previous_scheduled_date, start_range_date, end_range_date) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(previous_scheduled_date, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ptr1 = passStringToWasm0(start_range_date, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + const ptr2 = passStringToWasm0(end_range_date, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len2 = WASM_VECTOR_LEN; + wasm.find_schedule_date_time(retptr, addHeapObject(_detail), ptr0, len0, ptr1, len1, ptr2, len2); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + var r3 = getInt32Memory0()[retptr / 4 + 3]; + if (r3) { + throw takeObject(r2); + } + var v4 = getArrayJsValueFromWasm0(r0, r1).slice(); + wasm.__wbindgen_free(r0, r1 * 4, 4); + return v4; + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } +} + +function handleError(f, args) { + try { + return f.apply(this, args); + } catch (e) { + wasm.__wbindgen_exn_store(addHeapObject(e)); + } +} + +async function __wbg_load(module, imports) { + if (typeof Response === 'function' && module instanceof Response) { + if (typeof WebAssembly.instantiateStreaming === 'function') { + try { + return await WebAssembly.instantiateStreaming(module, imports); + + } catch (e) { + if (module.headers.get('Content-Type') != 'application/wasm') { + console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); + + } else { + throw e; + } + } + } + + const bytes = await module.arrayBuffer(); + return await WebAssembly.instantiate(bytes, imports); + + } else { + const instance = await WebAssembly.instantiate(module, imports); + + if (instance instanceof WebAssembly.Instance) { + return { instance, module }; + + } else { + return instance; + } + } +} + +function __wbg_get_imports() { + const imports = {}; + imports.wbg = {}; + imports.wbg.__wbindgen_object_drop_ref = function(arg0) { + takeObject(arg0); + }; + imports.wbg.__wbindgen_is_undefined = function(arg0) { + const ret = getObject(arg0) === undefined; + return ret; + }; + imports.wbg.__wbindgen_in = function(arg0, arg1) { + const ret = getObject(arg0) in getObject(arg1); + return ret; + }; + imports.wbg.__wbindgen_is_bigint = function(arg0) { + const ret = typeof(getObject(arg0)) === 'bigint'; + return ret; + }; + imports.wbg.__wbindgen_bigint_from_i64 = function(arg0) { + const ret = arg0; + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_jsval_eq = function(arg0, arg1) { + const ret = getObject(arg0) === getObject(arg1); + return ret; + }; + imports.wbg.__wbindgen_bigint_from_u64 = function(arg0) { + const ret = BigInt.asUintN(64, arg0); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_is_string = function(arg0) { + const ret = typeof(getObject(arg0)) === 'string'; + return ret; + }; + imports.wbg.__wbindgen_string_get = function(arg0, arg1) { + const obj = getObject(arg1); + const ret = typeof(obj) === 'string' ? obj : undefined; + var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + var len1 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len1; + getInt32Memory0()[arg0 / 4 + 0] = ptr1; + }; + imports.wbg.__wbindgen_is_object = function(arg0) { + const val = getObject(arg0); + const ret = typeof(val) === 'object' && val !== null; + return ret; + }; + imports.wbg.__wbindgen_string_new = function(arg0, arg1) { + const ret = getStringFromWasm0(arg0, arg1); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_error_new = function(arg0, arg1) { + const ret = new Error(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_jsval_loose_eq = function(arg0, arg1) { + const ret = getObject(arg0) == getObject(arg1); + return ret; + }; + imports.wbg.__wbindgen_boolean_get = function(arg0) { + const v = getObject(arg0); + const ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2; + return ret; + }; + imports.wbg.__wbindgen_number_get = function(arg0, arg1) { + const obj = getObject(arg1); + const ret = typeof(obj) === 'number' ? obj : undefined; + getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret; + getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); + }; + imports.wbg.__wbindgen_as_number = function(arg0) { + const ret = +getObject(arg0); + return ret; + }; + imports.wbg.__wbg_String_389b54bd9d25375f = function(arg0, arg1) { + const ret = String(getObject(arg1)); + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len1; + getInt32Memory0()[arg0 / 4 + 0] = ptr1; + }; + imports.wbg.__wbindgen_object_clone_ref = function(arg0) { + const ret = getObject(arg0); + return addHeapObject(ret); + }; + imports.wbg.__wbg_getwithrefkey_4a92a5eca60879b9 = function(arg0, arg1) { + const ret = getObject(arg0)[getObject(arg1)]; + return addHeapObject(ret); + }; + imports.wbg.__wbg_get_f01601b5a68d10e3 = function(arg0, arg1) { + const ret = getObject(arg0)[arg1 >>> 0]; + return addHeapObject(ret); + }; + imports.wbg.__wbg_length_1009b1af0c481d7b = function(arg0) { + const ret = getObject(arg0).length; + return ret; + }; + imports.wbg.__wbindgen_is_function = function(arg0) { + const ret = typeof(getObject(arg0)) === 'function'; + return ret; + }; + imports.wbg.__wbg_next_9b877f231f476d01 = function(arg0) { + const ret = getObject(arg0).next; + return addHeapObject(ret); + }; + imports.wbg.__wbg_next_6529ee0cca8d57ed = function() { return handleError(function (arg0) { + const ret = getObject(arg0).next(); + return addHeapObject(ret); + }, arguments) }; + imports.wbg.__wbg_done_5fe336b092d60cf2 = function(arg0) { + const ret = getObject(arg0).done; + return ret; + }; + imports.wbg.__wbg_value_0c248a78fdc8e19f = function(arg0) { + const ret = getObject(arg0).value; + return addHeapObject(ret); + }; + imports.wbg.__wbg_iterator_db7ca081358d4fb2 = function() { + const ret = Symbol.iterator; + return addHeapObject(ret); + }; + imports.wbg.__wbg_get_7b48513de5dc5ea4 = function() { return handleError(function (arg0, arg1) { + const ret = Reflect.get(getObject(arg0), getObject(arg1)); + return addHeapObject(ret); + }, arguments) }; + imports.wbg.__wbg_call_90c26b09837aba1c = function() { return handleError(function (arg0, arg1) { + const ret = getObject(arg0).call(getObject(arg1)); + return addHeapObject(ret); + }, arguments) }; + imports.wbg.__wbg_isArray_74fb723e24f76012 = function(arg0) { + const ret = Array.isArray(getObject(arg0)); + return ret; + }; + imports.wbg.__wbg_instanceof_ArrayBuffer_e7d53d51371448e2 = function(arg0) { + let result; + try { + result = getObject(arg0) instanceof ArrayBuffer; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }; + imports.wbg.__wbg_isSafeInteger_f93fde0dca9820f8 = function(arg0) { + const ret = Number.isSafeInteger(getObject(arg0)); + return ret; + }; + imports.wbg.__wbg_getTime_9272be78826033e1 = function(arg0) { + const ret = getObject(arg0).getTime(); + return ret; + }; + imports.wbg.__wbg_new0_622c21a64f3d83ea = function() { + const ret = new Date(); + return addHeapObject(ret); + }; + imports.wbg.__wbg_entries_9e2e2aa45aa5094a = function(arg0) { + const ret = Object.entries(getObject(arg0)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_buffer_a448f833075b71ba = function(arg0) { + const ret = getObject(arg0).buffer; + return addHeapObject(ret); + }; + imports.wbg.__wbg_new_8f67e318f15d7254 = function(arg0) { + const ret = new Uint8Array(getObject(arg0)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_set_2357bf09366ee480 = function(arg0, arg1, arg2) { + getObject(arg0).set(getObject(arg1), arg2 >>> 0); + }; + imports.wbg.__wbg_length_1d25fa9e4ac21ce7 = function(arg0) { + const ret = getObject(arg0).length; + return ret; + }; + imports.wbg.__wbg_instanceof_Uint8Array_bced6f43aed8c1aa = function(arg0) { + let result; + try { + result = getObject(arg0) instanceof Uint8Array; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }; + imports.wbg.__wbindgen_bigint_get_as_i64 = function(arg0, arg1) { + const v = getObject(arg1); + const ret = typeof(v) === 'bigint' ? v : undefined; + getBigInt64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? BigInt(0) : ret; + getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); + }; + imports.wbg.__wbindgen_debug_string = function(arg0, arg1) { + const ret = debugString(getObject(arg1)); + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len1; + getInt32Memory0()[arg0 / 4 + 0] = ptr1; + }; + imports.wbg.__wbindgen_throw = function(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); + }; + imports.wbg.__wbindgen_memory = function() { + const ret = wasm.memory; + return addHeapObject(ret); + }; + + return imports; +} + +function __wbg_init_memory(imports, maybe_memory) { + +} + +function __wbg_finalize_init(instance, module) { + wasm = instance.exports; + __wbg_init.__wbindgen_wasm_module = module; + cachedBigInt64Memory0 = null; + cachedFloat64Memory0 = null; + cachedInt32Memory0 = null; + cachedUint32Memory0 = null; + cachedUint8Memory0 = null; + + + return wasm; +} + +function initSync(module) { + if (wasm !== undefined) return wasm; + + const imports = __wbg_get_imports(); + + __wbg_init_memory(imports); + + if (!(module instanceof WebAssembly.Module)) { + module = new WebAssembly.Module(module); + } + + const instance = new WebAssembly.Instance(module, imports); + + return __wbg_finalize_init(instance, module); +} + +async function __wbg_init(input) { + if (wasm !== undefined) return wasm; + + if (typeof input === 'undefined') { + input = new URL('asm-9dbf0d2_bg.wasm', import.meta.url); + } + const imports = __wbg_get_imports(); + + if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) { + input = fetch(input); + } + + __wbg_init_memory(imports); + + const { instance, module } = await __wbg_load(await input, imports); + + return __wbg_finalize_init(instance, module); +} + +export { initSync } +export default __wbg_init; diff --git a/server/web/src/asm/asm-9dbf0d2_bg.wasm b/server/web/src/asm/asm-9dbf0d2_bg.wasm new file mode 100644 index 0000000000000000000000000000000000000000..7f3ed1a672d4febe816b3053594a2b8fb0ef9a23 GIT binary patch literal 174522 zcmd?S54c^`S?9m^+WY*w=bU6Gxq*-y%08!2!<0;K$e$Z1KfNo{B&2|#R;T*&c|!i& z0QaVW+=R3~QgX4Vw4%ik6)QTlWd^LE=%8Yy)6mipN35t+t3R}{ia^UHm5_TFo+Kks_~t#`faU28{sj=VLFqA31S+`rl#KOP^~Z*+BX z-0ou~=svnS=6}i^mzpkIBVJlk$aHgbb=}@nSuFkLo4LgHb3DH3>PE<-ii_Obm5J0D zUEK;fZoZiclba2WW>JWm4YHeoQZ?3&lS|pS3dHzk0Y@3ZY8M`F3XgW-@g3n&7x%&T z16X7uRl1o=a7M82ptCX(2Z~1J2ksFsC$m=4zHu7 z>czRL^P1h?W}V)>aqC5UH*eaz|DydDZr(Vt`9SFD*igF#srMbc{?L@s+8SRQY5_NI zyYA?gZD4o)4q=IFJ%H;j*8w0Fav1LONPZQZbcVsAk3Fec!w12-Ppcl5gJ4~3To?lqwG z?MHWCw0G;o#DNPpZaA=MV$1&V4X5VVviZV`rl!XC?c1|;|K^F3J&QW_tCyP(Ol{n_ zW$*Y!7w+FOzVE<=p^i17%W&F_Q@h9aUASrMo{6mo_V3#|wc(-zA8DHt*lJd1}w5fRF-~eR~cb z+A(aCE&yI%WIA-@=$=FS zrmjD*+j4Ka@xTFiWolyo=8gMld}70VLTQA%)zH#H!hQMtVY2G%zd&`9v z?z?cqo-LaWY}~(fVLonpjk=++fT{v~&o;{m3@7c3?{Gv^JLR$rk>oKfmVcT_tpbjCZ;xS*m_{Y=KT{FZr&6sDKZ>^5ii`hd1CK@ z@ryQY*)lb?Y3q2D4v9v|h=|02Jr_-F+5^=4rY1rq7o39BZ%1cs4RqMMZ)*RR1DiJP zncBZ~--bN}V8%Fw;w)5|gaNsfGBedOtUC8k?Y;4u-Gx%Jx0%{3DnQt-e_JTDY$*Ay zQ*XU~_ItqSU%1b>M1xf$PBQW(k&9d$$7#AO8A)r2OI(yXrMW1o$8jT#lF>A3$L%!E z(j;CU#c{MUqK3F0pOxw+iq1|`_>NlQdMB;5Qx~=BX`0mQaeWmpMn)V}Ma!d<7RZ$F z7g6&$aXpP)%D*_OMKnOA+^B_=|52?T#Vb^6N+#0DOm^OP$fp-vS~Op)t!~z9T%u@f zSroO_G+xumYqc)_651uBy6kFEOO;VTmC?OMl<1}Y2`u}^TX3OA{Lj7F*apWaK)be`*$C`9;Vr|Z)W!m*Ta!hv(cyA(xHL}W~Zj22i@@4H}&>I z6uEwOD*A+LJw{i2-2QC*?&L-HqWg+_+5MyYCwEKo&piF9o3qrH+&{Q?Cr`NVbD!k; z$L`<$iTeZhJ%7Rd|Kt9<`!DXh?D^fvGw%J=^L@!h?@s5tgc z4<)y{Ta&+!KO29T=O0R5iXU~iy5Ddgawpvf-B;rK-N)QdxPOjsOTH5SXZKO}W88nl z{hWKu-O1g3?u7es_xtgC-Migi#ozl|fd2q+{5JoejDMQncO|z2NJ#me_-^;h^x;R{ zFS)n9JNXQ+zxkH<&%^T*@z1)u+z-1u-0l4S2>(ACzsJ4D-9~}usP;$V$HB#4lKC&= zgP(IJ;vbHGJ^o$y+wODm@40uncg8=*>!;jrxsSx3;O=?;f8M>z{aJj&|Dc^O$6s(? zr0jF?^X`B0{8#R2_dYQF`|cOrWAR~?e0TCk?utK;|JIHC>B;72+{f0s7B=2%BcILm zn`$-|=_J?RdHH*<>^8V*PxmAL_QSoJzyHr4i`KcQ-`d_yeU#T`dWk!( z8$aiEb)(h(JZ@ip`Q^rCJaAj5bo1CX{b=Txj}P+@AD!{vINk0yygTY||MX+gw5p4@ zr;|SFMIG1Hg@Whg4Idwyq3VV|Z|B(2UYY=A9OY^uJwL5X!-&=Il`OFYN zqq^=I>(_j8tREfg$38in8chE95$oKv(vE_vyHC=ueoBFRb*CPJwPrur30{*t-QqfV znkQRavurAN{^mS>+uUNXnU8AUppVw0fR<5;jBb!){lh50$;j!>)fhd!)kSU==7r7=gDus)e|$7mUMS3CbOm z;~kfddLJ(0+LA@Bg}hz@Vc>N1Hg9ZktAyFC9|M&!0TdMtR<(_HjM&@ZGO>W_CQo>6 z443#!I>=Rc;7$^i1l9+tbXo#5=zV>AH-=BD?nhPk;|1NXTledO?$`3Vbw5(~;Q+cX zeIdq`(onw*HeKkfgcis^n$%)RCbvL1(ILYBfJ6qaIxpew)P*HC8}y!ol^RkUpaWKF z9qz-n@Z3Df?MXAx$#x=y!h3}(ObZ>jtKS&wwUi9fsn;+IntKLq3x!kL)sMu&3B5}4 z2C7e-9ZT@r048cw`lKISK^|%ND-ZvFRu`ZNOnhIxE=U+*0x>}~8cUjTQC;8=@bYg6 zEAeF@w&ouSlGTsIq&5GGbLlkp-A#x4sJLU3Q7_7yKGkpl!#5FL=wqbWwbV%1t>dPmpzsA(*q!S{)xl(AwSUoj>IRicS#+ds*zfB8H$e;1Vo z*}p?~CX8yxa{BwZGexAV59vWep&oRt-aMj*2Z}ekR@qMI;o;(qu2r@t^zdl$M%OCa zQ+jy3c%y5T?NfSqvUsCwmF=V+o-W?#T4j4q56={Dbgi;IJN)K(Jt#$;`{MA!i+WIs z-n=mUF!veWC`E5x(wp+(HoZ}b-rPF;aEBh0qBpk>Kis7UrRdF_!w>i9K`DB3_wd90 zdQghqJfw$viw9k+H;?Gyf#Qv>Rkjm)c({0@YnAN@Jv>^x(Y4C0-soCo`;;D@ zEZ*o^Wjm>dr;9hbR@t7@!!yMjU8`)*>*3krjjmO;7xnPP;*G9VwmEV33&k5mI1*LQT2paBMIK#k0VkW6X}=)GtLx>tS_pQ8i~;&Hi&jG@vUyz@v55v z@pkxHddN+N@e55P1sc@Rbia|i%gAO`VZO)hwrR2XI5CrFfQA-e4WmKUqgltKw-!MI z4L5u~BRc^Eo6f}e#H>%fw6cMCK7-~6ILW5{oj}av1PVIMM>=9Hn1F4>%*AN2gUMBzry9p^#`2eC%YUFMdO%-7u{jrvp(wlF%&UQwGi=*H zM4FIk7Y%G1pjc?yLC|2@F<#6w?P#s3NkvfMTr^5R^e|c(Um903;svWG4a}-U%tW(? zW_mUFvlx6}C>{zkbO)w;VuKtLCm(Anf$^~^EHD>$Oznv+@!jUi2J2iFvJQ+-qeWZb9P5l^QL}rnEZyRAHt-J zA|UEjcLsrkLp)SLz#PG#;%$Hh>IPtp&RBt>?t;D)DkwH$s{x5yY4eCcU?`7+?hz{H z^?6aHx zbNin*xK+oyaw0tx!^Nc846&(kA&;|`k2NSbc#WUVw14RPPDI(a_ToI+<|Y!cE2M17 zdS}$|x5m4ey+xVLz?8qA_~(E8gcOprz!o=3N5wo`(8|Rf)xP)>%0%NzTN^Ip;iA?_ zyeeF-4woCkWeyFfmv`v8X}ZV!);}Ii_qtr4=DLLIvs{;QeSs?;1z?=+oyGM|u4i+- z2i8lnx2waBw$?}YnC}J6<&)mBZLT-Qbvf5HzTR8mo4rx)&rK|QD0KQ?RrkIaBrFGu zr_VNclP61-MJ`Ee^+vNb((ZJZEX|gQvg_R1?cKgPpZ!_ce~TAVpz{qPt`IJ@qzN`? ziRe%&{Va8z&~xcoRtuC>uNj*CkN)I|$gj*ki(97Cm!mD+(LK-q1Ws<>UaXz3Yv-@I zs(Y?~pK>f)EXUe*zRV{(x?}#Am8Z2>p4VEJ#M2}gftG9Ps{+CbN+UjVx&a58|3hV3v}3b$;u#48PZK_o>KkS9AMfxIK^CC&F#c?Q`L_r@n8(hr(qX;o09V$4eby({kZ_58+y8Ks8Sx&6{Y>)h2+LhIbEv6PT7 zj1r1y`nFiGP4I%pr9R3t?AAFw^d{UvE?v@=kajKi`Gk8j7skZAL()~;#}`NMRqkaM zM|bJkpGeSxQQjiY2zhST!+8_Q+qu+9Ym#=9`_&W4)m&;MHAwny?q4&JT*@UODJAKR z+`o1r8Rr5C)^Ry^oBq3R9h*pU9=~oPS;b`ysfdhH)upeWNSa*6NJVOu%IM%HXXtB1 zS2`}bx~;rve$F7{SM-@?1Qnc_r`(FrsW0B{c#Tl5jDwvcJ=}B5Lkk$T=9n7$<;G- z-4S<|V?C6^p8TgY*9ju=HMKaW7S9^Acw5mTEMYCq#hqmfTO4h7f_QyRE#5$b*`UF< zhaTd(QU`D7WD8qc(LN(ae+59#M@ai(4k7#e1Z=MDEHx@{3mr>*$xHx&ozbtILRZto z(gF0>2I%((=&$Z9SqS~Ic4x)c-r7~Pwq(%STS9AZ4y|3)=`L(7Yl}Z%q=l3T3MK2+ z!b)8tyGv7_)G-({mCSzCNtq?Gu{2WSN=#9E$@-|NbjI@aQS0IeKcgJhHu>tv*pJ&6 zMc5<@o-yV|ufSB|jOc zIM6XrStKf|&VC`L1}3JUll-)5I9^j^XFg1Jw1Qx@GX7*Rf?I<^Efs2RN7KGD#w)}6 zLa>3U&d&Q&&g!Y-8t0P&>{?wjnW2}Y)5*WBAw~Hnf(d1@d8~$TgdZtJ`!|| zQhki;hIY!@Ro^Ps@Q_-D2^5;?BLO3;tz%}6vR9*_mNJb#&1_{*z0JIxt?4oTfJn=#EX4rT z2J28vep2ChrMV5zN-MLocu)nsRr$(dU|K27M+XhV7e|mTr##p%)OJ(vM=Y~>F=?hl zyZF5ZnLCLRoD$lW(*d0+=_0j>9=@#Wl#lYGbg?Smq%o;;Ww}Cb>Y~BoX++JZhCz!# z=+z30G}cFu*1MS{E{<$CFp`9!TonqbhH-yS5O9W(KsE~%Ng)VS7{}!=wxs=N=f%;g zz`LV{S4K4$&v<$*>FN1NbAll-_3L0f2%P<*@t#n=dBG3^s!Hr^Ln?!hkZiLqdU(EDQ*mSJ z*OpT`p}!cWz;!WBjl-WH49bQ|U^IKv2zYNXAfgxKx@hI~^IbZDjJJf|IzO-&Bn;LN zui?TlK8mh1(b{Hie(9C@!(+V|9?vibn54z-z~;L&*nDpcHs7TA>`Qyr?Ef|%n#C2M zO(KKMSJ^<=d{S(Qgt)Z%WCMYQ?E4{-yIJ=pcCgO*$tq@4+f4PFL4v|-ZgXwsRqAF+ zH<@9n@Isrjcd!IL80&i4sna-3bOvbK8ql^W zpl#e@B<7*5)h=w3g{=*n%EM?2rep2&rX!0LU`|U_VLbv=zdF;=3O1SLQ+`dqUg#jK zH!#dtRLkB~4F18cMrcm49TB)-JK88z*p4APg0j$dd_L%g`k;^*oQ>^hsKR!Xy(tQl zg6;UO!Qj8ZwhwfkZ`&_pg`=R=LTj(tE-bf&SPwLY1EFy_E!ITtwcFy}Yh)+~+AplH z(Jm~5h4qCAcGgS7pcA9+;O=q)kd{=8kw=_6VFEz3(kRsDl3{ln6|Kw~atuuXSj$kE zp$PybI-y`w>rSF#qo86#R75{R1iVO^0LTZb2>{B*g2_VFngEa%h!}Krs3>H|3lNAX zSVQ9{0}OW~0M5s&MB2m}OIz{Nq|EtsFh8nzb4dA)7xzw{a5 zLJfAdv-aqG<>PqY0zvJk3P7SR$caM>wTze|p2)`qK}y$gfi^g8i)y5ua10n*g@B?( z=MMCzn%hek8pOjs6#2T)3x$6J=NS)$?*XqE55-g-CmRpNOnaRhQo%UmcoP)MIqJmP z?OO1*Ui>HnE-AS!I@t1|@JR|7A&b~3EJs9Ij!@?wiWzj4&U1MG!5X(BM9|*Ba;+9W zBL7~N1(Go2FZ|7;_4wR;JhLQ;k{AG3&AO^jz?v`%YeaH5YS`&$7zc(m!RNOMAI?`YrAya!}_u=HZLV%mU!2bbaP- zt(82jw~%qpf~Wk8vLc_+>kH&beHwSz)o3q6|4a*y%+`Y3t>}#)^v>PqhCi>v95Qm?Q`BH4S6cjS7H z?(bJV>8qp^F=R_B$_Lq!M)2!R>bOD6RgBHrj)|PK1Fz5-*+b5BCMsFw2W;(cFGVRS zC5mO+ZHcKQDUT=Md4mM`w#FHHBD*-=b?M{*P7P@D4kgn z=9GdX$tD;FkSjKTjKC9kQ#82LXB2`ZboWY(&V7-h! zy3-`P405ZKx2yq}GiQ|Poy}{199vHk&La|zVwXb#g!dZ3hBE6a$?>vA{uTn^-rmC} z)fJjjE=s0^%wZ!zTUsIw85O;N4MhDp$(?}6w#@{o+7N8mksD}4cYxR7jyWanAqb}s zFd4EZqcCwFLE-cjz2l2n)BT9u7Ci#*b_Ke7v zu~i^%aqGgnO|y50S10!qT8dfL zG`%M_WTxLT6Op-mpux!qB7j)`Fn#e8)};TU?w|Mo!}l+1_#QFr!=MO$z62EZjesUt zPsf75G#BECr)uSWwr;{?(0J77+Y+1Mz%vq=Hljt?4-dgXG-7AQcMd(+U%4&6O_n8K zDzqhWuybOUP5OjdZN^f2+E(v7${8Gyn36cfBxlr=)q?H();Mc@2U^RzD;Rv zqpVmvcx&XyVIu^7JG^z&ls)OF6RuvXPYjHZ8A59U0EtPXxCv*NE-hNW>u1YR zMi`e&vsa2pFT%~JNF+ggYS@+PplZM~id5`0ij0VyqoUo25i@VhKp_DxF%gBHQJ-Gx zZ-+S9=hdf71|AE_g#ja@b((gA9+x^cg2Fi{XZZ;n>dY3e8EcWFG$QYVyA**&xvI$^e|fWZK70k6$di@=<+2QX9miT`Lcvt*Tv zTlyFAzfrea{WO*^7~|r}Uf*4v$K3|88mO6Z=EK=O`I5&`TBaV6cH%}r0SG8Ee4|t& zVPJBTn3LOrcjVZ#@n~H7!MY27o@2_3b~e+_ATeGatzj!DuVep%?-f3>_q!qoM3_Tu zXlAbwkcFI{;!5l27L2@U|8g|#$Ne8gdHX)UlmKQwvTH1lr!S5)v504wu(!8mZ{{bx zt=GnG(+)-%lbz=W9?ulHn%E{=dXC~VQ7xAz*DxmVWm0;4T z4k29D8Es=i|98$2gf7@+tzgj%Xk+N>%R-_ITZwc@`wn^{-9{__=}7VaJPM3t*O*qv zdoJ{Nhs^GRrX!ZqLFExGN;Le-@nQOp;X2|!6V2G;YI#;h{A1N4-lh?MF5{21&VgW1U6zw>THX)edD$$dzi?5^xU@STWOWMh|#I>;I^0Jciz>el&qKB zEQas7VrL!oN`rN_#S|i9&Q=>D1jf?axnw7vd63G`jfM`BDkp&oSjvcK1EIrB;lt@+ z(+|m4q7jinr-DY+p~01f4UZB*37)1|scMr3W)u?^S}>Lfftv5LR$*Rw5F)W=1pP)w zNERLor7KD*HoQhVv)5Azl(Dr%w1E(WH4lfiY=q8TcNMWkB~A(nC)h~n0#4*=6Wh$X z%LuRQE-(9%2+*@EPN~YaLD`ll+tPX2R3zW)w#P$qpH32#G+7T@IuXQ?~YaAj17aMz(;(f9bz*LTpAu*fPEq| zi&wxdQ5{=IpHh}Jn)-K1%87cWuXj1vJ7_HlNY5Qb6^t zHr%{6xhv$aD920>$cK~=V?Gf(=yC(V8NU=jumc4!Oi%5Mffu33q4+Y@QBcpy%Zdx-k&{#2 zYAm$36-a_b!%m5dVLZ6D4(!lKB%6{m1Cm1P+K~-d1$LGOQ%&qQ|8W>pIv#9`!ajng z&cvJ4f)bJcej$(TAEvPAJ(&>1DEq&=P9fCTLuG54hWV&nC?~OTG>lkudBCdaZ#7IK zjLXa=S!Kp?Auj>p2!Fb|G?ii5c_)~JUTHE&NnF0VFhd;J$UzIHC3*wQPK%$`pHr;k z)W&~Vb<_QkLWG4HX4)lmX27sOKmU)8zmTxCYkundC&p|{q$L-%oQ^6Q{A)J4Bi;7k zIZkWcdbitw!x4f`)aAn4A%@@HUFBJf^#6QU#qlIbe<%6K72UHC{1Kz*Ut#6NjJlQ^ z!zI{@1W+x23~b_tMj3VYF}fjEC;FE$pl7ssgt%2f6u2nzOMBiM_mlQ39< z=3vN~ARwAVn88uMK0K_BDu}$P8CR6e%2&D03=WPs(8C4UcS7YRP2H!3LB=(yb4>8> z;J%|Ys9e@AJ0|tdNOiFMZmL73O!Z#2K4*GCsf zy|8ye!>Fn%268h+Rw{mVk$&J|oYxg9Lq(|{tLO&~*1@d}dxAI!Ln z27KJp8ey%u!e~IMaR+GS26YCP3$4;RIYQ2bh(v{OQ3T2e7cb23N%>-l|MK7k=VOK0 z?3tMgZ=D*WNvy&ps7%MnlOTFv=$`9zl={j$($J!i4kYifLux zi|WI)5YuH)ds)@PY<@?Y)dWCA|5EJ6z^pL`X2DcN1u^;(Q7!NT=p)d?O)gH#AQ1~m zDeG_WXG@Y5Je3`&Mosz}iW{T9QJrGigASSrZ^ zO9kDkfK#abjfzptV6VCc+`9abVbrfHwl%9YC4 z&eCdbsX(Q?uDE2CMV{kwbkuZ18L@{KpJ!O?bTCS!_YqTb(?DWMCFS&3^e={HgG0oh zH&epU2QbD9SQAGemZ2>B#yn;A`9Vj5G7GH6sNN|n4|YRGyGKl}c-Nl)PCE^P@aC=T z&DhXPB+9I488q{d3BjJ(!Fyxj%4{&}O=W{O-JF+&!4#_3pwfcj!;>j8+}pUdtL7T> zT@(%T7?fk!Ft)7n(rFJlXmbE(L033TIfTDz`iY%TJPplB8O2R^S@#X!A4)Xx&W=6@K58{O;^arF5(CN^!fY|cjV*i$ zBsRqMSmg-y7M7uL4bZwB4_1NKWJUiJ@LKc1vm+pfz-zq{c=GZmcyo_WnINua9k(-(V8#02wT;rK>ixjY!5ncRl$DHO3AVtPXq{Q%E3UGt^4>K5GUDcrkoe=9+Z z+A%`dLxafxszJ*Sszs3vLluy(P$Zz6`Ml*7Jv(E8j>lQgZ$oGW!$J_;5O}vlq^Q?{ zFs$bGM|3zySJtc#4&oU1JCuXlrOK z8HV7$&CDBO9${rfFMS%g#|}trh{?UI z(Qsg;r4WmJ2@z3Fyu|$^z64h^u?`&*haLLx9yN}mdEyW(+-Klh=e8nlF}Y;`F3VW` zS7pn+)7pepwgNNHLXzxqX?RjR63&B~+BX=eX|g|xRB>}{zoQcgb$hi1sB0yFsi+Te zcG-WinlW{-AUT<#pZM;L#-9W+_~@H4Q82G$cg6~r05ER8XgAqCR+M4UPHfN)+3t-L zdik3UXYY-PXB)YZftGF8$NbC5VQv~6BHXya7$046DL@g~G>dOp!Tg+e#%5mG5;Xwl zapxG$WQ{l&6wx72*R~X!6)ls_BKhFV&MsP#z9~dGR&=2tL_t&i@B@jWzl z=5ao<^Kf?rday!8fWf^nUTN%YbdfdDuo{VXlg9_so*5i_707{Pe2ma(lWX3gT z4BLp>I;I|?NY&tZoc2sm5D?e%CBRBBNC-ouv-EVSC1KX1cJgdzw~1%Fq?T~O;yQq) z04l?uF5yyx1IyGMdeBKbbg&2F<-bUK#23uNRMAd)0ITyoGjC_W}qASOIO&oeyNca0J6OD5}p zEtLsxn{nGI}Nz`2n(0C>cGB?NjgF<1u4My91LLFa289~ zYDB0+rf9fhG#fRxECeTI%7%B4OrXSd#xh22Gag8xrP)! zF{_W`Ef%ss7e+lt$?B5zWzmYOz z=HP4u#X)9>iNJ0n4{V^+y?WQU0pa78AzD*7kovR>z3;1VJf zorZ9{ikgBl=y)Rcmm$4ursiNTp4lX>HHCnC!Yf`OvnD)k&w2L=*yM)z!hqS9dC;-{ zgg*?+3V#(!PJ_ROUwRp?M>tMCni7A>;`pljm7#o5)#Y<-}Cjn*`XkLMF8kh|XG=;%jb?`JWTL;Npz--eD2h8-@U}igp zc;Vs**Zq7*>n#2W=9aIQaMl>7z-`(OF0B$>kIJWY6$BTq;t`WmMkW&qhAdgs=G~{L ziT(u$9V+LWk;A5lM-!;vX?q7>VG8tO-e`d4vRmUh-&r`C$Fr8xl{pd~`UE)<;QICge%^QUf+Co5Fp}qJlt+0gY;}-o=sk{)SyT zvm^u!RQ0gBVD)en41$eY0j{=ZXRW(C#5lHI(v28MbdpIfr4kNF1UcCo=&>zTOaC%J z+bRXqjhdq$Jn3P~uXmXb73YmTrZBamL*SxC}cH1eh!dh$h>w0k-@jA9+kYkTzQYoz@FT zd)T1JxO>nBgbKWSOYnFlbtuRe1@smz0lpHP6_jGmhRj^NV+H`NUQWshYmQ#}Tfbj; zxyrgmf7Lg7RP-&Nom{V`Z%Mp&f(Tsa^QFv7_zo(vrq-JzXiNUEKX5 z*R`RKa9+_zI?cT?P|gkAeIpmdZ8Gp2TqVvN4;L`P%{u75%IG39S^LW9eKfvG77&YIs4zlizRTNp`R=ewr5X|2m}lw(`Aj2s6b5?LxORc)hf&I zQn0~R0)+T-vNUW;1LtSUTm{OS8XotC2JgOcieXD>YoiHn`Y81H%#2pjnQf!q2AF(`D*PZpA@3>H%BR13+<%;L@r1`Ojlqeid*=3)sCUKDW_K)xV#$(|Rh67QKiC}R`JCyU;~%Z{&W1&L9F2?Td5*(C zwP1^12HTcGvh6L_zKd~dPc7}s@A|W5dU7|aVeBQpnk@!vd?2playdU)k zZ|<*VPu+bM6Sn$3Y_ptzJbB6ii!K9J0$896Ff{8HSh@hu~#BMaA7OTzN7i$Qj>4_$`AEX6nL?A^~KO3k|(1ZfBmuO zvRS1to!$XuUgmL@l6+PwZ;#ntRZPLWevmjeKDGjA%pzGeIo!t)A_FvU8OB6TV{dT* z4^SiTsAs?;9-vr4R3t7HUaZLReyJ8kDRN!~{1B{82@s{jco-_;+4PWV%~UH!B(C3l zc|S)N3groSWAlC*0-+j3{4 z=%kuT|G1ewrq%osxlpZQ_>A$BCuAf(A}nt8tnd)ZsV!FrnOV-GGD{v<^W}sM1 z2m{A6m#YU${PCTru_ef2P5XrmQA59+*+w^)0VvSz?2c@cPqt-ig!wt|OHgrzDf;Gk4?$cL9l4R08x)!qGONQg&8$3={Cu*MJoERPI4Q13N*l2CO zvg=fi|BZQ-l0j;EO;LBK3WUt7YFqqHnuD)tuGt339sU@noNeZt4>j>E%qpoAtdX`dSoNA zj0B|FoFhtQOQGsQm*!11Cr7?f8H_S^icO7J^aqN2({P7B!Ndd_H19 zmZx_K5>PAR)E&YgR9h4=54@N1=OViZAD<#@MB*SMmy;DAptOK+s4qXFkx zj#Z^e9DDkZ%^J;)W&I0d)eVH0X%nrjrE-*@+y`hvvoUO?L3%YU+%M2l#)Ygn`8H;G z+>MZ}RtEFB$R8sULO})?6TH8Hp04Jpa*~iWI7yUswhaa9FtsZzikND{Ac8iH&rNBLSu&t?z#)TnLx>pa5Wt;xuTD~}1qCTr?F;CHgn5X?>E3V5U zpyLYSwY29@{IcFel5k(eZo$str4ZWoNo^7Eau-vf(Sgbl6#WU8VUP@Ye;d{VkDO$Y zKyVE&Wg!vGN-zpZUx5x=oBEh)w@eoJMLTtWlK8z)IA$hffl{cqb$uQC$IS)(x=D&@ zNHhg)$PrH514htrm`z=#?Qm3*kHqTA-E#mRuP26Bm4X70SB6Mg08V|ifER8SR9Z88 zIUNMxP$|lsE~~QxKz>QVP0T73rIk=dXHCq@@Q5<7jHwKc3_$RPcx`T9Ak2dz;Ec0v za!5Sip1`4KZ`gAvWzY#v;sj=K8iGD8Dsu&4arRAtJTSWuX9L;#=Yi~8p?&Hq|+%4*q04ZukcVAUvK+-QltW;z*S^MW%WZUc%d_-+LvhyU)~A$qgdS# zdp;$0K`(^(Jx%-Ov(xYEJ#`Dw%;^FHloD>^ucl;bKbZtVIF+MNbSZ>AHE}HCLFH3L zV$r?U8;Pi~w&dZI&|b+DyRK}gBZ#tSl-|%NJf>cE2rp67nSKD$({sKf+7>J;2 zp?y@`3Iop0T>T2Dz+bFji#c{-! zWXip7th;(e9~MFGO`(uo8n%ycrDWIm;z_8m($EmLkm&qiusoAD@CbGpD7ArN1VgG; zhWl%ChNA1L2z?8%)c19sqOOL2zet8;slBrlDQWnM3uua1`0!TIRj?{7wvytHMRHbE zx$h5hVL7!W6o1!vcW6t(Xc;qaIaca3165f;SHxh4x0)<6J9p5G4~)S2WaS%naQ#4N zN)}}_M9Hm>2Ak-TVWH82MrcXJOQ8|x>#>Z7m)K}?1}38M8;!}z!4E@^Eow#==uHt) zI2gCtwND_!2Lm){D^C#(U-l#PaXVkODP+!GjFvlS`X!=27$hgWHAJiL*a;a+AD9V~ zgTH_bX>=;DYz1slv`!(czX@q2Ey9F8}Y~S(l~HhBx3yHkr0+d(cN}HN@4-rtfWRkqzy>+hYSL^In~>a zCP14jfEydD2;e40@w=GFrDlYRWa=NYott2MSs`}Y#!XRhSYomtFUC0~zDjjlaE?$< z{d8}@J;pA-ASwmrZro$pkO*uq_(EmWo0*b_G)W>#W>!@8#+R^w>+ z){Mc)86hlTqgS+d3XekET~Wbi`%?!SZ_#&!AV{I|(wI;ds&?vyh1lNWp;zxqvKJRQ0G>#zTY!ITQday1}Ex87f zL&+~5(Q>b+MS=_oU~Rqt)`kU8F_NVK))o^$f-f4JR{0;5%D zgNV^!ph~cZWE0~;bI6FX!(HjZ1)<{)taFO4gTT}1HrQvWj&Md&J!m$8#V`3i19$uHoRz$>){ zyizFnU<;H=9vm)I@*zX16o5?j$@@Cx(l)S5W zEF4Nu@j@7h7UeON+af&nRVaB4hv-XiG0>N0hH4mubr$H$WO04T;n2hSQXUz)|H}H( zw*SCa!!4bvFST7Mn?O3ghT$NTELx~E9pPYs@3L}dPLGAH_0ckU6Gk+81uh#tNoOgi zCzQJ+jTg&(JJ>+;cJ0(l39?)rlWEvzs09oH+*aj$-LeI(APF*~Q=-OJJ`3|S0WR&G zVTiPOE$sFYtC*VA&?WI0+A~DxD|pjLF)vktlesoaY0$#NSBnFufcy+rWMO5}T~@3r zB#mIxENA;ljh5BU@oHbGby71QwFJg&D#tDMDUb#FR2zL7K`o^1zi7s>oIZ#V(c`6e z+fAP7Phmo!WoF5;*e&?pB)&Yf<@yLe6OIeNcDg(WPwqq#9{Sh`6r5JPUgA1RW(T8K z3=DT#yTpCL9Vfd#LmdxSb=+$`&4Sh@YFVL{dkGl zQ~Mz=^{FN9I711v#3Ci`K0^t#z#=6cIztKc!y+Y~I70~qDxTVplV>P_I$NZ~i)Sc- z#S$9_qvb4~f<-h{qD`Ic7wU1dnk!?d+vIQ-S39#b=_Vw8nxL~HS^%S=N8FG0_>h5< zRxy29)ZnmH**tt7)yYLK?|eOY=gr2%yOvPWOegdYp@vwf^$;UjABvG|&05Y70gx2l zdc_9JT7HWF(C4)j0iY^RiIJp?x$UjYEHH!!0IgORv647A6|)fDXl2hK5e7LO5ZpBd zP}VGfvZeq^c_3?Mrc{dqWh(`QT4msNVFV>gUW!`2RmO}w)xy2`4++?`cI_$7!>ZyW z2Y*7Qp1Ew9V6vD4Sa_?(dZcTEwo$N$8y?Epr>db$_J-j1)t3fUoiOaQ>8oMciVa^0 zuWb746p2X(dzQldKrL{#^w$uLsrUdEV(KAe!sxH6>{MjjPGJq`OZax0MpZjyq0yj7y``>Z+;v z)mQ@nxvQ;38*D|Zs(>d{c-j~3KMGPumt(q+OhXt}10y1JST-W9DfftN4yYSB!9z@D z7>Rw1w&Fu>?V_|Tp^zPbsR?H4i;F{Otxz=dFceyw&}8|h2Mdan=DNzMT&}vlHTBPA=7=9$q&&&W#NuTsIwNsjDahX`nrens_Biiw!nQbXB4&5^>jfcMK}V zTG__e4G%y)*>xviFW#Pri8^7UqSp5am_KUl0|mV;MuGtUJX^n{uzE4YZBbuKg~yNh z#xZ20er(p?@_n~94{M=fybK?fJI%`wIIi^&f^R^jl8xT&BimvGeu>?04iwX zoKD!%IA_(?=dDaf+6JJ-?b+FWs~X~(U@a&{f^u47s?3{GWo**NiX?2@5@oeMS`xgg zmWJ>Ul;)5X4OGZ_h--jhEbK+N7tR@=%(p2=3At(^7e|Q|xoQPLFSl$|*8zu)bB|Ca zIk=XB6$Emf=$P~BG$aOR%;Ekr9i+PKJ{xHPmho(k)#L=kgNSfE5`eGnqxm@=DTGj< z%I$chwvI|7ZC5WfEL5y;mh5AxjSg{F{jSh-Iq?fEgHb0_DSEGTQAGuK(J0W(^(Q3b;W109op+3`L?Lt*rqYci71%j&jHk)WHJOE0S;Q`zZ z!UIG>3lBi!G3XHkG$U2P+NE}GhEqF$&_DEa8Pj1@LOtAnf)ooqD#m|_A^4h4!!T#9 zsDpvQdz{U}f>9_QB98<_i0Ls;Ny0p|t5Hm4khiK=W( zCKGK~z0p>a#orJQw&)u+J=}&cYU&Fy8CSw4 z5(#(W*ZGs8!lN;BX~Gyz3l1fVdIo_*!cX3~k4Oj14F3(TUYZM3x|A1(-e}y ziw>#am5(?KHuE|r=7zncbz96W!VqHtV;GgYSaC5hflgLEm8z>;P|JAi%xO0mte|jx zyW%viuqm7-C&6^MTwyV&8JV~gm!`E3+(c4U9oXQuAAXFxK?Ifsi{p6Lc{6NucQxuBb|yzn9g-FxV(~QTG4CRSGi*_0`{5r5G|JkSVWf`}b;bSB^{; zEZEKlg`p!Kgx7_yobICY+y~c0zjK*A5|UHM1)n?-jmSG{CstrTETMBVvg^Q-=G9=o z3woJG9tYh`g(WHy064KeGSG;aX>_JJ6M!&Vt`m)-wLsC(0o+P77{$N zT3j3EWav;Js-WOwXea;$j?iaz*Y4t{bD6%H2zFq}e!?erI6~^njwDlTP*4~sVh_x} zj%jJku5c%$26pS}z~D%8$5YTZj61WVaDe`whCAuOVcZF6R|sEM9+qvg2tI`VtZT88U>xBI^_sGq#RzpnW?}^!5qeDlA|DbRfu+3(!`SXjA z3Jv`PL4}5hXoLnc7Hp zQzmWRe6Yun-JIOiV)$TXHAgn6iO@R92A5#RXfOf|OU**MDNkfUWjEi{Un;X|sSF`r z*|dT(GzU6EV=rT1}6HFAe$VG6lUhByk+>>Bh+l(YUUN2;cwOhhrJ*{i`E zD}wRpuOUOGA(*f(bwRYyVEb(hYQEZK&vkmx?4i5CMUpSkAteSJ2lxp%EJ_Vx`ot2r zkZV%Mx3IOL#D%^?Cb^1jpi2a*jO?=a^)vJyyGl5h%L|;tAK?pGq4#y`J*RqEm2edh z$f{%DvfiV=^%9sv?*Xms{jfb*E2&~!M_ofSn*TJ9ej=+FLtY$!giSQciXVDf!U9B% zQ<~a@=0npc4lyeqnc{eqdt!SMTmOAMEIFa67c4E89G%BY*43KDzc^_&UHLG4t?Quy z_H|eYfv7r3Ao6pZk}+b3(Z$Gwf95$m6J^m?&)O@k?445T8GEI$#Zz8AVy`sgIpx*K z=nb*d9bCqI>##XgPs#MSWzxv)=Nx%Zrl;ijgyoT46aK`uGWg=`fVpt9?*s2KT+C{W zwD273Z5CvlppZ2lnyPq1EC=>ic+|G1n9tPsCqBg7h+&K{a7*HtpLwZ#Ac2hdXy&DM zEVZ*B6^oO+*@9F!lhn}#sX7KKp1sDqW1h1zV&9g2N;uB}7f9dv2bl4^-oBox84zd{uGn4kx`}_C`FZS3ALEZxi)6lI$q}=xtr=)!4QetS8Ky~~ zUg>&<4i*W*gfhG@CYQMIT9&O?Bq)+`;pxc6*whNzfl(z`ksQ?^H9Pb$|<&@Q(m?d+w=?zl(B@xbvsLLeU#I0E324-JXFCPK+Uy= znnRz~X9RTYCe<4OZt~9YoOz2%hZY&EJ_aeQP~MmW4A}CH)o+K`3DdHwRH?`qdJQm$ zp?!}!j?_J-6xd+Oh)sBm4sx+|5cFd)Fqi8fOz_n+gPe7c1wcj^+E~G-0I6Z3LTLny zf?4LWIqd|cQLZkxT<`!31LT`moneECnq0*Ew~%^)qgvWus5uy1-%rCan`#zNk+^R@ zMKYGhRkN)W)f+4dR1IG#)69w#x^3Y=p>X+|qpsv}k~Ap0g51Crsrt`6x8OUSVO8W| ztS-Zpk_BN(iT@YGqGDAKLgDne6z!QybME+DLluk4rz%g4MQth;wMh_mi1aaKs~JBy zcEyLVV#B78kPtp@9wdlKFb!k;Vi9RJuXA}*<{U#&6_NJupdHw)BGUAQ7h=sj&)I?P(LK%AjZq%bO52`J3_2a7OKpl^$xr4RaG3TQ(vvByKpC@j^bmMMTKT?F*CKT*TW zXUvZ8rOxC)Mp;-!05%>7;Pi8Me&HE56=NaX|A)WMqBp|5WuRUK`-qu)^VbU_FGB@f_Hac+44GN2V`DI~nqeHkl*l2$xU-QV@M zA&#Z)pZpu$<)raN^0_aa2qy%Eib4xi6evUP* zxRZ!-4K}X%F5_0m>FjyzzSLiR*xz%U6(jLU>i^^MH-*D%h=gG)K5M-lS!{KG^I?BT zo*%vJr$X=AXw@sKrqfX%{-@sfEhiWh(Z~vtZ zG@dUrlM*c#reZk6Y^j9;8l7IM#Wfb%J;4?+msH;{?kE23hdF*i14+S2)Owh~0Swrz zQL0=c%XE)=rFCQf@Si`X0YOFz%gj2m+w0T-{{ZQ^ngSMkar0r@?y26*>W+aV^pc9Q zYl6|Mj6lKkQ`PxLin>9fs~W;_q22Xek$GWbk%&?nd?VpL6nyzSsv@Z1yert? z4N5wyb|mlZpbOZdNr{-M~kmSb@F<8;yjgdmo`o2JEC$Njw} z%wBy>jvehsHhoh%)J)(GXeu#<9h&VP52bq^v~@ryjI0ZUXo662U_huLNk5Asl)4M% zX#Z-Bz`sFs@np&Gx(543I?PBJ>?memxWF){QQ=`ifOHe`hp?KIhCqF04yN%N#aa;G zo@JI-n$&epBt%IyY$XKk&N38yrd^wuDueY3#6CzCl82O-lE^3MFj#5k3bIw}xCg)Xp_WR%Z_ zsHl#k$Z;L1B)9(t1;yocc2EWVQP{)3;Y!$pqKI?3Y8YnC6cxv;1#%_Zx1b<-@hvEQ z|KjoYAVjaTxBhwEe~QJb@O|_seD6xZxQ4)hHBHI`7O37PoI_ubLU6N zL<1#?qX@;95v`dG1E0~rjO+#PkvvH(jcL(H7tkWxntXs{mPj7AZ>z;41>Xj@`&xQ0 z1frlXjxOMm%j`;2d>ycH$-~oVxOB=$dSNQ#<2S-_h)3xY5d!9x@&gb0329$8WwwOHQi!_I9qH}(Vh%;OS+GmMn(}OlLa2OtK z)Utk#TAg8IfUh0x3H`A_z!9A#08N&}PJtty2M1%y01gn(sv#>t2!@>`V>qJqHDVmY z8xIy4CA7r>AGW;Nf+`jP1zQ%YbihN5rUP8U6FFmJy5G^b_bEH^ky|MroH$TUk(%;^ zXW|l5SpjE*8p%4SjRLDcAI>*z*0Arrl%TGX6Ki4Lj|2w%{?xDkbd%RtWZ_te5MomHfnbCcjG%KjZ= zjqEwC7=|Qjl$*$^ExjDJ-p{}d{yDTw>){c67&fNTI$LI_%qkLx%E<%*_;5YvYxo$M z4iY5>(^#ihLwho@vZ|KVF8sz9i|CJWxT3J=MRhI%O6Ppe&r33aFQF)_Boi@J`Zl|b zkj0BXelH*}!_%HL+r$Kl+0~LtB#NGzt{wDLM&qETyqwolVqzvs;N?&#CiG!jIRI;# zIRw9~m#-Rr^ARorzj3L-51IzM6N^uP$)~YkV9@G9Nu5N;9NWPrC3S{(DA|H(iOEtE z8q%Z&^LeL`pj&NH0NVt^1q(K4Ly<#7GYS`iMMB5>7;y3CRMSLuRDdl+i|Yiw7jP+)jlj zNi84%7KmH6U^&2r0vCYDF)c?wX;H-@{Vb@W((e_>ab%OI=CnbLK8iS(Q)x z9iNC;nAAKCEGt2uSoTDsarW=CLh?7(APQe^P@OeTpc-8%zA6IDC`EJ3 zv$7j3`7m|CDS$_a9y>pB2q;Dl&iHW-)<&z46Mcb3B{an$N@8=1j^n8BLxh};+z@h_ z=pYcJl!Yn8cPntZFx{u^9b{1@;%IT21w%+v4v-8f1H)N}RtQy=YAcqv|1^zTMZ`ww zt1UN)&~f-bWgJYym=R1#rQL!G#MJv(;7VTjJhK* zU5nM#aB@H1eq~vOl6ezL8sZft$!jn##NOlr**34eAD81hxb#zv|6-rp-uD=H@^CX( zOT1KJgBVZPMeF4ny4g^2(0mqjQGdA`W_56Bqr6Qi12Y-}GiN3nyf9#-T3{rzS*TS< z8*myFT%_-ZZ~~OZY>Aa-Ru+eYumO{(Wam|AeH?h?3#_(8*ajLzXRsWQ^c-wwdp!~@ z2Z&F?asXH&qv|i015E4jWl*t`I1iRk@;O0zu1??ue<+{7*^ zhFn@OU0}vuIPo>X!s84gTIAR}PV);vMzORZFEFsv?C#hsFvd{-?7b(jef`s1inDnr zrmc9uB#|uyMD@!`S{s39=YQ_cY{7H2?+^+2D^6o0aTgjfCsk4=5p8iY5~_is7Ka8f z{d8OOox%Acdtq_l1vMEJ2D|h-5CV0k0Q|n}(^4;swy)vzwC$tB?)|THbcKI{i*+=6 zImQ;pL=b5;?jw<@ITXLVws0pJ<7;a=72{IWTX~z)MO?IRF+f2sGob801Bp(l(lpMF zhe|m7&$(2+57XD*WoV*u4sN#HipYgd_D%ewytLVXfA%+YH%{8RY5%y&{4HhtQy-#| z+&|4*t3-H$w9+8(hV>+z-p*VbwU_-hv-%%T`N)UVQgt@FDXC_!<0k1aqeD<8ic^e8 zkPl49y@o#_Pn&!!T1{Wx(iWgd-{y{KvWAO=0iHfGqJp2WutjJlW*D%SZZ00E0SO|4 z-}I9{27svJipH)vr7+Qu!-bU%XP;{5CFHh9FxqD2wwTzo{JZbG|EcJRZJC*2q&63&PE`u92!_joBpVc^${@wN|h=@H<%8mjOIa>lQf&t zquRqF0ECdq3|T^9aso6VJdAs3FT{43=fytghN=Ys)_{l(mATTPL0W732R@8xLX=Kv z21(a36QlhcJTNRUICb=}leiv&1{G@ME8&fhqO~346f6eX ztr66S)TLUdph78F=4c+gGUTr|8%!af0c=Gof+aDH%`$U7(Ba{Enj^vxoaiGi@Iu}) zi=YT?4b}@x3JC!voRu_E;@l2<6r@I9E8NzmL*saxQQL^jX`D7dD}?K=Pn-bnY(2&D zll8{er&(9=BXX}K$~QlcjrmF5)toWWR~s$>U_8VU>9t%CO3ml*p;nt+DxFzBN&2>d zh6NTPFXzJROY=mZGC+{biSrc7VJmN_0!6^hxb1S+T{vaF$sHfk=G<>nm`(qXU~lLo zTJ!>#(~-FZ-4Vu%B5loBr(gk!+4q0)C7S+iZ+|?+!CbI{zW-*#*ElL>=tp6NX(s1I zSUJ0_pN`1`s`f9@8sH^2U_+W!LSvYzYYt_95sM!FVxdihsh^S}bK{bOGmy+)!4)#9 zS6eeDZvDSxb#gfv6itNrqLk+v2Ter%TKHZ1&OTyM+}Zi)Xl>EL={5V({p~LV%*&Jw zD96$f%AF@*^3vP|lsiNDNkchSsZg#G0p+?2D37@_l#2)58K79K`EaiK8JfR?li&HU z$E#_cX_tj$oC$`12`0v0EhIvNaZ~%R5|e%Vk!CYGXLE+9*vx0SY(Oclkm^c$!pIYE|(8nT1thv)Y&JSgJ;S=`Z^LC3S=( zT=~n4#I~+S3I{^|pzAlb{j=;O{foXsDpN;G5er4j^yQKO{??!pC&NZ$`^tr!1t`hN z9O2WD#L2pBM5=frVj=~`hqQRQir&A5MnE-#Y1+EMDg@0((g$tpbwtx2Hk0Ihz!B6eV zF%1+aa9H7RwvAuxz{gd*AQKC1O!}I(yh%qCh1Av73+&BBa`MU5urQe>Nm4_o8)5k~ ze2kDMEq^v-f3)T;f40K%CmFPMX&H3ON-JYVYiMz^ZW(O$T^Byf#ZB|N)NOIIgiKxy z7RcNpy>$V0Xtauq4o`P(FQlUmp$HP*ob!!r=gDx z6G+Vfk8mmj(6LaEW<;0btJX{#jZ0KX^15W5PD;^^(`e^|6A6GY54ewNFb;UT3fm;9 z+M$@{4_VWutW?Eh0k#(Ks<@LqYr+%`UQ|jdkBXeXQbxE57C|Jaca>c$L|c*c zj72Q?0HocjjhYx)h;nN4K#VXtayjQ*2qR49i?ef($1U!=NxAe4CU+Ojaf)T-?zd`Tl>&dmC`O%DcdK zee842K4+hk>_8|XNy*yVj13RTG&(%M0AsU`<*QUnJGHknbA9af&K+wGtt6$CM}Ztl zic#q_ZE=bYwsAyZMsOHgJGG_u#G=L8Dq3t&ahfWQID-x2Gf4~2`*53P^Bv913 z-uqngaMs#uz3ct>zyJ6D{=eTQY=r|*N54IW_pHmqzmK?ii6X*FN6&sn9tuy#gxkIm z_~>y|6fkFOqDD=8Bdaf%cZiagOhp|G}@ zns83|I`$r?3g>_3Nrx8{Im7Z=H3mSwev$E7a#ltMG^~}fjYJSW=%oJs3~2nW{=wfm zs=OP4sO}atIPn^oLVV=)XFRwXuPD!>vq?dypjT1??Vvys7_1{mH5p8z%T<1Dn4Wnq z=&_MFKAZuP7#D#Vun=xZd?au|o)#GOfytgcSteyP){!--NMq(j<>9mdk%BZVG3`|| zSeVUUXh%z!oXB7(iYoLb#bSz0#N#%_JYr$))@v-x-LNogB*wxF)ukbJ;gN+IJ7y3L zpW)0wITlF&pXn3Xy$iU|sXp6#4(TjM>20+MtThyya=*?8Mg1q*MEEdlA}+(YWt((% ztEw!NeQhkfW<<2jx1aCQv;ne5s7c22E zy9(4~#4$M$VP4O;d&7^yccsYCwDN4GXq#bU?$BO1DPi>I%$Vin*Le`A_j)|z^ZQMVN`*(ByK}xeE3csF6%q~ za3vkT@-(Vc^i`-&l5>+-si)B@?|QH9kt_RfL3S?irc_uTN+2yl^;i%pakgPTk4PP|#;?gTOf_$K<; z0=pehFg#;-CxnIY^ohDwdHS57t`iTj}b?~P+Q6u=`3-=U3zq& zP;2Y?o9rljroy;D8dPDdav(aWp(DP9`-~R)sfCTH1$aRada?xqB0(nj(jEx(Bpwuf zRbC;QvRFlhJ^S{@$J{TxS;915Z)>`z;>3?TWMx3HVgFtVp~RIVKxog@bn+{Xvq<|P zZah1aNg>4dv4D5z{j5Z{>{jBty?yZB5*thFFV1cWO=XJlZdk-PL5L_2*87U4Se~{5 zM;!+HO#qtF0GdueT%W%!REJY2PFf|tuiO7S#Nwd&j6ivw!JiMA*e9~;wgZyg3KlMFFZZI zTD1QBYIPGQ4gS_2@hGdj{|%z6;!x>qbV9Yz>7T1O@lp^fxym3*a6m<18Y1FS-G@Kp z*J2K=0Gg&>s#FopbV8!33j{~#25-Z0Jy-z1Tri}lW>*%uhBWNL<+*$#*ASt5_|SMl zaDmj@lw5W2jVA+(1x`3Sodr`Wy>gsq2zRrI6L8ojbf+@`j^L|8Dh@XyH$9ek1LOB%47I*EYM z-l|Nf%@!8!-DNMyj~UA+tDpE~1u{r+y-vc6t~DO4G7##%HH@ejNjKJ7&hw_WiMnEFY<9Lf0*b)0_*)y;h%rLM0eEV%O2-B^a8eEr-Z+Fk zrA*CP(1zO8S;zQd2_7mV1R>3_7UPD~1P_B}Nr}RgC8$ysL)!!mF~y)V&dW^Lop zXuW}%4TpfVFydz%4Vl+Rvn0mA+RN>eYJJK@8%L!N6dnK;L@fG@NH&fy(@<-CnIyMF z6NoBc@tOQ);ytRa@nxpAOdmTQ)ulmqsT%+_vcM`yAcWmXF(4*^I%ddKul`7zc<XkUgK<5*sPaJqEv|kVD=?6GMj=SCG^8_}l;?E(V+f}?;p2yXv20tIWGG8)3X)kzCRP;PL#IgA(JODP${mv5| z(8s||l5T}XD{Uq6yRoNmBW1nqKSSH@myr1DDH33%U(_Uq`tabW2w~dNN=QnTMMVEJV+FseQaO_*E91FR$R7PR@4mHV#sv>uf8gT#SKGoL8Uv z9Lz~N$57aklO(i8%^3l5%hauKmIlWKV~=KLBwbFB(V1Xw(a0o&9g*w;BO51z1fnMV zaR>tWO@Vr0^r!gxBaRUwpBCw2v}B}n0SqS~*?D@y#EnBD9YybhfzyEf2r#kvd~ z)1#v?jXJH+)Y2;cdVf@4!YlUFpMK{1>OQ4WQF8og2IHt*lwaUb zZ!hA5S42}XwaoAB?;K*~bm^gRaW%jsK-H=g(~&1_tm>$tEE9?%KBq&3dyxWkpA;~_ z%rm%A+EaC?8b*~24!8S&iHIYaLweg^7ZFUtBbhffu8pL`lm}BbDkMQfl3G=WC;it1 z!Erapt+@q-1TJGL5xxDK#~DAfFL>D4a;!Q0(zvRUTER_A&~<^4Q15KMuf3dZX;7bb)7f z7?4DT6DM2x35H-StC~6H2Pe0?!nk95zW+l<*#p6AfI#onA+r4%)+grK5i2MAgA934 zQ>!Er@lpY%6Rv%S+sR4JlgS)cr+J46jT=#gNO_s z^`shgo`ct$&f8IXxSh)mgfiRhXsu)7)1)TNK>g(pz_08RntY8QMl6sC zoR&`u;YxN5*z5d&{p%y*?k4Vdu(j9|mJE#*#GIn{{hh$_X$6zfy+({uwh@Y=$zZy^ z=YA`BEqA|5`HQH18u456g?AnWa9P~Rjw-tF5WhC*K**xjB+@Y#?e8?mvf_=+g{K_{ zL`?KzZSNj!dJ5{=rDM<8r7K5WN}ba(u}AM5V{A1xO>4Knn4_Q9Gt&vH_do-IskY|9 zY{K$%M7oYZ{Dxy|ggjYWN5}+s#eV_YPYDYgC}f5Q8?||H?WRQN+|8rpWM53?64o3> z5_hNVRpZW)mJ-#O#rW}et&j+;|3hZ+j0b<}gBc!xsTTN4f6w|G^*F!3>hG?@P2IWSm=Dp zrV46#2eAfWykkXRS@AAV0fUonNZ}!+fe4F_FFI1(PW|G&^^v#2VY~|B8g+s#i6#N9 zt&%8C&C6vo@?>_C=?6aDU0K*%xX$t^h5_jqDQjT8tiCI(|p4AUQr*tS_`7f=TP6uhw7#PEII$-P=B5waL*h(Nm7cb!0 zd5QBRfhtWypg;s+`$!89OAhN@;VnT{@i8a%rMM*1A>@DG3@7{tSlY&P6 zB4zZ*5JXEQt}3R6MGP%;7MY9?_gD@SGMa@}$!JlEDNCi8>sCf9*2ri@{e_WG1~wF{ zWwbb|C}gyBR1vVDQpAAPK7~}a_)TMGILT;D4vqtpW4v-P}Vx2Y5 z=}H6Cc!~)QaE#Yn>>H1|akHh(23*oMEglofHpkb?UnMxXd+osb5lIINY|2Wq_$1^tdKNJ^u&(%!Gz43ri|31p6#h-gML=OAPD z6;_7D3hZVm%8bbn{}6-d94{fx^)ngc)~o|PWQdlif9&Vjq0g@GuorSc%tU0sig0oy z#y27Sq1H^D;P<}Xe=X8E%*bD>jGBx#yNqFC#WJ5UEP`Bi=dw3l3}XCgu~fh7hATq) zRmThvHIKa^OhH%a1l(B3v_;nML@cDXpgz=D)^~noB}`<1xvc-BxN0waUq}ET>RyUwA#VIt9E zRA|HwmuQ4ZAHLigyO15mhAGvgVVIJYYwTwXI~l$bF?uK7*Ea#*$TesyV}le}8q*Xc z9VC(aNvH7j{!p=tx$c?Ze=sQdzbN*Ud&D{&v50%Xyg{$YDg6KjaW&Kw#viS7saq`~ zuWm3*f0-D&q=0!Q0u=cgJXHn^{{ki*?4`F7$9SV{q1eMDRbn^G;~H8THFKIF7rfI( z^SLSdw#|{|^`JiXnejj$Ypa`M? zx(S(?B4ow+=OH8@t+L2`E6&yrem14LQ1Bv~d(PJdLm3vLZUt{EXREInbMrY8MzsC> zQh~)*>2AI;31SXOmN85-P39S@5{_BDQ2|)RI$|8&JzK)bfec)9CsImNjmkG>Q(Yyq z8I)Q{mffyH_n{2>0zqPudcKHl(8@>{!;*;>^0r<&jw}OCFfE#4012Feu)Fp1j5b0H zVymwEHJ-q*WmR?wSzl88ferlnEGAz3_@!cK(pM&P%@Neyi3^*&nUCV?LRlh$zZ zP6bS>k`aT!m$DqQ%l7m4u?%-Ow)!Nn;$FVKeqtTZf0@7{C?ngqdLsL-6N+nz-%}UI zmjvAh|b2iq5H-k46l%(+wvXsBR z$BpCBXZa$C!Es+a^(#SBk2^lUEme*3$!u3-VGi(IcnQnbQ2z8? zIyfpzoeU-!VKH_%7uH2rDL86v#i#!&XqM}@;ig$jk>=@gcs6N z-)lK1RyU<*CFSZde_=MK`1G|L%2LPcg*u(Zz|;0o%JDi;W>iI6A|-b{M3}NdK+8|-%Ptu zKs7cf*BKFENy7nZZsM1lBZ?*Y1n`w=xY@Y3|DI59z$Ap0Bi5Sg40jqywvfjZy1cx6 zoranaI^19)(M0IGLi@#&@Dy`Q&9pRAY_lwaB-K-y5M2!!V7HRMQot-R>3kC11v*Q5 zI`TbY?K|T|s=cYR)YrjO$40==IhGpQ4n=U|J9{eyCz<31SAg;G^!1D6dq6H?!e4E@ z1KAiB%v4RZ4;ps-h?l4-3M>!1mb>wWyMVp1+OY+qhPpP zZcT~C-!fZ#=IG~M{2FAfEVP*2yJ(K>nts6Q%Jka{7;~Nj%~6Y-rh1Z^)!ui)M8CQQ zls>EaC^E3%#!cwVE3FZ%wK3Gt%LWAXi>h*|zsS$s()bT+4+MV8eBGdCT2ioU(2#!Y z{RJm#xPnQtT{C_CH^gd{Y*BHjhCvv7_)!h+=8S2U?|PE>VKLnT%w4<%odf@1CNJkt z=h^{U7kfvum`C_4PXo2AKW==VOMvQlN4E<)>-fa76E%0<-+61UAKKoYY&xUHUF!D@@PkDWY zGjQ#a;HEhoe{hpXwqqCNP?xVWA(h*Z^N@ z#FAnl^IVi1jJOGG+f-7pwA5r=c$x9wqQ%NUoXVh6EsQmnk=xsEzo{3YOj5es#s0%dyt+G$1({| zu*I}3<_5Wgw{9(+++7}SO?8gAfZ-b4mZJ=}u5`L*>~$ZK{~E!m&Qpx0oWVvY%ZnIN z#72cqdqW1%q2Df(`liCu!-5$AoMJ-3jzGZ1GS-q(FvF&_>8a+1e77qjaX52s$62v+ zTuD!by#kWEE6WBBgr%;6AuvzG7=WGb;w7%~n<$iAronHv7# z0~|U05lv#hp^UsnG)k&Cluy(fCj!s_$|;&3*9|xwxor(l<3gZVr`1fz7Zay!9ahsL zpp12f^sxNwFx`yZOH5+{utU;ta~uyKNgPWkrrd|gq0XKx*dk^bg0_3)vR>A$jH`NRykCPBP?Dc){WNqG`l4a?HXWQj_J>i*`oBaK5rKYHQ^`0&y_$a0u-inZ zca1@h=yadXG*8z?rmGcGO@!$h|1-E|dOW4vpL&`zsUQ#23et%7220a<;qC5AhZ}uh zX>Kb9p4cD{d+7aivlAwfROmsv0$O<=5ZH?7#vdHR{)%RFzKjbQ(~`O>zLA`7-P^yV zeHOeJPwK4ySkZqdzR>C+F-;_PE2}w~PdeH>B=dRyJ1s!A^st6N@B5*;Z>sM9Oim4~ zRX5kno-&2**r_p{;5scA=n}N1t*h2yvv6-apL;Inq(?gpBU?ueVBFNG z;C2hXG!@*F3RYS$*J(+C@fsC`Avw3WG8KGzD!56r<~og%gBNh!y?1a1my7leHgh35 zYp@0Sc?1W7Il4Gk->vg`e^DQ(rgajrfFw|fS}#XsHtt$C_zS9UCnfY2cj&3c|FT4O3MPG=R5k)!u+pFha= z(HVV^Q+1oIjz3nXJJd0PNvfufA$d-uvpPym)bjB0wQR8#{;aAc`cs{_j;By{uOIaV zSb_bg!bd+y+7#-lOS#umN9u!9-PY!L@Yu?VTRC^P$6cR06waOcDSp+U=5Lm!=2{K$A$v)o!*(u`n~$_Jq|0Y zz;i*)s-m{I+gkP9pWR2}H)TYV0*WyDjoUV)ul=2;mBJ(Us21hcUdf~Ygo%dQn;4++ zdu<=Lvp3>_TwvZ<{bE&movxVPe;X7IfLysSPj!UU^4IW0o^=h8#@2eZrp~Tjx%^EE z83&8y>a60L^UBN87ZBgh{%Spb8kL@X>-$&YkOb2@>}_GBgBQ*tV0QKFA2rC)M>N7R zB4ti7f10mp{{-)i{w7n-#;R#ZyK}aX!>0#i2OVVQaN@G7$~~ zDJ%bMqBAe~{#OBtttU)@BN!5h&ZiR7;3V*@05Aaq`o5#B7_ZiJ}IW=s}) z9nX)U<9;qUa+E11n3o!0XuI|YE=nj+p=1Eo=V~y$TmNP|V@$ws>v=hIhDBCt)Xtty zU&c)G==`R66j~|%qR{BVA+D+-5DwtrFQuX4Wm|^52#n_y1~^}3%`13-(JRu#`KmK| zHNe!;lQCF_a+cL5?lNto=!R~!-W5^qn1?G{@7BvWh+|CaF){qC$8yzrtkQZ6SE){2 zrS;gUpZ@8z9wCJnWcYG4i&61eW_i5WRCL5jvuSX;h{ad+6Svxrjo$vm%(%0~O%H|N zM86Y>+(GpG_(NhxI`i-vrXH%#t{?j-+vp#&9NPy^t$lE?#n86IZKDV8xSu*ElO4q> zT#OFmvVLxH4c$uFj;`h|Wjnf#J5b|U(jB!8J<>MBx?NxO+zZ&vy44HMD|T|B{vD1R z76uNAzz}qkH!3n=D@6i%K zbs9@|Q=kIIz66jPhG#Bj#3of6MXAzDH;kBNXeINZeS!5>`8+tCrnc`LoR*qipy>sE z4>$1G!=vGXe=@HYU=OPe=+s8Pcth@y8Kc(vY;M_L6W>Lb7oy7==U=jKuz^y8^$BOo zJ@rhrNlFBGX6hNvmgjqv-Uui(!5W~2{6GXTKMCL~j@r4lKI)=!66VVkAnIDIqkx7c;4MY||r1fHOAy5#r6_vptMaLc; znyC-MLnfC4J%Pm=s1-GIQr8Vr1A^HAo($+sU@yBLXajwEp{_VDtj>Iuaw037js?K` z0(^c9a5jPwsUTSuM@&loSXd6rK7#5-)rk21oDVQQZ(5MjWz8@*$YjxAx9W#OC1Z~C ze&cRPv0Ryl)j+~kJKs*Jd^TADKO}72fD~7jOPyPh5-^3a7QG%Um0&b&-{+Ou?rDB2 zc_3M$X1WT@{6MoG_i03^3~+xLjF`+M5ezptx%}x8R!N>I0i)OUGta2m;1=a%QIn=U z4;{ydyQYoEwP=zst@w0CSq2)VP?~&ckyq0u-$yhau5b70K8)mf#YUC^%0UDXTc7Ac zPG9k1Ac-BmlCm;kJ}CA;FUs@{MgRyb<1ttaVWubRja*6>iNd@Bh9|y^&}kxr*~IuC zekW(M>tJrdQ4-%`kP>?cs$74uMdHK&7NBuR>Q?Slyeb?}Kn*S)QL%>MjeFu4&2fYA z<%bzJLx5^>F}X&M4Va?oL@*d^VM7`hV3TYxI@E_@2PP*T^MyD-C&JgqeE67ZLh0e$ z!!nAi<}_sBiW=gS{>srO2z7O8(>Vk;5dx`=MW!FHFlzRPQ}xykCE00}46T6gpkLu) z%)dx5T!`5~=ff~mq(Q$5Jkw5r^v}yyG;1+MY|h6Tg)c>7cDu1<)|DLUCLXXwoKEXH zNY655vvuW`H=9WQY&DA{WAN;(f;!QolAEUeeLj zENXzz!t(G`84P^D)I`kIM}9~?gRmm*w*!XDxT1f&iVJDUUti6d{OomH!~yfoy_Pqj zdhm;fWIs3XF_tCelgtwWl_N5`-IN|hcjqm?< zjh(a^a*DAvZ`=3$TY4B><=S!SxwIjTb!%&lhYw|OCVTy`Ks3=KJ0P$jlIlIL;azZi zo6g<_Q}*Sg?3(};K!yEI!bzx81E-0VuMJz`;m$BcK*AP~cH7se2DOYpHs4=h_9 z)JZL7s+V*2!N6b`!KBK2vN2*^QA(D?hCDzT*aI^2{oje7-5>>u0mOgAnnC=baPU(R zo5Sa+CQdG*fis7jKxdG7-@wcw#vVZ;)$})|rYwa_&K5zpa#o!6vF-88?CRk&$Ro`I z(UoG{70@JgrE(>WdZKDpIqNw-I{WyKpj=_1dah4*AOC3&#+tO6Y_8AoF>QoFeB57p z%d%9x7T!w$rl>Y1CKO`OcIde$Bq+cL3JC_4Bp0>G#*4$f=xa znAy{1G-gN4EVsygiCO#rq@s4KW3#I7VN<9-bt`=1&%zbR+HUvH&i)*DaXOJ6)hTIn zKE>FqQ`ptv%Mnt*ZMOWd@F29L-5Yjg2b*|A!?=n2bz+KPRl^qd0(+%O$q!yo^*t7c zyMAJ1Nu>j-qsNw0J-4{kMEI0^9NyKy^JA*RS5O!{N_VYb&W-s&IM=#5xA>4(9zW1r z<#7ESoNcJl&n@ov*{x-;ShBdLe3*v8m<|>sSQ}7u11dBexth!X)Ac*0v@BGEVuIRE z*M~oym;_>x&MM&tQh-wI_&eYljh15X2ZutDk5S5aDznbI$Y8}xjqgd-HUtmD76we( zrrqY?I}M&GXm+N=kE!Yfy>KPNEl2udmMtZtv$A2Zg;X$A$yDQy3?vbOZ43>fmRVS^ zRbOxjiC=64wY7pqaGhmkZxfF?uDzRTp9caOY<9{RGuNwOaz_gj=ZX-sfZNLh8VxJd z0_HOMHAA}{x-bF_z<}aRiP#=Mu&&N?fmo~wil^crRlPr& zN*)dfA=rGN(mVbhL;4WIrs_M5&YPMD=ll0QFuspDw7`FC3$Tp*{ejVYoHF_SVSjg; z3QVLhRj;H^+Hk#T*Fc2cA?QyhPscFsLVNVBWqCK@dLU^E*MlfTAXWz|#*~Y_2IR@FR6(i6P<2kR{%}k5q#sx$H_HH8 zz0m29m($g!%yW@fg&xX4Nv$G^7!nk^qB^VZ_|X-Hm2JSo`84R|Y21Srr^RuQsqRx! z-7iR;-Adi3sXtLKMXIk;*qlxwZO1++WO?s!xOm2)#hc!G@X+BSE6e$fgKeRXL8+pq zXt-XxFN47&V((d5HXKyj-iE&Yz}u=b#~4Y;=eedARsv>(=Rq;K0@|kzl<+T+?-syeyHH3*VFA!mdTAgD2NXdBo z@q*;}w_diWgZddW8#-sz(`*#L(L3bl7o;%65p=>Poj>I()hc@#@=+SrKk%=A}ZmQ{mp3-!I%*c(Z zEkz^I4>e(!KXmiXF2(tYcBdNm*Ft}Ir)_a&VzO^$5}*0%SHASc|MB^cJ(C^0UW08R zIKs;kk108#80E(1ERhNTPk{&Lr3mQ=1DvWh_P-e72~Z`1VhJY~L)Va5U>xZKr)3Zb z(BGA1wMoG7OJU!*<|?B>PX!=Tq%~O@VAKI^PGuB8oD0I;7R)kp`-bv5gjabNM^j8m#rtcce_^xw;FM`FJs7B#RyecRYOEC zxQ~aiqjVZj4$&ybcS&>WD2hE>C-ETHRkiXfWyxFpJV z$(_O9-mnDCqZD>ZFaSX!q6g?BE|RW$a((a|^&{(&FD~btV7Wp@G1VIKLo{SjdAKOm zsnK;gB?D8eb(h>GtbQ06f)H#R_VJb{>k~$wSbEddEMHCwzzxb|nTu_bDsHQ$0qtxY z9w6#gW#EC1NiG8u8##qT9!QEo+se6ZK1YIPa~gpF~iU0}VEakHI3_nJ+FjU_gbT!Rt2hq%LTt^FifVFGu=*dEo1M&=a@ zZ!o~v!#|9zuIDb?pVMuxS8Y2F9s!N5c62VB%;1tK_CYn*(mc0ShSq_AAZ{D8F5Dn} z*l4P$6MxZwt4h;{+c4$g#B{7lLG>_CpJ)mxBzZy}pn84Dm`Kze&?iaI6z;Gwk?|hmQsyo7KO~lO2_> zG_P!oyBBk}ohN9`Z-u{#j4nX;^q5{GP>qDe9$g@jM-%hWKLxKnRCIdsB4KvoWgiMe zkRQ8d2>c=-yr1^Gls2T)OEnLyW6v*D@i}ZoS(ToGH?KETTdFPfhF5Gs-m2E^%DN#H za6?i!m9mi$PH886wyn|jqYa;=HX6nhJ|@xftX|%JVV**gLr`W!A?4U+e4o5?flJgF zBk$c_td{5XnFNe~P!l{_ z2J)#I!KRu#$K;s0wtnKjuZ)afa0R$d!eJN8+Q>>+fR_m^CJ#!&NVt>MK^IR*y5kG# z|N3mEPKWr+7MD&)!bo^oRZO0cln$jr$F5n?FHU+wQgT+s&wp$j`~!`HKG8Dh5Ae6% z)gBQ=?x1ViQ=%pwhRu!V?z4PQB&AyKT}6tkMuZY%0&F1hWQoK&=^CQmq7yd>(Etv} z8_3QzVkfySlSPfO@M=;BWd)C7Cw+G!A(T}%in|$qtw0#%+gLzJ_+<4;tXWM|O^Tsx ziyzl|`(UB&^!gWA3&WGjj00kb4{0%}_ZN8tgXlRVIS7huA`AoGQ&gWM7z^X%(MiAt zRJ!MPMySMw%uFBvKwBD7jJ)>)qomX> zACzk>fg4>0{xiCM=j>~Qm(SpJQ|J>uKGMmQ2Xp~nb*H|K9qp2J6inZ$L zPE(72QXCjgE8c{@m!F1J7DwwdNnUdA$KC96>g&{JUbW;;_X}A8lb@2n^Q>}*{Or^s z!@|{U%k^5cKK6?%db~W$C3(Ei_--XINO{}0NQMZXLLJsZN}V0iH#&v$!c;hlFCKU$ zc}%tC$A1T288MB#Js`7v#8$S|j~{JYNwCOtUyfW(%;@M)u4>fMriqpoXATI$P-~NO zV%Zwc7}t2Hq4490024$SVp9-TVnVnz(=-n5;B9&Q8JNdza&L8PCX}HUVh6xZr{w@l zKr(Rv>Zmh(pjCi%PJ`})tN_1ZK1wElHxtKe@g~lIR=FGZq1N7bVF!< zzAD{Tog3ai=!r(^T+X-C4II>Jw7D=nu|!*)>;JC;lW) zRM?HVH$&Ci>`>gy5HLG)byz^uK*oOJp6`BQs+X$>ew*AFb_CUqJp3f7X^8gjK~cz( zq_3kyoI+4dw;RIwX+yXuhg&_m&GWsyd3AUaNEQ@y47_j^A7!sobs-=^lp zjr;2NJ~;wouSJYUy5e%-$M*r!qMMApTuzMt%5_0IaXU*YmVUO)0luD@9J|0UZ* z#-|_t)48Sa3QqlcAX}=Ry!o2TdlAq2qrXPs9rb_n^1h<}f#2ZzAB*&D@6U4%HE1&* z$m)ThimA#%5+^qp*qs6=T)5*P{e|+{b{@g}KJd1qEZF{KoB7E$fD0jvwfh5zj1#Y0 zIT=C5$R>> zCQrm9%>YbYa6nWB_)=v=yFmRR17Sp%NA)Ljc+$f#TZRxoGq3*hFic1F$j?H^Z)9nP z-s9&B&H{}|V+cv4VFyJq3o_>Ya!n8^5Q%Wl{{fg9-G?!rcne7gP;(5Y`qP7Wxs}i1 zOdEkUk3h{RDh*lnn7%p95Cvw1iW0w<2LeTdIO%u#zkt*%$7;W5I(3ZW&S}yhuORmV zYun!X$+x;yF!f)QX2GF6D}EY|9y9?WKBMgoD72X&+?nkkjzuQ zmje7_<4@n|t;=^f|I}an23k>K2oc>RS5qVS|MtG$9EuuWJQ6P`gNT;NPVn?7(U{Fvf z-vlG-ql5r)M`=eAWyYWRsCN+SZ(0I~s8gWbl+wkoKoZoI7-)l1^4Z+&%Bl;pi@2lURxT>fVEyTfE5^*csgq3# ziQV;wQttrhIlckh7i1{C)f)1l6`02rbpYN;^Q^{<;|5}VpheqEwV5^PWj@G?JtB&> zB+4$RWn;bQ(S&~!1%>5`t#Q8w768GwN6-eYeXI2w_v5-~`73bO=!gI2W0D|&jh45N&!EAv9m7Lew zlex`P{(+XucM196=i3JhdHnu`_O}HvQc>gqAC;pN%;CuqnbBBg(=FQ{_p<#hvtP2N z8~+VYer80dSXWNW?9+Q_y^4vXh74+0#!krO%z)|khU@GgM;#n$c9?odnndvlg6FZ)P*jIG!XyRPozM0 zWb0hjHot;2#Y$yK0IK>)9`4Fe-Nc;>n6;%0cy?%Av4hP~i9&jkYaA4TBH}85S9vNmf7n`!V|FE=FHJ#IyM0m=ozh zU2;M8LXaQfajVuH^+Dk(NFw|C{vS+Tn{GNeUq7AT4jx4-{uGNOL-DR&P9P0GN8rtB z4nN1R>_IEr_f!spc`y|QJt)-H4NkH%Xe5e31l+0)fX?{$>n|?m4{X$%BDO-?P+X>9{3QmQ(*rM;bl+h9^Zjdqfv~l3~L>r?7U)2 zEKDrE>_=7Do8nX$v}_arfybx9Ffy3-y~8eOt^sEj8!HDIValjWDxrF^2kYuI#cIMh zw|;ye47?nyF#0+FRKtFR)#KK}RKmy1M*6?udJl!^^I`w`;rcif1_lHkwJN^_8d3~t zqETpechZB89pDU@ik2aZ4VSroQQchk`bDG5)+^Sozl&WF?^Q`dEsr>zJe{j9DXgJy z!k?X@g1&{57<*ir7YvEedsdJc&H^%mV+oD=2LrT%xBcg4w|huf7I4Q0f_)Q&C4m>_ z?m@Yj8EG2eFDAgRN}NIs_&EegV0TA{@)*8*BJgW|IuZDVr6-`w<9Zv%hO7lY{UV`( zfBFsh)vr7U_RLe1fzrWjilIyZ`OZM0!^+3t2+8^TDVQB3O>;Z~OIn{FlK8SK3JDtqOgF5YX?= z{5m?ZD?5i`tDm?1bxrbl>TmQxzXVsGnH`B~*?u&;q-S%23MS^13;0g?Y|`UH8P zvnkiA`LP-YQLtV5Vm^vstU)_uadc13r`L@>O_@Gce=3FIdHS@*-tB%ZQRt$6N;9Mv z$px&L)OBVKL`*Bn5gb2rd^Rx{mvD>}r?I=7tsO-4r>S!(rwp%=?rUP|Vl6+{)Ga&p zeBTT^`lMxHRbM>?JXZhOzT(Vsax5!GSazuCt8Jx>vnK9(-e?vZ1K*F<#Xodk38^c? z<;*+-bhDNO=c=K}xF)|!D&q+}8q5hvwK-g%Q_>~Jz@{NBpJaCelT#9nNa+gk%In!n zAyA#PcW@pWpqhnv39`A%nN;R^M7$tIv3qpt2R{QMk53eHMc7(*v~yHBPIM)$Koe$9 zv~A$l=eEJ0cH7A540H=>d6I2IkEn>~(5VClOyN@FWs?=n8}Q#_;Non}*hpYOdk}51 z)kR0Jb|eA{5X)=orx}K6f=F`YrsfG}bO=`#si{w137+aJInbP(2QXA{RU|~?A#Mrk zY0Et=dL_?&e#mAad;v$MI6e@o59Dw8I*^CFu? zMTWZ)YXr=Jef_xD@)4NNz#pcmex$`8AP3s+9-e67ag<;p661wursjscr&P@bAQkiM zU9ryu$Hj|SP$u>`A(e+BuO`t9|AYm}^m4-IG}vzec#TmvRPnUUSJLC`3<-y}O{qn#^@PKY({5?MjfK-(}@MDLOQ z42lSljvmB@04y1K90bqEVO}}=kdDXLS%3pPgW0yB&FxShZ-<(`gTS5OJHFw&IfvJN z_jLQ6yM4er@vk-9YoubNo-*2hIa@XKg`Bog2g}1c{QuBzwRDqLp0LM4Nm(Oj<%Oa2 z!3X9;qUPFcl2WeKL!NvPKxurTBY%tvOj~;evJ+IO7~w*(6bk6r2nmQpe+j$AIJj4Z zotw)I;*lp`1W^p9uhfZY5vy09n|_s7R45vn?!Cg?fTQlY`c0-keh&k@w)??N1b^Pl zX^B0|jyy}ZMO;}JQ#^+TL!_0{zIy~w#vzTST+%W~=pIh@|wvp^fVaK9+id?kP1|tYLa0VT3-3YGe(O zQRWc+#)oFM{ZU{KC2j2VCoYnPIhC}7kO#YVw}cqy;TV=Gn-D{x@<%^uTm~ulTY0pQx&* zCYSl)jDAZ|KO8jIt}GC|5-+EQ_Bxs2!^9~rAl5T4dAYk%gf+5R`}oTzX&9vbU>NWvGxt{Adv2)8dlo^b z8?Rqne&?s}|D*hdVgHrvxpA1lE0nCsX!FW_`-y!bD#2ql-TX=nGc=H0x{sE*WzH|% zC!{9IbniiG%>Jodk>Yv(+uj7Ss=p2cwsXopgwmDa_i2Sb9N+`Hazijk@lle_Z-~p) zuZF7i?*c?0`SY_m$G4hAjYQK(Ky&?n13-ay(j12l60Q~2i~6n)#w`1%TfT{vp3bm$ z@fzU}%dLhkv1*dls8LQbX+&%xLY!+Bp@(gj= zJwW?~fP-%_mpuc#&Ce%iz57N-mX& z7E4@`;mynHO!M`Xq-fI%%G@X_sJEO)v9j8%4YsV#2!E>zha;FD9A?j>+gx8j%&6DX z&MU9uve8s#Wp(O#p!GOcL^l~^JVh&s^Rm830d3)L51N};Ld4EIK3uZP&wV&4BTdO+Qh zh+BVqC9D5IeFt83DJ>PV-FPsG2H^A9Pbsw1lC~-FITpIkx;RRq9<@U=B1XJen0Nuf zq=@T-1=-x8Q2vcaXn9BdWiH8=3^43wxcCH4x$t)s@Io=-yh*@_*F+MvGn&6BhiSUYLWcRZN*?mn8IO1UB0zJF-^@%`!Jao>3`(f1G8 z_xdrOiRArnwDDcpV>zpzPCTAEK6*{5_T^c=T+eJk>Kk{0_2yRXgvwUVjiP@T%Rfyo z(+cMoTqhHJR&oBgbgD%f&4k#WCnHZ5^66GLfkHGYK)qCeT@iN%mRv?>yQBRYhLu9t zUr^TFBZ6WD+ls{~=CE**=Y6F<(PC{bseH_>^PDh784~u0bwzGp7!G|((}fsXu&`uQ zhTSDo-Z3&!D8|!wJh=^cJ}FR<9%Bc@$3jtyuVTkqTSa^^PvNHasixvE%SOf2AXuZu zQ6k#5NsX*vqD?aNag#z(BTBpd1~kUQVua2Gdn!N^m^7g!lHToTIxTZx$Fs25Sdi&U zj__$M@{SpLA*@x@mQlh=W$d*`S~(Q+o;*TCV}*}OOq)#^3(wJfSbLH~3(_RNwknc-Noo-)02(tmGW?9p(E*aaGK(@|AP zuFDt~oCx+Xutqbug`%Wzh$u--&E_4bxN4K<(%nn~y-NUve>7Y&g#XeRoj-`xQ*cL% zwI`Rc4z88E1wc zXZ~N#FL3Uq>2gsNzKFs*5|~qiNO>${zM6w56W1|}EdESIHONXCEHI5>^e>KS)a+?T zxFUrkZh<*}f$`A&3v=oM)5B#RKLtw+X6io%YikHSrRXIFPa1O(5Z)u+$;=zir*VPB zL=c0IK#vGDN=G48Qy2&3`Imo)0eu+d%O~^X-UpKoeu>ti2Uv=3Ks>O6Iwn*>h#2r< zIQeqGjV=kD`pbt`C`z*2`b;MiA}ou{3K2!5E2cd0prKAAU)>#ddin0)369|ZHc@OV zj!7O>d?&{8RTWQGwW-X~v@fU}{EWhC z5K{yl>{i#w{WDKK2JaGh!!G@+<6%g(_RyuAf8-)W$KpW1sAeG6NV^P#YaIRLF%Ta8 zl(z#ZM*{&64x~&2DT9v0K*AY*(`L!eYGgkb_97oLlC$({{PzMyrUA%tU`-k5FQyQt6 z+>?0`+{-XEB>PhhIXD1T#m=Q&Z{%X#o)JNcy29sR)R$Y+pjqCN-=h+lh_{E=QsUZ4^VzDgH~ zNJDd23lI_uQ}_Ax?GLUfBNmqovn>>Ydzh-1eU_1?IxPR4W;j1B5v$nXSuEk>SGge< z;rSN3IKM=4Ff;=2L2SASxWlJyO1r0Krm;60L>BKin9R(c(xqS##s1N=;Mr23bGwS$ zLUm$e9P7lV##~W@9;s8!2|cmAnUp_aZ8JH_#IY9L&{mz{>j|CsiN_hft#M9tO=Pe6f@chz4oKd9R!%tG1! zz5zRYvv(K0-xl<8wIF)Do(v(a`x;r0}d6oJGL!!tpDP-2ao3Amo$!aNLFKBn!$z zPJ?$j?u*BsXk39MC@l%lMp}tB@K42p_aL8_V4fgLOyaTcN0*u z0mrrawf|y|P7Y)`gw-qWS>Zj?9;87W0|l`KvS#Gd;_Kin*@2LV-NZt9LDc8{fFs;1hHUuljm4y zD0G%=K`Brr>G{%%DZ;s8Mt_4qY;?Tr2zT}WuV8m%0zy3}3*=^p5;&+hv|WEhRH;5~ z5E;ysT2w)m&sT*Lfi9MSA2T0#iDpY`YR^)yLV9et3=2{;_7oa$4QG;8iU%L~p7Hdg z;UW9t5myyA^k2$yA?6QX#U%19cWzj`NjIY9>r_$FtBrt`OCLrqx*(V)9Z(qAA}~r2F*g6#jLA-R##$^nk#pD!{?W z#JpCKBGe)O4j^3p4V}gUvsCZqNYsgs`IHX!4mVSa{u#Wai>~x3c1Lc^@4|hvC9>Y@ z-W80A>zP-C$d|lJLDW0HkXAfzS=5O4Eb9KpY1x&9wwxZN$wSf4&~}ACY5r3Ok5Ytvh5JOL4v1`|%dVn6V{@Cu~d3$NI}KONajYK$N=n<`bI9If0*hbo&{ zrcYJ$X(LOL4OEjr(2vA>@jKSx!7&z%=FHs@^;}8bzR$u8ff|`NWw9rqr1s`@j3TQa zOHtEqRGMwt;5_Z(q)c5CXMN?xJml08;EX@xe%&cV4MyDQy|0;QyfOKDad{ZTz9oAdq{AN4NQ?82S7|8qwFF#zaP7xlYRhavzBr9p7<|{tw;UtoQf~ zQj~aLy7#p^`m=wDMes|IRGV!a{ky7OQ8=e6izb4qFcNIi(O)$bv_4dh>@pI`#)02p zDSl=HanW5p1|BEi*bFvc)?FH`a?^;MF>A4a_1bT8REDzi2gWM`zN*-h{uxEmU)RaY z3}zl&@9$0QZCEvA0-yK|Sx=S;_gkR>h~q5&`r+RMbbk(FS6Tnz+*KU<*`RqzMLT|+ zB~l1^$`h7xK;P=HJF8^4VDdOtlEpxSY>70_>XL+RP)>k)BuKUZ$z*%U|#e;7$Ao^g(%QS|Hm1q6G1m6NVe9Q z(7v~}vV?xTW(NXvi99-IStB~w;jF=kNIjFtR`27@c9(kM1PPK%A~a-_kp(H+NOVIglrZT6x%CoW5NQ1g zHa$Yos57tc|6(_}{1iOC3LO)ln!Uk(4DsHf3_4x45LU^ed?)(eygtCSzUQW+jYFM} z>pMn2Co5S}*$^g^v>PzWG(EkW8XSX7VDa(zj<>n2kQM9O;*Ka1IRaPL_C^iNkp+9} zZO$D|I3a!1cZWh40i-4@2hA2YDY1=reGoy<2|YOEEmU5i0_GZw`|87sllYN1cxe30 zq&VVgjL-!5XR>w#wE?*O(+Bd8M77)mYB8Je*TT5JNu6%qKSROB!tkRYL|ycZJ`Oae z6A@t=q={m%?@cMFVdC=RP*TiJpd4}+kafH>^O^gp{WClsmv3gb*!Z`bduA0+0CVBxaO%2l==Ses*7uDe2DY97YiL9**hL) zNo%H|r{suZDp=+`Yr>LC!;*i7-_3NPp18nWLfhzXIeet|x;&M4i5_^TMQ1lxV|nh4`SgvzrA)yjHxC(ldpmvO(9=yz zGH4FDCr*QR+|S;4Jzgu-E!Pj{^p-(-spejDFC}Mhq)7MG_wtS$Mb)8$*I&<)>fA_= z${VjIvun3^S6NJr!ux~PIVJOqPsf&KdzYjnwFKVQNq>+_qMd-0383h+%bN2po}mSD z#^r|kWCCD`haHD2X9q}1A}oKVZ{l1Z!bdQfkU{Y-_`g&%h{5FJPU3X%BBbwBl={*x zEgB>fz;wz4FvSqe)Noho7a}UYQhZf6Hc~X!G>JreUvRjwP2=Mggfy5Qd$tMQDuw@Z z$~8o?UOosWTU_#OQ(EMW98~KR{j%>78^q4Zq zuZ$0q$8)2cQ!;^Ie9EY;cO7^XH6;)rUZT7OdvHVHD^(@NzGm%P_zm7N*b+GKsczWd z^J+J2$T51W4)4<@>SxODceAAXWD1jjc0kL06FIf^yTl47!Ph?Mi5pSM@1X~ zmhQz-cH5gP*v_f?$?M;ssJ-plz4t6)qPX#TJPTWjAg1$Iel?4ye1C}o11WCj7K9E#JhCfz3sn0S}rk1=*Hg7?aRDz>R*M>Td zu`}2hGiLoMH+WFT`HmCq#4?iS{$3u>20#|!EO63|eu^F5^|uZ*_A7eG>01K|vob>VAc1tx zX6cL$G&~N;?+qivMxucY$I&oU8yj}BM9U;w>4Kw&s7UK4R*nX~V!Bo|*PgEh6+;Vm z8X%O~*{&*nx(UYKvbMFVT9W%R^i!l3G0$WNE`zEl=7qf8-chg>5t z@?08TcVm5sIfTNxSMd~bPtFU(OAT%?4Xh2wOhgEaqGH5!=-X*ZjMEMs>ZT+n)k#Ab zALG2=fzjqdqV-~r4*y}{86^~{Jb2SDq*zT}5f!Er9if0UF#=0R1&_i*#hx%x5LG^v zm_H;cq*`-`a8TGdhX}h!lS9POrW_*iEOLlw!8dZJb!Mlw$RR?BU0G!gkzB*R2BlV7 zQ`fSU!1}iz6`mV1gmve8ltYC3CWlBeSt%xr3x}t+-Gtps@J&)5BmhbTnAuf^(~Ywd za{*J^L4}Y9q07|2ZmfSXL1I<WE1`VEXD?e?Z1h&YLRZUzIsvHyn>XJgvoL(v1s{D=kp4Ksod@;1{yLa2iQ z7!e0Q@9{hQP*X9ot8JH|`{CJ;5Wj#$yCfuf< zSz}D_E*TiyM(PhyywU6-Okh2J-Dvw5smGMc7_L*$`j)|jDYq2$m*27CoNyOTYp%iM zrsiGpEn|qGnJE574ScHciu>9dxRMdb)f9WujOXEV0J@mHY3wM$I>$3*sJn{5j){!j z8rCr#lAD7|dSTt%DC%GuTmGDVKEtZx@#jqNJRQ*AJ&iE7d(vHe>s3ZHRFE~R$gnfwn z{vit_cIP`-bg@+`fYpp4W8QJ}@)=6?(R|mObMJf`lt+JARBE}wV&VGWCmdo(4?I{; z0u!?2bz}1XPU_eH>Lm65%9i4kk<`k`q8)PtyGjsHjlnWdnsXpI2n?V2B(mLnuz{4;y$}RDCzr<}=QLK$0<{dMZU!!|Lbh z^h&sX!csk_A`b;FVbwX$zC+b&#}L(=Flpxt3rJIdX)v1FVi8RZE1aUKE!G*wsdkC2 z-j!uUYNs#8vDD`8q~{SH8F8ENsFxF*AN^#>jRNLlCTnK1zW-g&u?U!V?#rrwh1)vg zVpI{K$?BMc+_O*P@c{%<6XFBqXTx~ZK+Lvjy<^{uoXv`yk7*WtQUtxY$%dYhXE<(B z6K`h`_z?_J2|tBc&(yP5kk6ra@8aBz!;NuTh@zyQM}5F(rrOBqA$y0|!qJl(*d1xC zIz8%&9#GAc)gY0j52t_&ag~F%OR>#!1cUe$;|R~X*)WX>@l+!h^-}49cafIeBltE7 z0FK;KMc_H`n+ZglCWk7|IIx=~1sKgeve~R2acJLZq&2G_cnACF*}xP%;C;7ozrvs7 zM>!4H!^gITJ!`nVW&8y9_dwq1i>nP_<$mUs?ELApM)bsj?s2RH9%UHu)@vsHHutwMU+S_-2gT#y^lJ0M0egd+u_s1e$+= z+@sSZG37KIG`EFQ9TFwS)zDQl2lSnZ`cq>(7s@3MNu@G+Xq>A5Kl#pPIn>L%tIw|Q zvB)2z{sdV`7UqczU-nG_x%KC%BZ2|R3D`$iITM0{wEp~q+HGLZBoq>npcYN!v)pEH zKtIy759UjPeT;AV+WuAO9q0l5g58HpSz6aC^7cQ2RPbZJd{{25tEQ65=Vc4zB6KzI z|Cit0E_)a_3>z$LM03%gDp+0R5Dnrb3onqUiU_F8M1)AAfg7$P5fR{~0ue}6Cn6Ag zln?<;F$a0?kCF)yC>e-=Zv!OG@_`75A%O^1nG!}6V?^MaK!o^aKYd6EBTlER2_xVT zuqQa(-8A^D{jbQ}h#XOXAakKMFnD>Q2Ux;flk8&KleVc!zqWEgMGJGQ!gwzHvQ{u& z?x56mcXgL7e{f}ci7Ou?3D3gVQ6C`MJ|Q6evdJ0O?w-pQ&Vb_JAWzF&$RRMlNg5h^ zd!>-z%b|kI)WzPjvNv$B2#Vc6F;E&5qmIrX18FB-kou4}o2-3mM6TCQlwg`Da60p3 zcdXjclVt;>i)ru9IsQ9WIMi6-D|p@#AF7t_FF0&KmAmy_peqz{mmnu0#pBGdJ22X+T|xy!lWxE)MCyGgQUrj zn8ge8G_~mx)K@co3lylIiaJuck4yL!!^!hvk-(f8@@R-?f&1zeMmb+xyEN>IWT6+V zUDSarOm4q}4WZ=4MY8 zT#H#%nu$qDln~8vL=J!nf||aaPtJhMAJVeZ9m8+FD)@@di(}nLq~aRq|6AQfgO6#^ z^GN%|*4Oq4d}_aTbccau^R+ujSL-%G2arngqqpyJD`aG*?_KQN(y)eX1W|J|#S{@$&KVxM6SJPyu!hgGB^GE?H%uKiJ<_{2 z18TTOy~Z%-gA5G=%7_ySS%*__@-3PP;Vzg)Mw>DpCB{*xEZ zbdeE){V1eK46>%Fxozb-7DP>->SLb)Wj`XN%-?jUG_ zQljjR49;?k&2lcWSLmQCd6mys2CX6~jbtA(TR$`^pVk$A~~$ zPHrV{0$tyPC4xu*vn&!+!&d6?X%PCn|6&Vq%Hs9oSKDA)Yf}v@R#vd+!W|i9FX>b>i-;9)j<{ z0cmU+D;kt<-qD;3H@xxoSqwzXUhl64i;b{^K4`7T^dFVM(OtfA* z&8H|jBFs6jchU;D4xs{uECd-$UN)W3V_2QvfIZAIrDb}TXFk$UFxFftdv4i75@z79J5vq`}Jb=b(agZZW;6xXN4bru4>05ktV z<*{@=k0ax7p@<(-X+cn_D-*BHG!6}R3@eOid(u)qIqp6A-j?rsI_^}xLJsbHAJj~~ z@BN+D8G*&nff|K#tvk|__@yK@;t_K>^mhq=H`%kwBl%+SDrbRi@RI+DM`3xBeIogk zv%t?S?#uz@kqCu6;_d0@7LU6q^ZGHfH{H#h%keRu)sL`$uzIa6MZ!G7(;daJqCW@J zrXrA~|0@uX*vf_M-F*6h9bhFq!PSPTO4CaH=&h=;1QIs+ic6JLzdSTdoQr&JD#A^4 zXCp&qL(C<})WPEi3X!spqEq5VZ}4zK0ic3C`C34Pd=h^BxpxpFHILApq-^9-*Hcip zLz&o9aTMgs?M+yYw4YrXy=CO-dLmkz@ECop7~*pAAk58OKwmK6AyCA}4F3V)ozTRL z-*x0fhSpXYH|71ZMK&*ZWfJAsZ71Z~8Is&JnR^ESv&PqRxC z-T^Aiaw1>ygX_Jm7{xP&s}L9!{?|$ITceb|fh!>&>d9a($w(frsHyuD7URA_^NCGF~<9>ACPT=`n%! z2~rYadVu||3stxYtK@ZIN0*O6E~5TKcvE8fM)CgcVw9-ixxo;-6{igx4~9;FVg4#r zS@lo<)_?e|?DD#}CS`3|0}-<;2nwk4RRNndKp~Lj?;9vrB#JcJTA3j=JApS9oqDuUT@KBdapZkyt`$n7j|YAD+$^8tRX=4zht=I8jbw>gHWH*jsoE z2uR!*XN1ROk|}sEN0F;@q}C#ZDx0b=6z5bT60woLVG#B?p;h#D5QWxc9QIo-7IUp18*Y zaPfW3bFzoW{V~c^6ZiTO;&R;Q^1|A525mIg5Z=~vq&2e2Db(}&Gev&vk~Jj#9w0k0 zk!kpQjvqdU=fVUa5h7ENna%%0?jeS3n+IA&#wq1D!p6{^BbKj^z%gk81D9ebj;!`5 z2^NgCTW4EcVnr^ItpZgPAYD`bnexd5cF10m3lRpHPTs_#y3Xu2>cbs**CNiXzLecy&ucIbRLo&8ev;!k!Nko$ zLfkSzeW_qnBmSau@iA%|aY$koyajiyvJr%JB*=3Ik1}7z!ygOL$6PTmosaN1DI4`x zU@MHel^+^oCyyJ_JsmR(rD-yYFs?xkj3w@AKbL|7m*9dgJATi}`%eIl*l+yfsqr2h zA%LPHAz}@*9fM63eRINL5T!xiG9*h;py(q>0t&%TgEPM&g@XVdHWO z>Wyu?Apg3q-u1QhsR0m}k~Y%$y~%k6`O2otIw^%4 z^n=1GUz%0WqfG{l4MmEyH3lzZswQa^PV2hh7Q=BV`07|2_RocJpxN%HftR)y%}RS8l1H zAQexiujD){ZN=s@h(>!^^S2xHY*?THwkJU@`}sde}f#2gJfzj zj*dwuhhPGF=qwEwaT71c&yQ)q52Rj%8!{XdL z0DEQ)%YQq~)JOU7+~PKG$%T3t-+)1?Xt0wZ6utVI8sYZnFf;i?m0iWn%2%?>*~p?7gCSSk{lA`p z!;74@cergJyLV%qRWDkqUc{~Ehzy+ZG06DlAx;b7v}1H#SGp^XW@)+l=k!q%e|-d| z_rQ$_>rbz$Q%;Inp9BPF$VWj&+$6x3Ey{aj3;fK zB-iCXPMM+Du&nn~o2yOrgSJdC&EBQqRxB|04m*eL0xLGvpKM-06-rh`=N8kM-Y}e| zDV?5RBCc3q?}Qz#Z~q{5xOHSaVi&0o|5~Qj2Xr|2PcC0T&frw&&%KyO>=d*9()s*y zR{mg1yh#tL&0EN9T2I$A7PkEJ0IM@tJ#DU(9YJhB7o zvP)XlAVRMm{=eCKA2=(kYXAQ^=gj{mpAOrGehCc%gs62=Qib{dzRTBp0 z00YAe%pZXS9TWfD;wGt?sTH?Ot+c3XWrd1nCJe?TK&IDhJM~ z@p0%)O?q2ihkcyn2u}*=`pj4Ri$Ly(>5O`-|7Tz710iB3?NSI2Z%F5LsX8s+ z?#Gt{4cPnT^oeK@-Gx-=L^wsdHqhwRaD!q<#&l+q9?=6uR4rZ?s@q8RIcGuTP9NV#N$NUFxdf)&fyZc|iv*+%(2J`Ld*aN9CK*0m) zoR)C7mPTH3nVpq6TxW<<_|Odx5TeB_Xs1IS6pQdN%ugKukUT-tw?zijE(CuK#e=`Y zgIm~g;j%KhC{^}H*T?r2`J>X+rf%cw^(f9`339ICLwZ;+{;bNQC~ufV?8Ag(qD_g- zR1+~;6+8!_$b>vN80~AFFJlW=l4q77Re?B$;>{dM?fKyQFvTGMVOltNI>X9fdgabE z&=yhYPA5(zY?wdHK7sKTe8~=GgZxPJUG$Y=hXpVT!)(G$R|#(kK*ecmDX27BkeuSe z!YHcTuMSE#00C^oB=d(4=?o4qsf!@WV68A07)gH^vWi!Ogde+$RoLGH4(!(j?pFbc z4>$^XgM&FC1V#2EU{L6*fB;nK0|Am->#e6HW=VsrIxSytG6Kg*ey3M5YPB@;Fd)Gg z0cpnOR9X*bBq@52?~=`_0tc#n zPSEqxQ|LF-wJ2n$KXx(yO+LMy6pC5xPfdY6)p^L=UGeNifiTr^ee zxjmXH9=i1b59!R_Y`}{O7#{4;20VEi0rkON=1Vub>{h_cU{5yS_8$;X9X#_y7{gD4 z1eD9n@0!e5ppt4MFE)0~w4UnI9<=~EZ!I{zz0j{lD$X&f067?kfuPF)4{{+93xzXM zG?cZ_VtmH@(Q>C(y8&53+Zl7i;`0PxI!6czehcgn3Wv8q-o~N%hAt%iP|`ESNIqB2 zE`8u%onlqZAZA?-MWM_wqU)aP@9=!Vo*}PVG42x@%N!snF44N#@K@~m(BPmO>uM7H zpG9mN%gir+e0v)D8ut89e<(xTf{mdGzrZ>k<_ntIe!qw&8}h@d4x?&-A|`AAf}pVL zHJhVg+y$|It3%2#9{>WsXS5&=WmZRd>L?L55oPt0t$=w2W)P6!T9w|ZqrXyYf%V5c zz)%|hK)PyCdYahZG5&Zshf#Dv)dqhQoI^DNQ4JRXZFukm=qrfPb#Rrrr1`~!P$9W2 zH9e%_iuMw^W1aV#jR=n1SP1arM4XWm5pv%rBFHpc+OSkTPxL#fnLJ-a9y^QYjS!>R zWRxJI21g50Oo`F_Q4@bLk(w<3jfJTxdhRPq)zOaQ3=xk@rQ`GTN8QE?InsiTmJZ-5 z{EP5afAj!Mlti=!&SC3~4x~gT#Q*r7Und8$#x(m30R;KT?$35u-GlZO4(qEHYM}Lt z=Trb9ge4?3i!o+mDW4!u0G2|lL;E~$7iXS@7F58hl=@mRBWukME8q|IVuZ*5#-Wz09a?3uR`c~zd^0HLOdVI zeU&N#g;~shRiZDxqc4L(0&*uxLE0V@rh5JqIUqDtz-2fYa1)FQEy^Gy{;Y_8L?opL zwji*BErScxt@cOBI=k9WpITYwr~LH#pjN&O;)k#~>mf4nc_K5igw%bmJO(j-t$M%+tM5-$Kz}_jp;r%3r_K32 z0KcmqhylPE{q{gCzX!1QhLJYjacoe~o*FAAc(PoC-ADC@-7~ERj7mD9-qQo>;r^(2 z4}dv(%?Mu(fOAni2f)ys!vHu!@z(?}*e#4U0NX@u0PY{fdjps{^#L&07@_#|egWJE z#SOspEX?^>#*YBpGgm@}&f>mIjiTOjrC)CV9{PI7M-PBwPDa^944p-!HGi#*L1e-WTq9)p=DmZnW6AkktYzSw0Q`txt^>v1UE2 zwL1JZ4oYha;6ez6qahB?Znos4s~!RZoFby_=4+cN7LrShTtddiEVi`aNx~SY&nYYd zSPh8X^n7%>npsk|qf5&J#!q&FO|cvZ;Gq1JgjLoTh>&2TRBjagVkUX2_J>KZiwiMJfM?xV=R|J5D)C1U2{~Kxbe=DigbLH_VoC5r+Z03c)(vJ2bDE-fe4gK1Q{-gVTJ!bR z6vcaMisD&KQ4IU4{xwCBh(D_-s_Iu$L} z67#8~G(`nHnj-Mj<$&nOA3G)h$lX)WPq=}MwBK?%iGlAA1l6n?M>X`+K6f=bgt({6nBT#$Q z3U;J*l!ecq)6%&3CJ|*WH!V#RAV1X;APEMH~l}OUy@0)9brwX)J43m=NvHztm6Nl`fL5rQmXR3mvU4 zQ!~RBs&Q&)!anmnr?O0%DRSvg+at9G+8*T5@BpUmDUP%^z!k;KN$6ItOqVbZrUzY; zF4c1g3QrzI{vgyn>;{Yy6mw{oJ{+?>g@IF~@9Fis$R0O!L&A9*Xgl%GE;+t=8V5Ts@S<$m*f^4mYRslY8r-ESA$lS(F|<6f;<9 zR=BuZY9-S{J#^~>5-#q^286=Jz1e_JxcD4eonFGlr?LT$6E~O?bY}xZCCKz)9+rfP z9!{5K6^?XSL(ydo^~?REgi>XG#pUR8QsA;C;1L9{37vlDNT}`UfjiR23eJU!RRC)d z>!Bv@EisQ_KeUzWB4fcIGqr=+PmgB4z?jfyVu$Py!5_(aUgL5wsI@A-x2F@MJV z6lU-wrRdoFn2G%3Soi1v9P&Gh;ThB7At5ysmTjhnN)Hvk;L?CW=%X~IhybCYp6SH7 z;%l@OrhEsZi>A0eemnf)y)bsX*cV%`K$E1xdoZu9La z27q6A4v^&bg6)(GTuG%$?_g*a`eoW@t{MVY|{?Q(#;_e8? z4EhwDN*RR7pqNIK`Ne*@1hPG?#J5A5Y7r?v0g0LK*$JIW0IX;pyOyQLE_cnNUB;)S zD4lj$j~4l50!8ui6uKV2R5MMHUo2>9&rPvkseXlx3%1 zDiFtF>ZPtqoU1pko+Y#8n+dOWs!kZvxPR>Y#Ex^JVe#`eO9tEXsoEbQ>aPQe>?~j{ ztrDqtxs_0Ip6{sy%<$DfO5jZ;l=LcrB-CL3xtE|uq!3;QU(%}_BJ`94Co69nhD_pi z+1E=%Q>EGtWopMB*Mr4kDzYuHe9&2xBDvV6J;Np^-q7>eTa~sEJSoc1=&8zxO?|a* zn64i}ZEF0&XfoYXW_t$mhqe4ZhG6}LE4zLfiGGx)P>x>e(}`YHYFwm6jY*4YBRR;? zq7H?n-y@n}8b7qC3c#94t;}jsV?OG?Ta9v%Hp_1)Dw`^lHo)a9&jm4;3rPpPYFh8o?pmz43S%Rz501Jm(j%v*nl~*rMpp+4{7+rj{UB$6?Tk#ya_MS1=xRU0LZgRxfgaMV6Ws#}d&;Yzxjl6-x5 zxpYF+PMF}pEv0d&ymRYa2_nHd01w!A6_PQEPE-DvoNNHiMWo=_V&0<*B<(j9wX2Wn zQcZc*$tGDyEhK#kVZw-96&?$i5#_Ar#tGx3fVX+Yq-i~(HludCL!=TQ? zVxHA#btLae`C({6ee6l7lcTb;&ZP}eFykmx=7~&6joaTBWIg?UiIY5qphebYKvhjo zX%c{LhKfjTJ_ki}ly@UcdDnl%$Ro^ggl3%)WCewWfmBBg4Lgb#NqlTw%;bdajXH_Z zu?IS08<$Kca&?AE)c6bhsvNbdDnWIN}z+@``^cnRs|K)?sq`p06g+Z}8Nh4?U_w8j6EJ{@DUcm;K?@n-A+TbV9}{2q01%x9a)-XfqSb?`JtRE*f)T_oFstUA~b`U%YFOdUKuC*qSFteYS4CD!?- z?wt{zr>J{kqJTB=mr5Yuqx^}G8wR1w17g80G@|u9_ZCTOjOkagw8lo=Qsed9TZC4a z=M%-I6_)i!RVu|O&L?!Cicv~zNAiroWp%fG2^=GGWPD!FpBNaX4YOOQhUUdm!-)ck zb$S?^xzc_N@X_erbJj?kvz#I~ciO6Q#v6V#ZCMP>l_RC#8lKhRR-ru94BF4kmCl*D z++-^KOE}N;QsCyQ51C;4C~!5wpuM#jWRJABOvP9vZIFqM*aRIZZNffmHeDrp^PLA>6e1$InZ4sf}kWdhK2R?`c# z7|RHf7|RH>27zk7MgcPN$!7|BgO<9OYAXxcu=8lDpQ|_ov`oRw7_z-#!j9%{4#J7( z{z$21M?!_ri{pSxm9&N^!1}_|X$_f`bKyBk)AFd-falPZnem}7%AzU*U+}CFljY#a zxIZjBu_Ef>unq%HX5kJ20idJMQm?)(uI2@dWJ~^ zo>hp`aloZo@I1O7DiA_ZT(FIQSvJJ%4VVsnO_)}}vqGw0efX32-v`qWgL>nrhJPMR ztAwLRHvApmZq|i8aP5}_7@mT`23O_@;F^*wCgG?2(b8l%#VadW<6hEWVj74WgE^R} zB+=;4Ckzqb;am;}czB;4Gcm8)IHmk$h2w6maF!K5h5HmfQp<{h_&k54V@5~PNzi6T zL{N$d=|>9bXETMcP)X70eODF@;mV?BeR@K6WiebPM_&5)h>kEO{2ISuG5<{v5kbSD zr3n@ZgrDA*h|KOqpQ($G{_kD|jBu31Rska-N+LZE6T8-kT6BT^(JFxKt-}}+whBPI z#NT*~zryZ0e7}&B8wMH>+2Ju_A#A>k$NEl>Kzpb^ZV}wBtprTop(O#!JN6H8Iu;#( zS+Nv+#n9J$_H0ydjyB|GSr3lN;bvXv;n_0QPyO-#tPBqG1-7i;FNfn~Wxp=whh?+a&Em?Z;-`OvR@94vD*@v^*l;jGdwSFu;57*Hm>bb!5UpK%a z{yXj1m~`&4C9NUq)_`W87_9+Wyhx75Nb$8O_FoHz5{CSrUc;o{1Q@b-_9OZx$&=p$ zJOH#lh4?$>`zBjsv5>Q1(E3|;0e-JaWJipRid2fBmm1;5rVdSviTz~0W_U8YdGtWa zEEpnlhS9Pgk|e{gp5*b_3>zS$>k*5P7!Fug4I|8?0VEo2h75j+31>8s`IOQp4ctNE zn5!rysFmE^NgS9k=~Kt3F@Rsl4qxJH1(dZ+V6K*B0;VFO&wI*3%LJlv@ib%JMtK&6 z&F4jMkgu<0!m!{;ZmGwZL3Cf)Vrnx!?$1mtl_nYy?^6A@+#fb2b}n>$7^-2+5C~$Q zq#kCfJxsd`Yxw9k7mneLy@m7>aF#|XHP#YpHJXk35H*MEAODy`Spg*==m6b3W+k#=34*(rZ39>>60bq9T4YMNTUb048 zpuJR#-q%$c?f{lsLGG1;r~)y%I7)gAAYa& z&OJg3sUPnCsNRyiA)? zQlRLFSqkO^I*~&dL~?Ju0@xiNJgbBBrBsEc@R8m099g2=?0^%-oXbF(5}n0O8?_->n$7y!`_98FM*~G0G^FWn~QXDqPsqok*u z0B>-xcQ-v;N#k-Z4YARMA&rh{Z%JcE;6zrkDt_zO`Qn(hHe z^xS2FC%nRBFXPZJLgW;1q#2A;Zi%k<2M716HkdbX@`Bq)AART!2XXEP!QpWdfGUH$ z@Vc-fuvW#&E!2DZGJex97c#kkHLVfDoM z4xD^g*E@fQ>WD&b+s`$JND1YZ=$jjnYO-^YW)|s^(V4y{7Tj^?eh5bL`!T|FAWZq~1MED(_&ojTpxK+K zo^C#k+0}u2U=$o(_942-cTn8C4g6>FMA1}^92p;r-g)EiuY2mR*j^En8oP7h$<|b4PL=wnl{k!=g|p zndjw1V}OHlVgoXVN*9EOdvSns@3z4s+38kcPSxyMf&Ap<)>E$n%dL>ykS=jBP+o5E zbndJyvqrXD(jcaF;|ta|1qL})Z7WlVj(k( zxL0!fpyf@2)ofK%XPWiNDXOTNo!nzUN7iO(hcmx3YU|@Iequi7SvBFi8q|pmd^LiHa%^jI)shlfFL}* zw3r>klnS3h;X36nTDY5d7ImfE9AYhODjaC>#$GI8)MA| zAuFd-oQ>Fg@9m~lW*prd1G@`P#fFV2b~++8#-dEMBRJ9-`R6&dpNLk=S3)BIU1&3K_s zw9Sr|Y`-rx>$p5xlY`fl;8$8&Q2D^v1`X#~K)?hBE zK|-F%kH>uK$sK0Qm0Y2URSU#iwqghVZNF9x-TI(aLlm$(KVVOOz}_f;^Vx2_k6exp zUc5id1@;p|>zGX?Tx|voaZq92grj4SJ3ki8p3xpc<+n^cwub`(?&yX|E(eR1 zS8rJ|Chu2Gh$O?&GZF59iiprgsRx5&z5Ot$(Ra+&1W<-CP|F3V@e>Z9HcN_YeG(V~ zRc03rKV6Q_MA^WM8a(^62Vm+zEPE5D!Qm`~F~CxBdlRK%hK-g^aAT~c2oQsTJ*ad> zcVcMCi+3jW@5E$HPHS|vSjZy?1;xscM6WTh(IUJW3sGJ}L@R~rA&z2EzJCu8ClB(v zHGI`^n0+Je{8~2Rvk$sgMWjx^Kxg+@#wCGw8h0ss%QoMIUGm2ZFD)NS)>^3M-h4;H zA!eHG0Bmwl1BJRSR`Tlolfh`1m?LQ3 zsZ1a$CYJnD{1j%aas(QOuZUG+g!kHUivEr`qyCOKrGH19lvh58IzvdI{Xz|O@em84 z^R#+pC1y9Tm5(D-3l*R^|7ZXG>^FY$_4mDh<`qEYtKa(5ZGZdHRlhjsU9od%wZNQ> z_rnid{pV{QdGF76U#f_Y{rqb;@A~e$yASn^`00CZIC#r%KKRj(Tg0or{r+EH@%zv0 ze%VFLEqV8U{qqm5zx>yC|Bt5}fB&OjUi;)tPuyN_B@c7;2IIo1EjpOn@V;7+#ungV zu4l#Z5fZeQg01$YX@gYhd_!7|Foei;9CrTutVp^H1kdpiC=)olN_JVn8 zftD;r>d*=G! z==H%?gq7=qEjpJ{V~I7ZQOvlb+Xklc&&0DQz$5pJ(>mHmPamKX1ScB9}x!yJ9j=nr^AP359?HaU!3%c5Kzt>1nB};L|avJ5?_2VQxN=S`{H)JYycJ|XXyxL6XkHoBYXgt(g+Fk=fjoC zzNa|2=NC4Y>ol_B;O@u+^I#((h;J5?DTHI*5gQcKA#lYojBBkNMn+ORE_fsPfQK%< zJ&3ofOTk^_choTGiy@`kBSgL}kLVYrUdDBUfR(VB@B3jLbZmynTI+F>9b+}|RO)58d z>COY_5p^-Cv3B$d7=7~Vfkd$Zw-*pFZ{FLhHJB2>kS8bV)EUa8_qPXI4JwkTY?df- zE2k%sDIXJytFiC~0Z)~x4H31%vf+s4#NC&e2#3%H!jN11zn(k{B9zqj2$OO!3mHSAsr)1 z+H+_3AxN-$zffqnI}^QNh4k2VXJS!10&fGN-SdKuHgN0z@CvXZyFO7#?fOJ^QrY#1 z;Su;p>58ZqJg$YETKtA_NJXsEA35JCZB6>V|ZI?Z$58}M0;tDa0r_;>Z#gs zP`_%YT12%|Euwb@r)shHo3B+1SE6d+N>nWtX?pG3+9+?8L!(qY6|s})k%qYfcfV${ zU1L?CD_ZwMyP|cW)gp~~8X7!H&6D@CatJ>B1;+OA$jMB1Dq5vUpdh+t2r?#VKy;~H ztt4uHAl)$Ob={)!Or73};XYuQzWLL(DVNLB> z%(@soOI<}_^-Y_?sZ|%e*&G-7>CL&h-5XA))(Ox4?3-8Ye*B7`?Qq#X@Rz?Hc;vdz ze>YIB1E?DLLOe82x@nVn&Uga><`^d|(py@#U{Ppg=x7~Zk&;R{&SMmoQ`STU;e{S#ZMk#`I!_MC4&@*f2wy~j{ zi9tc}6(07Zs9OK33 z@n^JOs%Mt2p=!(D4AF)^Req3cxJxfFj|#9ecNE+%>kckmz|tfh+AYbviS39< zHVDrzxH_dPd}%+_SgJh?O%Mjdn?;r-mLJ~&DvV_bgSBr#GvEAjAU3KIYcwV!RV&Bt zrMFj1m^a!Z>S%*`EZBF&eu*)_xne$PnM7B_f*ao#1)KNTYkGOF!qg!sQzHBN(OY_b zee&axmyU}C*YC$0M>b+{_kTO*BY=E#KXKsd)W^XikA*%}Q}`cC9$j9_J1-O1c$N*l zDee+Hbj1TM`R`*~rWB$?D$c4o#0OiJz@)%gvL#xN;c4u#;;cr30z2Lly+k{GT%@|% z4Z?e*t`Kv;st%@GM$ukk9(BmY6)ZlaKoY7H=AufRB^Otok0S_|~iMrK9F}dBU*2lP)i$N>M8t|UL0K!0NaPG$E`qjJ-Biam(Qjb~Oeb@~3 z#FYh+i(6%|4qk*B05HZ6XCr&ngJRHyT?M(OG0`Xk&JqwN#KL0W=awiU6lP?86;%WnVVvu`Euf9vxxGPT?+TxUWEE8c)_v_3N#3) zy<{mo3Q$rxAxeRx4)l%&FTE2mZxMkjUt>r`;7wSRVp1#?tAtCn3K5P6qv%MG#f(V` z)JQuR(JXj|i=N1u3W^G_VAWYIvzk#hyl}VJRdgz1j+99|Y)JsS;V7^KD{i!2Cd&rd zRjNv)l{kd#Og7>qA_XRYQ6VK_*@;98By&-*P%2+^Tbbp;&Orv)?RQ{_>&ziKlLlK( z>3DcI2?Q(|-2>tvXL%+te&CC{U5Co4K+zeQ5J0aD|GK{n-b{(`?|Q6845!M}481m# z-y=a6@Qb5BOG-N#nuw4E6q3airJ|JoF_5KlQKgBHr?UsdQ7Tp?HC2P z@a^f6VEg7Y8^_c=a8q0tM|PA@9C%BBCO$5V3x?{h-h`qe|5}fj5^BCdp>!e8v+{J% zLFq+CA|#6GWYAN4iw<{)WCh$%(c--S7TF=BN2oZz;uY3_;pduB-S!W31aeOdx8MqB2%Ux=5>0iG>wii%^dSfjiXP0H}rmH_hm_JXYr6Yuo3p8pzrl)I$`>8IXcH z;4(Nlw&lf-><{Npn@(^4DBb~C2IygV2WP!skoV}U_eyz_S?~My;5{bmy+L0GWxY>* z6K_e@`>ec)toPTwy-&((3kESsnx4G!@6C#jgFVh+ff8t8d@t?h3+O-7Ie3rmexfWB zr@Qx>G^uMNA-Eq)AJb!hmIw}b;nl1OO?fLp)ZO3F>gfXB-cQH^Wr8hMeZ0xuYMCzP z1u_2^LRsB&RdHoO74MjBQEsjNn~vQfHHpuQgZG?|k`{sBWei>83N#&1w!ppF0>wg7 zQ19&7GnJ5;k4^e^Sr>T?1-re4?kF6ovU+{wI4op^DXqlGZY~d?F^gQn7Ve7*l%R4Q z;bFPCjbb=U?Y@M>Fl^M{KZfN$j|xsDDyU8mGSEahW?{xjb(W(*x187snc_#Vo5kBw zg646-xVU2n!9^f_g{XZ6@QFd}p4nR$gYR9H2l`oW8cMRtBm@KwQy29HyN0^iJ?6ceK$J?LaT=zU() z>zIP5pHn5E-5v-o!qpyBqB0D%0r8mF>XP8OE8!Z3fYM@FN`lL-!Yj^HRkvA}AuVf) zVkSG+H0EEEIbpe%@+bl0kC2%Y_C$ZaC7_^0yikoS4lsQ5j7frraH9i84mcW@rVH?# zS~7S6c9+6ZT)7o3gEcLLN=v4p2JcwklL!=~zWQn7jqSLJVq0B`KeIepi?aMBsg#Up zE@@HnD#+~NzC)DC^Yg3pNJ5|ecT^MIHcNg(B`Q;$Ej#58RIR$kDHW@)Xtb_vWF3g; zs~{M&-ig?aO%=C#=dK6nwV^r=Gc@Oa{AvVLzY(-JCu=5qOt^jT3PtjH138uISvttr z+~8OhK6HKZMN7~(|L0u(D!V5aPD0v6kDEA4W?m&dbS1p-EDb_CrZ;Vi3C;Q`$S-)q z2P~+xFH*=7qZhBIHqnj_x2u3i3U?E+?^uhqN zoSG~PXKhB~+yoKK5?XDn5z=hd-P%q^Od;`UQJe z1|d(Aq`Uw9GHOJ9sCHTK5Unpu)+=lQ?3B)}h37NMP!Ol47K1|+_+HDFXdbgtV+b9y zo=n(!rX8YGyUbbpa%5u}y`dH#MIPxCUd)P*hU}%eiPpo)K8X2vOQfY3;2)*;WO|@@ z#44X8ok}%GmIHhko{IZNGpJJI6Ha`j6PMT>?{P6*o#%1zoeukr`J!2gd4ZSrNxbOM zSY955B19^iQa>erO97PP4>4W@mi%ZT8%HeJm-YS-4&Vhee8<;+7RXt zm*;v^4#<>sy4z9fQ>Cs)%2P!-P-g<*PmB>)+HzMP`*x4gf@_pNW_>D6^G9t+RgiuZ z6{Ac~g%|i~$euNl=RzoBS~E;qy`uVqj2qGwwge~%Qx!>!5jK^!xTC4U3Ug+zPxA}d zVGWt$t2SOkL_BwlBYAoLQ7RS4=&EBipZ78ARf!59&C`%V`40?1Sxh~uD+`?#ZGdaM zZIVtXh)jZq-v>qbsz}lhYagZ1I)E@FcryEml7oA)zN1w;&c{kYRMb}_u|A@Q{2^-9 zNOcrBf`p4e4IT?bfSea4j|6)h`Mpq^%3-TffI}(bRdE3}qG6bDOQ6AxyrItNv`VsI z&?ruDHv`AS{ggt;1{X2S99j+vDxY#-A&Hi>QLxK8JE}+vF1k_uqrvTk+9{Sj(oV_9 zV}&}X1jUnI+-@=BQOvk>OvR>>QhZZM6%)0h(?v{J#F8MZmm+u5OIe!sbOl14hv*<` z3#%axx`JImLGfaqwHpwHxm%@K=`nVKtN-NzM>n)6r9FVj>EhxXQ>nVgvv64g5sEw3 zMI;4J@K6LDFx=4-V3PBf7e=ZCVyIx(`yT+@@XLQPE0fA8o)`S&7ATE&8kxm!NtIt& zL+I1@{pJq^3oBX9rz)_NQI8aIQ6R56_gfT_kodyNqx>k7g_WfiSvAEZKOPAPT0|`c)kd#1akR_EMPXd*_P=gNzq0*GfDYgPtQQUso;`BiZ5l{4Z zuMjopnQVx#EIq*2wl1pX#pfl2LKR{RJ)dD?lvZQ99CQMiLRkS5jc{y$a4ha{45L?Y zj6@-h4G3{eD|v8Cy<<2A+3)nrB|06zmR$8HF%8E!(-o9be8VvnEgVxshhy-2k?xZ; zhGUk-#Sw04G3o_h7dhY=;$1>vU>a9|QP)&y=ua2BYtc$=o`L>h^G%ziF77>URCPCQ z*jr;-U2#;jNyEX~BuwXMNvawT+eA!jlUl3raNMxa4ci1}S>ua)+C&;_lci~As&nqc94q=N)oDVAIKe)F{-#bC&Xizvi`}2sBXE1 zmj@3ZG?C0~m?@4lFb9Ll(QqAX#FarzE}DSDp~_4H>!oUx!6rMNzD$o2m@stM1w7b@ zOD;qRuQ)Gbds%9LLc}52QHZ?3srqG8JkFyHiZ$B?$>FGnCn zs|Wa=EIDWgJcC&x`=y#!NdPI!&a0q+CUW8gd$Z8Tzkz)r<>l#8O-QlSATlfkjKO4M zW(ScgL)8l=gRKm+QfQ|SWlk{V_~rYZ{YNyz7Ww6(6r2*Q{)6N^ZReU5h+tp_A{qw~ zRJB5a5!rqeqn8jL#v;xrhGIf76ccJdV3rg{(`{%5Qf_2}#MR>^b+fq5#&cfsu@->7LYZHE|heP z7?C)ErP&CTl~}2}N(#p(R;pUVRV~Xb%xAa+QkI!p%oBr(S!Q8Cp{|3tfb2#)GZTuR zRn9`r^h2tj`lyhA;jV61OT>9BAhZ&8(l9d}>(v;Gxvxtmi;Ss2F=wg?@+R6$p%swz0aHIvOj>xO%bSBz_o$p~A zt->xMYUghL?q37_&fXQ5lKMze_L-&R5eH5=}Ek}RGbXqyq=2@XHrb+ z%uNyns0r`9*`7xVMZ$yu@i+YLK!eR?41I#3l#@}LeCDCV?fJ7OAEFT}dlyEi$;;`5v4YgC6gf$cUcaLTw zU=MqM9Mw`U*!kcCv>CZ}Agjsj85q02ODkkOWyN5kms6nD1;QzWfNna8>l{H%+j}1; z)jp+?S)KW0xux^sMXR`Q0Z@>YlZzatM)&kzqdnOg4HTqMaQeJ>y6&z72p+WFuHkLs z`ru{r0CY)|hr8l^9^edu)-ek3Wn?y#x0t<2D#L#CBEtpkhYOyiA64n-&7;LKjFnJ> zX9*urPv2wGV#U(lwd7vAL{kDjtC}JX=B`5}p&;y8zKdQBdmY7#z)(z?#iCmX>-a{( z4asj}!vIMF-Khhg{bFrlWl>#BIi$Y_jThq|oFtu4La~T9K0a84ve*$}p{-Q3tj(xA zFBNGmR;WRRRYU>QN63w|yCiLvsg%4SHOR!@Qo6!Dn0`s(G@oq)lblxB0V0w@kbQNg?sfe*aV<`|!2V@#C24WfjYZC=njHEN>r%}3qSGzbt zH&s$iMi$L`g|kj5N$aL5lToLMy`CiK^NW*zF{CA7*u?%5QZ;o|?}U;U0|yOU4P%`R zVdRHeJAx#Nqa8C0UonW*>kI+-&BQ!kdtD@`0aWRt{b?4Hx@f5c(E&^m67}3q^PEUx z)MgE^Y!np5J*mSe1G7=cL+6~5y-YS(Q`y4L{$sJ`7D^^BC<^>j!IRPrL1DS2;S zF=Tn+Y_AY)V%V_;FoqL(fON(Mj(Y*$g}DHg+0S?M^%OcVc2+NAYc2d)T(Ejz7LTaC z?TAi9Gf7r26kH2M$k(NrYAAPV0iDQ)qo#zM>Ql{?CVp^%Oj{NxD0oa93`<$Ri+{W2 zTl+nZRI)P#p3wW=Z$tION(Eo%EvOA%Qh=s_0Q5;nPR(x9eThWklG00K+mos2I2=(M zFd0JZ2x5i&AqU~7D;Ie7d**9v(6}OD0pIKz8QpYq$YX0|<%gmuC$9#>D))j!^Chdd z-=(?leqps=xxi8$divz1>iI0){K`f)-Z;WnNYO0C<{v1&G_C(H*^zcTHhI6C`$ujM zxKgGiRf0jkB69zUVr$bV(RpO!``ooc2)~jY_Sm#shSnsyoni6SKOC>Mckv>^U>hJ_ zrO6xMt$=Q-OplWCR4KSw5*)hyhhN5Ip3YJBRt3@@`dH!Vp#R)W!JLJPbRGAopT4qLV*rr<$W# zWNDeM9M|}SaQ(v7@Uf|Kg_Fuw_l}E1peNS;z5d(2QTMDZ>R!$~1PKa#5yzTh8m5T^m>NskP~>O`Xkct-L6H+v?R_?S!t*oYUCS zmD!TXY*^5^t>e_T_P6)svazkTbDc}p(bmd$i%Xm{^r5M7+sWj#wyk|z6clC?dADU6 z+r#9R)jOIy*O3dK|A{ZXa#TR?3>DIopM2Ro-r;H+<^w{<45{5Sp65^G`3v&=g?av> zJb!VXza-CJn&&Ue^OxuOEAsr6dHw-;{(*V^B>t1zx>}lA$94KmnT||*b7M>MyE1-r z{d9j#d)r38(VySEc5!Q`-`3UH(cENT8XC@6eCFiI#NjPC*I(7v)!Nk2Z$4dz&4({x zKJG1>52_e%cRXqR07dfzBfZ4s z(ld|b@9j(9_}@9pkL2&%bB^TiymR09--Q<($=}Kg-}qnCsw4UHygL~S`c1~&QRv3S zmiFe(=GL`-`LN5yu?%WXl}g-`rqWYWLnpD zuJb4Q5$t{1UgF|b^VB@l)U~Olc{R8aWk}d8zKLc>`E|8!Xl>il>R;5z#KI)9a%Hb9 zy$izl8+i)0eC}KagW)&gTHB&@9Z|ep#1l?6uIbExCZKj(>+*FO?{301_kKBi-WNXM z0yOR0WWSAB|0%)~#Cw{jaPpU7yaS=%*a*U-^cAHp-!;wc9i1JS)ora!o$H$0o7S{- zwRf&-Y3%6qyfI;%@jNx(PYM0gLw^HLl|?0}PG?u9!)n#kYA>DZy4n@6roEZ}I~qZM zJ(*A&w|U;WFppNA;vKqpibuGFr{={g!|%I7|Mj7NS;*5Z$aFIDJO07qi6ISHyk7z% z@eY6GDLgJHb2vMMr(iphr(ivnr^d!~o{E1OPvPh}JjIKw<9RgCi+L*Edw43p4}{@& z@YGoNGEc?-Hc!!&AM-qxXAk3fhB)9xzaz7`OHB02uGTH>jhj|H$?I(@Oe3Yl^wz{#kwXM@{T)jHe(cw4x%h$DM8k_tj zZL1qw{AHbO?Tu?Q3_6&2zp2Zn5h$oxtC;B4W?GrY>L*XL@|hP@tamHr zuA#gcIKgcq&aFug9r7z#Gu^}CDdqQ$n@V^z7fj=QI_^m30+pwqXmCC5jl#3PdF@8( zeL8tY^BN##vFERJi>ZbNhix_ESNhDqjsD6rS=X&}NMKW-I0I()j5-FQWVEz@dgysC zQkH%`E_y$AfSX%{c-u0aJu`l$slfu^S+ZOJ0gdf`OWWG!)h(o}C7&@o1?%MiN9!9^ zGs^pJzKOO*Wkhk$BCggEk$)-vNjd%*_|H*Zjjc^S&nQ1{priK_JG2(oWC`CwnCL=R zYiDx{{)zZS=cBw=lh=v(Z57<%Yf{=qG;ay(KDJ0Sxk{5lQApju8n@qQrY}Q z6v73s1)S2e>Lxn$EN8)N5%LHM8PHwJ-F)+oOgP^x59gaxZN6C+&Ns_!zHtNG&zn5d zR?$PjKy!}#(eo+V_zT=`aDTx456(+6H{lvP7;?tciThM%Z-ld$djfQ>WzA$bjGFO{ zot>GDn>xj{u5W8@^_yFHTiphJ8lCaCu*MfJ;-Bbub+9b8<>s3*Ho)b(spBHr@*$ko z*^z%Q@1plJanTr`#rtgBk&JOnckKtdcyn-XN;^PN5w7indXI4%xNic{d`*U*cKnpG znV!7=WFQ`wIh|?qCfd(UZ@hK-T0lWx)w{`l~Yj#x}S@X3AE78iRZH zQAwMJ&dx3n!WDzbEg~dt_Z}kNDC%)?TPs7eL#qq}PlNAy&+$!jGn3ou_GXi5)r|L> zJDBY@wP(cKHq8O`GSPBnX=8gwCR`ZIC7o!G+zGf%`qu91FcBozVr+$5UXbS+CekLy zjS*M$LUfh0hARo3x90o`w_cUxGUW zmmBxYe*6l1Axx|JcPZ{|IHi3%j?r!HU6$uxj$dID2PeI=d5X5a19vX&pK#~lw00A$ z&c|JVs~D2>-pTVq+zOoDSK=CR6LE^Gc)9*4?e&zS_^WWaX;S|;ZNVvA`E13pB=O#bi}HCrWBVUcy4NSO zd*d>?w=X>s8QnR{k3>dy?m2HIp0NdwC;%Fi?+${I4FND?6V|pPBbscMmS4G@ine<(?`6` zKgQ{+$=YAvxXh3Jk8%2XNA3UHacT?L4qNVfFAR5Uv>O;VMYzcS3Eur2|9;-ZCq~~N z;eAMs|0&*;ex>GQsZagm{RLeJ(&08)SHpL%v6=gSgC*ZI!tvw#VLpzdPOoF^M^$cU z5N+v@&QENM)9<}Cbq|3=cT60aH2zO~r{p0$m2raCyy|$j5PuZ$qIBX-L~lilGg~{` z8&`K)CqF?v(Zm{@_~*z!o_FTwM|p_P%JpB1e*!Km zfOX`1+&Dkv1(mt2a@RIr#5xyX^G!mDapTsFa&yR5p2NxGdY)Q`-^??{Q~I8*4Gm#a zJ#Qc3YG?F}>J&YH!MEJHy^!ZWj!Y$&tN}3nv{_({#AM#_e$wW(6Nx_-hstT~S{6T1 zJ6$tXL*_E#Rw<6^%d-W4Va_wk>#VNMv(~&_9P;9go7zxStZEU@drE6t*V=W9onm5n zTiddAZS9>rm$bF6o!{7mPc0 z2a)3aX;6;%p{e;IDYsW`^WTL|fmr(W{cc?q4d;G<t*s@)ig)Eoq?0KpiMorYFu)cPK%GzC{=9F{8>kNg ztW5}3P`o_Fcdg!{w5!)OYJ^zogM2H``Q{d_zBe@OFmBa0SdPZ_c4;JP2vd8yTAMqa zkkIqyhG9-x<{3=lLr)T(qLA6_G08 z=ra)RbhT&R1aKoJHeK}8S`*^0Sh1!6&m6zZ0<(oUBf_J zfhcu6b&B%ogbZtZtZH1nLGvZTh{jFon^5QUCUj9_>$Y`mTPA5p%$#k#l#y27CT7n+ z&Pj1T&7jwK+)w-TYw$hqM!pHR%gRoMsDnk{K)f@b5 zYZ@?U>*ZIvXNW6&khJPXoJv&RYo&A(?q;0NPj&Fdx%v#}sk$hf-`@@K@o!@1H&O>l z@;Vv(BX~ys?VlMw1;3j7p$y1IFgW#Vat|APdUdgSGXDf&V{uVoKjd9(U*!K4??>nOf1Brj zG0z{PfZWCm#;?Y_l>jvnJ`lZUf?Gm;oAM^$BEQkwY9Nv>swjBsKd`a z-gUSTOr03{BLs;25dyrGbuyUA_UrE*oz(X^>Yw4+#K6`BwDQbGxc2PYdD8#h+PPH) zPmxSb%af2-^FB8*X(ICvz=3HA&FDCy-y1bBoqr_urKc@=HJR6Iean|}y*~dxWMcpS zk%<|8JMoohiI^dgd@($t@ox$3=oxmJzr31S$EZI-p(cXBuV2A{fu-?^$^pe?>=++d zT9&9BFfdkLQCU=4R{myvBfGaWf7O}lzGd}~V4_l@_cs$hxp}^YxDd@ACYYT*HR-LT z|F`3`aO*ze-w~1TdEMP_n1Y8jKcbxir*(H9!CrwSs=^WN7g*ZeeFQrO-mdbGXxG3w z-Q7pDZ{XbS?jzVaaGvUaM7swr?Cw5-{R1mi{t@jVfOS7I{C~sP{}2A<^=jh(p?iP5 znt0}iH>Bd~U#sN(WtLMby(M!UM%AVhgzNEVJ9Ss2wt7p-b9`3r(#G3Oxod#ga(JzP z=VV+-L!?mHgvJlyZmzu&-v{$usuOl(M4B0=;gP0FxwG)?T)j^6-sV=am`?l};+seL zNmY_DMUEN5A)v<8y>}K(q?wpagH;qe7g{^AlANr*0(Q~6k+>Jc`f#31`Ci0uaZ!*6r{A&5tg}nG z>iNy&H;dnFehvKQ@SDr;1b!#-JBgoIw}79Ru#@>M;CBkYQ~53Aw}{{3@OK)&)A=po zcLu*R`JKgYDZjVzdpo~n{Fd`Oo8LM7-ofu&e*eVpJbvf%yMW(2`CZ6w1;3U28u`5? zh~bbjqP1E8&Y0)cf2%+NDQhCXWQI~|ME;GuOU8UAyI#9ivsJ+MF$uLj?-BBld^Fg& zs(Ec!TUSTU*NJ9*p^3q4#kK#yJ3xHNOUnbNcz#QonkQ)VDNAzoZz6b+T=_iQ^@Ks< zy|b5}?Cs%QvY6E^Z5^8BP;0bpK;eODI=cpuT()e}JmxlNt;(oDP3>))Hfg)q^7dw8 z(z1?qY~wor*>2R{xMc;3BKodkzEcw2LnE|y zKdr+KdXQC#w~lX8z;5EHHtP2|TtVnQ&+~QAQSaY~A1S@==KTw}FXGAq+u&v<(b1OQ z9tBP-hAfTm+O`60*+7Mfe}MX=cuI+OG%i0)R;5VvHq_p3ud0+Z$U*FCOzUp3({Amt~2m)gHbN z<@+jN)L)&ibkU_DnSjhuzsI9qGD8Ft&=a9sZpzjJ zOAE^_^;9RH{JF8>ji&(@^IO{QD+)-6n$NuuUO%~cVte0!#&tEDr4D~mwT-K{8ENvaS(LQ3>j|Wno;dOg*K_@%U%CD@_(fwQ*!>;bV6%C*kxpvy zsH{!Ai%v)WcHY(JkzaF5RgS-t_hGmODjCJO1b=QGn#YdAMc*~2<>vVw{EKtGzn6EJ z!A9}rpMpC%C+x$#&%jL_UvuKz<0j0D;=Ws9Iq`P#J{BjLKosYyFzivD!X3HCaM5?Q zc@b{Kinsq=eRxr=>%V2EIhvxmLUV59SKV{{$LIOa!(W42xn?66Z&oD0 z(0J4gYqhLs^j+jrZH>=BUP=1g@$fkQsQlA;my96t3*MTKHg&ablX1z#lXlcb-$nwA zI=)4`>ubpgqI7knlYAobPshLTb>!0^IYmQ*nAa6uooi;XzwiX#$1J7iybjpCb&VHg z{5oHflZpN+;9##E{uUju!3h?vP1m2Ev~8{5;mOeSzRNSs^N&0S<<##2>L)yo>iahQ znyY1;s_bPjI;**^zIobI>YDoLsTC}c zdh)xU{Di|%{v(+HHD5=59VerDMgB4Pg{P7KD*USN#gW}l$2P=ATX$R>@<#AxEzKJ- z^fWu6Ow*2&#xY6FJ(1HA&VOe^!^I(g-LbBDW5a0dyL>TF+L?z%;~c+fTdR*fKTKTX z8YE3yH52&hsO%@0m?u$o+F#RJ<4-!#rz_Spwy@M~@5)^4U+nuk8vNR=*}8rUKr8;_ zmX?b)PX4=w4D5v)GgqFG^fVq;;j|8l{LQ>;%xLb@?_xneugSUN#VvbQE+f_w!6nml z>c-BX3FAM;hT##+DF*~KG5P0?lkbvuROT}J%=#$G

LqEq;Ni&-n6ko^ryiLg;lF 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 literal 0 HcmV?d00001 diff --git a/server/web/src/asm/asm-9dbf0d2_bg.wasm.d.ts b/server/web/src/asm/asm-9dbf0d2_bg.wasm.d.ts new file mode 100644 index 0000000..89f82a3 --- /dev/null +++ b/server/web/src/asm/asm-9dbf0d2_bg.wasm.d.ts @@ -0,0 +1,10 @@ +/* tslint:disable */ +/* eslint-disable */ +export const memory: WebAssembly.Memory; +export function show_detail_in_display(a: number, b: number): void; +export function find_schedule_date_time(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number): void; +export function __wbindgen_malloc(a: number, b: number): number; +export function __wbindgen_realloc(a: number, b: number, c: number, d: number): number; +export function __wbindgen_add_to_stack_pointer(a: number): number; +export function __wbindgen_free(a: number, b: number, c: number): void; +export function __wbindgen_exn_store(a: number): void; diff --git a/server/web/src/asm/file.txt b/server/web/src/asm/file.txt new file mode 100644 index 0000000..e69de29 diff --git a/server/web/src/asm/index.d.ts b/server/web/src/asm/index.d.ts new file mode 100644 index 0000000..c7a3f04 --- /dev/null +++ b/server/web/src/asm/index.d.ts @@ -0,0 +1 @@ +export * from asm-9dbf0d2.d.ts diff --git a/server/web/src/asm/index.js b/server/web/src/asm/index.js new file mode 100644 index 0000000..5b52be8 --- /dev/null +++ b/server/web/src/asm/index.js @@ -0,0 +1 @@ +export * from asm-9dbf0d2.js diff --git a/server/web/src/asm/package.json b/server/web/src/asm/package.json new file mode 100644 index 0000000..5ba0b8b --- /dev/null +++ b/server/web/src/asm/package.json @@ -0,0 +1,14 @@ +{ + "name": "asm", + "version": "0.1.0", + "files": [ + "asm-9dbf0d2_bg.wasm", + "asm-9dbf0d2.js", + "asm-9dbf0d2.d.ts" + ], + "module": "asm-9dbf0d2.js", + "types": "asm-9dbf0d2.d.ts", + "sideEffects": [ + "./snippets/*" + ] +} \ No newline at end of file diff --git a/server/web/src/components/date/date.tsx b/server/web/src/components/date/date.tsx index c9d7bd5..7a65c59 100644 --- a/server/web/src/components/date/date.tsx +++ b/server/web/src/components/date/date.tsx @@ -39,6 +39,8 @@ import _ from "lodash"; import { Alert, AlertTitle, AlertDescription } from "../ui/alert"; import { string } from "zod"; +import { find_schedule_date_time as findScheduleDateTime } from "asm" + type DateProps = { setEvent: (details: SetEventType) => void; onDropDownChange: (d: ScheduleDetails) => void; @@ -139,7 +141,48 @@ export function DateJsx({setEvent, onDropDownChange}: DateProps) { .toDate(); return temp; } + const onSubmit: SubmitHandler = async (data) => { + try { + const temp = preProcess(data) + temp.scheduledStartDateTime = temp.scheduledStartDateTime.toString() + const params = { + details: temp, + previousScheduleDate: dayjs( + dayjs(temp.scheduledStartDateTime) + .subtract(1, "day") + .format("YYYY-MM-DDT11:59:00.000Z") + ).toISOString(), + startDate: dayjs() + .startOf("month") + .add(1, "day") + .format("YYYY-MM-DDT00:00:00.000Z"), + endDate: dayjs() + .add(14, "months") + .endOf("month") + .format("YYYY-MM-DDT00:00:00.000Z"), + } + const res = findScheduleDateTime( + params.details, + params.previousScheduleDate, + params.startDate, + params.endDate + ) + console.log(res) + setEvent({ events: { scheduledDateTime: res } as TimexEvent}); + + } + catch (error) { + console.error("unexpected error from webassemby", error) + } + + + // setEvent({ events: res.data }); + + + } + + const onSubmitWithApi: SubmitHandler = async (data) => { // data.scheduledStartDateTime = typeof data.scheduledStartDateTime === 'date' ? data.scheduledStartDateTime.toISOString() : data.scheduledStartDateTime; setLoading(true); const temp = preProcess(data) diff --git a/server/web/src/components/page/home.tsx b/server/web/src/components/page/home.tsx index def22ee..8d5d85a 100644 --- a/server/web/src/components/page/home.tsx +++ b/server/web/src/components/page/home.tsx @@ -24,8 +24,8 @@ import axios from "axios"; import { Highlighter, HighlighterLang } from "../highlight"; import init, { - showDetailInDisplay, -} from "../../../public/pkg"; + show_detail_in_display as showDetailInDisplay, +} from "asm"; import { useToast } from "@timex/components/ui/use-toast"; import { Alert, AlertDescription, AlertTitle } from "../ui/alert"; diff --git a/src/lib.rs b/src/lib.rs index a15f1a4..c7352ab 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -7,7 +7,7 @@ use chrono::{DateTime, Utc}; use crate::extract::for_details; use log::debug; use model::ScheduleDetails; -use wasm_bindgen::{prelude::wasm_bindgen, *}; +// use wasm_bindgen::{prelude::wasm_bindgen, *}; pub mod errors; pub mod model; @@ -93,57 +93,55 @@ pub fn schedule_date_times( }; } -#[wasm_bindgen(js_name = showDetailInDisplay)] -pub fn show_detail_in_display(_detail: JsValue) -> std::result::Result { - let detail: ScheduleDetails = match serde_wasm_bindgen::from_value(_detail) { - Err(e) => return Err(e.to_string().into()), - std::result::Result::Ok(v) => v, - }; +// pub fn show_detail_in_display(_detail: JsValue) -> std::result::Result { +// let detail: ScheduleDetails = match serde_wasm_bindgen::from_value(_detail) { +// Err(e) => return Err(e.to_string().into()), +// std::result::Result::Ok(v) => v, +// }; - return std::result::Result::Ok(format!("{}", detail).into()); -} - -#[wasm_bindgen] -// #[no_marg] -pub fn find_schedule_date_time( - _detail: JsValue, - previous_scheduled_date: String, - start_range_date: String, - end_range_date: String, -) -> std::result::Result, JsValue> { - let mut _previous_scheduled_date: DateTime; - let detail: ScheduleDetails = serde_wasm_bindgen::from_value(_detail)?; - - match DateTime::parse_from_rfc3339(&previous_scheduled_date) { - std::result::Result::Ok(v) => _previous_scheduled_date = v.with_timezone(&Utc), - Err(e) => return Err(e.to_string().into()), - }; - - let mut _start_range_date: DateTime; - - match DateTime::parse_from_rfc3339(&start_range_date) { - std::result::Result::Ok(v) => _start_range_date = v.with_timezone(&Utc), - Err(e) => return Err(e.to_string().into()), - }; - - let mut _end_range_date: DateTime; - - match DateTime::parse_from_rfc3339(&end_range_date) { - std::result::Result::Ok(v) => _end_range_date = v.with_timezone(&Utc), - Err(e) => return Err(e.to_string().into()), - }; - - let t = generate_schedule_date_time( - &detail, - _previous_scheduled_date, - _start_range_date, - _end_range_date, - ); - match t { - std::result::Result::Ok(v) => std::result::Result::Ok(v - .into_iter() - .map(|x| x.to_rfc3339().into()) - .collect::>()), - Err(e) => Err(e.to_string().into()), - } -} +// return std::result::Result::Ok(format!("{}", detail).into()); +// } + +// #[wasm_bindgen] +// pub fn find_schedule_date_time( +// _detail: JsValue, +// previous_scheduled_date: String, +// start_range_date: String, +// end_range_date: String, +// ) -> std::result::Result, JsValue> { +// let mut _previous_scheduled_date: DateTime; +// let detail: ScheduleDetails = serde_wasm_bindgen::from_value(_detail)?; + +// match DateTime::parse_from_rfc3339(&previous_scheduled_date) { +// std::result::Result::Ok(v) => _previous_scheduled_date = v.with_timezone(&Utc), +// Err(e) => return Err(e.to_string().into()), +// }; + +// let mut _start_range_date: DateTime; + +// match DateTime::parse_from_rfc3339(&start_range_date) { +// std::result::Result::Ok(v) => _start_range_date = v.with_timezone(&Utc), +// Err(e) => return Err(e.to_string().into()), +// }; + +// let mut _end_range_date: DateTime; + +// match DateTime::parse_from_rfc3339(&end_range_date) { +// std::result::Result::Ok(v) => _end_range_date = v.with_timezone(&Utc), +// Err(e) => return Err(e.to_string().into()), +// }; + +// let t = generate_schedule_date_time( +// &detail, +// _previous_scheduled_date, +// _start_range_date, +// _end_range_date, +// ); +// match t { +// std::result::Result::Ok(v) => std::result::Result::Ok(v +// .into_iter() +// .map(|x| x.to_rfc3339().into()) +// .collect::>()), +// Err(e) => Err(e.to_string().into()), +// } +// } diff --git a/src/model.rs b/src/model.rs index 2331f87..78909ff 100644 --- a/src/model.rs +++ b/src/model.rs @@ -2,9 +2,8 @@ use core::fmt; use chrono::Weekday; use serde::{Deserialize, Serialize}; -use wasm_bindgen::prelude::wasm_bindgen; -#[wasm_bindgen] +// #[wasm_bindgen] #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq)] #[serde(rename_all = "camelCase")] pub enum RepeatEvery { @@ -14,7 +13,7 @@ pub enum RepeatEvery { Year, } -#[wasm_bindgen] +// #[wasm_bindgen] #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq)] #[serde(rename_all = "camelCase")] pub enum MonthOptions { @@ -69,7 +68,7 @@ impl RepeatEvery { } } -#[wasm_bindgen] +// #[wasm_bindgen] #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Copy)] pub enum EndOption { #[serde(rename = "after")] @@ -103,7 +102,7 @@ impl EndOption { } } -#[wasm_bindgen] +// #[wasm_bindgen] #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Copy)] pub enum DayCategoryFor { #[serde(rename = "first")] @@ -157,7 +156,7 @@ impl DayCategoryFor { } } -#[wasm_bindgen] +// #[wasm_bindgen] #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Copy)] /// List of weekday in a week pub enum WeekDayForMonth { @@ -220,7 +219,7 @@ impl WeekDayForMonth { /// Schedule details contain necessary field to process /// and contain to generate scheduled date and time -#[wasm_bindgen(getter_with_clone)] +// #[wasm_bindgen(getter_with_clone)] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ScheduleDetails { From e0895fe2f67167043aeaa8add3b3a4d366f30721 Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Sat, 3 Feb 2024 13:21:10 +0530 Subject: [PATCH 02/32] react: removed unwanted public assert --- server/web/public/pkg/README.md | 2 - server/web/public/pkg/package.json | 14 - server/web/public/pkg/timex.d.ts | 210 ----- server/web/public/pkg/timex.js | 1032 ---------------------- server/web/public/pkg/timex_bg.wasm | Bin 139252 -> 0 bytes server/web/public/pkg/timex_bg.wasm.d.ts | 45 - 6 files changed, 1303 deletions(-) delete mode 100644 server/web/public/pkg/README.md delete mode 100644 server/web/public/pkg/package.json delete mode 100644 server/web/public/pkg/timex.d.ts delete mode 100644 server/web/public/pkg/timex.js delete mode 100644 server/web/public/pkg/timex_bg.wasm delete mode 100644 server/web/public/pkg/timex_bg.wasm.d.ts diff --git a/server/web/public/pkg/README.md b/server/web/public/pkg/README.md deleted file mode 100644 index 1015043..0000000 --- a/server/web/public/pkg/README.md +++ /dev/null @@ -1,2 +0,0 @@ - -https://chacin.dev/blog/getting-started-with-webassembly-and-rust/ \ No newline at end of file diff --git a/server/web/public/pkg/package.json b/server/web/public/pkg/package.json deleted file mode 100644 index fbae5c5..0000000 --- a/server/web/public/pkg/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "timex", - "version": "0.1.0-rc.0", - "files": [ - "timex_bg.wasm", - "timex.js", - "timex.d.ts" - ], - "module": "timex.js", - "types": "timex.d.ts", - "sideEffects": [ - "./snippets/*" - ] -} \ No newline at end of file diff --git a/server/web/public/pkg/timex.d.ts b/server/web/public/pkg/timex.d.ts deleted file mode 100644 index 781a8a2..0000000 --- a/server/web/public/pkg/timex.d.ts +++ /dev/null @@ -1,210 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** -* @param {any} _detail -* @returns {any} -*/ -export function showDetailInDisplay(_detail: any): any; -/** -* @param {any} _detail -* @param {string} previous_scheduled_date -* @param {string} start_range_date -* @param {string} end_range_date -* @returns {any[]} -*/ -export function find_schedule_date_time(_detail: any, previous_scheduled_date: string, start_range_date: string, end_range_date: string): any[]; -/** -*/ -export enum RepeatEvery { - Day = 0, - Week = 1, - Month = 2, - Year = 3, -} -/** -*/ -export enum EndOption { - After = 0, - Never = 1, - OnThe = 2, -} -/** -*/ -export enum DayCategoryFor { - First = 0, - Second = 1, - Third = 2, - Fourth = 3, - Last = 4, -} -/** -* List of weekday in a week -*/ -export enum WeekDayForMonth { - Monday = 0, - Tuesday = 1, - Wednesday = 2, - Thursday = 3, - Friday = 4, - Saturday = 5, - Sunday = 6, -} -/** -*/ -export enum MonthOptions { - OnThe = 0, - OnDay = 1, -} -/** -* Schedule details contain necessary field to process -* and contain to generate scheduled date and time -*/ -export class ScheduleDetails { - free(): void; -/** -* Order on which week to mark as schedule date-time -* - First week, ... Last week -*/ - day_category_for_month?: DayCategoryFor; -/** -*/ - day_category_for_year?: string; -/** -* End date to stop the schedule date generated -*/ - end_date?: string; -/** -* The type of repeat on how to recurrent schedule should stop or continue. -* - Should the recurrent stop [`EndOption::After`] on given recurrent count time. -* - Should the recurrent never stop [`EndOption::Never`] -* - Should the recurrent stop at the given date [`EndOption::OnThe`] -*/ - end_option: EndOption; -/** -* WIP -*/ - month_options?: MonthOptions; -/** -*/ - month_with_day_for_year?: string; -/** -*/ - month_with_week_day_for_year?: string; -/** -* Number of time the schedule generate -*/ - occurrence_value?: bigint; -/** -* schedule the date for the given day. -* -* - For example if value set to `5` the date will generated -* as `2023-11-05T00:00:00.00Z`. -* - If the value is get to 31 the end date for the month will be always -* has correct end date month. For example January => 31, February => 28/29(accordingly to leap year), March => 31, April => 30 -* -* # Panics -* -* If the value is greater than or equal 32 [`crate::errors::ScheduleError::DaysWithMoreThan31AreNotAllowed`] -* panic will be thrown -*/ - on_day_value_for_month?: bigint; -/** -*/ - on_day_value_for_year?: bigint; -/** -* Repeat calendar bases such `day`, `week`, `month` and `year` -*/ - repeat_every: RepeatEvery; -/** -* Number of time the repletion should happen -* given value should be greater than or equal to 1 -*/ - repeat_every_number: bigint; -/** -* Schedule started(initial) date should current day or greater -*/ - scheduled_start_date_time: string; -/** -* Similar to [`ScheduleDetails::week_days_for_repeat_every`] -*/ - week_day_for_month?: WeekDayForMonth; -/** -*/ - week_day_for_year?: string; -/** -* List of week days [`WeekDayForMonth`] -*/ - week_days_for_repeat_every?: any[]; -/** -*/ - year_options?: string; -} - -export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module; - -export interface InitOutput { - readonly memory: WebAssembly.Memory; - readonly __wbg_scheduledetails_free: (a: number) => void; - readonly __wbg_get_scheduledetails_scheduled_start_date_time: (a: number, b: number) => void; - readonly __wbg_set_scheduledetails_scheduled_start_date_time: (a: number, b: number, c: number) => void; - readonly __wbg_get_scheduledetails_repeat_every: (a: number) => number; - readonly __wbg_set_scheduledetails_repeat_every: (a: number, b: number) => void; - readonly __wbg_get_scheduledetails_repeat_every_number: (a: number) => number; - readonly __wbg_set_scheduledetails_repeat_every_number: (a: number, b: number) => void; - readonly __wbg_get_scheduledetails_end_option: (a: number) => number; - readonly __wbg_set_scheduledetails_end_option: (a: number, b: number) => void; - readonly __wbg_get_scheduledetails_end_date: (a: number, b: number) => void; - readonly __wbg_set_scheduledetails_end_date: (a: number, b: number, c: number) => void; - readonly __wbg_get_scheduledetails_occurrence_value: (a: number, b: number) => void; - readonly __wbg_set_scheduledetails_occurrence_value: (a: number, b: number, c: number) => void; - readonly __wbg_get_scheduledetails_week_days_for_repeat_every: (a: number, b: number) => void; - readonly __wbg_set_scheduledetails_week_days_for_repeat_every: (a: number, b: number, c: number) => void; - readonly __wbg_get_scheduledetails_month_options: (a: number) => number; - readonly __wbg_set_scheduledetails_month_options: (a: number, b: number) => void; - readonly __wbg_get_scheduledetails_on_day_value_for_month: (a: number, b: number) => void; - readonly __wbg_set_scheduledetails_on_day_value_for_month: (a: number, b: number, c: number) => void; - readonly __wbg_get_scheduledetails_day_category_for_month: (a: number) => number; - readonly __wbg_set_scheduledetails_day_category_for_month: (a: number, b: number) => void; - readonly __wbg_get_scheduledetails_week_day_for_month: (a: number) => number; - readonly __wbg_set_scheduledetails_week_day_for_month: (a: number, b: number) => void; - readonly __wbg_get_scheduledetails_year_options: (a: number, b: number) => void; - readonly __wbg_set_scheduledetails_year_options: (a: number, b: number, c: number) => void; - readonly __wbg_get_scheduledetails_month_with_day_for_year: (a: number, b: number) => void; - readonly __wbg_set_scheduledetails_month_with_day_for_year: (a: number, b: number, c: number) => void; - readonly __wbg_get_scheduledetails_on_day_value_for_year: (a: number, b: number) => void; - readonly __wbg_set_scheduledetails_on_day_value_for_year: (a: number, b: number, c: number) => void; - readonly __wbg_get_scheduledetails_day_category_for_year: (a: number, b: number) => void; - readonly __wbg_set_scheduledetails_day_category_for_year: (a: number, b: number, c: number) => void; - readonly __wbg_get_scheduledetails_week_day_for_year: (a: number, b: number) => void; - readonly __wbg_set_scheduledetails_week_day_for_year: (a: number, b: number, c: number) => void; - readonly __wbg_get_scheduledetails_month_with_week_day_for_year: (a: number, b: number) => void; - readonly __wbg_set_scheduledetails_month_with_week_day_for_year: (a: number, b: number, c: number) => void; - readonly showDetailInDisplay: (a: number, b: number) => void; - readonly find_schedule_date_time: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => void; - readonly __wbindgen_malloc: (a: number, b: number) => number; - readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; - readonly __wbindgen_add_to_stack_pointer: (a: number) => number; - readonly __wbindgen_free: (a: number, b: number, c: number) => void; - readonly __wbindgen_exn_store: (a: number) => void; -} - -export type SyncInitInput = BufferSource | WebAssembly.Module; -/** -* Instantiates the given `module`, which can either be bytes or -* a precompiled `WebAssembly.Module`. -* -* @param {SyncInitInput} module -* -* @returns {InitOutput} -*/ -export function initSync(module: SyncInitInput): InitOutput; - -/** -* If `module_or_path` is {RequestInfo} or {URL}, makes a request and -* for everything else, calls `WebAssembly.instantiate` directly. -* -* @param {InitInput | Promise} module_or_path -* -* @returns {Promise} -*/ -export default function __wbg_init (module_or_path?: InitInput | Promise): Promise; diff --git a/server/web/public/pkg/timex.js b/server/web/public/pkg/timex.js deleted file mode 100644 index 48d03ad..0000000 --- a/server/web/public/pkg/timex.js +++ /dev/null @@ -1,1032 +0,0 @@ -let wasm; - -const heap = new Array(128).fill(undefined); - -heap.push(undefined, null, true, false); - -function getObject(idx) { return heap[idx]; } - -let heap_next = heap.length; - -function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - - heap[idx] = obj; - return idx; -} - -function isLikeNone(x) { - return x === undefined || x === null; -} - -let cachedFloat64Memory0 = null; - -function getFloat64Memory0() { - if (cachedFloat64Memory0 === null || cachedFloat64Memory0.byteLength === 0) { - cachedFloat64Memory0 = new Float64Array(wasm.memory.buffer); - } - return cachedFloat64Memory0; -} - -let cachedInt32Memory0 = null; - -function getInt32Memory0() { - if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) { - cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); - } - return cachedInt32Memory0; -} - -function dropObject(idx) { - if (idx < 132) return; - heap[idx] = heap_next; - heap_next = idx; -} - -function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; -} - -let WASM_VECTOR_LEN = 0; - -let cachedUint8Memory0 = null; - -function getUint8Memory0() { - if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) { - cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); - } - return cachedUint8Memory0; -} - -const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } ); - -const encodeString = (typeof cachedTextEncoder.encodeInto === 'function' - ? function (arg, view) { - return cachedTextEncoder.encodeInto(arg, view); -} - : function (arg, view) { - const buf = cachedTextEncoder.encode(arg); - view.set(buf); - return { - read: arg.length, - written: buf.length - }; -}); - -function passStringToWasm0(arg, malloc, realloc) { - - if (realloc === undefined) { - const buf = cachedTextEncoder.encode(arg); - const ptr = malloc(buf.length, 1) >>> 0; - getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); - WASM_VECTOR_LEN = buf.length; - return ptr; - } - - let len = arg.length; - let ptr = malloc(len, 1) >>> 0; - - const mem = getUint8Memory0(); - - let offset = 0; - - for (; offset < len; offset++) { - const code = arg.charCodeAt(offset); - if (code > 0x7F) break; - mem[ptr + offset] = code; - } - - if (offset !== len) { - if (offset !== 0) { - arg = arg.slice(offset); - } - ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; - const view = getUint8Memory0().subarray(ptr + offset, ptr + len); - const ret = encodeString(arg, view); - - offset += ret.written; - } - - WASM_VECTOR_LEN = offset; - return ptr; -} - -const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); - -if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; - -function getStringFromWasm0(ptr, len) { - ptr = ptr >>> 0; - return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); -} - -let cachedBigInt64Memory0 = null; - -function getBigInt64Memory0() { - if (cachedBigInt64Memory0 === null || cachedBigInt64Memory0.byteLength === 0) { - cachedBigInt64Memory0 = new BigInt64Array(wasm.memory.buffer); - } - return cachedBigInt64Memory0; -} - -function debugString(val) { - // primitive types - const type = typeof val; - if (type == 'number' || type == 'boolean' || val == null) { - return `${val}`; - } - if (type == 'string') { - return `"${val}"`; - } - if (type == 'symbol') { - const description = val.description; - if (description == null) { - return 'Symbol'; - } else { - return `Symbol(${description})`; - } - } - if (type == 'function') { - const name = val.name; - if (typeof name == 'string' && name.length > 0) { - return `Function(${name})`; - } else { - return 'Function'; - } - } - // objects - if (Array.isArray(val)) { - const length = val.length; - let debug = '['; - if (length > 0) { - debug += debugString(val[0]); - } - for(let i = 1; i < length; i++) { - debug += ', ' + debugString(val[i]); - } - debug += ']'; - return debug; - } - // Test for built-in - const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); - let className; - if (builtInMatches.length > 1) { - className = builtInMatches[1]; - } else { - // Failed to match the standard '[object ClassName]' - return toString.call(val); - } - if (className == 'Object') { - // we're a user defined class or Object - // JSON.stringify avoids problems with cycles, and is generally much - // easier than looping through ownProperties of `val`. - try { - return 'Object(' + JSON.stringify(val) + ')'; - } catch (_) { - return 'Object'; - } - } - // errors - if (val instanceof Error) { - return `${val.name}: ${val.message}\n${val.stack}`; - } - // TODO we could test for more things here, like `Set`s and `Map`s. - return className; -} - -let cachedUint32Memory0 = null; - -function getUint32Memory0() { - if (cachedUint32Memory0 === null || cachedUint32Memory0.byteLength === 0) { - cachedUint32Memory0 = new Uint32Array(wasm.memory.buffer); - } - return cachedUint32Memory0; -} - -function getArrayJsValueFromWasm0(ptr, len) { - ptr = ptr >>> 0; - const mem = getUint32Memory0(); - const slice = mem.subarray(ptr / 4, ptr / 4 + len); - const result = []; - for (let i = 0; i < slice.length; i++) { - result.push(takeObject(slice[i])); - } - return result; -} - -function passArrayJsValueToWasm0(array, malloc) { - const ptr = malloc(array.length * 4, 4) >>> 0; - const mem = getUint32Memory0(); - for (let i = 0; i < array.length; i++) { - mem[ptr / 4 + i] = addHeapObject(array[i]); - } - WASM_VECTOR_LEN = array.length; - return ptr; -} -/** -* @param {any} _detail -* @returns {any} -*/ -export function showDetailInDisplay(_detail) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.showDetailInDisplay(retptr, addHeapObject(_detail)); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var r2 = getInt32Memory0()[retptr / 4 + 2]; - if (r2) { - throw takeObject(r1); - } - return takeObject(r0); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } -} - -/** -* @param {any} _detail -* @param {string} previous_scheduled_date -* @param {string} start_range_date -* @param {string} end_range_date -* @returns {any[]} -*/ -export function find_schedule_date_time(_detail, previous_scheduled_date, start_range_date, end_range_date) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0(previous_scheduled_date, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passStringToWasm0(start_range_date, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len1 = WASM_VECTOR_LEN; - const ptr2 = passStringToWasm0(end_range_date, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len2 = WASM_VECTOR_LEN; - wasm.find_schedule_date_time(retptr, addHeapObject(_detail), ptr0, len0, ptr1, len1, ptr2, len2); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var r2 = getInt32Memory0()[retptr / 4 + 2]; - var r3 = getInt32Memory0()[retptr / 4 + 3]; - if (r3) { - throw takeObject(r2); - } - var v4 = getArrayJsValueFromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 4, 4); - return v4; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } -} - -function handleError(f, args) { - try { - return f.apply(this, args); - } catch (e) { - wasm.__wbindgen_exn_store(addHeapObject(e)); - } -} -/** -*/ -export const RepeatEvery = Object.freeze({ Day:0,"0":"Day",Week:1,"1":"Week",Month:2,"2":"Month",Year:3,"3":"Year", }); -/** -*/ -export const EndOption = Object.freeze({ After:0,"0":"After",Never:1,"1":"Never",OnThe:2,"2":"OnThe", }); -/** -*/ -export const DayCategoryFor = Object.freeze({ First:0,"0":"First",Second:1,"1":"Second",Third:2,"2":"Third",Fourth:3,"3":"Fourth",Last:4,"4":"Last", }); -/** -* List of weekday in a week -*/ -export const WeekDayForMonth = Object.freeze({ Monday:0,"0":"Monday",Tuesday:1,"1":"Tuesday",Wednesday:2,"2":"Wednesday",Thursday:3,"3":"Thursday",Friday:4,"4":"Friday",Saturday:5,"5":"Saturday",Sunday:6,"6":"Sunday", }); -/** -*/ -export const MonthOptions = Object.freeze({ OnThe:0,"0":"OnThe",OnDay:1,"1":"OnDay", }); -/** -* Schedule details contain necessary field to process -* and contain to generate scheduled date and time -*/ -export class ScheduleDetails { - - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - - return ptr; - } - - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_scheduledetails_free(ptr); - } - /** - * Schedule started(initial) date should current day or greater - * @returns {string} - */ - get scheduled_start_date_time() { - let deferred1_0; - let deferred1_1; - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.__wbg_get_scheduledetails_scheduled_start_date_time(retptr, this.__wbg_ptr); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - deferred1_0 = r0; - deferred1_1 = r1; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(deferred1_0, deferred1_1, 1); - } - } - /** - * Schedule started(initial) date should current day or greater - * @param {string} arg0 - */ - set scheduled_start_date_time(arg0) { - const ptr0 = passStringToWasm0(arg0, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len0 = WASM_VECTOR_LEN; - wasm.__wbg_set_scheduledetails_scheduled_start_date_time(this.__wbg_ptr, ptr0, len0); - } - /** - * Repeat calendar bases such `day`, `week`, `month` and `year` - * @returns {RepeatEvery} - */ - get repeat_every() { - const ret = wasm.__wbg_get_scheduledetails_repeat_every(this.__wbg_ptr); - return ret; - } - /** - * Repeat calendar bases such `day`, `week`, `month` and `year` - * @param {RepeatEvery} arg0 - */ - set repeat_every(arg0) { - wasm.__wbg_set_scheduledetails_repeat_every(this.__wbg_ptr, arg0); - } - /** - * Number of time the repletion should happen - * given value should be greater than or equal to 1 - * @returns {bigint} - */ - get repeat_every_number() { - const ret = wasm.__wbg_get_scheduledetails_repeat_every_number(this.__wbg_ptr); - return BigInt.asUintN(64, ret); - } - /** - * Number of time the repletion should happen - * given value should be greater than or equal to 1 - * @param {bigint} arg0 - */ - set repeat_every_number(arg0) { - wasm.__wbg_set_scheduledetails_repeat_every_number(this.__wbg_ptr, arg0); - } - /** - * The type of repeat on how to recurrent schedule should stop or continue. - * - Should the recurrent stop [`EndOption::After`] on given recurrent count time. - * - Should the recurrent never stop [`EndOption::Never`] - * - Should the recurrent stop at the given date [`EndOption::OnThe`] - * @returns {EndOption} - */ - get end_option() { - const ret = wasm.__wbg_get_scheduledetails_end_option(this.__wbg_ptr); - return ret; - } - /** - * The type of repeat on how to recurrent schedule should stop or continue. - * - Should the recurrent stop [`EndOption::After`] on given recurrent count time. - * - Should the recurrent never stop [`EndOption::Never`] - * - Should the recurrent stop at the given date [`EndOption::OnThe`] - * @param {EndOption} arg0 - */ - set end_option(arg0) { - wasm.__wbg_set_scheduledetails_end_option(this.__wbg_ptr, arg0); - } - /** - * End date to stop the schedule date generated - * @returns {string | undefined} - */ - get end_date() { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.__wbg_get_scheduledetails_end_date(retptr, this.__wbg_ptr); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - let v1; - if (r0 !== 0) { - v1 = getStringFromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - } - return v1; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * End date to stop the schedule date generated - * @param {string | undefined} [arg0] - */ - set end_date(arg0) { - var ptr0 = isLikeNone(arg0) ? 0 : passStringToWasm0(arg0, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len0 = WASM_VECTOR_LEN; - wasm.__wbg_set_scheduledetails_end_date(this.__wbg_ptr, ptr0, len0); - } - /** - * Number of time the schedule generate - * @returns {bigint | undefined} - */ - get occurrence_value() { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.__wbg_get_scheduledetails_occurrence_value(retptr, this.__wbg_ptr); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r2 = getBigInt64Memory0()[retptr / 8 + 1]; - return r0 === 0 ? undefined : BigInt.asUintN(64, r2); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * Number of time the schedule generate - * @param {bigint | undefined} [arg0] - */ - set occurrence_value(arg0) { - wasm.__wbg_set_scheduledetails_occurrence_value(this.__wbg_ptr, !isLikeNone(arg0), isLikeNone(arg0) ? BigInt(0) : arg0); - } - /** - * List of week days [`WeekDayForMonth`] - * @returns {any[] | undefined} - */ - get week_days_for_repeat_every() { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.__wbg_get_scheduledetails_week_days_for_repeat_every(retptr, this.__wbg_ptr); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - let v1; - if (r0 !== 0) { - v1 = getArrayJsValueFromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 4, 4); - } - return v1; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * List of week days [`WeekDayForMonth`] - * @param {any[] | undefined} [arg0] - */ - set week_days_for_repeat_every(arg0) { - var ptr0 = isLikeNone(arg0) ? 0 : passArrayJsValueToWasm0(arg0, wasm.__wbindgen_malloc); - var len0 = WASM_VECTOR_LEN; - wasm.__wbg_set_scheduledetails_week_days_for_repeat_every(this.__wbg_ptr, ptr0, len0); - } - /** - * WIP - * @returns {MonthOptions | undefined} - */ - get month_options() { - const ret = wasm.__wbg_get_scheduledetails_month_options(this.__wbg_ptr); - return ret === 2 ? undefined : ret; - } - /** - * WIP - * @param {MonthOptions | undefined} [arg0] - */ - set month_options(arg0) { - wasm.__wbg_set_scheduledetails_month_options(this.__wbg_ptr, isLikeNone(arg0) ? 2 : arg0); - } - /** - * schedule the date for the given day. - * - * - For example if value set to `5` the date will generated - * as `2023-11-05T00:00:00.00Z`. - * - If the value is get to 31 the end date for the month will be always - * has correct end date month. For example January => 31, February => 28/29(accordingly to leap year), March => 31, April => 30 - * - * # Panics - * - * If the value is greater than or equal 32 [`crate::errors::ScheduleError::DaysWithMoreThan31AreNotAllowed`] - * panic will be thrown - * @returns {bigint | undefined} - */ - get on_day_value_for_month() { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.__wbg_get_scheduledetails_on_day_value_for_month(retptr, this.__wbg_ptr); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r2 = getBigInt64Memory0()[retptr / 8 + 1]; - return r0 === 0 ? undefined : r2; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * schedule the date for the given day. - * - * - For example if value set to `5` the date will generated - * as `2023-11-05T00:00:00.00Z`. - * - If the value is get to 31 the end date for the month will be always - * has correct end date month. For example January => 31, February => 28/29(accordingly to leap year), March => 31, April => 30 - * - * # Panics - * - * If the value is greater than or equal 32 [`crate::errors::ScheduleError::DaysWithMoreThan31AreNotAllowed`] - * panic will be thrown - * @param {bigint | undefined} [arg0] - */ - set on_day_value_for_month(arg0) { - wasm.__wbg_set_scheduledetails_on_day_value_for_month(this.__wbg_ptr, !isLikeNone(arg0), isLikeNone(arg0) ? BigInt(0) : arg0); - } - /** - * Order on which week to mark as schedule date-time - * - First week, ... Last week - * @returns {DayCategoryFor | undefined} - */ - get day_category_for_month() { - const ret = wasm.__wbg_get_scheduledetails_day_category_for_month(this.__wbg_ptr); - return ret === 5 ? undefined : ret; - } - /** - * Order on which week to mark as schedule date-time - * - First week, ... Last week - * @param {DayCategoryFor | undefined} [arg0] - */ - set day_category_for_month(arg0) { - wasm.__wbg_set_scheduledetails_day_category_for_month(this.__wbg_ptr, isLikeNone(arg0) ? 5 : arg0); - } - /** - * Similar to [`ScheduleDetails::week_days_for_repeat_every`] - * @returns {WeekDayForMonth | undefined} - */ - get week_day_for_month() { - const ret = wasm.__wbg_get_scheduledetails_week_day_for_month(this.__wbg_ptr); - return ret === 7 ? undefined : ret; - } - /** - * Similar to [`ScheduleDetails::week_days_for_repeat_every`] - * @param {WeekDayForMonth | undefined} [arg0] - */ - set week_day_for_month(arg0) { - wasm.__wbg_set_scheduledetails_week_day_for_month(this.__wbg_ptr, isLikeNone(arg0) ? 7 : arg0); - } - /** - * @returns {string | undefined} - */ - get year_options() { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.__wbg_get_scheduledetails_year_options(retptr, this.__wbg_ptr); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - let v1; - if (r0 !== 0) { - v1 = getStringFromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - } - return v1; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * @param {string | undefined} [arg0] - */ - set year_options(arg0) { - var ptr0 = isLikeNone(arg0) ? 0 : passStringToWasm0(arg0, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len0 = WASM_VECTOR_LEN; - wasm.__wbg_set_scheduledetails_year_options(this.__wbg_ptr, ptr0, len0); - } - /** - * @returns {string | undefined} - */ - get month_with_day_for_year() { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.__wbg_get_scheduledetails_month_with_day_for_year(retptr, this.__wbg_ptr); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - let v1; - if (r0 !== 0) { - v1 = getStringFromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - } - return v1; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * @param {string | undefined} [arg0] - */ - set month_with_day_for_year(arg0) { - var ptr0 = isLikeNone(arg0) ? 0 : passStringToWasm0(arg0, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len0 = WASM_VECTOR_LEN; - wasm.__wbg_set_scheduledetails_month_with_day_for_year(this.__wbg_ptr, ptr0, len0); - } - /** - * @returns {bigint | undefined} - */ - get on_day_value_for_year() { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.__wbg_get_scheduledetails_on_day_value_for_year(retptr, this.__wbg_ptr); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r2 = getBigInt64Memory0()[retptr / 8 + 1]; - return r0 === 0 ? undefined : r2; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * @param {bigint | undefined} [arg0] - */ - set on_day_value_for_year(arg0) { - wasm.__wbg_set_scheduledetails_on_day_value_for_year(this.__wbg_ptr, !isLikeNone(arg0), isLikeNone(arg0) ? BigInt(0) : arg0); - } - /** - * @returns {string | undefined} - */ - get day_category_for_year() { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.__wbg_get_scheduledetails_day_category_for_year(retptr, this.__wbg_ptr); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - let v1; - if (r0 !== 0) { - v1 = getStringFromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - } - return v1; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * @param {string | undefined} [arg0] - */ - set day_category_for_year(arg0) { - var ptr0 = isLikeNone(arg0) ? 0 : passStringToWasm0(arg0, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len0 = WASM_VECTOR_LEN; - wasm.__wbg_set_scheduledetails_day_category_for_year(this.__wbg_ptr, ptr0, len0); - } - /** - * @returns {string | undefined} - */ - get week_day_for_year() { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.__wbg_get_scheduledetails_week_day_for_year(retptr, this.__wbg_ptr); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - let v1; - if (r0 !== 0) { - v1 = getStringFromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - } - return v1; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * @param {string | undefined} [arg0] - */ - set week_day_for_year(arg0) { - var ptr0 = isLikeNone(arg0) ? 0 : passStringToWasm0(arg0, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len0 = WASM_VECTOR_LEN; - wasm.__wbg_set_scheduledetails_week_day_for_year(this.__wbg_ptr, ptr0, len0); - } - /** - * @returns {string | undefined} - */ - get month_with_week_day_for_year() { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.__wbg_get_scheduledetails_month_with_week_day_for_year(retptr, this.__wbg_ptr); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - let v1; - if (r0 !== 0) { - v1 = getStringFromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - } - return v1; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * @param {string | undefined} [arg0] - */ - set month_with_week_day_for_year(arg0) { - var ptr0 = isLikeNone(arg0) ? 0 : passStringToWasm0(arg0, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len0 = WASM_VECTOR_LEN; - wasm.__wbg_set_scheduledetails_month_with_week_day_for_year(this.__wbg_ptr, ptr0, len0); - } -} - -async function __wbg_load(module, imports) { - if (typeof Response === 'function' && module instanceof Response) { - if (typeof WebAssembly.instantiateStreaming === 'function') { - try { - return await WebAssembly.instantiateStreaming(module, imports); - - } catch (e) { - if (module.headers.get('Content-Type') != 'application/wasm') { - console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); - - } else { - throw e; - } - } - } - - const bytes = await module.arrayBuffer(); - return await WebAssembly.instantiate(bytes, imports); - - } else { - const instance = await WebAssembly.instantiate(module, imports); - - if (instance instanceof WebAssembly.Instance) { - return { instance, module }; - - } else { - return instance; - } - } -} - -function __wbg_get_imports() { - const imports = {}; - imports.wbg = {}; - imports.wbg.__wbindgen_try_into_number = function(arg0) { - let result; - try { result = +getObject(arg0) } catch (e) { result = e } - const ret = result; - return addHeapObject(ret); -}; -imports.wbg.__wbindgen_number_get = function(arg0, arg1) { - const obj = getObject(arg1); - const ret = typeof(obj) === 'number' ? obj : undefined; - getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret; - getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); -}; -imports.wbg.__wbindgen_object_drop_ref = function(arg0) { - takeObject(arg0); -}; -imports.wbg.__wbindgen_is_undefined = function(arg0) { - const ret = getObject(arg0) === undefined; - return ret; -}; -imports.wbg.__wbindgen_in = function(arg0, arg1) { - const ret = getObject(arg0) in getObject(arg1); - return ret; -}; -imports.wbg.__wbindgen_is_bigint = function(arg0) { - const ret = typeof(getObject(arg0)) === 'bigint'; - return ret; -}; -imports.wbg.__wbindgen_bigint_from_i64 = function(arg0) { - const ret = arg0; - return addHeapObject(ret); -}; -imports.wbg.__wbindgen_jsval_eq = function(arg0, arg1) { - const ret = getObject(arg0) === getObject(arg1); - return ret; -}; -imports.wbg.__wbindgen_bigint_from_u64 = function(arg0) { - const ret = BigInt.asUintN(64, arg0); - return addHeapObject(ret); -}; -imports.wbg.__wbindgen_is_string = function(arg0) { - const ret = typeof(getObject(arg0)) === 'string'; - return ret; -}; -imports.wbg.__wbindgen_string_get = function(arg0, arg1) { - const obj = getObject(arg1); - const ret = typeof(obj) === 'string' ? obj : undefined; - var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; -}; -imports.wbg.__wbindgen_is_object = function(arg0) { - const val = getObject(arg0); - const ret = typeof(val) === 'object' && val !== null; - return ret; -}; -imports.wbg.__wbindgen_string_new = function(arg0, arg1) { - const ret = getStringFromWasm0(arg0, arg1); - return addHeapObject(ret); -}; -imports.wbg.__wbindgen_number_new = function(arg0) { - const ret = arg0; - return addHeapObject(ret); -}; -imports.wbg.__wbindgen_error_new = function(arg0, arg1) { - const ret = new Error(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); -}; -imports.wbg.__wbindgen_jsval_loose_eq = function(arg0, arg1) { - const ret = getObject(arg0) == getObject(arg1); - return ret; -}; -imports.wbg.__wbindgen_boolean_get = function(arg0) { - const v = getObject(arg0); - const ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2; - return ret; -}; -imports.wbg.__wbindgen_as_number = function(arg0) { - const ret = +getObject(arg0); - return ret; -}; -imports.wbg.__wbg_String_389b54bd9d25375f = function(arg0, arg1) { - const ret = String(getObject(arg1)); - const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; -}; -imports.wbg.__wbindgen_object_clone_ref = function(arg0) { - const ret = getObject(arg0); - return addHeapObject(ret); -}; -imports.wbg.__wbg_getwithrefkey_4a92a5eca60879b9 = function(arg0, arg1) { - const ret = getObject(arg0)[getObject(arg1)]; - return addHeapObject(ret); -}; -imports.wbg.__wbg_get_f01601b5a68d10e3 = function(arg0, arg1) { - const ret = getObject(arg0)[arg1 >>> 0]; - return addHeapObject(ret); -}; -imports.wbg.__wbg_length_1009b1af0c481d7b = function(arg0) { - const ret = getObject(arg0).length; - return ret; -}; -imports.wbg.__wbindgen_is_function = function(arg0) { - const ret = typeof(getObject(arg0)) === 'function'; - return ret; -}; -imports.wbg.__wbg_next_9b877f231f476d01 = function(arg0) { - const ret = getObject(arg0).next; - return addHeapObject(ret); -}; -imports.wbg.__wbg_next_6529ee0cca8d57ed = function() { return handleError(function (arg0) { - const ret = getObject(arg0).next(); - return addHeapObject(ret); -}, arguments) }; -imports.wbg.__wbg_done_5fe336b092d60cf2 = function(arg0) { - const ret = getObject(arg0).done; - return ret; -}; -imports.wbg.__wbg_value_0c248a78fdc8e19f = function(arg0) { - const ret = getObject(arg0).value; - return addHeapObject(ret); -}; -imports.wbg.__wbg_iterator_db7ca081358d4fb2 = function() { - const ret = Symbol.iterator; - return addHeapObject(ret); -}; -imports.wbg.__wbg_get_7b48513de5dc5ea4 = function() { return handleError(function (arg0, arg1) { - const ret = Reflect.get(getObject(arg0), getObject(arg1)); - return addHeapObject(ret); -}, arguments) }; -imports.wbg.__wbg_call_90c26b09837aba1c = function() { return handleError(function (arg0, arg1) { - const ret = getObject(arg0).call(getObject(arg1)); - return addHeapObject(ret); -}, arguments) }; -imports.wbg.__wbg_isArray_74fb723e24f76012 = function(arg0) { - const ret = Array.isArray(getObject(arg0)); - return ret; -}; -imports.wbg.__wbg_instanceof_ArrayBuffer_e7d53d51371448e2 = function(arg0) { - let result; - try { - result = getObject(arg0) instanceof ArrayBuffer; - } catch (_) { - result = false; - } - const ret = result; - return ret; -}; -imports.wbg.__wbg_isSafeInteger_f93fde0dca9820f8 = function(arg0) { - const ret = Number.isSafeInteger(getObject(arg0)); - return ret; -}; -imports.wbg.__wbg_getTime_9272be78826033e1 = function(arg0) { - const ret = getObject(arg0).getTime(); - return ret; -}; -imports.wbg.__wbg_new0_622c21a64f3d83ea = function() { - const ret = new Date(); - return addHeapObject(ret); -}; -imports.wbg.__wbg_entries_9e2e2aa45aa5094a = function(arg0) { - const ret = Object.entries(getObject(arg0)); - return addHeapObject(ret); -}; -imports.wbg.__wbg_buffer_a448f833075b71ba = function(arg0) { - const ret = getObject(arg0).buffer; - return addHeapObject(ret); -}; -imports.wbg.__wbg_new_8f67e318f15d7254 = function(arg0) { - const ret = new Uint8Array(getObject(arg0)); - return addHeapObject(ret); -}; -imports.wbg.__wbg_set_2357bf09366ee480 = function(arg0, arg1, arg2) { - getObject(arg0).set(getObject(arg1), arg2 >>> 0); -}; -imports.wbg.__wbg_length_1d25fa9e4ac21ce7 = function(arg0) { - const ret = getObject(arg0).length; - return ret; -}; -imports.wbg.__wbg_instanceof_Uint8Array_bced6f43aed8c1aa = function(arg0) { - let result; - try { - result = getObject(arg0) instanceof Uint8Array; - } catch (_) { - result = false; - } - const ret = result; - return ret; -}; -imports.wbg.__wbindgen_bigint_get_as_i64 = function(arg0, arg1) { - const v = getObject(arg1); - const ret = typeof(v) === 'bigint' ? v : undefined; - getBigInt64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? BigInt(0) : ret; - getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); -}; -imports.wbg.__wbindgen_debug_string = function(arg0, arg1) { - const ret = debugString(getObject(arg1)); - const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; -}; -imports.wbg.__wbindgen_throw = function(arg0, arg1) { - throw new Error(getStringFromWasm0(arg0, arg1)); -}; -imports.wbg.__wbindgen_memory = function() { - const ret = wasm.memory; - return addHeapObject(ret); -}; - -return imports; -} - -function __wbg_init_memory(imports, maybe_memory) { - -} - -function __wbg_finalize_init(instance, module) { - wasm = instance.exports; - __wbg_init.__wbindgen_wasm_module = module; - cachedBigInt64Memory0 = null; - cachedFloat64Memory0 = null; - cachedInt32Memory0 = null; - cachedUint32Memory0 = null; - cachedUint8Memory0 = null; - - - return wasm; -} - -function initSync(module) { - if (wasm !== undefined) return wasm; - - const imports = __wbg_get_imports(); - - __wbg_init_memory(imports); - - if (!(module instanceof WebAssembly.Module)) { - module = new WebAssembly.Module(module); - } - - const instance = new WebAssembly.Instance(module, imports); - - return __wbg_finalize_init(instance, module); -} - -async function __wbg_init(input) { - if (wasm !== undefined) return wasm; - - if (typeof input === 'undefined') { - input = new URL('timex_bg.wasm', import.meta.url); - } - const imports = __wbg_get_imports(); - - if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) { - input = fetch(input); - } - - __wbg_init_memory(imports); - - const { instance, module } = await __wbg_load(await input, imports); - - return __wbg_finalize_init(instance, module); -} - -export { initSync } -export default __wbg_init; diff --git a/server/web/public/pkg/timex_bg.wasm b/server/web/public/pkg/timex_bg.wasm deleted file mode 100644 index 8208d17b6a192d22e36cb08487181c1662e9da26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139252 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 QIMwvmd$24e;gd%H2Qpo(vH$=8 diff --git a/server/web/public/pkg/timex_bg.wasm.d.ts b/server/web/public/pkg/timex_bg.wasm.d.ts deleted file mode 100644 index 8f88c91..0000000 --- a/server/web/public/pkg/timex_bg.wasm.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -export const memory: WebAssembly.Memory; -export function __wbg_scheduledetails_free(a: number): void; -export function __wbg_get_scheduledetails_scheduled_start_date_time(a: number, b: number): void; -export function __wbg_set_scheduledetails_scheduled_start_date_time(a: number, b: number, c: number): void; -export function __wbg_get_scheduledetails_repeat_every(a: number): number; -export function __wbg_set_scheduledetails_repeat_every(a: number, b: number): void; -export function __wbg_get_scheduledetails_repeat_every_number(a: number): number; -export function __wbg_set_scheduledetails_repeat_every_number(a: number, b: number): void; -export function __wbg_get_scheduledetails_end_option(a: number): number; -export function __wbg_set_scheduledetails_end_option(a: number, b: number): void; -export function __wbg_get_scheduledetails_end_date(a: number, b: number): void; -export function __wbg_set_scheduledetails_end_date(a: number, b: number, c: number): void; -export function __wbg_get_scheduledetails_occurrence_value(a: number, b: number): void; -export function __wbg_set_scheduledetails_occurrence_value(a: number, b: number, c: number): void; -export function __wbg_get_scheduledetails_week_days_for_repeat_every(a: number, b: number): void; -export function __wbg_set_scheduledetails_week_days_for_repeat_every(a: number, b: number, c: number): void; -export function __wbg_get_scheduledetails_month_options(a: number): number; -export function __wbg_set_scheduledetails_month_options(a: number, b: number): void; -export function __wbg_get_scheduledetails_on_day_value_for_month(a: number, b: number): void; -export function __wbg_set_scheduledetails_on_day_value_for_month(a: number, b: number, c: number): void; -export function __wbg_get_scheduledetails_day_category_for_month(a: number): number; -export function __wbg_set_scheduledetails_day_category_for_month(a: number, b: number): void; -export function __wbg_get_scheduledetails_week_day_for_month(a: number): number; -export function __wbg_set_scheduledetails_week_day_for_month(a: number, b: number): void; -export function __wbg_get_scheduledetails_year_options(a: number, b: number): void; -export function __wbg_set_scheduledetails_year_options(a: number, b: number, c: number): void; -export function __wbg_get_scheduledetails_month_with_day_for_year(a: number, b: number): void; -export function __wbg_set_scheduledetails_month_with_day_for_year(a: number, b: number, c: number): void; -export function __wbg_get_scheduledetails_on_day_value_for_year(a: number, b: number): void; -export function __wbg_set_scheduledetails_on_day_value_for_year(a: number, b: number, c: number): void; -export function __wbg_get_scheduledetails_day_category_for_year(a: number, b: number): void; -export function __wbg_set_scheduledetails_day_category_for_year(a: number, b: number, c: number): void; -export function __wbg_get_scheduledetails_week_day_for_year(a: number, b: number): void; -export function __wbg_set_scheduledetails_week_day_for_year(a: number, b: number, c: number): void; -export function __wbg_get_scheduledetails_month_with_week_day_for_year(a: number, b: number): void; -export function __wbg_set_scheduledetails_month_with_week_day_for_year(a: number, b: number, c: number): void; -export function showDetailInDisplay(a: number, b: number): void; -export function find_schedule_date_time(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number): void; -export function __wbindgen_malloc(a: number, b: number): number; -export function __wbindgen_realloc(a: number, b: number, c: number, d: number): number; -export function __wbindgen_add_to_stack_pointer(a: number): number; -export function __wbindgen_free(a: number, b: number, c: number): void; -export function __wbindgen_exn_store(a: number): void; From acd909bb777e941eeb2928ee948c4fd4f097bec2 Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Sat, 3 Feb 2024 13:21:42 +0530 Subject: [PATCH 03/32] style: update config on prettier --- server/web/.prettierignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 server/web/.prettierignore diff --git a/server/web/.prettierignore b/server/web/.prettierignore new file mode 100644 index 0000000..4012717 --- /dev/null +++ b/server/web/.prettierignore @@ -0,0 +1 @@ +**/src/asm/* \ No newline at end of file From 9b47dc044ddab334240cd6a921baa0af57aef265 Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Sat, 3 Feb 2024 13:23:38 +0530 Subject: [PATCH 04/32] security: added audit for rust --- .github/{ => workflows}/audit.yaml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/{ => workflows}/audit.yaml (100%) diff --git a/.github/audit.yaml b/.github/workflows/audit.yaml similarity index 100% rename from .github/audit.yaml rename to .github/workflows/audit.yaml From 4664fcd316185c050d33436a53d712d39710db12 Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Sat, 3 Feb 2024 13:44:50 +0530 Subject: [PATCH 05/32] chore: updating workflow for github page --- .github/workflows/gh.page.yaml | 34 ++++++++++++++++++++++++++++++++++ server/web/next.config.js | 2 +- server/web/src/asm/index.d.ts | 1 - server/web/src/asm/index.js | 1 - 4 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/gh.page.yaml delete mode 100644 server/web/src/asm/index.d.ts delete mode 100644 server/web/src/asm/index.js diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml new file mode 100644 index 0000000..1c0c571 --- /dev/null +++ b/.github/workflows/gh.page.yaml @@ -0,0 +1,34 @@ +name: deploy to gh page +on: + push: + branches: + - main +permissions: + contents: write +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: "14" + cache: npm + - name: Install npm + uses: npm install + - name: build website + uses: npm run build + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + if: github.ref == 'refs/heads/main' + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./out + + + + \ No newline at end of file diff --git a/server/web/next.config.js b/server/web/next.config.js index ccad055..841e243 100644 --- a/server/web/next.config.js +++ b/server/web/next.config.js @@ -4,7 +4,7 @@ const nextConfig = { experimental: { typedRoutes: true, }, - output: 'standalone', + output: 'export', }; module.exports = nextConfig; diff --git a/server/web/src/asm/index.d.ts b/server/web/src/asm/index.d.ts deleted file mode 100644 index c7a3f04..0000000 --- a/server/web/src/asm/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from asm-9dbf0d2.d.ts diff --git a/server/web/src/asm/index.js b/server/web/src/asm/index.js deleted file mode 100644 index 5b52be8..0000000 --- a/server/web/src/asm/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from asm-9dbf0d2.js From de0d870a1d1e81c1ea89fcbfab5fd87b6f71f7eb Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Sat, 3 Feb 2024 13:49:12 +0530 Subject: [PATCH 06/32] fix: update workflow with run --- .github/workflows/gh.page.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index 1c0c571..2732676 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -3,6 +3,8 @@ on: push: branches: - main + pull_request: + permissions: contents: write concurrency: @@ -19,9 +21,9 @@ jobs: node-version: "14" cache: npm - name: Install npm - uses: npm install + run: npm install - name: build website - uses: npm run build + run: npm run build - name: Deploy uses: peaceiris/actions-gh-pages@v3 if: github.ref == 'refs/heads/main' From f1ee1bb925c5121d76d4ef527d07f6ab733c775d Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Sat, 3 Feb 2024 13:55:02 +0530 Subject: [PATCH 07/32] chore: temporary changing branch for testing on github page --- .github/workflows/gh.page.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index 2732676..e9ab1a4 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -2,7 +2,7 @@ name: deploy to gh page on: push: branches: - - main + - web-asm pull_request: permissions: From 97093e2c0de422709897496153f6407d32111938 Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Sat, 3 Feb 2024 13:59:15 +0530 Subject: [PATCH 08/32] chore: update to web folder location --- .github/workflows/gh.page.yaml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index e9ab1a4..9c368e4 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -18,18 +18,23 @@ jobs: - name: Setup Node uses: actions/setup-node@v4 with: - node-version: "14" + node-version: "20" cache: npm + - name: Change folder location + id: web-folder + run: | + echo "path=./server/web" >> $GITHUB_OUTPUT + exit 0 - name: Install npm - run: npm install + run: cd ${{ steps.web-folder.outputs.path }} && npm install - name: build website - run: npm run build + run: cd ${{ steps.web-folder.outputs.path }} && npm run build - name: Deploy uses: peaceiris/actions-gh-pages@v3 if: github.ref == 'refs/heads/main' with: github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./out + publish_dir: cd ${{ steps.web-folder.outputs.path }} && ./out From 753c509472e9377120d8723a71d320a9eeefa6dd Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Sat, 3 Feb 2024 14:19:11 +0530 Subject: [PATCH 09/32] wip: update the path change in npm --- .github/workflows/gh.page.yaml | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index 9c368e4..a40994b 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -15,20 +15,16 @@ jobs: steps: - name: Checkout Repository uses: actions/checkout@v4 - - name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: "20" - cache: npm - name: Change folder location id: web-folder run: | echo "path=./server/web" >> $GITHUB_OUTPUT exit 0 - - name: Install npm - run: cd ${{ steps.web-folder.outputs.path }} && npm install - - name: build website - run: cd ${{ steps.web-folder.outputs.path }} && npm run build + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: "20" + cache: cd {{ steps.web-folder.outputs.path }} && npm - name: Deploy uses: peaceiris/actions-gh-pages@v3 if: github.ref == 'refs/heads/main' From a1f6bfa462883d5172ad73e54c6222f5d08ce716 Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Sat, 3 Feb 2024 14:26:33 +0530 Subject: [PATCH 10/32] fix: removed manually set work directory --- .github/workflows/gh.page.yaml | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index a40994b..8d7d324 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -12,25 +12,31 @@ concurrency: jobs: build: runs-on: ubuntu-latest + strategy: + matrix: + node-version: [20.x] + defaults: + run: + working-directory: ./server/web steps: - name: Checkout Repository uses: actions/checkout@v4 - - name: Change folder location - id: web-folder - run: | - echo "path=./server/web" >> $GITHUB_OUTPUT - exit 0 - - name: Setup Node + # - name: Change folder location + # id: web-folder + # run: | + # echo "path=./server/web" >> $GITHUB_OUTPUT + # exit 0 + - name: Setup Node ${{ matrix.node-version }} uses: actions/setup-node@v4 with: - node-version: "20" - cache: cd {{ steps.web-folder.outputs.path }} && npm + node-version: ${{ matrix.node-version }} + cache: npm - name: Deploy uses: peaceiris/actions-gh-pages@v3 if: github.ref == 'refs/heads/main' with: github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: cd ${{ steps.web-folder.outputs.path }} && ./out + publish_dir: ./out From cc540b01f3f4701a98799d6010859c04d61b392f Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Sat, 3 Feb 2024 14:46:46 +0530 Subject: [PATCH 11/32] fix: wip - set directory on dependency path --- .github/workflows/gh.page.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index 8d7d324..3d5a3c9 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -31,6 +31,7 @@ jobs: with: node-version: ${{ matrix.node-version }} cache: npm + cache-dependency-path: ./server/web - name: Deploy uses: peaceiris/actions-gh-pages@v3 if: github.ref == 'refs/heads/main' From 4890c08faa329c6ab560d36c12157b5be7ca4120 Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Sat, 3 Feb 2024 14:57:27 +0530 Subject: [PATCH 12/32] refactor: removed the condition on main header --- .github/workflows/gh.page.yaml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index 3d5a3c9..a117ed6 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -34,11 +34,7 @@ jobs: cache-dependency-path: ./server/web - name: Deploy uses: peaceiris/actions-gh-pages@v3 - if: github.ref == 'refs/heads/main' + # if: github.ref == 'refs/heads/main' with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./out - - - - \ No newline at end of file From 39de3716ab54d7f41825352f46e3afc3145fa9a6 Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Sat, 3 Feb 2024 15:04:44 +0530 Subject: [PATCH 13/32] chore: added new job in workflow --- .github/workflows/gh.page.yaml | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index a117ed6..c25a255 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -32,9 +32,32 @@ jobs: node-version: ${{ matrix.node-version }} cache: npm cache-dependency-path: ./server/web - - name: Deploy - uses: peaceiris/actions-gh-pages@v3 - # if: github.ref == 'refs/heads/main' + - name: Setup Pages + uses: actions/configure-pages@v4 with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./out + # Automatically inject basePath in your Next.js configuration file and disable + # server side image optimization (https://nextjs.org/docs/api-reference/next/image#unoptimized). + # + # You may remove this line if you want to manage the configuration yourself. + static_site_generator: next + - name: Install dependencies + run: npm ci + - name: Build with Next.js + run: npx next build + - name: Static HTML export with Next.js + run: npx next export + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: ./out + + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 From 04704e38695773a4b0d74bf31232926648796ddb Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Sat, 3 Feb 2024 15:07:18 +0530 Subject: [PATCH 14/32] chore: export command removed in next js --- .github/workflows/gh.page.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index c25a255..a3c19c2 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -44,8 +44,6 @@ jobs: run: npm ci - name: Build with Next.js run: npx next build - - name: Static HTML export with Next.js - run: npx next export - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: From 5a7bee4190fafef5df5b71c19c997acc0cf037b3 Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Sat, 3 Feb 2024 15:16:27 +0530 Subject: [PATCH 15/32] fix: no file found error --- .github/workflows/gh.page.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index a3c19c2..8bd368d 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -47,7 +47,7 @@ jobs: - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: - path: ./out + path: "./server/web/out" deploy: environment: From 3054b2d24039057df2e31718deab219fbd5f282f Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Sat, 3 Feb 2024 15:24:24 +0530 Subject: [PATCH 16/32] fix: id token permission updated --- .github/workflows/gh.page.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index 8bd368d..0a3dbfb 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -7,6 +7,7 @@ on: permissions: contents: write + id-token: write concurrency: group: ${{ github.workflow }}-${{ github.ref }} jobs: From a28d74afee44dff653f1bfc6d0cdd1d49fa34bdd Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Sat, 3 Feb 2024 15:26:43 +0530 Subject: [PATCH 17/32] fix: update permission --- .github/workflows/gh.page.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index 0a3dbfb..6f0f6c4 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -6,8 +6,9 @@ on: pull_request: permissions: - contents: write - id-token: write + contents: read + pages: write + id-token: write concurrency: group: ${{ github.workflow }}-${{ github.ref }} jobs: From e2065b7aa3aa9e85e98bbe85f6bfcc1c488d5e00 Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Sat, 3 Feb 2024 17:04:04 +0530 Subject: [PATCH 18/32] chore: update on netlify --- .github/workflows/gh.page.yaml | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index 6f0f6c4..cc226d5 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -58,6 +58,17 @@ jobs: runs-on: ubuntu-latest needs: build steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 + - name: Deploy to Netlify + uses: nwtgck/actions-netlify@v2.0 + with: + publish-dir: './out' + production-branch: web-asm + github-token: ${{ secrets.GITHUB_TOKEN }} + deploy-message: "Deploy from GitHub Actions" + enable-pull-request-comment: false + enable-commit-comment: true + overwrites-pull-request-comment: true + env: + NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} + NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }} + timeout-minutes: 1 From d296fc073fd8c56469c9473f53ad350ca96642de Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Sat, 3 Feb 2024 17:06:12 +0530 Subject: [PATCH 19/32] fix: update path --- .github/workflows/gh.page.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index cc226d5..fcc5d1e 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -61,7 +61,7 @@ jobs: - name: Deploy to Netlify uses: nwtgck/actions-netlify@v2.0 with: - publish-dir: './out' + publish-dir: './server/web/out' production-branch: web-asm github-token: ${{ secrets.GITHUB_TOKEN }} deploy-message: "Deploy from GitHub Actions" From 40265b34b796c1ebce4f44deafa5841c2bdfdf17 Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Sat, 3 Feb 2024 17:15:19 +0530 Subject: [PATCH 20/32] Revert "fix: update path" This reverts commit c42f329e3a1d9536e3c4966856638c3128e79f05. --- .github/workflows/gh.page.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index fcc5d1e..cc226d5 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -61,7 +61,7 @@ jobs: - name: Deploy to Netlify uses: nwtgck/actions-netlify@v2.0 with: - publish-dir: './server/web/out' + publish-dir: './out' production-branch: web-asm github-token: ${{ secrets.GITHUB_TOKEN }} deploy-message: "Deploy from GitHub Actions" From d0e98151a3f38246cf5f6628f48f00c8e2e041b9 Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Sat, 3 Feb 2024 17:15:33 +0530 Subject: [PATCH 21/32] Revert "chore: update on netlify" This reverts commit b6eaf27948a72643d5af22e39c58b277f3abc19f. --- .github/workflows/gh.page.yaml | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index cc226d5..6f0f6c4 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -58,17 +58,6 @@ jobs: runs-on: ubuntu-latest needs: build steps: - - name: Deploy to Netlify - uses: nwtgck/actions-netlify@v2.0 - with: - publish-dir: './out' - production-branch: web-asm - github-token: ${{ secrets.GITHUB_TOKEN }} - deploy-message: "Deploy from GitHub Actions" - enable-pull-request-comment: false - enable-commit-comment: true - overwrites-pull-request-comment: true - env: - NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} - NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }} - timeout-minutes: 1 + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 From e8e5ca7eeb0fb36ec5819cee2d00565055da1186 Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Sat, 3 Feb 2024 22:25:00 +0530 Subject: [PATCH 22/32] add public base path --- .github/workflows/gh.page.yaml | 2 ++ server/web/next.config.js | 3 +++ 2 files changed, 5 insertions(+) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index 6f0f6c4..072c9e0 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -58,6 +58,8 @@ jobs: runs-on: ubuntu-latest needs: build steps: + - name: Upload Artifact + uses: actions/upload-pages-artifact@v2 - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 diff --git a/server/web/next.config.js b/server/web/next.config.js index 841e243..4ae5018 100644 --- a/server/web/next.config.js +++ b/server/web/next.config.js @@ -5,6 +5,9 @@ const nextConfig = { typedRoutes: true, }, output: 'export', + assetPrefix: process.env.NEXT_PUBLIC_BASE_PATH || '', + basePath: process.env.NEXT_PUBLIC_BASE_PATH || '', + // + assetPrefix = process.env.NEXT_PUBLIC_BASE_PATH || '' }; module.exports = nextConfig; From 2b340904a787a610ec2333d2774446b299f13341 Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Mon, 5 Feb 2024 10:26:23 +0530 Subject: [PATCH 23/32] fix: setting default path in deploy job --- .github/workflows/gh.page.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index 072c9e0..0bf880f 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -56,6 +56,9 @@ jobs: name: github-pages url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest + defaults: + run: + working-directory: ./server/web needs: build steps: - name: Upload Artifact From 802f96b8bf39380e8f97095b1bcabdfc07114ade Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Mon, 5 Feb 2024 10:31:22 +0530 Subject: [PATCH 24/32] chore: update deploy steps with v4 --- .github/workflows/gh.page.yaml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index 0bf880f..d30cc56 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -61,8 +61,6 @@ jobs: working-directory: ./server/web needs: build steps: - - name: Upload Artifact - uses: actions/upload-pages-artifact@v2 - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 \ No newline at end of file From 403a6a917f909fbb1fde4afadb010439a396cf5f Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Mon, 5 Feb 2024 10:38:50 +0530 Subject: [PATCH 25/32] chore: update fallback path --- server/web/next.config.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/server/web/next.config.js b/server/web/next.config.js index 4ae5018..2be6560 100644 --- a/server/web/next.config.js +++ b/server/web/next.config.js @@ -5,9 +5,11 @@ const nextConfig = { typedRoutes: true, }, output: 'export', - assetPrefix: process.env.NEXT_PUBLIC_BASE_PATH || '', - basePath: process.env.NEXT_PUBLIC_BASE_PATH || '', + assetPrefix: process.env.NEXT_PUBLIC_BASE_PATH || '/timex', + basePath: process.env.NEXT_PUBLIC_BASE_PATH || '/timex', // + assetPrefix = process.env.NEXT_PUBLIC_BASE_PATH || '' }; +console.log(process.env.NEXT_PUBLIC_BASE_PATH) + module.exports = nextConfig; From 278ec5b64ab42dd1207a23d9a8b395a02a80ccaa Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Mon, 5 Feb 2024 10:41:43 +0530 Subject: [PATCH 26/32] chore: removed console log --- server/web/next.config.js | 1 - 1 file changed, 1 deletion(-) diff --git a/server/web/next.config.js b/server/web/next.config.js index 2be6560..874bd98 100644 --- a/server/web/next.config.js +++ b/server/web/next.config.js @@ -10,6 +10,5 @@ const nextConfig = { // + assetPrefix = process.env.NEXT_PUBLIC_BASE_PATH || '' }; -console.log(process.env.NEXT_PUBLIC_BASE_PATH) module.exports = nextConfig; From b245004c0ea8196392f857e3bd38178cf92d99a7 Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Mon, 5 Feb 2024 10:52:05 +0530 Subject: [PATCH 27/32] chore: removed experimental options of web assembly --- asm2/.gitignore | 18 -------------- asm2/Cargo.toml | 21 ----------------- asm2/makefile | 0 asm2/src/lib.rs | 63 ------------------------------------------------- 4 files changed, 102 deletions(-) delete mode 100644 asm2/.gitignore delete mode 100644 asm2/Cargo.toml delete mode 100644 asm2/makefile delete mode 100644 asm2/src/lib.rs diff --git a/asm2/.gitignore b/asm2/.gitignore deleted file mode 100644 index cc0b001..0000000 --- a/asm2/.gitignore +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Cargo -# will have compiled files and executables -debug/ -target/ - -# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries -# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html -# Cargo.lock - -# These are backup files generated by rustfmt -**/*.rs.bk - -# MSVC Windows builds of rustc generate these, which store debugging information -*.pdb -debug/ -wasm32-unknown-unknown -wasm32-wasi -release/ \ No newline at end of file diff --git a/asm2/Cargo.toml b/asm2/Cargo.toml deleted file mode 100644 index c12ffa4..0000000 --- a/asm2/Cargo.toml +++ /dev/null @@ -1,21 +0,0 @@ -workspace = { members = ["wasi-hello-world"] } -[package] -name = "asm" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -extism-pdk = "1.0.1" -timex = { path = "../"} -chrono = "0.4.31" -serde = "1.0" -wasm-bindgen = "0.2.89" -serde-wasm-bindgen = "0.6.3" - -[lib] -crate-type = ["rlib", "cdylib"] - -[build] -target = "wasm32-wasi" diff --git a/asm2/makefile b/asm2/makefile deleted file mode 100644 index e69de29..0000000 diff --git a/asm2/src/lib.rs b/asm2/src/lib.rs deleted file mode 100644 index 97e54fa..0000000 --- a/asm2/src/lib.rs +++ /dev/null @@ -1,63 +0,0 @@ -use chrono::{DateTime, Utc}; -use extism_pdk::*; -use serde::{Deserialize, Serialize}; -use std::result::Result::Ok; -use timex::{model::ScheduleDetails, schedule_date_times}; - -#[derive(Deserialize)] -struct Props { - detail: ScheduleDetails, - previous_scheduled_date: String, - start_range_date: String, - end_range_date: String, -} - -#[plugin_fn] -pub fn find_schedule_date_time(Json(props): Json) -> FnResult>> { - let mut _previous_scheduled_date: DateTime; - let detail: ScheduleDetails = props.detail; - - match DateTime::parse_from_rfc3339(&props.previous_scheduled_date) { - Ok(v) => _previous_scheduled_date = v.with_timezone(&Utc), - Err(e) => return Err(e.into()), - }; - - let mut _start_range_date: DateTime; - - match DateTime::parse_from_rfc3339(&props.start_range_date) { - Ok(v) => _start_range_date = v.with_timezone(&Utc), - Err(e) => return Err(e.into()), - }; - - let mut _end_range_date: DateTime; - - match DateTime::parse_from_rfc3339(&props.end_range_date) { - Ok(v) => _end_range_date = v.with_timezone(&Utc), - Err(e) => return Err(e.into()), - }; - - let t = schedule_date_times( - &detail, - _previous_scheduled_date, - _start_range_date, - _end_range_date, - ); - - match t { - Ok(v) => { - let temp = v - .into_iter() - .map(|x| x.to_rfc3339().into()) - .collect::>(); - Ok(Json(temp)) - } - Err(e) => Err(e.into()), - } - - // return Ok(Json(vec![ - // "sd1".to_string(), - // props.start_range_date, - // props.end_range_date, - // // _start_range_date.to_rfc3339(), - // ])); -} From b0cd199fd52795883119a5baae3c31084a0c04d5 Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Mon, 5 Feb 2024 11:11:40 +0530 Subject: [PATCH 28/32] chore: update the web assembly build on github action --- .github/workflows/gh.page.yaml | 10 +++++++++- Makefile | 2 -- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index d30cc56..fd850a2 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -34,6 +34,12 @@ jobs: node-version: ${{ matrix.node-version }} cache: npm cache-dependency-path: ./server/web + - name: Cache dependencies ⚡ + id: cache_dependencies + uses: actions/cache@v3 + with: + path: node_modules + key: node-modules-${{ hashFiles('package-lock.json') }} - name: Setup Pages uses: actions/configure-pages@v4 with: @@ -44,13 +50,15 @@ jobs: static_site_generator: next - name: Install dependencies run: npm ci + - name: Update web assembly + run: make js-asm - name: Build with Next.js run: npx next build - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: path: "./server/web/out" - + deploy: environment: name: github-pages diff --git a/Makefile b/Makefile index 332990c..0fddcf5 100644 --- a/Makefile +++ b/Makefile @@ -39,8 +39,6 @@ COMMIT_ID=$(shell git rev-parse --short HEAD) ASM_FILE_NAME="asm-${COMMIT_ID}" js-asm: - - echo "version: ${COMMIT_ID}" && \ cd ${ASM_PATH} && \ rm -rf "${ASM_PATH}/pkg" && \ From e611d4d4b6fc034643fa490506ffb35905830ff8 Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Mon, 5 Feb 2024 11:15:16 +0530 Subject: [PATCH 29/32] wip: check for current path --- .github/workflows/gh.page.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index fd850a2..2e20372 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -51,7 +51,7 @@ jobs: - name: Install dependencies run: npm ci - name: Update web assembly - run: make js-asm + run: pwd && make js-asm - name: Build with Next.js run: npx next build - name: Upload artifact @@ -71,4 +71,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v4 \ No newline at end of file + uses: actions/deploy-pages@v4 From 42822109ac813cbb06e82e67f0dd1bf34a795ea4 Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Mon, 5 Feb 2024 11:16:44 +0530 Subject: [PATCH 30/32] chore: change to root --- .github/workflows/gh.page.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index 2e20372..aa21d37 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -51,7 +51,7 @@ jobs: - name: Install dependencies run: npm ci - name: Update web assembly - run: pwd && make js-asm + run: cd ../.. && make js-asm - name: Build with Next.js run: npx next build - name: Upload artifact From c18ae9d98bb3858ca7e72a55a01dc4cc9b53c35e Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Mon, 5 Feb 2024 11:24:10 +0530 Subject: [PATCH 31/32] fix: install wasm pack in linux --- .github/workflows/gh.page.yaml | 2 +- Makefile | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/gh.page.yaml b/.github/workflows/gh.page.yaml index aa21d37..a01981a 100644 --- a/.github/workflows/gh.page.yaml +++ b/.github/workflows/gh.page.yaml @@ -51,7 +51,7 @@ jobs: - name: Install dependencies run: npm ci - name: Update web assembly - run: cd ../.. && make js-asm + run: cd ../.. && make ci-install && make js-asm - name: Build with Next.js run: npx next build - name: Upload artifact diff --git a/Makefile b/Makefile index 0fddcf5..b3781ec 100644 --- a/Makefile +++ b/Makefile @@ -46,3 +46,7 @@ js-asm: cd .. && \ rm -rf "${WEB_ASM_PATH}/*" && \ cp -a ${ASM_PATH}/pkg/* ${WEB_ASM_PATH} + +ci-install: + curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh + \ No newline at end of file From 24a72c5a6cfc2862d65fb4d66281cd1e1c4242bd Mon Sep 17 00:00:00 2001 From: Jawahar S Date: Mon, 5 Feb 2024 11:40:41 +0530 Subject: [PATCH 32/32] chore: display of web assembly version --- Makefile | 4 +++- server/web/src/asm/version.ts | 1 + server/web/src/components/page/home.tsx | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 server/web/src/asm/version.ts diff --git a/Makefile b/Makefile index b3781ec..b09bc53 100644 --- a/Makefile +++ b/Makefile @@ -45,7 +45,9 @@ js-asm: wasm-pack build --target web --out-name ${ASM_FILE_NAME} && \ cd .. && \ rm -rf "${WEB_ASM_PATH}/*" && \ - cp -a ${ASM_PATH}/pkg/* ${WEB_ASM_PATH} + cp -a ${ASM_PATH}/pkg/* ${WEB_ASM_PATH} && \ + echo "export const VERSION = \"${COMMIT_ID}\"" | cat > "${WEB_ASM_PATH}/version.ts" + ci-install: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh diff --git a/server/web/src/asm/version.ts b/server/web/src/asm/version.ts new file mode 100644 index 0000000..0410f26 --- /dev/null +++ b/server/web/src/asm/version.ts @@ -0,0 +1 @@ +export const VERSION = "c18ae9d" diff --git a/server/web/src/components/page/home.tsx b/server/web/src/components/page/home.tsx index 8d5d85a..9876c8f 100644 --- a/server/web/src/components/page/home.tsx +++ b/server/web/src/components/page/home.tsx @@ -26,10 +26,12 @@ import { Highlighter, HighlighterLang } from "../highlight"; import init, { show_detail_in_display as showDetailInDisplay, } from "asm"; +import { VERSION } from "asm/version" import { useToast } from "@timex/components/ui/use-toast"; import { Alert, AlertDescription, AlertTitle } from "../ui/alert"; async function Temp() { + console.log("web assembly version: ", VERSION) await init(); }