@promptci/core 0.2.2 → 0.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 (181) hide show
  1. package/dist/action-pinning.d.ts.map +1 -1
  2. package/dist/action-pinning.js +86 -55
  3. package/dist/action-pinning.js.map +1 -1
  4. package/dist/agent-practices.d.ts +5 -1
  5. package/dist/agent-practices.d.ts.map +1 -1
  6. package/dist/agent-practices.js +59 -34
  7. package/dist/agent-practices.js.map +1 -1
  8. package/dist/ai-config.d.ts +13 -6
  9. package/dist/ai-config.d.ts.map +1 -1
  10. package/dist/ai-config.js +25 -78
  11. package/dist/ai-config.js.map +1 -1
  12. package/dist/baseline.d.ts +8 -0
  13. package/dist/baseline.d.ts.map +1 -1
  14. package/dist/baseline.js +15 -0
  15. package/dist/baseline.js.map +1 -1
  16. package/dist/ci-alignment.d.ts +3 -1
  17. package/dist/ci-alignment.d.ts.map +1 -1
  18. package/dist/ci-alignment.js +8 -1
  19. package/dist/ci-alignment.js.map +1 -1
  20. package/dist/close-match.d.ts +97 -0
  21. package/dist/close-match.d.ts.map +1 -0
  22. package/dist/close-match.js +215 -0
  23. package/dist/close-match.js.map +1 -0
  24. package/dist/command-context.d.ts +67 -0
  25. package/dist/command-context.d.ts.map +1 -0
  26. package/dist/command-context.js +291 -0
  27. package/dist/command-context.js.map +1 -0
  28. package/dist/command-validity.d.ts.map +1 -1
  29. package/dist/command-validity.js +510 -32
  30. package/dist/command-validity.js.map +1 -1
  31. package/dist/context-optimizer.d.ts.map +1 -1
  32. package/dist/context-optimizer.js +9 -2
  33. package/dist/context-optimizer.js.map +1 -1
  34. package/dist/dead-references.d.ts +14 -1
  35. package/dist/dead-references.d.ts.map +1 -1
  36. package/dist/dead-references.js +264 -17
  37. package/dist/dead-references.js.map +1 -1
  38. package/dist/dependency-staleness.d.ts.map +1 -1
  39. package/dist/dependency-staleness.js +24 -38
  40. package/dist/dependency-staleness.js.map +1 -1
  41. package/dist/detectors.js +1 -1
  42. package/dist/detectors.js.map +1 -1
  43. package/dist/discovery.d.ts +138 -0
  44. package/dist/discovery.d.ts.map +1 -0
  45. package/dist/discovery.js +569 -0
  46. package/dist/discovery.js.map +1 -0
  47. package/dist/duplicates.d.ts +24 -2
  48. package/dist/duplicates.d.ts.map +1 -1
  49. package/dist/duplicates.js +313 -9
  50. package/dist/duplicates.js.map +1 -1
  51. package/dist/fix-engine.d.ts.map +1 -1
  52. package/dist/fix-engine.js +75 -1
  53. package/dist/fix-engine.js.map +1 -1
  54. package/dist/frameworks/dotnet.d.ts.map +1 -1
  55. package/dist/frameworks/dotnet.js +10 -11
  56. package/dist/frameworks/dotnet.js.map +1 -1
  57. package/dist/frameworks/go.d.ts.map +1 -1
  58. package/dist/frameworks/go.js +8 -4
  59. package/dist/frameworks/go.js.map +1 -1
  60. package/dist/frameworks/nextjs.d.ts.map +1 -1
  61. package/dist/frameworks/nextjs.js +8 -17
  62. package/dist/frameworks/nextjs.js.map +1 -1
  63. package/dist/frameworks/python.d.ts.map +1 -1
  64. package/dist/frameworks/python.js +5 -3
  65. package/dist/frameworks/python.js.map +1 -1
  66. package/dist/frameworks/rust.d.ts.map +1 -1
  67. package/dist/frameworks/rust.js +3 -3
  68. package/dist/frameworks/rust.js.map +1 -1
  69. package/dist/frameworks/unity.d.ts.map +1 -1
  70. package/dist/frameworks/unity.js +6 -5
  71. package/dist/frameworks/unity.js.map +1 -1
  72. package/dist/gitignore.d.ts +31 -2
  73. package/dist/gitignore.d.ts.map +1 -1
  74. package/dist/gitignore.js +33 -8
  75. package/dist/gitignore.js.map +1 -1
  76. package/dist/health-score.d.ts +15 -1
  77. package/dist/health-score.d.ts.map +1 -1
  78. package/dist/health-score.js +25 -2
  79. package/dist/health-score.js.map +1 -1
  80. package/dist/hooks-settings-detector.d.ts.map +1 -1
  81. package/dist/hooks-settings-detector.js +5 -1
  82. package/dist/hooks-settings-detector.js.map +1 -1
  83. package/dist/index.d.ts +10 -2
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +16 -2
  86. package/dist/index.js.map +1 -1
  87. package/dist/known-paths.d.ts +82 -0
  88. package/dist/known-paths.d.ts.map +1 -0
  89. package/dist/known-paths.js +152 -0
  90. package/dist/known-paths.js.map +1 -0
  91. package/dist/makefile.d.ts.map +1 -1
  92. package/dist/makefile.js +17 -13
  93. package/dist/makefile.js.map +1 -1
  94. package/dist/manifest-consistency.d.ts +1 -1
  95. package/dist/manifest-consistency.d.ts.map +1 -1
  96. package/dist/manifest-consistency.js +18 -8
  97. package/dist/manifest-consistency.js.map +1 -1
  98. package/dist/markdown-fences.d.ts.map +1 -1
  99. package/dist/markdown-fences.js +7 -3
  100. package/dist/markdown-fences.js.map +1 -1
  101. package/dist/mcp-config-detector.d.ts.map +1 -1
  102. package/dist/mcp-config-detector.js +5 -1
  103. package/dist/mcp-config-detector.js.map +1 -1
  104. package/dist/project-type.d.ts +2 -1
  105. package/dist/project-type.d.ts.map +1 -1
  106. package/dist/project-type.js +36 -48
  107. package/dist/project-type.js.map +1 -1
  108. package/dist/prompt-cache.d.ts.map +1 -1
  109. package/dist/prompt-cache.js +13 -2
  110. package/dist/prompt-cache.js.map +1 -1
  111. package/dist/provenance/check.d.ts +40 -0
  112. package/dist/provenance/check.d.ts.map +1 -0
  113. package/dist/provenance/check.js +157 -0
  114. package/dist/provenance/check.js.map +1 -0
  115. package/dist/provenance/index.d.ts +13 -0
  116. package/dist/provenance/index.d.ts.map +1 -0
  117. package/dist/provenance/index.js +21 -0
  118. package/dist/provenance/index.js.map +1 -0
  119. package/dist/provenance/instruction-advice.d.ts +3 -0
  120. package/dist/provenance/instruction-advice.d.ts.map +1 -0
  121. package/dist/provenance/instruction-advice.js +570 -0
  122. package/dist/provenance/instruction-advice.js.map +1 -0
  123. package/dist/provenance/repo-checks.d.ts +3 -0
  124. package/dist/provenance/repo-checks.d.ts.map +1 -0
  125. package/dist/provenance/repo-checks.js +644 -0
  126. package/dist/provenance/repo-checks.js.map +1 -0
  127. package/dist/provenance/tool-config.d.ts +3 -0
  128. package/dist/provenance/tool-config.d.ts.map +1 -0
  129. package/dist/provenance/tool-config.js +480 -0
  130. package/dist/provenance/tool-config.js.map +1 -0
  131. package/dist/provenance/types.d.ts +116 -0
  132. package/dist/provenance/types.d.ts.map +1 -0
  133. package/dist/provenance/types.js +17 -0
  134. package/dist/provenance/types.js.map +1 -0
  135. package/dist/repo-context.d.ts +9 -0
  136. package/dist/repo-context.d.ts.map +1 -1
  137. package/dist/repo-context.js +35 -41
  138. package/dist/repo-context.js.map +1 -1
  139. package/dist/repo-tree.d.ts +163 -9
  140. package/dist/repo-tree.d.ts.map +1 -1
  141. package/dist/repo-tree.js +226 -34
  142. package/dist/repo-tree.js.map +1 -1
  143. package/dist/report.d.ts.map +1 -1
  144. package/dist/report.js +6 -0
  145. package/dist/report.js.map +1 -1
  146. package/dist/sample-text.d.ts +36 -0
  147. package/dist/sample-text.d.ts.map +1 -0
  148. package/dist/sample-text.js +72 -0
  149. package/dist/sample-text.js.map +1 -0
  150. package/dist/sarif.d.ts +27 -0
  151. package/dist/sarif.d.ts.map +1 -0
  152. package/dist/sarif.js +357 -0
  153. package/dist/sarif.js.map +1 -0
  154. package/dist/scan.d.ts.map +1 -1
  155. package/dist/scan.js +8 -2
  156. package/dist/scan.js.map +1 -1
  157. package/dist/scanner.d.ts +4 -3
  158. package/dist/scanner.d.ts.map +1 -1
  159. package/dist/scanner.js +36 -77
  160. package/dist/scanner.js.map +1 -1
  161. package/dist/security-pack.d.ts.map +1 -1
  162. package/dist/security-pack.js +117 -35
  163. package/dist/security-pack.js.map +1 -1
  164. package/dist/skill-supply-chain.d.ts.map +1 -1
  165. package/dist/skill-supply-chain.js +29 -19
  166. package/dist/skill-supply-chain.js.map +1 -1
  167. package/dist/skills-detector.d.ts.map +1 -1
  168. package/dist/skills-detector.js +11 -3
  169. package/dist/skills-detector.js.map +1 -1
  170. package/dist/token-estimates.d.ts +42 -0
  171. package/dist/token-estimates.d.ts.map +1 -0
  172. package/dist/token-estimates.js +200 -0
  173. package/dist/token-estimates.js.map +1 -0
  174. package/dist/types.d.ts +99 -0
  175. package/dist/types.d.ts.map +1 -1
  176. package/dist/types.js.map +1 -1
  177. package/dist/workspace-manifests.d.ts +6 -0
  178. package/dist/workspace-manifests.d.ts.map +1 -1
  179. package/dist/workspace-manifests.js +13 -8
  180. package/dist/workspace-manifests.js.map +1 -1
  181. package/package.json +5 -2
