@nlabs/lex 1.59.5 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.storybook/main.ts +3 -47
- package/README.md +13 -19
- package/__mocks__/build.js +3 -3
- package/config.json +3 -1
- package/examples/lex.config.js +3 -7
- package/lib/LexConfig.d.ts +2 -6
- package/lib/LexConfig.js +2 -2
- package/lib/commands/ai/ai.js +3 -3
- package/lib/commands/build/build.d.ts +5 -3
- package/lib/commands/build/build.js +66 -156
- package/lib/commands/config/config.js +9 -7
- package/lib/commands/dev/dev.d.ts +0 -2
- package/lib/commands/dev/dev.js +24 -115
- package/lib/commands/migrate/migrate.js +2 -2
- package/lib/commands/serverless-dev/serverless-dev.js +2 -2
- package/lib/commands/versions/versions.d.ts +1 -1
- package/lib/commands/versions/versions.js +4 -4
- package/lib/lex.js +10 -11
- package/lib/types.d.ts +1 -1
- package/lib/types.js +1 -1
- package/lib/utils/app.d.ts +0 -2
- package/lib/utils/app.js +2 -29
- package/lib/utils/{webpack/LexSvgSpritemapPlugin.d.ts → assets/LexSvgSpritemap.d.ts} +6 -8
- package/lib/utils/assets/LexSvgSpritemap.js +219 -0
- package/lib/utils/file.d.ts +0 -4
- package/lib/utils/file.js +4 -100
- package/lib/utils/staticSite.d.ts +15 -0
- package/lib/utils/staticSite.js +80 -0
- package/lib/utils/vite/assets.d.ts +19 -0
- package/lib/utils/vite/assets.js +249 -0
- package/lib/utils/vite/config.d.ts +12 -0
- package/lib/utils/vite/config.js +279 -0
- package/package.json +14 -42
- package/postcss.config.js +1 -2
- package/tsconfig.lint.json +0 -1
- package/tsconfig.test.json +0 -1
- package/lib/utils/webpack/LexSvgSpritemapPlugin.js +0 -255
- package/scripts/test-webpack.js +0 -453
- package/webpack.config.d.ts +0 -2
- package/webpack.config.js +0 -960
package/.storybook/main.ts
CHANGED
|
@@ -2,57 +2,13 @@ const config = {
|
|
|
2
2
|
addons: [
|
|
3
3
|
'@storybook/addon-docs',
|
|
4
4
|
'@storybook/addon-links',
|
|
5
|
-
{
|
|
6
|
-
name: '@storybook/addon-styling-webpack',
|
|
7
|
-
options: {
|
|
8
|
-
rules: [
|
|
9
|
-
{
|
|
10
|
-
test: /\.css$/,
|
|
11
|
-
use: [
|
|
12
|
-
'style-loader',
|
|
13
|
-
'css-loader',
|
|
14
|
-
{
|
|
15
|
-
loader: 'postcss-loader',
|
|
16
|
-
options: {
|
|
17
|
-
postcssOptions: {
|
|
18
|
-
config: 'node_modules/@nlabs/lex/postcss.config.js',
|
|
19
|
-
},
|
|
20
|
-
},
|
|
21
|
-
}
|
|
22
|
-
]
|
|
23
|
-
}
|
|
24
|
-
]
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
5
|
'@storybook/addon-themes'
|
|
28
6
|
],
|
|
29
7
|
framework: {
|
|
30
|
-
name: '@storybook/react-
|
|
31
|
-
options: {
|
|
32
|
-
builder: {
|
|
33
|
-
useSWC: true
|
|
34
|
-
},
|
|
35
|
-
}
|
|
8
|
+
name: '@storybook/react-vite',
|
|
9
|
+
options: {}
|
|
36
10
|
},
|
|
37
|
-
stories: ['../src/**/*.stories.@(js|ts|tsx)', '../src/**/*.mdx']
|
|
38
|
-
webpackFinal: async (config: any) => {
|
|
39
|
-
return {
|
|
40
|
-
...config,
|
|
41
|
-
module: {
|
|
42
|
-
...config.module,
|
|
43
|
-
rules: [
|
|
44
|
-
...(config.module?.rules || [])
|
|
45
|
-
]
|
|
46
|
-
},
|
|
47
|
-
resolve: {
|
|
48
|
-
...config.resolve,
|
|
49
|
-
extensions: ['.js', '.ts', '.tsx', '.json', '.mdx'],
|
|
50
|
-
extensionAlias: {
|
|
51
|
-
'.js': ['.ts', '.tsx', '.js']
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
}
|
|
11
|
+
stories: ['../src/**/*.stories.@(js|ts|tsx)', '../src/**/*.mdx']
|
|
56
12
|
};
|
|
57
13
|
|
|
58
14
|
export default config;
|
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
> **Zero Configuration. Maximum Productivity.**
|
|
8
8
|
|
|
9
|
-
Lex is the all-in-one development CLI that eliminates the complexity of modern React development. No more juggling
|
|
9
|
+
Lex is the all-in-one development CLI that eliminates the complexity of modern React development. No more juggling bundler configs, testing setups, or build tools. Just install Lex globally and focus on what matters most - building amazing applications.
|
|
10
10
|
|
|
11
11
|
[](https://www.npmjs.com/package/@nlabs/lex)
|
|
12
12
|
[](https://www.npmjs.com/package/@nlabs/lex)
|
|
@@ -20,7 +20,7 @@ Lex is the all-in-one development CLI that eliminates the complexity of modern R
|
|
|
20
20
|
### **Zero Configuration**
|
|
21
21
|
|
|
22
22
|
- Works out of the box with any React project
|
|
23
|
-
-
|
|
23
|
+
- Vite-powered web builds with no required bundler config
|
|
24
24
|
- No testing setup to configure
|
|
25
25
|
- No build tools to manage
|
|
26
26
|
|
|
@@ -76,7 +76,7 @@ Lex comes with everything you need for modern React development:
|
|
|
76
76
|
| **SWC** | Lightning-fast TypeScript/JavaScript compiler | Latest |
|
|
77
77
|
| **Vitest** | Testing framework | Latest |
|
|
78
78
|
| **TypeScript** | Type safety | Latest |
|
|
79
|
-
| **
|
|
79
|
+
| **Vite** | Web development and production bundling | Latest |
|
|
80
80
|
| **Storybook** | Component development | Latest |
|
|
81
81
|
| **PostCSS** | CSS processing | Latest |
|
|
82
82
|
| **ESLint** | Code linting | Latest |
|
|
@@ -130,7 +130,7 @@ Lex comes with everything you need for modern React development:
|
|
|
130
130
|
|---------|-------------|---------------|
|
|
131
131
|
| [`lex clean`](#clean) | Clean project files | `lex clean` |
|
|
132
132
|
| [`lex copy`](#copy) | Copy files/directories | `lex copy src lib` |
|
|
133
|
-
| [`lex config`](#config) | Show configurations | `lex config
|
|
133
|
+
| [`lex config`](#config) | Show configurations | `lex config vite` |
|
|
134
134
|
| [`lex versions`](#versions) | Show tool versions | `lex versions` |
|
|
135
135
|
| [`lex link`](#link) | Check linked modules | `lex link` |
|
|
136
136
|
|
|
@@ -145,9 +145,6 @@ lex dev --open
|
|
|
145
145
|
# With bundle analyzer
|
|
146
146
|
lex dev --bundleAnalyzer
|
|
147
147
|
|
|
148
|
-
# Custom webpack config
|
|
149
|
-
lex dev --config ./custom.webpack.js
|
|
150
|
-
|
|
151
148
|
# Force refresh cached public IP
|
|
152
149
|
lex dev --usePublicIp
|
|
153
150
|
```
|
|
@@ -166,9 +163,9 @@ export default {
|
|
|
166
163
|
|
|
167
164
|
**Public IP Caching**: Lex automatically caches your public IP address for 1 week to reduce API calls. Use `--usePublicIp` to force refresh the cache when needed.
|
|
168
165
|
|
|
169
|
-
**Static Assets**: If your HTML template references static assets
|
|
166
|
+
**Static Assets**: If your HTML template references static assets with absolute paths, ensure they exist in the configured static directory.
|
|
170
167
|
|
|
171
|
-
|
|
168
|
+
Use `vite.staticPath` to specify the directory. Lex copies these files and optimizes supported images during production builds.
|
|
172
169
|
|
|
173
170
|
### **Serverless Development Server** {#serverless-dev}
|
|
174
171
|
|
|
@@ -345,7 +342,7 @@ Lex provides extensive configuration options through the `lex.config.js` file. H
|
|
|
345
342
|
| `entryJs` | `string` | `'index.js'` | Main JavaScript entry file | `entryJs: 'main.tsx'` |
|
|
346
343
|
| `dev.port` | `number` | `3000` | Default port used by `lex dev` when `--port` is not passed | `dev: { port: 4200 }` |
|
|
347
344
|
| `outputFile` | `string` | `undefined` | Specific output filename | `outputFile: 'bundle.js'` |
|
|
348
|
-
| `outputFullPath` | `string` | `path.resolve('./lib')` | Absolute output path for build artifacts
|
|
345
|
+
| `outputFullPath` | `string` | `path.resolve('./lib')` | Absolute output path for build artifacts and static files. | `outputFullPath: '/absolute/build'` |
|
|
349
346
|
| `outputHash` | `boolean` | `false` | Add hash to output filenames | `outputHash: true` |
|
|
350
347
|
| `outputPath` | `string` | `'./lib'` | Output directory path | `outputPath: './build'` |
|
|
351
348
|
| `packageManager` | `'npm' \| 'yarn'` | `'npm'` | Package manager to use | `packageManager: 'yarn'` |
|
|
@@ -458,15 +455,12 @@ You can also specify ESLint rules in your `lex.config.js` file, but this is less
|
|
|
458
455
|
|
|
459
456
|
**Note:** Creating an `eslint.config.mjs` file gives you full control and is the recommended approach. The `lex.config.*` approach is provided for simple rule overrides only.
|
|
460
457
|
|
|
461
|
-
### **
|
|
458
|
+
### **Vite Configuration**
|
|
462
459
|
|
|
463
460
|
| Option | Type | Default | Description | Example |
|
|
464
461
|
|--------|------|---------|-------------|---------|
|
|
465
|
-
| `
|
|
466
|
-
| `
|
|
467
|
-
| `webpack.output` | `object` | `undefined` | Webpack output configuration | `webpack: { output: { filename: 'bundle.js' } }` |
|
|
468
|
-
| `webpack.plugins` | `unknown[]` | `undefined` | Webpack plugins | `webpack: { plugins: [new MyPlugin()] }` |
|
|
469
|
-
| `webpack.staticPath` | `string` | `'./src/static'` | Path to static assets directory. Files in this directory will be copied to the output and optimized (images/videos compressed, audio optimized) | `webpack: { staticPath: './assets' }` |
|
|
462
|
+
| `vite.staticPath` | `string` | `'./src/static'` | Static assets copied to the output root | `vite: { staticPath: './assets' }` |
|
|
463
|
+
| `vite.*` | `Vite UserConfig` | `undefined` | Additional Vite configuration merged with Lex defaults | `vite: { base: '/app/' }` |
|
|
470
464
|
|
|
471
465
|
### **Library Configuration**
|
|
472
466
|
|
|
@@ -587,7 +581,7 @@ export default {
|
|
|
587
581
|
|
|
588
582
|
#### 404 Error with "Static Paths" Message
|
|
589
583
|
|
|
590
|
-
If
|
|
584
|
+
If static assets return 404, verify that `vite.staticPath` exists and points to the intended directory.
|
|
591
585
|
|
|
592
586
|
**Solution**: The `outputFullPath` directory should exist before starting the dev server. You can:
|
|
593
587
|
|
|
@@ -627,7 +621,7 @@ If TypeScript compilation fails, ensure your `tsconfig.json` is properly configu
|
|
|
627
621
|
|
|
628
622
|
#### Missing Static Assets Error
|
|
629
623
|
|
|
630
|
-
If you see
|
|
624
|
+
If you see build errors about missing static assets, check that every path referenced by the HTML template exists.
|
|
631
625
|
|
|
632
626
|
**Solution**: Either create the missing files or update your HTML template to use relative paths:
|
|
633
627
|
|
|
@@ -692,7 +686,7 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
|
|
|
692
686
|
- **SWC** - For lightning-fast TypeScript/JavaScript compilation
|
|
693
687
|
- **Vitest** - For comprehensive testing
|
|
694
688
|
- **TypeScript** - For type safety
|
|
695
|
-
- **
|
|
689
|
+
- **Vite** - For fast web development and production bundling
|
|
696
690
|
- **Storybook** - For component development
|
|
697
691
|
- **OpenAI/Anthropic** - For AI-powered features
|
|
698
692
|
|
package/__mocks__/build.js
CHANGED
|
@@ -7,10 +7,10 @@ const mockSpinner = {
|
|
|
7
7
|
|
|
8
8
|
const build = vi.fn().mockResolvedValue(0);
|
|
9
9
|
const buildWithEsBuild = vi.fn().mockResolvedValue(0);
|
|
10
|
-
const
|
|
10
|
+
const buildWithVite = vi.fn().mockResolvedValue(0);
|
|
11
11
|
|
|
12
12
|
module.exports = {
|
|
13
13
|
build,
|
|
14
14
|
buildWithEsBuild,
|
|
15
|
-
|
|
16
|
-
};
|
|
15
|
+
buildWithVite
|
|
16
|
+
};
|
package/config.json
CHANGED
package/examples/lex.config.js
CHANGED
|
@@ -36,14 +36,10 @@ export default {
|
|
|
36
36
|
temperature: 0.1
|
|
37
37
|
},
|
|
38
38
|
|
|
39
|
-
//
|
|
40
|
-
|
|
39
|
+
// Vite configuration
|
|
40
|
+
vite: {
|
|
41
41
|
// Path to static assets directory (defaults to './src/static')
|
|
42
|
-
staticPath: './src/static'
|
|
43
|
-
|
|
44
|
-
// Other webpack configuration options
|
|
45
|
-
devtool: 'source-map',
|
|
46
|
-
plugins: []
|
|
42
|
+
staticPath: './src/static'
|
|
47
43
|
},
|
|
48
44
|
|
|
49
45
|
// SWC configuration (replaces esbuild)
|
package/lib/LexConfig.d.ts
CHANGED
|
@@ -3,12 +3,8 @@ import type { Linter } from 'eslint';
|
|
|
3
3
|
export interface VitestConfig {
|
|
4
4
|
[key: string]: unknown;
|
|
5
5
|
}
|
|
6
|
-
export interface
|
|
6
|
+
export interface ViteConfig {
|
|
7
7
|
[key: string]: unknown;
|
|
8
|
-
entry?: string | string[];
|
|
9
|
-
output?: Record<string, unknown>;
|
|
10
|
-
module?: Record<string, unknown>;
|
|
11
|
-
plugins?: unknown[];
|
|
12
8
|
staticPath?: string;
|
|
13
9
|
}
|
|
14
10
|
export interface AIConfig {
|
|
@@ -52,7 +48,7 @@ export interface LexConfigType {
|
|
|
52
48
|
targetEnvironment?: 'node' | 'web';
|
|
53
49
|
useGraphQl?: boolean;
|
|
54
50
|
useTypescript?: boolean;
|
|
55
|
-
|
|
51
|
+
vite?: ViteConfig;
|
|
56
52
|
}
|
|
57
53
|
export type Config = LexConfigType;
|
|
58
54
|
export type ReactCompilerConfig = boolean | Record<string, unknown>;
|
package/lib/LexConfig.js
CHANGED
|
@@ -80,7 +80,7 @@ export const defaultConfigValues = {
|
|
|
80
80
|
useGraphQl: false,
|
|
81
81
|
useTypescript: false,
|
|
82
82
|
vitest: {},
|
|
83
|
-
|
|
83
|
+
vite: {
|
|
84
84
|
staticPath: './src/static'
|
|
85
85
|
}
|
|
86
86
|
};
|
|
@@ -460,4 +460,4 @@ _define_property(LexConfig, "config", {
|
|
|
460
460
|
...defaultConfigValues
|
|
461
461
|
});
|
|
462
462
|
|
|
463
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9MZXhDb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBmaW5kRmlsZVVwIGZyb20gJ2ZpbmQtZmlsZS11cCc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSBhcyBwYXRoRXh0bmFtZSxcbiAgcmVsYXRpdmUgYXMgcGF0aFJlbGF0aXZlLFxuICByZXNvbHZlIGFzIHBhdGhSZXNvbHZlXG59IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtVUkx9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7Z2V0TGV4UGFja2FnZUpzb25QYXRoLCByZWxhdGl2ZUZpbGVQYXRofSBmcm9tICcuL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4vdXRpbHMvbG9nLmpzJztcblxuaW1wb3J0IHR5cGUge09wdGlvbnN9IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQgdHlwZSB7TGludGVyfSBmcm9tICdlc2xpbnQnO1xuXG5jb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG5cblxuZXhwb3J0IGludGVyZmFjZSBWaXRlc3RDb25maWcge1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdlYnBhY2tDb25maWcge1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICBlbnRyeT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBvdXRwdXQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbW9kdWxlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHBsdWdpbnM/OiB1bmtub3duW107XG4gIHN0YXRpY1BhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlDb25maWcge1xuICBwcm92aWRlcj86ICdjdXJzb3InIHwgJ2NvcGlsb3QnIHwgJ29wZW5haScgfCAnYW50aHJvcGljJyB8ICdub25lJztcbiAgYXBpS2V5Pzogc3RyaW5nO1xuICBtb2RlbD86IHN0cmluZztcbiAgbWF4VG9rZW5zPzogbnVtYmVyO1xuICB0ZW1wZXJhdHVyZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXZDb25maWcge1xuICBwb3J0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVTTGludENvbmZpZyB7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gIGV4dGVuZHM/OiBzdHJpbmdbXTtcbiAgcnVsZXM/OiBMaW50ZXIuUnVsZXNSZWNvcmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGV4Q29uZmlnVHlwZSB7XG4gIGFpPzogQUlDb25maWc7XG4gIGNvbmZpZ0ZpbGVzPzogc3RyaW5nW107XG4gIGNvcHlGaWxlcz86IHN0cmluZ1tdO1xuICBkZXY/OiBEZXZDb25maWc7XG4gIGVudHJ5SFRNTD86IHN0cmluZztcbiAgZW50cnlKcz86IHN0cmluZztcbiAgZW52Pzogb2JqZWN0IHwgbnVsbDtcbiAgZXNsaW50PzogRVNMaW50Q29uZmlnO1xuICBnaXRVcmw/OiBzdHJpbmc7XG4gIHZpdGVzdD86IFZpdGVzdENvbmZpZztcbiAgbGlicmFyeU5hbWU/OiBzdHJpbmc7XG4gIGxpYnJhcnlUYXJnZXQ/OiBzdHJpbmc7XG4gIG91dHB1dEZpbGU/OiBzdHJpbmc7XG4gIG91dHB1dEZ1bGxQYXRoPzogc3RyaW5nO1xuICBvdXRwdXRIYXNoPzogYm9vbGVhbjtcbiAgb3V0cHV0UGF0aD86IHN0cmluZztcbiAgcGFja2FnZU1hbmFnZXI/OiAnbnBtJyB8ICd5YXJuJztcbiAgcHJlc2V0PzogJ3dlYicgfCAnbm9kZScgfCAnbGFtYmRhJyB8ICdtb2JpbGUnO1xuICByZWFjdENvbXBpbGVyPzogUmVhY3RDb21waWxlckNvbmZpZztcbiAgc291cmNlRnVsbFBhdGg/OiBzdHJpbmc7XG4gIHNvdXJjZVBhdGg/OiBzdHJpbmc7XG4gIHN3Yz86IFNXQ09wdGlvbnM7XG4gIHRhcmdldEVudmlyb25tZW50PzogJ25vZGUnIHwgJ3dlYic7XG4gIHVzZUdyYXBoUWw/OiBib29sZWFuO1xuICB1c2VUeXBlc2NyaXB0PzogYm9vbGVhbjtcbiAgd2VicGFjaz86IFdlYnBhY2tDb25maWc7XG59XG5cbmV4cG9ydCB0eXBlIENvbmZpZyA9IExleENvbmZpZ1R5cGU7XG5cbmV4cG9ydCB0eXBlIFJlYWN0Q29tcGlsZXJDb25maWcgPSBib29sZWFuIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCBjb25zdCByZWFjdENvbXBpbGVyUGx1Z2luTmFtZSA9ICdAc3djL3JlYWN0LWNvbXBpbGVyJztcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZWFjdENvbXBpbGVyT3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gIGNvbXBpbGF0aW9uTW9kZTogJ2luZmVyJyxcbiAgcGFuaWNUaHJlc2hvbGQ6ICdub25lJyxcbiAgdGFyZ2V0OiAnMTknXG59O1xuXG5jb25zdCBpc1JlYWN0Q29tcGlsZXJQbHVnaW4gPSAocGx1Z2luOiB1bmtub3duKTogYm9vbGVhbiA9PiAoXG4gIEFycmF5LmlzQXJyYXkocGx1Z2luKSAmJiBwbHVnaW5bMF0gPT09IHJlYWN0Q29tcGlsZXJQbHVnaW5OYW1lXG4pO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdENvbmZpZ1ZhbHVlczogTGV4Q29uZmlnVHlwZSA9IHtcbiAgYWk6IHtcbiAgICBtYXhUb2tlbnM6IDQwMDAsXG4gICAgbW9kZWw6ICdncHQtNG8nLFxuICAgIHByb3ZpZGVyOiAnbm9uZScsXG4gICAgdGVtcGVyYXR1cmU6IDAuMVxuICB9LFxuICBjb25maWdGaWxlczogW10sXG4gIGNvcHlGaWxlczogW10sXG4gIGVudHJ5SFRNTDogJ2luZGV4Lmh0bWwnLFxuICBlbnRyeUpzOiAnaW5kZXguanMnLFxuICBlbnY6IG51bGwsXG4gIGVzbGludDoge30sXG4gIG91dHB1dEZ1bGxQYXRoOiBwYXRoUmVzb2x2ZShjd2QsICcuL2xpYicpLFxuICBvdXRwdXRIYXNoOiBmYWxzZSxcbiAgb3V0cHV0UGF0aDogJy4vbGliJyxcbiAgcGFja2FnZU1hbmFnZXI6ICducG0nLFxuICBwcmVzZXQ6ICd3ZWInLFxuICBzb3VyY2VGdWxsUGF0aDogcGF0aFJlc29sdmUoY3dkLCAnLi9zcmMnKSxcbiAgc291cmNlUGF0aDogJy4vc3JjJyxcbiAgc3djOiB7XG4gICAgaW5saW5lU291cmNlc0NvbnRlbnQ6IHRydWUsXG4gICAgaXNNb2R1bGU6IHRydWUsXG4gICAganNjOiB7XG4gICAgICBleHRlcm5hbEhlbHBlcnM6IGZhbHNlLFxuICAgICAga2VlcENsYXNzTmFtZXM6IGZhbHNlLFxuICAgICAgbG9vc2U6IGZhbHNlLFxuICAgICAgcGFyc2VyOiB7XG4gICAgICAgIGRlY29yYXRvcnM6IHRydWUsXG4gICAgICAgIGR5bmFtaWNJbXBvcnQ6IHRydWUsXG4gICAgICAgIHN5bnRheDogJ3R5cGVzY3JpcHQnLFxuICAgICAgICB0c3g6IHRydWVcbiAgICAgIH0sXG4gICAgICB0YXJnZXQ6ICdlczIwMjMnLFxuICAgICAgdHJhbnNmb3JtOiB7XG4gICAgICAgIHJlYWN0OiB7XG4gICAgICAgICAgcnVudGltZTogJ2F1dG9tYXRpYydcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbWluaWZ5OiBmYWxzZSxcbiAgICBtb2R1bGU6IHtcbiAgICAgIGxhenk6IGZhbHNlLFxuICAgICAgbm9JbnRlcm9wOiBmYWxzZSxcbiAgICAgIHN0cmljdDogZmFsc2UsXG4gICAgICBzdHJpY3RNb2RlOiB0cnVlLFxuICAgICAgdHlwZTogJ2VzNidcbiAgICB9LFxuICAgIHNvdXJjZU1hcHM6ICdpbmxpbmUnXG4gIH0sXG4gIHRhcmdldEVudmlyb25tZW50OiAnd2ViJyxcbiAgdXNlR3JhcGhRbDogZmFsc2UsXG4gIHVzZVR5cGVzY3JpcHQ6IGZhbHNlLFxuICB2aXRlc3Q6IHt9LFxuICB3ZWJwYWNrOiB7XG4gICAgc3RhdGljUGF0aDogJy4vc3JjL3N0YXRpYydcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFBhY2thZ2VEaXIgPSAoKTogc3RyaW5nID0+IHtcbiAgY29uc3QgY3dkID0gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgY3VycmVudFBrZ1BhdGggPSBwYXRoUmVzb2x2ZShjd2QsICdwYWNrYWdlLmpzb24nKTtcblxuICBpZihleGlzdHNTeW5jKGN1cnJlbnRQa2dQYXRoKSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhjdXJyZW50UGtnUGF0aCwgJ3V0ZjgnKSk7XG4gICAgICBpZighcGtnLndvcmtzcGFjZXMpIHtcbiAgICAgICAgcmV0dXJuIGN3ZDtcbiAgICAgIH1cbiAgICB9IGNhdGNoe1xuICAgICAgcmV0dXJuIGN3ZDtcbiAgICB9XG4gIH1cblxuICBsZXQgc2VhcmNoRGlyID0gY3dkO1xuXG4gIGZvcihsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgY29uc3QgcGtnUGF0aCA9IHBhdGhSZXNvbHZlKHNlYXJjaERpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocGtnUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBrZ1BhdGgsICd1dGY4JykpO1xuXG4gICAgICAgIGlmKCFwa2cud29ya3NwYWNlcykge1xuICAgICAgICAgIHJldHVybiBzZWFyY2hEaXI7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2h7XG4gICAgICAgIC8vIENvbnRpbnVlIHNlYXJjaGluZ1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudCA9IGRpcm5hbWUoc2VhcmNoRGlyKTtcblxuICAgIGlmKHBhcmVudCA9PT0gc2VhcmNoRGlyKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2VhcmNoRGlyID0gcGFyZW50O1xuICB9XG5cbiAgY29uc3QgY29uZmlnRm9ybWF0cyA9IFsnanMnLCAnbWpzJywgJ2NqcycsICd0cycsICdqc29uJ107XG5cbiAgZm9yKGNvbnN0IGZvcm1hdCBvZiBjb25maWdGb3JtYXRzKSB7XG4gICAgY29uc3QgY29uZmlnUGF0aCA9IGZpbmRGaWxlVXAuc3luYyhgbGV4LmNvbmZpZy4ke2Zvcm1hdH1gLCBjd2QsIDUpO1xuXG4gICAgaWYoY29uZmlnUGF0aCkge1xuICAgICAgcmV0dXJuIGRpcm5hbWUoY29uZmlnUGF0aCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGN3ZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUeXBlU2NyaXB0Q29uZmlnUGF0aCA9IChjb25maWdOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBwYWNrYWdlRGlyID0gZ2V0UGFja2FnZURpcigpO1xuICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gIGlmKGNvbmZpZ05hbWUgPT09ICd0c2NvbmZpZy5idWlsZC5qc29uJykge1xuICAgIGNvbnN0IHByb2plY3RCdWlsZENvbmZpZyA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsICd0c2NvbmZpZy5idWlsZC5qc29uJyk7XG5cbiAgICBpZihleGlzdHNTeW5jKHByb2plY3RCdWlsZENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0QnVpbGRDb25maWc7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdEJ1aWxkQ29uZmlnID0gcGF0aFJlc29sdmUoY3dkLCAndHNjb25maWcuYnVpbGQuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocm9vdEJ1aWxkQ29uZmlnKSkge1xuICAgICAgcmV0dXJuIHJvb3RCdWlsZENvbmZpZztcbiAgICB9XG4gIH1cblxuICBpZihjb25maWdOYW1lID09PSAndHNjb25maWcubGludC5qc29uJykge1xuICAgIGNvbnN0IHByb2plY3RMaW50Q29uZmlnID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgJ3RzY29uZmlnLmVzbGludC5qc29uJyk7XG4gICAgaWYoZXhpc3RzU3luYyhwcm9qZWN0TGludENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0TGludENvbmZpZztcbiAgICB9XG5cbiAgICBjb25zdCByb290TGludENvbmZpZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ3RzY29uZmlnLmVzbGludC5qc29uJyk7XG5cbiAgICBpZihleGlzdHNTeW5jKHJvb3RMaW50Q29uZmlnKSkge1xuICAgICAgcmV0dXJuIHJvb3RMaW50Q29uZmlnO1xuICAgIH1cbiAgfVxuXG4gIGlmKGNvbmZpZ05hbWUgPT09ICd0c2NvbmZpZy50ZXN0Lmpzb24nKSB7XG4gICAgY29uc3QgcHJvamVjdFRlc3RDb25maWcgPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCAndHNjb25maWcudGVzdC5qc29uJyk7XG4gICAgaWYoZXhpc3RzU3luYyhwcm9qZWN0VGVzdENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0VGVzdENvbmZpZztcbiAgICB9XG5cbiAgICBjb25zdCByb290VGVzdENvbmZpZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ3RzY29uZmlnLnRlc3QuanNvbicpO1xuXG4gICAgaWYoZXhpc3RzU3luYyhyb290VGVzdENvbmZpZykpIHtcbiAgICAgIHJldHVybiByb290VGVzdENvbmZpZztcbiAgICB9XG4gIH1cblxuICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsIGNvbmZpZ05hbWUpO1xuXG4gIGlmKGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGgpKSB7XG4gICAgcmV0dXJuIHByb2plY3RDb25maWdQYXRoO1xuICB9XG5cbiAgY29uc3Qgcm9vdENvbmZpZ1BhdGggPSBwYXRoUmVzb2x2ZShjd2QsIGNvbmZpZ05hbWUpO1xuXG4gIGlmKGV4aXN0c1N5bmMocm9vdENvbmZpZ1BhdGgpKSB7XG4gICAgcmV0dXJuIHJvb3RDb25maWdQYXRoO1xuICB9XG5cbiAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuXG4gIHJldHVybiBwYXRoUmVzb2x2ZShsZXhEaXIsIGNvbmZpZ05hbWUpO1xufTtcblxuZXhwb3J0IGNsYXNzIExleENvbmZpZyB7XG4gIHN0YXRpYyBjb25maWc6IExleENvbmZpZ1R5cGUgPSB7XG4gICAgLi4uZGVmYXVsdENvbmZpZ1ZhbHVlc1xuICB9O1xuXG4gIHN0YXRpYyBzZXQgdXNlVHlwZXNjcmlwdCh2YWx1ZTogYm9vbGVhbikge1xuICAgIExleENvbmZpZy5jb25maWcudXNlVHlwZXNjcmlwdCA9IHZhbHVlO1xuICAgIGNvbnN0IHtlbnRyeUpzLCBzb3VyY2VGdWxsUGF0aCwgdGFyZ2V0RW52aXJvbm1lbnR9ID0gTGV4Q29uZmlnLmNvbmZpZztcblxuICAgIGlmKGVudHJ5SnMgPT09ICdpbmRleC5qcycgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGluZGV4UGF0aDogc3RyaW5nID0gcGF0aFJlc29sdmUoY3dkLCBzb3VyY2VGdWxsUGF0aCB8fCBjd2QsICdpbmRleC50c3gnKTtcbiAgICAgIGNvbnN0IGhhc0luZGV4VHN4OiBib29sZWFuID0gZXhpc3RzU3luYyhpbmRleFBhdGgpO1xuXG4gICAgICBpZihoYXNJbmRleFRzeCkge1xuICAgICAgICBMZXhDb25maWcuY29uZmlnLmVudHJ5SnMgPSAnaW5kZXgudHN4JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIExleENvbmZpZy5jb25maWcuZW50cnlKcyA9ICdpbmRleC50cyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgTGV4Q29uZmlnLmNvbmZpZy5zd2MgPSBMZXhDb25maWcuY29uZmlnLnN3YyB8fCB7Li4uZGVmYXVsdENvbmZpZ1ZhbHVlcy5zd2MhfTtcbiAgICBMZXhDb25maWcuY29uZmlnLnN3Yy5qc2MgPSBMZXhDb25maWcuY29uZmlnLnN3Yy5qc2MgfHwgey4uLmRlZmF1bHRDb25maWdWYWx1ZXMuc3djIS5qc2MhfTtcbiAgICBMZXhDb25maWcuY29uZmlnLnN3Yy5qc2MucGFyc2VyID0ge1xuICAgICAgc3ludGF4OiAndHlwZXNjcmlwdCcsXG4gICAgICB0c3g6IHRydWVcbiAgICB9O1xuXG4gICAgaWYodGFyZ2V0RW52aXJvbm1lbnQgPT09ICd3ZWInKSB7XG4gICAgICBMZXhDb25maWcuY29uZmlnLnN3Yy5qc2MudHJhbnNmb3JtID0ge1xuICAgICAgICByZWFjdDoge1xuICAgICAgICAgIHJ1bnRpbWU6ICdhdXRvbWF0aWMnXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldExleERpcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBkaXJuYW1lKGdldExleFBhY2thZ2VKc29uUGF0aCgpKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTV0NDb25maWdXaXRoUmVhY3RDb21waWxlcihcbiAgICBzd2NDb25maWc6IFNXQ09wdGlvbnMgfCB1bmRlZmluZWQgPSBMZXhDb25maWcuY29uZmlnLnN3YyxcbiAgICByZWFjdENvbXBpbGVyOiBSZWFjdENvbXBpbGVyQ29uZmlnIHwgdW5kZWZpbmVkID0gTGV4Q29uZmlnLmNvbmZpZy5yZWFjdENvbXBpbGVyXG4gICk6IFNXQ09wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgIGlmKHJlYWN0Q29tcGlsZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHN3Y0NvbmZpZztcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50U3djQ29uZmlnID0gc3djQ29uZmlnIHx8IGRlZmF1bHRDb25maWdWYWx1ZXMuc3djO1xuICAgIGNvbnN0IGN1cnJlbnRKc2M6IFJlY29yZDxzdHJpbmcsIGFueT4gPSBjdXJyZW50U3djQ29uZmlnPy5qc2MgfHwge307XG4gICAgY29uc3QgY3VycmVudEV4cGVyaW1lbnRhbCA9IGN1cnJlbnRKc2MuZXhwZXJpbWVudGFsIHx8IHt9O1xuICAgIGNvbnN0IHBsdWdpbnMgPSBBcnJheS5pc0FycmF5KGN1cnJlbnRFeHBlcmltZW50YWwucGx1Z2lucylcbiAgICAgID8gY3VycmVudEV4cGVyaW1lbnRhbC5wbHVnaW5zLmZpbHRlcigocGx1Z2luOiB1bmtub3duKSA9PiAhaXNSZWFjdENvbXBpbGVyUGx1Z2luKHBsdWdpbikpXG4gICAgICA6IFtdO1xuXG4gICAgY29uc3QgZXhwZXJpbWVudGFsID0gcmVhY3RDb21waWxlciA9PT0gZmFsc2VcbiAgICAgID8ge1xuICAgICAgICAuLi5jdXJyZW50RXhwZXJpbWVudGFsLFxuICAgICAgICBwbHVnaW5zXG4gICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgLi4uY3VycmVudEV4cGVyaW1lbnRhbCxcbiAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgIC4uLnBsdWdpbnMsXG4gICAgICAgICAgW1xuICAgICAgICAgICAgcmVhY3RDb21waWxlclBsdWdpbk5hbWUsXG4gICAgICAgICAgICB0eXBlb2YgcmVhY3RDb21waWxlciA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4uZGVmYXVsdFJlYWN0Q29tcGlsZXJPcHRpb25zLFxuICAgICAgICAgICAgICAgIC4uLnJlYWN0Q29tcGlsZXJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IGRlZmF1bHRSZWFjdENvbXBpbGVyT3B0aW9uc1xuICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgICAgfTtcbiAgICBjb25zdCBzd2NDb25maWdXaXRoUmVhY3RDb21waWxlcjogU1dDT3B0aW9ucyA9IHtcbiAgICAgIC4uLmN1cnJlbnRTd2NDb25maWcsXG4gICAgICBqc2M6IHtcbiAgICAgICAgLi4uY3VycmVudEpzYyxcbiAgICAgICAgZXhwZXJpbWVudGFsXG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBzd2NDb25maWdXaXRoUmVhY3RDb21waWxlcjtcbiAgfVxuXG4gIHN0YXRpYyB1cGRhdGVDb25maWcodXBkYXRlZENvbmZpZzogTGV4Q29uZmlnVHlwZSk6IExleENvbmZpZ1R5cGUge1xuICAgIGNvbnN0IHtvdXRwdXRGdWxsUGF0aCwgb3V0cHV0UGF0aCwgc291cmNlUGF0aCwgc291cmNlRnVsbFBhdGgsIHVzZVR5cGVzY3JpcHQsIGFpfSA9IHVwZGF0ZWRDb25maWc7XG4gICAgY29uc3QgcGFja2FnZURpciA9IGdldFBhY2thZ2VEaXIoKTtcblxuICAgIGlmKHVzZVR5cGVzY3JpcHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgTGV4Q29uZmlnLnVzZVR5cGVzY3JpcHQgPSB1c2VUeXBlc2NyaXB0O1xuICAgIH1cblxuICAgIGlmKG91dHB1dFBhdGggIT09IHVuZGVmaW5lZCAmJiBvdXRwdXRGdWxsUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1cGRhdGVkQ29uZmlnLm91dHB1dEZ1bGxQYXRoID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgb3V0cHV0UGF0aCk7XG4gICAgfVxuXG4gICAgaWYoc291cmNlUGF0aCAhPT0gdW5kZWZpbmVkICYmIHNvdXJjZUZ1bGxQYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHVwZGF0ZWRDb25maWcuc291cmNlRnVsbFBhdGggPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCBzb3VyY2VQYXRoKTtcbiAgICB9XG5cbiAgICBpZihhaSkge1xuICAgICAgTGV4Q29uZmlnLmNvbmZpZy5haSA9IHsuLi5MZXhDb25maWcuY29uZmlnLmFpLCAuLi5haX07XG5cbiAgICAgIGlmKHByb2Nlc3MuZW52LkNVUlNPUl9JREUgPT09ICd0cnVlJyAmJiBMZXhDb25maWcuY29uZmlnLmFpLnByb3ZpZGVyID09PSAnbm9uZScpIHtcbiAgICAgICAgTGV4Q29uZmlnLmNvbmZpZy5haS5wcm92aWRlciA9ICdjdXJzb3InO1xuICAgICAgfVxuICAgIH1cblxuICAgIExleENvbmZpZy5jb25maWcgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZywgLi4udXBkYXRlZENvbmZpZ307XG4gICAgTGV4Q29uZmlnLmNvbmZpZy5zd2MgPSBMZXhDb25maWcuZ2V0U1dDQ29uZmlnV2l0aFJlYWN0Q29tcGlsZXIoKTtcblxuICAgIHJldHVybiBMZXhDb25maWcuY29uZmlnO1xuICB9XG5cbiAgc3RhdGljIGFkZENvbmZpZ1BhcmFtcyhjbWQ6IFJlY29yZDxzdHJpbmcsIGFueT4sIHBhcmFtczogTGV4Q29uZmlnVHlwZSkge1xuICAgIGNvbnN0IG5hbWVQcm9wZXJ0eTogc3RyaW5nID0gJ19uYW1lJztcbiAgICBjb25zdCB7ZW52aXJvbm1lbnQsIG91dHB1dFBhdGgsIHNvdXJjZVBhdGgsIHR5cGVzY3JpcHR9ID0gY21kO1xuICAgIGNvbnN0IHBhY2thZ2VEaXIgPSBnZXRQYWNrYWdlRGlyKCk7XG5cbiAgICBpZihvdXRwdXRQYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy5vdXRwdXRQYXRoID0gb3V0cHV0UGF0aDtcbiAgICAgIHBhcmFtcy5vdXRwdXRGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsIG91dHB1dFBhdGgpO1xuICAgIH0gZWxzZSBpZihwYXJhbXMub3V0cHV0UGF0aCAmJiAhcGFyYW1zLm91dHB1dEZ1bGxQYXRoKSB7XG4gICAgICBwYXJhbXMub3V0cHV0RnVsbFBhdGggPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCBwYXJhbXMub3V0cHV0UGF0aCk7XG4gICAgfVxuXG4gICAgaWYoc291cmNlUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMuc291cmNlUGF0aCA9IHNvdXJjZVBhdGg7XG4gICAgICBwYXJhbXMuc291cmNlRnVsbFBhdGggPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCBzb3VyY2VQYXRoKTtcbiAgICB9IGVsc2UgaWYocGFyYW1zLnNvdXJjZVBhdGggJiYgIXBhcmFtcy5zb3VyY2VGdWxsUGF0aCkge1xuICAgICAgcGFyYW1zLnNvdXJjZUZ1bGxQYXRoID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgcGFyYW1zLnNvdXJjZVBhdGgpO1xuICAgIH1cblxuICAgIGlmKHR5cGVzY3JpcHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLnVzZVR5cGVzY3JpcHQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmKGVudmlyb25tZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy50YXJnZXRFbnZpcm9ubWVudCA9IGVudmlyb25tZW50ID09PSAnd2ViJyA/ICd3ZWInIDogJ25vZGUnO1xuICAgIH1cblxuICAgIHByb2Nlc3MuZW52LkxFWF9DT05GSUcgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgIHtcbiAgICAgICAgLi4uTGV4Q29uZmlnLnVwZGF0ZUNvbmZpZyhwYXJhbXMpLFxuICAgICAgICBjb21tYW5kTmFtZTogY21kW25hbWVQcm9wZXJ0eV0sXG4gICAgICAgIGlzU3RhdGljOiBjbWQuc3RhdGljXG4gICAgICB9LCBudWxsLCAwXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBwYXJzZUNvbmZpZyhjbWQ6IFJlY29yZDxzdHJpbmcsIGFueT4sIGlzUm9vdDogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBsZXhDb25maWcsIGxleENvbmZpZ05hbWUsIHF1aWV0LCB0eXBlc2NyaXB0LCBkZWJ1ZyA9IGZhbHNlfSA9IGNtZDtcbiAgICBjb25zdCBjb25maWdGb3JtYXRzID0gWydqcycsICdtanMnLCAnY2pzJywgJ3RzJywgJ2pzb24nXTtcbiAgICBjb25zdCBjb25maWdCYXNlTmFtZTogc3RyaW5nID0gbGV4Q29uZmlnTmFtZSB8fCAnbGV4LmNvbmZpZyc7XG4gICAgbGV0IGNvbmZpZ1BhdGg6IHN0cmluZyA9IGxleENvbmZpZyB8fCAnJztcbiAgICBsZXQgY29uZmlnRXhpc3RzOiBib29sZWFuID0gbGV4Q29uZmlnID8gZXhpc3RzU3luYyhjb25maWdQYXRoKSA6IGZhbHNlO1xuXG4gICAgaWYoIWNvbmZpZ1BhdGggfHwgIWNvbmZpZ0V4aXN0cykge1xuICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgbG9nKGBTZWFyY2hpbmcgZm9yIGNvbmZpZyBmaWxlcyB3aXRoIGJhc2UgbmFtZTogJHtjb25maWdCYXNlTmFtZX1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cblxuICAgICAgZm9yKGNvbnN0IGZvcm1hdCBvZiBjb25maWdGb3JtYXRzKSB7XG4gICAgICAgIGNvbnN0IHBvdGVudGlhbFBhdGggPSBpc1Jvb3RcbiAgICAgICAgICA/IHBhdGhSZXNvbHZlKGN3ZCwgYC4vJHtjb25maWdCYXNlTmFtZX0uJHtmb3JtYXR9YClcbiAgICAgICAgICA6IHJlbGF0aXZlRmlsZVBhdGgoYCR7Y29uZmlnQmFzZU5hbWV9LiR7Zm9ybWF0fWAsIGN3ZCk7XG5cbiAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICBsb2coYENoZWNraW5nIGZvciBjb25maWcgZmlsZTogJHtwb3RlbnRpYWxQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoZXhpc3RzU3luYyhwb3RlbnRpYWxQYXRoKSkge1xuICAgICAgICAgIGNvbmZpZ1BhdGggPSBwb3RlbnRpYWxQYXRoO1xuICAgICAgICAgIGNvbmZpZ0V4aXN0cyA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihjb25maWdFeGlzdHMpIHtcbiAgICAgIGxvZyhgVXNpbmcgJHtjbGlOYW1lfSBjb25maWd1cmF0aW9uIGZpbGU6ICR7Y29uZmlnUGF0aH1gLCAnbm90ZScsIHF1aWV0KTtcbiAgICAgIGNvbnN0IGV4dDogc3RyaW5nID0gcGF0aEV4dG5hbWUoY29uZmlnUGF0aCk7XG5cbiAgICAgIGlmKGV4dCA9PT0gJy5qc29uJykge1xuICAgICAgICBjb25zdCBjb25maWdDb250ZW50OiBzdHJpbmcgPSByZWFkRmlsZVN5bmMoY29uZmlnUGF0aCwgJ3V0ZjgnKTtcblxuICAgICAgICBpZihjb25maWdDb250ZW50KSB7XG4gICAgICAgICAgbGV0IGNvbmZpZ0pzb246IExleENvbmZpZ1R5cGU7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uZmlnSnNvbiA9IEpTT04ucGFyc2UoY29uZmlnQ29udGVudCk/LmRlZmF1bHQgfHwge307XG4gICAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBGYWlsZWQgdG8gcGFyc2UgSlNPTiBjb25maWc6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICBjb25maWdKc29uID0ge307XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgTGV4Q29uZmlnLmFkZENvbmZpZ1BhcmFtcyhjbWQsIGNvbmZpZ0pzb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ29uZmlnIGZpbGUgbWFsZm9ybWVkLCAke2NvbmZpZ1BhdGh9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYoWycuanMnLCAnLm1qcycsICcuY2pzJywgJy50cyddLmluY2x1ZGVzKGV4dCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgbGV4Q3VzdG9tQ29uZmlnO1xuXG4gICAgICAgICAgaWYoZXh0ID09PSAnLmNqcycpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVVcmwgPSBuZXcgVVJMKGBmaWxlOi8vLyR7cGF0aFJlc29sdmUoY29uZmlnUGF0aCl9YCkuaHJlZjtcblxuICAgICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgICAgbG9nKGBMb2FkaW5nIENvbW1vbkpTIGNvbmZpZyBmcm9tOiAke2ZpbGVVcmx9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXhDdXN0b21Db25maWcgPSBhd2FpdCBpbXBvcnQoZmlsZVVybCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICAgIGxvZyhgTG9hZGluZyBFU00vVFMgY29uZmlnIGZyb206ICR7Y29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV4Q3VzdG9tQ29uZmlnID0gYXdhaXQgaW1wb3J0KGNvbmZpZ1BhdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IGxleEN1c3RvbUNvbmZpZy5kZWZhdWx0IHx8IGxleEN1c3RvbUNvbmZpZztcblxuICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICBsb2coYExvYWRlZCBjb25maWc6ICR7SlNPTi5zdHJpbmdpZnkoY29uZmlnLCBudWxsLCAyKX1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZighY29uZmlnKSB7XG4gICAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gV2FybmluZzogQ29uZmlnIGZpbGUgbG9hZGVkIGJ1dCBubyBjb25maWd1cmF0aW9uIGZvdW5kYCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgTGV4Q29uZmlnLmFkZENvbmZpZ1BhcmFtcyhjbWQsIGNvbmZpZyB8fCB7fSk7XG4gICAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEZhaWxlZCB0byBsb2FkIGNvbmZpZyBmaWxlOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENvbmZpZyBmaWxlIG11c3QgYmUgYSBKUywgQ0pTLCBNSlMsIFRTLCBvciBKU09OIGZpbGUuYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coJ05vIGNvbmZpZyBmaWxlIGZvdW5kLiBVc2luZyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIExleENvbmZpZy51c2VUeXBlc2NyaXB0ID0gISF0eXBlc2NyaXB0O1xuICAgICAgTGV4Q29uZmlnLmFkZENvbmZpZ1BhcmFtcyhjbWQsIExleENvbmZpZy5jb25maWcpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjaGVja1R5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgcGFja2FnZURpciA9IGdldFBhY2thZ2VEaXIoKTtcbiAgICBjb25zdCB0c2NvbmZpZ1BhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsICcuL3RzY29uZmlnLmpzb24nKTtcblxuICAgIGlmKCFleGlzdHNTeW5jKHRzY29uZmlnUGF0aCkpIHtcbiAgICAgIGNvbnN0IGxleERpciA9IExleENvbmZpZy5nZXRMZXhEaXIoKTtcbiAgICAgIGNvbnN0IGJhc2VDb25maWdQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcuYmFzZS5qc29uJyk7XG4gICAgICBjb25zdCB0ZW1wbGF0ZUNvbmZpZ1BhdGggPSBwYXRoUmVzb2x2ZShsZXhEaXIsICd0c2NvbmZpZy50ZW1wbGF0ZS5qc29uJyk7XG4gICAgICBjb25zdCBzb3VyY2VQYXRoID0gZXhpc3RzU3luYyhiYXNlQ29uZmlnUGF0aCkgPyBiYXNlQ29uZmlnUGF0aCA6IHRlbXBsYXRlQ29uZmlnUGF0aDtcblxuICAgICAgaWYoZXhpc3RzU3luYyhzb3VyY2VQYXRoKSkge1xuICAgICAgICB3cml0ZUZpbGVTeW5jKHRzY29uZmlnUGF0aCwgcmVhZEZpbGVTeW5jKHNvdXJjZVBhdGgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0VHlwZVNjcmlwdERlY2xhcmF0aW9uRmxhZ3MoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3Qgb3V0cHV0UGF0aCA9IExleENvbmZpZy5jb25maWcub3V0cHV0UGF0aCB8fCAnLi9saWInO1xuICAgIGNvbnN0IG91dHB1dEZ1bGxQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRGdWxsUGF0aCB8fCBwYXRoUmVzb2x2ZShjd2QsIG91dHB1dFBhdGgpO1xuICAgIGNvbnN0IHNvdXJjZVBhdGggPSBMZXhDb25maWcuY29uZmlnLnNvdXJjZVBhdGggfHwgJy4vc3JjJztcbiAgICBjb25zdCBzb3VyY2VGdWxsUGF0aCA9IExleENvbmZpZy5jb25maWcuc291cmNlRnVsbFBhdGggfHwgcGF0aFJlc29sdmUoY3dkLCBzb3VyY2VQYXRoKTtcbiAgICBjb25zdCByZWxhdGl2ZU91dERpciA9IHBhdGhSZWxhdGl2ZShjd2QsIG91dHB1dEZ1bGxQYXRoKSB8fCAnLi9saWInO1xuICAgIGNvbnN0IHJlbGF0aXZlUm9vdERpciA9IHBhdGhSZWxhdGl2ZShjd2QsIHNvdXJjZUZ1bGxQYXRoKSB8fCAnLi9zcmMnO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgICctLWVtaXREZWNsYXJhdGlvbk9ubHknLCAvLyBDUklUSUNBTDogT25seSBlbWl0IC5kLnRzIGZpbGVzLCBubyBKUyBmaWxlc1xuICAgICAgJy0tZGVjbGFyYXRpb24nLCAvLyBHZW5lcmF0ZSBkZWNsYXJhdGlvbiBmaWxlc1xuICAgICAgJy0tZGVjbGFyYXRpb25NYXAnLCAvLyBHZW5lcmF0ZSBzb3VyY2UgbWFwcyBmb3IgZGVjbGFyYXRpb25zXG4gICAgICAnLS1vdXREaXInLCByZWxhdGl2ZU91dERpcixcbiAgICAgICctLXJvb3REaXInLCByZWxhdGl2ZVJvb3REaXIsXG4gICAgICAnLS1za2lwTGliQ2hlY2snLCAvLyBTa2lwIHR5cGUgY2hlY2tpbmcgb2YgZGVjbGFyYXRpb24gZmlsZXMgKGZhc3RlciwgbW9yZSBsZW5pZW50KVxuICAgICAgJy0tZXNNb2R1bGVJbnRlcm9wJyxcbiAgICAgICctLWFsbG93U3ludGhldGljRGVmYXVsdEltcG9ydHMnLFxuICAgICAgJy0tbW9kdWxlJywgJ05vZGVOZXh0JyxcbiAgICAgICctLW1vZHVsZVJlc29sdXRpb24nLCAnTm9kZU5leHQnLFxuICAgICAgJy0tdGFyZ2V0JywgJ0VTTmV4dCcsXG4gICAgICAnLS1qc3gnLCAncmVhY3QtanN4JyxcbiAgICAgICctLWlzb2xhdGVkTW9kdWxlcycsXG4gICAgICAnLS1yZXNvbHZlSnNvbk1vZHVsZScsXG4gICAgICAnLS1hbGxvd0pzJyxcbiAgICAgICctLWlnbm9yZUNvbmZpZydcbiAgICAgIC8vIE5vdGU6IC0tbm9VbnVzZWRMb2NhbHMgYW5kIC0tbm9VbnVzZWRQYXJhbWV0ZXJzIGFyZSBub3QgbmVlZGVkIGZvciBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uXG4gICAgICAvLyBhbmQgd291bGQgYWN0dWFsbHkgZW5hYmxlIHN0cmljdCBjaGVja2luZywgd2hpY2ggd2Ugd2FudCB0byBhdm9pZCBmb3IgZmFzdGVyIGRlY2xhcmF0aW9uIGdlbmVyYXRpb25cbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIGNoZWNrTGludFR5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnTGludFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGxleERpciwgJy4vdHNjb25maWcubGludC5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ0xpbnRQYXRoKSkge1xuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcubGludC5qc29uJyk7XG4gICAgICBpZihleGlzdHNTeW5jKHRlbXBsYXRlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ0xpbnRQYXRoLCByZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNoZWNrVGVzdFR5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnVGVzdFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGxleERpciwgJy4vdHNjb25maWcudGVzdC5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ1Rlc3RQYXRoKSkge1xuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcudGVzdC5qc29uJyk7XG4gICAgICBpZihleGlzdHNTeW5jKHRlbXBsYXRlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ1Rlc3RQYXRoLCByZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB0eXBlIFNXQ09wdGlvbnMgPSBPcHRpb25zO1xuIl0sIm5hbWVzIjpbImZpbmRGaWxlVXAiLCJleGlzdHNTeW5jIiwicmVhZEZpbGVTeW5jIiwid3JpdGVGaWxlU3luYyIsImRpcm5hbWUiLCJleHRuYW1lIiwicGF0aEV4dG5hbWUiLCJyZWxhdGl2ZSIsInBhdGhSZWxhdGl2ZSIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsIlVSTCIsImdldExleFBhY2thZ2VKc29uUGF0aCIsInJlbGF0aXZlRmlsZVBhdGgiLCJsb2ciLCJjd2QiLCJwcm9jZXNzIiwicmVhY3RDb21waWxlclBsdWdpbk5hbWUiLCJkZWZhdWx0UmVhY3RDb21waWxlck9wdGlvbnMiLCJjb21waWxhdGlvbk1vZGUiLCJwYW5pY1RocmVzaG9sZCIsInRhcmdldCIsImlzUmVhY3RDb21waWxlclBsdWdpbiIsInBsdWdpbiIsIkFycmF5IiwiaXNBcnJheSIsImRlZmF1bHRDb25maWdWYWx1ZXMiLCJhaSIsIm1heFRva2VucyIsIm1vZGVsIiwicHJvdmlkZXIiLCJ0ZW1wZXJhdHVyZSIsImNvbmZpZ0ZpbGVzIiwiY29weUZpbGVzIiwiZW50cnlIVE1MIiwiZW50cnlKcyIsImVudiIsImVzbGludCIsIm91dHB1dEZ1bGxQYXRoIiwib3V0cHV0SGFzaCIsIm91dHB1dFBhdGgiLCJwYWNrYWdlTWFuYWdlciIsInByZXNldCIsInNvdXJjZUZ1bGxQYXRoIiwic291cmNlUGF0aCIsInN3YyIsImlubGluZVNvdXJjZXNDb250ZW50IiwiaXNNb2R1bGUiLCJqc2MiLCJleHRlcm5hbEhlbHBlcnMiLCJrZWVwQ2xhc3NOYW1lcyIsImxvb3NlIiwicGFyc2VyIiwiZGVjb3JhdG9ycyIsImR5bmFtaWNJbXBvcnQiLCJzeW50YXgiLCJ0c3giLCJ0cmFuc2Zvcm0iLCJyZWFjdCIsInJ1bnRpbWUiLCJtaW5pZnkiLCJtb2R1bGUiLCJsYXp5Iiwibm9JbnRlcm9wIiwic3RyaWN0Iiwic3RyaWN0TW9kZSIsInR5cGUiLCJzb3VyY2VNYXBzIiwidGFyZ2V0RW52aXJvbm1lbnQiLCJ1c2VHcmFwaFFsIiwidXNlVHlwZXNjcmlwdCIsInZpdGVzdCIsIndlYnBhY2siLCJzdGF0aWNQYXRoIiwiZ2V0UGFja2FnZURpciIsImN1cnJlbnRQa2dQYXRoIiwicGtnIiwiSlNPTiIsInBhcnNlIiwid29ya3NwYWNlcyIsInNlYXJjaERpciIsImkiLCJwa2dQYXRoIiwicGFyZW50IiwiY29uZmlnRm9ybWF0cyIsImZvcm1hdCIsImNvbmZpZ1BhdGgiLCJzeW5jIiwiZ2V0VHlwZVNjcmlwdENvbmZpZ1BhdGgiLCJjb25maWdOYW1lIiwicGFja2FnZURpciIsInByb2plY3RCdWlsZENvbmZpZyIsInJvb3RCdWlsZENvbmZpZyIsInByb2plY3RMaW50Q29uZmlnIiwicm9vdExpbnRDb25maWciLCJwcm9qZWN0VGVzdENvbmZpZyIsInJvb3RUZXN0Q29uZmlnIiwicHJvamVjdENvbmZpZ1BhdGgiLCJyb290Q29uZmlnUGF0aCIsImxleERpciIsIkxleENvbmZpZyIsImdldExleERpciIsInZhbHVlIiwiY29uZmlnIiwiaW5kZXhQYXRoIiwiaGFzSW5kZXhUc3giLCJnZXRTV0NDb25maWdXaXRoUmVhY3RDb21waWxlciIsInN3Y0NvbmZpZyIsInJlYWN0Q29tcGlsZXIiLCJ1bmRlZmluZWQiLCJjdXJyZW50U3djQ29uZmlnIiwiY3VycmVudEpzYyIsImN1cnJlbnRFeHBlcmltZW50YWwiLCJleHBlcmltZW50YWwiLCJwbHVnaW5zIiwiZmlsdGVyIiwic3djQ29uZmlnV2l0aFJlYWN0Q29tcGlsZXIiLCJ1cGRhdGVDb25maWciLCJ1cGRhdGVkQ29uZmlnIiwiQ1VSU09SX0lERSIsImFkZENvbmZpZ1BhcmFtcyIsImNtZCIsInBhcmFtcyIsIm5hbWVQcm9wZXJ0eSIsImVudmlyb25tZW50IiwidHlwZXNjcmlwdCIsIkxFWF9DT05GSUciLCJzdHJpbmdpZnkiLCJjb21tYW5kTmFtZSIsImlzU3RhdGljIiwic3RhdGljIiwicGFyc2VDb25maWciLCJpc1Jvb3QiLCJjbGlOYW1lIiwibGV4Q29uZmlnIiwibGV4Q29uZmlnTmFtZSIsInF1aWV0IiwiZGVidWciLCJjb25maWdCYXNlTmFtZSIsImNvbmZpZ0V4aXN0cyIsInBvdGVudGlhbFBhdGgiLCJleHQiLCJjb25maWdDb250ZW50IiwiY29uZmlnSnNvbiIsImRlZmF1bHQiLCJlcnJvciIsIm1lc3NhZ2UiLCJpbmNsdWRlcyIsImxleEN1c3RvbUNvbmZpZyIsImZpbGVVcmwiLCJocmVmIiwiY29uc29sZSIsImNoZWNrVHlwZXNjcmlwdENvbmZpZyIsInRzY29uZmlnUGF0aCIsImJhc2VDb25maWdQYXRoIiwidGVtcGxhdGVDb25maWdQYXRoIiwiZ2V0VHlwZVNjcmlwdERlY2xhcmF0aW9uRmxhZ3MiLCJyZWxhdGl2ZU91dERpciIsInJlbGF0aXZlUm9vdERpciIsImNoZWNrTGludFR5cGVzY3JpcHRDb25maWciLCJ0c2NvbmZpZ0xpbnRQYXRoIiwidGVtcGxhdGVQYXRoIiwiY2hlY2tUZXN0VHlwZXNjcmlwdENvbmZpZyIsInRzY29uZmlnVGVzdFBhdGgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7OztDQUdDLEdBQ0QsT0FBT0EsZ0JBQWdCLGVBQWU7QUFDdEMsU0FBUUMsVUFBVSxFQUFFQyxZQUFZLEVBQUVDLGFBQWEsUUFBTyxLQUFLO0FBQzNELFNBQ0VDLE9BQU8sRUFDUEMsV0FBV0MsV0FBVyxFQUN0QkMsWUFBWUMsWUFBWSxFQUN4QkMsV0FBV0MsV0FBVyxRQUNqQixPQUFPO0FBQ2QsU0FBUUMsR0FBRyxRQUFPLE1BQU07QUFFeEIsU0FBUUMscUJBQXFCLEVBQUVDLGdCQUFnQixRQUFPLGtCQUFrQjtBQUN4RSxTQUFRQyxHQUFHLFFBQU8saUJBQWlCO0FBS25DLE1BQU1DLE1BQWNDLFFBQVFELEdBQUc7QUFtRS9CLE9BQU8sTUFBTUUsMEJBQTBCLHNCQUFzQjtBQUU3RCxPQUFPLE1BQU1DLDhCQUF1RDtJQUNsRUMsaUJBQWlCO0lBQ2pCQyxnQkFBZ0I7SUFDaEJDLFFBQVE7QUFDVixFQUFFO0FBRUYsTUFBTUMsd0JBQXdCLENBQUNDLFNBQzdCQyxNQUFNQyxPQUFPLENBQUNGLFdBQVdBLE1BQU0sQ0FBQyxFQUFFLEtBQUtOO0FBR3pDLE9BQU8sTUFBTVMsc0JBQXFDO0lBQ2hEQyxJQUFJO1FBQ0ZDLFdBQVc7UUFDWEMsT0FBTztRQUNQQyxVQUFVO1FBQ1ZDLGFBQWE7SUFDZjtJQUNBQyxhQUFhLEVBQUU7SUFDZkMsV0FBVyxFQUFFO0lBQ2JDLFdBQVc7SUFDWEMsU0FBUztJQUNUQyxLQUFLO0lBQ0xDLFFBQVEsQ0FBQztJQUNUQyxnQkFBZ0I1QixZQUFZSyxLQUFLO0lBQ2pDd0IsWUFBWTtJQUNaQyxZQUFZO0lBQ1pDLGdCQUFnQjtJQUNoQkMsUUFBUTtJQUNSQyxnQkFB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
|
|
463
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9MZXhDb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBmaW5kRmlsZVVwIGZyb20gJ2ZpbmQtZmlsZS11cCc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSBhcyBwYXRoRXh0bmFtZSxcbiAgcmVsYXRpdmUgYXMgcGF0aFJlbGF0aXZlLFxuICByZXNvbHZlIGFzIHBhdGhSZXNvbHZlXG59IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtVUkx9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7Z2V0TGV4UGFja2FnZUpzb25QYXRoLCByZWxhdGl2ZUZpbGVQYXRofSBmcm9tICcuL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4vdXRpbHMvbG9nLmpzJztcblxuaW1wb3J0IHR5cGUge09wdGlvbnN9IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQgdHlwZSB7TGludGVyfSBmcm9tICdlc2xpbnQnO1xuXG5jb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG5cblxuZXhwb3J0IGludGVyZmFjZSBWaXRlc3RDb25maWcge1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpdGVDb25maWcge1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICBzdGF0aWNQYXRoPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJQ29uZmlnIHtcbiAgcHJvdmlkZXI/OiAnY3Vyc29yJyB8ICdjb3BpbG90JyB8ICdvcGVuYWknIHwgJ2FudGhyb3BpYycgfCAnbm9uZSc7XG4gIGFwaUtleT86IHN0cmluZztcbiAgbW9kZWw/OiBzdHJpbmc7XG4gIG1heFRva2Vucz86IG51bWJlcjtcbiAgdGVtcGVyYXR1cmU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGV2Q29uZmlnIHtcbiAgcG9ydD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFU0xpbnRDb25maWcge1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICBleHRlbmRzPzogc3RyaW5nW107XG4gIHJ1bGVzPzogTGludGVyLlJ1bGVzUmVjb3JkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExleENvbmZpZ1R5cGUge1xuICBhaT86IEFJQ29uZmlnO1xuICBjb25maWdGaWxlcz86IHN0cmluZ1tdO1xuICBjb3B5RmlsZXM/OiBzdHJpbmdbXTtcbiAgZGV2PzogRGV2Q29uZmlnO1xuICBlbnRyeUhUTUw/OiBzdHJpbmc7XG4gIGVudHJ5SnM/OiBzdHJpbmc7XG4gIGVudj86IG9iamVjdCB8IG51bGw7XG4gIGVzbGludD86IEVTTGludENvbmZpZztcbiAgZ2l0VXJsPzogc3RyaW5nO1xuICB2aXRlc3Q/OiBWaXRlc3RDb25maWc7XG4gIGxpYnJhcnlOYW1lPzogc3RyaW5nO1xuICBsaWJyYXJ5VGFyZ2V0Pzogc3RyaW5nO1xuICBvdXRwdXRGaWxlPzogc3RyaW5nO1xuICBvdXRwdXRGdWxsUGF0aD86IHN0cmluZztcbiAgb3V0cHV0SGFzaD86IGJvb2xlYW47XG4gIG91dHB1dFBhdGg/OiBzdHJpbmc7XG4gIHBhY2thZ2VNYW5hZ2VyPzogJ25wbScgfCAneWFybic7XG4gIHByZXNldD86ICd3ZWInIHwgJ25vZGUnIHwgJ2xhbWJkYScgfCAnbW9iaWxlJztcbiAgcmVhY3RDb21waWxlcj86IFJlYWN0Q29tcGlsZXJDb25maWc7XG4gIHNvdXJjZUZ1bGxQYXRoPzogc3RyaW5nO1xuICBzb3VyY2VQYXRoPzogc3RyaW5nO1xuICBzd2M/OiBTV0NPcHRpb25zO1xuICB0YXJnZXRFbnZpcm9ubWVudD86ICdub2RlJyB8ICd3ZWInO1xuICB1c2VHcmFwaFFsPzogYm9vbGVhbjtcbiAgdXNlVHlwZXNjcmlwdD86IGJvb2xlYW47XG4gIHZpdGU/OiBWaXRlQ29uZmlnO1xufVxuXG5leHBvcnQgdHlwZSBDb25maWcgPSBMZXhDb25maWdUeXBlO1xuXG5leHBvcnQgdHlwZSBSZWFjdENvbXBpbGVyQ29uZmlnID0gYm9vbGVhbiB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgY29uc3QgcmVhY3RDb21waWxlclBsdWdpbk5hbWUgPSAnQHN3Yy9yZWFjdC1jb21waWxlcic7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0UmVhY3RDb21waWxlck9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICBjb21waWxhdGlvbk1vZGU6ICdpbmZlcicsXG4gIHBhbmljVGhyZXNob2xkOiAnbm9uZScsXG4gIHRhcmdldDogJzE5J1xufTtcblxuY29uc3QgaXNSZWFjdENvbXBpbGVyUGx1Z2luID0gKHBsdWdpbjogdW5rbm93bik6IGJvb2xlYW4gPT4gKFxuICBBcnJheS5pc0FycmF5KHBsdWdpbikgJiYgcGx1Z2luWzBdID09PSByZWFjdENvbXBpbGVyUGx1Z2luTmFtZVxuKTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRDb25maWdWYWx1ZXM6IExleENvbmZpZ1R5cGUgPSB7XG4gIGFpOiB7XG4gICAgbWF4VG9rZW5zOiA0MDAwLFxuICAgIG1vZGVsOiAnZ3B0LTRvJyxcbiAgICBwcm92aWRlcjogJ25vbmUnLFxuICAgIHRlbXBlcmF0dXJlOiAwLjFcbiAgfSxcbiAgY29uZmlnRmlsZXM6IFtdLFxuICBjb3B5RmlsZXM6IFtdLFxuICBlbnRyeUhUTUw6ICdpbmRleC5odG1sJyxcbiAgZW50cnlKczogJ2luZGV4LmpzJyxcbiAgZW52OiBudWxsLFxuICBlc2xpbnQ6IHt9LFxuICBvdXRwdXRGdWxsUGF0aDogcGF0aFJlc29sdmUoY3dkLCAnLi9saWInKSxcbiAgb3V0cHV0SGFzaDogZmFsc2UsXG4gIG91dHB1dFBhdGg6ICcuL2xpYicsXG4gIHBhY2thZ2VNYW5hZ2VyOiAnbnBtJyxcbiAgcHJlc2V0OiAnd2ViJyxcbiAgc291cmNlRnVsbFBhdGg6IHBhdGhSZXNvbHZlKGN3ZCwgJy4vc3JjJyksXG4gIHNvdXJjZVBhdGg6ICcuL3NyYycsXG4gIHN3Yzoge1xuICAgIGlubGluZVNvdXJjZXNDb250ZW50OiB0cnVlLFxuICAgIGlzTW9kdWxlOiB0cnVlLFxuICAgIGpzYzoge1xuICAgICAgZXh0ZXJuYWxIZWxwZXJzOiBmYWxzZSxcbiAgICAgIGtlZXBDbGFzc05hbWVzOiBmYWxzZSxcbiAgICAgIGxvb3NlOiBmYWxzZSxcbiAgICAgIHBhcnNlcjoge1xuICAgICAgICBkZWNvcmF0b3JzOiB0cnVlLFxuICAgICAgICBkeW5hbWljSW1wb3J0OiB0cnVlLFxuICAgICAgICBzeW50YXg6ICd0eXBlc2NyaXB0JyxcbiAgICAgICAgdHN4OiB0cnVlXG4gICAgICB9LFxuICAgICAgdGFyZ2V0OiAnZXMyMDIzJyxcbiAgICAgIHRyYW5zZm9ybToge1xuICAgICAgICByZWFjdDoge1xuICAgICAgICAgIHJ1bnRpbWU6ICdhdXRvbWF0aWMnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG1pbmlmeTogZmFsc2UsXG4gICAgbW9kdWxlOiB7XG4gICAgICBsYXp5OiBmYWxzZSxcbiAgICAgIG5vSW50ZXJvcDogZmFsc2UsXG4gICAgICBzdHJpY3Q6IGZhbHNlLFxuICAgICAgc3RyaWN0TW9kZTogdHJ1ZSxcbiAgICAgIHR5cGU6ICdlczYnXG4gICAgfSxcbiAgICBzb3VyY2VNYXBzOiAnaW5saW5lJ1xuICB9LFxuICB0YXJnZXRFbnZpcm9ubWVudDogJ3dlYicsXG4gIHVzZUdyYXBoUWw6IGZhbHNlLFxuICB1c2VUeXBlc2NyaXB0OiBmYWxzZSxcbiAgdml0ZXN0OiB7fSxcbiAgdml0ZToge1xuICAgIHN0YXRpY1BhdGg6ICcuL3NyYy9zdGF0aWMnXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQYWNrYWdlRGlyID0gKCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IGN1cnJlbnRQa2dQYXRoID0gcGF0aFJlc29sdmUoY3dkLCAncGFja2FnZS5qc29uJyk7XG5cbiAgaWYoZXhpc3RzU3luYyhjdXJyZW50UGtnUGF0aCkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoY3VycmVudFBrZ1BhdGgsICd1dGY4JykpO1xuICAgICAgaWYoIXBrZy53b3Jrc3BhY2VzKSB7XG4gICAgICAgIHJldHVybiBjd2Q7XG4gICAgICB9XG4gICAgfSBjYXRjaHtcbiAgICAgIHJldHVybiBjd2Q7XG4gICAgfVxuICB9XG5cbiAgbGV0IHNlYXJjaERpciA9IGN3ZDtcblxuICBmb3IobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgIGNvbnN0IHBrZ1BhdGggPSBwYXRoUmVzb2x2ZShzZWFyY2hEaXIsICdwYWNrYWdlLmpzb24nKTtcbiAgICBpZihleGlzdHNTeW5jKHBrZ1BhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhwa2dQYXRoLCAndXRmOCcpKTtcblxuICAgICAgICBpZighcGtnLndvcmtzcGFjZXMpIHtcbiAgICAgICAgICByZXR1cm4gc2VhcmNoRGlyO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoe1xuICAgICAgICAvLyBDb250aW51ZSBzZWFyY2hpbmdcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSBkaXJuYW1lKHNlYXJjaERpcik7XG5cbiAgICBpZihwYXJlbnQgPT09IHNlYXJjaERpcikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNlYXJjaERpciA9IHBhcmVudDtcbiAgfVxuXG4gIGNvbnN0IGNvbmZpZ0Zvcm1hdHMgPSBbJ2pzJywgJ21qcycsICdjanMnLCAndHMnLCAnanNvbiddO1xuXG4gIGZvcihjb25zdCBmb3JtYXQgb2YgY29uZmlnRm9ybWF0cykge1xuICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBmaW5kRmlsZVVwLnN5bmMoYGxleC5jb25maWcuJHtmb3JtYXR9YCwgY3dkLCA1KTtcblxuICAgIGlmKGNvbmZpZ1BhdGgpIHtcbiAgICAgIHJldHVybiBkaXJuYW1lKGNvbmZpZ1BhdGgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjd2Q7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VHlwZVNjcmlwdENvbmZpZ1BhdGggPSAoY29uZmlnTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGFja2FnZURpciA9IGdldFBhY2thZ2VEaXIoKTtcbiAgY29uc3QgY3dkID0gcHJvY2Vzcy5jd2QoKTtcblxuICBpZihjb25maWdOYW1lID09PSAndHNjb25maWcuYnVpbGQuanNvbicpIHtcbiAgICBjb25zdCBwcm9qZWN0QnVpbGRDb25maWcgPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCAndHNjb25maWcuYnVpbGQuanNvbicpO1xuXG4gICAgaWYoZXhpc3RzU3luYyhwcm9qZWN0QnVpbGRDb25maWcpKSB7XG4gICAgICByZXR1cm4gcHJvamVjdEJ1aWxkQ29uZmlnO1xuICAgIH1cblxuICAgIGNvbnN0IHJvb3RCdWlsZENvbmZpZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ3RzY29uZmlnLmJ1aWxkLmpzb24nKTtcbiAgICBpZihleGlzdHNTeW5jKHJvb3RCdWlsZENvbmZpZykpIHtcbiAgICAgIHJldHVybiByb290QnVpbGRDb25maWc7XG4gICAgfVxuICB9XG5cbiAgaWYoY29uZmlnTmFtZSA9PT0gJ3RzY29uZmlnLmxpbnQuanNvbicpIHtcbiAgICBjb25zdCBwcm9qZWN0TGludENvbmZpZyA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsICd0c2NvbmZpZy5lc2xpbnQuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocHJvamVjdExpbnRDb25maWcpKSB7XG4gICAgICByZXR1cm4gcHJvamVjdExpbnRDb25maWc7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdExpbnRDb25maWcgPSBwYXRoUmVzb2x2ZShjd2QsICd0c2NvbmZpZy5lc2xpbnQuanNvbicpO1xuXG4gICAgaWYoZXhpc3RzU3luYyhyb290TGludENvbmZpZykpIHtcbiAgICAgIHJldHVybiByb290TGludENvbmZpZztcbiAgICB9XG4gIH1cblxuICBpZihjb25maWdOYW1lID09PSAndHNjb25maWcudGVzdC5qc29uJykge1xuICAgIGNvbnN0IHByb2plY3RUZXN0Q29uZmlnID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgJ3RzY29uZmlnLnRlc3QuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocHJvamVjdFRlc3RDb25maWcpKSB7XG4gICAgICByZXR1cm4gcHJvamVjdFRlc3RDb25maWc7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdFRlc3RDb25maWcgPSBwYXRoUmVzb2x2ZShjd2QsICd0c2NvbmZpZy50ZXN0Lmpzb24nKTtcblxuICAgIGlmKGV4aXN0c1N5bmMocm9vdFRlc3RDb25maWcpKSB7XG4gICAgICByZXR1cm4gcm9vdFRlc3RDb25maWc7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcHJvamVjdENvbmZpZ1BhdGggPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCBjb25maWdOYW1lKTtcblxuICBpZihleGlzdHNTeW5jKHByb2plY3RDb25maWdQYXRoKSkge1xuICAgIHJldHVybiBwcm9qZWN0Q29uZmlnUGF0aDtcbiAgfVxuXG4gIGNvbnN0IHJvb3RDb25maWdQYXRoID0gcGF0aFJlc29sdmUoY3dkLCBjb25maWdOYW1lKTtcblxuICBpZihleGlzdHNTeW5jKHJvb3RDb25maWdQYXRoKSkge1xuICAgIHJldHVybiByb290Q29uZmlnUGF0aDtcbiAgfVxuXG4gIGNvbnN0IGxleERpciA9IExleENvbmZpZy5nZXRMZXhEaXIoKTtcblxuICByZXR1cm4gcGF0aFJlc29sdmUobGV4RGlyLCBjb25maWdOYW1lKTtcbn07XG5cbmV4cG9ydCBjbGFzcyBMZXhDb25maWcge1xuICBzdGF0aWMgY29uZmlnOiBMZXhDb25maWdUeXBlID0ge1xuICAgIC4uLmRlZmF1bHRDb25maWdWYWx1ZXNcbiAgfTtcblxuICBzdGF0aWMgc2V0IHVzZVR5cGVzY3JpcHQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBMZXhDb25maWcuY29uZmlnLnVzZVR5cGVzY3JpcHQgPSB2YWx1ZTtcbiAgICBjb25zdCB7ZW50cnlKcywgc291cmNlRnVsbFBhdGgsIHRhcmdldEVudmlyb25tZW50fSA9IExleENvbmZpZy5jb25maWc7XG5cbiAgICBpZihlbnRyeUpzID09PSAnaW5kZXguanMnICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBpbmRleFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGN3ZCwgc291cmNlRnVsbFBhdGggfHwgY3dkLCAnaW5kZXgudHN4Jyk7XG4gICAgICBjb25zdCBoYXNJbmRleFRzeDogYm9vbGVhbiA9IGV4aXN0c1N5bmMoaW5kZXhQYXRoKTtcblxuICAgICAgaWYoaGFzSW5kZXhUc3gpIHtcbiAgICAgICAgTGV4Q29uZmlnLmNvbmZpZy5lbnRyeUpzID0gJ2luZGV4LnRzeCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBMZXhDb25maWcuY29uZmlnLmVudHJ5SnMgPSAnaW5kZXgudHMnO1xuICAgICAgfVxuICAgIH1cblxuICAgIExleENvbmZpZy5jb25maWcuc3djID0gTGV4Q29uZmlnLmNvbmZpZy5zd2MgfHwgey4uLmRlZmF1bHRDb25maWdWYWx1ZXMuc3djIX07XG4gICAgTGV4Q29uZmlnLmNvbmZpZy5zd2MuanNjID0gTGV4Q29uZmlnLmNvbmZpZy5zd2MuanNjIHx8IHsuLi5kZWZhdWx0Q29uZmlnVmFsdWVzLnN3YyEuanNjIX07XG4gICAgTGV4Q29uZmlnLmNvbmZpZy5zd2MuanNjLnBhcnNlciA9IHtcbiAgICAgIHN5bnRheDogJ3R5cGVzY3JpcHQnLFxuICAgICAgdHN4OiB0cnVlXG4gICAgfTtcblxuICAgIGlmKHRhcmdldEVudmlyb25tZW50ID09PSAnd2ViJykge1xuICAgICAgTGV4Q29uZmlnLmNvbmZpZy5zd2MuanNjLnRyYW5zZm9ybSA9IHtcbiAgICAgICAgcmVhY3Q6IHtcbiAgICAgICAgICBydW50aW1lOiAnYXV0b21hdGljJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRMZXhEaXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGlybmFtZShnZXRMZXhQYWNrYWdlSnNvblBhdGgoKSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0U1dDQ29uZmlnV2l0aFJlYWN0Q29tcGlsZXIoXG4gICAgc3djQ29uZmlnOiBTV0NPcHRpb25zIHwgdW5kZWZpbmVkID0gTGV4Q29uZmlnLmNvbmZpZy5zd2MsXG4gICAgcmVhY3RDb21waWxlcjogUmVhY3RDb21waWxlckNvbmZpZyB8IHVuZGVmaW5lZCA9IExleENvbmZpZy5jb25maWcucmVhY3RDb21waWxlclxuICApOiBTV0NPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgICBpZihyZWFjdENvbXBpbGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBzd2NDb25maWc7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFN3Y0NvbmZpZyA9IHN3Y0NvbmZpZyB8fCBkZWZhdWx0Q29uZmlnVmFsdWVzLnN3YztcbiAgICBjb25zdCBjdXJyZW50SnNjOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gY3VycmVudFN3Y0NvbmZpZz8uanNjIHx8IHt9O1xuICAgIGNvbnN0IGN1cnJlbnRFeHBlcmltZW50YWwgPSBjdXJyZW50SnNjLmV4cGVyaW1lbnRhbCB8fCB7fTtcbiAgICBjb25zdCBwbHVnaW5zID0gQXJyYXkuaXNBcnJheShjdXJyZW50RXhwZXJpbWVudGFsLnBsdWdpbnMpXG4gICAgICA/IGN1cnJlbnRFeHBlcmltZW50YWwucGx1Z2lucy5maWx0ZXIoKHBsdWdpbjogdW5rbm93bikgPT4gIWlzUmVhY3RDb21waWxlclBsdWdpbihwbHVnaW4pKVxuICAgICAgOiBbXTtcblxuICAgIGNvbnN0IGV4cGVyaW1lbnRhbCA9IHJlYWN0Q29tcGlsZXIgPT09IGZhbHNlXG4gICAgICA/IHtcbiAgICAgICAgLi4uY3VycmVudEV4cGVyaW1lbnRhbCxcbiAgICAgICAgcGx1Z2luc1xuICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgIC4uLmN1cnJlbnRFeHBlcmltZW50YWwsXG4gICAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgICAuLi5wbHVnaW5zLFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIHJlYWN0Q29tcGlsZXJQbHVnaW5OYW1lLFxuICAgICAgICAgICAgdHlwZW9mIHJlYWN0Q29tcGlsZXIgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLmRlZmF1bHRSZWFjdENvbXBpbGVyT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAuLi5yZWFjdENvbXBpbGVyXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOiBkZWZhdWx0UmVhY3RDb21waWxlck9wdGlvbnNcbiAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgY29uc3Qgc3djQ29uZmlnV2l0aFJlYWN0Q29tcGlsZXI6IFNXQ09wdGlvbnMgPSB7XG4gICAgICAuLi5jdXJyZW50U3djQ29uZmlnLFxuICAgICAganNjOiB7XG4gICAgICAgIC4uLmN1cnJlbnRKc2MsXG4gICAgICAgIGV4cGVyaW1lbnRhbFxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gc3djQ29uZmlnV2l0aFJlYWN0Q29tcGlsZXI7XG4gIH1cblxuICBzdGF0aWMgdXBkYXRlQ29uZmlnKHVwZGF0ZWRDb25maWc6IExleENvbmZpZ1R5cGUpOiBMZXhDb25maWdUeXBlIHtcbiAgICBjb25zdCB7b3V0cHV0RnVsbFBhdGgsIG91dHB1dFBhdGgsIHNvdXJjZVBhdGgsIHNvdXJjZUZ1bGxQYXRoLCB1c2VUeXBlc2NyaXB0LCBhaX0gPSB1cGRhdGVkQ29uZmlnO1xuICAgIGNvbnN0IHBhY2thZ2VEaXIgPSBnZXRQYWNrYWdlRGlyKCk7XG5cbiAgICBpZih1c2VUeXBlc2NyaXB0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIExleENvbmZpZy51c2VUeXBlc2NyaXB0ID0gdXNlVHlwZXNjcmlwdDtcbiAgICB9XG5cbiAgICBpZihvdXRwdXRQYXRoICE9PSB1bmRlZmluZWQgJiYgb3V0cHV0RnVsbFBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgdXBkYXRlZENvbmZpZy5vdXRwdXRGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsIG91dHB1dFBhdGgpO1xuICAgIH1cblxuICAgIGlmKHNvdXJjZVBhdGggIT09IHVuZGVmaW5lZCAmJiBzb3VyY2VGdWxsUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1cGRhdGVkQ29uZmlnLnNvdXJjZUZ1bGxQYXRoID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgc291cmNlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYoYWkpIHtcbiAgICAgIExleENvbmZpZy5jb25maWcuYWkgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZy5haSwgLi4uYWl9O1xuXG4gICAgICBpZihwcm9jZXNzLmVudi5DVVJTT1JfSURFID09PSAndHJ1ZScgJiYgTGV4Q29uZmlnLmNvbmZpZy5haS5wcm92aWRlciA9PT0gJ25vbmUnKSB7XG4gICAgICAgIExleENvbmZpZy5jb25maWcuYWkucHJvdmlkZXIgPSAnY3Vyc29yJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBMZXhDb25maWcuY29uZmlnID0gey4uLkxleENvbmZpZy5jb25maWcsIC4uLnVwZGF0ZWRDb25maWd9O1xuICAgIExleENvbmZpZy5jb25maWcuc3djID0gTGV4Q29uZmlnLmdldFNXQ0NvbmZpZ1dpdGhSZWFjdENvbXBpbGVyKCk7XG5cbiAgICByZXR1cm4gTGV4Q29uZmlnLmNvbmZpZztcbiAgfVxuXG4gIHN0YXRpYyBhZGRDb25maWdQYXJhbXMoY21kOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBwYXJhbXM6IExleENvbmZpZ1R5cGUpIHtcbiAgICBjb25zdCBuYW1lUHJvcGVydHk6IHN0cmluZyA9ICdfbmFtZSc7XG4gICAgY29uc3Qge2Vudmlyb25tZW50LCBvdXRwdXRQYXRoLCBzb3VyY2VQYXRoLCB0eXBlc2NyaXB0fSA9IGNtZDtcbiAgICBjb25zdCBwYWNrYWdlRGlyID0gZ2V0UGFja2FnZURpcigpO1xuXG4gICAgaWYob3V0cHV0UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMub3V0cHV0UGF0aCA9IG91dHB1dFBhdGg7XG4gICAgICBwYXJhbXMub3V0cHV0RnVsbFBhdGggPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCBvdXRwdXRQYXRoKTtcbiAgICB9IGVsc2UgaWYocGFyYW1zLm91dHB1dFBhdGggJiYgIXBhcmFtcy5vdXRwdXRGdWxsUGF0aCkge1xuICAgICAgcGFyYW1zLm91dHB1dEZ1bGxQYXRoID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgcGFyYW1zLm91dHB1dFBhdGgpO1xuICAgIH1cblxuICAgIGlmKHNvdXJjZVBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLnNvdXJjZVBhdGggPSBzb3VyY2VQYXRoO1xuICAgICAgcGFyYW1zLnNvdXJjZUZ1bGxQYXRoID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgc291cmNlUGF0aCk7XG4gICAgfSBlbHNlIGlmKHBhcmFtcy5zb3VyY2VQYXRoICYmICFwYXJhbXMuc291cmNlRnVsbFBhdGgpIHtcbiAgICAgIHBhcmFtcy5zb3VyY2VGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsIHBhcmFtcy5zb3VyY2VQYXRoKTtcbiAgICB9XG5cbiAgICBpZih0eXBlc2NyaXB0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy51c2VUeXBlc2NyaXB0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZihlbnZpcm9ubWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMudGFyZ2V0RW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudCA9PT0gJ3dlYicgPyAnd2ViJyA6ICdub2RlJztcbiAgICB9XG5cbiAgICBwcm9jZXNzLmVudi5MRVhfQ09ORklHID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICB7XG4gICAgICAgIC4uLkxleENvbmZpZy51cGRhdGVDb25maWcocGFyYW1zKSxcbiAgICAgICAgY29tbWFuZE5hbWU6IGNtZFtuYW1lUHJvcGVydHldLFxuICAgICAgICBpc1N0YXRpYzogY21kLnN0YXRpY1xuICAgICAgfSwgbnVsbCwgMFxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcGFyc2VDb25maWcoY21kOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBpc1Jvb3Q6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qge2NsaU5hbWUgPSAnTGV4JywgbGV4Q29uZmlnLCBsZXhDb25maWdOYW1lLCBxdWlldCwgdHlwZXNjcmlwdCwgZGVidWcgPSBmYWxzZX0gPSBjbWQ7XG4gICAgY29uc3QgY29uZmlnRm9ybWF0cyA9IFsnanMnLCAnbWpzJywgJ2NqcycsICd0cycsICdqc29uJ107XG4gICAgY29uc3QgY29uZmlnQmFzZU5hbWU6IHN0cmluZyA9IGxleENvbmZpZ05hbWUgfHwgJ2xleC5jb25maWcnO1xuICAgIGxldCBjb25maWdQYXRoOiBzdHJpbmcgPSBsZXhDb25maWcgfHwgJyc7XG4gICAgbGV0IGNvbmZpZ0V4aXN0czogYm9vbGVhbiA9IGxleENvbmZpZyA/IGV4aXN0c1N5bmMoY29uZmlnUGF0aCkgOiBmYWxzZTtcblxuICAgIGlmKCFjb25maWdQYXRoIHx8ICFjb25maWdFeGlzdHMpIHtcbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZyhgU2VhcmNoaW5nIGZvciBjb25maWcgZmlsZXMgd2l0aCBiYXNlIG5hbWU6ICR7Y29uZmlnQmFzZU5hbWV9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIGZvcihjb25zdCBmb3JtYXQgb2YgY29uZmlnRm9ybWF0cykge1xuICAgICAgICBjb25zdCBwb3RlbnRpYWxQYXRoID0gaXNSb290XG4gICAgICAgICAgPyBwYXRoUmVzb2x2ZShjd2QsIGAuLyR7Y29uZmlnQmFzZU5hbWV9LiR7Zm9ybWF0fWApXG4gICAgICAgICAgOiByZWxhdGl2ZUZpbGVQYXRoKGAke2NvbmZpZ0Jhc2VOYW1lfS4ke2Zvcm1hdH1gLCBjd2QpO1xuXG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKGBDaGVja2luZyBmb3IgY29uZmlnIGZpbGU6ICR7cG90ZW50aWFsUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGV4aXN0c1N5bmMocG90ZW50aWFsUGF0aCkpIHtcbiAgICAgICAgICBjb25maWdQYXRoID0gcG90ZW50aWFsUGF0aDtcbiAgICAgICAgICBjb25maWdFeGlzdHMgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoY29uZmlnRXhpc3RzKSB7XG4gICAgICBsb2coYFVzaW5nICR7Y2xpTmFtZX0gY29uZmlndXJhdGlvbiBmaWxlOiAke2NvbmZpZ1BhdGh9YCwgJ25vdGUnLCBxdWlldCk7XG4gICAgICBjb25zdCBleHQ6IHN0cmluZyA9IHBhdGhFeHRuYW1lKGNvbmZpZ1BhdGgpO1xuXG4gICAgICBpZihleHQgPT09ICcuanNvbicpIHtcbiAgICAgICAgY29uc3QgY29uZmlnQ29udGVudDogc3RyaW5nID0gcmVhZEZpbGVTeW5jKGNvbmZpZ1BhdGgsICd1dGY4Jyk7XG5cbiAgICAgICAgaWYoY29uZmlnQ29udGVudCkge1xuICAgICAgICAgIGxldCBjb25maWdKc29uOiBMZXhDb25maWdUeXBlO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbmZpZ0pzb24gPSBKU09OLnBhcnNlKGNvbmZpZ0NvbnRlbnQpPy5kZWZhdWx0IHx8IHt9O1xuICAgICAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRmFpbGVkIHRvIHBhcnNlIEpTT04gY29uZmlnOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgY29uZmlnSnNvbiA9IHt9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIExleENvbmZpZy5hZGRDb25maWdQYXJhbXMoY21kLCBjb25maWdKc29uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENvbmZpZyBmaWxlIG1hbGZvcm1lZCwgJHtjb25maWdQYXRofWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmKFsnLmpzJywgJy5tanMnLCAnLmNqcycsICcudHMnXS5pbmNsdWRlcyhleHQpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbGV0IGxleEN1c3RvbUNvbmZpZztcblxuICAgICAgICAgIGlmKGV4dCA9PT0gJy5janMnKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlVXJsID0gbmV3IFVSTChgZmlsZTovLy8ke3BhdGhSZXNvbHZlKGNvbmZpZ1BhdGgpfWApLmhyZWY7XG5cbiAgICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICAgIGxvZyhgTG9hZGluZyBDb21tb25KUyBjb25maWcgZnJvbTogJHtmaWxlVXJsfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV4Q3VzdG9tQ29uZmlnID0gYXdhaXQgaW1wb3J0KGZpbGVVcmwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgICBsb2coYExvYWRpbmcgRVNNL1RTIGNvbmZpZyBmcm9tOiAke2NvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxleEN1c3RvbUNvbmZpZyA9IGF3YWl0IGltcG9ydChjb25maWdQYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjb25maWcgPSBsZXhDdXN0b21Db25maWcuZGVmYXVsdCB8fCBsZXhDdXN0b21Db25maWc7XG5cbiAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgbG9nKGBMb2FkZWQgY29uZmlnOiAke0pTT04uc3RyaW5naWZ5KGNvbmZpZywgbnVsbCwgMil9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYoIWNvbmZpZykge1xuICAgICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IFdhcm5pbmc6IENvbmZpZyBmaWxlIGxvYWRlZCBidXQgbm8gY29uZmlndXJhdGlvbiBmb3VuZGAsICd3YXJuJywgcXVpZXQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIExleENvbmZpZy5hZGRDb25maWdQYXJhbXMoY21kLCBjb25maWcgfHwge30pO1xuICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBGYWlsZWQgdG8gbG9hZCBjb25maWcgZmlsZTogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBDb25maWcgZmlsZSBtdXN0IGJlIGEgSlMsIENKUywgTUpTLCBUUywgb3IgSlNPTiBmaWxlLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgbG9nKCdObyBjb25maWcgZmlsZSBmb3VuZC4gVXNpbmcgZGVmYXVsdCBjb25maWd1cmF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICBMZXhDb25maWcudXNlVHlwZXNjcmlwdCA9ICEhdHlwZXNjcmlwdDtcbiAgICAgIExleENvbmZpZy5hZGRDb25maWdQYXJhbXMoY21kLCBMZXhDb25maWcuY29uZmlnKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY2hlY2tUeXBlc2NyaXB0Q29uZmlnKCkge1xuICAgIGNvbnN0IHBhY2thZ2VEaXIgPSBnZXRQYWNrYWdlRGlyKCk7XG4gICAgY29uc3QgdHNjb25maWdQYXRoOiBzdHJpbmcgPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCAnLi90c2NvbmZpZy5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ1BhdGgpKSB7XG4gICAgICBjb25zdCBsZXhEaXIgPSBMZXhDb25maWcuZ2V0TGV4RGlyKCk7XG4gICAgICBjb25zdCBiYXNlQ29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGxleERpciwgJ3RzY29uZmlnLmJhc2UuanNvbicpO1xuICAgICAgY29uc3QgdGVtcGxhdGVDb25maWdQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcudGVtcGxhdGUuanNvbicpO1xuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGV4aXN0c1N5bmMoYmFzZUNvbmZpZ1BhdGgpID8gYmFzZUNvbmZpZ1BhdGggOiB0ZW1wbGF0ZUNvbmZpZ1BhdGg7XG5cbiAgICAgIGlmKGV4aXN0c1N5bmMoc291cmNlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ1BhdGgsIHJlYWRGaWxlU3luYyhzb3VyY2VQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldFR5cGVTY3JpcHREZWNsYXJhdGlvbkZsYWdzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IG91dHB1dFBhdGggPSBMZXhDb25maWcuY29uZmlnLm91dHB1dFBhdGggfHwgJy4vbGliJztcbiAgICBjb25zdCBvdXRwdXRGdWxsUGF0aCA9IExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGggfHwgcGF0aFJlc29sdmUoY3dkLCBvdXRwdXRQYXRoKTtcbiAgICBjb25zdCBzb3VyY2VQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5zb3VyY2VQYXRoIHx8ICcuL3NyYyc7XG4gICAgY29uc3Qgc291cmNlRnVsbFBhdGggPSBMZXhDb25maWcuY29uZmlnLnNvdXJjZUZ1bGxQYXRoIHx8IHBhdGhSZXNvbHZlKGN3ZCwgc291cmNlUGF0aCk7XG4gICAgY29uc3QgcmVsYXRpdmVPdXREaXIgPSBwYXRoUmVsYXRpdmUoY3dkLCBvdXRwdXRGdWxsUGF0aCkgfHwgJy4vbGliJztcbiAgICBjb25zdCByZWxhdGl2ZVJvb3REaXIgPSBwYXRoUmVsYXRpdmUoY3dkLCBzb3VyY2VGdWxsUGF0aCkgfHwgJy4vc3JjJztcblxuICAgIHJldHVybiBbXG4gICAgICAnLS1lbWl0RGVjbGFyYXRpb25Pbmx5JywgLy8gQ1JJVElDQUw6IE9ubHkgZW1pdCAuZC50cyBmaWxlcywgbm8gSlMgZmlsZXNcbiAgICAgICctLWRlY2xhcmF0aW9uJywgLy8gR2VuZXJhdGUgZGVjbGFyYXRpb24gZmlsZXNcbiAgICAgICctLWRlY2xhcmF0aW9uTWFwJywgLy8gR2VuZXJhdGUgc291cmNlIG1hcHMgZm9yIGRlY2xhcmF0aW9uc1xuICAgICAgJy0tb3V0RGlyJywgcmVsYXRpdmVPdXREaXIsXG4gICAgICAnLS1yb290RGlyJywgcmVsYXRpdmVSb290RGlyLFxuICAgICAgJy0tc2tpcExpYkNoZWNrJywgLy8gU2tpcCB0eXBlIGNoZWNraW5nIG9mIGRlY2xhcmF0aW9uIGZpbGVzIChmYXN0ZXIsIG1vcmUgbGVuaWVudClcbiAgICAgICctLWVzTW9kdWxlSW50ZXJvcCcsXG4gICAgICAnLS1hbGxvd1N5bnRoZXRpY0RlZmF1bHRJbXBvcnRzJyxcbiAgICAgICctLW1vZHVsZScsICdOb2RlTmV4dCcsXG4gICAgICAnLS1tb2R1bGVSZXNvbHV0aW9uJywgJ05vZGVOZXh0JyxcbiAgICAgICctLXRhcmdldCcsICdFU05leHQnLFxuICAgICAgJy0tanN4JywgJ3JlYWN0LWpzeCcsXG4gICAgICAnLS1pc29sYXRlZE1vZHVsZXMnLFxuICAgICAgJy0tcmVzb2x2ZUpzb25Nb2R1bGUnLFxuICAgICAgJy0tYWxsb3dKcycsXG4gICAgICAnLS1pZ25vcmVDb25maWcnXG4gICAgICAvLyBOb3RlOiAtLW5vVW51c2VkTG9jYWxzIGFuZCAtLW5vVW51c2VkUGFyYW1ldGVycyBhcmUgbm90IG5lZWRlZCBmb3IgZGVjbGFyYXRpb24gZ2VuZXJhdGlvblxuICAgICAgLy8gYW5kIHdvdWxkIGFjdHVhbGx5IGVuYWJsZSBzdHJpY3QgY2hlY2tpbmcsIHdoaWNoIHdlIHdhbnQgdG8gYXZvaWQgZm9yIGZhc3RlciBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBjaGVja0xpbnRUeXBlc2NyaXB0Q29uZmlnKCkge1xuICAgIGNvbnN0IGxleERpciA9IExleENvbmZpZy5nZXRMZXhEaXIoKTtcbiAgICBjb25zdCB0c2NvbmZpZ0xpbnRQYXRoOiBzdHJpbmcgPSBwYXRoUmVzb2x2ZShsZXhEaXIsICcuL3RzY29uZmlnLmxpbnQuanNvbicpO1xuXG4gICAgaWYoIWV4aXN0c1N5bmModHNjb25maWdMaW50UGF0aCkpIHtcbiAgICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHBhdGhSZXNvbHZlKGxleERpciwgJ3RzY29uZmlnLmxpbnQuanNvbicpO1xuICAgICAgaWYoZXhpc3RzU3luYyh0ZW1wbGF0ZVBhdGgpKSB7XG4gICAgICAgIHdyaXRlRmlsZVN5bmModHNjb25maWdMaW50UGF0aCwgcmVhZEZpbGVTeW5jKHRlbXBsYXRlUGF0aCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjaGVja1Rlc3RUeXBlc2NyaXB0Q29uZmlnKCkge1xuICAgIGNvbnN0IGxleERpciA9IExleENvbmZpZy5nZXRMZXhEaXIoKTtcbiAgICBjb25zdCB0c2NvbmZpZ1Rlc3RQYXRoOiBzdHJpbmcgPSBwYXRoUmVzb2x2ZShsZXhEaXIsICcuL3RzY29uZmlnLnRlc3QuanNvbicpO1xuXG4gICAgaWYoIWV4aXN0c1N5bmModHNjb25maWdUZXN0UGF0aCkpIHtcbiAgICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHBhdGhSZXNvbHZlKGxleERpciwgJ3RzY29uZmlnLnRlc3QuanNvbicpO1xuICAgICAgaWYoZXhpc3RzU3luYyh0ZW1wbGF0ZVBhdGgpKSB7XG4gICAgICAgIHdyaXRlRmlsZVN5bmModHNjb25maWdUZXN0UGF0aCwgcmVhZEZpbGVTeW5jKHRlbXBsYXRlUGF0aCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdHlwZSBTV0NPcHRpb25zID0gT3B0aW9ucztcbiJdLCJuYW1lcyI6WyJmaW5kRmlsZVVwIiwiZXhpc3RzU3luYyIsInJlYWRGaWxlU3luYyIsIndyaXRlRmlsZVN5bmMiLCJkaXJuYW1lIiwiZXh0bmFtZSIsInBhdGhFeHRuYW1lIiwicmVsYXRpdmUiLCJwYXRoUmVsYXRpdmUiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJVUkwiLCJnZXRMZXhQYWNrYWdlSnNvblBhdGgiLCJyZWxhdGl2ZUZpbGVQYXRoIiwibG9nIiwiY3dkIiwicHJvY2VzcyIsInJlYWN0Q29tcGlsZXJQbHVnaW5OYW1lIiwiZGVmYXVsdFJlYWN0Q29tcGlsZXJPcHRpb25zIiwiY29tcGlsYXRpb25Nb2RlIiwicGFuaWNUaHJlc2hvbGQiLCJ0YXJnZXQiLCJpc1JlYWN0Q29tcGlsZXJQbHVnaW4iLCJwbHVnaW4iLCJBcnJheSIsImlzQXJyYXkiLCJkZWZhdWx0Q29uZmlnVmFsdWVzIiwiYWkiLCJtYXhUb2tlbnMiLCJtb2RlbCIsInByb3ZpZGVyIiwidGVtcGVyYXR1cmUiLCJjb25maWdGaWxlcyIsImNvcHlGaWxlcyIsImVudHJ5SFRNTCIsImVudHJ5SnMiLCJlbnYiLCJlc2xpbnQiLCJvdXRwdXRGdWxsUGF0aCIsIm91dHB1dEhhc2giLCJvdXRwdXRQYXRoIiwicGFja2FnZU1hbmFnZXIiLCJwcmVzZXQiLCJzb3VyY2VGdWxsUGF0aCIsInNvdXJjZVBhdGgiLCJzd2MiLCJpbmxpbmVTb3VyY2VzQ29udGVudCIsImlzTW9kdWxlIiwianNjIiwiZXh0ZXJuYWxIZWxwZXJzIiwia2VlcENsYXNzTmFtZXMiLCJsb29zZSIsInBhcnNlciIsImRlY29yYXRvcnMiLCJkeW5hbWljSW1wb3J0Iiwic3ludGF4IiwidHN4IiwidHJhbnNmb3JtIiwicmVhY3QiLCJydW50aW1lIiwibWluaWZ5IiwibW9kdWxlIiwibGF6eSIsIm5vSW50ZXJvcCIsInN0cmljdCIsInN0cmljdE1vZGUiLCJ0eXBlIiwic291cmNlTWFwcyIsInRhcmdldEVudmlyb25tZW50IiwidXNlR3JhcGhRbCIsInVzZVR5cGVzY3JpcHQiLCJ2aXRlc3QiLCJ2aXRlIiwic3RhdGljUGF0aCIsImdldFBhY2thZ2VEaXIiLCJjdXJyZW50UGtnUGF0aCIsInBrZyIsIkpTT04iLCJwYXJzZSIsIndvcmtzcGFjZXMiLCJzZWFyY2hEaXIiLCJpIiwicGtnUGF0aCIsInBhcmVudCIsImNvbmZpZ0Zvcm1hdHMiLCJmb3JtYXQiLCJjb25maWdQYXRoIiwic3luYyIsImdldFR5cGVTY3JpcHRDb25maWdQYXRoIiwiY29uZmlnTmFtZSIsInBhY2thZ2VEaXIiLCJwcm9qZWN0QnVpbGRDb25maWciLCJyb290QnVpbGRDb25maWciLCJwcm9qZWN0TGludENvbmZpZyIsInJvb3RMaW50Q29uZmlnIiwicHJvamVjdFRlc3RDb25maWciLCJyb290VGVzdENvbmZpZyIsInByb2plY3RDb25maWdQYXRoIiwicm9vdENvbmZpZ1BhdGgiLCJsZXhEaXIiLCJMZXhDb25maWciLCJnZXRMZXhEaXIiLCJ2YWx1ZSIsImNvbmZpZyIsImluZGV4UGF0aCIsImhhc0luZGV4VHN4IiwiZ2V0U1dDQ29uZmlnV2l0aFJlYWN0Q29tcGlsZXIiLCJzd2NDb25maWciLCJyZWFjdENvbXBpbGVyIiwidW5kZWZpbmVkIiwiY3VycmVudFN3Y0NvbmZpZyIsImN1cnJlbnRKc2MiLCJjdXJyZW50RXhwZXJpbWVudGFsIiwiZXhwZXJpbWVudGFsIiwicGx1Z2lucyIsImZpbHRlciIsInN3Y0NvbmZpZ1dpdGhSZWFjdENvbXBpbGVyIiwidXBkYXRlQ29uZmlnIiwidXBkYXRlZENvbmZpZyIsIkNVUlNPUl9JREUiLCJhZGRDb25maWdQYXJhbXMiLCJjbWQiLCJwYXJhbXMiLCJuYW1lUHJvcGVydHkiLCJlbnZpcm9ubWVudCIsInR5cGVzY3JpcHQiLCJMRVhfQ09ORklHIiwic3RyaW5naWZ5IiwiY29tbWFuZE5hbWUiLCJpc1N0YXRpYyIsInN0YXRpYyIsInBhcnNlQ29uZmlnIiwiaXNSb290IiwiY2xpTmFtZSIsImxleENvbmZpZyIsImxleENvbmZpZ05hbWUiLCJxdWlldCIsImRlYnVnIiwiY29uZmlnQmFzZU5hbWUiLCJjb25maWdFeGlzdHMiLCJwb3RlbnRpYWxQYXRoIiwiZXh0IiwiY29uZmlnQ29udGVudCIsImNvbmZpZ0pzb24iLCJkZWZhdWx0IiwiZXJyb3IiLCJtZXNzYWdlIiwiaW5jbHVkZXMiLCJsZXhDdXN0b21Db25maWciLCJmaWxlVXJsIiwiaHJlZiIsImNvbnNvbGUiLCJjaGVja1R5cGVzY3JpcHRDb25maWciLCJ0c2NvbmZpZ1BhdGgiLCJiYXNlQ29uZmlnUGF0aCIsInRlbXBsYXRlQ29uZmlnUGF0aCIsImdldFR5cGVTY3JpcHREZWNsYXJhdGlvbkZsYWdzIiwicmVsYXRpdmVPdXREaXIiLCJyZWxhdGl2ZVJvb3REaXIiLCJjaGVja0xpbnRUeXBlc2NyaXB0Q29uZmlnIiwidHNjb25maWdMaW50UGF0aCIsInRlbXBsYXRlUGF0aCIsImNoZWNrVGVzdFR5cGVzY3JpcHRDb25maWciLCJ0c2NvbmZpZ1Rl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
|
package/lib/commands/ai/ai.js
CHANGED
|
@@ -50,8 +50,8 @@ const getProjectContext = async (options)=>{
|
|
|
50
50
|
}
|
|
51
51
|
break;
|
|
52
52
|
case 'optimize':
|
|
53
|
-
const
|
|
54
|
-
projectContext += `\n\
|
|
53
|
+
const lexConfig = getFileContext('lex.config.js');
|
|
54
|
+
projectContext += `\n\nLex/Vite configuration:\n${lexConfig}`;
|
|
55
55
|
break;
|
|
56
56
|
default:
|
|
57
57
|
break;
|
|
@@ -299,4 +299,4 @@ export const ai = new Command('ai').description('Use AI to help with development
|
|
|
299
299
|
});
|
|
300
300
|
export default ai;
|
|
301
301
|
|
|
302
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9haS9haS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7Q29tbWFuZH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7cmVhZEZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge3N5bmMgYXMgZ2xvYlN5bmN9IGZyb20gJ2dsb2InO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y2FsbEFJU2VydmljZX0gZnJvbSAnLi4vLi4vdXRpbHMvYWlTZXJ2aWNlLmpzJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi8uLi91dGlscy9sb2cuanMnO1xuXG5pZihwcm9jZXNzLmVudi5DVVJTT1JfRVhURU5TSU9OID09PSAndHJ1ZScgfHxcbiAgcHJvY2Vzcy5lbnYuQ1VSU09SX1RFUk1JTkFMID09PSAndHJ1ZScgfHxcbiAgcHJvY2Vzcy5lbnYuQ1VSU09SX0FQUCA9PT0gJ3RydWUnIHx8XG4gIHByb2Nlc3MuZW52LlBBVEg/LmluY2x1ZGVzKCdjdXJzb3InKSB8fFxuICBwcm9jZXNzLmVudi5DVVJTT1JfU0VTU0lPTl9JRCkge1xuICBwcm9jZXNzLmVudi5DVVJTT1JfSURFID0gJ3RydWUnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbnRleHQ/OiBib29sZWFuO1xuICByZWFkb25seSBmaWxlPzogc3RyaW5nO1xuICByZWFkb25seSBsZXhDb25maWc/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1vZGVsPzogc3RyaW5nO1xuICByZWFkb25seSBwcm9tcHQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdGFzaz86ICdnZW5lcmF0ZScgfCAnZXhwbGFpbicgfCAndGVzdCcgfCAnb3B0aW1pemUnIHwgJ2hlbHAnIHwgJ2FzaycgfCAnYW5hbHl6ZSc7XG4gIHJlYWRvbmx5IGRlYnVnPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcHJvdmlkZXI/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRpcj86IHN0cmluZztcbn1cblxuY29uc3QgZ2V0RmlsZUNvbnRleHQgPSAoZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgcmV0dXJuIGBGaWxlOiAke2ZpbGVQYXRofVxcblxcbiR7Y29udGVudH1gO1xuICB9IGNhdGNoKF9lcnJvcikge1xuICAgIHJldHVybiBgRXJyb3IgcmVhZGluZyBmaWxlOiAke2ZpbGVQYXRofWA7XG4gIH1cbn07XG5cbmNvbnN0IGdldFByb2plY3RDb250ZXh0ID0gYXN5bmMgKG9wdGlvbnM6IEFJT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHtmaWxlLCB0YXNrLCBjb250ZXh0fSA9IG9wdGlvbnM7XG5cbiAgaWYoY29udGV4dCA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBsZXQgcHJvamVjdENvbnRleHQgPSAnJztcblxuICBpZihmaWxlKSB7XG4gICAgcHJvamVjdENvbnRleHQgKz0gZ2V0RmlsZUNvbnRleHQoZmlsZSk7XG4gIH1cblxuICBzd2l0Y2godGFzaykge1xuICAgIGNhc2UgJ2dlbmVyYXRlJzpcbiAgICAgIGNvbnN0IGZpbGVzID0gZ2xvYlN5bmMoJ3NyYy8qKi8qLnt0cyx0c3gsanMsanN4fScsIHtcbiAgICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICBpZ25vcmU6IFsnKiovbm9kZV9tb2R1bGVzLyoqJywgJyoqL2xpYi8qKicsICcqKi9kaXN0LyoqJywgJyoqLyoudGVzdC4qJywgJyoqLyouc3BlYy4qJ10sXG4gICAgICAgIG1heERlcHRoOiAzXG4gICAgICB9KTtcbiAgICAgIHByb2plY3RDb250ZXh0ICs9IGBcXG5cXG5Qcm9qZWN0IHN0cnVjdHVyZTpcXG4ke2ZpbGVzLmpvaW4oJ1xcbicpfWA7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Rlc3QnOlxuICAgICAgaWYoZmlsZSkge1xuICAgICAgICBjb25zdCB0ZXN0Q29uZmlnID0gZ2V0RmlsZUNvbnRleHQoJ3ZpdGVzdC5jb25maWcubWpzJyk7XG4gICAgICAgIHByb2plY3RDb250ZXh0ICs9IGBcXG5cXG5UZXN0IGNvbmZpZ3VyYXRpb246XFxuJHt0ZXN0Q29uZmlnfWA7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGltaXplJzpcbiAgICAgIGNvbnN0IHdlYnBhY2tDb25maWcgPSBnZXRGaWxlQ29udGV4dCgnd2VicGFjay5jb25maWcuanMnKTtcbiAgICAgIHByb2plY3RDb250ZXh0ICs9IGBcXG5cXG5XZWJwYWNrIGNvbmZpZ3VyYXRpb246XFxuJHt3ZWJwYWNrQ29uZmlnfWA7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBwcm9qZWN0Q29udGV4dDtcbn07XG5cbmNvbnN0IGNvbnN0cnVjdFByb21wdCA9IChvcHRpb25zOiBBSU9wdGlvbnMsIHByb2plY3RDb250ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB7dGFzayA9ICdoZWxwJywgcHJvbXB0ID0gJyd9ID0gb3B0aW9ucztcblxuICBjb25zdCB0YXNrSW5zdHJ1Y3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGFuYWx5emU6ICdBbmFseXplIHRoZSBmb2xsb3dpbmcgY29kZTonLFxuICAgIGFzazogJ1Byb3ZpZGUgZ3VpZGFuY2Ugb24gdGhlIGZvbGxvd2luZyBkZXZlbG9wbWVudCBxdWVzdGlvbjonLFxuICAgIGV4cGxhaW46ICdFeHBsYWluIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBkZXRhaWwsIGluY2x1ZGluZyBhbnkgcGF0dGVybnMsIHBvdGVudGlhbCBpc3N1ZXMsIGFuZCBpbXByb3ZlbWVudCBzdWdnZXN0aW9uczonLFxuICAgIGdlbmVyYXRlOiAnR2VuZXJhdGUgY29kZSBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyByZXF1ZXN0LiBNYWtlIHN1cmUgaXQgZm9sbG93cyBiZXN0IHByYWN0aWNlcyBhbmQgaXMgd2VsbCBkb2N1bWVudGVkOicsXG4gICAgaGVscDogJ1Byb3ZpZGUgZ3VpZGFuY2Ugb24gdGhlIGZvbGxvd2luZyBkZXZlbG9wbWVudCBxdWVzdGlvbjonLFxuICAgIG9wdGltaXplOiAnQW5hbHl6ZSB0aGUgZm9sbG93aW5nIGNvZGUvY29uZmlndXJhdGlvbiBhbmQgc3VnZ2VzdCBvcHRpbWl6YXRpb24gaW1wcm92ZW1lbnRzOicsXG4gICAgdGVzdDogJ0dlbmVyYXRlIGNvbXByZWhlbnNpdmUgdW5pdCB0ZXN0cyBmb3IgdGhlIGZvbGxvd2luZyBjb2RlOidcbiAgfTtcblxuICBjb25zdCB0YXNrSW5zdHJ1Y3Rpb24gPSB0YXNrSW5zdHJ1Y3Rpb25zW3Rhc2tdIHx8IHRhc2tJbnN0cnVjdGlvbnMuaGVscDtcblxuICBsZXQgZnVsbFByb21wdCA9IGAke3Rhc2tJbnN0cnVjdGlvbn1cXG5cXG4ke3Byb21wdH1gO1xuXG4gIGlmKHByb2plY3RDb250ZXh0KSB7XG4gICAgZnVsbFByb21wdCArPSBgXFxuXFxuPT09Q09OVEVYVD09PVxcbiR7cHJvamVjdENvbnRleHR9YDtcbiAgfVxuXG4gIHJldHVybiBmdWxsUHJvbXB0O1xufTtcblxuY29uc3QgZGlzcGxheVJlc3BvbnNlID0gKHJlc3BvbnNlOiBhbnksIG9wdGlvbnM6IEFJT3B0aW9ucyk6IHZvaWQgPT4ge1xuICBjb25zdCB7dGFzayA9ICdoZWxwJywgcXVpZXQgPSBmYWxzZX0gPSBvcHRpb25zO1xuXG4gIGxldCBjb250ZW50ID0gJyc7XG5cbiAgaWYodHlwZW9mIHJlc3BvbnNlID09PSAnc3RyaW5nJykge1xuICAgIGNvbnRlbnQgPSByZXNwb25zZTtcbiAgfSBlbHNlIGlmKHJlc3BvbnNlLmNob2ljZXM/LlswXT8ubWVzc2FnZT8uY29udGVudCkge1xuICAgIGNvbnN0IHtjb250ZW50OiBtZXNzYWdlQ29udGVudH0gPSByZXNwb25zZS5jaG9pY2VzWzBdLm1lc3NhZ2U7XG4gICAgY29udGVudCA9IG1lc3NhZ2VDb250ZW50O1xuICB9IGVsc2UgaWYocmVzcG9uc2UuY29udGVudCkge1xuICAgIGNvbnN0IHtjb250ZW50OiByZXNwb25zZUNvbnRlbnR9ID0gcmVzcG9uc2U7XG4gICAgY29udGVudCA9IHJlc3BvbnNlQ29udGVudDtcbiAgfSBlbHNlIHtcbiAgICBjb250ZW50ID0gJ05vIHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gQUkgbW9kZWwnO1xuICB9XG5cbiAgY29uc3QgY2xlYW5lZENvbnRlbnQgPSBjbGVhblJlc3BvbnNlKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG4gIHN3aXRjaCh0YXNrKSB7XG4gICAgY2FzZSAnZ2VuZXJhdGUnOlxuICAgICAgbG9nKCdcXG5HZW5lcmF0ZWQgQ29kZTpcXG4nLCAnc3VjY2VzcycsIHF1aWV0KTtcbiAgICAgIGxvZyhjbGVhbmVkQ29udGVudCwgJ2RlZmF1bHQnLCBxdWlldCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2V4cGxhaW4nOlxuICAgICAgbG9nKCdcXG5Db2RlIEV4cGxhbmF0aW9uOlxcbicsICdzdWNjZXNzJywgcXVpZXQpO1xuICAgICAgbG9nKGNsZWFuZWRDb250ZW50LCAnZGVmYXVsdCcsIHF1aWV0KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGVzdCc6XG4gICAgICBsb2coJ1xcbkdlbmVyYXRlZCBUZXN0czpcXG4nLCAnc3VjY2VzcycsIHF1aWV0KTtcbiAgICAgIGxvZyhjbGVhbmVkQ29udGVudCwgJ2RlZmF1bHQnLCBxdWlldCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGltaXplJzpcbiAgICAgIGxvZygnXFxuT3B0aW1pemF0aW9uIFN1Z2dlc3Rpb25zOlxcbicsICdzdWNjZXNzJywgcXVpZXQpO1xuICAgICAgbG9nKGNsZWFuZWRDb250ZW50LCAnZGVmYXVsdCcsIHF1aWV0KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGxvZygnXFxuQUkgUmVzcG9uc2U6XFxuJywgJ3N1Y2Nlc3MnLCBxdWlldCk7XG4gICAgICBsb2coY2xlYW5lZENvbnRlbnQsICdkZWZhdWx0JywgcXVpZXQpO1xuICAgICAgYnJlYWs7XG4gIH1cbn07XG5cbmNvbnN0IGNsZWFuUmVzcG9uc2UgPSAoY29udGVudDogc3RyaW5nLCBvcHRpb25zOiBBSU9wdGlvbnMpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB7cHJvbXB0ID0gJycsIHRhc2sgPSAnaGVscCd9ID0gb3B0aW9ucztcblxuICBpZighY29udGVudCkge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgbGV0IGNsZWFuZWRDb250ZW50ID0gY29udGVudDtcblxuICBjb25zdCB0YXNrSW5zdHJ1Y3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGFuYWx5emU6ICdBbmFseXplIHRoZSBmb2xsb3dpbmcgY29kZTonLFxuICAgIGFzazogJ1Byb3ZpZGUgZ3VpZGFuY2Ugb24gdGhlIGZvbGxvd2luZyBkZXZlbG9wbWVudCBxdWVzdGlvbjonLFxuICAgIGV4cGxhaW46ICdFeHBsYWluIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBkZXRhaWwsIGluY2x1ZGluZyBhbnkgcGF0dGVybnMsIHBvdGVudGlhbCBpc3N1ZXMsIGFuZCBpbXByb3ZlbWVudCBzdWdnZXN0aW9uczonLFxuICAgIGdlbmVyYXRlOiAnR2VuZXJhdGUgY29kZSBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyByZXF1ZXN0LiBNYWtlIHN1cmUgaXQgZm9sbG93cyBiZXN0IHByYWN0aWNlcyBhbmQgaXMgd2VsbCBkb2N1bWVudGVkOicsXG4gICAgaGVscDogJ1Byb3ZpZGUgZ3VpZGFuY2Ugb24gdGhlIGZvbGxvd2luZyBkZXZlbG9wbWVudCBxdWVzdGlvbjonLFxuICAgIG9wdGltaXplOiAnQW5hbHl6ZSB0aGUgZm9sbG93aW5nIGNvZGUvY29uZmlndXJhdGlvbiBhbmQgc3VnZ2VzdCBvcHRpbWl6YXRpb24gaW1wcm92ZW1lbnRzOicsXG4gICAgdGVzdDogJ0dlbmVyYXRlIGNvbXByZWhlbnNpdmUgdW5pdCB0ZXN0cyBmb3IgdGhlIGZvbGxvd2luZyBjb2RlOidcbiAgfTtcblxuICBjb25zdCBpbnN0cnVjdGlvbiA9IHRhc2tJbnN0cnVjdGlvbnNbdGFza10gfHwgJyc7XG5cbiAgaWYoaW5zdHJ1Y3Rpb24gJiYgY2xlYW5lZENvbnRlbnQuaW5jbHVkZXMoaW5zdHJ1Y3Rpb24pKSB7XG4gICAgY2xlYW5lZENvbnRlbnQgPSBjbGVhbmVkQ29udGVudC5yZXBsYWNlKGluc3RydWN0aW9uLCAnJykudHJpbSgpO1xuICB9XG5cbiAgaWYocHJvbXB0ICYmIGNsZWFuZWRDb250ZW50LmluY2x1ZGVzKHByb21wdCkpIHtcbiAgICBjbGVhbmVkQ29udGVudCA9IGNsZWFuZWRDb250ZW50LnJlcGxhY2UocHJvbXB0LCAnJykudHJpbSgpO1xuICB9XG5cbiAgaWYoY2xlYW5lZENvbnRlbnQuaW5jbHVkZXMoJz09PUNPTlRFWFQ9PT0nKSkge1xuICAgIGNsZWFuZWRDb250ZW50ID0gY2xlYW5lZENvbnRlbnQuc3BsaXQoJz09PUNPTlRFWFQ9PT0nKVswXS50cmltKCk7XG4gIH1cblxuICBpZighY2xlYW5lZENvbnRlbnQpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHJldHVybiBjbGVhbmVkQ29udGVudDtcbn07XG5cbmNvbnN0IGdldFByb3ZpZGVyQXV0aCA9IChwcm92aWRlcjogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYocHJvY2Vzcy5jd2QoKS5pbmNsdWRlcygncmVha3RvcicpKSB7XG4gICAgcmV0dXJuICdjdXJzb3ItYXV0aCc7XG4gIH1cblxuICBpZihwcm9jZXNzLmVudi5BSV9BUElfS0VZKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LkFJX0FQSV9LRVk7XG4gIH1cblxuICBpZihwcm92aWRlciA9PT0gJ25vbmUnICYmIHByb2Nlc3MuZW52LkNVUlNPUl9JREUgPT09ICd0cnVlJykge1xuICAgIHJldHVybiAnY3Vyc29yLWF1dGgnO1xuICB9XG5cbiAgc3dpdGNoKHByb3ZpZGVyKSB7XG4gICAgY2FzZSAnb3BlbmFpJzpcbiAgICAgIHJldHVybiBwcm9jZXNzLmVudi5PUEVOQUlfQVBJX0tFWTtcbiAgICBjYXNlICdhbnRocm9waWMnOlxuICAgICAgcmV0dXJuIHByb2Nlc3MuZW52LkFOVEhST1BJQ19BUElfS0VZO1xuICAgIGNhc2UgJ2N1cnNvcic6XG4gICAgICByZXR1cm4gJ2N1cnNvci1hdXRoJztcbiAgICBjYXNlICdjb3BpbG90JzpcbiAgICAgIHJldHVybiBwcm9jZXNzLmVudi5HSVRIVUJfVE9LRU47XG4gICAgY2FzZSAnbm9uZSc6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59O1xuXG5jb25zdCBkZXRlY3RDdXJzb3JJREUgPSAoKTogYm9vbGVhbiA9PiB7XG4gIGlmKHByb2Nlc3MuZW52LkNVUlNPUl9JREUgPT09ICd0cnVlJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgcG9zc2libGVDdXJzb3JTaWduYWxzID0gW1xuICAgIHByb2Nlc3MuZW52LkNVUlNPUl9FWFRFTlNJT04gPT09ICd0cnVlJyxcbiAgICBwcm9jZXNzLmVudi5DVVJTT1JfVEVSTUlOQUwgPT09ICd0cnVlJyxcbiAgICBwcm9jZXNzLmVudi5DVVJTT1JfQVBQID09PSAndHJ1ZScsXG4gICAgcHJvY2Vzcy5lbnYuUEFUSD8uaW5jbHVkZXMoJ2N1cnNvcicpLFxuICAgICEhcHJvY2Vzcy5lbnYuQ1VSU09SX1NFU1NJT05fSURcbiAgXTtcblxuICBjb25zdCBpc0N1cnNvcklERSA9IHBvc3NpYmxlQ3Vyc29yU2lnbmFscy5zb21lKChzaWduYWwpID0+IHNpZ25hbCk7XG5cbiAgaWYoaXNDdXJzb3JJREUpIHtcbiAgICBwcm9jZXNzLmVudi5DVVJTT1JfSURFID0gJ3RydWUnO1xuICB9XG5cbiAgcmV0dXJuIGlzQ3Vyc29ySURFO1xufTtcblxuZXhwb3J0IGNvbnN0IGFpRnVuY3Rpb24gPSBhc3luYyAob3B0aW9uczogQUlPcHRpb25zKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb25maWcgPSBMZXhDb25maWcuY29uZmlnIHx8IHt9O1xuICAgIGNvbnN0IGFpQ29uZmlnID0gY29uZmlnLmFpIHx8IHt9O1xuICAgIGNvbnN0IHByb3ZpZGVyID0gb3B0aW9ucy5wcm92aWRlciB8fCBhaUNvbmZpZy5wcm92aWRlciB8fCAnbm9uZSc7XG5cbiAgICBpZihwcm92aWRlciA9PT0gJ25vbmUnICYmICFwcm9jZXNzLmVudi5DVVJTT1JfRVhURU5TSU9OKSB7XG4gICAgICBsb2coYCR7Y2hhbGsucmVkKCdFcnJvcjonKX0gTm8gQUkgcHJvdmlkZXIgY29uZmlndXJlZC5gLCAnZXJyb3InKTtcbiAgICAgIHJldHVybiB7ZXJyb3I6ICdObyBBSSBwcm92aWRlciBjb25maWd1cmVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdGFzayA9IG9wdGlvbnMudGFzayB8fCAnYXNrJztcbiAgICBjb25zdCB2YWxpZFRhc2tzID0gWydleHBsYWluJywgJ2dlbmVyYXRlJywgJ3Rlc3QnLCAnYW5hbHl6ZScsICdhc2snXTtcblxuICAgIGlmKCF2YWxpZFRhc2tzLmluY2x1ZGVzKHRhc2spKSB7XG4gICAgICBsb2coYCR7Y2hhbGsucmVkKCdFcnJvcjonKX0gSW52YWxpZCB0YXNrIFwiJHt0YXNrfVwiLiBWYWxpZCB0YXNrcyBhcmU6ICR7dmFsaWRUYXNrcy5qb2luKCcsICcpfWAsICdlcnJvcicpO1xuICAgICAgcmV0dXJuIHtlcnJvcjogYEludmFsaWQgdGFzayBcIiR7dGFza31cImB9O1xuICAgIH1cblxuICAgIGNvbnN0IHtwcm9tcHR9ID0gb3B0aW9ucztcblxuICAgIGlmKCFwcm9tcHQpIHtcbiAgICAgIGxvZyhgJHtjaGFsay5yZWQoJ0Vycm9yOicpfSBObyBwcm9tcHQgcHJvdmlkZWQuIFVzZSAtLXByb21wdCBcIllvdXIgcHJvbXB0IGhlcmVcImAsICdlcnJvcicpO1xuICAgICAgcmV0dXJuIHtlcnJvcjogJ05vIHByb21wdCBwcm92aWRlZCd9O1xuICAgIH1cblxuICAgIGxldCBjb250ZXh0ID0gJyc7XG5cbiAgICBpZihvcHRpb25zLmZpbGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZzID0gYXdhaXQgaW1wb3J0KCdmcy9wcm9taXNlcycpO1xuICAgICAgICBjb25zdCBnbG9iID0gYXdhaXQgaW1wb3J0KCdnbG9iJyk7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZ2xvYi5nbG9iKG9wdGlvbnMuZmlsZSk7XG5cbiAgICAgICAgaWYoZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgbG9nKGAke2NoYWxrLnllbGxvdygnV2FybmluZzonKX0gTm8gZmlsZXMgZm91bmQgbWF0Y2hpbmcgXCIke29wdGlvbnMuZmlsZX1cImAsICd3YXJuaW5nJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlLCAndXRmOCcpO1xuICAgICAgICAgICAgY29udGV4dCArPSBgXFxuPT09RklMRTogJHtmaWxlfT09PVxcbiR7Y29udGVudH1cXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBsb2coYCR7Y2hhbGsueWVsbG93KCdXYXJuaW5nOicpfSBFcnJvciByZWFkaW5nIGZpbGU6ICR7ZXJyb3IubWVzc2FnZX1gLCAnd2FybmluZycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKG9wdGlvbnMuZGlyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7ZXhlY2FTeW5jfSA9IGF3YWl0IGltcG9ydCgnZXhlY2EnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZXhlY2FTeW5jKCdmaW5kJywgW29wdGlvbnMuZGlyLCAnLXR5cGUnLCAnZicsICd8JywgJ3NvcnQnXSk7XG4gICAgICAgIGNvbnRleHQgKz0gYFxcbj09PVByb2plY3Qgc3RydWN0dXJlOj09PVxcbiR7cmVzdWx0LnN0ZG91dH1cXG5gO1xuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBsb2coYCR7Y2hhbGsueWVsbG93KCdXYXJuaW5nOicpfSBFcnJvciByZWFkaW5nIGRpcmVjdG9yeTogJHtlcnJvci5tZXNzYWdlfWAsICd3YXJuaW5nJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGZvcm1hdHRlZFByb21wdCA9ICcnO1xuXG4gICAgc3dpdGNoKHRhc2spIHtcbiAgICAgIGNhc2UgJ2V4cGxhaW4nOlxuICAgICAgICBmb3JtYXR0ZWRQcm9tcHQgPSBgRXhwbGFpbiB0aGUgZm9sbG93aW5nIGNvZGU6XFxuJHtwcm9tcHR9YDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdnZW5lcmF0ZSc6XG4gICAgICAgIGZvcm1hdHRlZFByb21wdCA9IGBHZW5lcmF0ZSBjb2RlIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHJlcXVlc3Q6XFxuJHtwcm9tcHR9YDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0ZXN0JzpcbiAgICAgICAgZm9ybWF0dGVkUHJvbXB0ID0gYEdlbmVyYXRlIGNvbXByZWhlbnNpdmUgdW5pdCB0ZXN0czpcXG4ke3Byb21wdH1gO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FuYWx5emUnOlxuICAgICAgICBmb3JtYXR0ZWRQcm9tcHQgPSBgQW5hbHl6ZSB0aGUgZm9sbG93aW5nIGNvZGU6XFxuJHtwcm9tcHR9YDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhc2snOlxuICAgICAgICBmb3JtYXR0ZWRQcm9tcHQgPSBgUHJvdmlkZSBndWlkYW5jZSBvbiB0aGUgZm9sbG93aW5nIGRldmVsb3BtZW50IHF1ZXN0aW9uOlxcbiR7cHJvbXB0fWA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmKGNvbnRleHQpIHtcbiAgICAgIGZvcm1hdHRlZFByb21wdCArPSBgXFxuPT09Q09OVEVYVD09PVxcbiR7Y29udGV4dH1gO1xuICAgIH1cblxuICAgIGlmKChwcm92aWRlciA9PT0gJ2N1cnNvcicgfHwgcHJvY2Vzcy5lbnYuQ1VSU09SX0VYVEVOU0lPTikgJiYgdGFzayA9PT0gJ2dlbmVyYXRlJykge1xuICAgICAgbG9nKCdVc2luZyBDdXJzb3IgSURFIGZvciBjb2RlIGdlbmVyYXRpb24uLi4nLCAnaW5mbycpO1xuICAgICAgbG9nKCdOb3RlOiBGb3IgZnVsbCBjb2RlIGdlbmVyYXRpb24gY2FwYWJpbGl0aWVzLCBwbGVhc2UgdXNlIEN1cnNvciBJREUgZGlyZWN0bHkgd2l0aCBDbWQrTCBvciBDbWQrSy4nLCAnaW5mbycpO1xuICAgICAgbG9nKCdUaGUgQ0xJIGludGVncmF0aW9uIGhhcyBsaW1pdGVkIGNhcGFiaWxpdGllcyBmb3IgY29kZSBnZW5lcmF0aW9uLicsICd3YXJuaW5nJyk7XG4gICAgfSBlbHNlIGlmKHByb3ZpZGVyID09PSAnY3Vyc29yJyB8fCBwcm9jZXNzLmVudi5DVVJTT1JfRVhURU5TSU9OKSB7XG4gICAgICBsb2coJ1VzaW5nIEN1cnNvciBJREUgZm9yIEFJIGFzc2lzdGFuY2UuLi4nLCAnaW5mbycpO1xuICAgICAgbG9nKCdOb3RlOiBUaGlzIGlzIGEgbGltaXRlZCBpbnRlZ3JhdGlvbi4gRm9yIGZ1bGwgQUkgY2FwYWJpbGl0aWVzLCB1c2UgQ3Vyc29yIElERSBkaXJlY3RseS4nLCAnaW5mbycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2coYFVzaW5nICR7cHJvdmlkZXJ9IGZvciBBSSBhc3Npc3RhbmNlLi4uYCwgJ2luZm8nKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNhbGxBSVNlcnZpY2UoZm9ybWF0dGVkUHJvbXB0LCBvcHRpb25zLnF1aWV0IHx8IGZhbHNlKTtcblxuICAgIGxvZyhgXFxuJHtyZXNwb25zZX1gLCAnc3VjY2VzcycpO1xuXG4gICAgcmV0dXJuIHtyZXNwb25zZX07XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYCR7Y2hhbGsucmVkKCdFcnJvcjonKX0gJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicpO1xuICAgIHJldHVybiB7ZXJyb3I6IGVycm9yLm1lc3NhZ2V9O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYWkgPSBuZXcgQ29tbWFuZCgnYWknKVxuICAuZGVzY3JpcHRpb24oJ1VzZSBBSSB0byBoZWxwIHdpdGggZGV2ZWxvcG1lbnQgdGFza3MnKVxuICAub3B0aW9uKCctLXByb3ZpZGVyIDxwcm92aWRlcj4nLCAnQUkgcHJvdmlkZXIgdG8gdXNlIChvcGVuYWksIGFudGhyb3BpYywgY3Vyc29yKScpXG4gIC5vcHRpb24oJy0tdGFzayA8dGFzaz4nLCAnVGFzayB0byBwZXJmb3JtIChleHBsYWluLCBnZW5lcmF0ZSwgdGVzdCwgYW5hbHl6ZSwgYXNrKScpXG4gIC5vcHRpb24oJy0tcHJvbXB0IDxwcm9tcHQ+JywgJ1Byb21wdCB0byBzZW5kIHRvIEFJJylcbiAgLm9wdGlvbignLS1maWxlIDxmaWxlPicsICdGaWxlIHRvIGFuYWx5emUnKVxuICAub3B0aW9uKCctLWRpciA8ZGlyPicsICdEaXJlY3RvcnkgdG8gYW5hbHl6ZScpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IEFJT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IGFpRnVuY3Rpb24ob3B0aW9ucyk7XG4gIH0pO1xuXG5leHBvcnQgZGVmYXVsdCBhaTtcbiJdLCJuYW1lcyI6WyJjaGFsayIsIkNvbW1hbmQiLCJyZWFkRmlsZVN5bmMiLCJzeW5jIiwiZ2xvYlN5bmMiLCJMZXhDb25maWciLCJjYWxsQUlTZXJ2aWNlIiwibG9nIiwicHJvY2VzcyIsImVudiIsIkNVUlNPUl9FWFRFTlNJT04iLCJDVVJTT1JfVEVSTUlOQUwiLCJDVVJTT1JfQVBQIiwiUEFUSCIsImluY2x1ZGVzIiwiQ1VSU09SX1NFU1NJT05fSUQiLCJDVVJTT1JfSURFIiwiZ2V0RmlsZUNvbnRleHQiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJfZXJyb3IiLCJnZXRQcm9qZWN0Q29udGV4dCIsIm9wdGlvbnMiLCJmaWxlIiwidGFzayIsImNvbnRleHQiLCJwcm9qZWN0Q29udGV4dCIsImZpbGVzIiwiY3dkIiwiaWdub3JlIiwibWF4RGVwdGgiLCJqb2luIiwidGVzdENvbmZpZyIsIndlYnBhY2tDb25maWciLCJjb25zdHJ1Y3RQcm9tcHQiLCJwcm9tcHQiLCJ0YXNrSW5zdHJ1Y3Rpb25zIiwiYW5hbHl6ZSIsImFzayIsImV4cGxhaW4iLCJnZW5lcmF0ZSIsImhlbHAiLCJvcHRpbWl6ZSIsInRlc3QiLCJ0YXNrSW5zdHJ1Y3Rpb24iLCJmdWxsUHJvbXB0IiwiZGlzcGxheVJlc3BvbnNlIiwicmVzcG9uc2UiLCJxdWlldCIsImNob2ljZXMiLCJtZXNzYWdlIiwibWVzc2FnZUNvbnRlbnQiLCJyZXNwb25zZUNvbnRlbnQiLCJjbGVhbmVkQ29udGVudCIsImNsZWFuUmVzcG9uc2UiLCJpbnN0cnVjdGlvbiIsInJlcGxhY2UiLCJ0cmltIiwic3BsaXQiLCJnZXRQcm92aWRlckF1dGgiLCJwcm92aWRlciIsIkFJX0FQSV9LRVkiLCJPUEVOQUlfQVBJX0tFWSIsIkFOVEhST1BJQ19BUElfS0VZIiwiR0lUSFVCX1RPS0VOIiwidW5kZWZpbmVkIiwiZGV0ZWN0Q3Vyc29ySURFIiwicG9zc2libGVDdXJzb3JTaWduYWxzIiwiaXNDdXJzb3JJREUiLCJzb21lIiwic2lnbmFsIiwiYWlGdW5jdGlvbiIsImNvbmZpZyIsImFpQ29uZmlnIiwiYWkiLCJyZWQiLCJlcnJvciIsInZhbGlkVGFza3MiLCJmcyIsImdsb2IiLCJsZW5ndGgiLCJ5ZWxsb3ciLCJyZWFkRmlsZSIsImRpciIsImV4ZWNhU3luYyIsInJlc3VsdCIsInN0ZG91dCIsImZvcm1hdHRlZFByb21wdCIsImRlc2NyaXB0aW9uIiwib3B0aW9uIiwiYWN0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxPQUFPQSxXQUFXLFFBQVE7QUFDMUIsU0FBUUMsT0FBTyxRQUFPLFlBQVk7QUFDbEMsU0FBUUMsWUFBWSxRQUFPLEtBQUs7QUFDaEMsU0FBUUMsUUFBUUMsUUFBUSxRQUFPLE9BQU87QUFFdEMsU0FBUUMsU0FBUyxRQUFPLHFCQUFxQjtBQUM3QyxTQUFRQyxhQUFhLFFBQU8sMkJBQTJCO0FBQ3ZELFNBQVFDLEdBQUcsUUFBTyxxQkFBcUI7QUFFdkMsSUFBR0MsUUFBUUMsR0FBRyxDQUFDQyxnQkFBZ0IsS0FBSyxVQUNsQ0YsUUFBUUMsR0FBRyxDQUFDRSxlQUFlLEtBQUssVUFDaENILFFBQVFDLEdBQUcsQ0FBQ0csVUFBVSxLQUFLLFVBQzNCSixRQUFRQyxHQUFHLENBQUNJLElBQUksRUFBRUMsU0FBUyxhQUMzQk4sUUFBUUMsR0FBRyxDQUFDTSxpQkFBaUIsRUFBRTtJQUMvQlAsUUFBUUMsR0FBRyxDQUFDTyxVQUFVLEdBQUc7QUFDM0I7QUFnQkEsTUFBTUMsaUJBQWlCLENBQUNDO0lBQ3RCLElBQUk7UUFDRixNQUFNQyxVQUFVakIsYUFBYWdCLFVBQVU7UUFDdkMsT0FBTyxDQUFDLE1BQU0sRUFBRUEsU0FBUyxJQUFJLEVBQUVDLFNBQVM7SUFDMUMsRUFBRSxPQUFNQyxRQUFRO1FBQ2QsT0FBTyxDQUFDLG9CQUFvQixFQUFFRixVQUFVO0lBQzFDO0FBQ0Y7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
|
|
302
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9haS9haS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7Q29tbWFuZH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7cmVhZEZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge3N5bmMgYXMgZ2xvYlN5bmN9IGZyb20gJ2dsb2InO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y2FsbEFJU2VydmljZX0gZnJvbSAnLi4vLi4vdXRpbHMvYWlTZXJ2aWNlLmpzJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi8uLi91dGlscy9sb2cuanMnO1xuXG5pZihwcm9jZXNzLmVudi5DVVJTT1JfRVhURU5TSU9OID09PSAndHJ1ZScgfHxcbiAgcHJvY2Vzcy5lbnYuQ1VSU09SX1RFUk1JTkFMID09PSAndHJ1ZScgfHxcbiAgcHJvY2Vzcy5lbnYuQ1VSU09SX0FQUCA9PT0gJ3RydWUnIHx8XG4gIHByb2Nlc3MuZW52LlBBVEg/LmluY2x1ZGVzKCdjdXJzb3InKSB8fFxuICBwcm9jZXNzLmVudi5DVVJTT1JfU0VTU0lPTl9JRCkge1xuICBwcm9jZXNzLmVudi5DVVJTT1JfSURFID0gJ3RydWUnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbnRleHQ/OiBib29sZWFuO1xuICByZWFkb25seSBmaWxlPzogc3RyaW5nO1xuICByZWFkb25seSBsZXhDb25maWc/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1vZGVsPzogc3RyaW5nO1xuICByZWFkb25seSBwcm9tcHQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdGFzaz86ICdnZW5lcmF0ZScgfCAnZXhwbGFpbicgfCAndGVzdCcgfCAnb3B0aW1pemUnIHwgJ2hlbHAnIHwgJ2FzaycgfCAnYW5hbHl6ZSc7XG4gIHJlYWRvbmx5IGRlYnVnPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcHJvdmlkZXI/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRpcj86IHN0cmluZztcbn1cblxuY29uc3QgZ2V0RmlsZUNvbnRleHQgPSAoZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgcmV0dXJuIGBGaWxlOiAke2ZpbGVQYXRofVxcblxcbiR7Y29udGVudH1gO1xuICB9IGNhdGNoKF9lcnJvcikge1xuICAgIHJldHVybiBgRXJyb3IgcmVhZGluZyBmaWxlOiAke2ZpbGVQYXRofWA7XG4gIH1cbn07XG5cbmNvbnN0IGdldFByb2plY3RDb250ZXh0ID0gYXN5bmMgKG9wdGlvbnM6IEFJT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHtmaWxlLCB0YXNrLCBjb250ZXh0fSA9IG9wdGlvbnM7XG5cbiAgaWYoY29udGV4dCA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBsZXQgcHJvamVjdENvbnRleHQgPSAnJztcblxuICBpZihmaWxlKSB7XG4gICAgcHJvamVjdENvbnRleHQgKz0gZ2V0RmlsZUNvbnRleHQoZmlsZSk7XG4gIH1cblxuICBzd2l0Y2godGFzaykge1xuICAgIGNhc2UgJ2dlbmVyYXRlJzpcbiAgICAgIGNvbnN0IGZpbGVzID0gZ2xvYlN5bmMoJ3NyYy8qKi8qLnt0cyx0c3gsanMsanN4fScsIHtcbiAgICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICBpZ25vcmU6IFsnKiovbm9kZV9tb2R1bGVzLyoqJywgJyoqL2xpYi8qKicsICcqKi9kaXN0LyoqJywgJyoqLyoudGVzdC4qJywgJyoqLyouc3BlYy4qJ10sXG4gICAgICAgIG1heERlcHRoOiAzXG4gICAgICB9KTtcbiAgICAgIHByb2plY3RDb250ZXh0ICs9IGBcXG5cXG5Qcm9qZWN0IHN0cnVjdHVyZTpcXG4ke2ZpbGVzLmpvaW4oJ1xcbicpfWA7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Rlc3QnOlxuICAgICAgaWYoZmlsZSkge1xuICAgICAgICBjb25zdCB0ZXN0Q29uZmlnID0gZ2V0RmlsZUNvbnRleHQoJ3ZpdGVzdC5jb25maWcubWpzJyk7XG4gICAgICAgIHByb2plY3RDb250ZXh0ICs9IGBcXG5cXG5UZXN0IGNvbmZpZ3VyYXRpb246XFxuJHt0ZXN0Q29uZmlnfWA7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGltaXplJzpcbiAgICAgIGNvbnN0IGxleENvbmZpZyA9IGdldEZpbGVDb250ZXh0KCdsZXguY29uZmlnLmpzJyk7XG4gICAgICBwcm9qZWN0Q29udGV4dCArPSBgXFxuXFxuTGV4L1ZpdGUgY29uZmlndXJhdGlvbjpcXG4ke2xleENvbmZpZ31gO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gcHJvamVjdENvbnRleHQ7XG59O1xuXG5jb25zdCBjb25zdHJ1Y3RQcm9tcHQgPSAob3B0aW9uczogQUlPcHRpb25zLCBwcm9qZWN0Q29udGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3Qge3Rhc2sgPSAnaGVscCcsIHByb21wdCA9ICcnfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgdGFza0luc3RydWN0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBhbmFseXplOiAnQW5hbHl6ZSB0aGUgZm9sbG93aW5nIGNvZGU6JyxcbiAgICBhc2s6ICdQcm92aWRlIGd1aWRhbmNlIG9uIHRoZSBmb2xsb3dpbmcgZGV2ZWxvcG1lbnQgcXVlc3Rpb246JyxcbiAgICBleHBsYWluOiAnRXhwbGFpbiB0aGUgZm9sbG93aW5nIGNvZGUgaW4gZGV0YWlsLCBpbmNsdWRpbmcgYW55IHBhdHRlcm5zLCBwb3RlbnRpYWwgaXNzdWVzLCBhbmQgaW1wcm92ZW1lbnQgc3VnZ2VzdGlvbnM6JyxcbiAgICBnZW5lcmF0ZTogJ0dlbmVyYXRlIGNvZGUgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgcmVxdWVzdC4gTWFrZSBzdXJlIGl0IGZvbGxvd3MgYmVzdCBwcmFjdGljZXMgYW5kIGlzIHdlbGwgZG9jdW1lbnRlZDonLFxuICAgIGhlbHA6ICdQcm92aWRlIGd1aWRhbmNlIG9uIHRoZSBmb2xsb3dpbmcgZGV2ZWxvcG1lbnQgcXVlc3Rpb246JyxcbiAgICBvcHRpbWl6ZTogJ0FuYWx5emUgdGhlIGZvbGxvd2luZyBjb2RlL2NvbmZpZ3VyYXRpb24gYW5kIHN1Z2dlc3Qgb3B0aW1pemF0aW9uIGltcHJvdmVtZW50czonLFxuICAgIHRlc3Q6ICdHZW5lcmF0ZSBjb21wcmVoZW5zaXZlIHVuaXQgdGVzdHMgZm9yIHRoZSBmb2xsb3dpbmcgY29kZTonXG4gIH07XG5cbiAgY29uc3QgdGFza0luc3RydWN0aW9uID0gdGFza0luc3RydWN0aW9uc1t0YXNrXSB8fCB0YXNrSW5zdHJ1Y3Rpb25zLmhlbHA7XG5cbiAgbGV0IGZ1bGxQcm9tcHQgPSBgJHt0YXNrSW5zdHJ1Y3Rpb259XFxuXFxuJHtwcm9tcHR9YDtcblxuICBpZihwcm9qZWN0Q29udGV4dCkge1xuICAgIGZ1bGxQcm9tcHQgKz0gYFxcblxcbj09PUNPTlRFWFQ9PT1cXG4ke3Byb2plY3RDb250ZXh0fWA7XG4gIH1cblxuICByZXR1cm4gZnVsbFByb21wdDtcbn07XG5cbmNvbnN0IGRpc3BsYXlSZXNwb25zZSA9IChyZXNwb25zZTogYW55LCBvcHRpb25zOiBBSU9wdGlvbnMpOiB2b2lkID0+IHtcbiAgY29uc3Qge3Rhc2sgPSAnaGVscCcsIHF1aWV0ID0gZmFsc2V9ID0gb3B0aW9ucztcblxuICBsZXQgY29udGVudCA9ICcnO1xuXG4gIGlmKHR5cGVvZiByZXNwb25zZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb250ZW50ID0gcmVzcG9uc2U7XG4gIH0gZWxzZSBpZihyZXNwb25zZS5jaG9pY2VzPy5bMF0/Lm1lc3NhZ2U/LmNvbnRlbnQpIHtcbiAgICBjb25zdCB7Y29udGVudDogbWVzc2FnZUNvbnRlbnR9ID0gcmVzcG9uc2UuY2hvaWNlc1swXS5tZXNzYWdlO1xuICAgIGNvbnRlbnQgPSBtZXNzYWdlQ29udGVudDtcbiAgfSBlbHNlIGlmKHJlc3BvbnNlLmNvbnRlbnQpIHtcbiAgICBjb25zdCB7Y29udGVudDogcmVzcG9uc2VDb250ZW50fSA9IHJlc3BvbnNlO1xuICAgIGNvbnRlbnQgPSByZXNwb25zZUNvbnRlbnQ7XG4gIH0gZWxzZSB7XG4gICAgY29udGVudCA9ICdObyByZXNwb25zZSByZWNlaXZlZCBmcm9tIEFJIG1vZGVsJztcbiAgfVxuXG4gIGNvbnN0IGNsZWFuZWRDb250ZW50ID0gY2xlYW5SZXNwb25zZShjb250ZW50LCBvcHRpb25zKTtcblxuICBzd2l0Y2godGFzaykge1xuICAgIGNhc2UgJ2dlbmVyYXRlJzpcbiAgICAgIGxvZygnXFxuR2VuZXJhdGVkIENvZGU6XFxuJywgJ3N1Y2Nlc3MnLCBxdWlldCk7XG4gICAgICBsb2coY2xlYW5lZENvbnRlbnQsICdkZWZhdWx0JywgcXVpZXQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdleHBsYWluJzpcbiAgICAgIGxvZygnXFxuQ29kZSBFeHBsYW5hdGlvbjpcXG4nLCAnc3VjY2VzcycsIHF1aWV0KTtcbiAgICAgIGxvZyhjbGVhbmVkQ29udGVudCwgJ2RlZmF1bHQnLCBxdWlldCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Rlc3QnOlxuICAgICAgbG9nKCdcXG5HZW5lcmF0ZWQgVGVzdHM6XFxuJywgJ3N1Y2Nlc3MnLCBxdWlldCk7XG4gICAgICBsb2coY2xlYW5lZENvbnRlbnQsICdkZWZhdWx0JywgcXVpZXQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpbWl6ZSc6XG4gICAgICBsb2coJ1xcbk9wdGltaXphdGlvbiBTdWdnZXN0aW9uczpcXG4nLCAnc3VjY2VzcycsIHF1aWV0KTtcbiAgICAgIGxvZyhjbGVhbmVkQ29udGVudCwgJ2RlZmF1bHQnLCBxdWlldCk7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBsb2coJ1xcbkFJIFJlc3BvbnNlOlxcbicsICdzdWNjZXNzJywgcXVpZXQpO1xuICAgICAgbG9nKGNsZWFuZWRDb250ZW50LCAnZGVmYXVsdCcsIHF1aWV0KTtcbiAgICAgIGJyZWFrO1xuICB9XG59O1xuXG5jb25zdCBjbGVhblJlc3BvbnNlID0gKGNvbnRlbnQ6IHN0cmluZywgb3B0aW9uczogQUlPcHRpb25zKTogc3RyaW5nID0+IHtcbiAgY29uc3Qge3Byb21wdCA9ICcnLCB0YXNrID0gJ2hlbHAnfSA9IG9wdGlvbnM7XG5cbiAgaWYoIWNvbnRlbnQpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGxldCBjbGVhbmVkQ29udGVudCA9IGNvbnRlbnQ7XG5cbiAgY29uc3QgdGFza0luc3RydWN0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBhbmFseXplOiAnQW5hbHl6ZSB0aGUgZm9sbG93aW5nIGNvZGU6JyxcbiAgICBhc2s6ICdQcm92aWRlIGd1aWRhbmNlIG9uIHRoZSBmb2xsb3dpbmcgZGV2ZWxvcG1lbnQgcXVlc3Rpb246JyxcbiAgICBleHBsYWluOiAnRXhwbGFpbiB0aGUgZm9sbG93aW5nIGNvZGUgaW4gZGV0YWlsLCBpbmNsdWRpbmcgYW55IHBhdHRlcm5zLCBwb3RlbnRpYWwgaXNzdWVzLCBhbmQgaW1wcm92ZW1lbnQgc3VnZ2VzdGlvbnM6JyxcbiAgICBnZW5lcmF0ZTogJ0dlbmVyYXRlIGNvZGUgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgcmVxdWVzdC4gTWFrZSBzdXJlIGl0IGZvbGxvd3MgYmVzdCBwcmFjdGljZXMgYW5kIGlzIHdlbGwgZG9jdW1lbnRlZDonLFxuICAgIGhlbHA6ICdQcm92aWRlIGd1aWRhbmNlIG9uIHRoZSBmb2xsb3dpbmcgZGV2ZWxvcG1lbnQgcXVlc3Rpb246JyxcbiAgICBvcHRpbWl6ZTogJ0FuYWx5emUgdGhlIGZvbGxvd2luZyBjb2RlL2NvbmZpZ3VyYXRpb24gYW5kIHN1Z2dlc3Qgb3B0aW1pemF0aW9uIGltcHJvdmVtZW50czonLFxuICAgIHRlc3Q6ICdHZW5lcmF0ZSBjb21wcmVoZW5zaXZlIHVuaXQgdGVzdHMgZm9yIHRoZSBmb2xsb3dpbmcgY29kZTonXG4gIH07XG5cbiAgY29uc3QgaW5zdHJ1Y3Rpb24gPSB0YXNrSW5zdHJ1Y3Rpb25zW3Rhc2tdIHx8ICcnO1xuXG4gIGlmKGluc3RydWN0aW9uICYmIGNsZWFuZWRDb250ZW50LmluY2x1ZGVzKGluc3RydWN0aW9uKSkge1xuICAgIGNsZWFuZWRDb250ZW50ID0gY2xlYW5lZENvbnRlbnQucmVwbGFjZShpbnN0cnVjdGlvbiwgJycpLnRyaW0oKTtcbiAgfVxuXG4gIGlmKHByb21wdCAmJiBjbGVhbmVkQ29udGVudC5pbmNsdWRlcyhwcm9tcHQpKSB7XG4gICAgY2xlYW5lZENvbnRlbnQgPSBjbGVhbmVkQ29udGVudC5yZXBsYWNlKHByb21wdCwgJycpLnRyaW0oKTtcbiAgfVxuXG4gIGlmKGNsZWFuZWRDb250ZW50LmluY2x1ZGVzKCc9PT1DT05URVhUPT09JykpIHtcbiAgICBjbGVhbmVkQ29udGVudCA9IGNsZWFuZWRDb250ZW50LnNwbGl0KCc9PT1DT05URVhUPT09JylbMF0udHJpbSgpO1xuICB9XG5cbiAgaWYoIWNsZWFuZWRDb250ZW50KSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICByZXR1cm4gY2xlYW5lZENvbnRlbnQ7XG59O1xuXG5jb25zdCBnZXRQcm92aWRlckF1dGggPSAocHJvdmlkZXI6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmKHByb2Nlc3MuY3dkKCkuaW5jbHVkZXMoJ3JlYWt0b3InKSkge1xuICAgIHJldHVybiAnY3Vyc29yLWF1dGgnO1xuICB9XG5cbiAgaWYocHJvY2Vzcy5lbnYuQUlfQVBJX0tFWSkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5BSV9BUElfS0VZO1xuICB9XG5cbiAgaWYocHJvdmlkZXIgPT09ICdub25lJyAmJiBwcm9jZXNzLmVudi5DVVJTT1JfSURFID09PSAndHJ1ZScpIHtcbiAgICByZXR1cm4gJ2N1cnNvci1hdXRoJztcbiAgfVxuXG4gIHN3aXRjaChwcm92aWRlcikge1xuICAgIGNhc2UgJ29wZW5haSc6XG4gICAgICByZXR1cm4gcHJvY2Vzcy5lbnYuT1BFTkFJX0FQSV9LRVk7XG4gICAgY2FzZSAnYW50aHJvcGljJzpcbiAgICAgIHJldHVybiBwcm9jZXNzLmVudi5BTlRIUk9QSUNfQVBJX0tFWTtcbiAgICBjYXNlICdjdXJzb3InOlxuICAgICAgcmV0dXJuICdjdXJzb3ItYXV0aCc7XG4gICAgY2FzZSAnY29waWxvdCc6XG4gICAgICByZXR1cm4gcHJvY2Vzcy5lbnYuR0lUSFVCX1RPS0VOO1xuICAgIGNhc2UgJ25vbmUnOlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufTtcblxuY29uc3QgZGV0ZWN0Q3Vyc29ySURFID0gKCk6IGJvb2xlYW4gPT4ge1xuICBpZihwcm9jZXNzLmVudi5DVVJTT1JfSURFID09PSAndHJ1ZScpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IHBvc3NpYmxlQ3Vyc29yU2lnbmFscyA9IFtcbiAgICBwcm9jZXNzLmVudi5DVVJTT1JfRVhURU5TSU9OID09PSAndHJ1ZScsXG4gICAgcHJvY2Vzcy5lbnYuQ1VSU09SX1RFUk1JTkFMID09PSAndHJ1ZScsXG4gICAgcHJvY2Vzcy5lbnYuQ1VSU09SX0FQUCA9PT0gJ3RydWUnLFxuICAgIHByb2Nlc3MuZW52LlBBVEg/LmluY2x1ZGVzKCdjdXJzb3InKSxcbiAgICAhIXByb2Nlc3MuZW52LkNVUlNPUl9TRVNTSU9OX0lEXG4gIF07XG5cbiAgY29uc3QgaXNDdXJzb3JJREUgPSBwb3NzaWJsZUN1cnNvclNpZ25hbHMuc29tZSgoc2lnbmFsKSA9PiBzaWduYWwpO1xuXG4gIGlmKGlzQ3Vyc29ySURFKSB7XG4gICAgcHJvY2Vzcy5lbnYuQ1VSU09SX0lERSA9ICd0cnVlJztcbiAgfVxuXG4gIHJldHVybiBpc0N1cnNvcklERTtcbn07XG5cbmV4cG9ydCBjb25zdCBhaUZ1bmN0aW9uID0gYXN5bmMgKG9wdGlvbnM6IEFJT3B0aW9ucyk6IFByb21pc2U8YW55PiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgY29uZmlnID0gTGV4Q29uZmlnLmNvbmZpZyB8fCB7fTtcbiAgICBjb25zdCBhaUNvbmZpZyA9IGNvbmZpZy5haSB8fCB7fTtcbiAgICBjb25zdCBwcm92aWRlciA9IG9wdGlvbnMucHJvdmlkZXIgfHwgYWlDb25maWcucHJvdmlkZXIgfHwgJ25vbmUnO1xuXG4gICAgaWYocHJvdmlkZXIgPT09ICdub25lJyAmJiAhcHJvY2Vzcy5lbnYuQ1VSU09SX0VYVEVOU0lPTikge1xuICAgICAgbG9nKGAke2NoYWxrLnJlZCgnRXJyb3I6Jyl9IE5vIEFJIHByb3ZpZGVyIGNvbmZpZ3VyZWQuYCwgJ2Vycm9yJyk7XG4gICAgICByZXR1cm4ge2Vycm9yOiAnTm8gQUkgcHJvdmlkZXIgY29uZmlndXJlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHRhc2sgPSBvcHRpb25zLnRhc2sgfHwgJ2Fzayc7XG4gICAgY29uc3QgdmFsaWRUYXNrcyA9IFsnZXhwbGFpbicsICdnZW5lcmF0ZScsICd0ZXN0JywgJ2FuYWx5emUnLCAnYXNrJ107XG5cbiAgICBpZighdmFsaWRUYXNrcy5pbmNsdWRlcyh0YXNrKSkge1xuICAgICAgbG9nKGAke2NoYWxrLnJlZCgnRXJyb3I6Jyl9IEludmFsaWQgdGFzayBcIiR7dGFza31cIi4gVmFsaWQgdGFza3MgYXJlOiAke3ZhbGlkVGFza3Muam9pbignLCAnKX1gLCAnZXJyb3InKTtcbiAgICAgIHJldHVybiB7ZXJyb3I6IGBJbnZhbGlkIHRhc2sgXCIke3Rhc2t9XCJgfTtcbiAgICB9XG5cbiAgICBjb25zdCB7cHJvbXB0fSA9IG9wdGlvbnM7XG5cbiAgICBpZighcHJvbXB0KSB7XG4gICAgICBsb2coYCR7Y2hhbGsucmVkKCdFcnJvcjonKX0gTm8gcHJvbXB0IHByb3ZpZGVkLiBVc2UgLS1wcm9tcHQgXCJZb3VyIHByb21wdCBoZXJlXCJgLCAnZXJyb3InKTtcbiAgICAgIHJldHVybiB7ZXJyb3I6ICdObyBwcm9tcHQgcHJvdmlkZWQnfTtcbiAgICB9XG5cbiAgICBsZXQgY29udGV4dCA9ICcnO1xuXG4gICAgaWYob3B0aW9ucy5maWxlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydCgnZnMvcHJvbWlzZXMnKTtcbiAgICAgICAgY29uc3QgZ2xvYiA9IGF3YWl0IGltcG9ydCgnZ2xvYicpO1xuICAgICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGdsb2IuZ2xvYihvcHRpb25zLmZpbGUpO1xuXG4gICAgICAgIGlmKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGxvZyhgJHtjaGFsay55ZWxsb3coJ1dhcm5pbmc6Jyl9IE5vIGZpbGVzIGZvdW5kIG1hdGNoaW5nIFwiJHtvcHRpb25zLmZpbGV9XCJgLCAnd2FybmluZycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcihjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoZmlsZSwgJ3V0ZjgnKTtcbiAgICAgICAgICAgIGNvbnRleHQgKz0gYFxcbj09PUZJTEU6ICR7ZmlsZX09PT1cXG4ke2NvbnRlbnR9XFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgbG9nKGAke2NoYWxrLnllbGxvdygnV2FybmluZzonKX0gRXJyb3IgcmVhZGluZyBmaWxlOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm5pbmcnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihvcHRpb25zLmRpcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qge2V4ZWNhU3luY30gPSBhd2FpdCBpbXBvcnQoJ2V4ZWNhJyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4ZWNhU3luYygnZmluZCcsIFtvcHRpb25zLmRpciwgJy10eXBlJywgJ2YnLCAnfCcsICdzb3J0J10pO1xuICAgICAgICBjb250ZXh0ICs9IGBcXG49PT1Qcm9qZWN0IHN0cnVjdHVyZTo9PT1cXG4ke3Jlc3VsdC5zdGRvdXR9XFxuYDtcbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgbG9nKGAke2NoYWxrLnllbGxvdygnV2FybmluZzonKX0gRXJyb3IgcmVhZGluZyBkaXJlY3Rvcnk6ICR7ZXJyb3IubWVzc2FnZX1gLCAnd2FybmluZycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBmb3JtYXR0ZWRQcm9tcHQgPSAnJztcblxuICAgIHN3aXRjaCh0YXNrKSB7XG4gICAgICBjYXNlICdleHBsYWluJzpcbiAgICAgICAgZm9ybWF0dGVkUHJvbXB0ID0gYEV4cGxhaW4gdGhlIGZvbGxvd2luZyBjb2RlOlxcbiR7cHJvbXB0fWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ2VuZXJhdGUnOlxuICAgICAgICBmb3JtYXR0ZWRQcm9tcHQgPSBgR2VuZXJhdGUgY29kZSBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyByZXF1ZXN0OlxcbiR7cHJvbXB0fWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGVzdCc6XG4gICAgICAgIGZvcm1hdHRlZFByb21wdCA9IGBHZW5lcmF0ZSBjb21wcmVoZW5zaXZlIHVuaXQgdGVzdHM6XFxuJHtwcm9tcHR9YDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhbmFseXplJzpcbiAgICAgICAgZm9ybWF0dGVkUHJvbXB0ID0gYEFuYWx5emUgdGhlIGZvbGxvd2luZyBjb2RlOlxcbiR7cHJvbXB0fWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXNrJzpcbiAgICAgICAgZm9ybWF0dGVkUHJvbXB0ID0gYFByb3ZpZGUgZ3VpZGFuY2Ugb24gdGhlIGZvbGxvd2luZyBkZXZlbG9wbWVudCBxdWVzdGlvbjpcXG4ke3Byb21wdH1gO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZihjb250ZXh0KSB7XG4gICAgICBmb3JtYXR0ZWRQcm9tcHQgKz0gYFxcbj09PUNPTlRFWFQ9PT1cXG4ke2NvbnRleHR9YDtcbiAgICB9XG5cbiAgICBpZigocHJvdmlkZXIgPT09ICdjdXJzb3InIHx8IHByb2Nlc3MuZW52LkNVUlNPUl9FWFRFTlNJT04pICYmIHRhc2sgPT09ICdnZW5lcmF0ZScpIHtcbiAgICAgIGxvZygnVXNpbmcgQ3Vyc29yIElERSBmb3IgY29kZSBnZW5lcmF0aW9uLi4uJywgJ2luZm8nKTtcbiAgICAgIGxvZygnTm90ZTogRm9yIGZ1bGwgY29kZSBnZW5lcmF0aW9uIGNhcGFiaWxpdGllcywgcGxlYXNlIHVzZSBDdXJzb3IgSURFIGRpcmVjdGx5IHdpdGggQ21kK0wgb3IgQ21kK0suJywgJ2luZm8nKTtcbiAgICAgIGxvZygnVGhlIENMSSBpbnRlZ3JhdGlvbiBoYXMgbGltaXRlZCBjYXBhYmlsaXRpZXMgZm9yIGNvZGUgZ2VuZXJhdGlvbi4nLCAnd2FybmluZycpO1xuICAgIH0gZWxzZSBpZihwcm92aWRlciA9PT0gJ2N1cnNvcicgfHwgcHJvY2Vzcy5lbnYuQ1VSU09SX0VYVEVOU0lPTikge1xuICAgICAgbG9nKCdVc2luZyBDdXJzb3IgSURFIGZvciBBSSBhc3Npc3RhbmNlLi4uJywgJ2luZm8nKTtcbiAgICAgIGxvZygnTm90ZTogVGhpcyBpcyBhIGxpbWl0ZWQgaW50ZWdyYXRpb24uIEZvciBmdWxsIEFJIGNhcGFiaWxpdGllcywgdXNlIEN1cnNvciBJREUgZGlyZWN0bHkuJywgJ2luZm8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nKGBVc2luZyAke3Byb3ZpZGVyfSBmb3IgQUkgYXNzaXN0YW5jZS4uLmAsICdpbmZvJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjYWxsQUlTZXJ2aWNlKGZvcm1hdHRlZFByb21wdCwgb3B0aW9ucy5xdWlldCB8fCBmYWxzZSk7XG5cbiAgICBsb2coYFxcbiR7cmVzcG9uc2V9YCwgJ3N1Y2Nlc3MnKTtcblxuICAgIHJldHVybiB7cmVzcG9uc2V9O1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGAke2NoYWxrLnJlZCgnRXJyb3I6Jyl9ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InKTtcbiAgICByZXR1cm4ge2Vycm9yOiBlcnJvci5tZXNzYWdlfTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFpID0gbmV3IENvbW1hbmQoJ2FpJylcbiAgLmRlc2NyaXB0aW9uKCdVc2UgQUkgdG8gaGVscCB3aXRoIGRldmVsb3BtZW50IHRhc2tzJylcbiAgLm9wdGlvbignLS1wcm92aWRlciA8cHJvdmlkZXI+JywgJ0FJIHByb3ZpZGVyIHRvIHVzZSAob3BlbmFpLCBhbnRocm9waWMsIGN1cnNvciknKVxuICAub3B0aW9uKCctLXRhc2sgPHRhc2s+JywgJ1Rhc2sgdG8gcGVyZm9ybSAoZXhwbGFpbiwgZ2VuZXJhdGUsIHRlc3QsIGFuYWx5emUsIGFzayknKVxuICAub3B0aW9uKCctLXByb21wdCA8cHJvbXB0PicsICdQcm9tcHQgdG8gc2VuZCB0byBBSScpXG4gIC5vcHRpb24oJy0tZmlsZSA8ZmlsZT4nLCAnRmlsZSB0byBhbmFseXplJylcbiAgLm9wdGlvbignLS1kaXIgPGRpcj4nLCAnRGlyZWN0b3J5IHRvIGFuYWx5emUnKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiBBSU9wdGlvbnMpID0+IHtcbiAgICBhd2FpdCBhaUZ1bmN0aW9uKG9wdGlvbnMpO1xuICB9KTtcblxuZXhwb3J0IGRlZmF1bHQgYWk7XG4iXSwibmFtZXMiOlsiY2hhbGsiLCJDb21tYW5kIiwicmVhZEZpbGVTeW5jIiwic3luYyIsImdsb2JTeW5jIiwiTGV4Q29uZmlnIiwiY2FsbEFJU2VydmljZSIsImxvZyIsInByb2Nlc3MiLCJlbnYiLCJDVVJTT1JfRVhURU5TSU9OIiwiQ1VSU09SX1RFUk1JTkFMIiwiQ1VSU09SX0FQUCIsIlBBVEgiLCJpbmNsdWRlcyIsIkNVUlNPUl9TRVNTSU9OX0lEIiwiQ1VSU09SX0lERSIsImdldEZpbGVDb250ZXh0IiwiZmlsZVBhdGgiLCJjb250ZW50IiwiX2Vycm9yIiwiZ2V0UHJvamVjdENvbnRleHQiLCJvcHRpb25zIiwiZmlsZSIsInRhc2siLCJjb250ZXh0IiwicHJvamVjdENvbnRleHQiLCJmaWxlcyIsImN3ZCIsImlnbm9yZSIsIm1heERlcHRoIiwiam9pbiIsInRlc3RDb25maWciLCJsZXhDb25maWciLCJjb25zdHJ1Y3RQcm9tcHQiLCJwcm9tcHQiLCJ0YXNrSW5zdHJ1Y3Rpb25zIiwiYW5hbHl6ZSIsImFzayIsImV4cGxhaW4iLCJnZW5lcmF0ZSIsImhlbHAiLCJvcHRpbWl6ZSIsInRlc3QiLCJ0YXNrSW5zdHJ1Y3Rpb24iLCJmdWxsUHJvbXB0IiwiZGlzcGxheVJlc3BvbnNlIiwicmVzcG9uc2UiLCJxdWlldCIsImNob2ljZXMiLCJtZXNzYWdlIiwibWVzc2FnZUNvbnRlbnQiLCJyZXNwb25zZUNvbnRlbnQiLCJjbGVhbmVkQ29udGVudCIsImNsZWFuUmVzcG9uc2UiLCJpbnN0cnVjdGlvbiIsInJlcGxhY2UiLCJ0cmltIiwic3BsaXQiLCJnZXRQcm92aWRlckF1dGgiLCJwcm92aWRlciIsIkFJX0FQSV9LRVkiLCJPUEVOQUlfQVBJX0tFWSIsIkFOVEhST1BJQ19BUElfS0VZIiwiR0lUSFVCX1RPS0VOIiwidW5kZWZpbmVkIiwiZGV0ZWN0Q3Vyc29ySURFIiwicG9zc2libGVDdXJzb3JTaWduYWxzIiwiaXNDdXJzb3JJREUiLCJzb21lIiwic2lnbmFsIiwiYWlGdW5jdGlvbiIsImNvbmZpZyIsImFpQ29uZmlnIiwiYWkiLCJyZWQiLCJlcnJvciIsInZhbGlkVGFza3MiLCJmcyIsImdsb2IiLCJsZW5ndGgiLCJ5ZWxsb3ciLCJyZWFkRmlsZSIsImRpciIsImV4ZWNhU3luYyIsInJlc3VsdCIsInN0ZG91dCIsImZvcm1hdHRlZFByb21wdCIsImRlc2NyaXB0aW9uIiwib3B0aW9uIiwiYWN0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxPQUFPQSxXQUFXLFFBQVE7QUFDMUIsU0FBUUMsT0FBTyxRQUFPLFlBQVk7QUFDbEMsU0FBUUMsWUFBWSxRQUFPLEtBQUs7QUFDaEMsU0FBUUMsUUFBUUMsUUFBUSxRQUFPLE9BQU87QUFFdEMsU0FBUUMsU0FBUyxRQUFPLHFCQUFxQjtBQUM3QyxTQUFRQyxhQUFhLFFBQU8sMkJBQTJCO0FBQ3ZELFNBQVFDLEdBQUcsUUFBTyxxQkFBcUI7QUFFdkMsSUFBR0MsUUFBUUMsR0FBRyxDQUFDQyxnQkFBZ0IsS0FBSyxVQUNsQ0YsUUFBUUMsR0FBRyxDQUFDRSxlQUFlLEtBQUssVUFDaENILFFBQVFDLEdBQUcsQ0FBQ0csVUFBVSxLQUFLLFVBQzNCSixRQUFRQyxHQUFHLENBQUNJLElBQUksRUFBRUMsU0FBUyxhQUMzQk4sUUFBUUMsR0FBRyxDQUFDTSxpQkFBaUIsRUFBRTtJQUMvQlAsUUFBUUMsR0FBRyxDQUFDTyxVQUFVLEdBQUc7QUFDM0I7QUFnQkEsTUFBTUMsaUJBQWlCLENBQUNDO0lBQ3RCLElBQUk7UUFDRixNQUFNQyxVQUFVakIsYUFBYWdCLFVBQVU7UUFDdkMsT0FBTyxDQUFDLE1BQU0sRUFBRUEsU0FBUyxJQUFJLEVBQUVDLFNBQVM7SUFDMUMsRUFBRSxPQUFNQyxRQUFRO1FBQ2QsT0FBTyxDQUFDLG9CQUFvQixFQUFFRixVQUFVO0lBQzFDO0FBQ0Y7QUFFQSxNQUFNRyxvQkFB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
|
|
@@ -2,14 +2,16 @@ import type { Spinner } from '../../utils/app.js';
|
|
|
2
2
|
export interface BuildOptions {
|
|
3
3
|
readonly assist?: boolean;
|
|
4
4
|
readonly analyze?: boolean;
|
|
5
|
-
readonly bundler?: '
|
|
5
|
+
readonly bundler?: 'swc' | 'vite';
|
|
6
6
|
readonly cliName?: string;
|
|
7
|
-
readonly entry?: string;
|
|
7
|
+
readonly entry?: string | string[];
|
|
8
8
|
readonly format?: string;
|
|
9
|
+
readonly mode?: 'development' | 'production';
|
|
9
10
|
readonly outputPath?: string;
|
|
10
11
|
readonly quiet?: boolean;
|
|
11
12
|
readonly remove?: boolean;
|
|
12
13
|
readonly sourcePath?: string;
|
|
14
|
+
readonly static?: boolean;
|
|
13
15
|
readonly test?: boolean;
|
|
14
16
|
readonly translations?: boolean;
|
|
15
17
|
readonly variables?: string;
|
|
@@ -17,6 +19,6 @@ export interface BuildOptions {
|
|
|
17
19
|
}
|
|
18
20
|
export type BuildCallback = (status: number) => void;
|
|
19
21
|
export declare const buildWithSWC: (spinner: Spinner, commandOptions: BuildOptions, callback: BuildCallback) => Promise<0 | 1>;
|
|
20
|
-
export declare const
|
|
22
|
+
export declare const buildWithVite: (spinner: Spinner, cmd: BuildOptions, callback: BuildCallback) => Promise<number>;
|
|
21
23
|
export declare const build: (cmd: BuildOptions, callback?: BuildCallback) => Promise<number>;
|
|
22
24
|
export default build;
|