@nlabs/lex 1.51.5 โ 1.51.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +120 -54
- package/lib/commands/build/build.js +10 -3
- package/lib/commands/dev/dev.js +18 -6
- package/lib/utils/file.js +24 -3
- package/package.json +1 -1
- package/scripts/test-static-manual.js +117 -0
- package/scripts/test-webpack.js +124 -30
- package/webpack.config.js +140 -10
package/README.md
CHANGED
|
@@ -13,35 +13,35 @@ Lex is the all-in-one development CLI that eliminates the complexity of modern R
|
|
|
13
13
|
|
|
14
14
|
## โจ Why Lex?
|
|
15
15
|
|
|
16
|
-
###
|
|
16
|
+
### **Zero Configuration**
|
|
17
17
|
|
|
18
18
|
- Works out of the box with any React project
|
|
19
19
|
- No webpack configs to write
|
|
20
20
|
- No testing setup to configure
|
|
21
21
|
- No build tools to manage
|
|
22
22
|
|
|
23
|
-
###
|
|
23
|
+
### **Lightning Fast**
|
|
24
24
|
|
|
25
25
|
- SWC-powered compilation (10-100x faster than Babel)
|
|
26
26
|
- Hot reloading development server
|
|
27
27
|
- Optimized production builds
|
|
28
28
|
- Parallel test execution
|
|
29
29
|
|
|
30
|
-
###
|
|
30
|
+
### **AI-Powered Development**
|
|
31
31
|
|
|
32
32
|
- AI-assisted error fixing
|
|
33
33
|
- Intelligent test generation
|
|
34
34
|
- Code optimization suggestions
|
|
35
35
|
- Smart linting with auto-fix
|
|
36
36
|
|
|
37
|
-
###
|
|
37
|
+
### **Enterprise Ready**
|
|
38
38
|
|
|
39
39
|
- TypeScript support out of the box
|
|
40
40
|
- Jest testing framework included
|
|
41
41
|
- Storybook integration
|
|
42
42
|
- Production-optimized builds
|
|
43
43
|
|
|
44
|
-
##
|
|
44
|
+
## Quick Start
|
|
45
45
|
|
|
46
46
|
```bash
|
|
47
47
|
# Install Lex globally
|
|
@@ -63,7 +63,7 @@ lex test
|
|
|
63
63
|
lex build --mode production
|
|
64
64
|
```
|
|
65
65
|
|
|
66
|
-
##
|
|
66
|
+
## What's Included
|
|
67
67
|
|
|
68
68
|
Lex comes with everything you need for modern React development:
|
|
69
69
|
|
|
@@ -77,9 +77,9 @@ Lex comes with everything you need for modern React development:
|
|
|
77
77
|
| **PostCSS** | CSS processing | Latest |
|
|
78
78
|
| **ESLint** | Code linting | Latest |
|
|
79
79
|
|
|
80
|
-
##
|
|
80
|
+
## Commands Overview
|
|
81
81
|
|
|
82
|
-
###
|
|
82
|
+
### **Project Setup**
|
|
83
83
|
|
|
84
84
|
| Command | Description | Quick Example |
|
|
85
85
|
|---------|-------------|---------------|
|
|
@@ -87,7 +87,7 @@ Lex comes with everything you need for modern React development:
|
|
|
87
87
|
| [`lex create`](#create) | Generate project assets | `lex create view Dashboard` |
|
|
88
88
|
| [`lex migrate`](#migrate) | Migrate existing projects | `lex migrate` |
|
|
89
89
|
|
|
90
|
-
###
|
|
90
|
+
### **Development**
|
|
91
91
|
|
|
92
92
|
| Command | Description | Quick Example |
|
|
93
93
|
|---------|-------------|---------------|
|
|
@@ -96,7 +96,7 @@ Lex comes with everything you need for modern React development:
|
|
|
96
96
|
| [`lex compile`](#compile) | Compile TypeScript/JavaScript | `lex compile --watch` |
|
|
97
97
|
| [`lex build`](#build) | Build for production | `lex build --mode production` |
|
|
98
98
|
|
|
99
|
-
###
|
|
99
|
+
### **Testing & Quality**
|
|
100
100
|
|
|
101
101
|
| Command | Description | Quick Example |
|
|
102
102
|
|---------|-------------|---------------|
|
|
@@ -104,7 +104,7 @@ Lex comes with everything you need for modern React development:
|
|
|
104
104
|
| [`lex lint`](#lint) | Lint code with ESLint | `lex lint --fix` |
|
|
105
105
|
| [`lex storybook`](#storybook) | Start Storybook | `lex storybook --open` |
|
|
106
106
|
|
|
107
|
-
###
|
|
107
|
+
### **AI-Powered Features**
|
|
108
108
|
|
|
109
109
|
| Command | Description | Quick Example |
|
|
110
110
|
|---------|-------------|---------------|
|
|
@@ -112,7 +112,7 @@ Lex comes with everything you need for modern React development:
|
|
|
112
112
|
| [`lex test`](#test) | AI test generation | `lex test --generate` |
|
|
113
113
|
| [`lex build`](#build) | AI error fixing | `lex build --assist` |
|
|
114
114
|
|
|
115
|
-
###
|
|
115
|
+
### **Package Management**
|
|
116
116
|
|
|
117
117
|
| Command | Description | Quick Example |
|
|
118
118
|
|---------|-------------|---------------|
|
|
@@ -120,7 +120,7 @@ Lex comes with everything you need for modern React development:
|
|
|
120
120
|
| [`lex upgrade`](#upgrade) | Upgrade Lex itself | `lex upgrade` |
|
|
121
121
|
| [`lex publish`](#publish) | Publish to npm | `lex publish --bump minor` |
|
|
122
122
|
|
|
123
|
-
###
|
|
123
|
+
### **Utilities**
|
|
124
124
|
|
|
125
125
|
| Command | Description | Quick Example |
|
|
126
126
|
|---------|-------------|---------------|
|
|
@@ -130,9 +130,9 @@ Lex comes with everything you need for modern React development:
|
|
|
130
130
|
| [`lex versions`](#versions) | Show tool versions | `lex versions` |
|
|
131
131
|
| [`lex link`](#link) | Check linked modules | `lex link` |
|
|
132
132
|
|
|
133
|
-
##
|
|
133
|
+
## Core Features
|
|
134
134
|
|
|
135
|
-
###
|
|
135
|
+
### **Development Server**
|
|
136
136
|
|
|
137
137
|
```bash
|
|
138
138
|
# Start with hot reloading
|
|
@@ -148,13 +148,13 @@ lex dev --config ./custom.webpack.js
|
|
|
148
148
|
lex dev --usePublicIp
|
|
149
149
|
```
|
|
150
150
|
|
|
151
|
-
|
|
151
|
+
**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.
|
|
152
152
|
|
|
153
|
-
|
|
153
|
+
**Static Assets**: If your HTML template references static assets (like favicon.ico, manifest.json, or images) with absolute paths, ensure these files exist in your source directory or use relative paths to avoid webpack compilation errors.
|
|
154
154
|
|
|
155
|
-
|
|
155
|
+
**Static Assets**: Use the `webpack.staticPath` configuration to specify a directory for static assets (images, videos, audio, PDFs, etc.). Files in this directory will be automatically copied to the output and optimized for web delivery.
|
|
156
156
|
|
|
157
|
-
###
|
|
157
|
+
### **Serverless Development Server** {#serverless}
|
|
158
158
|
|
|
159
159
|
```bash
|
|
160
160
|
# Start serverless development server
|
|
@@ -170,13 +170,13 @@ lex serverless --variables '{"NODE_ENV":"development","API_KEY":"test"}'
|
|
|
170
170
|
lex serverless --debug --printOutput
|
|
171
171
|
```
|
|
172
172
|
|
|
173
|
-
|
|
173
|
+
**AWS Lambda Simulation**: Lex provides a local development server similar to serverless-offline, allowing you to test AWS Lambda functions with HTTP and WebSocket support.
|
|
174
174
|
|
|
175
|
-
|
|
175
|
+
**Configuration**: Configure your serverless functions in `lex.config.mjs`. See the [Serverless Documentation](src/commands/serverless/serverless.docs.md) for detailed configuration options.
|
|
176
176
|
|
|
177
|
-
|
|
177
|
+
**Environment Variables**: The serverless command automatically loads environment variables from `.env`, `.env.local`, and `.env.development` files, with command-line variables taking precedence.
|
|
178
178
|
|
|
179
|
-
###
|
|
179
|
+
### **Production Builds**
|
|
180
180
|
|
|
181
181
|
```bash
|
|
182
182
|
# Standard production build
|
|
@@ -189,7 +189,7 @@ lex build --bundler swc
|
|
|
189
189
|
lex build --analyze
|
|
190
190
|
```
|
|
191
191
|
|
|
192
|
-
###
|
|
192
|
+
### **Testing Suite**
|
|
193
193
|
|
|
194
194
|
```bash
|
|
195
195
|
# Run all tests
|
|
@@ -216,7 +216,7 @@ lex test --config ./jest.config.js
|
|
|
216
216
|
- **React JSX Automatic Runtime**: No need to import React in your test files
|
|
217
217
|
- **TypeScript-First**: Optimized for TypeScript projects with specialized configs
|
|
218
218
|
|
|
219
|
-
###
|
|
219
|
+
### **Storybook Integration**
|
|
220
220
|
|
|
221
221
|
```bash
|
|
222
222
|
# Start Storybook
|
|
@@ -229,7 +229,7 @@ lex storybook --useLexConfig
|
|
|
229
229
|
lex storybook --static
|
|
230
230
|
```
|
|
231
231
|
|
|
232
|
-
###
|
|
232
|
+
### **AI-Powered Development**
|
|
233
233
|
|
|
234
234
|
```bash
|
|
235
235
|
# Generate code
|
|
@@ -242,7 +242,7 @@ lex ai --task explain --file src/components/Button.tsx
|
|
|
242
242
|
lex ai --task help --prompt "Fix this TypeScript error"
|
|
243
243
|
```
|
|
244
244
|
|
|
245
|
-
##
|
|
245
|
+
## Framework Support
|
|
246
246
|
|
|
247
247
|
Lex works seamlessly with popular React frameworks and libraries:
|
|
248
248
|
|
|
@@ -259,13 +259,13 @@ Lex works seamlessly with popular React frameworks and libraries:
|
|
|
259
259
|
|
|
260
260
|
Lex is designed for speed and efficiency:
|
|
261
261
|
|
|
262
|
-
-
|
|
263
|
-
-
|
|
264
|
-
-
|
|
265
|
-
-
|
|
266
|
-
-
|
|
262
|
+
- **SWC Integration** - 10-100x faster than Babel, faster than esbuild
|
|
263
|
+
- **Smart Caching** - Intelligent caching for faster rebuilds
|
|
264
|
+
- **Hot Reloading** - Instant feedback during development
|
|
265
|
+
- **Tree Shaking** - Automatic dead code elimination
|
|
266
|
+
- **Code Splitting** - Automatic code splitting for optimal loading
|
|
267
267
|
|
|
268
|
-
##
|
|
268
|
+
## Configuration
|
|
269
269
|
|
|
270
270
|
Lex works out of the box, but you can customize it with a `lex.config.js` file:
|
|
271
271
|
|
|
@@ -299,11 +299,11 @@ export default {
|
|
|
299
299
|
};
|
|
300
300
|
```
|
|
301
301
|
|
|
302
|
-
##
|
|
302
|
+
## Configuration Options Reference
|
|
303
303
|
|
|
304
304
|
Lex provides extensive configuration options through the `lex.config.js` file. Here's a comprehensive reference of all available options:
|
|
305
305
|
|
|
306
|
-
###
|
|
306
|
+
### **Project Settings**
|
|
307
307
|
|
|
308
308
|
| Option | Type | Default | Description | Example |
|
|
309
309
|
|--------|------|---------|-------------|---------|
|
|
@@ -321,7 +321,7 @@ Lex provides extensive configuration options through the `lex.config.js` file. H
|
|
|
321
321
|
| `useGraphQl` | `boolean` | `false` | Enable GraphQL support | `useGraphQl: true` |
|
|
322
322
|
| `useTypescript` | `boolean` | `false` | Enable TypeScript support | `useTypescript: true` |
|
|
323
323
|
|
|
324
|
-
###
|
|
324
|
+
### **AI Configuration**
|
|
325
325
|
|
|
326
326
|
| Option | Type | Default | Description | Example |
|
|
327
327
|
|--------|------|---------|-------------|---------|
|
|
@@ -331,7 +331,7 @@ Lex provides extensive configuration options through the `lex.config.js` file. H
|
|
|
331
331
|
| `ai.provider` | `'cursor' \| 'copilot' \| 'openai' \| 'anthropic' \| 'none'` | `'none'` | AI service provider | `ai: { provider: 'openai' }` |
|
|
332
332
|
| `ai.temperature` | `number` | `0.1` | AI response creativity (0-1) | `ai: { temperature: 0.7 }` |
|
|
333
333
|
|
|
334
|
-
###
|
|
334
|
+
### **SWC Configuration**
|
|
335
335
|
|
|
336
336
|
SWC (Speedy Web Compiler) is now the default transpiler for all TypeScript and JavaScript compilation in Lex. SWC provides:
|
|
337
337
|
|
|
@@ -352,7 +352,7 @@ SWC is automatically configured and doesn't require additional configuration in
|
|
|
352
352
|
| **Decorators** | TypeScript decorators support | `enabled` |
|
|
353
353
|
| **Source Maps** | Debug information | `inline` |
|
|
354
354
|
|
|
355
|
-
###
|
|
355
|
+
### **Jest Configuration**
|
|
356
356
|
|
|
357
357
|
| Option | Type | Default | Description | Example |
|
|
358
358
|
|--------|------|---------|-------------|---------|
|
|
@@ -364,14 +364,45 @@ SWC is automatically configured and doesn't require additional configuration in
|
|
|
364
364
|
| `jest.transform` | `Record<string, [string, object]>` | `undefined` | Transform configurations | `jest: { transform: { '^.+\\.tsx?$': ['ts-jest'] } }` |
|
|
365
365
|
| `jest.transformIgnorePatterns` | `string[]` | `undefined` | Patterns to ignore in transforms | `jest: { transformIgnorePatterns: ['node_modules'] }` |
|
|
366
366
|
|
|
367
|
-
###
|
|
367
|
+
### **ESLint Configuration**
|
|
368
|
+
|
|
369
|
+
Lex provides a default ESLint configuration optimized for React and TypeScript projects. To extend Lex's ESLint config, create an `eslint.config.mjs` file in your project root that imports and spreads Lex's configuration.
|
|
370
|
+
|
|
371
|
+
**How it works:**
|
|
372
|
+
- Lex uses ESLint's flat config format (array-based configuration)
|
|
373
|
+
- Create an `eslint.config.mjs` file that imports `@nlabs/lex/eslint.config.mjs` and spreads it
|
|
374
|
+
- Add your custom rules as additional objects in the array
|
|
375
|
+
- If you don't create an `eslint.config.mjs`, Lex will use its default configuration automatically
|
|
376
|
+
|
|
377
|
+
**Recommended approach - Create `eslint.config.mjs`:**
|
|
378
|
+
|
|
379
|
+
```javascript
|
|
380
|
+
// eslint.config.mjs
|
|
381
|
+
import lexConfig from '@nlabs/lex/eslint.config.mjs';
|
|
382
|
+
|
|
383
|
+
export default [
|
|
384
|
+
...lexConfig,
|
|
385
|
+
{
|
|
386
|
+
rules: {
|
|
387
|
+
'no-console': 'warn',
|
|
388
|
+
'@typescript-eslint/no-unused-vars': 'error'
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
];
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
**Alternative - Use `lex.config.*` (limited):**
|
|
395
|
+
|
|
396
|
+
You can also specify ESLint rules in your `lex.config.js` file, but this is less flexible:
|
|
368
397
|
|
|
369
398
|
| Option | Type | Default | Description | Example |
|
|
370
399
|
|--------|------|---------|-------------|---------|
|
|
371
|
-
| `eslint.extends` | `string[]` | `undefined` | ESLint
|
|
372
|
-
| `eslint.rules` | `Linter.RulesRecord` | `undefined` | ESLint rules | `eslint: { rules: { 'no-console': 'warn' } }` |
|
|
400
|
+
| `eslint.extends` | `string[]` | `undefined` | Additional ESLint configs to extend | `eslint: { extends: ['@typescript-eslint/recommended'] }` |
|
|
401
|
+
| `eslint.rules` | `Linter.RulesRecord` | `undefined` | Custom ESLint rules | `eslint: { rules: { 'no-console': 'warn' } }` |
|
|
402
|
+
|
|
403
|
+
**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.
|
|
373
404
|
|
|
374
|
-
###
|
|
405
|
+
### **Webpack Configuration**
|
|
375
406
|
|
|
376
407
|
| Option | Type | Default | Description | Example |
|
|
377
408
|
|--------|------|---------|-------------|---------|
|
|
@@ -381,14 +412,14 @@ SWC is automatically configured and doesn't require additional configuration in
|
|
|
381
412
|
| `webpack.plugins` | `unknown[]` | `undefined` | Webpack plugins | `webpack: { plugins: [new MyPlugin()] }` |
|
|
382
413
|
| `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' }` |
|
|
383
414
|
|
|
384
|
-
###
|
|
415
|
+
### **Library Configuration**
|
|
385
416
|
|
|
386
417
|
| Option | Type | Default | Description | Example |
|
|
387
418
|
|--------|------|---------|-------------|---------|
|
|
388
419
|
| `libraryName` | `string` | `undefined` | Library name for UMD builds | `libraryName: 'MyLibrary'` |
|
|
389
420
|
| `libraryTarget` | `string` | `undefined` | Library target format | `libraryTarget: 'umd'` |
|
|
390
421
|
|
|
391
|
-
###
|
|
422
|
+
### **File Management**
|
|
392
423
|
|
|
393
424
|
| Option | Type | Default | Description | Example |
|
|
394
425
|
|--------|------|---------|-------------|---------|
|
|
@@ -397,7 +428,7 @@ SWC is automatically configured and doesn't require additional configuration in
|
|
|
397
428
|
| `env` | `object` | `null` | Environment variables | `env: { NODE_ENV: 'development' }` |
|
|
398
429
|
| `gitUrl` | `string` | `undefined` | Git repository URL | `gitUrl: 'https://github.com/user/repo'` |
|
|
399
430
|
|
|
400
|
-
###
|
|
431
|
+
### **Usage Examples**
|
|
401
432
|
|
|
402
433
|
#### Basic TypeScript Project
|
|
403
434
|
|
|
@@ -459,7 +490,42 @@ export default {
|
|
|
459
490
|
};
|
|
460
491
|
```
|
|
461
492
|
|
|
462
|
-
|
|
493
|
+
#### Custom ESLint Configuration
|
|
494
|
+
|
|
495
|
+
**Option 1: Create `eslint.config.mjs` (Recommended)**
|
|
496
|
+
|
|
497
|
+
```javascript
|
|
498
|
+
// eslint.config.mjs
|
|
499
|
+
import lexConfig from '@nlabs/lex/eslint.config.mjs';
|
|
500
|
+
|
|
501
|
+
export default [
|
|
502
|
+
...lexConfig,
|
|
503
|
+
{
|
|
504
|
+
rules: {
|
|
505
|
+
'no-console': 'warn',
|
|
506
|
+
'@typescript-eslint/explicit-function-return-type': 'off',
|
|
507
|
+
'react/prop-types': 'off' // Not needed with TypeScript
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
];
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
**Option 2: Use `lex.config.*` (Simple overrides only)**
|
|
514
|
+
|
|
515
|
+
```javascript
|
|
516
|
+
// lex.config.js
|
|
517
|
+
export default {
|
|
518
|
+
useTypescript: true,
|
|
519
|
+
eslint: {
|
|
520
|
+
rules: {
|
|
521
|
+
'no-console': 'warn',
|
|
522
|
+
'@typescript-eslint/explicit-function-return-type': 'off'
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
};
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
## Troubleshooting
|
|
463
529
|
|
|
464
530
|
### Common Issues
|
|
465
531
|
|
|
@@ -527,7 +593,7 @@ touch src/manifest.json
|
|
|
527
593
|
mkdir -p src/images && touch src/images/logo-icon-64.png
|
|
528
594
|
```
|
|
529
595
|
|
|
530
|
-
##
|
|
596
|
+
## Documentation
|
|
531
597
|
|
|
532
598
|
- ๐ **[Full Documentation](http://lex.nitrogenlabs.com)** - Complete API reference
|
|
533
599
|
- ๐ฏ **[Getting Started Guide](http://lex.nitrogenlabs.com/getting-started)** - Step-by-step tutorial
|
|
@@ -535,7 +601,7 @@ mkdir -p src/images && touch src/images/logo-icon-64.png
|
|
|
535
601
|
- ๐ค **[AI Features Guide](http://lex.nitrogenlabs.com/ai-features)** - AI-powered development
|
|
536
602
|
- ๐งช **[Testing Guide](http://lex.nitrogenlabs.com/testing)** - Testing best practices
|
|
537
603
|
|
|
538
|
-
##
|
|
604
|
+
## Contributing
|
|
539
605
|
|
|
540
606
|
We love contributions! Here's how you can help:
|
|
541
607
|
|
|
@@ -561,7 +627,7 @@ npm test
|
|
|
561
627
|
npm run build
|
|
562
628
|
```
|
|
563
629
|
|
|
564
|
-
##
|
|
630
|
+
## License
|
|
565
631
|
|
|
566
632
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
567
633
|
|
|
@@ -574,12 +640,12 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
|
|
|
574
640
|
- **Storybook** - For component development
|
|
575
641
|
- **OpenAI/Anthropic** - For AI-powered features
|
|
576
642
|
|
|
577
|
-
##
|
|
643
|
+
## Support
|
|
578
644
|
|
|
579
|
-
-
|
|
580
|
-
-
|
|
581
|
-
-
|
|
582
|
-
-
|
|
645
|
+
- **Issues** - [GitHub Issues](https://github.com/nitrogenlabs/lex/issues)
|
|
646
|
+
- **Discussions** - [GitHub Discussions](https://github.com/nitrogenlabs/lex/discussions)
|
|
647
|
+
- **Email** - <support@nitrogenlabs.com>
|
|
648
|
+
- **Twitter** - [@NitrogenLabs](https://twitter.com/NitrogenLabs)
|
|
583
649
|
|
|
584
650
|
---
|
|
585
651
|
|
|
@@ -182,23 +182,30 @@ export const buildWithWebpack = async (spinner, cmd, callback)=>{
|
|
|
182
182
|
if (watchOptionsStdin) webpackOptions.push('--watchOptionsStdin');
|
|
183
183
|
try {
|
|
184
184
|
const { webpackPath } = resolveWebpackPaths(currentDirname);
|
|
185
|
-
|
|
185
|
+
let executablePath = webpackPath;
|
|
186
186
|
let finalWebpackOptions;
|
|
187
187
|
if (webpackPath === 'npx') {
|
|
188
188
|
finalWebpackOptions = [
|
|
189
189
|
'webpack',
|
|
190
190
|
...webpackOptions
|
|
191
191
|
];
|
|
192
|
+
} else if (webpackPath.endsWith('.js')) {
|
|
193
|
+
executablePath = 'node';
|
|
194
|
+
finalWebpackOptions = [
|
|
195
|
+
webpackPath,
|
|
196
|
+
...webpackOptions
|
|
197
|
+
];
|
|
192
198
|
} else {
|
|
193
199
|
finalWebpackOptions = [
|
|
194
200
|
...webpackOptions
|
|
195
201
|
];
|
|
196
202
|
}
|
|
197
203
|
console.log('webpackPath:', webpackPath);
|
|
204
|
+
console.log('executablePath:', executablePath);
|
|
198
205
|
console.log('finalWebpackOptions:', JSON.stringify(finalWebpackOptions));
|
|
199
206
|
console.log('finalWebpackOptions type:', Array.isArray(finalWebpackOptions) ? 'Array' : typeof finalWebpackOptions);
|
|
200
207
|
// Make sure we're passing an array of strings to execa
|
|
201
|
-
const childProcess = execa(
|
|
208
|
+
const childProcess = execa(executablePath, finalWebpackOptions, {
|
|
202
209
|
encoding: 'utf8',
|
|
203
210
|
stdio: 'pipe'
|
|
204
211
|
});
|
|
@@ -382,4 +389,4 @@ What are the key optimization opportunities for this build configuration? Consid
|
|
|
382
389
|
};
|
|
383
390
|
export default build;
|
|
384
391
|
|
|
385
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9idWlsZC9idWlsZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHt0cmFuc2Zvcm19IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQge2V4ZWNhfSBmcm9tICdleGVjYSc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCB7ZGlybmFtZSwgcmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZX0gZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7TGV4Q29uZmlnLCBnZXRUeXBlU2NyaXB0Q29uZmlnUGF0aH0gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y2hlY2tMaW5rZWRNb2R1bGVzLCBjb3B5Q29uZmlndXJlZEZpbGVzLCBjcmVhdGVTcGlubmVyLCBjcmVhdGVQcm9ncmVzc0JhciwgaGFuZGxlV2VicGFja1Byb2dyZXNzLCByZW1vdmVGaWxlc30gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7Z2V0RGlyTmFtZSwgcmVsYXRpdmVOb2RlUGF0aCwgcmVzb2x2ZVdlYnBhY2tQYXRocywgZ2V0TGV4UGFja2FnZUpzb25QYXRofSBmcm9tICcuLi8uLi91dGlscy9maWxlLmpzJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi8uLi91dGlscy9sb2cuanMnO1xuaW1wb3J0IHtwcm9jZXNzVHJhbnNsYXRpb25zfSBmcm9tICcuLi8uLi91dGlscy90cmFuc2xhdGlvbnMuanMnO1xuaW1wb3J0IHthaUZ1bmN0aW9ufSBmcm9tICcuLi9haS9haS5qcyc7XG5pbXBvcnQgYm94ZW4gZnJvbSAnYm94ZW4nO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcblxubGV0IGN1cnJlbnRGaWxlbmFtZTogc3RyaW5nO1xubGV0IGN1cnJlbnREaXJuYW1lOiBzdHJpbmc7XG5cbnRyeSB7XG4gIGN1cnJlbnRGaWxlbmFtZSA9IGV2YWwoJ3JlcXVpcmUoXCJ1cmxcIikuZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpJyk7XG4gIGN1cnJlbnREaXJuYW1lID0gZGlybmFtZShjdXJyZW50RmlsZW5hbWUpO1xufSBjYXRjaCB7XG4gIGN1cnJlbnRGaWxlbmFtZSA9IHByb2Nlc3MuY3dkKCk7XG4gIGN1cnJlbnREaXJuYW1lID0gcHJvY2Vzcy5jd2QoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZE9wdGlvbnMge1xuICByZWFkb25seSBhc3Npc3Q/OiBib29sZWFuO1xuICByZWFkb25seSBhbmFseXplPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgYnVuZGxlcj86ICd3ZWJwYWNrJyB8ICdzd2MnO1xuICByZWFkb25seSBjbGlOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBlbnRyeT86IHN0cmluZzsgLy8gPC0tIGFkZCBlbnRyeVxuICByZWFkb25seSBmb3JtYXQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dHB1dFBhdGg/OiBzdHJpbmc7IC8vIDwtLSBhbHJlYWR5IHByZXNlbnRcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSByZW1vdmU/OiBib29sZWFuO1xuICByZWFkb25seSBzb3VyY2VQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSB0ZXN0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdHJhbnNsYXRpb25zPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdmFyaWFibGVzPzogc3RyaW5nO1xuICByZWFkb25seSB3YXRjaD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIEJ1aWxkQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmNvbnN0IGRpc3BsYXlCdWlsZFN0YXR1cyA9IChidW5kbGVyOiBzdHJpbmcsIG91dHB1dFBhdGg6IHN0cmluZywgcXVpZXQ6IGJvb2xlYW4sIHN0YXRzPzoge21vZHVsZXM/OiBudW1iZXI7IGFzc2V0cz86IG51bWJlcjsgc2l6ZT86IHN0cmluZ30pID0+IHtcbiAgaWYocXVpZXQpIHJldHVybjtcblxuICBsZXQgc3RhdHNJbmZvID0gJyc7XG4gIGlmKHN0YXRzICYmIHN0YXRzLm1vZHVsZXMgJiYgc3RhdHMuYXNzZXRzKSB7XG4gICAgc3RhdHNJbmZvID0gYFxcbiR7Y2hhbGsuZ3JlZW4oJ01vZHVsZXM6Jyl9ICAgICR7Y2hhbGsuY3lhbihzdGF0cy5tb2R1bGVzKX1cXG5gICtcbiAgICAgIGAke2NoYWxrLmdyZWVuKCdBc3NldHM6Jyl9ICAgICAke2NoYWxrLmN5YW4oc3RhdHMuYXNzZXRzKX1cXG5gICtcbiAgICAgIGAke2NoYWxrLmdyZWVuKCdTaXplOicpfSAgICAgICAke2NoYWxrLmN5YW4oc3RhdHMuc2l6ZSl9XFxuYDtcbiAgfVxuXG4gIGNvbnN0IHN0YXR1c0JveCA9IGJveGVuKFxuICAgIGAke2NoYWxrLmN5YW4uYm9sZCgn8J+Pl++4jyAgQnVpbGQgQ29tcGxldGVkIFN1Y2Nlc3NmdWxseScpfVxcblxcbmAgK1xuICAgIGAke2NoYWxrLmdyZWVuKCdCdW5kbGVyOicpfSAgICAke2NoYWxrLmN5YW4oYnVuZGxlcil9XFxuYCArXG4gICAgYCR7Y2hhbGsuZ3JlZW4oJ091dHB1dDonKX0gICAgICR7Y2hhbGsudW5kZXJsaW5lKG91dHB1dFBhdGgpfSR7c3RhdHNJbmZvfVxcbmAgK1xuICAgIGAke2NoYWxrLnllbGxvdygnUmVhZHkgZm9yIGRlcGxveW1lbnQhIPCfmoAnKX1gLFxuICAgIHtcbiAgICAgIHBhZGRpbmc6IDEsXG4gICAgICBtYXJnaW46IDEsXG4gICAgICBib3JkZXJTdHlsZTogJ3JvdW5kJyxcbiAgICAgIGJvcmRlckNvbG9yOiAnZ3JlZW4nLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzFhMWExYSdcbiAgICB9XG4gICk7XG5cbiAgY29uc29sZS5sb2coJ1xcbicgKyBzdGF0dXNCb3ggKyAnXFxuJyk7XG59O1xuXG4vLyBSZW1vdmVkIGJ1aWxkV2l0aEVzQnVpbGQgZnVuY3Rpb24gLSB1c2luZyBTV0MgaW5zdGVhZFxuXG5leHBvcnQgY29uc3QgYnVpbGRXaXRoU1dDID0gYXN5bmMgKHNwaW5uZXIsIGNvbW1hbmRPcHRpb25zOiBCdWlsZE9wdGlvbnMsIGNhbGxiYWNrOiBCdWlsZENhbGxiYWNrKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgZm9ybWF0ID0gJ2VzbScsXG4gICAgb3V0cHV0UGF0aCxcbiAgICBxdWlldCxcbiAgICBzb3VyY2VQYXRoLFxuICAgIHdhdGNoXG4gIH0gPSBjb21tYW5kT3B0aW9ucztcbiAgY29uc3Qge1xuICAgIG91dHB1dEZ1bGxQYXRoLFxuICAgIHNvdXJjZUZ1bGxQYXRoLFxuICAgIHN3Yzogc3djQ29uZmlnLFxuICAgIHRhcmdldEVudmlyb25tZW50LFxuICAgIHVzZUdyYXBoUWwsXG4gICAgdXNlVHlwZXNjcmlwdFxuICB9ID0gTGV4Q29uZmlnLmNvbmZpZztcbiAgY29uc3Qgc291cmNlRGlyOiBzdHJpbmcgPSBzb3VyY2VQYXRoID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgYC4vJHtzb3VyY2VQYXRofWApIDogc291cmNlRnVsbFBhdGggfHwgJyc7XG5cbiAgY29uc3QgZ2xvYk9wdGlvbnMgPSB7XG4gICAgY3dkOiBzb3VyY2VEaXIsXG4gICAgZG90OiBmYWxzZSxcbiAgICBub2RpcjogdHJ1ZSxcbiAgICBub3NvcnQ6IHRydWVcbiAgfTtcbiAgY29uc3QgdHNGaWxlczogc3RyaW5nW10gPSBnbG9iU3luYyhgJHtzb3VyY2VEaXJ9LyoqLyEoKi5zcGVjfCoudGVzdCkudHMqYCwgZ2xvYk9wdGlvbnMpO1xuICBjb25zdCBqc0ZpbGVzOiBzdHJpbmdbXSA9IGdsb2JTeW5jKGAke3NvdXJjZURpcn0vKiovISgqLnNwZWN8Ki50ZXN0KS5qc2AsIGdsb2JPcHRpb25zKTtcbiAgY29uc3Qgc291cmNlRmlsZXM6IHN0cmluZ1tdID0gWy4uLnRzRmlsZXMsIC4uLmpzRmlsZXNdO1xuXG4gIGNvbnN0IG91dHB1dERpcjogc3RyaW5nID0gb3V0cHV0UGF0aCB8fCBvdXRwdXRGdWxsUGF0aCB8fCAnJztcblxuICB0cnkge1xuICAgIHNwaW5uZXIuc3RhcnQoJ0J1aWxkaW5nIHdpdGggU1dDLi4uJyk7XG5cbiAgICBmb3IoY29uc3QgZmlsZSBvZiBzb3VyY2VGaWxlcykge1xuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IHBhdGhSZXNvbHZlKHNvdXJjZURpciwgZmlsZSk7XG4gICAgICBjb25zdCBvdXRwdXRQYXRoID0gcGF0aFJlc29sdmUob3V0cHV0RGlyLCBmaWxlLnJlcGxhY2UoL1xcLih0c3x0c3gpJC8sICcuanMnKSk7XG5cbiAgICAgIC8vIEVuc3VyZSBvdXRwdXQgZGlyZWN0b3J5IGV4aXN0c1xuICAgICAgY29uc3Qgb3V0cHV0RGlyUGF0aCA9IGRpcm5hbWUob3V0cHV0UGF0aCk7XG4gICAgICBpZighZXhpc3RzU3luYyhvdXRwdXREaXJQYXRoKSkge1xuICAgICAgICBjb25zdCB7bWtkaXJTeW5jfSA9IGF3YWl0IGltcG9ydCgnZnMnKTtcbiAgICAgICAgbWtkaXJTeW5jKG91dHB1dERpclBhdGgsIHtyZWN1cnNpdmU6IHRydWV9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlQ29kZSA9IHJlYWRGaWxlU3luYyhzb3VyY2VQYXRoLCAndXRmOCcpO1xuXG4gICAgICBjb25zdCBpc1RTWCA9IGZpbGUuZW5kc1dpdGgoJy50c3gnKTtcblxuICAgICAgLy8gTWVyZ2UgU1dDIGNvbmZpZyB3aXRoIGNvbW1hbmQtc3BlY2lmaWMgb3ZlcnJpZGVzXG4gICAgICBjb25zdCBzd2NPcHRpb25zID0ge1xuICAgICAgICBmaWxlbmFtZTogZmlsZSxcbiAgICAgICAgLi4uc3djQ29uZmlnLFxuICAgICAgICBqc2M6IHtcbiAgICAgICAgICAuLi5zd2NDb25maWc/LmpzYyxcbiAgICAgICAgICBwYXJzZXI6IHtcbiAgICAgICAgICAgIHN5bnRheDogJ3R5cGVzY3JpcHQnIGFzIGNvbnN0LFxuICAgICAgICAgICAgdHN4OiBpc1RTWCxcbiAgICAgICAgICAgIGRlY29yYXRvcnM6IHN3Y0NvbmZpZz8uanNjPy5wYXJzZXI/LmRlY29yYXRvcnMgPz8gdHJ1ZSxcbiAgICAgICAgICAgIGR5bmFtaWNJbXBvcnQ6IHN3Y0NvbmZpZz8uanNjPy5wYXJzZXI/LmR5bmFtaWNJbXBvcnQgPz8gdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGFyZ2V0OiBzd2NDb25maWc/LmpzYz8udGFyZ2V0ID8/ICdlczIwMjAnLFxuICAgICAgICAgIHRyYW5zZm9ybTogaXNUU1ggPyB7XG4gICAgICAgICAgICAuLi5zd2NDb25maWc/LmpzYz8udHJhbnNmb3JtLFxuICAgICAgICAgICAgcmVhY3Q6IHtcbiAgICAgICAgICAgICAgcnVudGltZTogJ2F1dG9tYXRpYycgYXMgY29uc3QsXG4gICAgICAgICAgICAgIC4uLnN3Y0NvbmZpZz8uanNjPy50cmFuc2Zvcm0/LnJlYWN0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSA6IHN3Y0NvbmZpZz8uanNjPy50cmFuc2Zvcm1cbiAgICAgICAgfSxcbiAgICAgICAgbW9kdWxlOiB7XG4gICAgICAgICAgLi4uc3djQ29uZmlnPy5tb2R1bGUsXG4gICAgICAgICAgdHlwZTogZm9ybWF0ID09PSAnY2pzJyA/ICdjb21tb25qcycgYXMgY29uc3QgOiAoc3djQ29uZmlnPy5tb2R1bGU/LnR5cGUgYXMgJ2VzNicgfHwgJ2VzNicpXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybShzb3VyY2VDb2RlLCBzd2NPcHRpb25zKTtcblxuICAgICAgY29uc3Qge3dyaXRlRmlsZVN5bmN9ID0gYXdhaXQgaW1wb3J0KCdmcycpO1xuICAgICAgd3JpdGVGaWxlU3luYyhvdXRwdXRQYXRoLCByZXN1bHQuY29kZSk7XG4gICAgfVxuXG4gICAgc3Bpbm5lci5zdWNjZWVkKCdCdWlsZCBjb21wbGV0ZWQgd2l0aCBTV0MnKTtcbiAgICBkaXNwbGF5QnVpbGRTdGF0dXMoJ1NXQycsIG91dHB1dERpciwgcXVpZXQpO1xuICAgIGNhbGxiYWNrKDApO1xuICAgIHJldHVybiAwO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdCdWlsZCBmYWlsZWQgd2l0aCBTV0MnKTtcbiAgICBpZighcXVpZXQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkV2l0aFdlYnBhY2sgPSBhc3luYyAoc3Bpbm5lciwgY21kLCBjYWxsYmFjaykgPT4ge1xuICBjb25zdCB7XG4gICAgYW5hbHl6ZSxcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZ05hbWUsXG4gICAgZGVmaW5lUHJvY2Vzc0Vudk5vZGVFbnYsXG4gICAgZGV2dG9vbCxcbiAgICBkaXNhYmxlSW50ZXJwcmV0LFxuICAgIGVudHJ5LFxuICAgIGVudixcbiAgICBmYWlsT25XYXJuaW5ncyxcbiAgICBqc29uLFxuICAgIG1lcmdlLFxuICAgIG1vZGUsXG4gICAgbmFtZSxcbiAgICBub2RlRW52LFxuICAgIG5vRGV2dG9vbCxcbiAgICBub1N0YXRzLFxuICAgIG5vVGFyZ2V0LFxuICAgIG5vV2F0Y2gsXG4gICAgbm9XYXRjaE9wdGlvbnNTdGRpbixcbiAgICBvdXRwdXRQYXRoLFxuICAgIHF1aWV0ID0gZmFsc2UsXG4gICAgc3RhdHMsXG4gICAgdGFyZ2V0LFxuICAgIHdhdGNoLFxuICAgIHdhdGNoT3B0aW9uc1N0ZGluXG4gIH0gPSBjbWQ7XG5cbiAgY29uc29sZS5sb2coJ2VudHJ5OicsIGVudHJ5LCAndHlwZTonLCB0eXBlb2YgZW50cnkpO1xuICBjb25zb2xlLmxvZygnb3V0cHV0UGF0aDonLCBvdXRwdXRQYXRoLCAndHlwZTonLCB0eXBlb2Ygb3V0cHV0UGF0aCk7XG5cbiAgY29uc3QgZW50cnlWYWx1ZSA9IEFycmF5LmlzQXJyYXkoZW50cnkpID8gZW50cnlbMF0gOiBlbnRyeTtcblxuICBsZXQgd2VicGFja0NvbmZpZzogc3RyaW5nO1xuXG4gIGlmKGNvbmZpZykge1xuICAgIGNvbnN0IGlzUmVsYXRpdmVDb25maWc6IGJvb2xlYW4gPSBjb25maWcuc3Vic3RyKDAsIDIpID09PSAnLi8nO1xuICAgIHdlYnBhY2tDb25maWcgPSBpc1JlbGF0aXZlQ29uZmlnID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgY29uZmlnKSA6IGNvbmZpZztcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICd3ZWJwYWNrLmNvbmZpZy5qcycpO1xuICAgIGNvbnN0IHByb2plY3RDb25maWdQYXRoVHMgPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnd2VicGFjay5jb25maWcudHMnKTtcbiAgICBjb25zdCBoYXNQcm9qZWN0Q29uZmlnID0gZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aCkgfHwgZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aFRzKTtcblxuICAgIGlmKGhhc1Byb2plY3RDb25maWcpIHtcbiAgICAgIHdlYnBhY2tDb25maWcgPSBleGlzdHNTeW5jKHByb2plY3RDb25maWdQYXRoVHMpID8gcHJvamVjdENvbmZpZ1BhdGhUcyA6IHByb2plY3RDb25maWdQYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7d2VicGFja0NvbmZpZzogcmVzb2x2ZWRDb25maWd9ID0gcmVzb2x2ZVdlYnBhY2tQYXRocyhjdXJyZW50RGlybmFtZSk7XG4gICAgICB3ZWJwYWNrQ29uZmlnID0gcmVzb2x2ZWRDb25maWc7XG4gICAgfVxuICB9XG5cbiAgY29uc29sZS5sb2coJ3dlYnBhY2tDb25maWcgcGF0aDonLCB3ZWJwYWNrQ29uZmlnKTtcbiAgY29uc29sZS5sb2coJ3dlYnBhY2tDb25maWcgZXhpc3RzOicsIGV4aXN0c1N5bmMod2VicGFja0NvbmZpZykpO1xuXG4gIGlmKCFleGlzdHNTeW5jKHdlYnBhY2tDb25maWcpKSB7XG4gICAgY29uc3QgbGV4UGFja2FnZVBhdGggPSBnZXRMZXhQYWNrYWdlSnNvblBhdGgoKTtcbiAgICBjb25zdCBsZXhQYWNrYWdlRGlyID0gZGlybmFtZShsZXhQYWNrYWdlUGF0aCk7XG4gICAgY29uc3QgbGV4V2VicGFja0NvbmZpZyA9IHBhdGhSZXNvbHZlKGxleFBhY2thZ2VEaXIsICd3ZWJwYWNrLmNvbmZpZy5qcycpO1xuXG4gICAgaWYoZXhpc3RzU3luYyhsZXhXZWJwYWNrQ29uZmlnKSkge1xuICAgICAgd2VicGFja0NvbmZpZyA9IGxleFdlYnBhY2tDb25maWc7XG4gICAgICBjb25zb2xlLmxvZygnVXNpbmcgTGV4IHdlYnBhY2sgY29uZmlnOicsIHdlYnBhY2tDb25maWcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENvdWxkIG5vdCBmaW5kIHdlYnBhY2suY29uZmlnLmpzYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgc3Bpbm5lci5mYWlsKCdCdWlsZCBmYWlsZWQuJyk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdlYnBhY2tPcHRpb25zOiBzdHJpbmdbXSA9IFtcbiAgICAnLS1jb2xvcicsXG4gICAgJy0tcHJvZ3Jlc3MnLFxuICAgICctLWNvbmZpZycsIHdlYnBhY2tDb25maWdcbiAgXTtcblxuICBpZihhbmFseXplKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWFuYWx5emUnKTtcbiAgaWYoY29uZmlnTmFtZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1jb25maWdOYW1lJywgY29uZmlnTmFtZSk7XG4gIGlmKGRlZmluZVByb2Nlc3NFbnZOb2RlRW52KSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWRlZmluZVByb2Nlc3NFbnZOb2RlRW52JywgZGVmaW5lUHJvY2Vzc0Vudk5vZGVFbnYpO1xuICBpZihkZXZ0b29sKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWRldnRvb2wnLCBkZXZ0b29sKTtcbiAgaWYoZGlzYWJsZUludGVycHJldCkgd2VicGFja09wdGlvbnMucHVzaCgnLS1kaXNhYmxlSW50ZXJwcmV0Jyk7XG4gIC8vIFBhc3MgZW50cnkgZGlyZWN0bHkgYXMgQ0xJIGZsYWdcbiAgaWYoZW50cnlWYWx1ZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1lbnRyeScsIGVudHJ5VmFsdWUudG9TdHJpbmcoKSk7XG4gIGlmKGVudikgd2VicGFja09wdGlvbnMucHVzaCgnLS1lbnYnLCBlbnYpO1xuICBpZihmYWlsT25XYXJuaW5ncykgd2VicGFja09wdGlvbnMucHVzaCgnLS1mYWlsT25XYXJuaW5ncycpO1xuICBpZihqc29uKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWpzb24nLCBqc29uKTtcbiAgaWYobW9kZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1tb2RlJywgbW9kZSk7XG4gIGlmKG1lcmdlKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW1lcmdlJyk7XG4gIGlmKG5hbWUpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbmFtZScsIG5hbWUpO1xuICBpZihub0RldnRvb2wpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9EZXZ0b29sJyk7XG4gIGlmKG5vU3RhdHMpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9TdGF0cycpO1xuICBpZihub1RhcmdldCkgd2VicGFja09wdGlvbnMucHVzaCgnLS1ub1RhcmdldCcpO1xuICBpZihub1dhdGNoKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW5vV2F0Y2gnKTtcbiAgaWYobm9XYXRjaE9wdGlvbnNTdGRpbikgd2VicGFja09wdGlvbnMucHVzaCgnLS1ub1dhdGNoT3B0aW9uc1N0ZGluJyk7XG4gIGlmKG5vZGVFbnYpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9kZUVudicsIG5vZGVFbnYpO1xuICBpZihvdXRwdXRQYXRoKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW91dHB1dC1wYXRoJywgb3V0cHV0UGF0aC50b1N0cmluZygpKTsgLy8gQ29udmVydCB0byBzdHJpbmdcbiAgaWYoc3RhdHMpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tc3RhdHMnLCBzdGF0cyk7XG4gIGlmKHRhcmdldCkgd2VicGFja09wdGlvbnMucHVzaCgnLS10YXJnZXQnLCB0YXJnZXQpO1xuICBpZih3YXRjaCkgd2VicGFja09wdGlvbnMucHVzaCgnLS13YXRjaCcpO1xuICBpZih3YXRjaE9wdGlvbnNTdGRpbikgd2VicGFja09wdGlvbnMucHVzaCgnLS13YXRjaE9wdGlvbnNTdGRpbicpO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qge3dlYnBhY2tQYXRofSA9IHJlc29sdmVXZWJwYWNrUGF0aHMoY3VycmVudERpcm5hbWUpO1xuXG4gICAgLy8gRml4OiBFbnN1cmUgZmluYWxXZWJwYWNrT3B0aW9ucyBpcyBhbHdheXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgIGxldCBmaW5hbFdlYnBhY2tPcHRpb25zOiBzdHJpbmdbXTtcbiAgICBpZih3ZWJwYWNrUGF0aCA9PT0gJ25weCcpIHtcbiAgICAgIGZpbmFsV2VicGFja09wdGlvbnMgPSBbJ3dlYnBhY2snLCAuLi53ZWJwYWNrT3B0aW9uc107XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbmFsV2VicGFja09wdGlvbnMgPSBbLi4ud2VicGFja09wdGlvbnNdO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCd3ZWJwYWNrUGF0aDonLCB3ZWJwYWNrUGF0aCk7XG4gICAgY29uc29sZS5sb2coJ2ZpbmFsV2VicGFja09wdGlvbnM6JywgSlNPTi5zdHJpbmdpZnkoZmluYWxXZWJwYWNrT3B0aW9ucykpO1xuICAgIGNvbnNvbGUubG9nKCdmaW5hbFdlYnBhY2tPcHRpb25zIHR5cGU6JywgQXJyYXkuaXNBcnJheShmaW5hbFdlYnBhY2tPcHRpb25zKSA/ICdBcnJheScgOiB0eXBlb2YgZmluYWxXZWJwYWNrT3B0aW9ucyk7XG5cbiAgICAvLyBNYWtlIHN1cmUgd2UncmUgcGFzc2luZyBhbiBhcnJheSBvZiBzdHJpbmdzIHRvIGV4ZWNhXG4gICAgY29uc3QgY2hpbGRQcm9jZXNzID0gZXhlY2Eod2VicGFja1BhdGgsIGZpbmFsV2VicGFja09wdGlvbnMsIHtlbmNvZGluZzogJ3V0ZjgnLCBzdGRpbzogJ3BpcGUnfSk7XG5cbiAgICBsZXQgYnVpbGRDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICBsZXQgYnVpbGRTdGF0cyA9IHtcbiAgICAgIG1vZHVsZXM6IDAsXG4gICAgICBhc3NldHM6IDAsXG4gICAgICBzaXplOiAnMCBCJ1xuICAgIH07XG5cbiAgICBjaGlsZFByb2Nlc3Muc3Rkb3V0Py5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGRhdGEudG9TdHJpbmcoKTtcblxuICAgICAgaGFuZGxlV2VicGFja1Byb2dyZXNzKG91dHB1dCwgc3Bpbm5lciwgcXVpZXQsICfwn4+X77iPJywgJ1dlYnBhY2sgQnVpbGRpbmcnKTtcblxuICAgICAgaWYoIWJ1aWxkQ29tcGxldGVkICYmIG91dHB1dC5pbmNsdWRlcygnY29tcGlsZWQgc3VjY2Vzc2Z1bGx5JykpIHtcbiAgICAgICAgYnVpbGRDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0J1aWxkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhJyk7XG5cbiAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBtb2R1bGVzLyk7XG4gICAgICAgIGNvbnN0IGFzc2V0TWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBhc3NldHMvKTtcbiAgICAgICAgY29uc3Qgc2l6ZU1hdGNoID0gb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgc3RhdHVzIChbXFxkLl0rIFxcdyspLykgfHwgb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgcGF0aC4qPyhbXFxkLl0rIFxcdyspLyk7XG5cbiAgICAgICAgaWYobW9kdWxlTWF0Y2gpIGJ1aWxkU3RhdHMubW9kdWxlcyA9IHBhcnNlSW50KG1vZHVsZU1hdGNoWzFdLCAxMCk7XG4gICAgICAgIGlmKGFzc2V0TWF0Y2gpIGJ1aWxkU3RhdHMuYXNzZXRzID0gcGFyc2VJbnQoYXNzZXRNYXRjaFsxXSwgMTApO1xuICAgICAgICBpZihzaXplTWF0Y2gpIGJ1aWxkU3RhdHMuc2l6ZSA9IHNpemVNYXRjaFsxXTtcblxuICAgICAgICBkaXNwbGF5QnVpbGRTdGF0dXMoJ3dlYnBhY2snLCBMZXhDb25maWcuY29uZmlnLm91dHB1dEZ1bGxQYXRoIHx8ICdsaWInLCBxdWlldCwgYnVpbGRTdGF0cyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjaGlsZFByb2Nlc3Muc3RkZXJyPy5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGRhdGEudG9TdHJpbmcoKTtcblxuICAgICAgaGFuZGxlV2VicGFja1Byb2dyZXNzKG91dHB1dCwgc3Bpbm5lciwgcXVpZXQsICfwn4+X77iPJywgJ1dlYnBhY2sgQnVpbGRpbmcnKTtcblxuICAgICAgaWYoIWJ1aWxkQ29tcGxldGVkICYmIG91dHB1dC5pbmNsdWRlcygnY29tcGlsZWQgc3VjY2Vzc2Z1bGx5JykpIHtcbiAgICAgICAgYnVpbGRDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0J1aWxkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhJyk7XG5cbiAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBtb2R1bGVzLyk7XG4gICAgICAgIGNvbnN0IGFzc2V0TWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBhc3NldHMvKTtcbiAgICAgICAgY29uc3Qgc2l6ZU1hdGNoID0gb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgc3RhdHVzIChbXFxkLl0rIFxcdyspLykgfHwgb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgcGF0aC4qPyhbXFxkLl0rIFxcdyspLyk7XG5cbiAgICAgICAgaWYobW9kdWxlTWF0Y2gpIGJ1aWxkU3RhdHMubW9kdWxlcyA9IHBhcnNlSW50KG1vZHVsZU1hdGNoWzFdLCAxMCk7XG4gICAgICAgIGlmKGFzc2V0TWF0Y2gpIGJ1aWxkU3RhdHMuYXNzZXRzID0gcGFyc2VJbnQoYXNzZXRNYXRjaFsxXSwgMTApO1xuICAgICAgICBpZihzaXplTWF0Y2gpIGJ1aWxkU3RhdHMuc2l6ZSA9IHNpemVNYXRjaFsxXTtcblxuICAgICAgICBkaXNwbGF5QnVpbGRTdGF0dXMoJ3dlYnBhY2snLCBMZXhDb25maWcuY29uZmlnLm91dHB1dEZ1bGxQYXRoIHx8ICdsaWInLCBxdWlldCwgYnVpbGRTdGF0cyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhd2FpdCBjaGlsZFByb2Nlc3M7XG5cbiAgICBpZighYnVpbGRDb21wbGV0ZWQpIHtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZCgnQnVpbGQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSEnKTtcbiAgICAgIGRpc3BsYXlCdWlsZFN0YXR1cygnd2VicGFjaycsIExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGggfHwgJ2xpYicsIHF1aWV0LCBidWlsZFN0YXRzKTtcbiAgICB9XG5cbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIHNwaW5uZXIuZmFpbCgnQnVpbGQgZmFpbGVkLicpO1xuXG4gICAgaWYoY21kLmFzc2lzdCkge1xuICAgICAgc3Bpbm5lci5zdGFydCgnQUkgaXMgYW5hbHl6aW5nIHRoZSB3ZWJwYWNrIGVycm9yLi4uJyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGFpRnVuY3Rpb24oe1xuICAgICAgICAgIHByb21wdDogYEZpeCB0aGlzIHdlYnBhY2sgYnVpbGQgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1cXG5cXG5FcnJvciBkZXRhaWxzOlxcbiR7ZXJyb3IudG9TdHJpbmcoKX1cXG5cXG5Db25maWd1cmF0aW9uIHVzZWQ6XFxuJHtKU09OLnN0cmluZ2lmeSh3ZWJwYWNrT3B0aW9ucywgbnVsbCwgMil9YCxcbiAgICAgICAgICB0YXNrOiAnaGVscCcsXG4gICAgICAgICAgY29udGV4dDogdHJ1ZSxcbiAgICAgICAgICBxdWlldFxuICAgICAgICB9KTtcblxuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0FJIGFuYWx5c2lzIGNvbXBsZXRlJyk7XG4gICAgICB9IGNhdGNoKGFpRXJyb3IpIHtcbiAgICAgICAgc3Bpbm5lci5mYWlsKCdDb3VsZCBub3QgZ2VuZXJhdGUgQUkgYXNzaXN0YW5jZScpO1xuICAgICAgICBpZighcXVpZXQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdBSSBhc3Npc3RhbmNlIGVycm9yOicsIGFpRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZCA9IGFzeW5jIChjbWQ6IEJ1aWxkT3B0aW9ucywgY2FsbGJhY2s6IEJ1aWxkQ2FsbGJhY2sgPSAoKSA9PiAoe30pKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge1xuICAgIGJ1bmRsZXIgPSAnd2VicGFjaycsXG4gICAgY2xpTmFtZSA9ICdMZXgnLFxuICAgIHF1aWV0ID0gZmFsc2UsXG4gICAgcmVtb3ZlID0gZmFsc2UsXG4gICAgdGVzdCA9IGZhbHNlLFxuICAgIHRyYW5zbGF0aW9ucyA9IGZhbHNlLFxuICAgIHZhcmlhYmxlcyA9ICd7fSdcbiAgfSA9IGNtZDtcblxuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgbG9nKGAke2NsaU5hbWV9IGJ1aWxkaW5nLi4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgYXdhaXQgTGV4Q29uZmlnLnBhcnNlQ29uZmlnKGNtZCk7XG5cbiAgY29uc3Qge291dHB1dEZ1bGxQYXRoLCB1c2VUeXBlc2NyaXB0fSA9IExleENvbmZpZy5jb25maWc7XG5cbiAgY2hlY2tMaW5rZWRNb2R1bGVzKCk7XG5cbiAgbGV0IHZhcmlhYmxlc09iajogb2JqZWN0ID0ge05PREVfRU5WOiAncHJvZHVjdGlvbid9O1xuXG4gIGlmKHZhcmlhYmxlcykge1xuICAgIHRyeSB7XG4gICAgICB2YXJpYWJsZXNPYmogPSBKU09OLnBhcnNlKHZhcmlhYmxlcyk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgb3B0aW9uIGlzIG5vdCBhIHZhbGlkIEpTT04gb2JqZWN0LmAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzLmVudiA9IHsuLi5wcm9jZXNzLmVudiwgLi4udmFyaWFibGVzT2JqfTtcblxuICAvLyBJZiBpbiB0ZXN0IG1vZGUsIGV4aXQgZWFybHlcbiAgaWYodGVzdCkge1xuICAgIGxvZygnVGVzdCBtb2RlOiBCdWlsZCBlbnZpcm9ubWVudCBsb2FkZWQsIGV4aXRpbmcnLCAnaW5mbycsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8vIFByb2Nlc3MgdHJhbnNsYXRpb25zIGlmIGZsYWcgaXMgZW5hYmxlZCAoYmVmb3JlIGJ1aWxkaW5nKVxuICBpZih0cmFuc2xhdGlvbnMpIHtcbiAgICBzcGlubmVyLnN0YXJ0KCdQcm9jZXNzaW5nIHRyYW5zbGF0aW9ucy4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBMZXhDb25maWcuY29uZmlnLnNvdXJjZUZ1bGxQYXRoIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgICBjb25zdCBvdXRwdXRQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRGdWxsUGF0aCB8fCAnbGliJztcblxuICAgICAgYXdhaXQgcHJvY2Vzc1RyYW5zbGF0aW9ucyhzb3VyY2VQYXRoLCBvdXRwdXRQYXRoLCBxdWlldCk7XG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ1RyYW5zbGF0aW9ucyBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICAgIH0gY2F0Y2godHJhbnNsYXRpb25FcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBGYWlsZWQgdG8gcHJvY2VzcyB0cmFuc2xhdGlvbnM6ICR7dHJhbnNsYXRpb25FcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIHByb2Nlc3MgdHJhbnNsYXRpb25zLicpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBzcGlubmVyLnN0YXJ0KCdCdWlsZGluZyBjb2RlLi4uJyk7XG5cbiAgaWYocmVtb3ZlKSB7XG4gICAgYXdhaXQgcmVtb3ZlRmlsZXMob3V0cHV0RnVsbFBhdGggfHwgJycpO1xuICB9XG5cbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIGNvbnN0IGNvbXBpbGVDb25maWdQYXRoID0gZ2V0VHlwZVNjcmlwdENvbmZpZ1BhdGgoJ3RzY29uZmlnLmJ1aWxkLmpzb24nKTtcbiAgICBpZihleGlzdHNTeW5jKGNvbXBpbGVDb25maWdQYXRoKSkge1xuICAgICAgbG9nKCdVc2luZyB0c2NvbmZpZy5idWlsZC5qc29uIGZvciBidWlsZC4uLicsICdpbmZvJywgcXVpZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBMZXhDb25maWcuY2hlY2tDb21waWxlVHlwZXNjcmlwdENvbmZpZygpO1xuICAgIH1cbiAgfVxuXG4gIGxldCBidWlsZFJlc3VsdCA9IDA7XG5cbiAgaWYoYnVuZGxlciA9PT0gJ3N3YycpIHtcbiAgICBidWlsZFJlc3VsdCA9IGF3YWl0IGJ1aWxkV2l0aFNXQyhzcGlubmVyLCBjbWQsIChzdGF0dXMpID0+IHtcbiAgICAgIGJ1aWxkUmVzdWx0ID0gc3RhdHVzO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGJ1aWxkUmVzdWx0ID0gYXdhaXQgYnVpbGRXaXRoV2VicGFjayhzcGlubmVyLCBjbWQsIChzdGF0dXMpID0+IHtcbiAgICAgIGJ1aWxkUmVzdWx0ID0gc3RhdHVzO1xuICAgIH0pO1xuICB9XG5cbiAgaWYoYnVpbGRSZXN1bHQgPT09IDAgJiYgY21kLmFuYWx5emUpIHtcbiAgICBzcGlubmVyLnN0YXJ0KCdBSSBpcyBhbmFseXppbmcgdGhlIGJ1aWxkIG91dHB1dCBmb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0cyA9IHtcbiAgICAgICAgb3V0cHV0UGF0aDogTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRGdWxsUGF0aCxcbiAgICAgICAgZW50cnlQb2ludHM6IGJ1bmRsZXIgPT09ICdzd2MnID9cbiAgICAgICAgICBgU291cmNlIGZpbGVzOiAke0xleENvbmZpZy5jb25maWcuc291cmNlRnVsbFBhdGh9LyoqLyoue3RzLGpzfWAgOlxuICAgICAgICAgIExleENvbmZpZy5jb25maWcud2VicGFjaz8uZW50cnkgfHwgJ1Vua25vd24gZW50cnkgcG9pbnRzJ1xuICAgICAgfTtcblxuICAgICAgYXdhaXQgYWlGdW5jdGlvbih7XG4gICAgICAgIHByb21wdDogYEFuYWx5emUgdGhpcyBidWlsZCBmb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXM6XG5cbkJ1aWxkIFR5cGU6ICR7YnVuZGxlcn1cbkZvcm1hdDogJHtjbWQuZm9ybWF0IHx8ICdkZWZhdWx0J31cbkVudmlyb25tZW50OiAke0xleENvbmZpZy5jb25maWcudGFyZ2V0RW52aXJvbm1lbnR9XG4ke0pTT04uc3RyaW5naWZ5KHN0YXRzLCBudWxsLCAyKX1cblxuV2hhdCBhcmUgdGhlIGtleSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBmb3IgdGhpcyBidWlsZCBjb25maWd1cmF0aW9uPyBDb25zaWRlcjpcbjEuIEJ1bmRsZSBzaXplIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzXG4yLiBDb2RlIHNwbGl0dGluZyByZWNvbW1lbmRhdGlvbnNcbjMuIFRyZWUtc2hha2luZyBpbXByb3ZlbWVudHNcbjQuIFBlcmZvcm1hbmNlIGVuaGFuY2VtZW50c1xuNS4gRGVwZW5kZW5jeSBvcHRpbWl6YXRpb25zYCxcbiAgICAgICAgdGFzazogJ29wdGltaXplJyxcbiAgICAgICAgY29udGV4dDogdHJ1ZSxcbiAgICAgICAgcXVpZXRcbiAgICAgIH0pO1xuXG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ0FJIGJ1aWxkIGFuYWx5c2lzIGNvbXBsZXRlJyk7XG4gICAgfSBjYXRjaChhaUVycm9yKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0NvdWxkIG5vdCBnZW5lcmF0ZSBBSSBvcHRpbWl6YXRpb24gYW5hbHlzaXMnKTtcbiAgICAgIGlmKCFxdWlldCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdBSSBhbmFseXNpcyBlcnJvcjonLCBhaUVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZihidWlsZFJlc3VsdCA9PT0gMCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb3B5Q29uZmlndXJlZEZpbGVzKHNwaW5uZXIsIExleENvbmZpZy5jb25maWcsIHF1aWV0KTtcbiAgICB9IGNhdGNoKGNvcHlFcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBGYWlsZWQgdG8gY29weSBjb25maWd1cmVkIGZpbGVzOiAke2NvcHlFcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgY2FsbGJhY2soYnVpbGRSZXN1bHQpO1xuICByZXR1cm4gYnVpbGRSZXN1bHQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBidWlsZDtcbiJdLCJuYW1lcyI6WyJ0cmFuc2Zvcm0iLCJleGVjYSIsImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJzeW5jIiwiZ2xvYlN5bmMiLCJkaXJuYW1lIiwicmVzb2x2ZSIsInBhdGhSZXNvbHZlIiwiTGV4Q29uZmlnIiwiZ2V0VHlwZVNjcmlwdENvbmZpZ1BhdGgiLCJjaGVja0xpbmtlZE1vZHVsZXMiLCJjb3B5Q29uZmlndXJlZEZpbGVzIiwiY3JlYXRlU3Bpbm5lciIsImhhbmRsZVdlYnBhY2tQcm9ncmVzcyIsInJlbW92ZUZpbGVzIiwicmVzb2x2ZVdlYnBhY2tQYXRocyIsImdldExleFBhY2thZ2VKc29uUGF0aCIsImxvZyIsInByb2Nlc3NUcmFuc2xhdGlvbnMiLCJhaUZ1bmN0aW9uIiwiYm94ZW4iLCJjaGFsayIsImN1cnJlbnRGaWxlbmFtZSIsImN1cnJlbnREaXJuYW1lIiwiZXZhbCIsInByb2Nlc3MiLCJjd2QiLCJkaXNwbGF5QnVpbGRTdGF0dXMiLCJidW5kbGVyIiwib3V0cHV0UGF0aCIsInF1aWV0Iiwic3RhdHMiLCJzdGF0c0luZm8iLCJtb2R1bGVzIiwiYXNzZXRzIiwiZ3JlZW4iLCJjeWFuIiwic2l6ZSIsInN0YXR1c0JveCIsImJvbGQiLCJ1bmRlcmxpbmUiLCJ5ZWxsb3ciLCJwYWRkaW5nIiwibWFyZ2luIiwiYm9yZGVyU3R5bGUiLCJib3JkZXJDb2xvciIsImJhY2tncm91bmRDb2xvciIsImNvbnNvbGUiLCJidWlsZFdpdGhTV0MiLCJzcGlubmVyIiwiY29tbWFuZE9wdGlvbnMiLCJjYWxsYmFjayIsImNsaU5hbWUiLCJmb3JtYXQiLCJzb3VyY2VQYXRoIiwid2F0Y2giLCJvdXRwdXRGdWxsUGF0aCIsInNvdXJjZUZ1bGxQYXRoIiwic3djIiwic3djQ29uZmlnIiwidGFyZ2V0RW52aXJvbm1lbnQiLCJ1c2VHcmFwaFFsIiwidXNlVHlwZXNjcmlwdCIsImNvbmZpZyIsInNvdXJjZURpciIsImdsb2JPcHRpb25zIiwiZG90Iiwibm9kaXIiLCJub3NvcnQiLCJ0c0ZpbGVzIiwianNGaWxlcyIsInNvdXJjZUZpbGVzIiwib3V0cHV0RGlyIiwic3RhcnQiLCJmaWxlIiwicmVwbGFjZSIsIm91dHB1dERpclBhdGgiLCJta2RpclN5bmMiLCJyZWN1cnNpdmUiLCJzb3VyY2VDb2RlIiwiaXNUU1giLCJlbmRzV2l0aCIsInN3Y09wdGlvbnMiLCJmaWxlbmFtZSIsImpzYyIsInBhcnNlciIsInN5bnRheCIsInRzeCIsImRlY29yYXRvcnMiLCJkeW5hbWljSW1wb3J0IiwidGFyZ2V0IiwicmVhY3QiLCJydW50aW1lIiwibW9kdWxlIiwidHlwZSIsInJlc3VsdCIsIndyaXRlRmlsZVN5bmMiLCJjb2RlIiwic3VjY2VlZCIsImVycm9yIiwiZmFpbCIsImJ1aWxkV2l0aFdlYnBhY2siLCJjbWQiLCJhbmFseXplIiwiY29uZmlnTmFtZSIsImRlZmluZVByb2Nlc3NFbnZOb2RlRW52IiwiZGV2dG9vbCIsImRpc2FibGVJbnRlcnByZXQiLCJlbnRyeSIsImVudiIsImZhaWxPbldhcm5pbmdzIiwianNvbiIsIm1lcmdlIiwibW9kZSIsIm5hbWUiLCJub2RlRW52Iiwibm9EZXZ0b29sIiwibm9TdGF0cyIsIm5vVGFyZ2V0Iiwibm9XYXRjaCIsIm5vV2F0Y2hPcHRpb25zU3RkaW4iLCJ3YXRjaE9wdGlvbnNTdGRpbiIsImVudHJ5VmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJ3ZWJwYWNrQ29uZmlnIiwiaXNSZWxhdGl2ZUNvbmZpZyIsInN1YnN0ciIsInByb2plY3RDb25maWdQYXRoIiwicHJvamVjdENvbmZpZ1BhdGhUcyIsImhhc1Byb2plY3RDb25maWciLCJyZXNvbHZlZENvbmZpZyIsImxleFBhY2thZ2VQYXRoIiwibGV4UGFja2FnZURpciIsImxleFdlYnBhY2tDb25maWciLCJ3ZWJwYWNrT3B0aW9ucyIsInB1c2giLCJ0b1N0cmluZyIsIndlYnBhY2tQYXRoIiwiZmluYWxXZWJwYWNrT3B0aW9ucyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjaGlsZFByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiYnVpbGRDb21wbGV0ZWQiLCJidWlsZFN0YXRzIiwic3Rkb3V0Iiwib24iLCJkYXRhIiwib3V0cHV0IiwiaW5jbHVkZXMiLCJtb2R1bGVNYXRjaCIsIm1hdGNoIiwiYXNzZXRNYXRjaCIsInNpemVNYXRjaCIsInBhcnNlSW50Iiwic3RkZXJyIiwibWVzc2FnZSIsImFzc2lzdCIsInByb21wdCIsInRhc2siLCJjb250ZXh0IiwiYWlFcnJvciIsImJ1aWxkIiwicmVtb3ZlIiwidGVzdCIsInRyYW5zbGF0aW9ucyIsInZhcmlhYmxlcyIsInBhcnNlQ29uZmlnIiwidmFyaWFibGVzT2JqIiwiTk9ERV9FTlYiLCJwYXJzZSIsInRyYW5zbGF0aW9uRXJyb3IiLCJjb21waWxlQ29uZmlnUGF0aCIsImNoZWNrQ29tcGlsZVR5cGVzY3JpcHRDb25maWciLCJidWlsZFJlc3VsdCIsInN0YXR1cyIsImVudHJ5UG9pbnRzIiwid2VicGFjayIsImNvcHlFcnJvciJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsU0FBUyxRQUFPLFlBQVk7QUFDcEMsU0FBUUMsS0FBSyxRQUFPLFFBQVE7QUFDNUIsU0FBUUMsVUFBVSxFQUFFQyxZQUFZLFFBQU8sS0FBSztBQUM1QyxTQUFRQyxRQUFRQyxRQUFRLFFBQU8sT0FBTztBQUN0QyxTQUFRQyxPQUFPLEVBQUVDLFdBQVdDLFdBQVcsUUFBTyxPQUFPO0FBRXJELFNBQVFDLFNBQVMsRUFBRUMsdUJBQXVCLFFBQU8scUJBQXFCO0FBQ3RFLFNBQVFDLGtCQUFrQixFQUFFQyxtQkFBbUIsRUFBRUMsYUFBYSxFQUFxQkMscUJBQXFCLEVBQUVDLFdBQVcsUUFBTyxxQkFBcUI7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
|
|
392
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9idWlsZC9idWlsZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHt0cmFuc2Zvcm19IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQge2V4ZWNhfSBmcm9tICdleGVjYSc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCB7ZGlybmFtZSwgcmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZX0gZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7TGV4Q29uZmlnLCBnZXRUeXBlU2NyaXB0Q29uZmlnUGF0aH0gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y2hlY2tMaW5rZWRNb2R1bGVzLCBjb3B5Q29uZmlndXJlZEZpbGVzLCBjcmVhdGVTcGlubmVyLCBjcmVhdGVQcm9ncmVzc0JhciwgaGFuZGxlV2VicGFja1Byb2dyZXNzLCByZW1vdmVGaWxlc30gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7Z2V0RGlyTmFtZSwgcmVsYXRpdmVOb2RlUGF0aCwgcmVzb2x2ZVdlYnBhY2tQYXRocywgZ2V0TGV4UGFja2FnZUpzb25QYXRofSBmcm9tICcuLi8uLi91dGlscy9maWxlLmpzJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi8uLi91dGlscy9sb2cuanMnO1xuaW1wb3J0IHtwcm9jZXNzVHJhbnNsYXRpb25zfSBmcm9tICcuLi8uLi91dGlscy90cmFuc2xhdGlvbnMuanMnO1xuaW1wb3J0IHthaUZ1bmN0aW9ufSBmcm9tICcuLi9haS9haS5qcyc7XG5pbXBvcnQgYm94ZW4gZnJvbSAnYm94ZW4nO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcblxubGV0IGN1cnJlbnRGaWxlbmFtZTogc3RyaW5nO1xubGV0IGN1cnJlbnREaXJuYW1lOiBzdHJpbmc7XG5cbnRyeSB7XG4gIGN1cnJlbnRGaWxlbmFtZSA9IGV2YWwoJ3JlcXVpcmUoXCJ1cmxcIikuZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpJyk7XG4gIGN1cnJlbnREaXJuYW1lID0gZGlybmFtZShjdXJyZW50RmlsZW5hbWUpO1xufSBjYXRjaCB7XG4gIGN1cnJlbnRGaWxlbmFtZSA9IHByb2Nlc3MuY3dkKCk7XG4gIGN1cnJlbnREaXJuYW1lID0gcHJvY2Vzcy5jd2QoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZE9wdGlvbnMge1xuICByZWFkb25seSBhc3Npc3Q/OiBib29sZWFuO1xuICByZWFkb25seSBhbmFseXplPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgYnVuZGxlcj86ICd3ZWJwYWNrJyB8ICdzd2MnO1xuICByZWFkb25seSBjbGlOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBlbnRyeT86IHN0cmluZzsgLy8gPC0tIGFkZCBlbnRyeVxuICByZWFkb25seSBmb3JtYXQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dHB1dFBhdGg/OiBzdHJpbmc7IC8vIDwtLSBhbHJlYWR5IHByZXNlbnRcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSByZW1vdmU/OiBib29sZWFuO1xuICByZWFkb25seSBzb3VyY2VQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSB0ZXN0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdHJhbnNsYXRpb25zPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdmFyaWFibGVzPzogc3RyaW5nO1xuICByZWFkb25seSB3YXRjaD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIEJ1aWxkQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmNvbnN0IGRpc3BsYXlCdWlsZFN0YXR1cyA9IChidW5kbGVyOiBzdHJpbmcsIG91dHB1dFBhdGg6IHN0cmluZywgcXVpZXQ6IGJvb2xlYW4sIHN0YXRzPzoge21vZHVsZXM/OiBudW1iZXI7IGFzc2V0cz86IG51bWJlcjsgc2l6ZT86IHN0cmluZ30pID0+IHtcbiAgaWYocXVpZXQpIHJldHVybjtcblxuICBsZXQgc3RhdHNJbmZvID0gJyc7XG4gIGlmKHN0YXRzICYmIHN0YXRzLm1vZHVsZXMgJiYgc3RhdHMuYXNzZXRzKSB7XG4gICAgc3RhdHNJbmZvID0gYFxcbiR7Y2hhbGsuZ3JlZW4oJ01vZHVsZXM6Jyl9ICAgICR7Y2hhbGsuY3lhbihzdGF0cy5tb2R1bGVzKX1cXG5gICtcbiAgICAgIGAke2NoYWxrLmdyZWVuKCdBc3NldHM6Jyl9ICAgICAke2NoYWxrLmN5YW4oc3RhdHMuYXNzZXRzKX1cXG5gICtcbiAgICAgIGAke2NoYWxrLmdyZWVuKCdTaXplOicpfSAgICAgICAke2NoYWxrLmN5YW4oc3RhdHMuc2l6ZSl9XFxuYDtcbiAgfVxuXG4gIGNvbnN0IHN0YXR1c0JveCA9IGJveGVuKFxuICAgIGAke2NoYWxrLmN5YW4uYm9sZCgn8J+Pl++4jyAgQnVpbGQgQ29tcGxldGVkIFN1Y2Nlc3NmdWxseScpfVxcblxcbmAgK1xuICAgIGAke2NoYWxrLmdyZWVuKCdCdW5kbGVyOicpfSAgICAke2NoYWxrLmN5YW4oYnVuZGxlcil9XFxuYCArXG4gICAgYCR7Y2hhbGsuZ3JlZW4oJ091dHB1dDonKX0gICAgICR7Y2hhbGsudW5kZXJsaW5lKG91dHB1dFBhdGgpfSR7c3RhdHNJbmZvfVxcbmAgK1xuICAgIGAke2NoYWxrLnllbGxvdygnUmVhZHkgZm9yIGRlcGxveW1lbnQhIPCfmoAnKX1gLFxuICAgIHtcbiAgICAgIHBhZGRpbmc6IDEsXG4gICAgICBtYXJnaW46IDEsXG4gICAgICBib3JkZXJTdHlsZTogJ3JvdW5kJyxcbiAgICAgIGJvcmRlckNvbG9yOiAnZ3JlZW4nLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzFhMWExYSdcbiAgICB9XG4gICk7XG5cbiAgY29uc29sZS5sb2coJ1xcbicgKyBzdGF0dXNCb3ggKyAnXFxuJyk7XG59O1xuXG4vLyBSZW1vdmVkIGJ1aWxkV2l0aEVzQnVpbGQgZnVuY3Rpb24gLSB1c2luZyBTV0MgaW5zdGVhZFxuXG5leHBvcnQgY29uc3QgYnVpbGRXaXRoU1dDID0gYXN5bmMgKHNwaW5uZXIsIGNvbW1hbmRPcHRpb25zOiBCdWlsZE9wdGlvbnMsIGNhbGxiYWNrOiBCdWlsZENhbGxiYWNrKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgZm9ybWF0ID0gJ2VzbScsXG4gICAgb3V0cHV0UGF0aCxcbiAgICBxdWlldCxcbiAgICBzb3VyY2VQYXRoLFxuICAgIHdhdGNoXG4gIH0gPSBjb21tYW5kT3B0aW9ucztcbiAgY29uc3Qge1xuICAgIG91dHB1dEZ1bGxQYXRoLFxuICAgIHNvdXJjZUZ1bGxQYXRoLFxuICAgIHN3Yzogc3djQ29uZmlnLFxuICAgIHRhcmdldEVudmlyb25tZW50LFxuICAgIHVzZUdyYXBoUWwsXG4gICAgdXNlVHlwZXNjcmlwdFxuICB9ID0gTGV4Q29uZmlnLmNvbmZpZztcbiAgY29uc3Qgc291cmNlRGlyOiBzdHJpbmcgPSBzb3VyY2VQYXRoID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgYC4vJHtzb3VyY2VQYXRofWApIDogc291cmNlRnVsbFBhdGggfHwgJyc7XG5cbiAgY29uc3QgZ2xvYk9wdGlvbnMgPSB7XG4gICAgY3dkOiBzb3VyY2VEaXIsXG4gICAgZG90OiBmYWxzZSxcbiAgICBub2RpcjogdHJ1ZSxcbiAgICBub3NvcnQ6IHRydWVcbiAgfTtcbiAgY29uc3QgdHNGaWxlczogc3RyaW5nW10gPSBnbG9iU3luYyhgJHtzb3VyY2VEaXJ9LyoqLyEoKi5zcGVjfCoudGVzdCkudHMqYCwgZ2xvYk9wdGlvbnMpO1xuICBjb25zdCBqc0ZpbGVzOiBzdHJpbmdbXSA9IGdsb2JTeW5jKGAke3NvdXJjZURpcn0vKiovISgqLnNwZWN8Ki50ZXN0KS5qc2AsIGdsb2JPcHRpb25zKTtcbiAgY29uc3Qgc291cmNlRmlsZXM6IHN0cmluZ1tdID0gWy4uLnRzRmlsZXMsIC4uLmpzRmlsZXNdO1xuXG4gIGNvbnN0IG91dHB1dERpcjogc3RyaW5nID0gb3V0cHV0UGF0aCB8fCBvdXRwdXRGdWxsUGF0aCB8fCAnJztcblxuICB0cnkge1xuICAgIHNwaW5uZXIuc3RhcnQoJ0J1aWxkaW5nIHdpdGggU1dDLi4uJyk7XG5cbiAgICBmb3IoY29uc3QgZmlsZSBvZiBzb3VyY2VGaWxlcykge1xuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IHBhdGhSZXNvbHZlKHNvdXJjZURpciwgZmlsZSk7XG4gICAgICBjb25zdCBvdXRwdXRQYXRoID0gcGF0aFJlc29sdmUob3V0cHV0RGlyLCBmaWxlLnJlcGxhY2UoL1xcLih0c3x0c3gpJC8sICcuanMnKSk7XG5cbiAgICAgIC8vIEVuc3VyZSBvdXRwdXQgZGlyZWN0b3J5IGV4aXN0c1xuICAgICAgY29uc3Qgb3V0cHV0RGlyUGF0aCA9IGRpcm5hbWUob3V0cHV0UGF0aCk7XG4gICAgICBpZighZXhpc3RzU3luYyhvdXRwdXREaXJQYXRoKSkge1xuICAgICAgICBjb25zdCB7bWtkaXJTeW5jfSA9IGF3YWl0IGltcG9ydCgnZnMnKTtcbiAgICAgICAgbWtkaXJTeW5jKG91dHB1dERpclBhdGgsIHtyZWN1cnNpdmU6IHRydWV9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlQ29kZSA9IHJlYWRGaWxlU3luYyhzb3VyY2VQYXRoLCAndXRmOCcpO1xuXG4gICAgICBjb25zdCBpc1RTWCA9IGZpbGUuZW5kc1dpdGgoJy50c3gnKTtcblxuICAgICAgLy8gTWVyZ2UgU1dDIGNvbmZpZyB3aXRoIGNvbW1hbmQtc3BlY2lmaWMgb3ZlcnJpZGVzXG4gICAgICBjb25zdCBzd2NPcHRpb25zID0ge1xuICAgICAgICBmaWxlbmFtZTogZmlsZSxcbiAgICAgICAgLi4uc3djQ29uZmlnLFxuICAgICAgICBqc2M6IHtcbiAgICAgICAgICAuLi5zd2NDb25maWc/LmpzYyxcbiAgICAgICAgICBwYXJzZXI6IHtcbiAgICAgICAgICAgIHN5bnRheDogJ3R5cGVzY3JpcHQnIGFzIGNvbnN0LFxuICAgICAgICAgICAgdHN4OiBpc1RTWCxcbiAgICAgICAgICAgIGRlY29yYXRvcnM6IHN3Y0NvbmZpZz8uanNjPy5wYXJzZXI/LmRlY29yYXRvcnMgPz8gdHJ1ZSxcbiAgICAgICAgICAgIGR5bmFtaWNJbXBvcnQ6IHN3Y0NvbmZpZz8uanNjPy5wYXJzZXI/LmR5bmFtaWNJbXBvcnQgPz8gdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGFyZ2V0OiBzd2NDb25maWc/LmpzYz8udGFyZ2V0ID8/ICdlczIwMjAnLFxuICAgICAgICAgIHRyYW5zZm9ybTogaXNUU1ggPyB7XG4gICAgICAgICAgICAuLi5zd2NDb25maWc/LmpzYz8udHJhbnNmb3JtLFxuICAgICAgICAgICAgcmVhY3Q6IHtcbiAgICAgICAgICAgICAgcnVudGltZTogJ2F1dG9tYXRpYycgYXMgY29uc3QsXG4gICAgICAgICAgICAgIC4uLnN3Y0NvbmZpZz8uanNjPy50cmFuc2Zvcm0/LnJlYWN0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSA6IHN3Y0NvbmZpZz8uanNjPy50cmFuc2Zvcm1cbiAgICAgICAgfSxcbiAgICAgICAgbW9kdWxlOiB7XG4gICAgICAgICAgLi4uc3djQ29uZmlnPy5tb2R1bGUsXG4gICAgICAgICAgdHlwZTogZm9ybWF0ID09PSAnY2pzJyA/ICdjb21tb25qcycgYXMgY29uc3QgOiAoc3djQ29uZmlnPy5tb2R1bGU/LnR5cGUgYXMgJ2VzNicgfHwgJ2VzNicpXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybShzb3VyY2VDb2RlLCBzd2NPcHRpb25zKTtcblxuICAgICAgY29uc3Qge3dyaXRlRmlsZVN5bmN9ID0gYXdhaXQgaW1wb3J0KCdmcycpO1xuICAgICAgd3JpdGVGaWxlU3luYyhvdXRwdXRQYXRoLCByZXN1bHQuY29kZSk7XG4gICAgfVxuXG4gICAgc3Bpbm5lci5zdWNjZWVkKCdCdWlsZCBjb21wbGV0ZWQgd2l0aCBTV0MnKTtcbiAgICBkaXNwbGF5QnVpbGRTdGF0dXMoJ1NXQycsIG91dHB1dERpciwgcXVpZXQpO1xuICAgIGNhbGxiYWNrKDApO1xuICAgIHJldHVybiAwO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdCdWlsZCBmYWlsZWQgd2l0aCBTV0MnKTtcbiAgICBpZighcXVpZXQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkV2l0aFdlYnBhY2sgPSBhc3luYyAoc3Bpbm5lciwgY21kLCBjYWxsYmFjaykgPT4ge1xuICBjb25zdCB7XG4gICAgYW5hbHl6ZSxcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZ05hbWUsXG4gICAgZGVmaW5lUHJvY2Vzc0Vudk5vZGVFbnYsXG4gICAgZGV2dG9vbCxcbiAgICBkaXNhYmxlSW50ZXJwcmV0LFxuICAgIGVudHJ5LFxuICAgIGVudixcbiAgICBmYWlsT25XYXJuaW5ncyxcbiAgICBqc29uLFxuICAgIG1lcmdlLFxuICAgIG1vZGUsXG4gICAgbmFtZSxcbiAgICBub2RlRW52LFxuICAgIG5vRGV2dG9vbCxcbiAgICBub1N0YXRzLFxuICAgIG5vVGFyZ2V0LFxuICAgIG5vV2F0Y2gsXG4gICAgbm9XYXRjaE9wdGlvbnNTdGRpbixcbiAgICBvdXRwdXRQYXRoLFxuICAgIHF1aWV0ID0gZmFsc2UsXG4gICAgc3RhdHMsXG4gICAgdGFyZ2V0LFxuICAgIHdhdGNoLFxuICAgIHdhdGNoT3B0aW9uc1N0ZGluXG4gIH0gPSBjbWQ7XG5cbiAgY29uc29sZS5sb2coJ2VudHJ5OicsIGVudHJ5LCAndHlwZTonLCB0eXBlb2YgZW50cnkpO1xuICBjb25zb2xlLmxvZygnb3V0cHV0UGF0aDonLCBvdXRwdXRQYXRoLCAndHlwZTonLCB0eXBlb2Ygb3V0cHV0UGF0aCk7XG5cbiAgY29uc3QgZW50cnlWYWx1ZSA9IEFycmF5LmlzQXJyYXkoZW50cnkpID8gZW50cnlbMF0gOiBlbnRyeTtcblxuICBsZXQgd2VicGFja0NvbmZpZzogc3RyaW5nO1xuXG4gIGlmKGNvbmZpZykge1xuICAgIGNvbnN0IGlzUmVsYXRpdmVDb25maWc6IGJvb2xlYW4gPSBjb25maWcuc3Vic3RyKDAsIDIpID09PSAnLi8nO1xuICAgIHdlYnBhY2tDb25maWcgPSBpc1JlbGF0aXZlQ29uZmlnID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgY29uZmlnKSA6IGNvbmZpZztcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICd3ZWJwYWNrLmNvbmZpZy5qcycpO1xuICAgIGNvbnN0IHByb2plY3RDb25maWdQYXRoVHMgPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnd2VicGFjay5jb25maWcudHMnKTtcbiAgICBjb25zdCBoYXNQcm9qZWN0Q29uZmlnID0gZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aCkgfHwgZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aFRzKTtcblxuICAgIGlmKGhhc1Byb2plY3RDb25maWcpIHtcbiAgICAgIHdlYnBhY2tDb25maWcgPSBleGlzdHNTeW5jKHByb2plY3RDb25maWdQYXRoVHMpID8gcHJvamVjdENvbmZpZ1BhdGhUcyA6IHByb2plY3RDb25maWdQYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7d2VicGFja0NvbmZpZzogcmVzb2x2ZWRDb25maWd9ID0gcmVzb2x2ZVdlYnBhY2tQYXRocyhjdXJyZW50RGlybmFtZSk7XG4gICAgICB3ZWJwYWNrQ29uZmlnID0gcmVzb2x2ZWRDb25maWc7XG4gICAgfVxuICB9XG5cbiAgY29uc29sZS5sb2coJ3dlYnBhY2tDb25maWcgcGF0aDonLCB3ZWJwYWNrQ29uZmlnKTtcbiAgY29uc29sZS5sb2coJ3dlYnBhY2tDb25maWcgZXhpc3RzOicsIGV4aXN0c1N5bmMod2VicGFja0NvbmZpZykpO1xuXG4gIGlmKCFleGlzdHNTeW5jKHdlYnBhY2tDb25maWcpKSB7XG4gICAgY29uc3QgbGV4UGFja2FnZVBhdGggPSBnZXRMZXhQYWNrYWdlSnNvblBhdGgoKTtcbiAgICBjb25zdCBsZXhQYWNrYWdlRGlyID0gZGlybmFtZShsZXhQYWNrYWdlUGF0aCk7XG4gICAgY29uc3QgbGV4V2VicGFja0NvbmZpZyA9IHBhdGhSZXNvbHZlKGxleFBhY2thZ2VEaXIsICd3ZWJwYWNrLmNvbmZpZy5qcycpO1xuXG4gICAgaWYoZXhpc3RzU3luYyhsZXhXZWJwYWNrQ29uZmlnKSkge1xuICAgICAgd2VicGFja0NvbmZpZyA9IGxleFdlYnBhY2tDb25maWc7XG4gICAgICBjb25zb2xlLmxvZygnVXNpbmcgTGV4IHdlYnBhY2sgY29uZmlnOicsIHdlYnBhY2tDb25maWcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENvdWxkIG5vdCBmaW5kIHdlYnBhY2suY29uZmlnLmpzYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgc3Bpbm5lci5mYWlsKCdCdWlsZCBmYWlsZWQuJyk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdlYnBhY2tPcHRpb25zOiBzdHJpbmdbXSA9IFtcbiAgICAnLS1jb2xvcicsXG4gICAgJy0tcHJvZ3Jlc3MnLFxuICAgICctLWNvbmZpZycsIHdlYnBhY2tDb25maWdcbiAgXTtcblxuICBpZihhbmFseXplKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWFuYWx5emUnKTtcbiAgaWYoY29uZmlnTmFtZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1jb25maWdOYW1lJywgY29uZmlnTmFtZSk7XG4gIGlmKGRlZmluZVByb2Nlc3NFbnZOb2RlRW52KSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWRlZmluZVByb2Nlc3NFbnZOb2RlRW52JywgZGVmaW5lUHJvY2Vzc0Vudk5vZGVFbnYpO1xuICBpZihkZXZ0b29sKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWRldnRvb2wnLCBkZXZ0b29sKTtcbiAgaWYoZGlzYWJsZUludGVycHJldCkgd2VicGFja09wdGlvbnMucHVzaCgnLS1kaXNhYmxlSW50ZXJwcmV0Jyk7XG4gIC8vIFBhc3MgZW50cnkgZGlyZWN0bHkgYXMgQ0xJIGZsYWdcbiAgaWYoZW50cnlWYWx1ZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1lbnRyeScsIGVudHJ5VmFsdWUudG9TdHJpbmcoKSk7XG4gIGlmKGVudikgd2VicGFja09wdGlvbnMucHVzaCgnLS1lbnYnLCBlbnYpO1xuICBpZihmYWlsT25XYXJuaW5ncykgd2VicGFja09wdGlvbnMucHVzaCgnLS1mYWlsT25XYXJuaW5ncycpO1xuICBpZihqc29uKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWpzb24nLCBqc29uKTtcbiAgaWYobW9kZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1tb2RlJywgbW9kZSk7XG4gIGlmKG1lcmdlKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW1lcmdlJyk7XG4gIGlmKG5hbWUpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbmFtZScsIG5hbWUpO1xuICBpZihub0RldnRvb2wpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9EZXZ0b29sJyk7XG4gIGlmKG5vU3RhdHMpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9TdGF0cycpO1xuICBpZihub1RhcmdldCkgd2VicGFja09wdGlvbnMucHVzaCgnLS1ub1RhcmdldCcpO1xuICBpZihub1dhdGNoKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW5vV2F0Y2gnKTtcbiAgaWYobm9XYXRjaE9wdGlvbnNTdGRpbikgd2VicGFja09wdGlvbnMucHVzaCgnLS1ub1dhdGNoT3B0aW9uc1N0ZGluJyk7XG4gIGlmKG5vZGVFbnYpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9kZUVudicsIG5vZGVFbnYpO1xuICBpZihvdXRwdXRQYXRoKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW91dHB1dC1wYXRoJywgb3V0cHV0UGF0aC50b1N0cmluZygpKTsgLy8gQ29udmVydCB0byBzdHJpbmdcbiAgaWYoc3RhdHMpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tc3RhdHMnLCBzdGF0cyk7XG4gIGlmKHRhcmdldCkgd2VicGFja09wdGlvbnMucHVzaCgnLS10YXJnZXQnLCB0YXJnZXQpO1xuICBpZih3YXRjaCkgd2VicGFja09wdGlvbnMucHVzaCgnLS13YXRjaCcpO1xuICBpZih3YXRjaE9wdGlvbnNTdGRpbikgd2VicGFja09wdGlvbnMucHVzaCgnLS13YXRjaE9wdGlvbnNTdGRpbicpO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qge3dlYnBhY2tQYXRofSA9IHJlc29sdmVXZWJwYWNrUGF0aHMoY3VycmVudERpcm5hbWUpO1xuXG4gICAgbGV0IGV4ZWN1dGFibGVQYXRoID0gd2VicGFja1BhdGg7XG4gICAgbGV0IGZpbmFsV2VicGFja09wdGlvbnM6IHN0cmluZ1tdO1xuXG4gICAgaWYod2VicGFja1BhdGggPT09ICducHgnKSB7XG4gICAgICBmaW5hbFdlYnBhY2tPcHRpb25zID0gWyd3ZWJwYWNrJywgLi4ud2VicGFja09wdGlvbnNdO1xuICAgIH0gZWxzZSBpZih3ZWJwYWNrUGF0aC5lbmRzV2l0aCgnLmpzJykpIHtcbiAgICAgIGV4ZWN1dGFibGVQYXRoID0gJ25vZGUnO1xuICAgICAgZmluYWxXZWJwYWNrT3B0aW9ucyA9IFt3ZWJwYWNrUGF0aCwgLi4ud2VicGFja09wdGlvbnNdO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaW5hbFdlYnBhY2tPcHRpb25zID0gWy4uLndlYnBhY2tPcHRpb25zXTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnd2VicGFja1BhdGg6Jywgd2VicGFja1BhdGgpO1xuICAgIGNvbnNvbGUubG9nKCdleGVjdXRhYmxlUGF0aDonLCBleGVjdXRhYmxlUGF0aCk7XG4gICAgY29uc29sZS5sb2coJ2ZpbmFsV2VicGFja09wdGlvbnM6JywgSlNPTi5zdHJpbmdpZnkoZmluYWxXZWJwYWNrT3B0aW9ucykpO1xuICAgIGNvbnNvbGUubG9nKCdmaW5hbFdlYnBhY2tPcHRpb25zIHR5cGU6JywgQXJyYXkuaXNBcnJheShmaW5hbFdlYnBhY2tPcHRpb25zKSA/ICdBcnJheScgOiB0eXBlb2YgZmluYWxXZWJwYWNrT3B0aW9ucyk7XG5cbiAgICAvLyBNYWtlIHN1cmUgd2UncmUgcGFzc2luZyBhbiBhcnJheSBvZiBzdHJpbmdzIHRvIGV4ZWNhXG4gICAgY29uc3QgY2hpbGRQcm9jZXNzID0gZXhlY2EoZXhlY3V0YWJsZVBhdGgsIGZpbmFsV2VicGFja09wdGlvbnMsIHtlbmNvZGluZzogJ3V0ZjgnLCBzdGRpbzogJ3BpcGUnfSk7XG5cbiAgICBsZXQgYnVpbGRDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICBsZXQgYnVpbGRTdGF0cyA9IHtcbiAgICAgIG1vZHVsZXM6IDAsXG4gICAgICBhc3NldHM6IDAsXG4gICAgICBzaXplOiAnMCBCJ1xuICAgIH07XG5cbiAgICBjaGlsZFByb2Nlc3Muc3Rkb3V0Py5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGRhdGEudG9TdHJpbmcoKTtcblxuICAgICAgaGFuZGxlV2VicGFja1Byb2dyZXNzKG91dHB1dCwgc3Bpbm5lciwgcXVpZXQsICfwn4+X77iPJywgJ1dlYnBhY2sgQnVpbGRpbmcnKTtcblxuICAgICAgaWYoIWJ1aWxkQ29tcGxldGVkICYmIG91dHB1dC5pbmNsdWRlcygnY29tcGlsZWQgc3VjY2Vzc2Z1bGx5JykpIHtcbiAgICAgICAgYnVpbGRDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0J1aWxkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhJyk7XG5cbiAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBtb2R1bGVzLyk7XG4gICAgICAgIGNvbnN0IGFzc2V0TWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBhc3NldHMvKTtcbiAgICAgICAgY29uc3Qgc2l6ZU1hdGNoID0gb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgc3RhdHVzIChbXFxkLl0rIFxcdyspLykgfHwgb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgcGF0aC4qPyhbXFxkLl0rIFxcdyspLyk7XG5cbiAgICAgICAgaWYobW9kdWxlTWF0Y2gpIGJ1aWxkU3RhdHMubW9kdWxlcyA9IHBhcnNlSW50KG1vZHVsZU1hdGNoWzFdLCAxMCk7XG4gICAgICAgIGlmKGFzc2V0TWF0Y2gpIGJ1aWxkU3RhdHMuYXNzZXRzID0gcGFyc2VJbnQoYXNzZXRNYXRjaFsxXSwgMTApO1xuICAgICAgICBpZihzaXplTWF0Y2gpIGJ1aWxkU3RhdHMuc2l6ZSA9IHNpemVNYXRjaFsxXTtcblxuICAgICAgICBkaXNwbGF5QnVpbGRTdGF0dXMoJ3dlYnBhY2snLCBMZXhDb25maWcuY29uZmlnLm91dHB1dEZ1bGxQYXRoIHx8ICdsaWInLCBxdWlldCwgYnVpbGRTdGF0cyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjaGlsZFByb2Nlc3Muc3RkZXJyPy5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGRhdGEudG9TdHJpbmcoKTtcblxuICAgICAgaGFuZGxlV2VicGFja1Byb2dyZXNzKG91dHB1dCwgc3Bpbm5lciwgcXVpZXQsICfwn4+X77iPJywgJ1dlYnBhY2sgQnVpbGRpbmcnKTtcblxuICAgICAgaWYoIWJ1aWxkQ29tcGxldGVkICYmIG91dHB1dC5pbmNsdWRlcygnY29tcGlsZWQgc3VjY2Vzc2Z1bGx5JykpIHtcbiAgICAgICAgYnVpbGRDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0J1aWxkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhJyk7XG5cbiAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBtb2R1bGVzLyk7XG4gICAgICAgIGNvbnN0IGFzc2V0TWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBhc3NldHMvKTtcbiAgICAgICAgY29uc3Qgc2l6ZU1hdGNoID0gb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgc3RhdHVzIChbXFxkLl0rIFxcdyspLykgfHwgb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgcGF0aC4qPyhbXFxkLl0rIFxcdyspLyk7XG5cbiAgICAgICAgaWYobW9kdWxlTWF0Y2gpIGJ1aWxkU3RhdHMubW9kdWxlcyA9IHBhcnNlSW50KG1vZHVsZU1hdGNoWzFdLCAxMCk7XG4gICAgICAgIGlmKGFzc2V0TWF0Y2gpIGJ1aWxkU3RhdHMuYXNzZXRzID0gcGFyc2VJbnQoYXNzZXRNYXRjaFsxXSwgMTApO1xuICAgICAgICBpZihzaXplTWF0Y2gpIGJ1aWxkU3RhdHMuc2l6ZSA9IHNpemVNYXRjaFsxXTtcblxuICAgICAgICBkaXNwbGF5QnVpbGRTdGF0dXMoJ3dlYnBhY2snLCBMZXhDb25maWcuY29uZmlnLm91dHB1dEZ1bGxQYXRoIHx8ICdsaWInLCBxdWlldCwgYnVpbGRTdGF0cyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhd2FpdCBjaGlsZFByb2Nlc3M7XG5cbiAgICBpZighYnVpbGRDb21wbGV0ZWQpIHtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZCgnQnVpbGQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSEnKTtcbiAgICAgIGRpc3BsYXlCdWlsZFN0YXR1cygnd2VicGFjaycsIExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGggfHwgJ2xpYicsIHF1aWV0LCBidWlsZFN0YXRzKTtcbiAgICB9XG5cbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIHNwaW5uZXIuZmFpbCgnQnVpbGQgZmFpbGVkLicpO1xuXG4gICAgaWYoY21kLmFzc2lzdCkge1xuICAgICAgc3Bpbm5lci5zdGFydCgnQUkgaXMgYW5hbHl6aW5nIHRoZSB3ZWJwYWNrIGVycm9yLi4uJyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGFpRnVuY3Rpb24oe1xuICAgICAgICAgIHByb21wdDogYEZpeCB0aGlzIHdlYnBhY2sgYnVpbGQgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1cXG5cXG5FcnJvciBkZXRhaWxzOlxcbiR7ZXJyb3IudG9TdHJpbmcoKX1cXG5cXG5Db25maWd1cmF0aW9uIHVzZWQ6XFxuJHtKU09OLnN0cmluZ2lmeSh3ZWJwYWNrT3B0aW9ucywgbnVsbCwgMil9YCxcbiAgICAgICAgICB0YXNrOiAnaGVscCcsXG4gICAgICAgICAgY29udGV4dDogdHJ1ZSxcbiAgICAgICAgICBxdWlldFxuICAgICAgICB9KTtcblxuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0FJIGFuYWx5c2lzIGNvbXBsZXRlJyk7XG4gICAgICB9IGNhdGNoKGFpRXJyb3IpIHtcbiAgICAgICAgc3Bpbm5lci5mYWlsKCdDb3VsZCBub3QgZ2VuZXJhdGUgQUkgYXNzaXN0YW5jZScpO1xuICAgICAgICBpZighcXVpZXQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdBSSBhc3Npc3RhbmNlIGVycm9yOicsIGFpRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZCA9IGFzeW5jIChjbWQ6IEJ1aWxkT3B0aW9ucywgY2FsbGJhY2s6IEJ1aWxkQ2FsbGJhY2sgPSAoKSA9PiAoe30pKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge1xuICAgIGJ1bmRsZXIgPSAnd2VicGFjaycsXG4gICAgY2xpTmFtZSA9ICdMZXgnLFxuICAgIHF1aWV0ID0gZmFsc2UsXG4gICAgcmVtb3ZlID0gZmFsc2UsXG4gICAgdGVzdCA9IGZhbHNlLFxuICAgIHRyYW5zbGF0aW9ucyA9IGZhbHNlLFxuICAgIHZhcmlhYmxlcyA9ICd7fSdcbiAgfSA9IGNtZDtcblxuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgbG9nKGAke2NsaU5hbWV9IGJ1aWxkaW5nLi4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgYXdhaXQgTGV4Q29uZmlnLnBhcnNlQ29uZmlnKGNtZCk7XG5cbiAgY29uc3Qge291dHB1dEZ1bGxQYXRoLCB1c2VUeXBlc2NyaXB0fSA9IExleENvbmZpZy5jb25maWc7XG5cbiAgY2hlY2tMaW5rZWRNb2R1bGVzKCk7XG5cbiAgbGV0IHZhcmlhYmxlc09iajogb2JqZWN0ID0ge05PREVfRU5WOiAncHJvZHVjdGlvbid9O1xuXG4gIGlmKHZhcmlhYmxlcykge1xuICAgIHRyeSB7XG4gICAgICB2YXJpYWJsZXNPYmogPSBKU09OLnBhcnNlKHZhcmlhYmxlcyk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgb3B0aW9uIGlzIG5vdCBhIHZhbGlkIEpTT04gb2JqZWN0LmAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzLmVudiA9IHsuLi5wcm9jZXNzLmVudiwgLi4udmFyaWFibGVzT2JqfTtcblxuICAvLyBJZiBpbiB0ZXN0IG1vZGUsIGV4aXQgZWFybHlcbiAgaWYodGVzdCkge1xuICAgIGxvZygnVGVzdCBtb2RlOiBCdWlsZCBlbnZpcm9ubWVudCBsb2FkZWQsIGV4aXRpbmcnLCAnaW5mbycsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8vIFByb2Nlc3MgdHJhbnNsYXRpb25zIGlmIGZsYWcgaXMgZW5hYmxlZCAoYmVmb3JlIGJ1aWxkaW5nKVxuICBpZih0cmFuc2xhdGlvbnMpIHtcbiAgICBzcGlubmVyLnN0YXJ0KCdQcm9jZXNzaW5nIHRyYW5zbGF0aW9ucy4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBMZXhDb25maWcuY29uZmlnLnNvdXJjZUZ1bGxQYXRoIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgICBjb25zdCBvdXRwdXRQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRGdWxsUGF0aCB8fCAnbGliJztcblxuICAgICAgYXdhaXQgcHJvY2Vzc1RyYW5zbGF0aW9ucyhzb3VyY2VQYXRoLCBvdXRwdXRQYXRoLCBxdWlldCk7XG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ1RyYW5zbGF0aW9ucyBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICAgIH0gY2F0Y2godHJhbnNsYXRpb25FcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBGYWlsZWQgdG8gcHJvY2VzcyB0cmFuc2xhdGlvbnM6ICR7dHJhbnNsYXRpb25FcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIHByb2Nlc3MgdHJhbnNsYXRpb25zLicpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBzcGlubmVyLnN0YXJ0KCdCdWlsZGluZyBjb2RlLi4uJyk7XG5cbiAgaWYocmVtb3ZlKSB7XG4gICAgYXdhaXQgcmVtb3ZlRmlsZXMob3V0cHV0RnVsbFBhdGggfHwgJycpO1xuICB9XG5cbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIGNvbnN0IGNvbXBpbGVDb25maWdQYXRoID0gZ2V0VHlwZVNjcmlwdENvbmZpZ1BhdGgoJ3RzY29uZmlnLmJ1aWxkLmpzb24nKTtcbiAgICBpZihleGlzdHNTeW5jKGNvbXBpbGVDb25maWdQYXRoKSkge1xuICAgICAgbG9nKCdVc2luZyB0c2NvbmZpZy5idWlsZC5qc29uIGZvciBidWlsZC4uLicsICdpbmZvJywgcXVpZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBMZXhDb25maWcuY2hlY2tDb21waWxlVHlwZXNjcmlwdENvbmZpZygpO1xuICAgIH1cbiAgfVxuXG4gIGxldCBidWlsZFJlc3VsdCA9IDA7XG5cbiAgaWYoYnVuZGxlciA9PT0gJ3N3YycpIHtcbiAgICBidWlsZFJlc3VsdCA9IGF3YWl0IGJ1aWxkV2l0aFNXQyhzcGlubmVyLCBjbWQsIChzdGF0dXMpID0+IHtcbiAgICAgIGJ1aWxkUmVzdWx0ID0gc3RhdHVzO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGJ1aWxkUmVzdWx0ID0gYXdhaXQgYnVpbGRXaXRoV2VicGFjayhzcGlubmVyLCBjbWQsIChzdGF0dXMpID0+IHtcbiAgICAgIGJ1aWxkUmVzdWx0ID0gc3RhdHVzO1xuICAgIH0pO1xuICB9XG5cbiAgaWYoYnVpbGRSZXN1bHQgPT09IDAgJiYgY21kLmFuYWx5emUpIHtcbiAgICBzcGlubmVyLnN0YXJ0KCdBSSBpcyBhbmFseXppbmcgdGhlIGJ1aWxkIG91dHB1dCBmb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0cyA9IHtcbiAgICAgICAgb3V0cHV0UGF0aDogTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRGdWxsUGF0aCxcbiAgICAgICAgZW50cnlQb2ludHM6IGJ1bmRsZXIgPT09ICdzd2MnID9cbiAgICAgICAgICBgU291cmNlIGZpbGVzOiAke0xleENvbmZpZy5jb25maWcuc291cmNlRnVsbFBhdGh9LyoqLyoue3RzLGpzfWAgOlxuICAgICAgICAgIExleENvbmZpZy5jb25maWcud2VicGFjaz8uZW50cnkgfHwgJ1Vua25vd24gZW50cnkgcG9pbnRzJ1xuICAgICAgfTtcblxuICAgICAgYXdhaXQgYWlGdW5jdGlvbih7XG4gICAgICAgIHByb21wdDogYEFuYWx5emUgdGhpcyBidWlsZCBmb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXM6XG5cbkJ1aWxkIFR5cGU6ICR7YnVuZGxlcn1cbkZvcm1hdDogJHtjbWQuZm9ybWF0IHx8ICdkZWZhdWx0J31cbkVudmlyb25tZW50OiAke0xleENvbmZpZy5jb25maWcudGFyZ2V0RW52aXJvbm1lbnR9XG4ke0pTT04uc3RyaW5naWZ5KHN0YXRzLCBudWxsLCAyKX1cblxuV2hhdCBhcmUgdGhlIGtleSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBmb3IgdGhpcyBidWlsZCBjb25maWd1cmF0aW9uPyBDb25zaWRlcjpcbjEuIEJ1bmRsZSBzaXplIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzXG4yLiBDb2RlIHNwbGl0dGluZyByZWNvbW1lbmRhdGlvbnNcbjMuIFRyZWUtc2hha2luZyBpbXByb3ZlbWVudHNcbjQuIFBlcmZvcm1hbmNlIGVuaGFuY2VtZW50c1xuNS4gRGVwZW5kZW5jeSBvcHRpbWl6YXRpb25zYCxcbiAgICAgICAgdGFzazogJ29wdGltaXplJyxcbiAgICAgICAgY29udGV4dDogdHJ1ZSxcbiAgICAgICAgcXVpZXRcbiAgICAgIH0pO1xuXG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ0FJIGJ1aWxkIGFuYWx5c2lzIGNvbXBsZXRlJyk7XG4gICAgfSBjYXRjaChhaUVycm9yKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0NvdWxkIG5vdCBnZW5lcmF0ZSBBSSBvcHRpbWl6YXRpb24gYW5hbHlzaXMnKTtcbiAgICAgIGlmKCFxdWlldCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdBSSBhbmFseXNpcyBlcnJvcjonLCBhaUVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZihidWlsZFJlc3VsdCA9PT0gMCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb3B5Q29uZmlndXJlZEZpbGVzKHNwaW5uZXIsIExleENvbmZpZy5jb25maWcsIHF1aWV0KTtcbiAgICB9IGNhdGNoKGNvcHlFcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBGYWlsZWQgdG8gY29weSBjb25maWd1cmVkIGZpbGVzOiAke2NvcHlFcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgY2FsbGJhY2soYnVpbGRSZXN1bHQpO1xuICByZXR1cm4gYnVpbGRSZXN1bHQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBidWlsZDtcbiJdLCJuYW1lcyI6WyJ0cmFuc2Zvcm0iLCJleGVjYSIsImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJzeW5jIiwiZ2xvYlN5bmMiLCJkaXJuYW1lIiwicmVzb2x2ZSIsInBhdGhSZXNvbHZlIiwiTGV4Q29uZmlnIiwiZ2V0VHlwZVNjcmlwdENvbmZpZ1BhdGgiLCJjaGVja0xpbmtlZE1vZHVsZXMiLCJjb3B5Q29uZmlndXJlZEZpbGVzIiwiY3JlYXRlU3Bpbm5lciIsImhhbmRsZVdlYnBhY2tQcm9ncmVzcyIsInJlbW92ZUZpbGVzIiwicmVzb2x2ZVdlYnBhY2tQYXRocyIsImdldExleFBhY2thZ2VKc29uUGF0aCIsImxvZyIsInByb2Nlc3NUcmFuc2xhdGlvbnMiLCJhaUZ1bmN0aW9uIiwiYm94ZW4iLCJjaGFsayIsImN1cnJlbnRGaWxlbmFtZSIsImN1cnJlbnREaXJuYW1lIiwiZXZhbCIsInByb2Nlc3MiLCJjd2QiLCJkaXNwbGF5QnVpbGRTdGF0dXMiLCJidW5kbGVyIiwib3V0cHV0UGF0aCIsInF1aWV0Iiwic3RhdHMiLCJzdGF0c0luZm8iLCJtb2R1bGVzIiwiYXNzZXRzIiwiZ3JlZW4iLCJjeWFuIiwic2l6ZSIsInN0YXR1c0JveCIsImJvbGQiLCJ1bmRlcmxpbmUiLCJ5ZWxsb3ciLCJwYWRkaW5nIiwibWFyZ2luIiwiYm9yZGVyU3R5bGUiLCJib3JkZXJDb2xvciIsImJhY2tncm91bmRDb2xvciIsImNvbnNvbGUiLCJidWlsZFdpdGhTV0MiLCJzcGlubmVyIiwiY29tbWFuZE9wdGlvbnMiLCJjYWxsYmFjayIsImNsaU5hbWUiLCJmb3JtYXQiLCJzb3VyY2VQYXRoIiwid2F0Y2giLCJvdXRwdXRGdWxsUGF0aCIsInNvdXJjZUZ1bGxQYXRoIiwic3djIiwic3djQ29uZmlnIiwidGFyZ2V0RW52aXJvbm1lbnQiLCJ1c2VHcmFwaFFsIiwidXNlVHlwZXNjcmlwdCIsImNvbmZpZyIsInNvdXJjZURpciIsImdsb2JPcHRpb25zIiwiZG90Iiwibm9kaXIiLCJub3NvcnQiLCJ0c0ZpbGVzIiwianNGaWxlcyIsInNvdXJjZUZpbGVzIiwib3V0cHV0RGlyIiwic3RhcnQiLCJmaWxlIiwicmVwbGFjZSIsIm91dHB1dERpclBhdGgiLCJta2RpclN5bmMiLCJyZWN1cnNpdmUiLCJzb3VyY2VDb2RlIiwiaXNUU1giLCJlbmRzV2l0aCIsInN3Y09wdGlvbnMiLCJmaWxlbmFtZSIsImpzYyIsInBhcnNlciIsInN5bnRheCIsInRzeCIsImRlY29yYXRvcnMiLCJkeW5hbWljSW1wb3J0IiwidGFyZ2V0IiwicmVhY3QiLCJydW50aW1lIiwibW9kdWxlIiwidHlwZSIsInJlc3VsdCIsIndyaXRlRmlsZVN5bmMiLCJjb2RlIiwic3VjY2VlZCIsImVycm9yIiwiZmFpbCIsImJ1aWxkV2l0aFdlYnBhY2siLCJjbWQiLCJhbmFseXplIiwiY29uZmlnTmFtZSIsImRlZmluZVByb2Nlc3NFbnZOb2RlRW52IiwiZGV2dG9vbCIsImRpc2FibGVJbnRlcnByZXQiLCJlbnRyeSIsImVudiIsImZhaWxPbldhcm5pbmdzIiwianNvbiIsIm1lcmdlIiwibW9kZSIsIm5hbWUiLCJub2RlRW52Iiwibm9EZXZ0b29sIiwibm9TdGF0cyIsIm5vVGFyZ2V0Iiwibm9XYXRjaCIsIm5vV2F0Y2hPcHRpb25zU3RkaW4iLCJ3YXRjaE9wdGlvbnNTdGRpbiIsImVudHJ5VmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJ3ZWJwYWNrQ29uZmlnIiwiaXNSZWxhdGl2ZUNvbmZpZyIsInN1YnN0ciIsInByb2plY3RDb25maWdQYXRoIiwicHJvamVjdENvbmZpZ1BhdGhUcyIsImhhc1Byb2plY3RDb25maWciLCJyZXNvbHZlZENvbmZpZyIsImxleFBhY2thZ2VQYXRoIiwibGV4UGFja2FnZURpciIsImxleFdlYnBhY2tDb25maWciLCJ3ZWJwYWNrT3B0aW9ucyIsInB1c2giLCJ0b1N0cmluZyIsIndlYnBhY2tQYXRoIiwiZXhlY3V0YWJsZVBhdGgiLCJmaW5hbFdlYnBhY2tPcHRpb25zIiwiSlNPTiIsInN0cmluZ2lmeSIsImNoaWxkUHJvY2VzcyIsImVuY29kaW5nIiwic3RkaW8iLCJidWlsZENvbXBsZXRlZCIsImJ1aWxkU3RhdHMiLCJzdGRvdXQiLCJvbiIsImRhdGEiLCJvdXRwdXQiLCJpbmNsdWRlcyIsIm1vZHVsZU1hdGNoIiwibWF0Y2giLCJhc3NldE1hdGNoIiwic2l6ZU1hdGNoIiwicGFyc2VJbnQiLCJzdGRlcnIiLCJtZXNzYWdlIiwiYXNzaXN0IiwicHJvbXB0IiwidGFzayIsImNvbnRleHQiLCJhaUVycm9yIiwiYnVpbGQiLCJyZW1vdmUiLCJ0ZXN0IiwidHJhbnNsYXRpb25zIiwidmFyaWFibGVzIiwicGFyc2VDb25maWciLCJ2YXJpYWJsZXNPYmoiLCJOT0RFX0VOViIsInBhcnNlIiwidHJhbnNsYXRpb25FcnJvciIsImNvbXBpbGVDb25maWdQYXRoIiwiY2hlY2tDb21waWxlVHlwZXNjcmlwdENvbmZpZyIsImJ1aWxkUmVzdWx0Iiwic3RhdHVzIiwiZW50cnlQb2ludHMiLCJ3ZWJwYWNrIiwiY29weUVycm9yIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxTQUFTLFFBQU8sWUFBWTtBQUNwQyxTQUFRQyxLQUFLLFFBQU8sUUFBUTtBQUM1QixTQUFRQyxVQUFVLEVBQUVDLFlBQVksUUFBTyxLQUFLO0FBQzVDLFNBQVFDLFFBQVFDLFFBQVEsUUFBTyxPQUFPO0FBQ3RDLFNBQVFDLE9BQU8sRUFBRUMsV0FBV0MsV0FBVyxRQUFPLE9BQU87QUFFckQsU0FBUUMsU0FBUyxFQUFFQyx1QkFBdUIsUUFBTyxxQkFBcUI7QUFDdEUsU0FBUUMsa0JBQWtCLEVBQUVDLG1CQUFtQixFQUFFQyxhQUFhLEVBQXFCQyxxQkFBcUIsRUFBRUMsV0FBVyxRQUFPLHFCQUFxQjtBQUNqSixTQUFzQ0MsbUJBQW1CLEVBQUVDLHFCQUFxQixRQUFPLHNCQUFzQjtBQUM3RyxTQUFRQyxHQUFHLFFBQU8scUJBQXFCO0FBQ3ZDLFNBQVFDLG1CQUFtQixRQUFPLDhCQUE4QjtBQUNoRSxTQUFRQyxVQUFVLFFBQU8sY0FBYztBQUN2QyxPQUFPQyxXQUFXLFFBQVE7QUFDMUIsT0FBT0MsV0FBVyxRQUFRO0FBRTFCLElBQUlDO0FBQ0osSUFBSUM7QUFFSixJQUFJO0lBQ0ZELGtCQUFrQkUsS0FBSztJQUN2QkQsaUJBQWlCbEIsUUFBUWlCO0FBQzNCLEVBQUUsT0FBTTtJQUNOQSxrQkFBa0JHLFFBQVFDLEdBQUc7SUFDN0JILGlCQUFpQkUsUUFBUUMsR0FBRztBQUM5QjtBQXFCQSxNQUFNQyxxQkFBcUIsQ0FBQ0MsU0FBaUJDLFlBQW9CQyxPQUFnQkM7SUFDL0UsSUFBR0QsT0FBTztJQUVWLElBQUlFLFlBQVk7SUFDaEIsSUFBR0QsU0FBU0EsTUFBTUUsT0FBTyxJQUFJRixNQUFNRyxNQUFNLEVBQUU7UUFDekNGLFlBQVksQ0FBQyxFQUFFLEVBQUVYLE1BQU1jLEtBQUssQ0FBQyxZQUFZLElBQUksRUFBRWQsTUFBTWUsSUFBSSxDQUFDTCxNQUFNRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQzFFLEdBQUdaLE1BQU1jLEtBQUssQ0FBQyxXQUFXLEtBQUssRUFBRWQsTUFBTWUsSUFBSSxDQUFDTCxNQUFNRyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQzdELEdBQUdiLE1BQU1jLEtBQUssQ0FBQyxTQUFTLE9BQU8sRUFBRWQsTUFBTWUsSUFBSSxDQUFDTCxNQUFNTSxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQy9EO0lBRUEsTUFBTUMsWUFBWWxCLE1BQ2hCLEdBQUdDLE1BQU1lLElBQUksQ0FBQ0csSUFBSSxDQUFDLHFDQUFxQyxJQUFJLENBQUMsR0FDN0QsR0FBR2xCLE1BQU1jLEtBQUssQ0FBQyxZQUFZLElBQUksRUFBRWQsTUFBTWUsSUFBSSxDQUFDUixTQUFTLEVBQUUsQ0FBQyxHQUN4RCxHQUFHUCxNQUFNYyxLQUFLLENBQUMsV0FBVyxLQUFLLEVBQUVkLE1BQU1tQixTQUFTLENBQUNYLGNBQWNHLFVBQVUsRUFBRSxDQUFDLEdBQzVFLEdBQUdYLE1BQU1vQixNQUFNLENBQUMsNkJBQTZCLEVBQzdDO1FBQ0VDLFNBQVM7UUFDVEMsUUFBUTtRQUNSQyxhQUFhO1FBQ2JDLGFBQWE7UUFDYkMsaUJBQWlCO0lBQ25CO0lBR0ZDLFFBQVE5QixHQUFHLENBQUMsT0FBT3FCLFlBQVk7QUFDakM7QUFFQSx3REFBd0Q7QUFFeEQsT0FBTyxNQUFNVSxlQUFlLE9BQU9DLFNBQVNDLGdCQUE4QkM7SUFDeEUsTUFBTSxFQUNKQyxVQUFVLEtBQUssRUFDZkMsU0FBUyxLQUFLLEVBQ2R4QixVQUFVLEVBQ1ZDLEtBQUssRUFDTHdCLFVBQVUsRUFDVkMsS0FBSyxFQUNOLEdBQUdMO0lBQ0osTUFBTSxFQUNKTSxjQUFjLEVBQ2RDLGNBQWMsRUFDZEMsS0FBS0MsU0FBUyxFQUNkQyxpQkFBaUIsRUFDakJDLFVBQVUsRUFDVkMsYUFBYSxFQUNkLEdBQUd0RCxVQUFVdUQsTUFBTTtJQUNwQixNQUFNQyxZQUFvQlYsYUFBYS9DLFlBQVlrQixRQUFRQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUU0QixZQUFZLElBQUlHLGtCQUFrQjtJQUV6RyxNQUFNUSxjQUFjO1FBQ2xCdkMsS0FBS3NDO1FBQ0xFLEtBQUs7UUFDTEMsT0FBTztRQUNQQyxRQUFRO0lBQ1Y7SUFDQSxNQUFNQyxVQUFvQmpFLFNBQVMsR0FBRzRELFVBQVUsd0JBQXdCLENBQUMsRUFBRUM7SUFDM0UsTUFBTUssVUFBb0JsRSxTQUFTLEdBQUc0RCxVQUFVLHVCQUF1QixDQUFDLEVBQUVDO0lBQzFFLE1BQU1NLGNBQXdCO1dBQUlGO1dBQVlDO0tBQVE7SUFFdEQsTUFBTUUsWUFBb0IzQyxjQUFjMkIsa0JBQWtCO0lBRTFELElBQUk7UUFDRlAsUUFBUXdCLEtBQUssQ0FBQztRQUVkLEtBQUksTUFBTUMsUUFBUUgsWUFBYTtZQUM3QixNQUFNakIsYUFBYS9DLFlBQVl5RCxXQUFXVTtZQUMxQyxNQUFNN0MsYUFBYXRCLFlBQVlpRSxXQUFXRSxLQUFLQyxPQUFPLENBQUMsZUFBZTtZQUV0RSxpQ0FBaUM7WUFDakMsTUFBTUMsZ0JBQWdCdkUsUUFBUXdCO1lBQzlCLElBQUcsQ0FBQzVCLFdBQVcyRSxnQkFBZ0I7Z0JBQzdCLE1BQU0sRUFBQ0MsU0FBUyxFQUFDLEdBQUcsTUFBTSxNQUFNLENBQUM7Z0JBQ2pDQSxVQUFVRCxlQUFlO29CQUFDRSxXQUFXO2dCQUFJO1lBQzNDO1lBRUEsTUFBTUMsYUFBYTdFLGFBQWFvRCxZQUFZO1lBRTVDLE1BQU0wQixRQUFRTixLQUFLTyxRQUFRLENBQUM7WUFFNUIsbURBQW1EO1lBQ25ELE1BQU1DLGFBQWE7Z0JBQ2pCQyxVQUFVVDtnQkFDVixHQUFHZixTQUFTO2dCQUNaeUIsS0FBSztvQkFDSCxHQUFHekIsV0FBV3lCLEdBQUc7b0JBQ2pCQyxRQUFRO3dCQUNOQyxRQUFRO3dCQUNSQyxLQUFLUDt3QkFDTFEsWUFBWTdCLFdBQVd5QixLQUFLQyxRQUFRRyxjQUFjO3dCQUNsREMsZUFBZTlCLFdBQVd5QixLQUFLQyxRQUFRSSxpQkFBaUI7b0JBQzFEO29CQUNBQyxRQUFRL0IsV0FBV3lCLEtBQUtNLFVBQVU7b0JBQ2xDM0YsV0FBV2lGLFFBQVE7d0JBQ2pCLEdBQUdyQixXQUFXeUIsS0FBS3JGLFNBQVM7d0JBQzVCNEYsT0FBTzs0QkFDTEMsU0FBUzs0QkFDVCxHQUFHakMsV0FBV3lCLEtBQUtyRixXQUFXNEYsS0FBSzt3QkFDckM7b0JBQ0YsSUFBSWhDLFdBQVd5QixLQUFLckY7Z0JBQ3RCO2dCQUNBOEYsUUFBUTtvQkFDTixHQUFHbEMsV0FBV2tDLE1BQU07b0JBQ3BCQyxNQUFNekMsV0FBVyxRQUFRLGFBQXVCTSxXQUFXa0MsUUFBUUMsUUFBaUI7Z0JBQ3RGO1lBQ0Y7WUFFQSxNQUFNQyxTQUFTLE1BQU1oRyxVQUFVZ0YsWUFBWUc7WUFFM0MsTUFBTSxFQUFDYyxhQUFhLEVBQUMsR0FBRyxNQUFNLE1BQU0sQ0FBQztZQUNyQ0EsY0FBY25FLFlBQVlrRSxPQUFPRSxJQUFJO1FBQ3ZDO1FBRUFoRCxRQUFRaUQsT0FBTyxDQUFDO1FBQ2hCdkUsbUJBQW1CLE9BQU82QyxXQUFXMUM7UUFDckNxQixTQUFTO1FBQ1QsT0FBTztJQUNULEVBQUUsT0FBTWdELE9BQU87UUFDYmxELFFBQVFtRCxJQUFJLENBQUM7UUFDYixJQUFHLENBQUN0RSxPQUFPO1lBQ1RpQixRQUFRb0QsS0FBSyxDQUFDQTtRQUNoQjtRQUNBaEQsU0FBUztRQUNULE9BQU87SUFDVDtBQUNGLEVBQUU7QUFFRixPQUFPLE1BQU1rRCxtQkFBbUIsT0FBT3BELFNBQVNxRCxLQUFLbkQ7SUFDbkQsTUFBTSxFQUNKb0QsT0FBTyxFQUNQbkQsVUFBVSxLQUFLLEVBQ2ZXLE1BQU0sRUFDTnlDLFVBQVUsRUFDVkMsdUJBQXVCLEVBQ3ZCQyxPQUFPLEVBQ1BDLGdCQUFnQixFQUNoQkMsS0FBSyxFQUNMQyxHQUFHLEVBQ0hDLGNBQWMsRUFDZEMsSUFBSSxFQUNKQyxLQUFLLEVBQ0xDLElBQUksRUFDSkMsSUFBSSxFQUNKQyxPQUFPLEVBQ1BDLFNBQVMsRUFDVEMsT0FBTyxFQUNQQyxRQUFRLEVBQ1JDLE9BQU8sRUFDUEMsbUJBQW1CLEVBQ25CM0YsVUFBVSxFQUNWQyxRQUFRLEtBQUssRUFDYkMsS0FBSyxFQUNMMkQsTUFBTSxFQUNObkMsS0FBSyxFQUNMa0UsaUJBQWlCLEVBQ2xCLEdBQUduQjtJQUVKdkQsUUFBUTlCLEdBQUcsQ0FBQyxVQUFVMkYsT0FBTyxTQUFTLE9BQU9BO0lBQzdDN0QsUUFBUTlCLEdBQUcsQ0FBQyxlQUFlWSxZQUFZLFNBQVMsT0FBT0E7SUFFdkQsTUFBTTZGLGFBQWFDLE1BQU1DLE9BQU8sQ0FBQ2hCLFNBQVNBLEtBQUssQ0FBQyxFQUFFLEdBQUdBO0lBRXJELElBQUlpQjtJQUVKLElBQUc5RCxRQUFRO1FBQ1QsTUFBTStELG1CQUE0Qi9ELE9BQU9nRSxNQUFNLENBQUMsR0FBRyxPQUFPO1FBQzFERixnQkFBZ0JDLG1CQUFtQnZILFlBQVlrQixRQUFRQyxHQUFHLElBQUlxQyxVQUFVQTtJQUMxRSxPQUFPO1FBQ0wsTUFBTWlFLG9CQUFvQnpILFlBQVlrQixRQUFRQyxHQUFHLElBQUk7UUFDckQsTUFBTXVHLHNCQUFzQjFILFlBQVlrQixRQUFRQyxHQUFHLElBQUk7UUFDdkQsTUFBTXdHLG1CQUFtQmpJLFdBQVcrSCxzQkFBc0IvSCxXQUFXZ0k7UUFFckUsSUFBR0Msa0JBQWtCO1lBQ25CTCxnQkFBZ0I1SCxXQUFXZ0ksdUJBQXVCQSxzQkFBc0JEO1FBQzFFLE9BQU87WUFDTCxNQUFNLEVBQUNILGVBQWVNLGNBQWMsRUFBQyxHQUFHcEgsb0JBQW9CUTtZQUM1RHNHLGdCQUFnQk07UUFDbEI7SUFDRjtJQUVBcEYsUUFBUTlCLEdBQUcsQ0FBQyx1QkFBdUI0RztJQUNuQzlFLFFBQVE5QixHQUFHLENBQUMseUJBQXlCaEIsV0FBVzRIO0lBRWhELElBQUcsQ0FBQzVILFdBQVc0SCxnQkFBZ0I7UUFDN0IsTUFBTU8saUJBQWlCcEg7UUFDdkIsTUFBTXFILGdCQUFnQmhJLFFBQVErSDtRQUM5QixNQUFNRSxtQkFBbUIvSCxZQUFZOEgsZUFBZTtRQUVwRCxJQUFHcEksV0FBV3FJLG1CQUFtQjtZQUMvQlQsZ0JBQWdCUztZQUNoQnZGLFFBQVE5QixHQUFHLENBQUMsNkJBQTZCNEc7UUFDM0MsT0FBTztZQUNMNUcsSUFBSSxDQUFDLEVBQUUsRUFBRW1DLFFBQVEsd0NBQXdDLENBQUMsRUFBRSxTQUFTdEI7WUFDckVtQixRQUFRbUQsSUFBSSxDQUFDO1lBQ2JqRCxTQUFTO1lBQ1QsT0FBTztRQUNUO0lBQ0Y7SUFFQSxNQUFNb0YsaUJBQTJCO1FBQy9CO1FBQ0E7UUFDQTtRQUFZVjtLQUNiO0lBRUQsSUFBR3RCLFNBQVNnQyxlQUFlQyxJQUFJLENBQUM7SUFDaEMsSUFBR2hDLFlBQVkrQixlQUFlQyxJQUFJLENBQUMsZ0JBQWdCaEM7SUFDbkQsSUFBR0MseUJBQXlCOEIsZUFBZUMsSUFBSSxDQUFDLDZCQUE2Qi9CO0lBQzdFLElBQUdDLFNBQVM2QixlQUFlQyxJQUFJLENBQUMsYUFBYTlCO0lBQzdDLElBQUdDLGtCQUFrQjRCLGVBQWVDLElBQUksQ0FBQztJQUN6QyxrQ0FBa0M7SUFDbEMsSUFBR2QsWUFBWWEsZUFBZUMsSUFBSSxDQUFDLFdBQVdkLFdBQVdlLFFBQVE7SUFDakUsSUFBRzVCLEtBQUswQixlQUFlQyxJQUFJLENBQUMsU0FBUzNCO0lBQ3JDLElBQUdDLGdCQUFnQnlCLGVBQWVDLElBQUksQ0FBQztJQUN2QyxJQUFHekIsTUFBTXdCLGVBQWVDLElBQUksQ0FBQyxVQUFVekI7SUFDdkMsSUFBR0UsTUFBTXNCLGVBQWVDLElBQUksQ0FBQyxVQUFVdkI7SUFDdkMsSUFBR0QsT0FBT3VCLGVBQWVDLElBQUksQ0FBQztJQUM5QixJQUFHdEIsTUFBTXFCLGVBQWVDLElBQUksQ0FBQyxVQUFVdEI7SUFDdkMsSUFBR0UsV0FBV21CLGVBQWVDLElBQUksQ0FBQztJQUNsQyxJQUFHbkIsU0FBU2tCLGVBQWVDLElBQUksQ0FBQztJQUNoQyxJQUFHbEIsVUFBVWlCLGVBQWVDLElBQUksQ0FBQztJQUNqQyxJQUFHakIsU0FBU2dCLGVBQWVDLElBQUksQ0FBQztJQUNoQyxJQUFHaEIscUJBQXFCZSxlQUFlQyxJQUFJLENBQUM7SUFDNUMsSUFBR3JCLFNBQVNvQixlQUFlQyxJQUFJLENBQUMsYUFBYXJCO0lBQzdDLElBQUd0RixZQUFZMEcsZUFBZUMsSUFBSSxDQUFDLGlCQUFpQjNHLFdBQVc0RyxRQUFRLEtBQUssb0JBQW9CO0lBQ2hHLElBQUcxRyxPQUFPd0csZUFBZUMsSUFBSSxDQUFDLFdBQVd6RztJQUN6QyxJQUFHMkQsUUFBUTZDLGVBQWVDLElBQUksQ0FBQyxZQUFZOUM7SUFDM0MsSUFBR25DLE9BQU9nRixlQUFlQyxJQUFJLENBQUM7SUFDOUIsSUFBR2YsbUJBQW1CYyxlQUFlQyxJQUFJLENBQUM7SUFFMUMsSUFBSTtRQUNGLE1BQU0sRUFBQ0UsV0FBVyxFQUFDLEdBQUczSCxvQkFBb0JRO1FBRTFDLElBQUlvSCxpQkFBaUJEO1FBQ3JCLElBQUlFO1FBRUosSUFBR0YsZ0JBQWdCLE9BQU87WUFDeEJFLHNCQUFzQjtnQkFBQzttQkFBY0w7YUFBZTtRQUN0RCxPQUFPLElBQUdHLFlBQVl6RCxRQUFRLENBQUMsUUFBUTtZQUNyQzBELGlCQUFpQjtZQUNqQkMsc0JBQXNCO2dCQUFDRjttQkFBZ0JIO2FBQWU7UUFDeEQsT0FBTztZQUNMSyxzQkFBc0I7bUJBQUlMO2FBQWU7UUFDM0M7UUFFQXhGLFFBQVE5QixHQUFHLENBQUMsZ0JBQWdCeUg7UUFDNUIzRixRQUFROUIsR0FBRyxDQUFDLG1CQUFtQjBIO1FBQy9CNUYsUUFBUTlCLEdBQUcsQ0FBQyx3QkFBd0I0SCxLQUFLQyxTQUFTLENBQUNGO1FBQ25EN0YsUUFBUTlCLEdBQUcsQ0FBQyw2QkFBNkIwRyxNQUFNQyxPQUFPLENBQUNnQix1QkFBdUIsVUFBVSxPQUFPQTtRQUUvRix1REFBdUQ7UUFDdkQsTUFBTUcsZUFBZS9JLE1BQU0ySSxnQkFBZ0JDLHFCQUFxQjtZQUFDSSxVQUFVO1lBQVFDLE9BQU87UUFBTTtRQUVoRyxJQUFJQyxpQkFBaUI7UUFDckIsSUFBSUMsYUFBYTtZQUNmbEgsU0FBUztZQUNUQyxRQUFRO1lBQ1JHLE1BQU07UUFDUjtRQUVBMEcsYUFBYUssTUFBTSxFQUFFQyxHQUFHLFFBQVEsQ0FBQ0M7WUFDL0IsTUFBTUMsU0FBU0QsS0FBS2IsUUFBUTtZQUU1QjVILHNCQUFzQjBJLFFBQVF0RyxTQUFTbkIsT0FBTyxPQUFPO1lBRXJELElBQUcsQ0FBQ29ILGtCQUFrQkssT0FBT0MsUUFBUSxDQUFDLDBCQUEwQjtnQkFDOUROLGlCQUFpQjtnQkFDakJqRyxRQUFRaUQsT0FBTyxDQUFDO2dCQUVoQixNQUFNdUQsY0FBY0YsT0FBT0csS0FBSyxDQUFDO2dCQUNqQyxNQUFNQyxhQUFhSixPQUFPRyxLQUFLLENBQUM7Z0JBQ2hDLE1BQU1FLFlBQVlMLE9BQU9HLEtBQUssQ0FBQyxvQ0FBb0NILE9BQU9HLEtBQUssQ0FBQztnQkFFaEYsSUFBR0QsYUFBYU4sV0FBV2xILE9BQU8sR0FBRzRILFNBQVNKLFdBQVcsQ0FBQyxFQUFFLEVBQUU7Z0JBQzlELElBQUdFLFlBQVlSLFdBQVdqSCxNQUFNLEdBQUcySCxTQUFTRixVQUFVLENBQUMsRUFBRSxFQUFFO2dCQUMzRCxJQUFHQyxXQUFXVCxXQUFXOUcsSUFBSSxHQUFHdUgsU0FBUyxDQUFDLEVBQUU7Z0JBRTVDakksbUJBQW1CLFdBQVduQixVQUFVdUQsTUFBTSxDQUFDUCxjQUFjLElBQUksT0FBTzFCLE9BQU9xSDtZQUNqRjtRQUNGO1FBRUFKLGFBQWFlLE1BQU0sRUFBRVQsR0FBRyxRQUFRLENBQUNDO1lBQy9CLE1BQU1DLFNBQVNELEtBQUtiLFFBQVE7WUFFNUI1SCxzQkFBc0IwSSxRQUFRdEcsU0FBU25CLE9BQU8sT0FBTztZQUVyRCxJQUFHLENBQUNvSCxrQkFBa0JLLE9BQU9DLFFBQVEsQ0FBQywwQkFBMEI7Z0JBQzlETixpQkFBaUI7Z0JBQ2pCakcsUUFBUWlELE9BQU8sQ0FBQztnQkFFaEIsTUFBTXVELGNBQWNGLE9BQU9HLEtBQUssQ0FBQztnQkFDakMsTUFBTUMsYUFBYUosT0FBT0csS0FBSyxDQUFDO2dCQUNoQyxNQUFNRSxZQUFZTCxPQUFPRyxLQUFLLENBQUMsb0NBQW9DSCxPQUFPRyxLQUFLLENBQUM7Z0JBRWhGLElBQUdELGFBQWFOLFdBQVdsSCxPQUFPLEdBQUc0SCxTQUFTSixXQUFXLENBQUMsRUFBRSxFQUFFO2dCQUM5RCxJQUFHRSxZQUFZUixXQUFXakgsTUFBTSxHQUFHMkgsU0FBU0YsVUFBVSxDQUFDLEVBQUUsRUFBRTtnQkFDM0QsSUFBR0MsV0FBV1QsV0FBVzlHLElBQUksR0FBR3VILFNBQVMsQ0FBQyxFQUFFO2dCQUU1Q2pJLG1CQUFtQixXQUFXbkIsVUFBVXVELE1BQU0sQ0FBQ1AsY0FBYyxJQUFJLE9BQU8xQixPQUFPcUg7WUFDakY7UUFDRjtRQUVBLE1BQU1KO1FBRU4sSUFBRyxDQUFDRyxnQkFBZ0I7WUFDbEJqRyxRQUFRaUQsT0FBTyxDQUFDO1lBQ2hCdkUsbUJBQW1CLFdBQVduQixVQUFVdUQsTUFBTSxDQUFDUCxjQUFjLElBQUksT0FBTzFCLE9BQU9xSDtRQUNqRjtRQUVBaEcsU0FBUztRQUNULE9BQU87SUFDVCxFQUFFLE9BQU1nRCxPQUFPO1FBQ2JsRixJQUFJLENBQUMsRUFBRSxFQUFFbUMsUUFBUSxRQUFRLEVBQUUrQyxNQUFNNEQsT0FBTyxFQUFFLEVBQUUsU0FBU2pJO1FBRXJEbUIsUUFBUW1ELElBQUksQ0FBQztRQUViLElBQUdFLElBQUkwRCxNQUFNLEVBQUU7WUFDYi9HLFFBQVF3QixLQUFLLENBQUM7WUFFZCxJQUFJO2dCQUNGLE1BQU10RCxXQUFXO29CQUNmOEksUUFBUSxDQUFDLDhCQUE4QixFQUFFOUQsTUFBTTRELE9BQU8sQ0FBQyxvQkFBb0IsRUFBRTVELE1BQU1zQyxRQUFRLEdBQUcseUJBQXlCLEVBQUVJLEtBQUtDLFNBQVMsQ0FBQ1AsZ0JBQWdCLE1BQU0sSUFBSTtvQkFDbEsyQixNQUFNO29CQUNOQyxTQUFTO29CQUNUckk7Z0JBQ0Y7Z0JBRUFtQixRQUFRaUQsT0FBTyxDQUFDO1lBQ2xCLEVBQUUsT0FBTWtFLFNBQVM7Z0JBQ2ZuSCxRQUFRbUQsSUFBSSxDQUFDO2dCQUNiLElBQUcsQ0FBQ3RFLE9BQU87b0JBQ1RpQixRQUFRb0QsS0FBSyxDQUFDLHdCQUF3QmlFO2dCQUN4QztZQUNGO1FBQ0Y7UUFFQWpILFNBQVM7UUFDVCxPQUFPO0lBQ1Q7QUFDRixFQUFFO0FBRUYsT0FBTyxNQUFNa0gsUUFBUSxPQUFPL0QsS0FBbUJuRCxXQUEwQixJQUFPLENBQUEsQ0FBQyxDQUFBLENBQUU7SUFDakYsTUFBTSxFQUNKdkIsVUFBVSxTQUFTLEVBQ25Cd0IsVUFBVSxLQUFLLEVBQ2Z0QixRQUFRLEtBQUssRUFDYndJLFNBQVMsS0FBSyxFQUNkQyxPQUFPLEtBQUssRUFDWkMsZUFBZSxLQUFLLEVBQ3BCQyxZQUFZLElBQUksRUFDakIsR0FBR25FO0lBRUosTUFBTXJELFVBQVVyQyxjQUFja0I7SUFFOUJiLElBQUksR0FBR21DLFFBQVEsWUFBWSxDQUFDLEVBQUUsUUFBUXRCO0lBRXRDLE1BQU10QixVQUFVa0ssV0FBVyxDQUFDcEU7SUFFNUIsTUFBTSxFQUFDOUMsY0FBYyxFQUFFTSxhQUFhLEVBQUMsR0FBR3RELFVBQVV1RCxNQUFNO0lBRXhEckQ7SUFFQSxJQUFJaUssZUFBdUI7UUFBQ0MsVUFBVTtJQUFZO0lBRWxELElBQUdILFdBQVc7UUFDWixJQUFJO1lBQ0ZFLGVBQWU5QixLQUFLZ0MsS0FBSyxDQUFDSjtRQUM1QixFQUFFLE9BQU10RSxPQUFPO1lBQ2JsRixJQUFJLENBQUMsRUFBRSxFQUFFbUMsUUFBUSxnRUFBZ0UsQ0FBQyxFQUFFLFNBQVN0QjtZQUU3RnFCLFNBQVM7WUFDVCxPQUFPO1FBQ1Q7SUFDRjtJQUVBMUIsUUFBUW9GLEdBQUcsR0FBRztRQUFDLEdBQUdwRixRQUFRb0YsR0FBRztRQUFFLEdBQUc4RCxZQUFZO0lBQUE7SUFFOUMsOEJBQThCO0lBQzlCLElBQUdKLE1BQU07UUFDUHRKLElBQUksZ0RBQWdELFFBQVFhO1FBQzVEcUIsU0FBUztRQUNULE9BQU87SUFDVDtJQUVBLDREQUE0RDtJQUM1RCxJQUFHcUgsY0FBYztRQUNmdkgsUUFBUXdCLEtBQUssQ0FBQztRQUVkLElBQUk7WUFDRixNQUFNbkIsYUFBYTlDLFVBQVV1RCxNQUFNLENBQUNOLGNBQWMsSUFBSWhDLFFBQVFDLEdBQUc7WUFDakUsTUFBTUcsYUFBYXJCLFVBQVV1RCxNQUFNLENBQUNQLGNBQWMsSUFBSTtZQUV0RCxNQUFNdEMsb0JBQW9Cb0MsWUFBWXpCLFlBQVlDO1lBQ2xEbUIsUUFBUWlELE9BQU8sQ0FBQztRQUNsQixFQUFFLE9BQU00RSxrQkFBa0I7WUFDeEI3SixJQUFJLENBQUMsRUFBRSxFQUFFbUMsUUFBUSx3Q0FBd0MsRUFBRTBILGlCQUFpQmYsT0FBTyxFQUFFLEVBQUUsU0FBU2pJO1lBQ2hHbUIsUUFBUW1ELElBQUksQ0FBQztZQUNiakQsU0FBUztZQUNULE9BQU87UUFDVDtJQUNGO0lBRUFGLFFBQVF3QixLQUFLLENBQUM7SUFFZCxJQUFHNkYsUUFBUTtRQUNULE1BQU14SixZQUFZMEMsa0JBQWtCO0lBQ3RDO0lBRUEsSUFBR00sZUFBZTtRQUNoQixNQUFNaUgsb0JBQW9CdEssd0JBQXdCO1FBQ2xELElBQUdSLFdBQVc4SyxvQkFBb0I7WUFDaEM5SixJQUFJLDBDQUEwQyxRQUFRYTtRQUN4RCxPQUFPO1lBQ0x0QixVQUFVd0ssNEJBQTRCO1FBQ3hDO0lBQ0Y7SUFFQSxJQUFJQyxjQUFjO0lBRWxCLElBQUdySixZQUFZLE9BQU87UUFDcEJxSixjQUFjLE1BQU1qSSxhQUFhQyxTQUFTcUQsS0FBSyxDQUFDNEU7WUFDOUNELGNBQWNDO1FBQ2hCO0lBQ0YsT0FBTztRQUNMRCxjQUFjLE1BQU01RSxpQkFBaUJwRCxTQUFTcUQsS0FBSyxDQUFDNEU7WUFDbERELGNBQWNDO1FBQ2hCO0lBQ0Y7SUFFQSxJQUFHRCxnQkFBZ0IsS0FBSzNFLElBQUlDLE9BQU8sRUFBRTtRQUNuQ3RELFFBQVF3QixLQUFLLENBQUM7UUFFZCxJQUFJO1lBQ0YsTUFBTTFDLFFBQVE7Z0JBQ1pGLFlBQVlyQixVQUFVdUQsTUFBTSxDQUFDUCxjQUFjO2dCQUMzQzJILGFBQWF2SixZQUFZLFFBQ3ZCLENBQUMsY0FBYyxFQUFFcEIsVUFBVXVELE1BQU0sQ0FBQ04sY0FBYyxDQUFDLGFBQWEsQ0FBQyxHQUMvRGpELFVBQVV1RCxNQUFNLENBQUNxSCxPQUFPLEVBQUV4RSxTQUFTO1lBQ3ZDO1lBRUEsTUFBTXpGLFdBQVc7Z0JBQ2Y4SSxRQUFRLENBQUM7O1lBRUwsRUFBRXJJLFFBQVE7UUFDZCxFQUFFMEUsSUFBSWpELE1BQU0sSUFBSSxVQUFVO2FBQ3JCLEVBQUU3QyxVQUFVdUQsTUFBTSxDQUFDSCxpQkFBaUIsQ0FBQztBQUNsRCxFQUFFaUYsS0FBS0MsU0FBUyxDQUFDL0csT0FBTyxNQUFNLEdBQUc7Ozs7Ozs7MkJBT04sQ0FBQztnQkFDcEJtSSxNQUFNO2dCQUNOQyxTQUFTO2dCQUNUckk7WUFDRjtZQUVBbUIsUUFBUWlELE9BQU8sQ0FBQztRQUNsQixFQUFFLE9BQU1rRSxTQUFTO1lBQ2ZuSCxRQUFRbUQsSUFBSSxDQUFDO1lBQ2IsSUFBRyxDQUFDdEUsT0FBTztnQkFDVGlCLFFBQVFvRCxLQUFLLENBQUMsc0JBQXNCaUU7WUFDdEM7UUFDRjtJQUNGO0lBRUEsSUFBR2EsZ0JBQWdCLEdBQUc7UUFDcEIsSUFBSTtZQUNGLE1BQU10SyxvQkFBb0JzQyxTQUFTekMsVUFBVXVELE1BQU0sRUFBRWpDO1FBQ3ZELEVBQUUsT0FBTXVKLFdBQVc7WUFDakJwSyxJQUFJLENBQUMsRUFBRSxFQUFFbUMsUUFBUSx5Q0FBeUMsRUFBRWlJLFVBQVV0QixPQUFPLEVBQUUsRUFBRSxTQUFTakk7WUFDMUZxQixTQUFTO1lBQ1QsT0FBTztRQUNUO0lBQ0Y7SUFFQUEsU0FBUzhIO0lBQ1QsT0FBT0E7QUFDVCxFQUFFO0FBRUYsZUFBZVosTUFBTSJ9
|