@decohere/create 0.0.1-dev.24 → 0.0.1-dev.26

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 (33) hide show
  1. package/commonjs/src/cli.js +54 -2
  2. package/commonjs/src/domain/prompt.js +12 -3
  3. package/commonjs/src/models/docker-image.model.js +11 -2
  4. package/commonjs/src/models/gitignore.model.js +1 -2
  5. package/commonjs/src/models/project.model.js +8 -3
  6. package/commonjs/src/runner.js +43 -10
  7. package/commonjs/src/webapi/create-api.js +16 -13
  8. package/commonjs/src/webapi/features/auth.feature.js +5 -4
  9. package/commonjs/src/webapi/features/auth0-cli.js +135 -19
  10. package/commonjs/src/webapi/features/biome-format.js +47 -0
  11. package/commonjs/src/webapi/features/finalize.feature.js +6 -1
  12. package/commonjs/src/webapi/features/postman.feature.js +5 -5
  13. package/commonjs/src/webapi/models/controller-source-file.model.js +2 -2
  14. package/es6/src/cli.js +13 -2
  15. package/es6/src/domain/prompt.js +9 -3
  16. package/es6/src/models/docker-image.model.js +11 -2
  17. package/es6/src/models/gitignore.model.js +1 -2
  18. package/es6/src/models/project.model.js +8 -3
  19. package/es6/src/runner.js +46 -13
  20. package/es6/src/webapi/create-api.js +17 -14
  21. package/es6/src/webapi/features/auth.feature.js +5 -4
  22. package/es6/src/webapi/features/auth0-cli.js +128 -20
  23. package/es6/src/webapi/features/biome-format.js +40 -0
  24. package/es6/src/webapi/features/finalize.feature.js +7 -2
  25. package/es6/src/webapi/features/postman.feature.js +5 -5
  26. package/es6/src/webapi/models/controller-source-file.model.js +2 -2
  27. package/package.json +2 -2
  28. package/types/src/domain/prompt.d.ts +2 -0
  29. package/types/src/models/project.model.d.ts +3 -1
  30. package/types/src/runner.d.ts +2 -2
  31. package/types/src/webapi/create-api.d.ts +2 -0
  32. package/types/src/webapi/features/auth0-cli.d.ts +26 -1
  33. package/types/src/webapi/features/biome-format.d.ts +5 -0
@@ -151,7 +151,64 @@ export function createSpaApp(name, callbackUrls) {
151
151
  "--json",
152
152
  "--no-input"
153
153
  ]);
154
- return parseJsonOutput(out);
154
+ const app = parseJsonOutput(out);
155
+ const clientId = app.client_id ?? app.clientId;
156
+ if (!clientId) {
157
+ throw new Error(`Auth0 create SPA response missing client_id. stdout: ${out.slice(0, 300)}`);
158
+ }
159
+ return {
160
+ client_id: clientId
161
+ };
162
+ }
163
+ export function listApps() {
164
+ try {
165
+ const out = runAuth0([
166
+ "apps",
167
+ "list",
168
+ "--json",
169
+ "--no-input"
170
+ ]);
171
+ const apps = parseJsonOutput(out);
172
+ return apps.map((a)=>({
173
+ client_id: a.client_id ?? a.clientId ?? "",
174
+ name: a.name ?? ""
175
+ })).filter((a)=>a.client_id && a.name);
176
+ } catch (err) {
177
+ if (err instanceof Auth0AuthError) throw err;
178
+ return [];
179
+ }
180
+ }
181
+ export function updateSpaCallbacks(clientId, callbackUrls) {
182
+ const callbacks = typeof callbackUrls === "string" ? callbackUrls : callbackUrls.join(",");
183
+ runAuth0([
184
+ "apps",
185
+ "update",
186
+ clientId,
187
+ "--callbacks",
188
+ callbacks,
189
+ "--no-input"
190
+ ]);
191
+ }
192
+ /**
193
+ * Create a Postman SPA, or reuse an existing app with the same name (re-scaffold).
194
+ * Always returns a client_id suitable for Postman auth0ClientId.
195
+ */ export function ensureSpaApp(name, callbackUrls) {
196
+ const existing = listApps().find((a)=>a.name === name);
197
+ if (existing) {
198
+ try {
199
+ updateSpaCallbacks(existing.client_id, callbackUrls);
200
+ } catch {
201
+ // Callbacks may already match; still usable for Postman.
202
+ }
203
+ return {
204
+ client_id: existing.client_id,
205
+ reused: true
206
+ };
207
+ }
208
+ return {
209
+ ...createSpaApp(name, callbackUrls),
210
+ reused: false
211
+ };
155
212
  }
