experimental-agent 0.4.0 → 0.6.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.
Files changed (52) hide show
  1. package/dist/{adapter-zgOel4wW.d.mts → adapter-DmlMKodR.d.mts} +4 -60
  2. package/dist/{adapter-zgOel4wW.d.ts → adapter-DmlMKodR.d.ts} +4 -60
  3. package/dist/{chunk-ZUFJJYC4.mjs → chunk-2Y7EZPIP.mjs} +3 -2
  4. package/dist/{chunk-MSTM6W3Y.mjs → chunk-355UN6NT.mjs} +11 -3
  5. package/dist/{chunk-RT72C52I.mjs → chunk-6MS4CGEZ.mjs} +3 -2
  6. package/dist/chunk-CS2SEUAA.mjs +405 -0
  7. package/dist/chunk-LZOMFHX3.mjs +38 -0
  8. package/dist/chunk-NOW6XL5E.mjs +310 -0
  9. package/dist/chunk-PH2FXKOU.mjs +9 -0
  10. package/dist/client-Cd-79N5B.d.ts +494 -0
  11. package/dist/client-panIugEx.d.mts +494 -0
  12. package/dist/client.mjs +1 -1
  13. package/dist/{docker-QPCLWLYR.mjs → docker-FCSNVBEQ.mjs} +2 -2
  14. package/dist/entry-CciSxlDK.d.mts +45 -0
  15. package/dist/entry-MCzvxs7U.d.ts +45 -0
  16. package/dist/index.d.mts +475 -384
  17. package/dist/index.d.ts +475 -384
  18. package/dist/index.js +16693 -219
  19. package/dist/index.mjs +16545 -160
  20. package/dist/lifecycle-workflow-steps.d.mts +2 -2
  21. package/dist/lifecycle-workflow-steps.d.ts +2 -2
  22. package/dist/lifecycle-workflow-steps.mjs +1 -1
  23. package/dist/lifecycle-workflow.d.mts +2 -2
  24. package/dist/lifecycle-workflow.d.ts +2 -2
  25. package/dist/lifecycle-workflow.mjs +1 -1
  26. package/dist/{local-KJ3BSIFJ.mjs → local-NXHIUJTO.mjs} +2 -2
  27. package/dist/next/loader.js +11 -3
  28. package/dist/next/loader.mjs +2 -2
  29. package/dist/next.js +11 -3
  30. package/dist/next.mjs +2 -2
  31. package/dist/{process-manager-WQHAIVRB.mjs → process-manager-26NELLRU.mjs} +1 -1
  32. package/dist/react.d.mts +56 -0
  33. package/dist/react.d.ts +56 -0
  34. package/dist/react.js +144 -0
  35. package/dist/react.mjs +117 -0
  36. package/dist/sandbox.d.mts +3 -3
  37. package/dist/sandbox.d.ts +3 -3
  38. package/dist/sandbox.js +15 -5
  39. package/dist/sandbox.mjs +4 -4
  40. package/dist/{steps-BIsP57pm.d.mts → steps-DWQYXexO.d.mts} +5 -2
  41. package/dist/{steps-DShnXBLf.d.ts → steps-DnvPkAtl.d.ts} +5 -2
  42. package/dist/storage.d.mts +2 -2
  43. package/dist/storage.d.ts +2 -2
  44. package/dist/storage.js +133 -56
  45. package/dist/storage.mjs +2 -2
  46. package/dist/{vercel-QZ6INPMV.mjs → vercel-LJEWLD4T.mjs} +2 -2
  47. package/package.json +10 -2
  48. package/dist/chunk-BFFNCESS.mjs +0 -302
  49. package/dist/chunk-BJTO5JO5.mjs +0 -11
  50. package/dist/chunk-IV75IMEW.mjs +0 -328
  51. package/dist/entry-6HYg5qqg.d.mts +0 -36
  52. package/dist/entry-BrWOmEK2.d.ts +0 -36
