@tokscale/cli 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/cli.js +57 -8
  2. package/dist/cli.js.map +1 -1
  3. package/dist/native.d.ts.map +1 -1
  4. package/dist/native.js +192 -26
  5. package/dist/native.js.map +1 -1
  6. package/package.json +3 -3
  7. package/dist/claudecode.d.ts +0 -39
  8. package/dist/claudecode.d.ts.map +0 -1
  9. package/dist/claudecode.js +0 -375
  10. package/dist/claudecode.js.map +0 -1
  11. package/dist/gemini.d.ts +0 -36
  12. package/dist/gemini.d.ts.map +0 -1
  13. package/dist/gemini.js +0 -125
  14. package/dist/gemini.js.map +0 -1
  15. package/dist/opencode.d.ts +0 -40
  16. package/dist/opencode.d.ts.map +0 -1
  17. package/dist/opencode.js +0 -69
  18. package/dist/opencode.js.map +0 -1
  19. package/dist/test-selection.d.ts +0 -2
  20. package/dist/test-selection.d.ts.map +0 -1
  21. package/dist/test-selection.jsx +0 -32
  22. package/dist/test-selection.jsx.map +0 -1
  23. package/dist/tui/App.js +0 -167
  24. package/dist/tui/App.js.map +0 -1
  25. package/dist/tui/components/BarChart.js +0 -63
  26. package/dist/tui/components/BarChart.js.map +0 -1
  27. package/dist/tui/components/DailyView.js +0 -32
  28. package/dist/tui/components/DailyView.js.map +0 -1
  29. package/dist/tui/components/Footer.js +0 -15
  30. package/dist/tui/components/Footer.js.map +0 -1
  31. package/dist/tui/components/Header.js +0 -12
  32. package/dist/tui/components/Header.js.map +0 -1
  33. package/dist/tui/components/Legend.js +0 -9
  34. package/dist/tui/components/Legend.js.map +0 -1
  35. package/dist/tui/components/ModelListItem.d.ts +0 -11
  36. package/dist/tui/components/ModelListItem.d.ts.map +0 -1
  37. package/dist/tui/components/ModelListItem.js +0 -18
  38. package/dist/tui/components/ModelListItem.js.map +0 -1
  39. package/dist/tui/components/ModelListItem.jsx +0 -17
  40. package/dist/tui/components/ModelListItem.jsx.map +0 -1
  41. package/dist/tui/components/ModelView.js +0 -34
  42. package/dist/tui/components/ModelView.js.map +0 -1
  43. package/dist/tui/components/OverviewView.js +0 -24
  44. package/dist/tui/components/OverviewView.js.map +0 -1
  45. package/dist/tui/components/StatsView.js +0 -43
  46. package/dist/tui/components/StatsView.js.map +0 -1
  47. package/dist/tui/index.js +0 -8
  48. package/dist/tui/index.js.map +0 -1