156
213
  /** Enable a database connection for an application (required for username/password login). */ export function enableConnectionForClient(connectionName, clientId) {
157
214
  const listOut = runAuth0([
@@ -191,7 +248,43 @@ export function createSpaApp(name, callbackUrls) {
191
248
  /** Strong default password when the scaffolder caller leaves password blank. */ export function generateAdminPassword() {
192
249
  return `${randomBytes(12).toString("base64url")}aA1!`;
193
250
  }
194
- /** Create a DB connection root-admin user for local / Postman login. */ export function createAdminDatabaseUser(input) {
251
+ function isUserAlreadyExistsError(err) {
252
+ const text = err instanceof Error ? err.message : String(err);
253
+ return /already exists|user exists|Conflict|409/i.test(text);
254
+ }
255
+ /** Look up a user by email (Management API users-by-email). */ export function findUserByEmail(email) {
256
+ const out = runAuth0([
257
+ "api",
258
+ "get",
259
+ `users-by-email?email=${encodeURIComponent(email)}`,
260
+ "--no-input"
261
+ ]);
262
+ const users = parseJsonOutput(out);
263
+ const user = users.find((u)=>u.user_id && u.email);
264
+ if (!user?.user_id || !user.email) return null;
265
+ return {
266
+ user_id: user.user_id,
267
+ email: user.email
268
+ };
269
+ }
270
+ /** Reset password so a re-scaffold can write a known password to .env. */ export function updateUserPassword(userId, password) {
271
+ runAuth0([
272
+ "api",
273
+ "patch",
274
+ `users/${encodeURIComponent(userId)}`,
275
+ "--data",
276
+ JSON.stringify({
277
+ password,
278
+ connection: DB_CONNECTION_NAME
279
+ }),
280
+ "--no-input"
281
+ ]);
282
+ }
283
+ /**
284
+ * Create a DB connection root-admin user for local / Postman login.
285
+ * If the user already exists, look them up, reset password to `input.password`,
286
+ * and return that identity so callers can still write .env credentials.
287
+ */ export function createAdminDatabaseUser(input) {
195
288
  const body = {
196
289
  email: input.email,
197
290
  connection: DB_CONNECTION_NAME,
@@ -205,25 +298,40 @@ export function createSpaApp(name, callbackUrls) {
205
298
  ]
206
299
  }
207
300
  };
208
- const out = runAuth0([
209
- "api",
210
- "post",
211
- "users",
212
- "--data",
213
- JSON.stringify(body),
214
- "--no-input"
215
- ]);
216
- const user = parseJsonOutput(out);
217
- if (!user.user_id || !user.email) {
218
- throw new Error(`Auth0 create user response missing user_id/email. stdout: ${out.slice(0, 300)}`);
301
+ try {
302
+ const out = runAuth0([
303
+ "api",
304
+ "post",
305
+ "users",
306
+ "--data",
307
+ JSON.stringify(body),
308
+ "--no-input"
309
+ ]);
310
+ const user = parseJsonOutput(out);
311
+ if (!user.user_id || !user.email) {
312
+ throw new Error(`Auth0 create user response missing user_id/email. stdout: ${out.slice(0, 300)}`);
313
+ }
314
+ return {
315
+ user_id: user.user_id,
316
+ email: user.email,
317
+ password: input.password,
318
+ username: input.username
319
+ };
320
+ } catch (err) {
321
+ if (!isUserAlreadyExistsError(err)) throw err;
322
+ const existing = findUserByEmail(input.email);
323
+ if (!existing) {
324
+ throw new Error(`Auth0 user already exists for ${input.email}, but lookup by email returned no user.`);
325
+ }
326
+ updateUserPassword(existing.user_id, input.password);
327
+ return {
328
+ user_id: existing.user_id,
329
+ email: existing.email,
330
+ password: input.password,
331
+ username: input.username
332
+ };
219
333
  }
220
- return {
221
- user_id: user.user_id,
222
- email: user.email,
223
- password: input.password,
224
- username: input.username
225
- };
226
334
  }
227
335
  export { REQUIRED_SCOPES };
228
336
 
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2F1dGgwLWNsaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGVjRmlsZVN5bmMsIHNwYXduU3luYyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5cbi8qKiBNYW5hZ2VtZW50IEFQSSBzY29wZXMgbmVlZGVkIGZvciBBUEksIFNQQSwgY29ubmVjdGlvbnMsIGFuZCBhZG1pbiB1c2Vycy4gKi9cbmNvbnN0IFJFUVVJUkVEX1NDT1BFUyA9IFtcblx0XCJjcmVhdGU6Y2xpZW50c1wiLFxuXHRcInJlYWQ6Y2xpZW50c1wiLFxuXHRcInVwZGF0ZTpjbGllbnRzXCIsXG5cdFwiY3JlYXRlOnJlc291cmNlX3NlcnZlcnNcIixcblx0XCJyZWFkOnJlc291cmNlX3NlcnZlcnNcIixcblx0XCJ1cGRhdGU6cmVzb3VyY2Vfc2VydmVyc1wiLFxuXHRcInJlYWQ6Y29ubmVjdGlvbnNcIixcblx0XCJ1cGRhdGU6Y29ubmVjdGlvbnNcIixcblx0XCJjcmVhdGU6dXNlcnNcIixcblx0XCJyZWFkOnVzZXJzXCIsXG5cdFwidXBkYXRlOnVzZXJzXCIsXG5dLmpvaW4oXCIsXCIpO1xuXG4vKiogSGFyZCB0aW1lb3V0IGZvciBhbnkgTWFuYWdlbWVudCBBUEkgY2FsbC4gUHJldmVudHMgaW5kZWZpbml0ZSBoYW5ncyBvbiB0b2tlbiByZS1hdXRoLiAqL1xuY29uc3QgQVBJX1RJTUVPVVRfTVMgPSA4XzAwMDtcblxuLyoqIERlZmF1bHQgQVBJIHNjb3BlcyBtYXRjaGluZyBIZWxsbyBDQVNMIEF1dGhvcml6ZSBkZWNvcmF0b3JzLiAqL1xuZXhwb3J0IGNvbnN0IEhFTExPX0FQSV9TQ09QRVMgPSBbXG5cdFwicmVhZDpIZWxsb1wiLFxuXHRcImNyZWF0ZTpIZWxsb1wiLFxuXHRcInVwZGF0ZTpIZWxsb1wiLFxuXHRcImRlbGV0ZTpIZWxsb1wiLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IERCX0NPTk5FQ1RJT05fTkFNRSA9IFwiVXNlcm5hbWUtUGFzc3dvcmQtQXV0aGVudGljYXRpb25cIjtcblxuZXhwb3J0IGNsYXNzIEF1dGgwQXV0aEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG5cdFx0c3VwZXIobWVzc2FnZSk7XG5cdFx0dGhpcy5uYW1lID0gXCJBdXRoMEF1dGhFcnJvclwiO1xuXHR9XG59XG5cbi8qKiBSZXR1cm5zIHRydWUgaWYgYW4gZXJyb3Igb3Igc3RkZXJyIG91dHB1dCBsb29rcyBsaWtlIGFuIGV4cGlyZWQvbWlzc2luZyB0b2tlbi4gKi9cbmZ1bmN0aW9uIGlzQXV0aEVycm9yKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKFxuXHRcdHRleHQuaW5jbHVkZXMoXCJyZW5ldyBhY2Nlc3MgdG9rZW5cIikgfHxcblx0XHR0ZXh0LmluY2x1ZGVzKFwibG9nIGluXCIpIHx8XG5cdFx0dGV4dC5pbmNsdWRlcyhcIlVuYXV0aG9yaXplZFwiKVxuXHQpO1xufVxuXG4vKiogU3RyaXAgQXV0aDAgQ0xJIGJhbm5lciBsaW5lcyBiZWZvcmUgSlNPTi4gKi9cbmZ1bmN0aW9uIHBhcnNlSnNvbk91dHB1dDxUPihzdGRvdXQ6IHN0cmluZyk6IFQge1xuXHRjb25zdCBzdGFydCA9IHN0ZG91dC5pbmRleE9mKFwie1wiKTtcblx0Y29uc3QgYXJyYXlTdGFydCA9IHN0ZG91dC5pbmRleE9mKFwiW1wiKTtcblx0bGV0IGlkeCA9IC0xO1xuXHRpZiAoc3RhcnQgPT09IC0xKSBpZHggPSBhcnJheVN0YXJ0O1xuXHRlbHNlIGlmIChhcnJheVN0YXJ0ID09PSAtMSkgaWR4ID0gc3RhcnQ7XG5cdGVsc2UgaWR4ID0gTWF0aC5taW4oc3RhcnQsIGFycmF5U3RhcnQpO1xuXHRpZiAoaWR4IDwgMCkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBKU09OIGZyb20gYXV0aDAgQ0xJLCBnb3Q6ICR7c3Rkb3V0LnNsaWNlKDAsIDIwMCl9YCk7XG5cdHJldHVybiBKU09OLnBhcnNlKHN0ZG91dC5zbGljZShpZHgpKSBhcyBUO1xufVxuXG4vKiogUnVuIGFuIGF1dGgwIENMSSBjb21tYW5kIHdpdGggYSBoYXJkIHRpbWVvdXQuIFJldHVybnMgc3Rkb3V0IG9uIHN1Y2Nlc3MsIHRocm93cyBvbiBmYWlsdXJlLiAqL1xuZnVuY3Rpb24gcnVuQXV0aDAoYXJnczogc3RyaW5nW10pOiBzdHJpbmcge1xuXHRjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoXCJhdXRoMFwiLCBhcmdzLCB7XG5cdFx0ZW5jb2Rpbmc6IFwidXRmOFwiLFxuXHRcdHRpbWVvdXQ6IEFQSV9USU1FT1VUX01TLFxuXHRcdGlucHV0OiBcIlwiLFxuXHRcdHN0ZGlvOiBcInBpcGVcIixcblx0fSk7XG5cblx0aWYgKHJlc3VsdC5lcnJvcikge1xuXHRcdGNvbnN0IG1zZyA9IHJlc3VsdC5lcnJvci5tZXNzYWdlO1xuXHRcdGlmIChpc0F1dGhFcnJvcihtc2cpIHx8IChyZXN1bHQuZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlID09PSBcIkVUSU1FRE9VVFwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgQXV0aDBBdXRoRXJyb3IobXNnKTtcblx0XHR9XG5cdFx0dGhyb3cgcmVzdWx0LmVycm9yO1xuXHR9XG5cblx0aWYgKHJlc3VsdC5zdGF0dXMgIT09IDApIHtcblx0XHRjb25zdCBzdGRlcnIgPSByZXN1bHQuc3RkZXJyID8/IFwiXCI7XG5cdFx0aWYgKGlzQXV0aEVycm9yKHN0ZGVycikpIHRocm93IG5ldyBBdXRoMEF1dGhFcnJvcihzdGRlcnIpO1xuXHRcdHRocm93IG5ldyBFcnJvcihzdGRlcnIgfHwgYGF1dGgwIGV4aXRlZCB3aXRoIGNvZGUgJHtyZXN1bHQuc3RhdHVzfWApO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdC5zdGRvdXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aDBUZW5hbnQge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGFjdGl2ZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0luc3RhbGxlZCgpOiBib29sZWFuIHtcblx0dHJ5IHtcblx0XHRleGVjRmlsZVN5bmMoXCJhdXRoMFwiLCBbXCItLXZlcnNpb25cIl0sIHsgc3RkaW86IFwicGlwZVwiIH0pO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RUZW5hbnRzKCk6IEF1dGgwVGVuYW50W10ge1xuXHR0cnkge1xuXHRcdGNvbnN0IG91dCA9IGV4ZWNGaWxlU3luYyhcImF1dGgwXCIsIFtcInRlbmFudHNcIiwgXCJsaXN0XCIsIFwiLS1qc29uXCJdLCB7XG5cdFx0XHRlbmNvZGluZzogXCJ1dGY4XCIsXG5cdFx0XHRzdGRpbzogXCJwaXBlXCIsXG5cdFx0fSk7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2Uob3V0KSBhcyBBdXRoMFRlbmFudFtdO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gW107XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ2luKCk6IGJvb2xlYW4ge1xuXHRjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoXCJhdXRoMFwiLCBbXCJsb2dpblwiLCBcIi0tc2NvcGVzXCIsIFJFUVVJUkVEX1NDT1BFU10sIHtcblx0XHRzdGRpbzogXCJpbmhlcml0XCIsXG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0LnN0YXR1cyA9PT0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RBcGlzKCk6IEFycmF5PHsgaWRlbnRpZmllcjogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IG91dCA9IHJ1bkF1dGgwKFtcImFwaXNcIiwgXCJsaXN0XCIsIFwiLS1qc29uXCIsIFwiLS1uby1pbnB1dFwiXSk7XG5cdFx0cmV0dXJuIHBhcnNlSnNvbk91dHB1dChvdXQpO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHRpZiAoZXJyIGluc3RhbmNlb2YgQXV0aDBBdXRoRXJyb3IpIHRocm93IGVycjtcblx0XHRyZXR1cm4gW107XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFwaShcblx0bmFtZTogc3RyaW5nLFxuXHRpZGVudGlmaWVyOiBzdHJpbmcsXG5cdHNjb3BlczogcmVhZG9ubHkgc3RyaW5nW10gPSBIRUxMT19BUElfU0NPUEVTLFxuKTogeyBpZGVudGlmaWVyOiBzdHJpbmcgfSB7XG5cdGNvbnN0IG91dCA9IHJ1bkF1dGgwKFtcblx0XHRcImFwaXNcIixcblx0XHRcImNyZWF0ZVwiLFxuXHRcdFwiLS1uYW1lXCIsXG5cdFx0bmFtZSxcblx0XHRcIi0taWRlbnRpZmllclwiLFxuXHRcdGlkZW50aWZpZXIsXG5cdFx0XCItLXNjb3Blc1wiLFxuXHRcdHNjb3Blcy5qb2luKFwiLFwiKSxcblx0XHRcIi0tanNvblwiLFxuXHRcdFwiLS1uby1pbnB1dFwiLFxuXHRdKTtcblx0cmV0dXJuIHBhcnNlSnNvbk91dHB1dChvdXQpO1xufVxuXG4vKiogUmVwbGFjZSBhbiBBUEkncyBzY29wZXMgKEF1dGgwIENMSSB1cGRhdGUgLS1zY29wZXMgcmVwbGFjZXMgdGhlIGZ1bGwgc2V0KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBcGlTY29wZXMoXG5cdGlkZW50aWZpZXI6IHN0cmluZyxcblx0c2NvcGVzOiByZWFkb25seSBzdHJpbmdbXSA9IEhFTExPX0FQSV9TQ09QRVMsXG4pOiB2b2lkIHtcblx0cnVuQXV0aDAoW1wiYXBpc1wiLCBcInVwZGF0ZVwiLCBpZGVudGlmaWVyLCBcIi0tc2NvcGVzXCIsIHNjb3Blcy5qb2luKFwiLFwiKSwgXCItLW5vLWlucHV0XCJdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNwYUFwcChcblx0bmFtZTogc3RyaW5nLFxuXHRjYWxsYmFja1VybHM6IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogeyBjbGllbnRfaWQ6IHN0cmluZyB9IHtcblx0Y29uc3QgY2FsbGJhY2tzID0gdHlwZW9mIGNhbGxiYWNrVXJscyA9PT0gXCJzdHJpbmdcIiA/IGNhbGxiYWNrVXJscyA6IGNhbGxiYWNrVXJscy5qb2luKFwiLFwiKTtcblx0Y29uc3Qgb3V0ID0gcnVuQXV0aDAoW1xuXHRcdFwiYXBwc1wiLFxuXHRcdFwiY3JlYXRlXCIsXG5cdFx0XCItLW5hbWVcIixcblx0XHRuYW1lLFxuXHRcdFwiLS10eXBlXCIsXG5cdFx0XCJzcGFcIixcblx0XHRcIi0tY2FsbGJhY2tzXCIsXG5cdFx0Y2FsbGJhY2tzLFxuXHRcdFwiLS1qc29uXCIsXG5cdFx0XCItLW5vLWlucHV0XCIsXG5cdF0pO1xuXHRyZXR1cm4gcGFyc2VKc29uT3V0cHV0KG91dCk7XG59XG5cbnR5cGUgQXV0aDBDb25uZWN0aW9uID0geyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHN0cmF0ZWd5OiBzdHJpbmcgfTtcblxuLyoqIEVuYWJsZSBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gZm9yIGFuIGFwcGxpY2F0aW9uIChyZXF1aXJlZCBmb3IgdXNlcm5hbWUvcGFzc3dvcmQgbG9naW4pLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZUNvbm5lY3Rpb25Gb3JDbGllbnQoY29ubmVjdGlvbk5hbWU6IHN0cmluZywgY2xpZW50SWQ6IHN0cmluZyk6IHZvaWQge1xuXHRjb25zdCBsaXN0T3V0ID0gcnVuQXV0aDAoW1wiYXBpXCIsIFwiZ2V0XCIsIFwiY29ubmVjdGlvbnNcIiwgXCItLW5vLWlucHV0XCJdKTtcblx0Y29uc3QgY29ubmVjdGlvbnMgPSBwYXJzZUpzb25PdXRwdXQ8QXV0aDBDb25uZWN0aW9uW10+KGxpc3RPdXQpO1xuXHRjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdGlvbnMuZmluZCgoYykgPT4gYy5uYW1lID09PSBjb25uZWN0aW9uTmFtZSk7XG5cdGlmICghY29ubmVjdGlvbikge1xuXHRcdHRocm93IG5ldyBFcnJvcihgQXV0aDAgY29ubmVjdGlvbiBub3QgZm91bmQ6ICR7Y29ubmVjdGlvbk5hbWV9YCk7XG5cdH1cblxuXHRjb25zdCBjbGllbnRzT3V0ID0gcnVuQXV0aDAoW1xuXHRcdFwiYXBpXCIsXG5cdFx0XCJnZXRcIixcblx0XHRgY29ubmVjdGlvbnMvJHtjb25uZWN0aW9uLmlkfS9jbGllbnRzYCxcblx0XHRcIi0tbm8taW5wdXRcIixcblx0XSk7XG5cdGNvbnN0IHsgY2xpZW50cyB9ID0gcGFyc2VKc29uT3V0cHV0PHsgY2xpZW50czogQXJyYXk8eyBjbGllbnRfaWQ6IHN0cmluZyB9PiB9PihjbGllbnRzT3V0KTtcblx0aWYgKGNsaWVudHMuc29tZSgoYykgPT4gYy5jbGllbnRfaWQgPT09IGNsaWVudElkKSkgcmV0dXJuO1xuXG5cdC8vIERlZGljYXRlZCBlbmFibGVkLWNsaWVudHMgZW5kcG9pbnQgKGVuYWJsZWRfY2xpZW50cyBvbiBjb25uZWN0aW9uIFBBVENIIGlzIGRlcHJlY2F0ZWQpLlxuXHRydW5BdXRoMChbXG5cdFx0XCJhcGlcIixcblx0XHRcInBhdGNoXCIsXG5cdFx0YGNvbm5lY3Rpb25zLyR7Y29ubmVjdGlvbi5pZH0vY2xpZW50c2AsXG5cdFx0XCItLWRhdGFcIixcblx0XHRKU09OLnN0cmluZ2lmeShbeyBjbGllbnRfaWQ6IGNsaWVudElkLCBzdGF0dXM6IHRydWUgfV0pLFxuXHRcdFwiLS1uby1pbnB1dFwiLFxuXHRdKTtcbn1cblxuZXhwb3J0IHR5cGUgQWRtaW5EYXRhYmFzZVVzZXIgPSB7XG5cdHVzZXJfaWQ6IHN0cmluZztcblx0ZW1haWw6IHN0cmluZztcblx0cGFzc3dvcmQ6IHN0cmluZztcblx0dXNlcm5hbWU6IHN0cmluZztcbn07XG5cbi8qKiBTdHJvbmcgZGVmYXVsdCBwYXNzd29yZCB3aGVuIHRoZSBzY2FmZm9sZGVyIGNhbGxlciBsZWF2ZXMgcGFzc3dvcmQgYmxhbmsuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVBZG1pblBhc3N3b3JkKCk6IHN0cmluZyB7XG5cdHJldHVybiBgJHtyYW5kb21CeXRlcygxMikudG9TdHJpbmcoXCJiYXNlNjR1cmxcIil9YUExIWA7XG59XG5cbi8qKiBDcmVhdGUgYSBEQiBjb25uZWN0aW9uIHJvb3QtYWRtaW4gdXNlciBmb3IgbG9jYWwgLyBQb3N0bWFuIGxvZ2luLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFkbWluRGF0YWJhc2VVc2VyKGlucHV0OiB7XG5cdGVtYWlsOiBzdHJpbmc7XG5cdHBhc3N3b3JkOiBzdHJpbmc7XG5cdHVzZXJuYW1lOiBzdHJpbmc7XG59KTogQWRtaW5EYXRhYmFzZVVzZXIge1xuXHRjb25zdCBib2R5ID0ge1xuXHRcdGVtYWlsOiBpbnB1dC5lbWFpbCxcblx0XHRjb25uZWN0aW9uOiBEQl9DT05ORUNUSU9OX05BTUUsXG5cdFx0cGFzc3dvcmQ6IGlucHV0LnBhc3N3b3JkLFxuXHRcdG5hbWU6IGlucHV0LnVzZXJuYW1lLFxuXHRcdGVtYWlsX3ZlcmlmaWVkOiB0cnVlLFxuXHRcdHZlcmlmeV9lbWFpbDogZmFsc2UsXG5cdFx0YXBwX21ldGFkYXRhOiB7IHJvbGVzOiBbXCJhZG1pblwiXSB9LFxuXHR9O1xuXHRjb25zdCBvdXQgPSBydW5BdXRoMChbXCJhcGlcIiwgXCJwb3N0XCIsIFwidXNlcnNcIiwgXCItLWRhdGFcIiwgSlNPTi5zdHJpbmdpZnkoYm9keSksIFwiLS1uby1pbnB1dFwiXSk7XG5cdGNvbnN0IHVzZXIgPSBwYXJzZUpzb25PdXRwdXQ8eyB1c2VyX2lkPzogc3RyaW5nOyBlbWFpbD86IHN0cmluZyB9PihvdXQpO1xuXHRpZiAoIXVzZXIudXNlcl9pZCB8fCAhdXNlci5lbWFpbCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdGBBdXRoMCBjcmVhdGUgdXNlciByZXNwb25zZSBtaXNzaW5nIHVzZXJfaWQvZW1haWwuIHN0ZG91dDogJHtvdXQuc2xpY2UoMCwgMzAwKX1gLFxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR1c2VyX2lkOiB1c2VyLnVzZXJfaWQsXG5cdFx0ZW1haWw6IHVzZXIuZW1haWwsXG5cdFx0cGFzc3dvcmQ6IGlucHV0LnBhc3N3b3JkLFxuXHRcdHVzZXJuYW1lOiBpbnB1dC51c2VybmFtZSxcblx0fTtcbn1cblxuZXhwb3J0IHsgUkVRVUlSRURfU0NPUEVTIH07XG4iXSwibmFtZXMiOlsiZXhlY0ZpbGVTeW5jIiwic3Bhd25TeW5jIiwicmFuZG9tQnl0ZXMiLCJSRVFVSVJFRF9TQ09QRVMiLCJqb2luIiwiQVBJX1RJTUVPVVRfTVMiLCJIRUxMT19BUElfU0NPUEVTIiwiREJfQ09OTkVDVElPTl9OQU1FIiwiQXV0aDBBdXRoRXJyb3IiLCJFcnJvciIsIm1lc3NhZ2UiLCJuYW1lIiwiaXNBdXRoRXJyb3IiLCJ0ZXh0IiwiaW5jbHVkZXMiLCJwYXJzZUpzb25PdXRwdXQiLCJzdGRvdXQiLCJzdGFydCIsImluZGV4T2YiLCJhcnJheVN0YXJ0IiwiaWR4IiwiTWF0aCIsIm1pbiIsInNsaWNlIiwiSlNPTiIsInBhcnNlIiwicnVuQXV0aDAiLCJhcmdzIiwicmVzdWx0IiwiZW5jb2RpbmciLCJ0aW1lb3V0IiwiaW5wdXQiLCJzdGRpbyIsImVycm9yIiwibXNnIiwiY29kZSIsInN0YXR1cyIsInN0ZGVyciIsImlzSW5zdGFsbGVkIiwibGlzdFRlbmFudHMiLCJvdXQiLCJsb2dpbiIsImxpc3RBcGlzIiwiZXJyIiwiY3JlYXRlQXBpIiwiaWRlbnRpZmllciIsInNjb3BlcyIsInVwZGF0ZUFwaVNjb3BlcyIsImNyZWF0ZVNwYUFwcCIsImNhbGxiYWNrVXJscyIsImNhbGxiYWNrcyIsImVuYWJsZUNvbm5lY3Rpb25Gb3JDbGllbnQiLCJjb25uZWN0aW9uTmFtZSIsImNsaWVudElkIiwibGlzdE91dCIsImNvbm5lY3Rpb25zIiwiY29ubmVjdGlvbiIsImZpbmQiLCJjIiwiY2xpZW50c091dCIsImlkIiwiY2xpZW50cyIsInNvbWUiLCJjbGllbnRfaWQiLCJzdHJpbmdpZnkiLCJnZW5lcmF0ZUFkbWluUGFzc3dvcmQiLCJ0b1N0cmluZyIsImNyZWF0ZUFkbWluRGF0YWJhc2VVc2VyIiwiYm9keSIsImVtYWlsIiwicGFzc3dvcmQiLCJ1c2VybmFtZSIsImVtYWlsX3ZlcmlmaWVkIiwidmVyaWZ5X2VtYWlsIiwiYXBwX21ldGFkYXRhIiwicm9sZXMiLCJ1c2VyIiwidXNlcl9pZCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsWUFBWSxFQUFFQyxTQUFTLFFBQVEscUJBQXFCO0FBQzdELFNBQVNDLFdBQVcsUUFBUSxjQUFjO0FBRTFDLDZFQUE2RSxHQUM3RSxNQUFNQyxrQkFBa0I7SUFDdkI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNBLENBQUNDLElBQUksQ0FBQztBQUVQLDBGQUEwRixHQUMxRixNQUFNQyxpQkFBaUI7QUFFdkIsaUVBQWlFLEdBQ2pFLE9BQU8sTUFBTUMsbUJBQW1CO0lBQy9CO0lBQ0E7SUFDQTtJQUNBO0NBQ0EsQ0FBVTtBQUVYLE9BQU8sTUFBTUMscUJBQXFCLG1DQUFtQztBQUVyRSxPQUFPLE1BQU1DLHVCQUF1QkM7SUFDbkMsWUFBbUJDLE9BQWUsQ0FBRTtRQUNuQyxLQUFLLENBQUNBO1FBQ04sSUFBSSxDQUFDQyxJQUFJLEdBQUc7SUFDYjtBQUNEO0FBRUEsbUZBQW1GLEdBQ25GLFNBQVNDLFlBQVlDLElBQVk7SUFDaEMsT0FDQ0EsS0FBS0MsUUFBUSxDQUFDLHlCQUNkRCxLQUFLQyxRQUFRLENBQUMsYUFDZEQsS0FBS0MsUUFBUSxDQUFDO0FBRWhCO0FBRUEsOENBQThDLEdBQzlDLFNBQVNDLGdCQUFtQkMsTUFBYztJQUN6QyxNQUFNQyxRQUFRRCxPQUFPRSxPQUFPLENBQUM7SUFDN0IsTUFBTUMsYUFBYUgsT0FBT0UsT0FBTyxDQUFDO0lBQ2xDLElBQUlFLE1BQU0sQ0FBQztJQUNYLElBQUlILFVBQVUsQ0FBQyxHQUFHRyxNQUFNRDtTQUNuQixJQUFJQSxlQUFlLENBQUMsR0FBR0MsTUFBTUg7U0FDN0JHLE1BQU1DLEtBQUtD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
337
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2F1dGgwLWNsaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGVjRmlsZVN5bmMsIHNwYXduU3luYyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5cbi8qKiBNYW5hZ2VtZW50IEFQSSBzY29wZXMgbmVlZGVkIGZvciBBUEksIFNQQSwgY29ubmVjdGlvbnMsIGFuZCBhZG1pbiB1c2Vycy4gKi9cbmNvbnN0IFJFUVVJUkVEX1NDT1BFUyA9IFtcblx0XCJjcmVhdGU6Y2xpZW50c1wiLFxuXHRcInJlYWQ6Y2xpZW50c1wiLFxuXHRcInVwZGF0ZTpjbGllbnRzXCIsXG5cdFwiY3JlYXRlOnJlc291cmNlX3NlcnZlcnNcIixcblx0XCJyZWFkOnJlc291cmNlX3NlcnZlcnNcIixcblx0XCJ1cGRhdGU6cmVzb3VyY2Vfc2VydmVyc1wiLFxuXHRcInJlYWQ6Y29ubmVjdGlvbnNcIixcblx0XCJ1cGRhdGU6Y29ubmVjdGlvbnNcIixcblx0XCJjcmVhdGU6dXNlcnNcIixcblx0XCJyZWFkOnVzZXJzXCIsXG5cdFwidXBkYXRlOnVzZXJzXCIsXG5dLmpvaW4oXCIsXCIpO1xuXG4vKiogSGFyZCB0aW1lb3V0IGZvciBhbnkgTWFuYWdlbWVudCBBUEkgY2FsbC4gUHJldmVudHMgaW5kZWZpbml0ZSBoYW5ncyBvbiB0b2tlbiByZS1hdXRoLiAqL1xuY29uc3QgQVBJX1RJTUVPVVRfTVMgPSA4XzAwMDtcblxuLyoqIERlZmF1bHQgQVBJIHNjb3BlcyBtYXRjaGluZyBIZWxsbyBDQVNMIEF1dGhvcml6ZSBkZWNvcmF0b3JzLiAqL1xuZXhwb3J0IGNvbnN0IEhFTExPX0FQSV9TQ09QRVMgPSBbXG5cdFwicmVhZDpIZWxsb1wiLFxuXHRcImNyZWF0ZTpIZWxsb1wiLFxuXHRcInVwZGF0ZTpIZWxsb1wiLFxuXHRcImRlbGV0ZTpIZWxsb1wiLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IERCX0NPTk5FQ1RJT05fTkFNRSA9IFwiVXNlcm5hbWUtUGFzc3dvcmQtQXV0aGVudGljYXRpb25cIjtcblxuZXhwb3J0IGNsYXNzIEF1dGgwQXV0aEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG5cdFx0c3VwZXIobWVzc2FnZSk7XG5cdFx0dGhpcy5uYW1lID0gXCJBdXRoMEF1dGhFcnJvclwiO1xuXHR9XG59XG5cbi8qKiBSZXR1cm5zIHRydWUgaWYgYW4gZXJyb3Igb3Igc3RkZXJyIG91dHB1dCBsb29rcyBsaWtlIGFuIGV4cGlyZWQvbWlzc2luZyB0b2tlbi4gKi9cbmZ1bmN0aW9uIGlzQXV0aEVycm9yKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKFxuXHRcdHRleHQuaW5jbHVkZXMoXCJyZW5ldyBhY2Nlc3MgdG9rZW5cIikgfHxcblx0XHR0ZXh0LmluY2x1ZGVzKFwibG9nIGluXCIpIHx8XG5cdFx0dGV4dC5pbmNsdWRlcyhcIlVuYXV0aG9yaXplZFwiKVxuXHQpO1xufVxuXG4vKiogU3RyaXAgQXV0aDAgQ0xJIGJhbm5lciBsaW5lcyBiZWZvcmUgSlNPTi4gKi9cbmZ1bmN0aW9uIHBhcnNlSnNvbk91dHB1dDxUPihzdGRvdXQ6IHN0cmluZyk6IFQge1xuXHRjb25zdCBzdGFydCA9IHN0ZG91dC5pbmRleE9mKFwie1wiKTtcblx0Y29uc3QgYXJyYXlTdGFydCA9IHN0ZG91dC5pbmRleE9mKFwiW1wiKTtcblx0bGV0IGlkeCA9IC0xO1xuXHRpZiAoc3RhcnQgPT09IC0xKSBpZHggPSBhcnJheVN0YXJ0O1xuXHRlbHNlIGlmIChhcnJheVN0YXJ0ID09PSAtMSkgaWR4ID0gc3RhcnQ7XG5cdGVsc2UgaWR4ID0gTWF0aC5taW4oc3RhcnQsIGFycmF5U3RhcnQpO1xuXHRpZiAoaWR4IDwgMCkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBKU09OIGZyb20gYXV0aDAgQ0xJLCBnb3Q6ICR7c3Rkb3V0LnNsaWNlKDAsIDIwMCl9YCk7XG5cdHJldHVybiBKU09OLnBhcnNlKHN0ZG91dC5zbGljZShpZHgpKSBhcyBUO1xufVxuXG4vKiogUnVuIGFuIGF1dGgwIENMSSBjb21tYW5kIHdpdGggYSBoYXJkIHRpbWVvdXQuIFJldHVybnMgc3Rkb3V0IG9uIHN1Y2Nlc3MsIHRocm93cyBvbiBmYWlsdXJlLiAqL1xuZnVuY3Rpb24gcnVuQXV0aDAoYXJnczogc3RyaW5nW10pOiBzdHJpbmcge1xuXHRjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoXCJhdXRoMFwiLCBhcmdzLCB7XG5cdFx0ZW5jb2Rpbmc6IFwidXRmOFwiLFxuXHRcdHRpbWVvdXQ6IEFQSV9USU1FT1VUX01TLFxuXHRcdGlucHV0OiBcIlwiLFxuXHRcdHN0ZGlvOiBcInBpcGVcIixcblx0fSk7XG5cblx0aWYgKHJlc3VsdC5lcnJvcikge1xuXHRcdGNvbnN0IG1zZyA9IHJlc3VsdC5lcnJvci5tZXNzYWdlO1xuXHRcdGlmIChpc0F1dGhFcnJvcihtc2cpIHx8IChyZXN1bHQuZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlID09PSBcIkVUSU1FRE9VVFwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgQXV0aDBBdXRoRXJyb3IobXNnKTtcblx0XHR9XG5cdFx0dGhyb3cgcmVzdWx0LmVycm9yO1xuXHR9XG5cblx0aWYgKHJlc3VsdC5zdGF0dXMgIT09IDApIHtcblx0XHRjb25zdCBzdGRlcnIgPSByZXN1bHQuc3RkZXJyID8/IFwiXCI7XG5cdFx0aWYgKGlzQXV0aEVycm9yKHN0ZGVycikpIHRocm93IG5ldyBBdXRoMEF1dGhFcnJvcihzdGRlcnIpO1xuXHRcdHRocm93IG5ldyBFcnJvcihzdGRlcnIgfHwgYGF1dGgwIGV4aXRlZCB3aXRoIGNvZGUgJHtyZXN1bHQuc3RhdHVzfWApO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdC5zdGRvdXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aDBUZW5hbnQge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGFjdGl2ZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0luc3RhbGxlZCgpOiBib29sZWFuIHtcblx0dHJ5IHtcblx0XHRleGVjRmlsZVN5bmMoXCJhdXRoMFwiLCBbXCItLXZlcnNpb25cIl0sIHsgc3RkaW86IFwicGlwZVwiIH0pO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RUZW5hbnRzKCk6IEF1dGgwVGVuYW50W10ge1xuXHR0cnkge1xuXHRcdGNvbnN0IG91dCA9IGV4ZWNGaWxlU3luYyhcImF1dGgwXCIsIFtcInRlbmFudHNcIiwgXCJsaXN0XCIsIFwiLS1qc29uXCJdLCB7XG5cdFx0XHRlbmNvZGluZzogXCJ1dGY4XCIsXG5cdFx0XHRzdGRpbzogXCJwaXBlXCIsXG5cdFx0fSk7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2Uob3V0KSBhcyBBdXRoMFRlbmFudFtdO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gW107XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ2luKCk6IGJvb2xlYW4ge1xuXHRjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoXCJhdXRoMFwiLCBbXCJsb2dpblwiLCBcIi0tc2NvcGVzXCIsIFJFUVVJUkVEX1NDT1BFU10sIHtcblx0XHRzdGRpbzogXCJpbmhlcml0XCIsXG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0LnN0YXR1cyA9PT0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RBcGlzKCk6IEFycmF5PHsgaWRlbnRpZmllcjogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IG91dCA9IHJ1bkF1dGgwKFtcImFwaXNcIiwgXCJsaXN0XCIsIFwiLS1qc29uXCIsIFwiLS1uby1pbnB1dFwiXSk7XG5cdFx0cmV0dXJuIHBhcnNlSnNvbk91dHB1dChvdXQpO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHRpZiAoZXJyIGluc3RhbmNlb2YgQXV0aDBBdXRoRXJyb3IpIHRocm93IGVycjtcblx0XHRyZXR1cm4gW107XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFwaShcblx0bmFtZTogc3RyaW5nLFxuXHRpZGVudGlmaWVyOiBzdHJpbmcsXG5cdHNjb3BlczogcmVhZG9ubHkgc3RyaW5nW10gPSBIRUxMT19BUElfU0NPUEVTLFxuKTogeyBpZGVudGlmaWVyOiBzdHJpbmcgfSB7XG5cdGNvbnN0IG91dCA9IHJ1bkF1dGgwKFtcblx0XHRcImFwaXNcIixcblx0XHRcImNyZWF0ZVwiLFxuXHRcdFwiLS1uYW1lXCIsXG5cdFx0bmFtZSxcblx0XHRcIi0taWRlbnRpZmllclwiLFxuXHRcdGlkZW50aWZpZXIsXG5cdFx0XCItLXNjb3Blc1wiLFxuXHRcdHNjb3Blcy5qb2luKFwiLFwiKSxcblx0XHRcIi0tanNvblwiLFxuXHRcdFwiLS1uby1pbnB1dFwiLFxuXHRdKTtcblx0cmV0dXJuIHBhcnNlSnNvbk91dHB1dChvdXQpO1xufVxuXG4vKiogUmVwbGFjZSBhbiBBUEkncyBzY29wZXMgKEF1dGgwIENMSSB1cGRhdGUgLS1zY29wZXMgcmVwbGFjZXMgdGhlIGZ1bGwgc2V0KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBcGlTY29wZXMoXG5cdGlkZW50aWZpZXI6IHN0cmluZyxcblx0c2NvcGVzOiByZWFkb25seSBzdHJpbmdbXSA9IEhFTExPX0FQSV9TQ09QRVMsXG4pOiB2b2lkIHtcblx0cnVuQXV0aDAoW1wiYXBpc1wiLCBcInVwZGF0ZVwiLCBpZGVudGlmaWVyLCBcIi0tc2NvcGVzXCIsIHNjb3Blcy5qb2luKFwiLFwiKSwgXCItLW5vLWlucHV0XCJdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNwYUFwcChcblx0bmFtZTogc3RyaW5nLFxuXHRjYWxsYmFja1VybHM6IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogeyBjbGllbnRfaWQ6IHN0cmluZyB9IHtcblx0Y29uc3QgY2FsbGJhY2tzID0gdHlwZW9mIGNhbGxiYWNrVXJscyA9PT0gXCJzdHJpbmdcIiA/IGNhbGxiYWNrVXJscyA6IGNhbGxiYWNrVXJscy5qb2luKFwiLFwiKTtcblx0Y29uc3Qgb3V0ID0gcnVuQXV0aDAoW1xuXHRcdFwiYXBwc1wiLFxuXHRcdFwiY3JlYXRlXCIsXG5cdFx0XCItLW5hbWVcIixcblx0XHRuYW1lLFxuXHRcdFwiLS10eXBlXCIsXG5cdFx0XCJzcGFcIixcblx0XHRcIi0tY2FsbGJhY2tzXCIsXG5cdFx0Y2FsbGJhY2tzLFxuXHRcdFwiLS1qc29uXCIsXG5cdFx0XCItLW5vLWlucHV0XCIsXG5cdF0pO1xuXHRjb25zdCBhcHAgPSBwYXJzZUpzb25PdXRwdXQ8eyBjbGllbnRfaWQ/OiBzdHJpbmc7IGNsaWVudElkPzogc3RyaW5nIH0+KG91dCk7XG5cdGNvbnN0IGNsaWVudElkID0gYXBwLmNsaWVudF9pZCA/PyBhcHAuY2xpZW50SWQ7XG5cdGlmICghY2xpZW50SWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRgQXV0aDAgY3JlYXRlIFNQQSByZXNwb25zZSBtaXNzaW5nIGNsaWVudF9pZC4gc3Rkb3V0OiAke291dC5zbGljZSgwLCAzMDApfWAsXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4geyBjbGllbnRfaWQ6IGNsaWVudElkIH07XG59XG5cbmV4cG9ydCB0eXBlIEF1dGgwQXBwID0geyBjbGllbnRfaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBsaXN0QXBwcygpOiBBdXRoMEFwcFtdIHtcblx0dHJ5IHtcblx0XHRjb25zdCBvdXQgPSBydW5BdXRoMChbXCJhcHBzXCIsIFwibGlzdFwiLCBcIi0tanNvblwiLCBcIi0tbm8taW5wdXRcIl0pO1xuXHRcdGNvbnN0IGFwcHMgPVxuXHRcdFx0cGFyc2VKc29uT3V0cHV0PEFycmF5PHsgY2xpZW50X2lkPzogc3RyaW5nOyBjbGllbnRJZD86IHN0cmluZzsgbmFtZT86IHN0cmluZyB9Pj4ob3V0KTtcblx0XHRyZXR1cm4gYXBwc1xuXHRcdFx0Lm1hcCgoYSkgPT4gKHtcblx0XHRcdFx0Y2xpZW50X2lkOiBhLmNsaWVudF9pZCA/PyBhLmNsaWVudElkID8/IFwiXCIsXG5cdFx0XHRcdG5hbWU6IGEubmFtZSA/PyBcIlwiLFxuXHRcdFx0fSkpXG5cdFx0XHQuZmlsdGVyKChhKSA9PiBhLmNsaWVudF9pZCAmJiBhLm5hbWUpO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHRpZiAoZXJyIGluc3RhbmNlb2YgQXV0aDBBdXRoRXJyb3IpIHRocm93IGVycjtcblx0XHRyZXR1cm4gW107XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVNwYUNhbGxiYWNrcyhcblx0Y2xpZW50SWQ6IHN0cmluZyxcblx0Y2FsbGJhY2tVcmxzOiBzdHJpbmcgfCByZWFkb25seSBzdHJpbmdbXSxcbik6IHZvaWQge1xuXHRjb25zdCBjYWxsYmFja3MgPSB0eXBlb2YgY2FsbGJhY2tVcmxzID09PSBcInN0cmluZ1wiID8gY2FsbGJhY2tVcmxzIDogY2FsbGJhY2tVcmxzLmpvaW4oXCIsXCIpO1xuXHRydW5BdXRoMChbXCJhcHBzXCIsIFwidXBkYXRlXCIsIGNsaWVudElkLCBcIi0tY2FsbGJhY2tzXCIsIGNhbGxiYWNrcywgXCItLW5vLWlucHV0XCJdKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBQb3N0bWFuIFNQQSwgb3IgcmV1c2UgYW4gZXhpc3RpbmcgYXBwIHdpdGggdGhlIHNhbWUgbmFtZSAocmUtc2NhZmZvbGQpLlxuICogQWx3YXlzIHJldHVybnMgYSBjbGllbnRfaWQgc3VpdGFibGUgZm9yIFBvc3RtYW4gYXV0aDBDbGllbnRJZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZVNwYUFwcChcblx0bmFtZTogc3RyaW5nLFxuXHRjYWxsYmFja1VybHM6IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogeyBjbGllbnRfaWQ6IHN0cmluZzsgcmV1c2VkOiBib29sZWFuIH0ge1xuXHRjb25zdCBleGlzdGluZyA9IGxpc3RBcHBzKCkuZmluZCgoYSkgPT4gYS5uYW1lID09PSBuYW1lKTtcblx0aWYgKGV4aXN0aW5nKSB7XG5cdFx0dHJ5IHtcblx0XHRcdHVwZGF0ZVNwYUNhbGxiYWNrcyhleGlzdGluZy5jbGllbnRfaWQsIGNhbGxiYWNrVXJscyk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHQvLyBDYWxsYmFja3MgbWF5IGFscmVhZHkgbWF0Y2g7IHN0aWxsIHVzYWJsZSBmb3IgUG9zdG1hbi5cblx0XHR9XG5cdFx0cmV0dXJuIHsgY2xpZW50X2lkOiBleGlzdGluZy5jbGllbnRfaWQsIHJldXNlZDogdHJ1ZSB9O1xuXHR9XG5cdHJldHVybiB7IC4uLmNyZWF0ZVNwYUFwcChuYW1lLCBjYWxsYmFja1VybHMpLCByZXVzZWQ6IGZhbHNlIH07XG59XG5cbnR5cGUgQXV0aDBDb25uZWN0aW9uID0geyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHN0cmF0ZWd5OiBzdHJpbmcgfTtcblxuLyoqIEVuYWJsZSBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gZm9yIGFuIGFwcGxpY2F0aW9uIChyZXF1aXJlZCBmb3IgdXNlcm5hbWUvcGFzc3dvcmQgbG9naW4pLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZUNvbm5lY3Rpb25Gb3JDbGllbnQoY29ubmVjdGlvbk5hbWU6IHN0cmluZywgY2xpZW50SWQ6IHN0cmluZyk6IHZvaWQge1xuXHRjb25zdCBsaXN0T3V0ID0gcnVuQXV0aDAoW1wiYXBpXCIsIFwiZ2V0XCIsIFwiY29ubmVjdGlvbnNcIiwgXCItLW5vLWlucHV0XCJdKTtcblx0Y29uc3QgY29ubmVjdGlvbnMgPSBwYXJzZUpzb25PdXRwdXQ8QXV0aDBDb25uZWN0aW9uW10+KGxpc3RPdXQpO1xuXHRjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdGlvbnMuZmluZCgoYykgPT4gYy5uYW1lID09PSBjb25uZWN0aW9uTmFtZSk7XG5cdGlmICghY29ubmVjdGlvbikge1xuXHRcdHRocm93IG5ldyBFcnJvcihgQXV0aDAgY29ubmVjdGlvbiBub3QgZm91bmQ6ICR7Y29ubmVjdGlvbk5hbWV9YCk7XG5cdH1cblxuXHRjb25zdCBjbGllbnRzT3V0ID0gcnVuQXV0aDAoW1xuXHRcdFwiYXBpXCIsXG5cdFx0XCJnZXRcIixcblx0XHRgY29ubmVjdGlvbnMvJHtjb25uZWN0aW9uLmlkfS9jbGllbnRzYCxcblx0XHRcIi0tbm8taW5wdXRcIixcblx0XSk7XG5cdGNvbnN0IHsgY2xpZW50cyB9ID0gcGFyc2VKc29uT3V0cHV0PHsgY2xpZW50czogQXJyYXk8eyBjbGllbnRfaWQ6IHN0cmluZyB9PiB9PihjbGllbnRzT3V0KTtcblx0aWYgKGNsaWVudHMuc29tZSgoYykgPT4gYy5jbGllbnRfaWQgPT09IGNsaWVudElkKSkgcmV0dXJuO1xuXG5cdC8vIERlZGljYXRlZCBlbmFibGVkLWNsaWVudHMgZW5kcG9pbnQgKGVuYWJsZWRfY2xpZW50cyBvbiBjb25uZWN0aW9uIFBBVENIIGlzIGRlcHJlY2F0ZWQpLlxuXHRydW5BdXRoMChbXG5cdFx0XCJhcGlcIixcblx0XHRcInBhdGNoXCIsXG5cdFx0YGNvbm5lY3Rpb25zLyR7Y29ubmVjdGlvbi5pZH0vY2xpZW50c2AsXG5cdFx0XCItLWRhdGFcIixcblx0XHRKU09OLnN0cmluZ2lmeShbeyBjbGllbnRfaWQ6IGNsaWVudElkLCBzdGF0dXM6IHRydWUgfV0pLFxuXHRcdFwiLS1uby1pbnB1dFwiLFxuXHRdKTtcbn1cblxuZXhwb3J0IHR5cGUgQWRtaW5EYXRhYmFzZVVzZXIgPSB7XG5cdHVzZXJfaWQ6IHN0cmluZztcblx0ZW1haWw6IHN0cmluZztcblx0cGFzc3dvcmQ6IHN0cmluZztcblx0dXNlcm5hbWU6IHN0cmluZztcbn07XG5cbi8qKiBTdHJvbmcgZGVmYXVsdCBwYXNzd29yZCB3aGVuIHRoZSBzY2FmZm9sZGVyIGNhbGxlciBsZWF2ZXMgcGFzc3dvcmQgYmxhbmsuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVBZG1pblBhc3N3b3JkKCk6IHN0cmluZyB7XG5cdHJldHVybiBgJHtyYW5kb21CeXRlcygxMikudG9TdHJpbmcoXCJiYXNlNjR1cmxcIil9YUExIWA7XG59XG5cbmZ1bmN0aW9uIGlzVXNlckFscmVhZHlFeGlzdHNFcnJvcihlcnI6IHVua25vd24pOiBib29sZWFuIHtcblx0Y29uc3QgdGV4dCA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0cmV0dXJuIC9hbHJlYWR5IGV4aXN0c3x1c2VyIGV4aXN0c3xDb25mbGljdHw0MDkvaS50ZXN0KHRleHQpO1xufVxuXG4vKiogTG9vayB1cCBhIHVzZXIgYnkgZW1haWwgKE1hbmFnZW1lbnQgQVBJIHVzZXJzLWJ5LWVtYWlsKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVXNlckJ5RW1haWwoZW1haWw6IHN0cmluZyk6IHsgdXNlcl9pZDogc3RyaW5nOyBlbWFpbDogc3RyaW5nIH0gfCBudWxsIHtcblx0Y29uc3Qgb3V0ID0gcnVuQXV0aDAoW1xuXHRcdFwiYXBpXCIsXG5cdFx0XCJnZXRcIixcblx0XHRgdXNlcnMtYnktZW1haWw/ZW1haWw9JHtlbmNvZGVVUklDb21wb25lbnQoZW1haWwpfWAsXG5cdFx0XCItLW5vLWlucHV0XCIsXG5cdF0pO1xuXHRjb25zdCB1c2VycyA9IHBhcnNlSnNvbk91dHB1dDxBcnJheTx7IHVzZXJfaWQ/OiBzdHJpbmc7IGVtYWlsPzogc3RyaW5nIH0+PihvdXQpO1xuXHRjb25zdCB1c2VyID0gdXNlcnMuZmluZCgodSkgPT4gdS51c2VyX2lkICYmIHUuZW1haWwpO1xuXHRpZiAoIXVzZXI/LnVzZXJfaWQgfHwgIXVzZXIuZW1haWwpIHJldHVybiBudWxsO1xuXHRyZXR1cm4geyB1c2VyX2lkOiB1c2VyLnVzZXJfaWQsIGVtYWlsOiB1c2VyLmVtYWlsIH07XG59XG5cbi8qKiBSZXNldCBwYXNzd29yZCBzbyBhIHJlLXNjYWZmb2xkIGNhbiB3cml0ZSBhIGtub3duIHBhc3N3b3JkIHRvIC5lbnYuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVXNlclBhc3N3b3JkKHVzZXJJZDogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogdm9pZCB7XG5cdHJ1bkF1dGgwKFtcblx0XHRcImFwaVwiLFxuXHRcdFwicGF0Y2hcIixcblx0XHRgdXNlcnMvJHtlbmNvZGVVUklDb21wb25lbnQodXNlcklkKX1gLFxuXHRcdFwiLS1kYXRhXCIsXG5cdFx0SlNPTi5zdHJpbmdpZnkoeyBwYXNzd29yZCwgY29ubmVjdGlvbjogREJfQ09OTkVDVElPTl9OQU1FIH0pLFxuXHRcdFwiLS1uby1pbnB1dFwiLFxuXHRdKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBEQiBjb25uZWN0aW9uIHJvb3QtYWRtaW4gdXNlciBmb3IgbG9jYWwgLyBQb3N0bWFuIGxvZ2luLlxuICogSWYgdGhlIHVzZXIgYWxyZWFkeSBleGlzdHMsIGxvb2sgdGhlbSB1cCwgcmVzZXQgcGFzc3dvcmQgdG8gYGlucHV0LnBhc3N3b3JkYCxcbiAqIGFuZCByZXR1cm4gdGhhdCBpZGVudGl0eSBzbyBjYWxsZXJzIGNhbiBzdGlsbCB3cml0ZSAuZW52IGNyZWRlbnRpYWxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWRtaW5EYXRhYmFzZVVzZXIoaW5wdXQ6IHtcblx0ZW1haWw6IHN0cmluZztcblx0cGFzc3dvcmQ6IHN0cmluZztcblx0dXNlcm5hbWU6IHN0cmluZztcbn0pOiBBZG1pbkRhdGFiYXNlVXNlciB7XG5cdGNvbnN0IGJvZHkgPSB7XG5cdFx0ZW1haWw6IGlucHV0LmVtYWlsLFxuXHRcdGNvbm5lY3Rpb246IERCX0NPTk5FQ1RJT05fTkFNRSxcblx0XHRwYXNzd29yZDogaW5wdXQucGFzc3dvcmQsXG5cdFx0bmFtZTogaW5wdXQudXNlcm5hbWUsXG5cdFx0ZW1haWxfdmVyaWZpZWQ6IHRydWUsXG5cdFx0dmVyaWZ5X2VtYWlsOiBmYWxzZSxcblx0XHRhcHBfbWV0YWRhdGE6IHsgcm9sZXM6IFtcImFkbWluXCJdIH0sXG5cdH07XG5cblx0dHJ5IHtcblx0XHRjb25zdCBvdXQgPSBydW5BdXRoMChbXG5cdFx0XHRcImFwaVwiLFxuXHRcdFx0XCJwb3N0XCIsXG5cdFx0XHRcInVzZXJzXCIsXG5cdFx0XHRcIi0tZGF0YVwiLFxuXHRcdFx0SlNPTi5zdHJpbmdpZnkoYm9keSksXG5cdFx0XHRcIi0tbm8taW5wdXRcIixcblx0XHRdKTtcblx0XHRjb25zdCB1c2VyID0gcGFyc2VKc29uT3V0cHV0PHsgdXNlcl9pZD86IHN0cmluZzsgZW1haWw/OiBzdHJpbmcgfT4ob3V0KTtcblx0XHRpZiAoIXVzZXIudXNlcl9pZCB8fCAhdXNlci5lbWFpbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgQXV0aDAgY3JlYXRlIHVzZXIgcmVzcG9uc2UgbWlzc2luZyB1c2VyX2lkL2VtYWlsLiBzdGRvdXQ6ICR7b3V0LnNsaWNlKDAsIDMwMCl9YCxcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHR1c2VyX2lkOiB1c2VyLnVzZXJfaWQsXG5cdFx0XHRlbWFpbDogdXNlci5lbWFpbCxcblx0XHRcdHBhc3N3b3JkOiBpbnB1dC5wYXNzd29yZCxcblx0XHRcdHVzZXJuYW1lOiBpbnB1dC51c2VybmFtZSxcblx0XHR9O1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHRpZiAoIWlzVXNlckFscmVhZHlFeGlzdHNFcnJvcihlcnIpKSB0aHJvdyBlcnI7XG5cblx0XHRjb25zdCBleGlzdGluZyA9IGZpbmRVc2VyQnlFbWFpbChpbnB1dC5lbWFpbCk7XG5cdFx0aWYgKCFleGlzdGluZykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgQXV0aDAgdXNlciBhbHJlYWR5IGV4aXN0cyBmb3IgJHtpbnB1dC5lbWFpbH0sIGJ1dCBsb29rdXAgYnkgZW1haWwgcmV0dXJuZWQgbm8gdXNlci5gLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHR1cGRhdGVVc2VyUGFzc3dvcmQoZXhpc3RpbmcudXNlcl9pZCwgaW5wdXQucGFzc3dvcmQpO1xuXHRcdHJldHVybiB7XG5cdFx0XHR1c2VyX2lkOiBleGlzdGluZy51c2VyX2lkLFxuXHRcdFx0ZW1haWw6IGV4aXN0aW5nLmVtYWlsLFxuXHRcdFx0cGFzc3dvcmQ6IGlucHV0LnBhc3N3b3JkLFxuXHRcdFx0dXNlcm5hbWU6IGlucHV0LnVzZXJuYW1lLFxuXHRcdH07XG5cdH1cbn1cblxuZXhwb3J0IHsgUkVRVUlSRURfU0NPUEVTIH07XG4iXSwibmFtZXMiOlsiZXhlY0ZpbGVTeW5jIiwic3Bhd25TeW5jIiwicmFuZG9tQnl0ZXMiLCJSRVFVSVJFRF9TQ09QRVMiLCJqb2luIiwiQVBJX1RJTUVPVVRfTVMiLCJIRUxMT19BUElfU0NPUEVTIiwiREJfQ09OTkVDVElPTl9OQU1FIiwiQXV0aDBBdXRoRXJyb3IiLCJFcnJvciIsIm1lc3NhZ2UiLCJuYW1lIiwiaXNBdXRoRXJyb3IiLCJ0ZXh0IiwiaW5jbHVkZXMiLCJwYXJzZUpzb25PdXRwdXQiLCJzdGRvdXQiLCJzdGFydCIsImluZGV4T2YiLCJhcnJheVN0YXJ0IiwiaWR4IiwiTWF0aCIsIm1pbiIsInNsaWNlIiwiSlNPTiIsInBhcnNlIiwicnVuQXV0aDAiLCJhcmdzIiwicmVzdWx0IiwiZW5jb2RpbmciLCJ0aW1lb3V0IiwiaW5wdXQiLCJzdGRpbyIsImVycm9yIiwibXNnIiwiY29kZSIsInN0YXR1cyIsInN0ZGVyciIsImlzSW5zdGFsbGVkIiwibGlzdFRlbmFudHMiLCJvdXQiLCJsb2dpbiIsImxpc3RBcGlzIiwiZXJyIiwiY3JlYXRlQXBpIiwiaWRlbnRpZmllciIsInNjb3BlcyIsInVwZGF0ZUFwaVNjb3BlcyIsImNyZWF0ZVNwYUFwcCIsImNhbGxiYWNrVXJscyIsImNhbGxiYWNrcyIsImFwcCIsImNsaWVudElkIiwiY2xpZW50X2lkIiwibGlzdEFwcHMiLCJhcHBzIiwibWFwIiwiYSIsImZpbHRlciIsInVwZGF0ZVNwYUNhbGxiYWNrcyIsImVuc3VyZVNwYUFwcCIsImV4aXN0aW5nIiwiZmluZCIsInJldXNlZCIsImVuYWJsZUNvbm5lY3Rpb25Gb3JDbGllbnQiLCJjb25uZWN0aW9uTmFtZSIsImxpc3RPdXQiLCJjb25uZWN0aW9ucyIsImNvbm5lY3Rpb24iLCJjIiwiY2xpZW50c091dCIsImlkIiwiY2xpZW50cyIsInNvbWUiLCJzdHJpbmdpZnkiLCJnZW5lcmF0ZUFkbWluUGFzc3dvcmQiLCJ0b1N0cmluZyIsImlzVXNlckFscmVhZHlFeGlzdHNFcnJvciIsIlN0cmluZyIsInRlc3QiLCJmaW5kVXNlckJ5RW1haWwiLCJlbWFpbCIsImVuY29kZVVSSUNvbXBvbmVudCIsInVzZXJzIiwidXNlciIsInUiLCJ1c2VyX2lkIiwidXBkYXRlVXNlclBhc3N3b3JkIiwidXNlcklkIiwicGFzc3dvcmQiLCJjcmVhdGVBZG1pbkRhdGFiYXNlVXNlciIsImJvZHkiLCJ1c2VybmFtZSIsImVtYWlsX3ZlcmlmaWVkIiwidmVyaWZ5X2VtYWlsIiwiYXBwX21ldGFkYXRhIiwicm9sZXMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFlBQVksRUFBRUMsU0FBUyxRQUFRLHFCQUFxQjtBQUM3RCxTQUFTQyxXQUFXLFFBQVEsY0FBYztBQUUxQyw2RUFBNkUsR0FDN0UsTUFBTUMsa0JBQWtCO0lBQ3ZCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDQSxDQUFDQyxJQUFJLENBQUM7QUFFUCwwRkFBMEYsR0FDMUYsTUFBTUMsaUJBQWlCO0FBRXZCLGlFQUFpRSxHQUNqRSxPQUFPLE1BQU1DLG1CQUFtQjtJQUMvQjtJQUNBO0lBQ0E7SUFDQTtDQUNBLENBQVU7QUFFWCxPQUFPLE1BQU1DLHFCQUFxQixtQ0FBbUM7QUFFckUsT0FBTyxNQUFNQyx1QkFBdUJDO0lBQ25DLFlBQW1CQyxPQUFlLENBQUU7UUFDbkMsS0FBSyxDQUFDQTtRQUNOLElBQUksQ0FBQ0MsSUFBSSxHQUFHO0lBQ2I7QUFDRDtBQUVBLG1G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
@@ -0,0 +1,40 @@
1
+ import { spawnSync } from "node:child_process";
2
+ /**
3
+ * Format/lint-fix all files in the scaffolded workspace with Biome.
4
+ * Prefer a global `biome` binary (builder image); fall back to `npx`.
5
+ */ export function formatScaffoldedFiles(targetDir) {
6
+ process.stdout.write("\n Formatting scaffolded files with Biome...");
7
+ let result = spawnSync("biome", [
8
+ "check",
9
+ "--write",
10
+ "."
11
+ ], {
12
+ cwd: targetDir,
13
+ encoding: "utf8",
14
+ stdio: "pipe"
15
+ });
16
+ if (result.error && result.error.code === "ENOENT") {
17
+ result = spawnSync("npx", [
18
+ "--yes",
19
+ "@biomejs/biome",
20
+ "check",
21
+ "--write",
22
+ "."
23
+ ], {
24
+ cwd: targetDir,
25
+ encoding: "utf8",
26
+ stdio: "pipe"
27
+ });
28
+ }
29
+ if (result.status === 0) {
30
+ process.stdout.write(" done.\n");
31
+ return;
32
+ }
33
+ const detail = (result.stderr || result.stdout || result.error?.message || "").trim();
34
+ process.stdout.write(" failed.\n");
35
+ if (detail) {
36
+ console.error(` ✗ Biome: ${detail.slice(0, 400)}`);
37
+ }
38
+ }
39
+
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2Jpb21lLWZvcm1hdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3blN5bmMgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5cbi8qKlxuICogRm9ybWF0L2xpbnQtZml4IGFsbCBmaWxlcyBpbiB0aGUgc2NhZmZvbGRlZCB3b3Jrc3BhY2Ugd2l0aCBCaW9tZS5cbiAqIFByZWZlciBhIGdsb2JhbCBgYmlvbWVgIGJpbmFyeSAoYnVpbGRlciBpbWFnZSk7IGZhbGwgYmFjayB0byBgbnB4YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFNjYWZmb2xkZWRGaWxlcyh0YXJnZXREaXI6IHN0cmluZyk6IHZvaWQge1xuXHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIlxcbiAgRm9ybWF0dGluZyBzY2FmZm9sZGVkIGZpbGVzIHdpdGggQmlvbWUuLi5cIik7XG5cblx0bGV0IHJlc3VsdCA9IHNwYXduU3luYyhcImJpb21lXCIsIFtcImNoZWNrXCIsIFwiLS13cml0ZVwiLCBcIi5cIl0sIHtcblx0XHRjd2Q6IHRhcmdldERpcixcblx0XHRlbmNvZGluZzogXCJ1dGY4XCIsXG5cdFx0c3RkaW86IFwicGlwZVwiLFxuXHR9KTtcblxuXHRpZiAocmVzdWx0LmVycm9yICYmIChyZXN1bHQuZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlID09PSBcIkVOT0VOVFwiKSB7XG5cdFx0cmVzdWx0ID0gc3Bhd25TeW5jKFwibnB4XCIsIFtcIi0teWVzXCIsIFwiQGJpb21lanMvYmlvbWVcIiwgXCJjaGVja1wiLCBcIi0td3JpdGVcIiwgXCIuXCJdLCB7XG5cdFx0XHRjd2Q6IHRhcmdldERpcixcblx0XHRcdGVuY29kaW5nOiBcInV0ZjhcIixcblx0XHRcdHN0ZGlvOiBcInBpcGVcIixcblx0XHR9KTtcblx0fVxuXG5cdGlmIChyZXN1bHQuc3RhdHVzID09PSAwKSB7XG5cdFx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoXCIgZG9uZS5cXG5cIik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgZGV0YWlsID0gKHJlc3VsdC5zdGRlcnIgfHwgcmVzdWx0LnN0ZG91dCB8fCByZXN1bHQuZXJyb3I/Lm1lc3NhZ2UgfHwgXCJcIikudHJpbSgpO1xuXHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIiBmYWlsZWQuXFxuXCIpO1xuXHRpZiAoZGV0YWlsKSB7XG5cdFx0Y29uc29sZS5lcnJvcihgICDinJcgQmlvbWU6ICR7ZGV0YWlsLnNsaWNlKDAsIDQwMCl9YCk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJzcGF3blN5bmMiLCJmb3JtYXRTY2FmZm9sZGVkRmlsZXMiLCJ0YXJnZXREaXIiLCJwcm9jZXNzIiwic3Rkb3V0Iiwid3JpdGUiLCJyZXN1bHQiLCJjd2QiLCJlbmNvZGluZyIsInN0ZGlvIiwiZXJyb3IiLCJjb2RlIiwic3RhdHVzIiwiZGV0YWlsIiwic3RkZXJyIiwibWVzc2FnZSIsInRyaW0iLCJjb25zb2xlIiwic2xpY2UiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFNBQVMsUUFBUSxxQkFBcUI7QUFFL0M7OztDQUdDLEdBQ0QsT0FBTyxTQUFTQyxzQkFBc0JDLFNBQWlCO0lBQ3REQyxRQUFRQyxNQUFNLENBQUNDLEtBQUssQ0FBQztJQUVyQixJQUFJQyxTQUFTTixVQUFVLFNBQVM7UUFBQztRQUFTO1FBQVc7S0FBSSxFQUFFO1FBQzFETyxLQUFLTDtRQUNMTSxVQUFVO1FBQ1ZDLE9BQU87SUFDUjtJQUVBLElBQUlILE9BQU9JLEtBQUssSUFBSSxBQUFDSixPQUFPSSxLQUFLLENBQTJCQyxJQUFJLEtBQUssVUFBVTtRQUM5RUwsU0FBU04sVUFBVSxPQUFPO1lBQUM7WUFBUztZQUFrQjtZQUFTO1lBQVc7U0FBSSxFQUFFO1lBQy9FTyxLQUFLTDtZQUNMTSxVQUFVO1lBQ1ZDLE9BQU87UUFDUjtJQUNEO0lBRUEsSUFBSUgsT0FBT00sTUFBTSxLQUFLLEdBQUc7UUFDeEJULFFBQVFDLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDO1FBQ3JCO0lBQ0Q7SUFFQSxNQUFNUSxTQUFTLEFBQUNQLENBQUFBLE9BQU9RLE1BQU0sSUFBSVIsT0FBT0YsTUFBTSxJQUFJRSxPQUFPSSxLQUFLLEVBQUVLLFdBQVcsRUFBQyxFQUFHQyxJQUFJO0lBQ25GYixRQUFRQyxNQUFNLENBQUNDLEtBQUssQ0FBQztJQUNyQixJQUFJUSxRQUFRO1FBQ1hJLFFBQVFQLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRUcsT0FBT0ssS0FBSyxDQUFDLEdBQUcsTUFBTTtJQUNuRDtBQUNEIn0=
@@ -1,5 +1,6 @@
1
1
  import { detectPackageManager, promptForPackageManager } from "@decohere/nexus/interop";
2
- import { ask } from "../../domain/prompt.js";
2
+ import { ask, closePrompt } from "../../domain/prompt.js";
3
+ import { formatScaffoldedFiles } from "./biome-format.js";
3
4
  // State resolved during scaffold(), consumed by finalize().
4
5
  let _pm = null;
5
6
  let _shouldInstall = true;
@@ -23,6 +24,8 @@ async function scaffold(workspace, options) {
23
24
  _shouldInstall = answer.toLowerCase() !== "no";
24
25
  }
25
26
  async function finalize(workspace, _options) {
27
+ // Last scaffold write step: normalize generated sources before install / handoff.
28
+ formatScaffoldedFiles(workspace.targetDir);
26
29
  if (_shouldInstall) {
27
30
  const pm = _pm;
28
31
  console.log(`\nScaffolded ${workspace.name}. Installing dependencies...\n`);
@@ -38,6 +41,8 @@ async function finalize(workspace, _options) {
38
41
  }
39
42
  console.log(" code . # open in VS Code");
40
43
  console.log(" # then: Reopen in Container\n");
44
+ // Drop readline's stdin hold so the CLI / container can exit.
45
+ closePrompt();
41
46
  }
42
47
  export const FinalizeFeature = {
43
48
  getOptions,
@@ -45,4 +50,4 @@ export const FinalizeFeature = {
45
50
  finalize
46
51
  };
47
52
 
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2ZpbmFsaXplLmZlYXR1cmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYWNrYWdlTWFuYWdlciB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvaW50ZXJvcFwiO1xuaW1wb3J0IHsgZGV0ZWN0UGFja2FnZU1hbmFnZXIsIHByb21wdEZvclBhY2thZ2VNYW5hZ2VyIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9pbnRlcm9wXCI7XG5pbXBvcnQgeyBhc2sgfSBmcm9tIFwiLi4vLi4vZG9tYWluL3Byb21wdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VTY2FmZm9sZCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcHJvamVjdC5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBGZWF0dXJlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NjYWZmb2xkLnNlcnZpY2UuanNcIjtcblxuLy8gU3RhdGUgcmVzb2x2ZWQgZHVyaW5nIHNjYWZmb2xkKCksIGNvbnN1bWVkIGJ5IGZpbmFsaXplKCkuXG5sZXQgX3BtOiBQYWNrYWdlTWFuYWdlciB8IG51bGwgPSBudWxsO1xubGV0IF9zaG91bGRJbnN0YWxsID0gdHJ1ZTtcblxudHlwZSBGaW5hbGl6ZU9wdGlvbnMgPSB7XG5cdGluc3RhbGxEZXBlbmRlbmNpZXM/OiBcInllc1wiIHwgXCJub1wiO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0T3B0aW9ucyhcblx0X3dvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsXG5cdGNsaU9wdGlvbnM6IFBhcnRpYWw8RmluYWxpemVPcHRpb25zPixcbik6IFByb21pc2U8b2JqZWN0PiB7XG5cdGlmIChjbGlPcHRpb25zLmluc3RhbGxEZXBlbmRlbmNpZXMgIT0gbnVsbCkge1xuXHRcdF9zaG91bGRJbnN0YWxsID0gY2xpT3B0aW9ucy5pbnN0YWxsRGVwZW5kZW5jaWVzID09PSBcInllc1wiO1xuXHR9XG5cdHJldHVybiB7fTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGQoXG5cdHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsXG5cdG9wdGlvbnM6IEZpbmFsaXplT3B0aW9ucyxcbik6IFByb21pc2U8dm9pZD4ge1xuXHRpZiAocHJvY2Vzcy5lbnYuREVDT0hFUkVfQlVJTERFUiA9PT0gXCIxXCIpIHtcblx0XHRfc2hvdWxkSW5zdGFsbCA9IGZhbHNlO1xuXHRcdHJldHVybjtcblx0fVxuXHRfcG0gPSBkZXRlY3RQYWNrYWdlTWFuYWdlcih3b3Jrc3BhY2UudGFyZ2V0RGlyKSA/PyAoYXdhaXQgcHJvbXB0Rm9yUGFja2FnZU1hbmFnZXIoKSk7XG5cdGlmIChvcHRpb25zLmluc3RhbGxEZXBlbmRlbmNpZXMgIT0gbnVsbCkge1xuXHRcdF9zaG91bGRJbnN0YWxsID0gb3B0aW9ucy5pbnN0YWxsRGVwZW5kZW5jaWVzID09PSBcInllc1wiO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IGFuc3dlciA9IGF3YWl0IGFzayhcIlxcbkluc3RhbGwgZGVwZW5kZW5jaWVzIG5vdz8gW3llcy9ub10gKHllcyk6IFwiLCBcInllc1wiKTtcblx0X3Nob3VsZEluc3RhbGwgPSBhbnN3ZXIudG9Mb3dlckNhc2UoKSAhPT0gXCJub1wiO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaW5hbGl6ZSh3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLCBfb3B0aW9uczogb2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG5cdGlmIChfc2hvdWxkSW5zdGFsbCkge1xuXHRcdGNvbnN0IHBtID0gX3BtITtcblx0XHRjb25zb2xlLmxvZyhgXFxuU2NhZmZvbGRlZCAke3dvcmtzcGFjZS5uYW1lfS4gSW5zdGFsbGluZyBkZXBlbmRlbmNpZXMuLi5cXG5gKTtcblx0XHRhd2FpdCBwbS5pbnN0YWxsKHsgY3dkOiB3b3Jrc3BhY2UudGFyZ2V0RGlyIH0pO1xuXHR9XG5cblx0Y29uc29sZS5sb2coYFxcbkRvbmUhICR7X3Nob3VsZEluc3RhbGwgPyBcIk5leHRcIiA6IFwiVG8gZ2V0IHN0YXJ0ZWQ6XCJ9IHN0ZXBzOlxcbmApO1xuXHRjb25zb2xlLmxvZyhgICBjZCAke3dvcmtzcGFjZS5uYW1lfWApO1xuXHRpZiAoIV9zaG91bGRJbnN0YWxsKSB7XG5cdFx0Y29uc3QgcG1OYW1lID0gX3BtPy5uYW1lID8/IFwicG5wbVwiO1xuXHRcdGNvbnNvbGUubG9nKGAgICR7cG1OYW1lfSBpbnN0YWxsYCk7XG5cdH1cblx0Y29uc29sZS5sb2coXCIgIGNvZGUgLiAgICAgICAgICMgb3BlbiBpbiBWUyBDb2RlXCIpO1xuXHRjb25zb2xlLmxvZyhcIiAgICAgICAgICAgICAgICAgIyB0aGVuOiBSZW9wZW4gaW4gQ29udGFpbmVyXFxuXCIpO1xufVxuXG5leHBvcnQgY29uc3QgRmluYWxpemVGZWF0dXJlOiBGZWF0dXJlID0geyBnZXRPcHRpb25zLCBzY2FmZm9sZCwgZmluYWxpemUgfTtcbiJdLCJuYW1lcyI6WyJkZXRlY3RQYWNrYWdlTWFuYWdlciIsInByb21wdEZvclBhY2thZ2VNYW5hZ2VyIiwiYXNrIiwiX3BtIiwiX3Nob3VsZEluc3RhbGwiLCJnZXRPcHRpb25zIiwiX3dvcmtzcGFjZSIsImNsaU9wdGlvbnMiLCJpbnN0YWxsRGVwZW5kZW5jaWVzIiwic2NhZmZvbGQiLCJ3b3Jrc3BhY2UiLCJvcHRpb25zIiwicHJvY2VzcyIsImVudiIsIkRFQ09IRVJFX0JVSUxERVIiLCJ0YXJnZXREaXIiLCJhbnN3ZXIiLCJ0b0xvd2VyQ2FzZSIsImZpbmFsaXplIiwiX29wdGlvbnMiLCJwbSIsImNvbnNvbGUiLCJsb2ciLCJuYW1lIiwiaW5zdGFsbCIsImN3ZCIsInBtTmFtZSIsIkZpbmFsaXplRmVhdHVyZSJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBU0Esb0JBQW9CLEVBQUVDLHVCQUF1QixRQUFRLDBCQUEwQjtBQUN4RixTQUFTQyxHQUFHLFFBQVEseUJBQXlCO0FBSTdDLDREQUE0RDtBQUM1RCxJQUFJQyxNQUE2QjtBQUNqQyxJQUFJQyxpQkFBaUI7QUFNckIsZUFBZUMsV0FDZEMsVUFBNkIsRUFDN0JDLFVBQW9DO0lBRXBDLElBQUlBLFdBQVdDLG1CQUFtQixJQUFJLE1BQU07UUFDM0NKLGlCQUFpQkcsV0FBV0MsbUJBQW1CLEtBQUs7SUFDckQ7SUFDQSxPQUFPLENBQUM7QUFDVDtBQUVBLGVBQWVDLFNBQ2RDLFNBQTRCLEVBQzVCQyxPQUF3QjtJQUV4QixJQUFJQyxRQUFRQyxHQUFHLENBQUNDLGdCQUFnQixLQUFLLEtBQUs7UUFDekNWLGlCQUFpQjtRQUNqQjtJQUNEO0lBQ0FELE1BQU1ILHFCQUFxQlUsVUFBVUssU0FBUyxLQUFNLE1BQU1kO0lBQzFELElBQUlVLFFBQVFILG1CQUFtQixJQUFJLE1BQU07UUFDeENKLGlCQUFpQk8sUUFBUUgsbUJBQW1CLEtBQUs7UUFDakQ7SUFDRDtJQUVBLE1BQU1RLFNBQVMsTUFBTWQsSUFBSSxnREFBZ0Q7SUFDekVFLGlCQUFpQlksT0FBT0MsV0FBVyxPQUFPO0FBQzNDO0FBRUEsZUFBZUMsU0FBU1IsU0FBNEIsRUFBRVMsUUFBZ0I7SUFDckUsSUFBSWYsZ0JBQWdCO1FBQ25CLE1BQU1nQixLQUFLakI7UUFDWGtCLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRVosVUFBVWEsSUFBSSxDQUFDLDhCQUE4QixDQUFDO1FBQzFFLE1BQU1ILEdBQUdJLE9BQU8sQ0FBQztZQUFFQyxLQUFLZixVQUFVSyxTQUFTO1FBQUM7SUFDN0M7SUFFQU0sUUFBUUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFbEIsaUJBQWlCLFNBQVMsa0JBQWtCLFNBQVMsQ0FBQztJQUM3RWlCLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRVosVUFBVWEsSUFBSSxFQUFFO0lBQ3BDLElBQUksQ0FBQ25CLGdCQUFnQjtRQUNwQixNQUFNc0IsU0FBU3ZCLEtBQUtvQixRQUFRO1FBQzVCRixRQUFRQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUVJLE9BQU8sUUFBUSxDQUFDO0lBQ2xDO0lBQ0FMLFFBQVFDLEdBQUcsQ0FBQztJQUNaRCxRQUFRQyxHQUFHLENBQUM7QUFDYjtBQUVBLE9BQU8sTUFBTUssa0JBQTJCO0lBQUV0QjtJQUFZSTtJQUFVUztBQUFTLEVBQUUifQ==
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2ZpbmFsaXplLmZlYXR1cmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYWNrYWdlTWFuYWdlciB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvaW50ZXJvcFwiO1xuaW1wb3J0IHsgZGV0ZWN0UGFja2FnZU1hbmFnZXIsIHByb21wdEZvclBhY2thZ2VNYW5hZ2VyIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9pbnRlcm9wXCI7XG5pbXBvcnQgeyBhc2ssIGNsb3NlUHJvbXB0IH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9wcm9tcHQuanNcIjtcbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlU2NhZmZvbGQgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3Byb2plY3QubW9kZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgRmVhdHVyZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zY2FmZm9sZC5zZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBmb3JtYXRTY2FmZm9sZGVkRmlsZXMgfSBmcm9tIFwiLi9iaW9tZS1mb3JtYXQuanNcIjtcblxuLy8gU3RhdGUgcmVzb2x2ZWQgZHVyaW5nIHNjYWZmb2xkKCksIGNvbnN1bWVkIGJ5IGZpbmFsaXplKCkuXG5sZXQgX3BtOiBQYWNrYWdlTWFuYWdlciB8IG51bGwgPSBudWxsO1xubGV0IF9zaG91bGRJbnN0YWxsID0gdHJ1ZTtcblxudHlwZSBGaW5hbGl6ZU9wdGlvbnMgPSB7XG5cdGluc3RhbGxEZXBlbmRlbmNpZXM/OiBcInllc1wiIHwgXCJub1wiO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0T3B0aW9ucyhcblx0X3dvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsXG5cdGNsaU9wdGlvbnM6IFBhcnRpYWw8RmluYWxpemVPcHRpb25zPixcbik6IFByb21pc2U8b2JqZWN0PiB7XG5cdGlmIChjbGlPcHRpb25zLmluc3RhbGxEZXBlbmRlbmNpZXMgIT0gbnVsbCkge1xuXHRcdF9zaG91bGRJbnN0YWxsID0gY2xpT3B0aW9ucy5pbnN0YWxsRGVwZW5kZW5jaWVzID09PSBcInllc1wiO1xuXHR9XG5cdHJldHVybiB7fTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGQoXG5cdHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsXG5cdG9wdGlvbnM6IEZpbmFsaXplT3B0aW9ucyxcbik6IFByb21pc2U8dm9pZD4ge1xuXHRpZiAocHJvY2Vzcy5lbnYuREVDT0hFUkVfQlVJTERFUiA9PT0gXCIxXCIpIHtcblx0XHRfc2hvdWxkSW5zdGFsbCA9IGZhbHNlO1xuXHRcdHJldHVybjtcblx0fVxuXHRfcG0gPSBkZXRlY3RQYWNrYWdlTWFuYWdlcih3b3Jrc3BhY2UudGFyZ2V0RGlyKSA/PyAoYXdhaXQgcHJvbXB0Rm9yUGFja2FnZU1hbmFnZXIoKSk7XG5cdGlmIChvcHRpb25zLmluc3RhbGxEZXBlbmRlbmNpZXMgIT0gbnVsbCkge1xuXHRcdF9zaG91bGRJbnN0YWxsID0gb3B0aW9ucy5pbnN0YWxsRGVwZW5kZW5jaWVzID09PSBcInllc1wiO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IGFuc3dlciA9IGF3YWl0IGFzayhcIlxcbkluc3RhbGwgZGVwZW5kZW5jaWVzIG5vdz8gW3llcy9ub10gKHllcyk6IFwiLCBcInllc1wiKTtcblx0X3Nob3VsZEluc3RhbGwgPSBhbnN3ZXIudG9Mb3dlckNhc2UoKSAhPT0gXCJub1wiO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaW5hbGl6ZSh3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLCBfb3B0aW9uczogb2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG5cdC8vIExhc3Qgc2NhZmZvbGQgd3JpdGUgc3RlcDogbm9ybWFsaXplIGdlbmVyYXRlZCBzb3VyY2VzIGJlZm9yZSBpbnN0YWxsIC8gaGFuZG9mZi5cblx0Zm9ybWF0U2NhZmZvbGRlZEZpbGVzKHdvcmtzcGFjZS50YXJnZXREaXIpO1xuXG5cdGlmIChfc2hvdWxkSW5zdGFsbCkge1xuXHRcdGNvbnN0IHBtID0gX3BtITtcblx0XHRjb25zb2xlLmxvZyhgXFxuU2NhZmZvbGRlZCAke3dvcmtzcGFjZS5uYW1lfS4gSW5zdGFsbGluZyBkZXBlbmRlbmNpZXMuLi5cXG5gKTtcblx0XHRhd2FpdCBwbS5pbnN0YWxsKHsgY3dkOiB3b3Jrc3BhY2UudGFyZ2V0RGlyIH0pO1xuXHR9XG5cblx0Y29uc29sZS5sb2coYFxcbkRvbmUhICR7X3Nob3VsZEluc3RhbGwgPyBcIk5leHRcIiA6IFwiVG8gZ2V0IHN0YXJ0ZWQ6XCJ9IHN0ZXBzOlxcbmApO1xuXHRjb25zb2xlLmxvZyhgICBjZCAke3dvcmtzcGFjZS5uYW1lfWApO1xuXHRpZiAoIV9zaG91bGRJbnN0YWxsKSB7XG5cdFx0Y29uc3QgcG1OYW1lID0gX3BtPy5uYW1lID8/IFwicG5wbVwiO1xuXHRcdGNvbnNvbGUubG9nKGAgICR7cG1OYW1lfSBpbnN0YWxsYCk7XG5cdH1cblx0Y29uc29sZS5sb2coXCIgIGNvZGUgLiAgICAgICAgICMgb3BlbiBpbiBWUyBDb2RlXCIpO1xuXHRjb25zb2xlLmxvZyhcIiAgICAgICAgICAgICAgICAgIyB0aGVuOiBSZW9wZW4gaW4gQ29udGFpbmVyXFxuXCIpO1xuXG5cdC8vIERyb3AgcmVhZGxpbmUncyBzdGRpbiBob2xkIHNvIHRoZSBDTEkgLyBjb250YWluZXIgY2FuIGV4aXQuXG5cdGNsb3NlUHJvbXB0KCk7XG59XG5cbmV4cG9ydCBjb25zdCBGaW5hbGl6ZUZlYXR1cmU6IEZlYXR1cmUgPSB7IGdldE9wdGlvbnMsIHNjYWZmb2xkLCBmaW5hbGl6ZSB9O1xuIl0sIm5hbWVzIjpbImRldGVjdFBhY2thZ2VNYW5hZ2VyIiwicHJvbXB0Rm9yUGFja2FnZU1hbmFnZXIiLCJhc2siLCJjbG9zZVByb21wdCIsImZvcm1hdFNjYWZmb2xkZWRGaWxlcyIsIl9wbSIsIl9zaG91bGRJbnN0YWxsIiwiZ2V0T3B0aW9ucyIsIl93b3Jrc3BhY2UiLCJjbGlPcHRpb25zIiwiaW5zdGFsbERlcGVuZGVuY2llcyIsInNjYWZmb2xkIiwid29ya3NwYWNlIiwib3B0aW9ucyIsInByb2Nlc3MiLCJlbnYiLCJERUNPSEVSRV9CVUlMREVSIiwidGFyZ2V0RGlyIiwiYW5zd2VyIiwidG9Mb3dlckNhc2UiLCJmaW5hbGl6ZSIsIl9vcHRpb25zIiwicG0iLCJjb25zb2xlIiwibG9nIiwibmFtZSIsImluc3RhbGwiLCJjd2QiLCJwbU5hbWUiLCJGaW5hbGl6ZUZlYXR1cmUiXSwibWFwcGluZ3MiOiJBQUNBLFNBQVNBLG9CQUFvQixFQUFFQyx1QkFBdUIsUUFBUSwwQkFBMEI7QUFDeEYsU0FBU0MsR0FBRyxFQUFFQyxXQUFXLFFBQVEseUJBQXlCO0FBRzFELFNBQVNDLHFCQUFxQixRQUFRLG9CQUFvQjtBQUUxRCw0REFBNEQ7QUFDNUQsSUFBSUMsTUFBNkI7QUFDakMsSUFBSUMsaUJBQWlCO0FBTXJCLGVBQWVDLFdBQ2RDLFVBQTZCLEVBQzdCQyxVQUFvQztJQUVwQyxJQUFJQSxXQUFXQyxtQkFBbUIsSUFBSSxNQUFNO1FBQzNDSixpQkFBaUJHLFdBQVdDLG1CQUFtQixLQUFLO0lBQ3JEO0lBQ0EsT0FBTyxDQUFDO0FBQ1Q7QUFFQSxlQUFlQyxTQUNkQyxTQUE0QixFQUM1QkMsT0FBd0I7SUFFeEIsSUFBSUMsUUFBUUMsR0FBRyxDQUFDQyxnQkFBZ0IsS0FBSyxLQUFLO1FBQ3pDVixpQkFBaUI7UUFDakI7SUFDRDtJQUNBRCxNQUFNTCxxQkFBcUJZLFVBQVVLLFNBQVMsS0FBTSxNQUFNaEI7SUFDMUQsSUFBSVksUUFBUUgsbUJBQW1CLElBQUksTUFBTTtRQUN4Q0osaUJBQWlCTyxRQUFRSCxtQkFBbUIsS0FBSztRQUNqRDtJQUNEO0lBRUEsTUFBTVEsU0FBUyxNQUFNaEIsSUFBSSxnREFBZ0Q7SUFDekVJLGlCQUFpQlksT0FBT0MsV0FBVyxPQUFPO0FBQzNDO0FBRUEsZUFBZUMsU0FBU1IsU0FBNEIsRUFBRVMsUUFBZ0I7SUFDckUsa0ZBQWtGO0lBQ2xGakIsc0JBQXNCUSxVQUFVSyxTQUFTO0lBRXpDLElBQUlYLGdCQUFnQjtRQUNuQixNQUFNZ0IsS0FBS2pCO1FBQ1hrQixRQUFRQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUVaLFVBQVVhLElBQUksQ0FBQyw4QkFBOEIsQ0FBQztRQUMxRSxNQUFNSCxHQUFHSSxPQUFPLENBQUM7WUFBRUMsS0FBS2YsVUFBVUssU0FBUztRQUFDO0lBQzdDO0lBRUFNLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRWxCLGlCQUFpQixTQUFTLGtCQUFrQixTQUFTLENBQUM7SUFDN0VpQixRQUFRQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUVaLFVBQVVhLElBQUksRUFBRTtJQUNwQyxJQUFJLENBQUNuQixnQkFBZ0I7UUFDcEIsTUFBTXNCLFNBQVN2QixLQUFLb0IsUUFBUTtRQUM1QkYsUUFBUUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFSSxPQUFPLFFBQVEsQ0FBQztJQUNsQztJQUNBTCxRQUFRQyxHQUFHLENBQUM7SUFDWkQsUUFBUUMsR0FBRyxDQUFDO0lBRVosOERBQThEO0lBQzlEckI7QUFDRDtBQUVBLE9BQU8sTUFBTTBCLGtCQUEyQjtJQUFFdEI7SUFBWUk7SUFBVVM7QUFBUyxFQUFFIn0=
@@ -426,19 +426,19 @@ async function scaffold(workspace, options) {
426
426
  let spaClientId;
427
427
  if (authCfg?.issuerBaseUrl) {
428
428
  try {
429
- const app = auth0Cli.createSpaApp(`${workspace.name} Postman`, [
429
+ const app = auth0Cli.ensureSpaApp(`${workspace.name} Postman`, [
430
430
  ...POSTMAN_CALLBACKS
431
431
  ]);
432
432
  spaClientId = app.client_id;
433
- console.log(" ✓ Auth0 SPA app created for Postman PKCE");
433
+ console.log(app.reused ? ` ✓ Reusing Auth0 SPA app for Postman PKCE (${spaClientId})` : ` ✓ Auth0 SPA app created for Postman PKCE (${spaClientId})`);
434
434
  try {
435
435
  auth0Cli.enableConnectionForClient(auth0Cli.DB_CONNECTION_NAME, spaClientId);
436
436
  console.log(` ✓ Enabled ${auth0Cli.DB_CONNECTION_NAME} on Postman SPA`);
437
437
  } catch (err) {
438
438
  console.error(` ✗ Failed to enable DB connection on SPA: ${err instanceof Error ? err.message : err}`);
439
439
  }
440
- } catch {
441
- console.error(" ✗ Failed to create Auth0 SPA app — set auth0ClientId in the environment.");
440
+ } catch (err) {
441
+ console.error(` ✗ Failed to ensure Auth0 SPA app — set auth0ClientId in the environment: ${err instanceof Error ? err.message : err}`);
442
442
  }
443
443
  }
444
444
  const auth0Env = authCfg?.issuerBaseUrl ? {
@@ -534,4 +534,4 @@ export const PostmanFeature = {
534
534
  };
535
535
  export { POSTMAN_CALLBACKS, POSTMAN_SCOPES };
536
536
 
537
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL3Bvc3RtYW4uZmVhdHVyZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyBwaWNrIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9wcm9tcHQuanNcIjtcbmltcG9ydCB7IFdFTExfS05PV05fRklMRVMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbnN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtzcGFjZVNjYWZmb2xkIH0gZnJvbSBcIi4uLy4uL21vZGVscy9wcm9qZWN0Lm1vZGVsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEZlYXR1cmUgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2NhZmZvbGQuc2VydmljZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBdXRoQ29uZmlnTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2F1dGgtY29uZmlnLm1vZGVsLmpzXCI7XG5pbXBvcnQgKiBhcyBhdXRoMENsaSBmcm9tIFwiLi9hdXRoMC1jbGkuanNcIjtcblxuLyoqIFBvc3RtYW4gT0F1dGggY2FsbGJhY2sgVVJMcyAocG9wdXAgKyBcIkF1dGhvcml6ZSB1c2luZyBicm93c2VyXCIpLiAqL1xuY29uc3QgUE9TVE1BTl9DQUxMQkFDS1MgPSBbXG5cdFwiaHR0cHM6Ly9vYXV0aC5wc3Rtbi5pby92MS9jYWxsYmFja1wiLFxuXHRcImh0dHBzOi8vb2F1dGgucHN0bW4uaW8vdjEvYnJvd3Nlci1jYWxsYmFja1wiLFxuXSBhcyBjb25zdDtcblxuLyoqIFNjb3BlcyByZXF1ZXN0ZWQgZm9yIEF1dGgwIGFjY2VzcyB0b2tlbnMgKE9JREMgKyBIZWxsbyBDQVNMIHBlcm1pc3Npb25zKS4gKi9cbmNvbnN0IFBPU1RNQU5fU0NPUEVTID0gW1xuXHRcIm9wZW5pZFwiLFxuXHRcInByb2ZpbGVcIixcblx0XCJlbWFpbFwiLFxuXHRcInJlYWQ6SGVsbG9cIixcblx0XCJjcmVhdGU6SGVsbG9cIixcblx0XCJ1cGRhdGU6SGVsbG9cIixcblx0XCJkZWxldGU6SGVsbG9cIixcbl0uam9pbihcIiBcIik7XG5cbmV4cG9ydCB0eXBlIFBvc3RtYW5PcHRpb25zID0ge1xuXHRwb3N0bWFuUHJvdmlkZXI/OiBcImFwaVwiIHwgXCJsb2NhbFwiIHwgXCJub25lXCI7XG5cdGFwaUtleT86IHN0cmluZztcblx0d29ya3NwYWNlSWQ/OiBzdHJpbmc7XG59O1xuXG5hc3luYyBmdW5jdGlvbiBnZXRPcHRpb25zKFxuXHRfd29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCxcblx0Y2xpT3B0aW9uczogUGFydGlhbDxQb3N0bWFuT3B0aW9ucz4sXG4pOiBQcm9taXNlPFBhcnRpYWw8UG9zdG1hbk9wdGlvbnM+PiB7XG5cdGlmIChjbGlPcHRpb25zLnBvc3RtYW5Qcm92aWRlciAhPSBudWxsKSByZXR1cm4ge307XG5cblx0Y29uc3QgY2hvaWNlcyA9IFtcblx0XHR7IGxhYmVsOiBcIm5vbmVcIiBhcyBjb25zdCwgZGVzY3JpcHRpb246IFwic2tpcFwiIH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IFwibG9jYWxcIiBhcyBjb25zdCxcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkxvY2FsIFZpZXcgLyBOYXRpdmUgR2l0IGZpbGVzIChubyBBUEkga2V5KVwiLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IFwiYXBpXCIgYXMgY29uc3QsXG5cdFx0XHRkZXNjcmlwdGlvbjogXCJhbHNvIHVwbG9hZCB0byBQb3N0bWFuLmNvbSAobmVlZHMgQVBJIGtleSlcIixcblx0XHR9LFxuXHRdO1xuXHRjb25zdCBzZWxlY3RlZCA9IGF3YWl0IHBpY2soXG5cdFx0XCJcXG4gIFBvc3RtYW46IFwiLFxuXHRcdGNob2ljZXMsXG5cdFx0KGMpID0+IGAke2MubGFiZWx9IOKAlCAke2MuZGVzY3JpcHRpb259YCxcblx0KTtcblx0Y29uc3QgcHJvdmlkZXIgPSBzZWxlY3RlZD8ubGFiZWwgPz8gXCJub25lXCI7XG5cblx0aWYgKHByb3ZpZGVyID09PSBcIm5vbmVcIikgcmV0dXJuIHsgcG9zdG1hblByb3ZpZGVyOiBcIm5vbmVcIiB9O1xuXHRpZiAocHJvdmlkZXIgPT09IFwibG9jYWxcIikgcmV0dXJuIHsgcG9zdG1hblByb3ZpZGVyOiBcImxvY2FsXCIgfTtcblxuXHRjb25zdCBhcGlLZXkgPVxuXHRcdHByb2Nlc3MuZW52LlBPU1RNQU5fQVBJX0tFWSA/P1xuXHRcdChhd2FpdCBpbXBvcnQoXCIuLi8uLi9kb21haW4vcHJvbXB0LmpzXCIpLnRoZW4oKG0pID0+XG5cdFx0XHRtLmFzayhcIlxcbiAgUG9zdG1hbiBBUEkga2V5IChhcHAuZ2V0cG9zdG1hbi5jb20vc2V0dGluZ3MvbWUvYXBpLWtleXMpOiBcIiksXG5cdFx0KSk7XG5cblx0Y29uc3QgaGVhZGVycyA9IHsgXCJYLUFwaS1LZXlcIjogYXBpS2V5LCBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9O1xuXHRjb25zdCB3c1JlcyA9IGF3YWl0IGZldGNoKFwiaHR0cHM6Ly9hcGkuZ2V0cG9zdG1hbi5jb20vd29ya3NwYWNlc1wiLCB7IGhlYWRlcnMgfSk7XG5cblx0aWYgKCF3c1Jlcy5vaykge1xuXHRcdGNvbnNvbGUuZXJyb3IoXCJcXG4gIFBvc3RtYW4gQVBJIGtleSBpbnZhbGlkIOKAlCBmYWxsaW5nIGJhY2sgdG8gbG9jYWwgZmlsZXMuXCIpO1xuXHRcdHJldHVybiB7IHBvc3RtYW5Qcm92aWRlcjogXCJsb2NhbFwiIH07XG5cdH1cblxuXHRjb25zdCB7IHdvcmtzcGFjZXMgfSA9IChhd2FpdCB3c1Jlcy5qc29uKCkpIGFzIHtcblx0XHR3b3Jrc3BhY2VzOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nIH0+O1xuXHR9O1xuXG5cdHR5cGUgV3NDaG9pY2UgPSB7IGxhYmVsOiBzdHJpbmc7IGlkOiBzdHJpbmcgfCBudWxsIH07XG5cdGNvbnN0IHdzQ2hvaWNlczogV3NDaG9pY2VbXSA9IFtcblx0XHR7IGxhYmVsOiBcIjxuZXcgd29ya3NwYWNlPlwiLCBpZDogbnVsbCB9LFxuXHRcdC4uLndvcmtzcGFjZXMubWFwKCh3KSA9PiAoeyBsYWJlbDogYCR7dy5uYW1lfSAoJHt3LnR5cGV9KWAsIGlkOiB3LmlkIH0pKSxcblx0XTtcblxuXHRjb25zdCB3c1BpY2tlZCA9IGF3YWl0IHBpY2soXCJcXG4gIFBvc3RtYW4gd29ya3NwYWNlOiBcIiwgd3NDaG9pY2VzLCAoYykgPT4gYy5sYWJlbCk7XG5cblx0bGV0IHdvcmtzcGFjZUlkOiBzdHJpbmc7XG5cdGlmICghd3NQaWNrZWQgfHwgd3NQaWNrZWQuaWQgPT09IG51bGwpIHtcblx0XHRjb25zdCB7IGFzayB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vLi4vZG9tYWluL3Byb21wdC5qc1wiKTtcblx0XHRjb25zdCB3c05hbWUgPSBhd2FpdCBhc2soYCAgV29ya3NwYWNlIG5hbWU6IGApO1xuXHRcdGNvbnN0IGNyZWF0ZVJlcyA9IGF3YWl0IGZldGNoKFwiaHR0cHM6Ly9hcGkuZ2V0cG9zdG1hbi5jb20vd29ya3NwYWNlc1wiLCB7XG5cdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0aGVhZGVycyxcblx0XHRcdGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgd29ya3NwYWNlOiB7IG5hbWU6IHdzTmFtZSwgdHlwZTogXCJwZXJzb25hbFwiIH0gfSksXG5cdFx0fSk7XG5cdFx0Y29uc3QgeyB3b3Jrc3BhY2U6IHdzIH0gPSAoYXdhaXQgY3JlYXRlUmVzLmpzb24oKSkgYXMgeyB3b3Jrc3BhY2U6IHsgaWQ6IHN0cmluZyB9IH07XG5cdFx0d29ya3NwYWNlSWQgPSB3cy5pZDtcblx0XHRjb25zb2xlLmxvZyhgICDinJMgV29ya3NwYWNlIGNyZWF0ZWQ6ICR7d3NOYW1lfWApO1xuXHR9IGVsc2Uge1xuXHRcdHdvcmtzcGFjZUlkID0gd3NQaWNrZWQuaWQ7XG5cdH1cblxuXHRyZXR1cm4geyBwb3N0bWFuUHJvdmlkZXI6IFwiYXBpXCIsIGFwaUtleSwgd29ya3NwYWNlSWQgfTtcbn1cblxudHlwZSBBdXRoMEVudiA9IHtcblx0YXV0aDBEb21haW4/OiBzdHJpbmc7XG5cdGF1dGgwQXVkaWVuY2U/OiBzdHJpbmc7XG5cdGF1dGgwQ2xpZW50SWQ/OiBzdHJpbmc7XG59O1xuXG4vKiogdjIuMSBKU09OIOKAlCB1c2VkIGZvciBQb3N0bWFuLmNvbSBBUEkgdXBsb2FkIG9ubHkuICovXG5mdW5jdGlvbiBidWlsZENvbGxlY3Rpb25Kc29uKHByb2plY3ROYW1lOiBzdHJpbmcsIGF1dGg/OiBBdXRoMEVudik6IHVua25vd24ge1xuXHRjb25zdCBhdXRoT2JqID0gYXV0aD8uYXV0aDBEb21haW5cblx0XHQ/IHtcblx0XHRcdFx0dHlwZTogXCJvYXV0aDJcIixcblx0XHRcdFx0b2F1dGgyOiBbXG5cdFx0XHRcdFx0eyBrZXk6IFwiZ3JhbnRfdHlwZVwiLCB2YWx1ZTogXCJhdXRob3JpemF0aW9uX2NvZGVfd2l0aF9wa2NlXCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRrZXk6IFwiYXV0aFVybFwiLFxuXHRcdFx0XHRcdFx0dmFsdWU6IFwiaHR0cHM6Ly97e2F1dGgwRG9tYWlufX0vYXV0aG9yaXplP2F1ZGllbmNlPXt7YXV0aDBBdWRpZW5jZX19XCIsXG5cdFx0XHRcdFx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0a2V5OiBcImFjY2Vzc1Rva2VuVXJsXCIsXG5cdFx0XHRcdFx0XHR2YWx1ZTogXCJodHRwczovL3t7YXV0aDBEb21haW59fS9vYXV0aC90b2tlblwiLFxuXHRcdFx0XHRcdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHsga2V5OiBcImNsaWVudElkXCIsIHZhbHVlOiBcInt7YXV0aDBDbGllbnRJZH19XCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHRcdFx0XHR7IGtleTogXCJzY29wZVwiLCB2YWx1ZTogUE9TVE1BTl9TQ09QRVMsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHRcdFx0XHR7IGtleTogXCJyZWRpcmVjdF91cmlcIiwgdmFsdWU6IFBPU1RNQU5fQ0FMTEJBQ0tTWzBdLCB0eXBlOiBcInN0cmluZ1wiIH0sXG5cdFx0XHRcdFx0eyBrZXk6IFwidXNlQnJvd3NlclwiLCB2YWx1ZTogXCJ0cnVlXCIsIHR5cGU6IFwiYm9vbGVhblwiIH0sXG5cdFx0XHRcdFx0eyBrZXk6IFwiYWRkVG9rZW5Ub1wiLCB2YWx1ZTogXCJoZWFkZXJcIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XHRcdHsga2V5OiBcImNoYWxsZW5nZUFsZ29yaXRobVwiLCB2YWx1ZTogXCJTMjU2XCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHRcdFx0XHR7IGtleTogXCJjbGllbnRfYXV0aGVudGljYXRpb25cIiwgdmFsdWU6IFwiYm9keVwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG5cdFx0XHRcdFx0eyBrZXk6IFwiY2xpZW50U2VjcmV0XCIsIHZhbHVlOiBcIlwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG5cdFx0XHRcdFx0eyBrZXk6IFwidG9rZW5OYW1lXCIsIHZhbHVlOiBgJHtwcm9qZWN0TmFtZX0gQWNjZXNzIFRva2VuYCwgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fVxuXHRcdDogdW5kZWZpbmVkO1xuXG5cdGNvbnN0IGhlbGxvVXJsID0gKHBhdGg6IHN0cmluZywgcmF3OiBzdHJpbmcpID0+ICh7XG5cdFx0cmF3OiBge3tiYXNlVXJsfX0ke3Jhd31gLFxuXHRcdGhvc3Q6IFtcInt7YmFzZVVybH19XCJdLFxuXHRcdHBhdGg6IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKSxcblx0fSk7XG5cblx0cmV0dXJuIHtcblx0XHRpbmZvOiB7XG5cdFx0XHRfcG9zdG1hbl9pZDogcmFuZG9tVVVJRCgpLFxuXHRcdFx0bmFtZTogYCR7cHJvamVjdE5hbWV9IFdlYkFQSWAsXG5cdFx0XHRzY2hlbWE6IFwiaHR0cHM6Ly9zY2hlbWEuZ2V0cG9zdG1hbi5jb20vanNvbi9jb2xsZWN0aW9uL3YyLjEuMC9jb2xsZWN0aW9uLmpzb25cIixcblx0XHRcdGRlc2NyaXB0aW9uOlxuXHRcdFx0XHRcIk9wZW4gdGhlIHByb2plY3Qgcm9vdCBpbiBQb3N0bWFuIExvY2FsIFZpZXcgKG5vdCB0aGUgcG9zdG1hbi8gZm9sZGVyKS4gXCIgK1xuXHRcdFx0XHRcIlNlbGVjdCB0aGUgTG9jYWwgZW52aXJvbm1lbnQsIHRoZW4gQXV0aG9yaXphdGlvbiDihpIgR2V0IE5ldyBBY2Nlc3MgVG9rZW4gKFBLQ0UpLlwiLFxuXHRcdH0sXG5cdFx0Li4uKGF1dGhPYmogPyB7IGF1dGg6IGF1dGhPYmogfSA6IHt9KSxcblx0XHRpdGVtOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiSGVsbG9cIixcblx0XHRcdFx0aXRlbTogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiTGlzdCAoYW5vbnltb3VzKVwiLFxuXHRcdFx0XHRcdFx0cmVxdWVzdDoge1xuXHRcdFx0XHRcdFx0XHRhdXRoOiB7IHR5cGU6IFwibm9hdXRoXCIgfSxcblx0XHRcdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdFx0XHR1cmw6IGhlbGxvVXJsKFwiaGVsbG9cIiwgXCIvaGVsbG9cIiksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bmFtZTogXCJHZXQgYnkgaWRcIixcblx0XHRcdFx0XHRcdHJlcXVlc3Q6IHtcblx0XHRcdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdFx0XHR1cmw6IGhlbGxvVXJsKFwiaGVsbG8vOmlkXCIsIFwiL2hlbGxvLzppZFwiKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRuYW1lOiBcIkNyZWF0ZVwiLFxuXHRcdFx0XHRcdFx0cmVxdWVzdDoge1xuXHRcdFx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRcdFx0XHRoZWFkZXI6IFt7IGtleTogXCJDb250ZW50LVR5cGVcIiwgdmFsdWU6IFwiYXBwbGljYXRpb24vanNvblwiIH1dLFxuXHRcdFx0XHRcdFx0XHRib2R5OiB7XG5cdFx0XHRcdFx0XHRcdFx0bW9kZTogXCJyYXdcIixcblx0XHRcdFx0XHRcdFx0XHRyYXc6ICd7XFxuICBcIm1lc3NhZ2VcIjogXCJoZWxsb1wiXFxufVxcbicsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHVybDogaGVsbG9VcmwoXCJoZWxsb1wiLCBcIi9oZWxsb1wiKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRuYW1lOiBcIlVwZGF0ZVwiLFxuXHRcdFx0XHRcdFx0cmVxdWVzdDoge1xuXHRcdFx0XHRcdFx0XHRtZXRob2Q6IFwiUFVUXCIsXG5cdFx0XHRcdFx0XHRcdGhlYWRlcjogW3sga2V5OiBcIkNvbnRlbnQtVHlwZVwiLCB2YWx1ZTogXCJhcHBsaWNhdGlvbi9qc29uXCIgfV0sXG5cdFx0XHRcdFx0XHRcdGJvZHk6IHtcblx0XHRcdFx0XHRcdFx0XHRtb2RlOiBcInJhd1wiLFxuXHRcdFx0XHRcdFx0XHRcdHJhdzogJ3tcXG4gIFwibWVzc2FnZVwiOiBcInVwZGF0ZWRcIlxcbn1cXG4nLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR1cmw6IGhlbGxvVXJsKFwiaGVsbG8vOmlkXCIsIFwiL2hlbGxvLzppZFwiKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRuYW1lOiBcIkRlbGV0ZVwiLFxuXHRcdFx0XHRcdFx0cmVxdWVzdDoge1xuXHRcdFx0XHRcdFx0XHRtZXRob2Q6IFwiREVMRVRFXCIsXG5cdFx0XHRcdFx0XHRcdHVybDogaGVsbG9VcmwoXCJoZWxsby86aWRcIiwgXCIvaGVsbG8vOmlkXCIpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fSxcblx0XHRdLFxuXHR9O1xufVxuXG5mdW5jdGlvbiB5YW1sUXVvdGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdGlmICgvWzoje31bXFxdLCYqP3w8Pj0hJUBgXS8udGVzdCh2YWx1ZSkgfHwgdmFsdWUuaW5jbHVkZXMoXCJcXG5cIikgfHwgdmFsdWUgPT09IFwiXCIpIHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqIExvY2FsIFZpZXcgLyBOYXRpdmUgR2l0IGVudmlyb25tZW50IChZQU1MKS4gKi9cbmZ1bmN0aW9uIGJ1aWxkRW52aXJvbm1lbnRZYW1sKG5hbWU6IHN0cmluZywgYXV0aD86IEF1dGgwRW52KTogc3RyaW5nIHtcblx0Y29uc3QgdmFsdWVzOiBBcnJheTx7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+ID0gW1xuXHRcdHsga2V5OiBcImJhc2VVcmxcIiwgdmFsdWU6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwXCIgfSxcblx0XTtcblx0aWYgKGF1dGg/LmF1dGgwRG9tYWluKSB7XG5cdFx0dmFsdWVzLnB1c2goXG5cdFx0XHR7IGtleTogXCJhdXRoMERvbWFpblwiLCB2YWx1ZTogYXV0aC5hdXRoMERvbWFpbiB9LFxuXHRcdFx0eyBrZXk6IFwiYXV0aDBBdWRpZW5jZVwiLCB2YWx1ZTogYXV0aC5hdXRoMEF1ZGllbmNlID8/IFwiXCIgfSxcblx0XHRcdHsga2V5OiBcImF1dGgwQ2xpZW50SWRcIiwgdmFsdWU6IGF1dGguYXV0aDBDbGllbnRJZCA/PyBcIlwiIH0sXG5cdFx0XHR7XG5cdFx0XHRcdGtleTogXCJhdXRoVXJsXCIsXG5cdFx0XHRcdHZhbHVlOiBgaHR0cHM6Ly8ke2F1dGguYXV0aDBEb21haW59L2F1dGhvcml6ZT9hdWRpZW5jZT0ke2F1dGguYXV0aDBBdWRpZW5jZSA/PyBcIlwifWAsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRrZXk6IFwiYWNjZXNzVG9rZW5VcmxcIixcblx0XHRcdFx0dmFsdWU6IGBodHRwczovLyR7YXV0aC5hdXRoMERvbWFpbn0vb2F1dGgvdG9rZW5gLFxuXHRcdFx0fSxcblx0XHRcdHsga2V5OiBcImNhbGxiYWNrVXJsXCIsIHZhbHVlOiBQT1NUTUFOX0NBTExCQUNLU1swXSB9LFxuXHRcdFx0eyBrZXk6IFwic2NvcGVcIiwgdmFsdWU6IFBPU1RNQU5fU0NPUEVTIH0sXG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0IGxpbmVzID0gW2BuYW1lOiAke3lhbWxRdW90ZShuYW1lKX1gLCBcInZhbHVlczpcIl07XG5cdGZvciAoY29uc3QgdiBvZiB2YWx1ZXMpIHtcblx0XHRsaW5lcy5wdXNoKGAgIC0ga2V5OiAke3Yua2V5fWApO1xuXHRcdGxpbmVzLnB1c2goYCAgICB2YWx1ZTogJHt5YW1sUXVvdGUodi52YWx1ZSl9YCk7XG5cdFx0bGluZXMucHVzaChcIiAgICBlbmFibGVkOiB0cnVlXCIpO1xuXHR9XG5cdHJldHVybiBgJHtsaW5lcy5qb2luKFwiXFxuXCIpfVxcbmA7XG59XG5cbi8qKiBMb2NhbCBWaWV3IC8gTmF0aXZlIEdpdCBjb2xsZWN0aW9uICh2MyBtdWx0aS1maWxlIFlBTUwpLiAqL1xuZnVuY3Rpb24gYnVpbGRMb2NhbFZpZXdGaWxlcyhcblx0cHJvamVjdE5hbWU6IHN0cmluZyxcblx0YXV0aD86IEF1dGgwRW52LFxuKTogQXJyYXk8eyBmaWxlUGF0aDogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfT4ge1xuXHRjb25zdCBjb2xsZWN0aW9uRGlyID0gYHBvc3RtYW4vY29sbGVjdGlvbnMvJHtwcm9qZWN0TmFtZX0gV2ViQVBJYDtcblx0Y29uc3QgZmlsZXM6IEFycmF5PHsgZmlsZVBhdGg6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+ID0gW107XG5cblx0Ly8gUG9zdG1hbiBMb2NhbCBWaWV3IHN0b3JlcyBPQXV0aCB1bmRlciBhdXRoW10uY3JlZGVudGlhbHMgKG5vdCB0aGUgdjIuMSBvYXV0aDIgYXJyYXkpLlxuXHQvLyBVc2UgY29uY3JldGUgaHR0cHMgVVJMcyDigJQgZW1wdHkgQXV0aCBVUkwgeWllbGRzIFwiSW52YWxpZCBwcm90b2NvbCBmb3IgYXV0aCBVUkxcIi5cblx0Y29uc3QgYXV0aEJsb2NrID0gYXV0aD8uYXV0aDBEb21haW5cblx0XHQ/IFtcblx0XHRcdFx0XCJhdXRoOlwiLFxuXHRcdFx0XHRgICAtIGlkOiAke3JhbmRvbVVVSUQoKX1gLFxuXHRcdFx0XHRcIiAgICB0eXBlOiBvYXV0aDJcIixcblx0XHRcdFx0XCIgICAgbmFtZTogT0F1dGggMi4wXCIsXG5cdFx0XHRcdFwiICAgIGNyZWRlbnRpYWxzOlwiLFxuXHRcdFx0XHRcIiAgICAgIGFkZFRva2VuVG86IGhlYWRlclwiLFxuXHRcdFx0XHRcIiAgICAgIGdyYW50X3R5cGU6IGF1dGhvcml6YXRpb25fY29kZV93aXRoX3BrY2VcIixcblx0XHRcdFx0YCAgICAgIGF1dGhVcmw6IGh0dHBzOi8vJHthdXRoLmF1dGgwRG9tYWlufS9hdXRob3JpemU/YXVkaWVuY2U9JHthdXRoLmF1dGgwQXVkaWVuY2UgPz8gXCJcIn1gLFxuXHRcdFx0XHRgICAgICAgYWNjZXNzVG9rZW5Vcmw6IGh0dHBzOi8vJHthdXRoLmF1dGgwRG9tYWlufS9vYXV0aC90b2tlbmAsXG5cdFx0XHRcdGAgICAgICBjbGllbnRJZDogJHt5YW1sUXVvdGUoYXV0aC5hdXRoMENsaWVudElkID8/IFwiXCIpfWAsXG5cdFx0XHRcdGAgICAgICBzY29wZTogJHt5YW1sUXVvdGUoUE9TVE1BTl9TQ09QRVMpfWAsXG5cdFx0XHRcdGAgICAgICByZWRpcmVjdF91cmk6ICR7UE9TVE1BTl9DQUxMQkFDS1NbMF19YCxcblx0XHRcdFx0XCIgICAgICB1c2VCcm93c2VyOiB0cnVlXCIsXG5cdFx0XHRcdFwiICAgICAgY2hhbGxlbmdlQWxnb3JpdGhtOiBTMjU2XCIsXG5cdFx0XHRcdC8vIFNQQSBwdWJsaWMgY2xpZW50OiBBdXRoMCB0b2tlbiBlbmRwb2ludCByZWplY3RzIEJhc2ljIGF1dGggKGZlYWNmdCBVbmF1dGhvcml6ZWQpLlxuXHRcdFx0XHRcIiAgICAgIGNsaWVudF9hdXRoZW50aWNhdGlvbjogYm9keVwiLFxuXHRcdFx0XHQnICAgICAgY2xpZW50U2VjcmV0OiBcIlwiJyxcblx0XHRcdFx0YCAgICAgIHRva2VuTmFtZTogJHt5YW1sUXVvdGUoYCR7cHJvamVjdE5hbWV9IEFjY2VzcyBUb2tlbmApfWAsXG5cdFx0XHRcdFwiXCIsXG5cdFx0XHRdLmpvaW4oXCJcXG5cIilcblx0XHQ6IFwiXCI7XG5cblx0ZmlsZXMucHVzaCh7XG5cdFx0ZmlsZVBhdGg6IGAke2NvbGxlY3Rpb25EaXJ9Ly5yZXNvdXJjZXMvZGVmaW5pdGlvbi55YW1sYCxcblx0XHRjb250ZW50OiBbXG5cdFx0XHRcIiRraW5kOiBjb2xsZWN0aW9uXCIsXG5cdFx0XHRgbmFtZTogJHt5YW1sUXVvdGUoYCR7cHJvamVjdE5hbWV9IFdlYkFQSWApfWAsXG5cdFx0XHRcInNjaGVtYVZlcnNpb246ICczLjAnXCIsXG5cdFx0XHRcImRlc2NyaXB0aW9uOiA+LVwiLFxuXHRcdFx0XCIgIE9wZW4gdGhpcyBwcm9qZWN0IHJvb3QgaW4gUG9zdG1hbiBMb2NhbCBWaWV3IChGaWxlcyDihpIgT3BlbiBmb2xkZXIpLlwiLFxuXHRcdFx0XCIgIFNlbGVjdCB0aGUgTG9jYWwgZW52aXJvbm1lbnQsIHRoZW4gQXV0aG9yaXphdGlvbiDihpIgR2V0IE5ldyBBY2Nlc3MgVG9rZW4gKFBLQ0UpLlwiLFxuXHRcdFx0YXV0aEJsb2NrLFxuXHRcdF1cblx0XHRcdC5maWx0ZXIoKGwpID0+IGwgIT09IHVuZGVmaW5lZClcblx0XHRcdC5qb2luKFwiXFxuXCIpXG5cdFx0XHQucmVwbGFjZSgvXFxuKyQvLCBcIlxcblwiKSxcblx0fSk7XG5cblx0ZmlsZXMucHVzaCh7XG5cdFx0ZmlsZVBhdGg6IGAke2NvbGxlY3Rpb25EaXJ9L0hlbGxvLy5yZXNvdXJjZXMvZGVmaW5pdGlvbi55YW1sYCxcblx0XHRjb250ZW50OiBbXCIka2luZDogZm9sZGVyXCIsIFwibmFtZTogSGVsbG9cIiwgXCJvcmRlcjogMTAwMFwiLCBcIlwiXS5qb2luKFwiXFxuXCIpLFxuXHR9KTtcblxuXHRjb25zdCByZXF1ZXN0czogQXJyYXk8e1xuXHRcdGZpbGU6IHN0cmluZztcblx0XHR5YW1sOiBzdHJpbmc7XG5cdH0+ID0gW1xuXHRcdHtcblx0XHRcdGZpbGU6IFwiTGlzdCAoYW5vbnltb3VzKS5yZXF1ZXN0LnlhbWxcIixcblx0XHRcdHlhbWw6IFtcblx0XHRcdFx0XCIka2luZDogaHR0cC1yZXF1ZXN0XCIsXG5cdFx0XHRcdFwibmFtZTogTGlzdCAoYW5vbnltb3VzKVwiLFxuXHRcdFx0XHRcIm1ldGhvZDogR0VUXCIsXG5cdFx0XHRcdCd1cmw6IFwie3tiYXNlVXJsfX0vaGVsbG9cIicsXG5cdFx0XHRcdFwiYXV0aDpcIixcblx0XHRcdFx0XCIgIHR5cGU6IG5vYXV0aFwiLFxuXHRcdFx0XHRcIm9yZGVyOiAxMDAwXCIsXG5cdFx0XHRcdFwiXCIsXG5cdFx0XHRdLmpvaW4oXCJcXG5cIiksXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRmaWxlOiBcIkdldCBieSBpZC5yZXF1ZXN0LnlhbWxcIixcblx0XHRcdHlhbWw6IFtcblx0XHRcdFx0XCIka2luZDogaHR0cC1yZXF1ZXN0XCIsXG5cdFx0XHRcdFwibmFtZTogR2V0IGJ5IGlkXCIsXG5cdFx0XHRcdFwibWV0aG9kOiBHRVRcIixcblx0XHRcdFx0J3VybDogXCJ7e2Jhc2VVcmx9fS9oZWxsby86aWRcIicsXG5cdFx0XHRcdFwib3JkZXI6IDIwMDBcIixcblx0XHRcdFx0XCJcIixcblx0XHRcdF0uam9pbihcIlxcblwiKSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGZpbGU6IFwiQ3JlYXRlLnJlcXVlc3QueWFtbFwiLFxuXHRcdFx0eWFtbDogW1xuXHRcdFx0XHRcIiRraW5kOiBodHRwLXJlcXVlc3RcIixcblx0XHRcdFx0XCJuYW1lOiBDcmVhdGVcIixcblx0XHRcdFx0XCJtZXRob2Q6IFBPU1RcIixcblx0XHRcdFx0J3VybDogXCJ7e2Jhc2VVcmx9fS9oZWxsb1wiJyxcblx0XHRcdFx0XCJoZWFkZXJzOlwiLFxuXHRcdFx0XHRcIiAgQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXCIsXG5cdFx0XHRcdFwiYm9keTpcIixcblx0XHRcdFx0XCIgIHR5cGU6IGpzb25cIixcblx0XHRcdFx0XCIgIGNvbnRlbnQ6IHwtXCIsXG5cdFx0XHRcdFwiICAgIHtcIixcblx0XHRcdFx0JyAgICAgIFwibWVzc2FnZVwiOiBcImhlbGxvXCInLFxuXHRcdFx0XHRcIiAgICB9XCIsXG5cdFx0XHRcdFwib3JkZXI6IDMwMDBcIixcblx0XHRcdFx0XCJcIixcblx0XHRcdF0uam9pbihcIlxcblwiKSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGZpbGU6IFwiVXBkYXRlLnJlcXVlc3QueWFtbFwiLFxuXHRcdFx0eWFtbDogW1xuXHRcdFx0XHRcIiRraW5kOiBodHRwLXJlcXVlc3RcIixcblx0XHRcdFx0XCJuYW1lOiBVcGRhdGVcIixcblx0XHRcdFx0XCJtZXRob2Q6IFBVVFwiLFxuXHRcdFx0XHQndXJsOiBcInt7YmFzZVVybH19L2hlbGxvLzppZFwiJyxcblx0XHRcdFx0XCJoZWFkZXJzOlwiLFxuXHRcdFx0XHRcIiAgQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXCIsXG5cdFx0XHRcdFwiYm9keTpcIixcblx0XHRcdFx0XCIgIHR5cGU6IGpzb25cIixcblx0XHRcdFx0XCIgIGNvbnRlbnQ6IHwtXCIsXG5cdFx0XHRcdFwiICAgIHtcIixcblx0XHRcdFx0JyAgICAgIFwibWVzc2FnZVwiOiBcInVwZGF0ZWRcIicsXG5cdFx0XHRcdFwiICAgIH1cIixcblx0XHRcdFx0XCJvcmRlcjogNDAwMFwiLFxuXHRcdFx0XHRcIlwiLFxuXHRcdFx0XS5qb2luKFwiXFxuXCIpLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0ZmlsZTogXCJEZWxldGUucmVxdWVzdC55YW1sXCIsXG5cdFx0XHR5YW1sOiBbXG5cdFx0XHRcdFwiJGtpbmQ6IGh0dHAtcmVxdWVzdFwiLFxuXHRcdFx0XHRcIm5hbWU6IERlbGV0ZVwiLFxuXHRcdFx0XHRcIm1ldGhvZDogREVMRVRFXCIsXG5cdFx0XHRcdCd1cmw6IFwie3tiYXNlVXJsfX0vaGVsbG8vOmlkXCInLFxuXHRcdFx0XHRcIm9yZGVyOiA1MDAwXCIsXG5cdFx0XHRcdFwiXCIsXG5cdFx0XHRdLmpvaW4oXCJcXG5cIiksXG5cdFx0fSxcblx0XTtcblxuXHRmb3IgKGNvbnN0IHIgb2YgcmVxdWVzdHMpIHtcblx0XHRmaWxlcy5wdXNoKHtcblx0XHRcdGZpbGVQYXRoOiBgJHtjb2xsZWN0aW9uRGlyfS9IZWxsby8ke3IuZmlsZX1gLFxuXHRcdFx0Y29udGVudDogci55YW1sLFxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIGZpbGVzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzY2FmZm9sZCh3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLCBvcHRpb25zOiBQb3N0bWFuT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuXHRpZiAob3B0aW9ucy5wb3N0bWFuUHJvdmlkZXIgPT09IFwibm9uZVwiIHx8IG9wdGlvbnMucG9zdG1hblByb3ZpZGVyID09IG51bGwpIHJldHVybjtcblxuXHRjb25zdCBhdXRoQ29uZmlnTW9kZWwgPSB3b3Jrc3BhY2UuZ2V0TW9kZWw8QXV0aENvbmZpZ01vZGVsPihXRUxMX0tOT1dOX0ZJTEVTLkFVVEhfQ09ORklHKTtcblx0Y29uc3QgYXV0aENmZyA9IGF1dGhDb25maWdNb2RlbD8uY29uZmlnO1xuXG5cdGxldCBzcGFDbGllbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdGlmIChhdXRoQ2ZnPy5pc3N1ZXJCYXNlVXJsKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFwcCA9IGF1dGgwQ2xpLmNyZWF0ZVNwYUFwcChgJHt3b3Jrc3BhY2UubmFtZX0gUG9zdG1hbmAsIFsuLi5QT1NUTUFOX0NBTExCQUNLU10pO1xuXHRcdFx0c3BhQ2xpZW50SWQgPSBhcHAuY2xpZW50X2lkO1xuXHRcdFx0Y29uc29sZS5sb2coXCIgIOKckyBBdXRoMCBTUEEgYXBwIGNyZWF0ZWQgZm9yIFBvc3RtYW4gUEtDRVwiKTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF1dGgwQ2xpLmVuYWJsZUNvbm5lY3Rpb25Gb3JDbGllbnQoYXV0aDBDbGkuREJfQ09OTkVDVElPTl9OQU1FLCBzcGFDbGllbnRJZCk7XG5cdFx0XHRcdGNvbnNvbGUubG9nKGAgIOKckyBFbmFibGVkICR7YXV0aDBDbGkuREJfQ09OTkVDVElPTl9OQU1FfSBvbiBQb3N0bWFuIFNQQWApO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcdFx0YCAg4pyXIEZhaWxlZCB0byBlbmFibGUgREIgY29ubmVjdGlvbiBvbiBTUEE6ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycn1gLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2gge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0XCIgIOKclyBGYWlsZWQgdG8gY3JlYXRlIEF1dGgwIFNQQSBhcHAg4oCUIHNldCBhdXRoMENsaWVudElkIGluIHRoZSBlbnZpcm9ubWVudC5cIixcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgYXV0aDBFbnY6IEF1dGgwRW52IHwgdW5kZWZpbmVkID0gYXV0aENmZz8uaXNzdWVyQmFzZVVybFxuXHRcdD8ge1xuXHRcdFx0XHRhdXRoMERvbWFpbjogYXV0aENmZy5pc3N1ZXJCYXNlVXJsLnJlcGxhY2UoL15odHRwcz86XFwvXFwvLywgXCJcIiksXG5cdFx0XHRcdGF1dGgwQXVkaWVuY2U6IGF1dGhDZmcuYXVkaWVuY2UsXG5cdFx0XHRcdGF1dGgwQ2xpZW50SWQ6IHNwYUNsaWVudElkLFxuXHRcdFx0fVxuXHRcdDogdW5kZWZpbmVkO1xuXG5cdGNvbnN0IHByb2plY3ROYW1lID0gd29ya3NwYWNlLm5hbWU7XG5cdGNvbnN0IGVudk5hbWUgPSBgJHtwcm9qZWN0TmFtZX0gTG9jYWxgO1xuXHRjb25zdCBsb2NhbEZpbGVzID0gYnVpbGRMb2NhbFZpZXdGaWxlcyhwcm9qZWN0TmFtZSwgYXV0aDBFbnYpO1xuXHRjb25zdCBlbnZZYW1sID0gYnVpbGRFbnZpcm9ubWVudFlhbWwoZW52TmFtZSwgYXV0aDBFbnYpO1xuXG5cdHdvcmtzcGFjZS5hZGRGaWxlKHtcblx0XHRmaWxlczogKCkgPT4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCIucG9zdG1hbi9yZXNvdXJjZXMueWFtbFwiLFxuXHRcdFx0XHRjb250ZW50OiBbXG5cdFx0XHRcdFx0XCIjIE9wZW4gdGhpcyBwcm9qZWN0IHJvb3QgaW4gUG9zdG1hbiAoRmlsZXMg4oaSIE9wZW4gZm9sZGVyKSwgbm90IHRoZSBwb3N0bWFuLyBzdWJmb2xkZXIuXCIsXG5cdFx0XHRcdFx0XCIjIFBvc3RtYW4gZmlsbHMgd29ya3NwYWNlLmlkIHdoZW4geW91IGNvbm5lY3QgTG9jYWwgVmlldy5cIixcblx0XHRcdFx0XHRcIiNcIixcblx0XHRcdFx0XHRcIiMgQWxsIHJlc291cmNlcyB1bmRlciBwb3N0bWFuLyBhcmUgcmVnaXN0ZXJlZCBhdXRvbWF0aWNhbGx5LlwiLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdF0uam9pbihcIlxcblwiKSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBgcG9zdG1hbi9lbnZpcm9ubWVudHMvJHtwcm9qZWN0TmFtZX0tTG9jYWwuZW52aXJvbm1lbnQueWFtbGAsXG5cdFx0XHRcdGNvbnRlbnQ6IGVudllhbWwsXG5cdFx0XHR9LFxuXHRcdFx0Li4ubG9jYWxGaWxlcyxcblx0XHRdLFxuXHR9KTtcblxuXHRpZiAob3B0aW9ucy5wb3N0bWFuUHJvdmlkZXIgPT09IFwiYXBpXCIgJiYgb3B0aW9ucy5hcGlLZXkpIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uID0gYnVpbGRDb2xsZWN0aW9uSnNvbihwcm9qZWN0TmFtZSwgYXV0aDBFbnYpO1xuXHRcdGNvbnN0IGhlYWRlcnMgPSB7IFwiWC1BcGktS2V5XCI6IG9wdGlvbnMuYXBpS2V5LCBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9O1xuXG5cdFx0Y29uc3QgY29sUmVzID0gYXdhaXQgZmV0Y2goXG5cdFx0XHRgaHR0cHM6Ly9hcGkuZ2V0cG9zdG1hbi5jb20vY29sbGVjdGlvbnM/d29ya3NwYWNlPSR7b3B0aW9ucy53b3Jrc3BhY2VJZH1gLFxuXHRcdFx0e1xuXHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRoZWFkZXJzLFxuXHRcdFx0XHRib2R5OiBKU09OLnN0cmluZ2lmeSh7IGNvbGxlY3Rpb24gfSksXG5cdFx0XHR9LFxuXHRcdCk7XG5cdFx0aWYgKGNvbFJlcy5vaykge1xuXHRcdFx0Y29uc29sZS5sb2coXCIgIOKckyBQb3N0bWFuIGNvbGxlY3Rpb24gdXBsb2FkZWRcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCIgIOKclyBGYWlsZWQgdG8gdXBsb2FkIFBvc3RtYW4gY29sbGVjdGlvblwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBlbnZWYWx1ZXMgPSBbXG5cdFx0XHR7IGtleTogXCJiYXNlVXJsXCIsIHZhbHVlOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMFwiLCBlbmFibGVkOiB0cnVlIH0sXG5cdFx0XHQuLi4oYXV0aDBFbnY/LmF1dGgwRG9tYWluXG5cdFx0XHRcdD8gW1xuXHRcdFx0XHRcdFx0eyBrZXk6IFwiYXV0aDBEb21haW5cIiwgdmFsdWU6IGF1dGgwRW52LmF1dGgwRG9tYWluLCBlbmFibGVkOiB0cnVlIH0sXG5cdFx0XHRcdFx0XHR7IGtleTogXCJhdXRoMEF1ZGllbmNlXCIsIHZhbHVlOiBhdXRoMEVudi5hdXRoMEF1ZGllbmNlID8/IFwiXCIsIGVuYWJsZWQ6IHRydWUgfSxcblx0XHRcdFx0XHRcdHsga2V5OiBcImF1dGgwQ2xpZW50SWRcIiwgdmFsdWU6IGF1dGgwRW52LmF1dGgwQ2xpZW50SWQgPz8gXCJcIiwgZW5hYmxlZDogdHJ1ZSB9LFxuXHRcdFx0XHRcdF1cblx0XHRcdFx0OiBbXSksXG5cdFx0XTtcblx0XHRjb25zdCBlbnZSZXMgPSBhd2FpdCBmZXRjaChcblx0XHRcdGBodHRwczovL2FwaS5nZXRwb3N0bWFuLmNvbS9lbnZpcm9ubWVudHM/d29ya3NwYWNlPSR7b3B0aW9ucy53b3Jrc3BhY2VJZH1gLFxuXHRcdFx0e1xuXHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRoZWFkZXJzLFxuXHRcdFx0XHRib2R5OiBKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0ZW52aXJvbm1lbnQ6IHsgbmFtZTogZW52TmFtZSwgdmFsdWVzOiBlbnZWYWx1ZXMgfSxcblx0XHRcdFx0fSksXG5cdFx0XHR9LFxuXHRcdCk7XG5cdFx0aWYgKGVudlJlcy5vaykge1xuXHRcdFx0Y29uc29sZS5sb2coXCIgIOKckyBQb3N0bWFuIGVudmlyb25tZW50IHVwbG9hZGVkXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiICDinJcgRmFpbGVkIHRvIHVwbG9hZCBQb3N0bWFuIGVudmlyb25tZW50XCIpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgY29uc3QgUG9zdG1hbkZlYXR1cmU6IEZlYXR1cmU8UG9zdG1hbk9wdGlvbnM+ID0geyBnZXRPcHRpb25zLCBzY2FmZm9sZCB9O1xuZXhwb3J0IHsgUE9TVE1BTl9DQUxMQkFDS1MsIFBPU1RNQU5fU0NPUEVTIH07XG4iXSwibmFtZXMiOlsicmFuZG9tVVVJRCIsInBpY2siLCJXRUxMX0tOT1dOX0ZJTEVTIiwiYXV0aDBDbGkiLCJQT1NUTUFOX0NBTExCQUNLUyIsIlBPU1RNQU5fU0NPUEVTIiwiam9pbiIsImdldE9wdGlvbnMiLCJfd29ya3NwYWNlIiwiY2xpT3B0aW9ucyIsInBvc3RtYW5Qcm92aWRlciIsImNob2ljZXMiLCJsYWJlbCIsImRlc2NyaXB0aW9uIiwic2VsZWN0ZWQiLCJjIiwicHJvdmlkZXIiLCJhcGlLZXkiLCJwcm9jZXNzIiwiZW52IiwiUE9TVE1BTl9BUElfS0VZIiwidGhlbiIsIm0iLCJhc2siLCJoZWFkZXJzIiwid3NSZXMiLCJmZXRjaCIsIm9rIiwiY29uc29sZSIsImVycm9yIiwid29ya3NwYWNlcyIsImpzb24iLCJ3c0Nob2ljZXMiLCJpZCIsIm1hcCIsInciLCJuYW1lIiwidHlwZSIsIndzUGlja2VkIiwid29ya3NwYWNlSWQiLCJ3c05hbWUiLCJjcmVhdGVSZXMiLCJtZXRob2QiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsIndvcmtzcGFjZSIsIndzIiwibG9nIiwiYnVpbGRDb2xsZWN0aW9uSnNvbiIsInByb2plY3ROYW1lIiwiYXV0aCIsImF1dGhPYmoiLCJhdXRoMERvbWFpbiIsIm9hdXRoMiIsImtleSIsInZhbHVlIiwidW5kZWZpbmVkIiwiaGVsbG9VcmwiLCJwYXRoIiwicmF3IiwiaG9zdCIsInNwbGl0IiwiZmlsdGVyIiwiQm9vbGVhbiIsImluZm8iLCJfcG9zdG1hbl9pZCIsInNjaGVtYSIsIml0ZW0iLCJyZXF1ZXN0IiwidXJsIiwiaGVhZGVyIiwibW9kZSIsInlhbWxRdW90ZSIsInRlc3QiLCJpbmNsdWRlcyIsImJ1aWxkRW52aXJvbm1lbnRZYW1sIiwidmFsdWVzIiwicHVzaCIsImF1dGgwQXVkaWVuY2UiLCJhdXRoMENsaWVudElkIiwibGluZXMiLCJ2IiwiYnVpbGRMb2NhbFZpZXdGaWxlcyIsImNvbGxlY3Rpb25EaXIiLCJmaWxlcyIsImF1dGhCbG9jayIsImZpbGVQYXRoIiwiY29udGVudCIsImwiLCJyZXBsYWNlIiwicmVxdWVzdHMiLCJmaWxlIiwieWFtbCIsInIiLCJzY2FmZm9sZCIsIm9wdGlvbnMiLCJhdXRoQ29uZmlnTW9kZWwiLCJnZXRNb2RlbCIsIkFVVEhfQ09ORklHIiwiYXV0aENmZyIsImNvbmZpZyIsInNwYUNsaWVudElkIiwiaXNzdWVyQmFzZVVybCIsImFwcCIsImNyZWF0ZVNwYUFwcCIsImNsaWVudF9pZCIsImVuYWJsZUNvbm5lY3Rpb25Gb3JDbGllbnQiLCJEQl9DT05ORUNUSU9OX05BTUUiLCJlcnIiLCJFcnJvciIsIm1lc3NhZ2UiLCJhdXRoMEVudiIsImF1ZGllbmNlIiwiZW52TmFtZSIsImxvY2FsRmlsZXMiLCJlbnZZYW1sIiwiYWRkRmlsZSIsImNvbGxlY3Rpb24iLCJjb2xSZXMiLCJlbnZWYWx1ZXMiLCJlbmFibGVkIiwiZW52UmVzIiwiZW52aXJvbm1lbnQiLCJQb3N0bWFuRmVhdHVyZSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsVUFBVSxRQUFRLGNBQWM7QUFDekMsU0FBU0MsSUFBSSxRQUFRLHlCQUF5QjtBQUM5QyxTQUFTQyxnQkFBZ0IsUUFBUSx3QkFBd0I7QUFJekQsWUFBWUMsY0FBYyxpQkFBaUI7QUFFM0MscUVBQXFFLEdBQ3JFLE1BQU1DLG9CQUFvQjtJQUN6QjtJQUNBO0NBQ0E7QUFFRCw4RUFBOEUsR0FDOUUsTUFBTUMsaUJBQWlCO0lBQ3RCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0EsQ0FBQ0MsSUFBSSxDQUFDO0FBUVAsZUFBZUMsV0FDZEMsVUFBNkIsRUFDN0JDLFVBQW1DO0lBRW5DLElBQUlBLFdBQVdDLGVBQWUsSUFBSSxNQUFNLE9BQU8sQ0FBQztJQUVoRCxNQUFNQyxVQUFVO1FBQ2Y7WUFBRUMsT0FBTztZQUFpQkMsYUFBYTtRQUFPO1FBQzlDO1lBQ0NELE9BQU87WUFDUEMsYUFBYTtRQUNkO1FBQ0E7WUFDQ0QsT0FBTztZQUNQQyxhQUFhO1FBQ2Q7S0FDQTtJQUNELE1BQU1DLFdBQVcsTUFBTWIsS0FDdEIsaUJBQ0FVLFNBQ0EsQ0FBQ0ksSUFBTSxHQUFHQSxFQUFFSCxLQUFLLENBQUMsR0FBRyxFQUFFRyxFQUFFRixXQUFXLEVBQUU7SUFFdkMsTUFBTUcsV0FBV0YsVUFBVUYsU0FBUztJQUVwQyxJQUFJSSxhQUFhLFFBQVEsT0FBTztRQUFFTixpQkFB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
537
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL3Bvc3RtYW4uZmVhdHVyZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyBwaWNrIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9wcm9tcHQuanNcIjtcbmltcG9ydCB7IFdFTExfS05PV05fRklMRVMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbnN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtzcGFjZVNjYWZmb2xkIH0gZnJvbSBcIi4uLy4uL21vZGVscy9wcm9qZWN0Lm1vZGVsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEZlYXR1cmUgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2NhZmZvbGQuc2VydmljZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBdXRoQ29uZmlnTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2F1dGgtY29uZmlnLm1vZGVsLmpzXCI7XG5pbXBvcnQgKiBhcyBhdXRoMENsaSBmcm9tIFwiLi9hdXRoMC1jbGkuanNcIjtcblxuLyoqIFBvc3RtYW4gT0F1dGggY2FsbGJhY2sgVVJMcyAocG9wdXAgKyBcIkF1dGhvcml6ZSB1c2luZyBicm93c2VyXCIpLiAqL1xuY29uc3QgUE9TVE1BTl9DQUxMQkFDS1MgPSBbXG5cdFwiaHR0cHM6Ly9vYXV0aC5wc3Rtbi5pby92MS9jYWxsYmFja1wiLFxuXHRcImh0dHBzOi8vb2F1dGgucHN0bW4uaW8vdjEvYnJvd3Nlci1jYWxsYmFja1wiLFxuXSBhcyBjb25zdDtcblxuLyoqIFNjb3BlcyByZXF1ZXN0ZWQgZm9yIEF1dGgwIGFjY2VzcyB0b2tlbnMgKE9JREMgKyBIZWxsbyBDQVNMIHBlcm1pc3Npb25zKS4gKi9cbmNvbnN0IFBPU1RNQU5fU0NPUEVTID0gW1xuXHRcIm9wZW5pZFwiLFxuXHRcInByb2ZpbGVcIixcblx0XCJlbWFpbFwiLFxuXHRcInJlYWQ6SGVsbG9cIixcblx0XCJjcmVhdGU6SGVsbG9cIixcblx0XCJ1cGRhdGU6SGVsbG9cIixcblx0XCJkZWxldGU6SGVsbG9cIixcbl0uam9pbihcIiBcIik7XG5cbmV4cG9ydCB0eXBlIFBvc3RtYW5PcHRpb25zID0ge1xuXHRwb3N0bWFuUHJvdmlkZXI/OiBcImFwaVwiIHwgXCJsb2NhbFwiIHwgXCJub25lXCI7XG5cdGFwaUtleT86IHN0cmluZztcblx0d29ya3NwYWNlSWQ/OiBzdHJpbmc7XG59O1xuXG5hc3luYyBmdW5jdGlvbiBnZXRPcHRpb25zKFxuXHRfd29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCxcblx0Y2xpT3B0aW9uczogUGFydGlhbDxQb3N0bWFuT3B0aW9ucz4sXG4pOiBQcm9taXNlPFBhcnRpYWw8UG9zdG1hbk9wdGlvbnM+PiB7XG5cdGlmIChjbGlPcHRpb25zLnBvc3RtYW5Qcm92aWRlciAhPSBudWxsKSByZXR1cm4ge307XG5cblx0Y29uc3QgY2hvaWNlcyA9IFtcblx0XHR7IGxhYmVsOiBcIm5vbmVcIiBhcyBjb25zdCwgZGVzY3JpcHRpb246IFwic2tpcFwiIH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IFwibG9jYWxcIiBhcyBjb25zdCxcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkxvY2FsIFZpZXcgLyBOYXRpdmUgR2l0IGZpbGVzIChubyBBUEkga2V5KVwiLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IFwiYXBpXCIgYXMgY29uc3QsXG5cdFx0XHRkZXNjcmlwdGlvbjogXCJhbHNvIHVwbG9hZCB0byBQb3N0bWFuLmNvbSAobmVlZHMgQVBJIGtleSlcIixcblx0XHR9LFxuXHRdO1xuXHRjb25zdCBzZWxlY3RlZCA9IGF3YWl0IHBpY2soXG5cdFx0XCJcXG4gIFBvc3RtYW46IFwiLFxuXHRcdGNob2ljZXMsXG5cdFx0KGMpID0+IGAke2MubGFiZWx9IOKAlCAke2MuZGVzY3JpcHRpb259YCxcblx0KTtcblx0Y29uc3QgcHJvdmlkZXIgPSBzZWxlY3RlZD8ubGFiZWwgPz8gXCJub25lXCI7XG5cblx0aWYgKHByb3ZpZGVyID09PSBcIm5vbmVcIikgcmV0dXJuIHsgcG9zdG1hblByb3ZpZGVyOiBcIm5vbmVcIiB9O1xuXHRpZiAocHJvdmlkZXIgPT09IFwibG9jYWxcIikgcmV0dXJuIHsgcG9zdG1hblByb3ZpZGVyOiBcImxvY2FsXCIgfTtcblxuXHRjb25zdCBhcGlLZXkgPVxuXHRcdHByb2Nlc3MuZW52LlBPU1RNQU5fQVBJX0tFWSA/P1xuXHRcdChhd2FpdCBpbXBvcnQoXCIuLi8uLi9kb21haW4vcHJvbXB0LmpzXCIpLnRoZW4oKG0pID0+XG5cdFx0XHRtLmFzayhcIlxcbiAgUG9zdG1hbiBBUEkga2V5IChhcHAuZ2V0cG9zdG1hbi5jb20vc2V0dGluZ3MvbWUvYXBpLWtleXMpOiBcIiksXG5cdFx0KSk7XG5cblx0Y29uc3QgaGVhZGVycyA9IHsgXCJYLUFwaS1LZXlcIjogYXBpS2V5LCBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9O1xuXHRjb25zdCB3c1JlcyA9IGF3YWl0IGZldGNoKFwiaHR0cHM6Ly9hcGkuZ2V0cG9zdG1hbi5jb20vd29ya3NwYWNlc1wiLCB7IGhlYWRlcnMgfSk7XG5cblx0aWYgKCF3c1Jlcy5vaykge1xuXHRcdGNvbnNvbGUuZXJyb3IoXCJcXG4gIFBvc3RtYW4gQVBJIGtleSBpbnZhbGlkIOKAlCBmYWxsaW5nIGJhY2sgdG8gbG9jYWwgZmlsZXMuXCIpO1xuXHRcdHJldHVybiB7IHBvc3RtYW5Qcm92aWRlcjogXCJsb2NhbFwiIH07XG5cdH1cblxuXHRjb25zdCB7IHdvcmtzcGFjZXMgfSA9IChhd2FpdCB3c1Jlcy5qc29uKCkpIGFzIHtcblx0XHR3b3Jrc3BhY2VzOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nIH0+O1xuXHR9O1xuXG5cdHR5cGUgV3NDaG9pY2UgPSB7IGxhYmVsOiBzdHJpbmc7IGlkOiBzdHJpbmcgfCBudWxsIH07XG5cdGNvbnN0IHdzQ2hvaWNlczogV3NDaG9pY2VbXSA9IFtcblx0XHR7IGxhYmVsOiBcIjxuZXcgd29ya3NwYWNlPlwiLCBpZDogbnVsbCB9LFxuXHRcdC4uLndvcmtzcGFjZXMubWFwKCh3KSA9PiAoeyBsYWJlbDogYCR7dy5uYW1lfSAoJHt3LnR5cGV9KWAsIGlkOiB3LmlkIH0pKSxcblx0XTtcblxuXHRjb25zdCB3c1BpY2tlZCA9IGF3YWl0IHBpY2soXCJcXG4gIFBvc3RtYW4gd29ya3NwYWNlOiBcIiwgd3NDaG9pY2VzLCAoYykgPT4gYy5sYWJlbCk7XG5cblx0bGV0IHdvcmtzcGFjZUlkOiBzdHJpbmc7XG5cdGlmICghd3NQaWNrZWQgfHwgd3NQaWNrZWQuaWQgPT09IG51bGwpIHtcblx0XHRjb25zdCB7IGFzayB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vLi4vZG9tYWluL3Byb21wdC5qc1wiKTtcblx0XHRjb25zdCB3c05hbWUgPSBhd2FpdCBhc2soYCAgV29ya3NwYWNlIG5hbWU6IGApO1xuXHRcdGNvbnN0IGNyZWF0ZVJlcyA9IGF3YWl0IGZldGNoKFwiaHR0cHM6Ly9hcGkuZ2V0cG9zdG1hbi5jb20vd29ya3NwYWNlc1wiLCB7XG5cdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0aGVhZGVycyxcblx0XHRcdGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgd29ya3NwYWNlOiB7IG5hbWU6IHdzTmFtZSwgdHlwZTogXCJwZXJzb25hbFwiIH0gfSksXG5cdFx0fSk7XG5cdFx0Y29uc3QgeyB3b3Jrc3BhY2U6IHdzIH0gPSAoYXdhaXQgY3JlYXRlUmVzLmpzb24oKSkgYXMgeyB3b3Jrc3BhY2U6IHsgaWQ6IHN0cmluZyB9IH07XG5cdFx0d29ya3NwYWNlSWQgPSB3cy5pZDtcblx0XHRjb25zb2xlLmxvZyhgICDinJMgV29ya3NwYWNlIGNyZWF0ZWQ6ICR7d3NOYW1lfWApO1xuXHR9IGVsc2Uge1xuXHRcdHdvcmtzcGFjZUlkID0gd3NQaWNrZWQuaWQ7XG5cdH1cblxuXHRyZXR1cm4geyBwb3N0bWFuUHJvdmlkZXI6IFwiYXBpXCIsIGFwaUtleSwgd29ya3NwYWNlSWQgfTtcbn1cblxudHlwZSBBdXRoMEVudiA9IHtcblx0YXV0aDBEb21haW4/OiBzdHJpbmc7XG5cdGF1dGgwQXVkaWVuY2U/OiBzdHJpbmc7XG5cdGF1dGgwQ2xpZW50SWQ/OiBzdHJpbmc7XG59O1xuXG4vKiogdjIuMSBKU09OIOKAlCB1c2VkIGZvciBQb3N0bWFuLmNvbSBBUEkgdXBsb2FkIG9ubHkuICovXG5mdW5jdGlvbiBidWlsZENvbGxlY3Rpb25Kc29uKHByb2plY3ROYW1lOiBzdHJpbmcsIGF1dGg/OiBBdXRoMEVudik6IHVua25vd24ge1xuXHRjb25zdCBhdXRoT2JqID0gYXV0aD8uYXV0aDBEb21haW5cblx0XHQ/IHtcblx0XHRcdFx0dHlwZTogXCJvYXV0aDJcIixcblx0XHRcdFx0b2F1dGgyOiBbXG5cdFx0XHRcdFx0eyBrZXk6IFwiZ3JhbnRfdHlwZVwiLCB2YWx1ZTogXCJhdXRob3JpemF0aW9uX2NvZGVfd2l0aF9wa2NlXCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRrZXk6IFwiYXV0aFVybFwiLFxuXHRcdFx0XHRcdFx0dmFsdWU6IFwiaHR0cHM6Ly97e2F1dGgwRG9tYWlufX0vYXV0aG9yaXplP2F1ZGllbmNlPXt7YXV0aDBBdWRpZW5jZX19XCIsXG5cdFx0XHRcdFx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0a2V5OiBcImFjY2Vzc1Rva2VuVXJsXCIsXG5cdFx0XHRcdFx0XHR2YWx1ZTogXCJodHRwczovL3t7YXV0aDBEb21haW59fS9vYXV0aC90b2tlblwiLFxuXHRcdFx0XHRcdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHsga2V5OiBcImNsaWVudElkXCIsIHZhbHVlOiBcInt7YXV0aDBDbGllbnRJZH19XCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHRcdFx0XHR7IGtleTogXCJzY29wZVwiLCB2YWx1ZTogUE9TVE1BTl9TQ09QRVMsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHRcdFx0XHR7IGtleTogXCJyZWRpcmVjdF91cmlcIiwgdmFsdWU6IFBPU1RNQU5fQ0FMTEJBQ0tTWzBdLCB0eXBlOiBcInN0cmluZ1wiIH0sXG5cdFx0XHRcdFx0eyBrZXk6IFwidXNlQnJvd3NlclwiLCB2YWx1ZTogXCJ0cnVlXCIsIHR5cGU6IFwiYm9vbGVhblwiIH0sXG5cdFx0XHRcdFx0eyBrZXk6IFwiYWRkVG9rZW5Ub1wiLCB2YWx1ZTogXCJoZWFkZXJcIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XHRcdHsga2V5OiBcImNoYWxsZW5nZUFsZ29yaXRobVwiLCB2YWx1ZTogXCJTMjU2XCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHRcdFx0XHR7IGtleTogXCJjbGllbnRfYXV0aGVudGljYXRpb25cIiwgdmFsdWU6IFwiYm9keVwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG5cdFx0XHRcdFx0eyBrZXk6IFwiY2xpZW50U2VjcmV0XCIsIHZhbHVlOiBcIlwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG5cdFx0XHRcdFx0eyBrZXk6IFwidG9rZW5OYW1lXCIsIHZhbHVlOiBgJHtwcm9qZWN0TmFtZX0gQWNjZXNzIFRva2VuYCwgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fVxuXHRcdDogdW5kZWZpbmVkO1xuXG5cdGNvbnN0IGhlbGxvVXJsID0gKHBhdGg6IHN0cmluZywgcmF3OiBzdHJpbmcpID0+ICh7XG5cdFx0cmF3OiBge3tiYXNlVXJsfX0ke3Jhd31gLFxuXHRcdGhvc3Q6IFtcInt7YmFzZVVybH19XCJdLFxuXHRcdHBhdGg6IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKSxcblx0fSk7XG5cblx0cmV0dXJuIHtcblx0XHRpbmZvOiB7XG5cdFx0XHRfcG9zdG1hbl9pZDogcmFuZG9tVVVJRCgpLFxuXHRcdFx0bmFtZTogYCR7cHJvamVjdE5hbWV9IFdlYkFQSWAsXG5cdFx0XHRzY2hlbWE6IFwiaHR0cHM6Ly9zY2hlbWEuZ2V0cG9zdG1hbi5jb20vanNvbi9jb2xsZWN0aW9uL3YyLjEuMC9jb2xsZWN0aW9uLmpzb25cIixcblx0XHRcdGRlc2NyaXB0aW9uOlxuXHRcdFx0XHRcIk9wZW4gdGhlIHByb2plY3Qgcm9vdCBpbiBQb3N0bWFuIExvY2FsIFZpZXcgKG5vdCB0aGUgcG9zdG1hbi8gZm9sZGVyKS4gXCIgK1xuXHRcdFx0XHRcIlNlbGVjdCB0aGUgTG9jYWwgZW52aXJvbm1lbnQsIHRoZW4gQXV0aG9yaXphdGlvbiDihpIgR2V0IE5ldyBBY2Nlc3MgVG9rZW4gKFBLQ0UpLlwiLFxuXHRcdH0sXG5cdFx0Li4uKGF1dGhPYmogPyB7IGF1dGg6IGF1dGhPYmogfSA6IHt9KSxcblx0XHRpdGVtOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiSGVsbG9cIixcblx0XHRcdFx0aXRlbTogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiTGlzdCAoYW5vbnltb3VzKVwiLFxuXHRcdFx0XHRcdFx0cmVxdWVzdDoge1xuXHRcdFx0XHRcdFx0XHRhdXRoOiB7IHR5cGU6IFwibm9hdXRoXCIgfSxcblx0XHRcdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdFx0XHR1cmw6IGhlbGxvVXJsKFwiaGVsbG9cIiwgXCIvaGVsbG9cIiksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bmFtZTogXCJHZXQgYnkgaWRcIixcblx0XHRcdFx0XHRcdHJlcXVlc3Q6IHtcblx0XHRcdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdFx0XHR1cmw6IGhlbGxvVXJsKFwiaGVsbG8vOmlkXCIsIFwiL2hlbGxvLzppZFwiKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRuYW1lOiBcIkNyZWF0ZVwiLFxuXHRcdFx0XHRcdFx0cmVxdWVzdDoge1xuXHRcdFx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRcdFx0XHRoZWFkZXI6IFt7IGtleTogXCJDb250ZW50LVR5cGVcIiwgdmFsdWU6IFwiYXBwbGljYXRpb24vanNvblwiIH1dLFxuXHRcdFx0XHRcdFx0XHRib2R5OiB7XG5cdFx0XHRcdFx0XHRcdFx0bW9kZTogXCJyYXdcIixcblx0XHRcdFx0XHRcdFx0XHRyYXc6ICd7XFxuICBcIm1lc3NhZ2VcIjogXCJoZWxsb1wiXFxufVxcbicsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHVybDogaGVsbG9VcmwoXCJoZWxsb1wiLCBcIi9oZWxsb1wiKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRuYW1lOiBcIlVwZGF0ZVwiLFxuXHRcdFx0XHRcdFx0cmVxdWVzdDoge1xuXHRcdFx0XHRcdFx0XHRtZXRob2Q6IFwiUFVUXCIsXG5cdFx0XHRcdFx0XHRcdGhlYWRlcjogW3sga2V5OiBcIkNvbnRlbnQtVHlwZVwiLCB2YWx1ZTogXCJhcHBsaWNhdGlvbi9qc29uXCIgfV0sXG5cdFx0XHRcdFx0XHRcdGJvZHk6IHtcblx0XHRcdFx0XHRcdFx0XHRtb2RlOiBcInJhd1wiLFxuXHRcdFx0XHRcdFx0XHRcdHJhdzogJ3tcXG4gIFwibWVzc2FnZVwiOiBcInVwZGF0ZWRcIlxcbn1cXG4nLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR1cmw6IGhlbGxvVXJsKFwiaGVsbG8vOmlkXCIsIFwiL2hlbGxvLzppZFwiKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRuYW1lOiBcIkRlbGV0ZVwiLFxuXHRcdFx0XHRcdFx0cmVxdWVzdDoge1xuXHRcdFx0XHRcdFx0XHRtZXRob2Q6IFwiREVMRVRFXCIsXG5cdFx0XHRcdFx0XHRcdHVybDogaGVsbG9VcmwoXCJoZWxsby86aWRcIiwgXCIvaGVsbG8vOmlkXCIpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fSxcblx0XHRdLFxuXHR9O1xufVxuXG5mdW5jdGlvbiB5YW1sUXVvdGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdGlmICgvWzoje31bXFxdLCYqP3w8Pj0hJUBgXS8udGVzdCh2YWx1ZSkgfHwgdmFsdWUuaW5jbHVkZXMoXCJcXG5cIikgfHwgdmFsdWUgPT09IFwiXCIpIHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqIExvY2FsIFZpZXcgLyBOYXRpdmUgR2l0IGVudmlyb25tZW50IChZQU1MKS4gKi9cbmZ1bmN0aW9uIGJ1aWxkRW52aXJvbm1lbnRZYW1sKG5hbWU6IHN0cmluZywgYXV0aD86IEF1dGgwRW52KTogc3RyaW5nIHtcblx0Y29uc3QgdmFsdWVzOiBBcnJheTx7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+ID0gW1xuXHRcdHsga2V5OiBcImJhc2VVcmxcIiwgdmFsdWU6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwXCIgfSxcblx0XTtcblx0aWYgKGF1dGg/LmF1dGgwRG9tYWluKSB7XG5cdFx0dmFsdWVzLnB1c2goXG5cdFx0XHR7IGtleTogXCJhdXRoMERvbWFpblwiLCB2YWx1ZTogYXV0aC5hdXRoMERvbWFpbiB9LFxuXHRcdFx0eyBrZXk6IFwiYXV0aDBBdWRpZW5jZVwiLCB2YWx1ZTogYXV0aC5hdXRoMEF1ZGllbmNlID8/IFwiXCIgfSxcblx0XHRcdHsga2V5OiBcImF1dGgwQ2xpZW50SWRcIiwgdmFsdWU6IGF1dGguYXV0aDBDbGllbnRJZCA/PyBcIlwiIH0sXG5cdFx0XHR7XG5cdFx0XHRcdGtleTogXCJhdXRoVXJsXCIsXG5cdFx0XHRcdHZhbHVlOiBgaHR0cHM6Ly8ke2F1dGguYXV0aDBEb21haW59L2F1dGhvcml6ZT9hdWRpZW5jZT0ke2F1dGguYXV0aDBBdWRpZW5jZSA/PyBcIlwifWAsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRrZXk6IFwiYWNjZXNzVG9rZW5VcmxcIixcblx0XHRcdFx0dmFsdWU6IGBodHRwczovLyR7YXV0aC5hdXRoMERvbWFpbn0vb2F1dGgvdG9rZW5gLFxuXHRcdFx0fSxcblx0XHRcdHsga2V5OiBcImNhbGxiYWNrVXJsXCIsIHZhbHVlOiBQT1NUTUFOX0NBTExCQUNLU1swXSB9LFxuXHRcdFx0eyBrZXk6IFwic2NvcGVcIiwgdmFsdWU6IFBPU1RNQU5fU0NPUEVTIH0sXG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0IGxpbmVzID0gW2BuYW1lOiAke3lhbWxRdW90ZShuYW1lKX1gLCBcInZhbHVlczpcIl07XG5cdGZvciAoY29uc3QgdiBvZiB2YWx1ZXMpIHtcblx0XHRsaW5lcy5wdXNoKGAgIC0ga2V5OiAke3Yua2V5fWApO1xuXHRcdGxpbmVzLnB1c2goYCAgICB2YWx1ZTogJHt5YW1sUXVvdGUodi52YWx1ZSl9YCk7XG5cdFx0bGluZXMucHVzaChcIiAgICBlbmFibGVkOiB0cnVlXCIpO1xuXHR9XG5cdHJldHVybiBgJHtsaW5lcy5qb2luKFwiXFxuXCIpfVxcbmA7XG59XG5cbi8qKiBMb2NhbCBWaWV3IC8gTmF0aXZlIEdpdCBjb2xsZWN0aW9uICh2MyBtdWx0aS1maWxlIFlBTUwpLiAqL1xuZnVuY3Rpb24gYnVpbGRMb2NhbFZpZXdGaWxlcyhcblx0cHJvamVjdE5hbWU6IHN0cmluZyxcblx0YXV0aD86IEF1dGgwRW52LFxuKTogQXJyYXk8eyBmaWxlUGF0aDogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfT4ge1xuXHRjb25zdCBjb2xsZWN0aW9uRGlyID0gYHBvc3RtYW4vY29sbGVjdGlvbnMvJHtwcm9qZWN0TmFtZX0gV2ViQVBJYDtcblx0Y29uc3QgZmlsZXM6IEFycmF5PHsgZmlsZVBhdGg6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+ID0gW107XG5cblx0Ly8gUG9zdG1hbiBMb2NhbCBWaWV3IHN0b3JlcyBPQXV0aCB1bmRlciBhdXRoW10uY3JlZGVudGlhbHMgKG5vdCB0aGUgdjIuMSBvYXV0aDIgYXJyYXkpLlxuXHQvLyBVc2UgY29uY3JldGUgaHR0cHMgVVJMcyDigJQgZW1wdHkgQXV0aCBVUkwgeWllbGRzIFwiSW52YWxpZCBwcm90b2NvbCBmb3IgYXV0aCBVUkxcIi5cblx0Y29uc3QgYXV0aEJsb2NrID0gYXV0aD8uYXV0aDBEb21haW5cblx0XHQ/IFtcblx0XHRcdFx0XCJhdXRoOlwiLFxuXHRcdFx0XHRgICAtIGlkOiAke3JhbmRvbVVVSUQoKX1gLFxuXHRcdFx0XHRcIiAgICB0eXBlOiBvYXV0aDJcIixcblx0XHRcdFx0XCIgICAgbmFtZTogT0F1dGggMi4wXCIsXG5cdFx0XHRcdFwiICAgIGNyZWRlbnRpYWxzOlwiLFxuXHRcdFx0XHRcIiAgICAgIGFkZFRva2VuVG86IGhlYWRlclwiLFxuXHRcdFx0XHRcIiAgICAgIGdyYW50X3R5cGU6IGF1dGhvcml6YXRpb25fY29kZV93aXRoX3BrY2VcIixcblx0XHRcdFx0YCAgICAgIGF1dGhVcmw6IGh0dHBzOi8vJHthdXRoLmF1dGgwRG9tYWlufS9hdXRob3JpemU/YXVkaWVuY2U9JHthdXRoLmF1dGgwQXVkaWVuY2UgPz8gXCJcIn1gLFxuXHRcdFx0XHRgICAgICAgYWNjZXNzVG9rZW5Vcmw6IGh0dHBzOi8vJHthdXRoLmF1dGgwRG9tYWlufS9vYXV0aC90b2tlbmAsXG5cdFx0XHRcdGAgICAgICBjbGllbnRJZDogJHt5YW1sUXVvdGUoYXV0aC5hdXRoMENsaWVudElkID8/IFwiXCIpfWAsXG5cdFx0XHRcdGAgICAgICBzY29wZTogJHt5YW1sUXVvdGUoUE9TVE1BTl9TQ09QRVMpfWAsXG5cdFx0XHRcdGAgICAgICByZWRpcmVjdF91cmk6ICR7UE9TVE1BTl9DQUxMQkFDS1NbMF19YCxcblx0XHRcdFx0XCIgICAgICB1c2VCcm93c2VyOiB0cnVlXCIsXG5cdFx0XHRcdFwiICAgICAgY2hhbGxlbmdlQWxnb3JpdGhtOiBTMjU2XCIsXG5cdFx0XHRcdC8vIFNQQSBwdWJsaWMgY2xpZW50OiBBdXRoMCB0b2tlbiBlbmRwb2ludCByZWplY3RzIEJhc2ljIGF1dGggKGZlYWNmdCBVbmF1dGhvcml6ZWQpLlxuXHRcdFx0XHRcIiAgICAgIGNsaWVudF9hdXRoZW50aWNhdGlvbjogYm9keVwiLFxuXHRcdFx0XHQnICAgICAgY2xpZW50U2VjcmV0OiBcIlwiJyxcblx0XHRcdFx0YCAgICAgIHRva2VuTmFtZTogJHt5YW1sUXVvdGUoYCR7cHJvamVjdE5hbWV9IEFjY2VzcyBUb2tlbmApfWAsXG5cdFx0XHRcdFwiXCIsXG5cdFx0XHRdLmpvaW4oXCJcXG5cIilcblx0XHQ6IFwiXCI7XG5cblx0ZmlsZXMucHVzaCh7XG5cdFx0ZmlsZVBhdGg6IGAke2NvbGxlY3Rpb25EaXJ9Ly5yZXNvdXJjZXMvZGVmaW5pdGlvbi55YW1sYCxcblx0XHRjb250ZW50OiBbXG5cdFx0XHRcIiRraW5kOiBjb2xsZWN0aW9uXCIsXG5cdFx0XHRgbmFtZTogJHt5YW1sUXVvdGUoYCR7cHJvamVjdE5hbWV9IFdlYkFQSWApfWAsXG5cdFx0XHRcInNjaGVtYVZlcnNpb246ICczLjAnXCIsXG5cdFx0XHRcImRlc2NyaXB0aW9uOiA+LVwiLFxuXHRcdFx0XCIgIE9wZW4gdGhpcyBwcm9qZWN0IHJvb3QgaW4gUG9zdG1hbiBMb2NhbCBWaWV3IChGaWxlcyDihpIgT3BlbiBmb2xkZXIpLlwiLFxuXHRcdFx0XCIgIFNlbGVjdCB0aGUgTG9jYWwgZW52aXJvbm1lbnQsIHRoZW4gQXV0aG9yaXphdGlvbiDihpIgR2V0IE5ldyBBY2Nlc3MgVG9rZW4gKFBLQ0UpLlwiLFxuXHRcdFx0YXV0aEJsb2NrLFxuXHRcdF1cblx0XHRcdC5maWx0ZXIoKGwpID0+IGwgIT09IHVuZGVmaW5lZClcblx0XHRcdC5qb2luKFwiXFxuXCIpXG5cdFx0XHQucmVwbGFjZSgvXFxuKyQvLCBcIlxcblwiKSxcblx0fSk7XG5cblx0ZmlsZXMucHVzaCh7XG5cdFx0ZmlsZVBhdGg6IGAke2NvbGxlY3Rpb25EaXJ9L0hlbGxvLy5yZXNvdXJjZXMvZGVmaW5pdGlvbi55YW1sYCxcblx0XHRjb250ZW50OiBbXCIka2luZDogZm9sZGVyXCIsIFwibmFtZTogSGVsbG9cIiwgXCJvcmRlcjogMTAwMFwiLCBcIlwiXS5qb2luKFwiXFxuXCIpLFxuXHR9KTtcblxuXHRjb25zdCByZXF1ZXN0czogQXJyYXk8e1xuXHRcdGZpbGU6IHN0cmluZztcblx0XHR5YW1sOiBzdHJpbmc7XG5cdH0+ID0gW1xuXHRcdHtcblx0XHRcdGZpbGU6IFwiTGlzdCAoYW5vbnltb3VzKS5yZXF1ZXN0LnlhbWxcIixcblx0XHRcdHlhbWw6IFtcblx0XHRcdFx0XCIka2luZDogaHR0cC1yZXF1ZXN0XCIsXG5cdFx0XHRcdFwibmFtZTogTGlzdCAoYW5vbnltb3VzKVwiLFxuXHRcdFx0XHRcIm1ldGhvZDogR0VUXCIsXG5cdFx0XHRcdCd1cmw6IFwie3tiYXNlVXJsfX0vaGVsbG9cIicsXG5cdFx0XHRcdFwiYXV0aDpcIixcblx0XHRcdFx0XCIgIHR5cGU6IG5vYXV0aFwiLFxuXHRcdFx0XHRcIm9yZGVyOiAxMDAwXCIsXG5cdFx0XHRcdFwiXCIsXG5cdFx0XHRdLmpvaW4oXCJcXG5cIiksXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRmaWxlOiBcIkdldCBieSBpZC5yZXF1ZXN0LnlhbWxcIixcblx0XHRcdHlhbWw6IFtcblx0XHRcdFx0XCIka2luZDogaHR0cC1yZXF1ZXN0XCIsXG5cdFx0XHRcdFwibmFtZTogR2V0IGJ5IGlkXCIsXG5cdFx0XHRcdFwibWV0aG9kOiBHRVRcIixcblx0XHRcdFx0J3VybDogXCJ7e2Jhc2VVcmx9fS9oZWxsby86aWRcIicsXG5cdFx0XHRcdFwib3JkZXI6IDIwMDBcIixcblx0XHRcdFx0XCJcIixcblx0XHRcdF0uam9pbihcIlxcblwiKSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGZpbGU6IFwiQ3JlYXRlLnJlcXVlc3QueWFtbFwiLFxuXHRcdFx0eWFtbDogW1xuXHRcdFx0XHRcIiRraW5kOiBodHRwLXJlcXVlc3RcIixcblx0XHRcdFx0XCJuYW1lOiBDcmVhdGVcIixcblx0XHRcdFx0XCJtZXRob2Q6IFBPU1RcIixcblx0XHRcdFx0J3VybDogXCJ7e2Jhc2VVcmx9fS9oZWxsb1wiJyxcblx0XHRcdFx0XCJoZWFkZXJzOlwiLFxuXHRcdFx0XHRcIiAgQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXCIsXG5cdFx0XHRcdFwiYm9keTpcIixcblx0XHRcdFx0XCIgIHR5cGU6IGpzb25cIixcblx0XHRcdFx0XCIgIGNvbnRlbnQ6IHwtXCIsXG5cdFx0XHRcdFwiICAgIHtcIixcblx0XHRcdFx0JyAgICAgIFwibWVzc2FnZVwiOiBcImhlbGxvXCInLFxuXHRcdFx0XHRcIiAgICB9XCIsXG5cdFx0XHRcdFwib3JkZXI6IDMwMDBcIixcblx0XHRcdFx0XCJcIixcblx0XHRcdF0uam9pbihcIlxcblwiKSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGZpbGU6IFwiVXBkYXRlLnJlcXVlc3QueWFtbFwiLFxuXHRcdFx0eWFtbDogW1xuXHRcdFx0XHRcIiRraW5kOiBodHRwLXJlcXVlc3RcIixcblx0XHRcdFx0XCJuYW1lOiBVcGRhdGVcIixcblx0XHRcdFx0XCJtZXRob2Q6IFBVVFwiLFxuXHRcdFx0XHQndXJsOiBcInt7YmFzZVVybH19L2hlbGxvLzppZFwiJyxcblx0XHRcdFx0XCJoZWFkZXJzOlwiLFxuXHRcdFx0XHRcIiAgQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXCIsXG5cdFx0XHRcdFwiYm9keTpcIixcblx0XHRcdFx0XCIgIHR5cGU6IGpzb25cIixcblx0XHRcdFx0XCIgIGNvbnRlbnQ6IHwtXCIsXG5cdFx0XHRcdFwiICAgIHtcIixcblx0XHRcdFx0JyAgICAgIFwibWVzc2FnZVwiOiBcInVwZGF0ZWRcIicsXG5cdFx0XHRcdFwiICAgIH1cIixcblx0XHRcdFx0XCJvcmRlcjogNDAwMFwiLFxuXHRcdFx0XHRcIlwiLFxuXHRcdFx0XS5qb2luKFwiXFxuXCIpLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0ZmlsZTogXCJEZWxldGUucmVxdWVzdC55YW1sXCIsXG5cdFx0XHR5YW1sOiBbXG5cdFx0XHRcdFwiJGtpbmQ6IGh0dHAtcmVxdWVzdFwiLFxuXHRcdFx0XHRcIm5hbWU6IERlbGV0ZVwiLFxuXHRcdFx0XHRcIm1ldGhvZDogREVMRVRFXCIsXG5cdFx0XHRcdCd1cmw6IFwie3tiYXNlVXJsfX0vaGVsbG8vOmlkXCInLFxuXHRcdFx0XHRcIm9yZGVyOiA1MDAwXCIsXG5cdFx0XHRcdFwiXCIsXG5cdFx0XHRdLmpvaW4oXCJcXG5cIiksXG5cdFx0fSxcblx0XTtcblxuXHRmb3IgKGNvbnN0IHIgb2YgcmVxdWVzdHMpIHtcblx0XHRmaWxlcy5wdXNoKHtcblx0XHRcdGZpbGVQYXRoOiBgJHtjb2xsZWN0aW9uRGlyfS9IZWxsby8ke3IuZmlsZX1gLFxuXHRcdFx0Y29udGVudDogci55YW1sLFxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIGZpbGVzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzY2FmZm9sZCh3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLCBvcHRpb25zOiBQb3N0bWFuT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuXHRpZiAob3B0aW9ucy5wb3N0bWFuUHJvdmlkZXIgPT09IFwibm9uZVwiIHx8IG9wdGlvbnMucG9zdG1hblByb3ZpZGVyID09IG51bGwpIHJldHVybjtcblxuXHRjb25zdCBhdXRoQ29uZmlnTW9kZWwgPSB3b3Jrc3BhY2UuZ2V0TW9kZWw8QXV0aENvbmZpZ01vZGVsPihXRUxMX0tOT1dOX0ZJTEVTLkFVVEhfQ09ORklHKTtcblx0Y29uc3QgYXV0aENmZyA9IGF1dGhDb25maWdNb2RlbD8uY29uZmlnO1xuXG5cdGxldCBzcGFDbGllbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdGlmIChhdXRoQ2ZnPy5pc3N1ZXJCYXNlVXJsKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFwcCA9IGF1dGgwQ2xpLmVuc3VyZVNwYUFwcChgJHt3b3Jrc3BhY2UubmFtZX0gUG9zdG1hbmAsIFsuLi5QT1NUTUFOX0NBTExCQUNLU10pO1xuXHRcdFx0c3BhQ2xpZW50SWQgPSBhcHAuY2xpZW50X2lkO1xuXHRcdFx0Y29uc29sZS5sb2coXG5cdFx0XHRcdGFwcC5yZXVzZWRcblx0XHRcdFx0XHQ/IGAgIOKckyBSZXVzaW5nIEF1dGgwIFNQQSBhcHAgZm9yIFBvc3RtYW4gUEtDRSAoJHtzcGFDbGllbnRJZH0pYFxuXHRcdFx0XHRcdDogYCAg4pyTIEF1dGgwIFNQQSBhcHAgY3JlYXRlZCBmb3IgUG9zdG1hbiBQS0NFICgke3NwYUNsaWVudElkfSlgLFxuXHRcdFx0KTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF1dGgwQ2xpLmVuYWJsZUNvbm5lY3Rpb25Gb3JDbGllbnQoYXV0aDBDbGkuREJfQ09OTkVDVElPTl9OQU1FLCBzcGFDbGllbnRJZCk7XG5cdFx0XHRcdGNvbnNvbGUubG9nKGAgIOKckyBFbmFibGVkICR7YXV0aDBDbGkuREJfQ09OTkVDVElPTl9OQU1FfSBvbiBQb3N0bWFuIFNQQWApO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcdFx0YCAg4pyXIEZhaWxlZCB0byBlbmFibGUgREIgY29ubmVjdGlvbiBvbiBTUEE6ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycn1gLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0YCAg4pyXIEZhaWxlZCB0byBlbnN1cmUgQXV0aDAgU1BBIGFwcCDigJQgc2V0IGF1dGgwQ2xpZW50SWQgaW4gdGhlIGVudmlyb25tZW50OiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBlcnJ9YCxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgYXV0aDBFbnY6IEF1dGgwRW52IHwgdW5kZWZpbmVkID0gYXV0aENmZz8uaXNzdWVyQmFzZVVybFxuXHRcdD8ge1xuXHRcdFx0XHRhdXRoMERvbWFpbjogYXV0aENmZy5pc3N1ZXJCYXNlVXJsLnJlcGxhY2UoL15odHRwcz86XFwvXFwvLywgXCJcIiksXG5cdFx0XHRcdGF1dGgwQXVkaWVuY2U6IGF1dGhDZmcuYXVkaWVuY2UsXG5cdFx0XHRcdGF1dGgwQ2xpZW50SWQ6IHNwYUNsaWVudElkLFxuXHRcdFx0fVxuXHRcdDogdW5kZWZpbmVkO1xuXG5cdGNvbnN0IHByb2plY3ROYW1lID0gd29ya3NwYWNlLm5hbWU7XG5cdGNvbnN0IGVudk5hbWUgPSBgJHtwcm9qZWN0TmFtZX0gTG9jYWxgO1xuXHRjb25zdCBsb2NhbEZpbGVzID0gYnVpbGRMb2NhbFZpZXdGaWxlcyhwcm9qZWN0TmFtZSwgYXV0aDBFbnYpO1xuXHRjb25zdCBlbnZZYW1sID0gYnVpbGRFbnZpcm9ubWVudFlhbWwoZW52TmFtZSwgYXV0aDBFbnYpO1xuXG5cdHdvcmtzcGFjZS5hZGRGaWxlKHtcblx0XHRmaWxlczogKCkgPT4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCIucG9zdG1hbi9yZXNvdXJjZXMueWFtbFwiLFxuXHRcdFx0XHRjb250ZW50OiBbXG5cdFx0XHRcdFx0XCIjIE9wZW4gdGhpcyBwcm9qZWN0IHJvb3QgaW4gUG9zdG1hbiAoRmlsZXMg4oaSIE9wZW4gZm9sZGVyKSwgbm90IHRoZSBwb3N0bWFuLyBzdWJmb2xkZXIuXCIsXG5cdFx0XHRcdFx0XCIjIFBvc3RtYW4gZmlsbHMgd29ya3NwYWNlLmlkIHdoZW4geW91IGNvbm5lY3QgTG9jYWwgVmlldy5cIixcblx0XHRcdFx0XHRcIiNcIixcblx0XHRcdFx0XHRcIiMgQWxsIHJlc291cmNlcyB1bmRlciBwb3N0bWFuLyBhcmUgcmVnaXN0ZXJlZCBhdXRvbWF0aWNhbGx5LlwiLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdF0uam9pbihcIlxcblwiKSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBgcG9zdG1hbi9lbnZpcm9ubWVudHMvJHtwcm9qZWN0TmFtZX0tTG9jYWwuZW52aXJvbm1lbnQueWFtbGAsXG5cdFx0XHRcdGNvbnRlbnQ6IGVudllhbWwsXG5cdFx0XHR9LFxuXHRcdFx0Li4ubG9jYWxGaWxlcyxcblx0XHRdLFxuXHR9KTtcblxuXHRpZiAob3B0aW9ucy5wb3N0bWFuUHJvdmlkZXIgPT09IFwiYXBpXCIgJiYgb3B0aW9ucy5hcGlLZXkpIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uID0gYnVpbGRDb2xsZWN0aW9uSnNvbihwcm9qZWN0TmFtZSwgYXV0aDBFbnYpO1xuXHRcdGNvbnN0IGhlYWRlcnMgPSB7IFwiWC1BcGktS2V5XCI6IG9wdGlvbnMuYXBpS2V5LCBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9O1xuXG5cdFx0Y29uc3QgY29sUmVzID0gYXdhaXQgZmV0Y2goXG5cdFx0XHRgaHR0cHM6Ly9hcGkuZ2V0cG9zdG1hbi5jb20vY29sbGVjdGlvbnM/d29ya3NwYWNlPSR7b3B0aW9ucy53b3Jrc3BhY2VJZH1gLFxuXHRcdFx0e1xuXHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRoZWFkZXJzLFxuXHRcdFx0XHRib2R5OiBKU09OLnN0cmluZ2lmeSh7IGNvbGxlY3Rpb24gfSksXG5cdFx0XHR9LFxuXHRcdCk7XG5cdFx0aWYgKGNvbFJlcy5vaykge1xuXHRcdFx0Y29uc29sZS5sb2coXCIgIOKckyBQb3N0bWFuIGNvbGxlY3Rpb24gdXBsb2FkZWRcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCIgIOKclyBGYWlsZWQgdG8gdXBsb2FkIFBvc3RtYW4gY29sbGVjdGlvblwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBlbnZWYWx1ZXMgPSBbXG5cdFx0XHR7IGtleTogXCJiYXNlVXJsXCIsIHZhbHVlOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMFwiLCBlbmFibGVkOiB0cnVlIH0sXG5cdFx0XHQuLi4oYXV0aDBFbnY/LmF1dGgwRG9tYWluXG5cdFx0XHRcdD8gW1xuXHRcdFx0XHRcdFx0eyBrZXk6IFwiYXV0aDBEb21haW5cIiwgdmFsdWU6IGF1dGgwRW52LmF1dGgwRG9tYWluLCBlbmFibGVkOiB0cnVlIH0sXG5cdFx0XHRcdFx0XHR7IGtleTogXCJhdXRoMEF1ZGllbmNlXCIsIHZhbHVlOiBhdXRoMEVudi5hdXRoMEF1ZGllbmNlID8/IFwiXCIsIGVuYWJsZWQ6IHRydWUgfSxcblx0XHRcdFx0XHRcdHsga2V5OiBcImF1dGgwQ2xpZW50SWRcIiwgdmFsdWU6IGF1dGgwRW52LmF1dGgwQ2xpZW50SWQgPz8gXCJcIiwgZW5hYmxlZDogdHJ1ZSB9LFxuXHRcdFx0XHRcdF1cblx0XHRcdFx0OiBbXSksXG5cdFx0XTtcblx0XHRjb25zdCBlbnZSZXMgPSBhd2FpdCBmZXRjaChcblx0XHRcdGBodHRwczovL2FwaS5nZXRwb3N0bWFuLmNvbS9lbnZpcm9ubWVudHM/d29ya3NwYWNlPSR7b3B0aW9ucy53b3Jrc3BhY2VJZH1gLFxuXHRcdFx0e1xuXHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRoZWFkZXJzLFxuXHRcdFx0XHRib2R5OiBKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0ZW52aXJvbm1lbnQ6IHsgbmFtZTogZW52TmFtZSwgdmFsdWVzOiBlbnZWYWx1ZXMgfSxcblx0XHRcdFx0fSksXG5cdFx0XHR9LFxuXHRcdCk7XG5cdFx0aWYgKGVudlJlcy5vaykge1xuXHRcdFx0Y29uc29sZS5sb2coXCIgIOKckyBQb3N0bWFuIGVudmlyb25tZW50IHVwbG9hZGVkXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiICDinJcgRmFpbGVkIHRvIHVwbG9hZCBQb3N0bWFuIGVudmlyb25tZW50XCIpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgY29uc3QgUG9zdG1hbkZlYXR1cmU6IEZlYXR1cmU8UG9zdG1hbk9wdGlvbnM+ID0geyBnZXRPcHRpb25zLCBzY2FmZm9sZCB9O1xuZXhwb3J0IHsgUE9TVE1BTl9DQUxMQkFDS1MsIFBPU1RNQU5fU0NPUEVTIH07XG4iXSwibmFtZXMiOlsicmFuZG9tVVVJRCIsInBpY2siLCJXRUxMX0tOT1dOX0ZJTEVTIiwiYXV0aDBDbGkiLCJQT1NUTUFOX0NBTExCQUNLUyIsIlBPU1RNQU5fU0NPUEVTIiwiam9pbiIsImdldE9wdGlvbnMiLCJfd29ya3NwYWNlIiwiY2xpT3B0aW9ucyIsInBvc3RtYW5Qcm92aWRlciIsImNob2ljZXMiLCJsYWJlbCIsImRlc2NyaXB0aW9uIiwic2VsZWN0ZWQiLCJjIiwicHJvdmlkZXIiLCJhcGlLZXkiLCJwcm9jZXNzIiwiZW52IiwiUE9TVE1BTl9BUElfS0VZIiwidGhlbiIsIm0iLCJhc2siLCJoZWFkZXJzIiwid3NSZXMiLCJmZXRjaCIsIm9rIiwiY29uc29sZSIsImVycm9yIiwid29ya3NwYWNlcyIsImpzb24iLCJ3c0Nob2ljZXMiLCJpZCIsIm1hcCIsInciLCJuYW1lIiwidHlwZSIsIndzUGlja2VkIiwid29ya3NwYWNlSWQiLCJ3c05hbWUiLCJjcmVhdGVSZXMiLCJtZXRob2QiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsIndvcmtzcGFjZSIsIndzIiwibG9nIiwiYnVpbGRDb2xsZWN0aW9uSnNvbiIsInByb2plY3ROYW1lIiwiYXV0aCIsImF1dGhPYmoiLCJhdXRoMERvbWFpbiIsIm9hdXRoMiIsImtleSIsInZhbHVlIiwidW5kZWZpbmVkIiwiaGVsbG9VcmwiLCJwYXRoIiwicmF3IiwiaG9zdCIsInNwbGl0IiwiZmlsdGVyIiwiQm9vbGVhbiIsImluZm8iLCJfcG9zdG1hbl9pZCIsInNjaGVtYSIsIml0ZW0iLCJyZXF1ZXN0IiwidXJsIiwiaGVhZGVyIiwibW9kZSIsInlhbWxRdW90ZSIsInRlc3QiLCJpbmNsdWRlcyIsImJ1aWxkRW52aXJvbm1lbnRZYW1sIiwidmFsdWVzIiwicHVzaCIsImF1dGgwQXVkaWVuY2UiLCJhdXRoMENsaWVudElkIiwibGluZXMiLCJ2IiwiYnVpbGRMb2NhbFZpZXdGaWxlcyIsImNvbGxlY3Rpb25EaXIiLCJmaWxlcyIsImF1dGhCbG9jayIsImZpbGVQYXRoIiwiY29udGVudCIsImwiLCJyZXBsYWNlIiwicmVxdWVzdHMiLCJmaWxlIiwieWFtbCIsInIiLCJzY2FmZm9sZCIsIm9wdGlvbnMiLCJhdXRoQ29uZmlnTW9kZWwiLCJnZXRNb2RlbCIsIkFVVEhfQ09ORklHIiwiYXV0aENmZyIsImNvbmZpZyIsInNwYUNsaWVudElkIiwiaXNzdWVyQmFzZVVybCIsImFwcCIsImVuc3VyZVNwYUFwcCIsImNsaWVudF9pZCIsInJldXNlZCIsImVuYWJsZUNvbm5lY3Rpb25Gb3JDbGllbnQiLCJEQl9DT05ORUNUSU9OX05BTUUiLCJlcnIiLCJFcnJvciIsIm1lc3NhZ2UiLCJhdXRoMEVudiIsImF1ZGllbmNlIiwiZW52TmFtZSIsImxvY2FsRmlsZXMiLCJlbnZZYW1sIiwiYWRkRmlsZSIsImNvbGxlY3Rpb24iLCJjb2xSZXMiLCJlbnZWYWx1ZXMiLCJlbmFibGVkIiwiZW52UmVzIiwiZW52aXJvbm1lbnQiLCJQb3N0bWFuRmVhdHVyZSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsVUFBVSxRQUFRLGNBQWM7QUFDekMsU0FBU0MsSUFBSSxRQUFRLHlCQUF5QjtBQUM5QyxTQUFTQyxnQkFBZ0IsUUFBUSx3QkFBd0I7QUFJekQsWUFBWUMsY0FBYyxpQkFBaUI7QUFFM0MscUVBQXFFLEdBQ3JFLE1BQU1DLG9CQUFvQjtJQUN6QjtJQUNBO0NBQ0E7QUFFRCw4RUFBOEUsR0FDOUUsTUFBTUMsaUJBQWlCO0lBQ3RCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0EsQ0FBQ0MsSUFBSSxDQUFDO0FBUVAsZUFBZUMsV0FDZEMsVUFBNkIsRUFDN0JDLFVBQW1DO0lBRW5DLElBQUlBLFdBQVdDLGVBQWUsSUFBSSxNQUFNLE9BQU8sQ0FBQztJQUVoRCxNQUFNQyxVQUFVO1FBQ2Y7WUFBRUMsT0FBTztZQUFpQkMsYUFBYTtRQUFPO1FBQzlDO1lBQ0NELE9BQU87WUFDUEMsYUFBYTtRQUNkO1FBQ0E7WUFDQ0Qs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