@mneme-ai/core 2.19.32 → 2.19.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/apostille/apostille.test.d.ts +2 -0
  2. package/dist/apostille/apostille.test.d.ts.map +1 -0
  3. package/dist/apostille/apostille.test.js +279 -0
  4. package/dist/apostille/apostille.test.js.map +1 -0
  5. package/dist/apostille/index.d.ts +166 -0
  6. package/dist/apostille/index.d.ts.map +1 -0
  7. package/dist/apostille/index.js +432 -0
  8. package/dist/apostille/index.js.map +1 -0
  9. package/dist/autonomic_scheduler/b4_context_shift.test.d.ts +12 -0
  10. package/dist/autonomic_scheduler/b4_context_shift.test.d.ts.map +1 -0
  11. package/dist/autonomic_scheduler/b4_context_shift.test.js +213 -0
  12. package/dist/autonomic_scheduler/b4_context_shift.test.js.map +1 -0
  13. package/dist/autonomic_scheduler/index.d.ts +44 -0
  14. package/dist/autonomic_scheduler/index.d.ts.map +1 -1
  15. package/dist/autonomic_scheduler/index.js +68 -1
  16. package/dist/autonomic_scheduler/index.js.map +1 -1
  17. package/dist/conversation_compiler/b1_extract_decisions.test.d.ts +2 -0
  18. package/dist/conversation_compiler/b1_extract_decisions.test.d.ts.map +1 -0
  19. package/dist/conversation_compiler/b1_extract_decisions.test.js +150 -0
  20. package/dist/conversation_compiler/b1_extract_decisions.test.js.map +1 -0
  21. package/dist/conversation_compiler/index.d.ts +19 -1
  22. package/dist/conversation_compiler/index.d.ts.map +1 -1
  23. package/dist/conversation_compiler/index.js +128 -39
  24. package/dist/conversation_compiler/index.js.map +1 -1
  25. package/dist/cosmic/aurelian_v1933.test.d.ts +2 -0
  26. package/dist/cosmic/aurelian_v1933.test.d.ts.map +1 -0
  27. package/dist/cosmic/aurelian_v1933.test.js +82 -0
  28. package/dist/cosmic/aurelian_v1933.test.js.map +1 -0
  29. package/dist/cosmic/aurelian_v1934.test.d.ts +2 -0
  30. package/dist/cosmic/aurelian_v1934.test.d.ts.map +1 -0
  31. package/dist/cosmic/aurelian_v1934.test.js +83 -0
  32. package/dist/cosmic/aurelian_v1934.test.js.map +1 -0
  33. package/dist/cosmic/v1933_integration.test.d.ts +2 -0
  34. package/dist/cosmic/v1933_integration.test.d.ts.map +1 -0
  35. package/dist/cosmic/v1933_integration.test.js +128 -0
  36. package/dist/cosmic/v1933_integration.test.js.map +1 -0
  37. package/dist/cosmic/v1934_integration.test.d.ts +2 -0
  38. package/dist/cosmic/v1934_integration.test.d.ts.map +1 -0
  39. package/dist/cosmic/v1934_integration.test.js +150 -0
  40. package/dist/cosmic/v1934_integration.test.js.map +1 -0
  41. package/dist/eternity/eternity.test.d.ts +2 -0
  42. package/dist/eternity/eternity.test.d.ts.map +1 -0
  43. package/dist/eternity/eternity.test.js +177 -0
  44. package/dist/eternity/eternity.test.js.map +1 -0
  45. package/dist/eternity/index.d.ts +183 -0
  46. package/dist/eternity/index.d.ts.map +1 -0
  47. package/dist/eternity/index.js +255 -0
  48. package/dist/eternity/index.js.map +1 -0
  49. package/dist/index.d.ts +6 -0
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +14 -0
  52. package/dist/index.js.map +1 -1
  53. package/dist/outcome_market/index.d.ts +212 -0
  54. package/dist/outcome_market/index.d.ts.map +1 -0
  55. package/dist/outcome_market/index.js +344 -0
  56. package/dist/outcome_market/index.js.map +1 -0
  57. package/dist/outcome_market/outcome_market.test.d.ts +2 -0
  58. package/dist/outcome_market/outcome_market.test.d.ts.map +1 -0
  59. package/dist/outcome_market/outcome_market.test.js +236 -0
  60. package/dist/outcome_market/outcome_market.test.js.map +1 -0
  61. package/dist/tool_browser/index.d.ts +128 -0
  62. package/dist/tool_browser/index.d.ts.map +1 -0
  63. package/dist/tool_browser/index.js +218 -0
  64. package/dist/tool_browser/index.js.map +1 -0
  65. package/dist/tool_browser/tool_browser.test.d.ts +2 -0
  66. package/dist/tool_browser/tool_browser.test.d.ts.map +1 -0
  67. package/dist/tool_browser/tool_browser.test.js +167 -0
  68. package/dist/tool_browser/tool_browser.test.js.map +1 -0
  69. package/dist/tool_tier/index.d.ts.map +1 -1
  70. package/dist/tool_tier/index.js +23 -5
  71. package/dist/tool_tier/index.js.map +1 -1
  72. package/dist/truth_sensor_pack/index.d.ts +105 -0
  73. package/dist/truth_sensor_pack/index.d.ts.map +1 -0
  74. package/dist/truth_sensor_pack/index.js +201 -0
  75. package/dist/truth_sensor_pack/index.js.map +1 -0
  76. package/dist/truth_sensor_pack/truth_sensor_pack.test.d.ts +2 -0
  77. package/dist/truth_sensor_pack/truth_sensor_pack.test.d.ts.map +1 -0
  78. package/dist/truth_sensor_pack/truth_sensor_pack.test.js +153 -0
  79. package/dist/truth_sensor_pack/truth_sensor_pack.test.js.map +1 -0
  80. package/dist/whats_new.d.ts.map +1 -1
  81. package/dist/whats_new.js +16 -0
  82. package/dist/whats_new.js.map +1 -1
  83. package/dist/wrapper_genesis/index.d.ts.map +1 -1
  84. package/dist/wrapper_genesis/index.js +62 -0
  85. package/dist/wrapper_genesis/index.js.map +1 -1
  86. package/dist/zk_fairness/index.d.ts +217 -0
  87. package/dist/zk_fairness/index.d.ts.map +1 -0
  88. package/dist/zk_fairness/index.js +349 -0
  89. package/dist/zk_fairness/index.js.map +1 -0
  90. package/dist/zk_fairness/zk_fairness.test.d.ts +2 -0
  91. package/dist/zk_fairness/zk_fairness.test.d.ts.map +1 -0
  92. package/dist/zk_fairness/zk_fairness.test.js +223 -0
  93. package/dist/zk_fairness/zk_fairness.test.js.map +1 -0
  94. package/package.json +1 -1
