loopforge 3.7.1 → 3.8.2
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.
- package/README.md +84 -130
- package/dist/audit.d.ts +53 -1
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js +106 -22
- package/dist/audit.js.map +1 -1
- package/dist/canonical-state.d.ts +52 -67
- package/dist/canonical-state.d.ts.map +1 -1
- package/dist/canonical-state.js +134 -147
- package/dist/canonical-state.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +103 -4
- package/dist/cli.js.map +1 -1
- package/dist/cognitive-facts.d.ts +13 -0
- package/dist/cognitive-facts.d.ts.map +1 -1
- package/dist/cognitive-facts.js +28 -13
- package/dist/cognitive-facts.js.map +1 -1
- package/dist/committed-round.d.ts +103 -21
- package/dist/committed-round.d.ts.map +1 -1
- package/dist/committed-round.js +188 -45
- package/dist/committed-round.js.map +1 -1
- package/dist/contract-items.d.ts +55 -0
- package/dist/contract-items.d.ts.map +1 -0
- package/dist/contract-items.js +180 -0
- package/dist/contract-items.js.map +1 -0
- package/dist/enforcement-gate.d.ts +20 -2
- package/dist/enforcement-gate.d.ts.map +1 -1
- package/dist/enforcement-gate.js +197 -386
- package/dist/enforcement-gate.js.map +1 -1
- package/dist/engine.d.ts +1 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +53 -38
- package/dist/engine.js.map +1 -1
- package/dist/evidence-claims.d.ts +4 -4
- package/dist/evidence-claims.d.ts.map +1 -1
- package/dist/evidence-claims.js +16 -14
- package/dist/evidence-claims.js.map +1 -1
- package/dist/evidence-provider.d.ts +85 -89
- package/dist/evidence-provider.d.ts.map +1 -1
- package/dist/evidence-provider.js +328 -184
- package/dist/evidence-provider.js.map +1 -1
- package/dist/explain.d.ts +76 -0
- package/dist/explain.d.ts.map +1 -0
- package/dist/explain.js +127 -0
- package/dist/explain.js.map +1 -0
- package/dist/generate-schema.js +152 -16
- package/dist/generate-schema.js.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/loop-compiler.d.ts +40 -53
- package/dist/loop-compiler.d.ts.map +1 -1
- package/dist/loop-compiler.js +229 -553
- package/dist/loop-compiler.js.map +1 -1
- package/dist/loop-extras-parser.d.ts +0 -1
- package/dist/loop-extras-parser.d.ts.map +1 -1
- package/dist/loop-extras-parser.js +0 -4
- package/dist/loop-extras-parser.js.map +1 -1
- package/dist/loop-projection.d.ts.map +1 -1
- package/dist/loop-projection.js +3 -1
- package/dist/loop-projection.js.map +1 -1
- package/dist/mcp/round-lifecycle.d.ts +30 -21
- package/dist/mcp/round-lifecycle.d.ts.map +1 -1
- package/dist/mcp/round-lifecycle.js +47 -103
- package/dist/mcp/round-lifecycle.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +51 -7
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/session.d.ts +39 -23
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +148 -163
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/submission-boundary.d.ts +89 -0
- package/dist/mcp/submission-boundary.d.ts.map +1 -0
- package/dist/mcp/submission-boundary.js +203 -0
- package/dist/mcp/submission-boundary.js.map +1 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +249 -128
- package/dist/mcp/tools.js.map +1 -1
- package/dist/policy-metrics.js +2 -2
- package/dist/policy-metrics.js.map +1 -1
- package/dist/policy.d.ts +55 -93
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +149 -38
- package/dist/policy.js.map +1 -1
- package/dist/prompt-assembler.d.ts +1 -32
- package/dist/prompt-assembler.d.ts.map +1 -1
- package/dist/prompt-assembler.js +282 -435
- package/dist/prompt-assembler.js.map +1 -1
- package/dist/prompt-policy.d.ts +1 -4
- package/dist/prompt-policy.d.ts.map +1 -1
- package/dist/prompt-policy.js +6 -7
- package/dist/prompt-policy.js.map +1 -1
- package/dist/protocol.d.ts +365 -142
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +21 -66
- package/dist/protocol.js.map +1 -1
- package/dist/replay.js +2 -2
- package/dist/replay.js.map +1 -1
- package/dist/round-contract.d.ts +69 -57
- package/dist/round-contract.d.ts.map +1 -1
- package/dist/round-contract.js +104 -64
- package/dist/round-contract.js.map +1 -1
- package/dist/round-coordinator.d.ts +36 -16
- package/dist/round-coordinator.d.ts.map +1 -1
- package/dist/round-coordinator.js +166 -102
- package/dist/round-coordinator.js.map +1 -1
- package/dist/round-driver.d.ts +3 -5
- package/dist/round-driver.d.ts.map +1 -1
- package/dist/round-driver.js +0 -1
- package/dist/round-driver.js.map +1 -1
- package/dist/round-facts.d.ts +96 -0
- package/dist/round-facts.d.ts.map +1 -0
- package/dist/round-facts.js +216 -0
- package/dist/round-facts.js.map +1 -0
- package/dist/round-transaction.d.ts +19 -9
- package/dist/round-transaction.d.ts.map +1 -1
- package/dist/round-transaction.js +90 -22
- package/dist/round-transaction.js.map +1 -1
- package/dist/self-eval.d.ts +87 -9
- package/dist/self-eval.d.ts.map +1 -1
- package/dist/self-eval.js +396 -27
- package/dist/self-eval.js.map +1 -1
- package/dist/subgoal-state.d.ts +77 -0
- package/dist/subgoal-state.d.ts.map +1 -0
- package/dist/subgoal-state.js +198 -0
- package/dist/subgoal-state.js.map +1 -0
- package/dist/token-utils.d.ts +52 -19
- package/dist/token-utils.d.ts.map +1 -1
- package/dist/token-utils.js +83 -72
- package/dist/token-utils.js.map +1 -1
- package/dist/verification-gate.d.ts +14 -31
- package/dist/verification-gate.d.ts.map +1 -1
- package/dist/verification-gate.js +178 -496
- package/dist/verification-gate.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/workspace.d.ts +9 -0
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +17 -0
- package/dist/workspace.js.map +1 -1
- package/loop_policy.json +59 -83
- package/package.json +67 -67
- package/skills/perception/SKILL.md +218 -204
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/** Round Contract item status — the v3.8 verification skeleton.
|
|
2
|
+
*
|
|
3
|
+
* A contract declares ITEMS; each item binds evidence commands. The agent
|
|
4
|
+
* may only CLAIM `met` / `remaining`; whether an item is `verified`,
|
|
5
|
+
* `contradicted`, or `insufficient` is derived here from committed
|
|
6
|
+
* observations and the in-flight round. Nothing in this module writes state:
|
|
7
|
+
* it is a pure function of the committed round views, the current report,
|
|
8
|
+
* the current observations, and policy.
|
|
9
|
+
*/
|
|
10
|
+
const EMPTY_VIEW = {
|
|
11
|
+
contractId: "",
|
|
12
|
+
closure: "open",
|
|
13
|
+
closed_at_round: null,
|
|
14
|
+
items: [],
|
|
15
|
+
verifiedCount: 0,
|
|
16
|
+
contradictedCount: 0,
|
|
17
|
+
insufficientCount: 0,
|
|
18
|
+
};
|
|
19
|
+
function itemClaims(item, slices) {
|
|
20
|
+
const claims = [];
|
|
21
|
+
for (const slice of slices) {
|
|
22
|
+
for (const claim of slice.report?.contract_item_claims ?? []) {
|
|
23
|
+
if (claim.item_id === item.id)
|
|
24
|
+
claims.push({ round: slice.round, outcome: claim.outcome });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return claims;
|
|
28
|
+
}
|
|
29
|
+
/** The round in which the item was last claimed `met` (null when the latest
|
|
30
|
+
* claim is `remaining` or there is none). */
|
|
31
|
+
function metClaimRound(claims) {
|
|
32
|
+
const last = claims[claims.length - 1];
|
|
33
|
+
return last && last.outcome === "met" ? last.round : null;
|
|
34
|
+
}
|
|
35
|
+
function evaluateCommand(commandId, declaredHash, slices, fromRound, configured) {
|
|
36
|
+
if (!configured) {
|
|
37
|
+
return {
|
|
38
|
+
verdict: "insufficient",
|
|
39
|
+
reason: `command "${commandId}" is no longer configured/enabled — cannot observe it`,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
// v3.8.1: the LATEST observation at or after the claim decides, so the
|
|
43
|
+
// closing round's evidence is the one consulted. Scanning forward let an
|
|
44
|
+
// early pass outlive a later failure: the item stayed `verified`, its
|
|
45
|
+
// contract closed, and a success stop could reach `completed` in a round
|
|
46
|
+
// whose bound command the machine had just observed FAILING.
|
|
47
|
+
for (const slice of [...slices].reverse()) {
|
|
48
|
+
if (slice.round < fromRound)
|
|
49
|
+
continue;
|
|
50
|
+
const observation = slice.observations.find((item) => item.kind === "command" &&
|
|
51
|
+
item.phase === "after" &&
|
|
52
|
+
item.data.commandId === commandId);
|
|
53
|
+
if (!observation || observation.kind !== "command")
|
|
54
|
+
continue;
|
|
55
|
+
const data = observation.data;
|
|
56
|
+
if (declaredHash && data.configHash !== declaredHash) {
|
|
57
|
+
return {
|
|
58
|
+
verdict: "insufficient",
|
|
59
|
+
reason: `command "${commandId}" was reconfigured after declaration (round ${slice.round})`,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
const changed = new Set(slice.observations
|
|
63
|
+
.filter((item) => item.providerId === "git")
|
|
64
|
+
.flatMap((item) => item.files));
|
|
65
|
+
if (observation.status === "passed") {
|
|
66
|
+
// A malformed observation must not crash the derivation the compile
|
|
67
|
+
// path, the projection, the coordinator, explain and audit all share:
|
|
68
|
+
// no entrypoint list means the tamper check simply has nothing to
|
|
69
|
+
// compare, the same posture as a command with no entrypoint files.
|
|
70
|
+
const entrypoints = Array.isArray(data.entrypointFiles) ? data.entrypointFiles : [];
|
|
71
|
+
if (changed.size > 0 && entrypoints.some((file) => changed.has(file))) {
|
|
72
|
+
return {
|
|
73
|
+
verdict: "contradicted",
|
|
74
|
+
reason: `command "${commandId}" passed but its entrypoint changed in round ${slice.round}`,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return { verdict: "verified", reason: "" };
|
|
78
|
+
}
|
|
79
|
+
if (observation.status === "failed") {
|
|
80
|
+
return {
|
|
81
|
+
verdict: "contradicted",
|
|
82
|
+
reason: `command "${commandId}" failed in round ${slice.round}` +
|
|
83
|
+
(typeof data.exitCode === "number" ? ` (exit ${data.exitCode})` : ""),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
verdict: "insufficient",
|
|
88
|
+
reason: `command "${commandId}" observed ${observation.status} in round ${slice.round}`,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
verdict: "insufficient",
|
|
93
|
+
reason: `command "${commandId}" produced no after-phase observation since round ${fromRound}`,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/** v3.8: Derive every item's status plus the contract's closure. */
|
|
97
|
+
export function deriveContractItemStatuses(input) {
|
|
98
|
+
const contract = input.contract;
|
|
99
|
+
if (!contract)
|
|
100
|
+
return EMPTY_VIEW;
|
|
101
|
+
const slices = [
|
|
102
|
+
...input.rounds.map((round) => ({
|
|
103
|
+
round: round.round,
|
|
104
|
+
report: round.executionReport,
|
|
105
|
+
observations: round.observationDelta,
|
|
106
|
+
outcome: round.outcome,
|
|
107
|
+
})),
|
|
108
|
+
{
|
|
109
|
+
round: input.currentRound,
|
|
110
|
+
report: input.currentReport,
|
|
111
|
+
observations: input.currentObservations,
|
|
112
|
+
outcome: input.currentOutcome ?? null,
|
|
113
|
+
},
|
|
114
|
+
].filter((slice) => slice.round < input.currentRound || slice.round === input.currentRound);
|
|
115
|
+
const enabledCommands = new Set(input.commands.filter((command) => command.enabled).map((command) => command.name));
|
|
116
|
+
const items = contract.items.map((item) => {
|
|
117
|
+
const claims = itemClaims(item, slices);
|
|
118
|
+
const metRound = metClaimRound(claims);
|
|
119
|
+
if (metRound === null) {
|
|
120
|
+
return {
|
|
121
|
+
itemId: item.id,
|
|
122
|
+
description: item.description,
|
|
123
|
+
status: "pending",
|
|
124
|
+
status_at_round: null,
|
|
125
|
+
history: [],
|
|
126
|
+
reasons: [],
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
const verdicts = item.verify_with.map((commandId) => evaluateCommand(commandId, contract.config_hash_by_command[commandId], slices, metRound, enabledCommands.has(commandId)));
|
|
130
|
+
const reasons = verdicts.map((verdict) => verdict.reason).filter(Boolean);
|
|
131
|
+
let status;
|
|
132
|
+
if (verdicts.some((verdict) => verdict.verdict === "contradicted")) {
|
|
133
|
+
status = "contradicted";
|
|
134
|
+
}
|
|
135
|
+
else if (verdicts.length > 0 && verdicts.every((verdict) => verdict.verdict === "verified")) {
|
|
136
|
+
status = "verified";
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
status = "insufficient";
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
itemId: item.id,
|
|
143
|
+
description: item.description,
|
|
144
|
+
status,
|
|
145
|
+
status_at_round: metRound,
|
|
146
|
+
history: [{ round: metRound, status, refs: item.verify_with }],
|
|
147
|
+
reasons,
|
|
148
|
+
};
|
|
149
|
+
});
|
|
150
|
+
const verifiedCount = items.filter((item) => item.status === "verified").length;
|
|
151
|
+
const contradictedCount = items.filter((item) => item.status === "contradicted").length;
|
|
152
|
+
const insufficientCount = items.filter((item) => item.status === "insufficient").length;
|
|
153
|
+
const committingRound = slices[slices.length - 1];
|
|
154
|
+
const blocked = committingRound?.outcome === "blocked";
|
|
155
|
+
const allVerified = items.length > 0 && verifiedCount === items.length;
|
|
156
|
+
const closure = allVerified ? "verified" : blocked ? "blocked" : "open";
|
|
157
|
+
return {
|
|
158
|
+
contractId: contract.id,
|
|
159
|
+
closure,
|
|
160
|
+
closed_at_round: closure === "open" ? null : committingRound?.round ?? null,
|
|
161
|
+
items,
|
|
162
|
+
verifiedCount,
|
|
163
|
+
contradictedCount,
|
|
164
|
+
insufficientCount,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
/** v3.8: The round-level verification posture. */
|
|
168
|
+
export function roundVerificationStatus(view, report) {
|
|
169
|
+
if (view.contradictedCount > 0)
|
|
170
|
+
return "contradicted";
|
|
171
|
+
if (view.insufficientCount > 0)
|
|
172
|
+
return "insufficient";
|
|
173
|
+
// A success claim with no machine-backed item at all is insufficient too.
|
|
174
|
+
const claims = report?.contract_item_claims ?? [];
|
|
175
|
+
if (claims.some((claim) => claim.outcome === "met") && view.verifiedCount === 0) {
|
|
176
|
+
return "insufficient";
|
|
177
|
+
}
|
|
178
|
+
return "trusted";
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=contract-items.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract-items.js","sourceRoot":"","sources":["../src/contract-items.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,6 +43,26 @@ export interface BacktrackRecoveryFacts {
|
|
|
43
43
|
/** v3.7.1: Falsified assumptions collected from the failed rounds. */
|
|
44
44
|
wrongAssumptions: string[];
|
|
45
45
|
}
|
|
46
|
+
/** v3.8.1: the ONE Recovery Brief renderer.
|
|
47
|
+
*
|
|
48
|
+
* The rollback prompt and the state file's Recent tier used to carry two
|
|
49
|
+
* hand-written copies of these lines — differing in punctuation
|
|
50
|
+
* ("the redo is round N" vs "redo round N") and in whether an approach
|
|
51
|
+
* overflow count was shown at all. Two renderers over one rollback meant the
|
|
52
|
+
* two surfaces could describe the same event differently while both claiming
|
|
53
|
+
* to be derived facts. The facts are supplied by the caller: the coordinator
|
|
54
|
+
* from its live walk, the compile path from `decodeBacktrackRecord` on the
|
|
55
|
+
* committed decision. */
|
|
56
|
+
export declare function recoveryBriefLines(input: {
|
|
57
|
+
target: number;
|
|
58
|
+
triggerRule: string;
|
|
59
|
+
failedRounds: string[] | number[];
|
|
60
|
+
approaches: string[];
|
|
61
|
+
wrongAssumptions: string[];
|
|
62
|
+
recoveryRoundId?: string;
|
|
63
|
+
maxApproaches?: number;
|
|
64
|
+
maxAssumptions?: number;
|
|
65
|
+
}): string[];
|
|
46
66
|
export declare function buildBacktrackPrompt(fromRound: number, toRound: number, triggerRule: string, skippedDiscoveries: string[],
|
|
47
67
|
/** v2.13: Files changed in the skipped rounds (from evidence snapshots).
|
|
48
68
|
* Used to show the agent exactly what needs to be reverted. */
|
|
@@ -56,8 +76,6 @@ recoveryRoundId?: string,
|
|
|
56
76
|
* in-flight attempt only; never rejected payloads. */
|
|
57
77
|
recovery?: BacktrackRecoveryFacts): string;
|
|
58
78
|
export declare function enforceRound(selfEval: SelfEvaluation, verifyResult: VerificationResult, currentRound: number, vaultEntries: VaultEntry[], consecutiveRejections?: number,
|
|
59
|
-
/** v2.12: Current clarification streak for R7 escalation. */
|
|
60
|
-
driftClarificationStreak?: number,
|
|
61
79
|
/** L4 (v3.7.x): which check rejected the PREVIOUS round. The coordinator
|
|
62
80
|
* resets consecutiveRejections to 1 whenever the check changes, so the
|
|
63
81
|
* counter only ever measures one check's streak — this field names that
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enforcement-gate.d.ts","sourceRoot":"","sources":["../src/enforcement-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"enforcement-gate.d.ts","sourceRoot":"","sources":["../src/enforcement-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,eAAe,CAAC;AA0FvB;;iEAEiE;AACjE,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,UAAU,EAAE,EAC1B,QAAQ,EAAE,MAAM,GACf;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAgCxD;AAED;;;sCAGsC;AACtC,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,UAAU,EAAE,GACzB,MAAM,GAAG,IAAI,CAWf;AAED;;;;oDAIoD;AACpD,MAAM,WAAW,sBAAsB;IACrC,sEAAsE;IACtE,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,yEAAyE;IACzE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,sEAAsE;IACtE,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;;;;;;;0BAS0B;AAC1B,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IAClC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,EAAE,CA6BX;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,MAAM,EAAE;AAC5B;gEACgE;AAChE,YAAY,GAAE,MAAM,EAAO;AAC3B;mEACmE;AACnE,OAAO,CAAC,EAAE,MAAM;AAChB,2EAA2E;AAC3E,eAAe,CAAC,EAAE,MAAM;AACxB;uDACuD;AACvD,QAAQ,CAAC,EAAE,sBAAsB,GAChC,MAAM,CAmKR;AAwrBD,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,cAAc,EACxB,YAAY,EAAE,kBAAkB,EAChC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,UAAU,EAAE,EAC1B,qBAAqB,GAAE,MAAU;AACjC;;;;uCAIuC;AACvC,kBAAkB,GAAE,MAAW,GAC9B,iBAAiB,CAoGnB;AAED;;;;;;;;;;;;;;sEAcsE;AACtE,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,iBAAiB,EAChC,iBAAiB,GAAE,gBAAgB,EAAO,GACzC,MAAM,CA6CR"}
|