@nlabs/lex 1.51.6 → 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.
- package/README.md +120 -54
- package/lib/Button.stories.js +1 -1
- package/lib/LexConfig.d.ts +1 -1
- package/lib/LexConfig.js +36 -14
- package/lib/commands/build/build.js +120 -23
- package/lib/commands/clean/clean.js +1 -1
- package/lib/commands/compile/compile.js +95 -28
- package/lib/commands/config/config.js +1 -1
- package/lib/commands/copy/copy.js +1 -1
- package/lib/commands/create/create.js +1 -1
- package/lib/commands/dev/dev.js +22 -11
- package/lib/commands/init/init.js +1 -1
- package/lib/commands/link/link.js +1 -1
- package/lib/commands/lint/lint.js +1 -1
- package/lib/commands/serverless/serverless.js +1 -1
- package/lib/commands/storybook/storybook.js +1 -1
- package/lib/commands/versions/versions.js +1 -1
- package/lib/utils/aiService.js +1 -1
- package/lib/utils/app.d.ts +1 -1
- package/lib/utils/app.js +22 -17
- package/lib/utils/file.js +24 -3
- package/lib/utils/postcss/postcss-for.d.ts +1 -1
- package/lib/utils/postcss/postcss-for.js +6 -8
- package/lib/utils/postcss/postcss-percentage.d.ts +1 -1
- package/lib/utils/postcss/postcss-percentage.js +14 -13
- package/package.json +10 -3
- package/scripts/test-static-manual.js +117 -0
- package/scripts/test-webpack.js +124 -30
- package/webpack.config.js +135 -8
|
@@ -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
|
|
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(
|
|
53
|
-
const jsFiles = globSync(
|
|
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;
|
|
@@ -182,23 +196,30 @@ export const buildWithWebpack = async (spinner, cmd, callback)=>{
|
|
|
182
196
|
if (watchOptionsStdin) webpackOptions.push('--watchOptionsStdin');
|
|
183
197
|
try {
|
|
184
198
|
const { webpackPath } = resolveWebpackPaths(currentDirname);
|
|
185
|
-
|
|
199
|
+
let executablePath = webpackPath;
|
|
186
200
|
let finalWebpackOptions;
|
|
187
201
|
if (webpackPath === 'npx') {
|
|
188
202
|
finalWebpackOptions = [
|
|
189
203
|
'webpack',
|
|
190
204
|
...webpackOptions
|
|
191
205
|
];
|
|
206
|
+
} else if (webpackPath.endsWith('.js')) {
|
|
207
|
+
executablePath = 'node';
|
|
208
|
+
finalWebpackOptions = [
|
|
209
|
+
webpackPath,
|
|
210
|
+
...webpackOptions
|
|
211
|
+
];
|
|
192
212
|
} else {
|
|
193
213
|
finalWebpackOptions = [
|
|
194
214
|
...webpackOptions
|
|
195
215
|
];
|
|
196
216
|
}
|
|
197
217
|
console.log('webpackPath:', webpackPath);
|
|
218
|
+
console.log('executablePath:', executablePath);
|
|
198
219
|
console.log('finalWebpackOptions:', JSON.stringify(finalWebpackOptions));
|
|
199
220
|
console.log('finalWebpackOptions type:', Array.isArray(finalWebpackOptions) ? 'Array' : typeof finalWebpackOptions);
|
|
200
221
|
// Make sure we're passing an array of strings to execa
|
|
201
|
-
const childProcess = execa(
|
|
222
|
+
const childProcess = execa(executablePath, finalWebpackOptions, {
|
|
202
223
|
encoding: 'utf8',
|
|
203
224
|
stdio: 'pipe'
|
|
204
225
|
});
|
|
@@ -246,7 +267,14 @@ export const buildWithWebpack = async (spinner, cmd, callback)=>{
|
|
|
246
267
|
callback(0);
|
|
247
268
|
return 0;
|
|
248
269
|
} catch (error) {
|
|
249
|
-
log(`\n${cliName} Error:
|
|
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);
|
|
250
278
|
spinner.fail('Build failed.');
|
|
251
279
|
if (cmd.assist) {
|
|
252
280
|
spinner.start('AI is analyzing the webpack error...');
|
|
@@ -265,6 +293,9 @@ export const buildWithWebpack = async (spinner, cmd, callback)=>{
|
|
|
265
293
|
}
|
|
266
294
|
}
|
|
267
295
|
}
|
|
296
|
+
if (!quiet) {
|
|
297
|
+
console.error('\nFull Error Details:', error);
|
|
298
|
+
}
|
|
268
299
|
callback(1);
|
|
269
300
|
return 1;
|
|
270
301
|
}
|
|
@@ -317,14 +348,6 @@ export const build = async (cmd, callback = ()=>({}))=>{
|
|
|
317
348
|
if (remove) {
|
|
318
349
|
await removeFiles(outputFullPath || '');
|
|
319
350
|
}
|
|
320
|
-
if (useTypescript) {
|
|
321
|
-
const compileConfigPath = getTypeScriptConfigPath('tsconfig.build.json');
|
|
322
|
-
if (existsSync(compileConfigPath)) {
|
|
323
|
-
log('Using tsconfig.build.json for build...', 'info', quiet);
|
|
324
|
-
} else {
|
|
325
|
-
LexConfig.checkCompileTypescriptConfig();
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
351
|
let buildResult = 0;
|
|
329
352
|
if (bundler === 'swc') {
|
|
330
353
|
buildResult = await buildWithSWC(spinner, cmd, (status)=>{
|
|
@@ -370,6 +393,80 @@ What are the key optimization opportunities for this build configuration? Consid
|
|
|
370
393
|
}
|
|
371
394
|
if (buildResult === 0) {
|
|
372
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
|
+
}
|
|
373
470
|
await copyConfiguredFiles(spinner, LexConfig.config, quiet);
|
|
374
471
|
} catch (copyError) {
|
|
375
472
|
log(`\n${cliName} Error: Failed to copy configured files: ${copyError.message}`, 'error', quiet);
|
|
@@ -382,4 +479,4 @@ What are the key optimization opportunities for this build configuration? Consid
|
|
|
382
479
|
};
|
|
383
480
|
export default build;
|
|
384
481
|
|
|
385
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9idWlsZC9idWlsZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHt0cmFuc2Zvcm19IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQge2V4ZWNhfSBmcm9tICdleGVjYSc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCB7ZGlybmFtZSwgcmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZX0gZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7TGV4Q29uZmlnLCBnZXRUeXBlU2NyaXB0Q29uZmlnUGF0aH0gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y2hlY2tMaW5rZWRNb2R1bGVzLCBjb3B5Q29uZmlndXJlZEZpbGVzLCBjcmVhdGVTcGlubmVyLCBjcmVhdGVQcm9ncmVzc0JhciwgaGFuZGxlV2VicGFja1Byb2dyZXNzLCByZW1vdmVGaWxlc30gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7Z2V0RGlyTmFtZSwgcmVsYXRpdmVOb2RlUGF0aCwgcmVzb2x2ZVdlYnBhY2tQYXRocywgZ2V0TGV4UGFja2FnZUpzb25QYXRofSBmcm9tICcuLi8uLi91dGlscy9maWxlLmpzJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi8uLi91dGlscy9sb2cuanMnO1xuaW1wb3J0IHtwcm9jZXNzVHJhbnNsYXRpb25zfSBmcm9tICcuLi8uLi91dGlscy90cmFuc2xhdGlvbnMuanMnO1xuaW1wb3J0IHthaUZ1bmN0aW9ufSBmcm9tICcuLi9haS9haS5qcyc7XG5pbXBvcnQgYm94ZW4gZnJvbSAnYm94ZW4nO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcblxubGV0IGN1cnJlbnRGaWxlbmFtZTogc3RyaW5nO1xubGV0IGN1cnJlbnREaXJuYW1lOiBzdHJpbmc7XG5cbnRyeSB7XG4gIGN1cnJlbnRGaWxlbmFtZSA9IGV2YWwoJ3JlcXVpcmUoXCJ1cmxcIikuZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpJyk7XG4gIGN1cnJlbnREaXJuYW1lID0gZGlybmFtZShjdXJyZW50RmlsZW5hbWUpO1xufSBjYXRjaCB7XG4gIGN1cnJlbnRGaWxlbmFtZSA9IHByb2Nlc3MuY3dkKCk7XG4gIGN1cnJlbnREaXJuYW1lID0gcHJvY2Vzcy5jd2QoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZE9wdGlvbnMge1xuICByZWFkb25seSBhc3Npc3Q/OiBib29sZWFuO1xuICByZWFkb25seSBhbmFseXplPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgYnVuZGxlcj86ICd3ZWJwYWNrJyB8ICdzd2MnO1xuICByZWFkb25seSBjbGlOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBlbnRyeT86IHN0cmluZzsgLy8gPC0tIGFkZCBlbnRyeVxuICByZWFkb25seSBmb3JtYXQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dHB1dFBhdGg/OiBzdHJpbmc7IC8vIDwtLSBhbHJlYWR5IHByZXNlbnRcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSByZW1vdmU/OiBib29sZWFuO1xuICByZWFkb25seSBzb3VyY2VQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSB0ZXN0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdHJhbnNsYXRpb25zPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdmFyaWFibGVzPzogc3RyaW5nO1xuICByZWFkb25seSB3YXRjaD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIEJ1aWxkQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmNvbnN0IGRpc3BsYXlCdWlsZFN0YXR1cyA9IChidW5kbGVyOiBzdHJpbmcsIG91dHB1dFBhdGg6IHN0cmluZywgcXVpZXQ6IGJvb2xlYW4sIHN0YXRzPzoge21vZHVsZXM/OiBudW1iZXI7IGFzc2V0cz86IG51bWJlcjsgc2l6ZT86IHN0cmluZ30pID0+IHtcbiAgaWYocXVpZXQpIHJldHVybjtcblxuICBsZXQgc3RhdHNJbmZvID0gJyc7XG4gIGlmKHN0YXRzICYmIHN0YXRzLm1vZHVsZXMgJiYgc3RhdHMuYXNzZXRzKSB7XG4gICAgc3RhdHNJbmZvID0gYFxcbiR7Y2hhbGsuZ3JlZW4oJ01vZHVsZXM6Jyl9ICAgICR7Y2hhbGsuY3lhbihzdGF0cy5tb2R1bGVzKX1cXG5gICtcbiAgICAgIGAke2NoYWxrLmdyZWVuKCdBc3NldHM6Jyl9ICAgICAke2NoYWxrLmN5YW4oc3RhdHMuYXNzZXRzKX1cXG5gICtcbiAgICAgIGAke2NoYWxrLmdyZWVuKCdTaXplOicpfSAgICAgICAke2NoYWxrLmN5YW4oc3RhdHMuc2l6ZSl9XFxuYDtcbiAgfVxuXG4gIGNvbnN0IHN0YXR1c0JveCA9IGJveGVuKFxuICAgIGAke2NoYWxrLmN5YW4uYm9sZCgn8J+Pl++4jyAgQnVpbGQgQ29tcGxldGVkIFN1Y2Nlc3NmdWxseScpfVxcblxcbmAgK1xuICAgIGAke2NoYWxrLmdyZWVuKCdCdW5kbGVyOicpfSAgICAke2NoYWxrLmN5YW4oYnVuZGxlcil9XFxuYCArXG4gICAgYCR7Y2hhbGsuZ3JlZW4oJ091dHB1dDonKX0gICAgICR7Y2hhbGsudW5kZXJsaW5lKG91dHB1dFBhdGgpfSR7c3RhdHNJbmZvfVxcbmAgK1xuICAgIGAke2NoYWxrLnllbGxvdygnUmVhZHkgZm9yIGRlcGxveW1lbnQhIPCfmoAnKX1gLFxuICAgIHtcbiAgICAgIHBhZGRpbmc6IDEsXG4gICAgICBtYXJnaW46IDEsXG4gICAgICBib3JkZXJTdHlsZTogJ3JvdW5kJyxcbiAgICAgIGJvcmRlckNvbG9yOiAnZ3JlZW4nLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzFhMWExYSdcbiAgICB9XG4gICk7XG5cbiAgY29uc29sZS5sb2coJ1xcbicgKyBzdGF0dXNCb3ggKyAnXFxuJyk7XG59O1xuXG4vLyBSZW1vdmVkIGJ1aWxkV2l0aEVzQnVpbGQgZnVuY3Rpb24gLSB1c2luZyBTV0MgaW5zdGVhZFxuXG5leHBvcnQgY29uc3QgYnVpbGRXaXRoU1dDID0gYXN5bmMgKHNwaW5uZXIsIGNvbW1hbmRPcHRpb25zOiBCdWlsZE9wdGlvbnMsIGNhbGxiYWNrOiBCdWlsZENhbGxiYWNrKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgZm9ybWF0ID0gJ2VzbScsXG4gICAgb3V0cHV0UGF0aCxcbiAgICBxdWlldCxcbiAgICBzb3VyY2VQYXRoLFxuICAgIHdhdGNoXG4gIH0gPSBjb21tYW5kT3B0aW9ucztcbiAgY29uc3Qge1xuICAgIG91dHB1dEZ1bGxQYXRoLFxuICAgIHNvdXJjZUZ1bGxQYXRoLFxuICAgIHN3Yzogc3djQ29uZmlnLFxuICAgIHRhcmdldEVudmlyb25tZW50LFxuICAgIHVzZUdyYXBoUWwsXG4gICAgdXNlVHlwZXNjcmlwdFxuICB9ID0gTGV4Q29uZmlnLmNvbmZpZztcbiAgY29uc3Qgc291cmNlRGlyOiBzdHJpbmcgPSBzb3VyY2VQYXRoID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgYC4vJHtzb3VyY2VQYXRofWApIDogc291cmNlRnVsbFBhdGggfHwgJyc7XG5cbiAgY29uc3QgZ2xvYk9wdGlvbnMgPSB7XG4gICAgY3dkOiBzb3VyY2VEaXIsXG4gICAgZG90OiBmYWxzZSxcbiAgICBub2RpcjogdHJ1ZSxcbiAgICBub3NvcnQ6IHRydWVcbiAgfTtcbiAgY29uc3QgdHNGaWxlczogc3RyaW5nW10gPSBnbG9iU3luYyhgJHtzb3VyY2VEaXJ9LyoqLyEoKi5zcGVjfCoudGVzdCkudHMqYCwgZ2xvYk9wdGlvbnMpO1xuICBjb25zdCBqc0ZpbGVzOiBzdHJpbmdbXSA9IGdsb2JTeW5jKGAke3NvdXJjZURpcn0vKiovISgqLnNwZWN8Ki50ZXN0KS5qc2AsIGdsb2JPcHRpb25zKTtcbiAgY29uc3Qgc291cmNlRmlsZXM6IHN0cmluZ1tdID0gWy4uLnRzRmlsZXMsIC4uLmpzRmlsZXNdO1xuXG4gIGNvbnN0IG91dHB1dERpcjogc3RyaW5nID0gb3V0cHV0UGF0aCB8fCBvdXRwdXRGdWxsUGF0aCB8fCAnJztcblxuICB0cnkge1xuICAgIHNwaW5uZXIuc3RhcnQoJ0J1aWxkaW5nIHdpdGggU1dDLi4uJyk7XG5cbiAgICBmb3IoY29uc3QgZmlsZSBvZiBzb3VyY2VGaWxlcykge1xuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IHBhdGhSZXNvbHZlKHNvdXJjZURpciwgZmlsZSk7XG4gICAgICBjb25zdCBvdXRwdXRQYXRoID0gcGF0aFJlc29sdmUob3V0cHV0RGlyLCBmaWxlLnJlcGxhY2UoL1xcLih0c3x0c3gpJC8sICcuanMnKSk7XG5cbiAgICAgIC8vIEVuc3VyZSBvdXRwdXQgZGlyZWN0b3J5IGV4aXN0c1xuICAgICAgY29uc3Qgb3V0cHV0RGlyUGF0aCA9IGRpcm5hbWUob3V0cHV0UGF0aCk7XG4gICAgICBpZighZXhpc3RzU3luYyhvdXRwdXREaXJQYXRoKSkge1xuICAgICAgICBjb25zdCB7bWtkaXJTeW5jfSA9IGF3YWl0IGltcG9ydCgnZnMnKTtcbiAgICAgICAgbWtkaXJTeW5jKG91dHB1dERpclBhdGgsIHtyZWN1cnNpdmU6IHRydWV9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlQ29kZSA9IHJlYWRGaWxlU3luYyhzb3VyY2VQYXRoLCAndXRmOCcpO1xuXG4gICAgICBjb25zdCBpc1RTWCA9IGZpbGUuZW5kc1dpdGgoJy50c3gnKTtcblxuICAgICAgLy8gTWVyZ2UgU1dDIGNvbmZpZyB3aXRoIGNvbW1hbmQtc3BlY2lmaWMgb3ZlcnJpZGVzXG4gICAgICBjb25zdCBzd2NPcHRpb25zID0ge1xuICAgICAgICBmaWxlbmFtZTogZmlsZSxcbiAgICAgICAgLi4uc3djQ29uZmlnLFxuICAgICAgICBqc2M6IHtcbiAgICAgICAgICAuLi5zd2NDb25maWc/LmpzYyxcbiAgICAgICAgICBwYXJzZXI6IHtcbiAgICAgICAgICAgIHN5bnRheDogJ3R5cGVzY3JpcHQnIGFzIGNvbnN0LFxuICAgICAgICAgICAgdHN4OiBpc1RTWCxcbiAgICAgICAgICAgIGRlY29yYXRvcnM6IHN3Y0NvbmZpZz8uanNjPy5wYXJzZXI/LmRlY29yYXRvcnMgPz8gdHJ1ZSxcbiAgICAgICAgICAgIGR5bmFtaWNJbXBvcnQ6IHN3Y0NvbmZpZz8uanNjPy5wYXJzZXI/LmR5bmFtaWNJbXBvcnQgPz8gdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGFyZ2V0OiBzd2NDb25maWc/LmpzYz8udGFyZ2V0ID8/ICdlczIwMjAnLFxuICAgICAgICAgIHRyYW5zZm9ybTogaXNUU1ggPyB7XG4gICAgICAgICAgICAuLi5zd2NDb25maWc/LmpzYz8udHJhbnNmb3JtLFxuICAgICAgICAgICAgcmVhY3Q6IHtcbiAgICAgICAgICAgICAgcnVudGltZTogJ2F1dG9tYXRpYycgYXMgY29uc3QsXG4gICAgICAgICAgICAgIC4uLnN3Y0NvbmZpZz8uanNjPy50cmFuc2Zvcm0/LnJlYWN0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSA6IHN3Y0NvbmZpZz8uanNjPy50cmFuc2Zvcm1cbiAgICAgICAgfSxcbiAgICAgICAgbW9kdWxlOiB7XG4gICAgICAgICAgLi4uc3djQ29uZmlnPy5tb2R1bGUsXG4gICAgICAgICAgdHlwZTogZm9ybWF0ID09PSAnY2pzJyA/ICdjb21tb25qcycgYXMgY29uc3QgOiAoc3djQ29uZmlnPy5tb2R1bGU/LnR5cGUgYXMgJ2VzNicgfHwgJ2VzNicpXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybShzb3VyY2VDb2RlLCBzd2NPcHRpb25zKTtcblxuICAgICAgY29uc3Qge3dyaXRlRmlsZVN5bmN9ID0gYXdhaXQgaW1wb3J0KCdmcycpO1xuICAgICAgd3JpdGVGaWxlU3luYyhvdXRwdXRQYXRoLCByZXN1bHQuY29kZSk7XG4gICAgfVxuXG4gICAgc3Bpbm5lci5zdWNjZWVkKCdCdWlsZCBjb21wbGV0ZWQgd2l0aCBTV0MnKTtcbiAgICBkaXNwbGF5QnVpbGRTdGF0dXMoJ1NXQycsIG91dHB1dERpciwgcXVpZXQpO1xuICAgIGNhbGxiYWNrKDApO1xuICAgIHJldHVybiAwO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdCdWlsZCBmYWlsZWQgd2l0aCBTV0MnKTtcbiAgICBpZighcXVpZXQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkV2l0aFdlYnBhY2sgPSBhc3luYyAoc3Bpbm5lciwgY21kLCBjYWxsYmFjaykgPT4ge1xuICBjb25zdCB7XG4gICAgYW5hbHl6ZSxcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZ05hbWUsXG4gICAgZGVmaW5lUHJvY2Vzc0Vudk5vZGVFbnYsXG4gICAgZGV2dG9vbCxcbiAgICBkaXNhYmxlSW50ZXJwcmV0LFxuICAgIGVudHJ5LFxuICAgIGVudixcbiAgICBmYWlsT25XYXJuaW5ncyxcbiAgICBqc29uLFxuICAgIG1lcmdlLFxuICAgIG1vZGUsXG4gICAgbmFtZSxcbiAgICBub2RlRW52LFxuICAgIG5vRGV2dG9vbCxcbiAgICBub1N0YXRzLFxuICAgIG5vVGFyZ2V0LFxuICAgIG5vV2F0Y2gsXG4gICAgbm9XYXRjaE9wdGlvbnNTdGRpbixcbiAgICBvdXRwdXRQYXRoLFxuICAgIHF1aWV0ID0gZmFsc2UsXG4gICAgc3RhdHMsXG4gICAgdGFyZ2V0LFxuICAgIHdhdGNoLFxuICAgIHdhdGNoT3B0aW9uc1N0ZGluXG4gIH0gPSBjbWQ7XG5cbiAgY29uc29sZS5sb2coJ2VudHJ5OicsIGVudHJ5LCAndHlwZTonLCB0eXBlb2YgZW50cnkpO1xuICBjb25zb2xlLmxvZygnb3V0cHV0UGF0aDonLCBvdXRwdXRQYXRoLCAndHlwZTonLCB0eXBlb2Ygb3V0cHV0UGF0aCk7XG5cbiAgY29uc3QgZW50cnlWYWx1ZSA9IEFycmF5LmlzQXJyYXkoZW50cnkpID8gZW50cnlbMF0gOiBlbnRyeTtcblxuICBsZXQgd2VicGFja0NvbmZpZzogc3RyaW5nO1xuXG4gIGlmKGNvbmZpZykge1xuICAgIGNvbnN0IGlzUmVsYXRpdmVDb25maWc6IGJvb2xlYW4gPSBjb25maWcuc3Vic3RyKDAsIDIpID09PSAnLi8nO1xuICAgIHdlYnBhY2tDb25maWcgPSBpc1JlbGF0aXZlQ29uZmlnID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgY29uZmlnKSA6IGNvbmZpZztcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICd3ZWJwYWNrLmNvbmZpZy5qcycpO1xuICAgIGNvbnN0IHByb2plY3RDb25maWdQYXRoVHMgPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnd2VicGFjay5jb25maWcudHMnKTtcbiAgICBjb25zdCBoYXNQcm9qZWN0Q29uZmlnID0gZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aCkgfHwgZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aFRzKTtcblxuICAgIGlmKGhhc1Byb2plY3RDb25maWcpIHtcbiAgICAgIHdlYnBhY2tDb25maWcgPSBleGlzdHNTeW5jKHByb2plY3RDb25maWdQYXRoVHMpID8gcHJvamVjdENvbmZpZ1BhdGhUcyA6IHByb2plY3RDb25maWdQYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7d2VicGFja0NvbmZpZzogcmVzb2x2ZWRDb25maWd9ID0gcmVzb2x2ZVdlYnBhY2tQYXRocyhjdXJyZW50RGlybmFtZSk7XG4gICAgICB3ZWJwYWNrQ29uZmlnID0gcmVzb2x2ZWRDb25maWc7XG4gICAgfVxuICB9XG5cbiAgY29uc29sZS5sb2coJ3dlYnBhY2tDb25maWcgcGF0aDonLCB3ZWJwYWNrQ29uZmlnKTtcbiAgY29uc29sZS5sb2coJ3dlYnBhY2tDb25maWcgZXhpc3RzOicsIGV4aXN0c1N5bmMod2VicGFja0NvbmZpZykpO1xuXG4gIGlmKCFleGlzdHNTeW5jKHdlYnBhY2tDb25maWcpKSB7XG4gICAgY29uc3QgbGV4UGFja2FnZVBhdGggPSBnZXRMZXhQYWNrYWdlSnNvblBhdGgoKTtcbiAgICBjb25zdCBsZXhQYWNrYWdlRGlyID0gZGlybmFtZShsZXhQYWNrYWdlUGF0aCk7XG4gICAgY29uc3QgbGV4V2VicGFja0NvbmZpZyA9IHBhdGhSZXNvbHZlKGxleFBhY2thZ2VEaXIsICd3ZWJwYWNrLmNvbmZpZy5qcycpO1xuXG4gICAgaWYoZXhpc3RzU3luYyhsZXhXZWJwYWNrQ29uZmlnKSkge1xuICAgICAgd2VicGFja0NvbmZpZyA9IGxleFdlYnBhY2tDb25maWc7XG4gICAgICBjb25zb2xlLmxvZygnVXNpbmcgTGV4IHdlYnBhY2sgY29uZmlnOicsIHdlYnBhY2tDb25maWcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENvdWxkIG5vdCBmaW5kIHdlYnBhY2suY29uZmlnLmpzYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgc3Bpbm5lci5mYWlsKCdCdWlsZCBmYWlsZWQuJyk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdlYnBhY2tPcHRpb25zOiBzdHJpbmdbXSA9IFtcbiAgICAnLS1jb2xvcicsXG4gICAgJy0tcHJvZ3Jlc3MnLFxuICAgICctLWNvbmZpZycsIHdlYnBhY2tDb25maWdcbiAgXTtcblxuICBpZihhbmFseXplKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWFuYWx5emUnKTtcbiAgaWYoY29uZmlnTmFtZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1jb25maWdOYW1lJywgY29uZmlnTmFtZSk7XG4gIGlmKGRlZmluZVByb2Nlc3NFbnZOb2RlRW52KSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWRlZmluZVByb2Nlc3NFbnZOb2RlRW52JywgZGVmaW5lUHJvY2Vzc0Vudk5vZGVFbnYpO1xuICBpZihkZXZ0b29sKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWRldnRvb2wnLCBkZXZ0b29sKTtcbiAgaWYoZGlzYWJsZUludGVycHJldCkgd2VicGFja09wdGlvbnMucHVzaCgnLS1kaXNhYmxlSW50ZXJwcmV0Jyk7XG4gIC8vIFBhc3MgZW50cnkgZGlyZWN0bHkgYXMgQ0xJIGZsYWdcbiAgaWYoZW50cnlWYWx1ZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1lbnRyeScsIGVudHJ5VmFsdWUudG9TdHJpbmcoKSk7XG4gIGlmKGVudikgd2VicGFja09wdGlvbnMucHVzaCgnLS1lbnYnLCBlbnYpO1xuICBpZihmYWlsT25XYXJuaW5ncykgd2VicGFja09wdGlvbnMucHVzaCgnLS1mYWlsT25XYXJuaW5ncycpO1xuICBpZihqc29uKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWpzb24nLCBqc29uKTtcbiAgaWYobW9kZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1tb2RlJywgbW9kZSk7XG4gIGlmKG1lcmdlKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW1lcmdlJyk7XG4gIGlmKG5hbWUpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbmFtZScsIG5hbWUpO1xuICBpZihub0RldnRvb2wpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9EZXZ0b29sJyk7XG4gIGlmKG5vU3RhdHMpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9TdGF0cycpO1xuICBpZihub1RhcmdldCkgd2VicGFja09wdGlvbnMucHVzaCgnLS1ub1RhcmdldCcpO1xuICBpZihub1dhdGNoKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW5vV2F0Y2gnKTtcbiAgaWYobm9XYXRjaE9wdGlvbnNTdGRpbikgd2VicGFja09wdGlvbnMucHVzaCgnLS1ub1dhdGNoT3B0aW9uc1N0ZGluJyk7XG4gIGlmKG5vZGVFbnYpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9kZUVudicsIG5vZGVFbnYpO1xuICBpZihvdXRwdXRQYXRoKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW91dHB1dC1wYXRoJywgb3V0cHV0UGF0aC50b1N0cmluZygpKTsgLy8gQ29udmVydCB0byBzdHJpbmdcbiAgaWYoc3RhdHMpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tc3RhdHMnLCBzdGF0cyk7XG4gIGlmKHRhcmdldCkgd2VicGFja09wdGlvbnMucHVzaCgnLS10YXJnZXQnLCB0YXJnZXQpO1xuICBpZih3YXRjaCkgd2VicGFja09wdGlvbnMucHVzaCgnLS13YXRjaCcpO1xuICBpZih3YXRjaE9wdGlvbnNTdGRpbikgd2VicGFja09wdGlvbnMucHVzaCgnLS13YXRjaE9wdGlvbnNTdGRpbicpO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qge3dlYnBhY2tQYXRofSA9IHJlc29sdmVXZWJwYWNrUGF0aHMoY3VycmVudERpcm5hbWUpO1xuXG4gICAgLy8gRml4OiBFbnN1cmUgZmluYWxXZWJwYWNrT3B0aW9ucyBpcyBhbHdheXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgIGxldCBmaW5hbFdlYnBhY2tPcHRpb25zOiBzdHJpbmdbXTtcbiAgICBpZih3ZWJwYWNrUGF0aCA9PT0gJ25weCcpIHtcbiAgICAgIGZpbmFsV2VicGFja09wdGlvbnMgPSBbJ3dlYnBhY2snLCAuLi53ZWJwYWNrT3B0aW9uc107XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbmFsV2VicGFja09wdGlvbnMgPSBbLi4ud2VicGFja09wdGlvbnNdO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCd3ZWJwYWNrUGF0aDonLCB3ZWJwYWNrUGF0aCk7XG4gICAgY29uc29sZS5sb2coJ2ZpbmFsV2VicGFja09wdGlvbnM6JywgSlNPTi5zdHJpbmdpZnkoZmluYWxXZWJwYWNrT3B0aW9ucykpO1xuICAgIGNvbnNvbGUubG9nKCdmaW5hbFdlYnBhY2tPcHRpb25zIHR5cGU6JywgQXJyYXkuaXNBcnJheShmaW5hbFdlYnBhY2tPcHRpb25zKSA/ICdBcnJheScgOiB0eXBlb2YgZmluYWxXZWJwYWNrT3B0aW9ucyk7XG5cbiAgICAvLyBNYWtlIHN1cmUgd2UncmUgcGFzc2luZyBhbiBhcnJheSBvZiBzdHJpbmdzIHRvIGV4ZWNhXG4gICAgY29uc3QgY2hpbGRQcm9jZXNzID0gZXhlY2Eod2VicGFja1BhdGgsIGZpbmFsV2VicGFja09wdGlvbnMsIHtlbmNvZGluZzogJ3V0ZjgnLCBzdGRpbzogJ3BpcGUnfSk7XG5cbiAgICBsZXQgYnVpbGRDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICBsZXQgYnVpbGRTdGF0cyA9IHtcbiAgICAgIG1vZHVsZXM6IDAsXG4gICAgICBhc3NldHM6IDAsXG4gICAgICBzaXplOiAnMCBCJ1xuICAgIH07XG5cbiAgICBjaGlsZFByb2Nlc3Muc3Rkb3V0Py5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGRhdGEudG9TdHJpbmcoKTtcblxuICAgICAgaGFuZGxlV2VicGFja1Byb2dyZXNzKG91dHB1dCwgc3Bpbm5lciwgcXVpZXQsICfwn4+X77iPJywgJ1dlYnBhY2sgQnVpbGRpbmcnKTtcblxuICAgICAgaWYoIWJ1aWxkQ29tcGxldGVkICYmIG91dHB1dC5pbmNsdWRlcygnY29tcGlsZWQgc3VjY2Vzc2Z1bGx5JykpIHtcbiAgICAgICAgYnVpbGRDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0J1aWxkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhJyk7XG5cbiAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBtb2R1bGVzLyk7XG4gICAgICAgIGNvbnN0IGFzc2V0TWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBhc3NldHMvKTtcbiAgICAgICAgY29uc3Qgc2l6ZU1hdGNoID0gb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgc3RhdHVzIChbXFxkLl0rIFxcdyspLykgfHwgb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgcGF0aC4qPyhbXFxkLl0rIFxcdyspLyk7XG5cbiAgICAgICAgaWYobW9kdWxlTWF0Y2gpIGJ1aWxkU3RhdHMubW9kdWxlcyA9IHBhcnNlSW50KG1vZHVsZU1hdGNoWzFdLCAxMCk7XG4gICAgICAgIGlmKGFzc2V0TWF0Y2gpIGJ1aWxkU3RhdHMuYXNzZXRzID0gcGFyc2VJbnQoYXNzZXRNYXRjaFsxXSwgMTApO1xuICAgICAgICBpZihzaXplTWF0Y2gpIGJ1aWxkU3RhdHMuc2l6ZSA9IHNpemVNYXRjaFsxXTtcblxuICAgICAgICBkaXNwbGF5QnVpbGRTdGF0dXMoJ3dlYnBhY2snLCBMZXhDb25maWcuY29uZmlnLm91dHB1dEZ1bGxQYXRoIHx8ICdsaWInLCBxdWlldCwgYnVpbGRTdGF0cyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjaGlsZFByb2Nlc3Muc3RkZXJyPy5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGRhdGEudG9TdHJpbmcoKTtcblxuICAgICAgaGFuZGxlV2VicGFja1Byb2dyZXNzKG91dHB1dCwgc3Bpbm5lciwgcXVpZXQsICfwn4+X77iPJywgJ1dlYnBhY2sgQnVpbGRpbmcnKTtcblxuICAgICAgaWYoIWJ1aWxkQ29tcGxldGVkICYmIG91dHB1dC5pbmNsdWRlcygnY29tcGlsZWQgc3VjY2Vzc2Z1bGx5JykpIHtcbiAgICAgICAgYnVpbGRDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0J1aWxkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhJyk7XG5cbiAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBtb2R1bGVzLyk7XG4gICAgICAgIGNvbnN0IGFzc2V0TWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBhc3NldHMvKTtcbiAgICAgICAgY29uc3Qgc2l6ZU1hdGNoID0gb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgc3RhdHVzIChbXFxkLl0rIFxcdyspLykgfHwgb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgcGF0aC4qPyhbXFxkLl0rIFxcdyspLyk7XG5cbiAgICAgICAgaWYobW9kdWxlTWF0Y2gpIGJ1aWxkU3RhdHMubW9kdWxlcyA9IHBhcnNlSW50KG1vZHVsZU1hdGNoWzFdLCAxMCk7XG4gICAgICAgIGlmKGFzc2V0TWF0Y2gpIGJ1aWxkU3RhdHMuYXNzZXRzID0gcGFyc2VJbnQoYXNzZXRNYXRjaFsxXSwgMTApO1xuICAgICAgICBpZihzaXplTWF0Y2gpIGJ1aWxkU3RhdHMuc2l6ZSA9IHNpemVNYXRjaFsxXTtcblxuICAgICAgICBkaXNwbGF5QnVpbGRTdGF0dXMoJ3dlYnBhY2snLCBMZXhDb25maWcuY29uZmlnLm91dHB1dEZ1bGxQYXRoIHx8ICdsaWInLCBxdWlldCwgYnVpbGRTdGF0cyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhd2FpdCBjaGlsZFByb2Nlc3M7XG5cbiAgICBpZighYnVpbGRDb21wbGV0ZWQpIHtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZCgnQnVpbGQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSEnKTtcbiAgICAgIGRpc3BsYXlCdWlsZFN0YXR1cygnd2VicGFjaycsIExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGggfHwgJ2xpYicsIHF1aWV0LCBidWlsZFN0YXRzKTtcbiAgICB9XG5cbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIHNwaW5uZXIuZmFpbCgnQnVpbGQgZmFpbGVkLicpO1xuXG4gICAgaWYoY21kLmFzc2lzdCkge1xuICAgICAgc3Bpbm5lci5zdGFydCgnQUkgaXMgYW5hbHl6aW5nIHRoZSB3ZWJwYWNrIGVycm9yLi4uJyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGFpRnVuY3Rpb24oe1xuICAgICAgICAgIHByb21wdDogYEZpeCB0aGlzIHdlYnBhY2sgYnVpbGQgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1cXG5cXG5FcnJvciBkZXRhaWxzOlxcbiR7ZXJyb3IudG9TdHJpbmcoKX1cXG5cXG5Db25maWd1cmF0aW9uIHVzZWQ6XFxuJHtKU09OLnN0cmluZ2lmeSh3ZWJwYWNrT3B0aW9ucywgbnVsbCwgMil9YCxcbiAgICAgICAgICB0YXNrOiAnaGVscCcsXG4gICAgICAgICAgY29udGV4dDogdHJ1ZSxcbiAgICAgICAgICBxdWlldFxuICAgICAgICB9KTtcblxuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0FJIGFuYWx5c2lzIGNvbXBsZXRlJyk7XG4gICAgICB9IGNhdGNoKGFpRXJyb3IpIHtcbiAgICAgICAgc3Bpbm5lci5mYWlsKCdDb3VsZCBub3QgZ2VuZXJhdGUgQUkgYXNzaXN0YW5jZScpO1xuICAgICAgICBpZighcXVpZXQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdBSSBhc3Npc3RhbmNlIGVycm9yOicsIGFpRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZCA9IGFzeW5jIChjbWQ6IEJ1aWxkT3B0aW9ucywgY2FsbGJhY2s6IEJ1aWxkQ2FsbGJhY2sgPSAoKSA9PiAoe30pKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge1xuICAgIGJ1bmRsZXIgPSAnd2VicGFjaycsXG4gICAgY2xpTmFtZSA9ICdMZXgnLFxuICAgIHF1aWV0ID0gZmFsc2UsXG4gICAgcmVtb3ZlID0gZmFsc2UsXG4gICAgdGVzdCA9IGZhbHNlLFxuICAgIHRyYW5zbGF0aW9ucyA9IGZhbHNlLFxuICAgIHZhcmlhYmxlcyA9ICd7fSdcbiAgfSA9IGNtZDtcblxuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgbG9nKGAke2NsaU5hbWV9IGJ1aWxkaW5nLi4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgYXdhaXQgTGV4Q29uZmlnLnBhcnNlQ29uZmlnKGNtZCk7XG5cbiAgY29uc3Qge291dHB1dEZ1bGxQYXRoLCB1c2VUeXBlc2NyaXB0fSA9IExleENvbmZpZy5jb25maWc7XG5cbiAgY2hlY2tMaW5rZWRNb2R1bGVzKCk7XG5cbiAgbGV0IHZhcmlhYmxlc09iajogb2JqZWN0ID0ge05PREVfRU5WOiAncHJvZHVjdGlvbid9O1xuXG4gIGlmKHZhcmlhYmxlcykge1xuICAgIHRyeSB7XG4gICAgICB2YXJpYWJsZXNPYmogPSBKU09OLnBhcnNlKHZhcmlhYmxlcyk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgb3B0aW9uIGlzIG5vdCBhIHZhbGlkIEpTT04gb2JqZWN0LmAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzLmVudiA9IHsuLi5wcm9jZXNzLmVudiwgLi4udmFyaWFibGVzT2JqfTtcblxuICAvLyBJZiBpbiB0ZXN0IG1vZGUsIGV4aXQgZWFybHlcbiAgaWYodGVzdCkge1xuICAgIGxvZygnVGVzdCBtb2RlOiBCdWlsZCBlbnZpcm9ubWVudCBsb2FkZWQsIGV4aXRpbmcnLCAnaW5mbycsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8vIFByb2Nlc3MgdHJhbnNsYXRpb25zIGlmIGZsYWcgaXMgZW5hYmxlZCAoYmVmb3JlIGJ1aWxkaW5nKVxuICBpZih0cmFuc2xhdGlvbnMpIHtcbiAgICBzcGlubmVyLnN0YXJ0KCdQcm9jZXNzaW5nIHRyYW5zbGF0aW9ucy4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBMZXhDb25maWcuY29uZmlnLnNvdXJjZUZ1bGxQYXRoIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgICBjb25zdCBvdXRwdXRQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRGdWxsUGF0aCB8fCAnbGliJztcblxuICAgICAgYXdhaXQgcHJvY2Vzc1RyYW5zbGF0aW9ucyhzb3VyY2VQYXRoLCBvdXRwdXRQYXRoLCBxdWlldCk7XG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ1RyYW5zbGF0aW9ucyBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICAgIH0gY2F0Y2godHJhbnNsYXRpb25FcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBGYWlsZWQgdG8gcHJvY2VzcyB0cmFuc2xhdGlvbnM6ICR7dHJhbnNsYXRpb25FcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIHByb2Nlc3MgdHJhbnNsYXRpb25zLicpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBzcGlubmVyLnN0YXJ0KCdCdWlsZGluZyBjb2RlLi4uJyk7XG5cbiAgaWYocmVtb3ZlKSB7XG4gICAgYXdhaXQgcmVtb3ZlRmlsZXMob3V0cHV0RnVsbFBhdGggfHwgJycpO1xuICB9XG5cbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIGNvbnN0IGNvbXBpbGVDb25maWdQYXRoID0gZ2V0VHlwZVNjcmlwdENvbmZpZ1BhdGgoJ3RzY29uZmlnLmJ1aWxkLmpzb24nKTtcbiAgICBpZihleGlzdHNTeW5jKGNvbXBpbGVDb25maWdQYXRoKSkge1xuICAgICAgbG9nKCdVc2luZyB0c2NvbmZpZy5idWlsZC5qc29uIGZvciBidWlsZC4uLicsICdpbmZvJywgcXVpZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBMZXhDb25maWcuY2hlY2tDb21waWxlVHlwZXNjcmlwdENvbmZpZygpO1xuICAgIH1cbiAgfVxuXG4gIGxldCBidWlsZFJlc3VsdCA9IDA7XG5cbiAgaWYoYnVuZGxlciA9PT0gJ3N3YycpIHtcbiAgICBidWlsZFJlc3VsdCA9IGF3YWl0IGJ1aWxkV2l0aFNXQyhzcGlubmVyLCBjbWQsIChzdGF0dXMpID0+IHtcbiAgICAgIGJ1aWxkUmVzdWx0ID0gc3RhdHVzO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGJ1aWxkUmVzdWx0ID0gYXdhaXQgYnVpbGRXaXRoV2VicGFjayhzcGlubmVyLCBjbWQsIChzdGF0dXMpID0+IHtcbiAgICAgIGJ1aWxkUmVzdWx0ID0gc3RhdHVzO1xuICAgIH0pO1xuICB9XG5cbiAgaWYoYnVpbGRSZXN1bHQgPT09IDAgJiYgY21kLmFuYWx5emUpIHtcbiAgICBzcGlubmVyLnN0YXJ0KCdBSSBpcyBhbmFseXppbmcgdGhlIGJ1aWxkIG91dHB1dCBmb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0cyA9IHtcbiAgICAgICAgb3V0cHV0UGF0aDogTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRGdWxsUGF0aCxcbiAgICAgICAgZW50cnlQb2ludHM6IGJ1bmRsZXIgPT09ICdzd2MnID9cbiAgICAgICAgICBgU291cmNlIGZpbGVzOiAke0xleENvbmZpZy5jb25maWcuc291cmNlRnVsbFBhdGh9LyoqLyoue3RzLGpzfWAgOlxuICAgICAgICAgIExleENvbmZpZy5jb25maWcud2VicGFjaz8uZW50cnkgfHwgJ1Vua25vd24gZW50cnkgcG9pbnRzJ1xuICAgICAgfTtcblxuICAgICAgYXdhaXQgYWlGdW5jdGlvbih7XG4gICAgICAgIHByb21wdDogYEFuYWx5emUgdGhpcyBidWlsZCBmb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXM6XG5cbkJ1aWxkIFR5cGU6ICR7YnVuZGxlcn1cbkZvcm1hdDogJHtjbWQuZm9ybWF0IHx8ICdkZWZhdWx0J31cbkVudmlyb25tZW50OiAke0xleENvbmZpZy5jb25maWcudGFyZ2V0RW52aXJvbm1lbnR9XG4ke0pTT04uc3RyaW5naWZ5KHN0YXRzLCBudWxsLCAyKX1cblxuV2hhdCBhcmUgdGhlIGtleSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBmb3IgdGhpcyBidWlsZCBjb25maWd1cmF0aW9uPyBDb25zaWRlcjpcbjEuIEJ1bmRsZSBzaXplIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzXG4yLiBDb2RlIHNwbGl0dGluZyByZWNvbW1lbmRhdGlvbnNcbjMuIFRyZWUtc2hha2luZyBpbXByb3ZlbWVudHNcbjQuIFBlcmZvcm1hbmNlIGVuaGFuY2VtZW50c1xuNS4gRGVwZW5kZW5jeSBvcHRpbWl6YXRpb25zYCxcbiAgICAgICAgdGFzazogJ29wdGltaXplJyxcbiAgICAgICAgY29udGV4dDogdHJ1ZSxcbiAgICAgICAgcXVpZXRcbiAgICAgIH0pO1xuXG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ0FJIGJ1aWxkIGFuYWx5c2lzIGNvbXBsZXRlJyk7XG4gICAgfSBjYXRjaChhaUVycm9yKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0NvdWxkIG5vdCBnZW5lcmF0ZSBBSSBvcHRpbWl6YXRpb24gYW5hbHlzaXMnKTtcbiAgICAgIGlmKCFxdWlldCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdBSSBhbmFseXNpcyBlcnJvcjonLCBhaUVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZihidWlsZFJlc3VsdCA9PT0gMCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb3B5Q29uZmlndXJlZEZpbGVzKHNwaW5uZXIsIExleENvbmZpZy5jb25maWcsIHF1aWV0KTtcbiAgICB9IGNhdGNoKGNvcHlFcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBGYWlsZWQgdG8gY29weSBjb25maWd1cmVkIGZpbGVzOiAke2NvcHlFcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgY2FsbGJhY2soYnVpbGRSZXN1bHQpO1xuICByZXR1cm4gYnVpbGRSZXN1bHQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBidWlsZDtcbiJdLCJuYW1lcyI6WyJ0cmFuc2Zvcm0iLCJleGVjYSIsImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJzeW5jIiwiZ2xvYlN5bmMiLCJkaXJuYW1lIiwicmVzb2x2ZSIsInBhdGhSZXNvbHZlIiwiTGV4Q29uZmlnIiwiZ2V0VHlwZVNjcmlwdENvbmZpZ1BhdGgiLCJjaGVja0xpbmtlZE1vZHVsZXMiLCJjb3B5Q29uZmlndXJlZEZpbGVzIiwiY3JlYXRlU3Bpbm5lciIsImhhbmRsZVdlYnBhY2tQcm9ncmVzcyIsInJlbW92ZUZpbGVzIiwicmVzb2x2ZVdlYnBhY2tQYXRocyIsImdldExleFBhY2thZ2VKc29uUGF0aCIsImxvZyIsInByb2Nlc3NUcmFuc2xhdGlvbnMiLCJhaUZ1bmN0aW9uIiwiYm94ZW4iLCJjaGFsayIsImN1cnJlbnRGaWxlbmFtZSIsImN1cnJlbnREaXJuYW1lIiwiZXZhbCIsInByb2Nlc3MiLCJjd2QiLCJkaXNwbGF5QnVpbGRTdGF0dXMiLCJidW5kbGVyIiwib3V0cHV0UGF0aCIsInF1aWV0Iiwic3RhdHMiLCJzdGF0c0luZm8iLCJtb2R1bGVzIiwiYXNzZXRzIiwiZ3JlZW4iLCJjeWFuIiwic2l6ZSIsInN0YXR1c0JveCIsImJvbGQiLCJ1bmRlcmxpbmUiLCJ5ZWxsb3ciLCJwYWRkaW5nIiwibWFyZ2luIiwiYm9yZGVyU3R5bGUiLCJib3JkZXJDb2xvciIsImJhY2tncm91bmRDb2xvciIsImNvbnNvbGUiLCJidWlsZFdpdGhTV0MiLCJzcGlubmVyIiwiY29tbWFuZE9wdGlvbnMiLCJjYWxsYmFjayIsImNsaU5hbWUiLCJmb3JtYXQiLCJzb3VyY2VQYXRoIiwid2F0Y2giLCJvdXRwdXRGdWxsUGF0aCIsInNvdXJjZUZ1bGxQYXRoIiwic3djIiwic3djQ29uZmlnIiwidGFyZ2V0RW52aXJvbm1lbnQiLCJ1c2VHcmFwaFFsIiwidXNlVHlwZXNjcmlwdCIsImNvbmZpZyIsInNvdXJjZURpciIsImdsb2JPcHRpb25zIiwiZG90Iiwibm9kaXIiLCJub3NvcnQiLCJ0c0ZpbGVzIiwianNGaWxlcyIsInNvdXJjZUZpbGVzIiwib3V0cHV0RGlyIiwic3RhcnQiLCJmaWxlIiwicmVwbGFjZSIsIm91dHB1dERpclBhdGgiLCJta2RpclN5bmMiLCJyZWN1cnNpdmUiLCJzb3VyY2VDb2RlIiwiaXNUU1giLCJlbmRzV2l0aCIsInN3Y09wdGlvbnMiLCJmaWxlbmFtZSIsImpzYyIsInBhcnNlciIsInN5bnRheCIsInRzeCIsImRlY29yYXRvcnMiLCJkeW5hbWljSW1wb3J0IiwidGFyZ2V0IiwicmVhY3QiLCJydW50aW1lIiwibW9kdWxlIiwidHlwZSIsInJlc3VsdCIsIndyaXRlRmlsZVN5bmMiLCJjb2RlIiwic3VjY2VlZCIsImVycm9yIiwiZmFpbCIsImJ1aWxkV2l0aFdlYnBhY2siLCJjbWQiLCJhbmFseXplIiwiY29uZmlnTmFtZSIsImRlZmluZVByb2Nlc3NFbnZOb2RlRW52IiwiZGV2dG9vbCIsImRpc2FibGVJbnRlcnByZXQiLCJlbnRyeSIsImVudiIsImZhaWxPbldhcm5pbmdzIiwianNvbiIsIm1lcmdlIiwibW9kZSIsIm5hbWUiLCJub2RlRW52Iiwibm9EZXZ0b29sIiwibm9TdGF0cyIsIm5vVGFyZ2V0Iiwibm9XYXRjaCIsIm5vV2F0Y2hPcHRpb25zU3RkaW4iLCJ3YXRjaE9wdGlvbnNTdGRpbiIsImVudHJ5VmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJ3ZWJwYWNrQ29uZmlnIiwiaXNSZWxhdGl2ZUNvbmZpZyIsInN1YnN0ciIsInByb2plY3RDb25maWdQYXRoIiwicHJvamVjdENvbmZpZ1BhdGhUcyIsImhhc1Byb2plY3RDb25maWciLCJyZXNvbHZlZENvbmZpZyIsImxleFBhY2thZ2VQYXRoIiwibGV4UGFja2FnZURpciIsImxleFdlYnBhY2tDb25maWciLCJ3ZWJwYWNrT3B0aW9ucyIsInB1c2giLCJ0b1N0cmluZyIsIndlYnBhY2tQYXRoIiwiZmluYWxXZWJwYWNrT3B0aW9ucyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjaGlsZFByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiYnVpbGRDb21wbGV0ZWQiLCJidWlsZFN0YXRzIiwic3Rkb3V0Iiwib24iLCJkYXRhIiwib3V0cHV0IiwiaW5jbHVkZXMiLCJtb2R1bGVNYXRjaCIsIm1hdGNoIiwiYXNzZXRNYXRjaCIsInNpemVNYXRjaCIsInBhcnNlSW50Iiwic3RkZXJyIiwibWVzc2FnZSIsImFzc2lzdCIsInByb21wdCIsInRhc2siLCJjb250ZXh0IiwiYWlFcnJvciIsImJ1aWxkIiwicmVtb3ZlIiwidGVzdCIsInRyYW5zbGF0aW9ucyIsInZhcmlhYmxlcyIsInBhcnNlQ29uZmlnIiwidmFyaWFibGVzT2JqIiwiTk9ERV9FTlYiLCJwYXJzZSIsInRyYW5zbGF0aW9uRXJyb3IiLCJjb21waWxlQ29uZmlnUGF0aCIsImNoZWNrQ29tcGlsZVR5cGVzY3JpcHRDb25maWciLCJidWlsZFJlc3VsdCIsInN0YXR1cyIsImVudHJ5UG9pbnRzIiwid2VicGFjayIsImNvcHlFcnJvciJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsU0FBUyxRQUFPLFlBQVk7QUFDcEMsU0FBUUMsS0FBSyxRQUFPLFFBQVE7QUFDNUIsU0FBUUMsVUFBVSxFQUFFQyxZQUFZLFFBQU8sS0FBSztBQUM1QyxTQUFRQyxRQUFRQyxRQUFRLFFBQU8sT0FBTztBQUN0QyxTQUFRQyxPQUFPLEVBQUVDLFdBQVdDLFdBQVcsUUFBTyxPQUFPO0FBRXJELFNBQVFDLFNBQVMsRUFBRUMsdUJBQXVCLFFBQU8scUJBQXFCO0FBQ3RFLFNBQVFDLGtCQUFrQixFQUFFQyxtQkFBbUIsRUFBRUMsYUFBYSxFQUFxQkMscUJBQXFCLEVBQUVDLFdBQVcsUUFBTyxxQkFBcUI7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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/
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jbGVhbi9jbGVhbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NyZWF0ZVNwaW5uZXIsIHJlbW92ZUZpbGVzLCByZW1vdmVNb2R1bGVzfSBmcm9tICcuLi8uLi91dGlscy9hcHAuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xlYW5PcHRpb25zIHtcbiAgcmVhZG9ubHkgY2xpTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSBzbmFwc2hvdHM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBDbGVhbkNhbGxiYWNrID0gKHN0YXR1czogbnVtYmVyKT0+IHZvaWQ7XG5cbmV4cG9ydCBjb25zdCBjbGVhbiA9IGFzeW5jIChcbiAgY21kOiBDbGVhbk9wdGlvbnMsXG4gIGNhbGxiYWNrOiBDbGVhbkNhbGxiYWNrID0gKF9zdGF0dXM6IG51bWJlcikgPT4gKHt9KVxuKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge2NsaU5hbWUgPSAnTGV4JywgcXVpZXQsIHNuYXBzaG90c30gPSBjbWQ7XG5cbiAgLy8gU3Bpbm5lclxuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgLy8gRGlzcGxheSBzdGF0dXNcbiAgbG9nKGAke2NsaU5hbWV9IGNsZWFuaW5nIGRpcmVjdG9yeS4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIC8vIEdldCBjdXN0b20gY29uZmlndXJhdGlvblxuICBhd2FpdCBMZXhDb25maWcucGFyc2VDb25maWcoY21kKTtcblxuICAvLyBTdGFydCBjbGVhbmluZyBzcGlubmVyXG4gIGlmKHNwaW5uZXIpIHtcbiAgICBzcGlubmVyLnN0YXJ0KCdDbGVhbmluZyBmaWxlcy4uLicpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBSZW1vdmUgbm9kZV9tb2R1bGVzXG4gICAgYXdhaXQgcmVtb3ZlTW9kdWxlcygpO1xuXG4gICAgLy8gUmVtb3ZlIHRlc3QgY292ZXJhZ2UgcmVwb3J0c1xuICAgIGF3YWl0IHJlbW92ZUZpbGVzKCcuL2NvdmVyYWdlJywgdHJ1ZSk7XG5cbiAgICAvLyBSZW1vdmUgbnBtIGxvZ3NcbiAgICBhd2FpdCByZW1vdmVGaWxlcygnLi9ucG0tZGVidWcubG9nJywgdHJ1ZSk7XG5cbiAgICBpZihzbmFwc2hvdHMpIHtcbiAgICAgIGF3YWl0IHJlbW92ZUZpbGVzKCcuLyoqL19fc25hcHNob3RzX18nLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBTdG9wIHNwaW5uZXJcbiAgICBpZihzcGlubmVyKSB7XG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ1N1Y2Nlc3NmdWxseSBjbGVhbmVkIScpO1xuICAgIH1cblxuICAgIC8vIFN0b3AgcHJvY2Vzc1xuICAgIGNhbGxiYWNrKDApO1xuICAgIHJldHVybiAwO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgLy8gRGlzcGxheSBlcnJvciBtZXNzYWdlXG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgLy8gU3RvcCBzcGlubmVyXG4gICAgaWYoc3Bpbm5lcikge1xuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gY2xlYW4gcHJvamVjdC4nKTtcbiAgICB9XG5cbiAgICAvLyBLaWxsIHByb2Nlc3NcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxufTsiXSwibmFtZXMiOlsiTGV4Q29uZmlnIiwiY3JlYXRlU3Bpbm5lciIsInJlbW92ZUZpbGVzIiwicmVtb3ZlTW9kdWxlcyIsImxvZyIsImNsZWFuIiwiY21kIiwiY2FsbGJhY2siLCJfc3RhdHVzIiwiY2xpTmFtZSIsInF1aWV0Iiwic25hcHNob3RzIiwic3Bpbm5lciIsInBhcnNlQ29uZmlnIiwic3RhcnQiLCJzdWNjZWVkIiwiZXJyb3IiLCJtZXNzYWdlIiwiZmFpbCJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsU0FBUyxRQUFPLHFCQUFxQjtBQUM3QyxTQUFRQyxhQUFhLEVBQUVDLFdBQVcsRUFBRUMsYUFBYSxRQUFPLHFCQUFxQjtBQUM3RSxTQUFRQyxHQUFHLFFBQU8scUJBQXFCO0FBVXZDLE9BQU8sTUFBTUMsUUFBUSxPQUNuQkMsS0FDQUMsV0FBMEIsQ0FBQ0MsVUFBcUIsQ0FBQSxDQUFDLENBQUEsQ0FBRTtJQUVuRCxNQUFNLEVBQUNDLFVBQVUsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLFNBQVMsRUFBQyxHQUFHTDtJQUU1QyxVQUFVO0lBQ1YsTUFBTU0sVUFBVVgsY0FBY1M7SUFFOUIsaUJBQWlCO0lBQ2pCTixJQUFJLEdBQUdLLFFBQVEsc0JBQXNCLENBQUMsRUFBRSxRQUFRQztJQUVoRCwyQkFBMkI7SUFDM0IsTUFBTVYsVUFBVWEsV0FBVyxDQUFDUDtJQUU1Qix5QkFBeUI7SUFDekIsSUFBR00sU0FBUztRQUNWQSxRQUFRRSxLQUFLLENBQUM7SUFDaEI7SUFFQSxJQUFJO1FBQ0Ysc0JBQXNCO1FBQ3RCLE1BQU1YO1FBRU4sK0JBQStCO1FBQy9CLE1BQU1ELFlBQVksY0FBYztRQUVoQyxrQkFBa0I7UUFDbEIsTUFBTUEsWUFBWSxtQkFBbUI7UUFFckMsSUFBR1MsV0FBVztZQUNaLE1BQU1ULFlBQVksc0JBQXNCO1FBQzFDO1FBRUEsZUFBZTtRQUNmLElBQUdVLFNBQVM7WUFDVkEsUUFBUUcsT0FBTyxDQUFDO1FBQ2xCO1FBRUEsZUFBZTtRQUNmUixTQUFTO1FBQ1QsT0FBTztJQUNULEVBQUUsT0FBTVMsT0FBTztRQUNiLHdCQUF3QjtRQUN4QlosSUFBSSxDQUFDLEVBQUUsRUFBRUssUUFBUSxRQUFRLEVBQUVPLE1BQU1DLE9BQU8sRUFBRSxFQUFFLFNBQVNQO1FBRXJELGVBQWU7UUFDZixJQUFHRSxTQUFTO1lBQ1ZBLFFBQVFNLElBQUksQ0FBQztRQUNmO1FBRUEsZUFBZTtRQUNmWCxTQUFTO1FBQ1QsT0FBTztJQUNUO0FBQ0YsRUFBRSJ9
|