seamless-cli 0.10.1 → 0.11.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 (80) hide show
  1. package/README.md +197 -29
  2. package/dist/commands/apps.js +147 -0
  3. package/dist/commands/apps.js.map +1 -0
  4. package/dist/commands/config.js +16 -15
  5. package/dist/commands/config.js.map +1 -1
  6. package/dist/commands/help.js +65 -187
  7. package/dist/commands/help.js.map +1 -1
  8. package/dist/commands/helpTopics.js +376 -0
  9. package/dist/commands/helpTopics.js.map +1 -0
  10. package/dist/commands/init.js +295 -76
  11. package/dist/commands/init.js.map +1 -1
  12. package/dist/commands/instanceLogin.js +55 -0
  13. package/dist/commands/instanceLogin.js.map +1 -0
  14. package/dist/commands/login.js +42 -80
  15. package/dist/commands/login.js.map +1 -1
  16. package/dist/commands/logout.js +18 -8
  17. package/dist/commands/logout.js.map +1 -1
  18. package/dist/commands/org.js +5 -4
  19. package/dist/commands/org.js.map +1 -1
  20. package/dist/commands/profile.js +29 -2
  21. package/dist/commands/profile.js.map +1 -1
  22. package/dist/commands/sessions.js +9 -7
  23. package/dist/commands/sessions.js.map +1 -1
  24. package/dist/commands/templates.js +58 -0
  25. package/dist/commands/templates.js.map +1 -0
  26. package/dist/commands/users.js +9 -7
  27. package/dist/commands/users.js.map +1 -1
  28. package/dist/commands/verify.js +5 -2
  29. package/dist/commands/verify.js.map +1 -1
  30. package/dist/commands/whoami.js +13 -5
  31. package/dist/commands/whoami.js.map +1 -1
  32. package/dist/core/args.js +11 -0
  33. package/dist/core/args.js.map +1 -1
  34. package/dist/core/authClient.js +29 -6
  35. package/dist/core/authClient.js.map +1 -1
  36. package/dist/core/cancel.js +32 -0
  37. package/dist/core/cancel.js.map +1 -0
  38. package/dist/core/config.js +45 -1
  39. package/dist/core/config.js.map +1 -1
  40. package/dist/core/confirmAction.js +26 -0
  41. package/dist/core/confirmAction.js.map +1 -0
  42. package/dist/core/images.js +3 -3
  43. package/dist/core/interactiveLogin.js +72 -0
  44. package/dist/core/interactiveLogin.js.map +1 -0
  45. package/dist/core/output.js +23 -9
  46. package/dist/core/output.js.map +1 -1
  47. package/dist/core/portal.js +112 -8
  48. package/dist/core/portal.js.map +1 -1
  49. package/dist/core/templates.js +10 -0
  50. package/dist/core/templates.js.map +1 -1
  51. package/dist/core/tty.js +25 -0
  52. package/dist/core/tty.js.map +1 -0
  53. package/dist/generators/auth/auth.js +8 -7
  54. package/dist/generators/auth/auth.js.map +1 -1
  55. package/dist/generators/docker/docker.js +27 -21
  56. package/dist/generators/docker/docker.js.map +1 -1
  57. package/dist/index.js +89 -21
  58. package/dist/index.js.map +1 -1
  59. package/dist/prompts/appSelect.js +16 -10
  60. package/dist/prompts/appSelect.js.map +1 -1
  61. package/dist/prompts/initMode.js +77 -0
  62. package/dist/prompts/initMode.js.map +1 -0
  63. package/dist/prompts/oauthSetup.js +4 -3
  64. package/dist/prompts/oauthSetup.js.map +1 -1
  65. package/dist/prompts/projectSetup.js +77 -50
  66. package/dist/prompts/projectSetup.js.map +1 -1
  67. package/dist/testSetup.js +9 -0
  68. package/dist/testSetup.js.map +1 -0
  69. package/package.json +1 -1
  70. package/verify/adapter-app/package.json +1 -1
  71. package/verify/docker-compose.verify.yml +4 -3
  72. package/verify/harness/api/ownerAdmin.spec.ts +24 -0
  73. package/verify/harness/lib/env.ts +3 -4
  74. package/verify/harness/lib/flows.ts +1 -36
  75. package/verify/harness/playwright.config.ts +8 -3
  76. package/dist/commands/bootstrapAdmin.js +0 -96
  77. package/dist/commands/bootstrapAdmin.js.map +0 -1
  78. package/dist/core/bootstrapSecret.js +0 -39
  79. package/dist/core/bootstrapSecret.js.map +0 -1
  80. package/verify/harness/api/adminBootstrap.spec.ts +0 -34
@@ -1,19 +1,22 @@
1
1
  import path from "path";
2
2
  import fs from "fs";
3
- import { confirm, isCancel } from "@clack/prompts";
3
+ import { confirm } from "@clack/prompts";
4
4
  import kleur from "kleur";
5
- import { runProjectSetupPrompts, runManagedTemplatePrompts, } from "../prompts/projectSetup.js";
5
+ import { runProjectSetupPrompts, runManagedTemplatePrompts, ADMIN_MODES, AUTH_MODES, } from "../prompts/projectSetup.js";
6
6
  import { generateAuthServer } from "../generators/auth/auth.js";
7
7
  import { generateDockerCompose } from "../generators/docker/docker.js";
8
8
  import { printManagedSuccessOutput, printSuccessOutput, } from "../core/output.js";
9
9
  import { generateSeamlessConfig } from "../generators/config/config.js";
10
- import { applyTemplateEnv, assertCliSupports, openTemplateSource, } from "../core/templates.js";
10
+ import { applyTemplateEnv, assertCliSupports, matchesTemplateFlag, openTemplateSource, templateFlags, } from "../core/templates.js";
11
11
  import { runOAuthSetupPrompts } from "../prompts/oauthSetup.js";
12
- import { createAuthClient, ReauthRequiredError, } from "../core/authClient.js";
13
- import { normalizeInstanceUrl } from "../core/config.js";
12
+ import { chooseExistingDirectoryAction, chooseScaffoldTarget, confirmLocalFallback, } from "../prompts/initMode.js";
13
+ import { CancelledError, orCancel } from "../core/cancel.js";
14
+ import { requireInteractive, warnOnUnusableWidth } from "../core/tty.js";
15
+ import { createPortalClient, ReauthRequiredError, } from "../core/authClient.js";
16
+ import { getPortalSession, normalizeInstanceUrl } from "../core/config.js";
14
17
  import { parseEnv, writeEnv } from "../core/env.js";
15
18
  import { generateSecret } from "../core/secrets.js";
