shellx-ai 1.1.0 → 1.1.2

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 (40) hide show
  1. package/README.md +162 -586
  2. package/dist/automation/element-finder.d.ts +0 -8
  3. package/dist/automation/element-finder.js +0 -7
  4. package/dist/automation/element-finder.js.map +1 -1
  5. package/dist/automation/ui-action-handler.d.ts +1 -1
  6. package/dist/automation/ui-action-handler.js +58 -31
  7. package/dist/automation/ui-action-handler.js.map +1 -1
  8. package/dist/cbor-compat.js +9 -11
  9. package/dist/cbor-compat.js.map +1 -1
  10. package/dist/data/index.d.ts +9 -0
  11. package/dist/data/index.js +11 -0
  12. package/dist/data/index.js.map +1 -0
  13. package/dist/data/types.d.ts +351 -0
  14. package/dist/data/types.js +8 -0
  15. package/dist/data/types.js.map +1 -0
  16. package/dist/domain-manager.js +15 -13
  17. package/dist/domain-manager.js.map +1 -1
  18. package/dist/error-handler.js +5 -2
  19. package/dist/error-handler.js.map +1 -1
  20. package/dist/errors.js +4 -2
  21. package/dist/errors.js.map +1 -1
  22. package/dist/index.d.ts +36 -26
  23. package/dist/index.js +197 -86
  24. package/dist/index.js.map +1 -1
  25. package/dist/protocol.d.ts +27 -5
  26. package/dist/shellx.d.ts +139 -56
  27. package/dist/shellx.js +201 -88
  28. package/dist/shellx.js.map +1 -1
  29. package/dist/types.d.ts +38 -1
  30. package/dist/utils/retry-helper.js +5 -2
  31. package/dist/utils/retry-helper.js.map +1 -1
  32. package/dist/utils.js +6 -3
  33. package/dist/utils.js.map +1 -1
  34. package/package.json +25 -4
  35. package/dist/shell/output-buffer.d.ts +0 -152
  36. package/dist/shell/output-buffer.js +0 -163
  37. package/dist/shell/output-buffer.js.map +0 -1
  38. package/dist/shell/shell-command-executor.d.ts +0 -182
  39. package/dist/shell/shell-command-executor.js +0 -348
  40. package/dist/shell/shell-command-executor.js.map +0 -1
