diff --git a/Makefile b/Makefile index 19b9308f..6f54721f 100644 --- a/Makefile +++ b/Makefile @@ -62,14 +62,21 @@ A ?= -c -fPIC -O2 -D_FORTIFY_SOURCE=2 -fstack-protector-strong -Werror -Wall B ?= $(A) -std=c11 OSSL ?= -DOPENSSL_SUPPRESS_DEPRECATED -DOPENSSL_API_COMPAT=30000 -Wno-deprecated-declarations # Object lists for the archives (paths relative to compiler/, where `ar` runs). -FIB_OBJ ?= bin/memory_runtime.o bin/fiber_runtime.o bin/system_runtime.o bin/effects_runtime.o bin/string_runtime.o bin/string_runtime_list.o bin/list_runtime.o bin/map_runtime.o bin/map_runtime_hamt.o bin/json_runtime.o bin/ffi_runtime.o bin/term_runtime.o bin/random_runtime.o bin/test_runtime.o bin/profiler_runtime.o bin/profiler_sampler.o +FIB_OBJ ?= bin/memory_runtime.o bin/fiber_runtime.o bin/system_runtime.o bin/effects_runtime.o bin/string_runtime.o bin/string_runtime_list.o bin/list_runtime.o bin/map_runtime.o bin/map_runtime_hamt.o bin/json_runtime.o bin/ffi_runtime.o bin/term_runtime.o bin/random_runtime.o bin/test_runtime.o bin/coverage_runtime.o bin/profiler_runtime.o bin/profiler_sampler.o HTTP_OBJ ?= bin/http_shared.o bin/http_client_runtime.o bin/http_server_request.o bin/http_server_response.o bin/http_server_runtime.o bin/websocket_client_runtime.o bin/websocket_server_runtime.o $(FIB_OBJ) # GC backend archives (osprey --memory=gc): the tracing collector replaces # memory_runtime.o, and the value-container units are rebuilt with the malloc # redirect (osp_gc_shim.h) so their nodes live in the managed heap. Everything # else is the same object. Implements [GC-TRACE-CONSERVATIVE], docs/plans/0011. -FIB_OBJ_GC ?= bin/memory_gc.o bin/fiber_runtime.o bin/system_runtime.o bin/effects_runtime.o bin/string_runtime.o bin/string_runtime_list.o bin/gc/list_runtime.o bin/gc/map_runtime.o bin/gc/map_runtime_hamt.o bin/json_runtime.o bin/ffi_runtime.o bin/term_runtime.o bin/random_runtime.o bin/test_runtime.o bin/profiler_runtime.o bin/profiler_sampler.o +FIB_OBJ_GC ?= bin/memory_gc.o bin/fiber_runtime.o bin/system_runtime.o bin/effects_runtime.o bin/string_runtime.o bin/string_runtime_list.o bin/gc/list_runtime.o bin/gc/map_runtime.o bin/gc/map_runtime_hamt.o bin/json_runtime.o bin/ffi_runtime.o bin/term_runtime.o bin/random_runtime.o bin/test_runtime.o bin/coverage_runtime.o bin/profiler_runtime.o bin/profiler_sampler.o HTTP_OBJ_GC ?= bin/http_shared.o bin/http_client_runtime.o bin/http_server_request.o bin/http_server_response.o bin/http_server_runtime.o bin/websocket_client_runtime.o bin/websocket_server_runtime.o $(FIB_OBJ_GC) +# ARC backend archives (osprey --memory=arc): Perceus reference counting +# replaces memory_runtime.o, and the value-producing units (containers + +# strings + JSON) are rebuilt with the allocation redirect (osp_arc_shim.h) so +# their nodes/buffers carry the 16-byte header and registry entry. Implements +# [GC-ARC-PERCEUS], docs/plans/0011 phase 2 (milestone M1). +FIB_OBJ_ARC ?= bin/memory_arc.o bin/fiber_runtime.o bin/system_runtime.o bin/effects_runtime.o bin/arc/string_runtime.o bin/arc/string_runtime_list.o bin/arc/list_runtime.o bin/arc/map_runtime.o bin/arc/map_runtime_hamt.o bin/arc/json_runtime.o bin/ffi_runtime.o bin/term_runtime.o bin/random_runtime.o bin/test_runtime.o bin/coverage_runtime.o bin/profiler_runtime.o bin/profiler_sampler.o +HTTP_OBJ_ARC ?= bin/http_shared.o bin/http_client_runtime.o bin/http_server_request.o bin/http_server_response.o bin/http_server_runtime.o bin/websocket_client_runtime.o bin/websocket_server_runtime.o $(FIB_OBJ_ARC) # WebAssembly (wasm32-wasip1) cross-build toolchain — opt-in via `make wasm`. # Compiles the portable C-runtime subset (no pthreads/sockets/OpenSSL/syscalls) @@ -94,7 +101,7 @@ WASM_CFLAGS ?= --target=$(WASM_TARGET) --sysroot=$(WASI_SYSROOT) -O2 -std=c11 - # (termios) and ffi (dlopen). # profiler_runtime compiles to inert stubs on wasm32 (no pthreads/signals) but # must be present: codegen anchors `osp_prof_boot` into every main [PROF-ACTIVATE-ENV]. -WASM_RT_SRC ?= memory_runtime string_runtime string_runtime_list list_runtime map_runtime map_runtime_hamt json_runtime effects_runtime test_runtime web_runtime profiler_runtime +WASM_RT_SRC ?= memory_runtime string_runtime string_runtime_list list_runtime map_runtime map_runtime_hamt json_runtime effects_runtime test_runtime coverage_runtime web_runtime profiler_runtime # `make wasm-serve` static-host dir + port for the in-browser example. WASM_SERVE_DIR ?= examples/wasm WASM_SERVE_PORT ?= 8080 @@ -275,12 +282,19 @@ setup: # so `cd` persists; faithful port of the original hardened C recipes. _runtime: @echo "==> building C runtime archives ($(RTB)/lib*_runtime.a)" - @cd compiler && set -e && $(MKDIR) bin lib bin/gc && \ + @cd compiler && set -e && $(MKDIR) bin lib bin/gc bin/arc && \ $(CC) $(B) runtime/memory_runtime.c -o bin/memory_runtime.o && \ $(CC) $(B) runtime/memory_gc.c -o bin/memory_gc.o && \ + $(CC) $(B) runtime/memory_arc.c -o bin/memory_arc.o && \ $(CC) $(B) -include runtime/osp_gc_shim.h runtime/list_runtime.c -o bin/gc/list_runtime.o && \ $(CC) $(B) -include runtime/osp_gc_shim.h runtime/map_runtime.c -o bin/gc/map_runtime.o && \ $(CC) $(B) -include runtime/osp_gc_shim.h runtime/map_runtime_hamt.c -o bin/gc/map_runtime_hamt.o && \ + $(CC) $(B) -include runtime/osp_arc_shim.h runtime/list_runtime.c -o bin/arc/list_runtime.o && \ + $(CC) $(B) -include runtime/osp_arc_shim.h runtime/map_runtime.c -o bin/arc/map_runtime.o && \ + $(CC) $(B) -include runtime/osp_arc_shim.h runtime/map_runtime_hamt.c -o bin/arc/map_runtime_hamt.o && \ + $(CC) $(A) -include runtime/osp_arc_shim.h runtime/string_runtime.c -o bin/arc/string_runtime.o && \ + $(CC) $(A) -include runtime/osp_arc_shim.h runtime/string_runtime_list.c -o bin/arc/string_runtime_list.o && \ + $(CC) $(B) -include runtime/osp_arc_shim.h runtime/json_runtime.c -o bin/arc/json_runtime.o && \ $(CC) -c -fPIC -O2 -Werror -Wall -Wextra -Wpedantic -std=c11 -D_GNU_SOURCE runtime/fiber_runtime.c -o bin/fiber_runtime.o && \ $(CC) $(A) runtime/system_runtime.c -o bin/system_runtime.o && \ $(CC) $(A) runtime/effects_runtime.c -o bin/effects_runtime.o && \ @@ -294,6 +308,7 @@ _runtime: $(CC) $(B) runtime/term_runtime.c -o bin/term_runtime.o && \ $(CC) $(B) runtime/random_runtime.c -o bin/random_runtime.o && \ $(CC) $(B) runtime/test_runtime.c -o bin/test_runtime.o && \ + $(CC) $(B) runtime/coverage_runtime.c -o bin/coverage_runtime.o && \ $(CC) $(B) runtime/profiler_runtime.c -o bin/profiler_runtime.o && \ $(CC) $(B) runtime/profiler_sampler.c -o bin/profiler_sampler.o && \ $(CC) -c -fPIC -O2 -D_FORTIFY_SOURCE=2 -fstack-protector-strong -Werror -Wall -Wextra \ @@ -312,7 +327,9 @@ _runtime: $(AR) rcs bin/libhttp_runtime.a $(HTTP_OBJ) && \ $(AR) rcs bin/libfiber_runtime_gc.a $(FIB_OBJ_GC) && \ $(AR) rcs bin/libhttp_runtime_gc.a $(HTTP_OBJ_GC) && \ - cp bin/libfiber_runtime.a bin/libhttp_runtime.a bin/libfiber_runtime_gc.a bin/libhttp_runtime_gc.a lib/ + $(AR) rcs bin/libfiber_runtime_arc.a $(FIB_OBJ_ARC) && \ + $(AR) rcs bin/libhttp_runtime_arc.a $(HTTP_OBJ_ARC) && \ + cp bin/libfiber_runtime.a bin/libhttp_runtime.a bin/libfiber_runtime_gc.a bin/libhttp_runtime_gc.a bin/libfiber_runtime_arc.a bin/libhttp_runtime_arc.a lib/ # Cross-compile the portable C-runtime subset to a wasm32-wasip1 archive that # osprey links for `--target=wasm32`. One shell so `cd` persists. Fails loudly @@ -388,7 +405,11 @@ _test_c_runtime: $(CC) -O2 -g -fno-omit-frame-pointer -D_FORTIFY_SOURCE=2 -fstack-protector-strong -Werror -Wall -Wextra \ -ftrapv -std=c11 -D_GNU_SOURCE \ runtime/profiler_runtime_tests.c runtime/profiler_runtime.c runtime/profiler_sampler.c -pthread \ - -o bin/profiler_runtime_tests && ./bin/profiler_runtime_tests + -o bin/profiler_runtime_tests && ./bin/profiler_runtime_tests && \ + $(CC) -O2 -D_FORTIFY_SOURCE=2 -fstack-protector-strong -Werror -Wall -Wextra \ + -ftrapv -std=c11 -D_GNU_SOURCE \ + runtime/coverage_runtime_tests.c runtime/coverage_runtime.c \ + -o bin/coverage_runtime_tests && ./bin/coverage_runtime_tests # [PROF-TEST] end-to-end profiler gate: --profile runs, exports, and reports. _test_profiler: @@ -413,6 +434,14 @@ _conformance-gc: build @out=$$(OSPREY_RUN_FLAGS=--memory=gc zsh crates/diff_examples.sh); echo "$$out"; \ echo "$$out" | grep -Eq 'FAIL=0 ' || { echo 'FAIL: GC backend output diverged'; exit 1; } +# _conformance-arc: run every tested example under the Perceus ARC backend; +# output must be byte-identical to the default ([MEM-BACKENDS] / [GC-ARC-PERCEUS], +# docs/plans/0011 phase 2). +_conformance-arc: build + @echo "==> [conformance] differential harness under --memory=arc..." + @out=$$(OSPREY_RUN_FLAGS=--memory=arc zsh crates/diff_examples.sh); echo "$$out"; \ + echo "$$out" | grep -Eq 'FAIL=0 ' || { echo 'FAIL: ARC backend output diverged'; exit 1; } + # --- vscode-extension ------------------------------------------------------- # The extension's LSP server spawns the `osprey` binary at runtime, so the # integration tests need a real compiler on PATH: the Rust binary is staged as diff --git a/benchmarks/cases/ackermann/ackermann.cs b/benchmarks/cases/ackermann/ackermann.cs new file mode 100644 index 00000000..9598b286 --- /dev/null +++ b/benchmarks/cases/ackermann/ackermann.cs @@ -0,0 +1,13 @@ +// Ackermann–Péter function — deep, non-tail mutual self-recursion. + +System.Console.WriteLine(Ack(3, 10)); + +static long Add(long a, long b) => a + b; +static long Sub(long a, long b) => a - b; + +static long Ack(long m, long n) +{ + if (m == 0) return Add(n, 1); + if (n == 0) return Ack(Sub(m, 1), 1); + return Ack(Sub(m, 1), Ack(m, Sub(n, 1))); +} diff --git a/benchmarks/cases/ackermann/ackermann.dart b/benchmarks/cases/ackermann/ackermann.dart new file mode 100644 index 00000000..df7515ec --- /dev/null +++ b/benchmarks/cases/ackermann/ackermann.dart @@ -0,0 +1,14 @@ +// Ackermann–Péter function — deep, non-tail mutual self-recursion. + +int add(int a, int b) => a + b; +int sub(int a, int b) => a - b; + +int ack(int m, int n) { + if (m == 0) return add(n, 1); + if (n == 0) return ack(sub(m, 1), 1); + return ack(sub(m, 1), ack(m, sub(n, 1))); +} + +void main() { + print(ack(3, 10)); +} diff --git a/benchmarks/cases/binarytrees/binarytrees.cs b/benchmarks/cases/binarytrees/binarytrees.cs new file mode 100644 index 00000000..0b91657c --- /dev/null +++ b/benchmarks/cases/binarytrees/binarytrees.cs @@ -0,0 +1,32 @@ +// Allocate + traverse many short-lived binary trees — allocation/memory stress: build 1200 trees of depth 13, sum checks. + +long acc = 0; +for (long i = 0; i < 1200; i++) +{ + Tree t = Make(13); + acc += Check(t); +} +System.Console.WriteLine(acc); + +static Tree Make(long d) +{ + Tree t = new Tree(); + if (d != 0) + { + t.Left = Make(d - 1); + t.Right = Make(d - 1); + } + return t; +} + +static long Check(Tree t) +{ + if (t == null) return 0; + return 1 + Check(t.Left) + Check(t.Right); +} + +class Tree +{ + public Tree Left; + public Tree Right; +} diff --git a/benchmarks/cases/binarytrees/binarytrees.dart b/benchmarks/cases/binarytrees/binarytrees.dart new file mode 100644 index 00000000..2d931346 --- /dev/null +++ b/benchmarks/cases/binarytrees/binarytrees.dart @@ -0,0 +1,29 @@ +// Allocate + traverse many short-lived binary trees — allocation/memory stress: build 1200 trees of depth 13, sum checks. + +class Tree { + Tree? left; + Tree? right; +} + +Tree make(int d) { + final t = Tree(); + if (d != 0) { + t.left = make(d - 1); + t.right = make(d - 1); + } + return t; +} + +int check(Tree? t) { + if (t == null) return 0; + return 1 + check(t.left) + check(t.right); +} + +void main() { + int acc = 0; + for (int i = 0; i < 1200; i++) { + final t = make(13); + acc += check(t); + } + print(acc); +} diff --git a/benchmarks/cases/coins/coins.cs b/benchmarks/cases/coins/coins.cs new file mode 100644 index 00000000..e6d634fa --- /dev/null +++ b/benchmarks/cases/coins/coins.cs @@ -0,0 +1,20 @@ +// Coin-change ways count — branching recursion over coin kinds. + +System.Console.WriteLine(Ways(600, 5)); + +static long Coin(long k) => k switch +{ + 1 => 1, + 2 => 5, + 3 => 10, + 4 => 25, + _ => 50, +}; + +static long Ways(long amount, long kind) +{ + if (amount == 0) return 1; + if (amount < 0) return 0; + if (kind == 0) return 0; + return Ways(amount - Coin(kind), kind) + Ways(amount, kind - 1); +} diff --git a/benchmarks/cases/coins/coins.dart b/benchmarks/cases/coins/coins.dart new file mode 100644 index 00000000..71bcf715 --- /dev/null +++ b/benchmarks/cases/coins/coins.dart @@ -0,0 +1,27 @@ +// Coin-change ways count — branching recursion over coin kinds. + +int coin(int k) { + switch (k) { + case 1: + return 1; + case 2: + return 5; + case 3: + return 10; + case 4: + return 25; + default: + return 50; + } +} + +int ways(int amount, int kind) { + if (amount == 0) return 1; + if (amount < 0) return 0; + if (kind == 0) return 0; + return ways(amount - coin(kind), kind) + ways(amount, kind - 1); +} + +void main() { + print(ways(600, 5)); +} diff --git a/benchmarks/cases/collatz/collatz.cs b/benchmarks/cases/collatz/collatz.cs new file mode 100644 index 00000000..cbcbcaf5 --- /dev/null +++ b/benchmarks/cases/collatz/collatz.cs @@ -0,0 +1,11 @@ +// Collatz (3n+1) stopping time summed over 1..N — integer division (n/2) in deep recursion. + +long acc = 0; +for (long i = 1; i < 100001; i++) acc += Collatz(i); +System.Console.WriteLine(acc); + +static long Collatz(long n) +{ + if (n == 1) return 0; + return n % 2 == 0 ? 1 + Collatz(n / 2) : 1 + Collatz(3 * n + 1); +} diff --git a/benchmarks/cases/collatz/collatz.dart b/benchmarks/cases/collatz/collatz.dart new file mode 100644 index 00000000..3be6d599 --- /dev/null +++ b/benchmarks/cases/collatz/collatz.dart @@ -0,0 +1,14 @@ +// Collatz (3n+1) stopping time summed over 1..N — integer division (n/2) in deep recursion. + +int collatz(int n) { + if (n == 1) return 0; + return n % 2 == 0 ? 1 + collatz(n ~/ 2) : 1 + collatz(3 * n + 1); +} + +void main() { + int acc = 0; + for (int i = 1; i < 100001; i++) { + acc += collatz(i); + } + print(acc); +} diff --git a/benchmarks/cases/coprime/coprime.cs b/benchmarks/cases/coprime/coprime.cs new file mode 100644 index 00000000..5a7f166c --- /dev/null +++ b/benchmarks/cases/coprime/coprime.cs @@ -0,0 +1,14 @@ +// Count coprime pairs (i,j), 1<=i,j<=N — nested iteration + Euclidean gcd. + +long n = 2000; +long acc = 0; +for (long i = n; i > 0; i--) +{ + for (long j = n; j > 0; j--) + { + if (Gcd(i, j) == 1) acc++; + } +} +System.Console.WriteLine(acc); + +static long Gcd(long a, long b) => b == 0 ? a : Gcd(b, a % b); diff --git a/benchmarks/cases/coprime/coprime.dart b/benchmarks/cases/coprime/coprime.dart new file mode 100644 index 00000000..361c4ab8 --- /dev/null +++ b/benchmarks/cases/coprime/coprime.dart @@ -0,0 +1,16 @@ +// Count coprime pairs (i,j), 1<=i,j<=N — nested iteration + Euclidean gcd. + +int gcd(int a, int b) => b == 0 ? a : gcd(b, a % b); + +void main() { + const n = 2000; + int acc = 0; + for (int i = n; i > 0; i--) { + for (int j = n; j > 0; j--) { + if (gcd(i, j) == 1) { + acc++; + } + } + } + print(acc); +} diff --git a/benchmarks/cases/digitsum/digitsum.cs b/benchmarks/cases/digitsum/digitsum.cs new file mode 100644 index 00000000..16cc4bff --- /dev/null +++ b/benchmarks/cases/digitsum/digitsum.cs @@ -0,0 +1,7 @@ +// Sum of decimal digit-sums over 1..N — integer division (n/10) and modulo in recursion. + +long acc = 0; +for (long i = 1; i < 2000001; i++) acc += DigSum(i); +System.Console.WriteLine(acc); + +static long DigSum(long n) => n < 10 ? n : (n % 10) + DigSum(n / 10); diff --git a/benchmarks/cases/digitsum/digitsum.dart b/benchmarks/cases/digitsum/digitsum.dart new file mode 100644 index 00000000..dd7aebda --- /dev/null +++ b/benchmarks/cases/digitsum/digitsum.dart @@ -0,0 +1,11 @@ +// Sum of decimal digit-sums over 1..N — integer division (n/10) and modulo in recursion. + +int digsum(int n) => n < 10 ? n : (n % 10) + digsum(n ~/ 10); + +void main() { + int acc = 0; + for (int i = 1; i < 2000001; i++) { + acc += digsum(i); + } + print(acc); +} diff --git a/benchmarks/cases/exprtree/exprtree.cs b/benchmarks/cases/exprtree/exprtree.cs new file mode 100644 index 00000000..dad2e7ea --- /dev/null +++ b/benchmarks/cases/exprtree/exprtree.cs @@ -0,0 +1,84 @@ +// Expression tree — build a heap-allocated tree, then evaluate it. +using System; + +const long MINSTD = 16807; +const long MODULUS = 2147483647; +const long BIG_MOD = 1000000007; + +long seed = ReadSeed(); + +long acc = 0; +for (long t = 0; t < 10; t++) +{ + acc = (acc + Eval(Build(seed + t * 7, 1, 14))) % BIG_MOD; +} + +Console.WriteLine(acc); + +static long R1(long x) => (x * MINSTD) % MODULUS; + +static long HashAt(long s, long i) => R1(R1(s + i)); + +static long ReadSeed() +{ + long m = 0; + string line = Console.ReadLine(); + if (line != null && long.TryParse(line.Trim(), out long parsed)) + { + m = parsed; + } + if (m == 0) + { + return 1; + } + ulong val = 0; + try + { + byte[] buf = new byte[8]; + using var f = System.IO.File.OpenRead("/dev/urandom"); + if (f.Read(buf, 0, 8) == 8) + { + val = BitConverter.ToUInt64(buf, 0); + } + } + catch (Exception) + { + val = 0; + } + return (long)(val % 2147483646) + 1; +} + +static Expr Build(long s, long idx, long depth) +{ + if (depth == 0) + { + return new Expr { Tag = Expr.TagLit, V = HashAt(s, idx) % 1000 }; + } + long op = HashAt(s, idx) % 2; + var e = new Expr + { + V = 0, + L = Build(s, idx * 2 + 1, depth - 1), + R = Build(s, idx * 2 + 2, depth - 1), + }; + e.Tag = op == 0 ? Expr.TagAdd : Expr.TagMul; + return e; +} + +static long Eval(Expr e) => e.Tag switch +{ + Expr.TagLit => e.V, + Expr.TagAdd => (Eval(e.L) + Eval(e.R)) % BIG_MOD, + _ => (Eval(e.L) * Eval(e.R)) % BIG_MOD, +}; + +class Expr +{ + public const int TagLit = 0; + public const int TagAdd = 1; + public const int TagMul = 2; + + public int Tag; + public long V; + public Expr L, R; +} diff --git a/benchmarks/cases/exprtree/exprtree.dart b/benchmarks/cases/exprtree/exprtree.dart new file mode 100644 index 00000000..e4ac6bc0 --- /dev/null +++ b/benchmarks/cases/exprtree/exprtree.dart @@ -0,0 +1,71 @@ +// Expression tree — build a heap-allocated tree, then evaluate it. +import 'dart:io'; +import 'dart:math'; + +const int minstd = 16807; +const int modulus = 2147483647; +const int bigMod = 1000000007; + +const int tagLit = 0; +const int tagAdd = 1; +const int tagMul = 2; + +int r1(int x) => (x * minstd) % modulus; + +int hashAt(int s, int i) => r1(r1(s + i)); + +int readSeed() { + int m = 0; + final line = stdin.readLineSync(); + if (line != null) { + m = int.tryParse(line.trim()) ?? 0; + } + if (m == 0) { + return 1; + } + return Random.secure().nextInt(2147483646) + 1; +} + +class Expr { + int tag = tagLit; + int v = 0; + Expr? l; + Expr? r; +} + +Expr build(int s, int idx, int depth) { + final e = Expr(); + if (depth == 0) { + e.tag = tagLit; + e.v = hashAt(s, idx) % 1000; + } else { + final op = hashAt(s, idx) % 2; + e.v = 0; + e.l = build(s, idx * 2 + 1, depth - 1); + e.r = build(s, idx * 2 + 2, depth - 1); + e.tag = op == 0 ? tagAdd : tagMul; + } + return e; +} + +int eval(Expr e) { + switch (e.tag) { + case tagLit: + return e.v; + case tagAdd: + return (eval(e.l!) + eval(e.r!)) % bigMod; + default: + return (eval(e.l!) * eval(e.r!)) % bigMod; + } +} + +void main() { + final seed = readSeed(); + + int acc = 0; + for (int t = 0; t < 10; t++) { + acc = (acc + eval(build(seed + t * 7, 1, 14))) % bigMod; + } + + print(acc); +} diff --git a/benchmarks/cases/factorial/factorial.cs b/benchmarks/cases/factorial/factorial.cs new file mode 100644 index 00000000..e96f8814 --- /dev/null +++ b/benchmarks/cases/factorial/factorial.cs @@ -0,0 +1,11 @@ +// Factorial-style product 1*2*...*N taken mod 1000000007 (matches factorial.osp). +using System; + +const long MOD = 1000000007; + +long acc = 1; +for (long i = 1; i <= 10000000; i++) +{ + acc = (acc * i) % MOD; +} +Console.WriteLine(acc); diff --git a/benchmarks/cases/factorial/factorial.dart b/benchmarks/cases/factorial/factorial.dart new file mode 100644 index 00000000..e26f53ad --- /dev/null +++ b/benchmarks/cases/factorial/factorial.dart @@ -0,0 +1,10 @@ +// Factorial-style product 1*2*...*N taken mod 1000000007 (matches factorial.osp). +const int mod = 1000000007; + +void main() { + int acc = 1; + for (int i = 1; i <= 10000000; i++) { + acc = (acc * i) % mod; + } + print(acc); +} diff --git a/benchmarks/cases/fib/fib.cs b/benchmarks/cases/fib/fib.cs new file mode 100644 index 00000000..5dc62a4c --- /dev/null +++ b/benchmarks/cases/fib/fib.cs @@ -0,0 +1,14 @@ +// Naive recursive Fibonacci — exercises raw function-call + recursion overhead. +using System; + +Console.WriteLine(Fib(35)); + +static long Add(long a, long b) => a + b; +static long Sub(long a, long b) => a - b; + +static long Fib(long n) => n switch +{ + 0 => 0, + 1 => 1, + _ => Add(Fib(Sub(n, 1)), Fib(Sub(n, 2))), +}; diff --git a/benchmarks/cases/fib/fib.dart b/benchmarks/cases/fib/fib.dart new file mode 100644 index 00000000..124738e2 --- /dev/null +++ b/benchmarks/cases/fib/fib.dart @@ -0,0 +1,18 @@ +// Naive recursive Fibonacci — exercises raw function-call + recursion overhead. +int add(int a, int b) => a + b; +int sub(int a, int b) => a - b; + +int fib(int n) { + switch (n) { + case 0: + return 0; + case 1: + return 1; + default: + return add(fib(sub(n, 1)), fib(sub(n, 2))); + } +} + +void main() { + print(fib(35)); +} diff --git a/benchmarks/cases/gcdsum/gcdsum.cs b/benchmarks/cases/gcdsum/gcdsum.cs new file mode 100644 index 00000000..3e0baf93 --- /dev/null +++ b/benchmarks/cases/gcdsum/gcdsum.cs @@ -0,0 +1,11 @@ +// Sum of gcd(i, K) for i in 1..N — Euclidean-algorithm recursion (modulo heavy). +using System; + +long acc = 0; +for (long i = 1; i < 2000000; i++) +{ + acc += Gcd(i, 1234567); +} +Console.WriteLine(acc); + +static long Gcd(long a, long b) => b == 0 ? a : Gcd(b, a % b); diff --git a/benchmarks/cases/gcdsum/gcdsum.dart b/benchmarks/cases/gcdsum/gcdsum.dart new file mode 100644 index 00000000..d205b82d --- /dev/null +++ b/benchmarks/cases/gcdsum/gcdsum.dart @@ -0,0 +1,10 @@ +// Sum of gcd(i, K) for i in 1..N — Euclidean-algorithm recursion (modulo heavy). +int gcd(int a, int b) => b == 0 ? a : gcd(b, a % b); + +void main() { + int acc = 0; + for (int i = 1; i < 2000000; i++) { + acc += gcd(i, 1234567); + } + print(acc); +} diff --git a/benchmarks/cases/hanoi/hanoi.cs b/benchmarks/cases/hanoi/hanoi.cs new file mode 100644 index 00000000..30df8f8c --- /dev/null +++ b/benchmarks/cases/hanoi/hanoi.cs @@ -0,0 +1,13 @@ +// Towers of Hanoi move count via double recursion with an accumulator. +using System; + +Console.WriteLine(Hanoi(25, 0)); + +static long Hanoi(long n, long acc) +{ + if (n == 0) + { + return acc; + } + return Hanoi(n - 1, Hanoi(n - 1, acc) + 1); +} diff --git a/benchmarks/cases/hanoi/hanoi.dart b/benchmarks/cases/hanoi/hanoi.dart new file mode 100644 index 00000000..6bec6971 --- /dev/null +++ b/benchmarks/cases/hanoi/hanoi.dart @@ -0,0 +1,11 @@ +// Towers of Hanoi move count via double recursion with an accumulator. +int hanoi(int n, int acc) { + if (n == 0) { + return acc; + } + return hanoi(n - 1, hanoi(n - 1, acc) + 1); +} + +void main() { + print(hanoi(25, 0)); +} diff --git a/benchmarks/cases/isqrt/isqrt.cs b/benchmarks/cases/isqrt/isqrt.cs new file mode 100644 index 00000000..c661008f --- /dev/null +++ b/benchmarks/cases/isqrt/isqrt.cs @@ -0,0 +1,30 @@ +// Sum of integer square roots over 1..N — Newton's method, integer division heavy. +using System; + +long acc = 0; +for (long i = 1; i < 1000001; i++) +{ + acc += Isqrt(i); +} +Console.WriteLine(acc); + +static long Isqrt(long n) +{ + if (n < 2) + { + return n; + } + long x = n; + while (true) + { + long y = (x + n / x) / 2; + if (y < x) + { + x = y; + } + else + { + return x; + } + } +} diff --git a/benchmarks/cases/isqrt/isqrt.dart b/benchmarks/cases/isqrt/isqrt.dart new file mode 100644 index 00000000..b84939ce --- /dev/null +++ b/benchmarks/cases/isqrt/isqrt.dart @@ -0,0 +1,23 @@ +// Sum of integer square roots over 1..N — Newton's method, integer division heavy. +int isqrt(int n) { + if (n < 2) { + return n; + } + int x = n; + while (true) { + final y = (x + n ~/ x) ~/ 2; + if (y < x) { + x = y; + } else { + return x; + } + } +} + +void main() { + int acc = 0; + for (int i = 1; i < 1000001; i++) { + acc += isqrt(i); + } + print(acc); +} diff --git a/benchmarks/cases/josephus/josephus.cs b/benchmarks/cases/josephus/josephus.cs new file mode 100644 index 00000000..f9dd7754 --- /dev/null +++ b/benchmarks/cases/josephus/josephus.cs @@ -0,0 +1,7 @@ +// Josephus problem — survivor index for n people, step k=7, via the modular recurrence. +long acc = 0; +for (long i = 2; i < 10000001; i++) +{ + acc = (acc + 7) % i; +} +System.Console.WriteLine(acc); diff --git a/benchmarks/cases/josephus/josephus.dart b/benchmarks/cases/josephus/josephus.dart new file mode 100644 index 00000000..a6020570 --- /dev/null +++ b/benchmarks/cases/josephus/josephus.dart @@ -0,0 +1,8 @@ +// Josephus problem — survivor index for n people, step k=7, via the modular recurrence. +void main() { + int acc = 0; + for (int i = 2; i < 10000001; i++) { + acc = (acc + 7) % i; + } + print(acc); +} diff --git a/benchmarks/cases/listops/listops.cs b/benchmarks/cases/listops/listops.cs new file mode 100644 index 00000000..714ff6b6 --- /dev/null +++ b/benchmarks/cases/listops/listops.cs @@ -0,0 +1,56 @@ +// List operations — build arrays, then sum + count below threshold. +const long MINSTD = 16807; +const long MODULUS = 2147483647; +const long BIG_MOD = 1000000007; +const int N = 4000; + +long seed = ReadSeed(); + +long acc = 0; +for (long t = 0; t < 8; t++) +{ + long s = seed + t * 131; + long[] xs = new long[N]; + for (long i = 0; i < N; i++) + { + xs[i] = HashAt(s, i) % 1000; + } + long sum = 0, below = 0; + for (long i = 0; i < N; i++) + { + sum += xs[i]; + if (xs[i] < 500) + { + below++; + } + } + acc = (acc + sum + below) % BIG_MOD; +} + +System.Console.WriteLine(acc); + +static long R1(long x) => (x * MINSTD) % MODULUS; + +static long HashAt(long s, long i) => R1(R1(s + i)); + +static long ReadSeed() +{ + string line = System.Console.ReadLine(); + long m = 0; + if (line != null) + { + long parsed; + if (long.TryParse(line.Trim(), out parsed)) + { + m = parsed; + } + } + if (m == 0) + { + return 1; + } + byte[] buf = new byte[8]; + System.Security.Cryptography.RandomNumberGenerator.Fill(buf); + ulong val = System.BitConverter.ToUInt64(buf, 0); + return (long)(val % 2147483646UL) + 1; +} diff --git a/benchmarks/cases/listops/listops.dart b/benchmarks/cases/listops/listops.dart new file mode 100644 index 00000000..06ddfe8e --- /dev/null +++ b/benchmarks/cases/listops/listops.dart @@ -0,0 +1,49 @@ +// List operations — build arrays, then sum + count below threshold. +import 'dart:io'; +import 'dart:math'; + +const int minstd = 16807; +const int modulus = 2147483647; +const int bigMod = 1000000007; +const int n = 4000; + +int r1(int x) => (x * minstd) % modulus; + +int hashAt(int s, int i) => r1(r1(s + i)); + +int readSeed() { + final line = stdin.readLineSync(); + int m = 0; + if (line != null) { + m = int.tryParse(line.trim()) ?? 0; + } + if (m == 0) { + return 1; + } + final rng = Random.secure(); + final val = (rng.nextInt(1 << 31) << 31) | rng.nextInt(1 << 31); + return (val % 2147483646) + 1; +} + +void main() { + final seed = readSeed(); + + int acc = 0; + for (int t = 0; t < 8; t++) { + final s = seed + t * 131; + final xs = List.filled(n, 0); + for (int i = 0; i < n; i++) { + xs[i] = hashAt(s, i) % 1000; + } + int sum = 0, below = 0; + for (int i = 0; i < n; i++) { + sum += xs[i]; + if (xs[i] < 500) { + below++; + } + } + acc = (acc + sum + below) % bigMod; + } + + print(acc); +} diff --git a/benchmarks/cases/mutual/mutual.cs b/benchmarks/cases/mutual/mutual.cs new file mode 100644 index 00000000..16b21b58 --- /dev/null +++ b/benchmarks/cases/mutual/mutual.cs @@ -0,0 +1,28 @@ +// Mutual recursion — is_even/is_odd counting evens over a loop. +long acc = 0; +for (long i = 1; i < 130000; i++) +{ + if (IsEven(i % 1000)) + { + acc += 1; + } +} +System.Console.WriteLine(acc); + +static bool IsEven(long n) +{ + if (n == 0) + { + return true; + } + return IsOdd(n - 1); +} + +static bool IsOdd(long n) +{ + if (n == 0) + { + return false; + } + return IsEven(n - 1); +} diff --git a/benchmarks/cases/mutual/mutual.dart b/benchmarks/cases/mutual/mutual.dart new file mode 100644 index 00000000..63a5174b --- /dev/null +++ b/benchmarks/cases/mutual/mutual.dart @@ -0,0 +1,24 @@ +// Mutual recursion — is_even/is_odd counting evens over a loop. +bool isEven(int n) { + if (n == 0) { + return true; + } + return isOdd(n - 1); +} + +bool isOdd(int n) { + if (n == 0) { + return false; + } + return isEven(n - 1); +} + +void main() { + int acc = 0; + for (int i = 1; i < 130000; i++) { + if (isEven(i % 1000)) { + acc += 1; + } + } + print(acc); +} diff --git a/benchmarks/cases/nestedloop/nestedloop.cs b/benchmarks/cases/nestedloop/nestedloop.cs new file mode 100644 index 00000000..c48e6bf9 --- /dev/null +++ b/benchmarks/cases/nestedloop/nestedloop.cs @@ -0,0 +1,33 @@ +// Triple-nested counting loop accumulating (i*j*k) mod P — nested iteration. +System.Console.WriteLine(LoopI(250, 250, 0)); + +static long LoopK(long i, long j, long k, long acc) +{ + const long P = 1000000007; + while (k != 0) + { + acc = (acc + i * j * k) % P; + k -= 1; + } + return acc; +} + +static long LoopJ(long i, long j, long n, long acc) +{ + while (j != 0) + { + acc = LoopK(i, j, n, acc); + j -= 1; + } + return acc; +} + +static long LoopI(long i, long n, long acc) +{ + while (i != 0) + { + acc = LoopJ(i, n, n, acc); + i -= 1; + } + return acc; +} diff --git a/benchmarks/cases/nestedloop/nestedloop.dart b/benchmarks/cases/nestedloop/nestedloop.dart new file mode 100644 index 00000000..ad454115 --- /dev/null +++ b/benchmarks/cases/nestedloop/nestedloop.dart @@ -0,0 +1,30 @@ +// Triple-nested counting loop accumulating (i*j*k) mod P — nested iteration. +const int p = 1000000007; + +int loopK(int i, int j, int k, int acc) { + while (k != 0) { + acc = (acc + i * j * k) % p; + k -= 1; + } + return acc; +} + +int loopJ(int i, int j, int n, int acc) { + while (j != 0) { + acc = loopK(i, j, n, acc); + j -= 1; + } + return acc; +} + +int loopI(int i, int n, int acc) { + while (i != 0) { + acc = loopJ(i, n, n, acc); + i -= 1; + } + return acc; +} + +void main() { + print(loopI(250, 250, 0)); +} diff --git a/benchmarks/cases/pascal/pascal.cs b/benchmarks/cases/pascal/pascal.cs new file mode 100644 index 00000000..0ce21cdc --- /dev/null +++ b/benchmarks/cases/pascal/pascal.cs @@ -0,0 +1,18 @@ +// Binomial coefficient via naive (un-memoised) Pascal recursion C(n,k)=C(n-1,k-1)+C(n-1,k). +System.Console.WriteLine(Binom(27, 13)); + +static long Binom(long n, long k) +{ + if (k == 0) + { + return 1; + } + else if (k == n) + { + return 1; + } + else + { + return Binom(n - 1, k - 1) + Binom(n - 1, k); + } +} diff --git a/benchmarks/cases/pascal/pascal.dart b/benchmarks/cases/pascal/pascal.dart new file mode 100644 index 00000000..476f8d2f --- /dev/null +++ b/benchmarks/cases/pascal/pascal.dart @@ -0,0 +1,14 @@ +// Binomial coefficient via naive (un-memoised) Pascal recursion C(n,k)=C(n-1,k-1)+C(n-1,k). +int binom(int n, int k) { + if (k == 0) { + return 1; + } else if (k == n) { + return 1; + } else { + return binom(n - 1, k - 1) + binom(n - 1, k); + } +} + +void main() { + print(binom(27, 13)); +} diff --git a/benchmarks/cases/powmod/powmod.cs b/benchmarks/cases/powmod/powmod.cs new file mode 100644 index 00000000..3fc89503 --- /dev/null +++ b/benchmarks/cases/powmod/powmod.cs @@ -0,0 +1,18 @@ +// Sum of modular exponentiation: sum of i^20 mod P for i in 1..N, naive repeated multiply. +const long P = 1000000007; + +long acc = 0; +for (long i = 1; i < 1000000; i++) +{ + acc = (acc + PowMod(i, 20, 1)) % P; +} +System.Console.WriteLine(acc); + +static long PowMod(long b, long e, long acc) +{ + if (e == 0) + { + return acc; + } + return PowMod(b, e - 1, (acc * b) % P); +} diff --git a/benchmarks/cases/powmod/powmod.dart b/benchmarks/cases/powmod/powmod.dart new file mode 100644 index 00000000..04a590ff --- /dev/null +++ b/benchmarks/cases/powmod/powmod.dart @@ -0,0 +1,17 @@ +// Sum of modular exponentiation: sum of i^20 mod P for i in 1..N, naive repeated multiply. +const int P = 1000000007; + +int powmod(int base, int e, int acc) { + if (e == 0) { + return acc; + } + return powmod(base, e - 1, (acc * base) % P); +} + +void main() { + int acc = 0; + for (int i = 1; i < 1000000; i++) { + acc = (acc + powmod(i, 20, 1)) % P; + } + print(acc); +} diff --git a/benchmarks/cases/primes/primes.cs b/benchmarks/cases/primes/primes.cs new file mode 100644 index 00000000..aeb8fa8b --- /dev/null +++ b/benchmarks/cases/primes/primes.cs @@ -0,0 +1,35 @@ +// Count primes below a limit by trial division — integer % in a tight loop. +long acc = 0; +for (long n = 2; n < 200000; n++) +{ + if (IsPrime(n)) + { + acc += 1; + } +} +System.Console.WriteLine(acc); + +static bool HasFactor(long n, long d) +{ + if (d * d > n) + { + return false; + } + else if (n % d == 0) + { + return true; + } + else + { + return HasFactor(n, d + 1); + } +} + +static bool IsPrime(long n) +{ + if (n < 2) + { + return false; + } + return !HasFactor(n, 2); +} diff --git a/benchmarks/cases/primes/primes.dart b/benchmarks/cases/primes/primes.dart new file mode 100644 index 00000000..fcce6a06 --- /dev/null +++ b/benchmarks/cases/primes/primes.dart @@ -0,0 +1,27 @@ +// Count primes below a limit by trial division — integer % in a tight loop. +bool hasFactor(int n, int d) { + if (d * d > n) { + return false; + } else if (n % d == 0) { + return true; + } else { + return hasFactor(n, d + 1); + } +} + +bool isPrime(int n) { + if (n < 2) { + return false; + } + return !hasFactor(n, 2); +} + +void main() { + int acc = 0; + for (int n = 2; n < 200000; n++) { + if (isPrime(n)) { + acc += 1; + } + } + print(acc); +} diff --git a/benchmarks/cases/tak/tak.cs b/benchmarks/cases/tak/tak.cs new file mode 100644 index 00000000..67980bef --- /dev/null +++ b/benchmarks/cases/tak/tak.cs @@ -0,0 +1,19 @@ +// Tak function — heavily recursive integer benchmark. +System.Console.WriteLine(Tak(32, 16, 8)); + +static long Sub(long a, long b) +{ + return a - b; +} + +static long Tak(long x, long y, long z) +{ + if (x > y) + { + return Tak( + Tak(Sub(x, 1), y, z), + Tak(Sub(y, 1), z, x), + Tak(Sub(z, 1), x, y)); + } + return z; +} diff --git a/benchmarks/cases/tak/tak.dart b/benchmarks/cases/tak/tak.dart new file mode 100644 index 00000000..97b2d8e0 --- /dev/null +++ b/benchmarks/cases/tak/tak.dart @@ -0,0 +1,16 @@ +// Tak function — heavily recursive integer benchmark. +int sub(int a, int b) { + return a - b; +} + +int tak(int x, int y, int z) { + if (x > y) { + return tak( + tak(sub(x, 1), y, z), tak(sub(y, 1), z, x), tak(sub(z, 1), x, y)); + } + return z; +} + +void main() { + print(tak(32, 16, 8)); +} diff --git a/benchmarks/cases/textstats/textstats.cs b/benchmarks/cases/textstats/textstats.cs new file mode 100644 index 00000000..3bf092dc --- /dev/null +++ b/benchmarks/cases/textstats/textstats.cs @@ -0,0 +1,65 @@ +// Text statistics over a tiny vocab — exercises length/char-search per word. +const long MINSTD = 16807; +const long MODULUS = 2147483647; + +string[] vocab = { "the", "quick", "brown", "fox", "jumps", "over", "lazy", "dog" }; +long seed = ReadSeed(); + +long acc = 0; +for (long i = 0; i < 200000; i++) +{ + string w = vocab[HashAt(seed, i) % 8]; + acc += (long)w.Length + + (Contains(w, 'o') ? 7 : 0) + + (w[0] == 't' ? 3 : 0); +} + +System.Console.WriteLine(acc); + +static long R1(long x) +{ + return (x * MINSTD) % MODULUS; +} + +static long HashAt(long s, long i) +{ + return R1(R1(s + i)); +} + +static bool Contains(string w, char c) +{ + for (int j = 0; j < w.Length; j++) + { + if (w[j] == c) + { + return true; + } + } + return false; +} + +static long ReadSeed() +{ + string line = System.Console.ReadLine(); + long m = 0; + if (line != null) + { + int end = 0; + while (end < line.Length && (line[end] == ' ' || line[end] == '\t')) end++; + int start = end; + if (end < line.Length && (line[end] == '+' || line[end] == '-')) end++; + while (end < line.Length && line[end] >= '0' && line[end] <= '9') end++; + if (end > start) + { + long.TryParse(line.Substring(start, end - start), out m); + } + } + if (m == 0) + { + return 1; + } + byte[] buf = new byte[8]; + System.Security.Cryptography.RandomNumberGenerator.Fill(buf); + ulong val = System.BitConverter.ToUInt64(buf, 0); + return (long)(val % 2147483646UL) + 1; +} diff --git a/benchmarks/cases/textstats/textstats.dart b/benchmarks/cases/textstats/textstats.dart new file mode 100644 index 00000000..198cec00 --- /dev/null +++ b/benchmarks/cases/textstats/textstats.dart @@ -0,0 +1,65 @@ +// Text statistics over a tiny vocab — exercises length/char-search per word. +import 'dart:io'; +import 'dart:math'; + +const int minstd = 16807; +const int modulus = 2147483647; + +int r1(int x) => (x * minstd) % modulus; + +int hashAt(int s, int i) => r1(r1(s + i)); + +bool containsChar(String w, int code) { + for (int j = 0; j < w.length; j++) { + if (w.codeUnitAt(j) == code) { + return true; + } + } + return false; +} + +int readSeed() { + final line = stdin.readLineSync(); + int m = 0; + if (line != null) { + int end = 0; + while (end < line.length && + (line.codeUnitAt(end) == 0x20 || line.codeUnitAt(end) == 0x09)) { + end++; + } + final start = end; + if (end < line.length && + (line.codeUnitAt(end) == 0x2B || line.codeUnitAt(end) == 0x2D)) { + end++; + } + while (end < line.length && + line.codeUnitAt(end) >= 0x30 && + line.codeUnitAt(end) <= 0x39) { + end++; + } + if (end > start) { + m = int.tryParse(line.substring(start, end)) ?? 0; + } + } + if (m == 0) { + return 1; + } + final rng = Random.secure(); + final val = (rng.nextInt(1 << 32) << 32) | rng.nextInt(1 << 32); + return val.toUnsigned(63) % 2147483646 + 1; +} + +void main() { + const vocab = ['the', 'quick', 'brown', 'fox', 'jumps', 'over', 'lazy', 'dog']; + final seed = readSeed(); + + int acc = 0; + for (int i = 0; i < 200000; i++) { + final w = vocab[hashAt(seed, i) % 8]; + acc += w.length + + (containsChar(w, 0x6F) ? 7 : 0) + + (w.codeUnitAt(0) == 0x74 ? 3 : 0); + } + + print(acc); +} diff --git a/benchmarks/cases/wordfreq/wordfreq.cs b/benchmarks/cases/wordfreq/wordfreq.cs new file mode 100644 index 00000000..40addea3 --- /dev/null +++ b/benchmarks/cases/wordfreq/wordfreq.cs @@ -0,0 +1,55 @@ +// Word-frequency count over a tiny vocab — exercises hashing + counting. +const long MINSTD = 16807; +const long MODULUS = 2147483647; + +long seed = ReadSeed(); + +long[] counts = new long[8]; +for (long i = 0; i < 200000; i++) +{ + counts[HashAt(seed, i) % 8] += 1; +} + +long result = 0; +for (long k = 0; k < 8; k++) +{ + result += (k + 1) * counts[k]; +} + +System.Console.WriteLine(result); + +static long R1(long x) +{ + return (x * MINSTD) % MODULUS; +} + +static long HashAt(long s, long i) +{ + return R1(R1(s + i)); +} + +static long ReadSeed() +{ + string line = System.Console.ReadLine(); + long m = 0; + if (line != null) + { + int end = 0; + while (end < line.Length && (line[end] == ' ' || line[end] == '\t')) end++; + int start = end; + if (end < line.Length && (line[end] == '+' || line[end] == '-')) end++; + while (end < line.Length && line[end] >= '0' && line[end] <= '9') end++; + if (end > start) + { + long.TryParse(line.Substring(start, end - start), out m); + } + } + if (m == 0) + { + return 1; + } + byte[] buf = new byte[8]; + System.Security.Cryptography.RandomNumberGenerator.Fill(buf); + ulong val = System.BitConverter.ToUInt64(buf, 0); + return (long)(val % 2147483646UL) + 1; +} diff --git a/benchmarks/cases/wordfreq/wordfreq.dart b/benchmarks/cases/wordfreq/wordfreq.dart new file mode 100644 index 00000000..a022ae98 --- /dev/null +++ b/benchmarks/cases/wordfreq/wordfreq.dart @@ -0,0 +1,57 @@ +// Word-frequency count over a tiny vocab — exercises hashing + counting. +import 'dart:io'; +import 'dart:math'; + +const int minstd = 16807; +const int modulus = 2147483647; + +int r1(int x) => (x * minstd) % modulus; + +int hashAt(int s, int i) => r1(r1(s + i)); + +int readSeed() { + final line = stdin.readLineSync(); + int m = 0; + if (line != null) { + int end = 0; + while (end < line.length && + (line.codeUnitAt(end) == 0x20 || line.codeUnitAt(end) == 0x09)) { + end++; + } + final start = end; + if (end < line.length && + (line.codeUnitAt(end) == 0x2B || line.codeUnitAt(end) == 0x2D)) { + end++; + } + while (end < line.length && + line.codeUnitAt(end) >= 0x30 && + line.codeUnitAt(end) <= 0x39) { + end++; + } + if (end > start) { + m = int.tryParse(line.substring(start, end)) ?? 0; + } + } + if (m == 0) { + return 1; + } + final rng = Random.secure(); + final val = (rng.nextInt(1 << 32) << 32) | rng.nextInt(1 << 32); + return val.toUnsigned(63) % 2147483646 + 1; +} + +void main() { + final seed = readSeed(); + + final counts = List.filled(8, 0); + for (int i = 0; i < 200000; i++) { + counts[hashAt(seed, i) % 8] += 1; + } + + int result = 0; + for (int k = 0; k < 8; k++) { + result += (k + 1) * counts[k]; + } + + print(result); +} diff --git a/benchmarks/report.py b/benchmarks/report.py index 04154f64..30de3ec5 100644 --- a/benchmarks/report.py +++ b/benchmarks/report.py @@ -21,10 +21,12 @@ from pathlib import Path from typing import Callable, Optional, cast -ORDER: list[str] = ["osprey", "osprey-gc", "rust", "c", "ocaml", "haskell", - "osprey-wasm", "rust-wasm", "c-wasm"] -LABEL: dict[str, str] = {"osprey": "Osprey", "osprey-gc": "Osprey (GC)", - "rust": "Rust", "c": "C", "ocaml": "OCaml", "haskell": "Haskell", +ORDER: list[str] = ["osprey", "osprey-arc", "osprey-gc", "rust", "c", "csharp", "dart", + "ocaml", "haskell", "osprey-wasm", "rust-wasm", "c-wasm"] +LABEL: dict[str, str] = {"osprey": "Osprey", "osprey-arc": "Osprey (ARC)", + "osprey-gc": "Osprey (GC)", + "rust": "Rust", "c": "C", "csharp": "C# (AOT)", "dart": "Dart (AOT)", + "ocaml": "OCaml", "haskell": "Haskell", "osprey-wasm": "Osprey (wasm)", "rust-wasm": "Rust (wasm)", "c-wasm": "C (wasm)"} REPO = Path(__file__).resolve().parent.parent diff --git a/benchmarks/results/raw.jsonl b/benchmarks/results/raw.jsonl index 80de5049..99816b82 100644 --- a/benchmarks/results/raw.jsonl +++ b/benchmarks/results/raw.jsonl @@ -1,176 +1,242 @@ -{"case":"ackermann","lang":"osprey","status":"ok","output":"8189","expected":"8189","rss":1687552} -{"case":"ackermann","lang":"osprey-gc","status":"ok","output":"8189","expected":"8189","rss":1736704} -{"case":"ackermann","lang":"rust","status":"ok","output":"8189","expected":"8189","rss":1835008} -{"case":"ackermann","lang":"c","status":"ok","output":"8189","expected":"8189","rss":1703936} -{"case":"ackermann","lang":"ocaml","status":"ok","output":"8189","expected":"8189","rss":2752512} -{"case":"ackermann","lang":"haskell","status":"ok","output":"8189","expected":"8189","rss":15826944} +{"case":"ackermann","lang":"osprey","status":"ok","output":"8189","expected":"8189","rss":1769472} +{"case":"ackermann","lang":"osprey-arc","status":"ok","output":"8189","expected":"8189","rss":1802240} +{"case":"ackermann","lang":"osprey-gc","status":"ok","output":"8189","expected":"8189","rss":1785856} +{"case":"ackermann","lang":"rust","status":"ok","output":"8189","expected":"8189","rss":1867776} +{"case":"ackermann","lang":"c","status":"ok","output":"8189","expected":"8189","rss":1753088} +{"case":"ackermann","lang":"csharp","status":"ok","output":"8189","expected":"8189","rss":7405568} +{"case":"ackermann","lang":"dart","status":"ok","output":"8189","expected":"8189","rss":14843904} +{"case":"ackermann","lang":"ocaml","status":"ok","output":"8189","expected":"8189","rss":2785280} +{"case":"ackermann","lang":"haskell","status":"ok","output":"8189","expected":"8189","rss":15876096} {"case":"ackermann","lang":"osprey-wasm","status":"ok","output":"8189","expected":"8189","rss":0} {"case":"ackermann","lang":"rust-wasm","status":"ok","output":"8189","expected":"8189","rss":0} -{"case":"binarytrees","lang":"osprey","status":"ok","output":"19659600","expected":"19659600","rss":948928512} -{"case":"binarytrees","lang":"osprey-gc","status":"ok","output":"19659600","expected":"19659600","rss":12894208} -{"case":"binarytrees","lang":"rust","status":"ok","output":"19659600","expected":"19659600","rss":2228224} -{"case":"binarytrees","lang":"c","status":"ok","output":"19659600","expected":"19659600","rss":1753088} -{"case":"binarytrees","lang":"ocaml","status":"ok","output":"19659600","expected":"19659600","rss":5373952} -{"case":"binarytrees","lang":"haskell","status":"ok","output":"19659600","expected":"19659600","rss":11550720} +{"case":"binarytrees","lang":"osprey","status":"ok","output":"19659600","expected":"19659600","rss":949043200} +{"case":"binarytrees","lang":"osprey-arc","status":"ok","output":"19659600","expected":"19659600","rss":511148032} +{"case":"binarytrees","lang":"osprey-gc","status":"ok","output":"19659600","expected":"19659600","rss":28852224} +{"case":"binarytrees","lang":"rust","status":"ok","output":"19659600","expected":"19659600","rss":2326528} +{"case":"binarytrees","lang":"c","status":"ok","output":"19659600","expected":"19659600","rss":1802240} +{"case":"binarytrees","lang":"csharp","status":"ok","output":"19659600","expected":"19659600","rss":16908288} +{"case":"binarytrees","lang":"dart","status":"ok","output":"19659600","expected":"19659600","rss":23576576} +{"case":"binarytrees","lang":"ocaml","status":"ok","output":"19659600","expected":"19659600","rss":5423104} +{"case":"binarytrees","lang":"haskell","status":"ok","output":"19659600","expected":"19659600","rss":11599872} {"case":"binarytrees","lang":"osprey-wasm","status":"ok","output":"19659600","expected":"19659600","rss":0} {"case":"binarytrees","lang":"rust-wasm","status":"ok","output":"19659600","expected":"19659600","rss":0} -{"case":"coins","lang":"osprey","status":"ok","output":"116727","expected":"116727","rss":1474560} -{"case":"coins","lang":"osprey-gc","status":"ok","output":"116727","expected":"116727","rss":1523712} -{"case":"coins","lang":"rust","status":"ok","output":"116727","expected":"116727","rss":1589248} -{"case":"coins","lang":"c","status":"ok","output":"116727","expected":"116727","rss":1458176} -{"case":"coins","lang":"ocaml","status":"ok","output":"116727","expected":"116727","rss":2326528} -{"case":"coins","lang":"haskell","status":"ok","output":"116727","expected":"116727","rss":11599872} +{"case":"coins","lang":"osprey","status":"ok","output":"116727","expected":"116727","rss":1556480} +{"case":"coins","lang":"osprey-arc","status":"ok","output":"116727","expected":"116727","rss":1556480} +{"case":"coins","lang":"osprey-gc","status":"ok","output":"116727","expected":"116727","rss":1572864} +{"case":"coins","lang":"rust","status":"ok","output":"116727","expected":"116727","rss":1638400} +{"case":"coins","lang":"c","status":"ok","output":"116727","expected":"116727","rss":1523712} +{"case":"coins","lang":"csharp","status":"ok","output":"116727","expected":"116727","rss":7192576} +{"case":"coins","lang":"dart","status":"ok","output":"116727","expected":"116727","rss":14614528} +{"case":"coins","lang":"ocaml","status":"ok","output":"116727","expected":"116727","rss":2375680} +{"case":"coins","lang":"haskell","status":"ok","output":"116727","expected":"116727","rss":11649024} {"case":"coins","lang":"osprey-wasm","status":"ok","output":"116727","expected":"116727","rss":0} {"case":"coins","lang":"rust-wasm","status":"ok","output":"116727","expected":"116727","rss":0} -{"case":"collatz","lang":"osprey","status":"ok","output":"10753840","expected":"10753840","rss":1474560} -{"case":"collatz","lang":"osprey-gc","status":"ok","output":"10753840","expected":"10753840","rss":1507328} -{"case":"collatz","lang":"rust","status":"ok","output":"10753840","expected":"10753840","rss":1605632} -{"case":"collatz","lang":"c","status":"ok","output":"10753840","expected":"10753840","rss":1458176} -{"case":"collatz","lang":"ocaml","status":"ok","output":"10753840","expected":"10753840","rss":2326528} -{"case":"collatz","lang":"haskell","status":"ok","output":"10753840","expected":"10753840","rss":11616256} +{"case":"collatz","lang":"osprey","status":"ok","output":"10753840","expected":"10753840","rss":232505344} +{"case":"collatz","lang":"osprey-arc","status":"ok","output":"10753840","expected":"10753840","rss":68698112} +{"case":"collatz","lang":"osprey-gc","status":"ok","output":"10753840","expected":"10753840","rss":6897664} +{"case":"collatz","lang":"rust","status":"ok","output":"10753840","expected":"10753840","rss":1638400} +{"case":"collatz","lang":"c","status":"ok","output":"10753840","expected":"10753840","rss":1507328} +{"case":"collatz","lang":"csharp","status":"ok","output":"10753840","expected":"10753840","rss":7176192} +{"case":"collatz","lang":"dart","status":"ok","output":"10753840","expected":"10753840","rss":14647296} +{"case":"collatz","lang":"ocaml","status":"ok","output":"10753840","expected":"10753840","rss":2375680} +{"case":"collatz","lang":"haskell","status":"ok","output":"10753840","expected":"10753840","rss":11665408} {"case":"collatz","lang":"osprey-wasm","status":"ok","output":"10753840","expected":"10753840","rss":0} {"case":"collatz","lang":"rust-wasm","status":"ok","output":"10753840","expected":"10753840","rss":0} -{"case":"coprime","lang":"osprey","status":"ok","output":"2433175","expected":"2433175","rss":1474560} -{"case":"coprime","lang":"osprey-gc","status":"ok","output":"2433175","expected":"2433175","rss":1523712} -{"case":"coprime","lang":"rust","status":"ok","output":"2433175","expected":"2433175","rss":1605632} -{"case":"coprime","lang":"c","status":"ok","output":"2433175","expected":"2433175","rss":1458176} -{"case":"coprime","lang":"ocaml","status":"ok","output":"2433175","expected":"2433175","rss":2326528} -{"case":"coprime","lang":"haskell","status":"ok","output":"2433175","expected":"2433175","rss":11616256} +{"case":"coprime","lang":"osprey","status":"ok","output":"2433175","expected":"2433175","rss":1540096} +{"case":"coprime","lang":"osprey-arc","status":"ok","output":"2433175","expected":"2433175","rss":1572864} +{"case":"coprime","lang":"osprey-gc","status":"ok","output":"2433175","expected":"2433175","rss":1572864} +{"case":"coprime","lang":"rust","status":"ok","output":"2433175","expected":"2433175","rss":1654784} +{"case":"coprime","lang":"c","status":"ok","output":"2433175","expected":"2433175","rss":1507328} +{"case":"coprime","lang":"csharp","status":"ok","output":"2433175","expected":"2433175","rss":7176192} +{"case":"coprime","lang":"dart","status":"ok","output":"2433175","expected":"2433175","rss":14712832} +{"case":"coprime","lang":"ocaml","status":"ok","output":"2433175","expected":"2433175","rss":2375680} +{"case":"coprime","lang":"haskell","status":"ok","output":"2433175","expected":"2433175","rss":11665408} {"case":"coprime","lang":"osprey-wasm","status":"ok","output":"2433175","expected":"2433175","rss":0} {"case":"coprime","lang":"rust-wasm","status":"ok","output":"2433175","expected":"2433175","rss":0} -{"case":"digitsum","lang":"osprey","status":"ok","output":"55000002","expected":"55000002","rss":1474560} -{"case":"digitsum","lang":"osprey-gc","status":"ok","output":"55000002","expected":"55000002","rss":1507328} -{"case":"digitsum","lang":"rust","status":"ok","output":"55000002","expected":"55000002","rss":1589248} -{"case":"digitsum","lang":"c","status":"ok","output":"55000002","expected":"55000002","rss":1441792} -{"case":"digitsum","lang":"ocaml","status":"ok","output":"55000002","expected":"55000002","rss":2326528} -{"case":"digitsum","lang":"haskell","status":"ok","output":"55000002","expected":"55000002","rss":11616256} +{"case":"digitsum","lang":"osprey","status":"ok","output":"55000002","expected":"55000002","rss":351371264} +{"case":"digitsum","lang":"osprey-arc","status":"ok","output":"55000002","expected":"55000002","rss":68665344} +{"case":"digitsum","lang":"osprey-gc","status":"ok","output":"55000002","expected":"55000002","rss":6881280} +{"case":"digitsum","lang":"rust","status":"ok","output":"55000002","expected":"55000002","rss":1638400} +{"case":"digitsum","lang":"c","status":"ok","output":"55000002","expected":"55000002","rss":1507328} +{"case":"digitsum","lang":"csharp","status":"ok","output":"55000002","expected":"55000002","rss":7176192} +{"case":"digitsum","lang":"dart","status":"ok","output":"55000002","expected":"55000002","rss":14680064} +{"case":"digitsum","lang":"ocaml","status":"ok","output":"55000002","expected":"55000002","rss":2375680} +{"case":"digitsum","lang":"haskell","status":"ok","output":"55000002","expected":"55000002","rss":11665408} {"case":"digitsum","lang":"osprey-wasm","status":"ok","output":"55000002","expected":"55000002","rss":0} {"case":"digitsum","lang":"rust-wasm","status":"ok","output":"55000002","expected":"55000002","rss":0} -{"case":"exprtree","lang":"osprey","status":"ok","output":"900720437","expected":"900720437","rss":9388032} -{"case":"exprtree","lang":"osprey-gc","status":"ok","output":"900720437","expected":"900720437","rss":6782976} -{"case":"exprtree","lang":"rust","status":"ok","output":"900720437","expected":"900720437","rss":2801664} -{"case":"exprtree","lang":"c","status":"ok","output":"900720437","expected":"900720437","rss":12025856} -{"case":"exprtree","lang":"ocaml","status":"ok","output":"900720437","expected":"900720437","rss":6340608} -{"case":"exprtree","lang":"haskell","status":"ok","output":"900720437","expected":"900720437","rss":11911168} +{"case":"exprtree","lang":"osprey","status":"ok","output":"900720437","expected":"900720437","rss":9469952} +{"case":"exprtree","lang":"osprey-arc","status":"ok","output":"900720437","expected":"900720437","rss":6995968} +{"case":"exprtree","lang":"osprey-gc","status":"ok","output":"900720437","expected":"900720437","rss":15892480} +{"case":"exprtree","lang":"rust","status":"ok","output":"900720437","expected":"900720437","rss":2818048} +{"case":"exprtree","lang":"c","status":"ok","output":"900720437","expected":"900720437","rss":12075008} +{"case":"exprtree","lang":"csharp","status":"ok","output":"900720437","expected":"900720437","rss":15958016} +{"case":"exprtree","lang":"dart","status":"ok","output":"900720437","expected":"900720437","rss":23756800} +{"case":"exprtree","lang":"ocaml","status":"ok","output":"900720437","expected":"900720437","rss":6389760} +{"case":"exprtree","lang":"haskell","status":"ok","output":"900720437","expected":"900720437","rss":11943936} {"case":"exprtree","lang":"osprey-wasm","status":"wasm_incompatible","output":"","expected":"900720437","rss":0} {"case":"exprtree","lang":"rust-wasm","status":"ok","output":"900720437","expected":"900720437","rss":0} -{"case":"factorial","lang":"osprey","status":"ok","output":"682498929","expected":"682498929","rss":1458176} -{"case":"factorial","lang":"osprey-gc","status":"ok","output":"682498929","expected":"682498929","rss":1523712} -{"case":"factorial","lang":"rust","status":"ok","output":"682498929","expected":"682498929","rss":1605632} -{"case":"factorial","lang":"c","status":"ok","output":"682498929","expected":"682498929","rss":1458176} -{"case":"factorial","lang":"ocaml","status":"ok","output":"682498929","expected":"682498929","rss":2310144} -{"case":"factorial","lang":"haskell","status":"ok","output":"682498929","expected":"682498929","rss":11632640} +{"case":"factorial","lang":"osprey","status":"ok","output":"682498929","expected":"682498929","rss":644071424} +{"case":"factorial","lang":"osprey-arc","status":"ok","output":"682498929","expected":"682498929","rss":135839744} +{"case":"factorial","lang":"osprey-gc","status":"ok","output":"682498929","expected":"682498929","rss":6881280} +{"case":"factorial","lang":"rust","status":"ok","output":"682498929","expected":"682498929","rss":1638400} +{"case":"factorial","lang":"c","status":"ok","output":"682498929","expected":"682498929","rss":1507328} +{"case":"factorial","lang":"csharp","status":"ok","output":"682498929","expected":"682498929","rss":7176192} +{"case":"factorial","lang":"dart","status":"ok","output":"682498929","expected":"682498929","rss":14647296} +{"case":"factorial","lang":"ocaml","status":"ok","output":"682498929","expected":"682498929","rss":2359296} +{"case":"factorial","lang":"haskell","status":"ok","output":"682498929","expected":"682498929","rss":11681792} {"case":"factorial","lang":"osprey-wasm","status":"ok","output":"682498929","expected":"682498929","rss":0} {"case":"factorial","lang":"rust-wasm","status":"ok","output":"682498929","expected":"682498929","rss":0} -{"case":"fib","lang":"osprey","status":"ok","output":"9227465","expected":"9227465","rss":1474560} -{"case":"fib","lang":"osprey-gc","status":"ok","output":"9227465","expected":"9227465","rss":1507328} -{"case":"fib","lang":"rust","status":"ok","output":"9227465","expected":"9227465","rss":1589248} -{"case":"fib","lang":"c","status":"ok","output":"9227465","expected":"9227465","rss":1458176} -{"case":"fib","lang":"ocaml","status":"ok","output":"9227465","expected":"9227465","rss":2326528} -{"case":"fib","lang":"haskell","status":"ok","output":"9227465","expected":"9227465","rss":11632640} +{"case":"fib","lang":"osprey","status":"ok","output":"9227465","expected":"9227465","rss":1556480} +{"case":"fib","lang":"osprey-arc","status":"ok","output":"9227465","expected":"9227465","rss":1572864} +{"case":"fib","lang":"osprey-gc","status":"ok","output":"9227465","expected":"9227465","rss":1556480} +{"case":"fib","lang":"rust","status":"ok","output":"9227465","expected":"9227465","rss":1638400} +{"case":"fib","lang":"c","status":"ok","output":"9227465","expected":"9227465","rss":1507328} +{"case":"fib","lang":"csharp","status":"ok","output":"9227465","expected":"9227465","rss":7192576} +{"case":"fib","lang":"dart","status":"ok","output":"9227465","expected":"9227465","rss":14614528} +{"case":"fib","lang":"ocaml","status":"ok","output":"9227465","expected":"9227465","rss":2375680} +{"case":"fib","lang":"haskell","status":"ok","output":"9227465","expected":"9227465","rss":11681792} {"case":"fib","lang":"osprey-wasm","status":"ok","output":"9227465","expected":"9227465","rss":0} {"case":"fib","lang":"rust-wasm","status":"ok","output":"9227465","expected":"9227465","rss":0} -{"case":"gcdsum","lang":"osprey","status":"ok","output":"7201567","expected":"7201567","rss":1458176} -{"case":"gcdsum","lang":"osprey-gc","status":"ok","output":"7201567","expected":"7201567","rss":1523712} -{"case":"gcdsum","lang":"rust","status":"ok","output":"7201567","expected":"7201567","rss":1605632} -{"case":"gcdsum","lang":"c","status":"ok","output":"7201567","expected":"7201567","rss":1441792} -{"case":"gcdsum","lang":"ocaml","status":"ok","output":"7201567","expected":"7201567","rss":2326528} -{"case":"gcdsum","lang":"haskell","status":"ok","output":"7201567","expected":"7201567","rss":11616256} +{"case":"gcdsum","lang":"osprey","status":"ok","output":"7201567","expected":"7201567","rss":1556480} +{"case":"gcdsum","lang":"osprey-arc","status":"ok","output":"7201567","expected":"7201567","rss":1572864} +{"case":"gcdsum","lang":"osprey-gc","status":"ok","output":"7201567","expected":"7201567","rss":1572864} +{"case":"gcdsum","lang":"rust","status":"ok","output":"7201567","expected":"7201567","rss":1638400} +{"case":"gcdsum","lang":"c","status":"ok","output":"7201567","expected":"7201567","rss":1507328} +{"case":"gcdsum","lang":"csharp","status":"ok","output":"7201567","expected":"7201567","rss":7176192} +{"case":"gcdsum","lang":"dart","status":"ok","output":"7201567","expected":"7201567","rss":14712832} +{"case":"gcdsum","lang":"ocaml","status":"ok","output":"7201567","expected":"7201567","rss":2375680} +{"case":"gcdsum","lang":"haskell","status":"ok","output":"7201567","expected":"7201567","rss":11665408} {"case":"gcdsum","lang":"osprey-wasm","status":"ok","output":"7201567","expected":"7201567","rss":0} {"case":"gcdsum","lang":"rust-wasm","status":"ok","output":"7201567","expected":"7201567","rss":0} -{"case":"hanoi","lang":"osprey","status":"ok","output":"33554431","expected":"33554431","rss":1458176} -{"case":"hanoi","lang":"osprey-gc","status":"ok","output":"33554431","expected":"33554431","rss":1507328} -{"case":"hanoi","lang":"rust","status":"ok","output":"33554431","expected":"33554431","rss":1589248} -{"case":"hanoi","lang":"c","status":"ok","output":"33554431","expected":"33554431","rss":1441792} -{"case":"hanoi","lang":"ocaml","status":"ok","output":"33554431","expected":"33554431","rss":2326528} -{"case":"hanoi","lang":"haskell","status":"ok","output":"33554431","expected":"33554431","rss":11632640} +{"case":"hanoi","lang":"osprey","status":"ok","output":"33554431","expected":"33554431","rss":1540096} +{"case":"hanoi","lang":"osprey-arc","status":"ok","output":"33554431","expected":"33554431","rss":1572864} +{"case":"hanoi","lang":"osprey-gc","status":"ok","output":"33554431","expected":"33554431","rss":1556480} +{"case":"hanoi","lang":"rust","status":"ok","output":"33554431","expected":"33554431","rss":1638400} +{"case":"hanoi","lang":"c","status":"ok","output":"33554431","expected":"33554431","rss":1490944} +{"case":"hanoi","lang":"csharp","status":"ok","output":"33554431","expected":"33554431","rss":7159808} +{"case":"hanoi","lang":"dart","status":"ok","output":"33554431","expected":"33554431","rss":14663680} +{"case":"hanoi","lang":"ocaml","status":"ok","output":"33554431","expected":"33554431","rss":2375680} +{"case":"hanoi","lang":"haskell","status":"ok","output":"33554431","expected":"33554431","rss":11681792} {"case":"hanoi","lang":"osprey-wasm","status":"ok","output":"33554431","expected":"33554431","rss":0} {"case":"hanoi","lang":"rust-wasm","status":"ok","output":"33554431","expected":"33554431","rss":0} -{"case":"isqrt","lang":"osprey","status":"ok","output":"666167500","expected":"666167500","rss":1474560} -{"case":"isqrt","lang":"osprey-gc","status":"ok","output":"666167500","expected":"666167500","rss":1507328} -{"case":"isqrt","lang":"rust","status":"ok","output":"666167500","expected":"666167500","rss":1605632} -{"case":"isqrt","lang":"c","status":"ok","output":"666167500","expected":"666167500","rss":1441792} -{"case":"isqrt","lang":"ocaml","status":"ok","output":"666167500","expected":"666167500","rss":2326528} -{"case":"isqrt","lang":"haskell","status":"ok","output":"666167500","expected":"666167500","rss":11616256} +{"case":"isqrt","lang":"osprey","status":"ok","output":"666167500","expected":"666167500","rss":816922624} +{"case":"isqrt","lang":"osprey-arc","status":"ok","output":"666167500","expected":"666167500","rss":270057472} +{"case":"isqrt","lang":"osprey-gc","status":"ok","output":"666167500","expected":"666167500","rss":8732672} +{"case":"isqrt","lang":"rust","status":"ok","output":"666167500","expected":"666167500","rss":1654784} +{"case":"isqrt","lang":"c","status":"ok","output":"666167500","expected":"666167500","rss":1490944} +{"case":"isqrt","lang":"csharp","status":"ok","output":"666167500","expected":"666167500","rss":7176192} +{"case":"isqrt","lang":"dart","status":"ok","output":"666167500","expected":"666167500","rss":14680064} +{"case":"isqrt","lang":"ocaml","status":"ok","output":"666167500","expected":"666167500","rss":2375680} +{"case":"isqrt","lang":"haskell","status":"ok","output":"666167500","expected":"666167500","rss":11665408} {"case":"isqrt","lang":"osprey-wasm","status":"ok","output":"666167500","expected":"666167500","rss":0} {"case":"isqrt","lang":"rust-wasm","status":"ok","output":"666167500","expected":"666167500","rss":0} -{"case":"josephus","lang":"osprey","status":"ok","output":"1400177","expected":"1400177","rss":1474560} -{"case":"josephus","lang":"osprey-gc","status":"ok","output":"1400177","expected":"1400177","rss":1507328} -{"case":"josephus","lang":"rust","status":"ok","output":"1400177","expected":"1400177","rss":1589248} -{"case":"josephus","lang":"c","status":"ok","output":"1400177","expected":"1400177","rss":1458176} -{"case":"josephus","lang":"ocaml","status":"ok","output":"1400177","expected":"1400177","rss":2326528} -{"case":"josephus","lang":"haskell","status":"ok","output":"1400177","expected":"1400177","rss":11616256} +{"case":"josephus","lang":"osprey","status":"ok","output":"1400177","expected":"1400177","rss":1556480} +{"case":"josephus","lang":"osprey-arc","status":"ok","output":"1400177","expected":"1400177","rss":1572864} +{"case":"josephus","lang":"osprey-gc","status":"ok","output":"1400177","expected":"1400177","rss":1572864} +{"case":"josephus","lang":"rust","status":"ok","output":"1400177","expected":"1400177","rss":1654784} +{"case":"josephus","lang":"c","status":"ok","output":"1400177","expected":"1400177","rss":1490944} +{"case":"josephus","lang":"csharp","status":"ok","output":"1400177","expected":"1400177","rss":7176192} +{"case":"josephus","lang":"dart","status":"ok","output":"1400177","expected":"1400177","rss":14761984} +{"case":"josephus","lang":"ocaml","status":"ok","output":"1400177","expected":"1400177","rss":2375680} +{"case":"josephus","lang":"haskell","status":"ok","output":"1400177","expected":"1400177","rss":11665408} {"case":"josephus","lang":"osprey-wasm","status":"ok","output":"1400177","expected":"1400177","rss":0} {"case":"josephus","lang":"rust-wasm","status":"ok","output":"1400177","expected":"1400177","rss":0} -{"case":"listops","lang":"osprey","status":"ok","output":"15992435","expected":"15992435","rss":2614575104} -{"case":"listops","lang":"osprey-gc","status":"ok","output":"15992435","expected":"15992435","rss":4341760} -{"case":"listops","lang":"rust","status":"ok","output":"15992435","expected":"15992435","rss":1703936} -{"case":"listops","lang":"c","status":"ok","output":"15992435","expected":"15992435","rss":1474560} -{"case":"listops","lang":"ocaml","status":"ok","output":"15992435","expected":"15992435","rss":2654208} -{"case":"listops","lang":"haskell","status":"ok","output":"15992435","expected":"15992435","rss":11862016} +{"case":"listops","lang":"osprey","status":"ok","output":"15992435","expected":"15992435","rss":2614591488} +{"case":"listops","lang":"osprey-arc","status":"ok","output":"15992435","expected":"15992435","rss":3548282880} +{"case":"listops","lang":"osprey-gc","status":"ok","output":"15992435","expected":"15992435","rss":3932160} +{"case":"listops","lang":"rust","status":"ok","output":"15992435","expected":"15992435","rss":1736704} +{"case":"listops","lang":"c","status":"ok","output":"15992435","expected":"15992435","rss":1523712} +{"case":"listops","lang":"csharp","status":"ok","output":"15992435","expected":"15992435","rss":7421952} +{"case":"listops","lang":"dart","status":"ok","output":"15992435","expected":"15992435","rss":15040512} +{"case":"listops","lang":"ocaml","status":"ok","output":"15992435","expected":"15992435","rss":2703360} +{"case":"listops","lang":"haskell","status":"ok","output":"15992435","expected":"15992435","rss":11911168} {"case":"listops","lang":"osprey-wasm","status":"wasm_incompatible","output":"","expected":"15992435","rss":0} {"case":"listops","lang":"rust-wasm","status":"ok","output":"15992435","expected":"15992435","rss":0} -{"case":"mutual","lang":"osprey","status":"ok","output":"64999","expected":"64999","rss":1474560} -{"case":"mutual","lang":"osprey-gc","status":"ok","output":"64999","expected":"64999","rss":1507328} -{"case":"mutual","lang":"rust","status":"ok","output":"64999","expected":"64999","rss":1589248} -{"case":"mutual","lang":"c","status":"ok","output":"64999","expected":"64999","rss":1441792} -{"case":"mutual","lang":"ocaml","status":"ok","output":"64999","expected":"64999","rss":2326528} -{"case":"mutual","lang":"haskell","status":"ok","output":"64999","expected":"64999","rss":11632640} +{"case":"mutual","lang":"osprey","status":"ok","output":"64999","expected":"64999","rss":1556480} +{"case":"mutual","lang":"osprey-arc","status":"ok","output":"64999","expected":"64999","rss":1556480} +{"case":"mutual","lang":"osprey-gc","status":"ok","output":"64999","expected":"64999","rss":1572864} +{"case":"mutual","lang":"rust","status":"ok","output":"64999","expected":"64999","rss":1638400} +{"case":"mutual","lang":"c","status":"ok","output":"64999","expected":"64999","rss":1507328} +{"case":"mutual","lang":"csharp","status":"ok","output":"64999","expected":"64999","rss":7176192} +{"case":"mutual","lang":"dart","status":"ok","output":"64999","expected":"64999","rss":14581760} +{"case":"mutual","lang":"ocaml","status":"ok","output":"64999","expected":"64999","rss":2375680} +{"case":"mutual","lang":"haskell","status":"ok","output":"64999","expected":"64999","rss":11681792} {"case":"mutual","lang":"osprey-wasm","status":"ok","output":"64999","expected":"64999","rss":0} {"case":"mutual","lang":"rust-wasm","status":"ok","output":"64999","expected":"64999","rss":0} -{"case":"nestedloop","lang":"osprey","status":"ok","output":"255643180","expected":"255643180","rss":1474560} -{"case":"nestedloop","lang":"osprey-gc","status":"ok","output":"255643180","expected":"255643180","rss":1507328} -{"case":"nestedloop","lang":"rust","status":"ok","output":"255643180","expected":"255643180","rss":1589248} -{"case":"nestedloop","lang":"c","status":"ok","output":"255643180","expected":"255643180","rss":1458176} -{"case":"nestedloop","lang":"ocaml","status":"ok","output":"255643180","expected":"255643180","rss":2310144} -{"case":"nestedloop","lang":"haskell","status":"ok","output":"255643180","expected":"255643180","rss":11567104} +{"case":"nestedloop","lang":"osprey","status":"ok","output":"255643180","expected":"255643180","rss":1556480} +{"case":"nestedloop","lang":"osprey-arc","status":"ok","output":"255643180","expected":"255643180","rss":1556480} +{"case":"nestedloop","lang":"osprey-gc","status":"ok","output":"255643180","expected":"255643180","rss":1572864} +{"case":"nestedloop","lang":"rust","status":"ok","output":"255643180","expected":"255643180","rss":1638400} +{"case":"nestedloop","lang":"c","status":"ok","output":"255643180","expected":"255643180","rss":1507328} +{"case":"nestedloop","lang":"csharp","status":"ok","output":"255643180","expected":"255643180","rss":7208960} +{"case":"nestedloop","lang":"dart","status":"ok","output":"255643180","expected":"255643180","rss":14581760} +{"case":"nestedloop","lang":"ocaml","status":"ok","output":"255643180","expected":"255643180","rss":2359296} +{"case":"nestedloop","lang":"haskell","status":"ok","output":"255643180","expected":"255643180","rss":11616256} {"case":"nestedloop","lang":"osprey-wasm","status":"ok","output":"255643180","expected":"255643180","rss":0} {"case":"nestedloop","lang":"rust-wasm","status":"ok","output":"255643180","expected":"255643180","rss":0} -{"case":"pascal","lang":"osprey","status":"ok","output":"20058300","expected":"20058300","rss":1474560} -{"case":"pascal","lang":"osprey-gc","status":"ok","output":"20058300","expected":"20058300","rss":1523712} -{"case":"pascal","lang":"rust","status":"ok","output":"20058300","expected":"20058300","rss":1589248} -{"case":"pascal","lang":"c","status":"ok","output":"20058300","expected":"20058300","rss":1441792} -{"case":"pascal","lang":"ocaml","status":"ok","output":"20058300","expected":"20058300","rss":2326528} -{"case":"pascal","lang":"haskell","status":"ok","output":"20058300","expected":"20058300","rss":11632640} +{"case":"pascal","lang":"osprey","status":"ok","output":"20058300","expected":"20058300","rss":1540096} +{"case":"pascal","lang":"osprey-arc","status":"ok","output":"20058300","expected":"20058300","rss":1572864} +{"case":"pascal","lang":"osprey-gc","status":"ok","output":"20058300","expected":"20058300","rss":1572864} +{"case":"pascal","lang":"rust","status":"ok","output":"20058300","expected":"20058300","rss":1654784} +{"case":"pascal","lang":"c","status":"ok","output":"20058300","expected":"20058300","rss":1507328} +{"case":"pascal","lang":"csharp","status":"ok","output":"20058300","expected":"20058300","rss":7176192} +{"case":"pascal","lang":"dart","status":"ok","output":"20058300","expected":"20058300","rss":14696448} +{"case":"pascal","lang":"ocaml","status":"ok","output":"20058300","expected":"20058300","rss":2375680} +{"case":"pascal","lang":"haskell","status":"ok","output":"20058300","expected":"20058300","rss":11681792} {"case":"pascal","lang":"osprey-wasm","status":"ok","output":"20058300","expected":"20058300","rss":0} {"case":"pascal","lang":"rust-wasm","status":"ok","output":"20058300","expected":"20058300","rss":0} -{"case":"powmod","lang":"osprey","status":"ok","output":"980475159","expected":"980475159","rss":1458176} -{"case":"powmod","lang":"osprey-gc","status":"ok","output":"980475159","expected":"980475159","rss":1523712} -{"case":"powmod","lang":"rust","status":"ok","output":"980475159","expected":"980475159","rss":1605632} -{"case":"powmod","lang":"c","status":"ok","output":"980475159","expected":"980475159","rss":1458176} -{"case":"powmod","lang":"ocaml","status":"ok","output":"980475159","expected":"980475159","rss":2326528} -{"case":"powmod","lang":"haskell","status":"ok","output":"980475159","expected":"980475159","rss":11632640} +{"case":"powmod","lang":"osprey","status":"ok","output":"980475159","expected":"980475159","rss":1556480} +{"case":"powmod","lang":"osprey-arc","status":"ok","output":"980475159","expected":"980475159","rss":1572864} +{"case":"powmod","lang":"osprey-gc","status":"ok","output":"980475159","expected":"980475159","rss":1556480} +{"case":"powmod","lang":"rust","status":"ok","output":"980475159","expected":"980475159","rss":1654784} +{"case":"powmod","lang":"c","status":"ok","output":"980475159","expected":"980475159","rss":1490944} +{"case":"powmod","lang":"csharp","status":"ok","output":"980475159","expected":"980475159","rss":7176192} +{"case":"powmod","lang":"dart","status":"ok","output":"980475159","expected":"980475159","rss":14598144} +{"case":"powmod","lang":"ocaml","status":"ok","output":"980475159","expected":"980475159","rss":2375680} +{"case":"powmod","lang":"haskell","status":"ok","output":"980475159","expected":"980475159","rss":11681792} {"case":"powmod","lang":"osprey-wasm","status":"ok","output":"980475159","expected":"980475159","rss":0} {"case":"powmod","lang":"rust-wasm","status":"ok","output":"980475159","expected":"980475159","rss":0} -{"case":"primes","lang":"osprey","status":"ok","output":"17984","expected":"17984","rss":1458176} -{"case":"primes","lang":"osprey-gc","status":"ok","output":"17984","expected":"17984","rss":1523712} -{"case":"primes","lang":"rust","status":"ok","output":"17984","expected":"17984","rss":1589248} -{"case":"primes","lang":"c","status":"ok","output":"17984","expected":"17984","rss":1458176} -{"case":"primes","lang":"ocaml","status":"ok","output":"17984","expected":"17984","rss":2326528} -{"case":"primes","lang":"haskell","status":"ok","output":"17984","expected":"17984","rss":11616256} +{"case":"primes","lang":"osprey","status":"ok","output":"17984","expected":"17984","rss":1540096} +{"case":"primes","lang":"osprey-arc","status":"ok","output":"17984","expected":"17984","rss":1572864} +{"case":"primes","lang":"osprey-gc","status":"ok","output":"17984","expected":"17984","rss":1572864} +{"case":"primes","lang":"rust","status":"ok","output":"17984","expected":"17984","rss":1638400} +{"case":"primes","lang":"c","status":"ok","output":"17984","expected":"17984","rss":1490944} +{"case":"primes","lang":"csharp","status":"ok","output":"17984","expected":"17984","rss":7176192} +{"case":"primes","lang":"dart","status":"ok","output":"17984","expected":"17984","rss":14712832} +{"case":"primes","lang":"ocaml","status":"ok","output":"17984","expected":"17984","rss":2359296} +{"case":"primes","lang":"haskell","status":"ok","output":"17984","expected":"17984","rss":11665408} {"case":"primes","lang":"osprey-wasm","status":"ok","output":"17984","expected":"17984","rss":0} {"case":"primes","lang":"rust-wasm","status":"ok","output":"17984","expected":"17984","rss":0} -{"case":"tak","lang":"osprey","status":"ok","output":"9","expected":"9","rss":1474560} -{"case":"tak","lang":"osprey-gc","status":"ok","output":"9","expected":"9","rss":1507328} -{"case":"tak","lang":"rust","status":"ok","output":"9","expected":"9","rss":1589248} -{"case":"tak","lang":"c","status":"ok","output":"9","expected":"9","rss":1458176} -{"case":"tak","lang":"ocaml","status":"ok","output":"9","expected":"9","rss":2326528} -{"case":"tak","lang":"haskell","status":"ok","output":"9","expected":"9","rss":11632640} +{"case":"tak","lang":"osprey","status":"ok","output":"9","expected":"9","rss":1556480} +{"case":"tak","lang":"osprey-arc","status":"ok","output":"9","expected":"9","rss":1556480} +{"case":"tak","lang":"osprey-gc","status":"ok","output":"9","expected":"9","rss":1572864} +{"case":"tak","lang":"rust","status":"ok","output":"9","expected":"9","rss":1654784} +{"case":"tak","lang":"c","status":"ok","output":"9","expected":"9","rss":1490944} +{"case":"tak","lang":"csharp","status":"ok","output":"9","expected":"9","rss":7159808} +{"case":"tak","lang":"dart","status":"ok","output":"9","expected":"9","rss":14696448} +{"case":"tak","lang":"ocaml","status":"ok","output":"9","expected":"9","rss":2375680} +{"case":"tak","lang":"haskell","status":"ok","output":"9","expected":"9","rss":11681792} {"case":"tak","lang":"osprey-wasm","status":"ok","output":"9","expected":"9","rss":0} {"case":"tak","lang":"rust-wasm","status":"ok","output":"9","expected":"9","rss":0} -{"case":"textstats","lang":"osprey","status":"ok","output":"1574956","expected":"1574956","rss":1458176} -{"case":"textstats","lang":"osprey-gc","status":"ok","output":"1574956","expected":"1574956","rss":1540096} -{"case":"textstats","lang":"rust","status":"ok","output":"1574956","expected":"1574956","rss":1671168} -{"case":"textstats","lang":"c","status":"ok","output":"1574956","expected":"1574956","rss":1458176} -{"case":"textstats","lang":"ocaml","status":"ok","output":"1574956","expected":"1574956","rss":2392064} -{"case":"textstats","lang":"haskell","status":"ok","output":"1574956","expected":"1574956","rss":11911168} +{"case":"textstats","lang":"osprey","status":"ok","output":"1574956","expected":"1574956","rss":1556480} +{"case":"textstats","lang":"osprey-arc","status":"ok","output":"1574956","expected":"1574956","rss":1638400} +{"case":"textstats","lang":"osprey-gc","status":"ok","output":"1574956","expected":"1574956","rss":1589248} +{"case":"textstats","lang":"rust","status":"ok","output":"1574956","expected":"1574956","rss":1703936} +{"case":"textstats","lang":"c","status":"ok","output":"1574956","expected":"1574956","rss":1523712} +{"case":"textstats","lang":"csharp","status":"ok","output":"1574956","expected":"1574956","rss":7176192} +{"case":"textstats","lang":"dart","status":"ok","output":"1574956","expected":"1574956","rss":14745600} +{"case":"textstats","lang":"ocaml","status":"ok","output":"1574956","expected":"1574956","rss":2441216} +{"case":"textstats","lang":"haskell","status":"ok","output":"1574956","expected":"1574956","rss":11960320} {"case":"textstats","lang":"osprey-wasm","status":"wasm_incompatible","output":"","expected":"1574956","rss":0} {"case":"textstats","lang":"rust-wasm","status":"ok","output":"1574956","expected":"1574956","rss":0} -{"case":"wordfreq","lang":"osprey","status":"ok","output":"900036","expected":"900036","rss":55394304} -{"case":"wordfreq","lang":"osprey-gc","status":"ok","output":"900036","expected":"900036","rss":4636672} -{"case":"wordfreq","lang":"rust","status":"ok","output":"900036","expected":"900036","rss":1654784} -{"case":"wordfreq","lang":"c","status":"ok","output":"900036","expected":"900036","rss":1458176} -{"case":"wordfreq","lang":"ocaml","status":"ok","output":"900036","expected":"900036","rss":2408448} -{"case":"wordfreq","lang":"haskell","status":"ok","output":"900036","expected":"900036","rss":11862016} +{"case":"wordfreq","lang":"osprey","status":"ok","output":"900036","expected":"900036","rss":61915136} +{"case":"wordfreq","lang":"osprey-arc","status":"ok","output":"900036","expected":"900036","rss":96370688} +{"case":"wordfreq","lang":"osprey-gc","status":"ok","output":"900036","expected":"900036","rss":4931584} +{"case":"wordfreq","lang":"rust","status":"ok","output":"900036","expected":"900036","rss":1703936} +{"case":"wordfreq","lang":"c","status":"ok","output":"900036","expected":"900036","rss":1490944} +{"case":"wordfreq","lang":"csharp","status":"ok","output":"900036","expected":"900036","rss":7159808} +{"case":"wordfreq","lang":"dart","status":"ok","output":"900036","expected":"900036","rss":14860288} +{"case":"wordfreq","lang":"ocaml","status":"ok","output":"900036","expected":"900036","rss":2457600} +{"case":"wordfreq","lang":"haskell","status":"ok","output":"900036","expected":"900036","rss":11911168} {"case":"wordfreq","lang":"osprey-wasm","status":"wasm_incompatible","output":"","expected":"900036","rss":0} {"case":"wordfreq","lang":"rust-wasm","status":"ok","output":"900036","expected":"900036","rss":0} diff --git a/benchmarks/results/results.html b/benchmarks/results/results.html index dff68f6d..bf353020 100644 --- a/benchmarks/results/results.html +++ b/benchmarks/results/results.html @@ -383,7 +383,30 @@ margin: 0; } .hero-actions { display: flex; flex-wrap: wrap; gap: var(--space-4); } -.hero-code { min-width: 0; } +.hero-code { min-width: 0; display: flex; flex-direction: column; gap: var(--space-4); } +.hero-code-caption { + font-size: var(--fs-code); + color: var(--on-surface-variant); + margin: 0; +} +.flavor-split { display: grid; gap: var(--space-4); min-width: 0; } +.flavor-split .code-example { min-width: 0; } +.flavor-tag { + display: flex; + align-items: baseline; + gap: var(--space-2); + padding: var(--space-2) var(--space-5); + font-size: var(--fs-label); + letter-spacing: 0.02em; + font-weight: 700; + color: var(--primary); + background: var(--surface-highest); + border-bottom: 1px solid var(--outline-variant); +} +.flavor-tag span { color: var(--on-surface-variant); font-weight: 500; font-family: var(--font-mono); } +/* These code windows label the flavor themselves, so drop the traffic-light chrome. */ +.flavor-split .code-example::before { display: none; } +.flavor-split .code-example pre { font-size: 0.82rem; } /* ---- Code window chrome (home only; prose code is styled separately) ---- */ .code-example { @@ -611,6 +634,352 @@ .comparison-cta { text-align: center; margin-top: var(--space-6); color: var(--on-surface-variant); } .comparison-cta a { font-weight: 600; } +/* ============================ WebAssembly SQL demo ======================= */ +.wasm-hero { + padding-block: clamp(3rem, 8vw, 5rem); +} +.wasm-copy h1, +.wasm-hero h1 { + font-size: var(--fs-display); + max-width: 18ch; + margin-bottom: var(--space-5); +} +.wasm-lede { + max-width: 62ch; + color: var(--on-surface-variant); + font-size: var(--fs-body-lg); + margin-bottom: var(--space-6); +} +.eyebrow { + font-family: var(--font-mono); + font-size: var(--fs-label); + letter-spacing: 0.12em; + text-transform: uppercase; + color: var(--primary-container); + margin: 0 0 var(--space-2); +} + +/* ---- WASM demo: JUST the 3 tabs, locked to the viewport. The PAGE never + scrolls; the footer is hidden and only the active panel scrolls inside. ---- */ +main:has(.wasm-studio) { height: calc(100dvh - var(--header-height)); overflow: hidden; } +body:has(.wasm-studio) .site-footer { display: none; } +.wasm-studio { + height: 100%; + padding-block: var(--space-4); + overflow: hidden; +} +.wasm-studio .container { + height: 100%; + display: flex; + flex-direction: column; + gap: var(--space-3); + min-height: 0; +} +/* Slim live-status line (JS writes here). One line, no hero. */ +.banner-slim { + padding: var(--space-2) var(--space-4); + font-size: 0.85rem; + border-radius: var(--radius); + flex-shrink: 0; +} +.wasm-tabbar { + display: flex; + gap: var(--space-2); + border-bottom: 1px solid var(--outline-variant); +} +.wasm-tab { + flex: 1 1 0; + display: flex; + flex-direction: column; + gap: 2px; + padding: var(--space-4) var(--space-5); + background: transparent; + border: 1px solid transparent; + border-bottom: none; + border-radius: var(--radius) var(--radius) 0 0; + color: var(--on-surface-variant); + text-align: left; + cursor: pointer; + transition: background var(--transition-fast), color var(--transition-fast); +} +.wasm-tab:hover { background: var(--surface-low); color: var(--on-surface); } +.wasm-tab.is-active { + background: var(--surface-low); + border-color: var(--outline-variant); + color: var(--on-surface); +} +.wasm-tab-k { font-size: var(--fs-h3); font-weight: 700; } +.wasm-tab-sub { + font-family: var(--font-mono); + font-size: var(--fs-label); + letter-spacing: 0.08em; + text-transform: uppercase; + color: var(--primary-container); +} +.wasm-panels { flex: 1; display: flex; min-height: 0; } +.wasm-panel { + flex: 1; + min-width: 0; + min-height: 0; + flex-direction: column; + gap: var(--space-4); + padding-top: var(--space-4); + overflow: hidden; +} +.wasm-panel.is-active { display: flex; } +/* Query panel: presets + editor + buttons fixed; the RESULT table takes the + rest and scrolls internally so the page never grows. */ +#panel-query .console { flex: 1; min-height: 0; grid-template-rows: auto auto auto 1fr; } +#panel-query .editor-wrap { max-height: 40%; } +#panel-query .editor-wrap .editor-hl, +#panel-query .console textarea { height: 100%; min-height: 6rem; } +#panel-query .tablewrap { min-height: 0; overflow: auto; } +/* Source panel: the code window fills and scrolls internally. */ +#panel-source .wasm-code-window { flex: 1; display: flex; flex-direction: column; min-height: 0; } +#panel-source .wasm-code-window pre { flex: 1; max-height: none; overflow: auto; min-height: 0; } +.section-head { + display: flex; + align-items: baseline; + justify-content: space-between; + flex-wrap: wrap; + gap: var(--space-3); + margin-bottom: var(--space-6); +} +.section-head h2 { margin: 0; } +.section-head .hint { + max-width: 38rem; + margin: 0; + color: var(--on-surface-variant); + font-size: 0.9rem; +} +.banner { + border-radius: var(--radius); + padding: var(--space-4) var(--space-5); + border: 1px solid var(--outline-variant); + background: var(--surface-low); + color: var(--on-surface-variant); +} +.banner.warn { + border-color: rgba(255, 190, 101, 0.35); + background: rgba(255, 190, 101, 0.06); + color: var(--tertiary); +} +.banner.ok { + border-color: rgba(80, 250, 123, 0.3); + background: rgba(80, 250, 123, 0.06); +} + +/* ── add-data form ── */ +.add-form { + display: flex; + flex-wrap: wrap; + align-items: flex-end; + gap: var(--space-4); +} +.add-form label { + display: flex; + flex-direction: column; + gap: 0.35rem; + font-family: var(--font-mono); + font-size: var(--fs-label); + letter-spacing: 0.04em; + text-transform: uppercase; + color: var(--on-surface-variant); +} +.add-form input, +.add-form select { + font-family: var(--font-mono); + font-size: var(--fs-code); + color: var(--on-surface); + background: var(--surface-lowest); + border: 1px solid var(--outline-variant); + border-radius: var(--radius-sm); + padding: 0.5rem 0.75rem; + min-width: 8rem; +} +.add-form input:focus, +.add-form select:focus { + outline: none; + border-color: var(--primary-container); +} +.add-status { + margin: var(--space-3) 0 0; + font-family: var(--font-mono); + font-size: 0.8rem; + min-height: 1.2em; + color: var(--on-surface-variant); +} +.add-status.ok { color: #50fa7b; } +.add-status.err { color: var(--error); } + +/* ── SQL console with a live highlight layer under the textarea ── */ +.console { + display: grid; + gap: var(--space-4); +} +.editor-wrap { + position: relative; +} +.editor-wrap .editor-hl, +.console textarea { + margin: 0; + width: 100%; + min-height: 9rem; + font-family: var(--font-mono); + font-size: var(--fs-code); + line-height: 1.6; + padding: var(--space-4); + border: 1px solid var(--outline-variant); + border-radius: var(--radius); + white-space: pre; + overflow: auto; + tab-size: 4; +} +.editor-wrap .editor-hl { + position: absolute; + inset: 0; + background: var(--surface-lowest); + pointer-events: none; + box-shadow: none; +} +.console textarea { + position: relative; + resize: vertical; + background: transparent; + color: transparent; + caret-color: var(--on-surface); +} +.console textarea:focus { + outline: none; + border-color: var(--primary-container); + box-shadow: 0 0 0 3px rgba(119, 215, 244, 0.12); +} +.console-bar { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: var(--space-3); +} +.console-bar .spacer { flex: 1; } +.preset { + font-family: var(--font-mono); + font-size: 0.78rem; + color: var(--primary-container); + background: var(--surface-container); + border: 1px solid var(--outline-variant); + border-radius: var(--radius-pill); + padding: 0.35rem 0.75rem; + cursor: pointer; +} +.preset:hover { border-color: var(--primary-container); } +.console-status { + font-family: var(--font-mono); + font-size: 0.78rem; + color: var(--on-surface-variant); +} +.console-status.ok { color: #50fa7b; } +.console-status.err { color: var(--error); } + +/* ── result table ── */ +.tablewrap { + min-width: 0; + overflow-x: auto; + border: 1px solid var(--outline-variant); + border-radius: var(--radius); +} +table.data { + width: 100%; + min-width: 22rem; + border-collapse: collapse; + font-size: 0.9rem; +} +table.data th, +table.data td { + padding: var(--space-2) var(--space-4); + text-align: left; + border-bottom: 1px solid var(--outline-variant); + white-space: nowrap; +} +table.data thead th { + background: var(--surface-high); + color: var(--on-surface); + font-family: var(--font-mono); + font-size: var(--fs-label); + letter-spacing: 0.05em; + text-transform: uppercase; +} +table.data tbody td { + color: var(--on-surface-variant); + font-variant-numeric: tabular-nums; +} +table.data tbody td:first-child { + color: var(--on-surface); + font-weight: 600; +} +table.data tr:last-child td { border-bottom: 0; } +table.data td.num { + text-align: right; + font-family: var(--font-mono); +} + +/* ── Osprey source window ── */ +.wasm-code-window { + min-width: 0; + background: var(--surface-lowest); + border: 1px solid var(--outline-variant); + border-radius: var(--radius-lg); + overflow: hidden; + box-shadow: 0 24px 60px rgba(0, 0, 0, 0.35); +} +.wasm-code-window .chrome { + height: 38px; + background: var(--surface-highest); + border-bottom: 1px solid var(--outline-variant); + display: flex; + align-items: center; + gap: 8px; + padding: 0 14px; +} +.wasm-code-window .chrome span { + width: 11px; + height: 11px; + border-radius: 50%; +} +.wasm-code-window .chrome span:nth-child(1) { background: #ff5f57; } +.wasm-code-window .chrome span:nth-child(2) { background: #febc2e; } +.wasm-code-window .chrome span:nth-child(3) { background: #28c840; } +.wasm-code-window .chrome b { + margin-left: auto; + font-family: var(--font-mono); + font-size: 0.74rem; + color: var(--on-surface-variant); + font-weight: 500; +} +.wasm-code-window pre { + margin: 0; + border: 0; + border-radius: 0; + background: transparent; + max-width: 100%; + max-height: 34rem; +} +.muted { + color: var(--on-surface-variant); + padding: var(--space-4); + margin: 0; +} +.spin { + display: inline-block; + width: 0.9em; + height: 0.9em; + border: 2px solid currentColor; + border-right-color: transparent; + border-radius: 50%; + animation: spin 0.7s linear infinite; + vertical-align: -1px; +} +@keyframes spin { to { transform: rotate(360deg); } } + /* ============================ Prose (docs / spec / blog post / status) ==== */ /* Two-column docs layout: sticky TOC sidebar + left-aligned article, matching docs/designs/prose. Article is width-capped; TOC is built by js/toc.js. */ @@ -752,6 +1121,21 @@ background: var(--surface-high); border-bottom: 1px solid var(--outline-variant); } +/* Flavor badge — every Osprey code block states its flavor so a reader always + knows which surface (Default `.osp` vs ML `.ospml`) a snippet is written in. + Left accent + tinted label: Default = primary, ML = tertiary/accent. */ +.prose pre[data-flavor]::before { + padding-left: calc(var(--space-4) + 3px); + border-left: 3px solid transparent; +} +.prose pre[data-flavor="default"]::before { + border-left-color: var(--primary); + color: var(--primary); +} +.prose pre[data-flavor="ml"]::before { + border-left-color: var(--tertiary-dim, #ffb86c); + color: var(--tertiary-dim, #ffb86c); +} .prose blockquote { margin: var(--space-6) 0; padding: var(--space-2) var(--space-5); @@ -881,6 +1265,10 @@ /* ============================ Responsive ================================= */ @media (max-width: 900px) { .hero .container { grid-template-columns: 1fr; } + /* Code stays left-aligned even though the hero copy centers on mobile. */ + .hero-code, .hero-code-caption { text-align: left; } + .wasm-hero-grid { grid-template-columns: 1fr; } + .wasm-copy h1 { max-width: 14ch; } .hero-subtitle { max-width: none; } .blog-posts { grid-template-columns: repeat(2, 1fr); } } @@ -913,6 +1301,17 @@ .hero-content { text-align: center; align-items: center; } .hero-actions { width: 100%; flex-direction: column; } .hero-actions .btn { width: 100%; } + .wasm-hero h1 { max-width: none; } + /* Three tabs stay in one row on phones: compact labels, no sub-caption. */ + .wasm-tab { padding: var(--space-3); align-items: center; text-align: center; } + .wasm-tab-k { font-size: var(--fs-body); } + .wasm-tab-sub { display: none; } + .wasm-studio .container { min-height: 70vh; } + .console-bar { width: 100%; } + .console-bar .btn { width: 100%; } + .add-form { flex-direction: column; align-items: stretch; } + .add-form input, + .add-form select { width: 100%; } /* Blog cards stack in one dark column (docs/designs/blog-grid-mobile). */ .blog-posts { grid-template-columns: 1fr; } .blog-posts .card:first-child .card-title { font-size: var(--fs-h3); } @@ -920,13 +1319,13 @@

Osprey cross-language benchmarks

-

Osprey, Osprey (GC), Rust, C, OCaml, Haskell, Osprey (wasm), Rust (wasm) — same naive algorithm and parameters in every language, native +

Osprey, Osprey (ARC), Osprey (GC), Rust, C, C# (AOT), Dart (AOT), OCaml, Haskell, Osprey (wasm), Rust (wasm) — same naive algorithm and parameters in every language, native release builds, output checked against an integer oracle. CPU = hyperfine mean ± stddev; memory = peak resident set size. Generated mechanically by benchmarks/report.py; re-run with make bench.

-
1CPU wins (fastest of all)
1.42×CPU vs Rust
1.61×CPU vs C
1.09×CPU vs OCaml
0.76×CPU vs Haskell
0.71×CPU vs Rust (wasm)

Osprey is the fastest of all five languages on primes. Lower is better; ★ marks an Osprey win.

+
0CPU wins (fastest of all)
2.32×CPU vs Rust
2.65×CPU vs C
1.89×CPU vs C# (AOT)
0.95×CPU vs Dart (AOT)
1.82×CPU vs OCaml
1.27×CPU vs Haskell
1.18×CPU vs Rust (wasm)

Osprey is the fastest of all five languages on . Lower is better; ★ marks an Osprey win.

CPU time

-
BenchmarkOspreyOsprey (GC)RustCOCamlHaskellOsprey (wasm)Rust (wasm)
ackermann127.4 ms126.6 ms128.6 ms126.3 ms110.8 ms65.1 ms130.6 ms136.1 ms
binarytrees417.1 ms1.498 s711.9 ms348.2 ms50.2 ms17.0 ms516.0 ms793.0 ms
coins72.1 ms70.2 ms73.9 ms69.0 ms91.4 ms52.2 ms92.1 ms100.5 ms
collatz12.5 ms11.8 ms11.2 ms9.1 ms53.8 ms35.0 ms19.2 ms22.6 ms
coprime62.9 ms61.3 ms59.1 ms58.3 ms86.9 ms100.1 ms69.4 ms71.3 ms
digitsum5.2 ms5.1 ms5.3 ms5.2 ms18.5 ms29.7 ms12.3 ms17.3 ms
exprtree6.7 ms20.6 ms10.2 ms5.7 ms5.2 ms16.6 ms19.8 ms
factorial33.9 ms31.7 ms32.0 ms32.0 ms44.0 ms52.5 ms42.0 ms45.8 ms
fib20.5 ms20.5 ms16.2 ms17.8 ms23.8 ms45.1 ms32.8 ms36.6 ms
gcdsum75.3 ms71.7 ms71.2 ms71.7 ms96.9 ms100.2 ms79.1 ms82.7 ms
hanoi39.0 ms36.3 ms36.4 ms36.1 ms59.9 ms53.5 ms47.5 ms51.1 ms
isqrt12.6 ms12.2 ms10.1 ms9.6 ms19.1 ms40.6 ms23.7 ms21.3 ms
josephus32.1 ms30.9 ms30.2 ms30.3 ms37.8 ms43.0 ms36.9 ms40.5 ms
listops499.2 ms651.0 ms1.5 ms1.3 ms2.0 ms16.7 ms13.1 ms
mutual12.6 ms11.9 ms12.0 ms11.7 ms28.6 ms34.8 ms23.7 ms28.1 ms
nestedloop43.6 ms41.4 ms43.2 ms42.0 ms52.3 ms63.6 ms54.3 ms58.0 ms
pascal27.6 ms26.6 ms27.0 ms26.9 ms43.5 ms57.8 ms42.4 ms47.0 ms
powmod22.6 ms21.5 ms21.8 ms21.7 ms56.3 ms55.3 ms28.4 ms31.7 ms
primes6.3 ms ★6.4 ms7.1 ms6.7 ms8.7 ms15.8 ms12.5 ms16.3 ms
tak32.6 ms32.4 ms32.2 ms32.7 ms43.8 ms63.2 ms85.4 ms91.1 ms
textstats3.2 ms3.4 ms2.0 ms2.1 ms4.0 ms17.7 ms12.2 ms
wordfreq19.3 ms53.3 ms4.4 ms1.5 ms2.4 ms18.4 ms15.3 ms
+
BenchmarkOspreyOsprey (ARC)Osprey (GC)RustCC# (AOT)Dart (AOT)OCamlHaskellOsprey (wasm)Rust (wasm)
ackermann134.6 ms131.2 ms129.8 ms130.0 ms129.5 ms132.4 ms186.4 ms111.9 ms65.4 ms146.1 ms146.4 ms
binarytrees555.1 ms1.957 s3.177 s752.6 ms367.3 ms127.7 ms126.9 ms52.3 ms16.3 ms573.7 ms809.2 ms
coins78.2 ms78.2 ms78.3 ms82.5 ms77.6 ms101.5 ms122.4 ms100.5 ms52.2 ms101.1 ms111.1 ms
collatz104.9 ms263.3 ms251.2 ms12.5 ms10.2 ms57.0 ms67.0 ms59.2 ms40.5 ms88.0 ms24.2 ms
coprime67.8 ms67.8 ms67.8 ms65.2 ms63.4 ms77.1 ms106.3 ms90.7 ms103.9 ms75.9 ms77.2 ms
digitsum137.5 ms375.3 ms358.5 ms5.4 ms5.4 ms16.3 ms28.9 ms18.9 ms29.7 ms104.6 ms18.0 ms
exprtree8.0 ms26.5 ms27.5 ms10.9 ms6.2 ms6.4 ms13.3 ms5.1 ms16.1 ms20.2 ms
factorial261.3 ms843.1 ms666.2 ms35.5 ms35.1 ms37.2 ms51.4 ms48.5 ms53.8 ms196.5 ms48.8 ms
fib21.1 ms21.0 ms21.2 ms17.3 ms17.7 ms35.9 ms51.6 ms23.9 ms48.4 ms33.0 ms36.7 ms
gcdsum79.3 ms79.4 ms79.4 ms79.1 ms79.0 ms86.3 ms108.8 ms101.4 ms106.1 ms86.6 ms91.0 ms
hanoi38.1 ms38.0 ms38.4 ms36.9 ms38.4 ms38.5 ms103.0 ms62.4 ms57.9 ms47.7 ms51.3 ms
isqrt308.1 ms855.7 ms807.4 ms11.0 ms10.4 ms16.9 ms32.9 ms20.5 ms43.7 ms285.8 ms22.8 ms
josephus33.3 ms33.3 ms33.3 ms33.5 ms32.9 ms34.9 ms42.1 ms41.1 ms43.7 ms38.5 ms41.9 ms
listops531.7 ms1.088 s660.5 ms1.4 ms1.2 ms2.9 ms9.8 ms1.9 ms18.1 ms11.4 ms
mutual11.8 ms11.1 ms10.8 ms11.6 ms11.7 ms19.1 ms297.7 ms28.6 ms32.6 ms23.4 ms27.0 ms
nestedloop45.2 ms43.8 ms41.4 ms42.1 ms41.3 ms43.4 ms54.4 ms53.2 ms60.4 ms60.7 ms64.8 ms
pascal28.4 ms28.5 ms28.4 ms28.3 ms27.8 ms33.4 ms64.7 ms44.3 ms59.7 ms43.4 ms47.1 ms
powmod23.3 ms23.3 ms23.4 ms23.4 ms23.4 ms34.1 ms50.5 ms60.7 ms58.1 ms30.0 ms33.9 ms
primes6.5 ms6.5 ms6.5 ms6.7 ms6.5 ms8.6 ms44.1 ms8.5 ms17.3 ms13.1 ms17.1 ms
tak32.9 ms32.5 ms32.7 ms32.8 ms32.6 ms34.9 ms81.9 ms44.4 ms64.7 ms86.6 ms90.4 ms
textstats3.5 ms5.1 ms3.6 ms2.0 ms2.1 ms3.7 ms11.0 ms3.8 ms17.3 ms12.6 ms
wordfreq22.6 ms78.0 ms70.9 ms4.5 ms1.5 ms3.3 ms10.6 ms2.3 ms17.3 ms15.6 ms

Peak memory

-
BenchmarkOspreyOsprey (GC)RustCOCamlHaskellOsprey (wasm)Rust (wasm)
ackermann1.6 MiB ★1.7 MiB1.8 MiB1.6 MiB2.6 MiB15.1 MiB
binarytrees905.0 MiB12.3 MiB2.1 MiB1.7 MiB5.1 MiB11.0 MiB
coins1.4 MiB1.5 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
collatz1.4 MiB1.4 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
coprime1.4 MiB1.5 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
digitsum1.4 MiB1.4 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
exprtree9.0 MiB6.5 MiB2.7 MiB11.5 MiB6.0 MiB11.4 MiB
factorial1.4 MiB1.5 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
fib1.4 MiB1.4 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
gcdsum1.4 MiB1.5 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
hanoi1.4 MiB1.4 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
isqrt1.4 MiB1.4 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
josephus1.4 MiB1.4 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
listops2493.5 MiB4.1 MiB1.6 MiB1.4 MiB2.5 MiB11.3 MiB
mutual1.4 MiB1.4 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
nestedloop1.4 MiB1.4 MiB1.5 MiB1.4 MiB2.2 MiB11.0 MiB
pascal1.4 MiB1.5 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
powmod1.4 MiB1.5 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
primes1.4 MiB1.5 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
tak1.4 MiB1.4 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
textstats1.4 MiB1.5 MiB1.6 MiB1.4 MiB2.3 MiB11.4 MiB
wordfreq52.8 MiB4.4 MiB1.6 MiB1.4 MiB2.3 MiB11.3 MiB
+
BenchmarkOspreyOsprey (ARC)Osprey (GC)RustCC# (AOT)Dart (AOT)OCamlHaskellOsprey (wasm)Rust (wasm)
ackermann1.7 MiB1.7 MiB1.7 MiB1.8 MiB1.7 MiB7.1 MiB14.2 MiB2.7 MiB15.1 MiB
binarytrees905.1 MiB487.5 MiB27.5 MiB2.2 MiB1.7 MiB16.1 MiB22.5 MiB5.2 MiB11.1 MiB
coins1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.5 MiB6.9 MiB13.9 MiB2.3 MiB11.1 MiB
collatz221.7 MiB65.5 MiB6.6 MiB1.6 MiB1.4 MiB6.8 MiB14.0 MiB2.3 MiB11.1 MiB
coprime1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.4 MiB6.8 MiB14.0 MiB2.3 MiB11.1 MiB
digitsum335.1 MiB65.5 MiB6.6 MiB1.6 MiB1.4 MiB6.8 MiB14.0 MiB2.3 MiB11.1 MiB
exprtree9.0 MiB6.7 MiB15.2 MiB2.7 MiB11.5 MiB15.2 MiB22.7 MiB6.1 MiB11.4 MiB
factorial614.2 MiB129.5 MiB6.6 MiB1.6 MiB1.4 MiB6.8 MiB14.0 MiB2.2 MiB11.1 MiB
fib1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.4 MiB6.9 MiB13.9 MiB2.3 MiB11.1 MiB
gcdsum1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.4 MiB6.8 MiB14.0 MiB2.3 MiB11.1 MiB
hanoi1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.4 MiB6.8 MiB14.0 MiB2.3 MiB11.1 MiB
isqrt779.1 MiB257.5 MiB8.3 MiB1.6 MiB1.4 MiB6.8 MiB14.0 MiB2.3 MiB11.1 MiB
josephus1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.4 MiB6.8 MiB14.1 MiB2.3 MiB11.1 MiB
listops2493.5 MiB3383.9 MiB3.8 MiB1.7 MiB1.5 MiB7.1 MiB14.3 MiB2.6 MiB11.4 MiB
mutual1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.4 MiB6.8 MiB13.9 MiB2.3 MiB11.1 MiB
nestedloop1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.4 MiB6.9 MiB13.9 MiB2.2 MiB11.1 MiB
pascal1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.4 MiB6.8 MiB14.0 MiB2.3 MiB11.1 MiB
powmod1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.4 MiB6.8 MiB13.9 MiB2.3 MiB11.1 MiB
primes1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.4 MiB6.8 MiB14.0 MiB2.2 MiB11.1 MiB
tak1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.4 MiB6.8 MiB14.0 MiB2.3 MiB11.1 MiB
textstats1.5 MiB1.6 MiB1.5 MiB1.6 MiB1.5 MiB6.8 MiB14.1 MiB2.3 MiB11.4 MiB
wordfreq59.0 MiB91.9 MiB4.7 MiB1.6 MiB1.4 MiB6.8 MiB14.2 MiB2.3 MiB11.4 MiB
diff --git a/benchmarks/results/results.json b/benchmarks/results/results.json index 176e523b..df4cf528 100644 --- a/benchmarks/results/results.json +++ b/benchmarks/results/results.json @@ -1,9 +1,12 @@ { "languages": [ "osprey", + "osprey-arc", "osprey-gc", "rust", "c", + "csharp", + "dart", "ocaml", "haskell", "osprey-wasm", @@ -13,447 +16,615 @@ "ackermann": { "osprey": { "status": "ok", - "rss": 1687552, - "mean": 0.12736866660869567, - "stddev": 0.002459543253816204, - "min": 0.12040150000000001, - "max": 0.13318437500000002 + "rss": 1769472, + "mean": 0.1345645226818182, + "stddev": 0.005452519551321495, + "min": 0.130096875, + "max": 0.156190209 + }, + "osprey-arc": { + "status": "ok", + "rss": 1802240, + "mean": 0.13115390345454547, + "stddev": 0.002719497379572533, + "min": 0.128188792, + "max": 0.139743167 }, "osprey-gc": { "status": "ok", - "rss": 1736704, - "mean": 0.12663914847826085, - "stddev": 0.0021330935690949374, - "min": 0.121384667, - "max": 0.13194466700000002 + "rss": 1785856, + "mean": 0.1297908026086957, + "stddev": 0.0013412721934446422, + "min": 0.127573875, + "max": 0.13264783400000002 }, "rust": { "status": "ok", - "rss": 1835008, - "mean": 0.12855516117391302, - "stddev": 0.006624488453047539, - "min": 0.12360216700000001, - "max": 0.15071604200000002 + "rss": 1867776, + "mean": 0.12995958517391304, + "stddev": 0.0015747509231243677, + "min": 0.128046875, + "max": 0.134430208 }, "c": { "status": "ok", - "rss": 1703936, - "mean": 0.12626428426086955, - "stddev": 0.0024300606337593973, - "min": 0.120284416, - "max": 0.13079279100000002 + "rss": 1753088, + "mean": 0.12950896373913048, + "stddev": 0.0015939714302684112, + "min": 0.12741829200000002, + "max": 0.13321554100000002 + }, + "csharp": { + "status": "ok", + "rss": 7405568, + "mean": 0.1323539111818182, + "stddev": 0.001988542564299666, + "min": 0.129967625, + "max": 0.138640792 + }, + "dart": { + "status": "ok", + "rss": 14843904, + "mean": 0.186408036375, + "stddev": 0.001833328809860568, + "min": 0.18530279200000002, + "max": 0.191866541 }, "ocaml": { "status": "ok", - "rss": 2752512, - "mean": 0.11077185485185186, - "stddev": 0.004511175386376077, - "min": 0.10786000000000001, - "max": 0.126096458 + "rss": 2785280, + "mean": 0.11186707534615385, + "stddev": 0.0005221674023018245, + "min": 0.110813833, + "max": 0.112841334 }, "haskell": { "status": "ok", - "rss": 15826944, - "mean": 0.0650837935111111, - "stddev": 0.0016568500349725874, - "min": 0.061242625, - "max": 0.067802375 + "rss": 15876096, + "mean": 0.06542362220454546, + "stddev": 0.00340463275238016, + "min": 0.060129417000000004, + "max": 0.07913091700000001 }, "osprey-wasm": { "status": "ok", "rss": 0, - "mean": 0.13056522345454546, - "stddev": 0.0013066069843639444, - "min": 0.12875308300000002, - "max": 0.134443416 + "mean": 0.14612629566666668, + "stddev": 0.01591528365396644, + "min": 0.14063075, + "max": 0.21501054200000003 }, "rust-wasm": { "status": "ok", "rss": 0, - "mean": 0.1360977605, - "stddev": 0.0048118742405834315, - "min": 0.13124333400000002, - "max": 0.14545033400000001 + "mean": 0.14640418129999996, + "stddev": 0.001700853865062307, + "min": 0.143973083, + "max": 0.15203945800000002 } }, "binarytrees": { "osprey": { "status": "ok", - "rss": 948928512, - "mean": 0.4171027916000001, - "stddev": 0.005368873774811168, - "min": 0.409974667, - "max": 0.427641708 + "rss": 949043200, + "mean": 0.5551312793000001, + "stddev": 0.008308801648642972, + "min": 0.54427525, + "max": 0.570839709 + }, + "osprey-arc": { + "status": "ok", + "rss": 511148032, + "mean": 1.9570361958, + "stddev": 0.07321798345552279, + "min": 1.8527507920000001, + "max": 2.067338 }, "osprey-gc": { "status": "ok", - "rss": 12894208, - "mean": 1.4981348957999998, - "stddev": 0.03200887146983784, - "min": 1.454544542, - "max": 1.5622914159999999 + "rss": 28852224, + "mean": 3.177285725, + "stddev": 0.0805671165782267, + "min": 3.0496595, + "max": 3.267500792 }, "rust": { "status": "ok", - "rss": 2228224, - "mean": 0.7119244999000001, - "stddev": 0.0063616883237827705, - "min": 0.7019235, - "max": 0.722862167 + "rss": 2326528, + "mean": 0.7526467585000001, + "stddev": 0.009777289594734931, + "min": 0.734756375, + "max": 0.765693209 }, "c": { "status": "ok", - "rss": 1753088, - "mean": 0.34818765, - "stddev": 0.0010506250252650126, - "min": 0.34681754200000003, - "max": 0.350219 + "rss": 1802240, + "mean": 0.36731783760000003, + "stddev": 0.011733240558909574, + "min": 0.360583459, + "max": 0.39995425 + }, + "csharp": { + "status": "ok", + "rss": 16908288, + "mean": 0.12765211786956526, + "stddev": 0.0022703525472382697, + "min": 0.12451475000000001, + "max": 0.133455125 + }, + "dart": { + "status": "ok", + "rss": 23576576, + "mean": 0.12686870660869567, + "stddev": 0.003931457216010006, + "min": 0.12253145800000001, + "max": 0.140329167 }, "ocaml": { "status": "ok", - "rss": 5373952, - "mean": 0.05015624088135594, - "stddev": 0.0008755254676432713, - "min": 0.04922125, - "max": 0.053505875 + "rss": 5423104, + "mean": 0.05232826971929825, + "stddev": 0.006859383236888313, + "min": 0.050166083, + "max": 0.102642125 }, "haskell": { "status": "ok", - "rss": 11550720, - "mean": 0.01701763330769231, - "stddev": 0.0011621268606972776, - "min": 0.014544125000000001, - "max": 0.026212500000000003 + "rss": 11599872, + "mean": 0.01627018013333333, + "stddev": 0.0009579311977375298, + "min": 0.014074708, + "max": 0.019786042 }, "osprey-wasm": { "status": "ok", "rss": 0, - "mean": 0.5160466626, - "stddev": 0.011906033373220703, - "min": 0.5053384590000001, - "max": 0.536465375 + "mean": 0.5736881915, + "stddev": 0.004697743167241167, + "min": 0.565529083, + "max": 0.582800416 }, "rust-wasm": { "status": "ok", "rss": 0, - "mean": 0.7930139458000001, - "stddev": 0.007143942188152813, - "min": 0.7737100840000001, - "max": 0.799466042 + "mean": 0.8092432168, + "stddev": 0.00950941447554287, + "min": 0.7886334580000001, + "max": 0.8162796670000001 } }, "coins": { "osprey": { "status": "ok", - "rss": 1474560, - "mean": 0.07212004475609758, - "stddev": 0.003377214671984259, - "min": 0.069020209, - "max": 0.077594667 + "rss": 1556480, + "mean": 0.07822102305263158, + "stddev": 0.0005224255167752527, + "min": 0.077551125, + "max": 0.08071479200000001 + }, + "osprey-arc": { + "status": "ok", + "rss": 1556480, + "mean": 0.0781546490263158, + "stddev": 0.0003746187035225157, + "min": 0.0769925, + "max": 0.078842541 }, "osprey-gc": { "status": "ok", - "rss": 1523712, - "mean": 0.07016199616279072, - "stddev": 0.002041511861044162, - "min": 0.068459084, - "max": 0.079539125 + "rss": 1572864, + "mean": 0.07829742642105264, + "stddev": 0.0005003219582959711, + "min": 0.07706725, + "max": 0.079201375 }, "rust": { "status": "ok", - "rss": 1589248, - "mean": 0.07386395507894737, - "stddev": 0.0016244328108029622, - "min": 0.072250334, - "max": 0.07842475 + "rss": 1638400, + "mean": 0.08251765975, + "stddev": 0.0004402681423428472, + "min": 0.081476375, + "max": 0.083225541 }, "c": { "status": "ok", - "rss": 1458176, - "mean": 0.06897973816666667, - "stddev": 0.0007158242593869825, - "min": 0.068110917, - "max": 0.071911375 + "rss": 1523712, + "mean": 0.0776159132894737, + "stddev": 0.0004391096245679562, + "min": 0.07683187500000001, + "max": 0.07854941600000001 + }, + "csharp": { + "status": "ok", + "rss": 7192576, + "mean": 0.10148286203448276, + "stddev": 0.0005567023234758983, + "min": 0.100526792, + "max": 0.10277654200000001 + }, + "dart": { + "status": "ok", + "rss": 14614528, + "mean": 0.12239364062500002, + "stddev": 0.0016825115888894197, + "min": 0.11892954200000001, + "max": 0.12582637500000002 }, "ocaml": { "status": "ok", - "rss": 2326528, - "mean": 0.0914358800909091, - "stddev": 0.0020929661932820726, - "min": 0.088602417, - "max": 0.097721875 + "rss": 2375680, + "mean": 0.10046314372413793, + "stddev": 0.000665900343883962, + "min": 0.099341625, + "max": 0.102070166 }, "haskell": { "status": "ok", - "rss": 11599872, - "mean": 0.052192122216666664, - "stddev": 0.0028862917045871773, - "min": 0.041684083000000004, - "max": 0.06328679200000001 + "rss": 11649024, + "mean": 0.05220763116393443, + "stddev": 0.0017259338212954182, + "min": 0.048504125, + "max": 0.05506275 }, "osprey-wasm": { "status": "ok", "rss": 0, - "mean": 0.09207955346875, - "stddev": 0.0016124838324076912, - "min": 0.08916479100000001, - "max": 0.097345834 + "mean": 0.10113390143333331, + "stddev": 0.0014515391342867442, + "min": 0.098042083, + "max": 0.10538950000000001 }, "rust-wasm": { "status": "ok", "rss": 0, - "mean": 0.10054772229999999, - "stddev": 0.0022293550701104063, - "min": 0.09711729200000001, - "max": 0.108666542 + "mean": 0.1110740465, + "stddev": 0.0014345512865940552, + "min": 0.107758792, + "max": 0.11357220900000001 } }, "collatz": { "osprey": { "status": "ok", - "rss": 1474560, - "mean": 0.012545572675799097, - "stddev": 0.0007508079792310841, - "min": 0.011583834000000001, - "max": 0.015584458 + "rss": 232505344, + "mean": 0.10486057146428572, + "stddev": 0.001443199432568061, + "min": 0.10263208400000001, + "max": 0.109490083 + }, + "osprey-arc": { + "status": "ok", + "rss": 68698112, + "mean": 0.26326781818181816, + "stddev": 0.010513790792834004, + "min": 0.24876225000000002, + "max": 0.27854179100000004 }, "osprey-gc": { "status": "ok", - "rss": 1507328, - "mean": 0.011776092250000002, - "stddev": 0.00038083972998952716, - "min": 0.011190083, - "max": 0.014055542 + "rss": 6897664, + "mean": 0.25122201024999996, + "stddev": 0.0049168244912322565, + "min": 0.242828167, + "max": 0.25861725 }, "rust": { "status": "ok", - "rss": 1605632, - "mean": 0.011229557091575085, - "stddev": 0.0005197024886975661, - "min": 0.010748834, - "max": 0.015912875 + "rss": 1638400, + "mean": 0.012528667373949585, + "stddev": 0.00016419152677289923, + "min": 0.012136583000000001, + "max": 0.013145917 }, "c": { "status": "ok", - "rss": 1458176, - "mean": 0.009143812271084344, - "stddev": 0.0003248461302836168, - "min": 0.008733000000000001, - "max": 0.010763208 + "rss": 1507328, + "mean": 0.010160753315436236, + "stddev": 0.00025094201150486725, + "min": 0.009773708, + "max": 0.012859834 + }, + "csharp": { + "status": "ok", + "rss": 7176192, + "mean": 0.05696826121153845, + "stddev": 0.0004637976098669413, + "min": 0.056162750000000004, + "max": 0.057909042 + }, + "dart": { + "status": "ok", + "rss": 14647296, + "mean": 0.06699445191111113, + "stddev": 0.0005575477299572578, + "min": 0.065834791, + "max": 0.06791683300000001 }, "ocaml": { "status": "ok", - "rss": 2326528, - "mean": 0.05384459749056604, - "stddev": 0.001693421025873247, - "min": 0.052014791000000005, - "max": 0.058015083 + "rss": 2375680, + "mean": 0.05920743137254903, + "stddev": 0.00044417522285832066, + "min": 0.058244583, + "max": 0.059915541 }, "haskell": { "status": "ok", - "rss": 11616256, - "mean": 0.03504228187254903, - "stddev": 0.005347767419208669, - "min": 0.028140167, - "max": 0.041864292000000004 + "rss": 11665408, + "mean": 0.04052061760273973, + "stddev": 0.00163461799494423, + "min": 0.036554083, + "max": 0.042717000000000005 }, "osprey-wasm": { "status": "ok", "rss": 0, - "mean": 0.0192491512420382, - "stddev": 0.0007538348927423456, - "min": 0.018100792, - "max": 0.022112166000000003 + "mean": 0.08804973788235293, + "stddev": 0.0015854748423113783, + "min": 0.084603208, + "max": 0.09143920800000001 }, "rust-wasm": { "status": "ok", "rss": 0, - "mean": 0.022615930829629642, - "stddev": 0.0018145933737602747, - "min": 0.020886750000000003, - "max": 0.037893458000000005 + "mean": 0.024240399711864407, + "stddev": 0.0007804159479572756, + "min": 0.023360875000000003, + "max": 0.030919708 } }, "coprime": { "osprey": { "status": "ok", - "rss": 1474560, - "mean": 0.06291767812765957, - "stddev": 0.0028832678517612133, - "min": 0.059396041000000004, - "max": 0.073785084 + "rss": 1540096, + "mean": 0.06783205588636364, + "stddev": 0.0008913568088513631, + "min": 0.067106125, + "max": 0.07308529200000001 + }, + "osprey-arc": { + "status": "ok", + "rss": 1572864, + "mean": 0.0677547386818182, + "stddev": 0.0003872525436284277, + "min": 0.066821084, + "max": 0.06869583400000001 }, "osprey-gc": { "status": "ok", - "rss": 1523712, - "mean": 0.06127333508163266, - "stddev": 0.0016299256547941555, - "min": 0.059423833, - "max": 0.065732 + "rss": 1572864, + "mean": 0.06778855109090909, + "stddev": 0.0007750820517765402, + "min": 0.06680791700000001, + "max": 0.07049525000000001 }, "rust": { "status": "ok", - "rss": 1605632, - "mean": 0.059120166604166684, - "stddev": 0.0020439484543486952, - "min": 0.057053125, - "max": 0.06846529200000001 + "rss": 1654784, + "mean": 0.06522360332608698, + "stddev": 0.001709715009866785, + "min": 0.06389958400000001, + "max": 0.07580516600000001 }, "c": { "status": "ok", - "rss": 1458176, - "mean": 0.05829657930769229, - "stddev": 0.0034262603697402237, - "min": 0.056251792, - "max": 0.079902583 + "rss": 1507328, + "mean": 0.06336895651063831, + "stddev": 0.000435036617911987, + "min": 0.062364083, + "max": 0.064612 + }, + "csharp": { + "status": "ok", + "rss": 7176192, + "mean": 0.07712703392105263, + "stddev": 0.0017958264633376794, + "min": 0.074456375, + "max": 0.08001812500000001 + }, + "dart": { + "status": "ok", + "rss": 14712832, + "mean": 0.10631477964285715, + "stddev": 0.0008504343680686866, + "min": 0.10476620900000001, + "max": 0.10946879100000001 }, "ocaml": { "status": "ok", - "rss": 2326528, - "mean": 0.08688494482352942, - "stddev": 0.0015512859012374908, - "min": 0.084144334, - "max": 0.09161416600000001 + "rss": 2375680, + "mean": 0.0906536450909091, + "stddev": 0.0006076981695146543, + "min": 0.089586625, + "max": 0.09205070800000001 }, "haskell": { "status": "ok", - "rss": 11616256, - "mean": 0.10008550840000002, - "stddev": 0.00256559025744893, - "min": 0.09627904200000001, - "max": 0.10595491600000001 + "rss": 11665408, + "mean": 0.10392730276666669, + "stddev": 0.004189262373305113, + "min": 0.098147625, + "max": 0.11158404200000001 }, "osprey-wasm": { "status": "ok", "rss": 0, - "mean": 0.06936656140476191, - "stddev": 0.003265549291210689, - "min": 0.065833417, - "max": 0.0834825 + "mean": 0.07594523755000002, + "stddev": 0.0011490444784922104, + "min": 0.07446900000000001, + "max": 0.08215583300000001 }, "rust-wasm": { "status": "ok", "rss": 0, - "mean": 0.07129117464285713, - "stddev": 0.001351472523202834, - "min": 0.069808958, - "max": 0.076489125 + "mean": 0.07716228730769231, + "stddev": 0.0015284024196467218, + "min": 0.075777458, + "max": 0.085454083 } }, "digitsum": { "osprey": { "status": "ok", - "rss": 1474560, - "mean": 0.005170246262267343, - "stddev": 0.000781678113238482, - "min": 0.004651625, - "max": 0.020299834000000003 + "rss": 351371264, + "mean": 0.1374745754761905, + "stddev": 0.0024174804760194583, + "min": 0.134810542, + "max": 0.14248158300000002 + }, + "osprey-arc": { + "status": "ok", + "rss": 68665344, + "mean": 0.37533211650000003, + "stddev": 0.014736225313382175, + "min": 0.35511841600000005, + "max": 0.396856417 }, "osprey-gc": { "status": "ok", - "rss": 1507328, - "mean": 0.005112774088926182, - "stddev": 0.0003147887309799651, - "min": 0.004723291, - "max": 0.007927875000000001 + "rss": 6881280, + "mean": 0.3584930998000001, + "stddev": 0.007535611289880487, + "min": 0.34818295800000004, + "max": 0.37085462500000005 }, "rust": { "status": "ok", - "rss": 1589248, - "mean": 0.005250681641263943, - "stddev": 0.00022697628757271102, - "min": 0.004930459, - "max": 0.006225833 + "rss": 1638400, + "mean": 0.005433431840659342, + "stddev": 0.00013229900198446882, + "min": 0.005151166, + "max": 0.0059826670000000005 }, "c": { "status": "ok", - "rss": 1441792, - "mean": 0.005150541593368241, - "stddev": 0.00017681968244626792, - "min": 0.004894375, - "max": 0.007009208 + "rss": 1507328, + "mean": 0.005420886127777776, + "stddev": 0.000257362979291614, + "min": 0.00516125, + "max": 0.010372708000000001 + }, + "csharp": { + "status": "ok", + "rss": 7176192, + "mean": 0.01625011494535519, + "stddev": 0.00033526427830981535, + "min": 0.015575084000000001, + "max": 0.01749625 + }, + "dart": { + "status": "ok", + "rss": 14680064, + "mean": 0.02890240268316832, + "stddev": 0.000643132673262398, + "min": 0.027618416000000003, + "max": 0.031924291 }, "ocaml": { "status": "ok", - "rss": 2326528, - "mean": 0.01854850368125, - "stddev": 0.0004513520644684195, - "min": 0.017969291000000002, - "max": 0.022834292000000003 + "rss": 2375680, + "mean": 0.01885908625, + "stddev": 0.00033301509286210503, + "min": 0.018250500000000003, + "max": 0.0218215 }, "haskell": { "status": "ok", - "rss": 11616256, - "mean": 0.02966093847572815, - "stddev": 0.003594441951270849, - "min": 0.026504292000000002, - "max": 0.046723708 + "rss": 11665408, + "mean": 0.02968039509821428, + "stddev": 0.00354134395443631, + "min": 0.025994458, + "max": 0.039148417000000005 }, "osprey-wasm": { "status": "ok", "rss": 0, - "mean": 0.012269523911894268, - "stddev": 0.000553571233264967, - "min": 0.011425667, - "max": 0.014235333000000001 + "mean": 0.10463570542857141, + "stddev": 0.0019169096479341988, + "min": 0.10087175000000001, + "max": 0.108792834 }, "rust-wasm": { "status": "ok", "rss": 0, - "mean": 0.017340458551136365, - "stddev": 0.0008586470987554304, - "min": 0.016389083000000002, - "max": 0.021746791 + "mean": 0.01803478125, + "stddev": 0.0005484856375491714, + "min": 0.017099, + "max": 0.021199167 } }, "exprtree": { "osprey": { "status": "ok", - "rss": 9388032, - "mean": 0.006669227870044061, - "stddev": 0.0008438215759033783, - "min": 0.005992916, - "max": 0.016138292000000002 + "rss": 9469952, + "mean": 0.007978456673740052, + "stddev": 0.00038408989198099216, + "min": 0.0075060840000000005, + "max": 0.012056208 + }, + "osprey-arc": { + "status": "ok", + "rss": 6995968, + "mean": 0.02645341894545454, + "stddev": 0.0010751518543495695, + "min": 0.022619125, + "max": 0.029006292000000003 }, "osprey-gc": { "status": "ok", - "rss": 6782976, - "mean": 0.020578401538461542, - "stddev": 0.0017146595955369757, - "min": 0.018666625000000003, - "max": 0.0285075 + "rss": 15892480, + "mean": 0.027528585990909103, + "stddev": 0.000996293839098802, + "min": 0.025244583, + "max": 0.02948575 }, "rust": { "status": "ok", - "rss": 2801664, - "mean": 0.010237154587412594, - "stddev": 0.00042782228586382915, - "min": 0.009574042000000001, - "max": 0.013407375000000001 + "rss": 2818048, + "mean": 0.01086708121014493, + "stddev": 0.0005563390576302379, + "min": 0.009946375, + "max": 0.014375542000000002 }, "c": { "status": "ok", - "rss": 12025856, - "mean": 0.005720792699999997, - "stddev": 0.0001533465193324896, - "min": 0.005393584000000001, - "max": 0.006655417 + "rss": 12075008, + "mean": 0.00620275053533191, + "stddev": 0.00021670351964556803, + "min": 0.005682875, + "max": 0.007407292 + }, + "csharp": { + "status": "ok", + "rss": 15958016, + "mean": 0.006411362004329005, + "stddev": 0.00025843357086850803, + "min": 0.005950666, + "max": 0.008270875 + }, + "dart": { + "status": "ok", + "rss": 23756800, + "mean": 0.01327907005381165, + "stddev": 0.000345860250665422, + "min": 0.01268525, + "max": 0.015122542000000001 }, "ocaml": { "status": "ok", - "rss": 6340608, - "mean": 0.00519815269558101, - "stddev": 0.0008117369387332161, - "min": 0.0046136250000000005, - "max": 0.020534625 + "rss": 6389760, + "mean": 0.005089618352331609, + "stddev": 0.00012257606960148587, + "min": 0.004816625000000001, + "max": 0.005554459 }, "haskell": { "status": "ok", - "rss": 11911168, - "mean": 0.016550161152631575, - "stddev": 0.0009376980389405851, - "min": 0.014253167, - "max": 0.019917875 + "rss": 11943936, + "mean": 0.01609413099444445, + "stddev": 0.000889235300501243, + "min": 0.013752458, + "max": 0.017879334 }, "osprey-wasm": { "status": "wasm_incompatible", @@ -462,456 +633,624 @@ "rust-wasm": { "status": "ok", "rss": 0, - "mean": 0.01980479784615383, - "stddev": 0.0010000000404604649, - "min": 0.018361542, - "max": 0.024348042 + "mean": 0.020167579695945934, + "stddev": 0.0004495564433719155, + "min": 0.019167833000000002, + "max": 0.0211175 } }, "factorial": { "osprey": { "status": "ok", - "rss": 1458176, - "mean": 0.03389132114606741, - "stddev": 0.007019229266663181, - "min": 0.030905458, - "max": 0.09033687500000001 + "rss": 644071424, + "mean": 0.2612707461818182, + "stddev": 0.0034858928188341303, + "min": 0.25368412500000004, + "max": 0.266988125 + }, + "osprey-arc": { + "status": "ok", + "rss": 135839744, + "mean": 0.8430764208999999, + "stddev": 0.016848091085279102, + "min": 0.8240432910000001, + "max": 0.873288625 }, "osprey-gc": { "status": "ok", - "rss": 1523712, - "mean": 0.0317362938, - "stddev": 0.0009527660830065876, - "min": 0.030675708000000003, - "max": 0.035603458000000004 + "rss": 6881280, + "mean": 0.6661575415000001, + "stddev": 0.016662232845861363, + "min": 0.643113583, + "max": 0.6889027080000001 }, "rust": { "status": "ok", - "rss": 1605632, - "mean": 0.03199023580851065, - "stddev": 0.002171628854097729, - "min": 0.030897833000000003, - "max": 0.049992875000000006 + "rss": 1638400, + "mean": 0.03549786155952381, + "stddev": 0.00024244979862158468, + "min": 0.034866708, + "max": 0.036251375 }, "c": { "status": "ok", - "rss": 1458176, - "mean": 0.03200252560227273, - "stddev": 0.0010432744584930277, - "min": 0.030777500000000003, - "max": 0.035524084000000004 + "rss": 1507328, + "mean": 0.03510839332142858, + "stddev": 0.0003263347937990731, + "min": 0.034403333, + "max": 0.0365955 + }, + "csharp": { + "status": "ok", + "rss": 7176192, + "mean": 0.03724943107407409, + "stddev": 0.00027494842744011906, + "min": 0.036700625, + "max": 0.03785725 + }, + "dart": { + "status": "ok", + "rss": 14647296, + "mean": 0.051431194403508775, + "stddev": 0.001572344237857508, + "min": 0.05055925, + "max": 0.061838916 }, "ocaml": { "status": "ok", - "rss": 2310144, - "mean": 0.04395305566153846, - "stddev": 0.0010123276576510952, - "min": 0.042696042000000003, - "max": 0.047625583000000006 + "rss": 2359296, + "mean": 0.048526261688524606, + "stddev": 0.00045267088336931033, + "min": 0.047642917, + "max": 0.050580083000000005 }, "haskell": { "status": "ok", - "rss": 11632640, - "mean": 0.05252409381666669, - "stddev": 0.0020327991925892337, - "min": 0.048136375, - "max": 0.0583125 + "rss": 11681792, + "mean": 0.053797523456140355, + "stddev": 0.0035085728254948935, + "min": 0.049266334, + "max": 0.06272554200000001 }, "osprey-wasm": { "status": "ok", "rss": 0, - "mean": 0.04195653821917807, - "stddev": 0.002562799206950008, - "min": 0.039287666000000006, - "max": 0.060856458 + "mean": 0.1964765888666667, + "stddev": 0.001374029714928674, + "min": 0.19380525, + "max": 0.199602834 }, "rust-wasm": { "status": "ok", "rss": 0, - "mean": 0.04583300308695652, - "stddev": 0.002596669859652369, - "min": 0.043298875, - "max": 0.0588235 + "mean": 0.04878427776666667, + "stddev": 0.0006019195355215574, + "min": 0.047530959000000005, + "max": 0.050127500000000005 } }, "fib": { "osprey": { "status": "ok", - "rss": 1474560, - "mean": 0.02051394144055944, - "stddev": 0.0013691293178279996, - "min": 0.018527250000000002, - "max": 0.02951275 + "rss": 1556480, + "mean": 0.021108200307142853, + "stddev": 0.0007509983904057311, + "min": 0.0203495, + "max": 0.027971125000000003 + }, + "osprey-arc": { + "status": "ok", + "rss": 1572864, + "mean": 0.021039977725352113, + "stddev": 0.0003080067764151423, + "min": 0.020355042, + "max": 0.022430833 }, "osprey-gc": { "status": "ok", - "rss": 1507328, - "mean": 0.02051100517763159, - "stddev": 0.0019918731609918612, - "min": 0.01892125, - "max": 0.041399375 + "rss": 1556480, + "mean": 0.021246296370629376, + "stddev": 0.00044988382326856567, + "min": 0.020440709, + "max": 0.023497834000000002 }, "rust": { "status": "ok", - "rss": 1589248, - "mean": 0.01620914889729729, - "stddev": 0.0006940610551309475, - "min": 0.015182542, - "max": 0.019881292000000002 + "rss": 1638400, + "mean": 0.017348509535294113, + "stddev": 0.0005815005441706882, + "min": 0.016438792, + "max": 0.021881625000000002 }, "c": { "status": "ok", - "rss": 1458176, - "mean": 0.017762794154761896, - "stddev": 0.0014664239909498442, - "min": 0.016354333000000002, - "max": 0.029877 + "rss": 1507328, + "mean": 0.017706915164705895, + "stddev": 0.00035248638452148193, + "min": 0.016900375000000002, + "max": 0.019532583000000003 + }, + "csharp": { + "status": "ok", + "rss": 7192576, + "mean": 0.03589416719047619, + "stddev": 0.0007583701565999027, + "min": 0.034825917000000005, + "max": 0.039738667000000005 + }, + "dart": { + "status": "ok", + "rss": 14614528, + "mean": 0.051574550714285725, + "stddev": 0.0006618506575265432, + "min": 0.050161083, + "max": 0.05346341600000001 }, "ocaml": { "status": "ok", - "rss": 2326528, - "mean": 0.023769823843750006, - "stddev": 0.0008148866972769889, - "min": 0.022750000000000003, - "max": 0.029588875 + "rss": 2375680, + "mean": 0.02388422668000001, + "stddev": 0.0005719476946591753, + "min": 0.023178292000000003, + "max": 0.02852725 }, "haskell": { "status": "ok", - "rss": 11632640, - "mean": 0.04507473178873239, - "stddev": 0.005351906297128206, - "min": 0.038009959, - "max": 0.054779125000000005 + "rss": 11681792, + "mean": 0.048423553236111125, + "stddev": 0.0049062206845668435, + "min": 0.040000917000000004, + "max": 0.054145167 }, "osprey-wasm": { "status": "ok", "rss": 0, - "mean": 0.032834075076923076, - "stddev": 0.0019921666347583766, - "min": 0.031065917000000002, - "max": 0.049011166 + "mean": 0.033025759853932586, + "stddev": 0.0005277174973016417, + "min": 0.031527, + "max": 0.034190375 }, "rust-wasm": { "status": "ok", "rss": 0, - "mean": 0.036624897734177216, - "stddev": 0.0026297678346860536, - "min": 0.03468025, - "max": 0.057620000000000005 + "mean": 0.036714996912499985, + "stddev": 0.0004947542466814679, + "min": 0.035642166, + "max": 0.037659416 } }, "gcdsum": { "osprey": { "status": "ok", - "rss": 1458176, - "mean": 0.07526948292307696, - "stddev": 0.004305469918117689, - "min": 0.070863833, - "max": 0.09634445800000001 + "rss": 1556480, + "mean": 0.07934559221621625, + "stddev": 0.0003360556195974216, + "min": 0.07869812500000001, + "max": 0.07993475 + }, + "osprey-arc": { + "status": "ok", + "rss": 1572864, + "mean": 0.07938019821621622, + "stddev": 0.0004120310589183741, + "min": 0.078552708, + "max": 0.080254084 }, "osprey-gc": { "status": "ok", - "rss": 1523712, - "mean": 0.07169628156097561, - "stddev": 0.0017325429328319411, - "min": 0.069940292, - "max": 0.077799292 + "rss": 1572864, + "mean": 0.07936307563157895, + "stddev": 0.0005685630151869321, + "min": 0.078575458, + "max": 0.081417875 }, "rust": { "status": "ok", - "rss": 1605632, - "mean": 0.07120980834999999, - "stddev": 0.0018146914072642059, - "min": 0.069471, - "max": 0.07867679200000001 + "rss": 1638400, + "mean": 0.07910054715789476, + "stddev": 0.0003725333543801194, + "min": 0.07855775000000001, + "max": 0.079933375 }, "c": { "status": "ok", - "rss": 1441792, - "mean": 0.07166573023809526, - "stddev": 0.0022975045921178635, - "min": 0.0695965, - "max": 0.07812287500000001 + "rss": 1507328, + "mean": 0.07900756473684212, + "stddev": 0.0009239326542319176, + "min": 0.077707209, + "max": 0.08341975 + }, + "csharp": { + "status": "ok", + "rss": 7176192, + "mean": 0.08629469114705884, + "stddev": 0.000601859359215893, + "min": 0.084755667, + "max": 0.08775962500000001 + }, + "dart": { + "status": "ok", + "rss": 14712832, + "mean": 0.10875445518518521, + "stddev": 0.0018086499452933222, + "min": 0.10269750000000001, + "max": 0.111456125 }, "ocaml": { "status": "ok", - "rss": 2326528, - "mean": 0.09686222925000001, - "stddev": 0.00462645647678677, - "min": 0.093128625, - "max": 0.117092792 + "rss": 2375680, + "mean": 0.10140632317241381, + "stddev": 0.0004427377162381708, + "min": 0.099739333, + "max": 0.102087416 }, "haskell": { "status": "ok", - "rss": 11616256, - "mean": 0.10016629996666666, - "stddev": 0.0024861800307271766, - "min": 0.09422454200000001, - "max": 0.104632 + "rss": 11665408, + "mean": 0.10612753707407407, + "stddev": 0.004234018619129058, + "min": 0.098280875, + "max": 0.11224579100000001 }, "osprey-wasm": { "status": "ok", "rss": 0, - "mean": 0.07909176415789472, - "stddev": 0.0028096609694049078, - "min": 0.076552125, - "max": 0.0858405 + "mean": 0.08662867647058824, + "stddev": 0.0005726063124368779, + "min": 0.08590062500000001, + "max": 0.088159333 }, "rust-wasm": { "status": "ok", "rss": 0, - "mean": 0.08267815636111112, - "stddev": 0.0024309706048319885, - "min": 0.080230459, - "max": 0.091406791 + "mean": 0.09097997656249998, + "stddev": 0.0008198958320934371, + "min": 0.0894945, + "max": 0.09326345800000001 } }, "hanoi": { "osprey": { "status": "ok", - "rss": 1458176, - "mean": 0.03898016027777777, - "stddev": 0.006323380006029107, - "min": 0.034034875, - "max": 0.083411917 + "rss": 1540096, + "mean": 0.03813411935135134, + "stddev": 0.001294421515214723, + "min": 0.03621225, + "max": 0.045716625000000004 + }, + "osprey-arc": { + "status": "ok", + "rss": 1572864, + "mean": 0.037964461499999984, + "stddev": 0.0007294215395749614, + "min": 0.036205167, + "max": 0.039678958 }, "osprey-gc": { "status": "ok", - "rss": 1507328, - "mean": 0.03632642127777776, - "stddev": 0.001984527050003104, - "min": 0.032262709, - "max": 0.041072667 + "rss": 1556480, + "mean": 0.03842205982051281, + "stddev": 0.0014079034977757027, + "min": 0.035828167, + "max": 0.0461815 }, "rust": { "status": "ok", - "rss": 1589248, - "mean": 0.03635548826923078, - "stddev": 0.0029921233529167784, - "min": 0.032812167, - "max": 0.051303083000000006 + "rss": 1638400, + "mean": 0.03690097615476191, + "stddev": 0.001086633779384452, + "min": 0.035139625, + "max": 0.040334666000000005 }, "c": { "status": "ok", - "rss": 1441792, - "mean": 0.036084054160919546, - "stddev": 0.0015624262255261017, - "min": 0.032889167000000004, - "max": 0.040231750000000004 + "rss": 1490944, + "mean": 0.03842720398684211, + "stddev": 0.001493288743904572, + "min": 0.03642525, + "max": 0.045783250000000004 + }, + "csharp": { + "status": "ok", + "rss": 7159808, + "mean": 0.03850589040740742, + "stddev": 0.001237997132746092, + "min": 0.036802167000000004, + "max": 0.04274025 + }, + "dart": { + "status": "ok", + "rss": 14663680, + "mean": 0.10302890925000001, + "stddev": 0.0007986264057087221, + "min": 0.10166870900000001, + "max": 0.10611812500000001 }, "ocaml": { "status": "ok", - "rss": 2326528, - "mean": 0.05986861664000002, - "stddev": 0.0012111948840090034, - "min": 0.057735041, - "max": 0.06350562500000001 + "rss": 2375680, + "mean": 0.06235808075510203, + "stddev": 0.0014335296522688403, + "min": 0.060959125, + "max": 0.071534417 }, "haskell": { "status": "ok", - "rss": 11632640, - "mean": 0.05346391745454545, - "stddev": 0.0025891811180582414, - "min": 0.047976209000000006, - "max": 0.06370175 + "rss": 11681792, + "mean": 0.05787081734615382, + "stddev": 0.0024146516531912197, + "min": 0.051673959000000005, + "max": 0.06240300000000001 }, "osprey-wasm": { "status": "ok", "rss": 0, - "mean": 0.04752694432258065, - "stddev": 0.001284844754663887, - "min": 0.044559292, - "max": 0.05107375 + "mean": 0.04768449401587302, + "stddev": 0.000843226088547746, + "min": 0.046270125, + "max": 0.051256875 }, "rust-wasm": { "status": "ok", "rss": 0, - "mean": 0.051082082724137924, - "stddev": 0.001213465546339915, - "min": 0.049107625, - "max": 0.054411166000000004 + "mean": 0.05132190818644068, + "stddev": 0.0008502906665828736, + "min": 0.049708125000000006, + "max": 0.054014583000000005 } }, "isqrt": { "osprey": { "status": "ok", - "rss": 1474560, - "mean": 0.012629960207207209, - "stddev": 0.0006986788353532812, - "min": 0.011404792, - "max": 0.014392708 + "rss": 816922624, + "mean": 0.3080578124000001, + "stddev": 0.004313446303007066, + "min": 0.30237616700000003, + "max": 0.315587291 + }, + "osprey-arc": { + "status": "ok", + "rss": 270057472, + "mean": 0.8557002043, + "stddev": 0.03498573763392344, + "min": 0.8018863340000001, + "max": 0.906049791 }, "osprey-gc": { "status": "ok", - "rss": 1507328, - "mean": 0.012172614474308304, - "stddev": 0.0006673462649462981, - "min": 0.011402500000000001, - "max": 0.016675792000000002 + "rss": 8732672, + "mean": 0.8073826998000001, + "stddev": 0.013654727909004285, + "min": 0.7904256660000001, + "max": 0.835586291 }, "rust": { "status": "ok", - "rss": 1605632, - "mean": 0.010062476886986303, - "stddev": 0.0004975310973058484, - "min": 0.009469208, - "max": 0.012382166 + "rss": 1654784, + "mean": 0.010983467040441182, + "stddev": 0.0002014130495948603, + "min": 0.010496458, + "max": 0.011892333000000001 }, "c": { "status": "ok", - "rss": 1441792, - "mean": 0.00961993262616823, - "stddev": 0.0005248119026738091, - "min": 0.009013959, - "max": 0.013415625 + "rss": 1490944, + "mean": 0.010417533161971837, + "stddev": 0.0002061798476161348, + "min": 0.010055334, + "max": 0.011834208 + }, + "csharp": { + "status": "ok", + "rss": 7176192, + "mean": 0.01694701073684211, + "stddev": 0.0006771194438999128, + "min": 0.015362292000000001, + "max": 0.018167041000000002 + }, + "dart": { + "status": "ok", + "rss": 14680064, + "mean": 0.03289552612087913, + "stddev": 0.0010243533684369088, + "min": 0.032018833000000003, + "max": 0.039753500000000004 }, "ocaml": { "status": "ok", - "rss": 2326528, - "mean": 0.019114320095541402, - "stddev": 0.000800030566234774, - "min": 0.018154125, - "max": 0.024944875000000002 + "rss": 2375680, + "mean": 0.020546318075862074, + "stddev": 0.0003477964652945999, + "min": 0.020100292000000002, + "max": 0.023951875 }, "haskell": { "status": "ok", - "rss": 11616256, - "mean": 0.040613052884615364, - "stddev": 0.0014728346591968075, - "min": 0.036254209, - "max": 0.042864916 + "rss": 11665408, + "mean": 0.04367416172368421, + "stddev": 0.002950067571321298, + "min": 0.036774375000000005, + "max": 0.048956667 }, "osprey-wasm": { "status": "ok", "rss": 0, - "mean": 0.02370038815384615, - "stddev": 0.0010625457344029916, - "min": 0.021986458, - "max": 0.028581125000000002 + "mean": 0.2858395542, + "stddev": 0.0020868130215307193, + "min": 0.281659125, + "max": 0.28926287500000003 }, "rust-wasm": { "status": "ok", "rss": 0, - "mean": 0.02132080785714285, - "stddev": 0.001047824632730243, - "min": 0.019645208, - "max": 0.025109667000000002 + "mean": 0.022778217044776106, + "stddev": 0.000734915978652451, + "min": 0.021317000000000003, + "max": 0.024959500000000003 } }, "josephus": { "osprey": { "status": "ok", - "rss": 1474560, - "mean": 0.03206687318681319, - "stddev": 0.0024738244043878616, - "min": 0.029176917, - "max": 0.048944625000000005 + "rss": 1556480, + "mean": 0.033272754633333346, + "stddev": 0.0002862483844275866, + "min": 0.032823917, + "max": 0.034875167000000006 + }, + "osprey-arc": { + "status": "ok", + "rss": 1572864, + "mean": 0.033303100877777776, + "stddev": 0.00043050191594833467, + "min": 0.032832166, + "max": 0.036188375 }, "osprey-gc": { "status": "ok", - "rss": 1507328, - "mean": 0.030889781210000012, - "stddev": 0.002217418265447028, - "min": 0.029252208000000002, - "max": 0.047989792 + "rss": 1572864, + "mean": 0.033318404988764046, + "stddev": 0.00022916510397678988, + "min": 0.032887208, + "max": 0.033851459 }, "rust": { "status": "ok", - "rss": 1589248, - "mean": 0.03018944914000002, - "stddev": 0.001106064607898799, - "min": 0.029157291000000002, - "max": 0.03375075 + "rss": 1654784, + "mean": 0.03347245976136364, + "stddev": 0.0002442429475795455, + "min": 0.032940500000000004, + "max": 0.03410775 }, "c": { "status": "ok", - "rss": 1458176, - "mean": 0.03029346875000001, - "stddev": 0.0012372235894371093, - "min": 0.028975084, - "max": 0.033559625 + "rss": 1490944, + "mean": 0.032906200593406605, + "stddev": 0.0002441522606012701, + "min": 0.032372375, + "max": 0.033523083 + }, + "csharp": { + "status": "ok", + "rss": 7176192, + "mean": 0.03491813692857143, + "stddev": 0.0004469809156558845, + "min": 0.034004709, + "max": 0.038010084 + }, + "dart": { + "status": "ok", + "rss": 14761984, + "mean": 0.042094154555555555, + "stddev": 0.0007110514366167589, + "min": 0.040663292000000004, + "max": 0.045950708 }, "ocaml": { "status": "ok", - "rss": 2326528, - "mean": 0.03783895061728396, - "stddev": 0.002663089079122089, - "min": 0.036365125000000005, - "max": 0.057168542 + "rss": 2375680, + "mean": 0.04111357923611108, + "stddev": 0.0003289158483281863, + "min": 0.040393375, + "max": 0.041817166 }, "haskell": { "status": "ok", - "rss": 11616256, - "mean": 0.04302655951428571, - "stddev": 0.00460702620487097, - "min": 0.037120417, - "max": 0.054705042 + "rss": 11665408, + "mean": 0.04374498096969698, + "stddev": 0.0027692043489831748, + "min": 0.038977084, + "max": 0.050435417 }, "osprey-wasm": { "status": "ok", "rss": 0, - "mean": 0.036892117902439035, - "stddev": 0.0012903578859848918, - "min": 0.035456292, - "max": 0.04508675 + "mean": 0.03852403623376623, + "stddev": 0.0006683354001262924, + "min": 0.037195083000000004, + "max": 0.040756875000000005 }, "rust-wasm": { "status": "ok", "rss": 0, - "mean": 0.04050323567123287, - "stddev": 0.0015212885551802516, - "min": 0.038929042000000004, - "max": 0.044929250000000004 + "mean": 0.04192726188571428, + "stddev": 0.000597849860643074, + "min": 0.040615208, + "max": 0.043516458 } }, "listops": { "osprey": { "status": "ok", - "rss": 2614575104, - "mean": 0.4992477335000001, - "stddev": 0.012753006481641254, - "min": 0.48592937500000005, - "max": 0.527530917 + "rss": 2614591488, + "mean": 0.5317172751000001, + "stddev": 0.005037973977676098, + "min": 0.5234145, + "max": 0.5384586250000001 + }, + "osprey-arc": { + "status": "ok", + "rss": 3548282880, + "mean": 1.0881916708, + "stddev": 0.014829940104248655, + "min": 1.0704225840000001, + "max": 1.116767667 }, "osprey-gc": { "status": "ok", - "rss": 4341760, - "mean": 0.6509993206000001, - "stddev": 0.013755113620804152, - "min": 0.636951708, - "max": 0.6808396250000001 + "rss": 3932160, + "mean": 0.6605329208000001, + "stddev": 0.008371314355412399, + "min": 0.6430895000000001, + "max": 0.67297775 }, "rust": { "status": "ok", - "rss": 1703936, - "mean": 0.0014738148716605555, - "stddev": 0.000190777093872242, - "min": 0.001263584, - "max": 0.003932541 + "rss": 1736704, + "mean": 0.00137688654350105, + "stddev": 0.0001345308863739621, + "min": 0.001227666, + "max": 0.003952542 }, "c": { "status": "ok", - "rss": 1474560, - "mean": 0.0013442372648148114, - "stddev": 0.00016199288240932277, - "min": 0.001145125, - "max": 0.002037583 + "rss": 1523712, + "mean": 0.001178319222359738, + "stddev": 6.744330879786567e-05, + "min": 0.0010408330000000001, + "max": 0.001656541 + }, + "csharp": { + "status": "ok", + "rss": 7421952, + "mean": 0.002877564453252032, + "stddev": 0.00014490080444438743, + "min": 0.00264875, + "max": 0.004004084000000001 + }, + "dart": { + "status": "ok", + "rss": 15040512, + "mean": 0.009812585640410963, + "stddev": 0.0005419425402238753, + "min": 0.009108375, + "max": 0.015435666 }, "ocaml": { "status": "ok", - "rss": 2654208, - "mean": 0.001971891221189591, - "stddev": 0.00023640887698620205, - "min": 0.001771041, - "max": 0.008106959 + "rss": 2703360, + "mean": 0.0018979480423728795, + "stddev": 9.271196656977805e-05, + "min": 0.001745334, + "max": 0.0025287910000000003 }, "haskell": { "status": "ok", - "rss": 11862016, - "mean": 0.01674602562631579, - "stddev": 0.0009638053637768733, - "min": 0.014610584000000001, - "max": 0.019286625 + "rss": 11911168, + "mean": 0.018076607695652173, + "stddev": 0.0015579832014204452, + "min": 0.014682583, + "max": 0.020427709000000002 }, "osprey-wasm": { "status": "wasm_incompatible", @@ -920,456 +1259,624 @@ "rust-wasm": { "status": "ok", "rss": 0, - "mean": 0.013138021443946197, - "stddev": 0.001376279649515157, - "min": 0.011319708000000001, - "max": 0.022722084 + "mean": 0.011447783744186053, + "stddev": 0.0006599589452747025, + "min": 0.010861500000000001, + "max": 0.020555667 } }, "mutual": { "osprey": { "status": "ok", - "rss": 1474560, - "mean": 0.012616265615740741, - "stddev": 0.0007349277505286447, - "min": 0.01096425, - "max": 0.016611667 + "rss": 1556480, + "mean": 0.01175217482745098, + "stddev": 0.0003391920961277852, + "min": 0.010514250000000001, + "max": 0.012357375 + }, + "osprey-arc": { + "status": "ok", + "rss": 1556480, + "mean": 0.011111069444444443, + "stddev": 0.0005510888055985828, + "min": 0.010369959000000002, + "max": 0.012307667000000001 }, "osprey-gc": { "status": "ok", - "rss": 1507328, - "mean": 0.011886927537549413, - "stddev": 0.0005564055069057845, - "min": 0.011234666, - "max": 0.014337500000000001 + "rss": 1572864, + "mean": 0.010813424035971225, + "stddev": 0.000256989128333634, + "min": 0.010351125000000001, + "max": 0.012053458000000001 }, "rust": { "status": "ok", - "rss": 1589248, - "mean": 0.01201531354999999, - "stddev": 0.0008148322746304114, - "min": 0.010820875, - "max": 0.016388708000000002 + "rss": 1638400, + "mean": 0.011613327939163502, + "stddev": 0.0003314409951328484, + "min": 0.011018334000000001, + "max": 0.013283917000000001 }, "c": { "status": "ok", - "rss": 1441792, - "mean": 0.011682933150943396, - "stddev": 0.0007869429500042517, - "min": 0.010658125000000001, - "max": 0.016314875 + "rss": 1507328, + "mean": 0.011655067379699246, + "stddev": 0.000780019862447817, + "min": 0.010763625, + "max": 0.020331625000000002 + }, + "csharp": { + "status": "ok", + "rss": 7176192, + "mean": 0.01906923807453415, + "stddev": 0.0004107605854414093, + "min": 0.018507625, + "max": 0.021355167 + }, + "dart": { + "status": "ok", + "rss": 14581760, + "mean": 0.29772791660000003, + "stddev": 0.0013403887551222762, + "min": 0.29569525, + "max": 0.299473292 }, "ocaml": { "status": "ok", - "rss": 2326528, - "mean": 0.02864359828301886, - "stddev": 0.0034627559257139544, - "min": 0.026055542, - "max": 0.04374025 + "rss": 2375680, + "mean": 0.028597680907407403, + "stddev": 0.0030756725110168727, + "min": 0.026441125000000003, + "max": 0.038695292 }, "haskell": { "status": "ok", - "rss": 11632640, - "mean": 0.03478966937974683, - "stddev": 0.005555666740297695, - "min": 0.027321375000000002, - "max": 0.042813542 + "rss": 11681792, + "mean": 0.032551467161616145, + "stddev": 0.00386425845382139, + "min": 0.027665541000000002, + "max": 0.044638667 }, "osprey-wasm": { "status": "ok", "rss": 0, - "mean": 0.0237384124, - "stddev": 0.0009039520256497789, - "min": 0.022632125000000003, - "max": 0.027770458 + "mean": 0.023394538453125, + "stddev": 0.00048565925153069205, + "min": 0.022569583, + "max": 0.025395958000000003 }, "rust-wasm": { "status": "ok", "rss": 0, - "mean": 0.02807970413888888, - "stddev": 0.0014215482905751428, - "min": 0.025863709000000002, - "max": 0.031503958 + "mean": 0.02702167211111111, + "stddev": 0.0004702324925435166, + "min": 0.026111333, + "max": 0.02851325 } }, "nestedloop": { "osprey": { "status": "ok", - "rss": 1474560, - "mean": 0.043554934924242436, - "stddev": 0.0020482107251585772, - "min": 0.040747000000000005, - "max": 0.047293083 + "rss": 1556480, + "mean": 0.045206511880597024, + "stddev": 0.0012928570807331234, + "min": 0.041372167, + "max": 0.047949250000000006 + }, + "osprey-arc": { + "status": "ok", + "rss": 1556480, + "mean": 0.043770306000000016, + "stddev": 0.0019619301890485613, + "min": 0.040667709, + "max": 0.046459083000000005 }, "osprey-gc": { "status": "ok", - "rss": 1507328, - "mean": 0.041364883281690155, - "stddev": 0.0008960689777100419, - "min": 0.040364875, - "max": 0.045776667 + "rss": 1572864, + "mean": 0.041443957777777776, + "stddev": 0.0006821382856133759, + "min": 0.040900042000000005, + "max": 0.044811584 }, "rust": { "status": "ok", - "rss": 1589248, - "mean": 0.04319007302739726, - "stddev": 0.004445000564518174, - "min": 0.040837666, - "max": 0.072538167 + "rss": 1638400, + "mean": 0.042053493178082206, + "stddev": 0.0014472494773428003, + "min": 0.040632416000000005, + "max": 0.048473042 }, "c": { "status": "ok", - "rss": 1458176, - "mean": 0.042016669972602734, - "stddev": 0.0015777522640113247, - "min": 0.040520709, - "max": 0.04589175 + "rss": 1507328, + "mean": 0.04129237094520548, + "stddev": 0.0006147909317099843, + "min": 0.040679541, + "max": 0.044025208 + }, + "csharp": { + "status": "ok", + "rss": 7208960, + "mean": 0.04342677627941177, + "stddev": 0.0009775658759752, + "min": 0.042308583000000004, + "max": 0.047335833 + }, + "dart": { + "status": "ok", + "rss": 14581760, + "mean": 0.05444237340740741, + "stddev": 0.0006521738676024426, + "min": 0.053719208000000004, + "max": 0.057008875 }, "ocaml": { "status": "ok", - "rss": 2310144, - "mean": 0.05232290074545456, - "stddev": 0.0009124512190083698, - "min": 0.051140791000000005, - "max": 0.056090917000000004 + "rss": 2359296, + "mean": 0.05318908773214285, + "stddev": 0.0008227943662688304, + "min": 0.052046542, + "max": 0.057201833 }, "haskell": { "status": "ok", - "rss": 11567104, - "mean": 0.06358799628888889, - "stddev": 0.0037143083203781194, - "min": 0.053930834000000004, - "max": 0.067331792 + "rss": 11616256, + "mean": 0.06039119273584905, + "stddev": 0.004005308275800649, + "min": 0.0532045, + "max": 0.071779125 }, "osprey-wasm": { "status": "ok", "rss": 0, - "mean": 0.05433713910714287, - "stddev": 0.002363197675999686, - "min": 0.052149208, - "max": 0.061190541 + "mean": 0.06070026303921569, + "stddev": 0.005120101737498492, + "min": 0.056822458000000006, + "max": 0.082334291 }, "rust-wasm": { "status": "ok", "rss": 0, - "mean": 0.05798517532075472, - "stddev": 0.002089688792777313, - "min": 0.055038208000000005, - "max": 0.065816792 + "mean": 0.06484370369565218, + "stddev": 0.003147799333135707, + "min": 0.062217458, + "max": 0.07713241600000001 } }, "pascal": { "osprey": { "status": "ok", - "rss": 1474560, - "mean": 0.027610028957627125, - "stddev": 0.002182662057530186, - "min": 0.024585584, - "max": 0.046491291000000004 + "rss": 1540096, + "mean": 0.028383599317757024, + "stddev": 0.0012476911211756457, + "min": 0.02563, + "max": 0.033189041 + }, + "osprey-arc": { + "status": "ok", + "rss": 1572864, + "mean": 0.02852050484466018, + "stddev": 0.0011574988734415113, + "min": 0.025672083000000002, + "max": 0.034986125 }, "osprey-gc": { "status": "ok", - "rss": 1523712, - "mean": 0.02661059825242719, - "stddev": 0.0012051119780563534, - "min": 0.02320325, - "max": 0.029578791 + "rss": 1572864, + "mean": 0.028366449898989888, + "stddev": 0.001206615138530928, + "min": 0.024810250000000002, + "max": 0.032677375 }, "rust": { "status": "ok", - "rss": 1589248, - "mean": 0.027010158893805314, - "stddev": 0.001449185902100662, - "min": 0.023684625, - "max": 0.032747958 + "rss": 1654784, + "mean": 0.02831931748, + "stddev": 0.0009446056222433292, + "min": 0.026276583000000003, + "max": 0.0312735 }, "c": { "status": "ok", - "rss": 1441792, - "mean": 0.026932608635514024, - "stddev": 0.0011975650599050651, - "min": 0.023513000000000003, - "max": 0.031111875 + "rss": 1507328, + "mean": 0.027828429378378382, + "stddev": 0.0010034586740013314, + "min": 0.024439250000000003, + "max": 0.029857916 + }, + "csharp": { + "status": "ok", + "rss": 7176192, + "mean": 0.03344404353932586, + "stddev": 0.0007761867025639757, + "min": 0.032033917, + "max": 0.036242667 + }, + "dart": { + "status": "ok", + "rss": 14696448, + "mean": 0.06465853171739129, + "stddev": 0.0006129124648685397, + "min": 0.06390633300000001, + "max": 0.06718866700000001 }, "ocaml": { "status": "ok", - "rss": 2326528, - "mean": 0.04352384802941176, - "stddev": 0.0007884400357257317, - "min": 0.0418735, - "max": 0.045676292 + "rss": 2375680, + "mean": 0.04426928345454544, + "stddev": 0.0006483151478026522, + "min": 0.043026666000000005, + "max": 0.045839542000000004 }, "haskell": { "status": "ok", - "rss": 11632640, - "mean": 0.05775935322916668, - "stddev": 0.005175760185362821, - "min": 0.050807041000000004, - "max": 0.06668775 + "rss": 11681792, + "mean": 0.059710348226415105, + "stddev": 0.0037423404359571803, + "min": 0.05401025, + "max": 0.070405625 }, "osprey-wasm": { "status": "ok", "rss": 0, - "mean": 0.04237343966666667, - "stddev": 0.0009740545501274057, - "min": 0.041030375, - "max": 0.046938083000000005 + "mean": 0.04340832797101449, + "stddev": 0.00044495828172633466, + "min": 0.042253625, + "max": 0.044164875000000006 }, "rust-wasm": { "status": "ok", "rss": 0, - "mean": 0.047031632661538474, - "stddev": 0.00560866892967439, - "min": 0.045041875, - "max": 0.079016958 + "mean": 0.04707895371428571, + "stddev": 0.00045552468239568674, + "min": 0.045925, + "max": 0.047957916 } }, "powmod": { "osprey": { "status": "ok", - "rss": 1458176, - "mean": 0.022561285984962397, - "stddev": 0.0012148558652572742, - "min": 0.020663833000000003, - "max": 0.028241833 + "rss": 1556480, + "mean": 0.023339936851562514, + "stddev": 0.0001719149711197937, + "min": 0.023038208, + "max": 0.023922708 + }, + "osprey-arc": { + "status": "ok", + "rss": 1572864, + "mean": 0.023306294333333342, + "stddev": 0.0003011736842792953, + "min": 0.022876125, + "max": 0.026077916000000003 }, "osprey-gc": { "status": "ok", - "rss": 1523712, - "mean": 0.02151261349275363, - "stddev": 0.0013688080561625059, - "min": 0.020672708, - "max": 0.035645417000000006 + "rss": 1556480, + "mean": 0.023359087598425192, + "stddev": 0.00015541699476402294, + "min": 0.023096333, + "max": 0.023781458000000002 }, "rust": { "status": "ok", - "rss": 1605632, - "mean": 0.021758035874125878, - "stddev": 0.0010077034388687686, - "min": 0.020636583, - "max": 0.026317791 + "rss": 1654784, + "mean": 0.02338032943750001, + "stddev": 0.0001466785614970051, + "min": 0.023097667000000002, + "max": 0.023785792 }, "c": { "status": "ok", - "rss": 1458176, - "mean": 0.021735257784172672, - "stddev": 0.0012828516860458948, - "min": 0.020794916, - "max": 0.03296525 + "rss": 1490944, + "mean": 0.023385482101562504, + "stddev": 0.00015277462744046303, + "min": 0.022929833, + "max": 0.023897125 + }, + "csharp": { + "status": "ok", + "rss": 7176192, + "mean": 0.03411458569318183, + "stddev": 0.00023785588568669367, + "min": 0.033707, + "max": 0.034820083 + }, + "dart": { + "status": "ok", + "rss": 14598144, + "mean": 0.05046806808333333, + "stddev": 0.0005251425266990937, + "min": 0.049545500000000006, + "max": 0.052023333000000005 }, "ocaml": { "status": "ok", - "rss": 2326528, - "mean": 0.0563331439056604, - "stddev": 0.001375970662833434, - "min": 0.054606375000000006, - "max": 0.060137917000000006 + "rss": 2375680, + "mean": 0.06069337416326532, + "stddev": 0.00019364579665970752, + "min": 0.060303208000000004, + "max": 0.061066042 }, "haskell": { "status": "ok", - "rss": 11632640, - "mean": 0.05534521062500001, - "stddev": 0.005423780431217941, - "min": 0.048905250000000004, - "max": 0.08130000000000001 + "rss": 11681792, + "mean": 0.05810676678846156, + "stddev": 0.0024640986015557562, + "min": 0.053602375, + "max": 0.06436975 }, "osprey-wasm": { "status": "ok", "rss": 0, - "mean": 0.028396511212962976, - "stddev": 0.0014452167803785363, - "min": 0.026489041, - "max": 0.035036625 + "mean": 0.02995943458999999, + "stddev": 0.0003814254024520109, + "min": 0.029145667, + "max": 0.031019958 }, "rust-wasm": { "status": "ok", "rss": 0, - "mean": 0.03173851111702128, - "stddev": 0.0011749305003748583, - "min": 0.030132584, - "max": 0.035529417 + "mean": 0.03385078277528091, + "stddev": 0.0003449188895104627, + "min": 0.033234875000000004, + "max": 0.034846875 } }, "primes": { "osprey": { "status": "ok", - "rss": 1458176, - "mean": 0.006332090133333329, - "stddev": 0.0006138090595851455, - "min": 0.0056905, - "max": 0.016033792 + "rss": 1540096, + "mean": 0.006511247116129029, + "stddev": 0.00020045248258412102, + "min": 0.006252416, + "max": 0.007907458000000001 + }, + "osprey-arc": { + "status": "ok", + "rss": 1572864, + "mean": 0.006490696064159291, + "stddev": 0.00016748082725496363, + "min": 0.006096708, + "max": 0.007650458000000001 }, "osprey-gc": { "status": "ok", - "rss": 1523712, - "mean": 0.0063650648516260155, - "stddev": 0.0005376167524009866, - "min": 0.005757375, - "max": 0.011145750000000001 + "rss": 1572864, + "mean": 0.006546066563941299, + "stddev": 0.00017576753488412534, + "min": 0.006177333, + "max": 0.007683000000000001 }, "rust": { "status": "ok", - "rss": 1589248, - "mean": 0.007085161930069932, - "stddev": 0.0008779259260102914, - "min": 0.006151959, - "max": 0.018334625 + "rss": 1638400, + "mean": 0.0067181771999999945, + "stddev": 0.0004878107615662352, + "min": 0.0062879170000000005, + "max": 0.015371458000000001 }, "c": { "status": "ok", - "rss": 1458176, - "mean": 0.0066936431380368085, - "stddev": 0.0007730552557776503, - "min": 0.005772125, - "max": 0.014513708 + "rss": 1490944, + "mean": 0.00645802941509434, + "stddev": 0.00021054882119670768, + "min": 0.00607825, + "max": 0.007545792000000001 + }, + "csharp": { + "status": "ok", + "rss": 7176192, + "mean": 0.00855040191988951, + "stddev": 0.00031378656333736914, + "min": 0.007910333, + "max": 0.009790041000000001 + }, + "dart": { + "status": "ok", + "rss": 14712832, + "mean": 0.044095990059701495, + "stddev": 0.0009561825632432441, + "min": 0.0412845, + "max": 0.046104458 }, "ocaml": { "status": "ok", - "rss": 2326528, - "mean": 0.00874638351752022, - "stddev": 0.001043307949207943, - "min": 0.007679, - "max": 0.012737125 + "rss": 2359296, + "mean": 0.008504648155882356, + "stddev": 0.0002711246384523538, + "min": 0.0080065, + "max": 0.009423583000000001 }, "haskell": { "status": "ok", - "rss": 11616256, - "mean": 0.01578291061827957, - "stddev": 0.0007475176687906046, - "min": 0.013527583000000001, - "max": 0.016913291 + "rss": 11665408, + "mean": 0.01731606041758242, + "stddev": 0.0015057763708149802, + "min": 0.013571291000000001, + "max": 0.020034958000000002 }, "osprey-wasm": { "status": "ok", "rss": 0, - "mean": 0.012496934558704452, - "stddev": 0.0004996862788914763, - "min": 0.011506333, - "max": 0.013878875 + "mean": 0.013085596311627904, + "stddev": 0.000455598394469122, + "min": 0.012174291, + "max": 0.016056333000000002 }, "rust-wasm": { "status": "ok", "rss": 0, - "mean": 0.016285771976047896, - "stddev": 0.0008468785096141385, - "min": 0.015256416000000002, - "max": 0.022996834 + "mean": 0.01705551379651163, + "stddev": 0.0006675405324645653, + "min": 0.016061416000000002, + "max": 0.023583666000000003 } }, "tak": { "osprey": { "status": "ok", - "rss": 1474560, - "mean": 0.03259094495698924, - "stddev": 0.0006773233072993844, - "min": 0.031226291000000003, - "max": 0.0346665 + "rss": 1556480, + "mean": 0.03294364514285714, + "stddev": 0.0016888658355312869, + "min": 0.031608292, + "max": 0.045960583000000006 + }, + "osprey-arc": { + "status": "ok", + "rss": 1556480, + "mean": 0.032513196406593406, + "stddev": 0.00043786528545716936, + "min": 0.031658625, + "max": 0.033464208 }, "osprey-gc": { "status": "ok", - "rss": 1507328, - "mean": 0.03244788978888887, - "stddev": 0.0006540079576236743, - "min": 0.031403209, - "max": 0.034193125000000005 + "rss": 1572864, + "mean": 0.03267207524731183, + "stddev": 0.0005477852556119617, + "min": 0.031497250000000004, + "max": 0.034013417000000004 }, "rust": { "status": "ok", - "rss": 1589248, - "mean": 0.03220977897752809, - "stddev": 0.0005005389305286803, - "min": 0.031158750000000002, - "max": 0.033770417000000004 + "rss": 1654784, + "mean": 0.03276332186813188, + "stddev": 0.0005522238607066318, + "min": 0.031548458, + "max": 0.033865542000000005 }, "c": { "status": "ok", - "rss": 1458176, - "mean": 0.03270676039130435, - "stddev": 0.0007636651948225776, - "min": 0.031559250000000004, - "max": 0.035830541 + "rss": 1490944, + "mean": 0.032602421325842706, + "stddev": 0.0005563217917883579, + "min": 0.031775042, + "max": 0.036556041000000004 + }, + "csharp": { + "status": "ok", + "rss": 7159808, + "mean": 0.03487428571764705, + "stddev": 0.00047329630748500794, + "min": 0.034063292, + "max": 0.036316125000000005 + }, + "dart": { + "status": "ok", + "rss": 14696448, + "mean": 0.08192690983333334, + "stddev": 0.000663580838016224, + "min": 0.081061625, + "max": 0.085175791 }, "ocaml": { "status": "ok", - "rss": 2326528, - "mean": 0.0437846199850746, - "stddev": 0.0006256212569344629, - "min": 0.042898667, - "max": 0.045502833 + "rss": 2375680, + "mean": 0.04444724376119404, + "stddev": 0.0004327111641700817, + "min": 0.043710959, + "max": 0.045681834000000004 }, "haskell": { "status": "ok", - "rss": 11632640, - "mean": 0.06324120059183673, - "stddev": 0.006755559946592524, - "min": 0.056682, - "max": 0.098651916 + "rss": 11681792, + "mean": 0.06472224314285714, + "stddev": 0.004695850124932039, + "min": 0.058247, + "max": 0.073870375 }, "osprey-wasm": { "status": "ok", "rss": 0, - "mean": 0.08539072971428571, - "stddev": 0.0011136630836610802, - "min": 0.08360408400000001, - "max": 0.08806770800000001 + "mean": 0.08664469768571431, + "stddev": 0.0021742841139857404, + "min": 0.08507675, + "max": 0.09856529200000001 }, "rust-wasm": { "status": "ok", "rss": 0, - "mean": 0.09112537234375001, - "stddev": 0.005974166438777923, - "min": 0.087356084, - "max": 0.11400995800000001 + "mean": 0.09035319442424243, + "stddev": 0.00034912398306977187, + "min": 0.089710042, + "max": 0.09132116700000001 } }, "textstats": { "osprey": { "status": "ok", - "rss": 1458176, - "mean": 0.0032227805671100358, - "stddev": 0.00030231765071380237, - "min": 0.0028787500000000002, - "max": 0.007316125000000001 + "rss": 1556480, + "mean": 0.0035267961775362344, + "stddev": 0.0001431062829734598, + "min": 0.0032630830000000004, + "max": 0.0042202080000000005 + }, + "osprey-arc": { + "status": "ok", + "rss": 1638400, + "mean": 0.005054718929159812, + "stddev": 0.00022906116145529943, + "min": 0.004680958000000001, + "max": 0.007757167000000001 }, "osprey-gc": { "status": "ok", - "rss": 1540096, - "mean": 0.0033533974814323577, - "stddev": 0.0002740030699617818, - "min": 0.0030340410000000003, - "max": 0.00532725 + "rss": 1589248, + "mean": 0.0036128678327044038, + "stddev": 0.00018134929198197506, + "min": 0.003265875, + "max": 0.004185250000000001 }, "rust": { "status": "ok", - "rss": 1671168, - "mean": 0.001972454907869482, - "stddev": 0.0001294193843523947, - "min": 0.001789917, - "max": 0.003074292 + "rss": 1703936, + "mean": 0.002009261853708789, + "stddev": 0.00014947587773994292, + "min": 0.0017809590000000001, + "max": 0.00298275 }, "c": { "status": "ok", - "rss": 1458176, - "mean": 0.0021172119455172417, - "stddev": 0.0001836906132437394, - "min": 0.0019032500000000002, - "max": 0.003787167 + "rss": 1523712, + "mean": 0.0020918755675487463, + "stddev": 9.907612812028048e-05, + "min": 0.0019201670000000002, + "max": 0.002675958 + }, + "csharp": { + "status": "ok", + "rss": 7176192, + "mean": 0.003650588901323707, + "stddev": 0.0001479658480924744, + "min": 0.003355667, + "max": 0.0042965 + }, + "dart": { + "status": "ok", + "rss": 14745600, + "mean": 0.010964553323636366, + "stddev": 0.0006355558987092062, + "min": 0.010122417, + "max": 0.018972834 }, "ocaml": { "status": "ok", - "rss": 2392064, - "mean": 0.003950491971354171, - "stddev": 0.0006458604992151191, - "min": 0.003537459, - "max": 0.014356209000000002 + "rss": 2441216, + "mean": 0.0038447673630319186, + "stddev": 0.00011169167186976136, + "min": 0.003642834, + "max": 0.004438708 }, "haskell": { "status": "ok", - "rss": 11911168, - "mean": 0.01771699186666667, - "stddev": 0.0015880792414159147, - "min": 0.013867209, - "max": 0.019913 + "rss": 11960320, + "mean": 0.017273827748538015, + "stddev": 0.0015268057753566168, + "min": 0.014026042, + "max": 0.020516125 }, "osprey-wasm": { "status": "wasm_incompatible", @@ -1378,60 +1885,84 @@ "rust-wasm": { "status": "ok", "rss": 0, - "mean": 0.012156513161538459, - "stddev": 0.0007975437728936715, - "min": 0.011331167000000001, - "max": 0.018450584000000003 + "mean": 0.012639777915254244, + "stddev": 0.0004850527546099312, + "min": 0.011702583, + "max": 0.013894917000000001 } }, "wordfreq": { "osprey": { "status": "ok", - "rss": 55394304, - "mean": 0.01926546162499999, - "stddev": 0.0005666898981438634, - "min": 0.018337334, - "max": 0.020730500000000002 + "rss": 61915136, + "mean": 0.022583303601503766, + "stddev": 0.0004984132750889346, + "min": 0.021475292, + "max": 0.0243515 + }, + "osprey-arc": { + "status": "ok", + "rss": 96370688, + "mean": 0.077969447875, + "stddev": 0.00449143555176588, + "min": 0.067607333, + "max": 0.087297208 }, "osprey-gc": { "status": "ok", - "rss": 4636672, - "mean": 0.05327347734545453, - "stddev": 0.0016463313516705495, - "min": 0.050478917000000005, - "max": 0.058515500000000005 + "rss": 4931584, + "mean": 0.07089195651111112, + "stddev": 0.002600194228861416, + "min": 0.065755167, + "max": 0.076065833 }, "rust": { "status": "ok", - "rss": 1654784, - "mean": 0.004400151734992679, - "stddev": 0.0003069320345003637, - "min": 0.004050625, - "max": 0.005846709 + "rss": 1703936, + "mean": 0.004471526839771103, + "stddev": 0.00015559812776018783, + "min": 0.004139833, + "max": 0.005037584 }, "c": { "status": "ok", - "rss": 1458176, - "mean": 0.0014600501617277766, - "stddev": 0.00010148161712535852, - "min": 0.001325917, - "max": 0.0020288330000000003 + "rss": 1490944, + "mean": 0.001462064488995211, + "stddev": 0.00012531673597277954, + "min": 0.001302917, + "max": 0.003885916 + }, + "csharp": { + "status": "ok", + "rss": 7159808, + "mean": 0.0032876054257767557, + "stddev": 0.00015414289994849083, + "min": 0.002931167, + "max": 0.004004708 + }, + "dart": { + "status": "ok", + "rss": 14860288, + "mean": 0.010627116810218983, + "stddev": 0.0005085530549204008, + "min": 0.009855125000000001, + "max": 0.013516750000000001 }, "ocaml": { "status": "ok", - "rss": 2408448, - "mean": 0.0024033592520193844, - "stddev": 0.0006016260201339824, - "min": 0.002142625, - "max": 0.021152833000000003 + "rss": 2457600, + "mean": 0.002349943567747295, + "stddev": 0.00010458771395379523, + "min": 0.002195125, + "max": 0.003443625 }, "haskell": { "status": "ok", - "rss": 11862016, - "mean": 0.018430894917159744, - "stddev": 0.0019730041371095945, - "min": 0.014325209, - "max": 0.025187083000000002 + "rss": 11911168, + "mean": 0.017322703707317078, + "stddev": 0.0015885038415285298, + "min": 0.013586917, + "max": 0.020547417000000002 }, "osprey-wasm": { "status": "wasm_incompatible", @@ -1440,10 +1971,10 @@ "rust-wasm": { "status": "ok", "rss": 0, - "mean": 0.015253087661202187, - "stddev": 0.0005984250089546093, - "min": 0.014172750000000001, - "max": 0.017286291000000002 + "mean": 0.015603332748691098, + "stddev": 0.0005297905922589253, + "min": 0.014396458, + "max": 0.016862416 } } } diff --git a/benchmarks/run.sh b/benchmarks/run.sh index 5b580014..9ab36fc0 100644 --- a/benchmarks/run.sh +++ b/benchmarks/run.sh @@ -36,12 +36,13 @@ MEMRUNS=${BENCH_MEMRUNS:-3} # Language order is the report's column order. "Speed of light" baselines (C, # Rust) first after Osprey so the gap to Osprey reads left-to-right. `osprey-gc` -# is the SAME .osp compiled with the tracing GC backend (--memory=gc), so the -# allocation cases (binarytrees) show reclamation next to the default backend. -LANGS=(osprey osprey-gc rust c ocaml haskell osprey-wasm rust-wasm c-wasm) +# and `osprey-arc` are the SAME .osp compiled with the tracing-GC (--memory=gc) +# and Perceus ARC (--memory=arc) backends, so the allocation cases +# (binarytrees) show both reclamation strategies next to the default backend. +LANGS=(osprey osprey-arc osprey-gc rust c csharp dart ocaml haskell osprey-wasm rust-wasm c-wasm) typeset -A EXT -EXT=(osprey osp osprey-gc osp rust rs c c ocaml ml haskell hs - osprey-wasm osp rust-wasm rs c-wasm c) +EXT=(osprey osp osprey-arc osp osprey-gc osp rust rs c c csharp cs dart dart + ocaml ml haskell hs osprey-wasm osp rust-wasm rs c-wasm c) have() { command -v "$1" >/dev/null 2>&1 } @@ -67,9 +68,11 @@ wasm_wrap() { printf '#!/bin/sh\nexec wasmtime run "%s.wasm" "$@"\n' "$1" > "$1" # probed once into CWASM_OK because stock clang+wasi-libc often lacks it.) toolchain_ok() { case "$1" in - osprey|osprey-gc) [[ -x "$OSP" ]] ;; + osprey|osprey-gc|osprey-arc) [[ -x "$OSP" ]] ;; rust) have rustc ;; c) have cc ;; + csharp) have dotnet ;; + dart) have dart ;; ocaml) have ocamlopt ;; haskell) have ghc ;; osprey-wasm) [[ -x "$OSP" ]] && have wasmtime && [[ -f "$ROOT/compiler/lib/libosprey_runtime_wasm.a" ]] ;; @@ -83,9 +86,19 @@ build() { local lang=$1 dir=$2 name=$3 out=$4 case "$lang" in osprey) ( cd "$dir" && "$OSP" "$name.osp" --compile >/dev/null 2>&1 ) && mv -f "$dir/$name" "$out" ;; - osprey-gc) ( cd "$dir" && "$OSP" "$name.osp" --memory=gc --compile >/dev/null 2>&1 ) && mv -f "$dir/$name" "$out" ;; + osprey-gc) ( cd "$dir" && "$OSP" "$name.osp" --memory=gc --compile >/dev/null 2>&1 ) && mv -f "$dir/$name" "$out" ;; + osprey-arc) ( cd "$dir" && "$OSP" "$name.osp" --memory=arc --compile >/dev/null 2>&1 ) && mv -f "$dir/$name" "$out" ;; rust) rustc -C opt-level=3 -C overflow-checks=off -o "$out" "$dir/$name.rs" 2>/dev/null ;; c) cc -O2 -o "$out" "$dir/$name.c" 2>/dev/null ;; + # C# via NativeAOT (dotnet publish): a real native binary, the fair + # comparison against the other AOT columns. One throwaway SDK project per + # case in $TMP; the published binary is moved to $out. + csharp) csd="$TMP/cs_$name" && rm -rf "$csd" && mkdir -p "$csd" && \ + cp "$dir/$name.cs" "$csd/Program.cs" && \ + printf '%s\n' 'Exenet10.0trueSpeedtruedisablebench' > "$csd/bench.csproj" && \ + ( cd "$csd" && dotnet publish -c Release -o out --nologo -v q >/dev/null 2>&1 ) && \ + mv -f "$csd/out/bench" "$out" ;; + dart) dart compile exe "$dir/$name.dart" -o "$out" >/dev/null 2>&1 ;; ocaml) cp "$dir/$name.ml" "$TMP/$name.ml" && \ ( cd "$TMP" && ocamlopt -O3 -unsafe -o "$out" "$name.ml" >/dev/null 2>&1 ) ;; # compile a copy: ocamlopt litters .cmi/.cmx/.o beside the source haskell) ghc -O2 -outputdir "$TMP/hs_$name" -o "$out" "$dir/$name.hs" >/dev/null 2>&1 ;; diff --git a/compiler/runtime/coverage_runtime.c b/compiler/runtime/coverage_runtime.c new file mode 100644 index 00000000..0d7d8f50 --- /dev/null +++ b/compiler/runtime/coverage_runtime.c @@ -0,0 +1,88 @@ +// Osprey line-coverage collection. Implements [TESTING-COVERAGE-RUNTIME] +// (docs/specs/0027-TestingFramework.md). Called only from compiler-emitted IR +// (crates/osprey-codegen/src/coverage.rs); dependency-free C11 so the unit +// compiles unchanged into the native, GC, and wasm runtime archives. +// +// Codegen emits one i64 hit counter global per coverable source line, bumps it +// inline where control flow reaches (no call per hit), and registers each +// counter once at program start. This unit only records the table and dumps it +// at exit. Inert unless OSPREY_COVERAGE= names the dump file +// [TESTING-COVERAGE-ENV]. State is plain globals: registration happens once on +// the main fiber before any user code runs. + +#include +#include +#include +#include + +typedef struct OspCovEntry { + int64_t line; /* flattened 1-based source line */ + const int64_t *counter; /* the counter global instrumented code bumps */ +} OspCovEntry; + +static OspCovEntry *cov_entries = NULL; +static int64_t cov_count = 0; +static int64_t cov_capacity = 0; +static const char *cov_path = NULL; /* dump destination from the environment */ + +/* Write the dump: header, then one ` ` row per registered line + (including zero-hit rows, so the reader needs no other line universe) + [TESTING-COVERAGE-DUMP]. Registration order is codegen's line order. */ +static void osp_cov_flush(void) { + if (cov_path == NULL || cov_entries == NULL) { + return; + } + FILE *out = fopen(cov_path, "w"); + if (out == NULL) { + fprintf(stderr, "osprey coverage: cannot write %s\n", cov_path); + return; + } + fprintf(out, "# osprey-coverage v1\n"); + for (int64_t i = 0; i < cov_count; i += 1) { + fprintf(out, "%" PRId64 " %" PRId64 "\n", cov_entries[i].line, + *cov_entries[i].counter); + } + if (fclose(out) != 0) { + fprintf(stderr, "osprey coverage: cannot finish %s\n", cov_path); + } +} + +/* Grow the entry table; false (with a diagnostic) when memory runs out — + coverage then under-reports rather than aborting the program. */ +static int cov_reserve(void) { + if (cov_count < cov_capacity) { + return 1; + } + enum { COV_INITIAL_CAPACITY = 256 }; + int64_t next = cov_capacity == 0 ? COV_INITIAL_CAPACITY : cov_capacity * 2; + OspCovEntry *grown = + realloc(cov_entries, (size_t)next * sizeof(OspCovEntry)); + if (grown == NULL) { + fprintf(stderr, "osprey coverage: out of memory\n"); + return 0; + } + cov_entries = grown; + cov_capacity = next; + return 1; +} + +/* Register one coverable line and its counter global; arms the exit-time dump + on the first call when OSPREY_COVERAGE is set. Emitted by codegen at the top + of main, once per line, before any user code runs. */ +void osp_cov_register_line(int64_t line, const int64_t *counter) { + if (cov_path == NULL) { + const char *path = getenv("OSPREY_COVERAGE"); + if (path == NULL || path[0] == '\0') { + return; + } + if (atexit(osp_cov_flush) != 0) { + fprintf(stderr, "osprey coverage: cannot arm exit dump\n"); + return; + } + cov_path = path; + } + if (cov_reserve() != 0) { + cov_entries[cov_count] = (OspCovEntry){line, counter}; + cov_count += 1; + } +} diff --git a/compiler/runtime/coverage_runtime_tests.c b/compiler/runtime/coverage_runtime_tests.c new file mode 100644 index 00000000..a74dd5e9 --- /dev/null +++ b/compiler/runtime/coverage_runtime_tests.c @@ -0,0 +1,99 @@ +// Assertion-driven tests for the coverage collector [TESTING-COVERAGE-RUNTIME] +// (docs/specs/0027-TestingFramework.md). A failed assert aborts the binary. +// POSIX-only test harness (fork/waitpid); the unit under test is portable C11. +#include +#include +#include +#include +#include +#include +#include +#include + +void osp_cov_register_line(int64_t line, const int64_t *counter); + +enum { COV_TEST_LINES = 3, COV_PATH_MAX = 256 }; + +static const int64_t test_lines[COV_TEST_LINES] = {3, 7, 12}; +static int64_t test_counters[COV_TEST_LINES] = {0, 0, 0}; + +static void register_all(void) { + for (int i = 0; i < COV_TEST_LINES; i += 1) { + osp_cov_register_line(test_lines[i], &test_counters[i]); + } +} + +// The child registers with OSPREY_COVERAGE set, bumps counters the way +// instrumented IR does (plain in-place adds), and exits normally so the +// atexit-armed dump runs [TESTING-COVERAGE-ENV]. +static void run_child(const char *path) { + assert(setenv("OSPREY_COVERAGE", path, 1) == 0); + register_all(); + test_counters[0] = 2; // "execute" lines 3 and 12, leave 7 uncovered + test_counters[2] = 1; + exit(0); +} + +// The dump lists every registered line — zero-hit rows included, so a reader +// needs no separate line universe [TESTING-COVERAGE-DUMP]. +static void verify_dump(const char *path) { + const int64_t expected_hits[COV_TEST_LINES] = {2, 0, 1}; + FILE *in = fopen(path, "r"); + assert(in != NULL); + char header[COV_PATH_MAX]; + assert(fgets(header, sizeof(header), in) != NULL); + assert(strcmp(header, "# osprey-coverage v1\n") == 0); + int64_t line = 0; + int64_t hits = 0; + int64_t seen = 0; + while (fscanf(in, "%" SCNd64 " %" SCNd64, &line, &hits) == 2) { + assert(seen < COV_TEST_LINES); + assert(line == test_lines[seen]); + assert(hits == expected_hits[seen]); + seen += 1; + } + assert(seen == COV_TEST_LINES); + assert(fclose(in) == 0); + assert(remove(path) == 0); +} + +// Without OSPREY_COVERAGE, registration stays inert: no dump file appears. +static void test_inert_without_env(const char *path) { + assert(unsetenv("OSPREY_COVERAGE") == 0); + pid_t pid = fork(); + assert(pid >= 0); + if (pid == 0) { + register_all(); + exit(0); + } + int status = 0; + assert(waitpid(pid, &status, 0) == pid); + assert(WIFEXITED(status) && WEXITSTATUS(status) == 0); + FILE *in = fopen(path, "r"); + assert(in == NULL); +} + +static void test_dump_written_on_exit(const char *path) { + pid_t pid = fork(); + assert(pid >= 0); + if (pid == 0) { + run_child(path); + } + int status = 0; + assert(waitpid(pid, &status, 0) == pid); + assert(WIFEXITED(status) && WEXITSTATUS(status) == 0); + verify_dump(path); +} + +int main(void) { + char path[COV_PATH_MAX]; + const char *dir = getenv("TMPDIR"); + int n = snprintf(path, sizeof(path), "%s/osprey-cov-test-%ld.txt", + (dir == NULL || dir[0] == '\0') ? "/tmp" : dir, + (long)getpid()); + assert(n > 0 && (size_t)n < sizeof(path)); + test_inert_without_env(path); + test_dump_written_on_exit(path); + printf("coverage_runtime_tests: OK\n"); + return 0; +} diff --git a/compiler/runtime/fiber_runtime.c b/compiler/runtime/fiber_runtime.c index 0a8016fd..e573b760 100644 --- a/compiler/runtime/fiber_runtime.c +++ b/compiler/runtime/fiber_runtime.c @@ -8,6 +8,7 @@ #include #include +#include "memory_hooks.h" #include "profiler_runtime.h" // Forward declarations for effect handler snapshot/restore @@ -37,7 +38,13 @@ typedef struct Fiber { // Run a fiber's entry point through whichever ABI it was spawned with. static int64_t run_fiber_fn(Fiber *fiber) { if (fiber->env_function != NULL) { - return fiber->env_function(fiber->env); + int64_t result = fiber->env_function(fiber->env); + // The spawn transferred the capture cell (+1) to the runtime; the thunk + // has fully consumed it once it returns. No-op outside the ARC backend + // [GC-ARC-PERCEUS], plan 0011 M5. + osp_release(fiber->env); + fiber->env = NULL; + return result; } return fiber->function(); } diff --git a/compiler/runtime/list_runtime.c b/compiler/runtime/list_runtime.c index f2523a8e..aecac5ae 100644 --- a/compiler/runtime/list_runtime.c +++ b/compiler/runtime/list_runtime.c @@ -1,4 +1,5 @@ #include "collection_runtime.h" +#include "memory_hooks.h" #include #include @@ -74,6 +75,9 @@ static OspreyList *singleton_empty = NULL; OspreyList *osprey_list_empty(void) { if (singleton_empty == NULL) { singleton_empty = alloc_list(0, 0, 0, NULL, NULL); + /* Returned from many sites and owned by many callers at once: under ARC + * it must never be freed by any of them [GC-ARC-PERCEUS], plan 0011 M4. */ + osp_mem_immortal(singleton_empty); } return singleton_empty; } @@ -234,13 +238,17 @@ OspreyList *osprey_list_prepend(OspreyList *l, int64_t v) { } OspreyList *osprey_list_concat(OspreyList *a, OspreyList *b) { + /* Alias returns carry a fresh +1 (retain-on-return): the caller owns every + * returned handle, aliased or not [GC-ARC-PERCEUS], plan 0011 M4. */ if (a == NULL || a->length == 0) { if (b == NULL) { return osprey_list_empty(); } + osp_retain(b); return (OspreyList *)b; } if (b == NULL || b->length == 0) { + osp_retain(a); return (OspreyList *)a; } OspreyListBuilder *bld = osprey_list_builder_new(); @@ -260,6 +268,7 @@ OspreyList *osprey_list_concat(OspreyList *a, OspreyList *b) { OspreyList *osprey_list_drop(OspreyList *l, int64_t n) { if (l == NULL || n <= 0) { + osp_retain(l); /* alias return: +1 to the caller (see concat) */ return (OspreyList *)l; } if (n >= l->length) { diff --git a/compiler/runtime/map_runtime.c b/compiler/runtime/map_runtime.c index ea57b65e..16cd8af3 100644 --- a/compiler/runtime/map_runtime.c +++ b/compiler/runtime/map_runtime.c @@ -1,4 +1,5 @@ #include "map_runtime_internal.h" +#include "memory_hooks.h" #include #include @@ -55,7 +56,10 @@ OspreyMap *osprey_map_set(OspreyMap *m, int64_t key, int64_t value) { } OspreyMap *osprey_map_remove(OspreyMap *m, int64_t key) { + /* Alias returns carry a fresh +1 (retain-on-return) so every returned + * handle is caller-owned [GC-ARC-PERCEUS], plan 0011 M4. */ if (m == NULL || m->root == NULL) { + osp_retain(m); return m; } uint32_t h = osprey_map_hash_key(m->key_type, key); @@ -63,6 +67,7 @@ OspreyMap *osprey_map_remove(OspreyMap *m, int64_t key) { OspreyMapNode *new_root = osprey_map_node_remove(m->root, 0, h, key, m->key_type, &shrunk); if (!shrunk) { + osp_retain(m); return m; } OspreyMap *out = (OspreyMap *)calloc(1, sizeof(OspreyMap)); @@ -130,9 +135,11 @@ int osprey_map_iter_next(OspreyMapIter *it, int64_t *out_key, OspreyMap *osprey_map_merge(OspreyMap *a, OspreyMap *b) { if (a == NULL || a->length == 0) { + osp_retain(b); /* alias return: +1 to the caller (see remove) */ return b; } if (b == NULL || b->length == 0) { + osp_retain(a); return a; } OspreyMap *out = a; @@ -140,7 +147,13 @@ OspreyMap *osprey_map_merge(OspreyMap *a, OspreyMap *b) { int64_t k; int64_t v; while (osprey_map_iter_next(it, &k, &v)) { - out = osprey_map_set(out, k, v); + OspreyMap *next = osprey_map_set(out, k, v); + /* Intermediate headers are unaliased transients: drop each precisely + * (no-op under default/gc) [GC-ARC-PERCEUS], plan 0011 M4. */ + if (out != a) { + osp_release(out); + } + out = next; } free(it); return out; diff --git a/compiler/runtime/memory_arc.c b/compiler/runtime/memory_arc.c new file mode 100644 index 00000000..989abc12 --- /dev/null +++ b/compiler/runtime/memory_arc.c @@ -0,0 +1,411 @@ +// Perceus ARC backend for Osprey — the swappable `@osp_alloc` implementation +// selected at link time by `osprey --memory=arc`. Implements [MEM-BACKENDS] +// (docs/specs/0018) and [GC-ARC-PERCEUS] (docs/plans/0011, phase 2). +// +// Algorithm: precise reference counting after Reinking, Xie, de Moura & Leijen, +// "Perceus: Garbage Free Reference Counting with Reuse", MSR-TR-2020-42 +// (https://www.microsoft.com/en-us/research/wp-content/uploads/2020/11/perceus-tr-v1.pdf). +// Complete without a cycle collector because the Osprey value heap is acyclic +// [MEM-ACYCLIC] (Bacon/Cheng/Rajan duality). Each allocation carries a 16-byte +// header (TR §2.5's Koka header, widened to hold the per-site layout word): +// +// { int64_t meta; int32_t rc; uint32_t size; } at body-16 +// +// `meta` is the layout word codegen passes to osp_alloc_tagged: low 8 bits a +// kind, upper 56 a word bitmask (bit i => the 8-byte word at body offset 8*i +// is a managed pointer). `rc` is SIGNED: rc >= 1 counts owners; rc < 0 marks +// immortal/persistent objects that dup/drop skip (the cross-fiber atomic path +// of plan 0011 M5 also lives below zero). +// +// Provenance (plan 0011 phase 2, Amendment 2): pointer slots at runtime also +// carry rodata literals, static C strings, foreign malloc/strdup memory, +// borrowed FFI pointers, and NULL. osp_retain/osp_release therefore probe an +// open-addressing registry of live ARC allocations FIRST; a probe miss means +// "not ours" and is a safe no-op. No IR special-casing, no FFI annotations — +// non-ARC pointers are unmanaged by construction. +// +// Concurrency scope (v1): every operation holds one mutex, exactly the +// memory_gc.c discipline — sound across fiber pthreads, slow but conforming. +// The non-atomic fast path keyed on [MEM-FIBER-ISOLATION] is milestone M5. + +#include +#include +#include +#include +#include + +// --- header ------------------------------------------------------------------ + +typedef struct { + int64_t meta; // low 8 bits kind, upper 56 word-pointer bitmask + int32_t rc; // >=1 live owners; <0 immortal/persistent (skip dup/drop) + uint32_t size; // body bytes (leak stats + realloc) +} OspArcHdr; + +#define OSP_ARC_HDR ((size_t)sizeof(OspArcHdr)) + +// Layout-word kinds (low 8 bits of meta) — must match osprey-codegen's +// emission (plan 0011 phase 2, Amendment 1). +enum { + OSP_ARC_RAW = 0, // opaque bytes: no children + OSP_ARC_MASK = 1, // children at the masked word offsets + OSP_ARC_LIST_HDR_PTR = 2, // { i64 len, i8* data }: release data[0..len), then data + OSP_ARC_LIST_HDR_SCALAR = 3, // { i64 len, i8* data }: release data only +}; + +#define OSP_ARC_KIND(meta) ((int)((meta) & 0xFF)) +#define OSP_ARC_MASK_BITS(meta) (((uint64_t)(meta)) >> 8) + +static OspArcHdr *arc_hdr(void *body) { + return (OspArcHdr *)(void *)((char *)body - OSP_ARC_HDR); +} + +// --- live-allocation registry (open addressing, tombstone deletion) ----------- + +#define OSP_ARC_INIT_CAP ((size_t)1u << 14) +#define OSP_ARC_TOMB ((uintptr_t)1) + +static pthread_mutex_t g_lock = PTHREAD_MUTEX_INITIALIZER; +static uintptr_t *g_tab = NULL; // body addresses; 0 = empty, 1 = tombstone +static size_t g_cap = 0; +static size_t g_used = 0; // live + tombstones (grow trigger) +static size_t g_live = 0; // live objects (leak stats) +static size_t g_live_bytes = 0; +static int g_debug_armed = 0; + +static size_t arc_hash(uintptr_t body, size_t cap) { + uint64_t h = (uint64_t)(body >> 3) * 0x9E3779B97F4A7C15ull; + return (size_t)(h >> 32) & (cap - 1); +} + +// The slot holding `body`, or NULL. Callers hold g_lock. +static uintptr_t *arc_find(uintptr_t body) { + if (g_cap == 0 || body <= OSP_ARC_TOMB) { + return NULL; + } + size_t i = arc_hash(body, g_cap); + while (g_tab[i] != 0) { + if (g_tab[i] == body) { + return &g_tab[i]; + } + i = (i + 1) & (g_cap - 1); + } + return NULL; +} + +static void arc_place(uintptr_t *tab, size_t cap, uintptr_t body) { + size_t i = arc_hash(body, cap); + while (tab[i] > OSP_ARC_TOMB) { + i = (i + 1) & (cap - 1); + } + tab[i] = body; +} + +// Rebuild at double capacity (also compacts tombstones away). +static int arc_grow(void) { + size_t cap = g_cap ? g_cap * 2 : OSP_ARC_INIT_CAP; + uintptr_t *tab = (uintptr_t *)calloc(cap, sizeof(uintptr_t)); + if (!tab) { + return 0; + } + for (size_t i = 0; i < g_cap; i++) { + if (g_tab[i] > OSP_ARC_TOMB) { + arc_place(tab, cap, g_tab[i]); + } + } + free(g_tab); + g_tab = tab; + g_cap = cap; + g_used = g_live; + return 1; +} + +static void arc_insert(uintptr_t body) { + if (g_cap == 0 || (g_used + 1) * 4 >= g_cap * 3) { + if (!arc_grow()) { + return; // out of table memory: object is untracked (leaks, never freed) + } + } + arc_place(g_tab, g_cap, body); + g_used++; + g_live++; +} + +static void arc_remove(uintptr_t *slot) { + *slot = OSP_ARC_TOMB; + g_live--; +} + +// --- leak accounting (OSPREY_ARC_DEBUG=1) -------------------------------------- + +static void arc_report_leaks(void) { + pthread_mutex_lock(&g_lock); + // stderr only: stdout must stay byte-identical under [MEM-BACKENDS]. + fprintf(stderr, "[osp-arc] exit: %zu live objects, %zu KiB\n", g_live, + g_live_bytes / 1024); + pthread_mutex_unlock(&g_lock); +} + +static void arc_arm_debug(void) { + if (!g_debug_armed) { + g_debug_armed = 1; + if (getenv("OSPREY_ARC_DEBUG")) { + (void)atexit(arc_report_leaks); + } + } +} + +// --- allocation ---------------------------------------------------------------- + +// Header'd, registered allocation. Callers hold g_lock. +static void *arc_alloc_locked(size_t size, int64_t meta) { + arc_arm_debug(); + OspArcHdr *h = (OspArcHdr *)malloc(OSP_ARC_HDR + (size ? size : 1)); + if (!h) { + return NULL; + } + h->meta = meta; + h->rc = 1; + h->size = (uint32_t)size; + void *body = (char *)h + OSP_ARC_HDR; + arc_insert((uintptr_t)body); + g_live_bytes += size; + return body; +} + +static void arc_free_locked(uintptr_t *slot) { + void *body = (void *)*slot; + OspArcHdr *h = arc_hdr(body); + g_live_bytes -= h->size; + arc_remove(slot); + free(h); +} + +// --- release: worklist drop over the kind/mask layout --------------------------- + +// Bounded push-down list of bodies whose rc reached zero (no C recursion, no +// re-entrant locking). On OOM the remaining children simply leak — sound. +static uintptr_t *g_wl = NULL; +static size_t g_wl_cap = 0; +static size_t g_wl_top = 0; + +static void arc_wl_push(uintptr_t body) { + if (g_wl_top == g_wl_cap) { + size_t cap = g_wl_cap ? g_wl_cap * 2 : 256; + uintptr_t *wl = (uintptr_t *)realloc(g_wl, cap * sizeof(uintptr_t)); + if (!wl) { + return; // drop the child on the floor: it leaks, never corrupts + } + g_wl = wl; + g_wl_cap = cap; + } + g_wl[g_wl_top++] = body; +} + +// Decrement a candidate child; queue it for freeing when it hits zero. +// A probe miss (foreign/rodata/NULL) or an immortal (rc<0) is a no-op. +static void arc_drop_child(void *child) { + uintptr_t *slot = arc_find((uintptr_t)child); + if (!slot) { + return; + } + OspArcHdr *h = arc_hdr((void *)*slot); + if (h->rc < 0) { + return; + } + if (--h->rc == 0) { + arc_wl_push(*slot); + } +} + +static void arc_drop_masked(char *body, uint32_t size, uint64_t mask) { + for (unsigned i = 0; mask != 0 && (size_t)(i + 1) * 8 <= size; i++, mask >>= 1) { + if (mask & 1) { + void *child; + memcpy(&child, body + (size_t)i * 8, sizeof(child)); + arc_drop_child(child); + } + } +} + +// { i64 len, i8* data }: release elements (PTR kind only), then the array. +static void arc_drop_list_hdr(char *body, uint32_t size, int elems_are_ptrs) { + if (size < 16) { + return; + } + int64_t len; + char *data; + memcpy(&len, body, sizeof(len)); + memcpy(&data, body + 8, sizeof(data)); + if (data && elems_are_ptrs) { + for (int64_t j = 0; j < len; j++) { + void *elem; + memcpy(&elem, data + (size_t)j * 8, sizeof(elem)); + arc_drop_child(elem); + } + } + arc_drop_child(data); +} + +// Free `slot`'s object and everything transitively released by it. Holds g_lock. +static void arc_release_zero_locked(uintptr_t *slot) { + g_wl_top = 0; + arc_wl_push(*slot); + while (g_wl_top > 0) { + uintptr_t body = g_wl[--g_wl_top]; + uintptr_t *s = arc_find(body); + if (!s) { + continue; + } + OspArcHdr *h = arc_hdr((void *)body); + int kind = OSP_ARC_KIND(h->meta); + if (kind == OSP_ARC_MASK) { + arc_drop_masked((char *)body, h->size, OSP_ARC_MASK_BITS(h->meta)); + } else if (kind == OSP_ARC_LIST_HDR_PTR || kind == OSP_ARC_LIST_HDR_SCALAR) { + arc_drop_list_hdr((char *)body, h->size, kind == OSP_ARC_LIST_HDR_PTR); + } + arc_free_locked(s); + } +} + +// --- public ABI ------------------------------------------------------------------ +// Implements the [MEM-BACKENDS] C interface (docs/specs/0018 §Custom Managers). + +void *osp_alloc_tagged(int64_t size, int64_t meta) { + pthread_mutex_lock(&g_lock); + void *p = arc_alloc_locked(size > 0 ? (size_t)size : 0, meta); + pthread_mutex_unlock(&g_lock); + return p; +} + +void *osp_alloc(int64_t size) { return osp_alloc_tagged(size, OSP_ARC_RAW); } + +// dup — probe first: only live ARC objects with a non-negative rc count. +void osp_retain(void *o) { + if (!o) { + return; + } + pthread_mutex_lock(&g_lock); + uintptr_t *slot = arc_find((uintptr_t)o); + if (slot) { + OspArcHdr *h = arc_hdr((void *)*slot); + if (h->rc >= 0) { + h->rc++; + } + } + pthread_mutex_unlock(&g_lock); +} + +// drop — probe first; on rc==0 run the kind/mask worklist drop. +void osp_release(void *o) { + if (!o) { + return; + } + pthread_mutex_lock(&g_lock); + uintptr_t *slot = arc_find((uintptr_t)o); + if (slot) { + OspArcHdr *h = arc_hdr((void *)*slot); + if (h->rc > 0 && --h->rc == 0) { + arc_release_zero_locked(slot); + } + } + pthread_mutex_unlock(&g_lock); +} + +// Codegen-proved-unique drop (memory_hooks.h): the caller proved rc == 1, so +// this is exactly osp_release — the distinct symbol only exists to carry +// LLVM's free-pair attributes so -O2 can delete non-escaping alloc+release +// pairs before they ever reach the runtime. +void osp_release_unique(void *o) { osp_release(o); } + +// Full-collection hook: nothing to do — acyclic naive RC is already complete +// (Bacon/Cheng/Rajan; TR §2.2). +void osp_collect(void) {} + +// Immortalize a shared C-runtime singleton (memory_hooks.h): rc < 0 makes +// every later dup/drop skip it, so alias returns of e.g. the empty-list +// singleton can never free it. Foreign pointers probe-miss (no-op). +void osp_mem_immortal(void *p) { + if (!p) { + return; + } + pthread_mutex_lock(&g_lock); + uintptr_t *slot = arc_find((uintptr_t)p); + if (slot) { + arc_hdr((void *)*slot)->rc = -1; + } + pthread_mutex_unlock(&g_lock); +} + +// --- allocation shim for the C runtime units (osp_arc_shim.h) --------------------- +// Value-producing units (list/map/string/json) are recompiled with their libc +// allocation calls redirected here, so runtime-minted strings and container +// nodes carry headers and live in the registry (kind RAW until milestone M4 +// teaches the container ops their own dup/drop). + +void *osp_arc_malloc(size_t size) { + pthread_mutex_lock(&g_lock); + void *p = arc_alloc_locked(size, OSP_ARC_RAW); + pthread_mutex_unlock(&g_lock); + return p; +} + +void *osp_arc_calloc(size_t n, size_t size) { + size_t total = n * size; + if (n != 0 && total / n != size) { + return NULL; // overflow + } + void *p = osp_arc_malloc(total); + if (p) { + memset(p, 0, total); + } + return p; +} + +// Manual free from C runtime code is authoritative: it drops the object +// regardless of rc (the C units own their transients). Foreign pointers fall +// through to libc free. +void osp_arc_free(void *p) { + if (!p) { + return; + } + pthread_mutex_lock(&g_lock); + uintptr_t *slot = arc_find((uintptr_t)p); + if (slot) { + arc_free_locked(slot); + pthread_mutex_unlock(&g_lock); + return; + } + pthread_mutex_unlock(&g_lock); + free(p); +} + +void *osp_arc_realloc(void *old, size_t size) { + if (!old) { + return osp_arc_malloc(size); + } + pthread_mutex_lock(&g_lock); + uintptr_t *slot = arc_find((uintptr_t)old); + size_t oldsize = slot ? arc_hdr((void *)*slot)->size : 0; + pthread_mutex_unlock(&g_lock); + if (!slot) { + return realloc(old, size); // foreign block: libc owns it + } + void *p = osp_arc_malloc(size); + if (p && oldsize) { + memcpy(p, old, oldsize < size ? oldsize : size); + } + if (p) { + osp_arc_free(old); + } + return p; +} + +char *osp_arc_strdup(const char *s) { + size_t len = strlen(s) + 1; + char *p = (char *)osp_arc_malloc(len); + if (p) { + memcpy(p, s, len); + } + return p; +} diff --git a/compiler/runtime/memory_gc.c b/compiler/runtime/memory_gc.c index 1f4ff124..c84bd5f8 100644 --- a/compiler/runtime/memory_gc.c +++ b/compiler/runtime/memory_gc.c @@ -321,10 +321,23 @@ void *osp_alloc(int64_t size) { return p; } +// Layout-carrying allocation: the meta word (kind + pointer mask) is only +// meaningful to the ARC backend — the conservative collector scans words, so +// it needs no layout and treats this as a plain managed allocation. +void *osp_alloc_tagged(int64_t size, int64_t meta) { + (void)meta; + return osp_alloc(size); +} + // Reference-count hooks are no-ops under tracing (Bacon/Cheng/Rajan duality): // the collector reclaims, so dup/drop carry no work. void osp_retain(void *o) { (void)o; } void osp_release(void *o) { (void)o; } +// Codegen-proved-unique drop (memory_hooks.h) — a no-op like osp_release; the +// separate symbol carries LLVM free-pair attributes in the emitted IR. +void osp_release_unique(void *o) { (void)o; } +// Singleton-immortality hook (memory_hooks.h) — meaningful only under ARC. +void osp_mem_immortal(void *p) { (void)p; } void osp_collect(void) { pthread_mutex_lock(&g_lock); diff --git a/compiler/runtime/memory_hooks.h b/compiler/runtime/memory_hooks.h new file mode 100644 index 00000000..b4ad32d2 --- /dev/null +++ b/compiler/runtime/memory_hooks.h @@ -0,0 +1,30 @@ +// Backend-neutral memory-manager hooks C runtime units may call directly. +// Every memory backend (memory_runtime.c, memory_gc.c, memory_arc.c) defines +// all of them, so a unit compiled once links against whichever backend the +// program selected — the default/gc definitions are no-ops. Implements the +// C-runtime half of [GC-ARC-PERCEUS] (docs/plans/0011 phase 2, M4/M5) under +// the [MEM-BACKENDS] ABI (docs/specs/0018). +#ifndef OSPREY_MEMORY_HOOKS_H +#define OSPREY_MEMORY_HOOKS_H + +// dup / drop (ARC: registry-probed reference counting; others: no-ops). +void osp_retain(void *o); +void osp_release(void *o); + +// Release a reference codegen PROVES is the only one (a fresh, never-bound, +// never-stored value consumed in the expression that created it). Runtime +// behaviour is identical to osp_release; the separate symbol exists so +// codegen can declare it with LLVM's allocator free-pair attributes +// (allockind("free") / allocptr) and -O2 can delete a provably-dead +// alloc+release pair outright — restoring the [MEM-OWNERSHIP] static-free +// ideal for per-operation Result blocks. Those attributes let LLVM assume +// the pointee is dead after the call, which is only true when rc == 1 — +// hence the uniqueness proof requirement on every emission site. +void osp_release_unique(void *o); + +// Mark a shared C-runtime singleton immortal (ARC: rc < 0 — dup/drop skip it +// forever). For objects returned from multiple call sites by construction, +// e.g. the empty-list singleton. +void osp_mem_immortal(void *p); + +#endif // OSPREY_MEMORY_HOOKS_H diff --git a/compiler/runtime/memory_runtime.c b/compiler/runtime/memory_runtime.c index 44fb1027..ccf87513 100644 --- a/compiler/runtime/memory_runtime.c +++ b/compiler/runtime/memory_runtime.c @@ -1,20 +1,47 @@ // Default Osprey memory backend — the swappable allocation boundary. // // Implements [MEM-BACKENDS] / [MEM-BACKENDS-CUSTOM] (docs/specs/0018). Compiler -// codegen emits calls to `osp_alloc` and never names `malloc`, so the memory -// manager is chosen at link time, never baked into the IR. This default backend -// is a `malloc` passthrough with no reclamation yet — matching the current -// "allocate, never free during a run" semantics, which is sound because -// reclamation is unobservable [MEM-OPAQUE]. A custom manager (ARC, tracing GC, -// arena, pool) replaces this object by linking its own `osp_alloc` — plus the -// future `osp_retain` / `osp_release` / `osp_collect` hooks — against the same -// symbols. +// codegen emits calls to `osp_alloc` / `osp_alloc_tagged` and never names +// `malloc`, so the memory manager is chosen at link time, never baked into the +// IR. This default backend is a `malloc` passthrough with no reclamation — +// matching the current "allocate, never free during a run" semantics, which is +// sound because reclamation is unobservable [MEM-OPAQUE]. A custom manager +// (ARC, tracing GC, arena, pool) replaces this object by linking its own +// implementations of the same symbols. // -// The IR-level allocator attributes on `@osp_alloc` (see osprey-codegen -// builder.rs OSP_ALLOC_DECL) let LLVM remove provably non-escaping allocations -// at -O2, so most allocations never reach this function at all. +// The full backend ABI (docs/plans/0011-arc-gc-implementation.md §C ABI): +// `osp_alloc_tagged` carries a layout word (kind + pointer mask) that only the +// ARC backend reads; `osp_retain`/`osp_release` are dup/drop hooks that only +// the ARC backend acts on; `osp_collect` is a full-collection hook that only +// tracing backends act on. Defining every hook in every backend keeps the +// emitted IR backend-agnostic [MEM-BACKENDS]. +// +// The IR-level allocator attributes on `@osp_alloc` / `@osp_alloc_tagged` (see +// osprey-codegen builder.rs OSP_ALLOC_DECL) let LLVM remove provably +// non-escaping allocations at -O2, so most allocations never reach this +// function at all. #include #include void *osp_alloc(int64_t size) { return malloc((size_t)size); } + +// Layout-carrying allocation: the meta word (low 8 bits = kind, upper 56 = +// managed-pointer word bitmask) is meaningful only to the ARC backend. +void *osp_alloc_tagged(int64_t size, int64_t meta) { + (void)meta; + return malloc((size_t)size); +} + +// dup/drop hooks — no-ops without a counting backend (Bacon/Cheng/Rajan +// duality: under tracing or leak-everything, reference counts carry no work). +void osp_retain(void *o) { (void)o; } +void osp_release(void *o) { (void)o; } +// Codegen-proved-unique drop (memory_hooks.h) — same no-op here; the symbol +// exists so codegen can attach LLVM free-pair attributes to it. +void osp_release_unique(void *o) { (void)o; } +// Singleton-immortality hook (memory_hooks.h) — meaningful only under ARC. +void osp_mem_immortal(void *p) { (void)p; } + +// Full-collection hook — nothing to collect in a passthrough backend. +void osp_collect(void) {} diff --git a/compiler/runtime/osp_arc_shim.h b/compiler/runtime/osp_arc_shim.h new file mode 100644 index 00000000..1f959dd8 --- /dev/null +++ b/compiler/runtime/osp_arc_shim.h @@ -0,0 +1,33 @@ +// Heap-allocation redirect for the ARC backend. `-include`d (compiler flag) +// ahead of a runtime unit's own headers so its malloc/calloc/realloc/free/ +// strdup route into the ARC allocator (memory_arc.c) — giving runtime-minted +// strings and container nodes the 16-byte Perceus header and a registry entry, +// so codegen-emitted osp_release calls on them are precise instead of foreign +// probe-misses. Implements the shimmed-unit half of [GC-ARC-PERCEUS] +// (docs/plans/0011, phase 2 milestone M1). +// +// Only the value-producing units (list/map/hamt/string/string-list/json) are +// built with this; the default and gc archives never see it. +#ifndef OSP_ARC_SHIM_H +#define OSP_ARC_SHIM_H + +// Pull in the real prototypes first, THEN shadow the names. Because this header +// is force-included before the unit's own `#include `/``, +// the later includes are no-ops (guarded) and never re-declare through the +// macros. +#include +#include + +void *osp_arc_malloc(size_t size); +void *osp_arc_calloc(size_t n, size_t size); +void *osp_arc_realloc(void *old, size_t size); +void osp_arc_free(void *p); +char *osp_arc_strdup(const char *s); + +#define malloc(s) osp_arc_malloc(s) +#define calloc(n, s) osp_arc_calloc((n), (s)) +#define realloc(p, s) osp_arc_realloc((p), (s)) +#define free(p) osp_arc_free(p) +#define strdup(s) osp_arc_strdup(s) + +#endif // OSP_ARC_SHIM_H diff --git a/crates/osprey-cli/src/main.rs b/crates/osprey-cli/src/main.rs index 4612a555..bea2bcb3 100644 --- a/crates/osprey-cli/src/main.rs +++ b/crates/osprey-cli/src/main.rs @@ -34,11 +34,12 @@ use std::process::{Command, ExitCode}; pub(crate) const USAGE: &str = "usage: osprey [--check | --ast | --llvm | --compile | --run | \ --symbols | --list-tests] [--quiet] [--debug] [--profile] [--flavor default|ml] \ -[--memory=default|gc] [--target=native|wasm32] [-o ] \ +[--memory=default|gc|arc] [--target=native|wasm32] [-o ] \ [--sandbox | --no-http | --no-websocket | --no-fs | --no-ffi]\n\ - osprey build [project] [--quiet] [--debug] [--memory=default|gc] \ + osprey build [project] [--quiet] [--debug] [--memory=default|gc|arc] \ [--target=native|wasm32] [-o ]\n\ - osprey test [path] [--filter ] [--quiet]\n\ + osprey test [path] [--filter ] [--quiet] [--coverage] \ +[--coverage-json ]\n\ osprey fmt [--check | --stdout] [--flavor default|ml] \n\ osprey --hover \n\ osprey --docs --docs-dir \n\ @@ -300,16 +301,14 @@ fn parse_target(value: &str) -> Result { } } -/// Validate the `--memory=` value. `arc` is reserved but not yet implemented -/// (docs/plans/0011) — reject it explicitly rather than silently mislabel. +/// Validate the `--memory=` value: the malloc passthrough (`default`), the +/// tracing collector (`gc`), or Perceus reference counting (`arc`) — +/// docs/plans/0011 [MEM-BACKENDS]. fn parse_memory(value: &str) -> Result { match value { - "default" | "gc" => Ok(value.to_string()), - "arc" => { - Err("memory backend 'arc' is not yet implemented (available: default, gc)".to_string()) - } + "default" | "gc" | "arc" => Ok(value.to_string()), other => Err(format!( - "unknown memory backend '{other}' (available: default, gc)\n{USAGE}" + "unknown memory backend '{other}' (available: default, gc, arc)\n{USAGE}" )), } } @@ -735,6 +734,9 @@ fn compile_ir( osprey_codegen::DebugSource::from_path(path), ); } + if kind == osprey_debug::BuildKind::Coverage { + return osprey_codegen::compile_program_coverage(program); + } osprey_codegen::compile_program(program) } @@ -804,9 +806,14 @@ fn link_args(ir: &str, source: &str, memory: &str) -> Vec { let uses_http = ir.contains("@http") || ir.contains("@websocket"); // The reclaiming backend is a link-time archive swap — the IR is identical - // [MEM-BACKENDS]. `gc` links the tracing-collector archive set; `default` - // the malloc-passthrough set. (docs/plans/0011) - let suffix = if memory == "gc" { "_gc" } else { "" }; + // [MEM-BACKENDS]. `gc` links the tracing-collector archive set, `arc` the + // Perceus reference-counting set, `default` the malloc-passthrough set. + // (docs/plans/0011) + let suffix = match memory { + "gc" => "_gc", + "arc" => "_arc", + _ => "", + }; let lib = if uses_http { format!("libhttp_runtime{suffix}.a") } else { @@ -2254,18 +2261,24 @@ mod tests { #[test] fn link_args_selects_gc_archive_and_validates_backend() { - // The `gc` backend swaps in the `_gc` archive set; `default` does not. + // The `gc`/`arc` backends swap in their archive sets; `default` does not. let gc = link_args("call void @osprey_list_empty()", "", "gc"); assert!( gc.iter().any(|a| a.contains("_gc.a")) || gc.is_empty(), "gc backend must select a *_gc archive when one is present: {gc:?}" ); + let arc = link_args("call void @osprey_list_empty()", "", "arc"); + assert!( + arc.iter().any(|a| a.contains("_arc.a")) || arc.is_empty(), + "arc backend must select a *_arc archive when one is present: {arc:?}" + ); let plain = link_args("call void @osprey_list_empty()", "", "default"); assert!(!plain.iter().any(|a| a.contains("_gc.a")), "{plain:?}"); - // Backend validation: default/gc accepted, arc reserved, others rejected. + assert!(!plain.iter().any(|a| a.contains("_arc.a")), "{plain:?}"); + // Backend validation: default/gc/arc accepted, others rejected. assert_eq!(parse_memory("gc").as_deref(), Ok("gc")); assert_eq!(parse_memory("default").as_deref(), Ok("default")); - assert!(parse_memory("arc").is_err()); + assert_eq!(parse_memory("arc").as_deref(), Ok("arc")); assert!(parse_memory("bogus").is_err()); } diff --git a/crates/osprey-cli/src/project.rs b/crates/osprey-cli/src/project.rs index 497cd4f9..29568512 100644 --- a/crates/osprey-cli/src/project.rs +++ b/crates/osprey-cli/src/project.rs @@ -1,6 +1,6 @@ //! CLI-facing project input and source-location handling. -use osprey_ast::{Position, Program, Stmt}; +use osprey_ast::{Position, Program}; use osprey_project::{AssembledProject, ProjectConfig, ProjectError, SourceFile}; use osprey_syntax::Flavor; use std::path::{Path, PathBuf}; @@ -46,16 +46,13 @@ impl CompilationInput { source: String, program: Program, ) -> Result> { - let physical_path = normalize_path(Path::new(path)); let source_file = SourceFile { - path: physical_path.clone(), + path: normalize_path(Path::new(path)), flavor, source: source.clone(), program, }; - let root = physical_path.parent().unwrap_or_else(|| Path::new(".")); - let config = ProjectConfig::for_root(root); - let assembled = osprey_project::assemble(&config, &[source_file])?; + let assembled = osprey_project::assemble_one(source_file)?; Ok(Self::assembled( assembled, source, @@ -181,14 +178,7 @@ pub(crate) fn is_project_path(path: &str) -> bool { /// Module-bearing single files need resolver/flattening; ordinary scripts must /// bypass it so their existing IR and debugger symbol names remain exact. -pub(crate) fn needs_assembly(program: &Program) -> bool { - program.statements.iter().any(|statement| { - matches!( - statement, - Stmt::Namespace { .. } | Stmt::Module { .. } | Stmt::Import(_) | Stmt::Signature { .. } - ) - }) -} +pub(crate) use osprey_project::needs_assembly; /// Render a loader/resolver failure in the compiler's standard diagnostic form. pub(crate) fn format_project_error(error: &ProjectError, fallback: &str) -> String { diff --git a/crates/osprey-cli/src/sandbox.rs b/crates/osprey-cli/src/sandbox.rs index 6d0df88c..38f57f5b 100644 --- a/crates/osprey-cli/src/sandbox.rs +++ b/crates/osprey-cli/src/sandbox.rs @@ -193,11 +193,16 @@ mod tests { fn no_ffi_rejects_extern_declarations_including_in_modules() { let mut policy = Policy::allow_all(); policy.ffi = false; - let src = "extern fn sqlite3_open(filename: string, ppDb: Ptr) -> int\n"; + let src = "extern fn sqlite3_open(filename: string, ppDb: Ptr) -> int\n\ + module Ffi { export extern fn log(message: string) }\n\ + namespace Sys { extern fn exit(code: int) -> int }\n"; let v = violations(&prog(src), policy); - assert_eq!(v.len(), 1); - assert!(v[0].contains("sqlite3_open") && v[0].contains("--no-ffi")); - // ffi allowed => the same extern compiles. + assert_eq!(v.len(), 3, "top/module/namespace externs all gated: {v:?}"); + assert!(v.iter().all(|m| m.contains("--no-ffi"))); + assert!(v.iter().any(|m| m.contains("sqlite3_open"))); + assert!(v.iter().any(|m| m.contains("log"))); + assert!(v.iter().any(|m| m.contains("exit"))); + // ffi allowed => the same externs compile. assert!(violations(&prog(src), Policy::allow_all()).is_empty()); // Two externs each get their own message. let two = "extern fn a() -> int\nextern fn b() -> int\n"; diff --git a/crates/osprey-cli/src/test_cmd.rs b/crates/osprey-cli/src/test_cmd.rs index d30d6edd..12604106 100644 --- a/crates/osprey-cli/src/test_cmd.rs +++ b/crates/osprey-cli/src/test_cmd.rs @@ -1,14 +1,17 @@ //! `osprey test` — discover and run test suites. Implements -//! [TESTING-CLI-RUN], [TESTING-FILE-CONVENTION], [TESTING-FILTER] -//! (docs/specs/0027-TestingFramework.md). +//! [TESTING-CLI-RUN], [TESTING-FILE-CONVENTION], [TESTING-FILTER], +//! [TESTING-COVERAGE-CLI] (docs/specs/0027-TestingFramework.md). //! //! `path` (default `.`) is a single file run as-is, or a directory searched //! recursively for `*.test.osp` / `*.test.ospml`, sorted for determinism, //! skipping hidden, `target`, and `node_modules` directories. Each file //! compiles and runs like `osprey --run`; its TAP output streams //! through under a `# file:` header; the exit code aggregates suite outcomes. +//! `--coverage` instruments each suite and reports per-file and total line +//! coverage; `--coverage-json ` also writes the merged hit counts. use crate::{execute_native, load_input, report_type_errors, Cli, USAGE}; +use std::collections::BTreeMap; use std::path::{Path, PathBuf}; use std::process::ExitCode; @@ -16,8 +19,14 @@ struct Opts { path: String, filter: Option, quiet: bool, + coverage: bool, + coverage_json: Option, } +/// One suite's parsed coverage dump: flattened line → hit count +/// [TESTING-COVERAGE-DUMP]. +type LineHits = BTreeMap; + pub(crate) fn run(args: &[String]) -> ExitCode { let opts = match parse(args) { Ok(opts) => opts, @@ -36,7 +45,7 @@ pub(crate) fn run(args: &[String]) -> ExitCode { eprintln!("osprey test: no test files found under {}", opts.path); return ExitCode::FAILURE; } - run_suites(&files, opts.quiet) + run_suites(&files, &opts) } fn parse(args: &[String]) -> Result { @@ -44,18 +53,28 @@ fn parse(args: &[String]) -> Result { path: String::from("."), filter: None, quiet: false, + coverage: false, + coverage_json: None, }; let mut path = None; let mut it = args.iter(); while let Some(a) = it.next() { match a.as_str() { "--quiet" => opts.quiet = true, + "--coverage" => opts.coverage = true, "--filter" => { let next = it .next() .ok_or_else(|| format!("--filter requires a test name\n{USAGE}"))?; opts.filter = Some(next.clone()); } + "--coverage-json" => { + let next = it + .next() + .ok_or_else(|| format!("--coverage-json requires a path\n{USAGE}"))?; + opts.coverage = true; + opts.coverage_json = Some(next.clone()); + } flag if flag.starts_with("--") => { return Err(format!("unknown flag {flag}\n{USAGE}")); } @@ -115,15 +134,26 @@ fn visit(dir: &Path, out: &mut Vec) { } } -fn run_suites(files: &[PathBuf], quiet: bool) -> ExitCode { +fn run_suites(files: &[PathBuf], opts: &Opts) -> ExitCode { let mut failed = 0usize; + let mut report = BTreeMap::new(); for file in files { - if !quiet { + if !opts.quiet { println!("# file: {}", file.display()); } - if !suite_passes(file) { + let hits = opts.coverage.then(|| coverage_dump_path(file)); + if !suite_passes(file, hits.as_deref()) { failed += 1; } + if let Some(dump) = hits { + collect_suite_coverage(file, &dump, &mut report, opts.quiet); + } + } + if opts.coverage { + report_total(&report); + } + if let Some(out) = &opts.coverage_json { + write_coverage_json(out, &report); } println!( "# suites: {} passed, {} failed", @@ -139,7 +169,9 @@ fn run_suites(files: &[PathBuf], quiet: bool) -> ExitCode { /// Compile and execute one test file like `--run`; `true` when it exits 0 /// [TESTING-EXIT]. Compile and type errors print their own diagnostics. -fn suite_passes(file: &Path) -> bool { +/// `coverage_dump` (when set) instruments the build and points the runtime's +/// exit-time dump at it [TESTING-COVERAGE-CLI]. +fn suite_passes(file: &Path, coverage_dump: Option<&Path>) -> bool { let cli = Cli::run_native(file.display().to_string()); let Ok(input) = load_input(&cli) else { return false; @@ -147,16 +179,138 @@ fn suite_passes(file: &Path) -> bool { if report_type_errors(&input) > 0 { return false; } - matches!( - execute_native(&input, "default", osprey_debug::BuildKind::Release), - Ok(0) - ) + let kind = match coverage_dump { + Some(dump) => { + std::env::set_var("OSPREY_COVERAGE", dump); + osprey_debug::BuildKind::Coverage + } + None => osprey_debug::BuildKind::Release, + }; + matches!(execute_native(&input, "default", kind), Ok(0)) +} + +/// Where one suite's coverage dump lands (the scratch dir the compiled +/// binaries already use). +fn coverage_dump_path(file: &Path) -> PathBuf { + std::env::temp_dir().join(format!( + "{}.oscov.txt", + crate::scratch_stem(&file.display().to_string()) + )) +} + +/// Parse one suite's dump into the merged report and print its line rate. +fn collect_suite_coverage( + file: &Path, + dump: &Path, + report: &mut BTreeMap, + quiet: bool, +) { + let Some(hits) = parse_dump(dump) else { + eprintln!("osprey test: no coverage dump for {}", file.display()); + return; + }; + let _ = std::fs::remove_file(dump); + let (covered, total) = line_rate(&hits); + if !quiet { + println!( + "# coverage: {} ({covered}/{total} lines) {}", + percent(covered, total), + file.display() + ); + } + let _ = report.insert(file.display().to_string(), hits); +} + +/// Read a `[TESTING-COVERAGE-DUMP]` file: `# osprey-coverage v1` then one +/// ` ` row per coverable line. `None` when missing/unreadable. +fn parse_dump(path: &Path) -> Option { + let text = std::fs::read_to_string(path).ok()?; + let mut lines = text.lines(); + if lines.next() != Some("# osprey-coverage v1") { + return None; + } + let mut hits = LineHits::new(); + for row in lines { + let mut cols = row.split_whitespace(); + if let (Some(line), Some(count)) = ( + cols.next().and_then(|c| c.parse().ok()), + cols.next().and_then(|c| c.parse().ok()), + ) { + let _ = hits.insert(line, count); + } + } + Some(hits) +} + +fn line_rate(hits: &LineHits) -> (usize, usize) { + (hits.values().filter(|h| **h > 0).count(), hits.len()) +} + +fn percent(covered: usize, total: usize) -> String { + if total == 0 { + return String::from("100.0%"); + } + // Line counts fit u32 comfortably; saturate rather than misconvert. + let as_f64 = |n: usize| f64::from(u32::try_from(n).unwrap_or(u32::MAX)); + let pct = as_f64(covered) / as_f64(total) * 100.0; + format!("{pct:.1}%") +} + +/// Print the aggregate `# coverage total:` row across every suite +/// [TESTING-COVERAGE-CLI]. +fn report_total(report: &BTreeMap) { + let (covered, total) = report + .values() + .map(line_rate) + .fold((0, 0), |(c, t), (sc, st)| (c + sc, t + st)); + println!( + "# coverage total: {} ({covered}/{total} lines)", + percent(covered, total) + ); +} + +/// Write the merged machine-readable report the editor integration consumes +/// [TESTING-COVERAGE-JSON]: `{"files":{"":{"lines":{"":hits}}}}`. +fn write_coverage_json(out: &str, report: &BTreeMap) { + let files = report + .iter() + .map(|(file, hits)| { + let lines = hits + .iter() + .map(|(line, count)| format!("\"{line}\":{count}")) + .collect::>() + .join(","); + format!("{}:{{\"lines\":{{{lines}}}}}", json_string(file)) + }) + .collect::>() + .join(","); + if let Err(e) = std::fs::write(out, format!("{{\"files\":{{{files}}}}}")) { + eprintln!("osprey test: cannot write coverage json {out}: {e}"); + } +} + +/// Minimal JSON string encoding for a path (quotes and backslashes only — +/// paths never contain control characters the discovery walk would produce). +fn json_string(text: &str) -> String { + let escaped = text.replace('\\', "\\\\").replace('"', "\\\""); + format!("\"{escaped}\"") } #[cfg(test)] mod tests { use super::*; + #[test] + fn coverage_dump_path_is_stable_and_scratch_scoped() { + let file = Path::new("/proj/tests/math_test.osp"); + let dump = coverage_dump_path(file); + assert!(dump.starts_with(std::env::temp_dir())); + let name = dump.file_name().and_then(|n| n.to_str()).unwrap_or(""); + assert!(name.ends_with(".oscov.txt"), "dump name: {name}"); + // Same suite → same dump path (the run and the collector must agree). + assert_eq!(dump, coverage_dump_path(file)); + } + #[test] fn parse_reads_path_filter_and_quiet_and_rejects_junk() { let ok = parse(&[ @@ -169,6 +323,7 @@ mod tests { assert_eq!(ok.path, "suite"); assert_eq!(ok.filter.as_deref(), Some("adds")); assert!(ok.quiet); + assert!(!ok.coverage); assert_eq!(parse(&[]).expect("default").path, "."); assert!(parse(&["--filter".to_string()]).is_err()); @@ -176,6 +331,21 @@ mod tests { assert!(parse(&["a".to_string(), "b".to_string()]).is_err()); } + // [TESTING-COVERAGE-CLI]: --coverage turns instrumentation on; + // --coverage-json implies it and captures the output path. + #[test] + fn parse_reads_coverage_flags() { + let plain = parse(&["--coverage".to_string()]).expect("coverage"); + assert!(plain.coverage); + assert!(plain.coverage_json.is_none()); + + let json = + parse(&["--coverage-json".to_string(), "cov.json".to_string()]).expect("coverage json"); + assert!(json.coverage); + assert_eq!(json.coverage_json.as_deref(), Some("cov.json")); + assert!(parse(&["--coverage-json".to_string()]).is_err()); + } + #[test] fn only_test_suffixed_files_are_recognized() { assert!(is_test_file(Path::new("money.test.osp"))); @@ -224,4 +394,33 @@ mod tests { let _ = std::fs::remove_dir_all(&root); } + + // [TESTING-COVERAGE-DUMP] parsing, rates, and the JSON shape the editor + // integration reads [TESTING-COVERAGE-JSON]. + #[test] + fn dump_parsing_rates_and_json_round_trip() { + let dir = std::env::temp_dir().join(format!("osprey-cov-cli-{}", std::process::id())); + std::fs::create_dir_all(&dir).expect("mkdir"); + let dump = dir.join("suite.oscov.txt"); + std::fs::write(&dump, "# osprey-coverage v1\n3 2\n7 0\n12 1\n").expect("write dump"); + let hits = parse_dump(&dump).expect("parse"); + assert_eq!(line_rate(&hits), (2, 3)); + assert_eq!(percent(2, 3), "66.7%"); + assert_eq!(percent(0, 0), "100.0%"); + + // A dump without the v1 header is rejected, not misread. + std::fs::write(&dump, "3 2\n").expect("rewrite"); + assert!(parse_dump(&dump).is_none()); + + let mut report = BTreeMap::new(); + let _ = report.insert(String::from("a\"b.test.osp"), hits); + let json = dir.join("cov.json"); + write_coverage_json(&json.display().to_string(), &report); + let text = std::fs::read_to_string(&json).expect("read json"); + assert_eq!( + text, + "{\"files\":{\"a\\\"b.test.osp\":{\"lines\":{\"3\":2,\"7\":0,\"12\":1}}}}" + ); + let _ = std::fs::remove_dir_all(&dir); + } } diff --git a/crates/osprey-cli/tests/cli_e2e.rs b/crates/osprey-cli/tests/cli_e2e.rs index 960df781..c0061602 100644 --- a/crates/osprey-cli/tests/cli_e2e.rs +++ b/crates/osprey-cli/tests/cli_e2e.rs @@ -674,6 +674,70 @@ fn test_subcommand_reports_broken_and_missing_suites() { assert_eq!(o.code, Some(2), "{}", o.stderr); } +// [TESTING-COVERAGE-CLI][TESTING-COVERAGE-JSON] --coverage instruments each +// suite and prints per-file and total line rates; --coverage-json also writes +// the merged machine-readable report the editor integration consumes. +#[test] +fn test_subcommand_coverage_reports_lines_and_writes_json() { + let dir = temp_dir("suite_cov"); + let _ = write_in(&dir, "pass.test.osp", PASSING_TESTS); + let json = dir.join("cov.json"); + let o = run_args(&[ + "test", + dir.to_string_lossy().as_ref(), + "--coverage-json", + json.to_string_lossy().as_ref(), + ]); + assert_eq!(o.code, Some(0), "{}", o.stdout); + assert!(o.stdout.contains("# coverage: "), "{}", o.stdout); + assert!(o.stdout.contains("# coverage total: "), "{}", o.stdout); + let report = std::fs::read_to_string(&json).expect("coverage json"); + assert!(report.starts_with("{\"files\":{"), "{report}"); + assert!(report.contains("pass.test.osp"), "{report}"); + assert!(report.contains("\"lines\":{"), "{report}"); + + // --quiet drops the per-file rows but keeps the aggregate. + let o = run_args(&[ + "test", + dir.to_string_lossy().as_ref(), + "--coverage", + "--quiet", + ]); + assert_eq!(o.code, Some(0), "{}", o.stdout); + assert!(!o.stdout.contains("# coverage: "), "{}", o.stdout); + assert!(o.stdout.contains("# coverage total: "), "{}", o.stdout); +} + +// A type-error suite fails before execution, so it produces no dump; the run +// keeps going, and an unwritable JSON path is reported without aborting. +#[test] +fn test_subcommand_coverage_survives_type_errors_and_bad_json_paths() { + let dir = temp_dir("suite_cov_bad"); + let _ = write_in(&dir, "pass.test.osp", PASSING_TESTS); + let _ = write_in(&dir, "typebad.test.osp", "let n: int = \"nope\"\n"); + let bogus = dir.join("no-such-dir").join("cov.json"); + let o = run_args(&[ + "test", + dir.to_string_lossy().as_ref(), + "--coverage-json", + bogus.to_string_lossy().as_ref(), + "--quiet", + ]); + assert_eq!(o.code, Some(1), "{}", o.stdout); + assert!( + o.stdout.contains("# suites: 1 passed, 1 failed"), + "{}", + o.stdout + ); + assert!(o.stderr.contains("type mismatch"), "{}", o.stderr); + assert!(o.stderr.contains("no coverage dump"), "{}", o.stderr); + assert!( + o.stderr.contains("cannot write coverage json"), + "{}", + o.stderr + ); +} + // A nested test() must not silently reshuffle counters: it fails the // enclosing case loudly [TESTING-BUILTIN-TEST], and a zero-case run still // prints its plan so a matchless filter is visible [TESTING-TAP]. diff --git a/crates/osprey-codegen/src/aggregate.rs b/crates/osprey-codegen/src/aggregate.rs index 266fb490..4e3d1a70 100644 --- a/crates/osprey-codegen/src/aggregate.rs +++ b/crates/osprey-codegen/src/aggregate.rs @@ -56,7 +56,7 @@ pub(crate) fn gen_constructor( let struct_ty = cg .ctor_struct_ty(name) .ok_or_else(|| CodegenError::unknown(name))?; - let obj = cg.malloc_struct(&struct_ty); + let obj = cg.malloc_struct(&struct_ty, tagged_fields_meta(&view.fields)); store_tag(cg, &struct_ty, obj.as_str(), view.tag); // fields, in declared order @@ -71,7 +71,9 @@ pub(crate) fn gen_constructor( let handle = cg.fresh_reg(); cg.emit(format!("{handle} = bitcast {struct_ty}* {obj} to i8*")); - Ok(Value::handle(handle, view.owner)) + let v = Value::handle(handle, view.owner); + crate::arc::own(cg, &v); + Ok(v) } /// `{ field: value, … }` — an anonymous object literal: the same `{ i64 tag, @@ -87,16 +89,34 @@ pub(crate) fn gen_object(cg: &mut Codegen, fields: &[FieldAssignment]) -> Result parts.extend(vals.iter().map(|(_, v)| v.ty.as_str().to_string())); let struct_ty = format!("{{ {} }}", parts.join(", ")); let layout: Vec<(String, LType)> = vals.iter().map(|(n, v)| (n.clone(), v.ty)).collect(); + let meta = tagged_fields_meta(&layout); let owner = cg.register_obj_layout(layout); - let obj = cg.malloc_struct(&struct_ty); + let obj = cg.malloc_struct(&struct_ty, meta); store_tag(cg, &struct_ty, obj.as_str(), 0); for (i, (_, v)) in vals.iter().enumerate() { store_field(cg, &struct_ty, obj.as_str(), i + 1, v.ty, &v.operand); } let handle = cg.fresh_reg(); cg.emit(format!("{handle} = bitcast {struct_ty}* {obj} to i8*")); - Ok(Value::handle(handle, owner)) + let v = Value::handle(handle, owner); + crate::arc::own(cg, &v); + Ok(v) +} + +/// The layout word for a tagged-record block `{ i64 tag, fields… }` +/// ([`crate::meta`]): the leading discriminant is a scalar word; each field +/// marks itself by its LLVM type. Generic-variant slots boxed into `i64` stay +/// unmarked — leak-safe by design (meta.rs [GC-ARC-PERCEUS]). +fn tagged_fields_meta(fields: &[(String, LType)]) -> i64 { + let mut mf = Vec::with_capacity(fields.len() + 1); + mf.push(crate::meta::MetaField::Word); + mf.extend( + fields + .iter() + .map(|(_, t)| crate::meta::MetaField::of_lty(*t)), + ); + crate::meta::struct_meta(&mf) } /// The built-in HTTP response record name. @@ -120,7 +140,12 @@ const HTTP_RESPONSE_FIELDS: [(&str, &str); 6] = [ /// request handler hands back to the runtime. Unlike a generic record there is /// **no leading tag**, and the boolean `isComplete` widens to `i8`. fn gen_http_response(cg: &mut Codegen, fields: &[FieldAssignment]) -> Result { - let obj = cg.malloc_struct(HTTP_RESPONSE_STRUCT); + // Layout word for the fixed C ABI: string pointers at words 1, 2 and 5 + // (headers / contentType / partialBody) — pinned by meta.rs unit tests. + let meta = crate::meta::struct_meta( + &HTTP_RESPONSE_FIELDS.map(|(_, llty)| crate::meta::MetaField::of_slot_ty(llty)), + ); + let obj = cg.malloc_struct(HTTP_RESPONSE_STRUCT, meta); for (i, (fname, llty)) in HTTP_RESPONSE_FIELDS.iter().enumerate() { let fa = fields.iter().find(|f| &f.name == fname).ok_or_else(|| { CodegenError::invalid(format!("missing field `{fname}` for `{HTTP_RESPONSE}`")) @@ -135,6 +160,7 @@ fn gen_http_response(cg: &mut Codegen, fields: &[FieldAssignment]) -> Result crate::conv::as_i64(cg, v)?.operand, _ => crate::cast::coerce_to(cg, v, LType::Str)?.operand, }; + crate::arc::dup_store(cg, llty, &operand); let p = cg.fresh_reg(); cg.emit(format!( "{p} = getelementptr {HTTP_RESPONSE_STRUCT}, {HTTP_RESPONSE_STRUCT}* {obj}, i32 0, i32 {i}" @@ -142,7 +168,9 @@ fn gen_http_response(cg: &mut Codegen, fields: &[FieldAssignment]) -> Result, + slot: String, + pure_scalar: bool, +} + +/// The per-function ownership ledger: a stack of frames (function body, +/// statements, loop bodies). Swapped wholesale across `enter_nested_fn`. +pub(crate) struct ArcLedger { + frames: Vec>, +} + +impl ArcLedger { + pub(crate) fn new() -> ArcLedger { + ArcLedger { + frames: vec![Vec::new()], + } + } +} + +impl Default for ArcLedger { + fn default() -> Self { + ArcLedger::new() + } +} + +/// Whether `v` is a candidate managed pointer: a register-carried heap +/// handle/string. Literals and `null` are rodata (registry probe-miss). +fn managed(v: &Value) -> bool { + matches!(v.ty, LType::Str | LType::Ptr) && v.operand.starts_with('%') +} + +/// `v`'s operand as a plain `i8*`, bitcasting a typed block pointer. A flat +/// list-literal handle (`[]…` owner) travels as its raw `{ i64, i8* }*` +/// register even though its [`LType`] spells `i8*` — undo that here. +fn as_i8ptr(cg: &mut Codegen, v: &Value) -> String { + let spelled = if v.osp_ty.as_deref().is_some_and(|o| o.starts_with("[]")) { + "{ i64, i8* }*".to_string() + } else { + v.llvm_ty() + }; + if spelled == "i8*" { + v.operand.clone() + } else { + cg.emit_reg(format!("bitcast {spelled} {} to i8*", v.operand)) + } +} + +/// Register `v` as owned (+1) by the innermost open region. Producers call +/// this: fresh aggregates, list literals, Result blocks, C-runtime string / +/// container returns, user-call results (callee epilogues transfer +1). +pub(crate) fn own(cg: &mut Codegen, v: &Value) { + if !managed(v) { + return; + } + let ptr = as_i8ptr(cg, v); + let slot = cg.hoist_arc_slot(); + cg.emit(format!("store i8* {ptr}, i8** {slot}")); + if let Some(frame) = cg.arc.frames.last_mut() { + frame.push(Entry { + operand: v.operand.clone(), + name: None, + slot, + pure_scalar: false, + }); + } +} + +/// Mark the just-owned `v` as holding no managed references (its producer +/// proved a scalar payload and a non-heap errmsg), enabling [`consume_fresh`]. +pub(crate) fn mark_pure_scalar(cg: &mut Codegen, v: &Value) { + if let Some(e) = cg + .arc + .frames + .last_mut() + .and_then(|f| f.last_mut()) + .filter(|e| e.operand == v.operand) + { + e.pure_scalar = true; + } +} + +/// Consume a freshly produced, never-bound owner at its immediate unwrap: +/// pop the newest innermost-frame entry when it is `v` itself, unnamed and +/// pure-scalar, and drop it via `@osp_release_unique` — whose free-pair +/// attributes let -O2 delete the whole non-escaping alloc+release. The gates +/// make the rc == 1 proof: same SSA register ⇒ the creation dominates and +/// nothing was rebound; newest entry + unnamed ⇒ no store or `let` aliased +/// it; pure-scalar ⇒ eliding the pair drops no interior references either. +pub(crate) fn consume_fresh(cg: &mut Codegen, v: &Value) { + let fresh = cg + .arc + .frames + .last() + .and_then(|f| f.last()) + .is_some_and(|e| e.operand == v.operand && e.name.is_none() && e.pure_scalar); + if !fresh { + return; + } + if let Some(e) = cg.arc.frames.last_mut().and_then(Vec::pop) { + cg.add_extern(RELEASE_UNIQUE_DECL); + let ptr = as_i8ptr(cg, v); + cg.emit(format!("call void @osp_release_unique(i8* {ptr})")); + cg.emit(format!("store i8* null, i8** {}", e.slot)); + } +} + +/// Open a region: statement, loop body. +pub(crate) fn push_frame(cg: &mut Codegen) { + cg.arc.frames.push(Vec::new()); +} + +/// Close the innermost region: drop every owner it still holds. +pub(crate) fn pop_frame(cg: &mut Codegen) { + if let Some(frame) = cg.arc.frames.pop() { + release_entries(cg, &frame); + } +} + +/// Emit slot-based drops for `entries`, newest first, re-nulling each slot +/// (loop bodies reuse slots across iterations). +fn release_entries(cg: &mut Codegen, entries: &[Entry]) { + for e in entries.iter().rev() { + cg.add_extern(RELEASE_DECL); + let live = cg.emit_reg(format!("load i8*, i8** {}", e.slot)); + cg.emit(format!("call void @osp_release(i8* {live})")); + cg.emit(format!("store i8* null, i8** {}", e.slot)); + } +} + +/// A `let` bound `v` to `name`: transfer ownership out of the closing +/// statement region into its parent. A value the statement owns is moved; a +/// borrow (field load, unwrap payload, alias, phi of arm-owned values) is +/// retained so the binding survives its source. Non-candidates are untouched. +pub(crate) fn bind_owned(cg: &mut Codegen, name: &str, v: &Value) { + if !managed(v) { + return; + } + if let Some(mut e) = take_entry(cg, &v.operand) { + e.name = Some(name.to_string()); + push_parent(cg, e); + return; + } + retain_val(cg, v); + let ptr = as_i8ptr(cg, v); + let slot = cg.hoist_arc_slot(); + cg.emit(format!("store i8* {ptr}, i8** {slot}")); + push_parent( + cg, + Entry { + operand: v.operand.clone(), + name: Some(name.to_string()), + slot, + pure_scalar: false, + }, + ); +} + +/// Remove and return the innermost-frame entry registered under `operand`. +fn take_entry(cg: &mut Codegen, operand: &str) -> Option { + let frame = cg.arc.frames.last_mut()?; + let at = frame.iter().rposition(|e| e.operand == operand)?; + Some(frame.remove(at)) +} + +/// Push `entry` into the frame beneath the innermost (the region that +/// outlives the closing statement); the innermost when it is the only one. +fn push_parent(cg: &mut Codegen, entry: Entry) { + let n = cg.arc.frames.len(); + let at = if n >= 2 { n - 2 } else { n - 1 }; + if let Some(frame) = cg.arc.frames.get_mut(at) { + frame.push(entry); + } +} + +/// Emit `osp_release` on a raw `i8*` operand (a loaded old cell value, a +/// runtime-held env whose structural end has been reached). +pub(crate) fn release_operand(cg: &mut Codegen, operand: &str) { + cg.add_extern(RELEASE_DECL); + cg.emit(format!("call void @osp_release(i8* {operand})")); +} + +/// Emit `osp_retain` on a candidate value (dup). +pub(crate) fn retain_val(cg: &mut Codegen, v: &Value) { + if !managed(v) { + return; + } + let ptr = as_i8ptr(cg, v); + cg.add_extern(RETAIN_DECL); + cg.emit(format!("call void @osp_retain(i8* {ptr})")); +} + +/// Dup-on-store: retain `operand` when it is a register-carried pointer being +/// stored into a heap slot spelled `slot_ty` (the owning block's drop mask +/// releases it, so the store is a new reference). [GC-ARC-PERCEUS] +pub(crate) fn dup_store(cg: &mut Codegen, slot_ty: &str, operand: &str) { + if slot_ty.ends_with('*') && operand.starts_with('%') { + cg.add_extern(RETAIN_DECL); + let ptr = if slot_ty == "i8*" { + operand.to_string() + } else { + cg.emit_reg(format!("bitcast {slot_ty} {operand} to i8*")) + }; + cg.emit(format!("call void @osp_retain(i8* {ptr})")); + } +} + +/// Function epilogue at the single `ret`: retain the escaping return first +/// (transfer, +1 to the caller), then drop every owner in every frame. The +/// retain-before-release order keeps the returned value's count positive +/// throughout. [GC-ARC-PERCEUS] +pub(crate) fn epilogue(cg: &mut Codegen, ret: Option<&Value>) { + if let Some(v) = ret { + retain_val(cg, v); + } + let frames = std::mem::take(&mut cg.arc.frames); + for frame in frames.iter().rev() { + release_entries(cg, frame); + } + cg.arc.frames = vec![Vec::new()]; +} + +/// A candidate value is about to escape boxed as an `i64` across a fiber / +/// effect / channel boundary where the pointer-ness is erased: dup it so the +/// receiving side owns +1 (the boundary's structural release lands in M5). +pub(crate) fn escape_retain(cg: &mut Codegen, v: &Value) { + retain_val(cg, v); +} + +/// Drop the owners of `let` names the continuation of the current block no +/// longer references (M6 last-use precision, TR Fig. 6). Runs ONLY at +/// function level (ledger depth 1): a nested block / loop / statement region +/// computes liveness for its own continuation, which says nothing about +/// later uses in the enclosing scope — releasing function-frame names from +/// there would be a use-after-free. A tail-position block IS the enclosing +/// continuation, so the depth gate composes through nested tail blocks. +pub(crate) fn release_dead_after>( + cg: &mut Codegen, + rest: &[S], + value: Option<&Expr>, +) { + if cg.arc.frames.len() != 1 { + return; + } + let mut live = std::collections::BTreeSet::new(); + crate::freevars::free_idents_of_stmts(rest, value, &mut live); + release_dead(cg, &live); +} + +fn release_dead(cg: &mut Codegen, live: &std::collections::BTreeSet) { + let mut dead = Vec::new(); + if let Some(frame) = cg.arc.frames.first_mut() { + let mut kept = Vec::new(); + for e in frame.drain(..) { + match &e.name { + Some(n) if !live.contains(n) => dead.push(e), + _ => kept.push(e), + } + } + *frame = kept; + } + release_entries(cg, &dead); +} diff --git a/crates/osprey-codegen/src/builder.rs b/crates/osprey-codegen/src/builder.rs index d6d9d4ea..a7a66b00 100644 --- a/crates/osprey-codegen/src/builder.rs +++ b/crates/osprey-codegen/src/builder.rs @@ -17,6 +17,8 @@ use std::fmt::Write as _; pub struct CodegenOptions { /// Source file identity used for LLVM/DWARF debug metadata. pub debug_source: Option, + /// Instrument coverable lines with hit counters [TESTING-COVERAGE-CODEGEN]. + pub coverage: bool, } /// Accumulates a whole module while lowering one function at a time. @@ -103,6 +105,14 @@ pub struct Codegen { pub(crate) testing_used: bool, /// LLVM/DWARF debug metadata state, when `--debug` was requested. debug: Option, + /// Coverage instrumentation state, when coverage was requested + /// [TESTING-COVERAGE-CODEGEN]. + pub(crate) coverage: Option, + /// The Perceus ownership ledger for the in-progress function + /// [GC-ARC-PERCEUS] (see `crate::arc`). + pub(crate) arc: crate::arc::ArcLedger, + /// Monotonic id for hoisted ARC spill slots (`%arc.sN`), per function. + arc_slot_count: usize, } /// A mutable variable promoted to a heap cell so an effect handler can own it. @@ -147,6 +157,10 @@ pub(crate) struct SavedFn { cell_vars: HashSet, cell_slots: HashMap, resume_ctx: Option, + /// Ownership is per-function: a nested function drops its own owners at + /// its own epilogue, never the suspended function's [GC-ARC-PERCEUS]. + arc: crate::arc::ArcLedger, + arc_slot_count: usize, debug_scope: Option, debug_position: Option, debug_retained_nodes: Option, @@ -421,6 +435,11 @@ impl Codegen { resume_ctx: None, testing_used: false, debug: options.debug_source.map(DebugState::new), + coverage: options + .coverage + .then(crate::coverage::CoverageState::default), + arc: crate::arc::ArcLedger::new(), + arc_slot_count: 0, } } @@ -615,6 +634,8 @@ impl Codegen { cell_vars: std::mem::take(&mut self.cell_vars), cell_slots: std::mem::take(&mut self.cell_slots), resume_ctx: self.resume_ctx.take(), + arc: std::mem::take(&mut self.arc), + arc_slot_count: self.arc_slot_count, debug_scope: self.debug.as_ref().and_then(|d| d.current_scope), debug_position: self.debug.as_ref().and_then(|d| d.current_position), debug_retained_nodes: self.debug.as_ref().and_then(|d| d.current_retained_nodes), @@ -631,6 +652,7 @@ impl Codegen { self.label_count = 0; self.cur_lines = vec!["entry:".to_string()]; self.scopes = vec![HashMap::new()]; + self.arc_slot_count = 0; saved } @@ -652,6 +674,8 @@ impl Codegen { self.cell_vars = saved.cell_vars; self.cell_slots = saved.cell_slots; self.resume_ctx = saved.resume_ctx; + self.arc = saved.arc; + self.arc_slot_count = saved.arc_slot_count; if let Some(debug) = self.debug.as_mut() { debug.current_scope = saved.debug_scope; debug.current_position = saved.debug_position; @@ -918,6 +942,11 @@ impl Codegen { let _ = self.externs.insert(decl.into()); } + /// Append a module-level global definition (counter globals, tables). + pub(crate) fn add_global(&mut self, def: impl Into) { + self.globals.push(def.into()); + } + /// Intern a string literal as a private global and return an `i8*` pointing /// at its first byte. pub(crate) fn string_constant(&mut self, text: &str) -> Value { @@ -982,6 +1011,8 @@ impl Codegen { self.cell_vars.clear(); self.cell_slots.clear(); self.resume_ctx = None; + self.arc = crate::arc::ArcLedger::new(); + self.arc_slot_count = 0; self.push_scope(); self.cur_lines.push("entry:".to_string()); if let Some(debug) = self.debug.as_mut() { @@ -1031,6 +1062,11 @@ impl Codegen { out.push('\n'); out.push_str(&self.funcs.join("\n\n")); out.push('\n'); + if let Some(init) = self.cov_render_init() { + out.push('\n'); + out.push_str(&init); + out.push('\n'); + } out.push_str(FRAME_POINTER_ATTRS); out.push('\n'); if let Some(debug) = &self.debug { @@ -1063,22 +1099,50 @@ impl Codegen { self.emit_reg(format!("call i8* @osp_alloc(i64 {size})")) } + /// [`heap_alloc`] carrying the per-site layout word (kind + managed-pointer + /// mask, see [`crate::meta`]): the ARC backend stores it in the object + /// header so `osp_release` can drop children precisely; other backends + /// ignore it. Implements [GC-ARC-PERCEUS], docs/plans/0011 phase 2. + pub(crate) fn heap_alloc_tagged(&mut self, size: &str, meta: i64) -> String { + if meta == crate::meta::KIND_RAW { + return self.heap_alloc(size); + } + self.add_extern(OSP_ALLOC_TAGGED_DECL); + self.emit_reg(format!( + "call i8* @osp_alloc_tagged(i64 {size}, i64 {meta})" + )) + } + /// Allocate a heap block sized for the LLVM struct type `struct_ty`, via the /// portable `getelementptr null, 1` sizeof trick, and return the typed - /// pointer register (`{TY}*`). - pub(crate) fn malloc_struct(&mut self, struct_ty: &str) -> String { + /// pointer register (`{TY}*`). `meta` is the site's layout word + /// ([`crate::meta`]). + pub(crate) fn malloc_struct(&mut self, struct_ty: &str, meta: i64) -> String { let szp = self.fresh_reg(); self.emit(format!( "{szp} = getelementptr {struct_ty}, {struct_ty}* null, i64 1" )); let sz = self.fresh_reg(); self.emit(format!("{sz} = ptrtoint {struct_ty}* {szp} to i64")); - let raw = self.heap_alloc(&sz); + let raw = self.heap_alloc_tagged(&sz, meta); let obj = self.fresh_reg(); self.emit(format!("{obj} = bitcast i8* {raw} to {struct_ty}*")); obj } + /// Hoist a null-initialized `i8*` spill slot into the entry block and + /// return its register. ARC region drops load these slots, so a drop is + /// valid from any block and untaken paths release `null` (a no-op) — + /// ownership without dominance analysis [GC-ARC-PERCEUS]. + pub(crate) fn hoist_arc_slot(&mut self) -> String { + let name = format!("%arc.s{}", self.arc_slot_count); + self.arc_slot_count += 1; + self.cur_lines.insert(1, format!(" {name} = alloca i8*")); + self.cur_lines + .insert(2, format!(" store i8* null, i8** {name}")); + name + } + /// Set the current debug source position, returning the previous position. pub(crate) fn set_debug_position(&mut self, position: Option) -> Option { self.debug @@ -1108,6 +1172,11 @@ pub(crate) const FRAME_POINTER_ATTRS: &str = "attributes #0 = { \"frame-pointer\ /// libc `calloc`/`realloc` and bypassing the backend. Implements [MEM-BACKENDS]. pub(crate) const OSP_ALLOC_DECL: &str = "declare noalias i8* @osp_alloc(i64) allocsize(0) allockind(\"alloc,uninitialized\") mustprogress nounwind willreturn \"alloc-family\"=\"osprey\""; +/// The layout-carrying twin of [`OSP_ALLOC_DECL`]: same allocator attributes +/// (so `-O2` dead-allocation elimination still applies), plus the meta word the +/// ARC backend stores in the object header. Implements [GC-ARC-PERCEUS]. +pub(crate) const OSP_ALLOC_TAGGED_DECL: &str = "declare noalias i8* @osp_alloc_tagged(i64, i64) allocsize(0) allockind(\"alloc,uninitialized\") mustprogress nounwind willreturn \"alloc-family\"=\"osprey\""; + /// The resolved heap layout of a constructor. pub(crate) struct CtorView { pub owner: String, diff --git a/crates/osprey-codegen/src/closure.rs b/crates/osprey-codegen/src/closure.rs index dec6f259..7cd43172 100644 --- a/crates/osprey-codegen/src/closure.rs +++ b/crates/osprey-codegen/src/closure.rs @@ -70,7 +70,11 @@ pub(crate) fn emit_closure( let fn_name = format!("__closure_fn_{id}"); let cell_ty = cell_struct_ty(&caps); emit_closure_fn(cg, &fn_name, &cell_ty, &caps, parameters, body, sig)?; - Ok(cell_value(cg, id, &fn_name, &cell_ty, &caps, sig)) + let v = cell_value(cg, id, &fn_name, &cell_ty, &caps, sig); + // The cell is a fresh +1 producer here; a spawn's cell instead transfers + // to the fiber runtime (fiber.rs calls `cell_value` directly). + crate::arc::own(cg, &v); + Ok(v) } /// The free identifiers of `body` (minus the lambda's own parameters) that are @@ -172,17 +176,27 @@ pub(crate) fn cell_value( let reg = cg.emit_reg(format!("bitcast {{ i8* }}* {g} to i8*")); return Value::new(reg, LType::Ptr); } - let cell = cg.malloc_struct(cell_ty); + // Layout word: the leading fnptr is a CODE pointer (never released); each + // capture marks itself by its slot type ([`crate::meta`]). + let mut mf = vec![crate::meta::MetaField::PtrOpaque]; + mf.extend( + caps.iter() + .map(|c| crate::meta::MetaField::of_slot_ty(&c.val.llvm_ty())), + ); + let cell = cg.malloc_struct(cell_ty, crate::meta::struct_meta(&mf)); let fpp = cg.emit_reg(format!( "getelementptr {cell_ty}, {cell_ty}* {cell}, i32 0, i32 0" )); cg.emit(format!("store i8* {fnptr}, i8** {fpp}")); for (i, c) in caps.iter().enumerate() { let slot = i + 1; + let lty = c.val.llvm_ty(); + // Each captured pointer is a new reference the cell's drop releases — + // including the same variable captured by two closures [GC-ARC-PERCEUS]. + crate::arc::dup_store(cg, <y, &c.val.operand); let p = cg.emit_reg(format!( "getelementptr {cell_ty}, {cell_ty}* {cell}, i32 0, i32 {slot}" )); - let lty = c.val.llvm_ty(); cg.emit(format!("store {lty} {}, {lty}* {p}", c.val.operand)); } let reg = cg.emit_reg(format!("bitcast {cell_ty}* {cell} to i8*")); @@ -273,10 +287,13 @@ pub(crate) fn cell_call( let mut args = vec![format!("i8* {handle}")]; args.extend_from_slice(typed_args); let r = cg.emit_reg(format!("call {ret_spelling} {fp}({})", args.join(", "))); - match sig.2 { + let v = match sig.2 { Some(inner) => Value::result(r, inner), None => Value::new(r, sig.1), - } + }; + // Closure functions transfer +1 on return (their `ret_as_sig` epilogue). + crate::arc::own(cg, &v); + v } /// A top-level function used as an Osprey function value: emit (once per @@ -323,6 +340,9 @@ fn emit_forwarder(cg: &mut Codegen, name: &str) -> Result { Some(inner) => Value::result(r, inner), None => Value::new(r, cg.fn_ret_ltype(name).unwrap_or(LType::I64)), }; + // The forwarded call's +1 must be owned so `ret_as_sig`'s epilogue + // transfers exactly one reference out [GC-ARC-PERCEUS]. + crate::arc::own(cg, &rv); let emitted = ret_as_sig(cg, rv, sig.1, sig.2); cg.exit_nested_fn(saved, &ret_spelling, &fwd, ¶ms); emitted?; @@ -386,6 +406,9 @@ fn ret_as_sig(cg: &mut Codegen, v: Value, ret_ty: LType, ret_inner: Option Result { coerce_to(cg, v, LType::Ptr) } -/// The `i`-th positional argument, boxed to the uniform `i64` element ABI. -fn boxed_arg(cg: &mut Codegen, args: &[Expr], i: usize) -> Result { +/// The `i`-th positional argument, evaluated and unwrapped (pre-boxing). +fn unboxed_arg(cg: &mut Codegen, args: &[Expr], i: usize) -> Result { let e = args .get(i) .ok_or_else(|| CodegenError::invalid("collection builtin: missing argument"))?; let v = gen_expr(cg, e)?; - let v = crate::result::unwrap(cg, v); + Ok(crate::result::unwrap(cg, v)) +} + +/// The `i`-th positional argument, boxed to the uniform `i64` element ABI. +fn boxed_arg(cg: &mut Codegen, args: &[Expr], i: usize) -> Result { + let v = unboxed_arg(cg, args, i)?; Ok(box_to_i64(cg, v)) } +/// [`boxed_arg`] for an element/key the container will STORE: a persistent +/// container holds a new reference, so dup managed values before the pointer +/// is erased into the `i64` ABI (containers never release their elements — +/// the leak-safe M4 posture) [GC-ARC-PERCEUS]. +fn stored_boxed_arg(cg: &mut Codegen, args: &[Expr], i: usize) -> Result { + let v = unboxed_arg(cg, args, i)?; + crate::arc::escape_retain(cg, &v); + Ok(box_to_i64(cg, v)) +} + +/// Own a fresh runtime container handle: every `osprey_list_*`/`osprey_map_*` +/// producer returns +1 (fresh allocations; alias returns retain-on-return and +/// the empty singletons are immortal — `memory_arc.c`, plan 0011 M4). +fn own_handle(cg: &mut Codegen, v: Value) -> Value { + crate::arc::own(cg, &v); + v +} + fn list_empty(cg: &mut Codegen) -> Value { - Value::handle(cg.call("i8*", "osprey_list_empty", "", &[]), LIST_OWNER) + let v = Value::handle(cg.call("i8*", "osprey_list_empty", "", &[]), LIST_OWNER); + own_handle(cg, v) } fn map_empty(cg: &mut Codegen) -> Value { // OSPREY_KEY_STRING = 1 (Map() defaults to string keys). - Value::handle(cg.call("i8*", "osprey_map_empty", "i32", &["1"]), MAP_OWNER) + let v = Value::handle(cg.call("i8*", "osprey_map_empty", "i32", &["1"]), MAP_OWNER); + own_handle(cg, v) } /// `f(handle) -> int`. @@ -89,15 +114,17 @@ fn one_list_i64(cg: &mut Codegen, cname: &str, args: &[Expr]) -> Result { fn one_list_handle(cg: &mut Codegen, cname: &str, args: &[Expr]) -> Result { let h = handle_arg(cg, args, 0)?; let r = cg.call("i8*", cname, "i8*", &[&h.operand]); - Ok(Value::handle(r, LIST_OWNER)) + Ok(own_handle(cg, Value::handle(r, LIST_OWNER))) } -/// `f(handle, boxed) -> handle` (append / prepend / drop). +/// `f(handle, boxed) -> handle` (append / prepend / drop). The second +/// argument is stored by append/prepend (drop's count is an int — the +/// managed-gated dup skips it). fn list_box2(cg: &mut Codegen, cname: &str, args: &[Expr]) -> Result { let h = handle_arg(cg, args, 0)?; - let x = boxed_arg(cg, args, 1)?; + let x = stored_boxed_arg(cg, args, 1)?; let r = cg.call("i8*", cname, "i8*, i64", &[&h.operand, &x.operand]); - Ok(Value::handle(r, LIST_OWNER)) + Ok(own_handle(cg, Value::handle(r, LIST_OWNER))) } /// A binary runtime op on two collection-handle arguments → a new handle @@ -112,7 +139,8 @@ fn binary_handle_op(cg: &mut Codegen, args: &[Expr], cname: &str, owner: &str) - /// behind both list concat and map merge. fn combine_handles(cg: &mut Codegen, a: &Value, b: &Value, cname: &str, owner: &str) -> Value { let r = cg.call("i8*", cname, "i8*, i8*", &[&a.operand, &b.operand]); - Value::handle(r, owner) + let v = Value::handle(r, owner); + own_handle(cg, v) } /// Emit `osprey_list_concat` on two already-evaluated list handles. @@ -181,15 +209,15 @@ fn list_contains(cg: &mut Codegen, args: &[Expr]) -> Result { /// `mapSet(m, k, v) -> Map`. fn map_set(cg: &mut Codegen, args: &[Expr]) -> Result { let m = handle_arg(cg, args, 0)?; - let k = boxed_arg(cg, args, 1)?; - let v = boxed_arg(cg, args, 2)?; + let k = stored_boxed_arg(cg, args, 1)?; + let v = stored_boxed_arg(cg, args, 2)?; let r = cg.call( "i8*", "osprey_map_set", "i8*, i64, i64", &[&m.operand, &k.operand, &v.operand], ); - Ok(Value::handle(r, MAP_OWNER)) + Ok(own_handle(cg, Value::handle(r, MAP_OWNER))) } /// `mapRemove(m, k) -> Map`. @@ -202,7 +230,7 @@ fn map_remove(cg: &mut Codegen, args: &[Expr]) -> Result { "i8*, i64", &[&m.operand, &k.operand], ); - Ok(Value::handle(r, MAP_OWNER)) + Ok(own_handle(cg, Value::handle(r, MAP_OWNER))) } /// `mapContains(m, k) -> bool`. @@ -243,10 +271,11 @@ pub(crate) fn list_builder_push(cg: &mut Codegen, bld: &str, elem: &str) { } pub(crate) fn list_builder_seal(cg: &mut Codegen, bld: &str) -> Value { - Value::handle( + let v = Value::handle( cg.call("i8*", "osprey_list_builder_seal", "i8*", &[bld]), LIST_OWNER, - ) + ); + own_handle(cg, v) } /// `mapKeys`/`mapValues` → a `List` built by iterating the map. @@ -293,9 +322,13 @@ pub(crate) fn gen_map_literal(cg: &mut Codegen, entries: &[osprey_ast::MapEntry] for e in entries { let k = gen_expr(cg, &e.key)?; let k = crate::result::unwrap(cg, k); + // The map stores both key and value: dup before the i64 erasure + // (see stored_boxed_arg) [GC-ARC-PERCEUS]. + crate::arc::escape_retain(cg, &k); let k = box_to_i64(cg, k); let v = gen_expr(cg, &e.value)?; let v = crate::result::unwrap(cg, v); + crate::arc::escape_retain(cg, &v); let v = box_to_i64(cg, v); cg.call_void( "osprey_map_builder_put", @@ -304,7 +337,7 @@ pub(crate) fn gen_map_literal(cg: &mut Codegen, entries: &[osprey_ast::MapEntry] ); } let sealed = cg.call("i8*", "osprey_map_builder_seal", "i8*", &[&bld]); - Ok(Value::handle(sealed, MAP_OWNER)) + Ok(own_handle(cg, Value::handle(sealed, MAP_OWNER))) } /// Shared runtime map lookup → `Result` (also used by `m[key]` indexing). diff --git a/crates/osprey-codegen/src/coverage.rs b/crates/osprey-codegen/src/coverage.rs new file mode 100644 index 00000000..369ddbd9 --- /dev/null +++ b/crates/osprey-codegen/src/coverage.rs @@ -0,0 +1,257 @@ +//! Line-coverage instrumentation. Implements [TESTING-COVERAGE-CODEGEN] +//! (docs/specs/0027-TestingFramework.md). +//! +//! When [`crate::builder::CodegenOptions::coverage`] is set, lowering marks +//! each coverable source line — a function definition or a statement with a +//! recorded position — by bumping a per-line `i64` counter global inline where +//! control flow reaches it. A generated `__osp_cov_init` (called at the top of +//! `main`, before user code) registers every counter with the C runtime +//! (`compiler/runtime/coverage_runtime.c`), which dumps ` ` rows +//! at exit when `OSPREY_COVERAGE=` is set [TESTING-COVERAGE-ENV]. + +use crate::builder::Codegen; +use osprey_ast::{Expr, Position, Program, Stmt}; +use std::collections::BTreeSet; + +/// Per-module coverage state: the coverable lines. Seeded from the whole AST +/// up front so an unexecuted (even never-lowered) line still counts against +/// the total — the denominator comes from the source, not from what codegen +/// happened to reach. `BTreeSet` keeps the dump in ascending line order. +#[derive(Debug, Default)] +pub(crate) struct CoverageState { + lines: BTreeSet, + /// Definition lines of functions specialised by inlining (`fn_defs`): + /// they never pass through `gen_function`, so `try_inline` bumps the + /// definition line through this map instead. + inline_fn_lines: std::collections::HashMap, +} + +/// All coverable lines in `program`: function definitions plus positioned +/// statements, recursing through nested blocks, lambdas, match/handler arms, +/// and module/namespace bodies. +pub(crate) fn coverable_lines(program: &Program) -> BTreeSet { + let mut lines = BTreeSet::new(); + collect_stmts(&program.statements, &mut lines); + lines +} + +fn collect_stmts(stmts: &[Stmt], lines: &mut BTreeSet) { + for stmt in stmts { + collect_stmt(stmt, lines); + } +} + +fn mark(position: Option, lines: &mut BTreeSet) { + if let Some(p) = position { + let _ = lines.insert(p.line.max(1)); + } +} + +fn collect_stmt(stmt: &Stmt, lines: &mut BTreeSet) { + match stmt { + Stmt::Function { body, position, .. } => { + mark(*position, lines); + collect_expr(body, lines); + } + Stmt::Let { + value, position, .. + } + | Stmt::Assignment { + value, position, .. + } + | Stmt::Expr { value, position } => { + mark(*position, lines); + collect_expr(value, lines); + } + Stmt::Namespace { body, .. } => collect_stmts(body, lines), + Stmt::Module { body, .. } => { + for item in body { + collect_stmt(&item.declaration, lines); + } + } + _ => {} + } +} + +/// Recurse only into the expression forms that carry statements or arm bodies +/// — the places nested coverable statements live. +fn collect_expr(expr: &Expr, lines: &mut BTreeSet) { + match expr { + Expr::Block { statements, value } => { + collect_stmts(statements, lines); + if let Some(v) = value { + collect_expr(v, lines); + } + } + Expr::Lambda { body, .. } => collect_expr(body, lines), + Expr::Match { value, arms } => { + collect_expr(value, lines); + for arm in arms { + collect_expr(&arm.body, lines); + } + } + Expr::Handler { arms, body, .. } => { + for arm in arms { + collect_expr(&arm.body, lines); + } + collect_expr(body, lines); + } + Expr::Call { + function, + arguments, + .. + } => { + collect_expr(function, lines); + for a in arguments { + collect_expr(a, lines); + } + } + _ => {} + } +} + +/// The counter global for a source line. +fn counter_global(line: u32) -> String { + format!("@__osp_cov_hits.{line}") +} + +impl Codegen { + /// Seed the coverable-line universe from the whole AST and declare every + /// counter global up front, so a line codegen never reaches (an uncalled + /// generic's body, a dead branch) still dumps as 0 hits. A no-op unless + /// coverage instrumentation is active. + pub(crate) fn cov_seed(&mut self, program: &Program) { + if self.coverage.is_none() { + return; + } + for line in coverable_lines(program) { + let first_sight = self + .coverage + .as_mut() + .is_some_and(|cov| cov.lines.insert(line)); + if first_sight { + self.add_global(format!("{} = internal global i64 0", counter_global(line))); + } + } + } + + /// Record an inline-specialised function's definition line, so each + /// inlined call site bumps it (the body never reaches `gen_function`). + pub(crate) fn cov_note_inline_fn(&mut self, name: &str, position: Option) { + if let (Some(cov), Some(p)) = (self.coverage.as_mut(), position) { + let _ = cov.inline_fn_lines.insert(name.to_string(), p); + } + } + + /// Bump the definition line of an inline-specialised function at one of + /// its call sites. A no-op unless coverage is active and `name` is one. + pub(crate) fn cov_hit_inline_fn(&mut self, name: &str) { + let position = self + .coverage + .as_ref() + .and_then(|cov| cov.inline_fn_lines.get(name).copied()); + self.cov_hit(position); + } + + /// Mark `position`'s line covered at this point in the emitted code: + /// declare its counter global on first sight and bump it in place. A + /// no-op unless coverage instrumentation is active. + pub(crate) fn cov_hit(&mut self, position: Option) { + let Some(line) = position.map(|p| p.line.max(1)) else { + return; + }; + let first_sight = match self.coverage.as_mut() { + Some(cov) => cov.lines.insert(line), + None => return, + }; + let global = counter_global(line); + if first_sight { + self.add_global(format!("{global} = internal global i64 0")); + } + let loaded = self.emit_reg(format!("load i64, i64* {global}")); + let bumped = self.emit_reg(format!("add i64 {loaded}, 1")); + self.emit(format!("store i64 {bumped}, i64* {global}")); + } + + /// Emit the boot call that registers every counter before user code runs. + /// Emitted at the top of `main`; the registration function body is + /// rendered later (after all lowering) by [`Codegen::cov_render_init`]. + pub(crate) fn cov_emit_boot(&mut self) { + if self.coverage.is_none() { + return; + } + self.add_extern("declare void @osp_cov_register_line(i64, i64*)"); + self.emit("call void @__osp_cov_init()"); + } + + /// Render `__osp_cov_init`: one `osp_cov_register_line(line, &counter)` + /// call per coverable line, in ascending line order. `None` when coverage + /// is inactive. + pub(crate) fn cov_render_init(&self) -> Option { + let cov = self.coverage.as_ref()?; + let calls = cov + .lines + .iter() + .map(|line| { + format!( + " call void @osp_cov_register_line(i64 {line}, i64* {})", + counter_global(*line) + ) + }) + .collect::>() + .join("\n"); + Some(format!( + "define internal void @__osp_cov_init() {{\nentry:\n{calls}\n ret void\n}}" + )) + } +} + +#[cfg(test)] +mod tests { + use crate::builder::{Codegen, CodegenOptions}; + use osprey_ast::Position; + + fn coverage_codegen() -> Codegen { + Codegen::with_options( + osprey_types::ProgramTypes::default(), + CodegenOptions { + coverage: true, + ..CodegenOptions::default() + }, + ) + } + + #[test] + fn cov_hit_declares_each_counter_once_and_bumps_in_place() { + let mut cg = coverage_codegen(); + cg.begin_function("f", None); + cg.cov_hit(Some(Position { line: 4, column: 0 })); + cg.cov_hit(Some(Position { line: 4, column: 2 })); + cg.cov_hit(None); // positionless statements are not coverable + cg.emit("ret i64 0"); + cg.finish_function("i64", "f", &[]); + cg.cov_emit_boot(); // extern must land even without a real main here + let init = cg.cov_render_init().expect("coverage active"); + assert!(init.contains("call void @osp_cov_register_line(i64 4, i64* @__osp_cov_hits.4)")); + let module = cg.render(); + assert_eq!( + module + .matches("@__osp_cov_hits.4 = internal global i64 0") + .count(), + 1 + ); + assert_eq!(module.matches("store i64").count(), 2); + } + + #[test] + fn coverage_inactive_emits_nothing() { + let mut cg = Codegen::new(); + cg.begin_function("f", None); + cg.cov_hit(Some(Position { line: 9, column: 0 })); + cg.cov_emit_boot(); + cg.emit("ret i64 0"); + cg.finish_function("i64", "f", &[]); + assert!(cg.cov_render_init().is_none()); + assert!(!cg.render().contains("__osp_cov")); + } +} diff --git a/crates/osprey-codegen/src/effects.rs b/crates/osprey-codegen/src/effects.rs index d45dd8ce..5b1e7e70 100644 --- a/crates/osprey-codegen/src/effects.rs +++ b/crates/osprey-codegen/src/effects.rs @@ -72,6 +72,9 @@ fn ret_and_exit( params: &[(LType, String)], ret: &Value, ) { + // Nested-function epilogue: the return transfers +1, owned locals drop + // [GC-ARC-PERCEUS]. + crate::arc::epilogue(cg, Some(ret)); cg.emit(format!("ret {} {}", ret.llvm_ty(), ret.operand)); cg.exit_nested_fn(saved, &sig.ret_ty(), name, params); } @@ -440,6 +443,11 @@ pub(crate) fn gen_handler( let r = cg.fresh_reg(); cg.emit(format!("{r} = call i32 @__osprey_handler_pop()")); } + // The popped region's env reached its structural end: drop it (its mask + // releases the captured values) [GC-ARC-PERCEUS], plan 0011 M5. + if env != "null" { + crate::arc::release_operand(cg, &env); + } Ok(result) } @@ -494,13 +502,21 @@ fn build_env(cg: &mut Codegen, caps: &[ArmCap]) -> (String, String) { .collect::>() .join(", ") ); - let cell = cg.malloc_struct(&env_ty); + // Layout word: cell captures are `i8*` pointers to heap mut-cells, value + // captures mark themselves by slot type ([`crate::meta`]). + let mf: Vec<_> = caps + .iter() + .map(|c| crate::meta::MetaField::of_slot_ty(&c.slot_ty())) + .collect(); + let cell = cg.malloc_struct(&env_ty, crate::meta::struct_meta(&mf)); for (i, c) in caps.iter().enumerate() { let slot_ty = c.slot_ty(); let p = cg.emit_reg(format!( "getelementptr {env_ty}, {env_ty}* {cell}, i32 0, i32 {i}" )); let operand = store_operand(cg, c); + // The env's drop mask releases each captured pointer [GC-ARC-PERCEUS]. + crate::arc::dup_store(cg, &slot_ty, &operand); cg.emit(format!("store {slot_ty} {operand}, {slot_ty}* {p}")); } let env = cg.emit_reg(format!("bitcast {env_ty}* {cell} to i8*")); @@ -538,8 +554,11 @@ fn emit_handler_fn( bind_arm_params(cg, arm, sig, resolved, &mut params); let body = gen_expr(cg, &arm.body)?; let ret = if sig.ret_erased { - // An erased (generic) result returns boxed; the perform site unboxes - // it to its resolved type. Implements [EFFECTS-GENERIC-RUNTIME]. + // An erased (generic) result returns boxed — pointer-ness leaves the + // arm's frame, so dup before the epilogue drops it [GC-ARC-PERCEUS]. + crate::arc::escape_retain(cg, &body); + // The perform site unboxes it to its resolved type. Implements + // [EFFECTS-GENERIC-RUNTIME]. crate::effect_generics::box_erased(cg, body, resolved.map(|r| &r.ret)) } else if let Some(inner) = sig.ret_result_inner { if body.result_inner.is_some() { @@ -689,7 +708,15 @@ fn gen_resuming_handler( let _ = cg.call("i32", "__osprey_handler_pop", "", &[]); } cg.call_void("__osprey_coro_free", "i8*", &[&coro]); - Ok(unbox_from_i64(cg, &boxed, answer_ty)) + // The coro region ended: drop its env (mask releases the captures) + // [GC-ARC-PERCEUS], plan 0011 M5. + if env != "null" { + crate::arc::release_operand(cg, &env); + } + let out = unbox_from_i64(cg, &boxed, answer_ty); + // The body fn escape-retained its answer at the boxing site: own it here. + crate::arc::own(cg, &out); + Ok(out) } fn emit_resuming_body_fn( @@ -705,6 +732,7 @@ fn emit_resuming_body_fn( let body = crate::result::unwrap(cg, body_raw); let answer_ty = body.ty; let boxed = box_codegen_value(cg, body); + crate::arc::epilogue(cg, None); cg.emit(format!("ret i64 {}", boxed.operand)); cg.exit_nested_fn(saved, "i64", name, &[(LType::Ptr, String::from("__env"))]); Ok(answer_ty) @@ -781,6 +809,7 @@ fn emit_resuming_arm_fn(cg: &mut Codegen, arm: &HandlerArm, spec: &ArmFnSpec<'_> let body_raw = gen_expr(cg, &arm.body)?; let body = coerce_to(cg, body_raw, spec.answer_ty)?; let boxed = box_codegen_value(cg, body); + crate::arc::epilogue(cg, None); cg.emit(format!("ret i64 {}", boxed.operand)); cg.exit_nested_fn(saved, "i64", spec.name, ¶ms); Ok(()) @@ -911,6 +940,9 @@ pub(crate) fn gen_resume(cg: &mut Codegen, value: Option<&Expr>) -> Result Value { + // Every effect-boundary boxing erases pointer-ness from the ARC drop + // walk: dup so the unboxing side owns +1 [GC-ARC-PERCEUS]. + crate::arc::escape_retain(cg, &value); crate::effect_generics::box_raw_value(cg, value) } @@ -1000,12 +1032,20 @@ pub(crate) fn gen_perform( )); if sig.ret_erased { return Ok(match site { - Some(s) => crate::effect_generics::unbox_erased(cg, &r, &s.op.ret), + Some(s) => { + let v = crate::effect_generics::unbox_erased(cg, &r, &s.op.ret); + // The arm escape-retained before boxing: own the +1 here. + crate::arc::own(cg, &v); + v + } None => Value::new(r, LType::I64), }); } - Ok(match sig.ret_result_inner { + let out = match sig.ret_result_inner { Some(inner) => Value::result(r, inner), None => Value::new(r, sig.ret), - }) + }; + // The handler fn's epilogue transferred +1 [GC-ARC-PERCEUS]. + crate::arc::own(cg, &out); + Ok(out) } diff --git a/crates/osprey-codegen/src/expr.rs b/crates/osprey-codegen/src/expr.rs index 8f3458b5..c4644abc 100644 --- a/crates/osprey-codegen/src/expr.rs +++ b/crates/osprey-codegen/src/expr.rs @@ -133,8 +133,11 @@ fn gen_block(cg: &mut Codegen, statements: &[Stmt], value: Option<&Expr>) -> Res // symbol table, so a nested `let` rebinds (and leaks) the name in the // enclosing scope. The goldens in `examples/tested` rely on this — e.g. // block_statements' inner `let outer` is visible to the outer `outer + inner`. - for s in statements { + for (i, s) in statements.iter().enumerate() { crate::lower::gen_local_stmt(cg, s)?; + // Last-use drops: names the continuation no longer references die + // here, not at function end [GC-ARC-PERCEUS]. + crate::arc::release_dead_after(cg, statements.get(i + 1..).unwrap_or(&[]), value); } match value { Some(e) => gen_expr(cg, e), @@ -310,7 +313,9 @@ fn gen_str_concat(cg: &mut Codegen, l: Value, r: Value) -> Result { let buf = cg.heap_alloc(&total); let _ = cg.call("i8*", "strcpy", "i8*, i8*", &[&buf, &ls.operand]); let _ = cg.call("i8*", "strcat", "i8*, i8*", &[&buf, &rs.operand]); - Ok(Value::new(buf, LType::Str)) + let v = Value::new(buf, LType::Str); + crate::arc::own(cg, &v); + Ok(v) } /// The LLVM condition code for a comparison `op`. `float` picks the ordered @@ -598,11 +603,16 @@ pub(crate) fn call_with_values(cg: &mut Codegen, name: &str, args: Vec) - if let Some(inner) = cg.fn_ret_result_inner(name) { let rty = format!("{}*", crate::llty::result_struct_ty(inner)); let reg = emit_user_call(cg, name, &rty, &coerced, &typed); - return Ok(Value::result(reg, inner)); + let v = Value::result(reg, inner); + // Callee epilogues transfer +1 on every return [GC-ARC-PERCEUS]. + crate::arc::own(cg, &v); + return Ok(v); } let ret = cg.fn_ret_ltype(name).unwrap_or(LType::I64); let reg = emit_user_call(cg, name, ret.as_str(), &coerced, &typed); - Ok(Value::new(reg, ret).with_owner(cg.fn_ret_owner(name))) + let v = Value::new(reg, ret).with_owner(cg.fn_ret_owner(name)); + crate::arc::own(cg, &v); + Ok(v) } /// Emit a call to `name` returning LLVM type `rty`. A name with no user @@ -739,7 +749,9 @@ fn gen_interpolation(cg: &mut Codegen, parts: &[InterpolatedPart]) -> Result(arguments: &'a [Expr], named: &'a [NamedArgument]) -> Option<&'a Expr> { diff --git a/crates/osprey-codegen/src/extern_call.rs b/crates/osprey-codegen/src/extern_call.rs index cce9d377..e5084f99 100644 --- a/crates/osprey-codegen/src/extern_call.rs +++ b/crates/osprey-codegen/src/extern_call.rs @@ -160,10 +160,12 @@ fn emit(cg: &mut Codegen, sig: &Sig, ops: &[String]) -> Result { cg.call("i64", sig.cname, ¶ms, &op_refs), LType::I64, )), - Ret::Str => Ok(Value::new( - cg.call("i8*", sig.cname, ¶ms, &op_refs), - LType::Str, - )), + Ret::Str => { + // Fresh malloc'd C buffer — the caller owns it [GC-ARC-PERCEUS]. + let v = Value::new(cg.call("i8*", sig.cname, ¶ms, &op_refs), LType::Str); + crate::arc::own(cg, &v); + Ok(v) + } Ret::ResultInt => { let r = cg.call("i64", sig.cname, ¶ms, &op_refs); // The negative-i64 runtime convention carries no message string; @@ -172,6 +174,9 @@ fn emit(cg: &mut Codegen, sig: &Sig, ops: &[String]) -> Result { } Ret::ResultStr(err) => { let r = cg.call("i8*", sig.cname, ¶ms, &op_refs); + // Own the raw C buffer; the Result payload store dups its own +1, + // so this one drops at region end (null on the error path — no-op). + crate::arc::own(cg, &Value::new(&r, LType::Str)); result_from_nullable(cg, &r, err) } } diff --git a/crates/osprey-codegen/src/fiber.rs b/crates/osprey-codegen/src/fiber.rs index 9a08f603..f2e8cc10 100644 --- a/crates/osprey-codegen/src/fiber.rs +++ b/crates/osprey-codegen/src/fiber.rs @@ -56,7 +56,11 @@ fn thunk_body(cg: &mut Codegen, e: &Expr) -> Result { let v = gen_expr(cg, e)?; let v = crate::result::unwrap(cg, v); let elem = v.ty; + // The result escapes boxed across the fiber boundary: dup it before the + // thunk's owners drop, so `await`'s side holds +1 [GC-ARC-PERCEUS]. + crate::arc::escape_retain(cg, &v); let b = box_to_i64(cg, v); + crate::arc::epilogue(cg, None); cg.emit(format!("ret i64 {}", b.operand)); Ok(elem) } @@ -91,6 +95,9 @@ pub(crate) fn gen_send(cg: &mut Codegen, channel: &Expr, value: &Expr) -> Result let ch = gen_expr(cg, channel)?; let id = as_i64(cg, ch)?; let v = gen_expr(cg, value)?; + // The sent value escapes boxed into the channel buffer: the receiver's + // side owns +1 [GC-ARC-PERCEUS], plan 0011 M5. + crate::arc::escape_retain(cg, &v); let v = box_to_i64(cg, v); let r = cg.call( "i64", diff --git a/crates/osprey-codegen/src/freevars.rs b/crates/osprey-codegen/src/freevars.rs index 73d4567b..0874ed56 100644 --- a/crates/osprey-codegen/src/freevars.rs +++ b/crates/osprey-codegen/src/freevars.rs @@ -100,7 +100,15 @@ fn walk_rest(e: &Expr, bound: &mut Vec, out: &mut BTreeSet) { walk_arms(arms, bound, out); } Expr::Block { statements, value } => walk_block(statements, value.as_deref(), bound, out), - Expr::TypeConstructor { fields, .. } => walk_slice(fields, bound, out, |f| &f.value), + // `name { … }` where `name` is a bound local is a record UPDATE that + // reads `name` (`aggregate::gen_constructor` redirects; the parser + // cannot tell the forms apart). Noting a real type name is harmless: + // consumers filter against actual locals (captures via `cg.lookup`, + // liveness against `let`-bound ledger names). + Expr::TypeConstructor { name, fields, .. } => { + note(name, bound, out); + walk_slice(fields, bound, out, |f| &f.value); + } Expr::Update { record, fields } => { note(record, bound, out); walk_slice(fields, bound, out, |f| &f.value); @@ -140,17 +148,28 @@ fn walk_fiber(e: &Expr, bound: &mut Vec, out: &mut BTreeSet) { } } +/// Free identifiers of a block continuation (`statements`, then the tail +/// `value`) — the liveness query behind last-use drops [GC-ARC-PERCEUS]. +pub(crate) fn free_idents_of_stmts>( + statements: &[S], + value: Option<&Expr>, + out: &mut BTreeSet, +) { + let mut bound: Vec = Vec::new(); + walk_block(statements, value, &mut bound, out); +} + /// `let`s bind for the *rest* of the block, so statements thread the bound /// stack left to right and the whole block's bindings pop together. -fn walk_block( - statements: &[Stmt], +fn walk_block>( + statements: &[S], value: Option<&Expr>, bound: &mut Vec, out: &mut BTreeSet, ) { let depth = bound.len(); for s in statements { - match s { + match s.borrow() { Stmt::Let { name, value, .. } => { walk(value, bound, out); bound.push(name.clone()); diff --git a/crates/osprey-codegen/src/genfn.rs b/crates/osprey-codegen/src/genfn.rs index fe8af721..e15d8225 100644 --- a/crates/osprey-codegen/src/genfn.rs +++ b/crates/osprey-codegen/src/genfn.rs @@ -34,6 +34,9 @@ pub(crate) fn try_inline( let saved_aliases = cg.call_aliases.clone(); let saved_ptr_locals = cg.fn_ptr_locals.clone(); let saved_value_types = cg.fn_value_types.clone(); + // The inlined body executing covers the definition line, exactly as a + // monomorphic call covers it via gen_function [TESTING-COVERAGE-CODEGEN]. + cg.cov_hit_inline_fn(name); cg.push_scope(); let _ = cg.inlining.insert(name.to_string()); let result = (|| { diff --git a/crates/osprey-codegen/src/iter.rs b/crates/osprey-codegen/src/iter.rs index 12230b0d..6b0e5523 100644 --- a/crates/osprey-codegen/src/iter.rs +++ b/crates/osprey-codegen/src/iter.rs @@ -120,7 +120,7 @@ fn range(cg: &mut Codegen, args: &[Expr]) -> Result { let s = as_i64(cg, s)?; let e = gen_expr(cg, nth(args, 1)?)?; let e = as_i64(cg, e)?; - let obj = cg.malloc_struct(RANGE_TY); + let obj = cg.malloc_struct(RANGE_TY, crate::meta::KIND_RAW); crate::aggregate::store_field(cg, RANGE_TY, &obj, 0, LType::I64, &s.operand); crate::aggregate::store_field(cg, RANGE_TY, &obj, 1, LType::I64, &e.operand); Ok(Value::handle(obj, RANGE_OWNER)) @@ -171,8 +171,12 @@ fn for_each(cg: &mut Codegen, args: &[Expr]) -> Result { let (start, end) = bounds(cg, &range); let lp = open_range_loop(cg, &start, &end); + // Per-iteration ARC region: values the body owns drop before the + // back-edge, so slots are reusable next iteration [GC-ARC-PERCEUS]. + crate::arc::push_frame(cg); let elem = replay(cg, Value::new(lp.i.clone(), LType::I64), &lp.incr)?; let _ = invoke(cg, &consumer, vec![elem])?; + crate::arc::pop_frame(cg); close_range_loop(cg, &lp); Ok(range) } @@ -182,6 +186,9 @@ fn for_each(cg: &mut Codegen, args: &[Expr]) -> Result { fn acc_init(cg: &mut Codegen, args: &[Expr]) -> Result { let initial = gen_expr(cg, nth(args, 1)?)?; let initial = crate::result::unwrap(cg, initial); + // A pointer accumulator escapes into the loop-carried slot: dup it so the + // per-iteration region drop cannot free it [GC-ARC-PERCEUS]. + crate::arc::escape_retain(cg, &initial); let initial = box_to_i64(cg, initial); let acc = cg.fresh_reg(); cg.emit(format!("{acc} = alloca i64")); @@ -193,8 +200,17 @@ fn acc_init(cg: &mut Codegen, args: &[Expr]) -> Result { /// result back into the slot. fn acc_step(cg: &mut Codegen, acc: &str, combine: &Callback, elem: Value) -> Result<()> { let a = cg.emit_reg(format!("load i64, i64* {acc}")); - let new = invoke(cg, combine, vec![Value::new(a, LType::I64), elem])?; + let new = invoke(cg, combine, vec![Value::new(a.clone(), LType::I64), elem])?; let new = crate::result::unwrap(cg, new); + // Loop-carried slot rebind for a pointer accumulator: dup the incoming + // value BEFORE dropping the outgoing one (a combine returning `acc` + // unchanged must never free it). Keyed on the static type — an integer + // accumulator's bits must never be released [GC-ARC-PERCEUS]. + if matches!(new.ty, LType::Str | LType::Ptr) { + crate::arc::escape_retain(cg, &new); + let old = cg.emit_reg(format!("inttoptr i64 {a} to i8*")); + crate::arc::release_operand(cg, &old); + } let new = box_to_i64(cg, new); cg.emit(format!("store i64 {}, i64* {acc}", new.operand)); Ok(()) @@ -213,8 +229,10 @@ fn fold(cg: &mut Codegen, args: &[Expr]) -> Result { let (start, end) = bounds(cg, &range); let lp = open_range_loop(cg, &start, &end); + crate::arc::push_frame(cg); let elem = replay(cg, Value::new(lp.i.clone(), LType::I64), &lp.incr)?; acc_step(cg, &acc, &combine, elem)?; + crate::arc::pop_frame(cg); close_range_loop(cg, &lp); Ok(acc_result(cg, &acc)) @@ -231,7 +249,9 @@ fn for_each_list(cg: &mut Codegen, args: &[Expr]) -> Result { let l = list_arg(cg, args, 0)?; let consumer = callback_of(cg, nth(args, 1)?)?; let lp = open_list_loop(cg, &l.operand); + crate::arc::push_frame(cg); let _ = invoke(cg, &consumer, vec![Value::new(lp.elem.clone(), LType::I64)])?; + crate::arc::pop_frame(cg); close_list_loop(cg, &lp); Ok(l) } @@ -242,6 +262,7 @@ fn list_builder(cg: &mut Codegen, args: &[Expr], filter: bool) -> Result let f = callback_of(cg, nth(args, 1)?)?; let bld = crate::collections::list_builder_new(cg); let lp = open_list_loop(cg, &l.operand); + crate::arc::push_frame(cg); let elem = Value::new(lp.elem.clone(), LType::I64); if filter { let pred = invoke(cg, &f, vec![elem.clone()])?; @@ -259,9 +280,13 @@ fn list_builder(cg: &mut Codegen, args: &[Expr], filter: bool) -> Result } else { let mapped = invoke(cg, &f, vec![elem])?; let mapped = crate::result::unwrap(cg, mapped); + // The built list stores the mapped element: dup it before the + // per-iteration region drop [GC-ARC-PERCEUS]. + crate::arc::escape_retain(cg, &mapped); let boxed = box_to_i64(cg, mapped); crate::collections::list_builder_push(cg, &bld, &boxed.operand); } + crate::arc::pop_frame(cg); close_list_loop(cg, &lp); Ok(crate::collections::list_builder_seal(cg, &bld)) } @@ -272,7 +297,9 @@ fn fold_list(cg: &mut Codegen, args: &[Expr]) -> Result { let acc = acc_init(cg, args)?; let combine = callback_of(cg, nth(args, 2)?)?; let lp = open_list_loop(cg, &l.operand); + crate::arc::push_frame(cg); acc_step(cg, &acc, &combine, Value::new(lp.elem.clone(), LType::I64))?; + crate::arc::pop_frame(cg); close_list_loop(cg, &lp); Ok(acc_result(cg, &acc)) } diff --git a/crates/osprey-codegen/src/lib.rs b/crates/osprey-codegen/src/lib.rs index a3330ec1..73dee61d 100644 --- a/crates/osprey-codegen/src/lib.rs +++ b/crates/osprey-codegen/src/lib.rs @@ -12,12 +12,14 @@ //! into a module string. mod aggregate; +mod arc; mod builder; mod call; mod cast; mod closure; mod collections; mod conv; +mod coverage; mod effect_generics; mod effects; mod error; @@ -31,6 +33,7 @@ mod listlit; mod llty; mod loops; mod lower; +mod meta; mod pattern; mod result; mod runtime; @@ -40,7 +43,7 @@ mod types; pub use error::{CodegenError, Result}; pub use llty::{LType, Value}; -pub use lower::{compile_program, compile_program_debug}; +pub use lower::{compile_program, compile_program_coverage, compile_program_debug}; pub use osprey_debug::DebugSource; /// Every identifier referenced anywhere in `program` — function bodies, lets, diff --git a/crates/osprey-codegen/src/listlit.rs b/crates/osprey-codegen/src/listlit.rs index e9f8d6a8..3239fc77 100644 --- a/crates/osprey-codegen/src/listlit.rs +++ b/crates/osprey-codegen/src/listlit.rs @@ -45,10 +45,13 @@ fn lit_elem(osp_ty: Option<&str>) -> Option<(LType, Option)> { /// `[e0, e1, …]` → a flat `{ length, data }` block. pub(crate) fn gen_list(cg: &mut Codegen, elements: &[Expr]) -> Result { if elements.is_empty() { - let obj = cg.malloc_struct(LIST_STRUCT); + // No data block, no elements: nothing for the drop walk to release. + let obj = cg.malloc_struct(LIST_STRUCT, crate::meta::list_hdr_meta(false)); crate::aggregate::store_field(cg, LIST_STRUCT, &obj, 0, LType::I64, "0"); crate::aggregate::store_field(cg, LIST_STRUCT, &obj, 1, LType::Str, "null"); - return Ok(Value::handle(obj, lit_owner(&Value::new("", LType::Str)))); + let v = Value::handle(obj, lit_owner(&Value::new("", LType::Str))); + crate::arc::own(cg, &v); + return Ok(v); } // Evaluate elements; the first fixes the slot type. let mut vals = Vec::with_capacity(elements.len()); @@ -74,6 +77,9 @@ pub(crate) fn gen_list(cg: &mut Codegen, elements: &[Expr]) -> Result { cg.emit(format!("{arr} = bitcast i8* {data} to {}*", elem.as_str())); for (i, v) in vals.into_iter().enumerate() { let v = coerce_to(cg, v, elem)?; + // The header's drop releases pointer elements, so each store is a new + // reference [GC-ARC-PERCEUS]. + crate::arc::dup_store(cg, elem.as_str(), &v.operand); let slot = cg.fresh_reg(); cg.emit(format!( "{slot} = getelementptr {}, {}* {arr}, i64 {i}", @@ -87,13 +93,20 @@ pub(crate) fn gen_list(cg: &mut Codegen, elements: &[Expr]) -> Result { elem.as_str() )); } - let obj = cg.malloc_struct(LIST_STRUCT); + // The header's kind tells the ARC drop walk whether data[0..len) holds + // managed pointers (string/handle elements) or scalars ([`crate::meta`]). + let elems_are_ptrs = matches!(elem, LType::Str | LType::Ptr); + let obj = cg.malloc_struct(LIST_STRUCT, crate::meta::list_hdr_meta(elems_are_ptrs)); crate::aggregate::store_field(cg, LIST_STRUCT, &obj, 0, LType::I64, &n.to_string()); - crate::aggregate::store_field(cg, LIST_STRUCT, &obj, 1, LType::Str, &data); - Ok(Value::handle( - obj, - lit_owner(&Value::new("", elem).with_owner(elem_owner)), - )) + // The data array is the header's OWN allocation (the LIST_HDR drop frees + // it exactly once) — store it without a dup, unlike user-value fields. + let dp = cg.emit_reg(format!( + "getelementptr {LIST_STRUCT}, {LIST_STRUCT}* {obj}, i32 0, i32 1" + )); + cg.emit(format!("store i8* {data}, i8** {dp}")); + let v = Value::handle(obj, lit_owner(&Value::new("", elem).with_owner(elem_owner))); + crate::arc::own(cg, &v); + Ok(v) } /// `target[index]` — flat list-literal access (bounds-checked `Result`) or diff --git a/crates/osprey-codegen/src/lower.rs b/crates/osprey-codegen/src/lower.rs index ec5241d9..84907c9e 100644 --- a/crates/osprey-codegen/src/lower.rs +++ b/crates/osprey-codegen/src/lower.rs @@ -31,6 +31,23 @@ pub fn compile_program_debug(program: &Program, source: DebugSource) -> Result Result { + compile_program_with_options( + program, + CodegenOptions { + coverage: true, + ..CodegenOptions::default() }, ) } @@ -38,6 +55,9 @@ pub fn compile_program_debug(program: &Program, source: DebugSource) -> Result Result { let prog = osprey_types::infer_program(program); let mut cg = Codegen::with_options(prog, options); + // Seed the coverage denominator from the source, not from what lowering + // happens to reach [TESTING-COVERAGE-CODEGEN]. + cg.cov_seed(program); // Pre-pass: record parameter names so named-argument calls can be ordered, // and parse `effect` operation signatures for `handle`/`perform`. @@ -47,6 +67,7 @@ fn compile_program_with_options(program: &Program, options: CodegenOptions) -> R name, parameters, body, + position, .. } => { let _ = cg.fn_params.insert( @@ -54,11 +75,13 @@ fn compile_program_with_options(program: &Program, options: CodegenOptions) -> R parameters.iter().map(|p| p.name.clone()).collect(), ); // A polymorphic function is specialised by inlining at each call - // site, so keep its body reachable. + // site, so keep its body reachable — and its definition line + // coverable through the inline path [TESTING-COVERAGE-CODEGEN]. if cg.is_generic_fn(name) { let _ = cg .fn_defs .insert(name.clone(), (parameters.clone(), body.clone())); + cg.cov_note_inline_fn(name, *position); } } Stmt::Effect { @@ -114,17 +137,23 @@ fn compile_program_with_options(program: &Program, options: CodegenOptions) -> R // OSPREY_PROFILE is set [PROF-ACTIVATE-ENV], docs/specs/0028-Profiler.md. cg.add_extern("declare void @osp_prof_boot()"); cg.emit("call void @osp_prof_boot()"); + // Register every coverable line's counter before user code runs; the + // init body is rendered after all lowering [TESTING-COVERAGE-CODEGEN]. + cg.cov_emit_boot(); if let Some((body, _)) = user_main { cg.cell_vars = crate::effects::captured_mut_vars(body); let _ = gen_expr(&mut cg, body)?; } else { cg.cell_vars = crate::effects::captured_mut_vars_in_stmts(&top_level); - for stmt in &top_level { + for (i, stmt) in top_level.iter().enumerate() { gen_local_stmt(&mut cg, stmt)?; + let rest = top_level.get(i + 1..).unwrap_or(&[]); + crate::arc::release_dead_after(&mut cg, rest, None); } } // A program that used the testing built-ins exits with the TAP epilogue's // status (plan + summary printed by the runtime) [TESTING-EXIT]. + crate::arc::epilogue(&mut cg, None); if cg.testing_used { let code = cg.call("i32", "osp_test_finalize", "", &[]); cg.emit(format!("ret i32 {code}")); @@ -173,8 +202,14 @@ fn gen_function( params.push((*pty, p.name.clone())); } cg.cell_vars = crate::effects::captured_mut_vars(body); + // The definition line counts as covered when the body executes + // [TESTING-COVERAGE-CODEGEN]. + cg.cov_hit(position); let body_val = gen_fn_body(cg, name, body)?; let ret = coerce_return(cg, name, body_val)?; + // Returns transfer +1; everything else the function owned drops here + // [GC-ARC-PERCEUS]. + crate::arc::epilogue(cg, Some(&ret)); cg.emit(format!("ret {} {}", ret.llvm_ty(), ret.operand)); cg.finish_function(&ret.llvm_ty(), name, ¶ms); Ok(()) @@ -216,7 +251,16 @@ fn coerce_return(cg: &mut Codegen, name: &str, body: Value) -> Result { crate::cast::coerce_to(cg, body, ret_ty) } +/// Lower a statement inside its own ARC region: temporaries the statement +/// produced and did not bind drop at its end [GC-ARC-PERCEUS]. pub(crate) fn gen_local_stmt(cg: &mut Codegen, stmt: &Stmt) -> Result<()> { + crate::arc::push_frame(cg); + let lowered = gen_stmt_kind(cg, stmt); + crate::arc::pop_frame(cg); + lowered +} + +fn gen_stmt_kind(cg: &mut Codegen, stmt: &Stmt) -> Result<()> { match stmt { // A `mut` an effect handler captures is promoted to a shared heap cell so // the handler owns it; its declaration allocates the cell and a @@ -274,6 +318,9 @@ fn with_stmt_debug( f: impl FnOnce(&mut Codegen) -> Result<()>, ) -> Result<()> { let previous = cg.set_debug_position(position); + // Every positioned statement is a coverable line, bumped where control + // flow reaches it [TESTING-COVERAGE-CODEGEN]. + cg.cov_hit(position); let result = f(cg); cg.restore_debug_position(previous); result @@ -287,10 +334,13 @@ fn gen_cell_define(cg: &mut Codegen, name: &str, value: &Expr) -> Result<()> { let v = crate::result::unwrap(cg, raw); let pointee = v.ty; let ty = pointee.as_str(); - let cell = cg.malloc_struct(&format!("{{ {ty} }}")); + let meta = crate::meta::struct_meta(&[crate::meta::MetaField::of_lty(pointee)]); + let cell = cg.malloc_struct(&format!("{{ {ty} }}"), meta); let ptr = cg.emit_reg(format!( "getelementptr {{ {ty} }}, {{ {ty} }}* {cell}, i32 0, i32 0" )); + // The cell holds its own reference to the stored value [GC-ARC-PERCEUS]. + crate::arc::dup_store(cg, ty, &v.operand); cg.emit(format!("store {ty} {}, {ty}* {ptr}", v.operand)); let _ = cg.cell_slots.insert( name.to_string(), @@ -315,6 +365,13 @@ fn gen_cell_store(cg: &mut Codegen, name: &str, value: &Expr) -> Result<()> { let v = crate::result::unwrap(cg, raw); let v = crate::cast::coerce_to(cg, v, slot.pointee)?; let ty = slot.pointee.as_str(); + // Rebind order: dup the incoming value BEFORE dropping the old one, so a + // self-assignment never frees the value it stores [GC-ARC-PERCEUS]. + crate::arc::dup_store(cg, ty, &v.operand); + if matches!(slot.pointee, LType::Str | LType::Ptr) { + let old = cg.emit_reg(format!("load {ty}, {ty}* {}", slot.ptr)); + crate::arc::release_operand(cg, &old); + } cg.emit(format!("store {ty} {}, {ty}* {}", v.operand, slot.ptr)); Ok(()) } @@ -343,6 +400,7 @@ fn gen_bind(cg: &mut Codegen, name: &str, value: &Expr, unwrap: bool) -> Result< if let Some(sig) = Codegen::fn_value_sig(&ty) { let v = crate::closure::emit_closure(cg, parameters, body, &sig)?; cg.emit_debug_local(name, &v); + crate::arc::bind_owned(cg, name, &v); cg.bind(name.to_string(), v); cg.bind_fn_local(name, ty); } @@ -379,6 +437,9 @@ fn gen_bind(cg: &mut Codegen, name: &str, value: &Expr, unwrap: bool) -> Result< cg.bind_fn_local(name, ty); } cg.emit_debug_local(name, &v); + // The binding outlives the statement region: move the statement's + // ownership out, or retain a borrow [GC-ARC-PERCEUS]. + crate::arc::bind_owned(cg, name, &v); cg.bind(name.to_string(), v); Ok(()) } diff --git a/crates/osprey-codegen/src/meta.rs b/crates/osprey-codegen/src/meta.rs new file mode 100644 index 00000000..1425c422 --- /dev/null +++ b/crates/osprey-codegen/src/meta.rs @@ -0,0 +1,180 @@ +//! Per-allocation layout metadata for `@osp_alloc_tagged` — the kind + word +//! bitmask the ARC backend stores in the object header. Implements +//! [GC-ARC-PERCEUS] (docs/plans/0011 phase 2, Amendment 1): codegen knows the +//! exact layout at each alloc site, so it passes the layout down instead of +//! relying on a pointers-first `scan_fsize` convention the existing ABIs +//! (tag-first records, `Result`'s trailing errmsg, `HttpResponse`'s C layout) +//! would violate. Non-counting backends ignore the word. +//! +//! Encoding (must match `compiler/runtime/memory_arc.c`): low 8 bits a kind, +//! upper 56 a bitmask — bit `8 + i` set ⇒ the 8-byte word at body offset +//! `8 * i` is a managed pointer the drop walk releases. + +use crate::llty::LType; + +/// Opaque bytes: no children to release. The default for plain `osp_alloc`. +pub(crate) const KIND_RAW: i64 = 0; +/// Children live at the masked word offsets. +pub(crate) const KIND_MASK: i64 = 1; +/// `{ i64 len, i8* data }` with pointer elements: release `data[0..len)`, +/// then `data`. +pub(crate) const KIND_LIST_HDR_PTR: i64 = 2; +/// `{ i64 len, i8* data }` with scalar elements: release `data` only. +pub(crate) const KIND_LIST_HDR_SCALAR: i64 = 3; + +/// Highest word index the 56-bit mask can name. +const MASK_MAX_WORD: u64 = 55; + +/// One struct field as the layout calculator sees it. Pointer-typed fields are +/// split by whether the ARC drop should release them: capture cells' leading +/// function pointer and other code/foreign pointers are `PtrOpaque`. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub(crate) enum MetaField { + /// 8-byte scalar (`i64` / `double`). Never marked — a boxed pointer in an + /// `i64` slot stays unmarked (leak-safe): a false release could corrupt, + /// a missed one only leaks. See plan 0011 phase 2 cross-cutting risks. + Word, + /// 8-byte managed pointer — the drop walk releases it. + PtrManaged, + /// 8-byte pointer the drop walk must NOT release (code pointer, foreign). + PtrOpaque, + /// 1-byte field (`i1` / `i8`). + Byte, + /// 4-byte field (`i32`). + Half, +} + +impl MetaField { + fn size_align(self) -> u64 { + match self { + MetaField::Word | MetaField::PtrManaged | MetaField::PtrOpaque => 8, + MetaField::Byte => 1, + MetaField::Half => 4, + } + } + + /// The layout field for a value of LLVM type `lty`: pointers are managed + /// (`Str`/`Ptr` values are heap handles; rodata/foreign pointers are + /// covered by the runtime's registry probe-miss). + pub(crate) fn of_lty(lty: LType) -> MetaField { + match lty { + LType::Str | LType::Ptr => MetaField::PtrManaged, + LType::I1 => MetaField::Byte, + LType::I32 => MetaField::Half, + LType::I64 | LType::Double => MetaField::Word, + } + } + + /// The layout field for a textual LLVM slot type (closure / effect-env + /// cells spell their slots as strings): any pointer spelling is managed. + pub(crate) fn of_slot_ty(slot_ty: &str) -> MetaField { + match slot_ty { + "i1" | "i8" => MetaField::Byte, + "i32" => MetaField::Half, + "i64" | "double" => MetaField::Word, + s if s.ends_with('*') => MetaField::PtrManaged, + _ => MetaField::Word, + } + } +} + +/// The meta word for a struct laid out from `fields` in order, natural +/// alignment (LLVM's rules for this field set). Falls back to `KIND_RAW` +/// (leak-safe, never corrupting) when a managed pointer lands beyond the +/// mask's reach. +pub(crate) fn struct_meta(fields: &[MetaField]) -> i64 { + let mut off: u64 = 0; + let mut mask: u64 = 0; + for f in fields { + let sa = f.size_align(); + off = off.div_ceil(sa) * sa; + if *f == MetaField::PtrManaged { + let word = off / 8; + if word > MASK_MAX_WORD { + return KIND_RAW; + } + mask |= 1u64 << word; + } + off += sa; + } + if mask == 0 { + KIND_RAW + } else { + // Bit-preserving: word 55 lands on bit 63 (the sign bit); the runtime + // recovers the mask via an unsigned cast (memory_arc.c OSP_ARC_MASK_BITS). + i64::from_ne_bytes( + ((mask << 8) | u64::from_ne_bytes(KIND_MASK.to_ne_bytes())).to_ne_bytes(), + ) + } +} + +/// The meta word for a flat list-literal header `{ i64 len, i8* data }`. +pub(crate) fn list_hdr_meta(elems_are_ptrs: bool) -> i64 { + if elems_are_ptrs { + KIND_LIST_HDR_PTR + } else { + KIND_LIST_HDR_SCALAR + } +} + +#[cfg(test)] +mod tests { + use super::*; + + fn mask_words(meta: i64) -> Vec { + // Same bit-preserving recovery the runtime uses (OSP_ARC_MASK_BITS). + let bits = u64::from_ne_bytes(meta.to_ne_bytes()) >> 8; + (0..=MASK_MAX_WORD) + .filter(|w| bits & (1 << w) != 0) + .collect() + } + + #[test] + fn result_block_masks_depend_on_payload() { + // { i64, i8, i8* }: payload word 0 unmarked, errmsg at offset 16. + let m = struct_meta(&[MetaField::Word, MetaField::Byte, MetaField::PtrManaged]); + assert_eq!(m & 0xFF, KIND_MASK); + assert_eq!(mask_words(m), vec![2]); + // { i8*, i8, i8* }: payload word 0 marked too. + let m = struct_meta(&[ + MetaField::PtrManaged, + MetaField::Byte, + MetaField::PtrManaged, + ]); + assert_eq!(mask_words(m), vec![0, 2]); + // { i1, i8, i8* }: i1 packs to one byte, errmsg realigns to offset 8. + let m = struct_meta(&[MetaField::Byte, MetaField::Byte, MetaField::PtrManaged]); + assert_eq!(mask_words(m), vec![1]); + } + + #[test] + fn http_response_marks_words_1_2_5() { + // { i64, i8*, i8*, i64, i8, i8* } — the fixed C ABI (http_shared.h). + let m = struct_meta(&[ + MetaField::Word, + MetaField::PtrManaged, + MetaField::PtrManaged, + MetaField::Word, + MetaField::Byte, + MetaField::PtrManaged, + ]); + assert_eq!(mask_words(m), vec![1, 2, 5]); + } + + #[test] + fn scalar_structs_and_opaque_pointers_are_raw() { + assert_eq!(struct_meta(&[MetaField::Word, MetaField::Word]), KIND_RAW); + // Closure cell with no managed captures: fnptr is opaque. + assert_eq!( + struct_meta(&[MetaField::PtrOpaque, MetaField::Word]), + KIND_RAW + ); + } + + #[test] + fn oversized_structs_fall_back_to_raw() { + let mut fields = vec![MetaField::Word; 56]; + fields.push(MetaField::PtrManaged); + assert_eq!(struct_meta(&fields), KIND_RAW); + } +} diff --git a/crates/osprey-codegen/src/result.rs b/crates/osprey-codegen/src/result.rs index e8d26407..083102dc 100644 --- a/crates/osprey-codegen/src/result.rs +++ b/crates/osprey-codegen/src/result.rs @@ -29,7 +29,14 @@ pub(crate) fn make_result( let v = coerce_to(cg, value, inner)?; let payload_owner = v.osp_ty.clone(); let struct_ty = result_struct_ty(inner); - let obj = cg.malloc_struct(&struct_ty); + // Layout word: payload word 0 managed iff pointer-typed; the errmsg slot + // is always a (possibly rodata) pointer — the registry probe sorts it out. + let meta = crate::meta::struct_meta(&[ + crate::meta::MetaField::of_lty(inner), + crate::meta::MetaField::Byte, + crate::meta::MetaField::PtrManaged, + ]); + let obj = cg.malloc_struct(&struct_ty, meta); crate::aggregate::store_field(cg, &struct_ty, obj.as_str(), 0, inner, &v.operand); let dp = cg.fresh_reg(); cg.emit(format!( @@ -40,8 +47,18 @@ pub(crate) fn make_result( cg.emit(format!( "{mp} = getelementptr {struct_ty}, {struct_ty}* {obj}, i32 0, i32 2" )); + // The block's drop mask releases the errmsg word too [GC-ARC-PERCEUS]. + crate::arc::dup_store(cg, "i8*", errmsg); cg.emit(format!("store i8* {errmsg}, i8** {mp}")); - Ok(Value::result(obj, inner).with_payload_owner(payload_owner)) + let out = Value::result(obj, inner).with_payload_owner(payload_owner); + crate::arc::own(cg, &out); + // A scalar payload plus a non-register errmsg (null / rodata constant) + // means the block holds zero managed references — eligible for the + // consume-at-unwrap fast path that lets -O2 delete the whole block. + if !matches!(inner, LType::Str | LType::Ptr) && !errmsg.starts_with('%') { + crate::arc::mark_pure_scalar(cg, &out); + } + Ok(out) } /// A Success result wrapping `value` (disc 0, no message). @@ -214,7 +231,9 @@ pub(crate) fn repack_to_inner(cg: &mut Codegen, v: Value, inner: LType) -> Resul /// yielding its success payload; a non-Result value passes through. pub(crate) fn unwrap(cg: &mut Codegen, v: Value) -> Value { if v.result_inner.is_some() { - load_value(cg, &v) + let out = load_value(cg, &v); + crate::arc::consume_fresh(cg, &v); + out } else { v } diff --git a/crates/osprey-codegen/src/runtime.rs b/crates/osprey-codegen/src/runtime.rs index dc06c693..e364387b 100644 --- a/crates/osprey-codegen/src/runtime.rs +++ b/crates/osprey-codegen/src/runtime.rs @@ -94,6 +94,7 @@ fn sprintf_wrap(cg: &mut Codegen, fmt: &str, arg: &str) -> String { "{tmp} = call i32 (i8*, i8*, ...) @sprintf(i8* {buf}, i8* {}, i8* {arg})", fmtv.operand )); + crate::arc::own(cg, &Value::new(&buf, LType::Str)); buf } @@ -119,7 +120,9 @@ pub(crate) fn int_to_string(cg: &mut Codegen, v: Value) -> Result { "{tmp} = call i32 (i8*, i8*, ...) @sprintf(i8* {buf}, i8* {}, i64 {})", fmt.operand, i.operand )); - Ok(Value::new(buf, LType::Str)) + let v = Value::new(buf, LType::Str); + crate::arc::own(cg, &v); + Ok(v) } /// Whole-valued floats must print with a trailing `.0`; the runtime handles @@ -131,7 +134,9 @@ pub(crate) fn float_to_string(cg: &mut Codegen, v: &Value) -> Value { "{reg} = call i8* @osp_float_to_string(double {})", v.operand )); - Value::new(reg, LType::Str) + let out = Value::new(reg, LType::Str); + crate::arc::own(cg, &out); + out } pub(crate) fn bool_to_string(cg: &mut Codegen, v: &Value) -> Value { diff --git a/crates/osprey-codegen/src/strings.rs b/crates/osprey-codegen/src/strings.rs index 2a50780a..7d4c5d07 100644 --- a/crates/osprey-codegen/src/strings.rs +++ b/crates/osprey-codegen/src/strings.rs @@ -164,10 +164,11 @@ fn unary_str( _named: &[NamedArgument], ) -> Result { let s = arg(cg, args, 0, LType::Str)?; - Ok(Value::new( - cg.call("i8*", cname, "i8*", &[&s.operand]), - LType::Str, - )) + let v = Value::new(cg.call("i8*", cname, "i8*", &[&s.operand]), LType::Str); + // The C string runtime mints fresh malloc'd outputs (+1) — never aliases + // its inputs — so the caller owns every return [GC-ARC-PERCEUS]. + crate::arc::own(cg, &v); + Ok(v) } /// `f(s: string, n: int) -> string`. @@ -180,7 +181,9 @@ fn str_int_str( let s = arg(cg, args, 0, LType::Str)?; let n = arg(cg, args, 1, LType::I64)?; let r = cg.call("i8*", cname, "i8*, i64", &[&s.operand, &n.operand]); - Ok(Value::new(r, LType::Str)) + let v = Value::new(r, LType::Str); + crate::arc::own(cg, &v); + Ok(v) } /// A runtime predicate returning `i64` truthiness, narrowed to `i1`. `sig` lists @@ -244,6 +247,8 @@ fn substring(cg: &mut Codegen, args: &[Expr], _named: &[NamedArgument]) -> Resul "i8*, i64, i64", &[&s.operand, &start.operand, &end.operand], ); + // The raw +1 return is owned here; the Result block dups its own copy. + crate::arc::own(cg, &Value::new(&ptr, LType::Str)); result_from_nullable(cg, &ptr, Some("substring: index out of range")) } @@ -261,6 +266,7 @@ fn nullable_str( let (ops, params) = typed_args_for_types(cg, argtys, args)?; let op_refs: Vec<&str> = ops.iter().map(String::as_str).collect(); let ptr = cg.call("i8*", cname, ¶ms, &op_refs); + crate::arc::own(cg, &Value::new(&ptr, LType::Str)); result_from_nullable(cg, &ptr, Some(errmsg)) } @@ -298,7 +304,9 @@ fn parse_strict( fn string_list(cg: &mut Codegen, cname: &str, args: &[Expr]) -> Result { let s = arg(cg, args, 0, LType::Str)?; let r = cg.call("i8*", cname, "i8*", &[&s.operand]); - Ok(Value::handle(r, crate::collections::LIST_OWNER)) + let v = Value::handle(r, crate::collections::LIST_OWNER); + crate::arc::own(cg, &v); + Ok(v) } /// `split(s, sep) -> Result, _>` (NULL ⇒ Error, e.g. empty sep). @@ -311,6 +319,7 @@ fn split(cg: &mut Codegen, args: &[Expr]) -> Result { "i8*, i8*", &[&s.operand, &sep.operand], ); + crate::arc::own(cg, &Value::new(&ptr, LType::Ptr)); let iserr = cg.fresh_reg(); cg.emit(format!("{iserr} = icmp eq i8* {ptr}, null")); make_result_if_err( @@ -363,6 +372,7 @@ fn typed_args_for_types( fn from_codepoint(cg: &mut Codegen, args: &[Expr]) -> Result { let cp = arg(cg, args, 0, LType::I64)?; let ptr = cg.call("i8*", "osp_string_from_codepoint", "i64", &[&cp.operand]); + crate::arc::own(cg, &Value::new(&ptr, LType::Str)); result_from_nullable(cg, &ptr, Some("fromCodePoint: invalid code point")) } @@ -376,5 +386,7 @@ fn join(cg: &mut Codegen, args: &[Expr], _named: &[NamedArgument]) -> Result) -> String { match self { BuildKind::Debug => debug_override.unwrap_or_else(|| "-O0".to_string()), - BuildKind::Release | BuildKind::Profile => release_default, + BuildKind::Release | BuildKind::Profile | BuildKind::Coverage => release_default, } } @@ -82,7 +85,7 @@ impl BuildKind { #[must_use] pub fn native_driver_flags(self) -> Vec { match self { - BuildKind::Release => Vec::new(), + BuildKind::Release | BuildKind::Coverage => Vec::new(), BuildKind::Debug | BuildKind::Profile => { vec!["-g".to_string(), "-fno-omit-frame-pointer".to_string()] } @@ -92,7 +95,7 @@ impl BuildKind { /// Whether codegen should emit source-level debug metadata (DWARF). #[must_use] pub fn wants_debug_info(self) -> bool { - !matches!(self, BuildKind::Release) + matches!(self, BuildKind::Debug | BuildKind::Profile) } } @@ -203,4 +206,17 @@ mod tests { assert!(BuildKind::Debug.wants_debug_info()); assert!(!BuildKind::Release.wants_debug_info()); } + + // [TESTING-COVERAGE-CODEGEN]: coverage builds run at release optimization + // with no DWARF — the counters, not line tables, carry the attribution. + #[test] + fn coverage_build_is_optimized_without_debug_info() { + let coverage = BuildKind::Coverage; + assert_eq!( + coverage.opt_flag("-O2".to_string(), Some("-O0".to_string())), + "-O2" + ); + assert!(coverage.native_driver_flags().is_empty()); + assert!(!coverage.wants_debug_info()); + } } diff --git a/crates/osprey-lsp/src/diagnostics.rs b/crates/osprey-lsp/src/diagnostics.rs index 99bc4cfb..17471cef 100644 --- a/crates/osprey-lsp/src/diagnostics.rs +++ b/crates/osprey-lsp/src/diagnostics.rs @@ -32,6 +32,9 @@ pub fn compute(source: &str, path: &str, encoding: PositionEncoding) -> Vec Option> { + if !osprey_project::needs_assembly(program) { + return None; + } + let file = file_path(uri).unwrap_or_else(|| PathBuf::from(uri)); + let flavor = + osprey_syntax::resolve_flavor(None, uri, source).unwrap_or(osprey_syntax::Flavor::Default); + let source_file = osprey_project::SourceFile { + path: file.clone(), + flavor, + source: source.to_string(), + program: program.clone(), + }; + Some(assembly_diagnostics( + osprey_project::assemble_one(source_file), + source, + &file, + encoding, + )) +} + +/// Map an assembly outcome to diagnostics for the open `file`: type errors on +/// success, project errors on failure. +fn assembly_diagnostics( + assembled: Result>, + source: &str, + file: &Path, + encoding: PositionEncoding, +) -> Vec { + match assembled { + Ok(project) => assembled_type_errors(source, file, &project, encoding), + Err(errors) => project_errors(source, file, &errors, encoding), + } +} + fn project_diagnostics( source: &str, uri: &str, @@ -66,10 +114,12 @@ fn project_diagnostics( .find(|candidate| same_path(&candidate.path, &file))?; source_file.source = source.to_string(); source_file.program = program.clone(); - match osprey_project::assemble(&config, &sources) { - Ok(project) => Some(assembled_type_errors(source, &file, &project, encoding)), - Err(errors) => Some(project_errors(source, &file, &errors, encoding)), - } + Some(assembly_diagnostics( + osprey_project::assemble(&config, &sources), + source, + &file, + encoding, + )) } fn assembled_type_errors( @@ -322,6 +372,22 @@ mod tests { } } + #[cfg(unix)] + #[test] + fn module_bearing_files_outside_project_roots_are_assembled_standalone() { + // The editor regression: a self-contained test suite living in `test/` + // (outside `source_roots = ["src"]`) defines `module Money` and calls + // `Money::positive`. `osprey --check` and `osprey test` accept it + // via single-source assembly; the LSP must not spray + // `unknown identifier `Money::positive`` by checking the raw AST. + let root = Path::new(env!("CARGO_MANIFEST_DIR")).join("../.."); + let path = root.join("examples/projects/modules/test/accounts.test.ospml"); + let source = std::fs::read_to_string(&path).expect("read module test suite"); + let uri = format!("file://{}", path.display()); + let diagnostics = compute(&source, &uri, U16); + assert!(diagnostics.is_empty(), "{diagnostics:?}"); + } + #[cfg(unix)] #[test] fn project_diagnostics_map_resolution_and_type_errors_to_the_open_file() { diff --git a/crates/osprey-project/src/lib.rs b/crates/osprey-project/src/lib.rs index 7d3cd7ed..4911563a 100644 --- a/crates/osprey-project/src/lib.rs +++ b/crates/osprey-project/src/lib.rs @@ -179,6 +179,34 @@ pub fn assemble( assemble::assemble(config, sources) } +/// Module-bearing single files need resolver/flattening; ordinary scripts must +/// bypass it so their existing IR and debugger symbol names remain exact. +#[must_use] +pub fn needs_assembly(program: &osprey_ast::Program) -> bool { + use osprey_ast::Stmt; + program.statements.iter().any(|statement| { + matches!( + statement, + Stmt::Namespace { .. } | Stmt::Module { .. } | Stmt::Import(_) | Stmt::Signature { .. } + ) + }) +} + +/// Assemble one module-aware source in isolation, without sweeping up sibling +/// files — the single-file path shared by the CLI and the language server. +/// +/// # Errors +/// +/// Returns all project graph, import, signature, entry, and state diagnostics. +pub fn assemble_one(source_file: SourceFile) -> Result> { + let root = source_file + .path + .parent() + .map_or_else(|| PathBuf::from("."), Path::to_path_buf); + let config = ProjectConfig::for_root(&root); + assemble(&config, &[source_file]) +} + /// Load and assemble a directory project in one operation. /// /// # Errors diff --git a/docs/plans/0011-arc-gc-implementation.md b/docs/plans/0011-arc-gc-implementation.md index 971001fc..e3fa280c 100644 --- a/docs/plans/0011-arc-gc-implementation.md +++ b/docs/plans/0011-arc-gc-implementation.md @@ -3,10 +3,20 @@ **Status:** Phase 1 (conservative tracing GC) is **shipped and green** — `--memory=gc` links a mark & sweep archive, the differential harness passes byte-identically under it (`make _conformance-gc`), and the benchmark suite -carries an `Osprey (GC)` column (binarytrees 2.5 GB → ~11 MB). Phases 2–4 -(the Perceus ARC default, the Cheney copying oracle, and `--static-memory`) -are **not started** — `osp_retain`/`osp_release` are no-op stubs, there is -no per-allocation object header, and no ownership analysis exists. See +carries an `Osprey (GC)` column (binarytrees 2.5 GB → ~11 MB). Phase 2 +(the Perceus ARC default) is **in progress — M0–M3 landed and green, plus +M6's last-use drops and the soundness cores of M4/M5**: `--memory=arc` +links a real counting backend (16-byte header, probe-first registry +retain/release, kind/mask drop walk, leak stats); codegen threads a full +ownership ledger (`crates/osprey-codegen/src/arc.rs` — producers own +1, +dup-on-store, slot-based drops at region end, returns transfer +1, drop at +last use); the harness passes byte-identically under **all three backends** +(PASS=148 FAIL=0 each), and `OSPREY_ARC_DEBUG=1` reports **zero live +language values** for container-free programs. Remaining in phase 2: +container *node-level* RC (M4b — containers are currently leak-safe: +headers reclaim, interior trie/HAMT nodes and stored elements do not), +the M5 drain/atomic tail, and M6 borrow inference / drop-guided reuse. +Phases 3–4 (Cheney oracle, `--static-memory`) are **not started**. See [§What is left](#what-is-left-detailed). Realises the [MEM-BACKENDS] contract of @@ -64,26 +74,40 @@ safe way to validate the whole boundary end-to-end. ### `[GC-ARC-PERCEUS]` — reference counting, **default backend** (phase 2) Precise reference counting following **Perceus** (Reinking, Xie, de Moura, -Leijen, *Perceus: Garbage Free Reference Counting with Reuse*, PLDI 2021): +Leijen, *Perceus: Garbage Free Reference Counting with Reuse*, PLDI 2021). +The **normative implementation reference is the extended technical report** +[MSR-TR-2020-42 v1](https://www.microsoft.com/en-us/research/wp-content/uploads/2020/11/perceus-tr-v1.pdf) — +it carries what the conference paper compresses: the full λ¹ linear resource +calculus, the complete syntax-directed dup/drop insertion algorithm (Fig. 6–7), +the reference-counted heap semantics with the precision theorem ("garbage +free": a value is freed at its last dynamic use), drop specialization, and the +drop-guided reuse-token rules. Every phase-2 algorithm below names the TR +section it implements: - **Borrow inference** `[GC-ARC-BORROW]` — owned vs borrowed parameters via the `collectO` fix-point of Ullrich & de Moura, *Counting Immutable Beans* (IFL 2019). Inspectors compile reference-count-free. - **dup/drop insertion** with borrowing to delay `dup` to the actual last use - (Perceus λ¹ rules); **drop specialization** (the `is-unique` test) on the hot - path. -- **Reuse analysis** `[GC-ARC-REUSE]` — `drop-reuse` tokens turn a unique - matched cell into an in-place write (FBIP), so a functional `map`/`tree-map` - runs as in-place mutation when uniquely owned. -- **Object header** (Koka model, one 8-byte word): pointer fields laid out - first, a `scan_fsize` count for the generic drop/trace fallback, a 16-bit - tag, and a **signed** non-atomic refcount (`0` = unique ⇒ cheapest free test, - `<0` = cross-fiber / persistent ⇒ the only atomic path). - -This requires the codegen work the conservative GC avoids: per-allocation type -info in the header, and a dup/drop insertion pass between type-checking and -codegen (which is today a direct AST→LLVM-text lowering with no SSA IR — the -pass introduces the structured form Perceus needs). + (Perceus λ¹ rules — TR §2.2–2.4, the syntax-directed algorithm of TR Fig. 6 + over owned environments Δ and borrowed environments); **drop specialization** + (the `is-unique` test expanded inline so the unique path frees with no + recursive entry — TR §2.5.2) on the hot path. +- **Reuse analysis** `[GC-ARC-REUSE]` — `drop-reuse` tokens (TR §2.5.1, + drop-guided reuse) turn a unique matched cell into an in-place write (FBIP), + so a functional `map`/`tree-map` runs as in-place mutation when uniquely + owned. +- **Object header** (Koka model, one 8-byte word, TR §2.5): a **signed** + non-atomic refcount (`<0` = cross-fiber / persistent ⇒ the only atomic + path), a 16-bit `kind`, and 16 bits of flags at `body−8`. Child layout does + NOT come from a `scan_fsize`-with-pointers-first convention — existing + ABIs forbid reordering (see Phase 2, Amendment 1) — but from a per-site + pointer-map word codegen passes to `osp_alloc_tagged(size, meta)`. + +This requires the codegen work the conservative GC avoids: per-allocation +layout info at the alloc call, and dup/drop insertion — landed sound-first +(scope-based naive RC) and made precise after (TR Fig. 6–7), because the +backend is a direct AST→LLVM-text lowering with no SSA IR (see Phase 2, +Amendment 3). ### `[GC-TRACE-CHENEY]` — precise copying GC (phase 3, conformance oracle) @@ -98,8 +122,11 @@ oracle that keeps [MEM-OPAQUE] honest — must be byte-identical to ARC. ```c void* osp_alloc(int64_t size); // the existing hook (all backends) -void osp_retain(void* o); // dup — no-op under tracing -void osp_release(void* o); // drop — no-op under tracing +void* osp_alloc_tagged(int64_t size, int64_t meta); // layout-carrying alloc: + // ARC stores kind+pointer-mask in the + // header; default/gc ignore meta +void osp_retain(void* o); // dup — no-op under tracing; probe-first under ARC +void osp_release(void* o); // drop — no-op under tracing; probe-first under ARC void osp_collect(void); // full GC — no-op under ARC (acyclic ⇒ complete) ``` @@ -161,44 +188,193 @@ column. **No remaining work in phase 1.** - [x] `make _conformance-gc` differential harness target. - [x] `Osprey (GC)` benchmark column. -### Phase 2 — Perceus ARC (the default backend) — ⬜ NOT STARTED - -The big one, and the only phase that touches codegen. Prerequisites and steps, -in dependency order: - -- [ ] **Per-allocation object header** (Koka/Perceus model, one 8-byte word): - pointer fields laid out first, a `scan_fsize` count for the generic - drop/trace fallback, a 16-bit tag, and a **signed non-atomic** refcount - (`0` = unique ⇒ cheapest free test, `<0` = cross-fiber/persistent ⇒ the - only atomic path). Codegen must emit this header at every `@osp_alloc` - site and populate `scan_fsize`/tag from the allocated type. **Nothing - like this exists today** — the conservative GC needs no header, so this - is greenfield in `osprey-codegen` and the runtime. -- [ ] **A structured IR (or SSA-ish form) between type-check and codegen.** - Codegen is a direct AST→LLVM-text lowering with no intermediate form; - Perceus dup/drop insertion needs explicit binding/last-use structure. - Decide: a thin CPS/ANF pass, or an owned/borrowed-annotated AST walk. -- [ ] **Borrow inference** `[GC-ARC-BORROW]` — owned vs borrowed parameters - via the `collectO` fix-point (Ullrich & de Moura, *Counting Immutable - Beans*). Inspectors compile refcount-free. -- [ ] **dup/drop insertion** (Perceus λ¹ rules) with borrowing to delay `dup` - to the actual last use; **drop specialization** (the `is-unique` test) - on the hot path. -- [ ] **Reuse analysis** `[GC-ARC-REUSE]` — `drop-reuse` tokens turn a unique - matched cell into an in-place write (FBIP) so functional `map`/tree - updates run in place when uniquely owned. -- [ ] **Wire `osp_retain`/`osp_release`** (currently no-op stubs in - `memory_gc.c`) to the real signed-refcount dup/drop; add - `libfiber/http_runtime_arc.a` archives and `--memory=arc`. -- [ ] **Cross-fiber / persistent path**: the atomic refcount branch for - values escaping a fiber (`<0` refcount), reusing - `[MEM-FIBER-ISOLATION]` so the common case stays non-atomic. -- [ ] **Conformance**: `--memory=arc` must pass the full differential harness - byte-identically and leak zero language values; add an `Osprey (ARC)` - benchmark column. +### Phase 2 — Perceus ARC (the default backend) — 🟨 IN PROGRESS + +The big one, and the only phase that touches codegen. A full-code survey +(2026-07) resolved two questions the original sketch left open, and both +**amend the design**: + +**Amendment 1 — the header is `{rc, kind}` + a caller-supplied pointer map, +NOT `scan_fsize` with pointers-first layout.** Every existing aggregate +violates "pointer fields laid out first": records/variants are +`{ i64 tag, fields… }` (tag first), `Result` is `{ T, i8, i8* }` (the errmsg +pointer *last*), closure cells lead with a *code* pointer that must never be +traced, and `HttpResponse` is a fixed C ABI (`http_shared.h`). Reordering +would break the match ABI and the C contracts. Instead codegen — which knows +the exact layout at each of the 16 alloc sites, including per-instantiation +generic boxing (`cast.rs` ptrtoint into `i64` slots) — passes the layout down +at allocation time through one new shared-IR primitive: + +```c +void *osp_alloc_tagged(int64_t size, int64_t meta); // meta: low 8 bits = kind, + // upper 56 = word bitmask + // (bit i ⇒ the 8-byte word + // at offset 8·i is a + // managed pointer) +``` + +`default`/`gc` backends ignore `meta` (malloc / managed-table passthrough); +the ARC backend stores it in the 8-byte header +(`{ int32_t rc; uint16_t kind; uint16_t flags }` at `body−8`, TR §2.5's Koka +header adapted). Kinds cover the non-mask shapes: `RAW` (opaque bytes), +`MASK` (bitmask-driven drop), `LIST_HDR_PTR`/`LIST_HDR_SCALAR` (flat list +literal header: drop walks `data[0..len]` releasing elements iff PTR, then +releases `data`). `rc` stays **signed**: `<0` is reserved for the +cross-fiber atomic path exactly as originally planned. + +**Amendment 2 — provenance is dynamic: an allocation registry, not static +knowledge.** Pointer slots at runtime carry, besides ARC-heap pointers: +rodata string literals (`@.str.N`), constant capture-free closure cells, +static C-runtime error strings (`string_runtime.c` cursor messages), foreign +`malloc`/`strdup` memory (`read_file`, `input`, `termReadKey`, JSON gets), +**borrowed** FFI pointers (`sqlite3_column_text`), opaque FFI handles +(sqlite `Ptr`s), and NULL. No `Value` field or type distinguishes them, and +`extern fn` returns carry no ownership annotation. Therefore +`osp_retain`/`osp_release` **probe an open-addressing registry of live ARC +allocations first** (the exact table discipline `memory_gc.c` already +proves): probe miss ⇒ not ours ⇒ no-op. This makes every non-ARC pointer +safe by construction — no IR special-casing, no FFI annotations needed for +soundness (annotations become a later *precision* upgrade). Registry probes +also protect the type-blind container slots: a raw `i64` that merely looks +like an address can still false-retain (leak-safe) but is never blindly +written through — and codegen-side dup/drop only ever passes values it knows +are pointer-typed, so the collision surface is the container path only. + +**Amendment 3 — sound-then-precise sequencing.** The TR's *garbage-free* +precision (drop at last dynamic use, Fig. 6–7), borrow inference, drop +specialization (§2.5.2), and reuse (§2.5.1) are **performance/peak-memory +tiers, not correctness gates**. Conformance (byte-identical output + zero +leaked language values) is met by *complete naive RC*: constructors own +(+1), stores/captures/sends dup, every owner drops at its region end +(function epilogue, match-arm exit before the `br` to the join, mut-cell +rebind, statement end for unbound temporaries). Perceus precision then moves +those drops earlier and elides refcounts without observable change — +verified by the same harness, and later cross-checked by the phase-3 Cheney +oracle. This de-risks the schedule: the codebase's direct AST→text emitter +(specialization-by-inlining *during* emission means position-keyed +annotations are unsound) gets ownership as a ledger threaded through the +existing walk's clean choke points (`bind`/`finish_phi`/single-`ret`), not a +new IR — the thin-ANF rewrite stays an option for the precision tier, not a +prerequisite for soundness. + +Milestones, in landing order — **every one keeps the full differential +harness green under BOTH `default` and `arc`**: + +- [x] **M0 — symbols everywhere.** ✅ No-op `osp_retain`/`osp_release`/ + `osp_collect`/`osp_alloc_tagged` in the default backend + (`memory_runtime.c` — and thus the wasm archive, `WASM_RT_SRC` includes + `memory_runtime`); `osp_alloc_tagged` passthrough in the GC backend. + Shared IR may reference them under any backend. +- [x] **M1 — the ARC backend core.** ✅ `memory_arc.c`: header'd `osp_alloc`/ + `osp_alloc_tagged` (16-byte header `{meta, rc, size}`, `rc=1`), the + live-allocation registry (open addressing, tombstone deletion), + probe-first `osp_retain`/`osp_release`, mask/kind worklist drop (no C + recursion, no re-entrant locking), `OSPREY_ARC_DEBUG=1` leak stats to + **stderr** at exit. `osp_arc_shim.h` redirects `malloc`/`calloc`/ + `realloc`/`free`/`strdup` in list/map/hamt/string/string-list/json. + `FIB_OBJ_ARC`/`HTTP_OBJ_ARC` archives (17 objects incl. + `coverage_runtime.o`), `--memory=arc` accepted, `make _conformance-arc`. + **Conformance: PASS=148 FAIL=0 byte-identical** with the ARC archives + linked — the seam is validated end-to-end exactly as phase 1's GC was. +- [x] **M2 — tagged allocation.** ✅ Codegen's `malloc_struct` takes a + per-site meta word (`crates/osprey-codegen/src/meta.rs`: kind + mask + from a struct-layout calculator mirroring LLVM's rules for the + i64/double/i8*/i8/i1/i32 field set; `Result`'s errmsg word index + depends on `T`, pinned by unit tests). Records/objects/updates mark + `Str`/`Ptr` fields; closure cells mark captures but not the leading + code pointer; effect envs mark cell pointers; list-literal headers + carry `LIST_HDR_PTR`/`LIST_HDR_SCALAR`; `HttpResponse` keeps its C ABI + (mask marks words 1, 2, 5). Boxed-generic `i64` slots stay unmarked — + leak-safe by design. Raw buffers stay plain `osp_alloc` (kind RAW). + Harness green under both `default` and `arc`. +- [x] **M3 — sound naive RC** ✅ (conformance milestone): dup-on-store / + drop-at-region-end per Amendment 3, ownership ledger in + `crates/osprey-codegen/src/arc.rs` (swapped wholesale across + `enter_nested_fn`/`exit_nested_fn`). Callee borrows arguments; every + producer owns (+1); returns transfer +1 (function/closure/handler-arm + epilogues retain-return-then-release-owners). Mut-cell rebind releases + the old value (`gen_cell_store`). Match arms / guard diamonds / loops + need **no special drop placement**: every owner spills to a + null-initialized entry-block slot (`%arc.sN`), region-end drops load + the slot, release, and re-null it — untaken paths leave slots null and + `osp_release(null)`/probe-miss is a no-op, so drops are dominance-free + by construction (this replaces the planned before-join-`br` and + `finish_phi` special cases). Per-statement and per-loop-iteration + regions (`gen_local_stmt`, `iter.rs` loop bodies); fold accumulators + retain-new-before-release-old keyed on static type. C-runtime + `Ret::Str` returns owned (+1 via the M1 shim). Leak gate **met**: + container-free harness examples report **zero live language values at + exit** under `OSPREY_ARC_DEBUG=1`. +- [x] **M4a — container soundness under codegen ownership.** ✅ The pieces + without which M3's owned handles corrupt under `--memory=arc`: + alias-returning ops **retain-on-return** (`osprey_list_concat`/`_drop`, + `osprey_map_remove`/`_merge` — every return path now carries +1); + the empty-list singleton is **immortal** (`osp_mem_immortal`, rc<0, + declared backend-neutrally in `memory_hooks.h` with no-ops in + `memory_runtime.c`/`memory_gc.c`); elements/keys are **dup'd at + insertion** on the codegen side, keyed on the static HM type + (`stored_boxed_arg` — append/prepend, `mapSet`, map literals, built + lists' mapped elements); `osprey_map_merge` releases its unaliased + intermediate headers. Containers are **leak-safe, not garbage-free**: + dead headers reclaim; interior trie/HAMT nodes and stored elements + intentionally leak (a container never releases, so sharing can never + dangle). Flat list-literal headers (`LIST_HDR_PTR`/`SCALAR`) drop + precisely, elements included. +- [ ] **M4b — container node RC** (garbage-free containers): element-kind + flags at container creation, node refcounts inside the C ops + (`clone_node`'s 31 shared children = 31 dups; path-copy sharing, + `merge_leaves` node reuse), leaf-element release keyed on the flag, + immortal/out-of-line internal arrays (`children`, `coll_*`, + string-list `items`) freed with their owning node, map string *keys* + released like values. This is where "zero leaked language values" + extends to container programs. +- [x] **M5a — boundary dups + the spawn-cell release.** ✅ Every + pointer-erasing boundary dups before `box_to_i64` (single choke point + `box_codegen_value` for effects; `thunk_body`/`gen_send` for fibers; + fold-accumulator slots), so the receiving side always holds +1. + Spawn-capture cells: the spawn transfers its cell (+1) to the runtime + and `run_fiber_fn` releases it when the thunk returns (backend-neutral + via `memory_hooks.h`). Handler env cells release at handler close + (`gen_handler`) / after `coro_free` (resuming handlers). Effect + `perform` results and resuming-handle results are owned, balanced by + arm/body escape-retains. +- [ ] **M5b — boundary drains + the atomic tier.** Channel buffers drained + at channel end, coro mailboxes (`args[16]`/`resume_value`/`result`) + drained in `__osprey_coro_abort`, `test_runtime.c`'s `skip_reason`, + the handler-returned `HttpResponse` (runtime releases after send), + `recv`'s untracked unboxed result. Until then these edges are + leak-safe (values arrive +1 and are never released). The **atomic + refcount branch** (`rc<0`) flips at the *syntactic* boundary + (spawn/send/snapshot) — never off runtime threading — so deterministic + and threaded fiber modes refcount identically ([MEM-BACKENDS] + byte-identical rule); v1 soundness comes from the global mutex. +- [x] **M6a — drop at last use.** ✅ TR Fig. 6's owned-environment insertion: + after each function-level statement, `release_dead_after` computes the + continuation's free identifiers (`freevars::free_idents_of_stmts`) and + drops `let`-bound owners the rest of the block never references — + gated to ledger depth 1 so a nested block/loop region can never free + an enclosing scope's names (a tail block IS the continuation, so the + gate composes). Applies to `main`'s top level too. +- [ ] **M6b — Perceus precision tier** `[GC-ARC-BORROW]` `[GC-ARC-REUSE]`: + `collectO` borrow inference (Ullrich & de Moura), drop specialization + (TR §2.5.2), drop-guided reuse/FBIP (§2.5.1). Byte-identical by + construction; peak-RSS deltas land in the benchmark table. Revisit the + thin-ANF IR here if in-walk insertion proves too entangled. +- [ ] **Conformance & benchmarks**: `--memory=arc` passes the full harness + byte-identically with zero leaked language values; `Osprey (ARC)` + benchmark column (binarytrees peak RSS next to default's 2.5 GB and + GC's ~11 MB). *Current state: harness byte-identical under all three + backends (PASS=148 each); zero live values holds for container-free + programs, container programs await M4b.* - [ ] Decide whether ARC *replaces* `default` as the shipped default or stays opt-in until the Cheney oracle (phase 3) validates it. +Known perf note: `retain`/`release` calls on an allocation defeat LLVM's +dead-allocation elimination (the `OSP_ALLOC_DECL` attributes) until drop +specialization / borrow inference (M6) removes them from non-escaping paths; +`osp_alloc_tagged` carries the same allocator attributes so the default +backend keeps today's `-O2` behaviour throughout. + ### Phase 3 — Precise Cheney copying GC (conformance oracle) — ⬜ NOT STARTED Depends on the phase-2 header for precise tracing. @@ -226,21 +402,35 @@ Built on phase-2's ownership analysis; no runtime component. ### Cross-cutting risks for phases 2–4 - The header + dup/drop pass is the first thing in the compiler that needs a - form richer than the current AST→text lowering; underestimating that IR - work is the main schedule risk. + form richer than the current AST→text lowering; the sound-first sequencing + (Amendment 3) bounds that risk, but the M6 precision tier may still force + the thin-ANF IR — underestimating that work is the main schedule risk. - Every new backend must clear the same conformance bar phase 1 already meets: byte-identical harness output and zero leaked language values. The Cheney oracle exists specifically to catch ARC bugs the harness output alone would not. -- `scan_fsize`/tag must agree between codegen (emit) and the runtime - (trace/drop); a mismatch corrupts the heap silently — pin it with a shared - layout test. +- The kind+mask meta must agree between codegen (emit) and the runtime + (drop/trace); a mismatch corrupts the heap silently — pin it with a shared + layout test (the Rust layout calculator vs C `offsetof` asserts). +- Container slots are type-blind `i64`s; the registry probe makes a scalar + that collides with a live ARC address *leak-safe* (false retain) but the + container milestone (M4) must never blindly release raw slots — element + releases key off the creation-time element-kind flag, nothing else. +- FFI (`extern fn`) returns are foreign/borrowed and stay unmanaged via + registry probe-miss; a later precision upgrade may add per-extern + ownership annotations, but soundness never depends on them. ## References +- **Reinking, Xie, de Moura, Leijen. *Perceus: Garbage Free Reference Counting + with Reuse.* Microsoft Research Technical Report MSR-TR-2020-42 v1, Nov 2020. + + — the normative phase-2 reference: λ¹ calculus and heap semantics (§2.2–2.3), + syntax-directed dup/drop insertion (Fig. 6–7), the garbage-free precision + theorem, drop specialization (§2.5.2), drop-guided reuse (§2.5.1), and the + Koka object header layout this plan adopts.** The PLDI 2021 paper of the same + name is the archival version; where they differ in detail, follow the TR. - Bacon, Cheng, Rajan. *A Unified Theory of Garbage Collection.* OOPSLA 2004. -- Reinking, Xie, de Moura, Leijen. *Perceus: Garbage Free Reference Counting - with Reuse.* PLDI 2021. - Ullrich, de Moura. *Counting Immutable Beans.* IFL 2019. - Cheney. *A Nonrecursive List Compacting Algorithm.* CACM 13(11), 1970. - Blackburn, McKinley. *Immix: A Mark-Region Garbage Collector.* PLDI 2008. diff --git a/docs/specs/0018-MemoryManagement.md b/docs/specs/0018-MemoryManagement.md index a1a87abd..62bf44c0 100644 --- a/docs/specs/0018-MemoryManagement.md +++ b/docs/specs/0018-MemoryManagement.md @@ -20,9 +20,16 @@ you no longer need. ## Status -Partially implemented — the *boundary* exists and a first *reclaiming* backend -ships (tracing GC, opt-in via `--memory=gc`); the ARC default is next -([implementation plan 0011](../plans/0011-arc-gc-implementation.md)). +Partially implemented — the *boundary* exists, a first *reclaiming* backend +ships (tracing GC, opt-in via `--memory=gc`), and the Perceus ARC backend is +**counting for real** (`--memory=arc` links the counting runtime — header, +registry, kind/mask drop — and the compiler now inserts the full Perceus +dup/drop discipline: producers own +1, dup-on-store, drops at region end and +at last use, returns transfer +1. Byte-identical on the full differential +harness under all three backends; container-free programs report zero live +language values at exit. Containers are leak-safe pending node-level RC — +[implementation plan 0011](../plans/0011-arc-gc-implementation.md) phase 2, +milestones M4b/M5b/M6b). - **Swappable backend boundary [MEM-BACKENDS]: done.** All codegen heap allocation funnels through a single `@osp_alloc` hook (osprey-codegen @@ -177,7 +184,12 @@ source code: - **ARC (default)** — non-atomic reference counting on the shared residue, statically elided wherever ownership is provable. Complete without a - cycle collector because the heap is acyclic [MEM-ACYCLIC]. + cycle collector because the heap is acyclic [MEM-ACYCLIC]. The algorithm + is **Perceus** (Reinking, Xie, de Moura, Leijen), implemented from the + extended technical report + [MSR-TR-2020-42](https://www.microsoft.com/en-us/research/wp-content/uploads/2020/11/perceus-tr-v1.pdf): + precise, garbage-free reference counting (every value freed at its last + dynamic use), with drop specialization and drop-guided reuse. - **Tracing GC** — the conformance oracle that keeps [MEM-OPAQUE] honest. **Backend portability.** The two reclaiming backends need different things from diff --git a/docs/specs/0027-TestingFramework.md b/docs/specs/0027-TestingFramework.md index 53b48393..66ebdf9c 100644 --- a/docs/specs/0027-TestingFramework.md +++ b/docs/specs/0027-TestingFramework.md @@ -238,7 +238,7 @@ gate — any Osprey program may call the testing built-ins. ## CLI -### `osprey test [path] [--filter ] [--quiet]` — `[TESTING-CLI-RUN]` +### `osprey test [path] [--filter ] [--quiet] [--coverage] [--coverage-json ]` — `[TESTING-CLI-RUN]` Runs test files and aggregates results. `path` (default `.`) is either a single file (run as-is, regardless of naming) or a directory searched @@ -269,6 +269,46 @@ test that is a function or lambda body, the enclosing declaration's line. Dynamically named tests (non-literal first argument) still run and report via TAP; they are simply not listed statically. +## Line coverage + +**`[TESTING-COVERAGE-CLI]`** `osprey test --coverage` builds each suite with +line-coverage instrumentation, runs it, and prints one +`# coverage: P% (covered/total lines) ` row per suite (suppressed by +`--quiet`) plus a final `# coverage total: P% (covered/total lines)` row. +Coverage never changes suite outcomes or the exit code. +`--coverage-json ` (implies `--coverage`) also writes the merged +machine-readable report **`[TESTING-COVERAGE-JSON]`**: +`{"files":{"":{"lines":{"":hits}}}}` — 1-based source +lines, every coverable line present (hit count `0` when unexecuted). + +**`[TESTING-COVERAGE-CODEGEN]`** With coverage on +(`osprey_codegen::compile_program_coverage`, +`crates/osprey-codegen/src/coverage.rs`), the coverable-line universe is +seeded from the AST up front — function definition lines and positioned +statements, recursing through blocks, lambdas, match/handler arms, and +module/namespace bodies — so a never-executed (even never-lowered) line +still counts against the total. Lowering bumps a per-line `i64` counter +global inline where control flow reaches it: at each function body entry +(including inline-specialised generic bodies at their call sites) and before +each positioned statement. A generated `__osp_cov_init`, called at the top +of `main` before user code, registers every counter with the runtime. +Coverage builds keep release optimization and emit no DWARF. + +**`[TESTING-COVERAGE-RUNTIME]`** `compiler/runtime/coverage_runtime.c` +(dependency-free C11, in every runtime archive) exposes +`osp_cov_register_line(line, &counter)`. Inert unless +**`[TESTING-COVERAGE-ENV]`** `OSPREY_COVERAGE=` names the dump file at +process start; then an exit-time hook writes +**`[TESTING-COVERAGE-DUMP]`**: a `# osprey-coverage v1` header followed by +one ` ` row per registered line, ascending, zero-hit rows +included — a reader needs no other line universe. + +Lines are those of the compiled unit: a test suite compiles standalone, so +they are the suite file's own 1-based lines. Coverage measures the suite +file it instruments — the framework's suites embed the logic they exercise +(the `[TESTING-CLI-RUN]` isolation model), so the rate is the honest "did my +tests execute my code" number. + ## VS Code Test Explorer **`[TESTING-VSCODE]`** The extension ships a native Testing-API integration @@ -290,6 +330,13 @@ registered from `activate()` and packaged in the VSIX: matched against `--list-tests` is the text before the directive. Cases absent from the output are also marked skipped; a non-TAP failure (e.g. compile error) marks the file item errored with the compiler's stderr. +- **Coverage** (**`[TESTING-COVERAGE-VSCODE]`**): a second run profile + (`TestRunProfileKind.Coverage`) executes + `osprey test --coverage-json --quiet` per requested file + (`--filter ` for a single case), maps the same TAP stream, then + parses the `[TESTING-COVERAGE-JSON]` report into `FileCoverage` + + per-line `StatementCoverage` — VS Code shows the percentage in the Test + Coverage view and hit counts in the editor gutter. ## Runtime diff --git a/examples/projects/modules/src/web/bundle.ospml b/examples/projects/modules/src/web/bundle.ospml index d2da5276..daa0e7ac 100644 --- a/examples/projects/modules/src/web/bundle.ospml +++ b/examples/projects/modules/src/web/bundle.ospml @@ -7,4 +7,4 @@ module Bundle style () = "@layer reset,tokens,base,layout,components,utilities,responsive;@layer reset{*,*:before,*:after{box-sizing:border-box}html,body,#app{min-height:100%}html{background:#f5f6f2;color-scheme:light;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}body,h1,h2,h3,h4,p,figure,blockquote,dl,dd{margin:0}body{min-width:320px}button,input,select,textarea{color:inherit;font:inherit}button,[role=button]{cursor:pointer}img,svg{display:block;max-width:100%}ul,ol{margin:0;padding:0;list-style:none}table{border-collapse:collapse;border-spacing:0}}@layer tokens{:root{--ink-950: #071a1c;--ink-900: #0a2426;--ink-850: #102e30;--ink-800: #17383a;--ink-700: #2d5051;--ink-600: #4f6d6c;--ink-500: #718987;--ink-400: #9aa9a5;--ink-300: #c5ceca;--ink-200: #dde3df;--ink-150: #e9ece8;--ink-100: #f2f4f0;--paper: #f7f7f2;--white: #ffffff;--coral: #ff6b4a;--coral-dark: #d94d31;--coral-soft: #fff0e9;--mint: #9ee2c3;--mint-dark: #1e795a;--mint-soft: #e5f8ef;--gold: #e4b654;--gold-soft: #fff7df;--red: #c83852;--red-soft: #fff0f2;--blue: #3d71a9;--blue-soft: #edf5ff;--sidebar-width: 252px;--topbar-height: 82px;--page-gutter: clamp(24px, 3.4vw, 58px);--radius-xs: 8px;--radius-sm: 12px;--radius: 18px;--radius-lg: 26px;--radius-xl: 34px;--shadow-sm: 0 1px 2px rgb(7 26 28 / 5%), 0 8px 24px rgb(7 26 28 / 5%);--shadow: 0 2px 4px rgb(7 26 28 / 4%), 0 20px 54px rgb(7 26 28 / 9%);--shadow-float: 0 28px 80px rgb(7 26 28 / 20%);--ease-out: cubic-bezier(.16, 1, .3, 1);--font-sans: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;--font-display: \"Avenir Next\", Avenir, var(--font-sans)}}@layer base{body{background:radial-gradient(circle at 76% 0%,rgb(158 226 195 / 19%),transparent 25rem),var(--paper);color:var(--ink-900);font-family:var(--font-sans);font-size:15px;line-height:1.5}::selection{background:var(--mint);color:var(--ink-950)}:focus-visible{outline:3px solid rgb(255 107 74 / 30%);outline-offset:2px}a{color:inherit;text-decoration:none}h1,h2,h3,h4{color:var(--ink-950);font-family:var(--font-display);font-weight:700;letter-spacing:-.035em;line-height:1.1}h1{font-size:clamp(2rem,4vw,3.65rem)}h2{font-size:clamp(1.35rem,2vw,1.9rem)}h3{font-size:1.08rem}button{border:0}}@layer utilities{.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap}.tone-positive,.positive{color:var(--mint-dark)}.tone-negative,.negative{color:var(--red)}.text-right{text-align:right}.nowrap{white-space:nowrap}.mobile-only{display:none}}@layer layout{.app-shell{display:grid;grid-template-columns:var(--sidebar-width) minmax(0,1fr);min-height:100vh}.sidebar{position:fixed;z-index:40;inset:0 auto 0 0;display:flex;width:var(--sidebar-width);flex-direction:column;overflow:hidden;padding:28px 20px 22px;background:radial-gradient(circle at 30% 110%,rgb(158 226 195 / 13%),transparent 22rem),linear-gradient(152deg,var(--ink-850),var(--ink-950) 76%);color:#ffffffb8}.sidebar:after{position:absolute;right:-68px;bottom:12%;width:150px;height:150px;border:1px solid rgb(255 255 255 / 6%);border-radius:50%;box-shadow:0 0 0 28px #ffffff06,0 0 0 62px #ffffff04;content:\"\";pointer-events:none}.brand{position:relative;z-index:1;display:flex;align-items:center;gap:12px;min-height:46px;padding:0 10px;color:var(--white)}.brand-mark,.logo-mark{display:grid;width:38px;height:38px;flex:0 0 auto;place-items:center;border-radius:12px;background:var(--coral);box-shadow:0 9px 24px #ff6b4a47;color:var(--white);font-family:var(--font-display);font-size:1.1rem;font-weight:800}.brand-copy,.brand-name{display:grid;font-family:var(--font-display);font-size:1rem;font-weight:700;letter-spacing:-.02em;line-height:1.15}.brand-copy small,.brand-subtitle{margin-top:4px;color:#ffffff6b;font-family:var(--font-sans);font-size:.66rem;font-weight:600;letter-spacing:.11em;text-transform:uppercase}.sidebar-nav,.nav{position:relative;z-index:1;display:grid;gap:6px;margin-top:54px}.nav-label{padding:0 13px 9px;color:#ffffff57;font-size:.66rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase}.nav-item{position:relative;display:flex;width:100%;min-height:47px;align-items:center;gap:12px;border-radius:13px;padding:0 13px;background:transparent;color:#ffffff91;font-size:.88rem;font-weight:600;text-align:left;transition:color .18s ease,background .18s ease,transform .18s ease}.nav-item:hover{background:#ffffff0d;color:var(--white);transform:translate(2px)}.nav-item.active{background:#ffffff17;box-shadow:inset 0 0 0 1px #ffffff0d;color:var(--white)}.nav-item.active:before{position:absolute;left:-20px;width:4px;height:24px;border-radius:0 6px 6px 0;background:var(--coral);box-shadow:0 0 16px #ff6b4a99;content:\"\"}.nav-icon,.button-icon{display:grid;width:22px;flex:0 0 22px;place-items:center;font-size:1.03rem;line-height:1}.sidebar-footer,.profile-card{position:relative;z-index:1;display:flex;align-items:center;gap:10px;margin-top:auto;border:1px solid rgb(255 255 255 / 7%);border-radius:15px;padding:11px;background:#ffffff0a}.avatar{display:grid;width:36px;height:36px;flex:0 0 auto;place-items:center;border-radius:12px;background:var(--mint);color:var(--ink-950);font-size:.76rem;font-weight:800}.profile-copy{display:grid;min-width:0;color:var(--white);font-size:.78rem;font-weight:650}.profile-copy small{overflow:hidden;color:#ffffff61;font-size:.67rem;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.page{grid-column:2;min-width:0;min-height:100vh}.topbar{position:sticky;z-index:30;top:0;display:flex;height:var(--topbar-height);align-items:center;justify-content:space-between;gap:22px;border-bottom:1px solid rgb(7 26 28 / 6%);padding:0 var(--page-gutter);background:#f7f7f2d6;backdrop-filter:blur(20px) saturate(130%)}.topbar-title{display:grid;gap:2px}.topbar-title strong{font-family:var(--font-display);font-size:1rem;letter-spacing:-.02em}.topbar-title span,.topbar-subtitle{color:var(--ink-500);font-size:.74rem}.topbar-actions{display:flex;align-items:center;gap:9px}.page-content,.content{width:min(100%,1560px);margin-inline:auto;padding:34px var(--page-gutter) 64px}.page-header{display:flex;align-items:end;justify-content:space-between;gap:24px;margin-bottom:28px}.page-header-copy{display:grid;gap:8px}.page-header p,.lede,.muted{color:var(--ink-500)}.section-grid,.dashboard-grid{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(300px,.72fr);gap:20px;align-items:start}}@layer components{.eyebrow{color:var(--coral-dark);font-size:.68rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase}.hero-card{position:relative;isolation:isolate;display:grid;min-height:220px;overflow:hidden;align-content:space-between;border-radius:var(--radius-xl);padding:clamp(26px,4vw,44px);background:radial-gradient(circle at 78% 32%,rgb(158 226 195 / 28%),transparent 13rem),linear-gradient(130deg,var(--ink-900),var(--ink-950));box-shadow:var(--shadow);color:var(--white)}.hero-card:before,.hero-card:after{position:absolute;z-index:-1;border:1px solid rgb(255 255 255 / 7%);border-radius:50%;content:\"\"}.hero-card:before{top:-110px;right:-50px;width:310px;height:310px}.hero-card:after{right:48px;bottom:-190px;width:370px;height:370px;box-shadow:0 0 0 42px #ffffff05}.hero-card h1,.hero-card h2,.hero-card h3{color:var(--white)}.hero-label{margin-bottom:9px;color:#ffffff7f;font-size:.7rem;font-weight:700;letter-spacing:.11em;text-transform:uppercase}.hero-value{font-family:var(--font-display);font-size:clamp(2.5rem,6vw,4.9rem);font-weight:700;letter-spacing:-.065em;line-height:.95}.hero-meta{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:18px;margin-top:34px;color:#fff9}.hero-actions,.card-actions,.button-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px}.stat-grid,.tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-block:20px}.stat,.stat-card,.tile{position:relative;overflow:hidden;border:1px solid rgb(7 26 28 / 7%);border-radius:var(--radius);padding:21px;background:#ffffffdb;box-shadow:var(--shadow-sm)}.stat:after,.stat-card:after,.tile:after{position:absolute;top:-24px;right:-24px;width:70px;height:70px;border-radius:50%;background:var(--mint-soft);content:\"\";opacity:.7}.stat-label,.tile span{position:relative;z-index:1;display:block;color:var(--ink-500);font-size:.68rem;font-weight:750;letter-spacing:.09em;text-transform:uppercase}.stat-value,.tile b{position:relative;z-index:1;display:block;margin-top:9px;color:var(--ink-950);font-family:var(--font-display);font-size:clamp(1.35rem,2.5vw,2rem);font-weight:720;letter-spacing:-.045em;line-height:1}.stat-detail{position:relative;z-index:1;margin-top:10px;color:var(--ink-500);font-size:.74rem}.card{border:1px solid rgb(7 26 28 / 7%);border-radius:var(--radius-lg);background:#ffffffe0;box-shadow:var(--shadow-sm)}.card-header{display:flex;min-height:76px;align-items:center;justify-content:space-between;gap:18px;border-bottom:1px solid var(--ink-150);padding:20px 24px}.card-header-copy{display:grid;gap:4px}.card-title{font-family:var(--font-display);font-size:1.05rem;font-weight:700;letter-spacing:-.025em}.card-subtitle{color:var(--ink-500);font-size:.74rem}.card-body{padding:24px}.account-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.account-card{position:relative;display:grid;min-height:190px;overflow:hidden;align-content:space-between;border:1px solid rgb(7 26 28 / 8%);border-radius:23px;padding:22px;background:var(--white);box-shadow:var(--shadow-sm);text-align:left;transition:transform .22s var(--ease-out),border-color .18s ease,box-shadow .22s ease}.account-card:after{position:absolute;top:-52px;right:-52px;width:130px;height:130px;border:18px solid var(--mint-soft);border-radius:50%;content:\"\";opacity:.8}.account-card:hover,.account-card.active,.account-card.selected{border-color:#1e795a47;box-shadow:0 20px 55px #071a1c1f;transform:translateY(-4px)}.account-card.active,.account-card.selected{background:linear-gradient(145deg,var(--white),var(--mint-soft))}.account-card-top{position:relative;z-index:1;display:flex;align-items:center;justify-content:space-between;gap:12px}.account-number,.account-type{color:var(--ink-500);font-size:.68rem;font-weight:750;letter-spacing:.08em;text-transform:uppercase}.account-balance{position:relative;z-index:1;font-family:var(--font-display);font-size:clamp(1.6rem,3vw,2.25rem);font-weight:700;letter-spacing:-.05em}.account-owner{position:relative;z-index:1;margin-top:5px;color:var(--ink-600);font-size:.8rem;font-weight:600}.activity-list,.feed{display:grid}.activity-item,.feed li{display:grid;grid-template-columns:42px minmax(0,1fr) auto;align-items:center;gap:14px;min-height:73px;border-bottom:1px solid var(--ink-150);padding:12px 0}.activity-item:last-child,.feed li:last-child{border-bottom:0}.activity-icon,.kind{display:grid;width:40px;height:40px;place-items:center;border-radius:13px;background:var(--mint-soft);color:var(--mint-dark);font-size:.86rem;font-weight:800}.debit .activity-icon,.debit .kind{background:var(--gold-soft);color:#96701e}.refused .activity-icon,.refused .kind{background:var(--red-soft);color:var(--red)}.activity-copy,.what{min-width:0}.activity-title,.what{overflow:hidden;color:var(--ink-900);font-size:.84rem;font-weight:650;text-overflow:ellipsis;white-space:nowrap}.activity-meta,.what small{display:block;margin-top:3px;overflow:hidden;color:var(--ink-500);font-size:.72rem;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.activity-amount,.amt,.money{font-variant-numeric:tabular-nums;font-weight:720;letter-spacing:-.02em}.credit .activity-amount,.credit .amt,.money{color:var(--mint-dark)}.refused .activity-amount,.refused .amt{color:var(--red);text-decoration:line-through;text-decoration-thickness:1.5px}.table-wrap{overflow-x:auto}.data-table,table{width:100%;font-variant-numeric:tabular-nums}.data-table th,.data-table td,th,td{border-bottom:1px solid var(--ink-150);padding:15px 14px;text-align:left}.data-table th,th{color:var(--ink-500);font-size:.66rem;font-weight:750;letter-spacing:.09em;text-transform:uppercase}.data-table tbody tr,tbody tr{transition:background .16s ease}.data-table tbody tr:hover,tbody tr:hover{background:var(--ink-100)}.data-table tr:last-child td,tbody tr:last-child td{border-bottom:0}.num,.align-right{text-align:right}.badge,.status,.pill{display:inline-flex;min-height:25px;align-items:center;border-radius:999px;padding:4px 9px;background:var(--ink-100);color:var(--ink-600);font-size:.66rem;font-weight:750;letter-spacing:.035em}.status.success,.badge.success{background:var(--mint-soft);color:var(--mint-dark)}.status.warning,.badge.warning{background:var(--gold-soft);color:#896512}}@layer components{.btn,.button,.primary-button,.secondary-button,.icon-button{display:inline-flex;min-height:44px;align-items:center;justify-content:center;gap:9px;border:1px solid transparent;border-radius:13px;padding:0 17px;background:var(--ink-900);box-shadow:0 9px 22px #071a1c1f;color:var(--white);font-size:.78rem;font-weight:700;transition:transform .18s var(--ease-out),box-shadow .18s ease,background .18s ease,border-color .18s ease}.btn:hover,.button:hover,.primary-button:hover,.secondary-button:hover,.icon-button:hover{box-shadow:0 13px 28px #071a1c2e;transform:translateY(-2px)}.btn:active,.button:active,.primary-button:active,.secondary-button:active,.icon-button:active{transform:translateY(0)}.btn.primary,.button.primary,.primary-button{background:var(--coral);box-shadow:0 11px 24px #ff6b4a3b}.btn.primary:hover,.button.primary:hover,.primary-button:hover{background:#ff7657}.btn.secondary,.button.secondary,.secondary-button{border-color:var(--ink-200);background:var(--white);box-shadow:none;color:var(--ink-900)}.btn.ghost,.button.ghost,.icon-button{border-color:transparent;background:transparent;box-shadow:none;color:var(--ink-600)}.btn.danger,.button.danger{background:var(--red)}.btn:disabled,.button:disabled,button:disabled{cursor:not-allowed;opacity:.45;transform:none}.icon-button{width:43px;min-height:43px;padding:0;border-color:var(--ink-200);border-radius:13px;background:#ffffffc2}.menu-button{display:none}.chip-row,.filter-row,.tabs{display:flex;flex-wrap:wrap;align-items:center;gap:7px}.chip,.tab{display:inline-flex;min-height:35px;align-items:center;justify-content:center;gap:7px;border:1px solid var(--ink-200);border-radius:999px;padding:0 13px;background:transparent;color:var(--ink-600);font-size:.72rem;font-weight:700;transition:.16s ease}.chip:hover,.tab:hover,.chip.active,.tab.active{border-color:var(--ink-900);background:var(--ink-900);color:var(--white)}.search-box{position:relative;min-width:min(100%,260px)}.search-box .field-control{padding-left:42px}.search-icon{position:absolute;z-index:1;top:50%;left:15px;color:var(--ink-400);transform:translateY(-50%);pointer-events:none}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.form-grid .full,.field.full,.form-actions{grid-column:1 / -1}.field{display:grid;gap:8px}.field-label{color:var(--ink-700);font-size:.71rem;font-weight:720;letter-spacing:.015em}.field-control{width:100%;height:48px;border:1px solid var(--ink-200);border-radius:13px;padding:0 14px;outline:none;background:var(--white);color:var(--ink-900);font-size:.83rem;transition:border-color .16s ease,box-shadow .16s ease,background .16s ease}textarea.field-control{min-height:104px;resize:vertical;padding-block:13px}.field-control::placeholder{color:var(--ink-400)}.field-control:hover{border-color:var(--ink-300)}.field-control:focus{border-color:var(--mint-dark);box-shadow:0 0 0 4px #1e795a1a}.form-actions{display:flex;align-items:center;justify-content:flex-end;gap:10px;margin-top:5px}.segmented{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px;border-radius:14px;padding:4px;background:var(--ink-100)}.segmented .chip{min-height:38px;border:0;border-radius:10px}.segmented .chip.active{background:var(--white);box-shadow:0 5px 15px #071a1c17;color:var(--ink-900)}.modal-backdrop{position:fixed;z-index:100;inset:0;display:grid;overflow-y:auto;place-items:center;padding:24px;background:#071a1c91;backdrop-filter:blur(10px);animation:fade-in .18s ease both}.modal{width:min(100%,590px);overflow:hidden;border:1px solid rgb(255 255 255 / 50%);border-radius:var(--radius-xl);background:var(--paper);box-shadow:var(--shadow-float);animation:modal-in .32s var(--ease-out) both}.modal-header{display:flex;align-items:start;justify-content:space-between;gap:20px;padding:28px 30px 22px}.modal-header-copy{display:grid;gap:7px}.modal-body{padding:0 30px 30px}.toast{position:fixed;z-index:120;right:24px;bottom:24px;display:grid;grid-template-columns:40px minmax(0,1fr) auto;width:min(calc(100vw - 32px),430px);align-items:center;gap:13px;border:1px solid rgb(255 255 255 / 11%);border-radius:18px;padding:15px;background:var(--ink-900);box-shadow:var(--shadow-float);color:var(--white);animation:toast-in .42s var(--ease-out) both}.toast.success{background:#155d48}.toast.error{background:#88273b}.toast-icon{display:grid;width:40px;height:40px;place-items:center;border-radius:12px;background:#ffffff1c;font-weight:800}.toast-copy{display:grid;gap:2px}.toast-copy strong{font-size:.8rem}.toast-copy span{color:#ffffffa1;font-size:.72rem}.empty-state{display:grid;min-height:250px;place-items:center;align-content:center;padding:40px;text-align:center}.empty-icon{display:grid;width:58px;height:58px;margin-bottom:17px;place-items:center;border-radius:19px;background:var(--mint-soft);color:var(--mint-dark);font-size:1.35rem}.empty-state p{max-width:390px;margin-top:8px;color:var(--ink-500);font-size:.79rem}.skeleton{overflow:hidden;border-radius:9px;background:var(--ink-150);color:transparent}.skeleton:after{display:block;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgb(255 255 255 / 65%),transparent);content:\"\";animation:shimmer 1.4s infinite;transform:translate(-100%)}.spinner{width:18px;height:18px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:spin .65s linear infinite}.host-error{display:grid;width:min(620px,calc(100% - 40px));min-height:100vh;margin:auto;place-content:center;gap:16px}.host-error-mark{display:grid;width:52px;height:52px;place-items:center;border-radius:17px;background:var(--coral);color:var(--white);font-family:var(--font-display);font-size:1.25rem;font-weight:800}.host-error p:not(.eyebrow){color:var(--ink-500)}.host-error pre{overflow:auto;border-radius:var(--radius);padding:18px;background:var(--ink-950);color:var(--mint);font-size:.75rem;white-space:pre-wrap}.boot-screen,.not-found{display:grid;min-height:100vh;place-content:center;justify-items:center;gap:12px;padding:28px;text-align:center}.boot-mark{display:grid;width:58px;height:58px;margin-bottom:6px;place-items:center;border-radius:19px;background:var(--ink-900);box-shadow:var(--shadow);color:var(--mint);font:800 1.4rem var(--font-display);animation:boot-pulse 1.4s ease-in-out infinite}.boot-screen p{font:700 1.05rem var(--font-display)}.boot-screen>span{color:var(--ink-500);font-size:.7rem}.not-found>span{color:var(--coral);font:800 clamp(4rem,12vw,8rem)/1 var(--font-display);letter-spacing:-.08em}.not-found p{color:var(--ink-500)}.not-found a{margin-top:10px;border-radius:13px;padding:12px 17px;background:var(--ink-900);color:#fff;font-size:.75rem;font-weight:700}footer,.page-footer{color:var(--ink-400);font-size:.7rem}@keyframes modal-in{0%{opacity:0;transform:translateY(20px) scale(.97)}}@keyframes toast-in{0%{opacity:0;transform:translateY(18px) scale(.96)}}@keyframes fade-in{0%{opacity:0}}@keyframes shimmer{to{transform:translate(100%)}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes boot-pulse{50%{box-shadow:0 0 0 10px #9ee2c31a,var(--shadow);transform:translateY(-3px)}}}@layer components{.app-main{grid-column:2;min-width:0}.main-nav{position:relative;z-index:1;display:grid;gap:5px;margin-top:48px}.nav-item .nav-label{padding:0;color:inherit;font-size:inherit;letter-spacing:normal;text-transform:none}.nav-section-label{padding:0 13px 8px;color:#ffffff52;font-size:.61rem;font-weight:800;letter-spacing:.15em}.nav-section-label.secondary{margin-top:25px}.sidebar-bottom{position:relative;z-index:1;display:grid;gap:12px;margin-top:auto}.secure-chip{display:flex;align-items:center;gap:8px;padding:9px 12px;border:1px solid rgb(158 226 195 / 12%);border-radius:11px;background:#9ee2c312;color:var(--mint);font-size:.66rem;font-weight:700}.sidebar-profile{display:grid;grid-template-columns:36px minmax(0,1fr) auto;align-items:center;gap:10px;padding:11px;border:1px solid rgb(255 255 255 / 7%);border-radius:15px;background:#ffffff0a}.sidebar-profile>span:nth-child(2){display:grid;min-width:0;color:#fff;font-size:.75rem}.sidebar-profile small{color:#ffffff61;font-size:.65rem}.profile-more{color:#ffffff4d;letter-spacing:.08em}.page{display:grid;gap:26px;animation:page-enter .36s var(--ease-out) both}.overview-page,.accounts-page,.activity-page,.move-page,.security-page,.loading-page{isolation:isolate}.page-heading,.section-heading{display:flex;align-items:end;justify-content:space-between;gap:20px}.page-heading>div,.section-heading>div{display:grid;gap:7px}.page-heading p{max-width:620px;color:var(--ink-500)}.section-block{display:grid;gap:17px}.section-block.card{gap:0;padding:4px 24px 12px}.section-block.card .section-heading{min-height:78px;border-bottom:1px solid var(--ink-150)}.text-button,.toast-close{display:inline-flex;align-items:center;gap:8px;padding:7px;background:transparent;color:var(--mint-dark);font-size:.73rem;font-weight:750}.icon-button .button-label,.toast-close .button-label{display:none}.ghost-on-dark{border:1px solid rgb(255 255 255 / 15%);background:#ffffff12;box-shadow:none}.notification-button{position:relative}.mobile-menu{display:none}.notification-dot{position:absolute;top:8px;right:8px;width:7px;height:7px;border:2px solid var(--paper);border-radius:50%;background:var(--coral)}.top-progress{position:fixed;z-index:80;top:var(--topbar-height);right:0;left:var(--sidebar-width);height:2px;overflow:hidden;background:#ff6b4a26}.top-progress:after{display:block;width:38%;height:100%;background:var(--coral);content:\"\";animation:progress .9s ease-in-out infinite}.hero-card{grid-template-columns:minmax(0,1fr) minmax(210px,.6fr);align-items:center}.hero-copy{position:relative;z-index:2;display:grid;justify-items:start}.hero-copy h1{margin-top:10px;color:#fff;font-size:clamp(2.7rem,5.4vw,4.8rem);letter-spacing:-.07em}.hero-copy>p{margin-top:10px;color:#ffffff85}.hero-copy .hero-actions{margin-top:28px}.hero-art{position:relative;min-height:165px}.hero-monogram{position:absolute;z-index:2;top:50%;left:50%;display:grid;width:90px;height:90px;place-items:center;border:1px solid rgb(255 255 255 / 20%);border-radius:29px;background:#ffffff1a;box-shadow:0 24px 45px #00000038;color:#fff;font-family:var(--font-display);font-size:2rem;font-weight:800;transform:translate(-50%,-50%) rotate(8deg);backdrop-filter:blur(10px)}.orb{position:absolute;border-radius:50%;filter:blur(.1px)}.orb-one{top:2px;right:4%;width:120px;height:120px;background:#9ee2c324}.orb-two{right:43%;bottom:-5px;width:76px;height:76px;background:#ff6b4a38}.stat-card{display:grid;grid-template-columns:45px minmax(0,1fr);align-items:center;gap:14px}.stat-icon{display:grid;width:44px;height:44px;place-items:center;border-radius:14px;background:var(--mint-soft);color:var(--mint-dark);font-size:1rem;font-weight:800}.stat-copy{position:relative;z-index:1;display:grid}.stat-copy small,.stat-copy em{color:var(--ink-500);font-size:.66rem;font-style:normal}.stat-copy strong{margin-block:3px;font-family:var(--font-display);font-size:1.45rem;letter-spacing:-.04em}.account-mark{display:grid;width:36px;height:36px;place-items:center;border-radius:12px;background:var(--mint-soft);color:var(--mint-dark);font-family:var(--font-display);font-weight:800}.account-mark.violet,.account-card.violet .account-mark{background:#f0edff;color:#6556ae}.account-card.deposit .account-mark{background:var(--mint-soft)}.account-card.withdraw .account-mark{background:var(--gold-soft);color:#92701e}.account-card>small{position:relative;z-index:1;color:var(--ink-500);font-size:.65rem}.account-more{color:var(--ink-400);letter-spacing:.08em}.account-grid-wide{grid-template-columns:repeat(3,minmax(0,1fr))}.account-detail-grid{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(320px,.75fr);gap:20px;align-items:start}.account-detail{overflow:hidden;padding:28px}.detail-heading{display:flex;align-items:center;justify-content:space-between;gap:18px}.detail-heading>div{display:flex;align-items:center;gap:13px}.detail-heading small{color:var(--ink-500);font-size:.63rem}.status-pill{display:inline-flex;align-items:center;border-radius:999px;padding:6px 10px;background:var(--ink-100);color:var(--ink-600);font-size:.64rem;font-weight:750}.status-pill.success{background:var(--mint-soft);color:var(--mint-dark)}.detail-balance{display:grid;gap:4px;margin:32px -28px 24px;padding:28px;background:linear-gradient(110deg,var(--ink-100),transparent)}.detail-balance small,.detail-balance span{color:var(--ink-500);font-size:.71rem}.detail-balance strong{font:700 clamp(2rem,4vw,3.25rem)/1 var(--font-display);letter-spacing:-.06em}.detail-actions{display:flex;flex-wrap:wrap;gap:9px}.detail-facts{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:25px}.detail-facts>div{display:grid;gap:3px;padding:13px;border-radius:12px;background:var(--ink-100)}.detail-facts dt{color:var(--ink-500);font-size:.61rem}.detail-facts dd{font-size:.72rem;font-weight:700}.compact-activity{padding:8px 22px 12px}.compact-activity .section-heading{min-height:70px;border-bottom:1px solid var(--ink-150)}.movement-row{display:grid;grid-template-columns:42px minmax(0,1fr) auto;align-items:center;gap:14px;min-height:76px;border-bottom:1px solid var(--ink-150);padding:12px 0}.movement-row:last-child{border-bottom:0}.movement-icon{display:grid;width:40px;height:40px;place-items:center;border-radius:13px;background:var(--mint-soft);color:var(--mint-dark);font-weight:800}.movement-icon.debit{background:var(--gold-soft);color:#96701e}.movement-icon.refused{background:var(--red-soft);color:var(--red)}.movement-copy,.movement-meta{display:grid;min-width:0}.movement-copy strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.8rem}.movement-copy small,.movement-meta small{color:var(--ink-500);font-size:.67rem}.movement-meta{justify-items:end}.movement-amount{font-size:.79rem;font-variant-numeric:tabular-nums}.movement-amount.credit{color:var(--mint-dark)}.movement-amount.refused{color:var(--red);text-decoration:line-through}.mini-stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.mini-stat{display:flex;align-items:center;gap:11px;border:1px solid var(--ink-150);border-radius:15px;padding:15px;background:#ffffffa8}.mini-stat>span{font-size:1rem}.mini-stat div{display:grid}.mini-stat small{color:var(--ink-500);font-size:.62rem}.mini-stat strong{font-size:1rem}.ledger-card{overflow:hidden;padding:0 24px 12px}.ledger-toolbar{display:flex;align-items:center;justify-content:space-between;gap:15px;min-height:82px;border-bottom:1px solid var(--ink-150)}.ledger-toolbar .search-box{flex:1;max-width:360px}.search-box>span{position:absolute;z-index:1;top:50%;left:14px;transform:translateY(-50%)}.search-box input{width:100%;height:44px;border:1px solid var(--ink-200);border-radius:13px;outline:none;padding:0 14px 0 39px;background:#fff;font-size:.76rem}.search-box input:focus{border-color:var(--mint-dark);box-shadow:0 0 0 4px #1e795a1a}.activity-list-full .movement-row{min-height:82px}.move-grid,.security-grid{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(300px,.7fr);gap:20px;align-items:start}.move-tabs{width:min(100%,560px)}.form-card{padding:clamp(22px,3vw,34px)}.money-form,.modal-form{display:grid;gap:24px}.form-intro{display:flex;align-items:center;gap:14px}.form-intro>div{display:grid;gap:5px}.form-intro p{color:var(--ink-500);font-size:.75rem}.form-icon{display:grid;width:50px;height:50px;place-items:center;border-radius:16px;background:var(--mint-soft);color:var(--mint-dark);font-size:1.15rem}.form-icon.withdraw{background:var(--gold-soft);color:#8e6b18}.form-icon.transfer{background:#f0edff;color:#6556ae}.money-input{position:relative}.money-input>span{position:absolute;z-index:1;top:50%;left:15px;color:var(--ink-500);transform:translateY(-50%)}.money-input input{padding-left:30px;font-size:1rem;font-weight:700}.amount-field{min-width:0}.paired-fields{grid-column:1/-1;display:grid;grid-template-columns:1fr auto 1fr;align-items:end;gap:12px}.swap-mark{display:grid;width:36px;height:48px;place-items:center;color:var(--ink-400)}.submit-button{grid-column:1/-1;justify-self:end;min-width:160px}.guidance-card{overflow:hidden;padding:28px;background:linear-gradient(150deg,var(--ink-900),var(--ink-950));color:#ffffffad}.guidance-card h2{margin-top:8px;color:#fff}.tip-list{display:grid;gap:17px;margin-top:28px}.tip-list li{display:grid;grid-template-columns:35px 1fr;gap:11px}.tip-list li>span:last-child{display:grid}.tip-list small{color:#ffffff73;font-size:.67rem}.tip-icon{display:grid;width:34px;height:34px;place-items:center;border-radius:11px;background:#9ee2c31a;color:var(--mint)}.shield-seal{display:flex;align-items:center;gap:10px;margin-top:30px;padding-top:20px;border-top:1px solid rgb(255 255 255 / 8%);font-size:.69rem}.shield-seal strong{display:grid;width:30px;height:30px;place-items:center;border-radius:10px;background:var(--coral);color:#fff}.security-hero{display:grid;grid-template-columns:.55fr 1fr;align-items:center;min-height:285px;overflow:hidden;border-radius:var(--radius-xl);padding:32px;background:linear-gradient(135deg,var(--ink-950),var(--ink-850));color:#fff}.security-hero-copy{display:grid;justify-items:start;gap:13px}.security-hero-copy h2{color:#fff;font-size:clamp(1.8rem,3.4vw,3rem)}.security-hero-copy p{color:#ffffff87}.security-orbit{position:relative;min-height:210px}.security-orbit>strong{position:absolute;z-index:2;top:50%;left:50%;display:grid;width:66px;height:66px;place-items:center;border-radius:22px;background:var(--coral);font:800 1.6rem var(--font-display);transform:translate(-50%,-50%)}.orbit-ring{position:absolute;top:50%;left:50%;border:1px solid rgb(158 226 195 / 18%);border-radius:50%;transform:translate(-50%,-50%)}.ring-one{width:140px;height:140px}.ring-two{width:205px;height:205px}.security-card,.architecture-card{padding:26px}.security-list{display:grid;margin-top:18px}.security-control{display:grid;grid-template-columns:40px minmax(0,1fr) auto;align-items:center;gap:12px;border-bottom:1px solid var(--ink-150);padding:15px 0}.security-control:last-child{border:0}.security-icon{display:grid;width:39px;height:39px;place-items:center;border-radius:12px;background:var(--mint-soft);color:var(--mint-dark)}.security-copy{display:grid}.security-copy small{color:var(--ink-500);font-size:.65rem}.architecture-lead{margin-top:10px;color:var(--ink-500);font-size:.76rem}.architecture-stack{display:grid;gap:11px;margin-top:22px}.architecture-layer{display:grid;grid-template-columns:36px 1fr;gap:12px;padding:15px;border-radius:14px;background:var(--ink-100)}.layer-number{color:var(--coral-dark);font-size:.67rem;font-weight:800}.architecture-layer small{color:var(--ink-500);font-size:.57rem;letter-spacing:.08em}.architecture-layer h3{margin-block:3px;font-size:.85rem}.architecture-layer p{color:var(--ink-500);font-size:.65rem}.modal-form{padding:28px}.modal-heading{display:flex;align-items:start;justify-content:space-between;gap:18px}.modal-heading>div{display:grid;gap:6px}.modal-heading p{color:var(--ink-500);font-size:.74rem}.modal-reassurance{display:flex;gap:10px;border-radius:13px;padding:13px;background:var(--mint-soft);color:var(--mint-dark);font-size:.69rem}.modal-actions{display:flex;justify-content:flex-end;gap:9px}.toast-copy small{color:#ffffffa1;font-size:.7rem}.topbar-title small{color:var(--ink-500);font-size:.63rem;font-weight:700;letter-spacing:.06em}.skeleton-hero{height:230px;border-radius:var(--radius-xl)}.skeleton-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:15px}.skeleton-grid .skeleton{height:105px}.skeleton-table{height:330px;border-radius:var(--radius-lg)}@keyframes page-enter{0%{opacity:0;transform:translateY(7px)}}@keyframes progress{0%{transform:translate(-110%)}to{transform:translate(280%)}}}@layer responsive{@media(max-width:860px){.app-main{grid-column:auto}.mobile-menu{display:inline-flex}.top-progress{left:0}.hero-card{grid-template-columns:1fr}.hero-art{position:absolute;right:15px;width:42%;opacity:.8}.account-detail-grid,.move-grid,.security-grid{grid-template-columns:1fr}.mini-stat-grid{grid-template-columns:repeat(2,1fr)}.ledger-toolbar{align-items:stretch;flex-direction:column;padding-block:16px}.ledger-toolbar .search-box{width:100%;max-width:none}}@media(max-width:620px){.page-heading,.section-heading{align-items:stretch;flex-direction:column}.account-grid-wide,.mini-stat-grid,.skeleton-grid,.detail-facts,.paired-fields{grid-template-columns:1fr}.swap-mark{width:100%;height:20px;transform:rotate(90deg)}.security-hero{grid-template-columns:1fr}.security-orbit{min-height:165px}.movement-row{grid-template-columns:38px minmax(0,1fr) auto;gap:9px}.modal-actions{align-items:stretch;flex-direction:column-reverse}.modal-actions .button{width:100%}}}@layer responsive{@media(max-width:1180px){:root{--sidebar-width: 222px}.account-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.section-grid,.dashboard-grid{grid-template-columns:1fr}}@media(max-width:860px){:root{--topbar-height: 70px}.app-shell{display:block}.sidebar{width:min(82vw,300px);box-shadow:var(--shadow-float);transform:translate(-105%);transition:transform .28s var(--ease-out)}.app-shell.menu-open .sidebar,.sidebar.open{transform:translate(0)}.page{min-height:100vh}.menu-button,.mobile-only{display:inline-flex}.topbar{padding-inline:20px}.page-content,.content{padding:24px 20px 50px}.page-header{align-items:start}.hero-card{min-height:200px}.stat-grid,.tiles{grid-template-columns:repeat(2,minmax(0,1fr))}.stat-grid>:first-child:last-child,.stat-grid>:last-child:nth-child(odd),.tiles>:last-child:nth-child(odd){grid-column:1 / -1}}@media(max-width:620px){body{font-size:14px}.topbar-title span,.topbar-subtitle,.topbar-actions .button-label{display:none}.topbar-actions .btn,.topbar-actions .button{width:43px;padding:0}.page-header{display:grid;gap:18px}.page-header>.button,.page-header>.btn,.page-header-actions{width:100%}.page-header-actions .button,.page-header-actions .btn{flex:1}.hero-card{border-radius:25px;padding:26px 22px}.hero-value{font-size:2.7rem}.hero-meta{align-items:start;flex-direction:column}.stat-grid,.tiles,.account-grid,.form-grid{grid-template-columns:1fr}.stat-grid>:last-child:nth-child(odd),.tiles>:last-child:nth-child(odd){grid-column:auto}.card{border-radius:20px}.card-header,.card-body{padding-inline:18px}.card-header{align-items:start;flex-direction:column}.account-card{min-height:165px}.activity-item,.feed li{grid-template-columns:38px minmax(0,1fr) auto;gap:10px}.activity-icon,.kind{width:36px;height:36px}.modal-backdrop{align-items:end;padding:0}.modal{max-height:94vh;overflow-y:auto;border-radius:26px 26px 0 0}.modal-header,.modal-body{padding-inline:22px}.form-actions{align-items:stretch;flex-direction:column-reverse}.form-actions .btn,.form-actions .button{width:100%}.toast{right:16px;bottom:16px}.hide-mobile{display:none!important}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}}\n" export script : Unit -> string - script () = "(()=>{var x1=Object.create;var Rf=Object.defineProperty;var V1=Object.getOwnPropertyDescriptor;var L1=Object.getOwnPropertyNames;var K1=Object.getPrototypeOf,J1=Object.prototype.hasOwnProperty;var Tt=(l,t)=>()=>{try{return t||l((t={exports:{}}).exports,t),t.exports}catch(u){throw t=0,u}};var w1=(l,t,u,a)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let e of L1(t))!J1.call(l,e)&&e!==u&&Rf(l,e,{get:()=>t[e],enumerable:!(a=V1(t,e))||a.enumerable});return l};var Vn=(l,t,u)=>(u=l!=null?x1(K1(l)):{},w1(t||!l||!l.__esModule?Rf(u,\"default\",{value:l,enumerable:!0}):u,l));var Jf=Tt(p=>{\"use strict\";var Jn=Symbol.for(\"react.transitional.element\"),W1=Symbol.for(\"react.portal\"),$1=Symbol.for(\"react.fragment\"),F1=Symbol.for(\"react.strict_mode\"),k1=Symbol.for(\"react.profiler\"),I1=Symbol.for(\"react.consumer\"),P1=Symbol.for(\"react.context\"),lm=Symbol.for(\"react.forward_ref\"),tm=Symbol.for(\"react.suspense\"),um=Symbol.for(\"react.memo\"),jf=Symbol.for(\"react.lazy\"),am=Symbol.for(\"react.activity\"),Yf=Symbol.iterator;function em(l){return l===null||typeof l!=\"object\"?null:(l=Yf&&l[Yf]||l[\"@@iterator\"],typeof l==\"function\"?l:null)}var Zf={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},xf=Object.assign,Vf={};function bu(l,t,u){this.props=l,this.context=t,this.refs=Vf,this.updater=u||Zf}bu.prototype.isReactComponent={};bu.prototype.setState=function(l,t){if(typeof l!=\"object\"&&typeof l!=\"function\"&&l!=null)throw Error(\"takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,l,t,\"setState\")};bu.prototype.forceUpdate=function(l){this.updater.enqueueForceUpdate(this,l,\"forceUpdate\")};function Lf(){}Lf.prototype=bu.prototype;function wn(l,t,u){this.props=l,this.context=t,this.refs=Vf,this.updater=u||Zf}var Wn=wn.prototype=new Lf;Wn.constructor=wn;xf(Wn,bu.prototype);Wn.isPureReactComponent=!0;var Gf=Array.isArray;function Kn(){}var V={H:null,A:null,T:null,S:null},Kf=Object.prototype.hasOwnProperty;function $n(l,t,u){var a=u.ref;return{$$typeof:Jn,type:l,key:t,ref:a!==void 0?a:null,props:u}}function nm(l,t){return $n(l.type,t,l.props)}function Fn(l){return typeof l==\"object\"&&l!==null&&l.$$typeof===Jn}function im(l){var t={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+l.replace(/[=:]/g,function(u){return t[u]})}var Xf=/\\/+/g;function Ln(l,t){return typeof l==\"object\"&&l!==null&&l.key!=null?im(\"\"+l.key):t.toString(36)}function cm(l){switch(l.status){case\"fulfilled\":return l.value;case\"rejected\":throw l.reason;default:switch(typeof l.status==\"string\"?l.then(Kn,Kn):(l.status=\"pending\",l.then(function(t){l.status===\"pending\"&&(l.status=\"fulfilled\",l.value=t)},function(t){l.status===\"pending\"&&(l.status=\"rejected\",l.reason=t)})),l.status){case\"fulfilled\":return l.value;case\"rejected\":throw l.reason}}throw l}function ru(l,t,u,a,e){var n=typeof l;(n===\"undefined\"||n===\"boolean\")&&(l=null);var i=!1;if(l===null)i=!0;else switch(n){case\"bigint\":case\"string\":case\"number\":i=!0;break;case\"object\":switch(l.$$typeof){case Jn:case W1:i=!0;break;case jf:return i=l._init,ru(i(l._payload),t,u,a,e)}}if(i)return e=e(l),i=a===\"\"?\".\"+Ln(l,0):a,Gf(e)?(u=\"\",i!=null&&(u=i.replace(Xf,\"$&/\")+\"/\"),ru(e,t,u,\"\",function(s){return s})):e!=null&&(Fn(e)&&(e=nm(e,u+(e.key==null||l&&l.key===e.key?\"\":(\"\"+e.key).replace(Xf,\"$&/\")+\"/\")+i)),t.push(e)),1;i=0;var c=a===\"\"?\".\":a+\":\";if(Gf(l))for(var f=0;f{\"use strict\";wf.exports=Jf()});var a0=Tt(w=>{\"use strict\";function li(l,t){var u=l.length;l.push(t);l:for(;0>>1,e=l[a];if(0>>1;ade(c,u))fde(s,c)?(l[a]=s,l[f]=u,a=f):(l[a]=c,l[i]=u,a=i);else if(fde(s,u))l[a]=s,l[f]=u,a=f;else break l}}return t}function de(l,t){var u=l.sortIndex-t.sortIndex;return u!==0?u:l.id-t.id}w.unstable_now=void 0;typeof performance==\"object\"&&typeof performance.now==\"function\"?(Wf=performance,w.unstable_now=function(){return Wf.now()}):(kn=Date,$f=kn.now(),w.unstable_now=function(){return kn.now()-$f});var Wf,kn,$f,tt=[],At=[],ym=1,ql=null,dl=3,ti=!1,sa=!1,ma=!1,ui=!1,If=typeof setTimeout==\"function\"?setTimeout:null,Pf=typeof clearTimeout==\"function\"?clearTimeout:null,Ff=typeof setImmediate<\"u\"?setImmediate:null;function he(l){for(var t=Wl(At);t!==null;){if(t.callback===null)ve(At);else if(t.startTime<=l)ve(At),t.sortIndex=t.expirationTime,li(tt,t);else break;t=Wl(At)}}function ai(l){if(ma=!1,he(l),!sa)if(Wl(tt)!==null)sa=!0,zu||(zu=!0,Eu());else{var t=Wl(At);t!==null&&ei(ai,t.startTime-l)}}var zu=!1,da=-1,l0=5,t0=-1;function u0(){return ui?!0:!(w.unstable_now()-t0l&&u0());){var a=ql.callback;if(typeof a==\"function\"){ql.callback=null,dl=ql.priorityLevel;var e=a(ql.expirationTime<=l);if(l=w.unstable_now(),typeof e==\"function\"){ql.callback=e,he(l),t=!0;break t}ql===Wl(tt)&&ve(tt),he(l)}else ve(tt);ql=Wl(tt)}if(ql!==null)t=!0;else{var n=Wl(At);n!==null&&ei(ai,n.startTime-l),t=!1}}break l}finally{ql=null,dl=u,ti=!1}t=void 0}}finally{t?Eu():zu=!1}}}var Eu;typeof Ff==\"function\"?Eu=function(){Ff(In)}:typeof MessageChannel<\"u\"?(Pn=new MessageChannel,kf=Pn.port2,Pn.port1.onmessage=In,Eu=function(){kf.postMessage(null)}):Eu=function(){If(In,0)};var Pn,kf;function ei(l,t){da=If(function(){l(w.unstable_now())},t)}w.unstable_IdlePriority=5;w.unstable_ImmediatePriority=1;w.unstable_LowPriority=4;w.unstable_NormalPriority=3;w.unstable_Profiling=null;w.unstable_UserBlockingPriority=2;w.unstable_cancelCallback=function(l){l.callback=null};w.unstable_forceFrameRate=function(l){0>l||125a?(l.sortIndex=u,li(At,l),Wl(tt)===null&&l===Wl(At)&&(ma?(Pf(da),da=-1):ma=!0,ei(ai,u-a))):(l.sortIndex=e,li(tt,l),sa||ti||(sa=!0,zu||(zu=!0,Eu()))),l};w.unstable_shouldYield=u0;w.unstable_wrapCallback=function(l){var t=dl;return function(){var u=dl;dl=t;try{return l.apply(this,arguments)}finally{dl=u}}}});var n0=Tt((Uv,e0)=>{\"use strict\";e0.exports=a0()});var c0=Tt(vl=>{\"use strict\";var sm=ya();function i0(l){var t=\"https://react.dev/errors/\"+l;if(1{\"use strict\";function f0(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>\"u\"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=\"function\"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(f0)}catch(l){console.error(l)}}f0(),o0.exports=c0()});var A1=Tt(xn=>{\"use strict\";var el=n0(),Go=ya(),hm=y0();function r(l){var t=\"https://react.dev/errors/\"+l;if(1Du||(l.current=Vi[Du],Vi[Du]=null,Du--)}function x(l,t){Du++,Vi[Du]=l.current,l.current=t}var Il=Pl(null),ja=Pl(null),Yt=Pl(null),Fe=Pl(null);function ke(l,t){switch(x(Yt,t),x(ja,l),x(Il,null),t.nodeType){case 9:case 11:l=(l=t.documentElement)&&(l=l.namespaceURI)?Eo(l):0;break;default:if(l=t.tagName,t=t.namespaceURI)t=Eo(t),l=o1(t,l);else switch(l){case\"svg\":l=1;break;case\"math\":l=2;break;default:l=0}}cl(Il),x(Il,l)}function Ju(){cl(Il),cl(ja),cl(Yt)}function Li(l){l.memoizedState!==null&&x(Fe,l);var t=Il.current,u=o1(t,l.type);t!==u&&(x(ja,l),x(Il,u))}function Ie(l){ja.current===l&&(cl(Il),cl(ja)),Fe.current===l&&(cl(Fe),ka._currentValue=au)}var ni,d0;function Pt(l){if(ni===void 0)try{throw Error()}catch(u){var t=u.stack.trim().match(/\\n( *(at )?)/);ni=t&&t[1]||\"\",d0=-1)\":-1e||f[a]!==s[e]){var v=\"\\n\"+f[a].replace(\" at new \",\" at \");return l.displayName&&v.includes(\"\")&&(v=v.replace(\"\",l.displayName)),v}while(1<=a&&0<=e);break}}}finally{ii=!1,Error.prepareStackTrace=u}return(u=l?l.displayName||l.name:\"\")?Pt(u):\"\"}function bm(l,t){switch(l.tag){case 26:case 27:case 5:return Pt(l.type);case 16:return Pt(\"Lazy\");case 13:return l.child!==t&&t!==null?Pt(\"Suspense Fallback\"):Pt(\"Suspense\");case 19:return Pt(\"SuspenseList\");case 0:case 15:return ci(l.type,!1);case 11:return ci(l.type.render,!1);case 1:return ci(l.type,!0);case 31:return Pt(\"Activity\");default:return\"\"}}function h0(l){try{var t=\"\",u=null;do t+=bm(l,u),u=l,l=l.return;while(l);return t}catch(a){return\"\\nError generating stack: \"+a.message+\"\\n\"+a.stack}}var Ki=Object.prototype.hasOwnProperty,Rc=el.unstable_scheduleCallback,fi=el.unstable_cancelCallback,Em=el.unstable_shouldYield,zm=el.unstable_requestPaint,Dl=el.unstable_now,Tm=el.unstable_getCurrentPriorityLevel,Lo=el.unstable_ImmediatePriority,Ko=el.unstable_UserBlockingPriority,Pe=el.unstable_NormalPriority,Am=el.unstable_LowPriority,Jo=el.unstable_IdlePriority,pm=el.log,_m=el.unstable_setDisableYieldValue,te=null,Ul=null;function Ht(l){if(typeof pm==\"function\"&&_m(l),Ul&&typeof Ul.setStrictMode==\"function\")try{Ul.setStrictMode(te,l)}catch{}}var Nl=Math.clz32?Math.clz32:Dm,Om=Math.log,Mm=Math.LN2;function Dm(l){return l>>>=0,l===0?32:31-(Om(l)/Mm|0)|0}var re=256,be=262144,Ee=4194304;function lu(l){var t=l&42;if(t!==0)return t;switch(l&-l){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return l&261888;case 262144:case 524288:case 1048576:case 2097152:return l&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return l&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return l}}function On(l,t,u){var a=l.pendingLanes;if(a===0)return 0;var e=0,n=l.suspendedLanes,i=l.pingedLanes;l=l.warmLanes;var c=a&134217727;return c!==0?(a=c&~n,a!==0?e=lu(a):(i&=c,i!==0?e=lu(i):u||(u=c&~l,u!==0&&(e=lu(u))))):(c=a&~n,c!==0?e=lu(c):i!==0?e=lu(i):u||(u=a&~l,u!==0&&(e=lu(u)))),e===0?0:t!==0&&t!==e&&(t&n)===0&&(n=e&-e,u=t&-t,n>=u||n===32&&(u&4194048)!==0)?t:e}function ue(l,t){return(l.pendingLanes&~(l.suspendedLanes&~l.pingedLanes)&t)===0}function Um(l,t){switch(l){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function wo(){var l=Ee;return Ee<<=1,(Ee&62914560)===0&&(Ee=4194304),l}function oi(l){for(var t=[],u=0;31>u;u++)t.push(l);return t}function ae(l,t){l.pendingLanes|=t,t!==268435456&&(l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0)}function Nm(l,t,u,a,e,n){var i=l.pendingLanes;l.pendingLanes=u,l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0,l.expiredLanes&=u,l.entangledLanes&=u,l.errorRecoveryDisabledLanes&=u,l.shellSuspendCounter=0;var c=l.entanglements,f=l.expirationTimes,s=l.hiddenUpdates;for(u=i&~u;0\"u\")return null;try{return l.activeElement||l.body}catch{return l.body}}var Ym=/[\\n\"\\\\]/g;function Ql(l){return l.replace(Ym,function(t){return\"\\\\\"+t.charCodeAt(0).toString(16)+\" \"})}function Wi(l,t,u,a,e,n,i,c){l.name=\"\",i!=null&&typeof i!=\"function\"&&typeof i!=\"symbol\"&&typeof i!=\"boolean\"?l.type=i:l.removeAttribute(\"type\"),t!=null?i===\"number\"?(t===0&&l.value===\"\"||l.value!=t)&&(l.value=\"\"+Yl(t)):l.value!==\"\"+Yl(t)&&(l.value=\"\"+Yl(t)):i!==\"submit\"&&i!==\"reset\"||l.removeAttribute(\"value\"),t!=null?$i(l,i,Yl(t)):u!=null?$i(l,i,Yl(u)):a!=null&&l.removeAttribute(\"value\"),e==null&&n!=null&&(l.defaultChecked=!!n),e!=null&&(l.checked=e&&typeof e!=\"function\"&&typeof e!=\"symbol\"),c!=null&&typeof c!=\"function\"&&typeof c!=\"symbol\"&&typeof c!=\"boolean\"?l.name=\"\"+Yl(c):l.removeAttribute(\"name\")}function uy(l,t,u,a,e,n,i,c){if(n!=null&&typeof n!=\"function\"&&typeof n!=\"symbol\"&&typeof n!=\"boolean\"&&(l.type=n),t!=null||u!=null){if(!(n!==\"submit\"&&n!==\"reset\"||t!=null)){wi(l);return}u=u!=null?\"\"+Yl(u):\"\",t=t!=null?\"\"+Yl(t):u,c||t===l.value||(l.value=t),l.defaultValue=t}a=a??e,a=typeof a!=\"function\"&&typeof a!=\"symbol\"&&!!a,l.checked=c?l.checked:!!a,l.defaultChecked=!!a,i!=null&&typeof i!=\"function\"&&typeof i!=\"symbol\"&&typeof i!=\"boolean\"&&(l.name=i),wi(l)}function $i(l,t,u){t===\"number\"&&ln(l.ownerDocument)===l||l.defaultValue===\"\"+u||(l.defaultValue=\"\"+u)}function ju(l,t,u,a){if(l=l.options,t){t={};for(var e=0;e\"u\"||typeof window.document>\"u\"||typeof window.document.createElement>\"u\"),ki=!1;if(vt)try{Tu={},Object.defineProperty(Tu,\"passive\",{get:function(){ki=!0}}),window.addEventListener(\"test\",Tu,Tu),window.removeEventListener(\"test\",Tu,Tu)}catch{ki=!1}var Tu,Ct=null,Zc=null,Ge=null;function cy(){if(Ge)return Ge;var l,t=Zc,u=t.length,a,e=\"value\"in Ct?Ct.value:Ct.textContent,n=e.length;for(l=0;l=Ma),_0=\" \",O0=!1;function oy(l,t){switch(l){case\"keyup\":return yd.indexOf(t.keyCode)!==-1;case\"keydown\":return t.keyCode!==229;case\"keypress\":case\"mousedown\":case\"focusout\":return!0;default:return!1}}function yy(l){return l=l.detail,typeof l==\"object\"&&\"data\"in l?l.data:null}var Hu=!1;function md(l,t){switch(l){case\"compositionend\":return yy(t);case\"keypress\":return t.which!==32?null:(O0=!0,_0);case\"textInput\":return l=t.data,l===_0&&O0?null:l;default:return null}}function dd(l,t){if(Hu)return l===\"compositionend\"||!Vc&&oy(l,t)?(l=cy(),Ge=Zc=Ct=null,Hu=!1,l):null;switch(l){case\"paste\":return null;case\"keypress\":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:u,offset:t-l};l=a}l:{for(;u;){if(u.nextSibling){u=u.nextSibling;break l}u=u.parentNode}u=void 0}u=N0(u)}}function hy(l,t){return l&&t?l===t?!0:l&&l.nodeType===3?!1:t&&t.nodeType===3?hy(l,t.parentNode):\"contains\"in l?l.contains(t):l.compareDocumentPosition?!!(l.compareDocumentPosition(t)&16):!1:!1}function vy(l){l=l!=null&&l.ownerDocument!=null&&l.ownerDocument.defaultView!=null?l.ownerDocument.defaultView:window;for(var t=ln(l.document);t instanceof l.HTMLIFrameElement;){try{var u=typeof t.contentWindow.location.href==\"string\"}catch{u=!1}if(u)l=t.contentWindow;else break;t=ln(l.document)}return t}function Lc(l){var t=l&&l.nodeName&&l.nodeName.toLowerCase();return t&&(t===\"input\"&&(l.type===\"text\"||l.type===\"search\"||l.type===\"tel\"||l.type===\"url\"||l.type===\"password\")||t===\"textarea\"||l.contentEditable===\"true\")}var zd=vt&&\"documentMode\"in document&&11>=document.documentMode,Cu=null,Ii=null,Ua=null,Pi=!1;function C0(l,t,u){var a=u.window===u?u.document:u.nodeType===9?u:u.ownerDocument;Pi||Cu==null||Cu!==ln(a)||(a=Cu,\"selectionStart\"in a&&Lc(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Ua&&Va(Ua,a)||(Ua=a,a=bn(Ii,\"onSelect\"),0>=i,e-=i,$l=1<<32-Nl(t)+e|u<O?(U=E,E=null):U=E.sibling;var B=d(y,E,m[O],S);if(B===null){E===null&&(E=U);break}l&&E&&B.alternate===null&&t(y,E),o=n(B,o,O),C===null?z=B:C.sibling=B,C=B,E=U}if(O===m.length)return u(y,E),H&&ct(y,O),z;if(E===null){for(;OO?(U=E,E=null):U=E.sibling;var zt=d(y,E,B.value,S);if(zt===null){E===null&&(E=U);break}l&&E&&zt.alternate===null&&t(y,E),o=n(zt,o,O),C===null?z=zt:C.sibling=zt,C=zt,E=U}if(B.done)return u(y,E),H&&ct(y,O),z;if(E===null){for(;!B.done;O++,B=m.next())B=g(y,B.value,S),B!==null&&(o=n(B,o,O),C===null?z=B:C.sibling=B,C=B);return H&&ct(y,O),z}for(E=a(E);!B.done;O++,B=m.next())B=h(E,y,O,B.value,S),B!==null&&(l&&B.alternate!==null&&E.delete(B.key===null?O:B.key),o=n(B,o,O),C===null?z=B:C.sibling=B,C=B);return l&&E.forEach(function(Z1){return t(y,Z1)}),H&&ct(y,O),z}function X(y,o,m,S){if(typeof m==\"object\"&&m!==null&&m.type===Mu&&m.key===null&&(m=m.props.children),typeof m==\"object\"&&m!==null){switch(m.$$typeof){case ge:l:{for(var z=m.key;o!==null;){if(o.key===z){if(z=m.type,z===Mu){if(o.tag===7){u(y,o.sibling),S=e(o,m.props.children),S.return=y,y=S;break l}}else if(o.elementType===z||typeof z==\"object\"&&z!==null&&z.$$typeof===_t&&tu(z)===o.type){u(y,o.sibling),S=e(o,m.props),ga(S,m),S.return=y,y=S;break l}u(y,o);break}else t(y,o);o=o.sibling}m.type===Mu?(S=eu(m.props.children,y.mode,S,m.key),S.return=y,y=S):(S=Qe(m.type,m.key,m.props,null,y.mode,S),ga(S,m),S.return=y,y=S)}return i(y);case Ta:l:{for(z=m.key;o!==null;){if(o.key===z)if(o.tag===4&&o.stateNode.containerInfo===m.containerInfo&&o.stateNode.implementation===m.implementation){u(y,o.sibling),S=e(o,m.children||[]),S.return=y,y=S;break l}else{u(y,o);break}else t(y,o);o=o.sibling}S=gi(m,y.mode,S),S.return=y,y=S}return i(y);case _t:return m=tu(m),X(y,o,m,S)}if(Aa(m))return b(y,o,m,S);if(va(m)){if(z=va(m),typeof z!=\"function\")throw Error(r(150));return m=z.call(m),T(y,o,m,S)}if(typeof m.then==\"function\")return X(y,o,Oe(m),S);if(m.$$typeof===ot)return X(y,o,_e(y,m),S);Me(y,m)}return typeof m==\"string\"&&m!==\"\"||typeof m==\"number\"||typeof m==\"bigint\"?(m=\"\"+m,o!==null&&o.tag===6?(u(y,o.sibling),S=e(o,m),S.return=y,y=S):(u(y,o),S=Si(m,y.mode,S),S.return=y,y=S),i(y)):u(y,o)}return function(y,o,m,S){try{Ja=0;var z=X(y,o,m,S);return Vu=null,z}catch(E){if(E===ia||E===Cn)throw E;var C=Ol(29,E,null,y.mode);return C.lanes=S,C.return=y,C}}}var yu=Ny(!0),Hy=Ny(!1),Ot=!1;function Pc(l){l.updateQueue={baseState:l.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function ic(l,t){l=l.updateQueue,t.updateQueue===l&&(t.updateQueue={baseState:l.baseState,firstBaseUpdate:l.firstBaseUpdate,lastBaseUpdate:l.lastBaseUpdate,shared:l.shared,callbacks:null})}function Xt(l){return{lane:l,tag:0,payload:null,callback:null,next:null}}function Qt(l,t,u){var a=l.updateQueue;if(a===null)return null;if(a=a.shared,(q&2)!==0){var e=a.pending;return e===null?t.next=t:(t.next=e.next,e.next=t),a.pending=t,t=un(l),Ty(l,null,u),t}return Hn(l,a,t,u),un(l)}function Ha(l,t,u){if(t=t.updateQueue,t!==null&&(t=t.shared,(u&4194048)!==0)){var a=t.lanes;a&=l.pendingLanes,u|=a,t.lanes=u,$o(l,u)}}function bi(l,t){var u=l.updateQueue,a=l.alternate;if(a!==null&&(a=a.updateQueue,u===a)){var e=null,n=null;if(u=u.firstBaseUpdate,u!==null){do{var i={lane:u.lane,tag:u.tag,payload:u.payload,callback:null,next:null};n===null?e=n=i:n=n.next=i,u=u.next}while(u!==null);n===null?e=n=t:n=n.next=t}else e=n=t;u={baseState:a.baseState,firstBaseUpdate:e,lastBaseUpdate:n,shared:a.shared,callbacks:a.callbacks},l.updateQueue=u;return}l=u.lastBaseUpdate,l===null?u.firstBaseUpdate=t:l.next=t,u.lastBaseUpdate=t}var cc=!1;function Ca(){if(cc){var l=xu;if(l!==null)throw l}}function Ba(l,t,u,a){cc=!1;var e=l.updateQueue;Ot=!1;var n=e.firstBaseUpdate,i=e.lastBaseUpdate,c=e.shared.pending;if(c!==null){e.shared.pending=null;var f=c,s=f.next;f.next=null,i===null?n=s:i.next=s,i=f;var v=l.alternate;v!==null&&(v=v.updateQueue,c=v.lastBaseUpdate,c!==i&&(c===null?v.firstBaseUpdate=s:c.next=s,v.lastBaseUpdate=f))}if(n!==null){var g=e.baseState;i=0,v=s=f=null,c=n;do{var d=c.lane&-536870913,h=d!==c.lane;if(h?(N&d)===d:(a&d)===d){d!==0&&d===$u&&(cc=!0),v!==null&&(v=v.next={lane:0,tag:c.tag,payload:c.payload,callback:null,next:null});l:{var b=l,T=c;d=t;var X=u;switch(T.tag){case 1:if(b=T.payload,typeof b==\"function\"){g=b.call(X,g,d);break l}g=b;break l;case 3:b.flags=b.flags&-65537|128;case 0:if(b=T.payload,d=typeof b==\"function\"?b.call(X,g,d):b,d==null)break l;g=J({},g,d);break l;case 2:Ot=!0}}d=c.callback,d!==null&&(l.flags|=64,h&&(l.flags|=8192),h=e.callbacks,h===null?e.callbacks=[d]:h.push(d))}else h={lane:d,tag:c.tag,payload:c.payload,callback:c.callback,next:null},v===null?(s=v=h,f=g):v=v.next=h,i|=d;if(c=c.next,c===null){if(c=e.shared.pending,c===null)break;h=c,c=h.next,h.next=null,e.lastBaseUpdate=h,e.shared.pending=null}}while(!0);v===null&&(f=g),e.baseState=f,e.firstBaseUpdate=s,e.lastBaseUpdate=v,n===null&&(e.shared.lanes=0),Wt|=i,l.lanes=i,l.memoizedState=g}}function Cy(l,t){if(typeof l!=\"function\")throw Error(r(191,l));l.call(t)}function By(l,t){var u=l.callbacks;if(u!==null)for(l.callbacks=null,l=0;ln?n:8;var i=A.T,c={};A.T=c,df(l,!1,t,u);try{var f=e(),s=A.S;if(s!==null&&s(c,f),f!==null&&typeof f==\"object\"&&typeof f.then==\"function\"){var v=Nd(f,a);qa(l,t,v,Hl(l))}else qa(l,t,a,Hl(l))}catch(g){qa(l,t,{then:function(){},status:\"rejected\",reason:g},Hl())}finally{R.p=n,i!==null&&c.types!==null&&(i.types=c.types),A.T=i}}function Yd(){}function mc(l,t,u,a){if(l.tag!==5)throw Error(r(476));var e=es(l).queue;as(l,e,t,au,u===null?Yd:function(){return ns(l),u(a)})}function es(l){var t=l.memoizedState;if(t!==null)return t;t={memoizedState:au,baseState:au,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:gt,lastRenderedState:au},next:null};var u={};return t.next={memoizedState:u,baseState:u,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:gt,lastRenderedState:u},next:null},l.memoizedState=t,l=l.alternate,l!==null&&(l.memoizedState=t),t}function ns(l){var t=es(l);t.next===null&&(t=l.alternate.memoizedState),qa(l,t.next.queue,{},Hl())}function mf(){return sl(ka)}function is(){return I().memoizedState}function cs(){return I().memoizedState}function Gd(l){for(var t=l.return;t!==null;){switch(t.tag){case 24:case 3:var u=Hl();l=Xt(u);var a=Qt(t,l,u);a!==null&&(zl(a,t,u),Ha(a,t,u)),t={cache:Fc()},l.payload=t;return}t=t.return}}function Xd(l,t,u){var a=Hl();u={lane:a,revertLane:0,gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},Yn(l)?os(t,u):(u=Jc(l,t,u,a),u!==null&&(zl(u,l,a),ys(u,t,a)))}function fs(l,t,u){var a=Hl();qa(l,t,u,a)}function qa(l,t,u,a){var e={lane:a,revertLane:0,gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null};if(Yn(l))os(t,e);else{var n=l.alternate;if(l.lanes===0&&(n===null||n.lanes===0)&&(n=t.lastRenderedReducer,n!==null))try{var i=t.lastRenderedState,c=n(i,u);if(e.hasEagerState=!0,e.eagerState=c,Cl(c,i))return Hn(l,t,e,0),Z===null&&Nn(),!1}catch{}if(u=Jc(l,t,e,a),u!==null)return zl(u,l,a),ys(u,t,a),!0}return!1}function df(l,t,u,a){if(a={lane:2,revertLane:Tf(),gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},Yn(l)){if(t)throw Error(r(479))}else t=Jc(l,u,a,2),t!==null&&zl(t,l,2)}function Yn(l){var t=l.alternate;return l===_||t!==null&&t===_}function os(l,t){Lu=on=!0;var u=l.pending;u===null?t.next=t:(t.next=u.next,u.next=t),l.pending=t}function ys(l,t,u){if((u&4194048)!==0){var a=t.lanes;a&=l.pendingLanes,u|=a,t.lanes=u,$o(l,u)}}var Wa={readContext:sl,use:qn,useCallback:$,useContext:$,useEffect:$,useImperativeHandle:$,useLayoutEffect:$,useInsertionEffect:$,useMemo:$,useReducer:$,useRef:$,useState:$,useDebugValue:$,useDeferredValue:$,useTransition:$,useSyncExternalStore:$,useId:$,useHostTransitionStatus:$,useFormState:$,useActionState:$,useOptimistic:$,useMemoCache:$,useCacheRefresh:$};Wa.useEffectEvent=$;var ss={readContext:sl,use:qn,useCallback:function(l,t){return Sl().memoizedState=[l,t===void 0?null:t],l},useContext:sl,useEffect:w0,useImperativeHandle:function(l,t,u){u=u!=null?u.concat([l]):null,xe(4194308,4,Iy.bind(null,t,l),u)},useLayoutEffect:function(l,t){return xe(4194308,4,l,t)},useInsertionEffect:function(l,t){xe(4,2,l,t)},useMemo:function(l,t){var u=Sl();t=t===void 0?null:t;var a=l();if(su){Ht(!0);try{l()}finally{Ht(!1)}}return u.memoizedState=[a,t],a},useReducer:function(l,t,u){var a=Sl();if(u!==void 0){var e=u(t);if(su){Ht(!0);try{u(t)}finally{Ht(!1)}}}else e=t;return a.memoizedState=a.baseState=e,l={pending:null,lanes:0,dispatch:null,lastRenderedReducer:l,lastRenderedState:e},a.queue=l,l=l.dispatch=Xd.bind(null,_,l),[a.memoizedState,l]},useRef:function(l){var t=Sl();return l={current:l},t.memoizedState=l},useState:function(l){l=yc(l);var t=l.queue,u=fs.bind(null,_,t);return t.dispatch=u,[l.memoizedState,u]},useDebugValue:yf,useDeferredValue:function(l,t){var u=Sl();return sf(u,l,t)},useTransition:function(){var l=yc(!1);return l=as.bind(null,_,l.queue,!0,!1),Sl().memoizedState=l,[!1,l]},useSyncExternalStore:function(l,t,u){var a=_,e=Sl();if(H){if(u===void 0)throw Error(r(407));u=u()}else{if(u=t(),Z===null)throw Error(r(349));(N&127)!==0||Xy(a,t,u)}e.memoizedState=u;var n={value:u,getSnapshot:t};return e.queue=n,w0(jy.bind(null,a,n,l),[l]),a.flags|=2048,ku(9,{destroy:void 0},Qy.bind(null,a,n,u,t),null),u},useId:function(){var l=Sl(),t=Z.identifierPrefix;if(H){var u=Fl,a=$l;u=(a&~(1<<32-Nl(a)-1)).toString(32)+u,t=\"_\"+t+\"R_\"+u,u=yn++,0<\\/script>\",n=n.removeChild(n.firstChild);break;case\"select\":n=typeof a.is==\"string\"?i.createElement(\"select\",{is:a.is}):i.createElement(\"select\"),a.multiple?n.multiple=!0:a.size&&(n.size=a.size);break;default:n=typeof a.is==\"string\"?i.createElement(e,{is:a.is}):i.createElement(e)}}n[ol]=t,n[Tl]=a;l:for(i=t.child;i!==null;){if(i.tag===5||i.tag===6)n.appendChild(i.stateNode);else if(i.tag!==4&&i.tag!==27&&i.child!==null){i.child.return=i,i=i.child;continue}if(i===t)break l;for(;i.sibling===null;){if(i.return===null||i.return===t)break l;i=i.return}i.sibling.return=i.return,i=i.sibling}t.stateNode=n;l:switch(ml(n,e,a),e){case\"button\":case\"input\":case\"select\":case\"textarea\":a=!!a.autoFocus;break l;case\"img\":a=!0;break l;default:a=!1}a&&at(t)}}return L(t),Mi(t,t.type,l===null?null:l.memoizedProps,t.pendingProps,u),null;case 6:if(l&&t.stateNode!=null)l.memoizedProps!==a&&at(t);else{if(typeof a!=\"string\"&&t.stateNode===null)throw Error(r(166));if(l=Yt.current,Au(t)){if(l=t.stateNode,u=t.memoizedProps,a=null,e=yl,e!==null)switch(e.tag){case 27:case 5:a=e.memoizedProps}l[ol]=t,l=!!(l.nodeValue===u||a!==null&&a.suppressHydrationWarning===!0||f1(l.nodeValue,u)),l||Jt(t,!0)}else l=En(l).createTextNode(a),l[ol]=t,t.stateNode=l}return L(t),null;case 31:if(u=t.memoizedState,l===null||l.memoizedState!==null){if(a=Au(t),u!==null){if(l===null){if(!a)throw Error(r(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(r(557));l[ol]=t}else fu(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;L(t),l=!1}else u=ri(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=u),l=!0;if(!l)return t.flags&256?(_l(t),t):(_l(t),null);if((t.flags&128)!==0)throw Error(r(558))}return L(t),null;case 13:if(a=t.memoizedState,l===null||l.memoizedState!==null&&l.memoizedState.dehydrated!==null){if(e=Au(t),a!==null&&a.dehydrated!==null){if(l===null){if(!e)throw Error(r(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(r(317));e[ol]=t}else fu(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;L(t),e=!1}else e=ri(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=e),e=!0;if(!e)return t.flags&256?(_l(t),t):(_l(t),null)}return _l(t),(t.flags&128)!==0?(t.lanes=u,t):(u=a!==null,l=l!==null&&l.memoizedState!==null,u&&(a=t.child,e=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(e=a.alternate.memoizedState.cachePool.pool),n=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(n=a.memoizedState.cachePool.pool),n!==e&&(a.flags|=2048)),u!==l&&u&&(t.child.flags|=8192),De(t,t.updateQueue),L(t),null);case 4:return Ju(),l===null&&Af(t.stateNode.containerInfo),L(t),null;case 10:return dt(t.type),L(t),null;case 19:if(cl(k),a=t.memoizedState,a===null)return L(t),null;if(e=(t.flags&128)!==0,n=a.rendering,n===null)if(e)ra(a,!1);else{if(F!==0||l!==null&&(l.flags&128)!==0)for(l=t.child;l!==null;){if(n=fn(l),n!==null){for(t.flags|=128,ra(a,!1),l=n.updateQueue,t.updateQueue=l,De(t,l),t.subtreeFlags=0,l=u,u=t.child;u!==null;)Ay(u,l),u=u.sibling;return x(k,k.current&1|2),H&&ct(t,a.treeForkCount),t.child}l=l.sibling}a.tail!==null&&Dl()>hn&&(t.flags|=128,e=!0,ra(a,!1),t.lanes=4194304)}else{if(!e)if(l=fn(n),l!==null){if(t.flags|=128,e=!0,l=l.updateQueue,t.updateQueue=l,De(t,l),ra(a,!0),a.tail===null&&a.tailMode===\"hidden\"&&!n.alternate&&!H)return L(t),null}else 2*Dl()-a.renderingStartTime>hn&&u!==536870912&&(t.flags|=128,e=!0,ra(a,!1),t.lanes=4194304);a.isBackwards?(n.sibling=t.child,t.child=n):(l=a.last,l!==null?l.sibling=n:t.child=n,a.last=n)}return a.tail!==null?(l=a.tail,a.rendering=l,a.tail=l.sibling,a.renderingStartTime=Dl(),l.sibling=null,u=k.current,x(k,e?u&1|2:u&1),H&&ct(t,a.treeForkCount),l):(L(t),null);case 22:case 23:return _l(t),lf(),a=t.memoizedState!==null,l!==null?l.memoizedState!==null!==a&&(t.flags|=8192):a&&(t.flags|=8192),a?(u&536870912)!==0&&(t.flags&128)===0&&(L(t),t.subtreeFlags&6&&(t.flags|=8192)):L(t),u=t.updateQueue,u!==null&&De(t,u.retryQueue),u=null,l!==null&&l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(u=l.memoizedState.cachePool.pool),a=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(a=t.memoizedState.cachePool.pool),a!==u&&(t.flags|=2048),l!==null&&cl(nu),null;case 24:return u=null,l!==null&&(u=l.memoizedState.cache),t.memoizedState.cache!==u&&(t.flags|=2048),dt(tl),L(t),null;case 25:return null;case 30:return null}throw Error(r(156,t.tag))}function Vd(l,t){switch($c(t),t.tag){case 1:return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 3:return dt(tl),Ju(),l=t.flags,(l&65536)!==0&&(l&128)===0?(t.flags=l&-65537|128,t):null;case 26:case 27:case 5:return Ie(t),null;case 31:if(t.memoizedState!==null){if(_l(t),t.alternate===null)throw Error(r(340));fu()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 13:if(_l(t),l=t.memoizedState,l!==null&&l.dehydrated!==null){if(t.alternate===null)throw Error(r(340));fu()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 19:return cl(k),null;case 4:return Ju(),null;case 10:return dt(t.type),null;case 22:case 23:return _l(t),lf(),l!==null&&cl(nu),l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 24:return dt(tl),null;case 25:return null;default:return null}}function As(l,t){switch($c(t),t.tag){case 3:dt(tl),Ju();break;case 26:case 27:case 5:Ie(t);break;case 4:Ju();break;case 31:t.memoizedState!==null&&_l(t);break;case 13:_l(t);break;case 19:cl(k);break;case 10:dt(t.type);break;case 22:case 23:_l(t),lf(),l!==null&&cl(nu);break;case 24:dt(tl)}}function fe(l,t){try{var u=t.updateQueue,a=u!==null?u.lastEffect:null;if(a!==null){var e=a.next;u=e;do{if((u.tag&l)===l){a=void 0;var n=u.create,i=u.inst;a=n(),i.destroy=a}u=u.next}while(u!==e)}}catch(c){G(t,t.return,c)}}function wt(l,t,u){try{var a=t.updateQueue,e=a!==null?a.lastEffect:null;if(e!==null){var n=e.next;a=n;do{if((a.tag&l)===l){var i=a.inst,c=i.destroy;if(c!==void 0){i.destroy=void 0,e=t;var f=u,s=c;try{s()}catch(v){G(e,f,v)}}}a=a.next}while(a!==n)}}catch(v){G(t,t.return,v)}}function ps(l){var t=l.updateQueue;if(t!==null){var u=l.stateNode;try{By(t,u)}catch(a){G(l,l.return,a)}}}function _s(l,t,u){u.props=mu(l.type,l.memoizedProps),u.state=l.memoizedState;try{u.componentWillUnmount()}catch(a){G(l,t,a)}}function Ra(l,t){try{var u=l.ref;if(u!==null){switch(l.tag){case 26:case 27:case 5:var a=l.stateNode;break;case 30:a=l.stateNode;break;default:a=l.stateNode}typeof u==\"function\"?l.refCleanup=u(a):u.current=a}}catch(e){G(l,t,e)}}function kl(l,t){var u=l.ref,a=l.refCleanup;if(u!==null)if(typeof a==\"function\")try{a()}catch(e){G(l,t,e)}finally{l.refCleanup=null,l=l.alternate,l!=null&&(l.refCleanup=null)}else if(typeof u==\"function\")try{u(null)}catch(e){G(l,t,e)}else u.current=null}function Os(l){var t=l.type,u=l.memoizedProps,a=l.stateNode;try{l:switch(t){case\"button\":case\"input\":case\"select\":case\"textarea\":u.autoFocus&&a.focus();break l;case\"img\":u.src?a.src=u.src:u.srcSet&&(a.srcset=u.srcSet)}}catch(e){G(l,l.return,e)}}function Di(l,t,u){try{var a=l.stateNode;oh(a,l.type,u,t),a[Tl]=t}catch(e){G(l,l.return,e)}}function Ms(l){return l.tag===5||l.tag===3||l.tag===26||l.tag===27&&Ft(l.type)||l.tag===4}function Ui(l){l:for(;;){for(;l.sibling===null;){if(l.return===null||Ms(l.return))return null;l=l.return}for(l.sibling.return=l.return,l=l.sibling;l.tag!==5&&l.tag!==6&&l.tag!==18;){if(l.tag===27&&Ft(l.type)||l.flags&2||l.child===null||l.tag===4)continue l;l.child.return=l,l=l.child}if(!(l.flags&2))return l.stateNode}}function gc(l,t,u){var a=l.tag;if(a===5||a===6)l=l.stateNode,t?(u.nodeType===9?u.body:u.nodeName===\"HTML\"?u.ownerDocument.body:u).insertBefore(l,t):(t=u.nodeType===9?u.body:u.nodeName===\"HTML\"?u.ownerDocument.body:u,t.appendChild(l),u=u._reactRootContainer,u!=null||t.onclick!==null||(t.onclick=yt));else if(a!==4&&(a===27&&Ft(l.type)&&(u=l.stateNode,t=null),l=l.child,l!==null))for(gc(l,t,u),l=l.sibling;l!==null;)gc(l,t,u),l=l.sibling}function dn(l,t,u){var a=l.tag;if(a===5||a===6)l=l.stateNode,t?u.insertBefore(l,t):u.appendChild(l);else if(a!==4&&(a===27&&Ft(l.type)&&(u=l.stateNode),l=l.child,l!==null))for(dn(l,t,u),l=l.sibling;l!==null;)dn(l,t,u),l=l.sibling}function Ds(l){var t=l.stateNode,u=l.memoizedProps;try{for(var a=l.type,e=t.attributes;e.length;)t.removeAttributeNode(e[0]);ml(t,a,u),t[ol]=l,t[Tl]=u}catch(n){G(l,l.return,n)}}var ft=!1,ll=!1,Ni=!1,io=typeof WeakSet==\"function\"?WeakSet:Set,nl=null;function Ld(l,t){if(l=l.containerInfo,pc=pn,l=vy(l),Lc(l)){if(\"selectionStart\"in l)var u={start:l.selectionStart,end:l.selectionEnd};else l:{u=(u=l.ownerDocument)&&u.defaultView||window;var a=u.getSelection&&u.getSelection();if(a&&a.rangeCount!==0){u=a.anchorNode;var e=a.anchorOffset,n=a.focusNode;a=a.focusOffset;try{u.nodeType,n.nodeType}catch{u=null;break l}var i=0,c=-1,f=-1,s=0,v=0,g=l,d=null;t:for(;;){for(var h;g!==u||e!==0&&g.nodeType!==3||(c=i+e),g!==n||a!==0&&g.nodeType!==3||(f=i+a),g.nodeType===3&&(i+=g.nodeValue.length),(h=g.firstChild)!==null;)d=g,g=h;for(;;){if(g===l)break t;if(d===u&&++s===e&&(c=i),d===n&&++v===a&&(f=i),(h=g.nextSibling)!==null)break;g=d,d=g.parentNode}g=h}u=c===-1||f===-1?null:{start:c,end:f}}else u=null}u=u||{start:0,end:0}}else u=null;for(_c={focusedElem:l,selectionRange:u},pn=!1,nl=t;nl!==null;)if(t=nl,l=t.child,(t.subtreeFlags&1028)!==0&&l!==null)l.return=t,nl=l;else for(;nl!==null;){switch(t=nl,n=t.alternate,l=t.flags,t.tag){case 0:if((l&4)!==0&&(l=t.updateQueue,l=l!==null?l.events:null,l!==null))for(u=0;u title\"))),ml(n,a,u),n[ol]=l,il(n),a=n;break l;case\"link\":var i=Uo(\"link\",\"href\",e).get(a+(u.href||\"\"));if(i){for(var c=0;cX&&(i=X,X=T,T=i);var y=H0(c,T),o=H0(c,X);if(y&&o&&(h.rangeCount!==1||h.anchorNode!==y.node||h.anchorOffset!==y.offset||h.focusNode!==o.node||h.focusOffset!==o.offset)){var m=g.createRange();m.setStart(y.node,y.offset),h.removeAllRanges(),T>X?(h.addRange(m),h.extend(o.node,o.offset)):(m.setEnd(o.node,o.offset),h.addRange(m))}}}}for(g=[],h=c;h=h.parentNode;)h.nodeType===1&&g.push({element:h,left:h.scrollLeft,top:h.scrollTop});for(typeof c.focus==\"function\"&&c.focus(),c=0;cu?32:u,A.T=null,u=Ec,Ec=null;var n=Zt,i=ht;if(al=0,Pu=Zt=null,ht=0,(q&6)!==0)throw Error(r(331));var c=q;if(q|=4,Qs(n.current),Ys(n,n.current,i,u),q=c,oe(0,!1),Ul&&typeof Ul.onPostCommitFiberRoot==\"function\")try{Ul.onPostCommitFiberRoot(te,n)}catch{}return!0}finally{R.p=e,A.T=a,l1(l,t)}}function yo(l,t,u){t=jl(u,t),t=hc(l.stateNode,t,2),l=Qt(l,t,2),l!==null&&(ae(l,2),lt(l))}function G(l,t,u){if(l.tag===3)yo(l,l,u);else for(;t!==null;){if(t.tag===3){yo(t,l,u);break}else if(t.tag===1){var a=t.stateNode;if(typeof t.type.getDerivedStateFromError==\"function\"||typeof a.componentDidCatch==\"function\"&&(jt===null||!jt.has(a))){l=jl(u,l),u=Ss(2),a=Qt(t,u,2),a!==null&&(gs(u,a,t,l),ae(a,2),lt(a));break}}t=t.return}}function Ci(l,t,u){var a=l.pingCache;if(a===null){a=l.pingCache=new wd;var e=new Set;a.set(t,e)}else e=a.get(t),e===void 0&&(e=new Set,a.set(t,e));e.has(u)||(bf=!0,e.add(u),l=Id.bind(null,l,t,u),t.then(l,l))}function Id(l,t,u){var a=l.pingCache;a!==null&&a.delete(t),l.pingedLanes|=l.suspendedLanes&u,l.warmLanes&=~u,Z===l&&(N&u)===u&&(F===4||F===3&&(N&62914560)===N&&300>Dl()-Gn?(q&2)===0&&la(l,0):Ef|=u,Iu===N&&(Iu=0)),lt(l)}function u1(l,t){t===0&&(t=wo()),l=Su(l,t),l!==null&&(ae(l,t),lt(l))}function Pd(l){var t=l.memoizedState,u=0;t!==null&&(u=t.retryLane),u1(l,u)}function lh(l,t){var u=0;switch(l.tag){case 31:case 13:var a=l.stateNode,e=l.memoizedState;e!==null&&(u=e.retryLane);break;case 19:a=l.stateNode;break;case 22:a=l.stateNode._retryCache;break;default:throw Error(r(314))}a!==null&&a.delete(t),u1(l,u)}function th(l,t){return Rc(l,t)}var gn=null,Ou=null,Tc=!1,rn=!1,Bi=!1,Rt=0;function lt(l){l!==Ou&&l.next===null&&(Ou===null?gn=Ou=l:Ou=Ou.next=l),rn=!0,Tc||(Tc=!0,ah())}function oe(l,t){if(!Bi&&rn){Bi=!0;do for(var u=!1,a=gn;a!==null;){if(!t)if(l!==0){var e=a.pendingLanes;if(e===0)var n=0;else{var i=a.suspendedLanes,c=a.pingedLanes;n=(1<<31-Nl(42|l)+1)-1,n&=e&~(i&~c),n=n&201326741?n&201326741|1:n?n|2:0}n!==0&&(u=!0,so(a,n))}else n=N,n=On(a,a===Z?n:0,a.cancelPendingCommit!==null||a.timeoutHandle!==-1),(n&3)===0||ue(a,n)||(u=!0,so(a,n));a=a.next}while(u);Bi=!1}}function uh(){a1()}function a1(){rn=Tc=!1;var l=0;Rt!==0&&sh()&&(l=Rt);for(var t=Dl(),u=null,a=gn;a!==null;){var e=a.next,n=e1(a,t);n===0?(a.next=null,u===null?gn=e:u.next=e,e===null&&(Ou=u)):(u=a,(l!==0||(n&3)!==0)&&(rn=!0)),a=e}al!==0&&al!==5||oe(l,!1),Rt!==0&&(Rt=0)}function e1(l,t){for(var u=l.suspendedLanes,a=l.pingedLanes,e=l.expirationTimes,n=l.pendingLanes&-62914561;0c)break;var v=f.transferSize,g=f.initiatorType;v&&bo(g)&&(f=f.responseEnd,i+=v*(f\"u\"?null:document;function d1(l,t,u){var a=fa;if(a&&typeof t==\"string\"&&t){var e=Ql(t);e='link[rel=\"'+l+'\"][href=\"'+e+'\"]',typeof u==\"string\"&&(e+='[crossorigin=\"'+u+'\"]'),Oo.has(e)||(Oo.add(e),l={rel:l,crossOrigin:u,href:t},a.querySelector(e)===null&&(t=a.createElement(\"link\"),ml(t,\"link\",l),il(t),a.head.appendChild(t)))}}function Eh(l){Et.D(l),d1(\"dns-prefetch\",l,null)}function zh(l,t){Et.C(l,t),d1(\"preconnect\",l,t)}function Th(l,t,u){Et.L(l,t,u);var a=fa;if(a&&l&&t){var e='link[rel=\"preload\"][as=\"'+Ql(t)+'\"]';t===\"image\"&&u&&u.imageSrcSet?(e+='[imagesrcset=\"'+Ql(u.imageSrcSet)+'\"]',typeof u.imageSizes==\"string\"&&(e+='[imagesizes=\"'+Ql(u.imageSizes)+'\"]')):e+='[href=\"'+Ql(l)+'\"]';var n=e;switch(t){case\"style\":n=ta(l);break;case\"script\":n=oa(l)}Ll.has(n)||(l=J({rel:\"preload\",href:t===\"image\"&&u&&u.imageSrcSet?void 0:l,as:t},u),Ll.set(n,l),a.querySelector(e)!==null||t===\"style\"&&a.querySelector(ye(n))||t===\"script\"&&a.querySelector(se(n))||(t=a.createElement(\"link\"),ml(t,\"link\",l),il(t),a.head.appendChild(t)))}}function Ah(l,t){Et.m(l,t);var u=fa;if(u&&l){var a=t&&typeof t.as==\"string\"?t.as:\"script\",e='link[rel=\"modulepreload\"][as=\"'+Ql(a)+'\"][href=\"'+Ql(l)+'\"]',n=e;switch(a){case\"audioworklet\":case\"paintworklet\":case\"serviceworker\":case\"sharedworker\":case\"worker\":case\"script\":n=oa(l)}if(!Ll.has(n)&&(l=J({rel:\"modulepreload\",href:l},t),Ll.set(n,l),u.querySelector(e)===null)){switch(a){case\"audioworklet\":case\"paintworklet\":case\"serviceworker\":case\"sharedworker\":case\"worker\":case\"script\":if(u.querySelector(se(n)))return}a=u.createElement(\"link\"),ml(a,\"link\",l),il(a),u.head.appendChild(a)}}}function ph(l,t,u){Et.S(l,t,u);var a=fa;if(a&&l){var e=Qu(a).hoistableStyles,n=ta(l);t=t||\"default\";var i=e.get(n);if(!i){var c={loading:0,preload:null};if(i=a.querySelector(ye(n)))c.loading=5;else{l=J({rel:\"stylesheet\",href:l,\"data-precedence\":t},u),(u=Ll.get(n))&&pf(l,u);var f=i=a.createElement(\"link\");il(f),ml(f,\"link\",l),f._p=new Promise(function(s,v){f.onload=s,f.onerror=v}),f.addEventListener(\"load\",function(){c.loading|=1}),f.addEventListener(\"error\",function(){c.loading|=2}),c.loading|=4,Je(i,t,a)}i={type:\"stylesheet\",instance:i,count:1,state:c},e.set(n,i)}}}function _h(l,t){Et.X(l,t);var u=fa;if(u&&l){var a=Qu(u).hoistableScripts,e=oa(l),n=a.get(e);n||(n=u.querySelector(se(e)),n||(l=J({src:l,async:!0},t),(t=Ll.get(e))&&_f(l,t),n=u.createElement(\"script\"),il(n),ml(n,\"link\",l),u.head.appendChild(n)),n={type:\"script\",instance:n,count:1,state:null},a.set(e,n))}}function Oh(l,t){Et.M(l,t);var u=fa;if(u&&l){var a=Qu(u).hoistableScripts,e=oa(l),n=a.get(e);n||(n=u.querySelector(se(e)),n||(l=J({src:l,async:!0,type:\"module\"},t),(t=Ll.get(e))&&_f(l,t),n=u.createElement(\"script\"),il(n),ml(n,\"link\",l),u.head.appendChild(n)),n={type:\"script\",instance:n,count:1,state:null},a.set(e,n))}}function Mo(l,t,u,a){var e=(e=Yt.current)?zn(e):null;if(!e)throw Error(r(446));switch(l){case\"meta\":case\"title\":return null;case\"style\":return typeof u.precedence==\"string\"&&typeof u.href==\"string\"?(t=ta(u.href),u=Qu(e).hoistableStyles,a=u.get(t),a||(a={type:\"style\",instance:null,count:0,state:null},u.set(t,a)),a):{type:\"void\",instance:null,count:0,state:null};case\"link\":if(u.rel===\"stylesheet\"&&typeof u.href==\"string\"&&typeof u.precedence==\"string\"){l=ta(u.href);var n=Qu(e).hoistableStyles,i=n.get(l);if(i||(e=e.ownerDocument||e,i={type:\"stylesheet\",instance:null,count:0,state:{loading:0,preload:null}},n.set(l,i),(n=e.querySelector(ye(l)))&&!n._p&&(i.instance=n,i.state.loading=5),Ll.has(l)||(u={rel:\"preload\",as:\"style\",href:u.href,crossOrigin:u.crossOrigin,integrity:u.integrity,media:u.media,hrefLang:u.hrefLang,referrerPolicy:u.referrerPolicy},Ll.set(l,u),n||Mh(e,l,u,i.state))),t&&a===null)throw Error(r(528,\"\"));return i}if(t&&a!==null)throw Error(r(529,\"\"));return null;case\"script\":return t=u.async,u=u.src,typeof u==\"string\"&&t&&typeof t!=\"function\"&&typeof t!=\"symbol\"?(t=oa(u),u=Qu(e).hoistableScripts,a=u.get(t),a||(a={type:\"script\",instance:null,count:0,state:null},u.set(t,a)),a):{type:\"void\",instance:null,count:0,state:null};default:throw Error(r(444,l))}}function ta(l){return'href=\"'+Ql(l)+'\"'}function ye(l){return'link[rel=\"stylesheet\"]['+l+\"]\"}function h1(l){return J({},l,{\"data-precedence\":l.precedence,precedence:null})}function Mh(l,t,u,a){l.querySelector('link[rel=\"preload\"][as=\"style\"]['+t+\"]\")?a.loading=1:(t=l.createElement(\"link\"),a.preload=t,t.addEventListener(\"load\",function(){return a.loading|=1}),t.addEventListener(\"error\",function(){return a.loading|=2}),ml(t,\"link\",u),il(t),l.head.appendChild(t))}function oa(l){return'[src=\"'+Ql(l)+'\"]'}function se(l){return\"script[async]\"+l}function Do(l,t,u){if(t.count++,t.instance===null)switch(t.type){case\"style\":var a=l.querySelector('style[data-href~=\"'+Ql(u.href)+'\"]');if(a)return t.instance=a,il(a),a;var e=J({},u,{\"data-href\":u.href,\"data-precedence\":u.precedence,href:null,precedence:null});return a=(l.ownerDocument||l).createElement(\"style\"),il(a),ml(a,\"style\",e),Je(a,u.precedence,l),t.instance=a;case\"stylesheet\":e=ta(u.href);var n=l.querySelector(ye(e));if(n)return t.state.loading|=4,t.instance=n,il(n),n;a=h1(u),(e=Ll.get(e))&&pf(a,e),n=(l.ownerDocument||l).createElement(\"link\"),il(n);var i=n;return i._p=new Promise(function(c,f){i.onload=c,i.onerror=f}),ml(n,\"link\",a),t.state.loading|=4,Je(n,u.precedence,l),t.instance=n;case\"script\":return n=oa(u.src),(e=l.querySelector(se(n)))?(t.instance=e,il(e),e):(a=u,(e=Ll.get(n))&&(a=J({},u),_f(a,e)),l=l.ownerDocument||l,e=l.createElement(\"script\"),il(e),ml(e,\"link\",a),l.head.appendChild(e),t.instance=e);case\"void\":return null;default:throw Error(r(443,t.type))}else t.type===\"stylesheet\"&&(t.state.loading&4)===0&&(a=t.instance,t.state.loading|=4,Je(a,u.precedence,l));return t.instance}function Je(l,t,u){for(var a=u.querySelectorAll('link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'),e=a.length?a[a.length-1]:null,n=e,i=0;i title\"):null)}function Dh(l,t,u){if(u===1||t.itemProp!=null)return!1;switch(l){case\"meta\":case\"title\":return!0;case\"style\":if(typeof t.precedence!=\"string\"||typeof t.href!=\"string\"||t.href===\"\")break;return!0;case\"link\":if(typeof t.rel!=\"string\"||typeof t.href!=\"string\"||t.href===\"\"||t.onLoad||t.onError)break;return t.rel===\"stylesheet\"?(l=t.disabled,typeof t.precedence==\"string\"&&l==null):!0;case\"script\":if(t.async&&typeof t.async!=\"function\"&&typeof t.async!=\"symbol\"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==\"string\")return!0}return!1}function v1(l){return!(l.type===\"stylesheet\"&&(l.state.loading&3)===0)}function Uh(l,t,u,a){if(u.type===\"stylesheet\"&&(typeof a.media!=\"string\"||matchMedia(a.media).matches!==!1)&&(u.state.loading&4)===0){if(u.instance===null){var e=ta(a.href),n=t.querySelector(ye(e));if(n){t=n._p,t!==null&&typeof t==\"object\"&&typeof t.then==\"function\"&&(l.count++,l=Tn.bind(l),t.then(l,l)),u.state.loading|=4,u.instance=n,il(n);return}n=t.ownerDocument||t,a=h1(a),(e=Ll.get(e))&&pf(a,e),n=n.createElement(\"link\"),il(n);var i=n;i._p=new Promise(function(c,f){i.onload=c,i.onerror=f}),ml(n,\"link\",a),u.instance=n}l.stylesheets===null&&(l.stylesheets=new Map),l.stylesheets.set(u,t),(t=u.state.preload)&&(u.state.loading&3)===0&&(l.count++,u=Tn.bind(l),t.addEventListener(\"load\",u),t.addEventListener(\"error\",u))}}var Gi=0;function Nh(l,t){return l.stylesheets&&l.count===0&&We(l,l.stylesheets),0Gi?50:800)+t);return l.unsuspend=u,function(){l.unsuspend=null,clearTimeout(a),clearTimeout(e)}}:null}function Tn(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)We(this,this.stylesheets);else if(this.unsuspend){var l=this.unsuspend;this.unsuspend=null,l()}}}var An=null;function We(l,t){l.stylesheets=null,l.unsuspend!==null&&(l.count++,An=new Map,t.forEach(Hh,l),An=null,Tn.call(l))}function Hh(l,t){if(!(t.state.loading&4)){var u=An.get(l);if(u)var a=u.get(null);else{u=new Map,An.set(l,u);for(var e=l.querySelectorAll(\"link[data-precedence],style[data-precedence]\"),n=0;n{\"use strict\";function p1(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>\"u\"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=\"function\"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(p1)}catch(l){console.error(l)}}p1(),_1.exports=A1()});var kt=Vn(ya(),1),Q1=Vn(O1(),1);var Nf=Vn(ya(),1),M1=new Set([\"blur\",\"change\",\"click\",\"doubleClick\",\"focus\",\"input\",\"keyDown\",\"keyUp\",\"pointerDown\",\"pointerUp\",\"submit\"]),Qh=new Set([\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"link\",\"meta\",\"param\",\"source\",\"track\",\"wbr\"]),jh=new Set([\"autoFocus\",\"checked\",\"disabled\",\"hidden\",\"multiple\",\"readOnly\",\"required\",\"selected\"]),Zh={class:\"className\",for:\"htmlFor\",tabindex:\"tabIndex\",readonly:\"readOnly\",maxlength:\"maxLength\",autocomplete:\"autoComplete\"};function D1(l){return l===\"input\"?\"onChange\":l===\"doubleClick\"?\"onDoubleClick\":\"on\".concat(l.charAt(0).toUpperCase()).concat(l.slice(1))}function xh(l,t){return l===\"style\"?wh(t):jh.has(l)&&(t===\"true\"||t===\"false\")?t===\"true\":t}function Vh(l){let t={};for(let[u,a]of new FormData(l).entries()){let e=typeof File<\"u\"&&a instanceof File?a.name:a;Object.hasOwn(t,u)?t[u]=Array.isArray(t[u])?[...t[u],e]:[t[u],e]:t[u]=e}return JSON.stringify(t)}function Lh(l,t,u,a){return l===\"input\"||l===\"change\"?t?.type===\"checkbox\"||t?.type===\"radio\"?t.checked?\"true\":\"false\":t&&\"value\"in t?String(t.value):void 0:(l===\"keyDown\"||l===\"keyUp\")&&a.key?a.key:u.value===void 0?void 0:String(u.value)}function Kh(l,t,u){let a=typeof HTMLAnchorElement<\"u\"&&t instanceof HTMLAnchorElement;l===\"click\"&&a&&u.preventDefault()}function U1(l,t,u,a){let e=a.currentTarget,n={kind:l};if(t&&(n.id=String(t)),l===\"submit\")return a.preventDefault(),n.data=Vh(e),n;Kh(l,e,a);let i=e?.name||u.name,c=Lh(l,e,u,a);return i&&(n.name=String(i)),c!==void 0&&(n.value=c),n}function Jh(l,t,u,a){l===\"click\"&&t.id===\"modal-backdrop\"&&u.target!==u.currentTarget||(u.stopPropagation?.(),a(U1(l,t.id,t,u)))}function wh(l){return!l||typeof l!=\"string\"?l:Object.fromEntries(l.split(\";\").map(t=>t.split(\":\")).filter(([t,u])=>t?.trim()&&u!==void 0).map(([t,...u])=>[t.trim().replace(/-([a-z])/g,(a,e)=>e.toUpperCase()),u.join(\":\").trim()]))}function Wh(l){let t={};for(let[u,a]of Object.entries(l)){if(u===\"event\"||u===\"events\"||u===\"dangerouslySetInnerHTML\")continue;let n=Zh[u.toLowerCase()]??u;/^on[A-Z]/.test(n)||(t[n]=xh(n,a))}return t}function $h(l,t,u){let a=t.event;typeof a==\"string\"&&M1.has(a)&&(l[D1(a)]=e=>Jh(a,t,e,u))}function Fh(l,t,u,a){return e=>{let n=U1(l,u.id,u,e);typeof t==\"string\"?n.id=t:t&&typeof t==\"object\"&&Object.assign(n,t),a(n)}}function kh(l,t,u){if(t.events&&typeof t.events==\"object\")for(let[a,e]of Object.entries(t.events))M1.has(a)&&(l[D1(a)]=Fh(a,e,t,u))}function Ih(l,t){let u=Wh(l);return $h(u,l,t),kh(u,l,t),u}function Ph(l,t,u){let a=[];return l.text!==void 0&&l.text!==null&&l.text!==\"\"&&a.push(String(l.text)),Array.isArray(l.children)&&l.children.forEach((e,n)=>{a.push(Hf(e,t,\"\".concat(u,\".\").concat(n)))}),a}function lv(l,t,u){return l.key??t.key??t.id??u}function Hf(l,t,u){if(l==null||l===!1)return null;if(typeof l==\"string\"||typeof l==\"number\")return String(l);if(Array.isArray(l))return l.map((i,c)=>Hf(i,t,\"\".concat(u,\".\").concat(c)));if(typeof l!=\"object\")return null;let a=typeof l.tag==\"string\"&&l.tag?l.tag:\"div\",e=l.props&&typeof l.props==\"object\"?l.props:{},n=Ih(e,t);return n.key=lv(l,e,u),Qh.has(a.toLowerCase())?Nf.default.createElement(a,n):Nf.default.createElement(a,n,...Ph(l,t,String(n.key)))}function N1(l,t){return Hf(l,t,\"root\")}function H1(l){if(!l||typeof l!=\"object\"||Array.isArray(l))throw new Error(\"Osprey render message must be a JSON object\");return{model:typeof l.model==\"string\"?l.model:JSON.stringify(l.model??{}),view:l.view??null,commands:Array.isArray(l.commands)?l.commands:[]}}function C1(l){return l?.kind??l?.type??\"\"}var tv=new TextDecoder(\"utf-8\");function Cf(l){if(!l.memory)throw new Error(\"WASI memory is not attached\");return new DataView(l.memory.buffer)}function q1(l){if(!l.memory)throw new Error(\"WASI memory is not attached\");return new Uint8Array(l.memory.buffer)}function uv(l,t){l.pending&&(t(l.pending),l.pending=\"\")}function av(l,t,u,a,e,n){let i=Cf(l),c=0,f=\"\";for(let s=0;sav(l,t,...u),proc_exit:()=>(t(),0),fd_close:()=>0,fd_seek:()=>0,fd_fdstat_get:()=>0,fd_fdstat_set_flags:()=>0}}function nv(l){return{environ_sizes_get:(...t)=>B1(l,...t),environ_get:()=>0,args_sizes_get:(...t)=>B1(l,...t),args_get:()=>0,clock_time_get:(t,u,a)=>(Cf(l).setBigUint64(a,BigInt(Date.now())*1000000n,!0),0),random_get:(t,u)=>(globalThis.crypto.getRandomValues(q1(l).subarray(t,t+u)),0),sched_yield:()=>0,poll_oneoff:()=>52}}function iv(l){return new Proxy(l,{get(t,u){return t[u]??(()=>52)}})}function R1(l=t=>console.debug(t.trimEnd())){let t={memory:null,pending:\"\"},u=()=>uv(t,l),a={...ev(t,u),...nv(t)};return{imports:iv(a),setMemory(e){t.memory=e},flush:u}}var cv=\"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IAg3AwAgACAGEJWAgIAAIQACQCABUEUNACAAIQMMAQsgABDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgABCBgYCAACEAIAAgABCDgYCAAGpBLDsAACAAEOSAgIAAIAMQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAgAxD+gICAACEDCyACQeAAaiSAgICAACADC58CAwJ/An4CfyOAgICAAEHAAGsiAiSAgICAACAAQRhqKAIAIQMgAEEIaikCACEEIABBEGopAgAhBUIgEOOAgIAAIQAgAiAFNwMwIABBiJiEgAAgAkEwahD5gICAABpCgCAQ44CAgAAhBiACIAA2AiAgBkHzl4SAACACQSBqEPmAgIAAGgJAIAQgBhDggICAACIARQ0AIAVCAXwhBQNAIAAgAxD/gICAACEHQiAQ44CAgAAhACACIAU3AxAgAEGImISAACACQRBqEPmAgIAAGkKAIBDjgICAACEGIAIgADYCACAGQfOXhIAAIAIQ+YCAgAAaIAVCAXwhBSABIAdFrXwhASAEIAYQ4ICAgAAiAA0ACwsgAkHAAGokgICAgAAgAQuVAQEBfwJAIABBCGooAgAiAUG5g4SAABD/gICAAEUNAAJAIAFBioiEgAAQ/4CAgAANACAAEJmAgIAADwsCQCABQZOUhIAAEP+AgIAADQAgABCagICAAA8LAkAgAUGHgYSAABD/gICAAA0AIAAQm4CAgAAPCyABQZ2BhIAAEP+AgIAADQAgABCcgICAAA8LIAAQnYCAgAAL3RIDAX8BfgZ/IABBEGooAgAhASAAQcAAaigCABDbgICAACECQiAQ44CAgAAiA0GFgICAADYCACADQRhqQuMANwMAIANBEGpCADcDACADQQhqIAI3AwAgAyABEJKAgIAAIQQgAhDigICAABogAEHEAGooAgAQ24CAgAAhAkIwEOOAgIAAIgNBiYCAgAA2AgAgA0EoakGFnYSAADYCACADQSBqQgQ3AwAgA0EYakIANwMAIANBEGpByJGEgAA2AgAgA0EIaiACNwMAIANCABCWgICAACEFIAIQ4oCAgAAaQggQ44CAgAAiA0GBgICAADYCACADQQRqQeSVhIAANgIAIANB7JOEgAAQiICAgAAhA0IMEOOAgIAAIgZBgoCAgAA2AgAgBkEIakGRjYSAADYCACAGQQRqIAM2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gAAgAhD+gICAACIBEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACABEIGBgIAAIQEgASABEIOBgIAAakEsOwAAQggQ44CAgAAiAkGBgICAADYCACACQQRqQfuVhIAANgIAIAIgAEE4aigCABCIgICAACECIAEQ5ICAgAAgAhDkgICAAHxCAXwQ44CAgAAgARCBgYCAACACEP6AgIAAIgEQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAEQgYGAgAAhASABIAEQg4GAgABqQSw7AABCCBDjgICAACICQYGAgIAANgIAIAJBBGpBxYKEgAA2AgAgAiAAQTxqKAIAEIiAgIAAIQIgARDkgICAACACEOSAgIAAfEIBfBDjgICAACABEIGBgIAAIAIQ/oCAgAAiARDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgARCBgYCAACEBIAEgARCDgYCAAGpBLDsAAEIIEOOAgIAAIgJBgYCAgAA2AgAgAkEEakGKiISAADYCACACIABBwABqKAIAEIiAgIAAIQIgARDkgICAACACEOSAgIAAfEIBfBDjgICAACABEIGBgIAAIAIQ/oCAgAAiARDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgARCBgYCAACEBIAEgARCDgYCAAGpBLDsAAEIIEOOAgIAAIgJBgYCAgAA2AgAgAkEEakGHgYSAADYCACACIABBxABqKAIAEIiAgIAAIQAgARDkgICAACAAEOSAgIAAfEIBfBDjgICAACABEIGBgIAAIAAQ/oCAgAAhAEHTgISAABDkgICAACAAEOSAgIAAfEIBfBDjgICAACIBQfsAOwAAIAEgABD+gICAACIAEOSAgIAAQdGAhIAAEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIQAgACAAEIOBgIAAakH9ADsAACAAC/4JAQZ/IABBBGooAgAiAEEkaigCAEG0lISAABD/gICAACECIABBKGooAgBBtJSEgAAQ/4CAgAAhAwJAAkAgAkUNAEGFnYSAACECIAMNAQtCCBDjgICAACICQYGAgIAANgIAIAJBBGpB5JWEgAA2AgAgAkHjiISAABCIgICAACEDQgwQ44CAgAAiAkGDgICAADYCACACQQhqQZ+EhIAANgIAIAJBBGogAzYCACACQYWdhIAAEJGA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ACEDIAIgABDkgICAACADEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIAMQ/oCAgAAgAigCABGAgICAAICAgIAAIQALIAFBEGokgICAgAAgAAuWGgEHf0GFnYSAACEBAkAgAEEcaigCAEGVkISAABD/gICAAA0AQggQ44CAgAAiAUGBgICAADYCACABQQRqQeSVhIAANgIAIAFB3pOEgAAQiICAgAAhAEIMEOOAgIAAIgFBgoCAgAA2AgAgAUEIakGfhISAADYCACABQQRqIAA2AgBCDBDjgICAACICQYKAgIAANgIAIAJBCGpBn4SEgAA2AgAgAkEEakGFnYSAADYCAEIIEOOAgIAAIgBBgYCAgAA2AgAgAEEEakHklYSAADYCACAAQYiDhIAAEIiAgIAAIQNCDBDjgICAACIAQYOAgIAANgIAIABBCGpBq5CEgAA2AgAgAEEEaiADNgIAIABBwKKEgAAQkYCAgAAiABDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgABCBgYCAACEAIAAgABCDgYCAAGpBLDsAAEIIEOOAgIAAIgNBgYCAgAA2AgAgA0EEakHkmISAADYCACADQbCkhIAAEIiAgIAAIQRCDBDjgICAACIDQYOAgIAANgIAIANBCGpByZuEgAA2AgAgA0EEaiAENgIAIANB34WEgAAQkYCAgAAhAyAAEOSAgIAAIAMQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAgAxD+gICAACIAEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIQAgACAAEIOBgIAAakEsOwAAQgwQ44CAgAAiA0GDgICAADYCACADQQhqQe+NhIAANgIAIANBBGpBhZ2EgAA2AgAgA0HgooSAABCRgICAACEDIAIgABDkgICAACADEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIAMQ/oCAgAAQkICAgAAiABDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgABCBgYCAACEAIAAgABCDgYCAAGpBLDsAAEIQEOOAgIAAIgJBi4CAgAA2AgAgAkEMakGFlYSAADYCACACQQhqQauShIAANgIAIAJBBGpBkKOEgAA2AgAgAkGlgISAABCygICAACECIAEgABDkgICAACACEOSAgIAAfEIBfBDjgICAACAA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DQBBlpqEgAAhACACQcAAakGWmoSAADYCACACQTxqQYWdhIAANgIAIAJBOGpBhZ2EgAA2AgAgAkE0akGFnYSAADYCACACQTBqQYuVhIAANgIAIAJBLGpBi5WEgAA2AgAgAkEoakGLlYSAADYCACACQSRqQbSUhIAANgIAIAJBIGpBlpmEgAA2AgAgAkEcakGWmYSAADYCACACQRhqQYWdhIAANgIAIAJBFGpByJGEgAA2AgAgAkEQakHTm4SAADYCACACQQxqQfOMhIAANgIAIAJBCGpBuYOEgAA2AgAMAQsgABDbgICAACIBQcyUhIAAEOCAgIAAIQMgARDigICAABogAkEIaiADQbmDhIAAIAMbNgIAIAAQ24CAgAAiAUHwloSAABDggICAACEDIAEQ4oCAgAAaIAJBDGogA0HzjISAACADGzYCACAAENuAgIAAIgFB9piEgAAQ4ICAgAAhAyABEOKAgIAAGiACQRBqIANB05uEgAAgAxs2AgAgABDbgICAACIBQcyLhIAAEOCAgIAAIQMgARDigICAABogAkEUaiADQciRhIAAIAMbNgIAIAAQ24CAgAAiAUGOk4SAABDggICAACEDIAEQ4oCAgAAaIAJBGGogA0GFnYSAACADGzYCACAAENuAgIAAIgFBvJKEgAAQ4ICAgAAhAyABEOKAgIAAGiACQRxqIANBlpmEgAAgAxs2AgAgABDbgICAACIBQbOEhIAAEOCAgIAAIQMgARDigICAABogAkEgaiADQZaZhIAAIAMbNgIAIAAQ24CAgAAiAUG3k4SAABDggICAACEDIAEQ4oCAgAAaIAJBJGogA0GLlYSAACADGzYCACAAENuAgIAAIgFBv4GEgAAQ4ICAgAAhAyABEOKAgIAAGiACQShqIANBi5WEgAAgAxs2AgAgABDbgICAACIBQeCZhIAAEOCAgIAAIQMgARDigICAABogAkEsaiADQYuVhIAAIAMbNgIAIAAQ24CAgAAiAUHRmYSAABDggICAACEDIAEQ4oCAgAAaIAJBMGogA0GLlYSAACADGzYCACAAENuAgIAAIgFBvZWEgAAQ4ICAgAAhAyABEOKAgIAAGiACQTRqIANBhZ2EgAAgAxs2AgAgABDbgICAACIBQfuVhIAAEOCAgIAAIQMgARDigICAABogAkE4aiADQYWdhIAAIAMbNgIAIAAQ24CAgAAiAUHFgoSAABDggICAACEDIAEQ4oCAgAAaIAJBPGogA0GFnYSAACADGzYCACAAENuAgIAAIgFBioiEgAAQ4ICAgAAhAyABEOKAgIAAGiACQcAAaiADQZaahIAAIAMbNgIAIAAQ24CAgAAiAUGHgYSAABDggICAACEAIAEQ4oCAgAAaIABBlpqEgAAgABshAAsgAkHEAGogADYCACACC74EAQJ/IABBBGooAgAhAiAAQQhqKAIAIQNCyAAQ44CAgAAiAEIANwIAIABBCGogA0EIaigCACABIAJBzJSEgAAQ/4CAgAAbNgIAIABBDGogA0EMaigCACABIAJB8JaEgAAQ/4CAgAAbNgIAIABBEGogA0EQaigCACABIAJB9piEgAAQ/4CAgAAbNgIAIABBFGogA0EUaigCACABIAJBzIuEgAAQ/4CAgAAbNgIAIABBGGogA0EYaigCACABIAJBjpOEgAAQ/4CAgAAbNgIAIABBHGogA0EcaigCACABIAJBvJKEgAAQ/4CAgAAbNgIAIABBIGogA0EgaigCACABIAJBs4SEgAAQ/4CAgAAbNgIAIABBJGogA0EkaigCACABIAJBt5OEgAAQ/4CAgAAbNgIAIABBKGogA0EoaigCACABIAJBv4GEgAAQ/4CAgAAbNgIAIABBLGogA0EsaigCACABIAJB4JmEgAAQ/4CAgAAbNgIAIABBMGogA0EwaigCACABIAJB0ZmEgAAQ/4CAgAAbNgIAIABBNGogA0E0aigCACABIAJBvZWEgAAQ/4CAgAAbNgIAIABBOGogA0E4aigCACABIAJB+5WEgAAQ/4CAgAAbNgIAIABBPGogA0E8aigCACABIAJBxYKEgAAQ/4CAgAAbNgIAIABBwABqIANBwABqKAIAIAEgAkGKiISAABD/gICAABs2AgAgAEHEAGogA0HEAGooAgAgASACQYeBhIAAEP+AgIAAGzYCACAAC/UfBQF/An4EfwF+BX8jgICAgABBoAFrIgEkgICAgAAgAEHAAGooAgAQ24CAgAAhAiAAQRBqKAIAIQAgAUIANwOYAUIAIQMCQCAAIAFBmAFqEOyAgIAAQgBSDQAgASkDmAEhA0IYEOOAgIAAIgBBo4CAgAA2AgAgAEEQakIANwMAIABBCGogAjcDACAAIAMQrYCAgAAhAwtCIBDjgICAACEAIAEgAzcDkAEgAEGImISAACABQZABahD5gICAABpCgCAQ44CAgAAhBCABIAA2AoABIARB35iEgAAgAUGAAWoQ+YCAgAAaIAIgBBDggICAACEFQiAQ44CAgAAhACABIAM3A3AgAEGImISAACABQfAAahD5gICAABpCgCAQ44CAgAAhBCABIAA2AmAgBEHqi4SAACABQeAAahD5gICAABogAiAEEOCAgIAAIQZCIBDjgICAACEAIAEgAzcDUCAAQYiYhIAAIAFB0ABqEPmAgIAAGkKAIBDjgICAACEEIAEgADYCQCAEQf+WhIAAIAFBwABqEPmAgIAAGiACIAQQ4ICAgAAhB0IgEOOAgIAAIQAgASADNwMwIABBiJiEgAAgAUEwahD5gICAABpCgCAQ44CAgAAhBCABIAA2AiAgBEGpiISAACABQSBqEPmAgIAAGiACIAQQ4ICAgAAhACABQgA3A5gBIABB2ZuEgAAgABsgAUGYAWoQ7ICAgAAhAyABKQOYASEIIAIQ4oCAgAAaQggQ44CAgAAiAEGBgICAADYCACAAQQRqQeSVhIAANgIAIABBz5OEgAAQiICAgAAhBEIMEOOAgIAAIgBBgoCAgAA2AgAgAEEIakGfhISAADYCACAAQQRqIAQ2AgBCDBDjgICAACIJQYKAgIAANgIAIAlBCGpBn4SEgAA2AgAgCUEEakGFnYSAADYCAEIIEOOAgIAAIgRBgYCAgAA2AgAgBEEEakHklYSAADYCACAEQZClhIAAEIiAgIAAIQpCDBDjgICAACIEQYOAgIAANgIAIARBCGpBq5CEgAA2AgAgBEEEaiAKNgIAIARBu5qEgAAQkYCAgAAiBBDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgBBCBgYCAACEEIAQgBBCDgYCAAGpBLDsAAEIMEOOAgIAAIgtBg4CAgAA2AgAgC0EIakGfhISAADYCACALQQRqQYWdhIAANgIAQgwQ44CAgAAiCkGDgICAADYCACAKQQhqQaqRhIAANgIAIApBBGpBhZ2EgAA2AgBCgCAQ44CAgAAhDCABIAVBsICEgAAgBRsiDTYCECAMQbClhIAAIAFBEGoQ+YCAgAAaIAogDBCRgICAACIKEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAKEIGBgIAAIQogCiAKEIOBgIAAakEsOwAAQgwQ44CAgAAiBUGDgICAADYCACAFQQhqQcmbhIAANgIAIAVBBGpBhZ2EgAA2AgAgBSAGQdCkhIAAIAYbEJGAgIAAIQUgCyAKEOSAgIAAIAUQ5ICAgAB8QgF8EOOAgIAAIAoQgYGAgAAgBRD+gICAABCRgICAACEKIAkgBBDkgICAACAKEOSAgIAAfEIBfBDjgICAACAEEIGBgIAAIAoQ/oCAgAAQkICAgAAiBBDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgBBCBgYCAACEEIAQgBBCDgYCAAGpBLDsAAEIIEOOAgIAAIgpBgYCAgAA2AgAgCkEEakHklYSAADYCACAKQaC3hIAAEIiAgIAAIQlCDBDjgICAACIKQYOAgIAANgIAIApBCGpBq5CEgAA2AgAgCkEEaiAJNgIAIApBpJSEgAAQkYCAgAAhCiAAIAQQ5ICAgAAgChDkgICAAHxCAXwQ44CAgAAgBBCBgYCAACAKEP6AgIAAIAAoAgARgICAgACAgICAACEFQggQ44CAgAAiAEGBgICAADYCACAAQQRqQeSVhIAANgIAIABBnJeEgAAQiICAgAAhAEIMEOOAgIAAIgRBgoCAgAA2AgAgBEEIakGfhISAADYCACAEQQRqIAA2AgBCDBDjgICAACIAQYOAgIAANgIAIABBCGpBqpGEgAA2AgAgAEEEakGFnYSAADYCACAAQdClhIAAEJGAgIAAIgAQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAhACAAIAAQg4GAgABqQSw7AABCDBDjgICAACIKQYOAgIAANgIAIApBCGpBnJOEgAA2AgAgCkEEakGFnYSAADYCACAKIAdB1ZuEgAAgBxsQkYCAgAAhCiAAEOSAgIAAIAoQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAgChD+gICAACIAEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIQAgACAAEIOBgIAAakEsOwAAQgwQ44CAgAAiCkGDgICAADYCACAKQQhqQauQhIAANgIAIApBBGpBhZ2EgAA2AgAgCkGKlISAAEHwpISAACAIQgBVG0HwpISAACADUBsQkYCAgAAhCiAEIAAQ5ICAgAAgChDkgICAAHxCAXwQ44CAgAAgABCBgYCAACAKEP6AgIAAEJCAgIAAIQZCCBDjgICAACIAQYGAgIAANgIAIABBBGpB5JWEgAA2AgAgAEGaiYSAABCIgICAACEAQgwQ44CAgAAiCkGCgICAADYCACAKQQhqQZ+EhIAANgIAIApBBGogADYCAEIQEOOAgIAAIgBBi4CAgAA2AgAgAEEMakGFh4SAADYCACAAQQhqQduGhIAANgIAIABBBGpB0YGEgAA2AgAgAEHym4SAABCygICAACIAEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIQAgACAAEIOBgIAAakEsOwAAQhAQ44CAgAAiBEGLgICAADYCACAEQQxqQZaEhIAANgIAIARBCGpB6YOEgAA2AgAgBEEEakGwqYSAADYCACAEQbiAhIAAELKAgIAAIQQgABDkgICAACAEEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIAQQ/oCAgAAiABDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgABCBgYCAACEAIAAgABCDgYCAAGpBLDsAAEIQEOOAgIAAIgRBi4CAgAA2AgAgBEEMakH8jISAADYCACAEQQhqQc+MhIAANgIAIARBBGpBsKmEgAA2AgAgBEGogISAABCygICAACEEIAogABDkgICAACAEEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIAQQ/oCAgAAQkICAgAAhB0IIEOOAgIAAIgBBgYCAgAA2AgAgAEEEakHklYSAADYCACAAQc6IhIAAEIiAgIAAIQRCDBDjgICAACIAQYKAgIAANgIAIABBCGpBh5KEgAA2AgAgAEEEaiAENgIAQgwQ44CAgAAiCkGCgICAADYCACAKQQhqQZ+EhIAANgIAIApBBGpBhZ2EgAA2AgBCDBDjgICAACIEQYOAgIAANgIAIARBCGpBx4eEgAA2AgAgBEEEakGFnYSAADYCACAEQbObhIAAEJGAgIAAIgQQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAQQgYGAgAAhBCAEIAQQg4GAgABqQSw7AABCDBDjgICAACIJQYOAgIAANgIAIAlBCGpB+JmEgAA2AgAgCUEEakGFnYSAADYCAEKAIBDjgICAACELIAEgDTYCACALQduKhIAAIAEQ+YCAgAAaIAkgCxCRgICAACEJIAogBBDkgICAACAJEOSAgIAAfEIBfBDjgICAACAEEIGBgIAAIAkQ/oCAgAAQkICAgAAiBBDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgBBCBgYCAACEEIAQgBBCDgYCAAGpBLDsAAEIMEOOAgIAAIglBgoCAgAA2AgAgCUEIakGfhISAADYCACAJQQRqQYWdhIAANgIAQgwQ44CAgAAiCkGDgICAADYCACAKQQhqQceHhIAANgIAIApBBGpBhZ2EgAA2AgAgCkGqjISAABCRgICAACIKEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAKEIGBgIAAIQogCiAKEIOBgIAAakEsOwAAQgwQ44CAgAAiC0GDgICAADYCACALQQhqQfiZhIAANgIAIAtBBGpBhZ2EgAA2AgAgC0G+mYSAABCRgICAACELIAkgChDkgICAACALEOSAgIAAfEIBfBDjgICAACAKEIGBgIAAIAsQ/oCAgAAQkICAgAAhCiAEEOSAgIAAIAoQ5ICAgAB8QgF8EOOAgIAAIAQQgYGAgAAgChD+gICAACIEEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAEEIGBgIAAIQQgBCAEEIOBgIAAakEsOwAAQgwQ44CAgAAiCUGCgICAADYCACAJQQhqQZ+EhIAANgIAIAlBBGpBhZ2EgAA2AgBCDBDjgICAACIKQYOAgIAANgIAIApBCGpBx4eEgAA2AgAgCkEEakGFnYSAADYCACAKQcOIhIAAEJGAgIAAIgoQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAoQgYGAgAAhCiAKIAoQg4GAgABqQSw7AABCDBDjgICAACILQYOAgIAANgIAIAtBCGpB+JmEgAA2AgAgC0EEakGFnYSAADYCACALQY6ZhIAAEJGAgIAAIQsgCSAKEOSAgIAAIAsQ5ICAgAB8QgF8EOOAgIAAIAoQgYGAgAAgCxD+gICAABCQgICAACEKIAAgBBDkgICAACAKEOSAgIAAfEIBfBDjgICAACAEEIGBgIAAIAoQ/oCAgAAgACgCABGAgICAAICAgIAAIQpCCBDjgICAACIAQYGAgIAANgIAIABBBGpB5JWEgAA2AgAgAEHwpYSAABCIgICAACEAQgwQ44CAgAAiBEGCgICAADYCACAEQQhqQeyOhIAANgIAIARBBGogADYCACAFEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAFEIGBgIAAIQAgACAAEIOBgIAAakEsOwAAIAAQ5ICAgAAgBhDkgICAAHxCAXwQ44CAgAAgABCBgYCAACAGEP6AgIAAIgAQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAhACAAIAAQg4GAgABqQSw7AAAgABDkgICAACAHEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIAcQ/oCAgAAiABDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgABCBgYCAACEAIAAgABCDgYCAAGpBLDsAACAEIAAQ5ICAgAAgChDkgICAAHxCAXwQ44CAgAAgABCBgYCAACAKEP6AgIAAEJCAgIAAIQAgAUGgAWokgICAgAAgAAucBAEEfyAAQQhqKAIAIQIgAEEEaigCACEDQggQ44CAgAAiAEGBgICAADYCACAAQQRqQeSVhIAANgIAIABB5JSEgAAQiICAgAAhAEIMEOOAgIAAIgRBgoCAgAA2AgAgBEEIakGfhISAADYCACAEQQRqIAA2AgBCCBDjgICAACIAQYGAgIAANgIAIABBBGpB5JWEgAA2AgAgAEH9joSAABCIgICAACEFQgwQ44CAgAAiAEGDgICAADYCACAAQQhqQZ+EhIAANgIAIABBBGogBTYCACAAIAMQkYCAgAAiABDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgABCBgYCAACEAIAAgABCDgYCAAGpBLDsAAEIMEOOAgIAAIgNBg4CAgAA2AgAgA0EIakHDm4SAADYCACADQQRqQYWdhIAANgIAIAMgAhCRgICAACEDIAAQ5ICAgAAgAxDkgICAAHxCAXwQ44CAgAAgABCBgYCAACADEP6AgIAAIgAQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAhACAAIAAQg4GAgABqQSw7AABCDBDjgICAACIDQYOAgIAANgIAIANBCGpB742EgAA2AgAgA0EEakGFnYSAADYCACADIAEQkYCAgAAhAyAEIAAQ5ICAgAAgAxDkgICAAHxCAXwQ44CAgAAgABCBgYCAACADEP6AgIAAEJCAgIAAC+gEAQZ/I4CAgIAAQRBrIgIkgICAgAAgAEEIaigCACEDIABBBGooAgAhBEIIEOOAgIAAIgBBgYCAgAA2AgAgAEEEakHklYSAADYCACAAQdGHhIAAEIiAgIAAIQBCDBDjgICAACIFQYKAgIAANgIAIAVBCGpBn4SEgAA2AgAgBUEEaiAANgIAQgwQ44CAgAAiAEGDgICAADYCACAAQQhqQauQhIAANgIAIABBBGpBhZ2EgAA2AgAgACAEEJGAgIAAIgAQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAhACAAIAAQg4GAgABqQSw7AABCDBDjgICAACIGQYKAgIAANgIAIAZBCGpBn4SEgAA2AgAgBkEEakGFnYSAADYCAEIMEOOAgIAAIgRBg4CAgAA2AgAgBEEIakGqkYSAADYCACAEQQRqQYWdhIAANgIAIAQgAxCRgICAACIEEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAEEIGBgIAAIQQgBCAEEIOBgIAAakEsOwAAQgwQ44CAgAAiA0GDgICAADYCACADQQhqQZyThIAANgIAIANBBGpBhZ2EgAA2AgBCIBDjgICAACEHIAIgATcDACAHQYiYhIAAIAIQ+YCAgAAaIAMgBxCRgICAACEDIAYgBBDkgICAACADEOSAgIAAfEIBfBDjgICAACAEEIGBgIAAIAMQ/oCAgAAQkICAgAAhBCAFIAAQ5ICAgAAgBBDkgICAAHxCAXwQ44CAgAAgABCBgYCAACAEEP6AgIAAEJCAgIAAIQAgAkEQaiSAgICAACAACzcBAX8gAEEEaigCACECQgwQ44CAgAAiAEGDgICAADYCACAAQQhqIAI2AgAgAEEEaiABNgIAIAALmgcDA38BfgF/IABBFGooAgAhAiAAQRhqKAIAIQMgAEEQaigCACEEIABBCGopAgAhBUIQEOOAgIAAIgBBpICAgAA2AgAgAEEIaiAFNwMAIABCABCugICAACEGQggQ44CAgAAiAEGBgICAADYCACAAQQRqQeSYhIAANgIAIAAgBBCIgICAACIAEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIQAgACAAEIOBgIAAakEsOwAAQggQ44CAgAAiBEGBgICAADYCACAEQQRqQd+VhIAANgIAIAQgAxCIgICAACEEIAAQ5ICAgAAgBBDkgICAAHxCAXwQ44CAgAAgABCBgYCAACAEEP6AgIAAIgAQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAhACAAIAAQg4GAgABqQSw7AABCCBDjgICAACIEQYGAgIAANgIAIARBBGpB5JWEgAA2AgAgBEGNkYSAABCIgICAACEEIAAQ5ICAgAAgBBDkgICAAHxCAXwQ44CAgAAgABCBgYCAACAEEP6AgIAAIgAQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAhACAAIAAQg4GAgABqQSw7AABCCBDjgICAACIEQYGAgIAANgIAIARBBGpBv5SEgAA2AgAgBCABEIiAgIAAIQQgABDkgICAACAEEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIAQQ/oCAgAAhBEIMEOOAgIAAIgBBgoCAgAA2AgAgAEEIakHKh4SAADYCACAAQQRqIAQ2AgAgACAGEJCAgIAAIQFCCBDjgICAACIAQYGAgIAANgIAIABBBGpB5JWEgAA2AgAgAEGNmISAABCIgICAACEAQgwQ44CAgAAiBEGCgICAADYCACAEQQhqQYGShIAANgIAIARBBGogADYCAEIIEOOAgIAAIgBBgYCAgAA2AgAgAEEEakHklYSAADYCACAAQfCRhIAAEIiAgIAAIQNCDBDjgICAACIAQYOAgIAANgIAIABBCGpBq5CEgAA2AgAgAEEEaiADNgIAIAAgAhCRgICAACIAEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIQAgACAAEIOBgIAAakEsOwAAIAQgABDkgICAACABEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIAEQ/oCAgAAQkICAgAAL8AwBBX8jgICAgABBEGsiASSAgICAAEIIEOOAgIAAIgJBgYCAgAA2AgAgAkEEakHklYSAADYCACACQcKEhIAAEIiAgIAAIQNCDBDjgICAACICQYKAgIAANgIAIAJBCGpBn4SEgAA2AgAgAkEEaiADNgIAQgwQ44CAgAAiA0GDgICAADYCACADQQhqQauQhIAANgIAIANBBGpBhZ2EgAA2AgAgA0H7m4SAABCRgICAACIDEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACADEIGBgIAAIQMgAyADEIOBgIAAakEsOwAAQggQ44CAgAAiBEGSgICAADYCACAEQQRqQciEhIAANgIAQoAgEOOAgIAAIQUgASAANgIAIAVBmYWEgAAgARD5gICAABpCCBDjgICAACIAQYGAgIAANgIAIABBBGpB5JiEgAA2AgAgACAFEIiAgIAAIgUQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAUQgYGAgAAhBSAFIAUQg4GAgABqQSw7AABCCBDjgICAACIAQYGAgIAANgIAIABBBGpB35WEgAA2AgAgAEGchYSAABCIgICAACEAIAUQ5ICAgAAgABDkgICAAHxCAXwQ44CAgAAgBRCBgYCAACAAEP6AgIAAIgUQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAUQgYGAgAAhBSAFIAUQg4GAgABqQSw7AABCCBDjgICAACIAQYGAgIAANgIAIABBBGpB5JWEgAA2AgAgAEGNkYSAABCIgICAACEAIAUQ5ICAgAAgABDkgICAAHxCAXwQ44CAgAAgBRCBgYCAACAAEP6AgIAAIgUQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAUQgYGAgAAhBSAFIAUQg4GAgABqQSw7AABCCBDjgICAACIAQYGAgIAANgIAIABBBGpBhY2EgAA2AgAgAEHWm4SAABCIgICAACEAIAUQ5ICAgAAgABDkgICAAHxCAXwQ44CAgAAgBRCBgYCAACAAEP6AgIAAIgUQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAUQgYGAgAAhBSAFIAUQg4GAgABqQSw7AABCCBDjgICAACIAQYGAgIAANgIAIABBBGpB5paEgAA2AgAgAEGKkoSAABCIgICAACEAIAUQ5ICAgAAgABDkgICAAHxCAXwQ44CAgAAgBRCBgYCAACAAEP6AgIAAIgUQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAUQgYGAgAAhBSAFIAUQg4GAgABqQSw7AABCCBDjgICAACIAQYGAgIAANgIAIABBBGpBnZmEgAA2AgAgAEG0lISAABCIgICAACEAIAUQ5ICAgAAgABDkgICAAHxCAXwQ44CAgAAgBRCBgYCAACAAEP6AgIAAIgUQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAUQgYGAgAAhBSAFIAUQg4GAgABqQSw7AABCCBDjgICAACIAQYGAgIAANgIAIABBBGpBuJWEgAA2AgAgAEG9hISAABCIgICAACEAIAQgBRDkgICAACAAEOSAgIAAfEIBfBDjgICAACAFEIGBgIAAIAAQ/oCAgAAgBCgCABGAgICAAICAgIAAIgVBhZ2EgAAgBSgCABGAgICAAICAgIAAIQUgAiADEOSAgIAAIAUQ5ICAgAB8QgF8EOOAgIAAIAMQgYGAgAAgBRD+gICAACACKAIAEYCAgIAAgICAgAAhBUIIEOOAgIAAIgJBgYCAgAA2AgAgAkEEakHklYSAADYCACACQeCrhIAAEIiAgIAAIQJCDBDjgICAACIDQYKAgIAANgIAIANBCGpBgZKEgAA2AgAgA0EEaiACNgIAQggQ44CAgAAiAkGBgICAADYCACACQQRqQeSVhIAANgIAIAJB8JGEgAAQiICAgAAhBEIMEOOAgIAAIgJBg4CAgAA2AgAgAkEIakGrkISAADYCACACQQRqIAQ2AgAgAkGjhYSAABCRgICAACICEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACACEIGBgIAAIQIgAiACEIOBgIAAakEsOwAAIAMgAhDkgICAACAFEOSAgIAAfEIBfBDjgICAACACEIGBgIAAIAUQ/oCAgAAQkICAgAAhAiABQRBqJICAgIAAIAILtQQBA38gAEEEaigCACECQggQ44CAgAAiAEGBgICAADYCACAAQQRqQeSVhIAANgIAIABBoKyEgAAQiICAgAAiABDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgABCBgYCAACEAIAAgABCDgYCAAGpBLDsAAEIIEOOAgIAAIgNBgYCAgAA2AgAgA0EEakG4lYSAADYCACADQY2HhIAAEIiAgIAAIQMgABDkgICAACADEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIAMQ/oCAgAAhAEIMEOOAgIAAIgNBgoCAgAA2AgAgA0EIakHDjoSAADYCACADQQRqIAA2AgBCCBDjgICAACIAQYGAgIAANgIAIABBBGpB5JWEgAA2AgAgAEG9j4SAABCIgICAACEEQgwQ44CAgAAiAEGDgICAADYCACAAQQhqQauQhIAANgIAIABBBGogBDYCACAAIAEQkYCAgAAiABDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgABCBgYCAACEAIAAgABCDgYCAAGpBLDsAAEIIEOOAgIAAIgFBgYCAgAA2AgAgAUEEakHklYSAADYCACABQeORhIAAEIiAgIAAIQRCDBDjgICAACIBQYOAgIAANgIAIAFBCGpBq5CEgAA2AgAgAUEEaiAENgIAIAEgAhCRgICAACEBIAMgABDkgICAACABEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIAEQ/oCAgAAQkICAgAALhw4BBn8jgICAgABBEGsiAiSAgICAACAAQQRqKAIAIQNCCBDjgICAACIAQYGAgIAANgIAIABBBGpB5JWEgAA2AgAgAEGUjoSAABCIgICAACEAQgwQ44CAgAAiBEGCgICAADYCACAEQQhqQZ+EhIAANgIAIARBBGogADYCAEIIEOOAgIAAIgBBgYCAgAA2AgAgAEEEakHklYSAADYCACAAQcCshIAAEIiAgIAAIQVCDBDjgICAACIAQYOAgIAANgIAIABBCGpBq5CEgAA2AgAgAEEEaiAFNgIAIABBoYCEgAAQkYCAgAAiABDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgABCBgYCAACEAIAAgABCDgYCAAGpBLDsAAEIMEOOAgIAAIgZBgoCAgAA2AgAgBkEIakGfhISAADYCACAGQQRqQYWdhIAANgIAQgwQ44CAgAAiBUGDgICAADYCACAFQQhqQcmbhIAANgIAIAVBBGpBhZ2EgAA2AgAgBUHkiYSAABCRgICAACIFEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAFEIGBgIAAIQUgBSAFEIOBgIAAakEsOwAAQgwQ44CAgAAiB0GDgICAADYCACAHQQhqQe+NhIAANgIAIAdBBGpBhZ2EgAA2AgAgB0HgrISAABCRgICAACEHIAYgBRDkgICAACAHEOSAgIAAfEIBfBDjgICAACAFEIGBgIAAIAcQ/oCAgAAQkICAgAAhBSAEIAAQ5ICAgAAgBRDkgICAAHxCAXwQ44CAgAAgABCBgYCAACAFEP6AgIAAEJCAgIAAIQRCIBDjgICAACIAQaeAgIAANgIAIABBGGpBgYaEgAA2AgAgAEEUakGJjoSAADYCACAAQRBqQbeFhIAANgIAIABBCGogATcDACAAIANBEGooAgAQvYCAgAAiABDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgABCBgYCAACEAIAAgABCDgYCAAGpBLDsAAEH9hoSAABC+gICAACEFIAAQ5ICAgAAgBRDkgICAAHxCAXwQ44CAgAAgABCBgYCAACAFEP6AgIAAIgAQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAhBSAFIAUQg4GAgABqQSw7AABCgCAQ44CAgAAhBiACQf2GhIAANgIAIAZB3JSEgAAgAhD5gICAABpCFBDjgICAACIAQaaAgIAANgIAIABBEGpBgKyEgAA2AgAgAEEMakHflISAADYCACAAQQhqQeCOhIAANgIAIABBBGogBjYCACAAQb2EhIAAELaAgIAAIQAgBRDkgICAACAAEOSAgIAAfEIBfBDjgICAACAFEIGBgIAAIAAQ/oCAgAAhBkIIEOOAgIAAIgBBgYCAgAA2AgAgAEEEakHkmISAADYCACAAQcyGhIAAEIiAgIAAIgAQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAhACAAIAAQg4GAgABqQSw7AABCCBDjgICAACIFQYGAgIAANgIAIAVBBGpBkYaEgAA2AgAgBUGNh4SAABCIgICAACEFIAAQ5ICAgAAgBRDkgICAAHxCAXwQ44CAgAAgABCBgYCAACAFEP6AgIAAIgAQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAhACAAIAAQg4GAgABqQSw7AABCCBDjgICAACIFQYGAgIAANgIAIAVBBGpB5JWEgAA2AgAgBUG0kISAABCIgICAACEFIAAQ5ICAgAAgBRDkgICAAHxCAXwQ44CAgAAgABCBgYCAACAFEP6AgIAAIQBCDBDjgICAACIFQYKAgIAANgIAIAVBCGpBxZCEgAA2AgAgBUEEaiAANgIAIAQQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAQQgYGAgAAhACAAIAAQg4GAgABqQSw7AABCCBDjgICAACIEQYGAgIAANgIAIARBBGpB5JWEgAA2AgAgBEHLmISAABCIgICAACEHQgwQ44CAgAAiBEGCgICAADYCACAEQQhqQZ+EhIAANgIAIARBBGogBzYCACAEIAYQkICAgAAhBCAAEOSAgIAAIAQQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAgBBD+gICAACIAEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIQAgACAAEIOBgIAAakEsOwAAQggQ44CAgAAiBEGogICAADYCACAEQQRqQYWHhIAANgIAIARBoYCEgAAQv4CAgAAhBCAFIAAQ5ICAgAAgBBDkgICAAHxCAXwQ44CAgAAgABCBgYCAACAEEP6AgIAAEJCAgIAAIQAgAkEQaiSAgICAACAAC4cOAQZ/I4CAgIAAQRBrIgIkgICAgAAgAEEEaigCACEDQggQ44CAgAAiAEGBgICAADYCACAAQQRqQeSVhIAANgIAIABBlI6EgAAQiICAgAAhAEIMEOOAgIAAIgRBgoCAgAA2AgAgBEEIakGfhISAADYCACAEQQRqIAA2AgBCCBDjgICAACIAQYGAgIAANgIAIABBBGpB5JWEgAA2AgAgAEGgrYSAABCIgICAACEFQgwQ44CAgAAiAEGDgICAADYCACAAQQhqQauQhIAANgIAIABBBGogBTYCACAAQaiAhIAAEJGAgIAAIgAQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAhACAAIAAQg4GAgABqQSw7AABCDBDjgICAACIGQYKAgIAANgIAIAZBCGpBn4SEgAA2AgAgBkEEakGFnYSAADYCAEIMEOOAgIAAIgVBg4CAgAA2AgAgBUEIakHJm4SAADYCACAFQQRqQYWdhIAANgIAIAVB1YmEgAAQkYCAgAAiBRDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgBRCBgYCAACEFIAUgBRCDgYCAAGpBLDsAAEIMEOOAgIAAIgdBg4CAgAA2AgAgB0EIakHvjYSAADYCACAHQQRqQYWdhIAANgIAIAdBwK2EgAAQkYCAgAAhByAGIAUQ5ICAgAAgBxDkgICAAHxCAXwQ44CAgAAgBRCBgYCAACAHEP6AgIAAEJCAgIAAIQUgBCAAEOSAgIAAIAUQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAgBRD+gICAABCQgICAACEEQiAQ44CAgAAiAEGngICAADYCACAAQRhqQYGGhIAANgIAIABBFGpB55CEgAA2AgAgAEEQakGAroSAADYCACAAQQhqIAE3AwAgACADQRBqKAIAEL2AgIAAIgAQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAhACAAIAAQg4GAgABqQSw7AABBjYSEgAAQvoCAgAAhBSAAEOSAgIAAIAUQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAgBRD+gICAACIAEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIQUgBSAFEIOBgIAAakEsOwAAQoAgEOOAgIAAIQYgAkGNhISAADYCACAGQdyUhIAAIAIQ+YCAgAAaQhQQ44CAgAAiAEGmgICAADYCACAAQRBqQYCshIAANgIAIABBDGpB35SEgAA2AgAgAEEIakHgjoSAADYCACAAQQRqIAY2AgAgAEG9hISAABC2gICAACEAIAUQ5ICAgAAgABDkgICAAHxCAXwQ44CAgAAgBRCBgYCAACAAEP6AgIAAIQZCCBDjgICAACIAQYGAgIAANgIAIABBBGpB5JiEgAA2AgAgAEHZg4SAABCIgICAACIAEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIQAgACAAEIOBgIAAakEsOwAAQggQ44CAgAAiBUGBgICAADYCACAFQQRqQZGGhIAANgIAIAVBjYeEgAAQiICAgAAhBSAAEOSAgIAAIAUQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAgBRD+gICAACIAEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIQAgACAAEIOBgIAAakEsOwAAQggQ44CAgAAiBUGBgICAADYCACAFQQRqQeSVhIAANgIAIAVBtJCEgAAQiICAgAAhBSAAEOSAgIAAIAUQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAgBRD+gICAACEAQgwQ44CAgAAiBUGCgICAADYCACAFQQhqQcWQhIAANgIAIAVBBGogADYCACAEEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAEEIGBgIAAIQAgACAAEIOBgIAAakEsOwAAQggQ44CAgAAiBEGBgICAADYCACAEQQRqQeSVhIAANgIAIARBy5iEgAAQiICAgAAhB0IMEOOAgIAAIgRBgoCAgAA2AgAgBEEIakGfhISAADYCACAEQQRqIAc2AgAgBCAGEJCAgIAAIQQgABDkgICAACAEEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIAQQ/oCAgAAiABDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgABCBgYCAACEAIAAgABCDgYCAAGpBLDsAAEIIEOOAgIAAIgRBqICAgAA2AgAgBEEEakGWhISAADYCACAEQaiAhIAAEL+AgIAAIQQgBSAAEOSAgIAAIAQQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAgBBD+gICAABCQgICAACEAIAJBEGokgICAgAAgAAvyEQEGfyOAgICAAEEQayICJICAgIAAIABBBGooAgAhA0IIEOOAgIAAIgBBgYCAgAA2AgAgAEEEakHklYSAADYCACAAQZSOhIAAEIiAgIAAIQBCDBDjgICAACIEQYKAgIAANgIAIARBCGpBn4SEgAA2AgAgBEEEaiAANgIAQggQ44CAgAAiAEGBgICAADYCACAAQQRqQeSVhIAANgIAIABBoK6EgAAQiICAgAAhBUIMEOOAgIAAIgBBg4CAgAA2AgAgAEEIakGrkISAADYCACAAQQRqIAU2AgAgAEHIgISAABCRgICAACIAEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIQAgACAAEIOBgIAAakEsOwAAQgwQ44CAgAAiBkGCgICAADYCACAGQQhqQZ+EhIAANgIAIAZBBGpBhZ2EgAA2AgBCDBDjgICAACIFQYOAgIAANgIAIAVBCGpByZuEgAA2AgAgBUEEakGFnYSAADYCACAFQaaChIAAEJGAgIAAIgUQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAUQgYGAgAAhBSAFIAUQg4GAgABqQSw7AABCDBDjgICAACIHQYOAgIAANgIAIAdBCGpB742EgAA2AgAgB0EEakGFnYSAADYCACAHQcCuhIAAEJGAgIAAIQcgBiAFEOSAgIAAIAcQ5ICAgAB8QgF8EOOAgIAAIAUQgYGAgAAgBxD+gICAABCQgICAACEFIAQgABDkgICAACAFEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIAUQ/oCAgAAQkICAgAAhBkIIEOOAgIAAIgBBgYCAgAA2AgAgAEEEakHklYSAADYCACAAQYWKhIAAEIiAgIAAIQBCDBDjgICAACIEQYKAgIAANgIAIARBCGpBn4SEgAA2AgAgBEEEaiAANgIAQiAQ44CAgAAiAEGngICAADYCACAAQRhqQfCQhIAANgIAIABBFGpB7IWEgAA2AgAgAEEQakHZkISAADYCACAAQQhqIAE3AwAgACADQRBqKAIAEL2AgIAAIgAQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAhACAAIAAQg4GAgABqQSw7AABCCBDjgICAACIFQYGAgIAANgIAIAVBBGpB5JWEgAA2AgAgBUHCkoSAABCIgICAACEHQgwQ44CAgAAiBUGDgICAADYCACAFQQhqQauQhIAANgIAIAVBBGogBzYCACAFQbyAhIAAEJGAgIAAIQUgABDkgICAACAFEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIAUQ/oCAgAAiABDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgABCBgYCAACEFIAUgBRCDgYCAAGpBLDsAAEIgEOOAgIAAIgBBp4CAgAA2AgAgAEEYakGRjoSAADYCACAAQRRqQdSFhIAANgIAIABBEGpB/Y2EgAA2AgAgAEEIaiABNwMAIABBzZuEgAAQvYCAgAAhACAEIAUQ5ICAgAAgABDkgICAAHxCAXwQ44CAgAAgBRCBgYCAACAAEP6AgIAAEJCAgIAAIgAQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAhACAAIAAQg4GAgABqQSw7AABB84yEgAAQvoCAgAAhBSAAEOSAgIAAIAUQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAgBRD+gICAACIAEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIQUgBSAFEIOBgIAAakEsOwAAQoAgEOOAgIAAIQQgAkHzjISAADYCACAEQdyUhIAAIAIQ+YCAgAAaQhQQ44CAgAAiAEGmgICAADYCACAAQRBqQYCshIAANgIAIABBDGpB35SEgAA2AgAgAEEIakHgjoSAADYCACAAQQRqIAQ2AgAgAEG9hISAABC2gICAACEAIAUQ5ICAgAAgABDkgICAAHxCAXwQ44CAgAAgBRCBgYCAACAAEP6AgIAAIQdCCBDjgICAACIAQYGAgIAANgIAIABBBGpB5JiEgAA2AgAgAEG/jISAABCIgICAACIAEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIQAgACAAEIOBgIAAakEsOwAAQggQ44CAgAAiBUGBgICAADYCACAFQQRqQZGGhIAANgIAIAVBjYeEgAAQiICAgAAhBSAAEOSAgIAAIAUQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAgBRD+gICAACIAEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIQAgACAAEIOBgIAAakEsOwAAQggQ44CAgAAiBUGBgICAADYCACAFQQRqQeSVhIAANgIAIAVBtJCEgAAQiICAgAAhBSAAEOSAgIAAIAUQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAgBRD+gICAACEAQgwQ44CAgAAiBUGCgICAADYCACAFQQhqQcWQhIAANgIAIAVBBGogADYCACAGEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAGEIGBgIAAIQAgACAAEIOBgIAAakEsOwAAQggQ44CAgAAiBEGBgICAADYCACAEQQRqQeSVhIAANgIAIARBy5iEgAAQiICAgAAhBkIMEOOAgIAAIgRBgoCAgAA2AgAgBEEIakGfhISAADYCACAEQQRqIAY2AgAgBCAHEJCAgIAAIQQgABDkgICAACAEEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIAQQ/oCAgAAiABDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgABCBgYCAACEAIAAgABCDgYCAAGpBLDsAAEIIEOOAgIAAIgRBqICAgAA2AgAgBEEEakH8jISAADYCACAEQciAhIAAEL+AgIAAIQQgBSAAEOSAgIAAIAQQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAgBBD+gICAABCQgICAACEAIAJBEGokgICAgAAgAAumBAEEfyAAQQhqKAIAIQIgAEEEaigCACEDQgwQ44CAgAAiBEGCgICAADYCACAEQQhqQeuShIAANgIAIARBBGpBhZ2EgAA2AgBCCBDjgICAACIAQYGAgIAANgIAIABBBGpB5JWEgAA2AgAgAEG0j4SAABCIgICAACEFQgwQ44CAgAAiAEGDgICAADYCACAAQQhqQauQhIAANgIAIABBBGogBTYCACAAIAMQkYCAgAAiABDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgABCBgYCAACEAIAAgABCDgYCAAGpBLDsAAEIMEOOAgIAAIgVBgoCAgAA2AgAgBUEIakGrkISAADYCACAFQQRqQYWdhIAANgIAQgwQ44CAgAAiA0GDgICAADYCACADQQhqQZyThIAANgIAIANBBGpBhZ2EgAA2AgAgAyACEJGAgIAAIgMQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAMQgYGAgAAhAyADIAMQg4GAgABqQSw7AABCDBDjgICAACICQYOAgIAANgIAIAJBCGpBqpGEgAA2AgAgAkEEakGFnYSAADYCACACIAEQkYCAgAAhAiAFIAMQ5ICAgAAgAhDkgICAAHxCAXwQ44CAgAAgAxCBgYCAACACEP6AgIAAEJCAgIAAIQMgBCAAEOSAgIAAIAMQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAgAxD+gICAABCQgICAAAunBgEFfyAAQQxqKAIAIQIgAEEIaigCACEDIABBBGooAgAhBEIIEOOAgIAAIgBBgYCAgAA2AgAgAEEEakHklYSAADYCACAAQcmXhIAAEIiAgIAAIQBCDBDjgICAACIFQYKAgIAANgIAIAVBCGpBtJaEgAA2AgAgBUEEaiAANgIAQggQ44CAgAAiAEGBgICAADYCACAAQQRqQeSVhIAANgIAIABBqo+EgAAQiICAgAAhBkIMEOOAgIAAIgBBg4CAgAA2AgAgAEEIakGrkISAADYCACAAQQRqIAY2AgAgACAEEJGAgIAAIgAQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAhACAAIAAQg4GAgABqQSw7AABCCBDjgICAACIEQYGAgIAANgIAIARBBGpB5JWEgAA2AgAgBEGHgoSAABCIgICAACEEQgwQ44CAgAAiBkGCgICAADYCACAGQQhqQauQhIAANgIAIAZBBGogBDYCAEIMEOOAgIAAIgRBg4CAgAA2AgAgBEEIakGqkYSAADYCACAEQQRqQYWdhIAANgIAIAQgAxCRgICAACIEEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAEEIGBgIAAIQQgBCAEEIOBgIAAakEsOwAAQgwQ44CAgAAiA0GDgICAADYCACADQQhqQZyThIAANgIAIANBBGpBhZ2EgAA2AgAgAyACEJGAgIAAIQMgBBDkgICAACADEOSAgIAAfEIBfBDjgICAACAEEIGBgIAAIAMQ/oCAgAAiBBDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgBBCBgYCAACEEIAQgBBCDgYCAAGpBLDsAAEIMEOOAgIAAIgNBg4CAgAA2AgAgA0EIakH1kISAADYCACADQQRqQYWdhIAANgIAIAMgARCRgICAACEDIAYgBBDkgICAACADEOSAgIAAfEIBfBDjgICAACAEEIGBgIAAIAMQ/oCAgAAQkICAgAAhBCAFIAAQ5ICAgAAgBBDkgICAAHxCAXwQ44CAgAAgABCBgYCAACAEEP6AgIAAEJCAgIAAC94GAQV/IABBBGooAgAhAiAAQQxqKAIAIQMgAEEIaigCACEEQggQ44CAgAAiAEGBgICAADYCACAAQQRqQeSVhIAANgIAIABB8LSEgAAQiICAgAAhBUIMEOOAgIAAIgBBgoCAgAA2AgAgAEEIakHrkoSAADYCACAAQQRqIAU2AgBCCBDjgICAACIFQYGAgIAANgIAIAVBBGpB5JWEgAA2AgAgBUGIj4SAABCIgICAACEGQgwQ44CAgAAiBUGDgICAADYCACAFQQhqQauQhIAANgIAIAVBBGogBjYCACAFIAQQkYCAgAAiBRDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgBRCBgYCAACEFIAUgBRCDgYCAAGpBLDsAAEIIEOOAgIAAIgRBgYCAgAA2AgAgBEEEakHklYSAADYCACAEQeCBhIAAEIiAgIAAIQRCDBDjgICAACIGQYKAgIAANgIAIAZBCGpBq5CEgAA2AgAgBkEEaiAENgIAQgwQ44CAgAAiBEGDgICAADYCACAEQQhqQZyThIAANgIAIARBBGpBhZ2EgAA2AgAgBCADEJGAgIAAIgQQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAQQgYGAgAAhBCAEIAQQg4GAgABqQSw7AABCDBDjgICAACIDQYOAgIAANgIAIANBCGpBqpGEgAA2AgAgA0EEakGFnYSAADYCACADIAIQkYCAgAAhAyAGIAQQ5ICAgAAgAxDkgICAAHxCAXwQ44CAgAAgBBCBgYCAACADEP6AgIAAEJCAgIAAIQQgBRDkgICAACAEEOSAgIAAfEIBfBDjgICAACAFEIGBgIAAIAQQ/oCAgAAiBRDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgBRCBgYCAACEFIAUgBRCDgYCAAGpBLDsAAEIIEOOAgIAAIgRBgYCAgAA2AgAgBEEEakHklYSAADYCACAEQaC3hIAAEIiAgIAAIQZCDBDjgICAACIEQYOAgIAANgIAIARBCGpBq5CEgAA2AgAgBEEEaiAGNgIAIAQgARCRgICAACEEIAAgBRDkgICAACAEEOSAgIAAfEIBfBDjgICAACAFEIGBgIAAIAQQ/oCAgAAgACgCABGAgICAAICAgIAAC/oFAQV/IABBDGooAgAhAiAAQQRqKAIAIQMgAEEIaigCACEEQggQ44CAgAAiAEGBgICAADYCACAAQQRqQeSVhIAANgIAIABBkLWEgAAQiICAgAAhAEIMEOOAgIAAIgVBgoCAgAA2AgAgBUEIakHrkoSAADYCACAFQQRqIAA2AgBCCBDjgICAACIAQYGAgIAANgIAIABBBGpB5JWEgAA2AgAgAEGYjYSAABCIgICAACEGQgwQ44CAgAAiAEGDgICAADYCACAAQQhqQauQhIAANgIAIABBBGogBjYCACAAIAQQkYCAgAAiABDkgICAAEHwm4SAABDkgICAAHxCAXwQ44CAgAAgABCBgYCAACEAIAAgABCDgYCAAGpBLDsAAEIMEOOAgIAAIgZBgoCAgAA2AgAgBkEIakGfhISAADYCACAGQQRqQYWdhIAANgIAQgwQ44CAgAAiBEGDgICAADYCACAEQQhqQaqRhIAANgIAIARBBGpBhZ2EgAA2AgAgBCADEJGAgIAAIgQQ5ICAgABB8JuEgAAQ5ICAgAB8QgF8EOOAgIAAIAQQgYGAgAAhBCAEIAQQg4GAgABqQSw7AABCDBDjgICAACIDQYOAgIAANgIAIANBCGpBw5uEgAA2AgAgA0EEakGFnYSAADYCACADIAIQkYCAgAAhAyAEEOSAgIAAIAMQ5ICAgAB8QgF8EOOAgIAAIAQQgYGAgAAgAxD+gICAACIEEOSAgIAAQfCbhIAAEOSAgIAAfEIBfBDjgICAACAEEIGBgIAAIQQgBCAEEIOBgIAAakEsOwAAQgwQ44CAgAAiA0GDgICAADYCACADQQhqQe+NhIAANgIAIANBBGpBhZ2EgAA2AgAgAyABEJGAgIAAIQMgBiAEEOSAgIAAIAMQ5ICAgAB8QgF8EOOAgIAAIAQQgYGAgAAgAxD+gICAABCQgICAACEEIAUgABDkgICAACAEEOSAgIAAfEIBfBDjgICAACAAEIGBgIAAIAQQ/oCAgAAQkICAgAAL0AEBAX8CQCAAQbWDhIAAEP+AgIAADQBBuYOEgAAPC0GKiISAACEBAkAgAEH2h4SAABD/gICAAEUNACAAQbDChIAAEP+AgIAARQ0AAkAgAEGBlISAABD/gICAAA0AQZOUhIAADwtBh4GEgAAhASAAQeOAhIAAEP+AgIAARQ0AIABB0MKEgAAQ/4CAgABFDQAgAEHwwoSAABD/gICAAEUNACAAQfCAhIAAEP+AgIAARQ0AQYWdhIAAQZ2BhIAAIABBmYGEgAAQ/4CAgAAbIQELIAELnQEBAX9B/YaEgAAhAQJAIABB24aEgAAQ/4CAgABFDQACQCAAQemDhIAAEP+AgIAADQBBjYSEgAAPCwJAIABBz4yEgAAQ/4CAgAANAEHzjISAAA8LIABB6YaEgAAQ/4CAgABFDQBBjYSEgAAhASAAQfiDhIAAEP+AgIAARQ0AQYWdhIAAQfOMhIAAIABB3oyEgAAQ/4CAgAAbIQELIAELvwICAX8BfiAAQQhqKAIAIQIgAEEEaigCAEHpm4SAABDlgICAACEDQgwQ44CAgAAiAEGcgICAADYCAAJAAkAgA1ANACAAQQhqIAI2AgAgAEEEakHMlISAADYCACAAQZOUhIAAELiAgIAAIQJCDBDjgICAACIAQZyAgIAANgIAIABBCGogAjYCACAAQQRqQbOEhIAANgIAIABBlpmEgAAQuICAgAAhAkIMEOOAgIAAIgBBnICAgAA2AgAgAEEIaiACNgIAIABBBGpB8JaEgAA2AgAgACABELiAgIAAIQFBk5SEgAAQpoCAgAAhAgwBCyAAQQhqIAI2AgAgAEEEakHwloSAADYCAEGWmoSAACECIAAgARC4gICAACEBC0IQEOOAgIAAIgBCADcCACAAQQxqIAI2AgAgAEEIaiABNgIAIAALpwIDAX8BfgF/IABBBGooAgAhAgJAAkAgAUGwkYSAABD/gICAAA0AQciRhIAAIQAMAQsCQCABQdKPhIAAEP+AgIAADQBB4o+EgAAhAAwBCwJAIAFBzoSEgAAQ/4CAgAANAEHfhISAACEADAELQYWdhIAAQYaZhIAAIAFB/5iEgAAQ/4CAgAAbIQALIAAQ5ICAgAAhA0IIEOOAgIAAIQQCQCADQgFTDQBCDBDjgICAACIBQZyAgIAANgIAIAFBCGogAjYCACABQQRqQcyLhIAANgIAIAEgABC4gICAACEAQhAQ44CAgAAiAUIANwIAIAFBDGpBlpqEgAA2AgAgAUEIaiAANgIAIAEPCyAEQamAgIAANgIAIARBBGogAjYCACAEIAEQy4CAgAAL8gIBA38gAEEEaigCACEAAkACQCABQceFhIAAEP+AgIAARQ0AIAFB7o+EgAAQ/4CAgABFDQAgAUH8j4SAABD/gICAAA0BC0IMEOOAgIAAIgFBnICAgAA2AgAgAUEIaiAANgIAIAFBBGpBvJKEgAA2AgAgAUGVkISAABC4gICAACEAQfWLhIAAEKWAgIAAIQJCEBDjgICAACIBQgA3AgAgAUEMaiACNgIAIAFBCGogADYCACABDwsgAUGrkoSAABD/gICAACEDIAFBnpKEgAAQ/4CAgAAhBEIIEOOAgIAAIQICQAJAIANFDQAgBA0BC0IMEOOAgIAAIgFBnICAgAA2AgAgAUEIaiAANgIAIAFBBGpBvJKEgAA2AgAgAUGWmYSAABC4gICAACEAQhAQ44CAgAAiAUIANwIAIAFBDGpBlpqEgAA2AgAgAUEIaiAANgIAIAEPCyACQaqAgIAANgIAIAJBBGogADYCACACIAEQzICAgAAL2gUBAn8gAEEEaigCACEAAkACQAJAIAFBiZqEgAAQ/4CAgABFDQAgAUGQw4SAABD/gICAAEUNACABQe6ShIAAEP+AgIAADQELQgwQ44CAgAAiAUGcgICAADYCACABQQhqIAA2AgAgAUEEakG3k4SAADYCACABQbSUhIAAELiAgIAAIQAQooCAgAAhAgwBCwJAIAFBupeEgAAQ/4CAgAANAEIMEOOAgIAAIgFBnICAgAA2AgAgAUEIaiAANgIAIAFBBGpBvZWEgAA2AgAgAUGFnYSAABC4gICAACEAQgwQ44CAgAAiAUGcgICAADYCACABQQhqIAA2AgAgAUEEakH7lYSAADYCACABQYWdhIAAELiAgIAAIQBCDBDjgICAACIBQZyAgIAANgIAIAFBCGogADYCACABQQRqQcWChIAANgIAQZaahIAAIQIgAUGFnYSAABC4gICAACEADAELAkAgAUGshISAABD/gICAAA0AIABBIGoo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gAB8QgF8EOOAgIAAIgFB+wA7AAAgASAAEP6AgIAAIgAQ5ICAgABB0YCEgAAQ5ICAgAB8QgF8EOOAgIAAIAAQgYGAgAAhASABIAEQg4GAgABqQf0AOwAAQhQQ44CAgAAiAEGvgICAADYCACAAQRBqIAI2AgAgAEEMakHoh4SAADYCACAAQQhqQYiQhIAANgIAIABBBGogATYCACAAQfmFhIAAEM+AgIAAC6sCAQF/IABBCGooAgAhAgJAIABBBGooAgAiAEHMhoSAABD/gICAAA0AQggQ44CAgAAiAEGwgICAADYCACAAQQRqIAI2AgAgACABENCAgIAADwsCQCAAQdmDhIAAEP+AgIAADQBCCBDjgICAACIAQbGAgIAANgIAIABBBGogAjYCACAAIAEQ0YCAgAAPCwJAIABBv4yEgAAQ/4CAgAANAEIIEOOAgIAAIgBBsoCAgAA2AgAgAEEEaiACNgIAIAAgARDSgICAAA8LAkAgAEHAx4SAABD/gICAAA0AQggQ44CAgAAiAEGzgICAADYCACAAQQRqIAI2AgAgACABENOAgIAADwtCEBDjgICAACIAQgA3AgAgAEEMakGWmoSAADYCACAAQQhqIAI2AgAgAAuaAwEDfyOAgICAAEEQayICJICAgIAAIABBBGooAgAhA0IMEOOAgIAAIgBBnICAgAA2AgAgAEEIaiADNgIAIABBBGogATYCACAAQbSUhIAAELiAgIAAIQRCgCAQ44CAgAAhAyACIAE2AgAgA0GAyISAACACEPmAgIAAGkIMEOOAgIAAIgBBnICAgAA2AgAgAEEIaiAENgIAIABBBGpBvZWEgAA2AgAgAEG+i4SAABC4gICAACEBQgwQ44CAgAAiAEGcgICAADYCACAAQQhqIAE2AgAgAEEEakH7lYSAADYCACAAQeDHhIAAELiAgIAAIQFCDBDjgICAACIAQZyAgIAANgIAIABBCGogATYCACAAQQRqQcWChIAANgIAAkAgACADELiAgIAAIgBBLGooAgBBtJSEgAAQ/4CAgAAgAEEwaigCAEG0lISAABD/gICAAHINAEIMEOOAgIAAIgFBnICAgAA2AgAgAUEIaiAANgIAIAFBBGpBt5OEgAA2AgAgAUGLlYSAABC4gICAACEACyACQRBqJICAgIAAIAALqgIBA38jgICAgABB4ABrIgEkgICAgAACQAJAIABQRQ0AQbDIhIAAIQIMAQsCQCAAQvQDUw0AQiAQ44CAgAAhAyABIAA3AxAgA0GImISAACABQRBqEPmAgIAAGkKAIBDjgICAACECIAEgAzYCACACQZDJhIAAIAEQ+YCAgAAaDAELQiAQ44CAgAAhAwJAIABCkANTDQAgASAANwMwIANBiJiEgAAgAUEwahD5gICAABpCgCAQ44CAgAAhAiABIAM2AiAgAkHQyYSAACABQSBqEPmAgIAAGgwBCyABIAA3A1AgA0GImISAACABQdAAahD5gICAABpCgCAQ44CAgAAhAiABIAM2AkAgAkGgyoSAACABQcAAahD5gICAABoLIAFB4ABqJICAgIAAIAIL+AQEAX8BfgJ/AX4gAEEIaigCACECAkACQCAAQRBqKQMAIgNCuH58QuQAVA0AQgwQ44CAgAAiAEGcgICAADYCACAAQQhqIAI2AgAgAEEEakG/gYSAADYCAEG+i4SAACEEIABBi5WEgAAQuICAgAAhBSABENuAgIAAIgZBvouEgAAQ4ICAgAAhACAGEOKAgIAAGkHgyoSAACEBIABBhZ2EgAAgABsiAhDkgICAAEIAVQ0BIAMQ1oCAgAAhAgwBCwJAAkAgAEEEaigCACIAQYiQhIAAEP+AgIAADQBBr5mEgAAhAQwBCwJAIABB9oaEgAAQ/4CAgAANAEGAy4SAACEBDAELQcDLhIAAQaDLhIAAIABBhoSEgAAQ/4CAgAAbIQELQgwQ44CAgAAiAEGcgICAADYCACAAQQhqIAI2AgAgAEEEakG/gYSAADYCACAAQYuVhIAAELiAgIAAIQJCDBDjgICAACIAQZyAgIAANgIAIABBCGogAjYCACAAQQRqQbyShIAANgIAQeDLhIAAIQJB8IiEgAAhBCAAQZaZhIAAELiAgIAAIQULQgwQ44CAgAAiAEGcgICAADYCACAAQQhqIAU2AgAgAEEEakG9lYSAADYCACAAIAQQuICAgAAhBEIMEOOAgIAAIgBBnICAgAA2AgAgAEEIaiAENgIAIABBBGpB+5WEgAA2AgAgACABELiAgIAAIQRCDBDjgICAACIAQZyAgIAANgIAIABBCGogBDYCACAAQQRqQcWChIAANgIAIAAgAhC4gICAACECEKKAgIAAIQRCEBDjgICAACIAQgA3AgAgAEEMaiAENgIAIABBCGogAjYCACAAC9kGAgF+An8gAEEQaikDACECIABBCGooAgAhAwJAIABBBGooAgAiAEGKiISAABD/gICAAA0AQggQ44CAgAAhAAJAIAJCuH58QuMAVg0AQgwQ44CAgAAiAEGcgICAADYCACAAQQhqIAM2AgAgAEEEakGKiISAADYCACAAIAEQuICAgAAhA0IMEOOAgIAAIgBBnICAgAA2AgAgAEEIaiADNgIAIABBBGpB4JmEgAA2AgACQCAAQbSUhIAAELiAgIAAIgNBLGooAgBBtJSEgAAQ/4CAgAAgA0EwaigCAEG0lISAABD/gICAAHINAEIMEOOAgIAAIgBBnICAgAA2AgAgAEEIaiADNgIAIABBBGpBt5OEgAA2AgAgAEGLlYSAABC4gICAACEDC0IQEOOAgIAAIgBCADcCACAAQQxqQZaahIAANgIAIABBCGogAzYCACAADwsgAEG0gICAADYCACAAQQRqIAM2AgAgAEHgmYSAABDVgICAACEDQhAQ44CAgAAiAEIANwIAIABBDGpBlpqEgAA2AgAgAEEIaiADNgIAIAAPCwJAIABBh4GEgAAQ/4CAgAANAEIIEOOAgIAAIQACQCACQrh+fELjAFYNAEIMEOOAgIAAIgBBnICAgAA2AgAgAEEIaiADNgIAIABBBGpBh4GEgAA2AgAgACABELiAgIAAIQNCDBDjgICAACIAQZyAgIAANgIAIABBCGogAzYCACAAQQRqQdGZhIAANgIAAkAgAEG0lISAABC4gICAACIDQSxqKAIAQbSUhIAAEP+AgIAAIANBMGooAgBBtJSEgAAQ/4CAgAByDQBCDBDjgICAACIAQZyAgIAANgIAIABBCGogAzYCACAAQQRqQbeThIAANgIAIABBi5WEgAAQuICAgAAhAwtCEBDjgICAACIAQgA3AgAgAEEMakGWmoSAADYCACAAQQhqIAM2AgAgAA8LIABBtICAgAA2AgAgAEEEaiADNgIAIABB0ZmEgAAQ1YCAgAAhA0IQEOOAgIAAIgBCADcCACAAQQxqQZaahIAANgIAIABBCGogAzYCACAADwtCGBDjgICAACIEQbWAgIAANgIAIARBEGogAjcDACAEQQhqIAM2AgAgBEEEaiAANgIAIAQgARDXgICAAAsRABDwgICAABChgICAABpBAAuIAQEDfyAA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AgICAgACAgICAgICAgICAgICAgICAgICAgICAgICAwILIAAgAkEBaiICNgIADAALCyADEKuBgIAAIAQQ3YCAgAAMBAsgACACQQFqNgIAIAAQ3ICAgAAhBwJAIAAtAAQNACADEKuBgIAADAILIAEgBkECdCICQQRqIggQroGAgAAhASAFIAgQroGAgAAhBQJAAkAgAUUNACAFDQELIAEQq4GAgAAgBRCrgYCAACADEKuBgIAAIAcQ3YCAgAAgBBDdgICAAAwECyAEIAU2AhggBCABNgIUIAQgBkEBaiIGNgIcIAEgAmogAzYCACAFIAJqIAc2AgAgACgCACECAkACQANAAkAgAi0AACIDQXdqDiQAAAYGAAYGBgYGBgYGBgYGBgYGBgYGBgAGBgYGBgYGBgYGBgMCCyAAIAJBAWoiAjYCAAwACwsgA0H9AEcNAyAAIAJBAWo2AgAgBA8LIAAgAkEBaiICNgIADAALCyAEEN2AgIAAQQAPCyAEEN2AgIAAC0EAIQIgAEEAOgAECyACDwsgACACQQFqNgIAIAQL3gEBA38CQCAARQ0AQQghAQJAAkACQAJAIAAoAgBBfmoOBAICAQADCwJAIAAoAhxFDQBBACECQQAhAwNAIAAoAhQgAmooAgAQq4GAgAAgACgCGCACaigCABDdgICAACACQQRqIQIgA0EBaiIDIAAoAhxJDQALCyAAKAIUEKuBgIAAQRghAQwBC0EMIQEgACgCEEUNAEEAIQJBACEDA0AgACgCDCACaigCABDdgICAACACQQRqIQIgA0EBaiIDIAAoAhBJDQALCyAAIAFqKAIAEKuBgIAACyAAEKuBgIAACwvMDAELfyOAgICAAEEQayIBJICAgIAAAkACQCAAKAIAIgItAABBIkcNACAAIAJBAWoiAjYCAEEQIQNBEBCogYCAACIERQ0AQQAhBQJAA0AgAi0AACIGRQ0BAkACQAJAIAZBIkYNAAJAIAZB3ABHDQAgACACQQFqIgc2AgACQAJAAkACQAJAAkACQAJAAkAgAi0AASIGQV5qDlQACAgICAgICAgICAgIAggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAQgICAgIAwgICAQICAgICAgIBQgICAYIBwsICyABQSI6AAxBASEGDAsLIAFB3AA6AAxB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AjggA0ECEJyBgIAAIgEgBCACaiIGRg0AIAMhBANAAkAgAUF/Sg0AQQAhASAAQQA2AhggAEIANwMQIAAgACgCAEEgcjYCACAFQQJGDQMgAiAEKAIEayEBDAMLIARBCEEAIAEgBCgCBCIHSyIIG2oiCSAJKAIAIAEgB0EAIAgbayIHajYCACAEQQxBBCAIG2oiBCAEKAIAIAdrNgIAIAkhBCAGIAFrIgYgACgCOCAJIAUgCGsiBRCcgYCAACIBRw0ACwsgACAAKAIoIgE2AhggACABNgIUIAAgASAAKAIsajYCECACIQELIANBEGokgICAgAAgAQtkAQF/I4CAgIAAQRBrIgMkgICAgAACQAJAIAAgASACQf8BcSADQQhqEPKAgIAAIgJFDQBBAEHGACACIAJBzABGGzYC2P+EgABCfyEBDAELIAMpAwghAQsgA0EQaiSAgICAACABCxEAIAAoAjggASACEJ6BgIAACyQBAX8gABCDgYCAACECQX9BACACIABBASACIAEQkYGAgABHGwsDAAAL9QIBA38jgICAgABB0AFrIgMkgICAgAAgAyACNgLMASADQgA3A8ABIANCADcDuAEgA0IANwOwASADQgA3A6gBIANCADcDoAEgAyACNgLIAQJAAkBBACABIANByAFqIANB0ABqIANBoAFqEKOBgIAAQQBODQBBfyEADAELIAAgACgCACIEQV9xNgIAAkACQAJAAkAgACgCLA0AIABB0AA2AiwgAEEANgIYIABCADcDECAAKAIoIQUgACADNgIoDAELQQAhBSAAKAIQDQELQX8hAiAAEI+BgIAADQELIAAgASADQcgBaiADQdAAaiADQaABahCjgYCAACECCyAEQSBxIQECQCAFRQ0AIABBAEEAIAAoAiARgYCAgACAgICAABogAEEANgIsIAAgBTYCKCAAQQA2AhggACgCFCEFIABCADcDECACQX8gBRshAgsgACAAKAIAIgUgAXI2AgBBfyACIAVBIHEbIQALIANB0AFqJICAgIAAIAAL80QHGn8CfgF8BX8BfgJ/AXwjgICAgABB4AZrIgUkgICAgAAgBUE0akEMaiEGIAVB4ABqQXxqIQcgBUEQakEZaiEIIAVBJ2ohCSAFQTRqQQtqIQogBUHAAGpBf2ohCyAFQcAAakEIciEMIAVBwABqQQlyIQ0gBUE0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ZUJvZHkAYXJpYS1sYWJlbGxlZGJ5AHNlYXJjaC1ib3gALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweABleWVicm93AGZpbHRlci1yb3cAaGVhbHRoeSBpbmZsb3cAIy9vdmVydmlldwBuYXYtb3ZlcnZpZXcAT3ZlcnZpZXcAL2FwaS93aXRoZHJhdwBzdWJtaXQtd2l0aGRyYXcAcXVpY2std2l0aGRyYXcAbW92ZS13aXRoZHJhdwBtdXRhdGUtd2l0aGRyYXcAV2l0aGRyYXcAZGl2AG1haW4tbmF2AHRvZ2dsZS1tZW51AE1lbnUAdGV4dABtb25leS1pbnB1dABmaWx0ZXItb3V0AE1vbmV5IG91dAB0YWJsaXN0AGFjdGl2aXR5LWxpc3QAc2VjdXJpdHktbGlzdAB0aXAtbGlzdABoZXJvLWFydAAlcy1hbW91bnQAQW1vdW50AFslc10uYWNjb3VudABkZXBvc2l0LWFjY291bnQAb3Blbi1hY2NvdW50AFRvIGFjY291bnQAT3BlbiBhY2NvdW50AEZyb20gYWNjb3VudABPcGVuaW5nIGFjY291bnQAQWNjb3VudABldmVudABtYWluLWNvbnRlbnQAYXJpYS1jdXJyZW50AEJhbmsgbW92ZW1lbnQAL2FwaS9kZXBvc2l0AHN1Ym1pdC1kZXBvc2l0AHF1aWNrLWRlcG9zaXQAbW92ZS1kZXBvc2l0AG11dGF0ZS1kZXBvc2l0AERlcG9zaXQAc3VibWl0AGNyZWRpdABzZWN1cml0eS1vcmJpdABkZWJpdABObyBhY2NvdW50cyB5ZXQAdmlvbGV0AGR0AHNlbGVjdABtaW5pLXN0YXQAc3RhdHVzAGZvY3VzAC9hcGkvYWNjb3VudHMAbmF2LWFjY291bnRzAENsaWVudCBhY2NvdW50cwBBY2NvdW50cwBObyBtb3ZlbWVudHMAWyVzXS5jZW50cwBDcmVkaXRzAERlYml0cwBPdmVyZHJhZnRzAGRldGFpbC1mYWN0cwBEaXNtaXNzAHRvcC1wcm9ncmVzcwBzdWNjZXNzAHByb3BzAHRvcGJhci1hY3Rpb25zAGhlcm8tYWN0aW9ucwBkZXRhaWwtYWN0aW9ucwBtb2RhbC1hY3Rpb25zAFRvdGFsIGVudHJpZXMASm91cm5hbCBlbnRyaWVzAFdpdGhkcmF3IGZ1bmRzAERlcG9zaXQgZnVuZHMAQWRkIGZ1bmRzAGNvbW1hbmRzAHBhaXJlZC1maWVsZHMA4oiSJXMAc2lkZWJhciVzAG5hdi1pdGVtJXMAMDAlcwAjLyVzACQlcy4lcwBuYXYtJXMAYWNjb3VudC0lcwAlcywlcwArJXMAIyVzACMlcyDCtyAlcwBtb3ZlbWVudC1yb3cgJXMATW9uZXkgb3V0ICVzAHRvYXN0ICVzAE1vbmV5IGluICVzAEFsbCAlcwBhY2NvdW50LW1hcmsgJXMARGVjbGluZWQgJXMAZXJyb3IAaHRtbEZvcgBhY3Rpdml0eUZpbHRlcgBSZWFjdCByZW5kZXJlcgBbJXNdLm93bmVyAG5ldy1vd25lcgBhY2NvdW50LW93bmVyAEFjY291bnQgb3duZXIAVGFsb24gY3VzdG9tZXIATGVkZ2VyAC9hcGkvdHJhbnNmZXIAc3VibWl0LXRyYW5zZmVyAHF1aWNrLXRyYW5zZmVyAG1vdmUtdHJhbnNmZXIAbXV0YXRlLXRyYW5zZmVyAFRyYW5zZmVyAHBsYWNlaG9sZGVyAGhlYWRlcgBsYXllci1udW1iZXIAYXZhdGFyAHRvcGJhcgBsZWRnZXItdG9vbGJhcgBodHRwAE9zcHJleSBXZWIgQXBwAG1vZGFsLWJhY2tkcm9wAHNlY3VyZS1jaGlwAG9yYiBvcmItdHdvAHRyYW5zZmVyLXRvAERlcG9zaXQgdG8AZm9ybS1pbnRybwBzZWN1cml0eS1oZXJvAGluZm8AdGV4dC1idXR0b24AaWNvbi1idXR0b24Ac2tlbGV0b24AVGFsb24Ab3B0aW9uAERlc2NyaXB0aW9uAHNlY3Rpb24AbG9jYXRpb24AZW1wdHktaWNvbgBzZWN1cml0eS1pY29uAG5hdi1pY29uAHRvYXN0LWljb24Ac3RhdC1pY29uAHRpcC1pY29uAGJ1dHRvbi1pY29uAGFwcC1tYWluAGZpbHRlci1pbgBNb25leSBpbgBjaGlsZHJlbgBhY2NvdW50cy1vcGVuAHRvcGJhci1vcGVuAG11dGF0ZS1vcGVuACBvcGVuAGFyaWEtaGlkZGVuAGN5YW4Ac3BhbgBuYW4AbW9uZXktZm9ybQBtb2RhbC1mb3JtAHNpZGViYXItYm90dG9tAHRyYW5zZmVyLWZyb20AV2l0aGRyYXcgZnJvbQBlbQBoZXJvLW1vbm9ncmFtAHVsAHVybABmaWVsZC1jb250cm9sAG51bGwAYXBwLXNoZWxsAHNtYWxsAGZpbHRlci1hbGwAVmlldyBhbGwAU2VlIGFsbABtb2RlbABDYW5jZWwAbmF2LWxhYmVsAGJ1dHRvbi1sYWJlbABmaWVsZC1sYWJlbABhcmlhLWxhYmVsAGRsAGRlY2ltYWwAc2hpZWxkLXNlYWwAY2FuY2VsLW1vZGFsAGNsb3NlLW1vZGFsAGFyaWEtbW9kYWwAc3dhcC1tYXJrAGJyYW5kLW1hcmsAc2VjdGlvbi1ibG9jawBjbGljawBsaQB0b3BiYXItcmVmcmVzaABSZWZyZXNoAGFjdGl2aXR5LXNlYXJjaABkaWFsb2cAc3Ryb25nAGJ5dGVBdDogbnVsbCBzdHJpbmcAbG9hZGluZwBzZWN0aW9uLWhlYWRpbmcAZGV0YWlsLWhlYWRpbmcAbW9kYWwtaGVhZGluZwBwYWdlLWhlYWRpbmcAdGFnAGluZgBuYXYtbW92ZQBSZWFkeSB0byBtb3ZlAGNoaXAgYWN0aXZlAOKXjyBBY3RpdmUATGl2ZQB0cnVlAHZhbHVlAGRlZmF1bHRWYWx1ZQByb3V0ZQBbJXNdLm5vdGUAJXMtbm90ZQBlbXB0eS1zdGF0ZQBuYXZpZ2F0ZQB0b2FzdC1jbG9zZQBDbG9zZQBmYWxzZQBhcmNoaXRlY3R1cmUAYWNjb3VudC1tb3JlAHByb2ZpbGUtbW9yZQB0eXBlAG5vdGljZVRvbmUAb3JiIG9yYi1vbmUARnVsbCBsZWdhbCBuYW1lAGNsYXNzTmFtZQB0b3BiYXItdGl0bGUAbm90aWNlVGl0bGUAQmFuayBjb25zb2xlAHJvbGUAc2lkZWJhci1wcm9maWxlAHRoaXMgY3ljbGUAYXJ0aWNsZQBieXRlQXQ6IGluZGV4IG91dCBvZiByYW5nZQBwYWdlIG1vdmUtcGFnZQBpbnB1dE1vZGUAbW92ZU1vZGUAYXNpZGUAWyVzXS5iYWxhbmNlAGFjY291bnQtYmFsYW5jZQBkZXRhaWwtYmFsYW5jZQBMZWRnZXIgc2VydmljZQBkaXNtaXNzLW5vdGljZQBzdGF0LWNhcmQAaGVyby1jYXJkAGNhcmQgZm9ybS1jYXJkAG1ldGhvZABbJXNdLmtpbmQAYnJhbmQAZ29sZAAlbGxkAGZpZWxkAHNlY3VyaXR5LWdyaWQAYWNjb3VudC1ncmlkAG1pbmktc3RhdC1ncmlkAHNrZWxldG9uLWdyaWQAZm9ybS1ncmlkAG1vdmUtZ3JpZABbJXNdLmlkAGZ1bGx5IGF1ZGl0ZWQAIHNlbGVjdGVkAGZpbHRlci1yZWZ1c2VkAFJlZnVzZWQAY2xvc2VkAHJlcXVpcmVkAERlY2xpbmVkAEFjY291bnQgb3BlbmVkAEpvdXJuYWxlZABWZXJpZmllZABhY3Rpdml0eUxvYWRlZABhY2NvdW50c0xvYWRlZABFbmZvcmNlZABkZABtb3ZlbWVudC1tZXRhAHJlZnJlc2gtZGF0YQBbXQBcAFsATU9WRSBNT05FWQBIT1NUIC8gVklFVwBQT1NUAEdFVABBQ0NPVU5UUwBNQU5BR0VEIENMSUVOVFMAQUNUSVZFIENPTlRST0xTAExJVkUgTEVER0VSAFRPAE5BTgBTWVNURU0AQVVESVQgVFJBSUwAUFJJVkFURSBCQU5LAENPTU1BTkQgLyBBUEkAQkFOS0lORwBJTkYAQWNjb3VudCBJRAA6ADA0AGgzADAzAGgyADAyAGgxADAxACQwLjAwACMvAC4AYWNjb3VudC0AcXVpY2stACwAKwAobnVsbCkAJAAiACEAIABTdXBwb3J0IGZvciBmb3JtYXR0aW5nIGxvbmcgZG91YmxlIHZhbHVlcyBpcyBjdXJyZW50bHkgZGlzYWJsZWQuClRvIGVuYWJsZSBpdCwgYWRkIC1sYy1wcmludHNjYW4tbG9uZy1kb3VibGUgdG8gdGhlIGxpbmsgY29tbWFuZC4KAAAAAAAAAAAAAABhY2NvdW50LWNhcmQtdG9wAAAAAAAAAAAAAAAAAAAAAGFjY291bnQtY2FyZCAlcyVzAAAAAAAAAAAAAAAAAAAAVGFsb24gYWNjb3VudCDCtyAjJXMAAAAAAAAAAAAAAABtb3ZlbWVudC1pY29uICVzAAAAAAAAAAAAAAAAAAAAACVzIMK3IEFjY291bnQgIyVzAAAAAAAAAAAAAAAAAAAAbW92ZW1lbnQtYW1vdW50ICVzAAAAAAAAAAAAAAAAAABQcmltYXJ5IG5hdmlnYXRpb24AAAAAAAAAAAAAAAAAAG5hdi1zZWN0aW9uLWxhYmVsAAAAAAAAAAAAAAAAAAAAbmF2LXNlY3Rpb24tbGFiZWwgc2Vjb25kYXJ5AAAAAABUYWxvbiBPcGVyYXRpb25zAAAAAAAAAAAAAAAAAAAAAFByb3RlY3RlZCBzZXNzaW9uAAAAAAAAAAAAAAAAAAAAaWNvbi1idXR0b24gbW9iaWxlLW1lbnUAAAAAAAAAAABMSVZFIE9QRVJBVElPTlMgwrcgT1NQUkVZIE9OTElORQAAAAAAAAAAAAAAAAAAAABpY29uLWJ1dHRvbiBub3RpZmljYXRpb24tYnV0dG9uAEFjdGl2aXR5IG5vdGlmaWNhdGlvbnMAAAAAAAAAAAAAbm90aWZpY2F0aW9uLWRvdAAAAAAAAAAAAAAAAAAAAABidXR0b24gcHJpbWFyeSB0b3Atb3BlbgAAAAAAAAAAAHBhZ2UgbG9hZGluZy1wYWdlAAAAAAAAAAAAAAAAAAAATG9hZGluZyBiYW5rIGRhdGEAAAAAAAAAAAAAAAAAAABza2VsZXRvbiBza2VsZXRvbi1oZXJvAAAAAAAAAAAAAHNrZWxldG9uIHNrZWxldG9uLXRhYmxlAAAAAAAAAAAATkVXIFRBTE9OIEFDQ09VTlQAAAAAAAAAAAAAAAAAAABDcmVhdGUgYSBwcm90ZWN0ZWQgY2xpZW50IGFjY291bnQgaW4gb25lIHN0ZXAuAABpY29uLWJ1dHRvbiBtb2RhbC1jbG9zZQAAAAAAAAAAAG1vZGFsLXJlYXNzdXJhbmNlAAAAAAAAAAAAAAAAAAAAU3RvcmFnZSBhY2Nlc3MgcmVtYWlucyBzZXJ2ZXItc2lkZS4gWW91ciBicm93c2VyIHJlY2VpdmVzIG9ubHkgdGhlIGFjY291bnQgcmVzcG9uc2UuAAAAAAAAAAAAAAAAb3Blbi1hY2NvdW50LXRpdGxlAAAAAAAAAAAAAAAAAABObyBhY2NvdW50IHNlbGVjdGVkAAAAAAAAAAAAAAAAAFdhaXRpbmcgZm9yIGZpcnN0IGRlcG9zaXQAAAAAAAAAYWNjb3VudC1tYXJrIHZpb2xldAAAAAAAAAAAAAAAAABUQUxPTiBBQ0NPVU5UICMlcwAAAAAAAAAAAAAAAAAAAEF2YWlsYWJsZSBiYWxhbmNlAAAAAAAAAAAAAAAAAAAAY2FyZCBhY2NvdW50LWRldGFpbAAAAAAAAAAAAAAAAABFdmVyeSBtYW5hZ2VkIGJhbGFuY2UgYW5kIHByb3RlY3RlZCBjbGllbnQgYWNjb3VudCBpbiBvbmUgdmlldy4AT3BlbiBhbiBhY2NvdW50IGluIHNlY29uZHPigJRubyBwYXBlcndvcmsgcmVxdWlyZWQuAAAAAAAAAAAAAAAAAGFjY291bnQtZ3JpZCBhY2NvdW50LWdyaWQtd2lkZQAAQWN0aXZpdHkgZm9yIHRoaXMgYWNjb3VudCB3aWxsIHNob3cgaGVyZS4AAAAAAAAAY2FyZCBjb21wYWN0LWFjdGl2aXR5AAAAAAAAAAAAAABMYXRlc3QgbW92ZW1lbnRzAAAAAAAAAAAAAAAAAAAAAGFjY291bnQtZGV0YWlsLWdyaWQAAAAAAAAAAAAAAAAAcGFnZSBhY2NvdW50cy1wYWdlAAAAAAAAAAAAAAAAAABFdmVyeSBjcmVkaXQsIGRlYml0LCB0cmFuc2ZlciBzaWRlLCBhbmQgcmVmdXNhbCBpbiBvbmUgbGl2ZSBsZWRnZXIuAAAAAAAAAAAAAAAAAGJ1dHRvbiBzZWNvbmRhcnkAAAAAAAAAAAAAAAAAAAAAU2VhcmNoIGRlc2NyaXB0aW9uIG9yIG93bmVyAAAAAABQcm90ZWN0ZWQgcmVmdXNhbHMAAAAAAAAAAAAAAAAAAE5vIG1hdGNoaW5nIGFjdGl2aXR5AAAAAAAAAAAAAAAAVHJ5IGFub3RoZXIgc2VhcmNoIG9yIGJyb2FkZW4gdGhlIG1vdmVtZW50IGZpbHRlci4AAAAAAAAAAAAAAAAAAGFjdGl2aXR5LWxpc3QgYWN0aXZpdHktbGlzdC1mdWxsAAAAAAAAAAAAAAAAAAAAAGNhcmQgbGVkZ2VyLWNhcmQAAAAAAAAAAAAAAAAAAAAAcGFnZSBhY3Rpdml0eS1wYWdlAAAAAAAAAAAAAAAAAABmaWVsZCBhbW91bnQtZmllbGQAAAAAAAAAAAAAAAAAAFdoYXQgaXMgdGhpcyBmb3I/AAAAAAAAAAAAAAAAAAAAYnV0dG9uIHByaW1hcnkgc3VibWl0LWJ1dHRvbgAAAABmb3JtLWljb24gZGVwb3NpdAAAAAAAAAAAAAAAAAAAAENyZWRpdCBhbiBhY2NvdW50IGluc3RhbnRseSBhbmQgam91cm5hbCB0aGUgbW92ZW1lbnQuAAAAAAAAAAAAAABmb3JtLWljb24gd2l0aGRyYXcAAAAAAAAAAAAAAAAAAERlYml0IHNlY3VyZWx5LiBPdmVyZHJhZnQgYXR0ZW1wdHMgYXJlIHJlZnVzZWQgYW5kIGF1ZGl0ZWQuAAAAAAB3aXRoZHJhdy1hY2NvdW50AAAAAAAAAAAAAAAAAAAAAGZvcm0taWNvbiB0cmFuc2ZlcgAAAAAAAAAAAAAAAAAATW92ZSBmdW5kcyBhdG9taWNhbGx5IGJldHdlZW4gVGFsb24gYWNjb3VudHMuAAAAc2VnbWVudGVkIG1vdmUtdGFicwAAAAAAAAAAAAAAAABDbGllbnQgZnVuZHMsIGluIG1vdGlvbgAAAAAAAAAAAEZhc3QgYmFuayBvcGVyYXRpb25zLCBndWFyZGVkIGJ5IE9zcHJleSBkb21haW4gcnVsZXMuAAAAAAAAAAAAAABjYXJkIGd1aWRhbmNlLWNhcmQAAAAAAAAAAAAAAAAAAEJVSUxUIEZPUiBDT05GSURFTkNFAAAAAAAAAAAAAAAARXZlcnkgbW92ZW1lbnQgaXMgcHJvdGVjdGVkAAAAAABCb3RoIHNpZGVzIGxhbmQgdG9nZXRoZXLigJRvciBub3QgYXQgYWxsLgAAAAAAAABDb21wbGV0ZSBqb3VybmFsAAAAAAAAAAAAAAAAAAAAAFN1Y2Nlc3NmdWwgYW5kIHJlZnVzZWQgYXR0ZW1wdHMgYXJlIHJlY29yZGVkLgAAAEludGVnZXIgcHJlY2lzaW9uAAAAAAAAAAAAAAAAAAAATW9uZXkgcmVtYWlucyB3aG9sZSBjZW50cyBmcm9tIGZvcm0gdG8gbGVkZ2VyLgAAVGFsb24gU2hpZWxkIGFjdGl2ZQAAAAAAAAAAAAAAAABNQU5BR0VEIFBPUlRGT0xJTwAAAAAAAAAAAAAAAAAAAEFjcm9zcyAlcyBwcm90ZWN0ZWQgY2xpZW50IGFjY291bnRzAAAAAAAAAAAAAAAAAGJ1dHRvbiBnaG9zdC1vbi1kYXJrAAAAAAAAAAAAAAAAT3BlbiB5b3VyIGZpcnN0IGFjY291bnQgdG8gc3RhcnQgbW92aW5nIG1vbmV5LgAATm90aGluZyB0byByZXBvcnQAAAAAAAAAAAAAAAAAAABOZXcgbW92ZW1lbnRzIHdpbGwgYXBwZWFyIGhlcmUgaW5zdGFudGx5LgAAAAAAAABjYXJkIHNlY3Rpb24tYmxvY2sAAAAAAAAAAAAAAAAAAHBhZ2Ugb3ZlcnZpZXctcGFnZQAAAAAAAAAAAAAAAAAAc2VjdXJpdHktY29udHJvbAAAAAAAAAAAAAAAAAAAAABhcmNoaXRlY3R1cmUtbGF5ZXIAAAAAAAAAAAAAAAAAAFNFQ1VSSVRZICYgQVJDSElURUNUVVJFAAAAAAAAAAAAVHJ1c3QgeW91IGNhbiBpbnNwZWN0AAAAAAAAAAAAAABUYWxvbiBpcyBhIHJlYWwgT3NwcmV5IGFwcGxpY2F0aW9u4oCUbm90IGEgSmF2YVNjcmlwdCBtb2NrIHdlYXJpbmcgaXRzIGRhdGEuAAAAAG9yYml0LXJpbmcgcmluZy1vbmUAAAAAAAAAAAAAAAAAb3JiaXQtcmluZyByaW5nLXR3bwAAAAAAAAAAAAAAAABzZWN1cml0eS1oZXJvLWNvcHkAAAAAAAAAAAAAAAAAAHN0YXR1cy1waWxsIHN1Y2Nlc3MAAAAAAAAAAAAAAAAA4pePIEFsbCBzeXN0ZW1zIHByb3RlY3RlZAAAAAAAAABDYXBhYmlsaXR5LWNoZWNrZWQgYnkgY29uc3RydWN0aW9uAAAAAAAAAAAAAAAAAABUaGUgYnJvd3NlciBjYW4gcmVxdWVzdCBiYW5rIG9wZXJhdGlvbnMsIGJ1dCBpdCBuZXZlciByZWNlaXZlcyBzdG9yYWdlIGF1dGhvcml0eS4gT3NwcmV54oCZcyBtb2R1bGUgYW5kIGVmZmVjdCBib3VuZGFyaWVzIGRlY2lkZSB3aGF0IGNvZGUgaXMgYWxsb3dlZCB0byBkby4AAAAAY2FyZCBzZWN1cml0eS1jYXJkAAAAAAAAAAAAAAAAAABQcm90ZWN0aW9uIHN0YXR1cwAAAAAAAAAAAAAAAAAAAFN0b3JhZ2UgaXNvbGF0aW9uAAAAAAAAAAAAAAAAAAAAVGhlIFVJIGhhcyBubyBMZWRnZXIgb3IgU1FMaXRlIGNhcGFiaWxpdHkuAAAAAAAAQXRvbWljIHRyYW5zZmVycwAAAAAAAAAAAAAAAAAAAABEZWJpdCBhbmQgY3JlZGl0IGNvbW1pdCBhcyBvbmUgdHJhbnNhY3Rpb24uAAAAAABJbW11dGFibGUgYXVkaXQgdHJhaWwAAAAAAAAAAAAAAFJlZnVzZWQgb3ZlcmRyYWZ0cyBhcmUgam91cm5hbGxlZCB0b28uAAAAAAAAAAAAAFdob2xlLWNlbnQgYXJpdGhtZXRpYwAAAAAAAAAAAAAATm8gZmxvYXRpbmctcG9pbnQgZHJpZnQgaW4gbW9uZXkgZmxvd3MuAAAAAAAAAAAAYXJjaGl0ZWN0dXJlLXN0YWNrAAAAAAAAAAAAAAAAAABUdXJucyBkZWNsYXJhdGl2ZSBub2RlcyBpbnRvIGEgZmFzdCwgYWNjZXNzaWJsZSBpbnRlcmZhY2UuIEl0IG93bnMgbm8gYmFuayBsb2dpYy4AAAAAAAAAAAAAAAAAAABXQVNNIC8gTU9ERUwgwrcgVVBEQVRFIMK3IFZJRVcAAE93bnMgcm91dGluZywgaW50ZXJhY3Rpb25zLCB2YWxpZGF0aW9uLCBzdGF0ZSB0cmFuc2l0aW9ucywgYW5kIGNvbW1hbmQgZGVzY3JpcHRpb25zLgAAAAAAAAAAAAAAAFRoZSBvbmx5IGJyb3dzZXItc2lkZSBlZmZlY3Q6IHR5cGVkIHJlcXVlc3RzIHRvIHRoZSBwdWJsaWMgYmFuayBlbmRwb2ludHMuAAAAAAAAT1NQUkVZIC8gRUZGRUNUIEhBTkRMRVJTAAAAAAAAAABEb21haW4gcnVsZXMgYW5kIFNRTGl0ZSBhdXRob3JpdHkgcmVtYWluIG9uIHRoZSBzZXJ2ZXIsIGJleW9uZCB0aGUgVUkgYm91bmRhcnkuAGNhcmQgYXJjaGl0ZWN0dXJlLWNhcmQAAAAAAAAAAAAASE9XIFRISVMgQVBQIFJVTlMAAAAAAAAAAAAAAAAAAABBIHRoaW4gaG9zdC4gQSBzZXJpb3VzIE9zcHJleSBjb3JlLgAAAAAAAAAAAAAAAABhcmNoaXRlY3R1cmUtbGVhZAAAAAAAAAAAAAAAAAAAAFJlYWN0IGlzIGRlbGliZXJhdGVseSBiZWxvdyB0aGUgT3NwcmV5IHN1cmZhY2UuIFRoZSBhcHAgZW1pdHMgcGxhaW4gdmlldyBkYXRhIGFuZCBnZW5lcmljIGNvbW1hbmRzOyB0aGUgaG9zdCByZW5kZXJzIGFuZCB0cmFuc3BvcnRzIHRoZW0uAAAAAAAAAHBhZ2Ugc2VjdXJpdHktcGFnZQAAAAAAAAAAAAAAAAAAb3ZlcnZpZXctYWNjb3VudHMAAAAAAAAAAAAAAAAAAABvdmVydmlldy1hY3Rpdml0eQAAAAAAAAAAAAAAAAAAAGFjY291bnRzLWFjdGl2aXR5AAAAAAAAAAAAAAAAAAAAYWN0aXZpdHktcmVmcmVzaAAAAAAAAAAAAAAAAAAAAABDb250YWN0aW5nIHRoZSBwcm90ZWN0ZWQgbGVkZ2Vy4oCmAAAAAAAAAAAAAAAAAABDaGVjayB0aGUgZGVwb3NpdAAAAAAAAAAAAAAAAAAAAERlcG9zaXRpbmcgZnVuZHMAAAAAAAAAAAAAAAAAAAAAQ2hlY2sgdGhlIHdpdGhkcmF3YWwAAAAAAAAAAAAAAABDaG9vc2UgYW4gYWNjb3VudCBhbmQgZW50ZXIgYSBwb3NpdGl2ZSBhbW91bnQuAABBdXRob3Jpc2luZyB3aXRoZHJhd2FsAAAAAAAAAAAAAENob29zZSB0d28gYWNjb3VudHMAAAAAAAAAAAAAAAAAU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IGJlIGRpZmZlcmVudC4AAAAAAAAAQ2hlY2sgdGhlIHRyYW5zZmVyAAAAAAAAAAAAAAAAAABDaG9vc2UgYm90aCBhY2NvdW50cyBhbmQgZW50ZXIgYSBwb3NpdGl2ZSBhbW91bnQuAAAAAAAAAAAAAAAAAAAAVHJhbnNmZXJyaW5nIGZ1bmRzAAAAAAAAAAAAAAAAAABPd25lciBuYW1lIHJlcXVpcmVkAAAAAAAAAAAAAAAAAEVudGVyIHRoZSBjbGllbnTigJlzIGZ1bGwgbmFtZSB0byBvcGVuIHRoZSBhY2NvdW50LgAAAAAAAAAAAAAAAABzdWJtaXQtb3Blbi1hY2NvdW50AAAAAAAAAAAAAAAAAEJhbmsgZGF0YSB1bmF2YWlsYWJsZQAAAAAAAAAAAAAAVGhlICVzIHJlcXVlc3QgZmFpbGVkLiBSZWZyZXNoIHRvIHRyeSBhZ2Fpbi4AAAAAVGhlIGJyb3dzZXIgY291bGQgbm90IHJlYWNoIHRoZSBsZWRnZXIuIENoZWNrIHRoZSBicmlkZ2UgZGlhZ25vc3RpY3MgYW5kIHRyeSBhZ2Fpbi4AAAAAAAAAAAAAAAAAVGhlIGxlZGdlciBmYWlsZWQgd2l0aCBIVFRQICVzLiBUcnkgYWdhaW4gc2hvcnRseS4AAAAAAAAAAAAAAAAAAFRoZSBsZWRnZXIgcmVmdXNlZCB0aGUgcmVxdWVzdCB3aXRoIEhUVFAgJXMsIGJ1dCByZXR1cm5lZCBubyBlcnJvciBkZXRhaWwuAAAAAAAAVGhlIGxlZGdlciByZXR1cm5lZCBhbiB1bmV4cGVjdGVkIEhUVFAgJXMgcmVzcG9uc2UuAAAAAAAAAAAAAAAAAE9wZXJhdGlvbiByZWZ1c2VkAAAAAAAAAAAAAAAAAAAARGVwb3NpdCBjb21wbGV0ZQAAAAAAAAAAAAAAAAAAAABXaXRoZHJhd2FsIGNvbXBsZXRlAAAAAAAAAAAAAAAAAFRyYW5zZmVyIGNvbXBsZXRlAAAAAAAAAAAAAAAAAAAAVGhlIGxlZGdlciBhbmQgYWN0aXZpdHkgam91cm5hbCBhcmUgbm93IHVwIHRvIGRhdGUuAFN1Y2Nlc3MASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MATm8gc3VjaCBkZXZpY2UATm90IGEgZGlyZWN0b3J5AElzIGEgZGlyZWN0b3J5AFRleHQgZmlsZSBidXN5AEV4ZWMgZm9ybWF0IGVycm9yAEludmFsaWQgYXJndW1lbnQAQXJndW1lbnQgbGlzdCB0b28gbG9uZwBTeW1ib2xpYyBsaW5rIGxvb3AARmlsZW5hbWUgdG9vIGxvbmcAVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0ATm8gZmlsZSBkZXNjcmlwdG9ycyBhdmFpbGFibGUAQmFkIGZpbGUgZGVzY3JpcHRvcgBObyBjaGlsZCBwcm9jZXNzAEJhZCBhZGRyZXNzAEZpbGUgdG9vIGxhcmdlAFRvbyBtYW55IGxpbmtzAE5vIGxvY2tzIGF2YWlsYWJsZQBSZXNvdXJjZSBkZWFkbG9jayB3b3VsZCBvY2N1cgBTdGF0ZSBub3QgcmVjb3ZlcmFibGUAUHJldmlvdXMgb3duZXIgZGllZABPcGVyYXRpb24gY2FuY2VsZWQARnVuY3Rpb24gbm90IGltcGxlbWVudGVkAE5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlAElkZW50aWZpZXIgcmVtb3ZlZABMaW5rIGhhcyBiZWVuIHNldmVyZWQAUHJvdG9jb2wgZXJyb3IAQmFkIG1lc3NhZ2UATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBRdW90YSBleGNlZWRlZABNdWx0aWhvcCBhdHRlbXB0ZWQAQ2FwYWJpbGl0aWVzIGluc3VmZmljaWVudAAAAAAAAAAAAAAAAAAAAHUCTgDWAeIEuQQYAY4F7QIWBPIAlwMBAzgFrwGCAU8DLwQeANQFogASAx4DwgHeAwgArAUAAWQC8QFlBTQCjALPAi0DTATjBZ8C+AQcBQgFsQJLBRUCeABSAjwD8QPkAMMDfQTMAKoDeQUkAm4BbQMiBKsERAD7Aa4AgwNgAOUBBwSUBF4EKwBYATkBkgDCBZsBQwJGAfYFAAAAAAAAGQALABkZGQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAAZAAoKGRkZAwoHAAEbCQsYAAAJBgsAAAsABhkAAAAZGRkAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAGQALDRkZGQANAAACAAkOAAAACQAOAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAABMAAAAAEwAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAPAAAABA8AAAAACRAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAAEQAAAAARAAAAAAkSAAAAAAASAAASAAAaAAAAGhoaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAAAaGhoAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAXAAAAABcAAAAACRQAAAAAABQAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAAAAAAAAAAFQAAAAAVAAAAAAkWAAAAAAAWAAAWAAAwMTIzNDU2Nzg5QUJDREVGAABBuN0EC3wAAAIAAAAAAAUAAAAAAAAAAAAAADcAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADkAAAAAQAEAAAAAAAAAAAAAAAAAAgAAAAAAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADALgEAANEeBG5hbWUAEhF0YWxvbi1jbGllbnQud2FzbQHtHbABABZvc3ByZXlfd2ViX2hvc3RfcmVuZGVyASpfX2ltcG9ydGVkX3dhc2lfc25hcHNob3RfcHJldmlldzFfZmRfY2xvc2UCKV9faW1wb3J0ZWRfd2FzaV9zbmFwc2hvdF9wcmV2aWV3MV9mZF9zZWVrAypfX2ltcG9ydGVkX3dhc2lfc25hcHNob3RfcHJldmlldzFfZmRfd3JpdGUEK19faW1wb3J0ZWRfd2FzaV9zbmFwc2hvdF9wcmV2aWV3MV9wcm9jX2V4aXQFEV9fd2FzbV9jYWxsX2N0b3JzBgZfc3RhcnQHDl9fY2xvc3VyZV9mbl8xCA5fX2Nsb3N1cmVfZm5fMAkqX19vc3BfNHg2MjYxNmU2Yl81eDRkNmY2ZTY1NzlfNXg2NzcyNmY3NTcwCi5fX29zcF80eDYyNjE2ZTZiXzV4NGQ2ZjZlNjU3OV83eDcwNjU2ZTZlNjk2NTczCypfX29zcF80eDYyNjE2ZTZiXzR4NGE3MzZmNmVfNng2NTczNjM2MTcwNjUMKF9fb3NwXzR4NjI2MTZlNmJfNHg0YTczNmY2ZV81eDcxNzU2Zjc0NjUNDl9fY2xvc3VyZV9mbl8yDixfX29zcF80eDYyNjE2ZTZiXzV4NGQ2ZjZlNjU3OV82eDc0NzI2OTcwNmM2NQ8OX19jbG9zdXJlX2ZuXzYQD19fY2xvc3VyZV9mbl84OREPX19jbG9zdXJlX2ZuXzkxEg5fX2Nsb3N1cmVfZm5fORMPX19jbG9zdXJlX2ZuXzE1FA9fX2Nsb3N1cmVfZm5fMTYVD19fY2xvc3VyZV9mbl8xNxYPX19jbG9zdXJlX2ZuXzIyFw9fX2Nsb3N1cmVfZm5fMjgYJl9fb3NwXzV4NzQ2MTZjNmY2ZV8zeDQxNzA3MF80eDcwNjE2NzY1GTlfX29zcF81eDc0NjE2YzZmNmVfMTJ4NDE2MzYzNmY3NTZlNzQ3MzUwNjE2NzY1XzR4NzY2OTY1NzcaMF9fb3NwXzV4NzQ2MTZjNmY2ZV84eDRkNmY3NjY1NTA2MTY3NjVfNHg3NjY5NjU3Nxs5X19vc3BfNXg3NDYxNmM2ZjZlXzEyeDQxNjM3NDY5NzY2OTc0Nzk1MDYxNjc2NV80eDc2Njk2NTc3HDlfX29zcF81eDc0NjE2YzZmNmVfMTJ4NTM2NTYzNzU3MjY5NzQ3OTUwNjE2NzY1XzR4NzY2OTY1NzcdOV9fb3NwXzV4NzQ2MTZjNmY2ZV8xMng0Zjc2NjU3Mjc2Njk2NTc3NTA2MTY3NjVfNHg3NjY5NjU3Nx4uX19vc3BfNXg3NDYxNmM2ZjZlXzV4NGQ2ZjY0NjU2Y182eDY1NmU2MzZmNjQ2NR8PX19jbG9zdXJlX2ZuXzU3IA9fX2Nsb3N1cmVfZm5fMzIhKF9fb3NwXzV4NzQ2MTZjNmY2ZV8zeDQxNzA3MF81eDczNzQ2MTcyNzQiNl9fb3NwXzV4NzQ2MTZjNmY2ZV84eDQzNmY2ZDZkNjE2ZTY0NzNfN3g2ODc5NjQ3MjYxNzQ2NSM0X19vc3BfNXg3NDYxNmM2ZjZlXzZ4NTU3MDY0NjE3NDY1Xzh4NjQ2OTczNzA2MTc0NjM2OCQPX19jbG9zdXJlX2ZuXzM1JTJfX29zcF81eDc0NjE2YzZmNmVfOHg0MzZmNmQ2ZDYxNmU2NDczXzV4NjY2ZjYzNzU3MyY4X19vc3BfNXg3NDYxNmM2ZjZlXzh4NDM2ZjZkNmQ2MTZlNjQ3M184eDZlNjE3NjY5Njc2MTc0NjUnD19fY2xvc3VyZV9mbl8zNygPX19jbG9zdXJlX2ZuXzQ0KQ9fX2Nsb3N1cmVfZm5fNDUqD19fY2xvc3VyZV9mbl80NytBX19vc3BfNXg3NDYxNmM2ZjZlXzh4NDI2MTZlNmI0NDYxNzQ2MV8xMng3MDYxNzI3MzY1NjQ0MTZkNmY3NTZlNzQsD19fY2xvc3VyZV9mbl80OS0PX19jbG9zdXJlX2ZuXzUxLg9fX2Nsb3N1cmVfZm5fNTMvD19fY2xvc3VyZV9mbl81NjAyX19vc3BfNXg3NDYxNmM2ZjZlXzZ4NGM2MTc5NmY3NTc0Xzd4NzM2OTY0NjU2MjYxNzIxMF9fb3NwXzV4NzQ2MTZjNmY2ZV82eDRjNjE3OTZmNzU3NF82eDc0NmY3MDYyNjE3MjIPX19jbG9zdXJlX2ZuXzk1MzJfX29zcF81eDc0NjE2YzZmNmVfNng0YzYxNzk2Zjc1NzRfN3g2YzZmNjE2NDY5NmU2NzQwX19vc3BfNXg3NDYxNmM2ZjZlXzZ4NGM2MTc5NmY3NTc0XzZ4NmU2Zjc0Njk2MzY1NS5fX29zcF81eDc0NjE2YzZmNmVfNng0YzYxNzk2Zjc1NzRfNXg2ZDZmNjQ2MTZjNhBfX2Nsb3N1cmVfZm5fMTAyNy5fX29zcF81eDc0NjE2YzZmNmVfNXg0ZDZmNjQ2NTZjXzZ4NjQ2NTYzNmY2NDY1OA9fX2Nsb3N1cmVfZm5fNjI5PV9fb3NwXzV4NzQ2MTZjNmY2ZV8xMng0MTYzNjM2Zjc1NmU3NDczNTA2MTY3NjVfNng2NDY1NzQ2MTY5NmM6EF9fY2xvc3VyZV9mbl8xMDc7D19fY2xvc3VyZV9mbl82NzwPX19jbG9zdXJlX2ZuXzkwPQ9fX2Nsb3N1cmVfZm5fNzE+P19fb3NwXzV4NzQ2MTZjNmY2ZV84eDRkNmY3NjY1NTA2MTY3NjVfMTF4NjE2ZDZmNzU2ZTc0NDY2OTY1NmM2ND8PX19jbG9zdXJlX2ZuXzcyQA9fX2Nsb3N1cmVfZm5fNzNBD19fY2xvc3VyZV9mbl83NEIPX19jbG9zdXJlX2ZuXzc1Qw9fX2Nsb3N1cmVfZm5fNzdED19fY2xvc3VyZV9mbl84MEUPX19jbG9zdXJlX2ZuXzgzRg9fX2Nsb3N1cmVfZm5fODZHNF9fb3NwXzV4NzQ2MTZjNmY2ZV82eDU1NzA2NDYxNzQ2NV84eDcyNmY3NTc0NjU0NjZmNzJIMl9fb3NwXzV4NzQ2MTZjNmY2ZV82eDU1NzA2NDYxNzQ2NV83eDZkNmY2NDY1NDY2ZjcySRBfX2Nsb3N1cmVfZm5fMTEzShBfX2Nsb3N1cmVfZm5fMTE0SxBfX2Nsb3N1cmVfZm5fMTE2TBBfX2Nsb3N1cmVfZm5fMTE3TRBfX2Nsb3N1cmVfZm5fMTE4ThBfX2Nsb3N1cmVfZm5fMTE5TxBfX2Nsb3N1cmVfZm5fMTI2UBBfX2Nsb3N1cmVfZm5fMTI3URBfX2Nsb3N1cmVfZm5fMTI4UhBfX2Nsb3N1cmVfZm5fMTI5UxBfX2Nsb3N1cmVfZm5fMTMwVBBfX2Nsb3N1cmVfZm5fMTMyVRBfX2Nsb3N1cmVfZm5fMTMzVjtfX29zcF81eDc0NjE2YzZmNmVfNng1NTcwNjQ2MTc0NjVfMTF4NzM3NDYxNzQ3NTczNDU3MjcyNmY3MlcQX19jbG9zdXJlX2ZuXzEzN1gQX19jbG9zdXJlX2ZuXzE0MFkLX19tYWluX3ZvaWRaE29zcHJleV93ZWJfZGlzcGF0Y2hbCmpzb25fcGFyc2VcC3BhcnNlX3ZhbHVlXQlqdmFsX2ZyZWVeEHBhcnNlX3N0cmluZ19yYXdfBmxvb2t1cGAIanNvbl9nZXRhC2pzb25fbGVuZ3RoYglqc29uX2ZyZWVjCW9zcF9hbGxvY2QKb3NwX3N0cmxlbmUWb3NwX3N0cmluZ19zdGFydHNfd2l0aGYTb3NwX3N0cmluZ19pbmRleF9vZmcPb3NwX3N0cmluZ190YWtlaA9vc3Bfc3RyaW5nX2Ryb3BpE29zcF9zdHJpbmdfdG9fbG93ZXJqD29zcF9zdHJpbmdfdHJpbWsSb3NwX3N0cmluZ19yZXBsYWNlbBRvc3BfcGFyc2VfaW50X3N0cmljdG0Wb3NwX3N0cmluZ19ieXRlX2xlbmd0aG4Sb3NwX3N0cmluZ19ieXRlX2F0bxFvc3ByZXlfd2ViX3JlbmRlcnANb3NwX3Byb2ZfYm9vdHEPX193YXNpX2ZkX2Nsb3Nlcg5fX3dhc2lfZmRfc2Vla3MPX193YXNpX2ZkX3dyaXRldBBfX3dhc2lfcHJvY19leGl0dQ5fX3dhc2lfaW5pdF90cHYFZHVtbXl3EV9fd2FzbV9jYWxsX2R0b3JzeAd0b2xvd2VyeQdzcHJpbnRmegl2c25wcmludGZ7CHNuX3dyaXRlfAh2c3ByaW50Zn0GbWVtY21wfgZzdHJjYXR/BnN0cmNtcIABCF9fc3RwY3B5gQEGc3RyY3B5ggEGc3RyZHVwgwEGc3RybGVuhAEHc3RybmNtcIUBC19fc3RyY2hybnVshgEGc3RyY2hyhwEGbWVtY2hyiAEGc3Ryc3RyiQEPZm91cmJ5dGVfc3Ryc3RyigENdHdvd2F5X3N0cnN0cosBFF9fcHRocmVhZF9tdXRleF9sb2NrjAEWX19wdGhyZWFkX211dGV4X3VubG9ja40BCl9fb2ZsX2xvY2uOAQxfX3N0ZGlvX2V4aXSPAQlfX3Rvd3JpdGWQAQlfX2Z3cml0ZXiRAQZmd3JpdGWSAQVkdW1teZMBCV9fbGN0cmFuc5QBCHN0cmVycm9ylQEHc3RybmxlbpYBB3djcnRvbWKXAQZ3Y3RvbWKYAQVmcmV4cJkBHF9fd2FzaWxpYmNfcG9wdWxhdGVfcHJlb3BlbnOaAQVjbG9zZZsBDV9fc3RkaW9fY2xvc2WcAQZ3cml0ZXadAQ1fX3N0ZGlvX3dyaXRlngEHX19sc2Vla58BDF9fc3RkaW9fc2Vla6ABBWZwdXRzoQEFYWJvcnSiAQh2ZnByaW50ZqMBC3ByaW50Zl9jb3JlpAEHcG9wX2FyZ6UBA3BhZKYBGWxvbmdfZG91YmxlX25vdF9zdXBwb3J0ZWSnAQRzYnJrqAEGbWFsbG9jqQEIZGxtYWxsb2OqAQ1wcmVwZW5kX2FsbG9jqwEEZnJlZawBBmRsZnJlZa0BBmNhbGxvY64BB3JlYWxsb2OvAQ1kaXNwb3NlX2NodW5rBzMCAA9fX3N0YWNrX3BvaW50ZXIBH0dPVC5kYXRhLmludGVybmFsLl9fbWVtb3J5X2Jhc2UJEQIABy5yb2RhdGEBBS5kYXRhAC8JcHJvZHVjZXJzAQxwcm9jZXNzZWQtYnkBDkhvbWVicmV3IGNsYW5nBjIyLjEuMgCUAQ90YXJnZXRfZmVhdHVyZXMIKwtidWxrLW1lbW9yeSsPYnVsay1tZW1vcnktb3B0KxZjYWxsLWluZGlyZWN0LW92ZXJsb25nKwptdWx0aXZhbHVlKw9tdXRhYmxlLWdsb2JhbHMrE25vbnRyYXBwaW5nLWZwdG9pbnQrD3JlZmVyZW5jZS10eXBlcysIc2lnbi1leHQ=\",fv=64,ov=\"X-Osprey-Request-Id\",yv=new TextDecoder(\"utf-8\"),j1=new TextEncoder;function Y1(l){return j1.encode(String(l??\"\")).byteLength}function G1(l){return Math.max(0,Math.round((performance.now()-l)*100)/100)}function sv(l){try{return new URL(String(l??\"\"),\"http://osprey.invalid\").pathname||\"/\"}catch{return String(l??\"\").split(/[?#]/,1)[0]||\"/\"}}function mv(l,t,u){let a=Object.keys(l).find(e=>e.toLowerCase()===t.toLowerCase());l[a??t]=u}function dv(l,t){let u=String(t?.message??t??\"Unknown network error\");return JSON.stringify({error:\"\".concat(l.method,\" \").concat(l.url,\" could not reach the ledger: \").concat(u)})}function hv(l){let t=l?.osprey_web_dispatch??l?.dispatch??l?.osprey_dispatch;if(typeof t!=\"function\")throw new Error(\"Osprey wasm must export osprey_web_dispatch\");return t}function vv(l,t){let u={...l,model:t};for(let[a,e]of Object.entries(u))e==null?delete u[a]:typeof e==\"object\"?u[a]=JSON.stringify(e):[\"string\",\"number\",\"boolean\"].includes(typeof e)||(u[a]=String(e));return u}function Sv(l){let t=String(l.method||\"GET\").toUpperCase(),u={...l.headers??{}},a={method:t,headers:u};return!(l.body!==void 0&&l.body!==\"\")||t===\"GET\"||t===\"HEAD\"||(a.body=typeof l.body==\"string\"?l.body:JSON.stringify(l.body),Object.keys(u).some(i=>i.toLowerCase()===\"content-type\")||(u[\"Content-Type\"]=\"application/json\")),a}function X1(l,t,u){return{kind:\"http\",id:String(l.id??l.commandId??\"\"),status:t,data:u}}function gv(l,t){return{wasi_snapshot_preview1:t.imports,osprey_web:{render:u=>l.renderPointer(u),command:u=>l.commandPointer(u)}}}function rv(l){if(typeof l._start==\"function\")l._start();else if(typeof l.main==\"function\")l.main();else throw new Error(\"Osprey wasm must export _start\")}function bv(){return{ready:!1,renders:0,events:0,lastPayloadBytes:0,lastDecodeMs:0,trace:[]}}function Ev(l){if(!l||l.startsWith(\"__OSPREY_WASM_\"))throw new Error(\"The Osprey WebAssembly payload was not embedded\");let t=atob(l),u=new Uint8Array(t.length);for(let a=0;a{this.exports&&this.dispatch({kind:\"location\",value:window.location.hash})},window.addEventListener(\"popstate\",this.onPopState)}readCString(t){let u=Number(t);if(!this.memory||!Number.isSafeInteger(u)||u<=0)throw new Error(\"Invalid Osprey string pointer: \".concat(String(t)));let a=new Uint8Array(this.memory.buffer),e=u;for(;ethis.runCommands(a)),0}commitEnvelope(t){let u=H1(t);this.model=u.model;let a=++this.renderSequence;this.root.render(N1(u.view,e=>this.dispatch(e))),u.commands.length&&queueMicrotask(()=>{a<=this.renderSequence&&this.runCommands(u.commands)})}allocate(t){let u=this.exports?.osp_alloc??this.exports?.osprey_web_alloc??this.exports?.malloc??this.exports?.alloc;if(typeof u!=\"function\")throw new Error(\"Osprey wasm must export osp_alloc\");try{return Number(u(BigInt(t)))}catch(a){if(!(a instanceof TypeError))throw a;return Number(u(t))}}dispatch(t){if(!this.exports)return;let u=hv(this.exports),a=this.writeDispatch(t);this.acceptDispatchResult(u(a))}writeDispatch(t){let u=j1.encode(\"\".concat(JSON.stringify(vv(t,this.model)),\"\\0\"));this.bridge.events+=1,this.bridge.lastPayloadBytes=u.byteLength-1;let a=this.allocate(u.byteLength);return new Uint8Array(this.memory.buffer,a,u.byteLength).set(u),a}acceptDispatchResult(t){let u=Number(t??0);Number.isSafeInteger(u)&&u>0&&this.commitEnvelope(this.readJson(u))}httpContext(t,u){let a=String(t.id||\"http\");return this.httpSequence+=1,{correlationId:\"\".concat(a,\"-\").concat(this.httpSequence),commandId:a,method:u.method,url:sv(t.url),requestBytes:Y1(u.body)}}recordHttp(t,u=\"info\"){this.bridge.trace.push(t);let a=this.bridge.trace.length-fv;a>0&&this.bridge.trace.splice(0,a),(this.logger[u]??this.logger.info??this.logger.log)?.call(this.logger,\"[talon:bridge]\",t)}completeHttp(t,u,a,e){let n={...t,phase:\"response\",status:a,responseBytes:Y1(e),durationMs:G1(u)};this.recordHttp(n,a>=400?\"warn\":\"info\"),this.dispatch(X1(t,a,e))}failHttp(t,u,a){let e={...t,phase:\"response\",status:0,responseBytes:0,durationMs:G1(u),error:String(a?.message??a)};this.recordHttp(e,\"warn\"),this.dispatch(X1(t,0,dv(t,a)))}async runHttp(t){let u=performance.now(),a=Sv(t),e=this.httpContext(t,a);mv(a.headers,ov,e.correlationId),this.recordHttp({...e,phase:\"request\"});try{let n=await fetch(t.url,a),i=await n.text();this.completeHttp(e,u,n.status,i)}catch(n){this.failHttp(e,u,n)}}runFocus(t){requestAnimationFrame(()=>{document.getElementById(String(t.id??\"\"))?.focus({preventScroll:!1})})}runNavigate(t){let u=String(t.url??\"\");u&&(t.replace===!0||t.replace===\"true\"?window.history.replaceState(null,\"\",u):window.history.pushState(null,\"\",u))}runCommands(t){for(let u of t)if(!(!u||typeof u!=\"object\"))switch(C1(u)){case\"http\":this.runHttp(u);break;case\"focus\":this.runFocus(u);break;case\"navigate\":this.runNavigate(u);break;default:console.warn(\"Unknown Osprey web command\",u)}}async start(t){let u=R1(e=>console.debug(\"[osprey]\",e.trimEnd())),{instance:a}=await WebAssembly.instantiate(t,gv(this,u));return this.attachInstance(a,u),rv(a.exports),u.flush(),this.bridge.ready=!0,window.location.hash&&this.dispatch({kind:\"location\",value:window.location.hash}),this}attachInstance(t,u){if(this.exports=t.exports,this.memory=t.exports.memory,!(this.memory instanceof WebAssembly.Memory))throw new Error(\"Osprey wasm must export memory\");u.setMemory(this.memory)}};async function qf(){let l=new Bf(zv());window.__OSPREY_WEB__=l;try{await l.start(Ev(cv)),document.documentElement.dataset.ospreyReady=\"true\"}catch(t){console.error(\"Osprey web host failed\",t),document.documentElement.dataset.ospreyReady=\"false\",l.root.render(kt.default.createElement(Tv,{error:t}))}}document.readyState===\"loading\"?document.addEventListener(\"DOMContentLoaded\",()=>{qf()},{once:!0}):qf();})();\n" + script () = "(()=>{var x1=Object.create;var Rf=Object.defineProperty;var V1=Object.getOwnPropertyDescriptor;var L1=Object.getOwnPropertyNames;var K1=Object.getPrototypeOf,J1=Object.prototype.hasOwnProperty;var Tt=(l,t)=>()=>{try{return t||l((t={exports:{}}).exports,t),t.exports}catch(u){throw t=0,u}};var w1=(l,t,u,a)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let e of L1(t))!J1.call(l,e)&&e!==u&&Rf(l,e,{get:()=>t[e],enumerable:!(a=V1(t,e))||a.enumerable});return l};var Vn=(l,t,u)=>(u=l!=null?x1(K1(l)):{},w1(t||!l||!l.__esModule?Rf(u,\"default\",{value:l,enumerable:!0}):u,l));var Jf=Tt(p=>{\"use strict\";var Jn=Symbol.for(\"react.transitional.element\"),W1=Symbol.for(\"react.portal\"),$1=Symbol.for(\"react.fragment\"),F1=Symbol.for(\"react.strict_mode\"),k1=Symbol.for(\"react.profiler\"),I1=Symbol.for(\"react.consumer\"),P1=Symbol.for(\"react.context\"),lm=Symbol.for(\"react.forward_ref\"),tm=Symbol.for(\"react.suspense\"),um=Symbol.for(\"react.memo\"),jf=Symbol.for(\"react.lazy\"),am=Symbol.for(\"react.activity\"),Yf=Symbol.iterator;function em(l){return l===null||typeof l!=\"object\"?null:(l=Yf&&l[Yf]||l[\"@@iterator\"],typeof l==\"function\"?l:null)}var Zf={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},xf=Object.assign,Vf={};function bu(l,t,u){this.props=l,this.context=t,this.refs=Vf,this.updater=u||Zf}bu.prototype.isReactComponent={};bu.prototype.setState=function(l,t){if(typeof l!=\"object\"&&typeof l!=\"function\"&&l!=null)throw Error(\"takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,l,t,\"setState\")};bu.prototype.forceUpdate=function(l){this.updater.enqueueForceUpdate(this,l,\"forceUpdate\")};function Lf(){}Lf.prototype=bu.prototype;function wn(l,t,u){this.props=l,this.context=t,this.refs=Vf,this.updater=u||Zf}var Wn=wn.prototype=new Lf;Wn.constructor=wn;xf(Wn,bu.prototype);Wn.isPureReactComponent=!0;var Gf=Array.isArray;function Kn(){}var V={H:null,A:null,T:null,S:null},Kf=Object.prototype.hasOwnProperty;function $n(l,t,u){var a=u.ref;return{$$typeof:Jn,type:l,key:t,ref:a!==void 0?a:null,props:u}}function nm(l,t){return $n(l.type,t,l.props)}function Fn(l){return typeof l==\"object\"&&l!==null&&l.$$typeof===Jn}function im(l){var t={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+l.replace(/[=:]/g,function(u){return t[u]})}var Xf=/\\/+/g;function Ln(l,t){return typeof l==\"object\"&&l!==null&&l.key!=null?im(\"\"+l.key):t.toString(36)}function cm(l){switch(l.status){case\"fulfilled\":return l.value;case\"rejected\":throw l.reason;default:switch(typeof l.status==\"string\"?l.then(Kn,Kn):(l.status=\"pending\",l.then(function(t){l.status===\"pending\"&&(l.status=\"fulfilled\",l.value=t)},function(t){l.status===\"pending\"&&(l.status=\"rejected\",l.reason=t)})),l.status){case\"fulfilled\":return l.value;case\"rejected\":throw l.reason}}throw l}function ru(l,t,u,a,e){var n=typeof l;(n===\"undefined\"||n===\"boolean\")&&(l=null);var i=!1;if(l===null)i=!0;else switch(n){case\"bigint\":case\"string\":case\"number\":i=!0;break;case\"object\":switch(l.$$typeof){case Jn:case W1:i=!0;break;case jf:return i=l._init,ru(i(l._payload),t,u,a,e)}}if(i)return e=e(l),i=a===\"\"?\".\"+Ln(l,0):a,Gf(e)?(u=\"\",i!=null&&(u=i.replace(Xf,\"$&/\")+\"/\"),ru(e,t,u,\"\",function(s){return s})):e!=null&&(Fn(e)&&(e=nm(e,u+(e.key==null||l&&l.key===e.key?\"\":(\"\"+e.key).replace(Xf,\"$&/\")+\"/\")+i)),t.push(e)),1;i=0;var c=a===\"\"?\".\":a+\":\";if(Gf(l))for(var f=0;f{\"use strict\";wf.exports=Jf()});var a0=Tt(w=>{\"use strict\";function li(l,t){var u=l.length;l.push(t);l:for(;0>>1,e=l[a];if(0>>1;ade(c,u))fde(s,c)?(l[a]=s,l[f]=u,a=f):(l[a]=c,l[i]=u,a=i);else if(fde(s,u))l[a]=s,l[f]=u,a=f;else break l}}return t}function de(l,t){var u=l.sortIndex-t.sortIndex;return u!==0?u:l.id-t.id}w.unstable_now=void 0;typeof performance==\"object\"&&typeof performance.now==\"function\"?(Wf=performance,w.unstable_now=function(){return Wf.now()}):(kn=Date,$f=kn.now(),w.unstable_now=function(){return kn.now()-$f});var Wf,kn,$f,tt=[],At=[],ym=1,ql=null,dl=3,ti=!1,sa=!1,ma=!1,ui=!1,If=typeof setTimeout==\"function\"?setTimeout:null,Pf=typeof clearTimeout==\"function\"?clearTimeout:null,Ff=typeof setImmediate<\"u\"?setImmediate:null;function he(l){for(var t=Wl(At);t!==null;){if(t.callback===null)ve(At);else if(t.startTime<=l)ve(At),t.sortIndex=t.expirationTime,li(tt,t);else break;t=Wl(At)}}function ai(l){if(ma=!1,he(l),!sa)if(Wl(tt)!==null)sa=!0,zu||(zu=!0,Eu());else{var t=Wl(At);t!==null&&ei(ai,t.startTime-l)}}var zu=!1,da=-1,l0=5,t0=-1;function u0(){return ui?!0:!(w.unstable_now()-t0l&&u0());){var a=ql.callback;if(typeof a==\"function\"){ql.callback=null,dl=ql.priorityLevel;var e=a(ql.expirationTime<=l);if(l=w.unstable_now(),typeof e==\"function\"){ql.callback=e,he(l),t=!0;break t}ql===Wl(tt)&&ve(tt),he(l)}else ve(tt);ql=Wl(tt)}if(ql!==null)t=!0;else{var n=Wl(At);n!==null&&ei(ai,n.startTime-l),t=!1}}break l}finally{ql=null,dl=u,ti=!1}t=void 0}}finally{t?Eu():zu=!1}}}var Eu;typeof Ff==\"function\"?Eu=function(){Ff(In)}:typeof MessageChannel<\"u\"?(Pn=new MessageChannel,kf=Pn.port2,Pn.port1.onmessage=In,Eu=function(){kf.postMessage(null)}):Eu=function(){If(In,0)};var Pn,kf;function ei(l,t){da=If(function(){l(w.unstable_now())},t)}w.unstable_IdlePriority=5;w.unstable_ImmediatePriority=1;w.unstable_LowPriority=4;w.unstable_NormalPriority=3;w.unstable_Profiling=null;w.unstable_UserBlockingPriority=2;w.unstable_cancelCallback=function(l){l.callback=null};w.unstable_forceFrameRate=function(l){0>l||125a?(l.sortIndex=u,li(At,l),Wl(tt)===null&&l===Wl(At)&&(ma?(Pf(da),da=-1):ma=!0,ei(ai,u-a))):(l.sortIndex=e,li(tt,l),sa||ti||(sa=!0,zu||(zu=!0,Eu()))),l};w.unstable_shouldYield=u0;w.unstable_wrapCallback=function(l){var t=dl;return function(){var u=dl;dl=t;try{return l.apply(this,arguments)}finally{dl=u}}}});var n0=Tt((Uv,e0)=>{\"use strict\";e0.exports=a0()});var c0=Tt(vl=>{\"use strict\";var sm=ya();function i0(l){var t=\"https://react.dev/errors/\"+l;if(1{\"use strict\";function f0(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>\"u\"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=\"function\"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(f0)}catch(l){console.error(l)}}f0(),o0.exports=c0()});var A1=Tt(xn=>{\"use strict\";var el=n0(),Go=ya(),hm=y0();function r(l){var t=\"https://react.dev/errors/\"+l;if(1Du||(l.current=Vi[Du],Vi[Du]=null,Du--)}function x(l,t){Du++,Vi[Du]=l.current,l.current=t}var Il=Pl(null),ja=Pl(null),Yt=Pl(null),Fe=Pl(null);function ke(l,t){switch(x(Yt,t),x(ja,l),x(Il,null),t.nodeType){case 9:case 11:l=(l=t.documentElement)&&(l=l.namespaceURI)?Eo(l):0;break;default:if(l=t.tagName,t=t.namespaceURI)t=Eo(t),l=o1(t,l);else switch(l){case\"svg\":l=1;break;case\"math\":l=2;break;default:l=0}}cl(Il),x(Il,l)}function Ju(){cl(Il),cl(ja),cl(Yt)}function Li(l){l.memoizedState!==null&&x(Fe,l);var t=Il.current,u=o1(t,l.type);t!==u&&(x(ja,l),x(Il,u))}function Ie(l){ja.current===l&&(cl(Il),cl(ja)),Fe.current===l&&(cl(Fe),ka._currentValue=au)}var ni,d0;function Pt(l){if(ni===void 0)try{throw Error()}catch(u){var t=u.stack.trim().match(/\\n( *(at )?)/);ni=t&&t[1]||\"\",d0=-1)\":-1e||f[a]!==s[e]){var v=\"\\n\"+f[a].replace(\" at new \",\" at \");return l.displayName&&v.includes(\"\")&&(v=v.replace(\"\",l.displayName)),v}while(1<=a&&0<=e);break}}}finally{ii=!1,Error.prepareStackTrace=u}return(u=l?l.displayName||l.name:\"\")?Pt(u):\"\"}function bm(l,t){switch(l.tag){case 26:case 27:case 5:return Pt(l.type);case 16:return Pt(\"Lazy\");case 13:return l.child!==t&&t!==null?Pt(\"Suspense Fallback\"):Pt(\"Suspense\");case 19:return Pt(\"SuspenseList\");case 0:case 15:return ci(l.type,!1);case 11:return ci(l.type.render,!1);case 1:return ci(l.type,!0);case 31:return Pt(\"Activity\");default:return\"\"}}function h0(l){try{var t=\"\",u=null;do t+=bm(l,u),u=l,l=l.return;while(l);return t}catch(a){return\"\\nError generating stack: \"+a.message+\"\\n\"+a.stack}}var Ki=Object.prototype.hasOwnProperty,Rc=el.unstable_scheduleCallback,fi=el.unstable_cancelCallback,Em=el.unstable_shouldYield,zm=el.unstable_requestPaint,Dl=el.unstable_now,Tm=el.unstable_getCurrentPriorityLevel,Lo=el.unstable_ImmediatePriority,Ko=el.unstable_UserBlockingPriority,Pe=el.unstable_NormalPriority,Am=el.unstable_LowPriority,Jo=el.unstable_IdlePriority,pm=el.log,_m=el.unstable_setDisableYieldValue,te=null,Ul=null;function Ht(l){if(typeof pm==\"function\"&&_m(l),Ul&&typeof Ul.setStrictMode==\"function\")try{Ul.setStrictMode(te,l)}catch{}}var Nl=Math.clz32?Math.clz32:Dm,Om=Math.log,Mm=Math.LN2;function Dm(l){return l>>>=0,l===0?32:31-(Om(l)/Mm|0)|0}var re=256,be=262144,Ee=4194304;function lu(l){var t=l&42;if(t!==0)return t;switch(l&-l){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return l&261888;case 262144:case 524288:case 1048576:case 2097152:return l&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return l&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return l}}function On(l,t,u){var a=l.pendingLanes;if(a===0)return 0;var e=0,n=l.suspendedLanes,i=l.pingedLanes;l=l.warmLanes;var c=a&134217727;return c!==0?(a=c&~n,a!==0?e=lu(a):(i&=c,i!==0?e=lu(i):u||(u=c&~l,u!==0&&(e=lu(u))))):(c=a&~n,c!==0?e=lu(c):i!==0?e=lu(i):u||(u=a&~l,u!==0&&(e=lu(u)))),e===0?0:t!==0&&t!==e&&(t&n)===0&&(n=e&-e,u=t&-t,n>=u||n===32&&(u&4194048)!==0)?t:e}function ue(l,t){return(l.pendingLanes&~(l.suspendedLanes&~l.pingedLanes)&t)===0}function Um(l,t){switch(l){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function wo(){var l=Ee;return Ee<<=1,(Ee&62914560)===0&&(Ee=4194304),l}function oi(l){for(var t=[],u=0;31>u;u++)t.push(l);return t}function ae(l,t){l.pendingLanes|=t,t!==268435456&&(l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0)}function Nm(l,t,u,a,e,n){var i=l.pendingLanes;l.pendingLanes=u,l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0,l.expiredLanes&=u,l.entangledLanes&=u,l.errorRecoveryDisabledLanes&=u,l.shellSuspendCounter=0;var c=l.entanglements,f=l.expirationTimes,s=l.hiddenUpdates;for(u=i&~u;0\"u\")return null;try{return l.activeElement||l.body}catch{return l.body}}var Ym=/[\\n\"\\\\]/g;function Ql(l){return l.replace(Ym,function(t){return\"\\\\\"+t.charCodeAt(0).toString(16)+\" \"})}function Wi(l,t,u,a,e,n,i,c){l.name=\"\",i!=null&&typeof i!=\"function\"&&typeof i!=\"symbol\"&&typeof i!=\"boolean\"?l.type=i:l.removeAttribute(\"type\"),t!=null?i===\"number\"?(t===0&&l.value===\"\"||l.value!=t)&&(l.value=\"\"+Yl(t)):l.value!==\"\"+Yl(t)&&(l.value=\"\"+Yl(t)):i!==\"submit\"&&i!==\"reset\"||l.removeAttribute(\"value\"),t!=null?$i(l,i,Yl(t)):u!=null?$i(l,i,Yl(u)):a!=null&&l.removeAttribute(\"value\"),e==null&&n!=null&&(l.defaultChecked=!!n),e!=null&&(l.checked=e&&typeof e!=\"function\"&&typeof e!=\"symbol\"),c!=null&&typeof c!=\"function\"&&typeof c!=\"symbol\"&&typeof c!=\"boolean\"?l.name=\"\"+Yl(c):l.removeAttribute(\"name\")}function uy(l,t,u,a,e,n,i,c){if(n!=null&&typeof n!=\"function\"&&typeof n!=\"symbol\"&&typeof n!=\"boolean\"&&(l.type=n),t!=null||u!=null){if(!(n!==\"submit\"&&n!==\"reset\"||t!=null)){wi(l);return}u=u!=null?\"\"+Yl(u):\"\",t=t!=null?\"\"+Yl(t):u,c||t===l.value||(l.value=t),l.defaultValue=t}a=a??e,a=typeof a!=\"function\"&&typeof a!=\"symbol\"&&!!a,l.checked=c?l.checked:!!a,l.defaultChecked=!!a,i!=null&&typeof i!=\"function\"&&typeof i!=\"symbol\"&&typeof i!=\"boolean\"&&(l.name=i),wi(l)}function $i(l,t,u){t===\"number\"&&ln(l.ownerDocument)===l||l.defaultValue===\"\"+u||(l.defaultValue=\"\"+u)}function ju(l,t,u,a){if(l=l.options,t){t={};for(var e=0;e\"u\"||typeof window.document>\"u\"||typeof window.document.createElement>\"u\"),ki=!1;if(vt)try{Tu={},Object.defineProperty(Tu,\"passive\",{get:function(){ki=!0}}),window.addEventListener(\"test\",Tu,Tu),window.removeEventListener(\"test\",Tu,Tu)}catch{ki=!1}var Tu,Ct=null,Zc=null,Ge=null;function cy(){if(Ge)return Ge;var l,t=Zc,u=t.length,a,e=\"value\"in Ct?Ct.value:Ct.textContent,n=e.length;for(l=0;l=Ma),_0=\" \",O0=!1;function oy(l,t){switch(l){case\"keyup\":return yd.indexOf(t.keyCode)!==-1;case\"keydown\":return t.keyCode!==229;case\"keypress\":case\"mousedown\":case\"focusout\":return!0;default:return!1}}function yy(l){return l=l.detail,typeof l==\"object\"&&\"data\"in l?l.data:null}var Hu=!1;function md(l,t){switch(l){case\"compositionend\":return yy(t);case\"keypress\":return t.which!==32?null:(O0=!0,_0);case\"textInput\":return l=t.data,l===_0&&O0?null:l;default:return null}}function dd(l,t){if(Hu)return l===\"compositionend\"||!Vc&&oy(l,t)?(l=cy(),Ge=Zc=Ct=null,Hu=!1,l):null;switch(l){case\"paste\":return null;case\"keypress\":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:u,offset:t-l};l=a}l:{for(;u;){if(u.nextSibling){u=u.nextSibling;break l}u=u.parentNode}u=void 0}u=N0(u)}}function hy(l,t){return l&&t?l===t?!0:l&&l.nodeType===3?!1:t&&t.nodeType===3?hy(l,t.parentNode):\"contains\"in l?l.contains(t):l.compareDocumentPosition?!!(l.compareDocumentPosition(t)&16):!1:!1}function vy(l){l=l!=null&&l.ownerDocument!=null&&l.ownerDocument.defaultView!=null?l.ownerDocument.defaultView:window;for(var t=ln(l.document);t instanceof l.HTMLIFrameElement;){try{var u=typeof t.contentWindow.location.href==\"string\"}catch{u=!1}if(u)l=t.contentWindow;else break;t=ln(l.document)}return t}function Lc(l){var t=l&&l.nodeName&&l.nodeName.toLowerCase();return t&&(t===\"input\"&&(l.type===\"text\"||l.type===\"search\"||l.type===\"tel\"||l.type===\"url\"||l.type===\"password\")||t===\"textarea\"||l.contentEditable===\"true\")}var zd=vt&&\"documentMode\"in document&&11>=document.documentMode,Cu=null,Ii=null,Ua=null,Pi=!1;function C0(l,t,u){var a=u.window===u?u.document:u.nodeType===9?u:u.ownerDocument;Pi||Cu==null||Cu!==ln(a)||(a=Cu,\"selectionStart\"in a&&Lc(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Ua&&Va(Ua,a)||(Ua=a,a=bn(Ii,\"onSelect\"),0>=i,e-=i,$l=1<<32-Nl(t)+e|u<O?(U=E,E=null):U=E.sibling;var B=d(y,E,m[O],S);if(B===null){E===null&&(E=U);break}l&&E&&B.alternate===null&&t(y,E),o=n(B,o,O),C===null?z=B:C.sibling=B,C=B,E=U}if(O===m.length)return u(y,E),H&&ct(y,O),z;if(E===null){for(;OO?(U=E,E=null):U=E.sibling;var zt=d(y,E,B.value,S);if(zt===null){E===null&&(E=U);break}l&&E&&zt.alternate===null&&t(y,E),o=n(zt,o,O),C===null?z=zt:C.sibling=zt,C=zt,E=U}if(B.done)return u(y,E),H&&ct(y,O),z;if(E===null){for(;!B.done;O++,B=m.next())B=g(y,B.value,S),B!==null&&(o=n(B,o,O),C===null?z=B:C.sibling=B,C=B);return H&&ct(y,O),z}for(E=a(E);!B.done;O++,B=m.next())B=h(E,y,O,B.value,S),B!==null&&(l&&B.alternate!==null&&E.delete(B.key===null?O:B.key),o=n(B,o,O),C===null?z=B:C.sibling=B,C=B);return l&&E.forEach(function(Z1){return t(y,Z1)}),H&&ct(y,O),z}function X(y,o,m,S){if(typeof m==\"object\"&&m!==null&&m.type===Mu&&m.key===null&&(m=m.props.children),typeof m==\"object\"&&m!==null){switch(m.$$typeof){case ge:l:{for(var z=m.key;o!==null;){if(o.key===z){if(z=m.type,z===Mu){if(o.tag===7){u(y,o.sibling),S=e(o,m.props.children),S.return=y,y=S;break l}}else if(o.elementType===z||typeof z==\"object\"&&z!==null&&z.$$typeof===_t&&tu(z)===o.type){u(y,o.sibling),S=e(o,m.props),ga(S,m),S.return=y,y=S;break l}u(y,o);break}else t(y,o);o=o.sibling}m.type===Mu?(S=eu(m.props.children,y.mode,S,m.key),S.return=y,y=S):(S=Qe(m.type,m.key,m.props,null,y.mode,S),ga(S,m),S.return=y,y=S)}return i(y);case Ta:l:{for(z=m.key;o!==null;){if(o.key===z)if(o.tag===4&&o.stateNode.containerInfo===m.containerInfo&&o.stateNode.implementation===m.implementation){u(y,o.sibling),S=e(o,m.children||[]),S.return=y,y=S;break l}else{u(y,o);break}else t(y,o);o=o.sibling}S=gi(m,y.mode,S),S.return=y,y=S}return i(y);case _t:return m=tu(m),X(y,o,m,S)}if(Aa(m))return b(y,o,m,S);if(va(m)){if(z=va(m),typeof z!=\"function\")throw Error(r(150));return m=z.call(m),T(y,o,m,S)}if(typeof m.then==\"function\")return X(y,o,Oe(m),S);if(m.$$typeof===ot)return X(y,o,_e(y,m),S);Me(y,m)}return typeof m==\"string\"&&m!==\"\"||typeof m==\"number\"||typeof m==\"bigint\"?(m=\"\"+m,o!==null&&o.tag===6?(u(y,o.sibling),S=e(o,m),S.return=y,y=S):(u(y,o),S=Si(m,y.mode,S),S.return=y,y=S),i(y)):u(y,o)}return function(y,o,m,S){try{Ja=0;var z=X(y,o,m,S);return Vu=null,z}catch(E){if(E===ia||E===Cn)throw E;var C=Ol(29,E,null,y.mode);return C.lanes=S,C.return=y,C}}}var yu=Ny(!0),Hy=Ny(!1),Ot=!1;function Pc(l){l.updateQueue={baseState:l.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function ic(l,t){l=l.updateQueue,t.updateQueue===l&&(t.updateQueue={baseState:l.baseState,firstBaseUpdate:l.firstBaseUpdate,lastBaseUpdate:l.lastBaseUpdate,shared:l.shared,callbacks:null})}function Xt(l){return{lane:l,tag:0,payload:null,callback:null,next:null}}function Qt(l,t,u){var a=l.updateQueue;if(a===null)return null;if(a=a.shared,(q&2)!==0){var e=a.pending;return e===null?t.next=t:(t.next=e.next,e.next=t),a.pending=t,t=un(l),Ty(l,null,u),t}return Hn(l,a,t,u),un(l)}function Ha(l,t,u){if(t=t.updateQueue,t!==null&&(t=t.shared,(u&4194048)!==0)){var a=t.lanes;a&=l.pendingLanes,u|=a,t.lanes=u,$o(l,u)}}function bi(l,t){var u=l.updateQueue,a=l.alternate;if(a!==null&&(a=a.updateQueue,u===a)){var e=null,n=null;if(u=u.firstBaseUpdate,u!==null){do{var i={lane:u.lane,tag:u.tag,payload:u.payload,callback:null,next:null};n===null?e=n=i:n=n.next=i,u=u.next}while(u!==null);n===null?e=n=t:n=n.next=t}else e=n=t;u={baseState:a.baseState,firstBaseUpdate:e,lastBaseUpdate:n,shared:a.shared,callbacks:a.callbacks},l.updateQueue=u;return}l=u.lastBaseUpdate,l===null?u.firstBaseUpdate=t:l.next=t,u.lastBaseUpdate=t}var cc=!1;function Ca(){if(cc){var l=xu;if(l!==null)throw l}}function Ba(l,t,u,a){cc=!1;var e=l.updateQueue;Ot=!1;var n=e.firstBaseUpdate,i=e.lastBaseUpdate,c=e.shared.pending;if(c!==null){e.shared.pending=null;var f=c,s=f.next;f.next=null,i===null?n=s:i.next=s,i=f;var v=l.alternate;v!==null&&(v=v.updateQueue,c=v.lastBaseUpdate,c!==i&&(c===null?v.firstBaseUpdate=s:c.next=s,v.lastBaseUpdate=f))}if(n!==null){var g=e.baseState;i=0,v=s=f=null,c=n;do{var d=c.lane&-536870913,h=d!==c.lane;if(h?(N&d)===d:(a&d)===d){d!==0&&d===$u&&(cc=!0),v!==null&&(v=v.next={lane:0,tag:c.tag,payload:c.payload,callback:null,next:null});l:{var b=l,T=c;d=t;var X=u;switch(T.tag){case 1:if(b=T.payload,typeof b==\"function\"){g=b.call(X,g,d);break l}g=b;break l;case 3:b.flags=b.flags&-65537|128;case 0:if(b=T.payload,d=typeof b==\"function\"?b.call(X,g,d):b,d==null)break l;g=J({},g,d);break l;case 2:Ot=!0}}d=c.callback,d!==null&&(l.flags|=64,h&&(l.flags|=8192),h=e.callbacks,h===null?e.callbacks=[d]:h.push(d))}else h={lane:d,tag:c.tag,payload:c.payload,callback:c.callback,next:null},v===null?(s=v=h,f=g):v=v.next=h,i|=d;if(c=c.next,c===null){if(c=e.shared.pending,c===null)break;h=c,c=h.next,h.next=null,e.lastBaseUpdate=h,e.shared.pending=null}}while(!0);v===null&&(f=g),e.baseState=f,e.firstBaseUpdate=s,e.lastBaseUpdate=v,n===null&&(e.shared.lanes=0),Wt|=i,l.lanes=i,l.memoizedState=g}}function Cy(l,t){if(typeof l!=\"function\")throw Error(r(191,l));l.call(t)}function By(l,t){var u=l.callbacks;if(u!==null)for(l.callbacks=null,l=0;ln?n:8;var i=A.T,c={};A.T=c,df(l,!1,t,u);try{var f=e(),s=A.S;if(s!==null&&s(c,f),f!==null&&typeof f==\"object\"&&typeof f.then==\"function\"){var v=Nd(f,a);qa(l,t,v,Hl(l))}else qa(l,t,a,Hl(l))}catch(g){qa(l,t,{then:function(){},status:\"rejected\",reason:g},Hl())}finally{R.p=n,i!==null&&c.types!==null&&(i.types=c.types),A.T=i}}function Yd(){}function mc(l,t,u,a){if(l.tag!==5)throw Error(r(476));var e=es(l).queue;as(l,e,t,au,u===null?Yd:function(){return ns(l),u(a)})}function es(l){var t=l.memoizedState;if(t!==null)return t;t={memoizedState:au,baseState:au,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:gt,lastRenderedState:au},next:null};var u={};return t.next={memoizedState:u,baseState:u,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:gt,lastRenderedState:u},next:null},l.memoizedState=t,l=l.alternate,l!==null&&(l.memoizedState=t),t}function ns(l){var t=es(l);t.next===null&&(t=l.alternate.memoizedState),qa(l,t.next.queue,{},Hl())}function mf(){return sl(ka)}function is(){return I().memoizedState}function cs(){return I().memoizedState}function Gd(l){for(var t=l.return;t!==null;){switch(t.tag){case 24:case 3:var u=Hl();l=Xt(u);var a=Qt(t,l,u);a!==null&&(zl(a,t,u),Ha(a,t,u)),t={cache:Fc()},l.payload=t;return}t=t.return}}function Xd(l,t,u){var a=Hl();u={lane:a,revertLane:0,gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},Yn(l)?os(t,u):(u=Jc(l,t,u,a),u!==null&&(zl(u,l,a),ys(u,t,a)))}function fs(l,t,u){var a=Hl();qa(l,t,u,a)}function qa(l,t,u,a){var e={lane:a,revertLane:0,gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null};if(Yn(l))os(t,e);else{var n=l.alternate;if(l.lanes===0&&(n===null||n.lanes===0)&&(n=t.lastRenderedReducer,n!==null))try{var i=t.lastRenderedState,c=n(i,u);if(e.hasEagerState=!0,e.eagerState=c,Cl(c,i))return Hn(l,t,e,0),Z===null&&Nn(),!1}catch{}if(u=Jc(l,t,e,a),u!==null)return zl(u,l,a),ys(u,t,a),!0}return!1}function df(l,t,u,a){if(a={lane:2,revertLane:Tf(),gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},Yn(l)){if(t)throw Error(r(479))}else t=Jc(l,u,a,2),t!==null&&zl(t,l,2)}function Yn(l){var t=l.alternate;return l===_||t!==null&&t===_}function os(l,t){Lu=on=!0;var u=l.pending;u===null?t.next=t:(t.next=u.next,u.next=t),l.pending=t}function ys(l,t,u){if((u&4194048)!==0){var a=t.lanes;a&=l.pendingLanes,u|=a,t.lanes=u,$o(l,u)}}var Wa={readContext:sl,use:qn,useCallback:$,useContext:$,useEffect:$,useImperativeHandle:$,useLayoutEffect:$,useInsertionEffect:$,useMemo:$,useReducer:$,useRef:$,useState:$,useDebugValue:$,useDeferredValue:$,useTransition:$,useSyncExternalStore:$,useId:$,useHostTransitionStatus:$,useFormState:$,useActionState:$,useOptimistic:$,useMemoCache:$,useCacheRefresh:$};Wa.useEffectEvent=$;var ss={readContext:sl,use:qn,useCallback:function(l,t){return Sl().memoizedState=[l,t===void 0?null:t],l},useContext:sl,useEffect:w0,useImperativeHandle:function(l,t,u){u=u!=null?u.concat([l]):null,xe(4194308,4,Iy.bind(null,t,l),u)},useLayoutEffect:function(l,t){return xe(4194308,4,l,t)},useInsertionEffect:function(l,t){xe(4,2,l,t)},useMemo:function(l,t){var u=Sl();t=t===void 0?null:t;var a=l();if(su){Ht(!0);try{l()}finally{Ht(!1)}}return u.memoizedState=[a,t],a},useReducer:function(l,t,u){var a=Sl();if(u!==void 0){var e=u(t);if(su){Ht(!0);try{u(t)}finally{Ht(!1)}}}else e=t;return a.memoizedState=a.baseState=e,l={pending:null,lanes:0,dispatch:null,lastRenderedReducer:l,lastRenderedState:e},a.queue=l,l=l.dispatch=Xd.bind(null,_,l),[a.memoizedState,l]},useRef:function(l){var t=Sl();return l={current:l},t.memoizedState=l},useState:function(l){l=yc(l);var t=l.queue,u=fs.bind(null,_,t);return t.dispatch=u,[l.memoizedState,u]},useDebugValue:yf,useDeferredValue:function(l,t){var u=Sl();return sf(u,l,t)},useTransition:function(){var l=yc(!1);return l=as.bind(null,_,l.queue,!0,!1),Sl().memoizedState=l,[!1,l]},useSyncExternalStore:function(l,t,u){var a=_,e=Sl();if(H){if(u===void 0)throw Error(r(407));u=u()}else{if(u=t(),Z===null)throw Error(r(349));(N&127)!==0||Xy(a,t,u)}e.memoizedState=u;var n={value:u,getSnapshot:t};return e.queue=n,w0(jy.bind(null,a,n,l),[l]),a.flags|=2048,ku(9,{destroy:void 0},Qy.bind(null,a,n,u,t),null),u},useId:function(){var l=Sl(),t=Z.identifierPrefix;if(H){var u=Fl,a=$l;u=(a&~(1<<32-Nl(a)-1)).toString(32)+u,t=\"_\"+t+\"R_\"+u,u=yn++,0<\\/script>\",n=n.removeChild(n.firstChild);break;case\"select\":n=typeof a.is==\"string\"?i.createElement(\"select\",{is:a.is}):i.createElement(\"select\"),a.multiple?n.multiple=!0:a.size&&(n.size=a.size);break;default:n=typeof a.is==\"string\"?i.createElement(e,{is:a.is}):i.createElement(e)}}n[ol]=t,n[Tl]=a;l:for(i=t.child;i!==null;){if(i.tag===5||i.tag===6)n.appendChild(i.stateNode);else if(i.tag!==4&&i.tag!==27&&i.child!==null){i.child.return=i,i=i.child;continue}if(i===t)break l;for(;i.sibling===null;){if(i.return===null||i.return===t)break l;i=i.return}i.sibling.return=i.return,i=i.sibling}t.stateNode=n;l:switch(ml(n,e,a),e){case\"button\":case\"input\":case\"select\":case\"textarea\":a=!!a.autoFocus;break l;case\"img\":a=!0;break l;default:a=!1}a&&at(t)}}return L(t),Mi(t,t.type,l===null?null:l.memoizedProps,t.pendingProps,u),null;case 6:if(l&&t.stateNode!=null)l.memoizedProps!==a&&at(t);else{if(typeof a!=\"string\"&&t.stateNode===null)throw Error(r(166));if(l=Yt.current,Au(t)){if(l=t.stateNode,u=t.memoizedProps,a=null,e=yl,e!==null)switch(e.tag){case 27:case 5:a=e.memoizedProps}l[ol]=t,l=!!(l.nodeValue===u||a!==null&&a.suppressHydrationWarning===!0||f1(l.nodeValue,u)),l||Jt(t,!0)}else l=En(l).createTextNode(a),l[ol]=t,t.stateNode=l}return L(t),null;case 31:if(u=t.memoizedState,l===null||l.memoizedState!==null){if(a=Au(t),u!==null){if(l===null){if(!a)throw Error(r(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(r(557));l[ol]=t}else fu(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;L(t),l=!1}else u=ri(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=u),l=!0;if(!l)return t.flags&256?(_l(t),t):(_l(t),null);if((t.flags&128)!==0)throw Error(r(558))}return L(t),null;case 13:if(a=t.memoizedState,l===null||l.memoizedState!==null&&l.memoizedState.dehydrated!==null){if(e=Au(t),a!==null&&a.dehydrated!==null){if(l===null){if(!e)throw Error(r(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(r(317));e[ol]=t}else fu(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;L(t),e=!1}else e=ri(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=e),e=!0;if(!e)return t.flags&256?(_l(t),t):(_l(t),null)}return _l(t),(t.flags&128)!==0?(t.lanes=u,t):(u=a!==null,l=l!==null&&l.memoizedState!==null,u&&(a=t.child,e=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(e=a.alternate.memoizedState.cachePool.pool),n=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(n=a.memoizedState.cachePool.pool),n!==e&&(a.flags|=2048)),u!==l&&u&&(t.child.flags|=8192),De(t,t.updateQueue),L(t),null);case 4:return Ju(),l===null&&Af(t.stateNode.containerInfo),L(t),null;case 10:return dt(t.type),L(t),null;case 19:if(cl(k),a=t.memoizedState,a===null)return L(t),null;if(e=(t.flags&128)!==0,n=a.rendering,n===null)if(e)ra(a,!1);else{if(F!==0||l!==null&&(l.flags&128)!==0)for(l=t.child;l!==null;){if(n=fn(l),n!==null){for(t.flags|=128,ra(a,!1),l=n.updateQueue,t.updateQueue=l,De(t,l),t.subtreeFlags=0,l=u,u=t.child;u!==null;)Ay(u,l),u=u.sibling;return x(k,k.current&1|2),H&&ct(t,a.treeForkCount),t.child}l=l.sibling}a.tail!==null&&Dl()>hn&&(t.flags|=128,e=!0,ra(a,!1),t.lanes=4194304)}else{if(!e)if(l=fn(n),l!==null){if(t.flags|=128,e=!0,l=l.updateQueue,t.updateQueue=l,De(t,l),ra(a,!0),a.tail===null&&a.tailMode===\"hidden\"&&!n.alternate&&!H)return L(t),null}else 2*Dl()-a.renderingStartTime>hn&&u!==536870912&&(t.flags|=128,e=!0,ra(a,!1),t.lanes=4194304);a.isBackwards?(n.sibling=t.child,t.child=n):(l=a.last,l!==null?l.sibling=n:t.child=n,a.last=n)}return a.tail!==null?(l=a.tail,a.rendering=l,a.tail=l.sibling,a.renderingStartTime=Dl(),l.sibling=null,u=k.current,x(k,e?u&1|2:u&1),H&&ct(t,a.treeForkCount),l):(L(t),null);case 22:case 23:return _l(t),lf(),a=t.memoizedState!==null,l!==null?l.memoizedState!==null!==a&&(t.flags|=8192):a&&(t.flags|=8192),a?(u&536870912)!==0&&(t.flags&128)===0&&(L(t),t.subtreeFlags&6&&(t.flags|=8192)):L(t),u=t.updateQueue,u!==null&&De(t,u.retryQueue),u=null,l!==null&&l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(u=l.memoizedState.cachePool.pool),a=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(a=t.memoizedState.cachePool.pool),a!==u&&(t.flags|=2048),l!==null&&cl(nu),null;case 24:return u=null,l!==null&&(u=l.memoizedState.cache),t.memoizedState.cache!==u&&(t.flags|=2048),dt(tl),L(t),null;case 25:return null;case 30:return null}throw Error(r(156,t.tag))}function Vd(l,t){switch($c(t),t.tag){case 1:return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 3:return dt(tl),Ju(),l=t.flags,(l&65536)!==0&&(l&128)===0?(t.flags=l&-65537|128,t):null;case 26:case 27:case 5:return Ie(t),null;case 31:if(t.memoizedState!==null){if(_l(t),t.alternate===null)throw Error(r(340));fu()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 13:if(_l(t),l=t.memoizedState,l!==null&&l.dehydrated!==null){if(t.alternate===null)throw Error(r(340));fu()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 19:return cl(k),null;case 4:return Ju(),null;case 10:return dt(t.type),null;case 22:case 23:return _l(t),lf(),l!==null&&cl(nu),l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 24:return dt(tl),null;case 25:return null;default:return null}}function As(l,t){switch($c(t),t.tag){case 3:dt(tl),Ju();break;case 26:case 27:case 5:Ie(t);break;case 4:Ju();break;case 31:t.memoizedState!==null&&_l(t);break;case 13:_l(t);break;case 19:cl(k);break;case 10:dt(t.type);break;case 22:case 23:_l(t),lf(),l!==null&&cl(nu);break;case 24:dt(tl)}}function fe(l,t){try{var u=t.updateQueue,a=u!==null?u.lastEffect:null;if(a!==null){var e=a.next;u=e;do{if((u.tag&l)===l){a=void 0;var n=u.create,i=u.inst;a=n(),i.destroy=a}u=u.next}while(u!==e)}}catch(c){G(t,t.return,c)}}function wt(l,t,u){try{var a=t.updateQueue,e=a!==null?a.lastEffect:null;if(e!==null){var n=e.next;a=n;do{if((a.tag&l)===l){var i=a.inst,c=i.destroy;if(c!==void 0){i.destroy=void 0,e=t;var f=u,s=c;try{s()}catch(v){G(e,f,v)}}}a=a.next}while(a!==n)}}catch(v){G(t,t.return,v)}}function ps(l){var t=l.updateQueue;if(t!==null){var u=l.stateNode;try{By(t,u)}catch(a){G(l,l.return,a)}}}function _s(l,t,u){u.props=mu(l.type,l.memoizedProps),u.state=l.memoizedState;try{u.componentWillUnmount()}catch(a){G(l,t,a)}}function Ra(l,t){try{var u=l.ref;if(u!==null){switch(l.tag){case 26:case 27:case 5:var a=l.stateNode;break;case 30:a=l.stateNode;break;default:a=l.stateNode}typeof u==\"function\"?l.refCleanup=u(a):u.current=a}}catch(e){G(l,t,e)}}function kl(l,t){var u=l.ref,a=l.refCleanup;if(u!==null)if(typeof a==\"function\")try{a()}catch(e){G(l,t,e)}finally{l.refCleanup=null,l=l.alternate,l!=null&&(l.refCleanup=null)}else if(typeof u==\"function\")try{u(null)}catch(e){G(l,t,e)}else u.current=null}function Os(l){var t=l.type,u=l.memoizedProps,a=l.stateNode;try{l:switch(t){case\"button\":case\"input\":case\"select\":case\"textarea\":u.autoFocus&&a.focus();break l;case\"img\":u.src?a.src=u.src:u.srcSet&&(a.srcset=u.srcSet)}}catch(e){G(l,l.return,e)}}function Di(l,t,u){try{var a=l.stateNode;oh(a,l.type,u,t),a[Tl]=t}catch(e){G(l,l.return,e)}}function Ms(l){return l.tag===5||l.tag===3||l.tag===26||l.tag===27&&Ft(l.type)||l.tag===4}function Ui(l){l:for(;;){for(;l.sibling===null;){if(l.return===null||Ms(l.return))return null;l=l.return}for(l.sibling.return=l.return,l=l.sibling;l.tag!==5&&l.tag!==6&&l.tag!==18;){if(l.tag===27&&Ft(l.type)||l.flags&2||l.child===null||l.tag===4)continue l;l.child.return=l,l=l.child}if(!(l.flags&2))return l.stateNode}}function gc(l,t,u){var a=l.tag;if(a===5||a===6)l=l.stateNode,t?(u.nodeType===9?u.body:u.nodeName===\"HTML\"?u.ownerDocument.body:u).insertBefore(l,t):(t=u.nodeType===9?u.body:u.nodeName===\"HTML\"?u.ownerDocument.body:u,t.appendChild(l),u=u._reactRootContainer,u!=null||t.onclick!==null||(t.onclick=yt));else if(a!==4&&(a===27&&Ft(l.type)&&(u=l.stateNode,t=null),l=l.child,l!==null))for(gc(l,t,u),l=l.sibling;l!==null;)gc(l,t,u),l=l.sibling}function dn(l,t,u){var a=l.tag;if(a===5||a===6)l=l.stateNode,t?u.insertBefore(l,t):u.appendChild(l);else if(a!==4&&(a===27&&Ft(l.type)&&(u=l.stateNode),l=l.child,l!==null))for(dn(l,t,u),l=l.sibling;l!==null;)dn(l,t,u),l=l.sibling}function Ds(l){var t=l.stateNode,u=l.memoizedProps;try{for(var a=l.type,e=t.attributes;e.length;)t.removeAttributeNode(e[0]);ml(t,a,u),t[ol]=l,t[Tl]=u}catch(n){G(l,l.return,n)}}var ft=!1,ll=!1,Ni=!1,io=typeof WeakSet==\"function\"?WeakSet:Set,nl=null;function Ld(l,t){if(l=l.containerInfo,pc=pn,l=vy(l),Lc(l)){if(\"selectionStart\"in l)var u={start:l.selectionStart,end:l.selectionEnd};else l:{u=(u=l.ownerDocument)&&u.defaultView||window;var a=u.getSelection&&u.getSelection();if(a&&a.rangeCount!==0){u=a.anchorNode;var e=a.anchorOffset,n=a.focusNode;a=a.focusOffset;try{u.nodeType,n.nodeType}catch{u=null;break l}var i=0,c=-1,f=-1,s=0,v=0,g=l,d=null;t:for(;;){for(var h;g!==u||e!==0&&g.nodeType!==3||(c=i+e),g!==n||a!==0&&g.nodeType!==3||(f=i+a),g.nodeType===3&&(i+=g.nodeValue.length),(h=g.firstChild)!==null;)d=g,g=h;for(;;){if(g===l)break t;if(d===u&&++s===e&&(c=i),d===n&&++v===a&&(f=i),(h=g.nextSibling)!==null)break;g=d,d=g.parentNode}g=h}u=c===-1||f===-1?null:{start:c,end:f}}else u=null}u=u||{start:0,end:0}}else u=null;for(_c={focusedElem:l,selectionRange:u},pn=!1,nl=t;nl!==null;)if(t=nl,l=t.child,(t.subtreeFlags&1028)!==0&&l!==null)l.return=t,nl=l;else for(;nl!==null;){switch(t=nl,n=t.alternate,l=t.flags,t.tag){case 0:if((l&4)!==0&&(l=t.updateQueue,l=l!==null?l.events:null,l!==null))for(u=0;u title\"))),ml(n,a,u),n[ol]=l,il(n),a=n;break l;case\"link\":var i=Uo(\"link\",\"href\",e).get(a+(u.href||\"\"));if(i){for(var c=0;cX&&(i=X,X=T,T=i);var y=H0(c,T),o=H0(c,X);if(y&&o&&(h.rangeCount!==1||h.anchorNode!==y.node||h.anchorOffset!==y.offset||h.focusNode!==o.node||h.focusOffset!==o.offset)){var m=g.createRange();m.setStart(y.node,y.offset),h.removeAllRanges(),T>X?(h.addRange(m),h.extend(o.node,o.offset)):(m.setEnd(o.node,o.offset),h.addRange(m))}}}}for(g=[],h=c;h=h.parentNode;)h.nodeType===1&&g.push({element:h,left:h.scrollLeft,top:h.scrollTop});for(typeof c.focus==\"function\"&&c.focus(),c=0;cu?32:u,A.T=null,u=Ec,Ec=null;var n=Zt,i=ht;if(al=0,Pu=Zt=null,ht=0,(q&6)!==0)throw Error(r(331));var c=q;if(q|=4,Qs(n.current),Ys(n,n.current,i,u),q=c,oe(0,!1),Ul&&typeof Ul.onPostCommitFiberRoot==\"function\")try{Ul.onPostCommitFiberRoot(te,n)}catch{}return!0}finally{R.p=e,A.T=a,l1(l,t)}}function yo(l,t,u){t=jl(u,t),t=hc(l.stateNode,t,2),l=Qt(l,t,2),l!==null&&(ae(l,2),lt(l))}function G(l,t,u){if(l.tag===3)yo(l,l,u);else for(;t!==null;){if(t.tag===3){yo(t,l,u);break}else if(t.tag===1){var a=t.stateNode;if(typeof t.type.getDerivedStateFromError==\"function\"||typeof a.componentDidCatch==\"function\"&&(jt===null||!jt.has(a))){l=jl(u,l),u=Ss(2),a=Qt(t,u,2),a!==null&&(gs(u,a,t,l),ae(a,2),lt(a));break}}t=t.return}}function Ci(l,t,u){var a=l.pingCache;if(a===null){a=l.pingCache=new wd;var e=new Set;a.set(t,e)}else e=a.get(t),e===void 0&&(e=new Set,a.set(t,e));e.has(u)||(bf=!0,e.add(u),l=Id.bind(null,l,t,u),t.then(l,l))}function Id(l,t,u){var a=l.pingCache;a!==null&&a.delete(t),l.pingedLanes|=l.suspendedLanes&u,l.warmLanes&=~u,Z===l&&(N&u)===u&&(F===4||F===3&&(N&62914560)===N&&300>Dl()-Gn?(q&2)===0&&la(l,0):Ef|=u,Iu===N&&(Iu=0)),lt(l)}function u1(l,t){t===0&&(t=wo()),l=Su(l,t),l!==null&&(ae(l,t),lt(l))}function Pd(l){var t=l.memoizedState,u=0;t!==null&&(u=t.retryLane),u1(l,u)}function lh(l,t){var u=0;switch(l.tag){case 31:case 13:var a=l.stateNode,e=l.memoizedState;e!==null&&(u=e.retryLane);break;case 19:a=l.stateNode;break;case 22:a=l.stateNode._retryCache;break;default:throw Error(r(314))}a!==null&&a.delete(t),u1(l,u)}function th(l,t){return Rc(l,t)}var gn=null,Ou=null,Tc=!1,rn=!1,Bi=!1,Rt=0;function lt(l){l!==Ou&&l.next===null&&(Ou===null?gn=Ou=l:Ou=Ou.next=l),rn=!0,Tc||(Tc=!0,ah())}function oe(l,t){if(!Bi&&rn){Bi=!0;do for(var u=!1,a=gn;a!==null;){if(!t)if(l!==0){var e=a.pendingLanes;if(e===0)var n=0;else{var i=a.suspendedLanes,c=a.pingedLanes;n=(1<<31-Nl(42|l)+1)-1,n&=e&~(i&~c),n=n&201326741?n&201326741|1:n?n|2:0}n!==0&&(u=!0,so(a,n))}else n=N,n=On(a,a===Z?n:0,a.cancelPendingCommit!==null||a.timeoutHandle!==-1),(n&3)===0||ue(a,n)||(u=!0,so(a,n));a=a.next}while(u);Bi=!1}}function uh(){a1()}function a1(){rn=Tc=!1;var l=0;Rt!==0&&sh()&&(l=Rt);for(var t=Dl(),u=null,a=gn;a!==null;){var e=a.next,n=e1(a,t);n===0?(a.next=null,u===null?gn=e:u.next=e,e===null&&(Ou=u)):(u=a,(l!==0||(n&3)!==0)&&(rn=!0)),a=e}al!==0&&al!==5||oe(l,!1),Rt!==0&&(Rt=0)}function e1(l,t){for(var u=l.suspendedLanes,a=l.pingedLanes,e=l.expirationTimes,n=l.pendingLanes&-62914561;0c)break;var v=f.transferSize,g=f.initiatorType;v&&bo(g)&&(f=f.responseEnd,i+=v*(f\"u\"?null:document;function d1(l,t,u){var a=fa;if(a&&typeof t==\"string\"&&t){var e=Ql(t);e='link[rel=\"'+l+'\"][href=\"'+e+'\"]',typeof u==\"string\"&&(e+='[crossorigin=\"'+u+'\"]'),Oo.has(e)||(Oo.add(e),l={rel:l,crossOrigin:u,href:t},a.querySelector(e)===null&&(t=a.createElement(\"link\"),ml(t,\"link\",l),il(t),a.head.appendChild(t)))}}function Eh(l){Et.D(l),d1(\"dns-prefetch\",l,null)}function zh(l,t){Et.C(l,t),d1(\"preconnect\",l,t)}function Th(l,t,u){Et.L(l,t,u);var a=fa;if(a&&l&&t){var e='link[rel=\"preload\"][as=\"'+Ql(t)+'\"]';t===\"image\"&&u&&u.imageSrcSet?(e+='[imagesrcset=\"'+Ql(u.imageSrcSet)+'\"]',typeof u.imageSizes==\"string\"&&(e+='[imagesizes=\"'+Ql(u.imageSizes)+'\"]')):e+='[href=\"'+Ql(l)+'\"]';var n=e;switch(t){case\"style\":n=ta(l);break;case\"script\":n=oa(l)}Ll.has(n)||(l=J({rel:\"preload\",href:t===\"image\"&&u&&u.imageSrcSet?void 0:l,as:t},u),Ll.set(n,l),a.querySelector(e)!==null||t===\"style\"&&a.querySelector(ye(n))||t===\"script\"&&a.querySelector(se(n))||(t=a.createElement(\"link\"),ml(t,\"link\",l),il(t),a.head.appendChild(t)))}}function Ah(l,t){Et.m(l,t);var u=fa;if(u&&l){var a=t&&typeof t.as==\"string\"?t.as:\"script\",e='link[rel=\"modulepreload\"][as=\"'+Ql(a)+'\"][href=\"'+Ql(l)+'\"]',n=e;switch(a){case\"audioworklet\":case\"paintworklet\":case\"serviceworker\":case\"sharedworker\":case\"worker\":case\"script\":n=oa(l)}if(!Ll.has(n)&&(l=J({rel:\"modulepreload\",href:l},t),Ll.set(n,l),u.querySelector(e)===null)){switch(a){case\"audioworklet\":case\"paintworklet\":case\"serviceworker\":case\"sharedworker\":case\"worker\":case\"script\":if(u.querySelector(se(n)))return}a=u.createElement(\"link\"),ml(a,\"link\",l),il(a),u.head.appendChild(a)}}}function ph(l,t,u){Et.S(l,t,u);var a=fa;if(a&&l){var e=Qu(a).hoistableStyles,n=ta(l);t=t||\"default\";var i=e.get(n);if(!i){var c={loading:0,preload:null};if(i=a.querySelector(ye(n)))c.loading=5;else{l=J({rel:\"stylesheet\",href:l,\"data-precedence\":t},u),(u=Ll.get(n))&&pf(l,u);var f=i=a.createElement(\"link\");il(f),ml(f,\"link\",l),f._p=new Promise(function(s,v){f.onload=s,f.onerror=v}),f.addEventListener(\"load\",function(){c.loading|=1}),f.addEventListener(\"error\",function(){c.loading|=2}),c.loading|=4,Je(i,t,a)}i={type:\"stylesheet\",instance:i,count:1,state:c},e.set(n,i)}}}function _h(l,t){Et.X(l,t);var u=fa;if(u&&l){var a=Qu(u).hoistableScripts,e=oa(l),n=a.get(e);n||(n=u.querySelector(se(e)),n||(l=J({src:l,async:!0},t),(t=Ll.get(e))&&_f(l,t),n=u.createElement(\"script\"),il(n),ml(n,\"link\",l),u.head.appendChild(n)),n={type:\"script\",instance:n,count:1,state:null},a.set(e,n))}}function Oh(l,t){Et.M(l,t);var u=fa;if(u&&l){var a=Qu(u).hoistableScripts,e=oa(l),n=a.get(e);n||(n=u.querySelector(se(e)),n||(l=J({src:l,async:!0,type:\"module\"},t),(t=Ll.get(e))&&_f(l,t),n=u.createElement(\"script\"),il(n),ml(n,\"link\",l),u.head.appendChild(n)),n={type:\"script\",instance:n,count:1,state:null},a.set(e,n))}}function Mo(l,t,u,a){var e=(e=Yt.current)?zn(e):null;if(!e)throw Error(r(446));switch(l){case\"meta\":case\"title\":return null;case\"style\":return typeof u.precedence==\"string\"&&typeof u.href==\"string\"?(t=ta(u.href),u=Qu(e).hoistableStyles,a=u.get(t),a||(a={type:\"style\",instance:null,count:0,state:null},u.set(t,a)),a):{type:\"void\",instance:null,count:0,state:null};case\"link\":if(u.rel===\"stylesheet\"&&typeof u.href==\"string\"&&typeof u.precedence==\"string\"){l=ta(u.href);var n=Qu(e).hoistableStyles,i=n.get(l);if(i||(e=e.ownerDocument||e,i={type:\"stylesheet\",instance:null,count:0,state:{loading:0,preload:null}},n.set(l,i),(n=e.querySelector(ye(l)))&&!n._p&&(i.instance=n,i.state.loading=5),Ll.has(l)||(u={rel:\"preload\",as:\"style\",href:u.href,crossOrigin:u.crossOrigin,integrity:u.integrity,media:u.media,hrefLang:u.hrefLang,referrerPolicy:u.referrerPolicy},Ll.set(l,u),n||Mh(e,l,u,i.state))),t&&a===null)throw Error(r(528,\"\"));return i}if(t&&a!==null)throw Error(r(529,\"\"));return null;case\"script\":return t=u.async,u=u.src,typeof u==\"string\"&&t&&typeof t!=\"function\"&&typeof t!=\"symbol\"?(t=oa(u),u=Qu(e).hoistableScripts,a=u.get(t),a||(a={type:\"script\",instance:null,count:0,state:null},u.set(t,a)),a):{type:\"void\",instance:null,count:0,state:null};default:throw Error(r(444,l))}}function ta(l){return'href=\"'+Ql(l)+'\"'}function ye(l){return'link[rel=\"stylesheet\"]['+l+\"]\"}function h1(l){return J({},l,{\"data-precedence\":l.precedence,precedence:null})}function Mh(l,t,u,a){l.querySelector('link[rel=\"preload\"][as=\"style\"]['+t+\"]\")?a.loading=1:(t=l.createElement(\"link\"),a.preload=t,t.addEventListener(\"load\",function(){return a.loading|=1}),t.addEventListener(\"error\",function(){return a.loading|=2}),ml(t,\"link\",u),il(t),l.head.appendChild(t))}function oa(l){return'[src=\"'+Ql(l)+'\"]'}function se(l){return\"script[async]\"+l}function Do(l,t,u){if(t.count++,t.instance===null)switch(t.type){case\"style\":var a=l.querySelector('style[data-href~=\"'+Ql(u.href)+'\"]');if(a)return t.instance=a,il(a),a;var e=J({},u,{\"data-href\":u.href,\"data-precedence\":u.precedence,href:null,precedence:null});return a=(l.ownerDocument||l).createElement(\"style\"),il(a),ml(a,\"style\",e),Je(a,u.precedence,l),t.instance=a;case\"stylesheet\":e=ta(u.href);var n=l.querySelector(ye(e));if(n)return t.state.loading|=4,t.instance=n,il(n),n;a=h1(u),(e=Ll.get(e))&&pf(a,e),n=(l.ownerDocument||l).createElement(\"link\"),il(n);var i=n;return i._p=new Promise(function(c,f){i.onload=c,i.onerror=f}),ml(n,\"link\",a),t.state.loading|=4,Je(n,u.precedence,l),t.instance=n;case\"script\":return n=oa(u.src),(e=l.querySelector(se(n)))?(t.instance=e,il(e),e):(a=u,(e=Ll.get(n))&&(a=J({},u),_f(a,e)),l=l.ownerDocument||l,e=l.createElement(\"script\"),il(e),ml(e,\"link\",a),l.head.appendChild(e),t.instance=e);case\"void\":return null;default:throw Error(r(443,t.type))}else t.type===\"stylesheet\"&&(t.state.loading&4)===0&&(a=t.instance,t.state.loading|=4,Je(a,u.precedence,l));return t.instance}function Je(l,t,u){for(var a=u.querySelectorAll('link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'),e=a.length?a[a.length-1]:null,n=e,i=0;i title\"):null)}function Dh(l,t,u){if(u===1||t.itemProp!=null)return!1;switch(l){case\"meta\":case\"title\":return!0;case\"style\":if(typeof t.precedence!=\"string\"||typeof t.href!=\"string\"||t.href===\"\")break;return!0;case\"link\":if(typeof t.rel!=\"string\"||typeof t.href!=\"string\"||t.href===\"\"||t.onLoad||t.onError)break;return t.rel===\"stylesheet\"?(l=t.disabled,typeof t.precedence==\"string\"&&l==null):!0;case\"script\":if(t.async&&typeof t.async!=\"function\"&&typeof t.async!=\"symbol\"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==\"string\")return!0}return!1}function v1(l){return!(l.type===\"stylesheet\"&&(l.state.loading&3)===0)}function Uh(l,t,u,a){if(u.type===\"stylesheet\"&&(typeof a.media!=\"string\"||matchMedia(a.media).matches!==!1)&&(u.state.loading&4)===0){if(u.instance===null){var e=ta(a.href),n=t.querySelector(ye(e));if(n){t=n._p,t!==null&&typeof t==\"object\"&&typeof t.then==\"function\"&&(l.count++,l=Tn.bind(l),t.then(l,l)),u.state.loading|=4,u.instance=n,il(n);return}n=t.ownerDocument||t,a=h1(a),(e=Ll.get(e))&&pf(a,e),n=n.createElement(\"link\"),il(n);var i=n;i._p=new Promise(function(c,f){i.onload=c,i.onerror=f}),ml(n,\"link\",a),u.instance=n}l.stylesheets===null&&(l.stylesheets=new Map),l.stylesheets.set(u,t),(t=u.state.preload)&&(u.state.loading&3)===0&&(l.count++,u=Tn.bind(l),t.addEventListener(\"load\",u),t.addEventListener(\"error\",u))}}var Gi=0;function Nh(l,t){return l.stylesheets&&l.count===0&&We(l,l.stylesheets),0Gi?50:800)+t);return l.unsuspend=u,function(){l.unsuspend=null,clearTimeout(a),clearTimeout(e)}}:null}function Tn(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)We(this,this.stylesheets);else if(this.unsuspend){var l=this.unsuspend;this.unsuspend=null,l()}}}var An=null;function We(l,t){l.stylesheets=null,l.unsuspend!==null&&(l.count++,An=new Map,t.forEach(Hh,l),An=null,Tn.call(l))}function Hh(l,t){if(!(t.state.loading&4)){var u=An.get(l);if(u)var a=u.get(null);else{u=new Map,An.set(l,u);for(var e=l.querySelectorAll(\"link[data-precedence],style[data-precedence]\"),n=0;n{\"use strict\";function p1(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>\"u\"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=\"function\"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(p1)}catch(l){console.error(l)}}p1(),_1.exports=A1()});var kt=Vn(ya(),1),Q1=Vn(O1(),1);var Nf=Vn(ya(),1),M1=new Set([\"blur\",\"change\",\"click\",\"doubleClick\",\"focus\",\"input\",\"keyDown\",\"keyUp\",\"pointerDown\",\"pointerUp\",\"submit\"]),Qh=new Set([\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"link\",\"meta\",\"param\",\"source\",\"track\",\"wbr\"]),jh=new Set([\"autoFocus\",\"checked\",\"disabled\",\"hidden\",\"multiple\",\"readOnly\",\"required\",\"selected\"]),Zh={class:\"className\",for:\"htmlFor\",tabindex:\"tabIndex\",readonly:\"readOnly\",maxlength:\"maxLength\",autocomplete:\"autoComplete\"};function D1(l){return l===\"input\"?\"onChange\":l===\"doubleClick\"?\"onDoubleClick\":\"on\".concat(l.charAt(0).toUpperCase()).concat(l.slice(1))}function xh(l,t){return l===\"style\"?wh(t):jh.has(l)&&(t===\"true\"||t===\"false\")?t===\"true\":t}function Vh(l){let t={};for(let[u,a]of new FormData(l).entries()){let e=typeof File<\"u\"&&a instanceof File?a.name:a;Object.hasOwn(t,u)?t[u]=Array.isArray(t[u])?[...t[u],e]:[t[u],e]:t[u]=e}return JSON.stringify(t)}function Lh(l,t,u,a){return l===\"input\"||l===\"change\"?t?.type===\"checkbox\"||t?.type===\"radio\"?t.checked?\"true\":\"false\":t&&\"value\"in t?String(t.value):void 0:(l===\"keyDown\"||l===\"keyUp\")&&a.key?a.key:u.value===void 0?void 0:String(u.value)}function Kh(l,t,u){let a=typeof HTMLAnchorElement<\"u\"&&t instanceof HTMLAnchorElement;l===\"click\"&&a&&u.preventDefault()}function U1(l,t,u,a){let e=a.currentTarget,n={kind:l};if(t&&(n.id=String(t)),l===\"submit\")return a.preventDefault(),n.data=Vh(e),n;Kh(l,e,a);let i=e?.name||u.name,c=Lh(l,e,u,a);return i&&(n.name=String(i)),c!==void 0&&(n.value=c),n}function Jh(l,t,u,a){l===\"click\"&&t.id===\"modal-backdrop\"&&u.target!==u.currentTarget||(u.stopPropagation?.(),a(U1(l,t.id,t,u)))}function wh(l){return!l||typeof l!=\"string\"?l:Object.fromEntries(l.split(\";\").map(t=>t.split(\":\")).filter(([t,u])=>t?.trim()&&u!==void 0).map(([t,...u])=>[t.trim().replace(/-([a-z])/g,(a,e)=>e.toUpperCase()),u.join(\":\").trim()]))}function Wh(l){let t={};for(let[u,a]of Object.entries(l)){if(u===\"event\"||u===\"events\"||u===\"dangerouslySetInnerHTML\")continue;let n=Zh[u.toLowerCase()]??u;/^on[A-Z]/.test(n)||(t[n]=xh(n,a))}return t}function $h(l,t,u){let a=t.event;typeof a==\"string\"&&M1.has(a)&&(l[D1(a)]=e=>Jh(a,t,e,u))}function Fh(l,t,u,a){return e=>{let n=U1(l,u.id,u,e);typeof t==\"string\"?n.id=t:t&&typeof t==\"object\"&&Object.assign(n,t),a(n)}}function kh(l,t,u){if(t.events&&typeof t.events==\"object\")for(let[a,e]of Object.entries(t.events))M1.has(a)&&(l[D1(a)]=Fh(a,e,t,u))}function Ih(l,t){let u=Wh(l);return $h(u,l,t),kh(u,l,t),u}function Ph(l,t,u){let a=[];return l.text!==void 0&&l.text!==null&&l.text!==\"\"&&a.push(String(l.text)),Array.isArray(l.children)&&l.children.forEach((e,n)=>{a.push(Hf(e,t,\"\".concat(u,\".\").concat(n)))}),a}function lv(l,t,u){return l.key??t.key??t.id??u}function Hf(l,t,u){if(l==null||l===!1)return null;if(typeof l==\"string\"||typeof l==\"number\")return String(l);if(Array.isArray(l))return l.map((i,c)=>Hf(i,t,\"\".concat(u,\".\").concat(c)));if(typeof l!=\"object\")return null;let a=typeof l.tag==\"string\"&&l.tag?l.tag:\"div\",e=l.props&&typeof l.props==\"object\"?l.props:{},n=Ih(e,t);return n.key=lv(l,e,u),Qh.has(a.toLowerCase())?Nf.default.createElement(a,n):Nf.default.createElement(a,n,...Ph(l,t,String(n.key)))}function N1(l,t){return Hf(l,t,\"root\")}function H1(l){if(!l||typeof l!=\"object\"||Array.isArray(l))throw new Error(\"Osprey render message must be a JSON object\");return{model:typeof l.model==\"string\"?l.model:JSON.stringify(l.model??{}),view:l.view??null,commands:Array.isArray(l.commands)?l.commands:[]}}function C1(l){return l?.kind??l?.type??\"\"}var tv=new TextDecoder(\"utf-8\");function Cf(l){if(!l.memory)throw new Error(\"WASI memory is not attached\");return new DataView(l.memory.buffer)}function q1(l){if(!l.memory)throw new Error(\"WASI memory is not attached\");return new Uint8Array(l.memory.buffer)}function uv(l,t){l.pending&&(t(l.pending),l.pending=\"\")}function av(l,t,u,a,e,n){let i=Cf(l),c=0,f=\"\";for(let s=0;sav(l,t,...u),proc_exit:()=>(t(),0),fd_close:()=>0,fd_seek:()=>0,fd_fdstat_get:()=>0,fd_fdstat_set_flags:()=>0}}function nv(l){return{environ_sizes_get:(...t)=>B1(l,...t),environ_get:()=>0,args_sizes_get:(...t)=>B1(l,...t),args_get:()=>0,clock_time_get:(t,u,a)=>(Cf(l).setBigUint64(a,BigInt(Date.now())*1000000n,!0),0),random_get:(t,u)=>(globalThis.crypto.getRandomValues(q1(l).subarray(t,t+u)),0),sched_yield:()=>0,poll_oneoff:()=>52}}function iv(l){return new Proxy(l,{get(t,u){return t[u]??(()=>52)}})}function R1(l=t=>console.debug(t.trimEnd())){let t={memory:null,pending:\"\"},u=()=>uv(t,l),a={...ev(t,u),...nv(t)};return{imports:iv(a),setMemory(e){t.memory=e},flush:u}}var cv=\"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gICAADYCAEGfhISAABDFgYCAACAgQQRqQZ+EhIAANgIAICAQxYGAgAAgIBDGgYCAAEIIQoEEEMSBgIAAIiFBhICAgAA2AgBB5JWEgAAQxYGAgAAgIUEEakHklYSAADYCACAhEMWBgIAAICEQxoGAgAAgICAhQY2JhIAAICEoAgARgICAgACAgICAACIiICAoAgARgICAgACAgICAACEjQghCgQQQxIGAgAAiJEGjgICAADYCAEHPjISAABDFgYCAACAkQQRqQc+MhIAANgIAICQQxYGAgAAgJBDGgYCAACAkQdGBhIAAICQoAgARgICAgACAgICAACIlQbWChIAAICUoAgARgICAgACAgICAACImQaiAhIAAICYoAgARgICAgACAgICAACInEMeBgIAAQfCbhIAAEMeBgIAAfEIBfBDDgYCAACAnEOSBgIAAISggKCAoEOaBgIAAakEsOwAAQghCgQQQxIGAgAAiKUGjgICAADYCAEHbhoSAABDFgYCAACApQQRqQduGhIAANgIAICkQxYGAgAAgKRDGgYCAACApQeCzhIAAICkoAgARgICAgACAgICAACIqQfKJhIAAICooAgARgICAgACAgICAACIrQfKbhIAAICsoAgARgICAgACAgICAACEsICMgKBDHgYCAACAsEMeBgIAAfEIBfBDDgYCAACAoEOSBgIAAICwQ4YGAgAAiLSAjKAIAEYCAgIAAgICAgAAhLiAOIB8Qx4GAgAAgLhDHgYCAAHxCAXwQw4GAgAAgHxDkgYCAACAuEOGBgIAAIi8gDigCABGAgICAAICAgIAAITAgLxDGgYCAACAuEMaBgIAAIC0QxoGAgAAgLBDGgYCAACArEMaBgIAAICoQxoGAgAAgKRDGgYCAACAoEMaBgIAAICcQxoGAgAAgJhDGgYCAACAlEMaBgIAAICQQxoGAgAAgIxDGgYCAACAiEMaBgIAAICEQxoGAgAAgIBDGgYCAACAfEMaBgIAAIB4QxoGAgAAgHRDGgYCAACAcEMaBgIAAIBsQxoGAgAAgGhDGgYCAACAZEMaBgIAAIBgQxoGAgAAgFxDGgYCAACAWEMaBgIAAIBUQxoGAgAAgFBDGgYCAACATEMaBgIAAIBIQxoGAgAAgERDGgYCAACAQEMaBgIAAIA8QxoGAgAAgAhDGgYCAACAIEMaBgIAAIA4Q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AEGfhISAABDFgYCAACAFQQRqQZ+EhIAANgIAIAUQxYGAgAAgBRDGgYCAAEIIQoEEEMSBgIAAIgdBhICAgAA2AgBB5JWEgAAQxYGAgAAgB0EEakHklYSAADYCACAHEMWBgIAAIAcQxoGAgAAgBSAHQb+ThIAAIAcoAgARgICAgACAgICAACInIAUoAgARgICAgACAgICAACEVQghCgQQQxIGAgAAiCEGDgICAADYCAEGfhISAABDFgYCAACAIQQRqQZ+EhIAANgIAIAgQxYGAgAAgCBDGgYCAACAIQYWdhIAAIAgoAgARgICAgACAgICAACEWQghCgQQQxIGAgAAiDUGFgICAADYCAEGrkISAABDFgYCAACANQQRqQauQhIAANgIAIA0QxYGAgAAgDRDGgYCAAEIIQoEEEMSBgIAAIhJBhICAgAA2AgBB5JWEgAAQxYGAgAAgEkEEakHklYSAADYCACASEMWBgIAAIBIQxoGAgAAgDSASQYiDhIAAIBIoAgARgICAgACAgICAACIvIA0oAgARgICAgACAgICAACIcQdaahIAAIBwoAgARgICAgACAgICAACIeEMeBgIAAQfCbhIAAEMeBgIAAfEIBfBDDgYCAACAeEOSBgIAAIQsgCyALEOaBgIAAakEsOwAAQghCgQQQxIGAgAAiDEGFgICAADYCAEHJm4SAABDFgYCAACAMQQRqQcmbhIAANgIAIAwQxYGAgAAgDBDGgYCAACAMQYWdhIAAIAwoAgARgICAgACAgICAACIgQaC6hIAAICAoAgARgICAgACAgICAACEfIBUgFiALEMeBgIAAIB8Qx4GAgAB8QgF8EMOBgIAAIAsQ5IGAgAAgHxDhgYCAACIxIBYoAgARgICAgACAgICAACIzIBUoAgARgICAgACAgICAACIhEMeBgIAAQfCbhIAAEMeBgIAAfEIBfBDDgYCAACAhEOSBgIAAIQ4gDiAOEOaBgIAAakEsOwAAQghCgQQQxIGAgAAiEUGDgICAADYCAEGGkYSAABDFgYCAACARQQRqQYaRhIAANgIAIBEQxYGAgAAgERDGgYCAAEIIQoEEEMSBgIAAIgRBhICAgAA2AgBB5JWEgAAQxYGAgAAgBEEEakHklYSAADYCACAEEMWBgIAAIAQQxoGAgAAgESAEQfmEhIAAIAQoAgARgICAgACAgICA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xYGAgAAgDhDGgYCAACAOQY6ThIAAIA4oAgARgICAgACAgICAACEJQghCgQQQxIGAgAAiAkGzgICAADYCACAAEMWBgIAAIAJBBGogADYCACACEMWBgIAAIAIQxoGAgAAgCSACQbmUhIAAIAIoAgARgICAgACAgICAACILQYWdhIAAIAsoAgARgICAgACAgICAACIKIAkoAgARgICAgACAgICAACIEIRILIAQQxYGAgAAgEhDGgYCAACAKEMaBgIAAIAsQxoGAgAAgAhDGgYCAACAJEMaBgIAAIA4QxoGAgAAgBxDGgYCAACAGEMaBgIAAIAMQxoGAgAAgBRDGgYCAAEIIQoEEEMSBgIAAIgBBtoCAgAA2AgAgBBDFgYCAACAAQQRqIAQ2AgAgABDFgYCAACAAEMaBgIAAIABBlpqEgAAgACgCABGAgICAAICAgIAAIgUQxYGAgAAgBRDGgYCAACAAEMaBgIAAQQAhCUEAIQpBACELQQAhDEEAIQ1BACEOQQAhF0EAIQBBACEPQQAhEEEAIRFBACEDQQAhEkEAIRNBACEUQQAhFUEAIRYgBSECDAELAkAgA0GNh4SAABDigYCAAA0AQghCgQQQxIGAgAAiDkG3gICAADYCACAFEMWBgIAAIA5BBGogBTYCACAOEMWBgIAAIA4QxoGAgABBACEIQQAhCUEAIQpBACELQQAhBUEAIQRBACEXQQAhAEEAIQ9BACEQQQAhEUEAIQNBACESQQAhE0EAIRRBACEVQQAhFiAOIAYgDigCABGAgICAAICAgIAAIg0gByANKAIAEYCAgIAAgICAgAAiDCECDAELAkAgA0HCjYSAABDigYCAAA0AQghCgQQQxIGAgAAiC0G4gICAADYCACAFEMWBgIAAIAtBBGogBTYCACALEMWBgIAAIAsQxoGAgAAgCyAGIAsoAgARgICAgACAgICAACEKQghCgQQQxIGAgAAiCUGzgICAADYCACAAEMWBgIAAIAlBBGogADYCACAJEMWBgIAAIAkQxoGAgAAgCUHbh4SAACAJKAIAEYCAgIAAgICAgAAiCEHZm4SAACAIKAIAEYCAgIAAgICAgAAhDyABQgA3AwggDyABQQhqEM+BgIAAIRggASkDCCEZQhBCgQgQxIGAgAAiACAZNwIAIABBCGogGEIAUiICOgAAQQAhDEGAxISAAEEAIAIbIgMQxYGAgAAgAEEMaiADNgIAIAAQxoGAgABBACENQQAhDkEAIQVBACEEQQAhF0EAIQBBACEDQQAhEkEAIRNBACEUQQAhFUEAIRYgCkIAIBkgAhsgCigCABGBgICAAICAgIAAIhAgByAQKAIAEYCAgIAAgICAgAAiESECDAELIANB9I6EgAAQ4oGAgAAhAkIIQoEEEMSBgIAAIQMCQCACDQAgA0G5gICAADYCACAFEMWBgIAAIANBBGogBTYCACADEMWBgIAAIAMQxoGAgABCCEKBBBDEgYCAACISQbOAgIAANgIAIAAQxYGAgAAgEkEEaiAANgIAIBIQxYGAgAAgEhDGgYCAAEEAIQhBACEJQQAhCkEAIQtBACEMQQAhDUEAIQ5BACEFQQAhBEEAIRdBACEAQQAhD0EAIRBBACERQQAhFiADIBJBuZSEgAAgEigCABGAgICAAICAgIAAIhNBqoOEgAAgEygCABGAgICAAICAgIAAIhQgAygCABGAgICAAICAgIAAIhUhAgwBCyADQbaAgIAANgIAIAUQxYGAgAAgA0EEaiAFNgIAIAMQxYGAgAAgAxDGgYCAACADQZaahIAAIAMoAgARgICAgACAgICAACICEMWBgIAAIAIQxoGAgAAgAxDGgYCAAEEAIQxBACEIQQAhCUEAIQpBACELQQAhDUEAIQ5BACEFQQAhBEEAIRdBACEAQQAhD0EAIRBBACERQQAhA0EAIRJBACETQQAhFEEAIRUgAiEWCyACEMWBgIAAIBYQxoGAgAAgFRDGgYCAACAUEMaBgIAAIBMQxoGAgAAgEhDGgYCAACADEMaBgIAAIBEQxoGAgAAgEBDGgYCAACAPEMaBgIAAIAgQxoGAgAAgCRDGgYCAACAKEMaBgIAAIAsQxoGAgAAgDBDGgYCAACANEMaBgIAAIA4QxoGAgAAgBRDGgYCAACAEEMaBgIAAIBcQxoGAgAAgABDGgYCAACABQRBqJICAgIAAIAILzAQCCX8BfiAAQQhqKAIAIQIgAEEEaigCACEDQghCgQQQxIGAgAAiAEGIgICAADYCAEHMkYSAABDFgYCAACAAQQRqQcyRhIAANgIAIAAQxYGAgAAgABDGgYCAACAAIAMgACgCABGAgICAAICAgIAAIgQQx4GAgABB8JuEgAAQx4GAgAB8QgF8EMOBgIAAIAQQ5IGAgAAhBSAFIAUQ5oGAgABqQSw7AABCCEKBBBDEgYCAACIDQbqAgIAANgIAQcaDhIAAEMWBgIAAIANBBGpBxoOEgAA2AgAgAxDFgYCAACADEMaBgIAAIAMgAiADKAIAEYCAgIAAgICAgAAhBiAFEMeBgIAAIAYQx4GAgAB8QgF8EMOBgIAAIAUQ5IGAgAAgBhDhgYCAACIHEMeBgIAAQfCbhIAAEMeBgIAAfEIBfBDDgYCAACAHEOSBgIAAIQggCCAIEOaBgIAAakEsOwAAQghCgQQQxIGAgAAiAkG6gICAADYCAEH8iYSAABDFgYCAACACQQRqQfyJhIAANgIAIAIQxYGAgAAgAhDGgYCAACACIAEgAigCABGAgICAAICAgIAAIQEgCBDHgYCAACABEMeBgIAAfEIBfBDDgYCAACAIEOSBgIAAIAEQ4YGAgAAiCRCKgICAACEKIAkQxoGAgAAgARDGgYCAACACEMaBgIAAIAgQxoGAgAAgBxDGgYCAACAGEMaBgIAAIAMQxoGAgAAgBRDGgYCAACAEEMaBgIAAIAAQxoGAgAAgChDSgYCAACELIAoQxoGAgAAgCwuECAERfyAAQQxqKAIAIQIgAEEIaigCACEDIABBBGooAgAhBEIIQoEEEMSBgIAAIgBBiICAgAA2AgBB+JeEgAAQxYGAgAAgAEEEakH4l4SAADYCACAAEMWBgIAAIAAQxoGAgAAgAEHCjYSAACAAKAIAEYCAgIAAgICAgAAiBRDHgYCAAEHwm4SAABDHgYCAAHxCAXwQw4GAgAAgBRDkgYCAACEGIAYgBhDmgYCAAGpBLDsAAEIIQoEEEMSBgIAAIgdBiICAgAA2AgBB5JiEgAAQxYGAgAAgB0EEakHkmISAADYCACAHEMWBgIAAIAcQxoGAgAAgByAEIAcoAgARgICAgACAgICAACEIIAYQx4GAgAAgCBDHgYCAAHxCAXwQw4GAgAAgBhDkgYCAACAIEOGBgIAAIgkQx4GAgABB8JuEgAAQx4GAgAB8QgF8EMOBgIAAIAkQ5IGAgAAhCiAKIAoQ5oGAgABqQSw7AABCCEKBBBDEgYCAACIEQYiAgIAANgIAQeyXhIAAEMWBgIAAIARBBGpB7JeEgAA2AgAgBBDFgYCAACAEEMaBgIAAIAQgAyAEKAIAEYCAgIAAgICAgAAhCyAKEMeBgIAAIAsQx4GAgAB8QgF8EMOBgIAAIAoQ5IGAgAAgCxDhgYCAACIMEMeBgIAAQfCbhIAAEMeBgIAAfEIBfBDDgYCAACAMEOSBgIAAIQ0gDSANEOaBgIAAakEsOwAAQghCgQQQxIGAgAAiA0GIgICAADYCAEGJkYSAABDFgYCAACADQQRqQYmRhIAANgIAIAMQxYGAgAAgAxDGgYCAACADIAIgAygCABGAgICAAICAgIAAIQ4gDRDHgYCAACAOEMeBgIAAfEIBfBDDgYCAACANEOSBgIAAIA4Q4YGAgAAiDxDHgYCAAEHwm4SAABDHgYCAAHxCAXwQw4GAgAAgDxDkgYCAACEQIBAgEBDmgYCAAGpBLDsAAEIIQoEEEMSBgIAAIgJBiICAgAA2AgBBwIKEgAAQxYGAgAAgAkEEakHAgoSAADYCACACEMWBgIAAIAIQxoGAgAAgAiABIAIoAgARgICAgACAgICAACEBIBAQx4GAgAAgARDHgYCAAHxCAXwQw4GAgAAgEBDkgYCAACABEOGBgIAAIhEQioCAgAAiEhDFgYCAACASEMaBgIAAIBEQxoGAgAAgARDGgYCAACACEMaBgIAAIBAQxoGAgAAgDxDGgYCAACAOEMaBgIAAIAMQxoGAgAAgDRDGgYCAACAMEMaBgIAAIAsQxoGAgAAgBBDGgYCAACAKEMaBgIAAIAkQxoGAgAAgCBDGgYCAACAHEMaBgIAAIAYQxoGAgAAgBRDGgYCAACAAEMaBgIAAIBILdgECfyAAQQhqKAIAIQIgAEEEaigCACEDQhBCgRwQxIGAgAAiAEG7gICAADYCACADEMWBgIAAIABBBGogAzYCACACEMWBgIAAIABBCGogAjYCACABEMWBgIAAIABBDGogATYCACAAEMWBgIAAIAAQxoGAgAAgAAtaAQF/IABBBGooAgAhAkIMQoEMEMSBgIAAIgBBvICAgAA2AgAgAhDFgYCAACAAQQRqIAI2AgAgARDFgYCAACAAQQhqIAE2AgAgABDFgYCAACAAEMaBgIAAIAAL7gIBB39CCEKBBBDEgYCAACIBQYiAgIAANgIAQfiXhIAAEMWBgIAAIAFBBGpB+JeEgAA2AgAgARDFgYCAACABEMaBgIAAIAFB4oeEgAAgASgCABGAgICAAICAgIAAIgIQx4GAgABB8JuEgAAQx4GAgAB8QgF8EMOBgIAAIAIQ5IGAgAAhAyADIAMQ5oGAgABqQSw7AABCCEKBBBDEgYCAACIEQYiAgIAANgIAQeSYhIAAEMWBgIAAIARBBGpB5JiEgAA2AgAgBBDFgYCAACAEEMaBgIAAIAQgACAEKAIAEYCAgIAAgICAgAAhACADEMeBgIAAIAAQx4GAgAB8QgF8EMOBgIAAIAMQ5IGAgAAgABDhgYCAACIFEIqAgIAAIgYQjoCAgAAiBxDFgYCAACAHEMaBgIAAIAYQxoGAgAAgBRDGgYCAACAAEMaBgIAAIAQQxoGAgAAgAxDGgYCAACACEMaBgIAAIAEQxoGAgAAgBwu1AwEJfyOAgICAAEEQayIBJICAgIAAQghCgQQQxIGAgAAiAkGIgICAADYCAEH4l4SAABDFgYCAACACQQRqQfiXhIAANgIAIAIQxYGAgAAgAhDGgYCAACACQfCUhIAAIAIoAgARgICAgACAgICAACIDEMeBgIAAQfCbhIAAEMeBgIAAfEIBfBDDgYCAACADEOSBgIAAIQQgBCAEEOaBgIAAakEsOwAAQghCgQQQxIGAgAAiBUGIgICAADYCAEGJkYSAABDFgYCAACAFQQRqQYmRhIAANgIAIAUQxYGAgAAgBRDGgYCAAEKAIBDDgYCAACEGIAEgADYCACAGQbOKhIAAIAEQ3IGAgAAaIAUgBiAFKAIAEYCAgIAAgICAgAAhACAEEMeBgIAAIAAQx4GAgAB8QgF8EMOBgIAAIAQQ5IGAgAAgABDhgYCAACIHEIqAgIAAIggQjoCAgAAiCRDFgYCAACAJEMaBgIAAIAgQxoGAgAAgBxDGgYCAACAAEMaBgIAAIAYQxoGAgAAgBRDGgYCAACAEEMaBgIAAIAMQxoGAgAAgAhDGgYCAACABQRBqJICAgIAAIAkLygEBA38gAEEIaigCACECIABBBGooAgAhA0IIQoEEEMSBgIAAIgBBsoCAgAA2AgAgAxDFgYCAACAAQQRqIAM2AgAgABDFgYCAACAAEMaBgIAAIABBtJqEgAAgACgCABGAgICAAICAgIAAIgMgAiADKAIAEYCAgIAAgICAgAAiAiABIAIoAgARgICAgACAgICAACIEEI6AgIAAIgEQxYGAgAAgARDGgYCAACAEEMaBgIAAIAIQxoGAgAAgAxDGgYCAACAAEMaBgIAAIAELWgEBfyAAQQRqKAIAIQJCDEKBDBDEgYCAACIAQb2AgIAANgIAIAIQxYGAgAAgAEEEaiACNgIAIAEQxYGAgAAgAEEIaiABNgIAIAAQxYGAgAAgABDGgYCAACAAC24BAX8gAEEIaikCACAAQRBqKAIAEMCBgIAAIQBCDEKBChDEgYCAACECIAAQxYGAgAAgAkEIakEANgIAIAJBBGogAEU6AAAgAiAANgIAIAAgASAAGyIBEMWBgIAAIAIQxoGAgAAgABDGgYCAACABC4MBAQJ/IABBBGooAgAiAiABQYWdhIAAEM6BgIAAIQBCDEKBChDEgYCAACEBIAAQxYGAgAAgAUEEaiAARToAACABIAA2AgBBAEHQnoSAACAAGyIDEMWBgIAAIAFBCGogAzYCACAAIAIgABsiAhDFgYCAACABEMaBgIAAIAAQxoGAgAAgAguKAQECfyOAgICAAEEQayICJICAgIAAIAJCADcDCCAAQQRqKAIAIAEgAkEIahDRgYCAACEAIAIpAwghAUIQQoEIEMSBgIAAIgMgATcCACADQQhqIABBAEc6AAAgABDFgYCAACADQQxqIAA2AgAgAxDGgYCAACACQRBqJICAgIAAIABFIAFCUHxCClRxC6YCAQN/AkACQCABIABBBGooAgAiAhDQgYCAAFMNAEEBIQJBACEDQQAhBEEAIQAMAQtCCEKBBBDEgYCAACIAQb6AgIAANgIAIAIQxYGAgAAgAEEEaiACNgIAIAAQxYGAgAAgABDGgYCAAEEAIQMCQCAAIAEgACgCABGBgICAAICAgIAAQQFxDQBBACEEQQAhAgwBC0IIQoEEEMSBgIAAIgRBv4CAgAA2AgAgAhDFgYCAACAEQQRqIAI2AgAgBBDFgYCAACAEEMaBgIAAQhBCgQgQxIGAgAAiAyABQgF8IgE3AgAgA0EMakEANgIAIANBCGpBADoAACAEIAEgBCgCABGBgICAAICAgIAAIQILIAMQxoGAgAAgBBDGgYCAACAAEMaBgIAAIAILsQECAn4BfyAAQQhqKAIAIgAQx4GAgAAhAiAAEMeBgIAAIQMCQAJAIAFBAXFFDQAgAkIAVSADQgRTcSEEIAAQx4GAgAAhAwwBCyACQgNRIQQLQghCgQQQxIGAgAAiAUG/gICAADYCACAAEMWBgIAAIAFBBGogADYCACABEMWBgIAAIAEQxoGAgAAgAUIAIAEoAgARgYCAgACAgICAACEAIAEQxoGAgAAgBCAAIANCAFVxcQvjBAMBfwJ+A38gAEEEaigCACICQfCbhIAAEMmBgIAAIQNCEEKBCBDEgYCAACIAQQhqIANCP4g8AAAgACADQgAgA0IAVRsiBDcCACADQj+Hp0GAn4SAAHEiBRDFgYCAACAAQQxqIAU2AgACQAJAIANCAFMNACACIAQQyoGAgAAhBiAAEMaBgIAAQhBCgQgQxIGAgAAiACAEQgF8IgM3AgBBACEHIABBDGpBADYCACAAQQhqQQA6AAAgAiADEMuBgIAAIQUgABDGgYCAAEIQEMOBgIAAIgBBwICAgAA2AgAgAEEIaiAGrTcDACAAEMWBgIAAIAAQxoGAgAAgACABIAAoAgARgICAgACAgICAACEBQghCgQQQxIGAgAAiAkHBgICAADYCACAFEMWBgIAAIAJBBGogBTYCACACEMWBgIAAIAIQxoGAgAAgASACQQAgAigCABGAgICAAICAgIAAcSEBDAELAkACQCABQQFxRQ0AIAIQx4GAgAAhA0IIQoEEEMSBgIAAIgBBv4CAgAA2AgAgAhDFgYCAACAAQQRqIAI2AgAgABDFgYCAACAAEMaBgIAAIABCACAAKAIAEYGAgIAAgICAgAAhAiAAEMaBgIAAIAIgA0IAVXEhAUEAIQdBACECDAELQhAQw4GAgAAiB0HAgICAADYCACAHQQhqIAKtNwMAIAcQxYGAgAAgBxDGgYCAAEEAIQIgB0EAIAcoAgARgICAgACAgICAACEBC0EAIQBBACEFQQAhBgsgBxDGgYCAACACEMaBgIAAIAAQxoGAgAAgBRDGgYCAACAGEMaBgIAAIAEL4QEDAX8DfgR/I4CAgIAAQRBrIgEkgICAgABCACECIAFCADcDCCAAIAFBCGoQz4GAgAAhAyABKQMIIQRCEEKBCBDEgYCAACIFIAQ3AgAgBUEIaiADQgBSIgY6AABBACEHQYDEhIAAQQAgBhsiCBDFgYCAACAFQQxqIAg2AgACQCAGDQACQCAAEMeBgIAAQgFRDQAgBCECDAELQhBCgQgQxIGAgAAiByAEQgp+IgI3AgAgB0EMakEANgIAIAdBCGpBADoAAAsgBxDGgYCAACAFEMaBgIAAIAFBEGokgICAgAAgAgv9AgUCfwF+AX8CfgN/I4CAgIAAQRBrIgIkgICAgAAgAEEEaigCACEDQghCgQQQxIGAgAAiAEHCgICAADYCACADEMWBgIAAIABBBGogAzYCACAAEMWBgIAAIAAQxoGAgABCACEEIABB8JuEgAAgACgCABGAgICAAICAgIAAIQUgAkIANwMIIAUgAkEIahDPgYCAACEGIAIpAwghB0IQQoEIEMSBgIAAIgMgBzcCACADQQhqIAZCAFIiCDoAAEEAIQlBgMSEgABBACAIGyIKEMWBgIAAIANBDGogCjYCAEEAIQoCQCAIDQBCEEKBCBDEgYCAACIKIAdC5AB+IgQ3AgAgCkEMakEANgIAIApBCGpBADoAACABEM2AgIAAIQdCEEKBCBDEgYCAACIJIAcgBHwiBDcCACAJQQxqQQA2AgAgCUEIakEAOgAACyAJEMaBgIAAIAoQxoGAgAAgAxDGgYCAACAFEMaBgIAAIAAQxoGAgAAgAkEQaiSAgICAACAEC70DAwR/A34CfyAAQQRqKAIAIgAgARDKgYCAACECQhBCgQgQxIGAgAAiAyABQgF8IgE3AgBBACEEIANBDGpBADYCACADQQhqQQA6AAAgACABEMuBgIAAIQAgAxDGgYCAAEIIQoEEEMSBgIAAIgNBwYCAgAA2AgAgAhDFgYCAACADQQRqIAI2AgAgAxDFgYCAACADEMaBgIAAIANBASADKAIAEYCAgIAAgICAgAAhBSAAEMeBgIAAIQYgABDHgYCAACEHIAAQx4GAgAAhCEIIQoEEEMSBgIAAIglBv4CAgAA2AgAgABDFgYCAACAJQQRqIAA2AgAgCRDFgYCAACAJEMaBgIAAQgAhASAJQgAgCSgCABGBgICAAICAgIAAIQogCRDGgYCAACADEMaBgIAAAkAgBUEBcUUNACAGQgFTDQAgB0ICVQ0AIAhCAVMNACAKQQFxRQ0AQghCgQQQxIGAgAAiBEHDgICAADYCACACEMWBgIAAIARBBGogAjYCACAEEMWBgIAAIAQQxoGAgAAgBCAAIAQoAgARgoCAgACAgICAACEBCyAEEMaBgIAAIAAQxoGAgAAgAhDGgYCAACABC5cDBAF+AX8CfgJ/IABB3puEgAAQyYGAgAAhAUIQQoEIEMSBgIAAIgJBCGogAUI/iDwAAEIAIQMgAiABQgAgAUIAVRsiBDcCACABQj+Hp0GAn4SAAHEiBRDFgYCAACACQQxqIAU2AgBCCEKBBBDEgYCAACEFAkACQCABQgBTDQAgBUHEgICAADYCACAAEMWBgIAAIAVBBGogADYCACAFEMWBgIAAIAUQxoGAgABBACEGIAUgBCAFKAIAEYOAgIAAgICAgAAhA0EAIQAMAQsgBUHBgICAADYCACAAEMWBgIAAIAVBBGogADYCACAFEMWBgIAAIAUQxoGAgABBACEGAkAgBUEBIAUoAgARgICAgACAgICAAEEBcUUNAEIIQoEEEMSBgIAAIgZBw4CAgAA2AgAgABDFgYCAACAGQQRqIAA2AgAgBhDFgYCAACAGEMaBgIAAIAZB2ZuEgAAgBigCABGCgICAAICAgIAAIQMLIAUhAEEAIQULIAYQxoGAgAAgABDGgYCAACAFEMaBgIAAIAIQxoGAgAAgAwuTAQICfwF+AkACQCAAEM2BgIAAIgFB+5uEgAAQyIGAgABQRQ0AQQAhAiABIQAMAQsgAUIBEMuBgIAAIgAhAgsgABDFgYCAACACEMaBgIAAIAEQxoGAgABCACEDAkAgAEHum4SAABDIgYCAACAAQfKbhIAAEMiBgIAAhEIAUg0AIAAQ0ICAgAAhAwsgABDGgYCAACADC6IFBQF/An4IfwJ+AX8jgICAgABBIGsiAiSAgICAACAAQQhqKQIAIQMgAEEQaikCACEEQiAQw4GAgAAhBSACIgYgBDcDECAFQYiYhIAAIAZBEGoQ3IGAgAAaQoAgEMOBgIAAIQcgBiAFNgIAIAdBqYiEgAAgBhDcgYCAABogAyAHEMCBgIAAIQBCDEKBChDEgYCAACEIIAAQxYGAgABBACEJIAhBCGpBADYCACAIQQRqIABFOgAAIAggADYCACAAEMaBgIAAIAcQxoGAgAAgBRDGgYCAAAJAAkAgAA0AQQAhAkEAIQpBACELQQAhB0EAIQxBACEFQQAhAAwBCyACQXBqIgUkgICAgAAgBUIANwMAIAAgBRDPgYCAACENIAUpAwAhDkIQQoEIEMSBgIAAIgcgDjcCACAHQQhqIA1CAFIiCToAAEEAIQJBgMSEgABBACAJGyIAEMWBgIAAIAdBDGogADYCAEIQEMOBgIAAIgBBxYCAgAA2AgAgAEEIaiADNwMAIAAQxYGAgAAgABDGgYCAAEIQQoEIEMSBgIAAIgUgBEIBfCIDNwIAIAVBDGpBADYCACAFQQhqQQA6AAAgACADIAAoAgARgYCAgACAgICAACEPAkACQCAJRQ0AQQAhCUEAIQpBACELIAAhDCAPIQAMAQtCEEKBCBDEgYCAACICIA4gAXwiATcCAEEAIQwgAkEMakEANgIAIAJBCGpBADoAACAPIQkgBSEKIAAhC0EAIQVBACEACyAPIAEgDygCABGDgICAAICAgIAAIQELIAAQxoGAgAAgBRDGgYCAACAMEMaBgIAAIAIQxoGAgAAgCRDGgYCAACAKEMaBgIAAIAsQxoGAgAAgBxDGgYCAACAIEMaBgIAAIAZBIGokgICAgAAgAQtHAQF+IABBCGopAgAhAkIYEMOBgIAAIgBBxoCAgAA2AgAgAEEQaiABNwMAIABBCGogAjcDACAAEMWBgIAAIAAQxoGAgAAgAAvnAQMBfgJ/AX4gABC7gYCAACEBQhBCgQgQxIGAgAAiAiABNwIAIAJBDGpBADYCACACQQhqIAFCP4g8AABCEBDDgYCAACIAQcWAgIAANgIAIABBCGogATcDACAAEMWBgIAAIAAQxoGAgAAgAEIAIAAoAgARgYCAgACAgICAACIDQgAgAygCABGDgICAAICAgIAAIQQgAxDGgYCAACAAEMaBgIAAIAEQwoGAgAAhAUIQQoEIEMSBgIAAIgAgATcCACAAQQxqQQA2AgAgAEEIaiABQj+IPAAAIAAQxoGAgAAgAhDGgYCAACAEC+MFBQF/An4GfwJ+An8jgICAgABBIGsiAiSAgICAACAAQQhqKQIAIQMgAEEQaikCACEEQiAQw4GAgAAhBSACIgYgBDcDECAFQYiYhIAAIAZBEGoQ3IGAgAAaQoAgEMOBgIAAIQcgBiAFNgIAIAdB35iEgAAgBhDcgYCAABogAyAHEMCBgIAAIQBCDEKBChDEgYCAACEIIAAQxYGAgABBACEJIAhBCGpBADYCACAIQQRqIABFOgAAIAggADYCACAAEMaBgIAAIAcQxoGAgAAgBRDGgYCAAAJAAkACQAJAAkACQCAADQBCACEEQQAhCkEAIQJBACEFDAELIAJBcGoiBSSAgICAACAFQgA3AwAgACAFEM+BgIAAIQsgBSkDACEMQhBCgQgQxIGAgAAiBSAMNwIAIAVBCGogC0IAUiIAOgAAQQAhCUGAxISAAEEAIAAbIgcQxYGAgAAgBUEMaiAHNgIAIAANAiAMIAFSDQFBACEKQQAhAgtBACEAQQAhB0EAIQ0MAwtCEBDDgYCAACICQceAgIAANgIAIAJBCGogAzcDACACEMWBgIAAIAIQxoGAgABCEEKBCBDEgYCAACIKIARCAXwiBDcCAEEAIQAgCkEMakEANgIAIApBCGpBADoAACACIAQgAigCABGBgICAAICAgIAAIg4hCUEAIQdBACENDAELQhAQw4GAgAAiAEHHgICAADYCACAAQQhqIAM3AwAgABDFgYCAACAAEMaBgIAAQhBCgQgQxIGAgAAiByAEQgF8IgQ3AgBBACEJIAdBDGpBADYCACAHQQhqQQA6AABBACEKQQAhAiAAIAQgACgCABGBgICAAICAgIAAIg4hDQsgDiABIA4oAgARg4CAgACAgICAACEECyANEMaBgIAAIAcQxoGAgAAgABDGgYCAACAJEMaBgIAAIAoQxoGAgAAgAhDGgYCAACAFEMaBgIAAIAgQxoGAgAAgBkEgaiSAgICAACAEC0cBAX4gAEEIaikCACECQhgQw4GAgAAiAEHIgICAADYCACAAQRBqIAE3AwAgAEEIaiACNwMAIAAQxYGAgAAgABDGgYCAACAAC40CAwF/BH4CfyOAgICAAEEQayICJICAgIAAQgAhAyACQgA3AwggAEEIaikCACEEIAEgAkEIahDPgYCAACEFIAIpAwghBkIQQoEIEMSBgIAAIgEgBjcCACABQQhqIAVCAFIiBzoAAEEAIQhBgMSEgABBACAHGyIAEMWBgIAAIAFBDGogADYCAEEAIQACQCAHDQBCEBDDgYCAACIAQceAgIAANgIAIABBCGogBDcDACAAEMWBgIAAIAAQxoGAgAAgAEIAIAAoAgARgYCAgACAgICAACIIIAYgCCgCABGDgICAAICAgIAAIQMLIAgQxoGAgAAgABDGgYCAACABEMaBgIAAIAJBEGokgICAgAAgAwv+BgMBfwF+Bn8jgICAgABB0ABrIgIkgICAgAAgAEEIaikCACEDQiAQw4GAgAAhBCACIAE3A0AgBEGImISAACACQcAAahDcgYCAABpCgCAQw4GAgAAhBSACIAQ2AjAgBUHqi4SAACACQTBqENyBgIAAGiADIAUQwIGAgAAhAEIMQoEKEMSBgIAAIQYgABDFgYCAAEEAIQcgBkEIakEANgIA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gIAAIgdBhICAgAA2AgBB5JWEgAAQxYGAgAAgB0EEakHklYSAADYCACAHEMWBgIAAIAcQxoGAgAAgBCAHQaWNhIAAIAcoAgARgICAgACAgICAACIbIAQoAgARgICAgACAgICAACIOQfKahIAAIA4oAgARgICAgACAgICAACIVEMeBgIAAQfCbhIAAEMeBgIAAfEIBfBDDgYCAACAVEOSBgIAAIRggGCAYEOaBgIAAakEsOwAAQghCgQQQxIGAgAAiCEGDgICAADYCAEGrkISAABDFgYCAACAIQQRqQauQhIAANgIAIAgQxYGAgAAgCBDGgYCAACAIQYWdhIAAIAgoAgARgICAgACAgICAACEKQghCgQQQxIGAgAAiC0GFgICAADYCAEGck4SAABDFgYCAACALQQRqQZyThIAANgIAIAsQxYGAgAAgCxDGgYCAACALQYWdhIAAIAsoAgARgICAgACAgICAACIWQYCghIAAIBYoAgARgICAgACAgICAACIZEMeBgIAAQfCbhIAAEMeBgIAAfEIBfBDDgYCAACAZEOSBgIAAIQ8gDyAPEOaBgIAAakEsOwAAQghCgQQQxIGAgAAiEEGFgICAADYCAEGqkYSAABDFgYCAACAQQQRqQaqRhIAANgIAIBAQxYGAgAAgEBDGgYCAACAQQYWdhIAAIBAoAgARgICAgACAgICAACIFQYeWhIAAIAUoAgARgICAgACAgICAACETIAogDxDHgYCAACATEMeBgIAAfEIBfBDDgYCAACAPEOSBgIAAIBMQ4YGAgAAiHyAKKAIAEYCAgIAAgICAgAAhGiAYEMeBgIAAIBoQx4GAgAB8QgF8EMOBgIAAIBgQ5IGAgAAgGhDhgYCAACIJEMeBgIAAQfCbhIAAEMeBgIAAfEIBfBDDgYCAACAJEOSBgIAAIRcgFyAXEOaBgIAAakEsOwAAQghCgQQQxIGAgAAiEUGFgICAADYCAEGrkISAABDFgYCAACARQQRqQauQhIAANgIAIBEQxYGAgAAgERDGgYCAAEIIQoEEEMSBgIAAIhRBhICAgAA2AgBB5JWEgAAQxYGAgAAgFEEEakHklYSAADYCACAUEMWBgIAAIBQQxoGAgAAgESAUQauVhIAAIBQoAgARgICAgACAgICAACIiIBEoAgARgICAgACAgICAACINQZeAhIAAIA0oAgAR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gIAAIAALdgECfyAAQQhqKAIAIQIgAEEEaigCACEDQhBCgRwQxIGAgAAiAEHRgICAADYCACADEMWBgIAAIABBBGogAzYCACACEMWBgIAAIABBCGogAjYCACABEMWBgIAAIABBDGogATYCACAAEMWBgIAAIAAQxoGAgAAgAAtaAQF/IABBBGooAgAhAkIMQoEMEMSBgIAAIgBB0oCAgAA2AgAgAhDFgYCAACAAQQRqIAI2AgAgARDFgYCAACAAQQhqIAE2AgAgABDFgYCAACAAEMaBgIAAIAALwxYBP38gAEEIaigCACECIABBBGooAgAhAELIAEKB/P8PEMSBgIAAIgNCADcCAEIIQoEEEMSBgIAAIgRB04CAgAA2AgAgABDFgYCAACAEQQRqIAA2AgAgBBDFgYCAACAEEMaBgIAAIARBzJSEgAAgBCgCABGAgICAAICAgIAAIgUgASAFKAIAEYCAgIAAgICAgAAiBiACQQhqKAIAIAYoAgARgICAgACAgICAACIHEMWBgIAAIANBCGogBzYCAEIIQoEEEMSBgIAAIghB04CAgAA2AgAgABDFgYCAACAIQQRqIAA2AgAgCBDFgYCAACAIEMaBgIAAIAhB8JaEgAAgCCgCABGAgICAAICAgIAAIgkgASAJKAIAEYCAgIAAgICAgAAiCiACQQxqKAIAIAooAgARgICAgACAgICAACILEMWBgIAAIANBDGogCzYCAEIIQoEEEMSBgIAAIgxB04CAgAA2AgAgABDFgYCAACAMQQRqIAA2AgAgDBDFgYCAACAMEMaBgIAAIAxB9piEgAAgDCgCABGAgICAAICAgIAAIg0gASANKAIAEYCAgIAAgICAgAAiDiACQRBqKAIAIA4oAgARgICAgACAgICAACIPEMWBgIAAIANBEGogDzYCAEIIQoEEEMSBgIAAIhBB04CAgAA2AgAgABDFgYCAACAQQQRqIAA2AgAgEBDFgYCAACAQEMaBgIAAIBBBzIuEgAAgECgCABGAgICAAICAgIAAIhEgASARKAIAEYCAgIAAgICAgAAiEiACQRRqKAIAIBIoAgARgICAgACAgICAACITEMWBgIAAIANBFGogEzYCAEIIQoEEEMSBgIAAIhRB04CAgAA2AgAgABDFgYCAACAUQQRqIAA2AgAgFBDFgYCAACAUEMaBgIAAIBRBjpOEgAAgFCgCABGAgICAAICAgIAAIhUgASAVKAIAEYCAgIAAgICAgAAiFiACQRhqKAIAIBYoAgARgICAgACAgICAACIXEMWBgIAAIANBGGogFzYCAEIIQoEEEMSBgIAAIhhB04CAgAA2AgAgABDFgYCAACAYQQRqIAA2AgAgGBDFgYCAACAYEMaBgIAAIBhBvJKEgAAgGCgCABGAgICAAICAgIAAIhkgASAZKAIAEYCAgIAAgICAgAAiGiACQRxqKAIAIBooAgARgICAgACAgICAACIbEMWBgIAAIANBHGogGzYCAEIIQoEEEMSBgIAAIhxB04CAgAA2AgAgABDFgYCAACAcQQRqIAA2AgAgHBDFgYCAACAcEMaBgIAAIBxBs4SEgAAgHCgCABGAgICAAICAgIAAIh0gASAdKAIAEYCAgIAAgICAgAAiHiACQSBqKAIAIB4oAgARgICAgACAgICAACIfEMWBgIAAIANBIGogHzYCAEIIQoEEEMSBgIAAIiBB04CAgAA2AgAgABDFgYCAACAgQQRqIAA2AgAgIBDFgYCAACAgEMaBgIAAICBBt5OEgAAgICgCABGAgICAAICAgIAAIiEgASAhKAIAEYCAgIAAgICAgAAiIiACQSRqKAIAICIoAgARgICAgACAgICAACIjEMWBgIAAIANBJGogIzYCAEIIQoEEEMSBgIAAIiRB04CAgAA2AgAgABDFgYCAACAkQQRqIAA2AgAgJBDFgYCAACAkEMaBgIAAICRBv4GEgAAgJCgCABGAgICAAICAgIAAIiUgASAlKAIAEYCAgIAAgICAgAAiJiACQShqKAIAICYoAgARgICAgACAgICAACInEMWBgIAAIANBKGogJzYCAEIIQoEEEMSBgIAAIihB04CAgAA2AgAgABDFgYCAACAoQQRqIAA2AgAgKBDFgYCAACAoEMaBgIAAIChB4JmEgAAgKCgCABGAgICAAICAgIAAIikgASApKAIAEYCAgIAAgICAgAAiKiACQSxqKAIAICooAgARgICAgACAgICAACIrEMWBgIAAIANBLGogKzYCAEIIQoEEEMSBgIAAIixB04CAgAA2AgAgABDFgYCAACAsQQRqIAA2AgAgLBDFgYCAACAsEMaBgIAAICxB0ZmEgAAgLCgCABGAgICAAICAgIAAIi0gASAtKAIAEYCAgIAAgICAgAAiLiACQTBqKAIAIC4oAgARgICAgACAgICAACIvEMWBgIAAIANBMGogLzYCAEIIQoEEEMSBgIAAIjBB04CAgAA2AgAgABDFgYCAACAwQQRqIAA2AgAgMBDFgYCAACAwEMaBgIAAIDBBvZWEgAAgMCgCABGAgICAAICAgIAAIjEgASAxKAIAEYCAgIAAgICAgAAiMiACQTRqKAIAIDIoAgARgICAgACAgICAACIzEMWBgIAAIANBNGogMzYCAEIIQoEEEMSBgIAAIjRB04CAgAA2AgAgABDFgYCAACA0QQRqIAA2AgAgNBDFgYCAACA0EMaBgIAAIDRB+5WEgAAgNCgCABGAgICAAICAgIAAIjUgASA1KAIAEYCAgIAAgICAgAAiNiACQThqKAIAIDYoAgARgICAgACAgICAACI3EMWBgIAAIANBOGogNzYCAEIIQoEEEMSBgIAAIjhB04CAgAA2AgAgABDFgYCAACA4QQRqIAA2AgAgOBDFgYCAACA4EMaBgIAAIDhBxYKEgAAgOCgCABGAgICAAICAgIAAIjkgASA5KAIAEYCAgIAAgICAgAAiOiACQTxqKAIAIDooAgARgICAgACAgICAACI7EMWBgIAAIANBPGogOzYCAEIIQoEEEMSBgIAAIjxB04CAgAA2AgAgABDFgYCAACA8QQRqIAA2AgAgPBDFgYCAACA8EMaBgIAAIDxBioiEgAAgPCgCABGAgICAAICAgIAAIj0gASA9KAIAEYCAgIAAgICAgAAiPiACQcAAaigCACA+KAIAEYCAgIAAgICAgAAiPxDFgYCAACADQcAAaiA/NgIAQghCgQQQxIGAgAAiQEHTgICAADYCACAAEMWBgIAAIEBBBGogADYCACBAEMWBgIAAIEAQxoGAgAAgQEGHgYSAACBAKAIAEYCAgIAAgICAgAAiACABIAAoAgARgICAgACAgICAACIBIAJBxABqKAIAIAEoAgARgICAgACAgICAACICEMWBgIAAIANBxABqIAI2AgAgAxDFgYCAACADEMaBgIAAIAIQxoGAgAAgARDGgYCAACAAEMaBgIAAIEAQxoGAgAAgPxDGgYCAACA+EMaBgIAAID0QxoGAgAAgPBDGgYCAACA7EMaBgIAAIDoQxoGAgAAgORDGgYCAACA4EMaBgIAAIDcQxoGAgAAgNhDGgYCAACA1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gIAAIAdBhZ2EgAAgBygCABGAgICAAICAgIAAISZCgCAQw4GAgAAhCSABIAg2AgAgCUHbioSAACABENyBgIAAGiAmIAkgJigCABGAgICAAICAgIAAIQogHiAZEMeBgIAAIAoQx4GAgAB8QgF8EMOBgIAAIBkQ5IGAgAAgChDhgYCAACIqIB4oAgARgICAgACAgICAACIdEMeBgIAAQfCbhIAAEMeBgIAAfEIBfBDDgYCAACAdEOSBgIAAISEgISAhEOaBgIAAakEsOwAAQghCgQQQxIGAgAAiE0GDgICAADYCAEGfhISAABDFgYCAACATQQRqQZ+EhIAANgIAIBMQxYGAgAAgExDGgYCAACATQYWdhIAAIBMoAgARgICAgACAgICAACELQghCgQQQxIGAgAAiFUGFgICAADYCAEHHh4SAABDFgYCAACAVQQRqQceHhIAANgIAIBUQxYGAgAAgFRDGgYCAACAVQYWdhIAAIBUoAgARgICAgACAgICAACIfQaqMhIAAIB8oAgARgICAgACAgICAACIkEMeBgIAAQfCbhIAAEMeBgIAAfEIBfBDDgYCAACAkEOSBgIAAIQ0gDSANEOaBgIAAakEsOwAAQghCgQQQxIGAgAAiGkGFgICAADYCAEH4mYSAABDFgYCAACAaQQRqQfiZhIAANgIAIBoQxYGAgAAgGhDGgYCAACAaQYWdhIAAIBooAgARgICAgACAgICAACInQb6ZhIAAICcoAgARgICAgACAgICAACEQIAsgDRDHgYCAACAQEMeBgIAAfEIBfBDDgYCAACANEOSBgIAAIBAQ4YGAgAAiKyALKAIAEYCAgIAAgICAgAAhESAhEMeBgIAAIBEQx4GAgAB8QgF8EMOBgIAAICEQ5IGAgAAgERDhgYCAACIsEMeBgIAAQfCbhIAAEMeBgIAAfEIBfBDDgYCAACAsEOSBgIAAIQ4gDiAOEOaBgIAAakEsOwAAQghCgQQQxIGAgAAiIkGDgICAADYCAEGfhISAABDFgYCAACAiQQRqQZ+EhIAANgIAICIQxYGAgAAgIhDGgYCAACAiQYWdhIAAICIoAgARgICAgACAgICAACEYQghCgQQQxIGAgAAiI0GFgICAADYCAEHHh4SAABDFgYCAACAjQQRqQceHhIAANgIAICMQxYGAgAAgIxDGgYCAACAjQYWdhIAA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IAcoAgARgICAgACAgICAACIIIAYoAgARgICAgACAgICAACIJQaGAhIAAIAkoAgARgICAgACAgICAACIKEMeBgIAAQfCbhIAAEMeBgIAAfEIBfBDDgYCAACAKEOSBgIAAIQsgCyALEOaBgIAAakEsOwAAQghCgQQQxIGAgAAiDEGDgICAADYCAEGfhISAABDFgYCAACAMQQRqQZ+EhIAANgIAIAwQxYGAgAAgDBDGgYCAACAMQYWdhIAAIAwoAgARgICAgACAgICAACENQghCgQQQxIGAgAAiDkGFgICAADYCAEHJm4SAABDFgYCAACAOQQRqQcmbhIAANgIAIA4QxYGAgAAgDhDGgYCAACAOQYWdhIAAIA4oAgARgICAgACAgICAACIPQeSJhIAAIA8oAgARgICAgACAgICAACIQEMeBgIAAQfCbhIAAEMeBgIAAfEIBfBDDgYCAACAQEOSBgIAAIREgESAREOaBgIAAakEsOwAAQghCgQQQxIGAgAAiEkGFgICAADYCAEHvjYSAABDFgYCAACASQQRqQe+NhIAANgIAIBIQxYGAgAAgEhDGgYCAACASQYWdhIAAIBIoAgARgICAgACAgICAACITQbCthIAAIBMoAgARgICAgACAgICAACEUIA0gERDHgYCAACAUEMeBgIAAfEIBfBDDgYCAACAREOSBgIAAIBQQ4YGAgAAiFSANKAIAEYCAgIAAgICAgAAhFiAFIAsQx4GAgAAgFhDHgYCAAHxCAXwQw4GAgAAgCxDkgYCAACAWEOGBgIAAIhcgBSgCABGAgICAAICAgIAAIRggFxDGgYCAACAWEMaBgIAAIBUQxoGAgAAgFBDGgYCAACATEMaBgIAAIBIQxoGAgAAgERDGgYCAACAQEMaBgIAAIA8QxoGAgAAgDhDGgYCAACANEMaBgIAAIAwQxoGAgAAgCxDGgYCAACAKEMaBgIAAIAkQxoGAgAAgCBDGgYCAACAHEMaBgIAAIAYQxoGAgAAgBRDGgYCAACAEEMaBgIAAIAMQxoGAgAAgABDGgYCAAEIQEMOBgIAAIgBB4ICAgAA2AgAgAEEIaiABNwMAIAAQxYGAgAAgABDGgYCAACAAQbeFhIAAIAAoAgARgICAgACAgICAACIOQYGGhIAAIA4oAgARgICAgACAgICAACISQYmOhIAAIBIoAgARgICA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QCAEQgFTDQAgAEG1gICAADYCACACEMWBgIAAIABBBGogAjYCACAAEMWBgIAAIAAQxoGAgAAgAEHMi4SAACAAKAIAEYCAgIAAgICAgAAiBSADIAUoAgARgICAgACAgICAACECQghCgQQQxIGAgAAiAUG2gICAADYCACACEMWBgIAAIAFBBGogAjYCACABEMWBgIAAIAEQxoGAgAAgAUGWmoSAACABKAIAEYCAgIAAgICAgAAiBhDFgYCAACAGEMaBgIAAIAEQxoGAgABBACEHQQAhCCAGIQEMAQsgAEHwgICAADYCACACEMWBgIAAIABBBGogAjYCACAAEMWBgIAAIAAQxoGAgABBACEGIAAgASAAKAIAEYCAgIAAgICAgAAhByAAIQhBACECQQAhBUEAIQAgByEBCyABEMWBgIAAIAcQxoGAgAAgCBDGgYCAACAGEMaBgIAAIAIQxoGAgAAgBRDGgYCAACAAEMaBgIAAIAMQxoGAgAAgAQutBgELfyAAQQRqKAIAIQACQAJAAkAgAUHHhYSAABDigYCAAEUNACABQe6PhIAAEOKBgIAARQ0AIAFB/I+EgAAQ4oGAgAANAQtCCEKBBBDEgYCAACIBQbWAgIAANgIAIAAQxYGAgAAgAUEEaiAANgIAIAEQxYGAgAAgARDGgYCAACABQbyShIAAIAEoAgARgICAgACAgICAACICQZWQhIAAIAIoAgARgICAgACAgICAACEDQghCgQQQxIGAgAAiAEG2gICAADYCACADEMWBgIAAIABBBGogAzYCACAAEMWBgIAAIAAQxoGAgABBACEEQQAhBUEAIQZBACEHQQAhCEEAIQkgAEH1i4SAABDDgICAACIKIAAoAgARgICAgACAgICAACILIQwMAQsgAUGrkoSAABDigYCAACEDIAFBnpKEgAAQ4oGAgAAhDEIIQoEEEMSBgIAAIQkCQAJAIANFDQAgDA0BCyAJQbWAgIAANgIAIAAQxYGAgAAgCUEEaiAANgIAIAkQxYGAgAAgCRDGgYCAACAJQbyShIAAIAkoAgARgICAgACAgICAACIIQZaZhIAAIAgoAgARgICAgACAgICAACEHQghCgQQQxIGAgAAiAUG2gICAADYCACAHEMWBgIAAIAFBBGogBzYCACABEMWBgIAAIAEQxoGAgAAgAUGWmoSAACABKAIAEYCA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hYAANgLogYWAAEEAQeiBhYAANgL0gYWAAEEAQeiBhYAANgLwgYWAAEEAQfCBhYAANgL8gYWAAEEAQfCBhYAANgL4gYWAAEEAQfiBhYAANgKEgoWAAEEAQfiBhYAANgKAgoWAAEEAQYCChYAANgKMgoWAAEEAQYCChYAANgKIgoWAAEEAQYiChYAANgKUgoWAAEEAQYiChYAANgKQgoWAAEEAQZCChYAANgKcgoWAAEEAQZiChYAANgKkgoWAAEEAQZCChYAANgKYgoWAAEEAQaCChYAANgKsgoWAAEEAQZiChYAANgKggoWAAEEAQaiChYAANgK0goWAAEEAQaCChYAANgKogoWAAEEAQbCChYAANgK8goWAAEEAQaiChYAANgKwgoWAAEEAQbiChYAANgLEgoWAAEEAQbCChYAANgK4goWAAEEAQcCChYAANgLMgoWAAEEAQbiChYAANgLAgoWAAEEAQciChYAANgLUgoWAAEEAQcCChYAANgLIgoWAAEEAQdCChYAANgLcgoWAAEEAQciChYAANgLQgoWAAEEAQdiChYAANgLkgoWAAEEAQdCChYAANgLYgoWAAEEAQeCChYAANgLsgoWAAEEAQdiChYAANgLggoWAAEEAQeiChYAANgL0goWAAEEAQeCChYAANgLogoWAAEEAQfCChYAANgL8goWAAEEAQeiChYAANgLwgoWAAEEAQfiChYAANgKEg4WAAEEAQfCChYAANgL4goWAAEEAQYCDhYAANgKMg4WAAEEAQfiChYAANgKAg4WAAEEAQYiDhYAANgKUg4WAAEEAQYCDhYAANgKIg4WAAEEAQZCDhYAANgKcg4WAAEEAQYiDhYAANgKQg4WAAEEAQZCDhYAANgKYg4WAAEEAQeCEhYAAQXhB4ISFgABrQQ9xIgRqIgI2AoiBhYAAQQAgAyAEa0FIaiIDNgL8gIWAACACIANBAXI2AgRBgICIgABBTGpBODYCAEEAQQAoAtiEhYAANgKMgYWAAAsCQAJAIABB7AFLDQACQEEAKALwgIWAACIFQRAgAEETakHwA3EgAEELSRsiBEEDdiIDdiIAQQNxRQ0AAkACQCAAQQFxIANyQQFzIgZBA3QiA0GYgYWAAGoiACADKAKggYWAACIEKAIIIgdHDQBBACAFQX4gBndxNgLwgIWAAAwBCyAAIAc2Aggg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ADYCgIKFgABBAEGAgoWAADYCjIKFgABBAEGAgoWAADYCiIKFgABBAEGIgoWAADYClIKFgABBAEGIgoWAADYCkIKFgABBAEGQgoWAADYCnIKFgABBAEGYgoWAADYCpIKFgABBAEGQgoWAADYCmIKFgABBAEGggoWAADYCrIKFgABBAEGYgoWAADYCoIKFgABBAEGogoWAADYCtIKFgABBAEGggoWAADYCqIKFgABBAEGwgoWAADYCvIKFgABBAEGogoWAADYCsIKFgABBAEG4goWAADYCxIKFgABBAEGwgoWAADYCuIKFgABBAEHAgoWAADYCzIKFgABBAEG4goWAADYCwIKFgABBAEHIgoWAADYC1IKFgABBAEHAgoWAADYCyIKFgABBAEHQgoWAADYC3IKFgABBAEHIgoWAADYC0IKFgABBAEHYgoWAADYC5IKFgABBAEHQgoWAADYC2IKFgABBAEHggoWAADYC7IKFgABBAEHYgoWAADYC4IKFgABBAEHogoWAADYC9IKFgABBAEHggoWAADYC6IKFgABBAEHwgoWAADYC/IKFgABBAEHogoWAADYC8IKFgABBAEH4goWAADYChIOFgABBAEHwgoWAADYC+IKFgABBAEGAg4WAADYCjIOFgABBAEH4goWAADYCgIOFgABBAEGIg4WAADYClIOFgABBAEGAg4WAADYCiIOFgABBAEGQg4WAADYCnIOFgABBAEGIg4WAADYCkIOFgABBAEGQg4WAADYCmIOFgABBACAGQXggBmtBD3EiAGoiAzYCiIGFgABBACAFQUhqIgcgAGsiADYC/ICFgAAgAyAAQQFyNgIEIAYgB2pBODYCBEEAQQAoAtiEhYAANgKMgYWAAAwCCyADIAZPDQAgAyAHSQ0AIAAoAgxBCHENACADQXggA2tBD3EiB2oiBkEAKAL8gIWAACAFaiILIAdrIgdBAXI2AgQgACAJIAVqNgIEQQBBACgC2ISFgAA2AoyBhYAAQQAgBzYC/ICFgABBACAGNgKIgYWAACADIAtqQTg2AgQMAQsCQCAGQQAoAoCBhYAATw0AQQAgBjYCgIGFgAALIAYgBWohB0GwhIWAACEAAkACQANAIAAoAgAiCSAHRg0BIAAoAggiAA0ADAILCyAALQAMQQhxRQ0DC0GwhIWAACEAAkADQAJAIAMgACgCACIH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dGVyLW91dABNb25leSBvdXQAdGFibGlzdABhY3Rpdml0eS1saXN0AHNlY3VyaXR5LWxpc3QAdGlwLWxpc3QAaGVyby1hcnQAJXMtYW1vdW50AEFtb3VudABbJXNdLmFjY291bnQAZGVwb3NpdC1hY2NvdW50AG9wZW4tYWNjb3VudABUbyBhY2NvdW50AE9wZW4gYWNjb3VudABGcm9tIGFjY291bnQAT3BlbmluZyBhY2NvdW50AEFjY291bnQAZXZlbnQAbWFpbi1jb250ZW50AGFyaWEtY3VycmVudABCYW5rIG1vdmVtZW50AC9hcGkvZGVwb3NpdABzdWJtaXQtZGVwb3NpdABxdWljay1kZXBvc2l0AG1vdmUtZGVwb3NpdABtdXRhdGUtZGVwb3NpdABEZXBvc2l0AHN1Ym1pdABjcmVkaXQAc2VjdXJpdHktb3JiaXQAZGViaXQATm8gYWNjb3VudHMgeWV0AHZpb2xldABkdABzZWxlY3QAbWluaS1zdGF0AHN0YXR1cwBmb2N1cwAvYXBpL2FjY291bnRzAG5hdi1hY2NvdW50cwBDbGllbnQgYWNjb3VudHMAQWNjb3VudHMATm8gbW92ZW1lbnRzAFslc10uY2VudHMAQ3JlZGl0cwBEZWJpdHMAT3ZlcmRyYWZ0cwBkZXRhaWwtZmFjdHMARGlzbWlzcwB0b3AtcHJvZ3Jlc3MAc3VjY2VzcwBwcm9wcwB0b3BiYXItYWN0aW9ucwBoZXJvLWFjdGlvbnMAZGV0YWlsLWFjdGlvbnMAbW9kYWwtYWN0aW9ucwBUb3RhbCBlbnRyaWVzAEpvdXJuYWwgZW50cmllcwBXaXRoZHJhdyBmdW5kcwBEZXBvc2l0IGZ1bmRzAEFkZCBmdW5kcwBjb21tYW5kcwBwYWlyZWQtZmllbGRzAOKIkiVzAHNpZGViYXIlcwBuYXYtaXRlbSVzADAwJXMAIy8lcwAkJXMuJXMAbmF2LSVzAGFjY291bnQtJXMAJXMsJXMAKyVzACMlcwAjJXMgwrcgJXMAbW92ZW1lbnQtcm93ICVzAE1vbmV5IG91dCAlcwB0b2FzdCAlcwBNb25leSBpbiAlcwBBbGwgJXMAYWNjb3VudC1tYXJrICVzAERlY2xpbmVkICVzAGVycm9yAGh0bWxGb3IAYWN0aXZpdHlGaWx0ZXIAUmVhY3QgcmVuZGVyZXIAWyVzXS5vd25lcgBuZXctb3duZXIAYWNjb3VudC1vd25lcgBBY2NvdW50IG93bmVyAFRhbG9uIGN1c3RvbWVyAExlZGdlcgAvYXBpL3RyYW5zZmVyAHN1Ym1pdC10cmFuc2ZlcgBxdWljay10cmFuc2ZlcgBtb3ZlLXRyYW5zZmVyAG11dGF0ZS10cmFuc2ZlcgBUcmFuc2ZlcgBwbGFjZWhvbGRlcgBoZWFkZXIAbGF5ZXItbnVtYmVyAGF2YXRhcgB0b3BiYXIAbGVkZ2VyLXRvb2xiYXIAaHR0cABPc3ByZXkgV2ViIEFwcABtb2RhbC1iYWNrZHJvcABzZWN1cmUtY2hpcABvcmIgb3JiLXR3bwB0cmFuc2Zlci10bwBEZXBvc2l0IHRvAGZvcm0taW50cm8Ac2VjdXJpdHktaGVybwBpbmZvAHRleHQtYnV0dG9uAGljb24tYnV0dG9uAHNrZWxldG9uAFRhbG9uAG9wdGlvbgBEZXNjcmlwdGlvbgBzZWN0aW9uAGxvY2F0aW9uAGVtcHR5LWljb24Ac2VjdXJpdHktaWNvbgBuYXYtaWNvbgB0b2FzdC1pY29uAHN0YXQtaWNvbgB0aXAtaWNvbgBidXR0b24taWNvbgBhcHAtbWFpbgBmaWx0ZXItaW4ATW9uZXkgaW4AY2hpbGRyZW4AYWNjb3VudHMtb3BlbgB0b3BiYXItb3BlbgBtdXRhdGUtb3BlbgAgb3BlbgBhcmlhLWhpZGRlbgBjeWFuAHNwYW4AbmFuAG1vbmV5LWZvcm0AbW9kYWwtZm9ybQBzaWRlYmFyLWJvdHRvbQB0cmFuc2Zlci1mcm9tAFdpdGhkcmF3IGZyb20AZW0AaGVyby1tb25vZ3JhbQB1bAB1cmwAZmllbGQtY29udHJvbABudWxsAGFwcC1zaGVsbABzbWFsbABmaWx0ZXItYWxsAFZpZXcgYWxsAFNlZSBhbGwAbW9kZWwAQ2FuY2VsAG5hdi1sYWJlbABidXR0b24tbGFiZWwAZmllbGQtbGFiZWwAYXJpYS1sYWJlbABkbABkZWNpbWFsAHNoaWVsZC1zZWFsAGNhbmNlbC1tb2RhbABjbG9zZS1tb2RhbABhcmlhLW1vZGFsAHN3YXAtbWFyawBicmFuZC1tYXJrAHNlY3Rpb24tYmxvY2sAY2xpY2sAbGkAdG9wYmFyLXJlZnJlc2gAUmVmcmVzaABhY3Rpdml0eS1zZWFyY2gAZGlhbG9nAHN0cm9uZwBieXRlQXQ6IG51bGwgc3RyaW5nAGxvYWRpbmcAc2VjdGlvbi1oZWFkaW5nAGRldGFpbC1oZWFkaW5nAG1vZGFsLWhlYWRpbmcAcGFnZS1oZWFkaW5nAHRhZwBpbmYAbmF2LW1vdmUAUmVhZHkgdG8gbW92ZQBjaGlwIGFjdGl2ZQDil48gQWN0aXZlAExpdmUAdHJ1ZQB2YWx1ZQBkZWZhdWx0VmFsdWUAcm91dGUAWyVzXS5ub3RlACVzLW5vdGUAZW1wdHktc3RhdGUAbmF2aWdhdGUAdG9hc3QtY2xvc2UAQ2xvc2UAZmFsc2UAYXJjaGl0ZWN0dXJlAGFjY291bnQtbW9yZQBwcm9maWxlLW1vcmUAdHlwZQBub3RpY2VUb25lAG9yYiBvcmItb25lAEZ1bGwgbGVnYWwgbmFtZQBjbGFzc05hbWUAdG9wYmFyLXRpdGxlAG5vdGljZVRpdGxlAEJhbmsgY29uc29sZQByb2xlAHNpZGViYXItcHJvZmlsZQB0aGlzIGN5Y2xlAGFydGljbGUAYnl0ZUF0OiBpbmRleCBvdXQgb2YgcmFuZ2UAcGFnZSBtb3ZlLXBhZ2UAaW5wdXRNb2RlAG1vdmVNb2RlAGFzaWRlAFslc10uYmFsYW5jZQBhY2NvdW50LWJhbGFuY2UAZGV0YWlsLWJhbGFuY2UATGVkZ2VyIHNlcnZpY2UAZGlzbWlzcy1ub3RpY2UAc3RhdC1jYXJkAGhlcm8tY2FyZABjYXJkIGZvcm0tY2FyZABtZXRob2QAWyVzXS5raW5kAGJyYW5kAGdvbGQAJWxsZABmaWVsZABzZWN1cml0eS1ncmlkAGFjY291bnQtZ3JpZABtaW5pLXN0YXQtZ3JpZABza2VsZXRvbi1ncmlkAGZvcm0tZ3JpZABtb3ZlLWdyaWQAWyVzXS5pZABmdWxseSBhdWRpdGVkACBzZWxlY3RlZABmaWx0ZXItcmVmdXNlZABSZWZ1c2VkAGNsb3NlZAByZXF1aXJlZABEZWNsaW5lZABBY2NvdW50IG9wZW5lZABKb3VybmFsZWQAVmVyaWZpZWQAYWN0aXZpdHlMb2FkZWQAYWNjb3VudHNMb2FkZWQARW5mb3JjZWQAZGQAbW92ZW1lbnQtbWV0YQByZWZyZXNoLWRhdGEAW10AXABbAE1PVkUgTU9ORVkASE9TVCAvIFZJRVcAUE9TVABHRVQAQUNDT1VOVFMATUFOQUdFRCBDTElFTlRTAEFDVElWRSBDT05UUk9MUwBMSVZFIExFREdFUgBUTwBOQU4AU1lTVEVNAEFVRElUIFRSQUlMAFBSSVZBVEUgQkFOSwBDT01NQU5EIC8gQVBJAEJBTktJTkcASU5GAEFjY291bnQgSUQAOgAwNABoMwAwMwBoMgAwMgBoMQAwMQAkMC4wMAAjLwAuAGFjY291bnQtAHF1aWNrLQAsACsAKG51bGwpACQAIgAhACAAU3VwcG9ydCBmb3IgZm9ybWF0dGluZyBsb25nIGRvdWJsZSB2YWx1ZXMgaXMgY3VycmVudGx5IGRpc2FibGVkLgpUbyBlbmFibGUgaXQsIGFkZCAtbGMtcHJpbnRzY2FuLWxvbmctZG91YmxlIHRvIHRoZSBsaW5rIGNvbW1hbmQuCgAAAAAAAAAAAAAAYWNjb3VudC1jYXJkLXRvcAAAAAAAAAAAAAAAAAAAAABhY2NvdW50LWNhcmQgJXMlcwAAAAAAAAAAAAAAAAAAAFRhbG9uIGFjY291bnQgwrcgIyVzAAAAAAAAAAAAAAAAbW92ZW1lbnQtaWNvbiAlcwAAAAAAAAAAAAAAAAAAAAAlcyDCtyBBY2NvdW50ICMlcwAAAAAAAAAAAAAAAAAAAG1vdmVtZW50LWFtb3VudCAlcwAAAAAAAAAAAAAAAAAAcmVwbGFjZTogbmVlZGxlIG11c3Qgbm90IGJlIGVtcHR5AAAAAAAAAAAAAAAAAAAAaW5kZXhPZjogc3Vic3RyaW5nIG5vdCBmb3VuZAAAAABQcmltYXJ5IG5hdmlnYXRpb24AAAAAAAAAAAAAAAAAAG5hdi1zZWN0aW9uLWxhYmVsAAAAAAAAAAAAAAAAAAAAbmF2LXNlY3Rpb24tbGFiZWwgc2Vjb25kYXJ5AAAAAABUYWxvbiBPcGVyYXRpb25zAAAAAAAAAAAAAAAAAAAAAFByb3RlY3RlZCBzZXNzaW9uAAAAAAAAAAAAAAAAAAAAaWNvbi1idXR0b24gbW9iaWxlLW1lbnUAAAAAAAAAAABMSVZFIE9QRVJBVElPTlMgwrcgT1NQUkVZIE9OTElORQAAAAAAAAAAAAAAAAAAAABpY29uLWJ1dHRvbiBub3RpZmljYXRpb24tYnV0dG9uAEFjdGl2aXR5IG5vdGlmaWNhdGlvbnMAAAAAAAAAAAAAbm90aWZpY2F0aW9uLWRvdAAAAAAAAAAAAAAAAAAAAABidXR0b24gcHJpbWFyeSB0b3Atb3BlbgAAAAAAAAAAAHBhZ2UgbG9hZGluZy1wYWdlAAAAAAAAAAAAAAAAAAAATG9hZGluZyBiYW5rIGRhdGEAAAAAAAAAAAAAAAAAAABza2VsZXRvbiBza2VsZXRvbi1oZXJvAAAAAAAAAAAAAHNrZWxldG9uIHNrZWxldG9uLXRhYmxlAAAAAAAAAAAATkVXIFRBTE9OIEFDQ09VTlQAAAAAAAAAAAAAAAAAAABDcmVhdGUgYSBwcm90ZWN0ZWQgY2xpZW50IGFjY291bnQgaW4gb25lIHN0ZXAuAABpY29uLWJ1dHRvbiBtb2RhbC1jbG9zZQAAAAAAAAAAAG1vZGFsLXJlYXNzdXJhbmNlAAAAAAAAAAAAAAAAAAAAU3RvcmFnZSBhY2Nlc3MgcmVtYWlucyBzZXJ2ZXItc2lkZS4gWW91ciBicm93c2VyIHJlY2VpdmVzIG9ubHkgdGhlIGFjY291bnQgcmVzcG9uc2UuAAAAAAAAAAAAAAAAb3Blbi1hY2NvdW50LXRpdGxlAAAAAAAAAAAAAAAAAABObyBhY2NvdW50IHNlbGVjdGVkAAAAAAAAAAAAAAAAAFdhaXRpbmcgZm9yIGZpcnN0IGRlcG9zaXQAAAAAAAAAYWNjb3VudC1tYXJrIHZpb2xldAAAAAAAAAAAAAAAAABUQUxPTiBBQ0NPVU5UICMlcwAAAAAAAAAAAAAAAAAAAEF2YWlsYWJsZSBiYWxhbmNlAAAAAAAAAAAAAAAAAAAAY2FyZCBhY2NvdW50LWRldGFpbAAAAAAAAAAAAAAAAABFdmVyeSBtYW5hZ2VkIGJhbGFuY2UgYW5kIHByb3RlY3RlZCBjbGllbnQgYWNjb3VudCBpbiBvbmUgdmlldy4AT3BlbiBhbiBhY2NvdW50IGluIHNlY29uZHPigJRubyBwYXBlcndvcmsgcmVxdWlyZWQuAAAAAAAAAAAAAAAAAGFjY291bnQtZ3JpZCBhY2NvdW50LWdyaWQtd2lkZQAAQWN0aXZpdHkgZm9yIHRoaXMgYWNjb3VudCB3aWxsIHNob3cgaGVyZS4AAAAAAAAAY2FyZCBjb21wYWN0LWFjdGl2aXR5AAAAAAAAAAAAAABMYXRlc3QgbW92ZW1lbnRzAAAAAAAAAAAAAAAAAAAAAGFjY291bnQtZGV0YWlsLWdyaWQAAAAAAAAAAAAAAAAAcGFnZSBhY2NvdW50cy1wYWdlAAAAAAAAAAAAAAAAAABFdmVyeSBjcmVkaXQsIGRlYml0LCB0cmFuc2ZlciBzaWRlLCBhbmQgcmVmdXNhbCBpbiBvbmUgbGl2ZSBsZWRnZXIuAAAAAAAAAAAAAAAAAGJ1dHRvbiBzZWNvbmRhcnkAAAAAAAAAAAAAAAAAAAAAU2VhcmNoIGRlc2NyaXB0aW9uIG9yIG93bmVyAAAAAABQcm90ZWN0ZWQgcmVmdXNhbHMAAAAAAAAAAAAAAAAAAE5vIG1hdGNoaW5nIGFjdGl2aXR5AAAAAAAAAAAAAAAAVHJ5IGFub3RoZXIgc2VhcmNoIG9yIGJyb2FkZW4gdGhlIG1vdmVtZW50IGZpbHRlci4AAAAAAAAAAAAAAAAAAGFjdGl2aXR5LWxpc3QgYWN0aXZpdHktbGlzdC1mdWxsAAAAAAAAAAAAAAAAAAAAAGNhcmQgbGVkZ2VyLWNhcmQAAAAAAAAAAAAAAAAAAAAAcGFnZSBhY3Rpdml0eS1wYWdlAAAAAAAAAAAAAAAAAABmaWVsZCBhbW91bnQtZmllbGQAAAAAAAAAAAAAAAAAAFdoYXQgaXMgdGhpcyBmb3I/AAAAAAAAAAAAAAAAAAAAYnV0dG9uIHByaW1hcnkgc3VibWl0LWJ1dHRvbgAAAABmb3JtLWljb24gZGVwb3NpdAAAAAAAAAAAAAAAAAAAAENyZWRpdCBhbiBhY2NvdW50IGluc3RhbnRseSBhbmQgam91cm5hbCB0aGUgbW92ZW1lbnQuAAAAAAAAAAAAAABmb3JtLWljb24gd2l0aGRyYXcAAAAAAAAAAAAAAAAAAERlYml0IHNlY3VyZWx5LiBPdmVyZHJhZnQgYXR0ZW1wdHMgYXJlIHJlZnVzZWQgYW5kIGF1ZGl0ZWQuAAAAAAB3aXRoZHJhdy1hY2NvdW50AAAAAAAAAAAAAAAAAAAAAGZvcm0taWNvbiB0cmFuc2ZlcgAAAAAAAAAAAAAAAAAATW92ZSBmdW5kcyBhdG9taWNhbGx5IGJldHdlZW4gVGFsb24gYWNjb3VudHMuAAAAc2VnbWVudGVkIG1vdmUtdGFicwAAAAAAAAAAAAAAAABDbGllbnQgZnVuZHMsIGluIG1vdGlvbgAAAAAAAAAAAEZhc3QgYmFuayBvcGVyYXRpb25zLCBndWFyZGVkIGJ5IE9zcHJleSBkb21haW4gcnVsZXMuAAAAAAAAAAAAAABjYXJkIGd1aWRhbmNlLWNhcmQAAAAAAAAAAAAAAAAAAEJVSUxUIEZPUiBDT05GSURFTkNFAAAAAAAAAAAAAAAARXZlcnkgbW92ZW1lbnQgaXMgcHJvdGVjdGVkAAAAAABCb3RoIHNpZGVzIGxhbmQgdG9nZXRoZXLigJRvciBub3QgYXQgYWxsLgAAAAAAAABDb21wbGV0ZSBqb3VybmFsAAAAAAAAAAAAAAAAAAAAAFN1Y2Nlc3NmdWwgYW5kIHJlZnVzZWQgYXR0ZW1wdHMgYXJlIHJlY29yZGVkLgAAAEludGVnZXIgcHJlY2lzaW9uAAAAAAAAAAAAAAAAAAAATW9uZXkgcmVtYWlucyB3aG9sZSBjZW50cyBmcm9tIGZvcm0gdG8gbGVkZ2VyLgAAVGFsb24gU2hpZWxkIGFjdGl2ZQAAAAAAAAAAAAAAAABNQU5BR0VEIFBPUlRGT0xJTwAAAAAAAAAAAAAAAAAAAEFjcm9zcyAlcyBwcm90ZWN0ZWQgY2xpZW50IGFjY291bnRzAAAAAAAAAAAAAAAAAGJ1dHRvbiBnaG9zdC1vbi1kYXJrAAAAAAAAAAAAAAAAT3BlbiB5b3VyIGZpcnN0IGFjY291bnQgdG8gc3RhcnQgbW92aW5nIG1vbmV5LgAATm90aGluZyB0byByZXBvcnQAAAAAAAAAAAAAAAAAAABOZXcgbW92ZW1lbnRzIHdpbGwgYXBwZWFyIGhlcmUgaW5zdGFudGx5LgAAAAAAAABjYXJkIHNlY3Rpb24tYmxvY2sAAAAAAAAAAAAAAAAAAHBhZ2Ugb3ZlcnZpZXctcGFnZQAAAAAAAAAAAAAAAAAAc2VjdXJpdHktY29udHJvbAAAAAAAAAAAAAAAAAAAAABhcmNoaXRlY3R1cmUtbGF5ZXIAAAAAAAAAAAAAAAAAAFNFQ1VSSVRZICYgQVJDSElURUNUVVJFAAAAAAAAAAAAVHJ1c3QgeW91IGNhbiBpbnNwZWN0AAAAAAAAAAAAAABUYWxvbiBpcyBhIHJlYWwgT3NwcmV5IGFwcGxpY2F0aW9u4oCUbm90IGEgSmF2YVNjcmlwdCBtb2NrIHdlYXJpbmcgaXRzIGRhdGEuAAAAAG9yYml0LXJpbmcgcmluZy1vbmUAAAAAAAAAAAAAAAAAb3JiaXQtcmluZyByaW5nLXR3bwAAAAAAAAAAAAAAAABzZWN1cml0eS1oZXJvLWNvcHkAAAAAAAAAAAAAAAAAAHN0YXR1cy1waWxsIHN1Y2Nlc3MAAAAAAAAAAAAAAAAA4pePIEFsbCBzeXN0ZW1zIHByb3RlY3RlZAAAAAAAAABDYXBhYmlsaXR5LWNoZWNrZWQgYnkgY29uc3RydWN0aW9uAAAAAAAAAAAAAAAAAABUaGUgYnJvd3NlciBjYW4gcmVxdWVzdCBiYW5rIG9wZXJhdGlvbnMsIGJ1dCBpdCBuZXZlciByZWNlaXZlcyBzdG9yYWdlIGF1dGhvcml0eS4gT3NwcmV54oCZcyBtb2R1bGUgYW5kIGVmZmVjdCBib3VuZGFyaWVzIGRlY2lkZSB3aGF0IGNvZGUgaXMgYWxsb3dlZCB0byBkby4AAAAAY2FyZCBzZWN1cml0eS1jYXJkAAAAAAAAAAAAAAAAAABQcm90ZWN0aW9uIHN0YXR1cwAAAAAAAAAAAAAAAAAAAFN0b3JhZ2UgaXNvbGF0aW9uAAAAAAAAAAAAAAAAAAAAVGhlIFVJIGhhcyBubyBMZWRnZXIgb3IgU1FMaXRlIGNhcGFiaWxpdHkuAAAAAAAAQXRvbWljIHRyYW5zZmVycwAAAAAAAAAAAAAAAAAAAABEZWJpdCBhbmQgY3JlZGl0IGNvbW1pdCBhcyBvbmUgdHJhbnNhY3Rpb24uAAAAAABJbW11dGFibGUgYXVkaXQgdHJhaWwAAAAAAAAAAAAAAFJlZnVzZWQgb3ZlcmRyYWZ0cyBhcmUgam91cm5hbGxlZCB0b28uAAAAAAAAAAAAAFdob2xlLWNlbnQgYXJpdGhtZXRpYwAAAAAAAAAAAAAATm8gZmxvYXRpbmctcG9pbnQgZHJpZnQgaW4gbW9uZXkgZmxvd3MuAAAAAAAAAAAAYXJjaGl0ZWN0dXJlLXN0YWNrAAAAAAAAAAAAAAAAAABUdXJucyBkZWNsYXJhdGl2ZSBub2RlcyBpbnRvIGEgZmFzdCwgYWNjZXNzaWJsZSBpbnRlcmZhY2UuIEl0IG93bnMgbm8gYmFuayBsb2dpYy4AAAAAAAAAAAAAAAAAAABXQVNNIC8gTU9ERUwgwrcgVVBEQVRFIMK3IFZJRVcAAE93bnMgcm91dGluZywgaW50ZXJhY3Rpb25zLCB2YWxpZGF0aW9uLCBzdGF0ZSB0cmFuc2l0aW9ucywgYW5kIGNvbW1hbmQgZGVzY3JpcHRpb25zLgAAAAAAAAAAAAAAAFRoZSBvbmx5IGJyb3dzZXItc2lkZSBlZmZlY3Q6IHR5cGVkIHJlcXVlc3RzIHRvIHRoZSBwdWJsaWMgYmFuayBlbmRwb2ludHMuAAAAAAAAT1NQUkVZIC8gRUZGRUNUIEhBTkRMRVJTAAAAAAAAAABEb21haW4gcnVsZXMgYW5kIFNRTGl0ZSBhdXRob3JpdHkgcmVtYWluIG9uIHRoZSBzZXJ2ZXIsIGJleW9uZCB0aGUgVUkgYm91bmRhcnkuAGNhcmQgYXJjaGl0ZWN0dXJlLWNhcmQAAAAAAAAAAAAASE9XIFRISVMgQVBQIFJVTlMAAAAAAAAAAAAAAAAAAABBIHRoaW4gaG9zdC4gQSBzZXJpb3VzIE9zcHJleSBjb3JlLgAAAAAAAAAAAAAAAABhcmNoaXRlY3R1cmUtbGVhZAAAAAAAAAAAAAAAAAAAAFJlYWN0IGlzIGRlbGliZXJhdGVseSBiZWxvdyB0aGUgT3NwcmV5IHN1cmZhY2UuIFRoZSBhcHAgZW1pdHMgcGxhaW4gdmlldyBkYXRhIGFuZCBnZW5lcmljIGNvbW1hbmRzOyB0aGUgaG9zdCByZW5kZXJzIGFuZCB0cmFuc3BvcnRzIHRoZW0uAAAAAAAAAHBhZ2Ugc2VjdXJpdHktcGFnZQAAAAAAAAAAAAAAAAAAb3ZlcnZpZXctYWNjb3VudHMAAAAAAAAAAAAAAAAAAABvdmVydmlldy1hY3Rpdml0eQAAAAAAAAAAAAAAAAAAAGFjY291bnRzLWFjdGl2aXR5AAAAAAAAAAAAAAAAAAAAYWN0aXZpdHktcmVmcmVzaAAAAAAAAAAAAAAAAAAAAABwYXJzZUludDogaW52YWxpZCBpbnRlZ2VyAAAAAAAAAENvbnRhY3RpbmcgdGhlIHByb3RlY3RlZCBsZWRnZXLigKYAAAAAAAAAAAAAAAAAAENoZWNrIHRoZSBkZXBvc2l0AAAAAAAAAAAAAAAAAAAARGVwb3NpdGluZyBmdW5kcwAAAAAAAAAAAAAAAAAAAABDaGVjayB0aGUgd2l0aGRyYXdhbAAAAAAAAAAAAAAAAENob29zZSBhbiBhY2NvdW50IGFuZCBlbnRlciBhIHBvc2l0aXZlIGFtb3VudC4AAEF1dGhvcmlzaW5nIHdpdGhkcmF3YWwAAAAAAAAAAAAAQ2hvb3NlIHR3byBhY2NvdW50cwAAAAAAAAAAAAAAAABTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG11c3QgYmUgZGlmZmVyZW50LgAAAAAAAABDaGVjayB0aGUgdHJhbnNmZXIAAAAAAAAAAAAAAAAAAENob29zZSBib3RoIGFjY291bnRzIGFuZCBlbnRlciBhIHBvc2l0aXZlIGFtb3VudC4AAAAAAAAAAAAAAAAAAABUcmFuc2ZlcnJpbmcgZnVuZHMAAAAAAAAAAAAAAAAAAE93bmVyIG5hbWUgcmVxdWlyZWQAAAAAAAAAAAAAAAAARW50ZXIgdGhlIGNsaWVudOKAmXMgZnVsbCBuYW1lIHRvIG9wZW4gdGhlIGFjY291bnQuAAAAAAAAAAAAAAAAAHN1Ym1pdC1vcGVuLWFjY291bnQAAAAAAAAAAAAAAAAAQmFuayBkYXRhIHVuYXZhaWxhYmxlAAAAAAAAAAAAAABUaGUgJXMgcmVxdWVzdCBmYWlsZWQuIFJlZnJlc2ggdG8gdHJ5IGFnYWluLgAAAABUaGUgYnJvd3NlciBjb3VsZCBub3QgcmVhY2ggdGhlIGxlZGdlci4gQ2hlY2sgdGhlIGJyaWRnZSBkaWFnbm9zdGljcyBhbmQgdHJ5IGFnYWluLgAAAAAAAAAAAAAAAABUaGUgbGVkZ2VyIGZhaWxlZCB3aXRoIEhUVFAgJXMuIFRyeSBhZ2FpbiBzaG9ydGx5LgAAAAAAAAAAAAAAAAAAVGhlIGxlZGdlciByZWZ1c2VkIHRoZSByZXF1ZXN0IHdpdGggSFRUUCAlcywgYnV0IHJldHVybmVkIG5vIGVycm9yIGRldGFpbC4AAAAAAABUaGUgbGVkZ2VyIHJldHVybmVkIGFuIHVuZXhwZWN0ZWQgSFRUUCAlcyByZXNwb25zZS4AAAAAAAAAAAAAAAAAT3BlcmF0aW9uIHJlZnVzZWQAAAAAAAAAAAAAAAAAAABEZXBvc2l0IGNvbXBsZXRlAAAAAAAAAAAAAAAAAAAAAFdpdGhkcmF3YWwgY29tcGxldGUAAAAAAAAAAAAAAAAAVHJhbnNmZXIgY29tcGxldGUAAAAAAAAAAAAAAAAAAABUaGUgbGVkZ2VyIGFuZCBhY3Rpdml0eSBqb3VybmFsIGFyZSBub3cgdXAgdG8gZGF0ZS4AU3VjY2VzcwBJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyB1bnJlYWNoYWJsZQBBZGRyZXNzIGluIHVzZQBCcm9rZW4gcGlwZQBJL08gZXJyb3IATm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcwBObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBOb3QgYSBzb2NrZXQARGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZABNZXNzYWdlIHRvbyBsYXJnZQBQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQAUHJvdG9jb2wgbm90IGF2YWlsYWJsZQBQcm90b2NvbCBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MAT3BlcmF0aW9uIGluIHByb2dyZXNzAFN0YWxlIGZpbGUgaGFuZGxlAFF1b3RhIGV4Y2VlZGVkAE11bHRpaG9wIGF0dGVtcHRlZABDYXBhYmlsaXRpZXMgaW5zdWZmaWNpZW50AAAAAAAAAAAAAAAAAAAAdQJOANYB4gS5BBgBjgXtAhYE8gCXAwEDOAWvAYIBTwMvBB4A1AWiABIDHgPCAd4DCACsBQABZALxAWUFNAKMAs8CLQNMBOMFnwL4BBwFCAWxAksFFQJ4AFICPAPxA+QAwwN9BMwAqgN5BSQCbgFtAyIEqwREAPsBrgCDA2AA5QEHBJQEXgQrAFgBOQGSAMIFmwFDAkYB9gUAAAAAAAAZAAsAGRkZAAAAAAUAAAAAAAAJAAAAAAsAAAAAAAAAABkACgoZGRkDCgcAARsJCxgAAAkGCwAACwAGGQAAABkZGQAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAZAAsNGRkZAA0AAAIACQ4AAAAJAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAEwAAAAATAAAAAAkMAAAAAAAMAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA8AAAAEDwAAAAAJEAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAARAAAAABEAAAAACRIAAAAAABIAABIAABoAAAAaGhoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAABoaGgAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAABcAAAAAFwAAAAAJFAAAAAAAFAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAAAAAAAAAAAAVAAAAABUAAAAACRYAAAAAABYAABYAADAxMjM0NTY3ODlBQkNERUYAAEGo3gQLfAAAAgAAAAAABQAAAAAAAAAAAAAAjQAAAAAAAAAAAAAAAAAAAAAAAACOAAAAjwAAAHBAAQAAAAAAAAAAAAAAAAACAAAAAAAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAvAQAAmC8EbmFtZQASEXRhbG9uLWNsaWVudC53YXNtAbQukwIAFm9zcHJleV93ZWJfaG9zdF9yZW5kZXIBKl9faW1wb3J0ZWRfd2FzaV9zbmFwc2hvdF9wcmV2aWV3MV9mZF9jbG9zZQIpX19pbXBvcnRlZF93YXNpX3NuYXBzaG90X3ByZXZpZXcxX2ZkX3NlZWsDKl9faW1wb3J0ZWRfd2FzaV9zbmFwc2hvdF9wcmV2aWV3MV9mZF93cml0ZQQrX19pbXBvcnRlZF93YXNpX3NuYXBzaG90X3ByZXZpZXcxX3Byb2NfZXhpdAURX193YXNtX2NhbGxfY3RvcnMGBl9zdGFydAcOX19jbG9zdXJlX2ZuXzEIDl9fY2xvc3VyZV9mbl8wCShfX29zcF80eDYyNjE2ZTZiXzV4NGQ2ZjZlNjU3OV80eDczNjg2Zjc3CiRfX29zcF80eDYyNjE2ZTZiXzR4NGE3MzZmNmVfM3g2ZjYyNmELKl9fb3NwXzR4NjI2MTZlNmJfNHg0YTczNmY2ZV82eDY1NzM2MzYxNzA2NQwoX19vc3BfNHg2MjYxNmU2Yl80eDRhNzM2ZjZlXzV4NzE3NTZmNzQ2NQ0OX19jbG9zdXJlX2ZuXzIOJF9fb3NwXzR4NjI2MTZlNmJfNHg0YTczNmY2ZV8zeDYxNzI3Mg8OX19jbG9zdXJlX2ZuXzQQDl9fY2xvc3VyZV9mbl8zES5fX29zcF80eDYyNjE2ZTZiXzV4NGQ2ZjZlNjU3OV83eDcwNjU2ZTZlNjk2NTczEixfX29zcF80eDYyNjE2ZTZiXzV4NGQ2ZjZlNjU3OV82eDc0NzI2OTcwNmM2NRMqX19vc3BfNHg2MjYxNmU2Yl81eDRkNmY2ZTY1NzlfNXg2NzcyNmY3NTcwFA5fX2Nsb3N1cmVfZm5fNhUPX19jbG9zdXJlX2ZuXzM4Fg9fX2Nsb3N1cmVfZm5fODgXD19fY2xvc3VyZV9mbl84NxgPX19jbG9zdXJlX2ZuXzkwGQ5fX2Nsb3N1cmVfZm5fNRoOX19jbG9zdXJlX2ZuXzkbDl9fY2xvc3VyZV9mbl83HA5fX2Nsb3N1cmVfZm5fOB0PX19jbG9zdXJlX2ZuXzExHg9fX2Nsb3N1cmVfZm5fMTAfD19fY2xvc3VyZV9mbl8xNSAPX19jbG9zdXJlX2ZuXzE0IQ9fX2Nsb3N1cmVfZm5fMTMiD19fY2xvc3VyZV9mbl8xMiMPX19jbG9zdXJlX2ZuXzE2JA9fX2Nsb3N1cmVfZm5fMTclD19fY2xvc3VyZV9mbl80MCYPX19jbG9zdXJlX2ZuXzIyJw9fX2Nsb3N1cmVfZm5fMTgoD19fY2xvc3VyZV9mbl8yMSkPX19jbG9zdXJlX2ZuXzIwKg9fX2Nsb3N1cmVfZm5fMTkrD19fY2xvc3VyZV9mbl8yNSwPX19jbG9zdXJlX2ZuXzI0LQ9fX2Nsb3N1cmVfZm5fMjMuD19fY2xvc3VyZV9mbl8yOC8PX19jbG9zdXJlX2ZuXzI2MA9fX2Nsb3N1cmVfZm5fMjcxD19fY2xvc3VyZV9mbl8yOTImX19vc3BfNXg3NDYxNmM2ZjZlXzN4NDE3MDcwXzR4NzA2MTY3NjUzOV9fb3NwXzV4NzQ2MTZjNmY2ZV8xMng0Zjc2NjU3Mjc2Njk2NTc3NTA2MTY3NjVfNHg3NjY5NjU3NzQ5X19vc3BfNXg3NDYxNmM2ZjZlXzEyeDQxNjM2MzZmNzU2ZTc0NzM1MDYxNjc2NV80eDc2Njk2NTc3NTBfX29zcF81eDc0NjE2YzZmNmVfOHg0ZDZmNzY2NTUwNjE2NzY1XzR4NzY2OTY1Nzc2OV9fb3NwXzV4NzQ2MTZjNmY2ZV8xMng0MTYzNzQ2OTc2Njk3NDc5NTA2MTY3NjVfNHg3NjY5NjU3Nzc5X19vc3BfNXg3NDYxNmM2ZjZlXzEyeDUzNjU2Mzc1NzI2OTc0Nzk1MDYxNjc2NV80eDc2Njk2NTc3OA9fX2Nsb3N1cmVfZm5fMzA5Ll9fb3NwXzV4NzQ2MTZjNmY2ZV81eDRkNmY2NDY1NmNfNng2NTZlNjM2ZjY0NjU6D19fY2xvc3VyZV9mbl8zMTsPX19jbG9zdXJlX2ZuXzU3PDBfX29zcF81eDc0NjE2YzZmNmVfNXg0ZDZmNjQ2NTZjXzd4Njk2ZTY5NzQ2OTYxNmM9Nl9fb3NwXzV4NzQ2MTZjNmY2ZV84eDQzNmY2ZDZkNjE2ZTY0NzNfN3g2ODc5NjQ3MjYxNzQ2NT40X19vc3BfNXg3NDYxNmM2ZjZlXzZ4NTU3MDY0NjE3NDY1Xzh4NjQ2OTczNzA2MTc0NjM2OD8PX19jbG9zdXJlX2ZuXzMyQA9fX2Nsb3N1cmVfZm5fMzVBD19fY2xvc3VyZV9mbl8zNEIPX19jbG9zdXJlX2ZuXzMzQzJfX29zcF81eDc0NjE2YzZmNmVfOHg0MzZmNmQ2ZDYxNmU2NDczXzV4NjY2ZjYzNzU3M0Q4X19vc3BfNXg3NDYxNmM2ZjZlXzh4NDM2ZjZkNmQ2MTZlNjQ3M184eDZlNjE3NjY5Njc2MTc0NjVFD19fY2xvc3VyZV9mbl8zN0YPX19jbG9zdXJlX2ZuXzM2Rw9fX2Nsb3N1cmVfZm5fMzlID19fY2xvc3VyZV9mbl80MUkPX19jbG9zdXJlX2ZuXzQySg9fX2Nsb3N1cmVfZm5fNDNLD19fY2xvc3VyZV9mbl80NEwPX19jbG9zdXJlX2ZuXzQ1TUNfX29zcF81eDc0NjE2YzZmNmVfOHg0MjYxNmU2YjQ0NjE3NDYxXzEzeDY2NzI2MTYzNzQ2OTZmNmU0MzY1NmU3NDczTg9fX2Nsb3N1cmVfZm5fNDZPD19fY2xvc3VyZV9mbl80N1BBX19vc3BfNXg3NDYxNmM2ZjZlXzh4NDI2MTZlNmI0NDYxNzQ2MV8xMng3MDYxNzI3MzY1NjQ0MTZkNmY3NTZlNzRRP19fb3NwXzV4NzQ2MTZjNmY2ZV84eDQyNjE2ZTZiNDQ2MTc0NjFfMTF4NjE2ZDZmNzU2ZTc0NDM2NTZlNzQ3M1IPX19jbG9zdXJlX2ZuXzQ5Uw9fX2Nsb3N1cmVfZm5fNDhUMl9fb3NwXzV4NzQ2MTZjNmY2ZV84eDQyNjE2ZTZiNDQ2MTc0NjFfNXg3NDZmNzQ2MTZjVQ9fX2Nsb3N1cmVfZm5fNTFWD19fY2xvc3VyZV9mbl81MFcPX19jbG9zdXJlX2ZuXzUyWA9fX2Nsb3N1cmVfZm5fNTNZEF9fY2xvc3VyZV9mbl8xMDVaD19fY2xvc3VyZV9mbl81NlsPX19jbG9zdXJlX2ZuXzU1XA9fX2Nsb3N1cmVfZm5fNTRdMl9fb3NwXzV4NzQ2MTZjNmY2ZV82eDRjNjE3OTZmNzU3NF83eDczNjk2NDY1NjI2MTcyXjBfX29zcF81eDc0NjE2YzZmNmVfNng0YzYxNzk2Zjc1NzRfNng3NDZmNzA2MjYxNzJfD19fY2xvc3VyZV9mbl85M2AyX19vc3BfNXg3NDYxNmM2ZjZlXzZ4NGM2MTc5NmY3NTc0Xzd4NmM2ZjYxNjQ2OTZlNjdhMF9fb3NwXzV4NzQ2MTZjNmY2ZV82eDRjNjE3OTZmNzU3NF82eDZlNmY3NDY5NjM2NWIuX19vc3BfNXg3NDYxNmM2ZjZlXzZ4NGM2MTc5NmY3NTc0XzV4NmQ2ZjY0NjE2Y2MPX19jbG9zdXJlX2ZuXzk5ZC5fX29zcF81eDc0NjE2YzZmNmVfNXg0ZDZmNjQ2NTZjXzZ4NjQ2NTYzNmY2NDY1ZQ9fX2Nsb3N1cmVfZm5fNjBmD19fY2xvc3VyZV9mbl81OWcPX19jbG9zdXJlX2ZuXzU4aA9fX2Nsb3N1cmVfZm5fNjJpD19fY2xvc3VyZV9mbl82MWoPX19jbG9zdXJlX2ZuXzY1aw9fX2Nsb3N1cmVfZm5fNjRsD19fY2xvc3VyZV9mbl82M205X19vc3BfNXg3NDYxNmM2ZjZlXzV4NGQ2ZjY0NjU2Y18xMXg2MzZjNjU2MTcyNGU2Zjc0Njk2MzY1bj1fX29zcF81eDc0NjE2YzZmNmVfMTJ4NDE2MzYzNmY3NTZlNzQ3MzUwNjE2NzY1XzZ4NjQ2NTc0NjE2OTZjbxBfX2Nsb3N1cmVfZm5fMTA2cA9fX2Nsb3N1cmVfZm5fNjdxD19fY2xvc3VyZV9mbl82NnIPX19jbG9zdXJlX2ZuXzk2cw9fX2Nsb3N1cmVfZm5fNzF0D19fY2xvc3VyZV9mbl83MHUPX19jbG9zdXJlX2ZuXzY5dg9fX2Nsb3N1cmVfZm5fNjh3P19fb3NwXzV4NzQ2MTZjNmY2ZV84eDRkNmY3NjY1NTA2MTY3NjVfMTF4NjE2ZDZmNzU2ZTc0NDY2OTY1NmM2NHg6X19vc3BfNXg3NDYxNmM2ZjZlXzh4NGQ2Zjc2NjU1MDYxNjc2NV85eDZlNmY3NDY1NDY2OTY1NmM2NHkPX19jbG9zdXJlX2ZuXzcyeg9fX2Nsb3N1cmVfZm5fOTJ7D19fY2xvc3VyZV9mbl83M3wPX19jbG9zdXJlX2ZuXzc0fQ9fX2Nsb3N1cmVfZm5fNzV+D19fY2xvc3VyZV9mbl83N38PX19jbG9zdXJlX2ZuXzc2gAEPX19jbG9zdXJlX2ZuXzgwgQEPX19jbG9zdXJlX2ZuXzc5ggEPX19jbG9zdXJlX2ZuXzc4gwEPX19jbG9zdXJlX2ZuXzgzhAEPX19jbG9zdXJlX2ZuXzgyhQEPX19jbG9zdXJlX2ZuXzgxhgEPX19jbG9zdXJlX2ZuXzg2hwEPX19jbG9zdXJlX2ZuXzg1iAEPX19jbG9zdXJlX2ZuXzg0iQEPX19jbG9zdXJlX2ZuXzg5igEPX19jbG9zdXJlX2ZuXzkxiwEPX19jbG9zdXJlX2ZuXzk1jAEPX19jbG9zdXJlX2ZuXzk0jQEPX19jbG9zdXJlX2ZuXzk4jgEPX19jbG9zdXJlX2ZuXzk3jwEQX19jbG9zdXJlX2ZuXzEwMpABEF9fY2xvc3VyZV9mbl8xMDGRARBfX2Nsb3N1cmVfZm5fMTAwkgEQX19jbG9zdXJlX2ZuXzEwN5MBEF9fY2xvc3VyZV9mbl8xMDiUARBfX2Nsb3N1cmVfZm5fMTA5lQEQX19jbG9zdXJlX2ZuXzExMJYBEF9fY2xvc3VyZV9mbl8xMTGXATRfX29zcF81eDc0NjE2YzZmNmVfNng1NTcwNjQ2MTc0NjVfOHg3MjZmNzU3NDY1NDY2ZjcymAEyX19vc3BfNXg3NDYxNmM2ZjZlXzZ4NTU3MDY0NjE3NDY1Xzd4NmQ2ZjY0NjU0NjZmNzKZARBfX2Nsb3N1cmVfZm5fMTEzmgEQX19jbG9zdXJlX2ZuXzExMpsBEF9fY2xvc3VyZV9mbl8xMTScARBfX2Nsb3N1cmVfZm5fMTE2nQEQX19jbG9zdXJlX2ZuXzExNZ4BEF9fY2xvc3VyZV9mbl8xMTefARBfX2Nsb3N1cmVfZm5fMTE4oAEQX19jbG9zdXJlX2ZuXzExOaEBEF9fY2xvc3VyZV9mbl8xMjCiARBfX2Nsb3N1cmVfZm5fMTIyowEQX19jbG9zdXJlX2ZuXzEyMaQBEF9fY2xvc3VyZV9mbl8xMjalARBfX2Nsb3N1cmVfZm5fMTI1pgEQX19jbG9zdXJlX2ZuXzEyNKcBEF9fY2xvc3VyZV9mbl8xMjOoARBfX2Nsb3N1cmVfZm5fMTI3qQEQX19jbG9zdXJlX2ZuXzEyOKoBEF9fY2xvc3VyZV9mbl8xMjmrARBfX2Nsb3N1cmVfZm5fMTMwrAEQX19jbG9zdXJlX2ZuXzEzMq0BEF9fY2xvc3VyZV9mbl8xMzGuATBfX29zcF81eDc0NjE2YzZmNmVfNng1NTcwNjQ2MTc0NjVfNng2YzZmNjE2NDY1NjSvARBfX2Nsb3N1cmVfZm5fMTMzsAE7X19vc3BfNXg3NDYxNmM2ZjZlXzZ4NTU3MDY0NjE3NDY1XzExeDczNzQ2MTc0NzU3MzQ1NzI3MjZmNzKxARBfX2Nsb3N1cmVfZm5fMTM0sgEQX19jbG9zdXJlX2ZuXzEzN7MBEF9fY2xvc3VyZV9mbl8xMza0ARBfX2Nsb3N1cmVfZm5fMTM1tQEQX19jbG9zdXJlX2ZuXzE0MLYBEF9fY2xvc3VyZV9mbl8xMzm3ARBfX2Nsb3N1cmVfZm5fMTM4uAEPX19vcmlnaW5hbF9tYWluuQELX19tYWluX3ZvaWS6ARNvc3ByZXlfd2ViX2Rpc3BhdGNouwEKanNvbl9wYXJzZbwBC3BhcnNlX3ZhbHVlvQEJanZhbF9mcmVlvgEQcGFyc2Vfc3RyaW5nX3Jhd78BBmxvb2t1cMABCGpzb25fZ2V0wQELanNvbl9sZW5ndGjCAQlqc29uX2ZyZWXDAQlvc3BfYWxsb2PEARBvc3BfYWxsb2NfdGFnZ2VkxQEKb3NwX3JldGFpbsYBC29zcF9yZWxlYXNlxwEKb3NwX3N0cmxlbsgBFm9zcF9zdHJpbmdfc3RhcnRzX3dpdGjJARNvc3Bfc3RyaW5nX2luZGV4X29mygEPb3NwX3N0cmluZ190YWtlywEPb3NwX3N0cmluZ19kcm9wzAETb3NwX3N0cmluZ190b19sb3dlcs0BD29zcF9zdHJpbmdfdHJpbc4BEm9zcF9zdHJpbmdfcmVwbGFjZc8BFG9zcF9wYXJzZV9pbnRfc3RyaWN00AEWb3NwX3N0cmluZ19ieXRlX2xlbmd0aNEBEm9zcF9zdHJpbmdfYnl0ZV9hdNIBEW9zcHJleV93ZWJfcmVuZGVy0wENb3NwX3Byb2ZfYm9vdNQBD19fd2FzaV9mZF9jbG9zZdUBDl9fd2FzaV9mZF9zZWVr1gEPX193YXNpX2ZkX3dyaXRl1wEQX193YXNpX3Byb2NfZXhpdNgBDl9fd2FzaV9pbml0X3Rw2QEFZHVtbXnaARFfX3dhc21fY2FsbF9kdG9yc9sBB3RvbG93ZXLcAQdzcHJpbnRm3QEJdnNucHJpbnRm3gEIc25fd3JpdGXfAQh2c3ByaW50ZuABBm1lbWNtcOEBBnN0cmNhdOIBBnN0cmNtcOMBCF9fc3RwY3B55AEGc3RyY3B55QEGc3RyZHVw5gEGc3RybGVu5wEHc3RybmNtcOgBC19fc3RyY2hybnVs6QEGc3RyY2hy6gEGbWVtY2hy6wEGc3Ryc3Ry7AEPZm91cmJ5dGVfc3Ryc3Ry7QENdHdvd2F5X3N0cnN0cu4BFF9fcHRocmVhZF9tdXRleF9sb2Nr7wEWX19wdGhyZWFkX211dGV4X3VubG9ja/ABCl9fb2ZsX2xvY2vxAQxfX3N0ZGlvX2V4aXTyAQlfX3Rvd3JpdGXzAQlfX2Z3cml0ZXj0AQZmd3JpdGX1AQVkdW1tefYBCV9fbGN0cmFuc/cBCHN0cmVycm9y+AEHc3RybmxlbvkBB3djcnRvbWL6AQZ3Y3RvbWL7AQVmcmV4cPwBHF9fd2FzaWxpYmNfcG9wdWxhdGVfcHJlb3BlbnP9AQVjbG9zZf4BDV9fc3RkaW9fY2xvc2X/AQZ3cml0ZXaAAg1fX3N0ZGlvX3dyaXRlgQIHX19sc2Vla4ICDF9fc3RkaW9fc2Vla4MCBWZwdXRzhAIFYWJvcnSFAgh2ZnByaW50ZoYCC3ByaW50Zl9jb3JlhwIHcG9wX2FyZ4gCA3BhZIkCGWxvbmdfZG91YmxlX25vdF9zdXBwb3J0ZWSKAgRzYnJriwIGbWFsbG9jjAIIZGxtYWxsb2ONAg1wcmVwZW5kX2FsbG9jjgIEZnJlZY8CBmRsZnJlZZACBmNhbGxvY5ECB3JlYWxsb2OSAg1kaXNwb3NlX2NodW5rBzMCAA9fX3N0YWNrX3BvaW50ZXIBH0dPVC5kYXRhLmludGVybmFsLl9fbWVtb3J5X2Jhc2UJEQIABy5yb2RhdGEBBS5kYXRhAC8JcHJvZHVjZXJzAQxwcm9jZXNzZWQtYnkBDkhvbWVicmV3IGNsYW5nBjIyLjEuMgCUAQ90YXJnZXRfZmVhdHVyZXMIKwtidWxrLW1lbW9yeSsPYnVsay1tZW1vcnktb3B0KxZjYWxsLWluZGlyZWN0LW92ZXJsb25nKwptdWx0aXZhbHVlKw9tdXRhYmxlLWdsb2JhbHMrE25vbnRyYXBwaW5nLWZwdG9pbnQrD3JlZmVyZW5jZS10eXBlcysIc2lnbi1leHQ=\",fv=64,ov=\"X-Osprey-Request-Id\",yv=new TextDecoder(\"utf-8\"),j1=new TextEncoder;function Y1(l){return j1.encode(String(l??\"\")).byteLength}function G1(l){return Math.max(0,Math.round((performance.now()-l)*100)/100)}function sv(l){try{return new URL(String(l??\"\"),\"http://osprey.invalid\").pathname||\"/\"}catch{return String(l??\"\").split(/[?#]/,1)[0]||\"/\"}}function mv(l,t,u){let a=Object.keys(l).find(e=>e.toLowerCase()===t.toLowerCase());l[a??t]=u}function dv(l,t){let u=String(t?.message??t??\"Unknown network error\");return JSON.stringify({error:\"\".concat(l.method,\" \").concat(l.url,\" could not reach the ledger: \").concat(u)})}function hv(l){let t=l?.osprey_web_dispatch??l?.dispatch??l?.osprey_dispatch;if(typeof t!=\"function\")throw new Error(\"Osprey wasm must export osprey_web_dispatch\");return t}function vv(l,t){let u={...l,model:t};for(let[a,e]of Object.entries(u))e==null?delete u[a]:typeof e==\"object\"?u[a]=JSON.stringify(e):[\"string\",\"number\",\"boolean\"].includes(typeof e)||(u[a]=String(e));return u}function Sv(l){let t=String(l.method||\"GET\").toUpperCase(),u={...l.headers??{}},a={method:t,headers:u};return!(l.body!==void 0&&l.body!==\"\")||t===\"GET\"||t===\"HEAD\"||(a.body=typeof l.body==\"string\"?l.body:JSON.stringify(l.body),Object.keys(u).some(i=>i.toLowerCase()===\"content-type\")||(u[\"Content-Type\"]=\"application/json\")),a}function X1(l,t,u){return{kind:\"http\",id:String(l.id??l.commandId??\"\"),status:t,data:u}}function gv(l,t){return{wasi_snapshot_preview1:t.imports,osprey_web:{render:u=>l.renderPointer(u),command:u=>l.commandPointer(u)}}}function rv(l){if(typeof l._start==\"function\")l._start();else if(typeof l.main==\"function\")l.main();else throw new Error(\"Osprey wasm must export _start\")}function bv(){return{ready:!1,renders:0,events:0,lastPayloadBytes:0,lastDecodeMs:0,trace:[]}}function Ev(l){if(!l||l.startsWith(\"__OSPREY_WASM_\"))throw new Error(\"The Osprey WebAssembly payload was not embedded\");let t=atob(l),u=new Uint8Array(t.length);for(let a=0;a{this.exports&&this.dispatch({kind:\"location\",value:window.location.hash})},window.addEventListener(\"popstate\",this.onPopState)}readCString(t){let u=Number(t);if(!this.memory||!Number.isSafeInteger(u)||u<=0)throw new Error(\"Invalid Osprey string pointer: \".concat(String(t)));let a=new Uint8Array(this.memory.buffer),e=u;for(;ethis.runCommands(a)),0}commitEnvelope(t){let u=H1(t);this.model=u.model;let a=++this.renderSequence;this.root.render(N1(u.view,e=>this.dispatch(e))),u.commands.length&&queueMicrotask(()=>{a<=this.renderSequence&&this.runCommands(u.commands)})}allocate(t){let u=this.exports?.osp_alloc??this.exports?.osprey_web_alloc??this.exports?.malloc??this.exports?.alloc;if(typeof u!=\"function\")throw new Error(\"Osprey wasm must export osp_alloc\");try{return Number(u(BigInt(t)))}catch(a){if(!(a instanceof TypeError))throw a;return Number(u(t))}}dispatch(t){if(!this.exports)return;let u=hv(this.exports),a=this.writeDispatch(t);this.acceptDispatchResult(u(a))}writeDispatch(t){let u=j1.encode(\"\".concat(JSON.stringify(vv(t,this.model)),\"\\0\"));this.bridge.events+=1,this.bridge.lastPayloadBytes=u.byteLength-1;let a=this.allocate(u.byteLength);return new Uint8Array(this.memory.buffer,a,u.byteLength).set(u),a}acceptDispatchResult(t){let u=Number(t??0);Number.isSafeInteger(u)&&u>0&&this.commitEnvelope(this.readJson(u))}httpContext(t,u){let a=String(t.id||\"http\");return this.httpSequence+=1,{correlationId:\"\".concat(a,\"-\").concat(this.httpSequence),commandId:a,method:u.method,url:sv(t.url),requestBytes:Y1(u.body)}}recordHttp(t,u=\"info\"){this.bridge.trace.push(t);let a=this.bridge.trace.length-fv;a>0&&this.bridge.trace.splice(0,a),(this.logger[u]??this.logger.info??this.logger.log)?.call(this.logger,\"[talon:bridge]\",t)}completeHttp(t,u,a,e){let n={...t,phase:\"response\",status:a,responseBytes:Y1(e),durationMs:G1(u)};this.recordHttp(n,a>=400?\"warn\":\"info\"),this.dispatch(X1(t,a,e))}failHttp(t,u,a){let e={...t,phase:\"response\",status:0,responseBytes:0,durationMs:G1(u),error:String(a?.message??a)};this.recordHttp(e,\"warn\"),this.dispatch(X1(t,0,dv(t,a)))}async runHttp(t){let u=performance.now(),a=Sv(t),e=this.httpContext(t,a);mv(a.headers,ov,e.correlationId),this.recordHttp({...e,phase:\"request\"});try{let n=await fetch(t.url,a),i=await n.text();this.completeHttp(e,u,n.status,i)}catch(n){this.failHttp(e,u,n)}}runFocus(t){requestAnimationFrame(()=>{document.getElementById(String(t.id??\"\"))?.focus({preventScroll:!1})})}runNavigate(t){let u=String(t.url??\"\");u&&(t.replace===!0||t.replace===\"true\"?window.history.replaceState(null,\"\",u):window.history.pushState(null,\"\",u))}runCommands(t){for(let u of t)if(!(!u||typeof u!=\"object\"))switch(C1(u)){case\"http\":this.runHttp(u);break;case\"focus\":this.runFocus(u);break;case\"navigate\":this.runNavigate(u);break;default:console.warn(\"Unknown Osprey web command\",u)}}async start(t){let u=R1(e=>console.debug(\"[osprey]\",e.trimEnd())),{instance:a}=await WebAssembly.instantiate(t,gv(this,u));return this.attachInstance(a,u),rv(a.exports),u.flush(),this.bridge.ready=!0,window.location.hash&&this.dispatch({kind:\"location\",value:window.location.hash}),this}attachInstance(t,u){if(this.exports=t.exports,this.memory=t.exports.memory,!(this.memory instanceof WebAssembly.Memory))throw new Error(\"Osprey wasm must export memory\");u.setMemory(this.memory)}};async function qf(){let l=new Bf(zv());window.__OSPREY_WEB__=l;try{await l.start(Ev(cv)),document.documentElement.dataset.ospreyReady=\"true\"}catch(t){console.error(\"Osprey web host failed\",t),document.documentElement.dataset.ospreyReady=\"false\",l.root.render(kt.default.createElement(Tv,{error:t}))}}document.readyState===\"loading\"?document.addEventListener(\"DOMContentLoaded\",()=>{qf()},{once:!0}):qf();})();\n" diff --git a/examples/projects/modules/test/accounts.test.ospml b/examples/projects/modules/test/accounts.test.ospml index 656b8769..9723d619 100644 --- a/examples/projects/modules/test/accounts.test.ospml +++ b/examples/projects/modules/test/accounts.test.ospml @@ -144,8 +144,51 @@ rowCase () = bs = "\\" +// --- MOCKING VIA ALGEBRAIC EFFECTS [TESTING-EFFECT-MOCKS] --- +// +// `Vault` is the same capability shape main.ospml wires to SQLite via +// Ledger::Store. Business logic performs against the EFFECT; each test +// installs its own handler — a mock — so one workflow is proven against +// any storage behavior with no database, no injection framework, and +// compile-time safety: forget a handler and the suite refuses to build. +effect Vault + balance : int => int + debit : (int, int) => Outcome + +// The workflow under test: rent only moves when the guard says it can. +payRent account cents = match Accounts::movable cents && perform Vault.balance account >= cents + true => perform Vault.debit account cents + false => Refused(why = "blocked by guard") + +// Mock 1: a flush account — every debit lands on a fixed 9000-cent float. +flushVault () = handle Vault + balance id => 9000 + debit id cents => Landed(balance = 9000 - cents) +in settle (payRent 1 2500) + +// Mock 2: a broke account — the guard refuses before storage is even asked. +brokeVault () = handle Vault + balance id => 40 + debit id cents => Landed(balance = 0) +in settle (payRent 1 2500) + +// Mock 3: interaction spy — proves the guard SHORT-CIRCUITS on a bad amount. +// The arms are poisoned to PASS the guard and land if ever consulted: a +// "landed"/"vault touched" result would unmask a zero-cent debit reaching +// storage, so "refused blocked by guard" proves domain-only refusal. +spyVault () = handle Vault + balance id => 999999 + debit id cents => Refused(why = "vault touched") +in settle (payRent 1 0) + +mockedVaultCase () = + landed = check ("flush vault lands the rent", "landed 6500", flushVault ()) + refused = andThen landed (check ("broke vault refuses via the guard", "refused blocked by guard", brokeVault ())) + andThen refused (check ("zero cents never reaches storage", "refused blocked by guard", spyVault ())) + test "namable enforces a non-empty owner" namableCase test "movable enforces positive whole cents" movableCase test "Outcome classifies landed vs refused" outcomeCase test "Account renders escaped JSON" jsonCase test "Account renders an aligned TUI row" rowCase +test "effect handlers mock the vault per test" mockedVaultCase diff --git a/examples/tested/basics/cursor/utf8_walk.osp b/examples/tested/basics/cursor/utf8_walk.osp index 22d352b2..471db6eb 100644 --- a/examples/tested/basics/cursor/utf8_walk.osp +++ b/examples/tested/basics/cursor/utf8_walk.osp @@ -41,21 +41,26 @@ let total = walk(s, 0, 0) print("codepoints = ${total}") // PROOF: a multi-script string holds fewer codepoints than UTF-8 bytes. -print(match total < bytes { +// (Bound before printing so the ML twin — whose layout grammar cannot nest a +// match inside a call — stays an exact structural translation.) +let proof = match total < bytes { true => "PROOF codepoints(${total}) < bytes(${bytes}): non-ASCII costs >1 byte" false => "PROOF FAILED: expected fewer codepoints than bytes" -}) +} +print(proof) // Round-trip the 4-byte emoji scalar to confirm the decoder read it whole. -print(match codePointAt(s, 6) { +let emoji = match codePointAt(s, 6) { Success { value } => "emoji scalar @byte 6 = ${value}" Error { message } => "emoji decode FAILED: ${message}" -}) +} +print(emoji) // codePointAt landing mid-sequence must be rejected (byte 7 is inside 😀). -print(match codePointAt(s, 7) { +let mid = match codePointAt(s, 7) { Success { value } => "mid-sequence unexpectedly decoded ${value}" Error { message } => "mid-sequence rejected: ${message}" -}) +} +print(mid) print("=== walk complete ===") 0 diff --git a/examples/wasm/build/hello.wasm b/examples/wasm/build/hello.wasm index 37e53083..f6fc0cab 100755 Binary files a/examples/wasm/build/hello.wasm and b/examples/wasm/build/hello.wasm differ diff --git a/examples/wasm/build/studio.osp.wasm b/examples/wasm/build/studio.osp.wasm index c5c04bb0..76b29029 100755 Binary files a/examples/wasm/build/studio.osp.wasm and b/examples/wasm/build/studio.osp.wasm differ diff --git a/examples/wasm/build/studio.ospml.wasm b/examples/wasm/build/studio.ospml.wasm index 262f4525..a096b506 100755 Binary files a/examples/wasm/build/studio.ospml.wasm and b/examples/wasm/build/studio.ospml.wasm differ diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..9d714756 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,6 @@ +[tool] + +[tool.basilisk] + +[tool.basilisk.rule-tags] +basilisk = "error" diff --git a/vscode-extension/client/src/test-explorer-parse.ts b/vscode-extension/client/src/test-explorer-parse.ts index 3a9602ba..51d98d5c 100644 --- a/vscode-extension/client/src/test-explorer-parse.ts +++ b/vscode-extension/client/src/test-explorer-parse.ts @@ -114,6 +114,10 @@ const TAP_RESULT = /^(not )?ok \d+ - (.*?)(?: # SKIP ?(.*))?$/; const TAP_COMMENT = /^#\s?(.*)$/; const TAP_PLAN = /^\d+\.\.\d+$/; const TAP_SUMMARY = /^tests=\d+ passed=\d+ failed=\d+/; +// `osprey test` runner chrome ([TESTING-CLI-RUN], [TESTING-COVERAGE-CLI]): +// per-file headers, coverage rates, and the suite tally are progress lines, +// not failure diagnostics. +const TEST_RUNNER_CHROME = /^(file: |coverage(?: total)?: |suites: \d+ passed)/; /** * Parse a TAP stream ([TESTING-TAP]): one entry per `ok`/`not ok` line, each @@ -274,7 +278,7 @@ export function strayFailureMessage( const diagnostics = [ ...stream.results.flatMap((result) => result.comments), ...stream.strayComments, - ].filter((comment) => !TAP_SUMMARY.test(comment)); + ].filter((comment) => !TAP_SUMMARY.test(comment) && !TEST_RUNNER_CHROME.test(comment)); return ( diagnostics.join("\n") || stderr.trim() || @@ -311,3 +315,82 @@ export function compileFailureMessage(stderr: string, exitCode: number): string export function toTerminalOutput(text: string): string { return text.replace(/\r?\n/g, "\r\n"); } + +/** One file's coverage: 1-based source line → hit count ([TESTING-COVERAGE-JSON]). */ +export type LineHits = ReadonlyMap; + +/** + * The CLI arguments for one coverage run of a test file + * ([TESTING-COVERAGE-CLI]): `osprey test` instruments the build, writes the + * machine-readable report, and streams the same TAP the plain run produces. + * `--quiet` drops the per-file chrome; `--filter` scopes to one case. + */ +export function coverageRunArgs( + filePath: string, + jsonPath: string, + filter: string | undefined, +): string[] { + return [ + "test", + filePath, + "--coverage-json", + jsonPath, + "--quiet", + ...(filter === undefined ? [] : ["--filter", filter]), + ]; +} + +function parsedLineHits(value: unknown): Map | undefined { + const lines = (value as { lines?: unknown }).lines; + if (typeof lines !== "object" || lines === null) { + return undefined; + } + const hits = new Map(); + for (const [line, count] of Object.entries(lines)) { + const lineNumber = Number(line); + if (!Number.isInteger(lineNumber) || typeof count !== "number") { + return undefined; + } + hits.set(lineNumber, count); + } + return hits; +} + +/** + * Parse the `--coverage-json` report ([TESTING-COVERAGE-JSON]): + * `{"files":{"":{"lines":{"":hits}}}}` → path → line hits. + * `undefined` on any malformation — coverage then degrades to absent, never + * to wrong numbers. + */ +export function parseCoverageJson(text: string): Map | undefined { + let parsed: unknown; + try { + parsed = JSON.parse(text); + } catch { + return undefined; + } + const files = (parsed as { files?: unknown }).files; + if (typeof files !== "object" || files === null) { + return undefined; + } + const report = new Map(); + for (const [file, value] of Object.entries(files)) { + const hits = parsedLineHits(value); + if (hits === undefined) { + return undefined; + } + report.set(file, hits); + } + return report; +} + +/** Covered/total line counts for one file's hits (the summary badge numbers). */ +export function coverageCounts(hits: LineHits): { covered: number; total: number } { + let covered = 0; + for (const count of hits.values()) { + if (count > 0) { + covered += 1; + } + } + return { covered, total: hits.size }; +} diff --git a/vscode-extension/client/src/test-explorer.ts b/vscode-extension/client/src/test-explorer.ts index 86b9628d..220e7cda 100644 --- a/vscode-extension/client/src/test-explorer.ts +++ b/vscode-extension/client/src/test-explorer.ts @@ -6,17 +6,22 @@ // wiring, structured like debug-panel.ts. import { spawn, type ChildProcess } from "child_process"; +import { promises as fs } from "fs"; +import * as os from "os"; import * as path from "path"; import type { Readable } from "stream"; import * as vscode from "vscode"; import { compileFailureMessage, + coverageCounts, + coverageRunArgs, discoveryOutcome, excludedIdSet, fileTestId, isCompileFailure, leafTestId, outcomeForLeaf, + parseCoverageJson, parseTapStream, planRun, strayFailureMessage, @@ -27,6 +32,7 @@ import { type ExecResult, type FilePlan, type LeafOutcome, + type LineHits, type TestListParse, } from "./test-explorer-parse"; @@ -58,6 +64,8 @@ export interface TestRunSink { skipped(test: vscode.TestItem): void; appendOutput(output: string): void; end(): void; + /** Coverage runs report each file's line hits here ([TESTING-COVERAGE-VSCODE]). */ + addLineCoverage?(uri: vscode.Uri, hits: LineHits): void; } // On POSIX the compiler child is spawned detached (its own process group) so @@ -183,6 +191,7 @@ export async function refreshTestFile( controller: vscode.TestController, uri: vscode.Uri, compiler: string, + token?: vscode.CancellationToken, ): Promise { const item = getOrCreateFileItem(controller, uri); const result = await runCompiler( @@ -190,6 +199,7 @@ export async function refreshTestFile( [uri.fsPath, "--list-tests"], path.dirname(uri.fsPath), process.env, + token, ); applyDiscovery(controller, item, uri, discoveryOutcome(result)); return item; @@ -252,7 +262,9 @@ function includedChildren( // case when `filter` is set — [TESTING-FILTER]) and reports every leaf's // outcome. A compile error (non-zero exit, no TAP) marks `errorTarget` (the // file item for whole-file runs, the leaf for filtered runs) and any other -// started leaves errored with the compiler's stderr. +// started leaves errored with the compiler's stderr. A coverage run goes +// through `osprey test --coverage-json` instead — same TAP, plus the report +// fed back through the sink ([TESTING-COVERAGE-VSCODE]). async function runLeaves( errorTarget: vscode.TestItem, leaves: vscode.TestItem[], @@ -260,6 +272,7 @@ async function runLeaves( sink: TestRunSink, token: vscode.CancellationToken, compiler: string, + coverage: boolean, ): Promise { const uri = errorTarget.uri; if (uri === undefined) { @@ -269,12 +282,50 @@ async function runLeaves( sink.enqueued(leaf); sink.started(leaf); } - const env = testRunEnv(process.env, filter); - const result = await runCompiler(compiler, [uri.fsPath, "--run"], path.dirname(uri.fsPath), env, token); + const env = testRunEnv(process.env, coverage ? undefined : filter); + const jsonPath = coverage ? coverageJsonPath(uri) : undefined; + const args = + jsonPath === undefined ? [uri.fsPath, "--run"] : coverageRunArgs(uri.fsPath, jsonPath, filter); + const result = await runCompiler(compiler, args, path.dirname(uri.fsPath), env, token); if (token.isCancellationRequested) { return; } reportLeaves(errorTarget, leaves, result, sink); + if (jsonPath !== undefined) { + await reportCoverage(uri, jsonPath, sink); + } +} + +/** Where one file's coverage report lands (unique per file, per session). */ +function coverageJsonPath(uri: vscode.Uri): string { + const stem = path.basename(uri.fsPath).replace(/[^A-Za-z0-9_.-]/g, "_"); + return path.join(os.tmpdir(), `osprey-cov-${process.pid}-${stem}.json`); +} + +/** Read, parse, and forward one run's coverage report, then drop the file. */ +async function reportCoverage( + uri: vscode.Uri, + jsonPath: string, + sink: TestRunSink, +): Promise { + if (sink.addLineCoverage === undefined) { + return; + } + let text: string; + try { + text = await fs.readFile(jsonPath, "utf8"); + } catch { + return; // compile failure — no report was written + } + await fs.rm(jsonPath, { force: true }); + const report = parseCoverageJson(text); + if (report === undefined) { + return; + } + for (const hits of report.values()) { + // `osprey test ` reports exactly the one suite it ran. + sink.addLineCoverage(uri, hits); + } } function reportCompileFailure( @@ -319,20 +370,21 @@ async function runPlan( sink: TestRunSink, token: vscode.CancellationToken, compiler: string, + coverage: boolean, ): Promise { const leaves = plan.wholeFile ? includedChildren(plan.file, excluded) : plan.leaves; // One unfiltered process only when the whole file truly runs. A whole-file // request with exclusions falls through to per-leaf filtered runs so the // excluded cases never execute — not merely go unreported. if (plan.wholeFile && leaves.length === plan.file.children.size) { - await runLeaves(plan.file, leaves, undefined, sink, token, compiler); + await runLeaves(plan.file, leaves, undefined, sink, token, compiler, coverage); return; } for (const leaf of leaves) { if (token.isCancellationRequested) { return; } - await runLeaves(leaf, [leaf], leaf.label, sink, token, compiler); + await runLeaves(leaf, [leaf], leaf.label, sink, token, compiler, coverage); } } @@ -342,10 +394,11 @@ async function ensureFileResolved( controller: vscode.TestController, plan: FilePlan, compiler: string, + token: vscode.CancellationToken, ): Promise { const uri = plan.file.uri; if (plan.wholeFile && uri !== undefined && plan.file.children.size === 0) { - await refreshTestFile(controller, uri, compiler); + await refreshTestFile(controller, uri, compiler, token); } } @@ -356,17 +409,25 @@ export async function executeRunRequest( sink: TestRunSink, token: vscode.CancellationToken, resolveCompiler: () => string, + coverage = false, ): Promise { const excluded = excludedIdSet(request.exclude); - for (const plan of planRun(requestedItems(controller, request), excluded)) { - if (token.isCancellationRequested) { - break; + // end() MUST fire on every exit path — a thrown discovery/report error or a + // reporting call rejected by an already-cancelled TestRun would otherwise + // leave the run spinning forever in the Testing view, uncancellable (Stop + // only signals the token; VS Code retires a run only when end() is called). + try { + for (const plan of planRun(requestedItems(controller, request), excluded)) { + if (token.isCancellationRequested) { + break; + } + const compiler = resolveCompiler(); + await ensureFileResolved(controller, plan, compiler, token); + await runPlan(plan, excluded, sink, token, compiler, coverage); } - const compiler = resolveCompiler(); - await ensureFileResolved(controller, plan, compiler); - await runPlan(plan, excluded, sink, token, compiler); + } finally { + sink.end(); } - sink.end(); } /** The handler behind the default Run profile: one real TestRun per request. */ @@ -378,6 +439,73 @@ export function makeRunHandler( executeRunRequest(controller, request, controller.createTestRun(request), token, resolveCompiler); } +/** + * Detailed line coverage stashed per FileCoverage instance, served back + * through the profile's loadDetailedCoverage hook — VS Code renders the + * percentage in the Test Coverage view and the hits in the editor gutter + * ([TESTING-COVERAGE-VSCODE]). + */ +const detailedCoverage = new WeakMap(); + +/** The gutter detail stashed for one FileCoverage (what the Coverage profile's + * loadDetailedCoverage serves). Exported so tests can prove the per-line + * StatementCoverage values without reaching into VS Code internals. */ +export function detailedCoverageFor( + fileCoverage: vscode.FileCoverage, +): vscode.StatementCoverage[] { + return detailedCoverage.get(fileCoverage) ?? []; +} + +/** + * A TestRun-backed sink whose coverage lands on the run as FileCoverage. + * Exported so tests can assert the exact TestCoverageCount (the numbers VS + * Code renders as the coverage percentage) against a recording run. + */ +export function coverageSink(run: vscode.TestRun): TestRunSink { + return { + enqueued: (test) => run.enqueued(test), + started: (test) => run.started(test), + passed: (test, duration) => run.passed(test, duration), + failed: (test, message, duration) => run.failed(test, message, duration), + errored: (test, message, duration) => run.errored(test, message, duration), + skipped: (test) => run.skipped(test), + appendOutput: (output) => run.appendOutput(output), + end: () => run.end(), + addLineCoverage: (uri, hits) => { + const counts = coverageCounts(hits); + const file = new vscode.FileCoverage( + uri, + new vscode.TestCoverageCount(counts.covered, counts.total), + ); + detailedCoverage.set( + file, + [...hits].map( + ([line, count]) => + // Coverage lines are 1-based; vscode positions are 0-based. + new vscode.StatementCoverage(count, new vscode.Position(Math.max(line - 1, 0), 0)), + ), + ); + run.addCoverage(file); + }, + }; +} + +/** The handler + detail loader behind the Coverage profile. */ +export function makeCoverageHandler( + controller: vscode.TestController, + resolveCompiler: () => string, +): (request: vscode.TestRunRequest, token: vscode.CancellationToken) => Promise { + return (request, token) => + executeRunRequest( + controller, + request, + coverageSink(controller.createTestRun(request)), + token, + resolveCompiler, + true, + ); +} + /** The file-watcher callbacks (exported so they are directly testable). */ export function makeWatcherHandlers( controller: vscode.TestController, @@ -408,6 +536,18 @@ export function registerOspreyTestExplorer( makeRunHandler(controller, resolveCompiler), true, ); + // Coverage profile ([TESTING-COVERAGE-VSCODE]): same discovery and TAP + // mapping, but each file runs through `osprey test --coverage-json`; VS Code + // shows the percentage in the Test Coverage view and hit counts in the + // gutter via the detail loader. + const coverageProfile = controller.createRunProfile( + "Coverage", + vscode.TestRunProfileKind.Coverage, + makeCoverageHandler(controller, resolveCompiler), + true, + ); + coverageProfile.loadDetailedCoverage = (_run, fileCoverage) => + Promise.resolve(detailedCoverage.get(fileCoverage) ?? []); const handlers = makeWatcherHandlers(controller, resolveCompiler); const watcher = vscode.workspace.createFileSystemWatcher(TEST_FILE_GLOB); watcher.onDidCreate((uri) => void handlers.refresh(uri)); diff --git a/vscode-extension/test/suite/test-explorer-harness.ts b/vscode-extension/test/suite/test-explorer-harness.ts index fb680a74..1448f26f 100644 --- a/vscode-extension/test/suite/test-explorer-harness.ts +++ b/vscode-extension/test/suite/test-explorer-harness.ts @@ -51,6 +51,19 @@ test("fine", fn() => { expect(add(1, 1), 5) `; +/** + * A covered `double` (line 1) and a never-called `unused` (line 3): a coverage + * run must report line 3 with 0 hits ([TESTING-COVERAGE-VSCODE]). + */ +export const COVERAGE_FIXTURE = `fn double(x) = x * 2 + +fn unused(x) = x * 99 + +test("doubles", fn() => { + expect(double(5), 10) +}) +`; + export interface SinkEvent { kind: "enqueued" | "started" | "passed" | "failed" | "errored" | "skipped" | "end"; id?: string; @@ -68,6 +81,8 @@ function messageText(message: SinkMessage): string { export class RecordingSink implements TestRunSink { public readonly events: SinkEvent[] = []; public output = ""; + /** Coverage reports ([TESTING-COVERAGE-VSCODE]): fsPath → line → hits. */ + public readonly coverage = new Map>(); private record(kind: SinkEvent["kind"], test?: vscode.TestItem, message?: SinkMessage): void { this.events.push({ @@ -84,6 +99,9 @@ export class RecordingSink implements TestRunSink { public skipped(test: vscode.TestItem): void { this.record("skipped", test); } public appendOutput(output: string): void { this.output += output; } public end(): void { this.record("end"); } + public addLineCoverage(uri: vscode.Uri, hits: ReadonlyMap): void { + this.coverage.set(uri.fsPath, hits); + } public ofKind(kind: SinkEvent["kind"]): SinkEvent[] { return this.events.filter((event) => event.kind === kind); } diff --git a/vscode-extension/test/suite/test-explorer-parse.test.ts b/vscode-extension/test/suite/test-explorer-parse.test.ts index 9d687789..f040440f 100644 --- a/vscode-extension/test/suite/test-explorer-parse.test.ts +++ b/vscode-extension/test/suite/test-explorer-parse.test.ts @@ -6,12 +6,15 @@ import * as assert from "assert"; import { compileFailureMessage, + coverageCounts, + coverageRunArgs, discoveryOutcome, excludedIdSet, fileTestId, isCompileFailure, leafTestId, outcomeForLeaf, + parseCoverageJson, parseTapOutput, parseTapStream, parseTestList, @@ -236,6 +239,59 @@ suite("Test Explorer parsing", () => { assert.strictEqual(toTerminalOutput("a\nb\n"), "a\r\nb\r\n"); assert.strictEqual(toTerminalOutput("a\r\nb"), "a\r\nb"); }); + + // [TESTING-COVERAGE-CLI] chrome from `osprey test` never masquerades as a + // stray-failure diagnostic. + test("strayFailureMessage drops osprey test runner chrome", () => { + const stream = parseTapStream( + [ + "# file: money.test.ospml", + "ok 1 - fine", + "1..1", + "# coverage: 83.3% (5/6 lines) money.test.ospml", + "# coverage total: 83.3% (5/6 lines)", + "# suites: 1 passed, 0 failed", + ].join("\n"), + ); + assert.strictEqual(strayFailureMessage(stream, 1, "boom"), "boom"); + }); + }); + + suite("coverage report", () => { + // [TESTING-COVERAGE-CLI]: the arguments for one instrumented run. + test("coverageRunArgs builds the osprey test invocation", () => { + assert.deepStrictEqual(coverageRunArgs("m.test.osp", "cov.json", undefined), [ + "test", + "m.test.osp", + "--coverage-json", + "cov.json", + "--quiet", + ]); + assert.deepStrictEqual( + coverageRunArgs("m.test.osp", "cov.json", "one case").slice(-2), + ["--filter", "one case"], + ); + }); + + // [TESTING-COVERAGE-JSON] parsing and the covered/total badge numbers. + test("parseCoverageJson maps files to line hits; malformed input degrades to absent", () => { + const report = parseCoverageJson( + '{"files":{"m.test.osp":{"lines":{"3":2,"7":0,"12":1}}}}', + ); + assert.ok(report); + const hits = report.get("m.test.osp"); + assert.ok(hits); + assert.strictEqual(hits.get(7), 0); + assert.deepStrictEqual(coverageCounts(hits), { covered: 2, total: 3 }); + + assert.strictEqual(parseCoverageJson("not json"), undefined); + assert.strictEqual(parseCoverageJson('{"nope":true}'), undefined); + assert.strictEqual( + parseCoverageJson('{"files":{"f":{"lines":{"x":1}}}}'), + undefined, + ); + assert.strictEqual(parseCoverageJson('{"files":{"f":{}}}'), undefined); + }); }); suite("planRun", () => { diff --git a/vscode-extension/test/suite/test-explorer.test.ts b/vscode-extension/test/suite/test-explorer.test.ts index cc51c5f5..001d860b 100644 --- a/vscode-extension/test/suite/test-explorer.test.ts +++ b/vscode-extension/test/suite/test-explorer.test.ts @@ -10,14 +10,14 @@ import * as path from "path"; import * as vscode from "vscode"; import { fileTestId, leafTestId } from "../../client/src/test-explorer-parse"; import { - executeRunRequest, makeRunHandler, makeWatcherHandlers, refreshTestFile, - registerOspreyTestExplorer, removeTestFile, requestedItems, - scanWorkspaceTestFiles, testFileLabel, + coverageSink, detailedCoverageFor, executeRunRequest, makeRunHandler, + makeWatcherHandlers, refreshTestFile, registerOspreyTestExplorer, + removeTestFile, requestedItems, scanWorkspaceTestFiles, testFileLabel, } from "../../client/src/test-explorer"; import { resolveBuiltOsprey } from "./osprey-test-env"; import { - BROKEN_FIXTURE, FAIL_FIXTURE, ML_FIXTURE, PASS_FIXTURE, RecordingSink, - STRAY_FIXTURE, + BROKEN_FIXTURE, COVERAGE_FIXTURE, FAIL_FIXTURE, ML_FIXTURE, PASS_FIXTURE, + RecordingSink, STRAY_FIXTURE, } from "./test-explorer-harness"; suite("Osprey Test Explorer", () => { @@ -230,6 +230,96 @@ suite("Osprey Test Explorer", () => { assert.ok(!sink.output.includes("bad math")); }); + // [TESTING-COVERAGE-VSCODE]: a coverage run maps TAP as usual AND reports + // per-line hits — the executed `double` covered, the dead `unused` at 0. + test("a coverage run reports line hits including uncovered lines", async function () { + if (!compiler) { + this.skip(); + } + this.timeout(30000); + const coverageUri = writeFixture("covered.test.osp", COVERAGE_FIXTURE); + const controller = newController(); + const file = await discoveredFile(controller, coverageUri); + const sink = new RecordingSink(); + const request = new vscode.TestRunRequest([file]); + await executeRunRequest(controller, request, sink, token(), () => compiler, true); + assert.strictEqual(sink.ofKind("passed").length, 1); + const hits = sink.coverage.get(coverageUri.fsPath); + assert.ok(hits, "coverage report reached the sink"); + assert.ok((hits.get(1) ?? 0) > 0, "double's definition line is covered"); + assert.strictEqual(hits.get(3), 0, "unused's definition line has 0 hits"); + }); + + // A TestRun double recording exactly what coverageSink hands VS Code — + // the FileCoverage whose TestCoverageCount becomes the displayed + // percentage, plus the run lifecycle calls it delegates. + function recordingRun(received: vscode.FileCoverage[]): vscode.TestRun { + const noop = (): void => undefined; + return { + enqueued: noop, started: noop, passed: noop, failed: noop, + errored: noop, skipped: noop, appendOutput: noop, end: noop, + addCoverage: (fc: vscode.FileCoverage) => received.push(fc), + } as unknown as vscode.TestRun; + } + + // [TESTING-COVERAGE-VSCODE] calc proof, pure layer: the numbers VS Code + // renders. hits {1:1, 3:0, 5:1} MUST become TestCoverageCount(2, 3) — + // the 66.7% badge — and three gutter StatementCoverages at 0-based lines. + test("coverageSink computes the exact FileCoverage counts and gutter detail", () => { + const received: vscode.FileCoverage[] = []; + const sink = coverageSink(recordingRun(received)); + assert.ok(sink.addLineCoverage, "coverage sink accepts line coverage"); + const uri = vscode.Uri.file("/tmp/calc.test.osp"); + sink.addLineCoverage(uri, new Map([[1, 1], [3, 0], [5, 1]])); + assert.strictEqual(received.length, 1); + const fc = received[0]; + assert.strictEqual(fc.uri.fsPath, uri.fsPath); + assert.strictEqual(fc.statementCoverage.covered, 2, "covered lines"); + assert.strictEqual(fc.statementCoverage.total, 3, "coverable lines"); + const detail = detailedCoverageFor(fc); + assert.deepStrictEqual( + detail.map((s) => [(s.location as vscode.Position).line, s.executed]), + [[0, 1], [2, 0], [4, 1]], + "gutter detail: 0-based lines with per-line hit counts", + ); + assert.deepStrictEqual(detailedCoverageFor(new vscode.FileCoverage( + uri, new vscode.TestCoverageCount(0, 0), + )), [], "unknown FileCoverage yields no detail"); + }); + + // [TESTING-COVERAGE-VSCODE] calc proof, end to end: the Coverage button's + // exact path — coverageSink → executeRunRequest → real compiler → + // --coverage-json → parsed hits → FileCoverage. The fixture has exactly 3 + // coverable lines (double:1, unused:3, test:5) and executes 2 of them, so + // the run MUST surface covered=2/total=3 — the 66.7% VS Code displays. + test("the Coverage profile path yields covered=2/total=3 for the fixture", async function () { + if (!compiler) { + this.skip(); + } + this.timeout(30000); + const coverageUri = writeFixture("calc-proof.test.osp", COVERAGE_FIXTURE); + const controller = newController(); + const file = await discoveredFile(controller, coverageUri); + const received: vscode.FileCoverage[] = []; + await executeRunRequest( + controller, + new vscode.TestRunRequest([file]), + coverageSink(recordingRun(received)), + token(), + () => compiler, + true, + ); + assert.strictEqual(received.length, 1, "one FileCoverage per suite file"); + const fc = received[0]; + assert.strictEqual(fc.uri.fsPath, coverageUri.fsPath); + assert.strictEqual(fc.statementCoverage.covered, 2, "executed lines"); + assert.strictEqual(fc.statementCoverage.total, 3, "coverable lines"); + const zeroHit = detailedCoverageFor(fc).find( + (s) => (s.location as vscode.Position).line === 2, + ); + assert.strictEqual(zeroHit?.executed, 0, "dead fn renders as uncovered"); + }); + test("several leaves of one file run as sequential filtered invocations", async function () { if (!compiler) { this.skip(); @@ -472,6 +562,40 @@ suite("Osprey Test Explorer", () => { assert.deepStrictEqual(sink.events[sink.events.length - 1], { kind: "end" }); }); + // The unstoppable-run regression: a throw anywhere in the run loop (a + // rejected reporting call on a cancelled TestRun, a discovery error) must + // STILL end the run — an un-ended run spins forever in the Testing view + // and its Stop button is dead. + test("a run whose reporting throws still ends (and rethrows)", async function () { + if (!compiler) { + this.skip(); + } + this.timeout(30000); + const controller = newController(); + const file = await discoveredFile(controller, passUri); + const sink = new RecordingSink(); + const boom = new Error("TestRun already ended"); + const throwingSink = new Proxy(sink, { + get(target, prop, receiver) { + if (prop === "enqueued") { + return () => { throw boom; }; + } + return Reflect.get(target, prop, receiver); + }, + }); + await assert.rejects( + executeRunRequest( + controller, + new vscode.TestRunRequest([file]), + throwingSink, + token(), + () => compiler, + ), + boom, + ); + assert.deepStrictEqual(sink.events[sink.events.length - 1], { kind: "end" }); + }); + test("an item without a uri is ignored gracefully", async () => { const controller = newController(); const bare = controller.createTestItem("no-uri", "no uri"); diff --git a/website/src/_includes/benchmarks-tables.html b/website/src/_includes/benchmarks-tables.html index bd3922ff..7c2ed502 100644 --- a/website/src/_includes/benchmarks-tables.html +++ b/website/src/_includes/benchmarks-tables.html @@ -1,6 +1,6 @@ -
1CPU wins (fastest of all)
1.42×CPU vs Rust
1.61×CPU vs C
1.09×CPU vs OCaml
0.76×CPU vs Haskell
0.71×CPU vs Rust (wasm)

Osprey is the fastest of all five languages on primes. Lower is better; ★ marks an Osprey win.

+
0CPU wins (fastest of all)
2.32×CPU vs Rust
2.65×CPU vs C
1.89×CPU vs C# (AOT)
0.95×CPU vs Dart (AOT)
1.82×CPU vs OCaml
1.27×CPU vs Haskell
1.18×CPU vs Rust (wasm)

Osprey is the fastest of all five languages on . Lower is better; ★ marks an Osprey win.

CPU time

-
BenchmarkOspreyOsprey (GC)RustCOCamlHaskellOsprey (wasm)Rust (wasm)
ackermann127.4 ms126.6 ms128.6 ms126.3 ms110.8 ms65.1 ms130.6 ms136.1 ms
binarytrees417.1 ms1.498 s711.9 ms348.2 ms50.2 ms17.0 ms516.0 ms793.0 ms
coins72.1 ms70.2 ms73.9 ms69.0 ms91.4 ms52.2 ms92.1 ms100.5 ms
collatz12.5 ms11.8 ms11.2 ms9.1 ms53.8 ms35.0 ms19.2 ms22.6 ms
coprime62.9 ms61.3 ms59.1 ms58.3 ms86.9 ms100.1 ms69.4 ms71.3 ms
digitsum5.2 ms5.1 ms5.3 ms5.2 ms18.5 ms29.7 ms12.3 ms17.3 ms
exprtree6.7 ms20.6 ms10.2 ms5.7 ms5.2 ms16.6 ms19.8 ms
factorial33.9 ms31.7 ms32.0 ms32.0 ms44.0 ms52.5 ms42.0 ms45.8 ms
fib20.5 ms20.5 ms16.2 ms17.8 ms23.8 ms45.1 ms32.8 ms36.6 ms
gcdsum75.3 ms71.7 ms71.2 ms71.7 ms96.9 ms100.2 ms79.1 ms82.7 ms
hanoi39.0 ms36.3 ms36.4 ms36.1 ms59.9 ms53.5 ms47.5 ms51.1 ms
isqrt12.6 ms12.2 ms10.1 ms9.6 ms19.1 ms40.6 ms23.7 ms21.3 ms
josephus32.1 ms30.9 ms30.2 ms30.3 ms37.8 ms43.0 ms36.9 ms40.5 ms
listops499.2 ms651.0 ms1.5 ms1.3 ms2.0 ms16.7 ms13.1 ms
mutual12.6 ms11.9 ms12.0 ms11.7 ms28.6 ms34.8 ms23.7 ms28.1 ms
nestedloop43.6 ms41.4 ms43.2 ms42.0 ms52.3 ms63.6 ms54.3 ms58.0 ms
pascal27.6 ms26.6 ms27.0 ms26.9 ms43.5 ms57.8 ms42.4 ms47.0 ms
powmod22.6 ms21.5 ms21.8 ms21.7 ms56.3 ms55.3 ms28.4 ms31.7 ms
primes6.3 ms ★6.4 ms7.1 ms6.7 ms8.7 ms15.8 ms12.5 ms16.3 ms
tak32.6 ms32.4 ms32.2 ms32.7 ms43.8 ms63.2 ms85.4 ms91.1 ms
textstats3.2 ms3.4 ms2.0 ms2.1 ms4.0 ms17.7 ms12.2 ms
wordfreq19.3 ms53.3 ms4.4 ms1.5 ms2.4 ms18.4 ms15.3 ms
+
BenchmarkOspreyOsprey (ARC)Osprey (GC)RustCC# (AOT)Dart (AOT)OCamlHaskellOsprey (wasm)Rust (wasm)
ackermann134.6 ms131.2 ms129.8 ms130.0 ms129.5 ms132.4 ms186.4 ms111.9 ms65.4 ms146.1 ms146.4 ms
binarytrees555.1 ms1.957 s3.177 s752.6 ms367.3 ms127.7 ms126.9 ms52.3 ms16.3 ms573.7 ms809.2 ms
coins78.2 ms78.2 ms78.3 ms82.5 ms77.6 ms101.5 ms122.4 ms100.5 ms52.2 ms101.1 ms111.1 ms
collatz104.9 ms263.3 ms251.2 ms12.5 ms10.2 ms57.0 ms67.0 ms59.2 ms40.5 ms88.0 ms24.2 ms
coprime67.8 ms67.8 ms67.8 ms65.2 ms63.4 ms77.1 ms106.3 ms90.7 ms103.9 ms75.9 ms77.2 ms
digitsum137.5 ms375.3 ms358.5 ms5.4 ms5.4 ms16.3 ms28.9 ms18.9 ms29.7 ms104.6 ms18.0 ms
exprtree8.0 ms26.5 ms27.5 ms10.9 ms6.2 ms6.4 ms13.3 ms5.1 ms16.1 ms20.2 ms
factorial261.3 ms843.1 ms666.2 ms35.5 ms35.1 ms37.2 ms51.4 ms48.5 ms53.8 ms196.5 ms48.8 ms
fib21.1 ms21.0 ms21.2 ms17.3 ms17.7 ms35.9 ms51.6 ms23.9 ms48.4 ms33.0 ms36.7 ms
gcdsum79.3 ms79.4 ms79.4 ms79.1 ms79.0 ms86.3 ms108.8 ms101.4 ms106.1 ms86.6 ms91.0 ms
hanoi38.1 ms38.0 ms38.4 ms36.9 ms38.4 ms38.5 ms103.0 ms62.4 ms57.9 ms47.7 ms51.3 ms
isqrt308.1 ms855.7 ms807.4 ms11.0 ms10.4 ms16.9 ms32.9 ms20.5 ms43.7 ms285.8 ms22.8 ms
josephus33.3 ms33.3 ms33.3 ms33.5 ms32.9 ms34.9 ms42.1 ms41.1 ms43.7 ms38.5 ms41.9 ms
listops531.7 ms1.088 s660.5 ms1.4 ms1.2 ms2.9 ms9.8 ms1.9 ms18.1 ms11.4 ms
mutual11.8 ms11.1 ms10.8 ms11.6 ms11.7 ms19.1 ms297.7 ms28.6 ms32.6 ms23.4 ms27.0 ms
nestedloop45.2 ms43.8 ms41.4 ms42.1 ms41.3 ms43.4 ms54.4 ms53.2 ms60.4 ms60.7 ms64.8 ms
pascal28.4 ms28.5 ms28.4 ms28.3 ms27.8 ms33.4 ms64.7 ms44.3 ms59.7 ms43.4 ms47.1 ms
powmod23.3 ms23.3 ms23.4 ms23.4 ms23.4 ms34.1 ms50.5 ms60.7 ms58.1 ms30.0 ms33.9 ms
primes6.5 ms6.5 ms6.5 ms6.7 ms6.5 ms8.6 ms44.1 ms8.5 ms17.3 ms13.1 ms17.1 ms
tak32.9 ms32.5 ms32.7 ms32.8 ms32.6 ms34.9 ms81.9 ms44.4 ms64.7 ms86.6 ms90.4 ms
textstats3.5 ms5.1 ms3.6 ms2.0 ms2.1 ms3.7 ms11.0 ms3.8 ms17.3 ms12.6 ms
wordfreq22.6 ms78.0 ms70.9 ms4.5 ms1.5 ms3.3 ms10.6 ms2.3 ms17.3 ms15.6 ms

Peak memory

-
BenchmarkOspreyOsprey (GC)RustCOCamlHaskellOsprey (wasm)Rust (wasm)
ackermann1.6 MiB ★1.7 MiB1.8 MiB1.6 MiB2.6 MiB15.1 MiB
binarytrees905.0 MiB12.3 MiB2.1 MiB1.7 MiB5.1 MiB11.0 MiB
coins1.4 MiB1.5 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
collatz1.4 MiB1.4 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
coprime1.4 MiB1.5 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
digitsum1.4 MiB1.4 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
exprtree9.0 MiB6.5 MiB2.7 MiB11.5 MiB6.0 MiB11.4 MiB
factorial1.4 MiB1.5 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
fib1.4 MiB1.4 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
gcdsum1.4 MiB1.5 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
hanoi1.4 MiB1.4 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
isqrt1.4 MiB1.4 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
josephus1.4 MiB1.4 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
listops2493.5 MiB4.1 MiB1.6 MiB1.4 MiB2.5 MiB11.3 MiB
mutual1.4 MiB1.4 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
nestedloop1.4 MiB1.4 MiB1.5 MiB1.4 MiB2.2 MiB11.0 MiB
pascal1.4 MiB1.5 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
powmod1.4 MiB1.5 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
primes1.4 MiB1.5 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
tak1.4 MiB1.4 MiB1.5 MiB1.4 MiB2.2 MiB11.1 MiB
textstats1.4 MiB1.5 MiB1.6 MiB1.4 MiB2.3 MiB11.4 MiB
wordfreq52.8 MiB4.4 MiB1.6 MiB1.4 MiB2.3 MiB11.3 MiB
+
BenchmarkOspreyOsprey (ARC)Osprey (GC)RustCC# (AOT)Dart (AOT)OCamlHaskellOsprey (wasm)Rust (wasm)
ackermann1.7 MiB1.7 MiB1.7 MiB1.8 MiB1.7 MiB7.1 MiB14.2 MiB2.7 MiB15.1 MiB
binarytrees905.1 MiB487.5 MiB27.5 MiB2.2 MiB1.7 MiB16.1 MiB22.5 MiB5.2 MiB11.1 MiB
coins1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.5 MiB6.9 MiB13.9 MiB2.3 MiB11.1 MiB
collatz221.7 MiB65.5 MiB6.6 MiB1.6 MiB1.4 MiB6.8 MiB14.0 MiB2.3 MiB11.1 MiB
coprime1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.4 MiB6.8 MiB14.0 MiB2.3 MiB11.1 MiB
digitsum335.1 MiB65.5 MiB6.6 MiB1.6 MiB1.4 MiB6.8 MiB14.0 MiB2.3 MiB11.1 MiB
exprtree9.0 MiB6.7 MiB15.2 MiB2.7 MiB11.5 MiB15.2 MiB22.7 MiB6.1 MiB11.4 MiB
factorial614.2 MiB129.5 MiB6.6 MiB1.6 MiB1.4 MiB6.8 MiB14.0 MiB2.2 MiB11.1 MiB
fib1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.4 MiB6.9 MiB13.9 MiB2.3 MiB11.1 MiB
gcdsum1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.4 MiB6.8 MiB14.0 MiB2.3 MiB11.1 MiB
hanoi1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.4 MiB6.8 MiB14.0 MiB2.3 MiB11.1 MiB
isqrt779.1 MiB257.5 MiB8.3 MiB1.6 MiB1.4 MiB6.8 MiB14.0 MiB2.3 MiB11.1 MiB
josephus1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.4 MiB6.8 MiB14.1 MiB2.3 MiB11.1 MiB
listops2493.5 MiB3383.9 MiB3.8 MiB1.7 MiB1.5 MiB7.1 MiB14.3 MiB2.6 MiB11.4 MiB
mutual1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.4 MiB6.8 MiB13.9 MiB2.3 MiB11.1 MiB
nestedloop1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.4 MiB6.9 MiB13.9 MiB2.2 MiB11.1 MiB
pascal1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.4 MiB6.8 MiB14.0 MiB2.3 MiB11.1 MiB
powmod1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.4 MiB6.8 MiB13.9 MiB2.3 MiB11.1 MiB
primes1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.4 MiB6.8 MiB14.0 MiB2.2 MiB11.1 MiB
tak1.5 MiB1.5 MiB1.5 MiB1.6 MiB1.4 MiB6.8 MiB14.0 MiB2.3 MiB11.1 MiB
textstats1.5 MiB1.6 MiB1.5 MiB1.6 MiB1.5 MiB6.8 MiB14.1 MiB2.3 MiB11.4 MiB
wordfreq59.0 MiB91.9 MiB4.7 MiB1.6 MiB1.4 MiB6.8 MiB14.2 MiB2.3 MiB11.4 MiB
diff --git a/website/src/spec/0018-memorymanagement.md b/website/src/spec/0018-memorymanagement.md index c928357e..03526584 100644 --- a/website/src/spec/0018-memorymanagement.md +++ b/website/src/spec/0018-memorymanagement.md @@ -2,7 +2,7 @@ layout: page title: "Memory Management" description: "Osprey Language Specification: Memory Management" -date: 2026-07-15 +date: 2026-07-16 tags: ["specification", "reference", "documentation"] author: "Christian Findlay" permalink: "/spec/0018-memorymanagement/" @@ -30,9 +30,16 @@ you no longer need. ## Status -Partially implemented — the *boundary* exists and a first *reclaiming* backend -ships (tracing GC, opt-in via `--memory=gc`); the ARC default is next -([implementation plan 0011](https://github.com/Nimblesite/osprey/blob/main/docs/plans/0011-arc-gc-implementation.md)). +Partially implemented — the *boundary* exists, a first *reclaiming* backend +ships (tracing GC, opt-in via `--memory=gc`), and the Perceus ARC backend is +**counting for real** (`--memory=arc` links the counting runtime — header, +registry, kind/mask drop — and the compiler now inserts the full Perceus +dup/drop discipline: producers own +1, dup-on-store, drops at region end and +at last use, returns transfer +1. Byte-identical on the full differential +harness under all three backends; container-free programs report zero live +language values at exit. Containers are leak-safe pending node-level RC — +[implementation plan 0011](https://github.com/Nimblesite/osprey/blob/main/docs/plans/0011-arc-gc-implementation.md) phase 2, +milestones M4b/M5b/M6b). - **Swappable backend boundary [MEM-BACKENDS]: done.** All codegen heap allocation funnels through a single `@osp_alloc` hook (osprey-codegen @@ -187,7 +194,12 @@ source code: - **ARC (default)** — non-atomic reference counting on the shared residue, statically elided wherever ownership is provable. Complete without a - cycle collector because the heap is acyclic [MEM-ACYCLIC]. + cycle collector because the heap is acyclic [MEM-ACYCLIC]. The algorithm + is **Perceus** (Reinking, Xie, de Moura, Leijen), implemented from the + extended technical report + [MSR-TR-2020-42](https://www.microsoft.com/en-us/research/wp-content/uploads/2020/11/perceus-tr-v1.pdf): + precise, garbage-free reference counting (every value freed at its last + dynamic use), with drop specialization and drop-guided reuse. - **Tracing GC** — the conformance oracle that keeps [MEM-OPAQUE] honest. **Backend portability.** The two reclaiming backends need different things from diff --git a/website/src/spec/0027-testingframework.md b/website/src/spec/0027-testingframework.md index 7207f747..e69e50dd 100644 --- a/website/src/spec/0027-testingframework.md +++ b/website/src/spec/0027-testingframework.md @@ -2,7 +2,7 @@ layout: page title: "Testing Framework" description: "Osprey Language Specification: Testing Framework" -date: 2026-07-15 +date: 2026-07-16 tags: ["specification", "reference", "documentation"] author: "Christian Findlay" permalink: "/spec/0027-testingframework/" @@ -248,7 +248,7 @@ gate — any Osprey program may call the testing built-ins. ## CLI -### `osprey test [path] [--filter ] [--quiet]` — `[TESTING-CLI-RUN]` +### `osprey test [path] [--filter ] [--quiet] [--coverage] [--coverage-json ]` — `[TESTING-CLI-RUN]` Runs test files and aggregates results. `path` (default `.`) is either a single file (run as-is, regardless of naming) or a directory searched @@ -279,6 +279,46 @@ test that is a function or lambda body, the enclosing declaration's line. Dynamically named tests (non-literal first argument) still run and report via TAP; they are simply not listed statically. +## Line coverage + +**`[TESTING-COVERAGE-CLI]`** `osprey test --coverage` builds each suite with +line-coverage instrumentation, runs it, and prints one +`# coverage: P% (covered/total lines) ` row per suite (suppressed by +`--quiet`) plus a final `# coverage total: P% (covered/total lines)` row. +Coverage never changes suite outcomes or the exit code. +`--coverage-json ` (implies `--coverage`) also writes the merged +machine-readable report **`[TESTING-COVERAGE-JSON]`**: +`{"files":{"":{"lines":{"":hits}}}}` — 1-based source +lines, every coverable line present (hit count `0` when unexecuted). + +**`[TESTING-COVERAGE-CODEGEN]`** With coverage on +(`osprey_codegen::compile_program_coverage`, +`crates/osprey-codegen/src/coverage.rs`), the coverable-line universe is +seeded from the AST up front — function definition lines and positioned +statements, recursing through blocks, lambdas, match/handler arms, and +module/namespace bodies — so a never-executed (even never-lowered) line +still counts against the total. Lowering bumps a per-line `i64` counter +global inline where control flow reaches it: at each function body entry +(including inline-specialised generic bodies at their call sites) and before +each positioned statement. A generated `__osp_cov_init`, called at the top +of `main` before user code, registers every counter with the runtime. +Coverage builds keep release optimization and emit no DWARF. + +**`[TESTING-COVERAGE-RUNTIME]`** `compiler/runtime/coverage_runtime.c` +(dependency-free C11, in every runtime archive) exposes +`osp_cov_register_line(line, &counter)`. Inert unless +**`[TESTING-COVERAGE-ENV]`** `OSPREY_COVERAGE=` names the dump file at +process start; then an exit-time hook writes +**`[TESTING-COVERAGE-DUMP]`**: a `# osprey-coverage v1` header followed by +one ` ` row per registered line, ascending, zero-hit rows +included — a reader needs no other line universe. + +Lines are those of the compiled unit: a test suite compiles standalone, so +they are the suite file's own 1-based lines. Coverage measures the suite +file it instruments — the framework's suites embed the logic they exercise +(the `[TESTING-CLI-RUN]` isolation model), so the rate is the honest "did my +tests execute my code" number. + ## VS Code Test Explorer **`[TESTING-VSCODE]`** The extension ships a native Testing-API integration @@ -300,6 +340,13 @@ registered from `activate()` and packaged in the VSIX: matched against `--list-tests` is the text before the directive. Cases absent from the output are also marked skipped; a non-TAP failure (e.g. compile error) marks the file item errored with the compiler's stderr. +- **Coverage** (**`[TESTING-COVERAGE-VSCODE]`**): a second run profile + (`TestRunProfileKind.Coverage`) executes + `osprey test --coverage-json --quiet` per requested file + (`--filter ` for a single case), maps the same TAP stream, then + parses the `[TESTING-COVERAGE-JSON]` report into `FileCoverage` + + per-line `StatementCoverage` — VS Code shows the percentage in the Test + Coverage view and hit counts in the editor gutter. ## Runtime