@nikovirtala/projen-constructs 0.3.79 → 0.3.80

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.
Files changed (33) hide show
  1. package/.jsii +263 -130
  2. package/docs/api/classes/Bundler.html +33 -6
  3. package/docs/api/classes/Colima.html +4 -0
  4. package/docs/api/classes/LambdaFunctionCodeBundle.html +22 -2
  5. package/docs/api/classes/LambdaFunctionConstructGenerator.html +4 -0
  6. package/docs/api/classes/LocalStack.html +4 -0
  7. package/docs/api/functions/convertToPosixPath.html +2 -0
  8. package/docs/api/functions/renderBundleName.html +9 -1
  9. package/docs/api/interfaces/Bundle.html +12 -3
  10. package/docs/api/interfaces/BundlerOptions.html +40 -4
  11. package/docs/api/interfaces/BundlingOptions.html +139 -12
  12. package/docs/api/interfaces/LambdaFunctionCodeBundleOptions.html +53 -5
  13. package/docs/api/interfaces/LambdaFunctionCodeBundlerOptions.html +26 -3
  14. package/docs/api/interfaces/LambdaFunctionConstructGeneratorOptions.html +90 -8
  15. package/docs/api/interfaces/LocalStackOptions.html +46 -4
  16. package/lib/components/bundle-lambda-function-code.d.ts +243 -0
  17. package/lib/components/bundle-lambda-function-code.js +75 -5
  18. package/lib/components/colima.d.ts +5 -0
  19. package/lib/components/colima.js +7 -2
  20. package/lib/components/homebrew.js +1 -1
  21. package/lib/components/lambda-function-construct-generator.d.ts +54 -0
  22. package/lib/components/lambda-function-construct-generator.js +7 -2
  23. package/lib/components/localstack.d.ts +32 -0
  24. package/lib/components/localstack.js +14 -2
  25. package/lib/components/mise.js +1 -1
  26. package/lib/components/typedoc.js +1 -1
  27. package/lib/components/vitest.js +1 -1
  28. package/lib/project-generator.js +1 -1
  29. package/lib/projects/awscdk-construct-library.generated.js +1 -1
  30. package/lib/projects/awscdk-typescript-app.generated.js +1 -1
  31. package/lib/projects/jsii.generated.js +1 -1
  32. package/lib/projects/typescript.generated.js +1 -1
  33. package/package.json +1 -1
@@ -1,60 +1,303 @@
1
1
  import { Component, cdk, type Project, type Task } from "projen";
2
+ /**
3
+ * Renders the bundle name of an entrypoint: its path without the extension and without a leading `src` directory.
4
+ *
5
+ * @example renderBundleName("src/handlers/foo.lambda.ts") // "handlers/foo.lambda"
6
+ */
2
7
  export declare function renderBundleName(entrypoint: string): string;
8
+ /**
9
+ * Converts the given path string to posix if it wasn't already.
10
+ */
3
11
  export declare function convertToPosixPath(p: string): string;
12
+ /**
13
+ * Options for `Bundler`.
14
+ */
4
15
  export interface BundlerOptions {
16
+ /**
17
+ * The semantic version requirement for `esbuild`.
18
+ *
19
+ * @default - no specific version (implies latest)
20
+ */
5
21
  readonly esbuildVersion?: string;
22
+ /**
23
+ * Output directory for all bundles.
24
+ *
25
+ * @default "assets"
26
+ */
6
27
  readonly assetsDir?: string;
28
+ /**
29
+ * Install the `bundle` command as a pre-compile phase.
30
+ *
31
+ * @default true
32
+ */
7
33
  readonly addToPreCompile?: boolean;
34
+ /**
35
+ * Map of file extensions (without dot) and loaders to use for this file type.
36
+ * Loaders are appended to the esbuild command by `--loader:.extension=loader`
37
+ *
38
+ * @default - no loaders
39
+ */
8
40
  readonly loaders?: {
9
41
  [key: string]: string;
10
42
  };
11
43
  }
44
+ /**
45
+ * Adds support for bundling JavaScript applications and dependencies into a
46
+ * single file.
47
+ */
12
48
  export declare class Bundler extends Component {
49
+ /**
50
+ * Returns the `Bundler` instance associated with a project or `undefined` if
51
+ * there is no Bundler.
52
+ *
53
+ * @param project The project
54
+ * @returns A bundler
55
+ */
13
56
  static of(project: Project): Bundler | undefined;
57
+ /**
58
+ * The semantic version requirement for `esbuild` (if defined).
59
+ */
14
60
  readonly esbuildVersion: string | undefined;
61
+ /**
62
+ * Root bundle directory.
63
+ */
15
64
  readonly bundledir: string;
16
65
  private _task;
17
66
  private readonly addToPreCompile;
18
67
  private readonly loaders?;
68
+ /**
69
+ * Creates a `Bundler`.
70
+ */
19
71
  constructor(project: Project, options?: BundlerOptions);
72
+ /**
73
+ * Gets or creates the singleton "bundle" task of the project.
74
+ *
75
+ * If the project doesn't have a "bundle" task, it will be created and spawned
76
+ * during the pre-compile phase (unless `addToPreCompile` is `false`).
77
+ */
20
78
  get bundleTask(): Task;
79
+ /**
80
+ * Adds a task to the project which bundles a specific entrypoint and all of
81
+ * its dependencies into a single javascript output file.
82
+ *
83
+ * @param entrypoint The relative path of the artifact within the project
84
+ * @param options Bundling options
85
+ */
21
86
  addBundle(entrypoint: string, options: BundlingOptions): Bundle;
87
+ /**
88
+ * Add bundling support to a project. This is called implicitly when
89
+ * `bundleTask` is referenced first. It adds the dependency on `esbuild`,
90
+ * gitignore/npmignore, etc.
91
+ */
22
92
  private addBundlingSupport;
23
93
  }
94
+ /**
95
+ * A bundle created by `Bundler.addBundle`.
96
+ */
24
97
  export interface Bundle {
98
+ /**
99
+ * The task that produces this bundle.
100
+ */
25
101
  readonly bundleTask: Task;
102
+ /**
103
+ * Location of the output file (relative to project root).
104
+ */
26
105
  readonly outfile: string;
106
+ /**
107
+ * Base directory containing the output file (relative to project root).
108
+ */
27
109
  readonly outdir: string;
28
110
  }
111
+ /**
112
+ * Options for bundling.
113
+ */
29
114
  export interface BundlingOptions {
115
+ /**
116
+ * You can mark a file or a package as external to exclude it from your build.
117
+ * Instead of being bundled, the import will be preserved (using require for
118
+ * the iife and cjs formats and using import for the esm format) and will be
119
+ * evaluated at run time instead.
120
+ *
121
+ * This has several uses. First of all, it can be used to trim unnecessary
122
+ * code from your bundle for a code path that you know will never be executed.
123
+ * For example, a package may contain code that only runs in node but you will
124
+ * only be using that package in the browser. It can also be used to import
125
+ * code in node at run time from a package that cannot be bundled. For
126
+ * example, the fsevents package contains a native extension, which esbuild
127
+ * doesn't support.
128
+ *
129
+ * @default []
130
+ */
30
131
  readonly externals?: string[];
132
+ /**
133
+ * Include a source map in the bundle.
134
+ *
135
+ * @default true
136
+ */
31
137
  readonly sourcemap?: boolean;
138
+ /**
139
+ * esbuild target.
140
+ *
141
+ * @default "esnext"
142
+ */
32
143
  readonly target?: string;
144
+ /**
145
+ * esbuild platform.
146
+ *
147
+ * @default "node"
148
+ */
33
149
  readonly platform?: string;
150
+ /**
151
+ * Bundler output path relative to the asset's output directory.
152
+ *
153
+ * @default "index.mjs"
154
+ */
34
155
  readonly outfile?: string;
156
+ /**
157
+ * The path of the tsconfig.json file to use for bundling.
158
+ *
159
+ * `LambdaFunctionCodeBundle` always sets this to the project's development tsconfig.
160
+ *
161
+ * @default - no tsconfig is passed to esbuild
162
+ */
35
163
  readonly tsconfigPath?: string;
164
+ /**
165
+ * Map of file extensions (without dot) and loaders to use for this file type.
166
+ * Loaders are appended to the esbuild command by `--loader:.extension=loader`
167
+ *
168
+ * @default - the loaders of the `Bundler`
169
+ */
36
170
  readonly loaders?: {
37
171
  [key: string]: string;
38
172
  };
173
+ /**
174
+ * Output format for the generated JavaScript files: `"iife"`, `"cjs"` or `"esm"`.
175
+ *
176
+ * @default "esm"
177
+ * @see https://esbuild.github.io/api/#format
178
+ */
39
179
  readonly format?: string;
180
+ /**
181
+ * Minify the bundle.
182
+ *
183
+ * @default true
184
+ * @see https://esbuild.github.io/api/#minify
185
+ */
40
186
  readonly minify?: boolean;
187
+ /**
188
+ * Include the original source code in the source map.
189
+ *
190
+ * @default false
191
+ * @see https://esbuild.github.io/api/#sources-content
192
+ */
41
193
  readonly sourcesContent?: boolean;
194
+ /**
195
+ * Comma-separated list of `package.json` fields esbuild tries when resolving a package.
196
+ *
197
+ * @default "module,main"
198
+ * @see https://esbuild.github.io/api/#main-fields
199
+ */
42
200
  readonly mainFields?: string;
201
+ /**
202
+ * esbuild `--banner` argument, appended as is (so it starts with the file type, e.g. `:js=`).
203
+ *
204
+ * The default defines `require` so that CommonJS dependencies work in an ES module bundle.
205
+ *
206
+ * @default ":js=import { createRequire as topLevelCreateRequire } from 'module';const require = topLevelCreateRequire(import.meta.url)"
207
+ * @see https://esbuild.github.io/api/#banner
208
+ */
43
209
  readonly banner?: string;
44
210
  }
211
+ /**
212
+ * Options for `LambdaFunctionCodeBundle`.
213
+ */
45
214
  export interface LambdaFunctionCodeBundleOptions {
215
+ /**
216
+ * A path from the project root directory to a TypeScript file which contains
217
+ * the AWS Lambda handler entrypoint (exports a `handler` function).
218
+ *
219
+ * This is relative to the root directory of the project.
220
+ *
221
+ * @example "src/subdir/foo.lambda.ts"
222
+ */
46
223
  readonly entrypoint: string;
224
+ /**
225
+ * Suffix for AWS Lambda handlers.
226
+ *
227
+ * @example ".lambda.ts"
228
+ */
47
229
  readonly extension: string;
230
+ /**
231
+ * The name of the generated TypeScript source file. This file should also be
232
+ * under the source tree.
233
+ *
234
+ * @default - The path of the entrypoint file, with the `-code.ts` suffix
235
+ * instead of the extension (e.g. `src/foo-code.ts`).
236
+ */
48
237
  readonly constructFile?: string;
238
+ /**
239
+ * The name of the generated `aws_lambda.Code` constant.
240
+ *
241
+ * @default - A pascal cased version of the name of the entrypoint file, with
242
+ * the suffix `FunctionCode` (e.g. `ResizeImageFunctionCode`).
243
+ */
49
244
  readonly constructName?: string;
245
+ /**
246
+ * Bundling options for this AWS Lambda Function.
247
+ *
248
+ * @default - the defaults of `BundlingOptions`
249
+ */
50
250
  readonly bundlingOptions?: BundlingOptions;
51
251
  }
