@nlabs/lex 1.51.7 → 1.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,9 +6,9 @@ import { execa } from 'execa';
6
6
  import { existsSync, readFileSync } from 'fs';
7
7
  import { sync as globSync } from 'glob';
8
8
  import { dirname, resolve as pathResolve } from 'path';
9
- import { LexConfig, getTypeScriptConfigPath } from '../../LexConfig.js';
9
+ import { LexConfig } from '../../LexConfig.js';
10
10
  import { checkLinkedModules, copyConfiguredFiles, createSpinner, handleWebpackProgress, removeFiles } from '../../utils/app.js';
11
- import { resolveWebpackPaths, getLexPackageJsonPath } from '../../utils/file.js';
11
+ import { resolveWebpackPaths, getLexPackageJsonPath, resolveBinaryPath } from '../../utils/file.js';
12
12
  import { log } from '../../utils/log.js';
13
13
  import { processTranslations } from '../../utils/translations.js';
14
14
  import { aiFunction } from '../ai/ai.js';
@@ -47,10 +47,11 @@ export const buildWithSWC = async (spinner, commandOptions, callback)=>{
47
47
  cwd: sourceDir,
48
48
  dot: false,
49
49
  nodir: true,
50
- nosort: true
50
+ nosort: true,
51
+ absolute: true
51
52
  };
