@nlabs/lex 1.57.0 → 1.58.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/lib/index.d.ts CHANGED
@@ -25,9 +25,9 @@ export * from './commands/init/init.js';
25
25
  export * from './commands/link/link.js';
26
26
  export * from './commands/lint/lint.js';
27
27
  export * from './commands/migrate/migrate.js';
28
- export * from './commands/package-lambda/package-lambda.js';
28
+ export * from './commands/serverless-deploy/serverless-deploy.js';
29
29
  export * from './commands/publish/publish.js';
30
- export * from './commands/serverless/serverless.js';
30
+ export * from './commands/serverless-dev/serverless-dev.js';
31
31
  export * from './commands/storybook/storybook.js';
32
32
  export * from './commands/test/test.js';
33
33
  export * from './commands/update/update.js';
package/lib/index.js CHANGED
@@ -29,13 +29,13 @@ export * from './commands/init/init.js';
29
29
  export * from './commands/link/link.js';
30
30
  export * from './commands/lint/lint.js';
31
31
  export * from './commands/migrate/migrate.js';
32
- export * from './commands/package-lambda/package-lambda.js';
32
+ export * from './commands/serverless-deploy/serverless-deploy.js';
33
33
  export * from './commands/publish/publish.js';
34
- export * from './commands/serverless/serverless.js';
34
+ export * from './commands/serverless-dev/serverless-dev.js';
35
35
  export * from './commands/storybook/storybook.js';
36
36
  export * from './commands/test/test.js';
37
37
  export * from './commands/update/update.js';
38
38
  export * from './commands/upgrade/upgrade.js';
39
39
  export * from './commands/versions/versions.js';
40
40
 
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7TGV4Q29uZmlnVHlwZX0gZnJvbSAnLi9MZXhDb25maWcuanMnO1xuXG4vLyBFeHBvcnQgdHlwZXMgZnJvbSB0eXBlcy50c1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIEV4cG9ydCBjbGFzc2VzIGFuZCB2YWx1ZXMgZnJvbSBMZXhDb25maWdcbmV4cG9ydCB7XG4gIGRlZmF1bHRDb25maWdWYWx1ZXMsIExleENvbmZpZ1xufSBmcm9tICcuL0xleENvbmZpZy5qcyc7XG5cbi8vIEV4cG9ydCBDb25maWcgYXMgYm90aCBhIHR5cGUgYW5kIGEgbmFtZXNwYWNlIHdpdGggY3JlYXRlIG1ldGhvZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuZXhwb3J0IGNvbnN0IENvbmZpZyA9IHtcbiAgY3JlYXRlOiAoY29uZmlnOiBMZXhDb25maWdUeXBlKSA9PiBjb25maWdcbn07XG5cbi8vIEV4cG9ydCB1dGlsaXR5IGZ1bmN0aW9uc1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9haVNlcnZpY2UuanMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9hcHAuanMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9maWxlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvbG9nLmpzJztcblxuLy8gRXhwb3J0IFN0b3J5Ym9vayBtb2R1bGVcbmV4cG9ydCAqIGZyb20gJy4vc3Rvcnlib29rL2luZGV4LmpzJztcblxuLy8gRXhwb3J0IGNvbW1hbmRzXG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2FpL2FpLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvYnVpbGQvYnVpbGQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy9jbGVhbi9jbGVhbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2NvbXBpbGUvY29tcGlsZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2NvbmZpZy9jb25maWcuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy9jb3B5L2NvcHkuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy9jcmVhdGUvY3JlYXRlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvZGV2L2Rldi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2luaXQvaW5pdC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2xpbmsvbGluay5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2xpbnQvbGludC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL21pZ3JhdGUvbWlncmF0ZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL3BhY2thZ2UtbGFtYmRhL3BhY2thZ2UtbGFtYmRhLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvcHVibGlzaC9wdWJsaXNoLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvc2VydmVybGVzcy9zZXJ2ZXJsZXNzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvc3Rvcnlib29rL3N0b3J5Ym9vay5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL3Rlc3QvdGVzdC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL3VwZGF0ZS91cGRhdGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy91cGdyYWRlL3VwZ3JhZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy92ZXJzaW9ucy92ZXJzaW9ucy5qcyc7XG4iXSwibmFtZXMiOlsiZGVmYXVsdENvbmZpZ1ZhbHVlcyIsIkxleENvbmZpZyIsIkNvbmZpZyIsImNyZWF0ZSIsImNvbmZpZyJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBSUQsNkJBQTZCO0FBQzdCLGNBQWMsYUFBYTtBQUUzQiwyQ0FBMkM7QUFDM0MsU0FDRUEsbUJBQW1CLEVBQUVDLFNBQVMsUUFDekIsaUJBQWlCO0FBRXhCLDZGQUE2RjtBQUM3RixPQUFPLE1BQU1DLFNBQVM7SUFDcEJDLFFBQVEsQ0FBQ0MsU0FBMEJBO0FBQ3JDLEVBQUU7QUFFRiwyQkFBMkI7QUFDM0IsY0FBYyx1QkFBdUI7QUFDckMsY0FBYyxpQkFBaUI7QUFDL0IsY0FBYyxrQkFBa0I7QUFDaEMsY0FBYyxpQkFBaUI7QUFFL0IsMEJBQTBCO0FBQzFCLGNBQWMsdUJBQXVCO0FBRXJDLGtCQUFrQjtBQUNsQixjQUFjLHNCQUFzQjtBQUNwQyxjQUFjLDRCQUE0QjtBQUMxQyxjQUFjLDRCQUE0QjtBQUMxQyxjQUFjLGdDQUFnQztBQUM5QyxjQUFjLDhCQUE4QjtBQUM1QyxjQUFjLDBCQUEwQjtBQUN4QyxjQUFjLDhCQUE4QjtBQUM1QyxjQUFjLHdCQUF3QjtBQUN0QyxjQUFjLDBCQUEwQjtBQUN4QyxjQUFjLDBCQUEwQjtBQUN4QyxjQUFjLDBCQUEwQjtBQUN4QyxjQUFjLGdDQUFnQztBQUM5QyxjQUFjLDhDQUE4QztBQUM1RCxjQUFjLGdDQUFnQztBQUM5QyxjQUFjLHNDQUFzQztBQUNwRCxjQUFjLG9DQUFvQztBQUNsRCxjQUFjLDBCQUEwQjtBQUN4QyxjQUFjLDhCQUE4QjtBQUM1QyxjQUFjLGdDQUFnQztBQUM5QyxjQUFjLGtDQUFrQyJ9
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7TGV4Q29uZmlnVHlwZX0gZnJvbSAnLi9MZXhDb25maWcuanMnO1xuXG4vLyBFeHBvcnQgdHlwZXMgZnJvbSB0eXBlcy50c1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIEV4cG9ydCBjbGFzc2VzIGFuZCB2YWx1ZXMgZnJvbSBMZXhDb25maWdcbmV4cG9ydCB7XG4gIGRlZmF1bHRDb25maWdWYWx1ZXMsIExleENvbmZpZ1xufSBmcm9tICcuL0xleENvbmZpZy5qcyc7XG5cbi8vIEV4cG9ydCBDb25maWcgYXMgYm90aCBhIHR5cGUgYW5kIGEgbmFtZXNwYWNlIHdpdGggY3JlYXRlIG1ldGhvZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuZXhwb3J0IGNvbnN0IENvbmZpZyA9IHtcbiAgY3JlYXRlOiAoY29uZmlnOiBMZXhDb25maWdUeXBlKSA9PiBjb25maWdcbn07XG5cbi8vIEV4cG9ydCB1dGlsaXR5IGZ1bmN0aW9uc1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9haVNlcnZpY2UuanMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9hcHAuanMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9maWxlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvbG9nLmpzJztcblxuLy8gRXhwb3J0IFN0b3J5Ym9vayBtb2R1bGVcbmV4cG9ydCAqIGZyb20gJy4vc3Rvcnlib29rL2luZGV4LmpzJztcblxuLy8gRXhwb3J0IGNvbW1hbmRzXG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2FpL2FpLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvYnVpbGQvYnVpbGQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy9jbGVhbi9jbGVhbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2NvbXBpbGUvY29tcGlsZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2NvbmZpZy9jb25maWcuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy9jb3B5L2NvcHkuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy9jcmVhdGUvY3JlYXRlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvZGV2L2Rldi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2luaXQvaW5pdC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2xpbmsvbGluay5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2xpbnQvbGludC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL21pZ3JhdGUvbWlncmF0ZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL3NlcnZlcmxlc3MtZGVwbG95L3NlcnZlcmxlc3MtZGVwbG95LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvcHVibGlzaC9wdWJsaXNoLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvc2VydmVybGVzcy1kZXYvc2VydmVybGVzcy1kZXYuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy9zdG9yeWJvb2svc3Rvcnlib29rLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvdGVzdC90ZXN0LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvdXBkYXRlL3VwZGF0ZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL3VwZ3JhZGUvdXBncmFkZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL3ZlcnNpb25zL3ZlcnNpb25zLmpzJztcbiJdLCJuYW1lcyI6WyJkZWZhdWx0Q29uZmlnVmFsdWVzIiwiTGV4Q29uZmlnIiwiQ29uZmlnIiwiY3JlYXRlIiwiY29uZmlnIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FJRCw2QkFBNkI7QUFDN0IsY0FBYyxhQUFhO0FBRTNCLDJDQUEyQztBQUMzQyxTQUNFQSxtQkFBbUIsRUFBRUMsU0FBUyxRQUN6QixpQkFBaUI7QUFFeEIsNkZBQTZGO0FBQzdGLE9BQU8sTUFBTUMsU0FBUztJQUNwQkMsUUFBUSxDQUFDQyxTQUEwQkE7QUFDckMsRUFBRTtBQUVGLDJCQUEyQjtBQUMzQixjQUFjLHVCQUF1QjtBQUNyQyxjQUFjLGlCQUFpQjtBQUMvQixjQUFjLGtCQUFrQjtBQUNoQyxjQUFjLGlCQUFpQjtBQUUvQiwwQkFBMEI7QUFDMUIsY0FBYyx1QkFBdUI7QUFFckMsa0JBQWtCO0FBQ2xCLGNBQWMsc0JBQXNCO0FBQ3BDLGNBQWMsNEJBQTRCO0FBQzFDLGNBQWMsNEJBQTRCO0FBQzFDLGNBQWMsZ0NBQWdDO0FBQzlDLGNBQWMsOEJBQThCO0FBQzVDLGNBQWMsMEJBQTBCO0FBQ3hDLGNBQWMsOEJBQThCO0FBQzVDLGNBQWMsd0JBQXdCO0FBQ3RDLGNBQWMsMEJBQTBCO0FBQ3hDLGNBQWMsMEJBQTBCO0FBQ3hDLGNBQWMsMEJBQTBCO0FBQ3hDLGNBQWMsZ0NBQWdDO0FBQzlDLGNBQWMsb0RBQW9EO0FBQ2xFLGNBQWMsZ0NBQWdDO0FBQzlDLGNBQWMsOENBQThDO0FBQzVELGNBQWMsb0NBQW9DO0FBQ2xELGNBQWMsMEJBQTBCO0FBQ3hDLGNBQWMsOEJBQThCO0FBQzVDLGNBQWMsZ0NBQWdDO0FBQzlDLGNBQWMsa0NBQWtDIn0=
package/lib/lex.js CHANGED
@@ -18,9 +18,9 @@ import { init } from './commands/init/init.js';
18
18
  import { linked } from './commands/link/link.js';
19
19
  import { lint } from './commands/lint/lint.js';
20
20
  import { migrate } from './commands/migrate/migrate.js';
21
- import { packageLambda } from './commands/package-lambda/package-lambda.js';
21
+ import { serverlessDeploy } from './commands/serverless-deploy/serverless-deploy.js';
22
22
  import { publish } from './commands/publish/publish.js';
23
- import { serverless } from './commands/serverless/serverless.js';
23
+ import { serverlessDev } from './commands/serverless-dev/serverless-dev.js';
24
24
  import { storybook } from './commands/storybook/storybook.js';
25
25
  import { test } from './commands/test/test.js';
26
26
  import { update } from './commands/update/update.js';
