@mohitkumawat/warmup-cli 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 (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +107 -0
  3. package/dist/commands/execute.d.ts +6 -0
  4. package/dist/commands/execute.d.ts.map +1 -0
  5. package/dist/commands/execute.js +52 -0
  6. package/dist/commands/execute.js.map +1 -0
  7. package/dist/commands/pause.d.ts +2 -0
  8. package/dist/commands/pause.d.ts.map +1 -0
  9. package/dist/commands/pause.js +18 -0
  10. package/dist/commands/pause.js.map +1 -0
  11. package/dist/commands/resume.d.ts +2 -0
  12. package/dist/commands/resume.d.ts.map +1 -0
  13. package/dist/commands/resume.js +18 -0
  14. package/dist/commands/resume.js.map +1 -0
  15. package/dist/commands/setup.d.ts +2 -0
  16. package/dist/commands/setup.d.ts.map +1 -0
  17. package/dist/commands/setup.js +173 -0
  18. package/dist/commands/setup.js.map +1 -0
  19. package/dist/commands/status.d.ts +2 -0
  20. package/dist/commands/status.d.ts.map +1 -0
  21. package/dist/commands/status.js +14 -0
  22. package/dist/commands/status.js.map +1 -0
  23. package/dist/commands/test.d.ts +2 -0
  24. package/dist/commands/test.d.ts.map +1 -0
  25. package/dist/commands/test.js +27 -0
  26. package/dist/commands/test.js.map +1 -0
  27. package/dist/commands/uninstall.d.ts +2 -0
  28. package/dist/commands/uninstall.d.ts.map +1 -0
  29. package/dist/commands/uninstall.js +38 -0
  30. package/dist/commands/uninstall.js.map +1 -0
  31. package/dist/commands/update.d.ts +2 -0
  32. package/dist/commands/update.d.ts.map +1 -0
  33. package/dist/commands/update.js +112 -0
  34. package/dist/commands/update.js.map +1 -0
  35. package/dist/config.d.ts +51 -0
  36. package/dist/config.d.ts.map +1 -0
  37. package/dist/config.js +320 -0
  38. package/dist/config.js.map +1 -0
  39. package/dist/index.d.ts +3 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +113 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/runtime.d.ts +9 -0
  44. package/dist/runtime.d.ts.map +1 -0
  45. package/dist/runtime.js +91 -0
  46. package/dist/runtime.js.map +1 -0
  47. package/dist/scheduler/index.d.ts +15 -0
  48. package/dist/scheduler/index.d.ts.map +1 -0
  49. package/dist/scheduler/index.js +103 -0
  50. package/dist/scheduler/index.js.map +1 -0
  51. package/dist/scheduler/linux.d.ts +12 -0
  52. package/dist/scheduler/linux.d.ts.map +1 -0
  53. package/dist/scheduler/linux.js +301 -0
  54. package/dist/scheduler/linux.js.map +1 -0
  55. package/dist/scheduler/macos.d.ts +16 -0
  56. package/dist/scheduler/macos.d.ts.map +1 -0
  57. package/dist/scheduler/macos.js +170 -0
  58. package/dist/scheduler/macos.js.map +1 -0
  59. package/dist/scheduler/windows.d.ts +14 -0
  60. package/dist/scheduler/windows.d.ts.map +1 -0
  61. package/dist/scheduler/windows.js +139 -0
  62. package/dist/scheduler/windows.js.map +1 -0
  63. package/dist/ui.d.ts +19 -0
  64. package/dist/ui.d.ts.map +1 -0
  65. package/dist/ui.js +329 -0
  66. package/dist/ui.js.map +1 -0
  67. package/dist/warmup.d.ts +32 -0
  68. package/dist/warmup.d.ts.map +1 -0
  69. package/dist/warmup.js +154 -0
  70. package/dist/warmup.js.map +1 -0
  71. package/package.json +60 -0
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.buildMacWarmupScript = buildMacWarmupScript;
37
+ exports.installMacSchedule = installMacSchedule;
38
+ exports.uninstallMacSchedule = uninstallMacSchedule;
39
+ exports.isMacScheduleInstalled = isMacScheduleInstalled;
40
+ exports.pauseMacSchedule = pauseMacSchedule;
41
+ exports.resumeMacSchedule = resumeMacSchedule;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const os = __importStar(require("os"));
45
+ const child_process_1 = require("child_process");
46
+ const PLIST_NAME = 'com.warmup.prewarm';
47
+ const PLIST_DIR = path.join(os.homedir(), 'Library', 'LaunchAgents');
48
+ const PLIST_PATH = path.join(PLIST_DIR, `${PLIST_NAME}.plist`);
49
+ /**
50
+ * Get the path to the warmup script.
51
+ * We generate a small shell script that warmup's launchd plist will execute.
52
+ */
53
+ function getWarmupScriptPath() {
54
+ return path.join(os.homedir(), '.warmup', 'warmup.sh');
55
+ }
56
+ function shellQuote(value) {
57
+ return `'${value.replace(/'/g, `'\\''`)}'`;
58
+ }
59
+ function buildMacWarmupScript(runtime) {
60
+ return `#!/bin/bash
61
+ set -euo pipefail
62
+
63
+ mkdir -p "$HOME/.warmup/logs"
64
+
65
+ ${shellQuote(runtime.nodePath)} ${shellQuote(runtime.cliEntry)} _execute-warmup >> "$HOME/.warmup/logs/launchd.log" 2>&1
66
+ `;
67
+ }
68
+ /** Create the warmup shell script that launchd will execute */
69
+ function createWarmupScript(runtime) {
70
+ const scriptPath = getWarmupScriptPath();
71
+ const script = buildMacWarmupScript(runtime);
72
+ fs.writeFileSync(scriptPath, script, { mode: 0o755 });
73
+ return scriptPath;
74
+ }
75
+ /**
76
+ * Install a launchd plist for macOS.
77
+ * Key feature: RunAtLoad=true ensures boot-recovery.
78
+ */
79
+ function installMacSchedule(options) {
80
+ // Ensure LaunchAgents directory exists
81
+ if (!fs.existsSync(PLIST_DIR)) {
82
+ fs.mkdirSync(PLIST_DIR, { recursive: true });
83
+ }
84
+ const scriptPath = createWarmupScript(options.runtime);
85
+ const { hour, minute } = options;
86
+ const plist = `<?xml version="1.0" encoding="UTF-8"?>
87
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
88
+ <plist version="1.0">
89
+ <dict>
90
+ <key>Label</key>
91
+ <string>${PLIST_NAME}</string>
92
+
93
+ <key>ProgramArguments</key>
94
+ <array>
95
+ <string>/bin/bash</string>
96
+ <string>${scriptPath}</string>
97
+ </array>
98
+
99
+ <!-- Schedule: fire at specified time daily -->
100
+ <key>StartCalendarInterval</key>
101
+ <dict>
102
+ <key>Hour</key>
103
+ <integer>${hour}</integer>
104
+ <key>Minute</key>
105
+ <integer>${minute}</integer>
106
+ </dict>
107
+
108
+ <!-- BOOT RECOVERY: Run immediately on load if scheduled time was missed -->
109
+ <key>RunAtLoad</key>
110
+ <true/>
111
+
112
+ <!-- Don't run if already running -->
113
+ <key>KeepAlive</key>
114
+ <false/>
115
+
116
+ <!-- Working directory -->
117
+ <key>WorkingDirectory</key>
118
+ <string>${os.homedir()}</string>
119
+
120
+ <!-- Logging -->
121
+ <key>StandardOutPath</key>
122
+ <string>${path.join(os.homedir(), '.warmup', 'logs', 'launchd-stdout.log')}</string>
123
+ <key>StandardErrorPath</key>
124
+ <string>${path.join(os.homedir(), '.warmup', 'logs', 'launchd-stderr.log')}</string>
125
+ </dict>
126
+ </plist>`;
127
+ fs.writeFileSync(PLIST_PATH, plist);
128
+ // Unload first if already loaded (ignore errors)
129
+ try {
130
+ (0, child_process_1.execSync)(`launchctl unload ${PLIST_PATH} 2>/dev/null`, { stdio: 'pipe' });
131
+ }
132
+ catch { }
133
+ // Load the plist
134
+ (0, child_process_1.execSync)(`launchctl load ${PLIST_PATH}`);
135
+ }
136
+ /** Remove the launchd plist */
137
+ function uninstallMacSchedule() {
138
+ try {
139
+ (0, child_process_1.execSync)(`launchctl unload ${PLIST_PATH} 2>/dev/null`, { stdio: 'pipe' });
140
+ }
141
+ catch { }
142
+ if (fs.existsSync(PLIST_PATH)) {
143
+ fs.unlinkSync(PLIST_PATH);
144
+ }
145
+ const scriptPath = getWarmupScriptPath();
146
+ if (fs.existsSync(scriptPath)) {
147
+ fs.unlinkSync(scriptPath);
148
+ }
149
+ }
150
+ /** Check if macOS schedule is installed */
151
+ function isMacScheduleInstalled() {
152
+ return fs.existsSync(PLIST_PATH);
153
+ }
154
+ /** Temporarily disable by unloading (don't delete) */
155
+ function pauseMacSchedule() {
156
+ try {
157
+ (0, child_process_1.execSync)(`launchctl unload ${PLIST_PATH} 2>/dev/null`, { stdio: 'pipe' });
158
+ }
159
+ catch { }
160
+ }
161
+ /** Re-enable by loading */
162
+ function resumeMacSchedule() {
163
+ if (fs.existsSync(PLIST_PATH)) {
164
+ try {
165
+ (0, child_process_1.execSync)(`launchctl load ${PLIST_PATH}`, { stdio: 'pipe' });
166
+ }
167
+ catch { }
168
+ }
169
+ }
170
+ //# sourceMappingURL=macos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"macos.js","sourceRoot":"","sources":["../../src/scheduler/macos.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { ScheduleInstallOptions } from './index';
2
+ export declare function buildWindowsWarmupScript(runtime: ScheduleInstallOptions['runtime']): string;
3
+ /**
4
+ * Install Windows Task Scheduler task.
5
+ * Key: StartWhenAvailable enables "run ASAP if missed" for boot-recovery.
6
+ */
7
+ export declare function installWindowsSchedule(options: ScheduleInstallOptions): void;
8
+ /** Remove Windows scheduled task */
9
+ export declare function uninstallWindowsSchedule(): void;
10
+ /** Check if Windows schedule is installed */
11
+ export declare function isWindowsScheduleInstalled(): boolean;
12
+ export declare function pauseWindowsSchedule(): void;
13
+ export declare function resumeWindowsSchedule(): void;
14
+ //# sourceMappingURL=windows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows.d.ts","sourceRoot":"","sources":["../../src/scheduler/windows.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAYtD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,sBAAsB,CAAC,SAAS,CAAC,GAAG,MAAM,CAQ3F;AAUD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAqC5E;AAED,oCAAoC;AACpC,wBAAgB,wBAAwB,IAAI,IAAI,CAS/C;AAED,6CAA6C;AAC7C,wBAAgB,0BAA0B,IAAI,OAAO,CAOpD;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAI3C;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C"}
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.buildWindowsWarmupScript = buildWindowsWarmupScript;
37
+ exports.installWindowsSchedule = installWindowsSchedule;
38
+ exports.uninstallWindowsSchedule = uninstallWindowsSchedule;
39
+ exports.isWindowsScheduleInstalled = isWindowsScheduleInstalled;
40
+ exports.pauseWindowsSchedule = pauseWindowsSchedule;
41
+ exports.resumeWindowsSchedule = resumeWindowsSchedule;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const os = __importStar(require("os"));
45
+ const child_process_1 = require("child_process");
46
+ const TASK_NAME = 'warmup';
47
+ function getWarmupScriptPath() {
48
+ return path.join(os.homedir(), '.warmup', 'warmup.bat');
49
+ }
50
+ function windowsQuote(value) {
51
+ return value.replace(/"/g, '""');
52
+ }
53
+ function buildWindowsWarmupScript(runtime) {
54
+ return `@echo off
55
+ setlocal
56
+
57
+ if not exist "%USERPROFILE%\\.warmup\\logs" mkdir "%USERPROFILE%\\.warmup\\logs"
58
+
59
+ "${windowsQuote(runtime.nodePath)}" "${windowsQuote(runtime.cliEntry)}" _execute-warmup >> "%USERPROFILE%\\.warmup\\logs\\schtasks.log" 2>&1
60
+ `;
61
+ }
62
+ /** Create the warmup batch script for Windows */
63
+ function createWarmupScript(runtime) {
64
+ const scriptPath = getWarmupScriptPath();
65
+ const script = buildWindowsWarmupScript(runtime);
66
+ fs.writeFileSync(scriptPath, script);
67
+ return scriptPath;
68
+ }
69
+ /**
70
+ * Install Windows Task Scheduler task.
71
+ * Key: StartWhenAvailable enables "run ASAP if missed" for boot-recovery.
72
+ */
73
+ function installWindowsSchedule(options) {
74
+ const scriptPath = createWarmupScript(options.runtime);
75
+ const hStr = options.hour.toString().padStart(2, '0');
76
+ const mStr = options.minute.toString().padStart(2, '0');
77
+ const timeStr = `${hStr}:${mStr}`;
78
+ // Remove existing task first
79
+ try {
80
+ (0, child_process_1.execSync)(`schtasks /Delete /TN "${TASK_NAME}" /F 2>nul`, { stdio: 'pipe' });
81
+ }
82
+ catch { }
83
+ // Create scheduled task
84
+ // /SC DAILY = run daily
85
+ // /ST = start time
86
+ // /RI 1 = repeat interval (enables missed-run recovery)
87
+ // /DU 0000:05 = duration window for repeat
88
+ (0, child_process_1.execSync)(`schtasks /Create /TN "${TASK_NAME}" /TR "${scriptPath}" /SC DAILY /ST ${timeStr} /F`, { stdio: 'pipe' });
89
+ // Enable "run as soon as possible after a scheduled start is missed"
90
+ // This requires modifying the task XML — use PowerShell
91
+ try {
92
+ const psCommand = `
93
+ $task = Get-ScheduledTask -TaskName '${TASK_NAME}'
94
+ $task.Settings.StartWhenAvailable = $true
95
+ $task.Settings.WakeToRun = $false
96
+ $task.Settings.DisallowStartIfOnBatteries = $false
97
+ $task.Settings.StopIfGoingOnBatteries = $false
98
+ Set-ScheduledTask -InputObject $task
99
+ `.replace(/\n/g, '; ');
100
+ (0, child_process_1.execSync)(`powershell -Command "${psCommand}"`, { stdio: 'pipe' });
101
+ }
102
+ catch {
103
+ // StartWhenAvailable is the key feature; if PowerShell fails, the basic task still works
104
+ }
105
+ }
106
+ /** Remove Windows scheduled task */
107
+ function uninstallWindowsSchedule() {
108
+ try {
109
+ (0, child_process_1.execSync)(`schtasks /Delete /TN "${TASK_NAME}" /F 2>nul`, { stdio: 'pipe' });
110
+ }
111
+ catch { }
112
+ const scriptPath = getWarmupScriptPath();
113
+ if (fs.existsSync(scriptPath)) {
114
+ fs.unlinkSync(scriptPath);
115
+ }
116
+ }
117
+ /** Check if Windows schedule is installed */
118
+ function isWindowsScheduleInstalled() {
119
+ try {
120
+ (0, child_process_1.execSync)(`schtasks /Query /TN "${TASK_NAME}" 2>nul`, { stdio: 'pipe' });
121
+ return true;
122
+ }
123
+ catch {
124
+ return false;
125
+ }
126
+ }
127
+ function pauseWindowsSchedule() {
128
+ try {
129
+ (0, child_process_1.execSync)(`schtasks /Change /TN "${TASK_NAME}" /DISABLE`, { stdio: 'pipe' });
130
+ }
131
+ catch { }
132
+ }
133
+ function resumeWindowsSchedule() {
134
+ try {
135
+ (0, child_process_1.execSync)(`schtasks /Change /TN "${TASK_NAME}" /ENABLE`, { stdio: 'pipe' });
136
+ }
137
+ catch { }
138
+ }
139
+ //# sourceMappingURL=windows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows.js","sourceRoot":"","sources":["../../src/scheduler/windows.ts"],"names":[],"mappings":"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"}
package/dist/ui.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ import { WarmupConfig } from './config';
2
+ export declare function printLogo(): void;
3
+ export declare function printMiniLogo(): void;
4
+ export declare function animateSetupComplete(config: WarmupConfig): Promise<void>;
5
+ export declare function displayStatus(config: WarmupConfig, options?: {
6
+ needsRuntimeRefresh?: boolean;
7
+ }): Promise<void>;
8
+ export declare function animateBootRecovery(scheduledTime: string, actualTime: string): Promise<void>;
9
+ export declare function animateBootRecoverySuccess(resetTime: string): Promise<void>;
10
+ export declare function animateTestWarmup(): Promise<void>;
11
+ export declare function animateTestSuccess(duration: number): Promise<void>;
12
+ export declare function animateTestFailure(message: string): Promise<void>;
13
+ export declare function printPaused(): void;
14
+ export declare function printResumed(config: WarmupConfig): void;
15
+ export declare function printUninstalled(): void;
16
+ export declare function printNoClaudeCode(): void;
17
+ export declare function printNotSetup(): void;
18
+ export declare function printAlreadySetup(config: WarmupConfig): void;
19
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAuD,MAAM,UAAU,CAAC;AAqB7F,wBAAgB,SAAS,IAAI,IAAI,CAahC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAGD,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAuG9E;AAGD,wBAAsB,aAAa,CACjC,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE;IAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9C,OAAO,CAAC,IAAI,CAAC,CA+Gf;AAGD,wBAAsB,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMlG;AAED,wBAAsB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQjF;AAGD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAIvD;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIxE;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvE;AAGD,wBAAgB,WAAW,IAAI,IAAI,CAKlC;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAQvD;AAGD,wBAAgB,gBAAgB,IAAI,IAAI,CAMvC;AAGD,wBAAgB,iBAAiB,IAAI,IAAI,CAcxC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAS5D"}