16
- import { listApplications, rotateServiceToken, } from "../core/portal.js";
19
+ import { buildScaffoldDatabaseUrl, getApplicationDatabase, listApplications, rotateServiceToken, } from "../core/portal.js";
17
20
  import { selectApplication } from "../prompts/appSelect.js";
18
21
  const AUTH_SERVER_URL = "http://localhost:5312";
19
22
  const API_URL = "http://localhost:3000";
@@ -23,22 +26,87 @@ const API_URL = "http://localhost:3000";
23
26
  const MANAGED_JWKS_KID = "dev-main";
24
27
  export async function runCLI(projectName, aliases = [], opts = {}) {
25
28
  const cwd = process.cwd();
29
+ // Managed connect now reads the portal session, so a profile no longer selects
30
+ // anything here. Warn rather than silently ignoring it.
31
+ // TODO(#125): drop the flag one minor version after release.
32
+ if (opts.profileFlag) {
33
+ console.log(kleur.yellow("init no longer takes --profile; managed connect uses your portal session. Run: seamless login"));
34
+ }
35
+ if (!opts.yes) {
36
+ warnOnUnusableWidth((message) => console.log(kleur.yellow(message)));
37
+ }
38
+ const openSource = lazyTemplateSource();
39
+ // Every flag is validated against the registry and the known values before a
40
+ // directory is created and before the overwrite confirmation runs, so a bad
41
+ // flag can never reach a destructive prompt on its way to an error. The
42
+ // registry is only fetched when a template flag needs resolving, which keeps
43
+ // the integrate-an-existing-project path from paying for one it never reads.
44
+ const answers = resolveAnswerFlags(opts);
45
+ if (aliases.length > 0 || opts.web || opts.api) {
46
+ const { registry } = await openSource();
47
+ Object.assign(answers, resolveTemplateSelection(aliases, opts, registry.templates));
48
+ }
26
49
  let root = cwd;
50
+ // Only ever set to a directory mkdir just created, never one that already
51
+ // existed, so discarding it can never take a developer's own files with it.
52
+ let created = null;
27
53
  if (projectName) {
28
54
  root = path.join(cwd, projectName);
29
55
  if (fs.existsSync(root)) {
30
56
  throw new Error(`Directory already exists: ${projectName}`);
31
57
  }
32
58
  fs.mkdirSync(root);
59
+ created = root;
33
60
  console.log(`Creating project in ${root}`);
34
61
  }
35
- // A logged-in profile makes the managed path the default; --local forces the
36
- // self-hosted stack. A missing session or an unreachable control plane falls
37
- // back to local unless managed was requested explicitly (handled below).
62
+ // Ctrl-C inside a prompt comes back as a CancelledError and unwinds through
63
+ // the catch below, but during a download or a git clone it arrives as a real
64
+ // signal that would otherwise end the process with the husk still on disk.
65
+ const onInterrupt = () => {
66
+ discard(created);
67
+ process.exit(130);
68
+ };
69
+ if (created)
70
+ process.on("SIGINT", onInterrupt);
71
+ try {
72
+ await scaffold(root, projectName, answers, openSource, opts);
73
+ }
74
+ catch (err) {
75
+ // Anything short of a completed scaffold leaves nothing behind, so a retry
76
+ // is not blocked by "Directory already exists" from a half-built attempt.
77
+ discard(created);
78
+ throw err;
79
+ }
80
+ finally {
81
+ if (created)
82
+ process.off("SIGINT", onInterrupt);
83
+ }
84
+ }
85
+ // Opens the template source at most once per run. Validating flags up front and
86
+ // scaffolding both need the registry, and the remote source refetches it on
87
+ // every open.
88
+ function lazyTemplateSource() {
89
+ let pending = null;
90
+ return () => (pending ??= openTemplateSource());
91
+ }
92
+ function discard(dir) {
93
+ if (!dir)
94
+ return;
95
+ try {
96
+ fs.rmSync(dir, { recursive: true, force: true });
97
+ }
98
+ catch {
99
+ // The original failure is what the developer needs to see; a cleanup error
100
+ // on top of it would only bury the cause.
101
+ }
102
+ }
103
+ async function scaffold(root, projectName, preselect, openSource, opts) {
104
+ // --local forces the self-hosted stack without asking the control plane
105
+ // anything.
38
106
  let client = null;
39
107
  let fallbackReason = null;
40
108
  if (!opts.local) {
41
- const resolution = await resolveManagedClient(opts.profileFlag);
109
+ const resolution = await resolveManagedClient();
42
110
  client = resolution.client;
43
111
  if (!client)
44
112
  fallbackReason = resolution.reason;
@@ -50,29 +118,99 @@ export async function runCLI(projectName, aliases = [], opts = {}) {
50
118
  ? "Could not reach the Seamless control plane to connect a managed instance. Check your connection, or re-run with --local to scaffold a self-hosted stack."
51
119
  : "--app was given but you are not logged in. Run `seamless login` to connect a managed instance, or drop --app to scaffold a local project.");
52
120
  }
121
+ // Whether managed is even possible is settled before the first prompt, so a
122
+ // session with nothing to connect never costs a round of questions first.
123
+ const allApps = client ? await listApplications(client) : [];
124
+ const apps = connectable(allApps);
125
+ const canConnect = client !== null && apps.length > 0;
53
126
  const isEmpty = fs.readdirSync(root).length === 0;
54
127
  if (!isEmpty) {
55
- await integrateExistingProject(root, client, opts);
56
- return;
128
+ // --app is explicit managed intent, so it skips the question and integrates.
129
+ const action = opts.appId
130
+ ? "integrate"
131
+ : await resolveExistingDirectoryAction(canConnect, opts);
132
+ if (action === "integrate") {
133
+ await integrateExistingProject(root, client, apps, opts);
134
+ return;
135
+ }
136
+ }
137
+ if (canConnect) {
138
+ const target = opts.appId
139
+ ? "managed"
140
+ : await resolveScaffoldTarget(apps.length, opts);
141
+ if (target === "managed") {
142
+ await scaffoldManaged(root, projectName, preselect, openSource, client, apps, opts);
143
+ return;
144
+ }
57
145
  }
58
- if (client) {
59
- await scaffoldManaged(root, projectName, aliases, client, opts);
146
+ else if (client) {
147
+ console.log(kleur.yellow(noConnectableMessage(allApps.length > 0)));
60
148
  }
61
- else {
62
- if (fallbackReason) {
63
- console.log(kleur.yellow(fallbackReason === "unreachable"
64
- ? "Could not reach the control plane; scaffolding a local project instead. Use --local to skip this check."
65
- : "Not logged in; scaffolding a local project. Run `seamless login` first to connect a managed instance."));
149
+ else if (fallbackReason === "unreachable") {
150
+ // Falling back to local changes where the project's auth lives, so --yes
151
+ // does not get to make that call on its own; --local says it outright.
152
+ if (opts.yes) {
153
+ throw new Error("Could not reach the Seamless control plane, and --yes will not silently scaffold a local stack instead. Re-run with --local to scaffold self-hosted.");
66
154
  }
67
- await scaffoldLocal(root, projectName, aliases);
155
+ requireInteractive("Could not reach the Seamless control plane. Scaffold a local stack instead?", "Pass --local to scaffold a self-hosted stack.");
156
+ await confirmLocalFallback();
157
+ }
158
+ else if (fallbackReason === "no-session") {
159
+ console.log(kleur.yellow("Not logged in; scaffolding a local project. Run `seamless login` first to connect a managed instance."));
160
+ }
161
+ await scaffoldLocal(root, projectName, preselect, openSource, opts);
162
+ }
163
+ // Writing starter files over a directory someone already has work in is the one
164
+ // destructive step in a scaffold, so --yes is deliberately not enough to reach
165
+ // it. --force is, and it says nothing about the integrate-or-scaffold question,
166
+ // which --app answers instead.
167
+ async function resolveExistingDirectoryAction(canConnect, opts) {
168
+ if (!opts.yes) {
169
+ requireInteractive("This directory is not empty. What would you like to do?", "Pass --yes --force to scaffold here anyway, or --app <id> to connect the existing project to a managed application.");
170
+ return chooseExistingDirectoryAction(canConnect);
171
+ }
172
+ if (!opts.force) {
173
+ throw new Error("This directory is not empty, and starter files overwrite anything with the same name. Re-run with --force to scaffold here anyway, or with --app <id> to connect the existing project to a managed application.");
174
+ }
175
+ console.log(kleur.yellow("Scaffolding into a directory that is not empty (--force)."));
176
+ return "scaffold";
177
+ }
178
+ // Managed or local decides where the project's auth lives for good, so --yes
179
+ // alone will not pick: --app <id> means managed and --local means self-hosted.
180
+ async function resolveScaffoldTarget(appCount, opts) {
181
+ if (!opts.yes) {
182
+ requireInteractive("How should this project get its auth?", "Pass --app <id> to connect a managed application, or --local to scaffold a self-hosted stack.");
183
+ return chooseScaffoldTarget(appCount);
184
+ }
185
+ throw new Error("You are logged in, so --yes will not guess between a managed application and a local stack. Pass --app <id> to connect one of your managed applications, or --local to scaffold a self-hosted stack.");
186
+ }
187
+ // The bundled database as a connection string with placeholder credentials, or
188
+ // an empty string when the control plane has not provisioned one yet. Never
189
+ // requests ?reveal=true, so no live credential reaches this machine.
190
+ async function resolveDatabaseUrl(client, app) {
191
+ const database = await getApplicationDatabase(client, app.id);
192
+ if (!database) {
193
+ console.log(kleur.yellow(`No managed database is available for "${app.name}" yet. Set DATABASE_URL in api/.env once it finishes provisioning.`));
194
+ return "";
68
195
  }
196
+ return buildScaffoldDatabaseUrl(database);
197
+ }
198
+ // The old message told an account whose only application was still provisioning
199
+ // that it had none and should create one.
200
+ function noConnectableMessage(hasProvisioning) {
201
+ return hasProvisioning
202
+ ? "Your managed applications are still provisioning, so there is nothing to connect to yet. Scaffolding a local project instead."
203
+ : "Your account has no managed applications yet (create one at https://dashboard.seamlessauth.com). Scaffolding a local project instead.";
69
204
  }
70
- // Resolves an authenticated control-plane client. A missing session
71
- // ("no-session") and an unreachable/errored control plane ("unreachable") both
72
- // yield a null client so init can fall back to local (or, with --app, error).
73
- async function resolveManagedClient(profileFlag) {
205
+ // Resolves an authenticated control-plane client from the portal session. A
206
+ // missing session ("no-session") and an unreachable/errored control plane
207
+ // ("unreachable") both yield a null client so init can fall back to local (or,
208
+ // with --app, error). Instance profiles are deliberately not consulted: a session
209
+ // for an auth instance the developer administers says nothing about whether they
210
+ // have a managed account, and sending its token to the control plane would fail.
211
+ async function resolveManagedClient() {
74
212
  try {
75
- return { client: await createAuthClient({ profileFlag }), reason: null };
213
+ return { client: await createPortalClient(), reason: null };
76
214
  }
77
215
  catch (err) {
78
216
  if (err instanceof ReauthRequiredError) {
@@ -81,17 +219,13 @@ async function resolveManagedClient(profileFlag) {
81
219
  return { client: null, reason: "unreachable" };
82
220
  }
83
221
  }
84
- async function scaffoldManaged(root, projectName, aliases, client, opts) {
85
- const source = await openTemplateSource();
86
- const preselect = resolveTemplateAliases(aliases, source.registry.templates);
87
- const answers = await runManagedTemplatePrompts(source.registry.templates, preselect);
222
+ async function scaffoldManaged(root, projectName, preselect, openSource, client, apps, opts) {
223
+ const source = await openSource();
224
+ const answers = await runManagedTemplatePrompts(source.registry.templates, preselect, opts.yes);
88
225
  const selected = await resolveSelectedTemplates(source, answers.webTemplateId, answers.apiTemplateId, root);
89
226
  // Resolve the target application before writing files, so a cancelled selection
90
227
  // or an authorization failure leaves nothing behind.
91
- const apps = await listApplications(client);
92
228
  const app = await selectApplication(apps, opts.appId);
93
- if (!app)
94
- return;
95
229
  // Copy templates before rotating the service token. Rotation invalidates the
96
230
  // app's previous token (see rotateServiceToken), so it runs as late as possible;
97
231
  // copyInto is the likeliest step to fail, so it happens first, before rotation.
@@ -99,9 +233,11 @@ async function scaffoldManaged(root, projectName, aliases, client, opts) {
99
233
  console.log(`Adding ${entry.label} starter...`);
100
234
  await source.copyInto(entry, dir);
101
235
  }
102
- const serviceToken = await issueServiceToken(client, app);
103
- if (serviceToken === null)
104
- return;
236
+ // Read before rotating: a database that is not provisioned yet is a warning,
237
+ // not a failure, and finding that out after the token is rotated would mean
238
+ // reporting it against a half-wired project.
239
+ const databaseUrl = await resolveDatabaseUrl(client, app);
240
+ const serviceToken = await issueServiceToken(client, app, opts);
105
241
  const authServerUrl = normalizeInstanceUrl(app.domain);
106
242
  // Everything past rotation is guarded: if it throws, the freshly issued token is
107
243
  // printed so a deployed app can be re-wired rather than left bricked (the control
@@ -115,6 +251,7 @@ async function scaffoldManaged(root, projectName, aliases, client, opts) {
115
251
  // A managed instance hosts its own dashboard, so the app API does not proxy
116
252
  // the console. Keeps the template's SERVE_ADMIN_CONSOLE gate off.
117
253
  serveAdminConsole: "false",
254
+ databaseUrl,
118
255
  };
119
256
  for (const { manifest, dir } of selected) {
120
257
  applyTemplateEnv(dir, manifest, ctx);
@@ -139,6 +276,7 @@ async function scaffoldManaged(root, projectName, aliases, client, opts) {
139
276
  apiFramework: apiEntry.framework,
140
277
  authServerUrl,
141
278
  appName: app.name,
279
+ databaseUrl,
142
280
  });
143
281
  }
144
282
  catch (err) {
@@ -147,17 +285,24 @@ async function scaffoldManaged(root, projectName, aliases, client, opts) {
147
285
  throw err;
148
286
  }
149
287
  }
150
- async function scaffoldLocal(root, projectName, aliases) {
151
- const source = await openTemplateSource();
152
- const preselect = resolveTemplateAliases(aliases, source.registry.templates);
153
- const answers = await runProjectSetupPrompts(source.registry.templates, preselect);
288
+ async function scaffoldLocal(root, projectName, preselect, openSource, opts) {
289
+ const source = await openSource();
290
+ const answers = await runProjectSetupPrompts(source.registry.templates, preselect, getPortalSession()?.email, opts.yes);
154
291
  const selected = await resolveSelectedTemplates(source, answers.webTemplateId, answers.apiTemplateId, root);
155
292
  // Templates can opt into OAuth setup (manifest setup.oauth). Collect providers now,
156
293
  // before scaffolding, so the auth server can be wired up with them below.
294
+ // Provider credentials are per-provider secrets with no flag form, so --yes
295
+ // scaffolds the starter with none configured rather than asking.
157
296
  const webSelection = selected.find((s) => s.entry.kind === "web");
158
297
  let oauthProviders = [];
159
298
  if (webSelection?.manifest.setup?.oauth) {
160
- oauthProviders = await runOAuthSetupPrompts();
299
+ if (opts.yes) {
300
+ console.log(kleur.yellow("Skipping OAuth provider setup (--yes). Add providers later with `seamless config oauth-providers add`."));
301
+ }
302
+ else {
303
+ requireInteractive("Which OAuth providers would you like to configure?", "Pass --yes to scaffold with none configured, then add them with `seamless config oauth-providers add`.");
304
+ oauthProviders = await runOAuthSetupPrompts();
305
+ }
161
306
  }
162
307
  for (const { entry, dir } of selected) {
163
308
  console.log(`Adding ${entry.label} starter...`);
@@ -165,13 +310,14 @@ async function scaffoldLocal(root, projectName, aliases) {
165
310
  }
166
311
  let sharedConfig = {};
167
312
  if (answers.authMode === "local") {
168
- sharedConfig = await generateAuthServer({ root }, "local", oauthProviders, answers.adminMode);
313
+ sharedConfig = await generateAuthServer({ root }, "local", oauthProviders, answers.adminMode, answers.ownerEmail);
169
314
  }
170
315
  if (answers.useDocker) {
171
316
  const dockerShared = await generateDockerCompose(root, {
172
317
  authMode: answers.authMode,
173
318
  adminMode: answers.adminMode,
174
319
  oauth: oauthProviders,
320
+ ownerEmail: answers.ownerEmail,
175
321
  });
176
322
  if (answers.authMode === "docker") {
177
323
  sharedConfig = dockerShared;
@@ -183,6 +329,9 @@ async function scaffoldLocal(root, projectName, aliases) {
183
329
  apiToken: sharedConfig.apiToken,
184
330
  jwksKid: sharedConfig.kid,
185
331
  serveAdminConsole: answers.adminMode === "api" ? "true" : "false",
332
+ // The local stack runs its own postgres from the compose file, which the
333
+ // starter reaches through its discrete DB_* values.
334
+ databaseUrl: "",
186
335
  };
187
336
  for (const { manifest, dir } of selected) {
188
337
  applyTemplateEnv(dir, manifest, ctx);
@@ -204,6 +353,7 @@ async function scaffoldLocal(root, projectName, aliases) {
204
353
  authMode: answers.authMode,
205
354
  useDocker: answers.useDocker,
206
355
  adminMode: answers.adminMode,
356
+ ownerEmail: answers.ownerEmail,
207
357
  });
208
358
  printOAuthNextSteps(oauthProviders);
209
359
  }
@@ -211,22 +361,13 @@ async function scaffoldLocal(root, projectName, aliases) {
211
361
  // scaffolded repo without re-generating source. Kept intentionally small, it
212
362
  // updates api/.env when an api directory exists and otherwise prints the values
213
363
  // to paste in by hand.
214
- async function integrateExistingProject(root, client, opts) {
215
- if (!client) {
216
- console.log("Existing project detected.");
217
- console.log("Log in first to connect it to a managed instance: " +
218
- kleur.cyan("seamless login") +
219
- ".");
220
- console.log(kleur.dim("Run init in an empty directory to scaffold a new local project."));
221
- return;
222
- }
223
- const apps = await listApplications(client);
364
+ async function integrateExistingProject(root, client, apps, opts) {
224
365
  const app = await selectApplication(apps, opts.appId);
225
- if (!app)
226
- return;
227
- const serviceToken = await issueServiceToken(client, app);
228
- if (serviceToken === null)
229
- return;
366
+ // Read before rotating: a database that is not provisioned yet is a warning,
367
+ // not a failure, and finding that out after the token is rotated would mean
368
+ // reporting it against a half-wired project.
369
+ const databaseUrl = await resolveDatabaseUrl(client, app);
370
+ const serviceToken = await issueServiceToken(client, app, opts);
230
371
  const authServerUrl = normalizeInstanceUrl(app.domain);
231
372
  const apiDir = path.join(root, "api");
232
373
  if (!fs.existsSync(apiDir)) {
@@ -236,7 +377,7 @@ async function integrateExistingProject(root, client, opts) {
236
377
  // The token is already rotated (old one invalidated); if the write fails, print
237
378
  // it so the app can be re-wired by hand rather than left bricked.
238
379
  try {
239
- wireApiEnv(apiDir, authServerUrl, serviceToken);
380
+ wireApiEnv(apiDir, authServerUrl, serviceToken, databaseUrl);
240
381
  }
241
382
  catch (err) {
242
383
  console.error(kleur.red("\nFailed to write api/.env after issuing a new service token. Set it by hand to recover:"));
@@ -249,7 +390,7 @@ async function integrateExistingProject(root, client, opts) {
249
390
  }
250
391
  // Merges the managed auth values into an existing api/.env, preserving any keys
251
392
  // already there and keeping (or generating) a cookie signing key.
252
- function wireApiEnv(apiDir, authServerUrl, serviceToken) {
393
+ function wireApiEnv(apiDir, authServerUrl, serviceToken, databaseUrl) {
253
394
  const envPath = path.join(apiDir, ".env");
254
395
  const values = fs.existsSync(envPath) ? parseEnv(envPath) : {};
255
396
  values.AUTH_SERVER_URL = authServerUrl;
@@ -257,6 +398,11 @@ function wireApiEnv(apiDir, authServerUrl, serviceToken) {
257
398
  values.JWKS_KID = values.JWKS_KID || MANAGED_JWKS_KID;
258
399
  values.COOKIE_SIGNING_KEY =
259
400
  values.COOKIE_SIGNING_KEY || generateSecret(32);
401
+ // Never overwritten: an existing project may already hold a working
402
+ // connection string, credentials and all, and this one carries placeholders.
403
+ if (databaseUrl && !values.DATABASE_URL) {
404
+ values.DATABASE_URL = databaseUrl;
405
+ }
260
406
  fs.mkdirSync(apiDir, { recursive: true });
261
407
  writeEnv(envPath, values);
262
408
  }
@@ -270,21 +416,38 @@ function printManagedValues(authServerUrl, serviceToken) {
270
416
  console.log(kleur.dim("server URL on your frontend, then sign in to verify.\n"));
271
417
  }
272
418
  // Issues the app's service token, confirming first when one already exists so a
273
- // scaffold does not silently break an app that is already deployed. Returns null
274
- // only when the developer declines the rotation.
275
- async function issueServiceToken(client, app) {
419
+ // scaffold does not silently break an app that is already deployed. Declining
420
+ // cancels the whole command, so nothing is left half-wired.
421
+ async function issueServiceToken(client, app, opts) {
276
422
  if (app.hasServiceToken) {
277
- const proceed = await confirm({
278
- message: `"${app.name}" already has a service token. Issuing a new one invalidates the existing token. Continue?`,
279
- initialValue: false,
280
- });
281
- if (isCancel(proceed) || !proceed) {
282
- console.log("Cancelled. No token was issued.");
283
- return null;
423
+ // Rotation breaks whatever is running on the old token, so it is a
424
+ // destructive confirmation like the overwrite one: --yes does not answer it,
425
+ // --force does.
426
+ if (opts.yes) {
427
+ if (!opts.force) {
428
+ throw new Error(`"${app.name}" already has a service token, and issuing a new one invalidates it (breaking anything already deployed with it). Re-run with --force to rotate it anyway.`);
429
+ }
430
+ console.log(kleur.yellow(`Rotating the existing service token for "${app.name}" (--force).`));
431
+ }
432
+ else {
433
+ requireInteractive(`"${app.name}" already has a service token. Issue a new one?`, "Pass --force to rotate it, which invalidates the existing token.");
434
+ const proceed = orCancel(await confirm({
435
+ message: `"${app.name}" already has a service token. Issuing a new one invalidates the existing token. Continue?`,
436
+ initialValue: false,
437
+ }));
438
+ if (!proceed) {
439
+ throw new CancelledError("Cancelled. No token was issued.");
440
+ }
284
441
  }
285
442
  }
286
443
  return rotateServiceToken(client, app.id);
287
444
  }
445
+ // listApplications reports applications that have not finished provisioning too,
446
+ // because `seamless apps list` has to show them. Managed connect needs an auth
447
+ // server to point at, so it keeps considering only the ones that have one.
448
+ function connectable(apps) {
449
+ return apps.filter((app) => !!app.domain);
450
+ }
288
451
  // Resolves the chosen templates (reading their manifests and asserting CLI
289
452
  // support) before any files are written, so every prompt finishes first.
290
453
  async function resolveSelectedTemplates(source, webTemplateId, apiTemplateId, root) {
@@ -327,19 +490,75 @@ function printOAuthNextSteps(providers) {
327
490
  }
328
491
  console.log(" Register this redirect URI with each provider: http://localhost:5173/oauth/callback");
329
492
  }
330
- // Resolves `--<alias>` flags (e.g. --oauth) to specific templates from the registry,
331
- // so a matching layer's prompt can be skipped. Aliases live in the registry, so no
332
- // per-flag code is needed here. Unknown or conflicting flags are hard errors.
333
- function resolveTemplateAliases(aliases, templates) {
493
+ // The non-template answers a flag can supply. Validated here so an unusable
494
+ // value is reported before anything is created, and so the prompts only ever
495
+ // see a value they would have accepted themselves.
496
+ function resolveAnswerFlags(opts) {
497
+ const answers = {};
498
+ if (opts.email !== undefined) {
499
+ if (!opts.email.includes("@")) {
500
+ throw new Error(`--email must be an email address, got "${opts.email}".`);
501
+ }
502
+ answers.ownerEmail = opts.email;
503
+ }
504
+ if (opts.auth !== undefined) {
505
+ answers.authMode = oneOf(opts.auth, AUTH_MODES, "--auth");
506
+ }
507
+ if (opts.admin !== undefined) {
508
+ answers.adminMode = oneOf(opts.admin, ADMIN_MODES, "--admin");
509
+ }
510
+ return answers;
511
+ }
512
+ function oneOf(value, allowed, flag) {
513
+ if (!allowed.includes(value)) {
514
+ throw new Error(`Unknown value "${value}" for ${flag}. Expected one of: ${allowed.join(", ")}.`);
515
+ }
516
+ return value;
517
+ }
518
+ // Combines the template flags: the bare `--<id>` / `--<alias>` form, which infers
519
+ // the layer from the registry, and the explicit `--web=` / `--api=` form, which
520
+ // names it. Both accept either spelling, and disagreeing about a layer is an
521
+ // error rather than a silent last-one-wins.
522
+ function resolveTemplateSelection(aliases, opts, templates) {
523
+ const preselect = resolveTemplateAliases(aliases, templates);
524
+ for (const [flag, kind] of [
525
+ ["web", "web"],
526
+ ["api", "api"],
527
+ ]) {
528
+ const value = opts[flag];
529
+ if (!value)
530
+ continue;
531
+ const named = value.replace(/^--+/, "");
532
+ const { webTemplateId, apiTemplateId } = resolveTemplateAliases([named], templates);
533
+ const id = kind === "web" ? webTemplateId : apiTemplateId;
534
+ if (!id) {
535
+ throw new Error(`--${flag} expects a ${kind} template, but "${value}" is not one. Run \`seamless templates list\` to see which templates are ${kind}.`);
536
+ }
537
+ const existing = kind === "web" ? preselect.webTemplateId : preselect.apiTemplateId;
538
+ if (existing && existing !== id) {
539
+ throw new Error(`Conflicting ${kind} template flags: --${flag}=${value} cannot combine with --${existing}.`);
540
+ }
541
+ if (kind === "web")
542
+ preselect.webTemplateId = id;
543
+ else
544
+ preselect.apiTemplateId = id;
545
+ }
546
+ return preselect;
547
+ }
548
+ // Resolves `--<alias>` and `--<id>` flags (e.g. --oauth, --react-oauth) to specific
549
+ // templates from the registry, so a matching layer's prompt can be skipped. Both
550
+ // spellings live in the registry, so no per-flag code is needed here. Unknown or
551
+ // conflicting flags are hard errors.
552
+ export function resolveTemplateAliases(aliases, templates) {
334
553
  const preselect = {};
335
554
  for (const alias of aliases) {
336
- const entry = templates.find((t) => t.alias === alias && t.status !== "coming-soon");
555
+ const entry = templates.find((t) => matchesTemplateFlag(t, alias) && t.status !== "coming-soon");
337
556
  if (!entry) {
338
557
  const available = templates
339
- .filter((t) => t.alias && t.status !== "coming-soon")
340
- .map((t) => `--${t.alias}`)
558
+ .filter((t) => t.status !== "coming-soon")
559
+ .flatMap((t) => templateFlags(t))
341
560
  .join(", ");
342
- throw new Error(`Unknown option "--${alias}". Available template flags: ${available || "(none)"}.`);
561
+ throw new Error(`Unknown option "--${alias}". Available template flags: ${available || "(none)"}. Run \`seamless templates list\` for details.`);
343
562
  }
344
563
  if (entry.kind === "web") {
345
564
  if (preselect.webTemplateId && preselect.webTemplateId !== entry.id) {
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,WAAW,EACX,UAAU,GAEX,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EACL,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,GAKd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,EACpB,oBAAoB,GAGrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAEzE,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GAEpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,GAEnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAChD,MAAM,OAAO,GAAG,uBAAuB,CAAC;AAExC,+EAA+E;AAC/E,8EAA8E;AAC9E,mEAAmE;AACnE,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAoBpC,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,WAAoB,EACpB,UAAoB,EAAE,EACtB,OAAoB,EAAE;IAEtB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,+EAA+E;IAC/E,wDAAwD;IACxD,6DAA6D;IAC7D,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,+FAA+F,CAChG,CACF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACd,mBAAmB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,UAAU,GAAG,kBAAkB,EAAE,CAAC;IAExC,6EAA6E;IAC7E,4EAA4E;IAC5E,wEAAwE;IACxE,6EAA6E;IAC7E,6EAA6E;IAC7E,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/C,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;QACxC,MAAM,CAAC,MAAM,CACX,OAAO,EACP,wBAAwB,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAC5D,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,GAAG,GAAG,CAAC;IACf,0EAA0E;IAC1E,4EAA4E;IAC5E,IAAI,OAAO,GAAkB,IAAI,CAAC;IAElC,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAEnC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,6BAA6B,WAAW,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,GAAG,IAAI,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,4EAA4E;IAC5E,6EAA6E;IAC7E,2EAA2E;IAC3E,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,OAAO,CAAC,OAAO,CAAC,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC,CAAC;IACF,IAAI,OAAO;QAAE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAE/C,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,2EAA2E;QAC3E,0EAA0E;QAC1E,OAAO,CAAC,OAAO,CAAC,CAAC;QACjB,MAAM,GAAG,CAAC;IACZ,CAAC;YAAS,CAAC;QACT,IAAI,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAID,gFAAgF;AAChF,4EAA4E;AAC5E,cAAc;AACd,SAAS,kBAAkB;IACzB,IAAI,OAAO,GAAmC,IAAI,CAAC;IACnD,OAAO,GAAG,EAAE,CAAC,CAAC,OAAO,KAAK,kBAAkB,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,OAAO,CAAC,GAAkB;IACjC,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,IAAI,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,2EAA2E;QAC3E,0CAA0C;IAC5C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,IAAY,EACZ,WAA+B,EAC/B,SAAoB,EACpB,UAAsB,EACtB,IAAiB;IAEjB,wEAAwE;IACxE,YAAY;IACZ,IAAI,MAAM,GAAsB,IAAI,CAAC;IACrC,IAAI,cAAc,GAAwC,IAAI,CAAC;IAC/D,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,UAAU,GAAG,MAAM,oBAAoB,EAAE,CAAC;QAChD,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM;YAAE,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC;IAClD,CAAC;IAED,iFAAiF;IACjF,4EAA4E;IAC5E,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,cAAc,KAAK,aAAa;YAC9B,CAAC,CAAC,0JAA0J;YAC5J,CAAC,CAAC,2IAA2I,CAChJ,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,0EAA0E;IAC1E,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAEtD,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IAClD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,6EAA6E;QAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK;YACvB,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,MAAM,8BAA8B,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC3D,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAC3B,MAAM,wBAAwB,CAAC,IAAI,EAAE,MAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC1D,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK;YACvB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,MAAM,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACnD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,eAAe,CACnB,IAAI,EACJ,WAAW,EACX,SAAS,EACT,UAAU,EACV,MAAO,EACP,IAAI,EACJ,IAAI,CACL,CAAC;YACF,OAAO;QACT,CAAC;IACH,CAAC;SAAM,IAAI,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;SAAM,IAAI,cAAc,KAAK,aAAa,EAAE,CAAC;QAC5C,yEAAyE;QACzE,uEAAuE;QACvE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,sJAAsJ,CACvJ,CAAC;QACJ,CAAC;QACD,kBAAkB,CAChB,6EAA6E,EAC7E,+CAA+C,CAChD,CAAC;QACF,MAAM,oBAAoB,EAAE,CAAC;IAC/B,CAAC;SAAM,IAAI,cAAc,KAAK,YAAY,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,uGAAuG,CACxG,CACF,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AACtE,CAAC;AAED,gFAAgF;AAChF,+EAA+E;AAC/E,gFAAgF;AAChF,+BAA+B;AAC/B,KAAK,UAAU,8BAA8B,CAC3C,UAAmB,EACnB,IAAiB;IAEjB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACd,kBAAkB,CAChB,yDAAyD,EACzD,qHAAqH,CACtH,CAAC;QACF,OAAO,6BAA6B,CAAC,UAAU,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACb,iNAAiN,CAClN,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,2DAA2D,CAAC,CAC1E,CAAC;IACF,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,6EAA6E;AAC7E,+EAA+E;AAC/E,KAAK,UAAU,qBAAqB,CAClC,QAAgB,EAChB,IAAiB;IAEjB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACd,kBAAkB,CAChB,uCAAuC,EACvC,+FAA+F,CAChG,CAAC;QACF,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,IAAI,KAAK,CACb,sMAAsM,CACvM,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,4EAA4E;AAC5E,qEAAqE;AACrE,KAAK,UAAU,kBAAkB,CAC/B,MAAkB,EAClB,GAAc;IAEd,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAE9D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,yCAAyC,GAAG,CAAC,IAAI,oEAAoE,CACtH,CACF,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,wBAAwB,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED,gFAAgF;AAChF,0CAA0C;AAC1C,SAAS,oBAAoB,CAAC,eAAwB;IACpD,OAAO,eAAe;QACpB,CAAC,CAAC,+HAA+H;QACjI,CAAC,CAAC,uIAAuI,CAAC;AAC9I,CAAC;AAMD,4EAA4E;AAC5E,0EAA0E;AAC1E,+EAA+E;AAC/E,kFAAkF;AAClF,iFAAiF;AACjF,iFAAiF;AACjF,KAAK,UAAU,oBAAoB;IACjC,IAAI,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC9D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,mBAAmB,EAAE,CAAC;YACvC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;QAChD,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACjD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,IAAY,EACZ,WAA+B,EAC/B,SAA4B,EAC5B,UAAsB,EACtB,MAAkB,EAClB,IAAsB,EACtB,IAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAC7C,MAAM,CAAC,QAAQ,CAAC,SAAS,EACzB,SAAS,EACT,IAAI,CAAC,GAAG,CACT,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAC7C,MAAM,EACN,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,aAAa,EACrB,IAAI,CACL,CAAC;IAEF,gFAAgF;IAChF,qDAAqD;IACrD,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAEtD,6EAA6E;IAC7E,iFAAiF;IACjF,gFAAgF;IAChF,KAAK,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,KAAK,aAAa,CAAC,CAAC;QAChD,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,6EAA6E;IAC7E,4EAA4E;IAC5E,6CAA6C;IAC7C,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE1D,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAEhE,MAAM,aAAa,GAAG,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEvD,iFAAiF;IACjF,kFAAkF;IAClF,4BAA4B;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,GAAoB;YAC3B,aAAa;YACb,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,gBAAgB;YACzB,4EAA4E;YAC5E,kEAAkE;YAClE,iBAAiB,EAAE,OAAO;YAC1B,WAAW;SACZ,CAAC;QAEF,KAAK,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;YACzC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QAC7E,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QAE7E,sBAAsB,CAAC,IAAI,EAAE;YAC3B,WAAW;YACX,YAAY,EAAE,QAAQ,CAAC,SAAS;YAChC,YAAY,EAAE,QAAQ,CAAC,SAAS;YAChC,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,OAAO;YAClB,OAAO,EAAE;gBACP,WAAW,EAAE,aAAa;gBAC1B,aAAa,EAAE,GAAG,CAAC,EAAE;gBACrB,eAAe,EAAE,GAAG,CAAC,IAAI;aAC1B;SACF,CAAC,CAAC;QAEH,yBAAyB,CAAC;YACxB,WAAW;YACX,YAAY,EAAE,QAAQ,CAAC,SAAS;YAChC,YAAY,EAAE,QAAQ,CAAC,SAAS;YAChC,aAAa;YACb,OAAO,EAAE,GAAG,CAAC,IAAI;YACjB,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,0HAA0H,CAC3H,CACF,CAAC;QACF,kBAAkB,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAChD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,IAAY,EACZ,WAA+B,EAC/B,SAAoB,EACpB,UAAsB,EACtB,IAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAC1C,MAAM,CAAC,QAAQ,CAAC,SAAS,EACzB,SAAS,EACT,gBAAgB,EAAE,EAAE,KAAK,EACzB,IAAI,CAAC,GAAG,CACT,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAC7C,MAAM,EACN,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,aAAa,EACrB,IAAI,CACL,CAAC;IAEF,oFAAoF;IACpF,0EAA0E;IAC1E,4EAA4E;IAC5E,iEAAiE;IACjE,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;IAClE,IAAI,cAAc,GAA6B,EAAE,CAAC;IAClD,IAAI,YAAY,EAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,wGAAwG,CACzG,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,kBAAkB,CAChB,oDAAoD,EACpD,wGAAwG,CACzG,CAAC;YACF,cAAc,GAAG,MAAM,oBAAoB,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;IAED,KAAK,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,KAAK,aAAa,CAAC,CAAC;QAChD,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,YAAY,GAAQ,EAAE,CAAC;IAE3B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,YAAY,GAAG,MAAM,kBAAkB,CACrC,EAAE,IAAI,EAAE,EACR,OAAO,EACP,cAAc,EACd,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,UAAU,CACnB,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,YAAY,GAAG,MAAM,qBAAqB,CAAC,IAAI,EAAE;YACrD,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,KAAK,EAAE,cAAc;YACrB,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,YAAY,GAAG,YAAY,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAoB;QAC3B,aAAa,EAAE,eAAe;QAC9B,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,YAAY,CAAC,QAAQ;QAC/B,OAAO,EAAE,YAAY,CAAC,GAAG;QACzB,iBAAiB,EAAE,OAAO,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;QACjE,yEAAyE;QACzE,oDAAoD;QACpD,WAAW,EAAE,EAAE;KAChB,CAAC;IAEF,KAAK,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;QACzC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAE7E,sBAAsB,CAAC,IAAI,EAAE;QAC3B,WAAW;QACX,YAAY,EAAE,QAAQ,CAAC,SAAS;QAChC,YAAY,EAAE,QAAQ,CAAC,SAAS;QAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;IAEH,kBAAkB,CAAC;QACjB,WAAW;QACX,IAAI;QACJ,YAAY,EAAE,QAAQ,CAAC,SAAS;QAChC,YAAY,EAAE,QAAQ,CAAC,SAAS;QAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC;IAEH,mBAAmB,CAAC,cAAc,CAAC,CAAC;AACtC,CAAC;AAED,6EAA6E;AAC7E,6EAA6E;AAC7E,gFAAgF;AAChF,uBAAuB;AACvB,KAAK,UAAU,wBAAwB,CACrC,IAAY,EACZ,MAAkB,EAClB,IAAsB,EACtB,IAAiB;IAEjB,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAEtD,6EAA6E;IAC7E,4EAA4E;IAC5E,6CAA6C;IAC7C,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE1D,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAEhE,MAAM,aAAa,GAAG,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,kBAAkB,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,gFAAgF;IAChF,kEAAkE;IAClE,IAAI,CAAC;QACH,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,0FAA0F,CAC3F,CACF,CAAC;QACF,kBAAkB,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAChD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAC5B,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,kEAAkE;AAClE,SAAS,UAAU,CACjB,MAAc,EACd,aAAqB,EACrB,YAAoB,EACpB,WAAmB;IAEnB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/D,MAAM,CAAC,eAAe,GAAG,aAAa,CAAC;IACvC,MAAM,CAAC,iBAAiB,GAAG,YAAY,CAAC;IACxC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,gBAAgB,CAAC;IACtD,MAAM,CAAC,kBAAkB;QACvB,MAAM,CAAC,kBAAkB,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;IAClD,oEAAoE;IACpE,6EAA6E;IAC7E,IAAI,WAAW,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACxC,MAAM,CAAC,YAAY,GAAG,WAAW,CAAC;IACpC,CAAC;IAED,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,kBAAkB,CAAC,aAAqB,EAAE,YAAoB;IACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,GAAG,aAAa,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,GAAG,YAAY,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,GAAG,gBAAgB,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,yEAAyE,CAC1E,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,yEAAyE,CAC1E,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,wDAAwD,CAAC,CACpE,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,8EAA8E;AAC9E,4DAA4D;AAC5D,KAAK,UAAU,iBAAiB,CAC9B,MAAkB,EAClB,GAAc,EACd,IAAiB;IAEjB,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;QACxB,mEAAmE;QACnE,6EAA6E;QAC7E,gBAAgB;QAChB,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CACb,IAAI,GAAG,CAAC,IAAI,4JAA4J,CACzK,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,4CAA4C,GAAG,CAAC,IAAI,cAAc,CACnE,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,kBAAkB,CAChB,IAAI,GAAG,CAAC,IAAI,iDAAiD,EAC7D,kEAAkE,CACnE,CAAC;YACF,MAAM,OAAO,GAAG,QAAQ,CACtB,MAAM,OAAO,CAAC;gBACZ,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,4FAA4F;gBACjH,YAAY,EAAE,KAAK;aACpB,CAAC,CACH,CAAC;YACF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,cAAc,CAAC,iCAAiC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5C,CAAC;AAID,iFAAiF;AACjF,+EAA+E;AAC/E,2EAA2E;AAC3E,SAAS,WAAW,CAAC,IAAiB;IACpC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAyB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACnE,CAAC;AAQD,2EAA2E;AAC3E,yEAAyE;AACzE,KAAK,UAAU,wBAAwB,CACrC,MAAsB,EACtB,aAAqB,EACrB,aAAqB,EACrB,IAAY;IAEZ,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,KAAK,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAClD,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,SAAS,CAAC,SAA0B,EAAE,EAAU;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,sBAAsB,EAAE,2BAA2B,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,qFAAqF;AACrF,gFAAgF;AAChF,SAAS,mBAAmB,CAAC,SAAmC;IAC9D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEnC,MAAM,KAAK,GAAG,SAAS;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,YAAY,CAAC;SAC3C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,SAAS;SACtB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;SAC7C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAE/B,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,mCAAmC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CACT,6EAA6E,CAC9E,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO,CAAC,GAAG,CACT,uFAAuF,CACxF,CAAC;AACJ,CAAC;AAOD,4EAA4E;AAC5E,6EAA6E;AAC7E,mDAAmD;AACnD,SAAS,kBAAkB,CAAC,IAAiB;IAC3C,MAAM,OAAO,GAAc,EAAE,CAAC;IAE9B,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;IAClC,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,KAAK,CAAmB,KAAa,EAAE,OAAY,EAAE,IAAY;IACxE,IAAI,CAAE,OAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACb,kBAAkB,KAAK,SAAS,IAAI,sBAAsB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAChF,CAAC;IACJ,CAAC;IACD,OAAO,KAAU,CAAC;AACpB,CAAC;AAED,kFAAkF;AAClF,gFAAgF;AAChF,6EAA6E;AAC7E,4CAA4C;AAC5C,SAAS,wBAAwB,CAC/B,OAAiB,EACjB,IAAiB,EACjB,SAA0B;IAE1B,MAAM,SAAS,GAAG,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAE7D,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI;QACzB,CAAC,KAAK,EAAE,KAAK,CAAC;QACd,CAAC,KAAK,EAAE,KAAK,CAAC;KACN,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,sBAAsB,CAC7D,CAAC,KAAK,CAAC,EACP,SAAS,CACV,CAAC;QACF,MAAM,EAAE,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC;QAC1D,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CACb,KAAK,IAAI,cAAc,IAAI,mBAAmB,KAAK,4EAA4E,IAAI,GAAG,CACvI,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC;QACpF,IAAI,QAAQ,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,eAAe,IAAI,sBAAsB,IAAI,IAAI,KAAK,0BAA0B,QAAQ,GAAG,CAC5F,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,KAAK,KAAK;YAAE,SAAS,CAAC,aAAa,GAAG,EAAE,CAAC;;YAC5C,SAAS,CAAC,aAAa,GAAG,EAAE,CAAC;IACpC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,oFAAoF;AACpF,iFAAiF;AACjF,iFAAiF;AACjF,qCAAqC;AACrC,MAAM,UAAU,sBAAsB,CACpC,OAAiB,EACjB,SAA0B;IAE1B,MAAM,SAAS,GAAsB,EAAE,CAAC;IAExC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,aAAa,CACnE,CAAC;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,SAAS,GAAG,SAAS;iBACxB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC;iBACzC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;iBAChC,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,IAAI,KAAK,CACb,qBAAqB,KAAK,gCAAgC,SAAS,IAAI,QAAQ,gDAAgD,CAChI,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACzB,IAAI,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,aAAa,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC;gBACpE,MAAM,IAAI,KAAK,CACb,qCAAqC,KAAK,2CAA2C,CACtF,CAAC;YACJ,CAAC;YACD,SAAS,CAAC,aAAa,GAAG,KAAK,CAAC,EAAE,CAAC;QACrC,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAChC,IAAI,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,aAAa,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC;gBACpE,MAAM,IAAI,KAAK,CACb,qCAAqC,KAAK,2CAA2C,CACtF,CAAC;YACJ,CAAC;YACD,SAAS,CAAC,aAAa,GAAG,KAAK,CAAC,EAAE,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}