ai-spend-agent 0.1.1 → 0.1.4

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 ADDED
@@ -0,0 +1,40 @@
1
+ # ai-spend-agent
2
+
3
+ **Your AI spend in one view, in 90 seconds — local-first, no signup.**
4
+
5
+ ```bash
6
+ npx ai-spend-agent
7
+ ```
8
+
9
+ If you use **Claude Code or Codex**, that one command reads the session logs
10
+ already on your machine and shows your real usage: total dollars *estimated at
11
+ API-equivalent rates*, where the money goes, a ranked "where to cut" list, a
12
+ subscription-vs-API **plan check**, and the **dead context** you pay for but
13
+ never use (tools/skills/MCP servers loaded on every turn and never invoked).
14
+
15
+ No logs? You get an instant, clearly-labeled demo on sample data.
16
+
17
+ ## Connect real billing (optional, ~2 min)
18
+
19
+ ```bash
20
+ ai-spend-agent connect openai # org-owner Admin key
21
+ ai-spend-agent connect anthropic # Admin key
22
+ ```
23
+
24
+ Billing-API numbers from OpenAI/Anthropic are tagged `verified`; local-log
25
+ numbers are always `estimated`; the beta Cursor/Copilot connectors are
26
+ `estimated` until reconciled against a real invoice. Every figure carries its
27
+ confidence label — that's the product.
28
+
29
+ ## Privacy
30
+
31
+ Local-first: nothing is uploaded, there is no telemetry, secrets are
32
+ redacted from all output and persisted state, and provider keys are only ever
33
+ referenced as `env:NAME` — never stored.
34
+
35
+ ## Docs
36
+
37
+ Full README, MCP server, and connector guides:
38
+ **https://github.com/futurastudio/ai-spend-agent#readme**
39
+
40
+ MIT licensed.
package/dist/index.js CHANGED
@@ -1,10 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { realpathSync } from "node:fs";
3
- import { mkdir, readFile, writeFile } from "node:fs/promises";
4
- import { homedir } from "node:os";
5
- import { dirname, join, resolve } from "node:path";
6
- import { pathToFileURL } from "node:url";
7
- import { analyzeSpend, attributeUsageRecords, detectLocalCredentials, loadLocalAgentUsage, loadSampleUsageData, scanLocalUsageSignals, buildMissingSourcePrompts, confirmMapping, createProviderConnectorStub, createLocalFolderSourceRegistry, createScanAuditLog, fetchProviderUsageRecords, addApprovedSource, slugifySourceId } from "@agent-finops/core";
3
+ import { mkdir, readFile, rm, stat, writeFile } from "node:fs/promises";
4
+ import { dirname, extname, join, resolve } from "node:path";
5
+ import { fileURLToPath, pathToFileURL } from "node:url";
6
+ import { analyzeSpend, attributeUsageRecords, detectLocalCredentials, redactSecrets, unsafeScanRootReason, loadDeadContext, sampleDeadContext, loadLocalAgentUsage, loadSampleUsageData, scanLocalUsageSignals, buildMissingSourcePrompts, confirmMapping, createProviderConnectorStub, createLocalFolderSourceRegistry, createScanAuditLog, fetchProviderUsageRecords, addApprovedSource, slugifySourceId } from "@agent-finops/core";
8
7
  import { generateActionPlanMarkdown, generateApplyArtifactMarkdown, generateDemoPackageMarkdown, generateHtmlReport, generateMarkdownReport, generatePlainEnglishSummary, generatePolicyConfigDraftMarkdown, generateReportCardCaption, generateReportCardSvg, generateVerificationPlanMarkdown, groupByDimensions } from "@agent-finops/report";