@@ -66,10 +66,10 @@ program.command('init <appName> [packageName]').option('--install', 'Install dep
66
66
  program.command('linked').option('--quiet', 'No Lex notifications printed in the console.').action((cmd)=>linked(cmd, process.exit).then(()=>{}));
67
67
  program.command('lint').option('--cache', 'Only check changed files. Default: false.', false).option('--cacheLocation <path>', 'Path to the cache file or directory.').option('--color', 'Force enabling of color.', false).option('--config <path>', 'Use this configuration, overriding .eslintrc.* config options if present. If not specified and no local config exists, Lex will use its default config.').option('--debug', 'Output debugging information.', false).option('--envInfo', 'Output execution environment information. Default: false.', false).option('--env <n>', 'Specify environments.').option('--fix', 'Apply AI fixes after built-in ESLint fixes (same as --fix).', false).option('--fixDryRun', 'Automatically fix problems without saving the changes to the file system.', false).option('--fixType <type>', 'Specify the types of fixes to apply (problem, suggestion, layout).').option('--format <n>', 'Use a specific output format. Default: stylish.').option('--global <variables>', 'Define global variables.').option('--ignorePath <path>', 'Specify path of ignore file.').option('--ignorePattern <pattern>', 'Pattern of files to ignore (in addition to those in .eslintignore).').option('--init', 'Run config initialization wizard. Default: false.', false).option('--maxWarnings <num>', 'Number of warnings to trigger nonzero exit code. Default: -1.').option('--noColor', 'Force disabling of color.', false).option('--noEslintrc', 'Disable use of configuration from .eslintrc.*.', false).option('--noIgnore', 'Disable use of ignore files and patterns.', false).option('--noInlineConfig', 'Prevent comments from changing config or rules.', false).option('--outputFile <path>', 'Specify file to write report to.').option('--parser <n>', 'Specify the parser to be used.').option('--parserOptions <options>', 'Specify parser options.').option('--plugin <plugins>', 'Specify plugins.').option('--printConfig <path>', 'Print the configuration for the given file.').option('--quiet', 'No Lex notifications printed in the console.', false).option('--remove-comments', 'Remove all comments except TODOs and copyright notices.', false).option('--reportUnusedDisableDirectives', 'Adds reported errors for unused eslint-disable directives.', false).option('--resolvePluginsRelativeTo <path>', 'A folder where plugins should be resolved from.').option('--rule <path>', 'Specify rules.').option('--rulesdir <path>', 'Use additional rules from this directory.').option('--stdin', 'Lint code provided on <STDIN> - Default: false.', false).option('--stdinFilename <n>', 'Specify filename to process STDIN as.').action((cmd)=>lint(cmd, process.exit).then(()=>{}));
68
68
  program.command('migrate').option('-q, --quiet', 'No Lex notifications printed in the console.').action((cmd)=>migrate(cmd, process.exit).then(()=>{}));
69
- program.command('package-lambda').requiredOption('--entry <path>', 'Lambda entry file to bundle.').option('--copyNodeModule <value...>', 'Runtime node_modules packages to copy into the package after bundling.').option('--external <value...>', 'Packages or package patterns to keep external from the bundle.').addOption(new Option('--format <value>', 'JavaScript output format. Default: "cjs".').choices([
69
+ program.command('serverless-deploy').requiredOption('--entry <path>', 'Lambda entry file to bundle.').option('--copyNodeModule <value...>', 'Runtime node_modules packages to copy into the package after bundling.').option('--external <value...>', 'Packages or package patterns to keep external from the bundle.').addOption(new Option('--format <value>', 'JavaScript output format. Default: "cjs".').choices([
70
70
  'cjs',
71
71
  'esm'
72
- ]).default('cjs')).option('--mainFields <value>', 'Package fields esbuild should prefer. Default: "module,main".').option('--minify', 'Minify the bundle.', false).option('--nodeModulesPath <path>', 'Path to runtime node_modules copied by --copyNodeModule. Default: "./node_modules".').option('--outfile <path>', 'Bundled output file path inside the package directory.').option('--output <path>', 'Zip output path. Default: "./lambda-package.zip".').option('--packageDir <path>', 'Temporary package directory. Default: "./.lex/lambda-package".').option('--quiet', 'No Lex notifications printed in the console.').option('--sourcemap', 'Generate a sourcemap.', false).option('--target <value>', 'esbuild runtime target. Default: "node24".').action((cmd)=>packageLambda(cmd, process.exit).then(()=>{}));
72
+ ]).default('cjs')).option('--mainFields <value>', 'Package fields esbuild should prefer. Default: "module,main".').option('--minify', 'Minify the bundle.', false).option('--nodeModulesPath <path>', 'Path to runtime node_modules copied by --copyNodeModule. Default: "./node_modules".').option('--outfile <path>', 'Bundled output file path inside the package directory.').option('--output <path>', 'Zip output path. Default: "./lambda-package.zip".').option('--packageDir <path>', 'Temporary package directory. Default: "./.lex/lambda-package".').option('--quiet', 'No Lex notifications printed in the console.').option('--sourcemap', 'Generate a sourcemap.', false).option('--target <value>', 'esbuild runtime target. Default: "node24".').action((cmd)=>serverlessDeploy(cmd, process.exit).then(()=>{}));
73
73
  program.command('publish').addOption(new Option('--bump <type>', 'Increments the version. Types include: major, minor, patch, beta, alpha, rc. Default: "patch".').choices([
74
74
  'major',
75
75
  'minor',
@@ -81,7 +81,7 @@ program.command('publish').addOption(new Option('--bump <type>', 'Increments the
81
81
  'npm',
82
82
  'yarn'
83
83
  ]).default('npm')).option('--private', 'Publishes the module as restricted.').option('--quiet', 'No Lex notifications printed in the console.').option('--tag <tag>', 'Registers the published package with the given tag.').action((cmd)=>publish(cmd, process.exit).then(()=>{}));
84
- program.command('serverless').option('--config <path>', 'Custom configuration file path (default: lex.config.mjs).').option('--host <host>', 'Host to bind the server to (default: localhost).').option('--httpPort <port>', 'HTTP server port (default: 3100).').option('--httpsPort <port>', 'HTTPS server port (default: 3101).').option('--wsPort <port>', 'WebSocket server port (default: 3102).').option('--quiet', 'No Lex notifications printed in the console.').option('--remove', 'Removes all files from the output directory before starting.').option('--usePublicIp', 'Force refresh the cached public IP address.').option('--variables <json>', 'Environment variables to set in process.env.').option('--debug', 'Enable GraphQL debug logging to see queries, variables, and operations.').option('--printOutput', 'Print GraphQL response output including status, headers, and body.').action((cmd)=>serverless(cmd, process.exit).then(()=>{}));
84
+ program.command('serverless-dev').option('--config <path>', 'Custom configuration file path (default: lex.config.mjs).').option('--host <host>', 'Host to bind the server to (default: localhost).').option('--httpPort <port>', 'HTTP server port (default: 3100).').option('--httpsPort <port>', 'HTTPS server port (default: 3101).').option('--wsPort <port>', 'WebSocket server port (default: 3102).').option('--quiet', 'No Lex notifications printed in the console.').option('--remove', 'Removes all files from the output directory before starting.').option('--usePublicIp', 'Force refresh the cached public IP address.').option('--variables <json>', 'Environment variables to set in process.env.').option('--debug', 'Enable GraphQL debug logging to see queries, variables, and operations.').option('--printOutput', 'Print GraphQL response output including status, headers, and body.').action((cmd)=>serverlessDev(cmd, process.exit).then(()=>{}));
85
85
  program.command('storybook').option('--config <path>', 'Custom Storybook configuration directory path (ie. .storybook).').option('--lexConfig <path>', 'Custom Lex configuration file path (ie. lex.config.js).').option('--open', 'Automatically open Storybook in a new browser window.').option('--port <number>', 'Port number for the Storybook server.').option('--quiet', 'No Lex notifications printed in the console.').option('--static', 'Build a static Storybook site instead of starting dev server.').option('--variables <n>', 'Environment variables to set in "process.env". (ie. "{STORYBOOK_THEME: \'dark\'}").').option('--verbose', 'Show detailed webpack progress output.').action((cmd)=>storybook(cmd, process.exit).then(()=>{}));
86
86
  program.command('test [files...]').option('--analyze', 'Use AI to analyze test coverage and suggest improvements.', false).option('--debugTests', 'Use AI to debug test failures and suggest fixes.', false).option('--generate', 'Use AI to generate test cases for untested code.', false).option('--bail', 'Exit the test suite immediately upon the first failing test suite.').option('--changedFilesWithAncestor', 'Runs tests related to the current changes and the changes made in the last commit.').option('--changedSince', 'Runs tests related the changes since the provided branch.').option('--ci', 'When this option is provided, Vitest will assume it is running in a CI environment.').option('--clearCache', 'Clear Vitest cache.').option('--collectCoverageFrom <glob>', 'A glob pattern relative to matching the files that coverage info needs to be collected from.').option('--colors', 'Forces test results output highlighting even if stdout is not a TTY.').option('--config <path>', 'Custom Vitest configuration file path (ie. vitest.config.mjs).').option('--debug', 'Print debugging info about your Vitest config.').option('--detectOpenHandles', 'Attempt to collect and print open handles preventing Vitest from exiting cleanly').option('--e2e', 'Run Playwright end-to-end tests matching "*.e2e.ts[x]".').option('--e2eConfig <path>', 'Custom Playwright configuration file path (ie. playwright.config.ts).').option('--environment <n>', 'Target environment. "node" or "web". Default: "node".').option('--env', 'The test environment used for all tests. This can point to any file or node module. Examples: happy-dom, jsdom, node or path/to/my-environment.js.').option('--errorOnDeprecated', 'Make calling deprecated APIs throw helpful error messages.').option('--expand', 'Use this flag to show full diffs and errors instead of a patch.').option('--forceExit', 'Force Vitest to exit after all tests have completed running.').option('--json', 'Prints the test results in JSON.').option('--lastCommit', 'Run all tests affected by file changes in the last commit made.').option('--lexConfig <path>', 'Custom Lex configuration file path (ie. lex.config.js).').option('--listTests', 'Lists all tests as JSON that Vitest will run given the arguments, and exits.').option('--logHeapUsage', 'Logs the heap usage after every test.').option('--maxWorkers <num>', 'Specifies the maximum number of workers the worker-pool will spawn for running tests. ').option('--noStackTrace', 'Disables stack trace in test results output.').option('--notify', 'Activates notifications for test results.').option('--onlyChanged', 'un based on which files have changed in the current repository. ').option('--outputFile <filename>', 'Write test results to a file when the --json option is also specified.').option('--passWithNoTests', 'Allows the test suite to pass when no files are found.').option('--quiet', 'No Lex notifications printed in the console.').option('--runInBand', 'Run all tests serially in the current process, rather than creating a worker pool of child processes that run tests.').option('--setup <path>', 'Vitest setup file path.').option('--showConfig', 'Print your Vitest config and then exits.').option('--silent', 'Prevent tests from printing messages through the console.').option('--testLocationInResults', 'Adds a location field to test results.').option('--testNamePattern <regex>', 'Run only tests with a name that matches the regex. ').option('--testPathPattern <regex>', 'A regexp pattern string that is matched against all tests paths before executing the test.').option('--typescript', 'Transpile as Typescript.').option('--unit', 'Run Vitest unit tests matching "*.test.ts[x]".').option('--update', 'Update snapshots. Runs "vitest --update"').option('--useStderr', 'Divert all output to stderr.').option('--verbose', 'Display individual test results with the test suite hierarchy.').option('--watch <path>', 'Watch files for changes and rerun tests related to changed files.').option('--watchAll', 'Watch files for changes and rerun all tests when something changes.').action((files, options, cmd)=>test(options, cmd.args, files, process.exit).then(()=>{}));
87
87
  program.command('update').option('--interactive', 'Choose which packages to update.').addOption(new Option('--package-manager <manager>', 'Which package manager to use. Default: npm').choices([
@@ -102,4 +102,4 @@ program.command('ai').option('--context', 'Include project context in the AI pro
102
102
  program.command('versions').option('--json', 'Print the version as a JSON object.').action((cmd)=>versions(cmd, process.exit).then(()=>{}));
103
103
  program.version(packageJson.version).parse(process.argv);
104
104
 
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7T3B0aW9uLCBwcm9ncmFtfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHtyZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7Y3JlYXRlUmVxdWlyZX0gZnJvbSAnbW9kdWxlJztcbmltcG9ydCB7ZGlybmFtZSwgcmVzb2x2ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQge2ZpbGVVUkxUb1BhdGh9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7YWlGdW5jdGlvbn0gZnJvbSAnLi9jb21tYW5kcy9haS9haS5qcyc7XG5pbXBvcnQge2J1aWxkfSBmcm9tICcuL2NvbW1hbmRzL2J1aWxkL2J1aWxkLmpzJztcbmltcG9ydCB7Y2xlYW59IGZyb20gJy4vY29tbWFuZHMvY2xlYW4vY2xlYW4uanMnO1xuaW1wb3J0IHtjb21waWxlfSBmcm9tICcuL2NvbW1hbmRzL2NvbXBpbGUvY29tcGlsZS5qcyc7XG5pbXBvcnQge2NvbmZpZ30gZnJvbSAnLi9jb21tYW5kcy9jb25maWcvY29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlfSBmcm9tICcuL2NvbW1hbmRzL2NyZWF0ZS9jcmVhdGUuanMnO1xuaW1wb3J0IHtkZXYsIERFRkFVTFRfREVWX1BPUlR9IGZyb20gJy4vY29tbWFuZHMvZGV2L2Rldi5qcyc7XG5pbXBvcnQge2luaXR9IGZyb20gJy4vY29tbWFuZHMvaW5pdC9pbml0LmpzJztcbmltcG9ydCB7bGlua2VkfSBmcm9tICcuL2NvbW1hbmRzL2xpbmsvbGluay5qcyc7XG5pbXBvcnQge2xpbnR9IGZyb20gJy4vY29tbWFuZHMvbGludC9saW50LmpzJztcbmltcG9ydCB7bWlncmF0ZX0gZnJvbSAnLi9jb21tYW5kcy9taWdyYXRlL21pZ3JhdGUuanMnO1xuaW1wb3J0IHtwYWNrYWdlTGFtYmRhfSBmcm9tICcuL2NvbW1hbmRzL3BhY2thZ2UtbGFtYmRhL3BhY2thZ2UtbGFtYmRhLmpzJztcbmltcG9ydCB7cHVibGlzaH0gZnJvbSAnLi9jb21tYW5kcy9wdWJsaXNoL3B1Ymxpc2guanMnO1xuaW1wb3J0IHtzZXJ2ZXJsZXNzfSBmcm9tICcuL2NvbW1hbmRzL3NlcnZlcmxlc3Mvc2VydmVybGVzcy5qcyc7XG5pbXBvcnQge3N0b3J5Ym9va30gZnJvbSAnLi9jb21tYW5kcy9zdG9yeWJvb2svc3Rvcnlib29rLmpzJztcbmltcG9ydCB7dGVzdH0gZnJvbSAnLi9jb21tYW5kcy90ZXN0L3Rlc3QuanMnO1xuaW1wb3J0IHt1cGRhdGV9IGZyb20gJy4vY29tbWFuZHMvdXBkYXRlL3VwZGF0ZS5qcyc7XG5pbXBvcnQge3VwZ3JhZGV9IGZyb20gJy4vY29tbWFuZHMvdXBncmFkZS91cGdyYWRlLmpzJztcbmltcG9ydCB7dmVyc2lvbnN9IGZyb20gJy4vY29tbWFuZHMvdmVyc2lvbnMvdmVyc2lvbnMuanMnO1xuXG5wcm9jZXNzLmVudi5MRVhfUk9PVCA9IGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcblxuY29uc3QgbGV4Tm9kZU1vZHVsZXMgPSByZXNvbHZlKGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKSwgJy4uL25vZGVfbW9kdWxlcycpO1xuaWYoIXByb2Nlc3MuZW52Lk5PREVfUEFUSCkge1xuICBwcm9jZXNzLmVudi5OT0RFX1BBVEggPSBsZXhOb2RlTW9kdWxlcztcbn0gZWxzZSBpZighcHJvY2Vzcy5lbnYuTk9ERV9QQVRILnNwbGl0KCc6JykuaW5jbHVkZXMobGV4Tm9kZU1vZHVsZXMpKSB7XG4gIHByb2Nlc3MuZW52Lk5PREVfUEFUSCArPSBgOiR7bGV4Tm9kZU1vZHVsZXN9YDtcbn1cblxuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxucmVxdWlyZSgnbW9kdWxlJykuTW9kdWxlLl9pbml0UGF0aHMoKTtcblxuY29uc3QgcGFja2FnZVBhdGggPSBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4uL3BhY2thZ2UuanNvbicsIGltcG9ydC5tZXRhLnVybCkpO1xuY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhwYWNrYWdlUGF0aCwgJ3V0ZjgnKSk7XG5cbnByb2dyYW0uY29tbWFuZCgnYnVpbGQnKVxuICAub3B0aW9uKCctLWFzc2lzdCcsICdFbmFibGUgQUkgYXNzaXN0YW5jZSBmb3IgZml4aW5nIGJ1aWxkIGVycm9ycy4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1hbmFseXplJywgJ0VuYWJsZSBBSSBhbmFseXNpcyBmb3IgYnVpbGQgb3B0aW1pemF0aW9uIHN1Z2dlc3Rpb25zIG9yIGludm9rZSB3ZWJwYWNrLWJ1bmRsZS1hbmFseXplciBwbHVnaW4uJywgZmFsc2UpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1idW5kbGVyIDxuPicsICdCdW5kbGVyIHRvIHVzZSAoXCJ3ZWJwYWNrXCIgb3IgXCJzd2NcIikuIERlZmF1bHQ6IFwic3djXCIuJykuY2hvaWNlcyhbJ3dlYnBhY2snLCAnc3djJ10pLmRlZmF1bHQoJ3N3YycpKVxuICAub3B0aW9uKCctLWNvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIFdlYnBhY2sgY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiB3ZWJwYWNrLmNvbmZpZy5qcykuJylcbiAgLm9wdGlvbignLS1jb25maWdOYW1lIDx2YWx1ZS4uLj4nLCAnTmFtZSBvZiB0aGUgY29uZmlndXJhdGlvbiB0byB1c2UuJylcbiAgLm9wdGlvbignLS1kZWZpbmVQcm9jZXNzRW52Tm9kZUVudiA8dmFsdWU+JywgJ1NldHMgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZS4gKEN1cnJlbnRseSBhbiBhbGlhcyBmb3IgYC0tbm9kZS1lbnZgKScpXG4gIC5vcHRpb24oJy0tZGV2dG9vbCA8dmFsdWU+JywgJ0EgZGV2ZWxvcGVyIHRvb2wgdG8gZW5oYW5jZSBkZWJ1Z2dpbmcgKGZhbHNlIHwgZXZhbCB8IFtpbmxpbmUtfGhpZGRlbi18ZXZhbC1dW25vc291cmNlcy1dW2NoZWFwLVttb2R1bGUtXV1zb3VyY2UtbWFwKS4nKVxuICAub3B0aW9uKCctLWRpc2FibGVJbnRlcnByZXQnLCAnRGlzYWJsZSBpbnRlcnByZXQgZm9yIGxvYWRpbmcgdGhlIGNvbmZpZyBmaWxlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWVudHJ5IDx2YWx1ZS4uLj4nLCAnQSBtb2R1bGUgdGhhdCBpcyBsb2FkZWQgdXBvbiBzdGFydHVwLiBPbmx5IHRoZSBsYXN0IG9uZSBpcyBleHBvcnRlZC4nKVxuICAub3B0aW9uKCctLWVudiA8dmFsdWU+JywgJ0Vudmlyb25tZW50IHBhc3NlZCB0byB0aGUgY29uZmlndXJhdGlvbiB3aGVuIGl0IGlzIGEgZnVuY3Rpb24uJylcbiAgLm9wdGlvbignLS1mYWlsT25XYXJuaW5ncycsICdTdG9wIHdlYnBhY2stY2xpIHByb2Nlc3Mgd2l0aCBub24temVybyBleGl0IGNvZGUgb24gd2FybmluZ3MgZnJvbSB3ZWJwYWNrJywgZmFsc2UpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPHZhbHVlPicsICdUaGlzIHNldHMgdGhlIG91dHB1dCBmb3JtYXQgZm9yIHRoZSBnZW5lcmF0ZWQgSmF2YVNjcmlwdCBmaWxlcy4gRGVmYXVsdDogXCJlc21cIi4nKS5jaG9pY2VzKFsnY2pzJywgJ2VzbSddKS5kZWZhdWx0KCdlc20nKSlcbiAgLm9wdGlvbignLS1qc29uIDx2YWx1ZT4nLCAnUHJpbnRzIHJlc3VsdCBhcyBKU09OIG9yIHN0b3JlIGl0IGluIGEgZmlsZS4nKVxuICAub3B0aW9uKCctLWxleENvbmZpZyA8cGF0aD4nLCAnTGV4IGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChsZXguY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLW1lcmdlJywgJ01lcmdlIHR3byBvciBtb3JlIGNvbmZpZ3VyYXRpb25zIHVzaW5nIFwid2VicGFjay1tZXJnZVwiLicsIGZhbHNlKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbW9kZSA8dHlwZT4nLCAnV2VicGFjayBtb2RlIChcInByb2R1Y3Rpb25cIiBvciBcImRldmVsb3BtZW50XCIpLiBEZWZhdWx0OiBcImRldmVsb3BtZW50XCIuJykuY2hvaWNlcyhbJ2RldmVsb3BtZW50JywgJ3Byb2R1Y3Rpb24nXSkuZGVmYXVsdCgnZGV2ZWxvcG1lbnQnKSlcbiAgLm9wdGlvbignLS1uYW1lIDx2YWx1ZT4nLCAnTmFtZSBvZiB0aGUgY29uZmlndXJhdGlvbi4gVXNlZCB3aGVuIGxvYWRpbmcgbXVsdGlwbGUgY29uZmlndXJhdGlvbnMuJylcbiAgLm9wdGlvbignLS1ub0RldnRvb2wnLCAnTmVnYXRpdmUgXCJkZXZ0b29sXCIgb3B0aW9uLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vU3RhdHMnLCAnTmVnYXRpdmUgXCJzdGF0c1wiIG9wdGlvbi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub1RhcmdldCcsICdOZWdhdGl2ZSBcInRhcmdldFwiIG9wdGlvbi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub1dhdGNoJywgJ05lZ2F0aXZlIFwid2F0Y2hcIiBvcHRpb24uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbm9XYXRjaE9wdGlvbnNTdGRpbicsICdOZWdhdGl2ZSBcIndhdGNoLW9wdGlvbnMtc3RkaW5cIiBvcHRpb24uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbm9kZUVudiA8dmFsdWU+JywgJ1NldHMgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZS4nKVxuICAub3B0aW9uKCctLW91dHB1dFBhdGggPHZhbHVlPicsICdUaGUgb3V0cHV0IGRpcmVjdG9yeSBhcyAqKmFic29sdXRlIHBhdGgqKiAocmVxdWlyZWQpLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1yZW1vdmUnLCAnUmVtb3ZlcyBhbGwgZmlsZXMgZnJvbSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBiZWZvcmUgY29tcGlsaW5nLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXNvdXJjZVBhdGggPHBhdGg+JywgJ1NvdXJjZSBwYXRoJylcbiAgLm9wdGlvbignLS1zdGF0cyA8dmFsdWU+JywgJ1N0YXRzIG9wdGlvbnMgb2JqZWN0IG9yIHByZXNldCBuYW1lLicpXG4gIC5vcHRpb24oJy0tc3RhdGljJywgJ0NyZWF0ZXMgc3RhdGljIEhUTUwgZmlsZXMgd2hlbiBidWlsZGluZyBhcHAuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tdGFyZ2V0IDx2YWx1ZT4nLCAnRW52aXJvbm1lbnQgdG8gYnVpbGQgZm9yLiBFbnZpcm9ubWVudCB0byBidWlsZCBmb3IuIEFuIGFycmF5IG9mIGVudmlyb25tZW50cyB0byBidWlsZCBmb3IgYWxsIG9mIHRoZW0gd2hlbiBwb3NzaWJsZS4nKVxuICAub3B0aW9uKCctLXRyYW5zbGF0aW9ucycsICdQcm9jZXNzIHRyYW5zbGF0aW9uIGZpbGVzIGFuZCBvdXRwdXQgZmxhdHRlbmVkIEpTT04uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tdHlwZXNjcmlwdCcsICdUcmFuc3BpbGUgYXMgVHlwZXNjcmlwdC4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS12YXJpYWJsZXMgPG4+JywgJ0Vudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgaW4gXCJwcm9jZXNzLmVudlwiLiAoaWUuIFwie05PREVfRU5WOiBcXCdwcm9kdWN0aW9uXFwnfVwiKS4nKVxuICAub3B0aW9uKCctLXdhdGNoJywgJ1dhdGNoIGZvciBjaGFuZ2VzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXdhdGNoT3B0aW9uc1N0ZGluJywgJ1N0b3Agd2F0Y2hpbmcgd2hlbiBzdGRpbiBzdHJlYW0gaGFzIGVuZGVkLicsIGZhbHNlKVxuICAuYWN0aW9uKChjbWQpID0+IGJ1aWxkKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnY2xlYW4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1zbmFwc2hvdHMnLCAnUmVtb3ZlIGFsbCBcIl9fc25hcHNob3RzX19cIiBkaXJlY3Rvcmllcy4nKVxuICAuYWN0aW9uKChjbWQpID0+IGNsZWFuKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnY29uZmlnIDx0eXBlPicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLWpzb24gPHBhdGg+JywgJ1NhdmUgb3V0cHV0IHRvIGpzb24gZmlsZS4nKVxuICAuYWN0aW9uKCh0eXBlLCBjbWQpID0+IGNvbmZpZyh0eXBlLCBjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2NvbXBpbGUnKVxuICAub3B0aW9uKCctLWNvbmZpZyA8cGF0aD4nLCAnVHJhbnNwaWxlciBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIHRzY29uZmlnLmpzb24pLicpXG4gIC5vcHRpb24oJy0tZW52aXJvbm1lbnQgPG4+JywgJ1RhcmdldCBlbnZpcm9ubWVudC4gXCJub2RlXCIgb3IgXCJ3ZWJcIi4gRGVmYXVsdDogXCJub2RlXCIuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8dmFsdWU+JywgJ1RoaXMgc2V0cyB0aGUgb3V0cHV0IGZvcm1hdCBmb3IgdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0IGZpbGVzLiBEZWZhdWx0OiBcImVzbVwiLicpLmNob2ljZXMoWydjanMnLCAnZXNtJ10pLmRlZmF1bHQoJ2VzbScpKVxuICAub3B0aW9uKCctLWxleENvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIExleCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIGxleC5jb25maWcuanMpLicpXG4gIC5vcHRpb24oJy0tb3V0cHV0UGF0aCA8cGF0aD4nLCAnT3V0cHV0IHBhdGgnKVxuICAub3B0aW9uKCctLXJlbW92ZScsICdSZW1vdmVzIGFsbCBmaWxlcyBmcm9tIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGJlZm9yZSBjb21waWxpbmcuJylcbiAgLm9wdGlvbignLS1zb3VyY2VQYXRoIDxwYXRoPicsICdTb3VyY2UgcGF0aCcpXG4gIC5vcHRpb24oJy0tdHlwZXNjcmlwdCcsICdUcmFuc3BpbGUgYXMgVHlwZXNjcmlwdC4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS13YXRjaCcsICdXYXRjaGVzIGZvciBjaGFuZ2VzIGFuZCBjb21waWxlcy4nKVxuICAuYWN0aW9uKChjbWQpID0+IGNvbXBpbGUoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdjcmVhdGUgPHR5cGU+JylcbiAgLm9wdGlvbignLS1vdXRwdXRGaWxlIDxwYXRoPicsICdPdXRwdXQgZmlsZW5hbWUuJylcbiAgLm9wdGlvbignLS1vdXRwdXROYW1lIDxuPicsICdPdXRwdXQgbmFtZS4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS10eXBlc2NyaXB0JywgJ0NyZWF0ZSBUeXBlc2NyaXB0IHZlcnNpb24uJylcbiAgLmFjdGlvbigodHlwZSwgY21kKSA9PiBjcmVhdGUodHlwZSwgY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdkZXYnKVxuICAub3B0aW9uKCctLWJ1bmRsZUFuYWx5emVyJywgJ1J1biBidW5kbGUgYW5hbHl6ZXIuJylcbiAgLm9wdGlvbignLS1jb25maWcgPHBhdGg+JywgJ0N1c3RvbSBXZWJwYWNrIGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gd2VicGFjay5jb25maWcuanMpLicpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPHZhbHVlPicsICdUaGlzIHNldHMgdGhlIG91dHB1dCBmb3JtYXQgZm9yIHRoZSBnZW5lcmF0ZWQgSmF2YVNjcmlwdCBmaWxlcy4gRGVmYXVsdDogXCJlc21cIi4nKS5jaG9pY2VzKFsnY2pzJywgJ2VzbSddKS5kZWZhdWx0KCdlc20nKSlcbiAgLm9wdGlvbignLS1sZXhDb25maWcgPHBhdGg+JywgJ0N1c3RvbSBMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiBsZXguY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLW9wZW4nLCAnQXV0b21hdGljYWxseSBvcGVuIGRldiBzZXJ2ZXIgaW4gYSBuZXcgYnJvd3NlciB3aW5kb3cuJylcbiAgLm9wdGlvbignLS1vdXRwdXRQYXRoIDxwYXRoPicsICdPdXRwdXQgcGF0aCcpXG4gIC5vcHRpb24oJy0tcG9ydCA8bnVtYmVyPicsIGBQb3J0IG51bWJlciBmb3IgdGhlIGRldmVsb3BtZW50IHNlcnZlciAoZGVmYXVsdDogJHtERUZBVUxUX0RFVl9QT1JUfSkuYClcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tcmVtb3ZlJywgJ1JlbW92ZXMgYWxsIGZpbGVzIGZyb20gdGhlIG91dHB1dCBkaXJlY3RvcnkgYmVmb3JlIGNvbXBpbGluZy4nKVxuICAub3B0aW9uKCctLXNvdXJjZVBhdGggPHBhdGg+JywgJ1NvdXJjZSBwYXRoJylcbiAgLm9wdGlvbignLS10cmFuc2xhdGlvbnMnLCAnUHJvY2VzcyB0cmFuc2xhdGlvbiBmaWxlcyBhbmQgb3V0cHV0IGZsYXR0ZW5lZCBKU09OLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnVHJhbnNwaWxlIGFzIFR5cGVzY3JpcHQuJylcbiAgLm9wdGlvbignLS11c2VQdWJsaWNJcCcsICdGb3JjZSByZWZyZXNoIHRoZSBjYWNoZWQgcHVibGljIElQIGFkZHJlc3MuJylcbiAgLm9wdGlvbignLS12YXJpYWJsZXMgPG4+JywgJ0Vudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgaW4gXCJwcm9jZXNzLmVudlwiLiAoaWUuIFwie05PREVfRU5WOiBcXCdkZXZlbG9wbWVudFxcJ31cIikuJylcbiAgLm9wdGlvbignLS13YXRjaCcsICdXYXRjaCBmb3IgY2hhbmdlcy4nKVxuICAuYWN0aW9uKChjbWQpID0+IGRldihjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2luaXQgPGFwcE5hbWU+IFtwYWNrYWdlTmFtZV0nKVxuICAub3B0aW9uKCctLWluc3RhbGwnLCAnSW5zdGFsbCBkZXBlbmRlbmNpZXMuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXBhY2thZ2UtbWFuYWdlciA8bWFuYWdlcj4nLCAnV2hpY2ggcGFja2FnZSBtYW5hZ2VyIHRvIHVzZS4gRGVmYXVsdDogbnBtJykuY2hvaWNlcyhbJ25wbScsICd5YXJuJ10pLmRlZmF1bHQoJ25wbScpKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS10eXBlc2NyaXB0JywgJ1VzZSBhIFR5cGVzY3JpcHQgYmFzZWQgYXBwLicpXG4gIC5hY3Rpb24oKGFwcE5hbWUsIHBhY2thZ2VOYW1lLCBjbWQpID0+IGluaXQoYXBwTmFtZSwgcGFja2FnZU5hbWUsIGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnbGlua2VkJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gbGlua2VkKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnbGludCcpXG4gIC5vcHRpb24oJy0tY2FjaGUnLCAnT25seSBjaGVjayBjaGFuZ2VkIGZpbGVzLiBEZWZhdWx0OiBmYWxzZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1jYWNoZUxvY2F0aW9uIDxwYXRoPicsICdQYXRoIHRvIHRoZSBjYWNoZSBmaWxlIG9yIGRpcmVjdG9yeS4nKVxuICAub3B0aW9uKCctLWNvbG9yJywgJ0ZvcmNlIGVuYWJsaW5nIG9mIGNvbG9yLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWNvbmZpZyA8cGF0aD4nLCAnVXNlIHRoaXMgY29uZmlndXJhdGlvbiwgb3ZlcnJpZGluZyAuZXNsaW50cmMuKiBjb25maWcgb3B0aW9ucyBpZiBwcmVzZW50LiBJZiBub3Qgc3BlY2lmaWVkIGFuZCBubyBsb2NhbCBjb25maWcgZXhpc3RzLCBMZXggd2lsbCB1c2UgaXRzIGRlZmF1bHQgY29uZmlnLicpXG4gIC5vcHRpb24oJy0tZGVidWcnLCAnT3V0cHV0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1lbnZJbmZvJywgJ091dHB1dCBleGVjdXRpb24gZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uIERlZmF1bHQ6IGZhbHNlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWVudiA8bj4nLCAnU3BlY2lmeSBlbnZpcm9ubWVudHMuJylcbiAgLm9wdGlvbignLS1maXgnLCAnQXBwbHkgQUkgZml4ZXMgYWZ0ZXIgYnVpbHQtaW4gRVNMaW50IGZpeGVzIChzYW1lIGFzIC0tZml4KS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1maXhEcnlSdW4nLCAnQXV0b21hdGljYWxseSBmaXggcHJvYmxlbXMgd2l0aG91dCBzYXZpbmcgdGhlIGNoYW5nZXMgdG8gdGhlIGZpbGUgc3lzdGVtLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWZpeFR5cGUgPHR5cGU+JywgJ1NwZWNpZnkgdGhlIHR5cGVzIG9mIGZpeGVzIHRvIGFwcGx5IChwcm9ibGVtLCBzdWdnZXN0aW9uLCBsYXlvdXQpLicpXG4gIC5vcHRpb24oJy0tZm9ybWF0IDxuPicsICdVc2UgYSBzcGVjaWZpYyBvdXRwdXQgZm9ybWF0LiBEZWZhdWx0OiBzdHlsaXNoLicpXG4gIC5vcHRpb24oJy0tZ2xvYmFsIDx2YXJpYWJsZXM+JywgJ0RlZmluZSBnbG9iYWwgdmFyaWFibGVzLicpXG4gIC5vcHRpb24oJy0taWdub3JlUGF0aCA8cGF0aD4nLCAnU3BlY2lmeSBwYXRoIG9mIGlnbm9yZSBmaWxlLicpXG4gIC5vcHRpb24oJy0taWdub3JlUGF0dGVybiA8cGF0dGVybj4nLCAnUGF0dGVybiBvZiBmaWxlcyB0byBpZ25vcmUgKGluIGFkZGl0aW9uIHRvIHRob3NlIGluIC5lc2xpbnRpZ25vcmUpLicpXG4gIC5vcHRpb24oJy0taW5pdCcsICdSdW4gY29uZmlnIGluaXRpYWxpemF0aW9uIHdpemFyZC4gRGVmYXVsdDogZmFsc2UuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbWF4V2FybmluZ3MgPG51bT4nLCAnTnVtYmVyIG9mIHdhcm5pbmdzIHRvIHRyaWdnZXIgbm9uemVybyBleGl0IGNvZGUuIERlZmF1bHQ6IC0xLicpXG4gIC5vcHRpb24oJy0tbm9Db2xvcicsICdGb3JjZSBkaXNhYmxpbmcgb2YgY29sb3IuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbm9Fc2xpbnRyYycsICdEaXNhYmxlIHVzZSBvZiBjb25maWd1cmF0aW9uIGZyb20gLmVzbGludHJjLiouJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbm9JZ25vcmUnLCAnRGlzYWJsZSB1c2Ugb2YgaWdub3JlIGZpbGVzIGFuZCBwYXR0ZXJucy4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub0lubGluZUNvbmZpZycsICdQcmV2ZW50IGNvbW1lbnRzIGZyb20gY2hhbmdpbmcgY29uZmlnIG9yIHJ1bGVzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW91dHB1dEZpbGUgPHBhdGg+JywgJ1NwZWNpZnkgZmlsZSB0byB3cml0ZSByZXBvcnQgdG8uJylcbiAgLm9wdGlvbignLS1wYXJzZXIgPG4+JywgJ1NwZWNpZnkgdGhlIHBhcnNlciB0byBiZSB1c2VkLicpXG4gIC5vcHRpb24oJy0tcGFyc2VyT3B0aW9ucyA8b3B0aW9ucz4nLCAnU3BlY2lmeSBwYXJzZXIgb3B0aW9ucy4nKVxuICAub3B0aW9uKCctLXBsdWdpbiA8cGx1Z2lucz4nLCAnU3BlY2lmeSBwbHVnaW5zLicpXG4gIC5vcHRpb24oJy0tcHJpbnRDb25maWcgPHBhdGg+JywgJ1ByaW50IHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZ2l2ZW4gZmlsZS4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tcmVtb3ZlLWNvbW1lbnRzJywgJ1JlbW92ZSBhbGwgY29tbWVudHMgZXhjZXB0IFRPRE9zIGFuZCBjb3B5cmlnaHQgbm90aWNlcy4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1yZXBvcnRVbnVzZWREaXNhYmxlRGlyZWN0aXZlcycsICdBZGRzIHJlcG9ydGVkIGVycm9ycyBmb3IgdW51c2VkIGVzbGludC1kaXNhYmxlIGRpcmVjdGl2ZXMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tcmVzb2x2ZVBsdWdpbnNSZWxhdGl2ZVRvIDxwYXRoPicsICdBIGZvbGRlciB3aGVyZSBwbHVnaW5zIHNob3VsZCBiZSByZXNvbHZlZCBmcm9tLicpXG4gIC5vcHRpb24oJy0tcnVsZSA8cGF0aD4nLCAnU3BlY2lmeSBydWxlcy4nKVxuICAub3B0aW9uKCctLXJ1bGVzZGlyIDxwYXRoPicsICdVc2UgYWRkaXRpb25hbCBydWxlcyBmcm9tIHRoaXMgZGlyZWN0b3J5LicpXG4gIC5vcHRpb24oJy0tc3RkaW4nLCAnTGludCBjb2RlIHByb3ZpZGVkIG9uIDxTVERJTj4gLSBEZWZhdWx0OiBmYWxzZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1zdGRpbkZpbGVuYW1lIDxuPicsICdTcGVjaWZ5IGZpbGVuYW1lIHRvIHByb2Nlc3MgU1RESU4gYXMuJylcbiAgLmFjdGlvbigoY21kKSA9PiBsaW50KGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnbWlncmF0ZScpXG4gIC5vcHRpb24oJy1xLCAtLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLmFjdGlvbigoY21kKSA9PiBtaWdyYXRlKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgncGFja2FnZS1sYW1iZGEnKVxuICAucmVxdWlyZWRPcHRpb24oJy0tZW50cnkgPHBhdGg+JywgJ0xhbWJkYSBlbnRyeSBmaWxlIHRvIGJ1bmRsZS4nKVxuICAub3B0aW9uKCctLWNvcHlOb2RlTW9kdWxlIDx2YWx1ZS4uLj4nLCAnUnVudGltZSBub2RlX21vZHVsZXMgcGFja2FnZXMgdG8gY29weSBpbnRvIHRoZSBwYWNrYWdlIGFmdGVyIGJ1bmRsaW5nLicpXG4gIC5vcHRpb24oJy0tZXh0ZXJuYWwgPHZhbHVlLi4uPicsICdQYWNrYWdlcyBvciBwYWNrYWdlIHBhdHRlcm5zIHRvIGtlZXAgZXh0ZXJuYWwgZnJvbSB0aGUgYnVuZGxlLicpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPHZhbHVlPicsICdKYXZhU2NyaXB0IG91dHB1dCBmb3JtYXQuIERlZmF1bHQ6IFwiY2pzXCIuJykuY2hvaWNlcyhbJ2NqcycsICdlc20nXSkuZGVmYXVsdCgnY2pzJykpXG4gIC5vcHRpb24oJy0tbWFpbkZpZWxkcyA8dmFsdWU+JywgJ1BhY2thZ2UgZmllbGRzIGVzYnVpbGQgc2hvdWxkIHByZWZlci4gRGVmYXVsdDogXCJtb2R1bGUsbWFpblwiLicpXG4gIC5vcHRpb24oJy0tbWluaWZ5JywgJ01pbmlmeSB0aGUgYnVuZGxlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vZGVNb2R1bGVzUGF0aCA8cGF0aD4nLCAnUGF0aCB0byBydW50aW1lIG5vZGVfbW9kdWxlcyBjb3BpZWQgYnkgLS1jb3B5Tm9kZU1vZHVsZS4gRGVmYXVsdDogXCIuL25vZGVfbW9kdWxlc1wiLicpXG4gIC5vcHRpb24oJy0tb3V0ZmlsZSA8cGF0aD4nLCAnQnVuZGxlZCBvdXRwdXQgZmlsZSBwYXRoIGluc2lkZSB0aGUgcGFja2FnZSBkaXJlY3RvcnkuJylcbiAgLm9wdGlvbignLS1vdXRwdXQgPHBhdGg+JywgJ1ppcCBvdXRwdXQgcGF0aC4gRGVmYXVsdDogXCIuL2xhbWJkYS1wYWNrYWdlLnppcFwiLicpXG4gIC5vcHRpb24oJy0tcGFja2FnZURpciA8cGF0aD4nLCAnVGVtcG9yYXJ5IHBhY2thZ2UgZGlyZWN0b3J5LiBEZWZhdWx0OiBcIi4vLmxleC9sYW1iZGEtcGFja2FnZVwiLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXNvdXJjZW1hcCcsICdHZW5lcmF0ZSBhIHNvdXJjZW1hcC4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS10YXJnZXQgPHZhbHVlPicsICdlc2J1aWxkIHJ1bnRpbWUgdGFyZ2V0LiBEZWZhdWx0OiBcIm5vZGUyNFwiLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gcGFja2FnZUxhbWJkYShjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ3B1Ymxpc2gnKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYnVtcCA8dHlwZT4nLCAnSW5jcmVtZW50cyB0aGUgdmVyc2lvbi4gVHlwZXMgaW5jbHVkZTogbWFqb3IsIG1pbm9yLCBwYXRjaCwgYmV0YSwgYWxwaGEsIHJjLiBEZWZhdWx0OiBcInBhdGNoXCIuJykuY2hvaWNlcyhbJ21ham9yJywgJ21pbm9yJywgJ3BhdGNoJywgJ2JldGEnLCAnYWxwaGEnLCAncmMnXSkuZGVmYXVsdCgncGF0Y2gnKSlcbiAgLm9wdGlvbignLS1uZXdWZXJzaW9uIDx2ZXJzaW9uTnVtYmVyPicsICdQdWJsaXNoIGFzIGEgc3BlY2lmaWMgdmVyc2lvbi4nKVxuICAub3B0aW9uKCctLW90cCA8Y29kZT4nLCAnUHJvdmlkZSBhIHR3by1mYWN0b3IgY29kZS4nKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcGFja2FnZS1tYW5hZ2VyIDxtYW5hZ2VyPicsICdXaGljaCBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlLiBEZWZhdWx0OiBucG0nKS5jaG9pY2VzKFsnbnBtJywgJ3lhcm4nXSkuZGVmYXVsdCgnbnBtJykpXG4gIC5vcHRpb24oJy0tcHJpdmF0ZScsICdQdWJsaXNoZXMgdGhlIG1vZHVsZSBhcyByZXN0cmljdGVkLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXRhZyA8dGFnPicsICdSZWdpc3RlcnMgdGhlIHB1Ymxpc2hlZCBwYWNrYWdlIHdpdGggdGhlIGdpdmVuIHRhZy4nKVxuICAuYWN0aW9uKChjbWQpID0+IHB1Ymxpc2goY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdzZXJ2ZXJsZXNzJylcbiAgLm9wdGlvbignLS1jb25maWcgPHBhdGg+JywgJ0N1c3RvbSBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoZGVmYXVsdDogbGV4LmNvbmZpZy5tanMpLicpXG4gIC5vcHRpb24oJy0taG9zdCA8aG9zdD4nLCAnSG9zdCB0byBiaW5kIHRoZSBzZXJ2ZXIgdG8gKGRlZmF1bHQ6IGxvY2FsaG9zdCkuJylcbiAgLm9wdGlvbignLS1odHRwUG9ydCA8cG9ydD4nLCAnSFRUUCBzZXJ2ZXIgcG9ydCAoZGVmYXVsdDogMzEwMCkuJylcbiAgLm9wdGlvbignLS1odHRwc1BvcnQgPHBvcnQ+JywgJ0hUVFBTIHNlcnZlciBwb3J0IChkZWZhdWx0OiAzMTAxKS4nKVxuICAub3B0aW9uKCctLXdzUG9ydCA8cG9ydD4nLCAnV2ViU29ja2V0IHNlcnZlciBwb3J0IChkZWZhdWx0OiAzMTAyKS4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1yZW1vdmUnLCAnUmVtb3ZlcyBhbGwgZmlsZXMgZnJvbSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBiZWZvcmUgc3RhcnRpbmcuJylcbiAgLm9wdGlvbignLS11c2VQdWJsaWNJcCcsICdGb3JjZSByZWZyZXNoIHRoZSBjYWNoZWQgcHVibGljIElQIGFkZHJlc3MuJylcbiAgLm9wdGlvbignLS12YXJpYWJsZXMgPGpzb24+JywgJ0Vudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgaW4gcHJvY2Vzcy5lbnYuJylcbiAgLm9wdGlvbignLS1kZWJ1ZycsICdFbmFibGUgR3JhcGhRTCBkZWJ1ZyBsb2dnaW5nIHRvIHNlZSBxdWVyaWVzLCB2YXJpYWJsZXMsIGFuZCBvcGVyYXRpb25zLicpXG4gIC5vcHRpb24oJy0tcHJpbnRPdXRwdXQnLCAnUHJpbnQgR3JhcGhRTCByZXNwb25zZSBvdXRwdXQgaW5jbHVkaW5nIHN0YXR1cywgaGVhZGVycywgYW5kIGJvZHkuJylcbiAgLmFjdGlvbigoY21kKSA9PiBzZXJ2ZXJsZXNzKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnc3Rvcnlib29rJylcbiAgLm9wdGlvbignLS1jb25maWcgPHBhdGg+JywgJ0N1c3RvbSBTdG9yeWJvb2sgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkgcGF0aCAoaWUuIC5zdG9yeWJvb2spLicpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdDdXN0b20gTGV4IGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gbGV4LmNvbmZpZy5qcykuJylcbiAgLm9wdGlvbignLS1vcGVuJywgJ0F1dG9tYXRpY2FsbHkgb3BlbiBTdG9yeWJvb2sgaW4gYSBuZXcgYnJvd3NlciB3aW5kb3cuJylcbiAgLm9wdGlvbignLS1wb3J0IDxudW1iZXI+JywgJ1BvcnQgbnVtYmVyIGZvciB0aGUgU3Rvcnlib29rIHNlcnZlci4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1zdGF0aWMnLCAnQnVpbGQgYSBzdGF0aWMgU3Rvcnlib29rIHNpdGUgaW5zdGVhZCBvZiBzdGFydGluZyBkZXYgc2VydmVyLicpXG4gIC5vcHRpb24oJy0tdmFyaWFibGVzIDxuPicsICdFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGluIFwicHJvY2Vzcy5lbnZcIi4gKGllLiBcIntTVE9SWUJPT0tfVEhFTUU6IFxcJ2RhcmtcXCd9XCIpLicpXG4gIC5vcHRpb24oJy0tdmVyYm9zZScsICdTaG93IGRldGFpbGVkIHdlYnBhY2sgcHJvZ3Jlc3Mgb3V0cHV0LicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gc3Rvcnlib29rKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgndGVzdCBbZmlsZXMuLi5dJylcbiAgLm9wdGlvbignLS1hbmFseXplJywgJ1VzZSBBSSB0byBhbmFseXplIHRlc3QgY292ZXJhZ2UgYW5kIHN1Z2dlc3QgaW1wcm92ZW1lbnRzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWRlYnVnVGVzdHMnLCAnVXNlIEFJIHRvIGRlYnVnIHRlc3QgZmFpbHVyZXMgYW5kIHN1Z2dlc3QgZml4ZXMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZ2VuZXJhdGUnLCAnVXNlIEFJIHRvIGdlbmVyYXRlIHRlc3QgY2FzZXMgZm9yIHVudGVzdGVkIGNvZGUuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tYmFpbCcsICdFeGl0IHRoZSB0ZXN0IHN1aXRlIGltbWVkaWF0ZWx5IHVwb24gdGhlIGZpcnN0IGZhaWxpbmcgdGVzdCBzdWl0ZS4nKVxuICAub3B0aW9uKCctLWNoYW5nZWRGaWxlc1dpdGhBbmNlc3RvcicsICdSdW5zIHRlc3RzIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgY2hhbmdlcyBhbmQgdGhlIGNoYW5nZXMgbWFkZSBpbiB0aGUgbGFzdCBjb21taXQuJylcbiAgLm9wdGlvbignLS1jaGFuZ2VkU2luY2UnLCAnUnVucyB0ZXN0cyByZWxhdGVkIHRoZSBjaGFuZ2VzIHNpbmNlIHRoZSBwcm92aWRlZCBicmFuY2guJylcbiAgLm9wdGlvbignLS1jaScsICdXaGVuIHRoaXMgb3B0aW9uIGlzIHByb3ZpZGVkLCBWaXRlc3Qgd2lsbCBhc3N1bWUgaXQgaXMgcnVubmluZyBpbiBhIENJIGVudmlyb25tZW50LicpXG4gIC5vcHRpb24oJy0tY2xlYXJDYWNoZScsICdDbGVhciBWaXRlc3QgY2FjaGUuJylcbiAgLm9wdGlvbignLS1jb2xsZWN0Q292ZXJhZ2VGcm9tIDxnbG9iPicsICdBIGdsb2IgcGF0dGVybiByZWxhdGl2ZSB0byBtYXRjaGluZyB0aGUgZmlsZXMgdGhhdCBjb3ZlcmFnZSBpbmZvIG5lZWRzIHRvIGJlIGNvbGxlY3RlZCBmcm9tLicpXG4gIC5vcHRpb24oJy0tY29sb3JzJywgJ0ZvcmNlcyB0ZXN0IHJlc3VsdHMgb3V0cHV0IGhpZ2hsaWdodGluZyBldmVuIGlmIHN0ZG91dCBpcyBub3QgYSBUVFkuJylcbiAgLm9wdGlvbignLS1jb25maWcgPHBhdGg+JywgJ0N1c3RvbSBWaXRlc3QgY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiB2aXRlc3QuY29uZmlnLm1qcykuJylcbiAgLm9wdGlvbignLS1kZWJ1ZycsICdQcmludCBkZWJ1Z2dpbmcgaW5mbyBhYm91dCB5b3VyIFZpdGVzdCBjb25maWcuJylcbiAgLm9wdGlvbignLS1kZXRlY3RPcGVuSGFuZGxlcycsICdBdHRlbXB0IHRvIGNvbGxlY3QgYW5kIHByaW50IG9wZW4gaGFuZGxlcyBwcmV2ZW50aW5nIFZpdGVzdCBmcm9tIGV4aXRpbmcgY2xlYW5seScpXG4gIC5vcHRpb24oJy0tZTJlJywgJ1J1biBQbGF5d3JpZ2h0IGVuZC10by1lbmQgdGVzdHMgbWF0Y2hpbmcgXCIqLmUyZS50c1t4XVwiLicpXG4gIC5vcHRpb24oJy0tZTJlQ29uZmlnIDxwYXRoPicsICdDdXN0b20gUGxheXdyaWdodCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIHBsYXl3cmlnaHQuY29uZmlnLnRzKS4nKVxuICAub3B0aW9uKCctLWVudmlyb25tZW50IDxuPicsICdUYXJnZXQgZW52aXJvbm1lbnQuIFwibm9kZVwiIG9yIFwid2ViXCIuIERlZmF1bHQ6IFwibm9kZVwiLicpXG4gIC5vcHRpb24oJy0tZW52JywgJ1RoZSB0ZXN0IGVudmlyb25tZW50IHVzZWQgZm9yIGFsbCB0ZXN0cy4gVGhpcyBjYW4gcG9pbnQgdG8gYW55IGZpbGUgb3Igbm9kZSBtb2R1bGUuIEV4YW1wbGVzOiBoYXBweS1kb20sIGpzZG9tLCBub2RlIG9yIHBhdGgvdG8vbXktZW52aXJvbm1lbnQuanMuJylcbiAgLm9wdGlvbignLS1lcnJvck9uRGVwcmVjYXRlZCcsICdNYWtlIGNhbGxpbmcgZGVwcmVjYXRlZCBBUElzIHRocm93IGhlbHBmdWwgZXJyb3IgbWVzc2FnZXMuJylcbiAgLm9wdGlvbignLS1leHBhbmQnLCAnVXNlIHRoaXMgZmxhZyB0byBzaG93IGZ1bGwgZGlmZnMgYW5kIGVycm9ycyBpbnN0ZWFkIG9mIGEgcGF0Y2guJylcbiAgLm9wdGlvbignLS1mb3JjZUV4aXQnLCAnRm9yY2UgVml0ZXN0IHRvIGV4aXQgYWZ0ZXIgYWxsIHRlc3RzIGhhdmUgY29tcGxldGVkIHJ1bm5pbmcuJylcbiAgLm9wdGlvbignLS1qc29uJywgJ1ByaW50cyB0aGUgdGVzdCByZXN1bHRzIGluIEpTT04uJylcbiAgLm9wdGlvbignLS1sYXN0Q29tbWl0JywgJ1J1biBhbGwgdGVzdHMgYWZmZWN0ZWQgYnkgZmlsZSBjaGFuZ2VzIGluIHRoZSBsYXN0IGNvbW1pdCBtYWRlLicpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdDdXN0b20gTGV4IGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gbGV4LmNvbmZpZy5qcykuJylcbiAgLm9wdGlvbignLS1saXN0VGVzdHMnLCAnTGlzdHMgYWxsIHRlc3RzIGFzIEpTT04gdGhhdCBWaXRlc3Qgd2lsbCBydW4gZ2l2ZW4gdGhlIGFyZ3VtZW50cywgYW5kIGV4aXRzLicpXG4gIC5vcHRpb24oJy0tbG9nSGVhcFVzYWdlJywgJ0xvZ3MgdGhlIGhlYXAgdXNhZ2UgYWZ0ZXIgZXZlcnkgdGVzdC4nKVxuICAub3B0aW9uKCctLW1heFdvcmtlcnMgPG51bT4nLCAnU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB3b3JrZXJzIHRoZSB3b3JrZXItcG9vbCB3aWxsIHNwYXduIGZvciBydW5uaW5nIHRlc3RzLiAnKVxuICAub3B0aW9uKCctLW5vU3RhY2tUcmFjZScsICdEaXNhYmxlcyBzdGFjayB0cmFjZSBpbiB0ZXN0IHJlc3VsdHMgb3V0cHV0LicpXG4gIC5vcHRpb24oJy0tbm90aWZ5JywgJ0FjdGl2YXRlcyBub3RpZmljYXRpb25zIGZvciB0ZXN0IHJlc3VsdHMuJylcbiAgLm9wdGlvbignLS1vbmx5Q2hhbmdlZCcsICd1biBiYXNlZCBvbiB3aGljaCBmaWxlcyBoYXZlIGNoYW5nZWQgaW4gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeS4gJylcbiAgLm9wdGlvbignLS1vdXRwdXRGaWxlIDxmaWxlbmFtZT4nLCAnV3JpdGUgdGVzdCByZXN1bHRzIHRvIGEgZmlsZSB3aGVuIHRoZSAtLWpzb24gb3B0aW9uIGlzIGFsc28gc3BlY2lmaWVkLicpXG4gIC5vcHRpb24oJy0tcGFzc1dpdGhOb1Rlc3RzJywgJ0FsbG93cyB0aGUgdGVzdCBzdWl0ZSB0byBwYXNzIHdoZW4gbm8gZmlsZXMgYXJlIGZvdW5kLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXJ1bkluQmFuZCcsICdSdW4gYWxsIHRlc3RzIHNlcmlhbGx5IGluIHRoZSBjdXJyZW50IHByb2Nlc3MsIHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgd29ya2VyIHBvb2wgb2YgY2hpbGQgcHJvY2Vzc2VzIHRoYXQgcnVuIHRlc3RzLicpXG4gIC5vcHRpb24oJy0tc2V0dXAgPHBhdGg+JywgJ1ZpdGVzdCBzZXR1cCBmaWxlIHBhdGguJylcbiAgLm9wdGlvbignLS1zaG93Q29uZmlnJywgJ1ByaW50IHlvdXIgVml0ZXN0IGNvbmZpZyBhbmQgdGhlbiBleGl0cy4nKVxuICAub3B0aW9uKCctLXNpbGVudCcsICdQcmV2ZW50IHRlc3RzIGZyb20gcHJpbnRpbmcgbWVzc2FnZXMgdGhyb3VnaCB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXRlc3RMb2NhdGlvbkluUmVzdWx0cycsICdBZGRzIGEgbG9jYXRpb24gZmllbGQgdG8gdGVzdCByZXN1bHRzLicpXG4gIC5vcHRpb24oJy0tdGVzdE5hbWVQYXR0ZXJuIDxyZWdleD4nLCAnUnVuIG9ubHkgdGVzdHMgd2l0aCBhIG5hbWUgdGhhdCBtYXRjaGVzIHRoZSByZWdleC4gJylcbiAgLm9wdGlvbignLS10ZXN0UGF0aFBhdHRlcm4gPHJlZ2V4PicsICdBIHJlZ2V4cCBwYXR0ZXJuIHN0cmluZyB0aGF0IGlzIG1hdGNoZWQgYWdhaW5zdCBhbGwgdGVzdHMgcGF0aHMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgdGVzdC4nKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnVHJhbnNwaWxlIGFzIFR5cGVzY3JpcHQuJylcbiAgLm9wdGlvbignLS11bml0JywgJ1J1biBWaXRlc3QgdW5pdCB0ZXN0cyBtYXRjaGluZyBcIioudGVzdC50c1t4XVwiLicpXG4gIC5vcHRpb24oJy0tdXBkYXRlJywgJ1VwZGF0ZSBzbmFwc2hvdHMuIFJ1bnMgXCJ2aXRlc3QgLS11cGRhdGVcIicpXG4gIC5vcHRpb24oJy0tdXNlU3RkZXJyJywgJ0RpdmVydCBhbGwgb3V0cHV0IHRvIHN0ZGVyci4nKVxuICAub3B0aW9uKCctLXZlcmJvc2UnLCAnRGlzcGxheSBpbmRpdmlkdWFsIHRlc3QgcmVzdWx0cyB3aXRoIHRoZSB0ZXN0IHN1aXRlIGhpZXJhcmNoeS4nKVxuICAub3B0aW9uKCctLXdhdGNoIDxwYXRoPicsICdXYXRjaCBmaWxlcyBmb3IgY2hhbmdlcyBhbmQgcmVydW4gdGVzdHMgcmVsYXRlZCB0byBjaGFuZ2VkIGZpbGVzLicpXG4gIC5vcHRpb24oJy0td2F0Y2hBbGwnLCAnV2F0Y2ggZmlsZXMgZm9yIGNoYW5nZXMgYW5kIHJlcnVuIGFsbCB0ZXN0cyB3aGVuIHNvbWV0aGluZyBjaGFuZ2VzLicpXG4gIC5hY3Rpb24oKGZpbGVzLCBvcHRpb25zLCBjbWQpID0+IHRlc3Qob3B0aW9ucywgY21kLmFyZ3MsIGZpbGVzLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCd1cGRhdGUnKVxuICAub3B0aW9uKCctLWludGVyYWN0aXZlJywgJ0Nob29zZSB3aGljaCBwYWNrYWdlcyB0byB1cGRhdGUuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXBhY2thZ2UtbWFuYWdlciA8bWFuYWdlcj4nLCAnV2hpY2ggcGFja2FnZSBtYW5hZ2VyIHRvIHVzZS4gRGVmYXVsdDogbnBtJykuY2hvaWNlcyhbJ25wbScsICd5YXJuJ10pLmRlZmF1bHQoJ25wbScpKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1yZWdpc3RyeScsICdBZGQgYSBjdXN0b20gcmVnaXN0cnkgdXJsLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gdXBkYXRlKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgndXBncmFkZScpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wYWNrYWdlLW1hbmFnZXIgPG1hbmFnZXI+JywgJ1doaWNoIHBhY2thZ2UgbWFuYWdlciB0byB1c2UuIERlZmF1bHQ6IG5wbScpLmNob2ljZXMoWyducG0nLCAneWFybiddKS5kZWZhdWx0KCducG0nKSlcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gdXBncmFkZShjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2FpJylcbiAgLm9wdGlvbignLS1jb250ZXh0JywgJ0luY2x1ZGUgcHJvamVjdCBjb250ZXh0IGluIHRoZSBBSSBwcm9tcHQuJywgdHJ1ZSlcbiAgLm9wdGlvbignLS1maWxlIDxwYXRoPicsICdTcGVjaWZpYyBmaWxlIHRvIG9wZXJhdGUgb24uJylcbiAgLm9wdGlvbignLS1sZXhDb25maWcgPHBhdGg+JywgJ0N1c3RvbSBMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiBsZXguY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLW1vZGVsIDxtb2RlbD4nLCAnQUkgbW9kZWwgdG8gdXNlLiBEZWZhdWx0OiBncHQtNG8uJylcbiAgLm9wdGlvbignLS1wcm9tcHQgPHRleHQ+JywgJ1RoZSBwcm9tcHQgdG8gc2VuZCB0byB0aGUgQUkuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10YXNrIDx0YXNrPicsICdUeXBlIG9mIEFJIHRhc2sgdG8gcGVyZm9ybS4nKS5jaG9pY2VzKFsnZ2VuZXJhdGUnLCAnZXhwbGFpbicsICd0ZXN0JywgJ29wdGltaXplJywgJ2hlbHAnXSkuZGVmYXVsdCgnaGVscCcpKVxuICAuYWN0aW9uKChjbWQpID0+IGFpRnVuY3Rpb24oY21kKS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgndmVyc2lvbnMnKVxuICAub3B0aW9uKCctLWpzb24nLCAnUHJpbnQgdGhlIHZlcnNpb24gYXMgYSBKU09OIG9iamVjdC4nKVxuICAuYWN0aW9uKChjbWQpID0+IHZlcnNpb25zKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW1cbiAgLnZlcnNpb24ocGFja2FnZUpzb24udmVyc2lvbilcbiAgLnBhcnNlKHByb2Nlc3MuYXJndik7XG4iXSwibmFtZXMiOlsiT3B0aW9uIiwicHJvZ3JhbSIsInJlYWRGaWxlU3luYyIsImNyZWF0ZVJlcXVpcmUiLCJkaXJuYW1lIiwicmVzb2x2ZSIsImZpbGVVUkxUb1BhdGgiLCJhaUZ1bmN0aW9uIiwiYnVpbGQiLCJjbGVhbiIsImNvbXBpbGUiLCJjb25maWciLCJjcmVhdGUiLCJkZXYiLCJERUZBVUxUX0RFVl9QT1JUIiwiaW5pdCIsImxpbmtlZCIsImxpbnQiLCJtaWdyYXRlIiwicGFja2FnZUxhbWJkYSIsInB1Ymxpc2giLCJzZXJ2ZXJsZXNzIiwic3Rvcnlib29rIiwidGVzdCIsInVwZGF0ZSIsInVwZ3JhZGUiLCJ2ZXJzaW9ucyIsInByb2Nlc3MiLCJlbnYiLCJMRVhfUk9PVCIsInVybCIsImxleE5vZGVNb2R1bGVzIiwiTk9ERV9QQVRIIiwic3BsaXQiLCJpbmNsdWRlcyIsInJlcXVpcmUiLCJNb2R1bGUiLCJfaW5pdFBhdGhzIiwicGFja2FnZVBhdGgiLCJVUkwiLCJwYWNrYWdlSnNvbiIsIkpTT04iLCJwYXJzZSIsImNvbW1hbmQiLCJvcHRpb24iLCJhZGRPcHRpb24iLCJjaG9pY2VzIiwiZGVmYXVsdCIsImFjdGlvbiIsImNtZCIsImV4aXQiLCJ0aGVuIiwidHlwZSIsImFwcE5hbWUiLCJwYWNrYWdlTmFtZSIsInJlcXVpcmVkT3B0aW9uIiwiZmlsZXMiLCJvcHRpb25zIiwiYXJncyIsInZlcnNpb24iLCJhcmd2Il0sIm1hcHBpbmdzIjoiO0FBQ0E7OztDQUdDLEdBQ0QsU0FBUUEsTUFBTSxFQUFFQyxPQUFPLFFBQU8sWUFBWTtBQUMxQyxTQUFRQyxZQUFZLFFBQU8sS0FBSztBQUNoQyxTQUFRQyxhQUFhLFFBQU8sU0FBUztBQUNyQyxTQUFRQyxPQUFPLEVBQUVDLE9BQU8sUUFBTyxPQUFPO0FBQ3RDLFNBQVFDLGFBQWEsUUFBTyxNQUFNO0FBRWxDLFNBQVFDLFVBQVUsUUFBTyxzQkFBc0I7QUFDL0MsU0FBUUMsS0FBSyxRQUFPLDRCQUE0QjtBQUNoRCxTQUFRQyxLQUFLLFFBQU8sNEJBQTRCO0FBQ2hELFNBQVFDLE9BQU8sUUFBTyxnQ0FBZ0M7QUFDdEQsU0FBUUMsTUFBTSxRQUFPLDhCQUE4QjtBQUNuRCxTQUFRQyxNQUFNLFFBQU8sOEJBQThCO0FBQ25ELFNBQVFDLEdBQUcsRUFBRUMsZ0JBQWdCLFFBQU8sd0JBQXdCO0FBQzVELFNBQVFDLElBQUksUUFBTywwQkFBMEI7QUFDN0MsU0FBUUMsTUFBTSxRQUFPLDBCQUEwQjtBQUMvQyxTQUFRQyxJQUFJLFFBQU8sMEJBQTBCO0FBQzdDLFNBQVFDLE9BQU8sUUFBTyxnQ0FBZ0M7QUFDdEQsU0FBUUMsYUFBYSxRQUFPLDhDQUE4QztBQUMxRSxTQUFRQyxPQUFPLFFBQU8sZ0NBQWdDO0FBQ3RELFNBQVFDLFVBQVUsUUFBTyxzQ0FBc0M7QUFDL0QsU0FBUUMsU0FBUyxRQUFPLG9DQUFvQztBQUM1RCxTQUFRQyxJQUFJLFFBQU8sMEJBQTBCO0FBQzdDLFNBQVFDLE1B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
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7T3B0aW9uLCBwcm9ncmFtfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHtyZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7Y3JlYXRlUmVxdWlyZX0gZnJvbSAnbW9kdWxlJztcbmltcG9ydCB7ZGlybmFtZSwgcmVzb2x2ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQge2ZpbGVVUkxUb1BhdGh9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7YWlGdW5jdGlvbn0gZnJvbSAnLi9jb21tYW5kcy9haS9haS5qcyc7XG5pbXBvcnQge2J1aWxkfSBmcm9tICcuL2NvbW1hbmRzL2J1aWxkL2J1aWxkLmpzJztcbmltcG9ydCB7Y2xlYW59IGZyb20gJy4vY29tbWFuZHMvY2xlYW4vY2xlYW4uanMnO1xuaW1wb3J0IHtjb21waWxlfSBmcm9tICcuL2NvbW1hbmRzL2NvbXBpbGUvY29tcGlsZS5qcyc7XG5pbXBvcnQge2NvbmZpZ30gZnJvbSAnLi9jb21tYW5kcy9jb25maWcvY29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlfSBmcm9tICcuL2NvbW1hbmRzL2NyZWF0ZS9jcmVhdGUuanMnO1xuaW1wb3J0IHtkZXYsIERFRkFVTFRfREVWX1BPUlR9IGZyb20gJy4vY29tbWFuZHMvZGV2L2Rldi5qcyc7XG5pbXBvcnQge2luaXR9IGZyb20gJy4vY29tbWFuZHMvaW5pdC9pbml0LmpzJztcbmltcG9ydCB7bGlua2VkfSBmcm9tICcuL2NvbW1hbmRzL2xpbmsvbGluay5qcyc7XG5pbXBvcnQge2xpbnR9IGZyb20gJy4vY29tbWFuZHMvbGludC9saW50LmpzJztcbmltcG9ydCB7bWlncmF0ZX0gZnJvbSAnLi9jb21tYW5kcy9taWdyYXRlL21pZ3JhdGUuanMnO1xuaW1wb3J0IHtzZXJ2ZXJsZXNzRGVwbG95fSBmcm9tICcuL2NvbW1hbmRzL3NlcnZlcmxlc3MtZGVwbG95L3NlcnZlcmxlc3MtZGVwbG95LmpzJztcbmltcG9ydCB7cHVibGlzaH0gZnJvbSAnLi9jb21tYW5kcy9wdWJsaXNoL3B1Ymxpc2guanMnO1xuaW1wb3J0IHtzZXJ2ZXJsZXNzRGV2fSBmcm9tICcuL2NvbW1hbmRzL3NlcnZlcmxlc3MtZGV2L3NlcnZlcmxlc3MtZGV2LmpzJztcbmltcG9ydCB7c3Rvcnlib29rfSBmcm9tICcuL2NvbW1hbmRzL3N0b3J5Ym9vay9zdG9yeWJvb2suanMnO1xuaW1wb3J0IHt0ZXN0fSBmcm9tICcuL2NvbW1hbmRzL3Rlc3QvdGVzdC5qcyc7XG5pbXBvcnQge3VwZGF0ZX0gZnJvbSAnLi9jb21tYW5kcy91cGRhdGUvdXBkYXRlLmpzJztcbmltcG9ydCB7dXBncmFkZX0gZnJvbSAnLi9jb21tYW5kcy91cGdyYWRlL3VwZ3JhZGUuanMnO1xuaW1wb3J0IHt2ZXJzaW9uc30gZnJvbSAnLi9jb21tYW5kcy92ZXJzaW9ucy92ZXJzaW9ucy5qcyc7XG5cbnByb2Nlc3MuZW52LkxFWF9ST09UID0gZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuXG5jb25zdCBsZXhOb2RlTW9kdWxlcyA9IHJlc29sdmUoZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpLCAnLi4vbm9kZV9tb2R1bGVzJyk7XG5pZighcHJvY2Vzcy5lbnYuTk9ERV9QQVRIKSB7XG4gIHByb2Nlc3MuZW52Lk5PREVfUEFUSCA9IGxleE5vZGVNb2R1bGVzO1xufSBlbHNlIGlmKCFwcm9jZXNzLmVudi5OT0RFX1BBVEguc3BsaXQoJzonKS5pbmNsdWRlcyhsZXhOb2RlTW9kdWxlcykpIHtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9QQVRIICs9IGA6JHtsZXhOb2RlTW9kdWxlc31gO1xufVxuXG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG5yZXF1aXJlKCdtb2R1bGUnKS5Nb2R1bGUuX2luaXRQYXRocygpO1xuXG5jb25zdCBwYWNrYWdlUGF0aCA9IGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi4vcGFja2FnZS5qc29uJywgaW1wb3J0Lm1ldGEudXJsKSk7XG5jb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhY2thZ2VQYXRoLCAndXRmOCcpKTtcblxucHJvZ3JhbS5jb21tYW5kKCdidWlsZCcpXG4gIC5vcHRpb24oJy0tYXNzaXN0JywgJ0VuYWJsZSBBSSBhc3Npc3RhbmNlIGZvciBmaXhpbmcgYnVpbGQgZXJyb3JzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWFuYWx5emUnLCAnRW5hYmxlIEFJIGFuYWx5c2lzIGZvciBidWlsZCBvcHRpbWl6YXRpb24gc3VnZ2VzdGlvbnMgb3IgaW52b2tlIHdlYnBhY2stYnVuZGxlLWFuYWx5emVyIHBsdWdpbi4nLCBmYWxzZSlcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWJ1bmRsZXIgPG4+JywgJ0J1bmRsZXIgdG8gdXNlIChcIndlYnBhY2tcIiBvciBcInN3Y1wiKS4gRGVmYXVsdDogXCJzd2NcIi4nKS5jaG9pY2VzKFsnd2VicGFjaycsICdzd2MnXSkuZGVmYXVsdCgnc3djJykpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdDdXN0b20gV2VicGFjayBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIHdlYnBhY2suY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLWNvbmZpZ05hbWUgPHZhbHVlLi4uPicsICdOYW1lIG9mIHRoZSBjb25maWd1cmF0aW9uIHRvIHVzZS4nKVxuICAub3B0aW9uKCctLWRlZmluZVByb2Nlc3NFbnZOb2RlRW52IDx2YWx1ZT4nLCAnU2V0cyBwcm9jZXNzLmVudi5OT0RFX0VOViB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLiAoQ3VycmVudGx5IGFuIGFsaWFzIGZvciBgLS1ub2RlLWVudmApJylcbiAgLm9wdGlvbignLS1kZXZ0b29sIDx2YWx1ZT4nLCAnQSBkZXZlbG9wZXIgdG9vbCB0byBlbmhhbmNlIGRlYnVnZ2luZyAoZmFsc2UgfCBldmFsIHwgW2lubGluZS18aGlkZGVuLXxldmFsLV1bbm9zb3VyY2VzLV1bY2hlYXAtW21vZHVsZS1dXXNvdXJjZS1tYXApLicpXG4gIC5vcHRpb24oJy0tZGlzYWJsZUludGVycHJldCcsICdEaXNhYmxlIGludGVycHJldCBmb3IgbG9hZGluZyB0aGUgY29uZmlnIGZpbGUuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZW50cnkgPHZhbHVlLi4uPicsICdBIG1vZHVsZSB0aGF0IGlzIGxvYWRlZCB1cG9uIHN0YXJ0dXAuIE9ubHkgdGhlIGxhc3Qgb25lIGlzIGV4cG9ydGVkLicpXG4gIC5vcHRpb24oJy0tZW52IDx2YWx1ZT4nLCAnRW52aXJvbm1lbnQgcGFzc2VkIHRvIHRoZSBjb25maWd1cmF0aW9uIHdoZW4gaXQgaXMgYSBmdW5jdGlvbi4nKVxuICAub3B0aW9uKCctLWZhaWxPbldhcm5pbmdzJywgJ1N0b3Agd2VicGFjay1jbGkgcHJvY2VzcyB3aXRoIG5vbi16ZXJvIGV4aXQgY29kZSBvbiB3YXJuaW5ncyBmcm9tIHdlYnBhY2snLCBmYWxzZSlcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8dmFsdWU+JywgJ1RoaXMgc2V0cyB0aGUgb3V0cHV0IGZvcm1hdCBmb3IgdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0IGZpbGVzLiBEZWZhdWx0OiBcImVzbVwiLicpLmNob2ljZXMoWydjanMnLCAnZXNtJ10pLmRlZmF1bHQoJ2VzbScpKVxuICAub3B0aW9uKCctLWpzb24gPHZhbHVlPicsICdQcmludHMgcmVzdWx0IGFzIEpTT04gb3Igc3RvcmUgaXQgaW4gYSBmaWxlLicpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGxleC5jb25maWcuanMpLicpXG4gIC5vcHRpb24oJy0tbWVyZ2UnLCAnTWVyZ2UgdHdvIG9yIG1vcmUgY29uZmlndXJhdGlvbnMgdXNpbmcgXCJ3ZWJwYWNrLW1lcmdlXCIuJywgZmFsc2UpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1tb2RlIDx0eXBlPicsICdXZWJwYWNrIG1vZGUgKFwicHJvZHVjdGlvblwiIG9yIFwiZGV2ZWxvcG1lbnRcIikuIERlZmF1bHQ6IFwiZGV2ZWxvcG1lbnRcIi4nKS5jaG9pY2VzKFsnZGV2ZWxvcG1lbnQnLCAncHJvZHVjdGlvbiddKS5kZWZhdWx0KCdkZXZlbG9wbWVudCcpKVxuICAub3B0aW9uKCctLW5hbWUgPHZhbHVlPicsICdOYW1lIG9mIHRoZSBjb25maWd1cmF0aW9uLiBVc2VkIHdoZW4gbG9hZGluZyBtdWx0aXBsZSBjb25maWd1cmF0aW9ucy4nKVxuICAub3B0aW9uKCctLW5vRGV2dG9vbCcsICdOZWdhdGl2ZSBcImRldnRvb2xcIiBvcHRpb24uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbm9TdGF0cycsICdOZWdhdGl2ZSBcInN0YXRzXCIgb3B0aW9uLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vVGFyZ2V0JywgJ05lZ2F0aXZlIFwidGFyZ2V0XCIgb3B0aW9uLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vV2F0Y2gnLCAnTmVnYXRpdmUgXCJ3YXRjaFwiIG9wdGlvbi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub1dhdGNoT3B0aW9uc1N0ZGluJywgJ05lZ2F0aXZlIFwid2F0Y2gtb3B0aW9ucy1zdGRpblwiIG9wdGlvbi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub2RlRW52IDx2YWx1ZT4nLCAnU2V0cyBwcm9jZXNzLmVudi5OT0RFX0VOViB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLicpXG4gIC5vcHRpb24oJy0tb3V0cHV0UGF0aCA8dmFsdWU+JywgJ1RoZSBvdXRwdXQgZGlyZWN0b3J5IGFzICoqYWJzb2x1dGUgcGF0aCoqIChyZXF1aXJlZCkuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXJlbW92ZScsICdSZW1vdmVzIGFsbCBmaWxlcyBmcm9tIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGJlZm9yZSBjb21waWxpbmcuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tc291cmNlUGF0aCA8cGF0aD4nLCAnU291cmNlIHBhdGgnKVxuICAub3B0aW9uKCctLXN0YXRzIDx2YWx1ZT4nLCAnU3RhdHMgb3B0aW9ucyBvYmplY3Qgb3IgcHJlc2V0IG5hbWUuJylcbiAgLm9wdGlvbignLS1zdGF0aWMnLCAnQ3JlYXRlcyBzdGF0aWMgSFRNTCBmaWxlcyB3aGVuIGJ1aWxkaW5nIGFwcC4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS10YXJnZXQgPHZhbHVlPicsICdFbnZpcm9ubWVudCB0byBidWlsZCBmb3IuIEVudmlyb25tZW50IHRvIGJ1aWxkIGZvci4gQW4gYXJyYXkgb2YgZW52aXJvbm1lbnRzIHRvIGJ1aWxkIGZvciBhbGwgb2YgdGhlbSB3aGVuIHBvc3NpYmxlLicpXG4gIC5vcHRpb24oJy0tdHJhbnNsYXRpb25zJywgJ1Byb2Nlc3MgdHJhbnNsYXRpb24gZmlsZXMgYW5kIG91dHB1dCBmbGF0dGVuZWQgSlNPTi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS10eXBlc2NyaXB0JywgJ1RyYW5zcGlsZSBhcyBUeXBlc2NyaXB0LicsIGZhbHNlKVxuICAub3B0aW9uKCctLXZhcmlhYmxlcyA8bj4nLCAnRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiBcInByb2Nlc3MuZW52XCIuIChpZS4gXCJ7Tk9ERV9FTlY6IFxcJ3Byb2R1Y3Rpb25cXCd9XCIpLicpXG4gIC5vcHRpb24oJy0td2F0Y2gnLCAnV2F0Y2ggZm9yIGNoYW5nZXMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0td2F0Y2hPcHRpb25zU3RkaW4nLCAnU3RvcCB3YXRjaGluZyB3aGVuIHN0ZGluIHN0cmVhbSBoYXMgZW5kZWQuJywgZmFsc2UpXG4gIC5hY3Rpb24oKGNtZCkgPT4gYnVpbGQoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdjbGVhbicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXNuYXBzaG90cycsICdSZW1vdmUgYWxsIFwiX19zbmFwc2hvdHNfX1wiIGRpcmVjdG9yaWVzLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gY2xlYW4oY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdjb25maWcgPHR5cGU+JylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tanNvbiA8cGF0aD4nLCAnU2F2ZSBvdXRwdXQgdG8ganNvbiBmaWxlLicpXG4gIC5hY3Rpb24oKHR5cGUsIGNtZCkgPT4gY29uZmlnKHR5cGUsIGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnY29tcGlsZScpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdUcmFuc3BpbGVyIGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gdHNjb25maWcuanNvbikuJylcbiAgLm9wdGlvbignLS1lbnZpcm9ubWVudCA8bj4nLCAnVGFyZ2V0IGVudmlyb25tZW50LiBcIm5vZGVcIiBvciBcIndlYlwiLiBEZWZhdWx0OiBcIm5vZGVcIi4nKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDx2YWx1ZT4nLCAnVGhpcyBzZXRzIHRoZSBvdXRwdXQgZm9ybWF0IGZvciB0aGUgZ2VuZXJhdGVkIEphdmFTY3JpcHQgZmlsZXMuIERlZmF1bHQ6IFwiZXNtXCIuJykuY2hvaWNlcyhbJ2NqcycsICdlc20nXSkuZGVmYXVsdCgnZXNtJykpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdDdXN0b20gTGV4IGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gbGV4LmNvbmZpZy5qcykuJylcbiAgLm9wdGlvbignLS1vdXRwdXRQYXRoIDxwYXRoPicsICdPdXRwdXQgcGF0aCcpXG4gIC5vcHRpb24oJy0tcmVtb3ZlJywgJ1JlbW92ZXMgYWxsIGZpbGVzIGZyb20gdGhlIG91dHB1dCBkaXJlY3RvcnkgYmVmb3JlIGNvbXBpbGluZy4nKVxuICAub3B0aW9uKCctLXNvdXJjZVBhdGggPHBhdGg+JywgJ1NvdXJjZSBwYXRoJylcbiAgLm9wdGlvbignLS10eXBlc2NyaXB0JywgJ1RyYW5zcGlsZSBhcyBUeXBlc2NyaXB0LicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXdhdGNoJywgJ1dhdGNoZXMgZm9yIGNoYW5nZXMgYW5kIGNvbXBpbGVzLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gY29tcGlsZShjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2NyZWF0ZSA8dHlwZT4nKVxuICAub3B0aW9uKCctLW91dHB1dEZpbGUgPHBhdGg+JywgJ091dHB1dCBmaWxlbmFtZS4nKVxuICAub3B0aW9uKCctLW91dHB1dE5hbWUgPG4+JywgJ091dHB1dCBuYW1lLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnQ3JlYXRlIFR5cGVzY3JpcHQgdmVyc2lvbi4nKVxuICAuYWN0aW9uKCh0eXBlLCBjbWQpID0+IGNyZWF0ZSh0eXBlLCBjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2RldicpXG4gIC5vcHRpb24oJy0tYnVuZGxlQW5hbHl6ZXInLCAnUnVuIGJ1bmRsZSBhbmFseXplci4nKVxuICAub3B0aW9uKCctLWNvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIFdlYnBhY2sgY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiB3ZWJwYWNrLmNvbmZpZy5qcykuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8dmFsdWU+JywgJ1RoaXMgc2V0cyB0aGUgb3V0cHV0IGZvcm1hdCBmb3IgdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0IGZpbGVzLiBEZWZhdWx0OiBcImVzbVwiLicpLmNob2ljZXMoWydjanMnLCAnZXNtJ10pLmRlZmF1bHQoJ2VzbScpKVxuICAub3B0aW9uKCctLWxleENvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIExleCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIGxleC5jb25maWcuanMpLicpXG4gIC5vcHRpb24oJy0tb3BlbicsICdBdXRvbWF0aWNhbGx5IG9wZW4gZGV2IHNlcnZlciBpbiBhIG5ldyBicm93c2VyIHdpbmRvdy4nKVxuICAub3B0aW9uKCctLW91dHB1dFBhdGggPHBhdGg+JywgJ091dHB1dCBwYXRoJylcbiAgLm9wdGlvbignLS1wb3J0IDxudW1iZXI+JywgYFBvcnQgbnVtYmVyIGZvciB0aGUgZGV2ZWxvcG1lbnQgc2VydmVyIChkZWZhdWx0OiAke0RFRkFVTFRfREVWX1BPUlR9KS5gKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1yZW1vdmUnLCAnUmVtb3ZlcyBhbGwgZmlsZXMgZnJvbSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBiZWZvcmUgY29tcGlsaW5nLicpXG4gIC5vcHRpb24oJy0tc291cmNlUGF0aCA8cGF0aD4nLCAnU291cmNlIHBhdGgnKVxuICAub3B0aW9uKCctLXRyYW5zbGF0aW9ucycsICdQcm9jZXNzIHRyYW5zbGF0aW9uIGZpbGVzIGFuZCBvdXRwdXQgZmxhdHRlbmVkIEpTT04uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tdHlwZXNjcmlwdCcsICdUcmFuc3BpbGUgYXMgVHlwZXNjcmlwdC4nKVxuICAub3B0aW9uKCctLXVzZVB1YmxpY0lwJywgJ0ZvcmNlIHJlZnJlc2ggdGhlIGNhY2hlZCBwdWJsaWMgSVAgYWRkcmVzcy4nKVxuICAub3B0aW9uKCctLXZhcmlhYmxlcyA8bj4nLCAnRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiBcInByb2Nlc3MuZW52XCIuIChpZS4gXCJ7Tk9ERV9FTlY6IFxcJ2RldmVsb3BtZW50XFwnfVwiKS4nKVxuICAub3B0aW9uKCctLXdhdGNoJywgJ1dhdGNoIGZvciBjaGFuZ2VzLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gZGV2KGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnaW5pdCA8YXBwTmFtZT4gW3BhY2thZ2VOYW1lXScpXG4gIC5vcHRpb24oJy0taW5zdGFsbCcsICdJbnN0YWxsIGRlcGVuZGVuY2llcy4nKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcGFja2FnZS1tYW5hZ2VyIDxtYW5hZ2VyPicsICdXaGljaCBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlLiBEZWZhdWx0OiBucG0nKS5jaG9pY2VzKFsnbnBtJywgJ3lhcm4nXSkuZGVmYXVsdCgnbnBtJykpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnVXNlIGEgVHlwZXNjcmlwdCBiYXNlZCBhcHAuJylcbiAgLmFjdGlvbigoYXBwTmFtZSwgcGFja2FnZU5hbWUsIGNtZCkgPT4gaW5pdChhcHBOYW1lLCBwYWNrYWdlTmFtZSwgY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdsaW5rZWQnKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLmFjdGlvbigoY21kKSA9PiBsaW5rZWQoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdsaW50JylcbiAgLm9wdGlvbignLS1jYWNoZScsICdPbmx5IGNoZWNrIGNoYW5nZWQgZmlsZXMuIERlZmF1bHQ6IGZhbHNlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWNhY2hlTG9jYXRpb24gPHBhdGg+JywgJ1BhdGggdG8gdGhlIGNhY2hlIGZpbGUgb3IgZGlyZWN0b3J5LicpXG4gIC5vcHRpb24oJy0tY29sb3InLCAnRm9yY2UgZW5hYmxpbmcgb2YgY29sb3IuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdVc2UgdGhpcyBjb25maWd1cmF0aW9uLCBvdmVycmlkaW5nIC5lc2xpbnRyYy4qIGNvbmZpZyBvcHRpb25zIGlmIHByZXNlbnQuIElmIG5vdCBzcGVjaWZpZWQgYW5kIG5vIGxvY2FsIGNvbmZpZyBleGlzdHMsIExleCB3aWxsIHVzZSBpdHMgZGVmYXVsdCBjb25maWcuJylcbiAgLm9wdGlvbignLS1kZWJ1ZycsICdPdXRwdXQgZGVidWdnaW5nIGluZm9ybWF0aW9uLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWVudkluZm8nLCAnT3V0cHV0IGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi4gRGVmYXVsdDogZmFsc2UuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZW52IDxuPicsICdTcGVjaWZ5IGVudmlyb25tZW50cy4nKVxuICAub3B0aW9uKCctLWZpeCcsICdBcHBseSBBSSBmaXhlcyBhZnRlciBidWlsdC1pbiBFU0xpbnQgZml4ZXMgKHNhbWUgYXMgLS1maXgpLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWZpeERyeVJ1bicsICdBdXRvbWF0aWNhbGx5IGZpeCBwcm9ibGVtcyB3aXRob3V0IHNhdmluZyB0aGUgY2hhbmdlcyB0byB0aGUgZmlsZSBzeXN0ZW0uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZml4VHlwZSA8dHlwZT4nLCAnU3BlY2lmeSB0aGUgdHlwZXMgb2YgZml4ZXMgdG8gYXBwbHkgKHByb2JsZW0sIHN1Z2dlc3Rpb24sIGxheW91dCkuJylcbiAgLm9wdGlvbignLS1mb3JtYXQgPG4+JywgJ1VzZSBhIHNwZWNpZmljIG91dHB1dCBmb3JtYXQuIERlZmF1bHQ6IHN0eWxpc2guJylcbiAgLm9wdGlvbignLS1nbG9iYWwgPHZhcmlhYmxlcz4nLCAnRGVmaW5lIGdsb2JhbCB2YXJpYWJsZXMuJylcbiAgLm9wdGlvbignLS1pZ25vcmVQYXRoIDxwYXRoPicsICdTcGVjaWZ5IHBhdGggb2YgaWdub3JlIGZpbGUuJylcbiAgLm9wdGlvbignLS1pZ25vcmVQYXR0ZXJuIDxwYXR0ZXJuPicsICdQYXR0ZXJuIG9mIGZpbGVzIHRvIGlnbm9yZSAoaW4gYWRkaXRpb24gdG8gdGhvc2UgaW4gLmVzbGludGlnbm9yZSkuJylcbiAgLm9wdGlvbignLS1pbml0JywgJ1J1biBjb25maWcgaW5pdGlhbGl6YXRpb24gd2l6YXJkLiBEZWZhdWx0OiBmYWxzZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1tYXhXYXJuaW5ncyA8bnVtPicsICdOdW1iZXIgb2Ygd2FybmluZ3MgdG8gdHJpZ2dlciBub256ZXJvIGV4aXQgY29kZS4gRGVmYXVsdDogLTEuJylcbiAgLm9wdGlvbignLS1ub0NvbG9yJywgJ0ZvcmNlIGRpc2FibGluZyBvZiBjb2xvci4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub0VzbGludHJjJywgJ0Rpc2FibGUgdXNlIG9mIGNvbmZpZ3VyYXRpb24gZnJvbSAuZXNsaW50cmMuKi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub0lnbm9yZScsICdEaXNhYmxlIHVzZSBvZiBpZ25vcmUgZmlsZXMgYW5kIHBhdHRlcm5zLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vSW5saW5lQ29uZmlnJywgJ1ByZXZlbnQgY29tbWVudHMgZnJvbSBjaGFuZ2luZyBjb25maWcgb3IgcnVsZXMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tb3V0cHV0RmlsZSA8cGF0aD4nLCAnU3BlY2lmeSBmaWxlIHRvIHdyaXRlIHJlcG9ydCB0by4nKVxuICAub3B0aW9uKCctLXBhcnNlciA8bj4nLCAnU3BlY2lmeSB0aGUgcGFyc2VyIHRvIGJlIHVzZWQuJylcbiAgLm9wdGlvbignLS1wYXJzZXJPcHRpb25zIDxvcHRpb25zPicsICdTcGVjaWZ5IHBhcnNlciBvcHRpb25zLicpXG4gIC5vcHRpb24oJy0tcGx1Z2luIDxwbHVnaW5zPicsICdTcGVjaWZ5IHBsdWdpbnMuJylcbiAgLm9wdGlvbignLS1wcmludENvbmZpZyA8cGF0aD4nLCAnUHJpbnQgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBnaXZlbiBmaWxlLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1yZW1vdmUtY29tbWVudHMnLCAnUmVtb3ZlIGFsbCBjb21tZW50cyBleGNlcHQgVE9ET3MgYW5kIGNvcHlyaWdodCBub3RpY2VzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXJlcG9ydFVudXNlZERpc2FibGVEaXJlY3RpdmVzJywgJ0FkZHMgcmVwb3J0ZWQgZXJyb3JzIGZvciB1bnVzZWQgZXNsaW50LWRpc2FibGUgZGlyZWN0aXZlcy4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1yZXNvbHZlUGx1Z2luc1JlbGF0aXZlVG8gPHBhdGg+JywgJ0EgZm9sZGVyIHdoZXJlIHBsdWdpbnMgc2hvdWxkIGJlIHJlc29sdmVkIGZyb20uJylcbiAgLm9wdGlvbignLS1ydWxlIDxwYXRoPicsICdTcGVjaWZ5IHJ1bGVzLicpXG4gIC5vcHRpb24oJy0tcnVsZXNkaXIgPHBhdGg+JywgJ1VzZSBhZGRpdGlvbmFsIHJ1bGVzIGZyb20gdGhpcyBkaXJlY3RvcnkuJylcbiAgLm9wdGlvbignLS1zdGRpbicsICdMaW50IGNvZGUgcHJvdmlkZWQgb24gPFNURElOPiAtIERlZmF1bHQ6IGZhbHNlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXN0ZGluRmlsZW5hbWUgPG4+JywgJ1NwZWNpZnkgZmlsZW5hbWUgdG8gcHJvY2VzcyBTVERJTiBhcy4nKVxuICAuYWN0aW9uKChjbWQpID0+IGxpbnQoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdtaWdyYXRlJylcbiAgLm9wdGlvbignLXEsIC0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAuYWN0aW9uKChjbWQpID0+IG1pZ3JhdGUoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdzZXJ2ZXJsZXNzLWRlcGxveScpXG4gIC5yZXF1aXJlZE9wdGlvbignLS1lbnRyeSA8cGF0aD4nLCAnTGFtYmRhIGVudHJ5IGZpbGUgdG8gYnVuZGxlLicpXG4gIC5vcHRpb24oJy0tY29weU5vZGVNb2R1bGUgPHZhbHVlLi4uPicsICdSdW50aW1lIG5vZGVfbW9kdWxlcyBwYWNrYWdlcyB0byBjb3B5IGludG8gdGhlIHBhY2thZ2UgYWZ0ZXIgYnVuZGxpbmcuJylcbiAgLm9wdGlvbignLS1leHRlcm5hbCA8dmFsdWUuLi4+JywgJ1BhY2thZ2VzIG9yIHBhY2thZ2UgcGF0dGVybnMgdG8ga2VlcCBleHRlcm5hbCBmcm9tIHRoZSBidW5kbGUuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8dmFsdWU+JywgJ0phdmFTY3JpcHQgb3V0cHV0IGZvcm1hdC4gRGVmYXVsdDogXCJjanNcIi4nKS5jaG9pY2VzKFsnY2pzJywgJ2VzbSddKS5kZWZhdWx0KCdjanMnKSlcbiAgLm9wdGlvbignLS1tYWluRmllbGRzIDx2YWx1ZT4nLCAnUGFja2FnZSBmaWVsZHMgZXNidWlsZCBzaG91bGQgcHJlZmVyLiBEZWZhdWx0OiBcIm1vZHVsZSxtYWluXCIuJylcbiAgLm9wdGlvbignLS1taW5pZnknLCAnTWluaWZ5IHRoZSBidW5kbGUuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbm9kZU1vZHVsZXNQYXRoIDxwYXRoPicsICdQYXRoIHRvIHJ1bnRpbWUgbm9kZV9tb2R1bGVzIGNvcGllZCBieSAtLWNvcHlOb2RlTW9kdWxlLiBEZWZhdWx0OiBcIi4vbm9kZV9tb2R1bGVzXCIuJylcbiAgLm9wdGlvbignLS1vdXRmaWxlIDxwYXRoPicsICdCdW5kbGVkIG91dHB1dCBmaWxlIHBhdGggaW5zaWRlIHRoZSBwYWNrYWdlIGRpcmVjdG9yeS4nKVxuICAub3B0aW9uKCctLW91dHB1dCA8cGF0aD4nLCAnWmlwIG91dHB1dCBwYXRoLiBEZWZhdWx0OiBcIi4vbGFtYmRhLXBhY2thZ2UuemlwXCIuJylcbiAgLm9wdGlvbignLS1wYWNrYWdlRGlyIDxwYXRoPicsICdUZW1wb3JhcnkgcGFja2FnZSBkaXJlY3RvcnkuIERlZmF1bHQ6IFwiLi8ubGV4L2xhbWJkYS1wYWNrYWdlXCIuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tc291cmNlbWFwJywgJ0dlbmVyYXRlIGEgc291cmNlbWFwLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXRhcmdldCA8dmFsdWU+JywgJ2VzYnVpbGQgcnVudGltZSB0YXJnZXQuIERlZmF1bHQ6IFwibm9kZTI0XCIuJylcbiAgLmFjdGlvbigoY21kKSA9PiBzZXJ2ZXJsZXNzRGVwbG95KGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgncHVibGlzaCcpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1idW1wIDx0eXBlPicsICdJbmNyZW1lbnRzIHRoZSB2ZXJzaW9uLiBUeXBlcyBpbmNsdWRlOiBtYWpvciwgbWlub3IsIHBhdGNoLCBiZXRhLCBhbHBoYSwgcmMuIERlZmF1bHQ6IFwicGF0Y2hcIi4nKS5jaG9pY2VzKFsnbWFqb3InLCAnbWlub3InLCAncGF0Y2gnLCAnYmV0YScsICdhbHBoYScsICdyYyddKS5kZWZhdWx0KCdwYXRjaCcpKVxuICAub3B0aW9uKCctLW5ld1ZlcnNpb24gPHZlcnNpb25OdW1iZXI+JywgJ1B1Ymxpc2ggYXMgYSBzcGVjaWZpYyB2ZXJzaW9uLicpXG4gIC5vcHRpb24oJy0tb3RwIDxjb2RlPicsICdQcm92aWRlIGEgdHdvLWZhY3RvciBjb2RlLicpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wYWNrYWdlLW1hbmFnZXIgPG1hbmFnZXI+JywgJ1doaWNoIHBhY2thZ2UgbWFuYWdlciB0byB1c2UuIERlZmF1bHQ6IG5wbScpLmNob2ljZXMoWyducG0nLCAneWFybiddKS5kZWZhdWx0KCducG0nKSlcbiAgLm9wdGlvbignLS1wcml2YXRlJywgJ1B1Ymxpc2hlcyB0aGUgbW9kdWxlIGFzIHJlc3RyaWN0ZWQuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tdGFnIDx0YWc+JywgJ1JlZ2lzdGVycyB0aGUgcHVibGlzaGVkIHBhY2thZ2Ugd2l0aCB0aGUgZ2l2ZW4gdGFnLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gcHVibGlzaChjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ3NlcnZlcmxlc3MtZGV2JylcbiAgLm9wdGlvbignLS1jb25maWcgPHBhdGg+JywgJ0N1c3RvbSBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoZGVmYXVsdDogbGV4LmNvbmZpZy5tanMpLicpXG4gIC5vcHRpb24oJy0taG9zdCA8aG9zdD4nLCAnSG9zdCB0byBiaW5kIHRoZSBzZXJ2ZXIgdG8gKGRlZmF1bHQ6IGxvY2FsaG9zdCkuJylcbiAgLm9wdGlvbignLS1odHRwUG9ydCA8cG9ydD4nLCAnSFRUUCBzZXJ2ZXIgcG9ydCAoZGVmYXVsdDogMzEwMCkuJylcbiAgLm9wdGlvbignLS1odHRwc1BvcnQgPHBvcnQ+JywgJ0hUVFBTIHNlcnZlciBwb3J0IChkZWZhdWx0OiAzMTAxKS4nKVxuICAub3B0aW9uKCctLXdzUG9ydCA8cG9ydD4nLCAnV2ViU29ja2V0IHNlcnZlciBwb3J0IChkZWZhdWx0OiAzMTAyKS4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1yZW1vdmUnLCAnUmVtb3ZlcyBhbGwgZmlsZXMgZnJvbSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBiZWZvcmUgc3RhcnRpbmcuJylcbiAgLm9wdGlvbignLS11c2VQdWJsaWNJcCcsICdGb3JjZSByZWZyZXNoIHRoZSBjYWNoZWQgcHVibGljIElQIGFkZHJlc3MuJylcbiAgLm9wdGlvbignLS12YXJpYWJsZXMgPGpzb24+JywgJ0Vudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgaW4gcHJvY2Vzcy5lbnYuJylcbiAgLm9wdGlvbignLS1kZWJ1ZycsICdFbmFibGUgR3JhcGhRTCBkZWJ1ZyBsb2dnaW5nIHRvIHNlZSBxdWVyaWVzLCB2YXJpYWJsZXMsIGFuZCBvcGVyYXRpb25zLicpXG4gIC5vcHRpb24oJy0tcHJpbnRPdXRwdXQnLCAnUHJpbnQgR3JhcGhRTCByZXNwb25zZSBvdXRwdXQgaW5jbHVkaW5nIHN0YXR1cywgaGVhZGVycywgYW5kIGJvZHkuJylcbiAgLmFjdGlvbigoY21kKSA9PiBzZXJ2ZXJsZXNzRGV2KGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnc3Rvcnlib29rJylcbiAgLm9wdGlvbignLS1jb25maWcgPHBhdGg+JywgJ0N1c3RvbSBTdG9yeWJvb2sgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkgcGF0aCAoaWUuIC5zdG9yeWJvb2spLicpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdDdXN0b20gTGV4IGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gbGV4LmNvbmZpZy5qcykuJylcbiAgLm9wdGlvbignLS1vcGVuJywgJ0F1dG9tYXRpY2FsbHkgb3BlbiBTdG9yeWJvb2sgaW4gYSBuZXcgYnJvd3NlciB3aW5kb3cuJylcbiAgLm9wdGlvbignLS1wb3J0IDxudW1iZXI+JywgJ1BvcnQgbnVtYmVyIGZvciB0aGUgU3Rvcnlib29rIHNlcnZlci4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1zdGF0aWMnLCAnQnVpbGQgYSBzdGF0aWMgU3Rvcnlib29rIHNpdGUgaW5zdGVhZCBvZiBzdGFydGluZyBkZXYgc2VydmVyLicpXG4gIC5vcHRpb24oJy0tdmFyaWFibGVzIDxuPicsICdFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGluIFwicHJvY2Vzcy5lbnZcIi4gKGllLiBcIntTVE9SWUJPT0tfVEhFTUU6IFxcJ2RhcmtcXCd9XCIpLicpXG4gIC5vcHRpb24oJy0tdmVyYm9zZScsICdTaG93IGRldGFpbGVkIHdlYnBhY2sgcHJvZ3Jlc3Mgb3V0cHV0LicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gc3Rvcnlib29rKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgndGVzdCBbZmlsZXMuLi5dJylcbiAgLm9wdGlvbignLS1hbmFseXplJywgJ1VzZSBBSSB0byBhbmFseXplIHRlc3QgY292ZXJhZ2UgYW5kIHN1Z2dlc3QgaW1wcm92ZW1lbnRzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWRlYnVnVGVzdHMnLCAnVXNlIEFJIHRvIGRlYnVnIHRlc3QgZmFpbHVyZXMgYW5kIHN1Z2dlc3QgZml4ZXMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZ2VuZXJhdGUnLCAnVXNlIEFJIHRvIGdlbmVyYXRlIHRlc3QgY2FzZXMgZm9yIHVudGVzdGVkIGNvZGUuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tYmFpbCcsICdFeGl0IHRoZSB0ZXN0IHN1aXRlIGltbWVkaWF0ZWx5IHVwb24gdGhlIGZpcnN0IGZhaWxpbmcgdGVzdCBzdWl0ZS4nKVxuICAub3B0aW9uKCctLWNoYW5nZWRGaWxlc1dpdGhBbmNlc3RvcicsICdSdW5zIHRlc3RzIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgY2hhbmdlcyBhbmQgdGhlIGNoYW5nZXMgbWFkZSBpbiB0aGUgbGFzdCBjb21taXQuJylcbiAgLm9wdGlvbignLS1jaGFuZ2VkU2luY2UnLCAnUnVucyB0ZXN0cyByZWxhdGVkIHRoZSBjaGFuZ2VzIHNpbmNlIHRoZSBwcm92aWRlZCBicmFuY2guJylcbiAgLm9wdGlvbignLS1jaScsICdXaGVuIHRoaXMgb3B0aW9uIGlzIHByb3ZpZGVkLCBWaXRlc3Qgd2lsbCBhc3N1bWUgaXQgaXMgcnVubmluZyBpbiBhIENJIGVudmlyb25tZW50LicpXG4gIC5vcHRpb24oJy0tY2xlYXJDYWNoZScsICdDbGVhciBWaXRlc3QgY2FjaGUuJylcbiAgLm9wdGlvbignLS1jb2xsZWN0Q292ZXJhZ2VGcm9tIDxnbG9iPicsICdBIGdsb2IgcGF0dGVybiByZWxhdGl2ZSB0byBtYXRjaGluZyB0aGUgZmlsZXMgdGhhdCBjb3ZlcmFnZSBpbmZvIG5lZWRzIHRvIGJlIGNvbGxlY3RlZCBmcm9tLicpXG4gIC5vcHRpb24oJy0tY29sb3JzJywgJ0ZvcmNlcyB0ZXN0IHJlc3VsdHMgb3V0cHV0IGhpZ2hsaWdodGluZyBldmVuIGlmIHN0ZG91dCBpcyBub3QgYSBUVFkuJylcbiAgLm9wdGlvbignLS1jb25maWcgPHBhdGg+JywgJ0N1c3RvbSBWaXRlc3QgY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiB2aXRlc3QuY29uZmlnLm1qcykuJylcbiAgLm9wdGlvbignLS1kZWJ1ZycsICdQcmludCBkZWJ1Z2dpbmcgaW5mbyBhYm91dCB5b3VyIFZpdGVzdCBjb25maWcuJylcbiAgLm9wdGlvbignLS1kZXRlY3RPcGVuSGFuZGxlcycsICdBdHRlbXB0IHRvIGNvbGxlY3QgYW5kIHByaW50IG9wZW4gaGFuZGxlcyBwcmV2ZW50aW5nIFZpdGVzdCBmcm9tIGV4aXRpbmcgY2xlYW5seScpXG4gIC5vcHRpb24oJy0tZTJlJywgJ1J1biBQbGF5d3JpZ2h0IGVuZC10by1lbmQgdGVzdHMgbWF0Y2hpbmcgXCIqLmUyZS50c1t4XVwiLicpXG4gIC5vcHRpb24oJy0tZTJlQ29uZmlnIDxwYXRoPicsICdDdXN0b20gUGxheXdyaWdodCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIHBsYXl3cmlnaHQuY29uZmlnLnRzKS4nKVxuICAub3B0aW9uKCctLWVudmlyb25tZW50IDxuPicsICdUYXJnZXQgZW52aXJvbm1lbnQuIFwibm9kZVwiIG9yIFwid2ViXCIuIERlZmF1bHQ6IFwibm9kZVwiLicpXG4gIC5vcHRpb24oJy0tZW52JywgJ1RoZSB0ZXN0IGVudmlyb25tZW50IHVzZWQgZm9yIGFsbCB0ZXN0cy4gVGhpcyBjYW4gcG9pbnQgdG8gYW55IGZpbGUgb3Igbm9kZSBtb2R1bGUuIEV4YW1wbGVzOiBoYXBweS1kb20sIGpzZG9tLCBub2RlIG9yIHBhdGgvdG8vbXktZW52aXJvbm1lbnQuanMuJylcbiAgLm9wdGlvbignLS1lcnJvck9uRGVwcmVjYXRlZCcsICdNYWtlIGNhbGxpbmcgZGVwcmVjYXRlZCBBUElzIHRocm93IGhlbHBmdWwgZXJyb3IgbWVzc2FnZXMuJylcbiAgLm9wdGlvbignLS1leHBhbmQnLCAnVXNlIHRoaXMgZmxhZyB0byBzaG93IGZ1bGwgZGlmZnMgYW5kIGVycm9ycyBpbnN0ZWFkIG9mIGEgcGF0Y2guJylcbiAgLm9wdGlvbignLS1mb3JjZUV4aXQnLCAnRm9yY2UgVml0ZXN0IHRvIGV4aXQgYWZ0ZXIgYWxsIHRlc3RzIGhhdmUgY29tcGxldGVkIHJ1bm5pbmcuJylcbiAgLm9wdGlvbignLS1qc29uJywgJ1ByaW50cyB0aGUgdGVzdCByZXN1bHRzIGluIEpTT04uJylcbiAgLm9wdGlvbignLS1sYXN0Q29tbWl0JywgJ1J1biBhbGwgdGVzdHMgYWZmZWN0ZWQgYnkgZmlsZSBjaGFuZ2VzIGluIHRoZSBsYXN0IGNvbW1pdCBtYWRlLicpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdDdXN0b20gTGV4IGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gbGV4LmNvbmZpZy5qcykuJylcbiAgLm9wdGlvbignLS1saXN0VGVzdHMnLCAnTGlzdHMgYWxsIHRlc3RzIGFzIEpTT04gdGhhdCBWaXRlc3Qgd2lsbCBydW4gZ2l2ZW4gdGhlIGFyZ3VtZW50cywgYW5kIGV4aXRzLicpXG4gIC5vcHRpb24oJy0tbG9nSGVhcFVzYWdlJywgJ0xvZ3MgdGhlIGhlYXAgdXNhZ2UgYWZ0ZXIgZXZlcnkgdGVzdC4nKVxuICAub3B0aW9uKCctLW1heFdvcmtlcnMgPG51bT4nLCAnU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB3b3JrZXJzIHRoZSB3b3JrZXItcG9vbCB3aWxsIHNwYXduIGZvciBydW5uaW5nIHRlc3RzLiAnKVxuICAub3B0aW9uKCctLW5vU3RhY2tUcmFjZScsICdEaXNhYmxlcyBzdGFjayB0cmFjZSBpbiB0ZXN0IHJlc3VsdHMgb3V0cHV0LicpXG4gIC5vcHRpb24oJy0tbm90aWZ5JywgJ0FjdGl2YXRlcyBub3RpZmljYXRpb25zIGZvciB0ZXN0IHJlc3VsdHMuJylcbiAgLm9wdGlvbignLS1vbmx5Q2hhbmdlZCcsICd1biBiYXNlZCBvbiB3aGljaCBmaWxlcyBoYXZlIGNoYW5nZWQgaW4gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeS4gJylcbiAgLm9wdGlvbignLS1vdXRwdXRGaWxlIDxmaWxlbmFtZT4nLCAnV3JpdGUgdGVzdCByZXN1bHRzIHRvIGEgZmlsZSB3aGVuIHRoZSAtLWpzb24gb3B0aW9uIGlzIGFsc28gc3BlY2lmaWVkLicpXG4gIC5vcHRpb24oJy0tcGFzc1dpdGhOb1Rlc3RzJywgJ0FsbG93cyB0aGUgdGVzdCBzdWl0ZSB0byBwYXNzIHdoZW4gbm8gZmlsZXMgYXJlIGZvdW5kLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXJ1bkluQmFuZCcsICdSdW4gYWxsIHRlc3RzIHNlcmlhbGx5IGluIHRoZSBjdXJyZW50IHByb2Nlc3MsIHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgd29ya2VyIHBvb2wgb2YgY2hpbGQgcHJvY2Vzc2VzIHRoYXQgcnVuIHRlc3RzLicpXG4gIC5vcHRpb24oJy0tc2V0dXAgPHBhdGg+JywgJ1ZpdGVzdCBzZXR1cCBmaWxlIHBhdGguJylcbiAgLm9wdGlvbignLS1zaG93Q29uZmlnJywgJ1ByaW50IHlvdXIgVml0ZXN0IGNvbmZpZyBhbmQgdGhlbiBleGl0cy4nKVxuICAub3B0aW9uKCctLXNpbGVudCcsICdQcmV2ZW50IHRlc3RzIGZyb20gcHJpbnRpbmcgbWVzc2FnZXMgdGhyb3VnaCB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXRlc3RMb2NhdGlvbkluUmVzdWx0cycsICdBZGRzIGEgbG9jYXRpb24gZmllbGQgdG8gdGVzdCByZXN1bHRzLicpXG4gIC5vcHRpb24oJy0tdGVzdE5hbWVQYXR0ZXJuIDxyZWdleD4nLCAnUnVuIG9ubHkgdGVzdHMgd2l0aCBhIG5hbWUgdGhhdCBtYXRjaGVzIHRoZSByZWdleC4gJylcbiAgLm9wdGlvbignLS10ZXN0UGF0aFBhdHRlcm4gPHJlZ2V4PicsICdBIHJlZ2V4cCBwYXR0ZXJuIHN0cmluZyB0aGF0IGlzIG1hdGNoZWQgYWdhaW5zdCBhbGwgdGVzdHMgcGF0aHMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgdGVzdC4nKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnVHJhbnNwaWxlIGFzIFR5cGVzY3JpcHQuJylcbiAgLm9wdGlvbignLS11bml0JywgJ1J1biBWaXRlc3QgdW5pdCB0ZXN0cyBtYXRjaGluZyBcIioudGVzdC50c1t4XVwiLicpXG4gIC5vcHRpb24oJy0tdXBkYXRlJywgJ1VwZGF0ZSBzbmFwc2hvdHMuIFJ1bnMgXCJ2aXRlc3QgLS11cGRhdGVcIicpXG4gIC5vcHRpb24oJy0tdXNlU3RkZXJyJywgJ0RpdmVydCBhbGwgb3V0cHV0IHRvIHN0ZGVyci4nKVxuICAub3B0aW9uKCctLXZlcmJvc2UnLCAnRGlzcGxheSBpbmRpdmlkdWFsIHRlc3QgcmVzdWx0cyB3aXRoIHRoZSB0ZXN0IHN1aXRlIGhpZXJhcmNoeS4nKVxuICAub3B0aW9uKCctLXdhdGNoIDxwYXRoPicsICdXYXRjaCBmaWxlcyBmb3IgY2hhbmdlcyBhbmQgcmVydW4gdGVzdHMgcmVsYXRlZCB0byBjaGFuZ2VkIGZpbGVzLicpXG4gIC5vcHRpb24oJy0td2F0Y2hBbGwnLCAnV2F0Y2ggZmlsZXMgZm9yIGNoYW5nZXMgYW5kIHJlcnVuIGFsbCB0ZXN0cyB3aGVuIHNvbWV0aGluZyBjaGFuZ2VzLicpXG4gIC5hY3Rpb24oKGZpbGVzLCBvcHRpb25zLCBjbWQpID0+IHRlc3Qob3B0aW9ucywgY21kLmFyZ3MsIGZpbGVzLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCd1cGRhdGUnKVxuICAub3B0aW9uKCctLWludGVyYWN0aXZlJywgJ0Nob29zZSB3aGljaCBwYWNrYWdlcyB0byB1cGRhdGUuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXBhY2thZ2UtbWFuYWdlciA8bWFuYWdlcj4nLCAnV2hpY2ggcGFja2FnZSBtYW5hZ2VyIHRvIHVzZS4gRGVmYXVsdDogbnBtJykuY2hvaWNlcyhbJ25wbScsICd5YXJuJ10pLmRlZmF1bHQoJ25wbScpKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1yZWdpc3RyeScsICdBZGQgYSBjdXN0b20gcmVnaXN0cnkgdXJsLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gdXBkYXRlKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgndXBncmFkZScpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wYWNrYWdlLW1hbmFnZXIgPG1hbmFnZXI+JywgJ1doaWNoIHBhY2thZ2UgbWFuYWdlciB0byB1c2UuIERlZmF1bHQ6IG5wbScpLmNob2ljZXMoWyducG0nLCAneWFybiddKS5kZWZhdWx0KCducG0nKSlcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gdXBncmFkZShjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2FpJylcbiAgLm9wdGlvbignLS1jb250ZXh0JywgJ0luY2x1ZGUgcHJvamVjdCBjb250ZXh0IGluIHRoZSBBSSBwcm9tcHQuJywgdHJ1ZSlcbiAgLm9wdGlvbignLS1maWxlIDxwYXRoPicsICdTcGVjaWZpYyBmaWxlIHRvIG9wZXJhdGUgb24uJylcbiAgLm9wdGlvbignLS1sZXhDb25maWcgPHBhdGg+JywgJ0N1c3RvbSBMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiBsZXguY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLW1vZGVsIDxtb2RlbD4nLCAnQUkgbW9kZWwgdG8gdXNlLiBEZWZhdWx0OiBncHQtNG8uJylcbiAgLm9wdGlvbignLS1wcm9tcHQgPHRleHQ+JywgJ1RoZSBwcm9tcHQgdG8gc2VuZCB0byB0aGUgQUkuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10YXNrIDx0YXNrPicsICdUeXBlIG9mIEFJIHRhc2sgdG8gcGVyZm9ybS4nKS5jaG9pY2VzKFsnZ2VuZXJhdGUnLCAnZXhwbGFpbicsICd0ZXN0JywgJ29wdGltaXplJywgJ2hlbHAnXSkuZGVmYXVsdCgnaGVscCcpKVxuICAuYWN0aW9uKChjbWQpID0+IGFpRnVuY3Rpb24oY21kKS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgndmVyc2lvbnMnKVxuICAub3B0aW9uKCctLWpzb24nLCAnUHJpbnQgdGhlIHZlcnNpb24gYXMgYSBKU09OIG9iamVjdC4nKVxuICAuYWN0aW9uKChjbWQpID0+IHZlcnNpb25zKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW1cbiAgLnZlcnNpb24ocGFja2FnZUpzb24udmVyc2lvbilcbiAgLnBhcnNlKHByb2Nlc3MuYXJndik7XG4iXSwibmFtZXMiOlsiT3B0aW9uIiwicHJvZ3JhbSIsInJlYWRGaWxlU3luYyIsImNyZWF0ZVJlcXVpcmUiLCJkaXJuYW1lIiwicmVzb2x2ZSIsImZpbGVVUkxUb1BhdGgiLCJhaUZ1bmN0aW9uIiwiYnVpbGQiLCJjbGVhbiIsImNvbXBpbGUiLCJjb25maWciLCJjcmVhdGUiLCJkZXYiLCJERUZBVUxUX0RFVl9QT1JUIiwiaW5pdCIsImxpbmtlZCIsImxpbnQiLCJtaWdyYXRlIiwic2VydmVybGVzc0RlcGxveSIsInB1Ymxpc2giLCJzZXJ2ZXJsZXNzRGV2Iiwic3Rvcnlib29rIiwidGVzdCIsInVwZGF0ZSIsInVwZ3JhZGUiLCJ2ZXJzaW9ucyIsInByb2Nlc3MiLCJlbnYiLCJMRVhfUk9PVCIsInVybCIsImxleE5vZGVNb2R1bGVzIiwiTk9ERV9QQVRIIiwic3BsaXQiLCJpbmNsdWRlcyIsInJlcXVpcmUiLCJNb2R1bGUiLCJfaW5pdFBhdGhzIiwicGFja2FnZVBhdGgiLCJVUkwiLCJwYWNrYWdlSnNvbiIsIkpTT04iLCJwYXJzZSIsImNvbW1hbmQiLCJvcHRpb24iLCJhZGRPcHRpb24iLCJjaG9pY2VzIiwiZGVmYXVsdCIsImFjdGlvbiIsImNtZCIsImV4aXQiLCJ0aGVuIiwidHlwZSIsImFwcE5hbWUiLCJwYWNrYWdlTmFtZSIsInJlcXVpcmVkT3B0aW9uIiwiZmlsZXMiLCJvcHRpb25zIiwiYXJncyIsInZlcnNpb24iLCJhcmd2Il0sIm1hcHBpbmdzIjoiO0FBQ0E7OztDQUdDLEdBQ0QsU0FBUUEsTUFBTSxFQUFFQyxPQUFPLFFBQU8sWUFBWTtBQUMxQyxTQUFRQyxZQUFZLFFBQU8sS0FBSztBQUNoQyxTQUFRQyxhQUFhLFFBQU8sU0FBUztBQUNyQyxTQUFRQyxPQUFPLEVBQUVDLE9BQU8sUUFBTyxPQUFPO0FBQ3RDLFNBQVFDLGFBQWEsUUFBTyxNQUFNO0FBRWxDLFNBQVFDLFVBQVUsUUFBTyxzQkFBc0I7QUFDL0MsU0FBUUMsS0FBSyxRQUFPLDRCQUE0QjtBQUNoRCxTQUFRQyxLQUFLLFFBQU8sNEJBQTRCO0FBQ2hELFNBQVFDLE9BQU8sUUFBTyxnQ0FBZ0M7QUFDdEQsU0FBUUMsTUFBTSxRQUFPLDhCQUE4QjtBQUNuRCxTQUFRQyxNQUFNLFFBQU8sOEJBQThCO0FBQ25ELFNBQVFDLEdBQUcsRUFBRUMsZ0JBQWdCLFFBQU8sd0JBQXdCO0FBQzVELFNBQVFDLElBQUksUUFBTywwQkFBMEI7QUFDN0MsU0FBUUMsTUFBTSxRQUFPLDBCQUEwQjtBQUMvQyxTQUFRQyxJQUFJLFFBQU8sMEJBQTBCO0FBQzdDLFNBQVFDLE9BQU8sUUFBTyxnQ0FBZ0M7QUFDdEQsU0FBUUMsZ0JBQWdCLFFBQU8sb0RBQW9EO0FBQ25GLFNBQVFDLE9BQU8sUUFBTyxnQ0FBZ0M7QUFDdEQsU0FBUUMsYUFBYSxRQUFPLDhDQUE4QztBQUMxRSxTQUFRQyxTQUFTLFFBQU8sb0NBQW9DO0FB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nlabs/lex",
3
- "version": "1.57.0",
3
+ "version": "1.58.0",
4
4
  "description": "Lex",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -1,110 +0,0 @@
1
- /**
2
- * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
- */ import { execa } from 'execa';
5
- import { cpSync, existsSync, mkdirSync, rmSync, statSync } from 'fs';
6
- import { dirname, resolve } from 'path';
7
- import { log } from '../../utils/log.js';
8
- const toList = (value)=>{
9
- if (!value) return [];
10
- return Array.isArray(value) ? value : [
11
- value
12
- ];
13
- };
14
- const formatSize = (bytes)=>{
15
- if (bytes < 1024) return `${bytes} B`;
16
- if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
17
- return `${(bytes / 1024 / 1024).toFixed(1)} MB`;
18
- };
19
- export const packageLambda = async (cmd, callback = ()=>({}))=>{
20
- const { bundle = true, cliName = 'Lex', entry, format = 'cjs', mainFields = 'module,main', minify = false, nodeModulesPath = './node_modules', output = './lambda-package.zip', packageDir = './.lex/lambda-package', platform = 'node', quiet, sourcemap = false, target = 'node24' } = cmd;
21
- if (!entry) {
22
- log(`\n${cliName} Error: --entry is required.`, 'error', quiet);
23
- callback(1);
24
- return 1;
25
- }
26
- const entryPath = resolve(process.cwd(), entry);
27
- if (!existsSync(entryPath)) {
28
- log(`\n${cliName} Error: Entry file not found, "${entry}".`, 'error', quiet);
29
- callback(1);
30
- return 1;
31
- }
32
- const outputPath = resolve(process.cwd(), output);
33
- const packagePath = resolve(process.cwd(), packageDir);
34
- const outfile = resolve(process.cwd(), cmd.outfile || `${packageDir}/index.js`);
35
- try {
36
- log(`${cliName} packaging Lambda bundle...`, 'info', quiet);
37
- rmSync(packagePath, {
38
- force: true,
39
- recursive: true
40
- });
41
- rmSync(outputPath, {
42
- force: true
43
- });
44
- mkdirSync(dirname(outfile), {
45
- recursive: true
46
- });
47
- const esbuildArgs = [
48
- entryPath,
49
- bundle ? '--bundle' : '--bundle=false',
50
- `--platform=${platform}`,
51
- `--target=${target}`,
52
- `--format=${format}`,
53
- `--main-fields=${mainFields}`,
54
- '--tree-shaking=true',
55
- '--legal-comments=none',
56
- `--outfile=${outfile}`
57
- ];
58
- if (minify) {
59
- esbuildArgs.push('--minify');
60
- }
61
- if (sourcemap) {
62
- esbuildArgs.push('--sourcemap');
63
- }
64
- for (const external of toList(cmd.external)){
65
- esbuildArgs.push(`--external:${external}`);
66
- }
67
- await execa('npx', [
68
- '--no-install',
69
- 'esbuild',
70
- ...esbuildArgs
71
- ], {
72
- cwd: process.cwd(),
73
- stdio: 'inherit'
74
- });
75
- for (const moduleName of toList(cmd.copyNodeModule)){
76
- const source = resolve(process.cwd(), nodeModulesPath, moduleName);
77
- const destination = resolve(packagePath, 'node_modules', moduleName);
78
- if (!existsSync(source)) {
79
- log(`${cliName} warning: node module not found, "${moduleName}".`, 'warn', quiet);
80
- continue;
81
- }
82
- mkdirSync(dirname(destination), {
83
- recursive: true
84
- });
85
- cpSync(source, destination, {
86
- recursive: true
87
- });
88
- }
89
- mkdirSync(dirname(outputPath), {
90
- recursive: true
91
- });
92
- await execa('zip', [
93
- '-qr',
94
- outputPath,
95
- '.'
96
- ], {
97
- cwd: packagePath,
98
- stdio: 'inherit'
99
- });
100
- log(`${cliName} Lambda package created: ${outputPath} (${formatSize(statSync(outputPath).size)})`, 'success', quiet);
101
- callback(0);
102
- return 0;
103
- } catch (error) {
104
- log(`\n${cliName} Error: Lambda package failed. ${error.message}`, 'error', quiet);
105
- callback(1);
106
- return 1;
107
- }
108
- };
109
-
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9wYWNrYWdlLWxhbWJkYS9wYWNrYWdlLWxhbWJkYS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtleGVjYX0gZnJvbSAnZXhlY2EnO1xuaW1wb3J0IHtjcFN5bmMsIGV4aXN0c1N5bmMsIG1rZGlyU3luYywgcm1TeW5jLCBzdGF0U3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtkaXJuYW1lLCByZXNvbHZlfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFja2FnZUxhbWJkYU9wdGlvbnMge1xuICByZWFkb25seSBidW5kbGU/OiBib29sZWFuO1xuICByZWFkb25seSBjbGlOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBjb3B5Tm9kZU1vZHVsZT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICByZWFkb25seSBlbnRyeT86IHN0cmluZztcbiAgcmVhZG9ubHkgZXh0ZXJuYWw/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgZm9ybWF0PzogJ2NqcycgfCAnZXNtJztcbiAgcmVhZG9ubHkgbWFpbkZpZWxkcz86IHN0cmluZztcbiAgcmVhZG9ubHkgbWluaWZ5PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbm9kZU1vZHVsZXNQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSBvdXRmaWxlPzogc3RyaW5nO1xuICByZWFkb25seSBvdXRwdXQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhY2thZ2VEaXI/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBsYXRmb3JtPzogJ25vZGUnO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNvdXJjZW1hcD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHRhcmdldD86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgUGFja2FnZUxhbWJkYUNhbGxiYWNrID0gKHN0YXR1czogbnVtYmVyKSA9PiB2b2lkO1xuXG5jb25zdCB0b0xpc3QgPSAodmFsdWU/OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZ1tdID0+IHtcbiAgaWYoIXZhbHVlKSByZXR1cm4gW107XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbn07XG5cbmNvbnN0IGZvcm1hdFNpemUgPSAoYnl0ZXM6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gIGlmKGJ5dGVzIDwgMTAyNCkgcmV0dXJuIGAke2J5dGVzfSBCYDtcbiAgaWYoYnl0ZXMgPCAxMDI0ICogMTAyNCkgcmV0dXJuIGAkeyhieXRlcyAvIDEwMjQpLnRvRml4ZWQoMSl9IEtCYDtcbiAgcmV0dXJuIGAkeyhieXRlcyAvIDEwMjQgLyAxMDI0KS50b0ZpeGVkKDEpfSBNQmA7XG59O1xuXG5leHBvcnQgY29uc3QgcGFja2FnZUxhbWJkYSA9IGFzeW5jIChcbiAgY21kOiBQYWNrYWdlTGFtYmRhT3B0aW9ucyxcbiAgY2FsbGJhY2s6IFBhY2thZ2VMYW1iZGFDYWxsYmFjayA9ICgpID0+ICh7fSlcbik6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBidW5kbGUgPSB0cnVlLFxuICAgIGNsaU5hbWUgPSAnTGV4JyxcbiAgICBlbnRyeSxcbiAgICBmb3JtYXQgPSAnY2pzJyxcbiAgICBtYWluRmllbGRzID0gJ21vZHVsZSxtYWluJyxcbiAgICBtaW5pZnkgPSBmYWxzZSxcbiAgICBub2RlTW9kdWxlc1BhdGggPSAnLi9ub2RlX21vZHVsZXMnLFxuICAgIG91dHB1dCA9ICcuL2xhbWJkYS1wYWNrYWdlLnppcCcsXG4gICAgcGFja2FnZURpciA9ICcuLy5sZXgvbGFtYmRhLXBhY2thZ2UnLFxuICAgIHBsYXRmb3JtID0gJ25vZGUnLFxuICAgIHF1aWV0LFxuICAgIHNvdXJjZW1hcCA9IGZhbHNlLFxuICAgIHRhcmdldCA9ICdub2RlMjQnXG4gIH0gPSBjbWQ7XG5cbiAgaWYoIWVudHJ5KSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAtLWVudHJ5IGlzIHJlcXVpcmVkLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGNvbnN0IGVudHJ5UGF0aCA9IHJlc29sdmUocHJvY2Vzcy5jd2QoKSwgZW50cnkpO1xuICBpZighZXhpc3RzU3luYyhlbnRyeVBhdGgpKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBFbnRyeSBmaWxlIG5vdCBmb3VuZCwgXCIke2VudHJ5fVwiLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGNvbnN0IG91dHB1dFBhdGggPSByZXNvbHZlKHByb2Nlc3MuY3dkKCksIG91dHB1dCk7XG4gIGNvbnN0IHBhY2thZ2VQYXRoID0gcmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBwYWNrYWdlRGlyKTtcbiAgY29uc3Qgb3V0ZmlsZSA9IHJlc29sdmUocHJvY2Vzcy5jd2QoKSwgY21kLm91dGZpbGUgfHwgYCR7cGFja2FnZURpcn0vaW5kZXguanNgKTtcblxuICB0cnkge1xuICAgIGxvZyhgJHtjbGlOYW1lfSBwYWNrYWdpbmcgTGFtYmRhIGJ1bmRsZS4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgcm1TeW5jKHBhY2thZ2VQYXRoLCB7Zm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZX0pO1xuICAgIHJtU3luYyhvdXRwdXRQYXRoLCB7Zm9yY2U6IHRydWV9KTtcbiAgICBta2RpclN5bmMoZGlybmFtZShvdXRmaWxlKSwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuXG4gICAgY29uc3QgZXNidWlsZEFyZ3MgPSBbXG4gICAgICBlbnRyeVBhdGgsXG4gICAgICBidW5kbGUgPyAnLS1idW5kbGUnIDogJy0tYnVuZGxlPWZhbHNlJyxcbiAgICAgIGAtLXBsYXRmb3JtPSR7cGxhdGZvcm19YCxcbiAgICAgIGAtLXRhcmdldD0ke3RhcmdldH1gLFxuICAgICAgYC0tZm9ybWF0PSR7Zm9ybWF0fWAsXG4gICAgICBgLS1tYWluLWZpZWxkcz0ke21haW5GaWVsZHN9YCxcbiAgICAgICctLXRyZWUtc2hha2luZz10cnVlJyxcbiAgICAgICctLWxlZ2FsLWNvbW1lbnRzPW5vbmUnLFxuICAgICAgYC0tb3V0ZmlsZT0ke291dGZpbGV9YFxuICAgIF07XG5cbiAgICBpZihtaW5pZnkpIHtcbiAgICAgIGVzYnVpbGRBcmdzLnB1c2goJy0tbWluaWZ5Jyk7XG4gICAgfVxuXG4gICAgaWYoc291cmNlbWFwKSB7XG4gICAgICBlc2J1aWxkQXJncy5wdXNoKCctLXNvdXJjZW1hcCcpO1xuICAgIH1cblxuICAgIGZvcihjb25zdCBleHRlcm5hbCBvZiB0b0xpc3QoY21kLmV4dGVybmFsKSkge1xuICAgICAgZXNidWlsZEFyZ3MucHVzaChgLS1leHRlcm5hbDoke2V4dGVybmFsfWApO1xuICAgIH1cblxuICAgIGF3YWl0IGV4ZWNhKCducHgnLCBbJy0tbm8taW5zdGFsbCcsICdlc2J1aWxkJywgLi4uZXNidWlsZEFyZ3NdLCB7XG4gICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgICBzdGRpbzogJ2luaGVyaXQnXG4gICAgfSk7XG5cbiAgICBmb3IoY29uc3QgbW9kdWxlTmFtZSBvZiB0b0xpc3QoY21kLmNvcHlOb2RlTW9kdWxlKSkge1xuICAgICAgY29uc3Qgc291cmNlID0gcmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBub2RlTW9kdWxlc1BhdGgsIG1vZHVsZU5hbWUpO1xuICAgICAgY29uc3QgZGVzdGluYXRpb24gPSByZXNvbHZlKHBhY2thZ2VQYXRoLCAnbm9kZV9tb2R1bGVzJywgbW9kdWxlTmFtZSk7XG5cbiAgICAgIGlmKCFleGlzdHNTeW5jKHNvdXJjZSkpIHtcbiAgICAgICAgbG9nKGAke2NsaU5hbWV9IHdhcm5pbmc6IG5vZGUgbW9kdWxlIG5vdCBmb3VuZCwgXCIke21vZHVsZU5hbWV9XCIuYCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBta2RpclN5bmMoZGlybmFtZShkZXN0aW5hdGlvbiksIHtyZWN1cnNpdmU6IHRydWV9KTtcbiAgICAgIGNwU3luYyhzb3VyY2UsIGRlc3RpbmF0aW9uLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gICAgfVxuXG4gICAgbWtkaXJTeW5jKGRpcm5hbWUob3V0cHV0UGF0aCksIHtyZWN1cnNpdmU6IHRydWV9KTtcbiAgICBhd2FpdCBleGVjYSgnemlwJywgWyctcXInLCBvdXRwdXRQYXRoLCAnLiddLCB7XG4gICAgICBjd2Q6IHBhY2thZ2VQYXRoLFxuICAgICAgc3RkaW86ICdpbmhlcml0J1xuICAgIH0pO1xuXG4gICAgbG9nKGAke2NsaU5hbWV9IExhbWJkYSBwYWNrYWdlIGNyZWF0ZWQ6ICR7b3V0cHV0UGF0aH0gKCR7Zm9ybWF0U2l6ZShzdGF0U3luYyhvdXRwdXRQYXRoKS5zaXplKX0pYCwgJ3N1Y2Nlc3MnLCBxdWlldCk7XG4gICAgY2FsbGJhY2soMCk7XG4gICAgcmV0dXJuIDA7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IExhbWJkYSBwYWNrYWdlIGZhaWxlZC4gJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJleGVjYSIsImNwU3luYyIsImV4aXN0c1N5bmMiLCJta2RpclN5bmMiLCJybVN5bmMiLCJzdGF0U3luYyIsImRpcm5hbWUiLCJyZXNvbHZlIiwibG9nIiwidG9MaXN0IiwidmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JtYXRTaXplIiwiYnl0ZXMiLCJ0b0ZpeGVkIiwicGFja2FnZUxhbWJkYSIsImNtZCIsImNhbGxiYWNrIiwiYnVuZGxlIiwiY2xpTmFtZSIsImVudHJ5IiwiZm9ybWF0IiwibWFpbkZpZWxkcyIsIm1pbmlmeSIsIm5vZGVNb2R1bGVzUGF0aCIsIm91dHB1dCIsInBhY2thZ2VEaXIiLCJwbGF0Zm9ybSIsInF1aWV0Iiwic291cmNlbWFwIiwidGFyZ2V0IiwiZW50cnlQYXRoIiwicHJvY2VzcyIsImN3ZCIsIm91dHB1dFBhdGgiLCJwYWNrYWdlUGF0aCIsIm91dGZpbGUiLCJmb3JjZSIsInJlY3Vyc2l2ZSIsImVzYnVpbGRBcmdzIiwicHVzaCIsImV4dGVybmFsIiwic3RkaW8iLCJtb2R1bGVOYW1lIiwiY29weU5vZGVNb2R1bGUiLCJzb3VyY2UiLCJkZXN0aW5hdGlvbiIsInNpemUiLCJlcnJvciIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLEtBQUssUUFBTyxRQUFRO0FBQzVCLFNBQVFDLE1BQU0sRUFBRUMsVUFBVSxFQUFFQyxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFPLEtBQUs7QUFDbkUsU0FBUUMsT0FBTyxFQUFFQyxPQUFPLFFBQU8sT0FBTztBQUV0QyxTQUFRQyxHQUFHLFFBQU8scUJBQXFCO0FBdUJ2QyxNQUFNQyxTQUFTLENBQUNDO0lBQ2QsSUFBRyxDQUFDQSxPQUFPLE9BQU8sRUFBRTtJQUNwQixPQUFPQyxNQUFNQyxPQUFPLENBQUNGLFNBQVNBLFFBQVE7UUFBQ0E7S0FBTTtBQUMvQztBQUVBLE1BQU1HLGFBQWEsQ0FBQ0M7SUFDbEIsSUFBR0EsUUFBUSxNQUFNLE9BQU8sR0FBR0EsTUFBTSxFQUFFLENBQUM7SUFDcEMsSUFBR0EsUUFBUSxPQUFPLE1BQU0sT0FBTyxHQUFHLEFBQUNBLENBQUFBLFFBQVEsSUFBRyxFQUFHQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDaEUsT0FBTyxHQUFHLEFBQUNELENBQUFB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