@peac/protocol 0.10.9 → 0.10.11

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 (45) hide show
  1. package/LICENSE +1 -1
  2. package/dist/discovery.d.ts.map +1 -1
  3. package/dist/index.cjs +2694 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.mjs +2612 -0
  6. package/dist/index.mjs.map +1 -0
  7. package/dist/verification-report.d.ts.map +1 -1
  8. package/dist/verifier-types.d.ts +42 -2
  9. package/dist/verifier-types.d.ts.map +1 -1
  10. package/dist/verify-local.cjs +164 -0
  11. package/dist/verify-local.cjs.map +1 -0
  12. package/dist/verify-local.d.ts +15 -0
  13. package/dist/verify-local.d.ts.map +1 -1
  14. package/dist/verify-local.mjs +160 -0
  15. package/dist/verify-local.mjs.map +1 -0
  16. package/dist/verify.d.ts.map +1 -1
  17. package/package.json +20 -13
  18. package/dist/crypto-utils.js +0 -21
  19. package/dist/crypto-utils.js.map +0 -1
  20. package/dist/discovery.js +0 -405
  21. package/dist/discovery.js.map +0 -1
  22. package/dist/headers.js +0 -110
  23. package/dist/headers.js.map +0 -1
  24. package/dist/index.js +0 -44
  25. package/dist/index.js.map +0 -1
  26. package/dist/issue.js +0 -198
  27. package/dist/issue.js.map +0 -1
  28. package/dist/pointer-fetch.js +0 -305
  29. package/dist/pointer-fetch.js.map +0 -1
  30. package/dist/ssrf-safe-fetch.js +0 -671
  31. package/dist/ssrf-safe-fetch.js.map +0 -1
  32. package/dist/telemetry.js +0 -43
  33. package/dist/telemetry.js.map +0 -1
  34. package/dist/transport-profiles.js +0 -424
  35. package/dist/transport-profiles.js.map +0 -1
  36. package/dist/verification-report.js +0 -322
  37. package/dist/verification-report.js.map +0 -1
  38. package/dist/verifier-core.js +0 -578
  39. package/dist/verifier-core.js.map +0 -1
  40. package/dist/verifier-types.js +0 -161
  41. package/dist/verifier-types.js.map +0 -1
  42. package/dist/verify-local.js +0 -230
  43. package/dist/verify-local.js.map +0 -1
  44. package/dist/verify.js +0 -213
  45. package/dist/verify.js.map +0 -1