252
+ /**
253
+ * Generates a pre-bundled AWS Lambda Function code asset from handler code.
254
+ *
255
+ * Adds a task to the project's `Bundler` that uses `esbuild` to bundle the
256
+ * handler into the assets directory, and generates a file (e.g. `src/foo-code.ts`)
257
+ * exporting an `aws_lambda.Code` constant (e.g. `FooFunctionCode`) that points to
258
+ * the bundle. Pass it as the `code` of an `aws_lambda.Function`.
259
+ *
260
+ * Requires a `Bundler` component in the project.
261
+ *
262
+ * @example
263
+ *
264
+ * new Bundler(myProject);
265
+ * new LambdaFunctionCodeBundle(myProject, {
266
+ * entrypoint: "src/foo.lambda.ts",
267
+ * extension: ".lambda.ts",
268
+ * });
269
+ */
52
270
  export declare class LambdaFunctionCodeBundle extends Component {
271
+ /**
272
+ * Defines a pre-bundled AWS Lambda Function code asset from handler code.
273
+ *
274
+ * @param project The project to use
275
+ * @param options Options
276
+ */
53
277
  constructor(project: Project, options: LambdaFunctionCodeBundleOptions);
54
278
  }
279
+ /**
280
+ * Options for `LambdaFunctionCodeBundler`
281
+ */
55
282
  export interface LambdaFunctionCodeBundlerOptions {
283
+ /**
284
+ * Locate files with the given extension.
285
+ *
286
+ * @example ".lambda.ts"
287
+ */
56
288
  readonly extension: string;
289
+ /**
290
+ * Project source tree (relative to project output directory).
291
+ */
57
292
  readonly srcdir: string;
293
+ /**
294
+ * Options for AWS Lambda Function bundling, applied to every discovered entrypoint.
295
+ *
296
+ * The `entrypoint` and `extension` given here are ignored: each bundle uses its
297
+ * discovered entrypoint and the `extension` of the bundler.
298
+ *
299
+ * @default - the defaults of `LambdaFunctionCodeBundleOptions`
300
+ */
58
301
  readonly bundleOptions?: LambdaFunctionCodeBundleOptions;
59
302
  }
60
303
  /**
@@ -41,30 +41,58 @@ const path = __importStar(require("node:path"));
41
41
  const node_path_1 = require("node:path");
42
42
  const case_1 = require("case");
43
43
  const projen_1 = require("projen");
44
+ /**
45
+ * Renders the bundle name of an entrypoint: its path without the extension and without a leading `src` directory.
46
+ *
47
+ * @example renderBundleName("src/handlers/foo.lambda.ts") // "handlers/foo.lambda"
48
+ */
44
49
  function renderBundleName(entrypoint) {
45
50
  const parts = (0, node_path_1.join)(entrypoint).split(node_path_1.sep);
46
51
  if (parts[0] === "src") {
47
- parts.shift();
52
+ parts.shift(); // just remove 'src' if its the first element for ergonomics
48
53
  }
49
54
  const p = parts.join(node_path_1.sep);
50
55
  const dir = (0, node_path_1.dirname)(p);
51
56
  const base = (0, node_path_1.basename)(p, (0, node_path_1.extname)(p));
52
57
  return (0, node_path_1.join)(dir, base);
53
58
  }
59
+ /**
60
+ * Converts the given path string to posix if it wasn't already.
61
+ */
54
62
  function convertToPosixPath(p) {
55
63
  return p.split(node_path_1.sep).join(node_path_1.posix.sep);
56
64
  }