@@ -0,0 +1,157 @@
1
+ /** A `tool-fact` or `opinion` record older than this many days has expired. */
2
+ export const PROVENANCE_MAX_AGE_DAYS = 90;
3
+ const DAY_MS = 24 * 60 * 60 * 1000;
4
+ const DATE_RE = /^\d{4}-\d{2}-\d{2}$/;
5
+ function dayNumber(date) {
6
+ if (!DATE_RE.test(date))
7
+ return undefined;
8
+ const ms = Date.parse(`${date}T00:00:00Z`);
9
+ // Date.parse rolls an impossible day over (`2026-02-30` is 2 March); only a date that round-trips is real.
10
+ if (Number.isNaN(ms) || new Date(ms).toISOString().slice(0, 10) !== date)
11
+ return undefined;
12
+ return Math.floor(ms / DAY_MS);
13
+ }
14
+ /**
15
+ * Whole days from `date` to `today` (`YYYY-MM-DD` both); `undefined` when either
16
+ * is not a real date. The clock is the caller's: this module never reads one.
17
+ */
18
+ export function daysSince(date, today) {
19
+ const from = dayNumber(date);
20
+ const to = dayNumber(today);
21
+ return from === undefined || to === undefined ? undefined : to - from;
22
+ }
23
+ /** What the record stands on; see {@link ProvenanceStatus}. */
24
+ export function provenanceStatus(record) {
25
+ if (record.kind === 'repo-fact')
26
+ return 'repo-fact';
27
+ if (record.refuted)
28
+ return 'refuted';
29
+ if (record.unverified)
30
+ return 'unverified';
31
+ // Not flagged: sourced only when the evidence its kind needs is there. A record
32
+ // that forgot its flag is reported as unverified here and fails the structure rules.
33
+ const evals = record.evals?.length ?? 0;
34
+ const supported = record.kind === 'tool-fact' ? record.sources.some((s) => s.stance === 'supports') || evals > 0 : evals > 0;
35
+ if (!supported)
36
+ return 'unverified';
37
+ // A page that contradicts the claim for a tool it names outweighs one that supports another part of it.
38
+ return record.sources.some((s) => s.stance === 'contradicts') ? 'contested' : 'sourced';
39
+ }
40
+ /**
41
+ * What is structurally wrong with a set of records, one sentence each. Needs no
42
+ * clock, so it belongs in the test suite: it is the same on every day.
43
+ *
44
+ * - A `tool-fact` is sourced only by a `supports` source (or an eval). A page that
45
+ * merely `contradicts` or gives `context` does not make it sourced.
46
+ * - An `opinion` is sourced only by an eval: documentation is related reading, so
47
+ * an opinion without one is `unverified`.
48
+ * - `unverified` lists only `context` sources and no eval; `refuted` needs a
49
+ * `contradicts` source and no `supports` one or eval; the two exclude each other.
50
+ * - Dates are real `YYYY-MM-DD` dates, and a record is not verified before a
51
+ * source it cites was read.
52
+ */
53
+ export function provenanceStructureProblems(records) {
54
+ const problems = [];
55
+ for (const record of records) {
56
+ const stances = (stance) => record.sources.filter((s) => s.stance === stance).length;
57
+ const supports = stances('supports');
58
+ const contradicts = stances('contradicts');
59
+ const evals = record.evals?.length ?? 0;
60
+ const verified = dayNumber(record.lastVerified.date);
61
+ if (verified === undefined) {
62
+ problems.push(`${record.id}: lastVerified "${record.lastVerified.date}" is not a YYYY-MM-DD date`);
63
+ }
64
+ for (const source of record.sources) {
65
+ const read = dayNumber(source.readOn);
66
+ if (read === undefined) {
67
+ problems.push(`${record.id}: source ${source.url} has readOn "${source.readOn}", which is not a YYYY-MM-DD date`);
68
+ }
69
+ else if (verified !== undefined && verified < read) {
70
+ problems.push(`${record.id}: lastVerified ${record.lastVerified.date} is before source ${source.url} was read (${source.readOn})`);
71
+ }
72
+ }
73
+ if (record.unverified && record.refuted) {
74
+ problems.push(`${record.id}: marked both unverified and refuted`);
75
+ }
76
+ if (record.kind === 'repo-fact')
77
+ continue;
78
+ if (record.unverified) {
79
+ if (evals > 0)
80
+ problems.push(`${record.id}: marked unverified but lists ${evals} eval(s); drop the flag`);
81
+ // A tool-fact that a page supports is sourced. An opinion has no page that can support
82
+ // it (only an eval can), so its related documentation is `context`, and a page that
83
+ // contradicts it may stay.
84
+ if (record.kind === 'opinion' && supports > 0) {
85
+ problems.push(`${record.id}: an unverified opinion lists ${supports} source(s) with stance supports; documentation is related reading, set them to context`);
86
+ }
87
+ if (record.kind === 'tool-fact' && (supports > 0 || contradicts > 0)) {
88
+ problems.push(`${record.id}: marked unverified but lists ${supports} supporting and ${contradicts} contradicting source(s); ` +
89
+ 'keep only context sources, or drop the flag (or mark it refuted when a source contradicts it)');
90
+ }
91
+ }
92
+ else if (record.refuted) {
93
+ if (contradicts === 0)
94
+ problems.push(`${record.id}: marked refuted but no source contradicts it`);
95
+ if (supports > 0 || evals > 0)
96
+ problems.push(`${record.id}: marked refuted but a source or eval supports it`);
97
+ }
98
+ else if (record.kind === 'tool-fact') {
99
+ if (supports === 0 && evals === 0) {
100
+ problems.push(`${record.id}: a tool-fact needs a source that supports it (or an eval); ` +
101
+ `it has ${record.sources.length} source(s), none supporting. Mark it unverified, or refuted when a source contradicts it`);
102
+ }
103
+ }
104
+ else if (evals === 0) {
105
+ problems.push(`${record.id}: an opinion needs an eval; a documentation page is related reading, not support. Mark it unverified (context sources may stay)`);
106
+ }
107
+ }
108
+ return problems;
109
+ }
110
+ /**
111
+ * What the calendar makes wrong on `today`, one sentence each: a `tool-fact` or
112
+ * `opinion` (of any status) whose `lastVerified` is more than
113
+ * {@link PROVENANCE_MAX_AGE_DAYS} days old, naming the check and the sources to
114
+ * re-read; and a date after `today`. `repo-fact` records never expire.
115
+ *
116
+ * This depends on the clock, so it must not run in the test suite: it would turn
117
+ * every build red on the day the records age out, including a rebuild of an old
118
+ * release. It runs from `scripts/check-provenance.mjs`, on a schedule.
119
+ */
120
+ export function provenanceDateProblems(records, today) {
121
+ const problems = [];
122
+ if (dayNumber(today) === undefined)
123
+ return [`today "${today}" is not a YYYY-MM-DD date`];
124
+ for (const record of records) {
125
+ const verifiedDays = daysSince(record.lastVerified.date, today);
126
+ if (verifiedDays !== undefined && verifiedDays < 0) {
127
+ problems.push(`${record.id}: lastVerified ${record.lastVerified.date} is in the future`);
128
+ }
129
+ for (const source of record.sources) {
130
+ const readDays = daysSince(source.readOn, today);
131
+ if (readDays !== undefined && readDays < 0)
132
+ problems.push(`${record.id}: source ${source.url} was read on ${source.readOn}, in the future`);
133
+ }
134
+ if (record.kind === 'repo-fact' || verifiedDays === undefined)
135
+ continue;
136
+ if (verifiedDays > PROVENANCE_MAX_AGE_DAYS) {
137
+ const reread = record.sources.length > 0 ? [...new Set(record.sources.map((s) => s.url))].join(', ') : 'no sources recorded';
138
+ problems.push(`${record.id}: lastVerified ${record.lastVerified.date} is ${verifiedDays} days old (limit ${PROVENANCE_MAX_AGE_DAYS}); re-read: ${reread}`);
139
+ }
140
+ }
141
+ return problems;
142
+ }
143
+ /** Everything {@link provenanceStructureProblems} and {@link provenanceDateProblems} find on `today`. */
144
+ export function provenanceProblems(records, today) {
145
+ return [...provenanceStructureProblems(records), ...provenanceDateProblems(records, today)];
146
+ }
147
+ /** Records within `withinDays` of expiring (or already past it), for the monthly triage and the early warning. */
148
+ export function provenanceExpiringSoon(records, today, withinDays = 30) {
149
+ return records.filter((record) => {
150
+ if (record.kind === 'repo-fact')
151
+ return false;
152
+ const age = daysSince(record.lastVerified.date, today);
153
+ // Inclusive: a record with exactly `withinDays` days left is within the window.
154
+ return age !== undefined && age >= PROVENANCE_MAX_AGE_DAYS - withinDays;
155
+ });
156
+ }
157
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/provenance/check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { CheckProvenance } from './types.js';
2
+ export * from './types.js';
3
+ export { PROVENANCE_MAX_AGE_DAYS, daysSince, provenanceDateProblems, provenanceExpiringSoon, provenanceProblems, provenanceStatus, provenanceStructureProblems, } from './check.js';
4
+ /**
5
+ * The provenance record of every check family (pcic-kvv3.1). Grouped by what the
6
+ * checks rest on, one file per group, each next to the detectors it describes:
7
+ * tool-config.ts (what the AI tools read), instruction-advice.ts (how to write
8
+ * instructions), repo-checks.ts (facts about the scanned repository).
9
+ */
10
+ export declare const CHECK_PROVENANCE: readonly CheckProvenance[];
11
+ /** The records of one detector (`DETECTORS` id), in registry order. */
12
+ export declare function provenanceFor(detectorId: string): readonly CheckProvenance[];
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/provenance/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAKlD,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAChB,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AAEpB;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,eAAe,EAItD,CAAC;AAEF,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,eAAe,EAAE,CAE5E"}
@@ -0,0 +1,21 @@
1
+ import { INSTRUCTION_ADVICE_PROVENANCE } from './instruction-advice.js';
2
+ import { REPO_CHECKS_PROVENANCE } from './repo-checks.js';
3
+ import { TOOL_CONFIG_PROVENANCE } from './tool-config.js';
4
+ export * from './types.js';
5
+ export { PROVENANCE_MAX_AGE_DAYS, daysSince, provenanceDateProblems, provenanceExpiringSoon, provenanceProblems, provenanceStatus, provenanceStructureProblems, } from './check.js';
6
+ /**
7
+ * The provenance record of every check family (pcic-kvv3.1). Grouped by what the
8
+ * checks rest on, one file per group, each next to the detectors it describes:
9
+ * tool-config.ts (what the AI tools read), instruction-advice.ts (how to write
10
+ * instructions), repo-checks.ts (facts about the scanned repository).
11
+ */
12
+ export const CHECK_PROVENANCE = [
13
+ ...TOOL_CONFIG_PROVENANCE,
14
+ ...INSTRUCTION_ADVICE_PROVENANCE,
15
+ ...REPO_CHECKS_PROVENANCE,
16
+ ];
17
+ /** The records of one detector (`DETECTORS` id), in registry order. */
18
+ export function provenanceFor(detectorId) {
19
+ return CHECK_PROVENANCE.filter((record) => record.detector === detectorId);
20
+ }
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/provenance/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAChB,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AAEpB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA+B;IAC1D,GAAG,sBAAsB;IACzB,GAAG,6BAA6B;IAChC,GAAG,sBAAsB;CAC1B,CAAC;AAEF,uEAAuE;AACvE,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CheckProvenance } from './types.js';
2
+ export declare const INSTRUCTION_ADVICE_PROVENANCE: readonly CheckProvenance[];
3
+ //# sourceMappingURL=instruction-advice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instruction-advice.d.ts","sourceRoot":"","sources":["../../src/provenance/instruction-advice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAuD,MAAM,YAAY,CAAC;AAwDvG,eAAO,MAAM,6BAA6B,EAAE,SAAS,eAAe,EAgmBnE,CAAC"}