@intutic/shared-types 2.2.0 → 2.4.0

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 (202) hide show
  1. package/dist/anomaly.d.ts +6 -10
  2. package/dist/anomaly.d.ts.map +1 -1
  3. package/dist/anomaly.js +0 -2
  4. package/dist/anomaly.js.map +1 -1
  5. package/dist/api-contracts.d.ts +1 -1
  6. package/dist/api-contracts.js +1 -1
  7. package/dist/attenuation.d.ts +1 -1
  8. package/dist/attenuation.js +1 -1
  9. package/dist/auth.d.ts +116 -9
  10. package/dist/auth.d.ts.map +1 -1
  11. package/dist/auth.js +20 -5
  12. package/dist/auth.js.map +1 -1
  13. package/dist/billing.d.ts +1 -1
  14. package/dist/billing.js +1 -1
  15. package/dist/cloudProbe.d.ts +54 -0
  16. package/dist/cloudProbe.d.ts.map +1 -0
  17. package/dist/cloudProbe.js +254 -0
  18. package/dist/cloudProbe.js.map +1 -0
  19. package/dist/destructiveSql.d.ts +48 -0
  20. package/dist/destructiveSql.d.ts.map +1 -0
  21. package/dist/destructiveSql.js +43 -0
  22. package/dist/destructiveSql.js.map +1 -0
  23. package/dist/devInventory.d.ts +120 -0
  24. package/dist/devInventory.d.ts.map +1 -0
  25. package/dist/devInventory.js +80 -0
  26. package/dist/devInventory.js.map +1 -0
  27. package/dist/enums.d.ts +66 -21
  28. package/dist/enums.d.ts.map +1 -1
  29. package/dist/enums.js +55 -31
  30. package/dist/enums.js.map +1 -1
  31. package/dist/errors.js +3 -3
  32. package/dist/errors.js.map +1 -1
  33. package/dist/finops.d.ts +52 -2
  34. package/dist/finops.d.ts.map +1 -1
  35. package/dist/finops.js +15 -1
  36. package/dist/finops.js.map +1 -1
  37. package/dist/gateDecisions.d.ts +18 -0
  38. package/dist/gateDecisions.d.ts.map +1 -0
  39. package/dist/gateDecisions.js +20 -0
  40. package/dist/gateDecisions.js.map +1 -0
  41. package/dist/gateIdentity.d.ts +23 -0
  42. package/dist/gateIdentity.d.ts.map +1 -0
  43. package/dist/gateIdentity.js +32 -0
  44. package/dist/gateIdentity.js.map +1 -0
  45. package/dist/gateKind.d.ts +172 -0
  46. package/dist/gateKind.d.ts.map +1 -0
  47. package/dist/gateKind.js +160 -0
  48. package/dist/gateKind.js.map +1 -0
  49. package/dist/gateLimits.d.ts +170 -0
  50. package/dist/gateLimits.d.ts.map +1 -0
  51. package/dist/gateLimits.js +96 -0
  52. package/dist/gateLimits.js.map +1 -0
  53. package/dist/gitRemote.d.ts +17 -0
  54. package/dist/gitRemote.d.ts.map +1 -0
  55. package/dist/gitRemote.js +71 -0
  56. package/dist/gitRemote.js.map +1 -0
  57. package/dist/governanceCoverage.d.ts +1 -1
  58. package/dist/governanceCoverage.js +1 -1
  59. package/dist/guardrailIr.d.ts +9 -9
  60. package/dist/guardrailIr.d.ts.map +1 -1
  61. package/dist/guardrailIr.js +3 -3
  62. package/dist/guardrailIr.js.map +1 -1
  63. package/dist/guardrailRender.d.ts +1 -1
  64. package/dist/guardrailRender.js +1 -1
  65. package/dist/harnessRules.d.ts +74 -0
  66. package/dist/harnessRules.d.ts.map +1 -0
  67. package/dist/harnessRules.js +142 -0
  68. package/dist/harnessRules.js.map +1 -0
  69. package/dist/holdMessages.d.ts +25 -0
  70. package/dist/holdMessages.d.ts.map +1 -0
  71. package/dist/holdMessages.js +34 -0
  72. package/dist/holdMessages.js.map +1 -0
  73. package/dist/identity.d.ts +1 -1
  74. package/dist/identity.js +2 -2
  75. package/dist/identity.js.map +1 -1
  76. package/dist/index.d.ts +42 -9
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +161 -10
  79. package/dist/index.js.map +1 -1
  80. package/dist/intelligence.d.ts +1 -1
  81. package/dist/mcpBudgets.d.ts +191 -0
  82. package/dist/mcpBudgets.d.ts.map +1 -0
  83. package/dist/mcpBudgets.js +144 -0
  84. package/dist/mcpBudgets.js.map +1 -0
  85. package/dist/mcpRegistryRecord.d.ts +143 -0
  86. package/dist/mcpRegistryRecord.d.ts.map +1 -0
  87. package/dist/mcpRegistryRecord.js +229 -0
  88. package/dist/mcpRegistryRecord.js.map +1 -0
  89. package/dist/mcpToolRisk.d.ts +82 -0
  90. package/dist/mcpToolRisk.d.ts.map +1 -0
  91. package/dist/mcpToolRisk.js +334 -0
  92. package/dist/mcpToolRisk.js.map +1 -0
  93. package/dist/modelCatalog.d.ts +2 -2
  94. package/dist/modelCatalog.generated.js +1 -1
  95. package/dist/modelCatalog.generated.js.map +1 -1
  96. package/dist/modelCatalog.js +2 -2
  97. package/dist/notifications.d.ts +24 -151
  98. package/dist/notifications.d.ts.map +1 -1
  99. package/dist/notifications.js +266 -1
  100. package/dist/notifications.js.map +1 -1
  101. package/dist/phrases.d.ts +87 -0
  102. package/dist/phrases.d.ts.map +1 -0
  103. package/dist/phrases.js +241 -0
  104. package/dist/phrases.js.map +1 -0
  105. package/dist/piiDetectors.d.ts +97 -0
  106. package/dist/piiDetectors.d.ts.map +1 -0
  107. package/dist/piiDetectors.js +96 -0
  108. package/dist/piiDetectors.js.map +1 -0
  109. package/dist/piiDetectors.json +71 -0
  110. package/dist/policy.d.ts +1 -1
  111. package/dist/policy.js +1 -1
  112. package/dist/policyGuardrails.d.ts +127 -10
  113. package/dist/policyGuardrails.d.ts.map +1 -1
  114. package/dist/policyGuardrails.js +59 -6
  115. package/dist/policyGuardrails.js.map +1 -1
  116. package/dist/posturePresets.js +1 -1
  117. package/dist/posturePresets.js.map +1 -1
  118. package/dist/providerVerification.d.ts +36 -10
  119. package/dist/providerVerification.d.ts.map +1 -1
  120. package/dist/providerVerification.js +80 -20
  121. package/dist/providerVerification.js.map +1 -1
  122. package/dist/providers.d.ts +54 -17
  123. package/dist/providers.d.ts.map +1 -1
  124. package/dist/providers.js +135 -26
  125. package/dist/providers.js.map +1 -1
  126. package/dist/regoBuiltins.d.ts +42 -0
  127. package/dist/regoBuiltins.d.ts.map +1 -0
  128. package/dist/regoBuiltins.js +732 -0
  129. package/dist/regoBuiltins.js.map +1 -0
  130. package/dist/regoRules.d.ts +105 -0
  131. package/dist/regoRules.d.ts.map +1 -0
  132. package/dist/regoRules.js +407 -0
  133. package/dist/regoRules.js.map +1 -0
  134. package/dist/ruleLoadFailures.d.ts +15 -0
  135. package/dist/ruleLoadFailures.d.ts.map +1 -0
  136. package/dist/ruleLoadFailures.js +26 -0
  137. package/dist/ruleLoadFailures.js.map +1 -0
  138. package/dist/scriptScan.d.ts +5 -5
  139. package/dist/scriptScan.js +3 -3
  140. package/dist/sequence.d.ts +52 -0
  141. package/dist/sequence.d.ts.map +1 -0
  142. package/dist/sequence.js +127 -0
  143. package/dist/sequence.js.map +1 -0
  144. package/dist/session.d.ts +1 -1
  145. package/dist/session.js +1 -1
  146. package/dist/skillScan.d.ts +3 -3
  147. package/dist/skillScan.d.ts.map +1 -1
  148. package/dist/skillScan.js +26 -4
  149. package/dist/skillScan.js.map +1 -1
  150. package/dist/sop.d.ts +5 -5
  151. package/dist/sop.js +2 -2
  152. package/dist/sourceProviders.d.ts +1 -8
  153. package/dist/sourceProviders.d.ts.map +1 -1
  154. package/dist/sourceProviders.js +2 -9
  155. package/dist/sourceProviders.js.map +1 -1
  156. package/dist/spendBudgets.d.ts +122 -0
  157. package/dist/spendBudgets.d.ts.map +1 -0
  158. package/dist/spendBudgets.js +92 -0
  159. package/dist/spendBudgets.js.map +1 -0
  160. package/dist/ssoGroupClearance.d.ts +18 -2
  161. package/dist/ssoGroupClearance.d.ts.map +1 -1
  162. package/dist/ssoGroupClearance.js +43 -4
  163. package/dist/ssoGroupClearance.js.map +1 -1
  164. package/dist/sync.d.ts +0 -1
  165. package/dist/sync.d.ts.map +1 -1
  166. package/dist/sync.js +0 -1
  167. package/dist/sync.js.map +1 -1
  168. package/dist/taskManagement.d.ts +0 -2
  169. package/dist/taskManagement.d.ts.map +1 -1
  170. package/dist/taskManagement.js +0 -2
  171. package/dist/taskManagement.js.map +1 -1
  172. package/dist/toolPoison.d.ts +33 -0
  173. package/dist/toolPoison.d.ts.map +1 -0
  174. package/dist/toolPoison.js +85 -0
  175. package/dist/toolPoison.js.map +1 -0
  176. package/dist/upstreamRetry.d.ts +121 -0
  177. package/dist/upstreamRetry.d.ts.map +1 -0
  178. package/dist/upstreamRetry.js +90 -0
  179. package/dist/upstreamRetry.js.map +1 -0
  180. package/dist/usage.d.ts +186 -0
  181. package/dist/usage.d.ts.map +1 -1
  182. package/dist/wasmBinary.d.ts +25 -0
  183. package/dist/wasmBinary.d.ts.map +1 -0
  184. package/dist/wasmBinary.js +111 -0
  185. package/dist/wasmBinary.js.map +1 -0
  186. package/dist/wasmFuel.d.ts +52 -0
  187. package/dist/wasmFuel.d.ts.map +1 -0
  188. package/dist/wasmFuel.js +320 -0
  189. package/dist/wasmFuel.js.map +1 -0
  190. package/dist/wasmMemoryCap.d.ts +21 -0
  191. package/dist/wasmMemoryCap.d.ts.map +1 -0
  192. package/dist/wasmMemoryCap.js +58 -0
  193. package/dist/wasmMemoryCap.js.map +1 -0
  194. package/dist/wasmRuleDescriptor.d.ts +43 -0
  195. package/dist/wasmRuleDescriptor.d.ts.map +1 -0
  196. package/dist/wasmRuleDescriptor.js +65 -0
  197. package/dist/wasmRuleDescriptor.js.map +1 -0
  198. package/dist/workspaceSettings.d.ts +95 -17
  199. package/dist/workspaceSettings.d.ts.map +1 -1
  200. package/dist/workspaceSettings.js +2 -1
  201. package/dist/workspaceSettings.js.map +1 -1
  202. package/package.json +2 -2