@@ -1,322 +0,0 @@
1
- "use strict";
2
- /**
3
- * PEAC Verification Report Builder
4
- *
5
- * Constructs deterministic verification reports per VERIFICATION-REPORT-FORMAT.md.
6
- * Reports are designed to be portable, deterministic, safe, and policy-aware.
7
- *
8
- * @packageDocumentation
9
- */
10
- Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.VerificationReportBuilder = void 0;
12
- exports.createReportBuilder = createReportBuilder;
13
- exports.computeReceiptDigest = computeReceiptDigest;
14
- exports.buildFailureReport = buildFailureReport;
15
- exports.buildSuccessReport = buildSuccessReport;
16
- const crypto_1 = require("@peac/crypto");
17
- const kernel_1 = require("@peac/kernel");
18
- const verifier_types_js_1 = require("./verifier-types.js");
19
- /**
20
- * Verification Report Builder
21
- *
22
- * Builds verification reports with proper check ordering and short-circuit behavior.
23
- * Ensures reports conform to VERIFICATION-REPORT-FORMAT.md requirements.
24
- *
25
- * Shape-stable: Always emits all checks with pass/fail/skip status.
26
- */
27
- class VerificationReportBuilder {
28
- state;
29
- constructor(policy) {
30
- this.state = {
31
- policy,
32
- checks: new Map(),
33
- shortCircuited: false,
34
- };
35
- }
36
- /**
37
- * Set the input descriptor with pre-computed digest
38
- *
39
- * Use this when you've already computed the SHA-256 hash.
40
- *
41
- * @param digestHex - SHA-256 digest as lowercase hex (64 chars)
42
- * @param type - Input type
43
- */
44
- setInputWithDigest(digestHex, type = 'receipt_jws') {
45
- this.state.receiptDigestHex = digestHex;
46
- this.state.input = {
47
- type,
48
- receipt_digest: (0, verifier_types_js_1.createDigest)(digestHex),
49
- };
50
- return this;
51
- }
52
- /**
53
- * Set the input descriptor (async - computes SHA-256)
54
- *
55
- * @param receiptBytes - Raw receipt bytes
56
- * @param type - Input type
57
- */
58
- async setInputAsync(receiptBytes, type = 'receipt_jws') {
59
- const digestHex = await (0, crypto_1.sha256Hex)(receiptBytes);
60
- return this.setInputWithDigest(digestHex, type);
61
- }
62
- /**
63
- * Add a check result
64
- *
65
- * Checks can be added in any order; they will be sorted in build().
66
- * If a previous check failed, subsequent checks should be marked as skip.
67
- */
68
- addCheck(id, status, detail, errorCode) {
69
- const check = { id, status };
70
- if (detail && Object.keys(detail).length > 0) {
71
- check.detail = detail;
72
- }
73
- if (errorCode) {
74
- check.error_code = errorCode;
75
- }
76
- this.state.checks.set(id, check);
77
- // Track short-circuit on failure
78
- if (status === 'fail' && !this.state.shortCircuited) {
79
- this.state.shortCircuited = true;
80
- this.state.failedAtCheck = id;
81
- }
82
- return this;
83
- }
84
- /**
85
- * Add a passing check
86
- */
87
- pass(id, detail) {
88
- return this.addCheck(id, 'pass', detail);
89
- }
90
- /**
91
- * Add a failing check
92
- */
93
- fail(id, errorCode, detail) {
94
- return this.addCheck(id, 'fail', detail, errorCode);
95
- }
96
- /**
97
- * Add a skipped check
98
- */
99
- skip(id, detail) {
100
- return this.addCheck(id, 'skip', detail);
101
- }
102
- /**
103
- * Set the final result
104
- */
105
- setResult(valid, reason, options) {
106
- this.state.result = {
107
- valid,
108
- reason,
109
- severity: (0, verifier_types_js_1.reasonCodeToSeverity)(reason),
110
- receipt_type: options?.receiptType ?? kernel_1.WIRE_TYPE,
111
- ...(options?.issuer && { issuer: options.issuer }),
112
- ...(options?.kid && { kid: options.kid }),
113
- };
114
- return this;
115
- }
116
- /**
117
- * Set success result
118
- */
119
- success(issuer, kid) {
120
- return this.setResult(true, 'ok', { issuer, kid });
121
- }
122
- /**
123
- * Set failure result
124
- */
125
- failure(reason, issuer, kid) {
126
- return this.setResult(false, reason, { issuer, kid });
127
- }
128
- /**
129
- * Add artifacts
130
- */
131
- addArtifact(key, value) {
132
- if (!this.state.artifacts) {
133
- this.state.artifacts = {};
134
- }
135
- this.state.artifacts[key] = value;
136
- return this;
137
- }
138
- /**
139
- * Set metadata (non-deterministic fields)
140
- */
141
- setMeta(meta) {
142
- this.state.meta = meta;
143
- return this;
144
- }
145
- /**
146
- * Add current timestamp to meta
147
- */
148
- addTimestamp() {
149
- if (!this.state.meta) {
150
- this.state.meta = {};
151
- }
152
- this.state.meta.generated_at = new Date().toISOString();
153
- return this;
154
- }
155
- /**
156
- * Build the final report
157
- *
158
- * Ensures all checks are present (shape-stable).
159
- * Missing checks after a failure are marked as 'skip'.
160
- * Missing checks before a failure (or in success) are marked as 'pass'.
161
- */
162
- build() {
163
- // Validate required fields
164
- if (!this.state.input) {
165
- throw new Error('Input is required. Call setInputWithDigest() or setInputAsync() first.');
166
- }
167
- if (!this.state.result) {
168
- throw new Error('Result is required. Call setResult() or success()/failure() first.');
169
- }
170
- // Build shape-stable checks array
171
- const checks = [];
172
- const failedIndex = this.state.failedAtCheck ? verifier_types_js_1.CHECK_IDS.indexOf(this.state.failedAtCheck) : -1;
173
- for (let i = 0; i < verifier_types_js_1.CHECK_IDS.length; i++) {
174
- const checkId = verifier_types_js_1.CHECK_IDS[i];
175
- const existing = this.state.checks.get(checkId);
176
- if (existing) {
177
- checks.push(existing);
178
- }
179
- else if (this.state.shortCircuited && i > failedIndex) {
180
- // After failure, missing checks are skipped
181
- checks.push({ id: checkId, status: 'skip', detail: { reason: 'short_circuit' } });
182
- }
183
- else {
184
- // Before failure or in success, missing checks get default status
185
- // For optional checks like transport.profile_binding, mark as skip
186
- if (checkId === 'transport.profile_binding') {
187
- checks.push({ id: checkId, status: 'skip', detail: { reason: 'not_applicable' } });
188
- }
189
- else {
190
- // This shouldn't happen in well-formed builds - indicates a bug
191
- checks.push({ id: checkId, status: 'skip', detail: { reason: 'not_executed' } });
192
- }
193
- }
194
- }
195
- const report = {
196
- report_version: kernel_1.VERIFICATION_REPORT_VERSION,
197
- input: this.state.input,
198
- policy: this.state.policy,
199
- result: this.state.result,
200
- checks,
201
- };
202
- if (this.state.artifacts && Object.keys(this.state.artifacts).length > 0) {
203
- report.artifacts = this.state.artifacts;
204
- }
205
- if (this.state.meta) {
206
- report.meta = this.state.meta;
207
- }
208
- return report;
209
- }
210
- /**
211
- * Build in deterministic mode (excludes meta and non-deterministic artifacts)
212
- *
213
- * Deterministic mode ensures that the same inputs and policy always produce
214
- * the same report output, regardless of cache state or timing.
215
- *
216
- * Excludes:
217
- * - `meta`: Contains timestamps and verifier info
218
- * - Non-deterministic artifacts: `issuer_jwks_digest` (depends on cache state)
219
- *
220
- * @returns Report without meta and with only deterministic artifacts
221
- */
222
- buildDeterministic() {
223
- const report = this.build();
224
- const { meta: _meta, ...deterministic } = report;
225
- // Filter out non-deterministic artifacts
226
- if (deterministic.artifacts) {
227
- const filteredArtifacts = { ...deterministic.artifacts };
228
- for (const key of verifier_types_js_1.NON_DETERMINISTIC_ARTIFACT_KEYS) {
229
- delete filteredArtifacts[key];
230
- }
231
- // Remove artifacts object if empty after filtering
232
- if (Object.keys(filteredArtifacts).length === 0) {
233
- delete deterministic.artifacts;
234
- }
235
- else {
236
- deterministic.artifacts = filteredArtifacts;
237
- }
238
- }
239
- return deterministic;
240
- }
241
- }
242
- exports.VerificationReportBuilder = VerificationReportBuilder;
243
- /**
244
- * Create a new report builder
245
- */
246
- function createReportBuilder(policy) {
247
- return new VerificationReportBuilder(policy);
248
- }
249
- /**
250
- * Compute receipt digest for report input
251
- *
252
- * @param receiptBytes - Raw receipt bytes (JWS string as UTF-8)
253
- * @returns SHA-256 digest as lowercase hex (64 chars)
254
- */
255
- async function computeReceiptDigest(receiptBytes) {
256
- const bytes = typeof receiptBytes === 'string' ? new TextEncoder().encode(receiptBytes) : receiptBytes;
257
- return (0, crypto_1.sha256Hex)(bytes);
258
- }
259
- /**
260
- * Build a quick failure report without going through all checks
261
- *
262
- * Useful for early failures like receipt_too_large or malformed_receipt
263
- * where most checks are skipped.
264
- */
265
- async function buildFailureReport(policy, receiptBytes, reason, failedCheckId, errorCode, detail, options) {
266
- const bytes = typeof receiptBytes === 'string' ? new TextEncoder().encode(receiptBytes) : receiptBytes;
267
- const digestHex = await (0, crypto_1.sha256Hex)(bytes);
268
- const builder = createReportBuilder(policy)
269
- .setInputWithDigest(digestHex)
270
- .failure(reason, options?.issuer, options?.kid);
271
- // Add passing checks up to the failure point
272
- const failedIndex = verifier_types_js_1.CHECK_IDS.indexOf(failedCheckId);
273
- for (let i = 0; i < verifier_types_js_1.CHECK_IDS.length; i++) {
274
- const checkId = verifier_types_js_1.CHECK_IDS[i];
275
- if (i < failedIndex) {
276
- builder.pass(checkId);
277
- }
278
- else if (i === failedIndex) {
279
- builder.fail(checkId, errorCode ?? (0, verifier_types_js_1.reasonCodeToErrorCode)(reason), detail);
280
- }
281
- // Remaining checks will be auto-skipped by build()
282
- }
283
- if (options?.meta) {
284
- builder.setMeta(options.meta);
285
- }
286
- return builder.build();
287
- }
288
- /**
289
- * Build a success report
290
- */
291
- async function buildSuccessReport(policy, receiptBytes, issuer, kid, checkDetails, options) {
292
- const bytes = typeof receiptBytes === 'string' ? new TextEncoder().encode(receiptBytes) : receiptBytes;
293
- const digestHex = await (0, crypto_1.sha256Hex)(bytes);
294
- const builder = createReportBuilder(policy).setInputWithDigest(digestHex).success(issuer, kid);
295
- // Add all checks as passing (except optional ones)
296
- for (const checkId of verifier_types_js_1.CHECK_IDS) {
297
- // Skip issuer.discovery for offline mode
298
- if (checkId === 'issuer.discovery' && policy.mode === 'offline_only') {
299
- builder.skip(checkId, { reason: 'offline_mode' });
300
- continue;
301
- }
302
- // transport.profile_binding is optional
303
- if (checkId === 'transport.profile_binding') {
304
- if (checkDetails?.[checkId]) {
305
- builder.pass(checkId, checkDetails[checkId]);
306
- }
307
- // Will be marked as skip by build() if not added
308
- continue;
309
- }
310
- builder.pass(checkId, checkDetails?.[checkId]);
311
- }
312
- if (options?.artifacts) {
313
- for (const [key, value] of Object.entries(options.artifacts)) {
314
- builder.addArtifact(key, value);
315
- }
316
- }
317
- if (options?.meta) {
318
- builder.setMeta(options.meta);
319
- }
320
- return builder.build();
321
- }
322
- //# sourceMappingURL=verification-report.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verification-report.js","sourceRoot":"","sources":["../src/verification-report.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAsTH,kDAEC;AAQD,oDAIC;AAQD,gDAsCC;AAKD,gDAgDC;AAraD,yCAAyC;AACzC,yCAAsE;AActE,2DAM6B;AAiB7B;;;;;;;GAOG;AACH,MAAa,yBAAyB;IAC5B,KAAK,CAAqB;IAElC,YAAY,MAAsB;QAChC,IAAI,CAAC,KAAK,GAAG;YACX,MAAM;YACN,MAAM,EAAE,IAAI,GAAG,EAAE;YACjB,cAAc,EAAE,KAAK;SACtB,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,kBAAkB,CAChB,SAAiB,EACjB,OAAuC,aAAa;QAEpD,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,SAAS,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG;YACjB,IAAI;YACJ,cAAc,EAAE,IAAA,gCAAY,EAAC,SAAS,CAAC;SACxC,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CACjB,YAAwB,EACxB,OAAuC,aAAa;QAEpD,MAAM,SAAS,GAAG,MAAM,IAAA,kBAAS,EAAC,YAAY,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CACN,EAAW,EACX,MAAmB,EACnB,MAAgC,EAChC,SAAkB;QAElB,MAAM,KAAK,GAAgB,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;QAC1C,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACxB,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAEjC,iCAAiC;QACjC,IAAI,MAAM,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YACpD,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,EAAE,CAAC;QAChC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,EAAW,EAAE,MAAgC;QAChD,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,EAAW,EAAE,SAAiB,EAAE,MAAgC;QACnE,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,EAAW,EAAE,MAAgC;QAChD,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,SAAS,CACP,KAAc,EACd,MAAkB,EAClB,OAIC;QAED,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG;YAClB,KAAK;YACL,MAAM;YACN,QAAQ,EAAE,IAAA,wCAAoB,EAAC,MAAM,CAAC;YACtC,YAAY,EAAE,OAAO,EAAE,WAAW,IAAI,kBAAS;YAC/C,GAAG,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;YAClD,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAC1C,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,MAAc,EAAE,GAAW;QACjC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,MAAkB,EAAE,MAAe,EAAE,GAAY;QACvD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,GAAW,EAAE,KAAc;QACrC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,IAAsB;QAC5B,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;OAMG;IACH,KAAK;QACH,2BAA2B;QAC3B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;QAC5F,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACxF,CAAC;QAED,kCAAkC;QAClC,MAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,6BAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,6BAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAG,6BAAS,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAEhD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC;iBAAM,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,GAAG,WAAW,EAAE,CAAC;gBACxD,4CAA4C;gBAC5C,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;YACpF,CAAC;iBAAM,CAAC;gBACN,kEAAkE;gBAClE,mEAAmE;gBACnE,IAAI,OAAO,KAAK,2BAA2B,EAAE,CAAC;oBAC5C,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;gBACrF,CAAC;qBAAM,CAAC;oBACN,gEAAgE;oBAChE,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;gBACnF,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAuB;YACjC,cAAc,EAAE,oCAA2B;YAC3C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;YACvB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YACzB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YACzB,MAAM;SACP,CAAC;QAEF,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzE,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAA4C,CAAC;QAC7E,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAChC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;;;;;OAWG;IACH,kBAAkB;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,GAAG,MAAM,CAAC;QAEjD,yCAAyC;QACzC,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;YAC5B,MAAM,iBAAiB,GAAmC,EAAE,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;YACzF,KAAK,MAAM,GAAG,IAAI,mDAA+B,EAAE,CAAC;gBAClD,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAChC,CAAC;YAED,mDAAmD;YACnD,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChD,OAAO,aAAa,CAAC,SAAS,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,SAAS,GAAG,iBAA0C,CAAC;YACvE,CAAC;QACH,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;CACF;AAjQD,8DAiQC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,MAAsB;IACxD,OAAO,IAAI,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,oBAAoB,CAAC,YAAiC;IAC1E,MAAM,KAAK,GACT,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAC3F,OAAO,IAAA,kBAAS,EAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,kBAAkB,CACtC,MAAsB,EACtB,YAAiC,EACjC,MAAkB,EAClB,aAAsB,EACtB,SAAkB,EAClB,MAAgC,EAChC,OAIC;IAED,MAAM,KAAK,GACT,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAC3F,MAAM,SAAS,GAAG,MAAM,IAAA,kBAAS,EAAC,KAAK,CAAC,CAAC;IAEzC,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC;SACxC,kBAAkB,CAAC,SAAS,CAAC;SAC7B,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAElD,6CAA6C;IAC7C,MAAM,WAAW,GAAG,6BAAS,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,6BAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,6BAAS,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,WAAW,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,CAAC,KAAK,WAAW,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,IAAA,yCAAqB,EAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;QAC5E,CAAC;QACD,mDAAmD;IACrD,CAAC;IAED,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC;AACzB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,kBAAkB,CACtC,MAAsB,EACtB,YAAiC,EACjC,MAAc,EACd,GAAW,EACX,YAAgE,EAChE,OAGC;IAED,MAAM,KAAK,GACT,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAC3F,MAAM,SAAS,GAAG,MAAM,IAAA,kBAAS,EAAC,KAAK,CAAC,CAAC;IAEzC,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE/F,mDAAmD;IACnD,KAAK,MAAM,OAAO,IAAI,6BAAS,EAAE,CAAC;QAChC,yCAAyC;QACzC,IAAI,OAAO,KAAK,kBAAkB,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;YAClD,SAAS;QACX,CAAC;QAED,wCAAwC;QACxC,IAAI,OAAO,KAAK,2BAA2B,EAAE,CAAC;YAC5C,IAAI,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;YAC/C,CAAC;YACD,iDAAiD;YACjD,SAAS;QACX,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7D,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC;AACzB,CAAC"}