@whiteroom-ai/cli 2.1.2 → 2.1.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.
- package/README.md +1 -0
- package/dist/sandbox/index.js +2 -0
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/run.d.ts +18 -1
- package/dist/sandbox/run.js +34 -2
- package/dist/sandbox/run.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -76,6 +76,7 @@ whiteroom sandbox run --provider anthropic -- python agent.py
|
|
|
76
76
|
- It asks for your Sandbox URL (it won't show; or set `WHITEROOM_SANDBOX_URL`), sets the base URL your SDK reads (`ANTHROPIC_BASE_URL`, `OPENAI_BASE_URL` ending in `/v1`, or `AZURE_OPENAI_ENDPOINT`) and runs your command once, as typed, without a shell. The Sandbox page's checks start on its first call.
|
|
77
77
|
- Providers: `anthropic`, `openai`, `azure-openai`, `foundry`, `bedrock-mantle`.
|
|
78
78
|
- If another base URL in your environment points at WhiteRoom, it stops without running anything, so calls can't go to production by mistake.
|
|
79
|
+
- When your agent exits, it tells your Sandbox the exit code (and nothing else), so the Sandbox page's check ends then instead of waiting for more calls. If that takes longer than 3 seconds or fails, it's skipped. Set `WHITEROOM_NO_EXIT_REPORT=1` to turn it off.
|
|
79
80
|
- It exits with your agent's exit code (`128` plus the signal's number if a signal ended it), `2` for a setup or usage problem, or `130` if you press Ctrl+C at the Sandbox URL prompt.
|
|
80
81
|
- For `openai` it also sets `OPENAI_API_BASE`, which older SDKs read.
|
|
81
82
|
- Ctrl+C reaches your agent once, from the terminal. To stop a run from a script, send `SIGTERM` to the CLI; it passes that on (a `SIGINT` sent to the CLI alone isn't).
|
package/dist/sandbox/index.js
CHANGED
|
@@ -15,6 +15,8 @@ Usage:
|
|
|
15
15
|
which you paste when asked (or set WHITEROOM_SANDBOX_URL).
|
|
16
16
|
Example: whiteroom sandbox run --provider anthropic -- python agent.py
|
|
17
17
|
Providers: ${RUN_PROVIDERS.join(", ")}.
|
|
18
|
+
Tells your Sandbox its exit code when it exits, so the page's
|
|
19
|
+
check ends then (WHITEROOM_NO_EXIT_REPORT=1 turns this off).
|
|
18
20
|
Exits with your agent's exit code; 2 for a setup or usage problem,
|
|
19
21
|
130 if you press Ctrl+C before it starts.
|
|
20
22
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sandbox/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,8DAA8D;AAC9D,sDAAsD;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,aAAa,EAAoB,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;yBASJ,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sandbox/index.ts"],"names":[],"mappings":"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"}
|
package/dist/sandbox/run.d.ts
CHANGED
|
@@ -32,6 +32,23 @@ export declare function sandboxUrlOf(raw: string, env?: NodeJS.ProcessEnv): {
|
|
|
32
32
|
} | {
|
|
33
33
|
problem: string;
|
|
34
34
|
};
|
|
35
|
+
/** What the Sandbox is told when the agent exits: its own exit code (null when a signal ended it), and how long it ran. */
|
|
36
|
+
export interface AgentExit {
|
|
37
|
+
code: number | null;
|
|
38
|
+
signal: boolean;
|
|
39
|
+
ranMs: number;
|
|
40
|
+
}
|
|
41
|
+
/** How long the exit report may take before the CLI exits anyway. */
|
|
42
|
+
export declare const EXIT_REPORT_MS = 3000;
|
|
43
|
+
/** Sends an exit report; tests pass their own. */
|
|
44
|
+
export type ExitReporter = (sandboxUrl: string, exit: AgentExit) => Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Tells the Sandbox the agent exited (POST /api/sandbox/exit on the WhiteRoom
|
|
47
|
+
* address the URL was checked against, with its Sandbox key), so its check
|
|
48
|
+
* ends now. Best effort: no redirects, EXIT_REPORT_MS at most, and nothing is
|
|
49
|
+
* printed or changed when it fails.
|
|
50
|
+
*/
|
|
51
|
+
export declare function reportExit(sandboxUrl: string, exit: AgentExit): Promise<void>;
|
|
35
52
|
export interface RunArgs {
|
|
36
53
|
provider: RunProvider;
|
|
37
54
|
command: string[];
|
|
@@ -41,4 +58,4 @@ export interface Asker {
|
|
|
41
58
|
terminal: boolean;
|
|
42
59
|
ask: (question: string) => Promise<string>;
|
|
43
60
|
}
|
|
44
|
-
export declare function run(a: RunArgs, env?: NodeJS.ProcessEnv, asker?: Asker): Promise<number>;
|
|
61
|
+
export declare function run(a: RunArgs, env?: NodeJS.ProcessEnv, asker?: Asker, report?: ExitReporter): Promise<number>;
|
package/dist/sandbox/run.js
CHANGED
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
// The command runs as typed, without a shell; nothing from WhiteRoom is put
|
|
6
6
|
// into it. Refuses to start while another base URL in the environment points
|
|
7
7
|
// at WhiteRoom, so the agent's calls can't go to production by mistake.
|
|
8
|
+
// When the agent exits, its exit code is sent to the Sandbox (reportExit), so
|
|
9
|
+
// the page's check ends then instead of waiting for more calls.
|
|
8
10
|
import { spawn } from "node:child_process";
|
|
9
11
|
import { constants } from "node:os";
|
|
10
12
|
import { hiddenPrompt, Interrupted, nodeTooOld, targetOrigin } from "../practice/preflight.js";
|
|
@@ -73,9 +75,32 @@ export function sandboxUrlOf(raw, env = {}) {
|
|
|
73
75
|
return { problem: runCopy.notWhiteRoom };
|
|
74
76
|
return { url: `${new URL(m[1]).origin}/${m[2]}` };
|
|
75
77
|
}
|
|
78
|
+
/** How long the exit report may take before the CLI exits anyway. */
|
|
79
|
+
export const EXIT_REPORT_MS = 3_000;
|
|
80
|
+
/**
|
|
81
|
+
* Tells the Sandbox the agent exited (POST /api/sandbox/exit on the WhiteRoom
|
|
82
|
+
* address the URL was checked against, with its Sandbox key), so its check
|
|
83
|
+
* ends now. Best effort: no redirects, EXIT_REPORT_MS at most, and nothing is
|
|
84
|
+
* printed or changed when it fails.
|
|
85
|
+
*/
|
|
86
|
+
export async function reportExit(sandboxUrl, exit) {
|
|
87
|
+
const { origin, pathname } = new URL(sandboxUrl);
|
|
88
|
+
try {
|
|
89
|
+
await fetch(`${origin}/api/sandbox/exit`, {
|
|
90
|
+
method: "POST",
|
|
91
|
+
redirect: "error",
|
|
92
|
+
signal: AbortSignal.timeout(EXIT_REPORT_MS),
|
|
93
|
+
headers: { "Content-Type": "application/json", "X-WhiteRoom-Key": pathname.slice(1) },
|
|
94
|
+
body: JSON.stringify({ code: exit.code, signal: exit.signal, ran_ms: exit.ranMs }),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
// An older WhiteRoom, no network, too slow: the page's check ends on its own.
|
|
99
|
+
}
|
|
100
|
+
}
|
|
76
101
|
const fail = (line) => (warn(line), 2);
|
|
77
102
|
const TERMINAL = { get terminal() { return !!process.stdin.isTTY; }, ask: (q) => hiddenPrompt(q) };
|
|
78
|
-
export async function run(a, env = process.env, asker = TERMINAL) {
|
|
103
|
+
export async function run(a, env = process.env, asker = TERMINAL, report = reportExit) {
|
|
79
104
|
const old = nodeTooOld();
|
|
80
105
|
if (old)
|
|
81
106
|
return fail(old);
|
|
@@ -118,6 +143,7 @@ export async function run(a, env = process.env, asker = TERMINAL) {
|
|
|
118
143
|
resolve(code);
|
|
119
144
|
};
|
|
120
145
|
let child;
|
|
146
|
+
const started = Date.now();
|
|
121
147
|
try {
|
|
122
148
|
child = spawn(cmd, args, { stdio: "inherit", env: childEnv });
|
|
123
149
|
}
|
|
@@ -133,7 +159,13 @@ export async function run(a, env = process.env, asker = TERMINAL) {
|
|
|
133
159
|
}
|
|
134
160
|
child.on("error", (err) => done(fail(err.code === "ENOENT" ? runCopy.notFound(cmd) : runCopy.couldntStart(cmd, err.message))));
|
|
135
161
|
// The agent's own exit code; killed by a signal, 128 + its number, as a shell reports it.
|
|
136
|
-
|
|
162
|
+
// The Sandbox hears the exit first (WHITEROOM_NO_EXIT_REPORT=1 turns that off); it never changes the code.
|
|
163
|
+
child.on("exit", (code, signal) => {
|
|
164
|
+
const exitCode = code ?? 128 + (signal ? constants.signals[signal] ?? 0 : 0);
|
|
165
|
+
const told = env.WHITEROOM_NO_EXIT_REPORT === "1" ? Promise.resolve()
|
|
166
|
+
: report(checked.url, { code: signal ? null : code, signal: !!signal, ranMs: Date.now() - started }).catch(() => undefined);
|
|
167
|
+
void told.then(() => done(exitCode));
|
|
168
|
+
});
|
|
137
169
|
});
|
|
138
170
|
}
|
|
139
171
|
//# sourceMappingURL=run.js.map
|
package/dist/sandbox/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/sandbox/run.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,2EAA2E;AAC3E,2EAA2E;AAC3E,6EAA6E;AAC7E,4EAA4E;AAC5E,6EAA6E;AAC7E,wEAAwE;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/sandbox/run.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,2EAA2E;AAC3E,2EAA2E;AAC3E,6EAA6E;AAC7E,4EAA4E;AAC5E,6EAA6E;AAC7E,wEAAwE;AACxE,8EAA8E;AAC9E,gEAAgE;AAEhE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC/F,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,6FAA6F;AAC7F,MAAM,WAAW,GAAG,sEAAsE,CAAC;AAE3F,qEAAqE;AACrE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,gBAAgB,CAAU,CAAC;AAG3G,4HAA4H;AAC5H,MAAM,aAAa,GAAG,CAAC,oBAAoB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,uBAAuB,CAAC,CAAC;AAE5G,2GAA2G;AAC3G,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,EAAE,CAAC;AAEpF,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,OAAO,EAAE,gEAAgE;IACzE,MAAM,EAAE,yGAAyG;IACjH,UAAU,EAAE,mGAAmG;IAC/G,YAAY,EAAE,mGAAmG;IACjH,iBAAiB,EAAE,CAAC,IAAc,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,8FAA8F,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,yCAAyC;IACtR,MAAM,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,qCAAqC,GAAG,IAAI;IACrE,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,2BAA2B,IAAI,gGAAgG;IAC1J,SAAS,EAAE,2BAA2B;IACtC,QAAQ,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,oBAAoB,GAAG,+DAA+D,OAAO,EAAE;IAC1H,YAAY,EAAE,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE,CAAC,oBAAoB,GAAG,OAAO,GAAG,IAAI,OAAO,EAAE;CAC3F,CAAC;AAEF,yHAAyH;AACzH,MAAM,UAAU,cAAc,CAAC,QAAqB,EAAE,GAAW;IAC/D,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,QAAQ,KAAK,cAAc;QAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACvF,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,GAAG,IAAI,KAAK,EAAE,CAAC;IACnF,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACrD,CAAC;AAED,qJAAqJ;AACrJ,MAAM,UAAU,eAAe,CAAC,QAAqB,EAAE,GAAW;IAChE,MAAM,CAAC,GAAG,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACxC,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AACzG,CAAC;AAED,yIAAyI;AACzI,MAAM,UAAU,iBAAiB,CAAC,GAAsB,EAAE,MAAyB;IACjF,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACnC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE;YAAE,OAAO,KAAK,CAAC;QAC9D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC;YACjD,OAAO,IAAI,KAAK,gBAAgB,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACvE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,GAAG,GAAsB,EAAE;IACnE,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;IACpH,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC1C,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IAC3C,gIAAgI;IAChI,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;IAC/E,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACpD,CAAC;AAID,qEAAqE;AACrE,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC;AAIpC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAkB,EAAE,IAAe;IAClE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,MAAM,mBAAmB,EAAE;YACxC,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,OAAO;YACjB,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC;YAC3C,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACrF,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;SACnF,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,8EAA8E;IAChF,CAAC;AACH,CAAC;AAOD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAI/C,MAAM,QAAQ,GAAU,EAAE,IAAI,QAAQ,KAAK,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;AAE1G,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,CAAU,EAAE,GAAG,GAAsB,OAAO,CAAC,GAAG,EAAE,KAAK,GAAU,QAAQ,EAAE,MAAM,GAAiB,UAAU;IACpI,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,GAAG,GAAG,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC;IAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,IAAI,CAAC,KAAK,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,WAAW;gBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC;YACpE,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACvC,IAAI,SAAS,IAAI,OAAO;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,+FAA+F;IAC/F,IAAI,CAAC,GAAG,CAAC,qBAAqB;QAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5D,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IAEhE,qGAAqG;IACrG,MAAM,QAAQ,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IACpD,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACnC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;IACjC,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;QACrC,8FAA8F;QAC9F,iGAAiG;QACjG,iGAAiG;QACjG,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA8B,CAAC;QACvD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE;YAC5B,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,QAAQ;gBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC;QACF,IAAI,KAA+B,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,+EAA+E;YAC/E,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACvE,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAqB,EAAE,CAAC;YACtE,MAAM,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,KAAK,QAAQ;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACrB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,CAAC;QACD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACtJ,0FAA0F;QAC1F,2GAA2G;QAC3G,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAChC,MAAM,QAAQ,GAAG,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,MAAM,IAAI,GAAG,GAAG,CAAC,wBAAwB,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE;gBACnE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC9H,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|