From da3c8e354df9109e21331823be65f8e3391c5477 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sat, 23 May 2026 13:17:01 +0200 Subject: [PATCH 01/22] docs(profile): publish streaming parity & benchmarks evidence MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A profile-linked, user-facing assessment of the streaming layer (MobilityFlink / MobilityKafka / MobilityNebula) as evidence the ecosystem is ready for real-world deployment — measured, not asserted: - function-surface coverage of the 1,945 streamable MEOS functions (Flink/Kafka 100% proven-callable; Nebula in progress, compile-verified), - BerlinMOD query-result parity (snapshot = batch), - the BerlinMOD performance benchmark (results published as clean runs complete). All coverage numbers are reproducible from committed feeds with no toolchain. Adds a "Parity & benchmarks" section to the profile README linking this page and its peer, "Databases — parity & benchmarks" (delivered separately). --- profile/README.md | 7 +++ profile/streaming-parity.md | 95 +++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 profile/streaming-parity.md diff --git a/profile/README.md b/profile/README.md index fcda079..5fe8714 100644 --- a/profile/README.md +++ b/profile/README.md @@ -22,6 +22,13 @@ The companion datasets and reproducible scripts live in [MobilityDataScienceBook Mobility Data Science Book +## Parity & benchmarks + +Evidence that the ecosystem is complete, correct, and ready for real-world deployment — **measured, not asserted**. Two published assessments, one per platform group, each covering function-surface coverage, BerlinMOD query-result parity (identical results across engines), and BerlinMOD performance benchmarks: + +- **[Streaming — parity & benchmarks](streaming-parity.md)** — MobilityFlink / MobilityKafka / MobilityNebula. +- **[Databases — parity & benchmarks](database-parity.md)** — MobilityDB / MobilityDuck / MobilitySpark. + ## Repository map MobilityDB Ecosystem — MEOS C core as the foundation; MobilityDB/MobilityDuck/MobilitySpark SQL layers, MobilityNebula/MobilityKafka/MobilityFlink stream layers, MobilityAPI plus the MEOS-API OpenAPI/MCP/runtime contracts as the HTTP/API layer, and six language bindings as peer surfaces; MEOS-API as a side codegen catalog (IDL JSON + shape catalog); application, visualization and cloud as the top layer; a portable-data band (Arrow C Data Interface, TemporalParquet, Temporal Data Lake) beneath MEOS diff --git a/profile/streaming-parity.md b/profile/streaming-parity.md new file mode 100644 index 0000000..dd66777 --- /dev/null +++ b/profile/streaming-parity.md @@ -0,0 +1,95 @@ +MobilityDB Streaming — Parity & Benchmarks +========================================== + +The ecosystem exposes the same MEOS temporal and spatiotemporal operations on three +stream processors — [MobilityFlink](https://github.com/MobilityDB/MobilityFlink), +[MobilityKafka](https://github.com/MobilityDB/MobilityKafka), and +[MobilityNebula](https://github.com/MobilityDB/MobilityNebula). This page reports, +**measured rather than estimated**, how much of the streamable MEOS surface each one +covers, how that coverage is verified, and how the platforms perform on the BerlinMOD +benchmark. Together these answer the question a prospective adopter asks first — *is the +streaming layer complete, does it return correct results, and is it fast enough to +deploy on real workloads?* — with reproducible evidence rather than assertion. + +> Companion: **[Databases — parity & benchmarks](database-parity.md)** reports the same +> for the SQL engines (MobilityDB / MobilityDuck / MobilitySpark). + +## The surface + +The reference is the **1,945 streamable MEOS public functions** — every exported MEOS +function that can run inside a streaming dataflow, across four tiers: `stateless`, +`bounded-state`, `windowed`, and `cross-stream`. + +Functions outside that surface are excluded **by reason, not by omission**, and are +never counted as gaps: + +| reason | count | why it is not streamable | +|---|--:|---| +| internal | 1,308 | not part of the public API | +| io-meta | 218 | parsing / output / catalog plumbing (`*_in`, `*_out`, …) | +| ambiguous | 59 | reserved pending a semantic decision | +| sequence-only | 14 | need a fully materialized sequence; no per-event form | + +## Coverage + +Three layers, increasing in strength: + +- **L1 — exported.** The symbol is present in `libmeos` (`nm -D`). +- **L2 — wired.** A binding operator or facade method calls it. +- **L3 — proven.** It is actually invoked on a real `libmeos`: confirmed callable + (JVM tools) or exercised by a passing systest (NebulaStream). + +| Platform | L3 proven | L2 wired | of 1,945 | +|---|--:|--:|--:| +| **MobilityFlink** | **1,945 callable** | 1,945 | **100.0 %** | +| **MobilityKafka** | **1,945 callable** | 1,945 | **100.0 %** | +| **MobilityNebula** | 6 systest-confirmed | 147 wired · compile-verified | 7.6 % wired | + +Flink and Kafka share one generated JNR-FFI facade, so their callability is identical; +it is confirmed by a type-aware per-method harness that invokes **every** facade method +on a real `libmeos` (a returned value or a caught MEOS semantic error counts as +callable — only a linkage or marshalling failure does not). NebulaStream operators are +generated C++ physical operators; each is **compile-verified** against the build's +`libmeos` in the NebulaStream development image, and a growing systest suite confirms +callability operator by operator. + +## Query-result parity (BerlinMOD) + +Beyond function coverage, the three platforms run the **BerlinMOD** reference queries in +three streaming forms — continuous, windowed, and snapshot — with the **snapshot form +anchored to the batch (SQL-engine) result at the same scale factor**. Snapshot results +agree with batch, which links streaming parity to [database parity](database-parity.md). + +## Benchmarks (BerlinMOD) + +Coverage and correctness establish that the queries *run* and *agree*; the BerlinMOD +benchmark establishes that they run *fast enough to deploy*. The same reference queries +are timed on each platform across scale factors and the three streaming forms +(continuous / windowed / snapshot), reporting per-query throughput and latency. Because +the workload definition is shared with the SQL engines +([MobilityDB-BerlinMOD](https://github.com/MobilityDB/MobilityDB-BerlinMOD)), streaming +and batch timings are directly comparable at the same scale factor. + +Benchmark results are published here as each clean run completes; the streaming benchmark +harnesses live with the parity tooling in the +[MobilityFlink](https://github.com/MobilityDB/MobilityFlink), +[MobilityKafka](https://github.com/MobilityDB/MobilityKafka), and +[MobilityNebula](https://github.com/MobilityDB/MobilityNebula) repositories. SQL-engine +timings appear in the companion [databases — parity & benchmarks](database-parity.md) page. + +## Reproduce it + +The numbers come from committed feeds and need no toolchain: + +```sh +# MobilityNebula: tools/streaming_parity/ +python3 ci_gate.py # Flink/Kafka: 1945/1945 = 100.0%, no over-claim +cat feeds/nebula.feed.tsv # NebulaStream: wired / proven, per function +``` + +The feeds (`flink-kafka.feed.tsv`, `nebula.feed.tsv`) are regenerated by the +per-platform adapters and the callability harness in `tools/streaming_parity/`; the full +methodology is in `doc/methodology/streaming_parity_assessment.md` (MobilityNebula). + +*Measured against the `accumulate/parity-1.4` MEOS build. Status as of 2026-05-23; +NebulaStream coverage advances as further operator families are wired.* From 7e4cb44fd5567e6fc5096828214e1cc4ea2ecc04 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sat, 23 May 2026 13:30:13 +0200 Subject: [PATCH 02/22] docs(profile): add databases parity & benchmarks page (peer to streaming) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Consolidates the database-layer evidence into a uniform page mirroring the streaming one: function-surface coverage (MobilityDB reference; MobilityDuck 943/943 active; MobilitySpark 1571/1577 + 29/29 portable dialect), the cross-type axis + reason-marked semantic exclusions, BerlinMOD query-result parity (discussion #861) and the cross-platform benchmark (MobilityDB-BerlinMOD #29). Numbers are sourced from the per-repo audits and advance as the accumulated-PR builds and dated runs land. Resolves the README "Databases — parity & benchmarks" link added in this PR. --- profile/database-parity.md | 108 +++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 profile/database-parity.md diff --git a/profile/database-parity.md b/profile/database-parity.md new file mode 100644 index 0000000..a4dd2f3 --- /dev/null +++ b/profile/database-parity.md @@ -0,0 +1,108 @@ +MobilityDB Databases — Parity & Benchmarks +========================================== + +The ecosystem exposes the same MEOS temporal and spatiotemporal operations through SQL on +three engines — [MobilityDB](https://github.com/MobilityDB/MobilityDB) (the reference +implementation), [MobilityDuck](https://github.com/MobilityDB/MobilityDuck), and +[MobilitySpark](https://github.com/MobilityDB/MobilitySpark). This page reports, +**measured rather than estimated**, how much of the MobilityDB SQL surface each engine +covers, how that coverage is verified, and how the engines perform on the BerlinMOD +benchmark. Together these answer the question a prospective adopter asks first — *is the +database layer complete, does it return correct results, and is it fast enough to deploy +on real workloads?* — with reproducible evidence rather than assertion. + +> Companion: **[Streaming — parity & benchmarks](streaming-parity.md)** reports the same +> for the stream processors (MobilityFlink / MobilityKafka / MobilityNebula). + +## The surface + +The reference is the **public SQL API of MobilityDB** — every `CREATE FUNCTION` it +defines. MobilityDB *is* the reference, so its surface is the parity target; +MobilityDuck and MobilitySpark are each measured against the portion applicable to them. + +Functions outside an engine's scope are excluded **by reason, not by omission**, and are +never counted as gaps — chiefly PostgreSQL-only plumbing (`*_in`/`*_out`/`*_recv`/`*_send`, +aggregate transition/combine/finalize internals, selectivity/support functions, GiST/SPGiST +operator classes) for which no DuckDB or Spark equivalent exists, plus a small set of +operations reserved by [semantic exclusion](#cross-type-coverage) because they are +formally meaningless on a given type. + +## Coverage + +Three layers, increasing in strength: + +- **L1 — exported.** The operation is present in the engine's library (MobilityDB `nm -D`). +- **L2 — registered.** It is a callable SQL function in the engine's catalog + (`pg_proc` / DuckDB scalar registry / Spark UDF registry). +- **L3 — tested.** A regression test mirrored from MobilityDB exercises it and the result + is checked. + +| Engine | L2 registered | L3 tested | of MobilityDB SQL surface | +|---|---|---|---| +| **MobilityDB** | reference | full regression suite | **100 % (reference)** | +| **MobilityDuck** | 943 / 943 active-addressable | ported MobilityDB `*.test.sql` mirrors | **100 %** active scope · extended families in progress | +| **MobilitySpark** | 1571 / 1577 active-addressable + 29/29 portable dialect | 907 SQL-parity + BerlinMOD tests | **99.6 %** · all six type families | + +Each engine's coverage is audited from its own repository — MobilityDuck via +[`docs/parity-status.md`](https://github.com/MobilityDB/MobilityDuck/blob/main/docs/parity-status.md) +and [`PARITY.md`](https://github.com/MobilityDB/MobilityDuck/blob/main/docs/PARITY.md); +MobilitySpark via [`docs/parity-100.md`](https://github.com/MobilityDB/MobilitySpark/blob/main/docs/parity-100.md). +The figures advance as the accumulated-PR builds of the three engines land; this page +tracks the measured state. + +## Cross-type coverage + +MobilityDB's parity also has a *cross-type* axis: every temporal spatial type is held to +the same function surface as its reference family — `tgeompoint` is the reference for the +`Point` family (`tgeogpoint`, `tnpoint`), `tgeometry` for the extended-shape family +(`trgeometry`, `tcbuffer`, `tpose`). The methodology and the audit harness are in +MobilityDB ([cross-type parity methodology](https://github.com/MobilityDB/MobilityDB/pull/1002), +[audit harness](https://github.com/MobilityDB/MobilityDB/pull/1110), +[RFC #868](https://github.com/MobilityDB/MobilityDB/discussions/868)). + +A handful of operations are **reason-marked as formally meaningless** on specific types +and are deliberately never implemented — they are not gaps: + +- `convexhull` on `tgeogpoint` — a point's continuous form collapses to `trajectory()` / `stbox()`. +- `affine` / `rotate` / `scale` / `translate` on `tnpoint`, `tcbuffer`, `tpose`, `trgeometry` — an affine transform bypasses the type invariant (rigid pose / centre+radius / route+fraction). +- `atGeometry` / `minusGeometry` on `tnpoint` — a network point is constrained to its 1-D edge; use route filtering. + +## Query-result parity (BerlinMOD) + +The three engines run the **BerlinMOD** reference queries and must return **identical +results** — the cross-engine portability contract +([discussion #861](https://github.com/MobilityDB/MobilityDB/discussions/861), conformance +suite [MobilityDB-BerlinMOD](https://github.com/MobilityDB/MobilityDB-BerlinMOD)). This +batch result is also the anchor for the streaming **snapshot** form, linking database +parity to [streaming parity](streaming-parity.md). + +## Benchmarks (BerlinMOD) + +Coverage and correctness establish that the queries *run* and *agree*; the BerlinMOD +benchmark establishes that they run *fast enough to deploy*. The cross-platform timing +report is organised by **what each measurement licenses to claim** +([MobilityDB-BerlinMOD #29](https://github.com/MobilityDB/MobilityDB-BerlinMOD/pull/29)): +the `th3index` matrix is the cross-platform-comparable axis, native-index results are +intra-platform only, and their composition is reported only where it beats both alone. +Results are published here as each dated run is finalised; the benchmark harness lives in +[MobilityDB-BerlinMOD](https://github.com/MobilityDB/MobilityDB-BerlinMOD) with the +Spark driver in [MobilitySpark `berlinmod/bench`](https://github.com/MobilityDB/MobilitySpark/tree/main/berlinmod/bench). + +## Reproduce it + +The coverage numbers come from per-repo audit scripts, and the cross-type figures from a +config-driven harness: + +```sh +# MobilityDuck +python3 scripts/parity-audit.py # -> docs/parity-status.md (943/943 active) +# MobilitySpark +python3 scripts/parity-audit.py # -> docs/parity-status.md (1571/1577) +python3 scripts/portable_parity.py # 29/29 portable bare names +# MobilityDB cross-type +tools/parity_audit/ # nm -D / pg_proc / test — 3-condition gate +``` + +*Status as of 2026-05-23. MobilityDB is the reference; MobilityDuck and MobilitySpark +coverage and the benchmark tables advance as the accumulated-PR builds and dated runs +land.* From 1cbf8c36501fec5e15f39bcb0a48ff132d801d0c Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sat, 23 May 2026 13:39:48 +0200 Subject: [PATCH 03/22] docs(profile): lead both pages with a Results-at-a-glance (charts + 1-click depth) Per the chosen layout: each page now opens with a coverage bar chart from the real measured numbers, a correctness + benchmark status line, and a 'Full results & raw data' block linking the per-repo audits and benchmark report #29. Incomplete parts (Nebula 7.6%, benchmark dated runs) are shown honestly. --- profile/database-parity.md | 18 ++++++++++++++++++ profile/streaming-parity.md | 17 +++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/profile/database-parity.md b/profile/database-parity.md index a4dd2f3..10b622e 100644 --- a/profile/database-parity.md +++ b/profile/database-parity.md @@ -14,6 +14,24 @@ on real workloads?* — with reproducible evidence rather than assertion. > Companion: **[Streaming — parity & benchmarks](streaming-parity.md)** reports the same > for the stream processors (MobilityFlink / MobilityKafka / MobilityNebula). +## Results at a glance + +Coverage of the **MobilityDB SQL surface** — each engine over its active-addressable scope: + +```text +MobilityDB ████████████████████ reference 100 % full regression suite +MobilityDuck ████████████████████ 943 / 943 100.0% active scope · extended families in progress +MobilitySpark ███████████████████▉ 1571 / 1577 99.6% + 29 / 29 portable dialect +``` + +- **Correctness** — BerlinMOD reference queries return **identical results** across all three engines ✓ +- **Benchmark** — cross-platform timings ▸ [report #29](https://github.com/MobilityDB/MobilityDB-BerlinMOD/pull/29) *(dated runs publishing)* + +**▶ Full results & raw data** +- MobilityDuck — [`parity-status.md`](https://github.com/MobilityDB/MobilityDuck/blob/main/docs/parity-status.md) · [`PARITY.md`](https://github.com/MobilityDB/MobilityDuck/blob/main/docs/PARITY.md) +- MobilitySpark — [`parity-100.md`](https://github.com/MobilityDB/MobilitySpark/blob/main/docs/parity-100.md) +- MobilityDB cross-type — [methodology #1002](https://github.com/MobilityDB/MobilityDB/pull/1002) · [audit harness #1110](https://github.com/MobilityDB/MobilityDB/pull/1110) + ## The surface The reference is the **public SQL API of MobilityDB** — every `CREATE FUNCTION` it diff --git a/profile/streaming-parity.md b/profile/streaming-parity.md index dd66777..2333551 100644 --- a/profile/streaming-parity.md +++ b/profile/streaming-parity.md @@ -14,6 +14,23 @@ deploy on real workloads?* — with reproducible evidence rather than assertion. > Companion: **[Databases — parity & benchmarks](database-parity.md)** reports the same > for the SQL engines (MobilityDB / MobilityDuck / MobilitySpark). +## Results at a glance + +Coverage of the **1,945 streamable MEOS functions** — confirmed callable on a real `libmeos`: + +```text +MobilityFlink ████████████████████ 1945 / 1945 100.0% proven callable +MobilityKafka ████████████████████ 1945 / 1945 100.0% proven callable +MobilityNebula █▌ 147 / 1945 7.6% wired · compile-verified +``` + +- **Correctness** — BerlinMOD reference queries, snapshot form **= batch result** ✓ +- **Benchmark** — cross-platform timings ▸ [report #29](https://github.com/MobilityDB/MobilityDB-BerlinMOD/pull/29) *(dated runs publishing)* + +**▶ Full results & raw data** +- Per-function coverage — committed feeds `flink-kafka.feed.tsv` + `nebula.feed.tsv`, reproduced by `ci_gate.py` (MobilityNebula `tools/streaming_parity/`). +- Methodology — `doc/methodology/streaming_parity_assessment.md` (MobilityNebula). + ## The surface The reference is the **1,945 streamable MEOS public functions** — every exported MEOS From 4c182fd4113a071fc0a669ef4e1372ec27d09fd9 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sat, 23 May 2026 13:46:43 +0200 Subject: [PATCH 04/22] docs(profile): coverage charts as committed PNGs (matplotlib, not Mermaid) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the placeholder unicode bars with real coverage charts generated by profile/images/coverage_charts.py — same approach as the BerlinMOD benchmark's chart.py (matplotlib -> committed PNG, embedded via with the canonical main raw URL + ?v= cache-bust, matching the ecosystem SVG figure). Solid bar = proven/reference, hatched = wired-not-yet-proven. Reproducible: re-run the script after the numbers change. --- profile/database-parity.md | 6 +-- profile/images/coverage_charts.py | 74 ++++++++++++++++++++++++++ profile/images/database-coverage.png | Bin 0 -> 50066 bytes profile/images/streaming-coverage.png | Bin 0 -> 51271 bytes profile/streaming-parity.md | 6 +-- 5 files changed, 76 insertions(+), 10 deletions(-) create mode 100644 profile/images/coverage_charts.py create mode 100644 profile/images/database-coverage.png create mode 100644 profile/images/streaming-coverage.png diff --git a/profile/database-parity.md b/profile/database-parity.md index 10b622e..f3d0710 100644 --- a/profile/database-parity.md +++ b/profile/database-parity.md @@ -18,11 +18,7 @@ on real workloads?* — with reproducible evidence rather than assertion. Coverage of the **MobilityDB SQL surface** — each engine over its active-addressable scope: -```text -MobilityDB ████████████████████ reference 100 % full regression suite -MobilityDuck ████████████████████ 943 / 943 100.0% active scope · extended families in progress -MobilitySpark ███████████████████▉ 1571 / 1577 99.6% + 29 / 29 portable dialect -``` +MobilityDB SQL surface coverage: MobilityDB 100% (reference), MobilityDuck 100.0% (943/943 active scope), MobilitySpark 99.6% (1571/1577) plus 29/29 portable dialect - **Correctness** — BerlinMOD reference queries return **identical results** across all three engines ✓ - **Benchmark** — cross-platform timings ▸ [report #29](https://github.com/MobilityDB/MobilityDB-BerlinMOD/pull/29) *(dated runs publishing)* diff --git a/profile/images/coverage_charts.py b/profile/images/coverage_charts.py new file mode 100644 index 0000000..2465aca --- /dev/null +++ b/profile/images/coverage_charts.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +"""Coverage bar charts for the profile parity & benchmark pages. + +Reproducible generator (mirrors MobilitySpark/berlinmod/bench/chart.py in spirit: +matplotlib -> committed PNG, embedded via ). Emits two horizontal-bar charts +from the measured coverage numbers: + + streaming-coverage.png — Flink / Kafka / Nebula vs the 1,945 streamable surface + database-coverage.png — MobilityDB / MobilityDuck / MobilitySpark vs the SQL surface + +Solid bar = confirmed (L3 proven / reference); lighter bar = wired but not yet +proven. Re-run after the numbers change: python3 coverage_charts.py +""" +from pathlib import Path +import matplotlib +matplotlib.use("Agg") +import matplotlib.pyplot as plt + +HERE = Path(__file__).parent +TRACK = "#ececec" # the 0->100% track behind each bar + + +def hbar(path, title, rows, subtitle): + """rows: list of (label, pct, value_text, color, proven_bool).""" + fig, ax = plt.subplots(figsize=(7.6, 2.5), dpi=150) + ys = list(range(len(rows)))[::-1] # top-to-bottom + for y, (label, pct, vtext, color, proven) in zip(ys, rows): + ax.barh(y, 100, color=TRACK, height=0.55, zorder=1) # track + ax.barh(y, pct, color=color, height=0.55, zorder=2, + alpha=1.0 if proven else 0.55, + hatch=None if proven else "////", edgecolor=color) + ax.text(pct + 1.5, y, vtext, va="center", ha="left", + fontsize=10, color="#222", zorder=3) + ax.set_yticks(ys) + ax.set_yticklabels([r[0] for r in rows], fontsize=11) + ax.set_xlim(0, 128) + ax.set_xticks([0, 25, 50, 75, 100]) + ax.set_xticklabels(["0", "25", "50", "75", "100%"], fontsize=9, color="#666") + ax.set_title(title, fontsize=12, fontweight="bold", loc="left", pad=14) + ax.text(0, 1.04, subtitle, transform=ax.transAxes, fontsize=9, color="#666") + for s in ("top", "right", "left"): + ax.spines[s].set_visible(False) + ax.tick_params(left=False) + ax.set_axisbelow(True) + ax.xaxis.grid(True, color="#f0f0f0", zorder=0) + fig.tight_layout() + fig.savefig(path, bbox_inches="tight", facecolor="white") + plt.close(fig) + print(f"wrote {path}") + + +# Streaming — solid = proven callable, hatched/light = wired (not yet proven) +hbar( + HERE / "streaming-coverage.png", + "Streaming — MEOS function coverage", + [ + ("MobilityFlink", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), + ("MobilityKafka", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), + ("MobilityNebula", 7.6, "7.6% · 147 / 1945 · wired", "#1a9988", False), + ], + "of 1,945 streamable MEOS functions (solid = proven callable · hatched = wired)", +) + +# Database — per-platform colour family from chart.py; MobilityDB = reference +hbar( + HERE / "database-coverage.png", + "Databases — MobilityDB SQL surface coverage", + [ + ("MobilityDB", 100.0, "100% · reference", "#0f4ec9", True), + ("MobilityDuck", 100.0, "100.0% · 943 / 943 active", "#c47000", True), + ("MobilitySpark", 99.6, "99.6% · 1571 / 1577", "#1f7a23", True), + ], + "of the MobilityDB public SQL API (each engine over its active-addressable scope)", +) diff --git a/profile/images/database-coverage.png b/profile/images/database-coverage.png new file mode 100644 index 0000000000000000000000000000000000000000..c7a20cfebc599f7dc79fb44642537de09303f912 GIT binary patch literal 50066 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 KMvu4q>%Rb6vKp-b literal 0 HcmV?d00001 diff --git a/profile/images/streaming-coverage.png b/profile/images/streaming-coverage.png new file mode 100644 index 0000000000000000000000000000000000000000..e1edbfbc9cd84d29a51d068e9e2650be1dedc247 GIT binary patch literal 51271 zcmce;cR-K-+c*3P4GpDGGFq}inJL$>je`TM!=`;YJPtKiwa%vexp<6&nhLot6AWbtCEr-mBuhysXqE`)5Nfc9%D( zF9?s0{CFiyt+HNLYK@fgdMOpt(4UiWqe{_lIk@w)M`F%L=Z_9cFP{-d|k>E67L zkKesGTFPwHRv`BDs7d*W*9}Qm8yf3OZq=pO2n%PHC$o|dR;hj}E=@qPvZ4FW&)3Iq z^|P#6wd&r(hhBH?tcs71m%Mn9?f38B{k3n{_U+$alWw9uIZ&ryKN@4wamood~> zb&o}D_XY+A8n>ujxw84|bFl!MzOOt-j%?VxdGl@o0Z$(vnhzg7M8AGb%fP^J>(38r z{EAUihFRpa_eKs5y3?mm=eeyEXji!f9ndKV{Qg~eINig8Do!b?)oAM9&AB;%Tj=NY zXy27P+fLj@owQEcjkI>O@U{~>trzy}*>gr--Xk+p_?X#muQwN8 z>wkMLrmUv6DZ8K{MW^)RM{o9M-F$}$8jIFEscYAEdO586v_))yGgM&zObMt6_4Ii%ki&Fuc zq$hltw(LAKIz0!sYPwFGXH!*}f;J3S7E$iCau; zo1UKD==gX^zSGP=examc;;RI?AWmuqhJX-_8y967ME)Iu)B1EgNB#Z$bSb0D_wU~? zdn70*cw=#K(f((gV#Ll5>#W>P2XF0oWYUze-=g(*y2%q}E^(p4rRgm{Un#K5UAgjv zs>t5SX(B^iO|ATyh>g$Y6Swyn=;{{j-n;h@zH%VS?XXp+Z142nCjG&c-s&yABZVv1 zuYY~^3HR*K-{0v5wY9YzC}%lE#h`=2!Z%QyU+oj5bpPs^y

XX)dr^DfbI=ywcKrQFO4`^}VR>)~-MgD0kl)xF;7TPp6J-tcP_3quf zN4GDCyUYtQmI`HBv|ZQK)Z{QTGm|@iKKN!s^0xQ(WBR=)cm0_FJ&xY)PY=$eXy60EBhxg~)?Ci16`>(w75-zl8D>zzD&eplhmoG;S>>rr*UoZ%{ z8YS*x|MNAjcFkD)`DVwj&qPX(i-;WLI;s~r|#a~vy0Dh3lEEkh5Ju6#VLm$S? zCH;T?92_4X4}9^0mlOmF+(*Qwm+>MBbb{;zPuHK+c zd1hSLqE%>%u=%yETem*$t&TYS?%lhtH_1!)#K>xJCX-y$GV>U_;De| z)^ENu@7A9SX@kGs88TeFe7W-Y@#B8a1X<`F$DR(MH+wB!97XCG--i7v`{BcfcS=a; z7+p0qH2hNg=HkZ#4Y_s}z2Q2pp|c(x3cCi1P1}n+@*0@8pKSlUFgrWi%fxvkzJ4Z- z=Z?gSJ0d(hJo;6%)YNOkfFu}FzJy3DS4OnuJK4pdyPls)s1Dz-_(Vu=)nUg;qqHVF zYim||-qiC^;??nQ-qhtVqd9KO{`+)!fO8RFf1|;T8|s6O>FMd4m6Vk3wm#6xy?xNp z(NTXy!FS!ZgsJ>ZyLfm!($dqD(hC^a4{Xq=|Mo59W?h16QkBM)D+jHttnv)m1+~8j z7?_v{ymO5>X4V-t_&sK|g{zg-!NchK8iS-?_146mX5BV|ejQNr;|HtLIzi1WY*RW!t>2Tr#e7nnQu(jDO@D^k>3Nn=26E?8;%DE{vYOZz5e=nivrgQMNGp#!~`y9+;MvRyO!3ENr9k!7EoygjL)=fBt;#{Q2`* zt&To=96R~>y>GVUq|4eSZC_kVPp=PfvvaH<@y~_x3Jrfm-4I)Qm0ON-}Up0pRx~F2sDuAT+~~UP3JU=cbfB9O*?QY+@K;@-rAUe zx2V7k7zoDbjG}hKUm_kod2-jRDMPRSd(8Km8Y$dCA=gFwtrD(Vy}iAq2OA4qPM|5K zS$0UbPO2qo@L&kfs9!92@b2BA_=E)gzORw?(?gq|pLDphv@j#1uFg(L)h%B2^7U(* zo~s$AcioofXfdYfn3z5SR&e9aRu{S~9J46f7Hz%T;_B6_rmcCK)l;-T;-Ii>*%AN* z^X!D(y6NfZym7asDRy)}D#iIv3|A?3Wis z$jR4!vbgB1iThsu_sktVj@^6q=%K6l1qPOVdax_IEa&aT*XPHyZx|Y`4Kja~kl;^1 zL`_XimhIpsbb4hCjrp3Xh5MgAf7ZvFG!Npu@?p$kUX=7yg=hb<>HXpncy8&!XBQwm z7P>XOD>=9Rln88Dznj{OE?KMmtKqAK@OB0C(sb7_8p7apUEy zR}E@joT8(ni!W_mimFe#YSZ9si-y+K!X|FZYU88#{lzJUXUDBptzW;sG1G$UnxUbC zVS*0ZpFe*dpRhY%@l=w#=jg6O2I!@9Rt}LIx6s-ueva>s_ug@zNvc39h z2Edf`j5IFp-Iu31I3Y2Rgcv|pf~t{<-y^1fB$PPXRDJVTukq)gsA zIJg{x(Vp+x-o1PEQLp3@ofH#W&&qlyE9>|gTH3B6kJZu*XQwHmvvG!(_?5oE2pFG*~A#y-*K5=B1 z@-LScdreGCVh+_!tY9Kd^sbCo3Fg_>zV2bB5Lnb3_AA3ILitI8!`|tUHo+r>j&>n< z(W7&ZBmlznTJs!AD?fd*`iau0*r!wQ%xOOk3?QwasRyroRn*gE01k($C=naE_%Hq& z1&muV6Q>z#6IqF6Nt@Q*^_*`4Ye`IN}ha~FEf`{PV3}w%T=RoS2N8wYJ3aYBAhk%;_DpF z?V*n!KjyipsH>-p6eLf0kx3G@qrOTHKxbam;*;Wt$(t^$QMoPCr0HA>>!)hJB! zl&b48Emgwi&6sN0HaB9DV=yPBqdJ_Xhu+K-tVajq3eZ?);iW=-uc4vQC$myV@6@L+ zU&=5{tvX7)X;OUAVSUzZ+iU$iB_-wiku6)c#MHC>8%_@MlW)Eo$>2ma<~bampBnT9 zbCHynUwh%g1#+T&FDEZEWb8(t=*d5JE$*LdGRi}^zU413 zj1-Qc4y;ouLbyVJNQ5ghIDZ0cSf7T~!Rhfic2?G?GaZ{O@dvf?jy=cnDH39AZfS9-S^?i~Ua6|80_XV_0i-J)^X(}xKSQ0u{jTbaYa4fg zw4(HUl9Kjod@!N{iZhR>yZUw0rcJK*ogAiSI)1&saqrQi-oJ%`fsEP(&YuL-o0bXH ziehD&I`8N8<;$1$KY#Ax1ll_~mbA5Td3bo_#l$9RO_c9%uN-b2{GDTT zrlhDyvY#h${&s>zqOrOt#pq`o(}>4C)uotJamT3v{>h^6EVwuUAel!ib4W|-st8%l zB7Tfv)4thw+lC{xPE!U4_EtU&4OJODCL6YXW9{N_?ud}t?;~s0tZ7G6AzkFoojbDP zLxql0^t8;|%LEG-FAPo>9@)8br}R%W^PZlbyoNV#-sCj^0I$z+l?WfOrIOVN02@$N zSMQ_#BfI}jhV1l`a@jc8uw%2rZ-Eot;%I>oH1q8@wXmBnsPAJ9D-oZcvX?5J-O|<5E4Edq+RIkwEDHf^9=(+_G2*dBzTsBPk(L!&sDFh8f3pU6gud07$V z|NQxOUOv9;2B=aHvsmZ{T$6Jyv2$@TpEz-%^~2DRX-u-i{;L^_4^`RZFS*D_OYays zrs47n4ff^Bm(gHOd4C8et5R!Ir=_I@Kew7m!YC?kYTAMx-4&MjyN4m3(eKlzPh+f0 z1mo_0yu<(LQ;nbrllj2J?GG;~D;MEH)THQ07#SN&bF&l?a(C52mC07H;pb18OP4mx zID&)Dg3lUj(zrJ!yZl4*lKY{md~C|JIOw`Kt8sP1CAZNBj~;EBugh|r824G+msh3H|VU>Vnw4t5Y3p@r>q|+$5JT zZQZubAqB05=wqRV3JMC|t5lgB1czGlbCs(URG2$o#EBd~Uh9-QRhMa@6LS+Jbi)Z_ z{W^EmsfCl2t;a2+>u(-9bV#~b2(>j*un;V4Hr$+Tzc9Uj=68MlrntDcyhDIU{Vln| z7EgVBX;C$0uJyRkyxiOrbPC=X71lb5sArLpY2cl={{G&GQW6ppil4H{i5c#xYb(V( ze?dfz<;S z85k-6bCMVRwJKaN<>-o<%pAsfnqk!@?e9*@i*tT{enseDkGUD9Ub0S>bAoyjZ!Q6405L~#( zP+(yD(2(X#Ojr5Xul~~KM&Qs>UfrE7|EJ7edl$4aL!bl;w9Qtc?N=gX%0+NR3 zQ@=)@n7A_vEJs}`#35q6L)>}R9dM!@;4;tb{PUAnt_jpa7&m}Kr^#N@-*42qIFRIe zSz>9DZMZeRDt{dl)2Wfx{4|IlkDok|!r6kn^%3e#dryxyM57nDdyh{#SZ@odUwPyD zwK><08N}mM$ab-N02~;c0gPU%bx>hY-|N5yJMKIJDClp>6m*^IVQ>8PO9~2nc6K(w z^|%XG5Mw|a`3@db*}bw2qRjX&=U|?XbaPKpQSv9d4=?P3o`SElHfa#Wn||P`>Xe>- zL$cOY11&Z-w$0nNMT*v?4~Sm8Z~=1B9A{M~=yADT_-46xJb(E&4`gS=Bn=*}&5i$i z=H2rFnFarOjKwQS3rp!N!nL_C#Xl;KP#%Nr(3=ecmz@K;8_Y{4Iv64S8d32)#U=}w z#*vLNIVOC6tb&7sucMP1=g-vMQqp_uv*pn8_ZS&guBg{aQR9!MMn~h*oTp4)XBa#T z3;PHLBh@)y`T6sq*4EZMTR+jh#PHC`*}C4kMD=rtYDojOUukJ*=vz#T=S?8X29>@> z`CRU{Cfc92_VdP`o#!4azczU}@3i;N*mYH|a;@5^_;0V3Yz5hmnmU`g)eQnic{!i2 z{Tpyk18-x^rzbBhB}GM)i%Ok`)z#Hw)xvE@u1(o9GBScb3LI;bw?%)+JIO-I3NqoI zV{6fLb|!1*|7KBL8hCp-P1@*8djcAaw@*&o&gH1n0h{)-0Oq1%6dneu103Lk$|x(} ztJIVj7#OfUyT(LcpEO;iW!H$uk9DU8>h${nyt_a^mtNY&4*>dB0ILp$HJE;nmP*aY zFi*`vL+c!F$>n7WRezn76a>2HKjb=<{lUD2v!I|rv+6@mYFe7d>({SkS5t`j0Vz1q zYW9{@wqtqlHU?1Yw5n}ljvGKo!)G<#JP(ggh5+upmTjkBq{YpfpG=nc&x1?c`1U+V z#&?~Ry!@MbvsGbzk@2DYYoYLe^M*-PE3Kfw0BI%*ss!r6lSjs3lt59C?2 z-uCu(cR)g(ojYj`-}t&Aw*ZGgA67|!bN2i1mVHdc_=V!);w<|y-kpk1y?}~kAXnh} z0?_%QgMbX*!HMNPdUWIa>(!n6C2oA(3I$wmw7r=8#It8xe`lBlps4wPxLa~;O-4oC zm|nhmWd(5b?4$!LSRG6iA5dWesDO<+F&w2u_UusPJtzJgU^sZI$eqWJIo@jJZh}wa z4Qv2g1pJ*MCMGudx9OizqOY&t-rKu#y7)GX2Yc$I6iPT_W7AX#XmF)v@Pfff&iTNi{9%1)A9X3hN5 zLx%LQ7g7x>)-i59&I0J+g^Rag<3@}XKS+Dzq)N-&sH&`N#~q)Y>xvO@T?`?-IBHn>^l4hOg$lGWBL1mZ_b63YR??xp+`&L3xXZx6fcSWr4dmT| zf|wp1(As7%EA(r-AV{K#8(cSHZ)(hDxGD2HL#REK(xJh}w)EOr0@uPyYEme5U zMRk=b*tMaO=g+T8QSd+sJ$(4^-h&5xN4kY6keFz;95bDLrnR8LI?0cp@!?KDk(94{ra^L(s^fB*Oo;+9c9-A><8^8Cd1?c0O2!jy(fycsUz zI-z@t|G6!zrDH4h^;Xca=jD0f6858#{U@Yko-vr4o7?6H{%uTKEufzKc4nHBK6gZC zeCbWvK;wqt7W`QmdOxROQ(fWVut$&d|NMA`x;YnH>w8a-I(?DnrN_szvUa#h-|Om5 ztt>B*DuJn+)}wItYtFNrnLCHrf1=Kh^g9kJp!>4z zJQr^j-?6d^{1@sJ6Gcd`WX*9=QTnhq@$p5tEBC^~X(`7o+bP0==vyc3hTmFkLCf}x zjNE4N8|B-9DV~}tMBpA8>GvN$?qp|+&@ggPjvhT4I!M2Etp{%5{RaICDjVI^lzjPEVHu zCvxxF1$&-HM<^$J#m@O=8{e6(P>e-)s@0ZrMzutvL3qD7ssHo^XJ4ywflI1jW z0FLJl`sLJy$>waEn1loklR3e=aPsR@beIhdd&-kP@3LK(Hlu{eL<{?@e74%@#Uc;U zgbouUNQ>z_KoR;b!*bftD*UDX1wZ=Y+IRX;5MsH?iE` zyJwHoty@Q6E7!njYdy)%&Yo=R72mFe9tQE00VxWIZ_}{@Ja<8yH49z0!4$yl_rL`E zke*(XbXEBHi4%N>4?j3@Thg%5Y*SOxD`Vks*z?FtaO31-xc9E29~&DRot%_)c0TDJ z5P)K3K%j&H(hX|2Srlq$M_->Wu0PT4@D%_ueQ_3X=6BU<7^5Ky9XnQT*XH6&0wAKI zoD`Im2W%*UnBCGm1Qx|41$8-9*8Dgd2cfq1``* zEaLvTt4xRy?g;N8quAu+b+)!soS9nriF{56IDrYtbd8AEvR&M{aZZCfD6!Bx-@r3XKuLE;*~8u5Vj2FX)eM~4d_Oa`NoppLTg z@>P_P<)80wD4mNEkIa3J9DvsyGbt&lEW45I+J&x6IK_mZdeShFf=kiV8q{h!+WNhu zv{dENr8O{=V;pdCkf@MWR%XEm;^yb4Ml*a2G&|IomM6FZCQuB-zMhTEb7rKi;Z4)q ztgbIYjKDLrNDW=PaYF`J5|^Jf{rEy{!rsCU-70lnO5eTe#@guP1gZ54sBk zK8e^u^(7KE{1_tpDCZ-N0=Jvdw5=fW#4tV!0i}Q{W0)M3RaK>cnJ_TigM-&uI81L} zTAFF=8v6Af)K3~I6>^4AF8+Uc_kKnfB<&rT3L3x$=mkPYk9tGJw$pKdS+{ES>d?oJ z{ct8x}W?`&F2I`J2WQD zV#?gy96?sN#@`VWxtnqI@?}3zR&I#Eh#3$tiA(Im%%wfJG;RPvvIB)dWC6@|xM7~a zmtz{i-FyQXTh$_><@svKhu< zFM}zFU9Hp6(IFoOYCZw$(71gN?|FC19`_H%&=|rf@F+{ZeqEQ5k-=prDRBXP3m}mm ziWljT5w17_&m`QoLp-@$;4C66hS^Lq7PhoH+1C6JP)7mmYCFh2-mgNB3y8yFc*u?OPT& zRT#OqMp~D;*0J*F@cauM;Mfi|WisQ$HOn9gFhYI`(`gab5z(jdDcU+c3LahwoTccbBqk`9Wfc`&=svp-9FPM~AiU@Dl`F-7`=C|F zZ3i~MQ7C2@r>3Fd-LYd0(kMd0!l#iic=6%|IE@eb0VC&;Ge)^Ypuot`Gc{#IPv5a) z2VoY(zD4!%@LinP4-D3nW!bR`xSk~bKr?uGc~?OzE60VGHNUtOF2m!92tFYp7AR`~v$C=%EaJ?A1Hb|HbL0GQ+!-PGA?`KQR>&ow_SU_iKwNzoZ5(8a7B?0Jj132MHfJHp@Q{GXPNn6zvpPoUXZfFlvneJ^~5wDcKhtAhO{ulxvkfefkt2y%=I0 z3p=|na*u9DZ%1tGgFTCx=9Q6g43a0HU?7lj?TOu^d!Whl9XqxOxd(DDjEr_4(8}>b zO9^$bDr>Rh7kiy!HxdlH<)rH(2l`7-(gNBbIsoy91V`VaVFOVWH#TxyzkVHR`sp)g z=n$w&GyQcaMooQ4OhZd+8))wtC8Y}R1%O5GFadRXm-GJCUFA&VbOGEG1_3=AQs8=c z3dvfz*2Pia23@#wBpC`21`OOself%e0N}&{ysPX}a>Vj!kjz2~EORMV`_+6UI!fkRT@#!)Cq`^VS zEr*EqRx|rT=ca1gFmzaSvf?ja7%{5}{6IVhW*T5qMVJ$60S&4KXM=;26XH2HPA)7@ zNo(svunL$dtS%wwxT|juHF|V+UjuQCMQH=$eZ==eXXoFr82TX?t(o9^jOOnk7_e@) zpwW`7Akvk=P_jxI8y^dd0CXUSNG1e|#Yd7G%q&W_twNk1^XP+7%_@@N`7^Y1OhjZe zCQh^1!~N>EZN}s9RQP~waNa3JF6xNa9dUMc25}9*QNXcVg-}Q1`y0#!V785ojh2HX z1)`~?MPLEwG=gjGP>PPa4!@6LL+Ay-enp<3`%MtGBq681O-eclJ~gahfG(PPpoZA3gnVq^KxnZGW4yvKB;HOp!> zAcOSCCsZiO3o}Cbi+_$cl&<*T7>S-q2cKba@~2WWdj_g~=yy5;#h3Pqc>kct6B@;onKg$i$ZSb|JI*y`iB3?{@FmGe&4A zqyll;pzM^wz^p-%j07&w4_HTZ;F*61eFCRDaECgjYO6 zLYNDdrmrGHE4PkIJP>o~OXLalcw0qi3zQ-ZU#M%ENJ9+@fnI>38@1+%kjt&b2Q|73 zwp{!0@H$v1F}@1&1N%P#k-<#>tmm%ve~Hn8LhDD+t@q25(ukSmB`58~DAaQ&5F!x( zvV7P3=vnrE=OKLt_k-OyUp-=S@)jXaK(%G)U*Hjx=<&tY4>vDH)>Oq1!a9S$h4y2Nplp~yfi1vXP7BcuN&i=VfY>Jdr~e6R{~Ugi4bN6 zX{J&B_1h8R9bvP`1!aG`AtNJW+LWQ#e>xq?ekZP)Ur>-Y4z6q)9|@MD2{CdAQNY7G zsu9T5${$2e3cx#|S~LdVtODaB;Vhh?VszOowVR+x<>-I> z;;xcCc6B)7cdHb}9qMCbXyKk)?*9f%FxvT%fn&=SGFm{Vns2yiYHo!zwZpt_7WW>? zluxeUs<2}Cs$58*bT(NO_7rdhfg|A1dFSSy0OeQ(019N(4s-n8{re^OF2s{DFLYh_ zE1cF;S6@$t29zfLgk3y}OvoOb*$+g_!$K!y-F-$|`D1hQR(SPi&Yms7rQl5S2}^PU zD8CmGLE@pUc|f_Acb_GSpCn&z^3PA`e!0rR%qoCH2OY+*kyDN<^bvI}oAJ5~6HfSYJ(J$sqodMANDpkRtPv(R(g5hezJK$6}s?BUkxI0i;To!)GBZaWCAG zR+#{_7C=W#4oDf&HcmUg~l%s>Cx6?0KqD+=KkdK3%N zh-<@A2H->Ka?n6AYTxFDi$m@iW(Ow4&7i^fU^CT^8DAaHNXa!ZPTtPN6#_Bk?xMin zy{jn6-cNS4Ff|@Bb={7S^X0kN76=tZggt`0z$I9v5PrZLR1RNb;6n=2O-Q796ZsH| zzSq~6W142&L_V9$QphE;w`mt1AK(CNq=6%K#E4~tvj!^Ig9mK*(4)}O9P1+LlpC^k zSX*1mCST=d!L~xE?alhPo9&hiuV1&OqB=HOdO!j_62&#VHHBgNIP=!y_h#HnmtSbH zL$P6V%D=P%Ag3K!Z+889xyjwKRyGbFDND;#We1g+mYio7iKhx*9slr3E=8xeX^C+E z?4DIvD8b0Y{cJ|UELw)@cYE}2op-+h9-`T0(YR7=_ z9Gdjz*Gb=_e+^X8$Ou-4L~{^j7Blz4bqyc^#s(aP3b66gg|G3iUQuK25F??D7DGZA z@C~B(cn%*lN&lf<%?AL!XPrZIPY=CiYV!9rtDBggG9el^#;&rma{Jd(q?>nO-39lP zH9cYV-ixf4@^Sn;4&OdfkkA&=I3kXaC@xm#z{AK$Cb&HZMv=^jlJQ}DW7UK=;a%~r<#lWB-hiV5L%wQNb(dgmmeZJx0>PfM?$kajyA#?#qQqSCcoq<7@ zXnJ{kf-(E%O~c|p2|1K=iV7aw~3)Wo53In zU(V|@@&@#_9{M(-Cy}$y|p@BON zh?3kl;NNpkkF3S4zJn$vJLgHWZmS=-Z{1BNTSNFF0RDVf2|9T2AYlh+^aPUN(CT5@ zvG$c1ol*7l+y|W2>a+|khcesmtotIBxp|xDEtaPh+FdX17~HSTjY+YRM=$bc^nrxN z7%6H?`jT|+}^C}T+Jk8M|OG&z0Agaz>%FzkAP%asTC5(2_On8DC?Xg9pxn()+& zdXMqb_@zy@ZApV7bwB~Lb8{USc+H53*9pLxjRosz_S6BnYsI<^m_+D)Y9L|Q=EyA~ zh_Tu{C*J9ZQ}CG|cl?*OhIY@Rfe?ih`bsE5l1Fr9Fv=sx8Pg!(S^>oqP$4K7vaq;{ zdwRhq-X;mQ{pi%xDO||PXM2iPdd>*!+qc2t85DJ8s0+AVN~~oYZ7uZL1g9$~^(2Kl z(khncJjaS6Om{W+zmND1P73&&LbI9HebG(q?0oz8GogkmaG||FW1+yR$%2H}XZ&*F zl^EXtPHnIOvjP@f&(2QkAxR-<2uYY?u475=@q;>Bt=if!xoEI46XRg&9<=nlq&0KU zW(Y?l6z>JT=4ji;-)%xx-;9ZTktQPENb4#e(dBlQND3LIn@I)&d64=<3L(CyUrHQ8oZcAp zagqQOWS*=?5_mNuq)2fqiG~4d=i#GA)>7Q^6HAmAGa=PFdp^xI_9@m1z-bu9soA5?_ZwLnmY&f|9;Hp2d{9mpLkR0oriM}ebGXyz2mv9S) z$BSUn=+nRk>L$mRd3l<<-6zwi^roNl%C{#bH*%jxa^ib_qH$*S{CsVLy)9&1u@KaKpw_{Q?*KbgzId_g{-0IxW8ykZQ~c&ll08#bmW~JHKKeNKP{d8P z&O37F9|z?Io3q?3(YSh9Hht^BRNz?qwYTfS>lkxQzY+ci$uyYLd&k6G_5m@GPssY) zpLNqFA7U$k)JtnAB7Cza!%58y=Me`(To>k|bP`A7%lQ|6pA-2%Ieq%dmd>SfA4pRY z3vb~Kbnz!EcKrRkX0dHa^~WRW`}!fVZ{F-#o+(_B*DQ#eQM?ev+XrA6&&0?mi!X;c zlGSbs#fO9juq}f06IAe+dQCUgy93+fK!>1m-5uYSHlpVetfit-vun`jTxEDLNkb5} zits1f+~^!eaPpUMcqeP2J$UEmi_PdYVV5T~b`A-xP6&CVQh{6q-kp%NC8KfAo;Nm` z>u&d7gm6Fv05Fie8g`tjlqb0_5jCgp1k@ zHy4B3l-(AX#1uiK8xwfvSn1v^JKidp>{6?v^-JiJh*;feP@ws4%1|66Z6FM`I zj~Y}j)*g+5JcTv4v78O^{$gLjTclfj2A`Tvq8qbHG~&|K?V06EsM~o$@shBb%7D%J zUyY6J&?z+wqCtXS=iHl7hW)JojUN)OypfQn(kJwMn27{i^>`#4fFn-v`Ygmap%S|d z5N;De`5sZQr=UTpnFdIze0t08Ac*V4fJNzA)p>;pd^aRC=vuCRbkPo2*pBv3A_w51 z0b8ll3&>Q1xdQBS=7aY1)A*;ypQtuCm0=tWZZLhT@K5OkIXvy^D&CM&fzN`IOMC`t z=~aMlqcsxyHgj-ri;6x~5Yl3sb`A~+>C>=!XDoUf7?teC!i<l`!oI zt$cjYfM%xW@S#Jju-IT9&koJG!osA6cdk7#fJ1&pL199J8?Gt=geZ%iAQnSob5@J@$&JyMoSjcv z9RGzA)LiJMGh_{zLCoEe{5;nsQFIe~Eq+-mOG|gK2S^0oh{LVTr^Vd{r%O;5E`nwj zO@cLQYRTylvRYW;qXYHv!C2MEFx_)x(HtfV-~p5l_w{^omOmfdzYn*FitLX}?82!7 zDg+3>H`}4M;h5wEfZ+kE-*3pOfs{(N%1Ud+cgRYzNu(QsKdZ7L6%RI`nMjUyfVEp@+2;{^7F zwxHz_VQ6&d*Wm+i1n_3gbBFLncbwJN)&jq>TAH^d!U`ylrtV%bF)hNx$d9ml%G1y7LyQzE zqsgL5H(nCagua0Y7@g>;D1(h46&rG&VaEZhUHHNTjK}1ek$9@Se232`^L^mk(lUX4 zXl5u(-YT3D9>7Jo5m=TbW{-5Ni)wyheVC``Y8+PL%jzx8j^&M9V=U!9a3DBW>57Ji zG$`~9AEN-rp+ZQC)bG@ zpY8DF@+wdw6aqmQoU`WsNVIFLWA!FK0G!43yf}1>1Tj=p#^iIj*~X7XaAL#lnbS9FwfOkrK9|X?EYnqO`EuU<-m5zQ7wr^=;)71+EAGsj0Fz7m^a~ZE_ z)m}sebB`DaC;&dFBlt+>nKP9zR?Tp$md;qNCcGg=gV~+Vuw{4UdJk#8on{M4a=dBk75_91W*MI zDSEFA`V5JZ;49P#%)%Gf?As)9lxfP`$fz>tIQ}~jM_dm&DLCh8>|B70qF{m$^+9tZ zHa+$OJ0iP)V#vcLh&%^AK_qt63#3mt*HB@Q=$Mb!^#a%ecf=6!z*hw);}sX*PCV6? zoT<}xOY>MNA(|g_yb{P!$Y@GK0f#;llalhSg}ssXE;7h`M~`lVl7L@HZ`{NnDk^Ge zW#xfr97&m=iQw??Aq$PB_4ttC+5FY&w%O%d{2?|R(9R=9h4$z!X!QV!(ij_%jRjzp z;%Nn2P$S+LEEbdT@(*_E;s06M+MWW=i$*PgwnGjmDJzpTdbvj)C!1_vk)sS%PtVZM z8|6xLSloSVWIA{btyB!)@fu`{1Rep|vck3kRwdkHV`Ix&jt@AUCs6}P!X(5%nxeH6 z-|1jkkaVIs0#to4X;_D^2%D}1ZHZ*~uqfXV8zQ5MXKl>(Mp#((eBQV?KbQg!<__YK z=;JKN2OvpFymG__h!}zn0Zh+eYimomB5XAnRw*-1&57!QWN8Qc)BiF|P|fLuoD!C{D!W+{vC8eOcqYO z6n4{W@(22n_bKAy~+q zyk!{c_3Z-#{%x)cOqeI|(1-;G03mRjg)yVxg!?n3u}(OGmfA_94tf9767MFpfD6r!R+ZgqKztVSME7xB+&MaPvi=3Rz+ytIo0zW9p0QfQkAM*H4IujQMOahtH2b zON%S$0E6cth(PWnhNJ0wMF$wr?1!9Z!l)z0YhdE@48BTWl@S(umNlRQh)P~cKJj7-qDgQG5iKQ6q{A0k-z}6)~Jpx$`H^rtzUN^QYVfVdJO^#dv z#ENk%f?ysIy$+TkNH~_t9vIy!o+qIaJXFIQ0WdC}YXfm{;Na^MH(?w- zhgjYa-GT$#%32+Gq$kgFWii&Mq!wa^h6r z84(19AdZ{Yei5?kLAPaR;O%HmqP%99PS^e&mFgv;3OCm-4IV zcy!ia7dR_7*8uE4z4rqW$18VWZjgX9FIzWj&GwV_?ijxMh(_VoieYKtEDVBKXkeo) zc5QWu0)jk>R6$m!E7f;mB0>>-RfLC3ExOg$*P~Wb4mPYNFPTi%Pk^n{d(Z56xhK|K z$IIEUU||@~&sv37BxH?5?ng&QHGKOJt{iW>prJtzEDGmiHuf|>-+v@KvNAD6r1zjA zIsAJnf_WXCoj)4uxL?+&eEt7C&FXhPSv*F(8Grl#_lPWGz^JxHRc=K|aH~j#m&M=b zWI5^aFFZAKvbcW7{;xlc>q&Vsg-7Szi+2~!gg-iR`)H+la{Sv3lzvTKraNDE{ZJRvsbd#Di5lDB5I40-895TU@-L-Vj-~5MobbvV**y zg6kz@H>^pVo}oj~C<&HAGyw7=)(@PJ*V%}1k)XbWd_n-(5J6X_kPHx)+v0kX3NVC* zK8g*R4&?j*bII!w%=!Y;K-#eC^JgK`Mj_}f9mp3UWjdA6_F4_mJBU+OBRWtxAQOG*r1=2_2=@8N=0>C2J9N4Dz@-bwkK&P9nK0~R2XVTu+r`}~vm>#y;kQpJ; z4zL#)jo6}&w~crUCrlS;h2jo|rd#H>UfK|p)L8R0p6!7S%l~`(+_=i<>tHzSWE+H{ z%Mo|JD*0;WI%HqSBcsyHTSU!skU9WXr~!{c26yz4p2e(fOMTy@$l%Js3bNCTv%PtG zxP<}Mx2RyIRhL{=b~b1gRlehtG?HU@6dby82#`?8uU}V;$kT83T}~xLiEJFf*&&UJ zU*Qon4oMH?!&U54JTkz1c!UyE(5VqRGh>&2TLxRLj!LJ}Bb^x-HKVe~Eafg*y z$4U8J=vF8zB~2kYPNej{PXdzEW)DmDO!(qLfQazZmyneca75eRa!^W0|3j9UY*L|) z2p7X!TOo9g-W<^UIsw8ZFdn^!r1Ie52k7kBL)c;c{NV=M4aR2+a@v*PS$7N$GEh>} z(?3EL`uM0C{0Ox`lCl(OsqmC1Fnvh|Lch$g?$}eJV^<$ z1z(^}cxH4IJXEbL%c_gW>v(ilaecko3&&kMcIZO)!L2C8i$L&Tq5vM3LE*+?>2;E| zg>Xf|Q(gSs@Dv(AHj?~9g;{|#?901c-E z??)6#$Y@1?BqoNu=k4u}W7g6Dp_74TX=zEJAj4_^B^wWQDFVbfh|R9FLHn^z>gDAH zi$E@k?RaoWdc6%6q0=*D69S+nLJ`)*ux1S#fl^GvyqytO2TaPJ>0K&^PcfbrL!#W+ z&9at~qa1gf+>Iv`x#Q7w9SDj;_1KgfjJYQT*pBf2o1>Kppuu=>Oz3s-=XHxJ|)si(oF?g|#*U`8&ioZimvt8|ld64%m$P7*%Szm>0 zxI=piBy5;S~qg(>Y~UgT*a5Gf&nG=Bh=(u7k|xHujlD|IKO z1}-R-?~4_>!5!DdoMny9kaQDB`UP$e-BW^BQf_^BZwk|3J=v9-Jqpi_)Am7!otFN;cq6P<&bRVXGU<&W<7JYub_wf!gl`WfIKIQ z=Xiau=MH3*9&P=&sAvfuun4dRo!F;xVgbrA=tT+QS)}2@-!1|Xz)2<^5LmT(L+P#` z>RbLj?+i`Dva@V$=n@ATdK-E>$h+%U^-gTNk#W$;zhehF&>Dz-2(G{S?mWHVIz=m# zVH*_RM+FLu&`~Tx(Ey|A^*o4Tq03U-A?vQK#?uVQ6Gag74gy~_=Tv^e=NpDJ5ZbG` zHtq}2TW~1@w+JWKJ31#dZr|Lg5t}L{s3Kwww`#P4%MBs8JWlRi}~^U@dpwlCA+g=*XClTl)ofBmdS=F5TsrByrZ0u8OGNfIB?)N3`O!h zfc}0us9O-mx!87{FT)I!O~wgkCdL|M3X&qk)d)eIm$tTUha0S{s_Ko% z5VivN-VMRxfx2M6sEAfWp@m8m>Kz>&vqN{60-74bt`siiNNY*-$lYyjQ z!=8AmOBp4i_M_Z*B2OAJv!pFTPwW(HSMWD8>+0^l)Mv=A`V(~nc6~R}4eYT^1St?@5Cf7d!r;j#;Jvd5fNr_ID-ln}?7E{!fuuyM zePBDdBY^?snTMZ_NhA>G| z6_GMT@{vFZyahopuq_#I(8)t4fNOSP6TWKj>?KXjeKpKA_s=3Q59vurx5%C5>J2Rz zjgFI|WXBfB+X5(z*qb(+BX`!S>W5pJcir>0b2W+-MlP0&ZkElarm%b#VSxf91@3LbZ z0qo56+2?2EP{!;SY!u(jqlDZ5SH3Ax(N-Ds=|{r~F4kes|Uw;8!B>5a*xk zd_&iR1|J)_wo9YNjbpCs8i0MxyJFS(XxAnR+FcM^?9Ir~Cqd1yK4(#GpyVn7O4L%c z&uv*>OQIYH11tNloHt3}eC@z}c%h-#uA;8%4$Ka$EPWEFq6E6eLuPkAlC5O12SGX| zEQPc(5LIg_sDj3UF5UV#L_yElk6*uTB_%Z)SKy|dxnL~rLmCR}o=TlGH_dzF7`h;4 zE6EV<8@_-z%BFL)*O24048$8nnonR%;HoA9tW!_5%-fBuZ+9aRY5oK2|Ixhp^%>Wv z)+BY)mSW?12X(Q8Ssb(exQ2IN(@vul3fhx9l2dWWD)jfS9I-O3+q$BRhHx{27pgp* zsxM}bG}CnJ-u>m-Yy&guTk#^04}f5?J$FW6Ul6TuT=53Q*koqSf#8?hi>Pua2;{CS z1@sQ$`Fa}cR3!BXJVNAd|N61S%Y;)}z4EzHPHia`5JK6oi+jNPHPp4!%zJgLti%1NU;|>t^^``;PpgF?tS_-87d)mf?CFSO}r^tTMV>gRegx*By zZ3r>xVtIYGJUjs}5D{?5q7<3`iPZW#EG$a(BFD_nyhh$S1r;X~=1+f4<$82d4Smnnuw!Q3bl#K=WFDrx)_VF5<0)C5Yz_FFs-%aFY6 zabSuZiyYl|Fw%T<&DE9muEi1(=|mtIQEWc?00nZ1>=715ajT5xQ?<2s6>HqoJU8PN zg#~%)!3~GQ+`k|_xoOy8_S+*&{Q9RxCAvB&Uy@?wDPHplOHAMx=?EiJel z5phehvMJO5$yoL|9|K)zseTR31mRP}PPGR^?z11q14Sarob2*$=A1c7-KuNp>31eS zA@x#G{nRW@)25jZhwMet5bUB3&d`IxXh=e`l#MGIAQ83FYAR&*ysI0&OpP1`e`de$ zd9YSnwiEEo3s4(j$3)6b-wy$1&_&%+w*^tbnTS~~ikD#Nk)ucL64xR%?a|W4$b8Wv z#cA7R1GM>|cZa9@p<5iV=V$#!lM90C^^0@a;pX<5 z2PBCR$Ab_hqy-K4RVF%QV@GVgFZ%+mi)okVcz-JnZdQ%tL>aN|R@8Cm3^CP7?lm7y zy=7ddj*-Jgj%=$g(F}h4pU$?)^<8i0FUTnb7$aJ?^a`oc6URoI&o9Pz8spFet=Ajl zK9qQJ$lcnh+%j)q(|}GzReCM6r_;))q_`awTf3jzyCw}A-hlA3fnE*YRbCU=?`4Z} zmen!Q!C?fCafeHH^YnrGoo$p92(13VvxoiR`^g*SgFFP1s!1`+=!N%1-Nc~>r(&Bw za-NtU{0-nus(&JgM#WC#1ma%hJk{OZ-3>%6%wX$3>@g3!QAu9*^jWi%ISbmHs7B0= zsKOU=<7y$gRJHw&?>r3FoOxvw7o@Own6GaDrv%Hec*Tm|QOl=HY}uf$n2C98jmX&) zdgieMpJDexGvqeXg3!pe_K{jm%G5vTIoKWA9=+_tYSS)dF}f{axHsTfO&vDytNP)T zKs{$~>JhOGK}GX9dGNIt1PZQUXGFxXu-0vKavj||>j#ljw#Y8A`w%W<>OEnaF;m7O(Og-VIE_!fa`d+lkN-+o=pe|$S~+RA>kuHm@QL`g}>G`KHJ z${=gqs%8p8SWGqrT#Ge(oChIuI22IHeg8~Cp8B{TxHl}D*tyYq=LR`rla9GVpR#u0 z1=2l8hOn#UpkItXVB3TFM%Gu=QX6sK-at-}Qp2haK@Cl^Zrz%=($vtfjgUsPr;_l0 zm80(#y<5`6OlxL#L9pWlbA?op3MnsJWEb15YH`D-ub$sHNMJUcAT6Tj>v1GMl>>fTs$SYs z^#Lfn@k6#;SGt&CO-V8nO;*5FiJlSp^ryr$%G65S*RGZt-r2wRj%Krq-_ zH$uQr;P)poh0M&>oS>0!69L2i6et`k;%DCx4C5$xpyTIrpy1Tb(zFT*Wb%6SwKfE_ zmOpJq(qk-bEx<3BNo01*Tl_7~&;S@wDjYtHv_{xA$$ZQGSA5Rhszm}cLAe3+V~z8* zpWhM;{=paurmjuo&c0b`D)9I(9lhNLQhSXWHE(6zV)koy)EnU67fNHU1<^7!fxAeK zS5V?aG6$mIF1k>}6+PnC>?e6vSktV7Ocfkxa=`L7I>)mnVKwl(`qyA&CIg3Cm{B$% z<=;@TP4j42LS9>)T>mK7-_;A&h4@WM9YBFYIxmt5geSkEU=Gx_zlQQ)G*|racS$< z!Vk#fJf`KUDG(hXrf9nP6-g|cX;pT+bf>|Xelj6ttt0*U@*r2^8&1`*8C|OIcHli+ z)eESS0^6j&TC{GxgWPX1E`SpXMULBuu`Gh`Ly-Q{X#q3-p@UoW+5se+Z@<31sO93L z;nW5`R*QDoKIo&&hf8T^zWj5xk++D+s9^f(_}KyAD0sPlt-t{ah?TlFO&?KpQMx!?;`i* zPSM^!)jMlB-Th=}iz&C-F}P#BRs$Rika{4;z35WqcrdvsZGEDCATO(>-+Nt~%q3)L zt(BT~x=s!!2|eBf?qi;_E%$JYfSxY~KN>Q0XyCUmKibXe@uQA@(-3q6O;4-7(DecV zm)3bQxmy6)+dVX~&}_#UATR0lV*@YJ!zA@$*JW661QlCN+gsu^KYeALaRo}xz*8lw zkj6!FB48R3J7~_&*YsyGNW>96+#r`mikeWdDOZ#}9Xj+I9$$2s3dy$uS^pN0M!_NI z(i6cD!3z$$Wl_+L4uFN?q>36uChKqxN_#k~BFU-2(F|HQ-2wGqQF;~Z+)s5pjACQH z<%l7P+1wlcZ6Kmg}O-81%70dG%uD^eoc^Cgs=kRJ&uv8mc(V@G_(9Vdj zijZssTxmT)SU!}Bi*#k=ynLFw-HB>Fz{UQSgHh}r8)ef&Xt-V5W)ev#O`0D+JFNxz z^n`aC2?jVBck-9!G3YTt5D}t?W=4wUKWDE_JJpdyelo|a{7iZ^cv}|h`*i?rD2l|MJ-2aCzGmJ;V0NEW0f&g&Hvce#)Ctly%d?ll&9{^002I9# zH2D;(_O^)LAfpScoHvS3Kqh90UzxaUKUgW=(U$U>m zSEctBBMk62k)?>3ihO-MXBCz>FDKhD_sNat)Ho!ao?U=+xolFz4ff_HKlEL_ssK0OE7M@=koT2#jBJAQXFo!vH@6zgplh){+{F&k7+||94dJokz1FXCa++8#6 zHIcK`so!Lr7>5ir*$MnG>r8C6U#3>8X*~p2KB)h6{hrf(`n#mHo{-R+y#6-mj}0u< zAlFtEV`b_RoA(usF)iNN^-%j2`>SfxcHBd*V?ZF#8NE3;j|y6f==BDL9|>C%|uU`-5a`VQGT0GwZ4|OBzY;i*h z%`G~5;C+m*$m`Ich`z+-ch!1d&5XYZ?B;XZ%2UQyD`wg2?VD1nBW`p(ed)O=iewkU zhG>3}CbEm*5b6l=$wf4>R|>YEFK-m7p|tQ3X{Z6jmp}x79I;xf@=MTcg5!buh?20n zx?1|V=FauF_f>$6&A*H5XSE8i)h%jmIrgj_;->%oX%2*C0JDWdRPUO)t>>E=WtsNB zdX&oCo=WsQ(&bHwkZ?Ejq0zQj=bHULZNGfcp|<@miw&(RE1F3&0p!g#(gG>a(QfTq zcs{H?jWGiLt4x*AWEHAa{&CJ#MwMjUGNK9ZrFt$kKj(iA{65xuSjL!_jnTmVt}fRS z;1Di{IK-y6Tx#@R)eJuEBP&;(;jot}49H7?1z!-c-~v~Eu=rPz$eUqjJ+)@(6Y$0t zp8S_LX+8n(F!vK=TX-=aQohk@jQjBDv<Sa1@~G7Ab@nX>uC^f`bKxW$fViki2CjP(joHwH4y(gB@D)eoL1v z(|8!H>%B9d+NT_1g?n7vSewiYB)*R^^g3h~!~joWnrQ=fqj%h%Rwq0a>lX zCwZp&Vc*rzyq`}*ek~?6fA{Ea11mr})tq;mKqN;Gvj=(lBK~OKLW7zm@b&nI{J6HH zzxJk9REG3eU^rfzNfM%jM_exUQ-C5nA|fKvROu^{$%#O2P~~+Hz=(C(49@}L4TQvC zzW->Z%+;kF+e(uE;ll@kt6W`OL0juc=7cgLxxXtN8}gR_m={s7yHh-(nC%E+byc(p zw>YXX)hrl10-=WHn5zGEiBW{t|FXpBo8NygF*^35S;qzn1&W`sn||o5&ZX8C??TF3 zMYmS#Do#)|bcaLZ`398F(rz`PdA+}yjkZ;>C-bp#}j4#dqViDtl0#8Q>O3c4C$FFZAjn zghuGJ4PzZZvY6#k*VEoAbs&HOmNj)1IL8HYJ}QlFB1FLNCnX1+hi9>k?K z7Dgi(K+|mf`f}r9b+|!elOCCq2|YrOQK|1rDo37&0C6XGhlKP_{rU5n+**Ve0(jb8 zD3q9PJr$jB+Qt_6I+dMZqjc8oS(pezbQ;!4DA6$_SQ9?< zzjP4~3CTxSYZ|$j^l%U}#JPsx)FB|NCZ@izq_KN|u!rIZN!{1W_$@i5Vl&~>7EzMw zf#Gm7DJ`Vs#Ohhx>_OwrqW*S;YsDfYbOaI2` ze)|b{q)}&54jrQfp~fbbO8-olAV|pY|)uTuGn0j zZw$gk>_f#`;3or5xVRq$N6l0kwb-`ttuow4!{L?jH}PWwP#Qz*#CqrRoVkgq%NZCb z0wS0;4wGAv!z1u2#lLrwL)94AVG%b088OuE4_MjF0KW_samPx@t^g!foEdJy&7wEL zDGCA8>t-JvmxthlPWYvCJD20=g6%A?-@-9!4vy*+x1x(-bIYhV*z+E#pSbPfV<>T+ zZWfegb%=T5s7cQQrPP9j&3vYrE%3|gn9RB( zUTV%C)TyjO`{~ffX=#dXKik#1&Sqj)&Q?$Gx z(nOCy02TEQjWpJXS?RN{gzC&moL}dkh_8QQnbhL|sGyWmcLB`9)f2%)kS=8&DiZ3UqfyJ;jv(gy?iMDhN|dXq4r}9nFvM$)~T@8J*tN1j+xw6E$4*#C~sbbWBD}P$9H~r%O zFMj&>#7_tR9~3_U*W0;597*a#d?drTGolJph?ghMSJAAyY2w3DO9ovK(ga?b$$&W{Q{p_tz=Hafz+s=u&W~WH%8@S?52zj&(QU9G zEg-aJIxlT8T4in`DhXenv$;v0g>RAj`B%ngjLeWq9Y0|l8SyPg(Mlm5SHgvXxFQDM zhuMzoE@^nA`1njymtB+c{OWFl&*B!(gZoj#g$+VNwYtJbN<`|l8Yk#B5 zS!8nH@n7D?BkaWBQ_*eHUW7wmr0+N_?P6Aag#iV0;8cUxTJi+ZazF%<+^% z;Tqi$0!V){uIX>GD;sZQ%LdzWL<4X z1x<%cKxY41?H(BXPQsx$Lwk74y>&1szis=<_6&C;C4?Hj{2^clA}^v zO1d}7_RU{8tH0FnQl!Vytw$?<0}OTvhthv*ZY~Y}FG)TZRPZdm6+K8;@!P_dL*_fJ zdLmu}G$-vk;U3iZZwznWeKZ$Xao)g{kgm>2!eEJvRNsQ$R%Y zB(S}nd4kKzctWwJB%?$^_dYwUD_MA5gy4cM@YhE-IJ09Yu4QP8)~e}y97>)D#7vKi zD0RBf;6e^OY4T*$R4y_IMA4wsFNb-*xZ|-V>L1ilzn#l}QoEc!dsb$kh%9W3!-wl6 zP=XDh5F2sNg|*(4V+}+-;M*lwsR`+1!!cJ)q}lKU(#^qNotM;^jMRHy+E^5I(g(yR zAd!Z1zu|+Zvzxkld-{wQw4Hrgbw#bsM;9do;YVFdd~LVC4c})Nv~=64QgzPNgEzX; zc|r83#dTf1Hzcn`fZrf9a-gYT2Y9}STG-U}K7`s5HiBX^72ua1Ukw-uy%ZvF!8qw2 zMQ1UIaqQ9*0{gn@yJl84Q)l1;WTMM!RMiu{<(}4=72*PUvIotW^ohW3M>^c;K)Oq2 zx&4GM4)%7Rv}ZMp?NxwtDcJ%hO*ixN7rs%hw#)qIfK*3O1^Lz7WapZ~TfLJ)o~Z3f zIX^c~Rc&$dUnWMG8>L(?#K?MH?7F_fYLHQ&NUIO(F8Deju`UxONXD0WJoYUj*Hz4_}r7%@}2iYjQ3Dtd=p3cNh6w0AT z8~!>lXct$@u-i$mbQ3i1uDw=O9}0(A00Jp7P*S|1@x_k*qbR5gjq5|in^%nIy}cK1 z%UDbfOCySmUx2~ru*|y@J$rBm|7#n+O<8H0xoD=r>Rd3EJttFVhsDljIf9UP!x$Vp zlc(!OwA0r(aNEJ86X}R3|En1=(D1ZsH$(5}kAWZJ-z|OK`1q4O!}tF?nkv_SG*z|d z>W}n;hm%QD6cu-fpSZ3L&|gv0oT`BrDvk3u)6*kPIhB5)h8xO!6amQy7jL)DA6Kx; zfxS(+zL;x{3@s+_6`R!X%x3+;UFiIffXsF7B!GNtVM{~BWtTDEf0qEhNU6ZmkgjlI z!bszVHSpxUqdWeG3M-LnU0xvFf?t{)J5wZ{qI~DzM%SFuT~0ri4Q;Xwpi11<7L49Q z{m)3rc2HVTzpcK_ zmVIa)tP65O4TX>ePurelWNP}b^EGA|?3sCcp*L;?I827C;3Zja%ec?Dj9mmk5$Pa_ zV>ga9#Lj~Bk(|erUo0B>^~)EDHqsk7_w2<2Y;0wOAjreCjIGo80os1TfP@lc#b0!P zT_zXh$ozaZOSf&Qa;x2zt;DO6Bkg}yX0=E8-;!C)`A258@Bd6@HT+*>R+a}|rWFgU za+{}V!?8$@+`-1rqW>G2l|o2kge)(}-)UC7gGAhN>?4xwAqZ$Xv^=|O`n+C&L^-jZ zC(u#=)yLcX*~))OO->P4rM9DLMZehg=Z=%Jl6CBFca~t;J|J96U0Zt2&v$izQ1P*h9Z!FOmLd%7NR+XgCy&&Ivx85_Ui z;iF(UpO)YpBAxI!&iWRLWd}uHTEsZcw0&pSg?|fbmOgMch_B-QRFy%r(V>24zV7X) z2P;?7@Br<(V6Jr=uW|!@M|UXh@ZvqxK$|vQoiv^py!l3%$Eptpz3%i{YX0pj{Up<_ z4nmzEB6rk4ZDPABUf34toB0zYqE_e1{2^gz#lizwD{ci3EO*q?k9xLP$p_o}h}-tR zIwjn*GP}T*7Hu2n`@7ih7gN69Ufgm==DHRag^3((b1)^SxYd;p?*tm9Ax?l;Aih`9 zt5z!@CK*ACJ;lByt~h6oibo zrg=}EOusy^tb(D`GtYdL=`CcSnlp}uosb3}po<-djsy{!WfpDio3r$`XC5+T5x>oj z{s7EOP(Uw`-QiwkMvh9h!I2|JY_d&CEdzS5p3m*}-N-R0_nV>*h#<*}*?D4HBsY!j zuLVcLiW+*?s_{_lXP4`;D&hT$)Wd!Cq`wqt?o(zufM}>iHL7*p`{bFQ)!{jBkG-0` z%x2f&pwNi$!CQ-V`BYU_iV<_@u9a*4nO%oR{R<=z$26Rx?kUpHw;wouydj6iNloVt zr18w#dDY^Q+NAzoJWUx=fl8aiyG35zZ+02~9Erzsx{fL@$#cU!#_A_%HhtHsw_`6j( z|3`UOa|-8LI=QNa)FHqg!C#afhutTS-+oFR4>P(0=dur%a&ReM>O7*^Y6B<@>1{#U zAi2e$M4dH2kBt>R1AiPkcC1fEnqcvw+oxGe#N_0vF5exH9ZuT+wspI9_u`v*oNG~$ z0b9OfO6)UwyGW5S_fIr_UB_S+P2RF>De~7o$IDdEPBAqENp6+9#*SsB*bMl43$x*V zzr*6kxJQJ4{5`5#Gh%44^Io+Xd+oQ+^t2kYEBvYNxx=x0k_@X_Jvnf0T5NLK?j+9} z3*XGXcWl>?+>UW8Z1Q#vjT*XQ%)83!V-N2SeYaPA=`owDr`+A9E+{S^y>O6Sd}{fx zil4vU6&>%T?XLMVfX)*C!3jSm;D3>%W@+Z&5JkDarbsEj-yMgXqlbqXMiGUwG6sZA zNNq#w`jc4uU?M-xu;mMiamNhNnAOSN8??s9{>0bdlIPdV=FU#_^-_D&|5{)*&C8)i zX3hqXDLS^cm(=Q#Jy|CtHqtE3(4$X03v9L&Za+CaT@S;O%ei;IHYdj8@uwCI0iD)7^CD{OI zb@+zQi`e&bkj&`wpPc;Xfs*d89wBd#S~|=Tx5ZLYbxZDihY_ofiO%RqU%e^(?ql-5 z(lFPmWGnYSk}u55F6$F!5bQ}N7)*b$B|W?r>3;k0R*R&a{Jg(^ambZtm$D9ro0EH? zDE37fcr)By%YNj(r=lk7`Yx|5H z`_%E8kGkCyYU)fLj2gs7Jtd_vRU4oFwWM?PGv8b>A!}1Risr{IHfF4_K!-i;{yxP*cO^O|7bRXk%r}V)JJKq#d zVCA#8HR!V3G8pxK1|v2Lpwbbw(n2g6vrw%<2|E@fXEB~;@efSHK2ntGk!)te=LO5c zWDCF-WO3{5lrt~B&kFG(`#%S6fXZ+N%R3fd6E!6BUPnJyI{qy5x6fX4RaZ@9(rVTNk_U%1zQh z+svivsG&|xzKqN-0Bpd50uf6Jy&a8Of4|q$eI=eSLEc>-7 z5FHC2P3@YAxvcl61AR3$O-VT%EL#;M5}R%F-@#aoNDlSh63dzeOZOpSL^4v793}uK zKgaKnrhZeq+4CAY((Y#;1&|M|$-Oig;ch>Jpu>EAe-i3<{gy4zC&LPbV7^X^o#!L3BpXGYYg zQBB)Nj9hqiGCWD?^WW7*IJD^!I4Jm43MxA{Q&u+M$#h=v$H+rBJ_O_>56nt%cB0TN zJTyo1{`wQS3^(UIn@Q)4REa7DO>%>1(IlFG&spleiVnK0?#6Jl2F%%52Xy4+tkSo8 z_Z!CVQ+TMKu72A;#l6cwl&9_YO^N^ZaLkDzi?>SjK=bUi&H=#x#3-93p-ZiDE{;dq zsRLGinX=m}%Ea-I#pVtzJC6!L$H>R$U4f)&wAX( z>D}RT$Pu4sxz00nE;XzzJFo4IMDR!JZAYC zUtF{Wd*lp2w9L?jCR~Q>=}gk1v5AKg%AYwgoP969z_79)VwCYjZ%VsSC$%pOVeZ7Z z`rF1sYa7CJWJawqiCp{qnbn5Jd__Dki92f=mS$&4Hnn`9Vg&0tzT&Nyhwa>CaDaYe z#+VSas82mV#+RG2cvm4bJfY#_uqAbsJB{}6?lRt^?}!mue)ZErtYpV-9%FQV`jO!l z8GS6nZC*IMwSDP+cvzRU0FsVnx#k9JFC++4IhYJcE!DVfT=&>)>x;qhOUmySv4>_G!rL{v$>h^1heq zkGm2(kc&`!oT=gXJ&ly@n?}b@IwxCuEjH_O49(|!pvttygRh>Z5A%%G{^Z3uZ54`f z)k8lt9=CW=j?v4Wl`;D`+k(+zOrJeFi*S~KP~(i1M{@VdS_;KIt(#pHeNHW~&B^v& zLgmcw7*dEfbdmQ2a=GIYv_6N8eAIN)m&w2lg_xVDwrj$4;OV*}@8RBQ(O>R4;}UbG(UJ7oSx|Lc#JFB{TsceI*fv*pHC z_H{PDdXRWaPxF-Nl%HwwY_6awtw%@!Nzy0R27@r0%iqjjG$Q|e3|KL;n zZ@r}dFTPlp$@z-YqmqYrII?PZ8~b4=-xj{@z3qlhMoP`yZB=Kx*0?S!KIDR>hMlq6 znSM8F<)4Gsm!Gk!FF!xsu3KfTub=bo|GuApp#1&4wbNE6zMEmH>i$1C|&nj{7 z1I3Hk-x%|*bLE@zPQ4@M$EBWn_KlA1HR{#%+F18PtA-cdyVGj<@tOS!U;4h7TM#;Ccyf&0v1P-(zS?QaHEtf$Ai}v; zJ!{p028n~sJkD)W(o!0H(qQMKfEFJ=Ry1`vIcDlZYgPG8MJT&vRN#jCT2ng5S{vrB zh-hh4TfQINvU#;)cAwB2sW%#%bDxv873SA`xNNz7fuoeP+D|zvSK&8F`_E7WJ#tXU zk9?z*w0c#aQ2*elceiFAejNLttlok|xgWm(*68>-Oc2WHa~seTk+=zFwb30$oHS|>3TC=UMm+bkh6um#Gu2#(-<*}g;D7ns=Q?KI3 z+Zg2=HM{%tC^q-k7sW4+ymS2fug2L-{ZXe?^S^)m!r{99r*XAfWxsf5>#!mrY%xK` z5hf=rE?+WFQl&S)qCM8pi{M;Un*HR`@;#tU1tfVijs_yNrMT-qU6_K{k2Z|SVtUo-O0&)9!0e>ncMR06;$Qkv_T;pw2Q{&Kc`V-TN-s8?ZhN$@t)i+zaG$h5JT6yBC>40piaw zGHUGIYrm`3(h%Fv>|Ou;vrmrl#j#qlw4V$c+jDuKXX=w&r_S8ykw<52*W%D2q3~0o zkQx*DiEKy&HT$}1nbL%FanSRNi?>Na0u;82Y%`fmdce| zU6k(co<8`&#_+nj9&bK<3IhV98h-dOicBetmiJI}O%}{r+L2ZNjqFZhgZGc(P89}c zrzrDKo_&m!P6c{94)rsvv6l8+2Fdlp-QSjV2G2Iq=`qqcVapY=2(>kawy)P@PTn(I*R zsNu-jt9S3WPQQ6zvyQ7yW?6Yq50WA;T_4A~8r9^csZ)s>3ceuv$Fi=Ez6Mwri2;h* z>KvWrNrz)Tmeq@SCRGnW0*HRPtj%Jk)#je1?YfB4-3XjQKX7g@w?xskF&14)ltQSh zXsa>sr-dHzx_Adf;+c7b;c5Y1#IMaug3_L!mWRZ~RbSBck3SYGyX@Y^#q=LFD(7vl zZ;l`~tvhu(X<32bUlueqS8#KamBq{po$Z{y@21|#ZC#VqD>XE{qkAL{h<7=u+*I@D z`<|qB@1^)}=%R9;mBLN9IDf@P!+DO~kV5nwFkt4Cv%1tpStZycg<*Q3PZDYY&b1}9 z(69(wC@9!aGOM@kO-FsrG%_nhVb_6Pz_DXbroKl#RLTmR?m-Fk@q0B}SjWO52w9m| zSc!N1Gvt27)=^;8d39$3_Bm4f0}q~u3|1d|7dwVPQbt2rj}b~4-q$JJ)hsfs9al>D z{Mcznhw6-Aqd6YmQ${`?_4F-o6O|hkpxjk+0hM4HCFr;KRMKYK(nZm&2gG-#1K6If zZWEX4F}WqpEA`7tuYLTmtU~k5f6uX?1EwG82R zU|GvOpPOCX@F;dQk5Sbt1+-;eLY`gRXt-E9bHWH?ZK9Ph2tS9^Cgb$@I{DPLvp=nE zxc}?0H^JS2fR3Cx1$sR=Zt=7D@@M_EvwnRxUJ)^$$`+enAHCF%uT~Jf8!0PiLNBlJ z^qSclso{KlOvvz~QetUtW*JVWedpq!F*dKZBb_dNYL}Y3`WNt2zv096xm_^?rcw-~ zgISfapAvqp-Z?BWG0~E%hNjm8Imkdx8ejdh_$P6+Br0#^a0~dQA_fP3y!P7#bL~~c z7_?3CH|ErpP&valtFrx&MVp^FmoH55(K5rHCn<9&cJZ@e9`zyB*`fP-G}N&&XVL3I zQ%d}euPV!%Y?||J_Q6%d3-8@IyrgrbKF9p&EAF%X@_!^7afh%1IRkkPV%h)sFFFqw z_CBP|;|EJK$ABWDk!adkv@cNNPyJJ7rp0d9G!6kB&sj-?Wj&5|ZT^V0I< zXP--3oAVl6awrgi8a95lyCy!iOFsVjqXqKQ;2{0LGvx7Yqm?((+ICb0Dk!&PzG0Al zUu|{YDXhrK%GJNCX;7L;0se^d;6mQpL@GC#I?pBuLea3LM*YJY zqA9=Ef!5pnQgCn28;jCl&^x*G_d3d4#rU!(mc)i|7=$;)#lcP=W2Ume?`K<&HP_68 zwn|=;aZ9^KkvK?#qD zN$zfVQ)My|+`s%cJBIMlu9#Y$S3<*6dZQ)+U5yMj^}@%1|E@(%F{u6E+6$Wz7bxj_bz>W zGOqVvfFfP)2f2VM9kKI$HhtYC8H=k~LRy7mPg;HO4e z20PxcR)bkf;HT4o8nU<;HL!$%3uE=c;K&c+AGz1y&f|TvD+M;`Ri$w?`6j3`3E4q^ ze}7Cc-dq2Mz7=Ry0t?_Q55A{B%hb8x-xmdDgyVDj7d2rM#e*za_2vs5XBo{hgT2PB^&y*FKl_9ag;1DywIw8jEUiG$w) zxwGs~9^CgA+nN=@QaS<+*+cOZYjRTz5YR{x%$KtuK3Ks10&uuCbi(2iV&9-MkgdBuqlYl0AR7HR#iaEI(@{l_1^$ihsa zS$_icT5VV{Vh{92kn8ViM-axZ@$To9QZqF+!2@^4>R;pM`?KgaF7^GfCimg-&;B!y zt9BT=WP8fJR5ODF`@W8P%AZkJ$LcWrU7TVDDB}%i}xoB6;O-4(5!&9`8Laq#x|KZ_2*TV+@;( z{k$35*mVHkt2me~(oS!IUke%R-bP3Wf&W@bOhbSA(=SS3#f2LGtD2TdE)&z z8L4UlSpou^VYFUyG5dIgq-Ic&z5e{OZPJ%UH(OZXq4;*^{s>y$wd?i&KA<2Y_e**C z70pzu`rB?Ssyg!mO!yI;nLP)bgcZn*Z0_QP@pm$Z#Z8_v1wq^NIhqyc^dk3S9u}n3 zb(0R6y)Gn74PqbYf9f$nnu@j=z?g5{-Sl@)pE)ywYVcdUdx2fl_xD4O&lKQH$P-G8 zoC`B%&C0}gSszchO({25i2g8c*p@ZG?$<0K6@ zce4GCPOUw0p$aAxm^<5m5T?=3p24IcsM*#QLtb1!EQvaNjwA@wVjh<9y;|936epfR zu$8qceBjIEQYhJl%#Cw=wd>E}Yn}|p3DqP!GeCDDaSQFJP)2wN4UJ3e)6}Pg6&gk= zko@h${E#5SkRU?Zz4Y{9sasz^6x0P>najCr+qP}Z*!`uf%u_{31dflGEVmsyw37no z+p2B5aT+3NB|>kBaq*hkVfd}Z3{;x3kmI0e9$ zV1MWK?Kef2TnElr+jwf^b}) zyKj!Snhe}BfTF_6Y-F#>7%KlvY9t~}5mBC}M~!+E-@74hTHB|qYdxKzKJ0Xk-lb*Q z`Of9}PZFHt@ReIMvT_yCGT(V%G9r{f5}P*jv%j1BI2+32mWds+P7J^QWX}o`Om0IF zE23?b(+OZw2Lm`bY&jMpV~jK{r;up_WZqxscPra%D!ylXYo$0 z+qCgR%{ul9Ud7=F!=E)+f6M!i%4x1jO2A%&b*y#Zw6$I5Ja-v5V^+7WU42+n^y^c> z$9CEH<_~T4cui2YOiHcd5s*c(#i4N*cK9tEZ+dIgKv%8KnU2Ipxku+ZdKDz2v}FEn z-?Zv_y1Z&}{8EG#O^f#$W^0CFD;!9M{X`>+E3xMgvuu96tLLxCAva%bm68E?>O9cb zyyB|5N=h@58g8M{R1~!3p^kp~@bPl9q{8_ZNt5EPvHW^! zH#M*7SCpEyayXI1g`OZCCc0e4R~24GavDlu{*R3OkcwCCDl5-d?JC=)Wcw(mc8SPc z9pAOFasS@rqAb$K+>Ma*NVAl$uN+JER7Va!t)!x2 zrN&(wusD^2T2`%_#$f@RIPQYkl=T`ZQDL+q%cM|ATrqE@E_P|VR05HpQSO_nmAS;1 zW|?@L1DomFyZ02P=S)m^Xh#E}u-P6L7SGVVSgBP_;HQupln)e{HMstOVnDGAr7n%; z-plJU!(G=Y!tTlImoFEW)LZtcu^TzjyosjV_f~^P4y@dWeM7<9w|;DzLf9-_YLSpT z{X2(WwO#-$nK|HjztN8BF^;``gBLnKIO7r?6ZP2+7F>Wsa^a#aN?q=i+kg{+iuBP| zAAg{yi;JsLeNwEb`n~qMsGlf%mYbUOb*@!=W9tx0^Di-{009>Qj_6RQU#6>000t_e ztnOP^M5w3cCNs{3T6?cV#g#=qZ!b=JY zuh<0$VSnO5v3y87%A02DW6RiCrF3g82Okl(e{(9`Sb+LlajQG;JYeK& zzK7yQ@)dmf9GtqMW;SWuD?8XI_2W>eee;qkn@G%GW+WA=uZ!5(tDt;GF?S(5I4mIu zX-Xe;_1q4%!3J_xtnjMbP;kU(I06t1*XL6(T#lO+IQKm0j)81fUcRZhLrfQQEfcbI z?ftjLnl~;r-dWD*wVNNC??YtZw&QwZy)R8%_Ksfn^1`Lgb=PDsZP*m)oMXPzkg((7 z6inxcQ~g=6tS3FTzn~akl}Rgy7lHhyM!4ML>I2EZO(v!UYgD{BL|%D zAHb`yvAm7}J>cwTe4E?|hQN{+1neD`Z4)9$4rjMvjBNq2Spz7hkOW`ATlONA&p^Qt zcG!k)y_8Xv8}D@G+|!A_-~{|wHroBJc1M^Mf3}8APN?vshpvXo08|k?fMhQms6>97q*%>YYXx$O)3**-{GSo3>*aq>CC$_4sA9UZNY2<7#1CnQ~;sif9T; zbS)v*2HeV|gkQGsZNQ%k$Io+|1XIyA`p*oi0!cRGYJDng^~RB`JP7&4d(sz4z%J7n z38rq!B74kj(&x_BUYHmOHX1;^7$gNasVCgNKYikQ6mXBAPtcQHozQWLea`_~+-?i0W!f-Rz+ z(!qh*cT*I^L3q~s`H1%@mAduySIVYoDulvuoG7nILu^}HhyE*lwbuLRXbO5xTs=cW zPt9K+hFO*zLgGsjr7gf76&LP|Ys%vOSm?Rwyk9~8r2H3#7qO1t5&ldMFwtwmxL5VmtgvJ8PVO2dwj2uc>4MM_)lnGwqxr?Djbm<#(%!qxM^|W>6MYDqf9hEo+47-8T-TL zC?bW2Z&dP4d|TW~07@E|cyX|zPs00tI+Lg-N{KepJx*QX7M zu6WVl<(xl`kG2nztedX&2|n@lb_A>b!;p`7tDB)5eFz|62KwML0GT3ZqCDb`oDcBY zG4_X(W50WeBU9I)XOVw*+H1I4`O@~yw5sXc1?a^`R3~V)^3GVb`R}>-R38(m^Ufqh z6?gklBPMv-^nFF0R^uRr2br6XUf;duMUO(-j|z;gujT)Ekcs)9H6nuRTR$sVPZ09h z?|jj1vv)PW_`(9Ehi2<{FA{B=q6PSGWC$-E8o2cP_0x>SCBJ*!+fDQXGtUO*C}|mN zs%rh_b@6S3n$PgDmFPwGt~k^*zy6KX(uXzQjJEq**7IS(l-MNC&xQ@xug_%tu;ZfCnQ#R(mP@lQNu2xtJdCwO~4O};mUFMZC z{eJWr)n3yrKE({%Xyv3nCVg~f>@|OXxs+wbLAOfwtvK{>`MLgit3BOrSnK`$0Tc)v z+@7fwCnXn`^*^&9>O-m9{+C${S_;d}sjS))-OIY((>Z+xJe|>JrsuDQ3Z1bCeKv0B zd#+$j#l&#`js;ic6DZW>6KsfyOW#(beX%w<>s0go|0N01*xj+U#@PrG*cr2WE30Ma zqKAUYdLV}B^N%Rz82`VM$o-Ik_bFPTxKn$M`SmU6xbGw;wzVJjqBfO(%u$_{|Ml0A zN1c7w?8P{M&0gB5B?i9oeBl5yJyDxW?DQ{}`gD#$=jx+x|1t5`u^X#LcOhy5F3D%mlL-Cnee6;Uq2UMEjpKv0nXGF$|`NIy&-t!|}9F>W7ig%;NWDlO#_Iq!Q? z{VcFUI=9Zlv=#dNuJrGxA7CBfwR?#bg@F_p-=40Zz=OMKn(8;^HmT>40|!o{m+;nf z78Vt4>0u76Th1q)?@pRJ)e_l;9Ps#FWFjk;&kcn;BJcdUb1Q)!g|n3(;lP5a;6f{_ zsOK{h@80dl{BaX4gC5zv6o@hV3*Nn3zsGprD~b!-taquIly7UQ zJGE|oUJ@U`UO{zuz*kGRqE<5-~`=sgTA;3)q|7GF?O;$8fF_^DZ;C9q$I z4u9JVs%S{h+Nr!TzxK{Y@GjlA1{db(qQ+(L*SpKe6J%`z0Ue=GSGkWeg0w{N9=MJW zZs1C8H3kZEA&){58OQe+cvIj~bVq&aay!gKSGYeNHYQ6_ZwY? z?H;2CP+dx)5Ck+aA{jeNe@-xAodkoJZxmvzR{A0Lo8gF-R}R`1BrPnjj%L-+e&UDA zsnF6{YcoI5z>soms35E&WLi7fPIo4mC=!QJ+2Xsn&?5tN!vYP>4I^TrNUZ`S^#_WD z;u1}VTi)njd(~Ykqfx(~<<769NuF!+P!R$EPBxt+;5(`J3=hHSDu38i6`TE@yK-fK zN}-&8K*eir`mn_NgGfN04Emm0Tk&yHMrEz)OL%Zl5znTAzg+mNORHAr;IKMtIO+p( z4!qgs%qY_DRiQ7YdO)nwdpWp@hcr2@Uvwo&5udc?WtCJtn9oym@yQh9S8FaqosG*w+YJ@Z)~IPXbQr+ zb?O^i3L?>ffgU(av^+KIqIFsOL)m4bbz$qWa%*hWXZBCeur;IG<3Bq zYi|dChni+C{q`HJ%-E2b7v}4+Zyy7<0tWh%*2pD^B&(M;w#ON~b17(ZtDp8Xmm$yn zkqq9TqRk-12ayjiJ-DQN;3y!Z*ocaXJeH>;b>rWP^?q311PO4?<0QS8b_80uLgq(IA!l{`d_$?1HhhZ52GbkrvIgL=QC6(+ z{I>dLB+(7vAy3)m!JXuS+$nA7i_mz%?CBlypR3 zR15^(jY|&F32Uv8BtfC`7ge{|O$q+NFI+la2>*WF@0bN#Piyq+r%!j2-0^qSC)bTP zVs9~JD*J6JVht#c6VF_JtqFm@1b#ab7w7axWYa4VQr?3GL&=;<`P^Zbc}uJKMy>m; zB;Ln({$}SPok5I}&aM{(N+L5T^dl%%5ueBZc(vzB!VSfX+5r`HD(}qIN&C7cJ99vC zpV5C^1+|d?EmUIOl`zQP>P;m^H0+SeFQoDQ+?D#a^u6wtn(q7eb(Sejl1CPf4Le{a z_fW-cV#0@)x$EB9mbDjDIWBMXlV_)>a$xxEg$_aR*bv+@i0y+&!%MPUfM82%8hVEG zw}duSd|W3XaKO^X10!8SSIlqIuH6P%s8gw(R-~Q^Ay!L!*NF7Yw{FYpd(xlk^=RzV zw*$&CqS$%vn$KiDN>_wb;AQ>5%>gvtW+aUD`Z)8U=2DJ;nzcS{gNu(g!mzni3>V4+ z&QCe8qo7=#(GYoS4xXOcz$D{B?LBKBTaR7Nz%?zcn(>;Da67=D{8?B11`K#mSmoY% zOmBq3o95iwGiC$c|g&A+;0NXl5Zi8;lKq)6$*El*R2O9fB!c&GI z83GVWk5Gu7%5$er@dDc6A0NgxGrppM1OOV~G*bgjvliROcQ+gBWj&BcDQ7b>6l%O> z=`+L=j4Ed?d#3ZVi8xwF@?LtqPP3c`gA75nk>ovhT>FuY?!nA1{ebL7iuH{eY1VQ5 z^8I@T&?d5p0r7azXT9>|S+QCjKZGalj^5E{zYA_JB38myo!)U_Pwmz$?RzeE$(=@W z4p2|dWzOf3g9m-FmXroDkW=!ZDl7YMx_c|psqEghOP6CnAI6+03gz8*=ulmvks~m0 zNZ!w1zk+dik={F;q%WW$>5n3o&+xUh)PRM!=ks)(ljr>W`XPUi^s3A{z74t1Eo?PH z%&g{DGokQ#Qp&)0aW7cJ^Xqix#_$M*LcWZ@nzZboYuF{>UQVPTLv(1Vu+9l3q%mr8 z2Kyjl{xhVW(gbsYd4;sE!0`444e_Bdq0wKI8o(icnK~Bss=|>otFMiyCJ{rX6)QQA zS4~UWcmu-lNdB4uFX!+KLekfNqO)Y~?2tfWc`(1+>V5nzIffx5M>~EGV7P35Dr6D? zA+y - **Correctness** — BerlinMOD reference queries, snapshot form **= batch result** ✓ - **Benchmark** — cross-platform timings ▸ [report #29](https://github.com/MobilityDB/MobilityDB-BerlinMOD/pull/29) *(dated runs publishing)* From 54c2b6c0f6b17697572cb90d37bb3e2ef49c9687 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sat, 23 May 2026 14:01:03 +0200 Subject: [PATCH 05/22] =?UTF-8?q?docs(profile):=20make=20streaming=20evide?= =?UTF-8?q?nce=20FULL=20=E2=80=94=20surface=20correctness,=20de-promissory?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (a) Correctness is now backed, not asserted: 27/27 BerlinMOD-9 x 3-form cells reproduce the batch result per platform; Flink snapshot is byte-identical. Remove the 'dated runs publishing' / 'advances as families wired' future-tense framing; the benchmark line states the in-place methodology, and the status footer states present measured fact (Flink/Kafka 100%, Nebula as wired to date). --- profile/streaming-parity.md | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/profile/streaming-parity.md b/profile/streaming-parity.md index 0065aa4..2373ba9 100644 --- a/profile/streaming-parity.md +++ b/profile/streaming-parity.md @@ -20,8 +20,7 @@ Coverage of the **1,945 streamable MEOS functions** — confirmed callable on a Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 7.6% (147/1945, wired) -- **Correctness** — BerlinMOD reference queries, snapshot form **= batch result** ✓ -- **Benchmark** — cross-platform timings ▸ [report #29](https://github.com/MobilityDB/MobilityDB-BerlinMOD/pull/29) *(dated runs publishing)* +- **Correctness** — all **9 BerlinMOD queries × 3 streaming forms = 27/27 cells** reproduce the batch result on every platform; the Flink snapshot output is **byte-identical** to the batch oracle. **▶ Full results & raw data** - Per-function coverage — committed feeds `flink-kafka.feed.tsv` + `nebula.feed.tsv`, reproduced by `ci_gate.py` (MobilityNebula `tools/streaming_parity/`). @@ -68,10 +67,11 @@ callability operator by operator. ## Query-result parity (BerlinMOD) -Beyond function coverage, the three platforms run the **BerlinMOD** reference queries in -three streaming forms — continuous, windowed, and snapshot — with the **snapshot form -anchored to the batch (SQL-engine) result at the same scale factor**. Snapshot results -agree with batch, which links streaming parity to [database parity](database-parity.md). +The three platforms run the **9 BerlinMOD reference queries in three streaming forms** — +continuous, windowed, and snapshot — **27 of 27 cells per platform**, with the snapshot +form anchored to the batch (SQL-engine) result at the same scale factor. Every cell +reproduces the batch result, and the Flink snapshot output is **byte-identical** to the +batch oracle. This links streaming parity to [database parity](database-parity.md). ## Benchmarks (BerlinMOD) @@ -83,12 +83,11 @@ the workload definition is shared with the SQL engines ([MobilityDB-BerlinMOD](https://github.com/MobilityDB/MobilityDB-BerlinMOD)), streaming and batch timings are directly comparable at the same scale factor. -Benchmark results are published here as each clean run completes; the streaming benchmark -harnesses live with the parity tooling in the -[MobilityFlink](https://github.com/MobilityDB/MobilityFlink), -[MobilityKafka](https://github.com/MobilityDB/MobilityKafka), and -[MobilityNebula](https://github.com/MobilityDB/MobilityNebula) repositories. SQL-engine -timings appear in the companion [databases — parity & benchmarks](database-parity.md) page. +The timing methodology is the one defined for the SQL engines in +[MobilityDB-BerlinMOD #29](https://github.com/MobilityDB/MobilityDB-BerlinMOD/pull/29) +(measurements reported by what each is licensed to claim); the workload and harness are +in place, and the timing tables join this page as they are measured. SQL-engine timings +appear in the companion [databases — parity & benchmarks](database-parity.md) page. ## Reproduce it @@ -104,5 +103,5 @@ The feeds (`flink-kafka.feed.tsv`, `nebula.feed.tsv`) are regenerated by the per-platform adapters and the callability harness in `tools/streaming_parity/`; the full methodology is in `doc/methodology/streaming_parity_assessment.md` (MobilityNebula). -*Measured against the `accumulate/parity-1.4` MEOS build. Status as of 2026-05-23; -NebulaStream coverage advances as further operator families are wired.* +*Measured against the `accumulate/parity-1.4` MEOS build, 2026-05-23. Flink and Kafka are +complete at 100%; the NebulaStream figure is the operator surface wired and compile-verified to date.* From c5549a1b9b4adb6fa5bd6cb64156a35a4d68e5a4 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sat, 23 May 2026 14:27:17 +0200 Subject: [PATCH 06/22] docs(profile): Nebula coverage 147 -> 165 (W23 spatial-rel + comparison ops) Regenerate streaming-coverage.png at the new measured number, bump the image cache-bust to ?v=2, and update the alt text + coverage table. NebulaStream is 8.5% wired (165/1945), compile-verified; Flink/Kafka unchanged at 100%. --- profile/images/coverage_charts.py | 2 +- profile/images/streaming-coverage.png | Bin 51271 -> 51768 bytes profile/streaming-parity.md | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/profile/images/coverage_charts.py b/profile/images/coverage_charts.py index 2465aca..d4112d9 100644 --- a/profile/images/coverage_charts.py +++ b/profile/images/coverage_charts.py @@ -56,7 +56,7 @@ def hbar(path, title, rows, subtitle): [ ("MobilityFlink", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), ("MobilityKafka", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), - ("MobilityNebula", 7.6, "7.6% · 147 / 1945 · wired", "#1a9988", False), + ("MobilityNebula", 8.5, "8.5% · 165 / 1945 · wired", "#1a9988", False), ], "of 1,945 streamable MEOS functions (solid = proven callable · hatched = wired)", ) diff --git a/profile/images/streaming-coverage.png b/profile/images/streaming-coverage.png index e1edbfbc9cd84d29a51d068e9e2650be1dedc247..881e5f4b79a88c2caf45e0dfc34f40a1626088ba 100644 GIT binary patch delta 15894 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 delta 15393 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 diff --git a/profile/streaming-parity.md b/profile/streaming-parity.md index 2373ba9..ae22d22 100644 --- a/profile/streaming-parity.md +++ b/profile/streaming-parity.md @@ -18,7 +18,7 @@ deploy on real workloads?* — with reproducible evidence rather than assertion. Coverage of the **1,945 streamable MEOS functions** — confirmed callable on a real `libmeos`: -Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 7.6% (147/1945, wired) +Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 8.5% (165/1945, wired) - **Correctness** — all **9 BerlinMOD queries × 3 streaming forms = 27/27 cells** reproduce the batch result on every platform; the Flink snapshot output is **byte-identical** to the batch oracle. @@ -55,7 +55,7 @@ Three layers, increasing in strength: |---|--:|--:|--:| | **MobilityFlink** | **1,945 callable** | 1,945 | **100.0 %** | | **MobilityKafka** | **1,945 callable** | 1,945 | **100.0 %** | -| **MobilityNebula** | 6 systest-confirmed | 147 wired · compile-verified | 7.6 % wired | +| **MobilityNebula** | 6 systest-confirmed | 165 wired · compile-verified | 8.5 % wired | Flink and Kafka share one generated JNR-FFI facade, so their callability is identical; it is confirmed by a type-aware per-method harness that invokes **every** facade method From f9d87d759074c3be5635d84765cdfc79e9275651 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sat, 23 May 2026 16:32:59 +0200 Subject: [PATCH 07/22] docs(profile): Nebula coverage 165 -> 224 (W24 generic assembler + W25 extract) Regenerate streaming-coverage.png at 224/1945 (11.5%), bump cache-bust to ?v=3, update alt text + coverage table. Flink/Kafka unchanged at 100%. --- profile/images/coverage_charts.py | 2 +- profile/images/streaming-coverage.png | Bin 51768 -> 51276 bytes profile/streaming-parity.md | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/profile/images/coverage_charts.py b/profile/images/coverage_charts.py index d4112d9..badfe5d 100644 --- a/profile/images/coverage_charts.py +++ b/profile/images/coverage_charts.py @@ -56,7 +56,7 @@ def hbar(path, title, rows, subtitle): [ ("MobilityFlink", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), ("MobilityKafka", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), - ("MobilityNebula", 8.5, "8.5% · 165 / 1945 · wired", "#1a9988", False), + ("MobilityNebula", 11.5, "11.5% · 224 / 1945 · wired", "#1a9988", False), ], "of 1,945 streamable MEOS functions (solid = proven callable · hatched = wired)", ) diff --git a/profile/images/streaming-coverage.png b/profile/images/streaming-coverage.png index 881e5f4b79a88c2caf45e0dfc34f40a1626088ba..eb4ef33673373a9533c1fe80f4882562b05a685f 100644 GIT binary patch delta 15398 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 A%>V!Z delta 15894 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 +Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 11.5% (224/1945, wired) - **Correctness** — all **9 BerlinMOD queries × 3 streaming forms = 27/27 cells** reproduce the batch result on every platform; the Flink snapshot output is **byte-identical** to the batch oracle. @@ -55,7 +55,7 @@ Three layers, increasing in strength: |---|--:|--:|--:| | **MobilityFlink** | **1,945 callable** | 1,945 | **100.0 %** | | **MobilityKafka** | **1,945 callable** | 1,945 | **100.0 %** | -| **MobilityNebula** | 6 systest-confirmed | 165 wired · compile-verified | 8.5 % wired | +| **MobilityNebula** | 6 systest-confirmed | 224 wired · compile-verified | 11.5 % wired | Flink and Kafka share one generated JNR-FFI facade, so their callability is identical; it is confirmed by a type-aware per-method harness that invokes **every** facade method From e97602ac70b6350d67eb2591411fab25da0d2a6b Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sat, 23 May 2026 17:14:43 +0200 Subject: [PATCH 08/22] docs(profile): Nebula coverage 224 -> 243 (W26 box/span family) Box/span predicates wired per-event with query-literal boxes (stbox_in/tbox_in/ tstzspan_in). Regenerate streaming-coverage.png at 243/1945 (12.5%), cache-bust ?v=4. --- profile/images/coverage_charts.py | 2 +- profile/images/streaming-coverage.png | Bin 51276 -> 51388 bytes profile/streaming-parity.md | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/profile/images/coverage_charts.py b/profile/images/coverage_charts.py index badfe5d..4a79dc7 100644 --- a/profile/images/coverage_charts.py +++ b/profile/images/coverage_charts.py @@ -56,7 +56,7 @@ def hbar(path, title, rows, subtitle): [ ("MobilityFlink", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), ("MobilityKafka", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), - ("MobilityNebula", 11.5, "11.5% · 224 / 1945 · wired", "#1a9988", False), + ("MobilityNebula", 12.5, "12.5% · 243 / 1945 · wired", "#1a9988", False), ], "of 1,945 streamable MEOS functions (solid = proven callable · hatched = wired)", ) diff --git a/profile/images/streaming-coverage.png b/profile/images/streaming-coverage.png index eb4ef33673373a9533c1fe80f4882562b05a685f..aea11af19e608894bef52f00ecc2aaa16720e680 100644 GIT binary patch delta 15511 zcmch81yogS_vb|vBqXH;B$QN80hKNR1*B6#N~Kdo>L87@f?|Qvoq~YmB}I{z6u2nT zA>GVA`hGL>&8(UE&zk?5yVkp2*X7=O&UwzW_x{!S5`$kAiyz~Aq?NnK?|cLzMjoEM zbBH-$xjj&S>>9fZyP=Xcl6lfzqsxf;y-K^V zMx45~wxz3uvjruEOpJZP7^~1_#XG?arwoEO=N@`@i*1g&{&KIrxO8>Om7kwC;>!`g z-#=O!+S-U~_f|;U7e@@t`f9qnHIcxepih0|+2>2$hv?KL_1rt(%E;QJXLpuFq@-|s zeIpias8N>2()TTqGe?zf9w6TGyLUBnnSjf^Mw4DH)3?i z!8X^$OP7Ku?zP47*mTf%PrZ4dZfN+J;nJP)sU##=pTBvi)OK#UidI( zzA-|aRxNzZutT8K`L*APGWLx|eE`+tS!u9UJ&=4`-owSUMhSt{OIeG=UUc~)l z$l(blCZ|g_LphSh}20U5|W0|YOk(zRi^ijV=M#&1WGq=(xyj0^zzbUwA2kD zqCSgW>Oh4n*ZjglY)p(F(`ARck&#oMp9}O)8yQ!+)pI3z`|ITBnvIk@V^_x~n!=S- zRjz79z4d{Njg5^W43YPM4Ju@_RJ}PWcl|oiov*LM>guFJo6L_MJ$k(0Gw~n~Z$4N2 zjnc9mzpN}CvQt<5C^;0ymue52{qXReCK`zbSEt}g9)(;6eQ-Jao-k+TOA z;R547e+K5=`oIo*&Af=-XJ@TG*Pw(~r7wozqUCWYLj*mVQH?hP?CN{{`OKrfyY?02 zxY?JY_jwIVZGudFx3B4oR>B1*NcwoDY1QoQ?RA#f-wNX3eJNu9`0d-%Tf4g){QRV} zw6qB#_KcDTTNaVK`pgp(6TH0^*OisE4CHt7K8#|EELtd-nIrxEk3dPCbgbDvd*@36 zo)_ZfmA7sWg;DM{Lq$bRP07SWlBG=y8!LiUibX5qrjD59jT<*)&CQdsjMrwBl$CRw zlIZB@KHGb_AG3Mz;6YKk6?W&@6QE8pUDw!kTY%wArFyfmr+q6{hBBd zjvn}4CkAe8L%H)0-jf&ed7vxUAku0+d5%ut$L#Fm+JhYu*bK7w z?s2noaNxxqGCy#2Z5Xc)h`&QA@I)y)cR*Qqb!7#crIk^5r=791=SvY{(PG|_D6uu0 zQ&4!XiybqmRrdPz>zFrhBGGLRXNx_VXVDU6Ha}3*+TI>7Mu2(p^l6Z+Biu~oXZ()} z3Ix{H)=tMN6d(EYmD1Ugc-&J5L^;-O)X8uw! zrDTW6!C=W)Y_^etY ze=mpU%lX5H>gq8uyiyNW5X}-I$VAJo)-e+^aJt@1etgJcT_~UK33k$;^ z8k(C4ppnZDm)T$NSiX(c@Xyv*-l?a)tL>K)E<3W=+1ZW%`V|aKhv?l+X=%Ui_{R73 zEiDKkd+hO#?hCST-^OQVhy(-#f^cCO8C<8BnS*ed@id;glPS@XRK$MgOlwY=djCG= zx6-=;8(P-dny0F|8aF=f$0Ffb2ZxuDkF_aSc7y&%n)35xpWTgeug&wY zvv4yrVNeRSF%RDsWA4E$4h;*dhsy|pCiAaL=vl@!{D#4hUCnq(!(P`m-AAL(duJx& z`0?X)gsk3vb#-+w7o)!7-V4BuWnXt5qNB9N&+xHkZAcQ$Ei9xscdJbP&YiQ#$;soh zvxs4jaraeHBotn~Ez2RHneN@6tWDRORwh5kzIYKP>9Zra#fJV6yn<}@HJ3P-;7?o7 z%wrQ1qXGkuhRU-;3+i|Kfc^x$GM`PfCW)Tq;v&qr`3Cw1yOEI*1r^m1HMNeHi?oz~ zUwxXVwzXP39zH}KS-t%Gy-+3NQ`>Urpodp#1N{NTKcAfu43_%)uDrZx1djZlw`0jH zw*KEgj!^#F&#Q38-$)bwPLw>vyKg4K|E1lwl1aN|Qo@%MQ}tYl&qFGgW> zZzq^!IH~%a9798=4G4t4<0TJ$>6IqcDl$`j5HNcs>=8Z2Lm*an*_YiOS1mup`7w!p zkAkxA=If1X|6I(UYefEkT;#uB07o86jMsJ7?A|^7p6{8|zc%Ly<$U)4hYuX4 zjy|eUTAy#->o)%xABVy4H<~9fWRit*c3%|d=aq-KiXVGCG9qHmn`v}o0fx-6B7~)Z zRj0VP*rt*sRqkKg3rBZHUcQvBft8(R?V9Jbxz!1YGd(Z5iC3JZq{!2E%!MwO_(f*D zXj`RGZgbk#pv{d?xt&=MO?Dy|{wErj)ow2&a#6;;i#mRn>dzHuw3~0qX%k7rD&aC; z^!m3bo%0}#RXQqmi3AyV`7%dbtw`SgRmC7T4_`phBfL{g`Z}Vj*<~NhQVXIL6q&dLmDQ|M!tW3+hefdq*0;`uA8nL9phG zZfD}mmj70{_F>^Ka*Z>v3bBUE^wQtStk8l&UwvxOI8tSOtuHLjNpm-hhy3kB2XM`) zvL@Gw{3@B-{?){?$Dpz3BtK*(v&v41-0Mcn;|r+&o)@}Css2Iwq)b|u;&*$$si%t$ zDe<+^DJcH=JEg`#<8p}7u}k=J@df?x*UF)oKDj?9%bq+Gjw9Eg>H7uW87`y<*I88l zy9UDH%GK05GRDWzqy4%=3k#p?a+uN7(!z1^B2`gQ5fU06E~lVCfH{5fq9*RZ%F3$T zWs>-2l4K+a-TCp2g<)CSg91yeAw0kOmBG`taeu)K_u!$`0GYR3Vey8iU+JF|vh9Zyz3dG%gP)gjhB z>1I1?GrXIsYHBSrJsE%+!vVRcrlv~s#-reUdbIju_YdGUva+&H%i}VfTwHRdrmO%I zTDE@w=&D7K(w&F98}=$lf*>A1yXnCat|R#PeDhlIyT$p=uC4(vr{U`LQubqv=h_a& z(0epP_2xJNLlR{w7(Z>^zUhH$;k5M~9pt7y>om0I3_0xp;&7tO(RY6b_w&OH*OF=dGe$aaH@^19`k)R1l^pusw%?7h={{TXknpX>1OSNB^DGM zV+xClWusXn-ezQkl$T%G1KfGVbB+7Rkt3a@wtA%*Np**KAFY zycT;vmY<&=b0h7F+cX7>q<1K*@76nP4IUmIjB~v7n{Tq6ld{9h@@?Tv{Qdor(^O$` zlB_I1ePAxv0WTsWBby$nxI|1$OaVO8ez*+R8q2Y@J(VO(_8T(}_!r~%+|;+C+ehv7 zl}CPln8>dJu}Xq>zn*%1)s-MUJ$<@6jU-i*CpjhMg5#)osVo-;pq!#}k!MhsaD_k^ zS{uD-@yjirKa;?KMvkZ-1lY>U2X_0oy1JU#+M+-mlSxt8YXyv2!NuhwFlC)I@|3n# ze{M`+VWG69<`XPAA*M4$k=&@tgA!0z!bPjc-*%)YXK!$88QUwRTJc6d)SdeJrmM!s z>x!6I!>3O~DGHIA+wb%_sov=om?Q{UQ+cjUvmGsHYC@W}e!X&Z8n46i-ky9u@bQ5F zDXEaxYt=+?gFMH5P#T;TN3KS&NHDHWbr53sjVn(A2$eH3I`#U^n;;(!c6JI{+F-y? z*v3Zrlml%pdn3Ip?Z<$#>VcrX5xuX;I4f-Xjr3NT-6PO5*47SQSsQ6<2f_z%o$uuI zOOQJ!YPNqdMUJ7{*v#HO60o>#Wx<;_%--JKRckkZK)h{{%m!tLY3*cQR&;o#t z17oE)XZRkY&hoh9^;K#n5j*Ln(Q4epMDp4xIKu`2c)xe%3Vv*kAqDS~W=Egj?*f7@ zeBgBhZ45*2)?Z59?MQ4|N9OwDYgkU5;y)@?D)aQL>iG0@=vmd5nLeoe0vMRjZVa>q zAbn2TD^}+=)J;rGSoZe!O$WBGS5%&C>vdylQ%MvDapg-Ls1v#0#wwr=ZnwV_hKkCd zP{;Vad&ll+fdxv6PsK%^>f>}!O~KNRuaaxxnZr9?P>n&A6^Vv=iAK_%h2R>xOR zwSwJAIWbh8k6s5X?K04c1}s)~#`o8+UrsJAPe^<*b)ZAAdN1Q)#<4*pjI|*jA1tx+ z@DQ=Eu(&MAFbrx}v&jY5jgFe+Spc=f$83!q9&jC%lHP7@+#K~H#}wY5(@kr+Yh`7I zpr_iGLq|Z)Vr1=AnSX!on@fKzx=FL6bsJa*KNJ9|%jxz3tjzwwQT3IuEiDxlm7wi6 z{?h2{N=nkQvRIP&c=KX%wMUO0l_Q6~r5{X_W?&;et&c8aU}9<*9c7W;?oFmUbNMnI z1|$L=yQlk-0!y`hU&|cFqIQwZrH20g&7k!((M(t4OCVe=-)oIw({WH1Ax`B@k+I~6 z?0vDKLley^)%^YA13YP*(y76+lDi$e%++O{>ozB8Xv~0<38Y5%;STn9oq%tG@?(lC z1^QUm-hKl3d)kOQY{~inLW?>-yci`;to!B5mm^MH)pQsOr$Yp=@F`zk-_|c*8lRj| z9$#2E0jzp{q(W;zKth6+$Yznp z?}?Yl;>~Ieex9B%b%p2ttZ%FCIU5=>Vz}QBWZeK3t(&X=$gy^x7P#g$7nfq}KCn2D za2DdPU%wvfbq>xC%HIPR9?-D2&Zaih_w(nV6@oMw_;B@?PQ@D_vU@9^1uz&8W+J1d ze0GE)A|t!d<=d2r2WEU6snruIzOFm}F*8$XaWn=5oEA_j1g+XmzPB6HTyXEJ7RXVC zIfQm5P$FTuiH2DvJOiOQ9l-#F`59Gle~#A0#icV%nQmHdB_j6Ir%&~9JX#biEKxV# zh}M7q&fMJGjPaYEzNZ4SroO%&ShHV92;r$yr<^wC5rZ!Y7w~~J=Q!1r+V-1&dU8ey zbzhnka*}t?C3Q$HF-~7CumbVdOb~3<)zT|$%i1G zT(D>+y>jJB-M|2SB%?4&5mAa)T-;_G5f~U)*U*6f?Af!z_wO4)Iy!mabUcpE8=(!8 zXY6C93X^xyBDk3-P86%e*(>1*npB{V zP{1*1+-@o>%iTt9pAJ636kKLM3?1|+oF438YRMRzr}BoubD|V&(}v6V7{zFoYrtz6 zg>6!ce?7hk#jfDwBnXuq0KIj*{qk5NP(lquL*5Uj9~{2lwzLd{ZGS8)D+>xzQp9cm zV_{+8HuvoWX8HSrvHCAxR1%1_pX<0At0hSyk+p{hOj_wGlnTeQ=3u7>Cnd3Z`}kb2 z>E)jP{*ew<7v~2{ghkb$@qxBR3bjMez+ml`TgiX!T+p~IZLq|`OxJTbm`j1g!n;@#g|G=R3-_o=Usrm3k3cr;}h01X-5cx-(=9s>hIx$9Ka@(==z8jqXhLYj() z#}$|<(Cd)#SB^FHvwb;#8aSv~2~vpU%IYfAi}_JP!XF?iH+4uIMnp1Q#(w!i3O9pB zHx}OyWLXqI30}UesIE@&E!O}aK@jv3U`$XD2cZC_kIS%N`_jV|OU$9_(v#R5XzP9G(Hrq=C+Xz*w(0YhqxTG*iUJr+91_8}!f9L)c zQBf?^`nz}U=*2w*efNGVE>wNG3o4uRae2&J5EYh}mnnP)hld-QnvOX*IJAELEa&7@ zh+RENM`r=e9pm?44Dr#!NurC)`lis&c@Rht>aPVgFz!8^RU<9(^usi6jG zKz5cR_UhDc7_sP-5xjJXI*N~0tm_3K{aJS7#IMniot*tGMU{^LJl6uvp>qn$Y}Oa ze;yl430fcqLr8Wib9o24d(fB^)9V7$S{B%C=s7o<7a1;Cdz$L%0D_0(g*g9c&hm-i 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 delta 15398 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 A&Hw-a diff --git a/profile/streaming-parity.md b/profile/streaming-parity.md index c1f8857..8e68567 100644 --- a/profile/streaming-parity.md +++ b/profile/streaming-parity.md @@ -18,7 +18,7 @@ deploy on real workloads?* — with reproducible evidence rather than assertion. Coverage of the **1,945 streamable MEOS functions** — confirmed callable on a real `libmeos`: -Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 11.5% (224/1945, wired) +Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 12.5% (243/1945, wired) - **Correctness** — all **9 BerlinMOD queries × 3 streaming forms = 27/27 cells** reproduce the batch result on every platform; the Flink snapshot output is **byte-identical** to the batch oracle. @@ -55,7 +55,7 @@ Three layers, increasing in strength: |---|--:|--:|--:| | **MobilityFlink** | **1,945 callable** | 1,945 | **100.0 %** | | **MobilityKafka** | **1,945 callable** | 1,945 | **100.0 %** | -| **MobilityNebula** | 6 systest-confirmed | 224 wired · compile-verified | 11.5 % wired | +| **MobilityNebula** | 6 systest-confirmed | 243 wired · compile-verified | 12.5 % wired | Flink and Kafka share one generated JNR-FFI facade, so their callability is identical; it is confirmed by a type-aware per-method harness that invokes **every** facade method From 546a223007f049a34ef088f283e0629cae7e88ab Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sat, 23 May 2026 17:51:04 +0200 Subject: [PATCH 09/22] docs(profile): Nebula coverage 243 -> 245 (windowed extent->box aggregates) --- profile/images/coverage_charts.py | 2 +- profile/images/streaming-coverage.png | Bin 51388 -> 51957 bytes profile/streaming-parity.md | 8 ++++---- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/profile/images/coverage_charts.py b/profile/images/coverage_charts.py index 4a79dc7..2548493 100644 --- a/profile/images/coverage_charts.py +++ b/profile/images/coverage_charts.py @@ -56,7 +56,7 @@ def hbar(path, title, rows, subtitle): [ ("MobilityFlink", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), ("MobilityKafka", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), - ("MobilityNebula", 12.5, "12.5% · 243 / 1945 · wired", "#1a9988", False), + ("MobilityNebula", 12.6, "12.6% · 245 / 1945 · wired", "#1a9988", False), ], "of 1,945 streamable MEOS functions (solid = proven callable · hatched = wired)", ) diff --git a/profile/images/streaming-coverage.png b/profile/images/streaming-coverage.png index aea11af19e608894bef52f00ecc2aaa16720e680..4ecfcb919ab4f320985abf0dd5772d6f56378281 100644 GIT binary patch delta 16080 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 Td#_>Ob6x(XTp_;9ZU6rPJDajZ diff --git a/profile/streaming-parity.md b/profile/streaming-parity.md index 8e68567..388a216 100644 --- a/profile/streaming-parity.md +++ b/profile/streaming-parity.md @@ -18,7 +18,7 @@ deploy on real workloads?* — with reproducible evidence rather than assertion. Coverage of the **1,945 streamable MEOS functions** — confirmed callable on a real `libmeos`: -Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 12.5% (243/1945, wired) +Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 12.6% (245/1945, wired) - **Correctness** — all **9 BerlinMOD queries × 3 streaming forms = 27/27 cells** reproduce the batch result on every platform; the Flink snapshot output is **byte-identical** to the batch oracle. @@ -55,14 +55,14 @@ Three layers, increasing in strength: |---|--:|--:|--:| | **MobilityFlink** | **1,945 callable** | 1,945 | **100.0 %** | | **MobilityKafka** | **1,945 callable** | 1,945 | **100.0 %** | -| **MobilityNebula** | 6 systest-confirmed | 243 wired · compile-verified | 12.5 % wired | +| **MobilityNebula** | 6 systest-confirmed | 245 wired · compile-verified | 12.6 % wired | Flink and Kafka share one generated JNR-FFI facade, so their callability is identical; it is confirmed by a type-aware per-method harness that invokes **every** facade method on a real `libmeos` (a returned value or a caught MEOS semantic error counts as callable — only a linkage or marshalling failure does not). NebulaStream operators are generated C++ physical operators; each is **compile-verified** against the build's -`libmeos` in the NebulaStream development image, and a growing systest suite confirms +`libmeos` in the NebulaStream development image, and a systest suite confirms callability operator by operator. ## Query-result parity (BerlinMOD) @@ -104,4 +104,4 @@ per-platform adapters and the callability harness in `tools/streaming_parity/`; methodology is in `doc/methodology/streaming_parity_assessment.md` (MobilityNebula). *Measured against the `accumulate/parity-1.4` MEOS build, 2026-05-23. Flink and Kafka are -complete at 100%; the NebulaStream figure is the operator surface wired and compile-verified to date.* +complete at 100%; the NebulaStream figure is the operator surface wired and compile-verified.* From d44c81bf62b4f32ff2ed0b99dc85cbc9eba8c86a Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sat, 23 May 2026 18:11:24 +0200 Subject: [PATCH 10/22] docs(profile): Nebula coverage 245 -> 249 (value/time Span extent aggregates) --- profile/images/coverage_charts.py | 2 +- profile/images/streaming-coverage.png | Bin 51957 -> 52079 bytes profile/streaming-parity.md | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/profile/images/coverage_charts.py b/profile/images/coverage_charts.py index 2548493..8319c07 100644 --- a/profile/images/coverage_charts.py +++ b/profile/images/coverage_charts.py @@ -56,7 +56,7 @@ def hbar(path, title, rows, subtitle): [ ("MobilityFlink", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), ("MobilityKafka", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), - ("MobilityNebula", 12.6, "12.6% · 245 / 1945 · wired", "#1a9988", False), + ("MobilityNebula", 12.8, "12.8% · 249 / 1945 · wired", "#1a9988", False), ], "of 1,945 streamable MEOS functions (solid = proven callable · hatched = wired)", ) diff --git a/profile/images/streaming-coverage.png b/profile/images/streaming-coverage.png index 4ecfcb919ab4f320985abf0dd5772d6f56378281..d4dbf242d27ea5918febbf358d8bfb86dd6e7b72 100644 GIT binary patch delta 16204 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 IYI)_q03#4n@&Et; diff --git a/profile/streaming-parity.md b/profile/streaming-parity.md index 388a216..e653d5f 100644 --- a/profile/streaming-parity.md +++ b/profile/streaming-parity.md @@ -18,7 +18,7 @@ deploy on real workloads?* — with reproducible evidence rather than assertion. Coverage of the **1,945 streamable MEOS functions** — confirmed callable on a real `libmeos`: -Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 12.6% (245/1945, wired) +Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 12.8% (249/1945, wired) - **Correctness** — all **9 BerlinMOD queries × 3 streaming forms = 27/27 cells** reproduce the batch result on every platform; the Flink snapshot output is **byte-identical** to the batch oracle. @@ -55,7 +55,7 @@ Three layers, increasing in strength: |---|--:|--:|--:| | **MobilityFlink** | **1,945 callable** | 1,945 | **100.0 %** | | **MobilityKafka** | **1,945 callable** | 1,945 | **100.0 %** | -| **MobilityNebula** | 6 systest-confirmed | 245 wired · compile-verified | 12.6 % wired | +| **MobilityNebula** | 6 systest-confirmed | 249 wired · compile-verified | 12.8 % wired | Flink and Kafka share one generated JNR-FFI facade, so their callability is identical; it is confirmed by a type-aware per-method harness that invokes **every** facade method From 674ab9c09c7ac8d78650781310ca26d8285b7dd0 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sat, 23 May 2026 18:52:44 +0200 Subject: [PATCH 11/22] docs(profile): Nebula coverage 249 -> 304 (box/temporal position predicates) --- profile/images/coverage_charts.py | 2 +- profile/images/streaming-coverage.png | Bin 52079 -> 51670 bytes profile/streaming-parity.md | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/profile/images/coverage_charts.py b/profile/images/coverage_charts.py index 8319c07..ab3ee1f 100644 --- a/profile/images/coverage_charts.py +++ b/profile/images/coverage_charts.py @@ -56,7 +56,7 @@ def hbar(path, title, rows, subtitle): [ ("MobilityFlink", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), ("MobilityKafka", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), - ("MobilityNebula", 12.8, "12.8% · 249 / 1945 · wired", "#1a9988", False), + ("MobilityNebula", 15.6, "15.6% · 304 / 1945 · wired", "#1a9988", False), ], "of 1,945 streamable MEOS functions (solid = proven callable · hatched = wired)", ) diff --git a/profile/images/streaming-coverage.png b/profile/images/streaming-coverage.png index d4dbf242d27ea5918febbf358d8bfb86dd6e7b72..ec10bb4e8e43ddd5c7c0d5b60ec9b382c42f3bb0 100644 GIT binary patch delta 14901 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 delta 15292 zcmZ{L1yEIM*Z)D3Mmi(~6cK4bQczktl}wUlXn{VdN40GomIp^&CJnLEOS9>51d+j-PjNhq_k$3*QkqAlj#^M;pPyN}s zAKWbD%B0G&VQu8ff)<4r?INx{&oEIQ8$QrhzC)?0Q;U~hG4Na|tI*~$C%IPOX)@Uu zxmY>!*v~2LhsTO@d9lguL~LKCkB#mWZ+4cxIv36MP-@O6I!G=#Rv*LXzO1LGuRn3H z*6^t*0Qbw=;X6h~k=@;hM$n&|RM{PB2d9+gI(F8^OclTOQF%Ro=;YMc8bL$G$QZ>U z6CCe(T}sN7);7a#e){W6;UKGy)JIDL+?Z^(5R<`pURCWQd=HcM_IdfvYmv$tyz8XlwWd4t8I7cW>j zIPhA6iCY%Fzv+3S&U_jdH}hry4%H|%EBtsJJqZY)@>}KNPDdN9z+I%=yNX z_3wT5CPJEJ4EJR=WkSxf2ntf(Sjatg7^%3-aP{G=iek1FQfB)dr`&!}URwH8MrLME zwdBsuj+pI8wcApO^OU^nd^c7_MMZPC{^iS;b9D=-2Z~LLHz6y=(TZzyCuZ=-EYurwmPx#(Z%vUAiQAe~9$Qj~|sj`vNX5E_`0w zHk~hol$YE&C=fcj@W#d)Wi~yh3JpI5$HtP8lamK7STZp&&EOUv_lDFD6*Li<96N%z8_CMZR+5C8)-AhJAOefg5`m1JQWhJV+TSHGz&upiRt#Z(C~2S2M>7Y1a16xN4-g|T6g-te*L-& z8NTMdbKj`S<&3klbEWeX&Rv0X_wV0F+l5N9fZSBfWl2dU_$MWMN?TS@(W*{g6Ft4$ zl9g7fT<`7q$1jB)S;fTY28)aX^71Z=xh)31v;1Ty*dn716&a+%Dd*}c$YWIL|MRC& zUy(6=o%e2A62D~!r9csvOfb>oni@pB;{J~(+HcgFK7YnLI@ta6xpUN0pOQ!&mZ%Uji(b8YbsO4Ml0eS=Di6_n_wF6Sat)Q+ z(?FvjV`4g+w!Kyv5kZJ^mLXRl!sE59fNrY^XHrd#xU{r%iS2jxsP8K3>gouCqz|pB z?{BK-JjMiRt{u-aGuZ?L1o-?8J?{Ui)=kQA+nm1T;pN48<%;qIEk;pMk(8h=tkvSJ z-n&zT)Lj0LA7f={UB3NR?{T(rqBIvZyjhFowQ;rU<>%anw`X77>w0xFRnoV+=8@wo z(TDQsE1P7JyncshGn)PSa$*LV3Btxbo6Cq#2?ues&btMcp|!Pj{`(sewN%MMS5r^J zcw-98@ovKj{z(a!QKbegj`vIlmFr?3zP!Br-b|t?pXPJ}(453s3n$y@$#E zoPcfbg>K zx7ey5njgm~?%p^uLNESkm2y!*vvqGePMwsNHWYTp-soFcUqP=BViH_lE_8T!Xl894 z46nDewc!}oxXXQc&du*Megi$kd+QT+b8$r`b#xKb+)tvSh>eVlx=YMuSo$_LHZ-fA zCGmK8dfvQ%kT-q%M#61S=Kt~~{m);&5`r&58-?Rf8l3t3&bIa}F z>V~bI=!2gklr%IgEiKs4D(8E%387v~ymueKe*Mla&Wj8S!+-MRNq4cSl&pfnl|D@V zdC?Cm4a&ueW9%fDJji1_#JBOXw@EzpF!({5tR%E_@@zs?93FjVI)db?4bikj-`X1ImxUfVb1<#C`phQ!2> zUbt|9;}_Bqe;IT98fS--noG}Lx8ODw1}&7CFNxR~zr6|Ew?7(( zu<$E5Lgk&<3Ai_4RTbdy{Q13f>GTb%U;hk2*8Jq)vy9=Q4`*#^=@>M1Z(HT~_I%mj zn~I*8nhJ=P{DW6tU!U-cp{~W&6m3c`rpkC(d(WsH^j;5^>euu0lYDW_A-t?iP*z^P z`Nxl{_b;=MN3_T2>exP=AR*K2&r1AWZx=3PKX9I#oA|o-&fRqx^n>6>Nq0Yc^i~ga zD}KjOiL9)w^X%+6tg(2bqoWDGxX=*|KlvFVn{QsUcXrAuD&kE}PL5Ac2m1SCDyyn= z-AhCN{^W*FeonP(`}K>F>$|Kh{@+i3G5I-;tlj@EYqAP^!LmH5uI^=Z0W_2X!!&XJwX$*T2`2yRmluiTtih7i)lb(6m(DAD|5DQ-l$hu|c^GHS zxxW{<%@8alYquwB>@Uljw`{FLA5pUt{IR>_{mYww|KOYXo=jGo=`Ey1Bg@bIu9`E; z`-pH1hT4L^GqNv4PD>v@g>pJmk3Aq(F|fKk^7kZNz>5ml2eFShM2HS@OI^KqnLUPS z;z+i-*&A+?q%$-$p9lR?+Hj)oo(?)3&K!Y@bF<@`YS&bVTW#)IW6^70EuXs*|NQ)p zt=L<;7DSpn&cK-QTOw z*@t4Yy=f|a4oB+mD?+#}%&f!<$_Pixc*sBXk!y`EB$h9}746|a$Cj*Lf@@Dj=jrrM z2Dox;jXIhCzMDefm^3d|+bC4Qi?oApkL7O>R>8OA#Tx6JPV)*8pmL6SH7Q+QOo6rl zGR+zIbe*U2{cyFR_7~=6@mS8GuOnn+y4Q)2(7qDV2y;uj9QV|Gx(=N_q3Q3F|5mM? z1zc8ea;)silCEfc-e-Hg&{n(Mi+}I6qh&p0{-SP(Mh*OFV|l0WfJS<-Q;0Q6ITGwfgvGNZBg`C z5l73;B!1EczKn&QOa;9fcWxfjdLjx63L;uQ%){Bvn}r7D9k0YWISIb!sJ3LtMey16 zaTJc+M##b=BAoX(tzKRCriS(K*js18G!6_<7ZnvHi8!+^4ipyjRMj8K!s zaqOw^n2+{?-=}D11;A3PqjiMID#0*$g=h**G1b87MTy1*(Qm(al-5_ zavzJ2r$oO(_`%P{D0<-j(7iV;wQZ^nQUZZ2fQE*`3X<9nE47a5L zT5)%-KidnLn&N9?4bdA@pEA?ZFfeX{ii;hSePPZ9kNF*_&WKWT8wA2#+q>4~ceJ*i z0o=Uzd(iYsIpgNH>RKspbgO*RXeQJFY8#ZZ*WtS9*NxgpKQyKr${S90V|Pp#*}3+(KyfQkU)7MCp9Wk7{fxe@2Rm0jWQ zSpHc>k)EDTw|25VAp<*sjWM&b3gR)YZftDC04)3XP3k0);*wh9r%wu2<7p~7I+WI5 zUj!W@hdw9-NAVFr1E=4My7z}lu;7z`E?td`RI0g^rxU)vHOI!ng7vHBkpfJb!=ocj zU{)8EpL4vb$;vtnOC1ytfGr z3Wt&IxBAdMs(=x|usn~DhxP4H6x=D6H#0l`(Sl#hbshs%0|U{#KVP@feTA<6&tgHM z7xTSuDQ7UXzXuFwR=xjh+wSe{*|_<^wW&+)pPuV_{SOLsUq&}IHeDY%$fQJauMrvwm3*`4=zlhg1 zNB!ZZ@@X6#0&`W*fgj?mh$aqcR@A1)rB`_+FsVL#V zm2WB6Ti&Glg%i^7m?8U{GecDm-*h~rq@+Z_7eE_eSqeHj@x4a?1fzhX0mZR^Q|sjF zdK#0Joo&9e{9|wB!&rBn_oLdQoe_hEXegcL;bA)9m)wuWptrPq`9iodTrN}NzEa}8 zVqjG3p}E5E=jSK#XqDl4je6*K}` zQI`vT$NO_GBcgyO>lmY4=DS&-(nxk9~!m?5z>&-(-&;I0Y+lk%OilBC&9(V z4dQ(;>@hwx~kB?JotES2U7b6Ocm zim)RS#%yi0&Y&R#mxSp&^aE&>bgJ}ll`Vi6BZ1;Ib#2bqyW%^69l!}WmX z`UD3+z@cGbO(1&+O0om=0w`MiPPe07ffV@jB(yy$zoQo_rqapzq=)k_-o4{rUS7t; zKOOD~jE#+zXLGR|EaE;C6R+96T2fX+QTA-05e0+TF?pzH9%Sr z*|B@`ko3T0xr_Ct~RO882ktOhhLp(m*Bctc<)VTa_^~VnCrf z{3d$#s>~n-h97uPYz-%#%e21s{Y!02N+soO*7%-JOG~eA zZf$*u9P&8a<3Dxkl-b?8fpATPBM$fPW8$e-5|mX`bUapI7NX;a-}jGeU%{QVnK2!z znAfkl0}VPP2cJD7e``=q0G%i4y0?4P+!y4_7i|}5^0UsH=7ueC-W>E}lH}y%`61*T8_|~q`)PrzSNT0R z?*;}1rTZT2fZ%}}85M;UKd?Y2y0 z3Mn&lG~fb?uC6W->3(uiPmL zRJ_m(vXRr;==G=(u0*IVbwuijl2Odnzp6^Kv$J!3_N8O<$cSO)g2%8=McgIzV0cH$ zb?^B46rgFbidnih=ccFc!ojon9K!;N%taLy6*F5~d>R@WR0<<7RdT(_dFAF?ra*x| zbcdKm0B$j{v5!I2%P*|j%m86E6XplVKds(tbs;dq5wosWqO?MGlyDe*e0(UwmtgU+ zfnEWj`~3NHBW#rO`uI&fL&Hp18~`qQA099+udGZgEbNPo+68Uy?uLNcQgFL4z9?&U zZ7q6!-UhIXf_Y#(=ccA?hy0F&?;lE0QBh2qd-#ut_ob!I(2FZ8D>;mvRcW}m5$>RI zY5kE@=AeCxk*&?m66>#Yg7yP%e1h`9bs5!+=^qDPIvm}oZpxeLZ*YXXTH}=!%F%cZYY3&8%Zy$HnZ_Y?e&wm zI0_WH0thX09Ako&lmnj1uAUN!Km#o}ns@|l3v^5(3row1@o`L;?33|vGa?2N(vb>> z?_Xc~+=OWwbmKI};KKuAI0h3^poxlziZ%h-1bKCRclVB0N^`R`3bQclsV9dD3z9HY zKh~_(M`UEM7T#&YCm~UQX*>?H-O!Mppu;dFpkR4dS42?qXj^-Gv0r%tcaBE4?cPBK zywMDrKHk~0!7A(kWElTZDCFfWnx34QA1qF7D_F3ZymeEOpum$un{3b{nX18+<>JLN zOM}I@7?o5>M)EM(Da)5a_Q5bCnE(^W`S?hn+NJrT8ca5GN5|q4C{5SoV%fGUhXNIByG)T$BR7LFsWhpRtDC%$||K_Rdq{1eq=fisxE z<}|1nEw2<5ku5ANpy06^OpJstpevR zpfowjK7Rbx;|JJhRi|fW%)#UN4Dt>DAAV5N3!gT)E|9lHGe=KOTHOEf{tS#DRFYh8 z!et(Z=>fdYE}74@{nrqvbQhKofdr^@W-UB>gU=tBV7eFL1f; z500jw7oqwgr^093D_5^lgoT9_7h2!)@)83W82aSNDNqj6frwb`=)<@pAS8Te)599| zO&rEPFvdv`yP-_jppIjclfwWwqi%z=S~|D5krw0^OnFgi4YiG(J<&(5Rki~ znWfrbEP&L>QFgR1riIcqz>$1+Ka&>9*TZ+3_vLDql$HhnxS|t&Km_VB`pMvF!NFHh zQtG(U@CKFv*dc*7jSvfob4uzcKbnx!4+Fy{&6*Xj#k9!{BtgS)e@^@FtD|s8g#i(d#ETJkY-Il1u+?R8&A*8ow!Q()!CZMYC%v*3=7kbZF zTU*=o<&sGruFIejJorlBA!>`LT_87a^vBXGvmpbJb*YaBx-&fi0YTvUHkc}?7bqbi zQS#uI7)q&4eKvxI6G#i5yn4mZnJUG6>((u_dzKIkZlSyi%o7xXAO)9Sf?I=ne3}Kf zxlxyBt#<1ymez!OHIP|+^-p`p~0+~#FBuuFm>B9xO)V000s2{I(a z;bwu_q4X`!P8|AHtfW>Q&)StFL0j@`j-!#xetTFj0wi4?KAZq#;Prd4sij3`#(8sM z`0Bkb9WhzI#Xcl&?{Mqe27Lb^U{8z2hy_Mf_?`2}*C6zD~C&VIgacq>d!hC#Y9<6rjWfY$#F+iU3q70BWvu zM>cNoR+YzwMe;WVrU#(epM@P=Utial-vag*2{dA=FHgG?Igy0PQ|-PIZc^ukzqZi2 z;GU0qYXA<49TJLZR9}gZt*)+$`2GPe3s!dH=o{%w@_h zHd7%Uc6NC^QRVNprJK4duKbGynwj!=BqW1>M8NQ35O*i)>FEI*`-uuWh5TtZ@PvTu z{R6xfOgG8iz0eYJ(>7Tvb{wm>J8*Y6b?YCDG+iDj1qRhkm@1^O9VmOffLu5Y*O(;w zFlYD$159-s3;-mPg{8K(Hk$26WC zjh!@oMilp%YYrn`=Eq9uPL$Sx4+%%O!+4*ajZMZj*1+LhIPGElBjT`hmc@Zy9v@FC z@Q7OgRh!+r7XqKlY5X`(0x%~=30vQ4dSu45uOA%^XhQ_Jip60}C&A6Fn$8oJoO}+9 z>)^dTkHQfHRP)^UaW55QW8{>YnwnmzwQ7}+U7xCG!tTWmyE;JIiTH_ITU%tHZ}d~L zc;fvQTRN)!478rsoHg;)tH{1S9l&s9DlthZDNljbXU}zXb@7yn-S(U=&|Y92^3#7U z=GF|BD2QDwhet8$_DesjuA-|I8j3ejXM1%lIZW;mp8nri!UDW-2SHS1!_aGoYIVi00sj19sMth3|#X8h4Phhx_ojVr>9fD9u zPmqj~G7v0H7z}n2;jpX^(NSSgaX)Xv%_Ia+8x{uiLYDj5!uha%r%sO6ke+h;JB8uy zG}P3rkPyL?<)>%bZ}MFd5Fpn_^z}nyel_U&kBq$a_j`uGyFfyXw zTK?&C>UhBw>&uANn?>7(!?5Fs6sfr{k(AxpG=x$i!NJHRz-XJ^Ec{Ww1Ba+@mJSZw zeQ|rsrQdW`cMs=-q0V4o%1`nPc1%XT-8QMz&B3UA+E`@HqwXXRsl%eL{%Xhc$L zXf#uSMDYT-gx5CSnD6duzUfNi2$ z-GJQ%UHazKWmPI$fXX87%d{_q9iKvTt{XVs*te*40d*Ipju27E+;FXcb1&hsp4Ob> zGcz-DnX#OTmKF&G4>SWZ56z#8@5IK$_>Uncb)Dfs!2Fu-rTPY=j1Bx(;6y$%_H}PT zwQK~TbFkQyX7T8A`_eIN4h{$zAYJz6k4B4S%123qEL8Gn&Eyc~8Ub?eF=BrMV6gfS zJMXErxw$u_+bEg^1&;H?0X7?9?Numtm{x~3cEb(65^+A||3~_p3m~*gj}2BdnM20^ z?aQ}sGz1q5yk2;0&8ngYzjFtm7ZwMj=ytVyj!m`F*Fb!V5~m4i22q#Owzjs?c!D6N zWD8yE+XoN5#BJ&JD=EapynSM>AHoo-F9bn0A|YjDEObEvH9X6X?tks<#N?jcD)U|B zJlX7r!pUZ%fbZ6&J~f!VNYSCwDP&@uybIjm@>{P<%y}104VdyFH?>?s;)gd*2$@P=iGk0ImY+B0*V4Eqdx^fxUgW{aqcSq_Cc6AnyZx zODr#20B%&!w)ZrcA|YVFLp6uMHlvvj`fK-ZKo=Agi}vXl{1PYy>!Mfbl)mo0PuUAb zGoJ7Bf`S61nWOWPddhg+?r1<=-F2|33E0@!(6|xEt|jH=t$<_u)NBWIfCNBNBmDQ$ zU`tOA8BDyJ!0s$8EMnr~u%VLz*2?cqwgC(o6#VeCY2qCDn*N0Vkh{x_PGZ!|nOICy7aJ{i^r+h3aTtZ^JJ zxu>V6-EM*Qo3rxK2vZc$5Oc^+fc@nUY7>Z9X}^Wg>>BEV@4&DwuJD42r6Q2I7f^$@ui^@hIgV6_Gnvmn<2MHvPAOiNFn3C9>6 z9`a8a@?83)K|}ESvv3Kxx6Fc|E>NK9*;!VQ=Ri@A*_!>j(WAhu`-d`{=DL*c?O*X4 zBqSuS1EnlKJ(Yv?gY^go_J)ShpsZRxhEbHiXnq7vXHqhfT&GhBF{a$@QE$Jy>HyU! zO-jqkKIUp>Izie6wL(EU01(*>FpJ;3`Eul`hF=Ahh$;0R>wrsZpd`QKsJEFagf|aJl4+x(+!Nt^E>+E2i)9?=A^eo1WMj(+pz z(phH7$m04xN=er7FJ2IU)pYmnT{AFxhN|5P_|Bm5D|DRRzWuzJ|HeX`p(nq>JH1Gd zw9P=v;p5};*FiX2K|U=3FB0@BNCj|G#+&^AGer40SHGrQrw7p$C4*-fMACK^?%UXK zcN3#1oof|G)?RIxit$;-~59 z=|T2P1Nl`tcM9Nz%SC?U^-W~+iQo->v$HrLN5O((cNcYU zMSwmO^i5W>cTo;d*GIs0-9U8@A%BC8?%@iD2&U^^X`t4FJJ~qm*uc$&UmRJH>Hx|Q zAEfMHghw)pQ$yb;dp=;&;CCG~%&h(cuvl0S$^B^xOe5rEyDOb7Cww+Z^J`Dl@fL^$ z3naJ^XAE8jp+-AL<#MS7EvihB<=xJ1X2zf@3VNtu_@{&4ghu?JKmPpr6OBWGGMaDv z1g=dgxS>G`6w9cjBwEy61iKaWfI%KMwI4AyHlCQ93qjz*&$F>%qsLfLF|@;~edf37 z^!G-SR=A`N65a6MoWLEexUcpb!l#({$=s;LFT>-Bq+gyqU44W0LDfVhJtj4lCc zjz9va80hvTODKFA+sI{~O2}5B8UNjw&MS{X~ zPy`wV&ZnYL3dOPcyTdefucD=nX(c5k_vSOB%M3OXIn};l8=Bj3fIy!=klwjei}S`8 zU7toY0Hv#+K)EAMdV29kDVw2Wd&#f3JcvxJpA3VIh z@3@yL5);0oy_REbx10A5b)C{ws~GnEn+VBuah_H`)A4^IQpmpMM?O&%(7EWyU6-dFGOu_v@ea2@T~WfiO&6;36rS zTj_X7t$=!ova$&g6C|D%0y1Z$y-yGTtoPEYmoFZK_kw1C6>IL zL5|q=zLbdn+&g51gu<-^?ov*tKj60f>9MJ|QZL#X^qGhA6b52AXdWr+=RMBd#15tP ztn=f*deI(hj#22=mqlE%F%;R(eXgOT(j6@|9iV##`1EnrVb#3grDS+y|}fh zig!GCV|m)wF8$AY#`44wj)5mb{)Bj_iv`U`2n`9v(9*eFApGYAGF^Kg74^8r1a+h{ z_dWd$9o@REF7e8Tb7zT&l45%cKs3X`j4EeQ{O990{4(-$t-d^mq`ab)a6qn-*_uk0 zw38FxE{}5yKVH2 zXvD4hKcP50a=7q}{3y1#!snutNs8=o?VL4ae~SRkCp%5Ykv*q|(3||fSK9xx-j`k> znn}*Wf)%WCGY}ie*yLe=7QKHduiFjsuoDD=j2iqH;U)kc1%vkne1;z+uD)VZ(;;Cv z!@wkyJ05ZyRuDlNovP=4eg-i8^v&`grS~!c&=8EUvatdCL{Jz9KAjCD6Xc&F3}N6i z*RJMhQPBX218+G0*FBhoXjJ1Mhi-Cv;XCAPZvgw$($;2)YcKKKvWBsk@X2Q6Q($oL zBy=uCXv6?BA*SMwUUP4+mU%;DBoTvz2Pw1_^q;(Tmc!u51yD&hs$2mgKrZ~<-FEV0 z26RZJvM_>LhCD}I_Nz-JmPo-ax7~M1zVVG zUo_MT`d$BOu>&&&WO30yf)OMO(c<;#b_$>sOpjK7Hchrhm|I)pU{Li1*mo?b5+D^% zf`SL+@QEyI6JVd9Erg1SY66tf`Cm1{0nDtdjAnZ>+o*#7SG1*tz%F@;%g(}gT+q)x zLT063@?7?dJh=#J0PZX(#V$Dl7>26e5dE6%dR?$?0Jp#ogDm_$yDl5}yfdTB05U~< z_V~bmMKuSB^*Gmdk4tDRKv-Uqnu!3J_k%!5fPF2AAZ1NF*jiRe2LsMgZsAr zmJ$Vb&;mRY!d={8$my;YI52NPtO_M(p!u}H&9cNQVla-i8#s`K34p&NUaLRg!JuIb z5@yMd=%XDl>oJ&X_lNvZ(iA9##?{ObbCzHd=Ax}{PeOCqExs~mAm}q4Ks9edgorBm z!^qH3BRG1Hz54_y+$-;bbf`qd#S`)UFlnHqK^a#9ue?|mzWocLyqX#s{s1B`tGt2G z@(oa;$*8D;Ku6cLAk53JcA7YaNrV4`7L#uS!o{EmWnu;5+X+!FC~Q8Dbu*SdEPoU= z03fM^zlJcmfA2yshEjeDbqCL#JJ-C%Eaex8Zg@&c3LiheXO*yutSkXk@X-|Lju?L! zsn0#X0vp0O!Sxe3Q0O}1;NVy-(qL{_TeG7gH{kCHSS>iiMS%mFx<~@#XHXUgfq6Va zLhU{23zya+bbjBtc<~|;Q(hz>=}B07uqJNP8I(G*iaH$7x*dFQ7@-COSy4&p6b5!5 z7qh-Qh7cYAlgB`Kioy?AbqD~gG+@NV$JU^4VPF*FGfDXoVU!|hJ3fGAciZM=?w@LR zWQ7g_6bS?0Q28Ge){BQGT-25yL&@gH8jv#;G5PtRNun^ld5xHe2<79EbV3ARhBr3& zk{w*>Z396{Q%ftOEQhkOKI}N#fjJIPx22^eJO+{bs{!m_kj~CP!0DainB>RSRu*Vf zsF?%lEG*2OA|s>;sM7lWTH+UAxA!^}^?+4>POV`}gn1=jLz$ zPS-+1Z*~upJq2V&L|i-*b{kcQVK-4z5HNBJw4Yq$hR}DomYrgC8n&`5mkX!!uHB;ADa;-2y6lG?<%9+jZn*{giM^p{}_Q zlSH3&fhrh9PJDwB>fta_h36r3^z@zW-9MFhSe;Tz2 zK@zuheFdU1%)6NQ_>VnwI`SaYOw7-RLOLhiI{5IG7*s(YoFS|mGx5AuL&E(=!#n)Y zot1WV%NqnhI~8$Tq#X6#HAY=*P&gqo_c85eKzF(fE)laN!T_uetk_NEI+&O*Ao<=S zHT|%6rW{GRG-mDKV4Uudv6u<$1xmRUwiy~5U(k%55R2*K?2?joH^Jz9(fuPh_?Ypr z`p_dPTWQV&RtX6PxPW;O9&Uen@0g!lwqgmX-B{SvGR4Xq-(J}N9$2{vri4KR?^)c* z3&`8|e1SCbHfr%8eCw37@tl+cWxG;3#rQw>4oOkfz`d=`A9 z*3#91tRomGlTd8%l!|)t3+`{;kdjjZ1C)W8l++($c5q5cQF(3M|GRk;UEc`;*AUB6Of-I z$o$xqDisYHpzGSG@yzx3#KaJIssIf=5)?!T!D)m2Bwqz-#qksd9tLs!V-gl>M?mev z{wG9_s|_LpCEzooxe{sTFYD`02uj45rRtv#sBG{B&trHz*)gvcP}DMnZoP+%>g8HhMfo<^S~fg~y`IOK`ErsxAXz^wA$8$)UX zW)vEJYuCAeKcX4CpW(eA_U;X z^gxak7*zHFRO~ranTEm$asWk*(r;yABAxGr!ic0bIPf;zX;_fEb%yjYJXn|p0G5{D z;xweT;wu*5kU?Gseaw@EI)cjNp|dk85B^Q*MhlO6$grFSa8J1sdRHL%?R)xv`4B`d naqZ(e5{& +Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 15.6% (304/1945, wired) - **Correctness** — all **9 BerlinMOD queries × 3 streaming forms = 27/27 cells** reproduce the batch result on every platform; the Flink snapshot output is **byte-identical** to the batch oracle. @@ -55,7 +55,7 @@ Three layers, increasing in strength: |---|--:|--:|--:| | **MobilityFlink** | **1,945 callable** | 1,945 | **100.0 %** | | **MobilityKafka** | **1,945 callable** | 1,945 | **100.0 %** | -| **MobilityNebula** | 6 systest-confirmed | 249 wired · compile-verified | 12.8 % wired | +| **MobilityNebula** | 6 systest-confirmed | 304 wired · compile-verified | 15.6 % wired | Flink and Kafka share one generated JNR-FFI facade, so their callability is identical; it is confirmed by a type-aware per-method harness that invokes **every** facade method From 3ce7d87b1985a75498ce17186845bc927d190671 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sat, 23 May 2026 19:10:04 +0200 Subject: [PATCH 12/22] docs(profile): Nebula coverage 304 -> 309 (windowed value-union set aggregates) --- profile/images/coverage_charts.py | 2 +- profile/images/streaming-coverage.png | Bin 51670 -> 52150 bytes profile/streaming-parity.md | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/profile/images/coverage_charts.py b/profile/images/coverage_charts.py index ab3ee1f..71a52c6 100644 --- a/profile/images/coverage_charts.py +++ b/profile/images/coverage_charts.py @@ -56,7 +56,7 @@ def hbar(path, title, rows, subtitle): [ ("MobilityFlink", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), ("MobilityKafka", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), - ("MobilityNebula", 15.6, "15.6% · 304 / 1945 · wired", "#1a9988", False), + ("MobilityNebula", 15.9, "15.9% · 309 / 1945 · wired", "#1a9988", False), ], "of 1,945 streamable MEOS functions (solid = proven callable · hatched = wired)", ) diff --git a/profile/images/streaming-coverage.png b/profile/images/streaming-coverage.png index ec10bb4e8e43ddd5c7c0d5b60ec9b382c42f3bb0..aac1965366cc1a58a48397a13ea6610bb8e13092 100644 GIT binary patch delta 16279 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 Q;B}r@SwpEn!Tk3B0)w^D=l}o! delta 15795 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 diff --git a/profile/streaming-parity.md b/profile/streaming-parity.md index 2a17fd2..10a8975 100644 --- a/profile/streaming-parity.md +++ b/profile/streaming-parity.md @@ -18,7 +18,7 @@ deploy on real workloads?* — with reproducible evidence rather than assertion. Coverage of the **1,945 streamable MEOS functions** — confirmed callable on a real `libmeos`: -Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 15.6% (304/1945, wired) +Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 15.9% (309/1945, wired) - **Correctness** — all **9 BerlinMOD queries × 3 streaming forms = 27/27 cells** reproduce the batch result on every platform; the Flink snapshot output is **byte-identical** to the batch oracle. @@ -55,7 +55,7 @@ Three layers, increasing in strength: |---|--:|--:|--:| | **MobilityFlink** | **1,945 callable** | 1,945 | **100.0 %** | | **MobilityKafka** | **1,945 callable** | 1,945 | **100.0 %** | -| **MobilityNebula** | 6 systest-confirmed | 304 wired · compile-verified | 15.6 % wired | +| **MobilityNebula** | 6 systest-confirmed | 309 wired · compile-verified | 15.9 % wired | Flink and Kafka share one generated JNR-FFI facade, so their callability is identical; it is confirmed by a type-aware per-method harness that invokes **every** facade method From deb230df435e71619fd07529dc72e78a644a39bc Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sat, 23 May 2026 22:31:01 +0200 Subject: [PATCH 13/22] docs(profile): Nebula coverage 309 -> 311 (expandable-Temporal* streaming aggregate) --- profile/images/coverage_charts.py | 2 +- profile/images/streaming-coverage.png | Bin 52150 -> 51705 bytes profile/streaming-parity.md | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/profile/images/coverage_charts.py b/profile/images/coverage_charts.py index 71a52c6..b3ce5e6 100644 --- a/profile/images/coverage_charts.py +++ b/profile/images/coverage_charts.py @@ -56,7 +56,7 @@ def hbar(path, title, rows, subtitle): [ ("MobilityFlink", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), ("MobilityKafka", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), - ("MobilityNebula", 15.9, "15.9% · 309 / 1945 · wired", "#1a9988", False), + ("MobilityNebula", 16.0, "16.0% · 311 / 1945 · wired", "#1a9988", False), ], "of 1,945 streamable MEOS functions (solid = proven callable · hatched = wired)", ) diff --git a/profile/images/streaming-coverage.png b/profile/images/streaming-coverage.png index aac1965366cc1a58a48397a13ea6610bb8e13092..a671dae281c3ed2f581c1cb25d9732a7f780317a 100644 GIT binary patch delta 14906 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 delta 15350 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 +Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 16.0% (311/1945, wired) - **Correctness** — all **9 BerlinMOD queries × 3 streaming forms = 27/27 cells** reproduce the batch result on every platform; the Flink snapshot output is **byte-identical** to the batch oracle. @@ -55,7 +55,7 @@ Three layers, increasing in strength: |---|--:|--:|--:| | **MobilityFlink** | **1,945 callable** | 1,945 | **100.0 %** | | **MobilityKafka** | **1,945 callable** | 1,945 | **100.0 %** | -| **MobilityNebula** | 6 systest-confirmed | 309 wired · compile-verified | 15.9 % wired | +| **MobilityNebula** | 6 systest-confirmed | 311 wired · compile-verified | 16.0 % wired | Flink and Kafka share one generated JNR-FFI facade, so their callability is identical; it is confirmed by a type-aware per-method harness that invokes **every** facade method From 31eaeb9ccd1d985a399adbcfd6c6d6d7fad37216 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sat, 23 May 2026 22:45:09 +0200 Subject: [PATCH 14/22] docs(profile): Nebula coverage 311 -> 316 (value-output windowed aggregates) --- profile/images/coverage_charts.py | 2 +- profile/images/streaming-coverage.png | Bin 51705 -> 52063 bytes profile/streaming-parity.md | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/profile/images/coverage_charts.py b/profile/images/coverage_charts.py index b3ce5e6..2fd1171 100644 --- a/profile/images/coverage_charts.py +++ b/profile/images/coverage_charts.py @@ -56,7 +56,7 @@ def hbar(path, title, rows, subtitle): [ ("MobilityFlink", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), ("MobilityKafka", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), - ("MobilityNebula", 16.0, "16.0% · 311 / 1945 · wired", "#1a9988", False), + ("MobilityNebula", 16.2, "16.2% · 316 / 1945 · wired", "#1a9988", False), ], "of 1,945 streamable MEOS functions (solid = proven callable · hatched = wired)", ) diff --git a/profile/images/streaming-coverage.png b/profile/images/streaming-coverage.png index a671dae281c3ed2f581c1cb25d9732a7f780317a..f1f3d37d6c2a943aa5e755aea3abb8693599e939 100644 GIT binary patch delta 15277 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

44Ud1`7yBos#J#)GVp;_V)GR;9tea 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 delta 14901 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 diff --git a/profile/streaming-parity.md b/profile/streaming-parity.md index c1ebd42..3f04d78 100644 --- a/profile/streaming-parity.md +++ b/profile/streaming-parity.md @@ -18,7 +18,7 @@ deploy on real workloads?* — with reproducible evidence rather than assertion. Coverage of the **1,945 streamable MEOS functions** — confirmed callable on a real `libmeos`: -Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 16.0% (311/1945, wired) +Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 16.2% (316/1945, wired) - **Correctness** — all **9 BerlinMOD queries × 3 streaming forms = 27/27 cells** reproduce the batch result on every platform; the Flink snapshot output is **byte-identical** to the batch oracle. @@ -55,7 +55,7 @@ Three layers, increasing in strength: |---|--:|--:|--:| | **MobilityFlink** | **1,945 callable** | 1,945 | **100.0 %** | | **MobilityKafka** | **1,945 callable** | 1,945 | **100.0 %** | -| **MobilityNebula** | 6 systest-confirmed | 311 wired · compile-verified | 16.0 % wired | +| **MobilityNebula** | 6 systest-confirmed | 316 wired · compile-verified | 16.2 % wired | Flink and Kafka share one generated JNR-FFI facade, so their callability is identical; it is confirmed by a type-aware per-method harness that invokes **every** facade method From 5fb39c5894ca4c0c8bccc3c8a0a8c61205db8576 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sun, 24 May 2026 03:43:53 +0200 Subject: [PATCH 15/22] docs(profile): Nebula coverage 316 -> 324 (tnumber value-output aggregates) --- profile/images/coverage_charts.py | 2 +- profile/images/streaming-coverage.png | Bin 52063 -> 51853 bytes profile/streaming-parity.md | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/profile/images/coverage_charts.py b/profile/images/coverage_charts.py index 2fd1171..09875c2 100644 --- a/profile/images/coverage_charts.py +++ b/profile/images/coverage_charts.py @@ -56,7 +56,7 @@ def hbar(path, title, rows, subtitle): [ ("MobilityFlink", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), ("MobilityKafka", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), - ("MobilityNebula", 16.2, "16.2% · 316 / 1945 · wired", "#1a9988", False), + ("MobilityNebula", 16.7, "16.7% · 324 / 1945 · wired", "#1a9988", False), ], "of 1,945 streamable MEOS functions (solid = proven callable · hatched = wired)", ) diff --git a/profile/images/streaming-coverage.png b/profile/images/streaming-coverage.png index f1f3d37d6c2a943aa5e755aea3abb8693599e939..e18b27e9ab2e293503f7b728966a747171f24e55 100644 GIT binary patch delta 15979 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 E52s(*fB*mh diff --git a/profile/streaming-parity.md b/profile/streaming-parity.md index 3f04d78..41affa1 100644 --- a/profile/streaming-parity.md +++ b/profile/streaming-parity.md @@ -18,7 +18,7 @@ deploy on real workloads?* — with reproducible evidence rather than assertion. Coverage of the **1,945 streamable MEOS functions** — confirmed callable on a real `libmeos`: -Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 16.2% (316/1945, wired) +Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 16.7% (324/1945, wired) - **Correctness** — all **9 BerlinMOD queries × 3 streaming forms = 27/27 cells** reproduce the batch result on every platform; the Flink snapshot output is **byte-identical** to the batch oracle. @@ -55,7 +55,7 @@ Three layers, increasing in strength: |---|--:|--:|--:| | **MobilityFlink** | **1,945 callable** | 1,945 | **100.0 %** | | **MobilityKafka** | **1,945 callable** | 1,945 | **100.0 %** | -| **MobilityNebula** | 6 systest-confirmed | 316 wired · compile-verified | 16.2 % wired | +| **MobilityNebula** | 6 systest-confirmed | 324 wired · compile-verified | 16.7 % wired | Flink and Kafka share one generated JNR-FFI facade, so their callability is identical; it is confirmed by a type-aware per-method harness that invokes **every** facade method From e7fe1eccaa12319406cf0775f7a35619a9304d3f Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sun, 24 May 2026 04:45:03 +0200 Subject: [PATCH 16/22] docs(streaming): NebulaStream 327 / 1,945 wired (16.8%), 38 systest-confirmed Regenerate the streaming-coverage figure and table for the measured NebulaStream surface: 327 wired (16.8%), 38 confirmed callable via end-to-end systests. --- profile/images/coverage_charts.py | 2 +- profile/images/streaming-coverage.png | Bin 51853 -> 52079 bytes profile/streaming-parity.md | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/profile/images/coverage_charts.py b/profile/images/coverage_charts.py index 09875c2..73b2643 100644 --- a/profile/images/coverage_charts.py +++ b/profile/images/coverage_charts.py @@ -56,7 +56,7 @@ def hbar(path, title, rows, subtitle): [ ("MobilityFlink", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), ("MobilityKafka", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), - ("MobilityNebula", 16.7, "16.7% · 324 / 1945 · wired", "#1a9988", False), + ("MobilityNebula", 16.8, "16.8% · 327 / 1945 · wired", "#1a9988", False), ], "of 1,945 streamable MEOS functions (solid = proven callable · hatched = wired)", ) diff --git a/profile/images/streaming-coverage.png b/profile/images/streaming-coverage.png index e18b27e9ab2e293503f7b728966a747171f24e55..7625cd226dac7d29748610c8bd87405799ca3a4b 100644 GIT binary patch delta 16207 zcmch;bzD_z*e$wjMHFci1OY`F3>1-4LZnd;R3t4xB&2H+(j{9F3_`jj6ckX9Mlmoz z5R?=t>FztG?(dv?&hOlF@9+EWz3ZR7S*|tbT<`nD7~>glXylrayK8QFtgdU#^Arvt zj?x5Y{BEas(1?0o6Xx~i!Dr?zZ`&I5ZAWyp1a7N$|aUL5!smnQa3(0$8HZl@k_dX!aeJ8 zq~hgOWzqXgjVvsJIXq@pxlaGqI#-aBpU*%T8yizi`54?WKRUFTH%_4S6+!G1`=Z@< zwxg@d`$q2v&O?Wo)@<0S?NXAPtI1}TaJ}#6)L>KfrMftW?wT!>9&Z2GraK~*rCELrwn+(`cU&p&kX^7696QKsLXTvC=vY)U`9 z;q6_a%8=~`L@iqm+6}cZ+7EtJke6Tkgn0UNY>?vxikw9ABJywZdpomu8C}{=2P&6|1Ae|3%be(dk<2vn?FN;=Y$J zU*5WN=Vt43tL{n~nTEnDcb&P>N}6i_XBBeeC9X4Ef`Zhtb7{+J4-WCM9l)c!CNA!O zIbJ7_cHzY#I(m9qR#t(pQ#K9`Usc-AWa|eOSTrSEc;R4eZM{wRowAym@4b85&*T_9 zo?^(x>Xx;&84N}o*I1bAjmvW!F`%sIcZah}ohtmmET|W+`Q+zJJ5lS{?!Lj%(edE5 z=50rg94WN!Ts=NME^1P>Q8iBbLazsrM#seDx3n;m=sfZ3YGVeYs;cU(=xAPb4pvDg zYu{tPf<+yE>%EIP%8Z!tx_z6ztE{;Wv@g9koO!tN9=p#3H&OAQntCgr2 zIOEgTcQq*~DgNx!%X+y+UUjC1u0vuC89JL^Ezb*hj(dN|P^4~YZti$7Qd+rzgK+c2 zjX8Jil6~36A?0$@qA8p6=uuYI!`E*H2M2$Mt9_;QxRN8@&CK3dqQ20koB#Vt=;5}q zq8q*2wr%sgci;*?qkG$vOPgaQomaE6vQGZ~cDm=t>eZ{Y!(wTdy>^Hid1hP5SyVh! zR?FN-=~=lI%Cc|uQODsbzb&lW*x0B833>0CHdl?*=@iv_-iRC32Zy$-TD9tyan^POk z(fv7DMY%PuEyY}WCd$xbldi7r@8-NUw6wIiX5Xj84JjIN*#~vxM2*TQ2z+7#?pA2m zPp7P`{PD>pl@JaYgHDygXFO{6Z>Fd{=zj-11?~!82+GYB)jNOQbo}R=*~u>&_QT!5)=TsD$u5F49MTPX@(VGJZRL5U zwbng#j6ZvO6Y))_g`wyB><0*K@gqn2A6p%`{I0Azn3e_vq;8wsCOeJW-4|#4hcYW*5WE%q(!t)nVPh@Q)YW^HYNXp`q11Z=+C6yux-K zHF+1k@7(**k6)3!yKcYP#>yJ}^h!OKj0^`NT5+VUWS@BhZ}RaPol8VVnb+v_bPe{y zdU4h!IyyR@SXmyOm^gj*c`6r&`y{RYg$sF?-ZJSI*{)MiP(Uh_ZQyY8q>)+FO!o^f z`}~;>!ONT)l73FuprfqbUb z=kk{&CA2$s1fd3)5iys;*pARGOb=D+8oK+=P4uqejeF8FFc1_HLLIX6C=())A@%Cc zqYl*EC&J_%9G+F|qmT*0G^l7E$UadFY;;>ET1RQ(i!nT(eg=djNKfq_~|S9%Xpvtjv--TIVgdIBrf(PT(eW2Gr~ znk473{dul4*KOXszfv#YCQQ$xx^0kFN^SN)d$E0HG(R%~L%=Fc)Jn$H@x+&?I>L6* zIn>L^{e??ys(MO|A|H-x-@exNa=S{DaCNxMGVj;$1ZLCe-`|>F5i$-#Ey?y$ zdp~ELYg$aFK6>=%+V$%zunR97hP+Ekq>AnOy_tm0mDSd6`1b7^i-cWT&0JEu+r$>> zh2IC7TU#r?e4*dMdWb=Og0c9k(^4X@f%v`o@dv znU^U&6Jx@Lr6GK$Q?QWh3vGL-*kwGZ@eJ2~6f-W&jOgCqI-QS_#>vaO@$tEWtd1ZET;UGM*; zl&nnowPuF$Ni+|qlL>0VJQuy}pxNiO{r&v`L|~wozyApx$2T3Ki=61PpV=!pxDp25 z>`HYn5xgs67&bX+H`({er~wv5!BG2T~%Fuj4Q&Z|8ug= z4T<&z)dtXS{BXlzg4W8=fzSf6y{>Lgu ztTLS?lahR0EMr;T_U{+|-~Kr9|Lx`fZ?8^}zw7_6AN#*}8vOo0ul4VeGLFh>$1uLV z$b0uqMltK;;q(aF-E=2)9DV-8TAHHqtXxw0eSs^+=H}-bf5g9SNf z(F&~?^;hyaz(^e-_WVteDFl*EnG%=Qk%T>aWSIHpiilfEyRGx{{d{~QYbF@pUM##FfXGETRN8`weKoMvL8idOI6M>vX%-Jy3s+T5+Acs-9_gP-P&z`s}J_wS_9 z+N0B3R`sz3R}dRk`TLatn{>wn<+M%Y(|&sWc?TAL#|-f`l=U#Njgiq8h^rGAN=Zd! z4Mko-LC5KunHitAx3~4r*R;F$?0J-xMGek%!hh>dQTqYy=5OE3euSS0XE#P04+sg7 zH#g@G2?_a_bdui5)zuVeGdExR;i>4zNMD`IGn|r=Y?O|k9$z%CM`+&4y`{v8G&G1FDYt$&3TFHBc0>>M;%MdjS^N*g|BMXV;){ ziXJ+on0e;0C~h&?|K&ucN81ZW8q?Y^1uZRF5@>jOQj*=71ob@edAXq@B*X||*>^m1 zIzvE1Lqi-*{&~Ac=4X$MarO$tG`STb-p6jr;L2CqULK)@2gQ$idxHJ!jgdAfRpQ?Mb@%Sw z1FV$=8`jj<4-wGKHo`KB+jOnD#y zCpf@8-RJF+l9S6Th>F#gt^xegDHJ1b$5N; zV@tyJIQQv$XCBd01TPdbR9Ck!o*4Q1nDv^aW#qHNmPCtoYAKm`TJPhdMr#2D9zA+Q zsUzYM(b_Mp92^d@v9aBXi=&|^KT=V9X4!fO0Li2|*SPQFBcHYp0&BG>MwXVLH*cgo=cQM`6d&|#!a$Ri!#OyWb#QUA_L|H}4u4oa@mn91UFt5qT1|Ni}Z)r}L1iX`_B zW)@Kdddwd_t>ZLOGSe|KLWE1$5Aa?K2Yo__=eaL9%+AinUwV7D%K{=n^$8C5n;uK^ zt*58g_jiAQ&L4Yo zpEz-1c7DF%{rfG~uV2^8Gg*fxO&yCaE0YC8B`V9y!9Z7C{a(1wb9~etNVfT<^8s9K zJye5&-r1q&?c1=T&)Zx!zXJ01U3w^L>|GwF`0a&bPDT3#vdX(`6(c^xN(G;Pem&h? zikDZ3+9SgU^{leGdL2T)X`Tga5m=trvi+GQE19n#7X5ktLAJKGM6O-`=UxYoQ#m~A zctqq_@2f_Ot^!A@Caca=`%rgnIJbnv4uE)w1#a<^J)b^((&8)o__M1znBs|`4=ksl zkYdE*>=>nP4TqO?yPL~o-7QWz27@)8AoN-KMRYMo9cwIdN>c2Jj3B5Ab@h)C^L_2F zWPaKbM-mbf84WgX+*nrTwT97~gTf;1CQdFd2pu$*tBs}l!nL0gPpqO?y&UuVu%w}` zu88D^%)}Qq-yk2IaTr7%9NNtOU8(y5g|ae3tn6JcBRjY8HOK^o;_$oq(ey0fyy=f( z`@WU}0XH`{{%iFgL4Q;`Z|o+>1(foasW|;9&SU=MkTkR--R9>RYH`v#ZES3!rQM6a z)*>`Hg@uQYOe>3VCyvWxqwYyMjdu7xU)g`)PFa;^ixd0J`CW-8!oR+qQ&khoVb~!1 z=&lBGhf-EkqxhX?QDSdz9AiDA-**EIds%(GhR9Nu^6|2ix4c9sgqu~A&tJY2w8&tg zQJ-@Q3Vc&jQ$M&fq|lfj=*iq~d*epL!-v!q{u5mrTd~oZ4wEedjhR~7+Bc8f_$3)7 zUAmEmUD7i(b+7c|s9bVWP1w%OsK2CKrqe7O^|rIS+XriNoac66tCW<~KD$0mU-!hs z#LoWyKmr7Lmz31bU?!o8j&h$*C9aN8MNWJd5fft+IFnU&-m1jcpv2`7SP-c)W$PCu zJR5nnvV0Ub2?k?lT(h2fTk9??Vut$Uj%6~?8yXm(@Mxdq;E|SQ@9gaCYe=U@SSQw} z7*c`qlT2AtPcOiCGxHgHN5Wu7^^^TRDB;PWy^kP>Mu`~u<>l?e7ksc4rf6k)#dds$ ztlF|{4kk)Kj9W*!_U(y6XRz7z>)GN#axCB0P^PD+DRma>HvRL@KMV#cYHHOekz+`I z0afRWz~S#jK8WJVsw(-#tbES3?E@*L(t{r#$x$dA92|r%tzL@+I^w(c@2lrE=Fezq z?pkhXX*t(#&$&yGpZ`?hp|z-v;ts!Ac+?*TKo+|C<2tmBGg*3Gs1nAtVLO#nRU1ks zTpH4}xY6=}#H3Fce18w|>{;{Q}1ij#1MxZ3(m z2#j^>jT<*8Wsw59q};c5-MaFssC~>~JX7V~^RGOl!0&IO;M(G3K%F&;-kf^DO6^!H5<72_)exP?bnp%QWB2p{^8i(=oC9U>qH8{ zAnc-t51&9r5S^gVL#@vfv$DG8Im*k+`@TKhd+pjaBU4i{W-=BZZQ&J}6^u}_%Q(6_ zLW#j|JWj%%iY`z-%XPBNbtG_MV{a+Q`fj>S_|idj*M*9q-&Ya23&zJY#O6)`dI`ufEyMO$fI+lbka4p*A={XnR zo!xYS>g!@Sq}_PcH<^7(SZCgtu?`xelZ%TQo1Zt5q_7c5hO}{I2o=aR@FRPn4aO0OM^-c)}K0ZED z50G#i794ITb)9?nIwAhaDl1d5OFDT1nNBkJTTD|g3PEHnQOyfC%xFO3a?m>4t zMYSCIC>h!HGAsInd=dZ~UCLKmLaO-iR0tW05wtdmnIn7mZU7kZMv8xCI7qnX<>k@( z1pCu)@Rux4^40?__%=~dQRTYL*&eiP$*&-E;|d@yBPNWYcBKyb6!YrpGO4Pm32HSlF#$m7{QWy5KmXw3RFh$sMTOn53+Bua+sn{_NDa7j?iXv8 zLCFrQk|`!z;>L~6k&*D1FC_)_3%4CRc1-Wtwe6)V%dU&F-Qn1xD%AOid-wQa2eEjF zzztbhS-B8-vd%x>O3G7M^iPF0rg@rVG;7(%&)k=R7^>5y68Xg`Vot%_cSKkWEt{t0NSjYl3Y>O z%JKsLj9GiBlwvr0D0&eIF(sxB@bgoVofu{1`VXSm7dc(_=@TvXVRmt%{!^x|h%d*r zI332gp{FQ2A^l%cxp(hg3zUq=l7sBCjh=pujEv0WV3WpR7~Wd zbXsAFSj5cle3*#}`d)0mnOGd#09DodZIp-{e`E#v&7fuqYU^euL0KD{eFhi^6c!hs zaZ=UOBUsQ~5HDFz)Xytme6;4C>UyYdG2xAO0gGo1wz5m6P0pj5R2j;!ezf{tNQ*=n zotg31=5Nf90mlqt{bs8yRu;t{;XH#;A?wIJj?$YczS% zDK2bW;mL4O+jyb?OrD^^QYMRzp!q9lX!z&kh^(h(i66cH-~lTs!7nbl+3en~X^?pm zig;6#Zs+`y++5GNxVSS@u_Wa)U?}mI!JZrkK*_Uem;Tw)6WFQ|CrtuUYBq6A%T-^I z2rrkWTVKC@TM0~k>z{wTH!}`@sV?UZ{c zL$E`;uX^b`fj)uJ5*SlT`{9uB)JWvp=;$bg;M22~+G>D|DqEXOD%U z!;&70EXdqX;#*8QD||tsYGS2a8Dejl|AXZ?-0nt?A(3}n90!`d4S`t}xn+*S-;d#K z>#;5cX!jsf8C_4^?>>Ki7;3)X@88#|YHPU>w~ixijJjuo0|Lr2bTTKu8l>xQ{j!6N zjJ?RSV=BxQ2Xz3O*ri;Iu$3lWz2wcvho|&tp1)1DQ;^d_#}RgNwgqt2(NRwLM2lH4 z;nO~d+u$$7YXOVdmw_C}J!6q_Ifz#3j~Ny-ij7{8?H&oczFka0TdAq5JXftDY3-^t z>pObmh_7$2L_|gTCnfDhY7g|dd1Lm)p{1ool1(VrKA0*Rz4>Pk1`Bd0PoDIx%{f;< zMYehZIOJ=AUdk8hUUikaabWUm`II9}b<#0)LiA2Txa^3J}#fC%mrU6^wDX!9#*YThzf{;i^- z5^?8Fl3l0;7h+LkBq%J5Pz2ZO?CDu|`t<2Bu_FC2Pz1>7r&5jTfu0>49F$vq8Nc0( z6pP!F)iGxm;b3gDLC3c#CMKqOUYlgJjb3e)9O>FrhK7befBiC9SzhXL=v29#@~EFA z)ryMiA3l7T3tHh@k(%>rS>mqX+12rG19AW_bvHmY2qWN=E}FMIJUp}WgE^mGI9lDg zbEi*?^TcOmsZtyAKQV9Q$9i|6xmO1< z3NVirQchq1xcSS0TF|jp82FiQuniE%z zOvEkka6VOfm3TgOYSOmfX9LX{mkZ6)zw_zsl~q*8?f?l|@cc7s0|SHHXV3g%Vs=8l z7(;jD!lba>eJ18}-j5fKwZM&?y}f(=%0Ph+U@YbT?dg>@yc{u4U8c;*kuQj~d{g#? zJUnxrxQ+eg%a{F_gotxwsFHzJQCUe2QA2A1@76(+mn(6Z%5@kz=X?Cyz{N|KIQQ?T zQ&dz`=01|Ih0)CG*Gh#&MP?Ta)1F|eBP1+AeiRwMjnw7QDn@@junOw*vu+m_5~@Z{ z8(q5Ot06rnFXDa`NW#E({YY}cK%}=JGBJ@G!;9)-8I4%Ua{QK0>8JMs06apA zGMVLWSm+1YRWEpWbN*~ST}p#mtmO9C*jVKiH2@abIr}}^f+UWLi>FDZ77vjjp>u3u z&lx*WL8AHS<1Q&*#hS-?y5p$i}`zdwHZyIyLk>ltpcYRnG1%^D5^O6+`bB90qR0&fJQK z@Ip_c+B^t$z(_1jG4D8hJ+J;v9b_X$o7&40}hhRDu%FdhV5=Hy0MpS=gzT4 zUBhzR6W6G~z>>gJG>ni^FdOYC-!bxK{-AY-?C&2hn4vC#udAbi zVAWWhHa6B>OGbctjKm}KMv0jrK$O>S-Z)>+bdwrHCitRis>ezO0!iteJC~rFV?c^w zv%Q=QbLuK8mCzLr(vM<|0M5jgTOX-}N`MR{4E!v* zDFfc?heigm>ej=DAs;_#{`~pV2;06RN~Y9#f`<}s*-AX)Hzb!7_6SlqDJ&F^>kl8!u;@&3sX?ZCaM-E_cZsHtEJup2a&YB zrNCkgc7$$3ocYZAw{PX#+$1R-GAnc8EtevF8ABUF7t^=K4Pgu{3IM{J+RUpd&*jAazB2TUD?H@m(WsTeu(&6lKu=-0FyA%r4nX>QS*&tSt zWh`N;$k%@p5y>}6Ei3qSL2__O^6i^9C)td-oMuNkKY#vA3aZKd%HbR`H308Au>yPd zo-nh|3fkCID(yW{H_)8Ny>+L=P1qgAM*Kw|KgQ1|qYZjO^-Rj!JBQVN|Nc$7K~OHQ z>S$2$8vf+kvu7O^72;#j=fMmrC+J=Ttqx;}#sb~OFaJO(;8dTZ8`zP?y%?X`&-YmL z;`tv@JUTb#;-pd!85YJegH#v3c+rgz7q|TxP$n?-VFr2f0wzomFCW~ zZNN|apwLhF9>neXwxRZ=M0|!o@uT16wu({fhMtd&*s#bdUltMJ!;cLyJHV;HI6dMUNv$YgRMGD_j zLP0iA^4}HM(ctJ}tNSTOPy$jc)Du}y*~k=QF{?JVef#!xwZ8!t#cBn7@y-Z_qPU2LPw?yR zhFZb~n6)8(@rHW~Y9d-L4Uh;728odLBnkvV=KFuVc;50!_dW>&j~tovRh#4I<&`~t z-23x1>=&l6NnLHp=L0buB7UfYIxjCyXe2Yz9yoAdteV+y7sMRMo}c-yet8b&QTgG+ zR#ZjC!KIBiiDDTD|HsdqVFLNE&zMPk1LC5UV<1JEW*|5Qi*Hfg)!>%CWC1rn^mGt+M0o}RmV z^b0Aq<4-KYb`Z8m54!BZD*~#PTFk%t=e4zGZ5xtRm?OW?;iipDtD92qZ;NI*#ag3S z9DaEd4UMjzjt0vno~)O97mKj~T_dbwg!#>S=><|4uEE&h6LuAKud^;vz-j#FrgP7) z3o-RDZWP!d_4eI6>gDC-=%bFpNTCYMQQN$nww<3`*Hqe4?OA$E8_YzlT?3+&U zb5cuvdii|?Kxi;ht{c-BUS3|!`}?&UNrr#%4P6!iB904@po(hqW*dwoYzBUTr`$Q7 zOAd_E(l&5<1;oc6GL8~a z1(9M4^l8#%0Av{u99)So>Fnt6w0gC4ru&YWr4%>{3PLTJ|DAB#Km{jdKuDe-NleUVZ;$)HJjhxD7YwCo@YH95e#ecOk8 zoWyc+I(7ZK`0wvU^eBz;m<<>Mg+UIBzJI?9Fn}><4;S>;gpBF$6|k7iS%G`TOOB?! zX0>|hMOM&VyC?^)e9-2fe+dJUr1SXNLx&ETN40I)xKZXhmppw1OwC$y{`QTj04lyc=uS8Zk zRzP6qa^L(ns%kTCZf>1ejp*2TAyiMwN><%?7P?lSU1?p~pE-usy-RIRpFDw~Dl>nn z-!fz1-OIUO53KF%s<6K{LoH$qjEvN_MlhlPgmxos7Y3J0HckyR zl2%IS5I)fJP(ar}oOt%^8L5&$uT6e(Iat(vvfO6_*}GdNGN}llem~cl;YYw~UFK%R zq~0kgBqYEn%s?F3DijtPU_nQ86)Jyou*sXK2{YpXonykaICYX}2=5{`e1$&Zc>?PLf_txEC=d zzR9w`5$Xn1OL)%CoYU{@CcaDi#iI0OcXIe_w@x=S3o)*RooOiH9ntaL@}HG5oL zT}eL=5XWhk{n;PTNlC&_N;+K!6H!>vI=HyG*8omdqd-)f$wQj`({E#99$QnRIO*^{ ztD0BL+`$I>(;L9?0@dx{}WP4Noz?yR%m+` zsG@Xv-a^peCCjOFO#P~xBvEeXAQ0QI52RlwkOy72<($>RF_z?^ZJQid6pA2c=7x;uPV zKgO@ZFvJ_0CTW>Ny(gv6$P^zb%dc5yH&Rg@$KZS$GqZm}0v85^-RP>(hb&ue47s9L z)8a>iAfwol0fuH6Q=b~@Ps};5rzQ0x`TEnCwTzW-;E-(Eu#Tj$@*?*QQrxwA-rX15Ok#FY zH}~}P%oyI9{?T+sQIACh-YauEqf@tAJMu+P$M1WQZnuma^TXr4m$V>+!?j7FzF+4mwRJF8$;alrN&8>}0crAZMGFiCA zkSbq5K!ayVxsVvu>a}}ZO*o7%?G0DetDfy$WQ zAv-w!Y}23HB(ahfnAblq6;A!!r(9QuUHI?U878lD3#zos_Sfv(4)K=9zOp`ZW_5fyZ4fAo_rkqc38dd%zpwem2+{FZbqT|X=&VKrDt zZNa+}J7(Ss2q~(c+(aom$FHF5A$)55M&q!^?I_NtY1@)*kErgZd!}{lUzd>f5z@oM z(z3{iR)5C+aG%xGfR1EjmPFkfK90_dmX;T)r8wov1_LJv-zK{L+tyMT9!yn{MxlGd zKW61@#JI$|R{Q?>t@6btco?trJeyE9Gm<#qwY$UA?(atZS51n~97tT_Yz+|W`G&-!BqzH)x z{tejHE>iGcC!vV8Q5P=v&I0-Qs=>g3G?#8zqr{*DQYcWsGP`0m)tXY&SYb{ilw|(H z&)78uQdDB|^FM7typ5{otmEkYH%Q@!r$LzhyG;LAo=xIEW7_T^NP`{;dZfSz=knE-ZR0PjGN1?Ery3K;u(-s%y&!u2mQ zwcqcA(HNukhQe^@>TvQ_yM9sW!e9lnS$WVQs0kR0<#{Z*C?%gNsO@tJ-?VviC0gz+ z0+KvF{|JL+mP6NAFvMh-e*5}$8KAUv?}we_xd|zk$uf*5j4vk5>Puj{3%3SI1Bk8M zT=P-LHK`sTNQ``BL9sq!eom3q)@A_9-ipZvpiEL28 z#c%wgCWJ2(uf+$^iul>SV3LNZ?y-J-%tuAinzUoSwX_7y#HGT@&9^9x`UOOw7$ad% z3hyux!>jgZG<4K4`}inegRX(|I#RxEF#t@!YQ@7_puCbY)^@SkV|nfhrDrA@zm-!) z#;|+2xXlzodN@IT3^E#NkKcdb0BBYq1WVFHbNB9DiYLOK)Gz_cA} z4)52mclUfi8+fk~G9HWK7~7GqGg6=JEC4h%0?ihA@<7|CxuxZdlRK%JL0!wu%PVI# zbmNrP8G(%hUDgMB>SFuKQhRWpu+C}FO=}w)tribV$SATPwRaTVM)Aupzl-*|{Qf>E zAfhE#fNV7kXAVmJB2^rhNrD%eBuTiT|5IeqEOVi&EsoW4kdicI7boYcnUVI|g^^b@ z5Pv9TAo#(fqt?Eoy=dsXfNk&*Of8??Mq3i1H{suBb@=*sS(uez-$@aD`2$Bdpc9h= z7j%1FU#X;l*OirWe6y=O0j)@%gyRU&_SoAX;?WD73xc2hV~(MWZ$ATm%GDpmVkEwR zdx`%yr;hHG`q*_8_`nl`T#t*KgRW4(UY$HB#RF9w;GeX{uq;w!F%9_yfb&qwl?mWh zcFxX>LY3%z|Dc&S4Dn+#q(p(Ch^XyPB?NY+tyOdY5x@Z7`FtxX9;~G2pPzAg58ELH zu^+?SvNz)!hB0>rm?^Rl2uMv;&VOqs{D+WR)4kiY>?0v+L)Kgbt3plCoISpK+pxmG zur9hSHTy~M0}b*R4CI+~>c`GjTwd8TENTnSum9NL?Ch*`^5iN?1A(Jqlu^hyfeX9$ z?oA{K%E+2EYd*bnzJZy+RQs##P_D}0o=*TkSmjyAHyRP zFDO(2ucDNb$uypy8ChBFs??}sYrCIxh%L7P?t=l>V%Gp#D2q2lx|V|MY=*xRMZ4B?oBO35?Se4GD6#l@rBS-!G{WlCW<%AQ! zhu>d1(~|=aP0eknKUMP^CT+*Z#*QI`KVmb%8^}9j#!8C*IHcF+)V+m*lPa8)wj8Cy z5fKrv5chq3{Gh_2?LpsJR2K@(|n#A&z$ zL)2eV@mrqlrh%hm7tRL(QM1T+NJ3_L+%%&sKl#K6Hu$6yaJ0blx8}){C**NE-^fz3 zPzI%AOiLapf&Yfo0!U%Rquk{U&UhW~oWWH7>gS|QOv3sB7|T`SKuS$bjZVYSj5p+L z2*o-cW*{o!ivl9ViV*?JJdmPd9i-HnYZ82tPJ;H}Iz&AXAxgv>qwmlARSJ&x_Q-96$N|kChC-_>KWRl@XMg zao_1c^YxerlV?s5xBlVbH0x>DvnIyiO+g!NblFZAxD>(Syov&E!78N1DaTj)_wPSd zbf3QDVYWd@5LUwOce9r9_Tiw>w#jikOQP8drWBa0RFsz=vvkGCDIh$&mb9xri@JL^ zV^NHjwm*z)1W?aHQ3$&ryHIIFg1Q8xrSX!A6y_{C&2kxGm??}B@NsrQ7eoIEKlT1@ z>K+sU%r^UHaaaXYzw*jTpDBF<6ZqRS=X!pTnmIZ;NM7}xe?VubA#gr~{}uhQs}yyG z^h`i?n!6Mu&!{%nRT3DB-AsYwqN(DhVm*J-2FCgsTYC2^3=DHS-Vm3`Mwk zL$Nyf=8aTPcjV5V-HtOmm{qT}u&@YWJ*@t{2?85w21oAX!Q5&$(69-$AOMe$oV*9~ zDjnaEn;EyUTbNZPV7$<^vFXYff=AqKHh0!qWp)KV0;7xC%YsfnUq_h4CnCrpQ{|Kp z(>ut~435q{0yTVHS62bBM)GAKtMs8JjMk0J&4X60S4+weI3eRv@I7JT zC8JLn2z`IVPOte6wrjRS6h@m`Y$>A49~JAu+K zVVs7|I_ZKs#|>>m+O%zgh7@j%(412f$=&i*Nc7LIoqPGCw)Qda^j=hYdSja)CSK|; zS8iV3%4D>H)o86BY0gG$Obn;2tQnH;ukDsq`n@)wxU$&X-29?lM*g?A5pUm~J7ZoQ z^6S?vayDswEOOz(eUVP(?r$IZ`i!y9fB&ACn83tDvSw$Wwn)g>dCIHRlA;psytRzA zxp9N^#J9DX@8Yiowtl|2laiK3c<$zx_f!gdm?Gnd^|{`UY}~sI0|gce>Af}1ycv6vdD<%4?@V_c|?}~nTC37T8KTNo8Pj}p7jhKRY?4xkq`=QEvqCOiA zYqQ;C6f6?&EALG|e(@swa1WVQxN<3?&9K?qUD+$gFt5<&15K`JDJktK4Mmu!6Aa<- z{QD0c;QQ{(yt$}(+!o%v&|}G5@cKLbWR0en(|U#Q_)jk+so2@s)h=Id`20dr)V@cs zRDGy7#^mjdqZR}0wLGJBh(cpi6JAW@>}bjDr$gu8-u(JVnd`z}8RDo@=kLeE%gZe- zZJIgvJ=;Lw)!IT%L2aYQs9*5aSJKJ1zh^Xtnas@0WEvH)_vBrBvqG0YiX5`JySp<- z)A27Mhr1jbOQTd{qdt2L50AKPZvUS8ICUkCRo<8Bh2)(_IXMCeVz(buSIe5!`X1MM zE!z+;YApgYn75m(;fZ)kQL@X1#0gz%{P5wZs;a8m)vF8{(c4>F`b;*4!Iz(&!p?N2 z_m$t_U}a^c=HQ5iTQ)W};@kJ+cFdZ-lJRJHKt#5@-fLk!RB^X)b*w#BKuuFKC^eNk zPS_%UZOF*nizp)_V{3al5if?`)lkCfTYEbx+@vMq__^hkR)m9_lT)!`ltb1tAU>Yy z$IqWulP!_X?(RK1`=0Ej(tCLAafZ({r=QDuxdgRR9Y0IRC~U5*sEA<@G)~f9^BOF3 zZ2R!xerzoL&c;H{8Z#aq-jz#V+x!(N*kz3epCya-zr5m>LxQnYXoDv{9Io=PZhAyP zLP_~Zji>R&omwQzz-Os?l`V=?ul4!6`)3Jm+_zbQyMS&RwUtGl!^6UU zl*v`$msVBDSXo;iV`Gb)>n&*d^oe}8BrNMOfk8pzyGwPwQlD96+yxOzR;hrm^1I|8 zyb0ghDTeSOm#HgT zJ3Ec_^%$B^LII=v_rI1celpl!JNYkzaJb)?28=%i#~P5!*!a|y=; z?dVL|{=@0P@;i*WQ;=Fo@w8i`*rxE4rf1Y`#Sh2TUm<3}5Wc@uoL4^+iO}YlzYNMe z1A`~q+uJL2n=?%Ir!$DAlHbA{p<;jkTFyr-e_DCAdp1EK7He-GUSF>m|Kf%9*Vl4| zZ{I4xUmfq<>^*&axFsbSxi3ZO%Otw4&vqMEdy3A_&yW55`RJ5p0!eaIU0q#!?0Z*i zW8hJ0BvhG%oLm`Ze|&uWJ{|!vABC2ztnAqQyde3dyv%QJrB|oFGLi=5nY<-N_f$Y} z*Y8Nl5yi`wkNW!heuH$m_N#*ca$#SspA4*+@r*>QsJOU_ni>hD{y->TmCTCW!;D<$ z$NR3h;{Y9c!>~x&Zd-500}Nujx{_~E7v(YHbtIBSQWbUyySy(66&01kXe}GOwSGLM z;Yec;*)cjgLSA0p_pPm|g@x1v#N_o*cSL+P=J^+VpimrRVj}VI@UXG9J;B9=kHumk zj~aUKUAt35G&XwM@@rFXFQbL;3K7O~sy)`Y$O`^3{pFQ$DPl+e^5skC&Bg0b1Dcwe z2w*E@Kk-T`#NY>HO!6bI;F*U}(Fvxw&3znFG93ZDPx(`ikPpjj3DtTFu=9{P=3%Q70R=tnIY z9q#}8<;XwZ{?wBz>75CSggTC~2Yh643=HDK6xox%*%gQ}BkF0i)ro3Gp2D~@9~OBB zi78IdgxXa|Dl4xErY0<6bR2Ko;Cb}CuOg%Bg4@gYYUG&eXKK8j3b_1bbFS-8hPBB3 zLqhC$ukQXmX0E^A@y~nye}2h-e#d{ALgas74*!eW|F?HX{>NAJ-y03G7O$h}5s)b% z@I+0U2iN5)NfOXkkKw{)!b1KPn)=fsdna_86lU=wA|vhJu@G8b{(2xHA(lJi^k-*u zpNDAe+Tvcn!xYx_HOg04H?Vrb3KNiSOn#4h9g9;o4Z9RX#D}|r<)KN&%F&kTTwr;4 ztwhzZM=68?nRVYHlmd#0AXXa6?FWV&O-BYuo{ID4o~{pV54HQYih|J zZ^a=G)s071V&}>OUp=oJn4`aZ1^0NBx@TPj>u@WiY&{R_kSQkOH8s{8PPjOR@!^|iJG&3Bw2HMx`^o62lxEu zNZ*LoEIX=Q!M>MP_;ZV|K{)P&4^FyXV-*$3(%|mv!!1% z*6H$gYF|I9VICv#=SOPiU~0vZgztyemi$=_<%G!+;S|!eDTNC#6pWjUNXN5(Tr9)7 zt(4aC^a2D#1!34B^w;%p_ z9zQx}<~S?S`A?s^+4ZiWUrk=Vj2qbhk9p)0{}dU~y;zWk4hk1{s2uNo>Cd;ZP0PWV zPwec`H*O1ar2Q-1=}g_t@<_Ro`57)R#hzx!k=ro2d-rZgM1-=22DuetZH>d>@G$WI zxywUOp3o2y5sh!HOahg-aQpUY2M335>FSK1UY@5dD=TAOZ}|K9v)6!-XjbQ49<7&HuM!) zLyb<>8T42jYDl~MG;s4QCufpw!3l0|0(p6PCTUkbpb;4xee?4U0J2V;Iz=ohDypWT z5va`7@Fvlpl!Jq#bedhpog4~6h1(oMn(k>n%^Nug5|smkFK7c_|B$ztj$vCsl!opvJH;Z zkRVTH)WXyQw>U;a^I*Iw*q-%(oJB%osunIeAtS?by~;gyu-0iNAq>>y5%LZxkV=p!=V7G+xafCI|nhE9BX(;9p3z_D~nb`Q}Y--eUNbN7JhGm zMeEH(Kf`hH+Wn1dHaBnDcbNlV!QQ!3P*?*u7;t}uZkbtp8-&_a{U2bZN{jzk$Vfc5%4~tZ95=;(<=8ssR(eTDq>F zNipHd%F18lr{~(8hPGd$t&=rAo0d-bwaXq}+48y5Q&ZzVK0L()05>KZJa_KgT~I03 z76uvTdh#Bs@gR+5j)R4_zn_ADAcke3iK>CfeDLt$%3{@$9jj`046NrQia3FBO_d!2 z$VREt)t6HDjV%1=L1ic|{MysQP+MEeB;gQ07<2Jn#WVgyE~={rTlpIN)n^zCG8wjSS4W&z_~Z6vf)HwI0QKUiZ$WRN%2mX=!PH zYMB1quj-#)gUA>kKYpC#f@o_$rrzr!mXMGDnvFb)jEroVmXeWa>hCwf?nbf66#8zv zm{qxJ2Ft}fd-m*zfcJpSw9R^~|DYYjizJ?~U_RJ3TqG z7|FRCpB|I>W0Jg9f8P3*bRm65Z)BbMZjG)G*KVG@%0KTZ#%92n56!=k4FNm3|PdjgS=S8_WFncaAQ7 z0CuWhw!J*AV(t2>9Wx~3*E=TIwAzIp27vyK`ckH|&^BO@b0(-M-VV5&>7*5V2I zZe#U$n0hpGjUD0J?Oy}7On_kA7Y5RQ?}5UTYhJ@Fbgk??T)^+3HQGNo*!!*{1x@Xx z_pdf_^gmun^xwHWB`V{w7$Z}b@%j0=BM^F~-RDE1qX7#0(r;WjPw=q#unHd^-}&%h z-|o(#O2%KME7`to?>8C7a&K$JVBkwf>Lol3L_zG}>lZH&vLpwa#EAK?US5X`HS+#@ zQUJ|KEi5d80lV2xn!q}EG4&6RQ0cS3g&ac1z+lypqVl!(LX6*Y9esTs$+MSx zZ4}g@DC8FwTq}1H5fM?mcoDy|voq#(o$W`4p(+n5^*F(-x0}j9qj%Qlf^poJ_~%#G z*Ms2sEF)giY(ajozf=m$YnFd?aAODCaNP8EPQ!Hw2QcV(aeD@K1%Gk`K_Xbs(=0A7 z8kal0ayGkql@eZbd1tO*5@G=r?MD1IuVZHu&q9^(oXaa;{{2z72}n#hqp&JaTH6s~ zsJtos>ED-c0`n7*kZ4&Pu0mpaf-h@mz$6o*RgIEO`d9G`<3-@KqCj-$=;$n)!|26_ zUoooU()5J^GTc_`g_}9=@3=8BGpE2bR(P$Rl5iX#R8UZG=r2}TP*ZhGOHUskD76BSD==aUd2F082bPCMnTz`GT%gV}fv2ciqizDSmZd+Sh z>u76p&im|biPF%}e1qZz98Wvdos^6WRT5dxyAVPJ2nr4kUaozUmS*|;$A`Ykd%RFA zzU3GRLrUO;N_)7!gcSK~It9(KNjYO68-;|1UVt3b0ha)0o%}30O1Ef$F2KOWH{;Qz zrQ(k$*}`IC5V|0)4~qREoFJLPUe2z$3Np}*FE2x3BR0H$Pl$@8K-3EFO<#ra8umqx zjaj1E)6mcmYEonUeS#oqmanE|4#$YuL5}zv2Gzx-$jh_Oiy+ZRQm0fwfMz-`1I+0Fo%B#NL~#fGXDJe z^H*m&szrz;M7{a!BjdN@3b=K?uSjX;;KvUe_;=o;UvJXWPjGUgJ4yxiIo8gOR6szW zqOx*)uAoj8i%o9n?FUY0J6ix>$J=4is+qt>lUdCLJA}##)8LJ=*m2^edM%vS?^& zA9}CPj(gnk$J4fWBktbbm#Z)q8^K8=?u3Aq&ey8>(dc1aJ&|loKT=a-DN@ z^z>Lzr7!`9dm!^i&kR+bYl-HF2DvrTFyOQ>6wL)>usk?1kpta$P;$iXjIe^{vbEeq z)d3xf%JJ2&*`b>oCa}h+c1z97ObYu1RpswawlwO;UwBA7V-v*j9OZY}lPFr$F|g6g zx6zYVjb@L8h#UtLwzV}GjqZFxV&d#QkDSx}!3`&r9`ViRfS&&o`TQcdt4m+wrPMK{ zN8}Aqq(!{fZb_X#f8yjxqWkyn$AgMzMhyuf>AS%e$g?6&LsHe7BRTv1~l8;T*1g^ zaY%t+f56;IqgABz|C`f+d#0gZr za&UCKyR&vX56Q?p2P2ALk)%9+{5Uh4Fd1HfStXal(|wbTRqcLxM^#z8dVn()K{|#v zzrJn;1TEq`rl|4!tV+BU#oq2~BMv*(gJ_-i}z2e$Bl&x*D9KtGM~Br4hbwN5%b+!X~hHpZUN4sS}x3F zTj#5)tV~iD=nokIP%ia>57aY^Vx~!<?Wk4U0%P%aHM9~Wv)_?m(jVk)C zt|h8|pW52$LymDT1IGf1nCsj*S|EICYHIcH_TS!UaqMkRC)(9r$VVd!L6yW0PkGV3 z`u@GLva0F?B$!5idjQ)_y%tE`+l?z}x=g*}D51@~QoIZaHVJT!F-XDMV_xq=jy1Z> zekC3lKtYJEE{&j&kipdx%(9*$X!ih}3+tAM`-zE(+T}l?tMuU2D>g`Y_({2AD^TUf z$C2^-5X4vjx6F}YxoQ_K;OXk>y2{(ywmm)poD^-8QPa@{LTRvq{Rmhfj=DDMEmVV- zvR*V$1h)28ztWSQZf$9?g2aZdh9UQbE?l=)R{LoSMU&*4N=i!TrK5hEY=B4}gD?n4 z#tLFfWN&&@cN^(_85j3R^Myn*AQ#iT0dbo)YK;W3qj{#K53;gOqn#@N?$(eXGA-)l zq4Ts1lQQ$eEj=xb^W;gD$=Gs;aT2JZl{f{X0`s8C%JamOtRa9>`R55@davjU}@eheLrjV9>SOiQ`36kjvsDE~^O9N_Sr-C#U0;v3yMtnePGzXbD zTL7XUmBkWOcXv`1q+Q^xc!2)sR68;CFqvT}QNk=kX&qa!p8BZZu2OrjW1sfsjrD9- z7G&hSA<4w3s3;Or(g#67L=Y0eKoy0fvcuz+F?G^Y}^mfC{6 zOKn9fidz&-*a6?(2% zp+DrpkwA-}r8%6j$a(xCns3jXp+q%zAjU=R3#Mp~6#zW4h`ZccW`iUYoxkz=m1m=-<4*@!otFODE)3dz0mz^Y-v$- zBFfK3#(?u^DeTih#%cmQC~Ebd1Ud+40{hjGdIZqw5sZrhRd24zLrB{|_mp}43X6&w zKr+L_On*)6{UBayYh{JfCNej~X5An7B|gNQ>s*g!=C0mzZv~A0)zPP#S-WfBwZ?z` z%veqo9D~Ao>Jl$`$uU{Swe54 zugviU^$k4R?_59}@gQ2q2mRdScjwQ|BmHlWpyYsyo15NH(#z1@;9tHAdl&a7;XB9o9c8h=p`5D-8|jR3xj-PN`*p_qGK->2=T zYRW=DyMH^CE}E3Ai+#1a9Z>_g@x0NWmX=n`u8Ra(Tu>iyJwZs|Nt#e?MtewBrmwDP zYX{t^+h;&oEj2#8>JhZ>IT0>w>Esjzy*tPfEPbW+jOHNHMo{9T!!oRzE; zJOK?j6;Dqo`K>X6^wyVhJ`4hexdG76LcxXWY}e)S_=pH{(3I*22AI{KorxXfy>=QA zl9y)(l!T9o%*Y%8rV<(&3Nk^A>c>)r0w|M7&>fR3SL*6&@X|MkC-AuSmh5G_CO0IxT zf%HZCy#Xa02=Hi5ety!RpddaWq3#Ovn278#0|~n?!^3Ros(aODe4j&=4!czTqlov~ zulo>bC=dbetpcLQ@87?n3FJ^Z>J259K(T-MjxAKJZyA~_sG0%%@JbVht}Kicp2kE2l0@M5}Uv`bkF9Spb)xDmT19~N3#0+80Af0QG4MnFIv8>nc@6vnjI zWy5mxJe5vLQ-Vahv9U3V-YSs8+RoEz@Suw!+RqhNI@1w#w9oTBL$fqrs~DUNkmaz@ zPHHTRiJ_}r>r@wkR$f`@ol$m3uFW7RVzD~+^nR6KZEcAl@<1077)B)wUnrEA0BB6I z0(~;{sR^dy$R-y1Nm2fW}flyMYdoVj9DY={2|cmr|qU8^LO^0)1k1tzW->eI;7paQuql zpdy=rKyBBWj{r_h1k_cSbZgK$jEilKnq9w+Vpwci{KJO?2M4=%AoCkt=4j6Wp;*3D zhX+@m$*gMb>FLQSB0>$bX+Uy3B{db%F*A!mkvL@2&YgkcV`zEov7`F{Y9h+#G+s#? zoM;oQ`{A}-XVl6^f4vf-_=>uE?4uG0t}SqXgoD81`}+g0ox)>D`yP!czNe@{IP5X1 z0?_vuHFeV6QOFor$dS;$we!7dKyvhG1N4?rakx?&QSF|qK@R0rBbkYyepTM?rN>=K zZ?uaAnbN2Bs=^U~=}=$HYP{)T+FX*2V6O(gQ+P*-z@URbTbcay{2X(z!u5Bq4X|#` zvt6gLD)P@?zGRK`@1a3OS>9K@dpNLfoFykGFT^$xqy7nyle3l?Z=0|sAZu%`v8`>j znm+EOl*bJO!ei<(vhU@5d>fPq-O#&pJwm8D)NN$Zy(J9__{GTZX!#wrsk>8`@NH~t z6!~Mb_qDoXqw4Y~O(sLg1fowE+eX(_={DpQf8N(B1Bu zC2{1`PS>NNy9@PIT8445WgH3doPaZC(PM2s(N%P+6x$UtPM>`*Li0F5>#DkCg1l0KuR-R^T6 z$Z(bid)uCH8N(T~OoI#7*FAyi!)3&hlI4gU3lS~YH423QT!XDgj#=zhlFPe%33fT} zz@#M3plK)YPC$Z-gjTlkwQD(hG|AF21-thE%_NURYXG^V1}+yENC={JBMgmq!Q0zA z1$1vI_j#r=r{Qc7(<}V36HrJi{P*7#er|0&0@WYBj5lL4($z)qLD!M>+tKIs<3ef)z}g&!oHjX;D$p6?+$uHt_gZ&g&a+ z>xu36K#uwV(DWE3hkV4RPZ}o(6XgBg4bi+!*cy9CRR}2Rr2=B^WHR;}$Qu>J+YnOY z!wBFZ_F&3-B1G zNC-(K{klzRy-m*IhXcW!WP%vE0tR982!k9$ETm6V(iRjHqy|YF;<3cOm-61vPdIzf zPzX<-K5e(_^7GSi1S)(g(0bEIW>g-BvL7sN-@`{pje6QvCR8afc9y>70q zxz0SdZTA5;@SQ%5t5PV@Igm%HVDn)t0b4h!u>#E%G_N*Zd^z*|P1DE-I{-jXn3@5; z;^N~&UXQ!E7+hw#sk8`$)E#);_9s}&mTX2kcbD`d58XX8h$qpzW}64 z-}r;N;pQdxm-$S`k7MDt;wA5}OWYZWfaof@jeI8txTfsxF5xs%9SWRK(6|r-wk~1} z%7sy@#Fx2&QUTOE2*CSa$i|xbW8l!Hw^HU1^^UA zkRk|=98uz-83$n9_3kt3;Co0VUytfS(DyL5l}iNj-7q@J0h5;Fx|O=%Gxy^Mq2l_i zD2t?1SGFH${FuZ1Prq|Z?R)LqYTD5@j(jQhR?@y$2JCL-OP2&3gzGd-UOhj?t%{&> zH7ch8x7Ic`4*B`{g*C{u@nAPgpWSbh-=jEwR(bMXSXkKD(o!^tg96vR2f!(3-<#hI zXb2J<0w}OfqqUKMeL>Bm26N!@%8Jg;j*Xr-hnzQ$ z?>EE{wr;i{vUeWBPMJ$59dN=XDn6q66sA3#QVX~nlnMHa(cqdH1AV+6P(U{WXOAiX zAW^qjeRz>c5ZGIQyrZ>P%)W;l+HmnwcT?K4YPz!k@t~d5a$#sy8!Mg^iL5koA<=ES=^0XPpZEbAo|HVed{eRe~j)T-rs9lD{ zEQ4imd~S{mUO|nACfBTz1^_dy-O(6fz8Z)Avw{}2X5$Iqow^SS^UmfHI`p>n>)oyy zKuxV+D&j@3_#2DEIqp2#06yUgDsFD>n3$OQ@84-*pBQ@Q<_h=p^fdl1o|=Na4!Hpo zr{Lt|6ChBQ-9bj9V6&060`p1*#kbLA31peLYg3t-nI!Pg28cMma+|f)>T*~vbe`}q zFtN?R=D`0tW(rbBEp#xT)T4Armv3zT*RK$OPCO@1Hgt68cv7H#8!)B9eiPIP;^XIU z1Q8+%#sCB=H8WFf5viVDX+OyOW%r%%5!XX$+W233EHt-IAAHid6y2gJT4zlaLeW*O zz9tKzw}|JmWy!6MizJ-jf4K))T-@CJen?16PVxVxAM4uajeqrHA^&Q~`d2>|N%PB( ztINv);0T5xU~U=x+BN}J(CEX(a(g`&4Nc%_h2`a~K;j4?qoZjSdIYydYvn+TSeeZ! zAXRS^fK56Gm>9%MM%^qrTHdRHH8pbH8}mnzYuB#jUMr`B(pO_x@D}{0jZeP85-Wp3 z5H$DUV&?Drac8>I>wl=+dYH+N+CyP?N@o=*p^>QnqAPp(2*%uNiXQEQqCQS$Nv8-< zVP(OM340FR0AO#;6k*G)25F58s2p^=QKVB z{UY=ufXeBgQ9qMIapDE>hAe2}CRj}zlx;59IR5_r&iC#qd3#I4-asWJ*M$Lk;L4!` zQ;!8!NBmbmOM)Zo5=cU5rycb{K{TRF(Xcts7Btx)RPlhGOB(`;H!2HN-n)r*{(%v6 z?|3JueMC|iQ8^LnA+xw$Aow2Zhlgu2s$g8o%4vGi&o@+J-vUeD+TES3*&O+9cibvl z-fzPx@Od&5cvr3-IptPL@t4^sTSjUjJS1}?+l?DBrz0XFLJ1sZY@vKKe|+RIKjL+m zOK0#58Y_g2^~a{CjlK_ai3>Jc^*w){BbQM|d}^l?HD#3UhN3(wL`^PgFH5z*zn_GR zOvwtd;sW4&jFpv~iYhu`ks%A~WRvTTIHEE}Bsg9gyJP^Cz$cp({WVa_Fmv{E(F4rr zM%g_4590BhMm#(#e6j|pY=qGgJ(Be-UAooCq~Wy2?{72GvsZYL0t zjyDqg{AGXJ(CDqVl+u#l(ZpBtIsS3?;BGJ-P~TRxKwD3L&yZMacWns2HqYtiyrEoa zj`&~dEPo~?jSV~{c4}$qYHeO26P=yXZ2$C~9QvIszo25OcSh#TTOksLk(ReOkq64A z*}u0?Z;ypjI{!7jbEU0}m)jfDxk3qB9F)elbhGrQw*S8Uah!g;mXUI{>%cZ!1o(Gy zZ{jQAc4$nru7o`{G9$+n(uE6{rI>LEHK#V>$Ec+{q&|@F7IO;QX7f>WNb=`FU%Z||qQ<-W-B8z{O`4e} z^Zsb_C=@lwkeT_cKASMT=uqE$^v|O5KSY1t^5~J9d&yDsG4R1G=eYh^h5y32hy0sP zKUMKzyp#bu&^^(`n_(@tivpw?4_K{^W}fciT5U3DE6RL3%nVc3V5cac0u5w06h~)&Ztr?{RZF#?X>R! zzd`#k(5%YM%|)d-uyHqlR3{|?DmI7T8m`@5$fA}N{I=a4j@jvu6ti4Lp>NeuWPPd9 z5!DC)Goxr2gLfhGlzk~kqQScoZZ}lLPL*&6u#Wbfs8>fd3k+Z1xnJ?m!k6WOTaJb@@+v1(X7cB z_ynZO^B@NF4S~%~Ful$XS20pBivTwYsyk1o@}o)=0r zprd~u#BPwVOXyI+5~w(utz|uzF)+{2U4K+wUhZ52qUro#ITf^YZZ0b+rxCz*JJ8Y9 zeE{t|IOt%#f=o0wmcImn!?@Ir9tvUV#tR*9(Nc$g8tD661cW_RmMHB;df~zaI5W`# z^6k_{>8%cYcv`_1CtWrxN5|{q`?zP%f&u>3!^sXbMwauu!AgMQWuO?ylI7$ajau(@PV?_8P&7v|>?)RqpK{unSn@jj*O$an4w+0=WOdgwA?9ULM+ z@a|PCP#e7tXJy9ZU@*|U)N7JUp6!9{5P9kD z?cIp;$bl@hKEYha1-6#4#lthB;*I!Pj_0Oor{NoO03s6Ju!ig0sEX`=|XDAU4LwL-ICl!XhNn)Q0_&K*4|sm$ zz<3Y}3cl6m;xHHumBHB#CsI&DAs*&nZ&eG#iE%jc*0Vha=6@XcKzCYUmhdoe3({Si zL7P@;BQkI zG~iZe+EHK;Aj$%Oi2zhv4~Jl&jf;nY*T#&khLzld-3l&+wZ-9UPBMv_Yl4o6qJY7! zJmj!#WnpHv+Cb*};rzqC#na{QW z-1IBGvJfh+_Q*M@b%0{3N ztOEuro0(BhhdE%|V-EZnR=iXaVADcVG!RO|JGZ%v?n+;Yn)njGmcD_36wnB7PEklfQLB}1; z4WJTq?Ce3WuMtjKPTG3TG(UOr1RqmaRz|$M^j58VwH;!0#_sBx6;$)O<*gNKwA1Bu zd@=0r$w^&===FqSIcOc@9}EYdF*tg_u*g?lla{7DlNcJJ=7Uy&j{NH~Vh%_jHJC*o z?-~M#qJRo~t0RR7mcy}E)H$_f^H}cu337!vKS9IrvmLt{+DnXFaop`;0Cel zX6BZgOQS|R<3GVJ1;<`gUr0Cxo_yj1y%JQ|1_w>s=g;&}nrdo_Aj$&T-^RWo1etx} zZRqQCWZ_&3v|6C|2x&Q%<)k}o7?g`cg63aJ25`V7CB;-wyOTXMYo(bWcEQZ-rSl!2 zzW5k8Qsla08X96wC%C1tMg@mU(UWd05)SpxEc{Q?l}Err>GL;(o6oKSUS=QWtHNc9 z6a+!bKgUgjtZjny5h_qBA^#@$Zm5xA}8i!k>?lPDKkOf7-&H?8cjj>*nkg}S +Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 16.8% (327/1945, wired) - **Correctness** — all **9 BerlinMOD queries × 3 streaming forms = 27/27 cells** reproduce the batch result on every platform; the Flink snapshot output is **byte-identical** to the batch oracle. @@ -55,7 +55,7 @@ Three layers, increasing in strength: |---|--:|--:|--:| | **MobilityFlink** | **1,945 callable** | 1,945 | **100.0 %** | | **MobilityKafka** | **1,945 callable** | 1,945 | **100.0 %** | -| **MobilityNebula** | 6 systest-confirmed | 324 wired · compile-verified | 16.7 % wired | +| **MobilityNebula** | 38 systest-confirmed | 327 wired · compile-verified | 16.8 % wired | Flink and Kafka share one generated JNR-FFI facade, so their callability is identical; it is confirmed by a type-aware per-method harness that invokes **every** facade method From a6baf84c58dbec5a82aea752ea5de3ff95e239f4 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sun, 24 May 2026 06:42:45 +0200 Subject: [PATCH 17/22] docs(streaming): NebulaStream 332 / 1,945 wired (17.1%), 43 systest-confirmed Regenerate the streaming-coverage figure and table: 332 wired (17.1%), 43 confirmed callable via end-to-end systests (adds the single-argument temporal-transform value-output family). --- profile/images/coverage_charts.py | 2 +- profile/images/streaming-coverage.png | Bin 52079 -> 51717 bytes profile/streaming-parity.md | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/profile/images/coverage_charts.py b/profile/images/coverage_charts.py index 73b2643..fd28e3e 100644 --- a/profile/images/coverage_charts.py +++ b/profile/images/coverage_charts.py @@ -56,7 +56,7 @@ def hbar(path, title, rows, subtitle): [ ("MobilityFlink", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), ("MobilityKafka", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), - ("MobilityNebula", 16.8, "16.8% · 327 / 1945 · wired", "#1a9988", False), + ("MobilityNebula", 17.1, "17.1% · 332 / 1945 · wired", "#1a9988", False), ], "of 1,945 streamable MEOS functions (solid = proven callable · hatched = wired)", ) diff --git a/profile/images/streaming-coverage.png b/profile/images/streaming-coverage.png index 7625cd226dac7d29748610c8bd87405799ca3a4b..23eb7437d9f08a4b3b829a7e2a11aeafab0eb818 100644 GIT binary patch delta 15838 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

WKfgs9~|#6IYcxu z3B`&+x3_|LB{dhR?eq(yUDA;S-KB=Mt^Q~C)MZTg@+Mu?XL>NbsHuMR%ZQl7qX#Ic zc6f(kEK0IlQmQ3wR#@E#n6{qSG?IcJw*KUoTK5e1WJ5EE;D zb>SISX&X5-z`ljZ6#cLm5E29e2-(Fu_f+15O&N>3+A`m8TneQQ z&Mwk<40DPnZgo)672G6DO*rzHLmA6odWY9{9rM2ZPhM~V|G@FT^9`5(`PKh@Z{UCZ c6_gdGcb2+q*4w;UqTo1sL{s^(qWRVT0~%HJ;s5{u delta 16203 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 +Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 17.1% (332/1945, wired) - **Correctness** — all **9 BerlinMOD queries × 3 streaming forms = 27/27 cells** reproduce the batch result on every platform; the Flink snapshot output is **byte-identical** to the batch oracle. @@ -55,7 +55,7 @@ Three layers, increasing in strength: |---|--:|--:|--:| | **MobilityFlink** | **1,945 callable** | 1,945 | **100.0 %** | | **MobilityKafka** | **1,945 callable** | 1,945 | **100.0 %** | -| **MobilityNebula** | 38 systest-confirmed | 327 wired · compile-verified | 16.8 % wired | +| **MobilityNebula** | 43 systest-confirmed | 332 wired · compile-verified | 17.1 % wired | Flink and Kafka share one generated JNR-FFI facade, so their callability is identical; it is confirmed by a type-aware per-method harness that invokes **every** facade method From 66bdce0ae8a4c8567a38c0b3923dfef5b6bf52f9 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sun, 24 May 2026 07:18:18 +0200 Subject: [PATCH 18/22] docs(streaming): NebulaStream 336 / 1,945 wired (17.3%), 47 systest-confirmed Regenerate the streaming-coverage figure and table: 336 wired (17.3%), 47 confirmed callable (adds the geometry value-output family). --- profile/images/coverage_charts.py | 2 +- profile/images/streaming-coverage.png | Bin 51717 -> 52020 bytes profile/streaming-parity.md | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/profile/images/coverage_charts.py b/profile/images/coverage_charts.py index fd28e3e..76e05d7 100644 --- a/profile/images/coverage_charts.py +++ b/profile/images/coverage_charts.py @@ -56,7 +56,7 @@ def hbar(path, title, rows, subtitle): [ ("MobilityFlink", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), ("MobilityKafka", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), - ("MobilityNebula", 17.1, "17.1% · 332 / 1945 · wired", "#1a9988", False), + ("MobilityNebula", 17.3, "17.3% · 336 / 1945 · wired", "#1a9988", False), ], "of 1,945 streamable MEOS functions (solid = proven callable · hatched = wired)", ) diff --git a/profile/images/streaming-coverage.png b/profile/images/streaming-coverage.png index 23eb7437d9f08a4b3b829a7e2a11aeafab0eb818..0c206386610fc4551147408c71b18ad0612a6ff4 100644 GIT binary patch delta 16147 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 z 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ÿHw-$srS_=!b5 zLN;JJ_S@nnEAVg_N0jx)KYRJu@1l2qniSiHAuS7iqxS0>Vy=XO*vb?4K3N`J zc(9h+;J1O4m*1DKU;A2(%nv~87&v-rlb~R0*tKhp6%{L3SVWAL*bQ3AiUmTBK0@Mu zn46MNgh+`J5l0#rp{-`-y8OcP^RuV0rjxr3AMUB!j7=SDs-V!&iv?t}sg+f4G4#r@`Rl$UI%Iv(qGhwYlT#h)-M zF8U)CH$uE1fe*SX-JB)Rq>O*1{=(tAVnD) zv?@>pW#~<4b!IJ{0y1}7duvn^+DaE({$+uPvn_wW_r+sOL=+Y$R3HLvl$K^eNI|@n z>D;DYr!O9qd#9|;*Ws*1l8du(R^|+DihMP?ebJGD$xsF4>BbG>Mi0c>>(|#pd--s# zM1%3Hkabbs$3SxC0;h?|z|23M4L0&?KY#vQG2%E9QNETmP{^j8(h&2yKg|g=jF*0W zq~c%4!`pu|YH-26we2s~AVDk(OQaXfU4{20N!6a543YjHLwKH21bpcZPp1C$)Ce}O z!S@*d_LP6V_qDW*Ly!H?X7A1|J_VdSO+r+V`$+DqjB5hoTMae()IDjapC^2 z`@#pVb=ebIwU143E zc>Z_a89E5ThX3-FG{QTg4JeVeY*-+fFh<6a_q42kA2X@p$B#XK z))=e&zilJ?>;L-CKc9SejH2f})#jMj+g9W#C1s&@NGClhX$1wwHth*7!4thjs^#?~ zp$^HgU|PW73tv>yv5OwIg6zsFD!}5f#BG$n9vk}#)~2A3ti$y1(rq?_FkHl~4x>+3H@ZZWg%zao$w;kiZ+;*PwpgyO0=KhaOajF=99czjEXAcCEY%dG_M|a_W z@c;c6*$dTVI;oP{zQS~~+qH)R(~G5r1qFnUbO1mOk?EAl3M6eC)89={!wALaXkLJX zm>2b+iT|UM*H!`T&w>ma#5?xZ20}2)4L^Nkn+yi+QF-uFBtn}!(+;HQ_T@PXm^%&W z+Ceu^3*)?qBN6*X9_Vi?A%6Su>~>WeRe)0&Zk@i$;XQ8X(J3h@8(}vE0RyTga3o_} zz171;>%z(gm>>GTytoN!6_A-JA_wC+Mrw79jfYNG16+`@GRkK#{sd`}lzTZjpDRX( zqe5F)Y$T5fEc2nO8TOEqh;lpbHda0pb;%q?Hsl6IS+86bvr|(P{fIW|qXdRO057u^gt6$NKvvU=ln-5nwOJxeY{3}d_YV|)Mr z$9{>QG6dZmO5YWr92LPxN=B>%qtfY}Isl8;Z{8GIT<9Vyy?3AaLaP?R$9UvOi}1pw z&=3u#I{qXAWQ>vW4w6jZ$3Fu$M1I}}1-;Hw78dt)t0@$;LK5)u$ep8YYHGreGUH;G zp0lBWK>%WM5l1(0#^~09(k7wD9GT_jcwfqM)9RV=ZgoscAT!(w`cSbeGOU=G;dEap zas0>x<_C3kC1t1GI|{{h_jhYG!`<`*B!EPNyr_%wbhJk z*1$%g6h`pu!APIBhL{oT%G2P+qd)=GJ$8h?r!sUoc~pK2@F&cE`8f6Qn82Pj;XdF$ zBS|D=7iFl?&@H5`>S-x8P>e|%A^tbAI0FA&JR0UasmM@Ka0U9j7sW581@wg#75PDd zLAh&5>40$BB`f>vx_}Bv>cN$hVXp^Cegbv_jJ5`ZHgTCsJ^{Ja1YL3`FfeR`P{rUX ze}bSQkDVBq`?6DXO-CA_|rm85yO?Gd`8!vIIdBxVMj8xOgVt=g zL>fUrO30Bja+C!JCr~bW;l|HdW@2R-rXuq#I_LiV@Ae;)ZQ6~`U4JhE`4LqZCMao# z_gg_!)sy={IMH+cF&+;8uyHj3Q(6E{+Msj>-rZ0jJX~QOnU<84L{S>JC3(`*#mmp$ zI|744z4E-QrKp3Nnsu1>|Ck@iOUA4aZ^qUuou|n z_l?&Fqg$6R+;X~i?V486bm+Hm%p-HmtNF-XewRq74BXCc4RBh0yScg9wn;v#-{zzG z!Gm=EzsC;XR<>+fM~A7Vg_YGMR3}Gw@o}xU!p`H;pfXz}B#s{2WZL50jK7de*UJ^v zN_!)6DGqM>rkj>1ypk}KQk1N$l4>0bR>Xi4<&qhUS=0oSK+=QT)kSn62tqzI0J(6Z z{BTLuX}*ny*iG>-Dv}{@B5TYDZ26GU*`&c1#ovnv4ZiyrpPzZ@Y7{t=HW*z@Cb009 zEwwlcgELB^?N>uX_k)8VmW4|yD=JKfyHQfSfqIu)ag(I%o34{^+dJzPw=f?SEGahz$3sqUG`)wDUO2RJ{CJ#SE_Rk-z0a2U zXk+nb+%6RtVMXmlj<8%g{;a-UNi@m|Qzn@XJPi}iZhtHl*=YWr@T{&?C{WJA)Uys9 zfV4KLT_d>2!(GTd((#JAD22@ZHm1-jNE!qH8o(dlVTNa5V6ag{gbn}!m8c$?S%B}h zZQID8Cfh$a-hOh3XlfdUAro|aYlv4evr)RvKQY=R9a+#_YH2?<{OFqW!Gte=!c}v+ z8`F#08sh#>lLyhnSQt-ppAN`yM-KP#SK*)hN z+PiQJa1mobvhzAQJF~!y19vr|UR4K<@g^aRILPS?3Bruml^|Kk)Ky=)uD@r`9*U@< z1@AsjLU&l9U?Lr2V(rgPJi`iI6URo_x8TYXf430p{o^SI$&l~ua_NH+6t$U*ODLof z5F|y!T{>V~Ha0fy!4uFjGY1=st3e_lWvrd2J4%D9=(C*P#O}Ea{4qJyv=Y{>VTFoa z^86AQRAn3GH9B7nC&Je+E7&|=Th_F%t;-t5rcl7gjVOKyB7YL;O@9w1K_GyTeZuMP zs%x+*V{unnJv1JZL8*hYi*z2toZ^XF9Z+@!Hwo7ejXLC5&PuXP@-^v{|MfpR;6nVR rcmEGhxcs3+|LFl2z5k2zHp|Sft@Kwh*}hz);C1kTw(0|Ai%b6vgFp7` diff --git a/profile/streaming-parity.md b/profile/streaming-parity.md index 96b3043..eebe8bd 100644 --- a/profile/streaming-parity.md +++ b/profile/streaming-parity.md @@ -18,7 +18,7 @@ deploy on real workloads?* — with reproducible evidence rather than assertion. Coverage of the **1,945 streamable MEOS functions** — confirmed callable on a real `libmeos`: -Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 17.1% (332/1945, wired) +Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 17.3% (336/1945, wired) - **Correctness** — all **9 BerlinMOD queries × 3 streaming forms = 27/27 cells** reproduce the batch result on every platform; the Flink snapshot output is **byte-identical** to the batch oracle. @@ -55,7 +55,7 @@ Three layers, increasing in strength: |---|--:|--:|--:| | **MobilityFlink** | **1,945 callable** | 1,945 | **100.0 %** | | **MobilityKafka** | **1,945 callable** | 1,945 | **100.0 %** | -| **MobilityNebula** | 43 systest-confirmed | 332 wired · compile-verified | 17.1 % wired | +| **MobilityNebula** | 47 systest-confirmed | 336 wired · compile-verified | 17.3 % wired | Flink and Kafka share one generated JNR-FFI facade, so their callability is identical; it is confirmed by a type-aware per-method harness that invokes **every** facade method From 99009f697947998471c5f756cf0612445e497e05 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sun, 24 May 2026 08:36:05 +0200 Subject: [PATCH 19/22] docs(streaming): NebulaStream 365 / 1,945 wired (18.8%), 49 systest-confirmed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Regenerate the streaming-coverage figure and table: 365 wired (18.8%), 49 confirmed callable — adds the 29 cross-vehicle STBox-vs-STBox per-event predicates. --- profile/images/coverage_charts.py | 2 +- profile/images/streaming-coverage.png | Bin 52020 -> 52336 bytes profile/streaming-parity.md | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/profile/images/coverage_charts.py b/profile/images/coverage_charts.py index 76e05d7..de02236 100644 --- a/profile/images/coverage_charts.py +++ b/profile/images/coverage_charts.py @@ -56,7 +56,7 @@ def hbar(path, title, rows, subtitle): [ ("MobilityFlink", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), ("MobilityKafka", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), - ("MobilityNebula", 17.3, "17.3% · 336 / 1945 · wired", "#1a9988", False), + ("MobilityNebula", 18.8, "18.8% · 365 / 1945 · wired", "#1a9988", False), ], "of 1,945 streamable MEOS functions (solid = proven callable · hatched = wired)", ) diff --git a/profile/images/streaming-coverage.png b/profile/images/streaming-coverage.png index 0c206386610fc4551147408c71b18ad0612a6ff4..734d13710d0f80149b5c8cd29111f965462d57d1 100644 GIT binary patch delta 16465 zcmc(`2{@K*`!D*CC`9I&P{w3PQN}VRnMGwx2uY$sxXtsB4AEegc?^-6P?A}M%wtLB zd06Mw_kL^r*E;@d@3r?{d++Bs-nZg;?&rR*;XHrSRUC6@G4{|icl<9yg&u+-7T4Bx9mia-dDXj-N`BUuI^SRo)GYGtp1qmYYAfx_^rA@Xhi`vfGqF z5=G^Ou|+%__#A_+yZeddGD;SH3@ilx8!M8Mb8jRzUdQFVh}(!?k&1~iSG2&ZT^wsL zH8b;0aNj;!@#N2$ch<&Nt{hc+b1@CmkeM~lEb6ZI=qfLgdb&=nb@q{O{M73=Z|v9S zZ+!gtF%di1H)j>(;W@7OGK29V105arY3=>u%}pm<8mB*>b<2ylnfsq2IE8J#ot__j zPaYQ+cln5@MJs*i3~?BX1nsF)r(%Un@z2{15ESZ%to`capXWSi97wxLm)0!hFpY&M z+Gc8}C?1<1sbM=rL?(atF3*QYzx)acgnBZyXVNx&1K`DHq^}=aKhrioejAs@U(s?c zPDEksi|$O@8)5jSdn45>=%esYO#_3FfPf>P?ueW=uC8pgT)kOhZMwBQ6?^d!AD4Q3 z$olWWhJgV_3JQu(pFh_TvAJT2jvoVDb#pA0qQveG(Z927Z|X|BI`-#Jc-tEZxzn^0 zt8?8vJUq2}#%`y2qBOarrCBQ;|E_<1!J#F}ivFB6b*bG*m{s@Nx-VZyczJot>?a7h z)Lv&i4%}%Gu^*Qodz-tnhR4IwdoU3$!zXFEJo)*V@=2$?HLOqboyE12 z+}xa8T#6aLy36d%-mKbAwM6T`zt1u>G^CMlBxTx|6B0ri8yjn~_Oq8!ee9zBIKlky z-{)9)SBs6YJ(`-mbtaF4go%wmBYNWPbY~1QG>YzwRJ-+;*>ev4_@Vj!zTxEb^!V=9 ziqr0<@b2!eka-Jr?oLu`rgl13@Z^t?sCCbguP@JeM?_FOkBs!4Gn1B z6tZk%o*%AaQd3h?R#vVJWfC(nHT9(7zkc^o&h^}zrcEIX`X$yheq=0s2IOZ9$~=mT zMMdxRA19$Zqq99^ROM3F+DeM;E)jWjd9}4DlHR;=!*rr4baSzRe5sMn7&~#|gsk|; zpOKpI{(k+*$w`w2zhe&`KmNA8=R~1l*&eSTD~q#e zjn#ZRyYemf*3xVzr~Zu_Ne(k@D&Z8zk0&~=hV0Vm!1I^5F)&89XX?BU!f9*=x3;&F zdwP0qj`_14r=-M>Q1&S_YqrLEhc}ld(6ad)$<2A<1nzbrz0J2A3f32NMcUU5)VU(( z?yY$;p0ggU^*lr`{@{e#YjMwo9~GRUqB`t2mm6;E92^|UL2ILRhYYG+%Ujpe-}5r{ z?oGWguJ7%ok$5~WD=$y*@wV{AM?Zadwckd?WwH0Yw=+f~iid|+=8A2J1O*3o7F%hD zFrHHxyIS^k7&~yQTpzI6oJ&veNlW=LG_(k}93wGhGgj|=w<|TUi-P9S&z`zc+rff+ z-$h*XaXhBDsmetXQ1oGq`Dl>FK;dLbNT zAc3&3u(-oC>GH}7TIP&moJlNf|r)OYDg1L>o;PAHV zgVa=Dwp<&^pU)SZ8lu`-`j>Fn-@Mm)m2&CeU$sFUfynjC|Ug{~ac2kr9o#4#a zm}kxYHp#8`_Z9T@>64R_aZ&qB8>_4Ge}=1cEhuQNoYdBxpE|X&zOLxxBwl^6|1`9_ zm0ivcGii^Pij~2nX;16p5*=G&va|V%ii(78e>`%pzu;1A@}v2FVNwPWf(sWe5Vzxb zOitcO>UgDpy6O3;t3nRbs`T{qvK$d6pP!%7FEGJ_i9TagnenXcjD7(QcED+e)<|yk zWVox@ff9bTc*)F;CtF7nEJyZX>)qblUR%UAHk$JcD|*5RV1-bBc>J4~lan(lDk>2^ zbL7}D-4FSdf-M6C9)GHL)HWMMpvaoi&!=5|(ed^g6Aal{xXga72i_rE)HliP&57_r zo4zxqpTAm$^JB(};j98ZoGveS54K>f_~>lG3crl&DKfw6i@dyp=doutcd#9~la%Z{JV!zq&w0IgL04H-7464uWMl+2fYvW1MsN1U zo4M|ElEbyvbM!q0Yj!DRt*o~eD*hy=rV>Dzx;s=RJnS@atbcIOY_Qa}zreJ?;eBRE zTpYvtpOJ7@DVGyaSCa@kzATVH(Wju$HAd?Qin{OZ3Hf}HDvSj4=-P79%QL7$bs$}h z1(w@Hoj1|q@^U@eVo&}Ii*(n;uYcxFI3X@h4`ovB@@0Ht5|Xjsze5}R$<3gY(+q6D z5OBg%ut+?XzkZ!oEkQbTaq$6^b^ad*dmAG}iw9OFg14tz<2JW{<>TS5#+ZE`j1`l!s@4r2S`XNHn+G4A2 zQKMsF8GP9y-PN;OuFIdf_1{?>MtXL4L6USHk0Xm8~{B*ZD)`kQ< z{Y#hdm|0jN;^G2>=>)O*hK7`)iqt3c`^RB;tir~~DKvXiUvyVz1w)ZParP|Ln~RTb zFUraP>!qT*l{S2(bLz{BrKM&zSgVJQ9zA+IP+q_E-VO67!DubPD~l&=*SYbIr6s4N zBy(V3;DaYml$4c^R905F$4iCjWB$6C1i^^pa{?^#9l8 z0+hprcTu55uP!rE?4KV8tkO69KYaV&Oa1qk=ZI6~%AQv{uB*#H{?5e8RP+0fL_LH1 zMy$9+1CBSNTk;?39ReM%xJ!TUE%H-7nKe0loTBqx2w%k^dEFbwIEAePLisD0R)Zqx z1Mxg&DCY>;xw~lMuclsIUJ0y2qx;dy_}|a#f`!0<|LYaOYPR|BVNPxS*L|L*1gPp^)_ll_18u>Z;3V1LIxg7s|HJlSzwa|OzyK_{QLED%a@7kc8! zb7-1B@&3EmGPGa?YMEVIWuRwb(t9j6d*SQ-KAI*!zvv&w{w~X8mBvMX;i}u!7P)-ifaVDKN zi!)GkqJJFj;*?BK)^j=&k+P{3ey{UTe{5`Bf5-9szGBb9q-`N@+q->DKbp%g*Z#A3VB55qpP=Mrv3(ws z;9tBe86eLgj>XL${}6rqsAO|9&7#4VJLg6}CfE zZq_N4b9erA7rn<|#|q5am}nUeoPhUX92{9;=#3eCehl}#VSk{PrZf6c;(z>61XtMr zo#utE6*f)*8FJa)qi6dGz5m(#*X$?BBN)T420gpkSWjA7H~O!-q09u2+=FI8G6$Li|ITt26>K$Yn6iR=)4a!QZbwyD(~t48($Z%9_}3*f zE}Cx2rTUde6b>}6aSL@OoX?YS@t}-T{q6qG^BrwqOP)zp_Y9OS(L5PZt9(+cLhxVD z^r${?{e_26_kvbrYGL6A)!(Ee@zUbb zlILuk#;@(QU;5<_PXSKT0Q^PDDoGF6+uQTfcY}l3&XmpZU`%lF$CHsHK!`Wjewh!H zJ8DVSDZaro(CPD!+qwtIqs6 zkb+6*Tj`-pKQ0bccu5f zdjZ$8T6;bC-p*`ybIECQk^N_Hw*MK!4~ZEWM>;z@`zxK#A{rrZtF#uYzx+=3^JO_X zVY^{T<&%_UWo3zvetkn9I%8ZN0>~N`12Hse+V%D?UmBu#wVx#`l zTvqS;n$672nEm+h2!N(d^g(j9+s zH8m+>1a7^xfAyo{iGN(&jkw=HVmh<1KWN|RTyUh^cY691!3A7Lk{pq|qGHyN7&kW& zpfx#ncWGSIQ9~nh7*VB%4@F$v+&VuzvU$Uz$10EKk(PGq`Sa%{W@aglBVxl&hk*aq z0&o)oVc^Z0r^=j-NwT^vJ>y-OsV`r@9z*zTW%}#b&!1?OQqy2GnQm>cOO_VL(?c zIR4B#x1IIh`ehH$lFn&h&S89;^K)QZ_s?Vt!oUXi+J&ZNKjBPbe&DoN$9O=oEInn z*~e@qfw~uB2kyAq*0{4Y_*_q(JRxN|Puken*kASZeT&)9hesqJ0o1~`b!6%Chi+%) zhlGT5z?=bH(R-{1JqHWmi&AS~qobq4)dIUoewdJe?cXpRX*mxX&B>D|OvBgsu?qo$^xdR~V-UY@hDc066EpVR5C z&L$`(Mn_9aOZ>>=w19wb^W^nBgQF4>670`hqCd;Mu^bWH`h-QBHuzPoN=yCvQ*%Iw z3w`S<6%LdiN=I#fKmGmt_sv;fgp+EY3)SR`GzCsrP*BkEbHhm2VXXeJlZ(r3&?JZl z)3kV9*5{9^tE(fy_deV#C@pOQqO75z z;Q>FhIV2=*vCl@R(`DUye+GBr^l4I%F&eoOT$3F|zh+P7 z*X&XT4i463J@nee zwLW81(8WRRgLRfrk$@fSiNW3YxF~$MuAza$nS04xaF&gI`7%pXqyL>Hd2&jMu-mp{ zXu}m;|9d;O7(wGOP#$SP7vb;f?oL>tnN|D}BVc;(p21uCH4yTiMMfUNaOSKPj&qbJ zDFd4h7kYLL7@0MNT)KDf^gyXC2}~%vkEHYRN!0$miO7>-M>wr~71OM7cVm`uX9m=u zdz0ts{_Yl1D@8;^I;!2CirNh`6OpriOuZ7>^2S;P6$%bV#{K^Oek3I;U%A4oeUgEP zh2mu7XXxqJpG+w=m@O{VSPv*}4Lv>7-@biYTwiZ$mpLHK)VXsM1_AF=R&O$}OyLWQ3vL5v>)<7tb*0>s~$>3v3Xn zOzVQON|V{I($dm+E2lv>!{Hdk?uP)n_1#e3*M|lsdVdD+>g-63%=-LyZ_vNSp*<+Q zIAaKfFlcLKrs314Bft9cl}t=dRD;u<+9o__oLh2_b^Y^ZBs&QFk^R=h$ok> z)U<)H*lvW?%E}6KM+HFV4;>uF78df>dcMK7A8TgA&=*otQa%7h)S&DE9w8wiDw@wN`;-JUEI$i2iVylCV$s~5a z$0bcf_qLfC>O-n8MXyZEd{SDJl&YVG8%8oH&>UnWK;7|e#{I5mv$3%OaIMS!fWRX$ z@dVUSf=I4wUg_!S^=7auePGFmh+rZQwpXo8pMpAuGXb_hy!PI@FE12Onbic*vm)3n%F@)X|kt%S-Xb{IT_K0op|_BA zOfPuCUFf3pBFT<`$euGANSW_G9Uo^0F=tPSwaj% z_Ob?hJ{3`v8XhS*c{4o6(tu6A)zC0-@Q!?A8NjZ!&`0yD))~=QAPj(8>{gfIW${eS z_42}pCqNI(D5JD5jeSvCRZi0a?}{P!X31q>fYhvCfM|kI+nJ%s8G79`5(?>?uISpf zcqtNGy~^wM=lPqwf?Y;hS{%F83(z0p_5kDZ49OzZC+o;XatvG$Xf=SD{h{s=4^FXF z_Fmf>C@?()#>(jAqz^*4W8NAG(r%03e;OaceakbN0!O;HzJBGv@P>RJ~F0Sir!*pum1Y(O0*_3|7^J!X&ylY>%M7Ktz(i8X#18MeB*x(vgL(k}9uhagkn<5c4%Z_ND^gK?Du z${rCJ>5c7gDa{G%gc?NTTQA=e?tSqY<`gIfv^etxqminobg01>78WXIF9RiJ146jD z(k??mL!-N}zdSabWqq_a-4^vH&ktbbY^s0_l{P(7)`4ZRpl4upaYXz9eYv1UfgY7!zELBr$zbTn{BMR&8M_-+ zGrKxNUGsbXoYHZ&1Mi%5kA`#QmluLBp5{O>;kC3I<5`PVkIYQocu8lks;AgSvT=?3 z=BPJ$NA4{#METX@B{eS`)@1@DsHCG4)nXHz2S#5Kd=orr{VE@h_)7}^t(IZf;UzYG zgt(IKn+emClLWY%zGhIe{dD+p3v{dFxhMmXKS@AHcpDyWac!-!ztC*yi(rk(_vnxM-WNc4irtiBv6KLNexzhc}11;cY^u^#nP$ z-jhKppmAxUS$AP)bIA<)3_ebJZ&f?`N!nEQcn0H^Hbyf%2*HER&CL@RF5LL-e&fas zbL&(|aybg`1ijqQp5}7vjZR;{v3NYk9HWKB#E25hCbxr`)vFDSMiip~IOG^rF#?07 zdz%897ZJo=h!5OZn3+v%Z9{=bhi>cXN*d1Vx4~jX+r`>Ct7}7vFPiv(EuQsMY8bXF z{&ImlO3n7Xs3;1soO5prcG+9&TLPbu|6YaDQgT6Z@4LQjNL55X3SpIW@&Ind<6||| zx$c&G1O~nitT=nXc1gqG@7|sD=sG?-TIU@Q7DlUxvyxa=q5-~-?yEapov!WbBPdOW z3-wP^|Ga*FJH1FxgA??3j=k&boEYv%_w&c|{p>?GqQZ}8DePa;s#Yx&SvKv=s@D1b z{X6fE{Z-*}dzY_Mz_tch7zWjJ9NK05V`tmIWl#-lhbx^C2m*WlI4$klhc)Ro_OGR$ z(n7aV!9dC;hsv;*HNSBk)U!{|*um(8vMu!h12B2#&K;zTg32Wlr&>m}$8q(XjYhOmqPjYTXdU*#~69;0W#Hc+O>ip0w8@qSoBRL_b246Aw1`O+0S3 z*B;r~*_eihCe4=rwB?I*x0kzZv03E(%M!EgF59uudt)Qc1)q@|8UE3H4MfDce;_ zfS*6Rl_vt~@4bQIqe)3gcLz&zq0%WJV}J5A$2eq}eQD9Bd8CxcRhHh=wuOkZT zT|nb);333o?vs;`FzDt)(A2sw4{<7ncmVByuu=Nz^i@!@0rDj+?sP(;NY*N1KKmv&+vvXT**D}Ek8uhX z76oUsJ&Rp`V{P708u)w0o`*9>=J#+PysL~4hG#{9=YqrZDB!Dl;MZg0<6f{`AP+bS z)f5zD-m?Qs@HdciC=|Cpm6w&Fwt^sZ5Dh=XtGqxvV2A7gbS+;UzQ$X25W=}Km!4}_ zK?_oexgz9Lk1HMCd{`$<1W10$dp^rEko6AOd#NRg@zsjREENFtE-Nn z+$KV131~qROw6OMZ!6FH_R1el5qlJUDSL0#O$b$-AhCki7?ZWi_;BYlrR&zz3-l-; z5(dEh)`OjccEA(L;0%O8vO`{m3 zJ@85jj_&2##+Pf5u+V4j3BGBPEX2H!zz?Eq{a?WR2gTScY4D!pNejO8Maq0Q6iXoSqO|_62NS527F7t=Vt6Okki!FYx~f22H3- zR~O=joe-o2Tu}?k4a5*Z3eeW?5`(l7EM3Z&rw7xo?5KbGQ`693W6%;%)ROu-4q3cl zSY8(HGOT!92R%r3?noYxIK+kkJT%$lS6#Q*RsiQ0x{DW-2C#!QoQ}czM85?I!nfBq zC@84FY3Vis^00KlKqqd0N>SxLh)+KFL5P}R_7QR;mG5X7w6xYTJ^E>ixqJ~jab5#s zPNt(^V+#kT%B&|tlTT0nBuCa6XrKI5mG~4Cyn1O_ZUf)Hqo5p!2K`{uLjbrFyjD@G zE&|vJil74%lC$QNR)dA+>J8dCGsHMSl9q>|^wqG0Cc&pi*?kzpFp#qe4j)be^9&+x zl$ausB=CI_sBo8$k=YVU$z((6u7A3G&z7(p)-r0!cYz=y_fqt32M((7ECfFR{gYk2 zdKC~!x@uKKy4B7w1iY!i_x4rgY5*M!b);gOKC;J;AM01SoI`obTq8@kmnEnhcsNk| zalp#QoR+cUDzBogiBmzMY*NQosOs^ZGD>kALtSB7En(Sn$J37lm6gMByP z6)5Am31Vk4-+h7i(2jONc0+Iq?1lTom4Tq3vWtuB>z63@L4rlE9MU;Ln@L$o3Ro~L zib9_=x&pcNfPf5<**gPtQVB@cf-gWD(x=xv!+NgR=8!dg5IbdHmMS=YJ@4!OX2_zw zyQ?8>m&Yfzoc;kR|G+$PI3Ug0lf%#W$`5k4Q(<7GOCfB5UTO6EI?w-Gs;_H{_#~Ek zYb{$DE-7j^;e34;c0SttdNdz;BzQl#Ziz@krWp1SC>MAf5l6s2%AUU;!5DK}c-|&9 z`-hS-KGmL;To9{o*eC$*D050tlTx+YBK%0m%zz$K1pJ4FuCAh@3RnRu4^T?V zo2iP-%xtZWK-Ul=F5v&0mY1h-zTWhVb@ZH}nj>yM)pcrX3qGt%1!H>7qU_12|F~Xk zzXu5;0vHq&C5_*1XAxHHe?x{9t#svZ2HnR*0a-6WtsR4-3INQ38RLPCMhZC>02jKC z`!a}KAXbFjfo#2e4rqqu<>gpGQIQw)a1d;8w{G1s9RYCL`btcFs*v`K!I7s=cV2Yb z!Vs&*CN393W<41yBk>>vtpXtNf<$DY^XL77gGq*6ehI)qg7oAH72P375802_;+5|eL`mjLrRZZv+0|;#&p_7?dSP+64yScqx z-_oLDT9cD=8XcAZ(boq;-RKwvT)v@JcB$G?Rh1N?5a@u4I~ga3%O!~Q#Xns8sY^gW zfIL~y^$2i~tTSy4qKUoWz{Pm}o_;w?DjzoxS*0-MOQ2kiE?^5}zy*;a4yrWLQiMS? z0|A{!G97x*UFcYGW;gWpD^rcMbuG-yI1R9P3roxN#SLKn2w|02_oCQ3MAnYe(D=gO zn*!%2uH)2|LCQ234=wiu0UShdD#3$YpMJuae{K7BpD}h=!zEPs>{&U?-MxBXucWGJ z{znBJx-0m`PEZ0RT{n*dK}P3^fQlV+aB#qR0FgpTB{*v0__OCI@>yUgz|Ic=os6WJ zAHD`Aq!V^EA>@TG)-L+b$^bk4RN|u``z7u@pdinjb3H{{2QXD;|TREk4jN zQE;DlFq};$3|vSbA0HEt7>L6!T)c<^dxGy?trCN>%Db`q>FZZyLjim61zqmwlU~5< z;pc3=p=>;x+iK^R*)zJD|Bn6a0r$aqKnNp-VX4k0()|^j!h%^iLPA1=04Jc>vxT0+APNQ9O{K@Nh8JjQ~Gr>Jz~B zN&)={-uZ3o=_Pp`mcnWBPHcQ)0)@IjguP_yQ~|~>e9C@j-4^&-1?5v^-3WhwrMOXy z2>0R1AE<~ZtdmXYqOiRH*cPz7Jg8IDZ?%EwH8eIJhSc7tFJH1hvTEr*nr>yl$$~7y zSI)g!RC4dT791af*aU1S_Q=o3e_@A=5j5iD`#(OQ4BSb|qYy0V!ci-(h+n+O!Owqn zb7ya714SrF888t70QT)0UV#D1cn}>u7%HJ%g7#x#W`=+| z!+z!rLSrg&Hb$?M)dp=sKI|D97%XBSi>9Wf;o*=nh}#6-?dt}#&Knpe2}Vv#d^tri z6jB{KbeJ$$!XD5M31Hz7;nEaHrv_oUZD{St=jWjVK#7U6R(l~}`F(6|Cc)@}8$okc z0E@-=HhE^&2he;WNqB1a2LuQqI`|RXnPU;k1f$qNABR!CG7~Tr5DIi}Y7>u^1n#R3 z+O(otU~NqdD6?co43H;eHZQ}LJx)&_0Ols>037f{c2#S%xKZG60pa1zbjGepD}4&` zI&YvyZMOsR!{Oe(eQVAdX&3oNE)~u@k%4n;a_5c@Z0)0i$UmOICJvF4lS3pT8R$At zjs{rV$C;T)`T6;i_VIMp5w-^QfX>i?ABT*}lP3vaI2GV_&|KqW;Wz~jo;hi=)YgX58r0Xf0nTdiyoCe? zF{E|SDHt#=(K6UPoc(fTWkq|l0s;oiEG$S)L3kJ*$S*0$^we6Ik@bHHk%JZFH^xy;xn6xFW>%dE?K$3+!MT-~&L~_(f#Kj@?c?3qJ0hsjevV^L9Dv|yQ zRGMWkujL9u^+-Fj&P!V9upL2h0GHYeT<#B!bIF}6Aj%{24}|QnZ;2u~xw+u+2YF#$ z_(>LiyJ{En^-?ooaBvzIrmiv=y~+}_%@>BrQ`yihsS$xtg1GyxI0z$zR8&+xzP@#E zxDG;vzOP;}0qsGnE;T(}rq2d&(*i`t_mrf$4UKkYtd?zI%?p;Oul__74L<+i_rN() zW^oPE@|)K_>6!3ie0*5}3!VIG?(WpIwD_9`B>{c>T|V+0mw-2`Ub}{@+T8drHri{c zzt1&61oH6V!z#f(HZIo&K=*`!^KsBI;#5}Kw?v0D+Wp6%@_?O7hy&r3XC<~0X8}os zzZ>{OgfcQ=(LO|T5FQ@>t-Zzpn;`?1ch1P~Mb-<5H{v`%M)Ei?4%RWuCnY6~%A1z& z?FLZ=nW@0AcuqGMvi>tTKiAbk+bu7@fMT0PRT&vPusUxe=@kj8QTuTL0maRz2LNS5 z;Wx-xP%rSMrKfX()ef8$#IUT7teBSW$!L{A^DneWNr2|Vul;Vy3h0uj4xhlvE+BU( zI1LRA-fIR~gtM*}I}g6D(;%S{md=CCMbokAnB5vM$~`0R_VPuSYsw|VNn1v;!+|GezlOHoe{sg(AfX@ReWQ>igwk#y3SlU`m-2Q#mJ`A26b)`?TG zxwZy}F=0_!cn(`5B#aV>pyN|8F_C2I5Hm3`Ax#Xno4~tDd#I7fhzA96901?(;6@Z+ zK-K)#tw9wR8lB$P5>LpGDg(Z;JV!*Ao0Dx8D}-k3VPW{%LYb%8pP!gW5qhZvHGa?z zs|f{6hf2A)HMLi3pp>}0cGB|89F$Ml|Y3&dFoUW+$b@- zIB1?q5GA}5{p09g-h`+Vea_bZ>Om@W{^$RfgIE8YMf!)CyZkSl>nc3JqZW9W@#=2T QI1XM{6x8JNE}MA$7ro{(KL7v# delta 16147 zcmch8byQW|+wDOVkVd*ok&+NFXbC}-PU%vl1Qd|obV?}*qBJNS3JORgprRlt0@6r# z_kFg$zcGGy-1_bv-~G;i?<;4Yz1DhS&iTx>l89aQ3_Hf>#Fw;EU;f8PbVS}<6Xu9e zU}5wG8+TF#D_?~LA1ik(!KQoVKo=)X>*2svLchal5E8A}Q!Mv44_3PYVZ4 zgtadl8_T}HGPCgImfJMWmX(qt9j{eAriVR=C#D+3w_lEwzR{q4ehOpJ^4KpjlE~*^ zRbk=hTZKElwd3RFfx*Gty$DGjZ?EeBwVJ4IUsIE;;tLmcBt|J)@BRJcF3E7_f*Q|l9nayL34F6i&$COvfB(iK zB>Wh|DoaX15m@WJ&vxYs&E{Nh{zfe+85vn;1T_Og!G@=mx;mL}SG*BrbxlpYq#^tP z!BY<9#&`CE0+ydhH{d_z<>f0J$4*Q>xcZFWq-agdV{xFo)NA*_&d!eMK$-Q-aE;hp zPi_DKH6IHP55aQXaqR#?#vZO+n!=<$TyR_H>vJL82x|V8na<44d|iIUY>k&v2-EKF z?#@~pe^AoJxsM+|nr<)sN)&rkr1U&^b)wZ`@SXk6;$&3yRc^4isxxc-vaPJrr2%^lCXyZOVU)M?^+MMXuL&*9#u_V$)|9^IA6&*X&6 zk_^Mc!<0)QqUq`BSDcX9w4rF}o83V?^b{Y4eU0 z2{_Ty<`x!Y%*-S=Z{GCUUwls~svAPgxH9`X)x0-Po960+EJvvdk45v6#dSxbU%!5J+*vWhWS>gzjif1i_pYTSl74k8gxP$!+I?jk*`_Yq#wB55;pWD_ zefxHQi5d3GmoK>we8i(|7>_X7H}iR3tv{x}Tr_luOUw{jQX;UkzdzBfDy7Y}SAD0A zO5EpwrmwGWrZ+!f;351|KBGkD4wi^%y>GY=t*GYL+@5#g7`43syPcJ>{>q2v`-)AX zv2lr|*1N4i1-^g({)-k-5EeF$DeUOV_I7I|{be;oODmA-g1+g&&Z-h~qs!*7 z=ki#*u5m-O)Db5y<1YvSubr`wDV1IQ3P;wY%ML}Za`H7Enm9!71hsXx@lvR*T*)nT)WSwk}MkZ;<5wV<;&ENGEHL3)d9JhuQP5u zFt1#>R$*hWb`kUKM?`^jOfMWk$G3Ru@7s7~3qwZG2kY_-g?;4ZnUd&i^PzT4%don^{_(Bq1T$+1tx29MnvKwbQh> zxA(ufLvVk%I?Uhy1f&6m*=L7Ua&Lw`o=y^!xU;^vySvL^dWww1vN1F6dus)Bhb4ym(`fJ_9<(1-k0^d? ze2aKX+I#lJCHuy%?3<vz+AD72$GB=-p+&l`)3J~$Um%MEDHCrNcQwzm^|ZZ8D| z1)XwT95@BF$a%hx=-Z3SA+KMbfAi*zfb)!6;rfk)3kJbI-&&y&Ra8`zV^UX3I=8dC zYi)Sr7W4IJCZaGo{~AwZyRoyA?Ed}xj*lMc(x+5ZRyKV8e1j%R-#FdM{*`Jf9|dNA zYtTUuIr73}=T3cCu8n}!<>v054*M}PP|mZkxL69w00%bqd{C?P>sLZQKfjrgIw|O0 z@irK3R}%=((9oHw-n47jw^AjII4`MaJq_bKz*3r?ke5T`OrZee=oT}fp$1#p`0X2! z!TbBo>9QeOuL9yl9{#>{^5n_1J8jQGBO~RnUBeps^~>pC$LZFKON&8UHM+&d{U09j zdu+`3J$_7xwhLBPRz)QxjSt6=Lb#(N)}|dzKYmc(e8!7~;ngq0GeHhTFsA!ki+a^= zg8J_eyRZ+Bmf5(tPQxBtfgB-tj+=+)D=schN=qAdbhuA|rFLgK=+7FARUoli&Zl~1 ztlK!s_1-Rjz9rvr_xIQ5E9>h`t;`4^f*j{9Ma?)4P(#~{UAnRu5xU{mUAqxIrb_fI zH8mP4FS~>UpPw~HSMm2F_jrut@2iu=h6?_#AO6o56hEGQ zP-$q~o6M3|)WvkC{!7=Jybsqz3|&=-F)R9PHKUtydyTeX8#kOJe)bk&hskL)*RZl> zyr$K5!41t5ddSZ8HM>Ro7g64r<#i3rXt|t6!+h9A(2p~-PscsXS7hb1B%J=7%Ad{r zw--YGYnS_XbN+2Fk^jui{2!kFe||XZ|9|wT{vV$Hzj=6O-V#RLMF-)0ny$u?KX*Td zP6HcT@$8elC7eHTqh8*+5~4^@_aed6&d#v+7mLVm=Xq=k*{1*g4^W-@k9E?>U<_2pIaa+_X_pWDMVo+z4trW$G8 z{c5)7bsi}lU3gj=%TSdI!R+kpr_Z1L%F9InlL~t6I96{B*mAd`RAptX2?-4gyJlm< z%_QYRXklS-MO1V=^73#!{EL}o)~>>BLqi7W@j>~z#p9is3V=0bfV>F0t(X$hUd(DV zX*%5B9-Ep90zhZh;D1Vg``g#AasaY2GBQXhDT4qzezLsiwL6utvbNUcu>g$8X|x_| zsMeeQK_!Foi%ZRjfkRCY^jaCV*to%tuU~IfueXc2ZOo7{FfcgId}odK_SqT3wHqkA zF>#gSRwBm1Vfn#eUVAVxV|ZK~Md8SD{Iyl%`85Ysh^7s;P_}~`N=p8jnd}&8z69Nw zegI~sV~s&ObNR(_KCx1sTfBQ)ixHCEd!xXEm0CG{kkz7l1|ps7)$cnpVeb@GRIZzw zvn5@!*SB7rli~FX(;MLI`2Fn#86BN|x&;miQ^9IE${&S<$dg4~x^}%#a_8kGu3vV~ z4^FARzn|vw=g$D&WE>p@?tV)O0&2j+CFB?u!z;bICh?w8C?@^%^=nUV4Z7%thHG~`=lcqI23*iI&wI6T=BVPs2llgPPhwVJ z>&M5NBj~ojefc62fI}4X;spVQJN>3I5cf-Gk#pzFAOU9jOEZVt^YJn;^Wg~ID zJ7j)g!S1D~3qD4`v>ubZFJRlp3sK$JC{uY?9dP#Dj+96d+rBj9_$bHd!zBcR(ik%{ zGdDmzf>!Men0k2G)i(Y*^#9url##VNt&YosR${(7-Yg&_)Lp5nZ3fgaQOGK4#f4k$ z`t`=aLHfb>4k-AAC}6Gb1L*)&BO>WUG(>;H`LAqkwLmhjtanIR^yH{36`Rz0(SrC9 z6cB)o=oA@p1@>dqfCs|IYL5=kJ#Ma6_|mTr2_GDQCkO&lxgsW(3E9&B-hr7Iy2fTA z zd1uu1)$MHsCnqQEM+jQHbH2>h{O-uUnLtWS{d#rN*B8UOlS^!8Z$CCUdD6hZAUWFU z!2|!NPoI9-vLAeB1__0-T_(>QUNJFxSctdT^!aap%e;~D%PV9M=FPUnH9G0b4_!d5 z2!PEmv;9G=oFv@2TLI-H_oS5c>`W}IG!scn!$8bZyyIC)zoWpybv-w(rjCk|(hNip z6y6&nhnx6_MEo~k1?P6Klt!3=D1MrHU|8d!JzIV~k`A7QF}1J=I8Dxh!4w%*W~}Xf ziRWRBRV)GFCwmkZlckY6;OXYRwzlRt^@Y-Two87oZo1ph&=8FbLWK6>NnkENtgHGO z0&uY~7Ohc~{>*6`R=tmDg)kT~*M;wHUOqmO&n_6?C@3gAW)yojwDqyQp&@-BlIa{8 z?D!r;2!-rNWN-F-HPni4TFF{!Ak zG6z<~U96lafc5Lcqt;A?=s& zA+mQ|lG5CWF$h{seT4?A?PAMmz$rauRkbU<_b;iWN)iDdPkyC|m5uci_%9|-g^1^- z;F(WAYCsZ170Yl+o)Vj0ZZyN-|8(@I%C9a`(;iJuO<{2+kM9fTYH{CMjEIibb(esG z3&q?&Awf6DM#Bj5A3ACakS7GC+8`^6TP$xjef)S5@=IPxDZDEn>dBKcW|sEO&ShP7 z7Ah*l!9Fjsr&guyMab-P1EL zXc`!x1Br}$&RN_ZAVG}cS;{=Iv$2YC!ON*2h@1(N%kdO;U$Zo0Zmx6~MygMT$(^vZ zwJq!(2D(oSq5z51f!g9cw4z|(mymZW)2YbZkX6vehO-ycuzMr561*2KK*{!l#4(@k z$`(~_&Hv;n2Axsy>>0bkcgl~60tQkGfQ_pDdz$KcNIiY zQi$i)I4(^A(99>Nrzh5t4k=v&HyTc&MvCTLZ!fQv-!B~4pz}D?9lldK%!bUyWSceY ztWKc#?>^S z|H>^7*955tpqxNkepv+JP zQ2HcB|D7GeMZvY$n@^o2Y<+^7ni?t}8}u~5RW==(dU~AVpM8!Gw|kem(`9iV(~022 zc8C`4Xy~}PU4el@0JKc>M?lEEo_ReIRctz>jv3JD1|8pVS)Q9i>O1Rh4mVFvb^vs+ zlEuOI3ZULPE)Ix**qH$s1eu~*FAP;UwaZzs>KEoV5bAkA+N@pnC1t#6u-*?lbr&Ua zS3EX2Q5hGw1SFWn(ZMd%$&fCeckkZ0E!S+5($hyk4K@cHRpByECAl+-4b5kCZL00c z!{3BnUS4rF9pdw$RLXz~1s_a)!XL5yLQYK`0yShD0jUsD-&cz}sJOVeZ`PTXmKOav zNUdNH+b4hj9#4KW><8ktz&V|3g7)`YqZmK6wKc)mXl{2CKb zgg<@y^xZnXcsiY?^x@KpP-luS+xh|=2{2s z$wQcBIe3sDI0y+7As`%(g4Nt)PRAWxj0edZ*o-xAl?VLpA2zZ!c^V~QfWi$cADlXU z`t%i_gDa3v=v>2V{o7@_!BinD;%B_K{d;<}4579|mrcCvz=Ronsw#O+ODoQ&&NS}m zjr-Ao`&dFd8X?misnkcBymbX`h)f;G*5%VckxW)r#$?Ov2X*FqLSS-27aSbi|JI5G zbWE4I3E)|)P#VSoq=57+@8Kb8Zf*{6?a#`sI#Mcp4y*dkw`i{pOMU}o9ppV301;=- zoFQdmih_L9)Vs3?WkavrCVqH;=UJPXVG~M@)j|JgPz=ea+@pdZf@-68`?kc7xK#J` z->jgc!-JavX`}TLlw6C?PtI}gtE7n2!ciX!JeX8OQ^NK~QFGvFay3K4$Ixao06@u* zmOolHCZrL-fTl?!V2Xi9Y=8CUo&WswJW8Zm0qw3qJO8 zh-dUpN=gcci69d|kD~8+Mld7#*k5YV2@^RWKt9u6<>e)mp6#G_ zp^%zyJNo(o@i`R5pb>iK7``?yo{Y{@X5>3Pci7{V1U)wHO-@dZeovQebZu5-vDd7< zWY_NtLbI@S*GY(ZU2fOC7J3If=9s>M+W{|MGL%oRY;1f4N*81j6Z!b@3N(#0)l^B? z&@Nj6HFe1N;Oy+|6|Gh4a5cs59OfWIr%>N){9_n&ak9pQwF3Qed=PgN1!~xkRlaa_8opR1mV8`ule(JFM>CN5Kht(5T?;h3p9U`}=Ec&39(vO71TR zL0QCSX4+mH3=w;@H2Stf5?f7F)CvYy=g<5msZ4x!&jD8CFEFgsux6GwVgMW;zxSY}rKR!WEOMtQ zVC|*YBVwqfN<5A=crbWEr@dz8=Kc^0iHq<B3M`8`Z8PawHA~zr^n6#q4#?SM`!^D;SgjVN78ZNT)FJ zthd6+0#n}>_XlmOptnwVW=E86a>-nem1N9S3WX7?B2J6|Y3LpzNksoLG& z^kx*_pp>a;X!s+nvcWSO5$+(b2!K(;Yx~!uorCobC)kL{eM$GVlhE!kO7ryh^p7qB z(!mJB@P>HVUQ3Ijy1F_hE-uTZ4lPGEJu{VqLU95+xhnQFbXrGo#Q+S^SrZYRaE_w{ znGvU?^xeC6pM6+{Du?D4jG*xcpFDkvbQT(1PUj1QSt_U)PP=P&YPL7!^FR;7{2InR zB~Nw;J=OBgorabc9Ly-l5u+mmQmUGEKSWrH3b;(}{QUVdH*f{mS7<~;08AuTM7S-j ztZW%RYpJQRRKK!S7H;;`iZ8dJ7;ykpNV%7p*r)xDBPQcJBHzTUys&^QVB+}5O^jLc zO>J!>pqgjBdX;D7t!jkj09lyvC2QN-1V7yR1_%M9ue`Xzuh~9HHri__frdc0tuEfF zy|6Fb%x|yCGO2!iTZP>wlyc>@jkLJaw+ zQ*>@wbPQ2oHouaHph59F8em>sDgB(~&#d|7Fd2Y#K@iDkH<2$XviT0?=p% z6LgGH0E;s3h2z6CZvbzsoShq~ukI}K>^Wu>c?tiBf{7ODPwJWT8gGyS`vpHozC&nkDrE~^T03QO9$UXT4 z@cenzl#hUvSz;9hKoXCfe)ic?uhje$#Q5urL~StGhV&(`m0BLDiw2mK%jm5Zj|#s~ zC-RNVcmN96B0q{wVbc2^H-hac(1ZKVx%1~yd=DxyDhLULpW$Rw76D`gKpZvNC@mkt zn~+jb;gFM)C%-D20(1aJ?&#uDSf(xj*qVD#Mn&LU@`#2$UwBOsJJ3*KcGdkyIBqD4FPmZ24KTr zAVu4NzwwH`Rjg?&IU#IkTpuDMOi@#3M{nZ%& zJst+C`HO*B)UHBD;5YyDkBF?E0%RQFDJ*%7cY-2+1*ipQmO&rj+}IZ{BA|tjf)A&2 zKm`;Ps8iaKoOdlPMJ!9}te;lH8pnhqaG`P5{a*4pdUG z>x2VcgzPq78miP+c+QPZ5IFhxbUeLhG8SB3>BZZv|Nhp9_~QXZPL%L`*Chx&06IK2 zpbC5;A)$la=~P8UMQPy5C3nBk)$}Amvuy&&3$;lBgzFy|V1p?Lyo%ewPN|w~PF@1% z@=&D^lub1?wX`=+5;B&e&855rf$YP#Rz9CkHJxaQL;*|$)de*WkSy=sWkWz11IoFx z(XHAE92=9(-iNwA7=Gkxo<~V6s4CLX@c<;KWsBgVvp8eD9qhQHwF^%_W8!d_rf9D? zvNSd}!b?S~N*!ut&#a@85kM+n%9&8|Z8|`XEOy=a3OEW=o#=C&l>1JMXRYgfe$ZUg>EZ z-bQ5=R3Y!p*L9jk+8I$aa3<`etE(%`MN7QvQ4F~*Hp+MJa-f4RRFYj((ga1J1>OV2 zfhbmmrt16t{bewntbX!0w4E9(@K5xkj({rH*$= z_zWw2AtVf|oKFMzD0%meO2>!}fhsfbeF*R&BzOyitkdtWw5W{*y7kPj50^oQ;qhDz{TooZ1fBFOUKlDN@aPuFfos;-eTp*vL_187pVZHMdU2loWxXhJyzazCRY zdqql0aM326smF(+7&@(Q&H^4+!L?>l?~4TwEG3mDC5yca09xDF82UtyrTPVB+J0mfos;Ua`&TQs;y8iqiufaP)SXgjPjfA0*k$RnvH*3%8 z`g(W8lSIkKur5dw)OZH--JzkO(WNCmiidn{5E4+rptRwrmCAIe3c=`nn7mmr|8;M% z2{X`y0H|p`Fr9(&ndUOz2htfXXm{8=JUrE_EeL(%la)EGjT-yTj8h<$u_Uw!-u+60 z{w;)M$=kP0;6o0gW3I}B_(lmTrXFSxD775(3Mb98OUqUjxhgEO(LMna=*XL=usgPfi*CQgftfQp2VfFM+?b znw+58mkcPUv!hGT0)e3!t%5G3Vbxp`G$S@KPEOo^d|L_8O|CI2yT^b#1&CCB}ONw?75 zuhRPZbmoYK1v)E)v0&a3m9^Qq_{QNOnR!VOR`l(NE);+RCDR2!D*DlAiIs}ygr0|5 z{1g>^!JI+Na0RRw@Be()%(7r}Gl?`YG&ge1|H?mKX@;+S0zs~z_yQB4c3{C5-NX7U zppU^vkx~IUB9#b8qDZVJwEydFi@ggj6>h~p&I6Xe4_O4~o3`&C%yJF32tHG&VTJvV z!{i_HjdK%tUU2{2d@~!B?@bmD(=q?S+q5E*=z0uS|C;b}%;AaFVDe#ELRMud;^TT| z>gB}k<3`o5)%JP+^KP`L;f0BEGP5X*_7)*gXJZu~A<$+T4jI45L zOV!aavb0Kwas;nw-grt3&A$v(SrsWT%=R#c&1rtkSG<-mZlh#V-;DqF^qm_}TM#(7 z=!B}!aTk0P84*d*^M7~wKg)RdH78F@TFaLO! zmZ11t*Lh=AEk+TCVFm_GrX!n4yT+lEg-fE3=L zvnsl{m>*=D&z{{k**H1zV4Mh^-bN7NSrghy@Bb2ot09rCS{qE{;Il$IG3cA%4UvW6 z9BM@Y=*hE~5F6_U)o2vNZ}gwQO^aTpp`qcFN{D*=IIylx>UVo`8#2-q8k#~5CbEl1 zI};>ugP{p5%n}|O7!26PCcp~>a~XbsX-+gcq1rZ@%{=PyJa@L_{PS@+=CI};f~`UPlEuSdvI%_=Ee}L1vhPj$>Q$a zU~u&p?(1$aJp>&c-BOtKDU8&5ucGHv?MAk`x(W^%VqRWe3=C<uI30MF6 z>z=Q8I86*ZPBTa%Yc2=K19t-nW@G*b3E-?9ASwB2x@TQ=iwv)UKYed|xmY;4@$=`? zAj`DC&^z|&(?8#v1G@pn7fwLONj2vU@E?_Fbwh-*rWHLe5HmmnrSNCQpeSSRM{zW` zF0OGr1tS9=k+ik2Do{6I&oIY@;{$E$B%ow0A)&Wc`~G2}il-rd5pWb@V<4pp*OK5O z1qKcL_<{3zKOvj7=BP2C|8aoS@3_z}h-v_0Vju856nYVDz`P(?psqKN!w8g^Ln$b> z*_5~QVcv`roiz>^C^RZ67!;a;?@8Mn8aXo(*9VW#rGerMqn;BO)W(Gw1-N@=tI~6u z55Ne|fj7V2(Xr8UT(>sbz2$5!sJ{q&*^tPJ~~udB=0pu{hyyYI&=-B z(0vya6l@&H*5Cq`fCvp!Zi`o*^eAa{_M2kufsYKfW`OvEkj|*- z5=O!eeSIicL^XF}Ch<^kZb5_-Y?91OP0r4Sfd-9U|BCr+32+6b$+(VdlQ$Ayys#Lp z_rv&t{(`ASOw^mv^9N)N1Ax3P*Wnj4)({g=7V?RFdKMjEa0VkF6n<8?t+Iitj{fow z6NC{60*qRuAl#y1yT&1G@Q8`8!)c;}aX7V1plcq7`eC8QRIsSfjT~@#fx4#vVbBuI zTwKF-(}=rJA;Mv9kA|&WTd5yTkGBqx91gA8~`I>U`{M^7-2%dRV9Dx79qHnQfF;p?(-7>&t8bRN>#>|D!dS= z0%#IlMQNH@6As!WWrGRT^^0_186fofE8S$P7_{IjW&v^^vcF^Ts0~L1Pdu zWf`VhxI1`UMPJCuDg@5FT)xqz=KSK%x45u%R7jD!d?d@M=2Tj^T_J&5v5)Wld~*)N za_N%Jl!!dmSGeA!Ws{n77aqE^+R6;EO9Ye+F5qbI?7%dz5tP*FJ8rX6PhP$x#DHrP zYh}4cvHS1~%-$DmR5l*$0s4=5`ZNGEEuITaMohymjEy0_?hQ%-&!M71sKCJL*Rs{v z)D#PLFVMU=?fF5a+P4B4aplkJ{HhW`Z*4+wa7kz@0i6N!1s!+?IFysL%t&%YxxoN~ zI&^_#fvB0+W5+cQ`3m}&`qd){da$XYj6knr>f9D|%KSsehj6V6?p&q=i*H2EdfxRkh@pM`#SjdD z-%*J`X>fmYJ_Nc_Q%460=l}?MVHfh@Px!IJdEY_jCvd;B8D1vvoD-;0Q7}eu>LJOE zkB!Aj+raJvhimUrCLRJ-M>gIO@AcoxnC$XbI7Du1vZDd) z)3Y^;PVI<^Ti|*rj7H*(AG)}p<_*wUV_}f+&K?=$4jKi(E_kNWkgs@7 +Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 18.8% (365/1945, wired) - **Correctness** — all **9 BerlinMOD queries × 3 streaming forms = 27/27 cells** reproduce the batch result on every platform; the Flink snapshot output is **byte-identical** to the batch oracle. @@ -55,7 +55,7 @@ Three layers, increasing in strength: |---|--:|--:|--:| | **MobilityFlink** | **1,945 callable** | 1,945 | **100.0 %** | | **MobilityKafka** | **1,945 callable** | 1,945 | **100.0 %** | -| **MobilityNebula** | 47 systest-confirmed | 336 wired · compile-verified | 17.3 % wired | +| **MobilityNebula** | 49 systest-confirmed | 365 wired · compile-verified | 18.8 % wired | Flink and Kafka share one generated JNR-FFI facade, so their callability is identical; it is confirmed by a type-aware per-method harness that invokes **every** facade method From 1c3a331a612f3b06fb999a3b25bacc77772d83ca Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sun, 24 May 2026 11:19:56 +0200 Subject: [PATCH 20/22] docs(streaming): NebulaStream 384 / 1,945 wired (19.7%), 57 systest-confirmed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Regenerate the streaming-coverage figure and table: 384 wired (19.7%), 57 confirmed callable — adds the 13 tnumber-vs-tnumber cross-vehicle predicates and the merge functions invoked by the uniformized extent/union aggregates. --- profile/images/coverage_charts.py | 2 +- profile/images/streaming-coverage.png | Bin 52336 -> 52082 bytes profile/streaming-parity.md | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/profile/images/coverage_charts.py b/profile/images/coverage_charts.py index de02236..0d8a101 100644 --- a/profile/images/coverage_charts.py +++ b/profile/images/coverage_charts.py @@ -56,7 +56,7 @@ def hbar(path, title, rows, subtitle): [ ("MobilityFlink", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), ("MobilityKafka", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), - ("MobilityNebula", 18.8, "18.8% · 365 / 1945 · wired", "#1a9988", False), + ("MobilityNebula", 19.7, "19.7% · 384 / 1945 · wired", "#1a9988", False), ], "of 1,945 streamable MEOS functions (solid = proven callable · hatched = wired)", ) diff --git a/profile/images/streaming-coverage.png b/profile/images/streaming-coverage.png index 734d13710d0f80149b5c8cd29111f965462d57d1..52d0da4d7360e095df54c8f40e34d9a8551ec241 100644 GIT binary patch delta 16206 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 delta 16462 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 diff --git a/profile/streaming-parity.md b/profile/streaming-parity.md index a665cd2..5da0d90 100644 --- a/profile/streaming-parity.md +++ b/profile/streaming-parity.md @@ -18,7 +18,7 @@ deploy on real workloads?* — with reproducible evidence rather than assertion. Coverage of the **1,945 streamable MEOS functions** — confirmed callable on a real `libmeos`: -Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 18.8% (365/1945, wired) +Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 19.7% (384/1945, wired) - **Correctness** — all **9 BerlinMOD queries × 3 streaming forms = 27/27 cells** reproduce the batch result on every platform; the Flink snapshot output is **byte-identical** to the batch oracle. @@ -55,7 +55,7 @@ Three layers, increasing in strength: |---|--:|--:|--:| | **MobilityFlink** | **1,945 callable** | 1,945 | **100.0 %** | | **MobilityKafka** | **1,945 callable** | 1,945 | **100.0 %** | -| **MobilityNebula** | 49 systest-confirmed | 365 wired · compile-verified | 18.8 % wired | +| **MobilityNebula** | 57 systest-confirmed | 384 wired · compile-verified | 19.7 % wired | Flink and Kafka share one generated JNR-FFI facade, so their callability is identical; it is confirmed by a type-aware per-method harness that invokes **every** facade method From f32aedc0c49a9e5dafbf3b7d3367d4164cad718b Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sun, 24 May 2026 12:20:51 +0200 Subject: [PATCH 21/22] docs(streaming): MobilityNebula 394 wired, 59 callable (tnpoint/tpose cross-vehicle predicates) --- profile/images/coverage_charts.py | 2 +- profile/images/streaming-coverage.png | Bin 52082 -> 52275 bytes profile/streaming-parity.md | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/profile/images/coverage_charts.py b/profile/images/coverage_charts.py index 0d8a101..efde43d 100644 --- a/profile/images/coverage_charts.py +++ b/profile/images/coverage_charts.py @@ -56,7 +56,7 @@ def hbar(path, title, rows, subtitle): [ ("MobilityFlink", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), ("MobilityKafka", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), - ("MobilityNebula", 19.7, "19.7% · 384 / 1945 · wired", "#1a9988", False), + ("MobilityNebula", 20.3, "20.3% · 394 / 1945 · wired", "#1a9988", False), ], "of 1,945 streamable MEOS functions (solid = proven callable · hatched = wired)", ) diff --git a/profile/images/streaming-coverage.png b/profile/images/streaming-coverage.png index 52d0da4d7360e095df54c8f40e34d9a8551ec241..938790222fdf3c98d9936b0ea1b7efed811659b3 100644 GIT binary patch delta 16405 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 Rj)KQgr4y?Za}FDN|1T?zK3o6* delta 16210 zcmch82RN4f-}fadt0a4eQXx?kWt4=5?2%-)P!W=>Q`sp}X@`)VQAo09DT%BodzUSH zyq~k~=XsC+^FHr!Jny`Y<38^D=DIHD`TKo;-|uIguOCv6->1IqxuUW)-Am#ov6m?* z@mCwglSxwe9m9>t>o)|i-{@2p^~>(Pen!Ig?U}bd_w(;HC&ubLHr^W5V{mbS=4G9O z2D>0znXi_;mDJ6H`)KxOS$Gm(p7NgMJbUWirEI0f-=?YIj=l2LH{+-sBl>0)4Gazo zzowXfdMK5ao?gVHwBV)SHnrttv!SUe5&ZtWy6@cn>Y&zR^D9LADyM!nYN}V&vAN!N zymYDP+v~H;0sU@s7le8#kIy5C1UAI2Wq($ZxEx!fJkM z=;6+@YjgARLLWcA!L$3K`P}4y&4cXJtzY9bIry6^1@4Uec*hYM8cGpW`)&6SRCm0`xuk`DN< zeYo3>-yqfWR!y`T!?br(lTl1uT=c;pcB5CP0xKJ*M%o0kAGY-DmWBeq1v z+G1uPx;VwPZmx)0J zX1o+m$jQlNI}O~aol<*~z+JyM5EoHgU(dGJ`PV)a8otwYvi}+ueXBC>lO23|an^jvW9-QMx|vHaB?k9XSz3wX}#H`Mib$s@-j+IFRlAM1TD2{HkyT9**s%DmpsrQ%v5jcyx5t z-o1Noa_wAoce7@L?5V@Yj;ZSC+^OU~`1t+%_gXohj~qF|mZgxt;xZ1wCH$q*ii)oB zo{y5dcdNx6dnS426X&fnF6V6C-xj=m_(ecSNX4U_XUV^ubNOeKVX7&of@_A3VAtav zE~Dne%*>2=iQgL8OPw@Fj~@M!YNj+ZKcAG`GO=+aZ<^oaZoWA2-s{Buh(6De((--@krkpfoU`Eq5JHljjl37wVfgT&~>M9J`v zclE(EH*Vfk!JEu2Ew7J{J4_D$;MuGhu6H##cY9(pjh9`)qQOkjc!$3LeTn&Y)7${G zf}+w=nu3LK20uow6_KxcYvxA^LVmov!f@oGqNnL>-;PV2D$n_AqPv%STe2>&==AtA z3D8q%y>lL7T@g7r*<&rUxI~COd+Lw%h~JexHYNWsD9QAxZ~wtpS0~QU(9oFU7L^yb zxGE~nv{V0TD-gg(YqP^y65<+Vh;YA`FSlLy_O`IFxOVcLbJ6F|Yw@pxNd_+^%?l}5 ztgg&PQ{BB0lOMMilwM!SV1D-OYE4Z|>5JcuXfNYcLOX_8M-XWI6O4cAp!FqloH$eADX6(9_d1`un%< z-McI~P6I1YvFBT|)}V7}{)iPtzmatr-7q&b6f`sA;>*3S`rURF@}=kYt)<0k`1@Ps z^h;43kBSIirF}i_xgQ^Fx2n9i^;}&%Gfv6vyLYMW?Ci+zo1Y#re7trles-cyc;iMI zG)VQMM^z3TqH}k5x9@(>{OPIO#G|PnA3rh_6&3Zj=IwQGbYx~@^9=}~MMIC5_Z;v3 zKv{aS%7AZaX~`(vawWz5+pE(?IZj(C?G*wm-@$1*kj0|bKzp$l+XY;YAE+P~A zdZ@GtJQvqt_~v`elU-)`PnTh?KX$;6vFNFsqqOOoVD*TBs*LTfdnWp-E1ENH$6DP+ z1SKWYV&7TW%MJx$Th$$(P90RqDYQ1rsTl2BX<%Z)xO(;KQ)kb175g%bj*i9?0}@=k zeoExhJhqxSpb`_o=+JC@s*rPO-9JC)lKgw6YKJ=)_ z-Fm0Z0h9W@c_v23jT@YH_pdY@ZKtA)8VfyZ|E-c!Y#Zow$W!54LlRS{x?V}1piorB zqdKS60h5p326FaV9@4ntZECN>BK03XAvGf?RI5qu#=qPb@#oh5AKci#+}Hnn*@%C= zod54vL;PRa#sA{X{wMcJa7o^MJWL5y6bn17EgFUmSNAVfRb3aTBJ*R-pSq0d^Xp&= z<+knmyiX{!j{H5l^U%t`^h?<3Kj)(Vt;NiNnDU4LqQof1)A^Le)vffEl@yABrIh&5 zI{$+@$5#%Au|}JScn7Nc%w0bEt=!Qj`iQVwcW>{$^Mu~c4oyJLTNy|E0vlNd=u|D>iZ*9Ao_)z4Ywq5{1&tQI0T$P1Etm)B-cm=bBj1`R|eTA{X zTpP>F&z)>swchHt#j2KgPad`%ToQe!5;~oumkb z(rRo=Cd}(6Qg*s!45jB6|KGfC7u`AVcO5fIweZ}qTf z7w5v?!<aTuaj*~c(wx+7(cBRoYIfViOY&PT5++WB~pZluXb7$=Do@Fu{&I`F- zzZs<*!=XTl)Wl7GiM{o6+EGj5Zh}JapO3!RLI(-u_U(BwqsCOinDzW54{qzIicn_7 z`oDE8itn~zy%$FHrGWhYM!(V~g7f#!hlvW||9pegf}rbl5m!!J)lf6JpyfiX!+(Ak z?`&BmAS9DqYWZjB%eAOk4%n151?cAg{qxC5IwzVp{JHfVPT0oq zJNbTG=e>*mHmsUx^ydDp{kB*RCxT-EY+{3m$ST7WlcM@0!_cs>m6U+MK<)V)%$_dH z2o)C>Su|SfEvbA zj`I*bK@eaLVtG@bZ=5nVtQeEmPk+2`UH_(U0PSDaeMWLU0XRQBd=lfjD5iJ&m*)r6fdTQg+|uW~g8BAZ7W>d~FS?mz+f(g4^U3R|NJ*MS z$taM#e7#$?`|OU`qmQm%Y4hOFjXS3AcK*y65r7q6VEgvUFfnxv4d0_82eh=-?YS~+ zLiGHM(b=ke;J{dmU4h`HO)JaG%k7<=%O6TveR+4q?$+GZ`Kb#x`Su!QJFlRo4hug1 z>J**l{LmZG>U8s>6*qb1bfTvw!{XvL{~8(^`ku$rI=GSh(rlkmu1k6vq42NpY?OQU0po=hS7!ab*Dr(Fw;6AckzxDr z;lsI_s4_=eLzX#il*W(X84Pg-5T{I64QJ z9`}!&%U@^QF|-pL%)kT2$H&_{I-aL_fW6Ml_7M>^u^K#eNrp_?+S=+zj*wW;Vxg(; zmGxH*?()iSo~BSziQMr@mJo%j z;~N3VlImx1Vo0#3a`0dg>Va>M6E^pNi3u;exKX5bKMjS7ifYTYZT0b07k}gwm6xkp zyG`^~We)Bo514}69y$WJ2q&B>a{NINsITGG^PZlH*c)vrpf`zH6DR}i76(MGlKiuNkErhZFFJKGK zyE-9)@|3bFXKZS2wyBGFyu+zqD;JasU@^3K3Y>%IYpg~|x>d#KU{b0mjTk79GByD> zoemi7+qg9ORnw@zQ^6p`B*FPq1-9=JYMPN}S8}uPJ_09W<%ts~K*o9lD|TIIX7%*+ zw0Cs$e)5FJ;H9xIsBWT%hP}OHR8*9?om~jXt+Z_ekoe zBkO~ihbO4fjNnsRUYKB+mjeOt=DYRk%82R1hn%GoQe;b_R7dt!gOJ&SeTYsI{ysjm zMInmkn$iSKOiaF{Ssb`!*45d$f`fzO1(w^c;?AZc_5-z>_@=b9_wT>fIt*orXjnekfdU{oQ~MlK?h3u@kVKB zhWf>e7v~yN_;~sFe23m#{6SpT6V-pXO6Gi%BtTthNftLx8~Hq(8_9UUBW z=shWgMMe7`nmR2lT=n$;v7({eAZnrA*qS8EH{U!5UjdF+MMl7Lg&4Bbms8Y=WD1M@RFM70| zY*s7|G(%uu;6oYP`{k*Jz!EGiJ9qvHvr$zITQ<3N?b-}VG2CrF^AR}=4ovK#|0wgM zk{HkEp7w!$6`!0cEFdT-u<1A-Xxb_YBfq?ng&Pi!S0(dxhjAqiR#w`UV19)gIOBzF zZOgs_KQ@dM7>OG+EzPtEY+4_uP{p|ntdh^`xpZ-@TdIcpUQY!NWWbFxxRYh=_SZeO|Yt*ahFOcA1 z;Ks2M0Z4D^8`uB({#N(2$HSPIjc7>EG3w5>WWAJllEOCFm>ME@z%Md8oAby6iI)Sz zb=)s%>GK$OHu?2lIK|2q6`6c=NUHw#XvYDHS7v5r<>KX^4J#?%voA#(51l%7s=fBb z5mMo^tMcwiG2YKAyJCW17!(diWO9!nejA3D%DuJ!&c- zlqiuPMfCICnPCvNLf%~&5&bofI?&S6^1>}B3x#fZcBL)fBOoZKH8ni=bQC~du-mzP)i;%>;EpwY#K zW*)wLd!09I+H`RK^UvGzF1JELFxvyu7MB+1v(cBlDp$0Ipi0>>R4}7gzj$n<{{g2h z=Fr`Be0;Z@hnkBQd*dVv%gE>_sPE94Wq5d1RAbTsJctk@>Gi*L&f`QJ`N5j12nd_wwYgBdp|#80N*-o@ww;Y1BT1; zm_9EqMfALS{d%lMP2f2?by`M-kFW1aTzi0*7v)xLm-WQAV~?fj0CUmB4BsjNTj2YX zu78FoM$5=p3aPm!QJ)Zd_~=m)#wpO0QJ!mN@%DwB4PpB2IsD`yeYb0AtGJfiO^Lcx zvw~N7lTKmtJ<-1*87Im7{{22w`1XfW{Wa06p@+w%rJ};fE=tOJXhedWH?RKLnCg!z zE)K1FvYQlNF)G~#73=P0XUjg{x9m2O=g&+Ct8Uo2lLe!al+IX#G3Z$!box(DI-$p{ zaP0k56m>9YwD*afWmowv=pAK{QtmasudGytPzeN;Ed6TGnw6E6tY{oVm1lb{CweIA zC%=5@+YW$oz`P1Yb{1xs&y;%M*u?dGd~0^^-o1b}IfH-F z&s1@fC*1{G77 zm5_o9)bIoQ_EE^Qb*Abuoo_J-qH}Y3&whSdL`vV?-KW4SO1^&8<$O674_Ns;BZC!VsqRn& zV27sq3mwRJKfB!%0a{n5q@+;1AewI-A~HVLbv2p-_+wzF+jl5u>h|yxJ)ND`eHl1} zq@`KmjsOuyj6vfpuB@bg{`@&QftJFS&(gD7r&!nlU zs_MWew28dUs1+fNe)$Ei9j9oycbyMFGkKntrq$#L0KakbW~;gZCwBRP zC}~m|9~c;rC6?sx+_^)lfJVoUcVJ8uahSPlpPt83lme9A4h_AAktHZBOda7qPUls* zeFZpP%@B`j&)xF)_$?M6dO{S5Ia&b!;$;!da7K!9O%FMVird-*aJTB}>V>egE=}}mkRTWUsr1*k*Gckf z8tz#k6JujV5U@idB0?}mA&a*IfEJ6|*3{IH{f_vIvG-v^%~z5Tx01?&(Zem8BQ=|F z9G}mOVyLfUXZKsp#82`dY`zpwy02Bl6vIhNOCkKX1?vCw;zLZnPJaQxAT)HHsqpN$V@AEU8h@aZt ztJWyvD8apBUcdf29g7GlK|fUV$f=!tSX-;(K3StSgZVIqf4Z>X`;CkM_L?YxD%YzO z=Z_{(9Pk73>;w2d+h$1aASV}B!bu%dj&3GX%tPO2d#?!X-OF=jq_qs|kWRq(vN&}+ z*O`}MlIO~XX<3H3kjXvU+1KaKEUa2sQ^On^8+)!fV=HVEUmR-E4Mg7r7^wHugai#b z%N8qPqs-qazb8*@*Dm&LC$fBSlN;9urolPt0O3Tx(|Q|lKp*&8FXi@TvrvuvJ$+r> zNnWOTu7rM*h}niHz~sXfd*$SczI{91S`t?e))AaQk3OeG&;MJ z<+p61ef##Uy^~XEh|*HL*4{37oMk9C3Z>0`Vhz8%OXN5&+1oHSe9W9QjvgH?<1mYa z?XpEo?5nk8*7cLAm2g#X!kfvF+irGc1E>)E12?C)Wj)*)Rm#epK10Y^y** zG3N_Sk8HCtTrXEWm1Duw-w$RCBIyP1%p8@9#$JdUpH}LS)xUgPT2Mgh%NskhuuPlo z?>~M>*|o}pMo@4XebqM>f4IB(($ufxpCXh5)(6ti(b3I-RnhFH4KTx0aKAms6O@RK_JU!OHjI*u?hhx*odrbY=WrMHQdr(si}5h zsdtI=Mef>@f3tL!yIxrT3#A zn9(_qE(p_|nCyA&F*EvH@<%(I162!)=aQ$(-oK~Cdx(+}eytldVG)tdu`@9yGa6m7a)@G_U%mI=Bmp}i@r6AYuB!|@qUtsaq~RCp-cC0 zcnsJ;o9FyC)2lsfn7J(bdT5#9+9n&NuV80q@2^kdzySBd!nVWytji%n2EV^0c3N6m zCSG2vfs^y+!@x{qMXLp9TY8i<;o(P5a>H3dBW5R^b7kcfIafx4Z5vZMpwpzic~gPO z%Nh)_NTqfB=V`p33|Ii$L^Qn#;@BP)8QK2m<@oPx9HYXDiq-J*R9s#6h>MGVd3{#X zX|V3l4Dsz}cQ;L>gLFSSxCQVvZ1b&8)$(_kSXxGrjXquRGwOkc*jwmTt3 z7|5Jg(VcT_Z0vn?wf|8O7F8NR06Msig>A(0wxi2;LYnLK^p_Va)vA6Ed{rB&7Pv6@ zoop!sl{@JO(knwH11k$|+qQ-o{==3nTM9ot+F9>8@YZ>Vn-U2KB|81&@#D@H4@{K- z^x*jG`zc|RikgYF0VW48EG&o`c3*8EWiP;)uDA%#VoW|k`3v9kJ@!I0lyvIJqIY9o*W{X-PzXo1z@$D1%gH*VTQMOm6ISk@=rW=!DDQ8uAUbEDr(-#VX=TbJ!uvS0rces{I{^POa1+z9!iBUJ^*&l zk@X@rmPEN}X)|_u_aLK4m}GllfW@1vI4N)(3mnt7+=F=k=A-x8x092T zqCw7m-Q62DZ&vH7;T*TjtA5p5-36HSB9rIrSmRQybDBeW!p`*=E@#RY#X7b=boAaHHt-81S^7#uF$Y2Q0D80G6UbS-tE%XdV~?ijJn+W)K|EFS2} zFfETcva_<*8O?MJ4A5PNdbo7YPi=BaXPy6com5+3&gwUCxlA4j z%@w(}N1rYFTV?l-nvx=!1X25){th^Dx2@etgW{K9#HK|;@*=Z!sJNq?!tn* ztehNO(ij-_TC@x(63TfI===RKCt*21-FsziM@I*@KiO2t19Bdq)l(VkY=2 zNzFn3!Drj0_vkHaRaI4+(k!UScujUrP85#1jhS%j!N?S?n1!uI`Z7DaHQfZJ`{g3C zTK!VwO=skG>{!3su2tprnJQBMvvKE#n)lqG1l-r8=TeB`?B~kL>qkX&=L-_==QU2f z4kNB5+ps-XW4LbH34MToo$TZ7O}&<1J^(vV)X-o+>v?L&qvrZbr$YjeJ+&u_G*wks z!B%F=VuK)zQC}RNiD@VLtMSyq=*~_{G;NAk!^aS02e^0b+I9GM!_%ivZ$Eu1?z6$y z*OwF@e*OBzs!BcJjoaVC=Cn$bp|3KodM)1`Jqt4epQ2C@#?jfrDUKKek}(MHl(e>* zc5NSMK79DFvaxZqN;O?uTI!#_EC#c2cqemwAL>Jbn55|QBsB2 z|Mc0jn&$`nZQlIOcr0VP3hS`|X;L{)KVI`7EVa4fmSavXf`_Ys?{*$)Al(Q2VGO z^S``)8WhCvIb4A>`@_uaZv+MTDu2*dNOc4LwC~jhh_29 z=hS5Ms)BU;2M6gfQtsWm*N*=q(8SfCgQmgFc;VbF#+|^z&mSBWC6xX4t#u}SeS&Tr zDdm8Fk`9rp!aJc>EKtjqiNog9i_a)oaLo#`yGs(u0*H!z!hvDk$XD2dzZ#LvJ zFfcI6v|%GB11Vqv7m;}q^V6q&!G=uUIj@0wZ}isTg(UZX=|}+3VT`USlo))LeTfqGkvQ@~hZ1Hc9e#@B$8J;NFq24x`GSb5#$PF0 zoS(M1aN%UntG5tpMb)a4p@w-)`RZf}GHv8nbdR6PcKtnQ(fvNO>8;~tFb=OTU$g>L zgmRH>G=6iOj2Dg;t)A(R4yp4D5=$X9k!sdo*wJ@^XDaD z6+lhuOqiPypPio<21{v7HLC#E)FJ>@p~;p&8pqrfZ8OVr{hj79@BFJdlL0*ww=G&( zSxMRgj9fct$X0*c>YyQMS}-sK#nE#dK5|6g)GZ|V*Hw9%jI6Bk0A^wPvCe}}l?Z;o zT>!x%pyVJV2I;1&2OS`*L_`SSB#~T|#GmVlK$_s-U{Vb#@hIw*bq`*4x_an8m zT*o@g$k=18TuDhu4IIqL!FqBb={-_y_Iw2`PxoAOotd4rKy=Qgp#LDDs!B%UNG%#P zgOr;gxhBdRv~pm2hKa=k#ut6~KnJ=hxoel7o+!z4SZ{bD-xLMbQ|vGTc>F@SrWWMb z$KSsT99+w2@a>+6ApocPshV@RS&xig`e)RLN@+ zl2`PN#CDx-iGA3T!ceN3^Qd=!OeIFRBm^oHzM6%;nvl?e&7tZxxw$JqZKpojEXl9I zT%cJ^tS&)}54p1I&z|wYw7vn;i?kWg7AtI1^J25|tHARES2C~{B47se33)z!-C**` zcUhHTrA|el#~>ugUY+~)Y7;_69bH|*td5@dz`#MbwMKjBLOL73#bbLqw&-H&=($HC!`ZU+g?3aLFf4h6MN zX=+sheaM)x7u9qw0(iI9#-A*Q%nZ;DiNX_+U`#y%m3(>m1&#nUQ@db7s zMkW`s5gA4#nW912%N_)ygK^JMAm;Bse=aBM4Az5>k5BvSYQ?W}?vLMZ5v?mB<)p9W zzY!5R+o9)rjHKikWr|<@*Wk)jRGPnh_?ufJ{yn&6o%vKkK}o@Rbf?9SMTSAgI8wM-rEci7Djq@LD3FM&+Nd$jhJ2g+`?QnwLW(1xm&)UR zH^3Je9v-G$v&Q$$n=2Yug6h&FL*swgy}x$of;AZ*A_4;5f4S6M?bwYpTtnk7-ai3@ zReu6`Dk>qJ?**dbB2%#x=A(ZTag(xt;x&!9$A630==dU_#Qw*W{kO1QV)37N4H;JW zx9=L1ToA1F`giZ~Nc}LWd=f%JJM>JDN1;3Xf-U<|MA8*<*>i6pX@j6lf`T7er~&V_ z5RB0|AevN2?r2i{m!v;ST&}d7wg1me>+z6p=rTPd#a$y{s~N3 zi0haMC8g!+Jv2VGiM^y)C2GnAJ%<#^CGMu*>Z?UmzSq))i(}$)48TgpBr5;Tq(9Cp0}gaEPyz~;i3?lf_UG_J7${rYy{$l2~yR0 zJjB*rl9s{}4(fkyFp~ihCK;rxsy*(}{=L{xi7{r`zyJBapIAix?q3s*f6{3A(4jdm ze$S>77CsZBr@+R>Mkz$_@cKUiu}!9$F(IU?M7??~5@`XGD@H!6=)+Qgd*^^y8sk2= zcnFel;eBGc_thV`D1iO%4qgyUyp9Mzg^c0Id}nd3$-F?cuv75PHUGmqN%Vx*4s+y} z{&_KSVh#RzQJ0VY4Q!z}ys-EG{CJ1C(4(UwNdw3Jro5P$YhD+H{!`5VX=d|J{_tN{ z0QLRP>%Wxo{JUVJbOA==Q&*>l$xMz+=t}<4(N-E)ZcTo{EV75OLDCTNB=6r(1%C`c z{DvR_6WOA~uQ(k#`pisMNRoUbG;d^;r{!}rTy0>E>JLA`VX@_4nJXB4Z5B_WUblh$t77h}0)h=-p8N5LPiF~*N3Igm0(i1ciPZ^hK zZnc8eL@)#HCnt-;g(O`}PDOWFTpC;O$EvC_@GN`aB=T3VoH^xPByZkijW|+KQ6Y?{ zAA;Dob&go5sMME^`u8)FE*dbc#hEjH82Ho_s9I^r@FGi3K8PXHvcGmOv;gwrkxS_q z9$u@ftBb+kN#dVU7!0saLNN42b7L_N`0z&Nn@oqP+-5)|9kUbCi5Dt_w3I)|q#%EC4U!v8R zzUR4dK+W+{5i0VcqV|~x3k$OVHYC+OZ&W9rIf9O<$j_4i7GZn_cJX!L4pW$4h1{GjoKG)a}Voe}8|SQECeG_-iUcL=jkkO{C$e{?8FgA$RVqpB!p2wAkYdK8@P< zhEpx?G8(zcO?_? z1@GK#3rfr})7R6JblJFRdZeuap-Kx|+oT;Cy?KG%xZwD``4ASjh>Md_5J8EA3q$cL zSYA3ID*{CnV#K;7eqP?2!1#=qPPdWhI=bq?4p*>xrKayUX+lqH90xCj=wGW_)aps2yRUhPq>X_#3sowwG(}3 zHN_;?g_*QMy6PF=C4!SI_Y-kDp{oC1mUCJy2O(J&#v7}&97lJHYi zl@wq-1zxfgr8QN3Z=7a?pZZ2+Xc(+n6Rj#CU#IwWO-zz^%xGWEO;491pSQ!)9b}b& z_#(h?5bC|QvGEP`B`Uj$F5C!me`qwMZWoV-Ee zWN->FsFdfeH9@~{uVfhO3zCPY`955fe-DekjF0f8Xf^7g9}hpIPv%xNsJp!-PWK0@Klyd;xrI{3nua01NUP& zxl`5A-7Qd^BWxr3%d`y){2*$P0t!f@zEO$+%Q%}6*j>ayV!D6j<^n|!3d+Kj?VXD^ zqy@tcGqbQzV?K}uMN;EeVk+LZk1oIi|N4aX>RNOoCgFNn@P8JKCz}hKtd@;tn*9>3~S2 z*=aW^DJk{Chl^o8vt~i1N?O>-%xoRf!BkT~_Ang9F7z&X&9EIicC5p#tzNwv`_W*| zbVxv-K-K{kGZ|V2`F^SQx<}jE+B!ZyUdz=3kFESo>lV36WHupE89n~7iuBU&+`0b1 z)b)^&&|7HOq-#euCh)tCCiHe;DJf<^{)Jb^u5Z?u?aT}0j~h~mg=~gnkH~de@s@Pb z$^!dBax;k-=O)i98Gt6!qsbBt*_W)yM$*`ezC}fGc6Q$5kqXswC4(Z%;t_H7u9t6G zi=ly#kG9g4ZL_kpM6empXf|;V3l2nMdj+BHKnladconGKu;5S*9R>S#%Eh+)HJdkY zmOl4|LZ0|bU8|77ut5GV2oDk}j11r9mxEFa*wBurkq`injEW*3-yzf5$mXIAZ05Cv z4i_q{W(k&Ql(CuAYJX&D z8IMAGg=+V_ZpWXbyB3TQ7)xk8AiT@@Q^{TXecH0`WE}Vc2^k-rsCxhN> z4p)wJtPvPK{E=rGdJdMCykNjLLH3}Ud=ED=sePr#~I7zGr0;aG~! zL)r7g!;E;yjKwnD$RYy4ObDr@uZj!~nGO-80f`$5fMJjvyZ0{@19q-nW&2-!X6pYO rfB!GS_5bj8<$t);f8~j +Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 20.3% (394/1945, wired) - **Correctness** — all **9 BerlinMOD queries × 3 streaming forms = 27/27 cells** reproduce the batch result on every platform; the Flink snapshot output is **byte-identical** to the batch oracle. @@ -55,7 +55,7 @@ Three layers, increasing in strength: |---|--:|--:|--:| | **MobilityFlink** | **1,945 callable** | 1,945 | **100.0 %** | | **MobilityKafka** | **1,945 callable** | 1,945 | **100.0 %** | -| **MobilityNebula** | 57 systest-confirmed | 384 wired · compile-verified | 19.7 % wired | +| **MobilityNebula** | 59 systest-confirmed | 394 wired · compile-verified | 20.3 % wired | Flink and Kafka share one generated JNR-FFI facade, so their callability is identical; it is confirmed by a type-aware per-method harness that invokes **every** facade method From dc0cdf5dad4648f31cff1778e08cf4e1c9932676 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sun, 24 May 2026 16:09:15 +0200 Subject: [PATCH 22/22] docs(streaming): MobilityNebula 406 wired, 61 callable (cross-vehicle temporal combinators) --- profile/images/coverage_charts.py | 2 +- profile/images/streaming-coverage.png | Bin 52275 -> 52304 bytes profile/streaming-parity.md | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/profile/images/coverage_charts.py b/profile/images/coverage_charts.py index efde43d..686968c 100644 --- a/profile/images/coverage_charts.py +++ b/profile/images/coverage_charts.py @@ -56,7 +56,7 @@ def hbar(path, title, rows, subtitle): [ ("MobilityFlink", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), ("MobilityKafka", 100.0, "100.0% · 1945 / 1945 · proven", "#1a9988", True), - ("MobilityNebula", 20.3, "20.3% · 394 / 1945 · wired", "#1a9988", False), + ("MobilityNebula", 20.9, "20.9% · 406 / 1945 · wired", "#1a9988", False), ], "of 1,945 streamable MEOS functions (solid = proven callable · hatched = wired)", ) diff --git a/profile/images/streaming-coverage.png b/profile/images/streaming-coverage.png index 938790222fdf3c98d9936b0ea1b7efed811659b3..017df63d088dfd29fefc3674376ceb0e9dec066f 100644 GIT binary patch delta 16433 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 delta 16404 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 QcpOzau}U%Lu%Y+=0$3?MaR2}S diff --git a/profile/streaming-parity.md b/profile/streaming-parity.md index 321bab8..a9e60ef 100644 --- a/profile/streaming-parity.md +++ b/profile/streaming-parity.md @@ -18,7 +18,7 @@ deploy on real workloads?* — with reproducible evidence rather than assertion. Coverage of the **1,945 streamable MEOS functions** — confirmed callable on a real `libmeos`: -Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 20.3% (394/1945, wired) +Streaming MEOS function coverage of 1,945 streamable functions: MobilityFlink 100.0% (1945/1945, proven callable), MobilityKafka 100.0% (1945/1945, proven callable), MobilityNebula 20.9% (406/1945, wired) - **Correctness** — all **9 BerlinMOD queries × 3 streaming forms = 27/27 cells** reproduce the batch result on every platform; the Flink snapshot output is **byte-identical** to the batch oracle. @@ -55,7 +55,7 @@ Three layers, increasing in strength: |---|--:|--:|--:| | **MobilityFlink** | **1,945 callable** | 1,945 | **100.0 %** | | **MobilityKafka** | **1,945 callable** | 1,945 | **100.0 %** | -| **MobilityNebula** | 59 systest-confirmed | 394 wired · compile-verified | 20.3 % wired | +| **MobilityNebula** | 61 systest-confirmed | 406 wired · compile-verified | 20.9 % wired | Flink and Kafka share one generated JNR-FFI facade, so their callability is identical; it is confirmed by a type-aware per-method harness that invokes **every** facade method