From d7c4de5a7544f705499bae3f7ae2e14ff3759a25 Mon Sep 17 00:00:00 2001 From: Hexagon Date: Sat, 6 Apr 2024 19:42:24 +0000 Subject: [PATCH] Release 1.0.0-rc.13 --- README.md | 2 +- application.meta.ts | 6 ++-- deno.json | 4 +-- deps.ts | 38 +++++++++++----------- docs/deno.json | 2 +- docs/src/changelog.md | 21 ++++++++----- docs/src/contributing/packaging.md | 4 +-- docs/src/examples/cluster/app.ts | 15 ++++----- lib/cli/upgrade.ts | 10 +++--- lib/core/loadbalancer.ts | 17 ++++++---- lib/core/watcher.ts | 18 ++++++++--- plugins/web-interface/deps.ts | 4 +-- plugins/web-interface/static/bundle.json | 40 ++++++++++++------------ test/deps.ts | 4 +-- versions.json | 14 +++++++++ 15 files changed, 115 insertions(+), 84 deletions(-) diff --git a/README.md b/README.md index 197f3dc..3d0fe06 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ _For detailed documentation, visit [pup.56k.guru](https://pup.56k.guru)._ ### Installation -To install Pup, open your terminal and execute the following command: +To install Pup, make sure you have a fairly recent version of Deno installed (>=1.38.0), then open your terminal and execute the following command: ```bash deno run -Ar https://deno.land/x/pup/pup.ts setup --channel prerelease diff --git a/application.meta.ts b/application.meta.ts index ece5113..91834af 100644 --- a/application.meta.ts +++ b/application.meta.ts @@ -21,11 +21,11 @@ const Application = { name: "pup", - version: "1.0.0-rc.12", + version: "1.0.0-rc.13", url: "https://deno.land/x/pup@$VERSION/pup.ts", canary_url: "https://raw.githubusercontent.com/Hexagon/pup/main/pup.ts", - deno: null, /* Minimum stable version of Deno required to run Pup (without --unstable flag) */ - deno_unstable: "1.33.0", /* Minimum version of Deno required to run Pup (with --unstable flag) */ + deno: null, /* Minimum stable version of Deno required to run Pup (without --unstable-* flags) */ + deno_unstable: "1.38.0", /* Minimum version of Deno required to run Pup (with --unstable-* flags) */ repository: "https://github.com/hexagon/pup", changelog: "https://hexagon.github.io/pup/changelog.html", permissions: [ diff --git a/deno.json b/deno.json index d850d52..615a9bf 100644 --- a/deno.json +++ b/deno.json @@ -11,10 +11,10 @@ "tasks": { "update-deps": "deno run --allow-read=. --allow-net=deno.land,cdn.deno.land https://deno.land/x/udd/main.ts --dry-run deno.json deps.ts test/deps.ts plugins/web-interface/deps.ts", - "check": "deno fmt --check && deno lint && deno check pup.ts --unstable && deno test --allow-read --allow-write --allow-env --allow-net --allow-sys --allow-run --unstable --coverage=cov_profile && echo \"Generating coverage\" && deno coverage cov_profile --exclude=pup/test --lcov --output=cov_profile.lcov", + "check": "deno fmt --check && deno lint && deno check pup.ts && deno test --allow-read --allow-write --allow-env --allow-net --allow-sys --allow-run --unstable-kv --coverage=cov_profile && echo \"Generating coverage\" && deno coverage cov_profile --exclude=pup/test --lcov --output=cov_profile.lcov", "check-coverage": "deno task check && genhtml cov_profile.lcov --output-directory cov_profile/html && lcov --list cov_profile.lcov && deno run --allow-net --allow-read https://deno.land/std/http/file_server.ts cov_profile/html", "build-schema": "deno run --allow-write --allow-read --allow-env=XDG_DATA_HOME,HOME tools/build-schema.ts && deno fmt", - "build-versions": "deno run --allow-read --allow-write --allow-env --unstable tools/release.ts && deno fmt", + "build-versions": "deno run --allow-read --allow-write --allow-env tools/release.ts && deno fmt", "build-webinterface": "cd plugins/web-interface && rm static/bundle.json; deno run --allow-read --allow-write https://deno.land/x/bundlee/bundlee.ts --bundle static static/bundle.json && deno fmt", "build": "deno task check && deno task build-schema && deno task build-webinterface && deno task build-versions" } diff --git a/deps.ts b/deps.ts index dbf8097..482497b 100644 --- a/deps.ts +++ b/deps.ts @@ -13,39 +13,37 @@ * - Always use the same version of all imports from deno.land/std */ // cli -export { parse } from "https://deno.land/std@0.207.0/flags/mod.ts" -export type { Args } from "https://deno.land/std@0.207.0/flags/mod.ts" -export * as path from "https://deno.land/std@0.207.0/path/mod.ts" -export * as uuid from "https://deno.land/std@0.207.0/uuid/mod.ts" +export { parse } from "https://deno.land/std@0.221.0/flags/mod.ts" +export type { Args } from "https://deno.land/std@0.221.0/flags/mod.ts" +export * as path from "https://deno.land/std@0.221.0/path/mod.ts" +export * as uuid from "https://deno.land/std@0.221.0/uuid/mod.ts" // logger -export { stripColor } from "https://deno.land/std@0.207.0/fmt/colors.ts" +export { stripColor } from "https://deno.land/std@0.221.0/fmt/colors.ts" // config -export * as jsonc from "https://deno.land/std@0.207.0/jsonc/mod.ts" +export * as jsonc from "https://deno.land/std@0.221.0/jsonc/mod.ts" // watcher -export { deferred, delay } from "https://deno.land/std@0.207.0/async/mod.ts" -export { globToRegExp, relative } from "https://deno.land/std@0.207.0/path/mod.ts" -// load balancer -export { copy } from "https://deno.land/std@0.207.0/streams/mod.ts" +export { delay } from "https://deno.land/std@0.221.0/async/mod.ts" +export { globToRegExp, relative } from "https://deno.land/std@0.221.0/path/mod.ts" // core - process -export { StringReader } from "https://deno.land/std@0.207.0/io/string_reader.ts" -export { readLines } from "https://deno.land/std@0.207.0/io/mod.ts" +export { StringReader } from "https://deno.land/std@0.221.0/io/string_reader.ts" +export { readLines } from "https://deno.land/std@0.221.0/io/mod.ts" // service installer, release tool -export { existsSync } from "https://deno.land/std@0.207.0/fs/mod.ts" +export { existsSync } from "https://deno.land/std@0.221.0/fs/mod.ts" // ipc -export { debounce } from "https://deno.land/std@0.207.0/async/mod.ts" -export { basename, dirname, join, resolve } from "https://deno.land/std@0.207.0/path/mod.ts" +export { debounce } from "https://deno.land/std@0.221.0/async/mod.ts" +export { basename, dirname, join, resolve } from "https://deno.land/std@0.221.0/path/mod.ts" // upgrader -export { gt, lt, parse as parseVersion } from "https://deno.land/std@0.207.0/semver/mod.ts" -export type { SemVer } from "https://deno.land/std@0.207.0/semver/mod.ts" +export { greaterThan, lessThan, parse as parseVersion } from "https://deno.land/std@0.221.0/semver/mod.ts" +export type { SemVer } from "https://deno.land/std@0.221.0/semver/mod.ts" /** * Third party dependencies * * - Prefer deno.land/x when available */ -export { Cron } from "https://deno.land/x/croner@7.0.5/dist/croner.js" +export { Cron } from "https://deno.land/x/croner@8.0.1/dist/croner.js" export { z } from "https://deno.land/x/zod@v3.22.4/mod.ts" export { installService, uninstallService } from "https://deno.land/x/service@1.0.0-rc.0/mod.ts" export type { InstallServiceOptions, UninstallServiceOptions } from "https://deno.land/x/service@1.0.0-rc.0/mod.ts" -export { $ } from "https://deno.land/x/dax@0.35.0/mod.ts" -export { CommandChild } from "https://deno.land/x/dax@0.35.0/src/command.ts" +export { $ } from "https://deno.land/x/dax@0.39.2/mod.ts" +export { CommandChild } from "https://deno.land/x/dax@0.39.2/src/command.ts" diff --git a/docs/deno.json b/docs/deno.json index 09f1525..33242fb 100644 --- a/docs/deno.json +++ b/docs/deno.json @@ -1,6 +1,6 @@ { "tasks": { - "lume": "echo \"import 'lume/cli.ts'\" | deno run --unstable -A -", + "lume": "echo \"import 'lume/cli.ts'\" | deno run -A -", "build": "deno task lume", "serve": "deno task lume -s --port=8000" }, diff --git a/docs/src/changelog.md b/docs/src/changelog.md index 441ea18..ba2e05c 100644 --- a/docs/src/changelog.md +++ b/docs/src/changelog.md @@ -9,6 +9,13 @@ nav_order: 13 All notable changes to this project will be documented in this section. +## [1.0.0-rc.13] - 2024-04-06 + +- fix(core): Use `--unstable-kv` instead of the (to be) deprecated `--unstable` +- fix(cluster): Replace deprecated `Deno.serveHttp` with `Deno.serve` for the internal cluster server +- chore(ci): Remove `--unstable` in CI and +- chore(deps): Full dependency update. Replace `lt` with `lessThan`, `gt` with `greaterThan`, and `deferred` with native Promises. + ## [1.0.0-rc.12] - 2023-11-22 - fix(logger): Store (sliced) log lines larger than Deno's KV limit of 64KiB @@ -96,8 +103,8 @@ Pup has now achieved enough stability to enter the Release Candidate phase. Here - A new maintenance loop was added to purge internal logs and status after a set number of hours. -- Breaking changes were introduced with the move to Deno KV for storing internal states and logs. This transition required a fresh install of Pup and the use of the --unstable flag in Deno. If you're - upgrading from an early version, run `pup upgrade --channel prerelease` twice to make sure you're all good. +- Breaking changes were introduced with the move to Deno KV for storing internal states and logs. This transition required a fresh install of Pup and the use of the --unstable-kv flag in Deno. If + you're upgrading from an early version, run `pup upgrade --channel prerelease` twice to make sure you're all good. - The load balancer module was enhanced with features for backend health tracking, error handling, and redirection. @@ -106,8 +113,8 @@ Pup has now achieved enough stability to enter the Release Candidate phase. Here Moving forward, our focus will shift to bug hunting and overall stability improvements. We greatly appreciate any feedback from users during this final testing phase. Please be aware that while this release candidate is close to the final version, it might still contain some bugs. -It's important to note that Pup can currently only operate with the --unstable flag. However, this is automatically managed by the installer/upgrader. As soon as Deno stabilizes KV, the --unstable -flag will be automatically removed during the upgrade process. +It's important to note that Pup can currently only operate with the --unstable-kv flag. However, this is automatically managed by the installer/upgrader. As soon as Deno stabilizes KV, the +--unstable-kv flag will be automatically removed during the upgrade process. ## [1.0.0-beta.37] - 2023-07-01 @@ -144,12 +151,12 @@ flag will be automatically removed during the upgrade process. **A note on breaking changes** This release contains breaking changes. Starting from this version, Deno KV is used for storing internal states and logs. Deno KV is an experimental feature that requires Deno to run with the -`--unstable` flag. +`--unstable-kv` flag. -You cannot update from a previous version using the built-in installer, as it would install Pup without the `--unstable` flag. Instead, please follow the instructions for a fresh install in the +You cannot update from a previous version using the built-in installer, as it would install Pup without the `--unstable-kv` flag. Instead, please follow the instructions for a fresh install in the manual, and the old version of Pup will be overwritten. -From now on, the upgrader will check your installed Deno version and the need for using `--unstable`, and it will act/suggest actions accordingly. +From now on, the upgrader will check your installed Deno version and the need for using `--unstable-kv`, and it will act/suggest actions accordingly. Also not that the `stable` installation channel will be empty until the first stable release. From now on, you will have to pass `--channel prerelease` when using the `setup` or `upgrade` commands. diff --git a/docs/src/contributing/packaging.md b/docs/src/contributing/packaging.md index d5f2690..1e560bf 100644 --- a/docs/src/contributing/packaging.md +++ b/docs/src/contributing/packaging.md @@ -14,8 +14,8 @@ If you have experience with software packaging, your contribution can greatly en - Pup can be compiled into an executable prior to packaging using `deno compile`. The procedure is described at [https://deno.com/manual@v1.34.3/tools/compiler](https://deno.com/manual@v1.34.3/tools/compiler). The command should be similar to - `deno compile --allow-all --reload --unstable --output pup pup.ts --external-installer`. The `--unstable` flag should be included if the version you are packaging (mostly pre-releases) requires - unstable features according to `versions.json`. + `deno compile --allow-all --reload --unstable-kv --output pup pup.ts --external-installer`. The `--unstable-kv` flag should be included if the version you are packaging (mostly pre-releases) + requires unstable features according to `versions.json`. - The `--external-installer` argument to the Pup script disables the built-in installer, hiding `setup` and `upgrade` options from `--help`. diff --git a/docs/src/examples/cluster/app.ts b/docs/src/examples/cluster/app.ts index ffd03e4..18b8c00 100644 --- a/docs/src/examples/cluster/app.ts +++ b/docs/src/examples/cluster/app.ts @@ -1,15 +1,12 @@ const PORT = parseInt(Deno.env.get("PUP_CLUSTER_PORT") || "8000", 10) -async function serveHttp(conn: Deno.Conn) { - const httpConn = Deno.serveHttp(conn) - for await (const requestEvent of httpConn) { +function serveHttp(conn: Deno.Conn) { + Deno.serve(conn, () => { const body = `Response from HTTP webserver running on pup instance ${Deno.env.get("PUP_CLUSTER_INSTANCE")}.` - requestEvent.respondWith( - new Response(body, { - status: 200, - }), - ) - } + return new Response(body, { + status: 200, + }) + }) } if (!isNaN(PORT)) { diff --git a/lib/cli/upgrade.ts b/lib/cli/upgrade.ts index b7dc082..770a953 100644 --- a/lib/cli/upgrade.ts +++ b/lib/cli/upgrade.ts @@ -9,7 +9,7 @@ */ import { Application } from "../../application.meta.ts" -import { gt, lt, parseVersion } from "../../deps.ts" +import { greaterThan, lessThan, parseVersion } from "../../deps.ts" const VERSION_INVENTORY_URL = "https://deno.land/x/pup/versions.json" const LOCAL_VERSION_INVENTORY_FILE = "./versions.json" @@ -46,7 +46,7 @@ function denoVersionCheck(requiredVersion: string | null): boolean { if (requiredVersion === null) return false const denoVersion = parseVersion(Deno.version.deno) const required = parseVersion(requiredVersion) - if (denoVersion !== null && required !== null && !lt(denoVersion, required)) { + if (denoVersion !== null && required !== null && !lessThan(denoVersion, required)) { return true } else { return false @@ -66,7 +66,7 @@ export async function upgrade( // Determine the channel from the version if it's not specified if (version && !channelName) { const semver = parseVersion(version) - channelName = semver && semver.prerelease.length > 0 ? "prerelease" : "stable" + channelName = semver && semver.prerelease && semver.prerelease.length > 0 ? "prerelease" : "stable" } // Default channel to stable @@ -140,7 +140,7 @@ export async function upgrade( // Determine version to install const upgradeOrDowngradingAction = freshInstall ? "Installing" - : (canaryInstall ? "Upgrading" : gt(parseVersion(Application.version), parseVersion((requestedVersion as Version).version)) ? "Downgrading" : "Upgrading") + : (canaryInstall ? "Upgrading" : greaterThan(parseVersion(Application.version), parseVersion((requestedVersion as Version).version)) ? "Downgrading" : "Upgrading") // If upgrading to a version that requires --unstable, alert the user if (unstableInstall) { @@ -172,7 +172,7 @@ export async function upgrade( installCmd.push(ignoreCertificateErrorsString) } if (unstableInstall) { - installCmd.push("--unstable") + installCmd.push("--unstable-kv") } installCmd.push("-n", "pup") installCmd.push(canaryInstall ? versions.canary_url : (requestedVersion as Version).url) diff --git a/lib/core/loadbalancer.ts b/lib/core/loadbalancer.ts index 6a71fab..9a8048b 100644 --- a/lib/core/loadbalancer.ts +++ b/lib/core/loadbalancer.ts @@ -5,7 +5,6 @@ * @license MIT */ -import { copy } from "../../deps.ts" import { LOAD_BALANCER_DEFAULT_VALIDATION_INTERVAL_S } from "./configuration.ts" export enum BalancingStrategy { @@ -116,13 +115,19 @@ export class LoadBalancer { private async handleProxyCommunication(client: Deno.Conn, targetConn: Deno.Conn, backend: InternalBackend): Promise { try { - await Promise.all([ - copy(client, targetConn), - copy(targetConn, client), - ]) + const clientReadable = client.readable + const targetWritable = targetConn.writable + + // Pipe data from client to backend + await clientReadable.pipeTo(targetWritable) + + // Pipe data from backend to client (assuming bidirectional communication) + const backendReadable = targetConn.readable + const clientWritable = client.writable + await backendReadable.pipeTo(clientWritable) } catch (_err) { // Handle transport error if needed - // logger("warn","loadbalancer", "Proxy error:", err) + // logger("warn", "loadbalancer", "Proxy error:", err) } finally { this.updateBackendConnectionStatus(backend, false) client.close() diff --git a/lib/core/watcher.ts b/lib/core/watcher.ts index 07690ae..e2a6c32 100644 --- a/lib/core/watcher.ts +++ b/lib/core/watcher.ts @@ -6,7 +6,7 @@ * @license MIT */ -import { deferred, delay, globToRegExp, relative } from "../../deps.ts" +import { delay, globToRegExp, relative } from "../../deps.ts" type FileAction = "any" | "access" | "create" | "modify" | "remove" | "other" @@ -24,7 +24,8 @@ export interface WatcherConfig { } export class Watcher implements AsyncIterable { - private signal = deferred() + private signal: Promise // Change deferred to Promise + private signalResolver!: (value?: void | PromiseLike) => void // Add a resolver private changes = new Map() private paths: string[] = [] private interval = 350 @@ -37,6 +38,10 @@ export class Watcher implements AsyncIterable { constructor(config: WatcherConfig = {}) { this.config = config this.reload() + // Initialize signal + this.signal = new Promise((resolve) => { + this.signalResolver = resolve + }) } reload(): void { @@ -66,7 +71,10 @@ export class Watcher implements AsyncIterable { private reset(): void { this.changes.clear() - this.signal = deferred() + // Reset signal + this.signal = new Promise((resolve) => { + this.signalResolver = resolve + }) } private verifyPath(path: string): string { @@ -101,7 +109,9 @@ export class Watcher implements AsyncIterable { let timer = 0 const debounce = () => { clearTimeout(timer) - timer = setTimeout(this.signal.resolve, this.interval) + timer = setTimeout(() => { + this.signalResolver() + }, this.interval) } const run = async () => { diff --git a/plugins/web-interface/deps.ts b/plugins/web-interface/deps.ts index 6ce99d1..a14b5af 100644 --- a/plugins/web-interface/deps.ts +++ b/plugins/web-interface/deps.ts @@ -1,3 +1,3 @@ -export { Application, Router } from "https://deno.land/x/oak@v12.6.1/mod.ts" -export { dirname, fromFileUrl } from "https://deno.land/std@0.207.0/path/mod.ts" +export { Application, Router } from "https://deno.land/x/oak@14.2.0/mod.ts" +export { dirname, fromFileUrl } from "https://deno.land/std@0.221.0/path/mod.ts" export { Bundlee } from "https://deno.land/x/bundlee@0.9.4/mod.ts" diff --git a/plugins/web-interface/static/bundle.json b/plugins/web-interface/static/bundle.json index a3d41e3..5a762eb 100644 --- a/plugins/web-interface/static/bundle.json +++ b/plugins/web-interface/static/bundle.json @@ -1,37 +1,37 @@ { - "static/css/web-interface.css": { - "content": "H4sIAAAAAAAA_5xY227cNhB9N-B_YB0USIzVWqu9eCMDBZr0CrR9SfMBlETtspZIgeTGdo38e8GLeBNXduogicU5MyIP5ww5urkGlxcAfKR9TwmApAHiiHoEvkCGYdUhDi4vrm8uL0pGqQDPlxcSnWUtJSJrYY-7pxJkcBg6lPEnLlC_-NBhcv8nrD-px18oEYurT-hAEfj8-9Xi6i8qKPgECb9a_Ia6L0jgGi5-ZBh2Cw4JzzhiuF1c_ShDgo-0owz83NN_8JWLYgbuvKlw_C8qQb683TLU3-lZ3lyDnyC7nyxILkc6VoesgeweMfVfCd7k63yTb-4C62hbFav3q9rZetTgU2-tdVGv187a4cNRjMai3jS73BkPlDbWEW02ReVsFbSmzXa1WSFnGhjuIXtynkWz8SZL0Ekw2NmXFsV-vXLmB8gIJgcbfLMpbPA2JqKFbYuK0HrOFhJR1WjTbp01IKKVP95LfSJ2ebPfQ2fziKjRut6-d6aIiG2139fjzrQTIrb73fbW846IaKpmu22MuVYqyCrKGsSyWiafwbFD9XZfLMD71QKs8vydS7E_5ApfkWOKCUlCIf9ESTYaUS7_TLJsNNd5E5g1u6MVFnXReJEVvaOxed_eNjBMNDsl2Gyb7TTTbOB9m9t981LNxlY_01yz8Vu0qb2kCBmR1K73C7DZLcB28y7KupdAIUNnYQFTErXbL8DtbgH2Ow8VMBZI02TkaAu06aWk8_XE6eXkaA_U6SWlje_LM5WV3kpWxX4BVuvdAqw2aslfZW7eXEtnAP5WiclRh2qBKdHFvKLN01LSKwu6yuLPHJMDUEMvpnIpjW_j-jnSaEYjUAzR2-aBvDLiwcwyLcqVEw8kd83D2KriQSroI8ba4gHMBnogv8p4QLOTHtCvNx7QbKkH9CtPlOaO1LAWR7AIFENCUsPaHGvBQ01JNVLwMBNStSA8REyqU4UHSpHq5OEBU6Q6nXjAFKkJwYwe5yq80Y0ShuIjUoYe-x_SUI4vaCPGnBNHjEurI0al5BFjpvqIEecFEiPPKyRGnpdIgJzRSAoXiyTGnFNJjEvLJEaldBJjpkKJEeeVEiPPSyVGntdKgPxGsVhfc8qo7uEnWp96RAR4wA0CN-AjJQJighgHN-BXRBDDNUAdkhiuj6DlETcNIuAZgAbzoYNPJSCUIPAd7gfKBCTiDqh3LLlglBwkUl31H5DemIp2zQixGQGeQbAEa3inoCPwDMyBdE4kYNrggKZYTHCGpxEm8yKBksMOVMEUpoIexKRFAmYsDmryIgE1Fgc1iZGAGouGXl4sbWEDz6CC9f2B0RNpwrSxGPMC8_yyh8Nb-mc8gp0Yq9-8i78pphTOO3j7o-viPNxtlauP8x7hrrlaOe8VbqCrm_Ne8V6ehkHto0CPIhMMEt5S1pdquIYc3YV6E0dMjCscvRpUUwblxbKU4lVmWB7pFxc4BdEHrT5igy8JJu_ckK5SXovvIeSAtneYoOxo5rla6lajh-yASQl0v2Stef7lqEZs2Wk79DgWtJZSoeYOUhAgC5w4qijfq-eBcqzWBlr8iHQPVFEhaF-CfIjD_gC4voabpXfosQS6DRhg06hqnS-36gtGsGr3YSM1qX9OXOD2KaspEYiIEtSICMSUDXb4QDIsUM-9ca9F-CRL9gAJ0nUZcvn8nH6R_CVrMNOLKGW1OPVEs41JpslZ53rhcgcezdjGjqkQB0YfxoXLXGk7-pA9lQCeBNWz09OI-DIcZR1qRbka-dD7nBnW82VhmLJRjoV2N0BBBw81678cGK0R51kNWRPMQW6JCxFMDMQzYzrzcjtsqQKOq5fJZvRhZkfjdYB8aefxikKtlvvGX67KJnWIJ8jPE_xkuslEhqjXFL0EyTjYK01dvlxPdkRg0Zk8nd4KEnHtExdQnPis5801-BNiolQB3v5NaVdBpr6NdvTA36lr_-XFG_kwI2RD_1eHHZiZsS1Ny8JhevnKSbhvEmEkLl3mhZn_80ymjtVxnS4y8kOCS71UmVFvfmBwKIH8d_LypYBVYmfB6mxR--Z3vYGKEB4n7ivqpYqISDOrrxS5uoR-gM0BcXWdBp854sBeLmTO2OuffDB3afXcUqbvW5gczKW4kpGMfjRyPHBMmTCjXDx1qAScdlhP2i4SE3UYVh2t76ODBfWqaKn_8q198uMy2OATV8XDFrfgGNpFtU1Xg6UFG6mzQwXfFtvtYvybL2-jT1Mf1BvHbkC__9tXru4_2iKnEgSQA7bQhlGUKREKkwbXUFCWvSbo6nVBjVnQIYgk6HAmkLS8ZnIzEYtXRTRWfWQEofTQmfkZ4_mArkVIdJWT9sD5zHuEeNcipD3C9sDs0NgipF2C9sATatohbN9GauAM3GsPNMBrEdIeUXugQV6LkPaK2gMjJ9cipL2C9sBL2ogDOfIyDxIVcJFym_AhQRNOUp5JXiRwwk3Km6T4UeKJOUp5R23UzTX4cBKCEv05sFK_-1rS3zXSVXZyhVT3f4Z6dzTXJ8bl-weK3VHkSrLFpe4yk3uUvdv-BwAA__8DAP-sOcr3HQAA", - "contentType": "text/css; charset=UTF-8", - "lastModified": 1700681588589 - }, - "static/js/helpers.js": { - "content": "H4sIAAAAAAAA_6xY62_bOBL_7r9iTuht5FbxI69207rdOH0F2bRF4mIP8AYIbY0tNhKpI6k6udT_-2FI6mHHaXPA-YMsjebxm-HMcKju06cteAofMc1RwawQU8Ol0DCTChSKGBUXc_h6AkzERMyYMUSJmWGdFljhP2Y8RdCGGT7tftPdxCrTnW-6BU-7rVbX2TiW4jsqo-Ho08UJTGUqFUxljBq4AIM3BoyEqVQKdS5FTFY-js7-JCvwl2K5djIYg0aPUs6cIBfwSudMvAbD5hoW3CTA8lzJXHFmCNttitpqOsc8ZVPUkHKBMFHIrr3Aq4l6bf0mqxBznafstvIxZ4plcKcNBWQJTGg-ItPbYP-mUhjGBYFed8-a_UOhKZTQtQZrxT04-82IKIcyhsltA3y3hTe5VKZaJwdDfjRZGpaI2nDXAsKjjX19TGqPrdYBjFsAAHfWyiHs9iJn9RCCScqm1wEso1WOfs2hML7_fqd-P1eI4j7Hbs1xi2kqF_dZ9powCrzPsF8zZGyOwrD7PAc1z_SWbQDyvGZYJNyUZi5bLYAUDSQmS2FQrWzHr0HY_fumP_x7HI57279f3vWjnWX4sr5vv2m_GWc_Ti-78wjCjJlpEkHeb8PgtV0IAD6D8B9EcSkAwauuzdXAvnUL5VZ9AHm_o_OUmzB4GbTte0KmUBepgQEENstdRgy2SgWUYzOp3rFpEob02DDuzBMRBoMBBP3A5Yf7ecXPBhDMpDDbC-TzxBxOZBq_dNoBloCpxoZQiZiydbCWYp0ZF3EYljGfli9gaTHlTGk8EaZEORjULM7dGnEqVRNqE-yVW8cnd_a_Y6_Ll1cV77LV_F86zQ1ft3zs_YK4N62Ks7HyglY1oM4QtClPvMSV6zZP7ihnln49r1rL-73OJAhz_h0FNS0pYmp2RgJbqXwGhmcIheDGNotR4h40FBpjYArhFpnSEcTsVkeQyIIeMi4KgzqyvdmrX-9XosgmqJaV9W2r3FGpfZZ023ot5gfaFYmVzJ4TYxIjD5u9loCHuh2BTuSCXGQGMqkNmIWEFL9jWoPEG5blKdJ9t-uDqyHoW3cj2LH-BvTabT0jnmG429_f_f2g12u__IWaXR-uHRewdT07B7u9R2nx4d7vlRFf19TffeEV3e_QDTYfvmaDdqtc9uVxQH4HEZCLB71e79K1sHEQs9sgghcHew0awSLegwbNAQwiOKhpzmwQQf9ypd9VXWV82QK78YVEHguWYQTfWVrgJaWIxViWItVmmQavB46rLlOSJ_ajTBaCVJ8xk3RmqZSqkup6IS_iUHTyQifh1ZO7WnoJzSd4DX14A4QNnkGgAzi0D8urUlGp_58elav9VoXaG0pRzE1iW89O2-3_VPmN4vaM3yQXYRBB0P55XU9uDT5Q1bagN1XzkGQiOB1GcDaM4MPQlvBoWFW_qzBNCcQ1ZCzGstR0xtIUferYVVskfJrYd9ZvEpgrZAYVmIQJkArw3wVLSUP_of7gvFjvDo663hu86ETKFJlYwjhXXJivgpuBUZQ02_BXgiYhHQqEtIMdF9O0IDd8NOzQl6APOg11NnQrFsreM84VzlApjMkI6f9SEuowkDJZmLwwEG7ZAG9FsHU6pOuZvX6w19Fwq_2THudc_mWHi0DJQsSOYQdinPKMpeBmy8glAK0NN4ksDNjV9-39Z83m9-f7cDps9BfrSNjv2d8ve1XPZdY9-V9L7nUOnsOH-5b3neXeL_qbY7axi6BKBxgAJQRRGuvn2gWVpIs1lWKvno4qH6omeQ0D6Pd29iqC5v9x02zgWCMITod0PbPXD_Y6GgbU16gl8dVOZG9TOXf229CFinLdtts8gVvBDL_95qx2fB7r1fftqj_CoGKM8ebzbI2v7DXOkaoF28HofSqZCX1UPKhcLsLrCHi73THyPb_BONxpkxYfrjrWb-DqyZ1TSK3Tghjzy-UVHDbebBxSGORKTlFre4grKP1dw2GQFBkT2wpZzCb2kFcW6cYhw0lvw0VDjZzV-h86Cq0aWQWz-eDzxfGQIRzJC6sodALN_bXJBgO_Rsfn745G794eQs9tkRejo_PRyacPh9DvedL510-fLGWnpFyMPn_54kj7nvT-5NPJxUdStFtyvTs__3xOlL2K8q-PR18vrLm9UnD45-fjU6LsO65GRjgXzlie0z5SIh43_eh4_JeHEBzbRh8H0Qa20i3iuzBM0bl9I6N3lvjOC0Fn2Af0uQg4fdIi3MhYxoUY33PBdfIAQh8t4nunFB3tN7OVIbSMNwkr9EM--8gS4zCV02vP1tzeVyI8dk-X8OMHBF_FtZALETRK5C0aVBkXSEXijjw8RmH4jKOCCaMNnY7hG3L2_1kgx-uWw2AuJc10wYTZvwVTbuEgEFgYxdKgvbly5micdat0pWb0gptpAuHPiqtsdFOmsc6Xw2qac03comvwlct72KRVK7kuTT41GKtka0qXy9ukVVm-rrCMjpsGY5yxIjXrTGXcaF9861jcktsEarRNlk6LlBoKDQYxn81QoZgiTNAsECkb3GQYEw8NdsQ3LZRCYSpivdGuq2GUa5sb7VtmcOlUuFHN3tr5LMtpsLRzx7q5n0w7_oteNX7RhyeFmvJMzK0iezKt0VUT6trcBguepjDBcqzzrm2N_TliTNPPJbC53KLdtRqfSZ11grvPgAlCzrSJaHhaF54pmYGQi1UNDXFSZo0XplAYwSJBhVBq4W5qF0WGik9ZuhJzEZdWHBupWp_57OdGCke45Q8bNE_6MyHd2oPilsNOR8-tB0qQlBzNZUjIm7uVkAsYgMAF0EKHbT--eGNfmKZRIRRy0ZmjO1K2YdstcUWgcYbGxVK2mM34DX06otjbAmgc4azKVzR9uaJetbTdeHSva2XlWgRld72v9aBSS0Dc2WRQfwJqMJcfaGwdOsZnEHqJwcCe_AIPjg5-5b0O2vDMo3oYBx2QH4sEugT7UXD8UdvCKb8LPAbOCzrE_w94LPxHIbIfBCwe973jPppHmHPw6u3yQWv0ScIas99oGraWrf8CAAD__wMAjoXGR1UYAAA", + "static/js/ui.js": { + "content": "H4sIAAAAAAAA_6xabXMbtxH-zl-xuarpUSaPaj81mdCuLTmxZmQnE0mdadM0gg5LEvYRuAKgKEbhf-8sgLvDHV8kyvYHiwSwr1jsPlhwdHzcg2O4PgeNBbPIYbKQuRVKGhAyLxZcyCnMmOQFfcgLkX8CvENpzQByjczS8Lur9xeABc7dODFclNxPGcvswqAZAJMcSq1yNIYmCjU1WQ-c-H9MRIFuqchHH81oIbKPpgfHo15PzEulLTwAk0ZcqXd2XgxgovSc2TcrS3z9lysxxwFM0V46gaeqUHoAP3l5NIZX6tJqIacDsGKOr6cK1jDRag5JNpphUaI22UeTNBKDsqdKTsT0XJLRSq8G1fglFphbklINOMn1wog9WYZt5lO0F2pqokUS7VLpT25Zj5mVzOu98O7Ec2kskzmmInw4Y5bV4ulLHx56ALmSxoJZGYvz9zhXenVt2BR_Qp2jtDCGtMUhi1dmVllWwBB2r5hoxD6M4DEex_DXk5N-ZtX34h55-rd-D8CgvcJ7e6qkRWnfrConpsmfPIfh3LEYLkjjYelVTgZwc_Swy6D1n2-ItZhAutPml_DNiXcOAFf5giI1m6J964P2zeqcp0lbg1xJy4REnfSzvGDGfGBzhDEkt9PhLeMwcX-SHsAasDD4mAJ__5IKLJmWdIom9UenyO7NhzF87p4fvH1-26LDuumeAUxYYXAAyQ9vkv4aRtAmeETnAVi9qKldGMT2Xy5ZeUDomyUrrx51Ba36_tEj0PB63jEg-t2HoGtYOAJbbd-784eZfKDmu_a_Vu35u1_rvSUCHldxUVIJSOLa0ZalzLVb0n8aP2WGGgtkhnh2GP3sJ57GqFCMd1nQ2Ou7aTZnZZoWfRi_hCKKpn72UQmZJgNIHtO2XJTd87nT235dpo3xHn4Kb45SDe9QG6Fk1wqa-6efcp-fwG4HpzDcxLvfTRiDxCWcMYtpH4bNl3YQWaYt8idI3xYjQdKITvTJUzwSSjOarhH1RFagnNpZZgM6SR3bqKRnE6XfsnyWpvlCa5Q2YBoXCL6eeHQQxk-Z5t2lVBr6vXWvN_Jw73TG5BTBzpBgGJhclQhWAQNTYi4mIq80IIQGVzNhGizCCqOCSONYXJ8TrcYJme5Gcse_Rncl02wOD8YZuK5Yn3MYwtUMQXBQE0cXCR318N5BpQ4S8qwv1PSSlE5rXr62dqBZZtBGS3o9gAItGCaFFb8jP-c0RHW70enrryMFvxqPIcmVxqSq3REtjOtv57wjBmA0gsuZWgLzaHp_4Q-LNkv-hTA20zhXd5gmM8E5yqQR8LOb8C6n1R5LsqKoTICcae5l-7NSYVoahnGj0P8WqOvgfV0UaVKF6JBYJBRC0KJu4jIajYKytXqLMTH7oXGSsZKzbkx8zXlkn1XuS7W8ZWZkZTUfHYnY2I73b1qqHD1EW-wLSsCWm0z72yRFtjLOdxvqw2l3_rBKFbdMD8NZrnJJUgN-CrW9UbWLw5Ni69qdcOfuwAeWws62-5-jZaLwgeZTw6XgeMt0Gjmz30Dlh89X3Pl2Q-t3guOXOHJbuLftcsbQxGgEpwUy7S60VCy2e0jJYkUVi5bSxS91XEcjuFCM76f1V2fmD8IclES4Xbk_zKdbq8oqg86EcXfPpZBcLb0EIUEjVU0EpTnqzCd04Y7TnH1CMAuNwOTK68E4Rw58QdkaLC2tjBDVJJtY1LHALKRWx2AMbMmEre64cWoEf-83hcgx7WdBr7TfZJNCTV0WYZxfqCl9rQFIVMCcxynRUf1CabXAkP1CUTNg0O2wLyZN_Wg2ILorE8GZuNuTJBJa4tJTWJsJKVG7zscYkiRSjlIWqxVbVUmrq1RcGn-8_Yi5XTuiIVxUpFm85lapAplcwy-CjhQrfoWhk1WbL7SxHXNjLwYybzeF7QzzT5TagnZ_aTb6_AzmzOazUOHDOSxWm3F9ftauoHXpnaJN-1RNCzXN2hV169I-aLQLLXvP25QQe9QfgjHcfFfqUDPGydFDS4V18vLooUaHNEWg7tKyeUm3tAuVswIrMLaGP8DT58ziVOlVM2IoeIVdreElHD00_SnPE-9tf_0f-d2o1PjyJjiptQXbQ6m24sXmdDeB7qJvj72oebqc1QTqO9f1arCVVVSPgFSnLaCKRHnl7Mf3dXOPMo-PAaW3YMOlKAqQyoKQFnWpMSQo4siM6xPuQoUV1wAK669VVoy1yLYxcEI8sftoFdwSH9uCk7WqOytvJXng2MRZonbCPuBUkVctqVpnD_ThJdR9oHqqTn5hpAWjwpiLqKAtjJ1uFVbqRAUpqwrMqDGU3nxQjd4TtZDcl_Hav0cP1cd15tDOYxESCjqcn_mStTBY7S2N7dpfUcF9pcVUSFbA-ZnfR3_uTbPU7X-FG8KyKKdFoFsE3O-wcFmwHF1REPKOFYLTZUGz3KI23uiF5KgN4fkehHQDgmfak6ajX_7Lhr-_Hv77ZPjN8Ldvfx1NB5D8lsSFJ0JFxiOBBhUFEERHZvtF6jMuQ51OcIVCOtef1k2mirLRCH7AGvlTdEzE1EEK35sHzizbckXw68Y72uAuaXeAaIved8Mb-k53vEvfgZ0dbe9YsUAP6PbduCuk7YiGuZrPmaR-SsuELJ9z-OOPziC13tEd2kNEsIVVrqWwIaSegVeQ_AtNAt9C8kGFC84BRmjXAelYoJUkE5IPo9cHc9S4XeMw7viyYslW5mDWFvVcSGZxg3k982y18yXtZH3b9OGUWZfbCGU19_buVJYveR9e7ZuGF5BAWg_1abc6Liceje47wjWcqMPC1RMN7aqM_FZpuSq9y67lJ6mWdBk5jOttofJPyDcYh_HnRmfg7v8k2x_aOlvl1_YPFRHCMrr3Bn7VBLnn5BmKUx9wg2kYh1fVI2FaI0X6LysZXVe20vT7fefFQ2I7aIP3YpsyfvggXTzJZ6ji68umLmH8IGUCzWdoU5_IzYNRH_xXkJwqKX1b5YmCArTakOe73skgzD8n2XgWlG_i3vr-1dRm92Fc6e81-CwrhjNk5dA9k30JgwIHOMww0uHaoCu4J32XZkeQwItDefg3quak078v6Cq8t6jll3HUYQ6qJG_f_v0trMqWADz39_We2nvbx7TdFWtfFUIlZK2ebH15gVP6rQiCsARShQWu0LibIis0Mr4CvCcJO_oi0XsIDKti44Br5wpBt5AzcRcsWtdLW8psQ9Tx68mOH1Q8VOV9dDyogOnxCNYNxiWK5hl210uB55IJj3oDPFfa_5wGuz1t6myUX6aPTdeDr1rdeh8LO9h7fYKENOHibvMZIBNEslfyBgnj_C3dAiikUKJOE_ezIkJ3rYtv56mn00neeCUQuZLRNYS-7rFGBFtoWTfCJ6yCvq7vHyGxMb0H1d3oHcTDfHGLgUHzw5Aul7xYGEtd531cKj1a7itLlPx0JgqeEmnbC1X0WGELjNzhvu_xhylZBS7d0l2vGG6ytbDdl-i8rW3o5f0QKRYjx6fpF1PsUjMA08cJbhmfkj2RQbGDY9KwaNdeOOL2ZhBEaqXD0Ao--_F95IH6BWJfp7N1wqI3izpM67HqVDv2fqilZ5wA_DmK60KnfZScMklZeiIkjxQNmdS9GTvWG6Zm1VNe9E6y9bLU2xEIsZtbTbboaTLa5dYet0Py5uhh6_XEtO4lLlFtRkr1m6u2SPBh09sbWze30-HRQ_sniRtC-4_xcE82T-HjfXyJFjwN5LQQONL-0FOOkpuu33ijDfa2MvoN8Q7tsoiAin_oqj6Eh4ZB55eK1feoulZDoYUF697_AQAA__8DAKGpwdyEKgAA", "contentType": "application/javascript; charset=UTF-8", - "lastModified": 1700682263767 + "lastModified": 1711451378995 }, - "static/js/main.js": { - "content": "H4sIAAAAAAAA_7RVTW_bRhC981cMeKIMWlSuBVoEtRNAQYwUcHIuRrtDcezVDrE7lKEE-u_FLklFcos6ReOTxPl4-3be7ExzdVXAFdwheyCv4QC9sFdoJYB2BMYxeb2ObAk-4B7vTeBeAfvesUFl8cuU_7njCC07Ao4QKPbiI28cZZyNiEYN2Pfstxn1LL2GltR0ycOeldGBRcU6oW7JU0BNvj6IoRjBYLAR0Fvo0FuXXF_WwF4poEl4MfFJyTtkXy3giZ2DMHjAVmm80-2nO-gwQjs4dwAnaMlOSW_zHaKismkeYpNAlg-xgKumKHjXS1D4BqZDv6WPsr030lMNQ29Rae2jojen7z9GyjcYLByhDbKDctkMvHyI5RmWeA3ipuCpGt-h8ufkpHiG40mfJDxegk1VuidHRiWchacrUQ4umlHy9Vht_krxuSZZ0vfp5Mk34VIc8ZIpUthTqGeNaJYmCU5oujknC5n0QlWcASNN0SqzIkv43BG0HKKexOYIMV-FLGwOYKnFweks8FuMB29G1Qafxc86ZTPMprkPvhUAqb3TL0DTwI14T0ZhM6iKz1SmDsoRVsywI6_LLek7R-nv74e1rcqoGPR6olgulmjtuz15_chRUy2q0jg2j2UNI5FqAb_-9kzm6plQ6ZBqUcMIXi4WL1GQ_vUYSP8igY0T8_haDDL4ixQG_6okJvgXaQR61X6Y4BONf-ehIm6D4Rqdm7nQj7MZH8X4LPJsmx_m1skGHcQ059IT7DHGNHO9aBrZU9rlPKzGkh1_lLKRQP-5fj-XcZk4lJe8mwa-5DkOPE1jYN9K2OURCbSncIA3K-0gkhFv6zzleLcjy6jkDhklkq7Tctqjq_6J_-XqqPAJWS93QOqDM_NpF1RTax5reLP6c7Vafed9K4D-tE7HI7Lv_552BINqOqgoBAnjUIXUy1EcLbOxKt8jO7JJj4kBf6XnG-aXsoYRI6EWx6I4tcnf9b_9dHcjXpMt7-qyzkN9UfwFAAD__wMAhBQwb70IAAA", + "static/js/state.js": { + "content": "H4sIAAAAAAAA_4yQwWrDMBBE7_sVc7QNtb8gUOgph0CgX6DIK0dBrIx21bSU_HupkuZQWtrjDm9mh5mGgTBg58QtrLAjY0n54BLUnDFCLk088-EhinEJzjPWVJcoyAH7uo6ElvEYYuJmi3466dQCxpMShonIJ6eKfcmeVZ85sbdc8E6Az6JW6ufd9U0B7Bh11EbxfDNtZ2xQZeYQhWcCLgQoWxfnP23xi1_Y7k8KWy3yi6nxFyJ-XXOxa0mst_rmrOpWXlgslzdsIHzGzq1d_yP_lCXE5f_8fZ4r-G20rqcPAAAA__8DAAR4LUm2AQAA", "contentType": "application/javascript; charset=UTF-8", - "lastModified": 1700682263767 + "lastModified": 1711451378995 }, "static/js/network.js": { "content": "H4sIAAAAAAAA_-RZS3PbRhK-41e0UaqYdGhg98paxnE53o1S8lplyZuDyxUOgSY5EjiDzAzEcBn8962eFx6iFDnZ1B5WFwGDfk0_vu4Z5i9eJPAC3jHBNqjBbBEEmr1Ut6Dw5wa10cBECT_i6koWt2igkLtdI3jBDJcC1lJZpj2uXnJhUK1ZgVBXzYYLkGu4bOosAavj2zWvELRhhhf5jc69nuxGJ_AiTxK-q6UycARWlhdyM4OmLpnBSyUL1PoNU2VYuuIlrpiCFtZK7iDN8oZnNzrtRNSeSYo135yLOxRGqsMsrF9hhYWRqlswzDQ6EvYkk71ohSf4i5W-bkRh975BgYoZjL75-OFiMoVjAlBIoQ1UsoAF7Lko5T6rpHNZ_ForaWQhK1gQYda9LhaQbo2p9TyFV5DuNT3M6WGedtxkiuekx1ewnJ8dw2u7JIaOuuQqEDOzFWyHWcW0ORcl_vJ-PUnzdArPFgt4-Vd4NSTTzUobxcVm8pfZ4wKm8DWkubU0J80KTaMELM-OYWttnjsTt1IbktGeHa21Z8eSq3avl0mbJHkO54Ibzir-bxwknhBoPZ-4TWm3vgCB-45ucjosUyv4dVkCUpCh4toQoc1gLgq542IDO9SaCiFxsjNWlm-J_MJTT1JPkc5gYgVNYfFNL-T-Myzgh6v3_8xqpjQ6wqxkhk0TgC0TZdVZ985xTDznNGnJVFeW31tSfd8-l55RBpUYfFszxXZwlKsbLEwbTXkJ11uMbwoL5HdYOglUugMpeRLT-zfstJvOc3grdKM6-VxDiWsusLS4sWUaBFKJMXWglK9RGY46AeBrmDwLbL_-CuE5M4d6uGA9Z_U5N8sKM1RKqkl6Lu5Yxcugfp7OwiO5OiRhAtAmCYDec1NsYdLXFAUzjZB6PPiJyr7RPxVbJjZYpnNLcmK_1rbMUdsNn1jPeAlMYfCLF9Xf_kDKeOedlGDqI37w9luYbXTPHX1RzjX0t1LIbv2b9RD9ncbETKOZnLbrASVe3D0YH0iJZFT2a5uQjqHbC9dQNEqhMNUBtIVujL3AchgpK2oITMMeq6rn4RHgZxs0k6mF2N928aDZPLD14Mo2GTvU5VMlNzF5XF8b7X7MVuKaNZUJPKMwfxS3Qu5FrDZK4H6QbULbbG8jiLyRwihZuebu_YEaVuRLURKqsNDrwUhgoGss-JoXQMXq2jyKspZcDIHG9YUWeOkx5vw7avk9NSSvcOpPcnYKnIDu3UioUa2l2gG9dSKdHFfWGo6XSu64xr850PumhddESEtgtsyAQi2rO5pspJWiUd2houVaCo1OmtkquddwfEtObuHHLQpoBFtV2LfDDAykrrEGJoD7yus-cR1ciKXDVD85MH0QRTc_eM_4yphQHUUhEV5fK8UO5NaRFh1bjv3wPq7DAj6l2jBl0hmk2sia_q8qWdzSQyPio0JH9plKMM_hXySISioqCSg9UpFxUVRNiXrS2RsKx_rSdmTrzckyIFMkncPZMb60GbxrtIEVghRI-zw7jrXdSC4mZPC0zZYuuxOACk0MYwJg1MFbEBZhAWzPuIE1mmI7WWZ5X29-duRlu5zFet-h2cpyDuk_3l6nM7-4RVai0vMeKqRUTyjMy-tDjekcUlbXlR-H8xstRWRu3UNrTYaC2dZjC_l0M1taj4V8o8LsG9zPPRELzO5ivpyBk9sLgV0IzrJRjEkvbx-M1vfX15eO9VnoIXB2jJxuqe2i4FJQoW4qEx0eyckdk6nX74m--sqTZ7opaA_BFge350IbJgo8F2tpWdtulHR8PWj7O0XWzkeOCQhTu8nGFbstcVt6j0HHp8-Pg0dU4bs0aXoCeNjcGyKvg4QRFli6sHd_iPjSDA-nlfSpCZe6hLPclG7RRGoppxOKcEKqEBAmAHe1OQBzKKVC-yJQavBPz75gxsmsu58mFIZKbrSd-Xt9LhTTKHEIjik4rKoOsOaVQepa1DgZGL5DUDQczkDjHSpuDlDhHVYzOwbSxiq-475jduk36oBe9fmjLdQlUbD8ZCf9ZKH8mu_wyrBd_RlewmsR7bfmavoAXJQWrMTG7ZTYgspuU9ZD-y2n3O3rP60bRfnlmlGUf1RvcPxY5zAgFLBOpA1jzITTcsUHuddjoTaaYRgRzW6Fiuyv5IaC3cUp-yMoY-3i2kaks--pEBM4Hho4Nmgu5EaHofi8nLn4x-DNKCq9t-DIGViXxKGkdz73obTTIey5GYAdnH_ncSySLGCZ5WTo0k8dlwprOh0xAc5H8U7p5wbpzEjBQYNKe1F2gcaco8UAf6p_Hjf1PDjSE_I1cPM8Hks9HkXyAEaOOusKctEVZ8CboGvotacpHPKMtA4_wmIUl7H-fpSepr3PMdLd_wSLQQbc27fPhyfu2FOP9xqqcxHza6zHZtvTlPQSM2qwa3QvRP97st9IcYfK9IX6lLPnno8fLq6QqWJ7afHAffJJZ3PRrlvBuB9R64kTOA3bqGsCuFNpHLYVSiKBrjq-XsDy1dmxpy0z8srdv01bWzJfOhUE2V84hcahIDbMbuSMdfG_nDx_T-_3yNodgv-UUfGkquy_PSz6YyPq3z8tRi3_PxNjvHr3CfDQkSUBm_OTAf0goMGkXjPJCvt7Ax1xhiuDi6X65G8T9nrtHlf8gcIvOe-6y6a-Yn8o6Sk-caP1yL3ePa5Ocf_KkBT3zmPRF1RvfuQ4Do8ys1GyQpv8BwAA__8DAF3ENapzGgAA", "contentType": "application/javascript; charset=UTF-8", - "lastModified": 1700682263789 + "lastModified": 1711451378995 }, - "static/js/state.js": { - "content": "H4sIAAAAAAAA_4yQwWrDMBBE7_sVc7QNtb8gUOgph0CgX6DIK0dBrIx21bSU_HupkuZQWtrjDm9mh5mGgTBg58QtrLAjY0n54BLUnDFCLk088-EhinEJzjPWVJcoyAH7uo6ElvEYYuJmi3466dQCxpMShonIJ6eKfcmeVZ85sbdc8E6Az6JW6ufd9U0B7Bh11EbxfDNtZ2xQZeYQhWcCLgQoWxfnP23xi1_Y7k8KWy3yi6nxFyJ-XXOxa0mst_rmrOpWXlgslzdsIHzGzq1d_yP_lCXE5f_8fZ4r-G20rqcPAAAA__8DAAR4LUm2AQAA", + "static/js/main.js": { + "content": "H4sIAAAAAAAA_7RVTW_bRhC981cMeKIMWlSuBVoEtRNAQYwUcHIuRrtDcezVDrE7lKEE-u_FLklFcos6ReOTxPl4-3be7ExzdVXAFdwheyCv4QC9sFdoJYB2BMYxeb2ObAk-4B7vTeBeAfvesUFl8cuU_7njCC07Ao4QKPbiI28cZZyNiEYN2Pfstxn1LL2GltR0ycOeldGBRcU6oW7JU0BNvj6IoRjBYLAR0Fvo0FuXXF_WwF4poEl4MfFJyTtkXy3giZ2DMHjAVmm80-2nO-gwQjs4dwAnaMlOSW_zHaKismkeYpNAlg-xgKumKHjXS1D4BqZDv6WPsr030lMNQ29Rae2jojen7z9GyjcYLByhDbKDctkMvHyI5RmWeA3ipuCpGt-h8ufkpHiG40mfJDxegk1VuidHRiWchacrUQ4umlHy9Vht_krxuSZZ0vfp5Mk34VIc8ZIpUthTqGeNaJYmCU5oujknC5n0QlWcASNN0SqzIkv43BG0HKKexOYIMV-FLGwOYKnFweks8FuMB29G1Qafxc86ZTPMprkPvhUAqb3TL0DTwI14T0ZhM6iKz1SmDsoRVsywI6_LLek7R-nv74e1rcqoGPR6olgulmjtuz15_chRUy2q0jg2j2UNI5FqAb_-9kzm6plQ6ZBqUcMIXi4WL1GQ_vUYSP8igY0T8_haDDL4ixQG_6okJvgXaQR61X6Y4BONf-ehIm6D4Rqdm7nQj7MZH8X4LPJsmx_m1skGHcQ059IT7DHGNHO9aBrZU9rlPKzGkh1_lLKRQP-5fj-XcZk4lJe8mwa-5DkOPE1jYN9K2OURCbSncIA3K-0gkhFv6zzleLcjy6jkDhklkq7Tctqjq_6J_-XqqPAJWS93QOqDM_NpF1RTax5reLP6c7Vafed9K4D-tE7HI7Lv_552BINqOqgoBAnjUIXUy1EcLbOxKt8jO7JJj4kBf6XnG-aXsoYRI6EWx6I4tcnf9b_9dHcjXpMt7-qyzkN9UfwFAAD__wMAhBQwb70IAAA", "contentType": "application/javascript; charset=UTF-8", - "lastModified": 1700682263767 + "lastModified": 1711451378995 }, - "static/js/ui.js": { - "content": "H4sIAAAAAAAA_6xabXMbtxH-zl-xuarpUSaPaj81mdCuLTmxZmQnE0mdadM0gg5LEvYRuAKgKEbhf-8sgLvDHV8kyvYHiwSwr1jsPlhwdHzcg2O4PgeNBbPIYbKQuRVKGhAyLxZcyCnMmOQFfcgLkX8CvENpzQByjczS8Lur9xeABc7dODFclNxPGcvswqAZAJMcSq1yNIYmCjU1WQ-c-H9MRIFuqchHH81oIbKPpgfHo15PzEulLTwAk0ZcqXd2XgxgovSc2TcrS3z9lysxxwFM0V46gaeqUHoAP3l5NIZX6tJqIacDsGKOr6cK1jDRag5JNpphUaI22UeTNBKDsqdKTsT0XJLRSq8G1fglFphbklINOMn1wog9WYZt5lO0F2pqokUS7VLpT25Zj5mVzOu98O7Ec2kskzmmInw4Y5bV4ulLHx56ALmSxoJZGYvz9zhXenVt2BR_Qp2jtDCGtMUhi1dmVllWwBB2r5hoxD6M4DEex_DXk5N-ZtX34h55-rd-D8CgvcJ7e6qkRWnfrConpsmfPIfh3LEYLkjjYelVTgZwc_Swy6D1n2-ItZhAutPml_DNiXcOAFf5giI1m6J964P2zeqcp0lbg1xJy4REnfSzvGDGfGBzhDEkt9PhLeMwcX-SHsAasDD4mAJ__5IKLJmWdIom9UenyO7NhzF87p4fvH1-26LDuumeAUxYYXAAyQ9vkv4aRtAmeETnAVi9qKldGMT2Xy5ZeUDomyUrrx51Ba36_tEj0PB63jEg-t2HoGtYOAJbbd-784eZfKDmu_a_Vu35u1_rvSUCHldxUVIJSOLa0ZalzLVb0n8aP2WGGgtkhnh2GP3sJ57GqFCMd1nQ2Ou7aTZnZZoWfRi_hCKKpn72UQmZJgNIHtO2XJTd87nT235dpo3xHn4Kb45SDe9QG6Fk1wqa-6efcp-fwG4HpzDcxLvfTRiDxCWcMYtpH4bNl3YQWaYt8idI3xYjQdKITvTJUzwSSjOarhH1RFagnNpZZgM6SR3bqKRnE6XfsnyWpvlCa5Q2YBoXCL6eeHQQxk-Z5t2lVBr6vXWvN_Jw73TG5BTBzpBgGJhclQhWAQNTYi4mIq80IIQGVzNhGizCCqOCSONYXJ8TrcYJme5Gcse_Rncl02wOD8YZuK5Yn3MYwtUMQXBQE0cXCR318N5BpQ4S8qwv1PSSlE5rXr62dqBZZtBGS3o9gAItGCaFFb8jP-c0RHW70enrryMFvxqPIcmVxqSq3REtjOtv57wjBmA0gsuZWgLzaHp_4Q-LNkv-hTA20zhXd5gmM8E5yqQR8LOb8C6n1R5LsqKoTICcae5l-7NSYVoahnGj0P8WqOvgfV0UaVKF6JBYJBRC0KJu4jIajYKytXqLMTH7oXGSsZKzbkx8zXlkn1XuS7W8ZWZkZTUfHYnY2I73b1qqHD1EW-wLSsCWm0z72yRFtjLOdxvqw2l3_rBKFbdMD8NZrnJJUgN-CrW9UbWLw5Ni69qdcOfuwAeWws62-5-jZaLwgeZTw6XgeMt0Gjmz30Dlh89X3Pl2Q-t3guOXOHJbuLftcsbQxGgEpwUy7S60VCy2e0jJYkUVi5bSxS91XEcjuFCM76f1V2fmD8IclES4Xbk_zKdbq8oqg86EcXfPpZBcLb0EIUEjVU0EpTnqzCd04Y7TnH1CMAuNwOTK68E4Rw58QdkaLC2tjBDVJJtY1LHALKRWx2AMbMmEre64cWoEf-83hcgx7WdBr7TfZJNCTV0WYZxfqCl9rQFIVMCcxynRUf1CabXAkP1CUTNg0O2wLyZN_Wg2ILorE8GZuNuTJBJa4tJTWJsJKVG7zscYkiRSjlIWqxVbVUmrq1RcGn-8_Yi5XTuiIVxUpFm85lapAplcwy-CjhQrfoWhk1WbL7SxHXNjLwYybzeF7QzzT5TagnZ_aTb6_AzmzOazUOHDOSxWm3F9ftauoHXpnaJN-1RNCzXN2hV169I-aLQLLXvP25QQe9QfgjHcfFfqUDPGydFDS4V18vLooUaHNEWg7tKyeUm3tAuVswIrMLaGP8DT58ziVOlVM2IoeIVdreElHD00_SnPE-9tf_0f-d2o1PjyJjiptQXbQ6m24sXmdDeB7qJvj72oebqc1QTqO9f1arCVVVSPgFSnLaCKRHnl7Mf3dXOPMo-PAaW3YMOlKAqQyoKQFnWpMSQo4siM6xPuQoUV1wAK669VVoy1yLYxcEI8sftoFdwSH9uCk7WqOytvJXng2MRZonbCPuBUkVctqVpnD_ThJdR9oHqqTn5hpAWjwpiLqKAtjJ1uFVbqRAUpqwrMqDGU3nxQjd4TtZDcl_Hav0cP1cd15tDOYxESCjqcn_mStTBY7S2N7dpfUcF9pcVUSFbA-ZnfR3_uTbPU7X-FG8KyKKdFoFsE3O-wcFmwHF1REPKOFYLTZUGz3KI23uiF5KgN4fkehHQDgmfak6ajX_7Lhr-_Hv77ZPjN8Ldvfx1NB5D8lsSFJ0JFxiOBBhUFEERHZvtF6jMuQ51OcIVCOtef1k2mirLRCH7AGvlTdEzE1EEK35sHzizbckXw68Y72uAuaXeAaIved8Mb-k53vEvfgZ0dbe9YsUAP6PbduCuk7YiGuZrPmaR-SsuELJ9z-OOPziC13tEd2kNEsIVVrqWwIaSegVeQ_AtNAt9C8kGFC84BRmjXAelYoJUkE5IPo9cHc9S4XeMw7viyYslW5mDWFvVcSGZxg3k982y18yXtZH3b9OGUWZfbCGU19_buVJYveR9e7ZuGF5BAWg_1abc6Liceje47wjWcqMPC1RMN7aqM_FZpuSq9y67lJ6mWdBk5jOttofJPyDcYh_HnRmfg7v8k2x_aOlvl1_YPFRHCMrr3Bn7VBLnn5BmKUx9wg2kYh1fVI2FaI0X6LysZXVe20vT7fefFQ2I7aIP3YpsyfvggXTzJZ6ji68umLmH8IGUCzWdoU5_IzYNRH_xXkJwqKX1b5YmCArTakOe73skgzD8n2XgWlG_i3vr-1dRm92Fc6e81-CwrhjNk5dA9k30JgwIHOMww0uHaoCu4J32XZkeQwItDefg3quak078v6Cq8t6jll3HUYQ6qJG_f_v0trMqWADz39_We2nvbx7TdFWtfFUIlZK2ebH15gVP6rQiCsARShQWu0LibIis0Mr4CvCcJO_oi0XsIDKti44Br5wpBt5AzcRcsWtdLW8psQ9Tx68mOH1Q8VOV9dDyogOnxCNYNxiWK5hl210uB55IJj3oDPFfa_5wGuz1t6myUX6aPTdeDr1rdeh8LO9h7fYKENOHibvMZIBNEslfyBgnj_C3dAiikUKJOE_ezIkJ3rYtv56mn00neeCUQuZLRNYS-7rFGBFtoWTfCJ6yCvq7vHyGxMb0H1d3oHcTDfHGLgUHzw5Aul7xYGEtd531cKj1a7itLlPx0JgqeEmnbC1X0WGELjNzhvu_xhylZBS7d0l2vGG6ytbDdl-i8rW3o5f0QKRYjx6fpF1PsUjMA08cJbhmfkj2RQbGDY9KwaNdeOOL2ZhBEaqXD0Ao--_F95IH6BWJfp7N1wqI3izpM67HqVDv2fqilZ5wA_DmK60KnfZScMklZeiIkjxQNmdS9GTvWG6Zm1VNe9E6y9bLU2xEIsZtbTbboaTLa5dYet0Py5uhh6_XEtO4lLlFtRkr1m6u2SPBh09sbWze30-HRQ_sniRtC-4_xcE82T-HjfXyJFjwN5LQQONL-0FOOkpuu33ijDfa2MvoN8Q7tsoiAin_oqj6Eh4ZB55eK1feoulZDoYUF697_AQAA__8DAKGpwdyEKgAA", + "static/js/helpers.js": { + "content": "H4sIAAAAAAAA_6xY62_bOBL_7r9iTuht5FbxI69207rdOH0F2bRF4mIP8AYIbY0tNhKpI6k6udT_-2FI6mHHaXPA-YMsjebxm-HMcKju06cteAofMc1RwawQU8Ol0DCTChSKGBUXc_h6AkzERMyYMUSJmWGdFljhP2Y8RdCGGT7tftPdxCrTnW-6BU-7rVbX2TiW4jsqo-Ho08UJTGUqFUxljBq4AIM3BoyEqVQKdS5FTFY-js7-JCvwl2K5djIYg0aPUs6cIBfwSudMvAbD5hoW3CTA8lzJXHFmCNttitpqOsc8ZVPUkHKBMFHIrr3Aq4l6bf0mqxBznafstvIxZ4plcKcNBWQJTGg-ItPbYP-mUhjGBYFed8-a_UOhKZTQtQZrxT04-82IKIcyhsltA3y3hTe5VKZaJwdDfjRZGpaI2nDXAsKjjX19TGqPrdYBjFsAAHfWyiHs9iJn9RCCScqm1wEso1WOfs2hML7_fqd-P1eI4j7Hbs1xi2kqF_dZ9powCrzPsF8zZGyOwrD7PAc1z_SWbQDyvGZYJNyUZi5bLYAUDSQmS2FQrWzHr0HY_fumP_x7HI57279f3vWjnWX4sr5vv2m_GWc_Ti-78wjCjJlpEkHeb8PgtV0IAD6D8B9EcSkAwauuzdXAvnUL5VZ9AHm_o_OUmzB4GbTte0KmUBepgQEENstdRgy2SgWUYzOp3rFpEob02DDuzBMRBoMBBP3A5Yf7ecXPBhDMpDDbC-TzxBxOZBq_dNoBloCpxoZQiZiydbCWYp0ZF3EYljGfli9gaTHlTGk8EaZEORjULM7dGnEqVRNqE-yVW8cnd_a_Y6_Ll1cV77LV_F86zQ1ft3zs_YK4N62Ks7HyglY1oM4QtClPvMSV6zZP7ihnln49r1rL-73OJAhz_h0FNS0pYmp2RgJbqXwGhmcIheDGNotR4h40FBpjYArhFpnSEcTsVkeQyIIeMi4KgzqyvdmrX-9XosgmqJaV9W2r3FGpfZZ023ot5gfaFYmVzJ4TYxIjD5u9loCHuh2BTuSCXGQGMqkNmIWEFL9jWoPEG5blKdJ9t-uDqyHoW3cj2LH-BvTabT0jnmG429_f_f2g12u__IWaXR-uHRewdT07B7u9R2nx4d7vlRFf19TffeEV3e_QDTYfvmaDdqtc9uVxQH4HEZCLB71e79K1sHEQs9sgghcHew0awSLegwbNAQwiOKhpzmwQQf9ypd9VXWV82QK78YVEHguWYQTfWVrgJaWIxViWItVmmQavB46rLlOSJ_ajTBaCVJ8xk3RmqZSqkup6IS_iUHTyQifh1ZO7WnoJzSd4DX14A4QNnkGgAzi0D8urUlGp_58elav9VoXaG0pRzE1iW89O2-3_VPmN4vaM3yQXYRBB0P55XU9uDT5Q1bagN1XzkGQiOB1GcDaM4MPQlvBoWFW_qzBNCcQ1ZCzGstR0xtIUferYVVskfJrYd9ZvEpgrZAYVmIQJkArw3wVLSUP_of7gvFjvDo663hu86ETKFJlYwjhXXJivgpuBUZQ02_BXgiYhHQqEtIMdF9O0IDd8NOzQl6APOg11NnQrFsreM84VzlApjMkI6f9SEuowkDJZmLwwEG7ZAG9FsHU6pOuZvX6w19Fwq_2THudc_mWHi0DJQsSOYQdinPKMpeBmy8glAK0NN4ksDNjV9-39Z83m9-f7cDps9BfrSNjv2d8ve1XPZdY9-V9L7nUOnsOH-5b3neXeL_qbY7axi6BKBxgAJQRRGuvn2gWVpIs1lWKvno4qH6omeQ0D6Pd29iqC5v9x02zgWCMITod0PbPXD_Y6GgbU16gl8dVOZG9TOXf229CFinLdtts8gVvBDL_95qx2fB7r1fftqj_CoGKM8ebzbI2v7DXOkaoF28HofSqZCX1UPKhcLsLrCHi73THyPb_BONxpkxYfrjrWb-DqyZ1TSK3Tghjzy-UVHDbebBxSGORKTlFre4grKP1dw2GQFBkT2wpZzCb2kFcW6cYhw0lvw0VDjZzV-h86Cq0aWQWz-eDzxfGQIRzJC6sodALN_bXJBgO_Rsfn745G794eQs9tkRejo_PRyacPh9DvedL510-fLGWnpFyMPn_54kj7nvT-5NPJxUdStFtyvTs__3xOlL2K8q-PR18vrLm9UnD45-fjU6LsO65GRjgXzlie0z5SIh43_eh4_JeHEBzbRh8H0Qa20i3iuzBM0bl9I6N3lvjOC0Fn2Af0uQg4fdIi3MhYxoUY33PBdfIAQh8t4nunFB3tN7OVIbSMNwkr9EM--8gS4zCV02vP1tzeVyI8dk-X8OMHBF_FtZALETRK5C0aVBkXSEXijjw8RmH4jKOCCaMNnY7hG3L2_1kgx-uWw2AuJc10wYTZvwVTbuEgEFgYxdKgvbly5micdat0pWb0gptpAuHPiqtsdFOmsc6Xw2qac03comvwlct72KRVK7kuTT41GKtka0qXy9ukVVm-rrCMjpsGY5yxIjXrTGXcaF9861jcktsEarRNlk6LlBoKDQYxn81QoZgiTNAsECkb3GQYEw8NdsQ3LZRCYSpivdGuq2GUa5sb7VtmcOlUuFHN3tr5LMtpsLRzx7q5n0w7_oteNX7RhyeFmvJMzK0iezKt0VUT6trcBguepjDBcqzzrm2N_TliTNPPJbC53KLdtRqfSZ11grvPgAlCzrSJaHhaF54pmYGQi1UNDXFSZo0XplAYwSJBhVBq4W5qF0WGik9ZuhJzEZdWHBupWp_57OdGCke45Q8bNE_6MyHd2oPilsNOR8-tB0qQlBzNZUjIm7uVkAsYgMAF0EKHbT--eGNfmKZRIRRy0ZmjO1K2YdstcUWgcYbGxVK2mM34DX06otjbAmgc4azKVzR9uaJetbTdeHSva2XlWgRld72v9aBSS0Dc2WRQfwJqMJcfaGwdOsZnEHqJwcCe_AIPjg5-5b0O2vDMo3oYBx2QH4sEugT7UXD8UdvCKb8LPAbOCzrE_w94LPxHIbIfBCwe973jPppHmHPw6u3yQWv0ScIas99oGraWrf8CAAD__wMAjoXGR1UYAAA", "contentType": "application/javascript; charset=UTF-8", - "lastModified": 1700682263798 + "lastModified": 1711451378995 }, "static/web-interface.html": { - "content": "H4sIAAAAAAAA_8yZW2_bNhTH3wv0O7Dcy4ZOZrIbhkES4DluGiyrnchusb1R4pHMhCI1krLjfvpBN8eX2JU8e-iTRIn_c348JEXyyH1zNRpM_hoP0cymwn_9yi2uSFCZeBgk9l-_QsidAWXlHUJuCpaiaEa1Aevh6eSd8yveeCdpCh6ec1hkSluMIiUtSOvhBWd25jGY8wicsvA94pJbToVjIirAu-xdrGxZbgX44zxzSXVbPxdcPiINwsPGLgWYGYDFaKYh9nBkDFlA6HBpQcc0gl5kDG6jnFmbmd8IiZh8ML1IqJzFgmroRSol9IE-EcFDQ2IlrUMXYFQK5Jfej70LUvikQvRSLktvqHCeaG6XHjYz-vPlD07wWeinT1ORxfnnu7dZNB0o8xQl4u7-Q_8fcvX3w0czuBDDny6eTP_KxHCnhsts-BbkIhrx64dHEgb59fUf74fLh0DdXX7-yA2Vd56HUaSVMUrzhEsPU6nkMlW5wUhDDFqDzpTg0dLDUjnNI4xI1alk1atuqNgSRYIa42FG9SMKE6e8xtW1CGEVRITcN46DxnmG1Bx00cvIceoII-RSwxk0pratIM48XNZwGnHTOaXYQGS5kmvyFBjP08JAfWeVEiHV67JifF764-nYJbPLdXOktucjhHa9bFhAbtZ4jRNHQm41Fdjv396i8f1oMAyCYeCS7EXrLzSgaGemVQTGOBHVzCnmAOUStsHLWFYVUVHRoAUXAoWAEpCgqQWGZqBhPcYdfDOwlAuDm7bNOGPFpF4Lx76m181Gg9GHdzfX0_v-5Gb0YTMExSSl4WpmPj_UW0-KZ6xxYqxWMsH-QKUplcwllr1YfSOGSsY8caJKgv0XRC7ZcdsS5JPSj1wmiHHdCWZxapB-bpWxVNsuGLQRnRjmHjqjaDgHyEAr2alftJJnQEAWdMoltdAFZiVqR-SS3Ql1eHoGk_5kGpxyXk6WWbsmGkttbhy7zOA8Y890wagHnzkxyu9CRY_AupCEleTEIEFpvAtHdTk9hrbd4lH2y8njMXziHTmgVJwYY5ox2pEjryQnBpmAgBSsXnaau43oxDB_Qqr0EuWGJoC-vQ-C77pQpaX6rEjvgWYoN8CIVZaKI_CcGdDMKdVnJR0-WdDyOESotccuPof2mW3WqOn4BOuTPyli3OySYe8n0HdNRuvtb545dUTgefPbxNclRcW9IVl_0A5wvcNa0tUdVErODzjNLE_bouVlZYzOTnUFUqE5aMP3b_C22BhI5dSS84etOOR24zsSressdEl5iF5lXShfe8f4_MABeuO8vVb15XP1WoXniY0sDbF_O7oOXML4fFdRRKO251AhXpiKceLUOYHKmEvrNMw3uJ26Skr0hUCr1y6hfgugSGlobHbm2SeucAZKQ1uKXGuQdsdWdUBHmzD7zdFyXJi19ML2SX9rtIW5tXWOoNyW7QCEiSN4MrMoVJqBrgrYd_mqtdSgmDqZoMsCM1Gq3Mlw3yWV8YMuVXa0x0JceAxpe4f1oeBonxqYKnxmmqe02pK08lseAY72ajWNYx7VlTs2OZcndv6FHt4enZvlrVIzboVKNsiKwV7kxtaru2Ttu1YmyoKlsZCiGxkr9HEj8ejGSlnQhxKHdbNDZa1alRq_K8DtDGQdK4jtpqQpWZXtfFHLkV6iNsv8nuzfeLY0PKICVRuIjaiulpVNS-WGwclARyDtvmWmtaEvG9juzZ2VqHXADkRsAzhY0OxgA8yCZieIw7OZ_zMKLYMwPRyCZov21XGPgoPcqkjTCKDma2S_VZSh_hw0TeBgK4Si7L_yu6T6YjVFE2meWWR05OEHU375eg8GoyK55uFUsVyUSbaqXqlySfHXpvhjR8pfd_8CAAD__wMAx5oOX8obAAA", + "content": "H4sIAAAAAAAA_8yZXW_bNhSG7_MrWO5mQycz2ReGQRLgOW5aLKudyG6x3VHikcyEIlWSsuP--kFfsWzHrpQ6Q69kUnzPeXhIioe0--pyMpr9Mx2jhU2Ff-YWDySoTDwMEvtnCLkLoKz4gZCbgqUoWlBtwHp4Pnvj_I7bryRNwcNLDqtMaYtRpKQFaT284swuPAZLHoFTFn5EXHLLqXBMRAV4F4PzxpTlVoA_zTOXVD-rasHlPdIgPGzsWoBZAFiMFhpiD0fGkBWEDpcWdEwjGETG4A7ChbWZ-YOQiMk7M4iEylksqIZBpFJC7-gDETw0JFbSOnQFRqVAfhv8PDgnhUsqxCDlsnSGCt-J5nbtYbOgv1785ASfhX74OBdZnH--eZ1F85EyD1Eibm7fDz-Ry3_vPpjRuRj_cv5ghpcmhhs1Xmfj1yBX0YRf3d2TMMivrv56O17fBerm4vMHbqi88TyMIq2MUZonXHqYSiXXqcoNRhpi0Bp0pgSP1h6WymmqMCLlcJJmPN1QsTWKBDXGw4zqexQmTvmMqyf2z8oAIuS-chw0zTOklqCL4UWOUwUXIZcazqCxs2sCcebhsoXTaOthKbUGIsuVbKlTYDxPC339yyolQqpbqmJOXvjT-dQli4uWMVJb8xFCey7acuRmjcc4cSTkVlOB_eH1NZreTkbjIBgHLsmeMr2PXnQw0yoCY5yIauYUk55yCTvIZQirdqhoZ9CKC4FCQAlI0NQCQwvQ0Aptd8cMLOXC4KZbC85YsX43cTjU6brDaDR5_-bd1fx2OHs3eb_V-WJF0rBZhps6vV1RVLHGg7FayQT7I5WmVDKXWPZU663YKRnzxIkqBfb3NS7Z9dkN4qPS91wmiHHdB2R1UohhbpWxVNseCLTRnBLkFvpiaDg5xEgr2WcstJKndo8s6JRLaqEHyKOmC41L9tbN8TUYzIazeXCyxTdbZ536Ziy1uXHsOoMXmGimB0I908wpMf4UKroH1oMirBSnhAhKyz0YqseJEbTtFYdyLE4bh_ED78cApeCUCPOM0X4MeaU4JcQMBKRg9brP-mw0pwT5G1Kl1yg3NAH0_W0Q_NCDKC3FL4fzFmiGcgOMWGWp6I_mLIBmTil-OcrxgwUtn4UHtfRZu8mR3LDDljOffu1248-KuDY5LRz6uvmuyWidreaZUwcCNrlqE1WXFA0PRaJd0QWuPUbdyOoxKRUvDDfPLE87YuVlW4xelugSpEJL0IYfTMx2uBhI5dSKFw5XcfLsxfY8rF6LzSXlqba5_aB884bx5ZEDbfv422r55DG39X6zeJGlIfavJ1eBSxhf7gmKINTWHCrEEysuTpz6fF7Zcml9G_Id7qaubgeGQqDH1y6h_pd5IqWhMdkb55C4ohkpDR0hcq1B2j1T1aEZbbMctEbL6WBax_3dw_f2DAtza-tTe5lY7bkPE0fwZGFRqDQDXRWw7_LHrlKDYupkgq4LyESpMifhvksq48c8quzZDgtx4TCknf3VifyzXWpgqnCZaZ7SKsXo4rbM3J_t1GoaxzyqG_frcC5P7Pv46O5My63idqGZrkIlW1TFFC-uqFqtXbL5jJXXVcHaWEjROxkr9KF96-fGSlnQx67t6v6Gylr1WGqcnh24_qtjBLHdVjQlq7Ldz2c5u0vOZgN_-v5tulgbHlGBqsSgHcvHrWPbTpkIOBnoCKQ9tJV0tfNF_c4Q7u42nSN1OFRt1mBFs2PoZkWzrw_Axsr_1v1OvZ8f7XuTcH1LxJPgGLEqbk4EUPONUV8rytBwCZomcIxfKMq-itwl1QepLplI88wioyMP35nyqza4MxgVN1weThXLRXnTVbUrRC4p_gzxz1xS_g_2HwAAAP__AwCFH_NOFxsAAA", "contentType": "text/html; charset=UTF-8", - "lastModified": 1700681588592 + "lastModified": 1711451378995 + }, + "static/css/web-interface.css": { + "content": "H4sIAAAAAAAA_5RYa2_buBL97l_Bm-ICbWA5svyIqwAX2Hbv7r3A7n7p9gdQEmVzI5ECSTfJBv3vCz7Elyi7SdA64pwZcQ7njEa-uwULAD7TvqcEQNIAcUI9At8gw7DqEAeL27tFySgV4HWxACDLWkpE1sIedy8lyOAwdCjjL1ygfvmpw-Txd1h_UZe_UCKWN1_QkSLw9f83y5s_qKDgCyT8Zvk_1H1DAtdw-RPDsFtySHjGEcPt8uYnGRJ8ph1l4L89_QvfuChm4cHthOO_UQny1f2Oof5BbvHuFvwM2eMkk9s75VUdswayR8TURwne5Zt8m28ffONoWhfrj-vamnrU4HNvjXVRbzbW2OHjSYy2ot42-9zajpQ21g1tt0VlTRW0lu1uvV0jaxkY7iF7cX5Fs3XbJOgsGOzsDYvisFlb6xNkBJOjjbzdFmPkNs6_hW2LisA4Ywrzr2q0bXfWGOTfyh93Qz__fd4cDtCavPxrtKl3H60lyn9XHQ61OYt2kv_usN_dO98o_6ZqdrtGW2tV61lFWYNYVssyMzB2rN4fiiX4uF6CdZ5_GKvpN5nZ9XJSBMjcC_kb1tNoQ7n8jQtqtNZ541s1o6MRFnXRuLCK0tHWfGzvGxjUlN0NbHbNblJUNuqhzceD8qrKBlY_k7KywVu0rV0JhERIOjeHJdjul2C3_RAW2BVMSMwcKiBIgvaHJbjfL8Fh70ABUb74TPGNJl99XvU5Tyc_r_xGs68_r_5scE-AqQL0clgXhyVYb_ZLsN7KXL8vFne3CwAA-FNVIEcdqgWmRHbmijYvK0koeNW1-pVjcgRq5VrBltL2Pm6IhjizGGEihD4lD-M1CIcyuVmQaxQOIw_Jg9h-4RAV9AFj13B2c14exu8fDmcOzsP5ncThzAl6OL-nhNXsuAyba4iKMBEi5DJstlHFe6AJl6bgPUjMpS57DxBx6WrfwyS4dCLwcAkunRo8XILLhCxGh7mWrdShJKB4CDWgl94uAuV3WQURZE4GESytgwiUEkIEmSohAsxLIQLOayECzovBB15QQwIWyyGCzOkhgqUFEYFSioggU0lEgHlNRMB5UUTAeVX4wDfKYnRVTw052v9M63OPiABPuEHgDnymREBMEOPgDvyKCGK4BqhDEsPlI2V1wk2DCHgFoMF86OBLCQglCPwL9wNlAhLxAL4vFisuGCVHiVOD-BPSR1HRrtEAe_zgFQQbt4YPEjjiZlAWowsggdIGizO9YAIz1BiULIIESC5bTAVTkAo6hKmBBMpYLNIUQQJpLBZpqiCBNBaFXKxsywKvoIL145HRM2nCErEYHd1cXnewcEv6BQef_7GvXfbwjsI0uct4dyq6411G2wNyne-yQ3BWrgtedgqOzXXEy07hCZ6HQZ2eQM8iEwwS3lLWl2q5hhw9hMoSJ0yUIxx9GlRTBuUwWEqJSiMsT_Sbi5pAqCemelYGr_KmytySakDeO7YHkAvK3GGCspPZ33qlXgV6yI6YlEC9yFhbnn87yQXbU9oOPas-1VIq1IbB1Axk2xIn5f9veTlQjlU2oMXPSL2ZVFQI2pcgH4J4_wFcz8k61Q49l0AN6ANsGtV389VOfmUQJGm_SEhs5a8zF7h9yWpKBCKiBDUiAjFpgh0-kgwL1HO3PE7uX2TnHSBBsr1CLq9eU_HlZ9ZgprddSvmfe6IoxSTTRGxylaZk-dksbccl5X9k9MkkKuug7ehT9lICeBZU7kjfPuTGEJJ1qBXl2mSvTzEz5OarQtMyRjgVytWgBB0c5ILvamC0RpxnNWSNf29JvHUP9gOiDTFdT_m4apkBlpqrxDL6NHto8e5Bvhp38ANNdvF98c7PUdWKetxOmc4njGT63Q5pan6kYU04xf6xaK7y1SZiX2DR6RqcPrknEe0VF1Cc-bzb3S34HWKiKh28_5PSroJMfafY0SP_IEfvxTv556wgNdHfR9jA9CZtQ1kVxt7L-0RR3iCnUCiyEwuz29fZ8hsb2SbZHeTrua2oRH9Qd3xicCiB_D-86UrAanpsYD3Tht50k3dQZc-jQrze21QwRJoLQpnQqLrdJ9gcEZezK_jKEQf2CS8rwU5e8sIMruq6pUyPO5gc1RRayTBaBxo2Pgi0xs0iFy8dKgGnHVY7tXlhoh5NVUfrx7Dpo171GvWR7-yVF5TBBp-5Uv7YkoInxD7sSFrMqxFqtMqOFXxf7HbL8V--uve-zfmkbqUHbn3bN-Yqhw69Lu_vO8tr2xODCMoyCYNJg2soKMt-IOD6BwIao6CDH0XQIR1EGq5vaj5acT2asemW7ofRK-l9GdtcMDd7J17N4rnbuVx2COBu9k47BHO3OZBx9k57-HO3J740PngbGjmBF9Bu7tZ2b_ZOO4Rzt8Z4s3faKZy7jV7c7J128udurz6j9OXKVQokKKAh5RVTITETOlKOKUokbkJLypkkqFFCielJOQevJne34NNZCErUN2aV-tPTjf5GINky4ylOjdkM9fZBWp8ZlzceKLYPEtddR1RiwpiMNeNY-Q8AAAD__wMA9KeNLsQcAAA", + "contentType": "text/css; charset=UTF-8", + "lastModified": 1711451378995 } } diff --git a/test/deps.ts b/test/deps.ts index 054c2d9..71e80ab 100644 --- a/test/deps.ts +++ b/test/deps.ts @@ -1,2 +1,2 @@ -export { assert, assertEquals, assertGreater, assertNotEquals, assertRejects, assertThrows } from "https://deno.land/std@0.207.0/assert/mod.ts" -export { assertSpyCall, spy } from "https://deno.land/std@0.207.0/testing/mock.ts" +export { assert, assertEquals, assertGreater, assertNotEquals, assertRejects, assertThrows } from "https://deno.land/std@0.221.0/assert/mod.ts" +export { assertSpyCall, spy } from "https://deno.land/std@0.221.0/testing/mock.ts" diff --git a/versions.json b/versions.json index 3342714..9a95827 100644 --- a/versions.json +++ b/versions.json @@ -2,6 +2,20 @@ "canary_url": "https://raw.githubusercontent.com/Hexagon/pup/main/pup.ts", "stable": [], "prerelease": [ + { + "version": "1.0.0-rc.13", + "url": "https://deno.land/x/pup@1.0.0-rc.13/pup.ts", + "deno": null, + "deno_unstable": "1.38.0", + "default_permissions": [ + "--allow-env", + "--allow-read", + "--allow-write", + "--allow-sys=loadavg,systemMemoryInfo,osUptime,osRelease", + "--allow-net", + "--allow-run" + ] + }, { "version": "1.0.0-rc.12", "url": "https://deno.land/x/pup@1.0.0-rc.12/pup.ts",