65
+ /**
66
+ * Adds support for bundling JavaScript applications and dependencies into a
67
+ * single file.
68
+ */
57
69
  class Bundler extends projen_1.Component {
58
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Bundler", version: "0.3.79" };
70
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Bundler", version: "0.3.80" };
71
+ /**
72
+ * Returns the `Bundler` instance associated with a project or `undefined` if
73
+ * there is no Bundler.
74
+ *
75
+ * @param project The project
76
+ * @returns A bundler
77
+ */
59
78
  static of(project) {
60
79
  const isBundler = (o) => o instanceof Bundler;
61
80
  return project.components.find(isBundler);
62
81
  }
82
+ /**
83
+ * The semantic version requirement for `esbuild` (if defined).
84
+ */
63
85
  esbuildVersion;
86
+ /**
87
+ * Root bundle directory.
88
+ */
64
89
  bundledir;
65
90
  _task;
66
91
  addToPreCompile;
67
92
  loaders;
93
+ /**
94
+ * Creates a `Bundler`.
95
+ */
68
96
  constructor(project, options = {}) {
69
97
  super(project);
70
98
  this.esbuildVersion = options.esbuildVersion;
@@ -72,6 +100,12 @@ class Bundler extends projen_1.Component {
72
100
  this.addToPreCompile = options.addToPreCompile ?? true;
73
101
  this.loaders = options.loaders;
74
102
  }
103
+ /**
104
+ * Gets or creates the singleton "bundle" task of the project.
105
+ *
106
+ * If the project doesn't have a "bundle" task, it will be created and spawned
107
+ * during the pre-compile phase (unless `addToPreCompile` is `false`).
108
+ */
75
109
  get bundleTask() {
76
110
  if (!this._task) {
77
111
  this.addBundlingSupport();
@@ -84,6 +118,13 @@ class Bundler extends projen_1.Component {
84
118
  }
85
119
  return this._task;
86
120
  }
121
+ /**
122
+ * Adds a task to the project which bundles a specific entrypoint and all of
123
+ * its dependencies into a single javascript output file.
124
+ *
125
+ * @param entrypoint The relative path of the artifact within the project
126
+ * @param options Bundling options
127
+ */
87
128
  addBundle(entrypoint, options) {
88
129
  const name = renderBundleName(entrypoint);
89
130
  const outdir = path.posix.join(this.bundledir, name);
@@ -147,6 +188,11 @@ class Bundler extends projen_1.Component {
147
188
  outfile: outfile,
148
189
  };
149
190
  }
191
+ /**
192
+ * Add bundling support to a project. This is called implicitly when
193
+ * `bundleTask` is referenced first. It adds the dependency on `esbuild`,
194
+ * gitignore/npmignore, etc.
195
+ */
150
196
  addBundlingSupport() {
151
197
  const ignoreEntry = `/${this.bundledir}/`;
152
198
  this.project.addGitIgnore(ignoreEntry);
@@ -156,8 +202,32 @@ class Bundler extends projen_1.Component {
156
202
  }
157
203
  }
158
204
  exports.Bundler = Bundler;
205
+ /**
206
+ * Generates a pre-bundled AWS Lambda Function code asset from handler code.
207
+ *
208
+ * Adds a task to the project's `Bundler` that uses `esbuild` to bundle the
209
+ * handler into the assets directory, and generates a file (e.g. `src/foo-code.ts`)
210
+ * exporting an `aws_lambda.Code` constant (e.g. `FooFunctionCode`) that points to
211
+ * the bundle. Pass it as the `code` of an `aws_lambda.Function`.
212
+ *
213
+ * Requires a `Bundler` component in the project.
214
+ *
215
+ * @example
216
+ *
217
+ * new Bundler(myProject);
218
+ * new LambdaFunctionCodeBundle(myProject, {
219
+ * entrypoint: "src/foo.lambda.ts",
220
+ * extension: ".lambda.ts",
221
+ * });
222
+ */
159
223
  class LambdaFunctionCodeBundle extends projen_1.Component {
160
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.LambdaFunctionCodeBundle", version: "0.3.79" };
224
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.LambdaFunctionCodeBundle", version: "0.3.80" };
225
+ /**
226
+ * Defines a pre-bundled AWS Lambda Function code asset from handler code.
227
+ *
228
+ * @param project The project to use
229
+ * @param options Options
230
+ */
161
231
  constructor(project, options) {
162
232
  super(project);
163
233
  const bundler = Bundler.of(project);
@@ -203,7 +273,7 @@ exports.LambdaFunctionCodeBundle = LambdaFunctionCodeBundle;
203
273
  * Creates Lambda Function code bundles from entrypoints discovered in the project's source tree.
204
274
  */
205
275
  class LambdaFunctionCodeBundler extends projen_1.cdk.AutoDiscoverBase {
206
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.LambdaFunctionCodeBundler", version: "0.3.79" };
276
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.LambdaFunctionCodeBundler", version: "0.3.80" };
207
277
  constructor(project, options) {
208
278
  super(project, {
209
279
  projectdir: options.srcdir,
@@ -219,4 +289,4 @@ class LambdaFunctionCodeBundler extends projen_1.cdk.AutoDiscoverBase {
219
289
  }
220
290
  }
221
291
  exports.LambdaFunctionCodeBundler = LambdaFunctionCodeBundler;
222
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlLWxhbWJkYS1mdW5jdGlvbi1jb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvYnVuZGxlLWxhbWJkYS1mdW5jdGlvbi1jb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNBLDRDQVNDO0FBRUQsZ0RBRUM7O0FBM0JELGdEQUFrQztBQUNsQyx5Q0FBeUU7QUFDekUsK0JBQThCO0FBQzlCLG1DQVNnQjtBQUVoQixTQUFnQixnQkFBZ0IsQ0FBQyxVQUFrQjtJQUMvQyxNQUFNLEtBQUssR0FBRyxJQUFBLGdCQUFJLEVBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQUcsQ0FBQyxDQUFDO0lBQzFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQ3JCLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBQ0QsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFHLENBQUMsQ0FBQztJQUMxQixNQUFNLEdBQUcsR0FBRyxJQUFBLG1CQUFPLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsTUFBTSxJQUFJLEdBQUcsSUFBQSxvQkFBUSxFQUFDLENBQUMsRUFBRSxJQUFBLG1CQUFPLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxPQUFPLElBQUEsZ0JBQUksRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVELFNBQWdCLGtCQUFrQixDQUFDLENBQVM7SUFDeEMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFTRCxNQUFhLE9BQVEsU0FBUSxrQkFBUzs7SUFDM0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFn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QUM7UUFDNUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxrQkFBa0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7O0FBbERMLDREQW1EQztBQVFEOztHQUVHO0FBQ0gsTUFBYSx5QkFBMEIsU0FBUSxZQUFHLENBQUMsZ0JBQWdCOztJQUMvRCxZQUFZLE9BQWdCLEVBQUUsT0FBeUM7UUFDbkUsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUNYLFVBQVUsRUFBRSxPQUFPLENBQUMsTUFBTTtZQUMxQixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7U0FDL0IsQ0FBQyxDQUFDO1FBRUgsS0FBSyxNQUFNLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDeEMsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUN2QyxHQUFHLE9BQU8sQ0FBQyxhQUFhO2dCQUN4QixVQUFVLEVBQUUsVUFBVTtnQkFDdEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO2FBQy9CLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDOztBQWRMLDhEQWVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBiYXNlbmFtZSwgZGlybmFtZSwgZXh0bmFtZSwgam9pbiwgcG9zaXgsIHNlcCB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHBhc2NhbCB9IGZyb20gXCJjYXNlXCI7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBjZGssXG4gICAgRGVwZW5kZW5jeVR5cGUsXG4gICAgamF2YXNjcmlwdCxcbiAgICB0eXBlIFByb2plY3QsXG4gICAgU291cmNlQ29kZSxcbiAgICB0eXBlIFRhc2ssXG4gICAgdHlwZSB0eXBlc2NyaXB0LFxufSBmcm9tIFwicHJvamVuXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJCdW5kbGVOYW1lKGVudHJ5cG9pbnQ6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcnRzID0gam9pbihlbnRyeXBvaW50KS5zcGxpdChzZXApO1xuICAgIGlmIChwYXJ0c1swXSA9PT0gXCJzcmNcIikge1xuICAgICAgICBwYXJ0cy5zaGlmdCgpO1xuICAgIH1cbiAgICBjb25zdCBwID0gcGFydHMuam9pbihzZXApO1xuICAgIGNvbnN0IGRpciA9IGRpcm5hbWUocCk7XG4gICAgY29uc3QgYmFzZSA9IGJhc2VuYW1lKHAsIGV4dG5hbWUocCkpO1xuICAgIHJldHVybiBqb2luKGRpciwgYmFzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9Qb3NpeFBhdGgocDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHAuc3BsaXQoc2VwKS5qb2luKHBvc2l4LnNlcCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVuZGxlck9wdGlvbnMge1xuICAgIHJlYWRvbmx5IGVzYnVpbGRWZXJzaW9uPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGFzc2V0c0Rpcj86IHN0cmluZztcbiAgICByZWFkb25seSBhZGRUb1ByZUNvbXBpbGU/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGxvYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5leHBvcnQgY2xhc3MgQnVuZGxlciBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgcHVibGljIHN0YXRpYyBvZihwcm9qZWN0OiBQcm9qZWN0KTogQnVuZGxlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGlzQnVuZGxlciA9IChvOiBDb21wb25lbnQpOiBvIGlzIEJ1bmRsZXIgPT4gbyBpbnN0YW5jZW9mIEJ1bmRsZXI7XG4gICAgICAgIHJldHVybiBwcm9qZWN0LmNvbXBvbmVudHMuZmluZChpc0J1bmRsZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkb25seSBlc2J1aWxkVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHB1YmxpYyByZWFkb25seSBidW5kbGVkaXI6IHN0cmluZztcblxuICAgIHByaXZhdGUgX3Rhc2s6IFRhc2sgfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhZGRUb1ByZUNvbXBpbGU6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2FkZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAgIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IEJ1bmRsZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIocHJvamVjdCk7XG4gICAgICAgIHRoaXMuZXNidWlsZFZlcnNpb24gPSBvcHRpb25zLmVzYnVpbGRWZXJzaW9uO1xuICAgICAgICB0aGlzLmJ1bmRsZWRpciA9IG9wdGlvbnMuYXNzZXRzRGlyID8/IFwiYXNzZXRzXCI7XG4gICAgICAgIHRoaXMuYWRkVG9QcmVDb21waWxlID0gb3B0aW9ucy5hZGRUb1ByZUNvbXBpbGUgPz8gdHJ1ZTtcbiAgICAgICAgdGhpcy5sb2FkZXJzID0gb3B0aW9ucy5sb2FkZXJzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYnVuZGxlVGFzaygpOiBUYXNrIHtcbiAgICAgICAgaWYgKCF0aGlzLl90YXNrKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEJ1bmRsaW5nU3VwcG9ydCgpO1xuICAgICAgICAgICAgdGhpcy5fdGFzayA9IHRoaXMucHJvamVjdC50YXNrcy5hZGRUYXNrKFwiYnVuZGxlXCIsIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJQcmVwYXJlIGFzc2V0c1wiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5hZGRUb1ByZUNvbXBpbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2plY3QucHJlQ29tcGlsZVRhc2suc3Bhd24odGhpcy5fdGFzayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rhc2s7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEJ1bmRsZShlbnRyeXBvaW50OiBzdHJpbmcsIG9wdGlvbnM6IEJ1bmRsaW5nT3B0aW9ucyk6IEJ1bmRsZSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSByZW5kZXJCdW5kbGVOYW1lKGVudHJ5cG9pbnQpO1xuICAgICAgICBjb25zdCBvdXRkaXIgPSBwYXRoLnBvc2l4LmpvaW4odGhpcy5idW5kbGVkaXIsIG5hbWUpO1xuICAgICAgICBjb25zdCBvdXRmaWxlID0gcGF0aC5wb3NpeC5qb2luKG91dGRpciwgb3B0aW9ucy5vdXRmaWxlID8/IFwiaW5kZXgubWpzXCIpO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBvcHRpb25zLnRhcmdldCA/PyBcImVzbmV4dFwiO1xuICAgICAgICBjb25zdCBwbGF0Zm9ybSA9IG9wdGlvbnMucGxhdGZvcm0gPz8gXCJub2RlXCI7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IG9wdGlvbnMuZm9ybWF0ID8/IFwiZXNtXCI7XG4gICAgICAgIGNvbnN0IHNvdXJjZW1hcCA9IG9wdGlvbnMuc291cmNlbWFwID8/IHRydWU7XG4gICAgICAgIGNvbnN0IHNvdXJjZXNDb250ZW50ID0gb3B0aW9ucy5zb3VyY2VzQ29udGVudCA/PyBmYWxzZTtcbiAgICAgICAgY29uc3QgbWluaWZ5ID0gb3B0aW9ucy5taW5pZnkgPz8gdHJ1ZTtcbiAgICAgICAgY29uc3QgbWFpbkZpZWxkcyA9IG9wdGlvbnMubWFpbkZpZWxkcyA/PyBcIm1vZHVsZSxtYWluXCI7XG4gICAgICAgIGNvbnN0IGJhbm5lciA9XG4gICAgICAgICAgICBvcHRpb25zLmJhbm5lciA/P1xuICAgICAgICAgICAgXCI6anM9aW1wb3J0IHsgY3JlYXRlUmVxdWlyZSBhcyB0b3BMZXZlbENyZWF0ZVJlcXVpcmUgfSBmcm9tICdtb2R1bGUnO2NvbnN0IHJlcXVpcmUgPSB0b3BMZXZlbENyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKVwiO1xuXG4gICAgICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICAgICAgICBcImVzYnVpbGRcIixcbiAgICAgICAgICAgIFwiLS1idW5kbGVcIixcbiAgICAgICAgICAgIGVudHJ5cG9pbnQsXG4gICAgICAgICAgICBgLS10YXJnZXQ9XCIke3RhcmdldH1cImAsXG4gICAgICAgICAgICBgLS1wbGF0Zm9ybT1cIiR7cGxhdGZvcm19XCJgLFxuICAgICAgICAgICAgYC0tb3V0ZmlsZT1cIiR7b3V0ZmlsZX1cImAsXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgdHNjb25maWcgPSBvcHRpb25zLnRzY29uZmlnUGF0aCA/PyBmYWxzZTtcbiAgICAgICAgaWYgKHRzY29uZmlnKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goYC0tdHNjb25maWc9XCIke3RzY29uZmlnfVwiYCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHggb2Ygb3B0aW9ucy5leHRlcm5hbHMgPz8gW10pIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaChgLS1leHRlcm5hbDoke3h9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc291cmNlbWFwKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goXCItLXNvdXJjZW1hcFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzb3VyY2VzQ29udGVudCkge1xuICAgICAgICAgICAgYXJncy5wdXNoKGAtLXNvdXJjZXMtY29udGVudD0ke3NvdXJjZXNDb250ZW50fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1pbmlmeSkge1xuICAgICAgICAgICAgYXJncy5wdXNoKFwiLS1taW5pZnlcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybWF0KSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goYC0tZm9ybWF0PSR7Zm9ybWF0fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1haW5GaWVsZHMpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaChgLS1tYWluLWZpZWxkcz0ke21haW5GaWVsZHN9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmFubmVyKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goYC0tYmFubmVyJHtiYW5uZXJ9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2FkZXJzID0gKG9wdGlvbnMubG9hZGVycyA/PyBmYWxzZSkgPyBvcHRpb25zLmxvYWRlcnMgOiAodGhpcy5sb2FkZXJzID8/IGZhbHNlKTtcbiAgICAgICAgaWYgKGxvYWRlcnMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2V4dGVuc2lvbiwgbG9hZGVyXSBvZiBPYmplY3QuZW50cmllcyhsb2FkZXJzKSkge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChgLS1sb2FkZXI6LiR7ZXh0ZW5zaW9ufT0ke2xvYWRlcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1bmRsZVRhc2sgPSB0aGlzLnByb2plY3QuYWRkVGFzayhgYnVuZGxlOiR7bmFtZX1gLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYENyZWF0ZSBhIEphdmFTY3JpcHQgYnVuZGxlIGZyb20gJHtlbnRyeXBvaW50fWAsXG4gICAgICAgICAgICBleGVjOiBhcmdzLmpvaW4oXCIgXCIpLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmJ1bmRsZVRhc2suc3Bhd24oYnVuZGxlVGFzayk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJ1bmRsZVRhc2s6IGJ1bmRsZVRhc2ssXG4gICAgICAgICAgICBvdXRkaXI6IG91dGRpcixcbiAgICAgICAgICAgIG91dGZpbGU6IG91dGZpbGUsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRCdW5kbGluZ1N1cHBvcnQoKSB7XG4gICAgICAgIGNvbnN0IGlnbm9yZUVudHJ5ID0gYC8ke3RoaXMuYnVuZGxlZGlyfS9gO1xuICAgICAgICB0aGlzLnByb2plY3QuYWRkR2l0SWdub3JlKGlnbm9yZUVudHJ5KTtcbiAgICAgICAgdGhpcy5wcm9qZWN0LmFkZFBhY2thZ2VJZ25vcmUoYCEke2lnbm9yZUVudHJ5fWApO1xuICAgICAgICBjb25zdCBkZXAgPSB0aGlzLmVzYnVpbGRWZXJzaW9uID8gYGVzYnVpbGRAJHt0aGlzLmVzYnVpbGRWZXJzaW9ufWAgOiBcImVzYnVpbGRcIjtcbiAgICAgICAgdGhpcy5wcm9qZWN0LmRlcHMuYWRkRGVwZW5kZW5jeShkZXAsIERlcGVuZGVuY3lUeXBlLkJVSUxEKTtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVuZGxlIHtcbiAgICByZWFkb25seSBidW5kbGVUYXNrOiBUYXNrO1xuICAgIHJlYWRvbmx5IG91dGZpbGU6IHN0cmluZztcbiAgICByZWFkb25seSBvdXRkaXI6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdW5kbGluZ09wdGlvbnMge1xuICAgIHJlYWRvbmx5IGV4dGVybmFscz86IHN0cmluZ1tdO1xuICAgIHJlYWRvbmx5IHNvdXJjZW1hcD86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgdGFyZ2V0Pzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHBsYXRmb3JtPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IG91dGZpbGU/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgdHNjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGxvYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIHJlYWRvbmx5IGZvcm1hdD86IHN0cmluZztcbiAgICByZWFkb25seSBtaW5pZnk/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IHNvdXJjZXNDb250ZW50PzogYm9vbGVhbjtcbiAgICByZWFkb25seSBtYWluRmllbGRzPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGJhbm5lcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFGdW5jdGlvbkNvZGVCdW5kbGVPcHRpb25zIHtcbiAgICByZWFkb25seSBlbnRyeXBvaW50OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgZXh0ZW5zaW9uOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgY29uc3RydWN0RmlsZT86IHN0cmluZztcbiAgICByZWFkb25seSBjb25zdHJ1Y3ROYW1lPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGJ1bmRsaW5nT3B0aW9ucz86IEJ1bmRsaW5nT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIExhbWJkYUZ1bmN0aW9uQ29kZUJ1bmRsZSBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogTGFtYmRhRnVuY3Rpb25Db2RlQnVuZGxlT3B0aW9ucykge1xuICAgICAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgICAgICBjb25zdCBidW5kbGVyID0gQnVuZGxlci5vZihwcm9qZWN0KTtcbiAgICAgICAgaWYgKCFidW5kbGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBidW5kbGVyIGZvdW5kLiBQbGVhc2UgYWRkIGEgQnVuZGxlciBjb21wb25lbnQgdG8geW91ciBwcm9qZWN0LlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVzbGludCA9IGphdmFzY3JpcHQuRXNsaW50Lm9mKHByb2plY3QpO1xuICAgICAgICBlc2xpbnQ/LmFsbG93RGV2RGVwcyhvcHRpb25zLmVudHJ5cG9pbnQpO1xuXG4gICAgICAgIGNvbnN0IGVudHJ5cG9pbnQgPSBvcHRpb25zLmVudHJ5cG9pbnQ7XG4gICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IG9wdGlvbnMuZXh0ZW5zaW9uID8/IFwiLmxhbWJkYS50c1wiO1xuXG4gICAgICAgIGlmICghZW50cnlwb2ludC5lbmRzV2l0aChleHRlbnNpb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZW50cnlwb2ludH0gbXVzdCBoYXZlIGEgJHtleHRlbnNpb259IGV4dGVuc2lvbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmFzZVBhdGggPSBwYXRoLnBvc2l4LmpvaW4ocGF0aC5kaXJuYW1lKGVudHJ5cG9pbnQpLCBwYXRoLmJhc2VuYW1lKGVudHJ5cG9pbnQsIGV4dGVuc2lvbikpO1xuICAgICAgICBjb25zdCBjb25zdHJ1Y3RGaWxlID0gb3B0aW9ucy5jb25zdHJ1Y3RGaWxlID8/IGAke2Jhc2VQYXRofS1jb2RlLnRzYDtcblxuICAgICAgICBpZiAocGF0aC5leHRuYW1lKGNvbnN0cnVjdEZpbGUpICE9PSBcIi50c1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbnN0cnVjdCBmaWxlIG5hbWUgXCIke2NvbnN0cnVjdEZpbGV9XCIgbXVzdCBoYXZlIGEgLnRzIGV4dGVuc2lvbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uc3RydWN0TmFtZSA9IG9wdGlvbnMuY29uc3RydWN0TmFtZSA/PyBgJHtwYXNjYWwocGF0aC5iYXNlbmFtZShiYXNlUGF0aCkpfUZ1bmN0aW9uQ29kZWA7XG5cbiAgICAgICAgY29uc3QgYnVuZGxlID0gYnVuZGxlci5hZGRCdW5kbGUoZW50cnlwb2ludCwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucy5idW5kbGluZ09wdGlvbnMsXG4gICAgICAgICAgICB0c2NvbmZpZ1BhdGg6IChwcm9qZWN0IGFzIHR5cGVzY3JpcHQuVHlwZVNjcmlwdFByb2plY3QpPy50c2NvbmZpZ0Rldj8uZmlsZU5hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IG91dGZpbGVBYnMgPSBwYXRoLmpvaW4ocHJvamVjdC5vdXRkaXIsIGJ1bmRsZS5vdXRmaWxlKTtcbiAgICAgICAgY29uc3QgY29uc3RydWN0QWJzID0gcGF0aC5qb2luKHByb2plY3Qub3V0ZGlyLCBjb25zdHJ1Y3RGaWxlKTtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVPdXRmaWxlID0gcGF0aC5yZWxhdGl2ZShwYXRoLmRpcm5hbWUoY29uc3RydWN0QWJzKSwgcGF0aC5kaXJuYW1lKG91dGZpbGVBYnMpKTtcblxuICAgICAgICBjb25zdCBzcmMgPSBuZXcgU291cmNlQ29kZShwcm9qZWN0LCBjb25zdHJ1Y3RGaWxlKTtcbiAgICAgICAgaWYgKHNyYy5tYXJrZXIpIHtcbiAgICAgICAgICAgIHNyYy5saW5lKGAvLyAke3NyYy5tYXJrZXJ9YCk7XG4gICAgICAgIH1cbiAgICAgICAgc3JjLmxpbmUoXCJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1wiKTtcbiAgICAgICAgc3JjLmxpbmUoXCJpbXBvcnQgeyBhd3NfbGFtYmRhIH0gZnJvbSAnYXdzLWNkay1saWInO1wiKTtcbiAgICAgICAgc3JjLmxpbmUoKTtcbiAgICAgICAgc3JjLm9wZW4oYGV4cG9ydCBjb25zdCAke2NvbnN0cnVjdE5hbWV9ID0gYXdzX2xhbWJkYS5Db2RlLmZyb21Bc3NldChgKTtcbiAgICAgICAgc3JjLmxpbmUoYHBhdGguam9pbihfX2Rpcm5hbWUsICcke2NvbnZlcnRUb1Bvc2l4UGF0aChyZWxhdGl2ZU91dGZpbGUpfScpLGApO1xuICAgICAgICBzcmMuY2xvc2UoXCIpO1wiKTtcblxuICAgICAgICB0aGlzLnByb2plY3QubG9nZ2VyLnZlcmJvc2UoYCR7YmFzZVBhdGh9OiBjb25zdHJ1Y3QgXCIke2NvbnN0cnVjdE5hbWV9XCIgZ2VuZXJhdGVkIHVuZGVyIFwiJHtjb25zdHJ1Y3RGaWxlfVwiYCk7XG4gICAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIudmVyYm9zZShgJHtiYXNlUGF0aH06IGJ1bmRsZSB0YXNrIFwiJHtidW5kbGUuYnVuZGxlVGFzay5uYW1lfVwiYCk7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUZ1bmN0aW9uQ29kZUJ1bmRsZXJPcHRpb25zIHtcbiAgICByZWFkb25seSBleHRlbnNpb246IHN0cmluZztcbiAgICByZWFkb25seSBzcmNkaXI6IHN0cmluZztcbiAgICByZWFkb25seSBidW5kbGVPcHRpb25zPzogTGFtYmRhRnVuY3Rpb25Db2RlQnVuZGxlT3B0aW9ucztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIExhbWJkYSBGdW5jdGlvbiBjb2RlIGJ1bmRsZXMgZnJvbSBlbnRyeXBvaW50cyBkaXNjb3ZlcmVkIGluIHRoZSBwcm9qZWN0J3Mgc291cmNlIHRyZWUuXG4gKi9cbmV4cG9ydCBjbGFzcyBMYW1iZGFGdW5jdGlvbkNvZGVCdW5kbGVyIGV4dGVuZHMgY2RrLkF1dG9EaXNjb3ZlckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IExhbWJkYUZ1bmN0aW9uQ29kZUJ1bmRsZXJPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKHByb2plY3QsIHtcbiAgICAgICAgICAgIHByb2plY3RkaXI6IG9wdGlvbnMuc3JjZGlyLFxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBvcHRpb25zLmV4dGVuc2lvbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBlbnRyeXBvaW50IG9mIHRoaXMuZW50cnlwb2ludHMpIHtcbiAgICAgICAgICAgIG5ldyBMYW1iZGFGdW5jdGlvbkNvZGVCdW5kbGUodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucy5idW5kbGVPcHRpb25zLFxuICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQ6IGVudHJ5cG9pbnQsXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uOiBvcHRpb25zLmV4dGVuc2lvbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
292
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlLWxhbWJkYS1mdW5jdGlvbi1jb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvYnVuZGxlLWxhbWJkYS1mdW5jdGlvbi1jb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSw0Q0FTQztBQUtELGdEQUVDOztBQW5DRCxnREFBa0M7QUFDbEMseUNBQXlFO0FBQ3pFLCtCQUE4QjtBQUM5QixtQ0FTZ0I7QUFFaEI7Ozs7R0FJRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLFVBQWtCO0lBQy9DLE1BQU0sS0FBSyxHQUFHLElBQUEsZ0JBQUksRUFBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBRyxDQUFDLENBQUM7SUFDMUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDckIsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsNERBQTREO0lBQy9FLENBQUM7SUFDRCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQUcsQ0FBQyxDQUFDO0lBQzFCLE1BQU0sR0FBRyxHQUFHLElBQUEsbUJBQU8sRUFBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixNQUFNLElBQUksR0FBRyxJQUFBLG9CQUFRLEVBQUMsQ0FBQyxFQUFFLElBQUEsbUJBQU8sRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sSUFBQSxnQkFBSSxFQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxDQUFTO0lBQ3hDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBb0NEOzs7R0FHRztBQUNILE1B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QUFDLHlCQUF5QixrQkFBa0IsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxRQUFRLGdCQUFnQixhQUFhLHNCQUFzQixhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQzVHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLFFBQVEsa0JBQWtCLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUN4RixDQUFDOztBQXhETCw0REF5REM7QUE2QkQ7O0dBRUc7QUFDSCxNQUFhLHlCQUEwQixTQUFRLFlBQUcsQ0FBQyxnQkFBZ0I7O0lBQy9ELFlBQVksT0FBZ0IsRUFBRSxPQUF5QztRQUNuRSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ1gsVUFBVSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQzFCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztTQUMvQixDQUFDLENBQUM7UUFFSCxLQUFLLE1BQU0sVUFBVSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN4QyxJQUFJLHdCQUF3QixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ3ZDLEdBQUcsT0FBTyxDQUFDLGFBQWE7Z0JBQ3hCLFVBQVUsRUFBRSxVQUFVO2dCQUN0QixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7YUFDL0IsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNMLENBQUM7O0FBZEwsOERBZUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGJhc2VuYW1lLCBkaXJuYW1lLCBleHRuYW1lLCBqb2luLCBwb3NpeCwgc2VwIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgcGFzY2FsIH0gZnJvbSBcImNhc2VcIjtcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIGNkayxcbiAgICBEZXBlbmRlbmN5VHlwZSxcbiAgICBqYXZhc2NyaXB0LFxuICAgIHR5cGUgUHJvamVjdCxcbiAgICBTb3VyY2VDb2RlLFxuICAgIHR5cGUgVGFzayxcbiAgICB0eXBlIHR5cGVzY3JpcHQsXG59IGZyb20gXCJwcm9qZW5cIjtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBidW5kbGUgbmFtZSBvZiBhbiBlbnRyeXBvaW50OiBpdHMgcGF0aCB3aXRob3V0IHRoZSBleHRlbnNpb24gYW5kIHdpdGhvdXQgYSBsZWFkaW5nIGBzcmNgIGRpcmVjdG9yeS5cbiAqXG4gKiBAZXhhbXBsZSByZW5kZXJCdW5kbGVOYW1lKFwic3JjL2hhbmRsZXJzL2Zvby5sYW1iZGEudHNcIikgLy8gXCJoYW5kbGVycy9mb28ubGFtYmRhXCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckJ1bmRsZU5hbWUoZW50cnlwb2ludDogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFydHMgPSBqb2luKGVudHJ5cG9pbnQpLnNwbGl0KHNlcCk7XG4gICAgaWYgKHBhcnRzWzBdID09PSBcInNyY1wiKSB7XG4gICAgICAgIHBhcnRzLnNoaWZ0KCk7IC8vIGp1c3QgcmVtb3ZlICdzcmMnIGlmIGl0cyB0aGUgZmlyc3QgZWxlbWVudCBmb3IgZXJnb25vbWljc1xuICAgIH1cbiAgICBjb25zdCBwID0gcGFydHMuam9pbihzZXApO1xuICAgIGNvbnN0IGRpciA9IGRpcm5hbWUocCk7XG4gICAgY29uc3QgYmFzZSA9IGJhc2VuYW1lKHAsIGV4dG5hbWUocCkpO1xuICAgIHJldHVybiBqb2luKGRpciwgYmFzZSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGdpdmVuIHBhdGggc3RyaW5nIHRvIHBvc2l4IGlmIGl0IHdhc24ndCBhbHJlYWR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRvUG9zaXhQYXRoKHA6IHN0cmluZykge1xuICAgIHJldHVybiBwLnNwbGl0KHNlcCkuam9pbihwb3NpeC5zZXApO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBCdW5kbGVyYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdW5kbGVyT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogVGhlIHNlbWFudGljIHZlcnNpb24gcmVxdWlyZW1lbnQgZm9yIGBlc2J1aWxkYC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IC0gbm8gc3BlY2lmaWMgdmVyc2lvbiAoaW1wbGllcyBsYXRlc3QpXG4gICAgICovXG4gICAgcmVhZG9ubHkgZXNidWlsZFZlcnNpb24/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBPdXRwdXQgZGlyZWN0b3J5IGZvciBhbGwgYnVuZGxlcy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiYXNzZXRzXCJcbiAgICAgKi9cbiAgICByZWFkb25seSBhc3NldHNEaXI/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YWxsIHRoZSBgYnVuZGxlYCBjb21tYW5kIGFzIGEgcHJlLWNvbXBpbGUgcGhhc2UuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgcmVhZG9ubHkgYWRkVG9QcmVDb21waWxlPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIE1hcCBvZiBmaWxlIGV4dGVuc2lvbnMgKHdpdGhvdXQgZG90KSBhbmQgbG9hZGVycyB0byB1c2UgZm9yIHRoaXMgZmlsZSB0eXBlLlxuICAgICAqIExvYWRlcnMgYXJlIGFwcGVuZGVkIHRvIHRoZSBlc2J1aWxkIGNvbW1hbmQgYnkgYC0tbG9hZGVyOi5leHRlbnNpb249bG9hZGVyYFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgLSBubyBsb2FkZXJzXG4gICAgICovXG4gICAgcmVhZG9ubHkgbG9hZGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogQWRkcyBzdXBwb3J0IGZvciBidW5kbGluZyBKYXZhU2NyaXB0IGFwcGxpY2F0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGludG8gYVxuICogc2luZ2xlIGZpbGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBCdW5kbGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBgQnVuZGxlcmAgaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGEgcHJvamVjdCBvciBgdW5kZWZpbmVkYCBpZlxuICAgICAqIHRoZXJlIGlzIG5vIEJ1bmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdFxuICAgICAqIEByZXR1cm5zIEEgYnVuZGxlclxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgb2YocHJvamVjdDogUHJvamVjdCk6IEJ1bmRsZXIgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBpc0J1bmRsZXIgPSAobzogQ29tcG9uZW50KTogbyBpcyBCdW5kbGVyID0+IG8gaW5zdGFuY2VvZiBCdW5kbGVyO1xuICAgICAgICByZXR1cm4gcHJvamVjdC5jb21wb25lbnRzLmZpbmQoaXNCdW5kbGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2VtYW50aWMgdmVyc2lvbiByZXF1aXJlbWVudCBmb3IgYGVzYnVpbGRgIChpZiBkZWZpbmVkKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZXNidWlsZFZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFJvb3QgYnVuZGxlIGRpcmVjdG9yeS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgYnVuZGxlZGlyOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIF90YXNrOiBUYXNrIHwgdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWRkVG9QcmVDb21waWxlOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9hZGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYEJ1bmRsZXJgLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IEJ1bmRsZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIocHJvamVjdCk7XG4gICAgICAgIHRoaXMuZXNidWlsZFZlcnNpb24gPSBvcHRpb25zLmVzYnVpbGRWZXJzaW9uO1xuICAgICAgICB0aGlzLmJ1bmRsZWRpciA9IG9wdGlvbnMuYXNzZXRzRGlyID8/IFwiYXNzZXRzXCI7XG4gICAgICAgIHRoaXMuYWRkVG9QcmVDb21waWxlID0gb3B0aW9ucy5hZGRUb1ByZUNvbXBpbGUgPz8gdHJ1ZTtcbiAgICAgICAgdGhpcy5sb2FkZXJzID0gb3B0aW9ucy5sb2FkZXJzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgb3IgY3JlYXRlcyB0aGUgc2luZ2xldG9uIFwiYnVuZGxlXCIgdGFzayBvZiB0aGUgcHJvamVjdC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBwcm9qZWN0IGRvZXNuJ3QgaGF2ZSBhIFwiYnVuZGxlXCIgdGFzaywgaXQgd2lsbCBiZSBjcmVhdGVkIGFuZCBzcGF3bmVkXG4gICAgICogZHVyaW5nIHRoZSBwcmUtY29tcGlsZSBwaGFzZSAodW5sZXNzIGBhZGRUb1ByZUNvbXBpbGVgIGlzIGBmYWxzZWApLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgYnVuZGxlVGFzaygpOiBUYXNrIHtcbiAgICAgICAgaWYgKCF0aGlzLl90YXNrKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEJ1bmRsaW5nU3VwcG9ydCgpO1xuICAgICAgICAgICAgdGhpcy5fdGFzayA9IHRoaXMucHJvamVjdC50YXNrcy5hZGRUYXNrKFwiYnVuZGxlXCIsIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJQcmVwYXJlIGFzc2V0c1wiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5hZGRUb1ByZUNvbXBpbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2plY3QucHJlQ29tcGlsZVRhc2suc3Bhd24odGhpcy5fdGFzayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rhc2s7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHRhc2sgdG8gdGhlIHByb2plY3Qgd2hpY2ggYnVuZGxlcyBhIHNwZWNpZmljIGVudHJ5cG9pbnQgYW5kIGFsbCBvZlxuICAgICAqIGl0cyBkZXBlbmRlbmNpZXMgaW50byBhIHNpbmdsZSBqYXZhc2NyaXB0IG91dHB1dCBmaWxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGVudHJ5cG9pbnQgVGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIGFydGlmYWN0IHdpdGhpbiB0aGUgcHJvamVjdFxuICAgICAqIEBwYXJhbSBvcHRpb25zIEJ1bmRsaW5nIG9wdGlvbnNcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkQnVuZGxlKGVudHJ5cG9pbnQ6IHN0cmluZywgb3B0aW9uczogQnVuZGxpbmdPcHRpb25zKTogQnVuZGxlIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHJlbmRlckJ1bmRsZU5hbWUoZW50cnlwb2ludCk7XG4gICAgICAgIGNvbnN0IG91dGRpciA9IHBhdGgucG9zaXguam9pbih0aGlzLmJ1bmRsZWRpciwgbmFtZSk7XG4gICAgICAgIGNvbnN0IG91dGZpbGUgPSBwYXRoLnBvc2l4LmpvaW4ob3V0ZGlyLCBvcHRpb25zLm91dGZpbGUgPz8gXCJpbmRleC5tanNcIik7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IG9wdGlvbnMudGFyZ2V0ID8/IFwiZXNuZXh0XCI7XG4gICAgICAgIGNvbnN0IHBsYXRmb3JtID0gb3B0aW9ucy5wbGF0Zm9ybSA/PyBcIm5vZGVcIjtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gb3B0aW9ucy5mb3JtYXQgPz8gXCJlc21cIjtcbiAgICAgICAgY29uc3Qgc291cmNlbWFwID0gb3B0aW9ucy5zb3VyY2VtYXAgPz8gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc291cmNlc0NvbnRlbnQgPSBvcHRpb25zLnNvdXJjZXNDb250ZW50ID8/IGZhbHNlO1xuICAgICAgICBjb25zdCBtaW5pZnkgPSBvcHRpb25zLm1pbmlmeSA/PyB0cnVlO1xuICAgICAgICBjb25zdCBtYWluRmllbGRzID0gb3B0aW9ucy5tYWluRmllbGRzID8/IFwibW9kdWxlLG1haW5cIjtcbiAgICAgICAgY29uc3QgYmFubmVyID1cbiAgICAgICAgICAgIG9wdGlvbnMuYmFubmVyID8/XG4gICAgICAgICAgICBcIjpqcz1pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIGFzIHRvcExldmVsQ3JlYXRlUmVxdWlyZSB9IGZyb20gJ21vZHVsZSc7Y29uc3QgcmVxdWlyZSA9IHRvcExldmVsQ3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpXCI7XG5cbiAgICAgICAgY29uc3QgYXJncyA9IFtcbiAgICAgICAgICAgIFwiZXNidWlsZFwiLFxuICAgICAgICAgICAgXCItLWJ1bmRsZVwiLFxuICAgICAgICAgICAgZW50cnlwb2ludCxcbiAgICAgICAgICAgIGAtLXRhcmdldD1cIiR7dGFyZ2V0fVwiYCxcbiAgICAgICAgICAgIGAtLXBsYXRmb3JtPVwiJHtwbGF0Zm9ybX1cImAsXG4gICAgICAgICAgICBgLS1vdXRmaWxlPVwiJHtvdXRmaWxlfVwiYCxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCB0c2NvbmZpZyA9IG9wdGlvbnMudHNjb25maWdQYXRoID8/IGZhbHNlO1xuICAgICAgICBpZiAodHNjb25maWcpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaChgLS10c2NvbmZpZz1cIiR7dHNjb25maWd9XCJgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgeCBvZiBvcHRpb25zLmV4dGVybmFscyA/PyBbXSkge1xuICAgICAgICAgICAgYXJncy5wdXNoKGAtLWV4dGVybmFsOiR7eH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzb3VyY2VtYXApIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaChcIi0tc291cmNlbWFwXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNvdXJjZXNDb250ZW50KSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goYC0tc291cmNlcy1jb250ZW50PSR7c291cmNlc0NvbnRlbnR9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWluaWZ5KSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goXCItLW1pbmlmeVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3JtYXQpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaChgLS1mb3JtYXQ9JHtmb3JtYXR9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWFpbkZpZWxkcykge1xuICAgICAgICAgICAgYXJncy5wdXNoKGAtLW1haW4tZmllbGRzPSR7bWFpbkZpZWxkc31gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiYW5uZXIpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaChgLS1iYW5uZXIke2Jhbm5lcn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxvYWRlcnMgPSAob3B0aW9ucy5sb2FkZXJzID8/IGZhbHNlKSA/IG9wdGlvbnMubG9hZGVycyA6ICh0aGlzLmxvYWRlcnMgPz8gZmFsc2UpO1xuICAgICAgICBpZiAobG9hZGVycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBbZXh0ZW5zaW9uLCBsb2FkZXJdIG9mIE9iamVjdC5lbnRyaWVzKGxvYWRlcnMpKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wdXNoKGAtLWxvYWRlcjouJHtleHRlbnNpb259PSR7bG9hZGVyfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVuZGxlVGFzayA9IHRoaXMucHJvamVjdC5hZGRUYXNrKGBidW5kbGU6JHtuYW1lfWAsIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgQ3JlYXRlIGEgSmF2YVNjcmlwdCBidW5kbGUgZnJvbSAke2VudHJ5cG9pbnR9YCxcbiAgICAgICAgICAgIGV4ZWM6IGFyZ3Muam9pbihcIiBcIiksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYnVuZGxlVGFzay5zcGF3bihidW5kbGVUYXNrKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYnVuZGxlVGFzazogYnVuZGxlVGFzayxcbiAgICAgICAgICAgIG91dGRpcjogb3V0ZGlyLFxuICAgICAgICAgICAgb3V0ZmlsZTogb3V0ZmlsZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYnVuZGxpbmcgc3VwcG9ydCB0byBhIHByb2plY3QuIFRoaXMgaXMgY2FsbGVkIGltcGxpY2l0bHkgd2hlblxuICAgICAqIGBidW5kbGVUYXNrYCBpcyByZWZlcmVuY2VkIGZpcnN0LiBJdCBhZGRzIHRoZSBkZXBlbmRlbmN5IG9uIGBlc2J1aWxkYCxcbiAgICAgKiBnaXRpZ25vcmUvbnBtaWdub3JlLCBldGMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBhZGRCdW5kbGluZ1N1cHBvcnQoKSB7XG4gICAgICAgIGNvbnN0IGlnbm9yZUVudHJ5ID0gYC8ke3RoaXMuYnVuZGxlZGlyfS9gO1xuICAgICAgICB0aGlzLnByb2plY3QuYWRkR2l0SWdub3JlKGlnbm9yZUVudHJ5KTtcbiAgICAgICAgdGhpcy5wcm9qZWN0LmFkZFBhY2thZ2VJZ25vcmUoYCEke2lnbm9yZUVudHJ5fWApO1xuICAgICAgICBjb25zdCBkZXAgPSB0aGlzLmVzYnVpbGRWZXJzaW9uID8gYGVzYnVpbGRAJHt0aGlzLmVzYnVpbGRWZXJzaW9ufWAgOiBcImVzYnVpbGRcIjtcbiAgICAgICAgdGhpcy5wcm9qZWN0LmRlcHMuYWRkRGVwZW5kZW5jeShkZXAsIERlcGVuZGVuY3lUeXBlLkJVSUxEKTtcbiAgICB9XG59XG5cbi8qKlxuICogQSBidW5kbGUgY3JlYXRlZCBieSBgQnVuZGxlci5hZGRCdW5kbGVgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1bmRsZSB7XG4gICAgLyoqXG4gICAgICogVGhlIHRhc2sgdGhhdCBwcm9kdWNlcyB0aGlzIGJ1bmRsZS5cbiAgICAgKi9cbiAgICByZWFkb25seSBidW5kbGVUYXNrOiBUYXNrO1xuXG4gICAgLyoqXG4gICAgICogTG9jYXRpb24gb2YgdGhlIG91dHB1dCBmaWxlIChyZWxhdGl2ZSB0byBwcm9qZWN0IHJvb3QpLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IG91dGZpbGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEJhc2UgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIG91dHB1dCBmaWxlIChyZWxhdGl2ZSB0byBwcm9qZWN0IHJvb3QpLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IG91dGRpcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGJ1bmRsaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1bmRsaW5nT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogWW91IGNhbiBtYXJrIGEgZmlsZSBvciBhIHBhY2thZ2UgYXMgZXh0ZXJuYWwgdG8gZXhjbHVkZSBpdCBmcm9tIHlvdXIgYnVpbGQuXG4gICAgICogSW5zdGVhZCBvZiBiZWluZyBidW5kbGVkLCB0aGUgaW1wb3J0IHdpbGwgYmUgcHJlc2VydmVkICh1c2luZyByZXF1aXJlIGZvclxuICAgICAqIHRoZSBpaWZlIGFuZCBjanMgZm9ybWF0cyBhbmQgdXNpbmcgaW1wb3J0IGZvciB0aGUgZXNtIGZvcm1hdCkgYW5kIHdpbGwgYmVcbiAgICAgKiBldmFsdWF0ZWQgYXQgcnVuIHRpbWUgaW5zdGVhZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaGFzIHNldmVyYWwgdXNlcy4gRmlyc3Qgb2YgYWxsLCBpdCBjYW4gYmUgdXNlZCB0byB0cmltIHVubmVjZXNzYXJ5XG4gICAgICogY29kZSBmcm9tIHlvdXIgYnVuZGxlIGZvciBhIGNvZGUgcGF0aCB0aGF0IHlvdSBrbm93IHdpbGwgbmV2ZXIgYmUgZXhlY3V0ZWQuXG4gICAgICogRm9yIGV4YW1wbGUsIGEgcGFja2FnZSBtYXkgY29udGFpbiBjb2RlIHRoYXQgb25seSBydW5zIGluIG5vZGUgYnV0IHlvdSB3aWxsXG4gICAgICogb25seSBiZSB1c2luZyB0aGF0IHBhY2thZ2UgaW4gdGhlIGJyb3dzZXIuIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gaW1wb3J0XG4gICAgICogY29kZSBpbiBub2RlIGF0IHJ1biB0aW1lIGZyb20gYSBwYWNrYWdlIHRoYXQgY2Fubm90IGJlIGJ1bmRsZWQuIEZvclxuICAgICAqIGV4YW1wbGUsIHRoZSBmc2V2ZW50cyBwYWNrYWdlIGNvbnRhaW5zIGEgbmF0aXZlIGV4dGVuc2lvbiwgd2hpY2ggZXNidWlsZFxuICAgICAqIGRvZXNuJ3Qgc3VwcG9ydC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFtdXG4gICAgICovXG4gICAgcmVhZG9ubHkgZXh0ZXJuYWxzPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBJbmNsdWRlIGEgc291cmNlIG1hcCBpbiB0aGUgYnVuZGxlLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IHNvdXJjZW1hcD86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBlc2J1aWxkIHRhcmdldC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiZXNuZXh0XCJcbiAgICAgKi9cbiAgICByZWFkb25seSB0YXJnZXQ/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBlc2J1aWxkIHBsYXRmb3JtLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJub2RlXCJcbiAgICAgKi9cbiAgICByZWFkb25seSBwbGF0Zm9ybT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEJ1bmRsZXIgb3V0cHV0IHBhdGggcmVsYXRpdmUgdG8gdGhlIGFzc2V0J3Mgb3V0cHV0IGRpcmVjdG9yeS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiaW5kZXgubWpzXCJcbiAgICAgKi9cbiAgICByZWFkb25seSBvdXRmaWxlPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBhdGggb2YgdGhlIHRzY29uZmlnLmpzb24gZmlsZSB0byB1c2UgZm9yIGJ1bmRsaW5nLlxuICAgICAqXG4gICAgICogYExhbWJkYUZ1bmN0aW9uQ29kZUJ1bmRsZWAgYWx3YXlzIHNldHMgdGhpcyB0byB0aGUgcHJvamVjdCdzIGRldmVsb3BtZW50IHRzY29uZmlnLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgLSBubyB0c2NvbmZpZyBpcyBwYXNzZWQgdG8gZXNidWlsZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IHRzY29uZmlnUGF0aD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIE1hcCBvZiBmaWxlIGV4dGVuc2lvbnMgKHdpdGhvdXQgZG90KSBhbmQgbG9hZGVycyB0byB1c2UgZm9yIHRoaXMgZmlsZSB0eXBlLlxuICAgICAqIExvYWRlcnMgYXJlIGFwcGVuZGVkIHRvIHRoZSBlc2J1aWxkIGNvbW1hbmQgYnkgYC0tbG9hZGVyOi5leHRlbnNpb249bG9hZGVyYFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgLSB0aGUgbG9hZGVycyBvZiB0aGUgYEJ1bmRsZXJgXG4gICAgICovXG4gICAgcmVhZG9ubHkgbG9hZGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgICAvKipcbiAgICAgKiBPdXRwdXQgZm9ybWF0IGZvciB0aGUgZ2VuZXJhdGVkIEphdmFTY3JpcHQgZmlsZXM6IGBcImlpZmVcImAsIGBcImNqc1wiYCBvciBgXCJlc21cImAuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcImVzbVwiXG4gICAgICogQHNlZSBodHRwczovL2VzYnVpbGQuZ2l0aHViLmlvL2FwaS8jZm9ybWF0XG4gICAgICovXG4gICAgcmVhZG9ubHkgZm9ybWF0Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogTWluaWZ5IHRoZSBidW5kbGUuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICogQHNlZSBodHRwczovL2VzYnVpbGQuZ2l0aHViLmlvL2FwaS8jbWluaWZ5XG4gICAgICovXG4gICAgcmVhZG9ubHkgbWluaWZ5PzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEluY2x1ZGUgdGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlIGluIHRoZSBzb3VyY2UgbWFwLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAc2VlIGh0dHBzOi8vZXNidWlsZC5naXRodWIuaW8vYXBpLyNzb3VyY2VzLWNvbnRlbnRcbiAgICAgKi9cbiAgICByZWFkb25seSBzb3VyY2VzQ29udGVudD86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBgcGFja2FnZS5qc29uYCBmaWVsZHMgZXNidWlsZCB0cmllcyB3aGVuIHJlc29sdmluZyBhIHBhY2thZ2UuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcIm1vZHVsZSxtYWluXCJcbiAgICAgKiBAc2VlIGh0dHBzOi8vZXNidWlsZC5naXRodWIuaW8vYXBpLyNtYWluLWZpZWxkc1xuICAgICAqL1xuICAgIHJlYWRvbmx5IG1haW5GaWVsZHM/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBlc2J1aWxkIGAtLWJhbm5lcmAgYXJndW1lbnQsIGFwcGVuZGVkIGFzIGlzIChzbyBpdCBzdGFydHMgd2l0aCB0aGUgZmlsZSB0eXBlLCBlLmcuIGA6anM9YCkuXG4gICAgICpcbiAgICAgKiBUaGUgZGVmYXVsdCBkZWZpbmVzIGByZXF1aXJlYCBzbyB0aGF0IENvbW1vbkpTIGRlcGVuZGVuY2llcyB3b3JrIGluIGFuIEVTIG1vZHVsZSBidW5kbGUuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcIjpqcz1pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIGFzIHRvcExldmVsQ3JlYXRlUmVxdWlyZSB9IGZyb20gJ21vZHVsZSc7Y29uc3QgcmVxdWlyZSA9IHRvcExldmVsQ3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpXCJcbiAgICAgKiBAc2VlIGh0dHBzOi8vZXNidWlsZC5naXRodWIuaW8vYXBpLyNiYW5uZXJcbiAgICAgKi9cbiAgICByZWFkb25seSBiYW5uZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYExhbWJkYUZ1bmN0aW9uQ29kZUJ1bmRsZWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhRnVuY3Rpb25Db2RlQnVuZGxlT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogQSBwYXRoIGZyb20gdGhlIHByb2plY3Qgcm9vdCBkaXJlY3RvcnkgdG8gYSBUeXBlU2NyaXB0IGZpbGUgd2hpY2ggY29udGFpbnNcbiAgICAgKiB0aGUgQVdTIExhbWJkYSBoYW5kbGVyIGVudHJ5cG9pbnQgKGV4cG9ydHMgYSBgaGFuZGxlcmAgZnVuY3Rpb24pLlxuICAgICAqXG4gICAgICogVGhpcyBpcyByZWxhdGl2ZSB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIHByb2plY3QuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBcInNyYy9zdWJkaXIvZm9vLmxhbWJkYS50c1wiXG4gICAgICovXG4gICAgcmVhZG9ubHkgZW50cnlwb2ludDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU3VmZml4IGZvciBBV1MgTGFtYmRhIGhhbmRsZXJzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgXCIubGFtYmRhLnRzXCJcbiAgICAgKi9cbiAgICByZWFkb25seSBleHRlbnNpb246IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBnZW5lcmF0ZWQgVHlwZVNjcmlwdCBzb3VyY2UgZmlsZS4gVGhpcyBmaWxlIHNob3VsZCBhbHNvIGJlXG4gICAgICogdW5kZXIgdGhlIHNvdXJjZSB0cmVlLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgLSBUaGUgcGF0aCBvZiB0aGUgZW50cnlwb2ludCBmaWxlLCB3aXRoIHRoZSBgLWNvZGUudHNgIHN1ZmZpeFxuICAgICAqIGluc3RlYWQgb2YgdGhlIGV4dGVuc2lvbiAoZS5nLiBgc3JjL2Zvby1jb2RlLnRzYCkuXG4gICAgICovXG4gICAgcmVhZG9ubHkgY29uc3RydWN0RmlsZT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBnZW5lcmF0ZWQgYGF3c19sYW1iZGEuQ29kZWAgY29uc3RhbnQuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAtIEEgcGFzY2FsIGNhc2VkIHZlcnNpb24gb2YgdGhlIG5hbWUgb2YgdGhlIGVudHJ5cG9pbnQgZmlsZSwgd2l0aFxuICAgICAqIHRoZSBzdWZmaXggYEZ1bmN0aW9uQ29kZWAgKGUuZy4gYFJlc2l6ZUltYWdlRnVuY3Rpb25Db2RlYCkuXG4gICAgICovXG4gICAgcmVhZG9ubHkgY29uc3RydWN0TmFtZT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEJ1bmRsaW5nIG9wdGlvbnMgZm9yIHRoaXMgQVdTIExhbWJkYSBGdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IC0gdGhlIGRlZmF1bHRzIG9mIGBCdW5kbGluZ09wdGlvbnNgXG4gICAgICovXG4gICAgcmVhZG9ubHkgYnVuZGxpbmdPcHRpb25zPzogQnVuZGxpbmdPcHRpb25zO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHByZS1idW5kbGVkIEFXUyBMYW1iZGEgRnVuY3Rpb24gY29kZSBhc3NldCBmcm9tIGhhbmRsZXIgY29kZS5cbiAqXG4gKiBBZGRzIGEgdGFzayB0byB0aGUgcHJvamVjdCdzIGBCdW5kbGVyYCB0aGF0IHVzZXMgYGVzYnVpbGRgIHRvIGJ1bmRsZSB0aGVcbiAqIGhhbmRsZXIgaW50byB0aGUgYXNzZXRzIGRpcmVjdG9yeSwgYW5kIGdlbmVyYXRlcyBhIGZpbGUgKGUuZy4gYHNyYy9mb28tY29kZS50c2ApXG4gKiBleHBvcnRpbmcgYW4gYGF3c19sYW1iZGEuQ29kZWAgY29uc3RhbnQgKGUuZy4gYEZvb0Z1bmN0aW9uQ29kZWApIHRoYXQgcG9pbnRzIHRvXG4gKiB0aGUgYnVuZGxlLiBQYXNzIGl0IGFzIHRoZSBgY29kZWAgb2YgYW4gYGF3c19sYW1iZGEuRnVuY3Rpb25gLlxuICpcbiAqIFJlcXVpcmVzIGEgYEJ1bmRsZXJgIGNvbXBvbmVudCBpbiB0aGUgcHJvamVjdC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIG5ldyBCdW5kbGVyKG15UHJvamVjdCk7XG4gKiBuZXcgTGFtYmRhRnVuY3Rpb25Db2RlQnVuZGxlKG15UHJvamVjdCwge1xuICogICBlbnRyeXBvaW50OiBcInNyYy9mb28ubGFtYmRhLnRzXCIsXG4gKiAgIGV4dGVuc2lvbjogXCIubGFtYmRhLnRzXCIsXG4gKiB9KTtcbiAqL1xuZXhwb3J0IGNsYXNzIExhbWJkYUZ1bmN0aW9uQ29kZUJ1bmRsZSBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBhIHByZS1idW5kbGVkIEFXUyBMYW1iZGEgRnVuY3Rpb24gY29kZSBhc3NldCBmcm9tIGhhbmRsZXIgY29kZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0IHRvIHVzZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBMYW1iZGFGdW5jdGlvbkNvZGVCdW5kbGVPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgICAgIGNvbnN0IGJ1bmRsZXIgPSBCdW5kbGVyLm9mKHByb2plY3QpO1xuICAgICAgICBpZiAoIWJ1bmRsZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGJ1bmRsZXIgZm91bmQuIFBsZWFzZSBhZGQgYSBCdW5kbGVyIGNvbXBvbmVudCB0byB5b3VyIHByb2plY3QuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXNsaW50ID0gamF2YXNjcmlwdC5Fc2xpbnQub2YocHJvamVjdCk7XG4gICAgICAgIGVzbGludD8uYWxsb3dEZXZEZXBzKG9wdGlvbnMuZW50cnlwb2ludCk7XG5cbiAgICAgICAgY29uc3QgZW50cnlwb2ludCA9IG9wdGlvbnMuZW50cnlwb2ludDtcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gb3B0aW9ucy5leHRlbnNpb24gPz8gXCIubGFtYmRhLnRzXCI7XG5cbiAgICAgICAgaWYgKCFlbnRyeXBvaW50LmVuZHNXaXRoKGV4dGVuc2lvbikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlbnRyeXBvaW50fSBtdXN0IGhhdmUgYSAke2V4dGVuc2lvbn0gZXh0ZW5zaW9uYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiYXNlUGF0aCA9IHBhdGgucG9zaXguam9pbihwYXRoLmRpcm5hbWUoZW50cnlwb2ludCksIHBhdGguYmFzZW5hbWUoZW50cnlwb2ludCwgZXh0ZW5zaW9uKSk7XG4gICAgICAgIGNvbnN0IGNvbnN0cnVjdEZpbGUgPSBvcHRpb25zLmNvbnN0cnVjdEZpbGUgPz8gYCR7YmFzZVBhdGh9LWNvZGUudHNgO1xuXG4gICAgICAgIGlmIChwYXRoLmV4dG5hbWUoY29uc3RydWN0RmlsZSkgIT09IFwiLnRzXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29uc3RydWN0IGZpbGUgbmFtZSBcIiR7Y29uc3RydWN0RmlsZX1cIiBtdXN0IGhhdmUgYSAudHMgZXh0ZW5zaW9uYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb25zdHJ1Y3ROYW1lID0gb3B0aW9ucy5jb25zdHJ1Y3ROYW1lID8/IGAke3Bhc2NhbChwYXRoLmJhc2VuYW1lKGJhc2VQYXRoKSl9RnVuY3Rpb25Db2RlYDtcblxuICAgICAgICBjb25zdCBidW5kbGUgPSBidW5kbGVyLmFkZEJ1bmRsZShlbnRyeXBvaW50LCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLmJ1bmRsaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIHRzY29uZmlnUGF0aDogKHByb2plY3QgYXMgdHlwZXNjcmlwdC5UeXBlU2NyaXB0UHJvamVjdCk/LnRzY29uZmlnRGV2Py5maWxlTmFtZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgb3V0ZmlsZUFicyA9IHBhdGguam9pbihwcm9qZWN0Lm91dGRpciwgYnVuZGxlLm91dGZpbGUpO1xuICAgICAgICBjb25zdCBjb25zdHJ1Y3RBYnMgPSBwYXRoLmpvaW4ocHJvamVjdC5vdXRkaXIsIGNvbnN0cnVjdEZpbGUpO1xuICAgICAgICBjb25zdCByZWxhdGl2ZU91dGZpbGUgPSBwYXRoLnJlbGF0aXZlKHBhdGguZGlybmFtZShjb25zdHJ1Y3RBYnMpLCBwYXRoLmRpcm5hbWUob3V0ZmlsZUFicykpO1xuXG4gICAgICAgIGNvbnN0IHNyYyA9IG5ldyBTb3VyY2VDb2RlKHByb2plY3QsIGNvbnN0cnVjdEZpbGUpO1xuICAgICAgICBpZiAoc3JjLm1hcmtlcikge1xuICAgICAgICAgICAgc3JjLmxpbmUoYC8vICR7c3JjLm1hcmtlcn1gKTtcbiAgICAgICAgfVxuICAgICAgICBzcmMubGluZShcImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XCIpO1xuICAgICAgICBzcmMubGluZShcImltcG9ydCB7IGF3c19sYW1iZGEgfSBmcm9tICdhd3MtY2RrLWxpYic7XCIpO1xuICAgICAgICBzcmMubGluZSgpO1xuICAgICAgICBzcmMub3BlbihgZXhwb3J0IGNvbnN0ICR7Y29uc3RydWN0TmFtZX0gPSBhd3NfbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGApO1xuICAgICAgICBzcmMubGluZShgcGF0aC5qb2luKF9fZGlybmFtZSwgJyR7Y29udmVydFRvUG9zaXhQYXRoKHJlbGF0aXZlT3V0ZmlsZSl9JyksYCk7XG4gICAgICAgIHNyYy5jbG9zZShcIik7XCIpO1xuXG4gICAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIudmVyYm9zZShgJHtiYXNlUGF0aH06IGNvbnN0cnVjdCBcIiR7Y29uc3RydWN0TmFtZX1cIiBnZW5lcmF0ZWQgdW5kZXIgXCIke2NvbnN0cnVjdEZpbGV9XCJgKTtcbiAgICAgICAgdGhpcy5wcm9qZWN0LmxvZ2dlci52ZXJib3NlKGAke2Jhc2VQYXRofTogYnVuZGxlIHRhc2sgXCIke2J1bmRsZS5idW5kbGVUYXNrLm5hbWV9XCJgKTtcbiAgICB9XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYExhbWJkYUZ1bmN0aW9uQ29kZUJ1bmRsZXJgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhRnVuY3Rpb25Db2RlQnVuZGxlck9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIExvY2F0ZSBmaWxlcyB3aXRoIHRoZSBnaXZlbiBleHRlbnNpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBcIi5sYW1iZGEudHNcIlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGV4dGVuc2lvbjogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogUHJvamVjdCBzb3VyY2UgdHJlZSAocmVsYXRpdmUgdG8gcHJvamVjdCBvdXRwdXQgZGlyZWN0b3J5KS5cbiAgICAgKi9cbiAgICByZWFkb25seSBzcmNkaXI6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIE9wdGlvbnMgZm9yIEFXUyBMYW1iZGEgRnVuY3Rpb24gYnVuZGxpbmcsIGFwcGxpZWQgdG8gZXZlcnkgZGlzY292ZXJlZCBlbnRyeXBvaW50LlxuICAgICAqXG4gICAgICogVGhlIGBlbnRyeXBvaW50YCBhbmQgYGV4dGVuc2lvbmAgZ2l2ZW4gaGVyZSBhcmUgaWdub3JlZDogZWFjaCBidW5kbGUgdXNlcyBpdHNcbiAgICAgKiBkaXNjb3ZlcmVkIGVudHJ5cG9pbnQgYW5kIHRoZSBgZXh0ZW5zaW9uYCBvZiB0aGUgYnVuZGxlci5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IC0gdGhlIGRlZmF1bHRzIG9mIGBMYW1iZGFGdW5jdGlvbkNvZGVCdW5kbGVPcHRpb25zYFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGJ1bmRsZU9wdGlvbnM/OiBMYW1iZGFGdW5jdGlvbkNvZGVCdW5kbGVPcHRpb25zO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgTGFtYmRhIEZ1bmN0aW9uIGNvZGUgYnVuZGxlcyBmcm9tIGVudHJ5cG9pbnRzIGRpc2NvdmVyZWQgaW4gdGhlIHByb2plY3QncyBzb3VyY2UgdHJlZS5cbiAqL1xuZXhwb3J0IGNsYXNzIExhbWJkYUZ1bmN0aW9uQ29kZUJ1bmRsZXIgZXh0ZW5kcyBjZGsuQXV0b0Rpc2NvdmVyQmFzZSB7XG4gICAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogTGFtYmRhRnVuY3Rpb25Db2RlQnVuZGxlck9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIocHJvamVjdCwge1xuICAgICAgICAgICAgcHJvamVjdGRpcjogb3B0aW9ucy5zcmNkaXIsXG4gICAgICAgICAgICBleHRlbnNpb246IG9wdGlvbnMuZXh0ZW5zaW9uLFxuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5cG9pbnQgb2YgdGhpcy5lbnRyeXBvaW50cykge1xuICAgICAgICAgICAgbmV3IExhbWJkYUZ1bmN0aW9uQ29kZUJ1bmRsZSh0aGlzLnByb2plY3QsIHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLmJ1bmRsZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgZW50cnlwb2ludDogZW50cnlwb2ludCxcbiAgICAgICAgICAgICAgICBleHRlbnNpb246IG9wdGlvbnMuZXh0ZW5zaW9uLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -1,5 +1,10 @@
1
1
  import type { IConstruct } from "constructs";
2
2
  import { Component } from "projen/lib/component";
3
+ /**
4
+ * Colima component for projen projects.
5
+ *
6
+ * Adds Colima support to your project with automatic installation and startup.
7
+ */
3
8
  export declare class Colima extends Component {
4
9
  constructor(scope: IConstruct);
5
10
  }
@@ -5,8 +5,13 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
5
  const component_1 = require("projen/lib/component");
6
6
  const task_shell_1 = require("projen/lib/task-shell");
7
7
  const homebrew_1 = require("./homebrew");
8
+ /**
9
+ * Colima component for projen projects.
10
+ *
11
+ * Adds Colima support to your project with automatic installation and startup.
12
+ */
8
13
  class Colima extends component_1.Component {
9
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Colima", version: "0.3.79" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Colima", version: "0.3.80" };
10
15
  constructor(scope) {
11
16
  super(scope);
12
17
  const project = this.project;
@@ -25,4 +30,4 @@ class Colima extends component_1.Component {
25
30
  }
26
31
  }
27
32
  exports.Colima = Colima;
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29saW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvY29saW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFFQSxvREFBaUQ7QUFDakQsc0RBQWtEO0FBQ2xELHlDQUFzQztBQUV0QyxNQUFhLE1BQU8sU0FBUSxxQkFBUzs7SUFDakMsWUFBWSxLQUFpQjtRQUN6QixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFYixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBa0IsQ0FBQztRQUV4QyxJQUFJLFFBQVEsR0FBRyxtQkFBUSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDWixRQUFRLEdBQUcsSUFBSSxtQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFFRCxRQUFRLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlCLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFOUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDdEIsMkVBQTJFO1lBQzNFLGtDQUFrQztZQUNsQyxLQUFLLEVBQUUsc0JBQVMsQ0FBQyxJQUFJLEVBQUU7WUFDdkIsSUFBSSxFQUFFLCtDQUErQztTQUN4RCxDQUFDLENBQUM7SUFDUCxDQUFDOztBQXBCTCx3QkFxQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSBcInByb2plblwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcInByb2plbi9saWIvY29tcG9uZW50XCI7XG5pbXBvcnQgeyBUYXNrU2hlbGwgfSBmcm9tIFwicHJvamVuL2xpYi90YXNrLXNoZWxsXCI7XG5pbXBvcnQgeyBIb21lYnJldyB9IGZyb20gXCIuL2hvbWVicmV3XCI7XG5cbmV4cG9ydCBjbGFzcyBDb2xpbWEgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHNjb3BlOiBJQ29uc3RydWN0KSB7XG4gICAgICAgIHN1cGVyKHNjb3BlKTtcblxuICAgICAgICBjb25zdCBwcm9qZWN0ID0gdGhpcy5wcm9qZWN0IGFzIFByb2plY3Q7XG5cbiAgICAgICAgbGV0IGhvbWVicmV3ID0gSG9tZWJyZXcub2YocHJvamVjdCk7XG4gICAgICAgIGlmICghaG9tZWJyZXcpIHtcbiAgICAgICAgICAgIGhvbWVicmV3ID0gbmV3IEhvbWVicmV3KHByb2plY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaG9tZWJyZXcuYWRkUGFja2FnZShcImNvbGltYVwiKTtcbiAgICAgICAgaG9tZWJyZXcuYWRkUGFja2FnZShcImRvY2tlclwiKTtcblxuICAgICAgICBwcm9qZWN0LmFkZFRhc2soXCJjb2xpbWFcIiwge1xuICAgICAgICAgICAgLy8gbXVsdGlwbGUgcmVkaXJlY3RzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHByb2plbidzIGJ1aWx0LWluIGNyb3NzLXBsYXRmb3JtXG4gICAgICAgICAgICAvLyBzaGVsbCwgc28gcnVuIHRoaXMgdGhyb3VnaCBiYXNoXG4gICAgICAgICAgICBzaGVsbDogVGFza1NoZWxsLmJhc2goKSxcbiAgICAgICAgICAgIGV4ZWM6IFwiY29saW1hIHN0YXR1cyA+L2Rldi9udWxsIDI+JjEgfHwgY29saW1hIHN0YXJ0XCIsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29saW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvY29saW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFFQSxvREFBaUQ7QUFDakQsc0RBQWtEO0FBQ2xELHlDQUFzQztBQUV0Qzs7OztHQUlHO0FBQ0gsTUFBYSxNQUFPLFNBQVEscUJBQVM7O0lBQ2pDLFlBQVksS0FBaUI7UUFDekIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQWtCLENBQUM7UUFFeEMsSUFBSSxRQUFRLEdBQUcsbUJBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ1osUUFBUSxHQUFHLElBQUksbUJBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QixRQUFRLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTlCLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ3RCLDJFQUEyRTtZQUMzRSxrQ0FBa0M7WUFDbEMsS0FBSyxFQUFFLHNCQUFTLENBQUMsSUFBSSxFQUFFO1lBQ3ZCLElBQUksRUFBRSwrQ0FBK0M7U0FDeEQsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7QUFwQkwsd0JBcUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCB9IGZyb20gXCJwcm9qZW5cIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJwcm9qZW4vbGliL2NvbXBvbmVudFwiO1xuaW1wb3J0IHsgVGFza1NoZWxsIH0gZnJvbSBcInByb2plbi9saWIvdGFzay1zaGVsbFwiO1xuaW1wb3J0IHsgSG9tZWJyZXcgfSBmcm9tIFwiLi9ob21lYnJld1wiO1xuXG4vKipcbiAqIENvbGltYSBjb21wb25lbnQgZm9yIHByb2plbiBwcm9qZWN0cy5cbiAqXG4gKiBBZGRzIENvbGltYSBzdXBwb3J0IHRvIHlvdXIgcHJvamVjdCB3aXRoIGF1dG9tYXRpYyBpbnN0YWxsYXRpb24gYW5kIHN0YXJ0dXAuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb2xpbWEgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHNjb3BlOiBJQ29uc3RydWN0KSB7XG4gICAgICAgIHN1cGVyKHNjb3BlKTtcblxuICAgICAgICBjb25zdCBwcm9qZWN0ID0gdGhpcy5wcm9qZWN0IGFzIFByb2plY3Q7XG5cbiAgICAgICAgbGV0IGhvbWVicmV3ID0gSG9tZWJyZXcub2YocHJvamVjdCk7XG4gICAgICAgIGlmICghaG9tZWJyZXcpIHtcbiAgICAgICAgICAgIGhvbWVicmV3ID0gbmV3IEhvbWVicmV3KHByb2plY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaG9tZWJyZXcuYWRkUGFja2FnZShcImNvbGltYVwiKTtcbiAgICAgICAgaG9tZWJyZXcuYWRkUGFja2FnZShcImRvY2tlclwiKTtcblxuICAgICAgICBwcm9qZWN0LmFkZFRhc2soXCJjb2xpbWFcIiwge1xuICAgICAgICAgICAgLy8gbXVsdGlwbGUgcmVkaXJlY3RzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHByb2plbidzIGJ1aWx0LWluIGNyb3NzLXBsYXRmb3JtXG4gICAgICAgICAgICAvLyBzaGVsbCwgc28gcnVuIHRoaXMgdGhyb3VnaCBiYXNoXG4gICAgICAgICAgICBzaGVsbDogVGFza1NoZWxsLmJhc2goKSxcbiAgICAgICAgICAgIGV4ZWM6IFwiY29saW1hIHN0YXR1cyA+L2Rldi9udWxsIDI+JjEgfHwgY29saW1hIHN0YXJ0XCIsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -6,7 +6,7 @@ const component_1 = require("projen/lib/component");
6
6
  const task_shell_1 = require("projen/lib/task-shell");
7
7
  const textfile_1 = require("projen/lib/textfile");
8
8
  class Homebrew extends component_1.Component {
9
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Homebrew", version: "0.3.79" };
9
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Homebrew", version: "0.3.80" };
10
10
  static of(project) {
11
11
  const isHomebrew = (c) => c instanceof Homebrew;
12
12
  return project.components.find(isHomebrew);