From b49a68a288cd7babf1d80436180521d5e0c3b31d Mon Sep 17 00:00:00 2001 From: Codex Date: Sat, 5 Sep 2026 17:59:12 +0900 Subject: [PATCH 1/6] fix(ontology): align filtered JSON-LD assertions with visible edges --- docs/adr/0184-ontology-provenance-explorer.md | 8 +++ docs/storybook-inventory.md | 2 +- .../components/OntologyExplorer.stories.tsx | 28 ++++++++++ frontend/src/ontologyLayout.test.ts | 53 +++++++++++++++++++ frontend/src/ontologyLayout.ts | 23 +++++++- 5 files changed, 112 insertions(+), 2 deletions(-) diff --git a/docs/adr/0184-ontology-provenance-explorer.md b/docs/adr/0184-ontology-provenance-explorer.md index 5b9c254af..8452c775b 100644 --- a/docs/adr/0184-ontology-provenance-explorer.md +++ b/docs/adr/0184-ontology-provenance-explorer.md @@ -28,6 +28,14 @@ 8. Node type uses shape plus text (never color alone). Every edge carries both endpoint type codes and IDs, so heterogeneous catalogs remain unambiguous even if UUIDs collide. Keyboard users can select every visible node and edge. The graph SVG has no enclosing ARIA `img`; native browser text layout wraps complete node labels instead of truncating or estimating character widths. Exact-value table, CSV, JSON-LD, and print expose the same authorized visible graph. JSON-LD emits the source-to-target property assertion directly and describes its evidence-bearing edge as an RDF reified statement with exact `rdf:subject`, `rdf:predicate`, and `rdf:object`; it does not make the edge resource itself the relationship subject. JSON-LD represents system time with `prov:generatedAtTime` and non-null validity bounds as OWL-Time `time:Instant` values using `time:inXSDDateTimeStamp`; it omits unavailable bounds rather than inventing them. 9. Synthetic Storybook frames cover desktop, narrow exact-value-first, node drawer, edge drawer, legend, empty, truncated, denied, stale, and rejected states. No confidential Figma content enters the repository. Storybook inventory records the implementation surface; frame IDs are not copied from the confidential design file (ADR 0002). +**Search/export clarification (2026-09-05):** Search filters direct JSON-LD +assertions by the retained typed source, property IRI, and typed target, not +only by the presence of their subject node. A retained node must not carry a +relationship excluded from the visible edge list, including after continuation +has combined singleton assertions into arrays. Keep its labels, times, truth, +and authorized Voice derivation metadata intact. This is a projection of the +already-authorized response, not a new authorization or inference boundary. + **Consequences:** - Event Lineage and ontology neighborhood stay distinct product capabilities. diff --git a/docs/storybook-inventory.md b/docs/storybook-inventory.md index 62c5f9cf3..f48aa05b5 100644 --- a/docs/storybook-inventory.md +++ b/docs/storybook-inventory.md @@ -13,7 +13,7 @@ operator-facing control you can click before changing product CSS. | `Post/Connect perspective` | Choose one unassigned Voice and an explicit evidence state, then record the open post as its evidence. `Ready`, `Completed`, and `NarrowViewport` cover untouched, successful, and mobile states. | `VoiceAssignmentForm`, `admin-form`, `btn-primary` | | `Evidence/CitationChip` | Click a cited title to open that source post. | `--color-chip-border`, `--radius-chip`, `CitationChip` | | `Evidence/OrganizationAliasChip` | Click a cataloged org; the parenthetical is the unique corroborated SKOS companion. | `--color-chip-border`, `--radius-chip`, `OrganizationAliasChip` | -| `Evidence/OntologyExplorer` | Distinguish Event Lineage from typed ontology facts, inspect Post/Person/Organization/Team/Project shapes, token-backed secondary cues, and truth labels, then open authorized evidence. The named exact-values region supports keyboard scrolling; `LongLabelsAndEvidenceTable` proves complete labels wrap without character-count truncation, while `CombinedVoiceEvidence` covers primary-plus-additional Voice assignments and focuses the evidence action distinct from the carrying-Post action. Desktop, narrow, drawers, legend/filter, empty, truncated, partial, denied, stale, and rejected scenes cover ADR 0184/0222/0256 states. The audited combined-Voice renders are `docs/screenshots/voice-combination-export-desktop.png` and `docs/screenshots/voice-combination-export-mobile.png`. | `OntologyExplorer`, `ontologyLayout`, `--ontology-node-*-fill`, `--color-table-border` | +| `Evidence/OntologyExplorer` | Distinguish Event Lineage from typed ontology facts, inspect Post/Person/Organization/Team/Project shapes, token-backed secondary cues, and truth labels, then open authorized evidence. The named exact-values region supports keyboard scrolling; `LongLabelsAndEvidenceTable` proves complete labels wrap without character-count truncation, while `FilteredExportEvidence` exercises search and JSON-LD download parity for direct assertions and `CombinedVoiceEvidence` covers primary-plus-additional Voice assignments and focuses the evidence action distinct from the carrying-Post action. Desktop, narrow, drawers, legend/filter, empty, truncated, partial, denied, stale, and rejected scenes cover ADR 0184/0222/0256 states. The audited combined-Voice renders are `docs/screenshots/voice-combination-export-desktop.png` and `docs/screenshots/voice-combination-export-mobile.png`. | `OntologyExplorer`, `ontologyLayout`, `--ontology-node-*-fill`, `--color-table-border` | | `Evidence/OntologyExplorer` | Distinguish Event Lineage from typed ontology facts, inspect Post/Person/Organization/Team/Project/Work-evidence shapes, token-backed secondary cues, and truth labels, then open authorized evidence. The populated scene includes one assertion-backed occupational construct without a person-trait promotion. The named exact-values region supports keyboard scrolling; `LongLabelsAndEvidenceTable` proves complete labels wrap without character-count truncation. Desktop, narrow, drawers, legend/filter, empty, truncated, partial, denied, stale, and rejected scenes cover ADR 0184/0222/0255 states. | `OntologyExplorer`, `ontologyLayout`, `--ontology-node-*-fill`, `--color-table-border` | | `AnalysisRun/CutoffKnownBody` | Read the cutoff-known sentence, then compare it with the live body below. | `--color-accent-border`, `--space-panel-block`, `--radius-panel`, `CutoffKnownBody` | | `Analysis/LineageEntityPicker` | Choose which corp to reconstruct, then click Request a lineage reconstruction. | `--space-control-gap`, `--size-control-min`, `--radius-control`, `LineageEntityPicker` | diff --git a/frontend/src/components/OntologyExplorer.stories.tsx b/frontend/src/components/OntologyExplorer.stories.tsx index 5e192ff0f..106dcae76 100644 --- a/frontend/src/components/OntologyExplorer.stories.tsx +++ b/frontend/src/components/OntologyExplorer.stories.tsx @@ -320,6 +320,34 @@ type Story = StoryObj; export const DesktopNeighborhood: Story = {}; +export const FilteredExportEvidence: Story = { + args: { + neighborhood: { + ...demoNeighborhood, + nodes: demoNeighborhood.nodes.slice(0, 3), + edges: demoNeighborhood.edges.slice(0, 2), + exact_value_rows: demoNeighborhood.exact_value_rows.slice(0, 2), + jsonld: { + ...demoNeighborhood.jsonld, + "@graph": [ + ...demoNeighborhood.nodes.slice(0, 3).map((node) => ({ + "@id": `https://contextualwisdomlab.github.io/LineageWeave/ontology#node/${node.node_type_code}/${node.node_id}`, + "@type": node.ontology_class_iri, + })), + ...demoNeighborhood.edges.slice(0, 2).flatMap((edge) => { + const source = `https://contextualwisdomlab.github.io/LineageWeave/ontology#node/${edge.source_node_type_code}/${edge.source_node_id}`; + const target = `https://contextualwisdomlab.github.io/LineageWeave/ontology#node/${edge.target_node_type_code}/${edge.target_node_id}`; + return [ + { "@id": source, [edge.ontology_property_iri]: { "@id": target } }, + { "@id": `lw:edge/${edge.edge_id}` }, + ]; + }), + ], + }, + }, + }, +}; + export const CombinedVoiceEvidence: Story = { args: { neighborhood: combinedVoiceNeighborhood }, play: ({ canvasElement }) => { diff --git a/frontend/src/ontologyLayout.test.ts b/frontend/src/ontologyLayout.test.ts index ed8e3b0fa..07cf7132d 100644 --- a/frontend/src/ontologyLayout.test.ts +++ b/frontend/src/ontologyLayout.test.ts @@ -116,6 +116,59 @@ function payload(): OntologyNeighborhoodPayload { } describe("ontologyLayout", () => { + it.each([false, true])("removes filtered direct assertions before or after page accumulation: %s", (accumulated) => { + const source = payload(); + const postIri = `${ONTOLOGY_NAMESPACE}node/node_post/${POST_ID}`; + const personIri = `${ONTOLOGY_NAMESPACE}node/node_person/${PERSON_ID}`; + const corpIri = `${ONTOLOGY_NAMESPACE}node/node_corporate_entity/${CORP_ID}`; + const withAssertions = { + ...source, + jsonld: { "@graph": [ + { "@id": postIri, "rdfs:label": "Demo public post" }, + { "@id": postIri, [source.edges[0].ontology_property_iri]: { "@id": personIri } }, + { "@id": personIri, "rdfs:label": "Test Person" }, + { "@id": personIri, [source.edges[1].ontology_property_iri]: { "@id": corpIri } }, + { "@id": corpIri, "rdfs:label": "Demo Corp" }, + { "@id": `lw:edge/${source.edges[0].edge_id}` }, + { "@id": `lw:edge/${source.edges[1].edge_id}` }, + ] }, + }; + const input = accumulated ? accumulateNeighborhoodPages(withAssertions, withAssertions) : withAssertions; + const before = JSON.stringify(input); + const result = filterNeighborhood(input, "Demo public")!; + expect(result.edges).toEqual([source.edges[0]]); + expect(JSON.stringify(result.jsonld)).not.toContain(corpIri); + expect(JSON.stringify(result.jsonld)).not.toContain(source.edges[1].ontology_property_iri); + expect(JSON.stringify(result.jsonld)).toContain(personIri); + expect(JSON.stringify(result.jsonld)).toContain("Test Person"); + expect(JSON.stringify(input)).toBe(before); + }); + + it("filters targets by the retained edge even when both endpoints remain visible", () => { + const source = payload(); + const postIri = `${ONTOLOGY_NAMESPACE}node/node_post/${POST_ID}`; + const personIri = `${ONTOLOGY_NAMESPACE}node/node_person/${PERSON_ID}`; + const corpIri = `${ONTOLOGY_NAMESPACE}node/node_corporate_entity/${CORP_ID}`; + const relation = source.edges[0].ontology_property_iri; + const first = { ...source.edges[0], truth_status_code: "truth_authoritative" }; + const second = { ...source.edges[0], edge_id: "other", target_node_id: CORP_ID, + target_node_type_code: "node_corporate_entity" }; + const connector = { ...source.edges[1], truth_status_code: "truth_authoritative" }; + const result = filterNeighborhood({ + ...source, + edges: [first, second, connector], + jsonld: { "@graph": [{ "@id": postIri, + [relation]: [{ "@id": personIri }, { "@id": corpIri }], + "prov:wasDerivedFrom": { "@id": "https://example.test/authorized-evidence" }, + }] }, + }, "truth_authoritative")!; + expect(result.nodes).toHaveLength(3); + expect(result.jsonld["@graph"]).toEqual([{ "@id": postIri, + [relation]: [{ "@id": personIri }], + "prov:wasDerivedFrom": { "@id": "https://example.test/authorized-evidence" }, + }]); + }); + it("keeps evidence-bearing voice assignments in CSV, filters, and page accumulation", () => { const source = payload(); const assignment = { diff --git a/frontend/src/ontologyLayout.ts b/frontend/src/ontologyLayout.ts index 63575b030..9e1467420 100644 --- a/frontend/src/ontologyLayout.ts +++ b/frontend/src/ontologyLayout.ts @@ -263,6 +263,19 @@ export function filterNeighborhood( `${ONTOLOGY_NAMESPACE}voice-assignment/${assignment.post_id}/${assignment.voice_type_code}`, ]), ); + const visibleEdgeIds = new Set(edges.map((edge) => edge.edge_id)); + const directTargets = new Map>(); + for (const edge of payload.edges) { + const key = JSON.stringify([ + ontologyNodeId(edge.source_node_type_code, edge.source_node_id), + edge.ontology_property_iri, + ]); + const targets = directTargets.get(key) ?? new Set(); + if (visibleEdgeIds.has(edge.edge_id)) { + targets.add(ontologyNodeId(edge.target_node_type_code, edge.target_node_id)); + } + directTargets.set(key, targets); + } const graph = payload.jsonld["@graph"]; const jsonld = Array.isArray(graph) ? { @@ -274,7 +287,15 @@ export function filterNeighborhood( (visibleIds.has(item["@id"]) || visibleNodeIds.has(item["@id"]) || visibleVoiceIds.has(item["@id"])), - ), + ).map((item) => Object.fromEntries(Object.entries(item).flatMap(([key, value]) => { + const targets = directTargets.get(JSON.stringify([item["@id"], key])); + if (!targets) return [[key, value]]; + const values = (Array.isArray(value) ? value : [value]).filter((target) => + typeof target === "object" && target !== null && + typeof target["@id"] === "string" && targets.has(target["@id"]), + ); + return values.length ? [[key, Array.isArray(value) ? values : values[0]]] : []; + }))), } : payload.jsonld; return { From 76fcd6207f549f8cbe710c8a2f8c87227f3712ee Mon Sep 17 00:00:00 2001 From: Codex Date: Sat, 5 Sep 2026 18:05:01 +0900 Subject: [PATCH 2/6] docs(gaps): record exact-head export validation and protected queue --- docs/development-loop-20260905-filter.json | 3140 +++++++++++++++++ docs/product-technical-gap-baseline.md | 126 +- ...ntology-filter-export-20260905-desktop.png | Bin 0 -> 78491 bytes ...ontology-filter-export-20260905-mobile.png | Bin 0 -> 52536 bytes 4 files changed, 3263 insertions(+), 3 deletions(-) create mode 100644 docs/development-loop-20260905-filter.json create mode 100644 docs/screenshots/ontology-filter-export-20260905-desktop.png create mode 100644 docs/screenshots/ontology-filter-export-20260905-mobile.png diff --git a/docs/development-loop-20260905-filter.json b/docs/development-loop-20260905-filter.json new file mode 100644 index 000000000..d9b46550b --- /dev/null +++ b/docs/development-loop-20260905-filter.json @@ -0,0 +1,3140 @@ +{ + "observed_at_utc": "2026-09-05T08:48:46.186264+00:00", + "main": "83eba56149eb802cd63642c507c324c9976ec78e", + "scope": "Remote metadata only; last 100 reviews and first 100 threads per PR. Authority paths reuse earlier exact immutable heads only; null means not re-audited. No review bodies or runtime records.", + "prs": [ + { + "pr": 934, + "title": "fix(ontology): preserve singleton relations across export pages", + "head": "3060dd7000791160c2bcc98351af129899ff32ff", + "base": "fix/voice-export-authority-20260828", + "base_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "draft": false, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0256-evidence-bearing-voice-combinations.md", + "status": "modified" + } + ] + }, + { + "pr": 933, + "title": "fix(actions): preserve draft and close cancellation contract", + "head": "de4e6cf9a48b042af0bb1128fa9b194abd1952a5", + "base": "docs/public-surface-deepwiki", + "base_sha": "00e90e03ae1afb7f13ae843dd578694d0f72b325", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [] + }, + { + "pr": 932, + "title": "feat(i18n): consume published Customer Master screen copy", + "head": "fe01453821105e62274a754797f6bf51a2b9ae7d", + "base": "feat/i18n-versioned-translation-ledger", + "base_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0362-versioned-ui-translation-ledger.md", + "status": "modified" + } + ] + }, + { + "pr": 929, + "title": "feat: establish versioned UI translation ledger foundation", + "head": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "base": "main", + "base_sha": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": false, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 3, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0362-versioned-ui-translation-ledger.md", + "status": "added" + }, + { + "path": "migrations/0246_ui_translation_ledger.sql", + "status": "added" + }, + { + "path": "migrations/0247_ui_translation_truncate_guard.sql", + "status": "added" + }, + { + "path": "migrations/rollback/0246_ui_translation_ledger.sql", + "status": "added" + }, + { + "path": "migrations/rollback/0247_ui_translation_truncate_guard.sql", + "status": "added" + } + ] + }, + { + "pr": 928, + "title": "feat(reports): leftover-map origin on leftover-map pair independently of leftover-map leftover-axis leftover-map origin (v2.116.0)", + "head": "322b58247e933592ceb6d6eab6cac258ee5335cd", + "base": "feat/leftover-map-axis-origin-badge-v21150", + "base_sha": "34595e41ee65b89a468efeebf64fee86eff881d9", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0358-leftover-map-axis-origin-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0359-leftover-map-list-origin-badge.md", + "status": "added" + } + ] + }, + { + "pr": 927, + "title": "feat(reports): leftover-map origin on leftover-map leftover-axis independently of leftover-map comparison leftover-axis leftover-map origin (v2.115.0)", + "head": "34595e41ee65b89a468efeebf64fee86eff881d9", + "base": "feat/leftover-map-compare-axis-origin-badge-v21140", + "base_sha": "ede308929b20f24a56c5ff3ae2211dd84d20f3ae", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0346-leftover-map-axis-tick-origin-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0357-leftover-map-compare-axis-origin-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0358-leftover-map-axis-origin-badge.md", + "status": "added" + } + ] + }, + { + "pr": 926, + "title": "feat(reports): leftover-map origin on leftover-map comparison leftover-axis independently of leftover-map comparison graphic leftover-map origin (v2.114.0)", + "head": "ede308929b20f24a56c5ff3ae2211dd84d20f3ae", + "base": "feat/leftover-map-compare-plot-origin-badge-v21130", + "base_sha": "76ebcb10a72955a68c616c02e6e0732db0800f93", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0345-leftover-map-compare-axis-tick-origin-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0356-leftover-map-compare-plot-origin-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0357-leftover-map-compare-axis-origin-badge.md", + "status": "added" + } + ] + }, + { + "pr": 925, + "title": "docs(release): define immutable supply-chain boundary", + "head": "8cbaad528c9aaa8d4e356db1577b932fa85ac686", + "base": "main", + "base_sha": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0361-immutable-release-supply-chain-boundary.md", + "status": "added" + }, + { + "path": "docs/adr/README.md", + "status": "modified" + } + ] + }, + { + "pr": 921, + "title": "feat(reports): leftover-map origin on leftover-map comparison graphic independently of leftover-map graphic leftover-map origin (v2.113.0)", + "head": "76ebcb10a72955a68c616c02e6e0732db0800f93", + "base": "feat/leftover-map-plot-origin-badge-v21120", + "base_sha": "d54c5611cc693bb7a85e9164814761417ccb563e", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0344-leftover-map-compare-plot-tick-origin-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0356-leftover-map-compare-plot-origin-badge.md", + "status": "added" + } + ] + }, + { + "pr": 920, + "title": "feat(reports): leftover-map origin on leftover-map graphic independently of leftover-map comparison leftover-pair leftover-map criterion leftover-map origin leftover-map item coordinates (v2.112.0)", + "head": "d54c5611cc693bb7a85e9164814761417ccb563e", + "base": "feat/leftover-map-compare-list-criterion-origin-badge-v21110", + "base_sha": "a91d2ec56bad922f9159e17649f77d229a0f98d3", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0343-leftover-map-plot-tick-origin-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0354-leftover-map-compare-list-criterion-origin-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0355-leftover-map-plot-origin-badge.md", + "status": "added" + } + ] + }, + { + "pr": 919, + "title": "refactor(operator): name bounded entry points and validate Keyman admissions", + "head": "caf8ee0f576eb23dc80d907fccfdcd6a4cecb232", + "base": "fix/contextual-orchestrator-owner-boundary", + "base_sha": "e5711282c48cc20d0a88fb56a9e382d500989c72", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0082-bounded-keyman-backfill.md", + "status": "modified" + } + ] + }, + { + "pr": 918, + "title": "feat(reports): leftover-map origin on leftover-map comparison leftover-pair leftover-map criterion leftover-map item coordinates independently of leftover-map comparison leftover-pair leftover-map post leftover-map origin leftover-map person coordinates (v2.111.0)", + "head": "a91d2ec56bad922f9159e17649f77d229a0f98d3", + "base": "feat/leftover-map-compare-list-post-origin-badge-v21100", + "base_sha": "8192b48560a919c800ec47927adc966179a2b572", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0342-leftover-map-compare-list-criterion-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0354-leftover-map-compare-list-criterion-origin-badge.md", + "status": "added" + } + ] + }, + { + "pr": 917, + "title": "feat(reports): leftover-map origin on leftover-map comparison leftover-pair leftover-map post leftover-map person coordinates independently of leftover-map pair leftover-map post leftover-map origin leftover-map person coordinates (v2.110.0)", + "head": "8192b48560a919c800ec47927adc966179a2b572", + "base": "feat/leftover-map-list-criterion-origin-badge-v21090", + "base_sha": "7978e92561e16a3ea4e2837fef1f35fe0bec3f3c", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0341-leftover-map-compare-list-post-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0353-leftover-map-compare-list-post-origin-badge.md", + "status": "added" + } + ] + }, + { + "pr": 916, + "title": "feat(reports): leftover-map origin on leftover-map pair leftover-map criterion leftover-map item coordinates independently of leftover-map pair leftover-map post leftover-map origin leftover-map person coordinates (v2.109.0)", + "head": "7978e92561e16a3ea4e2837fef1f35fe0bec3f3c", + "base": "feat/leftover-map-list-post-origin-badge-v21080", + "base_sha": "371bb82cea8437f907249d6e8b166f63dfe5bb8e", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 1, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0340-leftover-map-list-criterion-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0352-leftover-map-list-criterion-origin-badge.md", + "status": "added" + } + ] + }, + { + "pr": 915, + "title": "fix(lineage): bind dynamic evaluations to substantive criteria", + "head": "8c74712f2af4acf76871c71a9fd72c6aa2912f4a", + "base": "feat/dichotomous-measurement-policy", + "base_sha": "c316bfbde8644feda7e49579d43cc162e99b0bad", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0355-dynamic-evaluation-lineage.md", + "status": "added" + } + ] + }, + { + "pr": 914, + "title": "refactor(activity): qualify Valkey activity identifiers", + "head": "64340c0a86f876f32d0a37ef17321f3d9b993818", + "base": "main", + "base_sha": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": false, + "review_decision": "REVIEW_REQUIRED", + "auto_merge": true, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0363-canonical-activity-stream-identity.md", + "status": "added" + }, + { + "path": "docs/adr/README.md", + "status": "modified" + } + ] + }, + { + "pr": 913, + "title": "feat(reports): leftover-map origin on leftover-map pair leftover-map post leftover-map person coordinates independently of leftover-map comparison graphic leftover-map post leftover-map origin leftover-map person coordinates (v2.108.0)", + "head": "371bb82cea8437f907249d6e8b166f63dfe5bb8e", + "base": "feat/leftover-map-compare-plot-criterion-origin-badge-v21070", + "base_sha": "2ac677bae522eb1925edc6bd105f1f57a287f73e", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 1, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0339-leftover-map-list-post-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0351-leftover-map-list-post-origin-badge.md", + "status": "added" + } + ] + }, + { + "pr": 912, + "title": "feat(reports): leftover-map origin on leftover-map comparison graphic leftover-map criterion leftover-map item coordinates independently of leftover-map comparison graphic leftover-map post leftover-map origin leftover-map person coordinates (v2.107.0)", + "head": "2ac677bae522eb1925edc6bd105f1f57a287f73e", + "base": "feat/leftover-map-compare-plot-post-origin-badge-v21060", + "base_sha": "f2a1860185714d2921162a754425065d867bcce6", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0336-leftover-map-compare-plot-criterion-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0350-leftover-map-compare-plot-criterion-origin-badge.md", + "status": "added" + } + ] + }, + { + "pr": 911, + "title": "fix(license): replace psycopg2 synchronous PostgreSQL boundary", + "head": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "base": "main", + "base_sha": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": false, + "review_decision": "REVIEW_REQUIRED", + "auto_merge": true, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0366-synchronous-postgresql-default-tls.md", + "status": "added" + } + ] + }, + { + "pr": 909, + "title": "fix(customer): keep malformed Customer Master hierarchies visible", + "head": "e82aed38c0997588529e21fe0e1bf4159f3c198c", + "base": "main", + "base_sha": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0364-authenticated-browser-request-boundary.md", + "status": "added" + }, + { + "path": "docs/adr/0365-customer-master-malformed-hierarchy.md", + "status": "added" + }, + { + "path": "docs/adr/README.md", + "status": "modified" + } + ] + }, + { + "pr": 908, + "title": "docs: refresh public README and Pages navigation", + "head": "00e90e03ae1afb7f13ae843dd578694d0f72b325", + "base": "main", + "base_sha": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [] + }, + { + "pr": 907, + "title": "fix(customer): keep malformed affiliate hierarchies visible", + "head": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "base": "main", + "base_sha": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": false, + "review_decision": "REVIEW_REQUIRED", + "auto_merge": true, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [] + }, + { + "pr": 904, + "title": "refactor(ddd): remove obsolete direct CalDAV boundary", + "head": "09d7be51a6b599769fb78371c9995a99d7df6974", + "base": "main", + "base_sha": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [] + }, + { + "pr": 903, + "title": "fix(ui): make lineage group order locale-independent", + "head": "e325b3f63fdb9c34a7c62ae58045ec36e34b1879", + "base": "main", + "base_sha": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [] + }, + { + "pr": 902, + "title": "feat(measurement): add dichotomous instrument policy contract", + "head": "c316bfbde8644feda7e49579d43cc162e99b0bad", + "base": "fix/contextual-orchestrator-owner-boundary", + "base_sha": "e5711282c48cc20d0a88fb56a9e382d500989c72", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0301-dichotomous-measurement-policy.md", + "status": "added" + } + ] + }, + { + "pr": 901, + "title": "docs(gaps): refresh protected delivery evidence", + "head": "d44cd875a93cb929b6e30b744976d2c19e67d981", + "base": "fix/voice-export-authority-20260828", + "base_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [] + }, + { + "pr": 899, + "title": "refactor(ddd): restore contextual-orchestrator ownership boundary", + "head": "e5711282c48cc20d0a88fb56a9e382d500989c72", + "base": "main", + "base_sha": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0300-contextual-orchestrator-owner-boundary.md", + "status": "added" + } + ] + }, + { + "pr": 897, + "title": "feat(analysis): seed Running TEPP accepted receipts (v2.29.0)", + "head": "c4194085f7bc0c7383f994da81d6a8146b695dc8", + "base": "main", + "base_sha": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0219-tepp-terminal-result-lifecycle.md", + "status": "modified" + } + ] + }, + { + "pr": 893, + "title": "feat(reports): leftover-map origin on leftover-map comparison graphic leftover-map post leftover-map person coordinates independently of leftover-map graphic leftover-map post leftover-map origin leftover-map person coordinates (v2.106.0)", + "head": "f2a1860185714d2921162a754425065d867bcce6", + "base": "feat/leftover-map-plot-post-origin-badge-v21050", + "base_sha": "c941929c7244f64e31e5ceca8b3c6f6bcb1e3541", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0337-leftover-map-compare-plot-post-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0349-leftover-map-compare-plot-post-origin-badge.md", + "status": "added" + } + ] + }, + { + "pr": 892, + "title": "feat(reports): leftover-map origin on leftover-map graphic leftover-map post leftover-map person coordinates independently of leftover-map criterion leftover-map item coordinates (v2.105.0)", + "head": "c941929c7244f64e31e5ceca8b3c6f6bcb1e3541", + "base": "feat/leftover-map-plot-criterion-origin-badge-v21040", + "base_sha": "47dd988d6b5cdea713b163b40702235b65af5ffe", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0338-leftover-map-plot-post-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0348-leftover-map-plot-post-origin-badge.md", + "status": "added" + } + ] + }, + { + "pr": 891, + "title": "feat(reports): leftover-map origin on leftover-map graphic leftover-map criterion leftover-map item coordinates independently of leftover-map person coordinates (v2.104.0)", + "head": "47dd988d6b5cdea713b163b40702235b65af5ffe", + "base": "feat/leftover-map-axis-tick-origin-badge-v21030", + "base_sha": "4bfb490d3e2bd8dd74caabaf2922ac3f6755749a", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0335-leftover-map-plot-criterion-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0346-leftover-map-axis-tick-origin-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0347-leftover-map-plot-criterion-origin-badge.md", + "status": "added" + } + ] + }, + { + "pr": 889, + "title": "feat(reports): leftover-map leftover-axis origin ticks independently of leftover-map axis share and leftover-map singular values (v2.103.0)", + "head": "4bfb490d3e2bd8dd74caabaf2922ac3f6755749a", + "base": "feat/leftover-map-compare-axis-tick-origin-badge-v21020", + "base_sha": "7637fc8bbe165be297794a74187aa1065e82486c", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0330-leftover-map-axis-tick-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0334-leftover-map-axis-tick-share-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0345-leftover-map-compare-axis-tick-origin-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0346-leftover-map-axis-tick-origin-badge.md", + "status": "added" + } + ] + }, + { + "pr": 888, + "title": "feat(ask): stage exact authorized semantic index", + "head": "e5f38f3bda1caa1d48975204918c994a6a3dff3f", + "base": "feat/dashboard-case-metrics", + "base_sha": "f40e4ed8020a7db4099730d558da942a0f331614", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 3, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0224-canonical-compose-project.md", + "status": "modified" + }, + { + "path": "docs/adr/0272-twenty-millisecond-read-slo.md", + "status": "modified" + }, + { + "path": "docs/adr/0279-global-ask-exact-semantic-index.md", + "status": "added" + }, + { + "path": "docs/adr/README.md", + "status": "modified" + }, + { + "path": "migrations/0274_exact_embedding_projection.sql", + "status": "added" + }, + { + "path": "migrations/0275_global_ask_exact_authorization_version.sql", + "status": "added" + } + ] + }, + { + "pr": 887, + "title": "feat(reports): leftover-map comparison leftover-axis origin ticks independently of leftover-map axis share and leftover-map singular values (v2.102.0)", + "head": "7637fc8bbe165be297794a74187aa1065e82486c", + "base": "feat/leftover-map-compare-plot-tick-origin-badge-v21010", + "base_sha": "4a31a41f9036cad4ba35ed16b8fdf1c1212e4847", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0329-leftover-map-compare-axis-tick-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0333-leftover-map-compare-axis-tick-share-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0344-leftover-map-compare-plot-tick-origin-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0345-leftover-map-compare-axis-tick-origin-badge.md", + "status": "added" + } + ] + }, + { + "pr": 886, + "title": "feat(reports): leftover-map comparison graphic leftover-map axis origin ticks independently of leftover-map axis share and leftover-map singular values (v2.101.0)", + "head": "4a31a41f9036cad4ba35ed16b8fdf1c1212e4847", + "base": "feat/leftover-map-plot-tick-origin-badge-v21000", + "base_sha": "7a6c0384f4d82544541b6af70cf178c51ed60d62", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0328-leftover-map-compare-plot-tick-axis-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0331-leftover-map-compare-plot-tick-share-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0343-leftover-map-plot-tick-origin-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0344-leftover-map-compare-plot-tick-origin-badge.md", + "status": "added" + } + ] + }, + { + "pr": 885, + "title": "feat(reports): leftover-map graphic leftover-map axis origin ticks independently of leftover-map axis share and leftover-map singular values (v2.100.0)", + "head": "7a6c0384f4d82544541b6af70cf178c51ed60d62", + "base": "feat/leftover-map-compare-list-criterion-coordinates-v2990", + "base_sha": "bcbb7ce03f92304ccdc34fb014a8db8e3bf8a659", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0327-leftover-map-plot-tick-axis-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0332-leftover-map-plot-tick-share-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0342-leftover-map-compare-list-criterion-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0343-leftover-map-plot-tick-origin-badge.md", + "status": "added" + } + ] + }, + { + "pr": 884, + "title": "feat(reports): leftover-map item coordinates on leftover-map comparison leftover pair leftover-map criterion independently of leftover-map comparison leftover pair leftover-map post leftover-map person coordinates (v2.99.0)", + "head": "bcbb7ce03f92304ccdc34fb014a8db8e3bf8a659", + "base": "feat/leftover-map-compare-list-post-coordinates-v2980", + "base_sha": "bdd48e23a16358b91a652e45c4373c6f45e389fa", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 1, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0267-leftover-map-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0302-leftover-map-compare-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0341-leftover-map-compare-list-post-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0342-leftover-map-compare-list-criterion-coordinates.md", + "status": "added" + } + ] + }, + { + "pr": 883, + "title": "feat(reports): leftover-map person coordinates on leftover-map comparison leftover pair leftover-map post independently of leftover-map comparison leftover pair leftover-map criterion leftover-map item coordinates (v2.98.0)", + "head": "bdd48e23a16358b91a652e45c4373c6f45e389fa", + "base": "feat/leftover-map-list-criterion-coordinates-v2970", + "base_sha": "094d1a0c8bcfd4b351f9665c47a84c510cbab94d", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 3, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0267-leftover-map-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0302-leftover-map-compare-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0340-leftover-map-list-criterion-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0341-leftover-map-compare-list-post-coordinates.md", + "status": "added" + } + ] + }, + { + "pr": 882, + "title": "feat(reports): leftover-map item coordinates on leftover-map pair leftover-map criterion independently of leftover-map pair leftover-map post leftover-map person coordinates (v2.97.0)", + "head": "094d1a0c8bcfd4b351f9665c47a84c510cbab94d", + "base": "feat/leftover-map-list-post-coordinates-v2960", + "base_sha": "167888d669ba1b44c7dd0209ab26c9be9f19bf93", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 4, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0267-leftover-map-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0339-leftover-map-list-post-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0340-leftover-map-list-criterion-coordinates.md", + "status": "added" + } + ] + }, + { + "pr": 881, + "title": "feat(reports): leftover-map person coordinates on leftover-map pair leftover-map post independently of leftover-map pair leftover-map criterion leftover-map item coordinates (v2.96.0)", + "head": "167888d669ba1b44c7dd0209ab26c9be9f19bf93", + "base": "feat/leftover-map-plot-post-coordinates-v2950", + "base_sha": "c69459a3597a8a8af618417ce2c2a57a3114930b", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 3, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0267-leftover-map-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0268-leftover-map-graphic-display.md", + "status": "modified" + }, + { + "path": "docs/adr/0304-leftover-map-compare-graphic.md", + "status": "modified" + }, + { + "path": "docs/adr/0334-leftover-map-axis-tick-share-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0337-leftover-map-compare-plot-post-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0338-leftover-map-plot-post-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0339-leftover-map-list-post-coordinates.md", + "status": "added" + } + ] + }, + { + "pr": 880, + "title": "feat(reports): leftover-map person coordinates on leftover-map graphic leftover-map post markers independently of leftover-map comparison graphic leftover-map post markers (v2.95.0)", + "head": "c69459a3597a8a8af618417ce2c2a57a3114930b", + "base": "feat/leftover-map-compare-plot-post-coordinates-v2940", + "base_sha": "d9972c260b1864e0b6391cbf050686e0bdd73359", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0267-leftover-map-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0268-leftover-map-graphic-display.md", + "status": "modified" + }, + { + "path": "docs/adr/0304-leftover-map-compare-graphic.md", + "status": "modified" + }, + { + "path": "docs/adr/0334-leftover-map-axis-tick-share-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0337-leftover-map-compare-plot-post-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0338-leftover-map-plot-post-coordinates.md", + "status": "added" + } + ] + }, + { + "pr": 879, + "title": "feat(reports): leftover-map person coordinates on leftover-map comparison graphic leftover-map post markers independently of leftover-map criterion leftover-map item coordinates (v2.94.0)", + "head": "d9972c260b1864e0b6391cbf050686e0bdd73359", + "base": "feat/leftover-map-compare-plot-criterion-coordinates-v2930", + "base_sha": "617b97126a14337a4848f2b5663ada381ae693c0", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 3, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0267-leftover-map-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0268-leftover-map-graphic-display.md", + "status": "modified" + }, + { + "path": "docs/adr/0304-leftover-map-compare-graphic.md", + "status": "modified" + }, + { + "path": "docs/adr/0334-leftover-map-axis-tick-share-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0336-leftover-map-compare-plot-criterion-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0337-leftover-map-compare-plot-post-coordinates.md", + "status": "added" + } + ] + }, + { + "pr": 878, + "title": "feat(reports): leftover-map item coordinates on leftover-map comparison graphic leftover-map criterion markers independently of leftover-map post \u03be markers (v2.93.0)", + "head": "617b97126a14337a4848f2b5663ada381ae693c0", + "base": "feat/leftover-map-plot-criterion-coordinates-v2920", + "base_sha": "89ed56b17acec187fd8e5f756c6b9a6a8f00438c", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0267-leftover-map-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0268-leftover-map-graphic-display.md", + "status": "modified" + }, + { + "path": "docs/adr/0304-leftover-map-compare-graphic.md", + "status": "modified" + }, + { + "path": "docs/adr/0334-leftover-map-axis-tick-share-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0335-leftover-map-plot-criterion-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0336-leftover-map-compare-plot-criterion-coordinates.md", + "status": "added" + } + ] + }, + { + "pr": 877, + "title": "feat(reports): leftover-map origin on leftover-map comparison graphic leftover-map axis ticks independently of leftover-map axis share and leftover-map singular values (v2.92.0)", + "head": "86b8eaab48a4b47610d539bb941b97eb24b7e951", + "base": "feat/leftover-map-axis-tick-share-badge-v2910", + "base_sha": "d19f1fdc18cf16bac0e80bf6ae4257b831a4a619", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 1, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0335-leftover-map-compare-plot-tick-origin-badge.md", + "status": "added" + } + ] + }, + { + "pr": 876, + "title": "feat(reports): leftover-map item coordinates on leftover-map graphic leftover-map criterion markers independently of leftover-map post \u03be markers (v2.92.0)", + "head": "89ed56b17acec187fd8e5f756c6b9a6a8f00438c", + "base": "feat/leftover-map-axis-tick-share-badge-v2910", + "base_sha": "d19f1fdc18cf16bac0e80bf6ae4257b831a4a619", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0267-leftover-map-coordinates.md", + "status": "modified" + }, + { + "path": "docs/adr/0268-leftover-map-graphic-display.md", + "status": "modified" + }, + { + "path": "docs/adr/0334-leftover-map-axis-tick-share-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0335-leftover-map-plot-criterion-coordinates.md", + "status": "added" + } + ] + }, + { + "pr": 875, + "title": "feat(reports): leftover-map axis share on leftover-axis ticks independently of leftover-map singular values (v2.91.0)", + "head": "d19f1fdc18cf16bac0e80bf6ae4257b831a4a619", + "base": "feat/leftover-map-compare-axis-tick-share-badge-v2900", + "base_sha": "ba58c21a92966fe098988e528020d5528978d06c", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0148-leftover-map-axis-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0330-leftover-map-axis-tick-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0331-leftover-map-compare-plot-tick-share-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0332-leftover-map-plot-tick-share-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0333-leftover-map-compare-axis-tick-share-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0334-leftover-map-axis-tick-share-badge.md", + "status": "added" + } + ] + }, + { + "pr": 874, + "title": "feat(reports): leftover-map axis share on leftover-map comparison leftover-axis ticks independently of leftover-map singular values (v2.90.0)", + "head": "ba58c21a92966fe098988e528020d5528978d06c", + "base": "feat/leftover-map-plot-tick-share-badge-v2890", + "base_sha": "923bcfe8a9146286ec3098adb784f55ffe32a78e", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0148-leftover-map-axis-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0329-leftover-map-compare-axis-tick-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0330-leftover-map-axis-tick-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0331-leftover-map-compare-plot-tick-share-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0332-leftover-map-plot-tick-share-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0333-leftover-map-compare-axis-tick-share-badge.md", + "status": "added" + } + ] + }, + { + "pr": 873, + "title": "feat(reports): leftover-map axis share on leftover-map graphic leftover-map axis ticks independently of leftover-map singular values (v2.89.0)", + "head": "923bcfe8a9146286ec3098adb784f55ffe32a78e", + "base": "feat/leftover-map-compare-plot-tick-share-badge-v2880", + "base_sha": "7bdc562b222ab7681ff6b929a7b3fb2cd8068a3c", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 3, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0148-leftover-map-axis-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0320-leftover-map-compare-plot-ticks.md", + "status": "modified" + }, + { + "path": "docs/adr/0324-leftover-map-plot-axis-singular.md", + "status": "modified" + }, + { + "path": "docs/adr/0327-leftover-map-plot-tick-axis-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0328-leftover-map-compare-plot-tick-axis-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0329-leftover-map-compare-axis-tick-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0330-leftover-map-axis-tick-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0331-leftover-map-compare-plot-tick-share-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0332-leftover-map-plot-tick-share-badge.md", + "status": "added" + } + ] + }, + { + "pr": 872, + "title": "feat(reports): leftover-map axis share on leftover-map comparison graphic leftover-map axis ticks independently of leftover-map singular values (v2.88.0)", + "head": "7bdc562b222ab7681ff6b929a7b3fb2cd8068a3c", + "base": "feat/leftover-map-axis-tick-badge-v2870", + "base_sha": "e9e4c2a622219bfbddfe71c74b14483f7b36aa5c", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0148-leftover-map-axis-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0320-leftover-map-compare-plot-ticks.md", + "status": "modified" + }, + { + "path": "docs/adr/0326-leftover-map-compare-plot-axis-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0327-leftover-map-plot-tick-axis-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0328-leftover-map-compare-plot-tick-axis-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0329-leftover-map-compare-axis-tick-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0330-leftover-map-axis-tick-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0331-leftover-map-compare-plot-tick-share-badge.md", + "status": "added" + } + ] + }, + { + "pr": 871, + "title": "feat(reports): leftover-map singular values on leftover-axis ticks independently of leftover-map axis share (v2.87.0)", + "head": "e9e4c2a622219bfbddfe71c74b14483f7b36aa5c", + "base": "feat/leftover-map-compare-axis-tick-badge-v2860", + "base_sha": "b086d97675586ee83f5478d7b4e3bf84b0a5da8c", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0148-leftover-map-axis-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0329-leftover-map-compare-axis-tick-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0330-leftover-map-axis-tick-badge.md", + "status": "added" + } + ] + }, + { + "pr": 870, + "title": "feat(reports): leftover-map singular values on leftover-map comparison leftover-axis ticks independently of leftover-map axis share (v2.86.0)", + "head": "b086d97675586ee83f5478d7b4e3bf84b0a5da8c", + "base": "feat/leftover-map-compare-plot-tick-axis-badge-v2850", + "base_sha": "98a29e4adf0daad8bd30c945e41d45922051312d", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0148-leftover-map-axis-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0328-leftover-map-compare-plot-tick-axis-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0329-leftover-map-compare-axis-tick-badge.md", + "status": "added" + } + ] + }, + { + "pr": 869, + "title": "feat(reports): leftover-map singular values on leftover-map comparison graphic leftover-map axis ticks independently of leftover-map axis share (v2.85.0)", + "head": "98a29e4adf0daad8bd30c945e41d45922051312d", + "base": "feat/leftover-map-plot-tick-axis-badge-v2840", + "base_sha": "5218a5c0e6821451efdfac0c1286ef7273081af7", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0148-leftover-map-axis-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0320-leftover-map-compare-plot-ticks.md", + "status": "modified" + }, + { + "path": "docs/adr/0326-leftover-map-compare-plot-axis-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0327-leftover-map-plot-tick-axis-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0328-leftover-map-compare-plot-tick-axis-badge.md", + "status": "added" + } + ] + }, + { + "pr": 868, + "title": "feat(reports): leftover-map singular values on leftover-map graphic leftover-map axis ticks independently of leftover-map axis share (v2.84.0)", + "head": "5218a5c0e6821451efdfac0c1286ef7273081af7", + "base": "feat/leftover-map-compare-plot-axis-badge-v2830", + "base_sha": "cf7bb55db1ba098e4ab264605634a686e4664d56", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0148-leftover-map-axis-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0326-leftover-map-compare-plot-axis-badge.md", + "status": "modified" + }, + { + "path": "docs/adr/0327-leftover-map-plot-tick-axis-badge.md", + "status": "added" + } + ] + }, + { + "pr": 867, + "title": "feat(reports): leftover-map comparison graphic leftover-map axis leftover-map singular values as leftoverMapComparePlotAxisBadge (v2.83.0)", + "head": "cf7bb55db1ba098e4ab264605634a686e4664d56", + "base": "feat/leftover-map-axis-singular-only-v2820", + "base_sha": "593b8d8246c73226e224d2a9d251668649cbb54f", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 1, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0148-leftover-map-axis-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0321-leftover-map-compare-plot-singular.md", + "status": "modified" + }, + { + "path": "docs/adr/0322-leftover-map-axis-singular.md", + "status": "modified" + }, + { + "path": "docs/adr/0323-leftover-map-compare-axis-singular.md", + "status": "modified" + }, + { + "path": "docs/adr/0324-leftover-map-plot-axis-singular.md", + "status": "modified" + }, + { + "path": "docs/adr/0325-leftover-map-axis-singular-only.md", + "status": "modified" + }, + { + "path": "docs/adr/0326-leftover-map-compare-plot-axis-badge.md", + "status": "added" + } + ] + }, + { + "pr": 866, + "title": "feat(reports): leftover-map singular values on leftover-axis report badges independently of leftover-map axis share (v2.82.0)", + "head": "593b8d8246c73226e224d2a9d251668649cbb54f", + "base": "feat/leftover-map-plot-axis-singular-v2810", + "base_sha": "a3613acf8cafac056850ec7ebc45f6d77f77a074", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0148-leftover-map-axis-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0322-leftover-map-axis-singular.md", + "status": "modified" + }, + { + "path": "docs/adr/0323-leftover-map-compare-axis-singular.md", + "status": "modified" + }, + { + "path": "docs/adr/0324-leftover-map-plot-axis-singular.md", + "status": "modified" + }, + { + "path": "docs/adr/0325-leftover-map-axis-singular-only.md", + "status": "added" + } + ] + }, + { + "pr": 865, + "title": "feat(reports): leftover-map singular values on leftover-map graphic-display axes (v2.81.0)", + "head": "a3613acf8cafac056850ec7ebc45f6d77f77a074", + "base": "feat/leftover-map-compare-axis-singular-v2800", + "base_sha": "52b3597e5c6b825f988a9c8a7c68ae1653535982", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0148-leftover-map-axis-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0322-leftover-map-axis-singular.md", + "status": "modified" + }, + { + "path": "docs/adr/0323-leftover-map-compare-axis-singular.md", + "status": "modified" + }, + { + "path": "docs/adr/0324-leftover-map-plot-axis-singular.md", + "status": "added" + } + ] + }, + { + "pr": 863, + "title": "feat(reports): leftover-map singular values on comparison leftover-axis badges (v2.80.0)", + "head": "52b3597e5c6b825f988a9c8a7c68ae1653535982", + "base": "feat/leftover-map-axis-singular-v2790", + "base_sha": "f24b664ce88bb2b3898fcaa0fd0ee7f69c5e12f7", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0148-leftover-map-axis-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0322-leftover-map-axis-singular.md", + "status": "modified" + }, + { + "path": "docs/adr/0323-leftover-map-compare-axis-singular.md", + "status": "added" + } + ] + }, + { + "pr": 862, + "title": "feat(reports): leftover-map singular values on leftover-axis report badges (v2.79.0)", + "head": "f24b664ce88bb2b3898fcaa0fd0ee7f69c5e12f7", + "base": "feat/leftover-map-compare-plot-singular-v2780", + "base_sha": "3aac452eef781f3c1a5da258cd1c0c548e4930e6", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0148-leftover-map-axis-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0321-leftover-map-compare-plot-singular.md", + "status": "modified" + }, + { + "path": "docs/adr/0322-leftover-map-axis-singular.md", + "status": "added" + } + ] + }, + { + "pr": 861, + "title": "feat(reports): leftover-map singular values on grouping comparison graphic (v2.78.0)", + "head": "3aac452eef781f3c1a5da258cd1c0c548e4930e6", + "base": "feat/leftover-map-compare-plot-ticks-v2770", + "base_sha": "40fa5bdbfb9223a7ca89fccea47451a419d81048", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 3, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0320-leftover-map-compare-plot-ticks.md", + "status": "modified" + }, + { + "path": "docs/adr/0321-leftover-map-compare-plot-singular.md", + "status": "added" + } + ] + }, + { + "pr": 860, + "title": "feat(reports): leftover-map coordinate ticks on grouping comparison graphic (v2.77.0)", + "head": "40fa5bdbfb9223a7ca89fccea47451a419d81048", + "base": "feat/leftover-map-compare-plot-distance-v2760", + "base_sha": "9ba8535327bb2d42d5305d84017e6cd08a110c68", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 4, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0319-leftover-map-compare-plot-distance.md", + "status": "modified" + }, + { + "path": "docs/adr/0320-leftover-map-compare-plot-ticks.md", + "status": "added" + } + ] + }, + { + "pr": 859, + "title": "feat(reports): leftover-map distance on grouping comparison graphic (v2.76.0)", + "head": "9ba8535327bb2d42d5305d84017e6cd08a110c68", + "base": "feat/leftover-map-compare-plot-rank-v2750", + "base_sha": "4b9184fd83f6749e25384d7bcf5d9d7721437b77", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0318-leftover-map-compare-plot-rank.md", + "status": "modified" + }, + { + "path": "docs/adr/0319-leftover-map-compare-plot-distance.md", + "status": "added" + } + ] + }, + { + "pr": 858, + "title": "feat(reports): leftover-map rank on grouping comparison graphic (v2.75.0)", + "head": "4b9184fd83f6749e25384d7bcf5d9d7721437b77", + "base": "feat/leftover-map-compare-plot-expected-v2740", + "base_sha": "ade9ed5cc2f0530eb62d2d473d14d2ffb41eddba", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0315-leftover-map-compare-plot-residual.md", + "status": "modified" + }, + { + "path": "docs/adr/0316-leftover-map-compare-plot-observed.md", + "status": "added" + }, + { + "path": "docs/adr/0317-leftover-map-compare-plot-expected.md", + "status": "added" + }, + { + "path": "docs/adr/0318-leftover-map-compare-plot-rank.md", + "status": "added" + } + ] + }, + { + "pr": 857, + "title": "feat(reports): leftover expected on grouping comparison graphic (v2.74.0)", + "head": "ade9ed5cc2f0530eb62d2d473d14d2ffb41eddba", + "base": "feat/leftover-map-compare-plot-observed-v2730", + "base_sha": "cf3b6d4195f2ccb5fba5b8d3359f018c8f26332d", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0279-leftover-map-segment-expected.md", + "status": "modified" + }, + { + "path": "docs/adr/0300-leftover-map-compare-expected.md", + "status": "modified" + }, + { + "path": "docs/adr/0316-leftover-map-compare-plot-observed.md", + "status": "modified" + }, + { + "path": "docs/adr/0317-leftover-map-compare-plot-expected.md", + "status": "added" + } + ] + }, + { + "pr": 856, + "title": "feat(reports): leftover observed on grouping comparison graphic (v2.73.0)", + "head": "cf3b6d4195f2ccb5fba5b8d3359f018c8f26332d", + "base": "feat/leftover-map-compare-plot-residual-v2720", + "base_sha": "1087b16f2dba743bc0d1d4e08ff50811b5845393", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0278-leftover-map-segment-observed.md", + "status": "modified" + }, + { + "path": "docs/adr/0299-leftover-map-compare-observed.md", + "status": "modified" + }, + { + "path": "docs/adr/0315-leftover-map-compare-plot-residual.md", + "status": "modified" + }, + { + "path": "docs/adr/0316-leftover-map-compare-plot-observed.md", + "status": "added" + } + ] + }, + { + "pr": 855, + "title": "feat(reports): leftover residual on grouping comparison graphic (v2.72.0)", + "head": "1087b16f2dba743bc0d1d4e08ff50811b5845393", + "base": "feat/leftover-map-compare-plot-unexplained-leftover-v2710", + "base_sha": "935cdea99c7c53ec7e99e4f455cd0653e34f4e30", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0277-leftover-map-segment-residual.md", + "status": "modified" + }, + { + "path": "docs/adr/0298-leftover-map-compare-residual.md", + "status": "modified" + }, + { + "path": "docs/adr/0314-leftover-map-compare-plot-unexplained-leftover.md", + "status": "modified" + }, + { + "path": "docs/adr/0315-leftover-map-compare-plot-residual.md", + "status": "added" + } + ] + }, + { + "pr": 854, + "title": "feat(reports): leftover-map unexplained leftover on grouping comparison graphic (v2.71.0)", + "head": "935cdea99c7c53ec7e99e4f455cd0653e34f4e30", + "base": "feat/leftover-map-compare-plot-cross-share-v2700", + "base_sha": "c4f79bc9ba4bc23317c8aa184aecd74eb1971704", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0276-leftover-map-segment-unexplained-leftover.md", + "status": "modified" + }, + { + "path": "docs/adr/0297-leftover-map-compare-unexplained.md", + "status": "modified" + }, + { + "path": "docs/adr/0313-leftover-map-compare-plot-cross-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0314-leftover-map-compare-plot-unexplained-leftover.md", + "status": "added" + } + ] + }, + { + "pr": 853, + "title": "feat(reports): leftover-map cross share on grouping comparison graphic (v2.70.0)", + "head": "c4f79bc9ba4bc23317c8aa184aecd74eb1971704", + "base": "feat/leftover-map-compare-plot-unexplained-share-v2690", + "base_sha": "2c34896b5fcf8f306103d28a610aced0a9d964b4", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 1, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0275-leftover-map-segment-cross-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0296-leftover-map-compare-cross-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0312-leftover-map-compare-plot-unexplained-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0313-leftover-map-compare-plot-cross-share.md", + "status": "added" + } + ] + }, + { + "pr": 852, + "title": "feat(reports): leftover-map unexplained leftover share on grouping comparison graphic (v2.69.0)", + "head": "2c34896b5fcf8f306103d28a610aced0a9d964b4", + "base": "feat/leftover-map-compare-plot-explained-share-v2680", + "base_sha": "2d6e8e778e2abb491b3a3c0a8b085c8230c9def4", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0274-leftover-map-segment-unexplained-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0295-leftover-map-compare-unexplained-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0311-leftover-map-compare-plot-explained-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0312-leftover-map-compare-plot-unexplained-share.md", + "status": "added" + } + ] + }, + { + "pr": 851, + "title": "feat(reports): leftover-map explained leftover share on grouping comparison graphic (v2.68.0)", + "head": "2d6e8e778e2abb491b3a3c0a8b085c8230c9def4", + "base": "feat/leftover-map-compare-plot-reconstruction-v2670", + "base_sha": "85451d87c9ddb4559a13366b1352af1bea7aafa0", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 1, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0273-leftover-map-segment-explained-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0294-leftover-map-compare-explained-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0310-leftover-map-compare-plot-reconstruction.md", + "status": "modified" + }, + { + "path": "docs/adr/0311-leftover-map-compare-plot-explained-share.md", + "status": "added" + } + ] + }, + { + "pr": 850, + "title": "feat(reports): leftover-map reconstruction on grouping comparison graphic (v2.67.0)", + "head": "85451d87c9ddb4559a13366b1352af1bea7aafa0", + "base": "feat/leftover-map-compare-plot-incomplete-item-v2660", + "base_sha": "43ce1936bfc3b035e591898ad5141a1b81cc526c", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0272-leftover-map-segment-reconstruction.md", + "status": "modified" + }, + { + "path": "docs/adr/0293-leftover-map-compare-reconstruction.md", + "status": "modified" + }, + { + "path": "docs/adr/0309-leftover-map-compare-plot-incomplete-item.md", + "status": "modified" + }, + { + "path": "docs/adr/0310-leftover-map-compare-plot-reconstruction.md", + "status": "added" + } + ] + }, + { + "pr": 849, + "title": "feat(reports): leftover-map incomplete items on grouping comparison graphic (v2.66.0)", + "head": "43ce1936bfc3b035e591898ad5141a1b81cc526c", + "base": "feat/leftover-map-compare-plot-incomplete-post-v2650", + "base_sha": "6707725ecaeb47c33c8a55b0801c8156527c6f01", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 4, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0284-leftover-map-plot-incomplete-item.md", + "status": "modified" + }, + { + "path": "docs/adr/0292-leftover-map-compare-incomplete-item.md", + "status": "modified" + }, + { + "path": "docs/adr/0304-leftover-map-compare-graphic.md", + "status": "modified" + }, + { + "path": "docs/adr/0307-leftover-map-compare-plot-item-coverage.md", + "status": "modified" + }, + { + "path": "docs/adr/0308-leftover-map-compare-plot-incomplete-post.md", + "status": "modified" + }, + { + "path": "docs/adr/0309-leftover-map-compare-plot-incomplete-item.md", + "status": "added" + } + ] + }, + { + "pr": 848, + "title": "feat(reports): leftover-map incomplete posts on grouping comparison graphic (v2.65.0)", + "head": "6707725ecaeb47c33c8a55b0801c8156527c6f01", + "base": "feat/leftover-map-compare-plot-item-coverage-v2640", + "base_sha": "47797643dc5c3071a7bbe3970ab563755113aa5b", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0283-leftover-map-plot-incomplete.md", + "status": "modified" + }, + { + "path": "docs/adr/0291-leftover-map-compare-incomplete-post.md", + "status": "modified" + }, + { + "path": "docs/adr/0304-leftover-map-compare-graphic.md", + "status": "modified" + }, + { + "path": "docs/adr/0307-leftover-map-compare-plot-item-coverage.md", + "status": "modified" + }, + { + "path": "docs/adr/0308-leftover-map-compare-plot-incomplete-post.md", + "status": "added" + } + ] + }, + { + "pr": 847, + "title": "docs(prd): reconcile occupational authority identities", + "head": "9bb4f07a61a9275953974ef276a4af81940ba883", + "base": "main", + "base_sha": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0245-io-occupational-taxonomy-in-the-published-ontology.md", + "status": "modified" + } + ] + }, + { + "pr": 846, + "title": "feat(reports): leftover-map item coverage on grouping comparison graphic (v2.64.0)", + "head": "47797643dc5c3071a7bbe3970ab563755113aa5b", + "base": "feat/leftover-map-compare-plot-coverage-v2630", + "base_sha": "7c026df8d85f9eeae9850f44cdf5e1bc6d644aa7", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0282-leftover-map-plot-item-coverage.md", + "status": "modified" + }, + { + "path": "docs/adr/0290-leftover-map-compare-item-coverage.md", + "status": "modified" + }, + { + "path": "docs/adr/0304-leftover-map-compare-graphic.md", + "status": "modified" + }, + { + "path": "docs/adr/0306-leftover-map-compare-plot-coverage.md", + "status": "modified" + }, + { + "path": "docs/adr/0307-leftover-map-compare-plot-item-coverage.md", + "status": "added" + } + ] + }, + { + "pr": 845, + "title": "feat(reports): leftover-map coverage on grouping comparison graphic (v2.63.0)", + "head": "7c026df8d85f9eeae9850f44cdf5e1bc6d644aa7", + "base": "feat/leftover-map-compare-plot-axis-share-v2620", + "base_sha": "95538f9980dcba70a6d6d174500d00c7af01df6c", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0281-leftover-map-plot-coverage.md", + "status": "modified" + }, + { + "path": "docs/adr/0304-leftover-map-compare-graphic.md", + "status": "modified" + }, + { + "path": "docs/adr/0305-leftover-map-compare-plot-axis-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0306-leftover-map-compare-plot-coverage.md", + "status": "added" + } + ] + }, + { + "pr": 844, + "title": "feat(reports): leftover-map axis share on grouping comparison graphic (v2.62.0)", + "head": "95538f9980dcba70a6d6d174500d00c7af01df6c", + "base": "feat/leftover-map-compare-graphic-v2610", + "base_sha": "ee467df2f0e322623d74e948144b78bc27964aff", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0269-leftover-map-axis-share-plot.md", + "status": "modified" + }, + { + "path": "docs/adr/0304-leftover-map-compare-graphic.md", + "status": "modified" + }, + { + "path": "docs/adr/0305-leftover-map-compare-plot-axis-share.md", + "status": "added" + } + ] + }, + { + "pr": 843, + "title": "feat(reports): leftover-map rank on grouping comparison leftover-pair payload (v2.62.0)", + "head": "2a5ab4d735a1240997150578b151c6b6492e2f43", + "base": "feat/leftover-map-compare-axis-share-v2610", + "base_sha": "12e40c93acb8473075199d8c8124b85b3d39adff", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0305-leftover-map-compare-rank-payload.md", + "status": "added" + } + ] + }, + { + "pr": 842, + "title": "feat(reports): leftover-map axis share on grouping comparison strip (v2.61.0)", + "head": "12e40c93acb8473075199d8c8124b85b3d39adff", + "base": "feat/leftover-map-compare-coordinates-payload-v2600", + "base_sha": "cbf994462ec787d4d3e7a2749f913f62fd9c96d0", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0148-leftover-map-axis-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0304-leftover-map-compare-axis-share.md", + "status": "added" + } + ] + }, + { + "pr": 841, + "title": "feat(reports): leftover-map graphic on grouping comparison strip (v2.61.0)", + "head": "ee467df2f0e322623d74e948144b78bc27964aff", + "base": "feat/leftover-map-compare-coordinates-payload-v2600", + "base_sha": "cbf994462ec787d4d3e7a2749f913f62fd9c96d0", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0268-leftover-map-graphic-display.md", + "status": "modified" + }, + { + "path": "docs/adr/0304-leftover-map-compare-graphic.md", + "status": "added" + } + ] + }, + { + "pr": 840, + "title": "feat(reports): leftover-map coordinates on grouping comparison payload (v2.60.0)", + "head": "cbf994462ec787d4d3e7a2749f913f62fd9c96d0", + "base": "feat/leftover-map-compare-coordinates-v2590", + "base_sha": "51bf33a83b8a03e0dc4de65422313e38c9d45a21", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 3, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0303-leftover-map-compare-coordinates-payload.md", + "status": "added" + } + ] + }, + { + "pr": 839, + "title": "feat(reports): leftover-map coordinates on grouping comparison strip (v2.59.0)", + "head": "51bf33a83b8a03e0dc4de65422313e38c9d45a21", + "base": "feat/leftover-map-compare-rank-v2580", + "base_sha": "6c7c66fc4a39dc140f85e93d87f899ddb0695229", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0302-leftover-map-compare-coordinates.md", + "status": "added" + } + ] + }, + { + "pr": 838, + "title": "feat(reports): leftover-map rank on grouping comparison strip (v2.58.0)", + "head": "6c7c66fc4a39dc140f85e93d87f899ddb0695229", + "base": "feat/leftover-map-compare-expected-v2570", + "base_sha": "e6638a8e1d93b89376c004c60db9f016e03f00e0", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 1, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0301-leftover-map-compare-rank.md", + "status": "added" + } + ] + }, + { + "pr": 837, + "title": "feat(reports): leftover expected on grouping comparison strip (v2.57.0)", + "head": "e6638a8e1d93b89376c004c60db9f016e03f00e0", + "base": "feat/leftover-map-compare-observed-v2560", + "base_sha": "ada0c86e86c0e1570269d3a5d1f9121624938797", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0300-leftover-map-compare-expected.md", + "status": "added" + } + ] + }, + { + "pr": 836, + "title": "feat(reports): leftover observed on grouping comparison strip (v2.56.0)", + "head": "ada0c86e86c0e1570269d3a5d1f9121624938797", + "base": "feat/leftover-map-compare-residual-v2550", + "base_sha": "a825c336d87a4f481717e45800630e4805ab15bc", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0299-leftover-map-compare-observed.md", + "status": "added" + } + ] + }, + { + "pr": 835, + "title": "feat(reports): leftover residual on grouping comparison strip (v2.55.0)", + "head": "a825c336d87a4f481717e45800630e4805ab15bc", + "base": "feat/leftover-map-compare-unexplained-v2540", + "base_sha": "18d89b498a58d68ec58100065d71664f2c691347", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0298-leftover-map-compare-residual.md", + "status": "added" + } + ] + }, + { + "pr": 833, + "title": "feat(reports): leftover-map unexplained leftover on grouping comparison strip (v2.54.0)", + "head": "18d89b498a58d68ec58100065d71664f2c691347", + "base": "feat/leftover-map-compare-cross-share-v2530", + "base_sha": "2cefc0b63436989210bca3204e7750e87edba662", + "draft": false, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 1, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0297-leftover-map-compare-unexplained.md", + "status": "added" + } + ] + }, + { + "pr": 831, + "title": "feat(reports): leftover-map cross share on grouping comparison strip (v2.53.0)", + "head": "2cefc0b63436989210bca3204e7750e87edba662", + "base": "feat/leftover-map-compare-unexplained-share-v2520", + "base_sha": "4d82c2872cc27e08c0357cb4b7cf071ab81ab9d7", + "draft": false, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 1, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0296-leftover-map-compare-cross-share.md", + "status": "added" + } + ] + }, + { + "pr": 829, + "title": "feat(reports): leftover-map unexplained leftover share on grouping comparison strip (v2.52.0)", + "head": "4d82c2872cc27e08c0357cb4b7cf071ab81ab9d7", + "base": "feat/leftover-map-compare-explained-share-v2510", + "base_sha": "ead81bd3f51005f083871dc0bd49148a42a351b2", + "draft": false, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 1, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0295-leftover-map-compare-unexplained-share.md", + "status": "added" + } + ] + }, + { + "pr": 828, + "title": "feat(reports): leftover-map axis share on grouping comparison strip (v2.50.0)", + "head": "e79137611f0d3041ad836c21e49a95bf7ef1001e", + "base": "feat/leftover-map-compare-incomplete-item-v2490", + "base_sha": "bca6baabd917478bf4f6b688ec2755cde95e3575", + "draft": false, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 3, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0293-leftover-map-compare-axis-share.md", + "status": "added" + } + ] + }, + { + "pr": 827, + "title": "feat(reports): leftover-map explained leftover share on grouping comparison strip (v2.51.0)", + "head": "ead81bd3f51005f083871dc0bd49148a42a351b2", + "base": "feat/leftover-map-compare-reconstruction-v2500", + "base_sha": "a4bf239f1cf07ea29bd49b28300f252be0ca7a19", + "draft": false, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 1, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0294-leftover-map-compare-explained-share.md", + "status": "added" + } + ] + }, + { + "pr": 826, + "title": "feat(reports): leftover-map reconstruction on grouping comparison strip (v2.50.0)", + "head": "a4bf239f1cf07ea29bd49b28300f252be0ca7a19", + "base": "feat/leftover-map-compare-incomplete-item-v2490", + "base_sha": "bca6baabd917478bf4f6b688ec2755cde95e3575", + "draft": false, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 3, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0293-leftover-map-compare-reconstruction.md", + "status": "added" + } + ] + }, + { + "pr": 825, + "title": "feat(reports): leftover-map incomplete item coverage on grouping comparison strip (v2.49.0)", + "head": "bca6baabd917478bf4f6b688ec2755cde95e3575", + "base": "feat/leftover-map-compare-incomplete-post-v2480", + "base_sha": "8b2ed956b2ba66e3aa2d149b701c242e3b016dd9", + "draft": false, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0292-leftover-map-compare-incomplete-item.md", + "status": "added" + } + ] + }, + { + "pr": 824, + "title": "feat(reports): leftover-map incomplete post coverage on grouping comparison strip (v2.48.0)", + "head": "8b2ed956b2ba66e3aa2d149b701c242e3b016dd9", + "base": "feat/leftover-map-compare-item-coverage-v2470", + "base_sha": "6726353a13798c0d1566821de9885f1783ebe35f", + "draft": false, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0291-leftover-map-compare-incomplete-post.md", + "status": "added" + } + ] + }, + { + "pr": 823, + "title": "feat(reports): leftover-map singular values on leftover-axis badges (v2.47.0)", + "head": "eb172c40d8ecd08f3e1c220cbf3117b488cddb30", + "base": "feat/leftover-map-plot-singular-v2460", + "base_sha": "b7222713a69acdf3d32bbce992001a2433946d21", + "draft": false, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0148-leftover-map-axis-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0290-leftover-map-axis-singular.md", + "status": "added" + } + ] + }, + { + "pr": 822, + "title": "feat(reports): leftover-map item complete-case coverage on grouping comparison strip (v2.47.0)", + "head": "6726353a13798c0d1566821de9885f1783ebe35f", + "base": "feat/leftover-map-compare-coverage-v2460", + "base_sha": "11a785533ba52e6b1c6854203818902e38736dc5", + "draft": false, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0290-leftover-map-compare-item-coverage.md", + "status": "added" + } + ] + }, + { + "pr": 821, + "title": "feat(reports): leftover-map complete-case coverage on grouping comparison strip (v2.46.0)", + "head": "11a785533ba52e6b1c6854203818902e38736dc5", + "base": "feat/leftover-map-list-post-coverage-helper-v2450", + "base_sha": "a2c965511d26923bd878ec56d655fb8a0183c4d7", + "draft": false, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0289-leftover-map-compare-coverage.md", + "status": "added" + } + ] + }, + { + "pr": 820, + "title": "feat(reports): leftover-map singular values on graphic axes (v2.46.0)", + "head": "b7222713a69acdf3d32bbce992001a2433946d21", + "base": "feat/leftover-map-list-post-coverage-helper-v2450", + "base_sha": "a2c965511d26923bd878ec56d655fb8a0183c4d7", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0148-leftover-map-axis-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0269-leftover-map-axis-share-plot.md", + "status": "modified" + }, + { + "path": "docs/adr/0289-leftover-map-plot-singular.md", + "status": "added" + } + ] + }, + { + "pr": 819, + "title": "feat(reports): fail-close leftover-map pair-list post coverage (v2.45.0)", + "head": "a2c965511d26923bd878ec56d655fb8a0183c4d7", + "base": "feat/leftover-map-list-incomplete-item-v2440", + "base_sha": "aa3208959950637b52001457e7d4dfc1ef1764eb", + "draft": false, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0288-leftover-map-list-post-coverage-helper.md", + "status": "added" + } + ] + }, + { + "pr": 818, + "title": "feat(reports): leftover-map incomplete item coverage on pair list (v2.44.0)", + "head": "aa3208959950637b52001457e7d4dfc1ef1764eb", + "base": "feat/leftover-map-list-incomplete-post-v2430", + "base_sha": "ef30930271a729044af2f690df04f0b89f751ffd", + "draft": false, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0287-leftover-map-list-incomplete-item.md", + "status": "added" + } + ] + }, + { + "pr": 817, + "title": "feat(reports): leftover-map incomplete post coverage on pair list (v2.43.0)", + "head": "ef30930271a729044af2f690df04f0b89f751ffd", + "base": "feat/leftover-map-list-item-coverage-v2420", + "base_sha": "1e3d13ea5fa5744e8c0b9b7b4e8470fceb7630ea", + "draft": false, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 2, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0286-leftover-map-list-incomplete-post.md", + "status": "added" + } + ] + }, + { + "pr": 816, + "title": "feat(reports): leftover-map item complete-case coverage on pair list (v2.42.0)", + "head": "1e3d13ea5fa5744e8c0b9b7b4e8470fceb7630ea", + "base": "feat/leftover-map-plot-incomplete-item-v2410", + "base_sha": "63092ded55a7c7d65b0f6586980b20d0d30f587d", + "draft": false, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0285-leftover-map-list-item-coverage.md", + "status": "added" + } + ] + }, + { + "pr": 815, + "title": "feat(reports): leftover-map incomplete item coverage on graphic display (v2.41.0)", + "head": "63092ded55a7c7d65b0f6586980b20d0d30f587d", + "base": "feat/leftover-map-plot-incomplete-v2400", + "base_sha": "772928722264b001c669b580d19866ccd8b590e0", + "draft": false, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 1, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0284-leftover-map-plot-incomplete-item.md", + "status": "added" + } + ] + }, + { + "pr": 814, + "title": "feat(reports): leftover-map incomplete post coverage on graphic display (v2.40.0)", + "head": "772928722264b001c669b580d19866ccd8b590e0", + "base": "feat/leftover-map-plot-item-coverage-v2390", + "base_sha": "de2a8a8b8fe275542f3350c649c7bca759b049a3", + "draft": false, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0283-leftover-map-plot-incomplete.md", + "status": "added" + } + ] + }, + { + "pr": 813, + "title": "feat(reports): leftover-map item complete-case coverage on graphic display (v2.39.0)", + "head": "de2a8a8b8fe275542f3350c649c7bca759b049a3", + "base": "feat/leftover-map-plot-coverage-v2380", + "base_sha": "64964cb6c14703a9b4bd74bed16d43844d49d102", + "draft": false, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0282-leftover-map-plot-item-coverage.md", + "status": "added" + } + ] + }, + { + "pr": 812, + "title": "feat(reports): leftover-map complete-case coverage on graphic display (v2.38.0)", + "head": "64964cb6c14703a9b4bd74bed16d43844d49d102", + "base": "feat/leftover-map-segment-rank-v2370", + "base_sha": "e626a1d0770208d6f821e06542091aa2ead87f25", + "draft": false, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0281-leftover-map-plot-coverage.md", + "status": "added" + } + ] + }, + { + "pr": 811, + "title": "feat(reports): leftover-map rank on pair segments (v2.37.0)", + "head": "1887be0de1133fd9bccc0aa169f71015d035a303", + "base": "feat/leftover-map-segment-explained-share-v2300", + "base_sha": "5a8afbd9099efae658ee3c2a9b02ceaa3b78022c", + "draft": true, + "review_decision": null, + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 4, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0048-persist-lsirm-leftover-pairs.md", + "status": "modified" + }, + { + "path": "docs/adr/0049-leftover-pair-report-ui.md", + "status": "modified" + }, + { + "path": "docs/adr/0182-leftover-map-unexplained.md", + "status": "modified" + }, + { + "path": "docs/adr/0185-leftover-map-cross-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0233-leftover-map-unexplained-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0268-leftover-map-graphic-display.md", + "status": "modified" + }, + { + "path": "docs/adr/0273-leftover-map-segment-explained-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0274-leftover-map-segment-unexplained-share.md", + "status": "added" + }, + { + "path": "docs/adr/0275-leftover-map-segment-cross-share.md", + "status": "added" + }, + { + "path": "docs/adr/0276-leftover-map-segment-unexplained-leftover.md", + "status": "added" + }, + { + "path": "docs/adr/0277-leftover-map-segment-residual.md", + "status": "added" + }, + { + "path": "docs/adr/0278-leftover-map-segment-observed.md", + "status": "added" + }, + { + "path": "docs/adr/0279-leftover-map-segment-expected.md", + "status": "added" + }, + { + "path": "docs/adr/0280-leftover-map-segment-rank.md", + "status": "added" + } + ] + }, + { + "pr": 808, + "title": "revert: undo #782 squash until independent APPROVE", + "head": "ef38ddc9cf4f81c6a30050fa2409d294779fbd93", + "base": "main", + "base_sha": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0048-persist-lsirm-leftover-pairs.md", + "status": "modified" + }, + { + "path": "docs/adr/0049-leftover-pair-report-ui.md", + "status": "modified" + }, + { + "path": "docs/adr/0148-leftover-map-axis-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0201-leftover-map-reconstruction.md", + "status": "modified" + }, + { + "path": "docs/adr/0266-leftover-map-explained-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0267-leftover-map-coordinates.md", + "status": "removed" + }, + { + "path": "docs/adr/0268-leftover-map-graphic-display.md", + "status": "removed" + }, + { + "path": "docs/adr/0269-leftover-map-axis-share-plot.md", + "status": "removed" + }, + { + "path": "docs/adr/0270-leftover-map-coordinate-ticks.md", + "status": "removed" + }, + { + "path": "docs/adr/0271-leftover-map-segment-distance.md", + "status": "removed" + }, + { + "path": "migrations/0245_report_leftover_map_coordinates.sql", + "status": "removed" + }, + { + "path": "migrations/rollback/0245_report_leftover_map_coordinates.sql", + "status": "removed" + } + ] + }, + { + "pr": 802, + "title": "feat(reports): leftover-map explained leftover share on pair segments (v2.30.0)", + "head": "32f1cda10a2a1a6cabd64a3ae6f59bd6f0b20fd6", + "base": "main", + "base_sha": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": false, + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0048-persist-lsirm-leftover-pairs.md", + "status": "modified" + }, + { + "path": "docs/adr/0049-leftover-pair-report-ui.md", + "status": "modified" + }, + { + "path": "docs/adr/0201-leftover-map-reconstruction.md", + "status": "modified" + }, + { + "path": "docs/adr/0266-leftover-map-explained-share.md", + "status": "modified" + }, + { + "path": "docs/adr/0268-leftover-map-graphic-display.md", + "status": "modified" + }, + { + "path": "docs/adr/0271-leftover-map-segment-distance.md", + "status": "modified" + }, + { + "path": "docs/adr/0272-leftover-map-segment-reconstruction.md", + "status": "added" + }, + { + "path": "docs/adr/0273-leftover-map-segment-explained-share.md", + "status": "added" + } + ] + }, + { + "pr": 780, + "title": "fix(voice): distinguish carrying and evidence exports", + "head": "1d8fa267b059289e77301a09985dfac70a439814", + "base": "main", + "base_sha": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": false, + "review_decision": "REVIEW_REQUIRED", + "auto_merge": true, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0252-temporal-primary-voice-history.md", + "status": "modified" + }, + { + "path": "docs/adr/0256-evidence-bearing-voice-combinations.md", + "status": "modified" + }, + { + "path": "docs/adr/README.md", + "status": "modified" + } + ] + }, + { + "pr": 774, + "title": "feat(dashboard): share actionable status notices", + "head": "0e4ba4e00a1578aba6f80fa25d7d779516b9af96", + "base": "main", + "base_sha": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [] + }, + { + "pr": 772, + "title": "test: lift ask_time_axis.py coverage 78% to 100%", + "head": "781ebb11a00b50bf1956ff3536eef46160271931", + "base": "main", + "base_sha": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [] + }, + { + "pr": 771, + "title": "test: lift fixtures.py 88% to 99% and vision_image.py 80% to 98%", + "head": "9a4dbfcd46d955cd758148cf55cfd5ee795b02cd", + "base": "main", + "base_sha": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [] + }, + { + "pr": 770, + "title": "feat(projects): complete timeline empty-state evidence", + "head": "101cd8acc1d510382ea928d4f6bb9c84b199349d", + "base": "main", + "base_sha": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [] + }, + { + "pr": 702, + "title": "feat: enforce source semantic coverage evidence", + "head": "93e7b81d096ddfc1fda9080c9c6a9784cbfbcec2", + "base": "main", + "base_sha": "ff7431bd1851c03e737808d22c6a2d43968582f9", + "draft": true, + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0030-external-llm-gateway-environment.md", + "status": "modified" + }, + { + "path": "docs/adr/0208-externalize-local-mathematical-compute.md", + "status": "modified" + }, + { + "path": "docs/adr/0240-explicit-missing-body-import-boundary.md", + "status": "added" + }, + { + "path": "docs/adr/0241-source-classification-semantic-hints.md", + "status": "added" + }, + { + "path": "docs/adr/0242-private-content-semantic-coverage-audit.md", + "status": "added" + }, + { + "path": "docs/adr/0245-lineage-scoring-and-entity-resolution-owner-contract.md", + "status": "added" + }, + { + "path": "docs/adr/0246-export-source-ontology-coverage.md", + "status": "added" + }, + { + "path": "docs/adr/README.md", + "status": "modified" + } + ] + }, + { + "pr": 679, + "title": "feat(ask): persist public-claim envelopes for Global Ask verification", + "head": "135dfe7c4266c7a2098c622b7c9976eaf7304cdd", + "base": "main", + "base_sha": "ff7431bd1851c03e737808d22c6a2d43968582f9", + "draft": true, + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0215-global-ask-public-claim-verification.md", + "status": "modified" + }, + { + "path": "docs/adr/0229-public-claim-envelope.md", + "status": "added" + }, + { + "path": "docs/adr/README.md", + "status": "modified" + }, + { + "path": "migrations/0224_public_claim_envelope.sql", + "status": "added" + }, + { + "path": "migrations/rollback/0224_public_claim_envelope.sql", + "status": "added" + } + ] + }, + { + "pr": 672, + "title": "feat(ask): nominate persisted semantic evidence", + "head": "a3e87a89185fae03c5f18c79e2d97d12c73e8af9", + "base": "main", + "base_sha": "ff7431bd1851c03e737808d22c6a2d43968582f9", + "draft": true, + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0233-global-ask-semantic-candidate-nomination.md", + "status": "added" + }, + { + "path": "docs/adr/0234-global-ask-public-claim-verification.md", + "status": "added" + }, + { + "path": "docs/adr/README.md", + "status": "modified" + }, + { + "path": "migrations/0225_global_ask_semantic_candidate_search.sql", + "status": "added" + } + ] + }, + { + "pr": 667, + "title": "feat(ask): per-post Ask history stack with gap-baseline refresh", + "head": "0c0f4af572a94e63cc8ea4545e48f5eda32a389c", + "base": "main", + "base_sha": "ff7431bd1851c03e737808d22c6a2d43968582f9", + "draft": true, + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "current_head_approved_reviews": 0, + "unresolved_threads": 0, + "threads_truncated": false, + "authority_paths": [ + { + "path": "docs/adr/0017-authorized-analysis-run-create.md", + "status": "modified" + }, + { + "path": "docs/adr/0022-authorized-tepp-start.md", + "status": "modified" + }, + { + "path": "docs/adr/0050-seed-period-report-analysis-run.md", + "status": "modified" + }, + { + "path": "docs/adr/0132-tepp-topic-lineage-consumption-boundary.md", + "status": "modified" + }, + { + "path": "docs/adr/0207-repository-case-ontology-namespace-canonical.md", + "status": "modified" + }, + { + "path": "docs/adr/0218-current-contract-mcp-global-ask.md", + "status": "modified" + }, + { + "path": "docs/adr/0222-project-nodes-in-ontology-neighborhood.md", + "status": "modified" + }, + { + "path": "docs/adr/0230-pnpm-build-script-allowlist.md", + "status": "modified" + }, + { + "path": "docs/adr/0231-external-lineage-arithmetic-authority.md", + "status": "modified" + }, + { + "path": "docs/adr/0235-post-ask-conversation-history.md", + "status": "added" + }, + { + "path": "docs/adr/0236-legacy-ontology-namespace-publication.md", + "status": "added" + }, + { + "path": "docs/adr/0237-accelerator-runtime-service-boundary.md", + "status": "added" + }, + { + "path": "docs/adr/README.md", + "status": "modified" + }, + { + "path": "migrations/0223_post_ask_conversation_history.sql", + "status": "added" + }, + { + "path": "migrations/rollback/0223_post_ask_conversation_history.sql", + "status": "added" + } + ] + } + ] +} diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 70238eae5..b331912ca 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,8 +1,128 @@ # Product & Technical Gap Baseline -## Current bounded loop — 2026-09-05 - -This section supersedes every dated snapshot below. It records observations, +## Current bounded loop — 2026-09-05 09:03 UTC + +Protected `main` was `83eba56149eb802cd63642c507c324c9976ec78e`. +The tested implementation is `b49a68a288cd7babf1d80436180521d5e0c3b31d`, +stacked on #934 at `3060dd7000791160c2bcc98351af129899ff32ff`, whose parent +is #780 at `1d8fa267b059289e77301a09985dfac70a439814`. Evidence-only commits +after the implementation do not replace its tested identity. No protected +merge or deployed-release completion is claimed. + +### Authority, implementation, and chosen user gap + +The current LineageWeave PRD and ADR 0184/0246/0251/0256 were read, along with +remote ThreadWeave `docs/PRD.md`, RankWeave `ARCHITECTURE.md`, TEPP +`docs/product/prd-v0.4-approved.md`, contextual-orchestrator +`docs/product_planning.md`, and disksage's current design authority. GitHub +confirmed `ContextualWisdomLab/LineageWeave`, `RankWeave`, `ThreadWeave`, `TEPP`, +`contextual-orchestrator`, and lowercase `disksage`. PRD spelling/duplicate +requirement identities remain owned by #847/#807; no second repository is +inferred from case differences. ADR 0251 here owns I/O Psychology; the +reconciled Voice composition authority is ADR 0256, extending ADR 0246. + +The selected gap is a reproducible mismatch in an existing evidence export: +search removed an edge and its target from the visible neighborhood, but its +source's direct JSON-LD assertion survived. This is prioritized as an observed +evidence-integrity failure, without assigning unsupported scores to product +opportunities. Filtering now retains direct assertions only for retained typed +source/property/target triples, both before and after page accumulation. Node +metadata and authorized Voice derivations are preserved. There is no new API, +schema, release number, inference policy, arithmetic, or provider integration. +The W3C [RDF triple contract](https://www.w3.org/TR/rdf11-concepts/#section-triples) +and [JSON-LD node objects](https://www.w3.org/TR/json-ld11/#node-objects) explain +the projection; they do not establish stakeholder classifications or weights. + +Three new regressions failed before the repair and passed afterward. Related +frontend validation passed 43 tests, lint, TypeScript, and production build. +Backend validation passed 33 tests, including real Keycloak/JWKS authentication +and primary-Voice PostgreSQL API projection against a newly migrated synthetic +database. No DeprecationWarning was emitted; the existing build chunk-size +advisory was retained without suppression or speculative tuning. + +`FilteredExportEvidence` reuses the existing Storybook component and tokens. +Real Chromium search/download checks passed at 1440×1000 and 390×844: the +removed assertion is absent from the downloaded JSON-LD and the retained +assertion remains. Both document widths equal viewport widths. Visually +reviewed [desktop](screenshots/ontology-filter-export-20260905-desktop.png) and +[mobile](screenshots/ontology-filter-export-20260905-mobile.png) show the +retained relationship and the mobile table's contained horizontal scroll. +The first rendering attempt timed out; the subsequent completed render and +actual downloads are the evidence. This is synthetic Storybook plus a separate +authenticated API check, not authenticated deployed end-to-end acceptance. +Full additional-Voice, hidden-evidence, cutoff, and paged authenticated UI +acceptance therefore remains **unavailable**. + +### Live aggregates and descriptive load + +The official `lineageweave` PostgreSQL returned 43,189 source records and +43,189 Voice associations, all primary. The aggregate query that assumed an +`evidence_post_id` storage column failed and was corrected to the verified +count/primary columns; no schema repair or identifying output was performed. +These exact counts do not establish functional acceptance or a population +inference. No real records were sampled or exported. + +A synthetic authenticated k6 HTTP observation used 2 VUs for 10 seconds: +4 successful requests, 0 failed requests, 0.349 requests/second, p95 6414.11 ms, +maximum 6414.16 ms. Across 51 PostgreSQL samples, peak connections were 5, +active sessions 2, and lock waiters 0, including the observer. This is a short +observed workload, not an SLO, capacity estimate, or identified bottleneck. +The temporary API stopped and its synthetic database was removed. + +A separate official-service snapshot showed PostgreSQL 2.21% CPU / 198.8 MiB, +Valkey 0.21% / 643.1 MiB, Ask worker 0.20% / 109.1 MiB, and orchestrator 0.01% / +76.79 MiB. It is not a synchronized saturation trace. This read-only workload +invokes neither worker nor model work; worker/Valkey/gateway end-to-end +saturation and attribution of the latency remain **unavailable**. No pool, +queue, routing, or mathematical policy was changed without causal evidence. +Formal Compose services and volumes were preserved; no test containers were +created. Sequential Thinking and Memory MCP tools were not callable in this +session; local memory informed the verification procedure only. DeepWiki had +no index and Context7 returned quota exhaustion; neither is authority evidence. + +### Exact-head queue, reviews, and conflicts + +The [remote metadata snapshot](development-loop-20260905-filter.json) records +117 open PRs at 08:48:46 UTC: 91 drafts, 26 ready, zero current-head approved +reviews, and 105 unresolved threads within the first 100 threads per PR. +Authority paths were refreshed for changed heads; paths from the earlier +snapshot were reused only for identical immutable heads. These are bounded +queue observations, not a claim that all 105 findings were adjudicated. +The 16 open Issues remain proposed work, distinct from implemented acceptance. + +#780 retains normal squash auto-merge and has no confirmed merge SHA. #934 +remains stacked on it. No child was retargeted or merged into an unprotected +parent. In-progress runs belonged to open #929 and #911 at their exact heads; +both were preserved. No stale run was cancelled and no CI contract change was +needed for a manually cleared stall. + +#929's existing minimal quality fixes were already present at +`2a8ed5d02f4a3082b346d923d754c1ff37ebff52`; its rollback/race/HTTP suite passed +12 tests in a separate checkout. The remaining no-effect findings refer to an +awaited database rollback task and two Protocol signatures. The awaited task +has required completion/error semantics; ellipsis protocol bodies follow the +[Python typing specification](https://typing.python.org/en/latest/spec/protocol.html#defining-a-protocol). +The three threads were resolved after exact-head verification, and normal +squash auto-merge was re-enabled with a matching-head guard. No warning +suppression or redundant code rewrite was added. The primary +checkout's concurrent translation-ledger changes were preserved. + +Exact-head added-path comparison reconfirms ten ADR identifier collisions: +0355 (#920/#915), 0301 (#902/#838), 0300 (#899/#837), 0279 (#888/#811), +0335 (#877/#876), 0305 (#844/#843), 0304 (#842/#841), 0293 (#828/#826), +0290 (#823/#822), and 0289 (#821/#820). The six proposed release-title +collisions in the earlier snapshot remain unresolved. No distinct added +migration filenames share a numeric prefix in this snapshot; cross-branch SQL +replay and semantic compatibility are not thereby proven. API-file overlap +remains a review target, not proof of a conflict. Parent-first protected +merging, explicit authority reconciliation, then fresh child checks/reviews +are required before delivery. The active rules require independent approval, +resolved review threads, central workflows, and no force push; no bypass or +self-approval was used. + +## Earlier bounded loop — 2026-09-05 07:25 UTC + +This historical section is superseded by the current snapshot above. It records observations, not a protected-release claim. Remote `main` was `83eba56149eb802cd63642c507c324c9976ec78e`. The implemented export repair is `05384255df15c3995dbc3cef149abd5d92afd40a`, a child of #780 at diff --git a/docs/screenshots/ontology-filter-export-20260905-desktop.png b/docs/screenshots/ontology-filter-export-20260905-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..cab24dc550c3ee00ef531ca16db6b57853775344 GIT binary patch literal 78491 zcmeFYRahNc)GZi-yF>5*!9Bq>5Zv9}o!}0^-7N%ng1cLg;O@G^4(=OwZYAfOzhAn) z?uWi_cRdzW?5ees7QoJuU@@Em68-ye)S4A_th)tJ%rc5l@fx9!dI^_ zUP*}xt9oP}t;4$DXh6gMitzq|KrYSy4g&$k-M#rWlX|WqQgUk3+%pmrQ?f`DjytXP z+Ip5D6qcmOT0jf(%eZ{HJ=d^#9!A~g?!L{jiHV60&kq?{?x67NBpL-6ihq}DF&zfx zKkGXW9I@y>tMK~G=YKCJteEr&|9jaw4hsIin+5*Q&HwMaF^l&c)Z0t5Z?*3!c8-jU z4Eyh{=Ue1`|Ngz8pt7LA#MrtbFOQs`C5A>J8)1^_!v_W`o`L>3Q5~Y~sfC#ttnhzV zwwSQ6u)e;ZpT3{9we~iB3JNM}@a}mgl!Umrxx8C!x+iYHzqjs*c|6ieDHwo;_B`Lm z?zX~9n49CxqW=5iUbPq;rWO_!X6A^KC+X0!zzfn1)5&uE_i)GuuIj|(2=Mam_vABrw(b2`} zI|cMKs(=4Xk7^7bjQ;1r()^m5c!l79|B#;sQw!Y-zeyl4siOMd*V5zs|7%|gI)C5N zORiF?@D6xs#LA$B$n=zND9wSZt4^l*nh5 zfiE3)nD19S7EV|E^B`NpNf!4XWnD63>^T1Jcd7BGf}x(CT;GT5-i+P7=>jb+t+EDM zO_{PetQk~a-zO+&IE2eU+x0dMK0ck4=-+Z1Vg^KI{)<}z61P1vf4_L|Dwr9>)ua@R zJ9tq3p2|ilg)S*E@vD7@W~stl8NEu^aQmLkrz_wE`u}_2GBjtZ3VcwXs+!Ko%Bq-) zFE^mQokCX~cD@|T9~AWOKF;Zf2nJCyd>B0)ks~v3FfpOrq(W%JPfSYEDQ_xy9J;)W z9^HK+;OwGBySZR5i|PrcH8rOYj_`fcipB%dsP$hPZ&^5z1W>3 z<8_fFUYMGyX=u1SJM#$G?V+KjHqJ%@HkR_`_BVP5hxhf-ND2e;f#Ln-ers#%xrvL5 zOV{(g&88Sb?N8A(76U=|leMRZ8=VHr=~@#Bz&9LyjEpva#t>EOcSf3=Yd2bVK3%V- z(5sCM4c%_18HAz|?SR1)LP@R8yPVc@rH;RU_D10m5w#l+AcZ8@+uJ*IUZtMp3;5hB zYCnN@#xoYn)XI5X4-C1fsLc98QK6uqsHv$11qGk(uV&{SOH3Yq1i`nvpNgmCrz)0r zb#-ZLYX{om>(!g1T2KD?A^h!4yUpoFC+-2Z^T%!ft9cD1vmOx$9$XE#Et)Mpj+94w zv0R3_qT<`3uA!ele>U1I+AmgRweX(%y*%AaWbrMQDit)`CAYvE?@o@4^hU0=IQ|9? zME(95ljM(|!f!E=$m#2d-Pi=M=q>cuv6dWABvu($5WGRkTsV_0@h!FG; z3wKB+D1y=gM|=YvWx31jG$^;`z0mWZ0|RF@h!meFCntv`xq2%8^CNcH?Ceal{gUhR znAu-*R{eau(kPd~xj$lQW0M1T#O>K;nb4FlPlE>$yXBXi=H6Qc!MiPBgU2(tBr;SK zv1L*jTfJ}WLx~%1g7GUG2!jYdn4^&LzmaofVX4+@ck}f2mO*C|&JSp62DUjSW*m4n zLBU8+TwGl8lX|s2lMpt0>oiK0`f(9I4OCuVzF5>$?^trsn3%_OEHTe}zef)$>Qo(UO z*3iISF-MyYPSR_0*`F?uC>r1T^&^PNuS_P5`F6til{d*XTZnsYib6L3UGJj2r;-dK zqBRjjU0*-@?C8u45g8dQT-DFwvuc^?in}5@%GUPI`q_n$>yfUu^-4I~ zr{EXc`8w2fFE`u8??q=6b5~c{_v2x1*PJ6Xqhmu}7{r`Dm%rd*4w1G`rn-LL`mYrx z+=BY&w#uzk7#YX@rf}t$l#~=7F3Pq7AbUKHbAfV07-NMsi0^~9A3CAr5M0n0qE)|Q zp)$D~;~7wBN2nCb?t{9!AJ+hP#G&q6i@Xs^LpUzSUv<@`5EWW)clR%j%N-6|l1xbe zkEE)b94=Jq)ENGN{2p9iUxzq>`ytjX!D~~D63(ib zaAXqSzJwAG=7anmn11G3;M#eAH*p*L$_Adtu)H&QkB^V<;BacU+Jv}m51b|7DRPpM zJ!j8P54CuXj*gZ*lpm}&I(U#mr9Zm2akF`yD>-STFV|Z{S->|~&m*w~XJxGe4kc5; zwgkjo;7C}CiSn&xi=S?P$9;uPB(Y`O$4jv!J6WzTG3fStbF$jZ0#5v3@hm7ugiZO& zV!1ujF9?xq?!i zM0*j)(Lb}lcs*=}krgZC#D0XI*V)Oxy1D{#;#3-QmnbYLkCW(_d(8{rWRm-#Z&xpB zHw%+qPl*rI{jn1Knex-4BYx8%jJa+_{r(>0#>na=@6*o3?v!2bthN&0k# zyi!>VVn>>5YlTC?!omz%K5w?4cC~w5Sp!L8+k(U6>{l2%85$9%?f5qiFn?_)tN+o4 z|05*qE#D@rYg9Fpo7g+INFv~XxEF{FlHA2J! zUaG`&xVW{*Zg7u3evrYyxXp+u49HM?V>5yKY52*+7@~}Lq|yC!ty6D4&dQd`>}Nnh zNlCyeWmO3i-9za=I_LnY?V=k=AQ=s@F2tDBA&nM=XY-m&+fj*Rq# zZMD$?=bLNu9sk|$(@M2r*Cgm2-rdSnv!uSfX__@l0CGTHjLqR6S?jfZDq|{6k*z3G z6L8y``#m_!TooG>c2%xhH1nf#kU5j7?Vag9nT?A}gU~nLjir9tJ^i8YCc8l=VP7*c zJUzW#j;DoH%4vnLER3zKoxpp`2eEFavECNX(38-P`S3ir5c0l-rP-vN94i?{3ptS*5c z7nh}oz5Ec+Tg&|8+4)@PXyfk3D^x?V6Vr*hb*6~g#^3?UaQZ33E}uImbMu`+GXH42 zolG9*sb_W$4zW1)Hl68s@eI2TSqR0+XB0Y)Uhx!zZMUO z@fb{JBLc@1`qBPAkJqK84-AvDD3hhtT)9TIdZqS|V&NgIqB$c1Dm^2zjIcM#KHLh? zUVy)6iPKxN7Vn#?ODt6KWYlrj2GglsA?F=gQBF%OwQ_Y-*iS*Io5;P$4L=j;G6lTx zeoO(GH9;lUJl@5yXKl@=KO9ps{Q7t`ES-pmi1LO`-$c_!NJvPQ&fu$b3O$F_3=Fg- zHjsE-r*ef$xe8xtQV^yZb8&NG6PnXzd)&Y$lT%Xu)>07h{F4JjD&BVDI9Q+kNl{9X z2fg2@X=wb|*6m_)&b#;#Q8k%9=4ll7>W!0puK zeI061M8KzdyCCOPV_p>Xe!jTxT|_-DDfF>3wt3`Eb&XP*Q_fLsxrh1RY_Zu!RYaPTJx7 zz`1}K)rZ&rxNQ+KKS&H9j))2qOHZG3z@08qq5MZ<4$h0&r|sEz!CPX6NpkU}wF>c!rN55Yx! ztgR(7EHI%FrVZ*u17X@aKBE4BDaEj@#(EJa_w944tf*j}yu7>|PNJb)5PmX@QM>@+ z*w4%aFNEq92Jc8|U0Wrv&Uo7%O1RAK6KB=>&Yr1|p(G2cunD9?4N~X6eGKx2Ilc~+ z^9e&awJ_H=8_2)PBi~F_V`{rTD6OpA)*2;&Rx8I{e`5|n&u|$+j_;sGi?E@yJt}1N z-5tDv4TAl2G3QvBqxoi=Sv*wt=SCrZ_I!^Y@d+m19v}0kka>Eq%AeCF4D3Lyu2JeS zWWm8vi=lHBdIe$`#cwR9+t^aeORDh+FgqvX9K5 ze%>bA*#@bo&^JMMr|XUg{y*T+_Vt!4&PN9P^W(!gH%K?gTA?X2zLs*!y0N_VSSGU} zE?eysaQY~BN+_uoUvFt;WgIc2dxj3J&k+UAyS?qN7|XxpVqox|Uc<%QR3d3>uwTs^ z0I>7Gg$DU6EDa$FM(e}SEClJcoBd#ZhrSh!_#1415K)7%6#I2X683CqnjZ#avc~Sm zbL5|c0|T4CNSR<@$Shfb*uJ{ACQbw=XVbtw)hoLCse?$wN+q?`vY`_wfdUHqdU{@= z!dUnP-an;l9WV9qRei4jf}_0 z?S7&=nJqB=fl<#rDBGxEcY02u5)Kv?76vAFIfz%7BB+UscXIkV_5MQ1b%?`yp+XDn zq%?^@je;uEnIPmfFfA=ggd4*!hU5rG=mFLlQlBy$otVHg9anwF$nu~~YHGUar05iF zJCzHy;=N~U&}g0F^Ewa)ifI?9uksP;Im>EWr)94o5aIivB?LQFTV3G=7YR9vlA5L_ z^-k6$ff^Z;>>-XRyn$>^^RYJ#lCaC`w3rpNvT=zBb$srUCR4298^Lg`kEU7*0<)c@ z{q6b1#l=W0sAUslV<^bIXrWn9$Ie#MmM@gqiY>{|2E0eE2)#AcK=n}8f-^S*WF>Jc^iZsXvTrMOu)VR4H9>RrW1b=PE2n%`-LnSG$tEX41VUmWY z->C5!4n9BY3*Su~nV_ACMx|4Vv`4GedK0NHpZne#;psi+WjdeDa5hPpc-+fkgz5GC zF}1wsZ0LmKDj8{HezVk8N43%F5_E{BM_2}<~csHi`QbenMZ)Y=ebvR%B#0r5N z>jZ>r*A#0o>oSxvEYpwjIc~{%Y5&xi735^&z})40TII2j*T->COw39VI6D@+p0|Tt zR%1fmVf-{_tTwLvhr99W`xURpe@Y1dwC4co^lpAb8-AlA3Tg+C`OY+BCaaN%xjFT{ z`LwABi2ECxaa8SXvKcd>9R7YP)E9BVI;;kU&#KYI6{`Hg3sej*!fXOR$f;IvEeFVT zKaL`eqq9fgR)zToOeNDpF5wGVEe-P4|0Hg!!ppB%?5VbPcGDChzWK&Qc+}MK@&gjC zbXv^n*z1dX*5dVwgc15)?6p&d*cr>EMd)T28hNO3)R`XNVL367z8pt+i66>%8BdG` z$sb{z{s>Uci(F~2qFl!kiH9Wve+0tC^m!bxVq#Lx8D(T-BqSuFajKgzGIA$jP|X{> zea+6!PuANh#iKu75JA#Ch|ogzA-ErH2;>$H7ptR86utM(2K_>YJ`yJZ1xL9$lj9py ztN9#>pn?6py^cb@jz|oZe2!T4H{T%VyVHi~jE-JxQ&4k>2h9j6@2QW*hSs-EDWeL1 zHG}+gnrxSEK>l&!g85v9Z;F_3a&Yk@zqR^4G(F0BZtX^}PA@HKuGrN~%HW%(Xksxj zF$p z7$;2(j(+1gUl6q2euPOe7_{YRz?|JYGBtD-G+e+Y$jK|n!UCF@xHsyheDqGfZ2_Q` z{4rxnTFhD0&()jX5)<$DHcdjT&P=cgNcF1yNcP`VX}j{fy1G)Bjl$w{ zNrWsdRsIB(ydfYY*gHHVC&n}|=BiX3#vz9d&B`Q+w>R7wmZGa=gWU3wlBK<+#lWis%BH_BYM>j{rN|Ee;J+lxv_jN`PHh1ZDyicZ086F> z@f}uZIC)@}m#G3Pa7~Sk15#rv_(<)#3#r}Jt-M>0XZLX+HI2Nhs&FUd#U z%L-@+h+IHjzS-H?d++e|F}Do%iX><$$?7DV35CZE!+ty)nwz^FE-*Q6{T_@<;FesZ zq^&Mu>AHQb_72U$)HIir^-I6R^8$+I697{q6dddpDwcuDb6a8I3qY3v%!0{V#9xSd8DSY2jp`)WS zb_zRXae|tQ^FUIts>d>Fr$lSH#OazoUvz()DFUYR&8yOF&F^^kRkMwX{<$NZ3%B?A z?bCN*gz$H-{jK}c&Qny3mm^KE8Gz z?27RRkF)T)*{MjmUBi4kxqXQPY53f1%R)eRAJS%(XA``J{P}t5-6o<#R0MB9Tq^$0 zS0%6^upw00P_z?r-*BI)sQGc6q24j#sf};bG&R)G)-Q#BFEo0GDWc?5(V{ELw7kr7 z{((grgK7M?@k>`@oO~?}*5Tgc;Ti!`Yq#zUX()!p0Qf3L{{H$HX8pb}G{ zvSTeG(jhH_c<-$1bQ;T-)F$#a-bvc~omK&n@t3LwUa^{yM9@7~BdGlT& zyq>Di?Q+B| z*Ck4Ut>r)rV8+9VRNx3Ea6iC#3V#yd;=)f)@R}-%%vE>20`1=qZEvXo*Q}q=p8&REfxfaDsplG z&_$_}$6`tol017n_@>P)JOFRK*6Lg$ml3-Dse`7Rn-mHoFdBH5NVAiT&IiEsl$tf= zR7qBfhRksA0DZDA3*Q~RTS6Z=D|G;M0d${Ux1T^D%GlZ2W*-7aKbq&9 z&SI5b!t?FJgUL-Fyv5kpfXI6>H{aAifUqJU|K>p{wZ%A}lgR9pU|>ea{sS#KZO9Vi z&<8jTgy(oTBwU>cR|cG`Z$u_C5nM;AulJ$L@Hq@kOo9*)hXd&Y(4NtVd7QS6mg@r< zmu)vXT75*qj$VQ6`_oFtg5c4mo9|R#2Nb-OAx$VYBE!HBSchJH-469$_fdfEII;$8 z#_-IAiUIkFd7*osj;zkcrlxC$5BMox^^EL+ zGN3E{*($<;istFCFs^Wrj_}*d)lVLg>0y3qT4kr1?ri&%%uM5J5b1iG-!|SB2PKFI z3_d7z$nAFD%_~oHpnVB%^~4Qv6=fS^Dnt0&R^YvCC_oH=`=EU^n#LkAOA>Ytz`#c9 zc@bz_Y}ssnPk__f*w_H4pE0Oc^n8p^$`b+Yww7AF*GL)AVC&=6lfn z02t&N1Rspw)8GLZO&G#E&Hj=czev35+cRVtnNc827Nn8VK@*lD0C7|Q7f&v_fe}g_ zF1yLpx$yV+?%d5_Jo$&~V+bCS5I|V<3s~;ktu!D?421_MY9P=}Y5%;%q!bUoSxMH= zj!92XHxj-z1PnDkF_$hRE{;^s1&wXXAqR!I*tW|3^8^ybm zSI3-TXMbA@zBvV@Z5)HTg?dTI$jEFFj{4Bh#PIh`uniB#(m(88ObX$f(op$695<8j zx?l*MM~wmQJnbZ|(g9T2rKXTXT3B#)sBU$?nm8d<_iyrHtkY%kjb7|_W=^suIydP3 z-g2aJzo&ZyE;~EBg8cj~8`2C{01pEVl$i*0s@@4uySu}Y!_sEL4f$(D?zBSDQZ~_i zp!}7ag-Tkbcmk(q~bcwTo%AoNu47uSoR`_7FTb(=z0M1c`)ob`fYfe!r0i5^=fTV!I5(8<7437Q2y?h@KbPg zP;&FKM)P|2141J5{xDs_=JX2h$^xf))Aa&^`nl6ZKTTP2QL%)$C?EF<;!ApQYH^HS zV-Md=QAv(yutZ+ZHQJ=laApTQxe=2#*Y|zBPd)^scvSoX?l7&g>gH~cxFx-D@DR_*M)83`59=M5NUX6C^-GKo*fAqiDCF5%$+xB&c*JOg~9 z(#W``iv}M>L|(7NBXKGE)JB4;h2L?Gido);E4%|bFHE5~02AWY;xQ0YS}tpA%P0cB zABcP>VFfVzU(hTXQm0eJUsw;M{miC+N%$qCrG5G)DH(BEI4HRY8$Cf+W`z#>a&8D8MQ5@-3x%F6 z`Or!H>o=dBoJ4Gs6B6=(8dxx7O;|wzy^-DH%+RXi62Ww?gPYZPXAI~t{fbfquZ!bU zy-7Toi@Jm|IP32hy;Fz~6BBj4J2$h{g*-9_BY->g;74&-B5pA_vI&>pe z&y^!`uLiulTI*JVxM&fe<-mEaZ3@ zZAFFMuz_iW;N;({t4rc=d)L1BS@@zWG>u3k9$*!&Pe9{!Wp`OR0jteNB!XT5!=GyR zO_$%>?CLxQ;2(xZ$Jd(=YxHXwB(ik?9y0B@_UFtqCzd>uFv$`xt}3 ze2Xqi1mz=wX{h{=oL8IdhysQB2>>Yr!Vrd9GEXzsDU|6uN`Aii7jZ=T#{mYeYU*DYk@Da@ zc8j0A7bPqOavSc3H-UkHS^mcga#DSq_G=w}FTyXm%c{-RYI(*&-w$GTuQTVbxM&7{xqAUG6;Y zsh-_E+_Q8)oM+>tCg=Hn#HUx@yEc8Vul$?#8nO|)BCWGg$sgnJ%NX**6Kq1E|&xKvbMMaFyBXo3BVDhe{jwV&E4EP zVzr+c8d0PF+eH^;Q2|;EDeNUu0PHVGyO+fDvXjjb^u5>_|HB>42*3~zIOu<(no-;~ zT0b|=|7~k)u;BilifX=pNmGjX3u1IkjC6;MjGtfEqo)=CH?8*f0b#~~f`*L3BrEHb zztqk7_|Q=Qn8B~4w)Zn18eJQtqmL7ijE<#s@p?(N{My=hUjuc?bcQtqJOFOoa{#*8 zoB%+o8XNwjT$lkMm7vwky8!)CPvD)tvK5RCZ=C5}Hs*odZgVKXvbZEL5gx@sARz^CQr|8XX!^ zY;gtKOb!nt+9A&8#E)nz4**#&DJcp1^=p{>NqzwV28}9y*8^4D68{hG(~Cdr{TAO% zVhXbU`d6irA1QXsqD1}&Cj-k14Tbw(sf6S)+kf{^G!B0G9|Z*|G}=G+QYd@>@3{GI z*L{xUfAg>W`Go%u@2@|A#66MKUSrf(oS8`+Abmr)I1>~PKblr4E9*o1uLwv0*=}=N zMqWNPI=c5uZ9+m)ebS>2pl90L#C*fb&gyZ#CH2sh#Y#+u|1v#DhJ-7wtLqbXt;fo0 zyTq5{cU`N%p-B=Xh?nw+Vr%vw~(-$SP}tDVq);Yfz$nwW1ffz z51;!%tezRD3!2Z(9{1nFQdK8~k}wuA?z@*`GXyM-lpr4vQFUGo1`f=2yC4?**J6l6mmJzS4yu6%MUqWJ6 z%Vz(uy6fqw+4Id*GA4a=h(Duv>E^FrQ|0dH!s`4a%l8NS`$&HRCa@;+`Cp@PxpO(3 zYCk_WV`G!)x4W$`HfLWh=7ZlPlzkoIL}Wob9sYiVlIzAQgJKI$|-&d$yj zv3-3j1LqK7a<=?_P|_KDFiIvODheGPS)-1Tid4YM=c+8{5tXt(5Eln0oMix(&H&#N zkVfU9i{Ppo1c)$^zl}GLHZ`4FZ-?^q^aRVG{9=OK=X!Nr0U|V(d9c>QHT3Hes31b4fU%u4HRx7pT*AL2xzQVo4)6VTlyyTDZdooiniYJHL zPdPpW864PO+5V zT92P&r`^H7rycN%HyhojuR>QF>Dv6^^8+HVsoQxMOE))TsEqF&O@xL3wjG~*d=~V= zX|6dtx(k?J!ol(5U6dxKw+>B3cu5!+McJ?1U(_+$hVOHDugX{34PQG7O0xMq@8ioj z6QMVM8~@f&$69Z{(o*D6J2@#d-e1x0v$YkW^5$fziy<_NM1XazUBllIjXt%$-<9U? zPUmw;^S~0@pV$K>R(}tG(WdWMV)N>8C8e$X?c5!LF{+}d$m+Ay4uqusKt(KQ=%A&g7LM{o zqrCGHA;avx&{&+w=Ua_V-}BaFWupO!PQL47@;--+4ysrwS>QPfp$h8I62I&1hEso8 z1%+zmqR5ySj-R^Seg$F|O_~NwOm^Q5OPNs)_h|K*ioAGablv|(= zNOd*@v7}7A&UrO8XG0137dZXEt|-82dXxvjX;tvGSetv$ppw)J~nRu*GY^-y`&HTIO$0vaIkh!bF z$rSR>GwOpA@N$caMC^3F`5B=i(SNnlZeb9WI<7K9+GGP#k6%Z{>ANifme2FWE)z-{ zS#ZFDo%Wqx_m=;I_5+&TDeMNmYA9pR=;#NE11R&@I>b7f#Y_QbzZG;)-YY<1*ZY;z zPRHc-cDT=Gu>#a;!u1n{;5{ubC(27`+?&WW_-iuJZ*PSrJ31bZ`I=y0Htx^MCyOAO z)$m3)eUv~AR?0GzeUM*NgbT1hL}b%lpZJ7R7jN(MBu+5ic%X-*pAT<+Z8?jd@}`Z} zteGvD@VT2;#StIluAyV|xx6J0Nm1_1q^fHF_)k!ENOVHs&ekuY$Zpx(b(iB$`P3m; zbbE=z#k@5t%GuhQo^Xs3L=wve#3yVlEC5u-Y-VO=^0}XYD`oImG|J8A>owfB zsPRpKW-yI=IFDpR*Tb{_*Sw5&qGvjT)LwXt=kwX`9|oIj*DXy=gVSONIdF&$+)v?> zn;5q*x?RinF5yv8V;T?D^D0jccG`@$mDy4h*P{*mM3Pm?)#V%~M5eP?D5ROAEBtC& zKs(QoV*@=sh7%6;4UJLqxh)=>iI2(t_L{RrHWm^z67cZeR$Ivmf^|(*>WyXFtEVV< zgFdVfUp~H7KqQGy^c>4g&B%`PVXfI8pZ;KQf3`nCugwh${$v9cM>W@rN6p~B@TiwE zsG=$gR-?Bp{XeX;g2% zjE#+v3bb)puYJC$>I8VWN}XzZQPFqBwyRC9R@;!u({gZKhgn+R&}xV0;g6@VD!p!i z-Tu-e(vc(?akHpu_Wb6cw`*di@Ztdfv z8jGw!klWxCvx7Xr-4cE+|lGUyA(1VZ-3qGqfa0%*yrfFw9s?O%48{ zi5s5ttXZ=M#JuO`M=}8~#&y$%hDfh2C&AgaKmAnzryiC)zD5&vOF?>#2HB(xL&MWs zR$95Do3UdwTsq4Ge^j0^@fGle{?tcrt~Rw`w^lg4uVV4|SXES5_)AZe^bIA>`sYg@ z0LsE>VRw2)nHS-T>*&Y~n9=!sp6QQEWzq|PA|g7ZmLt-rQU&x)Od|UuncW_*qk8*P zRAr&EgNj4VA$L*L4Gj&?>9Q&+U0aj%3=HLZ8S;zOpq`o%i-B^0QP7F})VDN-1roKYprJ<8Ju<9~S`KCxN2Z zQD_MUlKp!7O=RtBGrJ!8Dj~@+1 zJzxUKAtG-WPlSh{QP@4a)JOf@&->}v)-}7FhF2Z%^~Rj`XSNrZR`GL`H+j0Yb>;s} z(gMkV{tc$p;(LW=m-JCO3*;V0X_h($@&Z7|0R|4%CxuxHuf;Nr)m1KPYIWMSZgCso z>!msDL4}p&qn=irRDT*i|i6xF|^+m-<+hQ=p;BEE3iE(NCvc)OBu zcom)nzSWzVp8nAT|C?t1?5yd#`qKffP>7Y!;UcyvQF*pPUsEMtSE3WvzYdeP1|3^6 zsf;PzEhuJcWYp#GasuEe^;4~km63=*70(Cy;4CaAtB+{ib$=LW4>n9s>f=YY#(mV-aWR{Z^QPTbXB?McSLXA z*ek`KkIEGQLWRh?IRA9 zi4G3UHaATNvGZ)iq<9-GQU&ui>a?=;hCfcTc-?UpwcDtqdD4>paVLFr!bz_WqhI&9 ziB_#e?vT)sINx(NH8IC+m$g&?YM1C}S%&g5>Ehw>@%cn0$LFul(*=Xu_22SuZ-aY# zd(+zbgM&qVeFgTVXsJdfCKhIARh$%NooH$PZWyK-F;FI!O8n2Ti$m-#0@=s|7VbYr zPmzxw`+ufi{vT$68d11sW$m9u!jaxHGW+yXExoD+fS+2^}lV6q=wzh?)b$^uY z0Oh6UA%6R7=Zf!JqwPD@cYq{G(*`gdK#drD?gYs+a8h=vT*-c|CW(MhQBkhmSV#N3 zu)cbOH?FsTbgBLN6+V6GcVEF>gMIdbqjzc9!^EdOY^1W|d<9ThAAILJPY! z!tU_f&gCA+Un_f3^c85ZtbR%Gb|XeXM0+?ol(NiD;kJO~ss{0Nym;u!2Bv#%d!Zh< zoNQF(=AP}I?z|I_|Jg3&BT(*m0Y}2y%;w+Wni%($eya_Q6VhLDMxT?GX^M-W_ZcVHznd zET}0VqGsGi{w5RXmxzVkK%JSJyF7C`p6Tpd`pNf?#&cqQ<#?%$i-+!Nm*=H#sP94H zRU)#DZE65Ji+=f4yfrN|8k6y zUlW~Mg*fi$X$!|0eC@o_M2=(deR0Ixj)y<>oTKQ6=6GGKD1B@CQR)4x=N>-Y9P>su zqoAMwS7T6>d|Clr0>X}Bd7D?8J?R8=*yRG(l*U(T0RfZ49KKVKcWxeei)RbUo3+uU zt+5XZ^JR<)Sx)|^cOU=jz-3k`dD=Cb?8beZ#QU_|EG_1@=5Od*(N=><}> z2dJIS<%(-!&&|~9WRhD($c6I;kkwa0R~zixtE%Kd&0a&3>M83Pe^Uc}u7+FEbjuP< z-kv$JSWNo=ov5)EF;pCmx|rIsNQO+fPw>Ns)rlX}EG+0o5`KOGZ*827z2xL#pgwtN zxHk;?OqJr9`qs~kBTQQlpg;3+w8M237s-q^OeeC*@p^NVQ&P1fDB! z<`@E*$?aMZ{5TGa*U*+OuBYq6^Wy|^++*+FQxH}ThRXRSSmw^t%SXI}9j$9>BIIwV zZnSG`WZ?X*C%ka3%kC~F>VZReX2;jyfq~QH@k~D^5g#IG`E0jdQxEXo8&B;>b>^Ha znJ1(Z4xQ@~80-s`Ym6zTg9Z;Z2!%|PgI#u(r9u`zMH*OfrQ7{)FyGN3sE7WK+!HJ( zRS286zS^l!0+d#$Hq8-aKXkk9U43nCNS2_X ze)P6746IA7h1;asi3Y%T&JK>Rd){0J0ULrRq_zV0^q?}zwY0J&_IBa=?*PUgp zZoW`Gi~qJ|U#LZ6v`Ow1KD0u+Eze^aZ%pfYZ}WHFDcX@xsfDe}TH;-KKSYv?RY!-< zhP|~mE>Ccv$OOJ;#@SRyI5|5NvNvs#SLpkm_r3XaN6MY&9qp&%Hjc^cwif$&&?@YQ zL2;|OLcu0v<)FVR)g8KIR1RWX%ueHJUYfK6S~%?o2E1zQ=BPw%IT^W6Z#4%hMwSr! zR^4m^f)S4WN6YY*nlVc~7n}w^&ReI>C<7xjtUp(ZtvQyT<6J7n`)LDJgliQYtk!hrju(?2G;n0%Aa#3FUr5Cgeldxff1;<}}-8CvfkEr{H{MxA(z) zAyI%2ErwL6LHKtYU(?Y547gL$LBIQWwI;TBr&}bwlE}TajW3T5U^|t7K4?=c=g&C@ z)n;)y_Xhtdul`$a_n>&e+(RPY`n?lzvg)Xef>?RP!;K0xlZMBE%@mnuM#qWs*@B30 zr^sFExpIRCBk*q^8LztAAFt+4q#!Rws!O=3#U{FT;9~^8H3t$B&{IMbqiLE;hdiCq zx<#mkjlCv$0JHYuu)lPDr;VzxJ59o51p;45&sTHxye z9wK1R?*4YomPpyLef*o_KdGNuJRtQuN~*n{kK!$#R$S{m{y11=*DvTi1|z3lG@@B|AP}x=T|yV5?Jxl$ z7uH5?9IIW_-u?toKjNI4L^5&zkv-@$KU!;3Xj_kH zti(NswOV(#1A*$~uu1f?X54TgDly;YY=BO33!-4wZ45A0H?IA3C|DgHh9OU$CY<9x zUA#E|VNjH7i1e568_&(lwP&In7ynV;Q;{R*469B$7t;fW+v&u6yF*SJq>O=Ls zs6|@7uq{?^h!nr=Qrn?UGLZ0;c0=@ulF=~>2^8>4R^16rDj7ME`%AjuD&A%N2oOK& zXH$VVoVTz{GuT*~-u~E{enUn?61S6-m37q@EOC273vmQ;So|-=j*wrknCu#2V6_Zv zJS+=Ex?bHt2LkaCLI?Q`AhrC?v`g;gf=~u8`vHA$PrL9jZ<8oCmF&V35f(9ZG2%eP zvGTTaYR<;+GE|6YJ=s81OazbuBI9Ie1$C$n!>?;G^6Nu zQa*fmKj5j(SW zxmelb@wUJ_!AQs>T^pHe758Gy*BA!)FzkR5y1Usdfk7a}Z&4ntZNndzP{yZ0; za@0V@OiV~n64i8pwBm;FEx6!l{l^6;sNe$g24}*JQO?Yj>Xj8y6BA1>ZLQO#57IOH$`pv^SSDB=U=*_^fmorN$Dlo8a8wUVw{@;3oqZtj%64p zsK=MVQwE%335qY0ujTGD7Ek8RoVs0q$BL;rOSHC|Bh<}7zmV~Ke*LmFI5^Pny>MRB z*euM&VjjrZRG*P#A$Q{q^#f2ePqB-{*++!nJb0u`F3Y<8M#o$^-U~x-aV9%vU|*d| zWp-?mUch8xmXUG3OGs6d@og$n4n#y}owo3J7?Cf|Gy2*a+kG}enJ$6@usBqIv{W0#omp zX=y()U~*7qr5e9=2O)J76;+0?is@Q*!oARE7o~_f)iNN|;308@l2CF`F)=W-dnhrP zsu)jzC)B}k^Rqy$T^q%YMTHaf4t*Qc{(Gtj*>8yp12x$r6*WH$U68cXWVB1nS%YG+ zRBg4~W)h9lZN5KOu1k=~G$cAoD*n89Mv{mG5%YZlmOHv5yvh;*h7V2-)>STLGk)G1 z%QKS+X=~i{USK*D?TF{S&ApFL2F9$*;XEY$1XUMsV^Hlj-7=M`ftea-CjbAHSw^nt z=v{M~s-7IymOG!`w%JW@lv40r0eTz*nWqMd4yqxq-_3SwfVO&rt9spD@#qp&MFksZ zfdR=?m3!Xc(H50O1Ln`{F)-*Qwz#$EBIJ2Q916_bjda-LCh|nZ_)p)b=uAx!-fdt2 zDpz0Vr%pcfVGz4$zA4FcC$R^Yq+j9J%H-kBP-N{>V7^P`Yo3QpNa5h{fKKnuj#^^U za|-@Dnv$*R-E{f-jvhLtgZ|-PhdD{vLS58RKlh zMF+k9v@@=+?ejkDz^yc2 zelwzN<*qO#0pjwsDX#Y|td>K)h)NARpsxQE*auWA0|ZEQd?dMub~X+{X~5vWw2FS$ zuV%Z8?EEtuc)PHHINGdw@{Cxpj~ zkUbvS=RzP6KuKxG*W}_-C(#xVCpuacgppj=*o=ng^%fUh4l)$JhowQxfk*Z*S@bc$ z{bY4{6^EsaJ$hcrF^E2((apupa;~8(;ya=sDJhgE?-4N!>%1EAdd0O~%W$^HbHji{Ml9x~ zB%i_p*l7;sj>Z=Qfss2TAK`D^pRW?yO}yNIV+1P zx#-^mJXcF)`ASbDpZ`CZau$#QVXy&J)X};p!Z;KA*@}y0t>=?lLmwG6e;Y7sn3;pG z-{m2fsVt#UBHyVk7MD}g*p%q498{=s&r`E&X)DXGO&zsUxl(6T;sLFs!9~M< zTm5k7J@Oju6D2eZDot!w<>r2|GF;AaQ_ zkxF&Q9PS_T1YMZfX#H9l$ZAXH#4F>Qqg|VK|9@cJ7BPB z?{RT{et)TG{KW2IGN+Z8EG=AZsm45GNo^xvE-CXUbAB{RFpxvLaZ5q?6UHgm_g9^V ze-7!4lyujV%OXHAu#cHX;ZkYRm&NS` zrxqrDdmdsFQinxlxm+wI?q#k75upq^38~QRkXO)XzBMJyu9~Qd9W~+(pn6sUq6i%&j&uaAC?D3DU%6GYF!V83Uqg9j>EZ z_N5bGdPMX*1f8O{2d&0;bVFvh+F0X9@pAod!!TyMc*fjez4hhikpY`hBT>W$ce04c zXr@XOfIT?tc68re@YM`i<%0erTI72FzG8Dbl+g*}^ z(hZ^_N=t`;bV*4{3P`sCB1nUDmvn;ylF}X0ofDYAxpA%a`=9?f`;2kMIcJZtUu@ni z*Dzqt`Fx+culxE$Wny$)%Mmp{LB?d>TJ)YoX|0}J3ge%_^dH2dO3g`Ad7;Yr^~`sxfyM{V}wUp+Xh zOFMi299);9T&~N#z<TK$mH}gq;Q_9bY-#rGV2_V(bUsdph%r2d6kEOO&^fV4|~eOGE3PO1^sCi||Rpvgaiyo>#=^q8oFf z+sA29$p!6JP5K7>%L*}?pJF*{(9;$Y-+A)==MQcUo|bc!Ia-Zinc!2b)gs*k9R}2L zt+2ZIHQwD9+BsOH!&1^t@0G5yxQ?c4iyPuD`TjE63iaM|*Aj4;^VcX7mddH(;8iz` zT))+!s$Tah`!!#{he<&}PBI@hSB1>u)r9=Ncl45xZk@u{m*0t>K5^pjUFKltiMGVu zmWEqeyP#z>HjU4=Pw7j_Ly2MsTBjdndfxkpOtp~Gl(6GAH!+Lk!~fm8+|k3vu=6#{ zG|SYam&mF)Rm?y73zNOiE_j2;;z$TR?(_1p@$wFjj6D0%UQ`_O(6ysrRelx~^~BH} z!)--)84 zkt#Ym=@ftM4fFQiuXD)!Sh{bgI9f*1Dr#@NRkUZ!n(DrtCnqJN`i(Z2>xPd;RAl)Y z)7ypYRZdmeA45vT9lO^RZJM7;PSi%+WfJ-t`{(h}{s33_+M~D0>9Uo6C^>0&XpUWo zf3{`a8O2JOlPT^WdQqQC#v1)~nFu?bD^SYikwgI2)~#e@dKo$%Zscb?p=nfQ8^x6L zytJ%bgL@Z-sxJ)luBTT&F+Dhz{(0WN7$)!{y*uK1WQ--6qe-8Y@(1L?5@-+ut z4ztb!Lf$XCE1xa@U{lHlg!gBtPuQSy!eYasv@~(!eFX1~M_A@$_y6V#mhF{_SpN%5 z3*GiKe))It6YqaT2bY{CgN~1nT>n7-Uf=>T5z)U))P7a(uV26V`iA=Y*x9+k5ro_E z0t#%OKdXae3hv*YIzLs@g~qXepbCF&Vz?1``}P>FYvA%SDo2R}ihdnZ$JfcBy^DX8 ze~4%B?+bB&^(ah#pq)6k-Fq5FMJN20hU9jXV%rPZqnYnrU5~1CjkLx8W&C*mdh~96 zeLc5}Ir(LzM8gX;#9campFjBFWigqob)rU6L7@Y#liz^d*G?!84gCjBcw$9jL9qes@a*sVVR6BWzkjbSM;`5&{8RB=j(SY}PVJ%7 zaR;p<12gjizV1K2G4&Ab8ZIUpn-0IQxX<6^EdS--y8kIQ{cp3{|LqvJ$Kc!D+k@_0 z2jmDk5Q)?ajk|{T0k->h#97_6NTzv<*naW)_3Hqu%Brf@W8Vysr}*ryhsftT)6PvL zn$<>=x$5=0Gd)=5X2XX>9eq>6r}ctP9=jE0*l7VgKF*tiqlB?p_#`4x4*Iemxn55`WCxdDt0`Vn2Biw=9V#lyzb}$?YYcWcN;*^! zjx3d%@VnK+$H4pEUk@nm}PA%`;Q+#=3?^WU1khZeSfxo@?cg|>d8os579@NzBiLJC5Y%*pvTbbp=)?o9}sR=LSob@^Ei(T4nm6Y)iA3QZI3 zKl5J-vE&97J{dVV$9{Z-!ULPN=z1qw1rkw9u$^ftDkwaFPw5PZM`W43O8}?oaDE=2 z_0O$XYQZ~m{pt6;*6#-GEwQ2%4?N7*VZ$I818C}EspoY5Bcmd))7)HK*-BX-qN9Ch zlB7N*u(MxG+#ytNE=&faTdL&Cx!^=&i-~WyQAE#>&Ea>v38vzC9UF-gJ=`v|!vS2a z_S1BAZCX_}XXho*pV9Q7Ck7mo_{J@KDrnThM5#U9SK@QIdYz2V`uh+3jNRScZ4Lne zqwh1iFgBQ2rR0-8WVl_-;|zSI-Gb#K_hlsqk=_3HqUfLF{*ArId&JYEh{NBVs`3v2 zwH?98%*@wv(Pg{@*x{=$NKp(WR53%gK<6l9e``OBGhOEP2{n)$UqxKWtBtp?IXO9l z`Q1*KABB_{_s~u@NSUvh`Gu|HVBwrBju#YYAKbUO$D+wiTrl~~`5+ciZ-;@h=zW2L zvSnywgdu)KB5o$>)sAdtLIU@L@ywWB@gU+ELp76;$S~2U#ejFza1nbN%5ufCq7J!g zd)x}PrTNn>_lAZv9D3LN9X|{o^eQT@gAz9O2PVA@-LUuA3z&> z0R35$t2s;$OkcL%kABf@4k01E;cj6Pl9NO0_oUoH!jGD_bn2YXPeMA;#KL`DPk$c$ zw|7h&^HcEcv$}n&*{0TXnU(c9q2tu&@c6TWx~ zje%igw7Cb&V7AUQF$(lTwqF?cd}+Se3ZY=Z3Nm(}zGgaD)!G{LsYOoa!ZbEYSvi=T z{f!!!o*pdD`AF@SoY^+VvT6wm3h+bOK#H~}vHroyWRVxMVhp>j^G?&tDm!&@#CB?c zsi`R-WE6ts?OuUXRZi-fn$=bSvh49Y-l0uh_GE51$awS0D>_eup=)(0FGaGqw^yy& zGV0T(jGVZ&z$mHvKPGXX92a-wF65{p)3P7%@&af|%Hz7c&R_3(bjG{5xQI84H^<0A zD}gP+qPwUvm@8msLSO&#Z`vb;7$&5hqAL9Z$**7gp(Ve)|EryY!v|mCTA^0Yni?UG zi}5*Y*xaX~lk!?RAx8pkEe+(m#dUrvK>U#1;d3cx_=TA9KB_n?qlmci=GsmdHmpR? zZm{aqF}bHjPc*+YdprDO8xL4nt&b^}Y+SkH&h;}M<9xpDsc(I)R)grO313lVNEuOy z^pYNI=UtKd#M~~B!0%RW`$=~0Hu*E*1uHwI-J^Qi?{nxcry&Jv}{|f7cc?Lavz@{=E$C zT9-_Ybl0cUqRhgqAiAXQe|D^U-D0f#_&7r+Tps3W?HcPJZEa(d&3Vde(c={xEuH4> z;>Hf87Q<``EH9gA0&mxu5~LW*WAWP9 z7%XgV3*XuORbK>$0LE;Iej=JDgl%>X+N<_x8!r`vB$5z=awF=6mQ zr}A5vFR81q+&Bkd&+*5cA<1_AZ#FHLIggy>_joNd<>fqH3Mi=iwr?DehKuXrGvRVy zr3tsD?-YnNpIpBA@a~D)*w{0Q+;{@3=HZ1!_e82hm~z49J9Y+Nrx58P$;{j21mq{w z1dTFfW-4CmHhFWV6fn8*>r7Y8HCSAXt2x>@jrJ2}K4fF-LB(1P(!VE{z_mL$`|ndJ zm3k=mf>CDDS!AvuGE4;40W{L%Y4^RetdAK|anPNR0pOz7dfOL7J-qvfdiymM1Qp&x zOUryuPqF!X;&&d+KgDVdbKPmZfKj}+w@1vT;e7n2Pf@i6J(3JD^seCI$gtK~ysrT! zYRAoyya%3K7X@`EsGWocM~K&bxgm~u&eO=P>I_cCs>J0p7cm&lO%E@woJk64rddwb zqxd`e-h_3rXZqrBTQ^lfQ8Cd}U6RXW`{=i*j_bL-o!!lBz2AX@AMd&E!$KtFx{p>A zL~?{YS+jbkc5PHq%ePMWD(6@A{V`PXOZ>Kn^x3m#>w_hUpN!*mjJgjG z@-h}^Hw-GMW#r_D1G^^~s_1>H{o=~(xoxCN7G+?=#XhsTcrw0Kk5McU?(}W2w7B%t zWS8D)Wp0(jrJGsoI+~(NfqH1mwdVQhM1~7%_2c8MvC0e$Wfy?x&0S7u5}aZX+wqQ5 zL>W6fS@VmV_oBs|VjT&10nVHI%nY>q!`FR(lXdJAOFo;C_@naNa z&+ExdvWfgguU`i{g7~h`tvwoOa@e%#Eq)*>4@LhuEG@V8$-kNYd8_qF z`{;;@%P7@b&q6Oa`V9>Y28tRi)Jw_9g@pxqgjTC&GQg=%fT^u7s|qxr+f)mSiz3eZ zBvI5grH1KWzXmGbnKV+?hA(StGz|I5H-GC$|6unY@7A3EhrO$P^c()a`%~sWvsWLP z*MEL5>wjCR|NlNo=6t&%At`CrKW{KAUQLYadUPl}d;Nu>rynJHpf4N~ z{$N1?NDa|bMXTqj7($>Mr8VZK$7Xoq>&4Q_oMshr4>KnMvy4iUP}FD|sBaV)AMI{XgW(0~XwKT2@If37*rzVn{OoY1q1)tr5$xE58(>mh zkRT;lmP0t*d~@aI*0kF~Z=F66eb~3Bdb(;l0>#&Cs7=%dQ_KreUN)3O3!-MLl(a-j z5#?f6T_oub^VFU=LP_le?!zl9-(m!5)|;(?G;8f-Xj8CI0#HT(nCA8HA5bQ@1-7nP zYSj-ETMQ()2~O7&zpE{lshiHXL; z!4VuL^X&O^!uI#V{?I`g;DSY*+|)Zbm}R7;oEfh0L9uUi`%ym@>~n$pY`wVLGbleJ zT)P>%oH=q5;upQ_B7;(4&0*vUae0iU`GP z{Z}y157lq^G}U6~(^E^D<)*vQaY7nAQ@L`ITyXNWt3>`Utc(@-haHh95%SWU}Kl>8L?SR)>ZzkRG$)}^r z>v35YoGn2-0uqJ#7h1t@ac_k#3Vd+8De4^azE^bHG8|MPe|tJxqmiFK66c>DJ8lkH zwhz_*c%CKNbDW5zDK07g#HL|vYRGQ=Z0pweDq=^Va4GZRXEl^8wabLyQ?oMCzAZIc zrMtAyGsVl!O+;VqIy<&Qn<0AqrYS0DnC(mL?#|MD>kbH0x2xZ9uGoBVq$uFo(EQ$W zyS^qPG``uY;y-+>Jh>>)slcQ@3G34GF>DwjY^4*9$On(a;Mn`4t#{R*!Le@K(vx*fEfMs8+Qd=--xBI_KdXa%exd zxM-*q#0J#3@|z$Q#c?#u7_X&~P-<(JqcpVCy~pw!2t)=HY}qvS7-*Y2+3xec3?5+8 zxg0KVcA=o4pu_)_rHQ|S8d__eginV5DIy}E8-&-hnVHY`P@nM@m)KI?6KdKg3Gfy= zHU)?m>J=?^DAo+>!^46!LXzQ=7}svt>Q&w8#?lQ;iiGHaCrsbDp|~(Nf6Hd!y?*h2 z>CK(V*eP!KOW<5oS1th|SEKbaYc;~Xj?cG0Gu%B_=E(_;c!Adk1GzS0!t5Jt2gJn* z&z@4(H;8VHX>W4B1g;CJGTWy)d8w0Ss_jD?vFPcElL6uq zzT(L@0igyb?Ih?hr7qNLt+)E12uiJhj^SEpGsz?75b2eYa=7qmZgum09zL5O3IVRH z7N6r_W1lu`EK}a77In`QmX$Q#3HpGZlBx$>H6A5t03{^_g$4Q3NC!O_eq_t zBCm#+M96GH{I^J_b0*BCNg zZ31B5pw!Kz(x7W>9Qx_NWoX2I^DAM03e1|coK+R|47TO?PP zCmtYjYP;7a=6MGu)HCDmFvSIW+2@jk1;t_+X<{oWKY?}Z0$hBy4|sT-5&LO3;pPySHAPG^uKeotFmCXi zot!v3T3%mWSsmIx4A*(`+KxQBKgmYe^rmlwynizwgo1Xadki~U8K0F(@?#?sfVr;> zTwfQ*k>fokefZtWbGw%z@`*I>Ln$fqUE_JB&zb=(C4%hll%L7TsPa|gb2EbRZyoK* z4HV@>2iX|S7}$VC@{FgvPfy0tiMJPd-_&F=u=$4uM}&%ky1AsJq;(cLOhBM%St}5D zbRWwF_YMKb3?aID*iZY2 ze`T7w?HD?#r6H@AeID1}4uw7o{j5mXV-i`!`Wt?8yN~PVJ*UZ_+gp2sui-;N5ja|` zNRLSKT^uQI8HCBNoT@mAIZRRYTO%W(89}e1t0ohRia1Wb;JltSu|=~{EP2j)XH9sk zqx&`&5BmpqEd3Pyqb(5{nRh(=&_XFB>7$4l5*(CYyubfucwo4CjY_RRjDl<4&9%05 z+~8SDwT-6Qxvd9=ovc3!Vx##&0{csY=y6y}YfDfBfJUM{6p!ESrfmnj_C*I&DvH0N zpMk$xQDRAFjb;kv_m=KY4gtzl-fWlsUdBia(dml(>Bd>V%OYCABT!5LRP4ApWjWp5 z3>7|+gPH>@YifI|qeB$#T5~?7ipMFQ4RbAhoP21Voj>mjFn<&ry&|m2i$wNW=xx0+ z2Wl#{!TU568c`V7@7N5NqqKhdJ-f2HzWNO&ktvj_S*PXx;~YK&ndn=Bsp6u%p`$!X z4~q#OcX~T7x;D|*ec9|Ei0SAgIEpV$BFt4SX%-(Qj{itqT9_7REpcdFgxSf+&}eJa zJqc8;(8$0w=nD8&0znvU@JEi3=fCnrpTL zd|8kOxy5;k$^6*Hn7#Sb4h}i5OT|`2vz9VGBf5WS{Y4E^ZnDu!+8@zuwx;ahHjusjHfqE#*fIwk^IZiT7MC~#INj) zfMaqI>p94wc!vKp`1bB8TOe^s()0?@8#Z4mE}09QMlo^GFAmBUA*Xx(^gx;k`mjdM>Me&mM_O%?{u12=yT82-tj<|BN4L$h*2gRj?>k0 zH9OGWv*+O&RK6<@Ek~3_poXlnBHdayG_RnZoLEwJVtqisxPE9&_A%_O&8zTmm<^0{|*d( z>%EoSG;gk*c==LK=|4h8$~$a~>MrS=MwACRdNYZ5rhYt|JHFo+^h$jY*`3$0p?Qc+ zCH(9rUpO@h>Fw9kHNzFU@pF};?lUk9OZC@8w6wIks8-sdf-ZzcFF`qoD#!zjyM37K z?X`~Zh=}8ZQbtM1pt7gI#czI`)S%2EEUlUKDA!zV}lmszfl6%zYm^#ol*a z7iPaaAl1?kvd)C7sl|ReR7saipGtWIiaMyqDq9+Po|7LNT-o10uom+Bl42P56(R(n zFJtC=Zy)V=Nb@)?u+8rC(8`FkO`FVhu1b8bP_z%%&~I7ika4r$pVKG6%-+O#C* zRIuulVn@`%zJ1zrGX1_7t{H+S*JYt0;3Q-%ns4ulx65yXCCg)5dM_71RUc2gnNJl+ zwJ@XssqQ_s;(}cM3;;Q1@m)j2@{5k1&?j!ybs`#<|CG3Hp|3 zb{#@61ZR_48~a%AF_jxx$X#BRXyb(#3-fc{6X^b$W_w$ET|&EZAuV!p90$&x-#a?W z%SwP0^R#;kx~3Pco+MWry+1ge9m6{FH9aFPHdaXDn!LPxc+_VtAz{4q4C7^@x4u_X z9{}P(*S)R2qyp-h_({eZ`I4_a?N^$^XV3neKE8reGSCIJJ;$dmUN;r>QiDYpm!FWo zeapnml!;$Qfgf<>{(dYm2e-`abst6x-yQ*8!k$gnd%%Ubf3kY=UL1=`SnYDxtLpdX z#;AL)v3aUSI8ejfm-|BB66&e;6;WLW=iW19wz$D+`Y3F^z75>b<897Qkyojr5WKd@p zcHYN*=0+~;OhA@DXFv|8F)&M|@ZRn*xC{SzvXdlAOY6PjJ7zjvcLqAH_ZZ%nFY|>@ z!+^l$eaZ`@YMAQR%q)zuS*MRL{=OvpA2^*9q@dOfnM^=L-0_9VE@Tm?8+s;6!0W8mmn}Bn73Ydv0Mb#Q$tf*XvwfSUcPQ2>?{K6FuAi=%%%8mwyimt58llFTtmm1&8rz5xh zTO$Zp>(4-A8LcZcciPbKkkELy8Ar6Gr3H=c85E*St)O(S4>(J|Dt3Jz7y!FKzDo@et~|WesO*VDN`y))+5L`n5wW!gf)5p z7P*kqc5m|I+i!|XO4!f))1|^Fg%xb>K@x@JvuC*4*BEsfUp#!+08vzgPie;Z-tHQJ zN=<%t_WPCk125;fKS6X%rC=19sB=3l=@HSab3JbI!Gsb=!pi(|UbcG4*KIFoGW`Wv zH3%oDZNYQ3oNoFnvkwfI*$;}H_7gvSQbqdRD)K5XFODuiUV}>jh#14brW_P!126HaGm zXRp|q+m|7YgruQU;qtEM$4gKsU9ML+^OguD-`U@nmXtg>UP@%APSExImS(%uO+-XA zn4?O?^IFZ!ESql!;%!bLOf5yUV{)<^A2;8k$G3H-#U8xI706_0e9Yzfx#};0ALLM$+8e z+(P@z@2&a^)*6$I@d{CgbrMuy4T3EHda{ieZNdq0I=jcLT?79VnQjXVkvr$%KgNsn z+evOC@97o8hpWdyPoDufa6zKq5Z}S=X8tR4c6~i~2Vv9l9a4_4M6;IPkcheqX;0O< z5R2wIT@EWS``=pn5*5X5IltW4-Zkj8-g(`G}IEp3q&>-7kza`UZg$^ zFixG}wdqfL9@92BXb*u1BoEbSb;jgis6)U}dqH7A0ozoS&HPjNSIH?T*w4Tuoc;qI zNT9uZempSVNl*s?M591eM^}RIDO5>YmmDCuh=@glkB@JEYnn;|doCA7ykFQWLV13W z)8PNQa%p!PINQ9gU`D_df?uKePY)zfP%Q{>e#*uKEtg>%z#1ED5!=?yaA!gCI`@O30Dhf)U zPFf-JzTtCX9@=%a$~ScV_{;+Bgh{9J3 z5Q~QQoLQ}K2K==qrNs3Y*WG`?AYnstK={NR8gT4})zyhy#YFOT$MNFeuTNGJ8$KQJ z)Or2{1x*k){*^dfyV#-J5to$2a8E6A0J-clI+4?LP9*i5H%Ln%+J+Ki59SE!UWuLU z`M8)Ef9osB&#kSu;d$$ZadwV826_*2r*2R+Zf(Ip!=V&%LTu}%@w9I3cv@c*El^_^ zLd&@r(zKdAqM(D=3c@A|_IC|d_uV`2q$eQzB>>%-50?dtoDWwwu)h96;WM}S5JMMM zD;c|9i{Ms`cjfG>dC<>-9;2vD3~dNabb0yuiy$)p?Mov>N+4z}E1ytPBfjs>1;q6D z7yk9xhbghFq@=m82jbDJgMF?9H|pLF9kEWL?Y?s1vHOF*KP!WzVHPhGlf4llXsmO6 zX&-=Lx26S;fB?2V`EF<}7$0Fu+?b#D z{{EPnCS@2?&kHi3uGdq8;`s>~<>dzl<-As_*|aK{2x%NXX~THEO+xZrZhNzOEAW$n z!|Jb<{gnYP=7fj))KgvZGQ};5@E*sh+d4TFy*o(d~=4EAnS&T&a8%PaIQ)o zDe5*^$o`Y?cv-Jw>VSrA$UQEEhmrME! zQn{eth|plEZ^n_x23>*h2_b{fqc4}y2PF@`+!3vSkKWA0B=|PxQ$0R_Tqa553Kgpis=W`UvGJ>U!5epuOj5waA!(IA7*<<5#W1@7uMfmZX=d_ zU;3O!Kbxu-CdV5Wsd2LIcd-k%Jz!$GK<@Q`L233o`i%&1Umrt|A3IQteQT}V-J77I z_P^WW!gFU5mfW;oiyqGdr(*_2N7V&ZP}tohB_(&{2SiQ@F{@NXMFlYk(!|_v z69|M;(W~z=meX~UkTEJo96#s_j7rAddkFd zi81IysscCIi^svS1wZeLM~n}$3!QNO%;1tjCB*FlatXH#a12;>aAgRWPfuVyy_`?K zed9Brn+qB35JGdghmDO5k)%Es4(G_XJ6ikP5XUp4hFkj(Z1}F5X}IatcC~V3w)?BpQ2GGY#mZTj4T8Hka+my)T3}MQtyk9kPvX4ZA%5>-eAAt zjE#YTaXC_Scz4LdmwIbmj$rztez$#e#8y%Y1e*9?MJ9bTkvAl+3%eW=K1LRto;r7vekNDPVbx!4bG)o#rXM0KupvpJQVKlP(?l{`?SD z;w>c3l91l?XCvnI=$d@$(-27U%X`bj&i+DE(*?rxnry{-dm-X)!wPKDZKz54SoS0@H~*ZW zVWQ{Xz`l=QZ?*bphZVHi7Dg3DRR9qUkOo1!zI|{27oaUpTnJu^G1z_ag3g^4b*w|P}N(;?A4Q>M>(E7K&A^TBtaehj2 z0f`7R66Ij(WUy6GxTQ@KuU@2gy$Kr!2Z!JrBpSAEWg1#o)IuU)u1`+R8f=NCQ^YaF z95}wiObXxWaju|>>;7_|nT-YGAFFJ(fA7&Q?1=-~@85z@Tf3TP6*pW|Aa-`z?PxNZ zMbrAO9TH))L$t%D0*ZO|J;46DzVPF>KR-R%O5`x?fJ`vRXbR9yilCJMxQRqUb!TTs zP0-G@c4SWiw!x2V-n_Y`eT}P6iahM57WucgdtbQ}Tz7N$f)Dw}_5hiq)5hahdrICW z*AHW&MK=v~4n?K5rUud$e5QQBHWx(f?GIGRV41njA4J%yb2 zpSijR3I#V7Y3yXQXU(OCi8K{aSH)OQc)Q2wc$^V7v+?Nl4h)P}+R|4g%XjbZ+mYM< zOb~W~yg9FRK6DC`ME8>wNT+1KEihz_dzrIRD{b=mqWx6(Iq$Wo3|iXS$o`NeUnj%1 z;M<6(CqnFQCw7D`9Fi|t^+M-pl`C&Z2GCauwSQ(S2yZJ%ASK18FxEeP&0DX$Lkkax zxK-HYNuuih4t>Fd`wd`7ZMK!>X2&oif$Syt3Y+Iv6aqUM-IdjT;>$zM;~gF0;N!U< zw)eb*?(w{q6He{?or@Fs{(XT=t@^oU;Mc3kP|l)AOBGval5qSIrbtugq{Cb`D! zJj&Y-Von7?gefH*ZLdeezy4wEB4YbyY$jtuv*sN}Cip(^wI2v14h4itQkQwjsLZj5 zYDZz%;lSiS8uj;2yrH0cj(rRI98y{mn;`QOmb~}Az8GoPVDbpJya{>NQ30Jxl;oEk zDSw|MQ--CF@1oZ{`L{RW*Z*wm@#VMuf8Znj|L|ihQ$bG3)>IvRW>|aJ2PogZS!}tU z?De*YJF8=YRcAXWG>|Z%&(>9P!{NiywrfxCH3v7&Pfczj?a=oKznvm3}8i=zUZ4i#I!I{v^f*{+han7ewa zd0z4(eu)Jf_eG8erRAiit8`UCHGfh&_*mXUt?cKTBbWK;v&)Yzg;(u524Aj4u5TD6 zGj<~X+dC|9h2Dcb2M&ru2*ka&RyXOlgxpDen5|y+`Z1_?#>JIm5&zx=*qbrd36*Z~ zom26erpedAg(JKRyuy=>4)_~16V1;=p27zT+7@Fo>#Hyus4N??AQzd zQ%GY6yyUr*6qShc_P&*o3hFyMLNjK&ZRyu34a+cwc1?WWX>BdeBph#&Y)4y zQ=kqq~ z=nM|EsP=$6WPm~DH3cU2y2zU)2WqB_s#G^{5>b!`mAgO=`|KG#Fdzy0e63?c*=|cJ zP@^Fna{DI-_6rPI)G4ecr_)sjh+SnU>QfuD439{tgm4#-$rQE_<;BgEI0d-dC)>f@ z-N-R*Q;OYz-K5YL2xtt6lyE*;D6$2)ep`8t@_316L1+|HT;P17{hAa(9d&9uPE_{M z%v5R^rHF%r%@gHk?21qXy96vOP4!i=%*RT_AKM5yJX`mJL`t|9BqAXAm8Vm^)v!4> zHr87H?7U7(;_Bvvl&qx9k+msMB_%nj+jdL0_ZqF0&cUDalO-F$lR1zqMYiHC>A>&m zap};afrFCWa=*r`9`8Des0VKbLgePi1zSROV1Ek7i=H{&oKi!^hLj?Ghy#g>AsIH8 zuLg@70+D>yPTQQ4F3{E4nYeRib&0^t{&rtn@PRUfT1T{~ru>e=W=VgeOgK*u(!OWP(|(vLQW?N6hHBWBs5sD6U8xiYtSHxHADf&|yV%&b4h zL-lpbugFrUt|+PL_*n5eEcQG2_SZQ+TJh+Gj#sa1TJzx>|wHm3Od1N znI{9p*Wa*xs5v<}iD%jb$@3w>AuUFPB3^A7KIxSu=6%X*Ca4C6MyX0BFJ5a@)Ru>- z?hVNl5|9t1K7XaS9_U8*F?j@hfFPjwsloHc-Zr{`iiI@<>zFy*k7;Zj+JOuTEjdp@f8k zL~MK1`M{jlQd?An2X9shDlmn!EeDUJ-`$h>xQMkqT3d~+Q#Ui5qw@)ZQs?#N9JcsI zitQCCv?!EUd%u7G>t`C`TZ_9lG>{20P7us%Kip2Kyl;N`>-A)EWkNn{bWUn2i>2aQ z6YgWJ%Dyyp6fUvURK24uevN8bnb(->uTA>OEQf1e3^}O2t13DBXh2F1Pv^6ZJ1O4v#^|Emhfwo7F1SLfM*`r_8lf-3mMpC44O|NyKtZ8EwR@dEY)#OGl`!hdU-usQ%6Vgo1OJw|ZGW`J;+O8+FnHTv;JRK?u;;Zb~GE4M%YYQ^b>7`v)JgjG>=Cg?@KWf-|=(JKT?3eENW1N7mZTp+PG5ptQiF z()y4i7GEtwRMo1iq=L}==7mnBwG4T~g^8b)Mn#^)bT?#2t2k`t(t#`TgL57pR_R9X zBl5a`EMOS#j0l~Rp{Uz(D_Y$Tjo=nOWwN=(nDs6!EJaUR9+N!P+}EAc=NcIk-S|v= zecI!lI|Aok*ly$`8-8nysLN=G`T4R%d4VObO^1sfwZd=(k8>344u|tpC4B6AdU~uT za_i#!IAhP80;*0{#`$NH@zjWwRc1pyX3iSI8R4aTQ08buo(x>IlfX>x?C5yv=K(8e zOD)C4)<`jNE3TXml-w_NPs8wN2nLO@mefVN>m3eMfI7-{#gkM-Vk(p-?FVN~yE3q% zoziQp!~p3#I}}ol%M(I=%H!~iSyfYlOuuCVGg|p)tEERS<1M1DlBs$~@j^y)O2_Ud zRA-p?5t%M?y0lS2SnEg25M2v%?)}O7rFY?a!-r=q<6L4m^}Aa6FFrb(=o4FXoY;f9 z469#&Q4iPPieHlmbJJMueNDWs2i)9PeUE`$>zt?+Kf3w|y76w*O=7ZNb3hfmFj44NX-c%p|vo?Ptc_aL3V$rBp%F=ev*V zVGv3okbcL+b-T~R#+LT^=kpEnG#t8oFJy(w?+>C<6SpH>w<0gZI(s@3h3v_*37Y+{ z;t5|;yoYi&o!y9Y$KTTwf7UDf%yxafAnXXTlO*o@bx&03s|@;380+?T^3qRB$ETYI z2y3$d93;U;$Ij8y=I5l{yNn6Vd98ArwzVR%0ngUNx~~Kkx>WJ!C=V%nSr*PwxD=uK z4IY?n)|31l1+#MW;%E|$#pRL6M7hr&lc^M*vri->99bG^E3L1}$<01J`YLZ{`WQ8I zk+wOtua702sch9Lg_5Q@C8*~@J%@&d8RH_gMD+`02-P3Pi6dLKd}zl6e3WgIX%uryuq?bzZ}jSog~a#`RM4K7o+HV7!E*prmUW z3H@H%GA$Q#M3){AR_E7tHew)d)9VcUB#tINEyHVyjUaf$p zj!&E-xx`@GoTjT}sw<`|ZTIqX^%szyrA+m@M|()2N6McVRSsK=$KJ~PHv*5>FF6lRZJ5Q2bC`QE^Yqn#7m3 zDb@U!-AA5^N}tcRD?L&lE*w6Ub4DK4-rvKC1*swYVR09$n+}BRleh+&MD)` z+(F~M4e6l_!4f5fPFYiwBCpok;+Jpf)SCr;l(OFsykCmancLj|3NwXDaHiYs38x8t zDz};|=@ZK6H)Zr}5Hbp&i%EP+JLL~d5p9j7LO?rj9Fh}uGM3j7d{rvO$YL}F!NM-S z)MqWz2YY}BYgNtov0de6UQFD7qNB6*JXtR)C7+q)C!xxfvdE|?mb%Dk?KyQ$L_**+8eR1l&zGiH zH}^3yrABTCaz1!~P&GAF&NDb_bEl~-bu6S{H~Q`=EMX**Xk}vXu3ih_LT7j_y-|nf z*h+Ya;!1R6E~EO<(mCzk*1?(a+AFQn(z2F7Ntx&NuCa{)()T~#qt5^diK&g`pM9?3 zx!6G8VANDo)%|rQjQXp8?m&zb;@&lPH@08(w=>eZ>7uM*HCvCmaCXf4+MwNji=%z@AH zd>=iCu~^o{rshfOkA%3aEc6p(P@YSm`tu$)*P-l(K?GR7R$o1sglLNx1W-*|6|^1WT3fOs%qQgV?jWQo<-!vzyw<;&lXe7}7YNV#73PyVH}zNM){ zyJ#W87|*yXzHH=2q8cT}bF0CA+ z@Plb&M7i2|1y!TFUjjE5O%hZ~hu<4NT7@l#<-gI#pHFHChoD5st$U*9!`<($2dIt; zO%u-x1g8Z1|%xFsg|Zs%fha29w;OD>IVk^OrY;4b|}foTpsYa^s~a?Z4bM|`L) zI(}D?%Y)Fd^5WUSWVJgj6;jGyu4dNpbR=2vyXCzfn-RK=JFvUn3=d$*=bl;f4YIRzO7z34pwj<)6LBXUOBAKh?Qr!{x9`T0CaSG93^ z!9(V=(woIUIdoP82j8BE|4Mo>88>V>UFDtu%*yfk)1A-7a}P*wJrDcXsyPZ-j#%i} zk44jbgQ=^(*CWbMfzLh`$4F!6Hmedw!-hVkyHhH-7t_^b@7d>W_d(2KOq{FK&E~N& zjluIX#7#na7fTbgWFK+{-V6Wj%&uT&mm6_&_&I8Xy91)qu95qE;`3RV{vyq=d?P8Sh1&fwK-z$jnqNc&Z*ZhsUrK`BrSzM8w@Kyw z>kGpacqHXl1(tF&)L&5xaVao3p!$7Kw%)V;(b+j(GM~gpY4f9U;M29=YlP&!oBK~? z*5YDfUzN}5M(l1);oM|pK)CP{75r@M_c5M6!3gvalT4778i30s_W@&L!+AqX%Y-D- zNPL|s#E6G1OXH@6@kP(MtEvN2Ao4+U<_T-Yd!$J2`@l{~X(xtFRoLYVI#>+ACTyK) zgq=w_>pj~G+3sn~z(D4Xk_4ei?xKy&>!?zkjqVCRtFng%6e}cO9vPo`Wqym@1p!qN zAL9o;msP#b>|c`XF89Jm(jL9r#FW*6`^4z>Ik+L0vvyzH^Z2XST9j`7w*2#eDf?ZbAd%FRAnU z-#ziscRX~yX*UmSj16jnP)1LFPNkWSi38Q*5&H~WBbyH-w;r;%u*KI0QfiRLriP5c z6+jjvje3fpPozY_R8}gp8VdTv}&PYpJT_esrSUebK)7f^3k+-A$!7s{I zP~FbB(3>?uxX73$TC@;g{+lpRXWuo9tFX88pv`Hj9hI;GWyt;4EnzqL^t6J9_-KtPm`R=QCTkrt3H5s>a~6afM01_7lT z$wh~BcXxL!y1xOw@7}*Ze&4zFwXbuobFS~~^^bt8$z0Ezb39|*W8C*m02~{4I{Ky} z^<|Y6M<|$s$qMZ!@hoeh5Qci%Qh&5RUGvFRzN@`fY@{=LYNUZFh1BUs-*hTsI4mfh zaA8WDoTOGnmN4KQ_=ur?4F^~ZANR5)F~u;(;?k1-=&w6=INYD2_|VwRx5$09bOof>Byfz0&hj_I++d;n33vb;j29jao{_12%Z-HLG+stz?V4ep zZYswh4|Va+iSa#$1%@ArYA@m0L+KQI!H{EdG>6=~=AX|o$9F2Z|h5CtKkAa1}zhU4PU|wB=bJ|j?qb9~MA$Ts-o>q`# zuupQ*|4xov~onnFDrc8e#MWewzu_QiYHuKYMx zfHNey1@n`4OnOx#E#uTwhm+=aJU4lM=kvcek>n9f4N`6c*-~_`$FhJ zE<-Rw(sB762U#**Jj(WaoQCoxbAQYYNo6! zb?B>szsV0xLo?rO$bf)7GV=H*A+&@$@zA6BZ57;1QblSyWV1SEt$2Zq`G5*bc6t@#J(t zH%#p7IDuf6yvC2B&%uelWZlYD}Tjn4S z?)S=x8S3PJvbuxZnq5z)kjUBLBYM?xs#EoCyqw0Mpndzgpm=)+P3#f@E!KN44Na}) z(DU5CD_n=6;u&No;p#?oCMC&*&B2NLuq9D8Q<~uQko-n>CAcAa2rNqV>zkQ{9D+tE zg=?u!FQavsfVDaGVM?z*gF?)=-H~Bu9>BXj{2r;dqW>8OG_^FLj=g{8Gp(31b^F{Z zN8;cdb1?w2i?_!fbOxZd8+9NR`w>r&mL&V}2_iWTDc^nXXL7f60(LD7V87U@BHcm)*pKa-FaDDmB91CibIiV)HiZyM4pB2h)KmC@3 zY2yN;K`(!()Io0N+_(a2qlIcZGwvq6^o0z`G3lHg%qff&0{!53NCtkljd7trJuOaMOyhKwf=xlS$>hE9l*4r`wV@$J z{8W2J5opKL?E~=&x*n{y8yYe)1sPF0(0Q225_&3*i!0B)BVCO6P4zP^O;67#Zf6BO zzW7D5nsQUrOV!olC-i6gUTC}P?BAY=2@7|(jm=G`Oao^5X9^d~H$pk~BF}>)eks8| z;97LO@OeHDum8K5>;D_Cnm+@=@b}_(FGgO@AG-go_}IVvauaYmdU~jzKK<()s)N_U zJ(m}kvYj`O!S(d!=6PF4R zPaB$>o7<`0h>E63CP)?~;Pcwtc<7AP&C($*+}iM_z48!7NB>;3^EaG-boPXovcp4l zsrH#7{y}<`VAox*rjWvENc+zPHS#enMuCy#i&tlJ^*>GQum1dF z%N(+55XVL%WgsF@$|xSq$!2k^q%Ts6Yz%sb^h!O$DI^ef8AXC&(gmJ@j-HZ)yu%8O zxXnTLamSrT-|q5=oz49$gwdGGZtg|^$Yua`da@ZuGRady^dJY6Z&6;VeNHcPn2z8% z#Tma{eg+tWGO6Rz%A&9$^GZug1ID`$0J z7N;$mvw;*TGdR*`bjBPZWQ-*C06hG2M&t%Rl}5_3e%TJXLGgjm?|vmKzSrl?ab!u@ z*U>%maXMpV)80r6d=Vq=xzE*8^ zx}V)bL2l1^!vdBB;0smJ$Pa32=ffQ5FKK84)njA@VFq5^?GRXlF9?-3UZm_ttSZu?J_OMHF`~}f8 z_(|iN{X4gz`UfrDwXG>6zWvSDL^KuD$M**{o-;@<0j z?Q=#boE4ugv^3u7KRLGBTP}8Jj&9fpg9(Qdl)YE{9_ya@R`onUc>5tk(4NV~p{u8- zcHE+4Hf*H>t|C5#U!S0eUAu7&M#{FA#<8dZA_8{X8a`>tm>P*$^;7eGM;&0e%(q7R0KbF-_R`2r}}1CZ4{2kO&x06PkxagP{_3Zj0@!{aob`2<)y zq~r;Oc7=I{<0FH;*)0fqhMe6CzbIPEu(=F8*;IYXKevL2;hp@K1h?SKC=UG%u!QzCXy&W7ulCd8MT#4eFQW z-PTL4Q^a(I4$JHQ+NSD@Z=TnLLdHnQC6be!+t%D%%`4%EMu&ig?)a!xHYuK#_SnN5=fa?+F{MI_6CYl|hyv{e z`DTL2D{~{I7EeqxM9fFB`I0)K>nk>XH6+~W`#RmJEiOo_Af%v+Cm9BonRQ|h#tPKE zpn6#ywRoe}CP(`_6uLuwdT*0J=^2zB@%s!h$9avN*##0TK>Fh!A&af`5{a66a!&+a z)o1Kh#eY49CVtFxwNp9}`(7~Jhm+I{prB}-)Qap%HaZ%hYF!;E7;mi}1luk!L-RM8 z$bjcWbh%(>VYmopEUXuYJG7wTbn^-b%0>hSdpBIYXR54B@Y1rV9tu2k(yv-va*B%H zQLMb*&j8MplIkiyK2^^qBFvb*UO|I)`|k6=QJyO>tG)X96Bwh3MIDcha_qsJN)Vlj zcf=YLnmFR*MOG}yiB{gAs&V_yZKixizR$eMBM-r}BIPOA7zN>Gn72o)b#bviGwF{e zcy^;&jJ8)x#u@h2g0)xDB9-!l=Baf7#Fy_;gnWkV-0dG5$t2_7yVKVfC1v)GreQ5F>wxVJ32*|CN?Niyg2>G1% z7P&IsH43eN+CF`6{51IzXs#$OEhQ|2Rl@w*qC(zRH||`m<7~6#a+AQF~{^_1+;WEvi9ifb5*8B#_<6C*&N%otU@xo!G1w3yKXY0Fb1ish3 zu8%V@)Y3Y6Hi>@9C1kJE+w_=(^}f;1xN?)+!v>~~-vXE{EaWUa6_2=9*R@=2ZS3A` z3D|yqoo*id$u;4?ibr%OeP{0)w2Y@N;dOyYUKa%xhA&eDX2Mv z@WRLSBY16Q(tiElp1qBzbGjedY+r8m>SD+wWX#XUndscqHLxm^Yr{0a;E>v z+T1(BQ1Uq#@qJfL4K38IrNXtT;i>labUU9wYJEoUetMjaK{G3JGxFWQN&V$uQS$XyGWe_A(gbPfkhR25u`tDe z6=KfrJXs+WyBGg9LF&fcduKK`y{zwGxTb>0&3`r#e5I4elMO-aJ>ePehxZ%pT^8nf z`FZ)^VDbFne{^#&>+47wDny`(U~cJ0q^{7&$i_As6CSG4h%HS6{VJvpUSA4dDRL~Y ztUUBeo$FFeW+9O>$=-AdeJd;b_NkMg*9&S*9UWR8+_~_GfRNzej2W64&D)@sffev4 z`Rft0x%N=oTT4SDmY;GAA?X+8){$!z3T9$)${trdp4 zc&~eg7QEG_SX*1mthT7EtNVr9f-?Mo-L2%})g2<4T!K6sy}ss@)=B^Vp8Z$}PV;Pl zl5O_<0XI7Sbas4k3CwsY5ARv6bru*)Sn1&}EB3F8;IS}tW;H}GdBqqxBkAr_uTWlg z2UUhhJI8SGTdce5Y>!7V_)6=lrN+u~u!NeL=Nr4BVumd5#nSFo_g&G+!W>o-`GtWD zZASnqfF z({74AWrjmY3xJ2m^ZnQ5HGc&#k{|eHs+R4v`(DAi1TW{0WnRMXNG2ZaRPP%^TH@|~ z>l?rPE~1qnis1eU8vz;J0VwN+iZxW&Y_Z8EEA`d&y*}hAJbRjwW!w~awA)%DX(lr+ zgn0r3Gd&*hZ>xS^*Vu>02digXpc?E$UBGHqxm@ChpWbhj!H9?jM?}NdH?uU*+4ku4 z5IuM*?htLmxgFrM!j{u(q?Be@jR&;gHwOfyGyNrIM~+HL-w%(dia9dIq>WT{CsYP@ zU>s;knty8J({wbUuN3P^TBzZJ;@%o!ggR}vc_OM0TNeKHztD)Rzqq<_EcUwx1%~hK z-LXdQpUp=$FhcVw;H;tQd8oZcAx_G%%x3Ig7i&;Z>g8PB)01bKZwkBgK(^+(dKS54 zHmAeXaZ~NG(w&*y?EHc}5!E!6d@Qg2Xim$yaNji;UvY}DMefVh9t&0z{IMm8_B`sjoi*CBoXM!&A1}&+^S0>~(t$_N1~bI4NB*9A<)L654LxWCBW8 zhRq7!|9oXw=}%>aN=4Ot)y_9{uk`I$^06VUNwx`inr_)3sa@k5Vvg(SFu`LI9S?)7 zVgtGhBe!RS!Weh?dCB6(CYIJ&6_~z4y7^>MekqtLepv>v+wTNXNQU;OnjJ%A zLOywLiI7OlVb8&!Dff;|2!pI;zAp)ZU_Rowb5a@fO)~StViI?`oHU>DE3^ zVqIA2uu`DcX;ENTx^!6Tdd)HR7^c}jC)MyQ<-{Iu)xNs=V*jyaoV=$L4FDFNG zXx1noBNMU|q#AimaS|Qfqs^Y4i2sW~SXe}jozk82)0?Q+!JDk+aPai>@DSX6*vOUk zyRD5`O+4j3KF>2!oAtuP!;r3f{AY>@%%g7u_Ag7(IvkQXRTLH$vUTHxK9$ZhFPZ{* zcNhS^d*=?F)X$)R4<2)OvW}n5lJp7cvNzgm=xl4?p8q9h%d&0;)*m{1YuqEC2L=!A zVpljjI~$|ELO+G?jcB^7=fBnQz5gcBP1f@-FTEH-!nu`Ld)~hIwo;M5^76%3jK0nn zzkErX@G{E9PdYfSpk93O12&V3FJ5f@eH7=paEkRBAdh5R{M;F>eW5ch7_qK=?O}jn zX(Z2$iyy}`t&?F-U|fXROaJa5=*Fc!&d$!jD&w@){2F@gi`erE= z#r`=yVv*-2>kTwQePlpXlrnI7UVG#1>~E^`bHF5gSB29V3K}8F;Uc^}NhJI+0gza( zqM&|f(DJ!*@&2(ytL?A>Ytz{#rjIQT_=zsB4CM=7@j0g(vzd|r^{dH_1X#(Tw8~AP zbTR+D=ZtLPS8nd|NKx((m-WVkdc99?x_mA$8!^nDu7^J6_k4PB@Ch1W%)N=^cPU*! zDgut~7I0AW+g(u54tJL4XJ+1&T5kf?NPwR|&7F{0HMCkIq?5!5?Cg%dGkeW@uaP=}N$;bM&cRkY z&(XnwH!d`fa<$-8gQ`d>{M5>i)=I>=4`zTxi$TTNd9*uh#K+4!Gk$t%>7|r}4R??kseI-f=qcRW{3I9|yy~z>*Y02HnM_7l~vRl?(tzwGj1V%u=8@0ps`H zRpFHYDp}g<;ZIjlii?VX@Fqx)9^MFqLY~w8Cu7?n3V{39Uj{7Z_Wxi3KP>kayS0GE z>~iCtskymQj)ovm?m$pk1y=haEMGe2&>@}hQ+fib0|C@|`h%vwzudymP%5`)Gn;Ec zN&vfVxhLg`4sT~HD7;~ckhmFJS%n(X(b3_`@m{-ycmJe}hqV9g_Po%Wyyy1&8$fI2 zAG2KOsQUez7wO|ez!4D^R&%rjd^}-o$wFhb#Sn8o40n(u@O{XJ4BlFqnD}KnE41j> zIM)(xwlPsfAK1mv`3VTYh1#95Kn-Tm?szdK)FTN*=zP6?4C9L%Y-2s)XMK%=yu7Qs zyKp_Qtd1R$o8T0Ij{ zDt7t&*>JQtc*9OOm@**|f2jsIaR&RDGq{FNVi&G@&9}#>78(<$d=igh52jIMW*Yqq z$hN@qI@_!#`t$g1WF-VMu-bzuJtrqn?VpUoXAE@$EfjAQP@+#AQUiAX$au@jnbYT# zMX%C1Ai*KCHm8M=^X*x?bZ>vWD9!TOh0YMYT0;9xQBP z-^QE#+S=OO5dNSHXjzZ{8~|e&U$CyRCNThEiJyPp+MgNGjYo;Wd%Vy@Gf<8Q5=Zaio91RPf18-;G4R=htlng&qY*Er3FNSjwLXnzVkSZb!fpKfO}fz;&WA2 z?2aqNK31y&9fyQzcw9i*VxZVUZ+B%7*n#nNxH0y~#^Zyn67xlRjRrrU4vR%F>VVJ$ z5cmZTwlgv^AjEO%4?F`Bp-?a-0fXFeEARPLBY>g0fhf})t7lhgKpj%c}cBlio6Mb2# zXFxKALo<<)CBFU18{h!DTKpXTeGfFyjt92)+U)Es@JLlRfy+zEu2JoFZ*+7NxTX&Y z3E?TtP7n@FWqBSvp+4Ib46MKqecsOj@VHL{iN6j_E&REgxyPiXoMi;2^CG=ZfvX2$C@#3?&aGP> zo}TpAh_dG4S`6lB3NLj7*HG}7c<@U+G4N|)u|!$FArOcb7gtyQSgDPztw84|V;SOs z#QxqD6;AZI*Us0Z@@R(X!zb8YyPBllVE_R$<5-X48^-xH5oNi5lB*tw`#k@^D?A)` z@z0)UBol$kI`#>!^n8Oq-=D2lVfQD>!|o(;*^5r{szW)<@<4JW`CggJMr?bYrCAtDS{C>@P^>N!RrTzKXc{7kbKqB+*&-so; zSfLw#J2F6i9&G;X!h8SEFCi*LY{`qHIpTUN#$Q)05t00+xbDvl<0 zk?zEB#be1b`WPa1$m4XXbQr^9*SHt%l#SuK%#_MzxAdEk$jY=SP?5XLVtNhGGQ-ir z>4~shrP{9Gv|!mJ<|TI%QH8z=tNAKWX#JqBE*wlVR_q{EEwVOJyxx*>=hU(IR$r>3 z=%1^n(_T`70y$!X<PBi(S;1m*NS|TBY8B9CaK6AYD&py2Vzl^$^r z4aRk&e*5e!N^viKIy=cqNlB^5GvSQqWt`!~jpAony3D|O*E5t_vP?#kbO&m1;LA#9=>z%#_ev1TXaasVod#F zTc`EZ$-C3mh}N+UiGmgRKX;{nTB4x+;~O4lfF;P#?Dx_S3zQ@{?GeBL0vIPpgr zHc6q$0|N>GqpU>|p_Ew`6Msj}l>fm3JfdTrI6Z6rVl&f3G;5R?_J)Lo$t~g%Vwan= z%2?b703aZBq|~u~CgJPGO&f5oh-$%Ue2QF`KDqUTa{51(CXRs>e2~%r70J`QD%`wH zK}1DQzXYfmvrL)XE>IK3X;F|VakTK-#)gua+v0e|ssc4IYk}j((U;Eda@_4e z7xhd5G|nZ)yEe)EeJ);U#XIDpGnAI z8$y-^7=CAW6#I{-=O*iIEDNLIpM!dw45XDj#)sou-;VA+=uu4UThAq2mN6tetM38L zf^hw_Ph~x6Z;*woC!B|o0DSBp93l+IduRhQu033mCnOcZI!G2?E-OJZ82lwQhE2WF zS0=tbLnna_rruw_eN`yZaL~|*HzTaiEMphJkJs}_=cG_D=wwq-+L|VRs(ez8uOOm`(EDO_t3n46*MOQ z9iG;ie!HKoP*9$!*hV>RpU0XVJp>+eMkJSA9|vNch{HbTRZ48#qT88Ueg5AJkbG!n1*z>qk!{KcHH*XtO6|G=k zZfPCom&U0sk17woBDe}G%vhQN$u~fxwY~q$W3T%+|LCxVuG)tWrjsMV1R(2OQ^(5A zX1>zbH^NzTrLJ7ro!wlAbkWUxcxZ5Yzpz_XT`T#rfVug0ddeLxLR-yt|9r)DUw!?I zGNL1D)jVeU$6Z~N4x!Pjxf=Os8)!=OPQk|(@;QT6%e^WeMLsSL1xNapMQb$ahtfvr z%<5u|jBGXbV7JMur05peXWD>BJs99}rQMaG8D=)2nRrapc-Ke;p?o@qXORl|-bC3& z8dQq*`7>|)6`tdHVt!97r2^yCB-L#~*!KXKbaVUCs5cnPRCZ`_y4J6T@p@&@<}JY( zqjK>i&%Ko4Uvs;ycJb|6e1~r~HfO)KDFr90`#dr*QyqHN2<7&RXU9l_Wyr>(wn4qt)1wBr@5_M;Cf*bJro~ zV><=`76HaX%F%w>aqW@Pv34hWspRC6mfY>Z0u$N%2&{_JNv}h1UBL}vhq*R6$y~!; zqSp@c*+PRbF)Bn9o&eKQyQlG9$KI}o>BLax&MoMiaD*-+qOJa_rANMeZ3)O?@_J*)kh2KKQuIH9_+*eK6-5iu*{( z(L}iKI&?1qm&d@yvs~Nex7e4|^lYr)7rtL?MZQ_058d|tgX=-m8TcZPJ-+qf!nJ*a zup{n=tO7beurH7HkN@mu%bM=Go+eJnah@x)m+FIpu<9v<9`)iI0|6l>J^s}QJsBf-3mhw}oYwsW5 z^6v*I9$8Y4I4Wgc#edMsgqLPp2kF3*m zVqh3`B>`B#E|XK-{ByR6N#bk4FYy>AhYxrOB>L;AmA`YVF6_zsD(s{Jj(@o7zPaa3 zDD>D25LKNc>TvHPR@OP&{mSkR0n^*zZpvheCoQGNm?EMYP3K52bcH>?ef!R7vU@t} z-uv*?iQ>vC!wx)4TZQvWsy}_S)zoMwYhlI%tUBb%O>y~SqTh7H`8=-HY73xXrtRCX z!hH>Oh{AbpUuj31q#PLF07b8PJp^Il{xP8mtKzIZDN`m>Mr8_Xnp-+GRJF)FiX9)LoH`mI zd6-NzT4W<$&d=T!T^vT96&FwJzDp!*q|^DsWL0K00&YZsj})PNJ|f|(Ge-VKcQ??U ziQ-f|lgbu4&wqssr)It@o)x6mJf^n?ApH2`n5Lx_a@}HwtxQ{qmK01ah?W~F6J&7^ z`Q}Mbwfj=5_B*Az73FHUe3u6iW|Dk;$;z|ss^k{yTmC=Avrd(57i-)bA3-9ZBboa?__UZes?$gclBd-OFi{4(nfBuHB>Cn3ot&+ypE)aD2aW& zisP%P)0w#WebGxihLs4$3=8Z9scsq2%Q5N7?6vy`#>W+&78AlpA$%s0r6kHmCvG&Y zr+4|1vkY+Z{E?An2_C{3XZ&L!tPlzNMc?eO2_ z4kl=*mzFVB-ZYHtrSsS;4$tT`J z06eN-;zF@+rORP;$wF0id}G6y-zrX~8F=#+D?L9217Cw!7VM&U=XZL?T|t%*{gK#G z2W16D>7X92*933wlpomEZ0j(938WVe)n;pG^&K2q$-Flb93}hWX}4}}RG98G1*e6| zX36*Fo1qD^a1(SG%_OTrHlO$HJehj2MXOXekfGNe$zmv-`c|g{hc8VgC8VV?oL)0i zvM9CmaCgyZW8(ByAc(ecm<;z3n9a9SO2igkfi*G-lz>$-rI&=>{#?Y(tV*H1i*?bE)eF?bl5?JYvD(8MQn9Xna z%7Iv2+y?ZYpoCT>@7?7~FI);=K??FBjoDy?exmym-;I0t?EAvA zBVN^!FnDmxu_=DB37-@*FF%{$VA%-HFoO5u47pyud`T6OwQ?+hGfT73lRex;+Fbqn z_xY;1T&$YiT)W}}0)i8XBcCS4j>R}Jn0>f2M<)r#M!jestg_i|%Z-)N?(WJ5Asz{b zq_?%%_z%(FQ;JS0-`J(_=Br*gfToM$ zx>so18Izh2cc{J45{TTHHH4}vm7CgZc7Z)&-uZQTL@NO|Uk9@X3Am>j8boG8^VI41 zATlXQtEoQtlfdb&aBFd|KEvR5PKzM(tCxNNE(0eOF|YEg(kDt0ni za56=D2N2-^JQZ$*LhF}DVg{NMPwG)=70a!McSY&Z;WM?;+kmuO>g$a^<<;d&6QilB zh)!3p&^uT(iKPzxw5pU6r3-DN!}njf?5=Y>(`?EcE!l;{rf{Y?l*$fOSx1~^GrYm6 zNj-*qZ*43;FE4%k$C_3QTCz-r=aow@@V4+KukOKZqRqF7QM+>{u1tGoOEPMGVBx&m zlP=At(q)32Nl_O7JFA(=qn7^ucJV`v)__`WF9$R7de9FFrjnI`)8hJ#`=`zI$iT*X zged`g-t6q;MCtXDx0Me=##J4r&?mEeEF0~{!AU? ztCyG5X%sXvl9Q8J=mA^Z_y{OlTK|nNcCB@ zjS-E^k;jS|LK!Y7sPKm#89bVRpx=?$y8QczOQuT2K$3Wtf5j=YWy>}GCw=M4ooQBR zv#Z194oRi=ODnk7h7}90*xV!9wCFcf?pcd*I(Y6H2V!$(hk4<*j!KG)ns%`;=A6zZ zSHXF&K)+Mw0|#93_{(s^Y>YKUFbOxyw6f?c998e}9PD!jb5BlA@|tIv8I zns~jwc6;ObW>yeOBbarHbbImgD@1hHz8~l!5PN}89^k%aGv6?-z9BlBZ(J2?Efq*N zRHo-U#HF=c`cYJ|H?7-v>WkneEkeH7{2;!9?2KvCD13fR*)EFPp>CryJ={zq{q?=b z#!I>}@Hq205=q4=MBUhlZ1~!xH8S9_+;89)dKViPH)Vp)bgyl+od^FNtT3@l#XH0u zekX%>)2~|-=Cdlkd3t&V1aE}K2#gh($@cj{$BUdjidudJ1?}KBF`~N4#T_Fmy;uh> zXu56h5GdqsZf)UjELM8XrWNRnR{h#(oZB6Arc0H{9IP0>gsZYj5jm6St$65ooT6`z zS$BqohX>Ke`TjGAbnE#Tq@MFutxj{>;jj(tuJ!i+9+}Fjs8?lm`YD>Wi-NXl(Kc;= zdhF_8x91zf%1pvqC_E34$^9eE8F2}J30Po->< ztue|;h6dH!pwZo*G5i+>9=&bLI-xJ8<|Pir;lq1Nqva0d&`Vf)hCVsz#&B@;stcLe z@lmL%)ArWRa{r!G+Fe{|E~tkMx!wtdP#Wmd=p-J+q}LWNh$$i>0y{TM`p>Y8JL)`G zsXB3&A`@R7Ogm~B>?Tpv8O<5Z#&kEExAc3f4nD(}XLzA)Ei21(6(Fs6eCm$go!B-| zrnmQ-->fW#)1NW^?a$9q>`vy=s^Q1Tw4dk10PY7M+1nb4SRBl?8+UZTrc)RyuyA)k zu@uaCw%|p)%$#13pN&gDlNQeK(Q37?NOqmDJE{HqGqv=}sLXwk7xRj;H6jnJ zMV(#vXa`B43;Nt}BqrzjJ^VupXvJzs1KwYm2JyS{Nc^!2NQDN|O4%M2M2Sb+hDAmS zFPUsqPC|>!Y4;$B-uc};rEKO?0xZgqEZHov1fk+J-QKh}wOP(~ms4zQjyQAj@~EX# zXQ1s&^70uf>-`f7!fq{*?A%-`sl;uNJ;$L@dVEgeld$9wy-2vh~vDI~=0OgY1nZ{{O^MOZ; zgeUVx*Ol%x3#~0qhI2a{wuIBqHpdus&si+_`S|#REYe_R5`VgU8N{S>vhz1>fK(Qc z5Kga^sgTiBV8DSPCR41L=AS>>^Umsbdg%Q0RIL~2Y3Hlgqap*i!T;0L()1zsl-?q( zWc^DTu+Et+MCG#|g9>f=c#z*7Jz;Jf9kK3NS1z!6~#~%ppOq^$ek1 zP!Umqws48Vkq`TeK7ILK)JAT71A|_}l+oI{I+Y^(T2fV&l%y0cNG#0{nu4vntxPQg z%=uPBY$FaigW}(qYJhN}V6SP5gJjV3# zY$^ApUfob?iQOb3Cy=TX{CGR(wfFH3BFoKzV==2@Yp%6KeI8p+Z}}B@+5&M$ajO@H4RxAw%2*cD#m66}n@&ve{l5d=`T~*xib~k}Hlj<6C#Rx@ zt(t;prq}1`GV1${l!SU0+S6AGZEb6d zSFFj-?}g=m*>tXj*euzH)GYY9dL4wv1h*pVMNpl*ney53bnp=XKDtM2+%Ig9Ga%L* zoQ}46c!pet@rL7SxE;$6boT?vxw{j^#dL3H8fIdWeM?cyYNKlZkj(NA7C>$X{>{?} z=q(QA8YRWVjHd?cMX=~OEF$FxgP_5D7GyUeUXL?gJ zFrHF_|GLY))9G6RIZF(JGN2u9bZ#ZerdGmc$yM=w7rXo9T~y=V_vlgC)L zJD>Q%MrmVfYcN#EuUyp>LL-&05R9Yurfp?!oyRYKJD*&S(^;QDncafNcDt~w%wgEl zAU!=j-uIiu!i0a^;rwIazlxxYE8fwi0`Se^JcF@I=HFuO!=(?UlrY?k1)<`T+8^x+ zNgf`Jb>4c|EvhpsVRTu!ku#{9h6(;pEz-gJx=D`IGuWRq_Ke(N`d;8TlheC*8iYy5 zt|MNu>F?AkwPN0gr_|0iPOn5{{U}lN2bF#N8zIU3DmGEdTP62{3MZG1+(-}0pe}6- zBX&_d<@G_ORq-WiRz){*E-+9O|GtlqG7JrA9sYK>8Y-C}B-DNjv%cx>yp@Sny`8B`t0HbG7-M`To96> zXbwI!*4gw}P12{9`ydLbq){EtrDZ$r%j55z#&^^Pq}bQq}=X3c}Xc zsTVsHh7t!_mzb!#M@CMz*4857>=e(Qb@cVg@OoRTH+IsDeFvY1Msw&?d)vJR*Z5@@ zv@aDE6;V-9n}^gAq3QZCmBmO%O-5GNLXFkGMfP2v6Vlp%y;?1 z5ICw}zDPn+yiD&kJ%%V%z+tBKBA=v6`0odXhKEhr7#S}D4DEk?Yp0aNU5nSFmR@`v z8|YmR1;3j3dG}-NCe&b+6_R<{lSNw}Dc5D@+lcsIzdkR7Dup4Fbanzg?o6ekoTif5 z@AdK!t}cBuz9_h%^!m@yw2Pol1!v;q8#${`SzA*>0#MXcf@k~&tp~td^q%4J?ANX7 zN_Pw32#lT#tNn!h9?8cI6~#<(l=!_houg3R9O zgSjBi(%;`-@z(!JaB4^(xq1<}1`jjfEU-jSGD1WDtq0v&S z3Us@C=?xXD%hgL`iqD^CcS>|Z{!?Q0u+U^j#)T|DgI=yRqWA@O0Q*>+do=VdpCO*{ zSghz1;v|(GeD}IfB^NJ8eBFBeL4hlPt>fi32*>H6NwrBm8T|lXL!}A_=zyg%QGRUp zx0nq$2ksHN{jVNZxTA4ugyA~1n^E~y*seCgTz;v^YQbHnrJ5p8LhRFfCyY_uP2P51 zeYBqARMz9burh!Zqoh1+N?4XomHm~I!)b=JuV}YD2mhOi-CyCq{8Y8rt;o6QNGV;o zluwxegL8EORnSYwFrcTbJbFA?@XKLqjhP@q_zY%*rO4Yr0W#sPOq>|jt^N4w$7Qu3 zT=LL#eg)>nQ&JXzt)}rSmef2YM&q%TxT-PTOzKmz{AJm|j6@;t+c`|qfOo=erE?XU zJf-g6znf8!k##+d;u4Ut!NOaX*&_2(g~8jTSC6m8aP2hvGYo_3 zYlcC_u%*64x`zLW9jb7pnxPsYA$I1ab^kBJyy2##rgKdy0E`0;3T)3X02ZBW=VlH* zklt<%$+0={S(Y`#rd=x6n*Rj<#lVmYGr)xl?MQeebg<7q{@IXYkA2&AEy^yThv&DY zk+=+y>dq5xkI82=n-i&mA?uX8QaR??*KuVUbl@u?JNf~e~6}W=Pq~Q1dWScVU z7?>3neZbYrEj$M!0bofyI5hY!Q%0>Nxp8jpqkN8rVP`=$G$gv7VeZVd1a19;3}}m* zzsoz|iP?YTJpj#j@1r-@#i!7&TW1M&kq`5hcC);br0p8@VJvesfyzvdfnn$i;EYM< zVMzPlC8FC~*V=Qxg&N-Mx@Uj$+m@F#$`7f9Aup<8&UjAe9 z^}jt3bACX88UN=%7Yp%U8#Df&#lBdq|I1PA|5>B|StD41|DOi7=|HJ7YD=Lc#*CiRuk8ItdD}0kaxMV=2wg&i*scd+9Xa%Jzmp z!OCC+lhFt3-gN0FtgMA%8He!BsAs2i7GdbsPJRfYy*0W~ut!#PVk*^N^psyU3#O71 z>C~WEt#N4rB3y$*+-_a4u7gtvl_b(61!HLZjht~cv0S>JaK%ZaC)8)z~ z69;po@9^+cm}*j?T)(af6Xtw3(x&Uh8-z{$2)Rmd+gDGH_B2OKXPZ-v;^JawGR$A` zziz6KN)jPrpP|CU4E%h36u=ZH^s`}3S|n;0A(CX9KV-E&Vqsy{GB4)*4;Db9nAy_# zq+aYhD=r2Gz4pe7KNr9B*828cpYEi#o{Z7Tjfm$CA=}6H6VAY^0M9d@1G5o29^U}- zIIEawU{Gvq+AJ+B45V}m^c$&^Tb@jP3zyQE0I06MriRmg|BWci>BFrO_x`f9e%gVd zp=b`P(~-fg^3yRUyw=c1)x&mYle;=-ry~YZ92SJwjID=uCP&#Fu zfnTSUblia{qjtt=X7fH>U{`dH;mxnqNiY_aLDHSNs&u`>=Hc48>*KXVpavk3&P_h}7dIz=N*`Xcp zNwIgLSU4d*J`AZ9_{TYhoOWfu_g|CrAs4qNDZP2;PUxDS-(NgDXSrH!6o}te0-yIYu_(^oSbl~@Kcz%1U+#?IJn)^G>d|rf`_x-) zk}eAXNd}ubLd#muAgZ&Y0(?1#5vzV{;wbh36jEgQXMoz*9kaC=yWa_(x!Iqo9Ez%? zMb6j$q1KbKHb_>tKXXT%=hSq&0TSb{Wp;3e4Sc8G-@Y9mrcFYF^Y+b~&rTnc*7gLx zG*|81eKLItavKDU))Ng9701Y}hMi^RCShBds?B~d|OoLH}!FqQCCWX;iXJ9TxiBJB(^uLM>w?%j4O{S$!5xN z87zH^C&PGnKi%@nveB*@r!YODUi=|5;Xq%T%qao8{@bjvQG~%T@puVz6~N`PKrgOj z`}LowX!M(-3`IcF4fTMYkugv8%y;y5;b?`G(>9TM{QTxL`OG*li|!sz<)%tg9UUCv zy3r}82E{rtdVG20x%R;?nfJPv)~`Ip+>cSE`M-X>HOC3#6xl8rD$t`j6N}~)mBhNm zp|mZV|Bxr~C=={t%om5`t&V)jxjlR$Ijjs1_BJM;5FgrwW-1;{kr4!B1kp$-u!9j} zR{{f#T!XSoD6Q&Pp~=<>SllZWvN{a407b}ZX}fcV!l^Yn&P$AtXE$W+Xfd?^SQqB3%O8)!J@v0JK{_VON-oLpr} z$os}7je7RCJ<=k9brXd{qac}N>Ed<|-`ds&Hm>%jrX}qy7v$o^%j)|Mk0evy-D1K{ zk*&zYtGT$zoSoK{W2(^AshPpU&Aj2g^6XipQ3W_LndQ!jrpjc1@8d}=4qpVb9;bB! zP5}BF1(U_D;6|x4$)xwOELvkNhNC55H?cC7Ute9FYky#hg1YAaNz>VKb@)v(@o0b6 z=mtx1l3Np-ubItBtElTFF4efhnE|+E{I0H+O_$R&RC_*EVia7HX$cNSeC;ZuU<(KH zub=sN6Gcvjp9v$^^KgL(y&MR`tR8G6qfZs`8r;0~dUDzNGE`>++BKW!GM+e{oU}!i z&_@*=x{qG$HqI=+Nu&{7_f?|DP>akc*F9?F=) z2L4%KWH0RatnsCN^gb&aM|cDoAsUzcMh9)6^6$lKC@4I3ht%R@oPyprFP1E*|29#V zZRMXko|`cXo!gl5&o}=^=g|zat58Y*{dCyX5L=0n(%9f!cK_A%KH-v%inSc;a;nU) zU)&nh4)NEP8;`ta(}=05X+ES7lWK5DbUnBj3xEaue}E}MHwt)tP{d^L#Kd3tipxDd zpqLXKKpYnr2lialF4@nFaQ@5H_DBv@ z?Cc^}o3)W5ERsnYnsh4J%sl&? zG=f#IKsD67YLaP?{% znp2*0{!iHZx6Rt$b_d!|PvKz;@q_R)B(fLccOjq2|2-N9Vfu2n%sQ1g0wd$UvlmBzDa_~puI;Y5!5 ziWftb^~gE~*@Kz+`SXt3_kS)q4(G)-si#P(gDg-sP0)(8%IfajyRrA%;NYJs^c;Ya zLfP#>SHZA7S|zcY{0Y6J&k3v_VBx7(tj99*g@~HF(RnVUs>;3A1^4z?b@F&NxCc~M zHp8D^zS1{nv}=oLZYAGq@;dYbr&k=!%4tLB{>CKP71AX6B*-H4%9yJ2HcHB(9Jow! zGw=WW>;LT=J$M1|e7_!o2 z_Zp%R@+-ec#vo(2=so|Nf7ffW?5Rrf#;UlW!r7tk0&iNvFs!so?W)aA=?Z@qTYt|x zeH}KJ#A_ONXYxznY%`t!7Mbhc%X?r=oj`Ws&$Xz3Xx^L;8<>*zrSiA^zHos+X>Ov% zH2P76x6jZV`&e*=96DX%+@{jb2nYllUvkIqQAudpi#D)^n*Ke_wS z4V;$`@3TV&0qjNc8L0TQ9ycGWChh+4t{7RrF=Ul4=8Sq&{wXMw7;*d^i{*TgUYS2! zVyr!`Ps$+i46dg$V*N5l$zKy#?C$cUwla%cg;lrhxKg5kg$fwnj0sah$!=OtR7Z|) ze`7R$m&l==lVDmM!xtz6N|s~h+;_shANXNgHU{JWdT&HW@kHc_g9ClTaJ5vyf3WBF@y+rxKy7cMli z!#&+bsC$`=#%FVurRpqN_T+JsLu(W3X>sH3&Q4s-7NUnlx^6#d9o*1SG>1mPTZxKi zo4Gq^--Y$$*2WU820gf&B?E>H`t)=l?CEGP_3B8$D7SXO$(Mo45K?S%j$FIWje|qH z%3;z58{T$9z&u7KS0ha??h(%1o(|qGGer823a_PT6Lo7Hu7Dz-CYrv64H zYHip03dMYMc6(3~$73gi@{jf!WKkCVY0%*8!=%ag2b$Fxv{cAC+e)C!OMxJUP?kGzH z9BsDM_JysB-j|b`h38=)JX)(Dn`fF1fIx99O4cR%02fT8VISmM=PCO@oU#-9H@S}6F)G#KFTw(yEk(Vjq^>EC%#(`d(9a`P4^v6;C z4u?de`MQDgrA_jRifkXE=sx2-P3k?;j`lidvixP&*_z6V$iV!pxl<^+c7{Fi-bT(% zHTVjYaNnv5L?8|F-tJE=t0I&*?sYjH;5}t&F2~13@1zL3?lm?XBjqL$l#?u%ucBy+ zjOt&my5mHneQ#1b9(5(>n_G9^G^%#Pz8{WA)zP6d;Q+dUd^lzP!^{(C9Vs83l%0e6i%M_St<(1+96mLpdI$qk-qq&ypS$5 zo0WqL7mnldw41JVXtnY5+=t^_1y`oCgjkN@9~@jxL4y7${B-N(@&3AIx)7Y?h2iTh zJ$IGwN>pwzr$)YRgk5BUOK)aSXzswf(Mkg|&_+hl*LSvCI%Z(U+ZDp8>pj+z9JNGs zZfV7JD9@Eq8mvz>(_28quZl>M&XU0xp5HSNZ5TxqdzMA)Nb#=J}p8ryygKE z+f>=-&b@qzI+%aXG}7aH)F;9$^my{)aOz!-x=(K%grRPDG0aTCt4O;-En2^fZ5RW& z1MVjaOKpI^>|}$LV!+r*2w&W(da6(|{i{lR5~uO(e3-UX|A*MEhj8YQYYa_KH)*Ve zG&kRKIp~RL-l|Mj%QV<#y+RQ6=B<)V2-3(9&R067#2OGDO*Z&?&b6z(0`|AlNOl>#X6ncw*6^!;j+V2rMygH+S^qOj)maWVBl#9T57iU zorre#(K2Pg>5@K&z2kVLL6n%l`l^BJ>e`y@JncV1Hp6!f<5(il-gA2AJVo=7oqRcH zDe2rHMPq1C6G3-GC+_-qXxn>M(0c2u7e%f6${x6({4x$Xk0vB`7N=B2%;g!JJ=VXk zdA~BO{N(5upB40JAlIBCsjZmV=)G=?kmvsS?O*+YJDqd68G$iOkr(TYL>v>T0_Gi? zWCBheiQF)npkBZ!CwgHq)aqhzh#MVQtli!178v=-=N21Z$Du5!JL%&-UzjhJofKaY z|3H3b=4p69+6Jb!ew8Y1TTIq}SytETL>{dcOMOk2iKLlaMD&GAe^tTtom1- zh%1(=TcZGk{ab^Z6pAv(CqrMp+_lC(e37k8SuC5j}^hg`u(xZt5Dn*9Wrj~vavgg`{?B|8wgFyzU@2Z%h z^v!I-=r@lVEOFTFTqLpQ@jA)wsnw*fTl_ju6AJbR6SAttdkaO3l&>^8&9rofuE7rv znes6-ElU+_=9%;EU0kvU>&9n}5;07xF9u}9eO6;m4xnF1G)t#@VKtEAzJFSLB`{K3 z^}fvw_I!K@9h!po>Lu$CI&F|8PE=VP=L>e&$2UrPZuNkXp&Mg0IC}_BbWTU~*_;R= zA||dN;UWpSU(uslyXF?}Gzm}8cxt%4A1g5_)y~zM4q)hcx%4AgaBX~vhPlQLdql&9 zX(vg=nHo?fa~pdt{tig7gvJ^vm3xaHA&kff$r9P>VT$)j*xEwH>aTN=$01Pf9hA-; zE$^z{R>Xg*#&pzc4)HaeRtC%&RvphT&AI%2$Il#nhDCcvWYZ$Lla2AXLTanNbdC$$ zhMyljBW?W+k(j8nSYZQu-neYb>6g-?j;1hi{j|Q;EZ0rY>y%36et1(Vul}?X`VY(E zWtW4b9|iUkBIIXXQ@$q`C;J3Iq4czqgaSx8k6<8~emi2L1?l?7*|Hb#iTP0@*im&i zXt-vA?W(f^j&%>mkXW*p<|LSQ2QL!(E#!{fkL+^0^DcIYw=@SQwQz4v#t}u~``+F2g>MGqj;x50?9&=kD+Gign#RptEV?%DXpihgK6(b*mPBfhRsuA79p${2?;>XNmw8pDpXFu^fk*kn)>< z@suJ-KI6ni)AGSw(+bJWkDCsE4k~VL?j&v_A&=gJ-IY<*=bqY*zup>TkRHs}Z-m0o zxx3lqGVMW|m5Ul;2Undg?V}pT7|dqkv3wFcGm4|`U-5{N_Hm2fH5#10u4d?H-o!C! zHL$oIn9gHcEnV+!kz8cpUW1hl)EMJz@xS}e07FwWDG|}`mLJ-zgV%t}qOVB*>`e6M z9TVK}Zh_*!`ZCXtP*PeU+h2C#mz7uyq`gi2c6ZC}2fIa+0W4;r+jp;EKsAZgz@3as z(ruTWmI^tsoi6Fy-_@l|zgfQ#(i1D3pOWBTQnY|lSGK;pS4%*)tTFu@BDuGkd29OuGkb*7=W|#HIE>@%&(p5am}4bD%Bi##>XjsUT;A2*qa7E1 zI{R5IMS$Zdmy^9zo)iI=8wkqocJr6d8 z0h7`A^z*$|u6?R2#tj9kq6NC8oZd+i!6Yl9?LR7`-)$gr`0d`@KeH6EtW zXrQU+<{!;+w84ZJ6l;ZU30$Tg+d0J`!%DKWl5ZN5@Yy+_U|_&qVC8BWRui%N?zQ+W zcFNx;-&u2)W<+pVJx#`7>IjtROh}zpN_>zn9)BUOcB8e*w$2uDw7X%{h+a?OXgcG! z>07P}Gx<)gxrH=XkF|dCK`f7I9N;KQ-oJjnl-r7{%d7hbnI=1RPmkmpt|n2e>&Fi% z+ffyU{WYWvrQ9HW@<0Fb3E_9@EDAqnY{IIaSZGkEQ4Tuz}Ev zorS)nwb`Cz>#|B+UrBCv7jWz6(l95^@At4A>wTqddIO|%3)Pc<$heY`155DAf4i7>v!xF>WU;Y zPBzOjO<^>kMq@@I9eKfbjzO;>@E&OFLS$-P7ewB+1juEX3+nVJoQ2HH1dF>^CckKP zvbvaP*MGZ_mX}8h&fxguPxZK`DWJ|)-J#?(pb9))8gsWDQ@!vpb74g~b!o-1DGu=y z6zPFyYh?1K`WsVOEBdB^%CkucfF||FkJQ*4m(g4tE7aHbXj38Fqq;I#pW9PQ?CTy2 z!o-5}q;vRapNLQ??++yY^UpsSHIAJIt`N|sQs>@ENnMKL=IWsyW4daWPb1=R>v$nc zF-n;@Q$_=sd3tnPe*g8De4yrg@(otuE^gC9rG}QaGCyFx@YVaYZc5x3E1lMnBdp3$5_^yWt{qzd{W5z;J!y$`-Pr$E*4q4Pb^ld zT*hM0{VwWz)`k!2rL^GEPu{do{X9prq4551F=(jFBg-qQ+}&I_wR0-b5`M#t_iI&9 zR<%Ajo5=UV!_9tv>3Q~)nrQdFs|asbF9Y1)S4g#B(|4O(WBOr1JgFj^qPSRB_FIC7 zS$cfvTKAbbJ|Uq}P=U%zu74$C{H9XRBmugs!HZ)79WP0=-vxcb5sm zp4Y?UH1Op}&yaS*)n72?7^aw~qjPEhx@h=1`*)?;g2-Ih#P{**dj+LMRA5lPx;&f@(}lI!xEgWKAJjOh6HY{`=<^5D;`krdv_Hyfr1~vdWC&r zFUt4UCY0^(c}%xOP^+HyBHSAcn;e4PKQ1z8&@&c~NM^UZZrQ$LprxgS3GANFx5+qv zi7@YWcldkWwEQ{^lllPl(Ju4;C=t=IsjJs~= z_VMltmqpI`OF!P;K77ro!(F3x|)yh01hDGv}0Vw!XmIcw?D+s2>xeMjjy6beP3KSVT@KBVH# zmP~a#YYeiXWSZG(swGm$N3c*$nn^|#THW{oyuw-eN$<&aPyhQ{V09?e88K#-{iQiM zxzdx&mzz$`_cH6msPg$>0A4o940+aLMb1+CgmDso8%9!el-Wi%veUDsoP-#Oh$g)+ zBBu4CPrH&WshCv_R}07TK*5fmV4tk`1gojIvX_d+LYSm1nNpQ%oP0#mbs7IifyD4| zx$Z8HY!eC5fFBPG9-&$aokzfbFq{Dhw}%0rwyAm9IS!u2^NG_c(ZunaDJ;Dcu?SI9 zS&r7uJvqA~*2TR)uPBsMa6t(3N~ru&^>gg~C<)A0ttyvDjD<@31H}vsC2 zj+8M5h4y{mU+G<{(9(*9=P~K8B7QSK;{5ZM@`HOifF0G&$FMB)jnK=gBy;By?fIF+ zX6+wmmkQ;8Ev!yqcN{g7CRS39Db;413`S)Hj0WznH^63K>$g_|o8uHrOq70NX0rB{ zcb|M&IW)i91l|{=8#O*vhEY+qNOfJGy|e5LpjSSB{!XG7ny&C`yea%yi8=xE_8l4w z*k$*{Zw_tYy2Xao`P#XAW{w*$P&P0y5VrfwlD|=)Um8_Z1NxP?5%5(7#OWz=oKq5i zGTJM?+*bNPjE7Zk{+U9>yG(We7dR(hKb!0`g&1^A3_#eLf*=~rWJbX zyEhHH3-@TRB)@r8shDJ)j`qI!Bk=benJk|HT8+j9>EGq`!mEcrIKJx6nDpdB32@Q? zuJYB2rKI25-brairXkfem<3iOUPyk-Ef$ z-4P166@10ZtD8c0-+$IJ%-M^%Ogkbw29ohTf<#LB`8IkuevnlrkSzV(v znWeoDg&@3gHIp$g>PE4KV7~S~lHYtCjfF}xS)gM^PO+%Cxan|jB>;cSSto_;d?oLy zn#}7DyDSUUWP;0=ch`qj_GJ|~zBJuh8EI+THgDMSnrAG03pl4v zk<|X{$SR-xr~%#k_Pl(GlzZH&<~)0q&&Ye23JE{|SbtM8WyPOWJ)OM?y~-X!N{cod z^AP{Rd9)p#sJ|vkZp@?A#LR-Nfl>G@;LV<%p2J+P@*0f$ z5mjp;5>CyRbIZEK;Sh)Ppmq56F+0FCb1}nD)^(3~x0eXJ7AWI%caAkOk@B(DJ9Z~qyg==r0wc+KM;OP0iV5JpAc+^!#& zJ!H`>_R-~t?e?Gt!~C^tdt=iSBV4!1qgZ_Z5{Hf9>ZX|^8JY2lg8KUAp7;vwsy80v*=w`nzz0UJ~I4K`yy%3Rv3}2>?WqW(3T75Ol zcb>qxf3DJdNKd>@d7e4-1zlzW^v$K*;}bL-|le>yh28#Ia7BeK|w}F_V?d90}pk*y`_1L z3_TB98!yxY1kxfn0q^_CO2kLX$K2M6i^Z75;;my>04R2FpW!8()e5d%9 zxKSzbTMejmm;$w3I3}~~eV1ufdJ`2IJ6-M4R)Fw|Gb^TyA_-z?n*Pap=s0RLt|Kii zZEsf;kNsxiDBhh3gd$>Ffso^vki$U4Ft?sqO&c0_PQ=MChoR!%xm(}?ZIIN(l?{O~&hX?BqM`qpk z{?QF1Te>G3gk;HWHfHhjSxyL}9EAT1s!-9-!{)xR!EuWudU1y^qxcZds3?t18X@{d zo;d6hh6=tkx@Ax9iHeRvXQAr)K?vh8j-DC}TgW~Uo!ZPHjC>~T z-Bj);{5lvZ&n=w&fQDG?bN$8N8T^8RJ;|~e=-$5G#F|^&LaWf@j*i|)6|qHmuPA6( z2S{TI%3R0x!0M|ic~WgZQEYEFUgKEfzaa82zU-Fz%;BvsfvmoJcA?SPizSw&9mOwJ z9&`02v5&JKQ?%=Ld7~#KqjsI;`MtaJY#_P~vt{2zJ zN^JfnT9IqVD5{jDqo*G=(zLW-n38BJ7wIq2{SlhneZPQPf&^G9?jo`qstg>>K3f51 zhww$J5sz$?t{7-02!*KX{QG0Q`1QZ5tcIokQy>Y$)3Cojsr_4__VZ`+-go671N!g6 zH%fs@t5o+C;H^alf|ned*C*?7)U0#={_oKpn6E6H@U`wMqq@I6Ivu&1%FdJ2xt%Tp zhK}m5v->a%26iN@sWy+MKYJWQFn|h;2LyEk(4Ir75Y2E*C+Vls?8~{f!Sq6iiC08p zFBJ0Q!UAZn(cC2e;HA#YDX?5V77rHp2eKq&M1jlOtH69z>F$gf@blA_@hf27*1uJ( zOkw5ZWYIm*&R0YwqnR%4y{cVg{&aUOMA!&uW#N=udAD}k&-i!O*Ny=?@O}J5=G2!Z zk=d?0mdkgK&R}jAc(Dgt+YH2xf`(R*KV&^#@RT={j_}l$dcYW4bNsDAlFaPcGj5)t z1=qfbJa6e_zy9T1h_ih2_ATe*VPoaOCxn)?@r*c22Z4~Nxh$0_gC?zx2L1vNHK3$ zKdyhXKLEZhNUYVb^qP^$aG5H%EHY`_{Czrynh@gWk6lCVvl;Vn_l`toKdSfJ9G?(f zS6Pgi=5d^eHWZVP%=<%p@BL8s(4%Q9HpQS$g2YD1cI4ZgKFOMO`^WY8sWbwNSS&0X zq9(@^iXRFbV*g|+Wa2vjHHmzupKpWxRZM$BChjkJ%dKyXW?)dx)2deypip+}G(RQG zR=381t&Y;4$ET+~Z7%n%&UAptycvZy#idfDRz;o7=uJ90lt){R4~eaW*sr*nU)M@2 zrc*_2t>b^~t_bC&FXjT{h{L!syORC~+Ia!uu*g_@Z;G5$0GNsL#8XQ8=0Ixg*Fka5 z<9?p)U#^YLyQ8r|Y?kTP z%51b(L~dtqSYv#?gL8zdQxV*0zz0pP$sk_k$XK6pesWrbG(cH;bY-yRV`DD!q}&f` zuj10>^87U%tZrMQ8Xqz)_0RR|LcYtNfNpAfSi>xAE)aMLlOu$uOax{z{s8m6+)TgN zkP5&I*({)>1mcwfI=!*6QJ|Il++`5HcGRaVA%xLNmIrdWuXFlq9skW1FPL{yLSbX~$^!BjGO7!zA5JBbch$l@(#2`MYDa`={A z?e@6w_iS9ReX3_@sNxR&w}yvW`(PC8qy$i2hO|F_3ieTzTM+S3k$Wrf+?0A5SsF%q zMB3YydDZC!w;WS490RVK+i=>4bQK$gk*4&Tz7*n8&uDf&+F1f4y|Cld||B*h3YJKiU;s2jKc0YfSdl+X_mR<$-6XrHx0N{zof)-hJC2k0JkKV<;l@Mj0S~?$=fI^O+havWx}=veXM-0suT=X6VgRw2R^#xa9EB@~s?A}JS@1!GUdOm0RSPi~JC7>!ijm8lABF2EPk9>6A z_5rpk+G!6}M5bG){{#KB13;ocF{Vp%ty%x3qu=SvA1q0*N7vxKt&zmN7aUP5>Yz6u zl*XHCBISrIPE(KifZbme`?)|JGcD}c;b1Rj|G<4?z12#l5!3!mOiOQ&Ed(VDhQj+I zOs!-rw3BtZM%isScbiY#X-9>G{^?4pav1pq&P=FzRFk=;vc3Ixtu$@w^{4^c-3J#B z)V1EVd8gxFljnktuQwWpn?f0C?CTz5Z}1+S-Aj3m#^iIJZ)=V_z#0*un>$|I6v?Or z=G1n!m08(@6PeNPK(j=n0n0S4`<^BKM%#W$(S2XY)nT!Ce#L}VxR}c}D`8c%WMZ#x zKWKQwZei4aq5pA0rH(!Gk2>eEirj!nAI~R+fpdt1ct8sFrdP8YMHQ_{R!RB&Jg5~+ zHmtTrd*E^u$mM;bS zH^~*>op0LbugYb>!>w^$dJQW$4LLr*4*aYh`fE8>!u#LHEb~^e%8-@Q-(3RjkPzVT z`9kM`qtrcRVAEo9b1J;? zocB?-H>wqIcL9gp7Q;O%B--CA9YR;5fc}Zddvl!W-(jxLi$^XSnENz-)o*bdl!e5acvr?8!ItYXW|UYNHDLly`iW-b$4$MFQgn< ztEm-n11iFtDAB?=6JcQR1L2)SucVXUz{Yocak5|$Un#%RjuL&;11j5W1rhWDapiT_B1$gZLs~r^_)#kM9;tHn^LPN*I*VrP0rSfBHypAgz&oC8WrD zc>?H#=3NE#Mi-6nw8?Q9LK2*Y*W&HkipPZ$>yqpW$Tob74C_otuc;de$83Ga1ltZX z#*dq+@~pIARc$tfrMORK4-2g{O&&&+Zt0yLdR*&XW3N)+^_wv!jdLmFSLd%=L>kK{ zAuB?yF@gqJ+qJ^_a5;XcX(*Y~9vxxF%ZS;~J zc|!&bKJF3Mc+6i2SaidrnrEt}lhPao+B^?;_hQIq0SWN%DXfwc^YbUcG80$&upT&e z=3Xg=u}t!iGGQx~4|o$*rmX(&5DNo18Fp7hgU>FmC%NMoi10;`M}n}sO-thS2cV!W+l}O!pU)wmBRpf#9DQ6 zSKYR@UYcx*2+Qw+@I{Mve+<(%a23rA`UQq14nZ^xM;=LaF@SxL2)4skxGiBD)ehq@ zOl&;u)H^KiUIkCmrMaZ$sOslD4to_$bUknmP9NkmZVKyf*&c@~$m75%LB)PMM7jv^ z!%T#AR|}NI$6eG7Lr7IND)%Mt!&zYtlQG*zLw(YLkoGEb^V{S>*3V<1!V+exMze1o*69+9yiH$m0ghSIqEL% zZasD^%9z5y57TkS9ESKu{!>|o#VQD~&n}zqxeZbnuINGZJh!63uERV43*rnnJ2E`t zqs^~+u3=|7n<)^Ih}>J3Yz=OhKR7fh7%O0wpQ&-%cIw;onosFrRBTZ-x3I0MRNL4@ zr7U8#O|h3P!g@T8mVU|r9l&lHtvDzxJ)_~~rUr$qxq2Re%U>`uEVvI&z85-NlVFvw z{5FP%g4iTa>6~?cqQXxiE51U8$`fx-CV4xh`5bX5`n`azRt#6)Qi6*$0Z)nw5u2PI=rG z2Bq0;r$hG|z@;x)dG@)82c@4pA~&dL9NmD%u{+Hz^LTUBpC3?+wm>4-di2iPSYN9GWvL(`X)a;oP- z*|k2sP9QHa9g`N*zE5)H1h&_;j?*%lnga}hCt8Dv7nqnSW1h@{$p>OX97YNfkx1lg zBJy);kkfPdJ7jlIoB9m`;0W}X#Mke9^xa<{E5Xk(`UwQX(?iW?assM?ILV!jX;W4f zJjB^#FXofp&Qy5#EyBb7MiC5l1bRKE{l|cs1xYistSl3`*>_yt5fc;Jfw`;7W@Ns; z{q2q0{OX|KVZIpqZT@(pDLFq8L=uJV+Wl;MC8TBE62e_7WgwWpa+p$Wz%DmP8+dSU4n zOgj7SQ~}|?FnHWt%ID`(`}p#^jQYF9))GU&N4{ZGdvvAop!5E;jsHTm!z*!m7bV}H z)#~*lw5*Bjy3D1jhPCJw*`4p(VZ+As^sf04?fdx|!^)>PzG~;bQFvS0KdP`lVbI1U zie^*{Yf<5GWTa8G^IXFlal@tsyvyR}KRK13O@AojKxQ5Kqk&=NBvQLsV6N_ukl-FSnroB6Q;^;Rh*WSOD`x{>u&S$c1q#Pj&J1-AhqFQ7nHHs<3_Jkq9lN;9QZt{GsrSV$5n@&%Mh z6sw=H{k zB6(xdXy2GnC~mO zo3GG(gs9AJmkSLXt#D+sW}?~J&6SzbtZ^JoGsJDrr>we=@No!p@M(^S@<*N-^D9gF z>wS<2==YLr#hWf4qQ<*kHUYE|kZd3n4J76`Q$LQLej6sFf6+&WC zvgn7?G#T$1cZGJpj=gs;fSi)`X;&}kxdi-1mZ=~cqS-!Ur1g73nCt9r^6*?$Apf-0 zsg2f1dwZR3eGbH}#QWcW(X`&!1R0O<$(vuMOf&^nxZ2xmLKlBDOcq$IB=Z?oKt5o; z3mjb9Hp4H^-NP)hxjwtDW~s0|KNW3C7iQu3Akis2q+1fQJ3*trL6rervdF4HBF{c_aFk#W~2FWwQ}!-W4ZMl6gGU zaIjgs>0I(4j6CFF6R6Lk8D#ayp+&NUx{P`9;q)~=6RDXyg5UGe~( zUR^ChzU{e&l*Ee7P`BOIeVnhQ=pIq$zP)}bt!Sxke9)GR-@*;pT3Y5@X1R=_t_<}4 zTMh{>!^UtTE<}!HDY}*yrH^tU$y^K-xD6Z!4Rl>e84LRLia0^S9J*_m_ zlIxa{O_8qleOd#NO-IL2Wxj|(O`g48z`*(H{P$@7sB}YckM6(;M;C<^_J-aY%>UQtVhV2Npy!}AZ~p6eeZUZ{;a?T*E>otX}fQGhOw6n7_Cxj5k zBZx?Z2u9!EA4?MBEDtN&IW*TH;iV_s{8R4YM%LAXg7!z++VR)ZzQ5LvN5uNvRvX#n z5=9awpA6rW`5hA!I&TV1v4oq0Zkf`#)+}imbHtj?j{dz=^!&m~>8U{1$uo=~6BCoJ zDRbx{EGFMJDUDOi7yBqGo1wnqBC^kYWonRzb5HgVol8miCt_DSCM04-0h`qO^wIOr z@fAU@%xmWd;IMYyMC-PDW+r7gK$;Uq<+l6HssUIWG!C2q+j4g5n<)ZTHnsjaQ@L`S zjJvdB1rufMFqCH=*I4u5!BrD2lsp#mtn~_Ov7zMEjzPup)_N&7Dm6THa>#w`=`a}? zQ0sG%Ao%(^e^?D$Mry>#FMVEPXvEih<;52lyuEdm1k6)`J0gLGPC^y;e;lSb#Wbvf%3{ojUvQXATB=_ES$ zd}mg1QoI@*wHr?cXM@e72eTY=VKlR)}LW? z%nJ#9Kme&Y#bS;h$u7wD?`sJJllhp(USQH&OGoU*(A=yJ>z zl@4fX&1FWoRA%$FvO*{mukk*W_O9HvP6;oJ23X4ik|((&bpdSe*eZ;kFw#xgcpOc;T2Lfiw>VpGHB-Q^;W8z6OMQw}w%oU^_~Jb{4Tj9yF=yNFsnI0;{k25b zc<(s=ii7Yr<)19Juk0L9eGnigJd^XDlEY+wb>eWV%@#m?N&%g~Adpvhu$;6t8H#$} zms<52|+6A{+9@rZk9cS027Y-?w1Hs8wA=wAkd=!0~Qj)iWW7GVg#Zg8_A+4 z8SS$a^7H}6g`V6#Lt#IsX*q?2y}vlf_}tGlu-bsN_s_!?uL)m`KV%!zKPeeCcb9y+w7f{k_rXPMAh z?Hm_%)Fq~Nobl_9N4U&)PX#_H)ldJ;UF<^xY(23mEZ#oM2nAucB_FwvSH{5ES zpFBI$DpUvdO6`VhCmZvLrQB!flpC4##wN8snQ(@?ZSWsj%!|fi3M$2w4jz@;V5=Fb z9>(F@m?^MmhvV#W!DIg^x$zyufjsQ~{+AfE!Q{C5{iU=rZZ3cGL*A5{<^2q{Zlij& z>d9j_oef9BBJ&woQg-tD9{-XSP(|piW3tk$B}!C$g~Nz^{eEcCC@u6Ea$2yu61hTd zJC-w2v{lNRJ|dA_%6FN`U>)mfzJjR;8h7En^d1t#$>Q9TfYre3cw9vxsr?SWP>!8HG#_#2TP^tM-sLE{Sf~jZ>jmos zlz2UCeIWI2bu&k9y+M2Nv1<0U>37je?bO``^q(3zKF7{;|5AJQ+VPtACB?vH7orYxwadm%VB%a$0FwLV{_gr(jD*fp=Oj|Zc5#7 zt>4&tCuaSs8G?NoudI({U=^f|)9%sm9oxg(>O1tm9D?2&MOC$0?b=f?mRt- zrL^+*^CPEU>56BAAX9(bGH(#BGge9R?fmV%y*=5plZuRt3^g{E3Qkw1tm{_saPDGc zViu*8?l5D+U+H^CjvOauf2D)c*moi!n#suGPh2|0GaqtGK}Dh+uLa!|XuqZ^L_Ue4 z%FbU1vMVZ{!(D=!1tr~R5_DHdDK9w6dn*VAp8z0I#&ganW@bKx*z_MxiirhCKJizT zy$juGg870N80Zbyn%SoP&U!HR53Z_u<+bViVH;N42yWYM%`=mNQ3~v)N@2ZSwn0Th zM14n>4acPg{dJ0%w>mu2i;M3%(x>(e1dJxKOTHfXd^hXZ7U|aanwT0!#J4l&%iW0k zK^dnt|J~lfGD*12b0=Z)bFV9mDW?=9zpdb@7+%#hxHq-$2z$g2zFu85v67DGRQV(x zTn=G5pPK%b%`Yd9yJDX!^h*s8+S3bKXUPoQc1Djv0 z-No*~QJ*+Yz&>conqsvzUCzb~8ZIKbL#q?W?3cGU1i>L|)I7o1WN)*f^&gU@`j1Ph4p`CfzJD#HcvSJ{ipv0!~1`Mx3t;-hR_vtZo$!Zy>++w^{lZ^s@0iA>Txb&h+-=J88V^eDKY8_k0H1H@3jhEB literal 0 HcmV?d00001 diff --git a/docs/screenshots/ontology-filter-export-20260905-mobile.png b/docs/screenshots/ontology-filter-export-20260905-mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..7363c85372a3d5b8c0f1463046fb7a0bc7e075e0 GIT binary patch literal 52536 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 Date: Sat, 5 Sep 2026 18:08:34 +0900 Subject: [PATCH 3/6] docs(gaps): distinguish failed hosted gates from local validation --- docs/development-loop-20260905-filter.json | 975 +++++++++++++++++++++ docs/product-technical-gap-baseline.md | 20 +- 2 files changed, 994 insertions(+), 1 deletion(-) diff --git a/docs/development-loop-20260905-filter.json b/docs/development-loop-20260905-filter.json index d9b46550b..6d3a9b1d2 100644 --- a/docs/development-loop-20260905-filter.json +++ b/docs/development-loop-20260905-filter.json @@ -3136,5 +3136,980 @@ } ] } + ], + "checks_observed_at_utc": "2026-09-05T09:08:30.883052+00:00", + "hosted_recheck": [ + { + "pr": 780, + "head": "1d8fa267b059289e77301a09985dfac70a439814", + "base": "83eba56149eb802cd63642c507c324c9976ec78e", + "state": "OPEN", + "auto_merge": true, + "merge_commit": null, + "checks": [ + { + "name": "Publish ontology to GitHub Pages", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "Full test suite", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "queued", + "conclusion": null + }, + { + "name": "Validate ontology publication", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "queued", + "conclusion": null + }, + { + "name": "Frontend lint, test, build", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "queued", + "conclusion": null + }, + { + "name": "CodeQL", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "success" + }, + { + "name": "CodeQL compatibility analysis (python)", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "cancelled" + }, + { + "name": "CodeQL compatibility analysis (actions)", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "cancelled" + }, + { + "name": "CodeQL compatibility analysis (javascript-typescript)", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "cancelled" + }, + { + "name": "Full test suite", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "Frontend lint, test, build", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "Publish ontology to GitHub Pages", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "gitleaks (secret scan)", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "Validate ontology publication", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "Detect changed scope", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "cancelled" + }, + { + "name": "Detect changed scope", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "cancelled" + }, + { + "name": "Detect CodeQL languages", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "success" + }, + { + "name": "cancel-closed-pr-runs", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "org-queue-sweep", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "cancel-superseded-pr-runs", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "cancelled" + }, + { + "name": "Detect changed scope", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "cancelled" + }, + { + "name": "Admit current pull request head", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "cancelled" + }, + { + "name": "required-workflow-bootstrap", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "cancelled" + }, + { + "name": "cancel-superseded-opencode-review-runs", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "cancelled" + }, + { + "name": "scan-pr-queue", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "success" + }, + { + "name": "admit-current-head", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "cancelled" + }, + { + "name": "Analyze (actions)", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Analyze (python)", + "head_sha": "1d8fa267b059289e77301a09985dfac70a439814", + "status": "completed", + "conclusion": "success" + } + ] + }, + { + "pr": 929, + "head": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "base": "83eba56149eb802cd63642c507c324c9976ec78e", + "state": "OPEN", + "auto_merge": true, + "merge_commit": null, + "checks": [ + { + "name": "admit-current-head", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "queued", + "conclusion": null + }, + { + "name": "CodeQL", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "completed", + "conclusion": "success" + }, + { + "name": "dependency-review", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "queued", + "conclusion": null + }, + { + "name": "scorecard", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "queued", + "conclusion": null + }, + { + "name": "trivy-fs", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "queued", + "conclusion": null + }, + { + "name": "osv-scan", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "queued", + "conclusion": null + }, + { + "name": "strix", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "queued", + "conclusion": null + }, + { + "name": "Semgrep (multi-language SAST)", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "queued", + "conclusion": null + }, + { + "name": "noema-review", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "queued", + "conclusion": null + }, + { + "name": "CodeQL compatibility analysis (actions)", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "queued", + "conclusion": null + }, + { + "name": "CodeQL compatibility analysis (python)", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "queued", + "conclusion": null + }, + { + "name": "CodeQL compatibility analysis (javascript-typescript)", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "queued", + "conclusion": null + }, + { + "name": "Frontend lint, test, build", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Full test suite", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "completed", + "conclusion": "success" + }, + { + "name": "gitleaks (secret scan)", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "Detect changed scope", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Detect CodeQL languages", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Detect changed scope", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Publish ontology to GitHub Pages", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "Registry, inference, coverage, PostgreSQL", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Validate ontology publication", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "completed", + "conclusion": "success" + }, + { + "name": "required-workflow-bootstrap", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Detect changed scope", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "completed", + "conclusion": "success" + }, + { + "name": "cancel-superseded-pr-runs", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "completed", + "conclusion": "success" + }, + { + "name": "cancel-superseded-opencode-review-runs", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Admit current pull request head", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "completed", + "conclusion": "success" + }, + { + "name": "cancel-closed-pr-runs", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "admit-current-head", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "completed", + "conclusion": "success" + }, + { + "name": "scan-pr-queue", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Analyze (python)", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Analyze (actions)", + "head_sha": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "status": "completed", + "conclusion": "success" + } + ] + }, + { + "pr": 934, + "head": "3060dd7000791160c2bcc98351af129899ff32ff", + "base": "1d8fa267b059289e77301a09985dfac70a439814", + "state": "OPEN", + "auto_merge": false, + "merge_commit": null, + "checks": [ + { + "name": "Full test suite", + "head_sha": "3060dd7000791160c2bcc98351af129899ff32ff", + "status": "queued", + "conclusion": null + }, + { + "name": "Frontend lint, test, build", + "head_sha": "3060dd7000791160c2bcc98351af129899ff32ff", + "status": "queued", + "conclusion": null + } + ] + }, + { + "pr": 914, + "head": "64340c0a86f876f32d0a37ef17321f3d9b993818", + "base": "83eba56149eb802cd63642c507c324c9976ec78e", + "state": "OPEN", + "auto_merge": true, + "merge_commit": null, + "checks": [ + { + "name": "Full test suite", + "head_sha": "64340c0a86f876f32d0a37ef17321f3d9b993818", + "status": "queued", + "conclusion": null + }, + { + "name": "Frontend lint, test, build", + "head_sha": "64340c0a86f876f32d0a37ef17321f3d9b993818", + "status": "queued", + "conclusion": null + }, + { + "name": "Frontend lint, test, build", + "head_sha": "64340c0a86f876f32d0a37ef17321f3d9b993818", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "gitleaks (secret scan)", + "head_sha": "64340c0a86f876f32d0a37ef17321f3d9b993818", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "Full test suite", + "head_sha": "64340c0a86f876f32d0a37ef17321f3d9b993818", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "Detect changed scope", + "head_sha": "64340c0a86f876f32d0a37ef17321f3d9b993818", + "status": "queued", + "conclusion": null + }, + { + "name": "Detect changed scope", + "head_sha": "64340c0a86f876f32d0a37ef17321f3d9b993818", + "status": "queued", + "conclusion": null + }, + { + "name": "Detect CodeQL languages", + "head_sha": "64340c0a86f876f32d0a37ef17321f3d9b993818", + "status": "queued", + "conclusion": null + }, + { + "name": "cancel-closed-pr-runs", + "head_sha": "64340c0a86f876f32d0a37ef17321f3d9b993818", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "cancel-superseded-opencode-review-runs", + "head_sha": "64340c0a86f876f32d0a37ef17321f3d9b993818", + "status": "queued", + "conclusion": null + }, + { + "name": "required-workflow-bootstrap", + "head_sha": "64340c0a86f876f32d0a37ef17321f3d9b993818", + "status": "queued", + "conclusion": null + }, + { + "name": "scan-pr-queue", + "head_sha": "64340c0a86f876f32d0a37ef17321f3d9b993818", + "status": "queued", + "conclusion": null + }, + { + "name": "cancel-superseded-pr-runs", + "head_sha": "64340c0a86f876f32d0a37ef17321f3d9b993818", + "status": "queued", + "conclusion": null + }, + { + "name": "admit-current-head", + "head_sha": "64340c0a86f876f32d0a37ef17321f3d9b993818", + "status": "queued", + "conclusion": null + }, + { + "name": "Detect changed scope", + "head_sha": "64340c0a86f876f32d0a37ef17321f3d9b993818", + "status": "queued", + "conclusion": null + }, + { + "name": "Admit current pull request head", + "head_sha": "64340c0a86f876f32d0a37ef17321f3d9b993818", + "status": "queued", + "conclusion": null + }, + { + "name": "Analyze (python)", + "head_sha": "64340c0a86f876f32d0a37ef17321f3d9b993818", + "status": "queued", + "conclusion": null + }, + { + "name": "Analyze (actions)", + "head_sha": "64340c0a86f876f32d0a37ef17321f3d9b993818", + "status": "queued", + "conclusion": null + } + ] + }, + { + "pr": 911, + "head": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "base": "83eba56149eb802cd63642c507c324c9976ec78e", + "state": "OPEN", + "auto_merge": true, + "merge_commit": null, + "checks": [ + { + "name": "publish-manual-pr-evidence-status", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "coverage-source-tree", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "queued", + "conclusion": null + }, + { + "name": "Semgrep OSS", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "osv-scanner", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Scorecard", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Trivy", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "admit-current-head", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Semgrep (multi-language SAST)", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "osv-scan", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "scorecard", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "trivy-fs", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "dependency-review", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "failure" + }, + { + "name": "CodeQL compatibility analysis (javascript-typescript)", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "failure" + }, + { + "name": "CodeQL compatibility analysis (actions)", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "failure" + }, + { + "name": "CodeQL compatibility analysis (python)", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "failure" + }, + { + "name": "noema-review", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "failure" + }, + { + "name": "CodeQL", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "strix", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "failure" + }, + { + "name": "Frontend lint, test, build", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Full test suite", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "gitleaks (secret scan)", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "Detect changed scope", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Detect CodeQL languages", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Detect changed scope", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "required-workflow-bootstrap", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Publish ontology to GitHub Pages", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "cancel-superseded-opencode-review-runs", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "cancel-superseded-pr-runs", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Registry, inference, coverage, PostgreSQL", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Admit current pull request head", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Validate ontology publication", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Detect changed scope", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "org-queue-sweep", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "cancel-closed-pr-runs", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "scan-pr-queue", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "admit-current-head", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Analyze (python)", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Analyze (actions)", + "head_sha": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "status": "completed", + "conclusion": "success" + } + ] + }, + { + "pr": 907, + "head": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "base": "83eba56149eb802cd63642c507c324c9976ec78e", + "state": "OPEN", + "auto_merge": true, + "merge_commit": null, + "checks": [ + { + "name": "opencode-review", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "queued", + "conclusion": null + }, + { + "name": "coverage-evidence", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "success" + }, + { + "name": "publish-manual-pr-evidence-status", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "cancelled" + }, + { + "name": "cancel-closed-pr-runs", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "admit-current-head", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "success" + }, + { + "name": "noema-review", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "failure" + }, + { + "name": "coverage-source-tree", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Trivy", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Scorecard", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Semgrep OSS", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "success" + }, + { + "name": "admit-current-head", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "success" + }, + { + "name": "strix", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "cancelled" + }, + { + "name": "CodeQL compatibility analysis (actions)", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "failure" + }, + { + "name": "CodeQL compatibility analysis (javascript-typescript)", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "failure" + }, + { + "name": "CodeQL compatibility analysis (python)", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "failure" + }, + { + "name": "osv-scan", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "dependency-review", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "scorecard", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "success" + }, + { + "name": "trivy-fs", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Semgrep (multi-language SAST)", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Full test suite", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Frontend lint, test, build", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "success" + }, + { + "name": "gitleaks (secret scan)", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "Frontend lint, test, build", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "Full test suite", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "Detect changed scope", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Detect changed scope", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Detect CodeQL languages", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "success" + }, + { + "name": "cancel-superseded-pr-runs", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Admit current pull request head", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Detect changed scope", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "success" + }, + { + "name": "cancel-superseded-opencode-review-runs", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "success" + }, + { + "name": "required-workflow-bootstrap", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "success" + }, + { + "name": "org-queue-sweep", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "skipped" + }, + { + "name": "scan-pr-queue", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "success" + }, + { + "name": "Analyze (python)", + "head_sha": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "status": "completed", + "conclusion": "success" + } + ] + } ] } diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index b331912ca..cfaf400ab 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -116,7 +116,25 @@ migration filenames share a numeric prefix in this snapshot; cross-branch SQL replay and semantic compatibility are not thereby proven. API-file overlap remains a review target, not proof of a conflict. Parent-first protected merging, explicit authority reconciliation, then fresh child checks/reviews -are required before delivery. The active rules require independent approval, +are required before delivery. Final hosted recheck: #780 retains three queued checks and cancelled earlier +central runs; #929 has eleven queued checks and no failures; #934 has two +queued checks. #914 has fourteen queued checks. #911 still fails dependency +review (GitHub HTTP 403), Noema (HTTP 502), CodeQL dispatch admission, and +Strix (cause not established here). #907 still fails Noema (HTTP 502) and +CodeQL's missing terminal dispatch verdict. These are unresolved hosted gates, +not local-product test failures, and none was bypassed or suppressed. Normal +auto-merge is enabled on #780/#929/#914/#911/#907. No merge SHA exists for any +of those open PRs at the recheck. + +The new repair is draft #935, created after the 117-PR queue snapshot, at +`76fcd6207f549f8cbe710c8a2f8c87227f3712ee` before this evidence-only update. +Its parent is #934. Repository Tests were correctly Draft-skipped, which is +not hosted GREEN; this child cannot auto-merge into its unprotected parent. +Fresh protected-main checks and independent approval remain required after +parent-first delivery. Six documentation/Voice contract tests passed after +the new baseline content was added. + +The active rules require independent approval, resolved review threads, central workflows, and no force push; no bypass or self-approval was used. From 1c9145998075b512732e035c05937bebd33a25d3 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 5 Sep 2026 18:57:23 +0900 Subject: [PATCH 4/6] test(ontology): reject extended CSV formula prefixes --- frontend/src/ontologyCsvSecurity.test.ts | 40 ++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 frontend/src/ontologyCsvSecurity.test.ts diff --git a/frontend/src/ontologyCsvSecurity.test.ts b/frontend/src/ontologyCsvSecurity.test.ts new file mode 100644 index 000000000..9a4437f34 --- /dev/null +++ b/frontend/src/ontologyCsvSecurity.test.ts @@ -0,0 +1,40 @@ +import { describe, expect, it } from "vitest"; + +import type { OntologyNeighborhoodPayload } from "./api"; +import { neighborhoodCsv } from "./ontologyLayout"; + +function csvWithSourceLabel(sourceLabel: string): string { + const payload = { + exact_value_rows: [ + { + edge_id: "edge-1", + source_label: sourceLabel, + property_label: "relates to", + target_label: "Target", + truth_status_code: "truth_authoritative", + recorded_at: "2026-09-05T00:00:00Z", + ontology_property_iri: "https://example.test/ontology#relatesTo", + property_code: "relatesTo", + source_node_id: "source", + target_node_id: "target", + }, + ], + voice_assignments: [], + } as unknown as OntologyNeighborhoodPayload; + return neighborhoodCsv(payload); +} + +describe("ontology CSV spreadsheet safety", () => { + it.each([ + ["\t=1+1", "'\t=1+1"], + ["\r=1+1", "\"'\r=1+1\""], + ["\n=1+1", "\"'\n=1+1\""], + ["\u0000=1+1", "'\u0000=1+1"], + ["=1+1", "'=1+1"], + ["+1+1", "'+1+1"], + ["-1+1", "'-1+1"], + ["@SUM(A1:A2)", "'@SUM(A1:A2)"], + ])("neutralizes formula-triggering source label %j", (sourceLabel, escapedCell) => { + expect(csvWithSourceLabel(sourceLabel)).toContain(`edge-1,${escapedCell},relates to`); + }); +}); From 140c4cc7ef1ad29252b6f78247595b83fc214e80 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 5 Sep 2026 18:58:24 +0900 Subject: [PATCH 5/6] fix(ontology): harden CSV formula neutralization --- frontend/src/ontologyLayout.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/frontend/src/ontologyLayout.ts b/frontend/src/ontologyLayout.ts index 9e1467420..7b1fc661f 100644 --- a/frontend/src/ontologyLayout.ts +++ b/frontend/src/ontologyLayout.ts @@ -182,9 +182,13 @@ export function neighborhoodCsv(payload: OntologyNeighborhoodPayload): string { return `${lines.join("\n")}\n`; } +const SPREADSHEET_FORMULA_PREFIX = /^[=+\-@\t\r\n\u0000\uFF1D\uFF0B\uFF0D\uFF20]/u; + function csvCell(value: string): string { - const safeValue = /^[=+\-@]/.test(value) ? `'${value}` : value; - if (/[",\n]/.test(safeValue)) { + // Spreadsheet formula parsers recognize control and locale-specific prefixes + // beyond ASCII =+-@, so neutralize the complete export boundary before quoting. + const safeValue = SPREADSHEET_FORMULA_PREFIX.test(value) ? `'${value}` : value; + if (/[",\r\n]/.test(safeValue)) { return `"${safeValue.replaceAll('"', '""')}"`; } return safeValue; From 7c5f9c11c2b9a4bef4aa2e6d3c7926d92b7d15d3 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 5 Sep 2026 18:59:31 +0900 Subject: [PATCH 6/6] docs(ontology): trace CSV export injection boundary --- docs/adr/0184-ontology-provenance-explorer.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/adr/0184-ontology-provenance-explorer.md b/docs/adr/0184-ontology-provenance-explorer.md index 8452c775b..42267ffa9 100644 --- a/docs/adr/0184-ontology-provenance-explorer.md +++ b/docs/adr/0184-ontology-provenance-explorer.md @@ -36,6 +36,14 @@ has combined singleton assertions into arrays. Keep its labels, times, truth, and authorized Voice derivation metadata intact. This is a projection of the already-authorized response, not a new authorization or inference boundary. +CSV is a spreadsheet-facing rendering of the same authorized evidence, so +untrusted labels and evidence values must remain literal data when opened in a +spreadsheet. Neutralize formula-triggering ASCII, control, null, and supported +locale-sensitive full-width prefixes before CSV quoting, and quote both CR and +LF-bearing fields. This follows OWASP ASVS 5.0.0 requirement v5.0.0-1.2.10 and +the OWASP CSV Injection/WSTG guidance; it changes only export encoding, never +the authoritative value stored in PostgreSQL or represented by JSON-LD. + **Consequences:** - Event Lineage and ontology neighborhood stay distinct product capabilities. @@ -63,5 +71,11 @@ Knublauch, H., & Kontokostas, D. (Eds.). (2017). *Shapes constraint language (SH World Wide Web Consortium. (2024). *Web content accessibility guidelines (WCAG) 2.2* (W3C Recommendation). https://www.w3.org/TR/WCAG22/ +Open Worldwide Application Security Project. (2025). *OWASP application security verification standard 5.0.0*. https://owasp.org/www-project-application-security-verification-standard/ + +Open Worldwide Application Security Project. (n.d.). *CSV injection*. https://owasp.org/www-community/attacks/CSV_Injection + +Open Worldwide Application Security Project. (n.d.). *Testing for CSV injection* (WSTG-INPV-21). https://wstg.owasp.org/latest/4-Web_Application_Security_Testing/07-Input_Validation_Testing/21-Testing_for_CSV_Injection/ + Open Worldwide Application Security Project. (2023). *API1:2023 broken object level authorization*. https://owasp.org/API-Security/editions/2023/en/0xa1-broken-object-level-authorization/