@slkiser/opencode-quota 2.11.1 → 2.13.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.
- package/README.md +45 -16
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/anthropic.d.ts +44 -34
- package/dist/lib/anthropic.d.ts.map +1 -1
- package/dist/lib/anthropic.js +393 -117
- package/dist/lib/anthropic.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +9 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/entries.d.ts +1 -0
- package/dist/lib/entries.d.ts.map +1 -1
- package/dist/lib/minimax-auth.d.ts +29 -0
- package/dist/lib/minimax-auth.d.ts.map +1 -0
- package/dist/lib/minimax-auth.js +61 -0
- package/dist/lib/minimax-auth.js.map +1 -0
- package/dist/lib/provider-metadata.d.ts.map +1 -1
- package/dist/lib/provider-metadata.js +2 -0
- package/dist/lib/provider-metadata.js.map +1 -1
- package/dist/lib/quota-status.d.ts +1 -0
- package/dist/lib/quota-status.d.ts.map +1 -1
- package/dist/lib/quota-status.js +61 -0
- package/dist/lib/quota-status.js.map +1 -1
- package/dist/lib/types.d.ts +22 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +1 -0
- package/dist/lib/types.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +52 -23
- package/dist/plugin.js.map +1 -1
- package/dist/providers/anthropic.d.ts +2 -4
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +10 -6
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/minimax-coding-plan.d.ts +19 -0
- package/dist/providers/minimax-coding-plan.d.ts.map +1 -0
- package/dist/providers/minimax-coding-plan.js +219 -0
- package/dist/providers/minimax-coding-plan.js.map +1 -0
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +2 -0
- package/dist/providers/registry.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
- Automatic quota toasts after assistant responses
|
|
6
6
|
- Manual `/quota`, `/pricing_refresh`, and `/tokens_*` commands for deeper local reporting with zero context window pollution
|
|
7
7
|
|
|
8
|
-
**Quota providers**: Anthropic (Claude), GitHub Copilot, OpenAI (Plus/Pro), Cursor, Qwen Code, Alibaba Coding Plan, Chutes AI, Firmware AI, Google Antigravity, Z.ai coding plan, and NanoGPT.
|
|
8
|
+
**Quota providers**: Anthropic (Claude), GitHub Copilot, OpenAI (Plus/Pro), Cursor, Qwen Code, Alibaba Coding Plan, MiniMax Coding Plan, Chutes AI, Firmware AI, Google Antigravity, Z.ai coding plan, and NanoGPT.
|
|
9
9
|
|
|
10
10
|
**Token reports**: All models and providers in [models.dev](https://models.dev), plus deterministic local pricing for Cursor Auto/Composer and Cursor model aliases that are not on models.dev.
|
|
11
11
|
|
|
@@ -78,7 +78,7 @@ That is enough for most installs. Providers are auto-detected from your existing
|
|
|
78
78
|
|
|
79
79
|
| Provider | Auto setup | How it works |
|
|
80
80
|
| --- | --- | --- |
|
|
81
|
-
| **Anthropic (Claude)** | Needs [quick setup](#anthropic-quick-setup) | Claude
|
|
81
|
+
| **Anthropic (Claude)** | Needs [quick setup](#anthropic-quick-setup) | Local Claude CLI auth/status probe. |
|
|
82
82
|
| **GitHub Copilot** | Usually | OpenCode auth; PAT only for managed billing. |
|
|
83
83
|
| **OpenAI** | Yes | OpenCode auth. |
|
|
84
84
|
| **Cursor** | Needs [quick setup](#cursor-quick-setup) | Companion auth plugin + `provider.cursor`. |
|
|
@@ -89,25 +89,24 @@ That is enough for most installs. Providers are auto-detected from your existing
|
|
|
89
89
|
| **NanoGPT** | Usually | User/global OpenCode config, env, or auth.json. |
|
|
90
90
|
| **Google Antigravity** | Needs [quick setup](#google-antigravity-quick-setup) | Companion auth plugin. |
|
|
91
91
|
| **Z.ai** | Yes | OpenCode auth. |
|
|
92
|
+
| **MiniMax Coding Plan** | Yes | Existing OpenCode provider config + auth.json `minimax-coding-plan` section. |
|
|
92
93
|
|
|
93
94
|
<a id="anthropic-quick-setup"></a>
|
|
94
95
|
<details>
|
|
95
96
|
<summary><strong>Quick setup: Anthropic (Claude)</strong></summary>
|
|
96
97
|
|
|
97
|
-
Anthropic quota support
|
|
98
|
+
Anthropic quota support now checks the local Claude CLI instead of passing Claude consumer OAuth tokens directly to Anthropic APIs.
|
|
98
99
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
1. `~/.claude/.credentials.json` → `claudeAiOauth.accessToken`
|
|
102
|
-
2. `CLAUDE_CODE_OAUTH_TOKEN` environment variable
|
|
100
|
+
If Claude Code is already installed and authenticated, this usually works automatically. Otherwise:
|
|
103
101
|
|
|
104
|
-
|
|
102
|
+
1. Install Claude Code so `claude` is available on your `PATH`.
|
|
103
|
+
2. Run `claude auth login`.
|
|
104
|
+
3. Confirm `claude auth status` succeeds locally.
|
|
105
|
+
4. Confirm OpenCode is configured with the `anthropic` provider.
|
|
105
106
|
|
|
106
|
-
If Claude
|
|
107
|
+
If Claude lives at a custom path, set `experimental.quotaToast.anthropicBinaryPath`. The default is `claude`.
|
|
107
108
|
|
|
108
|
-
|
|
109
|
-
2. If needed, set `CLAUDE_CODE_OAUTH_TOKEN` manually as a fallback.
|
|
110
|
-
3. Confirm OpenCode is configured with the `anthropic` provider.
|
|
109
|
+
If you use Anthropic via API key in OpenCode, model usage still works normally. This plugin only shows Anthropic quota rows when the local Claude CLI exposes quota windows.
|
|
111
110
|
|
|
112
111
|
For behavior details and troubleshooting, see [Anthropic notes](#anthropic-notes).
|
|
113
112
|
|
|
@@ -202,14 +201,18 @@ There is no `/token` command. The reporting commands are the `/tokens_*` family.
|
|
|
202
201
|
<details>
|
|
203
202
|
<summary><strong>Anthropic (Claude)</strong></summary>
|
|
204
203
|
|
|
205
|
-
|
|
204
|
+
The plugin probes the local Claude CLI with `anthropicBinaryPath --version` and `anthropicBinaryPath auth status`. By default `anthropicBinaryPath` is `claude`, so standard installs work without extra config. It does not pass Claude Free/Pro/Max OAuth tokens directly to Anthropic endpoints.
|
|
205
|
+
|
|
206
|
+
If the Claude CLI exposes 5-hour and 7-day quota windows in local structured output, the plugin shows them. If the CLI only exposes auth state, Anthropic quota rows are skipped and `/quota_status` explains why.
|
|
206
207
|
|
|
207
208
|
**Troubleshooting:**
|
|
208
209
|
|
|
209
210
|
| Problem | Solution |
|
|
210
211
|
| --- | --- |
|
|
211
|
-
|
|
|
212
|
-
|
|
|
212
|
+
| `claude` not found | Install Claude Code and make sure `claude` is on your `PATH` |
|
|
213
|
+
| Claude installed at a custom path | Set `experimental.quotaToast.anthropicBinaryPath` to the Claude executable path |
|
|
214
|
+
| Not authenticated | Run `claude auth login`, then confirm `claude auth status` works |
|
|
215
|
+
| Authenticated but no quota rows | Your local Claude CLI version did not expose quota windows; run `/quota_status` for the exact probe result |
|
|
213
216
|
| Plugin not detected | Confirm OpenCode is configured with the `anthropic` provider |
|
|
214
217
|
|
|
215
218
|
</details>
|
|
@@ -315,6 +318,31 @@ Example fallback tier:
|
|
|
315
318
|
|
|
316
319
|
</details>
|
|
317
320
|
|
|
321
|
+
|
|
322
|
+
<a id="minimax-coding-plan-notes"></a>
|
|
323
|
+
<details>
|
|
324
|
+
<summary><strong>MiniMax Coding Plan</strong></summary>
|
|
325
|
+
|
|
326
|
+
If OpenCode is already configured with the `minimax-coding-plan` provider and your `auth.json` has a `minimax-coding-plan` entry, quota detection works automatically. No additional plugin is required.
|
|
327
|
+
|
|
328
|
+
The plugin reads `key` first and falls back to `access` from that auth entry. Quota is fetched from the MiniMax API using those stored credentials.
|
|
329
|
+
|
|
330
|
+
Example `auth.json` entry:
|
|
331
|
+
|
|
332
|
+
```json
|
|
333
|
+
{
|
|
334
|
+
"minimax-coding-plan": {
|
|
335
|
+
"type": "api",
|
|
336
|
+
"key": "YOUR_MINIMAX_API_KEY"
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
- `MiniMax-M*` models — rolling 5-hour interval + weekly
|
|
342
|
+
- `/quota_status` shows auth detection, API-key diagnostics, live quota state, and endpoint errors
|
|
343
|
+
|
|
344
|
+
</details>
|
|
345
|
+
|
|
318
346
|
<a id="firmware-ai-notes"></a>
|
|
319
347
|
<details>
|
|
320
348
|
<summary><strong>Firmware AI</strong></summary>
|
|
@@ -418,6 +446,7 @@ Workspace-local config can still customize display/report behavior, but user/glo
|
|
|
418
446
|
| `enableToast` | `true` | Show popup toasts |
|
|
419
447
|
| `toastStyle` | `classic` | Toast layout: `classic` or `grouped` |
|
|
420
448
|
| `enabledProviders` | `"auto"` | Auto-detect providers, or set an explicit provider list |
|
|
449
|
+
| `anthropicBinaryPath` | `"claude"` | Command/path used for local Claude CLI probing; override this for custom installs or shim locations |
|
|
421
450
|
| `minIntervalMs` | `300000` | Minimum fetch interval between provider updates |
|
|
422
451
|
| `toastDurationMs` | `9000` | Toast duration in milliseconds |
|
|
423
452
|
| `showOnIdle` | `true` | Show toast on idle trigger |
|
|
@@ -479,7 +508,7 @@ MIT
|
|
|
479
508
|
|
|
480
509
|
OpenCode Quota is not built by the OpenCode team and is not affiliated with OpenCode or any provider listed above.
|
|
481
510
|
|
|
482
|
-
|
|
511
|
+
Anthropic quota detection is delegated to the local Claude CLI/runtime. OpenCode Anthropic API-key usage is unaffected, but this plugin only surfaces Anthropic quota rows when the local Claude CLI exposes them.
|
|
483
512
|
|
|
484
513
|
## Star History
|
|
485
514
|
|
package/dist/index.d.ts
CHANGED
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
* @packageDocumentation
|
|
7
7
|
*/
|
|
8
8
|
export { QuotaToastPlugin } from "./plugin.js";
|
|
9
|
-
export type { QuotaToastConfig, GoogleModelId, PricingSnapshotSource, CopilotEnterpriseUsageResult, CopilotOrganizationUsageResult, CopilotQuotaResult, GoogleQuotaResult, GoogleModelQuota, } from "./lib/types.js";
|
|
9
|
+
export type { QuotaToastConfig, GoogleModelId, PricingSnapshotSource, CopilotEnterpriseUsageResult, CopilotOrganizationUsageResult, CopilotQuotaResult, GoogleQuotaResult, GoogleModelQuota, MiniMaxResult, MiniMaxResultEntry, } from "./lib/types.js";
|
|
10
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,4BAA4B,EAC5B,8BAA8B,EAC9B,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,4BAA4B,EAC5B,8BAA8B,EAC9B,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,kBAAkB,GACnB,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,8EAA8E;AAC9E,iFAAiF;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,8EAA8E;AAC9E,iFAAiF;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAgB/C,yEAAyE;AACzE,wCAAwC;AAExC,6EAA6E;AAC7E,uFAAuF"}
|
package/dist/lib/anthropic.d.ts
CHANGED
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Anthropic Claude quota
|
|
2
|
+
* Anthropic Claude quota probing.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* Supported credential sources:
|
|
9
|
-
* 1. ~/.claude/.credentials.json → claudeAiOauth.accessToken
|
|
10
|
-
* 2. CLAUDE_CODE_OAUTH_TOKEN environment variable
|
|
4
|
+
* Uses the local Claude CLI/runtime to detect install/auth state and surface
|
|
5
|
+
* quota windows only when the official runtime exposes them locally. This
|
|
6
|
+
* module does not read Claude consumer OAuth tokens or call Anthropic's OAuth
|
|
7
|
+
* usage endpoint directly.
|
|
11
8
|
*/
|
|
12
|
-
declare const CREDENTIALS_PATH: string;
|
|
13
9
|
export interface AnthropicQuotaWindow {
|
|
14
|
-
|
|
15
|
-
used_percentage
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
utilization?: number;
|
|
11
|
+
used_percentage?: number;
|
|
12
|
+
usedPercentage?: number;
|
|
13
|
+
used_percent?: number;
|
|
14
|
+
usedPercent?: number;
|
|
15
|
+
percent_used?: number;
|
|
16
|
+
percentUsed?: number;
|
|
17
|
+
resets_at?: string;
|
|
18
|
+
resetsAt?: string;
|
|
19
|
+
reset_at?: string;
|
|
20
|
+
resetAt?: string;
|
|
18
21
|
}
|
|
19
22
|
export interface AnthropicUsageResponse {
|
|
20
23
|
five_hour: AnthropicQuotaWindow;
|
|
@@ -36,28 +39,35 @@ export interface AnthropicQuotaError {
|
|
|
36
39
|
error: string;
|
|
37
40
|
}
|
|
38
41
|
export type AnthropicResult = AnthropicQuotaResult | AnthropicQuotaError | null;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
export type AnthropicAuthStatus = "authenticated" | "unauthenticated" | "unknown";
|
|
43
|
+
export type AnthropicQuotaSource = "claude-auth-status-json" | "none";
|
|
44
|
+
export interface AnthropicDiagnostics {
|
|
45
|
+
installed: boolean;
|
|
46
|
+
version: string | null;
|
|
47
|
+
authStatus: AnthropicAuthStatus;
|
|
48
|
+
quotaSupported: boolean;
|
|
49
|
+
quotaSource: AnthropicQuotaSource;
|
|
50
|
+
checkedCommands: string[];
|
|
51
|
+
message?: string;
|
|
52
|
+
quota?: AnthropicQuotaResult;
|
|
44
53
|
}
|
|
45
|
-
export interface
|
|
46
|
-
|
|
47
|
-
expiresAt?: number;
|
|
48
|
-
source: "file" | "env";
|
|
54
|
+
export interface AnthropicProbeOptions {
|
|
55
|
+
binaryPath?: string;
|
|
49
56
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
57
|
+
export type ClaudeCommandInvocation = {
|
|
58
|
+
file: string;
|
|
59
|
+
args: string[];
|
|
60
|
+
display: string;
|
|
61
|
+
};
|
|
62
|
+
export declare function resolveAnthropicBinaryPath(binaryPath?: string): string;
|
|
63
|
+
export declare function buildClaudeCommandInvocation(binaryPath: string, args: string[], runtime?: {
|
|
64
|
+
platform?: NodeJS.Platform;
|
|
65
|
+
comspec?: string;
|
|
66
|
+
}): ClaudeCommandInvocation;
|
|
54
67
|
declare function parseUsageResponse(data: unknown): AnthropicQuotaResult | null;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
*/
|
|
61
|
-
export declare function queryAnthropicQuota(): Promise<AnthropicResult>;
|
|
62
|
-
export { CREDENTIALS_PATH, parseUsageResponse, readCredentialsFile };
|
|
68
|
+
export declare function clearAnthropicDiagnosticsCacheForTests(): void;
|
|
69
|
+
export declare function getAnthropicDiagnostics(options?: AnthropicProbeOptions): Promise<AnthropicDiagnostics>;
|
|
70
|
+
export declare function hasAnthropicCredentialsConfigured(options?: AnthropicProbeOptions): Promise<boolean>;
|
|
71
|
+
export declare function queryAnthropicQuota(options?: AnthropicProbeOptions): Promise<AnthropicResult>;
|
|
72
|
+
export { parseUsageResponse };
|
|
63
73
|
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/lib/anthropic.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/lib/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,oBAAoB,CAAC;IAChC,SAAS,EAAE,oBAAoB,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,IAAI,CAAC;IACd,SAAS,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,SAAS,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAChE;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG,mBAAmB,GAAG,IAAI,CAAC;AAChF,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG,iBAAiB,GAAG,SAAS,CAAC;AAClF,MAAM,MAAM,oBAAoB,GAAG,yBAAyB,GAAG,MAAM,CAAC;AAEtE,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,mBAAmB,CAAC;IAChC,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,oBAAoB,CAAC;IAClC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,oBAAoB,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAWD,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAiBF,wBAAgB,0BAA0B,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAGtE;AAgBD,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7D,uBAAuB,CAiBzB;AAsHD,iBAAS,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,oBAAoB,GAAG,IAAI,CAiBtE;AAwRD,wBAAgB,sCAAsC,IAAI,IAAI,CAE7D;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC,CA6C/B;AAED,wBAAsB,iCAAiC,CACrD,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,eAAe,CAAC,CAY1B;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|