@@ -1,375 +0,0 @@
1
- /**
2
- * Claude Code (Anthropic official) and Codex CLI data readers
3
- */
4
- import * as fs from "node:fs";
5
- import * as path from "node:path";
6
- import * as os from "node:os";
7
- // ============================================================================
8
- // Claude Code (Anthropic official) - ~/.claude/projects/
9
- // ============================================================================
10
- export function getClaudeCodeProjectsPath() {
11
- return path.join(os.homedir(), ".claude", "projects");
12
- }
13
- export function readClaudeCodeSessions() {
14
- const projectsPath = getClaudeCodeProjectsPath();
15
- if (!fs.existsSync(projectsPath)) {
16
- return [];
17
- }
18
- const modelUsage = new Map();
19
- const files = findJsonlFiles(projectsPath);
20
- for (const file of files) {
21
- try {
22
- const content = fs.readFileSync(file, "utf-8");
23
- const lines = content.split(/\r?\n/);
24
- for (const line of lines) {
25
- const trimmed = line.trim();
26
- if (!trimmed)
27
- continue;
28
- try {
29
- const entry = JSON.parse(trimmed);
30
- // Process assistant messages with usage data
31
- if (entry.type === "assistant" && entry.message?.usage) {
32
- const model = entry.message.model || "unknown";
33
- const usage = entry.message.usage;
34
- // Get or create usage data for this model
35
- let data = modelUsage.get(model);
36
- if (!data) {
37
- data = {
38
- source: "claude",
39
- model,
40
- messageCount: 0,
41
- input: 0,
42
- output: 0,
43
- cacheRead: 0,
44
- cacheWrite: 0,
45
- };
46
- modelUsage.set(model, data);
47
- }
48
- data.messageCount++;
49
- data.input += usage.input_tokens || 0;
50
- data.output += usage.output_tokens || 0;
51
- data.cacheRead += usage.cache_read_input_tokens || 0;
52
- data.cacheWrite += usage.cache_creation_input_tokens || 0;
53
- }
54
- }
55
- catch {
56
- // Skip malformed lines
57
- }
58
- }
59
- }
60
- catch {
61
- // Skip unreadable files
62
- }
63
- }
64
- return Array.from(modelUsage.values());
65
- }
66
- /**
67
- * Read Claude Code messages with timestamp for graph generation
68
- */
69
- export function readClaudeCodeMessagesWithTimestamp() {
70
- const projectsPath = getClaudeCodeProjectsPath();
71
- if (!fs.existsSync(projectsPath)) {
72
- return [];
73
- }
74
- const messages = [];
75
- const files = findJsonlFiles(projectsPath);
76
- for (const file of files) {
77
- try {
78
- const content = fs.readFileSync(file, "utf-8");
79
- const lines = content.split(/\r?\n/);
80
- for (const line of lines) {
81
- const trimmed = line.trim();
82
- if (!trimmed)
83
- continue;
84
- try {
85
- const entry = JSON.parse(trimmed);
86
- // Process assistant messages with usage data and timestamp
87
- if (entry.type === "assistant" && entry.message?.usage && entry.timestamp) {
88
- const model = entry.message.model || "unknown";
89
- const usage = entry.message.usage;
90
- const timestamp = new Date(entry.timestamp).getTime();
91
- // Skip invalid timestamps
92
- if (isNaN(timestamp))
93
- continue;
94
- messages.push({
95
- source: "claude",
96
- model,
97
- timestamp,
98
- tokens: {
99
- input: usage.input_tokens || 0,
100
- output: usage.output_tokens || 0,
101
- cacheRead: usage.cache_read_input_tokens || 0,
102
- cacheWrite: usage.cache_creation_input_tokens || 0,
103
- },
104
- });
105
- }
106
- }
107
- catch {
108
- // Skip malformed lines
109
- }
110
- }
111
- }
112
- catch {
113
- // Skip unreadable files
114
- }
115
- }
116
- return messages;
117
- }
118
- export function getCodexSessionsPath() {
119
- const codexHome = process.env.CODEX_HOME || path.join(os.homedir(), ".codex");
120
- return path.join(codexHome, "sessions");
121
- }
122
- export function readCodexSessions() {
123
- const sessionsPath = getCodexSessionsPath();
124
- if (!fs.existsSync(sessionsPath)) {
125
- return [];
126
- }
127
- const modelUsage = new Map();
128
- const files = findJsonlFiles(sessionsPath);
129
- for (const file of files) {
130
- try {
131
- const content = fs.readFileSync(file, "utf-8");
132
- const lines = content.split(/\r?\n/);
133
- let currentModel;
134
- let previousTotals = null;
135
- for (const line of lines) {
136
- const trimmed = line.trim();
137
- if (!trimmed)
138
- continue;
139
- try {
140
- const entry = JSON.parse(trimmed);
141
- // Extract model from turn_context
142
- if (entry.type === "turn_context" && entry.payload) {
143
- const model = extractModel(entry.payload);
144
- if (model)
145
- currentModel = model;
146
- continue;
147
- }
148
- // Process token_count events
149
- if (entry.type === "event_msg" && entry.payload?.type === "token_count") {
150
- const info = entry.payload.info;
151
- if (!info)
152
- continue;
153
- // Extract model from payload
154
- const payloadModel = extractModel(entry.payload);
155
- if (payloadModel)
156
- currentModel = payloadModel;
157
- const model = currentModel || "unknown";
158
- // Get usage data
159
- const lastUsage = info.last_token_usage;
160
- const totalUsage = info.total_token_usage;
161
- let delta = {
162
- input: 0,
163
- cached: 0,
164
- output: 0,
165
- };
166
- if (lastUsage) {
167
- delta = {
168
- input: lastUsage.input_tokens || 0,
169
- cached: lastUsage.cached_input_tokens || lastUsage.cache_read_input_tokens || 0,
170
- output: lastUsage.output_tokens || 0,
171
- };
172
- }
173
- else if (totalUsage && previousTotals) {
174
- delta = {
175
- input: Math.max((totalUsage.input_tokens || 0) - previousTotals.input, 0),
176
- cached: Math.max((totalUsage.cached_input_tokens || totalUsage.cache_read_input_tokens || 0) -
177
- previousTotals.cached, 0),
178
- output: Math.max((totalUsage.output_tokens || 0) - previousTotals.output, 0),
179
- };
180
- }
181
- if (totalUsage) {
182
- previousTotals = {
183
- input: totalUsage.input_tokens || 0,
184
- cached: totalUsage.cached_input_tokens || totalUsage.cache_read_input_tokens || 0,
185
- output: totalUsage.output_tokens || 0,
186
- };
187
- }
188
- // Skip empty deltas
189
- if (delta.input === 0 && delta.cached === 0 && delta.output === 0) {
190
- continue;
191
- }
192
- // Aggregate by model
193
- let usage = modelUsage.get(model);
194
- if (!usage) {
195
- usage = {
196
- source: "codex",
197
- model,
198
- messageCount: 0,
199
- input: 0,
200
- output: 0,
201
- cacheRead: 0,
202
- cacheWrite: 0,
203
- };
204
- modelUsage.set(model, usage);
205
- }
206
- usage.messageCount++;
207
- usage.input += delta.input;
208
- usage.output += delta.output;
209
- usage.cacheRead += delta.cached;
210
- }
211
- }
212
- catch {
213
- // Skip malformed lines
214
- }
215
- }
216
- }
217
- catch {
218
- // Skip unreadable files
219
- }
220
- }
221
- return Array.from(modelUsage.values());
222
- }
223
- /**
224
- * Read Codex messages with timestamp for graph generation
225
- */
226
- export function readCodexMessagesWithTimestamp() {
227
- const sessionsPath = getCodexSessionsPath();
228
- if (!fs.existsSync(sessionsPath)) {
229
- return [];
230
- }
231
- const messages = [];
232
- const files = findJsonlFiles(sessionsPath);
233
- for (const file of files) {
234
- try {
235
- const content = fs.readFileSync(file, "utf-8");
236
- const lines = content.split(/\r?\n/);
237
- let currentModel;
238
- let previousTotals = null;
239
- for (const line of lines) {
240
- const trimmed = line.trim();
241
- if (!trimmed)
242
- continue;
243
- try {
244
- const entry = JSON.parse(trimmed);
245
- // Extract model from turn_context
246
- if (entry.type === "turn_context" && entry.payload) {
247
- const model = extractModel(entry.payload);
248
- if (model)
249
- currentModel = model;
250
- continue;
251
- }
252
- // Process token_count events with timestamp
253
- if (entry.type === "event_msg" && entry.payload?.type === "token_count") {
254
- const info = entry.payload.info;
255
- if (!info)
256
- continue;
257
- // Extract model from payload
258
- const payloadModel = extractModel(entry.payload);
259
- if (payloadModel)
260
- currentModel = payloadModel;
261
- const model = currentModel || "unknown";
262
- // Extract timestamp
263
- const timestamp = entry.timestamp
264
- ? new Date(entry.timestamp).getTime()
265
- : entry.payload?.timestamp
266
- ? new Date(entry.payload.timestamp).getTime()
267
- : Date.now();
268
- // Skip invalid timestamps
269
- if (isNaN(timestamp))
270
- continue;
271
- // Get usage data
272
- const lastUsage = info.last_token_usage;
273
- const totalUsage = info.total_token_usage;
274
- let delta = {
275
- input: 0,
276
- cached: 0,
277
- output: 0,
278
- };
279
- if (lastUsage) {
280
- delta = {
281
- input: lastUsage.input_tokens || 0,
282
- cached: lastUsage.cached_input_tokens || lastUsage.cache_read_input_tokens || 0,
283
- output: lastUsage.output_tokens || 0,
284
- };
285
- }
286
- else if (totalUsage && previousTotals) {
287
- delta = {
288
- input: Math.max((totalUsage.input_tokens || 0) - previousTotals.input, 0),
289
- cached: Math.max((totalUsage.cached_input_tokens || totalUsage.cache_read_input_tokens || 0) -
290
- previousTotals.cached, 0),
291
- output: Math.max((totalUsage.output_tokens || 0) - previousTotals.output, 0),
292
- };
293
- }
294
- if (totalUsage) {
295
- previousTotals = {
296
- input: totalUsage.input_tokens || 0,
297
- cached: totalUsage.cached_input_tokens || totalUsage.cache_read_input_tokens || 0,
298
- output: totalUsage.output_tokens || 0,
299
- };
300
- }
301
- // Skip empty deltas
302
- if (delta.input === 0 && delta.cached === 0 && delta.output === 0) {
303
- continue;
304
- }
305
- messages.push({
306
- source: "codex",
307
- model,
308
- timestamp,
309
- tokens: {
310
- input: delta.input,
311
- output: delta.output,
312
- cacheRead: delta.cached,
313
- cacheWrite: 0, // Codex doesn't track cache write
314
- },
315
- });
316
- }
317
- }
318
- catch {
319
- // Skip malformed lines
320
- }
321
- }
322
- }
323
- catch {
324
- // Skip unreadable files
325
- }
326
- }
327
- return messages;
328
- }
329
- // ============================================================================
330
- // Utilities
331
- // ============================================================================
332
- function findJsonlFiles(dir) {
333
- const files = [];
334
- function walk(currentDir) {
335
- try {
336
- const entries = fs.readdirSync(currentDir, { withFileTypes: true });
337
- for (const entry of entries) {
338
- const fullPath = path.join(currentDir, entry.name);
339
- if (entry.isDirectory()) {
340
- walk(fullPath);
341
- }
342
- else if (entry.isFile() && entry.name.endsWith(".jsonl")) {
343
- files.push(fullPath);
344
- }
345
- }
346
- }
347
- catch {
348
- // Skip inaccessible directories
349
- }
350
- }
351
- walk(dir);
352
- return files;
353
- }
354
- function extractModel(payload) {
355
- // Direct model field
356
- if (typeof payload.model === "string" && payload.model.trim()) {
357
- return payload.model.trim();
358
- }
359
- // model_name field
360
- if (typeof payload.model_name === "string" && payload.model_name.trim()) {
361
- return payload.model_name.trim();
362
- }
363
- // Nested in info
364
- const info = payload.info;
365
- if (info) {
366
- if (typeof info.model === "string" && info.model.trim()) {
367
- return info.model.trim();
368
- }
369
- if (typeof info.model_name === "string" && info.model_name.trim()) {
370
- return info.model_name.trim();
371
- }
372
- }
373
- return undefined;
374
- }
375
- //# sourceMappingURL=claudecode.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claudecode.js","sourceRoot":"","sources":["../src/claudecode.ts"],"names":[],"mappings":"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"}
package/dist/gemini.d.ts DELETED
@@ -1,36 +0,0 @@
1
- /**
2
- * Gemini CLI data reader
3
- * Reads from ~/.gemini/tmp/{projectHash}/chats/session-*.json
4
- */
5
- export interface GeminiUsageData {
6
- source: "gemini";
7
- model: string;
8
- messageCount: number;
9
- input: number;
10
- output: number;
11
- cached: number;
12
- thoughts: number;
13
- tool: number;
14
- }
15
- /**
16
- * Individual Gemini message with timestamp for graph generation
17
- */
18
- export interface GeminiMessageWithTimestamp {
19
- source: "gemini";
20
- model: string;
21
- timestamp: number;
22
- tokens: {
23
- input: number;
24
- output: number;
25
- cached: number;
26
- thoughts: number;
27
- tool: number;
28
- };
29
- }
30
- export declare function getGeminiBasePath(): string;
31
- export declare function readGeminiSessions(): GeminiUsageData[];
32
- /**
33
- * Read Gemini messages with timestamp for graph generation
34
- */
35
- export declare function readGeminiMessagesWithTimestamp(): GeminiMessageWithTimestamp[];
36
- //# sourceMappingURL=gemini.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../src/gemini.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,QAAQ,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,QAAQ,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AA0BD,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,kBAAkB,IAAI,eAAe,EAAE,CAgEtD;AAED;;GAEG;AACH,wBAAgB,+BAA+B,IAAI,0BAA0B,EAAE,CA2D9E"}
package/dist/gemini.js DELETED
@@ -1,125 +0,0 @@
1
- /**
2
- * Gemini CLI data reader
3
- * Reads from ~/.gemini/tmp/{projectHash}/chats/session-*.json
4
- */
5
- import * as fs from "node:fs";
6
- import * as path from "node:path";
7
- import * as os from "node:os";
8
- export function getGeminiBasePath() {
9
- return path.join(os.homedir(), ".gemini");
10
- }
11
- export function readGeminiSessions() {
12
- const basePath = getGeminiBasePath();
13
- const tmpPath = path.join(basePath, "tmp");
14
- if (!fs.existsSync(tmpPath)) {
15
- return [];
16
- }
17
- const modelUsage = new Map();
18
- // Find all project directories
19
- const projectDirs = fs
20
- .readdirSync(tmpPath, { withFileTypes: true })
21
- .filter((d) => d.isDirectory())
22
- .map((d) => path.join(tmpPath, d.name));
23
- for (const projectDir of projectDirs) {
24
- const chatsDir = path.join(projectDir, "chats");
25
- if (!fs.existsSync(chatsDir))
26
- continue;
27
- // Find all session JSON files
28
- const sessionFiles = fs
29
- .readdirSync(chatsDir)
30
- .filter((f) => f.startsWith("session-") && f.endsWith(".json"));
31
- for (const sessionFile of sessionFiles) {
32
- try {
33
- const content = fs.readFileSync(path.join(chatsDir, sessionFile), "utf-8");
34
- const session = JSON.parse(content);
35
- for (const msg of session.messages) {
36
- // Only process gemini messages with token data
37
- if (msg.type !== "gemini" || !msg.tokens || !msg.model)
38
- continue;
39
- const model = msg.model;
40
- let usage = modelUsage.get(model);
41
- if (!usage) {
42
- usage = {
43
- source: "gemini",
44
- model,
45
- messageCount: 0,
46
- input: 0,
47
- output: 0,
48
- cached: 0,
49
- thoughts: 0,
50
- tool: 0,
51
- };
52
- modelUsage.set(model, usage);
53
- }
54
- usage.messageCount++;
55
- usage.input += msg.tokens.input || 0;
56
- usage.output += msg.tokens.output || 0;
57
- usage.cached += msg.tokens.cached || 0;
58
- usage.thoughts += msg.tokens.thoughts || 0;
59
- usage.tool += msg.tokens.tool || 0;
60
- }
61
- }
62
- catch {
63
- // Skip malformed files
64
- }
65
- }
66
- }
67
- return Array.from(modelUsage.values());
68
- }
69
- /**
70
- * Read Gemini messages with timestamp for graph generation
71
- */
72
- export function readGeminiMessagesWithTimestamp() {
73
- const basePath = getGeminiBasePath();
74
- const tmpPath = path.join(basePath, "tmp");
75
- if (!fs.existsSync(tmpPath)) {
76
- return [];
77
- }
78
- const messages = [];
79
- // Find all project directories
80
- const projectDirs = fs
81
- .readdirSync(tmpPath, { withFileTypes: true })
82
- .filter((d) => d.isDirectory())
83
- .map((d) => path.join(tmpPath, d.name));
84
- for (const projectDir of projectDirs) {
85
- const chatsDir = path.join(projectDir, "chats");
86
- if (!fs.existsSync(chatsDir))
87
- continue;
88
- // Find all session JSON files
89
- const sessionFiles = fs
90
- .readdirSync(chatsDir)
91
- .filter((f) => f.startsWith("session-") && f.endsWith(".json"));
92
- for (const sessionFile of sessionFiles) {
93
- try {
94
- const content = fs.readFileSync(path.join(chatsDir, sessionFile), "utf-8");
95
- const session = JSON.parse(content);
96
- for (const msg of session.messages) {
97
- // Only process gemini messages with token data and timestamp
98
- if (msg.type !== "gemini" || !msg.tokens || !msg.model || !msg.timestamp)
99
- continue;
100
- const timestamp = new Date(msg.timestamp).getTime();
101
- // Skip invalid timestamps
102
- if (isNaN(timestamp))
103
- continue;
104
- messages.push({
105
- source: "gemini",
106
- model: msg.model,
107
- timestamp,
108
- tokens: {
109
- input: msg.tokens.input || 0,
110
- output: msg.tokens.output || 0,
111
- cached: msg.tokens.cached || 0,
112
- thoughts: msg.tokens.thoughts || 0,
113
- tool: msg.tokens.tool || 0,
114
- },
115
- });
116
- }
117
- }
118
- catch {
119
- // Skip malformed files
120
- }
121
- }
122
- }
123
- return messages;
124
- }
125
- //# sourceMappingURL=gemini.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../src/gemini.ts"],"names":[],"mappings":"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"}
@@ -1,40 +0,0 @@
1
- /**
2
- * OpenCode session data reader
3
- */
4
- export interface TokenUsage {
5
- input: number;
6
- output: number;
7
- reasoning: number;
8
- cache: {
9
- read: number;
10
- write: number;
11
- };
12
- }
13
- export interface OpenCodeMessage {
14
- id: string;
15
- sessionID: string;
16
- role: "assistant" | "user";
17
- modelID?: string;
18
- providerID?: string;
19
- cost: number;
20
- tokens?: TokenUsage;
21
- time: {
22
- created: number;
23
- completed?: number;
24
- };
25
- }
26
- export interface OpenCodeUsageData {
27
- source: "opencode";
28
- modelID: string;
29
- providerID: string;
30
- messageCount: number;
31
- input: number;
32
- output: number;
33
- reasoning: number;
34
- cacheRead: number;
35
- cacheWrite: number;
36
- }
37
- export declare function getOpenCodeStoragePath(): string;
38
- export declare function readOpenCodeMessages(): OpenCodeMessage[];
39
- export declare function aggregateOpenCodeByModel(messages: OpenCodeMessage[]): Map<string, OpenCodeUsageData>;
40
- //# sourceMappingURL=opencode.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../src/opencode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAG/C;AAED,wBAAgB,oBAAoB,IAAI,eAAe,EAAE,CAgCxD;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAiCpG"}