@@ -0,0 +1,320 @@
1
+ "use strict";
2
+ /**
3
+ * Instruction budget for WASM rules: the stand-in for Wasmtime fuel, which
4
+ * the Rust proxy sets to 1,000,000 per evaluation (`limits.rs`), wherever a
5
+ * rule runs on V8 — the MCP proxy, and `intutic rules test`, `policy test`
6
+ * and `policy install`, so a rule that runs out in a proxy runs out there.
7
+ *
8
+ * V8 has no metering hook, so the rule's own code is rewritten at load to
9
+ * count. A new mutable i32 global starts at the budget, and a charge is
10
+ * inserted at every function entry and every loop header: subtract the number
11
+ * of instructions that can run before the next charge point, and trap
12
+ * (`unreachable`) once the counter goes negative. Code between two charge
13
+ * points is straight-line apart from forward branches, so each charge is an
14
+ * upper bound on what it pays for, and the budget bounds the instructions the
15
+ * rule actually executes. Structural instructions (`block`, `loop`, `end`,
16
+ * `else`, `nop`, `drop`, `return`, `unreachable`) cost nothing, roughly as
17
+ * Wasmtime prices them.
18
+ *
19
+ * The global is exported as `FUEL_EXPORT` so the worker can tell a trap caused
20
+ * by the budget from any other trap. Each evaluation instantiates the module
21
+ * afresh, so the budget is per evaluation, like a Wasmtime `Store`.
22
+ *
23
+ * The decoder knows the MVP instruction set plus the extensions compilers
24
+ * emit by default (sign extension, saturating truncation, bulk memory,
25
+ * reference types, multi-value, tail calls, SIMD). A module using anything
26
+ * else (exceptions, GC, threads) is refused at load rather than run unmetered.
27
+ */
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.FUEL_EXPORT = exports.REGO_FUEL_BUDGET = exports.DEFAULT_FUEL_BUDGET = void 0;
30
+ exports.meterFuel = meterFuel;
31
+ const wasmBinary_js_1 = require("./wasmBinary.js");
32
+ /** `runner.rs`: `store.set_fuel(1_000_000)`. */
33
+ exports.DEFAULT_FUEL_BUDGET = 1_000_000;
34
+ /**
35
+ * A Rego rule's budget: three times the Rust proxy's 100,000,000
36
+ * (`limits::REGO`), because this meter counts differently.
37
+ *
38
+ * It charges each straight-line run in full at its entry, branches skipped or
39
+ * not, and an OPA build is mostly short runs with early exits: on the largest
40
+ * input (a 64 KB command) the destructive-shell and production-deploy examples
41
+ * count 74,000,000 here against 21,000,000 under Wasmtime, and the
42
+ * deny-writes and conformance policies about 8,000,000. The budget is four
43
+ * times the largest, so a heavier policy on the largest input still fits, and
44
+ * a rule that does not fit is stopped deterministically, whatever the load.
45
+ * Using it all up takes at most 350 ms idle and 4.4 s on a loaded machine;
46
+ * the deadline (`REGO_EVALUATE_TIMEOUT_MS`) is set above that.
47
+ */
48
+ exports.REGO_FUEL_BUDGET = 300_000_000;
49
+ /** The export the worker reads to tell budget exhaustion from other traps. */
50
+ exports.FUEL_EXPORT = '__intutic_fuel';
51
+ const SECTION = { import: 2, global: 6, export: 7, code: 10 };
52
+ const EXPORT_KIND_GLOBAL = 0x03;
53
+ const VALTYPES = new Set([0x7f, 0x7e, 0x7d, 0x7c, 0x7b, 0x70, 0x6f]);
54
+ const ZERO_COST = new Set([0x00, 0x01, 0x02, 0x03, 0x05, 0x0b, 0x0f, 0x1a]);
55
+ const OP = { block: 0x02, loop: 0x03, if: 0x04, end: 0x0b };
56
+ function unsupported(op) {
57
+ return new Error(`WASM rule uses instruction ${op}, which the instruction budget cannot meter; rebuild it without exceptions, GC or threads`);
58
+ }
59
+ function skipBlockType(b, p) {
60
+ const t = b[p];
61
+ if (t === 0x40 || VALTYPES.has(t))
62
+ return p + 1;
63
+ // A type index, as a non-negative s33: a first byte below 0x40, or one
64
+ // with the continuation bit set.
65
+ if (t < 0x40 || (t & 0x80) !== 0)
66
+ return (0, wasmBinary_js_1.skipLeb)(b, p);
67
+ throw unsupported(`with block type 0x${t.toString(16)}`);
68
+ }
69
+ function skipMemarg(b, p) {
70
+ const align = (0, wasmBinary_js_1.readU32)(b, p);
71
+ p = align.next;
72
+ if (align.value & 0x40)
73
+ p = (0, wasmBinary_js_1.skipLeb)(b, p); // multi-memory index
74
+ return (0, wasmBinary_js_1.skipLeb)(b, p);
75
+ }
76
+ function skipN(b, p, n) {
77
+ for (let i = 0; i < n; i++)
78
+ p = (0, wasmBinary_js_1.skipLeb)(b, p);
79
+ return p;
80
+ }
81
+ /** Offset just past the instruction at `p`, immediates included. */
82
+ function nextInstruction(b, p) {
83
+ const op = b[p];
84
+ const q = p + 1;
85
+ if (op <= 0x01 || op === 0x05 || op === 0x0b || op === 0x0f || op === 0x1a || op === 0x1b || op === 0xd1)
86
+ return q;
87
+ if (op >= 0x45 && op <= 0xc4)
88
+ return q; // numeric, sign extension
89
+ switch (op) {
90
+ case 0x02:
91
+ case 0x03:
92
+ case 0x04: return skipBlockType(b, q);
93
+ case 0x0c:
94
+ case 0x0d:
95
+ case 0x10:
96
+ case 0x12:
97
+ case 0xd2: return (0, wasmBinary_js_1.skipLeb)(b, q);
98
+ case 0x0e: {
99
+ const n = (0, wasmBinary_js_1.readU32)(b, q);
100
+ return skipN(b, n.next, n.value + 1);
101
+ }
102
+ case 0x11:
103
+ case 0x13: return skipN(b, q, 2);
104
+ case 0x1c: {
105
+ const n = (0, wasmBinary_js_1.readU32)(b, q);
106
+ for (let i = 0; i < n.value; i++)
107
+ if (!VALTYPES.has(b[n.next + i]))
108
+ throw unsupported('select with a non-numeric type');
109
+ return n.next + n.value;
110
+ }
111
+ case 0x3f:
112
+ case 0x40:
113
+ case 0x41:
114
+ case 0x42: return (0, wasmBinary_js_1.skipLeb)(b, q);
115
+ case 0x43: return q + 4;
116
+ case 0x44: return q + 8;
117
+ case 0xd0: {
118
+ if (b[q] !== 0x70 && b[q] !== 0x6f)
119
+ throw unsupported('ref.null with a GC heap type');
120
+ return q + 1;
121
+ }
122
+ case 0xfc: return nextPrefixedFc(b, q);
123
+ case 0xfd: return nextSimd(b, q);
124
+ }
125
+ if (op >= 0x20 && op <= 0x26)
126
+ return (0, wasmBinary_js_1.skipLeb)(b, q); // locals, globals, table.get/set
127
+ if (op >= 0x28 && op <= 0x3e)
128
+ return skipMemarg(b, q); // loads and stores
129
+ throw unsupported(`0x${op.toString(16)}`);
130
+ }
131
+ function nextPrefixedFc(b, q) {
132
+ const sub = (0, wasmBinary_js_1.readU32)(b, q);
133
+ const p = sub.next;
134
+ if (sub.value <= 7)
135
+ return p; // saturating truncation
136
+ switch (sub.value) {
137
+ case 8:
138
+ case 10:
139
+ case 12:
140
+ case 14: return skipN(b, p, 2); // memory.init, memory.copy, table.init, table.copy
141
+ case 9:
142
+ case 11:
143
+ case 13:
144
+ case 15:
145
+ case 16:
146
+ case 17: return (0, wasmBinary_js_1.skipLeb)(b, p);
147
+ }
148
+ throw unsupported(`0xfc ${sub.value}`);
149
+ }
150
+ function nextSimd(b, q) {
151
+ const sub = (0, wasmBinary_js_1.readU32)(b, q);
152
+ const p = sub.next;
153
+ const op = sub.value;
154
+ if (op <= 11 || op === 92 || op === 93)
155
+ return skipMemarg(b, p); // v128 loads/stores, load*_zero
156
+ if (op === 12 || op === 13)
157
+ return p + 16; // v128.const, i8x16.shuffle
158
+ if (op >= 21 && op <= 34)
159
+ return p + 1; // extract/replace lane
160
+ if (op >= 84 && op <= 91)
161
+ return skipMemarg(b, p) + 1; // load/store lane
162
+ if (op <= 0x113)
163
+ return p; // everything else in SIMD and relaxed SIMD has no immediate
164
+ throw unsupported(`0xfd ${op}`);
165
+ }
166
+ function chargeSequence(cost, global) {
167
+ const g = (0, wasmBinary_js_1.writeU32)(global);
168
+ return [
169
+ 0x23, ...g, 0x41, ...(0, wasmBinary_js_1.writeS32)(cost), 0x6b, 0x24, ...g, // fuel -= cost
170
+ 0x23, ...g, 0x41, 0x00, 0x48, 0x04, 0x40, 0x00, 0x0b, // if (fuel < 0) unreachable
171
+ ];
172
+ }
173
+ /** One function body with a charge at its entry and at every loop header. */
174
+ function meterBody(body, global) {
175
+ let p = 0;
176
+ const groups = (0, wasmBinary_js_1.readU32)(body, p);
177
+ p = groups.next;
178
+ for (let i = 0; i < groups.value; i++) {
179
+ p = (0, wasmBinary_js_1.readU32)(body, p).next;
180
+ if (!VALTYPES.has(body[p]))
181
+ throw unsupported('a local of a GC type');
182
+ p += 1;
183
+ }
184
+ const regions = [{ at: p, cost: 0 }];
185
+ const closed = [];
186
+ const blocks = []; // true for a loop
187
+ let ended = false;
188
+ while (p < body.length) {
189
+ if (ended)
190
+ throw (0, wasmBinary_js_1.malformed)('instructions after a function body ends');
191
+ const op = body[p];
192
+ const next = nextInstruction(body, p);
193
+ if (!ZERO_COST.has(op))
194
+ regions[regions.length - 1].cost += 1;
195
+ if (op === OP.block || op === OP.if)
196
+ blocks.push(false);
197
+ else if (op === OP.loop) {
198
+ blocks.push(true);
199
+ regions.push({ at: next, cost: 0 });
200
+ }
201
+ else if (op === OP.end) {
202
+ if (blocks.length === 0) {
203
+ closed.push(regions.pop());
204
+ ended = true;
205
+ }
206
+ else if (blocks.pop()) {
207
+ closed.push(regions.pop());
208
+ }
209
+ }
210
+ p = next;
211
+ }
212
+ if (!ended || regions.length !== 0)
213
+ throw (0, wasmBinary_js_1.malformed)('unbalanced function body');
214
+ closed.sort((a, b) => a.at - b.at);
215
+ const parts = [];
216
+ let cursor = 0;
217
+ for (const r of closed) {
218
+ parts.push(body.subarray(cursor, r.at), Uint8Array.from(chargeSequence(Math.max(1, r.cost), global)));
219
+ cursor = r.at;
220
+ }
221
+ parts.push(body.subarray(cursor));
222
+ return (0, wasmBinary_js_1.concat)(parts);
223
+ }
224
+ function skipLimits(b, p) {
225
+ const flags = b[p];
226
+ p = (0, wasmBinary_js_1.skipLeb)(b, p + 1);
227
+ return flags & 0x01 ? (0, wasmBinary_js_1.skipLeb)(b, p) : p;
228
+ }
229
+ function countImportedGlobals(s) {
230
+ if (!s)
231
+ return 0;
232
+ const b = s.payload;
233
+ const n = (0, wasmBinary_js_1.readU32)(b, 0);
234
+ let p = n.next;
235
+ let globals = 0;
236
+ for (let i = 0; i < n.value; i++) {
237
+ for (let name = 0; name < 2; name++) {
238
+ const len = (0, wasmBinary_js_1.readU32)(b, p);
239
+ p = len.next + len.value;
240
+ }
241
+ const kind = b[p++];
242
+ if (kind === 0x00 || kind === 0x04)
243
+ p = (0, wasmBinary_js_1.skipLeb)(b, kind === 0x04 ? p + 1 : p);
244
+ else if (kind === 0x01) {
245
+ if (b[p] !== 0x70 && b[p] !== 0x6f)
246
+ throw unsupported('an imported table of a GC type');
247
+ p = skipLimits(b, p + 1);
248
+ }
249
+ else if (kind === 0x02)
250
+ p = skipLimits(b, p);
251
+ else if (kind === 0x03) {
252
+ if (!VALTYPES.has(b[p]))
253
+ throw unsupported('an imported global of a GC type');
254
+ p += 2;
255
+ globals += 1;
256
+ }
257
+ else
258
+ throw (0, wasmBinary_js_1.malformed)(`import kind ${kind}`);
259
+ }
260
+ return globals;
261
+ }
262
+ function exportNames(s) {
263
+ if (!s)
264
+ return [];
265
+ const b = s.payload;
266
+ const n = (0, wasmBinary_js_1.readU32)(b, 0);
267
+ let p = n.next;
268
+ const names = [];
269
+ for (let i = 0; i < n.value; i++) {
270
+ const len = (0, wasmBinary_js_1.readU32)(b, p);
271
+ names.push(new TextDecoder().decode(b.subarray(len.next, len.next + len.value)));
272
+ p = (0, wasmBinary_js_1.readU32)(b, len.next + len.value + 1).next;
273
+ }
274
+ return names;
275
+ }
276
+ /** Prepend-count helper: a vector section with `extra` appended. */
277
+ function appendToVector(s, extra) {
278
+ if (!s)
279
+ return Uint8Array.from([0x01, ...extra]);
280
+ const n = (0, wasmBinary_js_1.readU32)(s.payload, 0);
281
+ return (0, wasmBinary_js_1.concat)([Uint8Array.from((0, wasmBinary_js_1.writeU32)(n.value + 1)), s.payload.subarray(n.next), Uint8Array.from(extra)]);
282
+ }
283
+ /**
284
+ * The module with every function metered against `budget` instructions per
285
+ * instantiation, and the counter exported as `FUEL_EXPORT`. Throws for a
286
+ * module the decoder cannot meter.
287
+ */
288
+ function meterFuel(bytes, budget) {
289
+ const sections = (0, wasmBinary_js_1.readSections)(bytes);
290
+ const find = (id) => sections.find((s) => s.id === id);
291
+ const code = find(SECTION.code);
292
+ if (!code)
293
+ return bytes;
294
+ const exportSection = find(SECTION.export);
295
+ if (exportNames(exportSection).includes(exports.FUEL_EXPORT)) {
296
+ throw new Error(`WASM rule already exports "${exports.FUEL_EXPORT}", which the instruction budget reserves`);
297
+ }
298
+ const globals = find(SECTION.global);
299
+ const fuelGlobal = countImportedGlobals(find(SECTION.import)) + (globals ? (0, wasmBinary_js_1.readU32)(globals.payload, 0).value : 0);
300
+ const count = (0, wasmBinary_js_1.readU32)(code.payload, 0);
301
+ const bodies = [Uint8Array.from((0, wasmBinary_js_1.writeU32)(count.value))];
302
+ let p = count.next;
303
+ for (let i = 0; i < count.value; i++) {
304
+ const size = (0, wasmBinary_js_1.readU32)(code.payload, p);
305
+ const end = size.next + size.value;
306
+ if (end > code.payload.length)
307
+ throw (0, wasmBinary_js_1.malformed)('function body runs past the code section');
308
+ const metered = meterBody(code.payload.subarray(size.next, end), fuelGlobal);
309
+ bodies.push(Uint8Array.from((0, wasmBinary_js_1.writeU32)(metered.length)), metered);
310
+ p = end;
311
+ }
312
+ if (p !== code.payload.length)
313
+ throw (0, wasmBinary_js_1.malformed)('code section length mismatch');
314
+ (0, wasmBinary_js_1.putSection)(sections, SECTION.global, appendToVector(globals, [0x7f, 0x01, 0x41, ...(0, wasmBinary_js_1.writeS32)(budget), 0x0b]));
315
+ const name = [...new TextEncoder().encode(exports.FUEL_EXPORT)];
316
+ (0, wasmBinary_js_1.putSection)(sections, SECTION.export, appendToVector(exportSection, [...(0, wasmBinary_js_1.writeU32)(name.length), ...name, EXPORT_KIND_GLOBAL, ...(0, wasmBinary_js_1.writeU32)(fuelGlobal)]));
317
+ (0, wasmBinary_js_1.putSection)(sections, SECTION.code, (0, wasmBinary_js_1.concat)(bodies));
318
+ return (0, wasmBinary_js_1.assembleModule)(bytes, sections);
319
+ }
320
+ //# sourceMappingURL=wasmFuel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasmFuel.js","sourceRoot":"","sources":["../src/wasmFuel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Bound a rule's linear memory before V8 ever compiles it.
3
+ *
4
+ * V8 has no grow hook, but it enforces the maximum a module DECLARES for its
5
+ * own memory: past it, `memory.grow` returns -1 instead of growing. So the
6
+ * memory section is rewritten to declare a maximum no larger than the ceiling,
7
+ * and the engine does the rest, the same guarantee `runner.rs` gets from
8
+ * Wasmtime's `StoreLimits`. A rule that asks for more is refused at load.
9
+ *
10
+ * Only the memory section (id 5) is touched; every other byte is copied
11
+ * through. Shared and 64-bit memories are refused rather than rewritten: the
12
+ * runner never supplies either, and their limits encode differently.
13
+ */
14
+ /** One WebAssembly page. */
15
+ export declare const WASM_PAGE_BYTES: number;
16
+ /**
17
+ * The module with every memory declaring `max <= maxPages`. Throws when a
18
+ * memory's initial size is already over the ceiling, or it is shared/64-bit.
19
+ */
20
+ export declare function capDeclaredMemory(bytes: Uint8Array<ArrayBuffer>, maxPages: number): Uint8Array<ArrayBuffer>;
21
+ //# sourceMappingURL=wasmMemoryCap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasmMemoryCap.d.ts","sourceRoot":"","sources":["../src/wasmMemoryCap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,4BAA4B;AAC5B,eAAO,MAAM,eAAe,QAAY,CAAA;AAIxC;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CA+B3G"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ /**
3
+ * Bound a rule's linear memory before V8 ever compiles it.
4
+ *
5
+ * V8 has no grow hook, but it enforces the maximum a module DECLARES for its
6
+ * own memory: past it, `memory.grow` returns -1 instead of growing. So the
7
+ * memory section is rewritten to declare a maximum no larger than the ceiling,
8
+ * and the engine does the rest, the same guarantee `runner.rs` gets from
9
+ * Wasmtime's `StoreLimits`. A rule that asks for more is refused at load.
10
+ *
11
+ * Only the memory section (id 5) is touched; every other byte is copied
12
+ * through. Shared and 64-bit memories are refused rather than rewritten: the
13
+ * runner never supplies either, and their limits encode differently.
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.WASM_PAGE_BYTES = void 0;
17
+ exports.capDeclaredMemory = capDeclaredMemory;
18
+ const wasmBinary_js_1 = require("./wasmBinary.js");
19
+ /** One WebAssembly page. */
20
+ exports.WASM_PAGE_BYTES = 64 * 1024;
21
+ const MEMORY_SECTION_ID = 5;
22
+ /**
23
+ * The module with every memory declaring `max <= maxPages`. Throws when a
24
+ * memory's initial size is already over the ceiling, or it is shared/64-bit.
25
+ */
26
+ function capDeclaredMemory(bytes, maxPages) {
27
+ const sections = (0, wasmBinary_js_1.readSections)(bytes);
28
+ const memory = sections.find((s) => s.id === MEMORY_SECTION_ID);
29
+ if (!memory)
30
+ return bytes;
31
+ const b = memory.payload;
32
+ const count = (0, wasmBinary_js_1.readU32)(b, 0);
33
+ let p = count.next;
34
+ const payload = (0, wasmBinary_js_1.writeU32)(count.value);
35
+ for (let i = 0; i < count.value; i++) {
36
+ const flags = b[p];
37
+ if (flags !== 0x00 && flags !== 0x01) {
38
+ throw new Error(`WASM rule declares a shared or 64-bit memory (limits flag 0x${(flags ?? 0).toString(16)}), which the runner does not support`);
39
+ }
40
+ const min = (0, wasmBinary_js_1.readU32)(b, p + 1);
41
+ p = min.next;
42
+ let max = maxPages;
43
+ if (flags === 0x01) {
44
+ const declared = (0, wasmBinary_js_1.readU32)(b, p);
45
+ p = declared.next;
46
+ max = Math.min(declared.value, maxPages);
47
+ }
48
+ if (min.value > maxPages) {
49
+ throw new Error(`WASM rule declares ${min.value * exports.WASM_PAGE_BYTES} bytes of initial memory, over the ${maxPages * exports.WASM_PAGE_BYTES}-byte ceiling`);
50
+ }
51
+ payload.push(0x01, ...(0, wasmBinary_js_1.writeU32)(min.value), ...(0, wasmBinary_js_1.writeU32)(max));
52
+ }
53
+ if (p !== b.length)
54
+ throw (0, wasmBinary_js_1.malformed)('memory section length mismatch');
55
+ (0, wasmBinary_js_1.putSection)(sections, MEMORY_SECTION_ID, Uint8Array.from(payload));
56
+ return (0, wasmBinary_js_1.assembleModule)(bytes, sections);
57
+ }
58
+ //# sourceMappingURL=wasmMemoryCap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasmMemoryCap.js","sourceRoot":"","sources":["../src/wasmMemoryCap.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;AAaH,8CA+BC;AA1CD,mDAAwG;AAExG,4BAA4B;AACf,QAAA,eAAe,GAAG,EAAE,GAAG,IAAI,CAAA;AAExC,MAAM,iBAAiB,GAAG,CAAC,CAAA;AAE3B;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,KAA8B,EAAE,QAAgB;IAChF,MAAM,QAAQ,GAAG,IAAA,4BAAY,EAAC,KAAK,CAAC,CAAA;IACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,iBAAiB,CAAC,CAAA;IAC/D,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAEzB,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAA;IACxB,MAAM,KAAK,GAAG,IAAA,uBAAO,EAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3B,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAA;IAClB,MAAM,OAAO,GAAG,IAAA,wBAAQ,EAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QAClB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,sCAAsC,CAAC,CAAA;QACjJ,CAAC;QACD,MAAM,GAAG,GAAG,IAAA,uBAAO,EAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QAC7B,CAAC,GAAG,GAAG,CAAC,IAAI,CAAA;QACZ,IAAI,GAAG,GAAG,QAAQ,CAAA;QAClB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,IAAA,uBAAO,EAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAC9B,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAA;YACjB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QAC1C,CAAC;QACD,IAAI,GAAG,CAAC,KAAK,GAAG,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,CAAC,KAAK,GAAG,uBAAe,sCAAsC,QAAQ,GAAG,uBAAe,eAAe,CAAC,CAAA;QACnJ,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAA,wBAAQ,EAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,IAAA,wBAAQ,EAAC,GAAG,CAAC,CAAC,CAAA;IAC9D,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM;QAAE,MAAM,IAAA,yBAAS,EAAC,gCAAgC,CAAC,CAAA;IAErE,IAAA,0BAAU,EAAC,QAAQ,EAAE,iBAAiB,EAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IACjE,OAAO,IAAA,8BAAc,EAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;AACxC,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * The descriptor of a custom rule uploaded to the control plane — one shape
3
+ * for every proxy that enforces it.
4
+ *
5
+ * The control plane publishes the workspace's active rules as a list of these:
6
+ * to Valkey for the LLM proxy (`wasm:plugins:{workspaceId}`, read by
7
+ * `packages/proxy/src/wasm/registry.rs` as `WasmPluginDescriptor`), and as
8
+ * `wasmRules` on the MCP proxy's policy responses (`GET /api/v1/sop/rules`,
9
+ * `GET /api/v1/policy/resolve`). The binary is fetched separately, by the
10
+ * SHA-256 the descriptor names, and checked against it before it loads.
11
+ *
12
+ * {@link parseWasmRuleDescriptors} reads the list the way the Rust proxy's
13
+ * serde does: one malformed entry makes the whole list unreadable, and a
14
+ * proxy keeps the rules it already enforces rather than applying part of a
15
+ * list — dropping the entry would silently stop enforcing that rule.
16
+ *
17
+ * @module
18
+ */
19
+ /** `ENFORCE` decides calls; `SHADOW` is evaluated and reported, and never changes one. */
20
+ export type WasmRuleMode = 'ENFORCE' | 'SHADOW';
21
+ export interface WasmRuleDescriptor {
22
+ /** The control plane's rule id (`wasm_…`), the id both proxies report the rule by. */
23
+ ruleId: string;
24
+ name: string;
25
+ /** Lowercase hex SHA-256 of the binary; the binary is fetched and verified by it. */
26
+ sha256: string;
27
+ /** Ascending: lower runs first. Local rules default to 100. */
28
+ priority: number;
29
+ mode: WasmRuleMode;
30
+ }
31
+ export type WasmRuleDescriptorsParse = {
32
+ ok: true;
33
+ rules: WasmRuleDescriptor[];
34
+ } | {
35
+ ok: false;
36
+ reason: string;
37
+ };
38
+ /**
39
+ * Reads a descriptor list. Anything but an array of well-formed descriptors is
40
+ * unreadable, with the first problem as the reason.
41
+ */
42
+ export declare function parseWasmRuleDescriptors(value: unknown): WasmRuleDescriptorsParse;
43
+ //# sourceMappingURL=wasmRuleDescriptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasmRuleDescriptor.d.ts","sourceRoot":"","sources":["../src/wasmRuleDescriptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,0FAA0F;AAC1F,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAA;AAE/C,MAAM,WAAW,kBAAkB;IACjC,sFAAsF;IACtF,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,qFAAqF;IACrF,MAAM,EAAE,MAAM,CAAA;IACd,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,YAAY,CAAA;CACnB;AAED,MAAM,MAAM,wBAAwB,GAChC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,kBAAkB,EAAE,CAAA;CAAE,GACzC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAWjC;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,wBAAwB,CAsBjF"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ /**
3
+ * The descriptor of a custom rule uploaded to the control plane — one shape
4
+ * for every proxy that enforces it.
5
+ *
6
+ * The control plane publishes the workspace's active rules as a list of these:
7
+ * to Valkey for the LLM proxy (`wasm:plugins:{workspaceId}`, read by
8
+ * `packages/proxy/src/wasm/registry.rs` as `WasmPluginDescriptor`), and as
9
+ * `wasmRules` on the MCP proxy's policy responses (`GET /api/v1/sop/rules`,
10
+ * `GET /api/v1/policy/resolve`). The binary is fetched separately, by the
11
+ * SHA-256 the descriptor names, and checked against it before it loads.
12
+ *
13
+ * {@link parseWasmRuleDescriptors} reads the list the way the Rust proxy's
14
+ * serde does: one malformed entry makes the whole list unreadable, and a
15
+ * proxy keeps the rules it already enforces rather than applying part of a
16
+ * list — dropping the entry would silently stop enforcing that rule.
17
+ *
18
+ * @module
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.parseWasmRuleDescriptors = parseWasmRuleDescriptors;
22
+ function parseMode(value) {
23
+ // Absent on a descriptor written before modes existed, which must keep
24
+ // enforcing — the same default `registry.rs` gives `RuleMode`.
25
+ if (value === undefined)
26
+ return 'ENFORCE';
27
+ if (value === 'ENFORCE' || value === 'enforce')
28
+ return 'ENFORCE';
29
+ if (value === 'SHADOW' || value === 'shadow')
30
+ return 'SHADOW';
31
+ return undefined;
32
+ }
33
+ /**
34
+ * Reads a descriptor list. Anything but an array of well-formed descriptors is
35
+ * unreadable, with the first problem as the reason.
36
+ */
37
+ function parseWasmRuleDescriptors(value) {
38
+ if (!Array.isArray(value))
39
+ return { ok: false, reason: 'the rule list is not an array' };
40
+ const rules = [];
41
+ for (const [index, entry] of value.entries()) {
42
+ if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) {
43
+ return { ok: false, reason: `entry ${index} is not an object` };
44
+ }
45
+ const e = entry;
46
+ const { ruleId, name, sha256, priority } = e;
47
+ if (typeof ruleId !== 'string' || ruleId.length === 0)
48
+ return { ok: false, reason: `entry ${index} has no ruleId` };
49
+ if (typeof name !== 'string')
50
+ return { ok: false, reason: `rule ${ruleId} has no name` };
51
+ // Any string, as serde reads it: a hash that names no binary is refused
52
+ // per rule when the binary is fetched, with an incident, not here.
53
+ if (typeof sha256 !== 'string')
54
+ return { ok: false, reason: `rule ${ruleId} has no SHA-256` };
55
+ if (typeof priority !== 'number' || !Number.isInteger(priority) || priority < 0) {
56
+ return { ok: false, reason: `rule ${ruleId} has no priority` };
57
+ }
58
+ const mode = parseMode(e['mode']);
59
+ if (!mode)
60
+ return { ok: false, reason: `rule ${ruleId} has an unknown mode` };
61
+ rules.push({ ruleId, name, sha256, priority, mode });
62
+ }
63
+ return { ok: true, rules };
64
+ }
65
+ //# sourceMappingURL=wasmRuleDescriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasmRuleDescriptor.js","sourceRoot":"","sources":["../src/wasmRuleDescriptor.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;AAiCH,4DAsBC;AAnCD,SAAS,SAAS,CAAC,KAAc;IAC/B,uEAAuE;IACvE,+DAA+D;IAC/D,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACzC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAChE,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAC7D,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;GAGG;AACH,SAAgB,wBAAwB,CAAC,KAAc;IACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAA;IACxF,MAAM,KAAK,GAAyB,EAAE,CAAA;IACtC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACxE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,KAAK,mBAAmB,EAAE,CAAA;QACjE,CAAC;QACD,MAAM,CAAC,GAAG,KAAgC,CAAA;QAC1C,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAA;QAC5C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,KAAK,gBAAgB,EAAE,CAAA;QACnH,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,MAAM,cAAc,EAAE,CAAA;QACxF,wEAAwE;QACxE,mEAAmE;QACnE,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,MAAM,iBAAiB,EAAE,CAAA;QAC7F,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YAChF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,MAAM,kBAAkB,EAAE,CAAA;QAChE,CAAC;QACD,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;QACjC,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,MAAM,sBAAsB,EAAE,CAAA;QAC7E,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IACtD,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;AAC5B,CAAC"}