9
8
  export async function runCli(argv = process.argv.slice(2)) {
10
9
  if (argv.includes("--help") || argv.includes("-h") || argv[0] === "help") {
@@ -21,6 +20,9 @@ export async function runCli(argv = process.argv.slice(2)) {
21
20
  if (args.command === "doctor") {
22
21
  return doctorCommand(args);
23
22
  }
23
+ if (args.command === "reset") {
24
+ return resetCommand(args);
25
+ }
24
26
  if (args.command === "init") {
25
27
  return initCommand(args);
26
28
  }
@@ -64,33 +66,7 @@ export async function runCli(argv = process.argv.slice(2)) {
64
66
  };
65
67
  }
66
68
  async function quickstartCommand(args) {
67
- // Real data beats sample data: (1) connected/synced state, then (2) usage
68
- // mined from this machine's agent logs (Claude Code / Codex — the spend no
69
- // billing API can see), then (3) the bundled sample so the wow ALWAYS lands.
70
- let records = [];
71
- let mode = "demo";
72
- const localSpend = await readOptionalLocalSpend(resolve(args.path));
73
- if (localSpend && localSpend.length > 0) {
74
- records = localSpend;
75
- mode = "connected";
76
- }
77
- else if (!args.sample) {
78
- const logs = await loadLocalAgentUsage({
79
- // Env overrides keep tests (and unusual installs) isolated from $HOME.
80
- claudeProjectsDir: process.env.AI_SPEND_CLAUDE_LOGS_DIR,
81
- codexSessionsDir: process.env.AI_SPEND_CODEX_LOGS_DIR
82
- }).catch(() => undefined);
83
- if (logs && logs.records.length > 0) {
84
- records = logs.records;
85
- mode = "local-logs";
86
- }
87
- }
88
- if (records.length === 0) {
89
- // loadSampleUsageData resolves the bundled CSVs relative to the installed
90
- // package, so this works from ANY directory (true zero-config).
91
- records = await loadSampleUsageData();
92
- mode = "demo";
93
- }
69
+ const { records, mode, warnings } = await loadInstantReadData(args);
94
70
  const summary = analyzeSpend(records);
95
71
  const groupBy = args.groupBy ?? "model";
96
72
  const color = args.noColor ? false : undefined;
@@ -98,53 +74,185 @@ async function quickstartCommand(args) {
98
74
  // without ever printing a raw secret.
99
75
  const detection = await detectLocalCredentials({ cwd: resolve(args.path) });
100
76
  const nextSteps = quickstartNextSteps(mode, detection.credentials);
77
+ // Dead-context cost, globalized across the user's whole Claude Code setup
78
+ // (all projects' MCP + user-scope skills/agents/commands, vs. every
79
+ // transcript) so it's populated from ANY directory on the first run.
80
+ // Never throws into the readout.
81
+ let deadContext = args.sample
82
+ ? undefined
83
+ : await loadDeadContext({
84
+ // Env overrides keep tests (and unusual installs) isolated from $HOME.
85
+ claudeProjectsDir: process.env.AI_SPEND_CLAUDE_LOGS_DIR,
86
+ claudeHomeDir: process.env.AI_SPEND_CLAUDE_HOME_DIR,
87
+ claudeConfigPath: process.env.AI_SPEND_CLAUDE_CONFIG,
88
+ projectDir: resolve(args.path),
89
+ includeAllProjectMcp: true,
90
+ sinceIso: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString(),
91
+ windowDays: 30
92
+ }).catch(() => undefined);
93
+ // Sample dead-context is shown ONLY on the demo readout. A real readout
94
+ // (local logs / connected billing) never gets fabricated waste injected —
95
+ // a genuinely clean setup earns its congratulation line instead.
96
+ if (mode === "demo" && (!deadContext || !deadContext.hasData)) {
97
+ deadContext = sampleDeadContext();
98
+ }
101
99
  const summaryText = generatePlainEnglishSummary(summary, {
102
100
  records,
103
101
  groupBy,
104
102
  color,
105
103
  mode,
106
- nextSteps
104
+ nextSteps,
105
+ deadContext
107
106
  });
108
- return ok(summaryText);
107
+ const header = [` ${dataModeBanner(mode)}`, ...warnings.map((warning) => ` ! ${warning}`)].join("\n");
108
+ return ok(`${header}\n${summaryText}`);
109
109
  }
110
110
  function quickstartNextSteps(mode, detected) {
111
+ // Connect/verify guidance now lives in the readout's APPLY/VERIFY sections;
112
+ // this footer only carries what those can't know (detected local keys) and
113
+ // the report/waitlist pointers.
111
114
  const steps = [];
112
- if (mode === "local-logs") {
113
- steps.push("These numbers are API-equivalent ESTIMATES from your local Claude Code / Codex logs.");
114
- }
115
115
  if (detected.length > 0) {
116
116
  const names = detected.map((credential) => `${credential.provider} (${credential.hint})`).join(", ");
117
117
  steps.push(`Found local key${detected.length === 1 ? "" : "s"}: ${names}`);
118
118
  steps.push(`ai-spend-agent connect ${detected[0].provider} use it — note: COST data needs an ADMIN/owner key`);
119
119
  }
120
- else if (mode === "demo" || mode === "local-logs") {
121
- steps.push("ai-spend-agent connect openai pull your real OpenAI spend (org-owner admin key, ~2 min)");
122
- steps.push("ai-spend-agent connect anthropic pull your real Anthropic spend (admin key, ~2 min)");
123
- }
124
120
  steps.push("ai-spend-agent report write a shareable Markdown + HTML report");
121
+ steps.push("ai-spend-agent --group-by project see which project burns the most");
125
122
  steps.push("Want this watched while your laptop is off? Hosted beta waitlist: https://ai-spend-agent.vercel.app");
126
123
  return steps;
127
124
  }
128
- async function readOptionalLocalSpend(rootPath) {
125
+ async function readPersistedSpend(rootPath) {
129
126
  const stateDir = join(rootPath, ".ai-spend-agent");
130
127
  try {
131
128
  const spend = await readJson(join(stateDir, "spend.json"));
132
- return spend.records;
129
+ return { mode: spend.mode, records: spend.records ?? [] };
133
130
  }
134
131
  catch {
135
132
  return undefined;
136
133
  }
137
134
  }
135
+ async function loadInstantReadData(args) {
136
+ const warnings = [];
137
+ if (args.sample) {
138
+ return { records: await loadSampleUsageData(), mode: "demo", warnings };
139
+ }
140
+ const persisted = args.ignoreState ? undefined : await readPersistedSpend(resolve(args.path));
141
+ // Only real connected/synced provider state is authoritative enough to serve
142
+ // directly. Sample or legacy persisted state must NEVER mask real local logs.
143
+ if (persisted && persisted.records.length > 0 && persisted.mode === "connected_provider") {
144
+ return { records: persisted.records, mode: "connected", warnings };
145
+ }
146
+ // Real local agent logs (Claude Code / Codex) beat any sample/legacy state.
147
+ const logs = await loadLocalAgentUsage({
148
+ // Env overrides keep tests (and unusual installs) isolated from $HOME.
149
+ claudeProjectsDir: process.env.AI_SPEND_CLAUDE_LOGS_DIR,
150
+ codexSessionsDir: process.env.AI_SPEND_CODEX_LOGS_DIR
151
+ }).catch(() => undefined);
152
+ if (logs && logs.records.length > 0) {
153
+ if (persisted && persisted.records.length > 0 && persisted.mode !== "connected_provider") {
154
+ warnings.push("Ignored persisted sample/legacy state in .ai-spend-agent/spend.json — showing your real local agent logs. Run `ai-spend-agent reset` to clear it, or pass --ignore-state.");
155
+ }
156
+ return { records: logs.records, mode: "local-logs", warnings };
157
+ }
158
+ // No real logs. Persisted sample/legacy state may still be shown, but only as
159
+ // DEMO (never as connected), with a warning when its origin is unknown.
160
+ if (persisted && persisted.records.length > 0) {
161
+ if (persisted.mode === undefined) {
162
+ warnings.push("Persisted state in .ai-spend-agent/spend.json is from an older format with no data-mode tag — treating it as demo. Run `ai-spend-agent reset`, then re-scan to refresh.");
163
+ }
164
+ return { records: persisted.records, mode: "demo", warnings };
165
+ }
166
+ // loadSampleUsageData resolves the bundled CSVs relative to the installed
167
+ // package, so this works from ANY directory (true zero-config).
168
+ return { records: await loadSampleUsageData(), mode: "demo", warnings };
169
+ }
170
+ /** A one-line, unmissable banner telling the user which data they're seeing. */
171
+ function dataModeBanner(mode) {
172
+ if (mode === "local-logs")
173
+ return "DATA MODE: your local agent logs (estimated at API-equivalent rates)";
174
+ if (mode === "connected")
175
+ return "DATA MODE: connected provider billing";
176
+ return "DATA MODE: demo sample (illustrative — not your real spend)";
177
+ }
138
178
  async function doctorCommand(args) {
139
179
  const rootPath = resolve(args.path);
140
180
  const stateDir = join(rootPath, ".ai-spend-agent");
181
+ const persisted = await readPersistedSpend(rootPath);
182
+ const stateMode = persisted ? (persisted.mode ?? "unknown legacy") : "no state";
183
+ const logs = await loadLocalAgentUsage({
184
+ claudeProjectsDir: process.env.AI_SPEND_CLAUDE_LOGS_DIR,
185
+ codexSessionsDir: process.env.AI_SPEND_CODEX_LOGS_DIR
186
+ }).catch(() => undefined);
187
+ const detected = logs?.agentsDetected ?? [];
188
+ const claudeFound = detected.includes("claude-code");
189
+ const codexFound = detected.includes("codex");
190
+ const hasLogs = claudeFound || codexFound;
191
+ const detection = await detectLocalCredentials({ cwd: rootPath }).catch(() => ({ credentials: [] }));
192
+ const providerRefs = detection.credentials.map((credential) => `${credential.provider} (${credential.hint})`);
193
+ const warnings = [];
194
+ if (stateMode === "sample")
195
+ warnings.push("sample state present — it will be shown as DEMO and cannot mask real logs; run `ai-spend-agent reset` to clear it");
196
+ if (stateMode === "unknown legacy")
197
+ warnings.push("legacy state with no data-mode tag — run `ai-spend-agent reset`, then re-scan");
198
+ if (!hasLogs)
199
+ warnings.push("no real Claude Code / Codex logs found — a first run here will show DEMO sample data");
200
+ if (providerRefs.length === 0)
201
+ warnings.push("no provider admin keys detected — connect OpenAI/Anthropic for VERIFIED billing (local logs stay ESTIMATED)");
202
+ const predictedMode = stateMode === "connected_provider"
203
+ ? "connected provider billing"
204
+ : hasLogs
205
+ ? "your local agent logs (estimated at API-equivalent rates)"
206
+ : "demo sample (illustrative)";
207
+ const lines = [
208
+ "AI Spend Analyst doctor",
209
+ `node version: ${process.version}`,
210
+ `cli version: ${await cliVersion()}`,
211
+ "local-first mode: enabled (no cloud upload, no telemetry)",
212
+ `path: ${rootPath}`,
213
+ `state directory: ${stateDir}`,
214
+ `state mode: ${stateMode}`,
215
+ `Claude Code logs: ${claudeFound ? "found" : "not found"}`,
216
+ `Codex logs: ${codexFound ? "found" : "not found"}`,
217
+ `provider env references: ${providerRefs.length > 0 ? providerRefs.join(", ") : "none detected"}`,
218
+ "redaction policy: secrets are never printed or persisted",
219
+ "plan check: available (subscription vs API-rate math)",
220
+ `data mode you'll get now: ${predictedMode}`,
221
+ warnings.length > 0 ? `launch warnings:\n${warnings.map((warning) => ` - ${warning}`).join("\n")}` : "launch warnings: none"
222
+ ];
223
+ return ok(lines.join("\n"));
224
+ }
225
+ async function cliVersion() {
226
+ try {
227
+ const here = dirname(fileURLToPath(import.meta.url));
228
+ const pkg = JSON.parse(await readFile(join(here, "..", "package.json"), "utf8"));
229
+ return pkg.version ?? "unknown";
230
+ }
231
+ catch {
232
+ return process.env.npm_package_version ?? "unknown";
233
+ }
234
+ }
235
+ async function resetCommand(args) {
236
+ const rootPath = resolve(args.path);
237
+ const stateDir = join(rootPath, ".ai-spend-agent");
238
+ // Clear derived spend state so a prior `scan --sample` (or stale provider
239
+ // sync) can never mask the next real local-log read. Leaves sources/audit.
240
+ const targets = ["spend.json", "mappings.json", "provider-records.json", "watch-latest.json", "watch-history.json"];
241
+ const removed = [];
242
+ for (const file of targets) {
243
+ try {
244
+ await rm(join(stateDir, file));
245
+ removed.push(file);
246
+ }
247
+ catch {
248
+ // File not present — nothing to clear for this target.
249
+ }
250
+ }
141
251
  return ok([
142
- "AI Spend Analyst Agent doctor",
252
+ "AI Spend Analyst reset",
143
253
  `path: ${rootPath}`,
144
- "local-first mode: enabled",
145
- "subscription check: not wired in this slice",
146
- "redaction policy: secrets are never printed",
147
- `state directory: ${stateDir}`
254
+ removed.length > 0 ? `cleared: ${removed.join(", ")}` : "nothing to clear (no persisted spend state found)",
255
+ "next run will re-read your real local agent logs (or demo sample if none)."
148
256
  ].join("\n"));
149
257
  }
150
258
  async function initCommand(args) {
@@ -262,11 +370,14 @@ async function scanCommand(args) {
262
370
  `discovery signals: ${discovery.signals.length}`,
263
371
  `secrets detected: ${discovery.secretsDetected.length}`
264
372
  ];
373
+ if (discovery.unreadablePaths.length > 0) {
374
+ lines.push(`unreadable paths skipped: ${discovery.unreadablePaths.length} (permissions/broken links — scan continued)`);
375
+ }
265
376
  if (args.sample) {
266
377
  const records = await loadSampleUsageData();
267
378
  const summary = analyzeSpend(records);
268
379
  const mappings = attributeUsageRecords(records);
269
- await writeLocalSpendState(stateDir, records, summary, mappings);
380
+ await writeLocalSpendState(stateDir, records, summary, mappings, "sample");
270
381
  lines.push(`sample records: ${records.length}`);
271
382
  lines.push(`total spend: $${summary.totalUsd.toFixed(2)}`);
272
383
  lines.push(`attribution mappings: ${mappings.length}`);
@@ -311,15 +422,22 @@ async function watchCommand(args) {
311
422
  deltaHeadline,
312
423
  plainEnglish
313
424
  ].join("\n");
314
- collected.push(stamped);
315
425
  iteration += 1;
316
426
  const moreToGo = unbounded || iteration < cycles;
317
- if (moreToGo) {
427
+ const streaming = process.env.NODE_ENV !== "test";
428
+ if (moreToGo && streaming) {
429
+ // Stream interim cycles live, but do NOT also include them in the returned
430
+ // output — doing both double-printed the baseline before the no-change
431
+ // cycle. Streamed cycles are shown once here; the final cycle is returned.
318
432
  // eslint-disable-next-line no-console
319
- if (process.env.NODE_ENV !== "test") {
320
- console.log(stamped);
321
- console.log(`\n[watch] sleeping ${intervalSeconds}s until next cycle. Press Ctrl+C to stop.\n`);
322
- }
433
+ console.log(stamped);
434
+ // eslint-disable-next-line no-console
435
+ console.log(`\n[watch] sleeping ${intervalSeconds}s until next cycle. Press Ctrl+C to stop.\n`);
436
+ }
437
+ else {
438
+ collected.push(stamped);
439
+ }
440
+ if (moreToGo) {
323
441
  await sleep(intervalSeconds * 1000);
324
442
  }
325
443
  }
@@ -327,18 +445,24 @@ async function watchCommand(args) {
327
445
  }
328
446
  async function runWatchCycle(stateDir, args) {
329
447
  let records;
448
+ let mode;
330
449
  if (args.sample) {
331
450
  records = await loadSampleUsageData();
451
+ mode = "sample";
332
452
  }
333
453
  else {
334
454
  records = await loadLiveRecords(stateDir);
335
- if (records.length === 0) {
455
+ if (records.length > 0) {
456
+ mode = "connected_provider";
457
+ }
458
+ else {
336
459
  records = await loadSampleUsageData();
460
+ mode = "sample";
337
461
  }
338
462
  }
339
463
  const summary = analyzeSpend(records);
340
464
  const mappings = attributeUsageRecords(records);
341
- await writeLocalSpendState(stateDir, records, summary, mappings);
465
+ await writeLocalSpendState(stateDir, records, summary, mappings, mode);
342
466
  const snapshot = {
343
467
  capturedAt: new Date().toISOString(),
344
468
  totalUsd: summary.totalUsd,
@@ -577,7 +701,7 @@ async function syncProviderCommand(args) {
577
701
  records: result.records,
578
702
  qa: result.qa
579
703
  });
580
- await writeLocalSpendState(stateDir, result.records, summary, mappings);
704
+ await writeLocalSpendState(stateDir, result.records, summary, mappings, "connected_provider");
581
705
  await appendAuditEvent(stateDir, {
582
706
  timestamp: result.fetchedAt,
583
707
  action: "source_scanned",
@@ -671,23 +795,36 @@ async function reportCommand(args) {
671
795
  };
672
796
  }
673
797
  }
798
+ /**
799
+ * Resolve where the AI Receipt SVG is written so it is always shareable:
800
+ * no --out -> ai-receipt.svg in cwd; --out a directory -> ai-spend-receipt.svg
801
+ * inside it; --out with no extension -> append .svg; explicit .svg honored.
802
+ */
803
+ async function resolveReceiptPath(rootPath, out) {
804
+ if (!out)
805
+ return join(rootPath, "ai-receipt.svg");
806
+ const resolved = resolve(rootPath, out);
807
+ const isDir = await stat(resolved).then((entry) => entry.isDirectory()).catch(() => false);
808
+ if (isDir)
809
+ return join(resolved, "ai-spend-receipt.svg");
810
+ return extname(resolved) ? resolved : `${resolved}.svg`;
811
+ }
674
812
  async function reportCardCommand(args) {
675
813
  const rootPath = resolve(args.path);
676
- let records;
677
- if (args.sample) {
678
- records = await loadSampleUsageData();
679
- }
680
- else {
681
- const local = await readOptionalLocalSpend(rootPath);
682
- records = local && local.length > 0 ? local : await loadSampleUsageData();
683
- }
814
+ const { records, mode } = await loadInstantReadData(args);
684
815
  const summary = analyzeSpend(records);
685
- const outPath = args.out ? resolve(rootPath, args.out) : join(rootPath, "ai-spend-card.svg");
816
+ const outPath = await resolveReceiptPath(rootPath, args.out);
686
817
  await mkdir(dirname(outPath), { recursive: true });
687
818
  await writeFile(outPath, generateReportCardSvg({ summary, records }), "utf8");
819
+ const dataLine = mode === "demo"
820
+ ? "data: DEMO sample data — run without --sample on a machine with Claude Code/Codex logs for your own numbers."
821
+ : mode === "local-logs"
822
+ ? "data: local Claude Code/Codex logs priced at API-equivalent rates."
823
+ : "data: connected local spend state.";
688
824
  return ok([
689
- "Shareable AI spend report card written (redacted no client/project/user names).",
690
- `card: ${outPath}`,
825
+ "Your AI Receipt a shareable, redacted spend card (no client/project/user names).",
826
+ `receipt: ${outPath}`,
827
+ dataLine,
691
828
  "",
692
829
  "Caption to share:",
693
830
  generateReportCardCaption({ summary, records }),
@@ -732,6 +869,10 @@ async function buildReportInput(stateDir, rootPath) {
732
869
  ]);
733
870
  return {
734
871
  summary: spendState.summary,
872
+ // Evidence ledger is built from the SAME records as the confidence
873
+ // breakdown so the two sections can never contradict each other.
874
+ allRecords: spendState.records ?? [],
875
+ dataMode: spendState.mode,
735
876
  discovery,
736
877
  mappings,
737
878
  sourceRegistry,
@@ -782,6 +923,10 @@ function parseArgs(argv) {
782
923
  parsed.noColor = true;
783
924
  continue;
784
925
  }
926
+ if (arg === "--ignore-state") {
927
+ parsed.ignoreState = true;
928
+ continue;
929
+ }
785
930
  if (arg === "--group-by") {
786
931
  const next = rest[index + 1];
787
932
  if (isGroupByDimension(next)) {
@@ -897,7 +1042,11 @@ function parseArgs(argv) {
897
1042
  if (arg === "--confidence") {
898
1043
  const next = rest[index + 1];
899
1044
  if (next) {
900
- parsed.confidence = Number(next);
1045
+ const value = Number(next);
1046
+ // Reject NaN/out-of-range instead of rendering "NaN% confidence".
1047
+ if (Number.isFinite(value) && value >= 0 && value <= 1) {
1048
+ parsed.confidence = value;
1049
+ }
901
1050
  index += 1;
902
1051
  }
903
1052
  continue;
@@ -958,14 +1107,6 @@ function parseArgs(argv) {
958
1107
  }
959
1108
  continue;
960
1109
  }
961
- if (arg === "--group-by") {
962
- const next = rest[index + 1];
963
- if (isGroupByDimension(next)) {
964
- parsed.groupBy = next;
965
- index += 1;
966
- }
967
- continue;
968
- }
969
1110
  if (arg === "--interval") {
970
1111
  const next = rest[index + 1];
971
1112
  if (next) {
@@ -986,24 +1127,16 @@ function parseArgs(argv) {
986
1127
  return parsed;
987
1128
  }
988
1129
  function sanitizeSecretishError(message, authReference) {
989
- let sanitized = message.replace(/sk-[A-Za-z0-9_-]+/g, "[REDACTED]");
1130
+ // Core's redactSecrets covers sk-*/ghp_*/github_pat_*/JWT/AIza/xox/AKIA and
1131
+ // secret-suffixed env assignments; the sk- fallback keeps short keys covered.
1132
+ let sanitized = redactSecrets(message).replace(/sk-[A-Za-z0-9_-]+/g, "[REDACTED]");
990
1133
  if (authReference && !authReference.startsWith("env:")) {
991
1134
  sanitized = sanitized.split(authReference).join("[REDACTED]");
992
1135
  }
993
1136
  return sanitized;
994
1137
  }
995
- function unsafeScanRootReason(rootPath) {
996
- const homePath = resolve(homedir());
997
- if (rootPath === homePath) {
998
- return "the home directory is too broad for V0 approved-source scanning";
999
- }
1000
- if (rootPath === "/") {
1001
- return "the filesystem root is too broad for V0 approved-source scanning";
1002
- }
1003
- return undefined;
1004
- }
1005
- async function writeLocalSpendState(stateDir, records, summary, mappings) {
1006
- await writeJson(join(stateDir, "spend.json"), { records, summary });
1138
+ async function writeLocalSpendState(stateDir, records, summary, mappings, mode) {
1139
+ await writeJson(join(stateDir, "spend.json"), { mode, records, summary });
1007
1140
  await writeJson(join(stateDir, "mappings.json"), mappings);
1008
1141
  }
1009
1142
  async function readSourceRegistry(stateDir, rootPath) {
@@ -1042,7 +1175,9 @@ async function appendAuditEvent(stateDir, event) {
1042
1175
  catch {
1043
1176
  // Create a fresh local-only audit log if init has not run yet.
1044
1177
  }
1045
- await writeJson(join(stateDir, "audit-log.json"), createScanAuditLog([...auditLog.events, event]));
1178
+ // Cap like watch-history: an unbounded log under cron watch grows forever
1179
+ // and makes every append an ever-larger rewrite.
1180
+ await writeJson(join(stateDir, "audit-log.json"), createScanAuditLog([...auditLog.events, event].slice(-500)));
1046
1181
  }
1047
1182
  async function readJson(path) {
1048
1183
  return JSON.parse(await readFile(path, "utf8"));
@@ -1082,13 +1217,15 @@ function helpText() {
1082
1217
  "",
1083
1218
  "Other commands:",
1084
1219
  " init [--path <dir>] Initialize local state",
1085
- " doctor Check local runtime and safety posture",
1220
+ " doctor Launch-grade diagnostics: data mode, logs found, provider keys, warnings",
1221
+ " reset [--path <dir>] Clear persisted spend state (so sample state can't mask real logs)",
1222
+ " --ignore-state On the default/quickstart run, ignore persisted spend.json for this run",
1086
1223
  " scan [--path <dir>] Scan a local workspace for AI usage signals",
1087
1224
  " scan --sample Include deterministic sample spend analysis",
1088
1225
  " quickstart [--sample] Plain-English 90-second readout (alias of the default run)",
1089
1226
  " [--group-by source|model|client|project|agent|user|workspace|apiKey] Default: model",
1090
1227
  " report [--out <name>] Generate local Markdown and HTML reports",
1091
- " report-card [--out f.svg] Write a redacted, shareable SVG spend card + caption",
1228
+ " report-card [--out f.svg] Write your AI Receipt — a redacted, shareable SVG + caption",
1092
1229
  " apply-artifact Generate coding prompt, action plan, policy/config, verification, demo package",
1093
1230
  "",
1094
1231
  "Cron (production watch): add a crontab entry such as:",
@@ -1140,6 +1277,20 @@ if (invokedAsMain) {
1140
1277
  try {
1141
1278
  result = await runCli(argv);
1142
1279
  }
1280
+ catch (error) {
1281
+ // The product's error voice, never a raw stack trace — and never an
1282
+ // un-redacted secret from a provider payload or file path.
1283
+ const message = sanitizeSecretishError(error instanceof Error ? error.message : String(error));
1284
+ result = {
1285
+ exitCode: 1,
1286
+ stdout: "",
1287
+ stderr: [
1288
+ `ai-spend-agent hit an unexpected error: ${message}`,
1289
+ "Nothing was uploaded; local state is unchanged.",
1290
+ "Try `ai-spend-agent doctor` for diagnostics, or open an issue: https://github.com/futurastudio/ai-spend-agent/issues"
1291
+ ].join("\n")
1292
+ };
1293
+ }
1143
1294
  finally {
1144
1295
  spinner?.stop();
1145
1296
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ai-spend-agent",
3
- "version": "0.1.1",
4
- "description": "Your AI spend in one view, in 90 seconds \u2014 local-first CLI for OpenAI, Anthropic, Cursor, Copilot + Claude Code/Codex session logs, with a ranked savings cut list.",
3
+ "version": "0.1.4",
4
+ "description": "Your AI spend in one view, in 90 seconds local-first CLI for OpenAI, Anthropic, Cursor, Copilot + Claude Code/Codex session logs, with a ranked savings cut list, and flags the tools your agent loads but never uses (dead context).",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -11,7 +11,8 @@
11
11
  "files": [
12
12
  "dist",
13
13
  "!dist/**/*.test.*",
14
- "!dist/**/*.map"
14
+ "!dist/**/*.map",
15
+ "!dist/**/*.tsbuildinfo"
15
16
  ],
16
17
  "license": "MIT",
17
18
  "repository": {
@@ -34,19 +35,22 @@
34
35
  "llm",
35
36
  "token",
36
37
  "billing",
37
- "cli"
38
+ "cli",
39
+ "mcp",
40
+ "claude-code-skills",
41
+ "dead-context"
38
42
  ],
39
43
  "engines": {
40
44
  "node": ">=22"
41
45
  },
42
46
  "scripts": {
43
47
  "build": "tsc -b",
44
- "typecheck": "tsc -b --pretty false"
48
+ "typecheck": "tsc -b --pretty false",
49
+ "prepack": "npm run build"
45
50
  },
46
51
  "dependencies": {
47
- "@agent-finops/core": "0.1.1",
48
- "@agent-finops/report": "0.1.1",
49
- "picocolors": "^1.1.1",
52
+ "@agent-finops/core": "0.1.4",
53
+ "@agent-finops/report": "0.1.4",
50
54
  "yocto-spinner": "^1.2.0"
51
55
  }
52
56
  }
@@ -1 +0,0 @@
1
- {"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/@vitest/pretty-format/dist/index.d.ts","../../../node_modules/@vitest/utils/dist/display.d.ts","../../../node_modules/@vitest/utils/dist/types.d.ts","../../../node_modules/@vitest/utils/dist/helpers.d.ts","../../../node_modules/@vitest/utils/dist/timers.d.ts","../../../node_modules/@vitest/utils/dist/index.d.ts","../../../node_modules/@vitest/utils/dist/types.d-bcelap-c.d.ts","../../../node_modules/@vitest/utils/dist/diff.d.ts","../../../node_modules/@vitest/runner/dist/tasks.d-deyaimiu.d.ts","../../../node_modules/@vitest/runner/dist/index.d.ts","../../../node_modules/vitest/dist/chunks/traces.d.d2t_r8rx.d.ts","../../../node_modules/vite/types/hmrpayload.d.ts","../../../node_modules/vite/dist/node/chunks/modulerunnertransport.d.ts","../../../node_modules/vite/types/customevent.d.ts","../../../node_modules/vite/types/hot.d.ts","../../../node_modules/vite/dist/node/module-runner.d.ts","../../../node_modules/@vitest/snapshot/dist/environment.d-dojxxzv9.d.ts","../../../node_modules/@vitest/snapshot/dist/rawsnapshot.d-d_x3-62x.d.ts","../../../node_modules/@vitest/snapshot/dist/index.d.ts","../../../node_modules/vitest/dist/chunks/config.d.a1h_y6jt.d.ts","../../../node_modules/vitest/dist/chunks/environment.d.crsxczp1.d.ts","../../../node_modules/vitest/dist/chunks/rpc.d.b_8spu0w.d.ts","../../../node_modules/vitest/dist/chunks/worker.d.zphpo4yb.d.ts","../../../node_modules/vitest/dist/chunks/browser.d.bcoexmfg.d.ts","../../../node_modules/@vitest/spy/optional-types.d.ts","../../../node_modules/@vitest/spy/dist/index.d.ts","../../../node_modules/tinyrainbow/dist/index.d.ts","../../../node_modules/@standard-schema/spec/dist/index.d.ts","../../../node_modules/@types/deep-eql/index.d.ts","../../../node_modules/assertion-error/index.d.ts","../../../node_modules/@types/chai/index.d.ts","../../../node_modules/@vitest/expect/dist/index.d.ts","../../../node_modules/@vitest/runner/dist/utils.d.ts","../../../node_modules/tinybench/dist/index.d.ts","../../../node_modules/vitest/dist/chunks/benchmark.d.daahlpsq.d.ts","../../../node_modules/vitest/dist/chunks/global.d.dvssrdq5.d.ts","../../../node_modules/vitest/optional-runtime-types.d.ts","../../../node_modules/@vitest/mocker/dist/types.d-bji5eawu.d.ts","../../../node_modules/@vitest/mocker/dist/index.d-b41z0auw.d.ts","../../../node_modules/@vitest/mocker/dist/index.d.ts","../../../node_modules/vitest/dist/chunks/suite.d.udjtyagw.d.ts","../../../node_modules/vitest/dist/chunks/evaluatedmodules.d.bxj5omdx.d.ts","../../../node_modules/vitest/dist/runners.d.ts","../../../node_modules/expect-type/dist/utils.d.ts","../../../node_modules/expect-type/dist/overloads.d.ts","../../../node_modules/expect-type/dist/branding.d.ts","../../../node_modules/expect-type/dist/messages.d.ts","../../../node_modules/expect-type/dist/index.d.ts","../../../node_modules/vitest/dist/index.d.ts","../../../node_modules/zod/v4/core/json-schema.d.cts","../../../node_modules/zod/v4/core/standard-schema.d.cts","../../../node_modules/zod/v4/core/registries.d.cts","../../../node_modules/zod/v4/core/to-json-schema.d.cts","../../../node_modules/zod/v4/core/util.d.cts","../../../node_modules/zod/v4/core/versions.d.cts","../../../node_modules/zod/v4/core/schemas.d.cts","../../../node_modules/zod/v4/core/checks.d.cts","../../../node_modules/zod/v4/core/errors.d.cts","../../../node_modules/zod/v4/core/core.d.cts","../../../node_modules/zod/v4/core/parse.d.cts","../../../node_modules/zod/v4/core/regexes.d.cts","../../../node_modules/zod/v4/locales/ar.d.cts","../../../node_modules/zod/v4/locales/az.d.cts","../../../node_modules/zod/v4/locales/be.d.cts","../../../node_modules/zod/v4/locales/bg.d.cts","../../../node_modules/zod/v4/locales/ca.d.cts","../../../node_modules/zod/v4/locales/cs.d.cts","../../../node_modules/zod/v4/locales/da.d.cts","../../../node_modules/zod/v4/locales/de.d.cts","../../../node_modules/zod/v4/locales/el.d.cts","../../../node_modules/zod/v4/locales/en.d.cts","../../../node_modules/zod/v4/locales/eo.d.cts","../../../node_modules/zod/v4/locales/es.d.cts","../../../node_modules/zod/v4/locales/fa.d.cts","../../../node_modules/zod/v4/locales/fi.d.cts","../../../node_modules/zod/v4/locales/fr.d.cts","../../../node_modules/zod/v4/locales/fr-ca.d.cts","../../../node_modules/zod/v4/locales/he.d.cts","../../../node_modules/zod/v4/locales/hr.d.cts","../../../node_modules/zod/v4/locales/hu.d.cts","../../../node_modules/zod/v4/locales/hy.d.cts","../../../node_modules/zod/v4/locales/id.d.cts","../../../node_modules/zod/v4/locales/is.d.cts","../../../node_modules/zod/v4/locales/it.d.cts","../../../node_modules/zod/v4/locales/ja.d.cts","../../../node_modules/zod/v4/locales/ka.d.cts","../../../node_modules/zod/v4/locales/kh.d.cts","../../../node_modules/zod/v4/locales/km.d.cts","../../../node_modules/zod/v4/locales/ko.d.cts","../../../node_modules/zod/v4/locales/lt.d.cts","../../../node_modules/zod/v4/locales/mk.d.cts","../../../node_modules/zod/v4/locales/ms.d.cts","../../../node_modules/zod/v4/locales/nl.d.cts","../../../node_modules/zod/v4/locales/no.d.cts","../../../node_modules/zod/v4/locales/ota.d.cts","../../../node_modules/zod/v4/locales/ps.d.cts","../../../node_modules/zod/v4/locales/pl.d.cts","../../../node_modules/zod/v4/locales/pt.d.cts","../../../node_modules/zod/v4/locales/ro.d.cts","../../../node_modules/zod/v4/locales/ru.d.cts","../../../node_modules/zod/v4/locales/sl.d.cts","../../../node_modules/zod/v4/locales/sv.d.cts","../../../node_modules/zod/v4/locales/ta.d.cts","../../../node_modules/zod/v4/locales/th.d.cts","../../../node_modules/zod/v4/locales/tr.d.cts","../../../node_modules/zod/v4/locales/ua.d.cts","../../../node_modules/zod/v4/locales/uk.d.cts","../../../node_modules/zod/v4/locales/ur.d.cts","../../../node_modules/zod/v4/locales/uz.d.cts","../../../node_modules/zod/v4/locales/vi.d.cts","../../../node_modules/zod/v4/locales/zh-cn.d.cts","../../../node_modules/zod/v4/locales/zh-tw.d.cts","../../../node_modules/zod/v4/locales/yo.d.cts","../../../node_modules/zod/v4/locales/index.d.cts","../../../node_modules/zod/v4/core/doc.d.cts","../../../node_modules/zod/v4/core/api.d.cts","../../../node_modules/zod/v4/core/json-schema-processors.d.cts","../../../node_modules/zod/v4/core/json-schema-generator.d.cts","../../../node_modules/zod/v4/core/index.d.cts","../../../node_modules/zod/v4/classic/errors.d.cts","../../../node_modules/zod/v4/classic/parse.d.cts","../../../node_modules/zod/v4/classic/schemas.d.cts","../../../node_modules/zod/v4/classic/checks.d.cts","../../../node_modules/zod/v4/classic/compat.d.cts","../../../node_modules/zod/v4/classic/from-json-schema.d.cts","../../../node_modules/zod/v4/classic/iso.d.cts","../../../node_modules/zod/v4/classic/coerce.d.cts","../../../node_modules/zod/v4/classic/external.d.cts","../../../node_modules/zod/index.d.cts","../../core/dist/schema.d.ts","../../core/dist/analyze.d.ts","../../core/dist/attribution.d.ts","../../core/dist/credentialdetection.d.ts","../../core/dist/cutlist.d.ts","../../core/dist/discovery.d.ts","../../core/dist/insights.d.ts","../../core/dist/modelpricing.d.ts","../../core/dist/localagentlogs.d.ts","../../core/dist/planmath.d.ts","../../core/dist/sampledata.d.ts","../../core/dist/sourceregistry.d.ts","../../core/dist/providerconnectors.d.ts","../../core/dist/index.d.ts","../../report/dist/terminal.d.ts","../../report/dist/reportcard.d.ts","../../report/dist/index.d.ts","../../../node_modules/yocto-spinner/index.d.ts","../src/index.ts","../src/index.test.ts","../../../node_modules/@types/estree/index.d.ts","../../../node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/file.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/filereader.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/sqlite.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/index.d.ts","../../../../node_modules/@types/connect/index.d.ts","../../../../node_modules/@types/estree/index.d.ts","../../../../node_modules/@types/json-schema/index.d.ts","../../../../node_modules/@types/eslint/use-at-your-own-risk.d.ts","../../../../node_modules/@types/eslint/index.d.ts","../../../../node_modules/@types/eslint-scope/index.d.ts","../../../../node_modules/@types/mysql/index.d.ts","../../../../node_modules/pg-types/index.d.ts","../../../../node_modules/pg-protocol/dist/messages.d.ts","../../../../node_modules/pg-protocol/dist/serializer.d.ts","../../../../node_modules/pg-protocol/dist/parser.d.ts","../../../../node_modules/pg-protocol/dist/index.d.ts","../../../../node_modules/@types/pg/lib/type-overrides.d.ts","../../../../node_modules/@types/pg/index.d.ts","../../../../node_modules/@types/pg-pool/index.d.ts","../../../../node_modules/@types/phoenix/index.d.ts","../../../../node_modules/@types/tedious/index.d.ts","../../../../node_modules/@types/ws/index.d.ts"],"fileIdsList":[[213,261,278,279],[86,87,213,261,278,279],[213,258,259,261,278,279],[213,260,261,278,279],[261,278,279],[213,261,266,278,279,296],[213,261,262,267,272,278,279,281,293,304],[213,261,262,263,272,278,279,281],[208,209,210,213,261,278,279],[213,261,264,278,279,305],[213,261,265,266,273,278,279,282],[213,261,266,278,279,293,301],[213,261,267,269,272,278,279,281],[213,260,261,268,278,279],[213,261,269,270,278,279],[213,261,271,272,278,279],[213,260,261,272,278,279],[213,261,272,273,274,278,279,293,304],[213,261,272,273,274,278,279,288,293,296],[213,254,261,269,272,275,278,279,281,293,304],[213,261,272,273,275,276,278,279,281,293,301,304],[213,261,275,277,278,279,293,301,304],[211,212,213,214,215,216,217,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310],[213,261,272,278,279],[213,261,278,279,280,304],[213,261,269,272,278,279,281,293],[213,261,278,279,282],[213,261,278,279,283],[213,260,261,278,279,284],[213,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310],[213,261,278,279,286],[213,261,278,279,287],[213,261,272,278,279,288,289],[213,261,278,279,288,290,305,307],[213,261,273,278,279],[213,261,272,278,279,293,294,296],[213,261,278,279,295,296],[213,261,278,279,293,294],[213,261,278,279,296],[213,261,278,279,297],[213,258,261,278,279,293,298,304],[213,261,272,278,279,299,300],[213,261,278,279,299,300],[213,261,266,278,279,281,293,301],[213,261,278,279,302],[213,261,278,279,281,303],[213,261,275,278,279,287,304],[213,261,266,278,279,305],[213,261,278,279,293,306],[213,261,278,279,280,307],[213,261,278,279,308],[213,254,261,278,279],[213,254,261,272,274,278,279,284,293,296,304,306,307,309],[213,261,278,279,293,310],[59,65,83,84,85,88,213,261,278,279],[95,213,261,278,279],[95,96,213,261,278,279],[63,65,66,213,261,278,279],[63,65,213,261,278,279],[63,213,261,278,279],[58,63,74,75,213,261,278,279],[58,63,74,213,261,278,279],[82,213,261,278,279],[58,64,213,261,278,279],[58,213,261,278,279],[60,213,261,278,279],[58,59,60,61,62,213,261,278,279],[101,102,213,261,278,279],[101,102,103,104,213,261,278,279],[101,103,213,261,278,279],[101,213,261,278,279],[213,226,230,261,278,279,304],[213,226,261,278,279,293,304],[213,221,261,278,279],[213,223,226,261,278,279,301,304],[213,261,278,279,281,301],[213,261,278,279,311],[213,221,261,278,279,311],[213,223,226,261,278,279,281,304],[213,218,219,222,225,261,272,278,279,293,304],[213,226,233,261,278,279],[213,218,224,261,278,279],[213,226,247,248,261,278,279],[213,222,226,261,278,279,296,304,311],[213,247,261,278,279,311],[213,220,221,261,278,279,311],[213,226,261,278,279],[213,220,221,222,223,224,225,226,227,228,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,248,249,250,251,252,253,261,278,279],[213,226,241,261,278,279],[213,226,233,234,261,278,279],[213,224,226,234,235,261,278,279],[213,225,261,278,279],[213,218,221,226,261,278,279],[213,226,230,234,235,261,278,279],[213,230,261,278,279],[213,224,226,229,261,278,279,304],[213,218,223,226,233,261,278,279],[213,261,278,279,293],[213,221,226,247,261,278,279,309,311],[69,213,261,278,279],[69,70,71,72,213,261,278,279],[71,213,261,278,279],[67,90,91,93,213,261,278,279],[67,68,80,93,213,261,278,279],[58,65,67,68,76,93,213,261,278,279],[73,213,261,278,279],[58,67,68,76,89,92,93,213,261,278,279],[67,68,73,76,93,213,261,278,279],[67,90,91,92,93,213,261,278,279],[67,73,77,78,79,93,213,261,278,279],[58,63,65,67,68,73,76,77,78,79,80,81,83,89,90,91,92,93,94,97,98,99,100,105,213,261,278,279],[58,65,67,68,76,77,90,91,92,93,98,213,261,278,279],[185,213,261,278,279],[176,213,261,278,279],[176,179,213,261,278,279],[111,171,174,176,177,178,179,180,181,182,183,184,213,261,278,279],[107,109,179,213,261,278,279],[176,177,213,261,278,279],[108,176,178,213,261,278,279],[109,111,113,114,115,116,213,261,278,279],[111,113,115,116,213,261,278,279],[111,113,115,213,261,278,279],[108,111,113,114,116,213,261,278,279],[107,109,110,111,112,113,114,115,116,117,118,171,172,173,174,175,213,261,278,279],[107,109,110,113,213,261,278,279],[109,110,113,213,261,278,279],[113,116,213,261,278,279],[107,108,110,111,112,114,115,116,213,261,278,279],[107,108,109,113,176,213,261,278,279],[113,114,115,116,213,261,278,279],[115,213,261,278,279],[119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,213,261,278,279],[106,205,213,261,274,278,279,282,283],[200,203,204,213,261,273,274,278,279,282,283,304],[187,213,261,278,279],[187,188,189,190,191,192,193,194,195,196,197,198,199,213,261,278,279],[187,194,213,261,278,279],[187,198,213,261,278,279],[186,213,261,278,279],[192,213,261,278,279],[200,201,202,213,261,278,279],[200,213,261,278,279],[213,261,275,278,279,311],[213,261,278,279,313,316],[213,261,278,279,313,314,315],[213,261,278,279,316],[213,261,272,278,279,293,301,311],[213,261,278,279,325],[213,261,272,278,279,293,301,311,319,320,323,324,325],[213,261,272,278,279,301,311],[213,261,272,275,277,278,279,281,293,301,304,310,311],[213,261,278,279,311,320,321,322],[213,261,278,279,293,311,320]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"3a582c6e8906f5b094ccf0de6cc6f4f8a54b05a34f52517aba5c9c7f704f6b28","impliedFormat":99},{"version":"0528f6d21f7a02d4092895090d2dd86104bd5a3e79eced96d5a1a7dd90943d17","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"72ce5b734c05da85c85a6f6dc05823b051d6aa41acaedeeb1d17c72f3b4efa72","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"49ab4f1d153a252779958fc87b700743d32b5ffa42addd70ae23ad3f429daa5c","impliedFormat":99},{"version":"53cf4076f42b29b8d411259d168d51b3a0274c42c8814e5b44dfa8803a35d4fc","impliedFormat":99},{"version":"a39461ee1f27cf3e6cfd63d21045713d26d521da55ea4d8efccb705f689e6dbb","impliedFormat":99},{"version":"61bb64660ee150f3ab618340e15cca0a81664801bede7c966ca0eca3a952fe63","impliedFormat":99},{"version":"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","impliedFormat":99},{"version":"16fe60bb544cfedfd2b5bb2f7d0b3957be7978706d57d9f06edc9c0c8dbdba23","impliedFormat":99},{"version":"de4a612aa8f1704af486f701e21993c786ba7d8cfed55fffa6684026aea2346e","impliedFormat":99},{"version":"4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","impliedFormat":99},{"version":"8887e70871f697fa42ad7cdf32168db60ec2d6760c173c97973e35377fe5d83b","impliedFormat":99},{"version":"42a12f2faa483c9b48195ed794d22698162274e755f6e07219c2351c4f08d732","impliedFormat":99},{"version":"ec0c42bb0f465e4993f2bc68a6ce9df9a2dcbc7b83e21748f82f1b69561938e3","impliedFormat":99},{"version":"f50ff37a9cbbe74475f426474d9827083c7c2c138a954d28f1690df338f69291","impliedFormat":99},{"version":"61fd6c17235d530c40f543dd7c40afab091d91c1ef890baeed30db6d82b04b28","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"091767bc841f937654ed597d49e023ed59850355e746ae1a6f20ab31076ee1fb","impliedFormat":99},{"version":"19c6d6135af59693698d384050b45a8a049493500add442f58e4bd7c8a255ab6","impliedFormat":99},{"version":"6a0dba12d55314638a8c51108b20fe2f68f1364a619d098918bda91c22dec154","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"4ead13a482c539b77394b2a97e3b877b809eac596390371cea490286f53b996a","impliedFormat":99},{"version":"06db2f8ba1d1dfacf04529cb731081ab23f133f29c7608ebdfbcab356996827c","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"5c935b7fc4ddc1410ea1cd7cd4e35ed106a6e4920dd27a9480a40fd224359dc3","affectsGlobalScope":true,"impliedFormat":99},{"version":"2b39c6cf59088713babbfc3e20ee85f1375d40e66953156fa658346b8346f24f","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"4ffba3c5848b4fe62ee59b754fd5f256ad9656a0db6d37b9a2a8cb40dfc7ac21","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"5e2ba3d18d78aebbde1f34bde356e41e9c76eeaeaeee56a37036596a9eff4211","impliedFormat":99},{"version":"8280ae8ccc0493b32d1742d585357ab9f0a508ea050af25a5a20d64010d0a5cf","impliedFormat":99},{"version":"7adfd9f9056ecd4ae6c65fde2a98654960c662714c73f048478959d04c09e144","impliedFormat":99},{"version":"32b35cf0dc3a1b1a7118b61c34ce2ad1a29695851679f9ec34e0776f2ece2a69","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"59e5e964b84fdb2378e9455e4e59405030e4ed2b4c6f891ce395f17796af3cbb","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"90ba95a763101bb61b8a799731a2ed60b5016b8135c1a2d5186862d4b534d4a1","impliedFormat":99},{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"835fb2909ce458740fb4a49fc61709896c6864f5ce3db7f0a88f06c720d74d02","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"ead8e39c2e11891f286b06ae2aa71f208b1802661fcdb2425cffa4f494a68854","impliedFormat":1},{"version":"40ba6c32eb732a09e4446ade5cb6ad0c147f186f9c9dc6878b90b4418ad9f6ea","impliedFormat":1},{"version":"fdd814741843f85c98281522c58f5a646590ba9019fad2efaa95987655e0611b","impliedFormat":1},{"version":"c78aff4fb58b28b8f642d5095fc7eeb79f00e652a67caa19693af1adabb833c9","impliedFormat":1},{"version":"f80a08ced8818dc99359c0acd5b3f12762e1ce53758007759b0d4e503cbf4a5e","impliedFormat":1},{"version":"37935fa7564bcc6e0bc845b766a24391098d26f7c8245d6e8ab37bc016816e94","impliedFormat":1},{"version":"68add36d9632bc096d7245d24d6b0b8ad5f125183016102a3dad4c9c2438ccb0","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"0f8a263f4c8595c8a07de52e3f3927640c44386c1aa2984de9eae50d75e613b2","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"346fffde7c32da87c2196eb7494422449dc2ca82d3b4e6bf55be1d1a33ffc2b0","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"8b5875e4958528042103fdd775e106a7f76bafc29709f0690df9a7d2241d52a7","impliedFormat":1},{"version":"2f67911e4bf4e0717dc2ded248ce2d5e4398d945ee13889a6852c1233ea41508","impliedFormat":1},{"version":"d8430c275b0f59417ea8e173cfb888a4477b430ec35b595bf734f3ec7a7d729f","impliedFormat":1},{"version":"69364df1c776372d7df1fb46a6cb3a6bf7f55e700f533a104e3f9d70a32bec18","impliedFormat":1},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"aef26cf95593c8ace1c62c4724f9afac77bdfa756fb8a00613cd152117cb2f43","impliedFormat":1},{"version":"30db853bb2e60170ba11e39ab48bacecb32d06d4def89eedf17e58ebab762a65","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"2316301dd223d31962d917999acf8e543e0119c5d24ec984c9f22cb23247160c","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"268fd6d9f2e807a39a6c5aa654b00f949feb63d3faa7dd0f9bba7dde9172159c","impliedFormat":1},{"version":"29f823cbe0166e10e7176a94afe609a24b9e5af3858628c541ff8ce1727023cd","impliedFormat":1},{"version":"a5194013944aca9b1d1c87feb83e17842d1eb9302b5c0c2aa48b0d7bf3de977e","impliedFormat":99},{"version":"91c63d7ab35dda5e1fc0f108ba63685182797caf49d73518888866589b76e65d","impliedFormat":99},{"version":"b189ba3ac9b702e1c1440aab535ff9735a8c5e1e76ceff32b3be1f71aa3e24ea","impliedFormat":99},{"version":"6d2081dc088d63c090a4e72fa74e9464f8293c2b2e2e214b33122bcc83102da3","impliedFormat":99},{"version":"99f6bae51b6d92aa3c82c4eddeb1fb0dd9e8c79fd8c9e215384e9d9d33e16459","impliedFormat":99},{"version":"5f5c1a6af7f8a0f6277eac8ed511a649d2977f93035399ff8340e39f720d8f98","impliedFormat":99},{"version":"6f3bcde90a7a82c91e2757c732efdc0066af8c2843270120088cbeeb75458a82","impliedFormat":99},{"version":"2ac2da1e33b6e75fcdd4d3083ccdc80d655afc773c23fd287bb3e4c21aadc8bd","impliedFormat":99},{"version":"a007112612b57b38fda50dca4294ede7c6004add875baf63a4e8c2fc39bf1c41","impliedFormat":99},{"version":"60b9f82505847a344680b80eb6614c3b154e5f855c4c01f2edbc8c2eaf7fa05f","impliedFormat":99},{"version":"c0f42dc93ed28853879744e831c883c41b4489b09da29b84e9c3265665ad1f26","impliedFormat":99},{"version":"7b72f835f11156a4916bc91da9e39d2a3fe52672abdea58b5f5fb5e260ef792c","impliedFormat":99},{"version":"80b719b1cfc00209ef957ef5e1f41694df2cf69db0b2b6142255bcb3ea946969","impliedFormat":99},{"version":"4e85de715f019f09d5100da791d833d2a96ecec0834a53ad8a7b253c1e979e1e","impliedFormat":99},{"version":"e8d11186804572d5170adee928c9fefca0fb1734f640f54fbb2434ede3a9fc55","impliedFormat":99},{"version":"fd1547111267e602eed65ad064e0bcf67c7da724f7e437b860247f27742cbae4","impliedFormat":99},{"version":"60d298b0d0f73fddd5c8f4a39cd2474dd10a8b5c7376337d500f6a35a1ce5afd","impliedFormat":99},{"version":"8c110b8f14d668f4c466dab0c35937efe81d5c896fac03eb08e7e084b8dfdccc","impliedFormat":99},{"version":"8e1fb5200d912c410767b9ffe183f20226facd7f95e07b6c5ae79164ce4c3900","signature":"57374c3aab19ab03882ad61d985ef3bbc870060fd9be9ba229ac5a042bda8b44","impliedFormat":99},{"version":"6e911289e7092b4d956de305ec5b8968f19df549c18b757bf147602a7d3d32bc","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"751764bb94219b4ce8f5475dc35d3de2e432fea01a0c9610cd7f69ad05e398c6","impliedFormat":1},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"58647d85d0f722a1ce9de50955df60a7489f0593bf1a7015521efe901c06d770","impliedFormat":1},{"version":"73b5fa37db36eeac90c4d752e39586f1b57187400c4f5280fd05f16437287a45","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"80523c00b8544a2000ae0143e4a90a00b47f99823eb7926c1e03c494216fc363","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"746911b62b329587939560deb5c036aca48aece03147b021fa680223255d5183","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c8d3e5a18ba35629954e48c4cc8f11dc88224650067a172685c736b27a34a4dc","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2b55d426ff2b9087485e52ac4bc7cfafe1dc420fc76dad926cd46526567c501a","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"a4a39b5714adfcadd3bbea6698ca2e942606d833bde62ad5fb6ec55f5e438ff8","impliedFormat":1},{"version":"bbc1d029093135d7d9bfa4b38cbf8761db505026cc458b5e9c8b74f4000e5e75","impliedFormat":1},{"version":"1f68ab0e055994eb337b67aa87d2a15e0200951e9664959b3866ee6f6b11a0fe","impliedFormat":1},{"version":"4113fcb657953db88a125082f517a4b51083526a18765e90f2401a5dbb864d7e","impliedFormat":1},{"version":"f60e3e3060207ac982da13363181fd7ee4beecc19a7c569f0d6bb034331066c2","impliedFormat":1},{"version":"17230b34bb564a3a2e36f9d3985372ccab4ad1722df2c43f7c5c2b553f68e5db","impliedFormat":1},{"version":"6e5c9272f6b3783be7bdddaf207cccdb8e033be3d14c5beacc03ae9d27d50929","impliedFormat":1},{"version":"9b4f7ff9681448c72abe38ea8eefd7ffe0c3aefe495137f02012a08801373f71","impliedFormat":1},{"version":"0dfe35191a04e8f9dc7caeb9f52f2ee07402736563d12cbccd15fb5f31ac877f","impliedFormat":1},{"version":"798367363a3274220cbed839b883fe2f52ba7197b25e8cb2ac59c1e1fd8af6b7","impliedFormat":1},{"version":"6ded4be4f8a693d0c1646dfa2f1b6582e34b73c66ce334cb5e86c7bf8c2e52b7","impliedFormat":1},{"version":"b3a24e1c22dd4fde2ce413fb8244e5fa8773ffca88e8173c780845c9856aef73","impliedFormat":1},{"version":"f4ae5546352701fd6932fdd86419438bb51253e4627a44808489742035bac644","impliedFormat":1},{"version":"c130f9616a960edc892aa0eb7a8a59f33e662c561474ed092c43a955cdb91dab","impliedFormat":1},{"version":"1ba59c8bbeed2cb75b239bb12041582fa3e8ef32f8d0bd0ec802e38442d3f317","impliedFormat":1}],"root":[205,206],"options":{"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":199,"outDir":"./","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9,"tsBuildInfoFile":"./tsconfig.tsbuildinfo"},"referencedMap":[[85,1],[88,2],[86,1],[207,1],[258,3],[259,3],[260,4],[213,5],[261,6],[262,7],[263,8],[208,1],[211,9],[209,1],[210,1],[264,10],[265,11],[266,12],[267,13],[268,14],[269,15],[270,15],[271,16],[272,17],[273,18],[274,19],[214,1],[212,1],[275,20],[276,21],[277,22],[311,23],[278,24],[279,1],[280,25],[281,26],[282,27],[283,28],[284,29],[285,30],[286,31],[287,32],[288,33],[289,33],[290,34],[291,1],[292,35],[293,36],[295,37],[294,38],[296,39],[297,40],[298,41],[299,42],[300,43],[301,44],[302,45],[303,46],[304,47],[305,48],[306,49],[307,50],[308,51],[215,1],[216,1],[217,1],[255,52],[256,1],[257,1],[309,53],[310,54],[89,55],[96,56],[97,57],[95,1],[58,1],[67,58],[66,59],[90,58],[74,60],[76,61],[75,62],[83,63],[82,1],[65,64],[59,65],[61,66],[63,67],[62,1],[64,65],[60,1],[87,1],[103,68],[105,69],[104,70],[102,71],[101,1],[91,1],[84,1],[56,1],[57,1],[11,1],[10,1],[2,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[3,1],[20,1],[21,1],[4,1],[22,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[5,1],[30,1],[31,1],[32,1],[33,1],[6,1],[37,1],[34,1],[35,1],[36,1],[38,1],[7,1],[39,1],[44,1],[45,1],[40,1],[41,1],[42,1],[43,1],[8,1],[49,1],[46,1],[47,1],[48,1],[50,1],[9,1],[51,1],[52,1],[53,1],[55,1],[54,1],[1,1],[233,72],[243,73],[232,72],[253,74],[224,75],[223,76],[252,77],[246,78],[251,79],[226,80],[240,81],[225,82],[249,83],[221,84],[220,77],[250,85],[222,86],[227,87],[228,1],[231,87],[218,1],[254,88],[244,89],[235,90],[236,91],[238,92],[234,93],[237,94],[247,77],[229,95],[230,96],[239,97],[219,98],[242,89],[241,87],[245,1],[248,99],[70,100],[73,101],[71,100],[69,1],[72,102],[92,103],[81,104],[77,105],[78,60],[99,106],[93,107],[79,108],[98,109],[68,1],[80,110],[106,111],[100,112],[94,1],[204,98],[186,113],[180,114],[184,115],[181,115],[177,114],[185,116],[182,117],[183,115],[178,118],[179,119],[173,120],[114,121],[116,122],[172,1],[115,123],[176,124],[175,125],[174,126],[107,1],[117,121],[118,1],[109,127],[113,128],[108,1],[110,129],[111,130],[112,1],[119,131],[120,131],[121,131],[122,131],[123,131],[124,131],[125,131],[126,131],[127,131],[128,131],[129,131],[130,131],[131,131],[132,131],[134,131],[133,131],[135,131],[136,131],[137,131],[138,131],[139,131],[171,132],[140,131],[141,131],[142,131],[143,131],[144,131],[145,131],[146,131],[147,131],[148,131],[149,131],[150,131],[151,131],[152,131],[154,131],[153,131],[155,131],[156,131],[157,131],[158,131],[159,131],[160,131],[161,131],[162,131],[163,131],[164,131],[165,131],[166,131],[167,131],[170,131],[168,131],[169,131],[206,133],[205,134],[188,135],[189,135],[190,1],[191,135],[192,1],[200,136],[193,135],[195,137],[194,1],[196,135],[199,138],[197,135],[187,139],[198,140],[203,141],[202,142],[201,142],[312,143],[317,144],[316,145],[315,146],[313,1],[314,1],[318,147],[326,148],[325,149],[324,148],[327,1],[328,150],[329,151],[323,152],[320,77],[322,153],[321,1],[319,1]],"latestChangedDtsFile":"./index.test.d.ts","version":"5.9.3"}