@@ -1,348 +0,0 @@
1
- /**
2
- * ShellCommandExecutor - A module for executing shell commands
3
- *
4
- * This module provides functionality for executing shell commands with
5
- * output monitoring, timeout handling, and result management.
6
- */
7
- import { v4 as uuidv4 } from "uuid";
8
- import { OutputBuffer } from "./output-buffer.js";
9
- /** Session ID for PTY terminal output */
10
- const COMMAND_PTY_SID = 999;
11
- /**
12
- * ShellCommandExecutor class handles shell command execution
13
- *
14
- * This class provides methods to:
15
- * - Execute single or multiple shell commands
16
- * - Monitor command output in real-time
17
- * - Handle command timeouts
18
- * - Manage command execution state
19
- */
20
- export class ShellCommandExecutor {
21
- client;
22
- outputBuffer;
23
- /**
24
- * Creates a ShellCommandExecutor instance
25
- *
26
- * @param client - The ConnectionClient instance for command execution
27
- */
28
- constructor(client) {
29
- this.client = client;
30
- this.outputBuffer = new OutputBuffer();
31
- }
32
- /**
33
- * Handle shell output data from WebSocket messages
34
- *
35
- * This method should be called when receiving shell output chunks
36
- * from the WebSocket connection.
37
- *
38
- * @param chunks - Array of [sessionId, length, dataArray] tuples
39
- *
40
- * @example
41
- * ```typescript
42
- * // In WebSocket message handler
43
- * if (message.chunks) {
44
- * executor.handleShellOutput(message.chunks);
45
- * }
46
- * ```
47
- */
48
- handleShellOutput(chunks) {
49
- const [sessionId, , dataArrays] = chunks;
50
- // Only process COMMAND_PTY_SID sessions
51
- if (sessionId === COMMAND_PTY_SID) {
52
- this.outputBuffer.handleShellOutput(sessionId, dataArrays);
53
- }
54
- }
55
- /**
56
- * Execute a shell command with output monitoring
57
- *
58
- * @param command - The shell command to execute
59
- * @param options - Command execution options
60
- * @returns Promise resolving to ShellCommandResult
61
- *
62
- * @example
63
- * ```typescript
64
- * const result = await executor.executeShellCommand('ls -la', {
65
- * title: 'List files',
66
- * timeout: 5000,
67
- * onOutput: (output) => console.log(output)
68
- * });
69
- * ```
70
- */
71
- async executeShellCommand(command, options = {}) {
72
- // Validate client
73
- if (!this.client) {
74
- console.error("❌ [ShellCommandExecutor] Client is not initialized");
75
- return {
76
- success: false,
77
- output: "",
78
- error: "Client not initialized",
79
- duration: 0,
80
- };
81
- }
82
- const startTime = Date.now();
83
- const title = options.title || `Execute command: ${command}`;
84
- const timeout = options.timeout || 3000;
85
- console.log(`🔨 [ShellCommandExecutor] ${title}`);
86
- console.log(`⏱️ Timeout: ${timeout}ms`);
87
- return (async () => {
88
- const commandId = uuidv4();
89
- console.log(`🔑 [ShellCommandExecutor] Generated command ID: ${commandId}`);
90
- // Create promise that will be resolved by output buffer
91
- return new Promise((resolve, reject) => {
92
- // Register command promise
93
- this.outputBuffer.registerCommand(commandId, resolve, reject, startTime, options, command);
94
- console.log(`📋 [ShellCommandExecutor] Pending commands: ${this.outputBuffer.getPendingCount()}`);
95
- // Set timeout
96
- const timeoutId = setTimeout(() => {
97
- if (this.outputBuffer.hasCommand(commandId)) {
98
- const client = this.getClient();
99
- if (client) {
100
- client.appendExecutionLog(`✅ [Shell] Command ${command} execution completed`);
101
- }
102
- const commandPromise = this.outputBuffer.unregisterCommand(commandId);
103
- resolve({
104
- success: true,
105
- output: commandPromise ? commandPromise.output.trim() : "",
106
- duration: Date.now() - startTime,
107
- });
108
- }
109
- }, timeout);
110
- // Execute the shell command
111
- void (async () => {
112
- try {
113
- const shellAction = {
114
- title,
115
- actions: [
116
- {
117
- type: "command",
118
- command: command,
119
- title: options.title,
120
- },
121
- ],
122
- options: {
123
- timeoutMs: timeout,
124
- },
125
- };
126
- await this.client.sendMessageWithTaskId({ actions: shellAction }, "command", commandId, timeout);
127
- console.log(`📤 [ShellCommandExecutor] Command sent: ${commandId}`);
128
- }
129
- catch (error) {
130
- clearTimeout(timeoutId);
131
- this.outputBuffer.unregisterCommand(commandId);
132
- const errorMessage = error instanceof Error ? error.message : String(error);
133
- console.error(`❌ [ShellCommandExecutor] Failed to send command: ${command}`, error);
134
- resolve({
135
- success: false,
136
- output: "",
137
- error: errorMessage,
138
- duration: Date.now() - startTime,
139
- });
140
- }
141
- })();
142
- });
143
- })();
144
- }
145
- /**
146
- * Execute shell command with simple output (for backward compatibility)
147
- *
148
- * @param command - The shell command to execute
149
- * @param options - Command execution options
150
- * @returns Promise resolving to ShellCommandResult
151
- *
152
- * @example
153
- * ```typescript
154
- * const result = await executor.executeSimpleShellCommand('pm list packages', {
155
- * title: 'List packages',
156
- * timeout: 10000,
157
- * waitAfterMs: 1000
158
- * });
159
- * ```
160
- */
161
- async executeSimpleShellCommand(command, options) {
162
- try {
163
- const result = await this.executeShellCommand(command, {
164
- title: options?.title,
165
- timeout: options?.timeout,
166
- });
167
- // Wait if specified
168
- if (options?.waitAfterMs) {
169
- await new Promise((resolve) => setTimeout(resolve, options.waitAfterMs));
170
- }
171
- const client = this.getClient();
172
- if (client) {
173
- client.appendExecutionLog(`✅ [Shell] Command completed: ${command}`);
174
- }
175
- return result;
176
- }
177
- catch (error) {
178
- console.error(`❌ [Shell] Command failed: ${command}`, error);
179
- throw error;
180
- }
181
- }
182
- /**
183
- * Execute multiple shell commands in sequence
184
- *
185
- * @param commands - Array of command configurations
186
- * @param options - Execution options
187
- * @returns Promise resolving to array of ShellCommandResult
188
- *
189
- * @example
190
- * ```typescript
191
- * const results = await executor.executeShellCommands(
192
- * [
193
- * { command: 'pm list packages', title: 'List packages' },
194
- * { command: 'dumpsys battery', title: 'Get battery info' }
195
- * ],
196
- * {
197
- * continueOnError: true,
198
- * timeout: 5000
199
- * }
200
- * );
201
- * ```
202
- */
203
- async executeShellCommands(commands, options) {
204
- const results = [];
205
- try {
206
- console.log(`🔨 [ShellCommandExecutor] Starting execution of ${commands.length} commands`);
207
- for (const [index, cmd] of commands.entries()) {
208
- try {
209
- const title = cmd.title || `Command ${index + 1}/${commands.length}: ${cmd.command}`;
210
- console.log(`🔨 [ShellCommandExecutor] ${title}`);
211
- const result = await this.executeShellCommand(cmd.command, {
212
- title,
213
- timeout: options?.timeout,
214
- waitAfterMs: cmd.waitAfterMs,
215
- });
216
- results.push(result);
217
- }
218
- catch (error) {
219
- console.error(`❌ [ShellCommandExecutor] Command ${index + 1} failed:`, error);
220
- if (options?.continueOnError) {
221
- results.push({
222
- success: false,
223
- output: "",
224
- error: error instanceof Error ? error.message : String(error),
225
- duration: 0,
226
- });
227
- continue;
228
- }
229
- else {
230
- throw error;
231
- }
232
- }
233
- }
234
- console.log(`✅ [ShellCommandExecutor] All commands completed`);
235
- return results;
236
- }
237
- catch (error) {
238
- console.error(`❌ [ShellCommandExecutor] Batch command execution failed:`, error);
239
- throw error;
240
- }
241
- }
242
- /**
243
- * Execute an ADB command
244
- *
245
- * @param command - The ADB command to execute (without 'adb' prefix)
246
- * @param options - Command execution options
247
- * @returns Promise resolving to ShellCommandResult
248
- *
249
- * @example
250
- * ```typescript
251
- * const result = await executor.adbCommand('shell pm list packages', {
252
- * title: 'List packages via ADB',
253
- * timeout: 10000
254
- * });
255
- * ```
256
- */
257
- async adbCommand(command, options) {
258
- return this.executeShellCommand(command, {
259
- title: options?.title || `ADB command: ${command}`,
260
- timeout: options?.timeout,
261
- waitAfterMs: options?.waitAfterMs,
262
- onOutput: options?.onOutput,
263
- onError: options?.onError,
264
- expectedOutput: options?.expectedOutput,
265
- successPattern: options?.successPattern,
266
- });
267
- }
268
- /**
269
- * Execute a key action (press a hardware key)
270
- *
271
- * @param keyCode - The key code to press (e.g., 'KEYCODE_HOME', 'KEYCODE_BACK')
272
- * @param options - Execution options
273
- * @returns Promise resolving to boolean indicating success
274
- *
275
- * @example
276
- * ```typescript
277
- * const success = await executor.executeKeyAction('KEYCODE_HOME', {
278
- * longPress: false,
279
- * waitAfterMs: 500
280
- * });
281
- * ```
282
- */
283
- async executeKeyAction(keyCode, options = {}) {
284
- try {
285
- console.log(`🔑 [ShellCommandExecutor] Executing key action: ${keyCode}${options.longPress ? " (long press)" : ""}`);
286
- const keyAction = {
287
- title: `Key press: ${keyCode}${options.longPress ? " (long press)" : ""}`,
288
- actions: [
289
- {
290
- type: "key",
291
- keyCode,
292
- options: {
293
- longPress: options.longPress,
294
- },
295
- },
296
- ],
297
- };
298
- await this.client.executeAction(keyAction);
299
- // Wait if specified
300
- if (options.waitAfterMs) {
301
- await new Promise((resolve) => setTimeout(resolve, options.waitAfterMs));
302
- }
303
- console.log(`✅ [ShellCommandExecutor] Key action completed: ${keyCode}`);
304
- return true;
305
- }
306
- catch (error) {
307
- console.error(`❌ [ShellCommandExecutor] Key action failed: ${keyCode}`, error);
308
- return false;
309
- }
310
- }
311
- /**
312
- * Get the underlying client instance
313
- *
314
- * @returns The ConnectionClient instance
315
- */
316
- getClient() {
317
- if (!this.client) {
318
- console.error("❌ [ShellCommandExecutor] Attempted to access null client");
319
- return null;
320
- }
321
- return this.client;
322
- }
323
- /**
324
- * Get the output buffer instance
325
- *
326
- * @returns The OutputBuffer instance
327
- */
328
- getOutputBuffer() {
329
- return this.outputBuffer;
330
- }
331
- /**
332
- * Clear all pending command promises
333
- *
334
- * This method is useful for cleanup scenarios
335
- */
336
- clearPendingCommands() {
337
- this.outputBuffer.clear();
338
- }
339
- /**
340
- * Get the number of pending commands
341
- *
342
- * @returns The number of currently pending commands
343
- */
344
- getPendingCommandCount() {
345
- return this.outputBuffer.getPendingCount();
346
- }
347
- }
348
- //# sourceMappingURL=shell-command-executor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shell-command-executor.js","sourceRoot":"","sources":["../../src/shell/shell-command-executor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAmBlD,yCAAyC;AACzC,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B;;;;;;;;GAQG;AACH,MAAM,OAAO,oBAAoB;IAQX;IAPZ,YAAY,CAAe;IAEnC;;;;OAIG;IACH,YAAoB,MAAyB;QAAzB,WAAM,GAAN,MAAM,CAAmB;QAC3C,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;IACzC,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACI,iBAAiB,CAAC,MAAsC;QAC7D,MAAM,CAAC,SAAS,EAAE,AAAD,EAAG,UAAU,CAAC,GAAG,MAAM,CAAC;QAEzC,wCAAwC;QACxC,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;YAClC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,mBAAmB,CACvB,OAAe,EACf,UAA+B,EAAE;QAEjC,kBAAkB;QAClB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACpE,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,wBAAwB;gBAC/B,QAAQ,EAAE,CAAC;aACZ,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,oBAAoB,OAAO,EAAE,CAAC;QAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC;QAExC,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,IAAI,CAAC,CAAC;QAEzC,OAAO,CAAC,KAAK,IAAI,EAAE;YACjB,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,mDAAmD,SAAS,EAAE,CAAC,CAAC;YAE5E,wDAAwD;YACxD,OAAO,IAAI,OAAO,CAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACzD,2BAA2B;gBAC3B,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBAE3F,OAAO,CAAC,GAAG,CACT,+CAA+C,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,CACrF,CAAC;gBAEF,cAAc;gBACd,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;oBAChC,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;wBAChC,IAAI,MAAM,EAAE,CAAC;4BACX,MAAM,CAAC,kBAAkB,CAAC,qBAAqB,OAAO,sBAAsB,CAAC,CAAC;wBAChF,CAAC;wBACD,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;wBACtE,OAAO,CAAC;4BACN,OAAO,EAAE,IAAI;4BACb,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;4BAC1D,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;yBACjC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC,EAAE,OAAO,CAAC,CAAC;gBAEZ,4BAA4B;gBAC5B,KAAK,CAAC,KAAK,IAAI,EAAE;oBACf,IAAI,CAAC;wBACH,MAAM,WAAW,GAAyB;4BACxC,KAAK;4BACL,OAAO,EAAE;gCACP;oCACE,IAAI,EAAE,SAAS;oCACf,OAAO,EAAE,OAAO;oCAChB,KAAK,EAAE,OAAO,CAAC,KAAK;iCACrB;6BACF;4BACD,OAAO,EAAE;gCACP,SAAS,EAAE,OAAO;6BACnB;yBACF,CAAC;wBAEF,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CACrC,EAAE,OAAO,EAAE,WAAW,EAAE,EACxB,SAAS,EACT,SAAS,EACT,OAAO,CACR,CAAC;wBACF,OAAO,CAAC,GAAG,CAAC,2CAA2C,SAAS,EAAE,CAAC,CAAC;oBACtE,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,YAAY,CAAC,SAAS,CAAC,CAAC;wBACxB,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;wBAE/C,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBAC5E,OAAO,CAAC,KAAK,CAAC,oDAAoD,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;wBAEpF,OAAO,CAAC;4BACN,OAAO,EAAE,KAAK;4BACd,MAAM,EAAE,EAAE;4BACV,KAAK,EAAE,YAAY;4BACnB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;yBACjC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,yBAAyB,CAC7B,OAAe,EACf,OAIC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE;gBACrD,KAAK,EAAE,OAAO,EAAE,KAAK;gBACrB,OAAO,EAAE,OAAO,EAAE,OAAO;aAC1B,CAAC,CAAC;YAEH,oBAAoB;YACpB,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;gBACzB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;YAC3E,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAChC,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,kBAAkB,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;YACvE,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;YAC7D,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,KAAK,CAAC,oBAAoB,CACxB,QAIE,EACF,OAGC;QAED,MAAM,OAAO,GAAyB,EAAE,CAAC;QAEzC,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,mDAAmD,QAAQ,CAAC,MAAM,WAAW,CAAC,CAAC;YAE3F,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC9C,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,WAAW,KAAK,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;oBACrF,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,EAAE,CAAC,CAAC;oBAElD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,EAAE;wBACzD,KAAK;wBACL,OAAO,EAAE,OAAO,EAAE,OAAO;wBACzB,WAAW,EAAE,GAAG,CAAC,WAAW;qBAC7B,CAAC,CAAC;oBAEH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,KAAK,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;oBAE9E,IAAI,OAAO,EAAE,eAAe,EAAE,CAAC;wBAC7B,OAAO,CAAC,IAAI,CAAC;4BACX,OAAO,EAAE,KAAK;4BACd,MAAM,EAAE,EAAE;4BACV,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;4BAC7D,QAAQ,EAAE,CAAC;yBACZ,CAAC,CAAC;wBACH,SAAS;oBACX,CAAC;yBAAM,CAAC;wBACN,MAAM,KAAK,CAAC;oBACd,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;YAC/D,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0DAA0D,EAAE,KAAK,CAAC,CAAC;YACjF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,OAA6B;QAC7D,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE;YACvC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,gBAAgB,OAAO,EAAE;YAClD,OAAO,EAAE,OAAO,EAAE,OAAO;YACzB,WAAW,EAAE,OAAO,EAAE,WAAW;YACjC,QAAQ,EAAE,OAAO,EAAE,QAAQ;YAC3B,OAAO,EAAE,OAAO,EAAE,OAAO;YACzB,cAAc,EAAE,OAAO,EAAE,cAAc;YACvC,cAAc,EAAE,OAAO,EAAE,cAAc;SACxC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,gBAAgB,CACpB,OAAe,EACf,UAAyD,EAAE;QAE3D,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CACT,mDAAmD,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CACxG,CAAC;YAEF,MAAM,SAAS,GAAyB;gBACtC,KAAK,EAAE,cAAc,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE;gBACzE,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,KAAK;wBACX,OAAO;wBACP,OAAO,EAAE;4BACP,SAAS,EAAE,OAAO,CAAC,SAAS;yBAC7B;qBACF;iBACF;aACF,CAAC;YAEF,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAE3C,oBAAoB;YACpB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACxB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;YAC3E,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,kDAAkD,OAAO,EAAE,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,+CAA+C,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;YAC/E,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,SAAS;QACf,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;YAC1E,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,oBAAoB;QAClB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,sBAAsB;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;IAC7C,CAAC;CACF"}