@@ -1,302 +0,0 @@
1
- // src/sandbox/bindings/docker.ts
2
- import { ulid } from "ulid";
3
- async function execDocker(args, opts) {
4
- const { spawn } = await import("child_process");
5
- return new Promise((resolve, reject) => {
6
- const child = spawn("docker", ["sandbox", ...args], {
7
- signal: opts?.signal
8
- });
9
- let stdout = "";
10
- let stderr = "";
11
- child.stdout.on("data", (data) => {
12
- stdout += data.toString();
13
- });
14
- child.stderr.on("data", (data) => {
15
- stderr += data.toString();
16
- });
17
- const timeoutId = opts?.timeoutMs ? setTimeout(() => {
18
- child.kill("SIGTERM");
19
- reject(new Error(`docker sandbox ${args[0]} timed out`));
20
- }, opts.timeoutMs) : void 0;
21
- child.on("error", (err) => {
22
- if (timeoutId) {
23
- clearTimeout(timeoutId);
24
- }
25
- reject(err);
26
- });
27
- child.on("close", (code) => {
28
- if (timeoutId) {
29
- clearTimeout(timeoutId);
30
- }
31
- resolve({ stdout, stderr, exitCode: code ?? 0 });
32
- });
33
- });
34
- }
35
- var ensurePromises = /* @__PURE__ */ new Map();
36
- var activeSandboxes = /* @__PURE__ */ new Set();
37
- var cleanupRegistered = false;
38
- var _execSync = null;
39
- async function registerCleanup() {
40
- if (cleanupRegistered) {
41
- return;
42
- }
43
- cleanupRegistered = true;
44
- const cp = await import("child_process");
45
- _execSync = cp.execSync;
46
- const cleanup = () => {
47
- if (!_execSync) {
48
- return;
49
- }
50
- for (const name of Array.from(activeSandboxes)) {
51
- try {
52
- _execSync(`docker sandbox stop ${name}`, {
53
- timeout: 1e4,
54
- stdio: "pipe"
55
- });
56
- } catch {
57
- }
58
- }
59
- };
60
- process.on("exit", cleanup);
61
- process.on("SIGINT", () => {
62
- cleanup();
63
- process.exit(130);
64
- });
65
- process.on("SIGTERM", () => {
66
- cleanup();
67
- process.exit(143);
68
- });
69
- }
70
- async function ensureSandbox(sandboxName) {
71
- const existing = ensurePromises.get(sandboxName);
72
- if (existing) {
73
- return existing;
74
- }
75
- const promise = (async () => {
76
- const ls = await execDocker(["ls", "-q"], { timeoutMs: 1e4 });
77
- const existingNames = ls.exitCode === 0 ? ls.stdout.split("\n").map((s) => s.trim()).filter(Boolean) : [];
78
- if (existingNames.includes(sandboxName)) {
79
- activeSandboxes.add(sandboxName);
80
- registerCleanup();
81
- return;
82
- }
83
- const path = await import("path");
84
- const os = await import("os");
85
- const fs = await import("fs/promises");
86
- const workspaceDir = path.join(
87
- os.tmpdir(),
88
- "agent-docker-sandbox",
89
- sandboxName
90
- );
91
- await fs.mkdir(workspaceDir, { recursive: true });
92
- const create = await execDocker(
93
- ["create", "--name", sandboxName, "shell", workspaceDir],
94
- { timeoutMs: 6e4 }
95
- );
96
- if (create.exitCode !== 0) {
97
- if (create.stderr.includes("already exists")) {
98
- activeSandboxes.add(sandboxName);
99
- registerCleanup();
100
- return;
101
- }
102
- throw new Error(
103
- `Failed to create docker sandbox "${sandboxName}": ${create.stderr}`
104
- );
105
- }
106
- activeSandboxes.add(sandboxName);
107
- registerCleanup();
108
- })();
109
- ensurePromises.set(sandboxName, promise);
110
- try {
111
- await promise;
112
- } catch (e) {
113
- ensurePromises.delete(sandboxName);
114
- throw e;
115
- }
116
- }
117
- var DEFAULT_DOCKER_CWD = "/home/agent/workspace";
118
- var DockerSandboxInstance = class {
119
- cwd;
120
- sandboxName;
121
- processes = /* @__PURE__ */ new Map();
122
- constructor(sandboxName, cwd) {
123
- this.sandboxName = sandboxName;
124
- this.cwd = cwd ?? DEFAULT_DOCKER_CWD;
125
- }
126
- async exec(opts) {
127
- await ensureSandbox(this.sandboxName);
128
- const { spawn } = await import("child_process");
129
- const commandId = `command_${ulid()}`;
130
- const envFlags = opts.env ? Object.entries(opts.env).flatMap(([k, v]) => ["-e", `${k}=${v}`]) : [];
131
- const cwdFlags = opts.cwd ? ["-w", opts.cwd] : [];
132
- const baseCmd = opts.sudo ? ["sudo", opts.command, ...opts.args ?? []] : opts.args ? [opts.command, ...opts.args] : [opts.command];
133
- const fullCmd = baseCmd;
134
- const child = spawn(
135
- "docker",
136
- [
137
- "sandbox",
138
- "exec",
139
- ...envFlags,
140
- ...cwdFlags,
141
- this.sandboxName,
142
- ...fullCmd
143
- ],
144
- { signal: opts.signal }
145
- );
146
- this.processes.set(commandId, child);
147
- let stdout = "";
148
- let stderr = "";
149
- const logQueue = [];
150
- let logResolve = null;
151
- let closed = false;
152
- child.stdout.on("data", (data) => {
153
- const str = String(data);
154
- stdout += str;
155
- logQueue.push({ stream: "stdout", data: str });
156
- logResolve?.();
157
- });
158
- child.stderr.on("data", (data) => {
159
- const str = String(data);
160
- stderr += str;
161
- logQueue.push({ stream: "stderr", data: str });
162
- logResolve?.();
163
- });
164
- const result = new Promise((resolve, reject) => {
165
- child.on("error", (err) => {
166
- this.processes.delete(commandId);
167
- closed = true;
168
- logResolve?.();
169
- reject(err);
170
- });
171
- child.on("close", (code) => {
172
- this.processes.delete(commandId);
173
- closed = true;
174
- logResolve?.();
175
- resolve({ stdout, stderr, exitCode: code ?? 0 });
176
- });
177
- });
178
- async function* logs() {
179
- while (!closed || logQueue.length > 0) {
180
- const entry = logQueue.shift();
181
- if (entry) {
182
- yield entry;
183
- } else if (!closed) {
184
- await new Promise((r) => {
185
- logResolve = r;
186
- });
187
- logResolve = null;
188
- }
189
- }
190
- }
191
- return { commandId, logs, result };
192
- }
193
- async readFile(opts) {
194
- await ensureSandbox(this.sandboxName);
195
- const result = await execDocker(
196
- [
197
- "exec",
198
- this.sandboxName,
199
- "bash",
200
- "-c",
201
- `base64 '${opts.path.replace(/'/g, "'\\''")}'`
202
- ],
203
- { timeoutMs: 3e4, signal: opts.signal }
204
- );
205
- if (result.exitCode !== 0) {
206
- if (result.stderr.includes("No such file") || result.stderr.includes("ENOENT")) {
207
- return null;
208
- }
209
- throw new Error(`readFile failed: ${result.stderr}`);
210
- }
211
- return Buffer.from(result.stdout.trim(), "base64");
212
- }
213
- async writeFiles(opts) {
214
- await ensureSandbox(this.sandboxName);
215
- for (const file of opts.files) {
216
- const fullPath = opts.destPath ? `${opts.destPath}/${file.path}` : file.path;
217
- const parentDir = fullPath.substring(0, fullPath.lastIndexOf("/"));
218
- if (parentDir) {
219
- await execDocker(["exec", this.sandboxName, "mkdir", "-p", parentDir], {
220
- signal: opts.signal
221
- });
222
- }
223
- const b64 = typeof file.content === "string" ? Buffer.from(file.content).toString("base64") : file.content.toString("base64");
224
- await execDocker(
225
- [
226
- "exec",
227
- this.sandboxName,
228
- "bash",
229
- "-c",
230
- `echo '${b64}' | base64 -d > '${fullPath.replace(/'/g, "'\\''")}'`
231
- ],
232
- { signal: opts.signal }
233
- );
234
- if (file.path.endsWith(".sh")) {
235
- await execDocker(["exec", this.sandboxName, "chmod", "+x", fullPath], {
236
- signal: opts.signal
237
- });
238
- }
239
- }
240
- }
241
- // biome-ignore lint/suspicious/useAwait: .
242
- async getDomain(opts) {
243
- return `http://localhost:${opts.port}`;
244
- }
245
- // biome-ignore lint/suspicious/useAwait: .
246
- async kill(opts) {
247
- const child = this.processes.get(opts.commandId);
248
- if (child) {
249
- child.kill("SIGTERM");
250
- this.processes.delete(opts.commandId);
251
- }
252
- }
253
- // biome-ignore lint/suspicious/useAwait: .
254
- async getStatus() {
255
- return "running";
256
- }
257
- async start() {
258
- await ensureSandbox(this.sandboxName);
259
- }
260
- async stop() {
261
- await execDocker(["stop", this.sandboxName], { timeoutMs: 3e4 });
262
- activeSandboxes.delete(this.sandboxName);
263
- ensurePromises.delete(this.sandboxName);
264
- }
265
- // biome-ignore lint/suspicious/useAwait: .
266
- async snapshot() {
267
- throw new Error("snapshot is not supported for docker sandboxes");
268
- }
269
- // biome-ignore lint/suspicious/useAwait: .
270
- async updateNetworkPolicy() {
271
- throw new Error(
272
- "updateNetworkPolicy is not supported for docker sandboxes"
273
- );
274
- }
275
- };
276
- function dockerSandbox() {
277
- return {
278
- type: "docker",
279
- async create(opts) {
280
- const sandboxName = `agent-${ulid()}`;
281
- const cwd = opts.setup?.config?.cwd;
282
- await ensureSandbox(sandboxName);
283
- const instance = new DockerSandboxInstance(sandboxName, cwd);
284
- if (opts.setup?.run) {
285
- await opts.setup.run(instance);
286
- }
287
- return {
288
- instance,
289
- metadata: { sandboxName }
290
- };
291
- },
292
- // biome-ignore lint/suspicious/useAwait: .
293
- async connect(opts) {
294
- return new DockerSandboxInstance(opts.metadata.sandboxName);
295
- }
296
- };
297
- }
298
-
299
- export {
300
- dockerSandbox
301
- };
302
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3NhbmRib3gvYmluZGluZ3MvZG9ja2VyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyB1bGlkIH0gZnJvbSBcInVsaWRcIjtcbmltcG9ydCB0eXBlIHsgRXhlY1Jlc3VsdCwgU2FuZGJveEJpbmRpbmcsIFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5cbmV4cG9ydCB0eXBlIERvY2tlckJpbmRpbmdDb25maWcgPSB7XG4gIGN3ZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERvY2tlckJpbmRpbmdNZXRhZGF0YSA9IHtcbiAgc2FuZGJveE5hbWU6IHN0cmluZztcbn07XG5cbi8qKlxuICogUnVuIGEgYGRvY2tlciBzYW5kYm94YCBDTEkgY29tbWFuZCBhbmQgcmV0dXJuIGl0cyBvdXRwdXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWNEb2NrZXIoXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBvcHRzPzogeyB0aW1lb3V0TXM/OiBudW1iZXI7IHNpZ25hbD86IEFib3J0U2lnbmFsIH1cbik6IFByb21pc2U8eyBzdGRvdXQ6IHN0cmluZzsgc3RkZXJyOiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXIgfT4ge1xuICBjb25zdCB7IHNwYXduIH0gPSBhd2FpdCBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihcImRvY2tlclwiLCBbXCJzYW5kYm94XCIsIC4uLmFyZ3NdLCB7XG4gICAgICBzaWduYWw6IG9wdHM/LnNpZ25hbCxcbiAgICB9KTtcblxuICAgIGxldCBzdGRvdXQgPSBcIlwiO1xuICAgIGxldCBzdGRlcnIgPSBcIlwiO1xuXG4gICAgY2hpbGQuc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICBzdGRvdXQgKz0gZGF0YS50b1N0cmluZygpO1xuICAgIH0pO1xuICAgIGNoaWxkLnN0ZGVyci5vbihcImRhdGFcIiwgKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgc3RkZXJyICs9IGRhdGEudG9TdHJpbmcoKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRpbWVvdXRJZCA9IG9wdHM/LnRpbWVvdXRNc1xuICAgICAgPyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjaGlsZC5raWxsKFwiU0lHVEVSTVwiKTtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBkb2NrZXIgc2FuZGJveCAke2FyZ3NbMF19IHRpbWVkIG91dGApKTtcbiAgICAgICAgfSwgb3B0cy50aW1lb3V0TXMpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNoaWxkLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgaWYgKHRpbWVvdXRJZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH0pO1xuXG4gICAgY2hpbGQub24oXCJjbG9zZVwiLCAoY29kZSkgPT4ge1xuICAgICAgaWYgKHRpbWVvdXRJZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoeyBzdGRvdXQsIHN0ZGVyciwgZXhpdENvZGU6IGNvZGUgPz8gMCB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogVHJhY2sgd2hpY2ggc2FuZGJveGVzIGhhdmUgYmVlbiB2ZXJpZmllZCB0byBleGlzdCBpbiB0aGlzIHByb2Nlc3MuXG4gKiBNYXBzIHNhbmRib3ggbmFtZSAtPiBQcm9taXNlIHNvIGNvbmN1cnJlbnQgY2FsbGVycyB3YWl0IG9uIHRoZSBzYW1lIGNoZWNrLlxuICovXG5jb25zdCBlbnN1cmVQcm9taXNlcyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHZvaWQ+PigpO1xuXG4vKipcbiAqIFNhbmRib3hlcyB0aGF0IHRoaXMgcHJvY2VzcyBoYXMgdXNlZC4gU3RvcHBlZCBvbiBwcm9jZXNzIGV4aXQuXG4gKi9cbmNvbnN0IGFjdGl2ZVNhbmRib3hlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG5sZXQgY2xlYW51cFJlZ2lzdGVyZWQgPSBmYWxzZTtcbmxldCBfZXhlY1N5bmM6IHR5cGVvZiBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIikuZXhlY1N5bmMgfCBudWxsID0gbnVsbDtcblxuYXN5bmMgZnVuY3Rpb24gcmVnaXN0ZXJDbGVhbnVwKCkge1xuICBpZiAoY2xlYW51cFJlZ2lzdGVyZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY2xlYW51cFJlZ2lzdGVyZWQgPSB0cnVlO1xuXG4gIC8vIFByZS1sb2FkIGV4ZWNTeW5jIHNvIHRoZSBzeW5jaHJvbm91cyBleGl0IGhhbmRsZXIgY2FuIHVzZSBpdC5cbiAgY29uc3QgY3AgPSBhd2FpdCBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7XG4gIF9leGVjU3luYyA9IGNwLmV4ZWNTeW5jO1xuXG4gIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgaWYgKCFfZXhlY1N5bmMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIEFycmF5LmZyb20oYWN0aXZlU2FuZGJveGVzKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgX2V4ZWNTeW5jKGBkb2NrZXIgc2FuZGJveCBzdG9wICR7bmFtZX1gLCB7XG4gICAgICAgICAgdGltZW91dDogMTBfMDAwLFxuICAgICAgICAgIHN0ZGlvOiBcInBpcGVcIixcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gQmVzdC1lZmZvcnQgXHUyMDE0IHNhbmRib3ggbWF5IGFscmVhZHkgYmUgc3RvcHBlZFxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBwcm9jZXNzLm9uKFwiZXhpdFwiLCBjbGVhbnVwKTtcbiAgcHJvY2Vzcy5vbihcIlNJR0lOVFwiLCAoKSA9PiB7XG4gICAgY2xlYW51cCgpO1xuICAgIHByb2Nlc3MuZXhpdCgxMzApO1xuICB9KTtcbiAgcHJvY2Vzcy5vbihcIlNJR1RFUk1cIiwgKCkgPT4ge1xuICAgIGNsZWFudXAoKTtcbiAgICBwcm9jZXNzLmV4aXQoMTQzKTtcbiAgfSk7XG59XG5cbi8qKlxuICogRW5zdXJlIGEgRG9ja2VyIHNhbmRib3ggZXhpc3RzIGZvciB0aGUgZ2l2ZW4gbmFtZS5cbiAqIElmIGl0IGFscmVhZHkgZXhpc3RzIChmcm9tIGEgcHJldmlvdXMgcHJvY2VzcyksIHJldXNlcyBpdC5cbiAqIElmIGl0IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZXMgaXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZVNhbmRib3goc2FuZGJveE5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBleGlzdGluZyA9IGVuc3VyZVByb21pc2VzLmdldChzYW5kYm94TmFtZSk7XG4gIGlmIChleGlzdGluZykge1xuICAgIHJldHVybiBleGlzdGluZztcbiAgfVxuXG4gIGNvbnN0IHByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGxzID0gYXdhaXQgZXhlY0RvY2tlcihbXCJsc1wiLCBcIi1xXCJdLCB7IHRpbWVvdXRNczogMTBfMDAwIH0pO1xuICAgIGNvbnN0IGV4aXN0aW5nTmFtZXMgPVxuICAgICAgbHMuZXhpdENvZGUgPT09IDBcbiAgICAgICAgPyBscy5zdGRvdXRcbiAgICAgICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAgICAgLm1hcCgocykgPT4gcy50cmltKCkpXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIDogW107XG5cbiAgICBpZiAoZXhpc3RpbmdOYW1lcy5pbmNsdWRlcyhzYW5kYm94TmFtZSkpIHtcbiAgICAgIGFjdGl2ZVNhbmRib3hlcy5hZGQoc2FuZGJveE5hbWUpO1xuICAgICAgcmVnaXN0ZXJDbGVhbnVwKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF0aCA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcbiAgICBjb25zdCBvcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6b3NcIik7XG4gICAgY29uc3QgZnMgPSBhd2FpdCBpbXBvcnQoXCJub2RlOmZzL3Byb21pc2VzXCIpO1xuXG4gICAgY29uc3Qgd29ya3NwYWNlRGlyID0gcGF0aC5qb2luKFxuICAgICAgb3MudG1wZGlyKCksXG4gICAgICBcImFnZW50LWRvY2tlci1zYW5kYm94XCIsXG4gICAgICBzYW5kYm94TmFtZVxuICAgICk7XG4gICAgYXdhaXQgZnMubWtkaXIod29ya3NwYWNlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IGNyZWF0ZSA9IGF3YWl0IGV4ZWNEb2NrZXIoXG4gICAgICBbXCJjcmVhdGVcIiwgXCItLW5hbWVcIiwgc2FuZGJveE5hbWUsIFwic2hlbGxcIiwgd29ya3NwYWNlRGlyXSxcbiAgICAgIHsgdGltZW91dE1zOiA2MF8wMDAgfVxuICAgICk7XG5cbiAgICBpZiAoY3JlYXRlLmV4aXRDb2RlICE9PSAwKSB7XG4gICAgICBpZiAoY3JlYXRlLnN0ZGVyci5pbmNsdWRlcyhcImFscmVhZHkgZXhpc3RzXCIpKSB7XG4gICAgICAgIGFjdGl2ZVNhbmRib3hlcy5hZGQoc2FuZGJveE5hbWUpO1xuICAgICAgICByZWdpc3RlckNsZWFudXAoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIGNyZWF0ZSBkb2NrZXIgc2FuZGJveCBcIiR7c2FuZGJveE5hbWV9XCI6ICR7Y3JlYXRlLnN0ZGVycn1gXG4gICAgICApO1xuICAgIH1cblxuICAgIGFjdGl2ZVNhbmRib3hlcy5hZGQoc2FuZGJveE5hbWUpO1xuICAgIHJlZ2lzdGVyQ2xlYW51cCgpO1xuICB9KSgpO1xuXG4gIGVuc3VyZVByb21pc2VzLnNldChzYW5kYm94TmFtZSwgcHJvbWlzZSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBwcm9taXNlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZW5zdXJlUHJvbWlzZXMuZGVsZXRlKHNhbmRib3hOYW1lKTtcbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbmNvbnN0IERFRkFVTFRfRE9DS0VSX0NXRCA9IFwiL2hvbWUvYWdlbnQvd29ya3NwYWNlXCI7XG5cbmNsYXNzIERvY2tlclNhbmRib3hJbnN0YW5jZSBpbXBsZW1lbnRzIFNhbmRib3hJbnN0YW5jZSB7XG4gIHJlYWRvbmx5IGN3ZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHNhbmRib3hOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc2VzID0gbmV3IE1hcDxcbiAgICBzdHJpbmcsXG4gICAgaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpLkNoaWxkUHJvY2Vzc1xuICA+KCk7XG5cbiAgY29uc3RydWN0b3Ioc2FuZGJveE5hbWU6IHN0cmluZywgY3dkPzogc3RyaW5nKSB7XG4gICAgdGhpcy5zYW5kYm94TmFtZSA9IHNhbmRib3hOYW1lO1xuICAgIHRoaXMuY3dkID0gY3dkID8/IERFRkFVTFRfRE9DS0VSX0NXRDtcbiAgfVxuXG4gIGFzeW5jIGV4ZWMob3B0czoge1xuICAgIGNvbW1hbmQ6IHN0cmluZztcbiAgICBhcmdzPzogc3RyaW5nW107XG4gICAgY3dkPzogc3RyaW5nO1xuICAgIGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgc3Vkbz86IGJvb2xlYW47XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPEV4ZWNSZXN1bHQ+IHtcbiAgICBhd2FpdCBlbnN1cmVTYW5kYm94KHRoaXMuc2FuZGJveE5hbWUpO1xuXG4gICAgY29uc3QgeyBzcGF3biB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpO1xuICAgIGNvbnN0IGNvbW1hbmRJZCA9IGBjb21tYW5kXyR7dWxpZCgpfWA7XG4gICAgY29uc3QgZW52RmxhZ3MgPSBvcHRzLmVudlxuICAgICAgPyBPYmplY3QuZW50cmllcyhvcHRzLmVudikuZmxhdE1hcCgoW2ssIHZdKSA9PiBbXCItZVwiLCBgJHtrfT0ke3Z9YF0pXG4gICAgICA6IFtdO1xuICAgIGNvbnN0IGN3ZEZsYWdzID0gb3B0cy5jd2QgPyBbXCItd1wiLCBvcHRzLmN3ZF0gOiBbXTtcbiAgICBjb25zdCBiYXNlQ21kID0gb3B0cy5zdWRvXG4gICAgICA/IFtcInN1ZG9cIiwgb3B0cy5jb21tYW5kLCAuLi4ob3B0cy5hcmdzID8/IFtdKV1cbiAgICAgIDogb3B0cy5hcmdzXG4gICAgICAgID8gW29wdHMuY29tbWFuZCwgLi4ub3B0cy5hcmdzXVxuICAgICAgICA6IFtvcHRzLmNvbW1hbmRdO1xuICAgIGNvbnN0IGZ1bGxDbWQgPSBiYXNlQ21kO1xuXG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihcbiAgICAgIFwiZG9ja2VyXCIsXG4gICAgICBbXG4gICAgICAgIFwic2FuZGJveFwiLFxuICAgICAgICBcImV4ZWNcIixcbiAgICAgICAgLi4uZW52RmxhZ3MsXG4gICAgICAgIC4uLmN3ZEZsYWdzLFxuICAgICAgICB0aGlzLnNhbmRib3hOYW1lLFxuICAgICAgICAuLi5mdWxsQ21kLFxuICAgICAgXSxcbiAgICAgIHsgc2lnbmFsOiBvcHRzLnNpZ25hbCB9XG4gICAgKTtcblxuICAgIHRoaXMucHJvY2Vzc2VzLnNldChjb21tYW5kSWQsIGNoaWxkKTtcblxuICAgIGxldCBzdGRvdXQgPSBcIlwiO1xuICAgIGxldCBzdGRlcnIgPSBcIlwiO1xuICAgIGNvbnN0IGxvZ1F1ZXVlOiB7IHN0cmVhbTogXCJzdGRvdXRcIiB8IFwic3RkZXJyXCI7IGRhdGE6IHN0cmluZyB9W10gPSBbXTtcbiAgICBsZXQgbG9nUmVzb2x2ZTogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuXG4gICAgY2hpbGQuc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoZGF0YTogc3RyaW5nIHwgQnVmZmVyKSA9PiB7XG4gICAgICBjb25zdCBzdHIgPSBTdHJpbmcoZGF0YSk7XG4gICAgICBzdGRvdXQgKz0gc3RyO1xuICAgICAgbG9nUXVldWUucHVzaCh7IHN0cmVhbTogXCJzdGRvdXRcIiwgZGF0YTogc3RyIH0pO1xuICAgICAgbG9nUmVzb2x2ZT8uKCk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5zdGRlcnIub24oXCJkYXRhXCIsIChkYXRhOiBzdHJpbmcgfCBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IHN0ciA9IFN0cmluZyhkYXRhKTtcbiAgICAgIHN0ZGVyciArPSBzdHI7XG4gICAgICBsb2dRdWV1ZS5wdXNoKHsgc3RyZWFtOiBcInN0ZGVyclwiLCBkYXRhOiBzdHIgfSk7XG4gICAgICBsb2dSZXNvbHZlPy4oKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBQcm9taXNlPHtcbiAgICAgIHN0ZG91dDogc3RyaW5nO1xuICAgICAgc3RkZXJyOiBzdHJpbmc7XG4gICAgICBleGl0Q29kZTogbnVtYmVyO1xuICAgIH0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNoaWxkLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICB0aGlzLnByb2Nlc3Nlcy5kZWxldGUoY29tbWFuZElkKTtcbiAgICAgICAgY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgbG9nUmVzb2x2ZT8uKCk7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG5cbiAgICAgIGNoaWxkLm9uKFwiY2xvc2VcIiwgKGNvZGU6IG51bWJlciB8IG51bGwpID0+IHtcbiAgICAgICAgdGhpcy5wcm9jZXNzZXMuZGVsZXRlKGNvbW1hbmRJZCk7XG4gICAgICAgIGNsb3NlZCA9IHRydWU7XG4gICAgICAgIGxvZ1Jlc29sdmU/LigpO1xuICAgICAgICByZXNvbHZlKHsgc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlOiBjb2RlID8/IDAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uKiBsb2dzKCk6IEFzeW5jSXRlcmFibGU8e1xuICAgICAgc3RyZWFtOiBcInN0ZG91dFwiIHwgXCJzdGRlcnJcIjtcbiAgICAgIGRhdGE6IHN0cmluZztcbiAgICB9PiB7XG4gICAgICB3aGlsZSAoIWNsb3NlZCB8fCBsb2dRdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gbG9nUXVldWUuc2hpZnQoKTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgeWllbGQgZW50cnk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWNsb3NlZCkge1xuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiB7XG4gICAgICAgICAgICBsb2dSZXNvbHZlID0gcjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsb2dSZXNvbHZlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGNvbW1hbmRJZCwgbG9ncywgcmVzdWx0IH07XG4gIH1cblxuICBhc3luYyByZWFkRmlsZShvcHRzOiB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxCdWZmZXIgfCBudWxsPiB7XG4gICAgYXdhaXQgZW5zdXJlU2FuZGJveCh0aGlzLnNhbmRib3hOYW1lKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNEb2NrZXIoXG4gICAgICBbXG4gICAgICAgIFwiZXhlY1wiLFxuICAgICAgICB0aGlzLnNhbmRib3hOYW1lLFxuICAgICAgICBcImJhc2hcIixcbiAgICAgICAgXCItY1wiLFxuICAgICAgICBgYmFzZTY0ICcke29wdHMucGF0aC5yZXBsYWNlKC8nL2csIFwiJ1xcXFwnJ1wiKX0nYCxcbiAgICAgIF0sXG4gICAgICB7IHRpbWVvdXRNczogMzBfMDAwLCBzaWduYWw6IG9wdHMuc2lnbmFsIH1cbiAgICApO1xuXG4gICAgaWYgKHJlc3VsdC5leGl0Q29kZSAhPT0gMCkge1xuICAgICAgaWYgKFxuICAgICAgICByZXN1bHQuc3RkZXJyLmluY2x1ZGVzKFwiTm8gc3VjaCBmaWxlXCIpIHx8XG4gICAgICAgIHJlc3VsdC5zdGRlcnIuaW5jbHVkZXMoXCJFTk9FTlRcIilcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgcmVhZEZpbGUgZmFpbGVkOiAke3Jlc3VsdC5zdGRlcnJ9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHJlc3VsdC5zdGRvdXQudHJpbSgpLCBcImJhc2U2NFwiKTtcbiAgfVxuXG4gIGFzeW5jIHdyaXRlRmlsZXMob3B0czoge1xuICAgIGZpbGVzOiB7IHBhdGg6IHN0cmluZzsgY29udGVudDogc3RyaW5nIHwgQnVmZmVyIH1bXTtcbiAgICBkZXN0UGF0aDogc3RyaW5nO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgZW5zdXJlU2FuZGJveCh0aGlzLnNhbmRib3hOYW1lKTtcblxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBvcHRzLmZpbGVzKSB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IG9wdHMuZGVzdFBhdGhcbiAgICAgICAgPyBgJHtvcHRzLmRlc3RQYXRofS8ke2ZpbGUucGF0aH1gXG4gICAgICAgIDogZmlsZS5wYXRoO1xuXG4gICAgICAvLyBFbnN1cmUgcGFyZW50IGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGNvbnN0IHBhcmVudERpciA9IGZ1bGxQYXRoLnN1YnN0cmluZygwLCBmdWxsUGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuICAgICAgaWYgKHBhcmVudERpcikge1xuICAgICAgICBhd2FpdCBleGVjRG9ja2VyKFtcImV4ZWNcIiwgdGhpcy5zYW5kYm94TmFtZSwgXCJta2RpclwiLCBcIi1wXCIsIHBhcmVudERpcl0sIHtcbiAgICAgICAgICBzaWduYWw6IG9wdHMuc2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gV3JpdGUgdmlhIGJhc2U2NCB0byBoYW5kbGUgYm90aCB0ZXh0IGFuZCBiaW5hcnkgY29udGVudFxuICAgICAgY29uc3QgYjY0ID1cbiAgICAgICAgdHlwZW9mIGZpbGUuY29udGVudCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgID8gQnVmZmVyLmZyb20oZmlsZS5jb250ZW50KS50b1N0cmluZyhcImJhc2U2NFwiKVxuICAgICAgICAgIDogZmlsZS5jb250ZW50LnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuXG4gICAgICBhd2FpdCBleGVjRG9ja2VyKFxuICAgICAgICBbXG4gICAgICAgICAgXCJleGVjXCIsXG4gICAgICAgICAgdGhpcy5zYW5kYm94TmFtZSxcbiAgICAgICAgICBcImJhc2hcIixcbiAgICAgICAgICBcIi1jXCIsXG4gICAgICAgICAgYGVjaG8gJyR7YjY0fScgfCBiYXNlNjQgLWQgPiAnJHtmdWxsUGF0aC5yZXBsYWNlKC8nL2csIFwiJ1xcXFwnJ1wiKX0nYCxcbiAgICAgICAgXSxcbiAgICAgICAgeyBzaWduYWw6IG9wdHMuc2lnbmFsIH1cbiAgICAgICk7XG5cbiAgICAgIGlmIChmaWxlLnBhdGguZW5kc1dpdGgoXCIuc2hcIikpIHtcbiAgICAgICAgYXdhaXQgZXhlY0RvY2tlcihbXCJleGVjXCIsIHRoaXMuc2FuZGJveE5hbWUsIFwiY2htb2RcIiwgXCIreFwiLCBmdWxsUGF0aF0sIHtcbiAgICAgICAgICBzaWduYWw6IG9wdHMuc2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIGdldERvbWFpbihvcHRzOiB7XG4gICAgcG9ydDogbnVtYmVyO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYGh0dHA6Ly9sb2NhbGhvc3Q6JHtvcHRzLnBvcnR9YDtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMga2lsbChvcHRzOiB7IGNvbW1hbmRJZDogc3RyaW5nOyBzaWduYWw/OiBBYm9ydFNpZ25hbCB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2hpbGQgPSB0aGlzLnByb2Nlc3Nlcy5nZXQob3B0cy5jb21tYW5kSWQpO1xuICAgIGlmIChjaGlsZCkge1xuICAgICAgY2hpbGQua2lsbChcIlNJR1RFUk1cIik7XG4gICAgICB0aGlzLnByb2Nlc3Nlcy5kZWxldGUob3B0cy5jb21tYW5kSWQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMgZ2V0U3RhdHVzKCk6IFByb21pc2U8XG4gICAgXCJwZW5kaW5nXCIgfCBcInJ1bm5pbmdcIiB8IFwic3RvcHBpbmdcIiB8IFwic3RvcHBlZFwiIHwgXCJmYWlsZWRcIlxuICA+IHtcbiAgICAvLyBkb2NrZXIgc2FuZGJveCBDTEkgZG9lc24ndCBleHBvc2Ugc3RhdHVzIFx1MjAxNCBhc3N1bWUgcnVubmluZyBpZiBlbnN1cmVkXG4gICAgcmV0dXJuIFwicnVubmluZ1wiO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgZW5zdXJlU2FuZGJveCh0aGlzLnNhbmRib3hOYW1lKTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgZXhlY0RvY2tlcihbXCJzdG9wXCIsIHRoaXMuc2FuZGJveE5hbWVdLCB7IHRpbWVvdXRNczogMzBfMDAwIH0pO1xuICAgIGFjdGl2ZVNhbmRib3hlcy5kZWxldGUodGhpcy5zYW5kYm94TmFtZSk7XG4gICAgZW5zdXJlUHJvbWlzZXMuZGVsZXRlKHRoaXMuc2FuZGJveE5hbWUpO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyBzbmFwc2hvdCgpOiBQcm9taXNlPHsgc25hcHNob3RJZDogc3RyaW5nIH0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJzbmFwc2hvdCBpcyBub3Qgc3VwcG9ydGVkIGZvciBkb2NrZXIgc2FuZGJveGVzXCIpO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyB1cGRhdGVOZXR3b3JrUG9saWN5KCk6IFByb21pc2U8bmV2ZXI+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcInVwZGF0ZU5ldHdvcmtQb2xpY3kgaXMgbm90IHN1cHBvcnRlZCBmb3IgZG9ja2VyIHNhbmRib3hlc1wiXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9ja2VyU2FuZGJveCgpOiBTYW5kYm94QmluZGluZzxcbiAgXCJkb2NrZXJcIixcbiAgRG9ja2VyQmluZGluZ0NvbmZpZyxcbiAgRG9ja2VyQmluZGluZ01ldGFkYXRhXG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcImRvY2tlclwiLFxuICAgIGFzeW5jIGNyZWF0ZShvcHRzKSB7XG4gICAgICBjb25zdCBzYW5kYm94TmFtZSA9IGBhZ2VudC0ke3VsaWQoKX1gO1xuICAgICAgY29uc3QgY3dkID0gb3B0cy5zZXR1cD8uY29uZmlnPy5jd2Q7XG5cbiAgICAgIGF3YWl0IGVuc3VyZVNhbmRib3goc2FuZGJveE5hbWUpO1xuXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBEb2NrZXJTYW5kYm94SW5zdGFuY2Uoc2FuZGJveE5hbWUsIGN3ZCk7XG5cbiAgICAgIGlmIChvcHRzLnNldHVwPy5ydW4pIHtcbiAgICAgICAgYXdhaXQgb3B0cy5zZXR1cC5ydW4oaW5zdGFuY2UpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgbWV0YWRhdGE6IHsgc2FuZGJveE5hbWUgfSxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgICBhc3luYyBjb25uZWN0KG9wdHMpIHtcbiAgICAgIHJldHVybiBuZXcgRG9ja2VyU2FuZGJveEluc3RhbmNlKG9wdHMubWV0YWRhdGEuc2FuZGJveE5hbWUpO1xuICAgIH0sXG4gIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsU0FBUyxZQUFZO0FBY3JCLGVBQWUsV0FDYixNQUNBLE1BQytEO0FBQy9ELFFBQU0sRUFBRSxNQUFNLElBQUksTUFBTSxPQUFPLGVBQW9CO0FBQ25ELFNBQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3RDLFVBQU0sUUFBUSxNQUFNLFVBQVUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHO0FBQUEsTUFDbEQsUUFBUSxNQUFNO0FBQUEsSUFDaEIsQ0FBQztBQUVELFFBQUksU0FBUztBQUNiLFFBQUksU0FBUztBQUViLFVBQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxTQUFpQjtBQUN4QyxnQkFBVSxLQUFLLFNBQVM7QUFBQSxJQUMxQixDQUFDO0FBQ0QsVUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFNBQWlCO0FBQ3hDLGdCQUFVLEtBQUssU0FBUztBQUFBLElBQzFCLENBQUM7QUFFRCxVQUFNLFlBQVksTUFBTSxZQUNwQixXQUFXLE1BQU07QUFDZixZQUFNLEtBQUssU0FBUztBQUNwQixhQUFPLElBQUksTUFBTSxrQkFBa0IsS0FBSyxDQUFDLENBQUMsWUFBWSxDQUFDO0FBQUEsSUFDekQsR0FBRyxLQUFLLFNBQVMsSUFDakI7QUFFSixVQUFNLEdBQUcsU0FBUyxDQUFDLFFBQVE7QUFDekIsVUFBSSxXQUFXO0FBQ2IscUJBQWEsU0FBUztBQUFBLE1BQ3hCO0FBQ0EsYUFBTyxHQUFHO0FBQUEsSUFDWixDQUFDO0FBRUQsVUFBTSxHQUFHLFNBQVMsQ0FBQyxT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
@@ -1,11 +0,0 @@
1
- var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
2
- get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
3
- }) : x)(function(x) {
4
- if (typeof require !== "undefined") return require.apply(this, arguments);
5
- throw Error('Dynamic require of "' + x + '" is not supported');
6
- });
7
-
8
- export {
9
- __require
10
- };
11
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K