@codedrifters/configulator 0.0.49 → 0.0.51

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.
@@ -1,4 +1,4 @@
1
- import { Component, Project } from "projen/lib";
1
+ import { Component, Project, Task } from "projen/lib";
2
2
  import { BuildWorkflowOptions } from "projen/lib/build";
3
3
  import { NodeProject } from "projen/lib/javascript";
4
4
  import { TurboRepoTask } from "./turbo-repo-task";
@@ -152,6 +152,12 @@ export interface TurboRepoOptions {
152
152
  * Cache settings, if using remote cache.
153
153
  */
154
154
  readonly remoteCacheOptions?: RemoteCacheOptions;
155
+ /**
156
+ * Env Args that will bre added to turbo's build:all task
157
+ *
158
+ * @default: {}
159
+ */
160
+ readonly buildAllTaskEnvVars?: Record<string, string>;
155
161
  }
156
162
  export declare class TurboRepo extends Component {
157
163
  readonly project: NodeProject;
@@ -282,8 +288,16 @@ export declare class TurboRepo extends Component {
282
288
  * is this the root project?
283
289
  */
284
290
  readonly isRootProject: boolean;
291
+ /**
292
+ * Turbo's build:all task at the root of the monorepo.
293
+ *
294
+ * This is a normal projen task that runs the root turbo task.
295
+ */
296
+ readonly buildAllTask?: Task;
285
297
  /**
286
298
  * Main turbo:build task
299
+ *
300
+ * This is a special Turbo task
287
301
  */
288
302
  readonly buildTask: TurboRepoTask;
289
303
  /**
@@ -310,6 +324,16 @@ export declare class TurboRepo extends Component {
310
324
  * Sub-Tasks to run
311
325
  */
312
326
  readonly tasks: Array<TurboRepoTask>;
327
+ /**
328
+ * Env Args that will bre added to turbo's build:all task
329
+ */
330
+ readonly buildAllTaskEnvVars: Record<string, string>;
313
331
  constructor(project: NodeProject, options?: TurboRepoOptions);
332
+ /**
333
+ * Add an env var to the global env vars for all tasks.
334
+ * This will also become an input for the build:all task cache at the root.
335
+ */
336
+ addGlobalEnvVar(name: string, value: string): void;
337
+ activateBranchNameEnvVar(): void;
314
338
  preSynthesize(): void;
315
339
  }
@@ -46,7 +46,7 @@ class TurboRepo extends lib_1.Component {
46
46
  **************************************************************************/
47
47
  this.extends = options.extends ?? (this.isRootProject ? [] : ["//"]);
48
48
  this.globalDependencies = options.globalDependencies ?? [];
49
- this.globalEnv = ["BRANCH_NAME", ...(options.globalEnv ?? [])];
49
+ this.globalEnv = options.globalEnv ?? [];
50
50
  this.globalPassThroughEnv = options.globalPassThroughEnv ?? [];
51
51
  this.ui = options.ui ?? "stream";
52
52
  this.dangerouslyDisablePackageManagerCheck =
@@ -55,6 +55,7 @@ class TurboRepo extends lib_1.Component {
55
55
  this.daemon = options.daemon ?? true;
56
56
  this.envMode = options.envMode ?? "strict";
57
57
  this.remoteCacheOptions = options.remoteCacheOptions;
58
+ this.buildAllTaskEnvVars = options.buildAllTaskEnvVars ?? {};
58
59
  /***************************************************************************
59
60
  *
60
61
  * Turbo Build Task
@@ -86,37 +87,43 @@ class TurboRepo extends lib_1.Component {
86
87
  /**
87
88
  * Create and configure the build all task.
88
89
  */
89
- const buildAll = this.project.tasks.addTask(exports.ROOT_CI_TASK_NAME, {
90
+ this.buildAllTask = this.project.tasks.addTask(exports.ROOT_CI_TASK_NAME, {
90
91
  description: "Root build followed by sub-project builds. Mimics the CI build process in one step.",
91
92
  });
92
- buildAll.exec("turbo telemetry disable");
93
+ this.buildAllTask.exec("turbo telemetry disable");
94
+ /**
95
+ * Any env vars that may need to be added to the build all task.
96
+ */
97
+ if (this.buildAllTaskEnvVars) {
98
+ Object.entries(this.buildAllTaskEnvVars).forEach(([name, value]) => {
99
+ this.addGlobalEnvVar(name, value);
100
+ });
101
+ }
93
102
  /**
94
103
  * No remote cache in use, so run the root turbo task to build all
95
104
  * sub-projects locally.
96
105
  */
97
106
  if (!this.remoteCacheOptions) {
98
- buildAll.exec(`turbo ${exports.ROOT_TURBO_TASK_NAME} --summarize --concurrency=10`);
107
+ this.buildAllTask.exec(`turbo ${exports.ROOT_TURBO_TASK_NAME} --summarize --concurrency=10`);
99
108
  }
100
109
  else {
101
110
  /**
102
111
  * Remote cache in use, so run the root turbo task to build all
103
112
  * sub-projects using the remote cache.
104
113
  */
105
- buildAll.exec(`turbo turbo:build --summarize --concurrency=10 --cache=remote:rw --api=$TURBO_ENDPOINT --token=$TURBO_TOKEN --team=${this.remoteCacheOptions.teamName}`, {
114
+ this.buildAllTask.exec(`turbo turbo:build --summarize --concurrency=10 --cache=remote:rw --api=$TURBO_ENDPOINT --token=$TURBO_TOKEN --team=${this.remoteCacheOptions.teamName}`, {
106
115
  condition: '[ ! -n "$CI" ]',
107
116
  env: {
108
117
  TURBO_ENDPOINT: `$(aws ssm get-parameter --name ${this.remoteCacheOptions.endpointParamName} --query Parameter.Value --output text --profile ${this.remoteCacheOptions.profileName})`,
109
118
  TURBO_TOKEN: `$(aws ssm get-parameter --name ${this.remoteCacheOptions.tokenParamName} --query Parameter.Value --output text --profile ${this.remoteCacheOptions.profileName})`,
110
- BRANCH_NAME: "$(git rev-parse --abbrev-ref HEAD)",
111
119
  },
112
120
  });
113
121
  // running in CI, We'll depend on OIDC auth.
114
- buildAll.exec(`turbo turbo:build --summarize --concurrency=10 --cache=remote:rw --api=$TURBO_ENDPOINT --token=$TURBO_TOKEN --team=${this.remoteCacheOptions.teamName}`, {
122
+ this.buildAllTask.exec(`turbo turbo:build --summarize --concurrency=10 --cache=remote:rw --api=$TURBO_ENDPOINT --token=$TURBO_TOKEN --team=${this.remoteCacheOptions.teamName}`, {
115
123
  condition: '[ -n "$CI" ]',
116
124
  env: {
117
125
  TURBO_ENDPOINT: `$(aws ssm get-parameter --name ${this.remoteCacheOptions.endpointParamName} --query Parameter.Value --output text)`,
118
126
  TURBO_TOKEN: `$(aws ssm get-parameter --name ${this.remoteCacheOptions.tokenParamName} --query Parameter.Value --output text)`,
119
- BRANCH_NAME: "$(git rev-parse --abbrev-ref HEAD)",
120
127
  },
121
128
  });
122
129
  }
@@ -154,6 +161,25 @@ class TurboRepo extends lib_1.Component {
154
161
  this.tasks.push(this.preCompileTask, this.compileTask, this.postCompileTask, this.testTask, this.packageTask);
155
162
  }
156
163
  }
164
+ /**
165
+ * Add an env var to the global env vars for all tasks.
166
+ * This will also become an input for the build:all task cache at the root.
167
+ */
168
+ addGlobalEnvVar(name, value) {
169
+ /**
170
+ * Add env var to global task env
171
+ */
172
+ this.buildAllTask?.env(name, value);
173
+ /**
174
+ * Add to global env vars for all tasks.
175
+ */
176
+ if (this.isRootProject) {
177
+ this.globalEnv.push(name);
178
+ }
179
+ }
180
+ activateBranchNameEnvVar() {
181
+ this.addGlobalEnvVar("BRANCH_NAME", "$(git rev-parse --abbrev-ref HEAD)");
182
+ }
157
183
  preSynthesize() {
158
184
  /**
159
185
  * Add any local workspace specific deps to dependsOn so that we know
@@ -268,4 +294,4 @@ TurboRepo.buildWorkflowOptions = (remoteCacheOptions) => {
268
294
  ],
269
295
  };
270
296
  };
271
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVyYm8tcmVwby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90dXJiby90dXJiby1yZXBvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9DQUEwRTtBQUUxRSx1RUFBa0U7QUFFbEUsdURBQWtEO0FBRWxEOzs7O2dGQUlnRjtBQUVuRSxRQUFBLG9CQUFvQixHQUFHLGFBQWEsQ0FBQztBQUNyQyxRQUFBLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztBQW1LN0MsTUFBYSxTQUFVLFNBQVEsZUFBUztJQUN0Qzs7T0FFRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBZ0I7UUFDL0IsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFZLEVBQWtCLEVBQUUsQ0FBQyxDQUFDLFlBQVksU0FBUyxDQUFDO1FBQzNFLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQWlNRCxZQUNrQixPQUFvQixFQUNwQyxVQUE0QixFQUFFO1FBRTlCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUhDLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFOdEM7O1dBRUc7UUFDYSxVQUFLLEdBQXlCLEVBQUUsQ0FBQztRQVEvQyxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDO1FBQ3JELElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFFOUM7O1dBRUc7UUFDSCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVEOztXQUVHO1FBQ0gsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsT0FBTyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFM0M7Ozs7b0ZBSTRFO1FBRTVFLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLENBQUMsa0JBQWtCLElBQUksRUFBRSxDQUFDO1FBQzNELElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixJQUFJLEVBQUUsQ0FBQztRQUMvRCxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxxQ0FBcUM7WUFDeEMsT0FBTyxDQUFDLHFDQUFxQyxJQUFJLEtBQUssQ0FBQztRQUN6RCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDO1FBQ25ELElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7UUFDckMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQztRQUMzQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1FBRXJEOzs7Ozs7b0ZBTTRFO1FBRTVFOzs7O1dBSUc7UUFDSCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksK0JBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQy9DLElBQUksRUFBRSw0QkFBb0I7WUFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSw0QkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7U0FDbEUsQ0FBQyxDQUFDO1FBRUg7Ozs7Ozs7Ozs7b0ZBVTRFO1FBRTVFLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCOztlQUVHO1lBQ0gsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLHlCQUFpQixFQUFFO2dCQUM3RCxXQUFXLEVBQ1QscUZBQXFGO2FBQ3hGLENBQUMsQ0FBQztZQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUV6Qzs7O2VBR0c7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzdCLFFBQVEsQ0FBQyxJQUFJLENBQ1gsU0FBUyw0QkFBb0IsK0JBQStCLENBQzdELENBQUM7WUFDSixDQUFDO2lCQUFNLENBQUM7Z0JBQ047OzttQkFHRztnQkFDSCxRQUFRLENBQUMsSUFBSSxDQUNYLHNIQUFzSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLEVBQ3hKO29CQUNFLFNBQVMsRUFBRSxnQkFBZ0I7b0JBQzNCLEdBQUcsRUFBRTt3QkFDSCxjQUFjLEVBQUUsa0NBQWtDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsb0RBQW9ELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEdBQUc7d0JBQ3JMLFdBQVcsRUFBRSxrQ0FBa0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsb0RBQW9ELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEdBQUc7d0JBQy9LLFdBQVcsRUFBRSxvQ0FBb0M7cUJBQ2xEO2lCQUNGLENBQ0YsQ0FBQztnQkFDRiw0Q0FBNEM7Z0JBQzVDLFFBQVEsQ0FBQyxJQUFJLENBQ1gsc0hBQXNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsRUFDeEo7b0JBQ0UsU0FBUyxFQUFFLGNBQWM7b0JBQ3pCLEdBQUcsRUFBRTt3QkFDSCxjQUFjLEVBQUUsa0NBQWtDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIseUNBQXlDO3dCQUNwSSxXQUFXLEVBQUUsa0NBQWtDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLHlDQUF5Qzt3QkFDOUgsV0FBVyxFQUFFLG9DQUFvQztxQkFDbEQ7aUJBQ0YsQ0FDRixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRDs7OztXQUlHO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4Qjs7O2VBR0c7WUFDSCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVU7aUJBQzNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBaUIsRUFBRSxDQUFDLENBQUMsWUFBWSxjQUFRLENBQUM7aUJBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXRCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSwrQkFBYSxDQUFDLE9BQU8sRUFBRTtnQkFDL0MsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxHQUFHLGNBQWMsQ0FBQzthQUN0QyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksK0JBQWEsQ0FBQyxPQUFPLEVBQUU7Z0JBQzVDLElBQUksRUFBRSxTQUFTO2dCQUNmLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxHQUFHLGNBQWMsQ0FBQzthQUN0QyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksK0JBQWEsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hELElBQUksRUFBRSxjQUFjO2dCQUNwQixNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxjQUFjLENBQUM7YUFDdEMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLCtCQUFhLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLCtCQUFhLENBQUMsT0FBTyxFQUFFO2dCQUM1QyxJQUFJLEVBQUUsU0FBUztnQkFDZixNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUM7YUFDdkIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ2IsSUFBSSxDQUFDLGNBQWMsRUFDbkIsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLGVBQWUsRUFDcEIsSUFBSSxDQUFDLFFBQVEsRUFDYixJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhO1FBQ1g7Ozs7OztXQU1HO1FBQ0gsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRzthQUN0QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssYUFBYSxDQUFDO2FBQzFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLDRCQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFeEQ7Ozs7V0FJRztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFFdEI7Z0JBQ0UsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDO2dCQUNsRCxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQzVDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQztnQkFDcEQsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUN0QyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUM7YUFFL0MsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFO2dCQUNoQzs7bUJBRUc7Z0JBQ0gsSUFBSSxNQUFNLElBQUksU0FBUyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNuRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQzdCLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7b0JBQzdDLENBQUM7b0JBQ0QsYUFBYSxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUVqQzs7dUJBRUc7Z0JBQ0wsQ0FBQztxQkFBTSxDQUFDO29CQUNOLFNBQVMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUM3QixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSDs7ZUFFRztZQUNILElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRDs7V0FFRztRQUNILE1BQU0sUUFBUSxHQUFXLFlBQVksQ0FBQztRQUV0Qzs7V0FFRztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFeEM7OztXQUdHO1FBQ0gsSUFBSSxjQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUU7WUFDbkMsR0FBRyxFQUFFO2dCQUNILE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDdkQsa0JBQWtCLEVBQ2hCLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU07b0JBQ2xELENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCO29CQUN6QixDQUFDLENBQUMsU0FBUztnQkFDZixTQUFTLEVBQ1AsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU07b0JBQ3pDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUztvQkFDaEIsQ0FBQyxDQUFDLFNBQVM7Z0JBQ2Ysb0JBQW9CLEVBQ2xCLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU07b0JBQ3BELENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CO29CQUMzQixDQUFDLENBQUMsU0FBUztnQkFDZixFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDNUMscUNBQXFDLEVBQUUsSUFBSSxDQUFDLGFBQWE7b0JBQ3ZELENBQUMsQ0FBQyxJQUFJLENBQUMscUNBQXFDO29CQUM1QyxDQUFDLENBQUMsU0FBUztnQkFDYixRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDeEQsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQ3BELE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTO2dCQUN0RDs7bUJBRUc7Z0JBQ0gsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO3FCQUNkLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztxQkFDL0IsTUFBTSxDQUNMLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO29CQUNaLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUc7d0JBQ2YsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFO3FCQUNyQixDQUFDO29CQUNGLE9BQU8sR0FBRyxDQUFDO2dCQUNiLENBQUMsRUFDRDtvQkFDRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUU7aUJBQ25DLENBQ3pCO2FBQ0o7U0FDRixDQUFDLENBQUM7UUFFSCxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDeEIsQ0FBQzs7QUFsZEgsOEJBbWRDO0FBMWNlLDhCQUFvQixHQUFHLENBQ25DLGtCQUFzQyxFQUNQLEVBQUU7SUFDakMsT0FBTztRQUNMLFdBQVcsRUFBRTtZQUNYLFFBQVEsRUFBRSwrQkFBYSxDQUFDLEtBQUs7WUFDN0IsT0FBTyxFQUFFLCtCQUFhLENBQUMsS0FBSztTQUM3QjtRQUNELGFBQWEsRUFBRTtZQUNiO2dCQUNFLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLElBQUksRUFBRSwwQ0FBMEM7Z0JBQ2hELElBQUksRUFBRTtvQkFDSixDQUFDLGdCQUFnQixDQUFDLEVBQUUsa0JBQWtCLENBQUMsUUFBUTtvQkFDL0MsQ0FBQyxZQUFZLENBQUMsRUFBRSxXQUFXO29CQUMzQixDQUFDLHVCQUF1QixDQUFDLEVBQUUsS0FBSztpQkFDakM7YUFDRjtTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUMsQUFwQmlDLENBb0JoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRmlsZUJhc2UsIEpzb25GaWxlLCBQcm9qZWN0LCBUYXNrIH0gZnJvbSBcInByb2plbi9saWJcIjtcbmltcG9ydCB7IEJ1aWxkV29ya2Zsb3dPcHRpb25zIH0gZnJvbSBcInByb2plbi9saWIvYnVpbGRcIjtcbmltcG9ydCB7IEpvYlBlcm1pc3Npb24gfSBmcm9tIFwicHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsXCI7XG5pbXBvcnQgeyBOb2RlUHJvamVjdCB9IGZyb20gXCJwcm9qZW4vbGliL2phdmFzY3JpcHRcIjtcbmltcG9ydCB7IFR1cmJvUmVwb1Rhc2sgfSBmcm9tIFwiLi90dXJiby1yZXBvLXRhc2tcIjtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqXG4gKiBUdXJibyBSZXBvIENvbmZpZ1xuICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmV4cG9ydCBjb25zdCBST09UX1RVUkJPX1RBU0tfTkFNRSA9IFwidHVyYm86YnVpbGRcIjtcbmV4cG9ydCBjb25zdCBST09UX0NJX1RBU0tfTkFNRSA9IFwiYnVpbGQ6YWxsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVtb3RlQ2FjaGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIExvY2FsIHByb2ZpbGUgbmFtZSB0byB1c2Ugd2hlbiBmZXRjaGluZyB0aGUgY2FjaGUgZW5kcG9pbnQgYW5kIHRva2VuLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogT0lEQyByb2xlIHRvIGFzc3VtZSB3aGVuIGZldGNoaW5nIHRoZSBjYWNoZSBlbmRwb2ludCBhbmQgdG9rZW4uXG4gICAqL1xuICByZWFkb25seSBvaWRjUm9sZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIGZvciB0aGUgcGFyYW1zIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlIGVuZHBvaW50LlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnRQYXJhbU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBmb3IgdGhlIHBhcmFtcyB1c2VkIHRvIHN0b3JlIHRoZSBjYWNoZSdzIEFQSSB0b2tlbi5cbiAgICovXG4gIHJlYWRvbmx5IHRva2VuUGFyYW1OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIHRlYW0gbmFtZSB1c2VkIGluIHJlbW90ZSBjYWNoZSBjb21tYW5kc1xuICAgKi9cbiAgcmVhZG9ubHkgdGVhbU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUdXJib1JlcG9PcHRpb25zIHtcbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgdHVyYm9yZXBvIHRvIHVzZS5cbiAgICpcbiAgICogQGRlZmF1bHQ6IHNwZWNpZmllZCBpbiB2ZXJzaW9ucyBmaWxlXG4gICAqL1xuICByZWFkb25seSB0dXJib1ZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4dGVuZCBmcm9tIHRoZSByb290IHR1cmJvLmpzb24gdG8gY3JlYXRlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIGEgcGFja2FnZSB1c2luZyBQYWNrYWdlIENvbmZpZ3VyYXRpb25zLlxuICAgKlxuICAgKiBUaGUgb25seSB2YWxpZCB2YWx1ZSBmb3IgZXh0ZW5kcyBpcyBbXCIvL1wiXSB0byBpbmhlcml0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgcm9vdCB0dXJiby5qc29uLlxuICAgKiBJZiBleHRlbmRzIGlzIHVzZWQgaW4gdGhlIHJvb3QgdHVyYm8uanNvbiwgaXQgd2lsbCBiZSBpZ25vcmVkLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNleHRlbmRzXG4gICAqL1xuICByZWFkb25seSBleHRlbmRzPzogQXJyYXk8c3RyaW5nPjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdsb2JzIHRoYXQgeW91IHdhbnQgdG8gaW5jbHVkZSBpbiBhbGwgdGFzayBoYXNoZXMuIElmIGFueSBmaWxlIG1hdGNoaW5nIHRoZXNlIGdsb2JzIGNoYW5nZXMsIGFsbCB0YXNrcyB3aWxsIG1pc3MgY2FjaGUuIEdsb2JzIGFyZSByZWxhdGl2ZSB0byB0aGUgbG9jYXRpb24gb2YgdHVyYm8uanNvbi5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgYWxsIGZpbGVzIGluIHNvdXJjZSBjb250cm9sIGluIHRoZSBXb3Jrc3BhY2Ugcm9vdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGdsb2JhbCBoYXNoLlxuICAgKlxuICAgKiBHbG9icyBtdXN0IGJlIGluIHRoZSByZXBvc2l0b3J5J3Mgc291cmNlIGNvbnRyb2wgcm9vdC4gR2xvYnMgb3V0c2lkZSBvZiB0aGUgcmVwb3NpdG9yeSBhcmVuJ3Qgc3VwcG9ydGVkLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNnbG9iYWxkZXBlbmRlbmNpZXNcbiAgICovXG4gIHJlYWRvbmx5IGdsb2JhbERlcGVuZGVuY2llcz86IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB5b3Ugd2FudCB0byBpbXBhY3QgdGhlIGhhc2ggb2YgYWxsIHRhc2tzLiBBbnkgY2hhbmdlIHRvIHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aWxsIGNhdXNlIGFsbCB0YXNrcyB0byBtaXNzIGNhY2hlLlxuICAgKlxuICAgKiBGb3IgbW9yZSBvbiB3aWxkY2FyZCBhbmQgbmVnYXRpb24gc3ludGF4LCBzZWUgdGhlIGVudiBzZWN0aW9uLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNnbG9iYWxlbnZcbiAgICovXG4gIHJlYWRvbmx5IGdsb2JhbEVudj86IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB5b3Ugd2FudCB0byBtYWtlIGF2YWlsYWJsZSB0byB0YXNrcy5cbiAgICogVXNpbmcgdGhpcyBrZXkgb3B0cyBhbGwgdGFza3MgaW50byBTdHJpY3RcbiAgICogRW52aXJvbm1lbnQgVmFyaWFibGUgTW9kZS5cbiAgICpcbiAgICogQWRkaXRpb25hbGx5LCBUdXJib3JlcG8gaGFzIGEgYnVpbHQtaW4gc2V0IG9mIGdsb2JhbCBwYXNzdGhyb3VnaCB2YXJpYWJsZXNcbiAgICogZm9yIGNvbW1vbiBjYXNlcywgbGlrZSBvcGVyYXRpbmcgc3lzdGVtIGVudmlyb25tZW50IHZhcmlhYmxlcy4gVGhpc1xuICAgKiBpbmNsdWRlcyB2YXJpYWJsZXMgbGlrZSBIT01FLCBQQVRILCBBUFBEQVRBLCBTSEVMTCwgUFdELCBhbmQgbW9yZS4gVGhlIGZ1bGxcbiAgICogbGlzdCBjYW4gYmUgZm91bmQgaW4gdGhlIHNvdXJjZSBjb2RlLlxuICAgKlxuICAgKiBQYXNzdGhyb3VnaCB2YWx1ZXMgZG8gbm90IGNvbnRyaWJ1dGUgdG8gaGFzaGVzIGZvciBjYWNoaW5nXG4gICAqXG4gICAqIElmIHlvdSB3YW50IGNoYW5nZXMgaW4gdGhlc2UgdmFyaWFibGVzIHRvIGNhdXNlIGNhY2hlIG1pc3NlcywgeW91IHdpbGwgbmVlZFxuICAgKiB0byBpbmNsdWRlIHRoZW0gaW4gZW52IG9yIGdsb2JhbEVudi5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZ2xvYmFscGFzc3Rocm91Z2hlbnZcbiAgICovXG4gIHJlYWRvbmx5IGdsb2JhbFBhc3NUaHJvdWdoRW52PzogQXJyYXk8c3RyaW5nPjtcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IFwic3RyZWFtXCJcbiAgICpcbiAgICogU2VsZWN0IGEgdGVybWluYWwgVUkgZm9yIHRoZSByZXBvc2l0b3J5LlxuICAgKlxuICAgKiBcInR1aVwiIGFsbG93cyBmb3Igdmlld2luZyBlYWNoIGxvZyBhdCBvbmNlIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZSB0YXNrLlxuICAgKiBcInN0cmVhbVwiIG91dHB1dHMgbG9ncyBhcyB0aGV5IGNvbWUgaW4gYW5kIGlzIG5vdCBpbnRlcmFjdGl2ZS5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jdWlcbiAgICovXG4gIHJlYWRvbmx5IHVpPzogXCJ0dWlcIiB8IFwic3RyZWFtXCI7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiBmYWxzZVxuICAgKlxuICAgKiBUdXJib3JlcG8gdXNlcyB5b3VyIHJlcG9zaXRvcnkncyBsb2NrZmlsZSB0byBkZXRlcm1pbmUgY2FjaGluZyBiZWhhdmlvcixcbiAgICogUGFja2FnZSBHcmFwaHMsIGFuZCBtb3JlLiBCZWNhdXNlIG9mIHRoaXMsIHdlIHVzZSB0aGUgcGFja2FnZU1hbmFnZXIgZmllbGRcbiAgICogdG8gaGVscCB5b3Ugc3RhYmlsaXplIHlvdXIgVHVyYm9yZXBvLlxuICAgKlxuICAgKiBUbyBoZWxwIHdpdGggaW5jcmVtZW50YWwgbWlncmF0aW9uIG9yIGluIHNpdHVhdGlvbnMgd2hlcmUgeW91IGNhbid0IHVzZVxuICAgKiB0aGUgcGFja2FnZU1hbmFnZXIgZmllbGQsIHlvdSBtYXkgdXNlXG4gICAqIC0tZGFuZ2Vyb3VzbHktZGlzYWJsZS1wYWNrYWdlLW1hbmFnZXItY2hlY2sgdG8gb3B0IG91dCBvZiB0aGlzIGNoZWNrIGFuZFxuICAgKiBhc3N1bWUgdGhlIHJpc2tzIG9mIHVuc3RhYmxlIGxvY2tmaWxlcyBwcm9kdWNpbmcgdW5wcmVkaWN0YWJsZSBiZWhhdmlvci5cbiAgICogV2hlbiBkaXNhYmxlZCwgVHVyYm9yZXBvIHdpbGwgYXR0ZW1wdCBhIGJlc3QtZWZmb3J0IGRpc2NvdmVyeSBvZiB0aGVcbiAgICogaW50ZW5kZWQgcGFja2FnZSBtYW5hZ2VyIG1lYW50IGZvciB0aGUgcmVwb3NpdG9yeS5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZGFuZ2Vyb3VzbHlkaXNhYmxlcGFja2FnZW1hbmFnZXJjaGVja1xuICAgKi9cbiAgcmVhZG9ubHkgZGFuZ2Vyb3VzbHlEaXNhYmxlUGFja2FnZU1hbmFnZXJDaGVjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiBcIi50dXJiby9jYWNoZVwiXG4gICAqXG4gICAqIFNwZWNpZnkgdGhlIGZpbGVzeXN0ZW0gY2FjaGUgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNjYWNoZWRpclxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVEaXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiB0cnVlXG4gICAqXG4gICAqIFR1cmJvcmVwbyBydW5zIGEgYmFja2dyb3VuZCBwcm9jZXNzIHRvIHByZS1jYWxjdWxhdGUgc29tZSBleHBlbnNpdmVcbiAgICogb3BlcmF0aW9ucy4gVGhpcyBzdGFuZGFsb25lIHByb2Nlc3MgKGRhZW1vbikgaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sXG4gICAqIGFuZCBub3QgcmVxdWlyZWQgZm9yIHByb3BlciBmdW5jdGlvbmluZyBvZiB0dXJiby5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZGFlbW9uXG4gICAqL1xuICByZWFkb25seSBkYWVtb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdDogXCJzdHJpY3RcIlxuICAgKlxuICAgKiBUdXJib3JlcG8ncyBFbnZpcm9ubWVudCBNb2RlcyBhbGxvdyB5b3UgdG8gY29udHJvbCB3aGljaCBlbnZpcm9ubWVudFxuICAgKiB2YXJpYWJsZXMgYXJlIGF2YWlsYWJsZSB0byBhIHRhc2sgYXQgcnVudGltZTpcbiAgICpcbiAgICpcInN0cmljdFwiOiBGaWx0ZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIG9ubHkgdGhvc2UgdGhhdCBhcmUgc3BlY2lmaWVkXG4gICAqIGluIHRoZSBlbnYgYW5kIGdsb2JhbEVudiBrZXlzIGluIHR1cmJvLmpzb24uXG4gICAqXG4gICAqIFwibG9vc2VcIjogQWxsb3cgYWxsIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIHByb2Nlc3MgdG8gYmUgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNlbnZtb2RlXG4gICAqL1xuICByZWFkb25seSBlbnZNb2RlPzogc3RyaW5nO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKlxuICAgKiBDYWNoZSBTZXR0aW5nc1xuICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogQ2FjaGUgc2V0dGluZ3MsIGlmIHVzaW5nIHJlbW90ZSBjYWNoZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlbW90ZUNhY2hlT3B0aW9ucz86IFJlbW90ZUNhY2hlT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIFR1cmJvUmVwbyBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBTdGF0aWMgbWV0aG9kIHRvIGRpc2NvdmVydCB0dXJibyBpbiBhIHByb2plY3QuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHByb2plY3Q6IFByb2plY3QpOiBUdXJib1JlcG8gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGlzRGVmaW5lZCA9IChjOiBDb21wb25lbnQpOiBjIGlzIFR1cmJvUmVwbyA9PiBjIGluc3RhbmNlb2YgVHVyYm9SZXBvO1xuICAgIHJldHVybiBwcm9qZWN0LmNvbXBvbmVudHMuZmluZChpc0RlZmluZWQpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBidWlsZFdvcmtmbG93T3B0aW9ucyA9IChcbiAgICByZW1vdGVDYWNoZU9wdGlvbnM6IFJlbW90ZUNhY2hlT3B0aW9ucyxcbiAgKTogUGFydGlhbDxCdWlsZFdvcmtmbG93T3B0aW9ucz4gPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgaWRUb2tlbjogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgIH0sXG4gICAgICBwcmVCdWlsZFN0ZXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIkFXUyBDcmVkcyBmb3IgU1NNXCIsXG4gICAgICAgICAgdXNlczogXCJhd3MtYWN0aW9ucy9jb25maWd1cmUtYXdzLWNyZWRlbnRpYWxzQHY0XCIsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgW1wicm9sZS10by1hc3N1bWVcIl06IHJlbW90ZUNhY2hlT3B0aW9ucy5vaWRjUm9sZSxcbiAgICAgICAgICAgIFtcImF3cy1yZWdpb25cIl06IFwidXMtZWFzdC0xXCIsXG4gICAgICAgICAgICBbXCJyb2xlLWR1cmF0aW9uLXNlY29uZHNcIl06IFwiOTAwXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogVmVyc2lvbiBvZiB0dXJib3JlcG8gdG8gdXNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHR1cmJvVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFeHRlbmQgZnJvbSB0aGUgcm9vdCB0dXJiby5qc29uIHRvIGNyZWF0ZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciBhIHBhY2thZ2UgdXNpbmcgUGFja2FnZSBDb25maWd1cmF0aW9ucy5cbiAgICpcbiAgICogVGhlIG9ubHkgdmFsaWQgdmFsdWUgZm9yIGV4dGVuZHMgaXMgW1wiLy9cIl0gdG8gaW5oZXJpdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIHJvb3QgdHVyYm8uanNvbi5cbiAgICogSWYgZXh0ZW5kcyBpcyB1c2VkIGluIHRoZSByb290IHR1cmJvLmpzb24sIGl0IHdpbGwgYmUgaWdub3JlZC5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZXh0ZW5kc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV4dGVuZHM6IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBnbG9icyB0aGF0IHlvdSB3YW50IHRvIGluY2x1ZGUgaW4gYWxsIHRhc2sgaGFzaGVzLiBJZiBhbnkgZmlsZSBtYXRjaGluZyB0aGVzZSBnbG9icyBjaGFuZ2VzLCBhbGwgdGFza3Mgd2lsbCBtaXNzIGNhY2hlLiBHbG9icyBhcmUgcmVsYXRpdmUgdG8gdGhlIGxvY2F0aW9uIG9mIHR1cmJvLmpzb24uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGFsbCBmaWxlcyBpbiBzb3VyY2UgY29udHJvbCBpbiB0aGUgV29ya3NwYWNlIHJvb3QgYXJlIGluY2x1ZGVkIGluIHRoZSBnbG9iYWwgaGFzaC5cbiAgICpcbiAgICogR2xvYnMgbXVzdCBiZSBpbiB0aGUgcmVwb3NpdG9yeSdzIHNvdXJjZSBjb250cm9sIHJvb3QuIEdsb2JzIG91dHNpZGUgb2YgdGhlIHJlcG9zaXRvcnkgYXJlbid0IHN1cHBvcnRlZC5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZ2xvYmFsZGVwZW5kZW5jaWVzXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2xvYmFsRGVwZW5kZW5jaWVzOiBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgeW91IHdhbnQgdG8gaW1wYWN0IHRoZSBoYXNoIG9mIGFsbCB0YXNrcy4gQW55IGNoYW5nZSB0byB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2lsbCBjYXVzZSBhbGwgdGFza3MgdG8gbWlzcyBjYWNoZS5cbiAgICpcbiAgICogRm9yIG1vcmUgb24gd2lsZGNhcmQgYW5kIG5lZ2F0aW9uIHN5bnRheCwgc2VlIHRoZSBlbnYgc2VjdGlvbi5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZ2xvYmFsZW52XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2xvYmFsRW52OiBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgeW91IHdhbnQgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGFza3MuXG4gICAqIFVzaW5nIHRoaXMga2V5IG9wdHMgYWxsIHRhc2tzIGludG8gU3RyaWN0XG4gICAqIEVudmlyb25tZW50IFZhcmlhYmxlIE1vZGUuXG4gICAqXG4gICAqIEFkZGl0aW9uYWxseSwgVHVyYm9yZXBvIGhhcyBhIGJ1aWx0LWluIHNldCBvZiBnbG9iYWwgcGFzc3Rocm91Z2ggdmFyaWFibGVzXG4gICAqIGZvciBjb21tb24gY2FzZXMsIGxpa2Ugb3BlcmF0aW5nIHN5c3RlbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIFRoaXNcbiAgICogaW5jbHVkZXMgdmFyaWFibGVzIGxpa2UgSE9NRSwgUEFUSCwgQVBQREFUQSwgU0hFTEwsIFBXRCwgYW5kIG1vcmUuIFRoZSBmdWxsXG4gICAqIGxpc3QgY2FuIGJlIGZvdW5kIGluIHRoZSBzb3VyY2UgY29kZS5cbiAgICpcbiAgICogUGFzc3Rocm91Z2ggdmFsdWVzIGRvIG5vdCBjb250cmlidXRlIHRvIGhhc2hlcyBmb3IgY2FjaGluZ1xuICAgKlxuICAgKiBJZiB5b3Ugd2FudCBjaGFuZ2VzIGluIHRoZXNlIHZhcmlhYmxlcyB0byBjYXVzZSBjYWNoZSBtaXNzZXMsIHlvdSB3aWxsIG5lZWRcbiAgICogdG8gaW5jbHVkZSB0aGVtIGluIGVudiBvciBnbG9iYWxFbnYuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2dsb2JhbHBhc3N0aHJvdWdoZW52XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2xvYmFsUGFzc1Rocm91Z2hFbnY6IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiBcInN0cmVhbVwiXG4gICAqXG4gICAqIFNlbGVjdCBhIHRlcm1pbmFsIFVJIGZvciB0aGUgcmVwb3NpdG9yeS5cbiAgICpcbiAgICogXCJ0dWlcIiBhbGxvd3MgZm9yIHZpZXdpbmcgZWFjaCBsb2cgYXQgb25jZSBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgdGFzay5cbiAgICogXCJzdHJlYW1cIiBvdXRwdXRzIGxvZ3MgYXMgdGhleSBjb21lIGluIGFuZCBpcyBub3QgaW50ZXJhY3RpdmUuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI3VpXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdWk6IFwidHVpXCIgfCBcInN0cmVhbVwiO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdDogZmFsc2VcbiAgICpcbiAgICogVHVyYm9yZXBvIHVzZXMgeW91ciByZXBvc2l0b3J5J3MgbG9ja2ZpbGUgdG8gZGV0ZXJtaW5lIGNhY2hpbmcgYmVoYXZpb3IsXG4gICAqIFBhY2thZ2UgR3JhcGhzLCBhbmQgbW9yZS4gQmVjYXVzZSBvZiB0aGlzLCB3ZSB1c2UgdGhlIHBhY2thZ2VNYW5hZ2VyIGZpZWxkXG4gICAqIHRvIGhlbHAgeW91IHN0YWJpbGl6ZSB5b3VyIFR1cmJvcmVwby5cbiAgICpcbiAgICogVG8gaGVscCB3aXRoIGluY3JlbWVudGFsIG1pZ3JhdGlvbiBvciBpbiBzaXR1YXRpb25zIHdoZXJlIHlvdSBjYW4ndCB1c2VcbiAgICogdGhlIHBhY2thZ2VNYW5hZ2VyIGZpZWxkLCB5b3UgbWF5IHVzZVxuICAgKiAtLWRhbmdlcm91c2x5LWRpc2FibGUtcGFja2FnZS1tYW5hZ2VyLWNoZWNrIHRvIG9wdCBvdXQgb2YgdGhpcyBjaGVjayBhbmRcbiAgICogYXNzdW1lIHRoZSByaXNrcyBvZiB1bnN0YWJsZSBsb2NrZmlsZXMgcHJvZHVjaW5nIHVucHJlZGljdGFibGUgYmVoYXZpb3IuXG4gICAqIFdoZW4gZGlzYWJsZWQsIFR1cmJvcmVwbyB3aWxsIGF0dGVtcHQgYSBiZXN0LWVmZm9ydCBkaXNjb3Zlcnkgb2YgdGhlXG4gICAqIGludGVuZGVkIHBhY2thZ2UgbWFuYWdlciBtZWFudCBmb3IgdGhlIHJlcG9zaXRvcnkuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2Rhbmdlcm91c2x5ZGlzYWJsZXBhY2thZ2VtYW5hZ2VyY2hlY2tcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkYW5nZXJvdXNseURpc2FibGVQYWNrYWdlTWFuYWdlckNoZWNrOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdDogXCIudHVyYm8vY2FjaGVcIlxuICAgKlxuICAgKiBTcGVjaWZ5IHRoZSBmaWxlc3lzdGVtIGNhY2hlIGRpcmVjdG9yeS5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jY2FjaGVkaXJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjYWNoZURpcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdDogdHJ1ZVxuICAgKlxuICAgKiBUdXJib3JlcG8gcnVucyBhIGJhY2tncm91bmQgcHJvY2VzcyB0byBwcmUtY2FsY3VsYXRlIHNvbWUgZXhwZW5zaXZlXG4gICAqIG9wZXJhdGlvbnMuIFRoaXMgc3RhbmRhbG9uZSBwcm9jZXNzIChkYWVtb24pIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLFxuICAgKiBhbmQgbm90IHJlcXVpcmVkIGZvciBwcm9wZXIgZnVuY3Rpb25pbmcgb2YgdHVyYm8uXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2RhZW1vblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRhZW1vbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IFwic3RyaWN0XCJcbiAgICpcbiAgICogVHVyYm9yZXBvJ3MgRW52aXJvbm1lbnQgTW9kZXMgYWxsb3cgeW91IHRvIGNvbnRyb2wgd2hpY2ggZW52aXJvbm1lbnRcbiAgICogdmFyaWFibGVzIGFyZSBhdmFpbGFibGUgdG8gYSB0YXNrIGF0IHJ1bnRpbWU6XG4gICAqXG4gICAqXCJzdHJpY3RcIjogRmlsdGVyIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBvbmx5IHRob3NlIHRoYXQgYXJlIHNwZWNpZmllZFxuICAgKiBpbiB0aGUgZW52IGFuZCBnbG9iYWxFbnYga2V5cyBpbiB0dXJiby5qc29uLlxuICAgKlxuICAgKiBcImxvb3NlXCI6IEFsbG93IGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBwcm9jZXNzIHRvIGJlIGF2YWlsYWJsZS5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZW52bW9kZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVudk1vZGU6IHN0cmluZztcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICpcbiAgICogQ2FjaGUgU2V0dGluZ3NcbiAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIENhY2hlIHNldHRpbmdzLCBpZiB1c2luZyByZW1vdGUgY2FjaGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVtb3RlQ2FjaGVPcHRpb25zPzogUmVtb3RlQ2FjaGVPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBpcyB0aGlzIHRoZSByb290IHByb2plY3Q/XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXNSb290UHJvamVjdDogYm9vbGVhbjtcblxuICAvKipcbiAgICogTWFpbiB0dXJibzpidWlsZCB0YXNrXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVpbGRUYXNrOiBUdXJib1JlcG9UYXNrO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByZUNvbXBpbGVUYXNrPzogVHVyYm9SZXBvVGFzaztcbiAgLyoqXG4gICAqXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29tcGlsZVRhc2s/OiBUdXJib1JlcG9UYXNrO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBvc3RDb21waWxlVGFzaz86IFR1cmJvUmVwb1Rhc2s7XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGVzdFRhc2s/OiBUdXJib1JlcG9UYXNrO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhY2thZ2VUYXNrPzogVHVyYm9SZXBvVGFzaztcblxuICAvKipcbiAgICogU3ViLVRhc2tzIHRvIHJ1blxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhc2tzOiBBcnJheTxUdXJib1JlcG9UYXNrPiA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBwcm9qZWN0OiBOb2RlUHJvamVjdCxcbiAgICBvcHRpb25zOiBUdXJib1JlcG9PcHRpb25zID0ge30sXG4gICkge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgdGhpcy50dXJib1ZlcnNpb24gPSBvcHRpb25zLnR1cmJvVmVyc2lvbiA/PyBcIl4yLjAuMFwiO1xuICAgIHRoaXMuaXNSb290UHJvamVjdCA9IHByb2plY3QgPT09IHByb2plY3Qucm9vdDtcblxuICAgIC8qKlxuICAgICAqIEFkZCB0dXJib3JlcG8gcGFja2FnZSB0byByb290IHByb2plY3QuXG4gICAgICovXG4gICAgaWYgKHRoaXMuaXNSb290UHJvamVjdCkge1xuICAgICAgcHJvamVjdC5hZGREZXZEZXBzKGB0dXJib0Ake3RoaXMudHVyYm9WZXJzaW9ufWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElnbm9yZSB0aGUgd29ya2luZyBjYWNoZSBmb3IgdHVyYm8uXG4gICAgICovXG4gICAgcHJvamVjdC5naXRpZ25vcmUuYWRkUGF0dGVybnMoXCIvLnR1cmJvXCIpO1xuICAgIHByb2plY3QubnBtaWdub3JlPy5hZGRQYXR0ZXJucyhcIi8udHVyYm8vXCIpO1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqXG4gICAgICogU2V0IHNvbWUgZGVmYXVsdCBvcHRpb25zXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICB0aGlzLmV4dGVuZHMgPSBvcHRpb25zLmV4dGVuZHMgPz8gKHRoaXMuaXNSb290UHJvamVjdCA/IFtdIDogW1wiLy9cIl0pO1xuICAgIHRoaXMuZ2xvYmFsRGVwZW5kZW5jaWVzID0gb3B0aW9ucy5nbG9iYWxEZXBlbmRlbmNpZXMgPz8gW107XG4gICAgdGhpcy5nbG9iYWxFbnYgPSBbXCJCUkFOQ0hfTkFNRVwiLCAuLi4ob3B0aW9ucy5nbG9iYWxFbnYgPz8gW10pXTtcbiAgICB0aGlzLmdsb2JhbFBhc3NUaHJvdWdoRW52ID0gb3B0aW9ucy5nbG9iYWxQYXNzVGhyb3VnaEVudiA/PyBbXTtcbiAgICB0aGlzLnVpID0gb3B0aW9ucy51aSA/PyBcInN0cmVhbVwiO1xuICAgIHRoaXMuZGFuZ2Vyb3VzbHlEaXNhYmxlUGFja2FnZU1hbmFnZXJDaGVjayA9XG4gICAgICBvcHRpb25zLmRhbmdlcm91c2x5RGlzYWJsZVBhY2thZ2VNYW5hZ2VyQ2hlY2sgPz8gZmFsc2U7XG4gICAgdGhpcy5jYWNoZURpciA9IG9wdGlvbnMuY2FjaGVEaXIgPz8gXCIudHVyYm8vY2FjaGVcIjtcbiAgICB0aGlzLmRhZW1vbiA9IG9wdGlvbnMuZGFlbW9uID8/IHRydWU7XG4gICAgdGhpcy5lbnZNb2RlID0gb3B0aW9ucy5lbnZNb2RlID8/IFwic3RyaWN0XCI7XG4gICAgdGhpcy5yZW1vdGVDYWNoZU9wdGlvbnMgPSBvcHRpb25zLnJlbW90ZUNhY2hlT3B0aW9ucztcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIFR1cmJvIEJ1aWxkIFRhc2tcbiAgICAgKlxuICAgICAqIEFsbCB0dXJibyBjb25maWdzIGNvbnRhaW4gYSB0dXJibyBidWlsZCB0YXNrLlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR1cmJvIGVudHJ5IHBvaW50IGRlZmluaXRpb24gZm9yIHRoZSB0dXJibzpidWlsZCB0YXNrLiBUaGlzIGV4aXN0c1xuICAgICAqIGluIGVhY2ggcHJvamVjdCBhbmQgaXMgd3JpdHRlbiB0b3QgaGUgdHVyYm8uanNvbiBmaWxlLiBUaGlzIHRhc2sgaXMgbm90XG4gICAgICogYSBwcm9qZW4gdGFzayBvciBhIE5vZGUgdGFzay5cbiAgICAgKi9cbiAgICB0aGlzLmJ1aWxkVGFzayA9IG5ldyBUdXJib1JlcG9UYXNrKHRoaXMucHJvamVjdCwge1xuICAgICAgbmFtZTogUk9PVF9UVVJCT19UQVNLX05BTUUsXG4gICAgICBkZXBlbmRzT246IHRoaXMuaXNSb290UHJvamVjdCA/IFtgXiR7Uk9PVF9UVVJCT19UQVNLX05BTUV9YF0gOiBbXSxcbiAgICB9KTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIFR1cmJvIEJ1aWxkIEFsbCBUYXNrXG4gICAgICpcbiAgICAgKiBUaGUgUHJvamVuIGVudHJ5IHBvaW50LiBUaGlzIG9ubHkgZXhpc3RzIGluIHRoZSByb290IGFuZCBpcyBhIHByb2plblxuICAgICAqIHRhc2sgdGhhdCBjYW4gYmUgcnVuIHVzaW5nIHBucG0uXG4gICAgICpcbiAgICAgKiAtIFR1cm5zIG9mZiB0ZWxlbWV0cnlcbiAgICAgKiAtIFJ1bnMgcm9vdCB0dXJibyB0YXNrIHRvIGJ1aWxkIGFsbCBzdWItcHJvamVjdHMuXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBpZiAodGhpcy5pc1Jvb3RQcm9qZWN0KSB7XG4gICAgICAvKipcbiAgICAgICAqIENyZWF0ZSBhbmQgY29uZmlndXJlIHRoZSBidWlsZCBhbGwgdGFzay5cbiAgICAgICAqL1xuICAgICAgY29uc3QgYnVpbGRBbGwgPSB0aGlzLnByb2plY3QudGFza3MuYWRkVGFzayhST09UX0NJX1RBU0tfTkFNRSwge1xuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICBcIlJvb3QgYnVpbGQgZm9sbG93ZWQgYnkgc3ViLXByb2plY3QgYnVpbGRzLiBNaW1pY3MgdGhlIENJIGJ1aWxkIHByb2Nlc3MgaW4gb25lIHN0ZXAuXCIsXG4gICAgICB9KTtcbiAgICAgIGJ1aWxkQWxsLmV4ZWMoXCJ0dXJibyB0ZWxlbWV0cnkgZGlzYWJsZVwiKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBObyByZW1vdGUgY2FjaGUgaW4gdXNlLCBzbyBydW4gdGhlIHJvb3QgdHVyYm8gdGFzayB0byBidWlsZCBhbGxcbiAgICAgICAqIHN1Yi1wcm9qZWN0cyBsb2NhbGx5LlxuICAgICAgICovXG4gICAgICBpZiAoIXRoaXMucmVtb3RlQ2FjaGVPcHRpb25zKSB7XG4gICAgICAgIGJ1aWxkQWxsLmV4ZWMoXG4gICAgICAgICAgYHR1cmJvICR7Uk9PVF9UVVJCT19UQVNLX05BTUV9IC0tc3VtbWFyaXplIC0tY29uY3VycmVuY3k9MTBgLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlbW90ZSBjYWNoZSBpbiB1c2UsIHNvIHJ1biB0aGUgcm9vdCB0dXJibyB0YXNrIHRvIGJ1aWxkIGFsbFxuICAgICAgICAgKiBzdWItcHJvamVjdHMgdXNpbmcgdGhlIHJlbW90ZSBjYWNoZS5cbiAgICAgICAgICovXG4gICAgICAgIGJ1aWxkQWxsLmV4ZWMoXG4gICAgICAgICAgYHR1cmJvIHR1cmJvOmJ1aWxkIC0tc3VtbWFyaXplIC0tY29uY3VycmVuY3k9MTAgLS1jYWNoZT1yZW1vdGU6cncgLS1hcGk9JFRVUkJPX0VORFBPSU5UIC0tdG9rZW49JFRVUkJPX1RPS0VOIC0tdGVhbT0ke3RoaXMucmVtb3RlQ2FjaGVPcHRpb25zLnRlYW1OYW1lfWAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uZGl0aW9uOiAnWyAhIC1uIFwiJENJXCIgXScsXG4gICAgICAgICAgICBlbnY6IHtcbiAgICAgICAgICAgICAgVFVSQk9fRU5EUE9JTlQ6IGAkKGF3cyBzc20gZ2V0LXBhcmFtZXRlciAtLW5hbWUgJHt0aGlzLnJlbW90ZUNhY2hlT3B0aW9ucy5lbmRwb2ludFBhcmFtTmFtZX0gLS1xdWVyeSBQYXJhbWV0ZXIuVmFsdWUgLS1vdXRwdXQgdGV4dCAtLXByb2ZpbGUgJHt0aGlzLnJlbW90ZUNhY2hlT3B0aW9ucy5wcm9maWxlTmFtZX0pYCxcbiAgICAgICAgICAgICAgVFVSQk9fVE9LRU46IGAkKGF3cyBzc20gZ2V0LXBhcmFtZXRlciAtLW5hbWUgJHt0aGlzLnJlbW90ZUNhY2hlT3B0aW9ucy50b2tlblBhcmFtTmFtZX0gLS1xdWVyeSBQYXJhbWV0ZXIuVmFsdWUgLS1vdXRwdXQgdGV4dCAtLXByb2ZpbGUgJHt0aGlzLnJlbW90ZUNhY2hlT3B0aW9ucy5wcm9maWxlTmFtZX0pYCxcbiAgICAgICAgICAgICAgQlJBTkNIX05BTUU6IFwiJChnaXQgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEKVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICAvLyBydW5uaW5nIGluIENJLCBXZSdsbCBkZXBlbmQgb24gT0lEQyBhdXRoLlxuICAgICAgICBidWlsZEFsbC5leGVjKFxuICAgICAgICAgIGB0dXJibyB0dXJibzpidWlsZCAtLXN1bW1hcml6ZSAtLWNvbmN1cnJlbmN5PTEwIC0tY2FjaGU9cmVtb3RlOnJ3IC0tYXBpPSRUVVJCT19FTkRQT0lOVCAtLXRva2VuPSRUVVJCT19UT0tFTiAtLXRlYW09JHt0aGlzLnJlbW90ZUNhY2hlT3B0aW9ucy50ZWFtTmFtZX1gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbmRpdGlvbjogJ1sgLW4gXCIkQ0lcIiBdJyxcbiAgICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgICBUVVJCT19FTkRQT0lOVDogYCQoYXdzIHNzbSBnZXQtcGFyYW1ldGVyIC0tbmFtZSAke3RoaXMucmVtb3RlQ2FjaGVPcHRpb25zLmVuZHBvaW50UGFyYW1OYW1lfSAtLXF1ZXJ5IFBhcmFtZXRlci5WYWx1ZSAtLW91dHB1dCB0ZXh0KWAsXG4gICAgICAgICAgICAgIFRVUkJPX1RPS0VOOiBgJChhd3Mgc3NtIGdldC1wYXJhbWV0ZXIgLS1uYW1lICR7dGhpcy5yZW1vdGVDYWNoZU9wdGlvbnMudG9rZW5QYXJhbU5hbWV9IC0tcXVlcnkgUGFyYW1ldGVyLlZhbHVlIC0tb3V0cHV0IHRleHQpYCxcbiAgICAgICAgICAgICAgQlJBTkNIX05BTUU6IFwiJChnaXQgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEKVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNVQi1QUk9KRUNUXG4gICAgICpcbiAgICAgKiBDcmVhdGVzIHRhc2tzIGZvciB0aGUgdHlwaWNhbCBsaWZlY3ljbGUgZm9yIGFsbCBwcm9qZWN0IHByb2plY3RzLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5pc1Jvb3RQcm9qZWN0KSB7XG4gICAgICAvKipcbiAgICAgICAqIEFsbCBnZW5lcmF0ZWQgZmlsZXMgaW4gdGhlIHByb2plY3QuIEluY2x1ZGUgdGhlc2UgYXMgaW5wdXRzIHRvIHRoZVxuICAgICAgICogY29tcGlsZSByZWxhdGVkIHRhc2tzLlxuICAgICAgICovXG4gICAgICBjb25zdCBnZW5lcmF0ZWRGaWxlcyA9IHRoaXMucHJvamVjdC5jb21wb25lbnRzXG4gICAgICAgIC5maWx0ZXIoKGMpOiBjIGlzIEZpbGVCYXNlID0+IGMgaW5zdGFuY2VvZiBGaWxlQmFzZSlcbiAgICAgICAgLm1hcCgoYykgPT4gYy5wYXRoKTtcblxuICAgICAgdGhpcy5wcmVDb21waWxlVGFzayA9IG5ldyBUdXJib1JlcG9UYXNrKHByb2plY3QsIHtcbiAgICAgICAgbmFtZTogXCJwcmUtY29tcGlsZVwiLFxuICAgICAgICBpbnB1dHM6IFtcInNyYy8qKlwiLCAuLi5nZW5lcmF0ZWRGaWxlc10sXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29tcGlsZVRhc2sgPSBuZXcgVHVyYm9SZXBvVGFzayhwcm9qZWN0LCB7XG4gICAgICAgIG5hbWU6IFwiY29tcGlsZVwiLFxuICAgICAgICBpbnB1dHM6IFtcInNyYy8qKlwiLCAuLi5nZW5lcmF0ZWRGaWxlc10sXG4gICAgICB9KTtcbiAgICAgIHRoaXMucG9zdENvbXBpbGVUYXNrID0gbmV3IFR1cmJvUmVwb1Rhc2socHJvamVjdCwge1xuICAgICAgICBuYW1lOiBcInBvc3QtY29tcGlsZVwiLFxuICAgICAgICBpbnB1dHM6IFtcInNyYy8qKlwiLCAuLi5nZW5lcmF0ZWRGaWxlc10sXG4gICAgICB9KTtcbiAgICAgIHRoaXMudGVzdFRhc2sgPSBuZXcgVHVyYm9SZXBvVGFzayhwcm9qZWN0LCB7IG5hbWU6IFwidGVzdFwiIH0pO1xuICAgICAgdGhpcy5wYWNrYWdlVGFzayA9IG5ldyBUdXJib1JlcG9UYXNrKHByb2plY3QsIHtcbiAgICAgICAgbmFtZTogXCJwYWNrYWdlXCIsXG4gICAgICAgIGlucHV0czogW1wiLm5wbWlnbm9yZVwiXSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy50YXNrcy5wdXNoKFxuICAgICAgICB0aGlzLnByZUNvbXBpbGVUYXNrLFxuICAgICAgICB0aGlzLmNvbXBpbGVUYXNrLFxuICAgICAgICB0aGlzLnBvc3RDb21waWxlVGFzayxcbiAgICAgICAgdGhpcy50ZXN0VGFzayxcbiAgICAgICAgdGhpcy5wYWNrYWdlVGFzayxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJlU3ludGhlc2l6ZSgpOiB2b2lkIHtcbiAgICAvKipcbiAgICAgKiBBZGQgYW55IGxvY2FsIHdvcmtzcGFjZSBzcGVjaWZpYyBkZXBzIHRvIGRlcGVuZHNPbiBzbyB0aGF0IHdlIGtub3dcbiAgICAgKiBjb21waWxlIGhhcyBmaW5pc2hlZCBiZWZvcmUgYXR0ZW1wdGluZyB0byB1c2UgYW55IGRpc3RyaWJ1dGlvbiBhcnRpZmFjdHMuXG4gICAgICpcbiAgICAgKiBEbyB0aGlzIGluIHByZXN5bnRoIHNvIHRoYXQgd2UgY2FuIGJlIHN1cmUgYWxsIHByb2plY3QgZGVwZW5kZW5jaWVzIGhhdmVcbiAgICAgKiBiZWVuIGRlZmluZWQgZmlyc3QuXG4gICAgICovXG4gICAgbGV0IG5leHREZXBlbmRzT24gPSB0aGlzLnByb2plY3QuZGVwcy5hbGxcbiAgICAgIC5maWx0ZXIoKGQpID0+IGQudmVyc2lvbiA9PT0gXCJ3b3Jrc3BhY2U6KlwiKVxuICAgICAgLm1hcCgoZCkgPT4gW2QubmFtZSwgUk9PVF9UVVJCT19UQVNLX05BTUVdLmpvaW4oXCIjXCIpKTtcblxuICAgIC8qKlxuICAgICAqIExvb3Agb3ZlciBhbGwgcHJvamVuIHRhc2tzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHR1cmJvIHRhc2tcbiAgICAgKiBkZWZpbml0aW9ucy4gQ2hhaW4gdGhlbSB0b2dldGhlciB1c2luZyBkZXBlbmRzT24sIGFsb25nIHdpdGggYW55IG91dHNpZGVcbiAgICAgKiBwYWNrYWdlIGRlcGVuZGVuY2llcy5cbiAgICAgKi9cbiAgICBpZiAoIXRoaXMuaXNSb290UHJvamVjdCkge1xuICAgICAgKFxuICAgICAgICBbXG4gICAgICAgICAgW3RoaXMucHJvamVjdC5wcmVDb21waWxlVGFzaywgdGhpcy5wcmVDb21waWxlVGFza10sXG4gICAgICAgICAgW3RoaXMucHJvamVjdC5jb21waWxlVGFzaywgdGhpcy5jb21waWxlVGFza10sXG4gICAgICAgICAgW3RoaXMucHJvamVjdC5wb3N0Q29tcGlsZVRhc2ssIHRoaXMucG9zdENvbXBpbGVUYXNrXSxcbiAgICAgICAgICBbdGhpcy5wcm9qZWN0LnRlc3RUYXNrLCB0aGlzLnRlc3RUYXNrXSxcbiAgICAgICAgICBbdGhpcy5wcm9qZWN0LnBhY2thZ2VUYXNrLCB0aGlzLnBhY2thZ2VUYXNrXSxcbiAgICAgICAgXSBhcyBBcnJheTxbVGFzaywgVHVyYm9SZXBvVGFza10+XG4gICAgICApLmZvckVhY2goKFtwalRhc2ssIHR1cmJvVGFza10pID0+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHN0ZXBzIGV4aXN0IGNoYWluIHVzaW5nIGRlcGVuZHNPblxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHBqVGFzayAmJiB0dXJib1Rhc2sgJiYgcGpUYXNrLnN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAobmV4dERlcGVuZHNPbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0dXJib1Rhc2suZGVwZW5kc09uLnB1c2goLi4ubmV4dERlcGVuZHNPbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHREZXBlbmRzT24gPSBbdHVyYm9UYXNrLm5hbWVdO1xuXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogT3RoZXJ3aXNlLCBpZiBhIHRhc2sgZG9lc24ndCBkbyBhbnl0aGluZywgZGVhY3RpdmF0ZSBpdC5cbiAgICAgICAgICAgKi9cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0dXJib1Rhc2suaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qKlxuICAgICAgICogTWFpbiBidWlsZCBlbnRyeSBwb2ludCBkZXBlbmRzIG9uIHdoYXRldmVyIHdhcyBsYXN0LlxuICAgICAgICovXG4gICAgICB0aGlzLmJ1aWxkVGFzay5kZXBlbmRzT24ucHVzaCguLi5uZXh0RGVwZW5kc09uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBmb3IgdGhlIHR1cmJvIGNvbmZpZyBmaWxlLlxuICAgICAqL1xuICAgIGNvbnN0IGZpbGVOYW1lOiBzdHJpbmcgPSBcInR1cmJvLmpzb25cIjtcblxuICAgIC8qKlxuICAgICAqIEVuc3VyZSB0aGF0IHR1cmJvIGNvbmZpZyBkb2Vzbid0IGVuZCB1cCBpbiBhbnkgcGFja2FnZSBkaXN0cmlidXRpb25zLlxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdC5hZGRQYWNrYWdlSWdub3JlKGZpbGVOYW1lKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb250ZW50IG9mIHRoaXMgWUFNTCBmaWxlIHdpbGwgYmUgcmVzb2x2ZWQgYXQgc3ludGggdGltZS4gQnkgdGhlbixcbiAgICAgKiBhbnkgc3ViLXByb2plY3RzIHdpbGwgYmUgZGVmaW5lZCBhbmQgdGhpcyB3aWxsIGJlIGEgY29tcGxldGUgbGlzdC5cbiAgICAgKi9cbiAgICBuZXcgSnNvbkZpbGUodGhpcy5wcm9qZWN0LCBmaWxlTmFtZSwge1xuICAgICAgb2JqOiB7XG4gICAgICAgIGV4dGVuZHM6IHRoaXMuZXh0ZW5kcy5sZW5ndGggPyB0aGlzLmV4dGVuZHMgOiB1bmRlZmluZWQsXG4gICAgICAgIGdsb2JhbERlcGVuZGVuY2llczpcbiAgICAgICAgICB0aGlzLmlzUm9vdFByb2plY3QgJiYgdGhpcy5nbG9iYWxEZXBlbmRlbmNpZXMubGVuZ3RoXG4gICAgICAgICAgICA/IHRoaXMuZ2xvYmFsRGVwZW5kZW5jaWVzXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgZ2xvYmFsRW52OlxuICAgICAgICAgIHRoaXMuaXNSb290UHJvamVjdCAmJiB0aGlzLmdsb2JhbEVudi5sZW5ndGhcbiAgICAgICAgICAgID8gdGhpcy5nbG9iYWxFbnZcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBnbG9iYWxQYXNzVGhyb3VnaEVudjpcbiAgICAgICAgICB0aGlzLmlzUm9vdFByb2plY3QgJiYgdGhpcy5nbG9iYWxQYXNzVGhyb3VnaEVudi5sZW5ndGhcbiAgICAgICAgICAgID8gdGhpcy5nbG9iYWxQYXNzVGhyb3VnaEVudlxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIHVpOiB0aGlzLmlzUm9vdFByb2plY3QgPyB0aGlzLnVpIDogdW5kZWZpbmVkLFxuICAgICAgICBkYW5nZXJvdXNseURpc2FibGVQYWNrYWdlTWFuYWdlckNoZWNrOiB0aGlzLmlzUm9vdFByb2plY3RcbiAgICAgICAgICA/IHRoaXMuZGFuZ2Vyb3VzbHlEaXNhYmxlUGFja2FnZU1hbmFnZXJDaGVja1xuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBjYWNoZURpcjogdGhpcy5pc1Jvb3RQcm9qZWN0ID8gdGhpcy5jYWNoZURpciA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGFlbW9uOiB0aGlzLmlzUm9vdFByb2plY3QgPyB0aGlzLmRhZW1vbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgZW52TW9kZTogdGhpcy5pc1Jvb3RQcm9qZWN0ID8gdGhpcy5lbnZNb2RlIDogdW5kZWZpbmVkLFxuICAgICAgICAvKipcbiAgICAgICAgICogQWxsIHRhc2tzXG4gICAgICAgICAqL1xuICAgICAgICB0YXNrczogdGhpcy50YXNrc1xuICAgICAgICAgIC5maWx0ZXIoKHRhc2spID0+IHRhc2suaXNBY3RpdmUpXG4gICAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAgIChhY2MsIHRhc2spID0+IHtcbiAgICAgICAgICAgICAgYWNjW3Rhc2submFtZV0gPSB7XG4gICAgICAgICAgICAgICAgLi4udGFzay50YXNrQ29uZmlnKCksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBbdGhpcy5idWlsZFRhc2submFtZV06IHsgLi4udGhpcy5idWlsZFRhc2sudGFza0NvbmZpZygpIH0sXG4gICAgICAgICAgICB9IGFzIFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBzdXBlci5wcmVTeW50aGVzaXplKCk7XG4gIH1cbn1cbiJdfQ==
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVyYm8tcmVwby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90dXJiby90dXJiby1yZXBvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9DQUEwRTtBQUUxRSx1RUFBa0U7QUFFbEUsdURBQWtEO0FBRWxEOzs7O2dGQUlnRjtBQUVuRSxRQUFBLG9CQUFvQixHQUFHLGFBQWEsQ0FBQztBQUNyQyxRQUFBLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztBQTBLN0MsTUFBYSxTQUFVLFNBQVEsZUFBUztJQUN0Qzs7T0FFRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBZ0I7UUFDL0IsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFZLEVBQWtCLEVBQUUsQ0FBQyxDQUFDLFlBQVksU0FBUyxDQUFDO1FBQzNFLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQStNRCxZQUNrQixPQUFvQixFQUNwQyxVQUE0QixFQUFFO1FBRTlCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUhDLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFYdEM7O1dBRUc7UUFDYSxVQUFLLEdBQXlCLEVBQUUsQ0FBQztRQWEvQyxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDO1FBQ3JELElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFFOUM7O1dBRUc7UUFDSCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVEOztXQUVHO1FBQ0gsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsT0FBTyxDQUFDLFNBQVMsRUFBRSxXQUFXLENB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QUMsS0FBSztTQUM3QjtRQUNELGFBQWEsRUFBRTtZQUNiO2dCQUNFLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLElBQUksRUFBRSwwQ0FBMEM7Z0JBQ2hELElBQUksRUFBRTtvQkFDSixDQUFDLGdCQUFnQixDQUFDLEVBQUUsa0JBQWtCLENBQUMsUUFBUTtvQkFDL0MsQ0FBQyxZQUFZLENBQUMsRUFBRSxXQUFXO29CQUMzQixDQUFDLHVCQUF1QixDQUFDLEVBQUUsS0FBSztpQkFDakM7YUFDRjtTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUMsQUFwQmlDLENBb0JoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRmlsZUJhc2UsIEpzb25GaWxlLCBQcm9qZWN0LCBUYXNrIH0gZnJvbSBcInByb2plbi9saWJcIjtcbmltcG9ydCB7IEJ1aWxkV29ya2Zsb3dPcHRpb25zIH0gZnJvbSBcInByb2plbi9saWIvYnVpbGRcIjtcbmltcG9ydCB7IEpvYlBlcm1pc3Npb24gfSBmcm9tIFwicHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsXCI7XG5pbXBvcnQgeyBOb2RlUHJvamVjdCB9IGZyb20gXCJwcm9qZW4vbGliL2phdmFzY3JpcHRcIjtcbmltcG9ydCB7IFR1cmJvUmVwb1Rhc2sgfSBmcm9tIFwiLi90dXJiby1yZXBvLXRhc2tcIjtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqXG4gKiBUdXJibyBSZXBvIENvbmZpZ1xuICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmV4cG9ydCBjb25zdCBST09UX1RVUkJPX1RBU0tfTkFNRSA9IFwidHVyYm86YnVpbGRcIjtcbmV4cG9ydCBjb25zdCBST09UX0NJX1RBU0tfTkFNRSA9IFwiYnVpbGQ6YWxsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVtb3RlQ2FjaGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIExvY2FsIHByb2ZpbGUgbmFtZSB0byB1c2Ugd2hlbiBmZXRjaGluZyB0aGUgY2FjaGUgZW5kcG9pbnQgYW5kIHRva2VuLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogT0lEQyByb2xlIHRvIGFzc3VtZSB3aGVuIGZldGNoaW5nIHRoZSBjYWNoZSBlbmRwb2ludCBhbmQgdG9rZW4uXG4gICAqL1xuICByZWFkb25seSBvaWRjUm9sZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIGZvciB0aGUgcGFyYW1zIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlIGVuZHBvaW50LlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnRQYXJhbU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBmb3IgdGhlIHBhcmFtcyB1c2VkIHRvIHN0b3JlIHRoZSBjYWNoZSdzIEFQSSB0b2tlbi5cbiAgICovXG4gIHJlYWRvbmx5IHRva2VuUGFyYW1OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIHRlYW0gbmFtZSB1c2VkIGluIHJlbW90ZSBjYWNoZSBjb21tYW5kc1xuICAgKi9cbiAgcmVhZG9ubHkgdGVhbU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUdXJib1JlcG9PcHRpb25zIHtcbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgdHVyYm9yZXBvIHRvIHVzZS5cbiAgICpcbiAgICogQGRlZmF1bHQ6IHNwZWNpZmllZCBpbiB2ZXJzaW9ucyBmaWxlXG4gICAqL1xuICByZWFkb25seSB0dXJib1ZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4dGVuZCBmcm9tIHRoZSByb290IHR1cmJvLmpzb24gdG8gY3JlYXRlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIGEgcGFja2FnZSB1c2luZyBQYWNrYWdlIENvbmZpZ3VyYXRpb25zLlxuICAgKlxuICAgKiBUaGUgb25seSB2YWxpZCB2YWx1ZSBmb3IgZXh0ZW5kcyBpcyBbXCIvL1wiXSB0byBpbmhlcml0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgcm9vdCB0dXJiby5qc29uLlxuICAgKiBJZiBleHRlbmRzIGlzIHVzZWQgaW4gdGhlIHJvb3QgdHVyYm8uanNvbiwgaXQgd2lsbCBiZSBpZ25vcmVkLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNleHRlbmRzXG4gICAqL1xuICByZWFkb25seSBleHRlbmRzPzogQXJyYXk8c3RyaW5nPjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdsb2JzIHRoYXQgeW91IHdhbnQgdG8gaW5jbHVkZSBpbiBhbGwgdGFzayBoYXNoZXMuIElmIGFueSBmaWxlIG1hdGNoaW5nIHRoZXNlIGdsb2JzIGNoYW5nZXMsIGFsbCB0YXNrcyB3aWxsIG1pc3MgY2FjaGUuIEdsb2JzIGFyZSByZWxhdGl2ZSB0byB0aGUgbG9jYXRpb24gb2YgdHVyYm8uanNvbi5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgYWxsIGZpbGVzIGluIHNvdXJjZSBjb250cm9sIGluIHRoZSBXb3Jrc3BhY2Ugcm9vdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGdsb2JhbCBoYXNoLlxuICAgKlxuICAgKiBHbG9icyBtdXN0IGJlIGluIHRoZSByZXBvc2l0b3J5J3Mgc291cmNlIGNvbnRyb2wgcm9vdC4gR2xvYnMgb3V0c2lkZSBvZiB0aGUgcmVwb3NpdG9yeSBhcmVuJ3Qgc3VwcG9ydGVkLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNnbG9iYWxkZXBlbmRlbmNpZXNcbiAgICovXG4gIHJlYWRvbmx5IGdsb2JhbERlcGVuZGVuY2llcz86IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB5b3Ugd2FudCB0byBpbXBhY3QgdGhlIGhhc2ggb2YgYWxsIHRhc2tzLiBBbnkgY2hhbmdlIHRvIHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aWxsIGNhdXNlIGFsbCB0YXNrcyB0byBtaXNzIGNhY2hlLlxuICAgKlxuICAgKiBGb3IgbW9yZSBvbiB3aWxkY2FyZCBhbmQgbmVnYXRpb24gc3ludGF4LCBzZWUgdGhlIGVudiBzZWN0aW9uLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNnbG9iYWxlbnZcbiAgICovXG4gIHJlYWRvbmx5IGdsb2JhbEVudj86IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB5b3Ugd2FudCB0byBtYWtlIGF2YWlsYWJsZSB0byB0YXNrcy5cbiAgICogVXNpbmcgdGhpcyBrZXkgb3B0cyBhbGwgdGFza3MgaW50byBTdHJpY3RcbiAgICogRW52aXJvbm1lbnQgVmFyaWFibGUgTW9kZS5cbiAgICpcbiAgICogQWRkaXRpb25hbGx5LCBUdXJib3JlcG8gaGFzIGEgYnVpbHQtaW4gc2V0IG9mIGdsb2JhbCBwYXNzdGhyb3VnaCB2YXJpYWJsZXNcbiAgICogZm9yIGNvbW1vbiBjYXNlcywgbGlrZSBvcGVyYXRpbmcgc3lzdGVtIGVudmlyb25tZW50IHZhcmlhYmxlcy4gVGhpc1xuICAgKiBpbmNsdWRlcyB2YXJpYWJsZXMgbGlrZSBIT01FLCBQQVRILCBBUFBEQVRBLCBTSEVMTCwgUFdELCBhbmQgbW9yZS4gVGhlIGZ1bGxcbiAgICogbGlzdCBjYW4gYmUgZm91bmQgaW4gdGhlIHNvdXJjZSBjb2RlLlxuICAgKlxuICAgKiBQYXNzdGhyb3VnaCB2YWx1ZXMgZG8gbm90IGNvbnRyaWJ1dGUgdG8gaGFzaGVzIGZvciBjYWNoaW5nXG4gICAqXG4gICAqIElmIHlvdSB3YW50IGNoYW5nZXMgaW4gdGhlc2UgdmFyaWFibGVzIHRvIGNhdXNlIGNhY2hlIG1pc3NlcywgeW91IHdpbGwgbmVlZFxuICAgKiB0byBpbmNsdWRlIHRoZW0gaW4gZW52IG9yIGdsb2JhbEVudi5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZ2xvYmFscGFzc3Rocm91Z2hlbnZcbiAgICovXG4gIHJlYWRvbmx5IGdsb2JhbFBhc3NUaHJvdWdoRW52PzogQXJyYXk8c3RyaW5nPjtcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IFwic3RyZWFtXCJcbiAgICpcbiAgICogU2VsZWN0IGEgdGVybWluYWwgVUkgZm9yIHRoZSByZXBvc2l0b3J5LlxuICAgKlxuICAgKiBcInR1aVwiIGFsbG93cyBmb3Igdmlld2luZyBlYWNoIGxvZyBhdCBvbmNlIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZSB0YXNrLlxuICAgKiBcInN0cmVhbVwiIG91dHB1dHMgbG9ncyBhcyB0aGV5IGNvbWUgaW4gYW5kIGlzIG5vdCBpbnRlcmFjdGl2ZS5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jdWlcbiAgICovXG4gIHJlYWRvbmx5IHVpPzogXCJ0dWlcIiB8IFwic3RyZWFtXCI7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiBmYWxzZVxuICAgKlxuICAgKiBUdXJib3JlcG8gdXNlcyB5b3VyIHJlcG9zaXRvcnkncyBsb2NrZmlsZSB0byBkZXRlcm1pbmUgY2FjaGluZyBiZWhhdmlvcixcbiAgICogUGFja2FnZSBHcmFwaHMsIGFuZCBtb3JlLiBCZWNhdXNlIG9mIHRoaXMsIHdlIHVzZSB0aGUgcGFja2FnZU1hbmFnZXIgZmllbGRcbiAgICogdG8gaGVscCB5b3Ugc3RhYmlsaXplIHlvdXIgVHVyYm9yZXBvLlxuICAgKlxuICAgKiBUbyBoZWxwIHdpdGggaW5jcmVtZW50YWwgbWlncmF0aW9uIG9yIGluIHNpdHVhdGlvbnMgd2hlcmUgeW91IGNhbid0IHVzZVxuICAgKiB0aGUgcGFja2FnZU1hbmFnZXIgZmllbGQsIHlvdSBtYXkgdXNlXG4gICAqIC0tZGFuZ2Vyb3VzbHktZGlzYWJsZS1wYWNrYWdlLW1hbmFnZXItY2hlY2sgdG8gb3B0IG91dCBvZiB0aGlzIGNoZWNrIGFuZFxuICAgKiBhc3N1bWUgdGhlIHJpc2tzIG9mIHVuc3RhYmxlIGxvY2tmaWxlcyBwcm9kdWNpbmcgdW5wcmVkaWN0YWJsZSBiZWhhdmlvci5cbiAgICogV2hlbiBkaXNhYmxlZCwgVHVyYm9yZXBvIHdpbGwgYXR0ZW1wdCBhIGJlc3QtZWZmb3J0IGRpc2NvdmVyeSBvZiB0aGVcbiAgICogaW50ZW5kZWQgcGFja2FnZSBtYW5hZ2VyIG1lYW50IGZvciB0aGUgcmVwb3NpdG9yeS5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZGFuZ2Vyb3VzbHlkaXNhYmxlcGFja2FnZW1hbmFnZXJjaGVja1xuICAgKi9cbiAgcmVhZG9ubHkgZGFuZ2Vyb3VzbHlEaXNhYmxlUGFja2FnZU1hbmFnZXJDaGVjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiBcIi50dXJiby9jYWNoZVwiXG4gICAqXG4gICAqIFNwZWNpZnkgdGhlIGZpbGVzeXN0ZW0gY2FjaGUgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNjYWNoZWRpclxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVEaXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiB0cnVlXG4gICAqXG4gICAqIFR1cmJvcmVwbyBydW5zIGEgYmFja2dyb3VuZCBwcm9jZXNzIHRvIHByZS1jYWxjdWxhdGUgc29tZSBleHBlbnNpdmVcbiAgICogb3BlcmF0aW9ucy4gVGhpcyBzdGFuZGFsb25lIHByb2Nlc3MgKGRhZW1vbikgaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sXG4gICAqIGFuZCBub3QgcmVxdWlyZWQgZm9yIHByb3BlciBmdW5jdGlvbmluZyBvZiB0dXJiby5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZGFlbW9uXG4gICAqL1xuICByZWFkb25seSBkYWVtb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdDogXCJzdHJpY3RcIlxuICAgKlxuICAgKiBUdXJib3JlcG8ncyBFbnZpcm9ubWVudCBNb2RlcyBhbGxvdyB5b3UgdG8gY29udHJvbCB3aGljaCBlbnZpcm9ubWVudFxuICAgKiB2YXJpYWJsZXMgYXJlIGF2YWlsYWJsZSB0byBhIHRhc2sgYXQgcnVudGltZTpcbiAgICpcbiAgICpcInN0cmljdFwiOiBGaWx0ZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIG9ubHkgdGhvc2UgdGhhdCBhcmUgc3BlY2lmaWVkXG4gICAqIGluIHRoZSBlbnYgYW5kIGdsb2JhbEVudiBrZXlzIGluIHR1cmJvLmpzb24uXG4gICAqXG4gICAqIFwibG9vc2VcIjogQWxsb3cgYWxsIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIHByb2Nlc3MgdG8gYmUgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNlbnZtb2RlXG4gICAqL1xuICByZWFkb25seSBlbnZNb2RlPzogc3RyaW5nO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKlxuICAgKiBDYWNoZSBTZXR0aW5nc1xuICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogQ2FjaGUgc2V0dGluZ3MsIGlmIHVzaW5nIHJlbW90ZSBjYWNoZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlbW90ZUNhY2hlT3B0aW9ucz86IFJlbW90ZUNhY2hlT3B0aW9ucztcblxuICAvKipcbiAgICogRW52IEFyZ3MgdGhhdCB3aWxsIGJyZSBhZGRlZCB0byB0dXJibydzIGJ1aWxkOmFsbCB0YXNrXG4gICAqXG4gICAqIEBkZWZhdWx0OiB7fVxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRBbGxUYXNrRW52VmFycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBjbGFzcyBUdXJib1JlcG8gZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogU3RhdGljIG1ldGhvZCB0byBkaXNjb3ZlcnQgdHVyYm8gaW4gYSBwcm9qZWN0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZihwcm9qZWN0OiBQcm9qZWN0KTogVHVyYm9SZXBvIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpc0RlZmluZWQgPSAoYzogQ29tcG9uZW50KTogYyBpcyBUdXJib1JlcG8gPT4gYyBpbnN0YW5jZW9mIFR1cmJvUmVwbztcbiAgICByZXR1cm4gcHJvamVjdC5jb21wb25lbnRzLmZpbmQoaXNEZWZpbmVkKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYnVpbGRXb3JrZmxvd09wdGlvbnMgPSAoXG4gICAgcmVtb3RlQ2FjaGVPcHRpb25zOiBSZW1vdGVDYWNoZU9wdGlvbnMsXG4gICk6IFBhcnRpYWw8QnVpbGRXb3JrZmxvd09wdGlvbnM+ID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgIGlkVG9rZW46IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICB9LFxuICAgICAgcHJlQnVpbGRTdGVwczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJBV1MgQ3JlZHMgZm9yIFNTTVwiLFxuICAgICAgICAgIHVzZXM6IFwiYXdzLWFjdGlvbnMvY29uZmlndXJlLWF3cy1jcmVkZW50aWFsc0B2NFwiLFxuICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgIFtcInJvbGUtdG8tYXNzdW1lXCJdOiByZW1vdGVDYWNoZU9wdGlvbnMub2lkY1JvbGUsXG4gICAgICAgICAgICBbXCJhd3MtcmVnaW9uXCJdOiBcInVzLWVhc3QtMVwiLFxuICAgICAgICAgICAgW1wicm9sZS1kdXJhdGlvbi1zZWNvbmRzXCJdOiBcIjkwMFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgdHVyYm9yZXBvIHRvIHVzZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0dXJib1ZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogRXh0ZW5kIGZyb20gdGhlIHJvb3QgdHVyYm8uanNvbiB0byBjcmVhdGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgYSBwYWNrYWdlIHVzaW5nIFBhY2thZ2UgQ29uZmlndXJhdGlvbnMuXG4gICAqXG4gICAqIFRoZSBvbmx5IHZhbGlkIHZhbHVlIGZvciBleHRlbmRzIGlzIFtcIi8vXCJdIHRvIGluaGVyaXQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSByb290IHR1cmJvLmpzb24uXG4gICAqIElmIGV4dGVuZHMgaXMgdXNlZCBpbiB0aGUgcm9vdCB0dXJiby5qc29uLCBpdCB3aWxsIGJlIGlnbm9yZWQuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2V4dGVuZHNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBleHRlbmRzOiBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZ2xvYnMgdGhhdCB5b3Ugd2FudCB0byBpbmNsdWRlIGluIGFsbCB0YXNrIGhhc2hlcy4gSWYgYW55IGZpbGUgbWF0Y2hpbmcgdGhlc2UgZ2xvYnMgY2hhbmdlcywgYWxsIHRhc2tzIHdpbGwgbWlzcyBjYWNoZS4gR2xvYnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBsb2NhdGlvbiBvZiB0dXJiby5qc29uLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBhbGwgZmlsZXMgaW4gc291cmNlIGNvbnRyb2wgaW4gdGhlIFdvcmtzcGFjZSByb290IGFyZSBpbmNsdWRlZCBpbiB0aGUgZ2xvYmFsIGhhc2guXG4gICAqXG4gICAqIEdsb2JzIG11c3QgYmUgaW4gdGhlIHJlcG9zaXRvcnkncyBzb3VyY2UgY29udHJvbCByb290LiBHbG9icyBvdXRzaWRlIG9mIHRoZSByZXBvc2l0b3J5IGFyZW4ndCBzdXBwb3J0ZWQuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2dsb2JhbGRlcGVuZGVuY2llc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdsb2JhbERlcGVuZGVuY2llczogQXJyYXk8c3RyaW5nPjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHlvdSB3YW50IHRvIGltcGFjdCB0aGUgaGFzaCBvZiBhbGwgdGFza3MuIEFueSBjaGFuZ2UgdG8gdGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpbGwgY2F1c2UgYWxsIHRhc2tzIHRvIG1pc3MgY2FjaGUuXG4gICAqXG4gICAqIEZvciBtb3JlIG9uIHdpbGRjYXJkIGFuZCBuZWdhdGlvbiBzeW50YXgsIHNlZSB0aGUgZW52IHNlY3Rpb24uXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2dsb2JhbGVudlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdsb2JhbEVudjogQXJyYXk8c3RyaW5nPjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHlvdSB3YW50IHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRhc2tzLlxuICAgKiBVc2luZyB0aGlzIGtleSBvcHRzIGFsbCB0YXNrcyBpbnRvIFN0cmljdFxuICAgKiBFbnZpcm9ubWVudCBWYXJpYWJsZSBNb2RlLlxuICAgKlxuICAgKiBBZGRpdGlvbmFsbHksIFR1cmJvcmVwbyBoYXMgYSBidWlsdC1pbiBzZXQgb2YgZ2xvYmFsIHBhc3N0aHJvdWdoIHZhcmlhYmxlc1xuICAgKiBmb3IgY29tbW9uIGNhc2VzLCBsaWtlIG9wZXJhdGluZyBzeXN0ZW0gZW52aXJvbm1lbnQgdmFyaWFibGVzLiBUaGlzXG4gICAqIGluY2x1ZGVzIHZhcmlhYmxlcyBsaWtlIEhPTUUsIFBBVEgsIEFQUERBVEEsIFNIRUxMLCBQV0QsIGFuZCBtb3JlLiBUaGUgZnVsbFxuICAgKiBsaXN0IGNhbiBiZSBmb3VuZCBpbiB0aGUgc291cmNlIGNvZGUuXG4gICAqXG4gICAqIFBhc3N0aHJvdWdoIHZhbHVlcyBkbyBub3QgY29udHJpYnV0ZSB0byBoYXNoZXMgZm9yIGNhY2hpbmdcbiAgICpcbiAgICogSWYgeW91IHdhbnQgY2hhbmdlcyBpbiB0aGVzZSB2YXJpYWJsZXMgdG8gY2F1c2UgY2FjaGUgbWlzc2VzLCB5b3Ugd2lsbCBuZWVkXG4gICAqIHRvIGluY2x1ZGUgdGhlbSBpbiBlbnYgb3IgZ2xvYmFsRW52LlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNnbG9iYWxwYXNzdGhyb3VnaGVudlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdsb2JhbFBhc3NUaHJvdWdoRW52OiBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdDogXCJzdHJlYW1cIlxuICAgKlxuICAgKiBTZWxlY3QgYSB0ZXJtaW5hbCBVSSBmb3IgdGhlIHJlcG9zaXRvcnkuXG4gICAqXG4gICAqIFwidHVpXCIgYWxsb3dzIGZvciB2aWV3aW5nIGVhY2ggbG9nIGF0IG9uY2UgYW5kIGludGVyYWN0aW5nIHdpdGggdGhlIHRhc2suXG4gICAqIFwic3RyZWFtXCIgb3V0cHV0cyBsb2dzIGFzIHRoZXkgY29tZSBpbiBhbmQgaXMgbm90IGludGVyYWN0aXZlLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiN1aVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVpOiBcInR1aVwiIHwgXCJzdHJlYW1cIjtcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IGZhbHNlXG4gICAqXG4gICAqIFR1cmJvcmVwbyB1c2VzIHlvdXIgcmVwb3NpdG9yeSdzIGxvY2tmaWxlIHRvIGRldGVybWluZSBjYWNoaW5nIGJlaGF2aW9yLFxuICAgKiBQYWNrYWdlIEdyYXBocywgYW5kIG1vcmUuIEJlY2F1c2Ugb2YgdGhpcywgd2UgdXNlIHRoZSBwYWNrYWdlTWFuYWdlciBmaWVsZFxuICAgKiB0byBoZWxwIHlvdSBzdGFiaWxpemUgeW91ciBUdXJib3JlcG8uXG4gICAqXG4gICAqIFRvIGhlbHAgd2l0aCBpbmNyZW1lbnRhbCBtaWdyYXRpb24gb3IgaW4gc2l0dWF0aW9ucyB3aGVyZSB5b3UgY2FuJ3QgdXNlXG4gICAqIHRoZSBwYWNrYWdlTWFuYWdlciBmaWVsZCwgeW91IG1heSB1c2VcbiAgICogLS1kYW5nZXJvdXNseS1kaXNhYmxlLXBhY2thZ2UtbWFuYWdlci1jaGVjayB0byBvcHQgb3V0IG9mIHRoaXMgY2hlY2sgYW5kXG4gICAqIGFzc3VtZSB0aGUgcmlza3Mgb2YgdW5zdGFibGUgbG9ja2ZpbGVzIHByb2R1Y2luZyB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLlxuICAgKiBXaGVuIGRpc2FibGVkLCBUdXJib3JlcG8gd2lsbCBhdHRlbXB0IGEgYmVzdC1lZmZvcnQgZGlzY292ZXJ5IG9mIHRoZVxuICAgKiBpbnRlbmRlZCBwYWNrYWdlIG1hbmFnZXIgbWVhbnQgZm9yIHRoZSByZXBvc2l0b3J5LlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNkYW5nZXJvdXNseWRpc2FibGVwYWNrYWdlbWFuYWdlcmNoZWNrXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGFuZ2Vyb3VzbHlEaXNhYmxlUGFja2FnZU1hbmFnZXJDaGVjazogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IFwiLnR1cmJvL2NhY2hlXCJcbiAgICpcbiAgICogU3BlY2lmeSB0aGUgZmlsZXN5c3RlbSBjYWNoZSBkaXJlY3RvcnkuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2NhY2hlZGlyXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2FjaGVEaXI6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IHRydWVcbiAgICpcbiAgICogVHVyYm9yZXBvIHJ1bnMgYSBiYWNrZ3JvdW5kIHByb2Nlc3MgdG8gcHJlLWNhbGN1bGF0ZSBzb21lIGV4cGVuc2l2ZVxuICAgKiBvcGVyYXRpb25zLiBUaGlzIHN0YW5kYWxvbmUgcHJvY2VzcyAoZGFlbW9uKSBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbixcbiAgICogYW5kIG5vdCByZXF1aXJlZCBmb3IgcHJvcGVyIGZ1bmN0aW9uaW5nIG9mIHR1cmJvLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNkYWVtb25cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkYWVtb246IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiBcInN0cmljdFwiXG4gICAqXG4gICAqIFR1cmJvcmVwbydzIEVudmlyb25tZW50IE1vZGVzIGFsbG93IHlvdSB0byBjb250cm9sIHdoaWNoIGVudmlyb25tZW50XG4gICAqIHZhcmlhYmxlcyBhcmUgYXZhaWxhYmxlIHRvIGEgdGFzayBhdCBydW50aW1lOlxuICAgKlxuICAgKlwic3RyaWN0XCI6IEZpbHRlciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gb25seSB0aG9zZSB0aGF0IGFyZSBzcGVjaWZpZWRcbiAgICogaW4gdGhlIGVudiBhbmQgZ2xvYmFsRW52IGtleXMgaW4gdHVyYm8uanNvbi5cbiAgICpcbiAgICogXCJsb29zZVwiOiBBbGxvdyBhbGwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgcHJvY2VzcyB0byBiZSBhdmFpbGFibGUuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2Vudm1vZGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlbnZNb2RlOiBzdHJpbmc7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqXG4gICAqIENhY2hlIFNldHRpbmdzXG4gICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBDYWNoZSBzZXR0aW5ncywgaWYgdXNpbmcgcmVtb3RlIGNhY2hlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlbW90ZUNhY2hlT3B0aW9ucz86IFJlbW90ZUNhY2hlT3B0aW9ucztcblxuICAvKipcbiAgICogaXMgdGhpcyB0aGUgcm9vdCBwcm9qZWN0P1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzUm9vdFByb2plY3Q6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFR1cmJvJ3MgYnVpbGQ6YWxsIHRhc2sgYXQgdGhlIHJvb3Qgb2YgdGhlIG1vbm9yZXBvLlxuICAgKlxuICAgKiBUaGlzIGlzIGEgbm9ybWFsIHByb2plbiB0YXNrIHRoYXQgcnVucyB0aGUgcm9vdCB0dXJibyB0YXNrLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1aWxkQWxsVGFzaz86IFRhc2s7XG5cbiAgLyoqXG4gICAqIE1haW4gdHVyYm86YnVpbGQgdGFza1xuICAgKlxuICAgKiBUaGlzIGlzIGEgc3BlY2lhbCBUdXJibyB0YXNrXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVpbGRUYXNrOiBUdXJib1JlcG9UYXNrO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByZUNvbXBpbGVUYXNrPzogVHVyYm9SZXBvVGFzaztcbiAgLyoqXG4gICAqXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29tcGlsZVRhc2s/OiBUdXJib1JlcG9UYXNrO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBvc3RDb21waWxlVGFzaz86IFR1cmJvUmVwb1Rhc2s7XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGVzdFRhc2s/OiBUdXJib1JlcG9UYXNrO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhY2thZ2VUYXNrPzogVHVyYm9SZXBvVGFzaztcblxuICAvKipcbiAgICogU3ViLVRhc2tzIHRvIHJ1blxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhc2tzOiBBcnJheTxUdXJib1JlcG9UYXNrPiA9IFtdO1xuXG4gIC8qKlxuICAgKiBFbnYgQXJncyB0aGF0IHdpbGwgYnJlIGFkZGVkIHRvIHR1cmJvJ3MgYnVpbGQ6YWxsIHRhc2tcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBidWlsZEFsbFRhc2tFbnZWYXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBwcm9qZWN0OiBOb2RlUHJvamVjdCxcbiAgICBvcHRpb25zOiBUdXJib1JlcG9PcHRpb25zID0ge30sXG4gICkge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgdGhpcy50dXJib1ZlcnNpb24gPSBvcHRpb25zLnR1cmJvVmVyc2lvbiA/PyBcIl4yLjAuMFwiO1xuICAgIHRoaXMuaXNSb290UHJvamVjdCA9IHByb2plY3QgPT09IHByb2plY3Qucm9vdDtcblxuICAgIC8qKlxuICAgICAqIEFkZCB0dXJib3JlcG8gcGFja2FnZSB0byByb290IHByb2plY3QuXG4gICAgICovXG4gICAgaWYgKHRoaXMuaXNSb290UHJvamVjdCkge1xuICAgICAgcHJvamVjdC5hZGREZXZEZXBzKGB0dXJib0Ake3RoaXMudHVyYm9WZXJzaW9ufWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElnbm9yZSB0aGUgd29ya2luZyBjYWNoZSBmb3IgdHVyYm8uXG4gICAgICovXG4gICAgcHJvamVjdC5naXRpZ25vcmUuYWRkUGF0dGVybnMoXCIvLnR1cmJvXCIpO1xuICAgIHByb2plY3QubnBtaWdub3JlPy5hZGRQYXR0ZXJucyhcIi8udHVyYm8vXCIpO1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqXG4gICAgICogU2V0IHNvbWUgZGVmYXVsdCBvcHRpb25zXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICB0aGlzLmV4dGVuZHMgPSBvcHRpb25zLmV4dGVuZHMgPz8gKHRoaXMuaXNSb290UHJvamVjdCA/IFtdIDogW1wiLy9cIl0pO1xuICAgIHRoaXMuZ2xvYmFsRGVwZW5kZW5jaWVzID0gb3B0aW9ucy5nbG9iYWxEZXBlbmRlbmNpZXMgPz8gW107XG4gICAgdGhpcy5nbG9iYWxFbnYgPSBvcHRpb25zLmdsb2JhbEVudiA/PyBbXTtcbiAgICB0aGlzLmdsb2JhbFBhc3NUaHJvdWdoRW52ID0gb3B0aW9ucy5nbG9iYWxQYXNzVGhyb3VnaEVudiA/PyBbXTtcbiAgICB0aGlzLnVpID0gb3B0aW9ucy51aSA/PyBcInN0cmVhbVwiO1xuICAgIHRoaXMuZGFuZ2Vyb3VzbHlEaXNhYmxlUGFja2FnZU1hbmFnZXJDaGVjayA9XG4gICAgICBvcHRpb25zLmRhbmdlcm91c2x5RGlzYWJsZVBhY2thZ2VNYW5hZ2VyQ2hlY2sgPz8gZmFsc2U7XG4gICAgdGhpcy5jYWNoZURpciA9IG9wdGlvbnMuY2FjaGVEaXIgPz8gXCIudHVyYm8vY2FjaGVcIjtcbiAgICB0aGlzLmRhZW1vbiA9IG9wdGlvbnMuZGFlbW9uID8/IHRydWU7XG4gICAgdGhpcy5lbnZNb2RlID0gb3B0aW9ucy5lbnZNb2RlID8/IFwic3RyaWN0XCI7XG4gICAgdGhpcy5yZW1vdGVDYWNoZU9wdGlvbnMgPSBvcHRpb25zLnJlbW90ZUNhY2hlT3B0aW9ucztcbiAgICB0aGlzLmJ1aWxkQWxsVGFza0VudlZhcnMgPSBvcHRpb25zLmJ1aWxkQWxsVGFza0VudlZhcnMgPz8ge307XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBUdXJibyBCdWlsZCBUYXNrXG4gICAgICpcbiAgICAgKiBBbGwgdHVyYm8gY29uZmlncyBjb250YWluIGEgdHVyYm8gYnVpbGQgdGFzay5cbiAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIC8qKlxuICAgICAqIFRoZSB0dXJibyBlbnRyeSBwb2ludCBkZWZpbml0aW9uIGZvciB0aGUgdHVyYm86YnVpbGQgdGFzay4gVGhpcyBleGlzdHNcbiAgICAgKiBpbiBlYWNoIHByb2plY3QgYW5kIGlzIHdyaXR0ZW4gdG90IGhlIHR1cmJvLmpzb24gZmlsZS4gVGhpcyB0YXNrIGlzIG5vdFxuICAgICAqIGEgcHJvamVuIHRhc2sgb3IgYSBOb2RlIHRhc2suXG4gICAgICovXG4gICAgdGhpcy5idWlsZFRhc2sgPSBuZXcgVHVyYm9SZXBvVGFzayh0aGlzLnByb2plY3QsIHtcbiAgICAgIG5hbWU6IFJPT1RfVFVSQk9fVEFTS19OQU1FLFxuICAgICAgZGVwZW5kc09uOiB0aGlzLmlzUm9vdFByb2plY3QgPyBbYF4ke1JPT1RfVFVSQk9fVEFTS19OQU1FfWBdIDogW10sXG4gICAgfSk7XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBUdXJibyBCdWlsZCBBbGwgVGFza1xuICAgICAqXG4gICAgICogVGhlIFByb2plbiBlbnRyeSBwb2ludC4gVGhpcyBvbmx5IGV4aXN0cyBpbiB0aGUgcm9vdCBhbmQgaXMgYSBwcm9qZW5cbiAgICAgKiB0YXNrIHRoYXQgY2FuIGJlIHJ1biB1c2luZyBwbnBtLlxuICAgICAqXG4gICAgICogLSBUdXJucyBvZmYgdGVsZW1ldHJ5XG4gICAgICogLSBSdW5zIHJvb3QgdHVyYm8gdGFzayB0byBidWlsZCBhbGwgc3ViLXByb2plY3RzLlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgaWYgKHRoaXMuaXNSb290UHJvamVjdCkge1xuICAgICAgLyoqXG4gICAgICAgKiBDcmVhdGUgYW5kIGNvbmZpZ3VyZSB0aGUgYnVpbGQgYWxsIHRhc2suXG4gICAgICAgKi9cbiAgICAgIHRoaXMuYnVpbGRBbGxUYXNrID0gdGhpcy5wcm9qZWN0LnRhc2tzLmFkZFRhc2soUk9PVF9DSV9UQVNLX05BTUUsIHtcbiAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgXCJSb290IGJ1aWxkIGZvbGxvd2VkIGJ5IHN1Yi1wcm9qZWN0IGJ1aWxkcy4gTWltaWNzIHRoZSBDSSBidWlsZCBwcm9jZXNzIGluIG9uZSBzdGVwLlwiLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmJ1aWxkQWxsVGFzay5leGVjKFwidHVyYm8gdGVsZW1ldHJ5IGRpc2FibGVcIik7XG5cbiAgICAgIC8qKlxuICAgICAgICogQW55IGVudiB2YXJzIHRoYXQgbWF5IG5lZWQgdG8gYmUgYWRkZWQgdG8gdGhlIGJ1aWxkIGFsbCB0YXNrLlxuICAgICAgICovXG4gICAgICBpZiAodGhpcy5idWlsZEFsbFRhc2tFbnZWYXJzKSB7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuYnVpbGRBbGxUYXNrRW52VmFycykuZm9yRWFjaCgoW25hbWUsIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIHRoaXMuYWRkR2xvYmFsRW52VmFyKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogTm8gcmVtb3RlIGNhY2hlIGluIHVzZSwgc28gcnVuIHRoZSByb290IHR1cmJvIHRhc2sgdG8gYnVpbGQgYWxsXG4gICAgICAgKiBzdWItcHJvamVjdHMgbG9jYWxseS5cbiAgICAgICAqL1xuICAgICAgaWYgKCF0aGlzLnJlbW90ZUNhY2hlT3B0aW9ucykge1xuICAgICAgICB0aGlzLmJ1aWxkQWxsVGFzay5leGVjKFxuICAgICAgICAgIGB0dXJibyAke1JPT1RfVFVSQk9fVEFTS19OQU1FfSAtLXN1bW1hcml6ZSAtLWNvbmN1cnJlbmN5PTEwYCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZW1vdGUgY2FjaGUgaW4gdXNlLCBzbyBydW4gdGhlIHJvb3QgdHVyYm8gdGFzayB0byBidWlsZCBhbGxcbiAgICAgICAgICogc3ViLXByb2plY3RzIHVzaW5nIHRoZSByZW1vdGUgY2FjaGUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmJ1aWxkQWxsVGFzay5leGVjKFxuICAgICAgICAgIGB0dXJibyB0dXJibzpidWlsZCAtLXN1bW1hcml6ZSAtLWNvbmN1cnJlbmN5PTEwIC0tY2FjaGU9cmVtb3RlOnJ3IC0tYXBpPSRUVVJCT19FTkRQT0lOVCAtLXRva2VuPSRUVVJCT19UT0tFTiAtLXRlYW09JHt0aGlzLnJlbW90ZUNhY2hlT3B0aW9ucy50ZWFtTmFtZX1gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbmRpdGlvbjogJ1sgISAtbiBcIiRDSVwiIF0nLFxuICAgICAgICAgICAgZW52OiB7XG4gICAgICAgICAgICAgIFRVUkJPX0VORFBPSU5UOiBgJChhd3Mgc3NtIGdldC1wYXJhbWV0ZXIgLS1uYW1lICR7dGhpcy5yZW1vdGVDYWNoZU9wdGlvbnMuZW5kcG9pbnRQYXJhbU5hbWV9IC0tcXVlcnkgUGFyYW1ldGVyLlZhbHVlIC0tb3V0cHV0IHRleHQgLS1wcm9maWxlICR7dGhpcy5yZW1vdGVDYWNoZU9wdGlvbnMucHJvZmlsZU5hbWV9KWAsXG4gICAgICAgICAgICAgIFRVUkJPX1RPS0VOOiBgJChhd3Mgc3NtIGdldC1wYXJhbWV0ZXIgLS1uYW1lICR7dGhpcy5yZW1vdGVDYWNoZU9wdGlvbnMudG9rZW5QYXJhbU5hbWV9IC0tcXVlcnkgUGFyYW1ldGVyLlZhbHVlIC0tb3V0cHV0IHRleHQgLS1wcm9maWxlICR7dGhpcy5yZW1vdGVDYWNoZU9wdGlvbnMucHJvZmlsZU5hbWV9KWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIC8vIHJ1bm5pbmcgaW4gQ0ksIFdlJ2xsIGRlcGVuZCBvbiBPSURDIGF1dGguXG4gICAgICAgIHRoaXMuYnVpbGRBbGxUYXNrLmV4ZWMoXG4gICAgICAgICAgYHR1cmJvIHR1cmJvOmJ1aWxkIC0tc3VtbWFyaXplIC0tY29uY3VycmVuY3k9MTAgLS1jYWNoZT1yZW1vdGU6cncgLS1hcGk9JFRVUkJPX0VORFBPSU5UIC0tdG9rZW49JFRVUkJPX1RPS0VOIC0tdGVhbT0ke3RoaXMucmVtb3RlQ2FjaGVPcHRpb25zLnRlYW1OYW1lfWAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uZGl0aW9uOiAnWyAtbiBcIiRDSVwiIF0nLFxuICAgICAgICAgICAgZW52OiB7XG4gICAgICAgICAgICAgIFRVUkJPX0VORFBPSU5UOiBgJChhd3Mgc3NtIGdldC1wYXJhbWV0ZXIgLS1uYW1lICR7dGhpcy5yZW1vdGVDYWNoZU9wdGlvbnMuZW5kcG9pbnRQYXJhbU5hbWV9IC0tcXVlcnkgUGFyYW1ldGVyLlZhbHVlIC0tb3V0cHV0IHRleHQpYCxcbiAgICAgICAgICAgICAgVFVSQk9fVE9LRU46IGAkKGF3cyBzc20gZ2V0LXBhcmFtZXRlciAtLW5hbWUgJHt0aGlzLnJlbW90ZUNhY2hlT3B0aW9ucy50b2tlblBhcmFtTmFtZX0gLS1xdWVyeSBQYXJhbWV0ZXIuVmFsdWUgLS1vdXRwdXQgdGV4dClgLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNVQi1QUk9KRUNUXG4gICAgICpcbiAgICAgKiBDcmVhdGVzIHRhc2tzIGZvciB0aGUgdHlwaWNhbCBsaWZlY3ljbGUgZm9yIGFsbCBwcm9qZWN0IHByb2plY3RzLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5pc1Jvb3RQcm9qZWN0KSB7XG4gICAgICAvKipcbiAgICAgICAqIEFsbCBnZW5lcmF0ZWQgZmlsZXMgaW4gdGhlIHByb2plY3QuIEluY2x1ZGUgdGhlc2UgYXMgaW5wdXRzIHRvIHRoZVxuICAgICAgICogY29tcGlsZSByZWxhdGVkIHRhc2tzLlxuICAgICAgICovXG4gICAgICBjb25zdCBnZW5lcmF0ZWRGaWxlcyA9IHRoaXMucHJvamVjdC5jb21wb25lbnRzXG4gICAgICAgIC5maWx0ZXIoKGMpOiBjIGlzIEZpbGVCYXNlID0+IGMgaW5zdGFuY2VvZiBGaWxlQmFzZSlcbiAgICAgICAgLm1hcCgoYykgPT4gYy5wYXRoKTtcblxuICAgICAgdGhpcy5wcmVDb21waWxlVGFzayA9IG5ldyBUdXJib1JlcG9UYXNrKHByb2plY3QsIHtcbiAgICAgICAgbmFtZTogXCJwcmUtY29tcGlsZVwiLFxuICAgICAgICBpbnB1dHM6IFtcInNyYy8qKlwiLCAuLi5nZW5lcmF0ZWRGaWxlc10sXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29tcGlsZVRhc2sgPSBuZXcgVHVyYm9SZXBvVGFzayhwcm9qZWN0LCB7XG4gICAgICAgIG5hbWU6IFwiY29tcGlsZVwiLFxuICAgICAgICBpbnB1dHM6IFtcInNyYy8qKlwiLCAuLi5nZW5lcmF0ZWRGaWxlc10sXG4gICAgICB9KTtcbiAgICAgIHRoaXMucG9zdENvbXBpbGVUYXNrID0gbmV3IFR1cmJvUmVwb1Rhc2socHJvamVjdCwge1xuICAgICAgICBuYW1lOiBcInBvc3QtY29tcGlsZVwiLFxuICAgICAgICBpbnB1dHM6IFtcInNyYy8qKlwiLCAuLi5nZW5lcmF0ZWRGaWxlc10sXG4gICAgICB9KTtcbiAgICAgIHRoaXMudGVzdFRhc2sgPSBuZXcgVHVyYm9SZXBvVGFzayhwcm9qZWN0LCB7IG5hbWU6IFwidGVzdFwiIH0pO1xuICAgICAgdGhpcy5wYWNrYWdlVGFzayA9IG5ldyBUdXJib1JlcG9UYXNrKHByb2plY3QsIHtcbiAgICAgICAgbmFtZTogXCJwYWNrYWdlXCIsXG4gICAgICAgIGlucHV0czogW1wiLm5wbWlnbm9yZVwiXSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy50YXNrcy5wdXNoKFxuICAgICAgICB0aGlzLnByZUNvbXBpbGVUYXNrLFxuICAgICAgICB0aGlzLmNvbXBpbGVUYXNrLFxuICAgICAgICB0aGlzLnBvc3RDb21waWxlVGFzayxcbiAgICAgICAgdGhpcy50ZXN0VGFzayxcbiAgICAgICAgdGhpcy5wYWNrYWdlVGFzayxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBlbnYgdmFyIHRvIHRoZSBnbG9iYWwgZW52IHZhcnMgZm9yIGFsbCB0YXNrcy5cbiAgICogVGhpcyB3aWxsIGFsc28gYmVjb21lIGFuIGlucHV0IGZvciB0aGUgYnVpbGQ6YWxsIHRhc2sgY2FjaGUgYXQgdGhlIHJvb3QuXG4gICAqL1xuICBwdWJsaWMgYWRkR2xvYmFsRW52VmFyKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIC8qKlxuICAgICAqIEFkZCBlbnYgdmFyIHRvIGdsb2JhbCB0YXNrIGVudlxuICAgICAqL1xuICAgIHRoaXMuYnVpbGRBbGxUYXNrPy5lbnYobmFtZSwgdmFsdWUpO1xuXG4gICAgLyoqXG4gICAgICogQWRkIHRvIGdsb2JhbCBlbnYgdmFycyBmb3IgYWxsIHRhc2tzLlxuICAgICAqL1xuICAgIGlmICh0aGlzLmlzUm9vdFByb2plY3QpIHtcbiAgICAgIHRoaXMuZ2xvYmFsRW52LnB1c2gobmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFjdGl2YXRlQnJhbmNoTmFtZUVudlZhcigpIHtcbiAgICB0aGlzLmFkZEdsb2JhbEVudlZhcihcIkJSQU5DSF9OQU1FXCIsIFwiJChnaXQgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEKVwiKTtcbiAgfVxuXG4gIHByZVN5bnRoZXNpemUoKTogdm9pZCB7XG4gICAgLyoqXG4gICAgICogQWRkIGFueSBsb2NhbCB3b3Jrc3BhY2Ugc3BlY2lmaWMgZGVwcyB0byBkZXBlbmRzT24gc28gdGhhdCB3ZSBrbm93XG4gICAgICogY29tcGlsZSBoYXMgZmluaXNoZWQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gdXNlIGFueSBkaXN0cmlidXRpb24gYXJ0aWZhY3RzLlxuICAgICAqXG4gICAgICogRG8gdGhpcyBpbiBwcmVzeW50aCBzbyB0aGF0IHdlIGNhbiBiZSBzdXJlIGFsbCBwcm9qZWN0IGRlcGVuZGVuY2llcyBoYXZlXG4gICAgICogYmVlbiBkZWZpbmVkIGZpcnN0LlxuICAgICAqL1xuICAgIGxldCBuZXh0RGVwZW5kc09uID0gdGhpcy5wcm9qZWN0LmRlcHMuYWxsXG4gICAgICAuZmlsdGVyKChkKSA9PiBkLnZlcnNpb24gPT09IFwid29ya3NwYWNlOipcIilcbiAgICAgIC5tYXAoKGQpID0+IFtkLm5hbWUsIFJPT1RfVFVSQk9fVEFTS19OQU1FXS5qb2luKFwiI1wiKSk7XG5cbiAgICAvKipcbiAgICAgKiBMb29wIG92ZXIgYWxsIHByb2plbiB0YXNrcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyB0dXJibyB0YXNrXG4gICAgICogZGVmaW5pdGlvbnMuIENoYWluIHRoZW0gdG9nZXRoZXIgdXNpbmcgZGVwZW5kc09uLCBhbG9uZyB3aXRoIGFueSBvdXRzaWRlXG4gICAgICogcGFja2FnZSBkZXBlbmRlbmNpZXMuXG4gICAgICovXG4gICAgaWYgKCF0aGlzLmlzUm9vdFByb2plY3QpIHtcbiAgICAgIChcbiAgICAgICAgW1xuICAgICAgICAgIFt0aGlzLnByb2plY3QucHJlQ29tcGlsZVRhc2ssIHRoaXMucHJlQ29tcGlsZVRhc2tdLFxuICAgICAgICAgIFt0aGlzLnByb2plY3QuY29tcGlsZVRhc2ssIHRoaXMuY29tcGlsZVRhc2tdLFxuICAgICAgICAgIFt0aGlzLnByb2plY3QucG9zdENvbXBpbGVUYXNrLCB0aGlzLnBvc3RDb21waWxlVGFza10sXG4gICAgICAgICAgW3RoaXMucHJvamVjdC50ZXN0VGFzaywgdGhpcy50ZXN0VGFza10sXG4gICAgICAgICAgW3RoaXMucHJvamVjdC5wYWNrYWdlVGFzaywgdGhpcy5wYWNrYWdlVGFza10sXG4gICAgICAgIF0gYXMgQXJyYXk8W1Rhc2ssIFR1cmJvUmVwb1Rhc2tdPlxuICAgICAgKS5mb3JFYWNoKChbcGpUYXNrLCB0dXJib1Rhc2tdKSA9PiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBzdGVwcyBleGlzdCBjaGFpbiB1c2luZyBkZXBlbmRzT25cbiAgICAgICAgICovXG4gICAgICAgIGlmIChwalRhc2sgJiYgdHVyYm9UYXNrICYmIHBqVGFzay5zdGVwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKG5leHREZXBlbmRzT24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdHVyYm9UYXNrLmRlcGVuZHNPbi5wdXNoKC4uLm5leHREZXBlbmRzT24pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXh0RGVwZW5kc09uID0gW3R1cmJvVGFzay5uYW1lXTtcblxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIE90aGVyd2lzZSwgaWYgYSB0YXNrIGRvZXNuJ3QgZG8gYW55dGhpbmcsIGRlYWN0aXZhdGUgaXQuXG4gICAgICAgICAgICovXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHVyYm9UYXNrLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvKipcbiAgICAgICAqIE1haW4gYnVpbGQgZW50cnkgcG9pbnQgZGVwZW5kcyBvbiB3aGF0ZXZlciB3YXMgbGFzdC5cbiAgICAgICAqL1xuICAgICAgdGhpcy5idWlsZFRhc2suZGVwZW5kc09uLnB1c2goLi4ubmV4dERlcGVuZHNPbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgZm9yIHRoZSB0dXJibyBjb25maWcgZmlsZS5cbiAgICAgKi9cbiAgICBjb25zdCBmaWxlTmFtZTogc3RyaW5nID0gXCJ0dXJiby5qc29uXCI7XG5cbiAgICAvKipcbiAgICAgKiBFbnN1cmUgdGhhdCB0dXJibyBjb25maWcgZG9lc24ndCBlbmQgdXAgaW4gYW55IHBhY2thZ2UgZGlzdHJpYnV0aW9ucy5cbiAgICAgKi9cbiAgICB0aGlzLnByb2plY3QuYWRkUGFja2FnZUlnbm9yZShmaWxlTmFtZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29udGVudCBvZiB0aGlzIFlBTUwgZmlsZSB3aWxsIGJlIHJlc29sdmVkIGF0IHN5bnRoIHRpbWUuIEJ5IHRoZW4sXG4gICAgICogYW55IHN1Yi1wcm9qZWN0cyB3aWxsIGJlIGRlZmluZWQgYW5kIHRoaXMgd2lsbCBiZSBhIGNvbXBsZXRlIGxpc3QuXG4gICAgICovXG4gICAgbmV3IEpzb25GaWxlKHRoaXMucHJvamVjdCwgZmlsZU5hbWUsIHtcbiAgICAgIG9iajoge1xuICAgICAgICBleHRlbmRzOiB0aGlzLmV4dGVuZHMubGVuZ3RoID8gdGhpcy5leHRlbmRzIDogdW5kZWZpbmVkLFxuICAgICAgICBnbG9iYWxEZXBlbmRlbmNpZXM6XG4gICAgICAgICAgdGhpcy5pc1Jvb3RQcm9qZWN0ICYmIHRoaXMuZ2xvYmFsRGVwZW5kZW5jaWVzLmxlbmd0aFxuICAgICAgICAgICAgPyB0aGlzLmdsb2JhbERlcGVuZGVuY2llc1xuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGdsb2JhbEVudjpcbiAgICAgICAgICB0aGlzLmlzUm9vdFByb2plY3QgJiYgdGhpcy5nbG9iYWxFbnYubGVuZ3RoXG4gICAgICAgICAgICA/IHRoaXMuZ2xvYmFsRW52XG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgZ2xvYmFsUGFzc1Rocm91Z2hFbnY6XG4gICAgICAgICAgdGhpcy5pc1Jvb3RQcm9qZWN0ICYmIHRoaXMuZ2xvYmFsUGFzc1Rocm91Z2hFbnYubGVuZ3RoXG4gICAgICAgICAgICA/IHRoaXMuZ2xvYmFsUGFzc1Rocm91Z2hFbnZcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB1aTogdGhpcy5pc1Jvb3RQcm9qZWN0ID8gdGhpcy51aSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGFuZ2Vyb3VzbHlEaXNhYmxlUGFja2FnZU1hbmFnZXJDaGVjazogdGhpcy5pc1Jvb3RQcm9qZWN0XG4gICAgICAgICAgPyB0aGlzLmRhbmdlcm91c2x5RGlzYWJsZVBhY2thZ2VNYW5hZ2VyQ2hlY2tcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgY2FjaGVEaXI6IHRoaXMuaXNSb290UHJvamVjdCA/IHRoaXMuY2FjaGVEaXIgOiB1bmRlZmluZWQsXG4gICAgICAgIGRhZW1vbjogdGhpcy5pc1Jvb3RQcm9qZWN0ID8gdGhpcy5kYWVtb24gOiB1bmRlZmluZWQsXG4gICAgICAgIGVudk1vZGU6IHRoaXMuaXNSb290UHJvamVjdCA/IHRoaXMuZW52TW9kZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFsbCB0YXNrc1xuICAgICAgICAgKi9cbiAgICAgICAgdGFza3M6IHRoaXMudGFza3NcbiAgICAgICAgICAuZmlsdGVyKCh0YXNrKSA9PiB0YXNrLmlzQWN0aXZlKVxuICAgICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCB0YXNrKSA9PiB7XG4gICAgICAgICAgICAgIGFjY1t0YXNrLm5hbWVdID0ge1xuICAgICAgICAgICAgICAgIC4uLnRhc2sudGFza0NvbmZpZygpLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW3RoaXMuYnVpbGRUYXNrLm5hbWVdOiB7IC4uLnRoaXMuYnVpbGRUYXNrLnRhc2tDb25maWcoKSB9LFxuICAgICAgICAgICAgfSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgICAgICAgICksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgc3VwZXIucHJlU3ludGhlc2l6ZSgpO1xuICB9XG59XG4iXX0=
@@ -164,12 +164,13 @@ class AwsDeployWorkflow extends projen_1.Component {
164
164
  /**
165
165
  * Name based on project and environment.
166
166
  */
167
- name: [
168
- "deploy",
169
- project.name,
170
- this.awsStageType,
171
- this.awsEnvironmentType,
172
- ].join("-"),
167
+ name: options.buildWorkflowOptions?.name ??
168
+ [
169
+ "deploy",
170
+ project.name,
171
+ this.awsStageType,
172
+ this.awsEnvironmentType,
173
+ ].join("-"),
173
174
  /**
174
175
  * Use the root projects build task.
175
176
  */
@@ -265,4 +266,4 @@ class AwsDeployWorkflow extends projen_1.Component {
265
266
  }
266
267
  }
267
268
  exports.AwsDeployWorkflow = AwsDeployWorkflow;
268
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWRlcGxveS13b3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3JrZmxvd3MvYXdzLWRlcGxveS13b3JrZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFFbkMsNENBQXVFO0FBQ3ZFLDhDQUEyQztBQUMzQyx1RUFBMkU7QUFFM0UsZ0NBQTZDO0FBQzdDLHdFQU1zQztBQUN0QywwQ0FBOEM7QUFDOUMsb0NBQXdEO0FBQ3hELDBDQUFzQztBQUV6QixRQUFBLGdCQUFnQixHQUFHLGFBQWEsQ0FBQztBQWtDOUMsTUFBYSxpQkFBa0IsU0FBUSxrQkFBUztJQUN2QyxNQUFNLENBQUMsRUFBRSxDQUNkLE9BQTRCLEVBQzVCLGFBQTRCO1FBRTVCLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBWSxFQUEwQixFQUFFLENBQ3pELENBQUMsWUFBWSxpQkFBaUIsSUFBSSxDQUFDLENBQUMsYUFBYSxLQUFLLGFBQWEsQ0FBQztRQUN0RSxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUF1Q0QsWUFDUyxPQUE0QixFQUNuQyxVQUFpQyxFQUFFO1FBRW5DLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUhSLFlBQU8sR0FBUCxPQUFPLENBQXFCO1FBNUJyQzs7OztXQUlHO1FBQ0ksdUJBQWtCLEdBQXVCLDRDQUFvQixDQUFDLE9BQU8sQ0FBQztRQTJPdEUsY0FBUyxHQUFHLEdBQW1CLEVBQUU7WUFDdEMsT0FBTztnQkFDTDtvQkFDRSxJQUFJLEVBQUUsWUFBWTtvQkFDbEIsSUFBSSxFQUFFLHVCQUF1QjtvQkFDN0IsSUFBSSxFQUFFO3dCQUNKLENBQUMsY0FBYyxDQUFDLEVBQUUsa0JBQU8sQ0FBQyxjQUFjO3FCQUN6QztvQkFDRCxnRUFBZ0U7b0JBQ2hFLGNBQWMsRUFBRSxDQUFDO2lCQUNsQjthQUNGLENBQUM7UUFDSixDQUFDLENB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QUMsa0JBQWtCLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO2dCQUMxSCxLQUFLLEVBQUU7b0JBQ0wsT0FBTztvQkFDUCxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTt3QkFDbkMsT0FBTyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pCLENBQUMsQ0FBQztpQkFDSDtnQkFDRCxNQUFNLEVBQUUsQ0FBQyxlQUFlLENBQUM7Z0JBQ3pCLFdBQVcsRUFBRTtvQkFDWCxRQUFRLEVBQUUsK0JBQWEsQ0FBQyxJQUFJO29CQUM1QixPQUFPLEVBQUUsK0JBQWEsQ0FBQyxLQUFLO2lCQUM3QjtnQkFDRCxXQUFXLEVBQUUsYUFBYTtnQkFDMUIsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3JDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQTJFRCxhQUFhO1FBQ1g7O1dBRUc7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLGlCQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUM7Z0JBQ25DLElBQUksRUFBRSxvQkFBb0I7Z0JBQzFCLEdBQUcsRUFBRSxjQUFjLHlCQUFpQixFQUFFO2FBQ3ZDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDeEIsQ0FBQztDQUNGO0FBMVZELDhDQTBWQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJwcm9qZW5cIjtcbmltcG9ydCB7IEF3c0Nka1R5cGVTY3JpcHRBcHAgfSBmcm9tIFwicHJvamVuL2xpYi9hd3NjZGtcIjtcbmltcG9ydCB7IEJ1aWxkV29ya2Zsb3csIEJ1aWxkV29ya2Zsb3dPcHRpb25zIH0gZnJvbSBcInByb2plbi9saWIvYnVpbGRcIjtcbmltcG9ydCB7IEdpdEh1YiB9IGZyb20gXCJwcm9qZW4vbGliL2dpdGh1YlwiO1xuaW1wb3J0IHsgSm9iUGVybWlzc2lvbiwgSm9iU3RlcCB9IGZyb20gXCJwcm9qZW4vbGliL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWxcIjtcbmltcG9ydCB7IFZhbHVlT2YgfSBmcm9tIFwidHlwZS1mZXN0XCI7XG5pbXBvcnQgeyBBd3NEZXBsb3ltZW50Q29uZmlnIH0gZnJvbSBcIi4uL2F3c1wiO1xuaW1wb3J0IHtcbiAgQVdTX0VOVklST05NRU5UX1RZUEUsXG4gIEFXU19TVEFHRV9UWVBFLFxuICBBd3NEZXBsb3ltZW50VGFyZ2V0LFxuICBBd3NFbnZpcm9ubWVudFR5cGUsXG4gIEF3c1N0YWdlVHlwZSxcbn0gZnJvbSBcIi4uL2F3cy9hd3MtZGVwbG95bWVudC10YXJnZXRcIjtcbmltcG9ydCB7IE1vbm9yZXBvUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0c1wiO1xuaW1wb3J0IHsgUk9PVF9DSV9UQVNLX05BTUUsIFR1cmJvUmVwbyB9IGZyb20gXCIuLi90dXJib1wiO1xuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuLi92ZXJzaW9uc1wiO1xuXG5leHBvcnQgY29uc3QgUFJPRF9ERVBMT1lfTkFNRSA9IFwicHJvZC1kZXBsb3lcIjtcblxuZXhwb3J0IGludGVyZmFjZSBEZXBsb3lXb3JrZmxvd09wdGlvbnMge1xuICAvKipcbiAgICogV2hhdCB0eXBlIG9mIGRlcGxveSBpcyB0aGlzIHdvcmtmbG93IGZvcj9cbiAgICpcbiAgICogQGRlZmF1bHQgQVdTX1NUQUdFX1RZUEUuREVWXG4gICAqL1xuICByZWFkb25seSBhd3NTdGFnZVR5cGU/OiBWYWx1ZU9mPHR5cGVvZiBBV1NfU1RBR0VfVFlQRT47XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgZmVlZCBhIGxpc3Qgb2YgdGFyZ2V0cyB0byBkZXBsb3kgdG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGRpc2NvdmVycyBhbGwgdGFyZ2V0cyB1c2luZyBzdGFnZVR5cGVcbiAgICovXG4gIHJlYWRvbmx5IGF3c0RlcGxveW1lbnRUYXJnZXRzPzogQXJyYXk8QXdzRGVwbG95bWVudFRhcmdldD47XG5cbiAgLyoqXG4gICAqIEV4aXN0aW5nIHdvcmtmbG93LCB1c2VmdWwgaWYgd2UncmUgdGFja2luZyBkZXBsb3ltZW50cyBvbnRvIGFuIGV4aXN0aW5nXG4gICAqIGJ1aWxkIHdvcmtmbG93XG4gICAqL1xuICByZWFkb25seSBidWlsZFdvcmtmbG93PzogQnVpbGRXb3JrZmxvdztcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgdGhlIGJ1aWxkIHdvcmtmbG93LCBpZiBubyBidWlsZCB3b3JrZmxvdyBpcyBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkV29ya2Zsb3dPcHRpb25zPzogUGFydGlhbDxCdWlsZFdvcmtmbG93T3B0aW9ucz47XG5cbiAgLyoqXG4gICAqIFByb2plY3RzIHRoYXQgc2hvdWxkIGNvbXBsZXRlIGRlcGxveW1lbnQgYmVmb3JlIHRoaXMgb25lIHN0YXJ0cy5cbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveUFmdGVyVGFyZ2V0cz86IEFycmF5PEF3c0RlcGxveW1lbnRUYXJnZXQ+O1xufVxuXG5leHBvcnQgY2xhc3MgQXdzRGVwbG95V29ya2Zsb3cgZXh0ZW5kcyBDb21wb25lbnQge1xuICBwdWJsaWMgc3RhdGljIG9mKFxuICAgIHByb2plY3Q6IEF3c0Nka1R5cGVTY3JpcHRBcHAsXG4gICAgYnVpbGRXb3JrZmxvdzogQnVpbGRXb3JrZmxvdyxcbiAgKTogQXdzRGVwbG95V29ya2Zsb3cgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGlzRGVmaW5lZCA9IChjOiBDb21wb25lbnQpOiBjIGlzIEF3c0RlcGxveVdvcmtmbG93ID0+XG4gICAgICBjIGluc3RhbmNlb2YgQXdzRGVwbG95V29ya2Zsb3cgJiYgYy5idWlsZFdvcmtmbG93ID09PSBidWlsZFdvcmtmbG93O1xuICAgIHJldHVybiBwcm9qZWN0LmNvbXBvbmVudHMuZmluZChpc0RlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByb290IHByb2plY3QgZm9yIHRoaXMgZGVwbG95IHdvcmtmbG93LiBNdXN0IGJlIGEgbW9ub3JlcG8gcHJvamVjdC5cbiAgICovXG4gIHByaXZhdGUgcm9vdFByb2plY3Q6IE1vbm9yZXBvUHJvamVjdDtcblxuICAvKipcbiAgICogV2hhdCB0eXBlIG9mIGRlcGxveSBpcyB0aGlzIHdvcmtmbG93IGZvcj9cbiAgICovXG4gIHB1YmxpYyBhd3NTdGFnZVR5cGU6IEF3c1N0YWdlVHlwZTtcblxuICAvKipcbiAgICogQVdTIGVudmlyb25tZW50IHR5cGUsIHN1Y2ggYXMgcHJpbWFyeSBvciBzZWNvbmRhcnkuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5JyAodGhpcyBpcyB0aGUgb25seSB0eXBlIHN1cHBvcnRlZCBjdXJyZW50bHkpXG4gICAqL1xuICBwdWJsaWMgYXdzRW52aXJvbm1lbnRUeXBlOiBBd3NFbnZpcm9ubWVudFR5cGUgPSBBV1NfRU5WSVJPTk1FTlRfVFlQRS5QUklNQVJZO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiB0YXJnZXRzIHRvIGRlcGxveSB0by5cbiAgICovXG4gIHJlYWRvbmx5IGF3c0RlcGxveW1lbnRUYXJnZXRzOiBBcnJheTxBd3NEZXBsb3ltZW50VGFyZ2V0PjtcblxuICAvKipcbiAgICogSG9sZCB0aGUgZGVwbG95IHdvcmtmbG93IHNvIHdlIGNhbiBhZGQgdG8gaXQgaW4gcHJlU3ludGhcbiAgICovXG4gIHB1YmxpYyBidWlsZFdvcmtmbG93OiBCdWlsZFdvcmtmbG93O1xuXG4gIC8qKlxuICAgKiBXYXMgdGhpcyB3b3JrZmxvdyBjcmVhdGVkIGV4dGVybmFsbHk/XG4gICAqL1xuICBwdWJsaWMgZXh0ZXJuYWxXb3JrZmxvdzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUHJvamVjdHMgdGhhdCBzaG91bGQgY29tcGxldGUgZGVwbG95bWVudCBiZWZvcmUgdGhpcyBvbmUgc3RhcnRzLlxuICAgKi9cbiAgcHVibGljIGRlcGxveUFmdGVyVGFyZ2V0czogQXJyYXk8QXdzRGVwbG95bWVudFRhcmdldD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHByb2plY3Q6IEF3c0Nka1R5cGVTY3JpcHRBcHAsXG4gICAgb3B0aW9uczogRGVwbG95V29ya2Zsb3dPcHRpb25zID0ge30sXG4gICkge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqXG4gICAgICogUm9vdCBwcm9qZWN0IGNoZWNrXG4gICAgICpcbiAgICAgKiBEZXRlY3QgdGhlIHJvb3QgcHJvamVjdCBhbmQgZW5zdXJlIGl0J3Mgb2YgdHlwZSBNb25vcmVwb1Byb2plY3QuXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBpZiAoIShwcm9qZWN0LnJvb3QgaW5zdGFuY2VvZiBNb25vcmVwb1Byb2plY3QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQXdzRGVwbG95V29ya2Zsb3cgcmVxdWlyZXMgdGhlIHJvb3QgcHJvamVjdCB0byBiZSBhIE1vbm9yZXBvUHJvamVjdFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnJvb3RQcm9qZWN0ID0gcHJvamVjdC5yb290O1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqXG4gICAgICogR2l0SHViIENoZWNrXG4gICAgICpcbiAgICAgKiBNYWtlIHN1cmUgZ2l0aHViIGNvbmZpZyBpcyBhY3RpdmUgaW4gdGhlIHByb2plY3QuIFRoaXMgaXMgdG8gZW5zdXJlIGFsbFxuICAgICAqIHdvcmtmbG93cyB3aWxsIGJlIG91dHB1dCBwcm9wZXJseSBkdXJpbmcgc3ludGguXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBjb25zdCBnaXRodWIgPSBHaXRIdWIub2YodGhpcy5yb290UHJvamVjdCk7XG5cbiAgICBpZiAoIWdpdGh1Yikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkF3c0RlcGxveVdvcmtmbG93IHJlcXVpcmVzIGEgR2l0SHViIGNvbXBvbmVudCBpbiB0aGUgcm9vdCBwcm9qZWN0XCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIFR1cmJvUmVwbyBDaGVja1xuICAgICAqXG4gICAgICogSWYgdHVyYm8gaXMgZW5hYmxlZCwgd2UgbWF5IG5lZWQgdGhlIG9wdGlvbnMgbGF0ZXIgaW4gdGhpcyBmaWxlLlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgY29uc3QgdHVyYm8gPSBUdXJib1JlcG8ub2YodGhpcy5yb290UHJvamVjdCk7XG4gICAgY29uc3QgYnVpbGRXb3JrZmxvd09wdGlvbnM6IFBhcnRpYWw8QnVpbGRXb3JrZmxvd09wdGlvbnM+ID1cbiAgICAgIHR1cmJvPy5yZW1vdGVDYWNoZU9wdGlvbnNcbiAgICAgICAgPyBUdXJib1JlcG8uYnVpbGRXb3JrZmxvd09wdGlvbnModHVyYm8ucmVtb3RlQ2FjaGVPcHRpb25zKVxuICAgICAgICA6IHt9O1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqXG4gICAgICogV29ya2Zsb3cgRGVwbG95IFR5cGVcbiAgICAgKlxuICAgICAqIFdoYXQgdHlwZSBvZiBlbnZpcm9ubWVudHMgYXJlIHdlIGRlcGxveWluZyBpbnRvPyBXZSdsbCBkZWZhdWx0IHRvIGRldiB0b1xuICAgICAqIGJlIHNhZmUuXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICB0aGlzLmF3c1N0YWdlVHlwZSA9IG9wdGlvbnMuYXdzU3RhZ2VUeXBlID8/IEFXU19TVEFHRV9UWVBFLkRFVjtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIFdvcmtmbG93IERlcGxveSBUYXJnZXRzXG4gICAgICpcbiAgICAgKiBVc2UgcHJvdmlkZWQgdGFyZ2V0cyBvciBkaXNjb3ZlciB0aGVtIGJhc2VkIG9uIHRoZSBkZXBsb3kgdHlwZS4gT25seVxuICAgICAqIGluY2x1ZGUgdGFyZ2V0cyB0aGF0IGFyZSBtYXJrZWQgZm9yIENJL0NELlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgdGhpcy5hd3NEZXBsb3ltZW50VGFyZ2V0cyA9XG4gICAgICBvcHRpb25zLmF3c0RlcGxveW1lbnRUYXJnZXRzID8/XG4gICAgICBBd3NEZXBsb3ltZW50Q29uZmlnLm9mKHByb2plY3QpPy5hd3NEZXBsb3ltZW50VGFyZ2V0cy5maWx0ZXIoXG4gICAgICAgICh0YXJnZXQpID0+XG4gICAgICAgICAgdGFyZ2V0LmF3c1N0YWdlVHlwZSA9PT0gdGhpcy5hd3NTdGFnZVR5cGUgJiYgdGFyZ2V0LmNpRGVwbG95bWVudCxcbiAgICAgICkgPz9cbiAgICAgIFtdO1xuXG4gICAgdGhpcy5kZXBsb3lBZnRlclRhcmdldHMgPSBvcHRpb25zLmRlcGxveUFmdGVyVGFyZ2V0cyA/PyBbXTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIEJ1aWxkIFdvcmtmbG93IE9wdGlvbnNcbiAgICAgKlxuICAgICAqIENhbid0IHVzZSB0aGUgb3B0aW9ucyBpZiBhbiBleGlzdGluZyB3b3JrZmxvdyB3YXMgcGFzc2VkIGluLlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgaWYgKG9wdGlvbnMuYnVpbGRXb3JrZmxvdyAmJiBvcHRpb25zLmJ1aWxkV29ya2Zsb3dPcHRpb25zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IHByb3ZpZGUgYm90aCBidWlsZFdvcmtmbG93IGFuZCBidWlsZFdvcmtmbG93T3B0aW9uc1wiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmV4dGVybmFsV29ya2Zsb3cgPSAhIW9wdGlvbnMuYnVpbGRXb3JrZmxvdztcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIEJ1aWxkIFdvcmtmbG93XG4gICAgICpcbiAgICAgKiBDcmVhdGUgYSB3b3JrZmxvdyBlaXRoZXIgYmFzZWQgb24gaW5wdXQgb3IgZnJvbSBzY3JhdGNoLlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgdGhpcy5idWlsZFdvcmtmbG93ID1cbiAgICAgIG9wdGlvbnMuYnVpbGRXb3JrZmxvdyA/P1xuICAgICAgbmV3IEJ1aWxkV29ya2Zsb3codGhpcy5yb290UHJvamVjdCwge1xuICAgICAgICAvKipcbiAgICAgICAgICogTmFtZSBiYXNlZCBvbiBwcm9qZWN0IGFuZCBlbnZpcm9ubWVudC5cbiAgICAgICAgICovXG4gICAgICAgIG5hbWU6IFtcbiAgICAgICAgICBcImRlcGxveVwiLFxuICAgICAgICAgIHByb2plY3QubmFtZSxcbiAgICAgICAgICB0aGlzLmF3c1N0YWdlVHlwZSxcbiAgICAgICAgICB0aGlzLmF3c0Vudmlyb25tZW50VHlwZSxcbiAgICAgICAgXS5qb2luKFwiLVwiKSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogVXNlIHRoZSByb290IHByb2plY3RzIGJ1aWxkIHRhc2suXG4gICAgICAgICAqL1xuICAgICAgICBidWlsZFRhc2s6IHRoaXMucm9vdFByb2plY3QuYnVpbGRUYXNrLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVc2UgcHVzaCB0cmlnZ2VycyBiYXNlZCBuIHRoZSBicmFuY2ggY29uZmlnIGZvciBlYWNoIGVudmlyb25tZW50LlxuICAgICAgICAgKi9cbiAgICAgICAgd29ya2Zsb3dUcmlnZ2Vyczoge1xuICAgICAgICAgIHB1c2g6IHtcbiAgICAgICAgICAgIGJyYW5jaGVzOiBbXG4gICAgICAgICAgICAgIC4uLnRoaXMuYXdzRGVwbG95bWVudFRhcmdldHMuZmxhdE1hcCgodCkgPT5cbiAgICAgICAgICAgICAgICB0LmJyYW5jaGVzLm1hcCgoYikgPT4gYi5icmFuY2gpLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdvcmtmbG93RGlzcGF0Y2g6IHt9LFxuICAgICAgICAgIC4uLm9wdGlvbnMuYnVpbGRXb3JrZmxvd09wdGlvbnM/LndvcmtmbG93VHJpZ2dlcnMsXG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE5ldmVyIGFsbG93IG11dGF0aW9ucyBmb3IgZGVwbG95cy4gVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGhhbmRsZWRcbiAgICAgICAgICogZHVyaW5nIGJ1aWxkLlxuICAgICAgICAgKi9cbiAgICAgICAgbXV0YWJsZUJ1aWxkOiBmYWxzZSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogRG8gdGhpcyBwcmUtbWVyZ2Ugb2YgcGVybWlzc2lvbnMgYW5kIGJ1aWxkIHN0ZXBzXG4gICAgICAgICAqL1xuICAgICAgICAuLi5vcHRpb25zLmJ1aWxkV29ya2Zsb3dPcHRpb25zLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTb21lIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbWF5IGJlIHJlcXVpcmVkIHdoZW4gdHVyYm8ncyBpbnZvbHZlZC5cbiAgICAgICAgICovXG4gICAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgICAgLi4ub3B0aW9ucy5idWlsZFdvcmtmbG93T3B0aW9ucz8ucGVybWlzc2lvbnMsXG4gICAgICAgICAgLi4uYnVpbGRXb3JrZmxvd09wdGlvbnM/LnBlcm1pc3Npb25zLFxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBc3NlbWJsZSBhbGwgcHJlLWJ1aWxkIHN0ZXBzXG4gICAgICAgICAqL1xuICAgICAgICBwcmVCdWlsZFN0ZXBzOiBbXG4gICAgICAgICAgLi4udGhpcy5zZXR1cFBucG0oKSxcbiAgICAgICAgICAuLi50aGlzLnNldHVwTm9kZSgpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiSW5zdGFsbCBkZXBlbmRlbmNpZXNcIixcbiAgICAgICAgICAgIHJ1bjogXCJwbnBtIGkgLS1uby1mcm96ZW4tbG9ja2ZpbGVcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLihvcHRpb25zLmJ1aWxkV29ya2Zsb3dPcHRpb25zPy5wcmVCdWlsZFN0ZXBzID8/IFtdKSxcbiAgICAgICAgICAuLi4oYnVpbGRXb3JrZmxvd09wdGlvbnM/LnByZUJ1aWxkU3RlcHMgPz8gW10pLFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBBZGQgRGVwbG95bWVudHMgdG8gd29ya2Zsb3dcbiAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIGNvbnN0IGJ1aWxkSm9iTmFtZSA9ICh0YXJnZXQ6IEF3c0RlcGxveW1lbnRUYXJnZXQpID0+IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHRhcmdldC5hd3NTdGFnZVR5cGUsXG4gICAgICAgIHRhcmdldC5hd3NFbnZpcm9ubWVudFR5cGUsXG4gICAgICAgIFwiZGVwbG95XCIsXG4gICAgICAgIHRhcmdldC5wcm9qZWN0Lm5hbWUsXG4gICAgICAgIHRhcmdldC5hY2NvdW50LFxuICAgICAgICB0YXJnZXQucmVnaW9uLFxuICAgICAgXS5qb2luKFwiLVwiKTtcbiAgICB9O1xuXG4gICAgdGhpcy5hd3NEZXBsb3ltZW50VGFyZ2V0cy5mb3JFYWNoKCh0YXJnZXQpID0+IHtcbiAgICAgIGNvbnN0IGRlcGxveUpvYk5hbWUgPSBidWlsZEpvYk5hbWUodGFyZ2V0KTtcblxuICAgICAgdGhpcy5idWlsZFdvcmtmbG93LmFkZFBvc3RCdWlsZEpvYihkZXBsb3lKb2JOYW1lLCB7XG4gICAgICAgIG5hbWU6IGBEZXBsb3kgJHt0aGlzLnByb2plY3QubmFtZX0gJHt0YXJnZXQuYXdzU3RhZ2VUeXBlfS8ke3RhcmdldC5hd3NFbnZpcm9ubWVudFR5cGV9LyR7dGFyZ2V0LmFjY291bnR9LyR7dGFyZ2V0LnJlZ2lvbn1gLFxuICAgICAgICBuZWVkczogW1xuICAgICAgICAgIFwiYnVpbGRcIixcbiAgICAgICAgICAuLi50aGlzLmRlcGxveUFmdGVyVGFyZ2V0cy5tYXAoKHApID0+IHtcbiAgICAgICAgICAgIHJldHVybiBidWlsZEpvYk5hbWUocCk7XG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICAgIHJ1bnNPbjogW1widWJ1bnR1LWxhdGVzdFwiXSxcbiAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICAgIGlkVG9rZW46IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmN1cnJlbmN5OiBkZXBsb3lKb2JOYW1lLFxuICAgICAgICBzdGVwczogWy4uLnRoaXMuZGVwbG95U3RlcHModGFyZ2V0KV0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXR1cE5vZGUgPSAoKTogQXJyYXk8Sm9iU3RlcD4gPT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiU2V0dXAgTm9kZVwiLFxuICAgICAgICB1c2VzOiBcImFjdGlvbnMvc2V0dXAtbm9kZUB2NFwiLFxuICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgW1wibm9kZS12ZXJzaW9uXCJdOiBWRVJTSU9OLk5PREVfV09SS0ZMT1dTLFxuICAgICAgICB9LFxuICAgICAgICAvLyBvY2Nhc2lvbmFsbHkgdGhpcyBzdGVwIGZhaWxzIGR1ZSB0byBpbnRlcm5hbCBpc3N1ZXMgYXQgZ2l0aHViXG4gICAgICAgIHRpbWVvdXRNaW51dGVzOiAxLFxuICAgICAgfSxcbiAgICBdO1xuICB9O1xuXG4gIHB1YmxpYyBzZXR1cFBucG0gPSAoKTogQXJyYXk8Sm9iU3RlcD4gPT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiU2V0dXAgUE5QTVwiLFxuICAgICAgICB1c2VzOiBcInBucG0vYWN0aW9uLXNldHVwQHYzXCIsXG4gICAgICAgIHdpdGg6IHtcbiAgICAgICAgICB2ZXJzaW9uOiBWRVJTSU9OLlBOUE1fVkVSU0lPTixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfTtcblxuICBwcml2YXRlIGRlcGxveVN0ZXBzID0gKHRhcmdldDogQXdzRGVwbG95bWVudFRhcmdldCk6IEFycmF5PEpvYlN0ZXA+ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBhd3NTdGFnZVR5cGUsXG4gICAgICBhd3NFbnZpcm9ubWVudFR5cGUsXG4gICAgICBhY2NvdW50LFxuICAgICAgcmVnaW9uLFxuICAgICAgY2lEZXBsb3ltZW50Q29uZmlnLFxuICAgICAgYXdzRGVwbG95bWVudENvbmZpZyxcbiAgICB9ID0gdGFyZ2V0O1xuICAgIGNvbnN0IHsgcm9sZUFybiwgc3RhY2tQYXR0ZXJuIH0gPSBjaURlcGxveW1lbnRDb25maWcgPz8ge307XG4gICAgY29uc3QgeyByb290Q2RrT3V0IH0gPSBhd3NEZXBsb3ltZW50Q29uZmlnO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLnRoaXMuc2V0dXBQbnBtKCksXG4gICAgICAuLi50aGlzLnNldHVwTm9kZSgpLFxuXG4gICAgICAvKipcbiAgICAgICAqIEluc3RhbGwgQ0RLXG4gICAgICAgKi9cbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJJbnN0YWxsIENES1wiLFxuICAgICAgICBydW46IFwicG5wbSBhZGQgYXdzLWNka1wiLFxuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBDb25maWd1cmUgQVdTIGNyZWRzLlxuICAgICAgICovXG4gICAgICB7XG4gICAgICAgIG5hbWU6IGBBV1MgQ3JlZHMgJHthd3NTdGFnZVR5cGV9LyR7YXdzRW52aXJvbm1lbnRUeXBlfS8ke2FjY291bnR9LyR7cmVnaW9ufWAsXG4gICAgICAgIHVzZXM6IFwiYXdzLWFjdGlvbnMvY29uZmlndXJlLWF3cy1jcmVkZW50aWFsc0B2NFwiLFxuICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgXCJyb2xlLXRvLWFzc3VtZVwiOiByb2xlQXJuLFxuICAgICAgICAgIFwiYXdzLXJlZ2lvblwiOiByZWdpb24sXG4gICAgICAgICAgXCJyb2xlLWR1cmF0aW9uLXNlY29uZHNcIjogOTAwLCAvLyAxNSBtaW51dGVzXG4gICAgICAgIH0sXG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIFJ1biBDREsgRGVwbG95XG4gICAgICAgKi9cbiAgICAgIHtcbiAgICAgICAgbmFtZTogYERlcGxveSAke2F3c1N0YWdlVHlwZX0vJHthd3NFbnZpcm9ubWVudFR5cGV9LyR7YWNjb3VudH0vJHtyZWdpb259YCxcbiAgICAgICAgcnVuOiBgcG5wbSBkbHggYXdzLWNkayBkZXBsb3kgLS1uby1yb2xsYmFjayAtLXJlcXVpcmUtYXBwcm92YWw9bmV2ZXIgLS1hcHA9JHtyb290Q2RrT3V0fSBcIiR7c3RhY2tQYXR0ZXJufVwiYCxcbiAgICAgIH0sXG4gICAgXTtcbiAgfTtcblxuICBwcmVTeW50aGVzaXplKCk6IHZvaWQge1xuICAgIC8qKlxuICAgICAqIEVuc3VyZSB0dXJibyBpcyBhY3RpdmUgd2hlbiBuZWVkZWQuXG4gICAgICovXG4gICAgaWYgKCF0aGlzLmV4dGVybmFsV29ya2Zsb3cgJiYgVHVyYm9SZXBvLm9mKHRoaXMucm9vdFByb2plY3QpKSB7XG4gICAgICB0aGlzLmJ1aWxkV29ya2Zsb3cuYWRkUG9zdEJ1aWxkU3RlcHMoe1xuICAgICAgICBuYW1lOiBcIkJ1aWxkIFN1YiBQcm9qZWN0c1wiLFxuICAgICAgICBydW46IGBucHggcHJvamVuICR7Uk9PVF9DSV9UQVNLX05BTUV9YCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHN1cGVyLnByZVN5bnRoZXNpemUoKTtcbiAgfVxufVxuIl19
269
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWRlcGxveS13b3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3JrZmxvd3MvYXdzLWRlcGxveS13b3JrZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFFbkMsNENBQXVFO0FBQ3ZFLDhDQUEyQztBQUMzQyx1RUFBMkU7QUFFM0UsZ0NBQTZDO0FBQzdDLHdFQU1zQztBQUN0QywwQ0FBOEM7QUFDOUMsb0NBQXdEO0FBQ3hELDBDQUFzQztBQUV6QixRQUFBLGdCQUFnQixHQUFHLGFBQWEsQ0FBQztBQWtDOUMsTUFBYSxpQkFBa0IsU0FBUSxrQkFBUztJQUN2QyxNQUFNLENBQUMsRUFBRSxDQUNkLE9BQTRCLEVBQzVCLGFBQTRCO1FBRTVCLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBWSxFQUEwQixFQUFFLENBQ3pELENBQUMsWUFBWSxpQkFBaUIsSUFBSSxDQUFDLENBQUMsYUFBYSxLQUFLLGFBQWEsQ0FBQztRQUN0RSxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUF1Q0QsWUFDUyxPQUE0QixFQUNuQyxVQUFpQyxFQUFFO1FBRW5DLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUhSLFlBQU8sR0FBUCxPQUFPLENBQXFCO1FBNUJyQzs7OztXQUlHO1FBQ0ksdUJBQWtCLEdBQXVCLDRDQUFvQixDQUFDLE9BQU8sQ0FBQztRQTZPdEUsY0FBUyxHQUFHLEdBQW1CLEVBQUU7WUFDdEMsT0FBTztnQkFDTDtvQkFDRSxJQUFJLEVBQUUsWUFBWTtvQkFDbEIsSUFBSSxFQUFFLHVCQUF1QjtvQkFDN0IsSUFBSSxFQUFFO3dCQUNKLENBQUMsY0FBYyxDQUFDLEVBQUUsa0JBQU8sQ0FBQyxjQUFjO3FCQUN6QztvQkFDRCxnRUFBZ0U7b0JBQ2hFLGNBQWMsRUFBRSxDQUFDO2lCQUNsQjthQUNGLENBQUM7UUFDSixDQUFDLENB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SSxJQUFJLE1BQU0sQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLGtCQUFrQixJQUFJLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtnQkFDMUgsS0FBSyxFQUFFO29CQUNMLE9BQU87b0JBQ1AsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7d0JBQ25DLE9BQU8sWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN6QixDQUFDLENBQUM7aUJBQ0g7Z0JBQ0QsTUFBTSxFQUFFLENBQUMsZUFBZSxDQUFDO2dCQUN6QixXQUFXLEVBQUU7b0JBQ1gsUUFBUSxFQUFFLCtCQUFhLENBQUMsSUFBSTtvQkFDNUIsT0FBTyxFQUFFLCtCQUFhLENBQUMsS0FBSztpQkFDN0I7Z0JBQ0QsV0FBVyxFQUFFLGFBQWE7Z0JBQzFCLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNyQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUEyRUQsYUFBYTtRQUNYOztXQUVHO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxpQkFBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUM3RCxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDO2dCQUNuQyxJQUFJLEVBQUUsb0JBQW9CO2dCQUMxQixHQUFHLEVBQUUsY0FBYyx5QkFBaUIsRUFBRTthQUN2QyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3hCLENBQUM7Q0FDRjtBQTVWRCw4Q0E0VkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwicHJvamVuXCI7XG5pbXBvcnQgeyBBd3NDZGtUeXBlU2NyaXB0QXBwIH0gZnJvbSBcInByb2plbi9saWIvYXdzY2RrXCI7XG5pbXBvcnQgeyBCdWlsZFdvcmtmbG93LCBCdWlsZFdvcmtmbG93T3B0aW9ucyB9IGZyb20gXCJwcm9qZW4vbGliL2J1aWxkXCI7XG5pbXBvcnQgeyBHaXRIdWIgfSBmcm9tIFwicHJvamVuL2xpYi9naXRodWJcIjtcbmltcG9ydCB7IEpvYlBlcm1pc3Npb24sIEpvYlN0ZXAgfSBmcm9tIFwicHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsXCI7XG5pbXBvcnQgeyBWYWx1ZU9mIH0gZnJvbSBcInR5cGUtZmVzdFwiO1xuaW1wb3J0IHsgQXdzRGVwbG95bWVudENvbmZpZyB9IGZyb20gXCIuLi9hd3NcIjtcbmltcG9ydCB7XG4gIEFXU19FTlZJUk9OTUVOVF9UWVBFLFxuICBBV1NfU1RBR0VfVFlQRSxcbiAgQXdzRGVwbG95bWVudFRhcmdldCxcbiAgQXdzRW52aXJvbm1lbnRUeXBlLFxuICBBd3NTdGFnZVR5cGUsXG59IGZyb20gXCIuLi9hd3MvYXdzLWRlcGxveW1lbnQtdGFyZ2V0XCI7XG5pbXBvcnQgeyBNb25vcmVwb1Byb2plY3QgfSBmcm9tIFwiLi4vcHJvamVjdHNcIjtcbmltcG9ydCB7IFJPT1RfQ0lfVEFTS19OQU1FLCBUdXJib1JlcG8gfSBmcm9tIFwiLi4vdHVyYm9cIjtcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tIFwiLi4vdmVyc2lvbnNcIjtcblxuZXhwb3J0IGNvbnN0IFBST0RfREVQTE9ZX05BTUUgPSBcInByb2QtZGVwbG95XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95V29ya2Zsb3dPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoYXQgdHlwZSBvZiBkZXBsb3kgaXMgdGhpcyB3b3JrZmxvdyBmb3I/XG4gICAqXG4gICAqIEBkZWZhdWx0IEFXU19TVEFHRV9UWVBFLkRFVlxuICAgKi9cbiAgcmVhZG9ubHkgYXdzU3RhZ2VUeXBlPzogVmFsdWVPZjx0eXBlb2YgQVdTX1NUQUdFX1RZUEU+O1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbGx5IGZlZWQgYSBsaXN0IG9mIHRhcmdldHMgdG8gZGVwbG95IHRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBkaXNjb3ZlcnMgYWxsIHRhcmdldHMgdXNpbmcgc3RhZ2VUeXBlXG4gICAqL1xuICByZWFkb25seSBhd3NEZXBsb3ltZW50VGFyZ2V0cz86IEFycmF5PEF3c0RlcGxveW1lbnRUYXJnZXQ+O1xuXG4gIC8qKlxuICAgKiBFeGlzdGluZyB3b3JrZmxvdywgdXNlZnVsIGlmIHdlJ3JlIHRhY2tpbmcgZGVwbG95bWVudHMgb250byBhbiBleGlzdGluZ1xuICAgKiBidWlsZCB3b3JrZmxvd1xuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRXb3JrZmxvdz86IEJ1aWxkV29ya2Zsb3c7XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIHRoZSBidWlsZCB3b3JrZmxvdywgaWYgbm8gYnVpbGQgd29ya2Zsb3cgaXMgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBidWlsZFdvcmtmbG93T3B0aW9ucz86IFBhcnRpYWw8QnVpbGRXb3JrZmxvd09wdGlvbnM+O1xuXG4gIC8qKlxuICAgKiBQcm9qZWN0cyB0aGF0IHNob3VsZCBjb21wbGV0ZSBkZXBsb3ltZW50IGJlZm9yZSB0aGlzIG9uZSBzdGFydHMuXG4gICAqL1xuICByZWFkb25seSBkZXBsb3lBZnRlclRhcmdldHM/OiBBcnJheTxBd3NEZXBsb3ltZW50VGFyZ2V0Pjtcbn1cblxuZXhwb3J0IGNsYXNzIEF3c0RlcGxveVdvcmtmbG93IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcHVibGljIHN0YXRpYyBvZihcbiAgICBwcm9qZWN0OiBBd3NDZGtUeXBlU2NyaXB0QXBwLFxuICAgIGJ1aWxkV29ya2Zsb3c6IEJ1aWxkV29ya2Zsb3csXG4gICk6IEF3c0RlcGxveVdvcmtmbG93IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpc0RlZmluZWQgPSAoYzogQ29tcG9uZW50KTogYyBpcyBBd3NEZXBsb3lXb3JrZmxvdyA9PlxuICAgICAgYyBpbnN0YW5jZW9mIEF3c0RlcGxveVdvcmtmbG93ICYmIGMuYnVpbGRXb3JrZmxvdyA9PT0gYnVpbGRXb3JrZmxvdztcbiAgICByZXR1cm4gcHJvamVjdC5jb21wb25lbnRzLmZpbmQoaXNEZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcm9vdCBwcm9qZWN0IGZvciB0aGlzIGRlcGxveSB3b3JrZmxvdy4gTXVzdCBiZSBhIG1vbm9yZXBvIHByb2plY3QuXG4gICAqL1xuICBwcml2YXRlIHJvb3RQcm9qZWN0OiBNb25vcmVwb1Byb2plY3Q7XG5cbiAgLyoqXG4gICAqIFdoYXQgdHlwZSBvZiBkZXBsb3kgaXMgdGhpcyB3b3JrZmxvdyBmb3I/XG4gICAqL1xuICBwdWJsaWMgYXdzU3RhZ2VUeXBlOiBBd3NTdGFnZVR5cGU7XG5cbiAgLyoqXG4gICAqIEFXUyBlbnZpcm9ubWVudCB0eXBlLCBzdWNoIGFzIHByaW1hcnkgb3Igc2Vjb25kYXJ5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAncHJpbWFyeScgKHRoaXMgaXMgdGhlIG9ubHkgdHlwZSBzdXBwb3J0ZWQgY3VycmVudGx5KVxuICAgKi9cbiAgcHVibGljIGF3c0Vudmlyb25tZW50VHlwZTogQXdzRW52aXJvbm1lbnRUeXBlID0gQVdTX0VOVklST05NRU5UX1RZUEUuUFJJTUFSWTtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgdGFyZ2V0cyB0byBkZXBsb3kgdG8uXG4gICAqL1xuICByZWFkb25seSBhd3NEZXBsb3ltZW50VGFyZ2V0czogQXJyYXk8QXdzRGVwbG95bWVudFRhcmdldD47XG5cbiAgLyoqXG4gICAqIEhvbGQgdGhlIGRlcGxveSB3b3JrZmxvdyBzbyB3ZSBjYW4gYWRkIHRvIGl0IGluIHByZVN5bnRoXG4gICAqL1xuICBwdWJsaWMgYnVpbGRXb3JrZmxvdzogQnVpbGRXb3JrZmxvdztcblxuICAvKipcbiAgICogV2FzIHRoaXMgd29ya2Zsb3cgY3JlYXRlZCBleHRlcm5hbGx5P1xuICAgKi9cbiAgcHVibGljIGV4dGVybmFsV29ya2Zsb3c6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFByb2plY3RzIHRoYXQgc2hvdWxkIGNvbXBsZXRlIGRlcGxveW1lbnQgYmVmb3JlIHRoaXMgb25lIHN0YXJ0cy5cbiAgICovXG4gIHB1YmxpYyBkZXBsb3lBZnRlclRhcmdldHM6IEFycmF5PEF3c0RlcGxveW1lbnRUYXJnZXQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBwcm9qZWN0OiBBd3NDZGtUeXBlU2NyaXB0QXBwLFxuICAgIG9wdGlvbnM6IERlcGxveVdvcmtmbG93T3B0aW9ucyA9IHt9LFxuICApIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIFJvb3QgcHJvamVjdCBjaGVja1xuICAgICAqXG4gICAgICogRGV0ZWN0IHRoZSByb290IHByb2plY3QgYW5kIGVuc3VyZSBpdCdzIG9mIHR5cGUgTW9ub3JlcG9Qcm9qZWN0LlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgaWYgKCEocHJvamVjdC5yb290IGluc3RhbmNlb2YgTW9ub3JlcG9Qcm9qZWN0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkF3c0RlcGxveVdvcmtmbG93IHJlcXVpcmVzIHRoZSByb290IHByb2plY3QgdG8gYmUgYSBNb25vcmVwb1Byb2plY3RcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5yb290UHJvamVjdCA9IHByb2plY3Qucm9vdDtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIEdpdEh1YiBDaGVja1xuICAgICAqXG4gICAgICogTWFrZSBzdXJlIGdpdGh1YiBjb25maWcgaXMgYWN0aXZlIGluIHRoZSBwcm9qZWN0LiBUaGlzIGlzIHRvIGVuc3VyZSBhbGxcbiAgICAgKiB3b3JrZmxvd3Mgd2lsbCBiZSBvdXRwdXQgcHJvcGVybHkgZHVyaW5nIHN5bnRoLlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgY29uc3QgZ2l0aHViID0gR2l0SHViLm9mKHRoaXMucm9vdFByb2plY3QpO1xuXG4gICAgaWYgKCFnaXRodWIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJBd3NEZXBsb3lXb3JrZmxvdyByZXF1aXJlcyBhIEdpdEh1YiBjb21wb25lbnQgaW4gdGhlIHJvb3QgcHJvamVjdFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBUdXJib1JlcG8gQ2hlY2tcbiAgICAgKlxuICAgICAqIElmIHR1cmJvIGlzIGVuYWJsZWQsIHdlIG1heSBuZWVkIHRoZSBvcHRpb25zIGxhdGVyIGluIHRoaXMgZmlsZS5cbiAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIGNvbnN0IHR1cmJvID0gVHVyYm9SZXBvLm9mKHRoaXMucm9vdFByb2plY3QpO1xuICAgIGNvbnN0IGJ1aWxkV29ya2Zsb3dPcHRpb25zOiBQYXJ0aWFsPEJ1aWxkV29ya2Zsb3dPcHRpb25zPiA9XG4gICAgICB0dXJibz8ucmVtb3RlQ2FjaGVPcHRpb25zXG4gICAgICAgID8gVHVyYm9SZXBvLmJ1aWxkV29ya2Zsb3dPcHRpb25zKHR1cmJvLnJlbW90ZUNhY2hlT3B0aW9ucylcbiAgICAgICAgOiB7fTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIFdvcmtmbG93IERlcGxveSBUeXBlXG4gICAgICpcbiAgICAgKiBXaGF0IHR5cGUgb2YgZW52aXJvbm1lbnRzIGFyZSB3ZSBkZXBsb3lpbmcgaW50bz8gV2UnbGwgZGVmYXVsdCB0byBkZXYgdG9cbiAgICAgKiBiZSBzYWZlLlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgdGhpcy5hd3NTdGFnZVR5cGUgPSBvcHRpb25zLmF3c1N0YWdlVHlwZSA/PyBBV1NfU1RBR0VfVFlQRS5ERVY7XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBXb3JrZmxvdyBEZXBsb3kgVGFyZ2V0c1xuICAgICAqXG4gICAgICogVXNlIHByb3ZpZGVkIHRhcmdldHMgb3IgZGlzY292ZXIgdGhlbSBiYXNlZCBvbiB0aGUgZGVwbG95IHR5cGUuIE9ubHlcbiAgICAgKiBpbmNsdWRlIHRhcmdldHMgdGhhdCBhcmUgbWFya2VkIGZvciBDSS9DRC5cbiAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIHRoaXMuYXdzRGVwbG95bWVudFRhcmdldHMgPVxuICAgICAgb3B0aW9ucy5hd3NEZXBsb3ltZW50VGFyZ2V0cyA/P1xuICAgICAgQXdzRGVwbG95bWVudENvbmZpZy5vZihwcm9qZWN0KT8uYXdzRGVwbG95bWVudFRhcmdldHMuZmlsdGVyKFxuICAgICAgICAodGFyZ2V0KSA9PlxuICAgICAgICAgIHRhcmdldC5hd3NTdGFnZVR5cGUgPT09IHRoaXMuYXdzU3RhZ2VUeXBlICYmIHRhcmdldC5jaURlcGxveW1lbnQsXG4gICAgICApID8/XG4gICAgICBbXTtcblxuICAgIHRoaXMuZGVwbG95QWZ0ZXJUYXJnZXRzID0gb3B0aW9ucy5kZXBsb3lBZnRlclRhcmdldHMgPz8gW107XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBCdWlsZCBXb3JrZmxvdyBPcHRpb25zXG4gICAgICpcbiAgICAgKiBDYW4ndCB1c2UgdGhlIG9wdGlvbnMgaWYgYW4gZXhpc3Rpbmcgd29ya2Zsb3cgd2FzIHBhc3NlZCBpbi5cbiAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIGlmIChvcHRpb25zLmJ1aWxkV29ya2Zsb3cgJiYgb3B0aW9ucy5idWlsZFdvcmtmbG93T3B0aW9ucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCBwcm92aWRlIGJvdGggYnVpbGRXb3JrZmxvdyBhbmQgYnVpbGRXb3JrZmxvd09wdGlvbnNcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5leHRlcm5hbFdvcmtmbG93ID0gISFvcHRpb25zLmJ1aWxkV29ya2Zsb3c7XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBCdWlsZCBXb3JrZmxvd1xuICAgICAqXG4gICAgICogQ3JlYXRlIGEgd29ya2Zsb3cgZWl0aGVyIGJhc2VkIG9uIGlucHV0IG9yIGZyb20gc2NyYXRjaC5cbiAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIHRoaXMuYnVpbGRXb3JrZmxvdyA9XG4gICAgICBvcHRpb25zLmJ1aWxkV29ya2Zsb3cgPz9cbiAgICAgIG5ldyBCdWlsZFdvcmtmbG93KHRoaXMucm9vdFByb2plY3QsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE5hbWUgYmFzZWQgb24gcHJvamVjdCBhbmQgZW52aXJvbm1lbnQuXG4gICAgICAgICAqL1xuICAgICAgICBuYW1lOlxuICAgICAgICAgIG9wdGlvbnMuYnVpbGRXb3JrZmxvd09wdGlvbnM/Lm5hbWUgPz9cbiAgICAgICAgICBbXG4gICAgICAgICAgICBcImRlcGxveVwiLFxuICAgICAgICAgICAgcHJvamVjdC5uYW1lLFxuICAgICAgICAgICAgdGhpcy5hd3NTdGFnZVR5cGUsXG4gICAgICAgICAgICB0aGlzLmF3c0Vudmlyb25tZW50VHlwZSxcbiAgICAgICAgICBdLmpvaW4oXCItXCIpLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVc2UgdGhlIHJvb3QgcHJvamVjdHMgYnVpbGQgdGFzay5cbiAgICAgICAgICovXG4gICAgICAgIGJ1aWxkVGFzazogdGhpcy5yb290UHJvamVjdC5idWlsZFRhc2ssXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVzZSBwdXNoIHRyaWdnZXJzIGJhc2VkIG4gdGhlIGJyYW5jaCBjb25maWcgZm9yIGVhY2ggZW52aXJvbm1lbnQuXG4gICAgICAgICAqL1xuICAgICAgICB3b3JrZmxvd1RyaWdnZXJzOiB7XG4gICAgICAgICAgcHVzaDoge1xuICAgICAgICAgICAgYnJhbmNoZXM6IFtcbiAgICAgICAgICAgICAgLi4udGhpcy5hd3NEZXBsb3ltZW50VGFyZ2V0cy5mbGF0TWFwKCh0KSA9PlxuICAgICAgICAgICAgICAgIHQuYnJhbmNoZXMubWFwKChiKSA9PiBiLmJyYW5jaCksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgd29ya2Zsb3dEaXNwYXRjaDoge30sXG4gICAgICAgICAgLi4ub3B0aW9ucy5idWlsZFdvcmtmbG93T3B0aW9ucz8ud29ya2Zsb3dUcmlnZ2VycyxcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogTmV2ZXIgYWxsb3cgbXV0YXRpb25zIGZvciBkZXBsb3lzLiBUaGlzIHNob3VsZCBoYXZlIGJlZW4gaGFuZGxlZFxuICAgICAgICAgKiBkdXJpbmcgYnVpbGQuXG4gICAgICAgICAqL1xuICAgICAgICBtdXRhYmxlQnVpbGQ6IGZhbHNlLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEbyB0aGlzIHByZS1tZXJnZSBvZiBwZXJtaXNzaW9ucyBhbmQgYnVpbGQgc3RlcHNcbiAgICAgICAgICovXG4gICAgICAgIC4uLm9wdGlvbnMuYnVpbGRXb3JrZmxvd09wdGlvbnMsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNvbWUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgcmVxdWlyZWQgd2hlbiB0dXJibydzIGludm9sdmVkLlxuICAgICAgICAgKi9cbiAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICAuLi5vcHRpb25zLmJ1aWxkV29ya2Zsb3dPcHRpb25zPy5wZXJtaXNzaW9ucyxcbiAgICAgICAgICAuLi5idWlsZFdvcmtmbG93T3B0aW9ucz8ucGVybWlzc2lvbnMsXG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFzc2VtYmxlIGFsbCBwcmUtYnVpbGQgc3RlcHNcbiAgICAgICAgICovXG4gICAgICAgIHByZUJ1aWxkU3RlcHM6IFtcbiAgICAgICAgICAuLi50aGlzLnNldHVwUG5wbSgpLFxuICAgICAgICAgIC4uLnRoaXMuc2V0dXBOb2RlKCksXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJJbnN0YWxsIGRlcGVuZGVuY2llc1wiLFxuICAgICAgICAgICAgcnVuOiBcInBucG0gaSAtLW5vLWZyb3plbi1sb2NrZmlsZVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uKG9wdGlvbnMuYnVpbGRXb3JrZmxvd09wdGlvbnM/LnByZUJ1aWxkU3RlcHMgPz8gW10pLFxuICAgICAgICAgIC4uLihidWlsZFdvcmtmbG93T3B0aW9ucz8ucHJlQnVpbGRTdGVwcyA/PyBbXSksXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIEFkZCBEZXBsb3ltZW50cyB0byB3b3JrZmxvd1xuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgY29uc3QgYnVpbGRKb2JOYW1lID0gKHRhcmdldDogQXdzRGVwbG95bWVudFRhcmdldCkgPT4ge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGFyZ2V0LmF3c1N0YWdlVHlwZSxcbiAgICAgICAgdGFyZ2V0LmF3c0Vudmlyb25tZW50VHlwZSxcbiAgICAgICAgXCJkZXBsb3lcIixcbiAgICAgICAgdGFyZ2V0LnByb2plY3QubmFtZSxcbiAgICAgICAgdGFyZ2V0LmFjY291bnQsXG4gICAgICAgIHRhcmdldC5yZWdpb24sXG4gICAgICBdLmpvaW4oXCItXCIpO1xuICAgIH07XG5cbiAgICB0aGlzLmF3c0RlcGxveW1lbnRUYXJnZXRzLmZvckVhY2goKHRhcmdldCkgPT4ge1xuICAgICAgY29uc3QgZGVwbG95Sm9iTmFtZSA9IGJ1aWxkSm9iTmFtZSh0YXJnZXQpO1xuXG4gICAgICB0aGlzLmJ1aWxkV29ya2Zsb3cuYWRkUG9zdEJ1aWxkSm9iKGRlcGxveUpvYk5hbWUsIHtcbiAgICAgICAgbmFtZTogYERlcGxveSAke3RoaXMucHJvamVjdC5uYW1lfSAke3RhcmdldC5hd3NTdGFnZVR5cGV9LyR7dGFyZ2V0LmF3c0Vudmlyb25tZW50VHlwZX0vJHt0YXJnZXQuYWNjb3VudH0vJHt0YXJnZXQucmVnaW9ufWAsXG4gICAgICAgIG5lZWRzOiBbXG4gICAgICAgICAgXCJidWlsZFwiLFxuICAgICAgICAgIC4uLnRoaXMuZGVwbG95QWZ0ZXJUYXJnZXRzLm1hcCgocCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkSm9iTmFtZShwKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgICAgcnVuc09uOiBbXCJ1YnVudHUtbGF0ZXN0XCJdLFxuICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgICAgaWRUb2tlbjogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgfSxcbiAgICAgICAgY29uY3VycmVuY3k6IGRlcGxveUpvYk5hbWUsXG4gICAgICAgIHN0ZXBzOiBbLi4udGhpcy5kZXBsb3lTdGVwcyh0YXJnZXQpXSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldHVwTm9kZSA9ICgpOiBBcnJheTxKb2JTdGVwPiA9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJTZXR1cCBOb2RlXCIsXG4gICAgICAgIHVzZXM6IFwiYWN0aW9ucy9zZXR1cC1ub2RlQHY0XCIsXG4gICAgICAgIHdpdGg6IHtcbiAgICAgICAgICBbXCJub2RlLXZlcnNpb25cIl06IFZFUlNJT04uTk9ERV9XT1JLRkxPV1MsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIG9jY2FzaW9uYWxseSB0aGlzIHN0ZXAgZmFpbHMgZHVlIHRvIGludGVybmFsIGlzc3VlcyBhdCBnaXRodWJcbiAgICAgICAgdGltZW91dE1pbnV0ZXM6IDEsXG4gICAgICB9LFxuICAgIF07XG4gIH07XG5cbiAgcHVibGljIHNldHVwUG5wbSA9ICgpOiBBcnJheTxKb2JTdGVwPiA9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJTZXR1cCBQTlBNXCIsXG4gICAgICAgIHVzZXM6IFwicG5wbS9hY3Rpb24tc2V0dXBAdjNcIixcbiAgICAgICAgd2l0aDoge1xuICAgICAgICAgIHZlcnNpb246IFZFUlNJT04uUE5QTV9WRVJTSU9OLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdO1xuICB9O1xuXG4gIHByaXZhdGUgZGVwbG95U3RlcHMgPSAodGFyZ2V0OiBBd3NEZXBsb3ltZW50VGFyZ2V0KTogQXJyYXk8Sm9iU3RlcD4gPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGF3c1N0YWdlVHlwZSxcbiAgICAgIGF3c0Vudmlyb25tZW50VHlwZSxcbiAgICAgIGFjY291bnQsXG4gICAgICByZWdpb24sXG4gICAgICBjaURlcGxveW1lbnRDb25maWcsXG4gICAgICBhd3NEZXBsb3ltZW50Q29uZmlnLFxuICAgIH0gPSB0YXJnZXQ7XG4gICAgY29uc3QgeyByb2xlQXJuLCBzdGFja1BhdHRlcm4gfSA9IGNpRGVwbG95bWVudENvbmZpZyA/PyB7fTtcbiAgICBjb25zdCB7IHJvb3RDZGtPdXQgfSA9IGF3c0RlcGxveW1lbnRDb25maWc7XG5cbiAgICByZXR1cm4gW1xuICAgICAgLi4udGhpcy5zZXR1cFBucG0oKSxcbiAgICAgIC4uLnRoaXMuc2V0dXBOb2RlKCksXG5cbiAgICAgIC8qKlxuICAgICAgICogSW5zdGFsbCBDREtcbiAgICAgICAqL1xuICAgICAge1xuICAgICAgICBuYW1lOiBcIkluc3RhbGwgQ0RLXCIsXG4gICAgICAgIHJ1bjogXCJwbnBtIGFkZCBhd3MtY2RrXCIsXG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIENvbmZpZ3VyZSBBV1MgY3JlZHMuXG4gICAgICAgKi9cbiAgICAgIHtcbiAgICAgICAgbmFtZTogYEFXUyBDcmVkcyAke2F3c1N0YWdlVHlwZX0vJHthd3NFbnZpcm9ubWVudFR5cGV9LyR7YWNjb3VudH0vJHtyZWdpb259YCxcbiAgICAgICAgdXNlczogXCJhd3MtYWN0aW9ucy9jb25maWd1cmUtYXdzLWNyZWRlbnRpYWxzQHY0XCIsXG4gICAgICAgIHdpdGg6IHtcbiAgICAgICAgICBcInJvbGUtdG8tYXNzdW1lXCI6IHJvbGVBcm4sXG4gICAgICAgICAgXCJhd3MtcmVnaW9uXCI6IHJlZ2lvbixcbiAgICAgICAgICBcInJvbGUtZHVyYXRpb24tc2Vjb25kc1wiOiA5MDAsIC8vIDE1IG1pbnV0ZXNcbiAgICAgICAgfSxcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogUnVuIENESyBEZXBsb3lcbiAgICAgICAqL1xuICAgICAge1xuICAgICAgICBuYW1lOiBgRGVwbG95ICR7YXdzU3RhZ2VUeXBlfS8ke2F3c0Vudmlyb25tZW50VHlwZX0vJHthY2NvdW50fS8ke3JlZ2lvbn1gLFxuICAgICAgICBydW46IGBwbnBtIGRseCBhd3MtY2RrIGRlcGxveSAtLW5vLXJvbGxiYWNrIC0tcmVxdWlyZS1hcHByb3ZhbD1uZXZlciAtLWFwcD0ke3Jvb3RDZGtPdXR9IFwiJHtzdGFja1BhdHRlcm59XCJgLFxuICAgICAgfSxcbiAgICBdO1xuICB9O1xuXG4gIHByZVN5bnRoZXNpemUoKTogdm9pZCB7XG4gICAgLyoqXG4gICAgICogRW5zdXJlIHR1cmJvIGlzIGFjdGl2ZSB3aGVuIG5lZWRlZC5cbiAgICAgKi9cbiAgICBpZiAoIXRoaXMuZXh0ZXJuYWxXb3JrZmxvdyAmJiBUdXJib1JlcG8ub2YodGhpcy5yb290UHJvamVjdCkpIHtcbiAgICAgIHRoaXMuYnVpbGRXb3JrZmxvdy5hZGRQb3N0QnVpbGRTdGVwcyh7XG4gICAgICAgIG5hbWU6IFwiQnVpbGQgU3ViIFByb2plY3RzXCIsXG4gICAgICAgIHJ1bjogYG5weCBwcm9qZW4gJHtST09UX0NJX1RBU0tfTkFNRX1gLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3VwZXIucHJlU3ludGhlc2l6ZSgpO1xuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -40,7 +40,7 @@
40
40
  },
41
41
  "main": "lib/index.js",
42
42
  "license": "MIT",
43
- "version": "0.0.49",
43
+ "version": "0.0.51",
44
44
  "types": "lib/index.d.ts",
45
45
  "//": "~~ Generated by projen. To modify, edit .projenrc.ts and run \"npx projen\".",
46
46
  "scripts": {