@nlabs/lex 1.52.23 → 1.53.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.
@@ -36,32 +36,13 @@ const config = {
36
36
  }
37
37
  },
38
38
  stories: ['../src/**/*.stories.@(js|ts|tsx)', '../src/**/*.mdx'],
39
- webpackFinal: async (config) => {
39
+ webpackFinal: async (config: any) => {
40
40
  return {
41
41
  ...config,
42
42
  module: {
43
43
  ...config.module,
44
44
  rules: [
45
- ...(config.module?.rules || []),
46
- {
47
- test: /\.(ts|tsx)$/,
48
- use: [
49
- {
50
- loader: 'babel-loader',
51
- options: {
52
- presets: [
53
- '@babel/preset-typescript',
54
- [
55
- '@babel/preset-react',
56
- {
57
- runtime: 'automatic'
58
- }
59
- ]
60
- ]
61
- }
62
- }
63
- ]
64
- }
45
+ ...(config.module?.rules || [])
65
46
  ]
66
47
  },
67
48
  resolve: {
package/jest.config.mjs CHANGED
@@ -43,25 +43,7 @@ const baseConfig = {
43
43
  testEnvironment: 'node',
44
44
  testRegex: '(/__tests__/.*|\\.(test|spec|integration))\\.(ts|tsx)?$',
45
45
  transform: {
46
- '^.+\\.js$|^.+\\.jsx$': ['babel-jest', {
47
- plugins: [
48
- 'babel-plugin-transform-import-meta'
49
- ],
50
- presets: [
51
- ['@babel/preset-env', {targets: {node: 'current'}}],
52
- '@babel/preset-typescript'
53
- ]
54
- }],
55
- '^.+\\.ts$|^.+\\.tsx$': ['babel-jest', {
56
- plugins: [
57
- 'babel-plugin-transform-import-meta'
58
- ],
59
- presets: [
60
- ['@babel/preset-env', {targets: {node: 'current'}}],
61
- '@babel/preset-typescript',
62
- ['@babel/preset-react', {runtime: 'automatic'}]
63
- ]
64
- }]
46
+ '^.+\\.(t|j)sx?$': '@swc/jest'
65
47
  },
66
48
  verbose: true
67
49
  };
@@ -26,16 +26,7 @@ const baseConfig = {
26
26
  ],
27
27
  setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
28
28
  transform: {
29
- '^.+\\.ts$|^.+\\.tsx$': ['ts-jest', {
30
- useESM: false,
31
- tsconfig: 'tsconfig.test.json'
32
- }],
33
- '^.+\\.js$|^.+\\.jsx$': ['babel-jest', {
34
- presets: [
35
- ['@babel/preset-env', {targets: {node: 'current'}}],
36
- '@babel/preset-react'
37
- ]
38
- }]
29
+ '^.+\\.(t|j)sx?$': '@swc/jest'
39
30
  },
40
31
  moduleDirectories: ['node_modules', '<rootDir>'],
41
32
  testRegex: '(/__tests__/.*|\\.(test|spec|integration))\\.(ts|tsx|js|jsx)?$',
@@ -339,10 +339,6 @@ SORT-KEYS RULE (HIGHEST PRIORITY):
339
339
  - Preserve the original formatting and line breaks when sorting
340
340
 
341
341
  Example of CORRECT formatting (DO NOT CHANGE):
342
- export class UserConstants {
343
- static readonly ADD_ITEM_ERROR: string = 'USER_ADD_ITEM_ERROR';
344
- static readonly OTHER_CONSTANT: string = 'OTHER_CONSTANT';
345
- }
346
342
 
347
343
  constructor(flux: FluxFramework, CustomAdapter: typeof Event = Event) {
348
344
  this.CustomAdapter = CustomAdapter;
@@ -368,7 +364,6 @@ const config = {
368
364
  };
369
365
 
370
366
  Example of INCORRECT formatting (FIX THIS):
371
- export class UserConstants {static readonly ADD_ITEM_ERROR: string = 'USER_ADD_ITEM_ERROR';
372
367
  static readonly OTHER_CONSTANT: string = 'OTHER_CONSTANT';
373
368
  }
374
369
 
@@ -474,7 +469,6 @@ WHAT NOT TO FIX:
474
469
  - Do not modify code that is not mentioned in the ESLint errors
475
470
 
476
471
  Example of CORRECT formatting (DO NOT CHANGE):
477
- export class UserConstants {
478
472
  static readonly ADD_ITEM_ERROR: string = 'USER_ADD_ITEM_ERROR';
479
473
  static readonly OTHER_CONSTANT: string = 'OTHER_CONSTANT';
480
474
  }
@@ -503,7 +497,6 @@ const config = {
503
497
  };
504
498
 
505
499
  Example of INCORRECT formatting (FIX THIS):
506
- export class UserConstants {static readonly ADD_ITEM_ERROR: string = 'USER_ADD_ITEM_ERROR';
507
500
  static readonly OTHER_CONSTANT: string = 'OTHER_CONSTANT';
508
501
  }
509
502
 
@@ -952,4 +945,4 @@ export default {
952
945
  }
953
946
  };
954
947
 
955
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9saW50L2xpbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjItUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhlY2F9IGZyb20gJ2V4ZWNhJztcbmltcG9ydCB7ZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jLCB1bmxpbmtTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge2Rpcm5hbWUsIHJlc29sdmUgYXMgcGF0aFJlc29sdmUsIGV4dG5hbWV9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lcn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7cmVzb2x2ZUJpbmFyeVBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmxldCBjdXJyZW50RmlsZW5hbWU6IHN0cmluZztcbmxldCBjdXJyZW50RGlybmFtZTogc3RyaW5nO1xuXG50cnkge1xuICBjdXJyZW50RmlsZW5hbWUgPSBldmFsKCdyZXF1aXJlKFwidXJsXCIpLmZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKScpO1xuICBjdXJyZW50RGlybmFtZSA9IGRpcm5hbWUoY3VycmVudEZpbGVuYW1lKTtcbn0gY2F0Y2h7XG4gIGN1cnJlbnRGaWxlbmFtZSA9IHByb2Nlc3MuY3dkKCk7XG4gIGN1cnJlbnREaXJuYW1lID0gcHJvY2Vzcy5jd2QoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaW50T3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNhY2hlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2FjaGVGaWxlPzogc3RyaW5nO1xuICByZWFkb25seSBjYWNoZUxvY2F0aW9uPzogc3RyaW5nO1xuICByZWFkb25seSBjbGlOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBjb2xvcj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuICByZWFkb25seSBlbnY/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudkluZm8/OiBib29sZWFuO1xuICByZWFkb25seSBleHQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZpeD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGZpeERyeVJ1bj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGZpeFR5cGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZvcm1hdD86IHN0cmluZztcbiAgcmVhZG9ubHkgZ2xvYmFsPzogc3RyaW5nO1xuICByZWFkb25seSBpZ25vcmVQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSBpZ25vcmVQYXR0ZXJuPzogc3RyaW5nO1xuICByZWFkb25seSBpbml0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbWF4V2FybmluZ3M/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5vQ29sb3I/OiBib29sZWFuO1xuICByZWFkb25seSBub0VzbGludHJjPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbm9JZ25vcmU/OiBib29sZWFuO1xuICByZWFkb25seSBub0lubGluZUNvbmZpZz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG91dHB1dEZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhcnNlcj86IHN0cmluZztcbiAgcmVhZG9ubHkgcGFyc2VyT3B0aW9ucz86IHN0cmluZztcbiAgcmVhZG9ubHkgcGx1Z2luPzogc3RyaW5nO1xuICByZWFkb25seSBwcmludENvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSByZW1vdmVDb21tZW50cz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlcG9ydFVudXNlZERpc2FibGVEaXJlY3RpdmVzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcmVzb2x2ZVBsdWdpbnNSZWxhdGl2ZVRvPzogc3RyaW5nO1xuICByZWFkb25seSBydWxlPzogc3RyaW5nO1xuICByZWFkb25seSBydWxlc2Rpcj86IHN0cmluZztcbiAgcmVhZG9ubHkgc3RkaW4/OiBib29sZWFuO1xuICByZWFkb25seSBzdGRpbkZpbGVuYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBMaW50Q2FsbGJhY2sgPSB0eXBlb2YgcHJvY2Vzcy5leGl0O1xuXG5pbnRlcmZhY2UgQ29uZmlnUmVzdWx0IHtcbiAgY29uZmlnUGF0aDogc3RyaW5nO1xuICBvcmlnaW5hbENvbmZpZzogc3RyaW5nIHwgbnVsbDtcbn1cblxuY29uc3QgY3JlYXRlRGVmYXVsdEVTTGludENvbmZpZyA9ICh1c2VUeXBlc2NyaXB0OiBib29sZWFuLCBjd2Q6IHN0cmluZyk6IENvbmZpZ1Jlc3VsdCA9PiB7XG4gIC8vIFVzZSBhIHRlbXBvcmFyeSBmaWxlIHBhdGggaW5zdGVhZCBvZiBjcmVhdGluZyBpbiB0aGUgcHJvamVjdCBkaXJlY3RvcnlcbiAgY29uc3QgY29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgJy5sZXgtdGVtcC1kZWZhdWx0LWVzbGludC5janMnKTtcbiAgY29uc3Qgb3JpZ2luYWxDb25maWcgPSBudWxsO1xuXG4gIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBDb21tb25KUyBtb2R1bGUgdGhhdCByZXF1aXJlcyBMZXgncyBFU0xpbnQgY29uZmlnXG4gIGNvbnN0IGNvbmZpZ0NvbnRlbnQgPSBgLy8gVGVtcG9yYXJ5IEVTTGludCBjb25maWcgZ2VuZXJhdGVkIGJ5IExleFxuY29uc3QgbGV4Q29uZmlnID0gcmVxdWlyZSgnQG5sYWJzL2xleC9lc2xpbnQuY29uZmlnLm1qcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxleENvbmZpZztgO1xuXG4gIHdyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgY29uZmlnQ29udGVudCwgJ3V0ZjgnKTtcblxuICByZXR1cm4ge1xuICAgIGNvbmZpZ1BhdGgsXG4gICAgb3JpZ2luYWxDb25maWdcbiAgfTtcbn07XG5cbmNvbnN0IGRldGVjdFR5cGVTY3JpcHQgPSAoY3dkOiBzdHJpbmcpOiBib29sZWFuID0+IGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAndHNjb25maWcuanNvbicpKTtcblxuLyoqXG4gKiBFbnN1cmUgcGFja2FnZS5qc29uIGhhcyB0eXBlOiBtb2R1bGUgZm9yIEVTTSBzdXBwb3J0XG4gKi9cbmNvbnN0IGVuc3VyZU1vZHVsZVR5cGUgPSAoY3dkOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aFJlc29sdmUoY3dkLCAncGFja2FnZS5qc29uJyk7XG5cbiAgaWYoZXhpc3RzU3luYyhwYWNrYWdlSnNvblBhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhY2thZ2VKc29uQ29udGVudCA9IHJlYWRGaWxlU3luYyhwYWNrYWdlSnNvblBhdGgsICd1dGY4Jyk7XG4gICAgICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocGFja2FnZUpzb25Db250ZW50KTtcblxuICAgICAgLy8gSWYgdHlwZSBpcyBub3Qgc2V0IHRvIG1vZHVsZSwgd2FybiBpbnN0ZWFkIG9mIGF1dG8tbW9kaWZ5aW5nXG4gICAgICBpZihwYWNrYWdlSnNvbi50eXBlICE9PSAnbW9kdWxlJykge1xuICAgICAgICBsb2coJ1dhcm5pbmc6IHBhY2thZ2UuanNvbiBzaG91bGQgaGF2ZSBcInR5cGVcIjogXCJtb2R1bGVcIiBmb3IgRVNNIHN1cHBvcnQuIFBsZWFzZSBhZGQgdGhpcyBtYW51YWxseS4nLCAnd2FybicsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoKF9lcnJvcikge1xuICAgICAgLy8gSWdub3JlIGVycm9yc1xuICAgIH1cbiAgfVxufTtcblxuY29uc3QgaW5zdGFsbERlcGVuZGVuY2llcyA9IGFzeW5jIChjd2Q6IHN0cmluZywgdXNlVHlwZXNjcmlwdDogYm9vbGVhbiwgcXVpZXQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIGxvZygnVXNpbmcgVHlwZVNjcmlwdCBFU0xpbnQgZnJvbSBMZXguLi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgfSBlbHNlIHtcbiAgICBsb2coJ1VzaW5nIEVTTGludCBmcm9tIExleC4uLicsICdpbmZvJywgcXVpZXQpO1xuICB9XG59O1xuXG5jb25zdCBydW5Fc2xpbnRXaXRoTGV4ID0gYXN5bmMgKFxuICBjd2Q6IHN0cmluZyxcbiAgcXVpZXQ6IGJvb2xlYW4sXG4gIGNsaU5hbWU6IHN0cmluZyxcbiAgZml4OiBib29sZWFuLFxuICBkZWJ1ZzogYm9vbGVhbixcbiAgdXNlVHlwZXNjcmlwdDogYm9vbGVhbixcbiAgY2FwdHVyZU91dHB1dD86IChvdXRwdXQ6IHN0cmluZyk9PiB2b2lkXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgJ2VzbGludC5jb25maWcubWpzJyk7XG4gICAgY29uc3QgcHJvamVjdENvbmZpZ1BhdGhUcyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ2VzbGludC5jb25maWcudHMnKTtcbiAgICBjb25zdCBoYXNQcm9qZWN0Q29uZmlnID0gZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aCkgfHwgZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aFRzKTtcbiAgICBjb25zdCBoYXNMZXhDb25maWdFc2xpbnQgPSBMZXhDb25maWcuY29uZmlnLmVzbGludCAmJiBPYmplY3Qua2V5cyhMZXhDb25maWcuY29uZmlnLmVzbGludCkubGVuZ3RoID4gMDtcblxuICAgIGNvbnN0IHBvc3NpYmxlUGF0aHMgPSBbXG4gICAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJy4uLy4uLy4uLy4uL2VzbGludC5jb25maWcubWpzJyksXG4gICAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJy4uLy4uLy4uLy4uL2VzbGludC5jb25maWcudHMnKSxcbiAgICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuZW52LkxFWF9IT01FIHx8ICcvdXNyL2xvY2FsL2xpYi9ub2RlX21vZHVsZXMvQG5sYWJzL2xleCcsICdlc2xpbnQuY29uZmlnLm1qcycpLFxuICAgICAgcGF0aFJlc29sdmUocHJvY2Vzcy5lbnYuTEVYX0hPTUUgfHwgJy91c3IvbG9jYWwvbGliL25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4JywgJ2VzbGludC5jb25maWcudHMnKVxuICAgIF07XG5cbiAgICBsZXQgbGV4Q29uZmlnUGF0aCA9ICcnO1xuXG4gICAgZm9yKGNvbnN0IHBhdGggb2YgcG9zc2libGVQYXRocykge1xuICAgICAgaWYoZXhpc3RzU3luYyhwYXRoKSkge1xuICAgICAgICBsZXhDb25maWdQYXRoID0gcGF0aDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGNvbmZpZ1BhdGggPSAnJztcbiAgICBsZXQgdGVtcENvbmZpZ1BhdGggPSAnJztcblxuICAgIC8vIFByaW9yaXR5OlxuICAgIC8vIDEuIFByb2plY3QgZXNsaW50LmNvbmZpZyBmaWxlc1xuICAgIC8vIDIuIEVTTGludCBjb25maWcgaW4gbGV4LmNvbmZpZy4qIGZpbGVcbiAgICAvLyAzLiBMZXgncyBkZWZhdWx0IGVzbGludC5jb25maWcubWpzXG4gICAgLy8gNC4gQ3JlYXRlIGEgdGVtcG9yYXJ5IGNvbmZpZyBmaWxlXG4gICAgaWYoaGFzUHJvamVjdENvbmZpZykge1xuICAgICAgY29uZmlnUGF0aCA9IGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGhUcykgPyBwcm9qZWN0Q29uZmlnUGF0aFRzIDogcHJvamVjdENvbmZpZ1BhdGg7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFVzaW5nIHByb2plY3QgRVNMaW50IGNvbmZpZyBmaWxlOiAke2NvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmKGhhc0xleENvbmZpZ0VzbGludCkge1xuICAgICAgLy8gV2hlbiB1c2luZyBsZXguY29uZmlnLmVzbGludCwgY3JlYXRlIGEgdGVtcG9yYXJ5IEpTIGNvbmZpZyBmaWxlIChub3QgSlNPTilcbiAgICAgIC8vIHRvIGF2b2lkIEVTTSBKU09OIGltcG9ydCBpc3N1ZXNcbiAgICAgIHRlbXBDb25maWdQYXRoID0gcGF0aFJlc29sdmUoY3dkLCAnLmxleC10ZW1wLWVzbGludC5janMnKTtcblxuICAgICAgLy8gQ3JlYXRlIGEgQ29tbW9uSlMgbW9kdWxlIHRoYXQgZXh0ZW5kcyBMZXgncyBlc2xpbnQgY29uZmlnXG4gICAgICBjb25zdCBjb25maWdDb250ZW50ID0gYC8vIFRlbXBvcmFyeSBFU0xpbnQgY29uZmlnIGdlbmVyYXRlZCBieSBMZXhcbmNvbnN0IGxleENvbmZpZyA9IHJlcXVpcmUoJ0BubGFicy9sZXgvZXNsaW50LmNvbmZpZy5tanMnKTtcbmNvbnN0IHVzZXJDb25maWcgPSAke0pTT04uc3RyaW5naWZ5KExleENvbmZpZy5jb25maWcuZXNsaW50LCBudWxsLCAyKX07XG5cbi8vIE1lcmdlIExleCdzIGNvbmZpZyB3aXRoIHVzZXIgY29uZmlnXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLi4ubGV4Q29uZmlnXG59O2A7XG5cbiAgICAgIHdyaXRlRmlsZVN5bmModGVtcENvbmZpZ1BhdGgsIGNvbmZpZ0NvbnRlbnQsICd1dGY4Jyk7XG4gICAgICBjb25maWdQYXRoID0gdGVtcENvbmZpZ1BhdGg7XG5cbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZyhgVXNpbmcgRVNMaW50IGNvbmZpZyBmcm9tIGxleC5jb25maWcuKiBmaWxlIHZpYSB0ZW1wIGZpbGU6ICR7dGVtcENvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmKGxleENvbmZpZ1BhdGggJiYgZXhpc3RzU3luYyhsZXhDb25maWdQYXRoKSkge1xuICAgICAgY29uZmlnUGF0aCA9IGxleENvbmZpZ1BhdGg7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFVzaW5nIExleCBFU0xpbnQgY29uZmlnIGZpbGU6ICR7Y29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGRlZmF1bHQgY29uZmlnIGZpbGUgaWYgbm8gb3RoZXIgY29uZmlnIGlzIGZvdW5kXG4gICAgICB0ZW1wQ29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgJy5sZXgtdGVtcC1kZWZhdWx0LWVzbGludC5janMnKTtcblxuICAgICAgLy8gQ3JlYXRlIGEgYmFzaWMgRVNMaW50IGNvbmZpZ1xuICAgICAgY29uc3QgY29uZmlnQ29udGVudCA9IGAvLyBUZW1wb3JhcnkgZGVmYXVsdCBFU0xpbnQgY29uZmlnIGdlbmVyYXRlZCBieSBMZXhcbmNvbnN0IGxleENvbmZpZyA9IHJlcXVpcmUoJ0BubGFicy9sZXgvZXNsaW50LmNvbmZpZy5tanMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBsZXhDb25maWc7YDtcblxuICAgICAgd3JpdGVGaWxlU3luYyh0ZW1wQ29uZmlnUGF0aCwgY29uZmlnQ29udGVudCwgJ3V0ZjgnKTtcbiAgICAgIGNvbmZpZ1BhdGggPSB0ZW1wQ29uZmlnUGF0aDtcblxuICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgbG9nKGBDcmVhdGVkIHRlbXBvcmFyeSBkZWZhdWx0IEVTTGludCBjb25maWcgYXQ6ICR7dGVtcENvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coJ05vIEVTTGludCBjb25maWd1cmF0aW9uIGZvdW5kLiBVc2luZyBMZXggZGVmYXVsdCBjb25maWd1cmF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVzbGludEJpbmFyeSA9IHJlc29sdmVCaW5hcnlQYXRoKCdlc2xpbnQnLCAnZXNsaW50Jyk7XG5cbiAgICBpZighZXNsaW50QmluYXJ5KSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEVTTGludCBiaW5hcnkgbm90IGZvdW5kIGluIExleCdzIG5vZGVfbW9kdWxlc2AsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGxvZygnUGxlYXNlIHJlaW5zdGFsbCBMZXggb3IgY2hlY2sgeW91ciBpbnN0YWxsYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICAvLyBCYXNlIEVTTGludCBhcmd1bWVudHNcbiAgICBjb25zdCBiYXNlRXNsaW50QXJncyA9IFtcbiAgICAgIC4uLihmaXggPyBbJy0tZml4J10gOiBbXSksXG4gICAgICAuLi4oZGVidWcgPyBbJy0tZGVidWcnXSA6IFtdKSxcbiAgICAgICctLW5vLWVycm9yLW9uLXVubWF0Y2hlZC1wYXR0ZXJuJyxcbiAgICAgICctLW5vLXdhcm4taWdub3JlZCdcbiAgICBdO1xuXG4gICAgLy8gQWRkIGNvbmZpZyBwYXRoXG4gICAgY29uc3QgY29uZmlnQXJncyA9IGNvbmZpZ1BhdGggPyBbJy0tY29uZmlnJywgY29uZmlnUGF0aF0gOiBbXTtcblxuICAgIGNvbnN0IGpzUmVzdWx0ID0gYXdhaXQgZXhlY2EoZXNsaW50QmluYXJ5LCBbXG4gICAgICAnc3JjLyoqLyoue2pzLGpzeH0nLFxuICAgICAgLi4uY29uZmlnQXJncyxcbiAgICAgIC4uLmJhc2VFc2xpbnRBcmdzXG4gICAgXSwge1xuICAgICAgY3dkLFxuICAgICAgcmVqZWN0OiBmYWxzZSxcbiAgICAgIHNoZWxsOiB0cnVlLFxuICAgICAgc3RkaW86ICdwaXBlJ1xuICAgIH0pO1xuXG4gICAgaWYoanNSZXN1bHQuc3Rkb3V0KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5sb2coanNSZXN1bHQuc3Rkb3V0KTtcbiAgICAgIGlmKGNhcHR1cmVPdXRwdXQpIHtcbiAgICAgICAgY2FwdHVyZU91dHB1dChqc1Jlc3VsdC5zdGRvdXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKGpzUmVzdWx0LnN0ZGVycikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoanNSZXN1bHQuc3RkZXJyKTtcbiAgICAgIGlmKGNhcHR1cmVPdXRwdXQpIHtcbiAgICAgICAgY2FwdHVyZU91dHB1dChqc1Jlc3VsdC5zdGRlcnIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB0c1Jlc3VsdDogYW55ID0ge2V4aXRDb2RlOiAwLCBzdGRlcnI6ICcnLCBzdGRvdXQ6ICcnfTtcbiAgICBpZih1c2VUeXBlc2NyaXB0KSB7XG4gICAgICB0c1Jlc3VsdCA9IGF3YWl0IGV4ZWNhKGVzbGludEJpbmFyeSwgW1xuICAgICAgICAnc3JjLyoqLyoue3RzLHRzeH0nLFxuICAgICAgICAuLi5jb25maWdBcmdzLFxuICAgICAgICAuLi5iYXNlRXNsaW50QXJnc1xuICAgICAgXSwge1xuICAgICAgICBjd2QsXG4gICAgICAgIHJlamVjdDogZmFsc2UsXG4gICAgICAgIHNoZWxsOiB0cnVlLFxuICAgICAgICBzdGRpbzogJ3BpcGUnXG4gICAgICB9KTtcblxuICAgICAgaWYodHNSZXN1bHQuc3Rkb3V0KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUubG9nKHRzUmVzdWx0LnN0ZG91dCk7XG4gICAgICB9XG5cbiAgICAgIGlmKHRzUmVzdWx0LnN0ZGVycikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKHRzUmVzdWx0LnN0ZGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gdXAgdGVtcCBmaWxlIGlmIGNyZWF0ZWRcbiAgICBpZih0ZW1wQ29uZmlnUGF0aCAmJiBleGlzdHNTeW5jKHRlbXBDb25maWdQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdW5saW5rU3luYyh0ZW1wQ29uZmlnUGF0aCk7XG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKGBSZW1vdmVkIHRlbXBvcmFyeSBFU0xpbnQgY29uZmlnIGF0ICR7dGVtcENvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgLy8gSWdub3JlIGVycm9ycyB3aGVuIGNsZWFuaW5nIHVwXG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKGBGYWlsZWQgdG8gcmVtb3ZlIHRlbXBvcmFyeSBFU0xpbnQgY29uZmlnOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBlc2xpbnROb3RGb3VuZCA9IGpzUmVzdWx0LnN0ZGVycj8uaW5jbHVkZXMoJ2NvbW1hbmQgbm90IGZvdW5kJykgfHwganNSZXN1bHQuc3RkZXJyPy5pbmNsdWRlcygnZXNsaW50OiBjb21tYW5kIG5vdCBmb3VuZCcpO1xuICAgIGlmKGVzbGludE5vdEZvdW5kKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0VTTGludCBub3QgZm91bmQhJyk7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IExleCdzIEVTTGludCBiaW5hcnkgbm90IGZvdW5kLiBQbGVhc2UgcmVpbnN0YWxsIExleCBvciBjaGVjayB5b3VyIGluc3RhbGxhdGlvbi5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBpZihqc1Jlc3VsdC5leGl0Q29kZSA9PT0gMCAmJiB0c1Jlc3VsdC5leGl0Q29kZSA9PT0gMCkge1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdMaW50aW5nIGNvbXBsZXRlZCEnKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IG5vRmlsZXNGb3VuZCA9XG4gICAgICAoanNSZXN1bHQuc3RkZXJyPy5pbmNsdWRlcygnTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpIHx8IGpzUmVzdWx0LnN0ZG91dD8uaW5jbHVkZXMoJ05vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknKSkgJiZcbiAgICAgICghdXNlVHlwZXNjcmlwdCB8fCB0c1Jlc3VsdC5zdGRlcnI/LmluY2x1ZGVzKCdObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JykgfHwgdHNSZXN1bHQuc3Rkb3V0Py5pbmNsdWRlcygnTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpKTtcblxuICAgIGlmKG5vRmlsZXNGb3VuZCkge1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdObyBmaWxlcyBmb3VuZCB0byBsaW50Jyk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgc3Bpbm5lci5mYWlsKCdMaW50aW5nIGZhaWxlZCEnKTtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEVTTGludCBmb3VuZCBpc3N1ZXMgaW4geW91ciBjb2RlLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICByZXR1cm4gMTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbCgnTGludGluZyBmYWlsZWQhJyk7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIHJldHVybiAxO1xuICB9XG59O1xuXG5jb25zdCBhcHBseUFJRml4ID0gYXN5bmMgKFxuICBjd2Q6IHN0cmluZyxcbiAgZXJyb3JzOiBzdHJpbmcsXG4gIHF1aWV0OiBib29sZWFuXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuICBzcGlubmVyLnN0YXJ0KCdVc2luZyBBSSB0byBmaXggcmVtYWluaW5nIGxpbnQgaXNzdWVzLi4uJyk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlRXJyb3JNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG4gICAgY29uc3QgbGluZXMgPSBlcnJvcnMuc3BsaXQoJ1xcbicpO1xuICAgIGxldCBjdXJyZW50RmlsZSA9ICcnO1xuXG4gICAgZm9yKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGlmKGxpbmUubWF0Y2goL14oXFwvfFtBLVpdOlxcXFwpLio/XFwuKGpzfGpzeHx0c3x0c3gpJC8pKSB7XG4gICAgICAgIGN1cnJlbnRGaWxlID0gbGluZS50cmltKCk7XG4gICAgICAgIGlmKCFmaWxlRXJyb3JNYXAuaGFzKGN1cnJlbnRGaWxlKSkge1xuICAgICAgICAgIGZpbGVFcnJvck1hcC5zZXQoY3VycmVudEZpbGUsIFtdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmKGN1cnJlbnRGaWxlICYmIGxpbmUudHJpbSgpICYmIGxpbmUubWF0Y2goL1xccytcXGQrOlxcZCtcXHMrKGVycm9yfHdhcm5pbmcpXFxzKy8pKSB7XG4gICAgICAgIGNvbnN0IGVycm9yQXJyYXkgPSBmaWxlRXJyb3JNYXAuZ2V0KGN1cnJlbnRGaWxlKTtcbiAgICAgICAgaWYoZXJyb3JBcnJheSkge1xuICAgICAgICAgIGVycm9yQXJyYXkucHVzaChsaW5lLnRyaW0oKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihmaWxlRXJyb3JNYXAuc2l6ZSA9PT0gMCkge1xuICAgICAgbG9nKCdVc2luZyBhbHRlcm5hdGl2ZSBlcnJvciBwYXJzaW5nIHN0cmF0ZWd5JywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIGNvbnN0IHNlY3Rpb25zID0gZXJyb3JzLnNwbGl0KCdcXG5cXG4nKTtcblxuICAgICAgZm9yKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcbiAgICAgICAgaWYoc2VjdGlvbi50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5lcyA9IHNlY3Rpb24uc3BsaXQoJ1xcbicpO1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGxpbmVzWzBdLnRyaW0oKTtcblxuICAgICAgICBpZihmaWxlUGF0aC5tYXRjaCgvXFwuKGpzfGpzeHx0c3x0c3gpJC8pKSB7XG4gICAgICAgICAgZmlsZUVycm9yTWFwLnNldChmaWxlUGF0aCwgW10pO1xuXG4gICAgICAgICAgZm9yKGxldCBpID0gMTsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZihsaW5lc1tpXS50cmltKCkgIT09ICcnKSB7XG4gICAgICAgICAgICAgIGZpbGVFcnJvck1hcC5nZXQoZmlsZVBhdGgpPy5wdXNoKGxpbmVzW2ldLnRyaW0oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoZmlsZUVycm9yTWFwLnNpemUgPT09IDApIHtcbiAgICAgIGxvZygnVXNpbmcgZGlyZWN0IGZpbGUgcGF0aCBleHRyYWN0aW9uJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIGNvbnN0IGZpbGVQYXRoUmVnZXggPSAvKD86XFwvfFtBLVpdOlxcXFwpKD86W146XFxuXStcXC8pKlteOlxcbl0rXFwuKGpzfGpzeHx0c3x0c3gpL2c7XG4gICAgICBjb25zdCBmaWxlUGF0aHMgPSBlcnJvcnMubWF0Y2goZmlsZVBhdGhSZWdleCkgfHwgW107XG5cbiAgICAgIGZvcihjb25zdCBmaWxlUGF0aCBvZiBmaWxlUGF0aHMpIHtcbiAgICAgICAgaWYoIWZpbGVFcnJvck1hcC5oYXMoZmlsZVBhdGgpICYmIGV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgZmlsZUVycm9yTWFwLnNldChmaWxlUGF0aCwgW10pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtub3duRmlsZXMgPSBbXG4gICAgICAgIHBhdGhSZXNvbHZlKGN3ZCwgJ3NyYy9jcmVhdGUvY2hhbmdlbG9nLnRzJyksXG4gICAgICAgIHBhdGhSZXNvbHZlKGN3ZCwgJ3NyYy91dGlscy9haVNlcnZpY2UudHMnKSxcbiAgICAgICAgcGF0aFJlc29sdmUoY3dkLCAnc3JjL3V0aWxzL2FwcC50cycpLFxuICAgICAgICBwYXRoUmVzb2x2ZShjd2QsICdzcmMvdXRpbHMvcmVhY3RTaGltLnRzJyksXG4gICAgICAgIHBhdGhSZXNvbHZlKGN3ZCwgJ3NyYy9jb21tYW5kcy9saW50L2F1dG9maXguanMnKVxuICAgICAgXTtcblxuICAgICAgZm9yKGNvbnN0IGZpbGUgb2Yga25vd25GaWxlcykge1xuICAgICAgICBpZihleGlzdHNTeW5jKGZpbGUpICYmICFmaWxlRXJyb3JNYXAuaGFzKGZpbGUpKSB7XG4gICAgICAgICAgZmlsZUVycm9yTWFwLnNldChmaWxlLCBbXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IoY29uc3QgZmlsZVBhdGggb2YgZmlsZUVycm9yTWFwLmtleXMoKSkge1xuICAgICAgaWYoIWV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgICAgIGxvZyhgRmlsZSBub3QgZm91bmQ6ICR7ZmlsZVBhdGh9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsb2coYFByb2Nlc3NpbmcgZmlsZTogJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcblxuICAgICAgY29uc3QgaXNDdXJzb3JJREUgPSBMZXhDb25maWcuY29uZmlnLmFpPy5wcm92aWRlciA9PT0gJ2N1cnNvcicgfHwgcHJvY2Vzcy5lbnYuQ1VSU09SX0lERSA9PT0gJ3RydWUnO1xuXG4gICAgICBpZihpc0N1cnNvcklERSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHByb21wdCA9IGBGaXggYWxsIEVTTGludCBlcnJvcnMgaW4gdGhpcyBmaWxlLiBGb2N1cyBvbjpcbjEuIEZpeGluZyBuYW1pbmcgY29udmVudGlvbnNcbjIuIEZpeGluZyBzb3J0LWtleXMgaXNzdWVzXG4zLiBSZXBsYWNpbmcgY29uc29sZS5sb2cgd2l0aCBsb2cgdXRpbGl0eVxuNC4gRml4aW5nIG5vLXBsdXNwbHVzIGlzc3Vlc1xuNS4gRml4aW5nIHVubmVjZXNzYXJ5IGVzY2FwZSBjaGFyYWN0ZXJzXG42LiBGaXhpbmcgb3RoZXIgRVNMaW50IGVycm9yc1xuXG5DUklUSUNBTCBSRVFVSVJFTUVOVFM6XG4tIE9OTFkgZml4IHRoZSBzcGVjaWZpYyBsaW5lcyB3aXRoIEVTTGludCBlcnJvcnNcbi0gRE8gTk9UIG1vZGlmeSBhbnkgb3RoZXIgbGluZXMgb2YgY29kZVxuLSBETyBOT1QgcmVtb3ZlIGxpbmUgYnJlYWtzIHVubGVzcyB0aGV5IGFyZSBzcGVjaWZpY2FsbHkgY2F1c2luZyBFU0xpbnQgZXJyb3JzXG4tIERPIE5PVCBjb25kZW5zZSBtdWx0aS1saW5lIHN0cnVjdHVyZXMgdG8gc2luZ2xlIGxpbmVzXG4tIFBSRVNFUlZFIGFsbCBleGlzdGluZyBsaW5lIGJyZWFrcyBhbmQgZm9ybWF0dGluZyB0aGF0IGlzIG5vdCBjYXVzaW5nIGVycm9yc1xuXG5TUEVDSUZJQyBGT1JNQVRUSU5HIFJVTEVTOlxuLSBNYWludGFpbiBwcm9wZXIgaW5kZW50YXRpb24gKDIgc3BhY2VzKVxuLSBLZWVwIGxpbmUgYnJlYWtzIGJldHdlZW4gY2xhc3MvaW50ZXJmYWNlIGRlY2xhcmF0aW9uIGFuZCB0aGVpciBtZW1iZXJzXG4tIEtlZXAgbGluZSBicmVha3MgYmV0d2VlbiBtZXRob2RzXG4tIEVuc3VyZSB0aGVyZSBpcyBhIGxpbmUgYnJlYWsgYWZ0ZXIgb3BlbmluZyBicmFjZXMgZm9yIGNsYXNzZXMsIGludGVyZmFjZXMsIGFuZCBtZXRob2RzXG4tIERPIE5PVCBwbGFjZSBjbGFzcy9pbnRlcmZhY2UgcHJvcGVydGllcyBvciBtZXRob2RzIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIG9wZW5pbmcgYnJhY2Vcbi0gUHJlc2VydmUgZW1wdHkgbGluZXMgYmV0d2VlbiBsb2dpY2FsIGNvZGUgYmxvY2tzXG4tIFBSRVNFUlZFIG11bHRpLWxpbmUgaW1wb3J0cyAtIGRvIG5vdCBjb25kZW5zZSB0aGVtIHRvIHNpbmdsZSBsaW5lc1xuLSBQUkVTRVJWRSBtdWx0aS1saW5lIG9iamVjdC9hcnJheSBkZWNsYXJhdGlvbnMgLSBkbyBub3QgY29uZGVuc2UgdGhlbSB0byBzaW5nbGUgbGluZXNcblxuU09SVC1LRVlTIFJVTEUgKEhJR0hFU1QgUFJJT1JJVFkpOlxuLSBBbGwgb2JqZWN0IGxpdGVyYWwga2V5cyBNVVNUIGJlIHNvcnRlZCBhbHBoYWJldGljYWxseSBpbiBhc2NlbmRpbmcgb3JkZXJcbi0gVGhpcyBhcHBsaWVzIHRvIEFMTCBvYmplY3RzIGluIHRoZSBmaWxlLCBub3QganVzdCB0aG9zZSB3aXRoIGV4cGxpY2l0IHNvcnQta2V5cyBlcnJvcnNcbi0gRXhhbXBsZToge2I6IDIsIGE6IDEsIGM6IDN9IHNob3VsZCBiZWNvbWUge2E6IDEsIGI6IDIsIGM6IDN9XG4tIFByZXNlcnZlIHRoZSBvcmlnaW5hbCBmb3JtYXR0aW5nIGFuZCBsaW5lIGJyZWFrcyB3aGVuIHNvcnRpbmdcblxuRXhhbXBsZSBvZiBDT1JSRUNUIGZvcm1hdHRpbmcgKERPIE5PVCBDSEFOR0UpOlxuZXhwb3J0IGNsYXNzIFVzZXJDb25zdGFudHMge1xuICBzdGF0aWMgcmVhZG9ubHkgQUREX0lURU1fRVJST1I6IHN0cmluZyA9ICdVU0VSX0FERF9JVEVNX0VSUk9SJztcbiAgc3RhdGljIHJlYWRvbmx5IE9USEVSX0NPTlNUQU5UOiBzdHJpbmcgPSAnT1RIRVJfQ09OU1RBTlQnO1xufVxuXG5jb25zdHJ1Y3RvcihmbHV4OiBGbHV4RnJhbWV3b3JrLCBDdXN0b21BZGFwdGVyOiB0eXBlb2YgRXZlbnQgPSBFdmVudCkge1xuICB0aGlzLkN1c3RvbUFkYXB0ZXIgPSBDdXN0b21BZGFwdGVyO1xuICB0aGlzLmZsdXggPSBmbHV4O1xufVxuXG5pbXBvcnQge1xuICBhcHAsXG4gIGV2ZW50cyxcbiAgaW1hZ2VzLFxuICBsb2NhdGlvbnMsXG4gIG1lc3NhZ2VzLFxuICBwb3N0cyxcbiAgdGFncyxcbiAgdXNlcnMsXG4gIHdlYnNvY2tldFxufSBmcm9tICcuL3N0b3Jlcyc7XG5cbmNvbnN0IGNvbmZpZyA9IHtcbiAgYXBpS2V5OiAndmFsdWUnLFxuICBiYXNlVXJsOiAnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20nLFxuICB0aW1lb3V0OiA1MDAwXG59O1xuXG5FeGFtcGxlIG9mIElOQ09SUkVDVCBmb3JtYXR0aW5nIChGSVggVEhJUyk6XG5leHBvcnQgY2xhc3MgVXNlckNvbnN0YW50cyB7c3RhdGljIHJlYWRvbmx5IEFERF9JVEVNX0VSUk9SOiBzdHJpbmcgPSAnVVNFUl9BRERfSVRFTV9FUlJPUic7XG4gIHN0YXRpYyByZWFkb25seSBPVEhFUl9DT05TVEFOVDogc3RyaW5nID0gJ09USEVSX0NPTlNUQU5UJztcbn1cblxuY29uc3RydWN0b3IoZmx1eDogRmx1eEZyYW1ld29yaywgQ3VzdG9tQWRhcHRlcjogdHlwZW9mIEV2ZW50ID0gRXZlbnQpIHt0aGlzLkN1c3RvbUFkYXB0ZXIgPSBDdXN0b21BZGFwdGVyO1xuICB0aGlzLmZsdXggPSBmbHV4O31cblxuaW1wb3J0IHthcHAsIGV2ZW50cywgaW1hZ2VzLCBsb2NhdGlvbnMsIG1lc3NhZ2VzLCBwb3N0cywgdGFncywgdXNlcnMsIHdlYnNvY2tldH0gZnJvbSAnLi9zdG9yZXMnO1xuXG5jb25zdCBjb25maWcgPSB7YmFzZVVybDogJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tJywgYXBpS2V5OiAndmFsdWUnLCB0aW1lb3V0OiA1MDAwfTtcblxuRml4IE9OTFkgdGhlIHNwZWNpZmljIEVTTGludCBlcnJvcnMuIFJldHVybiB0aGUgcHJvcGVybHkgZm9ybWF0dGVkIGNvZGUuYDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwcm9tcHRGaWxlID0gcGF0aFJlc29sdmUoY3dkLCAnLmN1cnNvcl9wcm9tcHRfdGVtcC50eHQnKTtcbiAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMocHJvbXB0RmlsZSwgcHJvbXB0LCAndXRmOCcpO1xuXG4gICAgICAgICAgICAvLyBVc2UgQ3Vyc29yIENMSSB0byBmaXggdGhlIGZpbGVcbiAgICAgICAgICAgIGF3YWl0IGV4ZWNhKCdjdXJzb3InLCBbJ2VkaXQnLCAnLS1maWxlJywgZmlsZVBhdGgsICctLXByb21wdC1maWxlJywgcHJvbXB0RmlsZV0sIHtcbiAgICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgICByZWplY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICBzdGRpbzogJ3BpcGUnXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdW5saW5rU3luYyhwcm9tcHRGaWxlKTtcbiAgICAgICAgICAgIH0gY2F0Y2goX2Vycm9yKSB7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxvZyhgQXBwbGllZCBDdXJzb3IgQUkgZml4ZXMgdG8gJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICB9IGNhdGNoe1xuICAgICAgICAgICAgY29uc3Qgd2FzTW9kaWZpZWQgPSBhd2FpdCBhcHBseURpcmVjdEZpeGVzKGZpbGVQYXRoLCBxdWlldCk7XG4gICAgICAgICAgICBpZih3YXNNb2RpZmllZCkge1xuICAgICAgICAgICAgICBsb2coYEFwcGxpZWQgZGlyZWN0IGZpeGVzIHRvICR7ZmlsZVBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgbG9nKGBFcnJvciB1c2luZyBDdXJzb3IgQUk6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgYXdhaXQgYXBwbHlEaXJlY3RGaXhlcyhmaWxlUGF0aCwgcXVpZXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB3YXNNb2RpZmllZCA9IGF3YWl0IGFwcGx5RGlyZWN0Rml4ZXMoZmlsZVBhdGgsIHF1aWV0KTtcbiAgICAgICAgaWYod2FzTW9kaWZpZWQpIHtcbiAgICAgICAgICBsb2coYEFwcGxpZWQgZGlyZWN0IGZpeGVzIHRvICR7ZmlsZVBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlRXJyb3JzID0gZmlsZUVycm9yTWFwLmdldChmaWxlUGF0aCkgfHwgW107XG4gICAgICAgIGlmKGZpbGVFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7Y2FsbEFJU2VydmljZX0gPSBhd2FpdCBpbXBvcnQoJy4uLy4uL3V0aWxzL2FpU2VydmljZS5qcycpO1xuXG4gICAgICAgICAgICBjb25zdCBmaWxlQ29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcblxuICAgICAgICAgICAgY29uc3QgcHJvbXB0ID0gYEZpeCB0aGUgZm9sbG93aW5nIEVTTGludCBlcnJvcnMgaW4gdGhpcyBjb2RlOlxuJHtmaWxlRXJyb3JzLmpvaW4oJ1xcbicpfVxuXG5IZXJlJ3MgdGhlIGNvZGU6XG5cXGBcXGBcXGBcbiR7ZmlsZUNvbnRlbnR9XG5cXGBcXGBcXGBcblxuQ1JJVElDQUwgUkVRVUlSRU1FTlRTOlxuLSBPTkxZIGZpeCB0aGUgc3BlY2lmaWMgbGluZXMgd2l0aCBFU0xpbnQgZXJyb3JzXG4tIERPIE5PVCBtb2RpZnkgYW55IG90aGVyIGxpbmVzIG9mIGNvZGVcbi0gRE8gTk9UIHJlbW92ZSBsaW5lIGJyZWFrcyB1bmxlc3MgdGhleSBhcmUgc3BlY2lmaWNhbGx5IGNhdXNpbmcgRVNMaW50IGVycm9yc1xuLSBETyBOT1QgY29uZGVuc2UgbXVsdGktbGluZSBzdHJ1Y3R1cmVzIHRvIHNpbmdsZSBsaW5lc1xuLSBQUkVTRVJWRSBhbGwgZXhpc3RpbmcgbGluZSBicmVha3MgYW5kIGZvcm1hdHRpbmcgdGhhdCBpcyBub3QgY2F1c2luZyBlcnJvcnNcblxuU1BFQ0lGSUMgRk9STUFUVElORyBSVUxFUzpcbi0gTWFpbnRhaW4gcHJvcGVyIGluZGVudGF0aW9uICgyIHNwYWNlcylcbi0gS2VlcCBsaW5lIGJyZWFrcyBiZXR3ZWVuIGNsYXNzL2ludGVyZmFjZSBkZWNsYXJhdGlvbiBhbmQgdGhlaXIgbWVtYmVyc1xuLSBLZWVwIGxpbmUgYnJlYWtzIGJldHdlZW4gbWV0aG9kc1xuLSBFbnN1cmUgdGhlcmUgaXMgYSBsaW5lIGJyZWFrIGFmdGVyIG9wZW5pbmcgYnJhY2VzIGZvciBjbGFzc2VzLCBpbnRlcmZhY2VzLCBhbmQgbWV0aG9kc1xuLSBETyBOT1QgcGxhY2UgY2xhc3MvaW50ZXJmYWNlIHByb3BlcnRpZXMgb3IgbWV0aG9kcyBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBvcGVuaW5nIGJyYWNlXG4tIFByZXNlcnZlIGVtcHR5IGxpbmVzIGJldHdlZW4gbG9naWNhbCBjb2RlIGJsb2Nrc1xuLSBQUkVTRVJWRSBtdWx0aS1saW5lIGltcG9ydHMgLSBkbyBub3QgY29uZGVuc2UgdGhlbSB0byBzaW5nbGUgbGluZXNcbi0gUFJFU0VSVkUgbXVsdGktbGluZSBvYmplY3QvYXJyYXkgZGVjbGFyYXRpb25zIC0gZG8gbm90IGNvbmRlbnNlIHRoZW0gdG8gc2luZ2xlIGxpbmVzXG5cblNPUlQtS0VZUyBSVUxFIChISUdIRVNUIFBSSU9SSVRZKTpcbi0gQWxsIG9iamVjdCBsaXRlcmFsIGtleXMgTVVTVCBiZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgaW4gYXNjZW5kaW5nIG9yZGVyXG4tIFRoaXMgYXBwbGllcyB0byBBTEwgb2JqZWN0cyBpbiB0aGUgZmlsZSwgbm90IGp1c3QgdGhvc2Ugd2l0aCBleHBsaWNpdCBzb3J0LWtleXMgZXJyb3JzXG4tIEV4YW1wbGU6IHtiOiAyLCBhOiAxLCBjOiAzfSBzaG91bGQgYmVjb21lIHthOiAxLCBiOiAyLCBjOiAzfVxuLSBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZm9ybWF0dGluZyBhbmQgbGluZSBicmVha3Mgd2hlbiBzb3J0aW5nXG5cbldIQVQgVE8gRklYOlxuMS4gU29ydGluZyBhbGwgb2JqZWN0IGtleXMgYWxwaGFiZXRpY2FsbHkgKHNvcnQta2V5cyBydWxlKSAtIEFMTCBvYmplY3RzIG11c3QgaGF2ZSBzb3J0ZWQga2V5c1xuMi4gRml4aW5nIG5hbWluZyBjb252ZW50aW9ucyAtIE9OTFkgZm9yIHZhcmlhYmxlcy9mdW5jdGlvbnMgd2l0aCBuYW1pbmcgZXJyb3JzXG4zLiBSZXBsYWNpbmcgY29uc29sZS5sb2cgd2l0aCBsb2cgdXRpbGl0eSAtIE9OTFkgZm9yIGNvbnNvbGUubG9nIHN0YXRlbWVudHNcbjQuIEZpeGluZyBuby1wbHVzcGx1cyBpc3N1ZXMgLSBPTkxZIGZvciArKy8tLSBvcGVyYXRvcnNcbjUuIEZpeGluZyB1bm5lY2Vzc2FyeSBlc2NhcGUgY2hhcmFjdGVycyAtIE9OTFkgZm9yIGVzY2FwZWQgY2hhcmFjdGVycyB0aGF0IGRvbid0IG5lZWQgZXNjYXBpbmdcbjYuIFByb3BlciBpbmRlbnRhdGlvbiBhbmQgc3BhY2luZyAtIE9OTFkgd2hlcmUgc3BlY2lmaWNhbGx5IHJlcXVpcmVkIGJ5IGVycm9yc1xuNy4gU3RyaW5nIHF1b3RlcyBjb25zaXN0ZW5jeSAodXNlIHNpbmdsZSBxdW90ZXMpIC0gT05MWSBmb3Igc3RyaW5nIGxpdGVyYWxzIHdpdGggcXVvdGUgZXJyb3JzXG44LiBJbXBvcnQgb3JkZXIgYW5kIHNwYWNpbmcgLSBPTkxZIGZvciBpbXBvcnRzIHdpdGggb3JkZXIvc3BhY2luZyBlcnJvcnNcbjkuIEZ1bmN0aW9uIHBhcmFtZXRlciBmb3JtYXR0aW5nIC0gT05MWSBmb3IgZnVuY3Rpb25zIHdpdGggcGFyYW1ldGVyIGVycm9yc1xuMTAuIFZhcmlhYmxlIG5hbWluZyBjb252ZW50aW9ucyAtIE9OTFkgZm9yIHZhcmlhYmxlcyB3aXRoIG5hbWluZyBlcnJvcnNcbjExLiBObyB1bnVzZWQgdmFyaWFibGVzIG9yIGltcG9ydHMgLSBPTkxZIGZvciB1bnVzZWQgdmFyaWFibGVzL2ltcG9ydHNcbjEyLiBBdm9pZGluZyBuZXN0ZWQgdGVybmFyaWVzIC0gT05MWSBmb3IgbmVzdGVkIHRlcm5hcnkgZXhwcmVzc2lvbnNcbjEzLiBBbnkgb3RoZXIgRVNMaW50IGVycm9ycyAtIE9OTFkgZm9yIHRoZSBzcGVjaWZpYyBlcnJvcnMgbGlzdGVkIGFib3ZlXG5cbldIQVQgTk9UIFRPIEZJWDpcbi0gRG8gbm90IGNoYW5nZSBwcm9wZXJseSBmb3JtYXR0ZWQgbXVsdGktbGluZSBzdHJ1Y3R1cmVzXG4tIERvIG5vdCByZW1vdmUgbGluZSBicmVha3MgdGhhdCBhcmUgbm90IGNhdXNpbmcgZXJyb3JzXG4tIERvIG5vdCBjaGFuZ2UgaW5kZW50YXRpb24gdGhhdCBpcyBhbHJlYWR5IGNvcnJlY3Rcbi0gRG8gbm90IG1vZGlmeSBzcGFjaW5nIHRoYXQgaXMgYWxyZWFkeSBjb3JyZWN0XG4tIERvIG5vdCBjb25kZW5zZSByZWFkYWJsZSBtdWx0aS1saW5lIGNvZGUgdG8gc2luZ2xlIGxpbmVzXG4tIERvIG5vdCBtb2RpZnkgY29kZSB0aGF0IGlzIG5vdCBtZW50aW9uZWQgaW4gdGhlIEVTTGludCBlcnJvcnNcblxuRXhhbXBsZSBvZiBDT1JSRUNUIGZvcm1hdHRpbmcgKERPIE5PVCBDSEFOR0UpOlxuZXhwb3J0IGNsYXNzIFVzZXJDb25zdGFudHMge1xuICBzdGF0aWMgcmVhZG9ubHkgQUREX0lURU1fRVJST1I6IHN0cmluZyA9ICdVU0VSX0FERF9JVEVNX0VSUk9SJztcbiAgc3RhdGljIHJlYWRvbmx5IE9USEVSX0NPTlNUQU5UOiBzdHJpbmcgPSAnT1RIRVJfQ09OU1RBTlQnO1xufVxuXG5jb25zdHJ1Y3RvcihmbHV4OiBGbHV4RnJhbWV3b3JrLCBDdXN0b21BZGFwdGVyOiB0eXBlb2YgRXZlbnQgPSBFdmVudCkge1xuICB0aGlzLkN1c3RvbUFkYXB0ZXIgPSBDdXN0b21BZGFwdGVyO1xuICB0aGlzLmZsdXggPSBmbHV4O1xufVxuXG5pbXBvcnQge1xuICBhcHAsXG4gIGV2ZW50cyxcbiAgaW1hZ2VzLFxuICBsb2NhdGlvbnMsXG4gIG1lc3NhZ2VzLFxuICBwb3N0cyxcbiAgdGFncyxcbiAgdXNlcnMsXG4gIHdlYnNvY2tldFxufSBmcm9tICcuL3N0b3Jlcyc7XG5cbmNvbnN0IGNvbmZpZyA9IHtcbiAgYXBpS2V5OiAndmFsdWUnLFxuICBiYXNlVXJsOiAnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20nLFxuICB0aW1lb3V0OiA1MDAwXG59O1xuXG5FeGFtcGxlIG9mIElOQ09SUkVDVCBmb3JtYXR0aW5nIChGSVggVEhJUyk6XG5leHBvcnQgY2xhc3MgVXNlckNvbnN0YW50cyB7c3RhdGljIHJlYWRvbmx5IEFERF9JVEVNX0VSUk9SOiBzdHJpbmcgPSAnVVNFUl9BRERfSVRFTV9FUlJPUic7XG4gIHN0YXRpYyByZWFkb25seSBPVEhFUl9DT05TVEFOVDogc3RyaW5nID0gJ09USEVSX0NPTlNUQU5UJztcbn1cblxuY29uc3RydWN0b3IoZmx1eDogRmx1eEZyYW1ld29yaywgQ3VzdG9tQWRhcHRlcjogdHlwZW9mIEV2ZW50ID0gRXZlbnQpIHt0aGlzLkN1c3RvbUFkYXB0ZXIgPSBDdXN0b21BZGFwdGVyO1xuICB0aGlzLmZsdXggPSBmbHV4O31cblxuaW1wb3J0IHthcHAsIGV2ZW50cywgaW1hZ2VzLCBsb2NhdGlvbnMsIG1lc3NhZ2VzLCBwb3N0cywgdGFncywgdXNlcnMsIHdlYnNvY2tldH0gZnJvbSAnLi9zdG9yZXMnO1xuXG5jb25zdCBjb25maWcgPSB7YmFzZVVybDogJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tJywgYXBpS2V5OiAndmFsdWUnLCB0aW1lb3V0OiA1MDAwfTtcblxuRml4IE9OTFkgdGhlIHNwZWNpZmljIEVTTGludCBlcnJvcnMgbGlzdGVkIGFib3ZlLiBSZXZpZXcgdGhlIGVudGlyZSBmaWxlIGZvciBjb21wbGlhbmNlIHdpdGggYWxsIEVTTGludCBydWxlcy5cblJldHVybiBvbmx5IHRoZSBwcm9wZXJseSBmb3JtYXR0ZWQgZml4ZWQgY29kZSB3aXRob3V0IGFueSBleHBsYW5hdGlvbnMuYDtcblxuICAgICAgICAgICAgY29uc3QgZml4ZWRDb250ZW50ID0gYXdhaXQgY2FsbEFJU2VydmljZShwcm9tcHQsIHF1aWV0KTtcblxuICAgICAgICAgICAgaWYoZml4ZWRDb250ZW50ICYmIGZpeGVkQ29udGVudCAhPT0gZmlsZUNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgd3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgZml4ZWRDb250ZW50LCAndXRmOCcpO1xuICAgICAgICAgICAgICBsb2coYEFwcGxpZWQgQUkgZml4ZXMgdG8gJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICBsb2coYEVycm9yIGFwcGx5aW5nIEFJIGZpeGVzIHRvICR7ZmlsZVBhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHNwaW5uZXIuc3VjY2VlZCgnQUkgZml4ZXMgYXBwbGllZCBzdWNjZXNzZnVsbHkhJyk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBhcHBseSBBSSBmaXhlcycpO1xuICAgIGxvZyhgRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgaWYoIXF1aWV0KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IGFwcGx5RGlyZWN0Rml4ZXMgPSBhc3luYyAoZmlsZVBhdGg6IHN0cmluZywgcXVpZXQ6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgbGV0IHdhc01vZGlmaWVkID0gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlQ29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcbiAgICBsZXQgbmV3Q29udGVudCA9IGZpbGVDb250ZW50O1xuXG4gICAgaWYoZmlsZVBhdGguaW5jbHVkZXMoJ2FpU2VydmljZS50cycpKSB7XG4gICAgICBsb2coJ0ZpeGluZyBpc3N1ZXMgaW4gYWlTZXJ2aWNlLnRzJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC8nQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uXFwvanNvbicsXFxzKidBdXRob3JpemF0aW9uJzogYEJlYXJlci9nLFxuICAgICAgICAnXFwnQXV0aG9yaXphdGlvblxcJzogYEJlYXJlclxcJywgXFwnQ29udGVudC1UeXBlXFwnOiBcXCdhcHBsaWNhdGlvbi9qc29uXFwnJ1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2hlYWRlcnM6IHsoW159XSopfSxcXHMqbWV0aG9kOiAnUE9TVCcvZyxcbiAgICAgICAgJ21ldGhvZDogXFwnUE9TVFxcJyxcXG4gICAgICBoZWFkZXJzOiB7JDF9J1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL3tyb2xlOiAnc3lzdGVtJywgY29udGVudDovZyxcbiAgICAgICAgJ3tjb250ZW50Oiwgcm9sZTogXFwnc3lzdGVtXFwnLCdcbiAgICAgICk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAve3JvbGU6ICd1c2VyJywgY29udGVudDovZyxcbiAgICAgICAgJ3tjb250ZW50Oiwgcm9sZTogXFwndXNlclxcJywnXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvXFwoKFteKV0qPylfKFthLXpBLVowLTldKykoXFxzKjpbXildKilcXCkvZyxcbiAgICAgICAgJygkMSQyJDMpJ1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZSgvY29uc29sZVxcLmxvZ1xcKC9nLCAnbG9nKCcpO1xuXG4gICAgICBpZighbmV3Q29udGVudC5pbmNsdWRlcygnaW1wb3J0IHtsb2d9JykgJiYgbmV3Q29udGVudC5pbmNsdWRlcygnbG9nKCcpKSB7XG4gICAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgICAgL2ltcG9ydCB7KFtefV0qKX0gZnJvbSAnKC4qKSc7LyxcbiAgICAgICAgICAnaW1wb3J0IHskMX0gZnJvbSBcXCckMlxcJztcXG5pbXBvcnQge2xvZ30gZnJvbSBcXCcuL2xvZy5qc1xcJzsnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoZmlsZVBhdGguaW5jbHVkZXMoJ3JlYWN0U2hpbS50cycpKSB7XG4gICAgICBsb2coJ0ZpeGluZyBuYW1pbmctY29udmVudGlvbiBpc3N1ZXMgaW4gcmVhY3RTaGltLnRzJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgICdpbXBvcnQgKiBhcyBSZWFjdCBmcm9tJyxcbiAgICAgICAgJ2ltcG9ydCAqIGFzIHJlYWN0IGZyb20nXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9SZWFjdFxcLi9nLCAncmVhY3QuJyk7XG4gICAgfVxuXG4gICAgaWYoZmlsZVBhdGguaW5jbHVkZXMoJ2NoYW5nZWxvZy50cycpKSB7XG4gICAgICBsb2coJ0ZpeGluZyBpc3N1ZXMgaW4gY2hhbmdlbG9nLnRzJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoLyhcXHcrKVxcK1xcKy9nLCAnJDEgKz0gMScpO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9cXFxcXFwkL2csICckJyk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9cXFxcXFwuL2csICcuJyk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9cXFxcXFwqL2csICcqJyk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9cXFxcOi9nLCAnOicpO1xuICAgIH1cblxuICAgIGlmKGZpbGVQYXRoLmluY2x1ZGVzKCdhcHAudHMnKSkge1xuICAgICAgbG9nKCdGaXhpbmcgaXNzdWVzIGluIGFwcC50cycsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9jb25zb2xlXFwubG9nXFwoL2csICdsb2coJyk7XG5cbiAgICAgIGlmKCFuZXdDb250ZW50LmluY2x1ZGVzKCdpbXBvcnQge2xvZ30nKSAmJiBuZXdDb250ZW50LmluY2x1ZGVzKCdsb2coJykpIHtcbiAgICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgICAvaW1wb3J0IGJveGVuIGZyb20gJ2JveGVuJzsvLFxuICAgICAgICAgICdpbXBvcnQgYm94ZW4gZnJvbSBcXCdib3hlblxcJztcXG5pbXBvcnQge2xvZ30gZnJvbSBcXCcuL2xvZy5qc1xcJzsnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoL1xcXFxcXC8vZywgJy8nKTtcbiAgICB9XG5cbiAgICBpZihmaWxlUGF0aC5pbmNsdWRlcygnYXV0b2ZpeC5qcycpKSB7XG4gICAgICBsb2coJ0ZpeGluZyBpc3N1ZXMgaW4gYXV0b2ZpeC5qcycsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvaW1wb3J0IHsoW159XSopfSBmcm9tICdwYXRoJztbXFxzXFxuXSppbXBvcnQgeyhbXn1dKil9IGZyb20gJ3BhdGgnOy8sXG4gICAgICAgICdpbXBvcnQgeyQxLCAkMn0gZnJvbSBcXCdwYXRoXFwnOydcbiAgICAgICk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC9fX2ZpbGVuYW1lL2csXG4gICAgICAgICdjdXJyZW50RmlsZW5hbWUnXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL19fZGlybmFtZS9nLFxuICAgICAgICAnY3VycmVudERpcm5hbWUnXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvY29uc3QgcHJlZml4ID0gdHlwZSA9PT0gJ2Vycm9yJyBcXD8gJ+KdjCAnIDogdHlwZSA9PT0gJ3N1Y2Nlc3MnIFxcPyAn4pyFICcgOiAn4oS577iPICc7LyxcbiAgICAgICAgJ2xldCBwcmVmaXggPSBcXCfihLnvuI8gXFwnO1xcbmlmKHR5cGUgPT09IFxcJ2Vycm9yXFwnKSB7XFxuICBwcmVmaXggPSBcXCfinYwgXFwnO1xcbn0gZWxzZSBpZih0eXBlID09PSBcXCdzdWNjZXNzXFwnKSB7XFxuICBwcmVmaXggPSBcXCfinIUgXFwnO1xcbn0nXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvYXN5bmMgZnVuY3Rpb24gcnVuRXNsaW50Rml4XFwoXFwpL2csXG4gICAgICAgICdjb25zdCBydW5Fc2xpbnRGaXggPSBhc3luYyAoKSdcbiAgICAgICk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvYXN5bmMgZnVuY3Rpb24gZ2V0RmlsZXNXaXRoRXJyb3JzXFwoXFwpL2csXG4gICAgICAgICdjb25zdCBnZXRGaWxlc1dpdGhFcnJvcnMgPSBhc3luYyAoKSdcbiAgICAgICk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvYXN5bmMgZnVuY3Rpb24gaXNDdXJzb3JBdmFpbGFibGVcXChcXCkvZyxcbiAgICAgICAgJ2NvbnN0IGlzQ3Vyc29yQXZhaWxhYmxlID0gYXN5bmMgKCknXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2FzeW5jIGZ1bmN0aW9uIGZpeEZpbGVXaXRoQ3Vyc29yQUlcXChmaWxlUGF0aFxcKS9nLFxuICAgICAgICAnY29uc3QgZml4RmlsZVdpdGhDdXJzb3JBSSA9IGFzeW5jIChmaWxlUGF0aCknXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2FzeW5jIGZ1bmN0aW9uIG1haW5cXChcXCkvZyxcbiAgICAgICAgJ2NvbnN0IG1haW4gPSBhc3luYyAoKSdcbiAgICAgICk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC9pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luY30vZyxcbiAgICAgICAgJ2ltcG9ydCB7d3JpdGVGaWxlU3luY30nXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvY29uc29sZVxcLmxvZ1xcKGBcXCR7cHJlZml4fSBcXCR7bWVzc2FnZX1gXFwpOy9nLFxuICAgICAgICAncHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7cHJlZml4fSAke21lc3NhZ2V9XFxcXG5gKTsnXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvfSBjYXRjaFxcKGVycm9yXFwpIHtbXFxzXFxuXSpcXC9cXC8gSWdub3JlIGNsZWFudXAgZXJyb3JzL2csXG4gICAgICAgICd9IGNhdGNoKF8pIHtcXG4gICAgICAvLyBJZ25vcmUgY2xlYW51cCBlcnJvcnMnXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL30gY2F0Y2hcXChlcnJvclxcKSB7W1xcc1xcbl0qbG9nXFwoL2csXG4gICAgICAgICd9IGNhdGNoKGVycikge1xcbiAgICBsb2coJ1xuICAgICAgKTtcbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC99IGNhdGNoXFwoZXJyb3JcXCkge1tcXHNcXG5dKnJldHVybiBmYWxzZTsvZyxcbiAgICAgICAgJ30gY2F0Y2goXykge1xcbiAgICByZXR1cm4gZmFsc2U7J1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2ZvclxcKGNvbnN0IGZpbGVQYXRoIG9mIGZpbGVzV2l0aEVycm9yc1xcKSB7W1xcc1xcbl0qY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGZpeEZpbGVXaXRoQ3Vyc29yQUlcXChmaWxlUGF0aFxcKTsvZyxcbiAgICAgICAgJ2NvbnN0IGZpeFJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChmaWxlc1dpdGhFcnJvcnMubWFwKGZpbGVQYXRoID0+IGZpeEZpbGVXaXRoQ3Vyc29yQUkoZmlsZVBhdGgpKSk7XFxuZm9yKGNvbnN0IHN1Y2Nlc3Mgb2YgZml4UmVzdWx0cykgeydcbiAgICAgICk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC9maXhlZENvdW50XFwrXFwrOy9nLFxuICAgICAgICAnZml4ZWRDb3VudCArPSAxOydcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYobmV3Q29udGVudCAhPT0gZmlsZUNvbnRlbnQpIHtcbiAgICAgIHdyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIG5ld0NvbnRlbnQsICd1dGY4Jyk7XG4gICAgICBsb2coYEZpeGVkIGlzc3VlcyBpbiAke2ZpbGVQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgd2FzTW9kaWZpZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB3YXNNb2RpZmllZDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgRXJyb3IgYXBwbHlpbmcgZGlyZWN0IGZpeGVzIHRvICR7ZmlsZVBhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29uc3QgbG9hZEFJQ29uZmlnID0gYXN5bmMgKGN3ZDogc3RyaW5nLCBxdWlldDogYm9vbGVhbiwgZGVidWc6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBjb25maWdGb3JtYXRzID0gWydqcycsICdtanMnLCAnY2pzJywgJ3RzJywgJ2pzb24nXTtcbiAgY29uc3QgY29uZmlnQmFzZU5hbWUgPSAnbGV4LmNvbmZpZyc7XG4gIGxldCBsZXhDb25maWdQYXRoID0gJyc7XG5cbiAgZm9yKGNvbnN0IGZvcm1hdCBvZiBjb25maWdGb3JtYXRzKSB7XG4gICAgY29uc3QgcG90ZW50aWFsUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgYC4vJHtjb25maWdCYXNlTmFtZX0uJHtmb3JtYXR9YCk7XG4gICAgaWYoZXhpc3RzU3luYyhwb3RlbnRpYWxQYXRoKSkge1xuICAgICAgbGV4Q29uZmlnUGF0aCA9IHBvdGVudGlhbFBhdGg7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZihsZXhDb25maWdQYXRoKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZvciBNSlMgZmlsZXMsIHdlIG5lZWQgdG8gdXNlIGR5bmFtaWMgaW1wb3J0IHdpdGggVVJMIGZvciBjb21wYXRpYmlsaXR5XG4gICAgICBjb25zdCBmb3JtYXQgPSBleHRuYW1lKGxleENvbmZpZ1BhdGgpLnNsaWNlKDEpO1xuICAgICAgbGV0IGltcG9ydFBhdGggPSBsZXhDb25maWdQYXRoO1xuXG4gICAgICAvLyBVc2UgVVJMIHByb3RvY29sIGZvciBFU00gaW1wb3J0c1xuICAgICAgaWYoZm9ybWF0ID09PSAnbWpzJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYGZpbGU6Ly8ke2xleENvbmZpZ1BhdGh9YCk7XG4gICAgICAgICAgaW1wb3J0UGF0aCA9IHVybC5ocmVmO1xuICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICBsb2coYFVzaW5nIFVSTCBmb3JtYXQgZm9yIE1KUyBpbXBvcnQ6ICR7aW1wb3J0UGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2godXJsRXJyb3IpIHtcbiAgICAgICAgICBsb2coYEVycm9yIGNyZWF0aW5nIFVSTCBmb3IgTUpTIGltcG9ydDogJHt1cmxFcnJvci5tZXNzYWdlfWAsICd3YXJuJywgZGVidWcgfHwgIXF1aWV0KTtcbiAgICAgICAgICBpbXBvcnRQYXRoID0gYGZpbGU6Ly8ke2xleENvbmZpZ1BhdGh9YDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFRyeWluZyB0byBpbXBvcnQgY29uZmlnIGZyb20gJHtpbXBvcnRQYXRofSAoZm9ybWF0OiAke2Zvcm1hdH0pYCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBsZXhDb25maWc7XG4gICAgICB0cnkge1xuICAgICAgICBsZXhDb25maWcgPSBhd2FpdCBpbXBvcnQoaW1wb3J0UGF0aCk7XG4gICAgICB9IGNhdGNoKGltcG9ydEVycm9yKSB7XG4gICAgICAgIGlmKGltcG9ydEVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBkZWZpbmVkIGluIEVTIG1vZHVsZSBzY29wZScpKSB7XG4gICAgICAgICAgbG9nKGBFUyBNb2R1bGUgc3ludGF4IGVycm9yIGluICR7bGV4Q29uZmlnUGF0aH0uIE1ha2Ugc3VyZSB5b3UncmUgdXNpbmcgJ2V4cG9ydCcgaW5zdGVhZCBvZiAnbW9kdWxlLmV4cG9ydHMnLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihpbXBvcnRFcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBpbXBvcnRFcnJvcjtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGJvdGggRVNNIChkZWZhdWx0IGV4cG9ydCkgYW5kIENvbW1vbkpTIChtb2R1bGUuZXhwb3J0cylcbiAgICAgIGxldCBjb25maWdEYXRhID0gbnVsbDtcbiAgICAgIGlmKGxleENvbmZpZy5kZWZhdWx0KSB7XG4gICAgICAgIGNvbmZpZ0RhdGEgPSBsZXhDb25maWcuZGVmYXVsdDtcbiAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICBsb2coYEZvdW5kIGRlZmF1bHQgZXhwb3J0IGluICR7bGV4Q29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIENvbW1vbkpTIG9yIG90aGVyIG1vZHVsZSBzeXN0ZW1zXG4gICAgICAgIGNvbmZpZ0RhdGEgPSBsZXhDb25maWc7XG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKGBVc2luZyBkaXJlY3QgZXhwb3J0IGluICR7bGV4Q29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZihjb25maWdEYXRhICYmIGNvbmZpZ0RhdGEuYWkpIHtcbiAgICAgICAgbG9nKGBGb3VuZCBBSSBjb25maWd1cmF0aW9uIGluICR7cGF0aFJlc29sdmUoY3dkLCBsZXhDb25maWdQYXRoKX0sIGFwcGx5aW5nIHNldHRpbmdzLi4uYCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIExleENvbmZpZy5jb25maWcuYWkgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZy5haSwgLi4uY29uZmlnRGF0YS5haX07XG4gICAgICB9XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBFcnJvciBsb2FkaW5nIEFJIGNvbmZpZ3VyYXRpb24gZnJvbSAke2xleENvbmZpZ1BhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogTG9hZCBFU0xpbnQgY29uZmlndXJhdGlvbiBmcm9tIGxleC5jb25maWcuKiBmaWxlc1xuICovXG5jb25zdCBsb2FkRVNMaW50Q29uZmlnID0gYXN5bmMgKGN3ZDogc3RyaW5nLCBxdWlldDogYm9vbGVhbiwgZGVidWc6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgLy8gQ2hlY2sgaWYgTGV4Q29uZmlnIGFscmVhZHkgaGFzIEVTTGludCBjb25maWd1cmF0aW9uIGxvYWRlZFxuICBpZihMZXhDb25maWcuY29uZmlnLmVzbGludCAmJiBPYmplY3Qua2V5cyhMZXhDb25maWcuY29uZmlnLmVzbGludCkubGVuZ3RoID4gMCkge1xuICAgIGxvZygnRm91bmQgRVNMaW50IGNvbmZpZ3VyYXRpb24gaW4gbGV4LmNvbmZpZy4qIGZpbGUnLCAnaW5mbycsIGRlYnVnIHx8ICFxdWlldCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBUcnkgdG8gbG9hZCBmcm9tIGxleC5jb25maWcuKiBmaWxlcyBpZiBub3QgYWxyZWFkeSBsb2FkZWRcbiAgY29uc3QgY29uZmlnRm9ybWF0cyA9IFsnanMnLCAnbWpzJywgJ2NqcycsICd0cycsICdqc29uJ107XG4gIGNvbnN0IGNvbmZpZ0Jhc2VOYW1lID0gJ2xleC5jb25maWcnO1xuXG4gIGZvcihjb25zdCBmb3JtYXQgb2YgY29uZmlnRm9ybWF0cykge1xuICAgIGNvbnN0IHBvdGVudGlhbFBhdGggPSBwYXRoUmVzb2x2ZShjd2QsIGAuLyR7Y29uZmlnQmFzZU5hbWV9LiR7Zm9ybWF0fWApO1xuICAgIGlmKGV4aXN0c1N5bmMocG90ZW50aWFsUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEZvciBNSlMgZmlsZXMsIHdlIG5lZWQgdG8gdXNlIGR5bmFtaWMgaW1wb3J0IHdpdGggVVJMIGZvciBjb21wYXRpYmlsaXR5XG4gICAgICAgIGNvbnN0IGZpbGVGb3JtYXQgPSBleHRuYW1lKHBvdGVudGlhbFBhdGgpLnNsaWNlKDEpO1xuICAgICAgICBsZXQgaW1wb3J0UGF0aCA9IHBvdGVudGlhbFBhdGg7XG5cbiAgICAgICAgLy8gVXNlIFVSTCBwcm90b2NvbCBmb3IgRVNNIGltcG9ydHNcbiAgICAgICAgaWYoZmlsZUZvcm1hdCA9PT0gJ21qcycpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChgZmlsZTovLyR7cG90ZW50aWFsUGF0aH1gKTtcbiAgICAgICAgICAgIGltcG9ydFBhdGggPSB1cmwuaHJlZjtcbiAgICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICAgIGxvZyhgVXNpbmcgVVJMIGZvcm1hdCBmb3IgTUpTIGltcG9ydDogJHtpbXBvcnRQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2godXJsRXJyb3IpIHtcbiAgICAgICAgICAgIGxvZyhgRXJyb3IgY3JlYXRpbmcgVVJMIGZvciBNSlMgaW1wb3J0OiAke3VybEVycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBkZWJ1ZyB8fCAhcXVpZXQpO1xuICAgICAgICAgICAgaW1wb3J0UGF0aCA9IGBmaWxlOi8vJHtwb3RlbnRpYWxQYXRofWA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICBsb2coYFRyeWluZyB0byBpbXBvcnQgY29uZmlnIGZyb20gJHtpbXBvcnRQYXRofSAoZm9ybWF0OiAke2ZpbGVGb3JtYXR9KWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxleENvbmZpZztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXhDb25maWcgPSBhd2FpdCBpbXBvcnQoaW1wb3J0UGF0aCk7XG4gICAgICAgIH0gY2F0Y2goaW1wb3J0RXJyb3IpIHtcbiAgICAgICAgICBpZihpbXBvcnRFcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdub3QgZGVmaW5lZCBpbiBFUyBtb2R1bGUgc2NvcGUnKSkge1xuICAgICAgICAgICAgbG9nKGBFUyBNb2R1bGUgc3ludGF4IGVycm9yIGluICR7cG90ZW50aWFsUGF0aH0uIE1ha2Ugc3VyZSB5b3UncmUgdXNpbmcgJ2V4cG9ydCcgaW5zdGVhZCBvZiAnbW9kdWxlLmV4cG9ydHMnLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoaW1wb3J0RXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGltcG9ydEVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIGJvdGggRVNNIChkZWZhdWx0IGV4cG9ydCkgYW5kIENvbW1vbkpTIChtb2R1bGUuZXhwb3J0cylcbiAgICAgICAgbGV0IGNvbmZpZ0RhdGEgPSBudWxsO1xuICAgICAgICBpZihsZXhDb25maWcuZGVmYXVsdCkge1xuICAgICAgICAgIGNvbmZpZ0RhdGEgPSBsZXhDb25maWcuZGVmYXVsdDtcbiAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgbG9nKGBGb3VuZCBkZWZhdWx0IGV4cG9ydCBpbiAke3BvdGVudGlhbFBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZvciBDb21tb25KUyBvciBvdGhlciBtb2R1bGUgc3lzdGVtc1xuICAgICAgICAgIGNvbmZpZ0RhdGEgPSBsZXhDb25maWc7XG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIGxvZyhgVXNpbmcgZGlyZWN0IGV4cG9ydCBpbiAke3BvdGVudGlhbFBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoY29uZmlnRGF0YSAmJiBjb25maWdEYXRhLmVzbGludCAmJiBPYmplY3Qua2V5cyhjb25maWdEYXRhLmVzbGludCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxvZyhgRm91bmQgRVNMaW50IGNvbmZpZ3VyYXRpb24gaW4gJHtwYXRoUmVzb2x2ZShjd2QsIHBvdGVudGlhbFBhdGgpfSwgYXBwbHlpbmcgc2V0dGluZ3MuLi5gLCAnaW5mbycsIGRlYnVnIHx8ICFxdWlldCk7XG4gICAgICAgICAgTGV4Q29uZmlnLmNvbmZpZy5lc2xpbnQgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZy5lc2xpbnQsIC4uLmNvbmZpZ0RhdGEuZXNsaW50fTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBsb2coYEVycm9yIGxvYWRpbmcgRVNMaW50IGNvbmZpZ3VyYXRpb24gZnJvbSAke3BvdGVudGlhbFBhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCByZW1vdmVGaWxlQ29tbWVudHMgPSAoZmlsZVBhdGg6IHN0cmluZywgcXVpZXQ6IGJvb2xlYW4pOiBib29sZWFuID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlQ29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcblxuICAgIGlmKGZpbGVDb250ZW50Lmxlbmd0aCA+IDEwMDAwMDApIHsgLy8gMU1CIGxpbWl0XG4gICAgICBsb2coYFNraXBwaW5nIGNvbW1lbnQgcmVtb3ZhbCBmb3IgbGFyZ2UgZmlsZTogJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gVXNlIHJlZ2V4IHRvIG1hdGNoIGRpZmZlcmVudCB0eXBlcyBvZiBjb21tZW50c1xuICAgIC8vIFByZXNlcnZlczpcbiAgICAvLyAxLiBDb3B5cmlnaHQgbm90aWNlcyAoLyogQ29weXJpZ2h0IC4uLiAqLylcbiAgICAvLyAyLiBUT0RPIGNvbW1lbnRzICgvLyBUT0RPOiAuLi4pXG4gICAgLy8gMy4gTGljZW5zZSBoZWFkZXJzICgvKiAuLi4gTGljZW5zZSAuLi4gKi8pXG5cbiAgICAvLyBIYW5kbGUgbXVsdGktbGluZSBjb21tZW50cyBmaXJzdCAtIHByZXNlcnZlIGNvcHlyaWdodC9saWNlbnNlIG5vdGljZXNcbiAgICBsZXQgbmV3Q29udGVudCA9IGZpbGVDb250ZW50LnJlcGxhY2UoXG4gICAgICAvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy9nLFxuICAgICAgKG1hdGNoKSA9PiB7XG4gICAgICAgIGlmKG1hdGNoLmluY2x1ZGVzKCdDb3B5cmlnaHQnKSB8fFxuICAgICAgICAgIG1hdGNoLmluY2x1ZGVzKCdMSUNFTlNFJykgfHxcbiAgICAgICAgICBtYXRjaC5pbmNsdWRlcygnTGljZW5zZScpIHx8XG4gICAgICAgICAgbWF0Y2guaW5jbHVkZXMoJ2xpY2Vuc2UnKSkge1xuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEhhbmRsZSBzaW5nbGUtbGluZSBjb21tZW50cyAtIHByZXNlcnZlIFRPRE9zXG4gICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgIC9cXC9cXC8uKiQvZ20sXG4gICAgICAobWF0Y2gpID0+IHtcbiAgICAgICAgaWYobWF0Y2guaW5jbHVkZXMoJ1RPRE8nKSB8fCBtYXRjaC5pbmNsdWRlcygnRklYTUUnKSkge1xuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIENsZWFuIHVwIGFueSBtdWx0aXBsZSBibGFuayBsaW5lcyBjcmVhdGVkIGJ5IGNvbW1lbnQgcmVtb3ZhbFxuICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoL1xcblxccypcXG5cXHMqXFxuL2csICdcXG5cXG4nKTtcblxuICAgIC8vIElmIHRoZSBmaWxlIHdhcyBtb2RpZmllZCwgc2F2ZSBpdFxuICAgIGlmKG5ld0NvbnRlbnQgIT09IGZpbGVDb250ZW50KSB7XG4gICAgICB3cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBuZXdDb250ZW50LCAndXRmOCcpO1xuICAgICAgbG9nKGBSZW1vdmVkIGNvbW1lbnRzIGZyb20gJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgRXJyb3IgcmVtb3ZpbmcgY29tbWVudHMgZnJvbSAke2ZpbGVQYXRofTogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBsaW50ID0gYXN5bmMgKGNtZDogTGludE9wdGlvbnMgJiB7J3JlbW92ZS1jb21tZW50cyc/OiBib29sZWFufSwgY2FsbGJhY2s6IExpbnRDYWxsYmFjayA9IHByb2Nlc3MuZXhpdCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgZml4ID0gZmFsc2UsXG4gICAgZGVidWcgPSBmYWxzZSxcbiAgICBxdWlldCA9IGZhbHNlLFxuICAgIGNvbmZpZyA9IG51bGwsXG4gICAgcmVtb3ZlQ29tbWVudHMgPSBmYWxzZSxcbiAgICAncmVtb3ZlLWNvbW1lbnRzJzogcmVtb3ZlQ29tbWVudHNGbGFnID0gZmFsc2VcbiAgfSA9IGNtZDtcblxuICBjb25zdCBzaG91bGRSZW1vdmVDb21tZW50cyA9IHJlbW92ZUNvbW1lbnRzIHx8IHJlbW92ZUNvbW1lbnRzRmxhZztcblxuICBsb2coYCR7Y2xpTmFtZX0gbGludGluZy4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGNvbnN0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IHNwaW5uZXIgPSBjcmVhdGVTcGlubmVyKHF1aWV0KTtcblxuICBhd2FpdCBsb2FkQUlDb25maWcoY3dkLCBxdWlldCwgZGVidWcpO1xuXG4gIGxldCB0ZW1wQ29uZmlnUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1c2VUeXBlc2NyaXB0ID0gZGV0ZWN0VHlwZVNjcmlwdChjd2QpO1xuICAgIGxvZyhgVHlwZVNjcmlwdCAke3VzZVR5cGVzY3JpcHQgPyAnZGV0ZWN0ZWQnIDogJ25vdCBkZXRlY3RlZCd9IGZyb20gdHNjb25maWcuanNvbmAsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgICAgTGV4Q29uZmlnLmNoZWNrTGludFR5cGVzY3JpcHRDb25maWcoKTtcbiAgICB9XG5cbiAgICBlbnN1cmVNb2R1bGVUeXBlKGN3ZCk7XG5cbiAgICBhd2FpdCBpbnN0YWxsRGVwZW5kZW5jaWVzKGN3ZCwgdXNlVHlwZXNjcmlwdCwgcXVpZXQpO1xuXG4gICAgY29uc3QgcHJvamVjdENvbmZpZ1BhdGggPSBwYXRoUmVzb2x2ZShjd2QsICdlc2xpbnQuY29uZmlnLm1qcycpO1xuICAgIGNvbnN0IHByb2plY3RDb25maWdQYXRoVHMgPSBwYXRoUmVzb2x2ZShjd2QsICdlc2xpbnQuY29uZmlnLnRzJyk7XG4gICAgY29uc3QgaGFzRXNsaW50Q29uZmlnID0gZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aCkgfHxcbiAgICAgIGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGhUcykgfHxcbiAgICAgIGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjLmpzJykpIHx8XG4gICAgICBleGlzdHNTeW5jKHBhdGhSZXNvbHZlKGN3ZCwgJy5lc2xpbnRyYy5qc29uJykpIHx8XG4gICAgICBleGlzdHNTeW5jKHBhdGhSZXNvbHZlKGN3ZCwgJy5lc2xpbnRyYy55bWwnKSkgfHxcbiAgICAgIGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjLnlhbWwnKSkgfHxcbiAgICAgIGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjJykpO1xuXG4gICAgY29uc3QgaGFzTGV4RXNsaW50Q29uZmlnID0gYXdhaXQgbG9hZEVTTGludENvbmZpZyhjd2QsIHF1aWV0LCBkZWJ1Zyk7XG5cbiAgICBpZihoYXNMZXhFc2xpbnRDb25maWcpIHtcbiAgICAgIGxvZygnVXNpbmcgRVNMaW50IGNvbmZpZ3VyYXRpb24gZnJvbSBsZXguY29uZmlnLiogZmlsZScsICdpbmZvJywgcXVpZXQpO1xuICAgIH1cblxuICAgIGlmKGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjLmpzb24nKSkpIHtcbiAgICAgIHVubGlua1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjLmpzb24nKSk7XG4gICAgfVxuXG4gICAgbGV0IGxleENvbmZpZ1BhdGggPSAnJztcbiAgICBsZXQgc2hvdWxkQ3JlYXRlVGVtcENvbmZpZyA9IGZhbHNlO1xuXG4gICAgaWYoIWhhc0VzbGludENvbmZpZyAmJiAhaGFzTGV4RXNsaW50Q29uZmlnKSB7XG4gICAgICBjb25zdCBwb3NzaWJsZVBhdGhzID0gW1xuICAgICAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJy4uLy4uLy4uLy4uL2VzbGludC5jb25maWcudHMnKSxcbiAgICAgICAgcGF0aFJlc29sdmUoY3VycmVudERpcm5hbWUsICcuLi8uLi8uLi8uLi9lc2xpbnQuY29uZmlnLmptcycpLFxuICAgICAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmVudi5MRVhfSE9NRSB8fCAnLi9ub2RlX21vZHVsZXMvQG5sYWJzL2xleCcsICdlc2xpbnQuY29uZmlnLnRzJyksXG4gICAgICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuZW52LkxFWF9IT01FIHx8ICcuL25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4JywgJ2VzbGludC5jb25maWcubWpzJylcbiAgICAgIF07XG5cbiAgICAgIGZvcihjb25zdCBwYXRoIG9mIHBvc3NpYmxlUGF0aHMpIHtcbiAgICAgICAgaWYoZXhpc3RzU3luYyhwYXRoKSkge1xuICAgICAgICAgIGxleENvbmZpZ1BhdGggPSBwYXRoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZyhgQ3VycmVudCBkaXJlY3Rvcnk6ICR7Y3VycmVudERpcm5hbWV9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIGxvZyhgUHJvamVjdCBjb25maWcgcGF0aDogJHtwcm9qZWN0Q29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgbG9nKGBQcm9qZWN0IGNvbmZpZyBleGlzdHM6ICR7aGFzRXNsaW50Q29uZmlnfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICBsb2coYEZvdW5kIExleCBjb25maWc6ICR7bGV4Q29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgbG9nKGBMZXggY29uZmlnIGV4aXN0czogJHshIWxleENvbmZpZ1BhdGggJiYgZXhpc3RzU3luYyhsZXhDb25maWdQYXRoKX1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cblxuICAgICAgaWYobGV4Q29uZmlnUGF0aCAmJiBleGlzdHNTeW5jKGxleENvbmZpZ1BhdGgpKSB7XG4gICAgICAgIGxvZygnTm8gRVNMaW50IGNvbmZpZ3VyYXRpb24gZm91bmQgaW4gcHJvamVjdC4gVXNpbmcgTGV4XFwncyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaG91bGRDcmVhdGVUZW1wQ29uZmlnID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihjb25maWcpIHtcbiAgICAgIGNvbnN0IHVzZXJDb25maWdQYXRoID0gcGF0aFJlc29sdmUoY3dkLCBjb25maWcpO1xuICAgICAgaWYoZXhpc3RzU3luYyh1c2VyQ29uZmlnUGF0aCkpIHtcbiAgICAgICAgbG9nKGBVc2luZyBzcGVjaWZpZWQgRVNMaW50IGNvbmZpZ3VyYXRpb246ICR7Y29uZmlnfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICBzaG91bGRDcmVhdGVUZW1wQ29uZmlnID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coYFNwZWNpZmllZCBFU0xpbnQgY29uZmlndXJhdGlvbiBub3QgZm91bmQ6ICR7Y29uZmlnfS4gVXNpbmcgTGV4J3MgZGVmYXVsdCBjb25maWd1cmF0aW9uLmAsICd3YXJuJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKHNob3VsZENyZWF0ZVRlbXBDb25maWcpIHtcbiAgICAgIGxvZygnTm8gRVNMaW50IGNvbmZpZ3VyYXRpb24gZm91bmQuIENyZWF0aW5nIGEgdGVtcG9yYXJ5IGNvbmZpZ3VyYXRpb24uLi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIGNvbnN0IGNvbmZpZ1Jlc3VsdCA9IGNyZWF0ZURlZmF1bHRFU0xpbnRDb25maWcodXNlVHlwZXNjcmlwdCwgY3dkKTtcbiAgICAgIHRlbXBDb25maWdQYXRoID0gY29uZmlnUmVzdWx0LmNvbmZpZ1BhdGg7XG4gICAgfVxuXG4gICAgbGV0IGVzbGludE91dHB1dCA9ICcnO1xuICAgIGNvbnN0IGNhcHR1cmVPdXRwdXQgPSAob3V0cHV0OiBzdHJpbmcpID0+IHtcbiAgICAgIGVzbGludE91dHB1dCArPSBgJHtvdXRwdXR9XFxuYDtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuRXNsaW50V2l0aExleChjd2QsIHF1aWV0LCBjbGlOYW1lLCB0cnVlLCBkZWJ1ZywgdXNlVHlwZXNjcmlwdCwgY2FwdHVyZU91dHB1dCk7XG5cbiAgICBpZihzaG91bGRSZW1vdmVDb21tZW50cykge1xuICAgICAgc3Bpbm5lci5zdGFydCgnUmVtb3ZpbmcgY29tbWVudHMgZnJvbSBmaWxlcy4uLicpO1xuXG4gICAgICBjb25zdCBnbG9iID0gYXdhaXQgaW1wb3J0KCdnbG9iJyk7XG4gICAgICBjb25zdCBmaWxlcyA9IGdsb2Iuc3luYygne3NyYyxsaWJ9LyoqLyoue2pzLGpzeCx0cyx0c3h9Jywge1xuICAgICAgICBjd2QsXG4gICAgICAgIGlnbm9yZTogWycqKi9ub2RlX21vZHVsZXMvKionLCAnKiovbGliLyoqJywgJyoqL2Rpc3QvKionLCAnKiovYnVpbGQvKionXVxuICAgICAgfSk7XG5cbiAgICAgIGxldCBwcm9jZXNzZWRDb3VudCA9IDA7XG4gICAgICBmb3IoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgZmlsZSk7XG4gICAgICAgIGlmKHJlbW92ZUZpbGVDb21tZW50cyhmaWxlUGF0aCwgcXVpZXQpKSB7XG4gICAgICAgICAgcHJvY2Vzc2VkQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzcGlubmVyLnN1Y2NlZWQoYFJlbW92ZWQgY29tbWVudHMgZnJvbSAke3Byb2Nlc3NlZENvdW50fSBmaWxlc2ApO1xuICAgIH1cblxuICAgIGlmKHJlc3VsdCAhPT0gMCAmJiBmaXgpIHtcbiAgICAgIGNvbnN0IGFpQ29uZmlndXJlZCA9IExleENvbmZpZy5jb25maWcuYWk/LnByb3ZpZGVyICYmIExleENvbmZpZy5jb25maWcuYWkucHJvdmlkZXIgIT09ICdub25lJztcblxuICAgICAgaWYoYWlDb25maWd1cmVkKSB7XG4gICAgICAgIGxvZygnQXBwbHlpbmcgQUkgZml4ZXMgdG8gcmVtYWluaW5nIGlzc3Vlcy4uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICBhd2FpdCBhcHBseUFJRml4KGN3ZCwgZXNsaW50T3V0cHV0LCBxdWlldCk7XG5cbiAgICAgICAgY29uc3QgYWZ0ZXJGaXhSZXN1bHQgPSBhd2FpdCBydW5Fc2xpbnRXaXRoTGV4KGN3ZCwgcXVpZXQsIGNsaU5hbWUsIGZhbHNlLCBkZWJ1ZywgdXNlVHlwZXNjcmlwdCk7XG5cbiAgICAgICAgY2FsbGJhY2soYWZ0ZXJGaXhSZXN1bHQpO1xuICAgICAgICByZXR1cm4gYWZ0ZXJGaXhSZXN1bHQ7XG4gICAgICB9XG4gICAgICBsb2coJ0VTTGludCBjb3VsZCBub3QgZml4IGFsbCBpc3N1ZXMgYXV0b21hdGljYWxseS4nLCAnd2FybicsIHF1aWV0KTtcbiAgICAgIGxvZygnVG8gZW5hYmxlIEFJLXBvd2VyZWQgZml4ZXMsIGFkZCBBSSBjb25maWd1cmF0aW9uIHRvIHlvdXIgbGV4LmNvbmZpZyBmaWxlOicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgbG9nKGBcbi8vIEluIGxleC5jb25maWcuanMgKG9yIGxleC5jb25maWcubWpzLCBsZXguY29uZmlnLmNqcywgZXRjLilcbmV4cG9ydCBkZWZhdWx0IHtcbiAgLy8gWW91ciBleGlzdGluZyBjb25maWdcbiAgYWk6IHtcbiAgICBwcm92aWRlcjogJ2N1cnNvcicgLy8gb3IgJ29wZW5haScsICdhbnRocm9waWMnLCBldGMuXG4gICAgLy8gQWRkaXRpb25hbCBwcm92aWRlci1zcGVjaWZpYyBzZXR0aW5nc1xuICB9XG59O2AsICdpbmZvJywgcXVpZXQpO1xuICAgIH1cblxuICAgIGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBpZihzcGlubmVyKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0xpbnRpbmcgZmFpbGVkIScpO1xuICAgIH1cbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjb25zdCB0ZW1wRmlsZVBhdGhzID0gW1xuICAgICAgdGVtcENvbmZpZ1BhdGgsXG4gICAgICBwYXRoUmVzb2x2ZShjd2QsICcubGV4LXRlbXAtZXNsaW50LmNqcycpLFxuICAgICAgcGF0aFJlc29sdmUoY3dkLCAnLmxleC10ZW1wLWRlZmF1bHQtZXNsaW50LmNqcycpXG4gICAgXTtcblxuICAgIGZvcihjb25zdCBmaWxlUGF0aCBvZiB0ZW1wRmlsZVBhdGhzKSB7XG4gICAgICBpZihmaWxlUGF0aCAmJiBleGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHVubGlua1N5bmMoZmlsZVBhdGgpO1xuICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICBsb2coYENsZWFuZWQgdXAgdGVtcG9yYXJ5IEVTTGludCBjb25maWcgYXQgJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2h7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn07Il0sIm5hbWVzIjpbImV4ZWNhIiwiZXhpc3RzU3luYyIsInJlYWRGaWxlU3luYyIsInVubGlua1N5bmMiLCJ3cml0ZUZpbGVTeW5jIiwiZGlybmFtZSIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsImV4dG5hbWUiLCJMZXhDb25maWciLCJjcmVhdGVTcGlubmVyIiwicmVzb2x2ZUJpbmFyeVBhdGgiLCJsb2ciLCJjdXJyZW50RmlsZW5hbWUiLCJjdXJyZW50RGlybmFtZSIsImV2YWwiLCJwcm9jZXNzIiwiY3dkIiwiY3JlYXRlRGVmYXVsdEVTTGludENvbmZpZyIsInVzZVR5cGVzY3JpcHQiLCJjb25maWdQYXRoIiwib3JpZ2luYWxDb25maWciLCJjb25maWdDb250ZW50IiwiZGV0ZWN0VHlwZVNjcmlwdCIsImVuc3VyZU1vZHVsZVR5cGUiLCJwYWNrYWdlSnNvblBhdGgiLCJwYWNrYWdlSnNvbkNvbnRlbnQiLCJwYWNrYWdlSnNvbiIsIkpTT04iLCJwYXJzZSIsInR5cGUiLCJfZXJyb3IiLCJpbnN0YWxsRGVwZW5kZW5jaWVzIiwicXVpZXQiLCJydW5Fc2xpbnRXaXRoTGV4IiwiY2xpTmFtZSIsImZpeCIsImRlYnVnIiwiY2FwdHVyZU91dHB1dCIsInNwaW5uZXIiLCJwcm9qZWN0Q29uZmlnUGF0aCIsInByb2plY3RDb25maWdQYXRoVHMiLCJoYXNQcm9qZWN0Q29uZmlnIiwiaGFzTGV4Q29uZmlnRXNsaW50IiwiY29uZmlnIiwiZXNsaW50IiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsInBvc3NpYmxlUGF0aHMiLCJlbnYiLCJMRVhfSE9NRSIsImxleENvbmZpZ1BhdGgiLCJwYXRoIiwidGVtcENvbmZpZ1BhdGgiLCJzdHJpbmdpZnkiLCJlc2xpbnRCaW5hcnkiLCJiYXNlRXNsaW50QXJncyIsImNvbmZpZ0FyZ3MiLCJqc1Jlc3VsdCIsInJlamVjdCIsInNoZWxsIiwic3RkaW8iLCJzdGRvdXQiLCJjb25zb2xlIiwic3RkZXJyIiwiZXJyb3IiLCJ0c1Jlc3VsdCIsImV4aXRDb2RlIiwibWVzc2FnZSIsImVzbGludE5vdEZvdW5kIiwiaW5jbHVkZXMiLCJmYWlsIiwic3VjY2VlZCIsIm5vRmlsZXNGb3VuZCIsImFwcGx5QUlGaXgiLCJlcnJvcnMiLCJzdGFydCIsImZpbGVFcnJvck1hcCIsIk1hcCIsImxpbmVzIiwic3BsaXQiLCJjdXJyZW50RmlsZSIsImxpbmUiLCJtYXRjaCIsInRyaW0iLCJoYXMiLCJzZXQiLCJlcnJvckFycmF5IiwiZ2V0IiwicHVzaCIsInNpemUiLCJzZWN0aW9ucyIsInNlY3Rpb24iLCJmaWxlUGF0aCIsImkiLCJmaWxlUGF0aFJlZ2V4IiwiZmlsZVBhdGhzIiwia25vd25GaWxlcyIsImZpbGUiLCJpc0N1cnNvcklERSIsImFpIiwicHJvdmlkZXIiLCJDVVJTT1JfSURFIiwicHJvbXB0IiwicHJvbXB0RmlsZSIsIndhc01vZGlmaWVkIiwiYXBwbHlEaXJlY3RGaXhlcyIsImZpbGVFcnJvcnMiLCJjYWxsQUlTZXJ2aWNlIiwiZmlsZUNvbnRlbnQiLCJqb2luIiwiZml4ZWRDb250ZW50IiwibmV3Q29udGVudCIsInJlcGxhY2UiLCJsb2FkQUlDb25maWciLCJjb25maWdGb3JtYXRzIiwiY29uZmlnQmFzZU5hbWUiLCJmb3JtYXQiLCJwb3RlbnRpYWxQYXRoIiwic2xpY2UiLCJpbXBvcnRQYXRoIiwidXJsIiwiVVJMIiwiaHJlZiIsInVybEVycm9yIiwibGV4Q29uZmlnIiwiaW1wb3J0RXJyb3IiLCJjb25maWdEYXRhIiwiZGVmYXVsdCIsImxvYWRFU0xpbnRDb25maWciLCJmaWxlRm9ybWF0IiwicmVtb3ZlRmlsZUNvbW1lbnRzIiwibGludCIsImNtZCIsImNhbGxiYWNrIiwiZXhpdCIsInJlbW92ZUNvbW1lbnRzIiwicmVtb3ZlQ29tbWVudHNGbGFnIiwic2hvdWxkUmVtb3ZlQ29tbWVudHMiLCJjaGVja0xpbnRUeXBlc2NyaXB0Q29uZmlnIiwiaGFzRXNsaW50Q29uZmlnIiwiaGFzTGV4RXNsaW50Q29uZmlnIiwic2hvdWxkQ3JlYXRlVGVtcENvbmZpZyIsInVzZXJDb25maWdQYXRoIiwiY29uZmlnUmVzdWx0IiwiZXNsaW50T3V0cHV0Iiwib3V0cHV0IiwicmVzdWx0IiwiZ2xvYiIsImZpbGVzIiwic3luYyIsImlnbm9yZSIsInByb2Nlc3NlZENvdW50IiwiYWlDb25maWd1cmVkIiwiYWZ0ZXJGaXhSZXN1bHQiLCJ0ZW1wRmlsZVBhdGhz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
948
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9saW50L2xpbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjItUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhlY2F9IGZyb20gJ2V4ZWNhJztcbmltcG9ydCB7ZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jLCB1bmxpbmtTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge2Rpcm5hbWUsIHJlc29sdmUgYXMgcGF0aFJlc29sdmUsIGV4dG5hbWV9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lcn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7cmVzb2x2ZUJpbmFyeVBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmxldCBjdXJyZW50RmlsZW5hbWU6IHN0cmluZztcbmxldCBjdXJyZW50RGlybmFtZTogc3RyaW5nO1xuXG50cnkge1xuICBjdXJyZW50RmlsZW5hbWUgPSBldmFsKCdyZXF1aXJlKFwidXJsXCIpLmZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKScpO1xuICBjdXJyZW50RGlybmFtZSA9IGRpcm5hbWUoY3VycmVudEZpbGVuYW1lKTtcbn0gY2F0Y2h7XG4gIGN1cnJlbnRGaWxlbmFtZSA9IHByb2Nlc3MuY3dkKCk7XG4gIGN1cnJlbnREaXJuYW1lID0gcHJvY2Vzcy5jd2QoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaW50T3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNhY2hlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2FjaGVGaWxlPzogc3RyaW5nO1xuICByZWFkb25seSBjYWNoZUxvY2F0aW9uPzogc3RyaW5nO1xuICByZWFkb25seSBjbGlOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBjb2xvcj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuICByZWFkb25seSBlbnY/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudkluZm8/OiBib29sZWFuO1xuICByZWFkb25seSBleHQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZpeD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGZpeERyeVJ1bj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGZpeFR5cGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZvcm1hdD86IHN0cmluZztcbiAgcmVhZG9ubHkgZ2xvYmFsPzogc3RyaW5nO1xuICByZWFkb25seSBpZ25vcmVQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSBpZ25vcmVQYXR0ZXJuPzogc3RyaW5nO1xuICByZWFkb25seSBpbml0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbWF4V2FybmluZ3M/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5vQ29sb3I/OiBib29sZWFuO1xuICByZWFkb25seSBub0VzbGludHJjPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbm9JZ25vcmU/OiBib29sZWFuO1xuICByZWFkb25seSBub0lubGluZUNvbmZpZz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG91dHB1dEZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhcnNlcj86IHN0cmluZztcbiAgcmVhZG9ubHkgcGFyc2VyT3B0aW9ucz86IHN0cmluZztcbiAgcmVhZG9ubHkgcGx1Z2luPzogc3RyaW5nO1xuICByZWFkb25seSBwcmludENvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSByZW1vdmVDb21tZW50cz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlcG9ydFVudXNlZERpc2FibGVEaXJlY3RpdmVzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcmVzb2x2ZVBsdWdpbnNSZWxhdGl2ZVRvPzogc3RyaW5nO1xuICByZWFkb25seSBydWxlPzogc3RyaW5nO1xuICByZWFkb25seSBydWxlc2Rpcj86IHN0cmluZztcbiAgcmVhZG9ubHkgc3RkaW4/OiBib29sZWFuO1xuICByZWFkb25seSBzdGRpbkZpbGVuYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBMaW50Q2FsbGJhY2sgPSB0eXBlb2YgcHJvY2Vzcy5leGl0O1xuXG5pbnRlcmZhY2UgQ29uZmlnUmVzdWx0IHtcbiAgY29uZmlnUGF0aDogc3RyaW5nO1xuICBvcmlnaW5hbENvbmZpZzogc3RyaW5nIHwgbnVsbDtcbn1cblxuY29uc3QgY3JlYXRlRGVmYXVsdEVTTGludENvbmZpZyA9ICh1c2VUeXBlc2NyaXB0OiBib29sZWFuLCBjd2Q6IHN0cmluZyk6IENvbmZpZ1Jlc3VsdCA9PiB7XG4gIC8vIFVzZSBhIHRlbXBvcmFyeSBmaWxlIHBhdGggaW5zdGVhZCBvZiBjcmVhdGluZyBpbiB0aGUgcHJvamVjdCBkaXJlY3RvcnlcbiAgY29uc3QgY29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgJy5sZXgtdGVtcC1kZWZhdWx0LWVzbGludC5janMnKTtcbiAgY29uc3Qgb3JpZ2luYWxDb25maWcgPSBudWxsO1xuXG4gIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBDb21tb25KUyBtb2R1bGUgdGhhdCByZXF1aXJlcyBMZXgncyBFU0xpbnQgY29uZmlnXG4gIGNvbnN0IGNvbmZpZ0NvbnRlbnQgPSBgLy8gVGVtcG9yYXJ5IEVTTGludCBjb25maWcgZ2VuZXJhdGVkIGJ5IExleFxuY29uc3QgbGV4Q29uZmlnID0gcmVxdWlyZSgnQG5sYWJzL2xleC9lc2xpbnQuY29uZmlnLm1qcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxleENvbmZpZztgO1xuXG4gIHdyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgY29uZmlnQ29udGVudCwgJ3V0ZjgnKTtcblxuICByZXR1cm4ge1xuICAgIGNvbmZpZ1BhdGgsXG4gICAgb3JpZ2luYWxDb25maWdcbiAgfTtcbn07XG5cbmNvbnN0IGRldGVjdFR5cGVTY3JpcHQgPSAoY3dkOiBzdHJpbmcpOiBib29sZWFuID0+IGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAndHNjb25maWcuanNvbicpKTtcblxuLyoqXG4gKiBFbnN1cmUgcGFja2FnZS5qc29uIGhhcyB0eXBlOiBtb2R1bGUgZm9yIEVTTSBzdXBwb3J0XG4gKi9cbmNvbnN0IGVuc3VyZU1vZHVsZVR5cGUgPSAoY3dkOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aFJlc29sdmUoY3dkLCAncGFja2FnZS5qc29uJyk7XG5cbiAgaWYoZXhpc3RzU3luYyhwYWNrYWdlSnNvblBhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhY2thZ2VKc29uQ29udGVudCA9IHJlYWRGaWxlU3luYyhwYWNrYWdlSnNvblBhdGgsICd1dGY4Jyk7XG4gICAgICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocGFja2FnZUpzb25Db250ZW50KTtcblxuICAgICAgLy8gSWYgdHlwZSBpcyBub3Qgc2V0IHRvIG1vZHVsZSwgd2FybiBpbnN0ZWFkIG9mIGF1dG8tbW9kaWZ5aW5nXG4gICAgICBpZihwYWNrYWdlSnNvbi50eXBlICE9PSAnbW9kdWxlJykge1xuICAgICAgICBsb2coJ1dhcm5pbmc6IHBhY2thZ2UuanNvbiBzaG91bGQgaGF2ZSBcInR5cGVcIjogXCJtb2R1bGVcIiBmb3IgRVNNIHN1cHBvcnQuIFBsZWFzZSBhZGQgdGhpcyBtYW51YWxseS4nLCAnd2FybicsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoKF9lcnJvcikge1xuICAgICAgLy8gSWdub3JlIGVycm9yc1xuICAgIH1cbiAgfVxufTtcblxuY29uc3QgaW5zdGFsbERlcGVuZGVuY2llcyA9IGFzeW5jIChjd2Q6IHN0cmluZywgdXNlVHlwZXNjcmlwdDogYm9vbGVhbiwgcXVpZXQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIGxvZygnVXNpbmcgVHlwZVNjcmlwdCBFU0xpbnQgZnJvbSBMZXguLi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgfSBlbHNlIHtcbiAgICBsb2coJ1VzaW5nIEVTTGludCBmcm9tIExleC4uLicsICdpbmZvJywgcXVpZXQpO1xuICB9XG59O1xuXG5jb25zdCBydW5Fc2xpbnRXaXRoTGV4ID0gYXN5bmMgKFxuICBjd2Q6IHN0cmluZyxcbiAgcXVpZXQ6IGJvb2xlYW4sXG4gIGNsaU5hbWU6IHN0cmluZyxcbiAgZml4OiBib29sZWFuLFxuICBkZWJ1ZzogYm9vbGVhbixcbiAgdXNlVHlwZXNjcmlwdDogYm9vbGVhbixcbiAgY2FwdHVyZU91dHB1dD86IChvdXRwdXQ6IHN0cmluZyk9PiB2b2lkXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgJ2VzbGludC5jb25maWcubWpzJyk7XG4gICAgY29uc3QgcHJvamVjdENvbmZpZ1BhdGhUcyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ2VzbGludC5jb25maWcudHMnKTtcbiAgICBjb25zdCBoYXNQcm9qZWN0Q29uZmlnID0gZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aCkgfHwgZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aFRzKTtcbiAgICBjb25zdCBoYXNMZXhDb25maWdFc2xpbnQgPSBMZXhDb25maWcuY29uZmlnLmVzbGludCAmJiBPYmplY3Qua2V5cyhMZXhDb25maWcuY29uZmlnLmVzbGludCkubGVuZ3RoID4gMDtcblxuICAgIGNvbnN0IHBvc3NpYmxlUGF0aHMgPSBbXG4gICAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJy4uLy4uLy4uLy4uL2VzbGludC5jb25maWcubWpzJyksXG4gICAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJy4uLy4uLy4uLy4uL2VzbGludC5jb25maWcudHMnKSxcbiAgICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuZW52LkxFWF9IT01FIHx8ICcvdXNyL2xvY2FsL2xpYi9ub2RlX21vZHVsZXMvQG5sYWJzL2xleCcsICdlc2xpbnQuY29uZmlnLm1qcycpLFxuICAgICAgcGF0aFJlc29sdmUocHJvY2Vzcy5lbnYuTEVYX0hPTUUgfHwgJy91c3IvbG9jYWwvbGliL25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4JywgJ2VzbGludC5jb25maWcudHMnKVxuICAgIF07XG5cbiAgICBsZXQgbGV4Q29uZmlnUGF0aCA9ICcnO1xuXG4gICAgZm9yKGNvbnN0IHBhdGggb2YgcG9zc2libGVQYXRocykge1xuICAgICAgaWYoZXhpc3RzU3luYyhwYXRoKSkge1xuICAgICAgICBsZXhDb25maWdQYXRoID0gcGF0aDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGNvbmZpZ1BhdGggPSAnJztcbiAgICBsZXQgdGVtcENvbmZpZ1BhdGggPSAnJztcblxuICAgIC8vIFByaW9yaXR5OlxuICAgIC8vIDEuIFByb2plY3QgZXNsaW50LmNvbmZpZyBmaWxlc1xuICAgIC8vIDIuIEVTTGludCBjb25maWcgaW4gbGV4LmNvbmZpZy4qIGZpbGVcbiAgICAvLyAzLiBMZXgncyBkZWZhdWx0IGVzbGludC5jb25maWcubWpzXG4gICAgLy8gNC4gQ3JlYXRlIGEgdGVtcG9yYXJ5IGNvbmZpZyBmaWxlXG4gICAgaWYoaGFzUHJvamVjdENvbmZpZykge1xuICAgICAgY29uZmlnUGF0aCA9IGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGhUcykgPyBwcm9qZWN0Q29uZmlnUGF0aFRzIDogcHJvamVjdENvbmZpZ1BhdGg7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFVzaW5nIHByb2plY3QgRVNMaW50IGNvbmZpZyBmaWxlOiAke2NvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmKGhhc0xleENvbmZpZ0VzbGludCkge1xuICAgICAgLy8gV2hlbiB1c2luZyBsZXguY29uZmlnLmVzbGludCwgY3JlYXRlIGEgdGVtcG9yYXJ5IEpTIGNvbmZpZyBmaWxlIChub3QgSlNPTilcbiAgICAgIC8vIHRvIGF2b2lkIEVTTSBKU09OIGltcG9ydCBpc3N1ZXNcbiAgICAgIHRlbXBDb25maWdQYXRoID0gcGF0aFJlc29sdmUoY3dkLCAnLmxleC10ZW1wLWVzbGludC5janMnKTtcblxuICAgICAgLy8gQ3JlYXRlIGEgQ29tbW9uSlMgbW9kdWxlIHRoYXQgZXh0ZW5kcyBMZXgncyBlc2xpbnQgY29uZmlnXG4gICAgICBjb25zdCBjb25maWdDb250ZW50ID0gYC8vIFRlbXBvcmFyeSBFU0xpbnQgY29uZmlnIGdlbmVyYXRlZCBieSBMZXhcbmNvbnN0IGxleENvbmZpZyA9IHJlcXVpcmUoJ0BubGFicy9sZXgvZXNsaW50LmNvbmZpZy5tanMnKTtcbmNvbnN0IHVzZXJDb25maWcgPSAke0pTT04uc3RyaW5naWZ5KExleENvbmZpZy5jb25maWcuZXNsaW50LCBudWxsLCAyKX07XG5cbi8vIE1lcmdlIExleCdzIGNvbmZpZyB3aXRoIHVzZXIgY29uZmlnXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLi4ubGV4Q29uZmlnXG59O2A7XG5cbiAgICAgIHdyaXRlRmlsZVN5bmModGVtcENvbmZpZ1BhdGgsIGNvbmZpZ0NvbnRlbnQsICd1dGY4Jyk7XG4gICAgICBjb25maWdQYXRoID0gdGVtcENvbmZpZ1BhdGg7XG5cbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZyhgVXNpbmcgRVNMaW50IGNvbmZpZyBmcm9tIGxleC5jb25maWcuKiBmaWxlIHZpYSB0ZW1wIGZpbGU6ICR7dGVtcENvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmKGxleENvbmZpZ1BhdGggJiYgZXhpc3RzU3luYyhsZXhDb25maWdQYXRoKSkge1xuICAgICAgY29uZmlnUGF0aCA9IGxleENvbmZpZ1BhdGg7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFVzaW5nIExleCBFU0xpbnQgY29uZmlnIGZpbGU6ICR7Y29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGRlZmF1bHQgY29uZmlnIGZpbGUgaWYgbm8gb3RoZXIgY29uZmlnIGlzIGZvdW5kXG4gICAgICB0ZW1wQ29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgJy5sZXgtdGVtcC1kZWZhdWx0LWVzbGludC5janMnKTtcblxuICAgICAgLy8gQ3JlYXRlIGEgYmFzaWMgRVNMaW50IGNvbmZpZ1xuICAgICAgY29uc3QgY29uZmlnQ29udGVudCA9IGAvLyBUZW1wb3JhcnkgZGVmYXVsdCBFU0xpbnQgY29uZmlnIGdlbmVyYXRlZCBieSBMZXhcbmNvbnN0IGxleENvbmZpZyA9IHJlcXVpcmUoJ0BubGFicy9sZXgvZXNsaW50LmNvbmZpZy5tanMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBsZXhDb25maWc7YDtcblxuICAgICAgd3JpdGVGaWxlU3luYyh0ZW1wQ29uZmlnUGF0aCwgY29uZmlnQ29udGVudCwgJ3V0ZjgnKTtcbiAgICAgIGNvbmZpZ1BhdGggPSB0ZW1wQ29uZmlnUGF0aDtcblxuICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgbG9nKGBDcmVhdGVkIHRlbXBvcmFyeSBkZWZhdWx0IEVTTGludCBjb25maWcgYXQ6ICR7dGVtcENvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coJ05vIEVTTGludCBjb25maWd1cmF0aW9uIGZvdW5kLiBVc2luZyBMZXggZGVmYXVsdCBjb25maWd1cmF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVzbGludEJpbmFyeSA9IHJlc29sdmVCaW5hcnlQYXRoKCdlc2xpbnQnLCAnZXNsaW50Jyk7XG5cbiAgICBpZighZXNsaW50QmluYXJ5KSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEVTTGludCBiaW5hcnkgbm90IGZvdW5kIGluIExleCdzIG5vZGVfbW9kdWxlc2AsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGxvZygnUGxlYXNlIHJlaW5zdGFsbCBMZXggb3IgY2hlY2sgeW91ciBpbnN0YWxsYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICAvLyBCYXNlIEVTTGludCBhcmd1bWVudHNcbiAgICBjb25zdCBiYXNlRXNsaW50QXJncyA9IFtcbiAgICAgIC4uLihmaXggPyBbJy0tZml4J10gOiBbXSksXG4gICAgICAuLi4oZGVidWcgPyBbJy0tZGVidWcnXSA6IFtdKSxcbiAgICAgICctLW5vLWVycm9yLW9uLXVubWF0Y2hlZC1wYXR0ZXJuJyxcbiAgICAgICctLW5vLXdhcm4taWdub3JlZCdcbiAgICBdO1xuXG4gICAgLy8gQWRkIGNvbmZpZyBwYXRoXG4gICAgY29uc3QgY29uZmlnQXJncyA9IGNvbmZpZ1BhdGggPyBbJy0tY29uZmlnJywgY29uZmlnUGF0aF0gOiBbXTtcblxuICAgIGNvbnN0IGpzUmVzdWx0ID0gYXdhaXQgZXhlY2EoZXNsaW50QmluYXJ5LCBbXG4gICAgICAnc3JjLyoqLyoue2pzLGpzeH0nLFxuICAgICAgLi4uY29uZmlnQXJncyxcbiAgICAgIC4uLmJhc2VFc2xpbnRBcmdzXG4gICAgXSwge1xuICAgICAgY3dkLFxuICAgICAgcmVqZWN0OiBmYWxzZSxcbiAgICAgIHNoZWxsOiB0cnVlLFxuICAgICAgc3RkaW86ICdwaXBlJ1xuICAgIH0pO1xuXG4gICAgaWYoanNSZXN1bHQuc3Rkb3V0KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5sb2coanNSZXN1bHQuc3Rkb3V0KTtcbiAgICAgIGlmKGNhcHR1cmVPdXRwdXQpIHtcbiAgICAgICAgY2FwdHVyZU91dHB1dChqc1Jlc3VsdC5zdGRvdXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKGpzUmVzdWx0LnN0ZGVycikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoanNSZXN1bHQuc3RkZXJyKTtcbiAgICAgIGlmKGNhcHR1cmVPdXRwdXQpIHtcbiAgICAgICAgY2FwdHVyZU91dHB1dChqc1Jlc3VsdC5zdGRlcnIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB0c1Jlc3VsdDogYW55ID0ge2V4aXRDb2RlOiAwLCBzdGRlcnI6ICcnLCBzdGRvdXQ6ICcnfTtcbiAgICBpZih1c2VUeXBlc2NyaXB0KSB7XG4gICAgICB0c1Jlc3VsdCA9IGF3YWl0IGV4ZWNhKGVzbGludEJpbmFyeSwgW1xuICAgICAgICAnc3JjLyoqLyoue3RzLHRzeH0nLFxuICAgICAgICAuLi5jb25maWdBcmdzLFxuICAgICAgICAuLi5iYXNlRXNsaW50QXJnc1xuICAgICAgXSwge1xuICAgICAgICBjd2QsXG4gICAgICAgIHJlamVjdDogZmFsc2UsXG4gICAgICAgIHNoZWxsOiB0cnVlLFxuICAgICAgICBzdGRpbzogJ3BpcGUnXG4gICAgICB9KTtcblxuICAgICAgaWYodHNSZXN1bHQuc3Rkb3V0KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUubG9nKHRzUmVzdWx0LnN0ZG91dCk7XG4gICAgICB9XG5cbiAgICAgIGlmKHRzUmVzdWx0LnN0ZGVycikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKHRzUmVzdWx0LnN0ZGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gdXAgdGVtcCBmaWxlIGlmIGNyZWF0ZWRcbiAgICBpZih0ZW1wQ29uZmlnUGF0aCAmJiBleGlzdHNTeW5jKHRlbXBDb25maWdQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdW5saW5rU3luYyh0ZW1wQ29uZmlnUGF0aCk7XG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKGBSZW1vdmVkIHRlbXBvcmFyeSBFU0xpbnQgY29uZmlnIGF0ICR7dGVtcENvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgLy8gSWdub3JlIGVycm9ycyB3aGVuIGNsZWFuaW5nIHVwXG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKGBGYWlsZWQgdG8gcmVtb3ZlIHRlbXBvcmFyeSBFU0xpbnQgY29uZmlnOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBlc2xpbnROb3RGb3VuZCA9IGpzUmVzdWx0LnN0ZGVycj8uaW5jbHVkZXMoJ2NvbW1hbmQgbm90IGZvdW5kJykgfHwganNSZXN1bHQuc3RkZXJyPy5pbmNsdWRlcygnZXNsaW50OiBjb21tYW5kIG5vdCBmb3VuZCcpO1xuICAgIGlmKGVzbGludE5vdEZvdW5kKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0VTTGludCBub3QgZm91bmQhJyk7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IExleCdzIEVTTGludCBiaW5hcnkgbm90IGZvdW5kLiBQbGVhc2UgcmVpbnN0YWxsIExleCBvciBjaGVjayB5b3VyIGluc3RhbGxhdGlvbi5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBpZihqc1Jlc3VsdC5leGl0Q29kZSA9PT0gMCAmJiB0c1Jlc3VsdC5leGl0Q29kZSA9PT0gMCkge1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdMaW50aW5nIGNvbXBsZXRlZCEnKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IG5vRmlsZXNGb3VuZCA9XG4gICAgICAoanNSZXN1bHQuc3RkZXJyPy5pbmNsdWRlcygnTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpIHx8IGpzUmVzdWx0LnN0ZG91dD8uaW5jbHVkZXMoJ05vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknKSkgJiZcbiAgICAgICghdXNlVHlwZXNjcmlwdCB8fCB0c1Jlc3VsdC5zdGRlcnI/LmluY2x1ZGVzKCdObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JykgfHwgdHNSZXN1bHQuc3Rkb3V0Py5pbmNsdWRlcygnTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpKTtcblxuICAgIGlmKG5vRmlsZXNGb3VuZCkge1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdObyBmaWxlcyBmb3VuZCB0byBsaW50Jyk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgc3Bpbm5lci5mYWlsKCdMaW50aW5nIGZhaWxlZCEnKTtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEVTTGludCBmb3VuZCBpc3N1ZXMgaW4geW91ciBjb2RlLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICByZXR1cm4gMTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbCgnTGludGluZyBmYWlsZWQhJyk7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIHJldHVybiAxO1xuICB9XG59O1xuXG5jb25zdCBhcHBseUFJRml4ID0gYXN5bmMgKFxuICBjd2Q6IHN0cmluZyxcbiAgZXJyb3JzOiBzdHJpbmcsXG4gIHF1aWV0OiBib29sZWFuXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuICBzcGlubmVyLnN0YXJ0KCdVc2luZyBBSSB0byBmaXggcmVtYWluaW5nIGxpbnQgaXNzdWVzLi4uJyk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlRXJyb3JNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG4gICAgY29uc3QgbGluZXMgPSBlcnJvcnMuc3BsaXQoJ1xcbicpO1xuICAgIGxldCBjdXJyZW50RmlsZSA9ICcnO1xuXG4gICAgZm9yKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGlmKGxpbmUubWF0Y2goL14oXFwvfFtBLVpdOlxcXFwpLio/XFwuKGpzfGpzeHx0c3x0c3gpJC8pKSB7XG4gICAgICAgIGN1cnJlbnRGaWxlID0gbGluZS50cmltKCk7XG4gICAgICAgIGlmKCFmaWxlRXJyb3JNYXAuaGFzKGN1cnJlbnRGaWxlKSkge1xuICAgICAgICAgIGZpbGVFcnJvck1hcC5zZXQoY3VycmVudEZpbGUsIFtdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmKGN1cnJlbnRGaWxlICYmIGxpbmUudHJpbSgpICYmIGxpbmUubWF0Y2goL1xccytcXGQrOlxcZCtcXHMrKGVycm9yfHdhcm5pbmcpXFxzKy8pKSB7XG4gICAgICAgIGNvbnN0IGVycm9yQXJyYXkgPSBmaWxlRXJyb3JNYXAuZ2V0KGN1cnJlbnRGaWxlKTtcbiAgICAgICAgaWYoZXJyb3JBcnJheSkge1xuICAgICAgICAgIGVycm9yQXJyYXkucHVzaChsaW5lLnRyaW0oKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihmaWxlRXJyb3JNYXAuc2l6ZSA9PT0gMCkge1xuICAgICAgbG9nKCdVc2luZyBhbHRlcm5hdGl2ZSBlcnJvciBwYXJzaW5nIHN0cmF0ZWd5JywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIGNvbnN0IHNlY3Rpb25zID0gZXJyb3JzLnNwbGl0KCdcXG5cXG4nKTtcblxuICAgICAgZm9yKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcbiAgICAgICAgaWYoc2VjdGlvbi50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5lcyA9IHNlY3Rpb24uc3BsaXQoJ1xcbicpO1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGxpbmVzWzBdLnRyaW0oKTtcblxuICAgICAgICBpZihmaWxlUGF0aC5tYXRjaCgvXFwuKGpzfGpzeHx0c3x0c3gpJC8pKSB7XG4gICAgICAgICAgZmlsZUVycm9yTWFwLnNldChmaWxlUGF0aCwgW10pO1xuXG4gICAgICAgICAgZm9yKGxldCBpID0gMTsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZihsaW5lc1tpXS50cmltKCkgIT09ICcnKSB7XG4gICAgICAgICAgICAgIGZpbGVFcnJvck1hcC5nZXQoZmlsZVBhdGgpPy5wdXNoKGxpbmVzW2ldLnRyaW0oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoZmlsZUVycm9yTWFwLnNpemUgPT09IDApIHtcbiAgICAgIGxvZygnVXNpbmcgZGlyZWN0IGZpbGUgcGF0aCBleHRyYWN0aW9uJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIGNvbnN0IGZpbGVQYXRoUmVnZXggPSAvKD86XFwvfFtBLVpdOlxcXFwpKD86W146XFxuXStcXC8pKlteOlxcbl0rXFwuKGpzfGpzeHx0c3x0c3gpL2c7XG4gICAgICBjb25zdCBmaWxlUGF0aHMgPSBlcnJvcnMubWF0Y2goZmlsZVBhdGhSZWdleCkgfHwgW107XG5cbiAgICAgIGZvcihjb25zdCBmaWxlUGF0aCBvZiBmaWxlUGF0aHMpIHtcbiAgICAgICAgaWYoIWZpbGVFcnJvck1hcC5oYXMoZmlsZVBhdGgpICYmIGV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgZmlsZUVycm9yTWFwLnNldChmaWxlUGF0aCwgW10pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtub3duRmlsZXMgPSBbXG4gICAgICAgIHBhdGhSZXNvbHZlKGN3ZCwgJ3NyYy9jcmVhdGUvY2hhbmdlbG9nLnRzJyksXG4gICAgICAgIHBhdGhSZXNvbHZlKGN3ZCwgJ3NyYy91dGlscy9haVNlcnZpY2UudHMnKSxcbiAgICAgICAgcGF0aFJlc29sdmUoY3dkLCAnc3JjL3V0aWxzL2FwcC50cycpLFxuICAgICAgICBwYXRoUmVzb2x2ZShjd2QsICdzcmMvdXRpbHMvcmVhY3RTaGltLnRzJyksXG4gICAgICAgIHBhdGhSZXNvbHZlKGN3ZCwgJ3NyYy9jb21tYW5kcy9saW50L2F1dG9maXguanMnKVxuICAgICAgXTtcblxuICAgICAgZm9yKGNvbnN0IGZpbGUgb2Yga25vd25GaWxlcykge1xuICAgICAgICBpZihleGlzdHNTeW5jKGZpbGUpICYmICFmaWxlRXJyb3JNYXAuaGFzKGZpbGUpKSB7XG4gICAgICAgICAgZmlsZUVycm9yTWFwLnNldChmaWxlLCBbXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IoY29uc3QgZmlsZVBhdGggb2YgZmlsZUVycm9yTWFwLmtleXMoKSkge1xuICAgICAgaWYoIWV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgICAgIGxvZyhgRmlsZSBub3QgZm91bmQ6ICR7ZmlsZVBhdGh9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsb2coYFByb2Nlc3NpbmcgZmlsZTogJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcblxuICAgICAgY29uc3QgaXNDdXJzb3JJREUgPSBMZXhDb25maWcuY29uZmlnLmFpPy5wcm92aWRlciA9PT0gJ2N1cnNvcicgfHwgcHJvY2Vzcy5lbnYuQ1VSU09SX0lERSA9PT0gJ3RydWUnO1xuXG4gICAgICBpZihpc0N1cnNvcklERSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHByb21wdCA9IGBGaXggYWxsIEVTTGludCBlcnJvcnMgaW4gdGhpcyBmaWxlLiBGb2N1cyBvbjpcbjEuIEZpeGluZyBuYW1pbmcgY29udmVudGlvbnNcbjIuIEZpeGluZyBzb3J0LWtleXMgaXNzdWVzXG4zLiBSZXBsYWNpbmcgY29uc29sZS5sb2cgd2l0aCBsb2cgdXRpbGl0eVxuNC4gRml4aW5nIG5vLXBsdXNwbHVzIGlzc3Vlc1xuNS4gRml4aW5nIHVubmVjZXNzYXJ5IGVzY2FwZSBjaGFyYWN0ZXJzXG42LiBGaXhpbmcgb3RoZXIgRVNMaW50IGVycm9yc1xuXG5DUklUSUNBTCBSRVFVSVJFTUVOVFM6XG4tIE9OTFkgZml4IHRoZSBzcGVjaWZpYyBsaW5lcyB3aXRoIEVTTGludCBlcnJvcnNcbi0gRE8gTk9UIG1vZGlmeSBhbnkgb3RoZXIgbGluZXMgb2YgY29kZVxuLSBETyBOT1QgcmVtb3ZlIGxpbmUgYnJlYWtzIHVubGVzcyB0aGV5IGFyZSBzcGVjaWZpY2FsbHkgY2F1c2luZyBFU0xpbnQgZXJyb3JzXG4tIERPIE5PVCBjb25kZW5zZSBtdWx0aS1saW5lIHN0cnVjdHVyZXMgdG8gc2luZ2xlIGxpbmVzXG4tIFBSRVNFUlZFIGFsbCBleGlzdGluZyBsaW5lIGJyZWFrcyBhbmQgZm9ybWF0dGluZyB0aGF0IGlzIG5vdCBjYXVzaW5nIGVycm9yc1xuXG5TUEVDSUZJQyBGT1JNQVRUSU5HIFJVTEVTOlxuLSBNYWludGFpbiBwcm9wZXIgaW5kZW50YXRpb24gKDIgc3BhY2VzKVxuLSBLZWVwIGxpbmUgYnJlYWtzIGJldHdlZW4gY2xhc3MvaW50ZXJmYWNlIGRlY2xhcmF0aW9uIGFuZCB0aGVpciBtZW1iZXJzXG4tIEtlZXAgbGluZSBicmVha3MgYmV0d2VlbiBtZXRob2RzXG4tIEVuc3VyZSB0aGVyZSBpcyBhIGxpbmUgYnJlYWsgYWZ0ZXIgb3BlbmluZyBicmFjZXMgZm9yIGNsYXNzZXMsIGludGVyZmFjZXMsIGFuZCBtZXRob2RzXG4tIERPIE5PVCBwbGFjZSBjbGFzcy9pbnRlcmZhY2UgcHJvcGVydGllcyBvciBtZXRob2RzIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIG9wZW5pbmcgYnJhY2Vcbi0gUHJlc2VydmUgZW1wdHkgbGluZXMgYmV0d2VlbiBsb2dpY2FsIGNvZGUgYmxvY2tzXG4tIFBSRVNFUlZFIG11bHRpLWxpbmUgaW1wb3J0cyAtIGRvIG5vdCBjb25kZW5zZSB0aGVtIHRvIHNpbmdsZSBsaW5lc1xuLSBQUkVTRVJWRSBtdWx0aS1saW5lIG9iamVjdC9hcnJheSBkZWNsYXJhdGlvbnMgLSBkbyBub3QgY29uZGVuc2UgdGhlbSB0byBzaW5nbGUgbGluZXNcblxuU09SVC1LRVlTIFJVTEUgKEhJR0hFU1QgUFJJT1JJVFkpOlxuLSBBbGwgb2JqZWN0IGxpdGVyYWwga2V5cyBNVVNUIGJlIHNvcnRlZCBhbHBoYWJldGljYWxseSBpbiBhc2NlbmRpbmcgb3JkZXJcbi0gVGhpcyBhcHBsaWVzIHRvIEFMTCBvYmplY3RzIGluIHRoZSBmaWxlLCBub3QganVzdCB0aG9zZSB3aXRoIGV4cGxpY2l0IHNvcnQta2V5cyBlcnJvcnNcbi0gRXhhbXBsZToge2I6IDIsIGE6IDEsIGM6IDN9IHNob3VsZCBiZWNvbWUge2E6IDEsIGI6IDIsIGM6IDN9XG4tIFByZXNlcnZlIHRoZSBvcmlnaW5hbCBmb3JtYXR0aW5nIGFuZCBsaW5lIGJyZWFrcyB3aGVuIHNvcnRpbmdcblxuRXhhbXBsZSBvZiBDT1JSRUNUIGZvcm1hdHRpbmcgKERPIE5PVCBDSEFOR0UpOlxuXG5jb25zdHJ1Y3RvcihmbHV4OiBGbHV4RnJhbWV3b3JrLCBDdXN0b21BZGFwdGVyOiB0eXBlb2YgRXZlbnQgPSBFdmVudCkge1xuICB0aGlzLkN1c3RvbUFkYXB0ZXIgPSBDdXN0b21BZGFwdGVyO1xuICB0aGlzLmZsdXggPSBmbHV4O1xufVxuXG5pbXBvcnQge1xuICBhcHAsXG4gIGV2ZW50cyxcbiAgaW1hZ2VzLFxuICBsb2NhdGlvbnMsXG4gIG1lc3NhZ2VzLFxuICBwb3N0cyxcbiAgdGFncyxcbiAgdXNlcnMsXG4gIHdlYnNvY2tldFxufSBmcm9tICcuL3N0b3Jlcyc7XG5cbmNvbnN0IGNvbmZpZyA9IHtcbiAgYXBpS2V5OiAndmFsdWUnLFxuICBiYXNlVXJsOiAnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20nLFxuICB0aW1lb3V0OiA1MDAwXG59O1xuXG5FeGFtcGxlIG9mIElOQ09SUkVDVCBmb3JtYXR0aW5nIChGSVggVEhJUyk6XG4gIHN0YXRpYyByZWFkb25seSBPVEhFUl9DT05TVEFOVDogc3RyaW5nID0gJ09USEVSX0NPTlNUQU5UJztcbn1cblxuY29uc3RydWN0b3IoZmx1eDogRmx1eEZyYW1ld29yaywgQ3VzdG9tQWRhcHRlcjogdHlwZW9mIEV2ZW50ID0gRXZlbnQpIHt0aGlzLkN1c3RvbUFkYXB0ZXIgPSBDdXN0b21BZGFwdGVyO1xuICB0aGlzLmZsdXggPSBmbHV4O31cblxuaW1wb3J0IHthcHAsIGV2ZW50cywgaW1hZ2VzLCBsb2NhdGlvbnMsIG1lc3NhZ2VzLCBwb3N0cywgdGFncywgdXNlcnMsIHdlYnNvY2tldH0gZnJvbSAnLi9zdG9yZXMnO1xuXG5jb25zdCBjb25maWcgPSB7YmFzZVVybDogJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tJywgYXBpS2V5OiAndmFsdWUnLCB0aW1lb3V0OiA1MDAwfTtcblxuRml4IE9OTFkgdGhlIHNwZWNpZmljIEVTTGludCBlcnJvcnMuIFJldHVybiB0aGUgcHJvcGVybHkgZm9ybWF0dGVkIGNvZGUuYDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwcm9tcHRGaWxlID0gcGF0aFJlc29sdmUoY3dkLCAnLmN1cnNvcl9wcm9tcHRfdGVtcC50eHQnKTtcbiAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMocHJvbXB0RmlsZSwgcHJvbXB0LCAndXRmOCcpO1xuXG4gICAgICAgICAgICAvLyBVc2UgQ3Vyc29yIENMSSB0byBmaXggdGhlIGZpbGVcbiAgICAgICAgICAgIGF3YWl0IGV4ZWNhKCdjdXJzb3InLCBbJ2VkaXQnLCAnLS1maWxlJywgZmlsZVBhdGgsICctLXByb21wdC1maWxlJywgcHJvbXB0RmlsZV0sIHtcbiAgICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgICByZWplY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICBzdGRpbzogJ3BpcGUnXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdW5saW5rU3luYyhwcm9tcHRGaWxlKTtcbiAgICAgICAgICAgIH0gY2F0Y2goX2Vycm9yKSB7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxvZyhgQXBwbGllZCBDdXJzb3IgQUkgZml4ZXMgdG8gJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICB9IGNhdGNoe1xuICAgICAgICAgICAgY29uc3Qgd2FzTW9kaWZpZWQgPSBhd2FpdCBhcHBseURpcmVjdEZpeGVzKGZpbGVQYXRoLCBxdWlldCk7XG4gICAgICAgICAgICBpZih3YXNNb2RpZmllZCkge1xuICAgICAgICAgICAgICBsb2coYEFwcGxpZWQgZGlyZWN0IGZpeGVzIHRvICR7ZmlsZVBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgbG9nKGBFcnJvciB1c2luZyBDdXJzb3IgQUk6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgYXdhaXQgYXBwbHlEaXJlY3RGaXhlcyhmaWxlUGF0aCwgcXVpZXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB3YXNNb2RpZmllZCA9IGF3YWl0IGFwcGx5RGlyZWN0Rml4ZXMoZmlsZVBhdGgsIHF1aWV0KTtcbiAgICAgICAgaWYod2FzTW9kaWZpZWQpIHtcbiAgICAgICAgICBsb2coYEFwcGxpZWQgZGlyZWN0IGZpeGVzIHRvICR7ZmlsZVBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlRXJyb3JzID0gZmlsZUVycm9yTWFwLmdldChmaWxlUGF0aCkgfHwgW107XG4gICAgICAgIGlmKGZpbGVFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7Y2FsbEFJU2VydmljZX0gPSBhd2FpdCBpbXBvcnQoJy4uLy4uL3V0aWxzL2FpU2VydmljZS5qcycpO1xuXG4gICAgICAgICAgICBjb25zdCBmaWxlQ29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcblxuICAgICAgICAgICAgY29uc3QgcHJvbXB0ID0gYEZpeCB0aGUgZm9sbG93aW5nIEVTTGludCBlcnJvcnMgaW4gdGhpcyBjb2RlOlxuJHtmaWxlRXJyb3JzLmpvaW4oJ1xcbicpfVxuXG5IZXJlJ3MgdGhlIGNvZGU6XG5cXGBcXGBcXGBcbiR7ZmlsZUNvbnRlbnR9XG5cXGBcXGBcXGBcblxuQ1JJVElDQUwgUkVRVUlSRU1FTlRTOlxuLSBPTkxZIGZpeCB0aGUgc3BlY2lmaWMgbGluZXMgd2l0aCBFU0xpbnQgZXJyb3JzXG4tIERPIE5PVCBtb2RpZnkgYW55IG90aGVyIGxpbmVzIG9mIGNvZGVcbi0gRE8gTk9UIHJlbW92ZSBsaW5lIGJyZWFrcyB1bmxlc3MgdGhleSBhcmUgc3BlY2lmaWNhbGx5IGNhdXNpbmcgRVNMaW50IGVycm9yc1xuLSBETyBOT1QgY29uZGVuc2UgbXVsdGktbGluZSBzdHJ1Y3R1cmVzIHRvIHNpbmdsZSBsaW5lc1xuLSBQUkVTRVJWRSBhbGwgZXhpc3RpbmcgbGluZSBicmVha3MgYW5kIGZvcm1hdHRpbmcgdGhhdCBpcyBub3QgY2F1c2luZyBlcnJvcnNcblxuU1BFQ0lGSUMgRk9STUFUVElORyBSVUxFUzpcbi0gTWFpbnRhaW4gcHJvcGVyIGluZGVudGF0aW9uICgyIHNwYWNlcylcbi0gS2VlcCBsaW5lIGJyZWFrcyBiZXR3ZWVuIGNsYXNzL2ludGVyZmFjZSBkZWNsYXJhdGlvbiBhbmQgdGhlaXIgbWVtYmVyc1xuLSBLZWVwIGxpbmUgYnJlYWtzIGJldHdlZW4gbWV0aG9kc1xuLSBFbnN1cmUgdGhlcmUgaXMgYSBsaW5lIGJyZWFrIGFmdGVyIG9wZW5pbmcgYnJhY2VzIGZvciBjbGFzc2VzLCBpbnRlcmZhY2VzLCBhbmQgbWV0aG9kc1xuLSBETyBOT1QgcGxhY2UgY2xhc3MvaW50ZXJmYWNlIHByb3BlcnRpZXMgb3IgbWV0aG9kcyBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBvcGVuaW5nIGJyYWNlXG4tIFByZXNlcnZlIGVtcHR5IGxpbmVzIGJldHdlZW4gbG9naWNhbCBjb2RlIGJsb2Nrc1xuLSBQUkVTRVJWRSBtdWx0aS1saW5lIGltcG9ydHMgLSBkbyBub3QgY29uZGVuc2UgdGhlbSB0byBzaW5nbGUgbGluZXNcbi0gUFJFU0VSVkUgbXVsdGktbGluZSBvYmplY3QvYXJyYXkgZGVjbGFyYXRpb25zIC0gZG8gbm90IGNvbmRlbnNlIHRoZW0gdG8gc2luZ2xlIGxpbmVzXG5cblNPUlQtS0VZUyBSVUxFIChISUdIRVNUIFBSSU9SSVRZKTpcbi0gQWxsIG9iamVjdCBsaXRlcmFsIGtleXMgTVVTVCBiZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgaW4gYXNjZW5kaW5nIG9yZGVyXG4tIFRoaXMgYXBwbGllcyB0byBBTEwgb2JqZWN0cyBpbiB0aGUgZmlsZSwgbm90IGp1c3QgdGhvc2Ugd2l0aCBleHBsaWNpdCBzb3J0LWtleXMgZXJyb3JzXG4tIEV4YW1wbGU6IHtiOiAyLCBhOiAxLCBjOiAzfSBzaG91bGQgYmVjb21lIHthOiAxLCBiOiAyLCBjOiAzfVxuLSBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZm9ybWF0dGluZyBhbmQgbGluZSBicmVha3Mgd2hlbiBzb3J0aW5nXG5cbldIQVQgVE8gRklYOlxuMS4gU29ydGluZyBhbGwgb2JqZWN0IGtleXMgYWxwaGFiZXRpY2FsbHkgKHNvcnQta2V5cyBydWxlKSAtIEFMTCBvYmplY3RzIG11c3QgaGF2ZSBzb3J0ZWQga2V5c1xuMi4gRml4aW5nIG5hbWluZyBjb252ZW50aW9ucyAtIE9OTFkgZm9yIHZhcmlhYmxlcy9mdW5jdGlvbnMgd2l0aCBuYW1pbmcgZXJyb3JzXG4zLiBSZXBsYWNpbmcgY29uc29sZS5sb2cgd2l0aCBsb2cgdXRpbGl0eSAtIE9OTFkgZm9yIGNvbnNvbGUubG9nIHN0YXRlbWVudHNcbjQuIEZpeGluZyBuby1wbHVzcGx1cyBpc3N1ZXMgLSBPTkxZIGZvciArKy8tLSBvcGVyYXRvcnNcbjUuIEZpeGluZyB1bm5lY2Vzc2FyeSBlc2NhcGUgY2hhcmFjdGVycyAtIE9OTFkgZm9yIGVzY2FwZWQgY2hhcmFjdGVycyB0aGF0IGRvbid0IG5lZWQgZXNjYXBpbmdcbjYuIFByb3BlciBpbmRlbnRhdGlvbiBhbmQgc3BhY2luZyAtIE9OTFkgd2hlcmUgc3BlY2lmaWNhbGx5IHJlcXVpcmVkIGJ5IGVycm9yc1xuNy4gU3RyaW5nIHF1b3RlcyBjb25zaXN0ZW5jeSAodXNlIHNpbmdsZSBxdW90ZXMpIC0gT05MWSBmb3Igc3RyaW5nIGxpdGVyYWxzIHdpdGggcXVvdGUgZXJyb3JzXG44LiBJbXBvcnQgb3JkZXIgYW5kIHNwYWNpbmcgLSBPTkxZIGZvciBpbXBvcnRzIHdpdGggb3JkZXIvc3BhY2luZyBlcnJvcnNcbjkuIEZ1bmN0aW9uIHBhcmFtZXRlciBmb3JtYXR0aW5nIC0gT05MWSBmb3IgZnVuY3Rpb25zIHdpdGggcGFyYW1ldGVyIGVycm9yc1xuMTAuIFZhcmlhYmxlIG5hbWluZyBjb252ZW50aW9ucyAtIE9OTFkgZm9yIHZhcmlhYmxlcyB3aXRoIG5hbWluZyBlcnJvcnNcbjExLiBObyB1bnVzZWQgdmFyaWFibGVzIG9yIGltcG9ydHMgLSBPTkxZIGZvciB1bnVzZWQgdmFyaWFibGVzL2ltcG9ydHNcbjEyLiBBdm9pZGluZyBuZXN0ZWQgdGVybmFyaWVzIC0gT05MWSBmb3IgbmVzdGVkIHRlcm5hcnkgZXhwcmVzc2lvbnNcbjEzLiBBbnkgb3RoZXIgRVNMaW50IGVycm9ycyAtIE9OTFkgZm9yIHRoZSBzcGVjaWZpYyBlcnJvcnMgbGlzdGVkIGFib3ZlXG5cbldIQVQgTk9UIFRPIEZJWDpcbi0gRG8gbm90IGNoYW5nZSBwcm9wZXJseSBmb3JtYXR0ZWQgbXVsdGktbGluZSBzdHJ1Y3R1cmVzXG4tIERvIG5vdCByZW1vdmUgbGluZSBicmVha3MgdGhhdCBhcmUgbm90IGNhdXNpbmcgZXJyb3JzXG4tIERvIG5vdCBjaGFuZ2UgaW5kZW50YXRpb24gdGhhdCBpcyBhbHJlYWR5IGNvcnJlY3Rcbi0gRG8gbm90IG1vZGlmeSBzcGFjaW5nIHRoYXQgaXMgYWxyZWFkeSBjb3JyZWN0XG4tIERvIG5vdCBjb25kZW5zZSByZWFkYWJsZSBtdWx0aS1saW5lIGNvZGUgdG8gc2luZ2xlIGxpbmVzXG4tIERvIG5vdCBtb2RpZnkgY29kZSB0aGF0IGlzIG5vdCBtZW50aW9uZWQgaW4gdGhlIEVTTGludCBlcnJvcnNcblxuRXhhbXBsZSBvZiBDT1JSRUNUIGZvcm1hdHRpbmcgKERPIE5PVCBDSEFOR0UpOlxuICBzdGF0aWMgcmVhZG9ubHkgQUREX0lURU1fRVJST1I6IHN0cmluZyA9ICdVU0VSX0FERF9JVEVNX0VSUk9SJztcbiAgc3RhdGljIHJlYWRvbmx5IE9USEVSX0NPTlNUQU5UOiBzdHJpbmcgPSAnT1RIRVJfQ09OU1RBTlQnO1xufVxuXG5jb25zdHJ1Y3RvcihmbHV4OiBGbHV4RnJhbWV3b3JrLCBDdXN0b21BZGFwdGVyOiB0eXBlb2YgRXZlbnQgPSBFdmVudCkge1xuICB0aGlzLkN1c3RvbUFkYXB0ZXIgPSBDdXN0b21BZGFwdGVyO1xuICB0aGlzLmZsdXggPSBmbHV4O1xufVxuXG5pbXBvcnQge1xuICBhcHAsXG4gIGV2ZW50cyxcbiAgaW1hZ2VzLFxuICBsb2NhdGlvbnMsXG4gIG1lc3NhZ2VzLFxuICBwb3N0cyxcbiAgdGFncyxcbiAgdXNlcnMsXG4gIHdlYnNvY2tldFxufSBmcm9tICcuL3N0b3Jlcyc7XG5cbmNvbnN0IGNvbmZpZyA9IHtcbiAgYXBpS2V5OiAndmFsdWUnLFxuICBiYXNlVXJsOiAnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20nLFxuICB0aW1lb3V0OiA1MDAwXG59O1xuXG5FeGFtcGxlIG9mIElOQ09SUkVDVCBmb3JtYXR0aW5nIChGSVggVEhJUyk6XG4gIHN0YXRpYyByZWFkb25seSBPVEhFUl9DT05TVEFOVDogc3RyaW5nID0gJ09USEVSX0NPTlNUQU5UJztcbn1cblxuY29uc3RydWN0b3IoZmx1eDogRmx1eEZyYW1ld29yaywgQ3VzdG9tQWRhcHRlcjogdHlwZW9mIEV2ZW50ID0gRXZlbnQpIHt0aGlzLkN1c3RvbUFkYXB0ZXIgPSBDdXN0b21BZGFwdGVyO1xuICB0aGlzLmZsdXggPSBmbHV4O31cblxuaW1wb3J0IHthcHAsIGV2ZW50cywgaW1hZ2VzLCBsb2NhdGlvbnMsIG1lc3NhZ2VzLCBwb3N0cywgdGFncywgdXNlcnMsIHdlYnNvY2tldH0gZnJvbSAnLi9zdG9yZXMnO1xuXG5jb25zdCBjb25maWcgPSB7YmFzZVVybDogJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tJywgYXBpS2V5OiAndmFsdWUnLCB0aW1lb3V0OiA1MDAwfTtcblxuRml4IE9OTFkgdGhlIHNwZWNpZmljIEVTTGludCBlcnJvcnMgbGlzdGVkIGFib3ZlLiBSZXZpZXcgdGhlIGVudGlyZSBmaWxlIGZvciBjb21wbGlhbmNlIHdpdGggYWxsIEVTTGludCBydWxlcy5cblJldHVybiBvbmx5IHRoZSBwcm9wZXJseSBmb3JtYXR0ZWQgZml4ZWQgY29kZSB3aXRob3V0IGFueSBleHBsYW5hdGlvbnMuYDtcblxuICAgICAgICAgICAgY29uc3QgZml4ZWRDb250ZW50ID0gYXdhaXQgY2FsbEFJU2VydmljZShwcm9tcHQsIHF1aWV0KTtcblxuICAgICAgICAgICAgaWYoZml4ZWRDb250ZW50ICYmIGZpeGVkQ29udGVudCAhPT0gZmlsZUNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgd3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgZml4ZWRDb250ZW50LCAndXRmOCcpO1xuICAgICAgICAgICAgICBsb2coYEFwcGxpZWQgQUkgZml4ZXMgdG8gJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICBsb2coYEVycm9yIGFwcGx5aW5nIEFJIGZpeGVzIHRvICR7ZmlsZVBhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHNwaW5uZXIuc3VjY2VlZCgnQUkgZml4ZXMgYXBwbGllZCBzdWNjZXNzZnVsbHkhJyk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBhcHBseSBBSSBmaXhlcycpO1xuICAgIGxvZyhgRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgaWYoIXF1aWV0KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IGFwcGx5RGlyZWN0Rml4ZXMgPSBhc3luYyAoZmlsZVBhdGg6IHN0cmluZywgcXVpZXQ6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgbGV0IHdhc01vZGlmaWVkID0gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlQ29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcbiAgICBsZXQgbmV3Q29udGVudCA9IGZpbGVDb250ZW50O1xuXG4gICAgaWYoZmlsZVBhdGguaW5jbHVkZXMoJ2FpU2VydmljZS50cycpKSB7XG4gICAgICBsb2coJ0ZpeGluZyBpc3N1ZXMgaW4gYWlTZXJ2aWNlLnRzJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC8nQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uXFwvanNvbicsXFxzKidBdXRob3JpemF0aW9uJzogYEJlYXJlci9nLFxuICAgICAgICAnXFwnQXV0aG9yaXphdGlvblxcJzogYEJlYXJlclxcJywgXFwnQ29udGVudC1UeXBlXFwnOiBcXCdhcHBsaWNhdGlvbi9qc29uXFwnJ1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2hlYWRlcnM6IHsoW159XSopfSxcXHMqbWV0aG9kOiAnUE9TVCcvZyxcbiAgICAgICAgJ21ldGhvZDogXFwnUE9TVFxcJyxcXG4gICAgICBoZWFkZXJzOiB7JDF9J1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL3tyb2xlOiAnc3lzdGVtJywgY29udGVudDovZyxcbiAgICAgICAgJ3tjb250ZW50Oiwgcm9sZTogXFwnc3lzdGVtXFwnLCdcbiAgICAgICk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAve3JvbGU6ICd1c2VyJywgY29udGVudDovZyxcbiAgICAgICAgJ3tjb250ZW50Oiwgcm9sZTogXFwndXNlclxcJywnXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvXFwoKFteKV0qPylfKFthLXpBLVowLTldKykoXFxzKjpbXildKilcXCkvZyxcbiAgICAgICAgJygkMSQyJDMpJ1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZSgvY29uc29sZVxcLmxvZ1xcKC9nLCAnbG9nKCcpO1xuXG4gICAgICBpZighbmV3Q29udGVudC5pbmNsdWRlcygnaW1wb3J0IHtsb2d9JykgJiYgbmV3Q29udGVudC5pbmNsdWRlcygnbG9nKCcpKSB7XG4gICAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgICAgL2ltcG9ydCB7KFtefV0qKX0gZnJvbSAnKC4qKSc7LyxcbiAgICAgICAgICAnaW1wb3J0IHskMX0gZnJvbSBcXCckMlxcJztcXG5pbXBvcnQge2xvZ30gZnJvbSBcXCcuL2xvZy5qc1xcJzsnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoZmlsZVBhdGguaW5jbHVkZXMoJ3JlYWN0U2hpbS50cycpKSB7XG4gICAgICBsb2coJ0ZpeGluZyBuYW1pbmctY29udmVudGlvbiBpc3N1ZXMgaW4gcmVhY3RTaGltLnRzJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgICdpbXBvcnQgKiBhcyBSZWFjdCBmcm9tJyxcbiAgICAgICAgJ2ltcG9ydCAqIGFzIHJlYWN0IGZyb20nXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9SZWFjdFxcLi9nLCAncmVhY3QuJyk7XG4gICAgfVxuXG4gICAgaWYoZmlsZVBhdGguaW5jbHVkZXMoJ2NoYW5nZWxvZy50cycpKSB7XG4gICAgICBsb2coJ0ZpeGluZyBpc3N1ZXMgaW4gY2hhbmdlbG9nLnRzJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoLyhcXHcrKVxcK1xcKy9nLCAnJDEgKz0gMScpO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9cXFxcXFwkL2csICckJyk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9cXFxcXFwuL2csICcuJyk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9cXFxcXFwqL2csICcqJyk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9cXFxcOi9nLCAnOicpO1xuICAgIH1cblxuICAgIGlmKGZpbGVQYXRoLmluY2x1ZGVzKCdhcHAudHMnKSkge1xuICAgICAgbG9nKCdGaXhpbmcgaXNzdWVzIGluIGFwcC50cycsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9jb25zb2xlXFwubG9nXFwoL2csICdsb2coJyk7XG5cbiAgICAgIGlmKCFuZXdDb250ZW50LmluY2x1ZGVzKCdpbXBvcnQge2xvZ30nKSAmJiBuZXdDb250ZW50LmluY2x1ZGVzKCdsb2coJykpIHtcbiAgICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgICAvaW1wb3J0IGJveGVuIGZyb20gJ2JveGVuJzsvLFxuICAgICAgICAgICdpbXBvcnQgYm94ZW4gZnJvbSBcXCdib3hlblxcJztcXG5pbXBvcnQge2xvZ30gZnJvbSBcXCcuL2xvZy5qc1xcJzsnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoL1xcXFxcXC8vZywgJy8nKTtcbiAgICB9XG5cbiAgICBpZihmaWxlUGF0aC5pbmNsdWRlcygnYXV0b2ZpeC5qcycpKSB7XG4gICAgICBsb2coJ0ZpeGluZyBpc3N1ZXMgaW4gYXV0b2ZpeC5qcycsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvaW1wb3J0IHsoW159XSopfSBmcm9tICdwYXRoJztbXFxzXFxuXSppbXBvcnQgeyhbXn1dKil9IGZyb20gJ3BhdGgnOy8sXG4gICAgICAgICdpbXBvcnQgeyQxLCAkMn0gZnJvbSBcXCdwYXRoXFwnOydcbiAgICAgICk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC9fX2ZpbGVuYW1lL2csXG4gICAgICAgICdjdXJyZW50RmlsZW5hbWUnXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL19fZGlybmFtZS9nLFxuICAgICAgICAnY3VycmVudERpcm5hbWUnXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvY29uc3QgcHJlZml4ID0gdHlwZSA9PT0gJ2Vycm9yJyBcXD8gJ+KdjCAnIDogdHlwZSA9PT0gJ3N1Y2Nlc3MnIFxcPyAn4pyFICcgOiAn4oS577iPICc7LyxcbiAgICAgICAgJ2xldCBwcmVmaXggPSBcXCfihLnvuI8gXFwnO1xcbmlmKHR5cGUgPT09IFxcJ2Vycm9yXFwnKSB7XFxuICBwcmVmaXggPSBcXCfinYwgXFwnO1xcbn0gZWxzZSBpZih0eXBlID09PSBcXCdzdWNjZXNzXFwnKSB7XFxuICBwcmVmaXggPSBcXCfinIUgXFwnO1xcbn0nXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvYXN5bmMgZnVuY3Rpb24gcnVuRXNsaW50Rml4XFwoXFwpL2csXG4gICAgICAgICdjb25zdCBydW5Fc2xpbnRGaXggPSBhc3luYyAoKSdcbiAgICAgICk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvYXN5bmMgZnVuY3Rpb24gZ2V0RmlsZXNXaXRoRXJyb3JzXFwoXFwpL2csXG4gICAgICAgICdjb25zdCBnZXRGaWxlc1dpdGhFcnJvcnMgPSBhc3luYyAoKSdcbiAgICAgICk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvYXN5bmMgZnVuY3Rpb24gaXNDdXJzb3JBdmFpbGFibGVcXChcXCkvZyxcbiAgICAgICAgJ2NvbnN0IGlzQ3Vyc29yQXZhaWxhYmxlID0gYXN5bmMgKCknXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2FzeW5jIGZ1bmN0aW9uIGZpeEZpbGVXaXRoQ3Vyc29yQUlcXChmaWxlUGF0aFxcKS9nLFxuICAgICAgICAnY29uc3QgZml4RmlsZVdpdGhDdXJzb3JBSSA9IGFzeW5jIChmaWxlUGF0aCknXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2FzeW5jIGZ1bmN0aW9uIG1haW5cXChcXCkvZyxcbiAgICAgICAgJ2NvbnN0IG1haW4gPSBhc3luYyAoKSdcbiAgICAgICk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC9pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luY30vZyxcbiAgICAgICAgJ2ltcG9ydCB7d3JpdGVGaWxlU3luY30nXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvY29uc29sZVxcLmxvZ1xcKGBcXCR7cHJlZml4fSBcXCR7bWVzc2FnZX1gXFwpOy9nLFxuICAgICAgICAncHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7cHJlZml4fSAke21lc3NhZ2V9XFxcXG5gKTsnXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvfSBjYXRjaFxcKGVycm9yXFwpIHtbXFxzXFxuXSpcXC9cXC8gSWdub3JlIGNsZWFudXAgZXJyb3JzL2csXG4gICAgICAgICd9IGNhdGNoKF8pIHtcXG4gICAgICAvLyBJZ25vcmUgY2xlYW51cCBlcnJvcnMnXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL30gY2F0Y2hcXChlcnJvclxcKSB7W1xcc1xcbl0qbG9nXFwoL2csXG4gICAgICAgICd9IGNhdGNoKGVycikge1xcbiAgICBsb2coJ1xuICAgICAgKTtcbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC99IGNhdGNoXFwoZXJyb3JcXCkge1tcXHNcXG5dKnJldHVybiBmYWxzZTsvZyxcbiAgICAgICAgJ30gY2F0Y2goXykge1xcbiAgICByZXR1cm4gZmFsc2U7J1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2ZvclxcKGNvbnN0IGZpbGVQYXRoIG9mIGZpbGVzV2l0aEVycm9yc1xcKSB7W1xcc1xcbl0qY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGZpeEZpbGVXaXRoQ3Vyc29yQUlcXChmaWxlUGF0aFxcKTsvZyxcbiAgICAgICAgJ2NvbnN0IGZpeFJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChmaWxlc1dpdGhFcnJvcnMubWFwKGZpbGVQYXRoID0+IGZpeEZpbGVXaXRoQ3Vyc29yQUkoZmlsZVBhdGgpKSk7XFxuZm9yKGNvbnN0IHN1Y2Nlc3Mgb2YgZml4UmVzdWx0cykgeydcbiAgICAgICk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC9maXhlZENvdW50XFwrXFwrOy9nLFxuICAgICAgICAnZml4ZWRDb3VudCArPSAxOydcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYobmV3Q29udGVudCAhPT0gZmlsZUNvbnRlbnQpIHtcbiAgICAgIHdyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIG5ld0NvbnRlbnQsICd1dGY4Jyk7XG4gICAgICBsb2coYEZpeGVkIGlzc3VlcyBpbiAke2ZpbGVQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgd2FzTW9kaWZpZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB3YXNNb2RpZmllZDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgRXJyb3IgYXBwbHlpbmcgZGlyZWN0IGZpeGVzIHRvICR7ZmlsZVBhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29uc3QgbG9hZEFJQ29uZmlnID0gYXN5bmMgKGN3ZDogc3RyaW5nLCBxdWlldDogYm9vbGVhbiwgZGVidWc6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBjb25maWdGb3JtYXRzID0gWydqcycsICdtanMnLCAnY2pzJywgJ3RzJywgJ2pzb24nXTtcbiAgY29uc3QgY29uZmlnQmFzZU5hbWUgPSAnbGV4LmNvbmZpZyc7XG4gIGxldCBsZXhDb25maWdQYXRoID0gJyc7XG5cbiAgZm9yKGNvbnN0IGZvcm1hdCBvZiBjb25maWdGb3JtYXRzKSB7XG4gICAgY29uc3QgcG90ZW50aWFsUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgYC4vJHtjb25maWdCYXNlTmFtZX0uJHtmb3JtYXR9YCk7XG4gICAgaWYoZXhpc3RzU3luYyhwb3RlbnRpYWxQYXRoKSkge1xuICAgICAgbGV4Q29uZmlnUGF0aCA9IHBvdGVudGlhbFBhdGg7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZihsZXhDb25maWdQYXRoKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZvciBNSlMgZmlsZXMsIHdlIG5lZWQgdG8gdXNlIGR5bmFtaWMgaW1wb3J0IHdpdGggVVJMIGZvciBjb21wYXRpYmlsaXR5XG4gICAgICBjb25zdCBmb3JtYXQgPSBleHRuYW1lKGxleENvbmZpZ1BhdGgpLnNsaWNlKDEpO1xuICAgICAgbGV0IGltcG9ydFBhdGggPSBsZXhDb25maWdQYXRoO1xuXG4gICAgICAvLyBVc2UgVVJMIHByb3RvY29sIGZvciBFU00gaW1wb3J0c1xuICAgICAgaWYoZm9ybWF0ID09PSAnbWpzJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYGZpbGU6Ly8ke2xleENvbmZpZ1BhdGh9YCk7XG4gICAgICAgICAgaW1wb3J0UGF0aCA9IHVybC5ocmVmO1xuICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICBsb2coYFVzaW5nIFVSTCBmb3JtYXQgZm9yIE1KUyBpbXBvcnQ6ICR7aW1wb3J0UGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2godXJsRXJyb3IpIHtcbiAgICAgICAgICBsb2coYEVycm9yIGNyZWF0aW5nIFVSTCBmb3IgTUpTIGltcG9ydDogJHt1cmxFcnJvci5tZXNzYWdlfWAsICd3YXJuJywgZGVidWcgfHwgIXF1aWV0KTtcbiAgICAgICAgICBpbXBvcnRQYXRoID0gYGZpbGU6Ly8ke2xleENvbmZpZ1BhdGh9YDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFRyeWluZyB0byBpbXBvcnQgY29uZmlnIGZyb20gJHtpbXBvcnRQYXRofSAoZm9ybWF0OiAke2Zvcm1hdH0pYCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBsZXhDb25maWc7XG4gICAgICB0cnkge1xuICAgICAgICBsZXhDb25maWcgPSBhd2FpdCBpbXBvcnQoaW1wb3J0UGF0aCk7XG4gICAgICB9IGNhdGNoKGltcG9ydEVycm9yKSB7XG4gICAgICAgIGlmKGltcG9ydEVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBkZWZpbmVkIGluIEVTIG1vZHVsZSBzY29wZScpKSB7XG4gICAgICAgICAgbG9nKGBFUyBNb2R1bGUgc3ludGF4IGVycm9yIGluICR7bGV4Q29uZmlnUGF0aH0uIE1ha2Ugc3VyZSB5b3UncmUgdXNpbmcgJ2V4cG9ydCcgaW5zdGVhZCBvZiAnbW9kdWxlLmV4cG9ydHMnLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihpbXBvcnRFcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBpbXBvcnRFcnJvcjtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGJvdGggRVNNIChkZWZhdWx0IGV4cG9ydCkgYW5kIENvbW1vbkpTIChtb2R1bGUuZXhwb3J0cylcbiAgICAgIGxldCBjb25maWdEYXRhID0gbnVsbDtcbiAgICAgIGlmKGxleENvbmZpZy5kZWZhdWx0KSB7XG4gICAgICAgIGNvbmZpZ0RhdGEgPSBsZXhDb25maWcuZGVmYXVsdDtcbiAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICBsb2coYEZvdW5kIGRlZmF1bHQgZXhwb3J0IGluICR7bGV4Q29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIENvbW1vbkpTIG9yIG90aGVyIG1vZHVsZSBzeXN0ZW1zXG4gICAgICAgIGNvbmZpZ0RhdGEgPSBsZXhDb25maWc7XG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKGBVc2luZyBkaXJlY3QgZXhwb3J0IGluICR7bGV4Q29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZihjb25maWdEYXRhICYmIGNvbmZpZ0RhdGEuYWkpIHtcbiAgICAgICAgbG9nKGBGb3VuZCBBSSBjb25maWd1cmF0aW9uIGluICR7cGF0aFJlc29sdmUoY3dkLCBsZXhDb25maWdQYXRoKX0sIGFwcGx5aW5nIHNldHRpbmdzLi4uYCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIExleENvbmZpZy5jb25maWcuYWkgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZy5haSwgLi4uY29uZmlnRGF0YS5haX07XG4gICAgICB9XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBFcnJvciBsb2FkaW5nIEFJIGNvbmZpZ3VyYXRpb24gZnJvbSAke2xleENvbmZpZ1BhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogTG9hZCBFU0xpbnQgY29uZmlndXJhdGlvbiBmcm9tIGxleC5jb25maWcuKiBmaWxlc1xuICovXG5jb25zdCBsb2FkRVNMaW50Q29uZmlnID0gYXN5bmMgKGN3ZDogc3RyaW5nLCBxdWlldDogYm9vbGVhbiwgZGVidWc6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgLy8gQ2hlY2sgaWYgTGV4Q29uZmlnIGFscmVhZHkgaGFzIEVTTGludCBjb25maWd1cmF0aW9uIGxvYWRlZFxuICBpZihMZXhDb25maWcuY29uZmlnLmVzbGludCAmJiBPYmplY3Qua2V5cyhMZXhDb25maWcuY29uZmlnLmVzbGludCkubGVuZ3RoID4gMCkge1xuICAgIGxvZygnRm91bmQgRVNMaW50IGNvbmZpZ3VyYXRpb24gaW4gbGV4LmNvbmZpZy4qIGZpbGUnLCAnaW5mbycsIGRlYnVnIHx8ICFxdWlldCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBUcnkgdG8gbG9hZCBmcm9tIGxleC5jb25maWcuKiBmaWxlcyBpZiBub3QgYWxyZWFkeSBsb2FkZWRcbiAgY29uc3QgY29uZmlnRm9ybWF0cyA9IFsnanMnLCAnbWpzJywgJ2NqcycsICd0cycsICdqc29uJ107XG4gIGNvbnN0IGNvbmZpZ0Jhc2VOYW1lID0gJ2xleC5jb25maWcnO1xuXG4gIGZvcihjb25zdCBmb3JtYXQgb2YgY29uZmlnRm9ybWF0cykge1xuICAgIGNvbnN0IHBvdGVudGlhbFBhdGggPSBwYXRoUmVzb2x2ZShjd2QsIGAuLyR7Y29uZmlnQmFzZU5hbWV9LiR7Zm9ybWF0fWApO1xuICAgIGlmKGV4aXN0c1N5bmMocG90ZW50aWFsUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEZvciBNSlMgZmlsZXMsIHdlIG5lZWQgdG8gdXNlIGR5bmFtaWMgaW1wb3J0IHdpdGggVVJMIGZvciBjb21wYXRpYmlsaXR5XG4gICAgICAgIGNvbnN0IGZpbGVGb3JtYXQgPSBleHRuYW1lKHBvdGVudGlhbFBhdGgpLnNsaWNlKDEpO1xuICAgICAgICBsZXQgaW1wb3J0UGF0aCA9IHBvdGVudGlhbFBhdGg7XG5cbiAgICAgICAgLy8gVXNlIFVSTCBwcm90b2NvbCBmb3IgRVNNIGltcG9ydHNcbiAgICAgICAgaWYoZmlsZUZvcm1hdCA9PT0gJ21qcycpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChgZmlsZTovLyR7cG90ZW50aWFsUGF0aH1gKTtcbiAgICAgICAgICAgIGltcG9ydFBhdGggPSB1cmwuaHJlZjtcbiAgICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICAgIGxvZyhgVXNpbmcgVVJMIGZvcm1hdCBmb3IgTUpTIGltcG9ydDogJHtpbXBvcnRQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2godXJsRXJyb3IpIHtcbiAgICAgICAgICAgIGxvZyhgRXJyb3IgY3JlYXRpbmcgVVJMIGZvciBNSlMgaW1wb3J0OiAke3VybEVycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBkZWJ1ZyB8fCAhcXVpZXQpO1xuICAgICAgICAgICAgaW1wb3J0UGF0aCA9IGBmaWxlOi8vJHtwb3RlbnRpYWxQYXRofWA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICBsb2coYFRyeWluZyB0byBpbXBvcnQgY29uZmlnIGZyb20gJHtpbXBvcnRQYXRofSAoZm9ybWF0OiAke2ZpbGVGb3JtYXR9KWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxleENvbmZpZztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXhDb25maWcgPSBhd2FpdCBpbXBvcnQoaW1wb3J0UGF0aCk7XG4gICAgICAgIH0gY2F0Y2goaW1wb3J0RXJyb3IpIHtcbiAgICAgICAgICBpZihpbXBvcnRFcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdub3QgZGVmaW5lZCBpbiBFUyBtb2R1bGUgc2NvcGUnKSkge1xuICAgICAgICAgICAgbG9nKGBFUyBNb2R1bGUgc3ludGF4IGVycm9yIGluICR7cG90ZW50aWFsUGF0aH0uIE1ha2Ugc3VyZSB5b3UncmUgdXNpbmcgJ2V4cG9ydCcgaW5zdGVhZCBvZiAnbW9kdWxlLmV4cG9ydHMnLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoaW1wb3J0RXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGltcG9ydEVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIGJvdGggRVNNIChkZWZhdWx0IGV4cG9ydCkgYW5kIENvbW1vbkpTIChtb2R1bGUuZXhwb3J0cylcbiAgICAgICAgbGV0IGNvbmZpZ0RhdGEgPSBudWxsO1xuICAgICAgICBpZihsZXhDb25maWcuZGVmYXVsdCkge1xuICAgICAgICAgIGNvbmZpZ0RhdGEgPSBsZXhDb25maWcuZGVmYXVsdDtcbiAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgbG9nKGBGb3VuZCBkZWZhdWx0IGV4cG9ydCBpbiAke3BvdGVudGlhbFBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZvciBDb21tb25KUyBvciBvdGhlciBtb2R1bGUgc3lzdGVtc1xuICAgICAgICAgIGNvbmZpZ0RhdGEgPSBsZXhDb25maWc7XG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIGxvZyhgVXNpbmcgZGlyZWN0IGV4cG9ydCBpbiAke3BvdGVudGlhbFBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoY29uZmlnRGF0YSAmJiBjb25maWdEYXRhLmVzbGludCAmJiBPYmplY3Qua2V5cyhjb25maWdEYXRhLmVzbGludCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxvZyhgRm91bmQgRVNMaW50IGNvbmZpZ3VyYXRpb24gaW4gJHtwYXRoUmVzb2x2ZShjd2QsIHBvdGVudGlhbFBhdGgpfSwgYXBwbHlpbmcgc2V0dGluZ3MuLi5gLCAnaW5mbycsIGRlYnVnIHx8ICFxdWlldCk7XG4gICAgICAgICAgTGV4Q29uZmlnLmNvbmZpZy5lc2xpbnQgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZy5lc2xpbnQsIC4uLmNvbmZpZ0RhdGEuZXNsaW50fTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBsb2coYEVycm9yIGxvYWRpbmcgRVNMaW50IGNvbmZpZ3VyYXRpb24gZnJvbSAke3BvdGVudGlhbFBhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCByZW1vdmVGaWxlQ29tbWVudHMgPSAoZmlsZVBhdGg6IHN0cmluZywgcXVpZXQ6IGJvb2xlYW4pOiBib29sZWFuID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlQ29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcblxuICAgIGlmKGZpbGVDb250ZW50Lmxlbmd0aCA+IDEwMDAwMDApIHsgLy8gMU1CIGxpbWl0XG4gICAgICBsb2coYFNraXBwaW5nIGNvbW1lbnQgcmVtb3ZhbCBmb3IgbGFyZ2UgZmlsZTogJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gVXNlIHJlZ2V4IHRvIG1hdGNoIGRpZmZlcmVudCB0eXBlcyBvZiBjb21tZW50c1xuICAgIC8vIFByZXNlcnZlczpcbiAgICAvLyAxLiBDb3B5cmlnaHQgbm90aWNlcyAoLyogQ29weXJpZ2h0IC4uLiAqLylcbiAgICAvLyAyLiBUT0RPIGNvbW1lbnRzICgvLyBUT0RPOiAuLi4pXG4gICAgLy8gMy4gTGljZW5zZSBoZWFkZXJzICgvKiAuLi4gTGljZW5zZSAuLi4gKi8pXG5cbiAgICAvLyBIYW5kbGUgbXVsdGktbGluZSBjb21tZW50cyBmaXJzdCAtIHByZXNlcnZlIGNvcHlyaWdodC9saWNlbnNlIG5vdGljZXNcbiAgICBsZXQgbmV3Q29udGVudCA9IGZpbGVDb250ZW50LnJlcGxhY2UoXG4gICAgICAvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy9nLFxuICAgICAgKG1hdGNoKSA9PiB7XG4gICAgICAgIGlmKG1hdGNoLmluY2x1ZGVzKCdDb3B5cmlnaHQnKSB8fFxuICAgICAgICAgIG1hdGNoLmluY2x1ZGVzKCdMSUNFTlNFJykgfHxcbiAgICAgICAgICBtYXRjaC5pbmNsdWRlcygnTGljZW5zZScpIHx8XG4gICAgICAgICAgbWF0Y2guaW5jbHVkZXMoJ2xpY2Vuc2UnKSkge1xuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEhhbmRsZSBzaW5nbGUtbGluZSBjb21tZW50cyAtIHByZXNlcnZlIFRPRE9zXG4gICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgIC9cXC9cXC8uKiQvZ20sXG4gICAgICAobWF0Y2gpID0+IHtcbiAgICAgICAgaWYobWF0Y2guaW5jbHVkZXMoJ1RPRE8nKSB8fCBtYXRjaC5pbmNsdWRlcygnRklYTUUnKSkge1xuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIENsZWFuIHVwIGFueSBtdWx0aXBsZSBibGFuayBsaW5lcyBjcmVhdGVkIGJ5IGNvbW1lbnQgcmVtb3ZhbFxuICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoL1xcblxccypcXG5cXHMqXFxuL2csICdcXG5cXG4nKTtcblxuICAgIC8vIElmIHRoZSBmaWxlIHdhcyBtb2RpZmllZCwgc2F2ZSBpdFxuICAgIGlmKG5ld0NvbnRlbnQgIT09IGZpbGVDb250ZW50KSB7XG4gICAgICB3cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBuZXdDb250ZW50LCAndXRmOCcpO1xuICAgICAgbG9nKGBSZW1vdmVkIGNvbW1lbnRzIGZyb20gJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgRXJyb3IgcmVtb3ZpbmcgY29tbWVudHMgZnJvbSAke2ZpbGVQYXRofTogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBsaW50ID0gYXN5bmMgKGNtZDogTGludE9wdGlvbnMgJiB7J3JlbW92ZS1jb21tZW50cyc/OiBib29sZWFufSwgY2FsbGJhY2s6IExpbnRDYWxsYmFjayA9IHByb2Nlc3MuZXhpdCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgZml4ID0gZmFsc2UsXG4gICAgZGVidWcgPSBmYWxzZSxcbiAgICBxdWlldCA9IGZhbHNlLFxuICAgIGNvbmZpZyA9IG51bGwsXG4gICAgcmVtb3ZlQ29tbWVudHMgPSBmYWxzZSxcbiAgICAncmVtb3ZlLWNvbW1lbnRzJzogcmVtb3ZlQ29tbWVudHNGbGFnID0gZmFsc2VcbiAgfSA9IGNtZDtcblxuICBjb25zdCBzaG91bGRSZW1vdmVDb21tZW50cyA9IHJlbW92ZUNvbW1lbnRzIHx8IHJlbW92ZUNvbW1lbnRzRmxhZztcblxuICBsb2coYCR7Y2xpTmFtZX0gbGludGluZy4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGNvbnN0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IHNwaW5uZXIgPSBjcmVhdGVTcGlubmVyKHF1aWV0KTtcblxuICBhd2FpdCBsb2FkQUlDb25maWcoY3dkLCBxdWlldCwgZGVidWcpO1xuXG4gIGxldCB0ZW1wQ29uZmlnUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1c2VUeXBlc2NyaXB0ID0gZGV0ZWN0VHlwZVNjcmlwdChjd2QpO1xuICAgIGxvZyhgVHlwZVNjcmlwdCAke3VzZVR5cGVzY3JpcHQgPyAnZGV0ZWN0ZWQnIDogJ25vdCBkZXRlY3RlZCd9IGZyb20gdHNjb25maWcuanNvbmAsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgICAgTGV4Q29uZmlnLmNoZWNrTGludFR5cGVzY3JpcHRDb25maWcoKTtcbiAgICB9XG5cbiAgICBlbnN1cmVNb2R1bGVUeXBlKGN3ZCk7XG5cbiAgICBhd2FpdCBpbnN0YWxsRGVwZW5kZW5jaWVzKGN3ZCwgdXNlVHlwZXNjcmlwdCwgcXVpZXQpO1xuXG4gICAgY29uc3QgcHJvamVjdENvbmZpZ1BhdGggPSBwYXRoUmVzb2x2ZShjd2QsICdlc2xpbnQuY29uZmlnLm1qcycpO1xuICAgIGNvbnN0IHByb2plY3RDb25maWdQYXRoVHMgPSBwYXRoUmVzb2x2ZShjd2QsICdlc2xpbnQuY29uZmlnLnRzJyk7XG4gICAgY29uc3QgaGFzRXNsaW50Q29uZmlnID0gZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aCkgfHxcbiAgICAgIGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGhUcykgfHxcbiAgICAgIGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjLmpzJykpIHx8XG4gICAgICBleGlzdHNTeW5jKHBhdGhSZXNvbHZlKGN3ZCwgJy5lc2xpbnRyYy5qc29uJykpIHx8XG4gICAgICBleGlzdHNTeW5jKHBhdGhSZXNvbHZlKGN3ZCwgJy5lc2xpbnRyYy55bWwnKSkgfHxcbiAgICAgIGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjLnlhbWwnKSkgfHxcbiAgICAgIGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjJykpO1xuXG4gICAgY29uc3QgaGFzTGV4RXNsaW50Q29uZmlnID0gYXdhaXQgbG9hZEVTTGludENvbmZpZyhjd2QsIHF1aWV0LCBkZWJ1Zyk7XG5cbiAgICBpZihoYXNMZXhFc2xpbnRDb25maWcpIHtcbiAgICAgIGxvZygnVXNpbmcgRVNMaW50IGNvbmZpZ3VyYXRpb24gZnJvbSBsZXguY29uZmlnLiogZmlsZScsICdpbmZvJywgcXVpZXQpO1xuICAgIH1cblxuICAgIGlmKGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjLmpzb24nKSkpIHtcbiAgICAgIHVubGlua1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjLmpzb24nKSk7XG4gICAgfVxuXG4gICAgbGV0IGxleENvbmZpZ1BhdGggPSAnJztcbiAgICBsZXQgc2hvdWxkQ3JlYXRlVGVtcENvbmZpZyA9IGZhbHNlO1xuXG4gICAgaWYoIWhhc0VzbGludENvbmZpZyAmJiAhaGFzTGV4RXNsaW50Q29uZmlnKSB7XG4gICAgICBjb25zdCBwb3NzaWJsZVBhdGhzID0gW1xuICAgICAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJy4uLy4uLy4uLy4uL2VzbGludC5jb25maWcudHMnKSxcbiAgICAgICAgcGF0aFJlc29sdmUoY3VycmVudERpcm5hbWUsICcuLi8uLi8uLi8uLi9lc2xpbnQuY29uZmlnLmptcycpLFxuICAgICAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmVudi5MRVhfSE9NRSB8fCAnLi9ub2RlX21vZHVsZXMvQG5sYWJzL2xleCcsICdlc2xpbnQuY29uZmlnLnRzJyksXG4gICAgICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuZW52LkxFWF9IT01FIHx8ICcuL25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4JywgJ2VzbGludC5jb25maWcubWpzJylcbiAgICAgIF07XG5cbiAgICAgIGZvcihjb25zdCBwYXRoIG9mIHBvc3NpYmxlUGF0aHMpIHtcbiAgICAgICAgaWYoZXhpc3RzU3luYyhwYXRoKSkge1xuICAgICAgICAgIGxleENvbmZpZ1BhdGggPSBwYXRoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZyhgQ3VycmVudCBkaXJlY3Rvcnk6ICR7Y3VycmVudERpcm5hbWV9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIGxvZyhgUHJvamVjdCBjb25maWcgcGF0aDogJHtwcm9qZWN0Q29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgbG9nKGBQcm9qZWN0IGNvbmZpZyBleGlzdHM6ICR7aGFzRXNsaW50Q29uZmlnfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICBsb2coYEZvdW5kIExleCBjb25maWc6ICR7bGV4Q29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgbG9nKGBMZXggY29uZmlnIGV4aXN0czogJHshIWxleENvbmZpZ1BhdGggJiYgZXhpc3RzU3luYyhsZXhDb25maWdQYXRoKX1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cblxuICAgICAgaWYobGV4Q29uZmlnUGF0aCAmJiBleGlzdHNTeW5jKGxleENvbmZpZ1BhdGgpKSB7XG4gICAgICAgIGxvZygnTm8gRVNMaW50IGNvbmZpZ3VyYXRpb24gZm91bmQgaW4gcHJvamVjdC4gVXNpbmcgTGV4XFwncyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaG91bGRDcmVhdGVUZW1wQ29uZmlnID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihjb25maWcpIHtcbiAgICAgIGNvbnN0IHVzZXJDb25maWdQYXRoID0gcGF0aFJlc29sdmUoY3dkLCBjb25maWcpO1xuICAgICAgaWYoZXhpc3RzU3luYyh1c2VyQ29uZmlnUGF0aCkpIHtcbiAgICAgICAgbG9nKGBVc2luZyBzcGVjaWZpZWQgRVNMaW50IGNvbmZpZ3VyYXRpb246ICR7Y29uZmlnfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICBzaG91bGRDcmVhdGVUZW1wQ29uZmlnID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coYFNwZWNpZmllZCBFU0xpbnQgY29uZmlndXJhdGlvbiBub3QgZm91bmQ6ICR7Y29uZmlnfS4gVXNpbmcgTGV4J3MgZGVmYXVsdCBjb25maWd1cmF0aW9uLmAsICd3YXJuJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKHNob3VsZENyZWF0ZVRlbXBDb25maWcpIHtcbiAgICAgIGxvZygnTm8gRVNMaW50IGNvbmZpZ3VyYXRpb24gZm91bmQuIENyZWF0aW5nIGEgdGVtcG9yYXJ5IGNvbmZpZ3VyYXRpb24uLi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIGNvbnN0IGNvbmZpZ1Jlc3VsdCA9IGNyZWF0ZURlZmF1bHRFU0xpbnRDb25maWcodXNlVHlwZXNjcmlwdCwgY3dkKTtcbiAgICAgIHRlbXBDb25maWdQYXRoID0gY29uZmlnUmVzdWx0LmNvbmZpZ1BhdGg7XG4gICAgfVxuXG4gICAgbGV0IGVzbGludE91dHB1dCA9ICcnO1xuICAgIGNvbnN0IGNhcHR1cmVPdXRwdXQgPSAob3V0cHV0OiBzdHJpbmcpID0+IHtcbiAgICAgIGVzbGludE91dHB1dCArPSBgJHtvdXRwdXR9XFxuYDtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuRXNsaW50V2l0aExleChjd2QsIHF1aWV0LCBjbGlOYW1lLCB0cnVlLCBkZWJ1ZywgdXNlVHlwZXNjcmlwdCwgY2FwdHVyZU91dHB1dCk7XG5cbiAgICBpZihzaG91bGRSZW1vdmVDb21tZW50cykge1xuICAgICAgc3Bpbm5lci5zdGFydCgnUmVtb3ZpbmcgY29tbWVudHMgZnJvbSBmaWxlcy4uLicpO1xuXG4gICAgICBjb25zdCBnbG9iID0gYXdhaXQgaW1wb3J0KCdnbG9iJyk7XG4gICAgICBjb25zdCBmaWxlcyA9IGdsb2Iuc3luYygne3NyYyxsaWJ9LyoqLyoue2pzLGpzeCx0cyx0c3h9Jywge1xuICAgICAgICBjd2QsXG4gICAgICAgIGlnbm9yZTogWycqKi9ub2RlX21vZHVsZXMvKionLCAnKiovbGliLyoqJywgJyoqL2Rpc3QvKionLCAnKiovYnVpbGQvKionXVxuICAgICAgfSk7XG5cbiAgICAgIGxldCBwcm9jZXNzZWRDb3VudCA9IDA7XG4gICAgICBmb3IoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgZmlsZSk7XG4gICAgICAgIGlmKHJlbW92ZUZpbGVDb21tZW50cyhmaWxlUGF0aCwgcXVpZXQpKSB7XG4gICAgICAgICAgcHJvY2Vzc2VkQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzcGlubmVyLnN1Y2NlZWQoYFJlbW92ZWQgY29tbWVudHMgZnJvbSAke3Byb2Nlc3NlZENvdW50fSBmaWxlc2ApO1xuICAgIH1cblxuICAgIGlmKHJlc3VsdCAhPT0gMCAmJiBmaXgpIHtcbiAgICAgIGNvbnN0IGFpQ29uZmlndXJlZCA9IExleENvbmZpZy5jb25maWcuYWk/LnByb3ZpZGVyICYmIExleENvbmZpZy5jb25maWcuYWkucHJvdmlkZXIgIT09ICdub25lJztcblxuICAgICAgaWYoYWlDb25maWd1cmVkKSB7XG4gICAgICAgIGxvZygnQXBwbHlpbmcgQUkgZml4ZXMgdG8gcmVtYWluaW5nIGlzc3Vlcy4uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICBhd2FpdCBhcHBseUFJRml4KGN3ZCwgZXNsaW50T3V0cHV0LCBxdWlldCk7XG5cbiAgICAgICAgY29uc3QgYWZ0ZXJGaXhSZXN1bHQgPSBhd2FpdCBydW5Fc2xpbnRXaXRoTGV4KGN3ZCwgcXVpZXQsIGNsaU5hbWUsIGZhbHNlLCBkZWJ1ZywgdXNlVHlwZXNjcmlwdCk7XG5cbiAgICAgICAgY2FsbGJhY2soYWZ0ZXJGaXhSZXN1bHQpO1xuICAgICAgICByZXR1cm4gYWZ0ZXJGaXhSZXN1bHQ7XG4gICAgICB9XG4gICAgICBsb2coJ0VTTGludCBjb3VsZCBub3QgZml4IGFsbCBpc3N1ZXMgYXV0b21hdGljYWxseS4nLCAnd2FybicsIHF1aWV0KTtcbiAgICAgIGxvZygnVG8gZW5hYmxlIEFJLXBvd2VyZWQgZml4ZXMsIGFkZCBBSSBjb25maWd1cmF0aW9uIHRvIHlvdXIgbGV4LmNvbmZpZyBmaWxlOicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgbG9nKGBcbi8vIEluIGxleC5jb25maWcuanMgKG9yIGxleC5jb25maWcubWpzLCBsZXguY29uZmlnLmNqcywgZXRjLilcbmV4cG9ydCBkZWZhdWx0IHtcbiAgLy8gWW91ciBleGlzdGluZyBjb25maWdcbiAgYWk6IHtcbiAgICBwcm92aWRlcjogJ2N1cnNvcicgLy8gb3IgJ29wZW5haScsICdhbnRocm9waWMnLCBldGMuXG4gICAgLy8gQWRkaXRpb25hbCBwcm92aWRlci1zcGVjaWZpYyBzZXR0aW5nc1xuICB9XG59O2AsICdpbmZvJywgcXVpZXQpO1xuICAgIH1cblxuICAgIGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBpZihzcGlubmVyKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0xpbnRpbmcgZmFpbGVkIScpO1xuICAgIH1cbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjb25zdCB0ZW1wRmlsZVBhdGhzID0gW1xuICAgICAgdGVtcENvbmZpZ1BhdGgsXG4gICAgICBwYXRoUmVzb2x2ZShjd2QsICcubGV4LXRlbXAtZXNsaW50LmNqcycpLFxuICAgICAgcGF0aFJlc29sdmUoY3dkLCAnLmxleC10ZW1wLWRlZmF1bHQtZXNsaW50LmNqcycpXG4gICAgXTtcblxuICAgIGZvcihjb25zdCBmaWxlUGF0aCBvZiB0ZW1wRmlsZVBhdGhzKSB7XG4gICAgICBpZihmaWxlUGF0aCAmJiBleGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHVubGlua1N5bmMoZmlsZVBhdGgpO1xuICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICBsb2coYENsZWFuZWQgdXAgdGVtcG9yYXJ5IEVTTGludCBjb25maWcgYXQgJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2h7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn07Il0sIm5hbWVzIjpbImV4ZWNhIiwiZXhpc3RzU3luYyIsInJlYWRGaWxlU3luYyIsInVubGlua1N5bmMiLCJ3cml0ZUZpbGVTeW5jIiwiZGlybmFtZSIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsImV4dG5hbWUiLCJMZXhDb25maWciLCJjcmVhdGVTcGlubmVyIiwicmVzb2x2ZUJpbmFyeVBhdGgiLCJsb2ciLCJjdXJyZW50RmlsZW5hbWUiLCJjdXJyZW50RGlybmFtZSIsImV2YWwiLCJwcm9jZXNzIiwiY3dkIiwiY3JlYXRlRGVmYXVsdEVTTGludENvbmZpZyIsInVzZVR5cGVzY3JpcHQiLCJjb25maWdQYXRoIiwib3JpZ2luYWxDb25maWciLCJjb25maWdDb250ZW50IiwiZGV0ZWN0VHlwZVNjcmlwdCIsImVuc3VyZU1vZHVsZVR5cGUiLCJwYWNrYWdlSnNvblBhdGgiLCJwYWNrYWdlSnNvbkNvbnRlbnQiLCJwYWNrYWdlSnNvbiIsIkpTT04iLCJwYXJzZSIsInR5cGUiLCJfZXJyb3IiLCJpbnN0YWxsRGVwZW5kZW5jaWVzIiwicXVpZXQiLCJydW5Fc2xpbnRXaXRoTGV4IiwiY2xpTmFtZSIsImZpeCIsImRlYnVnIiwiY2FwdHVyZU91dHB1dCIsInNwaW5uZXIiLCJwcm9qZWN0Q29uZmlnUGF0aCIsInByb2plY3RDb25maWdQYXRoVHMiLCJoYXNQcm9qZWN0Q29uZmlnIiwiaGFzTGV4Q29uZmlnRXNsaW50IiwiY29uZmlnIiwiZXNsaW50IiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsInBvc3NpYmxlUGF0aHMiLCJlbnYiLCJMRVhfSE9NRSIsImxleENvbmZpZ1BhdGgiLCJwYXRoIiwidGVtcENvbmZpZ1BhdGgiLCJzdHJpbmdpZnkiLCJlc2xpbnRCaW5hcnkiLCJiYXNlRXNsaW50QXJncyIsImNvbmZpZ0FyZ3MiLCJqc1Jlc3VsdCIsInJlamVjdCIsInNoZWxsIiwic3RkaW8iLCJzdGRvdXQiLCJjb25zb2xlIiwic3RkZXJyIiwiZXJyb3IiLCJ0c1Jlc3VsdCIsImV4aXRDb2RlIiwibWVzc2FnZSIsImVzbGludE5vdEZvdW5kIiwiaW5jbHVkZXMiLCJmYWlsIiwic3VjY2VlZCIsIm5vRmlsZXNGb3VuZCIsImFwcGx5QUlGaXgiLCJlcnJvcnMiLCJzdGFydCIsImZpbGVFcnJvck1hcCIsIk1hcCIsImxpbmVzIiwic3BsaXQiLCJjdXJyZW50RmlsZSIsImxpbmUiLCJtYXRjaCIsInRyaW0iLCJoYXMiLCJzZXQiLCJlcnJvckFycmF5IiwiZ2V0IiwicHVzaCIsInNpemUiLCJzZWN0aW9ucyIsInNlY3Rpb24iLCJmaWxlUGF0aCIsImkiLCJmaWxlUGF0aFJlZ2V4IiwiZmlsZVBhdGhzIiwia25vd25GaWxlcyIsImZpbGUiLCJpc0N1cnNvcklERSIsImFpIiwicHJvdmlkZXIiLCJDVVJTT1JfSURFIiwicHJvbXB0IiwicHJvbXB0RmlsZSIsIndhc01vZGlmaWVkIiwiYXBwbHlEaXJlY3RGaXhlcyIsImZpbGVFcnJvcnMiLCJjYWxsQUlTZXJ2aWNlIiwiZmlsZUNvbnRlbnQiLCJqb2luIiwiZml4ZWRDb250ZW50IiwibmV3Q29udGVudCIsInJlcGxhY2UiLCJsb2FkQUlDb25maWciLCJjb25maWdGb3JtYXRzIiwiY29uZmlnQmFzZU5hbWUiLCJmb3JtYXQiLCJwb3RlbnRpYWxQYXRoIiwic2xpY2UiLCJpbXBvcnRQYXRoIiwidXJsIiwiVVJMIiwiaHJlZiIsInVybEVycm9yIiwibGV4Q29uZmlnIiwiaW1wb3J0RXJyb3IiLCJjb25maWdEYXRhIiwiZGVmYXVsdCIsImxvYWRFU0xpbnRDb25maWciLCJmaWxlRm9ybWF0IiwicmVtb3ZlRmlsZUNvbW1lbnRzIiwibGludCIsImNtZCIsImNhbGxiYWNrIiwiZXhpdCIsInJlbW92ZUNvbW1lbnRzIiwicmVtb3ZlQ29tbWVudHNGbGFnIiwic2hvdWxkUmVtb3ZlQ29tbWVudHMiLCJjaGVja0xpbnRUeXBlc2NyaXB0Q29uZmlnIiwiaGFzRXNsaW50Q29uZmlnIiwiaGFzTGV4RXNsaW50Q29uZmlnIiwic2hvdWxkQ3JlYXRlVGVtcENvbmZpZyIsInVzZXJDb25maWdQYXRoIiwiY29uZmlnUmVzdWx0IiwiZXNsaW50T3V0cHV0Iiwib3V0cHV0IiwicmVzdWx0IiwiZ2xvYiIsImZpbGVzIiwic3luYyIsImlnbm9yZSIsInByb2Nlc3NlZENvdW50IiwiYWlDb25maWd1cmVkIiwiYWZ0ZXJGaXhSZXN1bHQiLCJ0ZW1wRmlsZVBhdGhzIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxLQUFLLFFBQU8sUUFBUTtBQUM1QixTQUFRQyxVQUFVLEVBQUVDLFlBQVksRUFBRUMsVUFBVSxFQUFFQyxhQUFhLFFBQU8sS0FBSztBQUN2RSxTQUFRQyxPQUFPLEVBQUVDLFdBQVdDLFdBQVcsRUFBRUMsT0FBTyxRQUFPLE9BQU87QUFFOUQsU0FBUUMsU0FBUyxRQUFPLHFCQUFxQjtBQUM3QyxTQUFRQyxhQUFhLFFBQU8scUJBQXFCO0FBQ2pELFNBQVFDLGlCQUFpQixRQUFPLHNCQUFzQjtBQUN0RCxTQUFRQyxHQUFHLFFBQU8scUJBQXFCO0FBRXZDLElBQUlDO0FBQ0osSUFBSUM7QUFFSixJQUFJO0lBQ0ZELGtCQUFrQkUsS0FBSztJQUN2QkQsaUJBQWlCVCxRQUFRUTtBQUMzQixFQUFFLE9BQUs7SUFD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
package/lib/index.d.ts CHANGED
@@ -12,7 +12,6 @@ export * from './utils/aiService.js';
12
12
  export * from './utils/app.js';
13
13
  export * from './utils/file.js';
14
14
  export * from './utils/log.js';
15
- export * from './utils/reactShim.js';
16
15
  export * from './storybook/index.js';
17
16
  export * from './commands/ai/ai.js';
18
17
  export * from './commands/build/build.js';
package/lib/index.js CHANGED
@@ -14,7 +14,6 @@ export * from './utils/aiService.js';
14
14
  export * from './utils/app.js';
15
15
  export * from './utils/file.js';
16
16
  export * from './utils/log.js';
17
- export * from './utils/reactShim.js';
18
17
  // Export Storybook module
19
18
  export * from './storybook/index.js';
20
19
  // Export commands
@@ -38,4 +37,4 @@ export * from './commands/update/update.js';
38
37
  export * from './commands/upgrade/upgrade.js';
39
38
  export * from './commands/versions/versions.js';
40
39
 
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7TGV4Q29uZmlnVHlwZX0gZnJvbSAnLi9MZXhDb25maWcuanMnO1xuXG4vLyBFeHBvcnQgdHlwZXMgZnJvbSB0eXBlcy50c1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIEV4cG9ydCBjbGFzc2VzIGFuZCB2YWx1ZXMgZnJvbSBMZXhDb25maWdcbmV4cG9ydCB7XG4gIGRlZmF1bHRDb25maWdWYWx1ZXMsIExleENvbmZpZ1xufSBmcm9tICcuL0xleENvbmZpZy5qcyc7XG5cbi8vIEV4cG9ydCBDb25maWcgYXMgYm90aCBhIHR5cGUgYW5kIGEgbmFtZXNwYWNlIHdpdGggY3JlYXRlIG1ldGhvZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuZXhwb3J0IGNvbnN0IENvbmZpZyA9IHtcbiAgY3JlYXRlOiAoY29uZmlnOiBMZXhDb25maWdUeXBlKSA9PiBjb25maWdcbn07XG5cbi8vIEV4cG9ydCB1dGlsaXR5IGZ1bmN0aW9uc1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9haVNlcnZpY2UuanMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9hcHAuanMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9maWxlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvbG9nLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvcmVhY3RTaGltLmpzJztcblxuLy8gRXhwb3J0IFN0b3J5Ym9vayBtb2R1bGVcbmV4cG9ydCAqIGZyb20gJy4vc3Rvcnlib29rL2luZGV4LmpzJztcblxuLy8gRXhwb3J0IGNvbW1hbmRzXG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2FpL2FpLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvYnVpbGQvYnVpbGQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy9jbGVhbi9jbGVhbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2NvbXBpbGUvY29tcGlsZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2NvbmZpZy9jb25maWcuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy9jb3B5L2NvcHkuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy9jcmVhdGUvY3JlYXRlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvZGV2L2Rldi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2luaXQvaW5pdC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2xpbmsvbGluay5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2xpbnQvbGludC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL21pZ3JhdGUvbWlncmF0ZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL3B1Ymxpc2gvcHVibGlzaC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL3NlcnZlcmxlc3Mvc2VydmVybGVzcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL3N0b3J5Ym9vay9zdG9yeWJvb2suanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy90ZXN0L3Rlc3QuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy91cGRhdGUvdXBkYXRlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvdXBncmFkZS91cGdyYWRlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvdmVyc2lvbnMvdmVyc2lvbnMuanMnO1xuIl0sIm5hbWVzIjpbImRlZmF1bHRDb25maWdWYWx1ZXMiLCJMZXhDb25maWciLCJDb25maWciLCJjcmVhdGUiLCJjb25maWciXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUlELDZCQUE2QjtBQUM3QixjQUFjLGFBQWE7QUFFM0IsMkNBQTJDO0FBQzNDLFNBQ0VBLG1CQUFtQixFQUFFQyxTQUFTLFFBQ3pCLGlCQUFpQjtBQUV4Qiw2RkFBNkY7QUFDN0YsT0FBTyxNQUFNQyxTQUFTO0lBQ3BCQyxRQUFRLENBQUNDLFNBQTBCQTtBQUNyQyxFQUFFO0FBRUYsMkJBQTJCO0FBQzNCLGNBQWMsdUJBQXVCO0FBQ3JDLGNBQWMsaUJBQWlCO0FBQy9CLGNBQWMsa0JBQWtCO0FBQ2hDLGNBQWMsaUJBQWlCO0FBQy9CLGNBQWMsdUJBQXVCO0FBRXJDLDBCQUEwQjtBQUMxQixjQUFjLHVCQUF1QjtBQUVyQyxrQkFBa0I7QUFDbEIsY0FBYyxzQkFBc0I7QUFDcEMsY0FBYyw0QkFBNEI7QUFDMUMsY0FBYyw0QkFBNEI7QUFDMUMsY0FBYyxnQ0FBZ0M7QUFDOUMsY0FBYyw4QkFBOEI7QUFDNUMsY0FBYywwQkFBMEI7QUFDeEMsY0FBYyw4QkFBOEI7QUFDNUMsY0FBYyx3QkFBd0I7QUFDdEMsY0FBYywwQkFBMEI7QUFDeEMsY0FBYywwQkFBMEI7QUFDeEMsY0FBYywwQkFBMEI7QUFDeEMsY0FBYyxnQ0FBZ0M7QUFDOUMsY0FBYyxnQ0FBZ0M7QUFDOUMsY0FBYyxzQ0FBc0M7QUFDcEQsY0FBYyxvQ0FBb0M7QUFDbEQsY0FBYywwQkFBMEI7QUFDeEMsY0FBYyw4QkFBOEI7QUFDNUMsY0FBYyxnQ0FBZ0M7QUFDOUMsY0FBYyxrQ0FBa0MifQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7TGV4Q29uZmlnVHlwZX0gZnJvbSAnLi9MZXhDb25maWcuanMnO1xuXG4vLyBFeHBvcnQgdHlwZXMgZnJvbSB0eXBlcy50c1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIEV4cG9ydCBjbGFzc2VzIGFuZCB2YWx1ZXMgZnJvbSBMZXhDb25maWdcbmV4cG9ydCB7XG4gIGRlZmF1bHRDb25maWdWYWx1ZXMsIExleENvbmZpZ1xufSBmcm9tICcuL0xleENvbmZpZy5qcyc7XG5cbi8vIEV4cG9ydCBDb25maWcgYXMgYm90aCBhIHR5cGUgYW5kIGEgbmFtZXNwYWNlIHdpdGggY3JlYXRlIG1ldGhvZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuZXhwb3J0IGNvbnN0IENvbmZpZyA9IHtcbiAgY3JlYXRlOiAoY29uZmlnOiBMZXhDb25maWdUeXBlKSA9PiBjb25maWdcbn07XG5cbi8vIEV4cG9ydCB1dGlsaXR5IGZ1bmN0aW9uc1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9haVNlcnZpY2UuanMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9hcHAuanMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9maWxlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvbG9nLmpzJztcblxuLy8gRXhwb3J0IFN0b3J5Ym9vayBtb2R1bGVcbmV4cG9ydCAqIGZyb20gJy4vc3Rvcnlib29rL2luZGV4LmpzJztcblxuLy8gRXhwb3J0IGNvbW1hbmRzXG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2FpL2FpLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvYnVpbGQvYnVpbGQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy9jbGVhbi9jbGVhbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2NvbXBpbGUvY29tcGlsZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2NvbmZpZy9jb25maWcuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy9jb3B5L2NvcHkuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy9jcmVhdGUvY3JlYXRlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvZGV2L2Rldi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2luaXQvaW5pdC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2xpbmsvbGluay5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2xpbnQvbGludC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL21pZ3JhdGUvbWlncmF0ZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL3B1Ymxpc2gvcHVibGlzaC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL3NlcnZlcmxlc3Mvc2VydmVybGVzcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL3N0b3J5Ym9vay9zdG9yeWJvb2suanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy90ZXN0L3Rlc3QuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy91cGRhdGUvdXBkYXRlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvdXBncmFkZS91cGdyYWRlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvdmVyc2lvbnMvdmVyc2lvbnMuanMnO1xuIl0sIm5hbWVzIjpbImRlZmF1bHRDb25maWdWYWx1ZXMiLCJMZXhDb25maWciLCJDb25maWciLCJjcmVhdGUiLCJjb25maWciXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUlELDZCQUE2QjtBQUM3QixjQUFjLGFBQWE7QUFFM0IsMkNBQTJDO0FBQzNDLFNBQ0VBLG1CQUFtQixFQUFFQyxTQUFTLFFBQ3pCLGlCQUFpQjtBQUV4Qiw2RkFBNkY7QUFDN0YsT0FBTyxNQUFNQyxTQUFTO0lBQ3BCQyxRQUFRLENBQUNDLFNBQTBCQTtBQUNyQyxFQUFFO0FBRUYsMkJBQTJCO0FBQzNCLGNBQWMsdUJBQXVCO0FBQ3JDLGNBQWMsaUJBQWlCO0FBQy9CLGNBQWMsa0JBQWtCO0FBQ2hDLGNBQWMsaUJBQWlCO0FBRS9CLDBCQUEwQjtBQUMxQixjQUFjLHVCQUF1QjtBQUVyQyxrQkFBa0I7QUFDbEIsY0FBYyxzQkFBc0I7QUFDcEMsY0FBYyw0QkFBNEI7QUFDMUMsY0FBYyw0QkFBNEI7QUFDMUMsY0FBYyxnQ0FBZ0M7QUFDOUMsY0FBYyw4QkFBOEI7QUFDNUMsY0FBYywwQkFBMEI7QUFDeEMsY0FBYyw4QkFBOEI7QUFDNUMsY0FBYyx3QkFBd0I7QUFDdEMsY0FBYywwQkFBMEI7QUFDeEMsY0FBYywwQkFBMEI7QUFDeEMsY0FBYywwQkFBMEI7QUFDeEMsY0FBYyxnQ0FBZ0M7QUFDOUMsY0FBYyxnQ0FBZ0M7QUFDOUMsY0FBYyxzQ0FBc0M7QUFDcEQsY0FBYyxvQ0FBb0M7QUFDbEQsY0FBYywwQkFBMEI7QUFDeEMsY0FBYyw4QkFBOEI7QUFDNUMsY0FBYyxnQ0FBZ0M7QUFDOUMsY0FBYyxrQ0FBa0MifQ==
@@ -3,7 +3,6 @@
3
3
  * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
4
  */
5
5
  import type { LexConfigType } from '../LexConfig.js';
6
- export declare const cwd: string;
7
6
  export interface GetFilenamesProps {
8
7
  readonly callback?: (status: number) => void;
9
8
  readonly cliName?: string;
package/lib/utils/app.js CHANGED
@@ -10,7 +10,6 @@ import ora from 'ora';
10
10
  import { basename as pathBasename, join as pathJoin, relative as pathRelative, resolve as pathResolve } from 'path';
11
11
  import { rimrafSync } from 'rimraf';
12
12
  import { log } from './log.js';
13
- export const cwd = process.cwd();
14
13
  export const getFilenames = (props)=>{
15
14
  const { callback, cliName, name, quiet, type, useTypescript } = props;
16
15
  let nameCaps;
@@ -120,7 +119,7 @@ export const copyConfiguredFiles = async (spinner, config, quiet)=>{
120
119
  try {
121
120
  spinner.start('Copying configured files...');
122
121
  let totalCopied = 0;
123
- const baseDir = sourceFullPath || (sourcePath ? pathResolve(cwd, sourcePath) : cwd);
122
+ const baseDir = sourceFullPath || (sourcePath ? pathResolve(process.cwd(), sourcePath) : process.cwd());
124
123
  const allCopyPromises = [];
125
124
  for (const pattern of copyFilesConfig){
126
125
  const resolvedPattern = pathResolve(baseDir, pattern);
@@ -219,7 +218,7 @@ export const removeConflictModules = (moduleList)=>{
219
218
  return updatedList;
220
219
  };
221
220
  export const removeFiles = (fileName, isRelative = false)=>new Promise((resolve, reject)=>{
222
- const filePath = isRelative ? pathResolve(cwd, fileName) : fileName;
221
+ const filePath = isRelative ? pathResolve(process.cwd(), fileName) : fileName;
223
222
  try {
224
223
  rimrafSync(filePath);
225
224
  return resolve(null);
@@ -299,4 +298,4 @@ export const updateTemplateName = (filePath, replace, replaceCaps)=>{
299
298
  writeFileSync(filePath, data, 'utf8');
300
299
  };
301
300
 
302
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9hcHAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuaW1wb3J0IGJveGVuIGZyb20gJ2JveGVuJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQge2NvcHlGaWxlLCBleGlzdHNTeW5jLCBsc3RhdFN5bmMsIG1rZGlyU3luYywgcmVhZGRpclN5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5LmpzJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCB7YmFzZW5hbWUgYXMgcGF0aEJhc2VuYW1lLCBqb2luIGFzIHBhdGhKb2luLCByZWxhdGl2ZSBhcyBwYXRoUmVsYXRpdmUsIHJlc29sdmUgYXMgcGF0aFJlc29sdmV9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtyaW1yYWZTeW5jfSBmcm9tICdyaW1yYWYnO1xuXG5cbmltcG9ydCB7bG9nfSBmcm9tICcuL2xvZy5qcyc7XG5cbmltcG9ydCB0eXBlIHtMZXhDb25maWdUeXBlfSBmcm9tICcuLi9MZXhDb25maWcuanMnO1xuXG5cbmV4cG9ydCBjb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0RmlsZW5hbWVzUHJvcHMge1xuICByZWFkb25seSBjYWxsYmFjaz86IChzdGF0dXM6IG51bWJlcik9PiB2b2lkO1xuICByZWFkb25seSBjbGlOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHR5cGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVzZVR5cGVzY3JpcHQ/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRmlsZW5hbWVzUmVzdWx0IHtcbiAgbmFtZUNhcHM6IHN0cmluZztcbiAgdGVtcGxhdGVFeHQ6IHN0cmluZztcbiAgdGVtcGxhdGVQYXRoOiBzdHJpbmc7XG4gIHRlbXBsYXRlUmVhY3Q6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGdldEZpbGVuYW1lcyA9IChwcm9wczogR2V0RmlsZW5hbWVzUHJvcHMpOiBGaWxlbmFtZXNSZXN1bHQgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCB7Y2FsbGJhY2ssIGNsaU5hbWUsIG5hbWUsIHF1aWV0LCB0eXBlLCB1c2VUeXBlc2NyaXB0fSA9IHByb3BzO1xuXG4gIGxldCBuYW1lQ2Fwczogc3RyaW5nO1xuICBjb25zdCBpdGVtVHlwZXM6IHN0cmluZ1tdID0gWydzdG9yZXMnLCAndmlld3MnXTtcblxuICBpZighbmFtZSkge1xuICAgIGlmKGl0ZW1UeXBlcy5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke3R5cGV9IG5hbWUgaXMgcmVxdWlyZWQuIFBsZWFzZSB1c2UgJ2xleCAtaCcgZm9yIG9wdGlvbnMuYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgY2FsbGJhY2s/LigxKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5hbWVDYXBzID0gYCR7bmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke25hbWUuc3Vic3RyKDEpfWA7XG4gIH1cblxuICBsb2coYCR7Y2xpTmFtZX0gYWRkaW5nICR7bmFtZX0gJHt0eXBlfS4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGxldCB0ZW1wbGF0ZVBhdGg6IHN0cmluZztcbiAgbGV0IHRlbXBsYXRlRXh0OiBzdHJpbmc7XG4gIGxldCB0ZW1wbGF0ZVJlYWN0OiBzdHJpbmc7XG5cbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIHRlbXBsYXRlUGF0aCA9ICcuLi8uLi90ZW1wbGF0ZXMvdHlwZXNjcmlwdCc7XG4gICAgdGVtcGxhdGVFeHQgPSAnLnRzJztcbiAgICB0ZW1wbGF0ZVJlYWN0ID0gJy50c3gnO1xuICB9IGVsc2Uge1xuICAgIHRlbXBsYXRlUGF0aCA9ICcuLi8uLi90ZW1wbGF0ZXMvZmxvdyc7XG4gICAgdGVtcGxhdGVFeHQgPSAnLmpzJztcbiAgICB0ZW1wbGF0ZVJlYWN0ID0gJy5qcyc7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWVDYXBzLFxuICAgIHRlbXBsYXRlRXh0LFxuICAgIHRlbXBsYXRlUGF0aCxcbiAgICB0ZW1wbGF0ZVJlYWN0XG4gIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwaW5uZXIge1xuICBmYWlsOiAodGV4dD86IHN0cmluZyk9PiB2b2lkO1xuICBzdGFydDogKHRleHQ/OiBzdHJpbmcpPT4gdm9pZDtcbiAgc3VjY2VlZDogKHRleHQ/OiBzdHJpbmcpPT4gdm9pZDtcbiAgdGV4dD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNwaW5uZXIgPSAocXVpZXQgPSBmYWxzZSk6IFNwaW5uZXIgPT4ge1xuICBpZihxdWlldCkge1xuICAgIHJldHVybiB7XG4gICAgICBmYWlsOiAoKSA9PiB7fSxcbiAgICAgIHN0YXJ0OiAoKSA9PiB7fSxcbiAgICAgIHN1Y2NlZWQ6ICgpID0+IHt9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBvcmEoe2NvbG9yOiAneWVsbG93J30pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVByb2dyZXNzQmFyID0gKHBlcmNlbnRhZ2U6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHdpZHRoID0gMjA7XG4gIGNvbnN0IGZpbGxlZCA9IE1hdGgucm91bmQoKHBlcmNlbnRhZ2UgLyAxMDApICogd2lkdGgpO1xuICBjb25zdCBlbXB0eSA9IHdpZHRoIC0gZmlsbGVkO1xuXG4gIGNvbnN0IGZpbGxlZEJhciA9IGNoYWxrLmN5YW4oJ+KWiCcpLnJlcGVhdChmaWxsZWQpO1xuICBjb25zdCBlbXB0eUJhciA9IGNoYWxrLmdyYXkoJ+KWkScpLnJlcGVhdChlbXB0eSk7XG5cbiAgcmV0dXJuIGZpbGxlZEJhciArIGVtcHR5QmFyO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZVdlYnBhY2tQcm9ncmVzcyA9IChcbiAgb3V0cHV0OiBzdHJpbmcsXG4gIHNwaW5uZXI6IFNwaW5uZXIsXG4gIHF1aWV0OiBib29sZWFuLFxuICBlbW9qaTogc3RyaW5nLFxuICBhY3Rpb246IHN0cmluZ1xuKTogdm9pZCA9PiB7XG4gIGlmKHF1aWV0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcHJvZ3Jlc3NNYXRjaCA9IG91dHB1dC5tYXRjaCgvXFxbd2VicGFja1xcLlByb2dyZXNzXFxdIChcXGQrKSUvKTtcbiAgaWYocHJvZ3Jlc3NNYXRjaCkge1xuICAgIGNvbnN0IHByb2dyZXNzID0gcGFyc2VJbnQocHJvZ3Jlc3NNYXRjaFsxXSk7XG4gICAgY29uc3QgcHJvZ3Jlc3NCYXIgPSBjcmVhdGVQcm9ncmVzc0Jhcihwcm9ncmVzcyk7XG4gICAgc3Bpbm5lci50ZXh0ID0gYCR7ZW1vaml9ICR7YWN0aW9ufTogJHtwcm9ncmVzc0Jhcn0gJHtwcm9ncmVzc30lYDtcbiAgfSBlbHNlIGlmKG91dHB1dC5pbmNsdWRlcygnW3dlYnBhY2suUHJvZ3Jlc3NdJykpIHtcbiAgICBjb25zdCBnZW5lcmFsUHJvZ3Jlc3NNYXRjaCA9IG91dHB1dC5tYXRjaCgvKFxcZCspJS8pO1xuICAgIGlmKGdlbmVyYWxQcm9ncmVzc01hdGNoKSB7XG4gICAgICBjb25zdCBwcm9ncmVzcyA9IHBhcnNlSW50KGdlbmVyYWxQcm9ncmVzc01hdGNoWzFdKTtcbiAgICAgIGNvbnN0IHByb2dyZXNzQmFyID0gY3JlYXRlUHJvZ3Jlc3NCYXIocHJvZ3Jlc3MpO1xuICAgICAgc3Bpbm5lci50ZXh0ID0gYCR7ZW1vaml9ICR7YWN0aW9ufTogJHtwcm9ncmVzc0Jhcn0gJHtwcm9ncmVzc30lYDtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb3B5RmlsZXMgPSBhc3luYyAoZmlsZXM6IHN0cmluZ1tdLCB0eXBlTmFtZTogc3RyaW5nLCBzcGlubmVyLCBjb25maWc6IExleENvbmZpZ1R5cGUpID0+IHtcbiAgY29uc3Qge291dHB1dEZ1bGxQYXRoLCBzb3VyY2VGdWxsUGF0aH0gPSBjb25maWc7XG4gIGNvbnN0IGl0ZW1zID0gZmlsZXMubWFwKChmaWxlTmFtZTogc3RyaW5nKSA9PiAoe1xuICAgIGZyb206IGZpbGVOYW1lLFxuICAgIHRvOiBwYXRoUmVzb2x2ZShvdXRwdXRGdWxsUGF0aCwgcGF0aFJlbGF0aXZlKHNvdXJjZUZ1bGxQYXRoLCBmaWxlTmFtZSkpXG4gIH0pKTtcblxuICB0cnkge1xuICAgIHNwaW5uZXIuc3RhcnQoYENvcHlpbmcgJHt0eXBlTmFtZX0gZmlsZXMuLi5gKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChpdGVtcy5tYXAoKHtmcm9tLCB0b30pID0+IG5ldyBQcm9taXNlKFxuICAgICAgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBta2RpclN5bmMocGF0aFJlc29sdmUodG8sICcuLicpLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gICAgICAgIHJldHVybiBjb3B5RmlsZShmcm9tLCB0bywgKGNvcHlFcnJvcikgPT4ge1xuICAgICAgICAgIGlmKGNvcHlFcnJvcikge1xuICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApKSk7XG4gICAgc3Bpbm5lci5zdWNjZWVkKGBTdWNjZXNzZnVsbHkgY29waWVkICR7ZmlsZXMubGVuZ3RofSAke3R5cGVOYW1lfSBmaWxlcyFgKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbChgQ29weWluZyBvZiAke3R5cGVOYW1lfSBmaWxlcyBmYWlsZWQuYCk7XG4gICAgbG9nKGBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicpO1xuICAgIGxvZyhlcnJvciwgJ2Vycm9yJyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb3B5Q29uZmlndXJlZEZpbGVzID0gYXN5bmMgKHNwaW5uZXIsIGNvbmZpZzogTGV4Q29uZmlnVHlwZSwgcXVpZXQ6IGJvb2xlYW4pID0+IHtcbiAgY29uc3Qge2NvcHlGaWxlczogY29weUZpbGVzQ29uZmlnLCBvdXRwdXRGdWxsUGF0aCwgc291cmNlRnVsbFBhdGgsIHNvdXJjZVBhdGh9ID0gY29uZmlnO1xuICBpZighY29weUZpbGVzQ29uZmlnIHx8IGNvcHlGaWxlc0NvbmZpZy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIHNwaW5uZXIuc3RhcnQoJ0NvcHlpbmcgY29uZmlndXJlZCBmaWxlcy4uLicpO1xuICAgIGxldCB0b3RhbENvcGllZCA9IDA7XG5cbiAgICBjb25zdCBiYXNlRGlyID0gc291cmNlRnVsbFBhdGggfHwgKHNvdXJjZVBhdGggPyBwYXRoUmVzb2x2ZShjd2QsIHNvdXJjZVBhdGgpIDogY3dkKTtcbiAgICBjb25zdCBhbGxDb3B5UHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj5bXSA9IFtdO1xuXG4gICAgZm9yKGNvbnN0IHBhdHRlcm4gb2YgY29weUZpbGVzQ29uZmlnKSB7XG4gICAgICBjb25zdCByZXNvbHZlZFBhdHRlcm4gPSBwYXRoUmVzb2x2ZShiYXNlRGlyLCBwYXR0ZXJuKTtcbiAgICAgIGNvbnN0IG1hdGNoaW5nRmlsZXMgPSBnbG9iU3luYyhyZXNvbHZlZFBhdHRlcm4sIHtcbiAgICAgICAgYWJzb2x1dGU6IHRydWUsXG4gICAgICAgIG5vZGlyOiB0cnVlXG4gICAgICB9KTtcblxuICAgICAgaWYobWF0Y2hpbmdGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYoIXF1aWV0KSB7XG4gICAgICAgICAgbG9nKGBXYXJuaW5nOiBObyBmaWxlcyBmb3VuZCBtYXRjaGluZyBwYXR0ZXJuOiAke3BhdHRlcm59YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvcHlQcm9taXNlcyA9IG1hdGNoaW5nRmlsZXMubWFwKChzb3VyY2VGaWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGhSZWxhdGl2ZShiYXNlRGlyLCBzb3VyY2VGaWxlKTtcbiAgICAgICAgY29uc3QgZGVzdFBhdGggPSBwYXRoUmVzb2x2ZShvdXRwdXRGdWxsUGF0aCwgcmVsYXRpdmVQYXRoKTtcbiAgICAgICAgY29uc3QgZGVzdERpciA9IHBhdGhSZXNvbHZlKGRlc3RQYXRoLCAnLi4nKTtcbiAgICAgICAgbWtkaXJTeW5jKGRlc3REaXIsIHtyZWN1cnNpdmU6IHRydWV9KTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGNvcHlGaWxlKHNvdXJjZUZpbGUsIGRlc3RQYXRoLCAoY29weUVycm9yKSA9PiB7XG4gICAgICAgICAgICBpZihjb3B5RXJyb3IpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KGNvcHlFcnJvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBhbGxDb3B5UHJvbWlzZXMucHVzaCguLi5jb3B5UHJvbWlzZXMpO1xuICAgICAgdG90YWxDb3BpZWQgKz0gbWF0Y2hpbmdGaWxlcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoYWxsQ29weVByb21pc2VzKTtcblxuICAgIGlmKHRvdGFsQ29waWVkID4gMCkge1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKGBTdWNjZXNzZnVsbHkgY29waWVkICR7dG90YWxDb3BpZWR9IGNvbmZpZ3VyZWQgZmlsZXMhYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZCgnTm8gY29uZmlndXJlZCBmaWxlcyB0byBjb3B5Jyk7XG4gICAgfVxuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gY29weSBjb25maWd1cmVkIGZpbGVzJyk7XG4gICAgbG9nKGBFcnJvciBjb3B5aW5nIGNvbmZpZ3VyZWQgZmlsZXM6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb3B5RmlsZVN5bmMgPSAoc291cmNlOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nKSA9PiB7XG4gIGxldCB0YXJnZXRGaWxlOiBzdHJpbmcgPSB0YXJnZXQ7XG5cbiAgaWYoZXhpc3RzU3luYyh0YXJnZXQpKSB7XG4gICAgaWYobHN0YXRTeW5jKHRhcmdldCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGFyZ2V0RmlsZSA9IHBhdGhKb2luKHRhcmdldCwgcGF0aEJhc2VuYW1lKHNvdXJjZSkpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlRmlsZVN5bmModGFyZ2V0RmlsZSwgcmVhZEZpbGVTeW5jKHNvdXJjZSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvcHlGb2xkZXJSZWN1cnNpdmVTeW5jID0gKHNvdXJjZTogc3RyaW5nLCB0YXJnZXQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICBsZXQgZmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3QgdGFyZ2V0Rm9sZGVyOiBzdHJpbmcgPSBwYXRoSm9pbih0YXJnZXQsIHBhdGhCYXNlbmFtZShzb3VyY2UpKTtcblxuICBpZighZXhpc3RzU3luYyh0YXJnZXRGb2xkZXIpKSB7XG4gICAgbWtkaXJTeW5jKHRhcmdldEZvbGRlcik7XG4gIH1cblxuICBpZihsc3RhdFN5bmMoc291cmNlKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgZmlsZXMgPSByZWFkZGlyU3luYyhzb3VyY2UpO1xuICAgIGZpbGVzLmZvckVhY2goKGZpbGU6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgY3VyU291cmNlOiBzdHJpbmcgPSBwYXRoSm9pbihzb3VyY2UsIGZpbGUpO1xuXG4gICAgICBpZihsc3RhdFN5bmMoY3VyU291cmNlKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIGNvcHlGb2xkZXJSZWN1cnNpdmVTeW5jKGN1clNvdXJjZSwgdGFyZ2V0Rm9sZGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvcHlGaWxlU3luYyhjdXJTb3VyY2UsIHRhcmdldEZvbGRlcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQYWNrYWdlSnNvbiA9IChwYWNrYWdlUGF0aD86IHN0cmluZykgPT4ge1xuICBjb25zdCBmb3JtYXRQYXRoOiBzdHJpbmcgPSBwYWNrYWdlUGF0aCB8fCBgJHtwcm9jZXNzLmN3ZCgpfS9wYWNrYWdlLmpzb25gO1xuICBjb25zdCBwYWNrYWdlRGF0YTogc3RyaW5nID0gcmVhZEZpbGVTeW5jKGZvcm1hdFBhdGgpLnRvU3RyaW5nKCk7XG5cbiAgcmV0dXJuIEpTT04ucGFyc2UocGFja2FnZURhdGEpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbGVzQnlFeHQgPSAoZXh0OiBzdHJpbmcsIGNvbmZpZzogTGV4Q29uZmlnVHlwZSk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3Qge3NvdXJjZUZ1bGxQYXRofSA9IGNvbmZpZztcbiAgcmV0dXJuIGdsb2JTeW5jKGAqKi8qKiR7ZXh0fWAsIHtcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICBjd2Q6IHNvdXJjZUZ1bGxQYXRoLFxuICAgIG5vZGlyOiB0cnVlXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUNvbmZsaWN0TW9kdWxlcyA9IChtb2R1bGVMaXN0OiBvYmplY3QpID0+IHtcbiAgY29uc3QgdXBkYXRlZExpc3Q6IG9iamVjdCA9IHsuLi5tb2R1bGVMaXN0fTtcblxuICBPYmplY3Qua2V5cyh1cGRhdGVkTGlzdCkuZm9yRWFjaCgobW9kdWxlTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVnZXg6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoJ14oPyFAdHlwZXMvKS4qPyhqZXN0fHdlYnBhY2spLiokJywgJ2dpJyk7XG4gICAgaWYocmVnZXgudGVzdChtb2R1bGVOYW1lKSkge1xuICAgICAgZGVsZXRlIHVwZGF0ZWRMaXN0W21vZHVsZU5hbWVdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHVwZGF0ZWRMaXN0O1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUZpbGVzID0gKGZpbGVOYW1lOiBzdHJpbmcsIGlzUmVsYXRpdmU6IGJvb2xlYW4gPSBmYWxzZSkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICBjb25zdCBmaWxlUGF0aDogc3RyaW5nID0gaXNSZWxhdGl2ZSA/IHBhdGhSZXNvbHZlKGN3ZCwgZmlsZU5hbWUpIDogZmlsZU5hbWU7XG5cbiAgdHJ5IHtcbiAgICByaW1yYWZTeW5jKGZpbGVQYXRoKTtcbiAgICByZXR1cm4gcmVzb2x2ZShudWxsKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICB9XG59KTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZU1vZHVsZXMgPSAoKSA9PiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgcmVtb3ZlRmlsZXMoJy4vbm9kZV9tb2R1bGVzJywgdHJ1ZSk7XG4gICAgYXdhaXQgcmVtb3ZlRmlsZXMoJy4veWFybi5sb2NrJywgdHJ1ZSk7XG4gICAgYXdhaXQgcmVtb3ZlRmlsZXMoJy4vcGFja2FnZS1sb2NrLmpzb24nLCB0cnVlKTtcblxuICAgIHJlc29sdmUobnVsbCk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZWplY3QoZXJyb3IpO1xuICB9XG59KTtcblxuZXhwb3J0IGNvbnN0IHNldFBhY2thZ2VKc29uID0gKGpzb24sIHBhY2thZ2VQYXRoPzogc3RyaW5nKSA9PiB7XG4gIGlmKCFqc29uKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0UGF0aDogc3RyaW5nID0gcGFja2FnZVBhdGggfHwgYCR7cHJvY2Vzcy5jd2QoKX0vcGFja2FnZS5qc29uYDtcblxuICB3cml0ZUZpbGVTeW5jKGZvcm1hdFBhdGgsIEpTT04uc3RyaW5naWZ5KGpzb24sIG51bGwsIDIpKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlua2VkTW9kdWxlVHlwZSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgbGlua2VkTW9kdWxlcyA9IChzdGFydFBhdGg/OiBzdHJpbmcpOiBMaW5rZWRNb2R1bGVUeXBlW10gPT4ge1xuICBjb25zdCB3b3JraW5nUGF0aDogc3RyaW5nID0gc3RhcnRQYXRoIHx8IHByb2Nlc3MuY3dkKCk7XG4gIGxldCBtb2R1bGVQYXRoOiBzdHJpbmc7XG4gIGxldCBwcmVmaXg6IHN0cmluZztcblxuICBpZih3b3JraW5nUGF0aC5pbmNsdWRlcygnQCcpKSB7XG4gICAgcHJlZml4ID0gYEAke3dvcmtpbmdQYXRoLnNwbGl0KCdAJykucG9wKCl9YDtcbiAgICBtb2R1bGVQYXRoID0gd29ya2luZ1BhdGg7XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlUGF0aCA9IHBhdGhKb2luKHdvcmtpbmdQYXRoLCAnbm9kZV9tb2R1bGVzJyk7XG4gIH1cblxuICBjb25zdCBmb3VuZFBhdGhzOiBzdHJpbmdbXSA9IGdsb2JTeW5jKCcqJywge1xuICAgIGFic29sdXRlOiB0cnVlLFxuICAgIGN3ZDogbW9kdWxlUGF0aCxcbiAgICBub2RpcjogZmFsc2VcbiAgfSk7XG5cbiAgcmV0dXJuIGZvdW5kUGF0aHMucmVkdWNlKChsaXN0OiBMaW5rZWRNb2R1bGVUeXBlW10sIGZvdW5kUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXRzID0gbHN0YXRTeW5jKGZvdW5kUGF0aCk7XG5cbiAgICAgIGlmKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgY29uc3QgZGVlcExpc3Q6IExpbmtlZE1vZHVsZVR5cGVbXSA9IGxpbmtlZE1vZHVsZXMoZm91bmRQYXRoKTtcbiAgICAgICAgbGlzdC5wdXNoKC4uLmRlZXBMaXN0KTtcbiAgICAgIH0gZWxzZSBpZihzdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZU5hbWVzOiBzdHJpbmdbXSA9IChbcHJlZml4LCBwYXRoQmFzZW5hbWUoZm91bmRQYXRoKV0pLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiAhaXNFbXB0eShpdGVtKSk7XG4gICAgICAgIGxpc3QucHVzaCh7bmFtZTogYCR7bW9kdWxlTmFtZXMuam9pbignLycpfWAsIHBhdGg6IGZvdW5kUGF0aH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9IGNhdGNoe1xuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuICB9LCBbXSk7XG59O1xuXG5leHBvcnQgY29uc3QgY2hlY2tMaW5rZWRNb2R1bGVzID0gKCkgPT4ge1xuICBjb25zdCBsaW5rZWQgPSBsaW5rZWRNb2R1bGVzKCk7XG5cbiAgaWYobGlua2VkLmxlbmd0aCkge1xuICAgIGNvbnN0IG1zZ01vZHVsZTogc3RyaW5nID0gbGlua2VkLmxlbmd0aCA+IDEgPyAnTW9kdWxlcycgOiAnTW9kdWxlJztcbiAgICBjb25zdCBsaW5rZWRNc2c6IHN0cmluZyA9IGxpbmtlZC5yZWR1Y2UoXG4gICAgICAobXNnOiBzdHJpbmcsIGxpbmtlZE1vZHVsZTogTGlua2VkTW9kdWxlVHlwZSkgPT5cbiAgICAgICAgYCR7bXNnfVxcbiAqICR7bGlua2VkTW9kdWxlLm5hbWV9YCxcbiAgICAgIGBMaW5rZWQgJHttc2dNb2R1bGV9OmBcbiAgICApO1xuXG4gICAgbG9nKGJveGVuKGxpbmtlZE1zZywge2RpbUJvcmRlcjogdHJ1ZSwgcGFkZGluZzogMX0pLCAnd2FybicpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlVGVtcGxhdGVOYW1lID0gKGZpbGVQYXRoOiBzdHJpbmcsIHJlcGxhY2U6IHN0cmluZywgcmVwbGFjZUNhcHM6IHN0cmluZykgPT4ge1xuICBsZXQgZGF0YTogc3RyaW5nID0gcmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmOCcpO1xuICBkYXRhID0gZGF0YS5yZXBsYWNlKC9zYW1wbGUvZywgcmVwbGFjZSk7XG4gIGRhdGEgPSBkYXRhLnJlcGxhY2UoL1NhbXBsZS9nLCByZXBsYWNlQ2Fwcyk7XG4gIHdyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGRhdGEsICd1dGY4Jyk7XG59OyJdLCJuYW1lcyI6WyJib3hlbiIsImNoYWxrIiwiY29weUZpbGUiLCJleGlzdHNTeW5jIiwibHN0YXRTeW5jIiwibWtkaXJTeW5jIiwicmVhZGRpclN5bmMiLCJyZWFkRmlsZVN5bmMiLCJ3cml0ZUZpbGVTeW5jIiwic3luYyIsImdsb2JTeW5jIiwiaXNFbXB0eSIsIm9yYSIsImJhc2VuYW1lIiwicGF0aEJhc2VuYW1lIiwiam9pbiIsInBhdGhKb2luIiwicmVsYXRpdmUiLCJwYXRoUmVsYXRpdmUiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJyaW1yYWZTeW5jIiwibG9nIiwiY3dkIiwicHJvY2VzcyIsImdldEZpbGVuYW1lcyIsInByb3BzIiwiY2FsbGJhY2siLCJjbGlOYW1lIiwibmFtZSIsInF1aWV0IiwidHlwZSIsInVzZVR5cGVzY3JpcHQiLCJuYW1lQ2FwcyIsIml0ZW1UeXBlcyIsImluY2x1ZGVzIiwidW5kZWZpbmVkIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzdWJzdHIiLCJ0ZW1wbGF0ZVBhdGgiLCJ0ZW1wbGF0ZUV4dCIsInRlbXBsYXRlUmVhY3QiLCJjcmVhdGVTcGlubmVyIiwiZmFpbCIsInN0YXJ0Iiwic3VjY2VlZCIsImNvbG9yIiwiY3JlYXRlUHJvZ3Jlc3NCYXIiLCJwZXJjZW50YWdlIiwid2lkdGgiLCJmaWxsZWQiLCJNYXRoIiwicm91bmQiLCJlbXB0eSIsImZpbGxlZEJhciIsImN5YW4iLCJyZXBlYXQiLCJlbXB0eUJhciIsImdyYXkiLCJoYW5kbGVXZWJwYWNrUHJvZ3Jlc3MiLCJvdXRwdXQiLCJzcGlubmVyIiwiZW1vamkiLCJhY3Rpb24iLCJwcm9ncmVzc01hdGNoIiwibWF0Y2giLCJwcm9ncmVzcyIsInBhcnNlSW50IiwicHJvZ3Jlc3NCYXIiLCJ0ZXh0IiwiZ2VuZXJhbFByb2dyZXNzTWF0Y2giLCJjb3B5RmlsZXMiLCJmaWxlcyIsInR5cGVOYW1lIiwiY29uZmlnIiwib3V0cHV0RnVsbFBhdGgiLCJzb3VyY2VGdWxsUGF0aCIsIml0ZW1zIiwibWFwIiwiZmlsZU5hbWUiLCJmcm9tIiwidG8iLCJQcm9taXNlIiwiYWxsIiwicmVqZWN0IiwicmVjdXJzaXZlIiwiY29weUVycm9yIiwibGVuZ3RoIiwiZXJyb3IiLCJtZXNzYWdlIiwiY29weUNvbmZpZ3VyZWRGaWxlcyIsImNvcHlGaWxlc0NvbmZpZyIsInNvdXJjZVBhdGgiLCJ0b3RhbENvcGllZCIsImJhc2VEaXIiLCJhbGxDb3B5UHJvbWlzZXMiLCJwYXR0ZXJuIiwicmVzb2x2ZWRQYXR0ZXJuIiwibWF0Y2hpbmdGaWxlcyIsImFic29sdXRlIiwibm9kaXIiLCJjb3B5UHJvbWlzZXMiLCJzb3VyY2VGaWxlIiwicmVsYXRpdmVQYXRoIiwiZGVzdFBhdGgiLCJkZXN0RGlyIiwicHVzaCIsImNvcHlGaWxlU3luYyIsInNvdXJjZSIsInRhcmdldCIsInRhcmdldEZpbGUiLCJpc0RpcmVjdG9yeSIsImNvcHlGb2xkZXJSZWN1cnNpdmVTeW5jIiwidGFyZ2V0Rm9sZGVyIiwiZm9yRWFjaCIsImZpbGUiLCJjdXJTb3VyY2UiLCJnZXRQYWNrYWdlSnNvbiIsInBhY2thZ2VQYXRoIiwiZm9ybWF0UGF0aCIsInBhY2thZ2VEYXRhIiwidG9TdHJpbmciLCJKU09OIiwicGFyc2UiLCJnZXRGaWxlc0J5RXh0IiwiZXh0IiwicmVtb3ZlQ29uZmxpY3RNb2R1bGVzIiwibW9kdWxlTGlzdCIsInVwZGF0ZWRMaXN0IiwiT2JqZWN0Iiwia2V5cyIsIm1vZHVsZU5hbWUiLCJyZWdleCIsIlJlZ0V4cCIsInRlc3QiLCJyZW1vdmVGaWxlcyIsImlzUmVsYXRpdmUiLCJmaWxlUGF0aCIsInJlbW92ZU1vZHVsZXMiLCJzZXRQYWNrYWdlSnNvbiIsImpzb24iLCJzdHJpbmdpZnkiLCJsaW5rZWRNb2R1bGVzIiwic3RhcnRQYXRoIiwid29ya2luZ1BhdGgiLCJtb2R1bGVQYXRoIiwicHJlZml4Iiwic3BsaXQiLCJwb3AiLCJmb3VuZFBhdGhzIiwicmVkdWNlIiwibGlzdCIsImZvdW5kUGF0aCIsInN0YXRzIiwiZGVlcExpc3QiLCJpc1N5bWJvbGljTGluayIsIm1vZHVsZU5hbWVzIiwiZmlsdGVyIiwiaXRlbSIsInBhdGgiLCJjaGVja0xpbmtlZE1vZHVsZXMiLCJsaW5rZWQiLCJtc2dNb2R1bGUiLCJsaW5rZWRNc2ciLCJtc2ciLCJsaW5rZWRNb2R1bGUiLCJkaW1Cb3JkZXIiLCJwYWRkaW5nIiwidXBkYXRlVGVtcGxhdGVOYW1lIiwicmVwbGFjZSIsInJlcGxhY2VDYXBzIiwiZGF0YSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBRUQsT0FBT0EsV0FBVyxRQUFRO0FBQzFCLE9BQU9DLFdBQVcsUUFBUTtBQUMxQixTQUFRQyxRQUFRLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxTQUFTLEVBQUVDLFdBQVcsRUFBRUMsWUFBWSxFQUFFQyxhQUFhLFFBQU8sS0FBSztBQUN4RyxTQUFRQyxRQUFRQyxRQUFRLFFBQU8sT0FBTztBQUN0QyxPQUFPQyxhQUFhLG9CQUFvQjtBQUN4QyxPQUFPQyxTQUFTLE1BQU07QUFDdEIsU0FBUUMs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
301
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9hcHAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuaW1wb3J0IGJveGVuIGZyb20gJ2JveGVuJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQge2NvcHlGaWxlLCBleGlzdHNTeW5jLCBsc3RhdFN5bmMsIG1rZGlyU3luYywgcmVhZGRpclN5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5LmpzJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCB7YmFzZW5hbWUgYXMgcGF0aEJhc2VuYW1lLCBqb2luIGFzIHBhdGhKb2luLCByZWxhdGl2ZSBhcyBwYXRoUmVsYXRpdmUsIHJlc29sdmUgYXMgcGF0aFJlc29sdmV9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtyaW1yYWZTeW5jfSBmcm9tICdyaW1yYWYnO1xuXG5cbmltcG9ydCB7bG9nfSBmcm9tICcuL2xvZy5qcyc7XG5cbmltcG9ydCB0eXBlIHtMZXhDb25maWdUeXBlfSBmcm9tICcuLi9MZXhDb25maWcuanMnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0RmlsZW5hbWVzUHJvcHMge1xuICByZWFkb25seSBjYWxsYmFjaz86IChzdGF0dXM6IG51bWJlcik9PiB2b2lkO1xuICByZWFkb25seSBjbGlOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHR5cGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVzZVR5cGVzY3JpcHQ/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRmlsZW5hbWVzUmVzdWx0IHtcbiAgbmFtZUNhcHM6IHN0cmluZztcbiAgdGVtcGxhdGVFeHQ6IHN0cmluZztcbiAgdGVtcGxhdGVQYXRoOiBzdHJpbmc7XG4gIHRlbXBsYXRlUmVhY3Q6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGdldEZpbGVuYW1lcyA9IChwcm9wczogR2V0RmlsZW5hbWVzUHJvcHMpOiBGaWxlbmFtZXNSZXN1bHQgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCB7Y2FsbGJhY2ssIGNsaU5hbWUsIG5hbWUsIHF1aWV0LCB0eXBlLCB1c2VUeXBlc2NyaXB0fSA9IHByb3BzO1xuXG4gIGxldCBuYW1lQ2Fwczogc3RyaW5nO1xuICBjb25zdCBpdGVtVHlwZXM6IHN0cmluZ1tdID0gWydzdG9yZXMnLCAndmlld3MnXTtcblxuICBpZighbmFtZSkge1xuICAgIGlmKGl0ZW1UeXBlcy5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke3R5cGV9IG5hbWUgaXMgcmVxdWlyZWQuIFBsZWFzZSB1c2UgJ2xleCAtaCcgZm9yIG9wdGlvbnMuYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgY2FsbGJhY2s/LigxKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5hbWVDYXBzID0gYCR7bmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke25hbWUuc3Vic3RyKDEpfWA7XG4gIH1cblxuICBsb2coYCR7Y2xpTmFtZX0gYWRkaW5nICR7bmFtZX0gJHt0eXBlfS4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGxldCB0ZW1wbGF0ZVBhdGg6IHN0cmluZztcbiAgbGV0IHRlbXBsYXRlRXh0OiBzdHJpbmc7XG4gIGxldCB0ZW1wbGF0ZVJlYWN0OiBzdHJpbmc7XG5cbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIHRlbXBsYXRlUGF0aCA9ICcuLi8uLi90ZW1wbGF0ZXMvdHlwZXNjcmlwdCc7XG4gICAgdGVtcGxhdGVFeHQgPSAnLnRzJztcbiAgICB0ZW1wbGF0ZVJlYWN0ID0gJy50c3gnO1xuICB9IGVsc2Uge1xuICAgIHRlbXBsYXRlUGF0aCA9ICcuLi8uLi90ZW1wbGF0ZXMvZmxvdyc7XG4gICAgdGVtcGxhdGVFeHQgPSAnLmpzJztcbiAgICB0ZW1wbGF0ZVJlYWN0ID0gJy5qcyc7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWVDYXBzLFxuICAgIHRlbXBsYXRlRXh0LFxuICAgIHRlbXBsYXRlUGF0aCxcbiAgICB0ZW1wbGF0ZVJlYWN0XG4gIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwaW5uZXIge1xuICBmYWlsOiAodGV4dD86IHN0cmluZyk9PiB2b2lkO1xuICBzdGFydDogKHRleHQ/OiBzdHJpbmcpPT4gdm9pZDtcbiAgc3VjY2VlZDogKHRleHQ/OiBzdHJpbmcpPT4gdm9pZDtcbiAgdGV4dD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNwaW5uZXIgPSAocXVpZXQgPSBmYWxzZSk6IFNwaW5uZXIgPT4ge1xuICBpZihxdWlldCkge1xuICAgIHJldHVybiB7XG4gICAgICBmYWlsOiAoKSA9PiB7fSxcbiAgICAgIHN0YXJ0OiAoKSA9PiB7fSxcbiAgICAgIHN1Y2NlZWQ6ICgpID0+IHt9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBvcmEoe2NvbG9yOiAneWVsbG93J30pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVByb2dyZXNzQmFyID0gKHBlcmNlbnRhZ2U6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHdpZHRoID0gMjA7XG4gIGNvbnN0IGZpbGxlZCA9IE1hdGgucm91bmQoKHBlcmNlbnRhZ2UgLyAxMDApICogd2lkdGgpO1xuICBjb25zdCBlbXB0eSA9IHdpZHRoIC0gZmlsbGVkO1xuXG4gIGNvbnN0IGZpbGxlZEJhciA9IGNoYWxrLmN5YW4oJ+KWiCcpLnJlcGVhdChmaWxsZWQpO1xuICBjb25zdCBlbXB0eUJhciA9IGNoYWxrLmdyYXkoJ+KWkScpLnJlcGVhdChlbXB0eSk7XG5cbiAgcmV0dXJuIGZpbGxlZEJhciArIGVtcHR5QmFyO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZVdlYnBhY2tQcm9ncmVzcyA9IChcbiAgb3V0cHV0OiBzdHJpbmcsXG4gIHNwaW5uZXI6IFNwaW5uZXIsXG4gIHF1aWV0OiBib29sZWFuLFxuICBlbW9qaTogc3RyaW5nLFxuICBhY3Rpb246IHN0cmluZ1xuKTogdm9pZCA9PiB7XG4gIGlmKHF1aWV0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcHJvZ3Jlc3NNYXRjaCA9IG91dHB1dC5tYXRjaCgvXFxbd2VicGFja1xcLlByb2dyZXNzXFxdIChcXGQrKSUvKTtcbiAgaWYocHJvZ3Jlc3NNYXRjaCkge1xuICAgIGNvbnN0IHByb2dyZXNzID0gcGFyc2VJbnQocHJvZ3Jlc3NNYXRjaFsxXSk7XG4gICAgY29uc3QgcHJvZ3Jlc3NCYXIgPSBjcmVhdGVQcm9ncmVzc0Jhcihwcm9ncmVzcyk7XG4gICAgc3Bpbm5lci50ZXh0ID0gYCR7ZW1vaml9ICR7YWN0aW9ufTogJHtwcm9ncmVzc0Jhcn0gJHtwcm9ncmVzc30lYDtcbiAgfSBlbHNlIGlmKG91dHB1dC5pbmNsdWRlcygnW3dlYnBhY2suUHJvZ3Jlc3NdJykpIHtcbiAgICBjb25zdCBnZW5lcmFsUHJvZ3Jlc3NNYXRjaCA9IG91dHB1dC5tYXRjaCgvKFxcZCspJS8pO1xuICAgIGlmKGdlbmVyYWxQcm9ncmVzc01hdGNoKSB7XG4gICAgICBjb25zdCBwcm9ncmVzcyA9IHBhcnNlSW50KGdlbmVyYWxQcm9ncmVzc01hdGNoWzFdKTtcbiAgICAgIGNvbnN0IHByb2dyZXNzQmFyID0gY3JlYXRlUHJvZ3Jlc3NCYXIocHJvZ3Jlc3MpO1xuICAgICAgc3Bpbm5lci50ZXh0ID0gYCR7ZW1vaml9ICR7YWN0aW9ufTogJHtwcm9ncmVzc0Jhcn0gJHtwcm9ncmVzc30lYDtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb3B5RmlsZXMgPSBhc3luYyAoZmlsZXM6IHN0cmluZ1tdLCB0eXBlTmFtZTogc3RyaW5nLCBzcGlubmVyLCBjb25maWc6IExleENvbmZpZ1R5cGUpID0+IHtcbiAgY29uc3Qge291dHB1dEZ1bGxQYXRoLCBzb3VyY2VGdWxsUGF0aH0gPSBjb25maWc7XG4gIGNvbnN0IGl0ZW1zID0gZmlsZXMubWFwKChmaWxlTmFtZTogc3RyaW5nKSA9PiAoe1xuICAgIGZyb206IGZpbGVOYW1lLFxuICAgIHRvOiBwYXRoUmVzb2x2ZShvdXRwdXRGdWxsUGF0aCwgcGF0aFJlbGF0aXZlKHNvdXJjZUZ1bGxQYXRoLCBmaWxlTmFtZSkpXG4gIH0pKTtcblxuICB0cnkge1xuICAgIHNwaW5uZXIuc3RhcnQoYENvcHlpbmcgJHt0eXBlTmFtZX0gZmlsZXMuLi5gKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChpdGVtcy5tYXAoKHtmcm9tLCB0b30pID0+IG5ldyBQcm9taXNlKFxuICAgICAgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBta2RpclN5bmMocGF0aFJlc29sdmUodG8sICcuLicpLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gICAgICAgIHJldHVybiBjb3B5RmlsZShmcm9tLCB0bywgKGNvcHlFcnJvcikgPT4ge1xuICAgICAgICAgIGlmKGNvcHlFcnJvcikge1xuICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApKSk7XG4gICAgc3Bpbm5lci5zdWNjZWVkKGBTdWNjZXNzZnVsbHkgY29waWVkICR7ZmlsZXMubGVuZ3RofSAke3R5cGVOYW1lfSBmaWxlcyFgKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbChgQ29weWluZyBvZiAke3R5cGVOYW1lfSBmaWxlcyBmYWlsZWQuYCk7XG4gICAgbG9nKGBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicpO1xuICAgIGxvZyhlcnJvciwgJ2Vycm9yJyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb3B5Q29uZmlndXJlZEZpbGVzID0gYXN5bmMgKHNwaW5uZXIsIGNvbmZpZzogTGV4Q29uZmlnVHlwZSwgcXVpZXQ6IGJvb2xlYW4pID0+IHtcbiAgY29uc3Qge2NvcHlGaWxlczogY29weUZpbGVzQ29uZmlnLCBvdXRwdXRGdWxsUGF0aCwgc291cmNlRnVsbFBhdGgsIHNvdXJjZVBhdGh9ID0gY29uZmlnO1xuICBpZighY29weUZpbGVzQ29uZmlnIHx8IGNvcHlGaWxlc0NvbmZpZy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIHNwaW5uZXIuc3RhcnQoJ0NvcHlpbmcgY29uZmlndXJlZCBmaWxlcy4uLicpO1xuICAgIGxldCB0b3RhbENvcGllZCA9IDA7XG5cbiAgICBjb25zdCBiYXNlRGlyID0gc291cmNlRnVsbFBhdGggfHwgKHNvdXJjZVBhdGggPyBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBzb3VyY2VQYXRoKSA6IHByb2Nlc3MuY3dkKCkpO1xuICAgIGNvbnN0IGFsbENvcHlQcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG5cbiAgICBmb3IoY29uc3QgcGF0dGVybiBvZiBjb3B5RmlsZXNDb25maWcpIHtcbiAgICAgIGNvbnN0IHJlc29sdmVkUGF0dGVybiA9IHBhdGhSZXNvbHZlKGJhc2VEaXIsIHBhdHRlcm4pO1xuICAgICAgY29uc3QgbWF0Y2hpbmdGaWxlcyA9IGdsb2JTeW5jKHJlc29sdmVkUGF0dGVybiwge1xuICAgICAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICAgICAgbm9kaXI6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICBpZihtYXRjaGluZ0ZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZighcXVpZXQpIHtcbiAgICAgICAgICBsb2coYFdhcm5pbmc6IE5vIGZpbGVzIGZvdW5kIG1hdGNoaW5nIHBhdHRlcm46ICR7cGF0dGVybn1gLCAnd2FybicsIHF1aWV0KTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29weVByb21pc2VzID0gbWF0Y2hpbmdGaWxlcy5tYXAoKHNvdXJjZUZpbGUpID0+IHtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aFJlbGF0aXZlKGJhc2VEaXIsIHNvdXJjZUZpbGUpO1xuICAgICAgICBjb25zdCBkZXN0UGF0aCA9IHBhdGhSZXNvbHZlKG91dHB1dEZ1bGxQYXRoLCByZWxhdGl2ZVBhdGgpO1xuICAgICAgICBjb25zdCBkZXN0RGlyID0gcGF0aFJlc29sdmUoZGVzdFBhdGgsICcuLicpO1xuICAgICAgICBta2RpclN5bmMoZGVzdERpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgY29weUZpbGUoc291cmNlRmlsZSwgZGVzdFBhdGgsIChjb3B5RXJyb3IpID0+IHtcbiAgICAgICAgICAgIGlmKGNvcHlFcnJvcikge1xuICAgICAgICAgICAgICByZWplY3QoY29weUVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGFsbENvcHlQcm9taXNlcy5wdXNoKC4uLmNvcHlQcm9taXNlcyk7XG4gICAgICB0b3RhbENvcGllZCArPSBtYXRjaGluZ0ZpbGVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChhbGxDb3B5UHJvbWlzZXMpO1xuXG4gICAgaWYodG90YWxDb3BpZWQgPiAwKSB7XG4gICAgICBzcGlubmVyLnN1Y2NlZWQoYFN1Y2Nlc3NmdWxseSBjb3BpZWQgJHt0b3RhbENvcGllZH0gY29uZmlndXJlZCBmaWxlcyFgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdObyBjb25maWd1cmVkIGZpbGVzIHRvIGNvcHknKTtcbiAgICB9XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBjb3B5IGNvbmZpZ3VyZWQgZmlsZXMnKTtcbiAgICBsb2coYEVycm9yIGNvcHlpbmcgY29uZmlndXJlZCBmaWxlczogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNvcHlGaWxlU3luYyA9IChzb3VyY2U6IHN0cmluZywgdGFyZ2V0OiBzdHJpbmcpID0+IHtcbiAgbGV0IHRhcmdldEZpbGU6IHN0cmluZyA9IHRhcmdldDtcblxuICBpZihleGlzdHNTeW5jKHRhcmdldCkpIHtcbiAgICBpZihsc3RhdFN5bmModGFyZ2V0KS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0YXJnZXRGaWxlID0gcGF0aEpvaW4odGFyZ2V0LCBwYXRoQmFzZW5hbWUoc291cmNlKSk7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVGaWxlU3luYyh0YXJnZXRGaWxlLCByZWFkRmlsZVN5bmMoc291cmNlKSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29weUZvbGRlclJlY3Vyc2l2ZVN5bmMgPSAoc291cmNlOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nKTogdm9pZCA9PiB7XG4gIGxldCBmaWxlczogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdCB0YXJnZXRGb2xkZXI6IHN0cmluZyA9IHBhdGhKb2luKHRhcmdldCwgcGF0aEJhc2VuYW1lKHNvdXJjZSkpO1xuXG4gIGlmKCFleGlzdHNTeW5jKHRhcmdldEZvbGRlcikpIHtcbiAgICBta2RpclN5bmModGFyZ2V0Rm9sZGVyKTtcbiAgfVxuXG4gIGlmKGxzdGF0U3luYyhzb3VyY2UpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICBmaWxlcyA9IHJlYWRkaXJTeW5jKHNvdXJjZSk7XG4gICAgZmlsZXMuZm9yRWFjaCgoZmlsZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBjdXJTb3VyY2U6IHN0cmluZyA9IHBhdGhKb2luKHNvdXJjZSwgZmlsZSk7XG5cbiAgICAgIGlmKGxzdGF0U3luYyhjdXJTb3VyY2UpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgY29weUZvbGRlclJlY3Vyc2l2ZVN5bmMoY3VyU291cmNlLCB0YXJnZXRGb2xkZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29weUZpbGVTeW5jKGN1clNvdXJjZSwgdGFyZ2V0Rm9sZGVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFBhY2thZ2VKc29uID0gKHBhY2thZ2VQYXRoPzogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGZvcm1hdFBhdGg6IHN0cmluZyA9IHBhY2thZ2VQYXRoIHx8IGAke3Byb2Nlc3MuY3dkKCl9L3BhY2thZ2UuanNvbmA7XG4gIGNvbnN0IHBhY2thZ2VEYXRhOiBzdHJpbmcgPSByZWFkRmlsZVN5bmMoZm9ybWF0UGF0aCkudG9TdHJpbmcoKTtcblxuICByZXR1cm4gSlNPTi5wYXJzZShwYWNrYWdlRGF0YSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsZXNCeUV4dCA9IChleHQ6IHN0cmluZywgY29uZmlnOiBMZXhDb25maWdUeXBlKTogc3RyaW5nW10gPT4ge1xuICBjb25zdCB7c291cmNlRnVsbFBhdGh9ID0gY29uZmlnO1xuICByZXR1cm4gZ2xvYlN5bmMoYCoqLyoqJHtleHR9YCwge1xuICAgIGFic29sdXRlOiB0cnVlLFxuICAgIGN3ZDogc291cmNlRnVsbFBhdGgsXG4gICAgbm9kaXI6IHRydWVcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlQ29uZmxpY3RNb2R1bGVzID0gKG1vZHVsZUxpc3Q6IG9iamVjdCkgPT4ge1xuICBjb25zdCB1cGRhdGVkTGlzdDogb2JqZWN0ID0gey4uLm1vZHVsZUxpc3R9O1xuXG4gIE9iamVjdC5rZXlzKHVwZGF0ZWRMaXN0KS5mb3JFYWNoKChtb2R1bGVOYW1lOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByZWdleDogUmVnRXhwID0gbmV3IFJlZ0V4cCgnXig/IUB0eXBlcy8pLio/KGplc3R8d2VicGFjaykuKiQnLCAnZ2knKTtcbiAgICBpZihyZWdleC50ZXN0KG1vZHVsZU5hbWUpKSB7XG4gICAgICBkZWxldGUgdXBkYXRlZExpc3RbbW9kdWxlTmFtZV07XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdXBkYXRlZExpc3Q7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlRmlsZXMgPSAoZmlsZU5hbWU6IHN0cmluZywgaXNSZWxhdGl2ZTogYm9vbGVhbiA9IGZhbHNlKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gIGNvbnN0IGZpbGVQYXRoOiBzdHJpbmcgPSBpc1JlbGF0aXZlID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgZmlsZU5hbWUpIDogZmlsZU5hbWU7XG5cbiAgdHJ5IHtcbiAgICByaW1yYWZTeW5jKGZpbGVQYXRoKTtcbiAgICByZXR1cm4gcmVzb2x2ZShudWxsKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICB9XG59KTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZU1vZHVsZXMgPSAoKSA9PiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgcmVtb3ZlRmlsZXMoJy4vbm9kZV9tb2R1bGVzJywgdHJ1ZSk7XG4gICAgYXdhaXQgcmVtb3ZlRmlsZXMoJy4veWFybi5sb2NrJywgdHJ1ZSk7XG4gICAgYXdhaXQgcmVtb3ZlRmlsZXMoJy4vcGFja2FnZS1sb2NrLmpzb24nLCB0cnVlKTtcblxuICAgIHJlc29sdmUobnVsbCk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZWplY3QoZXJyb3IpO1xuICB9XG59KTtcblxuZXhwb3J0IGNvbnN0IHNldFBhY2thZ2VKc29uID0gKGpzb24sIHBhY2thZ2VQYXRoPzogc3RyaW5nKSA9PiB7XG4gIGlmKCFqc29uKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0UGF0aDogc3RyaW5nID0gcGFja2FnZVBhdGggfHwgYCR7cHJvY2Vzcy5jd2QoKX0vcGFja2FnZS5qc29uYDtcblxuICB3cml0ZUZpbGVTeW5jKGZvcm1hdFBhdGgsIEpTT04uc3RyaW5naWZ5KGpzb24sIG51bGwsIDIpKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlua2VkTW9kdWxlVHlwZSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgbGlua2VkTW9kdWxlcyA9IChzdGFydFBhdGg/OiBzdHJpbmcpOiBMaW5rZWRNb2R1bGVUeXBlW10gPT4ge1xuICBjb25zdCB3b3JraW5nUGF0aDogc3RyaW5nID0gc3RhcnRQYXRoIHx8IHByb2Nlc3MuY3dkKCk7XG4gIGxldCBtb2R1bGVQYXRoOiBzdHJpbmc7XG4gIGxldCBwcmVmaXg6IHN0cmluZztcblxuICBpZih3b3JraW5nUGF0aC5pbmNsdWRlcygnQCcpKSB7XG4gICAgcHJlZml4ID0gYEAke3dvcmtpbmdQYXRoLnNwbGl0KCdAJykucG9wKCl9YDtcbiAgICBtb2R1bGVQYXRoID0gd29ya2luZ1BhdGg7XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlUGF0aCA9IHBhdGhKb2luKHdvcmtpbmdQYXRoLCAnbm9kZV9tb2R1bGVzJyk7XG4gIH1cblxuICBjb25zdCBmb3VuZFBhdGhzOiBzdHJpbmdbXSA9IGdsb2JTeW5jKCcqJywge1xuICAgIGFic29sdXRlOiB0cnVlLFxuICAgIGN3ZDogbW9kdWxlUGF0aCxcbiAgICBub2RpcjogZmFsc2VcbiAgfSk7XG5cbiAgcmV0dXJuIGZvdW5kUGF0aHMucmVkdWNlKChsaXN0OiBMaW5rZWRNb2R1bGVUeXBlW10sIGZvdW5kUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXRzID0gbHN0YXRTeW5jKGZvdW5kUGF0aCk7XG5cbiAgICAgIGlmKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgY29uc3QgZGVlcExpc3Q6IExpbmtlZE1vZHVsZVR5cGVbXSA9IGxpbmtlZE1vZHVsZXMoZm91bmRQYXRoKTtcbiAgICAgICAgbGlzdC5wdXNoKC4uLmRlZXBMaXN0KTtcbiAgICAgIH0gZWxzZSBpZihzdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZU5hbWVzOiBzdHJpbmdbXSA9IChbcHJlZml4LCBwYXRoQmFzZW5hbWUoZm91bmRQYXRoKV0pLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiAhaXNFbXB0eShpdGVtKSk7XG4gICAgICAgIGxpc3QucHVzaCh7bmFtZTogYCR7bW9kdWxlTmFtZXMuam9pbignLycpfWAsIHBhdGg6IGZvdW5kUGF0aH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9IGNhdGNoe1xuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuICB9LCBbXSk7XG59O1xuXG5leHBvcnQgY29uc3QgY2hlY2tMaW5rZWRNb2R1bGVzID0gKCkgPT4ge1xuICBjb25zdCBsaW5rZWQgPSBsaW5rZWRNb2R1bGVzKCk7XG5cbiAgaWYobGlua2VkLmxlbmd0aCkge1xuICAgIGNvbnN0IG1zZ01vZHVsZTogc3RyaW5nID0gbGlua2VkLmxlbmd0aCA+IDEgPyAnTW9kdWxlcycgOiAnTW9kdWxlJztcbiAgICBjb25zdCBsaW5rZWRNc2c6IHN0cmluZyA9IGxpbmtlZC5yZWR1Y2UoXG4gICAgICAobXNnOiBzdHJpbmcsIGxpbmtlZE1vZHVsZTogTGlua2VkTW9kdWxlVHlwZSkgPT5cbiAgICAgICAgYCR7bXNnfVxcbiAqICR7bGlua2VkTW9kdWxlLm5hbWV9YCxcbiAgICAgIGBMaW5rZWQgJHttc2dNb2R1bGV9OmBcbiAgICApO1xuXG4gICAgbG9nKGJveGVuKGxpbmtlZE1zZywge2RpbUJvcmRlcjogdHJ1ZSwgcGFkZGluZzogMX0pLCAnd2FybicpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlVGVtcGxhdGVOYW1lID0gKGZpbGVQYXRoOiBzdHJpbmcsIHJlcGxhY2U6IHN0cmluZywgcmVwbGFjZUNhcHM6IHN0cmluZykgPT4ge1xuICBsZXQgZGF0YTogc3RyaW5nID0gcmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmOCcpO1xuICBkYXRhID0gZGF0YS5yZXBsYWNlKC9zYW1wbGUvZywgcmVwbGFjZSk7XG4gIGRhdGEgPSBkYXRhLnJlcGxhY2UoL1NhbXBsZS9nLCByZXBsYWNlQ2Fwcyk7XG4gIHdyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGRhdGEsICd1dGY4Jyk7XG59OyJdLCJuYW1lcyI6WyJib3hlbiIsImNoYWxrIiwiY29weUZpbGUiLCJleGlzdHNTeW5jIiwibHN0YXRTeW5jIiwibWtkaXJTeW5jIiwicmVhZGRpclN5bmMiLCJyZWFkRmlsZVN5bmMiLCJ3cml0ZUZpbGVTeW5jIiwic3luYyIsImdsb2JTeW5jIiwiaXNFbXB0eSIsIm9yYSIsImJhc2VuYW1lIiwicGF0aEJhc2VuYW1lIiwiam9pbiIsInBhdGhKb2luIiwicmVsYXRpdmUiLCJwYXRoUmVsYXRpdmUiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJyaW1yYWZTeW5jIiwibG9nIiwiZ2V0RmlsZW5hbWVzIiwicHJvcHMiLCJjYWxsYmFjayIsImNsaU5hbWUiLCJuYW1lIiwicXVpZXQiLCJ0eXBlIiwidXNlVHlwZXNjcmlwdCIsIm5hbWVDYXBzIiwiaXRlbVR5cGVzIiwiaW5jbHVkZXMiLCJ1bmRlZmluZWQiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInN1YnN0ciIsInRlbXBsYXRlUGF0aCIsInRlbXBsYXRlRXh0IiwidGVtcGxhdGVSZWFjdCIsImNyZWF0ZVNwaW5uZXIiLCJmYWlsIiwic3RhcnQiLCJzdWNjZWVkIiwiY29sb3IiLCJjcmVhdGVQcm9ncmVzc0JhciIsInBlcmNlbnRhZ2UiLCJ3aWR0aCIsImZpbGxlZCIsIk1hdGgiLCJyb3VuZCIsImVtcHR5IiwiZmlsbGVkQmFyIiwiY3lhbiIsInJlcGVhdCIsImVtcHR5QmFyIiwiZ3JheSIsImhhbmRsZVdlYnBhY2tQcm9ncmVzcyIsIm91dHB1dCIsInNwaW5uZXIiLCJlbW9qaSIsImFjdGlvbiIsInByb2dyZXNzTWF0Y2giLCJtYXRjaCIsInByb2dyZXNzIiwicGFyc2VJbnQiLCJwcm9ncmVzc0JhciIsInRleHQiLCJnZW5lcmFsUHJvZ3Jlc3NNYXRjaCIsImNvcHlGaWxlcyIsImZpbGVzIiwidHlwZU5hbWUiLCJjb25maWciLCJvdXRwdXRGdWxsUGF0aCIsInNvdXJjZUZ1bGxQYXRoIiwiaXRlbXMiLCJtYXAiLCJmaWxlTmFtZSIsImZyb20iLCJ0byIsIlByb21pc2UiLCJhbGwiLCJyZWplY3QiLCJyZWN1cnNpdmUiLCJjb3B5RXJyb3IiLCJsZW5ndGgiLCJlcnJvciIsIm1lc3NhZ2UiLCJjb3B5Q29uZmlndXJlZEZpbGVzIiwiY29weUZpbGVzQ29uZmlnIiwic291cmNlUGF0aCIsInRvdGFsQ29waWVkIiwiYmFzZURpciIsInByb2Nlc3MiLCJjd2QiLCJhbGxDb3B5UHJvbWlzZXMiLCJwYXR0ZXJuIiwicmVzb2x2ZWRQYXR0ZXJuIiwibWF0Y2hpbmdGaWxlcyIsImFic29sdXRlIiwibm9kaXIiLCJjb3B5UHJvbWlzZXMiLCJzb3VyY2VGaWxlIiwicmVsYXRpdmVQYXRoIiwiZGVzdFBhdGgiLCJkZXN0RGlyIiwicHVzaCIsImNvcHlGaWxlU3luYyIsInNvdXJjZSIsInRhcmdldCIsInRhcmdldEZpbGUiLCJpc0RpcmVjdG9yeSIsImNvcHlGb2xkZXJSZWN1cnNpdmVTeW5jIiwidGFyZ2V0Rm9sZGVyIiwiZm9yRWFjaCIsImZpbGUiLCJjdXJTb3VyY2UiLCJnZXRQYWNrYWdlSnNvbiIsInBhY2thZ2VQYXRoIiwiZm9ybWF0UGF0aCIsInBhY2thZ2VEYXRhIiwidG9TdHJpbmciLCJKU09OIiwicGFyc2UiLCJnZXRGaWxlc0J5RXh0IiwiZXh0IiwicmVtb3ZlQ29uZmxpY3RNb2R1bGVzIiwibW9kdWxlTGlzdCIsInVwZGF0ZWRMaXN0IiwiT2JqZWN0Iiwia2V5cyIsIm1vZHVsZU5hbWUiLCJyZWdleCIsIlJlZ0V4cCIsInRlc3QiLCJyZW1vdmVGaWxlcyIsImlzUmVsYXRpdmUiLCJmaWxlUGF0aCIsInJlbW92ZU1vZHVsZXMiLCJzZXRQYWNrYWdlSnNvbiIsImpzb24iLCJzdHJpbmdpZnkiLCJsaW5rZWRNb2R1bGVzIiwic3RhcnRQYXRoIiwid29ya2luZ1BhdGgiLCJtb2R1bGVQYXRoIiwicHJlZml4Iiwic3BsaXQiLCJwb3AiLCJmb3VuZFBhdGhzIiwicmVkdWNlIiwibGlzdCIsImZvdW5kUGF0aCIsInN0YXRzIiwiZGVlcExpc3QiLCJpc1N5bWJvbGljTGluayIsIm1vZHVsZU5hbWVzIiwiZmlsdGVyIiwiaXRlbSIsInBhdGgiLCJjaGVja0xpbmtlZE1vZHVsZXMiLCJsaW5rZWQiLCJtc2dNb2R1bGUiLCJsaW5rZWRNc2ciLCJtc2ciLCJsaW5rZWRNb2R1bGUiLCJkaW1Cb3JkZXIiLCJwYWRkaW5nIiwidXBkYXRlVGVtcGxhdGVOYW1lIiwicmVwbGFjZSIsInJlcGxhY2VDYXBzIiwiZGF0YSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBRUQsT0FBT0EsV0FBVyxRQUFRO0FBQzFCLE9BQU9DLFdBQVcsUUFBUTtBQUMxQixTQUFRQyxRQUFRLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxTQUFTLEVBQUVDLFdBQVcsRUFBRUMsWUFBWSxFQUFFQyxhQUFhLFFBQU8sS0FBSztBQUN4RyxTQUFRQyxRQUFRQyxRQUFRLFFBQU8sT0FBTztBQUN0QyxPQUFPQyxhQUFhLG9CQUFvQjtBQUN4QyxPQUFPQyxTQUFTLE1BQU07QUFDdEIsU0FBUUMsWUFBWUMsWUFBWSxFQUFF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
@@ -1,9 +1,6 @@
1
1
  export declare const getDirName: () => string;
2
- export declare const getFilePath: (relativePath: string) => string;
3
2
  export declare const getLexPackageJsonPath: () => string;
4
3
  export declare const relativeFilePath: (filename: string, dirPath?: string, backUp?: number) => string;
5
- export declare const relativeNodePath: (filename: string, dirPath?: string, backUp?: number) => string;
6
- export declare const getNodePath: (moduleName: string) => string;
7
4
  export declare const resolveBinaryPath: (binaryName: string, packageName?: string) => string;
8
5
  export declare const findTailwindCssPath: () => string;
9
6
  export declare const resolveWebpackPaths: (currentDirname: string) => {
package/lib/utils/file.js CHANGED
@@ -13,16 +13,6 @@ export const getDirName = ()=>{
13
13
  return process.cwd();
14
14
  }
15
15
  };
16
- export const getFilePath = (relativePath)=>{
17
- try {
18
- return eval('require("url").fileURLToPath(new URL(relativePath, import.meta.url))');
19
- } catch {
20
- if (relativePath === '../../../package.json') {
21
- return pathResolve(process.cwd(), 'package.json');
22
- }
23
- return pathResolve(process.cwd(), relativePath);
24
- }
25
- };
26
16
  export const getLexPackageJsonPath = ()=>{
27
17
  const LEX_PACKAGE_NAME = '@nlabs/lex';
28
18
  const lexInNodeModules = pathResolve(process.cwd(), 'node_modules/@nlabs/lex/package.json');
@@ -82,40 +72,6 @@ export const relativeFilePath = (filename, dirPath = './', backUp = 0)=>{
82
72
  }
83
73
  return findFileUp.sync(filename, dirPath, nestDepth);
84
74
  };
85
- export const relativeNodePath = (filename, dirPath = './', backUp = 0)=>{
86
- const nestDepth = 10;
87
- const modulePath = `node_modules/${filename}`;
88
- if (dirPath !== './') {
89
- const lexModulePath = pathResolve(dirPath, modulePath);
90
- if (existsSync(lexModulePath)) {
91
- return lexModulePath;
92
- }
93
- }
94
- const projectPath = pathResolve(process.cwd(), modulePath);
95
- if (existsSync(projectPath)) {
96
- return projectPath;
97
- }
98
- if (backUp) {
99
- const filePath = findFileUp.sync(modulePath, dirPath, nestDepth);
100
- const previousPath = Array(nestDepth).fill(null).map(()=>'../').join('');
101
- return pathResolve(filePath, previousPath);
102
- }
103
- return findFileUp.sync(modulePath, dirPath, nestDepth) || `/node_modules/${filename}`;
104
- };
105
- export const getNodePath = (moduleName)=>{
106
- const dirName = getDirName();
107
- const modulePath = `node_modules/${moduleName}`;
108
- const projectPath = pathResolve(process.cwd(), modulePath);
109
- if (existsSync(projectPath)) {
110
- return projectPath;
111
- }
112
- const repoPath = findFileUp.sync(modulePath, dirName);
113
- if (repoPath && existsSync(repoPath)) {
114
- return repoPath;
115
- }
116
- const localPath = findFileUp.sync(modulePath, './', 10) || `./${modulePath}`;
117
- return localPath;
118
- };
119
75
  export const resolveBinaryPath = (binaryName, packageName)=>{
120
76
  const lexDir = LexConfig.getLexDir();
121
77
  const lexBinPath = pathResolve(lexDir, `node_modules/.bin/${binaryName}`);
@@ -250,4 +206,4 @@ export const resolveWebpackPaths = (currentDirname)=>{
250
206
  };
251
207
  };
252
208
 
253
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9maWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQgZmluZEZpbGVVcCBmcm9tICdmaW5kLWZpbGUtdXAnO1xuaW1wb3J0IHtleGlzdHNTeW5jLCByZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7c3luYyBhcyBnbG9iU3luY30gZnJvbSAnZ2xvYic7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmUsIGRpcm5hbWV9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vTGV4Q29uZmlnLmpzJztcblxuZXhwb3J0IGNvbnN0IGdldERpck5hbWUgPSAoKTogc3RyaW5nID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZhbCgnbmV3IFVSTChcIi5cIiwgaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZScpO1xuICB9IGNhdGNoe1xuICAgIHJldHVybiBwcm9jZXNzLmN3ZCgpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsZVBhdGggPSAocmVsYXRpdmVQYXRoOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBldmFsKCdyZXF1aXJlKFwidXJsXCIpLmZpbGVVUkxUb1BhdGgobmV3IFVSTChyZWxhdGl2ZVBhdGgsIGltcG9ydC5tZXRhLnVybCkpJyk7XG4gIH0gY2F0Y2h7XG4gICAgaWYocmVsYXRpdmVQYXRoID09PSAnLi4vLi4vLi4vcGFja2FnZS5qc29uJykge1xuICAgICAgcmV0dXJuIHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdwYWNrYWdlLmpzb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksIHJlbGF0aXZlUGF0aCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRMZXhQYWNrYWdlSnNvblBhdGggPSAoKTogc3RyaW5nID0+IHtcbiAgY29uc3QgTEVYX1BBQ0tBR0VfTkFNRSA9ICdAbmxhYnMvbGV4JztcblxuICBjb25zdCBsZXhJbk5vZGVNb2R1bGVzID0gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4L3BhY2thZ2UuanNvbicpO1xuXG4gIGlmKGV4aXN0c1N5bmMobGV4SW5Ob2RlTW9kdWxlcykpIHtcbiAgICByZXR1cm4gbGV4SW5Ob2RlTW9kdWxlcztcbiAgfVxuXG4gIGxldCBzdGFydERpcjogc3RyaW5nO1xuXG4gIGlmKHByb2Nlc3MuZW52LkxFWF9ST09UKSB7XG4gICAgc3RhcnREaXIgPSBwcm9jZXNzLmVudi5MRVhfUk9PVDtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgc3RhcnREaXIgPSBldmFsKCduZXcgVVJMKFwiLlwiLCBpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lJyk7XG4gICAgfSBjYXRjaHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0YXJ0RGlyID0gZXZhbCgnX19maWxlbmFtZSA/IHJlcXVpcmUoXCJwYXRoXCIpLmRpcm5hbWUoX19maWxlbmFtZSkgOiBudWxsJyk7XG4gICAgICAgIGlmKCFzdGFydERpcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignX19maWxlbmFtZSBub3QgYXZhaWxhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2h7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYocHJvY2Vzcy5hcmd2WzFdICYmICFwcm9jZXNzLmFyZ3ZbMV0uaW5jbHVkZXMoJ25vZGUnKSkge1xuICAgICAgICAgICAgc3RhcnREaXIgPSBkaXJuYW1lKHByb2Nlc3MuYXJndlsxXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5hcmd2WzFdIG5vdCBzdWl0YWJsZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaHtcbiAgICAgICAgICBzdGFydERpciA9IHByb2Nlc3MuY3dkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgZGlyID0gc3RhcnREaXI7XG4gIGZvcihsZXQgaSA9IDA7IGkgPCA4OyBpKyspIHtcbiAgICBjb25zdCBwa2dQYXRoID0gcGF0aFJlc29sdmUoZGlyLCAncGFja2FnZS5qc29uJyk7XG4gICAgaWYoZXhpc3RzU3luYyhwa2dQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMocGtnUGF0aCwgJ3V0ZjgnKSk7XG4gICAgICAgIGlmKHBrZy5uYW1lID09PSBMRVhfUEFDS0FHRV9OQU1FKSB7XG4gICAgICAgICAgcmV0dXJuIHBrZ1BhdGg7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2h7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudCA9IGRpcm5hbWUoZGlyKTtcbiAgICBpZihwYXJlbnQgPT09IGRpcikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRpciA9IHBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAncGFja2FnZS5qc29uJyk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVsYXRpdmVGaWxlUGF0aCA9IChmaWxlbmFtZTogc3RyaW5nLCBkaXJQYXRoOiBzdHJpbmcgPSAnLi8nLCBiYWNrVXA6IG51bWJlciA9IDApOiBzdHJpbmcgPT4ge1xuICBjb25zdCBuZXN0RGVwdGg6IG51bWJlciA9IDEwO1xuXG4gIGlmKGJhY2tVcCkge1xuICAgIGNvbnN0IGZpbGVQYXRoOiBzdHJpbmcgPSBmaW5kRmlsZVVwLnN5bmMoZmlsZW5hbWUsIGRpclBhdGgsIG5lc3REZXB0aCk7XG4gICAgY29uc3QgcHJldmlvdXNQYXRoOiBzdHJpbmcgPSBBcnJheShiYWNrVXApLmZpbGwobnVsbCkubWFwKCgpID0+ICcuLi8nKS5qb2luKCcnKTtcbiAgICByZXR1cm4gcGF0aFJlc29sdmUoZmlsZVBhdGgsIHByZXZpb3VzUGF0aCk7XG4gIH1cblxuICByZXR1cm4gZmluZEZpbGVVcC5zeW5jKGZpbGVuYW1lLCBkaXJQYXRoLCBuZXN0RGVwdGgpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbGF0aXZlTm9kZVBhdGggPSAoZmlsZW5hbWU6IHN0cmluZywgZGlyUGF0aDogc3RyaW5nID0gJy4vJywgYmFja1VwOiBudW1iZXIgPSAwKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbmVzdERlcHRoOiBudW1iZXIgPSAxMDtcbiAgY29uc3QgbW9kdWxlUGF0aCA9IGBub2RlX21vZHVsZXMvJHtmaWxlbmFtZX1gO1xuXG4gIGlmKGRpclBhdGggIT09ICcuLycpIHtcbiAgICBjb25zdCBsZXhNb2R1bGVQYXRoID0gcGF0aFJlc29sdmUoZGlyUGF0aCwgbW9kdWxlUGF0aCk7XG4gICAgaWYoZXhpc3RzU3luYyhsZXhNb2R1bGVQYXRoKSkge1xuICAgICAgcmV0dXJuIGxleE1vZHVsZVBhdGg7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcHJvamVjdFBhdGggPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBtb2R1bGVQYXRoKTtcbiAgaWYoZXhpc3RzU3luYyhwcm9qZWN0UGF0aCkpIHtcbiAgICByZXR1cm4gcHJvamVjdFBhdGg7XG4gIH1cblxuICBpZihiYWNrVXApIHtcbiAgICBjb25zdCBmaWxlUGF0aDogc3RyaW5nID0gZmluZEZpbGVVcC5zeW5jKG1vZHVsZVBhdGgsIGRpclBhdGgsIG5lc3REZXB0aCk7XG4gICAgY29uc3QgcHJldmlvdXNQYXRoOiBzdHJpbmcgPSBBcnJheShuZXN0RGVwdGgpLmZpbGwobnVsbCkubWFwKCgpID0+ICcuLi8nKS5qb2luKCcnKTtcbiAgICByZXR1cm4gcGF0aFJlc29sdmUoZmlsZVBhdGgsIHByZXZpb3VzUGF0aCk7XG4gIH1cblxuICByZXR1cm4gZmluZEZpbGVVcC5zeW5jKG1vZHVsZVBhdGgsIGRpclBhdGgsIG5lc3REZXB0aCkgfHwgYC9ub2RlX21vZHVsZXMvJHtmaWxlbmFtZX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5vZGVQYXRoID0gKG1vZHVsZU5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGRpck5hbWUgPSBnZXREaXJOYW1lKCk7XG4gIGNvbnN0IG1vZHVsZVBhdGg6IHN0cmluZyA9IGBub2RlX21vZHVsZXMvJHttb2R1bGVOYW1lfWA7XG5cbiAgY29uc3QgcHJvamVjdFBhdGggPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBtb2R1bGVQYXRoKTtcbiAgaWYoZXhpc3RzU3luYyhwcm9qZWN0UGF0aCkpIHtcbiAgICByZXR1cm4gcHJvamVjdFBhdGg7XG4gIH1cblxuICBjb25zdCByZXBvUGF0aDogc3RyaW5nID0gZmluZEZpbGVVcC5zeW5jKG1vZHVsZVBhdGgsIGRpck5hbWUpO1xuICBpZihyZXBvUGF0aCAmJiBleGlzdHNTeW5jKHJlcG9QYXRoKSkge1xuICAgIHJldHVybiByZXBvUGF0aDtcbiAgfVxuXG4gIGNvbnN0IGxvY2FsUGF0aDogc3RyaW5nID0gZmluZEZpbGVVcC5zeW5jKG1vZHVsZVBhdGgsICcuLycsIDEwKSB8fCBgLi8ke21vZHVsZVBhdGh9YDtcbiAgcmV0dXJuIGxvY2FsUGF0aDtcbn07XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlQmluYXJ5UGF0aCA9IChiaW5hcnlOYW1lOiBzdHJpbmcsIHBhY2thZ2VOYW1lPzogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuXG4gIGNvbnN0IGxleEJpblBhdGggPSBwYXRoUmVzb2x2ZShsZXhEaXIsIGBub2RlX21vZHVsZXMvLmJpbi8ke2JpbmFyeU5hbWV9YCk7XG4gIGlmKGV4aXN0c1N5bmMobGV4QmluUGF0aCkpIHtcbiAgICByZXR1cm4gbGV4QmluUGF0aDtcbiAgfVxuXG4gIGlmKHBhY2thZ2VOYW1lKSB7XG4gICAgY29uc3QgbGV4UGFja2FnZUJpblBhdGggPSBwYXRoUmVzb2x2ZShsZXhEaXIsIGBub2RlX21vZHVsZXMvJHtwYWNrYWdlTmFtZX0vYmluLyR7YmluYXJ5TmFtZX1gKTtcbiAgICBpZihleGlzdHNTeW5jKGxleFBhY2thZ2VCaW5QYXRoKSkge1xuICAgICAgcmV0dXJuIGxleFBhY2thZ2VCaW5QYXRoO1xuICAgIH1cblxuICAgIGNvbnN0IGxleFBhY2thZ2VCaW5Kc1BhdGggPSBwYXRoUmVzb2x2ZShsZXhEaXIsIGBub2RlX21vZHVsZXMvJHtwYWNrYWdlTmFtZX0vYmluLyR7YmluYXJ5TmFtZX0uanNgKTtcbiAgICBpZihleGlzdHNTeW5jKGxleFBhY2thZ2VCaW5Kc1BhdGgpKSB7XG4gICAgICByZXR1cm4gbGV4UGFja2FnZUJpbkpzUGF0aDtcbiAgICB9XG5cbiAgICBjb25zdCBsZXhQYWNrYWdlQmluQ2pzUGF0aCA9IHBhdGhSZXNvbHZlKGxleERpciwgYG5vZGVfbW9kdWxlcy8ke3BhY2thZ2VOYW1lfS9iaW4vJHtiaW5hcnlOYW1lfS5janNgKTtcbiAgICBpZihleGlzdHNTeW5jKGxleFBhY2thZ2VCaW5DanNQYXRoKSkge1xuICAgICAgcmV0dXJuIGxleFBhY2thZ2VCaW5DanNQYXRoO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNoZWNrQmluVXAgPSAoc3RhcnREaXI6IHN0cmluZykgPT4ge1xuICAgIGxldCBjaGVja0RpciA9IHN0YXJ0RGlyO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHtcbiAgICAgIGNvbnN0IG1vbm9yZXBvQmluUGF0aCA9IHBhdGhSZXNvbHZlKGNoZWNrRGlyLCBgbm9kZV9tb2R1bGVzLy5iaW4vJHtiaW5hcnlOYW1lfWApO1xuICAgICAgaWYoZXhpc3RzU3luYyhtb25vcmVwb0JpblBhdGgpKSB7XG4gICAgICAgIHJldHVybiBtb25vcmVwb0JpblBhdGg7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJlbnREaXIgPSBwYXRoUmVzb2x2ZShjaGVja0RpciwgJy4uJyk7XG4gICAgICBpZihwYXJlbnREaXIgPT09IGNoZWNrRGlyKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2hlY2tEaXIgPSBwYXJlbnREaXI7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfTtcblxuICBjb25zdCBmcm9tQ3dkID0gY2hlY2tCaW5VcChwcm9jZXNzLmN3ZCgpKTtcbiAgaWYoZnJvbUN3ZCkge1xuICAgIHJldHVybiBmcm9tQ3dkO1xuICB9XG5cbiAgY29uc3QgZnJvbUxleCA9IGNoZWNrQmluVXAobGV4RGlyKTtcbiAgaWYoZnJvbUxleCkge1xuICAgIHJldHVybiBmcm9tTGV4O1xuICB9XG5cbiAgcmV0dXJuICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbmRUYWlsd2luZENzc1BhdGggPSAoKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdGFpbHdpbmRQYXR0ZXJucyA9IFsnKiovdGFpbHdpbmQuY3NzJ107XG5cbiAgZm9yKGNvbnN0IHBhdHRlcm4gb2YgdGFpbHdpbmRQYXR0ZXJucykge1xuICAgIGNvbnN0IGZpbGVzID0gZ2xvYlN5bmMocGF0dGVybiwge1xuICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgaWdub3JlOiBbJyoqL25vZGVfbW9kdWxlcy8qKicsICcqKi9kaXN0LyoqJywgJyoqL2xpYi8qKicsICcqKi9idWlsZC8qKicsICcqKi8uc3Rvcnlib29rLyoqJ11cbiAgICB9KTtcblxuICAgIGlmKGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBmaWxlc1swXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVXZWJwYWNrUGF0aHMgPSAoY3VycmVudERpcm5hbWU6IHN0cmluZyk6IHt3ZWJwYWNrUGF0aDogc3RyaW5nOyB3ZWJwYWNrQ29uZmlnOiBzdHJpbmd9ID0+IHtcbiAgY29uc3QgcG9zc2libGVXZWJwYWNrUGF0aHMgPSBbXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ25vZGVfbW9kdWxlcy93ZWJwYWNrLWNsaS9iaW4vY2xpLmpzJyksXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ25vZGVfbW9kdWxlcy8uYmluL3dlYnBhY2snKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgnLCAnbm9kZV9tb2R1bGVzL3dlYnBhY2stY2xpL2Jpbi9jbGkuanMnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgnLCAnbm9kZV9tb2R1bGVzLy5iaW4vd2VicGFjaycpLFxuICAgIHBhdGhSZXNvbHZlKGN1cnJlbnREaXJuYW1lLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgvbm9kZV9tb2R1bGVzL3dlYnBhY2stY2xpL2Jpbi9jbGkuanMnKSxcbiAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJ25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4L25vZGVfbW9kdWxlcy8uYmluL3dlYnBhY2snKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmVudi5MRVhfSE9NRSB8fCAnL25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4JywgJ25vZGVfbW9kdWxlcy93ZWJwYWNrLWNsaS9iaW4vY2xpLmpzJyksXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5lbnYuTEVYX0hPTUUgfHwgJy9ub2RlX21vZHVsZXMvQG5sYWJzL2xleCcsICdub2RlX21vZHVsZXMvLmJpbi93ZWJwYWNrJylcbiAgXTtcblxuICBsZXQgd2VicGFja1BhdGggPSAnJztcblxuICBmb3IoY29uc3QgcGF0aCBvZiBwb3NzaWJsZVdlYnBhY2tQYXRocykge1xuICAgIGlmKGV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICAgIHdlYnBhY2tQYXRoID0gcGF0aDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmKCF3ZWJwYWNrUGF0aCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBsZXhQYWNrYWdlUGF0aCA9IGdldExleFBhY2thZ2VKc29uUGF0aCgpO1xuICAgICAgY29uc3QgbGV4UGFja2FnZURpciA9IGRpcm5hbWUobGV4UGFja2FnZVBhdGgpO1xuICAgICAgY29uc3QgbGV4V2VicGFja0NsaSA9IHBhdGhSZXNvbHZlKGxleFBhY2thZ2VEaXIsICdub2RlX21vZHVsZXMvd2VicGFjay1jbGkvYmluL2NsaS5qcycpO1xuICAgICAgY29uc3QgbGV4V2VicGFja0JpbiA9IHBhdGhSZXNvbHZlKGxleFBhY2thZ2VEaXIsICdub2RlX21vZHVsZXMvLmJpbi93ZWJwYWNrJyk7XG5cbiAgICAgIGlmKGV4aXN0c1N5bmMobGV4V2VicGFja0NsaSkpIHtcbiAgICAgICAgd2VicGFja1BhdGggPSBsZXhXZWJwYWNrQ2xpO1xuICAgICAgfSBlbHNlIGlmKGV4aXN0c1N5bmMobGV4V2VicGFja0JpbikpIHtcbiAgICAgICAgd2VicGFja1BhdGggPSBsZXhXZWJwYWNrQmluO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2VicGFja1BhdGggPSAnbnB4JztcbiAgICAgIH1cbiAgICB9IGNhdGNoe1xuICAgICAgd2VicGFja1BhdGggPSAnbnB4JztcbiAgICB9XG4gIH1cblxuICBjb25zdCBwb3NzaWJsZVdlYnBhY2tDb25maWdQYXRocyA9IFtcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnd2VicGFjay5jb25maWcuanMnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnd2VicGFjay5jb25maWcudHMnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgvd2VicGFjay5jb25maWcuanMnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgvd2VicGFjay5jb25maWcudHMnKSxcbiAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJ25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4L3dlYnBhY2suY29uZmlnLmpzJyksXG4gICAgcGF0aFJlc29sdmUoY3VycmVudERpcm5hbWUsICdub2RlX21vZHVsZXMvQG5sYWJzL2xleC93ZWJwYWNrLmNvbmZpZy50cycpLFxuICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuZW52LkxFWF9IT01FIHx8ICcvbm9kZV9tb2R1bGVzL0BubGFicy9sZXgnLCAnd2VicGFjay5jb25maWcuanMnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmVudi5MRVhfSE9NRSB8fCAnL25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4JywgJ3dlYnBhY2suY29uZmlnLnRzJylcbiAgXTtcblxuICBsZXQgd2VicGFja0NvbmZpZyA9ICcnO1xuXG4gIGZvcihjb25zdCBwYXRoIG9mIHBvc3NpYmxlV2VicGFja0NvbmZpZ1BhdGhzKSB7XG4gICAgaWYoZXhpc3RzU3luYyhwYXRoKSkge1xuICAgICAgd2VicGFja0NvbmZpZyA9IHBhdGg7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZighd2VicGFja0NvbmZpZykge1xuICAgIGNvbnN0IGxleFBhY2thZ2VQYXRoID0gZ2V0TGV4UGFja2FnZUpzb25QYXRoKCk7XG4gICAgY29uc3QgbGV4UGFja2FnZURpciA9IGRpcm5hbWUobGV4UGFja2FnZVBhdGgpO1xuICAgIGNvbnN0IGxleFdlYnBhY2tDb25maWcgPSBwYXRoUmVzb2x2ZShsZXhQYWNrYWdlRGlyLCAnd2VicGFjay5jb25maWcuanMnKTtcblxuICAgIGlmKGV4aXN0c1N5bmMobGV4V2VicGFja0NvbmZpZykpIHtcbiAgICAgIHdlYnBhY2tDb25maWcgPSBsZXhXZWJwYWNrQ29uZmlnO1xuICAgIH0gZWxzZSB7XG4gICAgICB3ZWJwYWNrQ29uZmlnID0gcGF0aFJlc29sdmUoY3VycmVudERpcm5hbWUsICcuLi8uLi93ZWJwYWNrLmNvbmZpZy5qcycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7d2VicGFja0NvbmZpZywgd2VicGFja1BhdGh9O1xufTsiXSwibmFtZXMiOlsiZmluZEZpbGVVcCIsImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJzeW5jIiwiZ2xvYlN5bmMiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJkaXJuYW1lIiwiTGV4Q29uZmlnIiwiZ2V0RGlyTmFtZSIsImV2YWwiLCJwcm9jZXNzIiwiY3dkIiwiZ2V0RmlsZVBhdGgiLCJyZWxhdGl2ZVBhdGgiLCJnZXRMZXhQYWNrYWdlSnNvblBhdGgiLCJMRVhfUEFDS0FHRV9OQU1FIiwibGV4SW5Ob2RlTW9kdWxlcyIsInN0YXJ0RGlyIiwiZW52IiwiTEVYX1JPT1QiLCJFcnJvciIsImFyZ3YiLCJpbmNsdWRlcyIsImRpciIsImkiLCJwa2dQYXRoIiwicGtnIiwiSlNPTiIsInBhcnNlIiwibmFtZSIsInBhcmVudCIsInJlbGF0aXZlRmlsZVBhdGgiLCJmaWxlbmFtZSIsImRpclBhdGgiLCJiYWNrVXAiLCJuZXN0RGVwdGgiLCJmaWxlUGF0aCIsInByZXZpb3VzUGF0aCIsIkFycmF5IiwiZmlsbCIsIm1hcCIsImpvaW4iLCJyZWxhdGl2ZU5vZGVQYXRoIiwibW9kdWxlUGF0aCIsImxleE1vZHVsZVBhdGgiLCJwcm9qZWN0UGF0aCIsImdldE5vZGVQYXRoIiwibW9kdWxlTmFtZSIsImRpck5hbWUiLCJyZXBvUGF0aCIsImxvY2FsUGF0aCIsInJlc29sdmVCaW5hcnlQYXRoIiwiYmluYXJ5TmFtZSIsInBhY2thZ2VOYW1lIiwibGV4RGlyIiwiZ2V0TGV4RGlyIiwibGV4QmluUGF0aCIsImxleFBhY2thZ2VCaW5QYXRoIiwibGV4UGFja2FnZUJpbkpzUGF0aCIsImxleFBhY2thZ2VCaW5DanNQYXRoIiwiY2hlY2tCaW5VcCIsImNoZWNrRGlyIiwibW9ub3JlcG9CaW5QYXRoIiwicGFyZW50RGlyIiwiZnJvbUN3ZCIsImZyb21MZXgiLCJmaW5kVGFpbHdpbmRDc3NQYXRoIiwidGFpbHdpbmRQYXR0ZXJucyIsInBhdHRlcm4iLCJmaWxlcyIsImlnbm9yZSIsImxlbmd0aCIsInJlc29sdmVXZWJwYWNrUGF0aHMiLCJjdXJyZW50RGlybmFtZSIsInBvc3NpYmxlV2VicGFja1BhdGhzIiwiTEVYX0hPTUUiLCJ3ZWJwYWNrUGF0aCIsInBhdGgiLCJsZXhQYWNrYWdlUGF0aCIsImxleFBhY2thZ2VEaXIiLCJsZXhXZWJwYWNrQ2xpIiwibGV4V2VicGFja0JpbiIsInBvc3NpYmxlV2VicGFja0NvbmZpZ1BhdGhzIiwid2VicGFja0NvbmZpZyIsImxleFdlYnBhY2tDb25maWciXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELE9BQU9BLGdCQUFnQixlQUFlO0FBQ3RDLFNBQVFDLFVBQVUsRUFBRUMsWUFBWSxRQUFPLEtBQUs7QUFDNUMsU0FBUUMsUUFBUUMsUUFBUSxRQUFPLE9BQU87QUFDdEMsU0FBUUMsV0FBV0MsV0FBVyxFQUFFQyxPQUFPLFFBQU8sT0FBTztBQUVyRCxTQUFRQyxTQUFTLFFBQU8sa0JBQWtCO0FBRTFDLE9BQU8sTUFBTUMsYUFBYTtJQUN4QixJQUFJO1FBQ0YsT0FBT0MsS0FBSztJQUNkLEVBQUUsT0FBSztRQUNMLE9BQU9DLFFBQVFDLEdBQUc7SUFDcEI7QUFDRixFQUFFO0FBRUYsT0FBTyxNQUFNQyxjQUFjLENBQUNDO0lBQzFCLElBQUk7UUFDRixPQUFPSixLQUFLO0lBQ2QsRUFBRSxPQUFLO1FBQ0wsSUFBR0ksaUJBQWlCLHlCQUF5QjtZQUMzQyxPQUFPUixZQUFZSyxRQUFRQyxHQUFHLElBQUk7UUFDcEM7UUFDQSxPQUFPTixZQUFZSyxRQUFRQyxHQUFHLElBQUlFO0lBQ3BDO0FBQ0YsRUFBRTtBQUVGLE9BQU8sTUFBTUMsd0JBQXdCO0lBQ25DLE1BQU1DLG1CQUFtQjtJQUV6QixNQUFNQyxtQkFBbUJYLFlBQVlLLFFBQVFDLEdBQUcsSUFBSTtJQUVwRCxJ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
209
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9maWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQgZmluZEZpbGVVcCBmcm9tICdmaW5kLWZpbGUtdXAnO1xuaW1wb3J0IHtleGlzdHNTeW5jLCByZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7c3luYyBhcyBnbG9iU3luY30gZnJvbSAnZ2xvYic7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmUsIGRpcm5hbWV9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vTGV4Q29uZmlnLmpzJztcblxuZXhwb3J0IGNvbnN0IGdldERpck5hbWUgPSAoKTogc3RyaW5nID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZhbCgnbmV3IFVSTChcIi5cIiwgaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZScpO1xuICB9IGNhdGNoe1xuICAgIHJldHVybiBwcm9jZXNzLmN3ZCgpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TGV4UGFja2FnZUpzb25QYXRoID0gKCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IExFWF9QQUNLQUdFX05BTUUgPSAnQG5sYWJzL2xleCc7XG5cbiAgY29uc3QgbGV4SW5Ob2RlTW9kdWxlcyA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdub2RlX21vZHVsZXMvQG5sYWJzL2xleC9wYWNrYWdlLmpzb24nKTtcblxuICBpZihleGlzdHNTeW5jKGxleEluTm9kZU1vZHVsZXMpKSB7XG4gICAgcmV0dXJuIGxleEluTm9kZU1vZHVsZXM7XG4gIH1cblxuICBsZXQgc3RhcnREaXI6IHN0cmluZztcblxuICBpZihwcm9jZXNzLmVudi5MRVhfUk9PVCkge1xuICAgIHN0YXJ0RGlyID0gcHJvY2Vzcy5lbnYuTEVYX1JPT1Q7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIHN0YXJ0RGlyID0gZXZhbCgnbmV3IFVSTChcIi5cIiwgaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZScpO1xuICAgIH0gY2F0Y2h7XG4gICAgICB0cnkge1xuICAgICAgICBzdGFydERpciA9IGV2YWwoJ19fZmlsZW5hbWUgPyByZXF1aXJlKFwicGF0aFwiKS5kaXJuYW1lKF9fZmlsZW5hbWUpIDogbnVsbCcpO1xuICAgICAgICBpZighc3RhcnREaXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ19fZmlsZW5hbWUgbm90IGF2YWlsYWJsZScpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoe1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmKHByb2Nlc3MuYXJndlsxXSAmJiAhcHJvY2Vzcy5hcmd2WzFdLmluY2x1ZGVzKCdub2RlJykpIHtcbiAgICAgICAgICAgIHN0YXJ0RGlyID0gZGlybmFtZShwcm9jZXNzLmFyZ3ZbMV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYXJndlsxXSBub3Qgc3VpdGFibGUnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2h7XG4gICAgICAgICAgc3RhcnREaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IGRpciA9IHN0YXJ0RGlyO1xuICBmb3IobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7XG4gICAgY29uc3QgcGtnUGF0aCA9IHBhdGhSZXNvbHZlKGRpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocGtnUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBrZ1BhdGgsICd1dGY4JykpO1xuICAgICAgICBpZihwa2cubmFtZSA9PT0gTEVYX1BBQ0tBR0VfTkFNRSkge1xuICAgICAgICAgIHJldHVybiBwa2dQYXRoO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoe1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSBkaXJuYW1lKGRpcik7XG4gICAgaWYocGFyZW50ID09PSBkaXIpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkaXIgPSBwYXJlbnQ7XG4gIH1cblxuICByZXR1cm4gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ3BhY2thZ2UuanNvbicpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbGF0aXZlRmlsZVBhdGggPSAoZmlsZW5hbWU6IHN0cmluZywgZGlyUGF0aDogc3RyaW5nID0gJy4vJywgYmFja1VwOiBudW1iZXIgPSAwKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbmVzdERlcHRoOiBudW1iZXIgPSAxMDtcblxuICBpZihiYWNrVXApIHtcbiAgICBjb25zdCBmaWxlUGF0aDogc3RyaW5nID0gZmluZEZpbGVVcC5zeW5jKGZpbGVuYW1lLCBkaXJQYXRoLCBuZXN0RGVwdGgpO1xuICAgIGNvbnN0IHByZXZpb3VzUGF0aDogc3RyaW5nID0gQXJyYXkoYmFja1VwKS5maWxsKG51bGwpLm1hcCgoKSA9PiAnLi4vJykuam9pbignJyk7XG4gICAgcmV0dXJuIHBhdGhSZXNvbHZlKGZpbGVQYXRoLCBwcmV2aW91c1BhdGgpO1xuICB9XG5cbiAgcmV0dXJuIGZpbmRGaWxlVXAuc3luYyhmaWxlbmFtZSwgZGlyUGF0aCwgbmVzdERlcHRoKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlQmluYXJ5UGF0aCA9IChiaW5hcnlOYW1lOiBzdHJpbmcsIHBhY2thZ2VOYW1lPzogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuXG4gIGNvbnN0IGxleEJpblBhdGggPSBwYXRoUmVzb2x2ZShsZXhEaXIsIGBub2RlX21vZHVsZXMvLmJpbi8ke2JpbmFyeU5hbWV9YCk7XG4gIGlmKGV4aXN0c1N5bmMobGV4QmluUGF0aCkpIHtcbiAgICByZXR1cm4gbGV4QmluUGF0aDtcbiAgfVxuXG4gIGlmKHBhY2thZ2VOYW1lKSB7XG4gICAgY29uc3QgbGV4UGFja2FnZUJpblBhdGggPSBwYXRoUmVzb2x2ZShsZXhEaXIsIGBub2RlX21vZHVsZXMvJHtwYWNrYWdlTmFtZX0vYmluLyR7YmluYXJ5TmFtZX1gKTtcbiAgICBpZihleGlzdHNTeW5jKGxleFBhY2thZ2VCaW5QYXRoKSkge1xuICAgICAgcmV0dXJuIGxleFBhY2thZ2VCaW5QYXRoO1xuICAgIH1cblxuICAgIGNvbnN0IGxleFBhY2thZ2VCaW5Kc1BhdGggPSBwYXRoUmVzb2x2ZShsZXhEaXIsIGBub2RlX21vZHVsZXMvJHtwYWNrYWdlTmFtZX0vYmluLyR7YmluYXJ5TmFtZX0uanNgKTtcbiAgICBpZihleGlzdHNTeW5jKGxleFBhY2thZ2VCaW5Kc1BhdGgpKSB7XG4gICAgICByZXR1cm4gbGV4UGFja2FnZUJpbkpzUGF0aDtcbiAgICB9XG5cbiAgICBjb25zdCBsZXhQYWNrYWdlQmluQ2pzUGF0aCA9IHBhdGhSZXNvbHZlKGxleERpciwgYG5vZGVfbW9kdWxlcy8ke3BhY2thZ2VOYW1lfS9iaW4vJHtiaW5hcnlOYW1lfS5janNgKTtcbiAgICBpZihleGlzdHNTeW5jKGxleFBhY2thZ2VCaW5DanNQYXRoKSkge1xuICAgICAgcmV0dXJuIGxleFBhY2thZ2VCaW5DanNQYXRoO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNoZWNrQmluVXAgPSAoc3RhcnREaXI6IHN0cmluZykgPT4ge1xuICAgIGxldCBjaGVja0RpciA9IHN0YXJ0RGlyO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHtcbiAgICAgIGNvbnN0IG1vbm9yZXBvQmluUGF0aCA9IHBhdGhSZXNvbHZlKGNoZWNrRGlyLCBgbm9kZV9tb2R1bGVzLy5iaW4vJHtiaW5hcnlOYW1lfWApO1xuICAgICAgaWYoZXhpc3RzU3luYyhtb25vcmVwb0JpblBhdGgpKSB7XG4gICAgICAgIHJldHVybiBtb25vcmVwb0JpblBhdGg7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJlbnREaXIgPSBwYXRoUmVzb2x2ZShjaGVja0RpciwgJy4uJyk7XG4gICAgICBpZihwYXJlbnREaXIgPT09IGNoZWNrRGlyKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2hlY2tEaXIgPSBwYXJlbnREaXI7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfTtcblxuICBjb25zdCBmcm9tQ3dkID0gY2hlY2tCaW5VcChwcm9jZXNzLmN3ZCgpKTtcbiAgaWYoZnJvbUN3ZCkge1xuICAgIHJldHVybiBmcm9tQ3dkO1xuICB9XG5cbiAgY29uc3QgZnJvbUxleCA9IGNoZWNrQmluVXAobGV4RGlyKTtcbiAgaWYoZnJvbUxleCkge1xuICAgIHJldHVybiBmcm9tTGV4O1xuICB9XG5cbiAgcmV0dXJuICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbmRUYWlsd2luZENzc1BhdGggPSAoKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdGFpbHdpbmRQYXR0ZXJucyA9IFsnKiovdGFpbHdpbmQuY3NzJ107XG5cbiAgZm9yKGNvbnN0IHBhdHRlcm4gb2YgdGFpbHdpbmRQYXR0ZXJucykge1xuICAgIGNvbnN0IGZpbGVzID0gZ2xvYlN5bmMocGF0dGVybiwge1xuICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgaWdub3JlOiBbJyoqL25vZGVfbW9kdWxlcy8qKicsICcqKi9kaXN0LyoqJywgJyoqL2xpYi8qKicsICcqKi9idWlsZC8qKicsICcqKi8uc3Rvcnlib29rLyoqJ11cbiAgICB9KTtcblxuICAgIGlmKGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBmaWxlc1swXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVXZWJwYWNrUGF0aHMgPSAoY3VycmVudERpcm5hbWU6IHN0cmluZyk6IHt3ZWJwYWNrUGF0aDogc3RyaW5nOyB3ZWJwYWNrQ29uZmlnOiBzdHJpbmd9ID0+IHtcbiAgY29uc3QgcG9zc2libGVXZWJwYWNrUGF0aHMgPSBbXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ25vZGVfbW9kdWxlcy93ZWJwYWNrLWNsaS9iaW4vY2xpLmpzJyksXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ25vZGVfbW9kdWxlcy8uYmluL3dlYnBhY2snKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgnLCAnbm9kZV9tb2R1bGVzL3dlYnBhY2stY2xpL2Jpbi9jbGkuanMnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgnLCAnbm9kZV9tb2R1bGVzLy5iaW4vd2VicGFjaycpLFxuICAgIHBhdGhSZXNvbHZlKGN1cnJlbnREaXJuYW1lLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgvbm9kZV9tb2R1bGVzL3dlYnBhY2stY2xpL2Jpbi9jbGkuanMnKSxcbiAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJ25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4L25vZGVfbW9kdWxlcy8uYmluL3dlYnBhY2snKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmVudi5MRVhfSE9NRSB8fCAnL25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4JywgJ25vZGVfbW9kdWxlcy93ZWJwYWNrLWNsaS9iaW4vY2xpLmpzJyksXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5lbnYuTEVYX0hPTUUgfHwgJy9ub2RlX21vZHVsZXMvQG5sYWJzL2xleCcsICdub2RlX21vZHVsZXMvLmJpbi93ZWJwYWNrJylcbiAgXTtcblxuICBsZXQgd2VicGFja1BhdGggPSAnJztcblxuICBmb3IoY29uc3QgcGF0aCBvZiBwb3NzaWJsZVdlYnBhY2tQYXRocykge1xuICAgIGlmKGV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICAgIHdlYnBhY2tQYXRoID0gcGF0aDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmKCF3ZWJwYWNrUGF0aCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBsZXhQYWNrYWdlUGF0aCA9IGdldExleFBhY2thZ2VKc29uUGF0aCgpO1xuICAgICAgY29uc3QgbGV4UGFja2FnZURpciA9IGRpcm5hbWUobGV4UGFja2FnZVBhdGgpO1xuICAgICAgY29uc3QgbGV4V2VicGFja0NsaSA9IHBhdGhSZXNvbHZlKGxleFBhY2thZ2VEaXIsICdub2RlX21vZHVsZXMvd2VicGFjay1jbGkvYmluL2NsaS5qcycpO1xuICAgICAgY29uc3QgbGV4V2VicGFja0JpbiA9IHBhdGhSZXNvbHZlKGxleFBhY2thZ2VEaXIsICdub2RlX21vZHVsZXMvLmJpbi93ZWJwYWNrJyk7XG5cbiAgICAgIGlmKGV4aXN0c1N5bmMobGV4V2VicGFja0NsaSkpIHtcbiAgICAgICAgd2VicGFja1BhdGggPSBsZXhXZWJwYWNrQ2xpO1xuICAgICAgfSBlbHNlIGlmKGV4aXN0c1N5bmMobGV4V2VicGFja0JpbikpIHtcbiAgICAgICAgd2VicGFja1BhdGggPSBsZXhXZWJwYWNrQmluO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2VicGFja1BhdGggPSAnbnB4JztcbiAgICAgIH1cbiAgICB9IGNhdGNoe1xuICAgICAgd2VicGFja1BhdGggPSAnbnB4JztcbiAgICB9XG4gIH1cblxuICBjb25zdCBwb3NzaWJsZVdlYnBhY2tDb25maWdQYXRocyA9IFtcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnd2VicGFjay5jb25maWcuanMnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnd2VicGFjay5jb25maWcudHMnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgvd2VicGFjay5jb25maWcuanMnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgvd2VicGFjay5jb25maWcudHMnKSxcbiAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJ25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4L3dlYnBhY2suY29uZmlnLmpzJyksXG4gICAgcGF0aFJlc29sdmUoY3VycmVudERpcm5hbWUsICdub2RlX21vZHVsZXMvQG5sYWJzL2xleC93ZWJwYWNrLmNvbmZpZy50cycpLFxuICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuZW52LkxFWF9IT01FIHx8ICcvbm9kZV9tb2R1bGVzL0BubGFicy9sZXgnLCAnd2VicGFjay5jb25maWcuanMnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmVudi5MRVhfSE9NRSB8fCAnL25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4JywgJ3dlYnBhY2suY29uZmlnLnRzJylcbiAgXTtcblxuICBsZXQgd2VicGFja0NvbmZpZyA9ICcnO1xuXG4gIGZvcihjb25zdCBwYXRoIG9mIHBvc3NpYmxlV2VicGFja0NvbmZpZ1BhdGhzKSB7XG4gICAgaWYoZXhpc3RzU3luYyhwYXRoKSkge1xuICAgICAgd2VicGFja0NvbmZpZyA9IHBhdGg7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZighd2VicGFja0NvbmZpZykge1xuICAgIGNvbnN0IGxleFBhY2thZ2VQYXRoID0gZ2V0TGV4UGFja2FnZUpzb25QYXRoKCk7XG4gICAgY29uc3QgbGV4UGFja2FnZURpciA9IGRpcm5hbWUobGV4UGFja2FnZVBhdGgpO1xuICAgIGNvbnN0IGxleFdlYnBhY2tDb25maWcgPSBwYXRoUmVzb2x2ZShsZXhQYWNrYWdlRGlyLCAnd2VicGFjay5jb25maWcuanMnKTtcblxuICAgIGlmKGV4aXN0c1N5bmMobGV4V2VicGFja0NvbmZpZykpIHtcbiAgICAgIHdlYnBhY2tDb25maWcgPSBsZXhXZWJwYWNrQ29uZmlnO1xuICAgIH0gZWxzZSB7XG4gICAgICB3ZWJwYWNrQ29uZmlnID0gcGF0aFJlc29sdmUoY3VycmVudERpcm5hbWUsICcuLi8uLi93ZWJwYWNrLmNvbmZpZy5qcycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7d2VicGFja0NvbmZpZywgd2VicGFja1BhdGh9O1xufTsiXSwibmFtZXMiOlsiZmluZEZpbGVVcCIsImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJzeW5jIiwiZ2xvYlN5bmMiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJkaXJuYW1lIiwiTGV4Q29uZmlnIiwiZ2V0RGlyTmFtZSIsImV2YWwiLCJwcm9jZXNzIiwiY3dkIiwiZ2V0TGV4UGFja2FnZUpzb25QYXRoIiwiTEVYX1BBQ0tBR0VfTkFNRSIsImxleEluTm9kZU1vZHVsZXMiLCJzdGFydERpciIsImVudiIsIkxFWF9ST09UIiwiRXJyb3IiLCJhcmd2IiwiaW5jbHVkZXMiLCJkaXIiLCJpIiwicGtnUGF0aCIsInBrZyIsIkpTT04iLCJwYXJzZSIsIm5hbWUiLCJwYXJlbnQiLCJyZWxhdGl2ZUZpbGVQYXRoIiwiZmlsZW5hbWUiLCJkaXJQYXRoIiwiYmFja1VwIiwibmVzdERlcHRoIiwiZmlsZVBhdGgiLCJwcmV2aW91c1BhdGgiLCJBcnJheSIsImZpbGwiLCJtYXAiLCJqb2luIiwicmVzb2x2ZUJpbmFyeVBhdGgiLCJiaW5hcnlOYW1lIiwicGFja2FnZU5hbWUiLCJsZXhEaXIiLCJnZXRMZXhEaXIiLCJsZXhCaW5QYXRoIiwibGV4UGFja2FnZUJpblBhdGgiLCJsZXhQYWNrYWdlQmluSnNQYXRoIiwibGV4UGFja2FnZUJpbkNqc1BhdGgiLCJjaGVja0JpblVwIiwiY2hlY2tEaXIiLCJtb25vcmVwb0JpblBhdGgiLCJwYXJlbnREaXIiLCJmcm9tQ3dkIiwiZnJvbUxleCIsImZpbmRUYWlsd2luZENzc1BhdGgiLCJ0YWlsd2luZFBhdHRlcm5zIiwicGF0dGVybiIsImZpbGVzIiwiaWdub3JlIiwibGVuZ3RoIiwicmVzb2x2ZVdlYnBhY2tQYXRocyIsImN1cnJlbnREaXJuYW1lIiwicG9zc2libGVXZWJwYWNrUGF0aHMiLCJMRVhfSE9NRSIsIndlYnBhY2tQYXRoIiwicGF0aCIsImxleFBhY2thZ2VQYXRoIiwibGV4UGFja2FnZURpciIsImxleFdlYnBhY2tDbGkiLCJsZXhXZWJwYWNrQmluIiwicG9zc2libGVXZWJwYWNrQ29uZmlnUGF0aHMiLCJ3ZWJwYWNrQ29uZmlnIiwibGV4V2VicGFja0NvbmZpZyJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsT0FBT0EsZ0JBQWdCLGVBQWU7QUFDdEMsU0FBUUMsVUFBVSxFQUFFQyxZQUFZLFFBQU8sS0FBSztBQUM1QyxTQUFRQyxRQUFRQyxRQUFRLFFBQU8sT0FBTztBQUN0QyxTQUFRQyxXQUFXQyxXQUFXLEVBQUVDLE9BQU8sUUFBTyxPQUFPO0FBRXJELFNBQVFDLFNBQVMsUUFBTyxrQkFBa0I7QUFFMUMsT0FBTyxNQUFNQyxhQUFhO0lBQ3hCLElBQUk7UUFDRixPQUFPQyxLQUFLO0lBQ2QsRUFBRSxPQUFLO1FBQ0wsT0FBT0MsUUFBUUMsR0FBRztJQUNwQjtBQUNGLEVBQUU7QUFFRixPQUFPLE1BQU1DLHdCQUF3QjtJQUNuQyxNQUFNQyxtQkFBbUI7SUFFekIsTUFBTUMsbUJBQW1CVCxZQUFZSyxRQUFRQyxHQUFHLElBQUk7SUFFcEQsSUFBR1gsV0FBV2MsbUJBQW1CO1FBQy9CLE9BQU9BO0lBQ1Q7SUFFQSxJQUFJQztJQUVKLElBQUdMLFFBQVFNLEdBQUcsQ0FBQ0MsUUFBUSxFQUFFO1FBQ3ZCRixXQUFXTCxRQUFRTSxHQUFHLENBQUNDLFFBQVE7SUFDakMsT0FBTztRQUNMLElBQUk7WUFDRkYsV0FBV04sS0FBSztRQUNsQixFQUFFLE9BQUs7WUFDTCxJQUFJO2dCQUNGTSxXQUFXTixLQUFLO2dCQUNoQixJQUFHLENBQUNNLFVBQVU7b0JBQ1osTUFBTSxJQUFJRyxNQUFNO2dCQUNsQjtZQUNGLEVBQUUsT0FBSztnQkFDTCxJQUFJO29CQUNGLElBQUdSLFFBQVFTLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQ1QsUUFBUVMsSUFBSSxDQUFDLEVBQUUsQ0FBQ0MsUUFBUSxDQUFDLFNBQVM7d0JBQ3ZETCxXQUFXVCxRQUFRSSxRQUFRUyxJQUFJLENBQUMsRUFBRTtvQkFDcEMsT0FBTzt3QkFDTCxNQUFNLElBQUlELE1BQU07b0JBQ2xCO2dCQUNGLEVBQUUsT0FBSztvQkFDTEgsV0FBV0wsUUFBUUMsR0FBRztnQkFDeEI7WUFDRjtRQUNGO0lBQ0Y7SUFFQSxJQUFJVSxNQUFNTjtJQUNWLElBQUksSUFBSU8sSUFBSSxHQUFHQSxJQUFJLEdBQUdBLElBQUs7UUFDekIsTUFBTUMsVUFBVWxCLFlBQVlnQixLQUFLO1FBQ2pDLElBQUdyQixXQUFXdUIsVUFBVTtZQUN0QixJQUFJO2dCQUNGLE1BQU1DLE1BQU1DLEtBQUtDLEtBQUssQ0FBQ3pCLGFBQWFzQixTQUFTO2dCQUM3QyxJQUFHQyxJQUFJRyxJQUFJLEtBQUtkLGtCQUFrQjtvQkFDaEMsT0FBT1U7Z0JBQ1Q7WUFDRixFQUFFLE9BQUssQ0FDUDtRQUNGO1FBQ0EsTUFBTUssU0FBU3RCLFFBQVFlO1FBQ3ZCLElBQUdPLFdBQVdQLEtBQUs7WUFDakI7UUFDRjtRQUNBQSxNQUFNTztJQUNSO0lBRUEsT0FBT3ZCLFlBQVlLLFFBQVFDLEdBQUcsSUFBSTtBQUNwQyxFQUFFO0FBRUYsT0FBTyxNQUFNa0IsbUJBQW1CLENBQUNDLFVBQWtCQyxVQUFrQixJQUFJLEVBQUVDLFNBQWlCLENBQUM7SUFDM0YsTUFBTUMsWUFBb0I7SUFFMUIsSUFBR0QsUUFBUTtRQUNULE1BQU1FLFdBQW1CbkMsV0FBV0csSUFBSSxDQUFDNEIsVUFBVUMsU0FBU0U7UUFDNUQsTUFBTUUsZUFBdUJDLE1BQU1KLFFBQVFLLElBQUksQ0FBQyxNQUFNQyxHQUFHLENBQUMsSUFBTSxPQUFPQyxJQUFJLENBQUM7UUFDNUUsT0FBT2xDLFlBQVk2QixVQUFVQztJQUMvQjtJQUVBLE9BQU9wQyxXQUFXRyxJQUFJLENBQUM0QixVQUFVQyxTQUFTRTtBQUM1QyxFQUFFO0FBRUYsT0FBTyxNQUFNTyxvQkFBb0IsQ0FBQ0MsWUFBb0JDO0lBQ3BELE1BQU1DLFNBQVNwQyxVQUFVcUMsU0FBUztJQUVsQyxNQUFNQyxhQUFheEMsWUFBWXNDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRUYsWUFBWTtJQUN4RSxJQUFHekMsV0FBVzZDLGFBQWE7UUFDekIsT0FBT0E7SUFDVDtJQUVBLElBQUdILGFBQWE7UUFDZCxNQUFNSSxvQkFBb0J6QyxZQUFZc0MsUUFBUSxDQUFDLGFBQWEsRUFBRUQsWUFBWSxLQUFLLEVBQUVELFlBQVk7UUFDN0YsSUFBR3pDLFdBQVc4QyxvQkFBb0I7WUFDaEMsT0FBT0E7UUFDVDtRQUVBLE1BQU1DLHNCQUFzQjFDLFlBQVlzQyxRQUFRLENBQUMsYUFBYSxFQUFFRCxZQUFZLEtBQUssRUFBRUQsV0FBVyxHQUFHLENBQUM7UUFDbEcsSUFBR3pDLFdBQVcrQyxzQkFBc0I7WUFDbEMsT0FBT0E7UUFDVDtRQUVBLE1BQU1DLHVCQUF1QjNDLFlBQVlzQyxRQUFRLENBQUMsYUFBYSxFQUFFRCxZQUFZLEtBQUssRUFBRUQsV0FBVyxJQUFJLENBQUM7UUFDcEcsSUFBR3pDLFdBQVdnRCx1QkFBdUI7WUFDbkMsT0FBT0E7UUFDVDtJQUNGO0lBRUEsTUFBTUMsYUFBYSxDQUFDbEM7UUFDbEIsSUFBSW1DLFdBQVduQztRQUNmLElBQUksSUFBSU8sSUFBSSxHQUFHQSxJQUFJLEdBQUdBLElBQUs7WUFDekIsTUFBTTZCLGtCQUFrQjlDLFlBQVk2QyxVQUFVLENBQUMsa0JBQWtCLEVBQUVULFlBQVk7WUFDL0UsSUFBR3pDLFdBQVdtRCxrQkFBa0I7Z0JBQzlCLE9BQU9BO1lBQ1Q7WUFDQSxNQUFNQyxZQUFZL0MsWUFBWTZDLFVBQVU7WUFDeEMsSUFBR0UsY0FBY0YsVUFBVTtnQkFDekI7WUFDRjtZQUNBQSxXQUFXRTtRQUNiO1FBQ0EsT0FBTztJQUNUO0lBRUEsTUFBTUMsVUFBVUosV0FBV3ZDLFFBQVFDLEdBQUc7SUFDdEMsSUFBRzBDLFNBQVM7UUFDVixPQUFPQTtJQUNUO0lBRUEsTUFBTUMsVUFBVUwsV0FBV047SUFDM0IsSUFBR1csU0FBUztRQUNWLE9BQU9BO0lBQ1Q7SUFFQSxPQUFPO0FBQ1QsRUFBRTtBQUVGLE9BQU8sTUFBTUMsc0JBQXNCO0lBQ2pDLE1BQU1DLG1CQUFtQjtRQUFDO0tBQWtCO0lBRTVDLEtBQUksTUFBTUMsV0FBV0QsaUJBQWtCO1FBQ3JDLE1BQU1FLFFBQVF2RCxTQUFTc0QsU0FBUztZQUM5QjlDLEtBQUtELFFBQVFDLEdBQUc7WUFDaEJnRCxRQUFRO2dCQUFDO2dCQUFzQjtnQkFBYztnQkFBYTtnQkFBZTthQUFtQjtRQUM5RjtRQUVBLElBQUdELE1BQU1FLE1BQU0sR0FBRyxHQUFHO1lBQ25CLE9BQU92RCxZQUFZSyxRQUFRQyxHQUFHLElBQUkrQyxLQUFLLENBQUMsRUFBRTtRQUM1QztJQUNGO0lBRUEsT0FBTztBQUNULEVBQUU7QUFFRixPQUFPLE1BQU1HLHNCQUFzQixDQUFDQztJQUNsQyxNQUFNQyx1QkFBdUI7UUFDM0IxRCxZQUFZSyxRQUFRQyxHQUFHLElBQUk7UUFDM0JOLFlBQVlLLFFBQVFDLEdBQUcsSUFBSTtRQUMzQk4sWUFBWUssUUFBUUMsR0FBRyxJQUFJLDJCQUEyQjtRQUN0RE4sWUFBWUssUUFBUUMsR0FBRyxJQUFJLDJCQUEyQjtRQUN0RE4sWUFBWXlELGdCQUFnQjtRQUM1QnpELFlBQVl5RCxnQkFBZ0I7UUFDNUJ6RCxZQUFZSyxRQUFRTSxHQUFHLENBQUNnRCxRQUFRLElBQUksNEJBQTRCO1FBQ2hFM0QsWUFBWUssUUFBUU0sR0FBRyxDQUFDZ0QsUUFBUSxJQUFJLDRCQUE0QjtLQUNqRTtJQUVELElBQUlDLGNBQWM7SUFFbEIsS0FBSSxNQUFNQyxRQUFRSCxxQkFBc0I7UUFDdEMsSUFBRy9ELFdBQVdrRSxPQUFPO1lBQ25CRCxjQUFjQztZQUNkO1FBQ0Y7SUFDRjtJQUVBLElBQUcsQ0FBQ0QsYUFBYTtRQUNmLElBQUk7WUFDRixNQUFNRSxpQkFBaUJ2RDtZQUN2QixNQUFNd0QsZ0JBQWdCOUQsUUFBUTZEO1lBQzlCLE1BQU1FLGdCQUFnQmhFLFlBQVkrRCxlQUFlO1lBQ2pELE1BQU1FLGdCQUFnQmpFLFlBQVkrRCxlQUFlO1lBRWpELElBQUdwRSxXQUFXcUUsZ0JBQWdCO2dCQUM1QkosY0FBY0k7WUFDaEIsT0FBTyxJQUFHckUsV0FBV3NFLGdCQUFnQjtnQkFDbkNMLGNBQWNLO1lBQ2hCLE9BQU87Z0JBQ0xMLGNBQWM7WUFDaEI7UUFDRixFQUFFLE9BQUs7WUFDTEEsY0FBYztRQUNoQjtJQUNGO0lBRUEsTUFBTU0sNkJBQTZCO1FBQ2pDbEUsWUFBWUssUUFBUUMsR0FBRyxJQUFJO1FBQzNCTixZQUFZSyxRQUFRQyxHQUFHLElBQUk7UUFDM0JOLFlBQVlLLFFBQVFDLEdBQUcsSUFBSTtRQUMzQk4sWUFBWUssUUFBUUMsR0FBRyxJQUFJO1FBQzNCTixZQUFZeUQsZ0JBQWdCO1FBQzVCekQsWUFBWXlELGdCQUFnQjtRQUM1QnpELFlBQVlLLFFBQVFNLEdBQUcsQ0FBQ2dELFFBQVEsSUFBSSw0QkFBNEI7UUFDaEUzRCxZQUFZSyxRQUFRTSxHQUFHLENBQUNnRCxRQUFRLElBQUksNEJBQTRCO0tBQ2pFO0lBRUQsSUFBSVEsZ0JBQWdCO0lBRXBCLEtBQUksTUFBTU4sUUFBUUssMkJBQTRCO1FBQzVDLElBQUd2RSxXQUFXa0UsT0FBTztZQUNuQk0sZ0JBQWdCTjtZQUNoQjtRQUNGO0lBQ0Y7SUFFQSxJQUFHLENBQUNNLGVBQWU7UUFDakIsTUFBTUwsaUJBQWlCdkQ7UUFDdkIsTUFBTXdELGdCQUFnQjlELFFBQVE2RDtRQUM5QixNQUFNTSxtQkFBbUJwRSxZQUFZK0QsZUFBZTtRQUVwRCxJQUFHcEUsV0FBV3lFLG1CQUFtQjtZQUMvQkQsZ0JBQWdCQztRQUNsQixPQUFPO1lBQ0xELGdCQUFnQm5FLFlBQVl5RCxnQkFBZ0I7UUFDOUM7SUFDRjtJQUVBLE9BQU87UUFBQ1U7UUFBZVA7SUFBVztBQUNwQyxFQUFFIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nlabs/lex",
3
- "version": "1.52.23",
3
+ "version": "1.53.0",
4
4
  "description": "Lex",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -81,16 +81,6 @@
81
81
  "watch": "NODE_ENV=development rm -rf lib && npx swc src --out-dir ./lib --source-maps inline --strip-leading-paths --extensions .ts,.tsx --ignore '**/*.test.ts' --ignore '**/*.spec.ts' --watch"
82
82
  },
83
83
  "dependencies": {
84
- "@babel/core": "^7.28.5",
85
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1",
86
- "@babel/plugin-transform-optional-chaining": "^7.28.5",
87
- "@babel/plugin-transform-react-jsx": "^7.27.1",
88
- "@babel/plugin-transform-runtime": "^7.28.5",
89
- "@babel/preset-env": "^7.28.5",
90
- "@babel/preset-react": "^7.28.5",
91
- "@babel/preset-typescript": "7.28.5",
92
- "@babel/runtime": "^7.28.4",
93
- "@babel/runtime-corejs3": "^7.28.4",
94
84
  "@mdx-js/loader": "^3.1.1",
95
85
  "@nlabs/webpack-plugin-static-site": "*",
96
86
  "@storybook/addon-docs": "^10.1.11",
@@ -98,20 +88,18 @@
98
88
  "@storybook/addon-postcss": "^2.0.0",
99
89
  "@storybook/addon-styling-webpack": "^3.0.0",
100
90
  "@storybook/addon-themes": "^10.1.11",
101
- "@storybook/addon-webpack5-compiler-babel": "^4.0.0",
102
91
  "@storybook/cli": "^10.1.11",
103
92
  "@storybook/react": "^10.1.11",
104
93
  "@storybook/react-webpack5": "^10.1.11",
94
+ "@swc/cli": "^0.7.9",
105
95
  "@swc/core": "^1.15.8",
96
+ "@swc/jest": "^0.2.39",
106
97
  "@tailwindcss/nesting": "^0.0.0-insiders.565cd3e",
107
98
  "@tailwindcss/postcss": "4.1.18",
108
99
  "@testing-library/jest-dom": "^6.9.1",
109
100
  "@testing-library/react": "^16.3.1",
110
101
  "assert": "^2.1.0",
111
102
  "autoprefixer": "^10.4.23",
112
- "babel-jest": "^30.2.0",
113
- "babel-loader": "^10.0.0",
114
- "babel-plugin-transform-import-meta": "^2.3.3",
115
103
  "boxen": "8.0.1",
116
104
  "buffer": "^6.0.3",
117
105
  "caniuse-lite": "1.0.30001763",
@@ -204,7 +192,6 @@
204
192
  "ws": "^8.19.0"
205
193
  },
206
194
  "devDependencies": {
207
- "@swc/cli": "^0.7.9",
208
195
  "@types/express": "^5.0.6",
209
196
  "@types/jest": "^30.0.0",
210
197
  "@types/luxon": "^3.7.1",
package/resolver.cjs CHANGED
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-require-imports */
1
2
  /**
2
3
  * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
3
4
  * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
@@ -6,93 +7,6 @@ const {existsSync} = require('fs');
6
7
  const {extname: pathExtname, resolve: pathResolve} = require('path');
7
8
  const resolveSync = require('resolve/sync');
8
9
 
9
- // Simple fallback for Jest's internal module resolution
10
- const resolveJestInternal = (moduleName) => {
11
- // For Jest's internal requests, be more permissive
12
- if (moduleName === 'index') {
13
- // Jest might be looking for an index file in the current context
14
- const possibleIndexFiles = [
15
- pathResolve(process.cwd(), 'index.js'),
16
- pathResolve(process.cwd(), 'index.ts'),
17
- pathResolve(process.cwd(), 'index.cjs'),
18
- pathResolve(__dirname, '../index.js'),
19
- pathResolve(__dirname, '../index.ts'),
20
- pathResolve(__dirname, '../index.cjs')
21
- ];
22
-
23
- for (const indexFile of possibleIndexFiles) {
24
- if (existsSync(indexFile)) {
25
- return indexFile;
26
- }
27
- }
28
- }
29
-
30
- // For other bare module names, try Node.js resolution
31
- try {
32
- return require.resolve(moduleName);
33
- } catch (e) {
34
- // If that fails, try to find it in node_modules
35
- const possiblePaths = [
36
- pathResolve(process.cwd(), 'node_modules', moduleName),
37
- pathResolve(__dirname, '../node_modules', moduleName),
38
- pathResolve(__dirname, '../../node_modules', moduleName)
39
- ];
40
-
41
- for (const possiblePath of possiblePaths) {
42
- if (existsSync(possiblePath)) {
43
- // Check for package.json to get the main entry point
44
- const packageJsonPath = pathResolve(possiblePath, 'package.json');
45
- if (existsSync(packageJsonPath)) {
46
- try {
47
- const packageJson = require(packageJsonPath);
48
- const mainFile = packageJson.main || 'index.js';
49
- const mainPath = pathResolve(possiblePath, mainFile);
50
- if (existsSync(mainPath)) {
51
- return mainPath;
52
- }
53
- } catch (e) {
54
- // Continue to next path
55
- }
56
- }
57
- // If no package.json or main file, try index.js
58
- const indexPath = pathResolve(possiblePath, 'index.js');
59
- if (existsSync(indexPath)) {
60
- return indexPath;
61
- }
62
- }
63
- }
64
- }
65
-
66
- return null;
67
- };
68
-
69
- const getFullPath = (basedir, name, extensions) => {
70
- let fileName = name;
71
-
72
- extensions.some((ext) => {
73
- if(fileName !== '..') {
74
- const fullPath = pathResolve(`${basedir}/${fileName}${ext}`);
75
-
76
- if(existsSync(fullPath)) {
77
- fileName = fullPath;
78
- return true;
79
- }
80
- }
81
-
82
- if(fileName !== 'index') {
83
- const indexFile = pathResolve(`${basedir}/${fileName}/index${ext}`);
84
-
85
- if(existsSync(indexFile)) {
86
- fileName = indexFile;
87
- return true;
88
- }
89
- }
90
-
91
- return false;
92
- });
93
-
94
- return fileName;
95
- };
96
10
 
97
11
  module.exports = (value, options) => {
98
12
  let fileName = value;
@@ -112,9 +26,9 @@ module.exports = (value, options) => {
112
26
  const isAbsolute = fileName.indexOf('/') === 0;
113
27
 
114
28
  // For Jest's internal modules and transformers, use lex node_modules
115
- if (fileName.includes('babel-jest') ||
116
- fileName.includes('ts-jest') ||
29
+ if(fileName.includes('ts-jest') ||
117
30
  fileName.includes('jest-transform-graphql') ||
31
+ fileName.includes('@swc/jest') ||
118
32
  fileName.includes('core-js') ||
119
33
  fileName.includes('regenerator-runtime') ||
120
34
  fileName.includes('jest-circus') ||
@@ -123,16 +37,18 @@ module.exports = (value, options) => {
123
37
  try {
124
38
  const result = resolveSync(fileName, {basedir: pathResolve(__dirname, '../'), extensions});
125
39
  return result;
40
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
126
41
  } catch(error) {
127
42
  return null;
128
43
  }
129
44
  }
130
45
 
131
46
  // For internal node_modules imports (like core-js internal imports), use default resolution
132
- if (basedir && basedir.includes('node_modules') && (fileName.startsWith('./') || fileName.startsWith('../'))) {
47
+ if(basedir && basedir.includes('node_modules') && (fileName.startsWith('./') || fileName.startsWith('../'))) {
133
48
  try {
134
49
  const result = resolveSync(fileName, {basedir, extensions});
135
50
  return result;
51
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
136
52
  } catch(error) {
137
53
  return null;
138
54
  }
@@ -163,14 +79,15 @@ module.exports = (value, options) => {
163
79
  try {
164
80
  const result = resolveSync(fileName, {basedir, extensions});
165
81
  return result;
82
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
166
83
  } catch(error) {
167
84
  // If resolveSync fails, try the old method
168
85
  const result = pathResolve(basedir, fileName);
169
86
 
170
87
  // Check if the result is a directory and append index.js if needed
171
- if (existsSync(result) && !existsSync(result + '.js') && !existsSync(result + '.ts') && !existsSync(result + '.cjs')) {
88
+ if(existsSync(result) && !existsSync(`${result}.js`) && !existsSync(`${result}.ts`) && !existsSync(`${result}.cjs`)) {
172
89
  const stats = require('fs').statSync(result);
173
- if (stats.isDirectory()) {
90
+ if(stats.isDirectory()) {
174
91
  const indexResult = pathResolve(result, 'index.js');
175
92
  return indexResult;
176
93
  }
@@ -189,6 +106,7 @@ module.exports = (value, options) => {
189
106
  try {
190
107
  const result = resolveSync(fileName, {basedir: pathResolve(__dirname, '../'), extensions});
191
108
  return result;
109
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
192
110
  } catch(lexError) {
193
111
  // If still not found, throw the original error
194
112
  throw projectError;
package/tsconfig.json CHANGED
@@ -35,6 +35,7 @@
35
35
  ],
36
36
  "include": [
37
37
  "./src",
38
- "./jest.setup.ts"
38
+ "./jest.setup.ts",
39
+ "./.storybook"
39
40
  ]
40
41
  }
package/babel.config.json DELETED
@@ -1,19 +0,0 @@
1
- {
2
- "presets": [
3
- [
4
- "@babel/preset-env",
5
- {
6
- "targets": {
7
- "node": "current"
8
- }
9
- }
10
- ],
11
- "@babel/preset-typescript",
12
- [
13
- "@babel/preset-react",
14
- {
15
- "runtime": "automatic"
16
- }
17
- ]
18
- ]
19
- }
@@ -1,11 +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
- */
5
- /**
6
- * Deep merge function that recursively merges objects and arrays
7
- * @param target - The target object to merge into
8
- * @param source - The source object to merge from
9
- * @returns The merged object
10
- */
11
- export declare const deepMerge: (target: any, source: any) => any;
@@ -1,40 +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
- */ /**
5
- * Deep merge function that recursively merges objects and arrays
6
- * @param target - The target object to merge into
7
- * @param source - The source object to merge from
8
- * @returns The merged object
9
- */ export const deepMerge = (target, source)=>{
10
- if (!source) {
11
- return target;
12
- }
13
- const result = {
14
- ...target
15
- };
16
- for(const key in source){
17
- if (source.hasOwnProperty(key)) {
18
- if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {
19
- result[key] = deepMerge(target[key] || {}, source[key]);
20
- } else if (Array.isArray(source[key])) {
21
- // For arrays, merge if both are arrays, otherwise replace
22
- if (Array.isArray(target[key])) {
23
- result[key] = [
24
- ...target[key],
25
- ...source[key]
26
- ];
27
- } else {
28
- result[key] = [
29
- ...source[key]
30
- ];
31
- }
32
- } else {
33
- result[key] = source[key];
34
- }
35
- }
36
- }
37
- return result;
38
- };
39
-
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kZWVwTWVyZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuLyoqXG4gKiBEZWVwIG1lcmdlIGZ1bmN0aW9uIHRoYXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG9iamVjdHMgYW5kIGFycmF5c1xuICogQHBhcmFtIHRhcmdldCAtIFRoZSB0YXJnZXQgb2JqZWN0IHRvIG1lcmdlIGludG9cbiAqIEBwYXJhbSBzb3VyY2UgLSBUaGUgc291cmNlIG9iamVjdCB0byBtZXJnZSBmcm9tXG4gKiBAcmV0dXJucyBUaGUgbWVyZ2VkIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZGVlcE1lcmdlID0gKHRhcmdldDogYW55LCBzb3VyY2U6IGFueSk6IGFueSA9PiB7XG4gIGlmKCFzb3VyY2UpIHtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gey4uLnRhcmdldH07XG5cbiAgZm9yKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcbiAgICBpZihzb3VyY2UuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgaWYoc291cmNlW2tleV0gJiYgdHlwZW9mIHNvdXJjZVtrZXldID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShzb3VyY2Vba2V5XSkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBkZWVwTWVyZ2UodGFyZ2V0W2tleV0gfHwge30sIHNvdXJjZVtrZXldKTtcbiAgICAgIH0gZWxzZSBpZihBcnJheS5pc0FycmF5KHNvdXJjZVtrZXldKSkge1xuICAgICAgICAvLyBGb3IgYXJyYXlzLCBtZXJnZSBpZiBib3RoIGFyZSBhcnJheXMsIG90aGVyd2lzZSByZXBsYWNlXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkodGFyZ2V0W2tleV0pKSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBbLi4udGFyZ2V0W2tleV0sIC4uLnNvdXJjZVtrZXldXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IFsuLi5zb3VyY2Vba2V5XV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07Il0sIm5hbWVzIjpbImRlZXBNZXJnZSIsInRhcmdldCIsInNvdXJjZSIsInJlc3VsdCIsImtleSIsImhhc093blByb3BlcnR5IiwiQXJyYXkiLCJpc0FycmF5Il0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FFRDs7Ozs7Q0FLQyxHQUNELE9BQU8sTUFBTUEsWUFBWSxDQUFDQyxRQUFhQztJQUNyQyxJQUFHLENBQUNBLFFBQVE7UUFDVixPQUFPRDtJQUNUO0lBRUEsTUFBTUUsU0FBUztRQUFDLEdBQUdGLE1BQU07SUFBQTtJQUV6QixJQUFJLE1BQU1HLE9BQU9GLE9BQVE7UUFDdkIsSUFBR0EsT0FBT0csY0FBYyxDQUFDRCxNQUFNO1lBQzdCLElBQUdGLE1BQU0sQ0FBQ0UsSUFBSSxJQUFJLE9BQU9GLE1BQU0sQ0FBQ0UsSUFBSSxLQUFLLFlBQVksQ0FBQ0UsTUFBTUMsT0FBTyxDQUFDTCxNQUFNLENBQUNFLElBQUksR0FBRztnQkFDaEZELE1BQU0sQ0FBQ0MsSUFBSSxHQUFHSixVQUFVQyxNQUFNLENBQUNHLElBQUksSUFBSSxDQUFDLEdBQUdGLE1BQU0sQ0FBQ0UsSUFBSTtZQUN4RCxPQUFPLElBQUdFLE1BQU1DLE9BQU8sQ0FBQ0wsTUFBTSxDQUFDRSxJQUFJLEdBQUc7Z0JBQ3BDLDBEQUEwRDtnQkFDMUQsSUFBR0UsTUFBTUMsT0FBTyxDQUFDTixNQUFNLENBQUNHLElBQUksR0FBRztvQkFDN0JELE1BQU0sQ0FBQ0MsSUFBSSxHQUFHOzJCQUFJSCxNQUFNLENBQUNHLElBQUk7MkJBQUtGLE1BQU0sQ0FBQ0UsSUFBSTtxQkFBQztnQkFDaEQsT0FBTztvQkFDTEQsTUFBTSxDQUFDQyxJQUFJLEdBQUc7MkJBQUlGLE1BQU0sQ0FBQ0UsSUFBSTtxQkFBQztnQkFDaEM7WUFDRixPQUFPO2dCQUNMRCxNQUFNLENBQUNDLElBQUksR0FBR0YsTUFBTSxDQUFDRSxJQUFJO1lBQzNCO1FBQ0Y7SUFDRjtJQUVBLE9BQU9EO0FBQ1QsRUFBRSJ9
@@ -1,4 +0,0 @@
1
- import { render, screen, fireEvent, waitFor, waitForElementToBeRemoved, within, getByRole, getByLabelText, getByPlaceholderText, getByText, getByTestId, getAllByRole, getAllByLabelText, getAllByPlaceholderText, getAllByText, getAllByTestId, queryByRole, queryByLabelText, queryByPlaceholderText, queryByText, queryByTestId, queryAllByRole, queryAllByLabelText, queryAllByPlaceholderText, queryAllByText, queryAllByTestId, findByRole, findByLabelText, findByPlaceholderText, findByText, findByTestId, findAllByRole, findAllByLabelText, findAllByPlaceholderText, findAllByText, findAllByTestId, renderHook, act, cleanup } from '@testing-library/react';
2
- import * as react from 'react';
3
- export { react };
4
- export { render, screen, fireEvent, waitFor, waitForElementToBeRemoved, within, getByRole, getByLabelText, getByPlaceholderText, getByText, getByTestId, getAllByRole, getAllByLabelText, getAllByPlaceholderText, getAllByText, getAllByTestId, queryByRole, queryByLabelText, queryByPlaceholderText, queryByText, queryByTestId, queryAllByRole, queryAllByLabelText, queryAllByPlaceholderText, queryAllByText, queryAllByTestId, findByRole, findByLabelText, findByPlaceholderText, findByText, findByTestId, findAllByRole, findAllByLabelText, findAllByPlaceholderText, findAllByText, findAllByTestId, renderHook, act, cleanup };
@@ -1,7 +0,0 @@
1
- import { render, screen, fireEvent, waitFor, waitForElementToBeRemoved, within, getByRole, getByLabelText, getByPlaceholderText, getByText, getByTestId, getAllByRole, getAllByLabelText, getAllByPlaceholderText, getAllByText, getAllByTestId, queryByRole, queryByLabelText, queryByPlaceholderText, queryByText, queryByTestId, queryAllByRole, queryAllByLabelText, queryAllByPlaceholderText, queryAllByText, queryAllByTestId, findByRole, findByLabelText, findByPlaceholderText, findByText, findByTestId, findAllByRole, findAllByLabelText, findAllByPlaceholderText, findAllByText, findAllByTestId, renderHook, act, cleanup } from '@testing-library/react';
2
- import * as react from 'react';
3
- export { react };
4
- // Export specific testing library functions
5
- export { render, screen, fireEvent, waitFor, waitForElementToBeRemoved, within, getByRole, getByLabelText, getByPlaceholderText, getByText, getByTestId, getAllByRole, getAllByLabelText, getAllByPlaceholderText, getAllByText, getAllByTestId, queryByRole, queryByLabelText, queryByPlaceholderText, queryByText, queryByTestId, queryAllByRole, queryAllByLabelText, queryAllByPlaceholderText, queryAllByText, queryAllByTestId, findByRole, findByLabelText, findByPlaceholderText, findByText, findByTestId, findAllByRole, findAllByLabelText, findAllByPlaceholderText, findAllByText, findAllByTestId, renderHook, act, cleanup };
6
-
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9yZWFjdFNoaW0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgcmVuZGVyLFxuICBzY3JlZW4sXG4gIGZpcmVFdmVudCxcbiAgd2FpdEZvcixcbiAgd2FpdEZvckVsZW1lbnRUb0JlUmVtb3ZlZCxcbiAgd2l0aGluLFxuICBnZXRCeVJvbGUsXG4gIGdldEJ5TGFiZWxUZXh0LFxuICBnZXRCeVBsYWNlaG9sZGVyVGV4dCxcbiAgZ2V0QnlUZXh0LFxuICBnZXRCeVRlc3RJZCxcbiAgZ2V0QWxsQnlSb2xlLFxuICBnZXRBbGxCeUxhYmVsVGV4dCxcbiAgZ2V0QWxsQnlQbGFjZWhvbGRlclRleHQsXG4gIGdldEFsbEJ5VGV4dCxcbiAgZ2V0QWxsQnlUZXN0SWQsXG4gIHF1ZXJ5QnlSb2xlLFxuICBxdWVyeUJ5TGFiZWxUZXh0LFxuICBxdWVyeUJ5UGxhY2Vob2xkZXJUZXh0LFxuICBxdWVyeUJ5VGV4dCxcbiAgcXVlcnlCeVRlc3RJZCxcbiAgcXVlcnlBbGxCeVJvbGUsXG4gIHF1ZXJ5QWxsQnlMYWJlbFRleHQsXG4gIHF1ZXJ5QWxsQnlQbGFjZWhvbGRlclRleHQsXG4gIHF1ZXJ5QWxsQnlUZXh0LFxuICBxdWVyeUFsbEJ5VGVzdElkLFxuICBmaW5kQnlSb2xlLFxuICBmaW5kQnlMYWJlbFRleHQsXG4gIGZpbmRCeVBsYWNlaG9sZGVyVGV4dCxcbiAgZmluZEJ5VGV4dCxcbiAgZmluZEJ5VGVzdElkLFxuICBmaW5kQWxsQnlSb2xlLFxuICBmaW5kQWxsQnlMYWJlbFRleHQsXG4gIGZpbmRBbGxCeVBsYWNlaG9sZGVyVGV4dCxcbiAgZmluZEFsbEJ5VGV4dCxcbiAgZmluZEFsbEJ5VGVzdElkLFxuICByZW5kZXJIb29rLFxuICBhY3QsXG4gIGNsZWFudXBcbn0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgKiBhcyByZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCB7cmVhY3R9O1xuXG4vLyBFeHBvcnQgc3BlY2lmaWMgdGVzdGluZyBsaWJyYXJ5IGZ1bmN0aW9uc1xuZXhwb3J0IHtcbiAgcmVuZGVyLFxuICBzY3JlZW4sXG4gIGZpcmVFdmVudCxcbiAgd2FpdEZvcixcbiAgd2FpdEZvckVsZW1lbnRUb0JlUmVtb3ZlZCxcbiAgd2l0aGluLFxuICBnZXRCeVJvbGUsXG4gIGdldEJ5TGFiZWxUZXh0LFxuICBnZXRCeVBsYWNlaG9sZGVyVGV4dCxcbiAgZ2V0QnlUZXh0LFxuICBnZXRCeVRlc3RJZCxcbiAgZ2V0QWxsQnlSb2xlLFxuICBnZXRBbGxCeUxhYmVsVGV4dCxcbiAgZ2V0QWxsQnlQbGFjZWhvbGRlclRleHQsXG4gIGdldEFsbEJ5VGV4dCxcbiAgZ2V0QWxsQnlUZXN0SWQsXG4gIHF1ZXJ5QnlSb2xlLFxuICBxdWVyeUJ5TGFiZWxUZXh0LFxuICBxdWVyeUJ5UGxhY2Vob2xkZXJUZXh0LFxuICBxdWVyeUJ5VGV4dCxcbiAgcXVlcnlCeVRlc3RJZCxcbiAgcXVlcnlBbGxCeVJvbGUsXG4gIHF1ZXJ5QWxsQnlMYWJlbFRleHQsXG4gIHF1ZXJ5QWxsQnlQbGFjZWhvbGRlclRleHQsXG4gIHF1ZXJ5QWxsQnlUZXh0LFxuICBxdWVyeUFsbEJ5VGVzdElkLFxuICBmaW5kQnlSb2xlLFxuICBmaW5kQnlMYWJlbFRleHQsXG4gIGZpbmRCeVBsYWNlaG9sZGVyVGV4dCxcbiAgZmluZEJ5VGV4dCxcbiAgZmluZEJ5VGVzdElkLFxuICBmaW5kQWxsQnlSb2xlLFxuICBmaW5kQWxsQnlMYWJlbFRleHQsXG4gIGZpbmRBbGxCeVBsYWNlaG9sZGVyVGV4dCxcbiAgZmluZEFsbEJ5VGV4dCxcbiAgZmluZEFsbEJ5VGVzdElkLFxuICByZW5kZXJIb29rLFxuICBhY3QsXG4gIGNsZWFudXBcbn07Il0sIm5hbWVzIjpbInJlbmRlciIsInNjcmVlbiIsImZpcmVFdmVudCIsIndhaXRGb3IiLCJ3YWl0Rm9yRWxlbWVudFRvQmVSZW1vdmVkIiwid2l0aGluIiwiZ2V0QnlSb2xlIiwiZ2V0QnlMYWJlbFRleHQiLCJnZXRCeVBsYWNlaG9sZGVyVGV4dCIsImdldEJ5VGV4dCIsImdldEJ5VGVzdElkIiwiZ2V0QWxsQnlSb2xlIiwiZ2V0QWxsQnlMYWJlbFRleHQiLCJnZXRBbGxCeVBsYWNlaG9sZGVyVGV4dCIsImdldEFsbEJ5VGV4dCIsImdldEFsbEJ5VGVzdElkIiwicXVlcnlCeVJvbGUiLCJxdWVyeUJ5TGFiZWxUZXh0IiwicXVlcnlCeVBsYWNlaG9sZGVyVGV4dCIsInF1ZXJ5QnlUZXh0IiwicXVlcnlCeVRlc3RJZCIsInF1ZXJ5QWxsQnlSb2xlIiwicXVlcnlBbGxCeUxhYmVsVGV4dCIsInF1ZXJ5QWxsQnlQbGFjZWhvbGRlclRleHQiLCJxdWVyeUFsbEJ5VGV4dCIsInF1ZXJ5QWxsQnlUZXN0SWQiLCJmaW5kQnlSb2xlIiwiZmluZEJ5TGFiZWxUZXh0IiwiZmluZEJ5UGxhY2Vob2xkZXJUZXh0IiwiZmluZEJ5VGV4dCIsImZpbmRCeVRlc3RJZCIsImZpbmRBbGxCeVJvbGUiLCJmaW5kQWxsQnlMYWJlbFRleHQiLCJmaW5kQWxsQnlQbGFjZWhvbGRlclRleHQiLCJmaW5kQWxsQnlUZXh0IiwiZmluZEFsbEJ5VGVzdElkIiwicmVuZGVySG9vayIsImFjdCIsImNsZWFudXAiLCJyZWFjdCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FDRUEsTUFBTSxFQUNOQyxNQUFNLEVBQ05DLFNBQVMsRUFDVEMsT0FBTyxFQUNQQyx5QkFBeUIsRUFDekJDLE1BQU0sRUFDTkMsU0FBUyxFQUNUQyxjQUFjLEVBQ2RDLG9CQUFvQixFQUNwQkMsU0FBUyxFQUNUQyxXQUFXLEVBQ1hDLFlBQVksRUFDWkMsaUJBQWlCLEVBQ2pCQyx1QkFBdUIsRUFDdkJDLFlBQVksRUFDWkMsY0FBYyxFQUNkQyxXQUFXLEVBQ1hDLGdCQUFnQixFQUNoQkMsc0JBQXNCLEVBQ3RCQyxXQUFXLEVBQ1hDLGFBQWEsRUFDYkMsY0FBYyxFQUNkQyxtQkFBbUIsRUFDbkJDLHlCQUF5QixFQUN6QkMsY0FBYyxFQUNkQyxnQkFBZ0IsRUFDaEJDLFVBQVUsRUFDVkMsZUFBZSxFQUNmQyxxQkFBcUIsRUFDckJDLFVBQVUsRUFDVkMsWUFBWSxFQUNaQyxhQUFhLEVBQ2JDLGtCQUFrQixFQUNsQkMsd0JBQXdCLEVBQ3hCQyxhQUFhLEVBQ2JDLGVBQWUsRUFDZkMsVUFBVSxFQUNWQyxHQUFHLEVBQ0hDLE9BQU8sUUFDRix5QkFBeUI7QUFDaEMsWUFBWUMsV0FBVyxRQUFRO0FBRS9CLFNBQVFBLEtBQUssR0FBRTtBQUVmLDRDQUE0QztBQUM1QyxTQUNFdkMsTUFBTSxFQUNOQyxNQUFNLEVBQ05DLFNBQVMsRUFDVEMsT0FBTyxFQUNQQyx5QkFBeUIsRUFDekJDLE1BQU0sRUFDTkMsU0FBUyxFQUNUQyxjQUFjLEVBQ2RDLG9CQUFvQixFQUNwQkMsU0FBUyxFQUNUQyxXQUFXLEVBQ1hDLFlBQVksRUFDWkMsaUJBQWlCLEVBQ2pCQyx1QkFBdUIsRUFDdkJDLFlBQVksRUFDWkMsY0FBYyxFQUNkQyxXQUFXLEVBQ1hDLGdCQUFnQixFQUNoQkMsc0JBQXNCLEVBQ3RCQyxXQUFXLEVBQ1hDLGFBQWEsRUFDYkMsY0FBYyxFQUNkQyxtQkFBbUIsRUFDbkJDLHlCQUF5QixFQUN6QkMsY0FBYyxFQUNkQyxnQkFBZ0IsRUFDaEJDLFVBQVUsRUFDVkMsZUFBZSxFQUNmQyxxQkFBcUIsRUFDckJDLFVBQVUsRUFDVkMsWUFBWSxFQUNaQyxhQUFhLEVBQ2JDLGtCQUFrQixFQUNsQkMsd0JBQXdCLEVBQ3hCQyxhQUFhLEVBQ2JDLGVBQWUsRUFDZkMsVUFBVSxFQUNWQyxHQUFHLEVBQ0hDLE9BQU8sR0FDUCJ9