@@ -0,0 +1,128 @@
1
+ /**
2
+ * v2.19.33 INTEGRATION TEST — B1 + B2 + B3 + B4 working together
3
+ *
4
+ * Real-world scenario: a developer (Shinnapat) joins a fresh repo. The AI
5
+ * agent needs to:
6
+ * 1. Discover the right tools (B3 — mneme.browse + mneme.suggest)
7
+ * 2. Extract agreements from team chat transcripts (B1 — extract_decisions)
8
+ * 3. Verify a claim about the new release (B2 — truth sensor stack)
9
+ * 4. Schedule the brain organs without idle (B4 — context-shift scheduler)
10
+ *
11
+ * If this test passes, the 4 fixes compose correctly end-to-end.
12
+ */
13
+ import { describe, it, expect } from "vitest";
14
+ import { extractDecisions } from "../conversation_compiler/index.js";
15
+ import { proposeSensorPlan } from "../truth_sensor_pack/index.js";
16
+ import { browseCatalog, suggestTools } from "../tool_browser/index.js";
17
+ import { decideTicks, freshHealthRecord, DEFAULT_SCHEDULES_ACTIVE_DEV, } from "../autonomic_scheduler/index.js";
18
+ describe("v2.19.33 INTEGRATION — full polish-release end-to-end", () => {
19
+ it("scenario: new developer joins repo, AI agent discovers + extracts + verifies + schedules", () => {
20
+ const fakeRepoCatalog = [
21
+ { name: "mneme.status", tier: "starter", description: "show status" },
22
+ { name: "mneme.handoff.snapshot", tier: "starter", description: "fresh context capture for cross-device handoff" },
23
+ { name: "mneme.truth.forensic", tier: "starter", description: "verify claim against catalog" },
24
+ { name: "mneme.truth.init", tier: "starter", description: "default sensor stack for claims" },
25
+ { name: "mneme.truth.contradictions", tier: "starter", description: "detect self-contradicting claims" },
26
+ { name: "mneme.synapse.sync_export", tier: "starter", description: "cross-device brain sync" },
27
+ { name: "mneme.guard", tier: "starter", description: "pre-commit hook" },
28
+ { name: "mneme.browse", tier: "starter", description: "paginated catalog browse" },
29
+ { name: "mneme.suggest", tier: "starter", description: "repo-aware tool recommendations" },
30
+ { name: "mneme.soul.embalm", tier: "explorer", description: "agent state snapshot for ban-recovery" },
31
+ { name: "mneme.beacon.spawn", tier: "experimental", description: "QR transfer server" },
32
+ ];
33
+ // ─── STEP 1: B3 — DISCOVERABILITY ──────────────────────────────
34
+ // New user runs mneme.browse to see starter tools
35
+ const browse = browseCatalog({ catalog: fakeRepoCatalog, tier: "starter" });
36
+ expect(browse.totalMatches).toBe(9);
37
+ expect(browse.entries[0].tier).toBe("starter");
38
+ // AI suggests based on repo signals (Node repo + uncommitted changes)
39
+ const suggestions = suggestTools({
40
+ catalog: fakeRepoCatalog,
41
+ intent: "verify the new release claim",
42
+ repoSignals: { hasPackageJson: true, hasUncommittedChanges: true, hasDotGit: true },
43
+ limit: 5,
44
+ });
45
+ expect(suggestions.suggestions.length).toBeGreaterThanOrEqual(1);
46
+ // truth.forensic should rank high (intent match + uncommitted-changes signal)
47
+ expect(suggestions.suggestions.some((s) => s.tool.name === "mneme.truth.forensic")).toBe(true);
48
+ // ─── STEP 2: B1 — EXTRACT TEAM AGREEMENTS ─────────────────────
49
+ const teamChat = `Decision: every commit must pass test before merge.
50
+ Deploy needs 2 reviewers per PR.
51
+ ห้าม push main ตรงๆ.
52
+ Update changelog for every release.`;
53
+ const decisions = extractDecisions({ transcript: teamChat });
54
+ // Should capture test_required + review_required + no_direct_push_main + must_have_changelog
55
+ expect(decisions.length).toBeGreaterThanOrEqual(3);
56
+ const patterns = new Set(decisions.map((d) => d.pattern));
57
+ expect(patterns.has("test_required")).toBe(true);
58
+ expect(patterns.has("review_required")).toBe(true);
59
+ // ─── STEP 3: B2 — VERIFY A CLAIM WITH DEFAULT SENSOR STACK ────
60
+ const claim = "mneme.handoff.snapshot is registered in the catalog";
61
+ const sensorPlan = proposeSensorPlan({ claim });
62
+ expect(sensorPlan.shape).toBe("tool_capability");
63
+ expect(sensorPlan.recommendedSensors.length).toBeGreaterThanOrEqual(2);
64
+ // For tool_capability claims, truth_forensic should be recommended
65
+ expect(sensorPlan.recommendedSensors.some((s) => s.id === "truth_forensic")).toBe(true);
66
+ // ─── STEP 4: B4 — SCHEDULER TICKS DESPITE ACTIVE DEV ──────────
67
+ // Simulate active dev: just committed (commit cycle) on a fresh branch
68
+ const health = [
69
+ freshHealthRecord("breath"),
70
+ freshHealthRecord("reflex"),
71
+ freshHealthRecord("sleep"),
72
+ freshHealthRecord("dreamspace"),
73
+ freshHealthRecord("hormonal"),
74
+ ];
75
+ const events = {
76
+ hasCommitCycle: true,
77
+ hasBranchSwitch: true,
78
+ msSinceLastCommit: 0,
79
+ idleMs: 0, // active dev — NEVER idle
80
+ };
81
+ const plan = decideTicks({
82
+ schedules: DEFAULT_SCHEDULES_ACTIVE_DEV,
83
+ health,
84
+ events,
85
+ nowMs: Date.now(),
86
+ });
87
+ // SLEEP fires on branch switch, DREAMSPACE on commit cycle
88
+ const sleepEntry = plan.entries.find((e) => e.organ === "sleep");
89
+ const dreamEntry = plan.entries.find((e) => e.organ === "dreamspace");
90
+ expect(sleepEntry?.shouldTick).toBe(true);
91
+ expect(dreamEntry?.shouldTick).toBe(true);
92
+ // ─── STEP 5: SYSTEM COHERENCE ──────────────────────────────────
93
+ // All 4 fixes worked together; no contradictions
94
+ expect(browse.entries.length).toBeGreaterThan(0);
95
+ expect(decisions.length).toBeGreaterThan(0);
96
+ expect(sensorPlan.recommendedSensors.length).toBeGreaterThan(0);
97
+ expect(plan.entries.filter((e) => e.shouldTick).length).toBeGreaterThan(0);
98
+ });
99
+ it("composition: suggest → browse → extract chain (multi-step UX)", () => {
100
+ const cat = [
101
+ { name: "mneme.truth.init", tier: "starter", description: "default sensor stack", triggers: ["truth init", "verify claim"] },
102
+ ];
103
+ // Step 1: User asks "how do I verify a claim?"
104
+ const suggested = suggestTools({ catalog: cat, intent: "verify claim" });
105
+ expect(suggested.suggestions[0].tool.name).toBe("mneme.truth.init");
106
+ // Step 2: AI runs the suggested tool with the claim
107
+ const plan = proposeSensorPlan({ claim: "we shipped v2.19.33" });
108
+ expect(plan.shape).toBe("version_claim");
109
+ expect(plan.recommendedSensors.some((s) => s.id === "truth_forensic")).toBe(true);
110
+ // Step 3: Extract decisions from the claim text
111
+ const decisions = extractDecisions({ transcript: "every release must update changelog" });
112
+ expect(decisions.some((d) => d.pattern === "must_have_changelog")).toBe(true);
113
+ });
114
+ it("regression: all 4 fixes maintain backward-compat with prior tests", async () => {
115
+ // Pre-fix behaviour preserved where not breaking the bug
116
+ const oldExtractTest = extractDecisions({ transcript: "Every commit must have a test before merging." });
117
+ expect(oldExtractTest.length).toBeGreaterThan(0);
118
+ // STARTER tier expanded but old entries still present
119
+ const tt = await import("../tool_tier/index.js");
120
+ expect(tt.STARTER_WHITELIST.has("mneme.status")).toBe(true);
121
+ expect(tt.STARTER_WHITELIST.has("mneme.ask")).toBe(true);
122
+ // Scheduler default is now ACTIVE_DEV (compat shim DEFAULT_SCHEDULES_LEGACY available)
123
+ const sched = await import("../autonomic_scheduler/index.js");
124
+ expect(sched.DEFAULT_SCHEDULES).toBe(sched.DEFAULT_SCHEDULES_ACTIVE_DEV);
125
+ expect(sched.DEFAULT_SCHEDULES_LEGACY.length).toBeGreaterThan(0);
126
+ });
127
+ });
128
+ //# sourceMappingURL=v1933_integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v1933_integration.test.js","sourceRoot":"","sources":["../../src/cosmic/v1933_integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=v1934_integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v1934_integration.test.d.ts","sourceRoot":"","sources":["../../src/cosmic/v1934_integration.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * v2.19.34 INTEGRATION — APOSTILLE → OUTCOME → ZK-FAIRNESS → ETERNITY
3
+ *
4
+ * Real-world enterprise scenario: an EU bank deploys an AI loan-decision
5
+ * agent. They need to prove (a) every AI call is logged + mapped to
6
+ * regulatory controls (APOSTILLE), (b) vendor selection is competitive
7
+ * + outcome-priced (OUTCOME), (c) fairness across protected attributes
8
+ * is mathematically verified (ZK-FAIRNESS), (d) the trail survives
9
+ * even if the AI vendor disappears (ETERNITY).
10
+ *
11
+ * If this passes, the holy-grail quadruple ships as a coherent enterprise
12
+ * compliance product.
13
+ */
14
+ import { describe, it, expect } from "vitest";
15
+ import { emptyLedger, mintReceipt, appendToLedger, verifyLedger, generateAuditBinder, } from "../apostille/index.js";
16
+ import { postTask, submitBid, pickWinner, } from "../outcome_market/index.js";
17
+ import { commitToDecisionFunction, generateSwapTests, verifyInvariance, mintFairnessCertificate, } from "../zk_fairness/index.js";
18
+ import { mintEternalTrace, mintPinReceipt, attachPin, computeSurvivalScore, } from "../eternity/index.js";
19
+ const S_APO = "integration-apo";
20
+ const S_MKT = "integration-mkt";
21
+ const S_ZK = "integration-zk";
22
+ const S_ETR = "integration-etr";
23
+ describe("v2.19.34 INTEGRATION — EU bank deploys AI loan agent", () => {
24
+ it("end-to-end pipeline: 4 modules chain coherently", () => {
25
+ // ─── 1. OUTCOME MARKET: bank posts loan-classifier task; vendors bid ─
26
+ const task = postTask({
27
+ intent: "classify loan applicant as approve/deny",
28
+ acceptanceCriteria: ["accuracy >= 0.85", "no disparate impact across protected attrs"],
29
+ maxBudgetCents: 1000, postedBy: "eu_bank_compliance",
30
+ postedAtMs: 1_700_000_000_000, secret: S_MKT,
31
+ });
32
+ const bids = [
33
+ submitBid({ task, vendor: "claude", priceCents: 400, estimatedLatencyMs: 200, confidence: 0.9, submittedAtMs: 1_700_000_000_005, secret: S_MKT }),
34
+ submitBid({ task, vendor: "gpt", priceCents: 300, estimatedLatencyMs: 150, confidence: 0.85, submittedAtMs: 1_700_000_000_010, secret: S_MKT }),
35
+ submitBid({ task, vendor: "gemini", priceCents: 500, estimatedLatencyMs: 100, confidence: 0.95, submittedAtMs: 1_700_000_000_015, secret: S_MKT }),
36
+ ];
37
+ const auction = pickWinner({ task, bids, secret: S_MKT });
38
+ expect(auction.winnerVendor).toBe("gpt"); // lowest price
39
+ expect(auction.effectivePriceCents).toBe(400); // Vickrey 2nd-price (claude's 400)
40
+ // ─── 2. ZK-FAIRNESS: winner commits + fairness verified for 7 attrs ─
41
+ const commit = commitToDecisionFunction({
42
+ vendor: "gpt", modelHash: "gpt-loan-v1-hash", decisionLogicHash: "logic-v1",
43
+ committedAtMs: 1_700_000_000_100, secret: S_ZK,
44
+ });
45
+ const batch = generateSwapTests({
46
+ attribute: "gender", baseInput: { income: 50000, credit_score: 720, age: 35 },
47
+ count: 100, variant: "adversarial", secret: S_ZK,
48
+ });
49
+ // Simulate vendor returning invariant decisions (PASS fairness)
50
+ const responses = batch.tests.map((t) => ({ testId: t.testId, decisionOnBase: "approve", decisionOnSwapped: "approve" }));
51
+ const verdict = verifyInvariance({ commitment: commit, batch, responses, secret: S_ZK });
52
+ expect(verdict.verdict).toBe("PASS");
53
+ const cert = mintFairnessCertificate({ verdict, commitment: commit, secret: S_ZK });
54
+ expect(cert.controlsSatisfied).toContain("EU_AI_ACT::Art.10::data_governance");
55
+ // ─── 3. APOSTILLE: every AI call recorded; binder generated ─────────
56
+ let ledger = emptyLedger();
57
+ let prev = null;
58
+ for (let i = 0; i < 10; i++) {
59
+ const r = mintReceipt({
60
+ vendor: "gpt", modelVersion: "gpt-loan-v1",
61
+ promptText: `loan applicant ${i}`,
62
+ responseText: i % 3 === 0 ? "approve" : "deny",
63
+ filesTouched: ["loan_decisions.log"],
64
+ tokensIn: 300, tokensOut: 50,
65
+ costUsdMicros: 40, // $0.00004 per call
66
+ outcomeClass: i % 5 === 0 ? "blocked_by_guard" : "merged",
67
+ vaccinesTriggered: i === 0 ? ["fairness_guard_v1"] : [],
68
+ note: `auctionId=${auction.taskId} fairnessCert=${cert.certificateId}`,
69
+ tsMs: 1_700_000_000_100 + i * 1000,
70
+ prevReceipt: prev, secret: S_APO,
71
+ });
72
+ ledger = appendToLedger(ledger, r, S_APO);
73
+ prev = r;
74
+ }
75
+ expect(verifyLedger(ledger, S_APO)).toBe(true);
76
+ const binder = generateAuditBinder({
77
+ ledger, framework: "EU_AI_ACT",
78
+ organisationName: "EU Bank A.G.", preparedBy: "Mneme APOSTILLE",
79
+ }, S_APO);
80
+ expect(binder.markdown).toContain("EU_AI_ACT");
81
+ expect(binder.totalReceiptsInScope).toBeGreaterThan(0);
82
+ // ─── 4. ETERNITY: trace replicated across 3 jurisdictions ──────────
83
+ const roots = [
84
+ { id: "bank-internal", kind: "local_disk", locator: "/srv/audit", jurisdictionTag: "EU" },
85
+ { id: "regulator-eu", kind: "git_repo", locator: "git://efi/audit", jurisdictionTag: "EU" },
86
+ { id: "ipfs-mirror", kind: "ipfs_node", locator: "QmAuditBinder", jurisdictionTag: "CH" },
87
+ ];
88
+ let trace = mintEternalTrace({
89
+ payload: { binder: binder.markdown, fingerprint: binder.fingerprint, ledgerMerkle: ledger.merkleRoot, fairnessCertId: cert.certificateId },
90
+ secret: S_ETR,
91
+ });
92
+ for (const root of roots) {
93
+ const pin = mintPinReceipt({ trace, root, secret: S_ETR });
94
+ trace = attachPin({ trace, pin, secret: S_ETR });
95
+ }
96
+ const survival = computeSurvivalScore({ trace, roots });
97
+ expect(survival.scenariosSurvived).toBeGreaterThan(0);
98
+ expect(survival.rootDiversity).toBe(3);
99
+ expect(survival.jurisdictionDiversity).toBe(2);
100
+ // ─── 5. SYSTEM COHERENCE ─────────────────────────────────────────────
101
+ // The binder fingerprint is embedded in the eternal trace; the audit
102
+ // ledger merkle root is also embedded; cross-verification possible.
103
+ expect(trace.payload["fingerprint"]).toBe(binder.fingerprint);
104
+ expect(trace.payload["ledgerMerkle"]).toBe(ledger.merkleRoot);
105
+ expect(trace.payload["fairnessCertId"]).toBe(cert.certificateId);
106
+ });
107
+ it("VENDOR DEATH SCENARIO: OpenAI disappears, audit trail SURVIVES via Mneme ETERNITY", () => {
108
+ // Build minimal trace
109
+ const minimalPayload = { aiCall: "loan classification", vendor: "gpt", at: Date.now() };
110
+ let trace = mintEternalTrace({ payload: minimalPayload, secret: S_ETR });
111
+ const roots = [
112
+ { id: "user-laptop", kind: "local_disk", locator: "/home/user/.mneme", jurisdictionTag: "TH" },
113
+ { id: "user-github", kind: "git_repo", locator: "github.com/user/audit-trail", jurisdictionTag: "US" },
114
+ ];
115
+ for (const r of roots) {
116
+ const pin = mintPinReceipt({ trace, root: r, secret: S_ETR });
117
+ trace = attachPin({ trace, pin, secret: S_ETR });
118
+ }
119
+ // VENDOR DEATH = OpenAI shuts down. Our roots are independent.
120
+ const survival = computeSurvivalScore({ trace, roots });
121
+ const vendorDeath = survival.scenarioBreakdown.find((s) => s.name === "vendor_death");
122
+ expect(vendorDeath?.survived).toBe(true); // OUR data is independent
123
+ expect(vendorDeath?.remainingRoots).toBe(2); // both roots survive
124
+ });
125
+ it("FAIRNESS FAIL: vendor with disparate impact is BLOCKED + recorded in APOSTILLE", () => {
126
+ const commit = commitToDecisionFunction({ vendor: "shady-vendor", modelHash: "h", decisionLogicHash: "l", secret: S_ZK });
127
+ const batch = generateSwapTests({ attribute: "race", baseInput: {}, count: 10, secret: S_ZK });
128
+ // Vendor returns DIFFERENT decisions when race swapped → disparate impact
129
+ const responses = batch.tests.map((t) => ({
130
+ testId: t.testId,
131
+ decisionOnBase: "approve",
132
+ decisionOnSwapped: t.swappedValue === "asian" ? "approve" : "deny",
133
+ }));
134
+ const verdict = verifyInvariance({ commitment: commit, batch, responses, secret: S_ZK });
135
+ expect(verdict.verdict).toBe("FAIL");
136
+ const cert = mintFairnessCertificate({ verdict, commitment: commit, secret: S_ZK });
137
+ expect(cert.controlsSatisfied.length).toBe(0); // FAIL = no compliance claim
138
+ // APOSTILLE records the block
139
+ const r = mintReceipt({
140
+ vendor: "shady-vendor", modelVersion: "v1",
141
+ outcomeClass: "blocked_by_guard",
142
+ vaccinesTriggered: ["fairness_disparate_impact_race"],
143
+ note: `fairnessCertFAIL=${cert.certificateId}`,
144
+ tsMs: 1_700_000_000_000, secret: S_APO,
145
+ });
146
+ expect(r.controls.EU_AI_ACT).toContain("Art.9"); // risk management triggered
147
+ expect(r.controls.ISO_27001).toContain("A.5.7"); // threat intelligence triggered
148
+ });
149
+ });
150
+ //# sourceMappingURL=v1934_integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v1934_integration.test.js","sourceRoot":"","sources":["../../src/cosmic/v1934_integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=eternity.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eternity.test.d.ts","sourceRoot":"","sources":["../../src/eternity/eternity.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,177 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { mintEternalTrace, verifyEternalTrace, mintPinReceipt, verifyPinReceipt, attachPin, computeSurvivalScore, mintSurvivalCertificate, verifySurvivalCertificate, resolveTrace, computeEternityStats, formatEternityLine, DEFAULT_SURVIVAL_SCENARIOS, ETERNITY_TUNABLES, } from "./index.js";
3
+ const SECRET = "eternity-test-29";
4
+ const ROOTS = [
5
+ { id: "local-1", kind: "local_disk", locator: "/home/.mneme", reliability30d: 0.99, jurisdictionTag: "TH" },
6
+ { id: "git-1", kind: "git_repo", locator: "github.com/user/repo", reliability30d: 0.97, jurisdictionTag: "US" },
7
+ { id: "ipfs-1", kind: "ipfs_node", locator: "QmHash", reliability30d: 0.85, jurisdictionTag: "EU" },
8
+ { id: "s3-1", kind: "s3_bucket", locator: "s3://bucket/key", reliability30d: 0.999, jurisdictionTag: "US" },
9
+ { id: "qr-1", kind: "printed_qr", locator: "binder-page-1", reliability30d: 1.0, jurisdictionTag: "TH" },
10
+ ];
11
+ describe("v2.19.34 ETERNITY -- mint + verify content-addressed trace", () => {
12
+ it("mintEternalTrace produces sha256 contentAddress + HMAC sig", () => {
13
+ const t = mintEternalTrace({ payload: { foo: "bar" }, mintedAtMs: 1, secret: SECRET });
14
+ expect(t.contentAddress).toMatch(/^[0-9a-f]{64}$/);
15
+ expect(t.sig).toMatch(/^[0-9a-f]{64}$/);
16
+ expect(verifyEternalTrace(t, SECRET)).toBe(true);
17
+ });
18
+ it("CONTENT-ADDRESSED DEDUP: identical payload → identical contentAddress", () => {
19
+ const t1 = mintEternalTrace({ payload: { x: 1, y: 2 }, mintedAtMs: 100, secret: SECRET });
20
+ const t2 = mintEternalTrace({ payload: { y: 2, x: 1 }, mintedAtMs: 200, secret: SECRET });
21
+ // Canonical JSON sorts keys → same hash
22
+ expect(t1.contentAddress).toBe(t2.contentAddress);
23
+ });
24
+ it("verifyEternalTrace rejects payload tamper", () => {
25
+ const t = mintEternalTrace({ payload: { x: 1 }, secret: SECRET });
26
+ const tampered = { ...t, payload: { x: 999 } };
27
+ expect(verifyEternalTrace(tampered, SECRET)).toBe(false);
28
+ });
29
+ it("verifyEternalTrace rejects forged sig", () => {
30
+ const t = mintEternalTrace({ payload: { x: 1 }, secret: SECRET });
31
+ const tampered = { ...t, sig: "f".repeat(64) };
32
+ expect(verifyEternalTrace(tampered, SECRET)).toBe(false);
33
+ });
34
+ });
35
+ describe("v2.19.34 ETERNITY -- pin receipts", () => {
36
+ it("mintPinReceipt + verifyPinReceipt", () => {
37
+ const t = mintEternalTrace({ payload: { x: 1 }, secret: SECRET });
38
+ const p = mintPinReceipt({ trace: t, root: ROOTS[0], secret: SECRET });
39
+ expect(verifyPinReceipt(p, SECRET)).toBe(true);
40
+ });
41
+ it("attachPin appends if content addresses match", () => {
42
+ const t = mintEternalTrace({ payload: { x: 1 }, secret: SECRET });
43
+ const p = mintPinReceipt({ trace: t, root: ROOTS[0], secret: SECRET });
44
+ const after = attachPin({ trace: t, pin: p, secret: SECRET });
45
+ expect(after.pinReceipts.length).toBe(1);
46
+ });
47
+ it("attachPin REJECTS mismatched contentAddress", () => {
48
+ const t1 = mintEternalTrace({ payload: { a: 1 }, secret: SECRET });
49
+ const t2 = mintEternalTrace({ payload: { b: 2 }, secret: SECRET });
50
+ const p = mintPinReceipt({ trace: t2, root: ROOTS[0], secret: SECRET });
51
+ const after = attachPin({ trace: t1, pin: p, secret: SECRET });
52
+ expect(after.pinReceipts.length).toBe(0);
53
+ });
54
+ it("attachPin DEDUPES same rootId", () => {
55
+ const t = mintEternalTrace({ payload: { x: 1 }, secret: SECRET });
56
+ const p = mintPinReceipt({ trace: t, root: ROOTS[0], secret: SECRET });
57
+ let after = attachPin({ trace: t, pin: p, secret: SECRET });
58
+ after = attachPin({ trace: after, pin: p, secret: SECRET });
59
+ expect(after.pinReceipts.length).toBe(1);
60
+ });
61
+ });
62
+ describe("v2.19.34 ETERNITY -- SURVIVAL SCORE", () => {
63
+ it("9 default scenarios shipped", () => {
64
+ expect(DEFAULT_SURVIVAL_SCENARIOS.length).toBeGreaterThanOrEqual(5);
65
+ expect(ETERNITY_TUNABLES.DEFAULT_SCENARIOS_COUNT).toBe(DEFAULT_SURVIVAL_SCENARIOS.length);
66
+ });
67
+ it("0-pin trace survives 0% of scenarios", () => {
68
+ const t = mintEternalTrace({ payload: { x: 1 }, secret: SECRET });
69
+ const s = computeSurvivalScore({ trace: t, roots: ROOTS });
70
+ expect(s.scenariosSurvived).toBeLessThan(s.totalScenarios);
71
+ });
72
+ it("HIGHLY-PINNED trace survives more scenarios", () => {
73
+ let t = mintEternalTrace({ payload: { x: 1 }, secret: SECRET });
74
+ for (const root of ROOTS) {
75
+ const pin = mintPinReceipt({ trace: t, root, secret: SECRET });
76
+ t = attachPin({ trace: t, pin, secret: SECRET });
77
+ }
78
+ const s = computeSurvivalScore({ trace: t, roots: ROOTS });
79
+ expect(s.survivalPct).toBeGreaterThan(50);
80
+ expect(s.rootDiversity).toBe(5);
81
+ expect(s.jurisdictionDiversity).toBe(3);
82
+ });
83
+ it("VENDOR DEATH scenario: trace survives because Mneme roots are local, not vendor's", () => {
84
+ let t = mintEternalTrace({ payload: { x: 1 }, secret: SECRET });
85
+ const pin = mintPinReceipt({ trace: t, root: ROOTS[0], secret: SECRET });
86
+ t = attachPin({ trace: t, pin, secret: SECRET });
87
+ const s = computeSurvivalScore({ trace: t, roots: ROOTS });
88
+ const vendorDeath = s.scenarioBreakdown.find((x) => x.name === "vendor_death");
89
+ expect(vendorDeath?.survived).toBe(true);
90
+ });
91
+ it("TOTAL DIGITAL APOCALYPSE: only printed_qr survives", () => {
92
+ let t = mintEternalTrace({ payload: { x: 1 }, secret: SECRET });
93
+ // Pin to local + qr only
94
+ for (const r of [ROOTS[0], ROOTS[4]]) {
95
+ const pin = mintPinReceipt({ trace: t, root: r, secret: SECRET });
96
+ t = attachPin({ trace: t, pin, secret: SECRET });
97
+ }
98
+ const s = computeSurvivalScore({ trace: t, roots: ROOTS });
99
+ const apocalypse = s.scenarioBreakdown.find((x) => x.name === "total_digital_apocalypse");
100
+ expect(apocalypse?.survived).toBe(true); // because printed_qr is NOT in lost-kinds list
101
+ });
102
+ it("JURISDICTION SEIZURE: US-jurisdiction roots lost, others survive", () => {
103
+ let t = mintEternalTrace({ payload: { x: 1 }, secret: SECRET });
104
+ for (const r of ROOTS) {
105
+ const pin = mintPinReceipt({ trace: t, root: r, secret: SECRET });
106
+ t = attachPin({ trace: t, pin, secret: SECRET });
107
+ }
108
+ const s = computeSurvivalScore({ trace: t, roots: ROOTS });
109
+ const seizure = s.scenarioBreakdown.find((x) => x.name === "jurisdiction_seizure_us");
110
+ expect(seizure?.survived).toBe(true);
111
+ expect(seizure?.remainingRoots).toBe(3); // local-1 TH, ipfs-1 EU, qr-1 TH
112
+ });
113
+ });
114
+ describe("v2.19.34 ETERNITY -- survival certificate", () => {
115
+ it("mintSurvivalCertificate returns cert when surviving root has pin", () => {
116
+ let t = mintEternalTrace({ payload: { x: 1 }, secret: SECRET });
117
+ const pin = mintPinReceipt({ trace: t, root: ROOTS[0], secret: SECRET });
118
+ t = attachPin({ trace: t, pin, secret: SECRET });
119
+ const cert = mintSurvivalCertificate({ trace: t, survivingRootId: "local-1", secret: SECRET });
120
+ expect(cert).not.toBeNull();
121
+ expect(cert.sig).toMatch(/^[0-9a-f]{64}$/);
122
+ expect(verifySurvivalCertificate(cert, SECRET)).toBe(true);
123
+ });
124
+ it("mintSurvivalCertificate returns null when claimed root has no pin", () => {
125
+ const t = mintEternalTrace({ payload: { x: 1 }, secret: SECRET });
126
+ const cert = mintSurvivalCertificate({ trace: t, survivingRootId: "ghost-root", secret: SECRET });
127
+ expect(cert).toBeNull();
128
+ });
129
+ it("verifySurvivalCertificate rejects tampered cert", () => {
130
+ let t = mintEternalTrace({ payload: { x: 1 }, secret: SECRET });
131
+ const pin = mintPinReceipt({ trace: t, root: ROOTS[0], secret: SECRET });
132
+ t = attachPin({ trace: t, pin, secret: SECRET });
133
+ const cert = mintSurvivalCertificate({ trace: t, survivingRootId: "local-1", secret: SECRET });
134
+ const tampered = { ...cert, survivingRootId: "evil" };
135
+ expect(verifySurvivalCertificate(tampered, SECRET)).toBe(false);
136
+ });
137
+ });
138
+ describe("v2.19.34 ETERNITY -- resolveTrace", () => {
139
+ it("reports pinned vs not-pinned roots", () => {
140
+ let t = mintEternalTrace({ payload: { x: 1 }, secret: SECRET });
141
+ const pin = mintPinReceipt({ trace: t, root: ROOTS[0], secret: SECRET });
142
+ t = attachPin({ trace: t, pin, secret: SECRET });
143
+ const r = resolveTrace({ trace: t, roots: ROOTS });
144
+ expect(r.found).toBe(true);
145
+ expect(r.pinnedAtRootIds).toContain("local-1");
146
+ expect(r.notPinnedAtRootIds.length).toBe(4);
147
+ });
148
+ });
149
+ describe("v2.19.34 ETERNITY -- 25,000 FUZZ ITERATIONS", () => {
150
+ it("25,000 random mint + pin + survival never crash", () => {
151
+ const N = 25_000;
152
+ const traces = [];
153
+ for (let i = 0; i < N; i++) {
154
+ let t = mintEternalTrace({ payload: { i, x: Math.random() }, secret: SECRET });
155
+ // Random pin to 1-3 roots
156
+ const pinCount = 1 + (i % 3);
157
+ for (let j = 0; j < pinCount; j++) {
158
+ const root = ROOTS[(i + j) % ROOTS.length];
159
+ const pin = mintPinReceipt({ trace: t, root, secret: SECRET });
160
+ t = attachPin({ trace: t, pin, secret: SECRET });
161
+ }
162
+ expect(verifyEternalTrace(t, SECRET)).toBe(true);
163
+ traces.push(t);
164
+ }
165
+ const stats = computeEternityStats({ traces, roots: ROOTS });
166
+ expect(stats.totalTraces).toBe(N);
167
+ expect(formatEternityLine(stats)).toContain("ETERNITY");
168
+ }, 60_000);
169
+ it("DEFENSIVE: malformed payloads handled", () => {
170
+ const malformedPayloads = [null, undefined, "string", 42, [], { fn: () => 1 }];
171
+ for (const p of malformedPayloads) {
172
+ const t = mintEternalTrace({ payload: p, secret: SECRET });
173
+ expect(verifyEternalTrace(t, SECRET)).toBe(true);
174
+ }
175
+ });
176
+ });
177
+ //# sourceMappingURL=eternity.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eternity.test.js","sourceRoot":"","sources":["../../src/eternity/eternity.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,EACzB,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC1B,iBAAiB,GAGlB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,GAAG,kBAAkB,CAAC;AAElC,MAAM,KAAK,GAAkB;IAC3B,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE;IAC3G,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE;IAC/G,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE;IACnG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE;IAC3G,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE;CACzG,CAAC;AAEF,QAAQ,CAAC,4DAA4D,EAAE,GAAG,EAAE;IAC1E,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACvF,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACnD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACxC,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1F,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1F,wCAAwC;QACxC,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAiB,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;QAC7D,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAiB,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7D,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACxE,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACxE,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9D,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACnE,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACzE,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACxE,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5D,KAAK,GAAG,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,GAAG,oBAAoB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,IAAI,CAAC,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAChE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/D,CAAC,GAAG,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,CAAC,GAAG,oBAAoB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAC1C,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mFAAmF,EAAE,GAAG,EAAE;QAC3F,IAAI,CAAC,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1E,CAAC,GAAG,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,oBAAoB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;QAC/E,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,IAAI,CAAC,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAChE,yBAAyB;QACzB,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YAClE,CAAC,GAAG,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,CAAC,GAAG,oBAAoB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,0BAA0B,CAAC,CAAC;QAC1F,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,+CAA+C;IAC1F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,IAAI,CAAC,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAChE,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YAClE,CAAC,GAAG,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,CAAC,GAAG,oBAAoB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,yBAAyB,CAAC,CAAC;QACtF,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,iCAAiC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACzD,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,IAAI,CAAC,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1E,CAAC,GAAG,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,uBAAuB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/F,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC5C,MAAM,CAAC,yBAAyB,CAAC,IAAK,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,uBAAuB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAClG,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,IAAI,CAAC,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1E,CAAC,GAAG,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,uBAAuB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAE,CAAC;QAChG,MAAM,QAAQ,GAAG,EAAE,GAAG,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC;QACtD,MAAM,CAAC,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,IAAI,CAAC,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1E,CAAC,GAAG,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,6CAA6C,EAAE,GAAG,EAAE;IAC3D,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,GAAG,MAAM,CAAC;QACjB,MAAM,MAAM,GAAmB,EAAE,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/E,0BAA0B;YAC1B,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAE,CAAC;gBAC5C,MAAM,GAAG,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC/D,CAAC,GAAG,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACnD,CAAC;YACD,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QACD,MAAM,KAAK,GAAG,oBAAoB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC1D,CAAC,EAAE,MAAM,CAAC,CAAC;IAEX,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,iBAAiB,GAAc,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1F,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAA4B,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACtF,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}