52
- const tsFiles = globSync(`${sourceDir}/**/!(*.spec|*.test).ts*`, globOptions);
53
- const jsFiles = globSync(`${sourceDir}/**/!(*.spec|*.test).js`, globOptions);
53
+ const tsFiles = globSync(`**/!(*.spec|*.test).ts*`, globOptions);
54
+ const jsFiles = globSync(`**/!(*.spec|*.test).js`, globOptions);
54
55
  const sourceFiles = [
55
56
  ...tsFiles,
56
57
  ...jsFiles
@@ -61,7 +62,6 @@ export const buildWithSWC = async (spinner, commandOptions, callback)=>{
61
62
  for (const file of sourceFiles){
62
63
  const sourcePath = pathResolve(sourceDir, file);
63
64
  const outputPath = pathResolve(outputDir, file.replace(/\.(ts|tsx)$/, '.js'));
64
- // Ensure output directory exists
65
65
  const outputDirPath = dirname(outputPath);
66
66
  if (!existsSync(outputDirPath)) {
67
67
  const { mkdirSync } = await import('fs');
@@ -71,7 +71,6 @@ export const buildWithSWC = async (spinner, commandOptions, callback)=>{
71
71
  }
72
72
  const sourceCode = readFileSync(sourcePath, 'utf8');
73
73
  const isTSX = file.endsWith('.tsx');
74
- // Merge SWC config with command-specific overrides
75
74
  const swcOptions = {
76
75
  filename: file,
77
76
  ...swcConfig,
@@ -81,7 +80,8 @@ export const buildWithSWC = async (spinner, commandOptions, callback)=>{
81
80
  syntax: 'typescript',
82
81
  tsx: isTSX,
83
82
  decorators: swcConfig?.jsc?.parser?.decorators ?? true,
84
- dynamicImport: swcConfig?.jsc?.parser?.dynamicImport ?? true
83
+ dynamicImport: swcConfig?.jsc?.parser?.dynamicImport ?? true,
84
+ comments: false // Remove comments during transformation
85
85
  },
86
86
  target: swcConfig?.jsc?.target ?? 'es2020',
87
87
  transform: isTSX ? {
@@ -90,12 +90,15 @@ export const buildWithSWC = async (spinner, commandOptions, callback)=>{
90
90
  runtime: 'automatic',
91
91
  ...swcConfig?.jsc?.transform?.react
92
92
  }
93
- } : swcConfig?.jsc?.transform
93
+ } : swcConfig?.jsc?.transform,
94
+ preserveAllComments: false
94
95
  },
95
96
  module: {
96
97
  ...swcConfig?.module,
97
98
  type: format === 'cjs' ? 'commonjs' : swcConfig?.module?.type || 'es6'
98
- }
99
+ },
100
+ minify: false,
101
+ sourceMaps: swcConfig?.sourceMaps || 'inline'
99
102
  };
100
103
  const result = await transform(sourceCode, swcOptions);
101
104
  const { writeFileSync } = await import('fs');
@@ -106,9 +109,20 @@ export const buildWithSWC = async (spinner, commandOptions, callback)=>{
106
109
  callback(0);
107
110
  return 0;
108
111
  } catch (error) {
112
+ log(`\n${commandOptions.cliName || 'Lex'} Error: SWC build failed`, 'error', quiet);
113
+ log(`\nError: ${error.message}`, 'error', quiet);
114
+ if (error instanceof Error) {
115
+ if (error.stack) {
116
+ log(`\nStack Trace:\n${error.stack}`, 'error', quiet);
117
+ }
118
+ // Try to extract file information if available
119
+ if ('filename' in error || 'file' in error) {
120
+ log(`\nFile: ${error.filename || error.file}`, 'error', quiet);
121
+ }
122
+ }
109
123
  spinner.fail('Build failed with SWC');
110
124
  if (!quiet) {
111
- console.error(error);
125
+ console.error('\nFull Error Details:', error);
112
126
  }
113
127
  callback(1);
114
128
  return 1;
@@ -253,7 +267,14 @@ export const buildWithWebpack = async (spinner, cmd, callback)=>{
253
267
  callback(0);
254
268
  return 0;
255
269
  } catch (error) {
256
- log(`\n${cliName} Error: ${error.message}`, 'error', quiet);
270
+ log(`\n${cliName} Error: Webpack build failed`, 'error', quiet);
271
+ log(`\nError: ${error.message}`, 'error', quiet);
272
+ if (error instanceof Error) {
273
+ if (error.stack) {
274
+ log(`\nStack Trace:\n${error.stack}`, 'error', quiet);
275
+ }
276
+ }
277
+ log(`\nWebpack Options: ${webpackOptions.slice(0, 5).join(' ')}...`, 'error', quiet);
257
278
  spinner.fail('Build failed.');
258
279
  if (cmd.assist) {
259
280
  spinner.start('AI is analyzing the webpack error...');
@@ -272,6 +293,9 @@ export const buildWithWebpack = async (spinner, cmd, callback)=>{
272
293
  }
273
294
  }
274
295
  }
296
+ if (!quiet) {
297
+ console.error('\nFull Error Details:', error);
298
+ }
275
299
  callback(1);
276
300
  return 1;
277
301
  }
@@ -324,14 +348,6 @@ export const build = async (cmd, callback = ()=>({}))=>{
324
348
  if (remove) {
325
349
  await removeFiles(outputFullPath || '');
326
350
  }
327
- if (useTypescript) {
328
- const compileConfigPath = getTypeScriptConfigPath('tsconfig.build.json');
329
- if (existsSync(compileConfigPath)) {
330
- log('Using tsconfig.build.json for build...', 'info', quiet);
331
- } else {
332
- LexConfig.checkCompileTypescriptConfig();
333
- }
334
- }
335
351
  let buildResult = 0;
336
352
  if (bundler === 'swc') {
337
353
  buildResult = await buildWithSWC(spinner, cmd, (status)=>{
@@ -377,6 +393,80 @@ What are the key optimization opportunities for this build configuration? Consid
377
393
  }
378
394
  if (buildResult === 0) {
379
395
  try {
396
+ if (useTypescript && bundler === 'swc') {
397
+ const typescriptPath = resolveBinaryPath('tsc', 'typescript');
398
+ if (typescriptPath) {
399
+ spinner.start('Generating TypeScript declarations...');
400
+ try {
401
+ const sourceFullPath = LexConfig.config.sourceFullPath || pathResolve(process.cwd(), './src');
402
+ const outputFullPath = LexConfig.config.outputFullPath || pathResolve(process.cwd(), './lib');
403
+ const globOptions = {
404
+ cwd: sourceFullPath,
405
+ dot: false,
406
+ nodir: true,
407
+ absolute: true
408
+ };
409
+ const tsFiles = globSync(`**/!(*.spec|*.test|*.integration).ts`, globOptions);
410
+ const tsxFiles = globSync(`**/!(*.spec|*.test|*.integration).tsx`, globOptions);
411
+ const allSourceFiles = [
412
+ ...tsFiles,
413
+ ...tsxFiles
414
+ ];
415
+ const typescriptOptions = [
416
+ ...LexConfig.getTypeScriptDeclarationFlags(),
417
+ ...allSourceFiles
418
+ ];
419
+ const result = await execa(typescriptPath, typescriptOptions, {
420
+ encoding: 'utf8',
421
+ cwd: process.cwd(),
422
+ reject: false,
423
+ all: true // Capture both stdout and stderr
424
+ });
425
+ if (result.exitCode !== 0) {
426
+ // TypeScript may have errors but still generate some declarations
427
+ // Log warnings but don't fail if declarations were generated
428
+ const hasDeclarations = result.all?.includes('Writing') || result.all?.includes('Declaration') || false;
429
+ const errorOutput = result.stderr || result.stdout || result.all || 'Unknown error';
430
+ if (!hasDeclarations) {
431
+ // Show detailed error information
432
+ log(`\n${cliName} Error: TypeScript declaration generation failed`, 'error', quiet);
433
+ log(`\nExit Code: ${result.exitCode}`, 'error', quiet);
434
+ log(`\nTypeScript Command: ${typescriptPath} ${typescriptOptions.slice(0, 10).join(' ')}...`, 'error', quiet);
435
+ log(`\nError Output:\n${errorOutput}`, 'error', quiet);
436
+ // Try to extract and highlight specific errors
437
+ const errorLines = errorOutput.split('\n').filter((line)=>line.includes('error TS') || line.includes('Error:') || line.trim().startsWith('src/') || line.trim().startsWith('TS'));
438
+ if (errorLines.length > 0) {
439
+ log(`\nKey Errors:`, 'error', quiet);
440
+ errorLines.slice(0, 10).forEach((line)=>{
441
+ log(` ${line}`, 'error', quiet);
442
+ });
443
+ if (errorLines.length > 10) {
444
+ log(` ... and ${errorLines.length - 10} more errors`, 'error', quiet);
445
+ }
446
+ }
447
+ spinner.fail('TypeScript declaration generation had errors (continuing anyway).');
448
+ } else {
449
+ log(`\n${cliName} Warning: TypeScript declaration generation completed with errors`, 'warn', quiet);
450
+ if (!quiet && errorOutput) {
451
+ log(`\nWarnings:\n${errorOutput}`, 'warn', quiet);
452
+ }
453
+ spinner.succeed('TypeScript declarations generated (with warnings).');
454
+ }
455
+ } else {
456
+ spinner.succeed('TypeScript declarations generated!');
457
+ }
458
+ } catch (error) {
459
+ // If execa throws (shouldn't with reject: false), log and continue
460
+ log(`\n${cliName} Error: TypeScript declaration generation exception`, 'error', quiet);
461
+ log(`\nError: ${error.message}`, 'error', quiet);
462
+ if (error instanceof Error && error.stack) {
463
+ log(`\nStack:\n${error.stack}`, 'error', quiet);
464
+ }
465
+ spinner.fail('TypeScript declaration generation had issues (continuing anyway).');
466
+ // Don't fail the build if declarations fail
467
+ }
468
+ }
469
+ }
380
470
  await copyConfiguredFiles(spinner, LexConfig.config, quiet);
381
471
  } catch (copyError) {
382
472
  log(`\n${cliName} Error: Failed to copy configured files: ${copyError.message}`, 'error', quiet);
@@ -389,4 +479,4 @@ What are the key optimization opportunities for this build configuration? Consid
389
479
  };
390
480
  export default build;
391
481
 
392
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9idWlsZC9idWlsZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHt0cmFuc2Zvcm19IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQge2V4ZWNhfSBmcm9tICdleGVjYSc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCB7ZGlybmFtZSwgcmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZX0gZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7TGV4Q29uZmlnLCBnZXRUeXBlU2NyaXB0Q29uZmlnUGF0aH0gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y2hlY2tMaW5rZWRNb2R1bGVzLCBjb3B5Q29uZmlndXJlZEZpbGVzLCBjcmVhdGVTcGlubmVyLCBjcmVhdGVQcm9ncmVzc0JhciwgaGFuZGxlV2VicGFja1Byb2dyZXNzLCByZW1vdmVGaWxlc30gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7Z2V0RGlyTmFtZSwgcmVsYXRpdmVOb2RlUGF0aCwgcmVzb2x2ZVdlYnBhY2tQYXRocywgZ2V0TGV4UGFja2FnZUpzb25QYXRofSBmcm9tICcuLi8uLi91dGlscy9maWxlLmpzJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi8uLi91dGlscy9sb2cuanMnO1xuaW1wb3J0IHtwcm9jZXNzVHJhbnNsYXRpb25zfSBmcm9tICcuLi8uLi91dGlscy90cmFuc2xhdGlvbnMuanMnO1xuaW1wb3J0IHthaUZ1bmN0aW9ufSBmcm9tICcuLi9haS9haS5qcyc7XG5pbXBvcnQgYm94ZW4gZnJvbSAnYm94ZW4nO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcblxubGV0IGN1cnJlbnRGaWxlbmFtZTogc3RyaW5nO1xubGV0IGN1cnJlbnREaXJuYW1lOiBzdHJpbmc7XG5cbnRyeSB7XG4gIGN1cnJlbnRGaWxlbmFtZSA9IGV2YWwoJ3JlcXVpcmUoXCJ1cmxcIikuZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpJyk7XG4gIGN1cnJlbnREaXJuYW1lID0gZGlybmFtZShjdXJyZW50RmlsZW5hbWUpO1xufSBjYXRjaCB7XG4gIGN1cnJlbnRGaWxlbmFtZSA9IHByb2Nlc3MuY3dkKCk7XG4gIGN1cnJlbnREaXJuYW1lID0gcHJvY2Vzcy5jd2QoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZE9wdGlvbnMge1xuICByZWFkb25seSBhc3Npc3Q/OiBib29sZWFuO1xuICByZWFkb25seSBhbmFseXplPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgYnVuZGxlcj86ICd3ZWJwYWNrJyB8ICdzd2MnO1xuICByZWFkb25seSBjbGlOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBlbnRyeT86IHN0cmluZzsgLy8gPC0tIGFkZCBlbnRyeVxuICByZWFkb25seSBmb3JtYXQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dHB1dFBhdGg/OiBzdHJpbmc7IC8vIDwtLSBhbHJlYWR5IHByZXNlbnRcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSByZW1vdmU/OiBib29sZWFuO1xuICByZWFkb25seSBzb3VyY2VQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSB0ZXN0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdHJhbnNsYXRpb25zPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdmFyaWFibGVzPzogc3RyaW5nO1xuICByZWFkb25seSB3YXRjaD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIEJ1aWxkQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmNvbnN0IGRpc3BsYXlCdWlsZFN0YXR1cyA9IChidW5kbGVyOiBzdHJpbmcsIG91dHB1dFBhdGg6IHN0cmluZywgcXVpZXQ6IGJvb2xlYW4sIHN0YXRzPzoge21vZHVsZXM/OiBudW1iZXI7IGFzc2V0cz86IG51bWJlcjsgc2l6ZT86IHN0cmluZ30pID0+IHtcbiAgaWYocXVpZXQpIHJldHVybjtcblxuICBsZXQgc3RhdHNJbmZvID0gJyc7XG4gIGlmKHN0YXRzICYmIHN0YXRzLm1vZHVsZXMgJiYgc3RhdHMuYXNzZXRzKSB7XG4gICAgc3RhdHNJbmZvID0gYFxcbiR7Y2hhbGsuZ3JlZW4oJ01vZHVsZXM6Jyl9ICAgICR7Y2hhbGsuY3lhbihzdGF0cy5tb2R1bGVzKX1cXG5gICtcbiAgICAgIGAke2NoYWxrLmdyZWVuKCdBc3NldHM6Jyl9ICAgICAke2NoYWxrLmN5YW4oc3RhdHMuYXNzZXRzKX1cXG5gICtcbiAgICAgIGAke2NoYWxrLmdyZWVuKCdTaXplOicpfSAgICAgICAke2NoYWxrLmN5YW4oc3RhdHMuc2l6ZSl9XFxuYDtcbiAgfVxuXG4gIGNvbnN0IHN0YXR1c0JveCA9IGJveGVuKFxuICAgIGAke2NoYWxrLmN5YW4uYm9sZCgn8J+Pl++4jyAgQnVpbGQgQ29tcGxldGVkIFN1Y2Nlc3NmdWxseScpfVxcblxcbmAgK1xuICAgIGAke2NoYWxrLmdyZWVuKCdCdW5kbGVyOicpfSAgICAke2NoYWxrLmN5YW4oYnVuZGxlcil9XFxuYCArXG4gICAgYCR7Y2hhbGsuZ3JlZW4oJ091dHB1dDonKX0gICAgICR7Y2hhbGsudW5kZXJsaW5lKG91dHB1dFBhdGgpfSR7c3RhdHNJbmZvfVxcbmAgK1xuICAgIGAke2NoYWxrLnllbGxvdygnUmVhZHkgZm9yIGRlcGxveW1lbnQhIPCfmoAnKX1gLFxuICAgIHtcbiAgICAgIHBhZGRpbmc6IDEsXG4gICAgICBtYXJnaW46IDEsXG4gICAgICBib3JkZXJTdHlsZTogJ3JvdW5kJyxcbiAgICAgIGJvcmRlckNvbG9yOiAnZ3JlZW4nLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzFhMWExYSdcbiAgICB9XG4gICk7XG5cbiAgY29uc29sZS5sb2coJ1xcbicgKyBzdGF0dXNCb3ggKyAnXFxuJyk7XG59O1xuXG4vLyBSZW1vdmVkIGJ1aWxkV2l0aEVzQnVpbGQgZnVuY3Rpb24gLSB1c2luZyBTV0MgaW5zdGVhZFxuXG5leHBvcnQgY29uc3QgYnVpbGRXaXRoU1dDID0gYXN5bmMgKHNwaW5uZXIsIGNvbW1hbmRPcHRpb25zOiBCdWlsZE9wdGlvbnMsIGNhbGxiYWNrOiBCdWlsZENhbGxiYWNrKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgZm9ybWF0ID0gJ2VzbScsXG4gICAgb3V0cHV0UGF0aCxcbiAgICBxdWlldCxcbiAgICBzb3VyY2VQYXRoLFxuICAgIHdhdGNoXG4gIH0gPSBjb21tYW5kT3B0aW9ucztcbiAgY29uc3Qge1xuICAgIG91dHB1dEZ1bGxQYXRoLFxuICAgIHNvdXJjZUZ1bGxQYXRoLFxuICAgIHN3Yzogc3djQ29uZmlnLFxuICAgIHRhcmdldEVudmlyb25tZW50LFxuICAgIHVzZUdyYXBoUWwsXG4gICAgdXNlVHlwZXNjcmlwdFxuICB9ID0gTGV4Q29uZmlnLmNvbmZpZztcbiAgY29uc3Qgc291cmNlRGlyOiBzdHJpbmcgPSBzb3VyY2VQYXRoID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgYC4vJHtzb3VyY2VQYXRofWApIDogc291cmNlRnVsbFBhdGggfHwgJyc7XG5cbiAgY29uc3QgZ2xvYk9wdGlvbnMgPSB7XG4gICAgY3dkOiBzb3VyY2VEaXIsXG4gICAgZG90OiBmYWxzZSxcbiAgICBub2RpcjogdHJ1ZSxcbiAgICBub3NvcnQ6IHRydWVcbiAgfTtcbiAgY29uc3QgdHNGaWxlczogc3RyaW5nW10gPSBnbG9iU3luYyhgJHtzb3VyY2VEaXJ9LyoqLyEoKi5zcGVjfCoudGVzdCkudHMqYCwgZ2xvYk9wdGlvbnMpO1xuICBjb25zdCBqc0ZpbGVzOiBzdHJpbmdbXSA9IGdsb2JTeW5jKGAke3NvdXJjZURpcn0vKiovISgqLnNwZWN8Ki50ZXN0KS5qc2AsIGdsb2JPcHRpb25zKTtcbiAgY29uc3Qgc291cmNlRmlsZXM6IHN0cmluZ1tdID0gWy4uLnRzRmlsZXMsIC4uLmpzRmlsZXNdO1xuXG4gIGNvbnN0IG91dHB1dERpcjogc3RyaW5nID0gb3V0cHV0UGF0aCB8fCBvdXRwdXRGdWxsUGF0aCB8fCAnJztcblxuICB0cnkge1xuICAgIHNwaW5uZXIuc3RhcnQoJ0J1aWxkaW5nIHdpdGggU1dDLi4uJyk7XG5cbiAgICBmb3IoY29uc3QgZmlsZSBvZiBzb3VyY2VGaWxlcykge1xuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IHBhdGhSZXNvbHZlKHNvdXJjZURpciwgZmlsZSk7XG4gICAgICBjb25zdCBvdXRwdXRQYXRoID0gcGF0aFJlc29sdmUob3V0cHV0RGlyLCBmaWxlLnJlcGxhY2UoL1xcLih0c3x0c3gpJC8sICcuanMnKSk7XG5cbiAgICAgIC8vIEVuc3VyZSBvdXRwdXQgZGlyZWN0b3J5IGV4aXN0c1xuICAgICAgY29uc3Qgb3V0cHV0RGlyUGF0aCA9IGRpcm5hbWUob3V0cHV0UGF0aCk7XG4gICAgICBpZighZXhpc3RzU3luYyhvdXRwdXREaXJQYXRoKSkge1xuICAgICAgICBjb25zdCB7bWtkaXJTeW5jfSA9IGF3YWl0IGltcG9ydCgnZnMnKTtcbiAgICAgICAgbWtkaXJTeW5jKG91dHB1dERpclBhdGgsIHtyZWN1cnNpdmU6IHRydWV9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlQ29kZSA9IHJlYWRGaWxlU3luYyhzb3VyY2VQYXRoLCAndXRmOCcpO1xuXG4gICAgICBjb25zdCBpc1RTWCA9IGZpbGUuZW5kc1dpdGgoJy50c3gnKTtcblxuICAgICAgLy8gTWVyZ2UgU1dDIGNvbmZpZyB3aXRoIGNvbW1hbmQtc3BlY2lmaWMgb3ZlcnJpZGVzXG4gICAgICBjb25zdCBzd2NPcHRpb25zID0ge1xuICAgICAgICBmaWxlbmFtZTogZmlsZSxcbiAgICAgICAgLi4uc3djQ29uZmlnLFxuICAgICAgICBqc2M6IHtcbiAgICAgICAgICAuLi5zd2NDb25maWc/LmpzYyxcbiAgICAgICAgICBwYXJzZXI6IHtcbiAgICAgICAgICAgIHN5bnRheDogJ3R5cGVzY3JpcHQnIGFzIGNvbnN0LFxuICAgICAgICAgICAgdHN4OiBpc1RTWCxcbiAgICAgICAgICAgIGRlY29yYXRvcnM6IHN3Y0NvbmZpZz8uanNjPy5wYXJzZXI/LmRlY29yYXRvcnMgPz8gdHJ1ZSxcbiAgICAgICAgICAgIGR5bmFtaWNJbXBvcnQ6IHN3Y0NvbmZpZz8uanNjPy5wYXJzZXI/LmR5bmFtaWNJbXBvcnQgPz8gdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGFyZ2V0OiBzd2NDb25maWc/LmpzYz8udGFyZ2V0ID8/ICdlczIwMjAnLFxuICAgICAgICAgIHRyYW5zZm9ybTogaXNUU1ggPyB7XG4gICAgICAgICAgICAuLi5zd2NDb25maWc/LmpzYz8udHJhbnNmb3JtLFxuICAgICAgICAgICAgcmVhY3Q6IHtcbiAgICAgICAgICAgICAgcnVudGltZTogJ2F1dG9tYXRpYycgYXMgY29uc3QsXG4gICAgICAgICAgICAgIC4uLnN3Y0NvbmZpZz8uanNjPy50cmFuc2Zvcm0/LnJlYWN0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSA6IHN3Y0NvbmZpZz8uanNjPy50cmFuc2Zvcm1cbiAgICAgICAgfSxcbiAgICAgICAgbW9kdWxlOiB7XG4gICAgICAgICAgLi4uc3djQ29uZmlnPy5tb2R1bGUsXG4gICAgICAgICAgdHlwZTogZm9ybWF0ID09PSAnY2pzJyA/ICdjb21tb25qcycgYXMgY29uc3QgOiAoc3djQ29uZmlnPy5tb2R1bGU/LnR5cGUgYXMgJ2VzNicgfHwgJ2VzNicpXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybShzb3VyY2VDb2RlLCBzd2NPcHRpb25zKTtcblxuICAgICAgY29uc3Qge3dyaXRlRmlsZVN5bmN9ID0gYXdhaXQgaW1wb3J0KCdmcycpO1xuICAgICAgd3JpdGVGaWxlU3luYyhvdXRwdXRQYXRoLCByZXN1bHQuY29kZSk7XG4gICAgfVxuXG4gICAgc3Bpbm5lci5zdWNjZWVkKCdCdWlsZCBjb21wbGV0ZWQgd2l0aCBTV0MnKTtcbiAgICBkaXNwbGF5QnVpbGRTdGF0dXMoJ1NXQycsIG91dHB1dERpciwgcXVpZXQpO1xuICAgIGNhbGxiYWNrKDApO1xuICAgIHJldHVybiAwO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdCdWlsZCBmYWlsZWQgd2l0aCBTV0MnKTtcbiAgICBpZighcXVpZXQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkV2l0aFdlYnBhY2sgPSBhc3luYyAoc3Bpbm5lciwgY21kLCBjYWxsYmFjaykgPT4ge1xuICBjb25zdCB7XG4gICAgYW5hbHl6ZSxcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZ05hbWUsXG4gICAgZGVmaW5lUHJvY2Vzc0Vudk5vZGVFbnYsXG4gICAgZGV2dG9vbCxcbiAgICBkaXNhYmxlSW50ZXJwcmV0LFxuICAgIGVudHJ5LFxuICAgIGVudixcbiAgICBmYWlsT25XYXJuaW5ncyxcbiAgICBqc29uLFxuICAgIG1lcmdlLFxuICAgIG1vZGUsXG4gICAgbmFtZSxcbiAgICBub2RlRW52LFxuICAgIG5vRGV2dG9vbCxcbiAgICBub1N0YXRzLFxuICAgIG5vVGFyZ2V0LFxuICAgIG5vV2F0Y2gsXG4gICAgbm9XYXRjaE9wdGlvbnNTdGRpbixcbiAgICBvdXRwdXRQYXRoLFxuICAgIHF1aWV0ID0gZmFsc2UsXG4gICAgc3RhdHMsXG4gICAgdGFyZ2V0LFxuICAgIHdhdGNoLFxuICAgIHdhdGNoT3B0aW9uc1N0ZGluXG4gIH0gPSBjbWQ7XG5cbiAgY29uc29sZS5sb2coJ2VudHJ5OicsIGVudHJ5LCAndHlwZTonLCB0eXBlb2YgZW50cnkpO1xuICBjb25zb2xlLmxvZygnb3V0cHV0UGF0aDonLCBvdXRwdXRQYXRoLCAndHlwZTonLCB0eXBlb2Ygb3V0cHV0UGF0aCk7XG5cbiAgY29uc3QgZW50cnlWYWx1ZSA9IEFycmF5LmlzQXJyYXkoZW50cnkpID8gZW50cnlbMF0gOiBlbnRyeTtcblxuICBsZXQgd2VicGFja0NvbmZpZzogc3RyaW5nO1xuXG4gIGlmKGNvbmZpZykge1xuICAgIGNvbnN0IGlzUmVsYXRpdmVDb25maWc6IGJvb2xlYW4gPSBjb25maWcuc3Vic3RyKDAsIDIpID09PSAnLi8nO1xuICAgIHdlYnBhY2tDb25maWcgPSBpc1JlbGF0aXZlQ29uZmlnID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgY29uZmlnKSA6IGNvbmZpZztcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICd3ZWJwYWNrLmNvbmZpZy5qcycpO1xuICAgIGNvbnN0IHByb2plY3RDb25maWdQYXRoVHMgPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnd2VicGFjay5jb25maWcudHMnKTtcbiAgICBjb25zdCBoYXNQcm9qZWN0Q29uZmlnID0gZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aCkgfHwgZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aFRzKTtcblxuICAgIGlmKGhhc1Byb2plY3RDb25maWcpIHtcbiAgICAgIHdlYnBhY2tDb25maWcgPSBleGlzdHNTeW5jKHByb2plY3RDb25maWdQYXRoVHMpID8gcHJvamVjdENvbmZpZ1BhdGhUcyA6IHByb2plY3RDb25maWdQYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7d2VicGFja0NvbmZpZzogcmVzb2x2ZWRDb25maWd9ID0gcmVzb2x2ZVdlYnBhY2tQYXRocyhjdXJyZW50RGlybmFtZSk7XG4gICAgICB3ZWJwYWNrQ29uZmlnID0gcmVzb2x2ZWRDb25maWc7XG4gICAgfVxuICB9XG5cbiAgY29uc29sZS5sb2coJ3dlYnBhY2tDb25maWcgcGF0aDonLCB3ZWJwYWNrQ29uZmlnKTtcbiAgY29uc29sZS5sb2coJ3dlYnBhY2tDb25maWcgZXhpc3RzOicsIGV4aXN0c1N5bmMod2VicGFja0NvbmZpZykpO1xuXG4gIGlmKCFleGlzdHNTeW5jKHdlYnBhY2tDb25maWcpKSB7XG4gICAgY29uc3QgbGV4UGFja2FnZVBhdGggPSBnZXRMZXhQYWNrYWdlSnNvblBhdGgoKTtcbiAgICBjb25zdCBsZXhQYWNrYWdlRGlyID0gZGlybmFtZShsZXhQYWNrYWdlUGF0aCk7XG4gICAgY29uc3QgbGV4V2VicGFja0NvbmZpZyA9IHBhdGhSZXNvbHZlKGxleFBhY2thZ2VEaXIsICd3ZWJwYWNrLmNvbmZpZy5qcycpO1xuXG4gICAgaWYoZXhpc3RzU3luYyhsZXhXZWJwYWNrQ29uZmlnKSkge1xuICAgICAgd2VicGFja0NvbmZpZyA9IGxleFdlYnBhY2tDb25maWc7XG4gICAgICBjb25zb2xlLmxvZygnVXNpbmcgTGV4IHdlYnBhY2sgY29uZmlnOicsIHdlYnBhY2tDb25maWcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENvdWxkIG5vdCBmaW5kIHdlYnBhY2suY29uZmlnLmpzYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgc3Bpbm5lci5mYWlsKCdCdWlsZCBmYWlsZWQuJyk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdlYnBhY2tPcHRpb25zOiBzdHJpbmdbXSA9IFtcbiAgICAnLS1jb2xvcicsXG4gICAgJy0tcHJvZ3Jlc3MnLFxuICAgICctLWNvbmZpZycsIHdlYnBhY2tDb25maWdcbiAgXTtcblxuICBpZihhbmFseXplKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWFuYWx5emUnKTtcbiAgaWYoY29uZmlnTmFtZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1jb25maWdOYW1lJywgY29uZmlnTmFtZSk7XG4gIGlmKGRlZmluZVByb2Nlc3NFbnZOb2RlRW52KSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWRlZmluZVByb2Nlc3NFbnZOb2RlRW52JywgZGVmaW5lUHJvY2Vzc0Vudk5vZGVFbnYpO1xuICBpZihkZXZ0b29sKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWRldnRvb2wnLCBkZXZ0b29sKTtcbiAgaWYoZGlzYWJsZUludGVycHJldCkgd2VicGFja09wdGlvbnMucHVzaCgnLS1kaXNhYmxlSW50ZXJwcmV0Jyk7XG4gIC8vIFBhc3MgZW50cnkgZGlyZWN0bHkgYXMgQ0xJIGZsYWdcbiAgaWYoZW50cnlWYWx1ZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1lbnRyeScsIGVudHJ5VmFsdWUudG9TdHJpbmcoKSk7XG4gIGlmKGVudikgd2VicGFja09wdGlvbnMucHVzaCgnLS1lbnYnLCBlbnYpO1xuICBpZihmYWlsT25XYXJuaW5ncykgd2VicGFja09wdGlvbnMucHVzaCgnLS1mYWlsT25XYXJuaW5ncycpO1xuICBpZihqc29uKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWpzb24nLCBqc29uKTtcbiAgaWYobW9kZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1tb2RlJywgbW9kZSk7XG4gIGlmKG1lcmdlKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW1lcmdlJyk7XG4gIGlmKG5hbWUpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbmFtZScsIG5hbWUpO1xuICBpZihub0RldnRvb2wpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9EZXZ0b29sJyk7XG4gIGlmKG5vU3RhdHMpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9TdGF0cycpO1xuICBpZihub1RhcmdldCkgd2VicGFja09wdGlvbnMucHVzaCgnLS1ub1RhcmdldCcpO1xuICBpZihub1dhdGNoKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW5vV2F0Y2gnKTtcbiAgaWYobm9XYXRjaE9wdGlvbnNTdGRpbikgd2VicGFja09wdGlvbnMucHVzaCgnLS1ub1dhdGNoT3B0aW9uc1N0ZGluJyk7XG4gIGlmKG5vZGVFbnYpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9kZUVudicsIG5vZGVFbnYpO1xuICBpZihvdXRwdXRQYXRoKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW91dHB1dC1wYXRoJywgb3V0cHV0UGF0aC50b1N0cmluZygpKTsgLy8gQ29udmVydCB0byBzdHJpbmdcbiAgaWYoc3RhdHMpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tc3RhdHMnLCBzdGF0cyk7XG4gIGlmKHRhcmdldCkgd2VicGFja09wdGlvbnMucHVzaCgnLS10YXJnZXQnLCB0YXJnZXQpO1xuICBpZih3YXRjaCkgd2VicGFja09wdGlvbnMucHVzaCgnLS13YXRjaCcpO1xuICBpZih3YXRjaE9wdGlvbnNTdGRpbikgd2VicGFja09wdGlvbnMucHVzaCgnLS13YXRjaE9wdGlvbnNTdGRpbicpO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qge3dlYnBhY2tQYXRofSA9IHJlc29sdmVXZWJwYWNrUGF0aHMoY3VycmVudERpcm5hbWUpO1xuXG4gICAgbGV0IGV4ZWN1dGFibGVQYXRoID0gd2VicGFja1BhdGg7XG4gICAgbGV0IGZpbmFsV2VicGFja09wdGlvbnM6IHN0cmluZ1tdO1xuXG4gICAgaWYod2VicGFja1BhdGggPT09ICducHgnKSB7XG4gICAgICBmaW5hbFdlYnBhY2tPcHRpb25zID0gWyd3ZWJwYWNrJywgLi4ud2VicGFja09wdGlvbnNdO1xuICAgIH0gZWxzZSBpZih3ZWJwYWNrUGF0aC5lbmRzV2l0aCgnLmpzJykpIHtcbiAgICAgIGV4ZWN1dGFibGVQYXRoID0gJ25vZGUnO1xuICAgICAgZmluYWxXZWJwYWNrT3B0aW9ucyA9IFt3ZWJwYWNrUGF0aCwgLi4ud2VicGFja09wdGlvbnNdO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaW5hbFdlYnBhY2tPcHRpb25zID0gWy4uLndlYnBhY2tPcHRpb25zXTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnd2VicGFja1BhdGg6Jywgd2VicGFja1BhdGgpO1xuICAgIGNvbnNvbGUubG9nKCdleGVjdXRhYmxlUGF0aDonLCBleGVjdXRhYmxlUGF0aCk7XG4gICAgY29uc29sZS5sb2coJ2ZpbmFsV2VicGFja09wdGlvbnM6JywgSlNPTi5zdHJpbmdpZnkoZmluYWxXZWJwYWNrT3B0aW9ucykpO1xuICAgIGNvbnNvbGUubG9nKCdmaW5hbFdlYnBhY2tPcHRpb25zIHR5cGU6JywgQXJyYXkuaXNBcnJheShmaW5hbFdlYnBhY2tPcHRpb25zKSA/ICdBcnJheScgOiB0eXBlb2YgZmluYWxXZWJwYWNrT3B0aW9ucyk7XG5cbiAgICAvLyBNYWtlIHN1cmUgd2UncmUgcGFzc2luZyBhbiBhcnJheSBvZiBzdHJpbmdzIHRvIGV4ZWNhXG4gICAgY29uc3QgY2hpbGRQcm9jZXNzID0gZXhlY2EoZXhlY3V0YWJsZVBhdGgsIGZpbmFsV2VicGFja09wdGlvbnMsIHtlbmNvZGluZzogJ3V0ZjgnLCBzdGRpbzogJ3BpcGUnfSk7XG5cbiAgICBsZXQgYnVpbGRDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICBsZXQgYnVpbGRTdGF0cyA9IHtcbiAgICAgIG1vZHVsZXM6IDAsXG4gICAgICBhc3NldHM6IDAsXG4gICAgICBzaXplOiAnMCBCJ1xuICAgIH07XG5cbiAgICBjaGlsZFByb2Nlc3Muc3Rkb3V0Py5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGRhdGEudG9TdHJpbmcoKTtcblxuICAgICAgaGFuZGxlV2VicGFja1Byb2dyZXNzKG91dHB1dCwgc3Bpbm5lciwgcXVpZXQsICfwn4+X77iPJywgJ1dlYnBhY2sgQnVpbGRpbmcnKTtcblxuICAgICAgaWYoIWJ1aWxkQ29tcGxldGVkICYmIG91dHB1dC5pbmNsdWRlcygnY29tcGlsZWQgc3VjY2Vzc2Z1bGx5JykpIHtcbiAgICAgICAgYnVpbGRDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0J1aWxkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhJyk7XG5cbiAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBtb2R1bGVzLyk7XG4gICAgICAgIGNvbnN0IGFzc2V0TWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBhc3NldHMvKTtcbiAgICAgICAgY29uc3Qgc2l6ZU1hdGNoID0gb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgc3RhdHVzIChbXFxkLl0rIFxcdyspLykgfHwgb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgcGF0aC4qPyhbXFxkLl0rIFxcdyspLyk7XG5cbiAgICAgICAgaWYobW9kdWxlTWF0Y2gpIGJ1aWxkU3RhdHMubW9kdWxlcyA9IHBhcnNlSW50KG1vZHVsZU1hdGNoWzFdLCAxMCk7XG4gICAgICAgIGlmKGFzc2V0TWF0Y2gpIGJ1aWxkU3RhdHMuYXNzZXRzID0gcGFyc2VJbnQoYXNzZXRNYXRjaFsxXSwgMTApO1xuICAgICAgICBpZihzaXplTWF0Y2gpIGJ1aWxkU3RhdHMuc2l6ZSA9IHNpemVNYXRjaFsxXTtcblxuICAgICAgICBkaXNwbGF5QnVpbGRTdGF0dXMoJ3dlYnBhY2snLCBMZXhDb25maWcuY29uZmlnLm91dHB1dEZ1bGxQYXRoIHx8ICdsaWInLCBxdWlldCwgYnVpbGRTdGF0cyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjaGlsZFByb2Nlc3Muc3RkZXJyPy5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGRhdGEudG9TdHJpbmcoKTtcblxuICAgICAgaGFuZGxlV2VicGFja1Byb2dyZXNzKG91dHB1dCwgc3Bpbm5lciwgcXVpZXQsICfwn4+X77iPJywgJ1dlYnBhY2sgQnVpbGRpbmcnKTtcblxuICAgICAgaWYoIWJ1aWxkQ29tcGxldGVkICYmIG91dHB1dC5pbmNsdWRlcygnY29tcGlsZWQgc3VjY2Vzc2Z1bGx5JykpIHtcbiAgICAgICAgYnVpbGRDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0J1aWxkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhJyk7XG5cbiAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBtb2R1bGVzLyk7XG4gICAgICAgIGNvbnN0IGFzc2V0TWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBhc3NldHMvKTtcbiAgICAgICAgY29uc3Qgc2l6ZU1hdGNoID0gb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgc3RhdHVzIChbXFxkLl0rIFxcdyspLykgfHwgb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgcGF0aC4qPyhbXFxkLl0rIFxcdyspLyk7XG5cbiAgICAgICAgaWYobW9kdWxlTWF0Y2gpIGJ1aWxkU3RhdHMubW9kdWxlcyA9IHBhcnNlSW50KG1vZHVsZU1hdGNoWzFdLCAxMCk7XG4gICAgICAgIGlmKGFzc2V0TWF0Y2gpIGJ1aWxkU3RhdHMuYXNzZXRzID0gcGFyc2VJbnQoYXNzZXRNYXRjaFsxXSwgMTApO1xuICAgICAgICBpZihzaXplTWF0Y2gpIGJ1aWxkU3RhdHMuc2l6ZSA9IHNpemVNYXRjaFsxXTtcblxuICAgICAgICBkaXNwbGF5QnVpbGRTdGF0dXMoJ3dlYnBhY2snLCBMZXhDb25maWcuY29uZmlnLm91dHB1dEZ1bGxQYXRoIHx8ICdsaWInLCBxdWlldCwgYnVpbGRTdGF0cyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhd2FpdCBjaGlsZFByb2Nlc3M7XG5cbiAgICBpZighYnVpbGRDb21wbGV0ZWQpIHtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZCgnQnVpbGQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSEnKTtcbiAgICAgIGRpc3BsYXlCdWlsZFN0YXR1cygnd2VicGFjaycsIExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGggfHwgJ2xpYicsIHF1aWV0LCBidWlsZFN0YXRzKTtcbiAgICB9XG5cbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIHNwaW5uZXIuZmFpbCgnQnVpbGQgZmFpbGVkLicpO1xuXG4gICAgaWYoY21kLmFzc2lzdCkge1xuICAgICAgc3Bpbm5lci5zdGFydCgnQUkgaXMgYW5hbHl6aW5nIHRoZSB3ZWJwYWNrIGVycm9yLi4uJyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGFpRnVuY3Rpb24oe1xuICAgICAgICAgIHByb21wdDogYEZpeCB0aGlzIHdlYnBhY2sgYnVpbGQgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1cXG5cXG5FcnJvciBkZXRhaWxzOlxcbiR7ZXJyb3IudG9TdHJpbmcoKX1cXG5cXG5Db25maWd1cmF0aW9uIHVzZWQ6XFxuJHtKU09OLnN0cmluZ2lmeSh3ZWJwYWNrT3B0aW9ucywgbnVsbCwgMil9YCxcbiAgICAgICAgICB0YXNrOiAnaGVscCcsXG4gICAgICAgICAgY29udGV4dDogdHJ1ZSxcbiAgICAgICAgICBxdWlldFxuICAgICAgICB9KTtcblxuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0FJIGFuYWx5c2lzIGNvbXBsZXRlJyk7XG4gICAgICB9IGNhdGNoKGFpRXJyb3IpIHtcbiAgICAgICAgc3Bpbm5lci5mYWlsKCdDb3VsZCBub3QgZ2VuZXJhdGUgQUkgYXNzaXN0YW5jZScpO1xuICAgICAgICBpZighcXVpZXQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdBSSBhc3Npc3RhbmNlIGVycm9yOicsIGFpRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZCA9IGFzeW5jIChjbWQ6IEJ1aWxkT3B0aW9ucywgY2FsbGJhY2s6IEJ1aWxkQ2FsbGJhY2sgPSAoKSA9PiAoe30pKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge1xuICAgIGJ1bmRsZXIgPSAnd2VicGFjaycsXG4gICAgY2xpTmFtZSA9ICdMZXgnLFxuICAgIHF1aWV0ID0gZmFsc2UsXG4gICAgcmVtb3ZlID0gZmFsc2UsXG4gICAgdGVzdCA9IGZhbHNlLFxuICAgIHRyYW5zbGF0aW9ucyA9IGZhbHNlLFxuICAgIHZhcmlhYmxlcyA9ICd7fSdcbiAgfSA9IGNtZDtcblxuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgbG9nKGAke2NsaU5hbWV9IGJ1aWxkaW5nLi4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgYXdhaXQgTGV4Q29uZmlnLnBhcnNlQ29uZmlnKGNtZCk7XG5cbiAgY29uc3Qge291dHB1dEZ1bGxQYXRoLCB1c2VUeXBlc2NyaXB0fSA9IExleENvbmZpZy5jb25maWc7XG5cbiAgY2hlY2tMaW5rZWRNb2R1bGVzKCk7XG5cbiAgbGV0IHZhcmlhYmxlc09iajogb2JqZWN0ID0ge05PREVfRU5WOiAncHJvZHVjdGlvbid9O1xuXG4gIGlmKHZhcmlhYmxlcykge1xuICAgIHRyeSB7XG4gICAgICB2YXJpYWJsZXNPYmogPSBKU09OLnBhcnNlKHZhcmlhYmxlcyk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgb3B0aW9uIGlzIG5vdCBhIHZhbGlkIEpTT04gb2JqZWN0LmAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzLmVudiA9IHsuLi5wcm9jZXNzLmVudiwgLi4udmFyaWFibGVzT2JqfTtcblxuICAvLyBJZiBpbiB0ZXN0IG1vZGUsIGV4aXQgZWFybHlcbiAgaWYodGVzdCkge1xuICAgIGxvZygnVGVzdCBtb2RlOiBCdWlsZCBlbnZpcm9ubWVudCBsb2FkZWQsIGV4aXRpbmcnLCAnaW5mbycsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8vIFByb2Nlc3MgdHJhbnNsYXRpb25zIGlmIGZsYWcgaXMgZW5hYmxlZCAoYmVmb3JlIGJ1aWxkaW5nKVxuICBpZih0cmFuc2xhdGlvbnMpIHtcbiAgICBzcGlubmVyLnN0YXJ0KCdQcm9jZXNzaW5nIHRyYW5zbGF0aW9ucy4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBMZXhDb25maWcuY29uZmlnLnNvdXJjZUZ1bGxQYXRoIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgICBjb25zdCBvdXRwdXRQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRGdWxsUGF0aCB8fCAnbGliJztcblxuICAgICAgYXdhaXQgcHJvY2Vzc1RyYW5zbGF0aW9ucyhzb3VyY2VQYXRoLCBvdXRwdXRQYXRoLCBxdWlldCk7XG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ1RyYW5zbGF0aW9ucyBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICAgIH0gY2F0Y2godHJhbnNsYXRpb25FcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBGYWlsZWQgdG8gcHJvY2VzcyB0cmFuc2xhdGlvbnM6ICR7dHJhbnNsYXRpb25FcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIHByb2Nlc3MgdHJhbnNsYXRpb25zLicpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBzcGlubmVyLnN0YXJ0KCdCdWlsZGluZyBjb2RlLi4uJyk7XG5cbiAgaWYocmVtb3ZlKSB7XG4gICAgYXdhaXQgcmVtb3ZlRmlsZXMob3V0cHV0RnVsbFBhdGggfHwgJycpO1xuICB9XG5cbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIGNvbnN0IGNvbXBpbGVDb25maWdQYXRoID0gZ2V0VHlwZVNjcmlwdENvbmZpZ1BhdGgoJ3RzY29uZmlnLmJ1aWxkLmpzb24nKTtcbiAgICBpZihleGlzdHNTeW5jKGNvbXBpbGVDb25maWdQYXRoKSkge1xuICAgICAgbG9nKCdVc2luZyB0c2NvbmZpZy5idWlsZC5qc29uIGZvciBidWlsZC4uLicsICdpbmZvJywgcXVpZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBMZXhDb25maWcuY2hlY2tDb21waWxlVHlwZXNjcmlwdENvbmZpZygpO1xuICAgIH1cbiAgfVxuXG4gIGxldCBidWlsZFJlc3VsdCA9IDA7XG5cbiAgaWYoYnVuZGxlciA9PT0gJ3N3YycpIHtcbiAgICBidWlsZFJlc3VsdCA9IGF3YWl0IGJ1aWxkV2l0aFNXQyhzcGlubmVyLCBjbWQsIChzdGF0dXMpID0+IHtcbiAgICAgIGJ1aWxkUmVzdWx0ID0gc3RhdHVzO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGJ1aWxkUmVzdWx0ID0gYXdhaXQgYnVpbGRXaXRoV2VicGFjayhzcGlubmVyLCBjbWQsIChzdGF0dXMpID0+IHtcbiAgICAgIGJ1aWxkUmVzdWx0ID0gc3RhdHVzO1xuICAgIH0pO1xuICB9XG5cbiAgaWYoYnVpbGRSZXN1bHQgPT09IDAgJiYgY21kLmFuYWx5emUpIHtcbiAgICBzcGlubmVyLnN0YXJ0KCdBSSBpcyBhbmFseXppbmcgdGhlIGJ1aWxkIG91dHB1dCBmb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0cyA9IHtcbiAgICAgICAgb3V0cHV0UGF0aDogTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRGdWxsUGF0aCxcbiAgICAgICAgZW50cnlQb2ludHM6IGJ1bmRsZXIgPT09ICdzd2MnID9cbiAgICAgICAgICBgU291cmNlIGZpbGVzOiAke0xleENvbmZpZy5jb25maWcuc291cmNlRnVsbFBhdGh9LyoqLyoue3RzLGpzfWAgOlxuICAgICAgICAgIExleENvbmZpZy5jb25maWcud2VicGFjaz8uZW50cnkgfHwgJ1Vua25vd24gZW50cnkgcG9pbnRzJ1xuICAgICAgfTtcblxuICAgICAgYXdhaXQgYWlGdW5jdGlvbih7XG4gICAgICAgIHByb21wdDogYEFuYWx5emUgdGhpcyBidWlsZCBmb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXM6XG5cbkJ1aWxkIFR5cGU6ICR7YnVuZGxlcn1cbkZvcm1hdDogJHtjbWQuZm9ybWF0IHx8ICdkZWZhdWx0J31cbkVudmlyb25tZW50OiAke0xleENvbmZpZy5jb25maWcudGFyZ2V0RW52aXJvbm1lbnR9XG4ke0pTT04uc3RyaW5naWZ5KHN0YXRzLCBudWxsLCAyKX1cblxuV2hhdCBhcmUgdGhlIGtleSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBmb3IgdGhpcyBidWlsZCBjb25maWd1cmF0aW9uPyBDb25zaWRlcjpcbjEuIEJ1bmRsZSBzaXplIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzXG4yLiBDb2RlIHNwbGl0dGluZyByZWNvbW1lbmRhdGlvbnNcbjMuIFRyZWUtc2hha2luZyBpbXByb3ZlbWVudHNcbjQuIFBlcmZvcm1hbmNlIGVuaGFuY2VtZW50c1xuNS4gRGVwZW5kZW5jeSBvcHRpbWl6YXRpb25zYCxcbiAgICAgICAgdGFzazogJ29wdGltaXplJyxcbiAgICAgICAgY29udGV4dDogdHJ1ZSxcbiAgICAgICAgcXVpZXRcbiAgICAgIH0pO1xuXG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ0FJIGJ1aWxkIGFuYWx5c2lzIGNvbXBsZXRlJyk7XG4gICAgfSBjYXRjaChhaUVycm9yKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0NvdWxkIG5vdCBnZW5lcmF0ZSBBSSBvcHRpbWl6YXRpb24gYW5hbHlzaXMnKTtcbiAgICAgIGlmKCFxdWlldCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdBSSBhbmFseXNpcyBlcnJvcjonLCBhaUVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZihidWlsZFJlc3VsdCA9PT0gMCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb3B5Q29uZmlndXJlZEZpbGVzKHNwaW5uZXIsIExleENvbmZpZy5jb25maWcsIHF1aWV0KTtcbiAgICB9IGNhdGNoKGNvcHlFcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBGYWlsZWQgdG8gY29weSBjb25maWd1cmVkIGZpbGVzOiAke2NvcHlFcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgY2FsbGJhY2soYnVpbGRSZXN1bHQpO1xuICByZXR1cm4gYnVpbGRSZXN1bHQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBidWlsZDtcbiJdLCJuYW1lcyI6WyJ0cmFuc2Zvcm0iLCJleGVjYSIsImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJzeW5jIiwiZ2xvYlN5bmMiLCJkaXJuYW1lIiwicmVzb2x2ZSIsInBhdGhSZXNvbHZlIiwiTGV4Q29uZmlnIiwiZ2V0VHlwZVNjcmlwdENvbmZpZ1BhdGgiLCJjaGVja0xpbmtlZE1vZHVsZXMiLCJjb3B5Q29uZmlndXJlZEZpbGVzIiwiY3JlYXRlU3Bpbm5lciIsImhhbmRsZVdlYnBhY2tQcm9ncmVzcyIsInJlbW92ZUZpbGVzIiwicmVzb2x2ZVdlYnBhY2tQYXRocyIsImdldExleFBhY2thZ2VKc29uUGF0aCIsImxvZyIsInByb2Nlc3NUcmFuc2xhdGlvbnMiLCJhaUZ1bmN0aW9uIiwiYm94ZW4iLCJjaGFsayIsImN1cnJlbnRGaWxlbmFtZSIsImN1cnJlbnREaXJuYW1lIiwiZXZhbCIsInByb2Nlc3MiLCJjd2QiLCJkaXNwbGF5QnVpbGRTdGF0dXMiLCJidW5kbGVyIiwib3V0cHV0UGF0aCIsInF1aWV0Iiwic3RhdHMiLCJzdGF0c0luZm8iLCJtb2R1bGVzIiwiYXNzZXRzIiwiZ3JlZW4iLCJjeWFuIiwic2l6ZSIsInN0YXR1c0JveCIsImJvbGQiLCJ1bmRlcmxpbmUiLCJ5ZWxsb3ciLCJwYWRkaW5nIiwibWFyZ2luIiwiYm9yZGVyU3R5bGUiLCJib3JkZXJDb2xvciIsImJhY2tncm91bmRDb2xvciIsImNvbnNvbGUiLCJidWlsZFdpdGhTV0MiLCJzcGlubmVyIiwiY29tbWFuZE9wdGlvbnMiLCJjYWxsYmFjayIsImNsaU5hbWUiLCJmb3JtYXQiLCJzb3VyY2VQYXRoIiwid2F0Y2giLCJvdXRwdXRGdWxsUGF0aCIsInNvdXJjZUZ1bGxQYXRoIiwic3djIiwic3djQ29uZmlnIiwidGFyZ2V0RW52aXJvbm1lbnQiLCJ1c2VHcmFwaFFsIiwidXNlVHlwZXNjcmlwdCIsImNvbmZpZyIsInNvdXJjZURpciIsImdsb2JPcHRpb25zIiwiZG90Iiwibm9kaXIiLCJub3NvcnQiLCJ0c0ZpbGVzIiwianNGaWxlcyIsInNvdXJjZUZpbGVzIiwib3V0cHV0RGlyIiwic3RhcnQiLCJmaWxlIiwicmVwbGFjZSIsIm91dHB1dERpclBhdGgiLCJta2RpclN5bmMiLCJyZWN1cnNpdmUiLCJzb3VyY2VDb2RlIiwiaXNUU1giLCJlbmRzV2l0aCIsInN3Y09wdGlvbnMiLCJmaWxlbmFtZSIsImpzYyIsInBhcnNlciIsInN5bnRheCIsInRzeCIsImRlY29yYXRvcnMiLCJkeW5hbWljSW1wb3J0IiwidGFyZ2V0IiwicmVhY3QiLCJydW50aW1lIiwibW9kdWxlIiwidHlwZSIsInJlc3VsdCIsIndyaXRlRmlsZVN5bmMiLCJjb2RlIiwic3VjY2VlZCIsImVycm9yIiwiZmFpbCIsImJ1aWxkV2l0aFdlYnBhY2siLCJjbWQiLCJhbmFseXplIiwiY29uZmlnTmFtZSIsImRlZmluZVByb2Nlc3NFbnZOb2RlRW52IiwiZGV2dG9vbCIsImRpc2FibGVJbnRlcnByZXQiLCJlbnRyeSIsImVudiIsImZhaWxPbldhcm5pbmdzIiwianNvbiIsIm1lcmdlIiwibW9kZSIsIm5hbWUiLCJub2RlRW52Iiwibm9EZXZ0b29sIiwibm9TdGF0cyIsIm5vVGFyZ2V0Iiwibm9XYXRjaCIsIm5vV2F0Y2hPcHRpb25zU3RkaW4iLCJ3YXRjaE9wdGlvbnNTdGRpbiIsImVudHJ5VmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJ3ZWJwYWNrQ29uZmlnIiwiaXNSZWxhdGl2ZUNvbmZpZyIsInN1YnN0ciIsInByb2plY3RDb25maWdQYXRoIiwicHJvamVjdENvbmZpZ1BhdGhUcyIsImhhc1Byb2plY3RDb25maWciLCJyZXNvbHZlZENvbmZpZyIsImxleFBhY2thZ2VQYXRoIiwibGV4UGFja2FnZURpciIsImxleFdlYnBhY2tDb25maWciLCJ3ZWJwYWNrT3B0aW9ucyIsInB1c2giLCJ0b1N0cmluZyIsIndlYnBhY2tQYXRoIiwiZXhlY3V0YWJsZVBhdGgiLCJmaW5hbFdlYnBhY2tPcHRpb25zIiwiSlNPTiIsInN0cmluZ2lmeSIsImNoaWxkUHJvY2VzcyIsImVuY29kaW5nIiwic3RkaW8iLCJidWlsZENvbXBsZXRlZCIsImJ1aWxkU3RhdHMiLCJzdGRvdXQiLCJvbiIsImRhdGEiLCJvdXRwdXQiLCJpbmNsdWRlcyIsIm1vZHVsZU1hdGNoIiwibWF0Y2giLCJhc3NldE1hdGNoIiwic2l6ZU1hdGNoIiwicGFyc2VJbnQiLCJzdGRlcnIiLCJtZXNzYWdlIiwiYXNzaXN0IiwicHJvbXB0IiwidGFzayIsImNvbnRleHQiLCJhaUVycm9yIiwiYnVpbGQiLCJyZW1vdmUiLCJ0ZXN0IiwidHJhbnNsYXRpb25zIiwidmFyaWFibGVzIiwicGFyc2VDb25maWciLCJ2YXJpYWJsZXNPYmoiLCJOT0RFX0VOViIsInBhcnNlIiwidHJhbnNsYXRpb25FcnJvciIsImNvbXBpbGVDb25maWdQYXRoIiwiY2hlY2tDb21waWxlVHlwZXNjcmlwdENvbmZpZyIsImJ1aWxkUmVzdWx0Iiwic3RhdHVzIiwiZW50cnlQb2ludHMiLCJ3ZWJwYWNrIiwiY29weUVycm9yIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxTQUFTLFFBQU8sWUFBWTtBQUNwQyxTQUFRQyxLQUFLLFFBQU8sUUFBUTtBQUM1QixTQUFRQyxVQUFVLEVBQUVDLFlBQVksUUFBTyxLQUFLO0FBQzVDLFNBQVFDLFFB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
482
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9idWlsZC9idWlsZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHt0cmFuc2Zvcm19IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQge2V4ZWNhfSBmcm9tICdleGVjYSc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCB7ZGlybmFtZSwgcmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZX0gZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7TGV4Q29uZmlnfSBmcm9tICcuLi8uLi9MZXhDb25maWcuanMnO1xuaW1wb3J0IHtjaGVja0xpbmtlZE1vZHVsZXMsIGNvcHlDb25maWd1cmVkRmlsZXMsIGNyZWF0ZVNwaW5uZXIsIGNyZWF0ZVByb2dyZXNzQmFyLCBoYW5kbGVXZWJwYWNrUHJvZ3Jlc3MsIHJlbW92ZUZpbGVzfSBmcm9tICcuLi8uLi91dGlscy9hcHAuanMnO1xuaW1wb3J0IHtcbiAgcmVzb2x2ZVdlYnBhY2tQYXRocyxcbiAgZ2V0TGV4UGFja2FnZUpzb25QYXRoLFxuICByZXNvbHZlQmluYXJ5UGF0aFxufSBmcm9tICcuLi8uLi91dGlscy9maWxlLmpzJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi8uLi91dGlscy9sb2cuanMnO1xuaW1wb3J0IHtwcm9jZXNzVHJhbnNsYXRpb25zfSBmcm9tICcuLi8uLi91dGlscy90cmFuc2xhdGlvbnMuanMnO1xuaW1wb3J0IHthaUZ1bmN0aW9ufSBmcm9tICcuLi9haS9haS5qcyc7XG5pbXBvcnQgYm94ZW4gZnJvbSAnYm94ZW4nO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcblxubGV0IGN1cnJlbnRGaWxlbmFtZTogc3RyaW5nO1xubGV0IGN1cnJlbnREaXJuYW1lOiBzdHJpbmc7XG5cbnRyeSB7XG4gIGN1cnJlbnRGaWxlbmFtZSA9IGV2YWwoJ3JlcXVpcmUoXCJ1cmxcIikuZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpJyk7XG4gIGN1cnJlbnREaXJuYW1lID0gZGlybmFtZShjdXJyZW50RmlsZW5hbWUpO1xufSBjYXRjaCB7XG4gIGN1cnJlbnRGaWxlbmFtZSA9IHByb2Nlc3MuY3dkKCk7XG4gIGN1cnJlbnREaXJuYW1lID0gcHJvY2Vzcy5jd2QoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZE9wdGlvbnMge1xuICByZWFkb25seSBhc3Npc3Q/OiBib29sZWFuO1xuICByZWFkb25seSBhbmFseXplPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgYnVuZGxlcj86ICd3ZWJwYWNrJyB8ICdzd2MnO1xuICByZWFkb25seSBjbGlOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBlbnRyeT86IHN0cmluZzsgLy8gPC0tIGFkZCBlbnRyeVxuICByZWFkb25seSBmb3JtYXQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dHB1dFBhdGg/OiBzdHJpbmc7IC8vIDwtLSBhbHJlYWR5IHByZXNlbnRcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSByZW1vdmU/OiBib29sZWFuO1xuICByZWFkb25seSBzb3VyY2VQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSB0ZXN0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdHJhbnNsYXRpb25zPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdmFyaWFibGVzPzogc3RyaW5nO1xuICByZWFkb25seSB3YXRjaD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIEJ1aWxkQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmNvbnN0IGRpc3BsYXlCdWlsZFN0YXR1cyA9IChidW5kbGVyOiBzdHJpbmcsIG91dHB1dFBhdGg6IHN0cmluZywgcXVpZXQ6IGJvb2xlYW4sIHN0YXRzPzoge21vZHVsZXM/OiBudW1iZXI7IGFzc2V0cz86IG51bWJlcjsgc2l6ZT86IHN0cmluZ30pID0+IHtcbiAgaWYocXVpZXQpIHJldHVybjtcblxuICBsZXQgc3RhdHNJbmZvID0gJyc7XG4gIGlmKHN0YXRzICYmIHN0YXRzLm1vZHVsZXMgJiYgc3RhdHMuYXNzZXRzKSB7XG4gICAgc3RhdHNJbmZvID0gYFxcbiR7Y2hhbGsuZ3JlZW4oJ01vZHVsZXM6Jyl9ICAgICR7Y2hhbGsuY3lhbihzdGF0cy5tb2R1bGVzKX1cXG5gICtcbiAgICAgIGAke2NoYWxrLmdyZWVuKCdBc3NldHM6Jyl9ICAgICAke2NoYWxrLmN5YW4oc3RhdHMuYXNzZXRzKX1cXG5gICtcbiAgICAgIGAke2NoYWxrLmdyZWVuKCdTaXplOicpfSAgICAgICAke2NoYWxrLmN5YW4oc3RhdHMuc2l6ZSl9XFxuYDtcbiAgfVxuXG4gIGNvbnN0IHN0YXR1c0JveCA9IGJveGVuKFxuICAgIGAke2NoYWxrLmN5YW4uYm9sZCgn8J+Pl++4jyAgQnVpbGQgQ29tcGxldGVkIFN1Y2Nlc3NmdWxseScpfVxcblxcbmAgK1xuICAgIGAke2NoYWxrLmdyZWVuKCdCdW5kbGVyOicpfSAgICAke2NoYWxrLmN5YW4oYnVuZGxlcil9XFxuYCArXG4gICAgYCR7Y2hhbGsuZ3JlZW4oJ091dHB1dDonKX0gICAgICR7Y2hhbGsudW5kZXJsaW5lKG91dHB1dFBhdGgpfSR7c3RhdHNJbmZvfVxcbmAgK1xuICAgIGAke2NoYWxrLnllbGxvdygnUmVhZHkgZm9yIGRlcGxveW1lbnQhIPCfmoAnKX1gLFxuICAgIHtcbiAgICAgIHBhZGRpbmc6IDEsXG4gICAgICBtYXJnaW46IDEsXG4gICAgICBib3JkZXJTdHlsZTogJ3JvdW5kJyxcbiAgICAgIGJvcmRlckNvbG9yOiAnZ3JlZW4nLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzFhMWExYSdcbiAgICB9XG4gICk7XG5cbiAgY29uc29sZS5sb2coJ1xcbicgKyBzdGF0dXNCb3ggKyAnXFxuJyk7XG59O1xuXG4vLyBSZW1vdmVkIGJ1aWxkV2l0aEVzQnVpbGQgZnVuY3Rpb24gLSB1c2luZyBTV0MgaW5zdGVhZFxuXG5leHBvcnQgY29uc3QgYnVpbGRXaXRoU1dDID0gYXN5bmMgKHNwaW5uZXIsIGNvbW1hbmRPcHRpb25zOiBCdWlsZE9wdGlvbnMsIGNhbGxiYWNrOiBCdWlsZENhbGxiYWNrKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgZm9ybWF0ID0gJ2VzbScsXG4gICAgb3V0cHV0UGF0aCxcbiAgICBxdWlldCxcbiAgICBzb3VyY2VQYXRoLFxuICAgIHdhdGNoXG4gIH0gPSBjb21tYW5kT3B0aW9ucztcbiAgY29uc3Qge1xuICAgIG91dHB1dEZ1bGxQYXRoLFxuICAgIHNvdXJjZUZ1bGxQYXRoLFxuICAgIHN3Yzogc3djQ29uZmlnLFxuICAgIHRhcmdldEVudmlyb25tZW50LFxuICAgIHVzZUdyYXBoUWwsXG4gICAgdXNlVHlwZXNjcmlwdFxuICB9ID0gTGV4Q29uZmlnLmNvbmZpZztcbiAgY29uc3Qgc291cmNlRGlyOiBzdHJpbmcgPSBzb3VyY2VQYXRoID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgYC4vJHtzb3VyY2VQYXRofWApIDogc291cmNlRnVsbFBhdGggfHwgJyc7XG5cbiAgY29uc3QgZ2xvYk9wdGlvbnMgPSB7XG4gICAgY3dkOiBzb3VyY2VEaXIsXG4gICAgZG90OiBmYWxzZSxcbiAgICBub2RpcjogdHJ1ZSxcbiAgICBub3NvcnQ6IHRydWUsXG4gICAgYWJzb2x1dGU6IHRydWVcbiAgfTtcbiAgY29uc3QgdHNGaWxlczogc3RyaW5nW10gPSBnbG9iU3luYyhgKiovISgqLnNwZWN8Ki50ZXN0KS50cypgLCBnbG9iT3B0aW9ucyk7XG4gIGNvbnN0IGpzRmlsZXM6IHN0cmluZ1tdID0gZ2xvYlN5bmMoYCoqLyEoKi5zcGVjfCoudGVzdCkuanNgLCBnbG9iT3B0aW9ucyk7XG4gIGNvbnN0IHNvdXJjZUZpbGVzOiBzdHJpbmdbXSA9IFsuLi50c0ZpbGVzLCAuLi5qc0ZpbGVzXTtcblxuICBjb25zdCBvdXRwdXREaXI6IHN0cmluZyA9IG91dHB1dFBhdGggfHwgb3V0cHV0RnVsbFBhdGggfHwgJyc7XG5cbiAgdHJ5IHtcbiAgICBzcGlubmVyLnN0YXJ0KCdCdWlsZGluZyB3aXRoIFNXQy4uLicpO1xuXG4gICAgZm9yKGNvbnN0IGZpbGUgb2Ygc291cmNlRmlsZXMpIHtcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBwYXRoUmVzb2x2ZShzb3VyY2VEaXIsIGZpbGUpO1xuICAgICAgY29uc3Qgb3V0cHV0UGF0aCA9IHBhdGhSZXNvbHZlKG91dHB1dERpciwgZmlsZS5yZXBsYWNlKC9cXC4odHN8dHN4KSQvLCAnLmpzJykpO1xuICAgICAgY29uc3Qgb3V0cHV0RGlyUGF0aCA9IGRpcm5hbWUob3V0cHV0UGF0aCk7XG5cbiAgICAgIGlmKCFleGlzdHNTeW5jKG91dHB1dERpclBhdGgpKSB7XG4gICAgICAgIGNvbnN0IHtta2RpclN5bmN9ID0gYXdhaXQgaW1wb3J0KCdmcycpO1xuICAgICAgICBta2RpclN5bmMob3V0cHV0RGlyUGF0aCwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VyY2VDb2RlID0gcmVhZEZpbGVTeW5jKHNvdXJjZVBhdGgsICd1dGY4Jyk7XG4gICAgICBjb25zdCBpc1RTWCA9IGZpbGUuZW5kc1dpdGgoJy50c3gnKTtcbiAgICAgIGNvbnN0IHN3Y09wdGlvbnMgPSB7XG4gICAgICAgIGZpbGVuYW1lOiBmaWxlLFxuICAgICAgICAuLi5zd2NDb25maWcsXG4gICAgICAgIGpzYzoge1xuICAgICAgICAgIC4uLnN3Y0NvbmZpZz8uanNjLFxuICAgICAgICAgIHBhcnNlcjoge1xuICAgICAgICAgICAgc3ludGF4OiAndHlwZXNjcmlwdCcgYXMgY29uc3QsXG4gICAgICAgICAgICB0c3g6IGlzVFNYLFxuICAgICAgICAgICAgZGVjb3JhdG9yczogc3djQ29uZmlnPy5qc2M/LnBhcnNlcj8uZGVjb3JhdG9ycyA/PyB0cnVlLFxuICAgICAgICAgICAgZHluYW1pY0ltcG9ydDogc3djQ29uZmlnPy5qc2M/LnBhcnNlcj8uZHluYW1pY0ltcG9ydCA/PyB0cnVlLFxuICAgICAgICAgICAgY29tbWVudHM6IGZhbHNlIC8vIFJlbW92ZSBjb21tZW50cyBkdXJpbmcgdHJhbnNmb3JtYXRpb25cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRhcmdldDogc3djQ29uZmlnPy5qc2M/LnRhcmdldCA/PyAnZXMyMDIwJyxcbiAgICAgICAgICB0cmFuc2Zvcm06IGlzVFNYID8ge1xuICAgICAgICAgICAgLi4uc3djQ29uZmlnPy5qc2M/LnRyYW5zZm9ybSxcbiAgICAgICAgICAgIHJlYWN0OiB7XG4gICAgICAgICAgICAgIHJ1bnRpbWU6ICdhdXRvbWF0aWMnIGFzIGNvbnN0LFxuICAgICAgICAgICAgICAuLi5zd2NDb25maWc/LmpzYz8udHJhbnNmb3JtPy5yZWFjdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gOiBzd2NDb25maWc/LmpzYz8udHJhbnNmb3JtLFxuICAgICAgICAgIHByZXNlcnZlQWxsQ29tbWVudHM6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIG1vZHVsZToge1xuICAgICAgICAgIC4uLnN3Y0NvbmZpZz8ubW9kdWxlLFxuICAgICAgICAgIHR5cGU6IGZvcm1hdCA9PT0gJ2NqcycgPyAnY29tbW9uanMnIGFzIGNvbnN0IDogKHN3Y0NvbmZpZz8ubW9kdWxlPy50eXBlIGFzICdlczYnIHx8ICdlczYnKVxuICAgICAgICB9LFxuICAgICAgICBtaW5pZnk6IGZhbHNlLFxuICAgICAgICBzb3VyY2VNYXBzOiBzd2NDb25maWc/LnNvdXJjZU1hcHMgfHwgJ2lubGluZSdcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybShzb3VyY2VDb2RlLCBzd2NPcHRpb25zKTtcblxuICAgICAgY29uc3Qge3dyaXRlRmlsZVN5bmN9ID0gYXdhaXQgaW1wb3J0KCdmcycpO1xuICAgICAgd3JpdGVGaWxlU3luYyhvdXRwdXRQYXRoLCByZXN1bHQuY29kZSk7XG4gICAgfVxuXG4gICAgc3Bpbm5lci5zdWNjZWVkKCdCdWlsZCBjb21wbGV0ZWQgd2l0aCBTV0MnKTtcbiAgICBkaXNwbGF5QnVpbGRTdGF0dXMoJ1NXQycsIG91dHB1dERpciwgcXVpZXQpO1xuICAgIGNhbGxiYWNrKDApO1xuICAgIHJldHVybiAwO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NvbW1hbmRPcHRpb25zLmNsaU5hbWUgfHwgJ0xleCd9IEVycm9yOiBTV0MgYnVpbGQgZmFpbGVkYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIGxvZyhgXFxuRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBpZihlcnJvci5zdGFjaykge1xuICAgICAgICBsb2coYFxcblN0YWNrIFRyYWNlOlxcbiR7ZXJyb3Iuc3RhY2t9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICAvLyBUcnkgdG8gZXh0cmFjdCBmaWxlIGluZm9ybWF0aW9uIGlmIGF2YWlsYWJsZVxuICAgICAgaWYoJ2ZpbGVuYW1lJyBpbiBlcnJvciB8fCAnZmlsZScgaW4gZXJyb3IpIHtcbiAgICAgICAgbG9nKGBcXG5GaWxlOiAkeyhlcnJvciBhcyBhbnkpLmZpbGVuYW1lIHx8IChlcnJvciBhcyBhbnkpLmZpbGV9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNwaW5uZXIuZmFpbCgnQnVpbGQgZmFpbGVkIHdpdGggU1dDJyk7XG4gICAgaWYoIXF1aWV0KSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdcXG5GdWxsIEVycm9yIERldGFpbHM6JywgZXJyb3IpO1xuICAgIH1cbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkV2l0aFdlYnBhY2sgPSBhc3luYyAoc3Bpbm5lciwgY21kLCBjYWxsYmFjaykgPT4ge1xuICBjb25zdCB7XG4gICAgYW5hbHl6ZSxcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZ05hbWUsXG4gICAgZGVmaW5lUHJvY2Vzc0Vudk5vZGVFbnYsXG4gICAgZGV2dG9vbCxcbiAgICBkaXNhYmxlSW50ZXJwcmV0LFxuICAgIGVudHJ5LFxuICAgIGVudixcbiAgICBmYWlsT25XYXJuaW5ncyxcbiAgICBqc29uLFxuICAgIG1lcmdlLFxuICAgIG1vZGUsXG4gICAgbmFtZSxcbiAgICBub2RlRW52LFxuICAgIG5vRGV2dG9vbCxcbiAgICBub1N0YXRzLFxuICAgIG5vVGFyZ2V0LFxuICAgIG5vV2F0Y2gsXG4gICAgbm9XYXRjaE9wdGlvbnNTdGRpbixcbiAgICBvdXRwdXRQYXRoLFxuICAgIHF1aWV0ID0gZmFsc2UsXG4gICAgc3RhdHMsXG4gICAgdGFyZ2V0LFxuICAgIHdhdGNoLFxuICAgIHdhdGNoT3B0aW9uc1N0ZGluXG4gIH0gPSBjbWQ7XG5cbiAgY29uc29sZS5sb2coJ2VudHJ5OicsIGVudHJ5LCAndHlwZTonLCB0eXBlb2YgZW50cnkpO1xuICBjb25zb2xlLmxvZygnb3V0cHV0UGF0aDonLCBvdXRwdXRQYXRoLCAndHlwZTonLCB0eXBlb2Ygb3V0cHV0UGF0aCk7XG5cbiAgY29uc3QgZW50cnlWYWx1ZSA9IEFycmF5LmlzQXJyYXkoZW50cnkpID8gZW50cnlbMF0gOiBlbnRyeTtcblxuICBsZXQgd2VicGFja0NvbmZpZzogc3RyaW5nO1xuXG4gIGlmKGNvbmZpZykge1xuICAgIGNvbnN0IGlzUmVsYXRpdmVDb25maWc6IGJvb2xlYW4gPSBjb25maWcuc3Vic3RyKDAsIDIpID09PSAnLi8nO1xuICAgIHdlYnBhY2tDb25maWcgPSBpc1JlbGF0aXZlQ29uZmlnID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgY29uZmlnKSA6IGNvbmZpZztcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICd3ZWJwYWNrLmNvbmZpZy5qcycpO1xuICAgIGNvbnN0IHByb2plY3RDb25maWdQYXRoVHMgPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnd2VicGFjay5jb25maWcudHMnKTtcbiAgICBjb25zdCBoYXNQcm9qZWN0Q29uZmlnID0gZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aCkgfHwgZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aFRzKTtcblxuICAgIGlmKGhhc1Byb2plY3RDb25maWcpIHtcbiAgICAgIHdlYnBhY2tDb25maWcgPSBleGlzdHNTeW5jKHByb2plY3RDb25maWdQYXRoVHMpID8gcHJvamVjdENvbmZpZ1BhdGhUcyA6IHByb2plY3RDb25maWdQYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7d2VicGFja0NvbmZpZzogcmVzb2x2ZWRDb25maWd9ID0gcmVzb2x2ZVdlYnBhY2tQYXRocyhjdXJyZW50RGlybmFtZSk7XG4gICAgICB3ZWJwYWNrQ29uZmlnID0gcmVzb2x2ZWRDb25maWc7XG4gICAgfVxuICB9XG5cbiAgY29uc29sZS5sb2coJ3dlYnBhY2tDb25maWcgcGF0aDonLCB3ZWJwYWNrQ29uZmlnKTtcbiAgY29uc29sZS5sb2coJ3dlYnBhY2tDb25maWcgZXhpc3RzOicsIGV4aXN0c1N5bmMod2VicGFja0NvbmZpZykpO1xuXG4gIGlmKCFleGlzdHNTeW5jKHdlYnBhY2tDb25maWcpKSB7XG4gICAgY29uc3QgbGV4UGFja2FnZVBhdGggPSBnZXRMZXhQYWNrYWdlSnNvblBhdGgoKTtcbiAgICBjb25zdCBsZXhQYWNrYWdlRGlyID0gZGlybmFtZShsZXhQYWNrYWdlUGF0aCk7XG4gICAgY29uc3QgbGV4V2VicGFja0NvbmZpZyA9IHBhdGhSZXNvbHZlKGxleFBhY2thZ2VEaXIsICd3ZWJwYWNrLmNvbmZpZy5qcycpO1xuXG4gICAgaWYoZXhpc3RzU3luYyhsZXhXZWJwYWNrQ29uZmlnKSkge1xuICAgICAgd2VicGFja0NvbmZpZyA9IGxleFdlYnBhY2tDb25maWc7XG4gICAgICBjb25zb2xlLmxvZygnVXNpbmcgTGV4IHdlYnBhY2sgY29uZmlnOicsIHdlYnBhY2tDb25maWcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENvdWxkIG5vdCBmaW5kIHdlYnBhY2suY29uZmlnLmpzYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgc3Bpbm5lci5mYWlsKCdCdWlsZCBmYWlsZWQuJyk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdlYnBhY2tPcHRpb25zOiBzdHJpbmdbXSA9IFtcbiAgICAnLS1jb2xvcicsXG4gICAgJy0tcHJvZ3Jlc3MnLFxuICAgICctLWNvbmZpZycsIHdlYnBhY2tDb25maWdcbiAgXTtcblxuICBpZihhbmFseXplKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWFuYWx5emUnKTtcbiAgaWYoY29uZmlnTmFtZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1jb25maWdOYW1lJywgY29uZmlnTmFtZSk7XG4gIGlmKGRlZmluZVByb2Nlc3NFbnZOb2RlRW52KSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWRlZmluZVByb2Nlc3NFbnZOb2RlRW52JywgZGVmaW5lUHJvY2Vzc0Vudk5vZGVFbnYpO1xuICBpZihkZXZ0b29sKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWRldnRvb2wnLCBkZXZ0b29sKTtcbiAgaWYoZGlzYWJsZUludGVycHJldCkgd2VicGFja09wdGlvbnMucHVzaCgnLS1kaXNhYmxlSW50ZXJwcmV0Jyk7XG4gIC8vIFBhc3MgZW50cnkgZGlyZWN0bHkgYXMgQ0xJIGZsYWdcbiAgaWYoZW50cnlWYWx1ZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1lbnRyeScsIGVudHJ5VmFsdWUudG9TdHJpbmcoKSk7XG4gIGlmKGVudikgd2VicGFja09wdGlvbnMucHVzaCgnLS1lbnYnLCBlbnYpO1xuICBpZihmYWlsT25XYXJuaW5ncykgd2VicGFja09wdGlvbnMucHVzaCgnLS1mYWlsT25XYXJuaW5ncycpO1xuICBpZihqc29uKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWpzb24nLCBqc29uKTtcbiAgaWYobW9kZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1tb2RlJywgbW9kZSk7XG4gIGlmKG1lcmdlKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW1lcmdlJyk7XG4gIGlmKG5hbWUpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbmFtZScsIG5hbWUpO1xuICBpZihub0RldnRvb2wpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9EZXZ0b29sJyk7XG4gIGlmKG5vU3RhdHMpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9TdGF0cycpO1xuICBpZihub1RhcmdldCkgd2VicGFja09wdGlvbnMucHVzaCgnLS1ub1RhcmdldCcpO1xuICBpZihub1dhdGNoKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW5vV2F0Y2gnKTtcbiAgaWYobm9XYXRjaE9wdGlvbnNTdGRpbikgd2VicGFja09wdGlvbnMucHVzaCgnLS1ub1dhdGNoT3B0aW9uc1N0ZGluJyk7XG4gIGlmKG5vZGVFbnYpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9kZUVudicsIG5vZGVFbnYpO1xuICBpZihvdXRwdXRQYXRoKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW91dHB1dC1wYXRoJywgb3V0cHV0UGF0aC50b1N0cmluZygpKTsgLy8gQ29udmVydCB0byBzdHJpbmdcbiAgaWYoc3RhdHMpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tc3RhdHMnLCBzdGF0cyk7XG4gIGlmKHRhcmdldCkgd2VicGFja09wdGlvbnMucHVzaCgnLS10YXJnZXQnLCB0YXJnZXQpO1xuICBpZih3YXRjaCkgd2VicGFja09wdGlvbnMucHVzaCgnLS13YXRjaCcpO1xuICBpZih3YXRjaE9wdGlvbnNTdGRpbikgd2VicGFja09wdGlvbnMucHVzaCgnLS13YXRjaE9wdGlvbnNTdGRpbicpO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qge3dlYnBhY2tQYXRofSA9IHJlc29sdmVXZWJwYWNrUGF0aHMoY3VycmVudERpcm5hbWUpO1xuXG4gICAgbGV0IGV4ZWN1dGFibGVQYXRoID0gd2VicGFja1BhdGg7XG4gICAgbGV0IGZpbmFsV2VicGFja09wdGlvbnM6IHN0cmluZ1tdO1xuXG4gICAgaWYod2VicGFja1BhdGggPT09ICducHgnKSB7XG4gICAgICBmaW5hbFdlYnBhY2tPcHRpb25zID0gWyd3ZWJwYWNrJywgLi4ud2VicGFja09wdGlvbnNdO1xuICAgIH0gZWxzZSBpZih3ZWJwYWNrUGF0aC5lbmRzV2l0aCgnLmpzJykpIHtcbiAgICAgIGV4ZWN1dGFibGVQYXRoID0gJ25vZGUnO1xuICAgICAgZmluYWxXZWJwYWNrT3B0aW9ucyA9IFt3ZWJwYWNrUGF0aCwgLi4ud2VicGFja09wdGlvbnNdO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaW5hbFdlYnBhY2tPcHRpb25zID0gWy4uLndlYnBhY2tPcHRpb25zXTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnd2VicGFja1BhdGg6Jywgd2VicGFja1BhdGgpO1xuICAgIGNvbnNvbGUubG9nKCdleGVjdXRhYmxlUGF0aDonLCBleGVjdXRhYmxlUGF0aCk7XG4gICAgY29uc29sZS5sb2coJ2ZpbmFsV2VicGFja09wdGlvbnM6JywgSlNPTi5zdHJpbmdpZnkoZmluYWxXZWJwYWNrT3B0aW9ucykpO1xuICAgIGNvbnNvbGUubG9nKCdmaW5hbFdlYnBhY2tPcHRpb25zIHR5cGU6JywgQXJyYXkuaXNBcnJheShmaW5hbFdlYnBhY2tPcHRpb25zKSA/ICdBcnJheScgOiB0eXBlb2YgZmluYWxXZWJwYWNrT3B0aW9ucyk7XG5cbiAgICAvLyBNYWtlIHN1cmUgd2UncmUgcGFzc2luZyBhbiBhcnJheSBvZiBzdHJpbmdzIHRvIGV4ZWNhXG4gICAgY29uc3QgY2hpbGRQcm9jZXNzID0gZXhlY2EoZXhlY3V0YWJsZVBhdGgsIGZpbmFsV2VicGFja09wdGlvbnMsIHtlbmNvZGluZzogJ3V0ZjgnLCBzdGRpbzogJ3BpcGUnfSk7XG5cbiAgICBsZXQgYnVpbGRDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICBsZXQgYnVpbGRTdGF0cyA9IHtcbiAgICAgIG1vZHVsZXM6IDAsXG4gICAgICBhc3NldHM6IDAsXG4gICAgICBzaXplOiAnMCBCJ1xuICAgIH07XG5cbiAgICBjaGlsZFByb2Nlc3Muc3Rkb3V0Py5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGRhdGEudG9TdHJpbmcoKTtcblxuICAgICAgaGFuZGxlV2VicGFja1Byb2dyZXNzKG91dHB1dCwgc3Bpbm5lciwgcXVpZXQsICfwn4+X77iPJywgJ1dlYnBhY2sgQnVpbGRpbmcnKTtcblxuICAgICAgaWYoIWJ1aWxkQ29tcGxldGVkICYmIG91dHB1dC5pbmNsdWRlcygnY29tcGlsZWQgc3VjY2Vzc2Z1bGx5JykpIHtcbiAgICAgICAgYnVpbGRDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0J1aWxkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhJyk7XG5cbiAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBtb2R1bGVzLyk7XG4gICAgICAgIGNvbnN0IGFzc2V0TWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBhc3NldHMvKTtcbiAgICAgICAgY29uc3Qgc2l6ZU1hdGNoID0gb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgc3RhdHVzIChbXFxkLl0rIFxcdyspLykgfHwgb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgcGF0aC4qPyhbXFxkLl0rIFxcdyspLyk7XG5cbiAgICAgICAgaWYobW9kdWxlTWF0Y2gpIGJ1aWxkU3RhdHMubW9kdWxlcyA9IHBhcnNlSW50KG1vZHVsZU1hdGNoWzFdLCAxMCk7XG4gICAgICAgIGlmKGFzc2V0TWF0Y2gpIGJ1aWxkU3RhdHMuYXNzZXRzID0gcGFyc2VJbnQoYXNzZXRNYXRjaFsxXSwgMTApO1xuICAgICAgICBpZihzaXplTWF0Y2gpIGJ1aWxkU3RhdHMuc2l6ZSA9IHNpemVNYXRjaFsxXTtcblxuICAgICAgICBkaXNwbGF5QnVpbGRTdGF0dXMoJ3dlYnBhY2snLCBMZXhDb25maWcuY29uZmlnLm91dHB1dEZ1bGxQYXRoIHx8ICdsaWInLCBxdWlldCwgYnVpbGRTdGF0cyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjaGlsZFByb2Nlc3Muc3RkZXJyPy5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGRhdGEudG9TdHJpbmcoKTtcblxuICAgICAgaGFuZGxlV2VicGFja1Byb2dyZXNzKG91dHB1dCwgc3Bpbm5lciwgcXVpZXQsICfwn4+X77iPJywgJ1dlYnBhY2sgQnVpbGRpbmcnKTtcblxuICAgICAgaWYoIWJ1aWxkQ29tcGxldGVkICYmIG91dHB1dC5pbmNsdWRlcygnY29tcGlsZWQgc3VjY2Vzc2Z1bGx5JykpIHtcbiAgICAgICAgYnVpbGRDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0J1aWxkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhJyk7XG5cbiAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBtb2R1bGVzLyk7XG4gICAgICAgIGNvbnN0IGFzc2V0TWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBhc3NldHMvKTtcbiAgICAgICAgY29uc3Qgc2l6ZU1hdGNoID0gb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgc3RhdHVzIChbXFxkLl0rIFxcdyspLykgfHwgb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgcGF0aC4qPyhbXFxkLl0rIFxcdyspLyk7XG5cbiAgICAgICAgaWYobW9kdWxlTWF0Y2gpIGJ1aWxkU3RhdHMubW9kdWxlcyA9IHBhcnNlSW50KG1vZHVsZU1hdGNoWzFdLCAxMCk7XG4gICAgICAgIGlmKGFzc2V0TWF0Y2gpIGJ1aWxkU3RhdHMuYXNzZXRzID0gcGFyc2VJbnQoYXNzZXRNYXRjaFsxXSwgMTApO1xuICAgICAgICBpZihzaXplTWF0Y2gpIGJ1aWxkU3RhdHMuc2l6ZSA9IHNpemVNYXRjaFsxXTtcblxuICAgICAgICBkaXNwbGF5QnVpbGRTdGF0dXMoJ3dlYnBhY2snLCBMZXhDb25maWcuY29uZmlnLm91dHB1dEZ1bGxQYXRoIHx8ICdsaWInLCBxdWlldCwgYnVpbGRTdGF0cyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhd2FpdCBjaGlsZFByb2Nlc3M7XG5cbiAgICBpZighYnVpbGRDb21wbGV0ZWQpIHtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZCgnQnVpbGQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSEnKTtcbiAgICAgIGRpc3BsYXlCdWlsZFN0YXR1cygnd2VicGFjaycsIExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGggfHwgJ2xpYicsIHF1aWV0LCBidWlsZFN0YXRzKTtcbiAgICB9XG5cbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogV2VicGFjayBidWlsZCBmYWlsZWRgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgbG9nKGBcXG5FcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIGlmKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGlmKGVycm9yLnN0YWNrKSB7XG4gICAgICAgIGxvZyhgXFxuU3RhY2sgVHJhY2U6XFxuJHtlcnJvci5zdGFja31gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9nKGBcXG5XZWJwYWNrIE9wdGlvbnM6ICR7d2VicGFja09wdGlvbnMuc2xpY2UoMCwgNSkuam9pbignICcpfS4uLmAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIHNwaW5uZXIuZmFpbCgnQnVpbGQgZmFpbGVkLicpO1xuXG4gICAgaWYoY21kLmFzc2lzdCkge1xuICAgICAgc3Bpbm5lci5zdGFydCgnQUkgaXMgYW5hbHl6aW5nIHRoZSB3ZWJwYWNrIGVycm9yLi4uJyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGFpRnVuY3Rpb24oe1xuICAgICAgICAgIHByb21wdDogYEZpeCB0aGlzIHdlYnBhY2sgYnVpbGQgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1cXG5cXG5FcnJvciBkZXRhaWxzOlxcbiR7ZXJyb3IudG9TdHJpbmcoKX1cXG5cXG5Db25maWd1cmF0aW9uIHVzZWQ6XFxuJHtKU09OLnN0cmluZ2lmeSh3ZWJwYWNrT3B0aW9ucywgbnVsbCwgMil9YCxcbiAgICAgICAgICB0YXNrOiAnaGVscCcsXG4gICAgICAgICAgY29udGV4dDogdHJ1ZSxcbiAgICAgICAgICBxdWlldFxuICAgICAgICB9KTtcblxuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0FJIGFuYWx5c2lzIGNvbXBsZXRlJyk7XG4gICAgICB9IGNhdGNoKGFpRXJyb3IpIHtcbiAgICAgICAgc3Bpbm5lci5mYWlsKCdDb3VsZCBub3QgZ2VuZXJhdGUgQUkgYXNzaXN0YW5jZScpO1xuICAgICAgICBpZighcXVpZXQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdBSSBhc3Npc3RhbmNlIGVycm9yOicsIGFpRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoIXF1aWV0KSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdcXG5GdWxsIEVycm9yIERldGFpbHM6JywgZXJyb3IpO1xuICAgIH1cblxuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGQgPSBhc3luYyAoY21kOiBCdWlsZE9wdGlvbnMsIGNhbGxiYWNrOiBCdWlsZENhbGxiYWNrID0gKCkgPT4gKHt9KSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBidW5kbGVyID0gJ3dlYnBhY2snLFxuICAgIGNsaU5hbWUgPSAnTGV4JyxcbiAgICBxdWlldCA9IGZhbHNlLFxuICAgIHJlbW92ZSA9IGZhbHNlLFxuICAgIHRlc3QgPSBmYWxzZSxcbiAgICB0cmFuc2xhdGlvbnMgPSBmYWxzZSxcbiAgICB2YXJpYWJsZXMgPSAne30nXG4gIH0gPSBjbWQ7XG5cbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuXG4gIGxvZyhgJHtjbGlOYW1lfSBidWlsZGluZy4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQpO1xuXG4gIGNvbnN0IHtvdXRwdXRGdWxsUGF0aCwgdXNlVHlwZXNjcmlwdH0gPSBMZXhDb25maWcuY29uZmlnO1xuXG4gIGNoZWNrTGlua2VkTW9kdWxlcygpO1xuXG4gIGxldCB2YXJpYWJsZXNPYmo6IG9iamVjdCA9IHtOT0RFX0VOVjogJ3Byb2R1Y3Rpb24nfTtcblxuICBpZih2YXJpYWJsZXMpIHtcbiAgICB0cnkge1xuICAgICAgdmFyaWFibGVzT2JqID0gSlNPTi5wYXJzZSh2YXJpYWJsZXMpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRW52aXJvbm1lbnQgdmFyaWFibGVzIG9wdGlvbiBpcyBub3QgYSB2YWxpZCBKU09OIG9iamVjdC5gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzcy5lbnYgPSB7Li4ucHJvY2Vzcy5lbnYsIC4uLnZhcmlhYmxlc09ian07XG5cbiAgLy8gSWYgaW4gdGVzdCBtb2RlLCBleGl0IGVhcmx5XG4gIGlmKHRlc3QpIHtcbiAgICBsb2coJ1Rlc3QgbW9kZTogQnVpbGQgZW52aXJvbm1lbnQgbG9hZGVkLCBleGl0aW5nJywgJ2luZm8nLCBxdWlldCk7XG4gICAgY2FsbGJhY2soMCk7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvLyBQcm9jZXNzIHRyYW5zbGF0aW9ucyBpZiBmbGFnIGlzIGVuYWJsZWQgKGJlZm9yZSBidWlsZGluZylcbiAgaWYodHJhbnNsYXRpb25zKSB7XG4gICAgc3Bpbm5lci5zdGFydCgnUHJvY2Vzc2luZyB0cmFuc2xhdGlvbnMuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzb3VyY2VQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5zb3VyY2VGdWxsUGF0aCB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgICAgY29uc3Qgb3V0cHV0UGF0aCA9IExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGggfHwgJ2xpYic7XG5cbiAgICAgIGF3YWl0IHByb2Nlc3NUcmFuc2xhdGlvbnMoc291cmNlUGF0aCwgb3V0cHV0UGF0aCwgcXVpZXQpO1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdUcmFuc2xhdGlvbnMgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseSEnKTtcbiAgICB9IGNhdGNoKHRyYW5zbGF0aW9uRXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRmFpbGVkIHRvIHByb2Nlc3MgdHJhbnNsYXRpb25zOiAke3RyYW5zbGF0aW9uRXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBwcm9jZXNzIHRyYW5zbGF0aW9ucy4nKTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgc3Bpbm5lci5zdGFydCgnQnVpbGRpbmcgY29kZS4uLicpO1xuXG4gIGlmKHJlbW92ZSkge1xuICAgIGF3YWl0IHJlbW92ZUZpbGVzKG91dHB1dEZ1bGxQYXRoIHx8ICcnKTtcbiAgfVxuXG4gIGxldCBidWlsZFJlc3VsdCA9IDA7XG5cbiAgaWYoYnVuZGxlciA9PT0gJ3N3YycpIHtcbiAgICBidWlsZFJlc3VsdCA9IGF3YWl0IGJ1aWxkV2l0aFNXQyhzcGlubmVyLCBjbWQsIChzdGF0dXMpID0+IHtcbiAgICAgIGJ1aWxkUmVzdWx0ID0gc3RhdHVzO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGJ1aWxkUmVzdWx0ID0gYXdhaXQgYnVpbGRXaXRoV2VicGFjayhzcGlubmVyLCBjbWQsIChzdGF0dXMpID0+IHtcbiAgICAgIGJ1aWxkUmVzdWx0ID0gc3RhdHVzO1xuICAgIH0pO1xuICB9XG5cbiAgaWYoYnVpbGRSZXN1bHQgPT09IDAgJiYgY21kLmFuYWx5emUpIHtcbiAgICBzcGlubmVyLnN0YXJ0KCdBSSBpcyBhbmFseXppbmcgdGhlIGJ1aWxkIG91dHB1dCBmb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0cyA9IHtcbiAgICAgICAgb3V0cHV0UGF0aDogTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRGdWxsUGF0aCxcbiAgICAgICAgZW50cnlQb2ludHM6IGJ1bmRsZXIgPT09ICdzd2MnID9cbiAgICAgICAgICBgU291cmNlIGZpbGVzOiAke0xleENvbmZpZy5jb25maWcuc291cmNlRnVsbFBhdGh9LyoqLyoue3RzLGpzfWAgOlxuICAgICAgICAgIExleENvbmZpZy5jb25maWcud2VicGFjaz8uZW50cnkgfHwgJ1Vua25vd24gZW50cnkgcG9pbnRzJ1xuICAgICAgfTtcblxuICAgICAgYXdhaXQgYWlGdW5jdGlvbih7XG4gICAgICAgIHByb21wdDogYEFuYWx5emUgdGhpcyBidWlsZCBmb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXM6XG5cbkJ1aWxkIFR5cGU6ICR7YnVuZGxlcn1cbkZvcm1hdDogJHtjbWQuZm9ybWF0IHx8ICdkZWZhdWx0J31cbkVudmlyb25tZW50OiAke0xleENvbmZpZy5jb25maWcudGFyZ2V0RW52aXJvbm1lbnR9XG4ke0pTT04uc3RyaW5naWZ5KHN0YXRzLCBudWxsLCAyKX1cblxuV2hhdCBhcmUgdGhlIGtleSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBmb3IgdGhpcyBidWlsZCBjb25maWd1cmF0aW9uPyBDb25zaWRlcjpcbjEuIEJ1bmRsZSBzaXplIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzXG4yLiBDb2RlIHNwbGl0dGluZyByZWNvbW1lbmRhdGlvbnNcbjMuIFRyZWUtc2hha2luZyBpbXByb3ZlbWVudHNcbjQuIFBlcmZvcm1hbmNlIGVuaGFuY2VtZW50c1xuNS4gRGVwZW5kZW5jeSBvcHRpbWl6YXRpb25zYCxcbiAgICAgICAgdGFzazogJ29wdGltaXplJyxcbiAgICAgICAgY29udGV4dDogdHJ1ZSxcbiAgICAgICAgcXVpZXRcbiAgICAgIH0pO1xuXG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ0FJIGJ1aWxkIGFuYWx5c2lzIGNvbXBsZXRlJyk7XG4gICAgfSBjYXRjaChhaUVycm9yKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0NvdWxkIG5vdCBnZW5lcmF0ZSBBSSBvcHRpbWl6YXRpb24gYW5hbHlzaXMnKTtcbiAgICAgIGlmKCFxdWlldCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdBSSBhbmFseXNpcyBlcnJvcjonLCBhaUVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZihidWlsZFJlc3VsdCA9PT0gMCkge1xuICAgIHRyeSB7XG4gICAgICBpZih1c2VUeXBlc2NyaXB0ICYmIGJ1bmRsZXIgPT09ICdzd2MnKSB7XG4gICAgICAgIGNvbnN0IHR5cGVzY3JpcHRQYXRoID0gcmVzb2x2ZUJpbmFyeVBhdGgoJ3RzYycsICd0eXBlc2NyaXB0Jyk7XG5cbiAgICAgICAgaWYodHlwZXNjcmlwdFBhdGgpIHtcbiAgICAgICAgICBzcGlubmVyLnN0YXJ0KCdHZW5lcmF0aW5nIFR5cGVTY3JpcHQgZGVjbGFyYXRpb25zLi4uJyk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUZ1bGxQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5zb3VyY2VGdWxsUGF0aCB8fCBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLi9zcmMnKTtcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dEZ1bGxQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRGdWxsUGF0aCB8fCBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLi9saWInKTtcbiAgICAgICAgICAgIGNvbnN0IGdsb2JPcHRpb25zID0ge1xuICAgICAgICAgICAgICBjd2Q6IHNvdXJjZUZ1bGxQYXRoLFxuICAgICAgICAgICAgICBkb3Q6IGZhbHNlLFxuICAgICAgICAgICAgICBub2RpcjogdHJ1ZSxcbiAgICAgICAgICAgICAgYWJzb2x1dGU6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCB0c0ZpbGVzID0gZ2xvYlN5bmMoYCoqLyEoKi5zcGVjfCoudGVzdHwqLmludGVncmF0aW9uKS50c2AsIGdsb2JPcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IHRzeEZpbGVzID0gZ2xvYlN5bmMoYCoqLyEoKi5zcGVjfCoudGVzdHwqLmludGVncmF0aW9uKS50c3hgLCBnbG9iT3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBhbGxTb3VyY2VGaWxlcyA9IFsuLi50c0ZpbGVzLCAuLi50c3hGaWxlc107XG4gICAgICAgICAgICBjb25zdCB0eXBlc2NyaXB0T3B0aW9ucyA9IFtcbiAgICAgICAgICAgICAgLi4uTGV4Q29uZmlnLmdldFR5cGVTY3JpcHREZWNsYXJhdGlvbkZsYWdzKCksXG4gICAgICAgICAgICAgIC4uLmFsbFNvdXJjZUZpbGVzXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY2EodHlwZXNjcmlwdFBhdGgsIHR5cGVzY3JpcHRPcHRpb25zLCB7XG4gICAgICAgICAgICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgICAgICAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgICAgICAgcmVqZWN0OiBmYWxzZSwgLy8gRG9uJ3QgdGhyb3cgb24gZXJyb3JzLCB3ZSdsbCBjaGVjayBleGl0IGNvZGVcbiAgICAgICAgICAgICAgYWxsOiB0cnVlIC8vIENhcHR1cmUgYm90aCBzdGRvdXQgYW5kIHN0ZGVyclxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmKHJlc3VsdC5leGl0Q29kZSAhPT0gMCkge1xuICAgICAgICAgICAgICAvLyBUeXBlU2NyaXB0IG1heSBoYXZlIGVycm9ycyBidXQgc3RpbGwgZ2VuZXJhdGUgc29tZSBkZWNsYXJhdGlvbnNcbiAgICAgICAgICAgICAgLy8gTG9nIHdhcm5pbmdzIGJ1dCBkb24ndCBmYWlsIGlmIGRlY2xhcmF0aW9ucyB3ZXJlIGdlbmVyYXRlZFxuICAgICAgICAgICAgICBjb25zdCBoYXNEZWNsYXJhdGlvbnMgPSByZXN1bHQuYWxsPy5pbmNsdWRlcygnV3JpdGluZycpIHx8IHJlc3VsdC5hbGw/LmluY2x1ZGVzKCdEZWNsYXJhdGlvbicpIHx8IGZhbHNlO1xuICAgICAgICAgICAgICBjb25zdCBlcnJvck91dHB1dCA9IHJlc3VsdC5zdGRlcnIgfHwgcmVzdWx0LnN0ZG91dCB8fCByZXN1bHQuYWxsIHx8ICdVbmtub3duIGVycm9yJztcblxuICAgICAgICAgICAgICBpZighaGFzRGVjbGFyYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgLy8gU2hvdyBkZXRhaWxlZCBlcnJvciBpbmZvcm1hdGlvblxuICAgICAgICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uIGZhaWxlZGAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgICAgICBsb2coYFxcbkV4aXQgQ29kZTogJHtyZXN1bHQuZXhpdENvZGV9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgICAgIGxvZyhgXFxuVHlwZVNjcmlwdCBDb21tYW5kOiAke3R5cGVzY3JpcHRQYXRofSAke3R5cGVzY3JpcHRPcHRpb25zLnNsaWNlKDAsIDEwKS5qb2luKCcgJyl9Li4uYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgICAgIGxvZyhgXFxuRXJyb3IgT3V0cHV0OlxcbiR7ZXJyb3JPdXRwdXR9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGV4dHJhY3QgYW5kIGhpZ2hsaWdodCBzcGVjaWZpYyBlcnJvcnNcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvckxpbmVzID0gZXJyb3JPdXRwdXQuc3BsaXQoJ1xcbicpLmZpbHRlcihsaW5lID0+XG4gICAgICAgICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdlcnJvciBUUycpIHx8XG4gICAgICAgICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdFcnJvcjonKSB8fFxuICAgICAgICAgICAgICAgICAgbGluZS50cmltKCkuc3RhcnRzV2l0aCgnc3JjLycpIHx8XG4gICAgICAgICAgICAgICAgICBsaW5lLnRyaW0oKS5zdGFydHNXaXRoKCdUUycpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlmKGVycm9yTGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgbG9nKGBcXG5LZXkgRXJyb3JzOmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgICAgICAgIGVycm9yTGluZXMuc2xpY2UoMCwgMTApLmZvckVhY2gobGluZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxvZyhgICAke2xpbmV9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBpZihlcnJvckxpbmVzLmxlbmd0aCA+IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZyhgICAuLi4gYW5kICR7ZXJyb3JMaW5lcy5sZW5ndGggLSAxMH0gbW9yZSBlcnJvcnNgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3Bpbm5lci5mYWlsKCdUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gaGFkIGVycm9ycyAoY29udGludWluZyBhbnl3YXkpLicpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBXYXJuaW5nOiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gY29tcGxldGVkIHdpdGggZXJyb3JzYCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgICAgICAgICAgaWYoIXF1aWV0ICYmIGVycm9yT3V0cHV0KSB7XG4gICAgICAgICAgICAgICAgICBsb2coYFxcbldhcm5pbmdzOlxcbiR7ZXJyb3JPdXRwdXR9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNwaW5uZXIuc3VjY2VlZCgnVHlwZVNjcmlwdCBkZWNsYXJhdGlvbnMgZ2VuZXJhdGVkICh3aXRoIHdhcm5pbmdzKS4nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdUeXBlU2NyaXB0IGRlY2xhcmF0aW9ucyBnZW5lcmF0ZWQhJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgICAgLy8gSWYgZXhlY2EgdGhyb3dzIChzaG91bGRuJ3Qgd2l0aCByZWplY3Q6IGZhbHNlKSwgbG9nIGFuZCBjb250aW51ZVxuICAgICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gZXhjZXB0aW9uYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgbG9nKGBcXG5FcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIGlmKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgICAgICAgbG9nKGBcXG5TdGFjazpcXG4ke2Vycm9yLnN0YWNrfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNwaW5uZXIuZmFpbCgnVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uIGhhZCBpc3N1ZXMgKGNvbnRpbnVpbmcgYW55d2F5KS4nKTtcbiAgICAgICAgICAgIC8vIERvbid0IGZhaWwgdGhlIGJ1aWxkIGlmIGRlY2xhcmF0aW9ucyBmYWlsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGNvcHlDb25maWd1cmVkRmlsZXMoc3Bpbm5lciwgTGV4Q29uZmlnLmNvbmZpZywgcXVpZXQpO1xuICAgIH0gY2F0Y2goY29weUVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEZhaWxlZCB0byBjb3B5IGNvbmZpZ3VyZWQgZmlsZXM6ICR7Y29weUVycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBjYWxsYmFjayhidWlsZFJlc3VsdCk7XG4gIHJldHVybiBidWlsZFJlc3VsdDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkO1xuIl0sIm5hbWVzIjpbInRyYW5zZm9ybSIsImV4ZWNhIiwiZXhpc3RzU3luYyIsInJlYWRGaWxlU3luYyIsInN5bmMiLCJnbG9iU3luYyIsImRpcm5hbWUiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJMZXhDb25maWciLCJjaGVja0xpbmtlZE1vZHVsZXMiLCJjb3B5Q29uZmlndXJlZEZpbGVzIiwiY3JlYXRlU3Bpbm5lciIsImhhbmRsZVdlYnBhY2tQcm9ncmVzcyIsInJlbW92ZUZpbGVzIiwicmVzb2x2ZVdlYnBhY2tQYXRocyIsImdldExleFBhY2thZ2VKc29uUGF0aCIsInJlc29sdmVCaW5hcnlQYXRoIiwibG9nIiwicHJvY2Vzc1RyYW5zbGF0aW9ucyIsImFpRnVuY3Rpb24iLCJib3hlbiIsImNoYWxrIiwiY3VycmVudEZpbGVuYW1lIiwiY3VycmVudERpcm5hbWUiLCJldmFsIiwicHJvY2VzcyIsImN3ZCIsImRpc3BsYXlCdWlsZFN0YXR1cyIsImJ1bmRsZXIiLCJvdXRwdXRQYXRoIiwicXVpZXQiLCJzdGF0cyIsInN0YXRzSW5mbyIsIm1vZHVsZXMiLCJhc3NldHMiLCJncmVlbiIsImN5YW4iLCJzaXplIiwic3RhdHVzQm94IiwiYm9sZCIsInVuZGVybGluZSIsInllbGxvdyIsInBhZGRpbmciLCJtYXJnaW4iLCJib3JkZXJTdHlsZSIsImJvcmRlckNvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwiY29uc29sZSIsImJ1aWxkV2l0aFNXQyIsInNwaW5uZXIiLCJjb21tYW5kT3B0aW9ucyIsImNhbGxiYWNrIiwiY2xpTmFtZSIsImZvcm1hdCIsInNvdXJjZVBhdGgiLCJ3YXRjaCIsIm91dHB1dEZ1bGxQYXRoIiwic291cmNlRnVsbFBhdGgiLCJzd2MiLCJzd2NDb25maWciLCJ0YXJnZXRFbnZpcm9ubWVudCIsInVzZUdyYXBoUWwiLCJ1c2VUeXBlc2NyaXB0IiwiY29uZmlnIiwic291cmNlRGlyIiwiZ2xvYk9wdGlvbnMiLCJkb3QiLCJub2RpciIsIm5vc29ydCIsImFic29sdXRlIiwidHNGaWxlcyIsImpzRmlsZXMiLCJzb3VyY2VGaWxlcyIsIm91dHB1dERpciIsInN0YXJ0IiwiZmlsZSIsInJlcGxhY2UiLCJvdXRwdXREaXJQYXRoIiwibWtkaXJTeW5jIiwicmVjdXJzaXZlIiwic291cmNlQ29kZSIsImlzVFNYIiwiZW5kc1dpdGgiLCJzd2NPcHRpb25zIiwiZmlsZW5hbWUiLCJqc2MiLCJwYXJzZXIiLCJzeW50YXgiLCJ0c3giLCJkZWNvcmF0b3JzIiwiZHluYW1pY0ltcG9ydCIsImNvbW1lbnRzIiwidGFyZ2V0IiwicmVhY3QiLCJydW50aW1lIiwicHJlc2VydmVBbGxDb21tZW50cyIsIm1vZHVsZSIsInR5cGUiLCJtaW5pZnkiLCJzb3VyY2VNYXBzIiwicmVzdWx0Iiwid3JpdGVGaWxlU3luYyIsImNvZGUiLCJzdWNjZWVkIiwiZXJyb3IiLCJtZXNzYWdlIiwiRXJyb3IiLCJzdGFjayIsImZhaWwiLCJidWlsZFdpdGhXZWJwYWNrIiwiY21kIiwiYW5hbHl6ZSIsImNvbmZpZ05hbWUiLCJkZWZpbmVQcm9jZXNzRW52Tm9kZUVudiIsImRldnRvb2wiLCJkaXNhYmxlSW50ZXJwcmV0IiwiZW50cnkiLCJlbnYiLCJmYWlsT25XYXJuaW5ncyIsImpzb24iLCJtZXJnZSIsIm1vZGUiLCJuYW1lIiwibm9kZUVudiIsIm5vRGV2dG9vbCIsIm5vU3RhdHMiLCJub1RhcmdldCIsIm5vV2F0Y2giLCJub1dhdGNoT3B0aW9uc1N0ZGluIiwid2F0Y2hPcHRpb25zU3RkaW4iLCJlbnRyeVZhbHVlIiwiQXJyYXkiLCJpc0FycmF5Iiwid2VicGFja0NvbmZpZyIsImlzUmVsYXRpdmVDb25maWciLCJzdWJzdHIiLCJwcm9qZWN0Q29uZmlnUGF0aCIsInByb2plY3RDb25maWdQYXRoVHMiLCJoYXNQcm9qZWN0Q29uZmlnIiwicmVzb2x2ZWRDb25maWciLCJsZXhQYWNrYWdlUGF0aCIsImxleFBhY2thZ2VEaXIiLCJsZXhXZWJwYWNrQ29uZmlnIiwid2VicGFja09wdGlvbnMiLCJwdXNoIiwidG9TdHJpbmciLCJ3ZWJwYWNrUGF0aCIsImV4ZWN1dGFibGVQYXRoIiwiZmluYWxXZWJwYWNrT3B0aW9ucyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjaGlsZFByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiYnVpbGRDb21wbGV0ZWQiLCJidWlsZFN0YXRzIiwic3Rkb3V0Iiwib24iLCJkYXRhIiwib3V0cHV0IiwiaW5jbHVkZXMiLCJtb2R1bGVNYXRjaCIsIm1hdGNoIiwiYXNzZXRNYXRjaCIsInNpemVNYXRjaCIsInBhcnNlSW50Iiwic3RkZXJyIiwic2xpY2UiLCJqb2luIiwiYXNzaXN0IiwicHJvbXB0IiwidGFzayIsImNvbnRleHQiLCJhaUVycm9yIiwiYnVpbGQiLCJyZW1vdmUiLCJ0ZXN0IiwidHJhbnNsYXRpb25zIiwidmFyaWFibGVzIiwicGFyc2VDb25maWciLCJ2YXJpYWJsZXNPYmoiLCJOT0RFX0VOViIsInBhcnNlIiwidHJhbnNsYXRpb25FcnJvciIsImJ1aWxkUmVzdWx0Iiwic3RhdHVzIiwiZW50cnlQb2ludHMiLCJ3ZWJwYWNrIiwidHlwZXNjcmlwdFBhdGgiLCJ0c3hGaWxlcyIsImFsbFNvdXJjZUZpbGVzIiwidHlwZXNjcmlwdE9wdGlvbnMiLCJnZXRUeXBlU2NyaXB0RGVjbGFyYXRpb25GbGFncyIsInJlamVjdCIsImFsbCIsImV4aXRDb2RlIiwiaGFzRGVjbGFyYXRpb25zIiwiZXJyb3JPdXRwdXQiLCJlcnJvckxpbmVzIiwic3BsaXQiLCJmaWx0ZXIiLCJsaW5lIiwidHJpbSIsInN0YXJ0c1dpdGgiLCJsZW5ndGgiLCJmb3JFYWNoIiwiY29weUVycm9yIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxTQUFTLFFBQU8sWUFBWTtBQUNwQyxTQUFRQyxLQUFLLFFBQU8sUUFBUTtBQUM1QixTQUFRQyxVQUFVLEVBQUVDLFlBQVksUUFBTyxLQUFLO0FBQzVDLFNBQVFDLFFBQVFDLFFBQVEsUUFBTyxPQUFPO0FBQ3RDLFNBQVFDLE9BQU8sRUFBRUMsV0FBV0MsV0FBVyxRQUFPLE9BQU87QUFFckQsU0FBUUMsU0FBUyxRQUFPLHFCQUFxQjtBQUM3QyxTQUFRQyxrQkFBa0IsRUFBRUMsbUJBQW1CLEVBQUVDLGFBQWEsRUFBcUJDLHFCQUFxQixFQUFFQyxXQUFXLFFBQU8scUJBQXFCO0FBQ2pKLFNBQ0VDLG1CQUFtQixFQUNuQkMscUJBQXFCLEVBQ3JCQyxpQkFBaUIsUUFDWixzQkFBc0I7QUFDN0IsU0FBUUMsR0FBRyxRQUFPLHFCQUFx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
@@ -46,4 +46,4 @@ export const clean = async (cmd, callback = (_status)=>({}))=>{
46
46
  }
47
47
  };
48
48
 
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jbGVhbi9jbGVhbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NyZWF0ZVNwaW5uZXIsIHJlbW92ZUZpbGVzLCByZW1vdmVNb2R1bGVzfSBmcm9tICcuLi8uLi91dGlscy9hcHAuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xlYW5PcHRpb25zIHtcbiAgcmVhZG9ubHkgY2xpTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSBzbmFwc2hvdHM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBDbGVhbkNhbGxiYWNrID0gKHN0YXR1czogbnVtYmVyKSA9PiB2b2lkO1xuXG5leHBvcnQgY29uc3QgY2xlYW4gPSBhc3luYyAoY21kOiBDbGVhbk9wdGlvbnMsIGNhbGxiYWNrOiBDbGVhbkNhbGxiYWNrID0gKF9zdGF0dXM6IG51bWJlcikgPT4gKHt9KSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IHtjbGlOYW1lID0gJ0xleCcsIHF1aWV0LCBzbmFwc2hvdHN9ID0gY21kO1xuXG4gIC8vIFNwaW5uZXJcbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuXG4gIC8vIERpc3BsYXkgc3RhdHVzXG4gIGxvZyhgJHtjbGlOYW1lfSBjbGVhbmluZyBkaXJlY3RvcnkuLi5gLCAnaW5mbycsIHF1aWV0KTtcblxuICAvLyBHZXQgY3VzdG9tIGNvbmZpZ3VyYXRpb25cbiAgYXdhaXQgTGV4Q29uZmlnLnBhcnNlQ29uZmlnKGNtZCk7XG5cbiAgLy8gU3RhcnQgY2xlYW5pbmcgc3Bpbm5lclxuICBpZihzcGlubmVyKSB7XG4gICAgc3Bpbm5lci5zdGFydCgnQ2xlYW5pbmcgZmlsZXMuLi4nKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gUmVtb3ZlIG5vZGVfbW9kdWxlc1xuICAgIGF3YWl0IHJlbW92ZU1vZHVsZXMoKTtcblxuICAgIC8vIFJlbW92ZSB0ZXN0IGNvdmVyYWdlIHJlcG9ydHNcbiAgICBhd2FpdCByZW1vdmVGaWxlcygnLi9jb3ZlcmFnZScsIHRydWUpO1xuXG4gICAgLy8gUmVtb3ZlIG5wbSBsb2dzXG4gICAgYXdhaXQgcmVtb3ZlRmlsZXMoJy4vbnBtLWRlYnVnLmxvZycsIHRydWUpO1xuXG4gICAgaWYoc25hcHNob3RzKSB7XG4gICAgICBhd2FpdCByZW1vdmVGaWxlcygnLi8qKi9fX3NuYXBzaG90c19fJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gU3RvcCBzcGlubmVyXG4gICAgaWYoc3Bpbm5lcikge1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdTdWNjZXNzZnVsbHkgY2xlYW5lZCEnKTtcbiAgICB9XG5cbiAgICAvLyBTdG9wIHByb2Nlc3NcbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIC8vIERpc3BsYXkgZXJyb3IgbWVzc2FnZVxuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIC8vIFN0b3Agc3Bpbm5lclxuICAgIGlmKHNwaW5uZXIpIHtcbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIGNsZWFuIHByb2plY3QuJyk7XG4gICAgfVxuXG4gICAgLy8gS2lsbCBwcm9jZXNzXG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn07Il0sIm5hbWVzIjpbIkxleENvbmZpZyIsImNyZWF0ZVNwaW5uZXIiLCJyZW1vdmVGaWxlcyIsInJlbW92ZU1vZHVsZXMiLCJsb2ciLCJjbGVhbiIsImNtZCIsImNhbGxiYWNrIiwiX3N0YXR1cyIsImNsaU5hbWUiLCJxdWlldCIsInNuYXBzaG90cyIsInNwaW5uZXIiLCJwYXJzZUNvbmZpZyIsInN0YXJ0Iiwic3VjY2VlZCIsImVycm9yIiwibWVzc2FnZSIsImZhaWwiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFNBQVMsUUFBTyxxQkFBcUI7QUFDN0MsU0FBUUMsYUFBYSxFQUFFQyxXQUFXLEVBQUVDLGFBQWEsUUFBTyxxQkFBcUI7QUFDN0UsU0FBUUMsR0FBRyxRQUFPLHFCQUFxQjtBQVV2QyxPQUFPLE1BQU1DLFFBQVEsT0FBT0MsS0FBbUJDLFdBQTBCLENBQUNDLFVBQXFCLENBQUEsQ0FBQyxDQUFBLENBQUU7SUFDaEcsTUFBTSxFQUFDQyxVQUFVLEtBQUssRUFBRUMsS0FBSyxFQUFFQyxTQUFTLEVBQUMsR0FBR0w7SUFFNUMsVUFBVTtJQUNWLE1BQU1NLFVBQVVYLGNBQWNTO0lBRTlCLGlCQUFpQjtJQUNqQk4sSUFBSSxHQUFHSyxRQUFRLHNCQUFzQixDQUFDLEVBQUUsUUFBUUM7SUFFaEQsMkJBQTJCO0lBQzNCLE1BQU1WLFVBQVVhLFdBQVcsQ0FBQ1A7SUFFNUIseUJBQXlCO0lBQ3pCLElBQUdNLFNBQVM7UUFDVkEsUUFBUUUsS0FBSyxDQUFDO0lBQ2hCO0lBRUEsSUFBSTtRQUNGLHNCQUFzQjtRQUN0QixNQUFNWDtRQUVOLCtCQUErQjtRQUMvQixNQUFNRCxZQUFZLGNBQWM7UUFFaEMsa0JBQWtCO1FBQ2xCLE1BQU1BLFlBQVksbUJBQW1CO1FBRXJDLElBQUdTLFdBQVc7WUFDWixNQUFNVCxZQUFZLHNCQUFzQjtRQUMxQztRQUVBLGVBQWU7UUFDZixJQUFHVSxTQUFTO1lBQ1ZBLFFBQVFHLE9BQU8sQ0FBQztRQUNsQjtRQUVBLGVBQWU7UUFDZlIsU0FBUztRQUNULE9BQU87SUFDVCxFQUFFLE9BQU1TLE9BQU87UUFDYix3QkFBd0I7UUFDeEJaLElBQUksQ0FBQyxFQUFFLEVBQUVLLFFBQVEsUUFBUSxFQUFFTyxNQUFNQyxPQUFPLEVBQUUsRUFBRSxTQUFTUDtRQUVyRCxlQUFlO1FBQ2YsSUFBR0UsU0FBUztZQUNWQSxRQUFRTSxJQUFJLENBQUM7UUFDZjtRQUVBLGVBQWU7UUFDZlgsU0FBUztRQUNULE9BQU87SUFDVDtBQUNGLEVBQUUifQ==
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jbGVhbi9jbGVhbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NyZWF0ZVNwaW5uZXIsIHJlbW92ZUZpbGVzLCByZW1vdmVNb2R1bGVzfSBmcm9tICcuLi8uLi91dGlscy9hcHAuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xlYW5PcHRpb25zIHtcbiAgcmVhZG9ubHkgY2xpTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSBzbmFwc2hvdHM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBDbGVhbkNhbGxiYWNrID0gKHN0YXR1czogbnVtYmVyKT0+IHZvaWQ7XG5cbmV4cG9ydCBjb25zdCBjbGVhbiA9IGFzeW5jIChcbiAgY21kOiBDbGVhbk9wdGlvbnMsXG4gIGNhbGxiYWNrOiBDbGVhbkNhbGxiYWNrID0gKF9zdGF0dXM6IG51bWJlcikgPT4gKHt9KVxuKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge2NsaU5hbWUgPSAnTGV4JywgcXVpZXQsIHNuYXBzaG90c30gPSBjbWQ7XG5cbiAgLy8gU3Bpbm5lclxuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgLy8gRGlzcGxheSBzdGF0dXNcbiAgbG9nKGAke2NsaU5hbWV9IGNsZWFuaW5nIGRpcmVjdG9yeS4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIC8vIEdldCBjdXN0b20gY29uZmlndXJhdGlvblxuICBhd2FpdCBMZXhDb25maWcucGFyc2VDb25maWcoY21kKTtcblxuICAvLyBTdGFydCBjbGVhbmluZyBzcGlubmVyXG4gIGlmKHNwaW5uZXIpIHtcbiAgICBzcGlubmVyLnN0YXJ0KCdDbGVhbmluZyBmaWxlcy4uLicpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBSZW1vdmUgbm9kZV9tb2R1bGVzXG4gICAgYXdhaXQgcmVtb3ZlTW9kdWxlcygpO1xuXG4gICAgLy8gUmVtb3ZlIHRlc3QgY292ZXJhZ2UgcmVwb3J0c1xuICAgIGF3YWl0IHJlbW92ZUZpbGVzKCcuL2NvdmVyYWdlJywgdHJ1ZSk7XG5cbiAgICAvLyBSZW1vdmUgbnBtIGxvZ3NcbiAgICBhd2FpdCByZW1vdmVGaWxlcygnLi9ucG0tZGVidWcubG9nJywgdHJ1ZSk7XG5cbiAgICBpZihzbmFwc2hvdHMpIHtcbiAgICAgIGF3YWl0IHJlbW92ZUZpbGVzKCcuLyoqL19fc25hcHNob3RzX18nLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBTdG9wIHNwaW5uZXJcbiAgICBpZihzcGlubmVyKSB7XG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ1N1Y2Nlc3NmdWxseSBjbGVhbmVkIScpO1xuICAgIH1cblxuICAgIC8vIFN0b3AgcHJvY2Vzc1xuICAgIGNhbGxiYWNrKDApO1xuICAgIHJldHVybiAwO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgLy8gRGlzcGxheSBlcnJvciBtZXNzYWdlXG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgLy8gU3RvcCBzcGlubmVyXG4gICAgaWYoc3Bpbm5lcikge1xuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gY2xlYW4gcHJvamVjdC4nKTtcbiAgICB9XG5cbiAgICAvLyBLaWxsIHByb2Nlc3NcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxufTsiXSwibmFtZXMiOlsiTGV4Q29uZmlnIiwiY3JlYXRlU3Bpbm5lciIsInJlbW92ZUZpbGVzIiwicmVtb3ZlTW9kdWxlcyIsImxvZyIsImNsZWFuIiwiY21kIiwiY2FsbGJhY2siLCJfc3RhdHVzIiwiY2xpTmFtZSIsInF1aWV0Iiwic25hcHNob3RzIiwic3Bpbm5lciIsInBhcnNlQ29uZmlnIiwic3RhcnQiLCJzdWNjZWVkIiwiZXJyb3IiLCJtZXNzYWdlIiwiZmFpbCJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsU0FBUyxRQUFPLHFCQUFxQjtBQUM3QyxTQUFRQyxhQUFhLEVBQUVDLFdBQVcsRUFBRUMsYUFBYSxRQUFPLHFCQUFxQjtBQUM3RSxTQUFRQyxHQUFHLFFBQU8scUJBQXFCO0FBVXZDLE9BQU8sTUFBTUMsUUFBUSxPQUNuQkMsS0FDQUMsV0FBMEIsQ0FBQ0MsVUFBcUIsQ0FBQSxDQUFDLENBQUEsQ0FBRTtJQUVuRCxNQUFNLEVBQUNDLFVBQVUsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLFNBQVMsRUFBQyxHQUFHTDtJQUU1QyxVQUFVO0lBQ1YsTUFBTU0sVUFBVVgsY0FBY1M7SUFFOUIsaUJBQWlCO0lBQ2pCTixJQUFJLEdBQUdLLFFBQVEsc0JBQXNCLENBQUMsRUFBRSxRQUFRQztJQUVoRCwyQkFBMkI7SUFDM0IsTUFBTVYsVUFBVWEsV0FBVyxDQUFDUDtJQUU1Qix5QkFBeUI7SUFDekIsSUFBR00sU0FBUztRQUNWQSxRQUFRRSxLQUFLLENBQUM7SUFDaEI7SUFFQSxJQUFJO1FBQ0Ysc0JBQXNCO1FBQ3RCLE1BQU1YO1FBRU4sK0JBQStCO1FBQy9CLE1BQU1ELFlBQVksY0FBYztRQUVoQyxrQkFBa0I7UUFDbEIsTUFBTUEsWUFBWSxtQkFBbUI7UUFFckMsSUFBR1MsV0FBVztZQUNaLE1BQU1ULFlBQVksc0JBQXNCO1FBQzFDO1FBRUEsZUFBZTtRQUNmLElBQUdVLFNBQVM7WUFDVkEsUUFBUUcsT0FBTyxDQUFDO1FBQ2xCO1FBRUEsZUFBZTtRQUNmUixTQUFTO1FBQ1QsT0FBTztJQUNULEVBQUUsT0FBTVMsT0FBTztRQUNiLHdCQUF3QjtRQUN4QlosSUFBSSxDQUFDLEVBQUUsRUFBRUssUUFBUSxRQUFRLEVBQUVPLE1BQU1DLE9BQU8sRUFBRSxFQUFFLFNBQVNQO1FBRXJELGVBQWU7UUFDZixJQUFHRSxTQUFTO1lBQ1ZBLFFBQVFNLElBQUksQ0FBQztRQUNmO1FBRUEsZUFBZTtRQUNmWCxTQUFTO1FBQ1QsT0FBTztJQUNUO0FBQ0YsRUFBRSJ9